diff --git a/DEPS b/DEPS index e88c938..9ec7af0 100644 --- a/DEPS +++ b/DEPS
@@ -207,11 +207,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': '2296e7afd74851bd287f46f06864b904365b05ce', + 'angle_revision': '06b4fb92c569f8e26eeab003e2f71851c60aa429', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. - 'swiftshader_revision': '41974f57973ebcdab4cfde6cc60354f6b79a5901', + 'swiftshader_revision': '0f14b7ab7a550971c97090a7cd4b9910084fe7ea', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. @@ -266,7 +266,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': 'd1b7c5ca690cf6874aa2f69713048a688ed1f1b0', + 'devtools_frontend_revision': 'bc83da97d26c4f5f78ed5f4514b845e669720d3c', # 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. @@ -545,7 +545,7 @@ }, 'src/ios/third_party/material_components_ios/src': { - 'url': Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + 'dc8add9b14b393940bd3430c5dffa51f016424e5', + 'url': Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + 'aba747b4808a48603bae4798569aff2eb7d2404d', 'condition': 'checkout_ios', }, @@ -896,7 +896,7 @@ }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '0547fb291708a09df5e9873561aee0eed6889133', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'f57e64e375ef64a55dc31c07fbf8f6601f8b693d', 'src/third_party/devtools-frontend/src': Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), @@ -1249,7 +1249,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + 'cfda0b2aaf01f3fc41a9885114baeab0c368477e', + Var('android_git') + '/platform/external/perfetto.git' + '@' + 'b0a548c7e6b64fe0a6a140d133815123f5b3b112', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1327,7 +1327,7 @@ 'packages': [ { 'package': 'fuchsia/third_party/aemu/linux-amd64', - 'version': 'cG1zzefbD24rFmPDujqP0rrEG0uXUhH8axBOrD619hoC' + 'version': 'yu1TNZdimAolWHFRji7ATuLGOV29PrdOBhWQd2oQxVMC' }, ], 'condition': 'host_os == "linux" and checkout_fuchsia', @@ -1471,7 +1471,7 @@ }, 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '7703f23b60c493744aba84977aec459cbc33f016', + Var('webrtc_git') + '/src.git' + '@' + '34f5ab82feaebb6ad66bc6f9fd3d4f91fa517636', 'src/third_party/libgifcodec': Var('skia_git') + '/libgifcodec' + '@'+ Var('libgifcodec_revision'), @@ -1509,7 +1509,7 @@ 'packages': [ { 'package': 'skia/tools/goldctl/linux-amd64', - 'version': '-xiy-efdb--wYTN3Wri48BP83XnnX7zpK1cGoKp0uA0C', + 'version': 'f-DTUcX4U7OFc5zCWXjvrSxtdJvuhXh4sUcNTJ25tGgC', }, ], 'dep_type': 'cipd', @@ -1519,7 +1519,7 @@ 'packages': [ { 'package': 'skia/tools/goldctl/windows-amd64', - 'version': '2atKOIuMTCpEeTrs47-p-JN2Tdztm20pW0D8l5WhPXAC', + 'version': '0T7A2zKUcd9aOk8Bm8_upn7Ee3pt5MEMFPxJlsU5MSgC', }, ], 'dep_type': 'cipd', @@ -1529,7 +1529,7 @@ 'packages': [ { 'package': 'skia/tools/goldctl/mac-amd64', - 'version': 'mazyV5wLKAOn58AEZha47bpZO_y8i6NfTsZR6L_Rt6QC', + 'version': 'ZEjCOhpgQq2QyPhqYBzxLzorH4ZmulpCNyb_UYP34iYC', }, ], 'dep_type': 'cipd', @@ -1543,7 +1543,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@a0ee89a93f645c9eb91e107360503fc96cb6c61e', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@68241d4f5af5f2e08963fe6f02f8255a1b3677b2', 'condition': 'checkout_src_internal', },
diff --git a/ash/strings/ash_strings_af.xtb b/ash/strings/ash_strings_af.xtb index c691c567..79eef23 100644 --- a/ash/strings/ash_strings_af.xtb +++ b/ash/strings/ash_strings_af.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Vou kieslys in</translation> <translation id="1383876407941801731">Soek</translation> <translation id="1391102559483454063">Aan</translation> +<translation id="1407069428457324124">Donkertema</translation> <translation id="1419738280318246476">Ontsluit toestel om die kennisgewinghandeling uit te voer</translation> <translation id="1420408895951708260">Wissel Aandbeligting. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">Skermkiekie is geneem en na knipbord gestoor</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Klik vir meer opsies</translation> <translation id="1570871743947603115">Wissel Bluetooth. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">Kry toegang tot al jou aktiwiteit in hierdie sessie</translation> +<translation id="1611993646327628135">Aan</translation> <translation id="1632985212731562677">Skakelaartoegang kan in Instellings > Toeganklikheid gedeaktiveer word.</translation> <translation id="1654477262762802994">Begin 'n stemnavraag</translation> <translation id="1667964833127753507">Die neutrale kleurmodus gebruik nie kleure wat van die muurpapier onttrek is nie, maar vervang dit met 'n stel ligte of donker skakerings van neutrale kleure.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Wissel netwerkverbinding. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">Rollees regs</translation> <translation id="1782199038061388045">vertaling</translation> +<translation id="1787955149152357925">Af</translation> <translation id="181103072419391116">Seinsterkte <ph name="SIGNAL_STRENGTH" />, deur jou administrateur bestuur</translation> <translation id="1812997170047690955">Wat wys op my skerm?</translation> <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">Vou kieslys uit</translation> <translation id="3087734570205094154">Onderkant</translation> +<translation id="3090989381251959936">Wissel <ph name="FEATURE_NAME" />. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">Beweeg merker</translation> <translation id="3098580329624789136">Kry die <ph name="INTENT" /> vir "<ph name="QUERY" />"</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">USB C-toestel (voorste poort aan regterkant)</translation> <translation id="3386978599540877378">die volskermvergrootglas</translation> <translation id="3400357268283240774">Bykomende instellings</translation> +<translation id="3410336247007142655">Wys Donkertema-instellings</translation> <translation id="3413817803639110246">Nog niks om te sien nie</translation> <translation id="3428447136709161042">Ontkoppel vanaf <ph name="NETWORK_NAME" /></translation> <translation id="3430396595145920809">Swiep van regs af om terug te gaan</translation> @@ -327,6 +332,7 @@ <translation id="4378551569595875038">Koppel tans …</translation> <translation id="4379531060876907730">Dit is jou stilusnutsgoed</translation> <translation id="4389184120735010762">Jy het die sleutelbordkortpad vir die gedokte vergrootglas gedruk. Wil jy dit aanskakel?</translation> +<translation id="4412944820643904175"><ph name="FEATURE_NAME" /> is af.</translation> <translation id="4421231901400348175">Deel tans beheer oor jou skerm met <ph name="HELPER_NAME" /> deur afstandbystand.</translation> <translation id="4430019312045809116">Volume</translation> <translation id="4450893287417543264">Moenie weer wys nie</translation> @@ -346,6 +352,7 @@ <translation id="4570957409596482333">Hardoplees-knoppie</translation> <translation id="4577274620589681794">Tyd is verby · <ph name="LABEL" /></translation> <translation id="4585337515783392668">Hou op om op 'n onbekende ontvanger uit te saai</translation> +<translation id="4596144739579517758">Donkertema is af</translation> <translation id="4623167406982293031">Verifieer rekening</translation> <translation id="4628757576491864469">Toestelle</translation> <translation id="4659419629803378708">ChromeVox is geaktiveer</translation> @@ -388,6 +395,7 @@ <translation id="5168181903108465623">Uitsaaitoestelle is beskikbaar</translation> <translation id="5170568018924773124">Wys in vouer</translation> <translation id="5207949376430453814">Lig tekskaret uit</translation> +<translation id="5208059991603368177">Aan</translation> <translation id="5222676887888702881">Meld af</translation> <translation id="523505283826916779">Toeganklikheidsinstellings</translation> <translation id="5260676007519551770">Lessenaar 4</translation> @@ -399,6 +407,7 @@ <translation id="5313326810920013265">Bluetooth-instellings</translation> <translation id="5314219114274263156">Skermopname is geneem</translation> <translation id="5331975486040154427">USB C-toestel (agterste poort aan linkerkant)</translation> +<translation id="5352250171825660495">Donkertema is aan</translation> <translation id="5379115545237091094">Te veel pogings</translation> <translation id="5397578532367286026">Gebruiker se gebruik en geskiedenis kan op chrome.com deur die bestuurder (<ph name="MANAGER_EMAIL" />) nagegaan word.</translation> <translation id="5400461572260843123">Kitsinstellings; druk soek + links om na die kennisgewingsentrum toe te gaan.</translation> @@ -435,6 +444,7 @@ <translation id="5769373120130404283">Privaatheidskerm</translation> <translation id="5777841717266010279">Stop skermdeling?</translation> <translation id="5790085346892983794">Suksesvol</translation> +<translation id="579415080077680903">Stilte</translation> <translation id="5820394555380036790">Chromium-bedryfstelsel</translation> <translation id="5837036133683224804">Stop <ph name="ROUTE_TITLE" /> op <ph name="RECEIVER_NAME" /></translation> <translation id="5860033963881614850">Af</translation> @@ -445,6 +455,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">Aan</translation> <translation id="5920710855273935292">Mikrofoon is gedemp.</translation> +<translation id="5946788582095584774"><ph name="FEATURE_NAME" /> is aan.</translation> <translation id="5947494881799873997">Stel terug</translation> <translation id="595202126637698455">Prestasie-nasporing geaktiveer</translation> <translation id="5957083217255311415">Mobiele data is afgeskakel.</translation> @@ -469,6 +480,7 @@ <translation id="615957422585914272">Wys opskerm-sleutelbord</translation> <translation id="6164005077879661055">Alle lêers en plaaslike data wat met die gebruiker onder toesig geassosieer word, sal permanent uitgevee word sodra hierdie gebruiker onder toesig verwyder word. Besoekte webwerwe en instellings vir hierdie gebruiker sonder toesig kan dalk steeds by <ph name="MANAGEMENT_URL" /> vir die bestuurder sigbaar wees.</translation> <translation id="6165508094623778733">Kom meer te wete</translation> +<translation id="6192859646269780503">Spoor foon op</translation> <translation id="622484624075952240">Af</translation> <translation id="6236290670123303279">Bestuur instellings</translation> <translation id="6237231532760393653">1X</translation> @@ -540,6 +552,7 @@ <translation id="6981982820502123353">Toeganklikheid</translation> <translation id="698231206551913481">Alle lêers en plaaslike data wat met hierdie gebruiker geassosieer word, sal permanent uitgevee word sodra hierdie gebruiker verwyder word.</translation> <translation id="7007983414944123363">Jou PIN of wagwoord kon nie geverifieer word nie. Probeer weer.</translation> +<translation id="7013005189539051442">Aktiveer warmkol</translation> <translation id="7015766095477679451">Kom terug om <ph name="COME_BACK_TIME" />.</translation> <translation id="7025533177575372252">Koppel jou <ph name="DEVICE_NAME" /> aan jou foon</translation> <translation id="7026338066939101231">Verminder</translation> @@ -612,6 +625,7 @@ <translation id="7842569679327885685">Waarskuwing: Eksperimentele kenmerk</translation> <translation id="7846634333498149051">Sleutelbord</translation> <translation id="7868900307798234037">Ontsluit met vingerafdruk</translation> +<translation id="7872786842639831132">Af</translation> <translation id="7886169021410746335">Verstel privaatheidinstellings</translation> <translation id="7886277072580235377">Jou internetsessie sal uitgevee word wanneer jy afmeld. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Stuur 'n e-pos</translation> @@ -716,6 +730,7 @@ <translation id="8853703225951107899">Jou PIN of wagwoord kon steeds nie geverifieer word nie. Let wel: As jy jou wagwoord onlangs verander het, moet jy jou ou wagwoord gebruik. Jou nuwe wagwoord sal van toepassing wees sodra jy afmeld.</translation> <translation id="885387440427703469">Skermkiekies is gedeaktiveer</translation> <translation id="8870509716567206129">Program steun nie verdeelde skerm nie.</translation> +<translation id="8871580645200179206">Wissel Donkertema. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">Nie gekoppel nie</translation> <translation id="8877788021141246043">Stel 'n onthounota</translation> <translation id="8878886163241303700">Brei skerm uit</translation>
diff --git a/ash/strings/ash_strings_bs.xtb b/ash/strings/ash_strings_bs.xtb index ef80785..b11d5c3b 100644 --- a/ash/strings/ash_strings_bs.xtb +++ b/ash/strings/ash_strings_bs.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Sužavanje menija</translation> <translation id="1383876407941801731">Traži</translation> <translation id="1391102559483454063">Uključeno</translation> +<translation id="1407069428457324124">Tamna tema</translation> <translation id="1419738280318246476">Otključajte uređaj da izvršite radnju obavještenja</translation> <translation id="1420408895951708260">Uključite ili isključite Noćno svjetlo. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">Ekran je snimljen i snimak je sačuvan u međumemoriju</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Kliznite za više opcija</translation> <translation id="1570871743947603115">Uključivanje/isključivanje Bluetootha. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">Pristupiti svim aktivnostima u ovoj sesiji</translation> +<translation id="1611993646327628135">Uključeno</translation> <translation id="1632985212731562677">Prekidač za pristup se može onemogućiti u meniju Postavke > Pristupačnost.</translation> <translation id="1654477262762802994">Započni glasovni upit</translation> <translation id="1667964833127753507">Način rada neutralne boje ne koristi boje izdvojene iz pozadinske slike nego ih zamjenjuje skupom neutralnih boja svijetlih ili tamnih nijansi.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Aktiviraj/deaktiviraj mrežnu vezu. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">Listaj udesno</translation> <translation id="1782199038061388045">prijevod</translation> +<translation id="1787955149152357925">Isključeno</translation> <translation id="181103072419391116">Jačina signala <ph name="SIGNAL_STRENGTH" />, upravlja vaš administrator</translation> <translation id="1812997170047690955">Šta je na ekranu?</translation> <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">Proširivanje menija</translation> <translation id="3087734570205094154">Dolje</translation> +<translation id="3090989381251959936">Uključite ili isključite značajku <ph name="FEATURE_NAME" />. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">Pomjeranje kursora</translation> <translation id="3098580329624789136">Preuzmite sljedeće: <ph name="INTENT" /> za "<ph name="QUERY" />"</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">USB-C uređaj (prednji priključak na desnoj strani)</translation> <translation id="3386978599540877378">povećalo preko cijelog ekrana</translation> <translation id="3400357268283240774">Dodatne postavke</translation> +<translation id="3410336247007142655">Prikaz postavki Tamne teme</translation> <translation id="3413817803639110246">Još uvijek nema sadržaja za prikaz</translation> <translation id="3428447136709161042">Prekidanje veze s mrežom <ph name="NETWORK_NAME" /></translation> <translation id="3430396595145920809">Prevucite prstom zdesna nalijevo da se vratite</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">Povezivanje…</translation> <translation id="4379531060876907730">Ovo su vaši alati za korištenje olovke</translation> <translation id="4389184120735010762">Pritisnuli ste prečicu na tastaturi za lupu priključne stanice. Želite li je uključiti?</translation> +<translation id="4412944820643904175">Značajka <ph name="FEATURE_NAME" /> je isključena.</translation> <translation id="4421231901400348175">Dijeljenje kontrole nad vašim ekranom s pomoćnikom <ph name="HELPER_NAME" /> putem pomoći na daljinu.</translation> <translation id="4430019312045809116">Jačina zvuka</translation> <translation id="4450893287417543264">Ne prikazuj ponovo</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">Dugme Odaberite za govor</translation> <translation id="4577274620589681794">Vrijeme je isteklo · <ph name="LABEL" /></translation> <translation id="4585337515783392668">Zaustavi emitiranje na nepoznati prijemnik</translation> +<translation id="4596144739579517758">Tamna je tema isključena</translation> <translation id="4623167406982293031">Potvrdite račun</translation> <translation id="4628757576491864469">Uređaji</translation> <translation id="4659419629803378708">ChromeVox je omogućen</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">Dostupni su "cast" uređaji</translation> <translation id="5170568018924773124">Pokaži u mapi</translation> <translation id="5207949376430453814">Istakni kursor u tekstu</translation> +<translation id="5208059991603368177">Uključeno</translation> <translation id="5222676887888702881">Odjava</translation> <translation id="523505283826916779">Postavke pristupačnosti</translation> <translation id="5260676007519551770">Radna površina 4</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">Bluetooth postavke</translation> <translation id="5314219114274263156">Snimak ekrana je napravljen</translation> <translation id="5331975486040154427">USB-C uređaj (lijevi priključak na zadnjem dijelu)</translation> +<translation id="5352250171825660495">Tamna tema je uključena</translation> <translation id="5379115545237091094">Previše pokušaja</translation> <translation id="5397578532367286026">Upravitelj (<ph name="MANAGER_EMAIL" />) može pregledavati upotrebu i povijest tog korisnika na web-lokaciji chrome.com.</translation> <translation id="5400461572260843123">Brze postavke, pritisnite tipku za pretraživanje i strelicu ulijevo da pristupite centru za obavještenja.</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">Ekran za privatnost</translation> <translation id="5777841717266010279">Zaustaviti dijeljenje ekrana?</translation> <translation id="5790085346892983794">Uspjeh</translation> +<translation id="579415080077680903">Tišina</translation> <translation id="5820394555380036790">Chromium OS</translation> <translation id="5837036133683224804">Zaustavi <ph name="ROUTE_TITLE" /> na primaocu <ph name="RECEIVER_NAME" /></translation> <translation id="5860033963881614850">Isklj.</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">Uključeno</translation> <translation id="5920710855273935292">Mikrofon je isključen.</translation> +<translation id="5946788582095584774">Značajka <ph name="FEATURE_NAME" /> je uključena.</translation> <translation id="5947494881799873997">Vrati</translation> <translation id="595202126637698455">Praćenje performansi je omogućeno</translation> <translation id="5957083217255311415">Prijenos podataka na mobilnoj mreži je isključen.</translation> @@ -468,6 +479,7 @@ <translation id="615957422585914272">Prikaži tastaturu na ekranu</translation> <translation id="6164005077879661055">Nakon uklanjanja korisnika pod nadzorom, trajno će se izbrisati svi fajlovi i lokalni podaci povezani s tim korisnikom. Upravitelj i dalje može vidjeti web lokacije koje je taj korisnik posjetio i njegove postavke na adresi <ph name="MANAGEMENT_URL" />.</translation> <translation id="6165508094623778733">Saznajte više</translation> +<translation id="6192859646269780503">Lociranje telefona</translation> <translation id="622484624075952240">Dolje</translation> <translation id="6236290670123303279">Upravljajte postavkama</translation> <translation id="6237231532760393653">1X</translation> @@ -539,6 +551,7 @@ <translation id="6981982820502123353">Pristupačnost</translation> <translation id="698231206551913481">Nakon što se ukloni ovaj korisnik, trajno će se izbrisati svi fajlovi i lokalni podaci povezani s njim.</translation> <translation id="7007983414944123363">Potvrđivanje PIN-a ili lozinke nije uspjelo. Pokušajte ponovo.</translation> +<translation id="7013005189539051442">Omogućivanje žarišne točke</translation> <translation id="7015766095477679451">Vratite se u <ph name="COME_BACK_TIME" />.</translation> <translation id="7025533177575372252">Povežite uređaj <ph name="DEVICE_NAME" /> sa svojim telefonom</translation> <translation id="7026338066939101231">Pomak unatrag</translation> @@ -611,6 +624,7 @@ <translation id="7842569679327885685">Upozorenje: Eksperimentalna funkcija</translation> <translation id="7846634333498149051">Tastatura</translation> <translation id="7868900307798234037">Otključavanje otiskom prsta</translation> +<translation id="7872786842639831132">Isključeno</translation> <translation id="7886169021410746335">Podesite postavke privatnosti</translation> <translation id="7886277072580235377">Vaša sesija na internetu će biti obrisana kada se odjavite. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Pošaljite e-poruku</translation> @@ -715,6 +729,7 @@ <translation id="8853703225951107899">Potvrđivanje PIN-a ili lozinke i dalje nije uspjelo. Napomena: Ako ste nedavno promijenili lozinku, koristite staru. Nova lozinka će se primijeniti nakon što se odjavite.</translation> <translation id="885387440427703469">Snimanje ekrana je onemogućeno</translation> <translation id="8870509716567206129">Aplikacija ne podržava dijeljenje ekrana.</translation> +<translation id="8871580645200179206">Uključite ili isključite Tamnu temu. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">Nije povezano</translation> <translation id="8877788021141246043">Postavite podsjetnik</translation> <translation id="8878886163241303700">Prošireni ekran</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb index 9759c2f..290619c 100644 --- a/ash/strings/ash_strings_ca.xtb +++ b/ash/strings/ash_strings_ca.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Replega el menú</translation> <translation id="1383876407941801731">Cerca</translation> <translation id="1391102559483454063">Activada</translation> +<translation id="1407069428457324124">Tema fosc</translation> <translation id="1419738280318246476">Desbloqueja el dispositiu per dur a terme l'acció que indica la notificació</translation> <translation id="1420408895951708260">Activa o desactiva la funció Llum nocturna. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">La captura de pantalla s'ha fet i s'ha desat al porta-retalls</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Feu clic per veure més opcions</translation> <translation id="1570871743947603115">Activa o desactiva el Bluetooth. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">Accedir a tota la teva activitat d'aquesta sessió.</translation> +<translation id="1611993646327628135">Activat</translation> <translation id="1632985212731562677">L'accés amb interruptors es pot desactivar a Configuració > Accessibilitat.</translation> <translation id="1654477262762802994">Inicia una consulta per veu</translation> <translation id="1667964833127753507">El mode de color neutre no utilitza colors extrets del fons de pantalla, sinó que els substitueix per un conjunt de tons neutres clars o foscos.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Activa o desactiva la connexió a la xarxa. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">Desplaça't cap a la dreta</translation> <translation id="1782199038061388045">traducció</translation> +<translation id="1787955149152357925">Desactivat</translation> <translation id="181103072419391116"><ph name="SIGNAL_STRENGTH" /> d'intensitat del senyal, xarxa gestionada per l'administrador</translation> <translation id="1812997170047690955">Què hi ha a la pantalla?</translation> <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">maj</translation> <translation id="3081696990447829002">Desplega el menú</translation> <translation id="3087734570205094154">Part inferior</translation> +<translation id="3090989381251959936">Commuta <ph name="FEATURE_NAME" />. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">Mou el cursor</translation> <translation id="3098580329624789136">Obtén la <ph name="INTENT" /> de: <ph name="QUERY" /></translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">Dispositiu USB-C (port frontal dret)</translation> <translation id="3386978599540877378">la lupa de pantalla completa</translation> <translation id="3400357268283240774">Configuració addicional</translation> +<translation id="3410336247007142655">Mostra la configuració del tema fosc</translation> <translation id="3413817803639110246">Encara no hi ha res per veure</translation> <translation id="3428447136709161042">Desconnecta't de la xarxa <ph name="NETWORK_NAME" /></translation> <translation id="3430396595145920809">Llisca des de la dreta per tornar enrere</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">Connectant...</translation> <translation id="4379531060876907730">Aquestes són les eines del llapis òptic</translation> <translation id="4389184120735010762">Has premut la tecla de drecera de la lupa acoblada. Vols activar-la?</translation> +<translation id="4412944820643904175">La funció <ph name="FEATURE_NAME" /> està desactivada.</translation> <translation id="4421231901400348175">Es comparteix el control de la pantalla amb <ph name="HELPER_NAME" /> mitjançant l'Assistència remota.</translation> <translation id="4430019312045809116">Volum</translation> <translation id="4450893287417543264">No ho tornis a mostrar</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">Botó Escolta la selecció</translation> <translation id="4577274620589681794">El temps s'ha esgotat · <ph name="LABEL" /></translation> <translation id="4585337515783392668">Deixa d'emetre en un receptor desconegut</translation> +<translation id="4596144739579517758">El tema fosc està desactivat</translation> <translation id="4623167406982293031">Verifica el compte</translation> <translation id="4628757576491864469">Dispositius</translation> <translation id="4659419629803378708">S'ha activat ChromeVox</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">Dispositius d'emissió disponibles</translation> <translation id="5170568018924773124">Mostra a la carpeta</translation> <translation id="5207949376430453814">Ressalta la marca d'inserció de text</translation> +<translation id="5208059991603368177">Activat</translation> <translation id="5222676887888702881">Tanca la sessió</translation> <translation id="523505283826916779">Configuració d'accessibilitat</translation> <translation id="5260676007519551770">Escriptori 4</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">Configuració del Bluetooth</translation> <translation id="5314219114274263156">S'ha fet una gravació de pantalla</translation> <translation id="5331975486040154427">Dispositiu USB-C (port posterior esquerre)</translation> +<translation id="5352250171825660495">El tema fosc està activat</translation> <translation id="5379115545237091094">Massa intents</translation> <translation id="5397578532367286026">El gestor (<ph name="MANAGER_EMAIL" />) pot revisar l'ús i l'historial d'aquest usuari a chrome.com.</translation> <translation id="5400461572260843123">Configuració ràpida, prem cerca+fletxa esquerra per accedir al centre de notificacions.</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">Pantalla de privadesa</translation> <translation id="5777841717266010279">Vols aturar la compartició de pantalla?</translation> <translation id="5790085346892983794">Amb èxit</translation> +<translation id="579415080077680903">Silenci</translation> <translation id="5820394555380036790">Chromium OS</translation> <translation id="5837036133683224804">Atura <ph name="ROUTE_TITLE" /> a <ph name="RECEIVER_NAME" /></translation> <translation id="5860033963881614850">Desactivat</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">Activat</translation> <translation id="5920710855273935292">El micròfon està silenciat.</translation> +<translation id="5946788582095584774">La funció <ph name="FEATURE_NAME" /> està activada.</translation> <translation id="5947494881799873997">Reverteix</translation> <translation id="595202126637698455">Traça del rendiment activada</translation> <translation id="5957083217255311415">Les dades mòbils estan desactivades.</translation> @@ -468,6 +479,7 @@ <translation id="615957422585914272">Mostra el teclat en pantalla</translation> <translation id="6164005077879661055">Tots els fitxers i les dades locals associats amb l'usuari supervisat se suprimiran permanentment quan aquest usuari supervisat se suprimeixi. És possible que el gestor encara pugui veure els llocs web visitats i la configuració d'aquest usuari supervisat a la pàgina <ph name="MANAGEMENT_URL" />.</translation> <translation id="6165508094623778733">Més informació</translation> +<translation id="6192859646269780503">Localitza el telèfon</translation> <translation id="622484624075952240">Avall</translation> <translation id="6236290670123303279">Gestiona la configuració</translation> <translation id="6237231532760393653">1X</translation> @@ -539,6 +551,7 @@ <translation id="6981982820502123353">Accessibilitat</translation> <translation id="698231206551913481">Tots els fitxers i les dades locals associats amb aquest usuari se suprimiran definitivament quan aquest usuari se suprimeixi.</translation> <translation id="7007983414944123363">El PIN o la contrasenya no s'han pogut verificar. Torna-ho a provar.</translation> +<translation id="7013005189539051442">Activa el punt d'accés Wi‑Fi</translation> <translation id="7015766095477679451">Pots tornar a aquesta hora: <ph name="COME_BACK_TIME" />.</translation> <translation id="7025533177575372252">Connecta <ph name="DEVICE_NAME" /> al telèfon</translation> <translation id="7026338066939101231">Disminueix</translation> @@ -611,6 +624,7 @@ <translation id="7842569679327885685">Advertiment: funció experimental</translation> <translation id="7846634333498149051">Teclat</translation> <translation id="7868900307798234037">Has desbloquejat el dispositiu amb empremta digital</translation> +<translation id="7872786842639831132">Desactivat</translation> <translation id="7886169021410746335">Ajustar la configuració de privadesa</translation> <translation id="7886277072580235377">Les dades de la sessió a Internet s'esborraran en tancar-la. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Envia un correu electrònic</translation> @@ -715,6 +729,7 @@ <translation id="8853703225951107899">El PIN o la contrasenya continuen sense poder-se verificar. Nota: si fa poc que has canviat la contrasenya, fes servir l'antiga. La contrasenya nova s'aplicarà un cop hagis tancat la sessió.</translation> <translation id="885387440427703469">Les captures de pantalla estan desactivades</translation> <translation id="8870509716567206129">L'aplicació no admet la pantalla dividida.</translation> +<translation id="8871580645200179206">Commuta el tema fosc. <ph name="STATE_TEXT" />.</translation> <translation id="8874184842967597500">No connectada</translation> <translation id="8877788021141246043">Estableix un recordatori</translation> <translation id="8878886163241303700">Ampliació de la pantalla</translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb index 695b4e53..47afcb5 100644 --- a/ash/strings/ash_strings_cs.xtb +++ b/ash/strings/ash_strings_cs.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Sbalit nabídku</translation> <translation id="1383876407941801731">Vyhledávání</translation> <translation id="1391102559483454063">Zapnuto</translation> +<translation id="1407069428457324124">Tmavý motiv</translation> <translation id="1419738280318246476">Chcete-li provést akci s oznámením, odemkněte zařízení</translation> <translation id="1420408895951708260">Zapnout nebo vypnout noční režim. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">Snímek obrazovky byl pořízen a uložen do schránky</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Kliknutím zobrazíte další možnosti</translation> <translation id="1570871743947603115">Přepnout Bluetooth. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">Získat přístup k veškeré vaší aktivitě v této relaci</translation> +<translation id="1611993646327628135">Zap</translation> <translation id="1632985212731562677">Přístup pomocí přepínačů lze vypnout v Nastavení > Přístupnost.</translation> <translation id="1654477262762802994">Zahájit hlasový dotaz</translation> <translation id="1667964833127753507">Neutrální režim barvy nepoužívá barvy z tapety, ale nahrazuje je sadou neutrálních tónů ve světlých nebo tmavých odstínech.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Přepnout připojení k síti. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">Posunout doprava</translation> <translation id="1782199038061388045">překlad</translation> +<translation id="1787955149152357925">Vyp</translation> <translation id="181103072419391116">Síla signálu: <ph name="SIGNAL_STRENGTH" />, spravováno vaším administrátorem</translation> <translation id="1812997170047690955">Co je na obrazovce?</translation> <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">Rozbalit nabídku</translation> <translation id="3087734570205094154">Až dolů</translation> +<translation id="3090989381251959936">Zapnout nebo vypnout funkci <ph name="FEATURE_NAME" />. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">Přesunout kurzor</translation> <translation id="3098580329624789136">Získání <ph name="INTENT" /> pro dotaz „<ph name="QUERY" />“</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">Zařízení USB Type-C (pravý přední port)</translation> <translation id="3386978599540877378">celoobrazovková lupa</translation> <translation id="3400357268283240774">Další nastavení</translation> +<translation id="3410336247007142655">Zobrazit nastavení tmavého motivu</translation> <translation id="3413817803639110246">Zatím tu není nic k vidění</translation> <translation id="3428447136709161042">Odpojit od sítě <ph name="NETWORK_NAME" /></translation> <translation id="3430396595145920809">Chcete-li se vrátit, přejeďte prstem zprava</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">Připojování...</translation> <translation id="4379531060876907730">Toto jsou nástroje pro dotykové pero</translation> <translation id="4389184120735010762">Stiskli jste klávesovou zkratku pro zabudovanou lupu. Chcete ji zapnout?</translation> +<translation id="4412944820643904175">Funkce <ph name="FEATURE_NAME" /> je vypnutá.</translation> <translation id="4421231901400348175">Ovládání obrazovky je prostřednictvím Vzdálené pomoci sdíleno s uživatelem <ph name="HELPER_NAME" />.</translation> <translation id="4430019312045809116">Hlasitost</translation> <translation id="4450893287417543264">Tuto zprávu již nezobrazovat</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">Tlačítko pro poslech vybraného textu</translation> <translation id="4577274620589681794">Čas vypršel · <ph name="LABEL" /></translation> <translation id="4585337515783392668">Ukončit odesílání do neznámého přijímače</translation> +<translation id="4596144739579517758">Tmavý motiv je vypnutý</translation> <translation id="4623167406982293031">Ověřit účet</translation> <translation id="4628757576491864469">Zařízení</translation> <translation id="4659419629803378708">Funkce ChromeVox je zapnutá</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">Dostupná zařízení pro streamování obsahu</translation> <translation id="5170568018924773124">Zobrazit ve složce</translation> <translation id="5207949376430453814">Zvýraznit textový kurzor</translation> +<translation id="5208059991603368177">Zap</translation> <translation id="5222676887888702881">Odhlásit se</translation> <translation id="523505283826916779">Nastavení usnadnění přístupu</translation> <translation id="5260676007519551770">Plocha 4</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">Nastavení Bluetooth</translation> <translation id="5314219114274263156">Záznam obrazovky byl pořízen</translation> <translation id="5331975486040154427">Zařízení USB Type-C (levý zadní port)</translation> +<translation id="5352250171825660495">Tmavý motiv je zapnutý</translation> <translation id="5379115545237091094">Příliš mnoho pokusů</translation> <translation id="5397578532367286026">Údaje o využití a historii tohoto uživatele si správce (<ph name="MANAGER_EMAIL" />) může prohlédnout na webu chrome.com.</translation> <translation id="5400461572260843123">Rychlé nastavení, centrum oznámení otevřete stisknutím klávesy vyhledávání a šipky vlevo.</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">Obrazovka ochrany soukromí</translation> <translation id="5777841717266010279">Ukončit sdílení obrazovky?</translation> <translation id="5790085346892983794">Úspěšně provedeno</translation> +<translation id="579415080077680903">Ticho</translation> <translation id="5820394555380036790">Chromium OS</translation> <translation id="5837036133683224804">Zastavit <ph name="ROUTE_TITLE" /> na přijímači <ph name="RECEIVER_NAME" /></translation> <translation id="5860033963881614850">Vypnuto</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> <ph name="MAIL" /></translation> <translation id="5916664084637901428">Zapnuto</translation> <translation id="5920710855273935292">Mikrofon je ztlumen.</translation> +<translation id="5946788582095584774">Funkce <ph name="FEATURE_NAME" /> je zapnutá.</translation> <translation id="5947494881799873997">Vrátit zpět</translation> <translation id="595202126637698455">Sledování výkonu aktivováno</translation> <translation id="5957083217255311415">Mobilní data jsou vypnuta.</translation> @@ -468,6 +479,7 @@ <translation id="615957422585914272">Zobrazit softwarovou klávesnici</translation> <translation id="6164005077879661055">Po odebrání dozorovaného uživatele budou trvale smazány všechny soubory a místní data, která jsou k němu přiřazena. Navštívené weby a nastavení tohoto dozorovaného uživatele může správce i nadále zobrazit na adrese <ph name="MANAGEMENT_URL" />.</translation> <translation id="6165508094623778733">Další informace</translation> +<translation id="6192859646269780503">Najít telefon</translation> <translation id="622484624075952240">Dolů</translation> <translation id="6236290670123303279">Spravovat nastavení</translation> <translation id="6237231532760393653">1X</translation> @@ -539,6 +551,7 @@ <translation id="6981982820502123353">Usnadnění</translation> <translation id="698231206551913481">Po odebrání tohoto uživatele budou trvale smazány všechny soubory a místní data, která jsou k němu přiřazena.</translation> <translation id="7007983414944123363">Váš PIN nebo heslo se nepodařilo ověřit. Zkuste to znovu.</translation> +<translation id="7013005189539051442">Aktivovat hotspot</translation> <translation id="7015766095477679451">Vraťte se v <ph name="COME_BACK_TIME" />.</translation> <translation id="7025533177575372252">Propojte zařízení <ph name="DEVICE_NAME" /> s telefonem</translation> <translation id="7026338066939101231">Snížit</translation> @@ -611,6 +624,7 @@ <translation id="7842569679327885685">Upozornění: Experimentální funkce</translation> <translation id="7846634333498149051">Klávesnice</translation> <translation id="7868900307798234037">Odemknutí otiskem prstu</translation> +<translation id="7872786842639831132">Vyp</translation> <translation id="7886169021410746335">Upravit nastavení soukromí</translation> <translation id="7886277072580235377">Když se odhlásíte, vaše návštěvy internetu se vymaže. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Poslat e‑mail</translation> @@ -715,6 +729,7 @@ <translation id="8853703225951107899">Váš PIN nebo heslo se stále nepodařilo ověřit. Poznámka: Pokud jste heslo nedávno změnili, použijte staré heslo. Nové heslo bude možné použít až po odhlášení.</translation> <translation id="885387440427703469">Snímky obrazovky jsou zakázané</translation> <translation id="8870509716567206129">Aplikace nepodporuje režim rozdělené obrazovky.</translation> +<translation id="8871580645200179206">Přepnout tmavý motiv. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">Nepřipojeno</translation> <translation id="8877788021141246043">Nastavit připomenutí</translation> <translation id="8878886163241303700">Rozšíření obrazovky</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb index 7acc648..01bb8575 100644 --- a/ash/strings/ash_strings_da.xtb +++ b/ash/strings/ash_strings_da.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Skjul menu</translation> <translation id="1383876407941801731">Søg</translation> <translation id="1391102559483454063">Til</translation> +<translation id="1407069428457324124">Mørkt tema</translation> <translation id="1419738280318246476">Lås enheden op for at udføre notifikationshandlingen</translation> <translation id="1420408895951708260">Slå Nattelys til/fra. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">Screenshottet blev taget og gemt i udklipsholderen</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Klik for at se flere muligheder</translation> <translation id="1570871743947603115">Slå Bluetooth til eller fra. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">Få adgang til al din aktivitet i denne session</translation> +<translation id="1611993646327628135">Til</translation> <translation id="1632985212731562677">Kontaktadgang kan deaktiveres under Indstillinger > Hjælpefunktioner.</translation> <translation id="1654477262762802994">Start en stemmeforespørgsel</translation> <translation id="1667964833127753507">Tilstanden med neutrale farver anvender ikke farver fra baggrunden, men erstatter dem med et sæt lyse og mørke nuancer i neutrale farver.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Slå netværksforbindelse til eller fra. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">Rul til højre</translation> <translation id="1782199038061388045">oversættelse</translation> +<translation id="1787955149152357925">Fra</translation> <translation id="181103072419391116">Signalstyrke <ph name="SIGNAL_STRENGTH" />, administreret af din administrator</translation> <translation id="1812997170047690955">Hvad vises der på min skærm?</translation> <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">Shift</translation> <translation id="3081696990447829002">Udvid menu</translation> <translation id="3087734570205094154">Bund</translation> +<translation id="3090989381251959936">Slå <ph name="FEATURE_NAME" /> til/fra. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">Flyttemarkør</translation> <translation id="3098580329624789136">Få <ph name="INTENT" /> til "<ph name="QUERY" />"</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">USB-C-enhed (porten foran i højre side)</translation> <translation id="3386978599540877378">luppen i fuld skærm</translation> <translation id="3400357268283240774">Yderligere indstillinger</translation> +<translation id="3410336247007142655">Vis indstillingerne for mørkt tema</translation> <translation id="3413817803639110246">Der er intet at se endnu</translation> <translation id="3428447136709161042">Afbryd forbindelsen til <ph name="NETWORK_NAME" /></translation> <translation id="3430396595145920809">Stryg fra højre for at gå tilbage</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">Tilslutter...</translation> <translation id="4379531060876907730">Dette er dine styluspenværktøjer</translation> <translation id="4389184120735010762">Du trykkede på tastaturgenvejen for det fastgjorte lupvindue. Vil du aktivere indstillingen?</translation> +<translation id="4412944820643904175"><ph name="FEATURE_NAME" /> er deaktiveret.</translation> <translation id="4421231901400348175">Skærmdeling med <ph name="HELPER_NAME" /> via Fjernsupport.</translation> <translation id="4430019312045809116">Lydstyrke</translation> <translation id="4450893287417543264">Vis ikke igen</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">Knap for Tekstoplæsning</translation> <translation id="4577274620589681794">Tiden er gået · <ph name="LABEL" /></translation> <translation id="4585337515783392668">Stop cast på en ukendt modtager</translation> +<translation id="4596144739579517758">Mørkt tema er deaktiveret</translation> <translation id="4623167406982293031">Bekræft konto</translation> <translation id="4628757576491864469">Enheder</translation> <translation id="4659419629803378708">ChromeVox er aktiveret</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">Tilgængelige Cast-enheder</translation> <translation id="5170568018924773124">Vis i mappe</translation> <translation id="5207949376430453814">Fremhæv tekstmarkør</translation> +<translation id="5208059991603368177">Til</translation> <translation id="5222676887888702881">Log ud</translation> <translation id="523505283826916779">Indstillinger for hjælpefunktioner</translation> <translation id="5260676007519551770">Skrivebord 4</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">Indstillinger for Bluetooth</translation> <translation id="5314219114274263156">Skærmen blev optaget</translation> <translation id="5331975486040154427">USB-C-enhed (porten bagpå i venstre side)</translation> +<translation id="5352250171825660495">Mørkt tema er aktiveret</translation> <translation id="5379115545237091094">For mange forsøg</translation> <translation id="5397578532367286026">Denne brugers forbrug og historik kan ses af administratoren (<ph name="MANAGER_EMAIL" />) på chrome.com.</translation> <translation id="5400461572260843123">Kvikmenu, Tryk på søgetasten + venstre pil for at få adgang til notifikationscenteret.</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">Privatlivsskærm</translation> <translation id="5777841717266010279">Vil du afslutte skærmdeling?</translation> <translation id="5790085346892983794">Fuldført</translation> +<translation id="579415080077680903">Lydløs</translation> <translation id="5820394555380036790">Chromium OS</translation> <translation id="5837036133683224804">Stop <ph name="ROUTE_TITLE" /> på <ph name="RECEIVER_NAME" /></translation> <translation id="5860033963881614850">Fra</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">Til</translation> <translation id="5920710855273935292">Mikrofonen er slået fra.</translation> +<translation id="5946788582095584774"><ph name="FEATURE_NAME" /> er aktiveret.</translation> <translation id="5947494881799873997">Fortryd</translation> <translation id="595202126637698455">Sporing af ydelsen er aktiveret</translation> <translation id="5957083217255311415">Mobildata er slået fra.</translation> @@ -469,6 +480,7 @@ <translation id="6164005077879661055">Alle filer og lokale data, der er knyttet til den administrerede bruger, slettes permanent, når den administrerede bruger fjernes. Besøgte websites og indstillinger for denne administrerede bruger er muligvis stadig synlige for administratoren på <ph name="MANAGEMENT_URL" />.</translation> <translation id="6165508094623778733">Flere oplysninger</translation> +<translation id="6192859646269780503">Find telefon</translation> <translation id="622484624075952240">Ned</translation> <translation id="6236290670123303279">Administrer indstillinger</translation> <translation id="6237231532760393653">1X</translation> @@ -540,6 +552,7 @@ <translation id="6981982820502123353">Hjælpefunktioner</translation> <translation id="698231206551913481">Alle filer og lokale data, der er knyttet til denne bruger, slettes permanent, når brugeren fjernes.</translation> <translation id="7007983414944123363">Din pin- eller adgangskode kunne ikke bekræftes. Prøv igen.</translation> +<translation id="7013005189539051442">Aktivér hotspot</translation> <translation id="7015766095477679451">Vend tilbage kl. <ph name="COME_BACK_TIME" />.</translation> <translation id="7025533177575372252">Slut <ph name="DEVICE_NAME" /> til din telefon</translation> <translation id="7026338066939101231">Reducer</translation> @@ -612,6 +625,7 @@ <translation id="7842569679327885685">Advarsel! Eksperimentel funktion</translation> <translation id="7846634333498149051">Tastatur</translation> <translation id="7868900307798234037">Låser op med fingeraftryk</translation> +<translation id="7872786842639831132">Fra</translation> <translation id="7886169021410746335">Juster privatlivsindstillinger</translation> <translation id="7886277072580235377">Din internetsession ryddes, når du logger ud. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Send en mail</translation> @@ -716,6 +730,7 @@ <translation id="8853703225951107899">Din pin- eller adgangskode kan stadig ikke bekræftes. Bemærk! Hvis du har ændret din adgangskode for nylig, skal du bruge din gamle adgangskode. Den nye adgangskode anvendes, når du har logget ud.</translation> <translation id="885387440427703469">Screenshots er deaktiveret</translation> <translation id="8870509716567206129">Appen understøtter ikke opdelt skærm.</translation> +<translation id="8871580645200179206">Slå Mørkt tema til/fra. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">Ikke forbundet</translation> <translation id="8877788021141246043">Opret en påmindelse</translation> <translation id="8878886163241303700">Udvider skærm</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb index 7fa4f89..558f1de 100644 --- a/ash/strings/ash_strings_el.xtb +++ b/ash/strings/ash_strings_el.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Σύμπτυξη μενού</translation> <translation id="1383876407941801731">Αναζήτηση</translation> <translation id="1391102559483454063">Ενεργό</translation> +<translation id="1407069428457324124">Σκούρο θέμα</translation> <translation id="1419738280318246476">Ξεκλειδώστε τη συσκευή για εκτέλεση της ενέργειας ειδοποίησης</translation> <translation id="1420408895951708260">Εναλλαγή νυχτερινού φωτισμού. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">Λήψη στιγμιότυπου οθόνης και αποθήκευσή του στο πρόχειρο</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Κάντε κλικ για περισσότερες επιλογές</translation> <translation id="1570871743947603115">Εναλλαγή Bluetooth. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">Αποκτήσει πρόσβαση σε όλη τη δραστηριότητά σας από αυτήν την περίοδο λειτουργίας</translation> +<translation id="1611993646327628135">Ενεργό</translation> <translation id="1632985212731562677">Η πρόσβαση με διακόπτη μπορεί να απενεργοποιηθεί από τις Ρυθμίσεις > Προσβασιμότητα.</translation> <translation id="1654477262762802994">Έναρξη φωνητικού ερωτήματος</translation> <translation id="1667964833127753507">Η λειτουργία ουδέτερου χρώματος δεν χρησιμοποιεί χρώματα που έχουν εξαχθεί από την ταπετσαρία, αλλά τα αντικαθιστά με ένα σύνολο ουδέτερων σκούρων ή φωτεινών αποχρώσεων.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Εναλλαγή σύνδεσης δικτύου. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">Κύλιση δεξιά</translation> <translation id="1782199038061388045">μετάφραση</translation> +<translation id="1787955149152357925">Ανενεργό</translation> <translation id="181103072419391116">Ισχύς σήματος <ph name="SIGNAL_STRENGTH" />, Διαχειριζόμενο από τον διαχειριστή σας</translation> <translation id="1812997170047690955">Τι υπάρχει στην οθόνη μου;</translation> <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">Ανάπτυξη μενού</translation> <translation id="3087734570205094154">Κάτω</translation> +<translation id="3090989381251959936">Εναλλαγή λειτουργίας <ph name="FEATURE_NAME" />. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">Μετακίνηση δείκτη ποντικιού</translation> <translation id="3098580329624789136">Λήψη του <ph name="INTENT" /> για το ερώτημα "<ph name="QUERY" />"</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">Συσκευή USB-C (δεξιά μπροστινή θύρα)</translation> <translation id="3386978599540877378">ο μεγεθυντικός φακός πλήρους οθόνης</translation> <translation id="3400357268283240774">Πρόσθετες ρυθμίσεις</translation> +<translation id="3410336247007142655">Εμφάνιση ρυθμίσεων Σκούρου θέματος</translation> <translation id="3413817803639110246">Δεν υπάρχει ακόμη περιεχόμενο για εμφάνιση</translation> <translation id="3428447136709161042">Αποσύνδεση από το δίκτυο <ph name="NETWORK_NAME" /></translation> <translation id="3430396595145920809">Για να επιστρέψετε, σύρετε από τα δεξιά.</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">Σύνδεση…</translation> <translation id="4379531060876907730">Αυτά είναι τα εργαλεία γραφίδας σας</translation> <translation id="4389184120735010762">Πατήσατε τη συντόμευση πληκτρολογίου για τον μεγεθυντικό φακό σε παράθυρο. Θέλετε να τον ενεργοποιήσετε;</translation> +<translation id="4412944820643904175">Η λειτουργία <ph name="FEATURE_NAME" /> είναι απενεργοποιημένη.</translation> <translation id="4421231901400348175">Κοινόχρηστος έλεγχος της οθόνης σας με το χρήστη <ph name="HELPER_NAME" /> μέσω της απομακρυσμένης βοήθειας.</translation> <translation id="4430019312045809116">Ένταση</translation> <translation id="4450893287417543264">Να μην εμφανιστεί ξανά</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">Κουμπί "Επιλέξτε για αυτόματη ανάγνωση"</translation> <translation id="4577274620589681794">Ο χρόνος τελείωσε · <ph name="LABEL" /></translation> <translation id="4585337515783392668">Διακοπή μετάδοσης σε άγνωστο δέκτη</translation> +<translation id="4596144739579517758">Το Σκούρο θέμα είναι απενεργοποιημένο</translation> <translation id="4623167406982293031">Επαλήθευση λογαριασμού</translation> <translation id="4628757576491864469">Συσκευές</translation> <translation id="4659419629803378708">Το ChromeVox ενεργοποιήθηκε</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">Διαθέσιμες συσκευές μετάδοσης</translation> <translation id="5170568018924773124">Εμφάνιση στο φάκελο</translation> <translation id="5207949376430453814">Επισήμανση δρομέα κειμένου</translation> +<translation id="5208059991603368177">Ενεργό</translation> <translation id="5222676887888702881">Έξοδος</translation> <translation id="523505283826916779">Ρυθμίσεις προσβασιμότητας</translation> <translation id="5260676007519551770">Γραφείο 4</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">Ρυθμίσεις Bluetooth</translation> <translation id="5314219114274263156">Λήψη εγγραφής οθόνης</translation> <translation id="5331975486040154427">Συσκευή USB-C (πίσω αριστερή θύρα)</translation> +<translation id="5352250171825660495">Το Σκούρο θέμα είναι ενεργοποιημένο</translation> <translation id="5379115545237091094">Πάρα πολλές προσπάθειες</translation> <translation id="5397578532367286026">Ο διαχειριστής (<ph name="MANAGER_EMAIL" />) μπορεί να ελέγξει τη χρήση και το ιστορικό αυτού του χρήστη στη διεύθυνση chrome.com.</translation> <translation id="5400461572260843123">Γρήγορες ρυθμίσεις, πατήστε Αναζήτηση και αριστερά για πρόσβαση στο κέντρο ειδοποιήσεων.</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">Οθόνη απορρήτου</translation> <translation id="5777841717266010279">Θέλετε να σταματήσετε να μοιράζεστε την οθόνη;</translation> <translation id="5790085346892983794">Επιτυχία</translation> +<translation id="579415080077680903">Σίγαση</translation> <translation id="5820394555380036790">Chromium OS</translation> <translation id="5837036133683224804">Διακοπή <ph name="ROUTE_TITLE" /> σε <ph name="RECEIVER_NAME" /></translation> <translation id="5860033963881614850">Απενεργοποιημένη</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">Ενεργό</translation> <translation id="5920710855273935292">Έγινε σίγαση του μικροφώνου</translation> +<translation id="5946788582095584774">Η λειτουργία <ph name="FEATURE_NAME" /> είναι ενεργοποιημένη.</translation> <translation id="5947494881799873997">Επαναφορά</translation> <translation id="595202126637698455">Η παρακολούθηση απόδοσης έχει ενεργοποιηθεί</translation> <translation id="5957083217255311415">Τα δεδομένα κινητής τηλεφωνίας είναι απενεργοποιημένα.</translation> @@ -468,6 +479,7 @@ <translation id="615957422585914272">Εμφάνιση πληκτρολογίου οθόνης</translation> <translation id="6164005077879661055">Όλα τα αρχεία και τα τοπικά δεδομένα που σχετίζονται με το χρήστη υπό επίβλεψη θα διαγραφούν οριστικά μόλις καταργηθεί ο χρήστης υπό επίβλεψη. Οι ιστοσελίδες που έχει επισκεφτεί και οι ρυθμίσεις που έχει επιλέξει ενδεχομένως να εξακολουθούν να εμφανίζονται στο διαχειριστή στη διεύθυνση <ph name="MANAGEMENT_URL" /> .</translation> <translation id="6165508094623778733">Μάθετε περισσότερα</translation> +<translation id="6192859646269780503">Εντοπισμός τηλεφώνου</translation> <translation id="622484624075952240">Κάτω</translation> <translation id="6236290670123303279">Διαχείριση Ρυθμίσεων</translation> <translation id="6237231532760393653">1X</translation> @@ -539,6 +551,7 @@ <translation id="6981982820502123353">Προσβασιμότητα</translation> <translation id="698231206551913481">Όλα τα αρχεία και τα τοπικά δεδομένα που σχετίζονται με τον χρήστη θα διαγραφούν οριστικά μόλις καταργηθεί ο χρήστης.</translation> <translation id="7007983414944123363">Δεν ήταν δυνατή η επαλήθευση του PIN ή του κωδικού πρόσβασής σας. Δοκιμάστε ξανά.</translation> +<translation id="7013005189539051442">Ενεργοποίηση σημείου πρόσβασης Wi-Fi</translation> <translation id="7015766095477679451">Επιστρέψτε ξανά στις <ph name="COME_BACK_TIME" />.</translation> <translation id="7025533177575372252">Συνδέστε τη συσκευή <ph name="DEVICE_NAME" /> με το τηλέφωνό σας</translation> <translation id="7026338066939101231">Μείωση</translation> @@ -611,6 +624,7 @@ <translation id="7842569679327885685">Προειδοποίηση: Πειραματική λειτουργία</translation> <translation id="7846634333498149051">Πληκτρολόγιο</translation> <translation id="7868900307798234037">Ξεκλείδωμα με δακτυλικό αποτύπωμα</translation> +<translation id="7872786842639831132">Ανενεργό</translation> <translation id="7886169021410746335">Προσαρμογή ρυθμίσεων απορρήτου</translation> <translation id="7886277072580235377">Η περίοδος σύνδεσής σας στο διαδίκτυο θα διαγραφεί μόλις αποσυνδεθείτε. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου</translation> @@ -715,6 +729,7 @@ <translation id="8853703225951107899">Η επαλήθευση του PIN ή του κωδικού πρόσβασής σας εξακολουθεί να μην είναι δυνατή. Σημείωση: Εάν πρόσφατα αλλάξατε τον κωδικό πρόσβασής σας, χρησιμοποιήστε τον παλιό κωδικό πρόσβασης. Ο νέος κωδικός πρόσβασης θα εφαρμοστεί αφού αποσυνδεθείτε.</translation> <translation id="885387440427703469">Η καταγραφή οθόνης απενεργοποιήθηκε</translation> <translation id="8870509716567206129">Η εφαρμογή δεν υποστηρίζει διαχωρισμό οθόνης.</translation> +<translation id="8871580645200179206">Εναλλαγή Σκούρου θέματος. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">Καμία σύνδεση</translation> <translation id="8877788021141246043">Ορισμός υπενθύμισης</translation> <translation id="8878886163241303700">Επέκταση οθόνης</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb index ea2775e..64bb7f7 100644 --- a/ash/strings/ash_strings_es.xtb +++ b/ash/strings/ash_strings_es.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Ocultar menú</translation> <translation id="1383876407941801731">Buscar</translation> <translation id="1391102559483454063">Activada</translation> +<translation id="1407069428457324124">Tema oscuro</translation> <translation id="1419738280318246476">Desbloquea el dispositivo para hacer lo que indica la notificación</translation> <translation id="1420408895951708260">Activa o desactiva la luz nocturna. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">Captura de pantalla realizada y guardada en el portapapeles</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Haz clic aquí para obtener más opciones</translation> <translation id="1570871743947603115">Activa o desactiva el Bluetooth. <ph name="STATE_TEXT" />.</translation> <translation id="1589090746204042747">Acceder a toda tu actividad de esta sesión</translation> +<translation id="1611993646327628135">Sí</translation> <translation id="1632985212731562677">La accesibilidad mediante interruptores se puede inhabilitar en Configuración > Accesibilidad.</translation> <translation id="1654477262762802994">Iniciar una consulta por voz</translation> <translation id="1667964833127753507">El modo de color neutro no usa los colores extraídos de un fondo de pantalla, sino que los sustituye por un conjunto de colores claros u oscuros con un tono neutro.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Activa o desactiva la conexión de red. <ph name="STATE_TEXT" />.</translation> <translation id="1771761307086386028">Desplazar a la derecha</translation> <translation id="1782199038061388045">traducción</translation> +<translation id="1787955149152357925">No</translation> <translation id="181103072419391116">Intensidad de la señal: <ph name="SIGNAL_STRENGTH" />, gestionada por el administrador</translation> <translation id="1812997170047690955">¿Qué hay en mi pantalla?</translation> <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">mayús</translation> <translation id="3081696990447829002">Mostrar menú</translation> <translation id="3087734570205094154">Inferior</translation> +<translation id="3090989381251959936">Activar o desactivar <ph name="FEATURE_NAME" />. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">Mover cursor</translation> <translation id="3098580329624789136">Obtener <ph name="INTENT" /> de "<ph name="QUERY" />"</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">Dispositivo USB tipo C (puerto frontal derecho)</translation> <translation id="3386978599540877378">la lupa de pantalla completa</translation> <translation id="3400357268283240774">Configuración adicional</translation> +<translation id="3410336247007142655">Mostrar ajustes de Tema oscuro</translation> <translation id="3413817803639110246">Aún no hay contenido</translation> <translation id="3428447136709161042">Desconectar de <ph name="NETWORK_NAME" /></translation> <translation id="3430396595145920809">Desliza el dedo desde la derecha para volver</translation> @@ -327,6 +332,7 @@ <translation id="4378551569595875038">Conectando...</translation> <translation id="4379531060876907730">Estas son las herramientas del lápiz óptico</translation> <translation id="4389184120735010762">Has pulsado la combinación de teclas que activa la lupa fijada. ¿Quieres activarla?</translation> +<translation id="4412944820643904175"><ph name="FEATURE_NAME" /> está desactivada.</translation> <translation id="4421231901400348175">Compartiendo control de la pantalla con <ph name="HELPER_NAME" /> a través de Asistencia remota.</translation> <translation id="4430019312045809116">Volumen</translation> <translation id="4450893287417543264">No volver a mostrar</translation> @@ -346,6 +352,7 @@ <translation id="4570957409596482333">Botón Enunciar Selección</translation> <translation id="4577274620589681794">Tiempo agotado · <ph name="LABEL" /></translation> <translation id="4585337515783392668">Dejar de enviar contenido a un receptor desconocido</translation> +<translation id="4596144739579517758">Tema oscuro está desactivado</translation> <translation id="4623167406982293031">Verificar cuenta</translation> <translation id="4628757576491864469">Dispositivos</translation> <translation id="4659419629803378708">ChromeVox habilitado</translation> @@ -388,6 +395,7 @@ <translation id="5168181903108465623">Dispositivos de transmisión disponibles</translation> <translation id="5170568018924773124">Mostrar en carpeta</translation> <translation id="5207949376430453814">Resaltar el símbolo de intercalación del texto</translation> +<translation id="5208059991603368177">Sí</translation> <translation id="5222676887888702881">Cerrar sesión</translation> <translation id="523505283826916779">Configuración de accesibilidad</translation> <translation id="5260676007519551770">Escritorio 4</translation> @@ -399,6 +407,7 @@ <translation id="5313326810920013265">Configuración de Bluetooth</translation> <translation id="5314219114274263156">Grabación de pantalla realizada</translation> <translation id="5331975486040154427">Dispositivo USB tipo C (puerto trasero izquierdo)</translation> +<translation id="5352250171825660495">Tema oscuro está activado</translation> <translation id="5379115545237091094">Demasiados intentos</translation> <translation id="5397578532367286026">El administrador puede consultar el uso y el historial de este usuario (<ph name="MANAGER_EMAIL" />) en la página chrome.com.</translation> <translation id="5400461572260843123">Ajustes rápidos. Pulsa la tecla de búsqueda y la flecha izquierda para acceder al centro de notificaciones.</translation> @@ -435,6 +444,7 @@ <translation id="5769373120130404283">Pantalla de privacidad</translation> <translation id="5777841717266010279">¿Dejar de compartir la pantalla?</translation> <translation id="5790085346892983794">Completado correctamente</translation> +<translation id="579415080077680903">Silencio</translation> <translation id="5820394555380036790">Chromium OS</translation> <translation id="5837036133683224804">Parar <ph name="ROUTE_TITLE" /> en <ph name="RECEIVER_NAME" /></translation> <translation id="5860033963881614850">Desactivado</translation> @@ -445,6 +455,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">Activado</translation> <translation id="5920710855273935292">El micrófono está silenciado.</translation> +<translation id="5946788582095584774"><ph name="FEATURE_NAME" /> está activada.</translation> <translation id="5947494881799873997">Deshacer</translation> <translation id="595202126637698455">Se ha habilitado el control del rendimiento</translation> <translation id="5957083217255311415">Los datos móviles están desactivados.</translation> @@ -469,6 +480,7 @@ <translation id="615957422585914272">Mostrar teclado en pantalla</translation> <translation id="6164005077879661055">Todos los archivos y datos locales asociados al usuario supervisado se eliminarán de forma permanente una vez que se haya eliminado este usuario supervisado. Es posible que el administrador pueda seguir viendo la configuración y los sitios web visitados de este usuario supervisado en la página <ph name="MANAGEMENT_URL" />.</translation> <translation id="6165508094623778733">Más información</translation> +<translation id="6192859646269780503">Localizar el teléfono</translation> <translation id="622484624075952240">Flecha hacia abajo</translation> <translation id="6236290670123303279">Gestionar configuración</translation> <translation id="6237231532760393653">1X</translation> @@ -540,6 +552,7 @@ <translation id="6981982820502123353">Accesibilidad</translation> <translation id="698231206551913481">Una vez que se haya quitado este usuario, todos los archivos y datos asociados a él se eliminarán de forma permanente.</translation> <translation id="7007983414944123363">No se ha podido verificar tu PIN o contraseña. Inténtalo de nuevo.</translation> +<translation id="7013005189539051442">Habilitar punto de acceso</translation> <translation id="7015766095477679451">Hora a la que puedes volver: <ph name="COME_BACK_TIME" /></translation> <translation id="7025533177575372252">Conecta tu <ph name="DEVICE_NAME" /> al teléfono</translation> <translation id="7026338066939101231">Reducir</translation> @@ -612,6 +625,7 @@ <translation id="7842569679327885685">Advertencia: Función experimental</translation> <translation id="7846634333498149051">Teclado</translation> <translation id="7868900307798234037">Desbloqueando con huella digital</translation> +<translation id="7872786842639831132">No</translation> <translation id="7886169021410746335">Ajustar la configuración de privacidad</translation> <translation id="7886277072580235377">Tu sesión de Internet se borrará cuando la cierres. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Enviar un correo electrónico</translation> @@ -716,6 +730,7 @@ <translation id="8853703225951107899">Todavía no se ha podido verificar tu PIN o contraseña. Nota: Si has cambiado la contraseña recientemente, utiliza la contraseña anterior. La nueva contraseña se aplicará cuando hayas cerrado la sesión.</translation> <translation id="885387440427703469">Captura de pantalla inhabilitada</translation> <translation id="8870509716567206129">La aplicación no admite la pantalla dividida.</translation> +<translation id="8871580645200179206">Activar o desactivar Tema oscuro. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">No conectado</translation> <translation id="8877788021141246043">Añadir un recordatorio</translation> <translation id="8878886163241303700">Ampliando pantalla</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb index 1fc6b99..6541b635 100644 --- a/ash/strings/ash_strings_et.xtb +++ b/ash/strings/ash_strings_et.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Ahenda menüü</translation> <translation id="1383876407941801731">Otsi</translation> <translation id="1391102559483454063">Sees</translation> +<translation id="1407069428457324124">Tume teema</translation> <translation id="1419738280318246476">Märguandetoimingu tegemiseks avage seade</translation> <translation id="1420408895951708260">Öövalguse lülitamine. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">Ekraanipilt jäädvustati ja salvestati lõikelauale</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Klõpsake lisavalikute nägemiseks</translation> <translation id="1570871743947603115">Lülitab Bluetoothi sisse või välja. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">Juurdepääs kõigile teie tegevustele selle seansi ajal</translation> +<translation id="1611993646327628135">Sees</translation> <translation id="1632985212731562677">Lülitiga juurdepääsu saab keelata menüüs Seaded > Juurdepääsetavus.</translation> <translation id="1654477262762802994">Häälpäringu alustamine</translation> <translation id="1667964833127753507">Neutraalne värvirežiim ei kasuta taustapildist tuletatud värve, vaid asendab need neutraalsete heledate või tumedate toonidega.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Lülitab võrguühenduse sisse või välja. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">Keri paremale</translation> <translation id="1782199038061388045">tõlge</translation> +<translation id="1787955149152357925">Väljas</translation> <translation id="181103072419391116">Signaali tugevus: <ph name="SIGNAL_STRENGTH" />, võrku haldab teie administraator</translation> <translation id="1812997170047690955">Mis on minu ekraanil?</translation> <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">tõstuklahv</translation> <translation id="3081696990447829002">Laienda menüü</translation> <translation id="3087734570205094154">Alaserv</translation> +<translation id="3090989381251959936">Vahetage funktsiooni <ph name="FEATURE_NAME" /> olekut. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">Kursori liigutamine</translation> <translation id="3098580329624789136">Hankige päringu „<ph name="QUERY" />” <ph name="INTENT" /></translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">C-tüüpi USB-seade (eesmine parempoolne port)</translation> <translation id="3386978599540877378">täisekraani luup</translation> <translation id="3400357268283240774">Lisaseaded</translation> +<translation id="3410336247007142655">Kuva tumeda teema seaded</translation> <translation id="3413817803639110246">Veel ei ole midagi kuvada</translation> <translation id="3428447136709161042">Katkesta ühendus võrguga <ph name="NETWORK_NAME" /></translation> <translation id="3430396595145920809">Tagasiliikumiseks pühkige paremalt vasakule</translation> @@ -327,6 +332,7 @@ <translation id="4378551569595875038">Ühendamine ...</translation> <translation id="4379531060876907730">Need on teie elektronpliiatsi tööriistad</translation> <translation id="4389184120735010762">Vajutasite dokitud luubi otseteed. Kas soovite luubi sisse lülitada?</translation> +<translation id="4412944820643904175"><ph name="FEATURE_NAME" /> on väljas.</translation> <translation id="4421231901400348175">Ekraani juhtimise jagamine isikuga <ph name="HELPER_NAME" /> kaugabi kaudu.</translation> <translation id="4430019312045809116">Helitugevus</translation> <translation id="4450893287417543264">Ära kuva uuesti</translation> @@ -346,6 +352,7 @@ <translation id="4570957409596482333">Nupp Vali ja kuula</translation> <translation id="4577274620589681794">Aeg on läbi · <ph name="LABEL" /></translation> <translation id="4585337515783392668">Katkesta ülekandmine tundmatus vastuvõtjas</translation> +<translation id="4596144739579517758">Tume teema on väljas</translation> <translation id="4623167406982293031">Kinnitage konto</translation> <translation id="4628757576491864469">Seadmed</translation> <translation id="4659419629803378708">ChromeVox on lubatud</translation> @@ -388,6 +395,7 @@ <translation id="5168181903108465623">Ülekandeseadmed on saadaval</translation> <translation id="5170568018924773124">Kuva kaustas</translation> <translation id="5207949376430453814">Tekstisisestusmärgi esiletõstmine</translation> +<translation id="5208059991603368177">Sees</translation> <translation id="5222676887888702881">Logi välja</translation> <translation id="523505283826916779">Juurdepääsuseaded</translation> <translation id="5260676007519551770">Töölaud 4</translation> @@ -399,6 +407,7 @@ <translation id="5313326810920013265">Bluetoothi seaded</translation> <translation id="5314219114274263156">Jäädvustati ekraanisalvestis</translation> <translation id="5331975486040154427">C-tüüpi USB-seade (tagumine vasakpoolne port)</translation> +<translation id="5352250171825660495">Tume teema on sisse lülitatud</translation> <translation id="5379115545237091094">Liiga palju katseid</translation> <translation id="5397578532367286026">Haldur (<ph name="MANAGER_EMAIL" />) saab kasutaja kasutusandmeid ja ajalugu vaadata aadressil chrome.com.</translation> <translation id="5400461572260843123">Kiirseaded, märguandekeskusele juurdepääsemiseks vajutage otsinguklahvi ja vasaknoolt.</translation> @@ -435,6 +444,7 @@ <translation id="5769373120130404283">Privaatsuskuva</translation> <translation id="5777841717266010279">Kas peatada ekraani jagamine?</translation> <translation id="5790085346892983794">Õnnestus</translation> +<translation id="579415080077680903">Vaigistus</translation> <translation id="5820394555380036790">Chromium OS</translation> <translation id="5837036133683224804">Katkesta <ph name="ROUTE_TITLE" /> asukohas <ph name="RECEIVER_NAME" /></translation> <translation id="5860033963881614850">Väljas</translation> @@ -445,6 +455,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">Sees</translation> <translation id="5920710855273935292">Mikrofon on vaigistatud.</translation> +<translation id="5946788582095584774"><ph name="FEATURE_NAME" /> on sisse lülitatud.</translation> <translation id="5947494881799873997">Ennista</translation> <translation id="595202126637698455">Toimivuse jälgimine on lubatud</translation> <translation id="5957083217255311415">Mobiilne andmeside on välja lülitatud.</translation> @@ -469,6 +480,7 @@ <translation id="615957422585914272">Ekraanil kuvatava klaviatuuri kuvamine</translation> <translation id="6164005077879661055">Kõik jälgitava kasutajaga seotud failid ja kohalikud andmed kustutatakse jäädavalt kohe, kui jälgitav kasutaja eemaldatakse. Selle jälgitava kasutaja külastatud veebisaite ja seadeid näeb haldur endiselt aadressil <ph name="MANAGEMENT_URL" />.</translation> <translation id="6165508094623778733">Lisateave</translation> +<translation id="6192859646269780503">Telefoni asukoht</translation> <translation id="622484624075952240">Alla</translation> <translation id="6236290670123303279">Halda seadeid</translation> <translation id="6237231532760393653">1X</translation> @@ -540,6 +552,7 @@ <translation id="6981982820502123353">Juurdepääsetavus</translation> <translation id="698231206551913481">Kõik selle kasutajaga seotud failid ja kohalikud andmed kustutatakse jäädavalt kohe, kui see kasutaja eemaldatakse.</translation> <translation id="7007983414944123363">Teie PIN-koodi või parooli ei saanud kinnitada. Proovige uuesti.</translation> +<translation id="7013005189539051442">Kuumkoha lubamine</translation> <translation id="7015766095477679451">Tulge tagasi kell <ph name="COME_BACK_TIME" />.</translation> <translation id="7025533177575372252">Ühendage seade <ph name="DEVICE_NAME" /> oma telefoniga</translation> <translation id="7026338066939101231">Vähenemine</translation> @@ -612,6 +625,7 @@ <translation id="7842569679327885685">Hoiatus: katseline funktsioon</translation> <translation id="7846634333498149051">Klaviatuur</translation> <translation id="7868900307798234037">Sõrmejäljega avamine</translation> +<translation id="7872786842639831132">Väljas</translation> <translation id="7886169021410746335">Privaatsusseadete kohandamine</translation> <translation id="7886277072580235377">Teie Interneti-seanss kustutatakse väljalogimisel. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Saada meil</translation> @@ -716,6 +730,7 @@ <translation id="8853703225951107899">Teie PIN-koodi või parooli ei saanud ikka kinnitada. Märkus. Kui muutsite hiljuti parooli, siis kasutage vana parooli. Uus parool rakendatakse väljalogimisel.</translation> <translation id="885387440427703469">Ekraanikuva jäädvustamine on keelatud</translation> <translation id="8870509716567206129">Rakendus ei toeta jagatud ekraani.</translation> +<translation id="8871580645200179206">Vahetage tumeda teema olekut. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">Ühendus puudub</translation> <translation id="8877788021141246043">Määra meeldetuletus</translation> <translation id="8878886163241303700">Ekraani laiendamine</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb index ae12d10..4f98720 100644 --- a/ash/strings/ash_strings_hi.xtb +++ b/ash/strings/ash_strings_hi.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">मेन्यू छोटा करें</translation> <translation id="1383876407941801731">Search</translation> <translation id="1391102559483454063">चालू है</translation> +<translation id="1407069428457324124">गहरे रंग वाली थीम</translation> <translation id="1419738280318246476">सूचना से जुड़ी कार्रवाई करने के लिए डिवाइस को अनलॉक करें</translation> <translation id="1420408895951708260">नाइट लाइट को टॉगल करें. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">स्क्रीनशॉट लिया गया और क्लिपबोर्ड पर सेव किया गया</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">ज़्यादा विकल्पों के लिए क्लिक करें</translation> <translation id="1570871743947603115">ब्लूटूथ टॉगल करें. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">इस सत्र में अपनी सभी गतिविधि ऐक्सेस करें</translation> +<translation id="1611993646327628135">चालू करें</translation> <translation id="1632985212731562677">ऐक्सेस करने का तरीका बदलने की सुविधा को सेटिंग > सुलभता में जाकर, बंद किया जा सकता है.</translation> <translation id="1654477262762802994">बोलकर खोजना शुरू करें</translation> <translation id="1667964833127753507">न्यूट्रल कलर मोड, वॉलपेपर में काम में लिए गए रंगों का इस्तेमाल नहीं करता है. इनकी जगह न्यूट्रल टोन के हल्के या गहरे रंगों के सेट का इस्तेमाल करता है.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">नेटवर्क कनेक्शन टॉगल करें. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">दाईं तरफ़ स्क्रोल करें</translation> <translation id="1782199038061388045">अनुवाद</translation> +<translation id="1787955149152357925">बंद है</translation> <translation id="181103072419391116">सिग्नल की क्षमता <ph name="SIGNAL_STRENGTH" />, आपका एडमिन प्रबंधित करता है</translation> <translation id="1812997170047690955">मेरी स्क्रीन पर क्या है?</translation> <translation id="1823873187264960516">ईथरनेट: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">मेन्यू बड़ा करें</translation> <translation id="3087734570205094154">नीचे</translation> +<translation id="3090989381251959936"><ph name="FEATURE_NAME" /> को टॉगल करें. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">कर्सर घुमाएं</translation> <translation id="3098580329624789136">"<ph name="QUERY" />" के लिए <ph name="INTENT" /> पाएं</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (ब्लूटूथ)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">USB-C डिवाइस (दायां सामने वाला पोर्ट)</translation> <translation id="3386978599540877378">सामग्री को बड़ा दिखाने की फ़ुल-स्क्रीन की सुविधा</translation> <translation id="3400357268283240774">अतिरिक्त सेटिंग</translation> +<translation id="3410336247007142655">गहरे रंग वाली थीम की सेटिंग दिखाएं</translation> <translation id="3413817803639110246">अभी देखने के लिए कुछ भी नहीं है</translation> <translation id="3428447136709161042"><ph name="NETWORK_NAME" /> से डिसकनेक्ट करें</translation> <translation id="3430396595145920809">वापस जाने के लिए, स्क्रीन की दाईं ओर से स्वाइप करें</translation> @@ -327,6 +332,7 @@ <translation id="4378551569595875038">कनेक्टिंग...</translation> <translation id="4379531060876907730">ये आपके स्टाइलस टूल हैं</translation> <translation id="4389184120735010762">आपने 'सामग्री को बड़ा दिखाने वाली डॉक की गई सेवा' का कीबोर्ड शॉर्टकट दबाया है. क्या आप इसे चालू करना चाहते हैं?</translation> +<translation id="4412944820643904175"><ph name="FEATURE_NAME" /> बंद है.</translation> <translation id="4421231901400348175">आपकी स्क्रीन का नियंत्रण दूरस्थ सहायक के द्वारा <ph name="HELPER_NAME" /> से शेयर किया जा रहा है.</translation> <translation id="4430019312045809116">मात्रा</translation> <translation id="4450893287417543264">फिर से न दिखाएं</translation> @@ -346,6 +352,7 @@ <translation id="4570957409596482333">चुनें और सुनें बटन</translation> <translation id="4577274620589681794">समय खत्म हुआ · <ph name="LABEL" /></translation> <translation id="4585337515783392668">ऐसे रिसीवर पर कास्ट करना बंद करें जिसकी जानकारी नहीं है</translation> +<translation id="4596144739579517758">गहरे रंग वाली थीम बंद है</translation> <translation id="4623167406982293031">खाते की पुष्टि करें</translation> <translation id="4628757576491864469">डिवाइस</translation> <translation id="4659419629803378708">ChromeVox सक्षम है</translation> @@ -388,6 +395,7 @@ <translation id="5168181903108465623">कास्ट डिवाइस उपलब्ध हैं</translation> <translation id="5170568018924773124">फ़ोल्डर में दिखाएं</translation> <translation id="5207949376430453814">लेख कैरेट हाइलाइट करें</translation> +<translation id="5208059991603368177">चालू करें</translation> <translation id="5222676887888702881">साइन आउट करें</translation> <translation id="523505283826916779">सुलभता सेटिंग</translation> <translation id="5260676007519551770">डेस्क 4</translation> @@ -399,6 +407,7 @@ <translation id="5313326810920013265">ब्लूटूथ सेटिंग</translation> <translation id="5314219114274263156">स्क्रीन की रिकॉर्डिंग की गई</translation> <translation id="5331975486040154427">USB-C डिवाइस (बायां पिछला पोर्ट)</translation> +<translation id="5352250171825660495">गहरे रंग वाली थीम चालू है</translation> <translation id="5379115545237091094">कई बार कोशिश की जा चुकी है</translation> <translation id="5397578532367286026">chrome.com पर इस उपयोगकर्ता के उपयोग और इतिहास से जुड़ी जानकारी की प्रबंधक (<ph name="MANAGER_EMAIL" />) समीक्षा कर सकता है.</translation> <translation id="5400461572260843123">फटाफट सेटिंग, सूचना केंद्र को ऐक्सेस करने के लिए, सर्च + बाएं तीर के निशान को दबाएं.</translation> @@ -435,6 +444,7 @@ <translation id="5769373120130404283">निजता स्क्रीन</translation> <translation id="5777841717266010279">स्क्रीन साझाकरण बंद करें?</translation> <translation id="5790085346892983794">सफलता</translation> +<translation id="579415080077680903">आवाज़ बंद करें</translation> <translation id="5820394555380036790">क्रोमियम OS</translation> <translation id="5837036133683224804"><ph name="RECEIVER_NAME" /> पर <ph name="ROUTE_TITLE" /> बंद करें</translation> <translation id="5860033963881614850">बंद</translation> @@ -445,6 +455,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">चालू है</translation> <translation id="5920710855273935292">माइक म्यूट है.</translation> +<translation id="5946788582095584774"><ph name="FEATURE_NAME" /> चालू है.</translation> <translation id="5947494881799873997">वापस लाएं</translation> <translation id="595202126637698455">निष्पादन ट्रेसिंग सक्षम है</translation> <translation id="5957083217255311415">मोबाइल डेटा बंद कर दिया गया है.</translation> @@ -469,6 +480,7 @@ <translation id="615957422585914272">ऑन-स्क्रीन कीबोर्ड दिखाएं</translation> <translation id="6164005077879661055">'निगरानी में रखे गए इस उपयोगकर्ता' को हटाने के बाद, निगरानी में रखे गए उपयोगकर्ता से जुड़ीं सभी फ़ाइलें और 'स्थानीय डेटा' हमेशा के लिए मिट जाएंगे. 'निगरानी में रखे गए इस उपयोगकर्ता' की देखी गईं वेबसाइटें और सेटिंग <ph name="MANAGEMENT_URL" /> पर प्रबंधक को अब भी दिखेंगी.</translation> <translation id="6165508094623778733">ज़्यादा जानें</translation> +<translation id="6192859646269780503">फ़ोन का पता लगाने की सुविधा</translation> <translation id="622484624075952240">नीचे</translation> <translation id="6236290670123303279">सेटिंग प्रबंधित करें</translation> <translation id="6237231532760393653">1X</translation> @@ -540,6 +552,7 @@ <translation id="6981982820502123353">सुलभता</translation> <translation id="698231206551913481">इस उपयोगकर्ता को हटाए जाने पर, इससे जुड़ीं सभी फ़ाइलों और स्थानीय डेटा को हमेशा के लिए मिटा दिया जाएगा.</translation> <translation id="7007983414944123363">आपके पिन या पासवर्ड की पुष्टि नहीं की जा सकी. फिर से कोशिश करें.</translation> +<translation id="7013005189539051442">हॉटस्पॉट चालू करें</translation> <translation id="7015766095477679451"><ph name="COME_BACK_TIME" /> बजे फिर से देखें.</translation> <translation id="7025533177575372252">अपने <ph name="DEVICE_NAME" /> को अपने फ़ोन से कनेक्ट करें</translation> <translation id="7026338066939101231">कम</translation> @@ -612,6 +625,7 @@ <translation id="7842569679327885685">चेतावनी: यह फ़ीचर प्रयोग के लिए है</translation> <translation id="7846634333498149051">कीबोर्ड</translation> <translation id="7868900307798234037">फ़िंगरप्रिंट से अनलॉक करना</translation> +<translation id="7872786842639831132">बंद है</translation> <translation id="7886169021410746335">निजता सेटिंग समायोजित करें</translation> <translation id="7886277072580235377">जब आप साइन आउट करेंगे तो आपके इंटरनेट सत्र की जानकारी हटा दी जाएगी. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">ईमेल भेजो</translation> @@ -716,6 +730,7 @@ <translation id="8853703225951107899">अब भी आपके पिन या पासवर्ड की पुष्टि नहीं की जा सकी. ध्यान दें: अगर आपने हाल ही में अपना पासवर्ड बदला है, तो पुराना पासवर्ड इस्तेमाल करें. नया पासवर्ड आपके साइन आउट करने के बाद लागू होगा.</translation> <translation id="885387440427703469">स्क्रीन कैप्चर करने की सुविधा बंद कर दी गई</translation> <translation id="8870509716567206129">ऐप्लिकेशन दो-स्क्रीन मोड में काम नहीं करता है.</translation> +<translation id="8871580645200179206">गहरे रंग वाली थीम को टॉगल करें. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">कनेक्ट नहीं है</translation> <translation id="8877788021141246043">रिमाइंडर लगाओ</translation> <translation id="8878886163241303700">स्क्रीन का विस्तार करना</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb index d822c094..24579a9 100644 --- a/ash/strings/ash_strings_hr.xtb +++ b/ash/strings/ash_strings_hr.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Sažmi izbornik</translation> <translation id="1383876407941801731">Traži</translation> <translation id="1391102559483454063">Uključeno</translation> +<translation id="1407069428457324124">Tamna tema</translation> <translation id="1419738280318246476">Otključajte uređaj za izvršenje radnje obavijesti</translation> <translation id="1420408895951708260">Uključite ili isključite Noćno svjetlo. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">Napravljena je snimka zaslona i spremljena je u međuspremnik</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Kliknite za više opcija</translation> <translation id="1570871743947603115">Prebacivanje Bluetootha. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">Pristup svim vašim aktivnostima u ovoj sesiji</translation> +<translation id="1611993646327628135">Uključeno</translation> <translation id="1632985212731562677">Prekidač za pristup možete onemogućiti tako da otvorite Postavke > Pristupačnost.</translation> <translation id="1654477262762802994">Pokrenite glasovni upit</translation> <translation id="1667964833127753507">Način neutralne boje ne upotrebljava boje izdvojene iz pozadine, već ih zamjenjuje skupom neutralnih svijetlih ili tamnih nijansi.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Prebacivanje mrežne veze. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">Pomicanje udesno</translation> <translation id="1782199038061388045">prijevod</translation> +<translation id="1787955149152357925">Isključeno</translation> <translation id="181103072419391116">Jačina signala <ph name="SIGNAL_STRENGTH" />, upravlja administrator</translation> <translation id="1812997170047690955">Što je na mojem zaslonu?</translation> <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">Proširi izbornik</translation> <translation id="3087734570205094154">Donji</translation> +<translation id="3090989381251959936">Uključite ili isključite značajku <ph name="FEATURE_NAME" />. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">Pomicanje pokazivača</translation> <translation id="3098580329624789136">Saznajte <ph name="INTENT" /> za "<ph name="QUERY" />"</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">USB-C uređaj (prednji desni priključak)</translation> <translation id="3386978599540877378">povećalo cijelog zaslona</translation> <translation id="3400357268283240774">Dodatne postavke</translation> +<translation id="3410336247007142655">Prikaz postavki Tamne teme</translation> <translation id="3413817803639110246">Još nema ničega</translation> <translation id="3428447136709161042">Želite li prekinuti vezu s mrežom <ph name="NETWORK_NAME" />?</translation> <translation id="3430396595145920809">Prijeđite prstom zdesna da biste se vratili</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">Povezivanje...</translation> <translation id="4379531060876907730">Ovo su vaši alati za pisaljke</translation> <translation id="4389184120735010762">Pritisnuli ste tipkovni prečac za usidreno povećalo. Želite li ga uključiti?</translation> +<translation id="4412944820643904175">Značajka <ph name="FEATURE_NAME" /> je isključena.</translation> <translation id="4421231901400348175"><ph name="HELPER_NAME" /> i vi dijelite kontrolu nad zaslonom putem Daljinske pomoći.</translation> <translation id="4430019312045809116">Glasnoća</translation> <translation id="4450893287417543264">Ne prikazuj ponovo</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">Gumb Odabira za govor</translation> <translation id="4577274620589681794">Vrijeme je isteklo · <ph name="LABEL" /></translation> <translation id="4585337515783392668">Zaustavite emitiranje na nepoznatom prijamniku</translation> +<translation id="4596144739579517758">Tamna je tema isključena</translation> <translation id="4623167406982293031">Potvrdite račun</translation> <translation id="4628757576491864469">Uređaji</translation> <translation id="4659419629803378708">ChromeVox omogućen</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">Dostupni su uređaji za emitiranje</translation> <translation id="5170568018924773124">Pokaži u mapi</translation> <translation id="5207949376430453814">Istakni znak za umetanje teksta</translation> +<translation id="5208059991603368177">Uključeno</translation> <translation id="5222676887888702881">Odjava</translation> <translation id="523505283826916779">Postavke pristupačnosti</translation> <translation id="5260676007519551770">Radna površina 4</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">Postavke Bluetootha</translation> <translation id="5314219114274263156">Napravljena je snimka zaslona</translation> <translation id="5331975486040154427">USB-C uređaj (stražnji lijevi priključak)</translation> +<translation id="5352250171825660495">Tamna tema je uključena</translation> <translation id="5379115545237091094">Previše pokušaja</translation> <translation id="5397578532367286026">Upravitelj (<ph name="MANAGER_EMAIL" />) može pregledavati upotrebu i povijest tog korisnika na web-lokaciji chrome.com.</translation> <translation id="5400461572260843123">Brze postavke, pritisnite tipku za pretraživanje i strelicu lijevo da biste otvorili centar obavijesti.</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">Zaslon privatnosti</translation> <translation id="5777841717266010279">Prekinuti dijeljenje zaslona?</translation> <translation id="5790085346892983794">Uspjeh</translation> +<translation id="579415080077680903">Tišina</translation> <translation id="5820394555380036790">OS Chromium</translation> <translation id="5837036133683224804">Zaustavite <ph name="ROUTE_TITLE" /> na uređaju <ph name="RECEIVER_NAME" /></translation> <translation id="5860033963881614850">Isključeno</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">Uključi</translation> <translation id="5920710855273935292">Mikrofon je isključen.</translation> +<translation id="5946788582095584774">Značajka <ph name="FEATURE_NAME" /> je uključena.</translation> <translation id="5947494881799873997">Vrati</translation> <translation id="595202126637698455">Omogućeno je praćenje izvedbe</translation> <translation id="5957083217255311415">Mobilni su podaci isključeni.</translation> @@ -468,6 +479,7 @@ <translation id="615957422585914272">Prikaži tipkovnicu na zaslonu</translation> <translation id="6164005077879661055">Sve datoteke i lokalni podaci povezani sa zaštićenim korisnikom trajno će se izbrisati kada se taj korisnik ukloni. Web-lokacije koje je taj korisnik posjetio i njegove postavke mogu i dalje biti vidljive upravitelju na adresi <ph name="MANAGEMENT_URL" />.</translation> <translation id="6165508094623778733">Saznajte više</translation> +<translation id="6192859646269780503">Lociranje telefona</translation> <translation id="622484624075952240">Dolje</translation> <translation id="6236290670123303279">Upravljaj postavkama</translation> <translation id="6237231532760393653">1X</translation> @@ -539,6 +551,7 @@ <translation id="6981982820502123353">Pristupačnost</translation> <translation id="698231206551913481">Sve datoteke i lokalni podaci povezani s ovim korisnikom trajno će se izbrisati nakon uklanjanja korisnika.</translation> <translation id="7007983414944123363">Vaš PIN ili zaporku nije bilo moguće potvrditi. Pokušajte ponovo.</translation> +<translation id="7013005189539051442">Omogućivanje žarišne točke</translation> <translation id="7015766095477679451">Vratite se u <ph name="COME_BACK_TIME" />.</translation> <translation id="7025533177575372252">Povežite <ph name="DEVICE_NAME" /> i telefon</translation> <translation id="7026338066939101231">Pomak unatrag</translation> @@ -611,6 +624,7 @@ <translation id="7842569679327885685">Upozorenje: eksperimentalna značajka</translation> <translation id="7846634333498149051">Tipkovnica</translation> <translation id="7868900307798234037">Otključavanje otiskom prsta</translation> +<translation id="7872786842639831132">Isključeno</translation> <translation id="7886169021410746335">Prilagodba postavki privatnosti</translation> <translation id="7886277072580235377">Vaša će se internetska sesija izbrisati kada se odjavite. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Pošalji e-poruku</translation> @@ -715,6 +729,7 @@ <translation id="8853703225951107899">Bez obzira na to, vaš PIN ili zaporku nije bilo moguće potvrditi. Napomena: ako ste nedavno promijenili zaporku, upotrijebite staru zaporku. Vaša nova zaporka primijenit će se nakon što se odjavite.</translation> <translation id="885387440427703469">Snimanje zaslona onemogućeno</translation> <translation id="8870509716567206129">Aplikacija ne podržava podijeljeni zaslon.</translation> +<translation id="8871580645200179206">Uključite ili isključite Tamnu temu. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">Niste povezani</translation> <translation id="8877788021141246043">Postavi podsjetnik</translation> <translation id="8878886163241303700">Produljenje zaslona</translation>
diff --git a/ash/strings/ash_strings_hy.xtb b/ash/strings/ash_strings_hy.xtb index 235c9d78..82334a2 100644 --- a/ash/strings/ash_strings_hy.xtb +++ b/ash/strings/ash_strings_hy.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Ծալել ընտրացանկը</translation> <translation id="1383876407941801731">Որոնում</translation> <translation id="1391102559483454063">Միացված է</translation> +<translation id="1407069428457324124">Մուգ թեմա</translation> <translation id="1419738280318246476">Ծանուցման հետ գործողություն կատարելու համար ապակողպեք սարքը</translation> <translation id="1420408895951708260">Միացնել/անջատել գիշերային ռեժիմը: <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">Սքրինշոթը պահված է սեղմատախտակում</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Լրացուցիչ ընտրանքների համար սեղմեք</translation> <translation id="1570871743947603115">Միացնել/անջատել Bluetooth-ը: <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">Դիտեք այս աշխատաշրջանում ձեր գործողությունների վիճակագրությունը</translation> +<translation id="1611993646327628135">Միացված է</translation> <translation id="1632985212731562677">Switch Access-ն անջատելու համար անցեք Կարգավորումներ > Հատուկ գործառույթներ։</translation> <translation id="1654477262762802994">Հնչեցնել հարցում</translation> <translation id="1667964833127753507">Չեզոք գույների ռեժիմում ձեր պաստառների գույները չեն օգտագործվում։ Դրանց փոխարեն միջերեսը գունավորվում է չեզոք բաց կամ մուգ գույնի երանգներով։</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Միացնել/անջատել կապը: <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">Ոլորել աջ</translation> <translation id="1782199038061388045">թարգմանություն</translation> +<translation id="1787955149152357925">Անջատված է</translation> <translation id="181103072419391116">Ազդանշանի ուժգնությունը՝ <ph name="SIGNAL_STRENGTH" />, կառավարվում է ձեր ադմինիստրատորի կողմից</translation> <translation id="1812997170047690955">Ի՞նչ է ցուցադրվում էկրանին</translation> <translation id="1823873187264960516">Ethernet՝ <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">Ծավալել ընտրացանկը</translation> <translation id="3087734570205094154">Ներքև</translation> +<translation id="3090989381251959936"><ph name="FEATURE_NAME" /> – միացնել/անջատել։ <ph name="STATE_TEXT" />։</translation> <translation id="309749186376891736">Նշորդի տեղափոխում</translation> <translation id="3098580329624789136">Ստացեք <ph name="INTENT" /> «<ph name="QUERY" />» հարցումով</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">USB-C սարք (առջևի ձախակողմյան միացք)</translation> <translation id="3386978599540877378">Լիաէկրան խոշորացույց</translation> <translation id="3400357268283240774">Լրացուցիչ կարգավորումներ</translation> +<translation id="3410336247007142655">Ցույց տալ մուգ թեմայի կարգավորումները</translation> <translation id="3413817803639110246">Դեռևս ոչինչ չկա</translation> <translation id="3428447136709161042">Անջատել «<ph name="NETWORK_NAME" />» ցանցից</translation> <translation id="3430396595145920809">Սահեցրեք մատը աջից՝ հետ գնալու համար</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">Միացում…</translation> <translation id="4379531060876907730">Սրանք ձեր ստիլուսի գործիքներն են</translation> <translation id="4389184120735010762">Դուք սեղմել եք ամրացված խոշորացույցի դյուրանցման ստեղները: Ուզում եք միացնե՞լ այն:</translation> +<translation id="4412944820643904175"><ph name="FEATURE_NAME" /> – անջատված է։</translation> <translation id="4421231901400348175">Էկրանի կառավարման համօգտագործում <ph name="HELPER_NAME" />-ի հետ Հեռակա օգնության միջոցով:</translation> <translation id="4430019312045809116">Ձայնի ուժգնություն</translation> <translation id="4450893287417543264">Այլևս ցույց չտալ</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">«Ընտրեք և լսեք» կոճակ</translation> <translation id="4577274620589681794">Ժամանակը սպառվել է · <ph name="LABEL" /></translation> <translation id="4585337515783392668">Դադարեցնել հեռարձակումը անհայտ սարքին</translation> +<translation id="4596144739579517758">Մուգ թեման անջատված է</translation> <translation id="4623167406982293031">Հաստատել հաշիվը</translation> <translation id="4628757576491864469">Սարքեր</translation> <translation id="4659419629803378708">ChromeVox-ը միացված է</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">Առկա են հեռարձակման սարքեր</translation> <translation id="5170568018924773124">Ցույց տալ պանակում</translation> <translation id="5207949376430453814">Ընդգծել տեքստի նշորդը</translation> +<translation id="5208059991603368177">Միացված է</translation> <translation id="5222676887888702881">Դուրս գրվել</translation> <translation id="523505283826916779">Հատուկ գործառույթների կարգավորումներ</translation> <translation id="5260676007519551770">Աշխատասեղան 4</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">Bluetooth-ի կարգավորումներ</translation> <translation id="5314219114274263156">Էկրանը տեսագրվել է</translation> <translation id="5331975486040154427">USB-C սարք (հետևի ձախակողմյան միացք)</translation> +<translation id="5352250171825660495">Մուգ թեման միացված է</translation> <translation id="5379115545237091094">Չափազանց շատ փորձեր</translation> <translation id="5397578532367286026">Այս օգտատիրոջ օգտագործման տվյալները և պատմությունը կարող են վերահսկվել chrome.com-ի կառավարիչի (<ph name="MANAGER_EMAIL" />) կողմից:</translation> <translation id="5400461572260843123">Արագ կարգավորումներ․ սեղմեք Search+ձախ սլաքը՝ ծանուցումների կենտրոն մտնելու համար։</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">Գաղտնիության էկրան</translation> <translation id="5777841717266010279">Դադարեցնե՞լ էկրանի համօգտագործումը:</translation> <translation id="5790085346892983794">Հաջողվեց</translation> +<translation id="579415080077680903">Անձայն ռեժիմ</translation> <translation id="5820394555380036790">Chromium OS</translation> <translation id="5837036133683224804">Դադարեցնել <ph name="ROUTE_TITLE" /> ներդիրի հեռարձակումը «<ph name="RECEIVER_NAME" />» սարքին</translation> <translation id="5860033963881614850">Անջատ.</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">Միացնել</translation> <translation id="5920710855273935292">Խոսափողի ձայնն անջատված է։</translation> +<translation id="5946788582095584774"><ph name="FEATURE_NAME" /> – միացված է։</translation> <translation id="5947494881799873997">Հետադարձել</translation> <translation id="595202126637698455">Կատարողականության հետագծումը միացված է</translation> <translation id="5957083217255311415">Բջջային ինտերնետն անջատված է:</translation> @@ -468,6 +479,7 @@ <translation id="615957422585914272">Ցույց տալ էկրանի ստեղնաշարը</translation> <translation id="6164005077879661055">Վերահսկվող օգտատիրոջ հետ կապված բոլոր ֆայլերը և տեղային տվյալներն ընդմիշտ կջնջվեն, եթե հեռացնեք այս պրոֆիլը, սակայն կառավարիչը կկարողանա տեսնել վերահսկվող օգտատիրոջ այցելած վեբկայքերը և կարգավորումները <ph name="MANAGEMENT_URL" />-ում:</translation> <translation id="6165508094623778733">Իմանալ ավելին</translation> +<translation id="6192859646269780503">Հեռախոսի տեղորոշում</translation> <translation id="622484624075952240">Վար</translation> <translation id="6236290670123303279">Կառավարել կարգավորումները</translation> <translation id="6237231532760393653">1X</translation> @@ -539,6 +551,7 @@ <translation id="6981982820502123353">Մատչելիությունը</translation> <translation id="698231206551913481">Այս օգտատիրոջ հետ կապված բոլոր ֆայլերը և տեղային տվյալներն ընդմիշտ կջնջվեն, եթե հեռացնեք այս պրոֆիլը:</translation> <translation id="7007983414944123363">Չհաջողվեց հաստատել ձեր PIN կոդը կամ գաղտնաբառը։ Նորից փորձեք։</translation> +<translation id="7013005189539051442">Թեժ կետ</translation> <translation id="7015766095477679451">Վերադարձեք <ph name="COME_BACK_TIME" />։</translation> <translation id="7025533177575372252">Կապեք ձեր <ph name="DEVICE_NAME" /> սարքը ձեր հեռախոսի հետ</translation> <translation id="7026338066939101231">Նվազեցնել</translation> @@ -611,6 +624,7 @@ <translation id="7842569679327885685">Ուշադրություն. սա փորձնական գործառույթ է</translation> <translation id="7846634333498149051">Ստեղնաշար</translation> <translation id="7868900307798234037">Ապակողպում մատնահետքով</translation> +<translation id="7872786842639831132">Անջատված է</translation> <translation id="7886169021410746335">Փոփոխել գաղտնիության կարգավորումները</translation> <translation id="7886277072580235377">Հաշվից դուրս գալուց հետո համացանցում ձեր գործողությունների մասին տվյալները կջնջվեն: <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Ուղարկել նամակ</translation> @@ -715,6 +729,7 @@ <translation id="8853703225951107899">Չհաջողվեց հաստատել ձեր PIN կոդը կամ գաղտնաբառը։ Նշում․ եթե դուք վերջերս փոխել եք ձեր գաղտնաբառը, ապա օգտագործեք հինը։ Ձեր նոր գաղտնաբառն ուժի մեջ կմտնի, երբ դուրս գաք հաշվից։</translation> <translation id="885387440427703469">Էկրանի լուսանկարման գործառույթն անջատված է</translation> <translation id="8870509716567206129">Հավելվածը չի աջակցում էկրանի տրոհումը:</translation> +<translation id="8871580645200179206">Միացնել/անջատել մուգ թեման։ <ph name="STATE_TEXT" />։</translation> <translation id="8874184842967597500">Կապ չկա</translation> <translation id="8877788021141246043">Ստեղծել հիշեցում</translation> <translation id="8878886163241303700">Էկրանի ընդարձակում</translation>
diff --git a/ash/strings/ash_strings_it.xtb b/ash/strings/ash_strings_it.xtb index 3aecc34..dba123f 100644 --- a/ash/strings/ash_strings_it.xtb +++ b/ash/strings/ash_strings_it.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Comprimi il menu</translation> <translation id="1383876407941801731">Cerca</translation> <translation id="1391102559483454063">On</translation> +<translation id="1407069428457324124">Tema scuro</translation> <translation id="1419738280318246476">Sblocca il dispositivo per eseguire l'azione di notifica</translation> <translation id="1420408895951708260">Attiva/disattiva luminosità notturna. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">Screenshot acquisito e salvato negli appunti</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Fai clic per visualizzare altre opzioni</translation> <translation id="1570871743947603115">Attiva/disattiva Bluetooth. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">Accedere a tutte le tue attività in questa sessione.</translation> +<translation id="1611993646327628135">On</translation> <translation id="1632985212731562677">È possibile disattivare Switch Access in Impostazioni > Accessibilità.</translation> <translation id="1654477262762802994">Avvia una query vocale</translation> <translation id="1667964833127753507">La modalità colore Neutra non usa i colori estratti dallo sfondo, che sostituisce con un insieme di tonalità neutre chiare o scure.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Attiva/disattiva connessione di rete. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">Scorri a destra</translation> <translation id="1782199038061388045">traduzione</translation> +<translation id="1787955149152357925">Off</translation> <translation id="181103072419391116">Intensità del segnale <ph name="SIGNAL_STRENGTH" />, gestita dall'amministratore</translation> <translation id="1812997170047690955">Cosa c'è sul mio schermo?</translation> <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">maiusc</translation> <translation id="3081696990447829002">Espandi il menu</translation> <translation id="3087734570205094154">In basso</translation> +<translation id="3090989381251959936">Attiva/disattiva <ph name="FEATURE_NAME" />. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">Sposta il cursore</translation> <translation id="3098580329624789136">Ottieni la <ph name="INTENT" /> di "<ph name="QUERY" />"</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">Dispositivo USB-C (porta anteriore destra)</translation> <translation id="3386978599540877378">la lente d'ingrandimento a schermo intero</translation> <translation id="3400357268283240774">Impostazioni aggiuntive</translation> +<translation id="3410336247007142655">Mostra le impostazioni del tema scuro</translation> <translation id="3413817803639110246">Niente da vedere in questo momento</translation> <translation id="3428447136709161042">Disconnettiti da <ph name="NETWORK_NAME" /></translation> <translation id="3430396595145920809">Scorri da destra per tornare indietro</translation> @@ -327,6 +332,7 @@ <translation id="4378551569595875038">Connessione...</translation> <translation id="4379531060876907730">Ecco gli strumenti per il tuo stilo</translation> <translation id="4389184120735010762">Hai premuto la scorciatoia da tastiera per la lente d'ingrandimento ancorata. Vuoi attivarla?</translation> +<translation id="4412944820643904175">La funzionalità <ph name="FEATURE_NAME" /> è disattivata.</translation> <translation id="4421231901400348175">Condividi il controllo dello schermo con <ph name="HELPER_NAME" /> tramite Assistenza remota.</translation> <translation id="4430019312045809116">Volume</translation> <translation id="4450893287417543264">Non mostrare più</translation> @@ -346,6 +352,7 @@ <translation id="4570957409596482333">Pulsante Seleziona per ascoltare</translation> <translation id="4577274620589681794">Tempo scaduto · <ph name="LABEL" /></translation> <translation id="4585337515783392668">Interrompi la trasmissione su ricevitore sconosciuto</translation> +<translation id="4596144739579517758">Tema scuro disattivato</translation> <translation id="4623167406982293031">Verifica account</translation> <translation id="4628757576491864469">Dispositivi</translation> <translation id="4659419629803378708">ChromeVox attivato</translation> @@ -388,6 +395,7 @@ <translation id="5168181903108465623">Dispositivi di trasmissione disponibili</translation> <translation id="5170568018924773124">Mostra nella cartella</translation> <translation id="5207949376430453814">Evidenzia il cursore di testo</translation> +<translation id="5208059991603368177">On</translation> <translation id="5222676887888702881">Esci</translation> <translation id="523505283826916779">Impostazioni di accessibilità</translation> <translation id="5260676007519551770">Scrivania 4</translation> @@ -399,6 +407,7 @@ <translation id="5313326810920013265">Impostazioni Bluetooth</translation> <translation id="5314219114274263156">Registrazione dello schermo acquisita</translation> <translation id="5331975486040154427">Dispositivo USB-C (porta posteriore sinistra)</translation> +<translation id="5352250171825660495">Tema scuro attivo</translation> <translation id="5379115545237091094">Troppi tentativi</translation> <translation id="5397578532367286026">L'utilizzo e la cronologia di questo utente possono essere esaminati dal gestore (<ph name="MANAGER_EMAIL" />) su chrome.com.</translation> <translation id="5400461572260843123">Impostazioni rapide; premi il tasto per la ricerca + freccia sinistra per accedere al centro notifiche.</translation> @@ -435,6 +444,7 @@ <translation id="5769373120130404283">Schermata sulla privacy</translation> <translation id="5777841717266010279">Interrompere la condivisione dello schermo?</translation> <translation id="5790085346892983794">Completato</translation> +<translation id="579415080077680903">Silenzioso</translation> <translation id="5820394555380036790">Chromium OS</translation> <translation id="5837036133683224804">Interrompi <ph name="ROUTE_TITLE" /> su <ph name="RECEIVER_NAME" /></translation> <translation id="5860033963881614850">OFF</translation> @@ -445,6 +455,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">On</translation> <translation id="5920710855273935292">L'audio del microfono è disattivato.</translation> +<translation id="5946788582095584774">La funzionalità <ph name="FEATURE_NAME" /> è attiva.</translation> <translation id="5947494881799873997">Ripristina</translation> <translation id="595202126637698455">Rilevamento del rendimento attivo</translation> <translation id="5957083217255311415">I dati mobili non sono attivi.</translation> @@ -469,6 +480,7 @@ <translation id="615957422585914272">Mostra tastiera sullo schermo</translation> <translation id="6164005077879661055">Tutti i file e i dati locali associati all'utente controllato verranno eliminati definitivamente in seguito alla rimozione dell'utente. Le impostazioni e i siti web visitati relativi all'utente controllato potrebbero essere ancora visibili al gestore all'indirizzo <ph name="MANAGEMENT_URL" />.</translation> <translation id="6165508094623778733">Ulteriori informazioni</translation> +<translation id="6192859646269780503">Geolocalizza telefono</translation> <translation id="622484624075952240">Giù</translation> <translation id="6236290670123303279">Gestisci impostazioni</translation> <translation id="6237231532760393653">1X</translation> @@ -540,6 +552,7 @@ <translation id="6981982820502123353">Accessibilità</translation> <translation id="698231206551913481">Tutti i file e i dati locali associati a questo utente verranno eliminati definitivamente in seguito alla rimozione dell'utente.</translation> <translation id="7007983414944123363">Impossibile verificare il PIN o la password. Riprova.</translation> +<translation id="7013005189539051442">Attiva hotspot</translation> <translation id="7015766095477679451">Ritorna alle ore <ph name="COME_BACK_TIME" />.</translation> <translation id="7025533177575372252">Connetti il tuo dispositivo <ph name="DEVICE_NAME" /> con il telefono</translation> <translation id="7026338066939101231">Diminuisci</translation> @@ -612,6 +625,7 @@ <translation id="7842569679327885685">Avviso: funzione sperimentale</translation> <translation id="7846634333498149051">Tastiera</translation> <translation id="7868900307798234037">Sblocco con l'impronta in corso</translation> +<translation id="7872786842639831132">Off</translation> <translation id="7886169021410746335">Modificare le impostazioni sulla privacy</translation> <translation id="7886277072580235377">La sessione Internet verrà cancellata al momento dell'uscita dall'account. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Invia un'email</translation> @@ -716,6 +730,7 @@ <translation id="8853703225951107899">Non è stato di nuovo possibile verificare il PIN o la password. Nota: se hai modificato la password di recente, usa la password precedente. La nuova password verrà applicata quando uscirai dall'account.</translation> <translation id="885387440427703469">Acquisizione schermo disattivata</translation> <translation id="8870509716567206129">L'app non supporta la modalità Schermo diviso.</translation> +<translation id="8871580645200179206">Attiva/disattiva il tema scuro. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">Non connesso</translation> <translation id="8877788021141246043">Imposta un promemoria</translation> <translation id="8878886163241303700">Estensione schermo</translation>
diff --git a/ash/strings/ash_strings_ka.xtb b/ash/strings/ash_strings_ka.xtb index dd401a1..ce2fd048 100644 --- a/ash/strings/ash_strings_ka.xtb +++ b/ash/strings/ash_strings_ka.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">მენიუს ჩაკეცვა</translation> <translation id="1383876407941801731">ძიება</translation> <translation id="1391102559483454063">ჩართვა</translation> +<translation id="1407069428457324124">მუქი თემა</translation> <translation id="1419738280318246476">შეტყობინების ქმედების შესასრულებლად განბლოკეთ მოწყობილობა</translation> <translation id="1420408895951708260">ღამის განათების გადართვა. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">ეკრანის ანაბეჭდი გადაღებულია და შენახულია გაცვლის ბუფერში</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">დააწკაპუნეთ დამატებითი ვარიანტების სანახავად</translation> <translation id="1570871743947603115">Bluetooth-ის გადართვა. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">ამ სესიის დროს თქვენს მთელ აქტივობაზე წვდომა</translation> +<translation id="1611993646327628135">ჩართული</translation> <translation id="1632985212731562677">გადამრთველით წვდომის გათიშვა შესაძლებელია აქ: პარამეტრები > მარტივი წვდომა.</translation> <translation id="1654477262762802994">ხმოვანი მოთხოვნის დაწყება</translation> <translation id="1667964833127753507">ფერთა ნეიტრალური რეჟიმი არ იყენებს ფონიდან ამოღებულ ფერებს — ისინი ნეიტრალური ღია ან მუქი ტონებით ნაცვლდება.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">ქსელის კავშირის გადართვა. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">გადაადგილება მარჯვნივ</translation> <translation id="1782199038061388045">თარგმანი</translation> +<translation id="1787955149152357925">გამორთვა</translation> <translation id="181103072419391116">სიგნალის სიძლიერე: <ph name="SIGNAL_STRENGTH" />, მართავს თქვენი ადმინისტრატორი</translation> <translation id="1812997170047690955">რა არის ჩემს ეკრანზე?</translation> <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">მენიუს გაშლა</translation> <translation id="3087734570205094154">ქვედა საზღვარი</translation> +<translation id="3090989381251959936">გადაირთოს <ph name="FEATURE_NAME" />. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">კურსორის გადაადგილება</translation> <translation id="3098580329624789136">„<ph name="QUERY" />“-ის <ph name="INTENT" /></translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">USB-C მოწყობილობა (მარჯვენა წინა პორტი)</translation> <translation id="3386978599540877378">სრულეკრანიანი ლუპა</translation> <translation id="3400357268283240774">დამატებითი პარამეტრები</translation> +<translation id="3410336247007142655">მუქი თემის პარამეტრების ჩვენება</translation> <translation id="3413817803639110246">ჯერჯერობით სანახავი არაფერია</translation> <translation id="3428447136709161042"><ph name="NETWORK_NAME" />-თან კავშირის გაწყვეტა</translation> <translation id="3430396595145920809">უკან დასაბრუნებლად გადაფურცლეთ მარჯვნიდან</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">დაკავშირება…</translation> <translation id="4379531060876907730">ეს არის თქვენი სტილუსის ხელსაწყოები</translation> <translation id="4389184120735010762">თქვენ დააჭირეთ ჩამაგრებული ლუპის კლავიატურის მალსახმობს. გსურთ მისი ჩართვა?</translation> +<translation id="4412944820643904175"><ph name="FEATURE_NAME" /> გამორთულია.</translation> <translation id="4421231901400348175">თქვენი ეკრანის მართვის გაზიარება <ph name="HELPER_NAME" /> დისტანციური დამხმარეს მეშვეობით.</translation> <translation id="4430019312045809116">ხმა</translation> <translation id="4450893287417543264">აღარ გამოჩნდეს</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">წარმოსათქმელად მონიშვნის ღილაკი</translation> <translation id="4577274620589681794">დრო ამოიწურა · <ph name="LABEL" /></translation> <translation id="4585337515783392668">ტრანსლირების შეწყვეტა უცნობ მიმღებში</translation> +<translation id="4596144739579517758">მუქი თემა გამორთულია</translation> <translation id="4623167406982293031">დაადასტურეთ ანგარიში</translation> <translation id="4628757576491864469">მოწყობილობები</translation> <translation id="4659419629803378708">ChromeVox ჩართულია</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">ხელმისაწვდომია გადაცემის მოწყობილობები</translation> <translation id="5170568018924773124">საქაღალდეში ჩვენება</translation> <translation id="5207949376430453814">ტექსტის კურსორის გამოყოფა</translation> +<translation id="5208059991603368177">ჩართვა</translation> <translation id="5222676887888702881">გამოსვლა</translation> <translation id="523505283826916779">მარტივი წვდომის პარამეტრები</translation> <translation id="5260676007519551770">დესკტოპი 4</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">Bluetooth-ის პარამეტრები</translation> <translation id="5314219114274263156">ეკრანის ჩანაწერი გაკეთებულია</translation> <translation id="5331975486040154427">USB-C მოწყობილობა (მარცხენა უკანა პორტი)</translation> +<translation id="5352250171825660495">მუქი თემა ჩართულია</translation> <translation id="5379115545237091094">დაფიქსირდა მეტისმეტად ბევრი მცდელობა</translation> <translation id="5397578532367286026">ამ მომხმარებლის გამოყენების და ისტორიის დათვალიერება შესაძლებელია მენეჯერის მიერ (<ph name="MANAGER_EMAIL" />) chrome.com-ზე.</translation> <translation id="5400461572260843123">სწრაფი პარამეტრები, შეტყობინებების ცენტრზე წვდომისთვის დააჭირეთ კლავიშთა კომბინაციაზე: search + მარცხნივ მიმართული ისარი.</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">კონფიდენციალური ეკრანი</translation> <translation id="5777841717266010279">შევწყვიტოთ ეკრანის გაზიარება?</translation> <translation id="5790085346892983794">წარმატება</translation> +<translation id="579415080077680903">სიჩუმე</translation> <translation id="5820394555380036790">Chromium OS</translation> <translation id="5837036133683224804"><ph name="ROUTE_TITLE" />-ის შეწყვეტა „<ph name="RECEIVER_NAME" />“-ში</translation> <translation id="5860033963881614850">გამორთვა</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">ჩართვა</translation> <translation id="5920710855273935292">მიკროფონი დადუმებულია.</translation> +<translation id="5946788582095584774"><ph name="FEATURE_NAME" /> ჩართულია.</translation> <translation id="5947494881799873997">დაბრუნება</translation> <translation id="595202126637698455">ეფექტურობის ტრასირება ჩართულია</translation> <translation id="5957083217255311415">მობილური ინტერნეტი გამორთულია.</translation> @@ -468,6 +479,7 @@ <translation id="615957422585914272">ეკრანული კლავიატურის ჩვენება</translation> <translation id="6164005077879661055">კონტროლის ქვეშ მყოფ ამ მომხმარებელთან დაკავშირებული ფაილები და ლოკალური მონაცემები სამუდამოდ წაიშლება ამ მომხმარებლის წაშლის შემთხვევაში. ამ მომხმარებლის მიერ მონახულებული ვებსაიტები და პარამეტრები შეიძლება მაინც ხილვადი დარჩეს მმართველისთვის აქ: <ph name="MANAGEMENT_URL" />.</translation> <translation id="6165508094623778733">შეიტყვეთ მეტი</translation> +<translation id="6192859646269780503">ტელეფონის მდებარეობის დადგენა</translation> <translation id="622484624075952240">ქვემოთ</translation> <translation id="6236290670123303279">პარამეტრების მართვა</translation> <translation id="6237231532760393653">1X</translation> @@ -539,6 +551,7 @@ <translation id="6981982820502123353">სპეციალური შესაძლებლობები</translation> <translation id="698231206551913481">ამ მომხმარებლის ამოშლის შემდეგ, მასთან დაკავშირებული ყველა ფაილი და ადგილობრივი მონაცემი სამუდამოდ წაიშლება.</translation> <translation id="7007983414944123363">თქვენი PIN-კოდის ან პაროლის დადასტურება ვერ მოხერხდა. ცადეთ ხელახლა.</translation> +<translation id="7013005189539051442">უსადენო ქსელის ჩართვა</translation> <translation id="7015766095477679451">დაბრუნდით <ph name="COME_BACK_TIME" />-ზე.</translation> <translation id="7025533177575372252">დაუკავშირეთ <ph name="DEVICE_NAME" /> თქვენს ტელეფონს</translation> <translation id="7026338066939101231">დეკრემენტი</translation> @@ -611,6 +624,7 @@ <translation id="7842569679327885685">გაფრთხილება: ფუნქცია ექსპერიმენტულია</translation> <translation id="7846634333498149051">კლავიატურა</translation> <translation id="7868900307798234037">მიმდინარეობს თითის ანაბეჭდით განბლოკვა</translation> +<translation id="7872786842639831132">გამორთვა</translation> <translation id="7886169021410746335">კონფიდენციალურობის პარამეტრების კორექტირება</translation> <translation id="7886277072580235377">გასვლის შემდეგ თქვენი ინტერნეტ-სესია გასუფთავდება. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">ელფოსტის გაგზავნა</translation> @@ -715,6 +729,7 @@ <translation id="8853703225951107899">თქვენი PIN-კოდის ან პაროლის დადასტურება კვლავ ვერ მოხერხდა. გაითვალისწინეთ: თუ ახლახან შეცვალეთ პაროლი, გამოიყენეთ თქვენი ძველი პაროლი. ახალი პაროლი ძალაში შევა, როცა სისტემიდან გახვალთ.</translation> <translation id="885387440427703469">ეკრანის აღბეჭდვა გათიშულია</translation> <translation id="8870509716567206129">ეკრანის გაყოფა არ არის მხარდაჭერილი აპის მიერ.</translation> +<translation id="8871580645200179206">მუქი თემის გადართვა. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">არ არის დაკავშირებული</translation> <translation id="8877788021141246043">შეხსენების დაყენება</translation> <translation id="8878886163241303700">ეკრანის გაშლა</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb index 42f37fe1..6d5e235 100644 --- a/ash/strings/ash_strings_kn.xtb +++ b/ash/strings/ash_strings_kn.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">ಮೆನುವನ್ನು ಕುಗ್ಗಿಸಿ</translation> <translation id="1383876407941801731">Search</translation> <translation id="1391102559483454063">ಆನ್</translation> +<translation id="1407069428457324124">ಡಾರ್ಕ್ ಥೀಮ್</translation> <translation id="1419738280318246476">ಅಧಿಸೂಚನೆ ಕ್ರಿಯೆಯನ್ನು ನಿರ್ವಹಿಸಲು ಸಾಧನವನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಿ</translation> <translation id="1420408895951708260">ನೈಟ್ ಲೈಟ್ ಟಾಗಲ್ ಮಾಡಿ. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">ಸ್ಕ್ರೀನ್ಶಾಟ್ ತೆಗೆದುಕೊಂಡು ಕ್ಲಿಪ್ಬೋರ್ಡ್ಗೆ ಉಳಿಸಲಾಗಿದೆ</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">ಇನ್ನಷ್ಟು ಆಯ್ಕೆಗಳಿಗೆ ಕ್ಲಿಕ್ ಮಾಡಿ</translation> <translation id="1570871743947603115">ಬ್ಲೂಟೂತ್ ಟಾಗಲ್ ಮಾಡಿ. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">ಈ ಸೆಶನ್ನಲ್ಲಿ ನೀವು ನಡೆಸುವ ಎಲ್ಲಾ ಚಟುವಟಿಕೆಯನ್ನು ಪ್ರವೇಶಿಸುವುದು</translation> +<translation id="1611993646327628135">ಆನ್ ಮಾಡಿ</translation> <translation id="1632985212731562677">ಪ್ರವೇಶ ಬದಲಾಯಿಸಿ ಅನ್ನು ಸೆಟ್ಟಿಂಗ್ಗಳು > ಆ್ಯಕ್ಸೆಸಿಬಿಲಿಟಿಯಲ್ಲಿ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬಹುದು.</translation> <translation id="1654477262762802994">ಧ್ವನಿ ಪ್ರಶ್ನೆಯನ್ನು ಕೇಳಲು ಪ್ರಾರಂಭಿಸಿ</translation> <translation id="1667964833127753507">ತಟಸ್ಥ ಬಣ್ಣ ಮೋಡ್, ವಾಲ್ಪೇಪರ್ನಿಂದ ಆಯ್ದು ತೆಗೆದ ಬಣ್ಣಗಳನ್ನು ಬಳಸುವುದಿಲ್ಲ, ಅವುಗಳನ್ನು ತಟಸ್ಥ ಛಾಯೆಯ ಬೆಳಕು ಅಥವಾ ಗಾಢ ವರ್ಣಗಳಿಂದ ಬದಲಾಯಿಸುತ್ತದೆ.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">ನೆಟ್ವರ್ಕ್ ಸಂಪರ್ಕವನ್ನು ಟಾಗಲ್ ಮಾಡಿ. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">ಬಲಕ್ಕೆ ಸ್ಕ್ರಾಲ್ ಮಾಡಿ</translation> <translation id="1782199038061388045">ಅನುವಾದ</translation> +<translation id="1787955149152357925">ಆಫ್ ಮಾಡಿ</translation> <translation id="181103072419391116">ಸಿಗ್ನಲ್ ಸಾಮರ್ಥ್ಯ <ph name="SIGNAL_STRENGTH" />, ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನಿರ್ವಹಿಸಿದ್ದಾರೆ</translation> <translation id="1812997170047690955">ನನ್ನ ಪರದೆಯಲ್ಲಿ ಏನಿದೆ?</translation> <translation id="1823873187264960516">ಇಥರ್ನೆಟ್: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">ಮೆನುವನ್ನು ವಿಸ್ತರಿಸಿ</translation> <translation id="3087734570205094154">ಕೆಳಗೆ</translation> +<translation id="3090989381251959936"><ph name="FEATURE_NAME" /> ಅನ್ನು ಟಾಗಲ್ ಮಾಡಿ. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">ಕರ್ಸರ್ ಸರಿಸಿ</translation> <translation id="3098580329624789136">"<ph name="QUERY" />" ಗಾಗಿ <ph name="INTENT" /> ಅನ್ನು ಪಡೆಯಿರಿ</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (ಬ್ಲೂಟೂತ್)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">USB-C ಸಾಧನ (ಬಲ ಭಾಗದ ಮುಂದಿನ ಪೋರ್ಟ್)</translation> <translation id="3386978599540877378">ಪೂರ್ಣ ಪರದೆಯ ವರ್ಧಕ</translation> <translation id="3400357268283240774">ಹೆಚ್ಚುವರಿ ಸೆಟ್ಟಿಂಗ್ಗಳು</translation> +<translation id="3410336247007142655">ಡಾರ್ಕ್ ಥೀಮ್ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೋರಿಸಿ</translation> <translation id="3413817803639110246">ಈಗ ನೋಡಲು ಏನೂ ಇಲ್ಲ</translation> <translation id="3428447136709161042"><ph name="NETWORK_NAME" /> ನಿಂದ ಕನೆಕ್ಷನ್ ಅನ್ನು ಕಡಿತಗೊಳಿಸಿ</translation> <translation id="3430396595145920809">ಹಿಂದಕ್ಕೆ ಹೋಗಲು, ಬಲದಿಂದ ಸ್ವೈಪ್ ಮಾಡಿ</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">ಕನೆಕ್ಟ್...</translation> <translation id="4379531060876907730">ಇವುಗಳು ನಿಮ್ಮ ಸ್ಟೈಲಸ್ ಪರಿಕರಗಳಾಗಿವೆ</translation> <translation id="4389184120735010762">ನೀವು ಡಾಕ್ ಮಾಡಿದ ವರ್ಧಕದ ಕೀಬೋರ್ಡ್ ಶಾರ್ಟ್ಕಟ್ ಒತ್ತಿದ್ದೀರಿ. ನೀವು ಅದನ್ನು ಆನ್ ಮಾಡಲು ಬಯಸುವಿರಾ?</translation> +<translation id="4412944820643904175"><ph name="FEATURE_NAME" /> ಆಫ್ ಆಗಿದೆ.</translation> <translation id="4421231901400348175">ರಿಮೋಟ್ ಸಹಾಯದ ಮೂಲಕ <ph name="HELPER_NAME" /> ಜೊತೆಗೆ ನಿಮ್ಮ ಪರದೆಯ ನಿಯಂತ್ರಣವನ್ನು ಹಂಚಲಾಗುತ್ತಿದೆ.</translation> <translation id="4430019312045809116">ವಾಲ್ಯೂಮ್</translation> <translation id="4450893287417543264">ಮತ್ತೊಮ್ಮೆ ತೋರಿಸಬೇಡಿ</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">'ಆಯ್ಕೆಮಾಡಿ ಮತ್ತು ಆಲಿಸಿ' ಬಟನ್</translation> <translation id="4577274620589681794">ಸಮಯ ಮುಗಿದಿದೆ · <ph name="LABEL" /></translation> <translation id="4585337515783392668">"ಅಪರಿಚಿತ ಸ್ವೀಕರಿಸುವವರು" ನಲ್ಲಿ ಬಿತ್ತರಿಸುವುದನ್ನು ನಿಲ್ಲಿಸಿ</translation> +<translation id="4596144739579517758">ಡಾರ್ಕ್ ಥೀಮ್ ಆಫ್ ಆಗಿದೆ</translation> <translation id="4623167406982293031">ಖಾತೆಯನ್ನು ದೃಢೀಕರಿಸಿ</translation> <translation id="4628757576491864469">ಸಾಧನಗಳು</translation> <translation id="4659419629803378708">ChromeVox ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">ಬಿತ್ತರಿಸುವಿಕೆಯ ಸಾಧನಗಳು ಲಭ್ಯವಿದೆ</translation> <translation id="5170568018924773124">ಫೋಲ್ಡರ್ನಲ್ಲಿ ತೋರಿಸಿ</translation> <translation id="5207949376430453814">ಪಠ್ಯದಲ್ಲಿ ಕೆರೆಟ್ ಅನ್ನು ಎದ್ದುಗಾಣಿಸಿ</translation> +<translation id="5208059991603368177">ಆನ್ ಮಾಡಿ</translation> <translation id="5222676887888702881">ಸೈನ್ ಔಟ್</translation> <translation id="523505283826916779">ಪ್ರವೇಶಿಸುವಿಕೆ ಸೆಟ್ಟಿಂಗ್ಗಳು</translation> <translation id="5260676007519551770">ಡೆಸ್ಕ್ 4</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">ಬ್ಲೂಟೂತ್ ಸೆಟ್ಟಿಂಗ್ಗಳು</translation> <translation id="5314219114274263156">ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್ ತೆಗೆದುಕೊಳ್ಳಲಾಗಿದೆ</translation> <translation id="5331975486040154427">USB-C ಸಾಧನ (ಎಡ ಭಾಗದ ಹಿಂದಿನ ಪೋರ್ಟ್)</translation> +<translation id="5352250171825660495">ಡಾರ್ಕ್ ಥೀಮ್ ಆನ್ ಆಗಿದೆ</translation> <translation id="5379115545237091094">ಹಲವು ಬಾರಿ ಪ್ರಯತ್ನಿಸಿದ್ದೀರಿ</translation> <translation id="5397578532367286026">ಈ ಬಳಕೆದಾರರ ಬಳಕೆ ಮತ್ತು ಇತಿಹಾಸವನ್ನು chrome.com ನಲ್ಲಿ ನಿರ್ವಾಹಕರು (<ph name="MANAGER_EMAIL" />) ಪರಿಶೀಲಿಸಬಹುದು.</translation> <translation id="5400461572260843123">ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್ಗಳು, ಅಧಿಸೂಚನೆ ಕೇಂದ್ರಕ್ಕೆ ಪ್ರವೇಶಿಸಲು ಹುಡುಕಾಟ + ಎಡಕ್ಕೆ ಬಾಣದ ಗುರುತನ್ನು ಒತ್ತಿರಿ.</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">ಗೌಪ್ಯತೆ ಪರದೆ</translation> <translation id="5777841717266010279">ಸ್ಕ್ರೀನ್ ಹಂಚಿಕೆ ನಿಲ್ಲಿಸುವುದೇ?</translation> <translation id="5790085346892983794">ಯಶಸ್ವಿಯಾಗಿದೆ</translation> +<translation id="579415080077680903">ನಿಶ್ಯಬ್ದಗೊಳಿಸಿ</translation> <translation id="5820394555380036790">Chromium OS</translation> <translation id="5837036133683224804"><ph name="RECEIVER_NAME" /> ನಲ್ಲಿ <ph name="ROUTE_TITLE" /> ನಿಲ್ಲಿಸಿ</translation> <translation id="5860033963881614850">ಆಫ್</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">ಆನ್</translation> <translation id="5920710855273935292">ಮೈಕ್ ಅನ್ನು ಮ್ಯೂಟ್ ಮಾಡಲಾಗಿದೆ.</translation> +<translation id="5946788582095584774"><ph name="FEATURE_NAME" /> ಆನ್ ಆಗಿದೆ.</translation> <translation id="5947494881799873997">ಹಿಂತಿರುಗಿಸು</translation> <translation id="595202126637698455">ಕಾರ್ಯಕ್ಷಮತೆ ಟ್ರೇಸಿಂಗ್ ಸಕ್ರಿಯಗೊಂಡಿದೆ</translation> <translation id="5957083217255311415">ಮೊಬೈಲ್ ಡೇಟಾ ಆಫ್ ಮಾಡಲಾಗಿದೆ.</translation> @@ -469,6 +480,7 @@ <translation id="615957422585914272">ಆನ್-ಸ್ಕ್ರೀನ್ ಕೀಬೋರ್ಡ್ ತೋರಿಸು</translation> <translation id="6164005077879661055">ಈ ಮೇಲ್ವಿಚಾರಣೆ ಬಳಕೆದಾರರನ್ನು ಒಮ್ಮೆ ತೆಗೆದುಹಾಕಿದರೆ, ಮೇಲ್ವಿಚಾರಣೆ ಬಳಕೆದಾರರೊಂದಿಗೆ ಸಂಯೋಜಿತವಾಗಿರುವ ಎಲ್ಲ ಫೈಲ್ಗಳು ಮತ್ತು ಸ್ಥಳೀಯ ಡೇಟಾವನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಲಾಗುತ್ತದೆ. ಈ ಮೇಲ್ವಿಚಾರಣೆ ಬಳಕೆದಾರಿಗಾಗಿ ಭೇಟಿ ನೀಡಲಾದ ವೆಬ್ಸೈಟ್ಗಳು ಮತ್ತು ಸೆಟ್ಟಿಂಗ್ಗಳು <ph name="MANAGEMENT_URL" /> ನಲ್ಲಿ ನಿರ್ವಾಹಕರಿಗೆ ಈಗಲೂ ಗೋಚರಿಸಬಹುದು.</translation> <translation id="6165508094623778733">ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ</translation> +<translation id="6192859646269780503">ಫೋನ್ ಇರಿಸಿ</translation> <translation id="622484624075952240">ಕೆಳಗೆ</translation> <translation id="6236290670123303279">ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ನಿರ್ವಹಿಸಿ</translation> <translation id="6237231532760393653">1X</translation> @@ -540,6 +552,7 @@ <translation id="6981982820502123353">ಪ್ರವೇಶ</translation> <translation id="698231206551913481">ಒಮ್ಮೆ ಈ ಬಳಕೆದಾರರನ್ನು ತೆಗೆದುಹಾಕಿದಾಗ ಈ ಬಳಕೆದಾರರೊಂದಿಗೆ ಸಂಯೋಜಿತವಾಗಿರುವ ಎಲ್ಲಾ ಫೈಲ್ಗಳು ಮತ್ತು ಸ್ಥಳೀಯ ಡೇಟಾವನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಲಾಗುತ್ತದೆ.</translation> <translation id="7007983414944123363">ನಿಮ್ಮ ಪಿನ್ ಅಥವಾ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation> +<translation id="7013005189539051442">ಹಾಟ್ಸ್ಪಾಟ್ ಸಕ್ರಿಯಗೊಳಿಸಿ</translation> <translation id="7015766095477679451"><ph name="COME_BACK_TIME" /> ಸಮಯಕ್ಕೆ ಹಿಂತಿರುಗಿ</translation> <translation id="7025533177575372252">ನಿಮ್ಮ ಫೋನ್ ಮೂಲಕ ನಿಮ್ಮ <ph name="DEVICE_NAME" /> ಸಾಧನವನ್ನು ಸಂಪರ್ಕಿಸಿ</translation> <translation id="7026338066939101231">ಇಳಿಕೆ</translation> @@ -612,6 +625,7 @@ <translation id="7842569679327885685">ಎಚ್ಚರಿಕೆ: ಪ್ರಾಯೋಗಿಕ ವೈಶಿಷ್ಟ್ಯ</translation> <translation id="7846634333498149051">ಕೀಬೋರ್ಡ್</translation> <translation id="7868900307798234037">ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಮೂಲಕ ಅನ್ಲಾಕ್ ಮಾಡಲಾಗುತ್ತಿದೆ</translation> +<translation id="7872786842639831132">ಆಫ್ ಮಾಡಿ</translation> <translation id="7886169021410746335">ಗೌಪ್ಯತೆ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಹೊಂದಿಸಿ</translation> <translation id="7886277072580235377">ನೀವು ಸೈನ್ ಔಟ್ ಮಾಡುವಾಗ ನಿಮ್ಮ ಇಂಟರ್ನೆಟ್ ಸೆಶನ್ ಅನ್ನು ತೆರವುಗೊಳಿಸಲಾಗುತ್ತದೆ. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">ಇಮೇಲ್ ಕಳುಹಿಸಿ</translation> @@ -716,6 +730,7 @@ <translation id="8853703225951107899">ನಿಮ್ಮ ಪಿನ್ ಅಥವಾ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಇನ್ನೂ ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಗಮನಿಸಿ: ನೀವು ಇತ್ತೀಚೆಗೆ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಬದಲಾಯಿಸಿದ್ದರೆ, ನಿಮ್ಮ ಹಳೆಯ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಬಳಸಿ. ನೀವು ಸೈನ್ ಔಟ್ ಮಾಡಿದ ನಂತರ ನಿಮ್ಮ ಹೊಸ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ.</translation> <translation id="885387440427703469">ಸ್ಕ್ರೀನ್ ಕ್ಯಾಪ್ಚರ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</translation> <translation id="8870509716567206129">ಅಪ್ಲಿಕೇಶನ್ ಸ್ಪ್ಲಿಟ್ ಸ್ಕ್ರೀನ್ ಅನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ.</translation> +<translation id="8871580645200179206">ಡಾರ್ಕ್ ಥೀಮ್ ಅನ್ನು ಟಾಗಲ್ ಮಾಡಿ. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">ಕನೆಕ್ಟ್ ಆಗಿಲ್ಲ</translation> <translation id="8877788021141246043">ಜ್ಞಾಪನೆಯನ್ನು ಹೊಂದಿಸಿ</translation> <translation id="8878886163241303700">ಪರದೆಯನ್ನು ವಿಸ್ತರಿಸಲಾಗುತ್ತಿದೆ</translation>
diff --git a/ash/strings/ash_strings_lt.xtb b/ash/strings/ash_strings_lt.xtb index e6bc1cf11..0c2fa4a 100644 --- a/ash/strings/ash_strings_lt.xtb +++ b/ash/strings/ash_strings_lt.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Sutraukti meniu</translation> <translation id="1383876407941801731">Ieškoti</translation> <translation id="1391102559483454063">Įjungta</translation> +<translation id="1407069428457324124">Tamsioji tema</translation> <translation id="1419738280318246476">Atrakinkite įrenginį, kad galėtumėte įvykdyti pranešimo veiksmą</translation> <translation id="1420408895951708260">Perjungti Nakties šviesą. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">Ekranas nukopijuotas ir kopija išsaugota iškarpinėje</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Spustelėkite, jei reikia daugiau parinkčių</translation> <translation id="1570871743947603115">Perjungti „Bluetooth“. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">Pasiekti visą šios sesijos veiklą</translation> +<translation id="1611993646327628135">Įjungta</translation> <translation id="1632985212731562677">Prieigos jungikliu funkciją galima išjungti skiltyje „Nustatymai“ > „Pritaikomumas“.</translation> <translation id="1654477262762802994">Pradėti užklausą balsu</translation> <translation id="1667964833127753507">Neutralių spalvų režimu nenaudojamos išskirtos ekrano fono spalvos, pakeičiant jas neutralių šviesių ir tamsių atspalvių rinkiniu.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Perjungti tinklo ryšį. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">Slinkti dešinėn</translation> <translation id="1782199038061388045">vertimas</translation> +<translation id="1787955149152357925">Išjungta</translation> <translation id="181103072419391116">Signalo stiprumas <ph name="SIGNAL_STRENGTH" />, tvarko administratorius</translation> <translation id="1812997170047690955">Kas mano ekrane?</translation> <translation id="1823873187264960516">Eternetas: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">Išskleisti meniu</translation> <translation id="3087734570205094154">Apačia</translation> +<translation id="3090989381251959936">Perjungti „<ph name="FEATURE_NAME" />“. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">Perkelti žymeklį</translation> <translation id="3098580329624789136">Gaukite „<ph name="QUERY" />“ <ph name="INTENT" /></translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> („Bluetooth“)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">USB-C įrenginys (prievadas dešinėje, priekinėje dalyje)</translation> <translation id="3386978599540877378">viso ekrano didinimas</translation> <translation id="3400357268283240774">Papildomi nustatymai</translation> +<translation id="3410336247007142655">Rodyti Tamsiosios temos nustatymus</translation> <translation id="3413817803639110246">Dar nėra nieko, ką būtų galima peržiūrėti</translation> <translation id="3428447136709161042">Atjungti nuo „<ph name="NETWORK_NAME" />“</translation> <translation id="3430396595145920809">Kad grįžtumėte, perbraukite iš dešinės</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">Jungiamasi...</translation> <translation id="4379531060876907730">Tai yra jūsų rašiklio įrankiai</translation> <translation id="4389184120735010762">Paspaudėte prie doko prijungto didintuvo spartųjį klavišą. Ar norite jį įjungti?</translation> +<translation id="4412944820643904175">„<ph name="FEATURE_NAME" />“ išjungta.</translation> <translation id="4421231901400348175"><ph name="HELPER_NAME" /> gali valdyti jūsų ekraną naudodamas (-a) Nuotolinę pagalbą.</translation> <translation id="4430019312045809116">Apimtis</translation> <translation id="4450893287417543264">Daugiau neberodyti</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">Funkcijos „Teksto ištarimas“ mygtukas</translation> <translation id="4577274620589681794">Laikas baigėsi · <ph name="LABEL" /></translation> <translation id="4585337515783392668">Sustabdyti perdavimą į nežinomą imtuvą</translation> +<translation id="4596144739579517758">Tamsioji tema išjungta</translation> <translation id="4623167406982293031">Patvirtinti paskyrą</translation> <translation id="4628757576491864469">Įrenginiai</translation> <translation id="4659419629803378708">„ChromeVox“ įgalinta</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">Pasiekiami perdavimo įrenginiai</translation> <translation id="5170568018924773124">Rodyti aplanke</translation> <translation id="5207949376430453814">Paryškinti teksto žymeklį</translation> +<translation id="5208059991603368177">Įjungti</translation> <translation id="5222676887888702881">Atsijungti</translation> <translation id="523505283826916779">Pasiekiamumo nustatymai</translation> <translation id="5260676007519551770">4 pultas</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">„Bluetooth“ nustatymai</translation> <translation id="5314219114274263156">Ekrano vaizdas įrašytas</translation> <translation id="5331975486040154427">USB-C įrenginys (prievadas kairėje, užpakalinėje dalyje)</translation> +<translation id="5352250171825660495">Tamsioji tema įjungta</translation> <translation id="5379115545237091094">Per daug bandymų</translation> <translation id="5397578532367286026">Šio naudotojo naudojimo duomenis ir istoriją valdytojas (<ph name="MANAGER_EMAIL" />) gali peržiūrėti adresu chrome.com.</translation> <translation id="5400461572260843123">Spartieji nustatymai: paspauskite „Ieškoti“ ir rodyklę kairėn, kad pasiektumėte pranešimų centrą.</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">Privatumo ekranas</translation> <translation id="5777841717266010279">Nutraukti ekrano bendrinimą?</translation> <translation id="5790085346892983794">Atlikta</translation> +<translation id="579415080077680903">Nutildyti</translation> <translation id="5820394555380036790">„Chromium“ OS</translation> <translation id="5837036133683224804">Sustabdyti „<ph name="ROUTE_TITLE" />“ („<ph name="RECEIVER_NAME" />“)</translation> <translation id="5860033963881614850">Išjungta</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">Įjungta</translation> <translation id="5920710855273935292">Mikrofonas nutildytas.</translation> +<translation id="5946788582095584774">„<ph name="FEATURE_NAME" />“ įjungta.</translation> <translation id="5947494881799873997">Grąžinti</translation> <translation id="595202126637698455">Įgalintas našumo stebėjimas</translation> <translation id="5957083217255311415">Mobiliojo ryšio duomenys išjungti.</translation> @@ -468,6 +479,7 @@ <translation id="615957422585914272">Rodyti ekrano klaviatūrą</translation> <translation id="6164005077879661055">Visi failai ir su prižiūrimu naudotoju susiję duomenys bus ištrinti visam laikui, kai bus pašalintas šis prižiūrimas naudotojas. Valdytojas vis tiek gali peržiūrėti šio prižiūrimo naudotojo aplankytas svetaines ir nustatymus adresu <ph name="MANAGEMENT_URL" />.</translation> <translation id="6165508094623778733">Sužinokite daugiau</translation> +<translation id="6192859646269780503">Telefono vietos nustatymas</translation> <translation id="622484624075952240">Žemiau</translation> <translation id="6236290670123303279">Tvarkyti nustatymus</translation> <translation id="6237231532760393653">1X</translation> @@ -539,6 +551,7 @@ <translation id="6981982820502123353">Pritaikymas neįgaliesiems</translation> <translation id="698231206551913481">Visi failai ir su šiuo naudotoju susiję duomenys bus ištrinti visam laikui, kai šis naudotojas bus pašalintas.</translation> <translation id="7007983414944123363">Nepavyko patvirtinti PIN kodo arba slaptažodžio. Bandykite dar kartą.</translation> +<translation id="7013005189539051442">Viešosios interneto prieigos taško įgalinimas</translation> <translation id="7015766095477679451">Grįžkite <ph name="COME_BACK_TIME" />.</translation> <translation id="7025533177575372252">Susiekite „<ph name="DEVICE_NAME" />“ įrenginį su telefonu</translation> <translation id="7026338066939101231">Sumažinti</translation> @@ -611,6 +624,7 @@ <translation id="7842569679327885685">Įspėjimas: eksperimentinė funkcija</translation> <translation id="7846634333498149051">Klaviatūra</translation> <translation id="7868900307798234037">Atrakinama naudojant kontrolinį kodą</translation> +<translation id="7872786842639831132">Išjungta</translation> <translation id="7886169021410746335">Koreguokite privatumo nustatymus</translation> <translation id="7886277072580235377">Interneto sesijos duomenys bus išvalyti, kai atsijungsite. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">„Send an email“ (Siųsk el. laišką)</translation> @@ -715,6 +729,7 @@ <translation id="8853703225951107899">Vis tiek nepavyko patvirtinti PIN kodo arba slaptažodžio. Pastaba: jei neseniai pakeitėte slaptažodį, naudokite senąjį. Naujas slaptažodis bus pritaikytas atsijungus.</translation> <translation id="885387440427703469">Ekrano fiksavimas išjungtas</translation> <translation id="8870509716567206129">Programoje nepalaikomas skaidytas ekranas.</translation> +<translation id="8871580645200179206">Perjungti Tamsiąją temą. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">Neprisijungta</translation> <translation id="8877788021141246043">„Set a reminder“ (Nustatyk priminimą)</translation> <translation id="8878886163241303700">Išplečiamas ekranas</translation>
diff --git a/ash/strings/ash_strings_mk.xtb b/ash/strings/ash_strings_mk.xtb index 3149700..28fb1ed6 100644 --- a/ash/strings/ash_strings_mk.xtb +++ b/ash/strings/ash_strings_mk.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Собери го менито</translation> <translation id="1383876407941801731">Барај</translation> <translation id="1391102559483454063">Вклучено</translation> +<translation id="1407069428457324124">Темна тема</translation> <translation id="1419738280318246476">Отклучете го уредот за да се изврши дејството од известувањето</translation> <translation id="1420408895951708260">Вклучи/исклучи „Ноќно светло“: <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">Сликата од екранот е направена и зачувана во привремената меморија</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Кликни за повеќе опции</translation> <translation id="1570871743947603115">Вклучи/исклучи Bluetooth. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">Пристапете до целата ваша активност во сесијава</translation> +<translation id="1611993646327628135">Вклучено</translation> <translation id="1632985212731562677">Пристапот со прекинувачи може да се оневозможи во „Поставки > Пристапност“.</translation> <translation id="1654477262762802994">Започнете гласовно барање</translation> <translation id="1667964833127753507">Режимот во неутрални бои не користи бои од тапетот, туку ги заменува со збир од неутрални светли или темни нијанси.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Вклучи/исклучи мрежна врска. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">Лизгај надесно</translation> <translation id="1782199038061388045">превод</translation> +<translation id="1787955149152357925">Исклучено</translation> <translation id="181103072419391116">Јачина на сигналот: <ph name="SIGNAL_STRENGTH" />, управувана од администраторот</translation> <translation id="1812997170047690955">Што има на мојот екран?</translation> <translation id="1823873187264960516">Етернет: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">Прошири го менито</translation> <translation id="3087734570205094154">Дно</translation> +<translation id="3090989381251959936">Вклучете/исклучете <ph name="FEATURE_NAME" />. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">Премести го покажувачот</translation> <translation id="3098580329624789136">Добијте <ph name="INTENT" /> за „<ph name="QUERY" />“</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">USB-Ц уред (предна порта од десна страна)</translation> <translation id="3386978599540877378">лупа за цел екран</translation> <translation id="3400357268283240774">Дополнителни поставки</translation> +<translation id="3410336247007142655">Прикажи ги поставките за темната тема</translation> <translation id="3413817803639110246">Сѐ уште нема што да се види</translation> <translation id="3428447136709161042">Прекини ја врската со <ph name="NETWORK_NAME" /></translation> <translation id="3430396595145920809">Повлечете оддесно за да се вратите назад</translation> @@ -327,6 +332,7 @@ <translation id="4378551569595875038">Се поврзува…</translation> <translation id="4379531060876907730">Ова се вашите пенкала</translation> <translation id="4389184120735010762">Ја притиснавте кратенката од тастатура за закотвената лупа. Дали сакате да ја вклучите?</translation> +<translation id="4412944820643904175"><ph name="FEATURE_NAME" /> е исклучено.</translation> <translation id="4421231901400348175">Споделување контрола на вашиот екран со <ph name="HELPER_NAME" /> преку далечинска помош.</translation> <translation id="4430019312045809116">Гласност</translation> <translation id="4450893287417543264">Не прикажувај повторно</translation> @@ -346,6 +352,7 @@ <translation id="4570957409596482333">Копче за „Изберете за говор“</translation> <translation id="4577274620589681794">Времето истече · <ph name="LABEL" /></translation> <translation id="4585337515783392668">Престани со емитување на непознат приемник</translation> +<translation id="4596144739579517758">Темната тема е исклучена</translation> <translation id="4623167406982293031">Потврдете ја сметката</translation> <translation id="4628757576491864469">Уреди</translation> <translation id="4659419629803378708">ChromeVox е овозможен</translation> @@ -388,6 +395,7 @@ <translation id="5168181903108465623">Достапни се уреди за емитување</translation> <translation id="5170568018924773124">Прикажи во папка</translation> <translation id="5207949376430453814">Нагласи го каретот за текст</translation> +<translation id="5208059991603368177">Вклучено</translation> <translation id="5222676887888702881">Одјави се</translation> <translation id="523505283826916779">Поставки за пристапност</translation> <translation id="5260676007519551770">Биро 4</translation> @@ -399,6 +407,7 @@ <translation id="5313326810920013265">Поставки за Bluetooth</translation> <translation id="5314219114274263156">Направена е снимка од екранот</translation> <translation id="5331975486040154427">USB-Ц уред (задна порта од лева страна)</translation> +<translation id="5352250171825660495">Темната тема е вклучена</translation> <translation id="5379115545237091094">Премногу обиди</translation> <translation id="5397578532367286026">Користењето и историјата на овој корисник може да ги прегледува управникот (<ph name="MANAGER_EMAIL" />) на chrome.com.</translation> <translation id="5400461572260843123">Брзи поставки, Притиснете „Пребарување + лево“ за да пристапите до центарот за известувања.</translation> @@ -435,6 +444,7 @@ <translation id="5769373120130404283">Екран за приватност</translation> <translation id="5777841717266010279">Запри споделување екран?</translation> <translation id="5790085346892983794">Успешно</translation> +<translation id="579415080077680903">Стиши</translation> <translation id="5820394555380036790">Chromium OS</translation> <translation id="5837036133683224804">Престани со емитување на <ph name="ROUTE_TITLE" /> на <ph name="RECEIVER_NAME" /></translation> <translation id="5860033963881614850">Исклучено</translation> @@ -445,6 +455,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">Вклучено</translation> <translation id="5920710855273935292">Звукот на микрофонот е исклучен.</translation> +<translation id="5946788582095584774"><ph name="FEATURE_NAME" /> е вклучено.</translation> <translation id="5947494881799873997">Врати</translation> <translation id="595202126637698455">Овозможено е следење на изведбата</translation> <translation id="5957083217255311415">Мобилниот интернет е исклучен.</translation> @@ -469,6 +480,7 @@ <translation id="615957422585914272">Покажи тастатура на екран</translation> <translation id="6164005077879661055">Сите датотеки и локални податоци што се поврзани со надгледуваниот корисник трајно ќе се избришат откако тој ќе се отстрани. Посетените веб-локации и поставки за надгледуваниот корисник можеби уште ќе бидат видливи за управникот на <ph name="MANAGEMENT_URL" />.</translation> <translation id="6165508094623778733">Дознајте повеќе</translation> +<translation id="6192859646269780503">Лоцирај го телефонот</translation> <translation id="622484624075952240">Долу</translation> <translation id="6236290670123303279">Управувајте со поставките</translation> <translation id="6237231532760393653">1X</translation> @@ -540,6 +552,7 @@ <translation id="6981982820502123353">Пристапност</translation> <translation id="698231206551913481">Сите датотеки и локални податоци што се поврзани со корисников трајно ќе се избришат по неговото отстранување.</translation> <translation id="7007983414944123363">Не можеше да се потврди PIN-кодот или лозинката. Обидете се повторно.</translation> +<translation id="7013005189539051442">Овозможете точка на пристап</translation> <translation id="7015766095477679451">Вратете се во <ph name="COME_BACK_TIME" />.</translation> <translation id="7025533177575372252">Поврзете го вашиот <ph name="DEVICE_NAME" /> со телефонот</translation> <translation id="7026338066939101231">Намалување</translation> @@ -612,6 +625,7 @@ <translation id="7842569679327885685">Предупредување: експериментална функција</translation> <translation id="7846634333498149051">Тастатура</translation> <translation id="7868900307798234037">Отклучување со отпечаток</translation> +<translation id="7872786842639831132">Исклучено</translation> <translation id="7886169021410746335">ги приспособи поставките за приватност.</translation> <translation id="7886277072580235377">Сесијата на интернет ќе се исчисти кога ќе се одјавите. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Испрати е-порака</translation> @@ -716,6 +730,7 @@ <translation id="8853703225951107899">Сѐ уште не може да се потврди PIN-кодот или лозинката. Забелешка: ако неодамна сте ја промениле лозинката, користете ја вашата стара лозинка. Новата лозинка ќе се примени откако ќе се одјавите.</translation> <translation id="885387440427703469">Снимањето на екранот е оневозможено</translation> <translation id="8870509716567206129">Апликацијата не поддржува поделен екран.</translation> +<translation id="8871580645200179206">Вклучете/исклучете ја темната тема. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">Не е поврзано</translation> <translation id="8877788021141246043">Потсетник</translation> <translation id="8878886163241303700">Проширување екран</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb index a866a3d..1248233 100644 --- a/ash/strings/ash_strings_ml.xtb +++ b/ash/strings/ash_strings_ml.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">മെനു ചുരുക്കുക</translation> <translation id="1383876407941801731">Search</translation> <translation id="1391102559483454063">ഓണാണ്</translation> +<translation id="1407069428457324124">ഡാർക്ക് തീം</translation> <translation id="1419738280318246476">അറിയിപ്പ് പ്രവർത്തനം നിർവഹിക്കുന്നതിന് ഉപകരണം അൺലോക്ക് ചെയ്യുക</translation> <translation id="1420408895951708260">നൈറ്റ് ലൈറ്റ് മാറ്റുക. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">സ്ക്രീന്ഷോട്ട് എടുത്ത് അത് ക്ലിപ്പ്ബോർഡിൽ സംരക്ഷിച്ചു</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">കൂടുതൽ ഓപ്ഷനുകൾക്ക് ക്ലിക്ക് ചെയ്യുക</translation> <translation id="1570871743947603115">Bluetooth മാറ്റുക. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">ഈ സെഷനിൽ നിങ്ങളുടെ എല്ലാ ആക്റ്റിവിറ്റികളും ആക്സസ് ചെയ്യുക</translation> +<translation id="1611993646327628135">ഓണാണ്</translation> <translation id="1632985212731562677">ക്രമീകരണം > ഉപയോഗസഹായി എന്നതിൽ 'ആക്സസ് മാറുക' പ്രവർത്തനരഹിതമാക്കാം.</translation> <translation id="1654477262762802994">ഒരു ശബ്ദ ചോദ്യം ആരംഭിക്കുക</translation> <translation id="1667964833127753507">ന്യൂട്രൽ വർണ്ണ മോഡ് വാൾപേപ്പർ എക്സ്ട്രാക്റ്റ് ചെയ്ത വർണ്ണങ്ങൾ ഉപയോഗിക്കുന്നില്ല, അവയ്ക്ക് പകരം ന്യൂട്രലായി ടോൺ ചെയ്ത ഇളം നിറത്തിന്റെയോ ഇരുണ്ട നിറത്തിന്റെയോ ഒരു സെറ്റ് ഉപയോഗിക്കുന്നു.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">നെറ്റ്വർക്ക് കണക്ഷൻ മാറ്റുക. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">വലത്തോട്ട് സ്ക്രോൾ ചെയ്യുക</translation> <translation id="1782199038061388045">വിവർത്തനം</translation> +<translation id="1787955149152357925">ഓഫാണ്</translation> <translation id="181103072419391116">സിഗ്നൽ ശക്തി <ph name="SIGNAL_STRENGTH" />, നിങ്ങളുടെ അഡ്മിൻ മാനേജ് ചെയ്യുന്നത്</translation> <translation id="1812997170047690955">എന്റെ സ്ക്രീനിൽ എന്താണുള്ളത്?</translation> <translation id="1823873187264960516">ഇതർനെറ്റ്: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">മെനു വികസിപ്പിക്കുക</translation> <translation id="3087734570205094154">താഴെ</translation> +<translation id="3090989381251959936"><ph name="FEATURE_NAME" /> മാറ്റുക. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">കഴ്സർ നീക്കുക</translation> <translation id="3098580329624789136">"<ph name="QUERY" />" എന്നതിനുള്ള <ph name="INTENT" /> നേടുക</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">USB-C ഉപകരണം (വലതുവശത്ത് മുന്നിലെ പോർട്ട്)</translation> <translation id="3386978599540877378">പൂര്ണ്ണ-സ്ക്രീൻ മാഗ്നിഫയർ</translation> <translation id="3400357268283240774">അധിക ക്രമീകരണങ്ങൾ</translation> +<translation id="3410336247007142655">ഡാർക്ക് തീം ക്രമീകരണം കാണിക്കുക</translation> <translation id="3413817803639110246">ഇതുവരെ കാണാൻ ഒന്നുമില്ല</translation> <translation id="3428447136709161042"><ph name="NETWORK_NAME" />-ൽ നിന്ന് വിച്ഛേദിക്കുക</translation> <translation id="3430396595145920809">തിരികെ പോകാൻ വലതുഭാഗത്ത് നിന്ന് സ്വൈപ്പ് ചെയ്യുക</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">കണക്റ്റിംഗ്...</translation> <translation id="4379531060876907730">ഇവയാണ് നിങ്ങളുടെ സ്റ്റൈലസ് ടൂളുകൾ</translation> <translation id="4389184120735010762">നിങ്ങൾ ഡോക്ക് ചെയ്ത മാഗ്നിഫയറിനായി കീബോഡ് കുറുക്കുവഴി അമർത്തി. അത് ഓണാക്കണോ?</translation> +<translation id="4412944820643904175"><ph name="FEATURE_NAME" /> ഓഫാണ്.</translation> <translation id="4421231901400348175"><ph name="HELPER_NAME" /> ഉപയോഗിച്ച് നിങ്ങളുടെ വിദൂര സഹായി മുഖേന സ്ക്രീനിന്റെ നിയന്ത്രണം പങ്കിടുക.</translation> <translation id="4430019312045809116">അളവ്</translation> <translation id="4450893287417543264">വീണ്ടും കാണിക്കരുത്</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">വായിച്ചുകേൾക്കാൻ തിരഞ്ഞെടുക്കുക ബട്ടൺ</translation> <translation id="4577274620589681794"><ph name="LABEL" /> · സമയം കഴിഞ്ഞു</translation> <translation id="4585337515783392668">അജ്ഞാത റിസീവറിൽ കാസ്റ്റ് ചെയ്യുന്നത് നിർത്തുക</translation> +<translation id="4596144739579517758">ഡാർക്ക് തീം ഓഫാണ്</translation> <translation id="4623167406982293031">അക്കൗണ്ട് പരിശോധിച്ചുറപ്പിക്കുക</translation> <translation id="4628757576491864469">ഉപകരണങ്ങൾ</translation> <translation id="4659419629803378708">ChromeVox പ്രവർത്തനക്ഷമമാക്കി</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">Cast ഉപകരണങ്ങൾ ലഭ്യമാണ്.</translation> <translation id="5170568018924773124">ഫോള്ഡറില് കാണിക്കുക</translation> <translation id="5207949376430453814">ടെക്സ്റ്റ് കാരറ്റ് ഹൈലൈറ്റ് ചെയ്യുക</translation> +<translation id="5208059991603368177">ഓണാണ്</translation> <translation id="5222676887888702881">സൈൻ ഔട്ട് ചെയ്യുക</translation> <translation id="523505283826916779">ഉപയോഗസഹായി ക്രമീകരണങ്ങൾ</translation> <translation id="5260676007519551770">ഡെസ്ക് 4</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">Bluetooth ക്രമീകരണങ്ങൾ</translation> <translation id="5314219114274263156">സ്ക്രീൻ റെക്കോർഡിംഗ് എടുത്തു</translation> <translation id="5331975486040154427">USB-C ഉപകരണം (പുറകിൽ ഇടതുവശത്തെ പോർട്ട്)</translation> +<translation id="5352250171825660495">ഡാർക്ക് തീം ഓണാണ്</translation> <translation id="5379115545237091094">നിരവധി ശ്രമങ്ങൾ</translation> <translation id="5397578532367286026">ഈ ഉപയോക്താവിന്റെ ഉപയോഗവും ചരിത്രവും chrome.com-ൽ മാനേജർക്ക് (<ph name="MANAGER_EMAIL" />) അവലോകനം ചെയ്യാനാകും.</translation> <translation id="5400461572260843123">ദ്രുത ക്രമീകരണം, അറിയിപ്പ് കേന്ദ്രം ആക്സസ് ചെയ്യാൻ തിരയൽ + ഇടത് അമ്പടയാളം അമർത്തുക.</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">സ്വകാര്യതാ സ്ക്രീൻ</translation> <translation id="5777841717266010279">സ്ക്രീൻ പങ്കിടൽ നിർത്തണോ?</translation> <translation id="5790085346892983794">വിജയകരം</translation> +<translation id="579415080077680903">നിശബ്ദമാക്കൽ</translation> <translation id="5820394555380036790">Chromium OS</translation> <translation id="5837036133683224804"><ph name="RECEIVER_NAME" />-ൽ <ph name="ROUTE_TITLE" /> നിർത്തുക</translation> <translation id="5860033963881614850">ഓഫാക്കുക</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">ഓൺ ചെയ്യുക</translation> <translation id="5920710855273935292">മൈക്ക് മ്യൂട്ട് ചെയ്തിരിക്കുന്നു.</translation> +<translation id="5946788582095584774"><ph name="FEATURE_NAME" /> ഓണാണ്.</translation> <translation id="5947494881799873997">പഴയപടിയാക്കുക</translation> <translation id="595202126637698455">പ്രകടനം പിന്തുടരൽ പ്രവർത്തനക്ഷമമാക്കി</translation> <translation id="5957083217255311415">മൊബൈൽ ഡാറ്റ ഓഫാക്കി.</translation> @@ -468,6 +479,7 @@ <translation id="615957422585914272">ഓൺ-സ്ക്രീൻ കീബോർഡ് ദൃശ്യമാക്കുക</translation> <translation id="6164005077879661055">മേൽനോട്ടത്തിലുള്ള ഉപയോക്താവിനെ നീക്കംചെയ്താൽ, മേൽനോട്ടത്തിലുള്ള ഉപയോക്താവുമായി ബന്ധപ്പെടുത്തിയിട്ടുള്ള എല്ലാ ഫയലുകളും പ്രാദേശിക ഡാറ്റയും ശാശ്വതമായി ഇല്ലാതാക്കപ്പെടും. മേൽനോട്ടത്തിലുള്ള ഈ ഉപയോക്താവിനായി സന്ദർശിച്ച വെബ്സൈറ്റുകളും ക്രമീകരണങ്ങളും <ph name="MANAGEMENT_URL" />-ൽ മാനേജർക്ക് തുടർന്നും കാണാനായേക്കും.</translation> <translation id="6165508094623778733">കൂടുതലറിയുക</translation> +<translation id="6192859646269780503">ഫോൺ കണ്ടെത്തൽ</translation> <translation id="622484624075952240">താഴേക്കുള്ള കീ</translation> <translation id="6236290670123303279">ക്രമീകരണം മാനേജ് ചെയ്യുക</translation> <translation id="6237231532760393653">1X</translation> @@ -539,6 +551,7 @@ <translation id="6981982820502123353">ഉപയോഗസഹായി</translation> <translation id="698231206551913481">ഈ ഉപയോക്താവിനെ നീക്കംചെയ്യുമ്പോൾ അതോടൊപ്പം അയാളുമായി ബന്ധപ്പെട്ട എല്ലാ ഫയലുകളും പ്രാദേശിക വിവരങ്ങളും ശാശ്വതമായി ഇല്ലാതാക്കപ്പെടും.</translation> <translation id="7007983414944123363">നിങ്ങളുടെ പിൻ അല്ലെങ്കിൽ പാസ്വേഡ് പരിശോധിച്ചുറപ്പിക്കാനായില്ല. വീണ്ടും ശ്രമിക്കുക.</translation> +<translation id="7013005189539051442">ഹോട്ട്സ്പോട്ട് പ്രവർത്തനക്ഷമമാക്കുക</translation> <translation id="7015766095477679451"><ph name="COME_BACK_TIME" />-ന് തിരികെ വരിക.</translation> <translation id="7025533177575372252">നിങ്ങളുടെ ഫോണുമായി <ph name="DEVICE_NAME" /> കണക്റ്റ് ചെയ്യുക</translation> <translation id="7026338066939101231">കുറവ്</translation> @@ -611,6 +624,7 @@ <translation id="7842569679327885685">മുന്നറിയിപ്പ്: പരീക്ഷണാത്മക ഫീച്ചർ</translation> <translation id="7846634333498149051">കീബോർഡ്</translation> <translation id="7868900307798234037">വിരലടയാളം ഉപയോഗിച്ച് അൺലോക്ക് ചെയ്യുന്നു</translation> +<translation id="7872786842639831132">ഓഫാണ്</translation> <translation id="7886169021410746335">സ്വകാര്യതാ ക്രമീകരണം ശരിയാക്കുക</translation> <translation id="7886277072580235377">സൈൻ ഔട്ട് ചെയ്യുമ്പോൾ നിങ്ങളുടെ ഇന്റർനെറ്റ് സെഷൻ മായ്ക്കപ്പെടും. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">ഒരു ഇമെയിൽ അയയ്ക്കുക</translation> @@ -715,6 +729,7 @@ <translation id="8853703225951107899">നിങ്ങളുടെ പിൻ അല്ലെങ്കിൽ പാസ്വേഡ് ഇപ്പോഴും പരിശോധിച്ചുറപ്പിക്കാനായില്ല. ശ്രദ്ധിക്കുക: നിങ്ങൾ അടുത്തിടെ പാസ്വേഡ് മാറ്റിയിട്ടുണ്ടെങ്കിൽ, നിങ്ങളുടെ പഴയ പാസ്വേഡ് ഉപയോഗിക്കുക. സൈൻ ഔട്ട് ചെയ്തുകഴിഞ്ഞാൽ നിങ്ങളുടെ പുതിയ പാസ്വേഡ് ബാധകമാകും.</translation> <translation id="885387440427703469">സ്ക്രീൻ ചിത്രമെടുക്കൽ പ്രവർത്തനരഹിതമാക്കി</translation> <translation id="8870509716567206129">സ്പ്ലിറ്റ്-സ്ക്രീനിനെ ആപ്പ് പിന്തുണയ്ക്കുന്നില്ല.</translation> +<translation id="8871580645200179206">ഡാർക്ക് തീം മാറ്റുക. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">കണക്റ്റല്ല</translation> <translation id="8877788021141246043">ഒരു റിമൈൻഡർ സജ്ജീകരിക്കുക</translation> <translation id="8878886163241303700">സ്ക്രീൻ വിപുലീകരിക്കുന്നു</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb index 1ce7a84..64c2660 100644 --- a/ash/strings/ash_strings_mr.xtb +++ b/ash/strings/ash_strings_mr.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">मेनू कोलॅप्स करा</translation> <translation id="1383876407941801731">Search</translation> <translation id="1391102559483454063">सुरू</translation> +<translation id="1407069428457324124">गडद थीम</translation> <translation id="1419738280318246476">सूचनेशी संबंधित क्रिया पार पाडण्यासाठी डिव्हाइस अनलॉक करा</translation> <translation id="1420408895951708260">रात्रीचा प्रकाश टॉगल करा. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">स्क्रीनशॉट घेतला आणि क्लिपबोर्डवर सेव्ह केला</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">अधिक पर्यायांसाठी क्लिक करा</translation> <translation id="1570871743947603115">ब्लूटूथ टॉगल करा. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">या सेशनमध्ये तुमची सर्व अॅक्टिव्हिटी अॅक्सेस करा</translation> +<translation id="1611993646327628135">सुरू करा</translation> <translation id="1632985212731562677">सेटिंग्ज > अॅक्सेसिबिलिटी मध्ये स्विच अॅक्सेस बंद केले जाऊ शकते.</translation> <translation id="1654477262762802994">व्हॉइस क्वेरी सुरू करा</translation> <translation id="1667964833127753507">न्यूट्रल रंगीत मोड हा तटस्थपणे टोन केलेल्या फिकट किंवा गडद रंगछटांचा सेट वापरतो आणि वॉलपेपरमधून निवडलेल्या रंगांचा वापर करत नाही.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">नेटवर्क कनेक्शन टॉगल करा. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">उजवीकडे स्क्रोल करा</translation> <translation id="1782199038061388045">भाषांतर</translation> +<translation id="1787955149152357925">बंद करा</translation> <translation id="181103072419391116">सिग्नल क्षमता <ph name="SIGNAL_STRENGTH" />, तुमच्या अॅडमिनिस्ट्रेटरने व्यवस्थापित केलेले</translation> <translation id="1812997170047690955">माझ्या स्क्रीनवर काय आहे?</translation> <translation id="1823873187264960516">इथरनेट: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">मेनूचा विस्तार करा</translation> <translation id="3087734570205094154">तळाकडील</translation> +<translation id="3090989381251959936"><ph name="FEATURE_NAME" /> टॉगल करा. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">कर्सर हलवा</translation> <translation id="3098580329624789136">"<ph name="QUERY" />" साठी <ph name="INTENT" /> मिळवा</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (ब्लूटूथ)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">USB-C डिव्हाइस (उजव्या बाजूचे पुढील पोर्ट)</translation> <translation id="3386978599540877378">फुल-स्क्रीन मॅग्निफायर</translation> <translation id="3400357268283240774">अतिरिक्त सेटिंग्ज</translation> +<translation id="3410336247007142655">गडद थीम सेटिंग्ज दाखवा</translation> <translation id="3413817803639110246">आत्ताच पाहण्यासाठी काहीही नाही</translation> <translation id="3428447136709161042"><ph name="NETWORK_NAME" /> मधून डिस्कनेक्ट करा</translation> <translation id="3430396595145920809">मागे जाण्यासाठी उजवीकडून स्वाइप करा</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">कनेक्ट होतय...</translation> <translation id="4379531060876907730">ही तुमची स्टायलस टूल आहेत</translation> <translation id="4389184120735010762">तुम्ही डॉक मॅग्निफायरसाठी कीबोर्ड शॉर्टकट दाबला आहे. तुम्हाला ते सुरू करायचे आहे का?</translation> +<translation id="4412944820643904175"><ph name="FEATURE_NAME" /> बंद आहे.</translation> <translation id="4421231901400348175">दूरस्त सहाय्याद्वारे <ph name="HELPER_NAME" /> सह आपल्या स्क्रीनचे नियंत्रण शेअर करत आहे.</translation> <translation id="4430019312045809116">व्हॉल्यूम</translation> <translation id="4450893287417543264">पुन्हा दाखवू नका</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">बोलण्यासाठी निवडा बटण</translation> <translation id="4577274620589681794">वेळ संपली · <ph name="LABEL" /></translation> <translation id="4585337515783392668">एखाद्या अज्ञात मिळवणाऱ्यावर कास्ट करणे थांबवा</translation> +<translation id="4596144739579517758">गडद थीम बंद आहे</translation> <translation id="4623167406982293031">खात्याची पडताळणी करा</translation> <translation id="4628757576491864469">डिव्हाइस</translation> <translation id="4659419629803378708">ChromeVox सुरू केले</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">कास्ट डिव्हाइसेस उपलब्ध</translation> <translation id="5170568018924773124">फोल्डरमध्ये दर्शवा</translation> <translation id="5207949376430453814">मजकूर कॅरेट हायलाइट करा</translation> +<translation id="5208059991603368177">सुरू करा</translation> <translation id="5222676887888702881">साइन आउट करा</translation> <translation id="523505283826916779">ॲक्सेसिबिलिटी सेटिंग्ज</translation> <translation id="5260676007519551770">डेस्क ४</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">ब्लूटूथ सेटिंग्ज</translation> <translation id="5314219114274263156">स्क्रीन रेकॉर्डिंग घेतले</translation> <translation id="5331975486040154427">USB-C डिव्हाइस (डाव्या बाजूचे मागील पोर्ट)</translation> +<translation id="5352250171825660495">गडद थीम सुरू आहे</translation> <translation id="5379115545237091094">खूप जास्त प्रयत्न</translation> <translation id="5397578532367286026">या वापरकर्त्याच्या वापर आणि इतिहासाचे chrome.com वरील व्यवस्थापकाद्वारे (<ph name="MANAGER_EMAIL" />) पुनरावलोकन केले जाऊ शकते.</translation> <translation id="5400461572260843123">क्विक सेटिंग्ज, सूचना केंद्र अॅक्सेस करण्यासाठी शोध + डावे बटण दाबा.</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">गोपनीयता स्क्रीन</translation> <translation id="5777841717266010279">स्क्रीन सामायिकरण थांबवायचे?</translation> <translation id="5790085346892983794">यशस्वी</translation> +<translation id="579415080077680903">सायलंट</translation> <translation id="5820394555380036790">Chromium OS</translation> <translation id="5837036133683224804"><ph name="RECEIVER_NAME" /> वर <ph name="ROUTE_TITLE" /> थांबवा</translation> <translation id="5860033963881614850">बंद</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">सुरू</translation> <translation id="5920710855273935292">माइक म्यूट केलेला आहे.</translation> +<translation id="5946788582095584774"><ph name="FEATURE_NAME" /> सुरू आहे.</translation> <translation id="5947494881799873997">परत करा</translation> <translation id="595202126637698455">कार्यप्रदर्शन ट्रेसिंग सक्षम केले</translation> <translation id="5957083217255311415">मोबाइल डेटा बंद केला आहे.</translation> @@ -468,6 +479,7 @@ <translation id="615957422585914272">ऑन-स्क्रीन कीबोर्ड दर्शवा</translation> <translation id="6164005077879661055">एकदा हा पर्यवेक्षित वापरकर्ता काढल्यानंतर पर्यवेक्षित वापरकर्त्याशी संबद्ध सर्व फाइल आणि स्थानिक डेटा कायमचा हटवला जाईल. या पर्यवेक्षित वापरकर्त्यासाठी भेट दिलेल्या वेबसाइट आणि सेटिंग्ज तरीही <ph name="MANAGEMENT_URL" /> वर व्यवस्थापकाद्वारे दृश्यमान असू शकतात.</translation> <translation id="6165508094623778733">अधिक जाणून घ्या</translation> +<translation id="6192859646269780503">फोन शोधा</translation> <translation id="622484624075952240">Down</translation> <translation id="6236290670123303279">सेटिंग्ज व्यवस्थापित करा</translation> <translation id="6237231532760393653">१X</translation> @@ -539,6 +551,7 @@ <translation id="6981982820502123353">ॲक्सेसिबिलिटी</translation> <translation id="698231206551913481">एकदा हा वापरकर्ता काढल्यानंतर या वापरकर्त्याशी संबद्ध सर्व फाइल आणि स्थानिक डेटा कायमचा हटवला जाईल.</translation> <translation id="7007983414944123363">तुमच्या पिन किंवा पासवर्डची पडताळणी करता आली नाही. पुन्हा प्रयत्न करा.</translation> +<translation id="7013005189539051442">हॉटस्पॉट सुरू करा</translation> <translation id="7015766095477679451"><ph name="COME_BACK_TIME" /> वाजता परत या.</translation> <translation id="7025533177575372252">तुमचे <ph name="DEVICE_NAME" /> तुमच्या फोनशी कनेक्ट करा</translation> <translation id="7026338066939101231">घट</translation> @@ -611,6 +624,7 @@ <translation id="7842569679327885685">चेतावणी: प्रयोगात्मक वैशिष्ट्य</translation> <translation id="7846634333498149051">कीबोर्ड</translation> <translation id="7868900307798234037">फिंगरप्रिंटने अनलॉक करत आहे</translation> +<translation id="7872786842639831132">बंद करा</translation> <translation id="7886169021410746335">गोपनीयता सेटिंग्ज ॲडजस्ट करा</translation> <translation id="7886277072580235377">तुम्ही साइन आउट केल्यावर तुमचे इंटरनेट सेशन साफ केले जाईल. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">ईमेल पाठवा</translation> @@ -715,6 +729,7 @@ <translation id="8853703225951107899">तुमच्या पिन किंवा पासवर्डची अद्याप पडताळणी करता आली नाही. टीप: तुम्ही अलीकडेच तुमचा पासवर्ड बदलला असल्यास, जुना पासवर्ड वापरा. तुम्ही साइन आउट केल्यानंतर तुमचा नवीन पासवर्ड लागू केला जाईल.</translation> <translation id="885387440427703469">स्क्रीन कॅप्चर बंद आहे</translation> <translation id="8870509716567206129">ॲप विभाजित-स्क्रीनला सपोर्ट करत नाही.</translation> +<translation id="8871580645200179206">गडद थीम टॉगल करा. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">कनेक्ट नाही</translation> <translation id="8877788021141246043">रिमाइंडर सेट करा</translation> <translation id="8878886163241303700">स्क्रीन विस्तृत करत आहे</translation>
diff --git a/ash/strings/ash_strings_nl.xtb b/ash/strings/ash_strings_nl.xtb index e9695d89..09b80095 100644 --- a/ash/strings/ash_strings_nl.xtb +++ b/ash/strings/ash_strings_nl.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Menu samenvouwen</translation> <translation id="1383876407941801731">Zoeken</translation> <translation id="1391102559483454063">Aan</translation> +<translation id="1407069428457324124">Donker thema</translation> <translation id="1419738280318246476">Ontgrendel het apparaat om de meldingsactie uit te voeren</translation> <translation id="1420408895951708260">Nachtverlichting schakelen. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">Screenshot gemaakt en opgeslagen op het klembord</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Klik voor meer opties</translation> <translation id="1570871743947603115">Bluetooth schakelen. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">Al je activiteit in deze sessie bekijken</translation> +<translation id="1611993646327628135">Aan</translation> <translation id="1632985212731562677">Je kunt 'Toegang via schakelaar' uitschakelen via Instellingen > Toegankelijkheid.</translation> <translation id="1654477262762802994">Een gesproken zoekopdracht starten</translation> <translation id="1667964833127753507">De neutrale kleurenmodus vervangt de kleuren van de achtergrond door neutrale lichte of donkere tinten.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Netwerkverbinding schakelen. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">Naar rechts scrollen</translation> <translation id="1782199038061388045">vertaling</translation> +<translation id="1787955149152357925">Uit</translation> <translation id="181103072419391116">Signaalsterkte <ph name="SIGNAL_STRENGTH" />, beheerd door je beheerder</translation> <translation id="1812997170047690955">Wat wordt er op mijn scherm weergegeven?</translation> <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">Menu uitvouwen</translation> <translation id="3087734570205094154">Onderaan</translation> +<translation id="3090989381251959936"><ph name="FEATURE_NAME" /> in-/uitschakelen. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">Cursor verplaatsen</translation> <translation id="3098580329624789136">De <ph name="INTENT" /> voor '<ph name="QUERY" />' ophalen</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">USB-C-apparaat (poort rechts aan de voorkant)</translation> <translation id="3386978599540877378">het vergrootglas op volledige schermgrootte</translation> <translation id="3400357268283240774">Aanvullende instellingen</translation> +<translation id="3410336247007142655">Instellingen voor donker thema weergeven</translation> <translation id="3413817803639110246">Er is nog niets te zien</translation> <translation id="3428447136709161042">Verbinding met <ph name="NETWORK_NAME" /> verbreken</translation> <translation id="3430396595145920809">Swipe vanaf de rechterkant om terug te gaan</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">Verbinden...</translation> <translation id="4379531060876907730">Dit zijn je stylustools</translation> <translation id="4389184120735010762">Je hebt op de sneltoets voor het vastgezette vergrootglas gedrukt. Wil je deze functie inschakelen?</translation> +<translation id="4412944820643904175"><ph name="FEATURE_NAME" /> is uitgeschakeld.</translation> <translation id="4421231901400348175">De controle over je scherm wordt gedeeld met <ph name="HELPER_NAME" /> via externe ondersteuning.</translation> <translation id="4430019312045809116">Volume</translation> <translation id="4450893287417543264">Niet meer tonen</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">Knop 'Selecteer om uitgesproken te worden'</translation> <translation id="4577274620589681794">De tijd is om · <ph name="LABEL" /></translation> <translation id="4585337515783392668">Casten naar een onbekende ontvanger stopzetten</translation> +<translation id="4596144739579517758">Het donkere thema is uitgeschakeld</translation> <translation id="4623167406982293031">Account verifiëren</translation> <translation id="4628757576491864469">Apparaten</translation> <translation id="4659419629803378708">ChromeVox ingeschakeld</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">Cast-apparaten beschikbaar</translation> <translation id="5170568018924773124">Weergeven in map</translation> <translation id="5207949376430453814">Tekstcursor markeren</translation> +<translation id="5208059991603368177">Aan</translation> <translation id="5222676887888702881">Uitloggen</translation> <translation id="523505283826916779">Toegankelijkheidsinstellingen</translation> <translation id="5260676007519551770">Bureau 4</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">Bluetooth-instellingen</translation> <translation id="5314219114274263156">Schermopname gemaakt</translation> <translation id="5331975486040154427">USB-C-apparaat (poort links aan de achterkant)</translation> +<translation id="5352250171825660495">Het donkere thema is ingeschakeld</translation> <translation id="5379115545237091094">Te veel pogingen</translation> <translation id="5397578532367286026">Het gebruik en de geschiedenis van deze gebruiker kunnen worden bekeken door de beheerder (<ph name="MANAGER_EMAIL" />) op chrome.com.</translation> <translation id="5400461572260843123">Snelle instellingen, druk op Zoeken + pijl-links om het meldingscentrum te openen.</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">Privacyscherm</translation> <translation id="5777841717266010279">Stoppen met scherm delen?</translation> <translation id="5790085346892983794">Geslaagd</translation> +<translation id="579415080077680903">Stil</translation> <translation id="5820394555380036790">Chromium OS</translation> <translation id="5837036133683224804"><ph name="ROUTE_TITLE" /> in <ph name="RECEIVER_NAME" /> stopzetten</translation> <translation id="5860033963881614850">Uit</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">Aan</translation> <translation id="5920710855273935292">Microfoon is gedempt.</translation> +<translation id="5946788582095584774"><ph name="FEATURE_NAME" /> is ingeschakeld.</translation> <translation id="5947494881799873997">Terugzetten</translation> <translation id="595202126637698455">Bijhouden van prestaties ingeschakeld</translation> <translation id="5957083217255311415">Mobiele data zijn uitgeschakeld.</translation> @@ -468,6 +479,7 @@ <translation id="615957422585914272">Schermtoetsenbord weergeven</translation> <translation id="6164005077879661055">Alle bestanden en lokale gegevens gekoppeld aan de gebruiker met beperkte rechten worden permanent verwijderd zodra de gebruiker met beperkte rechten is verwijderd. Bezochte websites en instellingen voor deze gebruiker met beperkte rechten kunnen nog steeds zichtbaar zijn voor de beheerder op <ph name="MANAGEMENT_URL" />.</translation> <translation id="6165508094623778733">Meer informatie</translation> +<translation id="6192859646269780503">Telefoon vinden</translation> <translation id="622484624075952240">Omlaag</translation> <translation id="6236290670123303279">Instellingen beheren</translation> <translation id="6237231532760393653">1X</translation> @@ -539,6 +551,7 @@ <translation id="6981982820502123353">Toegankelijkheid</translation> <translation id="698231206551913481">Alle bestanden en lokale gegevens die zijn gekoppeld aan deze gebruiker, worden definitief verwijderd zodra deze gebruiker is verwijderd.</translation> <translation id="7007983414944123363">Je pincode of wachtwoord kan niet worden geverifieerd. Probeer het opnieuw.</translation> +<translation id="7013005189539051442">Hotspot inschakelen</translation> <translation id="7015766095477679451">Kom terug om <ph name="COME_BACK_TIME" />.</translation> <translation id="7025533177575372252">Koppel je <ph name="DEVICE_NAME" /> aan je telefoon</translation> <translation id="7026338066939101231">Lager</translation> @@ -611,6 +624,7 @@ <translation id="7842569679327885685">Waarschuwing: Experimentele functie</translation> <translation id="7846634333498149051">Toetsenbord</translation> <translation id="7868900307798234037">Ontgrendelen met vingerafdruk</translation> +<translation id="7872786842639831132">Uit</translation> <translation id="7886169021410746335">Privacyinstellingen aanpassen</translation> <translation id="7886277072580235377">Je internetsessie wordt gewist wanneer je uitlogt. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Stuur een e-mail</translation> @@ -715,6 +729,7 @@ <translation id="8853703225951107899">Je pincode of wachtwoord kan nog steeds niet worden geverifieerd. Opmerking: Als je onlangs je wachtwoord hebt gewijzigd, gebruik je je oude wachtwoord. Je nieuwe wachtwoord wordt toegepast zodra je uitlogt.</translation> <translation id="885387440427703469">Schermopname uitgeschakeld</translation> <translation id="8870509716567206129">App biedt geen ondersteuning voor gesplitst scherm.</translation> +<translation id="8871580645200179206">Donker thema in-/uitschakelen. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">Niet verbonden</translation> <translation id="8877788021141246043">Stel een herinnering in</translation> <translation id="8878886163241303700">Uitgebreid scherm</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb index 846b829..f6ddb3f 100644 --- a/ash/strings/ash_strings_no.xtb +++ b/ash/strings/ash_strings_no.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Skjul menyen</translation> <translation id="1383876407941801731">Søk</translation> <translation id="1391102559483454063">På</translation> +<translation id="1407069428457324124">Mørkt tema</translation> <translation id="1419738280318246476">Lås opp enheten for å utføre varselhandlingen</translation> <translation id="1420408895951708260">Slå av/på nattlys. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">Skjermdumpen er tatt og lagret på utklippstavlen</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Klikk for å se flere alternativer</translation> <translation id="1570871743947603115">Slå av/på Bluetooth. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">se all aktiviteten din i denne økten</translation> +<translation id="1611993646327628135">På</translation> <translation id="1632985212731562677">Brytertilgang kan slås av i Innstillinger > Tilgjengelighet.</translation> <translation id="1654477262762802994">Start et talesøk</translation> <translation id="1667964833127753507">Den nøytrale fargemodusen bruker ikke farger som er hentet fra bakgrunnen. I stedet brukes et nøytralt utvalg av lyse eller mørke fargetoner.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Slå av/på nettverkstilkobling. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">Rull til høyre</translation> <translation id="1782199038061388045">oversettelse</translation> +<translation id="1787955149152357925">Av</translation> <translation id="181103072419391116">Signalstyrke <ph name="SIGNAL_STRENGTH" /> – administreres av administratoren din</translation> <translation id="1812997170047690955">Hva er på skjermen?</translation> <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">Vis menyen</translation> <translation id="3087734570205094154">Bunn</translation> +<translation id="3090989381251959936">Slå av/på <ph name="FEATURE_NAME" />. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">Flytt markøren</translation> <translation id="3098580329624789136">Hent <ph name="INTENT" /> for «<ph name="QUERY" />»</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">USB-C-enhet (porten foran på høyre side)</translation> <translation id="3386978599540877378">fullskjermlupen</translation> <translation id="3400357268283240774">Flere innstillinger</translation> +<translation id="3410336247007142655">Vis innstillinger for mørkt tema</translation> <translation id="3413817803639110246">Ingenting å se ennå</translation> <translation id="3428447136709161042">Koble fra <ph name="NETWORK_NAME" /></translation> <translation id="3430396595145920809">Sveip fra høyre for å gå tilbake</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">Kobler til …</translation> <translation id="4379531060876907730">Dette er pekepennverktøyene dine</translation> <translation id="4389184120735010762">Du trykket på hurtigtasten for den dokkede lupen. Vil du slå den på?</translation> +<translation id="4412944820643904175"><ph name="FEATURE_NAME" /> er av.</translation> <translation id="4421231901400348175">Deler kontroll av skjermen med <ph name="HELPER_NAME" /> via fjernhjelp.</translation> <translation id="4430019312045809116">Volum</translation> <translation id="4450893287417543264">Ikke vis igjen</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">Tekstopplesingsknapp</translation> <translation id="4577274620589681794">Tiden er ute · <ph name="LABEL" /></translation> <translation id="4585337515783392668">Stopp casting på en ukjent mottaker</translation> +<translation id="4596144739579517758">Mørkt tema er av</translation> <translation id="4623167406982293031">Bekreft kontoen</translation> <translation id="4628757576491864469">Enheter</translation> <translation id="4659419629803378708">ChromeVox er slått på</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">Cast-enheter er tilgjengelige</translation> <translation id="5170568018924773124">Vis i mappen</translation> <translation id="5207949376430453814">Fremhev tekstinnsettingspunktet</translation> +<translation id="5208059991603368177">På</translation> <translation id="5222676887888702881">Logg av</translation> <translation id="523505283826916779">Tilgjengelighetsinnstillinger</translation> <translation id="5260676007519551770">Skrivebord 4</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">Bluetooth-innstillinger</translation> <translation id="5314219114274263156">Skjermopptaket er utført</translation> <translation id="5331975486040154427">USB-C-enhet (porten bak på venstre side)</translation> +<translation id="5352250171825660495">Mørkt tema er på</translation> <translation id="5379115545237091094">For mange forsøk</translation> <translation id="5397578532367286026">Bruken og loggen for denne brukeren kan gjennomgås av administratoren (<ph name="MANAGER_EMAIL" />) på chrome.com</translation> <translation id="5400461572260843123">Hurtiginnstillinger – trykk på søk + venstre for å åpne varselsenteret.</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">Personvernskjerm</translation> <translation id="5777841717266010279">Vil du stoppe skjermdelingen?</translation> <translation id="5790085346892983794">Fullført</translation> +<translation id="579415080077680903">Demp</translation> <translation id="5820394555380036790">Chromium OS</translation> <translation id="5837036133683224804">Stopp <ph name="ROUTE_TITLE" /> på <ph name="RECEIVER_NAME" /></translation> <translation id="5860033963881614850">Av</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">På</translation> <translation id="5920710855273935292">Lyden for mikrofonen er kuttet.</translation> +<translation id="5946788582095584774"><ph name="FEATURE_NAME" /> er på.</translation> <translation id="5947494881799873997">Tilbakestill</translation> <translation id="595202126637698455">Ytelsessporing er aktivert</translation> <translation id="5957083217255311415">Mobildata er slått av.</translation> @@ -468,6 +479,7 @@ <translation id="615957422585914272">Vis skjermtastaturet</translation> <translation id="6164005077879661055">Alle filer og lokale data tilknyttet den administrerte brukeren slettes permanent når den administrerte brukeren fjernes. Besøkte nettsteder og innstillinger for denne administrerte brukeren kan fortsatt ses av administratoren på <ph name="MANAGEMENT_URL" />.</translation> <translation id="6165508094623778733">Finn ut mer</translation> +<translation id="6192859646269780503">Finn telefonen</translation> <translation id="622484624075952240">Ned</translation> <translation id="6236290670123303279">Administrer innstillinger</translation> <translation id="6237231532760393653">1X</translation> @@ -539,6 +551,7 @@ <translation id="6981982820502123353">Tilgjengelighet</translation> <translation id="698231206551913481">Alle filer og lokale data som er tilknyttet denne brukeren, slettes permanent når brukeren fjernes.</translation> <translation id="7007983414944123363">PIN-koden eller passordet kunne ikke verifiseres. Prøv på nytt.</translation> +<translation id="7013005189539051442">Slå på Wi-Fi-sone</translation> <translation id="7015766095477679451">Kom tilbake <ph name="COME_BACK_TIME" />.</translation> <translation id="7025533177575372252">Koble <ph name="DEVICE_NAME" /> til telefonen</translation> <translation id="7026338066939101231">Reduser</translation> @@ -611,6 +624,7 @@ <translation id="7842569679327885685">Advarsel: Funksjon på forsøksstadiet</translation> <translation id="7846634333498149051">Tastatur</translation> <translation id="7868900307798234037">Låser opp med fingeravtrykk</translation> +<translation id="7872786842639831132">Av</translation> <translation id="7886169021410746335">justere personverninnstillinger</translation> <translation id="7886277072580235377">Internett-økten din fjernes når du logger av. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Send e-post</translation> @@ -715,6 +729,7 @@ <translation id="8853703225951107899">PIN-koden eller passordet kunne fremdeles ikke verifiseres. Merk: Hvis du nylig har byttet passord, bruker du det gamle passordet. Det nye passordet blir tatt i bruk når du logger av.</translation> <translation id="885387440427703469">Skjermopptak er slått av</translation> <translation id="8870509716567206129">Appen støtter ikke delt skjerm.</translation> +<translation id="8871580645200179206">Slå av/på mørkt tema. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">Ikke tilkoblet</translation> <translation id="8877788021141246043">Angi en påminnelse</translation> <translation id="8878886163241303700">Utvidet skjerm</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb index 126a63e4..a382391 100644 --- a/ash/strings/ash_strings_pl.xtb +++ b/ash/strings/ash_strings_pl.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Zwiń menu</translation> <translation id="1383876407941801731">Szukaj</translation> <translation id="1391102559483454063">Włączono</translation> +<translation id="1407069428457324124">Tryb ciemny</translation> <translation id="1419738280318246476">Odblokuj urządzenie, by zareagować na powiadomienie</translation> <translation id="1420408895951708260">Włącz lub wyłącz Podświetlenie nocne. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">Utworzono zrzut ekranu i zapisano go w schowku</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Kliknij, by wyświetlić więcej opcji</translation> <translation id="1570871743947603115">Włącz lub wyłącz Bluetooth. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">uzyskiwać dostęp do całej Twojej aktywności w tej sesji;</translation> +<translation id="1611993646327628135">Włączono</translation> <translation id="1632985212731562677">Funkcję Switch Access możesz wyłączyć, otwierając Ustawienia > Ułatwienia dostępu.</translation> <translation id="1654477262762802994">Rozpocznij zapytanie głosowe</translation> <translation id="1667964833127753507">Tryb koloru neutralnego nie wyświetla kolorów wyodrębnionych z tapety. Zamiast nich używa jasnych i ciemnych odcieni stonowanych neutralnie.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Włącz lub wyłącz połączenie sieciowe. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">Przewiń w prawo</translation> <translation id="1782199038061388045">tłumaczenie</translation> +<translation id="1787955149152357925">Wyłączono</translation> <translation id="181103072419391116">Siła sygnału: <ph name="SIGNAL_STRENGTH" />, zarządzana przez administratora</translation> <translation id="1812997170047690955">Co widać na moim ekranie?</translation> <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">Rozwiń menu</translation> <translation id="3087734570205094154">Na dół</translation> +<translation id="3090989381251959936"><ph name="FEATURE_NAME" /> – przełączanie. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">Przesuwanie kursora</translation> <translation id="3098580329624789136">Zobacz: <ph name="INTENT" /> dla zapytania „<ph name="QUERY" />”</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">Urządzenie USB-C (przedni port na prawym boku)</translation> <translation id="3386978599540877378">Lupa pełnoekranowa</translation> <translation id="3400357268283240774">Ustawienia dodatkowe</translation> +<translation id="3410336247007142655">Pokaż ustawienia trybu ciemnego</translation> <translation id="3413817803639110246">Na razie nie ma nic do pokazania</translation> <translation id="3428447136709161042">Odłączyć od sieci <ph name="NETWORK_NAME" />?</translation> <translation id="3430396595145920809">Aby wrócić, przesuń palcem od prawej strony</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">Łączę...</translation> <translation id="4379531060876907730">To są Twoje narzędzia rysika</translation> <translation id="4389184120735010762">Naciśnięto skrót klawiszowy lupy zadokowanej. Czy chcesz ją włączyć?</translation> +<translation id="4412944820643904175"><ph name="FEATURE_NAME" /> – wyłączono.</translation> <translation id="4421231901400348175">Udostępnianie sterowania ekranem użytkownikowi <ph name="HELPER_NAME" /> przy użyciu pomocy zdalnej.</translation> <translation id="4430019312045809116">Głośność</translation> <translation id="4450893287417543264">Nie pokazuj ponownie</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">Przycisk Przeczytaj na głos</translation> <translation id="4577274620589681794">Czas minął · <ph name="LABEL" /></translation> <translation id="4585337515783392668">Zakończ przesyłanie do nieznanego odbiornika</translation> +<translation id="4596144739579517758">Tryb ciemny jest wyłączony</translation> <translation id="4623167406982293031">Zweryfikuj konto</translation> <translation id="4628757576491864469">Urządzenia</translation> <translation id="4659419629803378708">Włączono ChromeVox</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">Dostępne są urządzenia przesyłające</translation> <translation id="5170568018924773124">Pokaż w folderze</translation> <translation id="5207949376430453814">Podświetlaj kursor tekstu</translation> +<translation id="5208059991603368177">Włączono</translation> <translation id="5222676887888702881">Wyloguj się</translation> <translation id="523505283826916779">Ustawienia ułatwień dostępu</translation> <translation id="5260676007519551770">Biurko 4</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">Ustawienia Bluetooth</translation> <translation id="5314219114274263156">Nagrano ekran</translation> <translation id="5331975486040154427">Urządzenie USB-C (tylny port na lewym boku)</translation> +<translation id="5352250171825660495">Tryb ciemny jest włączony</translation> <translation id="5379115545237091094">Zbyt wiele prób</translation> <translation id="5397578532367286026">Działania i historia tego użytkownika mogą być sprawdzane przez menedżera (<ph name="MANAGER_EMAIL" />) na chrome.com.</translation> <translation id="5400461572260843123">Szybkie ustawienia, naciśnij Wyszukaj + strzałka w lewo, by otworzyć centrum powiadomień.</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">Ekran chroniący prywatność</translation> <translation id="5777841717266010279">Zakończyć udostępnianie ekranu?</translation> <translation id="5790085346892983794">Udało się</translation> +<translation id="579415080077680903">Wyciszenie</translation> <translation id="5820394555380036790">System operacyjny Chromium</translation> <translation id="5837036133683224804">Zatrzymaj usługę <ph name="ROUTE_TITLE" /> na urządzeniu <ph name="RECEIVER_NAME" /></translation> <translation id="5860033963881614850">Wyłączone</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">Włączone</translation> <translation id="5920710855273935292">Mikrofon jest wyciszony.</translation> +<translation id="5946788582095584774"><ph name="FEATURE_NAME" /> – włączono.</translation> <translation id="5947494881799873997">Przywróć</translation> <translation id="595202126637698455">Śledzenie wydajności jest włączone</translation> <translation id="5957083217255311415">Mobilna transmisja danych jest wyłączona.</translation> @@ -468,6 +479,7 @@ <translation id="615957422585914272">Pokaż klawiaturę ekranową</translation> <translation id="6164005077879661055">W chwili usunięcia użytkownika nadzorowanego wszystkie powiązane z nim pliki i dane lokalne zostaną trwale usunięte. Lista stron, na które wszedł ten użytkownik, oraz jego ustawienia mogą być wciąż widoczne dla menedżera na <ph name="MANAGEMENT_URL" />.</translation> <translation id="6165508094623778733">Dowiedz się więcej</translation> +<translation id="6192859646269780503">Znajdź telefon</translation> <translation id="622484624075952240">W dół</translation> <translation id="6236290670123303279">Zarządzaj ustawieniami</translation> <translation id="6237231532760393653">1X</translation> @@ -539,6 +551,7 @@ <translation id="6981982820502123353">Ułatwienia dostępu</translation> <translation id="698231206551913481">Usunięcie tego użytkownika spowoduje trwałe usunięcie wszystkich związanych z nim plików i danych lokalnych.</translation> <translation id="7007983414944123363">Nie udało się zweryfikować Twojego kodu PIN ani hasła. Spróbuj ponownie.</translation> +<translation id="7013005189539051442">Włącz hotspot</translation> <translation id="7015766095477679451">Możesz wrócić o <ph name="COME_BACK_TIME" />.</translation> <translation id="7025533177575372252">Połącz urządzenie <ph name="DEVICE_NAME" /> z telefonem</translation> <translation id="7026338066939101231">Zmniejsz</translation> @@ -611,6 +624,7 @@ <translation id="7842569679327885685">Ostrzeżenie: funkcja eksperymentalna</translation> <translation id="7846634333498149051">Klawiatura</translation> <translation id="7868900307798234037">Odblokowano odciskiem palca</translation> +<translation id="7872786842639831132">Wyłączono</translation> <translation id="7886169021410746335">Dostosowywać ustawienia prywatności</translation> <translation id="7886277072580235377">Twoja sesja internetowa zostanie wyczyszczona, gdy się wylogujesz. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Wyślij e-maila</translation> @@ -715,6 +729,7 @@ <translation id="8853703225951107899">Nadal nie udało się zweryfikować Twojego hasła ani kodu PIN. Uwaga: jeśli Twoje hasło zostało ostatnio zmienione, użyj starego hasła. Nowe hasło zacznie obowiązywać, gdy się wylogujesz.</translation> <translation id="885387440427703469">Zrzuty ekranu zostały wyłączone</translation> <translation id="8870509716567206129">Aplikacja nie obsługuje dzielonego ekranu.</translation> +<translation id="8871580645200179206">Tryb ciemny – przełączanie. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">Brak połączenia</translation> <translation id="8877788021141246043">Ustaw przypomnienie</translation> <translation id="8878886163241303700">Rozszerzony ekran</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb index bd602b4..e2b15fa 100644 --- a/ash/strings/ash_strings_pt-BR.xtb +++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Recolher menu</translation> <translation id="1383876407941801731">Pesquisar</translation> <translation id="1391102559483454063">Ativado</translation> +<translation id="1407069428457324124">Tema escuro</translation> <translation id="1419738280318246476">Desbloqueie o dispositivo para executar a ação de notificação</translation> <translation id="1420408895951708260">Alternar Modo noturno. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">Captura de tela salva na área de transferência</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Clique para ver mais opções</translation> <translation id="1570871743947603115">Alternar Bluetooth. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">acessar todas as suas atividades nesta sessão;</translation> +<translation id="1611993646327628135">Ativado</translation> <translation id="1632985212731562677">O "acesso com interruptor" pode ser desativado em Configurações > Acessibilidade.</translation> <translation id="1654477262762802994">Iniciar uma consulta por voz</translation> <translation id="1667964833127753507">O modo de cores neutras substitui as cores extraídas do plano de fundo por um conjunto de tons neutros claros ou escuros.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Alternar conexão de rede. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">Rolar para a direita</translation> <translation id="1782199038061388045">tradução</translation> +<translation id="1787955149152357925">Desativado</translation> <translation id="181103072419391116"><ph name="SIGNAL_STRENGTH" /> de intensidade de sinal , gerenciada pelo seu administrador</translation> <translation id="1812997170047690955">O que está na minha tela?</translation> <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">Expandir menu</translation> <translation id="3087734570205094154">Parte inferior</translation> +<translation id="3090989381251959936">Alternar o recurso <ph name="FEATURE_NAME" />. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">Mover cursor</translation> <translation id="3098580329624789136">Veja a <ph name="INTENT" /> de "<ph name="QUERY" />"</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">Dispositivo USB-C (porta frontal da direita)</translation> <translation id="3386978599540877378">a lupa de tela cheia</translation> <translation id="3400357268283240774">Configurações adicionais</translation> +<translation id="3410336247007142655">Mostrar configurações do tema escuro</translation> <translation id="3413817803639110246">Nada para ver ainda</translation> <translation id="3428447136709161042">Desconectar da rede <ph name="NETWORK_NAME" /></translation> <translation id="3430396595145920809">Deslize da direita para voltar</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">Conectando...</translation> <translation id="4379531060876907730">Estas são suas ferramentas da stylus</translation> <translation id="4389184120735010762">Você pressionou o atalho de teclado para a lupa em área fixa. Gostaria de ativá-la?</translation> +<translation id="4412944820643904175">O recurso <ph name="FEATURE_NAME" /> está desativado.</translation> <translation id="4421231901400348175">Compartilhando o controle da sua tela com <ph name="HELPER_NAME" /> via Assistência remota.</translation> <translation id="4430019312045809116">Volume</translation> <translation id="4450893287417543264">Não mostrar novamente</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">Botão Selecionar para ouvir</translation> <translation id="4577274620589681794">Tempo esgotado · <ph name="LABEL" /></translation> <translation id="4585337515783392668">Parar de transmitir para um destinatário desconhecido</translation> +<translation id="4596144739579517758">O tema escuro está desativado</translation> <translation id="4623167406982293031">Verificar conta</translation> <translation id="4628757576491864469">Dispositivos</translation> <translation id="4659419629803378708">ChromeVox ativado</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">Dispositivos de transmissão disponíveis</translation> <translation id="5170568018924773124">Mostrar na pasta</translation> <translation id="5207949376430453814">Destacar cursor de texto</translation> +<translation id="5208059991603368177">Ativado</translation> <translation id="5222676887888702881">Sair</translation> <translation id="523505283826916779">Configurações de acessibilidade</translation> <translation id="5260676007519551770">Espaço de trabalho 4</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">Configurações de Bluetooth</translation> <translation id="5314219114274263156">Gravação de tela capturada</translation> <translation id="5331975486040154427">Dispositivo USB-C (porta traseira da esquerda)</translation> +<translation id="5352250171825660495">O tema escuro está ativado</translation> <translation id="5379115545237091094">Muitas tentativas</translation> <translation id="5397578532367286026">O uso e o histórico deste usuário podem ser analisados pelo administrador (<ph name="MANAGER_EMAIL" />) em chrome.com.</translation> <translation id="5400461572260843123">Configurações rápidas, pressione "Pesquisa" + seta para a esquerda para acessar a central de notificações.</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">Tela de privacidade</translation> <translation id="5777841717266010279">Interromper compartilhamento de tela?</translation> <translation id="5790085346892983794">Sucesso</translation> +<translation id="579415080077680903">Silenciar</translation> <translation id="5820394555380036790">Chromium OS</translation> <translation id="5837036133683224804">Parar <ph name="ROUTE_TITLE" /> para <ph name="RECEIVER_NAME" /></translation> <translation id="5860033963881614850">Desativado</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">Ativado</translation> <translation id="5920710855273935292">O microfone está desativado.</translation> +<translation id="5946788582095584774">O recurso <ph name="FEATURE_NAME" /> está ativado.</translation> <translation id="5947494881799873997">Reverter</translation> <translation id="595202126637698455">Rastreamento de desempenho ativado</translation> <translation id="5957083217255311415">Os dados móveis estão desativados.</translation> @@ -469,6 +480,7 @@ <translation id="6164005077879661055">Todos os arquivos e dados locais associados ao usuário supervisionado serão permanentemente excluídos assim que esse usuário for removido. Os websites visitados por esse usuário supervisionado e suas configurações ainda poderão ser vistos pelo administrador em <ph name="MANAGEMENT_URL" />.</translation> <translation id="6165508094623778733">Saiba mais</translation> +<translation id="6192859646269780503">Localizar smartphone</translation> <translation id="622484624075952240">Seta para baixo</translation> <translation id="6236290670123303279">Gerenciar configurações</translation> <translation id="6237231532760393653">1X</translation> @@ -540,6 +552,7 @@ <translation id="6981982820502123353">Acessibilidade</translation> <translation id="698231206551913481">Todos os arquivos e dados locais associados a este usuário serão excluídos permanentemente quando o usuário for removido.</translation> <translation id="7007983414944123363">Não foi possível verificar seu PIN ou sua senha. Tente novamente.</translation> +<translation id="7013005189539051442">Ativar ponto de acesso</translation> <translation id="7015766095477679451">Volte às <ph name="COME_BACK_TIME" />.</translation> <translation id="7025533177575372252">Conecte seu <ph name="DEVICE_NAME" /> ao smartphone</translation> <translation id="7026338066939101231">Reduzir</translation> @@ -612,6 +625,7 @@ <translation id="7842569679327885685">Aviso: recurso experimental</translation> <translation id="7846634333498149051">Teclado</translation> <translation id="7868900307798234037">Desbloqueio com impressão digital</translation> +<translation id="7872786842639831132">Desativado</translation> <translation id="7886169021410746335">ajustar configurações de privacidade.</translation> <translation id="7886277072580235377">Sua sessão de Internet será limpa quando você sair. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Enviar um e-mail</translation> @@ -716,6 +730,7 @@ <translation id="8853703225951107899">Ainda não foi possível verificar seu PIN ou sua senha. Observação: se você mudou a senha recentemente, use a antiga. A nova senha será aplicada depois que você sair.</translation> <translation id="885387440427703469">Captura de tela desativada</translation> <translation id="8870509716567206129">O app não é compatível com a divisão de tela.</translation> +<translation id="8871580645200179206">Alternar tema escuro. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">Não conectado</translation> <translation id="8877788021141246043">Definir um lembrete</translation> <translation id="8878886163241303700">Tela ampla</translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb index cb6bdb87..16dc1c1 100644 --- a/ash/strings/ash_strings_pt-PT.xtb +++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Reduzir menu</translation> <translation id="1383876407941801731">Pesquisar</translation> <translation id="1391102559483454063">Ativada</translation> +<translation id="1407069428457324124">Tema escuro</translation> <translation id="1419738280318246476">Desbloqueie o dispositivo para realizar a ação de notificação.</translation> <translation id="1420408895951708260">Ativar/desativar Luz noturna. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">Captura de ecrã tirada e guardada na área de transferência</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Clicar para obter mais opções</translation> <translation id="1570871743947603115">Ativar/desativar Bluetooth. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">Aceda a toda a sua atividade nesta sessão.</translation> +<translation id="1611993646327628135">Ativado</translation> <translation id="1632985212731562677">O acesso por comutador pode ser desativado em Definições > Acessibilidade.</translation> <translation id="1654477262762802994">Iniciar uma consulta de voz</translation> <translation id="1667964833127753507">O modo de cores neutras não utiliza cores extraídas da imagem de fundo: substitui-as por um conjunto de tons claros ou escuros.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Ativar/desativar ligação de rede. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">Deslocar para a direita</translation> <translation id="1782199038061388045">tradução</translation> +<translation id="1787955149152357925">Desativado</translation> <translation id="181103072419391116">Intensidade do sinal: <ph name="SIGNAL_STRENGTH" />, gerida pelo administrador</translation> <translation id="1812997170047690955">O que está no meu ecrã?</translation> <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">Expandir menu</translation> <translation id="3087734570205094154">Parte inferior</translation> +<translation id="3090989381251959936">Ative/desative a funcionalidade <ph name="FEATURE_NAME" />. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">Mover o cursor</translation> <translation id="3098580329624789136">Obtenha a intenção <ph name="INTENT" /> de "<ph name="QUERY" />"</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">Dispositivo USB-C (porta frontal do lado direito)</translation> <translation id="3386978599540877378">a lupa em ecrã inteiro</translation> <translation id="3400357268283240774">Definições adicionais</translation> +<translation id="3410336247007142655">Mostre as definições do tema escuro.</translation> <translation id="3413817803639110246">Ainda não existe nada para ver</translation> <translation id="3428447136709161042">Desligar da rede <ph name="NETWORK_NAME" /></translation> <translation id="3430396595145920809">Deslize rapidamente a partir da direita para retroceder.</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">A ligar...</translation> <translation id="4379531060876907730">Estas são as suas ferramentas da caneta stylus</translation> <translation id="4389184120735010762">Premiu o atalho de teclado da lupa ancorada. Pretende ativá-la?</translation> +<translation id="4412944820643904175">A funcionalidade <ph name="FEATURE_NAME" /> está desativada.</translation> <translation id="4421231901400348175">A partilhar o controlo do seu ecrã com <ph name="HELPER_NAME" /> através da Assistência remota.</translation> <translation id="4430019312045809116">Volume</translation> <translation id="4450893287417543264">Não mostrar de novo</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">Botão Selecionar para falar</translation> <translation id="4577274620589681794">Acabou o tempo · <ph name="LABEL" /></translation> <translation id="4585337515783392668">Parar a transmissão para um recetor desconhecido</translation> +<translation id="4596144739579517758">O tema escuro está desativado.</translation> <translation id="4623167406982293031">Validar conta</translation> <translation id="4628757576491864469">Dispositivos</translation> <translation id="4659419629803378708">ChromeVox ativado</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">Dispositivos de transmissão disponíveis</translation> <translation id="5170568018924773124">Mostrar numa pasta</translation> <translation id="5207949376430453814">Realçar cursor do texto</translation> +<translation id="5208059991603368177">Ativado</translation> <translation id="5222676887888702881">Terminar sessão</translation> <translation id="523505283826916779">Definições de acessibilidade</translation> <translation id="5260676007519551770">Secretária 4</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">Definições de Bluetooth</translation> <translation id="5314219114274263156">Gravação de ecrã captada</translation> <translation id="5331975486040154427">Dispositivo USB-C (porta traseira do lado esquerdo)</translation> +<translation id="5352250171825660495">O tema escuro está ativado.</translation> <translation id="5379115545237091094">Demasiadas tentativas</translation> <translation id="5397578532367286026">A utilização e o histórico deste utilizador podem ser consultados pelo gestor (<ph name="MANAGER_EMAIL" />) em chrome.com.</translation> <translation id="5400461572260843123">Nas Definições rápidas, prima Pesquisa + seta para a esquerda para aceder ao centro de notificações.</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">Ecrã de privacidade</translation> <translation id="5777841717266010279">Parar a partilha do ecrã?</translation> <translation id="5790085346892983794">Sucesso</translation> +<translation id="579415080077680903">Silenciar</translation> <translation id="5820394555380036790">SO Chromium</translation> <translation id="5837036133683224804">Parar o <ph name="ROUTE_TITLE" /> no recetor <ph name="RECEIVER_NAME" /></translation> <translation id="5860033963881614850">Desativado</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">Ativado</translation> <translation id="5920710855273935292">O som do microfone está desativado.</translation> +<translation id="5946788582095584774">A funcionalidade <ph name="FEATURE_NAME" /> está ativada.</translation> <translation id="5947494881799873997">Reverter</translation> <translation id="595202126637698455">Rastreio do desempenho ativado</translation> <translation id="5957083217255311415">Os dados móveis estão desativados.</translation> @@ -468,6 +479,7 @@ <translation id="615957422585914272">Mostrar teclado no ecrã</translation> <translation id="6164005077879661055">Todos os ficheiros e dados locais associados ao utilizador supervisionado serão definitivamente eliminados depois de este utilizador supervisionado ser removido. Os Sites visitados e as definições deste utilizador supervisionado poderão continuar visíveis para o gestor em <ph name="MANAGEMENT_URL" />.</translation> <translation id="6165508094623778733">Saiba mais</translation> +<translation id="6192859646269780503">Localizar o telemóvel</translation> <translation id="622484624075952240">Para baixo</translation> <translation id="6236290670123303279">Gerir definições</translation> <translation id="6237231532760393653">1X</translation> @@ -539,6 +551,7 @@ <translation id="6981982820502123353">Acessibilidade</translation> <translation id="698231206551913481">Todos os ficheiros e dados locais associados a este utilizador são permanentemente eliminados assim que este utilizador é removido.</translation> <translation id="7007983414944123363">Não foi possível validar o seu PIN ou palavra-passe. Tente novamente.</translation> +<translation id="7013005189539051442">Ativar zona Wi-Fi</translation> <translation id="7015766095477679451">Volte à(s) <ph name="COME_BACK_TIME" />.</translation> <translation id="7025533177575372252">Ligue o dispositivo <ph name="DEVICE_NAME" /> ao telemóvel.</translation> <translation id="7026338066939101231">Diminuir</translation> @@ -611,6 +624,7 @@ <translation id="7842569679327885685">Aviso: funcionalidade experimental</translation> <translation id="7846634333498149051">Teclado</translation> <translation id="7868900307798234037">Desbloqueado com a impressão digital</translation> +<translation id="7872786842639831132">Desativado</translation> <translation id="7886169021410746335">Ajustar as definições de privacidade</translation> <translation id="7886277072580235377">Quando terminar sessão, a sua sessão de Internet será apagada. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Enviar um email</translation> @@ -715,6 +729,7 @@ <translation id="8853703225951107899">Ainda não foi possível validar o seu PIN ou palavra-passe. Nota: se alterou a sua palavra-passe recentemente, utilize a palavra-passe antiga. A nova palavra-passe será aplicada quando terminar sessão.</translation> <translation id="885387440427703469">Captura de ecrã desativada</translation> <translation id="8870509716567206129">A aplicação não é compatível com o ecrã dividido.</translation> +<translation id="8871580645200179206">Ative/desative o tema escuro. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">Sem ligação</translation> <translation id="8877788021141246043">Definir um lembrete</translation> <translation id="8878886163241303700">Ecrã alargado</translation>
diff --git a/ash/strings/ash_strings_si.xtb b/ash/strings/ash_strings_si.xtb index 5439a48..67d25bc 100644 --- a/ash/strings/ash_strings_si.xtb +++ b/ash/strings/ash_strings_si.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">මෙනුව හකුළන්න</translation> <translation id="1383876407941801731">සොයන්න</translation> <translation id="1391102559483454063">සක්රියයි</translation> +<translation id="1407069428457324124">අඳුරු තේමාව</translation> <translation id="1419738280318246476">ක්රියාකාරකම් දැනුම්දීම ඉටු කිරීමට උපාංගය අගුළු අරින්න</translation> <translation id="1420408895951708260">රාත්රී ආලෝකය මාරු කරන්න. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">තිර රුව ගන්නා ලද අතර පසුරු පුවරුවට පිටපත් කරන ලදි</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">තවත් විකල්ප සඳහා ක්ලික් කරන්න</translation> <translation id="1570871743947603115">බ්ලූටූත් ටොගල කරන්න. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">මෙම සැසියෙහි ඔබේ සියලු ක්රියාකාරකම්වලට ප්රවේශය</translation> +<translation id="1611993646327628135">ක්රියාත්මකයි</translation> <translation id="1632985212731562677">ප්රවේශය මාරු කිරීම සැකසීම් > ප්රවේශ්යතාව තුළ අබල කළ හැක.</translation> <translation id="1654477262762802994">හඬ විමසුමක් අරඹන්න</translation> <translation id="1667964833127753507">උදාසීන වර්ණ ප්රකාරය වෝල්පේපරය නිස්සාරණය කළ වර්ණ, උදාසීන තානය සහිත ආලෝක හෝ අඳුරු වර්ණ කට්ටලයක් මගින් ප්රතිස්ථාපනය කරමින්, භාවිත නොකරයි.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">ජාල සබඳතාව ටොගල කරන්න. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">දකුණට අනුචලන කරන්න</translation> <translation id="1782199038061388045">පරිවර්තනය</translation> +<translation id="1787955149152357925">ක්රියාවිරහිතයි</translation> <translation id="181103072419391116">සංඥා ප්රබලතාව <ph name="SIGNAL_STRENGTH" />, ඔබේ පරිපාලකයා විසින් කළමනාකරණය කරයි</translation> <translation id="1812997170047690955">මගේ තිරය මත ඇත්තේ මොනවා ද?</translation> <translation id="1823873187264960516">ඊතර්නෙට්: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">මෙනුව දිග හරින්න</translation> <translation id="3087734570205094154">පතුල</translation> +<translation id="3090989381251959936"><ph name="FEATURE_NAME" /> ටොගල් කරන්න. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">කර්සරය එහා මෙහා කරන්න</translation> <translation id="3098580329624789136">"<ph name="QUERY" />" සඳහා <ph name="INTENT" /> ලබා ගන්න</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">USB-C උපාංගය (දකුණුපස ඉදිරි තොට)</translation> <translation id="3386978599540877378">පූර්ණ තිර විශාලකය</translation> <translation id="3400357268283240774">අතිරේක සැකසීම්</translation> +<translation id="3410336247007142655">අඳුරු තේමා සැකසීම් පෙන්වන්න</translation> <translation id="3413817803639110246">තවම දැකීමට කිසිවක් නැත</translation> <translation id="3428447136709161042"><ph name="NETWORK_NAME" /> වෙතින් විසන්ධි කරන්න</translation> <translation id="3430396595145920809">ආපසු යාමට දකුණින් ස්වයිප් කරන්න</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">සම්බන්ධ වෙමින්...</translation> <translation id="4379531060876907730">ඔබේ පන්හිඳ මෙවලම් මේවායි</translation> <translation id="4389184120735010762">ඔබ ඩොක් කළ විශාලකය සඳහා යතුරුපුවරු කෙටිමඟ ඔබා ඇත. ඔබට එය සක්රීය කළ යුතුද?</translation> +<translation id="4412944820643904175"><ph name="FEATURE_NAME" /> ක්රියාවිරහිතයි.</translation> <translation id="4421231901400348175">දුරස්ථ සහයක මගින් ඔබේ තිරයේ පාලනය <ph name="HELPER_NAME" /> සමඟ බෙදාගනී.</translation> <translation id="4430019312045809116">ශබ්ද තීව්රතාවය</translation> <translation id="4450893287417543264">නැවත නොපෙන්වන්න</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">කථා-කිරීමට-තෝරන්න බොත්තම</translation> <translation id="4577274620589681794">කාලය ඉවරයි · <ph name="LABEL" /></translation> <translation id="4585337515783392668">නොදන්නා ග්රාහකයෙකු මත විකාශය කිරීම නවත්වන්න</translation> +<translation id="4596144739579517758">අඳුරු තේමාව ක්රියාවිරහිතයි</translation> <translation id="4623167406982293031">ගිණුම සත්යාපනය කරන්න</translation> <translation id="4628757576491864469">උපාංග</translation> <translation id="4659419629803378708">ChromeVox සබලයි</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">විකාශ උපාංග ලබා ගත හැකිය</translation> <translation id="5170568018924773124">ෆෝල්ඩරයේ පෙන්වන්න</translation> <translation id="5207949376430453814">පෙළ කාකපාදය උද්දීපනය කරන්න</translation> +<translation id="5208059991603368177">ක්රියාත්මකයි</translation> <translation id="5222676887888702881">පිටවීම</translation> <translation id="523505283826916779">ප්රවේශ්යතා පසුතල</translation> <translation id="5260676007519551770">4 වෙනි මේසය</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">බ්ලූටූත් සැකසීම්</translation> <translation id="5314219114274263156">තිර පිටපත් කිරීමක් ගන්නා ලදි</translation> <translation id="5331975486040154427">USB-C උපාංගය (වම්පස පසු තොට)</translation> +<translation id="5352250171825660495">අඳුරු තේමාව ක්රියාත්මකයි</translation> <translation id="5379115545237091094">උත්සාහයන් විශාල ප්රමාණයකි</translation> <translation id="5397578532367286026">මෙම පරිශීලකගේ භාවිතය සහ ඉතිහාසය කළමනාකරු(<ph name="MANAGER_EMAIL" />) විසින් chrome.com මත සමාලෝචනය කළ හැක.</translation> <translation id="5400461572260843123">ක්ෂණික සැකසුම්, දැනුම්දීම් මධ්යස්ථානයට ප්රවේශ වීමට සෙවුම සහ + වම ඔබන්න.</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">පෞද්ගලිකත්ව තිරය</translation> <translation id="5777841717266010279">තිර හවුල්කිරීම නවතන්නද?</translation> <translation id="5790085346892983794">සාර්ථකයි</translation> +<translation id="579415080077680903">නිහඬ</translation> <translation id="5820394555380036790">Chromium OS</translation> <translation id="5837036133683224804"><ph name="RECEIVER_NAME" /> මත <ph name="ROUTE_TITLE" /> නවත්වන්න</translation> <translation id="5860033963881614850">අක්රීය</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> <ph name="MAIL" /></translation> <translation id="5916664084637901428">ක්රියාත්මකයි</translation> <translation id="5920710855273935292">මයිකය නිහඬයි.</translation> +<translation id="5946788582095584774"><ph name="FEATURE_NAME" /> ක්රියාත්මකයි.</translation> <translation id="5947494881799873997">ප්රතිවර්තනය</translation> <translation id="595202126637698455">ක්රියාකරිත්ව හඹායෑම සබල කෙරිණි</translation> <translation id="5957083217255311415">ජංගම දත්ත ක්රියාවිරහිතයි.</translation> @@ -468,6 +479,7 @@ <translation id="615957422585914272">තිරය-මත යතුරුපුවරුව පෙන්වන්න</translation> <translation id="6164005077879661055">මෙම අධීක්ෂණය කළ භාවිතකරු ඉවත් කළ විට අධීක්ෂණය කළ භාවිතකරු හා අදාළ ගොනු සහ ප්රාදේශී්ය දත්ත සියල්ල ස්ථිරවම මැකෙනු ඇත. මෙම අධීක්ෂණය කළ භාවිතකරු සඳහා නරඹන ලද වෙබ් අඩවි සහ පසුතල තවමත් <ph name="MANAGEMENT_URL" /> හිදී කළමනාකරුට දැකිය හැකිය.</translation> <translation id="6165508094623778733">තව දැන ගන්න</translation> +<translation id="6192859646269780503">දුරකථනය තිබෙන තැන සොයා ගන්න</translation> <translation id="622484624075952240">පහළ</translation> <translation id="6236290670123303279">සැකසීම් කළමනා කරන්න</translation> <translation id="6237231532760393653">1X</translation> @@ -539,6 +551,7 @@ <translation id="6981982820502123353">ප්රවේශ්යතාව</translation> <translation id="698231206551913481">මෙම පරිශීලකයා ඉවත් කළ විට මෙම පරිශීලක හා සම්බන්ධිත සියලු ගොනු සහ ස්ථානීය දත්ත ස්ථිරවම මකනු ඇත.</translation> <translation id="7007983414944123363">ඔබගේ PIN හෝ මුරපදය සත්යාපනය කළ නොහැකි විය. නැවත උත්සාහ කරන්න.</translation> +<translation id="7013005189539051442">හොට්ස්පොට් සබල කරන්න</translation> <translation id="7015766095477679451"><ph name="COME_BACK_TIME" /> හිදී ආපසු එන්න.</translation> <translation id="7025533177575372252">ඔබේ <ph name="DEVICE_NAME" /> ඔබේ දුරකථනය සමඟ සබඳින්න</translation> <translation id="7026338066939101231">අඩු වීම</translation> @@ -611,6 +624,7 @@ <translation id="7842569679327885685">අවවාදයයි: අතහදා බැලීමේ විශේෂාංගයකි</translation> <translation id="7846634333498149051">යතුරු පුවරුව</translation> <translation id="7868900307798234037">ඇඟිලි සලකුණ සමඟ අඟුල අරින්න</translation> +<translation id="7872786842639831132">ක්රියාවිරහිතයි</translation> <translation id="7886169021410746335">පෞද්ගලිකත්ව සැකසීම් සීරුමාරු කරන්න</translation> <translation id="7886277072580235377">ඔබ වරනය වන විට ඔබගේ අන්තර්ජාල සැසිය හිස් වනු ඇත. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">ඊ-තැපෑලක් යවන්න</translation> @@ -715,6 +729,7 @@ <translation id="8853703225951107899">ඔබගේ PIN හෝ මුරපදය තවම සත්යාපනය කළ නොහැකි විය. සටහන: ඔබ මෑතකදී ඔබගේ මුරපදය වෙනස් කළේ නම්, ඔබගේ පැරණි මුරපදය භාවිතා කරන්න. ඔබ ඉවත් වූ පසු ඔබගේ නව මුරපදය අදාළ වේ.</translation> <translation id="885387440427703469">තිර ග්රහණය අබලයි</translation> <translation id="8870509716567206129">යෙදුම බෙදුණු-තිරයට සහාය නොදක්වයි.</translation> +<translation id="8871580645200179206">අඳුරු තේමාව ටොගල් කරන්න. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">සබඳවී නොමැත</translation> <translation id="8877788021141246043">මතක් කිරීමක් සකසන්න</translation> <translation id="8878886163241303700">තිරය දික් කරයි</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb index 62b987d0..576a3af 100644 --- a/ash/strings/ash_strings_sk.xtb +++ b/ash/strings/ash_strings_sk.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Zbaliť ponuku</translation> <translation id="1383876407941801731">Vyhľadávanie</translation> <translation id="1391102559483454063">Zapnuté</translation> +<translation id="1407069428457324124">Tmavý motív</translation> <translation id="1419738280318246476">Ak chcete vykonať akciu s upozornením, odomknite zariadenie</translation> <translation id="1420408895951708260">Prepnúť nočný režim. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">Snímka obrazovky bola vytvorená a uložená do schránky</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Kliknutím zobrazíte ďalšie možnosti</translation> <translation id="1570871743947603115">Prepnúť Bluetooth. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">Získajte prístup k všetkej svojej aktivite v tejto relácii</translation> +<translation id="1611993646327628135">Zapnuté</translation> <translation id="1632985212731562677">Ovládanie prepínačmi je možné deaktivovať v sekcii Nastavenia > Dostupnosť.</translation> <translation id="1654477262762802994">Spustiť hlasový dopyt</translation> <translation id="1667964833127753507">Režim neutrálnych farieb nepoužíva farby získané z tapety. Nahradí ich skupinou svetlých a tmavých neutrálnych odtieňov.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Prepnúť sieťové pripojenie. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">Posunúť doprava</translation> <translation id="1782199038061388045">preklad</translation> +<translation id="1787955149152357925">Vypnuté</translation> <translation id="181103072419391116">Sila signálu <ph name="SIGNAL_STRENGTH" />, ovládané správcom</translation> <translation id="1812997170047690955">Čo je na obrazovke?</translation> <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">Rozbaliť ponuku</translation> <translation id="3087734570205094154">Spodok</translation> +<translation id="3090989381251959936">Prepnúť funkciu <ph name="FEATURE_NAME" />. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">Presunúť kurzor</translation> <translation id="3098580329624789136">Získajte <ph name="INTENT" /> pre dopyt <ph name="QUERY" /></translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">zariadenia USB-C (port vpravo vpredu)</translation> <translation id="3386978599540877378">lupa na celú obrazovku</translation> <translation id="3400357268283240774">Ďalšie nastavenia</translation> +<translation id="3410336247007142655">Zobraziť nastavenia tmavého motívu</translation> <translation id="3413817803639110246">Zatiaľ nie je čo zobraziť</translation> <translation id="3428447136709161042">Odpojiť od siete <ph name="NETWORK_NAME" /></translation> <translation id="3430396595145920809">Vrátite sa potiahnutím sprava</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">Pripája sa...</translation> <translation id="4379531060876907730">Toto sú vaše nástroje pre dotykové pero</translation> <translation id="4389184120735010762">Stlačili ste klávesovú skratku ukotvenej lupy. Chcete ju zapnúť?</translation> +<translation id="4412944820643904175">Funkcia <ph name="FEATURE_NAME" /> je vypnutá.</translation> <translation id="4421231901400348175">Ovládanie obrazovky sa prostredníctvom Vzdialenej pomoci zdieľa s používateľom <ph name="HELPER_NAME" />.</translation> <translation id="4430019312045809116">Hlasitosť</translation> <translation id="4450893287417543264">Nabudúce nezobrazovať</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">Tlačidlo počúvania vybraného textu</translation> <translation id="4577274620589681794">Čas vypršal · <ph name="LABEL" /></translation> <translation id="4585337515783392668">Zastaviť prenos do neznámeho zariadenia</translation> +<translation id="4596144739579517758">Tmavý motív je vypnutý</translation> <translation id="4623167406982293031">Overiť účet</translation> <translation id="4628757576491864469">Zariadenia</translation> <translation id="4659419629803378708">Funkcia ChromeVox je povolená</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">Dostupné zariadenia na prenos</translation> <translation id="5170568018924773124">Zobraziť v priečinku</translation> <translation id="5207949376430453814">Zvýrazniť textový kurzor</translation> +<translation id="5208059991603368177">Zapnutý</translation> <translation id="5222676887888702881">Odhlásiť sa</translation> <translation id="523505283826916779">Nastavenia zjednodušenia prístupu</translation> <translation id="5260676007519551770">4. plocha</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">Nastavenia Bluetooth</translation> <translation id="5314219114274263156">Záznam obrazovky bol nahraný</translation> <translation id="5331975486040154427">Zariadenie USB-C (port vľavo vzadu)</translation> +<translation id="5352250171825660495">Tmavý motív je zapnutý</translation> <translation id="5379115545237091094">Príliš veľa pokusov</translation> <translation id="5397578532367286026">Aktivitu a históriu tohto používateľa môže skontrolovať správca (<ph name="MANAGER_EMAIL" />) na adrese chrome.com.</translation> <translation id="5400461572260843123">Rýchle nastavenia, do centra upozornení prejdete stlačením klávesa vyhľadávania + šípky doľava</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">Obrazovka ochrany súkromia</translation> <translation id="5777841717266010279">Chcete ukončiť zdieľanie obrazovky?</translation> <translation id="5790085346892983794">Úspešné</translation> +<translation id="579415080077680903">Vypnutie zvuku</translation> <translation id="5820394555380036790">Chromium OS</translation> <translation id="5837036133683224804">Zastaviť prenos obsahu <ph name="ROUTE_TITLE" /> do zariadenia <ph name="RECEIVER_NAME" /></translation> <translation id="5860033963881614850">Vypnuté</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">Zapnuté</translation> <translation id="5920710855273935292">Mikrofón je vypnutý.</translation> +<translation id="5946788582095584774">Funkcia <ph name="FEATURE_NAME" /> je zapnutá.</translation> <translation id="5947494881799873997">Vrátiť</translation> <translation id="595202126637698455">Sledovanie výkonnosti je povolené</translation> <translation id="5957083217255311415">Mobilné dáta sú vypnuté.</translation> @@ -468,6 +479,7 @@ <translation id="615957422585914272">Zobraziť klávesnicu na obrazovke</translation> <translation id="6164005077879661055">Všetky súbory a miestne údaje spojené s týmto kontrolovaným používateľom budú po jeho odstránení natrvalo odstránené. Správca bude môcť naďalej zobraziť navštívené webové stránky a nastavenia tohto používateľa na adrese <ph name="MANAGEMENT_URL" />.</translation> <translation id="6165508094623778733">Ďalšie informácie</translation> +<translation id="6192859646269780503">Lokalizácia telefónu</translation> <translation id="622484624075952240">Dole</translation> <translation id="6236290670123303279">Spravovať nastavenia</translation> <translation id="6237231532760393653">1X</translation> @@ -539,6 +551,7 @@ <translation id="6981982820502123353">Dostupnosť</translation> <translation id="698231206551913481">Všetky súbory a miestne údaje priradené k tomuto používateľovi budú po jeho odstránení natrvalo vymazané.</translation> <translation id="7007983414944123363">Váš kód PIN alebo heslo sa nepodarilo overiť. Skúste to znova.</translation> +<translation id="7013005189539051442">Zapnutie hotspotu</translation> <translation id="7015766095477679451">Vráťte sa späť o <ph name="COME_BACK_TIME" />.</translation> <translation id="7025533177575372252">Pripojte zariadenie <ph name="DEVICE_NAME" /> k svojmu telefónu</translation> <translation id="7026338066939101231">Zníženie</translation> @@ -611,6 +624,7 @@ <translation id="7842569679327885685">Upozornenie: Experimentálna funkcia</translation> <translation id="7846634333498149051">Klávesnica</translation> <translation id="7868900307798234037">Odomyká sa pomocou odtlačku prsta</translation> +<translation id="7872786842639831132">Vypnuté</translation> <translation id="7886169021410746335">Upravte nastavenia ochrany súkromia</translation> <translation id="7886277072580235377">Vaša internetová relácia sa vymaže, keď sa odhlásite. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Odoslať správu</translation> @@ -715,6 +729,7 @@ <translation id="8853703225951107899">Váš kód PIN alebo heslo sa stále nepodarilo overiť. Poznámka: Ak ste nedávno zmenili svoje heslo, použite predchádzajúce. Nové heslo bude uplatnené až po odhlásení.</translation> <translation id="885387440427703469">Snímanie obrazovky je zakázané</translation> <translation id="8870509716567206129">Aplikácia nepodporuje rozdelenú obrazovku.</translation> +<translation id="8871580645200179206">Prepnúť tmavý motív. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">Nepripojené</translation> <translation id="8877788021141246043">Nastaviť pripomenutie</translation> <translation id="8878886163241303700">Rozšírenie obrazovky</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb index 34f6660..04a9cb4 100644 --- a/ash/strings/ash_strings_sl.xtb +++ b/ash/strings/ash_strings_sl.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Strni meni</translation> <translation id="1383876407941801731">Išči</translation> <translation id="1391102559483454063">Vklopljeno</translation> +<translation id="1407069428457324124">Temna tema</translation> <translation id="1419738280318246476">Odklenite napravo zaradi izvedbe dejanja v obvestilu</translation> <translation id="1420408895951708260">Preklop Nočne svetlobe. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">Posnetek zaslona je bil ustvarjen in shranjen v odložišču</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Kliknite za več možnosti</translation> <translation id="1570871743947603115">Preklop Bluetootha. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">dostop do vse dejavnosti v seji;</translation> +<translation id="1611993646327628135">Vklopljeno</translation> <translation id="1632985212731562677">Stikalni dostop lahko onemogočite v »Nastavitve > Dostopnost«.</translation> <translation id="1654477262762802994">Začetek glasovne poizvedbe</translation> <translation id="1667964833127753507">Nevtralni barvni način ne uporablja barv, pridobljenih iz zaslonskega ozadja, temveč jih nadomesti s kompletom nevtralnih svetlih ali temnih odtenkov.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Preklop omrežne povezave. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">Pomik desno</translation> <translation id="1782199038061388045">prevod</translation> +<translation id="1787955149152357925">Izklopljeno</translation> <translation id="181103072419391116">Moč signala je <ph name="SIGNAL_STRENGTH" />, upravlja ga vaš skrbnik</translation> <translation id="1812997170047690955">Kaj je na zaslonu?</translation> <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">Razširi meni</translation> <translation id="3087734570205094154">Na dno</translation> +<translation id="3090989381251959936">Preklop funkcije <ph name="FEATURE_NAME" />. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">Premik kazalca</translation> <translation id="3098580329624789136">Pridobivanje namena <ph name="INTENT" /> za »<ph name="QUERY" />«</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">Naprava USB-C (vrata desno spredaj)</translation> <translation id="3386978599540877378">celozaslonska lupa</translation> <translation id="3400357268283240774">Dodatne nastavitve</translation> +<translation id="3410336247007142655">Prikaz nastavitev temne teme</translation> <translation id="3413817803639110246">Zaenkrat ni še ničesar</translation> <translation id="3428447136709161042">Prekinitev povezave z omrežjem <ph name="NETWORK_NAME" /></translation> <translation id="3430396595145920809">Povlecite z desne, če se želite vrniti</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">Povezovanje …</translation> <translation id="4379531060876907730">To so vaša orodja pisala</translation> <translation id="4389184120735010762">Pritisnili ste bližnjično tipko za zasidrano lupo. Ali jo želite vklopiti?</translation> +<translation id="4412944820643904175">Funkcija <ph name="FEATURE_NAME" /> je izklopljena.</translation> <translation id="4421231901400348175">Deljenje nadzora nad zaslonom z osebo <ph name="HELPER_NAME" /> prek pomoči na daljavo.</translation> <translation id="4430019312045809116">Glasnost</translation> <translation id="4450893287417543264">Tega ne prikaži več</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">Gumb za »Izberite in poslušajte«</translation> <translation id="4577274620589681794">Čas je potekel · <ph name="LABEL" /></translation> <translation id="4585337515783392668">Ustavi predvajanje v neznanem sprejemniku</translation> +<translation id="4596144739579517758">Temna tema je izklopljena</translation> <translation id="4623167406982293031">Preveri račun</translation> <translation id="4628757576491864469">Naprave</translation> <translation id="4659419629803378708">Omogočen je ChromeVox</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">Naprave za predvajanje so na voljo</translation> <translation id="5170568018924773124">Prikaži v mapi</translation> <translation id="5207949376430453814">Označitev kazalke v besedilu</translation> +<translation id="5208059991603368177">Vklopljeno</translation> <translation id="5222676887888702881">Odjava</translation> <translation id="523505283826916779">Nastavitve funkcij za ljudi s posebnimi potrebami</translation> <translation id="5260676007519551770">Namizje 4</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">Nastavitve za Bluetooth</translation> <translation id="5314219114274263156">Videoposnetek zaslona je bil ustvarjen</translation> <translation id="5331975486040154427">Naprava USB-C (vrata levo zadaj)</translation> +<translation id="5352250171825660495">Temna tema je vklopljena</translation> <translation id="5379115545237091094">Preveč poskusov</translation> <translation id="5397578532367286026">Upravitelj (<ph name="MANAGER_EMAIL" />) lahko na chrome.com pregleduje uporabo in zgodovino tega uporabnika.</translation> <translation id="5400461572260843123">Hitre nastavitve, pritisnite tipko za iskanje in puščico levo, če želite dostopati do središča za obvestila.</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">Zaslon za zasebnost</translation> <translation id="5777841717266010279">Želite ustaviti skupno rabo zaslona?</translation> <translation id="5790085346892983794">Uspešno</translation> +<translation id="579415080077680903">Tišina</translation> <translation id="5820394555380036790">Chromium OS</translation> <translation id="5837036133683224804">Ustavi zavihek <ph name="ROUTE_TITLE" /> v sprejemniku <ph name="RECEIVER_NAME" /></translation> <translation id="5860033963881614850">Izklopljeno</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">Vklopljeno</translation> <translation id="5920710855273935292">Zvok mikrofona je izklopljen.</translation> +<translation id="5946788582095584774">Funkcija <ph name="FEATURE_NAME" /> je vklopljena.</translation> <translation id="5947494881799873997">Razveljavi</translation> <translation id="595202126637698455">Sledenje učinkovitosti delovanja je omogočeno</translation> <translation id="5957083217255311415">Prenos podatkov v mobilnem omrežju je izklopljen.</translation> @@ -468,6 +479,7 @@ <translation id="615957422585914272">Pokaži zaslonsko tipkovnico</translation> <translation id="6164005077879661055">Vse datoteke in lokalni podatki, povezani z zaščitenim uporabnikom, bodo trajno izbrisani, ko ga odstranite. Obiskana spletna mesta in nastavitve tega uporabnika bodo morda še vedno vidna upravitelju na <ph name="MANAGEMENT_URL" />.</translation> <translation id="6165508094623778733">Več o tem</translation> +<translation id="6192859646269780503">Iskanje telefona</translation> <translation id="622484624075952240">Dol</translation> <translation id="6236290670123303279">Upravljanje nastavitev</translation> <translation id="6237231532760393653">1x</translation> @@ -539,6 +551,7 @@ <translation id="6981982820502123353">Dostopnost</translation> <translation id="698231206551913481">Vse datoteke in lokalni podatki, povezani s tem uporabnikom, bodo trajno izbrisani, ko odstranite uporabnika.</translation> <translation id="7007983414944123363">Vaše kode PIN ali gesla ni bilo mogoče preveriti. Poskusite znova.</translation> +<translation id="7013005189539051442">Omogočanje dostopne točke</translation> <translation id="7015766095477679451">Vrnite se ob <ph name="COME_BACK_TIME" />.</translation> <translation id="7025533177575372252">Povežite napravo <ph name="DEVICE_NAME" /> s telefonom</translation> <translation id="7026338066939101231">Pomanjšava</translation> @@ -611,6 +624,7 @@ <translation id="7842569679327885685">Opozorilo: poskusna funkcija</translation> <translation id="7846634333498149051">Tipkovnica</translation> <translation id="7868900307798234037">Odklepanje s prstnim odtisom</translation> +<translation id="7872786842639831132">Izklopljeno</translation> <translation id="7886169021410746335">Prilagodite nastavitve zasebnosti</translation> <translation id="7886277072580235377">Seja interneta bo počiščena, ko se odjavite. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Pošlji e-poštno sporočilo</translation> @@ -715,6 +729,7 @@ <translation id="8853703225951107899">Vaše kode PIN ali gesla še vedno ni bilo mogoče preveriti. Opomba: Če ste nedavno spremenili geslo, uporabite staro. Novo geslo bo začelo veljati, ko se odjavite.</translation> <translation id="885387440427703469">Zajemanje slike zaslona je onemogočeno</translation> <translation id="8870509716567206129">Aplikacija ne podpira načina razdeljenega zaslona.</translation> +<translation id="8871580645200179206">Preklop temne teme. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">Ni povezano</translation> <translation id="8877788021141246043">Nastavi opomnik</translation> <translation id="8878886163241303700">Razširjanje zaslona</translation>
diff --git a/ash/strings/ash_strings_sr-Latn.xtb b/ash/strings/ash_strings_sr-Latn.xtb index 05b67d87..990b8a7 100644 --- a/ash/strings/ash_strings_sr-Latn.xtb +++ b/ash/strings/ash_strings_sr-Latn.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Skupi meni</translation> <translation id="1383876407941801731">Pretraži</translation> <translation id="1391102559483454063">Uključeno</translation> +<translation id="1407069428457324124">Tamna tema</translation> <translation id="1419738280318246476">Otključajte uređaj da biste dobili obaveštenje</translation> <translation id="1420408895951708260">Uključite ili isključite noćno svetlo. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">Snimak ekrana je napravljen i sačuvan u privremenoj memoriji</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Kliknite za više opcija</translation> <translation id="1570871743947603115">Uključite/isključite Bluetooth. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">Pristupite svim aktivnostima u ovoj sesiji</translation> +<translation id="1611993646327628135">Uključeno</translation> <translation id="1632985212731562677">Pristup pomoću prekidača može da se onemogući u odeljku Podešavanja > Pristupačnost.</translation> <translation id="1654477262762802994">Započnite glasovnu pretragu</translation> <translation id="1667964833127753507">Režim neutralnih boja ne koristi boje iz pozadina i zamenjuje ih skupom neutralnih svetlih i tamnih nijansi.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Uključite/isključite mrežnu vezu. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">Pomeri nadesno</translation> <translation id="1782199038061388045">prevod</translation> +<translation id="1787955149152357925">Isključeno</translation> <translation id="181103072419391116">Jačina signala <ph name="SIGNAL_STRENGTH" />, upravlja administrator</translation> <translation id="1812997170047690955">Šta je na ekranu?</translation> <translation id="1823873187264960516">Eternet: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">Proširi meni</translation> <translation id="3087734570205094154">Dno</translation> +<translation id="3090989381251959936">Uključite/isključite funkciju <ph name="FEATURE_NAME" />. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">Pomerite kursor</translation> <translation id="3098580329624789136">Potražite <ph name="INTENT" /> za „<ph name="QUERY" />“</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">Uređaj sa USB priključkom tipa C (desni prednji port)</translation> <translation id="3386978599540877378">lupa preko celog ekrana</translation> <translation id="3400357268283240774">Dodatna podešavanja</translation> +<translation id="3410336247007142655">Prikažite podešavanja tamne teme</translation> <translation id="3413817803639110246">Još uvek nema šta da se vidi</translation> <translation id="3428447136709161042">Prekinite vezu sa mrežom <ph name="NETWORK_NAME" /></translation> <translation id="3430396595145920809">Prevucite sa desne strane da biste se vratili</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">Povezuje se...</translation> <translation id="4379531060876907730">Ovo su alatke za pisaljku</translation> <translation id="4389184120735010762">Pritisnuli ste tastersku prečicu za montiranu lupu ekrana. Želite li da je uključite?</translation> +<translation id="4412944820643904175">Funkcija <ph name="FEATURE_NAME" /> je isključena.</translation> <translation id="4421231901400348175">Delite kontrolu nad ekranom sa osobom <ph name="HELPER_NAME" /> preko Daljinske pomoći.</translation> <translation id="4430019312045809116">Jačina zvuka</translation> <translation id="4450893287417543264">Ne prikazuj ponovo</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">Dugme Izaberite za govor</translation> <translation id="4577274620589681794">Vreme je isteklo · <ph name="LABEL" /></translation> <translation id="4585337515783392668">Zaustavi prebacivanje na nepoznati prijemnik</translation> +<translation id="4596144739579517758">Tamna tema je isključena</translation> <translation id="4623167406982293031">Verifikujte nalog</translation> <translation id="4628757576491864469">Uređaji</translation> <translation id="4659419629803378708">ChromeVox je omogućen</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">Dostupni su uređaji za prebacivanje</translation> <translation id="5170568018924773124">Prikaži u direktorijumu</translation> <translation id="5207949376430453814">Istakni kursor za tekst</translation> +<translation id="5208059991603368177">Uključeno</translation> <translation id="5222676887888702881">Odjavi me</translation> <translation id="523505283826916779">Podešavanja pristupačnosti</translation> <translation id="5260676007519551770">Radna površina 4</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">Podešavanja Bluetooth-a</translation> <translation id="5314219114274263156">Ekran je snimljen</translation> <translation id="5331975486040154427">Uređaj sa USB priključkom tipa C (levi zadnji port)</translation> +<translation id="5352250171825660495">Tamna tema je uključena</translation> <translation id="5379115545237091094">Previše pokušaja</translation> <translation id="5397578532367286026">Menadžer (<ph name="MANAGER_EMAIL" />) može da pregleda korišćenje i istoriju ovog korisnika na chrome.com.</translation> <translation id="5400461572260843123">Brza podešavanja, pritisnite taster za pretragu i strelicu ulevo da biste pristupili centru za obaveštenja.</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">Ekran za privatnost</translation> <translation id="5777841717266010279">Želite li da prekinete deljenje ekrana?</translation> <translation id="5790085346892983794">Uspešno</translation> +<translation id="579415080077680903">Tišina</translation> <translation id="5820394555380036790">Chromium OS</translation> <translation id="5837036133683224804">Zaustavi <ph name="ROUTE_TITLE" /> na uređaju <ph name="RECEIVER_NAME" /></translation> <translation id="5860033963881614850">Isključeno</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">Uključeno</translation> <translation id="5920710855273935292">Mikrofon je isključen.</translation> +<translation id="5946788582095584774">Funkcija <ph name="FEATURE_NAME" /> je uključena.</translation> <translation id="5947494881799873997">Vrati</translation> <translation id="595202126637698455">Praćenje učinka je omogućeno</translation> <translation id="5957083217255311415">Mobilni podaci su isključeni.</translation> @@ -468,6 +479,7 @@ <translation id="615957422585914272">Prikaži tastaturu na ekranu</translation> <translation id="6164005077879661055">Sve datoteke i lokalni podaci povezani sa korisnikom pod nadzorom će biti trajno izbrisani kada uklonite ovog korisnika pod nadzorom. Menadžer će možda i dalje moći da vidi posećene veb-sajtove i podešavanja za ovog korisnika pod nadzorom na <ph name="MANAGEMENT_URL" />.</translation> <translation id="6165508094623778733">Saznajte više</translation> +<translation id="6192859646269780503">Pronađi telefon</translation> <translation id="622484624075952240">Nadole</translation> <translation id="6236290670123303279">Upravljajte podešavanjima</translation> <translation id="6237231532760393653">1X</translation> @@ -539,6 +551,7 @@ <translation id="6981982820502123353">Pristupačnost</translation> <translation id="698231206551913481">Sve datoteke i lokalni podaci povezani sa ovim korisnikom će biti trajno izbrisani kada uklonite ovog korisnika.</translation> <translation id="7007983414944123363">Verifikacija PIN-a ili lozinke nije uspela. Probajte ponovo.</translation> +<translation id="7013005189539051442">Omogući hotspot</translation> <translation id="7015766095477679451">Vratite se u <ph name="COME_BACK_TIME" />.</translation> <translation id="7025533177575372252">Povežite <ph name="DEVICE_NAME" /> sa telefonom</translation> <translation id="7026338066939101231">Smanjenje</translation> @@ -611,6 +624,7 @@ <translation id="7842569679327885685">Upozorenje: Eksperimentalna funkcija</translation> <translation id="7846634333498149051">Tastatura</translation> <translation id="7868900307798234037">Otključavanje pomoću otiska prsta</translation> +<translation id="7872786842639831132">Isključeno</translation> <translation id="7886169021410746335">Prilagodite podešavanja privatnosti</translation> <translation id="7886277072580235377">Internet sesija će biti obrisana kada se odjavite. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Pošalji imejl</translation> @@ -715,6 +729,7 @@ <translation id="8853703225951107899">Verifikacija PIN-a ili lozinke još uvek nije uspela. Napomena: Ako ste nedavno promenili lozinku, koristite staru. Nova lozinka će biti primenjena kada se odjavite.</translation> <translation id="885387440427703469">Snimanje ekrana je onemogućeno</translation> <translation id="8870509716567206129">Aplikacija ne podržava podeljeni ekran.</translation> +<translation id="8871580645200179206">Uključite/isključite tamnu temu. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">Nije povezano</translation> <translation id="8877788021141246043">Podesi podsetnik</translation> <translation id="8878886163241303700">Prošireni ekran</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb index 5a4fb04..2373d26 100644 --- a/ash/strings/ash_strings_sr.xtb +++ b/ash/strings/ash_strings_sr.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Скупи мени</translation> <translation id="1383876407941801731">Претражи</translation> <translation id="1391102559483454063">Укључено</translation> +<translation id="1407069428457324124">Тамна тема</translation> <translation id="1419738280318246476">Откључајте уређај да бисте добили обавештење</translation> <translation id="1420408895951708260">Укључите или искључите ноћно светло. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">Снимак екрана је направљен и сачуван у привременој меморији</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Кликните за више опција</translation> <translation id="1570871743947603115">Укључите/искључите Bluetooth. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">Приступите свим активностима у овој сесији</translation> +<translation id="1611993646327628135">Укључено</translation> <translation id="1632985212731562677">Приступ помоћу прекидача може да се онемогући у одељку Подешавања > Приступачност.</translation> <translation id="1654477262762802994">Започните гласовну претрагу</translation> <translation id="1667964833127753507">Режим неутралних боја не користи боје из позадина и замењује их скупом неутралних светлих и тамних нијанси.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Укључите/искључите мрежну везу. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">Помери надесно</translation> <translation id="1782199038061388045">превод</translation> +<translation id="1787955149152357925">Искључено</translation> <translation id="181103072419391116">Јачина сигнала <ph name="SIGNAL_STRENGTH" />, управља администратор</translation> <translation id="1812997170047690955">Шта је на екрану?</translation> <translation id="1823873187264960516">Етернет: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">Прошири мени</translation> <translation id="3087734570205094154">Дно</translation> +<translation id="3090989381251959936">Укључите/искључите функцију <ph name="FEATURE_NAME" />. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">Померите курсор</translation> <translation id="3098580329624789136">Потражите <ph name="INTENT" /> за „<ph name="QUERY" />“</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">Уређај са USB прикључком типа C (десни предњи порт)</translation> <translation id="3386978599540877378">лупа преко целог екрана</translation> <translation id="3400357268283240774">Додатна подешавања</translation> +<translation id="3410336247007142655">Прикажите подешавања тамне теме</translation> <translation id="3413817803639110246">Још увек нема шта да се види</translation> <translation id="3428447136709161042">Прекините везу са мрежом <ph name="NETWORK_NAME" /></translation> <translation id="3430396595145920809">Превуците са десне стране да бисте се вратили</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">Повезује се...</translation> <translation id="4379531060876907730">Ово су алатке за писаљку</translation> <translation id="4389184120735010762">Притиснули сте тастерску пречицу за монтирану лупу екрана. Желите ли да је укључите?</translation> +<translation id="4412944820643904175">Функција <ph name="FEATURE_NAME" /> је искључена.</translation> <translation id="4421231901400348175">Делите контролу над екраном са особом <ph name="HELPER_NAME" /> преко Даљинске помоћи.</translation> <translation id="4430019312045809116">Јачина звука</translation> <translation id="4450893287417543264">Не приказуј поново</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">Дугме Изаберите за говор</translation> <translation id="4577274620589681794">Време је истекло · <ph name="LABEL" /></translation> <translation id="4585337515783392668">Заустави пребацивање на непознати пријемник</translation> +<translation id="4596144739579517758">Тамна тема је искључена</translation> <translation id="4623167406982293031">Верификујте налог</translation> <translation id="4628757576491864469">Уређаји</translation> <translation id="4659419629803378708">ChromeVox је омогућен</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">Доступни су уређаји за пребацивање</translation> <translation id="5170568018924773124">Прикажи у директоријуму</translation> <translation id="5207949376430453814">Истакни курсор за текст</translation> +<translation id="5208059991603368177">Укључено</translation> <translation id="5222676887888702881">Одјави ме</translation> <translation id="523505283826916779">Подешавања приступачности</translation> <translation id="5260676007519551770">Радна површина 4</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">Подешавања Bluetooth-а</translation> <translation id="5314219114274263156">Екран је снимљен</translation> <translation id="5331975486040154427">Уређај са USB прикључком типа C (леви задњи порт)</translation> +<translation id="5352250171825660495">Тамна тема је укључена</translation> <translation id="5379115545237091094">Превише покушаја</translation> <translation id="5397578532367286026">Менаџер (<ph name="MANAGER_EMAIL" />) може да прегледа коришћење и историју овог корисника на chrome.com.</translation> <translation id="5400461572260843123">Брза подешавања, притисните тастер за претрагу и стрелицу улево да бисте приступили центру за обавештења.</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">Екран за приватност</translation> <translation id="5777841717266010279">Желите ли да прекинете дељење екрана?</translation> <translation id="5790085346892983794">Успешно</translation> +<translation id="579415080077680903">Тишина</translation> <translation id="5820394555380036790">Chromium ОС</translation> <translation id="5837036133683224804">Заустави <ph name="ROUTE_TITLE" /> на уређају <ph name="RECEIVER_NAME" /></translation> <translation id="5860033963881614850">Искључено</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">Укључено</translation> <translation id="5920710855273935292">Микрофон је искључен.</translation> +<translation id="5946788582095584774">Функција <ph name="FEATURE_NAME" /> је укључена.</translation> <translation id="5947494881799873997">Врати</translation> <translation id="595202126637698455">Праћење учинка је омогућено</translation> <translation id="5957083217255311415">Мобилни подаци су искључени.</translation> @@ -468,6 +479,7 @@ <translation id="615957422585914272">Прикажи тастатуру на екрану</translation> <translation id="6164005077879661055">Све датотеке и локални подаци повезани са корисником под надзором ће бити трајно избрисани када уклоните овог корисника под надзором. Менаџер ће можда и даље моћи да види посећене веб-сајтове и подешавања за овог корисника под надзором на <ph name="MANAGEMENT_URL" />.</translation> <translation id="6165508094623778733">Сазнајте више</translation> +<translation id="6192859646269780503">Пронађи телефон</translation> <translation id="622484624075952240">Надоле</translation> <translation id="6236290670123303279">Управљајте подешавањима</translation> <translation id="6237231532760393653">1X</translation> @@ -539,6 +551,7 @@ <translation id="6981982820502123353">Приступачност</translation> <translation id="698231206551913481">Све датотеке и локални подаци повезани са овим корисником ће бити трајно избрисани када уклоните овог корисника.</translation> <translation id="7007983414944123363">Верификација PIN-а или лозинке није успела. Пробајте поново.</translation> +<translation id="7013005189539051442">Омогући хотспот</translation> <translation id="7015766095477679451">Вратите се у <ph name="COME_BACK_TIME" />.</translation> <translation id="7025533177575372252">Повежите <ph name="DEVICE_NAME" /> са телефоном</translation> <translation id="7026338066939101231">Смањење</translation> @@ -611,6 +624,7 @@ <translation id="7842569679327885685">Упозорење: Експериментална функција</translation> <translation id="7846634333498149051">Тастатура</translation> <translation id="7868900307798234037">Откључавање помоћу отиска прста</translation> +<translation id="7872786842639831132">Искључено</translation> <translation id="7886169021410746335">Прилагодите подешавања приватности</translation> <translation id="7886277072580235377">Интернет сесија ће бити обрисана када се одјавите. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Пошаљи имејл</translation> @@ -715,6 +729,7 @@ <translation id="8853703225951107899">Верификација PIN-а или лозинке још увек није успела. Напомена: Ако сте недавно променили лозинку, користите стару. Нова лозинка ће бити примењена када се одјавите.</translation> <translation id="885387440427703469">Снимање екрана је онемогућено</translation> <translation id="8870509716567206129">Апликација не подржава подељени екран.</translation> +<translation id="8871580645200179206">Укључите/искључите тамну тему. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">Није повезано</translation> <translation id="8877788021141246043">Подеси подсетник</translation> <translation id="8878886163241303700">Проширени екран</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb index f1089c3..e7147ed 100644 --- a/ash/strings/ash_strings_sv.xtb +++ b/ash/strings/ash_strings_sv.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Komprimera menyn</translation> <translation id="1383876407941801731">Sök</translation> <translation id="1391102559483454063">På</translation> +<translation id="1407069428457324124">Mörkt tema</translation> <translation id="1419738280318246476">Lås upp enheten så att aviseringen kan göras</translation> <translation id="1420408895951708260">Aktivera och inaktivera nattljus. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">En skärmdump har tagits och sparats i Urklipp</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Klicka här för fler alternativ</translation> <translation id="1570871743947603115">Aktivera och inaktivera Bluetooth. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">Få tillgång till all aktivitet i sessionen</translation> +<translation id="1611993646327628135">På</translation> <translation id="1632985212731562677">Brytarstyrning kan inaktiveras under Inställningar > Tillgänglighet</translation> <translation id="1654477262762802994">Säg en sökfråga</translation> <translation id="1667964833127753507">I det neutrala färgläget ersätts färger från bakgrunden med en uppsättning ljusa eller mörka nyanser i neutrala toner.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Aktivera och inaktivera nätverksanslutning. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">Rulla åt höger</translation> <translation id="1782199038061388045">Översätt</translation> +<translation id="1787955149152357925">Av</translation> <translation id="181103072419391116">Signalstyrka <ph name="SIGNAL_STRENGTH" />, hanteras av administratören</translation> <translation id="1812997170047690955">Vad visas på skärmen?</translation> <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">skift</translation> <translation id="3081696990447829002">Utöka menyn</translation> <translation id="3087734570205094154">Nederst</translation> +<translation id="3090989381251959936">Aktivera och inaktivera <ph name="FEATURE_NAME" />. <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">Flytta muspekaren</translation> <translation id="3098580329624789136"><ph name="INTENT" /> <ph name="QUERY" /></translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">USB-C-enhet (främre porten på högra sidan)</translation> <translation id="3386978599540877378">helskärmsförstoraren</translation> <translation id="3400357268283240774">Ytterligare inställningar</translation> +<translation id="3410336247007142655">Visa inställningarna för mörkt tema</translation> <translation id="3413817803639110246">Det finns inget att se här ännu</translation> <translation id="3428447136709161042">Koppla från <ph name="NETWORK_NAME" /></translation> <translation id="3430396595145920809">Återgå genom att svepa från höger</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">Ansluter ...</translation> <translation id="4379531060876907730">Här är dina verktyg för e-penna</translation> <translation id="4389184120735010762">Du tryckte på kortkommandot för dockad skärmförstoring. Vill du aktivera funktionen?</translation> +<translation id="4412944820643904175"><ph name="FEATURE_NAME" /> är av.</translation> <translation id="4421231901400348175">Dela kontroll över skärmen med <ph name="HELPER_NAME" /> via Fjärrhjälp.</translation> <translation id="4430019312045809116">Volym</translation> <translation id="4450893287417543264">Visa inte igen</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">Knappen Textuppläsning</translation> <translation id="4577274620589681794">Tiden är ute · <ph name="LABEL" /></translation> <translation id="4585337515783392668">Sluta casta till en okänd mottagare</translation> +<translation id="4596144739579517758">Mörkt tema är av</translation> <translation id="4623167406982293031">Verifiera konto</translation> <translation id="4628757576491864469">Enheter</translation> <translation id="4659419629803378708">ChromeVox har aktiverats</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">Överföringsenheter finns tillgängliga</translation> <translation id="5170568018924773124">Visa i mapp</translation> <translation id="5207949376430453814">Markera textmarkören</translation> +<translation id="5208059991603368177">På</translation> <translation id="5222676887888702881">Logga ut</translation> <translation id="523505283826916779">Inställningar för tillgänglighet</translation> <translation id="5260676007519551770">Skrivbord 4</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">Bluetooth-inställningar</translation> <translation id="5314219114274263156">En skärminspelning har tagits</translation> <translation id="5331975486040154427">USB-C-enhet (bakre porten på vänster sida)</translation> +<translation id="5352250171825660495">Mörkt tema är på</translation> <translation id="5379115545237091094">För många försök</translation> <translation id="5397578532367286026">Användning och historik för den här användaren kan granskas av den ansvarige (<ph name="MANAGER_EMAIL" />) på chrome.com.</translation> <translation id="5400461572260843123">Snabbinställningar, tryck på sök + vänster för att komma åt aviseringscentret.</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">Sekretesskärm</translation> <translation id="5777841717266010279">Vill du avbryta skärmdelningen?</translation> <translation id="5790085346892983794">Klart</translation> +<translation id="579415080077680903">Ljudlös</translation> <translation id="5820394555380036790">Chromium OS</translation> <translation id="5837036133683224804">Sluta casta <ph name="ROUTE_TITLE" /> till <ph name="RECEIVER_NAME" /></translation> <translation id="5860033963881614850">Av</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">På</translation> <translation id="5920710855273935292">Mikrofonen är av.</translation> +<translation id="5946788582095584774"><ph name="FEATURE_NAME" /> är på.</translation> <translation id="5947494881799873997">Återgå</translation> <translation id="595202126637698455">Resultatspårning aktiverat</translation> <translation id="5957083217255311415">Mobildata har inaktiverats.</translation> @@ -468,6 +479,7 @@ <translation id="615957422585914272">Visa skärmtangentbordet</translation> <translation id="6164005077879661055">Alla filer och lokala data som är kopplade till den hanterade användaren tas bort permanent när den hanterade användaren tas bort. Besökta webbplatser och inställningar för den hanterade användaren kan fortfarande vara synliga för den som hanterar användaren på <ph name="MANAGEMENT_URL" />.</translation> <translation id="6165508094623778733">Läs mer</translation> +<translation id="6192859646269780503">Hitta telefonen</translation> <translation id="622484624075952240">Ner</translation> <translation id="6236290670123303279">Hantera inställningar</translation> <translation id="6237231532760393653">1X</translation> @@ -539,6 +551,7 @@ <translation id="6981982820502123353">Tillgänglighet</translation> <translation id="698231206551913481">Alla filer inklusive lokal data som tillhör den här användaren tas bort permanent när användaren tas bort.</translation> <translation id="7007983414944123363">Det gick inte att verifiera pinkoden eller lösenordet. Försök igen.</translation> +<translation id="7013005189539051442">Aktivera surfzon</translation> <translation id="7015766095477679451">Prova igen klockan <ph name="COME_BACK_TIME" />.</translation> <translation id="7025533177575372252">Anslut <ph name="DEVICE_NAME" /> med mobilen</translation> <translation id="7026338066939101231">Minska</translation> @@ -611,6 +624,7 @@ <translation id="7842569679327885685">Varning: Experimentfunktion</translation> <translation id="7846634333498149051">Tangentbord</translation> <translation id="7868900307798234037">Låser upp med fingeravtryck</translation> +<translation id="7872786842639831132">Av</translation> <translation id="7886169021410746335">Ändra sekretessinställningarna</translation> <translation id="7886277072580235377">Internetsessionen rensas när du loggar ut. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Skicka e-post</translation> @@ -715,6 +729,7 @@ <translation id="8853703225951107899">Det gick fortfarande inte att verifiera pinkoden eller lösenordet. Obs! Om du nyligen har bytt lösenord ska du använda det gamla lösenordet. Det nya lösenordet börjar gälla när du loggar ut.</translation> <translation id="885387440427703469">Skärmbilder/skärminspelningar har inaktiverats</translation> <translation id="8870509716567206129">Appen har inte stöd för delad skärm.</translation> +<translation id="8871580645200179206">Aktivera och inaktivera mörkt tema. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">Inte ansluten</translation> <translation id="8877788021141246043">Ställ in en påminnelse</translation> <translation id="8878886163241303700">Utökad skärm</translation>
diff --git a/ash/strings/ash_strings_uk.xtb b/ash/strings/ash_strings_uk.xtb index 4d9bb89..00417f9 100644 --- a/ash/strings/ash_strings_uk.xtb +++ b/ash/strings/ash_strings_uk.xtb
@@ -48,6 +48,7 @@ <translation id="1351937230027495976">Згорнути меню</translation> <translation id="1383876407941801731">Пошук</translation> <translation id="1391102559483454063">Увімкнено</translation> +<translation id="1407069428457324124">Темна тема</translation> <translation id="1419738280318246476">Щоб виконати дію зі сповіщенням, розблокуйте пристрій</translation> <translation id="1420408895951708260">Увімкнути або вимкнути нічний екран. <ph name="STATE_TEXT" /></translation> <translation id="1420527829902822813">Знімок екрана зроблено й збережено в буфер обміну</translation> @@ -65,6 +66,7 @@ <translation id="1550523713251050646">Натисніть, щоб побачити більше опцій</translation> <translation id="1570871743947603115">Увімкнути/вимкнути Bluetooth. <ph name="STATE_TEXT" /></translation> <translation id="1589090746204042747">мати доступ до всіх ваших дій у цьому сеансі</translation> +<translation id="1611993646327628135">Увімкнено</translation> <translation id="1632985212731562677">Щоб вимкнути кнопковий доступ, відкрийте "Налаштування" > "Спеціальні можливості".</translation> <translation id="1654477262762802994">Ввести голосовий запит</translation> <translation id="1667964833127753507">У цьому режимі не використовуються кольори фонового малюнка, а підбираються нейтральні світлі або темні відтінки.</translation> @@ -79,6 +81,7 @@ <translation id="1761222317188459878">Увімкнути/вимкнути з’єднання з мережею. <ph name="STATE_TEXT" /></translation> <translation id="1771761307086386028">Прокрутити праворуч</translation> <translation id="1782199038061388045">переклад</translation> +<translation id="1787955149152357925">Вимкнено</translation> <translation id="181103072419391116">Рівень сигналу – <ph name="SIGNAL_STRENGTH" />. Мережею керує адміністратор</translation> <translation id="1812997170047690955">Що на моєму екрані?</translation> <translation id="1823873187264960516">Ethernet: <ph name="ADDRESS" /></translation> @@ -201,6 +204,7 @@ <translation id="3077734595579995578">shift</translation> <translation id="3081696990447829002">Розгорнути меню</translation> <translation id="3087734570205094154">Низ</translation> +<translation id="3090989381251959936">Перемкнути функцію "<ph name="FEATURE_NAME" />". <ph name="STATE_TEXT" /></translation> <translation id="309749186376891736">Курсор переміщення</translation> <translation id="3098580329624789136">Дізнайтеся <ph name="INTENT" /> запиту "<ph name="QUERY" />"</translation> <translation id="3105990244222795498"><ph name="DEVICE_NAME" /> (Bluetooth)</translation> @@ -233,6 +237,7 @@ <translation id="3371140690572404006">пристрій, під’єднаний до порту USB-C (праворуч на передній панелі)</translation> <translation id="3386978599540877378">лупу для повноекранного режиму</translation> <translation id="3400357268283240774">Додаткові налаштування</translation> +<translation id="3410336247007142655">Показати налаштування темної теми</translation> <translation id="3413817803639110246">Ще нічого немає</translation> <translation id="3428447136709161042">Відключитися від мережі "<ph name="NETWORK_NAME" />"</translation> <translation id="3430396595145920809">Щоб повернутися, проведіть пальцем від правого краю</translation> @@ -326,6 +331,7 @@ <translation id="4378551569595875038">Підключення…</translation> <translation id="4379531060876907730">Це ваші інструменти стилуса</translation> <translation id="4389184120735010762">Ви натиснули комбінацію клавіш для закріпленої лупи. Увімкнути?</translation> +<translation id="4412944820643904175">Функцію "<ph name="FEATURE_NAME" />" вимкнено.</translation> <translation id="4421231901400348175">Спільний доступ до екрана для користувача <ph name="HELPER_NAME" /> через віддалену допомогу.</translation> <translation id="4430019312045809116">Гучність</translation> <translation id="4450893287417543264">Більше не показувати</translation> @@ -345,6 +351,7 @@ <translation id="4570957409596482333">Кнопка "Читання з екрана"</translation> <translation id="4577274620589681794">Час минув <ph name="LABEL" /></translation> <translation id="4585337515783392668">Зупинити трансляцію на невідомий пристрій</translation> +<translation id="4596144739579517758">Темну тему вимкнено</translation> <translation id="4623167406982293031">Підтвердьте обліковий запис</translation> <translation id="4628757576491864469">Пристрої</translation> <translation id="4659419629803378708">ChromeVox увімкнено</translation> @@ -387,6 +394,7 @@ <translation id="5168181903108465623">Доступні пристрої для трансляції</translation> <translation id="5170568018924773124">Показати в папці</translation> <translation id="5207949376430453814">Підсвічувати місце введення тексту</translation> +<translation id="5208059991603368177">Увімкнено</translation> <translation id="5222676887888702881">Вийти</translation> <translation id="523505283826916779">Налаштування доступності</translation> <translation id="5260676007519551770">Робочий стіл 4</translation> @@ -398,6 +406,7 @@ <translation id="5313326810920013265">Налаштування Bluetooth</translation> <translation id="5314219114274263156">Запис екрана зроблено</translation> <translation id="5331975486040154427">Пристрій, під’єднаний до порту USB-C (ліворуч на задній панелі)</translation> +<translation id="5352250171825660495">Темну тему ввімкнено</translation> <translation id="5379115545237091094">Забагато спроб</translation> <translation id="5397578532367286026">Менеджер (<ph name="MANAGER_EMAIL" />) може переглядати дії й історію цього користувача на chrome.com.</translation> <translation id="5400461572260843123">Швидкі налаштування: натисніть клавішу пошуку + стрілку ліворуч, щоб перейти в центр сповіщень.</translation> @@ -434,6 +443,7 @@ <translation id="5769373120130404283">Маскування контенту</translation> <translation id="5777841717266010279">Скасувати спільний доступ до екрана?</translation> <translation id="5790085346892983794">Готово</translation> +<translation id="579415080077680903">Беззвучний режим</translation> <translation id="5820394555380036790">ОС Chromium</translation> <translation id="5837036133683224804">Зупинити трансляцію <ph name="ROUTE_TITLE" /> на пристрій "<ph name="RECEIVER_NAME" />"</translation> <translation id="5860033963881614850">Вимк.</translation> @@ -444,6 +454,7 @@ <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> <translation id="5916664084637901428">Увімкнено</translation> <translation id="5920710855273935292">Мікрофон вимкнено.</translation> +<translation id="5946788582095584774">Функцію "<ph name="FEATURE_NAME" />" увімкнено.</translation> <translation id="5947494881799873997">Повернути</translation> <translation id="595202126637698455">Відстеження ефективності ввімкнено</translation> <translation id="5957083217255311415">Мобільне передавання даних вимкнено.</translation> @@ -468,6 +479,7 @@ <translation id="615957422585914272">Показувати екранну клавіатуру</translation> <translation id="6164005077879661055">Усі файли та локальні дані, пов’язані з контрольованим користувачем, буде назавжди видалено, якщо вилучити цього контрольованого користувача. Менеджер усе одно може бачити веб-сайти, які відвідував цей контрольований користувач, і його налаштування на сторінці <ph name="MANAGEMENT_URL" />.</translation> <translation id="6165508094623778733">Докладніше</translation> +<translation id="6192859646269780503">Пошук телефона</translation> <translation id="622484624075952240">Донизу</translation> <translation id="6236290670123303279">Керувати налаштуваннями</translation> <translation id="6237231532760393653">1X</translation> @@ -539,6 +551,7 @@ <translation id="6981982820502123353">Доступність</translation> <translation id="698231206551913481">Якщо видалити цього користувача, усі файли та локальні дані, зв’язані з ним, буде видалено назавжди.</translation> <translation id="7007983414944123363">Не вдалося підтвердити PIN-код або пароль. Повторіть спробу.</translation> +<translation id="7013005189539051442">Увімкнути точку доступу</translation> <translation id="7015766095477679451">Поверніться о <ph name="COME_BACK_TIME" />.</translation> <translation id="7025533177575372252">Під’єднайте <ph name="DEVICE_NAME" /> до телефона</translation> <translation id="7026338066939101231">Понизити</translation> @@ -611,6 +624,7 @@ <translation id="7842569679327885685">Попередження. Експериментальна функція</translation> <translation id="7846634333498149051">Клавіатура</translation> <translation id="7868900307798234037">Розблокування відбитком</translation> +<translation id="7872786842639831132">Вимкнено</translation> <translation id="7886169021410746335">змінювати налаштування конфіденційності.</translation> <translation id="7886277072580235377">Коли ви вийдете з облікового запису, дані інтернет-сеансу буде стерто. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Надішли електронний лист</translation> @@ -715,6 +729,7 @@ <translation id="8853703225951107899">PIN-код або пароль усе ще не вдається підтвердити. Примітка: якщо ви нещодавно змінювали пароль, введіть старий. Новий пароль буде застосовано, щойно ви вийдете з облікового запису.</translation> <translation id="885387440427703469">Функцію знімків екрана вимкнено</translation> <translation id="8870509716567206129">Додаток не підтримує розділення екрана.</translation> +<translation id="8871580645200179206">Перемкнути темну тему. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">Не під’єднано</translation> <translation id="8877788021141246043">Налаштуй нагадування</translation> <translation id="8878886163241303700">Розширення екрана</translation>
diff --git a/ash/wm/desks/desks_controller.cc b/ash/wm/desks/desks_controller.cc index 49cfd3f..f37a8c90 100644 --- a/ash/wm/desks/desks_controller.cc +++ b/ash/wm/desks/desks_controller.cc
@@ -27,7 +27,6 @@ #include "ash/wm/overview/overview_item.h" #include "ash/wm/splitview/split_view_controller.h" #include "ash/wm/splitview/split_view_utils.h" -#include "ash/wm/window_cycle_controller.h" #include "ash/wm/window_util.h" #include "base/auto_reset.h" #include "base/check_op.h" @@ -546,13 +545,6 @@ MaybeUpdateShelfItems(old_active->windows(), active_desk_->windows()); - // If in the middle of a window cycle gesture, reset the window cycle list - // contents so it contains the new active desk's windows. - if (features::IsAltTabLimitedToActiveDesk()) { - auto* window_cycle_controller = Shell::Get()->window_cycle_controller(); - window_cycle_controller->MaybeResetCycleList(); - } - for (auto& observer : observers_) observer.OnDeskActivationChanged(active_desk_, old_active); }
diff --git a/ash/wm/window_cycle_controller.cc b/ash/wm/window_cycle_controller.cc index dbb7b02..3f99cbc0 100644 --- a/ash/wm/window_cycle_controller.cc +++ b/ash/wm/window_cycle_controller.cc
@@ -30,8 +30,7 @@ // Returns the most recently active window from the |window_list| or nullptr // if the list is empty. -aura::Window* GetActiveWindow( - const WindowCycleController::WindowList& window_list) { +aura::Window* GetActiveWindow(const WindowCycleList::WindowList& window_list) { return window_list.empty() ? nullptr : window_list[0]; } @@ -96,8 +95,18 @@ // (http://crbug.com/895265). Shell::Get()->wallpaper_controller()->MaybeClosePreviewWallpaper(); - WindowCycleController::WindowList window_list = CreateWindowList(); - SaveCurrentActiveDeskAndWindow(window_list); + WindowCycleList::WindowList window_list = + Shell::Get()->mru_window_tracker()->BuildWindowForCycleWithPipList( + features::IsAltTabLimitedToActiveDesk() ? kActiveDesk : kAllDesks); + // Window cycle list windows will handle showing their transient related + // windows, so if a window in |window_list| has a transient root also in + // |window_list|, we can remove it as the transient root will handle showing + // the window. + window_util::RemoveTransientDescendants(&window_list); + + active_desk_container_id_before_cycle_ = + desks_util::GetActiveDeskContainerId(); + active_window_before_window_cycle_ = GetActiveWindow(window_list); window_cycle_list_ = std::make_unique<WindowCycleList>(window_list); event_filter_ = std::make_unique<WindowCycleEventFilter>(); @@ -115,17 +124,6 @@ StopCycling(); } -void WindowCycleController::MaybeResetCycleList() { - if (!IsCycling()) - return; - - WindowCycleController::WindowList window_list = CreateWindowList(); - SaveCurrentActiveDeskAndWindow(window_list); - - DCHECK(window_cycle_list_); - window_cycle_list_->ReplaceWindows(window_list); -} - void WindowCycleController::StepToWindow(aura::Window* window) { DCHECK(window_cycle_list_); window_cycle_list_->StepToWindow(window); @@ -138,25 +136,6 @@ ////////////////////////////////////////////////////////////////////////////// // WindowCycleController, private: -WindowCycleController::WindowList WindowCycleController::CreateWindowList() { - WindowCycleController::WindowList window_list = - Shell::Get()->mru_window_tracker()->BuildWindowForCycleWithPipList( - features::IsAltTabLimitedToActiveDesk() ? kActiveDesk : kAllDesks); - // Window cycle list windows will handle showing their transient related - // windows, so if a window in |window_list| has a transient root also in - // |window_list|, we can remove it as the transient root will handle showing - // the window. - window_util::RemoveTransientDescendants(&window_list); - return window_list; -} - -void WindowCycleController::SaveCurrentActiveDeskAndWindow( - const WindowCycleController::WindowList& window_list) { - active_desk_container_id_before_cycle_ = - desks_util::GetActiveDeskContainerId(); - active_window_before_window_cycle_ = GetActiveWindow(window_list); -} - void WindowCycleController::Step(Direction direction) { DCHECK(window_cycle_list_); window_cycle_list_->Step(direction);
diff --git a/ash/wm/window_cycle_controller.h b/ash/wm/window_cycle_controller.h index bdaca12..7512a36 100644 --- a/ash/wm/window_cycle_controller.h +++ b/ash/wm/window_cycle_controller.h
@@ -34,8 +34,6 @@ // order. class ASH_EXPORT WindowCycleController { public: - using WindowList = std::vector<aura::Window*>; - enum Direction { FORWARD, BACKWARD }; WindowCycleController(); @@ -62,10 +60,6 @@ void CompleteCycling(); void CancelCycling(); - // If the window cycle list is open, re-construct it. Do nothing if not - // cycling. - void MaybeResetCycleList(); - // Skip window cycle list directly to |window|. void StepToWindow(aura::Window* window); @@ -78,16 +72,6 @@ } private: - // Gets a list of windows from the currently open windows, removing windows - // with transient roots already in the list. The returned list of windows - // is used to populate the window cycle list. - WindowList CreateWindowList(); - - // Populates |active_desk_container_id_before_cycle_| and - // |active_window_before_window_cycle_| when the window cycle list is - // initialized. - void SaveCurrentActiveDeskAndWindow(const WindowList& window_list); - // Cycles to the next or previous window based on |direction|. void Step(Direction direction);
diff --git a/ash/wm/window_cycle_controller_unittest.cc b/ash/wm/window_cycle_controller_unittest.cc index f90e416..0a00ac73 100644 --- a/ash/wm/window_cycle_controller_unittest.cc +++ b/ash/wm/window_cycle_controller_unittest.cc
@@ -850,20 +850,6 @@ EXPECT_TRUE(base::Contains(cycle_windows, win1.get())); cycle_controller->CompleteCycling(); EXPECT_EQ(win0.get(), window_util::GetActiveWindow()); - - // Swap desks while cycling, contents should update. - cycle_controller->HandleCycleWindow(WindowCycleController::FORWARD); - cycle_windows = GetWindows(cycle_controller); - EXPECT_EQ(2u, cycle_windows.size()); - EXPECT_TRUE(base::Contains(cycle_windows, win0.get())); - EXPECT_TRUE(base::Contains(cycle_windows, win1.get())); - ActivateDesk(desk_2); - EXPECT_TRUE(cycle_controller->IsCycling()); - cycle_windows = GetWindows(cycle_controller); - EXPECT_EQ(1u, cycle_windows.size()); - EXPECT_TRUE(base::Contains(cycle_windows, win2.get())); - cycle_controller->CompleteCycling(); - EXPECT_EQ(win2.get(), window_util::GetActiveWindow()); } class InteractiveWindowCycleControllerTest : public WindowCycleControllerTest {
diff --git a/ash/wm/window_cycle_list.cc b/ash/wm/window_cycle_list.cc index dc6c6fb..222eee14 100644 --- a/ash/wm/window_cycle_list.cc +++ b/ash/wm/window_cycle_list.cc
@@ -296,24 +296,6 @@ WindowCycleView& operator=(const WindowCycleView&) = delete; ~WindowCycleView() override = default; - void UpdateWindows(const WindowCycleList::WindowList& windows) { - for (auto* window : windows) { - auto* view = mirror_container_->AddChildView( - std::make_unique<WindowCycleItemView>(window)); - window_view_map_[window] = view; - - no_previews_set_.insert(view); - } - - // Resize the widget. - aura::Window* root_window = Shell::GetRootWindowForNewWindows(); - gfx::Rect widget_rect = root_window->GetBoundsInScreen(); - widget_rect.ClampToCenteredSize(GetPreferredSize()); - GetWidget()->SetBounds(widget_rect); - - SetTargetWindow(windows[0]); - } - void FadeInLayer() { DCHECK(GetWidget()); @@ -532,25 +514,6 @@ Shell::Get()->frame_throttling_controller()->EndThrottling(); } -void WindowCycleList::ReplaceWindows(const WindowList& windows) { - if (windows.empty()) { - Shell::Get()->window_cycle_controller()->CancelCycling(); - return; - } - - for (auto* existing_window : windows_) - RemoveWindow(existing_window); - - current_index_ = 0; - windows_ = windows; - - for (auto* new_window : windows_) - new_window->AddObserver(this); - - if (ShouldShowUi() && cycle_view_) - cycle_view_->UpdateWindows(windows_); -} - void WindowCycleList::Step(int offset) { if (windows_.empty()) return; @@ -617,29 +580,6 @@ } void WindowCycleList::OnWindowDestroying(aura::Window* window) { - RemoveWindow(window); - - if (cycle_view_ && windows_.empty()) { - // This deletes us. - Shell::Get()->window_cycle_controller()->CancelCycling(); - } -} - -void WindowCycleList::OnDisplayMetricsChanged(const display::Display& display, - uint32_t changed_metrics) { - if (cycle_ui_widget_ && - display.id() == - display::Screen::GetScreen() - ->GetDisplayNearestWindow(cycle_ui_widget_->GetNativeWindow()) - .id() && - (changed_metrics & (DISPLAY_METRIC_BOUNDS | DISPLAY_METRIC_ROTATION))) { - Shell::Get()->window_cycle_controller()->CancelCycling(); - // |this| is deleted. - return; - } -} - -void WindowCycleList::RemoveWindow(aura::Window* window) { window->RemoveObserver(this); WindowList::iterator i = std::find(windows_.begin(), windows_.end(), window); @@ -656,6 +596,25 @@ auto* new_target_window = windows_.empty() ? nullptr : windows_[current_index_]; cycle_view_->HandleWindowDestruction(window, new_target_window); + if (windows_.empty()) { + // This deletes us. + Shell::Get()->window_cycle_controller()->CancelCycling(); + return; + } + } +} + +void WindowCycleList::OnDisplayMetricsChanged(const display::Display& display, + uint32_t changed_metrics) { + if (cycle_ui_widget_ && + display.id() == + display::Screen::GetScreen() + ->GetDisplayNearestWindow(cycle_ui_widget_->GetNativeWindow()) + .id() && + (changed_metrics & (DISPLAY_METRIC_BOUNDS | DISPLAY_METRIC_ROTATION))) { + Shell::Get()->window_cycle_controller()->CancelCycling(); + // |this| is deleted. + return; } }
diff --git a/ash/wm/window_cycle_list.h b/ash/wm/window_cycle_list.h index f281af8..16b899b 100644 --- a/ash/wm/window_cycle_list.h +++ b/ash/wm/window_cycle_list.h
@@ -42,10 +42,6 @@ WindowCycleList& operator=(const WindowCycleList&) = delete; ~WindowCycleList() override; - // Removes the existing windows and replaces them with |windows|. If - // |windows| is empty, cancels cycling. - void ReplaceWindows(const WindowList& windows); - // Cycles to the next or previous window based on |direction|. void Step(WindowCycleController::Direction direction); @@ -79,10 +75,6 @@ void OnDisplayMetricsChanged(const display::Display& display, uint32_t changed_metrics) override; - // Removes |window| from the window list. Also removes the window from - // |cycle_view_| if |cycle_view_| exists. - void RemoveWindow(aura::Window* window); - // Returns true if the window list overlay should be shown. bool ShouldShowUi();
diff --git a/build/OWNERS.setnoparent b/build/OWNERS.setnoparent index ed3f158f..5797d4dc 100644 --- a/build/OWNERS.setnoparent +++ b/build/OWNERS.setnoparent
@@ -29,7 +29,7 @@ file://third_party/blink/API_OWNERS # Extension related files. -file://chrome/browser/extensions/component_extensions_whitelist/EXTENSION_WHITELIST_OWNERS +file://chrome/browser/extensions/component_extensions_allowlist/EXTENSION_ALLOWLIST_OWNERS file://extensions/common/api/API_OWNERS # This restriction is in place to avoid accidental addition to our top level
diff --git a/build/config/fuchsia/generate_runner_scripts.gni b/build/config/fuchsia/generate_runner_scripts.gni index af5ead3..a7364124 100644 --- a/build/config/fuchsia/generate_runner_scripts.gni +++ b/build/config/fuchsia/generate_runner_scripts.gni
@@ -152,7 +152,7 @@ } executable_args += [ - "--output-dir", + "--out-dir", "@WrappedPath(.)", "--target-cpu", target_cpu,
diff --git a/build/config/ios/ios_sdk_overrides.gni b/build/config/ios/ios_sdk_overrides.gni index d139a97..bd990bcc 100644 --- a/build/config/ios/ios_sdk_overrides.gni +++ b/build/config/ios/ios_sdk_overrides.gni
@@ -7,11 +7,11 @@ declare_args() { # Version of iOS that we're targeting. - ios_deployment_target = "12.0" + ios_deployment_target = "12.2" } # Always assert that ios_deployment_target is used on non-iOS platforms to # prevent unused args warnings. if (!is_ios) { - assert(ios_deployment_target == "12.0" || true) + assert(ios_deployment_target == "12.2" || true) }
diff --git a/build/fuchsia/aemu_target.py b/build/fuchsia/aemu_target.py index a5f1d7e..684b019 100644 --- a/build/fuchsia/aemu_target.py +++ b/build/fuchsia/aemu_target.py
@@ -20,9 +20,9 @@ class AemuTarget(qemu_target.QemuTarget): EMULATOR_NAME = 'aemu' - def __init__(self, output_dir, target_cpu, system_log_file, cpu_cores, + def __init__(self, out_dir, target_cpu, system_log_file, cpu_cores, require_kvm, ram_size_mb, enable_graphics, hardware_gpu): - super(AemuTarget, self).__init__(output_dir, target_cpu, system_log_file, + super(AemuTarget, self).__init__(out_dir, target_cpu, system_log_file, cpu_cores, require_kvm, ram_size_mb) # TODO(crbug.com/1000907): Enable AEMU for arm64.
diff --git a/build/fuchsia/common_args.py b/build/fuchsia/common_args.py index 12c9df2..107e0f11 100644 --- a/build/fuchsia/common_args.py +++ b/build/fuchsia/common_args.py
@@ -15,26 +15,29 @@ """Returns a parser that handles the target type used for the test run.""" device_args = arg_parser.add_argument_group( - 'target', 'Arguments specifying the Fuchsia target type.') + 'target', + 'Arguments specifying the Fuchsia target type. To see a list of ' + 'arguments available for a specific target type, specify the desired ' + 'target to use and add the --help flag.') device_args.add_argument('--target-cpu', default=GetHostArchFromPlatform(), help='GN target_cpu setting for the build. Defaults ' 'to the same architecture as host cpu.') device_args.add_argument('--device', default=None, - choices=['aemu', 'qemu', 'device', 'ext'], + choices=['aemu', 'qemu', 'device', 'custom'], help='Choose to run on aemu|qemu|device. ' 'By default, Fuchsia will run on AEMU on x64 ' 'hosts and QEMU on arm64 hosts. Alternatively, ' - 'setting to ext will require specifying the ' + 'setting to custom will require specifying the ' 'subclass of Target class used via the ' - '--ext-device-path flag.') + '--custom-device-target flag.') device_args.add_argument('-d', action='store_const', dest='device', const='device', help='Run on device instead of emulator.') - device_args.add_argument('--ext-device-path', + device_args.add_argument('--custom-device-target', default=None, help='Specify path to file that contains the ' 'subclass of Target that will be used. Only ' @@ -45,11 +48,11 @@ def _GetTargetClass(args): """Gets the target class to be used for the test run.""" - if args.device == 'ext': - if not args.ext_device_path: - raise Exception('--ext-device-path flag must be set when device flag ' - 'set to ext.') - target_path = args.ext_device_path + if args.device == 'custom': + if not args.custom_device_target: + raise Exception('--custom-device-target flag must be set when device ' + 'flag set to custom.') + target_path = args.custom_device_target else: if not args.device: args.device = 'aemu' if args.target_cpu == 'x64' else 'qemu'
diff --git a/build/fuchsia/device_target.py b/build/fuchsia/device_target.py index 94cf8058..ea288aa0 100644 --- a/build/fuchsia/device_target.py +++ b/build/fuchsia/device_target.py
@@ -60,10 +60,17 @@ If |_host| is set: Deploy to a device at the host IP address as-is.""" - def __init__(self, output_dir, target_cpu, host=None, node_name=None, - port=None, ssh_config=None, fuchsia_out_dir=None, - os_check='update', system_log_file=None): - """output_dir: The directory which will contain the files that are + def __init__(self, + out_dir, + target_cpu, + host=None, + node_name=None, + port=None, + ssh_config=None, + fuchsia_out_dir=None, + os_check='update', + system_log_file=None): + """out_dir: The directory which will contain the files that are generated to support the deployment. target_cpu: The CPU architecture of the deployment target. Can be "x64" or "arm64". @@ -78,7 +85,7 @@ mismatch. If 'ignore', the target's SDK version is ignored.""" - super(DeviceTarget, self).__init__(output_dir, target_cpu) + super(DeviceTarget, self).__init__(out_dir, target_cpu) self._port = port if port else 22 self._system_log_file = system_log_file @@ -110,8 +117,8 @@ else: # Default to using an automatically generated SSH config and keys. - boot_data.ProvisionSSH(output_dir) - self._ssh_config_path = boot_data.GetSSHConfigPath(output_dir) + boot_data.ProvisionSSH(out_dir) + self._ssh_config_path = boot_data.GetSSHConfigPath(out_dir) @staticmethod def RegisterArgs(arg_parser): @@ -138,7 +145,7 @@ 'Equivalent to setting --ssh_config and ' '--os-check=ignore') device_args.add_argument( - '--os_check', + '--os-check', choices=['check', 'update', 'ignore'], default='update', help="Sets the OS version enforcement policy. If 'check', then the "
diff --git a/build/fuchsia/emu_target.py b/build/fuchsia/emu_target.py index 49a8791..440f1ab7 100644 --- a/build/fuchsia/emu_target.py +++ b/build/fuchsia/emu_target.py
@@ -16,13 +16,13 @@ class EmuTarget(target.Target): - def __init__(self, output_dir, target_cpu, system_log_file): - """output_dir: The directory which will contain the files that are + def __init__(self, out_dir, target_cpu, system_log_file): + """out_dir: The directory which will contain the files that are generated to support the emulator deployment. target_cpu: The emulated target CPU architecture. Can be 'x64' or 'arm64'.""" - super(EmuTarget, self).__init__(output_dir, target_cpu) + super(EmuTarget, self).__init__(out_dir, target_cpu) self._emu_process = None self._system_log_file = system_log_file self._amber_repo = None @@ -49,9 +49,6 @@ def __enter__(self): return self - def _GetEmulatorName(self): - pass - def _BuildCommand(self): """Build the command that will be run to start Fuchsia in the emulator.""" pass @@ -72,7 +69,7 @@ # Python script panicking and aborting. # The precise root cause is still nebulous, but this fix works. # See crbug.com/741194. - logging.debug('Launching %s.' % (self._GetEmulatorName())) + logging.debug('Launching %s.' % (self.EMULATOR_NAME)) logging.debug(' '.join(emu_command)) # Zircon sends debug logs to serial port (see kernel.serial=legacy flag @@ -113,21 +110,20 @@ def Shutdown(self): if not self._emu_process: - logging.error('%s did not start' % (self._GetEmulatorName())) + logging.error('%s did not start' % (self.EMULATOR_NAME)) return returncode = self._emu_process.poll() if returncode == None: - logging.info('Shutting down %s' % (self._GetEmulatorName())) + logging.info('Shutting down %s' % (self.EMULATOR_NAME)) self._emu_process.kill() elif returncode == 0: - logging.info('%s quit unexpectedly without errors' % - self._GetEmulatorName()) + logging.info('%s quit unexpectedly without errors' % self.EMULATOR_NAME) elif returncode < 0: logging.error('%s was terminated by signal %d' % - (self._GetEmulatorName(), -returncode)) + (self.EMULATOR_NAME, -returncode)) else: logging.error('%s quit unexpectedly with exit code %d' % - (self._GetEmulatorName(), returncode)) + (self.EMULATOR_NAME, returncode)) # TODO(crbug.com/1100402): Delete when no longer needed for debug info. # Log system statistics at the end of the emulator run. @@ -141,11 +137,11 @@ def _GetEndpoint(self): if not self._IsEmuStillRunning(): - raise Exception('%s quit unexpectedly.' % (self._GetEmulatorName())) + raise Exception('%s quit unexpectedly.' % (self.EMULATOR_NAME)) return ('localhost', self._host_ssh_port) def _GetSshConfigPath(self): - return boot_data.GetSSHConfigPath(self._output_dir) + return boot_data.GetSSHConfigPath(self._out_dir) # TODO(crbug.com/1100402): Delete when no longer needed for debug info.
diff --git a/build/fuchsia/generic_x64_target.py b/build/fuchsia/generic_x64_target.py index 5c56faa..172d203 100644 --- a/build/fuchsia/generic_x64_target.py +++ b/build/fuchsia/generic_x64_target.py
@@ -14,10 +14,10 @@ def GetTargetType(): - return GenericX64Target + return GenericX64PavedDeviceTarget -class GenericX64Target(device_target.DeviceTarget): +class GenericX64PavedDeviceTarget(device_target.DeviceTarget): """In addition to the functionality provided by DeviceTarget, this class automatically handles paving of x64 devices that use generic Fuchsia build. @@ -59,7 +59,7 @@ self._GetTargetSdkArch(), boot_data.TARGET_TYPE_GENERIC)), EnsurePathExists( - boot_data.GetBootImage(self._output_dir, self._GetTargetSdkArch(), + boot_data.GetBootImage(self._out_dir, self._GetTargetSdkArch(), boot_data.TARGET_TYPE_GENERIC)) ] @@ -67,7 +67,7 @@ bootserver_command += ['-n', self._node_name] bootserver_command += ['--'] - bootserver_command += boot_data.GetKernelArgs(self._output_dir) + bootserver_command += boot_data.GetKernelArgs(self._out_dir) logging.debug(' '.join(bootserver_command)) _, stdout = SubprocessCallWithTimeout(bootserver_command,
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index 2dffbde..16af91c 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -0.20200914.3.1 +0.20200915.0.1
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index 19ffc48..16af91c 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -0.20200914.2.1 +0.20200915.0.1
diff --git a/build/fuchsia/qemu_target.py b/build/fuchsia/qemu_target.py index 895d2e0..0c965e5 100644 --- a/build/fuchsia/qemu_target.py +++ b/build/fuchsia/qemu_target.py
@@ -40,10 +40,9 @@ class QemuTarget(emu_target.EmuTarget): EMULATOR_NAME = 'qemu' - def __init__(self, output_dir, target_cpu, system_log_file, cpu_cores, + def __init__(self, out_dir, target_cpu, system_log_file, cpu_cores, require_kvm, ram_size_mb): - super(QemuTarget, self).__init__(output_dir, target_cpu, - system_log_file) + super(QemuTarget, self).__init__(out_dir, target_cpu, system_log_file) self._cpu_cores=cpu_cores self._require_kvm=require_kvm self._ram_size_mb=ram_size_mb @@ -75,29 +74,37 @@ boot_data.AssertBootImagesExist(self._GetTargetSdkArch(), 'qemu') emu_command = [ - '-kernel', EnsurePathExists( + '-kernel', + EnsurePathExists( boot_data.GetTargetFile('qemu-kernel.kernel', self._GetTargetSdkArch(), boot_data.TARGET_TYPE_QEMU)), - '-initrd', EnsurePathExists( - boot_data.GetBootImage(self._output_dir, self._GetTargetSdkArch(), + '-initrd', + EnsurePathExists( + boot_data.GetBootImage(self._out_dir, self._GetTargetSdkArch(), boot_data.TARGET_TYPE_QEMU)), - '-m', str(self._ram_size_mb), - '-smp', str(self._cpu_cores), + '-m', + str(self._ram_size_mb), + '-smp', + str(self._cpu_cores), # Attach the blobstore and data volumes. Use snapshot mode to discard # any changes. '-snapshot', - '-drive', 'file=%s,format=qcow2,if=none,id=blobstore,snapshot=on' % - _EnsureBlobstoreQcowAndReturnPath(self._output_dir, - self._GetTargetSdkArch()), - '-device', 'virtio-blk-pci,drive=blobstore', + '-drive', + 'file=%s,format=qcow2,if=none,id=blobstore,snapshot=on' % + _EnsureBlobstoreQcowAndReturnPath(self._out_dir, + self._GetTargetSdkArch()), + '-device', + 'virtio-blk-pci,drive=blobstore', # Use stdio for the guest OS only; don't attach the QEMU interactive # monitor. - '-serial', 'stdio', - '-monitor', 'none', - ] + '-serial', + 'stdio', + '-monitor', + 'none', + ] # Configure the machine to emulate, based on the target architecture. if self._target_cpu == 'arm64': @@ -141,7 +148,7 @@ emu_command.extend(kvm_command) - kernel_args = boot_data.GetKernelArgs(self._output_dir) + kernel_args = boot_data.GetKernelArgs(self._out_dir) # TERM=dumb tells the guest OS to not emit ANSI commands that trigger # noisy ANSI spew from the user's terminal emulator. @@ -178,7 +185,7 @@ return hasher.hexdigest() -def _EnsureBlobstoreQcowAndReturnPath(output_dir, target_arch): +def _EnsureBlobstoreQcowAndReturnPath(out_dir, target_arch): """Returns a file containing the Fuchsia blobstore in a QCOW format, with extra buffer space added for growth.""" @@ -187,11 +194,11 @@ fvm_tool = common.GetHostToolPathFromPlatform('fvm') blobstore_path = boot_data.GetTargetFile('storage-full.blk', target_arch, 'qemu') - qcow_path = os.path.join(output_dir, 'gen', 'blobstore.qcow') + qcow_path = os.path.join(out_dir, 'gen', 'blobstore.qcow') # Check a hash of the blobstore to determine if we can re-use an existing # extended version of it. - blobstore_hash_path = os.path.join(output_dir, 'gen', 'blobstore.hash') + blobstore_hash_path = os.path.join(out_dir, 'gen', 'blobstore.hash') current_blobstore_hash = _ComputeFileHash(blobstore_path) if os.path.exists(blobstore_hash_path) and os.path.exists(qcow_path):
diff --git a/build/fuchsia/target.py b/build/fuchsia/target.py index c030206..de84bbb5 100644 --- a/build/fuchsia/target.py +++ b/build/fuchsia/target.py
@@ -60,8 +60,8 @@ class Target(object): """Base class representing a Fuchsia deployment target.""" - def __init__(self, output_dir, target_cpu): - self._output_dir = output_dir + def __init__(self, out_dir, target_cpu): + self._out_dir = out_dir self._started = False self._dry_run = False self._target_cpu = target_cpu @@ -72,9 +72,8 @@ common_args = arg_parser.add_argument_group( 'target', 'Arguments that apply to all targets.') common_args.add_argument( - '--output-dir', + '--out-dir', type=os.path.realpath, - default=os.getcwd(), help=('Path to the directory in which build files are located. ' 'Defaults to current directory.')) common_args.add_argument('--system-log-file',
diff --git a/build/fuchsia/test_runner.py b/build/fuchsia/test_runner.py index eac7f6f..42e6b796 100755 --- a/build/fuchsia/test_runner.py +++ b/build/fuchsia/test_runner.py
@@ -57,7 +57,7 @@ type=int, help='Sets the limit of test batch to run in a single ' 'process.') - # --test-launcher-filter-file is specified relative to --output-dir, + # --test-launcher-filter-file is specified relative to --out-dir, # so specifying type=os.path.* will break it. parser.add_argument('--test-launcher-filter-file', default=None, @@ -81,9 +81,9 @@ help='Arguments for the test process.') args = parser.parse_args() - # Flag output_dir is required for tests launched with this script. - if not args.output_dir: - raise ValueError("output-dir must be specified.") + # Flag out_dir is required for tests launched with this script. + if not args.out_dir: + raise ValueError("out-dir must be specified.") ConfigureLogging(args) @@ -157,7 +157,7 @@ args.package_name) run_package_args = RunPackageArgs.FromCommonArgs(args) - returncode = RunPackage(args.output_dir, target, args.package, + returncode = RunPackage(args.out_dir, target, args.package, args.package_name, child_args, run_package_args) if test_server:
diff --git a/cc/trees/image_animation_controller.cc b/cc/trees/image_animation_controller.cc index 2cb4f9d1..bfb3f30 100644 --- a/cc/trees/image_animation_controller.cc +++ b/cc/trees/image_animation_controller.cc
@@ -4,6 +4,7 @@ #include "cc/trees/image_animation_controller.h" +#include <algorithm> #include <sstream> #include "base/bind.h"
diff --git a/cc/trees/image_animation_controller.h b/cc/trees/image_animation_controller.h index 1f11870..59c1c19f 100644 --- a/cc/trees/image_animation_controller.h +++ b/cc/trees/image_animation_controller.h
@@ -5,6 +5,9 @@ #ifndef CC_TREES_IMAGE_ANIMATION_CONTROLLER_H_ #define CC_TREES_IMAGE_ANIMATION_CONTROLLER_H_ +#include <string> +#include <vector> + #include "base/cancelable_callback.h" #include "base/containers/flat_map.h" #include "base/containers/flat_set.h"
diff --git a/chrome/android/DEPS b/chrome/android/DEPS index 32e7ecd..880e167 100644 --- a/chrome/android/DEPS +++ b/chrome/android/DEPS
@@ -21,7 +21,6 @@ "+chrome/browser/ui/android/native_page", "+chrome/browser/ui/messages/android", "+chrome/browser/util/android/java", - "+chrome/browser/video_tutorials/android", "+chrome/browser/webauthn/android", "+components/browser_ui/android/bottomsheet", "+components/browser_ui/banners/android",
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni index 0d6e529..30fe463 100644 --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni
@@ -1638,6 +1638,7 @@ "java/src/org/chromium/chrome/browser/user_education/IPHCommand.java", "java/src/org/chromium/chrome/browser/user_education/IPHCommandBuilder.java", "java/src/org/chromium/chrome/browser/user_education/UserEducationHelper.java", + "java/src/org/chromium/chrome/browser/video_tutorials/NewTabPageVideoIPHManager.java", "java/src/org/chromium/chrome/browser/vr/ArDelegate.java", "java/src/org/chromium/chrome/browser/vr/ArDelegateProvider.java", "java/src/org/chromium/chrome/browser/webapps/ActivateWebApkActivity.java",
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPersonalDataManagerTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPersonalDataManagerTest.java index d31be8f..cb300cb5 100644 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPersonalDataManagerTest.java +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPersonalDataManagerTest.java
@@ -40,6 +40,7 @@ import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.startAutofillAssistant; import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.waitUntilViewInRootMatchesCondition; import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.waitUntilViewMatchesCondition; +import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.withTextId; import android.support.test.InstrumentationRegistry; import android.widget.RadioButton; @@ -826,7 +827,7 @@ */ @Test @MediumTest - public void testCreateShippingAddressAndCreditCard() throws Exception { + public void testCreateShippingAddressAndCreditCard() { ArrayList<ActionProto> list = new ArrayList<>(); list.add((ActionProto) ActionProto.newBuilder() .setCollectUserData(CollectUserDataProto.newBuilder() @@ -895,6 +896,69 @@ } } + /** + * Add a shipping address with Autofill Assistant UI and fill it into the form. + */ + @Test + @MediumTest + public void testCreateAndEnterAddress() throws Exception { + ArrayList<ActionProto> list = new ArrayList<>(); + list.add((ActionProto) ActionProto.newBuilder() + .setCollectUserData(CollectUserDataProto.newBuilder() + .setShippingAddressName("shipping") + .setRequestTermsAndConditions(false)) + .build()); + list.add((ActionProto) ActionProto.newBuilder() + .setUseAddress( + UseAddressProto.newBuilder() + .setName("shipping") + .setFormFieldElement(SelectorProto.newBuilder().addFilters( + SelectorProto.Filter.newBuilder().setCssSelector( + "#address_name")))) + .build()); + list.add((ActionProto) ActionProto.newBuilder() + .setPrompt(PromptProto.newBuilder().setMessage("Prompt").addChoices( + PromptProto.Choice.newBuilder())) + .build()); + AutofillAssistantTestScript script = new AutofillAssistantTestScript( + (SupportedScriptProto) SupportedScriptProto.newBuilder() + .setPath("form_target_website.html") + .setPresentation(PresentationProto.newBuilder().setAutostart(true).setChip( + ChipProto.newBuilder().setText("Address"))) + .build(), + list); + runScript(script); + + waitUntilViewMatchesCondition(allOf(withId(R.id.section_title_add_button_label), + withTextId(R.string.payments_add_address)), + isCompletelyDisplayed()); + onView(allOf(withId(R.id.section_title_add_button_label), + withTextId(R.string.payments_add_address))) + .perform(click()); + waitUntilViewMatchesCondition( + withContentDescription("Name*"), allOf(isDisplayed(), isEnabled())); + onView(withContentDescription("Name*")).perform(scrollTo(), typeText("John Doe")); + onView(withContentDescription("Street address*")) + .perform(scrollTo(), typeText("123 Main St")); + onView(withContentDescription("City*")).perform(scrollTo(), typeText("Mountain View")); + onView(withContentDescription("State*")).perform(scrollTo(), typeText("California")); + onView(withContentDescription("ZIP code*")).perform(scrollTo(), typeText("1234")); + onView(withContentDescription("Phone*")).perform(scrollTo(), typeText("8008080808")); + Espresso.closeSoftKeyboard(); + onView(withId(org.chromium.chrome.R.id.editor_dialog_done_button)) + .perform(scrollTo(), click()); + waitUntilViewMatchesCondition(withContentDescription("Continue"), isEnabled()); + waitUntilViewMatchesCondition( + allOf(withParent(withId(R.id.address_summary)), withId(R.id.full_name)), + allOf(withText("John Doe"), isCompletelyDisplayed())); + onView(withText("Continue")).perform(click()); + waitUntilViewMatchesCondition(withText("Prompt"), isCompletelyDisplayed()); + assertThat(getElementValue(getWebContents(), "address_name"), is("John Doe")); + assertThat(getElementValue(getWebContents(), "street"), is("123 Main St")); + assertThat(getElementValue(getWebContents(), "zip"), is("1234")); + assertThat(getElementValue(getWebContents(), "state"), is("California")); + } + private void runScript(AutofillAssistantTestScript script) { AutofillAssistantTestService testService = new AutofillAssistantTestService(Collections.singletonList(script));
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTestUtil.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTestUtil.java index 3c0661e5..635936ca 100644 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTestUtil.java +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTestUtil.java
@@ -38,6 +38,7 @@ import androidx.test.espresso.ViewAction; import androidx.test.espresso.ViewAssertion; import androidx.test.espresso.matcher.BoundedMatcher; +import androidx.test.espresso.matcher.ViewMatchers; import org.hamcrest.Description; import org.hamcrest.Matcher; @@ -417,6 +418,11 @@ return viewsWithTag; } + static Matcher<View> withTextId(int id) { + return ViewMatchers.withText( + InstrumentationRegistry.getTargetContext().getResources().getString(id)); + } + /** * Waits until {@code matcher} matches {@code condition}. Will automatically fail after a * default timeout.
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponentBridge.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponentBridge.java index 4aa25e4..b3710a09f 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponentBridge.java +++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponentBridge.java
@@ -4,6 +4,7 @@ package org.chromium.chrome.browser.keyboard_accessory; +import android.app.Activity; import android.util.SparseArray; import androidx.annotation.VisibleForTesting; @@ -25,25 +26,23 @@ class ManualFillingComponentBridge { private final SparseArray<PropertyProvider<AccessorySheetData>> mProviders = new SparseArray<>(); - private final PropertyProvider<Action[]> mActionProvider = - new PropertyProvider<>(AccessoryAction.GENERATE_PASSWORD_AUTOMATIC); - private final ManualFillingComponent mManualFillingComponent; - private final ChromeActivity mActivity; + private PropertyProvider<Action[]> mActionProvider; + private final WindowAndroid mWindowAndroid; private long mNativeView; + private final ManualFillingComponent.Observer mDestructionObserver = this::onComponentDestroyed; private ManualFillingComponentBridge(long nativeView, WindowAndroid windowAndroid) { mNativeView = nativeView; - mActivity = (ChromeActivity) windowAndroid.getActivity().get(); - mManualFillingComponent = mActivity.getManualFillingComponent(); - mManualFillingComponent.registerActionProvider(mActionProvider); + mWindowAndroid = windowAndroid; } PropertyProvider<AccessorySheetData> getOrCreateProvider(@AccessoryTabType int tabType) { PropertyProvider<AccessorySheetData> provider = mProviders.get(tabType); if (provider != null) return provider; + if (getManualFillingComponent() == null) return null; provider = new PropertyProvider<>(); mProviders.put(tabType, provider); - mManualFillingComponent.registerSheetDataProvider(tabType, provider); + getManualFillingComponent().registerSheetDataProvider(tabType, provider); return provider; } @@ -56,20 +55,23 @@ @CalledByNative private void onItemsAvailable(Object objAccessorySheetData) { AccessorySheetData accessorySheetData = (AccessorySheetData) objAccessorySheetData; - getOrCreateProvider(accessorySheetData.getSheetType()).notifyObservers(accessorySheetData); + PropertyProvider<AccessorySheetData> provider = + getOrCreateProvider(accessorySheetData.getSheetType()); + if (provider != null) provider.notifyObservers(accessorySheetData); } @CalledByNative private void onAutomaticGenerationStatusChanged(boolean available) { final Action[] generationAction; - if (available) { + final Activity activity = mWindowAndroid.getActivity().get(); + if (available && activity != null) { // This is meant to suppress the warning that the short string is not used. // TODO(crbug.com/855581): Switch between strings based on whether they fit on the // screen or not. boolean useLongString = true; String caption = useLongString - ? mActivity.getString(R.string.password_generation_accessory_button) - : mActivity.getString(R.string.password_generation_accessory_button_short); + ? activity.getString(R.string.password_generation_accessory_button) + : activity.getString(R.string.password_generation_accessory_button_short); generationAction = new Action[] { new Action(caption, AccessoryAction.GENERATE_PASSWORD_AUTOMATIC, (action) -> { assert mNativeView @@ -84,31 +86,46 @@ } else { generationAction = new Action[0]; } - mActionProvider.notifyObservers(generationAction); + if (mActionProvider == null && getManualFillingComponent() != null) { + mActionProvider = new PropertyProvider<>(AccessoryAction.GENERATE_PASSWORD_AUTOMATIC); + getManualFillingComponent().registerActionProvider(mActionProvider); + } + if (mActionProvider != null) mActionProvider.notifyObservers(generationAction); } @CalledByNative void showWhenKeyboardIsVisible() { - mManualFillingComponent.showWhenKeyboardIsVisible(); + if (getManualFillingComponent() != null) { + getManualFillingComponent().showWhenKeyboardIsVisible(); + } } @CalledByNative void hide() { - mManualFillingComponent.hide(); + if (getManualFillingComponent() != null) { + getManualFillingComponent().hide(); + } } @CalledByNative private void closeAccessorySheet() { - mManualFillingComponent.closeAccessorySheet(); + if (getManualFillingComponent() != null) { + getManualFillingComponent().closeAccessorySheet(); + } } @CalledByNative private void swapSheetWithKeyboard() { - mManualFillingComponent.swapSheetWithKeyboard(); + if (getManualFillingComponent() != null) { + getManualFillingComponent().swapSheetWithKeyboard(); + } } @CalledByNative private void destroy() { + if (getManualFillingComponent() != null) { + getManualFillingComponent().removeObserver(mDestructionObserver); + } for (int i = 0; i < mProviders.size(); ++i) { mProviders.valueAt(i).notifyObservers(null); } @@ -195,6 +212,20 @@ ManualFillingComponentBridgeJni.get().disableServerPredictionsForTesting(); } + private ManualFillingComponent getManualFillingComponent() { + ChromeActivity activity = (ChromeActivity) mWindowAndroid.getActivity().get(); + if (activity == null) return null; // Has the activity died since it was last checked? + activity.getManualFillingComponent().addObserver(mDestructionObserver); + return activity.getManualFillingComponent(); + } + + private void onComponentDestroyed() { + if (mNativeView != 0) { + ManualFillingComponentBridgeJni.get().onViewDestroyed( + mNativeView, ManualFillingComponentBridge.this); + } + } + @NativeMethods interface Natives { void onFillingTriggered(long nativeManualFillingViewAndroid, @@ -203,6 +234,8 @@ ManualFillingComponentBridge caller, int accessoryAction); void onToggleChanged(long nativeManualFillingViewAndroid, ManualFillingComponentBridge caller, int accessoryAction, boolean enabled); + void onViewDestroyed( + long nativeManualFillingViewAndroid, ManualFillingComponentBridge caller); void cachePasswordSheetDataForTesting(WebContents webContents, String[] userNames, String[] passwords, boolean originBlacklisted); void notifyFocusedFieldTypeForTesting(WebContents webContents, int focusedFieldType);
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingCoordinator.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingCoordinator.java index 96bb57b..bcd6997a 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingCoordinator.java +++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingCoordinator.java
@@ -9,6 +9,7 @@ import androidx.annotation.VisibleForTesting; +import org.chromium.base.ObserverList; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.keyboard_accessory.bar_component.KeyboardAccessoryCoordinator; import org.chromium.chrome.browser.keyboard_accessory.data.KeyboardAccessoryData; @@ -30,6 +31,7 @@ */ class ManualFillingCoordinator implements ManualFillingComponent { private final ManualFillingMediator mMediator = new ManualFillingMediator(); + private ObserverList<Observer> mObserverList = new ObserverList<>(); public ManualFillingCoordinator() {} @@ -55,6 +57,7 @@ @Override public void destroy() { + for (Observer observer : mObserverList) observer.onDestroy(); mMediator.destroy(); } @@ -126,6 +129,16 @@ return mMediator.isFillingViewShown(view); } + @Override + public boolean addObserver(Observer observer) { + return mObserverList.addObserver(observer); + } + + @Override + public boolean removeObserver(Observer observer) { + return mObserverList.addObserver(observer); + } + @VisibleForTesting ManualFillingMediator getMediatorForTesting() { return mMediator;
diff --git a/chrome/android/features/keyboard_accessory/public/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponent.java b/chrome/android/features/keyboard_accessory/public/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponent.java index b8a33044..77c17c9 100644 --- a/chrome/android/features/keyboard_accessory/public/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponent.java +++ b/chrome/android/features/keyboard_accessory/public/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponent.java
@@ -20,6 +20,15 @@ */ public interface ManualFillingComponent { /** + * Observers are added with {@link #addObserver} and removed with {@link #removeObserver}. + * They are notified when the {@link ManualFillingComponent} is destroyed. + */ + interface Observer { + /** Called if the ManualFillingComponent is destroyed. */ + void onDestroy(); + } + + /** * Initializes the manual filling component. Calls to this class are NoOps until this method * is called. * @param windowAndroid The window needed to listen to the keyboard and to connect to @@ -116,4 +125,16 @@ * @param view A {@link View} that is used to find the window root. */ boolean isFillingViewShown(View view); + + /** + * @param observer An {@link Observer} to add. + * @return True iff the observer could be added. + */ + boolean addObserver(Observer observer); + + /** + * @param observer An {@link Observer} to add. + * @return True iff the observer could be remove. + */ + boolean removeObserver(Observer observer); }
diff --git a/chrome/android/java/DEPS b/chrome/android/java/DEPS index 4ef2cb7..4045d3a 100644 --- a/chrome/android/java/DEPS +++ b/chrome/android/java/DEPS
@@ -19,6 +19,7 @@ "+chrome/browser/performance_hints/android/java", "+chrome/browser/settings/android/java", "+chrome/browser/tabmodel/android/java", + "+chrome/browser/video_tutorials/android", "+components/autofill/android/java/src/org/chromium/components/autofill", "+components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler", "+components/bookmarks/common/android/java/src/org/chromium/components/bookmarks",
diff --git a/chrome/android/java/res/layout/new_tab_page_layout.xml b/chrome/android/java/res/layout/new_tab_page_layout.xml index ba75962..b84b8698 100644 --- a/chrome/android/java/res/layout/new_tab_page_layout.xml +++ b/chrome/android/java/res/layout/new_tab_page_layout.xml
@@ -51,6 +51,15 @@ android:layout_marginTop="16dp" android:visibility="gone"/> + <!-- Video tutorial IPH card --> + <ViewStub + android:id="@+id/video_iph_stub" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="12dp" + android:layout="@layout/video_tutorial_iph_card" + android:inflatedId="@+id/video_iph_card"/> + <!-- Middle spacer --> <View android:id="@+id/ntp_middle_spacer"
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/NavigationSheet.java b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/NavigationSheet.java index 8d81661..dad2776 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/NavigationSheet.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/NavigationSheet.java
@@ -8,7 +8,6 @@ import android.view.View; import org.chromium.base.supplier.Supplier; -import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.content_public.browser.NavigationHistory; @@ -16,9 +15,6 @@ * Interface that defines the methods for controlling Navigation sheet. */ public interface NavigationSheet { - // Field trial variation key that enables navigation sheet. - static final String NAVIGATION_SHEET_ENABLED_KEY = "overscroll_history_navigation_bottom_sheet"; - /** * Delegate performing navigation-related operations/providing the required info. */ @@ -51,10 +47,7 @@ * @return {@code true} if navigation sheet is enabled. */ static boolean isEnabled() { - return ChromeFeatureList.isInitialized() - && ChromeFeatureList.getFieldTrialParamByFeatureAsBoolean( - ChromeFeatureList.OVERSCROLL_HISTORY_NAVIGATION, - NAVIGATION_SHEET_ENABLED_KEY, false); + return false; } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/SyncErrorInfoBar.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/SyncErrorInfoBar.java index 9cc3b52..e9df671 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/infobar/SyncErrorInfoBar.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/SyncErrorInfoBar.java
@@ -18,9 +18,11 @@ import org.chromium.base.annotations.NativeMethods; import org.chromium.base.metrics.RecordHistogram; import org.chromium.chrome.R; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.settings.SettingsLauncher; import org.chromium.chrome.browser.settings.SettingsLauncherImpl; import org.chromium.chrome.browser.sync.ProfileSyncService; +import org.chromium.chrome.browser.sync.settings.ManageSyncSettings; import org.chromium.chrome.browser.sync.settings.SyncAndServicesSettings; import org.chromium.chrome.browser.sync.settings.SyncSettingsUtils; import org.chromium.chrome.browser.sync.settings.SyncSettingsUtils.SyncError; @@ -94,8 +96,13 @@ recordHistogram(mType, SyncErrorInfoBarAction.OPEN_SETTINGS_CLICKED); SettingsLauncher settingsLauncher = new SettingsLauncherImpl(); - settingsLauncher.launchSettingsActivity(getApplicationContext(), - SyncAndServicesSettings.class, SyncAndServicesSettings.createArguments(false)); + if (ChromeFeatureList.isEnabled(ChromeFeatureList.MOBILE_IDENTITY_CONSISTENCY)) { + settingsLauncher.launchSettingsActivity(getApplicationContext(), + ManageSyncSettings.class, ManageSyncSettings.createArguments(false)); + } else { + settingsLauncher.launchSettingsActivity(getApplicationContext(), + SyncAndServicesSettings.class, SyncAndServicesSettings.createArguments(false)); + } } @CalledByNative
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java index 80684745..ce17e603 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
@@ -49,6 +49,7 @@ import org.chromium.chrome.browser.suggestions.tile.TileGroup; import org.chromium.chrome.browser.suggestions.tile.TileRenderer; import org.chromium.chrome.browser.tab.Tab; +import org.chromium.chrome.browser.video_tutorials.NewTabPageVideoIPHManager; import org.chromium.chrome.browser.vr.VrModuleProvider; import org.chromium.components.browser_ui.widget.displaystyle.UiConfig; import org.chromium.ui.base.DeviceFormFactor; @@ -76,6 +77,7 @@ private View mTileGridPlaceholder; private View mNoSearchLogoSpacer; private QueryTileSection mQueryTileSection; + private NewTabPageVideoIPHManager mVideoIPHManager; private ImageView mCryptidHolder; @Nullable @@ -172,6 +174,8 @@ super.onFinishInflate(); mMiddleSpacer = findViewById(R.id.ntp_middle_spacer); mSearchProviderLogoView = findViewById(R.id.search_provider_logo); + mVideoIPHManager = new NewTabPageVideoIPHManager( + findViewById(R.id.video_iph_stub), Profile.getLastUsedRegularProfile()); insertSiteSectionView(); int variation = ExploreSitesBridge.getVariation();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetView.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetView.java index ed7a8d8..4747deeb 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetView.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetView.java
@@ -175,6 +175,7 @@ void setUpIncognitoInterstitialView() { // TODO(crbug.com/1103262): Setup the incognito interstitial strings. mLogoImage.setImageResource(R.drawable.location_bar_incognito_badge); + mAccountPickerTitle.setText(R.string.incognito_interstitial_title); mIncognitoInterstitialView.setVisibility(View.VISIBLE); mAccountPickerSubtitle.setVisibility(View.GONE);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/video_tutorials/NewTabPageVideoIPHManager.java b/chrome/android/java/src/org/chromium/chrome/browser/video_tutorials/NewTabPageVideoIPHManager.java new file mode 100644 index 0000000..c62e8d4 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/video_tutorials/NewTabPageVideoIPHManager.java
@@ -0,0 +1,82 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.video_tutorials; + +import android.view.ViewStub; + +import org.chromium.chrome.browser.feature_engagement.TrackerFactory; +import org.chromium.chrome.browser.flags.ChromeFeatureList; +import org.chromium.chrome.browser.image_fetcher.ImageFetcher; +import org.chromium.chrome.browser.image_fetcher.ImageFetcherConfig; +import org.chromium.chrome.browser.image_fetcher.ImageFetcherFactory; +import org.chromium.chrome.browser.profiles.Profile; +import org.chromium.components.browser_ui.util.GlobalDiscardableReferencePool; +import org.chromium.components.feature_engagement.Tracker; + +import java.util.List; + +/** + * Handles all the logic required for showing the appropriate video tutorial IPH on new tab page. + * Queries the backend for the sorted list of available video tutorials, and shows the one not seen + * by user yet. Also responsible for showing the next tutorial IPH when one is consumed or + * dismissed. + */ +public class NewTabPageVideoIPHManager { + private Tracker mTracker; + private VideoIPHCoordinator mVideoIPHCoordinator; + private VideoTutorialService mVideoTutorialService; + + /** + * Constructor. + * @param viewStub The {@link ViewStub} to be inflated to show the IPH. + * @param profile The associated profile. + */ + public NewTabPageVideoIPHManager(ViewStub viewStub, Profile profile) { + if (!ChromeFeatureList.isEnabled(ChromeFeatureList.VIDEO_TUTORIALS)) return; + + mTracker = TrackerFactory.getTrackerForProfile(profile); + ImageFetcher imageFetcher = + ImageFetcherFactory.createImageFetcher(ImageFetcherConfig.IN_MEMORY_WITH_DISK_CACHE, + profile, GlobalDiscardableReferencePool.getReferencePool()); + mVideoIPHCoordinator = new VideoIPHCoordinator( + viewStub, imageFetcher, this::onClickIPH, this::onDismissIPH); + + mVideoTutorialService = VideoTutorialServiceFactory.getForProfile(profile); + mVideoTutorialService.getTutorials(this::onFetchTutorials); + } + + private void onFetchTutorials(List<Tutorial> tutorials) { + mTracker.addOnInitializedCallback(success -> { + if (!success) return; + + showFirstEligibleIPH(tutorials); + }); + } + + private void showFirstEligibleIPH(List<Tutorial> tutorials) { + for (Tutorial tutorial : tutorials) { + String featureName = VideoTutorialIPHUtils.getFeatureName(tutorial.featureType); + if (mTracker.shouldTriggerHelpUI(featureName)) { + mVideoIPHCoordinator.showVideoIPH(tutorial); + mTracker.dismissed(featureName); + break; + } + } + } + + private void onClickIPH(Tutorial tutorial) { + // TODO(shaktisahu): Maybe collect this event when video has been halfway watched. + mTracker.notifyEvent(VideoTutorialIPHUtils.getClickEvent(tutorial.featureType)); + + // Bring up the player and start playing the video. + } + + private void onDismissIPH(Tutorial tutorial) { + mTracker.notifyEvent(VideoTutorialIPHUtils.getDismissEvent(tutorial.featureType)); + + // TODO(shaktisahu): Animate this. Maybe add a delay. + mVideoTutorialService.getTutorials(this::onFetchTutorials); + } +}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/browserservices/QualityEnforcerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/browserservices/QualityEnforcerTest.java index 6000bce..33c927e5 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/browserservices/QualityEnforcerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/browserservices/QualityEnforcerTest.java
@@ -39,6 +39,7 @@ import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.util.browser.Features.DisableFeatures; +import org.chromium.chrome.test.util.browser.Features.EnableFeatures; import org.chromium.net.test.EmbeddedTestServerRule; import java.util.concurrent.TimeoutException; @@ -48,6 +49,7 @@ */ @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) +@EnableFeatures(ChromeFeatureList.TRUSTED_WEB_ACTIVITY_QUALITY_ENFORCEMENT) @DisableFeatures(ChromeFeatureList.TRUSTED_WEB_ACTIVITY_QUALITY_ENFORCEMENT_FORCED) public class QualityEnforcerTest { private static final String TEST_PAGE = "/chrome/test/data/android/google.html";
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/gesturenav/NavigationSheetTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/gesturenav/NavigationSheetTest.java index 2098cf1..99752f9 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/gesturenav/NavigationSheetTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/gesturenav/NavigationSheetTest.java
@@ -163,9 +163,7 @@ @MediumTest @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @CommandLineFlags.Add({"enable-features=OverscrollHistoryNavigation<GestureNavigation", - "force-fieldtrials=GestureNavigation/Enabled", - "force-fieldtrial-params=GestureNavigation.Enabled:" - + "overscroll_history_navigation_bottom_sheet/true"}) + "force-fieldtrials=GestureNavigation/Enabled"}) public void testLongPressBackTriggering() { KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK); @@ -182,9 +180,7 @@ @SmallTest @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @CommandLineFlags.Add({"enable-features=OverscrollHistoryNavigation<GestureNavigation", - "force-fieldtrials=GestureNavigation/Enabled", - "force-fieldtrial-params=GestureNavigation.Enabled:" - + "overscroll_history_navigation_bottom_sheet/true"}) + "force-fieldtrials=GestureNavigation/Enabled"}) public void testLongPressBackTriggering_Cancellation() throws ExecutionException { ChromeTabbedActivity activity = mActivityTestRule.getActivity();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/suggestions/CachedZeroSuggestionsManagerUnitTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/suggestions/CachedZeroSuggestionsManagerUnitTest.java index ffc173be..853b9c9 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/suggestions/CachedZeroSuggestionsManagerUnitTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/suggestions/CachedZeroSuggestionsManagerUnitTest.java
@@ -17,6 +17,7 @@ import org.chromium.base.test.BaseJUnit4ClassRunner; import org.chromium.base.test.UiThreadTest; import org.chromium.base.test.util.Batch; +import org.chromium.base.test.util.DisabledTest; import org.chromium.chrome.browser.omnibox.OmniboxSuggestionType; import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteResult.GroupDetails; import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; @@ -376,6 +377,7 @@ @Test @SmallTest @UiThreadTest + @DisabledTest(message = "https://crbug.com/1128298") public void rejectCacheIfSubtypesAreMalformed() { List<OmniboxSuggestion> list = Arrays.asList( createSuggestionBuilder(1, OmniboxSuggestionType.SEARCH_SUGGEST_PERSONALIZED) @@ -403,6 +405,7 @@ @Test @SmallTest @UiThreadTest + @DisabledTest(message = "https://crbug.com/1128298") public void rejectCacheIfSubtypesIncludeNull() { List<OmniboxSuggestion> list = Arrays.asList( createSuggestionBuilder(1, OmniboxSuggestionType.SEARCH_SUGGEST_PERSONALIZED)
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetRenderTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetRenderTest.java index e2619ee..e13b465f 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetRenderTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetRenderTest.java
@@ -5,10 +5,8 @@ package org.chromium.chrome.browser.signin; import static androidx.test.espresso.Espresso.onView; -import static androidx.test.espresso.action.ViewActions.click; import static androidx.test.espresso.action.ViewActions.pressBack; import static androidx.test.espresso.matcher.ViewMatchers.isRoot; -import static androidx.test.espresso.matcher.ViewMatchers.withText; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; @@ -18,6 +16,7 @@ import android.view.View; +import androidx.recyclerview.widget.RecyclerView; import androidx.test.filters.MediumTest; import org.junit.After; @@ -156,7 +155,7 @@ mAccountManagerTestRule.addAccount(PROFILE_DATA2); buildAndShowCollapsedBottomSheet(); expandBottomSheet(); - onView(withText(R.string.signin_incognito_mode_primary)).perform(click()); + openIncognitoInterstitialOnExpandedSheet(); onView(isRoot()).perform(pressBack()); mRenderTestRule.render(mCoordinator.getBottomSheetViewForTesting(), "expanded_sheet"); } @@ -239,6 +238,19 @@ mCoordinator.getBottomSheetViewForTesting(), "signin_auth_error_sheet"); } + private void openIncognitoInterstitialOnExpandedSheet() { + // RecyclerView: PROFILE_DATA1, PROFILE_DATA2, |Add account to device|, |Sign in + // temporarily| + View bottomSheetView = mCoordinator.getBottomSheetViewForTesting(); + RecyclerView accountListView = + bottomSheetView.findViewById(R.id.account_picker_account_list); + TestThreadUtils.runOnUiThreadBlocking(() -> { + accountListView.findViewHolderForAdapterPosition(3).itemView.performClick(); + }); + CriteriaHelper.pollUiThread(bottomSheetView.findViewById( + R.id.incognito_interstitial_bottom_sheet_view)::isShown); + } + private void clickContinueButtonAndWaitForErrorView() { View bottomSheetView = mCoordinator.getBottomSheetViewForTesting(); TestThreadUtils.runOnUiThreadBlocking(() -> {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetTest.java index 6cf099b..9d078c4 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetTest.java
@@ -409,7 +409,9 @@ private void checkIncognitoInterstitialSheet() { onView(withId(R.id.account_picker_bottom_sheet_logo)).check(matches(isDisplayed())); - onView(withId(R.id.account_picker_bottom_sheet_title)).check(matches(isDisplayed())); + onView(withId(R.id.account_picker_bottom_sheet_title)) + .check(matches(isDisplayed())) + .check(matches(withText(R.string.incognito_interstitial_title))); onView(withId(R.id.account_picker_bottom_sheet_subtitle)) .check(matches(not(isDisplayed()))); onView(withId(R.id.account_picker_horizontal_divider)).check(matches(not(isDisplayed())));
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTest.java index d5908147..f98ba65 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTest.java
@@ -56,7 +56,7 @@ // Signing back in should re-enable sync. mSyncTestRule.signinAndEnableSync(account); - SyncTestUtil.waitForSyncActive(); + Assert.assertTrue("Sync should be re-enabled.", SyncTestUtil.isSyncActive()); } @Test
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTestRule.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTestRule.java index 4e646ef2..0e23bf4 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTestRule.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTestRule.java
@@ -33,6 +33,7 @@ import org.chromium.chrome.browser.signin.UnifiedConsentServiceBridge; import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.util.browser.signin.AccountManagerTestRule; +import org.chromium.chrome.test.util.browser.signin.SigninTestUtil; import org.chromium.chrome.test.util.browser.sync.SyncTestUtil; import org.chromium.components.signin.base.CoreAccountInfo; import org.chromium.components.signin.metrics.SigninAccessPoint; @@ -236,7 +237,10 @@ } public void signinAndEnableSync(final Account account) { - signinAndEnableSyncInternal(account, true); + SigninTestUtil.signIn(account, mProfileSyncService); + enableUKM(); + SyncTestUtil.waitForSyncActive(); + SyncTestUtil.triggerSyncAndWaitForCompletion(); } public void signOut() {
diff --git a/chrome/app/chromeos_strings.grdp b/chrome/app/chromeos_strings.grdp index 8853fad8..bb51b79 100644 --- a/chrome/app/chromeos_strings.grdp +++ b/chrome/app/chromeos_strings.grdp
@@ -762,6 +762,12 @@ <message name="IDS_OOBE_USER_CREATION_SUBTITLE" desc="Subtitle of the screen which allows users to choose whom the device is set up for."> You can always add more people after setup. Each person can personalize their account and keep data private. </message> + <message name="IDS_OOBE_USER_CREATION_ADD_PERSON_TITLE" desc="Title of the screen which allows users to add person to the device."> + Who would you like to add to this <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>? + </message> + <message name="IDS_OOBE_USER_CREATION_ADD_PERSON_SUBTITLE" desc="Subtitle of the screen which allows users to add person to the device."> + Each person can personalize their account and keep data private. + </message> <message name="IDS_OOBE_USER_CREATION_SELF_BUTTON_LABEL" desc="The label of the button that leads to set up device for self."> You </message>
diff --git a/chrome/app/chromeos_strings_grdp/IDS_OOBE_USER_CREATION_ADD_PERSON_SUBTITLE.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_OOBE_USER_CREATION_ADD_PERSON_SUBTITLE.png.sha1 new file mode 100644 index 0000000..6633765 --- /dev/null +++ b/chrome/app/chromeos_strings_grdp/IDS_OOBE_USER_CREATION_ADD_PERSON_SUBTITLE.png.sha1
@@ -0,0 +1 @@ +01474330418644fe0dabab943e275ae7293040f1 \ No newline at end of file
diff --git a/chrome/app/chromeos_strings_grdp/IDS_OOBE_USER_CREATION_ADD_PERSON_TITLE.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_OOBE_USER_CREATION_ADD_PERSON_TITLE.png.sha1 new file mode 100644 index 0000000..6633765 --- /dev/null +++ b/chrome/app/chromeos_strings_grdp/IDS_OOBE_USER_CREATION_ADD_PERSON_TITLE.png.sha1
@@ -0,0 +1 @@ +01474330418644fe0dabab943e275ae7293040f1 \ No newline at end of file
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 96cac6f..765392e 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -10605,7 +10605,10 @@ <!-- Guest Profile Menu bubble. --> <message name="IDS_GUEST_PROFILE_MENU_CLOSE_BUTTON" desc="The text of the button offering to close all guest windows."> - Close guest + {0, plural, + =1 {Close guest} + other {Close guest} + } </message> <!-- User happiness tracking survey UI -->
diff --git a/chrome/app/generated_resources_grd/IDS_GUEST_PROFILE_MENU_CLOSE_BUTTON.png.sha1 b/chrome/app/generated_resources_grd/IDS_GUEST_PROFILE_MENU_CLOSE_BUTTON.png.sha1 index cc7e64a3..08c7a63e 100644 --- a/chrome/app/generated_resources_grd/IDS_GUEST_PROFILE_MENU_CLOSE_BUTTON.png.sha1 +++ b/chrome/app/generated_resources_grd/IDS_GUEST_PROFILE_MENU_CLOSE_BUTTON.png.sha1
@@ -1 +1 @@ -7cf633fd6fae2b7fbe23d3c3cf892c15b4dcdd07 \ No newline at end of file +d5e17649bc7e9f520e5b682e04146df8a2e1e5c4 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings.grdp b/chrome/app/os_settings_strings.grdp index 75c0d501..ea252a5 100644 --- a/chrome/app/os_settings_strings.grdp +++ b/chrome/app/os_settings_strings.grdp
@@ -298,6 +298,15 @@ <message name="IDS_OS_SETTINGS_LANGUAGES_REMOVE_INPUT_METHOD_LABEL" translateable="false" desc="Title of the dialog that lets the user remove a given keyboard layout or input method editor."> Remove <ph name="INPUT_METHOD_NAME">$1<ex>US keyboard</ex></ph>? </message> + <message name="IDS_OS_SETTINGS_LANGUAGES_SUGGESTED_INPUT_METHODS_LABEL" translateable="false" desc="Title of the list of keyboard layouts or input method editors suggested to users."> + Suggested + </message> + <message name="IDS_OS_SETTINGS_LANGUAGES_ALL_INPUT_METHODS_LABEL" translateable="false" desc="Title of the list of all keyboard layouts or input method editors."> + All input methods + </message> + <message name="IDS_OS_SETTINGS_LANGUAGES_SEARCH_INPUT_METHODS_LABEL" translateable="false" desc="Placeholder in the input field to search keyboard layouts or input method editors."> + Search input methods + </message> <message name="IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_TITLE" translateable="false" desc="Title for the section containing all the options for spell check settings. The options include picking between using the system's spell check or using Google's web service and a list of the enabled languages which support spell checking."> Spell check </message>
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb index 78e308b..089e9a0 100644 --- a/chrome/app/resources/generated_resources_af.xtb +++ b/chrome/app/resources/generated_resources_af.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Jou toestel kan met Smart Lock ontsluit word. Druk Enter om te ontsluit.</translation> <translation id="1361164813881551742">Voeg self by</translation> <translation id="1361655923249334273">Ongebruikte</translation> -<translation id="1361707011052629095">Toestelle naby jou wanneer Nabydeling oop is</translation> <translation id="1361872463926621533">Speel klank aan die begin</translation> <translation id="1362865166188278099">Meganiese kwessie. Gaan drukker na</translation> <translation id="1363585519747660921">USB-drukker moet opgestel word</translation> @@ -1476,6 +1475,7 @@ <translation id="2731700343119398978">Wag asseblief …</translation> <translation id="2731710757838467317">Skep tans jou gebruiker onder toesig. Dit kan 'n paar oomblikke neem.</translation> <translation id="2731971182069536520">Wanneer jy jou toestel volgende keer herbegin, sal jou administrateur 'n eenmalige opdatering uitvoer wat jou plaaslike data sal uitvee.</translation> +<translation id="2732134891301408122">Ekstra inhoud <ph name="CURRENT_ELEMENT" /> van <ph name="TOTAL_ELEMENTS" /></translation> <translation id="2734760316755174687">Werwe onder <ph name="SITE_GROUP_NAME" /> sal ook teruggestel word.</translation> <translation id="2735712963799620190">Skedule</translation> <translation id="2737363922397526254">Vou in …</translation> @@ -3123,6 +3123,7 @@ <translation id="4735803855089279419">Die stelsel kon nie toestelidentifiseerders vir hierdie toestel bepaal nie.</translation> <translation id="4736292055110123391">Sinkroniseer jou boekmerke, wagwoorde, geskiedenis en meer op al jou toestelle</translation> <translation id="473775607612524610">Dateer op</translation> +<translation id="473936925429402449">Ekstra inhoud <ph name="CURRENT_ELEMENT" /> van <ph name="TOTAL_ELEMENTS" /> gekies</translation> <translation id="4739639199548674512">Kaartjies</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Kom meer te wete oor hoe om programme op te dateer<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Ontdemp werf}other{Ontdemp werwe}}</translation> @@ -4145,6 +4146,7 @@ <translation id="6011449291337289699">Vee werfdata uit</translation> <translation id="6015266928248016057">Ongeldige PUK. Herprobeerslae oor: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">Jaar</translation> +<translation id="6016178549409952427">Navigeer na ekstra inhoud <ph name="CURRENT_ELEMENT" /> van <ph name="TOTAL_ELEMENTS" /></translation> <translation id="6016551720757758985">Bevestig Powerwash met terugkeer na vorige weergawe</translation> <translation id="6016972670657536680">Kies taal en sleutelbord-knoppie. Die taal wat tans gekies is, is <ph name="LANGUAGE" />.</translation> <translation id="6017514345406065928">Groen</translation> @@ -5710,7 +5712,6 @@ <translation id="7918257978052780342">Skryf in</translation> <translation id="7919210519031517829"><ph name="DURATION" /> s.</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> kan <ph name="FILENAME" /> bekyk</translation> -<translation id="7924080089023843180">Niemand nie, tensy jy Nabydeling oopmaak</translation> <translation id="7924358170328001543">Kon nie poort aanstuur nie</translation> <translation id="792514962475806987">Gedokte zoemvlak:</translation> <translation id="7925247922861151263">AAA-kontrolering het misluk</translation> @@ -6451,6 +6452,7 @@ <translation id="8811862054141704416">Crostini-mikrofoontoegang</translation> <translation id="8812552797690463522">Hierdie netwerk is met jou gedeel.</translation> <translation id="8812593354822910461">Vee ook blaaierdata uit (<ph name="URL" />), wat jou by <ph name="DOMAIN" /> kan afmeld. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Herinner my later</translation> <translation id="8813698869395535039">Kan nie by <ph name="USERNAME" /> aanmeld nie</translation> <translation id="8813872945700551674">Kry 'n ouer om "<ph name="EXTENSION_NAME" />" goed te keur</translation> <translation id="8813969267212093033">Stelselteks word in hierdie taal gewys</translation> @@ -6481,6 +6483,7 @@ <translation id="8838601485495657486">Ondeursigtig</translation> <translation id="8838770651474809439">Hamburger</translation> <translation id="883911313571074303">Maak aantekening by prent</translation> +<translation id="8841843049738266382">Lees en verander toelaatlys van gebruikers</translation> <translation id="8842594465773264717">Vee hierdie vingerafdruk uit</translation> <translation id="8845001906332463065">Kry hulp</translation> <translation id="8846132060409673887">Lees die vervaardiger en model van hierdie rekenaar</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb index 681d708..4774fd7 100644 --- a/chrome/app/resources/generated_resources_am.xtb +++ b/chrome/app/resources/generated_resources_am.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">የእርስዎ መሣሪያ በSmart Lock ሊከፈት ይችላል። ለመክፈት አስገባን ይጫኑ።</translation> <translation id="1361164813881551742">ራስዎ ያክሉ</translation> <translation id="1361655923249334273">ጥቅም ላይ ያልዋለ</translation> -<translation id="1361707011052629095">የአቅራቢያ ማጋሪያ ሲከፈት ከእርስዎ አጠገብ ያሉ መሣሪያዎች</translation> <translation id="1361872463926621533">ጅምር ላይ ድምጽ አጫውት</translation> <translation id="1362865166188278099">የመካኒካል ችግር አታሚን ይፈትሹ</translation> <translation id="1363585519747660921">ዩኤስቢ አታሚ ውቅረት ያስፈልገዋል</translation> @@ -5706,7 +5705,6 @@ <translation id="7918257978052780342">ተመዝገብ</translation> <translation id="7919210519031517829"><ph name="DURATION" /> ሴ</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> <ph name="FILENAME" />ን ማየት ይችላል</translation> -<translation id="7924080089023843180">እርስዎ በአቅራቢያ ማጋሪያን እስካልከፈቱ ድረስ ማንም ሰው</translation> <translation id="7924358170328001543">ወደብን የማስተላለፍ ስህተት</translation> <translation id="792514962475806987">የተተከለ ማጉያ ደረጃ፦</translation> <translation id="7925247922861151263">የAAA ማረጋገጥ አልተሳካም</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index b38efb3..c6c6921 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -271,7 +271,7 @@ <translation id="1307431692088049276">عدم السؤال مرة أخرى</translation> <translation id="1307559529304613120">عفوًا! تعذّر النظام في تخزين الرمز المميز للدخول طويل المدى إلى واجهة برمجة التطبيقات على هذا الجهاز.</translation> <translation id="1313162974556054106">اسم الجهاز</translation> -<translation id="1313405956111467313">تهيئة تلقائية للخادم الوكيل</translation> +<translation id="1313405956111467313">ضبط تلقائي للخادم الوكيل</translation> <translation id="131364520783682672">Caps Lock</translation> <translation id="1313660246522271310">سيتم تسجيل خروجك من جميع المواقع الإلكترونية، بما في ذلك المواقع الإلكترونية في علامات التبويب المفتوحة.</translation> <translation id="1313705515580255288">ستتم مزامنة الإشارات المرجعية والسجل وغير ذلك من الإعدادات مع حسابك على Google.</translation> @@ -312,7 +312,6 @@ <translation id="1359923111303110318">يمكن فتح قفل جهازك باستخدام Smart Lock. عليك الضغط على Enter لفتح القفل.</translation> <translation id="1361164813881551742">الإضافة يدويًا</translation> <translation id="1361655923249334273">غير مستخدم</translation> -<translation id="1361707011052629095">الأجهزة القريبة منك عندما تكون ميزة "المشاركة عن قرب" مفعَّلة</translation> <translation id="1361872463926621533">تشغيل الصوت عند بدء التشغيل</translation> <translation id="1362865166188278099">هناك مشكلة ميكانيكية. يُرجى التحقُّق من الطابعة.</translation> <translation id="1363585519747660921">طابعة USB بحاجة إلى الضبط</translation> @@ -1111,7 +1110,7 @@ <translation id="2309620859903500144">تم حظر هذا الموقع من الوصول إلى أجهزة استشعار الإضاءة أو الحركة.</translation> <translation id="2314165183524574721">الإعداد الحالي لمستوى ظهور الجهاز هو "مخفي".</translation> <translation id="2314873619957287124">يمكنك ضبط القواعد الرقمية الأساسية لمساعدة طفلك على التعلّم واللعب والاستكشاف على الإنترنت.</translation> -<translation id="2315414688463285945">حدث خطأ أثناء تهيئة ملفات نظام التشغيل Linux. يُرجى إعادة المحاولة.</translation> +<translation id="2315414688463285945">حدث خطأ أثناء إعداد ملفات نظام التشغيل Linux. يُرجى إعادة المحاولة.</translation> <translation id="2315587498123194634">إرسال الرابط إلى <ph name="DEVICE_NAME" /></translation> <translation id="2316129865977710310">لا، شكرًا</translation> <translation id="2317842250900878657">تم إكمال <ph name="PROGRESS_PERCENT" />%</translation> @@ -2835,7 +2834,7 @@ <translation id="4387890294700445764">كلمات مرور محتمَل تعرّضها للاختراق</translation> <translation id="4389091756366370506">المستخدم <ph name="VALUE" /></translation> <translation id="4390000551125140321">{0,plural, =1{نافذة واحدة للتصفّح المتخفي}zero{ما من نوافذ مفتوحة للتصفّح المتخفي}two{نافذتان مفتوحان للتصفّح المتخفي}few{# نوافذ مفتوحة للتصفّح المتخفي}many{# نافذةً مفتوحةً للتصفّح المتخفي}other{# نافذة مفتوحة للتصفّح المتخفي}}</translation> -<translation id="439266289085815679">يتم التحكّم في تهيئة البلوتوث من قِبل <ph name="USER_EMAIL" />.</translation> +<translation id="439266289085815679">يتم التحكّم في إعداد البلوتوث من قِبل <ph name="USER_EMAIL" />.</translation> <translation id="4392896746540753732">تعديل ملف الضبط</translation> <translation id="4393691030048716353">أوقف <ph name="DOMAIN" /> تفعيل خيار "تصحيح الأخطاء عبر ADB". بعد إعادة تشغيل جهاز <ph name="DEVICE_TYPE" />، لن تتمكّن من تثبيت تطبيقات من مصادر غير معروفة.</translation> <translation id="4394049700291259645">إيقاف</translation> @@ -5107,7 +5106,7 @@ <translation id="7197190419934240522">يمكنك الحصول على "بحث Google" وميزات Google الذكية في كل مرة تتصفَّح فيها.</translation> <translation id="7197632491113152433">لقد عثرنا على <ph name="NUMBER_OF_APPS" /> من التطبيقات من حسابك التي يمكن استخدامها على هذا الجهاز.</translation> <translation id="7199158086730159431">الحصول على مساعدة</translation> -<translation id="7200083590239651963">اختيار تهيئة</translation> +<translation id="7200083590239651963">اختيار إعداد</translation> <translation id="720110658997053098">تشغيل هذا الجهاز في وضع الكشك دائمًا</translation> <translation id="7201118060536064622">تم حذف "<ph name="DELETED_ITEM_NAME" />"</translation> <translation id="7201420661433230412">عرض الملفات</translation> @@ -5708,7 +5707,6 @@ <translation id="7918257978052780342">تسجيل</translation> <translation id="7919210519031517829"><ph name="DURATION" /> ثوانٍ</translation> <translation id="7920363873148656176">بإمكان <ph name="ORIGIN" /> عرض الملف <ph name="FILENAME" />.</translation> -<translation id="7924080089023843180">لا أحد ما لم تُفعِّل ميزة "المشاركة عن قرب"</translation> <translation id="7924358170328001543">خطأ في إعادة توجيه المنفذ</translation> <translation id="792514962475806987">مستوى التكبير الذي تم إرساؤه:</translation> <translation id="7925247922861151263">تعذّر فحص AAA</translation> @@ -5852,7 +5850,7 @@ <translation id="8082106343289440791">هل تريد الإقران مع جهاز "<ph name="DEVICE_NAME" />"؟</translation> <translation id="8082390128630131497">سيؤدي إيقاف خيار "تصحيح الأخطاء عبر ADB" إلى إعادة ضبط جهاز <ph name="DEVICE_TYPE" /> هذا على الإعدادات الأصلية. وسيتم محو جميع حسابات المستخدمين والبيانات المحلّية.</translation> <translation id="8084114998886531721">كلمة مرور محفوظة</translation> -<translation id="8086015605808120405">جارٍ تهيئة <ph name="PRINTER_NAME" /> ...</translation> +<translation id="8086015605808120405">جارٍ إعداد <ph name="PRINTER_NAME" /> ...</translation> <translation id="8086442853986205778">إعداد <ph name="PRINTER_NAME" /></translation> <translation id="8086550884324762001">مثلًا: ملف شخصي أو للعمل أو لطفل أو ملف باسم شخص معيّن</translation> <translation id="80866457114322936">{NUM_FILES,plural, =1{هذا الملف مشفّر. يُرجى طلب فكّ تشفيره من المالك.}zero{بعض هذه الملفات مشفّرة. يُرجى طلب فكّ تشفيرها من المالك.}two{هذان الملفان مشفّران. يُرجى طلب فكّ تشفيرهما من المالك.}few{بعض هذه الملفات مشفّرة. يُرجى طلب فكّ تشفيرها من المالك.}many{بعض هذه الملفات مشفّرة. يُرجى طلب فكّ تشفيرها من المالك.}other{بعض هذه الملفات مشفّرة. يُرجى طلب فكّ تشفيرها من المالك.}}</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb index 074acf2..fa6a2e9 100644 --- a/chrome/app/resources/generated_resources_as.xtb +++ b/chrome/app/resources/generated_resources_as.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">আপোনাৰ ডিভাইচটো স্মাৰ্ট লকৰ জৰিয়তে আনলক কৰিব পাৰি। আনলক কৰিবলৈ এণ্টাৰ টিপক।</translation> <translation id="1361164813881551742">মেনুৱেলী যোগ কৰক</translation> <translation id="1361655923249334273">অব্যৱহৃত</translation> -<translation id="1361707011052629095">নিকটৱৰ্তী শ্বেয়াৰ কৰাৰ সুবিধাটো খোলা থাকিলে আপোনাৰ ওচৰে-পাজৰে থকা ডিভাইচসমূহ</translation> <translation id="1361872463926621533">ষ্টাৰ্টআপ হওঁতে শব্দ কৰক</translation> <translation id="1362865166188278099">কাৰিকৰী সমস্যা। প্ৰিণ্টাৰ পৰীক্ষা কৰক</translation> <translation id="1363585519747660921">USB প্ৰিণ্টাৰ কনফিগাৰেশ্বন কৰা প্ৰয়োজন</translation> @@ -5697,7 +5696,6 @@ <translation id="7918257978052780342">পঞ্জীয়ন কৰক</translation> <translation id="7919210519031517829"><ph name="DURATION" />ছে</translation> <translation id="7920363873148656176"><ph name="ORIGIN" />এ <ph name="FILENAME" /> চাব পাৰে</translation> -<translation id="7924080089023843180">আপুনি নিকটৱৰ্তী শ্বেয়াৰ কৰাৰ সুবিধাটো নোখোলা পৰ্যন্ত কোনেও নোৱাৰে</translation> <translation id="7924358170328001543">প’ৰ্ট যোগ কৰাটো ফৰৱাৰ্ড কৰাৰ সময়ত আসোঁৱাহ হৈছে</translation> <translation id="792514962475806987">ড’ক কৰা জুমৰ স্তৰ:</translation> <translation id="7925247922861151263">AAA পৰীক্ষা কৰিব পৰা নগ’ল</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb index f92caef3..0f90104 100644 --- a/chrome/app/resources/generated_resources_az.xtb +++ b/chrome/app/resources/generated_resources_az.xtb
@@ -310,7 +310,6 @@ <translation id="1359923111303110318">Cihazınız Smart Lock ilə kiliddən çıxarıla bilər. Kiliddən çıxarmaq üçün Enter düyməsinə basın.</translation> <translation id="1361164813881551742">Mexaniki Əlavə Edin</translation> <translation id="1361655923249334273">İşlənməyən</translation> -<translation id="1361707011052629095">Yaxınlıqda Paylaşım xüsusiyyəti açıq olduqda yaxınlıqdakı cihazlar</translation> <translation id="1361872463926621533">Başladıqda səs çıxarılsın</translation> <translation id="1362865166188278099">Mexaniki problem. Printeri yoxlayın</translation> <translation id="1363585519747660921">USB printer konfiqurasiya edilməlidir</translation> @@ -5700,7 +5699,6 @@ <translation id="7918257978052780342">Qeydiyyatdan keçin</translation> <translation id="7919210519031517829"><ph name="DURATION" />san</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> <ph name="FILENAME" /> faylına baxa bilər</translation> -<translation id="7924080089023843180">Yaxınlıqda Paylaşımı açanadək heç kəs</translation> <translation id="7924358170328001543">Portu yönləndirərkən xəta oldu</translation> <translation id="792514962475806987">Daxili miqyas səviyyəsi:</translation> <translation id="7925247922861151263">AAA yoxlanışı uğursuz oldu</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb index 09eedf1..fd4679e 100644 --- a/chrome/app/resources/generated_resources_be.xtb +++ b/chrome/app/resources/generated_resources_be.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Разблакіроўка прылады можа ажыццяўляцца з дапамогай Smart Lock. Каб разблакіраваць яе, націсніце Enter.</translation> <translation id="1361164813881551742">Дадаць уручную</translation> <translation id="1361655923249334273">Не выкарыстоўваецца</translation> -<translation id="1361707011052629095">Прылады паблізу вас, калі ўключана функцыя "Абагульванне паблізу"</translation> <translation id="1361872463926621533">Прайграваць гук пры запуску</translation> <translation id="1362865166188278099">Механічная праблема. Праверце прынтар</translation> <translation id="1363585519747660921">Неабходна наладзіць USB-прынтар</translation> @@ -5709,7 +5708,6 @@ <translation id="7918257978052780342">Зарэгістраваць</translation> <translation id="7919210519031517829"><ph name="DURATION" /> с</translation> <translation id="7920363873148656176">Сайт <ph name="ORIGIN" /> можа праглядаць файл <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Ніхто, пакуль вы не адкрыеце "Абагульванне паблізу"</translation> <translation id="7924358170328001543">Памылка пераадрасацыі партоў</translation> <translation id="792514962475806987">Маштаб прыстыкаванай лупы:</translation> <translation id="7925247922861151263">Не ўдалося выканаць праверку AAA</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb index 432cc2d..ac5642a 100644 --- a/chrome/app/resources/generated_resources_bg.xtb +++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Устройството ви може да бъде отключвано чрез Smart Lock. Натиснете Enter, за да потвърдите.</translation> <translation id="1361164813881551742">Ръчно добавяне</translation> <translation id="1361655923249334273">Не се използва</translation> -<translation id="1361707011052629095">Устройствата в близост, когато функцията „Споделяне наблизо“ е отворена</translation> <translation id="1361872463926621533">Възпроизвеждане на звук при стартиране</translation> <translation id="1362865166188278099">Механичен проблем. Проверете принтера</translation> <translation id="1363585519747660921">Принтерът с USB трябва да бъде конфигуриран</translation> @@ -5709,7 +5708,6 @@ <translation id="7918257978052780342">Записване</translation> <translation id="7919210519031517829"><ph name="DURATION" /> сек</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> може да преглежда <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Никой друг, освен ако не отворите функцията „Споделяне наблизо“</translation> <translation id="7924358170328001543">Грешка при пренасочване на порта</translation> <translation id="792514962475806987">Ниво на мащаба при прикрепен режим:</translation> <translation id="7925247922861151263">Проверката за AAA не бе успешна</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index 44d7aa3..1e3fc6b 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Smart Lock দিয়ে আপনার ডিভাইস আনলক করা যাবে। আনলক করতে 'Enter' বোতাম প্রেস করুন।</translation> <translation id="1361164813881551742">নিজে যোগ করুন</translation> <translation id="1361655923249334273">অব্যবহৃত</translation> -<translation id="1361707011052629095">'নিয়ারবাই শেয়ার' ফিচার চালু হওয়ার পরে, আপনার আশেপাশে উপলভ্য ডিভাইস</translation> <translation id="1361872463926621533">চালু করার সময় সাউন্ড চালান</translation> <translation id="1362865166188278099">যান্ত্রিক সমস্যা হয়েছে। প্রিন্টারটি চেক করুন</translation> <translation id="1363585519747660921">ইউএসবি প্রিন্টার কনফিগার করা প্রয়োজন</translation> @@ -2638,6 +2637,7 @@ <translation id="4104163789986725820">র&প্তানি...</translation> <translation id="4107048419833779140">স্টোরেজ ডিভাইসগুলি শনাক্ত করে সরিয়ে দিন</translation> <translation id="4109135793348361820"><ph name="USER_NAME" /> (<ph name="USER_EMAIL" />) এ উইন্ডো সরান</translation> +<translation id="411031910327788420">এই সেটিং কাজ করে এমন অ্যাপের জন্য ক্যাপশনের সাইজ এবং স্টাইল কাস্টমাইজ করুন</translation> <translation id="4110490973560452005">ডাউনলোড হয়ে গেছে: <ph name="FILE_NAME" />। Shift+F6 প্রেস করে ডাউনলোড বার এরিয়াতে যান।</translation> <translation id="4110686435123617899"><ph name="TITLE" /> <ph name="DESC" /> অ্যালবাম বেছে নিন</translation> <translation id="4110895898888439383">উচ্চ কনট্রাস্ট মোডে ওয়েব ব্রাউজ করুন</translation> @@ -2837,6 +2837,7 @@ <translation id="4390000551125140321">{0,plural, =1{ছদ্মবেশী মোড}one{ছদ্মবেশী মোডে #টি উইন্ডো খোলা আছে}other{ছদ্মবেশী মোডে #টি উইন্ডো খোলা আছে}}</translation> <translation id="439266289085815679"><ph name="USER_EMAIL" /> এর মাধ্যমে ব্লুটুথ কনফিগারেশন নিয়ন্ত্রিত হয়।</translation> <translation id="4392896746540753732">কনফিগারেশন ফাইল এডিট করুন</translation> +<translation id="4393691030048716353"><ph name="DOMAIN" /> ADB ডিবাগিং বন্ধ করে দিয়েছে। আপনার <ph name="DEVICE_TYPE" /> রিস্টার্ট করার পরে, আর কোনও অ্যাপ সাইডলোড করতে পারবেন না।</translation> <translation id="4394049700291259645">বন্ধ</translation> <translation id="439817266247065935">আপনার ডিভাইস সঠিকভাবে বন্ধ করা হয়নি। Linux অ্যাপ ব্যবহার করার জন্য Linux রিস্টার্ট করুন।</translation> <translation id="4400367121200150367">যে সাইটগুলি কখনও পাসওয়ার্ড সংরক্ষণ করে না সেগুলি এখানে দেখা যাবে</translation> @@ -3526,6 +3527,7 @@ <translation id="5265797726250773323">ইনস্টল করার সময় সমস্যা</translation> <translation id="5266113311903163739">শংসাকরণ কর্তৃপক্ষ আমদানি ত্রুটি</translation> <translation id="5269977353971873915">প্রিন্ট করা যায়নি</translation> +<translation id="5274738462757057090">এই ফিচারের সাহায্যে মিডিয়ার জন্য Chrome browser-এ অটোমেটিক ক্যাপশন তৈরি করতে পারবেন (বর্তমানে কেবলমাত্র ইংরেজিতে উপলভ্য)</translation> <translation id="5275352920323889391">কুকুর</translation> <translation id="527605982717517565">সর্বদা <ph name="HOST" />-এ জাভাস্ক্রিপ্ট মঞ্জুর করুন</translation> <translation id="5278823018825269962">স্ট্যাটাস আইডি</translation> @@ -3962,6 +3964,7 @@ <translation id="5794700615121138172">Linux-এর শেয়ার করা ফোল্ডার</translation> <translation id="5794786537412027208">সব Chrome অ্যাপ বন্ধ করুন</translation> <translation id="5797070761912323120">সার্চ, বিজ্ঞাপন এবং অন্যান্য Google পরিষেবাকে আপনার মতো করে সাজিয়ে নিতে Google আপনার ইতিহাস ব্যবহার করতে পারে</translation> +<translation id="5798301976526354562">টেক্সট সাইজ (লাইভ ক্যাপশনের ক্ষেত্রেও প্রযোজ্য)</translation> <translation id="579915268381781820">আপনার নিরাপত্তা কী খুলে নেওয়া হয়েছে।</translation> <translation id="5799508265798272974">Linux ভার্চুয়াল মেশিন: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">শেষ ডাউনলোড থেকে গন্তব্য ফাইল হয় ছাঁটকাট অথবা সরানো হয়েছে৷</translation> @@ -4871,6 +4874,7 @@ <translation id="6911324888870229398">নেটওয়ার্ক সংযোগ কেটে গেছে। অনুগ্রহ করে আপনার সংযোগ যাচাই করুন অথবা অন্য ওয়াই-ফাই নেটওয়ার্ক ব্যবহার করে দেখুন।</translation> <translation id="6911734910326569517">মেমরি ফুটপ্রিন্ট</translation> <translation id="6912007319859991306">মোবাইল সিম কার্ডের পিন</translation> +<translation id="691289340230098384">ক্যাপশন সংক্রান্ত পছন্দ</translation> <translation id="6914783257214138813">এক্সপোর্ট করা ফাইল যারা দেখতে পান তারা আপনার পাসওয়ার্ডগুলিও দেখতে পাবেন।</translation> <translation id="6915804003454593391">ব্যবহারকারী:</translation> <translation id="6916590542764765824">এক্সটেনশানগুলি পরিচালনা করুন</translation> @@ -5703,7 +5707,6 @@ <translation id="7918257978052780342">নথিভুক্ত করুন</translation> <translation id="7919210519031517829"><ph name="DURATION" /> সেকেন্ড</translation> <translation id="7920363873148656176"><ph name="ORIGIN" />, <ph name="FILENAME" /> নামের ফাইলটি দেখতে পারবে</translation> -<translation id="7924080089023843180">আপনি 'নিয়ারবাই শেয়ার' ফিচার চালু না করা পর্যন্ত কেউ আপনার ডিভাইস দেখতে পাবেন না</translation> <translation id="7924358170328001543">পোর্ট ফরওয়ার্ড করার সময় কোনও সমস্যা হয়েছে</translation> <translation id="792514962475806987">ডক করা জুম লেভেল:</translation> <translation id="7925247922861151263">AAA চেক করা যায়নি</translation> @@ -6157,6 +6160,7 @@ <translation id="8467326454809944210">অন্য ভাষা বেছে নিন</translation> <translation id="8470214316007448308">অন্যান্য লোকজন</translation> <translation id="8470513973197838199"><ph name="ORIGIN" /> এর জন্য সেভ করা পাসওয়ার্ডগুলি</translation> +<translation id="8471256130228705232"><ph name="DOMAIN" /> ADB ডিবাগিং বন্ধ করে দিচ্ছে। এটি করলে ২৪ ঘণ্টায় আপনার <ph name="DEVICE_TYPE" /> রিসেট হয়ে যাবে। কোনও ফাইল রাখতে চাইলে, সেটির ব্যাক-আপ নিন।</translation> <translation id="8472623782143987204">hardware-backed</translation> <translation id="8473863474539038330">ঠিকানা ও আরও অনেককিছু</translation> <translation id="8475313423285172237">আপনার কম্পিউটারের অন্য একটি প্রোগ্রাম এক্সটেনশন যোগ করেছে যা Chrome-এর কাজ করার ধরন পাল্টে দিতে পারে৷</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb index f879002..6b738bf9 100644 --- a/chrome/app/resources/generated_resources_bs.xtb +++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Vaš uređaj se može otključati pomoću Smart Locka. Pritisnite Enter da ga otključate.</translation> <translation id="1361164813881551742">Dodaj ručno</translation> <translation id="1361655923249334273">Ne koristi se</translation> -<translation id="1361707011052629095">Uređaji u vašoj blizini kada je otvoreno Dijeljenje u blizini</translation> <translation id="1361872463926621533">Reproduciraj zvuk pri pokretanju</translation> <translation id="1362865166188278099">Mehanički problem. Provjerite štampač</translation> <translation id="1363585519747660921">Potrebno je konfigurirati USB štampač</translation> @@ -1476,6 +1475,7 @@ <translation id="2731700343119398978">Pričekajte...</translation> <translation id="2731710757838467317">Izrađuje se zaštićeni korisnik. To može potrajati nekoliko trenutaka.</translation> <translation id="2731971182069536520">Kada sljedeći put ponovo pokrenete uređaj, vaš administrator će izvršiti jednokratno ažuriranje kojim će se izbrisati vaši lokalni podaci.</translation> +<translation id="2732134891301408122">Dodatni sadržaj <ph name="CURRENT_ELEMENT" /> od <ph name="TOTAL_ELEMENTS" /></translation> <translation id="2734760316755174687">Poništit će se i web lokacije iz grupe <ph name="SITE_GROUP_NAME" />.</translation> <translation id="2735712963799620190">Raspored</translation> <translation id="2737363922397526254">Suzi…</translation> @@ -3123,6 +3123,7 @@ <translation id="4735803855089279419">Sistem nije uspio odrediti identifikatore uređaja za ovaj uređaj.</translation> <translation id="4736292055110123391">Sinhronizirajte oznake, lozinke, historije i drugo na svim svojim uređajima</translation> <translation id="473775607612524610">Ažuriraj</translation> +<translation id="473936925429402449">Odabrano, dodatni sadržaj <ph name="CURRENT_ELEMENT" /> od <ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Tiketi</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Saznajte kako ažurirati aplikacije<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Omogući zvuk na web lokaciji}one{Omogući zvuk na web lokacijama}few{Omogući zvuk na web lokacijama}other{Omogući zvuk na web lokacijama}}</translation> @@ -4144,6 +4145,7 @@ <translation id="6011449291337289699">Brisanje podataka web lokacije</translation> <translation id="6015266928248016057">Nevažeći PUK. Preostali broj pokušaja: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">Godina</translation> +<translation id="6016178549409952427">Idite na dodatni sadržaj <ph name="CURRENT_ELEMENT" /> od <ph name="TOTAL_ELEMENTS" /></translation> <translation id="6016551720757758985">Potvrdite Powerwash uz povratak na prethodnu verziju</translation> <translation id="6016972670657536680">Dugme za odabir jezika i tastature Trenutno odabrani jezik je <ph name="LANGUAGE" />.</translation> <translation id="6017514345406065928">Zelena</translation> @@ -5709,7 +5711,6 @@ <translation id="7918257978052780342">Registriraj</translation> <translation id="7919210519031517829"><ph name="DURATION" /> s</translation> <translation id="7920363873148656176">Web lokacija <ph name="ORIGIN" /> može pregledati <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Niko osim ako ne otvorite Dijeljenje u blizini</translation> <translation id="7924358170328001543">Greška pri prosljeđivanju priključka</translation> <translation id="792514962475806987">Nivo priključenog povećala:</translation> <translation id="7925247922861151263">AAA provjera nije uspjela</translation> @@ -6451,6 +6452,7 @@ <translation id="8811862054141704416">Pristup mikrofonu na Crostiniju</translation> <translation id="8812552797690463522">Ova mreža se dijeli s vama.</translation> <translation id="8812593354822910461">Također obrišite podatke pregledanja (<ph name="URL" />), što vas može odjaviti s domene <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Podsjeti me kasnije</translation> <translation id="8813698869395535039">Nije se moguće prijaviti na <ph name="USERNAME" /></translation> <translation id="8813872945700551674">Zatraži od roditelja da odobri ekstenziju "<ph name="EXTENSION_NAME" />"</translation> <translation id="8813969267212093033">Tekst sistema je prikazan na ovom jeziku</translation> @@ -6481,6 +6483,7 @@ <translation id="8838601485495657486">Neprovidno</translation> <translation id="8838770651474809439">Hamburger</translation> <translation id="883911313571074303">Dodaj bilješku slici</translation> +<translation id="8841843049738266382">čitati i mijenjati korisnike na popisu dopuštenih</translation> <translation id="8842594465773264717">Izbriši ovaj otisak prsta</translation> <translation id="8845001906332463065">Potražite pomoć</translation> <translation id="8846132060409673887">Čitanje proizvođača i modela računara</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index 940a9a6..1d4ac00 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">El dispositiu es pot desbloquejar amb Smart Lock. Prem Retorn per desbloquejar-lo.</translation> <translation id="1361164813881551742">Afegeix manualment</translation> <translation id="1361655923249334273">No utilitzat</translation> -<translation id="1361707011052629095">Els dispositius a prop teu quan la funció Compartició Nearby està oberta</translation> <translation id="1361872463926621533">Reprodueix un so a l'inici</translation> <translation id="1362865166188278099">Problema mecànic. Comprova la impressora.</translation> <translation id="1363585519747660921">La impressora USB s'ha de configurar</translation> @@ -1475,6 +1474,7 @@ <translation id="2731700343119398978">Espereu...</translation> <translation id="2731710757838467317">S'està creant l'usuari supervisat. Pot ser que aquest procés tardi una estona.</translation> <translation id="2731971182069536520">La propera vegada que reiniciïs el dispositiu, l'administrador durà a terme una actualització amb què se suprimiran les teves dades locals.</translation> +<translation id="2732134891301408122">Contingut addicional, <ph name="CURRENT_ELEMENT" /> de <ph name="TOTAL_ELEMENTS" /></translation> <translation id="2734760316755174687">Els llocs web del domini <ph name="SITE_GROUP_NAME" /> també es restabliran.</translation> <translation id="2735712963799620190">Programació</translation> <translation id="2737363922397526254">Redueix...</translation> @@ -3121,6 +3121,7 @@ <translation id="4735803855089279419">El sistema no ha pogut determinar els identificadors d'aquest dispositiu.</translation> <translation id="4736292055110123391">Sincronitza les adreces d'interès, les contrasenyes, l'historial i altres elements en tots els dispositius</translation> <translation id="473775607612524610">Actualitza</translation> +<translation id="473936925429402449">Seleccionat, contingut addicional, <ph name="CURRENT_ELEMENT" /> de <ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Tiquets</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Obtén informació sobre com s'actualitzen les aplicacions<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Activa el so del lloc web}other{Activa el so dels llocs web}}</translation> @@ -4144,6 +4145,7 @@ <translation id="6011449291337289699">Esborra les dades dels llocs</translation> <translation id="6015266928248016057">El PUK no és vàlid. Intents restants: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">Any</translation> +<translation id="6016178549409952427">Navega pel contingut addicional, <ph name="CURRENT_ELEMENT" /> de <ph name="TOTAL_ELEMENTS" /></translation> <translation id="6016551720757758985">Confirmació de Powerwash amb retorn a la versió anterior</translation> <translation id="6016972670657536680">Botó per seleccionar l’idioma i el teclat. L'idioma seleccionat actualment és: <ph name="LANGUAGE" />.</translation> <translation id="6017514345406065928">Verd</translation> @@ -5709,7 +5711,6 @@ <translation id="7918257978052780342">Inscriu</translation> <translation id="7919210519031517829"><ph name="DURATION" /> s</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> pot veure <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Ningú, tret que obris la funció Compartició Nearby</translation> <translation id="7924358170328001543">Error en redireccionar el port</translation> <translation id="792514962475806987">Nivell de zoom acoblat:</translation> <translation id="7925247922861151263">Error en la comprovació d'AAA</translation> @@ -6451,6 +6452,7 @@ <translation id="8811862054141704416">Accés al micròfon de Crostini</translation> <translation id="8812552797690463522">Aquesta xarxa està compartida amb tu.</translation> <translation id="8812593354822910461">Esborra també les dades de navegació (<ph name="URL" />). En fer-ho, se't tancarà la sessió del domini <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Recorda-m'ho més tard</translation> <translation id="8813698869395535039">No es pot iniciar la sessió a <ph name="USERNAME" /></translation> <translation id="8813872945700551674">Demana als teus pares que aprovin "<ph name="EXTENSION_NAME" />"</translation> <translation id="8813969267212093033">El text del sistema es mostra en aquest idioma</translation> @@ -6481,6 +6483,7 @@ <translation id="8838601485495657486">Opac</translation> <translation id="8838770651474809439">Hamburguesa</translation> <translation id="883911313571074303">Afegeix una anotació a la imatge</translation> +<translation id="8841843049738266382">Llegir i canviar els usuaris de la llista de permesos</translation> <translation id="8842594465773264717">Suprimeix aquesta empremta digital</translation> <translation id="8845001906332463065">Obteniu ajuda</translation> <translation id="8846132060409673887">Consultar el fabricant i el model d'aquest ordinador</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb index 869564b..c308e2e 100644 --- a/chrome/app/resources/generated_resources_cs.xtb +++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Vaše zařízení lze odemknout pomocí funkce Smart Lock. Odemknete ho stisknutím klávesy Enter.</translation> <translation id="1361164813881551742">Přidat ručně</translation> <translation id="1361655923249334273">Nepoužit</translation> -<translation id="1361707011052629095">Zařízení, která jsou poblíž, když je zapnuté sdílení nablízko</translation> <translation id="1361872463926621533">Přehrát zvuk při spuštění</translation> <translation id="1362865166188278099">Mechanický problém. Zkontrolujte tiskárnu</translation> <translation id="1363585519747660921">Tiskárnu USB je potřeba nakonfigurovat</translation> @@ -1475,6 +1474,7 @@ <translation id="2731700343119398978">Čekejte prosím...</translation> <translation id="2731710757838467317">Vytváření dozorovaného uživatele. Může to chvíli trvat.</translation> <translation id="2731971182069536520">Až příště zařízení restartujete, administrátor provede jednorázovou aktualizaci, která vymaže vaše místní data.</translation> +<translation id="2732134891301408122">Extra obsah <ph name="CURRENT_ELEMENT" /> z <ph name="TOTAL_ELEMENTS" /></translation> <translation id="2734760316755174687">Budou resetovány i weby ve skupině <ph name="SITE_GROUP_NAME" />.</translation> <translation id="2735712963799620190">Plán</translation> <translation id="2737363922397526254">Sbalit...</translation> @@ -3121,6 +3121,7 @@ <translation id="4735803855089279419">Systému se nepodařilo zjistit identifikátory tohoto zařízení.</translation> <translation id="4736292055110123391">Synchronizujte záložky, hesla, historii a další údaje do všech svých zařízení</translation> <translation id="473775607612524610">Aktualizovat</translation> +<translation id="473936925429402449">Vybráno, extra obsah <ph name="CURRENT_ELEMENT" /> z <ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Lístky</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Přečtěte si, jak aktualizovat aplikace<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Zapnout zvuk webu}few{Zapnout zvuk webů}many{Zapnout zvuk webů}other{Zapnout zvuk webů}}</translation> @@ -4142,6 +4143,7 @@ <translation id="6011449291337289699">Vymazání dat webu</translation> <translation id="6015266928248016057">Neplatný kód PUK. Zbývající pokusy: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">Rok</translation> +<translation id="6016178549409952427">Přejít k extra obsahu <ph name="CURRENT_ELEMENT" /> z <ph name="TOTAL_ELEMENTS" /></translation> <translation id="6016551720757758985">Potvrďte obnovení pomocí funkce Powerwash a návrat k předchozí verzi aplikace</translation> <translation id="6016972670657536680">Tlačítko pro výběr jazyka a klávesnice. Aktuálně je vybrána <ph name="LANGUAGE" />.</translation> <translation id="6017514345406065928">Zelená</translation> @@ -5707,7 +5709,6 @@ <translation id="7918257978052780342">Zaregistrovat</translation> <translation id="7919210519031517829"><ph name="DURATION" /> s</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> může číst soubor <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Nikdo, pokud neotevřete sdílení nablízko</translation> <translation id="7924358170328001543">Při přesměrování portu došlo k chybě</translation> <translation id="792514962475806987">Úroveň přiblížení zadokované lupy:</translation> <translation id="7925247922861151263">Selhala bezpečnostní kontrola AAA</translation> @@ -6448,6 +6449,7 @@ <translation id="8811862054141704416">Přístup Crostini k mikrofonu</translation> <translation id="8812552797690463522">Tato síť je s vámi sdílena.</translation> <translation id="8812593354822910461">Také vymazat údaje o prohlížení (<ph name="URL" />), což může vést k odhlášení z domény <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Připomenout později</translation> <translation id="8813698869395535039">Přihlášení k účtu <ph name="USERNAME" /> se nezdařilo</translation> <translation id="8813872945700551674">Požádejte rodiče o schválení rozšíření <ph name="EXTENSION_NAME" /></translation> <translation id="8813969267212093033">V tomto jazyce je zobrazen text systému</translation> @@ -6478,6 +6480,7 @@ <translation id="8838601485495657486">Neprůhledné</translation> <translation id="8838770651474809439">Hamburger</translation> <translation id="883911313571074303">Přidat k obrázku poznámku</translation> +<translation id="8841843049738266382">Čtení a změna uživatelů na seznamu povolených</translation> <translation id="8842594465773264717">Smazat tento otisk prstu</translation> <translation id="8845001906332463065">Nápověda</translation> <translation id="8846132060409673887">Zjistit výrobce a model počítače</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb index a1cf7b6..37d18d0 100644 --- a/chrome/app/resources/generated_resources_da.xtb +++ b/chrome/app/resources/generated_resources_da.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Din enhed kan låses op ved hjælp af Smart Lock. Tryk på Enter for at låse op.</translation> <translation id="1361164813881551742">Tilføj manuelt</translation> <translation id="1361655923249334273">Ikke brugt</translation> -<translation id="1361707011052629095">Enheder i nærheden, når "Deling tæt på" er åben</translation> <translation id="1361872463926621533">Afspil lyd ved opstart</translation> <translation id="1362865166188278099">Der er et teknisk problem med printeren. Tjek printeren</translation> <translation id="1363585519747660921">USB-printeren skal konfigureres</translation> @@ -1476,6 +1475,7 @@ <translation id="2731700343119398978">Vent et øjeblik...</translation> <translation id="2731710757838467317">Din administrerede bruger oprettes. Dette kan tage et øjeblik.</translation> <translation id="2731971182069536520">Næste gang du genstarter din enhed, udfører din administrator en engangsopdatering, der sletter dine lokale data.</translation> +<translation id="2732134891301408122">Yderligere indhold <ph name="CURRENT_ELEMENT" /> ud af <ph name="TOTAL_ELEMENTS" /></translation> <translation id="2734760316755174687">Websites i <ph name="SITE_GROUP_NAME" /> bliver også nulstillet.</translation> <translation id="2735712963799620190">Tidsplan</translation> <translation id="2737363922397526254">Skjul...</translation> @@ -3123,6 +3123,7 @@ <translation id="4735803855089279419">Systemet kunne ikke fastslå enheds-id'erne for denne enhed.</translation> <translation id="4736292055110123391">Synkroniser dine bogmærker, dine adgangskoder, din historik og meget mere på alle dine enheder</translation> <translation id="473775607612524610">Opdater</translation> +<translation id="473936925429402449">Valgt, yderligere indhold <ph name="CURRENT_ELEMENT" /> ud af<ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Billetter</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Se, hvordan du opdaterer apps<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Slå lyden til på dette website}one{Slå lyden til på dette website}other{Slå lyden til på disse websites}}</translation> @@ -4144,6 +4145,7 @@ <translation id="6011449291337289699">Ryd websitedata</translation> <translation id="6015266928248016057">PUK-koden er ugyldig. Antal resterende forsøg: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">År</translation> +<translation id="6016178549409952427">Gå til yderligere indhold <ph name="CURRENT_ELEMENT" /> ud af<ph name="TOTAL_ELEMENTS" /></translation> <translation id="6016551720757758985">Bekræft Powerwash med nulstilling til forrige version</translation> <translation id="6016972670657536680">Vælg sprog og tastaturknap. <ph name="LANGUAGE" /> er i øjeblikket valgt som sprog.</translation> <translation id="6017514345406065928">Grøn</translation> @@ -5709,7 +5711,6 @@ <translation id="7918257978052780342">Tilmeld dig</translation> <translation id="7919210519031517829"><ph name="DURATION" /> sek.</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> kan se <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Ingen, medmindre du åbner "Deling tæt på"</translation> <translation id="7924358170328001543">Fejl i forbindelse med omdirigering af port</translation> <translation id="792514962475806987">Zoomniveau i fastgjort lupvindue</translation> <translation id="7925247922861151263">AAA-kontrol mislykkedes</translation> @@ -6452,6 +6453,7 @@ <translation id="8811862054141704416">Adgang til mikrofonen i Crostini</translation> <translation id="8812552797690463522">Dette netværk er delt med dig.</translation> <translation id="8812593354822910461">Ryd også browserdata (<ph name="URL" />), hvilket muligvis logger dig ud af <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Påmind mig senere</translation> <translation id="8813698869395535039">Det var ikke muligt at logge ind på <ph name="USERNAME" /></translation> <translation id="8813872945700551674">Bed din forælder om at godkende "<ph name="EXTENSION_NAME" />"</translation> <translation id="8813969267212093033">Systemteksten vises på dette sprog</translation> @@ -6482,6 +6484,7 @@ <translation id="8838601485495657486">Uigennemsigtig</translation> <translation id="8838770651474809439">Hamburger</translation> <translation id="883911313571074303">Annoter billede</translation> +<translation id="8841843049738266382">Se og rediger brugere på tilladelseslisten</translation> <translation id="8842594465773264717">Slet dette fingeraftryk</translation> <translation id="8845001906332463065">Få hjælp</translation> <translation id="8846132060409673887">Læs computerens producent og model</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb index 995b513..d33442a 100644 --- a/chrome/app/resources/generated_resources_de.xtb +++ b/chrome/app/resources/generated_resources_de.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Ihr Gerät kann mit Smart Lock entsperrt werden. Drücken Sie zum Entsperren die Eingabetaste.</translation> <translation id="1361164813881551742">Manuell hinzufügen</translation> <translation id="1361655923249334273">Nicht verwendet</translation> -<translation id="1361707011052629095">Geräte in der Nähe, wenn Nearby Share geöffnet ist</translation> <translation id="1361872463926621533">Ton beim Start abspielen</translation> <translation id="1362865166188278099">Mechanischer Fehler. Drucker prüfen.</translation> <translation id="1363585519747660921">USB-Drucker muss konfiguriert werden</translation> @@ -1399,7 +1398,7 @@ <translation id="2649045351178520408">Base64-codierter ASCII-Code, Zertifikatkette</translation> <translation id="2653033005692233957">Fehler bei der Suche</translation> <translation id="2653266418988778031">Wenn Sie das Zertifikat einer Zertifizierungsstelle (CA) löschen, vertraut Ihr Server keinen von dieser Zertifizierungsstelle ausgestellten Zertifikaten mehr.</translation> -<translation id="2653275834716714682">Textersetzung</translation> +<translation id="2653275834716714682">Text ersetzen</translation> <translation id="2653659639078652383">Senden</translation> <translation id="265390580714150011">Feldwert</translation> <translation id="2654166010170466751">Installation von Zahlungs-Handlern auf Websites zulassen</translation> @@ -2636,6 +2635,7 @@ <translation id="4104163789986725820">E&xportieren...</translation> <translation id="4107048419833779140">Speichergeräte ermitteln und auswerfen</translation> <translation id="4109135793348361820">Fenster zu <ph name="USER_NAME" /> (<ph name="USER_EMAIL" />) verschieben</translation> +<translation id="411031910327788420">Größe und Stil der Untertitel in Apps anpassen, die diese Einstellung unterstützen</translation> <translation id="4110490973560452005">Download abgeschlossen: <ph name="FILE_NAME" />. Drücken Sie Umschalttaste + F6, um zum Bereich mit der Downloadleiste zu wechseln.</translation> <translation id="4110686435123617899">Album <ph name="TITLE" /> <ph name="DESC" /> auswählen</translation> <translation id="4110895898888439383">Das Web in Modus mit hohem Kontrast durchsuchen</translation> @@ -2835,6 +2835,7 @@ <translation id="4390000551125140321">{0,plural, =1{Inkognito}other{# offene Inkognitofenster}}</translation> <translation id="439266289085815679">Die Bluetooth-Konfiguration wird von <ph name="USER_EMAIL" /> festgelegt.</translation> <translation id="4392896746540753732">Konfigurationsdatei bearbeiten</translation> +<translation id="4393691030048716353"><ph name="DOMAIN" /> hat die ADB-Fehlerbehebung deaktiviert. Wenn Sie Ihr/Ihren <ph name="DEVICE_TYPE" /> neu starten, können Sie keine Apps per Sideload übertragen.</translation> <translation id="4394049700291259645">Deaktivieren</translation> <translation id="439817266247065935">Ihr Gerät wurde nicht ordnungsgemäß heruntergefahren. Starten Sie Linux neu, um Linux-Apps zu verwenden.</translation> <translation id="4400367121200150367">Hier werden Websites angezeigt, für die keine Passwörter gespeichert werden</translation> @@ -3120,7 +3121,7 @@ <translation id="4739639199548674512">Tickets</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Hier finden Sie Informationen zum Aktualisieren von Anwendungen<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Stummschaltung für Website aufheben}other{Stummschaltung für Websites aufheben}}</translation> -<translation id="4746351372139058112">Nachrichten</translation> +<translation id="4746351372139058112">Messages</translation> <translation id="4750394297954878236">Vorschläge</translation> <translation id="475088594373173692">Erster Nutzer</translation> <translation id="4751476147751820511">Bewegungs- oder Lichtsensoren</translation> @@ -3450,7 +3451,7 @@ <translation id="5175379009094579629">Der Gerätename ist ungültig. Geben Sie einen gültigen Gerätenamen ein, um es noch einmal zu versuchen.</translation> <translation id="5177479852722101802">Zugriff auf Kamera und Mikrofon weiter blockieren</translation> <translation id="5177549709747445269">Sie nutzen mobile Daten.</translation> -<translation id="5178667623289523808">Vorherige Übereinstimmung suchen</translation> +<translation id="5178667623289523808">Weitersuchen (rückwärts)</translation> <translation id="5181140330217080051">Download wird ausgeführt...</translation> <translation id="5184063094292164363">&JavaScript-Konsole</translation> <translation id="5184209580557088469">Ein Ticket mit diesem Nutzernamen ist bereits vorhanden</translation> @@ -3524,6 +3525,7 @@ <translation id="5265797726250773323">Fehler bei der Installation</translation> <translation id="5266113311903163739">Zertifizierungsstelle - Fehler beim Import</translation> <translation id="5269977353971873915">Fehler beim Drucken</translation> +<translation id="5274738462757057090">Erstellt automatisch Untertitel für Medien in Chrome (zurzeit nur auf Englisch verfügbar)</translation> <translation id="5275352920323889391">Hund</translation> <translation id="527605982717517565">JavaScript auf <ph name="HOST" /> immer zulassen</translation> <translation id="5278823018825269962">Status-ID</translation> @@ -3554,7 +3556,7 @@ <translation id="5301751748813680278">Anmeldung als Gast</translation> <translation id="5301954838959518834">Ok</translation> <translation id="5302048478445481009">Sprache</translation> -<translation id="5302932258331363306">Ersetzungen anzeigen</translation> +<translation id="5302932258331363306">Ersetzungen einblenden</translation> <translation id="5305688511332277257">Keine installiert</translation> <translation id="5307030433605830021">Quelle nicht unterstützt</translation> <translation id="5308380583665731573">Verbinden</translation> @@ -3959,6 +3961,7 @@ <translation id="5794700615121138172">Freigegebene Linux-Ordner</translation> <translation id="5794786537412027208">Alle Chrome-Apps beenden</translation> <translation id="5797070761912323120">Anhand Ihres Verlaufs kann Google die Google Suche, Werbung und andere Google-Dienste personalisieren</translation> +<translation id="5798301976526354562">Textgröße (gilt auch für "Automatische Untertitel")</translation> <translation id="579915268381781820">Ihr Sicherheitsschlüssel wurde entfernt.</translation> <translation id="5799508265798272974">Virtuelle Maschine für Linux: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Die Zieldatei wurde seit dem letzen Download gekürzt oder entfernt.</translation> @@ -4509,9 +4512,9 @@ <translation id="6456955391422100996">Werbeanzeige entfernt.</translation> <translation id="645705751491738698">JavaScript weiterhin blockieren</translation> <translation id="6458701200018867744">Upload fehlgeschlagen (<ph name="WEBRTC_LOG_UPLOAD_TIME" />).</translation> -<translation id="6459488832681039634">Auswahl suchen</translation> +<translation id="6459488832681039634">Auswahl für Suche übernehmen</translation> <translation id="6459799433792303855">Aktives Fenster auf anderen Bildschirm verschoben.</translation> -<translation id="6460601847208524483">Nächste Übereinstimmung suchen</translation> +<translation id="6460601847208524483">Weitersuchen (vorwärts)</translation> <translation id="6461170143930046705">Netzwerke werden gesucht…</translation> <translation id="6463795194797719782">B&earbeiten</translation> <translation id="6465841119675156448">Ohne Internet</translation> @@ -4867,6 +4870,7 @@ <translation id="6911324888870229398">Die Netzwerkverbindung wurde unterbrochen. Bitte überprüfen Sie Ihre Verbindung oder stellen Sie eine Verbindung zu einem anderen WLAN her.</translation> <translation id="6911734910326569517">Speicherbedarf</translation> <translation id="6912007319859991306">PIN für SIM-Karte</translation> +<translation id="691289340230098384">Untertitel-Einstellungen</translation> <translation id="6914783257214138813">Ihre Passwörter sind für jeden zugänglich, der die exportierte Passwortdatei aufrufen kann.</translation> <translation id="6915804003454593391">Nutzer: </translation> <translation id="6916590542764765824">Erweiterungen verwalten</translation> @@ -5700,7 +5704,6 @@ <translation id="7918257978052780342">Anmelden</translation> <translation id="7919210519031517829"><ph name="DURATION" /> s</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> darf <ph name="FILENAME" /> aufrufen</translation> -<translation id="7924080089023843180">Niemand, solange ich Nearby Share nicht selbst öffne</translation> <translation id="7924358170328001543">Fehler bei der Portweiterleitung</translation> <translation id="792514962475806987">Zoomstufe für angedockte Lupe:</translation> <translation id="7925247922861151263">AAA-Prüfung fehlgeschlagen</translation> @@ -6154,6 +6157,7 @@ <translation id="8467326454809944210">Andere Sprache auswählen</translation> <translation id="8470214316007448308">Andere Personen</translation> <translation id="8470513973197838199">Gespeicherte Passwörter für <ph name="ORIGIN" /></translation> +<translation id="8471256130228705232"><ph name="DOMAIN" /> deaktiviert die ADB-Fehlerbehebung. Dadurch wird Ihr <ph name="DEVICE_TYPE" /> in 24 Stunden zurückgesetzt. Sichern Sie alle Dateien, die Sie behalten möchten.</translation> <translation id="8472623782143987204">Hardwaregestützt</translation> <translation id="8473863474539038330">Adressen</translation> <translation id="8475313423285172237">Ein anderes Programm auf Ihrem Computer hat eine Erweiterung hinzugefügt, die sich möglicherweise auf die Funktionsweise von Chrome auswirkt.</translation> @@ -6315,7 +6319,7 @@ <translation id="8667328578593601900"><ph name="FULLSCREEN_ORIGIN" /> wird nun im Vollbildmodus angezeigt und hat Ihren Cursor deaktiviert.</translation> <translation id="8669284339312441707">Wärmer</translation> <translation id="867085395664725367">Ein temporärer Serverfehler ist aufgetreten.</translation> -<translation id="8673026256276578048">Suche im Web...</translation> +<translation id="8673026256276578048">Im Web suchen...</translation> <translation id="8673383193459449849">Serverfehler</translation> <translation id="8675354002693747642">Vorinstallierter Schlüssel</translation> <translation id="8676374126336081632">Eingabe löschen</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index 6071d4d..1ed9a00c 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Η συσκευή σας μπορεί να ξεκλειδωθεί με το Smart Lock. Πατήστε Enter για ξεκλείδωμα.</translation> <translation id="1361164813881551742">Μη αυτόματη προσθήκη</translation> <translation id="1361655923249334273">Δεν χρησιμοποιείται</translation> -<translation id="1361707011052629095">Συσκευές που βρίσκονται κοντά σας όταν η Κοινοποίηση κοντά είναι ενεργοποιημένη.</translation> <translation id="1361872463926621533">Αναπαραγωγή ήχου κατά την εκκίνηση</translation> <translation id="1362865166188278099">Μηχανικό πρόβλημα. Έλεγχος εκτυπωτή</translation> <translation id="1363585519747660921">Ο εκτυπωτής USB χρειάζεται διαμόρφωση</translation> @@ -1476,6 +1475,7 @@ <translation id="2731700343119398978">Περιμένετε…</translation> <translation id="2731710757838467317">Δημιουργία του χρήστη υπό επίβλεψη. Η διαδικασία ενδέχεται να διαρκέσει λίγη ώρα.</translation> <translation id="2731971182069536520">Την επόμενη φορά που θα επανεκκινήσετε τη συσκευή σας, ο διαχειριστής σας θα εκτελέσει για μία μόνο φορά μια ενημέρωση που θα διαγράψει τα τοπικά δεδομένα σας.</translation> +<translation id="2732134891301408122">Επιπλέον περιεχόμενο <ph name="CURRENT_ELEMENT" /> από <ph name="TOTAL_ELEMENTS" /></translation> <translation id="2734760316755174687">Θα γίνει επίσης επαναφορά των ιστοτόπων της ομάδας <ph name="SITE_GROUP_NAME" />.</translation> <translation id="2735712963799620190">Χρονοδιάγραμμα</translation> <translation id="2737363922397526254">Σύμπτυξη...</translation> @@ -2840,7 +2840,7 @@ <translation id="4390000551125140321">{0,plural, =1{Ανώνυμη περιήγηση}other{# ανοικτά παράθυρα για ανώνυμη περιήγηση}}</translation> <translation id="439266289085815679">Η διαμόρφωση Bluetooth ελέγχεται από τον χρήστη <ph name="USER_EMAIL" />.</translation> <translation id="4392896746540753732">Επεξεργαστείτε το αρχείο διαμόρφωσης.</translation> -<translation id="4393691030048716353">Ο τομέας <ph name="DOMAIN" /> απενεργοποίησε τον εντοπισμό και διόρθωση σφαλμάτων ADB. Όταν επανεκκινήσετε τη συσκευή <ph name="DEVICE_TYPE" />, δεν θα μπορείτε να φορτώσετε παράπλευρα εφαρμογές.</translation> +<translation id="4393691030048716353">Ο τομέας <ph name="DOMAIN" /> απενεργοποίησε τον εντοπισμό και τη διόρθωση σφαλμάτων ADB. Όταν επανεκκινήσετε τη συσκευή <ph name="DEVICE_TYPE" />, δεν θα επιτρέπεται η παράπλευρη φόρτωση εφαρμογών.</translation> <translation id="4394049700291259645">Απενεργοποίηση</translation> <translation id="439817266247065935">Η συσκευή σας δεν απενεργοποιήθηκε σωστά. Επανεκκινήστε το Linux για να χρησιμοποιήσετε το Linux.</translation> <translation id="4400367121200150367">Οι ιστότοποι που δεν αποθηκεύουν ποτέ κωδικούς πρόσβασης θα εμφανίζονται εδώ</translation> @@ -3123,6 +3123,7 @@ <translation id="4735803855089279419">Το σύστημα δεν κατάφερε να προσδιορίσει αναγνωριστικά συσκευής για αυτήν τη συσκευή.</translation> <translation id="4736292055110123391">Συγχρονίστε τους σελιδοδείκτες, τους κωδικούς πρόσβασης, το ιστορικό σας και άλλο περιεχόμενο σε όλες τις συσκευές σας</translation> <translation id="473775607612524610">Ενημέρωση</translation> +<translation id="473936925429402449">Επιλεγμένο, επιπλέον περιεχόμενο <ph name="CURRENT_ELEMENT" /> από <ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Εισιτήρια</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Μάθετε πώς μπορείτε να ενημερώνετε τις εφαρμογές<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Κατάργηση σίγασης ιστοτόπου}other{Κατάργηση σίγασης ιστοτόπων}}</translation> @@ -4145,6 +4146,7 @@ <translation id="6011449291337289699">Εκκαθάριση δεδομένων ιστότοπου</translation> <translation id="6015266928248016057">Μη έγκυρος κωδικός PUK. Απομένουν <ph name="RETRIES" /> προσπάθειες.</translation> <translation id="6015796118275082299">Έτος</translation> +<translation id="6016178549409952427">Πλοήγηση σε επιπλέον περιεχόμενο <ph name="CURRENT_ELEMENT" /> από <ph name="TOTAL_ELEMENTS" /></translation> <translation id="6016551720757758985">Επιβεβαιώστε τη λειτουργία Powerwash με επιστροφή σε προηγούμενη έκδοση</translation> <translation id="6016972670657536680">Επιλέξτε το κουμπί γλώσσας και πληκτρολογίου. Η τρέχουσα επιλεγμένη γλώσσα είναι τα <ph name="LANGUAGE" />.</translation> <translation id="6017514345406065928">Πράσινο</translation> @@ -5710,7 +5712,6 @@ <translation id="7918257978052780342">Εγγραφή</translation> <translation id="7919210519031517829"><ph name="DURATION" /> δ.</translation> <translation id="7920363873148656176">Το <ph name="ORIGIN" /> μπορεί να προβάλλει το <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Κανένας εκτός εάν ανοίξετε την Κοινοποίηση κοντά.</translation> <translation id="7924358170328001543">Σφάλμα κατά την προώθηση θύρας</translation> <translation id="792514962475806987">Επίπεδο εστίασης σε παράθυρο:</translation> <translation id="7925247922861151263">Ο έλεγχος ΑΑΑ απέτυχε</translation> @@ -6165,7 +6166,7 @@ <translation id="8467326454809944210">Επιλογή άλλης γλώσσας</translation> <translation id="8470214316007448308">Άλλα άτομα</translation> <translation id="8470513973197838199">Αποθηκευμένοι κωδικοί πρόσβασης για το <ph name="ORIGIN" /></translation> -<translation id="8471256130228705232">Ο τομέας <ph name="DOMAIN" /> απενεργοποιεί τον εντοπισμό και διόρθωση σφαλμάτων ADB. Αυτό θα επαναφέρει τη συσκευή σας <ph name="DEVICE_TYPE" /> σε 24 ώρες. Δημιουργήστε αντίγραφα ασφαλείας των αρχείων που θέλετε να κρατήσετε.</translation> +<translation id="8471256130228705232">Ο τομέας <ph name="DOMAIN" /> απενεργοποιεί τον εντοπισμό και τη διόρθωση σφαλμάτων ADB. Αυτό θα επαναφέρει τη συσκευή σας <ph name="DEVICE_TYPE" /> σε 24 ώρες. Δημιουργήστε αντίγραφα ασφαλείας των αρχείων που θέλετε να κρατήσετε.</translation> <translation id="8472623782143987204">υποστηριζόμενο από υλικό</translation> <translation id="8473863474539038330">Διευθύνσεις και άλλα</translation> <translation id="8475313423285172237">Κάποιο άλλο πρόγραμμα στον υπολογιστή σας πρόσθεσε μια επέκταση, η οποία ενδέχεται να αλλάξει τον τρόπο λειτουργίας του Chrome.</translation> @@ -6450,6 +6451,7 @@ <translation id="8811862054141704416">Πρόσβαση μικροφώνου Crostini</translation> <translation id="8812552797690463522">Γίνεται κοινή χρήση αυτού του δικτύου με εσάς.</translation> <translation id="8812593354822910461">Επίσης, διαγράψτε δεδομένα περιήγησης (<ph name="URL" />) τα οποία θα σας αποσυνδέσουν από τον τομέα <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Υπενθύμιση αργότερα</translation> <translation id="8813698869395535039">Δεν είναι δυνατή η σύνδεση στο <ph name="USERNAME" /></translation> <translation id="8813872945700551674">Ζήτα από τον γονέα σου να εγκρίνει την επέκταση "<ph name="EXTENSION_NAME" />"</translation> <translation id="8813969267212093033">Το κείμενο συστήματος εμφανίζεται σε αυτήν τη γλώσσα</translation> @@ -6480,6 +6482,7 @@ <translation id="8838601485495657486">Αδιαφανές</translation> <translation id="8838770651474809439">Χάμπουργκερ</translation> <translation id="883911313571074303">Σχολιασμός εικόνας</translation> +<translation id="8841843049738266382">Ανάγνωση και αλλαγή χρηστών λίστας επιτρεπομένων</translation> <translation id="8842594465773264717">Διαγραφή αυτού του δακτυλικού αποτυπώματος</translation> <translation id="8845001906332463065">Λήψη βοήθειας</translation> <translation id="8846132060409673887">Διαβάστε τις πληροφορίες κατασκευαστή και μοντέλου αυτού του υπολογιστή</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb index 62cae35..369c638c 100644 --- a/chrome/app/resources/generated_resources_en-GB.xtb +++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Your device can be unlocked with Smart Lock. Press enter to unlock.</translation> <translation id="1361164813881551742">Add Manually</translation> <translation id="1361655923249334273">Unused</translation> -<translation id="1361707011052629095">Devices near you when Nearby Share is open</translation> <translation id="1361872463926621533">Play sound on startup</translation> <translation id="1362865166188278099">Mechanical issue. Check printer</translation> <translation id="1363585519747660921">USB printer needs configuration</translation> @@ -5712,7 +5711,6 @@ <translation id="7918257978052780342">Enrol</translation> <translation id="7919210519031517829"><ph name="DURATION" /> s</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> can view <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">No one unless you open Nearby Share</translation> <translation id="7924358170328001543">Error forwarding port</translation> <translation id="792514962475806987">Docked zoom level:</translation> <translation id="7925247922861151263">AAA check failed</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb index 0b36334..d83aa6d 100644 --- a/chrome/app/resources/generated_resources_es-419.xtb +++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Puedes desbloquear tu dispositivo mediante Smart Lock. Presiona Intro para permitir el acceso.</translation> <translation id="1361164813881551742">Agregar manualmente</translation> <translation id="1361655923249334273">No utilizado</translation> -<translation id="1361707011052629095">Dispositivos cerca de tu ubicación cuando la ventana de Compartir con Nearby está abierta</translation> <translation id="1361872463926621533">Reproducir sonidos en el inicio</translation> <translation id="1362865166188278099">Hubo un problema mecánico. Verifica la impresora.</translation> <translation id="1363585519747660921">La impresora USB debe configurarse</translation> @@ -5706,7 +5705,6 @@ <translation id="7918257978052780342">Inscribir</translation> <translation id="7919210519031517829"><ph name="DURATION" /> s</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> puede ver <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Nadie, a menos que abras Compartir con Nearby</translation> <translation id="7924358170328001543">Se produjo un error al reenviar el puerto</translation> <translation id="792514962475806987">Nivel de zoom en vista acoplada:</translation> <translation id="7925247922861151263">Falló la verificación de AAA</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index 4948c1c8..a7ce66b 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Tu dispositivo se puede desbloquear con Smart Lock. Pulsa Intro para desbloquearlo.</translation> <translation id="1361164813881551742">Añadir manualmente</translation> <translation id="1361655923249334273">Sin utilizar</translation> -<translation id="1361707011052629095">Dispositivos cercanos a ti cuando Compartir con Nearby esté abierto</translation> <translation id="1361872463926621533">Reproducir sonido al iniciar</translation> <translation id="1362865166188278099">Problema mecánico. Comprueba la impresora.</translation> <translation id="1363585519747660921">Es necesario configurar la impresora USB</translation> @@ -1476,6 +1475,7 @@ <translation id="2731700343119398978">Espera...</translation> <translation id="2731710757838467317">Se está creando el usuario supervisado. Esta acción puede tardar unos minutos.</translation> <translation id="2731971182069536520">La próxima vez que reinicies tu dispositivo, tu administrador realizará una actualización única que eliminará tus datos locales.</translation> +<translation id="2732134891301408122">Contenido adicional <ph name="CURRENT_ELEMENT" /> de <ph name="TOTAL_ELEMENTS" /></translation> <translation id="2734760316755174687">También se restablecerán los permisos de los sitios web de <ph name="SITE_GROUP_NAME" />.</translation> <translation id="2735712963799620190">Programar</translation> <translation id="2737363922397526254">Ocultar...</translation> @@ -3122,6 +3122,7 @@ <translation id="4735803855089279419">El sistema no ha podido determinar los identificadores de este dispositivo.</translation> <translation id="4736292055110123391">Sincroniza tus marcadores, tus contraseñas, tu historial y mucho más en todos tus dispositivos</translation> <translation id="473775607612524610">Actualizar</translation> +<translation id="473936925429402449">Seleccionado contenido adicional <ph name="CURRENT_ELEMENT" /> de <ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Tickets</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Cómo actualizar aplicaciones<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Activar sonido del sitio web}other{Activar sonido de los sitios web}}</translation> @@ -4143,6 +4144,7 @@ <translation id="6011449291337289699">Borrar datos de sitios web</translation> <translation id="6015266928248016057">El PUK no es válido. Intentos restantes: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">Año</translation> +<translation id="6016178549409952427">Desplázate al contenido adicional <ph name="CURRENT_ELEMENT" /> de <ph name="TOTAL_ELEMENTS" /></translation> <translation id="6016551720757758985">Confirmar Powerwash para volver a la versión anterior</translation> <translation id="6016972670657536680">Botón para seleccionar el idioma y el teclado (actualmente: <ph name="LANGUAGE" />).</translation> <translation id="6017514345406065928">Verde</translation> @@ -5708,7 +5710,6 @@ <translation id="7918257978052780342">Registrar</translation> <translation id="7919210519031517829"><ph name="DURATION" /> s</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> puede ver <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Nadie, salvo que abras Compartir con Nearby</translation> <translation id="7924358170328001543">No se ha podido redirigir el puerto</translation> <translation id="792514962475806987">Nivel de zoom fijado:</translation> <translation id="7925247922861151263">Error de comprobación de AAA</translation> @@ -6450,6 +6451,7 @@ <translation id="8811862054141704416">Acceso a micrófono en Crostini</translation> <translation id="8812552797690463522">Esta red se comparte contigo.</translation> <translation id="8812593354822910461">Borrar también los datos de navegación (<ph name="URL" />), lo que cerrará tu sesión en <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Recordar más tarde</translation> <translation id="8813698869395535039">No se puede iniciar sesión como <ph name="USERNAME" /></translation> <translation id="8813872945700551674">Ve a buscar a tu padre o a tu madre para que apruebe "<ph name="EXTENSION_NAME" />"</translation> <translation id="8813969267212093033">El texto del sistema se mostrará en este idioma</translation> @@ -6480,6 +6482,7 @@ <translation id="8838601485495657486">Opaco</translation> <translation id="8838770651474809439">Hamburguesa</translation> <translation id="883911313571074303">Anotar imagen</translation> +<translation id="8841843049738266382">Consultar y modificar usuarios de la lista de permitidos</translation> <translation id="8842594465773264717">Eliminar esta huella digital</translation> <translation id="8845001906332463065">Obtener ayuda</translation> <translation id="8846132060409673887">Consultar el fabricante y el modelo de este ordenador</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb index df5769a..19d12e4 100644 --- a/chrome/app/resources/generated_resources_et.xtb +++ b/chrome/app/resources/generated_resources_et.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Teie seadme saab avada funktsiooniga Smart Lock. Avamiseks vajutage sisestusklahvi.</translation> <translation id="1361164813881551742">Käsitsi lisamine</translation> <translation id="1361655923249334273">Kasutamata</translation> -<translation id="1361707011052629095">Teie läheduses olevad seadmed, kui funktsioon Läheduses jagamine on aktiveeritud</translation> <translation id="1361872463926621533">Esita käivitamisel heli</translation> <translation id="1362865166188278099">Mehaaniline probleem. Kontrollige printerit.</translation> <translation id="1363585519747660921">USB-printer vajab seadistamist</translation> @@ -1476,6 +1475,7 @@ <translation id="2731700343119398978">Oodake ...</translation> <translation id="2731710757838467317">Jälgitava kasutaja loomine. Selleks võib kuluda natuke aega.</translation> <translation id="2731971182069536520">Seadme järgmisel taaskäivitamisel teeb administraator ühekordse värskenduse, mille käigus kustutatakse teie kohalikud andmed.</translation> +<translation id="2732134891301408122">Lisasisu üksus <ph name="CURRENT_ELEMENT" /> <ph name="TOTAL_ELEMENTS" />-st</translation> <translation id="2734760316755174687">Rühmas <ph name="SITE_GROUP_NAME" /> olevad saidid lähtestatakse samuti.</translation> <translation id="2735712963799620190">Ajakava</translation> <translation id="2737363922397526254">Ahenda ...</translation> @@ -3123,6 +3123,7 @@ <translation id="4735803855089279419">Süsteemil ei õnnestunud määrata sellele seadmele seadme tuvastajaid.</translation> <translation id="4736292055110123391">Järjehoidjate, paroolide, ajalugu ja muu sünkroonimine kõigis teie seadmetes</translation> <translation id="473775607612524610">Värskenda</translation> +<translation id="473936925429402449">Valitud, lisasisu üksus <ph name="CURRENT_ELEMENT" /> <ph name="TOTAL_ELEMENTS" />-st</translation> <translation id="4739639199548674512">Piletid</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Vaadake, kuidas rakendusi värskendada<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Tühista saidi vaigistus}other{Tühista saitide vaigistus}}</translation> @@ -4144,6 +4145,7 @@ <translation id="6011449291337289699">Saidi andmete kustutamine</translation> <translation id="6015266928248016057">Vale PUK-kood. Katseid jäänud: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">Aasta</translation> +<translation id="6016178549409952427">Lisasisu juurde navigeerimine, üksus <ph name="CURRENT_ELEMENT" /> <ph name="TOTAL_ELEMENTS" />-st</translation> <translation id="6016551720757758985">Kinnitage Powerwash eelmisele versioonile naasmisega</translation> <translation id="6016972670657536680">Valige keele ja klaviatuuri nupp. Praegu on valitud <ph name="LANGUAGE" /> keel.</translation> <translation id="6017514345406065928">Roheline</translation> @@ -5709,7 +5711,6 @@ <translation id="7918257978052780342">Registreerimine</translation> <translation id="7919210519031517829"><ph name="DURATION" /> s</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> saab vaadata faili <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Mitte keegi, v.a juhul, kui aktiveerite funktsiooni Läheduses jagamine</translation> <translation id="7924358170328001543">Viga pordi edastamisel</translation> <translation id="792514962475806987">Dokitud luubi suumitase:</translation> <translation id="7925247922861151263">AAA kontrollimine nurjus</translation> @@ -6451,6 +6452,7 @@ <translation id="8811862054141704416">Crostini juurdepääs mikrofonile</translation> <translation id="8812552797690463522">Seda võrku jagatakse teiega.</translation> <translation id="8812593354822910461">Kustutage ka sirvimisandmed (<ph name="URL" />). See võib teid saidilt <ph name="DOMAIN" /> välja logida. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Tuleta mulle hiljem meelde</translation> <translation id="8813698869395535039">Kasutaja <ph name="USERNAME" /> kontole ei saa sisse logida</translation> <translation id="8813872945700551674">Palu vanemal laiendus „<ph name="EXTENSION_NAME" />” kinnitada</translation> <translation id="8813969267212093033">Süsteemi tekst kuvatakse selles keeles</translation> @@ -6481,6 +6483,7 @@ <translation id="8838601485495657486">Läbipaistmatu</translation> <translation id="8838770651474809439">Hamburger</translation> <translation id="883911313571074303">Lisa kujutisele märkused</translation> +<translation id="8841843049738266382">Lubamisloendisse lisatud kasutajate lugemine ja muutmine</translation> <translation id="8842594465773264717">Kustuta see sõrmejälg</translation> <translation id="8845001906332463065">Otsige abi</translation> <translation id="8846132060409673887">Arvuti tootja ja mudeli andmete lugemine</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb index 4c1625b..842ce43 100644 --- a/chrome/app/resources/generated_resources_eu.xtb +++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Gailua Smart Lock bidez desblokea daiteke. Desblokeatzeko, sakatu Sartu.</translation> <translation id="1361164813881551742">Gehitu eskuz</translation> <translation id="1361655923249334273">Erabili gabe</translation> -<translation id="1361707011052629095">Nearby Share irekita dagoenean inguruan dituzun gailuak</translation> <translation id="1361872463926621533">Erreproduzitu soinua abioan</translation> <translation id="1362865166188278099">Arazo mekanikoa. Egiaztatu inprimagailua.</translation> <translation id="1363585519747660921">USB bidezko inprimagailua konfiguratu egin behar da</translation> @@ -5709,7 +5708,6 @@ <translation id="7918257978052780342">Erregistratu</translation> <translation id="7919210519031517829"><ph name="DURATION" /> s</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> webguneak <ph name="FILENAME" /> ikus dezake</translation> -<translation id="7924080089023843180">Inor ez, Nearby Share ireki ezean</translation> <translation id="7924358170328001543">Errore bat gertatu da ataka desbideratzean</translation> <translation id="792514962475806987">Ainguratzearen zoom-maila:</translation> <translation id="7925247922861151263">Ezin izan da AAA egiaztapena egin</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb index 04abdc9f..a9663849 100644 --- a/chrome/app/resources/generated_resources_fa.xtb +++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">قفل دستگاه میتواند با Smart Lock باز شود. برای باز کردن قفل، Enter را فشار دهید.</translation> <translation id="1361164813881551742">افزودن دستی</translation> <translation id="1361655923249334273">استفاده نشده</translation> -<translation id="1361707011052629095">دستگاههای مجاور، زمانی که «همرسانی با اطراف» باز است</translation> <translation id="1361872463926621533">پخش صدا هنگام شروع به کار</translation> <translation id="1362865166188278099">مشکل مکانیکی. چاپگر را بررسی کنید</translation> <translation id="1363585519747660921">چاپگر USB باید پیکربندی شود</translation> @@ -5706,7 +5705,6 @@ <translation id="7918257978052780342">ثبتنام</translation> <translation id="7919210519031517829"><ph name="DURATION" /></translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> میتواند <ph name="FILENAME" /> را مشاهده کند</translation> -<translation id="7924080089023843180">هیچکس، مگراینکه «همرسانی با اطراف» را باز کنید</translation> <translation id="7924358170328001543">خطا هنگام ارسال درگاه</translation> <translation id="792514962475806987">میزان بزرگنمایی متصل:</translation> <translation id="7925247922861151263">بررسی AAA انجام نشد</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb index 5cb41d5..5bf1880 100644 --- a/chrome/app/resources/generated_resources_fi.xtb +++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Voit avata laitteen Smart Lockilla. Avaa painamalla Enter.</translation> <translation id="1361164813881551742">Lisää manuaalisesti</translation> <translation id="1361655923249334273">Käyttämätön</translation> -<translation id="1361707011052629095">Lähellä olevat laitteet, kun Lähijakaminen on auki näytöllä</translation> <translation id="1361872463926621533">Toista ääni käynnistyksen yhteydessä</translation> <translation id="1362865166188278099">Mekaaninen ongelma. Tarkista tulostin</translation> <translation id="1363585519747660921">USB-tulostin on määritettävä</translation> @@ -5707,7 +5706,6 @@ <translation id="7918257978052780342">Rekisteröidy</translation> <translation id="7919210519031517829"><ph name="DURATION" /> s</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> saa nähdä tämän: <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Ei kukaan, ellet avaa Lähijakamista</translation> <translation id="7924358170328001543">Virhe porttiohjauksessa</translation> <translation id="792514962475806987">Kiinnitetyn zoomauksen taso:</translation> <translation id="7925247922861151263">AAA-testi epäonnistui</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb index d199491..797ec2f3 100644 --- a/chrome/app/resources/generated_resources_fil.xtb +++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Puwedeng i-unlock ang iyong device gamit ang Smart Lock. Pindutin ang Enter para ma-unlock.</translation> <translation id="1361164813881551742">Idagdag nang Manual</translation> <translation id="1361655923249334273">Hindi nagamit</translation> -<translation id="1361707011052629095">Mga device na malapit sa iyo kapag nakabukas ang Nearby Share</translation> <translation id="1361872463926621533">Magpatugtog sa startup</translation> <translation id="1362865166188278099">Mekanikal na isyu. Tingnan ang printer</translation> <translation id="1363585519747660921">Kailangan ng pag-configure ng USB printer</translation> @@ -5709,7 +5708,6 @@ <translation id="7918257978052780342">Magpatala</translation> <translation id="7919210519031517829"><ph name="DURATION" />s</translation> <translation id="7920363873148656176">Puwedeng tingnan ng <ph name="ORIGIN" /> ang <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Wala, maliban na lang kung bubuksan mo ang Nearby Share</translation> <translation id="7924358170328001543">Nagka-error sa pag-forward ng port</translation> <translation id="792514962475806987">Antas ng naka-dock na pag-zoom:</translation> <translation id="7925247922861151263">Nabigo ang pagsusuri sa AAA</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb index 7aeabc31..2d036c1 100644 --- a/chrome/app/resources/generated_resources_fr-CA.xtb +++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Votre appareil peut être déverrouillé avec Smart Lock. Appuyez sur Entrée pour le déverrouiller.</translation> <translation id="1361164813881551742">Ajouter manuellement</translation> <translation id="1361655923249334273">Inutilisé</translation> -<translation id="1361707011052629095">Les appareils à proximité lorsque le partage à proximité est activé</translation> <translation id="1361872463926621533">Émettre un son au démarrage</translation> <translation id="1362865166188278099">Problème mécanique. Vérifiez l'imprimante</translation> <translation id="1363585519747660921">L'imprimante USB doit être configurée</translation> @@ -5710,7 +5709,6 @@ <translation id="7918257978052780342">S'inscrire</translation> <translation id="7919210519031517829"><ph name="DURATION" /> s</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> peut consulter <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Personne, sauf si vous ouvrez le partage à proximité</translation> <translation id="7924358170328001543">Une erreur s'est produite lors du transfert du port</translation> <translation id="792514962475806987">Niveau de zoom en mode ancré :</translation> <translation id="7925247922861151263">Échec de la vérification AAA</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb index defdf8c..56856f4f9 100644 --- a/chrome/app/resources/generated_resources_fr.xtb +++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Votre appareil peut être déverrouillé avec Smart Lock. Appuyez sur Entrée pour le déverrouiller.</translation> <translation id="1361164813881551742">Ajouter manuellement</translation> <translation id="1361655923249334273">Non utilisé</translation> -<translation id="1361707011052629095">Appareils à proximité lorsque la fonctionnalité Partage à proximité est ouverte</translation> <translation id="1361872463926621533">Jouer un son au démarrage</translation> <translation id="1362865166188278099">Problème mécanique. Vérifiez l'imprimante</translation> <translation id="1363585519747660921">L'imprimante USB n'est pas configurée</translation> @@ -5710,7 +5709,6 @@ <translation id="7918257978052780342">Enregistrer</translation> <translation id="7919210519031517829"><ph name="DURATION" /> s</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> peut accéder à <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Personne, sauf si vous ouvrez Partage à proximité</translation> <translation id="7924358170328001543">Erreur lors du transfert du port.</translation> <translation id="792514962475806987">Niveau de zoom ancré :</translation> <translation id="7925247922861151263">Échec de la vérification AAA</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb index e11302f..e2bd7330 100644 --- a/chrome/app/resources/generated_resources_gl.xtb +++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">O dispositivo pode desbloquearse con Smart Lock. Preme Intro para desbloquealo.</translation> <translation id="1361164813881551742">Engadir impresora manualmente</translation> <translation id="1361655923249334273">Non usado</translation> -<translation id="1361707011052629095">Os dispositivos que estean preto de ti cando estea aberta a función Compartir por Nearby</translation> <translation id="1361872463926621533">Reproducir son ao iniciar</translation> <translation id="1362865166188278099">Produciuse un problema técnico. Comproba a impresora</translation> <translation id="1363585519747660921">É necesario configurar a impresora USB</translation> @@ -5708,7 +5707,6 @@ <translation id="7918257978052780342">Inscribir</translation> <translation id="7919210519031517829"><ph name="DURATION" /> s</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> pode ver <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Ninguén, a menos que abras a función Compartir por Nearby</translation> <translation id="7924358170328001543">Produciuse un erro co encamiñamento do porto</translation> <translation id="792514962475806987">Nivel de zoom da lupa ancorada:</translation> <translation id="7925247922861151263">Erro de comprobación de AAA</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb index 86c4114..a04d25e6 100644 --- a/chrome/app/resources/generated_resources_gu.xtb +++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">તમારા ડિવાઇસને Smart Lock વડે અનલૉક કરવામાં આવી શકે છે. અનલૉક કરવા માટે Enter દબાવો.</translation> <translation id="1361164813881551742">મેન્યુઅલી ઉમેરો</translation> <translation id="1361655923249334273">બિનવપરાયેલ</translation> -<translation id="1361707011052629095">'નજીકના શેર' સુવિધા ચાલુ હોય, ત્યારે તમારી નજીકના ડિવાઇસ</translation> <translation id="1361872463926621533">પ્રારંભ થાય ત્યારે સાઉન્ડ ચાલુ કરો</translation> <translation id="1362865166188278099">મિકેનિકલ સમસ્યા. પ્રિન્ટર ચેક કરો</translation> <translation id="1363585519747660921">USB પ્રિન્ટર માટે ગોઠવણી જરૂરી છે</translation> @@ -5706,7 +5705,6 @@ <translation id="7918257978052780342">નોંધણી કરો</translation> <translation id="7919210519031517829"><ph name="DURATION" />સેકન્ડ</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> જોઈ શકે છે <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">જ્યાં સુધી તમે 'નજીકના શેર' ન ખોલો ત્યાં સુધી કોઈ નહીં</translation> <translation id="7924358170328001543">પોર્ટ ફૉરવર્ડ કરવામાં ભૂલ આવી</translation> <translation id="792514962475806987">ડૉક કરેલ ઝૂમ લેવલ:</translation> <translation id="7925247922861151263">AAA તપાસ નિષ્ફળ</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb index 5f0919c..e0962644 100644 --- a/chrome/app/resources/generated_resources_hi.xtb +++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">आपका डिवाइस, Smart Lock से अनलॉक किया जा सकता है. अनलॉक करने के लिए Enter दबाएं.</translation> <translation id="1361164813881551742">मैन्युअल रूप से जोड़ें</translation> <translation id="1361655923249334273">अप्रयुक्त</translation> -<translation id="1361707011052629095">आस-पास शेयर करने की सुविधा चालू होने पर, आपके आस-पास मौजूद डिवाइस</translation> <translation id="1361872463926621533">शुरू होने पर आवाज़ चालू करें</translation> <translation id="1362865166188278099">मशीन से जुड़ी समस्या. प्रिंटर जांचें</translation> <translation id="1363585519747660921">यूएसबी प्रिंटर को कॉन्फ़िगर करना होगा</translation> @@ -1476,6 +1475,7 @@ <translation id="2731700343119398978">कृपया प्रतीक्षा करें...</translation> <translation id="2731710757838467317">आपका 'निगरानी में रखा गया उपयोगकर्ता' बनाया जा रहा है. इसमें कुछ समय लग सकता है.</translation> <translation id="2731971182069536520">जब आप अगली बार डिवाइस रीस्टार्ट करेंगे, तो आपका एडमिन एक बार किया जाने वाला अपडेट करेगा जिससे आपका स्थानीय डेटा मिट जाएगा.</translation> +<translation id="2732134891301408122">ज़्यादा कॉन्टेंट वाले <ph name="TOTAL_ELEMENTS" /> पेजों में से पेज <ph name="CURRENT_ELEMENT" /></translation> <translation id="2734760316755174687"><ph name="SITE_GROUP_NAME" /> की साइटों को भी रीसेट किया जाएगा.</translation> <translation id="2735712963799620190">शेड्यूल</translation> <translation id="2737363922397526254">छोटा करें...</translation> @@ -3122,6 +3122,7 @@ <translation id="4735803855089279419">सिस्टम इस डिवाइस के लिए डिवाइस पहचानकर्ताओं को तय नहीं कर सका.</translation> <translation id="4736292055110123391">अपने बुकमार्क, पासवर्ड, इतिहास, और दूसरी कई चीज़ें अपने सभी डिवाइस पर सिंक करना</translation> <translation id="473775607612524610">अपडेट करें</translation> +<translation id="473936925429402449">ज़्यादा कॉन्टेंट वाले <ph name="TOTAL_ELEMENTS" /> पेजों में से<ph name="CURRENT_ELEMENT" /> पेज चुना गया</translation> <translation id="4739639199548674512">टिकट</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />ऐप्लिकेशन अपडेट करने का तरीका जानें<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{साइट अनम्यूट करें}one{साइटें अनम्यूट करें}other{साइटें अनम्यूट करें}}</translation> @@ -4143,6 +4144,7 @@ <translation id="6011449291337289699">साइट डेटा साफ़ करें</translation> <translation id="6015266928248016057">गलत PUK. इतनी बार और कोशिश की जा सकती है: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">वर्ष</translation> +<translation id="6016178549409952427">ज़्यादा कॉन्टेंट वाले कुल <ph name="TOTAL_ELEMENTS" /> पेजों में से <ph name="CURRENT_ELEMENT" /> पेज पर जाएं</translation> <translation id="6016551720757758985">पिछले वर्शन पर वापस लौटने के साथ ही पावरवॉश की पुष्टि करें</translation> <translation id="6016972670657536680">भाषा और कीबोर्ड बटन चुनें. इस समय चुनी गई भाषा <ph name="LANGUAGE" /> है.</translation> <translation id="6017514345406065928">हरा</translation> @@ -5707,7 +5709,6 @@ <translation id="7918257978052780342">नामांकित करें</translation> <translation id="7919210519031517829"><ph name="DURATION" /> सेकंड</translation> <translation id="7920363873148656176"><ph name="ORIGIN" />, <ph name="FILENAME" /> को देख सकती है</translation> -<translation id="7924080089023843180">जब तक आप आस-पास शेयर करने की सुविधा चालू नहीं करते, तब तक कोई भी आपके डिवाइस के साथ फ़ाइलें शेयर नहीं कर सकता</translation> <translation id="7924358170328001543">पोर्ट को फ़ॉरवर्ड करने में गड़बड़ी हुई</translation> <translation id="792514962475806987">डॉक किया गया ज़ूम स्तर:</translation> <translation id="7925247922861151263">AAA जाँच पूरा नहीं हो सका</translation> @@ -6449,6 +6450,7 @@ <translation id="8811862054141704416">Crostini में माइक्रोफ़ोन का ऐक्सेस</translation> <translation id="8812552797690463522">यह नेटवर्क आपके साथ शेयर किया गया है.</translation> <translation id="8812593354822910461">ब्राउज़िंग डेटा (<ph name="URL" />) भी मिटाएं, इससे आप <ph name="DOMAIN" /> से साइन आउट हो जाएंगे. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">मुझे बाद में याद दिलाएं</translation> <translation id="8813698869395535039"><ph name="USERNAME" /> में साइन इन नहीं किया जा सकता</translation> <translation id="8813872945700551674">"<ph name="EXTENSION_NAME" />" को इंस्टॉल करने की अनुमति पाने के लिए, माता-पिता से संपर्क करें</translation> <translation id="8813969267212093033">सिस्टम का टेक्स्ट इस भाषा में दिखाया गया है</translation> @@ -6479,6 +6481,7 @@ <translation id="8838601485495657486">अपारदर्शी</translation> <translation id="8838770651474809439">हैमबर्गर</translation> <translation id="883911313571074303">इमेज पर टिप्पणी लिखें</translation> +<translation id="8841843049738266382">जिन लोगों या संगठनों को अनुमति मिली है उनकी सूची में शामिल उपयोगकर्ताओं को पढ़ें और बदलें</translation> <translation id="8842594465773264717">इस फ़िंगरप्रिंट को मिटाएं</translation> <translation id="8845001906332463065">सहायता पाएं</translation> <translation id="8846132060409673887">इस कंप्यूटर का निर्माता और मॉडल पढ़ें</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index f99a09d..bed20aa 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Uređaj se može otključati Smart Lockom. Pritisnite Enter za otključavanje.</translation> <translation id="1361164813881551742">Dodaj ručno</translation> <translation id="1361655923249334273">Nekorišteno</translation> -<translation id="1361707011052629095">Uređaji u vašoj blizini kad je otvoreno Dijeljenje s Android uređajima</translation> <translation id="1361872463926621533">Reproduciraj zvuk pri pokretanju</translation> <translation id="1362865166188278099">Mehanički problem. Provjerite pisač</translation> <translation id="1363585519747660921">Potrebno je konfigurirati USB pisač</translation> @@ -1476,6 +1475,7 @@ <translation id="2731700343119398978">Pričekajte...</translation> <translation id="2731710757838467317">Izrađuje se zaštićeni korisnik. To može potrajati nekoliko trenutaka.</translation> <translation id="2731971182069536520">Prilikom sljedećeg ponovnog pokretanja uređaja vaš će administrator izvršiti jednokratno ažuriranje kojim će se izbrisati vaši lokalni podaci.</translation> +<translation id="2732134891301408122">Dodatni sadržaj <ph name="CURRENT_ELEMENT" /> od <ph name="TOTAL_ELEMENTS" /></translation> <translation id="2734760316755174687">Poništit će se i web-lokacije u grupi <ph name="SITE_GROUP_NAME" />.</translation> <translation id="2735712963799620190">Raspored</translation> <translation id="2737363922397526254">Sažmi...</translation> @@ -3123,6 +3123,7 @@ <translation id="4735803855089279419">Sustav nije uspio utvrditi identifikatore ovog uređaja.</translation> <translation id="4736292055110123391">Sinkronizirajte svoje oznake, zaporke, povijest i ostalo na svim svojim uređajima</translation> <translation id="473775607612524610">Ažuriraj</translation> +<translation id="473936925429402449">Odabrano, dodatni sadržaj <ph name="CURRENT_ELEMENT" /> od <ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Tiketi</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Saznajte kako ažurirati aplikacije<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Uključi zvuk na web-lokaciji}one{Uključi zvuk na web-lokacijama}few{Uključi zvuk na web-lokacijama}other{Uključi zvuk na web-lokacijama}}</translation> @@ -4144,6 +4145,7 @@ <translation id="6011449291337289699">Brisanje podataka web-lokacija</translation> <translation id="6015266928248016057">PUK nije važeći. Preostalih pokušaja: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">Godina</translation> +<translation id="6016178549409952427">Idite na dodatni sadržaj <ph name="CURRENT_ELEMENT" /> od <ph name="TOTAL_ELEMENTS" /></translation> <translation id="6016551720757758985">Potvrda Powerwasha uz povratak na prethodnu verziju</translation> <translation id="6016972670657536680">Gumb za odabir jezika i tipkovnice. Trenutačno je odabran <ph name="LANGUAGE" />.</translation> <translation id="6017514345406065928">Zelena</translation> @@ -5709,7 +5711,6 @@ <translation id="7918257978052780342">Registriraj</translation> <translation id="7919210519031517829"><ph name="DURATION" /> s</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> može pregledavati datoteku <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Nitko, osim ako otvorite Dijeljenje s Android uređajima</translation> <translation id="7924358170328001543">Pogreška prilikom prosljeđivanja priključka</translation> <translation id="792514962475806987">Razina zumiranja za usidreno povećalo:</translation> <translation id="7925247922861151263">Provjera AAA nije uspjela</translation> @@ -6451,6 +6452,7 @@ <translation id="8811862054141704416">Crostinijev pristup mikrofonu</translation> <translation id="8812552797690463522">Ova se mreža dijeli s vama.</translation> <translation id="8812593354822910461">Izbrišite i podatke o pregledavanju (<ph name="URL" />), čime ćete se odjaviti s web-lokacije <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Podsjeti me kasnije</translation> <translation id="8813698869395535039">Prijava na <ph name="USERNAME" /> nije uspjela</translation> <translation id="8813872945700551674">Potraži roditelja koji će odobriti proširenje „<ph name="EXTENSION_NAME" />”</translation> <translation id="8813969267212093033">Tekst sustava prikazuje se na ovom jeziku</translation> @@ -6481,6 +6483,7 @@ <translation id="8838601485495657486">Neprozirno</translation> <translation id="8838770651474809439">Hamburger</translation> <translation id="883911313571074303">Dodaj napomenu slici</translation> +<translation id="8841843049738266382">čitati i mijenjati korisnike na popisu dopuštenih</translation> <translation id="8842594465773264717">Izbriši otisak prsta</translation> <translation id="8845001906332463065">Zatražite pomoć</translation> <translation id="8846132060409673887">Čitanje proizvođača i modela računala</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb index b80661b..6d2d18d 100644 --- a/chrome/app/resources/generated_resources_hu.xtb +++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Eszközét a Smart Lock segítségével is feloldhatja. A feloldáshoz nyomja meg az Enter billentyűt.</translation> <translation id="1361164813881551742">Hozzáadás manuálisan</translation> <translation id="1361655923249334273">Nem használt</translation> -<translation id="1361707011052629095">Az Ön közelében lévő eszközök, ha meg van nyitva a Közeli megosztás</translation> <translation id="1361872463926621533">Hang lejátszása indításkor</translation> <translation id="1362865166188278099">Mechanikai probléma. Ellenőrizze a nyomtatót.</translation> <translation id="1363585519747660921">Be kell állítani az USB-nyomtatót</translation> @@ -5710,7 +5709,6 @@ <translation id="7918257978052780342">Feliratkozás</translation> <translation id="7919210519031517829"><ph name="DURATION" /> mp</translation> <translation id="7920363873148656176">A(z) <ph name="ORIGIN" /> megtekintheti a következő fájlt: <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Senki, ameddig Ön meg nem nyitja a Közeli megosztást</translation> <translation id="7924358170328001543">Hibás portátirányítás</translation> <translation id="792514962475806987">Dokkolt állapotú nagyítási szint:</translation> <translation id="7925247922861151263">AAA-ellenőrzés sikertelen</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb index 4b023dd..6a33a089 100644 --- a/chrome/app/resources/generated_resources_hy.xtb +++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Ձեր սարքը կարող է ապակողպվել Smart Lock-ի միջոցով։ Սեղմեք Enter՝ ապակողպելու համար։</translation> <translation id="1361164813881551742">Ավելացնել ձեռքով</translation> <translation id="1361655923249334273">Չօգտագործված</translation> -<translation id="1361707011052629095">Մոտակայքում գտնվող սարքերը, երբ «Փոխանակում մոտակա սարքերի հետ» գործառույթը միացված է</translation> <translation id="1361872463926621533">Նվագարկել ազդանշան մեկնարկի ժամանակ</translation> <translation id="1362865166188278099">Մեխանիկական խնդիր է առաջացել։ Ստուգեք տպիչը։</translation> <translation id="1363585519747660921">USB տպիչը հարկավոր է կարգավորել</translation> @@ -1476,6 +1475,7 @@ <translation id="2731700343119398978">Սպասեք…</translation> <translation id="2731710757838467317">Վերահսկվող պրոֆիլը ստեղծվում է: Սա կարող է մի քանի վայրկյան տևել:</translation> <translation id="2731971182069536520">Հաջորդ անգամ, երբ վերագործարկեք սարքը, ձեր ադմինիստրատորը մեկանգամյա թարմացում կկատարի, ինչի արդյունքում ձեր լոկալ տվյալները կջնջվեն:</translation> +<translation id="2732134891301408122">Լրացուցիչ բովանդակություն <ph name="CURRENT_ELEMENT" />՝ <ph name="TOTAL_ELEMENTS" />-ից</translation> <translation id="2734760316755174687">Թույլտվությունները կվերակայվեն նաև <ph name="SITE_GROUP_NAME" />-ի բոլոր կայքերում:</translation> <translation id="2735712963799620190">Ժամանակացույց</translation> <translation id="2737363922397526254">Կոծկել…</translation> @@ -3123,6 +3123,7 @@ <translation id="4735803855089279419">Չհաջողվեց ճանաչել սարքի նույնացուցիչները:</translation> <translation id="4736292055110123391">Համաժամացրեք ձեր էջանիշները, պատմությունը, գաղտնաբառերն ու մյուս կարգավորումները ձեր բոլոր սարքերում</translation> <translation id="473775607612524610">Թարմացնել</translation> +<translation id="473936925429402449">Ընտրված է լրացուցիչ բովանդակություն <ph name="CURRENT_ELEMENT" />-ը՝ <ph name="TOTAL_ELEMENTS" />-ից</translation> <translation id="4739639199548674512">Տոմսեր</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Ինչպես թարմացնել հավելվածները<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Միացնել կայքի ձայնը}one{Միացնել կայքի ձայնը}other{Միացնել կայքերի ձայնը}}</translation> @@ -4147,6 +4148,7 @@ <translation id="6011449291337289699">Մաքրել կայքի տվյալները</translation> <translation id="6015266928248016057">Անվավեր PUK: Մնաց <ph name="RETRIES" /> փորձ:</translation> <translation id="6015796118275082299">Տարի</translation> +<translation id="6016178549409952427">Անցնել լրացուցիչ բովանդակություն <ph name="CURRENT_ELEMENT" />՝ <ph name="TOTAL_ELEMENTS" />-ից</translation> <translation id="6016551720757758985">Հաստատեք Powerwash-ը՝ նախկին տարբերակին վերադարձով</translation> <translation id="6016972670657536680">Ընտրեք լեզուն և ստեղնաշարը։ Ընթացիկ լեզուն՝ <ph name="LANGUAGE" />։</translation> <translation id="6017514345406065928">Կանաչ</translation> @@ -5711,7 +5713,6 @@ <translation id="7918257978052780342">Գրանցվել</translation> <translation id="7919210519031517829"><ph name="DURATION" /> վ</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> կայքը կարող է դիտել <ph name="FILENAME" /> ֆայլը</translation> -<translation id="7924080089023843180">Ոչ ոք, քանի դեռ դուք չեք միացրել «Փոխանակում մոտակա սարքերի հետ» գործառույթը</translation> <translation id="7924358170328001543">Չհաջողվեց փոխանցել միացքը</translation> <translation id="792514962475806987">Ամրացված խոշորացույցի մասշտաբը՝</translation> <translation id="7925247922861151263">AAA ստուգումը չհաջողվեց</translation> @@ -6452,6 +6453,7 @@ <translation id="8811862054141704416">Խոսափողի օգտագործման թույլտվություն Crostini-ում</translation> <translation id="8812552797690463522">Այս ցանցը հասանելի է ձեզ։</translation> <translation id="8812593354822910461">Ջնջել նաև այցելությունների պատմությունը (<ph name="URL" />)։ Նկատի ունեցեք, որ արդյունքում հնարավոր է դուրս գրվեք ձեր հաշվից <ph name="DOMAIN" /> կայքում։ <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Հիշեցնել ավելի ուշ</translation> <translation id="8813698869395535039">Հնարավոր չէ մուտք գործել <ph name="USERNAME" /> հաշիվ</translation> <translation id="8813872945700551674">Դիմեք ձեր ծնողին՝ «<ph name="EXTENSION_NAME" />» ընդլայնումը թույլատրելու համար</translation> <translation id="8813969267212093033">Համակարգի տեքստը ցուցադրվում է այս լեզվով</translation> @@ -6482,6 +6484,7 @@ <translation id="8838601485495657486">Ոչ թափանցիկ</translation> <translation id="8838770651474809439">Համբուրգեր</translation> <translation id="883911313571074303">Պատկերին ավելացնել նշում</translation> +<translation id="8841843049738266382">Դիտել և փոխել սպիտակ ցուցակի օգտատերերին</translation> <translation id="8842594465773264717">Ջնջել այս մատնահետքը</translation> <translation id="8845001906332463065">Օգնություն</translation> <translation id="8846132060409673887">Ցույց տալ համակարգչի արտադրողին և մոդելը</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb index ae3c590..8a00f39d 100644 --- a/chrome/app/resources/generated_resources_id.xtb +++ b/chrome/app/resources/generated_resources_id.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Kunci perangkat Anda dapat dibuka dengan Smart Lock. Tekan Enter untuk membuka kunci.</translation> <translation id="1361164813881551742">Tambahkan Secara Manual</translation> <translation id="1361655923249334273">Tidak digunakan</translation> -<translation id="1361707011052629095">Perangkat di dekat Anda saat fitur Berbagi Langsung terbuka</translation> <translation id="1361872463926621533">Putar suara saat dimulai</translation> <translation id="1362865166188278099">Masalah mekanis. Periksa printer</translation> <translation id="1363585519747660921">Printer USB membutuhkan konfigurasi</translation> @@ -2376,7 +2375,7 @@ <translation id="3809280248639369696">Alien</translation> <translation id="3810593934879994994"><ph name="ORIGIN" /> dapat melihat file dalam folder berikut ini</translation> <translation id="3810973564298564668">Kelola</translation> -<translation id="381202950560906753">Tambahkan yang lain</translation> +<translation id="381202950560906753">Tambahkan lainnya</translation> <translation id="3812525830114410218">Sertifikat buruk</translation> <translation id="3813296892522778813">Buka <ph name="BEGIN_LINK_CHROMIUM" />bantuan Google Chrome<ph name="END_LINK_CHROMIUM" /> jika tidak dapat menemukan yang Anda cari</translation> <translation id="3814529970604306954">Akun Sekolah</translation> @@ -5709,7 +5708,6 @@ <translation id="7918257978052780342">Daftarkan</translation> <translation id="7919210519031517829"><ph name="DURATION" />d</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> dapat melihat <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Tidak ada kecuali Anda membuka Berbagi Langsung</translation> <translation id="7924358170328001543">Error saat meneruskan port</translation> <translation id="792514962475806987">Tingkat zoom yang dipasang ke dok:</translation> <translation id="7925247922861151263">Pemeriksaan AAA gagal</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb index 932af4c3..caf3aa93 100644 --- a/chrome/app/resources/generated_resources_is.xtb +++ b/chrome/app/resources/generated_resources_is.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Hægt er að taka tækið þitt úr lás með Smart Lock. Ýttu á Enter til að opna.</translation> <translation id="1361164813881551742">Bæta við handvirkt</translation> <translation id="1361655923249334273">Ónotað</translation> -<translation id="1361707011052629095">Tæki nálægt þér þegar nærdeiling er opin</translation> <translation id="1361872463926621533">Spila hljóð við ræsingu</translation> <translation id="1362865166188278099">Vélrænt vandamál. Athugaðu prentara</translation> <translation id="1363585519747660921">Stilla þarf USB-prentarann</translation> @@ -5709,7 +5708,6 @@ <translation id="7918257978052780342">Skrá</translation> <translation id="7919210519031517829"><ph name="DURATION" /> sek.</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> getur skoðað <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Enginn nema þú opnir nærdeilingu</translation> <translation id="7924358170328001543">Villa við framsendingu gáttar</translation> <translation id="792514962475806987">Aðdráttur í föstum glugga:</translation> <translation id="7925247922861151263">AAA-prófun mistókst</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb index c6ceb6e3..5b71b7b 100644 --- a/chrome/app/resources/generated_resources_it.xtb +++ b/chrome/app/resources/generated_resources_it.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Il tuo dispositivo può essere sbloccato con Smart Lock. Premi INVIO per sbloccarlo.</translation> <translation id="1361164813881551742">Aggiungi manualmente</translation> <translation id="1361655923249334273">Inutilizzato</translation> -<translation id="1361707011052629095">Dispositivi nelle vicinanze quando la funzionalità Condivisione nelle vicinanze è attiva</translation> <translation id="1361872463926621533">Riproduci suono all'avvio</translation> <translation id="1362865166188278099">Problema meccanico. Controlla la stampante.</translation> <translation id="1363585519747660921">La stampante USB deve essere configurata</translation> @@ -1475,6 +1474,7 @@ <translation id="2731700343119398978">Attendi...</translation> <translation id="2731710757838467317">Creazione dell'utente controllato in corso. Potrebbero essere necessari alcuni istanti.</translation> <translation id="2731971182069536520">La prossima volta che riavvii il dispositivo, il tuo amministratore eseguirà un aggiornamento una tantum che eliminerà i tuoi dati locali.</translation> +<translation id="2732134891301408122">Contenuti aggiuntivi <ph name="CURRENT_ELEMENT" /> di <ph name="TOTAL_ELEMENTS" /></translation> <translation id="2734760316755174687">Verranno reimpostati anche i siti su <ph name="SITE_GROUP_NAME" />.</translation> <translation id="2735712963799620190">Pianificazione</translation> <translation id="2737363922397526254">Comprimi...</translation> @@ -3122,6 +3122,7 @@ <translation id="4735803855089279419">Il sistema non è riuscito a stabilire gli identificatori di questo dispositivo.</translation> <translation id="4736292055110123391">Sincronizza i preferiti, le password, la cronologia e non solo su tutti i tuoi dispositivi</translation> <translation id="473775607612524610">Aggiorna</translation> +<translation id="473936925429402449">Contenuti aggiuntivi selezionati <ph name="CURRENT_ELEMENT" /> di <ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Richieste</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Scopri come aggiornare le applicazioni<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Riattiva l'audio del sito}other{Riattiva l'audio dei siti}}</translation> @@ -4143,6 +4144,7 @@ <translation id="6011449291337289699">Cancella i dati del sito</translation> <translation id="6015266928248016057">PUK non valido. Tentativi ancora disponibili: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">Anno</translation> +<translation id="6016178549409952427">Vai ai contenuti aggiuntivi <ph name="CURRENT_ELEMENT" /> di <ph name="TOTAL_ELEMENTS" /></translation> <translation id="6016551720757758985">Se confermi il Powerwash viene ripristinata la versione precedente</translation> <translation id="6016972670657536680">Pulsante di selezione della lingua e della tastiera. La lingua attualmente selezionata è: <ph name="LANGUAGE" />.</translation> <translation id="6017514345406065928">Verde</translation> @@ -5708,7 +5710,6 @@ <translation id="7918257978052780342">Registrati</translation> <translation id="7919210519031517829"><ph name="DURATION" /> s</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> può visualizzare <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Nessuno, a meno che non attivi la funzionalità Condivisione nelle vicinanze</translation> <translation id="7924358170328001543">Errore durante port forwarding</translation> <translation id="792514962475806987">Livello di zoom ancorato:</translation> <translation id="7925247922861151263">Controllo AAA non riuscito</translation> @@ -6449,6 +6450,7 @@ <translation id="8811862054141704416">Accesso al microfono su Crostini</translation> <translation id="8812552797690463522">Questa rete è condivisa con te.</translation> <translation id="8812593354822910461">Cancella anche i dati di navigazione (<ph name="URL" />) che ti faranno uscire dall'account su <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Ricordamelo dopo</translation> <translation id="8813698869395535039">Impossibile accedere a <ph name="USERNAME" /></translation> <translation id="8813872945700551674">Chiedi a un genitore di approvare "<ph name="EXTENSION_NAME" />"</translation> <translation id="8813969267212093033">Il testo di sistema viene mostrato in questa lingua</translation> @@ -6479,6 +6481,7 @@ <translation id="8838601485495657486">Opaca</translation> <translation id="8838770651474809439">Hamburger</translation> <translation id="883911313571074303">Annota immagine</translation> +<translation id="8841843049738266382">Leggi e modifica gli utenti nella lista consentita</translation> <translation id="8842594465773264717">Elimina questa impronta</translation> <translation id="8845001906332463065">Richiedi assistenza</translation> <translation id="8846132060409673887">Lettura del produttore e del modello di questo computer</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb index a4dbeb0..37077d9 100644 --- a/chrome/app/resources/generated_resources_iw.xtb +++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">אפשר לבטל את נעילת המכשיר באמצעות Smart Lock. יש להקיש על Enter כדי לבטל את הנעילה.</translation> <translation id="1361164813881551742">הוסף ידנית</translation> <translation id="1361655923249334273">לא בשימוש</translation> -<translation id="1361707011052629095">המכשירים בקרבתך כאשר התכונה 'שיתוף בקרבת מקום' פועלת</translation> <translation id="1361872463926621533">השמעת צליל בהפעלה</translation> <translation id="1362865166188278099">בעייה מכנית. יש לבדוק את המדפסת.</translation> <translation id="1363585519747660921">יש להגדיר מדפסת USB</translation> @@ -5706,7 +5705,6 @@ <translation id="7918257978052780342">הירשם</translation> <translation id="7919210519031517829"><ph name="DURATION" /> שנ'</translation> <translation id="7920363873148656176">ל-<ph name="ORIGIN" /> יש אפשרות להציג את <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">אף אחד, אלא אם התכונה 'שיתוף בקרבת מקום' מופעלת</translation> <translation id="7924358170328001543">שגיאה בהעברת היציאה</translation> <translation id="792514962475806987">רמת זום במצב מעוגן:</translation> <translation id="7925247922861151263">בדיקת AAA נכשלה</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb index 1f9a1ba0..b3e26f5 100644 --- a/chrome/app/resources/generated_resources_ja.xtb +++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Smart Lock でデバイスのロックを解除できます。解除するには Enter キーを押してください。</translation> <translation id="1361164813881551742">手動で追加</translation> <translation id="1361655923249334273">使用されていない</translation> -<translation id="1361707011052629095">ニアバイシェア画面が開いているときに近くにあるデバイス</translation> <translation id="1361872463926621533">起動時にサウンドを再生する</translation> <translation id="1362865166188278099">機械的な問題が発生しました。プリンタを確認してください</translation> <translation id="1363585519747660921">USB プリンタの設定が必要です</translation> @@ -5709,7 +5708,6 @@ <translation id="7918257978052780342">登録</translation> <translation id="7919210519031517829"><ph name="DURATION" />秒</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> は <ph name="FILENAME" /> を表示できます</translation> -<translation id="7924080089023843180">ニアバイシェアを開かない場合、誰とも共有しません</translation> <translation id="7924358170328001543">ポート転送エラー</translation> <translation id="792514962475806987">ドッキング画面のズームレベル:</translation> <translation id="7925247922861151263">AAA を確認できませんでした</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb index 7eb4f82..1b337b32 100644 --- a/chrome/app/resources/generated_resources_ka.xtb +++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">თქვენი მოწყობილობის განბლოკვა შესაძლებელია Smart Lock-ით. განსაბლოკად დააჭირეთ კლავიშს „Enter“.</translation> <translation id="1361164813881551742">ხელით დამატება</translation> <translation id="1361655923249334273">გამოუყენებელი</translation> -<translation id="1361707011052629095">ახლომახლო მოწყობილობები, როცა მახლობლად გაზიარება გახსნილია</translation> <translation id="1361872463926621533">ხმის დაკვრა გაშვებისას</translation> <translation id="1362865166188278099">მექანიკური პრობლემაა. შეამოწმეთ პრინტერი</translation> <translation id="1363585519747660921">USB პრინტერი საჭიროებს კონფიგურაციას</translation> @@ -1475,6 +1474,7 @@ <translation id="2731700343119398978">დაელოდეთ…</translation> <translation id="2731710757838467317">მიმდინარეობს კონტროლის ქვეშ მყოფი მომხმარებელის შექმნა. ამას შეიძლება რამდენიმე წუთი დაჭირდეს.</translation> <translation id="2731971182069536520">მოწყობილობის მომდევნო გადატვირთვის შემდეგ ადმინისტრატორი შეასრულებს ერთჯერად განახლებას, რომელიც წაშლის თქვენს ადგილობრივ მონაცემებს.</translation> +<translation id="2732134891301408122">დამატებითი კონტენტი <ph name="CURRENT_ELEMENT" /> / <ph name="TOTAL_ELEMENTS" />-დან</translation> <translation id="2734760316755174687">გადაყენებული იქნება „<ph name="SITE_GROUP_NAME" />“-ის ვებსაიტების ნებართვებიც.</translation> <translation id="2735712963799620190">განრიგი</translation> <translation id="2737363922397526254">აკეცვა…</translation> @@ -3122,6 +3122,7 @@ <translation id="4735803855089279419">სისტემამ ვერ დაადგინა მოწყობილობის იდენტიფიკატორები ამ მოწყობილობისთვის.</translation> <translation id="4736292055110123391">მოახდინეთ თქვენი სანიშნეების, პაროლების, ისტორიისა და სხვა კონტენტის სინქრონიზაცია თქვენს ყველა მოწყობილობას შორის</translation> <translation id="473775607612524610">განახლება</translation> +<translation id="473936925429402449">არჩეულია, დამატებითი კონტენტი <ph name="CURRENT_ELEMENT" /> / <ph name="TOTAL_ELEMENTS" />-დან</translation> <translation id="4739639199548674512">ბილეთები</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />შეიტყვეთ აპლიკაციების განახლების შესახებ<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{საიტის დადუმების მოხსნა}other{საიტების დადუმების მოხსნა}}</translation> @@ -4143,6 +4144,7 @@ <translation id="6011449291337289699">საიტის მონაცემების გასუფთავება</translation> <translation id="6015266928248016057">PUK-კოდი არასწორია. გამეორებების დარჩენილი რაოდენობა: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">წელი</translation> +<translation id="6016178549409952427">დამატებით კონტენტზე <ph name="CURRENT_ELEMENT" /> / <ph name="TOTAL_ELEMENTS" />-დან გადასვლა</translation> <translation id="6016551720757758985">Powerwash-ის განხორციელება დაადასტურეთ თავდაპირველ ვერსიაზე დაბრუნებით</translation> <translation id="6016972670657536680">ენისა და კლავიშის არჩევა. ამჟამად არჩეული ენაა <ph name="LANGUAGE" />.</translation> <translation id="6017514345406065928">მწვანე</translation> @@ -5708,7 +5710,6 @@ <translation id="7918257978052780342">რეგისტრაცია</translation> <translation id="7919210519031517829"><ph name="DURATION" />წმ</translation> <translation id="7920363873148656176"><ph name="ORIGIN" />-ს შეუძლია „<ph name="FILENAME" />“-ის ნახვა</translation> -<translation id="7924080089023843180">არავინ, სანამ მახლობლად გაზიარებას არ გახსნით</translation> <translation id="7924358170328001543">პორტის გადამისამართება ვერ მოხერხდა</translation> <translation id="792514962475806987">ჩამაგრებული მასშტაბის დონე:</translation> <translation id="7925247922861151263">AAA შემოწმება ვერ მოხერხდა</translation> @@ -6448,6 +6449,7 @@ <translation id="8811862054141704416">Crostini-ს წვდომა მიკროფონზე</translation> <translation id="8812552797690463522">ეს ქსელი გაზიარებულია თქვენთან</translation> <translation id="8812593354822910461">დათვალიერების მონაცემების (<ph name="URL" />) გასუფთავებაც (ეს გამოგიყვანთ <ph name="DOMAIN" />-იდან). <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">მოგვიანებით შეხსენება</translation> <translation id="8813698869395535039"><ph name="USERNAME" />-ში შესვლა ვერ მოხერხდა</translation> <translation id="8813872945700551674">სთხოვეთ მშობელს, დაადასტუროს „<ph name="EXTENSION_NAME" />“</translation> <translation id="8813969267212093033">სისტემის ტექსტი ნაჩვენებია ამ ენაზე</translation> @@ -6478,6 +6480,7 @@ <translation id="8838601485495657486">გაუმჭვირვალე</translation> <translation id="8838770651474809439">ჰამბურგერი</translation> <translation id="883911313571074303">სურათის ანოტაცია</translation> +<translation id="8841843049738266382">დაშვებულ სიაში შემავალი მომხმარებლების წაკითხვა და შეცვლა</translation> <translation id="8842594465773264717">თითის ამ ანაბეჭდის წაშლა</translation> <translation id="8845001906332463065">დახმარების მიღება</translation> <translation id="8846132060409673887">ამ კომპიუტერის მწარმოებლისა და მოდელის შესახებ ინფორმაციის წაკითხვა</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb index 44dd890..d613f3ae 100644 --- a/chrome/app/resources/generated_resources_kk.xtb +++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Құрылғыңыздың құлпын Smart Lock арқылы ашуға болады. Құлпын ашу үшін Enter пернесін басыңыз.</translation> <translation id="1361164813881551742">Қолмен енгізу</translation> <translation id="1361655923249334273">Пайдаланылмаған</translation> -<translation id="1361707011052629095">Nearby Share функциясы экранда ашылған кездегі маңайдағы құрылғылар</translation> <translation id="1361872463926621533">Іске қосу кезінде дыбыс ойнатылсын</translation> <translation id="1362865166188278099">Механикалық ақау. Принтерді тексеріңіз.</translation> <translation id="1363585519747660921">USB принтерін конфигурациялау қажет</translation> @@ -5706,7 +5705,6 @@ <translation id="7918257978052780342">Тіркеу</translation> <translation id="7919210519031517829"><ph name="DURATION" /> с</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> <ph name="FILENAME" /> файлын көре алады.</translation> -<translation id="7924080089023843180">Nearby Share ашылмаса, ешкім</translation> <translation id="7924358170328001543">Портты бағыттау қатесі</translation> <translation id="792514962475806987">Бекітілген масштаб деңгейі:</translation> <translation id="7925247922861151263">AAA тексеру сәтсіз аяқталды</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb index 866349aa..6d17d04 100644 --- a/chrome/app/resources/generated_resources_km.xtb +++ b/chrome/app/resources/generated_resources_km.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">អាចដោះសោឧបករណ៍របស់អ្នកដោយប្រើ Smart Lock។ ចុច Enter ដើម្បីដោះសោ។</translation> <translation id="1361164813881551742">បន្ថែមដោយផ្ទាល់</translation> <translation id="1361655923249334273">មិនបានប្រើ</translation> -<translation id="1361707011052629095">ឧបករណ៍នៅជិតអ្នក នៅពេលបើកការចែករំលែកនៅជិត</translation> <translation id="1361872463926621533">ចាក់សំឡេងនៅពេលចាប់ផ្តើម</translation> <translation id="1362865166188278099">បញ្ហាមេកានិច។ សូមពិនិត្យមើលម៉ាស៊ីនបោះពុម្ព</translation> <translation id="1363585519747660921">ម៉ាស៊ីនបោះពុម្ព USB ត្រូវការការកំណត់រចនាសម្ព័ន្ធ</translation> @@ -5710,7 +5709,6 @@ <translation id="7918257978052780342">ចុះឈ្មោះ</translation> <translation id="7919210519031517829"><ph name="DURATION" />វិ</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> អាចមើល <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">នរណាក៏មិនបានដែរ ប្រសិនបើអ្នកមិនបើកការចែករំលែកនៅជិត</translation> <translation id="7924358170328001543">មានបញ្ហាក្នុងការបញ្ជូនច្រកបន្ត</translation> <translation id="792514962475806987">កម្រិតពង្រីកបង្រួមនៃកែវពង្រីកដាក់ខាងលើបំផុត៖</translation> <translation id="7925247922861151263">ការពិនិត្យ AAA បានបរាជ័យ</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb index 15666f9..f1e27d85 100644 --- a/chrome/app/resources/generated_resources_kn.xtb +++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Smart Lock ಬಳಸಿಕೊಂಡು ನಿಮ್ಮ ಸಾಧನವನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಬಹುದು. ಅನ್ಲಾಕ್ ಮಾಡಲು Enter ಅನ್ನು ಒತ್ತಿ.</translation> <translation id="1361164813881551742">ಹಸ್ತಚಾಲಿತವಾಗಿ ಸೇರಿಸು</translation> <translation id="1361655923249334273">ಬಳಸದ</translation> -<translation id="1361707011052629095">Nearby ಶೇರ್ ತೆರೆದಿರುವಾಗ ನಿಮ್ಮ ಸಮೀಪದಲ್ಲಿರುವ ಸಾಧನಗಳು</translation> <translation id="1361872463926621533">ಪ್ರಾರಂಭಗೊಂಡಾಗ ಧ್ವನಿಯನ್ನು ಪ್ಲೇ ಮಾಡಿ</translation> <translation id="1362865166188278099">ಯಾಂತ್ರಿಕ ಸಮಸ್ಯೆ. ಪ್ರಿಂಟರ್ ಪರಿಶೀಲಿಸಿ</translation> <translation id="1363585519747660921">USB ಪ್ರಿಂಟರ್ ಅನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಬೇಕಾಗಿದೆ</translation> @@ -1476,6 +1475,7 @@ <translation id="2731700343119398978">ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ...</translation> <translation id="2731710757838467317">ನಿಮ್ಮ ಮೇಲ್ವಿಚಾರಣೆ ಬಳಕೆದಾರರನ್ನು ರಚಿಸಲಾಗುತ್ತಿದೆ. ಇದಕ್ಕೆ ಸ್ವಲ್ಪ ಸಮಯವಾಗಬಹುದು.</translation> <translation id="2731971182069536520">ಮುಂದಿನ ಬಾರಿ ನೀವು ನಿಮ್ಮ ಸಾಧನವನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿದಾಗ, ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಒಂದು ಬಾರಿಯ ಅಪ್ಡೇಟ್ ಅನ್ನು ನಿರ್ವಹಿಸಲಿದ್ದು, ಅದು ನಿಮ್ಮ ಸ್ಥಳೀಯ ಡೇಟಾವನ್ನು ಅಳಿಸಿ ಹಾಕುತ್ತದೆ.</translation> +<translation id="2732134891301408122"><ph name="TOTAL_ELEMENTS" /> ರಲ್ಲಿ <ph name="CURRENT_ELEMENT" /> ಹೆಚ್ಚುವರಿ ವಿಷಯ</translation> <translation id="2734760316755174687"><ph name="SITE_GROUP_NAME" /> ಹೆಸರಿನಡಿಯಲ್ಲಿನ ಸೈಟ್ಗಳನ್ನು ಸಹ ಮರುಹೊಂದಿಸಲಾಗುತ್ತದೆ.</translation> <translation id="2735712963799620190">ವೇಳಾಪಟ್ಟಿ</translation> <translation id="2737363922397526254">ಕುಗ್ಗಿಸು...</translation> @@ -3123,6 +3123,7 @@ <translation id="4735803855089279419">ಈ ಸಾಧನಕ್ಕಾಗಿ ಸಾಧನದ ಗುರುತುಗಳನ್ನು ನಿರ್ಧರಿಸಲು ಸಿಸ್ಟಂ ವಿಫಲವಾಗಿದೆ.</translation> <translation id="4736292055110123391">ನಿಮ್ಮ ಎಲ್ಲಾ ಸಾಧನಗಳಲ್ಲೂ ನಿಮ್ಮ ಬುಕ್ಮಾರ್ಕ್ಗಳು, ಪಾಸ್ವರ್ಡ್ಗಳು, ಇತಿಹಾಸ ಹಾಗೂ ಇನ್ನೂ ಹೆಚ್ಚಿನವುಗಳನ್ನು ಸಿಂಕ್ ಮಾಡಿ</translation> <translation id="473775607612524610">ಅಪ್ಡೇಟ್</translation> +<translation id="473936925429402449"><ph name="TOTAL_ELEMENTS" /> ರಲ್ಲಿ <ph name="CURRENT_ELEMENT" /> ಹೆಚ್ಚುವರಿ ವಿಷಯವನ್ನು ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ</translation> <translation id="4739639199548674512">ಟಿಕೆಟ್ಗಳು</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡುವುದು ಹೇಗೆ ಎಂದು ತಿಳಿಯಿರಿ<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{ಸೈಟ್ ಅನ್ನು ಅನ್ಮ್ಯೂಟ್ ಮಾಡಿ}one{ಸೈಟ್ಗಳನ್ನು ಅನ್ಮ್ಯೂಟ್ ಮಾಡಿ}other{ಸೈಟ್ಗಳನ್ನು ಅನ್ಮ್ಯೂಟ್ ಮಾಡಿ}}</translation> @@ -4146,6 +4147,7 @@ <translation id="6011449291337289699">ಸೈಟ್ ಡೇಟಾವನ್ನು ತೆರವುಗೊಳಿಸಿ</translation> <translation id="6015266928248016057">ಅಮಾನ್ಯ PUK. ಬಾಕಿಯಿರುವ ಮರುಪ್ರಯತ್ನಗಳು: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">ವರ್ಷ</translation> +<translation id="6016178549409952427"><ph name="TOTAL_ELEMENTS" /> ರಲ್ಲಿ <ph name="CURRENT_ELEMENT" /> ಹೆಚ್ಚುವರಿ ವಿಷಯಕ್ಕೆ ನ್ಯಾವಿಗೇಟ್ ಮಾಡಿ</translation> <translation id="6016551720757758985">ಹಿಂದಿನ ಆವೃತ್ತಿಗೆ ಹಿಂತಿರುಗುವ ಮೂಲಕ ಪವರ್ವಾಶ್ ಅನ್ನು ದೃಢೀಕರಿಸಿ</translation> <translation id="6016972670657536680">ಭಾಷೆ ಮತ್ತು ಕೀಬೋರ್ಡ್ ಬಟನ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ. ಪ್ರಸ್ತುತ ಆಯ್ಕೆಮಾಡಿದ ಭಾಷೆ <ph name="LANGUAGE" /> ಇದಾಗಿದೆ.</translation> <translation id="6017514345406065928">ಹಸಿರು</translation> @@ -5711,7 +5713,6 @@ <translation id="7918257978052780342">ನೋಂದಾಯಿಸಿ</translation> <translation id="7919210519031517829"><ph name="DURATION" />ಸೆ</translation> <translation id="7920363873148656176"><ph name="ORIGIN" />, <ph name="FILENAME" /> ಅನ್ನು ವೀಕ್ಷಿಸಬಹುದು</translation> -<translation id="7924080089023843180">ನೀವು Nearby ಶೇರ್ ಅನ್ನು ತೆರೆಯದ ಹೊರತು ಯಾರೂ ಹಂಚಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ</translation> <translation id="7924358170328001543">ಪೋರ್ಟ್ ಫಾರ್ವರ್ಡ್ ಮಾಡುವಾಗ ದೋಷ ಕಂಡುಬಂದಿದೆ</translation> <translation id="792514962475806987">ಡಾಕ್ ಮಾಡಿರುವುದಕ್ಕೆ ಝೂಮ್ ಮಟ್ಟ:</translation> <translation id="7925247922861151263">AAA ಪರಿಶೀಲನೆ ವಿಫಲವಾಗಿದೆ</translation> @@ -6450,6 +6451,7 @@ <translation id="8811862054141704416">Crostini ಮೈಕ್ರೋಫೋನ್ ಪ್ರವೇಶ</translation> <translation id="8812552797690463522">ಈ ನೆಟ್ವರ್ಕ್ ಅನ್ನು ನಿಮ್ಮ ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳಲಾಗಿದೆ.</translation> <translation id="8812593354822910461">ನಿಮ್ಮನ್ನು <ph name="DOMAIN" /> ನಿಂದ ಸೈನ್ ಔಟ್ ಮಾಡಬಹುದಾದ ಬ್ರೌಸಿಂಗ್ ಡೇಟಾವನ್ನು (<ph name="URL" />) ಸಹ ತೆರವುಗೊಳಿಸಿ. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">ನಂತರ ನನಗೆ ಜ್ಞಾಪಿಸಿ</translation> <translation id="8813698869395535039"><ph name="USERNAME" /> ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ</translation> <translation id="8813872945700551674">"<ph name="EXTENSION_NAME" />" ಅನ್ನು ಅನುಮೋದಿಸಲು ಪೋಷಕರ ಬಳಿ ವಿನಂತಿಸಿ</translation> <translation id="8813969267212093033">ಸಿಸ್ಟಂ ಪಠ್ಯವನ್ನು ಈ ಭಾಷೆಯಲ್ಲಿ ತೋರಿಸಲಾಗಿದೆ</translation> @@ -6480,6 +6482,7 @@ <translation id="8838601485495657486">ಅಪಾರದರ್ಶಕ</translation> <translation id="8838770651474809439">ಹ್ಯಾಂಬರ್ಗರ್</translation> <translation id="883911313571074303">ಚಿತ್ರವನ್ನು ಟಿಪ್ಪಣಿ ಮಾಡಿ</translation> +<translation id="8841843049738266382">ಅನುಮತಿಪಟ್ಟಿಯಲ್ಲಿರುವ ಬಳಕೆದಾರರನ್ನು ಓದಿ ಮತ್ತು ಬದಲಾಯಿಸಿ</translation> <translation id="8842594465773264717">ಈ ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ನು ಅಳಿಸಿ</translation> <translation id="8845001906332463065">ಸಹಾಯ ಪಡೆಯಿರಿ</translation> <translation id="8846132060409673887">ಈ ಕಂಪ್ಯೂಟರ್ನ ತಯಾರಕರು ಮತ್ತು ಮಾದರಿಯನ್ನು ಓದಿ</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb index 3c49580b..173ce60 100644 --- a/chrome/app/resources/generated_resources_ko.xtb +++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Smart Lock으로 기기를 잠금 해제할 수 있습니다. 잠금 해제하려면 Enter 키를 누르세요.</translation> <translation id="1361164813881551742">직접 추가</translation> <translation id="1361655923249334273">사용되지 않음</translation> -<translation id="1361707011052629095">Nearby Share 실행 시 근처에 있는 기기</translation> <translation id="1361872463926621533">시작 시 소리 재생</translation> <translation id="1362865166188278099">기술 문제입니다. 프린터를 확인하세요.</translation> <translation id="1363585519747660921">USB 프린터를 구성해야 함</translation> @@ -5707,7 +5706,6 @@ <translation id="7918257978052780342">등록</translation> <translation id="7919210519031517829"><ph name="DURATION" />초</translation> <translation id="7920363873148656176"><ph name="ORIGIN" />에서 <ph name="FILENAME" /> 파일을 볼 수 있습니다.</translation> -<translation id="7924080089023843180">Nearby Share를 실행하지 않으면 아무도 공유할 수 없음</translation> <translation id="7924358170328001543">포트 전달 중 오류 발생</translation> <translation id="792514962475806987">고정 돋보기 확대/축소 수준:</translation> <translation id="7925247922861151263">AAA 확인 실패</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb index d7bd96ce..1d9d897 100644 --- a/chrome/app/resources/generated_resources_ky.xtb +++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Түзмөгүңүздүн кулпусун Smart Lock менен ачууга болот. Кулпусун ачуу үчүн, "Enter" баскычын басыңыз.</translation> <translation id="1361164813881551742">Кол менен кошуу</translation> <translation id="1361655923249334273">Колдонулбаган</translation> -<translation id="1361707011052629095">Жаныңыздагы Nearby Share функциясы ачык түзмөктөр</translation> <translation id="1361872463926621533">Иштетилгенде добуш ойнотулсун</translation> <translation id="1362865166188278099">Механикалык маселе келип чыкты. Принтерди текшериңиз</translation> <translation id="1363585519747660921">USB принтери конфигурацияланышы керек</translation> @@ -5709,7 +5708,6 @@ <translation id="7918257978052780342">Жазылуу</translation> <translation id="7919210519031517829"><ph name="DURATION" />сек.</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> <ph name="FILENAME" /> файлын көрө алат</translation> -<translation id="7924080089023843180">Nearby Share ачылмайынча эч ким көрбөйт</translation> <translation id="7924358170328001543">Оюкчаны багыттоо катасы</translation> <translation id="792514962475806987">Жалгаштырылган лупанын масштабы:</translation> <translation id="7925247922861151263">AAA текшерүүсү кыйрады</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb index 5761270..f4a34ca7 100644 --- a/chrome/app/resources/generated_resources_lo.xtb +++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">ສາມາດປົດລັອກອຸປະກອນຂອງທ່ານດ້ວຍ Smart Lock ໄດ້. ກົດ Enter ເພື່ອປົດລັອກ.</translation> <translation id="1361164813881551742">ເພີ່ມໃສ່ດ້ວຍຕົນເອງ</translation> <translation id="1361655923249334273">ບໍ່ໄດ້ໃຊ້</translation> -<translation id="1361707011052629095">ອຸປະກອນທີ່ຢູ່ໃກ້ທ່ານເມື່ອການແບ່ງປັນໃກ້ຄຽງເປີດຢູ່</translation> <translation id="1361872463926621533">ຫຼິ້ນສຽງໃນເວລາເປີດເຄື່ອງ</translation> <translation id="1362865166188278099">ບັນຫາກົນໄກ. ກວດສອບເຄື່ອງພິມ</translation> <translation id="1363585519747660921">ເຄື່ອງພິມ USB ຈໍາເປັນຕ້ອງກຳນົດຄ່າ</translation> @@ -5706,7 +5705,6 @@ <translation id="7918257978052780342">ລົງທະບຽນ</translation> <translation id="7919210519031517829"><ph name="DURATION" />ວິ</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> ສາມາດເບິ່ງ <ph name="FILENAME" /> ໄດ້</translation> -<translation id="7924080089023843180">ບໍ່ມີໃຜເວັ້ນເສຍແຕ່ທ່ານຈະເປີດການແບ່ງປັນໃກ້ຄຽງ</translation> <translation id="7924358170328001543">ເກີດຜິດພາດໃນການສົ່ງຕໍ່ຜອດ</translation> <translation id="792514962475806987">ລະດັບການຊູມທີ່ຕັ້ງໄວ້ແລ້ວ:</translation> <translation id="7925247922861151263">ກວດເບິ່ງ AAA ບໍ່ສໍາເລັດ</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb index 429d7a4..145d1b82 100644 --- a/chrome/app/resources/generated_resources_lt.xtb +++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Įrenginį galima atrakinti naudojant „Smart Lock“. Paspauskite „Enter“, kad atrakintumėte.</translation> <translation id="1361164813881551742">Pridėti neautomatiškai</translation> <translation id="1361655923249334273">Nenaudota</translation> -<translation id="1361707011052629095">Įrenginiai, esantys netoliese, kai atidaryta Bendrinimo netoliese funkcija</translation> <translation id="1361872463926621533">Leisti garsą paleidžiant</translation> <translation id="1362865166188278099">Mechaninė problema. Patikrinkite spausdintuvą</translation> <translation id="1363585519747660921">Reikia konfigūruoti USB spausdintuvą</translation> @@ -1476,6 +1475,7 @@ <translation id="2731700343119398978">Palaukite...</translation> <translation id="2731710757838467317">Kuriamas prižiūrimas naudotojas. Tai gali šiek tiek užtrukti.</translation> <translation id="2731971182069536520">Kai kitą kartą iš naujo paleisite įrenginį, administratorius pritaikys vienkartinį naujinį ir bus ištrinti jūsų vietiniai duomenys.</translation> +<translation id="2732134891301408122">Papildomas turinys: <ph name="CURRENT_ELEMENT" /> iš <ph name="TOTAL_ELEMENTS" /></translation> <translation id="2734760316755174687"><ph name="SITE_GROUP_NAME" /> svetainės taip pat bus nustatytos iš naujo.</translation> <translation id="2735712963799620190">Tvarkaraštis</translation> <translation id="2737363922397526254">Sutraukti...</translation> @@ -3123,6 +3123,7 @@ <translation id="4735803855089279419">Sistemai nepavyko nustatyti šio įrenginio identifikatorių.</translation> <translation id="4736292055110123391">Sinchronizuokite žymes, slaptažodžius, istoriją ir daugiau visuose savo įrenginiuose</translation> <translation id="473775607612524610">Atnaujinti</translation> +<translation id="473936925429402449">Pasirinkta, papildomas turinys: <ph name="CURRENT_ELEMENT" /> iš <ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Bilietai</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Sužinokite, kaip atnaujinti programas<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Įjungti svetainės garsą}one{Įjungti svetainių garsą}few{Įjungti svetainių garsą}many{Įjungti svetainių garsą}other{Įjungti svetainių garsą}}</translation> @@ -4145,6 +4146,7 @@ <translation id="6011449291337289699">Išvalyti svetainės duomenis</translation> <translation id="6015266928248016057">Netinkamas PUK. Liko bandymų: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">Metai</translation> +<translation id="6016178549409952427">Naršyti papildomą turinį: <ph name="CURRENT_ELEMENT" /> iš <ph name="TOTAL_ELEMENTS" /></translation> <translation id="6016551720757758985">„Powerwash“ grąžinant ankstesnę versiją patvirtinimas</translation> <translation id="6016972670657536680">Pasirinkti kalbos ir klaviatūros mygtuką. Šiuo metu pasirinkta <ph name="LANGUAGE" />.</translation> <translation id="6017514345406065928">Žalia</translation> @@ -5710,7 +5712,6 @@ <translation id="7918257978052780342">Registruotis</translation> <translation id="7919210519031517829"><ph name="DURATION" /> sek.</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> gali peržiūrėti „<ph name="FILENAME" />“</translation> -<translation id="7924080089023843180">Niekas, nebent atidarote Bendrinimo netoliese funkciją</translation> <translation id="7924358170328001543">Prievado persiuntimo klaida</translation> <translation id="792514962475806987">Prie doko prijungto didintuvo mastelio keitimo lygis:</translation> <translation id="7925247922861151263">AAA patikra nepavyko</translation> @@ -6452,6 +6453,7 @@ <translation id="8811862054141704416">„Crostini“ prieiga prie mikrofono</translation> <translation id="8812552797690463522">Šis tinklas bendrinamas su jumis.</translation> <translation id="8812593354822910461">Taip pat išvalyti naršymo duomenis (<ph name="URL" />). Tai padarius būsite atjungti nuo <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Priminti vėliau</translation> <translation id="8813698869395535039">Nepavyko prisijungti prie <ph name="USERNAME" /></translation> <translation id="8813872945700551674">Paprašykite vieno iš tėvų patvirtinti „<ph name="EXTENSION_NAME" />“</translation> <translation id="8813969267212093033">Sistemos tekstas rodomas šia kalba</translation> @@ -6482,6 +6484,7 @@ <translation id="8838601485495657486">Neskaidru</translation> <translation id="8838770651474809439">Mėsainis</translation> <translation id="883911313571074303">Komentuoti vaizdą</translation> +<translation id="8841843049738266382">Skaityti ir keisti į leidžiamųjų sąrašą įtrauktus naudotojus</translation> <translation id="8842594465773264717">Ištrinti šį kontrolinį kodą</translation> <translation id="8845001906332463065">Gauti pagalbos</translation> <translation id="8846132060409673887">Skaityti šio kompiuterio gamintojo ir modelio informaciją</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb index 2a6b9c1..ab3bff5 100644 --- a/chrome/app/resources/generated_resources_lv.xtb +++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Jūsu ierīci var atbloķēt, izmantojot Smart Lock. Lai atbloķētu, nospiediet taustiņu Enter.</translation> <translation id="1361164813881551742">Pievienot manuāli</translation> <translation id="1361655923249334273">Neizmantots</translation> -<translation id="1361707011052629095">Tuvumā esošas ierīces, ja ir atvērta funkcija Kopīgošana tuvumā</translation> <translation id="1361872463926621533">Atskaņot skaņu sākumā</translation> <translation id="1362865166188278099">Mehāniska problēma. Pārbaudiet printeri.</translation> <translation id="1363585519747660921">USB printerim ir nepieciešama konfigurācija</translation> @@ -5708,7 +5707,6 @@ <translation id="7918257978052780342">Reģistrēties</translation> <translation id="7919210519031517829"><ph name="DURATION" /> s</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> var skatīt failu <ph name="FILENAME" />.</translation> -<translation id="7924080089023843180">Neviens, ja funkcija “Kopīgošana tuvumā” nav atvērta</translation> <translation id="7924358170328001543">Porta pārsūtīšanas kļūda</translation> <translation id="792514962475806987">Dokotās tālummaiņas līmenis:</translation> <translation id="7925247922861151263">AAA pārbaude neizdevās</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb index 2ce51b8..f8e42a40 100644 --- a/chrome/app/resources/generated_resources_mk.xtb +++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Вашиот уред може да се отклучи со Smart Lock. Притиснете Enter за да се отклучи.</translation> <translation id="1361164813881551742">Додај рачно</translation> <translation id="1361655923249334273">Неискористен</translation> -<translation id="1361707011052629095">Уредите во ваша близина кога е отворена „Споделување во близина“</translation> <translation id="1361872463926621533">Пуштај звук при стартување</translation> <translation id="1362865166188278099">Механички проблем. Проверете го печатачот</translation> <translation id="1363585519747660921">Потребно е конфигурирање на USB-печатачот</translation> @@ -1476,6 +1475,7 @@ <translation id="2731700343119398978">Почекајте...</translation> <translation id="2731710757838467317">Се прави надгледуваниот корисник. Ова може да потрае неколку мигови.</translation> <translation id="2731971182069536520">Следниот пат кога ќе го рестартирате уредот, вашиот администратор ќе изврши еднократно ажурирање што ќе ги избрише локалните податоци.</translation> +<translation id="2732134891301408122">Дополнителни содржини под број <ph name="CURRENT_ELEMENT" /> од вкупно <ph name="TOTAL_ELEMENTS" /></translation> <translation id="2734760316755174687">Сајтовите под <ph name="SITE_GROUP_NAME" /> исто така ќе се ресетираат.</translation> <translation id="2735712963799620190">Распоред</translation> <translation id="2737363922397526254">Собери...</translation> @@ -2640,6 +2640,7 @@ <translation id="4104163789986725820">Из&вези...</translation> <translation id="4107048419833779140">Идентификувај и отстранувај надворешни мемории</translation> <translation id="4109135793348361820">Помести прозорец кај <ph name="USER_NAME" /> (<ph name="USER_EMAIL" />)</translation> +<translation id="411031910327788420">Приспособете ги големината и стилот на титловите за апликациите што ја поддржуваат поставкава</translation> <translation id="4110490973560452005">Преземањето е завршено: <ph name="FILE_NAME" />. Притиснете Shift+F6 за да одите до областа на лентата за преземања.</translation> <translation id="4110686435123617899">Изберете го албумот <ph name="TITLE" /> <ph name="DESC" /></translation> <translation id="4110895898888439383">Прелистувајте на интернет во режим со висок контраст</translation> @@ -2839,6 +2840,7 @@ <translation id="4390000551125140321">{0,plural, =1{Инкогнито}one{# отворен инкогнито прозорец}other{# отворени инкогнито прозорци}}</translation> <translation id="439266289085815679"><ph name="USER_EMAIL" /> ја контролира конфигурацијата на Bluetooth.</translation> <translation id="4392896746540753732">Изменете ја датотеката за конфигурација</translation> +<translation id="4393691030048716353"><ph name="DOMAIN" /> го оневозможи отстранувањето грешки на ADB Откако ќе го рестартирате вашиот <ph name="DEVICE_TYPE" />, нема да може да инсталирате апликации од непознат извор.</translation> <translation id="4394049700291259645">Оневозможи</translation> <translation id="439817266247065935">Уредот не се исклучи правилно. Рестартирајте го Linux за да користите апликации на Linux.</translation> <translation id="4400367121200150367">Локациите што никогаш не запомнуваат лозинки ќе се појават тука</translation> @@ -3121,6 +3123,7 @@ <translation id="4735803855089279419">Системот не успеа да утврди идентификатори на уред за овој уред.</translation> <translation id="4736292055110123391">Синхронизирајте ги вашите обележувачи, лозинки, историја и друго на сите ваши уреди</translation> <translation id="473775607612524610">Ажурирај</translation> +<translation id="473936925429402449">Избрано, дополнителни содржини под број <ph name="CURRENT_ELEMENT" /> од вкупно <ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Билети</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Дознајте како да ги ажурирате апликациите<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Вклучи звук на сајтот}one{Вклучи звук на сајтовите}other{Вклучи звук на сајтовите}}</translation> @@ -3528,6 +3531,7 @@ <translation id="5265797726250773323">Грешка при инсталирањето</translation> <translation id="5266113311903163739">Грешка при увоз на орган за сертификати</translation> <translation id="5269977353971873915">Печатењето не успеа</translation> +<translation id="5274738462757057090">Автоматски создава титлови за аудиовизуелни содржини во прелистувачот Chrome (моментално достапна само на англиски)</translation> <translation id="5275352920323889391">Куче</translation> <translation id="527605982717517565">Секогаш дозволи JavaScript на <ph name="HOST" /></translation> <translation id="5278823018825269962">ID на статусот</translation> @@ -3963,6 +3967,7 @@ <translation id="5794700615121138172">Споделени папки на Linux</translation> <translation id="5794786537412027208">Затвори ги сите апликации на Chrome</translation> <translation id="5797070761912323120">Google може да ја користи вашата историја за да го персонализира „Пребарувањето“, рекламите и другите услуги на Google</translation> +<translation id="5798301976526354562">Големина на текст (се применува и на „Автоматски титлови“)</translation> <translation id="579915268381781820">Вашиот безбедносен клуч е отстранет.</translation> <translation id="5799508265798272974">Виртуелен уред на Linux: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Целната датотека е отсечена или отстранета од последното преземање.</translation> @@ -4140,6 +4145,7 @@ <translation id="6011449291337289699">Избришете ги сите податоци</translation> <translation id="6015266928248016057">Погрешен PUK. Преостанати обиди: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">Година</translation> +<translation id="6016178549409952427">Одете на дополнителните содржини под број <ph name="CURRENT_ELEMENT" /> од вкупно <ph name="TOTAL_ELEMENTS" /></translation> <translation id="6016551720757758985">Потврди фабричко ресетирање со враќање на претходната верзија</translation> <translation id="6016972670657536680">Изберете јазик и копче на тастатурата. Моментално е избран <ph name="LANGUAGE" /> јазик.</translation> <translation id="6017514345406065928">Зелена</translation> @@ -4871,6 +4877,7 @@ <translation id="6911324888870229398">Мрежната врска се прекина. Проверете ја врската или обидете се со друга Wi-Fi мрежа.</translation> <translation id="6911734910326569517">Потребна меморија</translation> <translation id="6912007319859991306">PIN за мобичлната SIM-картичка</translation> +<translation id="691289340230098384">Поставки за титлови</translation> <translation id="6914783257214138813">Вашите лозинки ќе бидат видливи за секој што може да ја види извезената датотека.</translation> <translation id="6915804003454593391">Корисник:</translation> <translation id="6916590542764765824">Управувај со наставки</translation> @@ -5704,7 +5711,6 @@ <translation id="7918257978052780342">Запиши</translation> <translation id="7919210519031517829"><ph name="DURATION" /> сек.</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> може да ја прегледува <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Никој, освен ако не ја отворите „Споделување во близина“</translation> <translation id="7924358170328001543">Грешка при проследувањето порта</translation> <translation id="792514962475806987">Ниво на зумирање на закотвената лупа:</translation> <translation id="7925247922861151263">AAA-проверката не успеа</translation> @@ -6161,6 +6167,7 @@ <translation id="8467326454809944210">Изберете друг јазик</translation> <translation id="8470214316007448308">Други луѓе</translation> <translation id="8470513973197838199">Зачувани лозинки за <ph name="ORIGIN" /></translation> +<translation id="8471256130228705232"><ph name="DOMAIN" /> го оневозможува отстранувањето грешки на ADB. Ова ќе го ресетира вашиот <ph name="DEVICE_TYPE" /> по 24 часа. Направете бекап на сите датотеките што сакате да ги задржите.</translation> <translation id="8472623782143987204">со резервни копии од хардвер</translation> <translation id="8473863474539038330">Адреси и друго</translation> <translation id="8475313423285172237">Друга програма на компјутерот додаде наставка која може да промени како работи Chrome.</translation> @@ -6447,6 +6454,7 @@ <translation id="8811862054141704416">Пристап до микрофонот на Crostini</translation> <translation id="8812552797690463522">Мрежава се споделува со вас.</translation> <translation id="8812593354822910461">Избриши ги и податоците од прелистувањето (<ph name="URL" />). Тоа ќе ве одјави од <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Потсети ме подоцна</translation> <translation id="8813698869395535039">Не може да се најави на <ph name="USERNAME" /></translation> <translation id="8813872945700551674">Повикај родител за да ја одобри „<ph name="EXTENSION_NAME" />“</translation> <translation id="8813969267212093033">Системскиот текст се прикажува на овој јазик</translation> @@ -6477,6 +6485,7 @@ <translation id="8838601485495657486">Непроѕирно</translation> <translation id="8838770651474809439">Хамбургер</translation> <translation id="883911313571074303">Стави прибелешка на слика</translation> +<translation id="8841843049738266382">Читај и менувај ги корисниците од списокот на дозволен пристап</translation> <translation id="8842594465773264717">Избришете го отпечатоков</translation> <translation id="8845001906332463065">Побарајте помош</translation> <translation id="8846132060409673887">Прочитај ги производителот и моделот на овој компјутер</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb index 5d955a8..91b9073 100644 --- a/chrome/app/resources/generated_resources_ml.xtb +++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Smart Lock ഉപയോഗിച്ച് നിങ്ങളുടെ ഉപകരണം അൺലോക്ക് ചെയ്യാനാവും. അൺലോക്ക് ചെയ്യാൻ 'Enter' അമർത്തുക.</translation> <translation id="1361164813881551742">നേരിട്ട് ചേർക്കുക</translation> <translation id="1361655923249334273">ഉപയോഗിക്കാത്ത</translation> -<translation id="1361707011052629095">സമീപമുള്ള പങ്കിടൽ തുറന്നിരിക്കുമ്പോൾ നിങ്ങൾക്ക് സമീപമുള്ള ഉപകരണങ്ങൾ</translation> <translation id="1361872463926621533">ആരംഭിക്കുമ്പോൾ ശബ്ദം പ്ലേ ചെയ്യുക</translation> <translation id="1362865166188278099">മെക്കാനിക്കൽ പ്രശ്നം. പ്രിന്റർ പരിശോധിക്കുക</translation> <translation id="1363585519747660921">USB പ്രിൻ്ററിന് കോൺഫിഗറേഷൻ ആവശ്യമുണ്ട്</translation> @@ -1473,6 +1472,7 @@ <translation id="2731700343119398978">കാത്തിരിക്കുക...</translation> <translation id="2731710757838467317">നിങ്ങളുടെ മേൽനോട്ടത്തിലുള്ള ഉപയോക്താവിനെ സൃഷ്ടിക്കുന്നു. ഇതിന് കുറച്ചു സമയമെടുക്കാം.</translation> <translation id="2731971182069536520">അടുത്ത തവണ നിങ്ങളുടെ ഉപകരണം റീസ്റ്റാർട്ട് ചെയ്യുമ്പോൾ, നിങ്ങളുടെ ലോക്കൽ ഡാറ്റ ഇല്ലാതാക്കുന്ന ഒരു ഒറ്റത്തവണ അപ്ഡേറ്റ് അഡ്മിൻ നിർവ്വഹിക്കും.</translation> +<translation id="2732134891301408122"><ph name="TOTAL_ELEMENTS" />-ൽ <ph name="CURRENT_ELEMENT" />-ാമത്തെ അധിക ഉള്ളടക്കം</translation> <translation id="2734760316755174687"><ph name="SITE_GROUP_NAME" /> എന്നതിന് കീഴിലുള്ള സൈറ്റുകളും പുനഃസജ്ജീകരിക്കപ്പെടും.</translation> <translation id="2735712963799620190">ഷെഡ്യൂള്</translation> <translation id="2737363922397526254">ചുരുക്കുക...</translation> @@ -3119,6 +3119,7 @@ <translation id="4735803855089279419">ഈ ഉപകരണത്തിനായി ഉപകരണ ഐഡന്റിഫയറുകൾ നിർണ്ണയിക്കാൻ സിസ്റ്റത്തിനായില്ല.</translation> <translation id="4736292055110123391">ബുക്ക്മാർക്കുകൾ, പാസ്വേഡുകൾ, ചരിത്രം എന്നിവയും മറ്റും നിങ്ങളുടെ എല്ലാ ഉപകരണങ്ങളിലും സമന്വയിപ്പിക്കുക</translation> <translation id="473775607612524610">അപ്ഡേറ്റ് ചെയ്യുക</translation> +<translation id="473936925429402449"><ph name="TOTAL_ELEMENTS" />-ൽ <ph name="CURRENT_ELEMENT" />-ാമത്തെ അധിക ഉള്ളടക്കം തിരഞ്ഞെടുത്തു</translation> <translation id="4739639199548674512">ടിക്കറ്റുകൾ</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />ആപ്പുകൾ അപ്ഡേറ്റ് ചെയ്യുന്നത് എങ്ങനെയെന്ന് അറിയുക<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{സൈറ്റ് അൺമ്യൂട്ട് ചെയ്യുക}other{സൈറ്റുകൾ അൺമ്യൂട്ട് ചെയ്യുക}}</translation> @@ -4141,6 +4142,7 @@ <translation id="6011449291337289699">സൈറ്റ് ഡാറ്റ മായ്ക്കുക</translation> <translation id="6015266928248016057">PUK അസാധുവാണ്. ശേഷിക്കുന്ന ശ്രമങ്ങൾ: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">വര്ഷം</translation> +<translation id="6016178549409952427"><ph name="TOTAL_ELEMENTS" />-ൽ <ph name="CURRENT_ELEMENT" />-ാമത്തെ അധിക ഉള്ളടക്കത്തിലേക്ക് നാവിഗേറ്റ് ചെയ്യുക</translation> <translation id="6016551720757758985">മുൻ പതിപ്പിലേക്ക് പോകുന്നതിലൂടെ പവർവാഷ് സ്ഥിരീകരിക്കുക</translation> <translation id="6016972670657536680">ഭാഷയും കീബോർഡും ബട്ടൺ തിരഞ്ഞെടുക്കുക. നിലവിൽ തിരഞ്ഞെടുത്ത ഭാഷ <ph name="LANGUAGE" /> ആണ്.</translation> <translation id="6017514345406065928">പച്ച</translation> @@ -5707,7 +5709,6 @@ <translation id="7918257978052780342">എൻറോൾ ചെയ്യുക</translation> <translation id="7919210519031517829"><ph name="DURATION" />സെക്കൻഡ്</translation> <translation id="7920363873148656176"><ph name="ORIGIN" />-ന് <ph name="FILENAME" /> കാണാനാവും</translation> -<translation id="7924080089023843180">സമീപമുള്ള പങ്കിടൽ നിങ്ങൾ തുറന്നില്ലെങ്കിൽ ആർക്കും കഴിയില്ല</translation> <translation id="7924358170328001543">പോർട്ട് കൈമാറുന്നതിൽ പിശക്</translation> <translation id="792514962475806987">ഡോക്ക് ചെയ്ത സൂം നില:</translation> <translation id="7925247922861151263">AAA പരിശോധന പരാജയപ്പെട്ടു</translation> @@ -6448,6 +6449,7 @@ <translation id="8811862054141704416">Crostini-ക്കുള്ള മൈക്രോഫോൺ ആക്സസ്</translation> <translation id="8812552797690463522">ഈ നെറ്റ്വർക്ക് നിങ്ങളുമായി പങ്കിടുന്നു.</translation> <translation id="8812593354822910461"><ph name="DOMAIN" /> എന്നതിൽ നിന്ന് നിങ്ങളെ സൈൻ ഔട്ട് ചെയ്യുന്ന ബ്രൗസിംഗ് ഡാറ്റയും (<ph name="URL" />) മായ്ക്കുക.<ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">എന്നെ പിന്നീട് ഓർമ്മിപ്പിക്കുക</translation> <translation id="8813698869395535039"><ph name="USERNAME" /> എന്നതിലേക്ക് സൈൻ ഇൻ ചെയ്യാനാവില്ല</translation> <translation id="8813872945700551674">"<ph name="EXTENSION_NAME" />"-ന് അംഗീകാരം നൽകാൻ രക്ഷിതാവിനോട് ആവശ്യപ്പെടുക</translation> <translation id="8813969267212093033">ഈ ഭാഷയിലാണ് സിസ്റ്റം ടെക്സ്റ്റ് കാണിച്ചിരിക്കുന്നത്</translation> @@ -6478,6 +6480,7 @@ <translation id="8838601485495657486">അതാര്യം</translation> <translation id="8838770651474809439">ഹാംബർഗർ</translation> <translation id="883911313571074303">ചിത്രം വ്യാഖ്യാനിക്കുക</translation> +<translation id="8841843049738266382">വൈറ്റ്ലിസ്റ്റ് ചെയ്ത ഉപയോക്താക്കളെ വായിക്കുക, മാറ്റുക</translation> <translation id="8842594465773264717">ഈ ഫിംഗർപ്രിന്റ് ഇല്ലാതാക്കുക</translation> <translation id="8845001906332463065">സഹായം നേടുക</translation> <translation id="8846132060409673887">ഈ കമ്പ്യൂട്ടറിന്റെ നിർമ്മാതാവ്, മോഡൽ എന്നിവയെക്കുറിച്ചുള്ള വിവരം വായിക്കുക</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb index 787b7ac..24a8e3af 100644 --- a/chrome/app/resources/generated_resources_mn.xtb +++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Таны төхөөрөмжийн түгжээг Ухаалаг түгжээгээр тайлах боломжтой. Түгжээг тайлахын тулд Enter дээр дарна уу.</translation> <translation id="1361164813881551742">Гараар нэмэх</translation> <translation id="1361655923249334273">Ашиглагдаагүй</translation> -<translation id="1361707011052629095">Ойролцоо хуваалцах онцлог нээлттэй байх үед таны ойролцоох төхөөрөмжүүд</translation> <translation id="1361872463926621533">Эхлүүлэхэд дуу тоглуулах</translation> <translation id="1362865166188278099">Механик асуудал. Хэвлэгчийг шалгана уу</translation> <translation id="1363585519747660921">USB хэвлэгчид тохируулга хийх шаардлагатай</translation> @@ -5702,7 +5701,6 @@ <translation id="7918257978052780342">Хамрагдах</translation> <translation id="7919210519031517829"><ph name="DURATION" />сек</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> нь <ph name="FILENAME" />-г үзэх боломжтой</translation> -<translation id="7924080089023843180">Та Ойролцоо хуваалцах онцлогийг нээхгүй бол өөр хэн ч харахгүй</translation> <translation id="7924358170328001543">Порт дамжуулахад алдаа гарлаа</translation> <translation id="792514962475806987">Суурилуулсан томруулалтын түвшин:</translation> <translation id="7925247922861151263">AAA шалгалт амжилтгүй боллоо</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb index 7eb7eef..5b40495 100644 --- a/chrome/app/resources/generated_resources_mr.xtb +++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">तुमचे डिव्हाइस Smart Lock वापरून अनलॉक केले जाऊ शकते. अनलॉक करण्यासाठी Enter दाबा.</translation> <translation id="1361164813881551742">व्यक्तिचलितपणे जोडा</translation> <translation id="1361655923249334273">न वापरलेले</translation> -<translation id="1361707011052629095">Nearby सह शेअरिंग सुरू असताना तुमच्या जवळपास असलेली डिव्हाइस</translation> <translation id="1361872463926621533">स्टार्टअपवर ध्वनी प्ले करा</translation> <translation id="1362865166188278099">यांत्रिकी समस्या. प्रिंटर तपासा</translation> <translation id="1363585519747660921">USB प्रिंटर कॉन्फिगर करणे आवश्यक आहे</translation> @@ -1475,6 +1474,7 @@ <translation id="2731700343119398978">कृपया प्रतीक्षा करा...</translation> <translation id="2731710757838467317">तुमचा पर्यवेक्षित वापरकर्ता तयार करत आहे. यास काही क्षण लागू शकतात.</translation> <translation id="2731971182069536520">पुढील वेळी तुम्ही तुमचे डिव्हाइस रीस्टार्ट कराल तेव्हा तुमचा अॅडमिनिस्ट्रेटर एक वेळ अपडेट करेल जो तुमचा स्थानिक डेटा हटवेल.</translation> +<translation id="2732134891301408122"><ph name="TOTAL_ELEMENTS" /> पैकी <ph name="CURRENT_ELEMENT" /> अतिरिक्त आशय</translation> <translation id="2734760316755174687"><ph name="SITE_GROUP_NAME" /> अंतर्गत साइट देखील रीसेट केल्या जातील.</translation> <translation id="2735712963799620190">शेड्यूल</translation> <translation id="2737363922397526254">कोलॅप्स...</translation> @@ -3120,6 +3120,7 @@ <translation id="4735803855089279419">सिस्टमला या डिव्हाइससाठी डिव्हाइस आयडेंटिफायर निर्धारित करता आला नाही.</translation> <translation id="4736292055110123391">तुमच्या सर्व डिव्हाइसवर तुमचे बुकमार्क, पासवर्ड, इतिहास आणि बरेच काही सिंक करा</translation> <translation id="473775607612524610">अपडेट करा</translation> +<translation id="473936925429402449">निवडलेले, <ph name="TOTAL_ELEMENTS" /> पैकी <ph name="CURRENT_ELEMENT" /> अतिरिक्त आशय</translation> <translation id="4739639199548674512">तिकिटे</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />ॲप्लिकेशन कशी अपडेट करायची ते शिका<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{साइट अनम्यूट करा}other{साइट अनम्यूट करा}}</translation> @@ -4142,6 +4143,7 @@ <translation id="6011449291337289699">साइट डेटा साफ करा</translation> <translation id="6015266928248016057">अवैध PUK. बाकी असलेले प्रयत्न: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">वर्ष</translation> +<translation id="6016178549409952427"><ph name="TOTAL_ELEMENTS" /> पैकी <ph name="CURRENT_ELEMENT" /> अतिरिक्त आशयावर नेव्हिगेट करा</translation> <translation id="6016551720757758985">मागील आवृत्तीवर परत येऊन Powerwash ची कन्फर्म करा</translation> <translation id="6016972670657536680">भाषा आणि कीबोर्ड बटण निवडा. सध्या निवडलेली भाषा <ph name="LANGUAGE" /> आहे.</translation> <translation id="6017514345406065928">हिरवा</translation> @@ -5705,7 +5707,6 @@ <translation id="7918257978052780342">नोंदणी</translation> <translation id="7919210519031517829"><ph name="DURATION" /> से</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> ला <ph name="FILENAME" /> पाहता येते</translation> -<translation id="7924080089023843180">तुम्ही Nearby सह शेअरिंग सुरू करत नाही तोपर्यंत कोणीही शेअर करू शकत नाही</translation> <translation id="7924358170328001543">पोर्ट फॉरवर्ड करताना एरर आली</translation> <translation id="792514962475806987">डॉक केलेली झूम पातळी:</translation> <translation id="7925247922861151263">AAA तपास अयशस्वी</translation> @@ -6447,6 +6448,7 @@ <translation id="8811862054141704416">Crostini मायक्रोफोन अॅक्सेस</translation> <translation id="8812552797690463522">हे नेटवर्क तुमच्यासोबत शेअर केलेले आहे.</translation> <translation id="8812593354822910461">तसेच ब्राउझिंग डेटा (<ph name="URL" />) साफ करा ज्यामुळे तुम्ही <ph name="DOMAIN" /> वरून साइन आउट व्हाल. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">मला नंतर आठवण करून द्या</translation> <translation id="8813698869395535039"><ph name="USERNAME" /> मध्ये साइन इन करू शकत नाही</translation> <translation id="8813872945700551674">पालकाला "<ph name="EXTENSION_NAME" />" मंजूर करायला सांगा</translation> <translation id="8813969267212093033">सिस्टम मजकूर या भाषेत दाखवला जातो</translation> @@ -6478,6 +6480,7 @@ <translation id="8838601485495657486">अपारदर्शक</translation> <translation id="8838770651474809439">हॅमबर्गर</translation> <translation id="883911313571074303">इमेजवर भाष्य करा</translation> +<translation id="8841843049738266382">अनुमती दिलेल्या सूची मधील वापरकर्त्यांची नावे वाचा आणि बदला</translation> <translation id="8842594465773264717">हे फिंगरप्रिंट हटवा</translation> <translation id="8845001906332463065">मदत मिळवा</translation> <translation id="8846132060409673887">या कॉंप्युटरची उत्पादक आणि मॉडेल माहिती वाचा</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb index 2012205..e04ff7f 100644 --- a/chrome/app/resources/generated_resources_ms.xtb +++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Peranti anda boleh dibuka kunci dengan Smart Lock. Tekan Enter untuk membuka kunci.</translation> <translation id="1361164813881551742">Tambahkan Secara Manual</translation> <translation id="1361655923249334273">Tidak digunakan</translation> -<translation id="1361707011052629095">Peranti berdekatan anda apabila Kongsi Berdekatan dibuka</translation> <translation id="1361872463926621533">Mainkan bunyi semasa permulaan</translation> <translation id="1362865166188278099">Masalah mekanikal. Semak pencetak</translation> <translation id="1363585519747660921">Pencetak USB memerlukan konfigurasi</translation> @@ -5709,7 +5708,6 @@ <translation id="7918257978052780342">Daftar</translation> <translation id="7919210519031517829"><ph name="DURATION" />s</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> boleh melihat <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Tiada orang melainkan anda membuka Kongsi Berdekatan</translation> <translation id="7924358170328001543">Ralat semasa mengirim semula port</translation> <translation id="792514962475806987">Tahap zum dok:</translation> <translation id="7925247922861151263">Gagal periksa AAA</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb index dfbedfe..a2606cc 100644 --- a/chrome/app/resources/generated_resources_my.xtb +++ b/chrome/app/resources/generated_resources_my.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">သင့်စက်ပစ္စည်းကို Smart Lock ဖြင့် လော့ခ်ဖွင့်နိုင်သည်။ လော့ခ်ဖွင့်ရန် Enter နှိပ်ပါ။</translation> <translation id="1361164813881551742">ကိုယ်တိုင်ထည့်ရန်</translation> <translation id="1361655923249334273">မသုံးခဲ့</translation> -<translation id="1361707011052629095">'အနီးတစ်ဝိုက် မျှဝေခြင်း' ဖွင့်ထားချိန် သင့်အနီးရှိစက်များ</translation> <translation id="1361872463926621533">အစပြုချိန်တွင် အသံဖွင့်ရန်</translation> <translation id="1362865166188278099">စက်ပြဿနာ။ ပရင်တာကိုစစ်ပါ</translation> <translation id="1363585519747660921">USB ပုံနှိပ်စက်အတွက် စီစဉ်သတ်မှတ်မှု လိုအပ်သည်</translation> @@ -5707,7 +5706,6 @@ <translation id="7918257978052780342">စာရင်းသွင်းရန်</translation> <translation id="7919210519031517829"><ph name="DURATION" />စက္ကန့်</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> သည် <ph name="FILENAME" /> ကို ကြည့်နိုင်သည်</translation> -<translation id="7924080089023843180">'အနီးတစ်ဝိုက် မျှဝေခြင်း' ကို သင်မဖွင့်လျှင် မည်သူမျှ မမျှဝေနိုင်ပါ</translation> <translation id="7924358170328001543">ပို့တ်ထပ်ဆင့်ပို့ရာတွင် အမှားဖြစ်သွားသည်</translation> <translation id="792514962475806987">နေရာချထားသည့် ဇူးမ်အဆင့်−</translation> <translation id="7925247922861151263">AAA စစ်ဆေးခြင်း မအောင်မြင်ပါ</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb index e73f82a..98eceb710 100644 --- a/chrome/app/resources/generated_resources_ne.xtb +++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -310,7 +310,6 @@ <translation id="1359923111303110318">तपाईंको यन्त्र Smart Lock प्रयोग गरी अनलक गर्न सकिन्छ। अनलक गर्न Enter थिच्नुहोस्।</translation> <translation id="1361164813881551742">म्यानुअल तरिकाले थप्नुहोस्</translation> <translation id="1361655923249334273">प्रयोग नगरिएको</translation> -<translation id="1361707011052629095">नजिकैका यन्त्रसँग सेयर गर्ने सुविधा खुला भएका बेला तपाईंको नजिकै भएका यन्त्रहरू</translation> <translation id="1361872463926621533">सुरुवातमा ध्वनि प्ले गर्नुहोस्</translation> <translation id="1362865166188278099">मेकानिकल समस्या भयो। प्रिन्टर जाँच्नुहोस्</translation> <translation id="1363585519747660921">USB प्रिन्टरलाई कन्फिगर गर्नु पर्छ</translation> @@ -2636,6 +2635,7 @@ <translation id="4104163789986725820">नि&र्यात...</translation> <translation id="4107048419833779140">भण्डारण यन्त्रहरू पहिचान गर्नुहोस् तथा निकाल्नुहोस्</translation> <translation id="4109135793348361820">विण्डोलाई <ph name="USER_NAME" /> (<ph name="USER_EMAIL" />) मा सार्नुहोस्</translation> +<translation id="411031910327788420">यो सेटिङ प्रयोग गर्न मिल्ने एपहरूमा क्याप्सनको आकार र शैली आफूले चाहेअनुसारको बनाउनुहोस्</translation> <translation id="4110490973560452005">डाउनलोड सम्पन्न भयो: <ph name="FILE_NAME" />। डाउनलोडहरूको पट्टीमा जान Shift+F6 थिच्नुहोस्।</translation> <translation id="4110686435123617899"><ph name="TITLE" /> <ph name="DESC" /> एल्बम चयन गर्नुहोस्</translation> <translation id="4110895898888439383">उच्च कन्ट्रास्ट मोडमा वेब ब्राउज गर्नुहोस्</translation> @@ -2835,6 +2835,7 @@ <translation id="4390000551125140321">{0,plural, =1{इन्कोग्निटो}other{# वटा खुलेका इन्कोग्निटो विन्डोहरू}}</translation> <translation id="439266289085815679">ब्लुटुथ कन्फिगुरेसन <ph name="USER_EMAIL" /> द्वारा नियन्त्रित छ।</translation> <translation id="4392896746540753732">कन्फिगुरेसन फाइल सम्पादन गर्नुहोस्</translation> +<translation id="4393691030048716353"><ph name="DOMAIN" /> ले ADB डिबग प्रक्रिया असक्षम पारेको छ। तपाईंले आफ्नो <ph name="DEVICE_TYPE" /> रिस्टार्ट गरेपछि तपाईं एपहरू sideload गर्न सक्नु हुने छैन।</translation> <translation id="4394049700291259645">असक्षम गर्नुहोस्</translation> <translation id="439817266247065935">तपाईंको यन्त्र राम्ररी बन्द भएन। Linux मा चल्ने एपहरू प्रयोग गर्न Linux पुनः सुरु गर्नुहोस्।</translation> <translation id="4400367121200150367">कहिल्यै पासवर्ड सुरक्षित नगर्ने साइटहरू यहाँ देखापर्ने छन्</translation> @@ -3524,6 +3525,7 @@ <translation id="5265797726250773323">स्थापना गर्ने क्रममा त्रुटि भयो</translation> <translation id="5266113311903163739">प्रमाणपत्र प्राधिकरण आयात त्रुटि</translation> <translation id="5269977353971873915">प्रिन्टिङ असफल भयो</translation> +<translation id="5274738462757057090">Chrome मा मिडियाका क्याप्सन स्वतः सिर्जना गर्छ (यो सेवा हाल अङ्ग्रेजी भाषामा मात्र उपलब्ध छ)</translation> <translation id="5275352920323889391">कुकुर</translation> <translation id="527605982717517565"><ph name="HOST" /> मा सँधै जाभास्क्रिप्टको लागि अनुम</translation> <translation id="5278823018825269962">स्ट्याटस Id</translation> @@ -3959,6 +3961,7 @@ <translation id="5794700615121138172">Linux बाट सेयर गरिएका फोल्डरहरू</translation> <translation id="5794786537412027208">सबै Chrome एप्स छोड्नुहोस्</translation> <translation id="5797070761912323120">Google ले खोज, विज्ञापन र Google का अन्य सेवाहरूलाई वैयक्तीकृत गर्न तपाईंको इतिहाससम्बन्धी जानकारी प्रयोग गर्न सक्छ</translation> +<translation id="5798301976526354562">पाठको आकार (लाइभ क्याप्सनमा पनि यही आकार प्रयोग गरिन्छ)</translation> <translation id="579915268381781820">तपाईंको सुरक्षा साँचो हटाइयो।</translation> <translation id="5799508265798272974">Linux भर्चुअल मेसिन: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">अन्तिम डाउनलोड देखि गन्तव्य फाइल काटिएको वा हटाइएको थियो।</translation> @@ -4866,6 +4869,7 @@ <translation id="6911324888870229398">नेटवर्क जडान गुम्यो। कृपया आफ्नो इन्टरनेट जाँच्नुहोस् वा अर्को Wi-Fi नेटवर्क प्रयोग गरी हेर्नुहोस्।</translation> <translation id="6911734910326569517">मेमोरीको इतिहास</translation> <translation id="6912007319859991306">सेलुलर SIM PIN</translation> +<translation id="691289340230098384">क्याप्सनसम्बन्धी प्राथमिकताहरू</translation> <translation id="6914783257214138813">निर्यात गरिएको फाइल हेर्न सक्ने जोसुकैले तपाईंका पासवर्डहरू देख्न सक्ने छन्।</translation> <translation id="6915804003454593391">प्रयोगकर्ता:</translation> <translation id="6916590542764765824">विस्तार व्यवस्थापन गर्नुहोस्</translation> @@ -5699,7 +5703,6 @@ <translation id="7918257978052780342">भर्ना गर्नुहोस्</translation> <translation id="7919210519031517829"><ph name="DURATION" /> सेकेन्ड</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> ले <ph name="FILENAME" /> हेर्न सक्छ</translation> -<translation id="7924080089023843180">तपाईंले नजिकैका यन्त्रसँग सेयर गर्ने सुविधा अन नगरेसम्म कोही पनि तपाईंसँग सेयर गर्न सक्दैनन्</translation> <translation id="7924358170328001543">पोर्ट थप्ने क्रममा त्रुटि भयो</translation> <translation id="792514962475806987">डक गरिएको जुमको स्तर:</translation> <translation id="7925247922861151263">AAA जाँच असफल भयो</translation> @@ -6153,6 +6156,7 @@ <translation id="8467326454809944210">अर्को भाषा छनौट गर्नुहोस्</translation> <translation id="8470214316007448308">अन्य मान्छेहरू</translation> <translation id="8470513973197838199"><ph name="ORIGIN" /> का सुरक्षित गरिएका पासवर्डहरू</translation> +<translation id="8471256130228705232"><ph name="DOMAIN" /> ले ADB डिबग प्रक्रिया असक्षम पार्दै छ। परिणाम स्वरूप, अबको २४ घन्टामा तपाईंको <ph name="DEVICE_TYPE" /> रिसेट हुने छ। आफूले सुरक्षित राख्न चाहेका सबै फाइलहरू ब्याकअप गर्नुहोस्।</translation> <translation id="8472623782143987204">हार्डवेयरद्वारा समर्थित</translation> <translation id="8473863474539038330">ठेगाना र थप कुराहरू</translation> <translation id="8475313423285172237">तपाईंको कम्प्युटरमा रहेको अर्को प्रोग्रामले एउटा एक्स्टेन्स थपेको छ जसले Chrome को काम गर्ने तरिकालाई परिवर्तन गर्न सक्छ।</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb index 5f34131..1cfc1e3 100644 --- a/chrome/app/resources/generated_resources_nl.xtb +++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Je apparaat kan worden ontgrendeld met Smart Lock. Druk op Enter om te ontgrendelen.</translation> <translation id="1361164813881551742">Handmatig toevoegen</translation> <translation id="1361655923249334273">Ongebruikt</translation> -<translation id="1361707011052629095">Apparaten bij jou in de buurt als 'Dichtbij delen' is geopend</translation> <translation id="1361872463926621533">Geluid afspelen bij opstarten</translation> <translation id="1362865166188278099">Mechanisch probleem. Controleer de printer.</translation> <translation id="1363585519747660921">USB-printer moet worden geconfigureerd</translation> @@ -1476,6 +1475,7 @@ <translation id="2731700343119398978">Even geduld...</translation> <translation id="2731710757838467317">Je gebruiker met beperkte rechten wordt gemaakt. Dit kan even duren.</translation> <translation id="2731971182069536520">De volgende keer dat je je apparaat opnieuw opstart, voert je beheerder een update uit waarmee je lokale gegevens worden verwijderd.</translation> +<translation id="2732134891301408122">Extra content <ph name="CURRENT_ELEMENT" /> van <ph name="TOTAL_ELEMENTS" /></translation> <translation id="2734760316755174687">Sites onder <ph name="SITE_GROUP_NAME" /> worden ook gereset.</translation> <translation id="2735712963799620190">Schema</translation> <translation id="2737363922397526254">Samenvouwen...</translation> @@ -3123,6 +3123,7 @@ <translation id="4735803855089279419">Het systeem kan de apparaat-ID's voor dit apparaat niet bepalen.</translation> <translation id="4736292055110123391">Je bookmarks, wachtwoorden, geschiedenis en meer synchroniseren op al je apparaten</translation> <translation id="473775607612524610">Updaten</translation> +<translation id="473936925429402449">Geselecteerd, extra content <ph name="CURRENT_ELEMENT" /> van <ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Tickets</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Meer informatie over hoe je apps updatet<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Geluid van site dempen opheffen}other{Geluid van sites dempen opheffen}}</translation> @@ -4144,6 +4145,7 @@ <translation id="6011449291337289699">Sitegegevens wissen</translation> <translation id="6015266928248016057">Ongeldige pukcode. Resterende pogingen: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">Jaar</translation> +<translation id="6016178549409952427">Navigeren naar extra content <ph name="CURRENT_ELEMENT" /> van <ph name="TOTAL_ELEMENTS" /></translation> <translation id="6016551720757758985">Powerwash bevestigen met herstel van eerdere versie</translation> <translation id="6016972670657536680">Knop 'Taal en toetsenbord selecteren'. De momenteel geselecteerde taal is <ph name="LANGUAGE" />.</translation> <translation id="6017514345406065928">Groen</translation> @@ -5708,7 +5710,6 @@ <translation id="7918257978052780342">Aanmelden</translation> <translation id="7919210519031517829"><ph name="DURATION" />s</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> kan <ph name="FILENAME" /> bekijken</translation> -<translation id="7924080089023843180">Niemand tenzij je 'Dichtbij delen' opent</translation> <translation id="7924358170328001543">Fout bij doorschakelen van poort</translation> <translation id="792514962475806987">Vastgezet zoomniveau:</translation> <translation id="7925247922861151263">AAA-controle mislukt</translation> @@ -6163,7 +6164,7 @@ <translation id="8467326454809944210">Een andere taal kiezen</translation> <translation id="8470214316007448308">Andere mensen</translation> <translation id="8470513973197838199">Opgeslagen wachtwoorden voor <ph name="ORIGIN" /></translation> -<translation id="8471256130228705232"><ph name="DOMAIN" /> schakelt ADB-foutopsporing uit. Hierdoor wordt je <ph name="DEVICE_TYPE" /> over 24 uur gereset. Maak een back-up van bestanden die je wilt houden.</translation> +<translation id="8471256130228705232"><ph name="DOMAIN" /> schakelt ADB-foutopsporing uit. Hierdoor wordt je <ph name="DEVICE_TYPE" /> over 24 uur gereset. Maak een back-up van de bestanden die je wilt houden.</translation> <translation id="8472623782143987204">hardware-ondersteund</translation> <translation id="8473863474539038330">Adressen en meer</translation> <translation id="8475313423285172237">Een ander programma op je computer heeft een extensie toegevoegd die de manier waarop Chrome werkt kan wijzigen.</translation> @@ -6451,6 +6452,7 @@ <translation id="8811862054141704416">Microfoontoegang voor Crostini</translation> <translation id="8812552797690463522">Dit netwerk is met jou gedeeld.</translation> <translation id="8812593354822910461">Ook browsergegevens wissen (<ph name="URL" />). Als je dit doet, word je uitgelogd bij <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Later herinneren</translation> <translation id="8813698869395535039">Kan niet inloggen bij <ph name="USERNAME" /></translation> <translation id="8813872945700551674">Vraag een ouder om <ph name="EXTENSION_NAME" /> goed te keuren</translation> <translation id="8813969267212093033">Systeemtekst wordt in deze taal weergegeven</translation> @@ -6481,6 +6483,7 @@ <translation id="8838601485495657486">Ondoorzichtig</translation> <translation id="8838770651474809439">Hamburger</translation> <translation id="883911313571074303">Afbeelding annoteren</translation> +<translation id="8841843049738266382">Gebruikers op de toelatingslijst lezen en wijzigen</translation> <translation id="8842594465773264717">Deze vingerafdruk verwijderen</translation> <translation id="8845001906332463065">Hulp nodig?</translation> <translation id="8846132060409673887">De fabrikant en het model van deze computer lezen</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb index 62b6676..a0e0df6 100644 --- a/chrome/app/resources/generated_resources_no.xtb +++ b/chrome/app/resources/generated_resources_no.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Enheten kan låses opp med Smart Lock. Trykk på Enter for å låse opp.</translation> <translation id="1361164813881551742">Legg til manuelt</translation> <translation id="1361655923249334273">Ubrukt</translation> -<translation id="1361707011052629095">Enheter i nærheten av deg når nærdeling er åpen</translation> <translation id="1361872463926621533">Spill av lyd ved oppstart</translation> <translation id="1362865166188278099">Mekanisk feil. Sjekk skriveren</translation> <translation id="1363585519747660921">USB-skriveren må konfigureres</translation> @@ -1473,6 +1472,7 @@ <translation id="2731700343119398978">Vent litt …</translation> <translation id="2731710757838467317">Oppretter den administrerte brukeren din. Dette kan ta litt tid.</translation> <translation id="2731971182069536520">Neste gang du starter enheten på nytt, utfører administratoren en engangsoppdatering som sletter de lokale dataene dine.</translation> +<translation id="2732134891301408122">Ekstra innhold <ph name="CURRENT_ELEMENT" /> av <ph name="TOTAL_ELEMENTS" /></translation> <translation id="2734760316755174687">Nettsteder under <ph name="SITE_GROUP_NAME" /> blir også tilbakestilt.</translation> <translation id="2735712963799620190">Tidsplan</translation> <translation id="2737363922397526254">Skjul</translation> @@ -3118,6 +3118,7 @@ <translation id="4735803855089279419">Systemet kunne ikke fastslå enhetsidentifikatorer for denne enheten.</translation> <translation id="4736292055110123391">Synkroniser blant annet bokmerker, passord og loggen på alle enhetene dine</translation> <translation id="473775607612524610">Oppdater</translation> +<translation id="473936925429402449">Valgt, ekstra innhold <ph name="CURRENT_ELEMENT" /> av <ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Saker</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Finn ut hvordan du oppdaterer programmer<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Slå på lyden for nettstedet}other{Slå på lyden for nettstedene}}</translation> @@ -4139,6 +4140,7 @@ <translation id="6011449291337289699">Fjern nettstedsdata</translation> <translation id="6015266928248016057">Ugyldig PUK-kode. Gjenværende forsøk: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">År</translation> +<translation id="6016178549409952427">Gå til ekstra innhold <ph name="CURRENT_ELEMENT" /> av <ph name="TOTAL_ELEMENTS" /></translation> <translation id="6016551720757758985">Bekreft kjøring av Powerwash, som tilbakestiller enheten til forrige versjon</translation> <translation id="6016972670657536680">Velg språk- og tastaturknappen. Det valgte språket er for øyeblikket <ph name="LANGUAGE" /></translation> <translation id="6017514345406065928">Grønn</translation> @@ -5704,7 +5706,6 @@ <translation id="7918257978052780342">Registrer deg</translation> <translation id="7919210519031517829"><ph name="DURATION" /> s</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> kan se <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Ingen, med mindre du åpner nærdeling</translation> <translation id="7924358170328001543">Feil ved viderekobling av port</translation> <translation id="792514962475806987">Dokket zoomnivå:</translation> <translation id="7925247922861151263">AAA-kontroll mislyktes</translation> @@ -6446,6 +6447,7 @@ <translation id="8811862054141704416">Mikrofontilgang for Crostini</translation> <translation id="8812552797690463522">Dette nettverket deles med deg.</translation> <translation id="8812593354822910461">Slett også nettlesingsdata (<ph name="URL" />), noe som medfører at du blir logget av <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Påminn meg senere</translation> <translation id="8813698869395535039">Kan ikke logge på <ph name="USERNAME" /></translation> <translation id="8813872945700551674">Få en forelder til å godkjenne «<ph name="EXTENSION_NAME" />»</translation> <translation id="8813969267212093033">Systemtekst vises på dette språket</translation> @@ -6476,6 +6478,7 @@ <translation id="8838601485495657486">Ugjennomsiktig</translation> <translation id="8838770651474809439">Hamburger</translation> <translation id="883911313571074303">Kommenter bildet</translation> +<translation id="8841843049738266382">Lese og endre brukere på godkjenningslisten</translation> <translation id="8842594465773264717">Slett dette fingeravtrykket</translation> <translation id="8845001906332463065">Få hjelp</translation> <translation id="8846132060409673887">Les om datamaskinens produsent og modell</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb index dc13a59..435384f0 100644 --- a/chrome/app/resources/generated_resources_or.xtb +++ b/chrome/app/resources/generated_resources_or.xtb
@@ -311,7 +311,6 @@ <translation id="1359923111303110318">ଆପଣଙ୍କର ଡିଭାଇସ୍ Smart Lock ସାହାଯ୍ୟରେ ଅନ୍ଲକ୍ କରାଯାଇପାରିବ। ଅନ୍ଲକ୍ କରିବାକୁ ଏଣ୍ଟର୍ କୀ ଦବାନ୍ତୁ।</translation> <translation id="1361164813881551742">ମାନୁଆଲ୍ ଭାବେ ଯୋଗକରନ୍ତୁ</translation> <translation id="1361655923249334273">ଅବ୍ୟବହୃତ</translation> -<translation id="1361707011052629095">Nearby Share ଚାଲୁ ଥିବା ସମୟରେ ଆପଣଙ୍କ ଆଖପାଖରେ ଥିବା ଡିଭାଇସଗୁଡ଼ିକ</translation> <translation id="1361872463926621533">ଆରମ୍ଭ ହେବାମାତ୍ରେ ସାଉଣ୍ଡ ଚଲାନ୍ତୁ</translation> <translation id="1362865166188278099">ମେକାନିକାଲ୍ ସମସ୍ୟା। ପ୍ରିଣ୍ଟର୍ ଯାଞ୍ଚ କରନ୍ତୁ</translation> <translation id="1363585519747660921">USB ପ୍ରିଣ୍ଟର୍ କନ୍ଫିଗରେସନ୍ ଦରକାର ହୋଇଥାଏ।</translation> @@ -5703,7 +5702,6 @@ <translation id="7918257978052780342">ପଞ୍ଜିକରଣ କରନ୍ତୁ</translation> <translation id="7919210519031517829"><ph name="DURATION" />ସେ</translation> <translation id="7920363873148656176"><ph name="ORIGIN" />, <ph name="FILENAME" /> ଦେଖିପାରିବ</translation> -<translation id="7924080089023843180">ଆପଣ Nearby Share ଚାଲୁ ନକରିବା ପର୍ଯ୍ୟନ୍ତ କେହି ଏହାକୁ ଦେଖିପାରିବେ ନାହିଁ</translation> <translation id="7924358170328001543">ପୋର୍ଟ ଫରୱାର୍ଡିଂ ତ୍ରୁଟି</translation> <translation id="792514962475806987">ଡକ୍ ଥିବା ଜୁମ୍ର ସ୍ତର:</translation> <translation id="7925247922861151263">AAAର ଯାଞ୍ଚ ଫେଲ୍ ହୋଇଗଲା</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb index ad5ad944..8c77eeec 100644 --- a/chrome/app/resources/generated_resources_pa.xtb +++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">ਤੁਹਾਡਾ ਡੀਵਾਈਸ 'ਸਮਾਰਟ ਲਾਕ' ਨਾਲ ਅਣਲਾਕ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। ਅਣਲਾਕ ਕਰਨ ਲਈ ਐਂਟਰ ਦਬਾਓ।</translation> <translation id="1361164813881551742">ਹੱਥੀਂ ਸ਼ਾਮਲ ਕਰੋ</translation> <translation id="1361655923249334273">ਬਿਨਾਂ ਵਰਤਿਆ</translation> -<translation id="1361707011052629095">ਉਹ ਡੀਵਾਈਸ ਜੋ 'ਨਜ਼ਦੀਕੀ ਸਾਂਝ' ਖੁੱਲ੍ਹੀ ਹੋਣ 'ਤੇ ਤੁਹਾਡੇ ਨੇੜੇ ਹੁੰਦੇ ਹਨ</translation> <translation id="1361872463926621533">ਸ਼ੁਰੂ ਹੋਣ ਵੇਲੇ ਧੁਨੀ ਵਜਾਓ</translation> <translation id="1362865166188278099">ਮਕੈਨਿਕਲ ਸਮੱਸਿਆ। ਪ੍ਰਿੰਟਰ ਦੀ ਜਾਂਚ ਕਰੋ</translation> <translation id="1363585519747660921">USB ਪ੍ਰਿੰਟਰ ਨੂੰ ਸੰਰੂਪਣ ਦੀ ਲੋੜ ਹੈ</translation> @@ -5706,7 +5705,6 @@ <translation id="7918257978052780342">ਦਰਜ ਕਰੋ</translation> <translation id="7919210519031517829"><ph name="DURATION" /> ਸਕਿੰਟ</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> ਵੱਲੋਂ <ph name="FILENAME" /> ਨੂੰ ਦੇਖਿਆ ਜਾ ਸਕਦਾ ਹੈ</translation> -<translation id="7924080089023843180">ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ 'ਨਜ਼ਦੀਕੀ ਸਾਂਝ' ਨਹੀਂ ਖੋਲ੍ਹਦੇ, ਉਦੋਂ ਤੱਕ ਕੋਈ ਵੀ ਡਾਟਾ ਸਾਂਝਾ ਨਹੀਂ ਕਰ ਸਕਦਾ</translation> <translation id="7924358170328001543">ਪੋਰਟ ਨੂੰ ਅੱਗੇ ਭੇਜਣ ਵੇਲੇ ਗੜਬੜ</translation> <translation id="792514962475806987">ਡੌਕ ਜ਼ੂਮ ਪੱਧਰ:</translation> <translation id="7925247922861151263">AAA ਜਾਂਚ ਅਸਫਲ ਹੋ ਗਈ</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb index f6a85f31..ed2e026 100644 --- a/chrome/app/resources/generated_resources_pl.xtb +++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Twoje urządzenie można odblokować, używając funkcji Smart Lock. Aby to zrobić, naciśnij Enter.</translation> <translation id="1361164813881551742">Dodaj ręcznie</translation> <translation id="1361655923249334273">Nieużywany</translation> -<translation id="1361707011052629095">Pobliskie urządzenia, gdy masz uruchomione Udostępnianie w pobliżu.</translation> <translation id="1361872463926621533">Odtwórz dźwięk podczas uruchamiania</translation> <translation id="1362865166188278099">Problem mechaniczny. Sprawdź drukarkę.</translation> <translation id="1363585519747660921">Drukarka USB wymaga konfiguracji</translation> @@ -1472,6 +1471,7 @@ <translation id="2731700343119398978">Czekaj...</translation> <translation id="2731710757838467317">Tworzę użytkownika nadzorowanego. Może to potrwać kilka minut.</translation> <translation id="2731971182069536520">Po następnym uruchomieniu urządzenia administrator wykona jednorazową aktualizację, która usunie Twoje dane lokalne.</translation> +<translation id="2732134891301408122">Dodatkowy element zawartości (<ph name="CURRENT_ELEMENT" /> z <ph name="TOTAL_ELEMENTS" />)</translation> <translation id="2734760316755174687">Witryny z grupy <ph name="SITE_GROUP_NAME" /> też zostaną zresetowane.</translation> <translation id="2735712963799620190">Harmonogram</translation> <translation id="2737363922397526254">Zwiń...</translation> @@ -3119,6 +3119,7 @@ <translation id="4735803855089279419">System nie mógł określić identyfikatorów tego urządzenia.</translation> <translation id="4736292055110123391">Synchronizuj zakładki, hasła, historię i inne dane na wszystkich Twoich urządzeniach</translation> <translation id="473775607612524610">Aktualizuj</translation> +<translation id="473936925429402449">Zaznaczono, dodatkowy element zawartości (<ph name="CURRENT_ELEMENT" /> z <ph name="TOTAL_ELEMENTS" />)</translation> <translation id="4739639199548674512">Bilety</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Dowiedz się, jak zaktualizować aplikacje<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Wyłącz wyciszenie strony}few{Wyłącz wyciszenie stron}many{Wyłącz wyciszenie stron}other{Wyłącz wyciszenie stron}}</translation> @@ -4140,6 +4141,7 @@ <translation id="6011449291337289699">Wyczyść dane witryny</translation> <translation id="6015266928248016057">Nieprawidłowy PUK. Pozostała liczba prób: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">Rok</translation> +<translation id="6016178549409952427">Przejdź do dodatkowego elementu zawartości (<ph name="CURRENT_ELEMENT" /> z <ph name="TOTAL_ELEMENTS" />)</translation> <translation id="6016551720757758985">Potwierdzanie wykonania funkcji Powerwash z przywróceniem poprzedniej wersji</translation> <translation id="6016972670657536680">Przycisk wybierania języka i klawiatury. Obecnie jest wybrany język <ph name="LANGUAGE" />.</translation> <translation id="6017514345406065928">Zielony</translation> @@ -5705,7 +5707,6 @@ <translation id="7918257978052780342">Zarejestruj</translation> <translation id="7919210519031517829"><ph name="DURATION" /> s</translation> <translation id="7920363873148656176">Strona <ph name="ORIGIN" /> może wyświetlać: <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Nikt, chyba że masz włączone Udostępnianie w pobliżu.</translation> <translation id="7924358170328001543">Błąd przekierowania portów</translation> <translation id="792514962475806987">Poziom powiększenia lupy zadokowanej:</translation> <translation id="7925247922861151263">Sprawdzenie AAA nie powiodło się</translation> @@ -6447,6 +6448,7 @@ <translation id="8811862054141704416">Dostęp do mikrofonu dla Crostini</translation> <translation id="8812552797690463522">Ta sieć została Ci udostępniona.</translation> <translation id="8812593354822910461">Wyczyść też dane przeglądania (<ph name="URL" />) – w rezultacie nastąpi wylogowanie z <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Przypomnij później</translation> <translation id="8813698869395535039">Problem z logowaniem na konto <ph name="USERNAME" /></translation> <translation id="8813872945700551674">Poproś rodzica o zatwierdzenie rozszerzenia „<ph name="EXTENSION_NAME" />”</translation> <translation id="8813969267212093033">W tym języku wyświetlany jest tekst z systemu</translation> @@ -6477,6 +6479,7 @@ <translation id="8838601485495657486">Nieprzezroczyste</translation> <translation id="8838770651474809439">Hamburger</translation> <translation id="883911313571074303">Dodaj notatkę na grafice</translation> +<translation id="8841843049738266382">Odczytywanie i zmienianie użytkowników na liście dozwolonych</translation> <translation id="8842594465773264717">Usuń ten odcisk palca</translation> <translation id="8845001906332463065">Uzyskaj pomoc</translation> <translation id="8846132060409673887">Odczytywanie producenta i modelu tego komputera</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index 9f1cbb3..80ae27d7 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Seu dispositivo pode ser desbloqueado com o Smart Lock. Pressione "Enter" para desbloquear.</translation> <translation id="1361164813881551742">Adicionar manualmente</translation> <translation id="1361655923249334273">Não utilizado</translation> -<translation id="1361707011052629095">Dispositivos perto de você quando o "Compartilhar por proximidade" estiver aberto</translation> <translation id="1361872463926621533">Reproduzir som na inicialização</translation> <translation id="1362865166188278099">Problema mecânico. Verificar impressora</translation> <translation id="1363585519747660921">A impressora USB precisa ser configurada</translation> @@ -1476,6 +1475,7 @@ <translation id="2731700343119398978">Aguarde...</translation> <translation id="2731710757838467317">Criando seu usuário supervisionado. Isso pode demorar alguns instantes.</translation> <translation id="2731971182069536520">Na próxima vez que você reiniciar o dispositivo, o administrador fará uma atualização única que excluirá seus dados locais.</translation> +<translation id="2732134891301408122">Conteúdo extra <ph name="CURRENT_ELEMENT" /> de <ph name="TOTAL_ELEMENTS" /></translation> <translation id="2734760316755174687">Os sites de <ph name="SITE_GROUP_NAME" /> também serão redefinidos.</translation> <translation id="2735712963799620190">Programar</translation> <translation id="2737363922397526254">Recolher...</translation> @@ -3124,6 +3124,7 @@ <translation id="4735803855089279419">Falha do sistema ao determinar os identificadores do dispositivo.</translation> <translation id="4736292055110123391">Sincronize favoritos, senhas, histórico e muito mais em todos os seus dispositivos</translation> <translation id="473775607612524610">Atualizar</translation> +<translation id="473936925429402449">Selecionado, conteúdo extra <ph name="CURRENT_ELEMENT" /> de <ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Tíquetes</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Saiba como atualizar aplicativos<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Ativar som do site}one{Ativar som do site}other{Ativar som dos sites}}</translation> @@ -4146,6 +4147,7 @@ <translation id="6011449291337289699">Limpar dados de sites</translation> <translation id="6015266928248016057">PUK inválida. Tentativas restantes: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">Ano</translation> +<translation id="6016178549409952427">Navegar para o conteúdo extra <ph name="CURRENT_ELEMENT" /> de <ph name="TOTAL_ELEMENTS" /></translation> <translation id="6016551720757758985">Confirmar powerwash com retorno à versão anterior</translation> <translation id="6016972670657536680">Botão Selecionar idioma e teclado. O idioma selecionado no momento é o <ph name="LANGUAGE" />.</translation> <translation id="6017514345406065928">Verde</translation> @@ -5712,7 +5714,6 @@ <translation id="7918257978052780342">Inscrever-se</translation> <translation id="7919210519031517829"><ph name="DURATION" />s</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> pode ver <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Ninguém, a menos que você abra o "Compartilhar por proximidade"</translation> <translation id="7924358170328001543">Erro ao encaminhar a porta</translation> <translation id="792514962475806987">Nível de zoom da lupa em área fixa:</translation> <translation id="7925247922861151263">Falha ao verificar AAA</translation> @@ -6454,6 +6455,7 @@ <translation id="8811862054141704416">Acesso ao microfone no Crostini</translation> <translation id="8812552797690463522">Esta rede é compartilhada com você.</translation> <translation id="8812593354822910461">Limpar também os dados de navegação (<ph name="URL" />). Sua conta poderá ser desconectada de <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Lembrar mais tarde</translation> <translation id="8813698869395535039">Não é possível fazer login em <ph name="USERNAME" /></translation> <translation id="8813872945700551674">Peça para seu pai/mãe aprovar a extensão <ph name="EXTENSION_NAME" /></translation> <translation id="8813969267212093033">O texto do sistema é exibido nesse idioma</translation> @@ -6484,6 +6486,7 @@ <translation id="8838601485495657486">Opaco</translation> <translation id="8838770651474809439">Hambúrger</translation> <translation id="883911313571074303">Nota na imagem</translation> +<translation id="8841843049738266382">Ler e mudar usuários na lista de permissões</translation> <translation id="8842594465773264717">Excluir essa impressão digital</translation> <translation id="8845001906332463065">Ajuda</translation> <translation id="8846132060409673887">Ler as informações sobre o fabricante e modelo deste computador</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb index 009e932..47595f5 100644 --- a/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">O seu dispositivo pode ser desbloqueado com o Smart Lock. Prima Enter para desbloquear.</translation> <translation id="1361164813881551742">Adicionar manualmente</translation> <translation id="1361655923249334273">Não utilizado</translation> -<translation id="1361707011052629095">Dispositivos perto de si quando a funcionalidade Partilhar com Nearby estiver aberta.</translation> <translation id="1361872463926621533">Reproduzir som ao arrancar</translation> <translation id="1362865166188278099">Ocorreu um problema mecânico. Verifique a impressora.</translation> <translation id="1363585519747660921">É necessário configurar a impressora USB</translation> @@ -1475,6 +1474,7 @@ <translation id="2731700343119398978">Aguarde...</translation> <translation id="2731710757838467317">A criar o utilizador supervisionado. Isto poderá demorar alguns momentos.</translation> <translation id="2731971182069536520">Da próxima vez que reiniciar o dispositivo, o administrador irá efetuar uma atualização única que elimina os seus dados locais.</translation> +<translation id="2732134891301408122">Conteúdo adicional <ph name="CURRENT_ELEMENT" /> de <ph name="TOTAL_ELEMENTS" /></translation> <translation id="2734760316755174687">Os sites em <ph name="SITE_GROUP_NAME" /> também serão repostos.</translation> <translation id="2735712963799620190">Programação</translation> <translation id="2737363922397526254">Reduzir...</translation> @@ -3123,6 +3123,7 @@ <translation id="4735803855089279419">O sistema não conseguiu determinar identificadores de dispositivos para este dispositivo.</translation> <translation id="4736292055110123391">Sincronizar os seus marcadores, palavras-passe, histórico e muito mais em todos os seus dispositivos</translation> <translation id="473775607612524610">Atualizar</translation> +<translation id="473936925429402449">Selecionado, conteúdo adicional <ph name="CURRENT_ELEMENT" /> de <ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Permissões</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Saiba como atualizar aplicações<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Reativar o som do site}other{Reativar o som dos sites}}</translation> @@ -4145,6 +4146,7 @@ <translation id="6011449291337289699">Limpar dados do site</translation> <translation id="6015266928248016057">PUK inválido. Tentativas restantes: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">Ano</translation> +<translation id="6016178549409952427">Navegar para conteúdo adicional <ph name="CURRENT_ELEMENT" /> de <ph name="TOTAL_ELEMENTS" /></translation> <translation id="6016551720757758985">Confirmar o Powerwash com o regresso à versão anterior</translation> <translation id="6016972670657536680">Selecione o idioma e o botão do teclado. Atualmente, o idioma selecionado é o <ph name="LANGUAGE" />.</translation> <translation id="6017514345406065928">Verde</translation> @@ -5710,7 +5712,6 @@ <translation id="7918257978052780342">Inscrever</translation> <translation id="7919210519031517829"><ph name="DURATION" /> s</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> pode ver <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Ninguém, exceto se abrir a funcionalidade Partilhar com Nearby.</translation> <translation id="7924358170328001543">Ocorreu um erro no encaminhamento de porta.</translation> <translation id="792514962475806987">Nível de zoom da lupa ancorada:</translation> <translation id="7925247922861151263">A verificação AAA falhou</translation> @@ -6451,6 +6452,7 @@ <translation id="8811862054141704416">Acesso ao microfone do Crostini</translation> <translation id="8812552797690463522">Esta rede é partilhada consigo.</translation> <translation id="8812593354822910461">Limpar também os dados de navegação (<ph name="URL" />), o que terminará a sua sessão em <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Lembrar-me mais tarde</translation> <translation id="8813698869395535039">Não é possível iniciar sessão na conta <ph name="USERNAME" /></translation> <translation id="8813872945700551674">Pede ao teu Pai ou Mãe para aprovar "<ph name="EXTENSION_NAME" />"</translation> <translation id="8813969267212093033">O texto do sistema é apresentado neste idioma.</translation> @@ -6481,6 +6483,7 @@ <translation id="8838601485495657486">Opaco</translation> <translation id="8838770651474809439">Hambúrguer</translation> <translation id="883911313571074303">Anotar imagem</translation> +<translation id="8841843049738266382">Ler e alterar utilizadores na lista de autorizações</translation> <translation id="8842594465773264717">Eliminar esta impressão digital</translation> <translation id="8845001906332463065">Obter ajuda</translation> <translation id="8846132060409673887">Consultar o fabricante e modelo deste computador</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb index f362b4d2..4d603fee 100644 --- a/chrome/app/resources/generated_resources_ro.xtb +++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Dispozitivul se deblochează cu Smart Lock. Apasă pe Enter pentru a-l debloca.</translation> <translation id="1361164813881551742">Adaugă manual</translation> <translation id="1361655923249334273">Neutilizat</translation> -<translation id="1361707011052629095">Dispozitive din apropiere, atunci când funcția Nearby Share este deschisă</translation> <translation id="1361872463926621533">Redă sunetul la pornire</translation> <translation id="1362865166188278099">Defecțiune mecanică. Verifică imprimanta.</translation> <translation id="1363585519747660921">Imprimanta USB necesită configurare</translation> @@ -5709,7 +5708,6 @@ <translation id="7918257978052780342">Înscrieți</translation> <translation id="7919210519031517829"><ph name="DURATION" /> sec.</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> poate să vadă <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Nimeni, dacă nu deschizi Nearby Share</translation> <translation id="7924358170328001543">Eroare la redirecționarea de port</translation> <translation id="792514962475806987">Nivelul de zoom al lupei andocate:</translation> <translation id="7925247922861151263">Verificarea AAA nu a reușit</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb index be873a6f..856f4dd 100644 --- a/chrome/app/resources/generated_resources_ru.xtb +++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Ваше устройство можно разблокировать с помощью Smart Lock. Для этого нажмите Ввод.</translation> <translation id="1361164813881551742">Добавить вручную</translation> <translation id="1361655923249334273">Не используется</translation> -<translation id="1361707011052629095">Устройства, находящиеся поблизости, когда у вас открыто окно "Обмен с окружением"</translation> <translation id="1361872463926621533">Воспроизводить звук при запуске</translation> <translation id="1362865166188278099">Техническая проблема. Проверьте принтер.</translation> <translation id="1363585519747660921">Необходимо настроить USB-принтер</translation> @@ -5707,7 +5706,6 @@ <translation id="7918257978052780342">Зарегистрироваться</translation> <translation id="7919210519031517829"><ph name="DURATION" /> сек.</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> может просматривать файл "<ph name="FILENAME" />".</translation> -<translation id="7924080089023843180">Никто, если окно "Обмен с окружением" закрыто</translation> <translation id="7924358170328001543">При переадресации порта произошла ошибка.</translation> <translation id="792514962475806987">Масштаб закрепленной лупы:</translation> <translation id="7925247922861151263">Сбой при проверке AAA</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb index 84acb6e..4ad64f9f 100644 --- a/chrome/app/resources/generated_resources_si.xtb +++ b/chrome/app/resources/generated_resources_si.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">ඔබේ උපාංගය ස්මාර්ට් අගුල මඟින් අගුලු හැරිය හැක. අගුලු හැරීමට Enter ඔබන්න.</translation> <translation id="1361164813881551742">හස්තීයව එක් කරන්න</translation> <translation id="1361655923249334273">භාවිතා නොකළ</translation> -<translation id="1361707011052629095">ළඟ බෙදා ගැනීම විවෘත විට ඔබ අසල ඇති උපාංග</translation> <translation id="1361872463926621533">අැරඹුමෙහි ශබ්ද වාදන කරන්න</translation> <translation id="1362865166188278099">කාර්මික ගැටලුවකි. මුද්රණ යන්ත්රය පරීක්ෂා කරන්න</translation> <translation id="1363585519747660921">USB මුද්රකයට වින්යාස කිරීම අවශ්යයි</translation> @@ -1473,6 +1472,7 @@ <translation id="2731700343119398978">කරුණාකර රැඳෙන්න..</translation> <translation id="2731710757838467317">ඔබේ පාලිත පරිශීලක නිර්මාණය කරමින්. මෙයට මොහොතක් ගතවිය හැක.</translation> <translation id="2731971182069536520">ඔබ මීළඟ වරට ඔබේ උපාංගය යළි අරඹන විට, ඔබේ පරිපාලකයා ඔබේ අභ්යන්තර දත්ත මකා දමන එක් වරක යාවත්කාලීනයක් සිදු කරයි.</translation> +<translation id="2732134891301408122"><ph name="TOTAL_ELEMENTS" />කින් <ph name="CURRENT_ELEMENT" /> අමතර අන්තර්ගතය</translation> <translation id="2734760316755174687"><ph name="SITE_GROUP_NAME" /> යටතේ ඇති අඩවිත් යළි පිහිටුවනු ලැබේ.</translation> <translation id="2735712963799620190">කාල සටහන</translation> <translation id="2737363922397526254">හකුළන්න...</translation> @@ -3121,6 +3121,7 @@ <translation id="4735803855089279419">මෙම උපාංගය සඳහා උපාංගයේ හැඳුනුම් තීරණ කිරීමට පද්ධතියට නොහැකි විය.</translation> <translation id="4736292055110123391">ඔබේ සියලු උපාංගවල ඔබේ පිටුසන්, මුරපද, ඉතිහාසය සහ තවත් බොහෝ දේ සමමුහුර්ත කරන්න</translation> <translation id="473775607612524610">යාවත්කාලීනය</translation> +<translation id="473936925429402449">තෝරන ලදි, <ph name="TOTAL_ELEMENTS" />කින් <ph name="CURRENT_ELEMENT" /> අමතර අන්තර්ගතය</translation> <translation id="4739639199548674512">ප්රවේශපත්ර</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />යෙදුම් යාවත්කාලීන කරන ආකාරය ඉගෙන ගන්න<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{වෙබ් අඩවිය නිහඬ නොකරන්න}one{වෙබ් අඩවි නිහඬ නොකරන්න}other{වෙබ් අඩවි නිහඬ නොකරන්න}}</translation> @@ -4143,6 +4144,7 @@ <translation id="6011449291337289699">අඩවි දත්ත හිස් කරන්න</translation> <translation id="6015266928248016057">අවලංගු PUK. ඉතිරි යළි උත්සාහ කිරීම්: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">වර්ශය</translation> +<translation id="6016178549409952427"><ph name="TOTAL_ELEMENTS" />කින් <ph name="CURRENT_ELEMENT" /> අමතර අන්තර්ගතයට සංචාලනය කරන්න</translation> <translation id="6016551720757758985">Powerwash තහවුරු කර පෙර සංස්කරණයට යන්න.</translation> <translation id="6016972670657536680">භාෂා හා යතුරු පුවරු බොත්තම තෝරන්න. දැනට තේරූ භාෂාව වනුයේ <ph name="LANGUAGE" />.</translation> <translation id="6017514345406065928">කොළ</translation> @@ -5705,7 +5707,6 @@ <translation id="7918257978052780342">බඳවාගන්න</translation> <translation id="7919210519031517829">ත<ph name="DURATION" /></translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> හට <ph name="FILENAME" /> බැලිය හැක</translation> -<translation id="7924080089023843180">ඔබ ළඟ බෙදා ගැනීම විවෘත කරන්නේ නම් හැර කිසිවෙකු නැත</translation> <translation id="7924358170328001543">තොට යොමු කිරීමේ දෝෂයයි</translation> <translation id="792514962475806987">ඈඳන ලද විශාලන මට්ටම:</translation> <translation id="7925247922861151263">AAA පරීක්ෂණ අසමත්</translation> @@ -6446,6 +6447,7 @@ <translation id="8811862054141704416">Crostini මයික්රොෆෝන ප්රවේශය</translation> <translation id="8812552797690463522">මෙම ජාලය ඔබ හා බෙදා ගැනේ.</translation> <translation id="8812593354822910461">ඔබව <ph name="DOMAIN" /> වෙතින් වරන බ්රවුස් කිරීමේ දත්ත (<ph name="URL" />) ද හිස් කරන්න. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">මට පසුව සිහිකැඳවන්න</translation> <translation id="8813698869395535039"><ph name="USERNAME" /> වෙත පුරනය විය නොහැක</translation> <translation id="8813872945700551674">"<ph name="EXTENSION_NAME" />" අනුමත කිරීමට මාපියෙකු වෙත යන්න</translation> <translation id="8813969267212093033">පද්ධති පාඨය මෙම භාෂාවේ පෙන්වනු ලැබේ</translation> @@ -6476,6 +6478,7 @@ <translation id="8838601485495657486">පාරාන්ධ</translation> <translation id="8838770651474809439">හැම්බර්ගර්</translation> <translation id="883911313571074303">රූපය අනුසටහන් කරන්න</translation> +<translation id="8841843049738266382">සුදු ලැයිස්තුගත පරිශීලකයන් කියවන්න සහ වෙනස් කරන්න</translation> <translation id="8842594465773264717">මෙම ඇඟිලි සලකුණ මකන්න</translation> <translation id="8845001906332463065">උදවු ලබා ගන්න</translation> <translation id="8846132060409673887">මෙම උපාංගයේ නිෂ්පාදකයා සහ මාදිලිය කියවන්න</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb index e2e5961..d866bfd 100644 --- a/chrome/app/resources/generated_resources_sk.xtb +++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Zariadenie môžete odomykať pomocou funkcie Smart Lock. Odomknete ho stlačením tlačidla Enter.</translation> <translation id="1361164813881551742">Pridať ručne</translation> <translation id="1361655923249334273">Nepoužitý</translation> -<translation id="1361707011052629095">Zariadenia vo vašom okolí, keď je zdieľanie nablízku otvorené</translation> <translation id="1361872463926621533">Pri spustení prehrávať zvuk</translation> <translation id="1362865166188278099">Mechanický problém. Skontrolujte tlačiareň.</translation> <translation id="1363585519747660921">Je potrebné nakonfigurovať tlačiareň USB</translation> @@ -1475,6 +1474,7 @@ <translation id="2731700343119398978">Počkajte...</translation> <translation id="2731710757838467317">Vytvára sa kontrolovaný používateľ. Môže to chvíľu trvať.</translation> <translation id="2731971182069536520">Pri najbližšom reštartovaní zariadenia správca vykoná jednorazovú aktualizáciu, ktorá odstráni miestne údaje.</translation> +<translation id="2732134891301408122">Ďalší obsah, <ph name="CURRENT_ELEMENT" />. prvok z <ph name="TOTAL_ELEMENTS" /></translation> <translation id="2734760316755174687">Weby v skupine <ph name="SITE_GROUP_NAME" /> budú tiež obnovené.</translation> <translation id="2735712963799620190">Rozvrh</translation> <translation id="2737363922397526254">Zbaliť...</translation> @@ -3122,6 +3122,7 @@ <translation id="4735803855089279419">Systém nedokázal rozpoznať identifikátory tohto zariadenia.</translation> <translation id="4736292055110123391">Synchronizujte svoje záložky, heslá, históriu a ďalší obsah vo všetkých zariadeniach</translation> <translation id="473775607612524610">Aktualizovať</translation> +<translation id="473936925429402449">Vybrané, ďalší obsah, <ph name="CURRENT_ELEMENT" />. prvok z <ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Tikety</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Ako aktualizovať aplikácie<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Zapnúť zvuk webu}few{Zapnúť zvuk webov}many{Zapnúť zvuk webov}other{Zapnúť zvuk webov}}</translation> @@ -4143,6 +4144,7 @@ <translation id="6011449291337289699">Vymazanie dát webu</translation> <translation id="6015266928248016057">Neplatný kód PUK. Zostávajúci počet pokusov: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">Rok</translation> +<translation id="6016178549409952427">Prechod na ďalší obsah, <ph name="CURRENT_ELEMENT" />. prvok z <ph name="TOTAL_ELEMENTS" /></translation> <translation id="6016551720757758985">Potvrdenie obnovenia Powerwash s návratom k predchádzajúcej verzii</translation> <translation id="6016972670657536680">Tlačidlo pre výber jazyka a klávesnice. Aktuálne je vybratý jazyk <ph name="LANGUAGE" />.</translation> <translation id="6017514345406065928">Zelená</translation> @@ -5708,7 +5710,6 @@ <translation id="7918257978052780342">Zaregistrovať</translation> <translation id="7919210519031517829"><ph name="DURATION" /> s</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> uvidí <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Nikto, kým neotvoríte zdieľanie nablízku</translation> <translation id="7924358170328001543">Chyba presmerovania portu</translation> <translation id="792514962475806987">Úroveň priblíženia ukotvenej lupy:</translation> <translation id="7925247922861151263">Kontrola AAA zlyhala</translation> @@ -6449,6 +6450,7 @@ <translation id="8811862054141704416">Prístup k mikrofónu v systéme Crostini</translation> <translation id="8812552797690463522">Táto sieť je s vami zdieľaná.</translation> <translation id="8812593354822910461">Vymazať tiež dáta prehliadania (<ph name="URL" />), po čom vás systém odhlási z domény <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Pripomenúť neskôr</translation> <translation id="8813698869395535039">Nedá sa prihlásiť do účtu <ph name="USERNAME" /></translation> <translation id="8813872945700551674">Požiadajte rodiča o schválenie rozšírenia <ph name="EXTENSION_NAME" /></translation> <translation id="8813969267212093033">V tomto jazyku je zobrazený text systému</translation> @@ -6479,6 +6481,7 @@ <translation id="8838601485495657486">Nepriehľadné</translation> <translation id="8838770651474809439">Hamburger</translation> <translation id="883911313571074303">Pridať k obrázku poznámku</translation> +<translation id="8841843049738266382">Čítať a meniť používateľov na zozname povolených</translation> <translation id="8842594465773264717">Odstrániť tento odtlačok prsta</translation> <translation id="8845001906332463065">Získať pomoc</translation> <translation id="8846132060409673887">Prečítať informácie o výrobcovi a modeli tohto zariadenia</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb index d5ee004..4cdc7984 100644 --- a/chrome/app/resources/generated_resources_sl.xtb +++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Napravo je mogoče odkleniti s funkcijo Smart Lock. Pritisnite Enter, če želite odkleniti.</translation> <translation id="1361164813881551742">Ročno dodajanje</translation> <translation id="1361655923249334273">Neuporabljeno</translation> -<translation id="1361707011052629095">Naprave v bližini, ko je odprta funkcija Deljenje v bližini</translation> <translation id="1361872463926621533">Predvajaj zvok ob zagonu</translation> <translation id="1362865166188278099">Mehanska težava. Preverite tiskalnik.</translation> <translation id="1363585519747660921">Tiskalnik USB je treba konfigurirati</translation> @@ -1476,6 +1475,7 @@ <translation id="2731700343119398978">Počakajte ...</translation> <translation id="2731710757838467317">Ustvarjanje zaščitenega uporabnika. To lahko traja nekaj časa.</translation> <translation id="2731971182069536520">Ob naslednjem vnovičnem zagonu naprave bo skrbnik opravil enkratno posodobitev, s katero bodo izbrisani lokalni podatki.</translation> +<translation id="2732134891301408122">Element dodatne vsebine št. <ph name="CURRENT_ELEMENT" /> od <ph name="TOTAL_ELEMENTS" /></translation> <translation id="2734760316755174687">Spletna mesta v skupini <ph name="SITE_GROUP_NAME" /> bodo prav tako ponastavljena.</translation> <translation id="2735712963799620190">Razpored</translation> <translation id="2737363922397526254">Strni ...</translation> @@ -3123,6 +3123,7 @@ <translation id="4735803855089279419">Sistemu ni uspelo določiti identifikatorjev naprave za to napravo.</translation> <translation id="4736292055110123391">Sinhronizirajte zaznamke, gesla, zgodovino in druge podatke v vseh vaših napravah</translation> <translation id="473775607612524610">Posodobi</translation> +<translation id="473936925429402449">Izbrano, element dodatne vsebine št. <ph name="CURRENT_ELEMENT" /> od <ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Kartončki</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Preberite, kako posodobite aplikacije<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Vklopi zvok spletnega mesta}one{Vklopi zvok spletnih mest}two{Vklopi zvok spletnih mest}few{Vklopi zvok spletnih mest}other{Vklopi zvok spletnih mest}}</translation> @@ -4146,6 +4147,7 @@ <translation id="6011449291337289699">Brisanje podatkov spletnih mest</translation> <translation id="6015266928248016057">Neveljavna koda PUK. Še toliko vnovičnih poskusov: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">Leto</translation> +<translation id="6016178549409952427">Premika na element dodatne vsebine št. <ph name="CURRENT_ELEMENT" /> od <ph name="TOTAL_ELEMENTS" /></translation> <translation id="6016551720757758985">Potrdite, da želite izvesti Powerwash in povrniti prejšnjo različico.</translation> <translation id="6016972670657536680">Gumb za izbiro jezika in tipkovnice. Trenutno izbran jezik je <ph name="LANGUAGE" />.</translation> <translation id="6017514345406065928">Zelena</translation> @@ -5711,7 +5713,6 @@ <translation id="7918257978052780342">Včlanitev</translation> <translation id="7919210519031517829"><ph name="DURATION" /> s</translation> <translation id="7920363873148656176">Spletno mesto <ph name="ORIGIN" /> si lahko ogleda datoteko <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Nihče, dokler ne odprete funkcije Deljenje v bližini</translation> <translation id="7924358170328001543">Napaka pri posredovanju vrat</translation> <translation id="792514962475806987">Stopnja povečave zasidrane lupe:</translation> <translation id="7925247922861151263">Preverjanje AAA ni uspelo</translation> @@ -6453,6 +6454,7 @@ <translation id="8811862054141704416">Dostop do mikrofona v Crostiniju</translation> <translation id="8812552797690463522">To omrežje je deljeno z vami.</translation> <translation id="8812593354822910461">Izbriši tudi podatke brskanja (<ph name="URL" />), s čimer boste odjavljeni iz domene <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Opomni me pozneje</translation> <translation id="8813698869395535039">Prijava v račun <ph name="USERNAME" /> ni mogoča</translation> <translation id="8813872945700551674">Prosi starša, da odobri »<ph name="EXTENSION_NAME" />«</translation> <translation id="8813969267212093033">Sistemsko besedilo je prikazano v tem jeziku</translation> @@ -6483,6 +6485,7 @@ <translation id="8838601485495657486">Neprosojno</translation> <translation id="8838770651474809439">Hamburger</translation> <translation id="883911313571074303">Dodaj pripis sliki</translation> +<translation id="8841843049738266382">Branje in spreminjanje uporabnikov s seznama dovoljenih</translation> <translation id="8842594465773264717">Izbriši ta prstni odtis</translation> <translation id="8845001906332463065">Poiščite pomoč</translation> <translation id="8846132060409673887">Dostop do podatkov o proizvajalcu in modelu računalnika</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb index 0c99469..74ec367c 100644 --- a/chrome/app/resources/generated_resources_sq.xtb +++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Pajisja jote mund të shkyçet me Smart Lock. Shtyp "Enter" për ta shkyçur.</translation> <translation id="1361164813881551742">Shto manualisht</translation> <translation id="1361655923249334273">E papërdorur</translation> -<translation id="1361707011052629095">Pajisjet pranë teje kur "Ndarja në afërsi" është e hapur</translation> <translation id="1361872463926621533">Luaj një tingull në nisje</translation> <translation id="1362865166188278099">Problem mekanik. Kontrollo printerin</translation> <translation id="1363585519747660921">Printeri USB ka nevojë për printim</translation> @@ -5705,7 +5704,6 @@ <translation id="7918257978052780342">Regjistroje</translation> <translation id="7919210519031517829"><ph name="DURATION" /> sek.</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> mund ta shikojë skedarin <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Askush në rast se nuk hap "Ndarjen në afërsi"</translation> <translation id="7924358170328001543">Gabim në transferimin e portës</translation> <translation id="792514962475806987">Niveli i zmadhimit të stacionimit:</translation> <translation id="7925247922861151263">Kontrolli AAA dështoi</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb index 0acfd7ec..3872b773 100644 --- a/chrome/app/resources/generated_resources_sr-Latn.xtb +++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Uređaj može da se otključa pomoću Smart Lock-a. Pritisnite Enter da biste otključali.</translation> <translation id="1361164813881551742">Dodajte ručno</translation> <translation id="1361655923249334273">Nije korišćen</translation> -<translation id="1361707011052629095">Uređaji u blizini kada je otvoreno Deljenje u blizini</translation> <translation id="1361872463926621533">Pusti zvuk pri pokretanju</translation> <translation id="1362865166188278099">Mehanički problem. Proverite štampač</translation> <translation id="1363585519747660921">USB štampač treba da se konfiguriše</translation> @@ -1473,6 +1472,7 @@ <translation id="2731700343119398978">Sačekajte…</translation> <translation id="2731710757838467317">Pravimo korisnika pod nadzorom. To će možda potrajati par trenutaka.</translation> <translation id="2731971182069536520">Kada sledeći put restartujete uređaj, administrator će obaviti jednokratno ažuriranje koje će izbrisati lokalne podatke.</translation> +<translation id="2732134891301408122"><ph name="CURRENT_ELEMENT" />. element dodatnog sadržaja od <ph name="TOTAL_ELEMENTS" /></translation> <translation id="2734760316755174687">Resetovaće se i sajtovi iz grupe <ph name="SITE_GROUP_NAME" />.</translation> <translation id="2735712963799620190">Raspored</translation> <translation id="2737363922397526254">Skupi...</translation> @@ -3120,6 +3120,7 @@ <translation id="4735803855089279419">Sistem nije uspeo da odredi identifikatore za ovaj uređaj.</translation> <translation id="4736292055110123391">Sinhronizujte obeleživače, lozinke, istoriju i drugi sadržaj na svim uređajima</translation> <translation id="473775607612524610">Ažuriraj</translation> +<translation id="473936925429402449">Izabrano je, <ph name="CURRENT_ELEMENT" />. element dodatnog sadržaja od <ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Tiketi</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Saznajte kako da ažurirate aplikacije<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Uključi zvuk sajta}one{Uključi zvuk sajtova}few{Uključi zvuk sajtova}other{Uključi zvuk sajtova}}</translation> @@ -4142,6 +4143,7 @@ <translation id="6011449291337289699">Obrišite podatke sajta</translation> <translation id="6015266928248016057">Nevažeći PUK. Preostalih pokušaja: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">Godina</translation> +<translation id="6016178549409952427">Idi u <ph name="CURRENT_ELEMENT" />. element dodatnog sadržaja od <ph name="TOTAL_ELEMENTS" /></translation> <translation id="6016551720757758985">Potvrđivanje Powerwash-a uz vraćanje na prethodnu verziju</translation> <translation id="6016972670657536680">Dugme za izbor jezika i tastature. Trenutno izabrani jezik je <ph name="LANGUAGE" />.</translation> <translation id="6017514345406065928">Zelena</translation> @@ -5707,7 +5709,6 @@ <translation id="7918257978052780342">Prijavi me</translation> <translation id="7919210519031517829"><ph name="DURATION" /> sek</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> može da pregleda <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Niko ako ne otvorite Deljenje u blizini</translation> <translation id="7924358170328001543">Greška pri prosleđivanju porta</translation> <translation id="792514962475806987">Nivo zumiranja montirane lupe ekrana:</translation> <translation id="7925247922861151263">Provera potvrde identiteta, ovlašćenja i pristupa nije uspela</translation> @@ -6449,6 +6450,7 @@ <translation id="8811862054141704416">Pristup mikrofonu za Crostini</translation> <translation id="8812552797690463522">Ova mreža se deli sa vama.</translation> <translation id="8812593354822910461">Obriši i podatke pregledanja (<ph name="URL" />). Ovo će vas odjaviti sa <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Podseti me kasnije</translation> <translation id="8813698869395535039">Prijavljivanje na <ph name="USERNAME" /> nije uspelo</translation> <translation id="8813872945700551674">Zatraži od roditelja da odobri dodatak <ph name="EXTENSION_NAME" /></translation> <translation id="8813969267212093033">Sistemski tekst se prikazuje na ovom jeziku</translation> @@ -6479,6 +6481,7 @@ <translation id="8838601485495657486">Neprozirno</translation> <translation id="8838770651474809439">Hamburger</translation> <translation id="883911313571074303">Dodaj napomenu u sliku</translation> +<translation id="8841843049738266382">Čitanje i menjanje korisnika na listi dozvoljenih</translation> <translation id="8842594465773264717">Izbriši ovaj digitalni otisak</translation> <translation id="8845001906332463065">Zatražite pomoć</translation> <translation id="8846132060409673887">Pročitajte proizvođača i model ovog računara</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index 1aed85d..6e5c70c 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Уређај може да се откључа помоћу Smart Lock-а. Притисните Enter да бисте откључали.</translation> <translation id="1361164813881551742">Додајте ручно</translation> <translation id="1361655923249334273">Није коришћен</translation> -<translation id="1361707011052629095">Уређаји у близини када је отворено Дељење у близини</translation> <translation id="1361872463926621533">Пусти звук при покретању</translation> <translation id="1362865166188278099">Механички проблем. Проверите штампач</translation> <translation id="1363585519747660921">USB штампач треба да се конфигурише</translation> @@ -1473,6 +1472,7 @@ <translation id="2731700343119398978">Сачекајте…</translation> <translation id="2731710757838467317">Правимо корисника под надзором. То ће можда потрајати пар тренутака.</translation> <translation id="2731971182069536520">Када следећи пут рестартујете уређај, администратор ће обавити једнократно ажурирање које ће избрисати локалне податке.</translation> +<translation id="2732134891301408122"><ph name="CURRENT_ELEMENT" />. елемент додатног садржаја од <ph name="TOTAL_ELEMENTS" /></translation> <translation id="2734760316755174687">Ресетоваће се и сајтови из групе <ph name="SITE_GROUP_NAME" />.</translation> <translation id="2735712963799620190">Распоред</translation> <translation id="2737363922397526254">Скупи...</translation> @@ -3120,6 +3120,7 @@ <translation id="4735803855089279419">Систем није успео да одреди идентификаторе за овај уређај.</translation> <translation id="4736292055110123391">Синхронизујте обележиваче, лозинке, историју и други садржај на свим уређајима</translation> <translation id="473775607612524610">Ажурирај</translation> +<translation id="473936925429402449">Изабрано је, <ph name="CURRENT_ELEMENT" />. елемент додатног садржаја од <ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Тикети</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Сазнајте како да ажурирате апликације<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Укључи звук сајта}one{Укључи звук сајтова}few{Укључи звук сајтова}other{Укључи звук сајтова}}</translation> @@ -4142,6 +4143,7 @@ <translation id="6011449291337289699">Обришите податке сајта</translation> <translation id="6015266928248016057">Неважећи PUK. Преосталих покушаја: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">Година</translation> +<translation id="6016178549409952427">Иди у <ph name="CURRENT_ELEMENT" />. елемент додатног садржаја од <ph name="TOTAL_ELEMENTS" /></translation> <translation id="6016551720757758985">Потврђивање Powerwash-а уз враћање на претходну верзију</translation> <translation id="6016972670657536680">Дугме за избор језика и тастатуре. Тренутно изабрани језик је <ph name="LANGUAGE" />.</translation> <translation id="6017514345406065928">Зелена</translation> @@ -5707,7 +5709,6 @@ <translation id="7918257978052780342">Пријави ме</translation> <translation id="7919210519031517829"><ph name="DURATION" /> сек</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> може да прегледа <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Нико ако не отворите Дељење у близини</translation> <translation id="7924358170328001543">Грешка при прослеђивању порта</translation> <translation id="792514962475806987">Ниво зумирања монтиране лупе екрана:</translation> <translation id="7925247922861151263">Провера потврде идентитета, овлашћења и приступа није успела</translation> @@ -6449,6 +6450,7 @@ <translation id="8811862054141704416">Приступ микрофону за Crostini</translation> <translation id="8812552797690463522">Ова мрежа се дели са вама.</translation> <translation id="8812593354822910461">Обриши и податке прегледања (<ph name="URL" />). Ово ће вас одјавити са <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Подсети ме касније</translation> <translation id="8813698869395535039">Пријављивање на <ph name="USERNAME" /> није успело</translation> <translation id="8813872945700551674">Затражи од родитеља да одобри додатак <ph name="EXTENSION_NAME" /></translation> <translation id="8813969267212093033">Системски текст се приказује на овом језику</translation> @@ -6479,6 +6481,7 @@ <translation id="8838601485495657486">Непрозирно</translation> <translation id="8838770651474809439">Хамбургер</translation> <translation id="883911313571074303">Додај напомену у слику</translation> +<translation id="8841843049738266382">Читање и мењање корисника на листи дозвољених</translation> <translation id="8842594465773264717">Избриши овај дигитални отисак</translation> <translation id="8845001906332463065">Затражите помоћ</translation> <translation id="8846132060409673887">Прочитајте произвођача и модел овог рачунара</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb index 2880311..533c531 100644 --- a/chrome/app/resources/generated_resources_sv.xtb +++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Enheten kan låsas upp med Smart Lock. Tryck på Retur för att låsa upp.</translation> <translation id="1361164813881551742">Lägg till manuellt</translation> <translation id="1361655923249334273">Oanvänd</translation> -<translation id="1361707011052629095">Enheter i närheten när Närdelning är öppet</translation> <translation id="1361872463926621533">Spela upp ljud vid start</translation> <translation id="1362865166188278099">Mekaniskt fel. Kontrollera skrivaren</translation> <translation id="1363585519747660921">USB-skrivaren behöver konfigureras</translation> @@ -1476,6 +1475,7 @@ <translation id="2731700343119398978">Vänta ...</translation> <translation id="2731710757838467317">Skapar din hanterade användare. Det kan ta en liten stund.</translation> <translation id="2731971182069536520">Administratören gör en engångsuppdatering som raderar din lokala data nästa gång du startar om enheten.</translation> +<translation id="2732134891301408122">Extrainnehåll <ph name="CURRENT_ELEMENT" /> av <ph name="TOTAL_ELEMENTS" /></translation> <translation id="2734760316755174687">Webbplatser som är underordnade <ph name="SITE_GROUP_NAME" /> återställs också.</translation> <translation id="2735712963799620190">Schema</translation> <translation id="2737363922397526254">Dölj...</translation> @@ -3123,6 +3123,7 @@ <translation id="4735803855089279419">Det gick inte att fastställa enhets-id för den här enheten.</translation> <translation id="4736292055110123391">Synkronisera bokmärken, lösenord, historik med mera på alla dina enheter</translation> <translation id="473775607612524610">Uppdatera</translation> +<translation id="473936925429402449">Valt, extrainnehåll <ph name="CURRENT_ELEMENT" /> av <ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Biljetter</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Läs mer om hur du uppdaterar appar<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Sätt på webbplatsens ljud}other{Sätt på webbplatsernas ljud}}</translation> @@ -4144,6 +4145,7 @@ <translation id="6011449291337289699">Rensa webbplatsdata</translation> <translation id="6015266928248016057">Ogiltig PUK-kod. Återstående försök: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">År</translation> +<translation id="6016178549409952427">Navigera till extrainnehåll <ph name="CURRENT_ELEMENT" /> av <ph name="TOTAL_ELEMENTS" /></translation> <translation id="6016551720757758985">Bekräfta återställningen till den tidigare versionen med Powerwash</translation> <translation id="6016972670657536680">Knapp för att välja språk och tangentbord. Nuvarande språkinställning: <ph name="LANGUAGE" />.</translation> <translation id="6017514345406065928">Grön</translation> @@ -5709,7 +5711,6 @@ <translation id="7918257978052780342">Registrera</translation> <translation id="7919210519031517829"><ph name="DURATION" /> sek</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> har visningsbehörighet till <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Ingen, såvida du inte öppnar Närdelning</translation> <translation id="7924358170328001543">Det gick inte att vidarebefordra porten</translation> <translation id="792514962475806987">Zoomnivå för dockad skärmförstoring</translation> <translation id="7925247922861151263">Kontroll med AAA misslyckades</translation> @@ -6451,6 +6452,7 @@ <translation id="8811862054141704416">Mikrofonåtkomst i Crostini</translation> <translation id="8812552797690463522">Nätverket delas med dig.</translation> <translation id="8812593354822910461">Rensa även webbinformation (<ph name="URL" />), vilket kan innebära att du loggas ut från <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Påminn mig senare</translation> <translation id="8813698869395535039">Det gick inte att logga in på <ph name="USERNAME" /></translation> <translation id="8813872945700551674">Be att en förälder godkänner <ph name="EXTENSION_NAME" /></translation> <translation id="8813969267212093033">Systemtext visas på det här språket</translation> @@ -6481,6 +6483,7 @@ <translation id="8838601485495657486">Ogenomskinlig</translation> <translation id="8838770651474809439">Hamburgare</translation> <translation id="883911313571074303">Kommentera bild</translation> +<translation id="8841843049738266382">Läs och ändra användarna på godkännandelistan</translation> <translation id="8842594465773264717">Radera fingeravtrycket</translation> <translation id="8845001906332463065">Få hjälp</translation> <translation id="8846132060409673887">Läsa information om datorns tillverkare och modell</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb index d9f5f90..283999c0 100644 --- a/chrome/app/resources/generated_resources_sw.xtb +++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Kifaa chako kinaweza kufunguliwa kwa kutumia Smart Lock. Bonyeza Enter ili ukifungue.</translation> <translation id="1361164813881551742">Ongeza Mwenyewe</translation> <translation id="1361655923249334273">Haijatumiwa</translation> -<translation id="1361707011052629095">Vifaa vilivyo karibu nawe wakati kipengele cha Uhamishaji wa Karibu kimefunguliwa</translation> <translation id="1361872463926621533">Cheza sauti wakati wa kuanza</translation> <translation id="1362865166188278099">Tatizo la kiufundi. Angalia printa</translation> <translation id="1363585519747660921">Printa ya USB inahitaji kuwekewa mipangilio</translation> @@ -5706,7 +5705,6 @@ <translation id="7918257978052780342">Jiandikishe</translation> <translation id="7919210519031517829">Sek <ph name="DURATION" /></translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> inaweza kuona <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Hamna isipokuwa ukifungua kipengele cha Uhamishaji wa Karibu</translation> <translation id="7924358170328001543">Hitilafu imetokea wakati wa kusambaza mlango</translation> <translation id="792514962475806987">Kiwango cha ukuzaji uliofungwa:</translation> <translation id="7925247922861151263">Ukaguzi wa AAA umeshindikana</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index 8617089..b126d05 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">உங்கள் சாதனத்தை Smart Lock மூலம் அன்லாக் செய்யலாம். அன்லாக் செய்ய Enterரை அழுத்தவும்.</translation> <translation id="1361164813881551742">கைமுறையாகச் சேர்</translation> <translation id="1361655923249334273">பயன்படுத்தாத</translation> -<translation id="1361707011052629095">‘அருகிலுள்ளவற்றுடன் பகிர்தல்’ அம்சம் ஆன் செய்யப்பட்டிருக்கும்போது உங்களுக்கு அருகிலுள்ள சாதனங்கள்</translation> <translation id="1361872463926621533">தொடக்கத்தில் ஒலியை இயக்கு</translation> <translation id="1362865166188278099">இயந்திரக் கோளாறு. பிரிண்டரைச் சரிபார்க்கவும்</translation> <translation id="1363585519747660921">USB பிரிண்டரை உள்ளமைக்க வேண்டும்</translation> @@ -5710,7 +5709,6 @@ <translation id="7918257978052780342">பதிவுபெறுக</translation> <translation id="7919210519031517829"><ph name="DURATION" />வி</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> தளத்தால் <ph name="FILENAME" /> கோப்பைப் பார்க்க முடியும்</translation> -<translation id="7924080089023843180">'அருகிலுள்ளவற்றுடன் பகிர்தல்' அம்சத்தை நீங்கள் ஆன் செய்யாத வரை எவராலும் உங்களுடன் பகிர முடியாது</translation> <translation id="7924358170328001543">போர்ட்டை அனுப்புவதில் பிழை</translation> <translation id="792514962475806987">டாக் செய்யப்பட்ட பெரிதாக்கியின் அளவை மாற்றுவதற்கான நிலை:</translation> <translation id="7925247922861151263">AAA சோதனை தோல்வியுற்றது</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index dbab71c..79d25fc6 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">మీ పరికరాన్ని Smart Lockతో అన్లాక్ చేయవచ్చు. అన్లాక్ చేయడానికి 'ఎంటర్'ను నొక్కండి.</translation> <translation id="1361164813881551742">మాన్యువల్గా జోడించండి</translation> <translation id="1361655923249334273">ఉపయోగించనిది</translation> -<translation id="1361707011052629095">సమీప షేరింగ్ తెరిచివున్నప్పుడు మీకు సమీపంలో ఉన్న పరికరాలు</translation> <translation id="1361872463926621533">ప్రారంభంలో ధ్వనిని ప్లే చేయండి</translation> <translation id="1362865166188278099">మెషీన్లో సమస్య. ప్రింటర్ను తనిఖీ చేయండి</translation> <translation id="1363585519747660921">USB ప్రింటర్ కోసం తప్పక కాన్ఫిగర్ చేయాలి</translation> @@ -5708,7 +5707,6 @@ <translation id="7918257978052780342">నమోదు చేయి</translation> <translation id="7919210519031517829"><ph name="DURATION" />సె</translation> <translation id="7920363873148656176"><ph name="ORIGIN" />, <ph name="FILENAME" />ను చూడగలదు</translation> -<translation id="7924080089023843180">మీరు సమీప షేరింగ్ను తెరిస్తే తప్ప ఎవ్వరికి కనబడదు</translation> <translation id="7924358170328001543">పోర్ట్ను ఫార్వర్డ్ చేయడంలో ఎర్రర్ ఏర్పడింది</translation> <translation id="792514962475806987">డాక్ చేయబడిన జూమ్ స్థాయి:</translation> <translation id="7925247922861151263">AAA తనిఖీ విఫలమైంది</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb index d85f696e..7b0ab3d7 100644 --- a/chrome/app/resources/generated_resources_th.xtb +++ b/chrome/app/resources/generated_resources_th.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">อุปกรณ์ปลดล็อกได้ด้วย Smart Lock กด Enter เพื่อปลดล็อก</translation> <translation id="1361164813881551742">เพิ่มด้วยตนเอง</translation> <translation id="1361655923249334273">ไม่ได้ใช้</translation> -<translation id="1361707011052629095">อุปกรณ์ที่อยู่ใกล้ๆ เมื่อการแชร์ใกล้เคียงเปิดอยู่</translation> <translation id="1361872463926621533">เปิดเสียงเมื่อเริ่มใช้</translation> <translation id="1362865166188278099">ปัญหาด้านกลไก ตรวจสอบเครื่องพิมพ์</translation> <translation id="1363585519747660921">เครื่องพิมพ์ USB ต้องการการกำหนดค่า</translation> @@ -5709,7 +5708,6 @@ <translation id="7918257978052780342">ลงทะเบียน</translation> <translation id="7919210519031517829"><ph name="DURATION" /> วิ</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> ดู "<ph name="FILENAME" />" ได้</translation> -<translation id="7924080089023843180">ไม่มี เว้นแต่จะเปิดการแชร์ใกล้เคียง</translation> <translation id="7924358170328001543">เกิดข้อผิดพลาดในการส่งต่อพอร์ต</translation> <translation id="792514962475806987">ระดับการซูมหน้าจอบางส่วน:</translation> <translation id="7925247922861151263">การตรวจสอบ AAA ล้มเหลว</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb index ca2306e..5432eb0 100644 --- a/chrome/app/resources/generated_resources_tr.xtb +++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Cihazınızın kilidi Smart Lock ile açılabilir. Kilidi açmak için Enter tuşuna basın.</translation> <translation id="1361164813881551742">Manuel Olarak Ekle</translation> <translation id="1361655923249334273">Kullanılmıyor</translation> -<translation id="1361707011052629095">Yakındakilerle Paylaş özelliği açıkken yakınınızdaki cihazlar</translation> <translation id="1361872463926621533">Başlangıçta ses çal</translation> <translation id="1362865166188278099">Mekanik sorun. Yazıcıyı kontrol edin</translation> <translation id="1363585519747660921">USB yazıcının yapılandırılması gerekiyor</translation> @@ -5709,7 +5708,6 @@ <translation id="7918257978052780342">Kaydol</translation> <translation id="7919210519031517829"><ph name="DURATION" /> sn.</translation> <translation id="7920363873148656176"><ph name="ORIGIN" />, <ph name="FILENAME" /> dosyasını görüntüleyebilir</translation> -<translation id="7924080089023843180">Siz Yakındakilerle Paylaş özelliğini açmadığınız sürece hiç kimse</translation> <translation id="7924358170328001543">Bağlantı noktası yönlendirme hatası</translation> <translation id="792514962475806987">Yerleştirilmişken yakınlaştırma düzeyi:</translation> <translation id="7925247922861151263">AAA kontrolü başarısız oldu</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb index 3f543dd..ded0cb7 100644 --- a/chrome/app/resources/generated_resources_uk.xtb +++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Ваш пристрій можна розблоковувати за допомогою Smart Lock. Натисніть клавішу Enter, щоб розблокувати.</translation> <translation id="1361164813881551742">Додати вручну</translation> <translation id="1361655923249334273">Не використаний</translation> -<translation id="1361707011052629095">Пристрої, які є поблизу, коли відкрито вікно функції "Передавання поблизу"</translation> <translation id="1361872463926621533">Відтворювати звук під час запуску</translation> <translation id="1362865166188278099">Механічна помилка. Перевірте принтер</translation> <translation id="1363585519747660921">USB-принтер потрібно налаштувати</translation> @@ -1476,6 +1475,7 @@ <translation id="2731700343119398978">Зачекайте...</translation> <translation id="2731710757838467317">Створення контрольованого користувача. Це може тривати якийсь час.</translation> <translation id="2731971182069536520">Під час наступного перезапуску пристрою адміністратор виконає одноразове оновлення, що призведе до видалення локальних даних.</translation> +<translation id="2732134891301408122">Додатковий контент <ph name="CURRENT_ELEMENT" /> з <ph name="TOTAL_ELEMENTS" /></translation> <translation id="2734760316755174687">Дозволи сайтів групи <ph name="SITE_GROUP_NAME" /> також буде скинуто.</translation> <translation id="2735712963799620190">Графік</translation> <translation id="2737363922397526254">Згорнути...</translation> @@ -2840,7 +2840,7 @@ <translation id="4390000551125140321">{0,plural, =1{Режим анонімного перегляду}one{У режимі анонімного перегляду відкрито # вікно}few{У режимі анонімного перегляду відкрито # вікна}many{У режимі анонімного перегляду відкрито # вікон}other{У режимі анонімного перегляду відкрито # вікна}}</translation> <translation id="439266289085815679">Налаштуваннями Bluetooth керує <ph name="USER_EMAIL" />.</translation> <translation id="4392896746540753732">Змінити файл конфігурації</translation> -<translation id="4393691030048716353">Сторінка <ph name="DOMAIN" /> вимкнула налагодження ADB. Коли ви перезапустите пристрій <ph name="DEVICE_TYPE" />, то більше не зможете завантажувати додатки з невідомого джерела.</translation> +<translation id="4393691030048716353">Адміністратор домену <ph name="DOMAIN" /> вимкнув налагодження ADB. Коли ви перезапустите <ph name="DEVICE_TYPE" />, то більше не зможете завантажувати додатки з невідомого джерела.</translation> <translation id="4394049700291259645">Вимкнути</translation> <translation id="439817266247065935">Ваш пристрій завершив роботу неналежним чином. Щоб користуватися додатками Linux, перезапустіть Linux.</translation> <translation id="4400367121200150367">Тут відображатимуться сайти, які ніколи не зберігають паролі</translation> @@ -3123,6 +3123,7 @@ <translation id="4735803855089279419">Системі не вдалося визначити ідентифікатори цього пристрою.</translation> <translation id="4736292055110123391">Синхронізуйте закладки, паролі, історію й інші дані на всіх своїх пристроях</translation> <translation id="473775607612524610">Оновити</translation> +<translation id="473936925429402449">Вибрано, додатковий контент <ph name="CURRENT_ELEMENT" /> з <ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Квитки</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Дізнайтеся, як оновити додатки<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Увімкнути звук на сайті}one{Увімкнути звук на сайтах}few{Увімкнути звук на сайтах}many{Увімкнути звук на сайтах}other{Увімкнути звук на сайтах}}</translation> @@ -3530,7 +3531,7 @@ <translation id="5265797726250773323">Помилка під час встановлення</translation> <translation id="5266113311903163739">Помилка імпортування центру сертифікації</translation> <translation id="5269977353971873915">Помилка друку</translation> -<translation id="5274738462757057090">Автоматично створює субтитри для медіаконтенту в Chrome (наразі лише англійською мовою)</translation> +<translation id="5274738462757057090">Автоматично створює субтитри для медіаконтенту у веб-переглядачі Chrome (наразі лише англійською мовою)</translation> <translation id="5275352920323889391">Собака</translation> <translation id="527605982717517565">Завжди дозволяти JavaScript на хості <ph name="HOST" /></translation> <translation id="5278823018825269962">Ідентифікатор статусу</translation> @@ -4144,6 +4145,7 @@ <translation id="6011449291337289699">Очистити дані веб-сайту</translation> <translation id="6015266928248016057">Недійсний PUK-код. Залишилося стільки спроб: <ph name="RETRIES" />.</translation> <translation id="6015796118275082299">Рік</translation> +<translation id="6016178549409952427">Перейти до додаткового контенту <ph name="CURRENT_ELEMENT" /> з <ph name="TOTAL_ELEMENTS" /></translation> <translation id="6016551720757758985">Підтвердити Powerwash і повернення до попередньої версії</translation> <translation id="6016972670657536680">Виберіть мову та кнопку на клавіатурі. Поточна мова: <ph name="LANGUAGE" />.</translation> <translation id="6017514345406065928">Зелений</translation> @@ -5709,7 +5711,6 @@ <translation id="7918257978052780342">Зареєструвати</translation> <translation id="7919210519031517829"><ph name="DURATION" /> с</translation> <translation id="7920363873148656176">Сайт <ph name="ORIGIN" /> може переглядати файл "<ph name="FILENAME" />"</translation> -<translation id="7924080089023843180">Ніхто, якщо у вас закрите вікно функції "Передавання поблизу"</translation> <translation id="7924358170328001543">Не вдалося переадресувати порт</translation> <translation id="792514962475806987">Рівень масштабування закріпленої лупи:</translation> <translation id="7925247922861151263">Помилка перевірки AAA</translation> @@ -6164,7 +6165,7 @@ <translation id="8467326454809944210">Вибрати іншу мову</translation> <translation id="8470214316007448308">Інші люди</translation> <translation id="8470513973197838199">Збережені паролі для <ph name="ORIGIN" /></translation> -<translation id="8471256130228705232">Сторінка <ph name="DOMAIN" /> вимикає налагодження ADB. Через це налаштування вашого пристрою <ph name="DEVICE_TYPE" /> буде скинуто через 24 години. Створіть резервну копію потрібних вам файлів.</translation> +<translation id="8471256130228705232">Адміністратор домену <ph name="DOMAIN" /> вимикає налагодження ADB. Тому через 24 години <ph name="DEVICE_TYPE" /> скине всі налаштування. Створіть резервні копії потрібних вам файлів.</translation> <translation id="8472623782143987204">з апаратною підтримкою</translation> <translation id="8473863474539038330">Адреси й інше</translation> <translation id="8475313423285172237">Інша програма на вашому комп’ютері додала розширення, яке може змінити роботу Chrome.</translation> @@ -6451,6 +6452,7 @@ <translation id="8811862054141704416">Доступ до мікрофона Crostini</translation> <translation id="8812552797690463522">Ви маєте доступ до цієї мережі.</translation> <translation id="8812593354822910461">Також видалити дані веб-перегляду (<ph name="URL" />), що може призвести до виходу з облікового запису на сайті <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> +<translation id="8813277370772331957">Нагадати пізніше</translation> <translation id="8813698869395535039">Не вдається ввійти в обліковий запис <ph name="USERNAME" /></translation> <translation id="8813872945700551674">Поклич когось із батьків, щоб вони дозволили розширення "<ph name="EXTENSION_NAME" />"</translation> <translation id="8813969267212093033">Поточна мова системи</translation> @@ -6481,6 +6483,7 @@ <translation id="8838601485495657486">Непрозоро</translation> <translation id="8838770651474809439">Гамбургер</translation> <translation id="883911313571074303">Додати нотатку до зображення</translation> +<translation id="8841843049738266382">Переглядати та змінювати користувачів із білого списку</translation> <translation id="8842594465773264717">Видалити цей відбиток</translation> <translation id="8845001906332463065">Отримати довідку</translation> <translation id="8846132060409673887">Показувати виробника й модель цього комп’ютера</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb index ffd136c..5342125a 100644 --- a/chrome/app/resources/generated_resources_ur.xtb +++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -313,7 +313,6 @@ <translation id="1359923111303110318">Smart Lock کی مدد سے آپ کا آلہ غیر مقفل کیا جا سکتا ہے۔ غیر مقفل کرنے کے لیے Enter دبائیں۔</translation> <translation id="1361164813881551742">دستی طور پر شامل کریں</translation> <translation id="1361655923249334273">غیر استعمال کردہ</translation> -<translation id="1361707011052629095">قریبی آلات کے ساتھ اشتراک کے کھلے ہونے پر آپ کے قریبی آلات</translation> <translation id="1361872463926621533">اسٹارٹ اپ پر آواز چلائیں</translation> <translation id="1362865166188278099">مکینیکل مسئلہ۔ پرنٹر چیک کریں</translation> <translation id="1363585519747660921">USB پرنٹر کو کنفیگریشن کی ضرورت ہے</translation> @@ -2641,6 +2640,7 @@ <translation id="4104163789986725820">برآ&مد کریں…</translation> <translation id="4107048419833779140">اسٹوریج کے آلات کی شناخت کر کے انہیں خارج کریں</translation> <translation id="4109135793348361820">ونڈو کو <ph name="USER_NAME" /> (<ph name="USER_EMAIL" />) میں منتقل کریں</translation> +<translation id="411031910327788420">اس ترتیب کو سپورٹ کرنے والے ایپس کے ليے کیپشن سائز اور طرز کو حسب ضرورت بنائیں</translation> <translation id="4110490973560452005">ڈاؤن لوڈ مکمل ہو گیا: <ph name="FILE_NAME" />۔ ڈاؤن لوڈز بار ایریا پر جانے کے لیے Shift+F6 دبائيں۔</translation> <translation id="4110686435123617899">البم <ph name="TITLE" /> <ph name="DESC" /> منتخب کریں</translation> <translation id="4110895898888439383">اعلی تناسب امتزاج وضع میں ویب براؤز کریں</translation> @@ -2840,6 +2840,7 @@ <translation id="4390000551125140321">{0,plural, =1{پوشیدگی}other{# کھلی ہوئی پوشیدگی ونڈوز}}</translation> <translation id="439266289085815679"><ph name="USER_EMAIL" /> بلوٹوتھ کنفیگریشن کو کنٹرول کرتا ہے۔</translation> <translation id="4392896746540753732">کنفیگریشن فائل میں ترمیم کریں</translation> +<translation id="4393691030048716353"><ph name="DOMAIN" /> نے ADB ڈیبگنگ کو غیر فعال کر دیا ہے۔ ایک بار جب آپ اپنا <ph name="DEVICE_TYPE" /> ری سٹارٹ کریں تو آپ سائیڈ لوڈ ایپس نہیں کر سکیں گے۔</translation> <translation id="4394049700291259645">غیر فعال کریں</translation> <translation id="439817266247065935">آپ کا آلہ صحیح سے بند نہیں ہوا ہے۔ Linux ایپس کو استعمال کرنے کیلئے Linux کو ری سٹارٹ کریں۔</translation> <translation id="4400367121200150367">جو سائٹس کبھی بھی پاس ورڈز محفوظ نہیں کرتی ہیں وہ یہاں ظاہر ہوں گی</translation> @@ -3529,6 +3530,7 @@ <translation id="5265797726250773323">انسٹال کرنے کے دوران خرابی</translation> <translation id="5266113311903163739">سرٹیفکیشن اتھارٹی درآمد کرنے میں خرابی</translation> <translation id="5269977353971873915">پرنٹ ناکام ہوگیا</translation> +<translation id="5274738462757057090">Chrome براؤزر میں میڈیا کے ليے خودکار طور پر کیپشنز تخلیق کرتا ہے (فی الحال صرف انگریزی میں دستیاب ہے)</translation> <translation id="5275352920323889391">کتا</translation> <translation id="527605982717517565"><ph name="HOST" /> پر ہمیشہ JavaScript کی اجازت دیں</translation> <translation id="5278823018825269962">اسٹیٹس Id</translation> @@ -3964,6 +3966,7 @@ <translation id="5794700615121138172">Linux کے اشتراک کردہ فولڈرز</translation> <translation id="5794786537412027208">سبھی Chrome ایپس چھوڑ دیں</translation> <translation id="5797070761912323120">تلاش، اشتہارات اور Google کی دیگر سروسز کو ذاتی نوعیت کا بنانے کے لیے Google آپ کی سرگزشت کا استعمال کر سکتا ہے</translation> +<translation id="5798301976526354562">ٹیکسٹ کا سائز (لائیو کیپشن پر بھی لاگو ہوتا ہے)</translation> <translation id="579915268381781820">آپ کی سیکیورٹی کلید ہٹا دی گئی۔</translation> <translation id="5799508265798272974">Linux ورچوئل مشین: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">مقصود فائل کو پچھلے ڈاؤن لوڈ کے بعد سے چھانٹ یا ہٹا دیا گیا تھا۔</translation> @@ -4872,6 +4875,7 @@ <translation id="6911324888870229398">نیٹ ورک کنکشن منقطع ہو گیا۔ براہ کرم اپنا کنکشن چیک کریں یا دوسرا Wi-Fi نیٹ ورک آزمائیں۔</translation> <translation id="6911734910326569517">میموری فوٹ پرنٹ</translation> <translation id="6912007319859991306">سیلولر SIM کا PIN</translation> +<translation id="691289340230098384">کیپشن کی ترجیحات</translation> <translation id="6914783257214138813">آپ کے پاسورڈز کسی بھی ایسے شخص کے لیے مرئی ہوں گے جو برآمد کردہ فائل کو دیکھ سکتا ہے۔</translation> <translation id="6915804003454593391">صارف:</translation> <translation id="6916590542764765824">ایکسٹینشنز کا نظم کریں</translation> @@ -5706,7 +5710,6 @@ <translation id="7918257978052780342">اندراج کریں</translation> <translation id="7919210519031517829"><ph name="DURATION" /> سیکنڈ</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> <ph name="FILENAME" /> دیکھ سکتا ہے</translation> -<translation id="7924080089023843180">آپ کے قریبی آلات کے ساتھ اشتراک کو کھولنے تک کوئی بھی آپ کے ساتھ اشتراک نہیں کر سکتا</translation> <translation id="7924358170328001543">پورٹ فارورڈ کرنے میں خرابی</translation> <translation id="792514962475806987">ڈاک کردہ زوم کی سطح:</translation> <translation id="7925247922861151263">AAA چیک ناکام ہوگیا</translation> @@ -6160,6 +6163,7 @@ <translation id="8467326454809944210">کسی دوسری زبان کا انتخاب کریں</translation> <translation id="8470214316007448308">دیگر لوگ</translation> <translation id="8470513973197838199"><ph name="ORIGIN" /> کے لیے محفوظ کردہ پاسورڈز</translation> +<translation id="8471256130228705232"><ph name="DOMAIN" /> ADB ڈیبگنگ کو غیر فعال کر رہا ہے۔ یہ آپ کے <ph name="DEVICE_TYPE" /> کو 24 گھنٹوں میں ری سیٹ کر دے گا۔ کوئی بھی فائل کا بیک اپ لیں جسے آپ رکھنا چاہتے ہیں۔</translation> <translation id="8472623782143987204">ہارڈ ویئر کے ذریعے تعاون یافتہ</translation> <translation id="8473863474539038330">پتے وغیرہ</translation> <translation id="8475313423285172237">آپ کے کمپیوٹر پر موجود ایک دوسرے پروگرام نے ایک ایکسٹینشن شامل کیا جو Chrome کے کام کرنے کا طریقہ تبدیل کر سکتی ہے۔</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb index c0ff933..8222480 100644 --- a/chrome/app/resources/generated_resources_uz.xtb +++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -313,7 +313,6 @@ <translation id="1359923111303110318">Qurilmangiz Smart Lock orqali qulfdan chiqarildi. Enter tugmasini bosing.</translation> <translation id="1361164813881551742">O‘zingiz qo‘shing</translation> <translation id="1361655923249334273">Foydalanilmayapti</translation> -<translation id="1361707011052629095">Yaqin-atrofga yuborish ilovasi ochiqligida sizga yaqin qurilmalar</translation> <translation id="1361872463926621533">Ochilganda tovush ijro etish</translation> <translation id="1362865166188278099">Mexanik muammo. Printerni tekshirish</translation> <translation id="1363585519747660921">USB printer sozlanishi kerak</translation> @@ -5706,7 +5705,6 @@ <translation id="7918257978052780342">Ro‘yhatdan o‘tish</translation> <translation id="7919210519031517829"><ph name="DURATION" /> s</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> sayti <ph name="FILENAME" /> faylini koʻra oladi</translation> -<translation id="7924080089023843180">Yaqin-atrofga yuborish ochilmaguncha hech kim</translation> <translation id="7924358170328001543">Portni uzatishda xato</translation> <translation id="792514962475806987">Mahkamlangan lupa masshtabi:</translation> <translation id="7925247922861151263">AAA tekshirilmadi</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index 2706cc1..d5d7a77 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Bạn có thể mở khóa thiết bị của mình bằng Smart Lock. Hãy nhấn phím Enter để mở khóa.</translation> <translation id="1361164813881551742">Thêm thủ công</translation> <translation id="1361655923249334273">Không sử dụng</translation> -<translation id="1361707011052629095">Các thiết bị ở gần bạn khi tính năng Chia sẻ lân cận đang bật</translation> <translation id="1361872463926621533">Phát âm thanh khi khởi động</translation> <translation id="1362865166188278099">Vấn đề về máy móc. Hãy kiểm tra máy in</translation> <translation id="1363585519747660921">Máy in USB cần định cấu hình</translation> @@ -5709,7 +5708,6 @@ <translation id="7918257978052780342">Đăng ký</translation> <translation id="7919210519031517829"><ph name="DURATION" /> giây</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> có thể xem <ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Không người nào cả, trừ phi bạn mở tính năng Chia sẻ lân cận</translation> <translation id="7924358170328001543">Lỗi khi chuyển tiếp cổng</translation> <translation id="792514962475806987">Mức thu phóng ở vị trí cố định:</translation> <translation id="7925247922861151263">Không thể kiểm tra AAA</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb index aac4037..8c61a78c 100644 --- a/chrome/app/resources/generated_resources_zh-CN.xtb +++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">您的设备可通过 Smart Lock 解锁。按 Enter 键即可解锁。</translation> <translation id="1361164813881551742">手动添加</translation> <translation id="1361655923249334273">未使用</translation> -<translation id="1361707011052629095">当“附近分享”功能处于开启状态时位于您附近的设备</translation> <translation id="1361872463926621533">启动时播放声音</translation> <translation id="1362865166188278099">发生机械问题,请检查打印机</translation> <translation id="1363585519747660921">USB 打印机需要配置</translation> @@ -5704,7 +5703,6 @@ <translation id="7918257978052780342">注册</translation> <translation id="7919210519031517829"><ph name="DURATION" /> 秒</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> 可以查看“<ph name="FILENAME" />”的内容</translation> -<translation id="7924080089023843180">无(除非您开启“附近分享”功能)</translation> <translation id="7924358170328001543">转发端口时出错</translation> <translation id="792514962475806987">停靠的放大镜的缩放级别:</translation> <translation id="7925247922861151263">AAA 检查失败</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb index 30f579d..b663ab97 100644 --- a/chrome/app/resources/generated_resources_zh-HK.xtb +++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">你可以用 Smart Lock 解鎖裝置。㩒 Enter 掣就可以解鎖。</translation> <translation id="1361164813881551742">手動新增</translation> <translation id="1361655923249334273">未使用</translation> -<translation id="1361707011052629095">您附近已開啟「咫尺共享」的裝置</translation> <translation id="1361872463926621533">啟動時播放音效</translation> <translation id="1362865166188278099">發生機件故障。請檢查打印機</translation> <translation id="1363585519747660921">USB 列印機需要設定</translation> @@ -5708,7 +5707,6 @@ <translation id="7918257978052780342">註冊</translation> <translation id="7919210519031517829"><ph name="DURATION" /> 秒</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> 可查看「<ph name="FILENAME" />」</translation> -<translation id="7924080089023843180">除非您開啟開啟「咫尺共享」,否則沒有人可與您分享內容</translation> <translation id="7924358170328001543">轉送連接埠時發生錯誤</translation> <translation id="792514962475806987">固定放大鏡的縮放等級:</translation> <translation id="7925247922861151263">AAA 檢查失敗</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb index ebfabd6..cad10af 100644 --- a/chrome/app/resources/generated_resources_zh-TW.xtb +++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">可透過 Smart Lock 解鎖裝置。按下 Enter 鍵即可解鎖。</translation> <translation id="1361164813881551742">手動新增</translation> <translation id="1361655923249334273">未使用</translation> -<translation id="1361707011052629095">開啟鄰近分享功能的附近裝置</translation> <translation id="1361872463926621533">啟動時播放音效</translation> <translation id="1362865166188278099">發生機械故障。請檢查印表機</translation> <translation id="1363585519747660921">請設定 USB 印表機</translation> @@ -2838,7 +2837,7 @@ <translation id="4390000551125140321">{0,plural, =1{無痕模式}other{已開啟 # 個無痕式視窗}}</translation> <translation id="439266289085815679">藍牙設定由 <ph name="USER_EMAIL" /> 控制。</translation> <translation id="4392896746540753732">編輯設定檔</translation> -<translation id="4393691030048716353"><ph name="DOMAIN" /> 已停用 ADB 偵錯。你重新啟動 <ph name="DEVICE_TYPE" /> 後,將無法測載應用程式。</translation> +<translation id="4393691030048716353"><ph name="DOMAIN" /> 已停用 ADB 偵錯。重新啟動 <ph name="DEVICE_TYPE" /> 後,你將無法側載應用程式。</translation> <translation id="4394049700291259645">停用</translation> <translation id="439817266247065935">你的裝置先前未正確關閉。如要使用 Linux 應用程式,請重新啟動 Linux。</translation> <translation id="4400367121200150367">一律不儲存密碼的網站會顯示在這裡</translation> @@ -5707,7 +5706,6 @@ <translation id="7918257978052780342">註冊</translation> <translation id="7919210519031517829"><ph name="DURATION" /> 秒</translation> <translation id="7920363873148656176"><ph name="ORIGIN" /> 可以檢視「<ph name="FILENAME" />」</translation> -<translation id="7924080089023843180">除非你開啟鄰近分享功能,否則沒有人可與你分享內容</translation> <translation id="7924358170328001543">轉送通訊埠時發生錯誤</translation> <translation id="792514962475806987">停駐縮放比例:</translation> <translation id="7925247922861151263">AAA 檢查失敗</translation> @@ -6161,7 +6159,7 @@ <translation id="8467326454809944210">選擇其他語言</translation> <translation id="8470214316007448308">其他人</translation> <translation id="8470513973197838199">已儲存 <ph name="ORIGIN" /> 的密碼</translation> -<translation id="8471256130228705232"><ph name="DOMAIN" /> 正在停用 ADB 側載。這會讓系統在 24 小時後重設你的 <ph name="DEVICE_TYPE" />。請備份你要保留的檔案。</translation> +<translation id="8471256130228705232"><ph name="DOMAIN" /> 正在停用 ADB 偵錯功能。這會讓系統在 24 小時後重設你的 <ph name="DEVICE_TYPE" />。請備份你要保留的檔案。</translation> <translation id="8472623782143987204">硬體支援</translation> <translation id="8473863474539038330">地址和其他資訊</translation> <translation id="8475313423285172237">電腦中其他程式所新增的擴充功能可能會變更 Chrome 的運作方式。</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb index d8d8116..c438a6f 100644 --- a/chrome/app/resources/generated_resources_zu.xtb +++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -312,7 +312,6 @@ <translation id="1359923111303110318">Idivayisi yakho ingavulwa nge-Smart Lock. Cindezela ku-Enter ukuze uvule.</translation> <translation id="1361164813881551742">Engeza ngokwenza</translation> <translation id="1361655923249334273">Akusetshenzisiwe</translation> -<translation id="1361707011052629095">Amadivayisi aseduze nawe lapho Ukuthumela Eduze kuvuliwe</translation> <translation id="1361872463926621533">Dlala umsindo ekuqaleni</translation> <translation id="1362865166188278099">Inkinga yomshini. Hlola iphrinta</translation> <translation id="1363585519747660921">Iphrinta ye-USB idinga ukulungiselelwa</translation> @@ -5709,7 +5708,6 @@ <translation id="7918257978052780342">Bhalisa</translation> <translation id="7919210519031517829"><ph name="DURATION" />s</translation> <translation id="7920363873148656176">I-<ph name="ORIGIN" /> ingabuka i-<ph name="FILENAME" /></translation> -<translation id="7924080089023843180">Akekho omunye umuntu ngaphandle kokuthi uvule Ukuthumela Eduze</translation> <translation id="7924358170328001543">Iphutha lokudlulisela imbobo</translation> <translation id="792514962475806987">Ileveli yokusondeza edokhiwe:</translation> <translation id="7925247922861151263">Ukuhlolwa kwe-AAA kuhlulekile</translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index f110408..ad74844 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -916,6 +916,8 @@ "notifications/notification_permission_context.h", "notifications/notification_platform_bridge.cc", "notifications/notification_platform_bridge.h", + "notifications/notification_platform_bridge_delegator.cc", + "notifications/notification_platform_bridge_delegator.h", "notifications/notification_trigger_scheduler.cc", "notifications/notification_trigger_scheduler.h", "notifications/notification_ui_manager.h", @@ -6031,6 +6033,7 @@ "//chrome/browser/ui/webui/chromeos/add_supervision:mojo_bindings_js", "//chrome/browser/ui/webui/chromeos/crostini_installer:mojo_bindings_js", "//chrome/browser/ui/webui/chromeos/crostini_upgrader:mojo_bindings_js", + "//chrome/browser/ui/webui/chromeos/file_manager:mojo_bindings_js", "//chrome/browser/ui/webui/chromeos/machine_learning:mojo_bindings_js", "//chrome/browser/ui/webui/settings/chromeos:mojom_js", ]
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index bbf4ef1..645778a 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -1495,12 +1495,6 @@ base::size(kTranslateForceTriggerOnEnglishGeo), nullptr}, {"(Zero threshold)", kTranslateForceTriggerOnEnglishBackoff, base::size(kTranslateForceTriggerOnEnglishBackoff), nullptr}}; - -const FeatureEntry::FeatureParam kOverscrollHistoryNavigationBottomSheet[] = { - {"overscroll_history_navigation_bottom_sheet", "true"}}; -const FeatureEntry::FeatureVariation kOverscrollHistoryNavigationVariations[] = - {{"Navigation sheet", kOverscrollHistoryNavigationBottomSheet, - base::size(kOverscrollHistoryNavigationBottomSheet), nullptr}}; #endif // defined(OS_ANDROID) #if defined(OS_ANDROID) @@ -2782,12 +2776,8 @@ flag_descriptions::kOverscrollHistoryNavigationName, flag_descriptions::kOverscrollHistoryNavigationDescription, kOsAura | kOsAndroid, -#if defined(OS_ANDROID) - FEATURE_WITH_PARAMS_VALUE_TYPE(features::kOverscrollHistoryNavigation, - kOverscrollHistoryNavigationVariations, - "OverscrollNavigation")}, -#else FEATURE_VALUE_TYPE(features::kOverscrollHistoryNavigation)}, +#if !defined(OS_ANDROID) {"pull-to-refresh", flag_descriptions::kPullToRefreshName, flag_descriptions::kPullToRefreshDescription, kOsAura, MULTI_VALUE_TYPE(kPullToRefreshChoices)}, @@ -3077,6 +3067,11 @@ flag_descriptions::kDesktopPWAsWithoutExtensionsName, flag_descriptions::kDesktopPWAsWithoutExtensionsDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kDesktopPWAsWithoutExtensions)}, + {"enable-desktop-pwas-migration-user-display-mode-clean-up", + flag_descriptions::kDesktopPWAsMigrationUserDisplayModeCleanUpName, + flag_descriptions::kDesktopPWAsMigrationUserDisplayModeCleanUpDescription, + kOsDesktop, + FEATURE_VALUE_TYPE(features::kDesktopPWAsMigrationUserDisplayModeCleanUp)}, {"enable-desktop-pwas-run-on-os-login", flag_descriptions::kDesktopPWAsRunOnOsLoginName, flag_descriptions::kDesktopPWAsRunOnOsLoginDescription, kOsDesktop,
diff --git a/chrome/browser/android/browsing_data/browsing_data_bridge.cc b/chrome/browser/android/browsing_data/browsing_data_bridge.cc index 8729c0c..6446838 100644 --- a/chrome/browser/android/browsing_data/browsing_data_bridge.cc +++ b/chrome/browser/android/browsing_data/browsing_data_bridge.cc
@@ -111,6 +111,8 @@ break; case browsing_data::BrowsingDataType::PASSWORDS: remove_mask |= ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS; + remove_mask |= + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_ACCOUNT_PASSWORDS; break; case browsing_data::BrowsingDataType::FORM_DATA: remove_mask |= ChromeBrowsingDataRemoverDelegate::DATA_TYPE_FORM_DATA;
diff --git a/chrome/browser/autofill/manual_filling_controller_impl.cc b/chrome/browser/autofill/manual_filling_controller_impl.cc index 977ea9c5..ede9356 100644 --- a/chrome/browser/autofill/manual_filling_controller_impl.cc +++ b/chrome/browser/autofill/manual_filling_controller_impl.cc
@@ -15,6 +15,7 @@ #include "chrome/browser/password_manager/android/password_accessory_metrics_util.h" #include "chrome/browser/password_manager/chrome_password_manager_client.h" #include "chrome/browser/profiles/profile.h" +#include "components/autofill/core/browser/ui/accessory_sheet_data.h" #include "components/autofill/core/common/autofill_features.h" #include "components/autofill/core/common/autofill_util.h" #include "components/keyed_service/core/service_access_type.h" @@ -108,6 +109,8 @@ void ManualFillingControllerImpl::RefreshSuggestions( const AccessorySheetData& accessory_sheet_data) { view_->OnItemsAvailable(accessory_sheet_data); + available_sheets_.emplace(GetSourceForTab(accessory_sheet_data), + accessory_sheet_data); UpdateSourceAvailability(GetSourceForTab(accessory_sheet_data), !accessory_sheet_data.user_info_list().empty()); } @@ -268,6 +271,11 @@ void ManualFillingControllerImpl::UpdateVisibility() { if (ShouldShowAccessory()) { + for (const FillingSource& source : available_sources_) { + if (!available_sheets_.contains(source)) + continue; + view_->OnItemsAvailable(available_sheets_.find(source)->second); + } view_->ShowWhenKeyboardIsVisible(); } else { view_->Hide();
diff --git a/chrome/browser/autofill/manual_filling_controller_impl.h b/chrome/browser/autofill/manual_filling_controller_impl.h index 0d86d887..5ad7691 100644 --- a/chrome/browser/autofill/manual_filling_controller_impl.h +++ b/chrome/browser/autofill/manual_filling_controller_impl.h
@@ -21,7 +21,6 @@ class CreditCardAccessoryController; } // namespace autofill - class AccessoryController; class PasswordAccessoryController; @@ -112,6 +111,9 @@ // This set contains sources to be shown to the user. base::flat_set<FillingSource> available_sources_; + // This map contains sheets for each sources to be shown to the user. + base::flat_map<FillingSource, autofill::AccessorySheetData> available_sheets_; + // Type of the last known selected field. Helps to determine UI visibility. autofill::mojom::FocusedFieldType focused_field_type_ = autofill::mojom::FocusedFieldType::kUnknown;
diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd index bec641be..189ac6ad 100644 --- a/chrome/browser/browser_resources.grd +++ b/chrome/browser/browser_resources.grd
@@ -279,6 +279,12 @@ <include name="IDR_DRIVE_INTERNALS_HTML" file="resources\chromeos\drive_internals.html" flattenhtml="true" type="BINDATA" /> <include name="IDR_DRIVE_INTERNALS_JS" file="resources\chromeos\drive_internals.js" type="BINDATA" /> + <include name="IDR_FILE_MANAGER_CSS" file="resources\chromeos\file_manager\file_manager.css" type="BINDATA" /> + <include name="IDR_FILE_MANAGER_HTML" file="resources\chromeos\file_manager\file_manager.html" flattenhtml="true" type="BINDATA" /> + <include name="IDR_FILE_MANAGER_JS" file="resources\chromeos\file_manager\file_manager.js" type="BINDATA" /> + <include name="IDR_FILE_MANAGER_MOJO_LITE_JS" file="${root_gen_dir}\chrome\browser\ui\webui\chromeos\file_manager\file_manager.mojom-lite.js" use_base_dir="false" type="BINDATA" /> + <include name="IDR_FILE_MANAGER_PROXY_JS" file="resources\chromeos\file_manager\browser_proxy.js" type="BINDATA" /> + <include name="IDR_GUEST_SESSION_TAB_HTML" file="resources\chromeos\guest_session_tab.html" flattenhtml="true" type="BINDATA" /> <!-- Note: mobile_setup_ui.cc does not support compressed resources. -->
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc index 52832d38..48ea2b1 100644 --- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc +++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
@@ -812,21 +812,6 @@ TracingDataType::kCompromisedCredentials)); } - auto account_store = AccountPasswordStoreFactory::GetForProfile( - profile_, ServiceAccessType::EXPLICIT_ACCESS); - - if (account_store) { - account_store->RemoveLoginsByURLAndTime( - filter, delete_begin_, delete_end_, - CreateTaskCompletionClosure(TracingDataType::kAccountPasswords), - CreateTaskCompletionCallback(TracingDataType::kAccountPasswordsSynced, - DATA_TYPE_PASSWORDS)); - account_store->RemoveCompromisedCredentialsByUrlAndTime( - nullable_filter, delete_begin_, delete_end_, - CreateTaskCompletionClosure( - TracingDataType::kAccountCompromisedCredentials)); - } - BrowserContext::GetDefaultStoragePartition(profile_) ->GetNetworkContext() ->ClearHttpAuthCache(delete_begin_, @@ -857,6 +842,23 @@ #endif // defined(OS_MAC) } + if (remove_mask & DATA_TYPE_ACCOUNT_PASSWORDS) { + auto account_store = AccountPasswordStoreFactory::GetForProfile( + profile_, ServiceAccessType::EXPLICIT_ACCESS); + + if (account_store) { + account_store->RemoveLoginsByURLAndTime( + filter, delete_begin_, delete_end_, + CreateTaskCompletionClosure(TracingDataType::kAccountPasswords), + CreateTaskCompletionCallback(TracingDataType::kAccountPasswordsSynced, + DATA_TYPE_ACCOUNT_PASSWORDS)); + account_store->RemoveCompromisedCredentialsByUrlAndTime( + nullable_filter, delete_begin_, delete_end_, + CreateTaskCompletionClosure( + TracingDataType::kAccountCompromisedCredentials)); + } + } + if (remove_mask & content::BrowsingDataRemover::DATA_TYPE_COOKIES) { password_manager::PasswordStore* password_store = PasswordStoreFactory::GetForProfile(profile_,
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h index 1ea832a9..a941467 100644 --- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h +++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h
@@ -76,6 +76,7 @@ DATA_TYPE_CONTENT_SETTINGS = DATA_TYPE_EMBEDDER_BEGIN << 9, DATA_TYPE_BOOKMARKS = DATA_TYPE_EMBEDDER_BEGIN << 10, DATA_TYPE_ISOLATED_ORIGINS = DATA_TYPE_EMBEDDER_BEGIN << 11, + DATA_TYPE_ACCOUNT_PASSWORDS = DATA_TYPE_EMBEDDER_BEGIN << 12, // Group datatypes. @@ -106,11 +107,14 @@ // Datatypes with account-scoped data that needs to be removed // before Google cookies are deleted. - DEFERRED_COOKIE_DELETION_DATA_TYPES = DATA_TYPE_PASSWORDS, + DEFERRED_COOKIE_DELETION_DATA_TYPES = DATA_TYPE_ACCOUNT_PASSWORDS, // Includes all the available remove options. Meant to be used by clients // that wish to wipe as much data as possible from a Profile, to make it - // look like a new Profile. + // look like a new Profile. Does not delete account-scoped data like + // passwords but will remove access to account-scoped data by signing the + // user out. + ALL_DATA_TYPES = DATA_TYPE_SITE_DATA | // content::BrowsingDataRemover::DATA_TYPE_CACHE | content::BrowsingDataRemover::DATA_TYPE_DOWNLOADS | @@ -161,6 +165,10 @@ "Deferred deletion is currently not implemented for filterable " "data types"); + static_assert((DEFERRED_COOKIE_DELETION_DATA_TYPES & WIPE_PROFILE) == 0, + "Account data should not be included in deletions that remove " + "all local data"); + explicit ChromeBrowsingDataRemoverDelegate( content::BrowserContext* browser_context); ~ChromeBrowsingDataRemoverDelegate() override;
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc index b8d30c57..517cd409 100644 --- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc +++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
@@ -2036,6 +2036,26 @@ EXPECT_CALL(*tester.profile_store(), RemoveLoginsByURLAndTimeImpl(_, _, _)) .WillOnce(Return(password_manager::PasswordStoreChangeList())); + // Only DATA_TYPE_PASSWORDS is cleared. Accounts passwords are not affected. + EXPECT_CALL(*tester.account_store(), RemoveLoginsByURLAndTimeImpl(_, _, _)) + .Times(0); + + BlockUntilBrowsingDataRemoved( + base::Time(), base::Time::Max(), + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS, false); +} + +TEST_F(ChromeBrowsingDataRemoverDelegateTest, + RemoveAccountPasswordsByTimeOnly_WithAccountStore) { + base::test::ScopedFeatureList feature_list; + feature_list.InitAndEnableFeature( + password_manager::features::kEnablePasswordsAccountStorage); + + RemovePasswordsTester tester(GetProfile()); + + EXPECT_CALL(*tester.profile_store(), RemoveLoginsByURLAndTimeImpl(_, _, _)) + .Times(0); + EXPECT_CALL(*tester.account_store(), RemoveLoginsByURLAndTimeImpl(_, _, _)) .WillOnce(Return(password_manager::PasswordStoreChangeList())); // For the account store, the remover delegate also waits until all the @@ -2046,11 +2066,11 @@ BlockUntilBrowsingDataRemoved( base::Time(), base::Time::Max(), - ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS, false); + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_ACCOUNT_PASSWORDS, false); } TEST_F(ChromeBrowsingDataRemoverDelegateTest, - RemovePasswordsByTimeOnly_WithAccountStore_Failure) { + RemoveAccountPasswordsByTimeOnly_WithAccountStore_Failure) { base::test::ScopedFeatureList feature_list; feature_list.InitAndEnableFeature( password_manager::features::kEnablePasswordsAccountStorage); @@ -2058,7 +2078,7 @@ RemovePasswordsTester tester(GetProfile()); EXPECT_CALL(*tester.profile_store(), RemoveLoginsByURLAndTimeImpl(_, _, _)) - .WillOnce(Return(password_manager::PasswordStoreChangeList())); + .Times(0); EXPECT_CALL(*tester.account_store(), RemoveLoginsByURLAndTimeImpl(_, _, _)) .WillOnce(Return(password_manager::PasswordStoreChangeList())); @@ -2073,9 +2093,9 @@ uint64_t failed_data_types = BlockUntilBrowsingDataRemoved( base::Time(), base::Time::Max(), - ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS, false); + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_ACCOUNT_PASSWORDS, false); EXPECT_EQ(failed_data_types, - ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS); + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_ACCOUNT_PASSWORDS); } // Disabled, since passwords are not yet marked as a filterable datatype. @@ -2145,7 +2165,7 @@ } TEST_F(ChromeBrowsingDataRemoverDelegateTest, - RemoveCompromisedCredentialsByTimeOnly_WithAccountStore) { + RemoveCompromisedAccountCredentialsByTimeOnly_WithAccountStore) { base::test::ScopedFeatureList feature_list; feature_list.InitAndEnableFeature( password_manager::features::kEnablePasswordsAccountStorage); @@ -2153,10 +2173,9 @@ RemovePasswordsTester tester(GetProfile()); base::RepeatingCallback<bool(const GURL&)> empty_filter; - EXPECT_CALL( - *tester.profile_store(), - RemoveCompromisedCredentialsByUrlAndTimeImpl( - ProbablySameFilter(empty_filter), base::Time(), base::Time::Max())); + EXPECT_CALL(*tester.profile_store(), + RemoveCompromisedCredentialsByUrlAndTimeImpl(_, _, _)) + .Times(0); EXPECT_CALL( *tester.account_store(), @@ -2165,7 +2184,7 @@ BlockUntilBrowsingDataRemoved( base::Time(), base::Time::Max(), - ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS, false); + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_ACCOUNT_PASSWORDS, false); } // TODO(crbug.com/589586): Disabled, since history is not yet marked as @@ -3233,18 +3252,18 @@ password_manager::features::kEnablePasswordsAccountStorage); auto* delegate = GetProfile()->GetBrowsingDataRemoverDelegate(); + auto domains = delegate->GetDomainsForDeferredCookieDeletion( - ChromeBrowsingDataRemoverDelegate::ALL_DATA_TYPES); + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_ACCOUNT_PASSWORDS); EXPECT_EQ(domains.size(), 1u); EXPECT_EQ(domains[0], "google.com"); domains = delegate->GetDomainsForDeferredCookieDeletion( ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS); - EXPECT_EQ(domains.size(), 1u); - EXPECT_EQ(domains[0], "google.com"); + EXPECT_EQ(domains.size(), 0u); domains = delegate->GetDomainsForDeferredCookieDeletion( - content::BrowsingDataRemover::DATA_TYPE_COOKIES); + ChromeBrowsingDataRemoverDelegate::ALL_DATA_TYPES); EXPECT_EQ(domains.size(), 0u); }
diff --git a/chrome/browser/chrome_browser_interface_binders.cc b/chrome/browser/chrome_browser_interface_binders.cc index 5f41a86..9b4140a 100644 --- a/chrome/browser/chrome_browser_interface_binders.cc +++ b/chrome/browser/chrome_browser_interface_binders.cc
@@ -154,6 +154,8 @@ #include "chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_ui.h" #include "chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader.mojom.h" #include "chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_ui.h" +#include "chrome/browser/ui/webui/chromeos/file_manager/file_manager.mojom.h" +#include "chrome/browser/ui/webui/chromeos/file_manager/file_manager_ui.h" #include "chrome/browser/ui/webui/chromeos/internet_config_dialog.h" #include "chrome/browser/ui/webui/chromeos/internet_detail_dialog.h" #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" @@ -167,8 +169,6 @@ #include "chrome/browser/ui/webui/settings/chromeos/search/user_action_recorder.mojom.h" #include "chromeos/components/camera_app_ui/camera_app_helper.mojom.h" #include "chromeos/components/camera_app_ui/camera_app_ui.h" -#include "chromeos/components/file_manager/file_manager.mojom.h" -#include "chromeos/components/file_manager/file_manager_ui.h" #include "chromeos/components/help_app_ui/help_app_ui.h" #include "chromeos/components/help_app_ui/help_app_ui.mojom.h" #include "chromeos/components/media_app_ui/media_app_ui.h"
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index ab7b345..8170d0c 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -2839,16 +2839,12 @@ if (!is_official_build) { deps += [ - "//chromeos/components/file_manager:file_manager_ui", "//chromeos/components/sample_system_web_app_ui", "//chromeos/components/telemetry_extension_ui", - "//chromeos/resources:file_manager_resources_grit", "//chromeos/resources:sample_system_web_app_resources_grit", "//chromeos/resources:telemetry_extension_resources", ] sources += [ - "web_applications/file_manager_web_app_info.cc", - "web_applications/file_manager_web_app_info.h", "web_applications/sample_system_web_app_info.cc", "web_applications/sample_system_web_app_info.h", "web_applications/telemetry_extension_web_app_info.cc",
diff --git a/chrome/browser/chromeos/accessibility/accessibility_manager.cc b/chrome/browser/chromeos/accessibility/accessibility_manager.cc index 5fc4416..83109f3 100644 --- a/chrome/browser/chromeos/accessibility/accessibility_manager.cc +++ b/chrome/browser/chromeos/accessibility/accessibility_manager.cc
@@ -507,9 +507,14 @@ EnableSpokenFeedback(true); } -void AccessibilityManager::OnViewFocusedInArc( - const gfx::Rect& bounds_in_screen) { +void AccessibilityManager::OnViewFocusedInArc(const gfx::Rect& bounds_in_screen, + bool is_editable) { ash::AccessibilityController::Get()->SetFocusHighlightRect(bounds_in_screen); + + MagnificationManager* magnification_manager = MagnificationManager::Get(); + if (magnification_manager) + magnification_manager->HandleFocusedRectChangedIfEnabled(bounds_in_screen, + is_editable); } bool AccessibilityManager::PlayEarcon(int sound_key, PlaySoundOption option) {
diff --git a/chrome/browser/chromeos/accessibility/accessibility_manager.h b/chrome/browser/chromeos/accessibility/accessibility_manager.h index 3e7c8df..a55797c3 100644 --- a/chrome/browser/chromeos/accessibility/accessibility_manager.h +++ b/chrome/browser/chromeos/accessibility/accessibility_manager.h
@@ -253,8 +253,8 @@ // Play tick sound indicating spoken feedback will be toggled after countdown. bool PlaySpokenFeedbackToggleCountdown(int tick_count); - // Notify that a view is focused in arc. - void OnViewFocusedInArc(const gfx::Rect& bounds_in_screen); + // Update when a view is focused in ARC++. + void OnViewFocusedInArc(const gfx::Rect& bounds_in_screen, bool is_editable); // Plays an earcon. Earcons are brief and distinctive sounds that indicate // the their mapped event has occurred. The |sound_key| enums can be found in
diff --git a/chrome/browser/chromeos/accessibility/magnification_manager.cc b/chrome/browser/chromeos/accessibility/magnification_manager.cc index 1c3e586..dab6ba0 100644 --- a/chrome/browser/chromeos/accessibility/magnification_manager.cc +++ b/chrome/browser/chromeos/accessibility/magnification_manager.cc
@@ -99,6 +99,15 @@ SetProfile(nullptr); } +void MagnificationManager::HandleFocusedRectChangedIfEnabled( + const gfx::Rect& bounds_in_screen, + bool is_editable) { + if (!fullscreen_magnifier_enabled_ && !IsDockedMagnifierEnabled()) + return; + + HandleFocusChanged(bounds_in_screen, is_editable); +} + void MagnificationManager::OnViewEvent(views::View* view, ax::mojom::Event event_type) { if (!fullscreen_magnifier_enabled_ && !IsDockedMagnifierEnabled())
diff --git a/chrome/browser/chromeos/accessibility/magnification_manager.h b/chrome/browser/chromeos/accessibility/magnification_manager.h index 36508be2..770b4f2 100644 --- a/chrome/browser/chromeos/accessibility/magnification_manager.h +++ b/chrome/browser/chromeos/accessibility/magnification_manager.h
@@ -64,6 +64,10 @@ // Loads the Fullscreen magnifier scale from the pref. double GetSavedScreenMagnifierScale() const; + // Updates for a new focus rect (eg, from ARC++) if a magnifier is enabled. + void HandleFocusedRectChangedIfEnabled(const gfx::Rect& bounds_in_screen, + bool is_editable); + // ProfileObserver: void OnProfileWillBeDestroyed(Profile* profile) override;
diff --git a/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.cc b/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.cc index 5e36c31..5315d67 100644 --- a/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.cc +++ b/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.cc
@@ -13,6 +13,7 @@ #include "base/command_line.h" #include "base/memory/singleton.h" #include "base/metrics/histogram_functions.h" +#include "chrome/browser/chromeos/accessibility/magnification_manager.h" #include "chrome/browser/chromeos/arc/accessibility/arc_accessibility_util.h" #include "chrome/browser/chromeos/arc/accessibility/geometry_util.h" #include "chrome/browser/profiles/profile.h" @@ -96,7 +97,10 @@ node_data->bounds_in_screen, views::Widget::GetWidgetForNativeView(active_window))); - accessibility_manager->OnViewFocusedInArc(bounds_in_screen); + bool is_editable = arc::GetBooleanProperty( + node_data, arc::mojom::AccessibilityBooleanProperty::EDITABLE); + + accessibility_manager->OnViewFocusedInArc(bounds_in_screen, is_editable); } void SetChildAxTreeIDForWindow(aura::Window* window, @@ -613,7 +617,10 @@ ArcAccessibilityHelperBridge::GetFilterTypeForProfile(Profile* profile) { chromeos::AccessibilityManager* accessibility_manager = chromeos::AccessibilityManager::Get(); - if (!accessibility_manager) + const chromeos::MagnificationManager* magnification_manager = + chromeos::MagnificationManager::Get(); + + if (!accessibility_manager || !magnification_manager) return arc::mojom::AccessibilityFilterType::OFF; // TODO(yawano): Support the case where primary user is in background. @@ -626,8 +633,12 @@ return arc::mojom::AccessibilityFilterType::ALL; } - if (accessibility_manager->IsFocusHighlightEnabled()) + if (magnification_manager->IsMagnifierEnabled() || + magnification_manager->IsDockedMagnifierEnabled() || + accessibility_manager->IsFocusHighlightEnabled()) { return arc::mojom::AccessibilityFilterType::FOCUS; + } + return arc::mojom::AccessibilityFilterType::OFF; } @@ -694,7 +705,11 @@ event_details.notification_type != chromeos::ACCESSIBILITY_TOGGLE_SPOKEN_FEEDBACK && event_details.notification_type != - chromeos::ACCESSIBILITY_TOGGLE_SWITCH_ACCESS) { + chromeos::ACCESSIBILITY_TOGGLE_SWITCH_ACCESS && + event_details.notification_type != + chromeos::ACCESSIBILITY_TOGGLE_DOCKED_MAGNIFIER && + event_details.notification_type != + chromeos::ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFIER) { return; } @@ -708,27 +723,33 @@ } void ArcAccessibilityHelperBridge::UpdateEnabledFeature() { - arc::mojom::AccessibilityFilterType new_filter_type_ = + arc::mojom::AccessibilityFilterType new_filter_type = GetFilterTypeForProfile(profile_); // Clear trees when filter type is changed to non-ALL. - if (filter_type_ != new_filter_type_ && - new_filter_type_ != arc::mojom::AccessibilityFilterType::ALL) { + + if (filter_type_ != new_filter_type && + new_filter_type != arc::mojom::AccessibilityFilterType::ALL) { trees_.clear(); } - filter_type_ = new_filter_type_; + filter_type_ = new_filter_type; auto* instance = ARC_GET_INSTANCE_FOR_METHOD( arc_bridge_service_->accessibility_helper(), SetFilter); if (instance) instance->SetFilter(filter_type_); - chromeos::AccessibilityManager* accessibility_manager = + const chromeos::AccessibilityManager* accessibility_manager = chromeos::AccessibilityManager::Get(); - if (!accessibility_manager) + const chromeos::MagnificationManager* magnification_manager = + chromeos::MagnificationManager::Get(); + + if (!accessibility_manager || !magnification_manager) return; - is_focus_highlight_enabled_ = - accessibility_manager->IsFocusHighlightEnabled(); + is_focus_event_enabled_ = magnification_manager->IsMagnifierEnabled() || + magnification_manager->IsDockedMagnifierEnabled() || + accessibility_manager->IsFocusHighlightEnabled(); + use_full_focus_mode_ = accessibility_manager->IsSwitchAccessEnabled() || accessibility_manager->IsSpokenFeedbackEnabled(); @@ -923,7 +944,7 @@ UpdateWindowProperties(GetActiveWindow()); } - if (is_focus_highlight_enabled_ && + if (is_focus_event_enabled_ && event_data->event_type == arc::mojom::AccessibilityEventType::VIEW_FOCUSED) { for (size_t i = 0; i < event_data->node_data.size(); ++i) {
diff --git a/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.h b/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.h index 4f7d49b..eabdcbf 100644 --- a/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.h +++ b/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.h
@@ -177,7 +177,7 @@ AXTreeSourceArc* GetFromTreeId(ui::AXTreeID tree_id) const; bool activation_observer_added_ = false; - bool is_focus_highlight_enabled_ = false; + bool is_focus_event_enabled_ = false; bool use_full_focus_mode_ = false; Profile* const profile_; ArcBridgeService* const arc_bridge_service_;
diff --git a/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.cc b/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.cc index 9be598d..771a0cf1 100644 --- a/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.cc +++ b/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.cc
@@ -721,7 +721,8 @@ DCHECK(device); std::string address = device->GetAddress(); - OnGattDisconnected(mojom::BluetoothAddress::From(address)); + if (gatt_connections_.find(address) != gatt_connections_.end()) + OnGattDisconnected(mojom::BluetoothAddress::From(address)); OnForgetDone(mojom::BluetoothAddress::From(address)); }
diff --git a/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.cc b/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.cc index 46338cd..adfd6b7c 100644 --- a/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.cc +++ b/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.cc
@@ -170,6 +170,7 @@ void SyncAccessibilityLargeMouseCursorEnabled() const; void SyncAccessibilityVirtualKeyboardEnabled() const; void SyncBackupEnabled() const; + void SyncDockedMagnifierEnabled() const; void SyncFocusHighlightEnabled() const; void SyncLocale() const; void SyncLocationServiceEnabled() const; @@ -178,6 +179,7 @@ void SyncProxySettingsForSystemProxy() const; void SyncReportingConsent(bool initial_sync) const; void SyncPictureInPictureEnabled() const; + void SyncScreenMagnifierEnabled() const; void SyncSelectToSpeakEnabled() const; void SyncSpokenFeedbackEnabled() const; void SyncSwitchAccessEnabled() const; @@ -273,6 +275,8 @@ SyncFocusHighlightEnabled(); } else if (pref_name == ash::prefs::kAccessibilityLargeCursorEnabled) { SyncAccessibilityLargeMouseCursorEnabled(); + } else if (pref_name == ash::prefs::kAccessibilityScreenMagnifierEnabled) { + SyncScreenMagnifierEnabled(); } else if (pref_name == ash::prefs::kAccessibilitySelectToSpeakEnabled) { SyncSelectToSpeakEnabled(); } else if (pref_name == ash::prefs::kAccessibilitySpokenFeedbackEnabled) { @@ -281,6 +285,8 @@ SyncSwitchAccessEnabled(); } else if (pref_name == ash::prefs::kAccessibilityVirtualKeyboardEnabled) { SyncAccessibilityVirtualKeyboardEnabled(); + } else if (pref_name == ash::prefs::kDockedMagnifierEnabled) { + SyncDockedMagnifierEnabled(); } else if (pref_name == ::language::prefs::kApplicationLocale || pref_name == ::language::prefs::kPreferredLanguages) { SyncLocale(); @@ -344,10 +350,12 @@ // Keep these lines ordered lexicographically. AddPrefToObserve(ash::prefs::kAccessibilityFocusHighlightEnabled); AddPrefToObserve(ash::prefs::kAccessibilityLargeCursorEnabled); + AddPrefToObserve(ash::prefs::kAccessibilityScreenMagnifierEnabled); AddPrefToObserve(ash::prefs::kAccessibilitySelectToSpeakEnabled); AddPrefToObserve(ash::prefs::kAccessibilitySpokenFeedbackEnabled); AddPrefToObserve(ash::prefs::kAccessibilitySwitchAccessEnabled); AddPrefToObserve(ash::prefs::kAccessibilityVirtualKeyboardEnabled); + AddPrefToObserve(ash::prefs::kDockedMagnifierEnabled); AddPrefToObserve(::prefs::kResolveTimezoneByGeolocationMethod); AddPrefToObserve(::prefs::kSystemProxyUserTrafficHostAndPort); AddPrefToObserve(::prefs::kUse24HourClock); @@ -390,10 +398,12 @@ // Keep these lines ordered lexicographically. SyncAccessibilityLargeMouseCursorEnabled(); SyncAccessibilityVirtualKeyboardEnabled(); + SyncDockedMagnifierEnabled(); SyncFocusHighlightEnabled(); SyncProxySettings(); SyncReportingConsent(/*initial_sync=*/false); SyncPictureInPictureEnabled(); + SyncScreenMagnifierEnabled(); SyncSelectToSpeakEnabled(); SyncSpokenFeedbackEnabled(); SyncSwitchAccessEnabled(); @@ -457,6 +467,18 @@ "org.chromium.arc.intent_helper.SET_FOCUS_HIGHLIGHT_ENABLED"); } +void ArcSettingsServiceImpl::SyncScreenMagnifierEnabled() const { + SendBoolPrefSettingsBroadcast( + ash::prefs::kAccessibilityScreenMagnifierEnabled, + "org.chromium.arc.intent_helper.SET_SCREEN_MAGNIFIER_ENABLED"); +} + +void ArcSettingsServiceImpl::SyncDockedMagnifierEnabled() const { + SendBoolPrefSettingsBroadcast( + ash::prefs::kDockedMagnifierEnabled, + "org.chromium.arc.intent_helper.SET_DOCKED_MAGNIFIER_ENABLED"); +} + void ArcSettingsServiceImpl::SyncLocale() const { if (IsArcLocaleSyncDisabled()) { VLOG(1) << "Locale sync is disabled.";
diff --git a/chrome/browser/chromeos/crostini/crostini_export_import.h b/chrome/browser/chromeos/crostini/crostini_export_import.h index b8d2d056..2bea7726 100644 --- a/chrome/browser/chromeos/crostini/crostini_export_import.h +++ b/chrome/browser/chromeos/crostini/crostini_export_import.h
@@ -30,8 +30,8 @@ enum class ExportImportType { EXPORT, IMPORT }; -// ExportContainerResult and ImportContainerResult are used for UMA. Adding new -// fields is OK, but do not delete or renumber. +// ExportContainerResult is used for UMA, if you update this make sure to update +// CrostiniExportContainerResult in enums.xml enum class ExportContainerResult { kSuccess = 0, kFailed = 1, @@ -40,6 +40,8 @@ kMaxValue = kFailedVmStarted, }; +// ImportContainerResult is used for UMA, if you update this make sure to update +// CrostiniImportContainerResult in enums.xml enum class ImportContainerResult { kSuccess = 0, kFailed = 1,
diff --git a/chrome/browser/chromeos/web_applications/file_manager_web_app_info.cc b/chrome/browser/chromeos/web_applications/file_manager_web_app_info.cc deleted file mode 100644 index a19d544..0000000 --- a/chrome/browser/chromeos/web_applications/file_manager_web_app_info.cc +++ /dev/null
@@ -1,30 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/chromeos/web_applications/file_manager_web_app_info.h" - -#include "base/strings/string16.h" -#include "base/strings/utf_string_conversions.h" -#include "chrome/browser/chromeos/web_applications/system_web_app_install_utils.h" -#include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/common/web_application_info.h" -#include "chromeos/components/file_manager/url_constants.h" -#include "chromeos/grit/chromeos_file_manager_resources.h" -#include "third_party/blink/public/mojom/manifest/display_mode.mojom.h" - -std::unique_ptr<WebApplicationInfo> CreateWebAppInfoForFileManager() { - auto info = std::make_unique<WebApplicationInfo>(); - info->app_url = GURL(chromeos::file_manager::kChromeUIFileManagerURL); - info->scope = GURL(chromeos::file_manager::kChromeUIFileManagerURL); - // TODO(majewski): Fetch from a resource. - info->title = base::UTF8ToUTF16("File Manager"); - web_app::CreateIconInfoForSystemWebApp( - info->app_url, {{"icon192.png", 192, IDR_FILE_MANAGER_ICON_192}}, *info); - info->theme_color = 0xFF4285F4; - info->background_color = 0xFFFFFFFF; - info->display_mode = blink::mojom::DisplayMode::kStandalone; - info->open_as_window = true; - - return info; -}
diff --git a/chrome/browser/chromeos/web_applications/file_manager_web_app_info.h b/chrome/browser/chromeos/web_applications/file_manager_web_app_info.h deleted file mode 100644 index 4431b20..0000000 --- a/chrome/browser/chromeos/web_applications/file_manager_web_app_info.h +++ /dev/null
@@ -1,19 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_CHROMEOS_WEB_APPLICATIONS_FILE_MANAGER_WEB_APP_INFO_H_ -#define CHROME_BROWSER_CHROMEOS_WEB_APPLICATIONS_FILE_MANAGER_WEB_APP_INFO_H_ - -#include <memory> - -#if defined(OFFICIAL_BUILD) -#error File Manager should only be included in unofficial builds. -#endif - -struct WebApplicationInfo; - -// Return a WebApplicationInfo used to install the app. -std::unique_ptr<WebApplicationInfo> CreateWebAppInfoForFileManager(); - -#endif // CHROME_BROWSER_CHROMEOS_WEB_APPLICATIONS_FILE_MANAGER_WEB_APP_INFO_H_
diff --git a/chrome/browser/chromeos/wilco_dtc_supportd/OWNERS b/chrome/browser/chromeos/wilco_dtc_supportd/OWNERS index d7e3023..6eb1eaf 100644 --- a/chrome/browser/chromeos/wilco_dtc_supportd/OWNERS +++ b/chrome/browser/chromeos/wilco_dtc_supportd/OWNERS
@@ -1,8 +1,9 @@ -pbond@chromium.org lamzin@google.com +mgawad@google.com # Backup reviewers: emaxx@chromium.org +pbond@chromium.org pmarko@chromium.org # COMPONENT: Enterprise
diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUILD.gn index 3e75f69..ef6299fc 100644 --- a/chrome/browser/extensions/BUILD.gn +++ b/chrome/browser/extensions/BUILD.gn
@@ -470,8 +470,8 @@ "chrome_url_request_util.h", "chrome_zipfile_installer.cc", "chrome_zipfile_installer.h", - "component_extensions_whitelist/whitelist.cc", - "component_extensions_whitelist/whitelist.h", + "component_extensions_allowlist/allowlist.cc", + "component_extensions_allowlist/allowlist.h", "component_loader.cc", "component_loader.h", "context_menu_matcher.cc",
diff --git a/chrome/browser/extensions/active_tab_permission_granter.cc b/chrome/browser/extensions/active_tab_permission_granter.cc index 4cb86850..de00cff 100644 --- a/chrome/browser/extensions/active_tab_permission_granter.cc +++ b/chrome/browser/extensions/active_tab_permission_granter.cc
@@ -37,22 +37,22 @@ const std::string& extension_id, const URLPatternSet& new_hosts, int tab_id, - bool update_whitelist) { + bool update_allowlist) { return new ExtensionMsg_UpdateTabSpecificPermissions( - visible_url, extension_id, new_hosts, update_whitelist, tab_id); + visible_url, extension_id, new_hosts, update_allowlist, tab_id); } // Creates a new IPC message for clearing tab-specific permissions. IPC::Message* CreateClearMessage(const std::vector<std::string>& ids, int tab_id, - bool update_whitelist) { - return new ExtensionMsg_ClearTabSpecificPermissions( - ids, update_whitelist, tab_id); + bool update_allowlist) { + return new ExtensionMsg_ClearTabSpecificPermissions(ids, update_allowlist, + tab_id); } // Sends a message exactly once to each render process host owning one of the // given |frame_hosts| and |tab_process|. If |tab_process| doesn't own any of -// the |frame_hosts|, it will not be signaled to update its origin whitelist. +// the |frame_hosts|, it will not be signaled to update its origin allowlist. void SendMessageToProcesses( const std::set<content::RenderFrameHost*>& frame_hosts, content::RenderProcessHost* tab_process, @@ -61,13 +61,13 @@ for (content::RenderFrameHost* frame_host : frame_hosts) { content::RenderProcessHost* process_host = frame_host->GetProcess(); if (sent_to_hosts.count(process_host) == 0) { - // Extension processes have to update the origin whitelists. + // Extension processes have to update the origin allowlists. process_host->Send(create_message.Run(true)); sent_to_hosts.insert(frame_host->GetProcess()); } } // If the tab wasn't one of those processes already updated (it likely - // wasn't), update it. Tabs don't need to update the origin whitelist. + // wasn't), update it. Tabs don't need to update the origin allowlist. if (sent_to_hosts.count(tab_process) == 0) tab_process->Send(create_message.Run(false)); }
diff --git a/chrome/browser/extensions/activity_log/activity_log.cc b/chrome/browser/extensions/activity_log/activity_log.cc index 62b4209..3377272 100644 --- a/chrome/browser/extensions/activity_log/activity_log.cc +++ b/chrome/browser/extensions/activity_log/activity_log.cc
@@ -361,7 +361,7 @@ const base::ListValue& args, Action::ActionType type) { DCHECK_CURRENTLY_ON(BrowserThread::UI); - if (ActivityLogAPI::IsExtensionWhitelisted(extension_id)) + if (ActivityLogAPI::IsExtensionAllowlisted(extension_id)) return; ActivityLog* activity_log = SafeGetActivityLog(browser_context); @@ -400,7 +400,7 @@ const std::string& api_call, std::unique_ptr<base::DictionaryValue> details) { DCHECK_CURRENTLY_ON(BrowserThread::UI); - if (ActivityLogAPI::IsExtensionWhitelisted(extension_id)) + if (ActivityLogAPI::IsExtensionAllowlisted(extension_id)) return; ActivityLog* activity_log = SafeGetActivityLog(browser_context); @@ -563,7 +563,7 @@ void ActivityLog::OnExtensionLoaded(content::BrowserContext* browser_context, const Extension* extension) { - if (!ActivityLogAPI::IsExtensionWhitelisted(extension->id())) + if (!ActivityLogAPI::IsExtensionAllowlisted(extension->id())) return; ++active_consumers_; @@ -578,7 +578,7 @@ void ActivityLog::OnExtensionUnloaded(content::BrowserContext* browser_context, const Extension* extension, UnloadedExtensionReason reason) { - if (!ActivityLogAPI::IsExtensionWhitelisted(extension->id())) + if (!ActivityLogAPI::IsExtensionAllowlisted(extension->id())) return; --active_consumers_; @@ -594,7 +594,7 @@ content::BrowserContext* browser_context, const Extension* extension, extensions::UninstallReason reason) { - if (ActivityLogAPI::IsExtensionWhitelisted(extension->id()) && + if (ActivityLogAPI::IsExtensionAllowlisted(extension->id()) && !base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kEnableExtensionActivityLogging) && active_consumers_ == 0) { @@ -651,7 +651,7 @@ // Do not log for activities from the browser/WebUI, which is indicated by an // empty extension ID. return is_active_ && !extension_id.empty() && - !ActivityLogAPI::IsExtensionWhitelisted(extension_id); + !ActivityLogAPI::IsExtensionAllowlisted(extension_id); } void ActivityLog::OnScriptsExecuted(content::WebContents* web_contents, @@ -663,7 +663,7 @@ for (auto it = extension_ids.begin(); it != extension_ids.end(); ++it) { const Extension* extension = registry->GetExtensionById(it->first, ExtensionRegistry::ENABLED); - if (!extension || ActivityLogAPI::IsExtensionWhitelisted(extension->id())) + if (!extension || ActivityLogAPI::IsExtensionAllowlisted(extension->id())) continue; // If OnScriptsExecuted is fired because of tabs.executeScript, the list
diff --git a/chrome/browser/extensions/activity_log/activity_log.h b/chrome/browser/extensions/activity_log/activity_log.h index a30613e..e6649be1 100644 --- a/chrome/browser/extensions/activity_log/activity_log.h +++ b/chrome/browser/extensions/activity_log/activity_log.h
@@ -96,7 +96,7 @@ void(std::unique_ptr<std::vector<scoped_refptr<Action>>>)> callback); // ExtensionRegistryObserver. - // We keep track of whether the whitelisted extension is installed; if it is, + // We keep track of whether the allowlisted extension is installed; if it is, // we want to recompute whether to have logging enabled. void OnExtensionLoaded(content::BrowserContext* browser_context, const Extension* extension) override; @@ -205,7 +205,7 @@ // testing_mode_ also causes us to print to the console. bool testing_mode_; - // Used to track whether the whitelisted extension is installed. If it's + // Used to track whether the allowlisted extension is installed. If it's // added or removed, enabled_ may change. ScopedObserver<extensions::ExtensionRegistry, extensions::ExtensionRegistryObserver>
diff --git a/chrome/browser/extensions/activity_log/activity_log_policy.cc b/chrome/browser/extensions/activity_log/activity_log_policy.cc index 97d1faa..3d79128 100644 --- a/chrome/browser/extensions/activity_log/activity_log_policy.cc +++ b/chrome/browser/extensions/activity_log/activity_log_policy.cc
@@ -118,11 +118,10 @@ } // static -void ActivityLogPolicy::Util::StripArguments(const ApiSet& api_whitelist, +void ActivityLogPolicy::Util::StripArguments(const ApiSet& api_allowlist, scoped_refptr<Action> action) { - if (api_whitelist.find( - std::make_pair(action->action_type(), action->api_name())) == - api_whitelist.end()) { + if (api_allowlist.find(std::make_pair( + action->action_type(), action->api_name())) == api_allowlist.end()) { action->set_args(std::unique_ptr<base::ListValue>()); } }
diff --git a/chrome/browser/extensions/activity_log/activity_log_policy.h b/chrome/browser/extensions/activity_log/activity_log_policy.h index bd1d96a1..5c823159 100644 --- a/chrome/browser/extensions/activity_log/activity_log_policy.h +++ b/chrome/browser/extensions/activity_log/activity_log_policy.h
@@ -89,7 +89,7 @@ // these methods more convenient from within a policy, but they are public. class Util { public: - // A collection of API calls, used to specify whitelists for argument + // A collection of API calls, used to specify allowlists for argument // filtering. typedef std::set<std::pair<Action::ActionType, std::string> > ApiSet; @@ -104,9 +104,9 @@ // call ->Clone() first. static void StripPrivacySensitiveFields(scoped_refptr<Action> action); - // Strip arguments from most API actions, preserving actions only for a - // whitelisted set. Modifies the Action object in-place. - static void StripArguments(const ApiSet& api_whitelist, + // Strip arguments from most API actions, preserving actions only for an + // allowlisted set. Modifies the Action object in-place. + static void StripArguments(const ApiSet& api_allowlist, scoped_refptr<Action> action); // Given a base day (timestamp at local midnight), computes the timestamp
diff --git a/chrome/browser/extensions/activity_log/activity_log_policy_unittest.cc b/chrome/browser/extensions/activity_log/activity_log_policy_unittest.cc index 421f55a..8027a49c 100644 --- a/chrome/browser/extensions/activity_log/activity_log_policy_unittest.cc +++ b/chrome/browser/extensions/activity_log/activity_log_policy_unittest.cc
@@ -61,25 +61,25 @@ // Test that argument values are stripped as appropriate. TEST_F(ActivityLogPolicyUtilTest, StripArguments) { - ActivityLogPolicy::Util::ApiSet whitelist; - whitelist.insert( + ActivityLogPolicy::Util::ApiSet allowlist; + allowlist.insert( std::make_pair(Action::ACTION_API_CALL, "tabs.executeScript")); - // API is in whitelist; not stripped. + // API is in allowlist; not stripped. scoped_refptr<Action> action = new Action("punky", base::Time::Now(), Action::ACTION_API_CALL, "tabs.executeScript"); action->mutable_args()->AppendString("woof"); - ActivityLogPolicy::Util::StripArguments(whitelist, action); + ActivityLogPolicy::Util::StripArguments(allowlist, action); ASSERT_EQ("[\"woof\"]", ActivityLogPolicy::Util::Serialize(action->args())); - // Not in whitelist: stripped. + // Not in allowlist: stripped. action = new Action( "punky", base::Time::Now(), Action::ACTION_API_CALL, "tabs.create"); action->mutable_args()->AppendString("woof"); - ActivityLogPolicy::Util::StripArguments(whitelist, action); + ActivityLogPolicy::Util::StripArguments(allowlist, action); ASSERT_EQ("", ActivityLogPolicy::Util::Serialize(action->args())); }
diff --git a/chrome/browser/extensions/activity_log/activity_log_unittest.cc b/chrome/browser/extensions/activity_log/activity_log_unittest.cc index 81268eb..929db4b 100644 --- a/chrome/browser/extensions/activity_log/activity_log_unittest.cc +++ b/chrome/browser/extensions/activity_log/activity_log_unittest.cc
@@ -427,9 +427,9 @@ // Since the command line switch for logging isn't enabled and there's no // watchdog app active, the activity log shouldn't log anything. EXPECT_FALSE(activity_log->ShouldLog(empty_extension->id())); - const char kWhitelistedExtensionId[] = "eplckmlabaanikjjcgnigddmagoglhmp"; + const char kAllowlistedExtensionId[] = "eplckmlabaanikjjcgnigddmagoglhmp"; scoped_refptr<const Extension> activity_log_extension = - ExtensionBuilder("Test").SetID(kWhitelistedExtensionId).Build(); + ExtensionBuilder("Test").SetID(kAllowlistedExtensionId).Build(); extension_service_->AddExtension(activity_log_extension.get()); // Loading a watchdog app means the activity log should log other extension // activities...
diff --git a/chrome/browser/extensions/activity_log/counting_policy.cc b/chrome/browser/extensions/activity_log/counting_policy.cc index 48362616..021acc7 100644 --- a/chrome/browser/extensions/activity_log/counting_policy.cc +++ b/chrome/browser/extensions/activity_log/counting_policy.cc
@@ -61,10 +61,10 @@ constexpr base::TimeDelta kCleaningDelay = base::TimeDelta::FromHours(12); // We should log the arguments to these API calls. Be careful when -// constructing this whitelist to not keep arguments that might compromise +// constructing this allowlist to not keep arguments that might compromise // privacy by logging too much data to the activity log. // -// TODO(mvrable): The contents of this whitelist should be reviewed and +// TODO(mvrable): The contents of this allowlist should be reviewed and // expanded as needed. struct ApiList { Action::ActionType type; @@ -173,7 +173,7 @@ url_table_("url_ids"), retention_time_(base::TimeDelta::FromHours(60)) { for (size_t i = 0; i < base::size(kAlwaysLog); i++) { - api_arg_whitelist_.insert( + api_arg_allowlist_.insert( std::make_pair(kAlwaysLog[i].type, kAlwaysLog[i].name)); } } @@ -205,7 +205,7 @@ if (activity_database()->is_db_valid()) { action = action->Clone(); Util::StripPrivacySensitiveFields(action); - Util::StripArguments(api_arg_whitelist_, action); + Util::StripArguments(api_arg_allowlist_, action); // If the current action falls on a different date than the ones in the // queue, flush the queue out now to prevent any false merging (actions
diff --git a/chrome/browser/extensions/activity_log/counting_policy.h b/chrome/browser/extensions/activity_log/counting_policy.h index ef0d8c2..d531fb60 100644 --- a/chrome/browser/extensions/activity_log/counting_policy.h +++ b/chrome/browser/extensions/activity_log/counting_policy.h
@@ -119,7 +119,7 @@ bool CleanStringTables(sql::Database* db); // API calls for which complete arguments should be logged. - Util::ApiSet api_arg_whitelist_; + Util::ApiSet api_arg_allowlist_; // Tables for mapping strings to integers for shrinking database storage // requirements. URLs are kept in a separate table from other strings to
diff --git a/chrome/browser/extensions/all_urls_apitest.cc b/chrome/browser/extensions/all_urls_apitest.cc index a4319d0..fd5160c 100644 --- a/chrome/browser/extensions/all_urls_apitest.cc +++ b/chrome/browser/extensions/all_urls_apitest.cc
@@ -34,13 +34,13 @@ const Extension* content_script() const { return content_script_.get(); } const Extension* execute_script() const { return execute_script_.get(); } - void WhitelistExtensions() { + void AllowlistExtensions() { ExtensionsClient::ScriptingAllowlist allowlist; allowlist.push_back(content_script_->id()); allowlist.push_back(execute_script_->id()); ExtensionsClient::Get()->SetScriptingAllowlist(allowlist); // Extensions will have certain permissions withheld at initialization if - // they aren't whitelisted, so we need to reload them. + // they aren't allowlisted, so we need to reload them. ExtensionTestMessageListener listener("execute: ready", false); extension_service()->ReloadExtension(content_script_->id()); extension_service()->ReloadExtension(execute_script_->id()); @@ -78,8 +78,8 @@ DISALLOW_COPY_AND_ASSIGN(AllUrlsApiTest); }; -IN_PROC_BROWSER_TEST_F(AllUrlsApiTest, WhitelistedExtension) { - WhitelistExtensions(); +IN_PROC_BROWSER_TEST_F(AllUrlsApiTest, AllowlistedExtension) { + AllowlistExtensions(); auto* bystander = LoadExtension( test_data_dir_.AppendASCII("all_urls").AppendASCII("bystander")); @@ -98,7 +98,7 @@ NavigateAndWait(test_url); } -// Test that an extension NOT whitelisted for scripting can ask for <all_urls> +// Test that an extension NOT allowlisted for scripting can ask for <all_urls> // and run scripts on non-restricted all pages. IN_PROC_BROWSER_TEST_F(AllUrlsApiTest, RegularExtensions) { // Now verify we can script a regular http page.
diff --git a/chrome/browser/extensions/api/activity_log_private/activity_log_private_api.cc b/chrome/browser/extensions/api/activity_log_private/activity_log_private_api.cc index 3cc1dec8..d310022 100644 --- a/chrome/browser/extensions/api/activity_log_private/activity_log_private_api.cc +++ b/chrome/browser/extensions/api/activity_log_private/activity_log_private_api.cc
@@ -78,7 +78,7 @@ } // static -bool ActivityLogAPI::IsExtensionWhitelisted(const std::string& extension_id) { +bool ActivityLogAPI::IsExtensionAllowlisted(const std::string& extension_id) { // TODO(devlin): Pass in a HashedExtensionId to avoid this conversion. return FeatureProvider::GetPermissionFeatures() ->GetFeature("activityLogPrivate")
diff --git a/chrome/browser/extensions/api/activity_log_private/activity_log_private_api.h b/chrome/browser/extensions/api/activity_log_private/activity_log_private_api.h index 07a3dbf..df2849b 100644 --- a/chrome/browser/extensions/api/activity_log_private/activity_log_private_api.h +++ b/chrome/browser/extensions/api/activity_log_private/activity_log_private_api.h
@@ -34,8 +34,8 @@ void Shutdown() override; - // Lookup whether the extension ID is whitelisted. - static bool IsExtensionWhitelisted(const std::string& extension_id); + // Lookup whether the extension ID is allowlisted. + static bool IsExtensionAllowlisted(const std::string& extension_id); private: friend class BrowserContextKeyedAPIFactory<ActivityLogAPI>;
diff --git a/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api_unittest.cc b/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api_unittest.cc index 4192568..5d996e6 100644 --- a/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api_unittest.cc +++ b/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api_unittest.cc
@@ -121,7 +121,7 @@ ASSERT_TRUE( GetCanOriginAssertAppIdResult(google_origin, gstatic_appid, &result)); EXPECT_TRUE(result); - // Not all gstatic urls are allowed, just those specifically whitelisted. + // Not all gstatic urls are allowed, just those specifically allowlisted. std::string gstatic_otherurl("https://www.gstatic.com/foobar"); ASSERT_TRUE( GetCanOriginAssertAppIdResult(google_origin, gstatic_otherurl, &result));
diff --git a/chrome/browser/extensions/api/developer_private/developer_private_api.cc b/chrome/browser/extensions/api/developer_private/developer_private_api.cc index 54a6b60..1d042b9 100644 --- a/chrome/browser/extensions/api/developer_private/developer_private_api.cc +++ b/chrome/browser/extensions/api/developer_private/developer_private_api.cc
@@ -307,7 +307,7 @@ prefs->GetBoolean(prefs::kExtensionsUIDeveloperMode); info->can_load_unpacked = ExtensionManagementFactory::GetForBrowserContext(profile) - ->HasWhitelistedExtension(); + ->HasAllowlistedExtension(); return info; }
diff --git a/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc b/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc index 67150f91..ad26d5d 100644 --- a/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc +++ b/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc
@@ -1247,7 +1247,7 @@ EXPECT_FALSE( ExtensionManagementFactory::GetForBrowserContext(browser_context()) - ->HasWhitelistedExtension()); + ->HasAllowlistedExtension()); auto info = DeveloperPrivateAPI::CreateProfileInfo(testing_profile()); @@ -1262,7 +1262,7 @@ } TEST_F(DeveloperPrivateApiUnitTest, - LoadUnpackedWorksWithBlocklistingPolicyAlongWhitelistingPolicy) { + LoadUnpackedWorksWithBlocklistingPolicyAlongAllowlistingPolicy) { std::unique_ptr<content::WebContents> web_contents( content::WebContentsTester::CreateTestWebContents(profile(), nullptr)); @@ -1282,7 +1282,7 @@ EXPECT_TRUE( ExtensionManagementFactory::GetForBrowserContext(browser_context()) - ->HasWhitelistedExtension()); + ->HasAllowlistedExtension()); auto info = DeveloperPrivateAPI::CreateProfileInfo(testing_profile());
diff --git a/chrome/browser/extensions/api/downloads/downloads_api.cc b/chrome/browser/extensions/api/downloads/downloads_api.cc index a2d9480..9c28cf3 100644 --- a/chrome/browser/extensions/api/downloads/downloads_api.cc +++ b/chrome/browser/extensions/api/downloads/downloads_api.cc
@@ -144,7 +144,7 @@ const char kDangerSafe[] = "safe"; const char kDangerUncommon[] = "uncommon"; const char kDangerUnwanted[] = "unwanted"; -const char kDangerWhitelistedByPolicy[] = "whitelistedByPolicy"; +const char kDangerAllowlistedByPolicy[] = "allowlistedByPolicy"; const char kDangerAsyncScanning[] = "asyncScanning"; const char kDangerPasswordProtected[] = "passwordProtected"; const char kDangerTooLarge[] = "blockedTooLarge"; @@ -185,8 +185,6 @@ const char kFinalUrlKey[] = "finalUrl"; const char kFinalUrlRegexKey[] = "finalUrlRegex"; -// Note: Any change to the danger type strings, should be accompanied by a -// corresponding change to downloads.json. const char* const kDangerStrings[] = {kDangerSafe, kDangerFile, kDangerUrl, @@ -196,7 +194,7 @@ kDangerAccepted, kDangerHost, kDangerUnwanted, - kDangerWhitelistedByPolicy, + kDangerAllowlistedByPolicy, kDangerAsyncScanning, kDangerPasswordProtected, kDangerTooLarge, @@ -209,8 +207,6 @@ static_assert(base::size(kDangerStrings) == download::DOWNLOAD_DANGER_TYPE_MAX, "kDangerStrings should have DOWNLOAD_DANGER_TYPE_MAX elements"); -// Note: Any change to the state strings, should be accompanied by a -// corresponding change to downloads.json. const char* const kStateStrings[] = { kStateInProgress, kStateComplete,
diff --git a/chrome/browser/extensions/api/enterprise_platform_keys_private/enterprise_platform_keys_private_api_unittest.cc b/chrome/browser/extensions/api/enterprise_platform_keys_private/enterprise_platform_keys_private_api_unittest.cc index dac2524..3230c6b 100644 --- a/chrome/browser/extensions/api/enterprise_platform_keys_private/enterprise_platform_keys_private_api_unittest.cc +++ b/chrome/browser/extensions/api/enterprise_platform_keys_private/enterprise_platform_keys_private_api_unittest.cc
@@ -90,7 +90,7 @@ // Base 64 encoding of 'challenge'. const char EPKPChallengeMachineKeyTest::kFuncArgs[] = "[\"Y2hhbGxlbmdl\"]"; -TEST_F(EPKPChallengeMachineKeyTest, ExtensionNotAllowed) { +TEST_F(EPKPChallengeMachineKeyTest, ExtensionNotAllowlisted) { base::ListValue empty_allowlist; prefs_->Set(prefs::kAttestationExtensionAllowlist, empty_allowlist); @@ -130,7 +130,7 @@ // Base 64 encoding of 'challenge', register_key required. const char EPKPChallengeUserKeyTest::kFuncArgs[] = "[\"Y2hhbGxlbmdl\", true]"; -TEST_F(EPKPChallengeUserKeyTest, ExtensionNotAllowed) { +TEST_F(EPKPChallengeUserKeyTest, ExtensionNotAllowlisted) { base::ListValue empty_allowlist; prefs_->Set(prefs::kAttestationExtensionAllowlist, empty_allowlist);
diff --git a/chrome/browser/extensions/api/file_system/chrome_file_system_delegate.cc b/chrome/browser/extensions/api/file_system/chrome_file_system_delegate.cc index 9bd66410..4b3763f 100644 --- a/chrome/browser/extensions/api/file_system/chrome_file_system_delegate.cc +++ b/chrome/browser/extensions/api/file_system/chrome_file_system_delegate.cc
@@ -267,7 +267,7 @@ return false; // TODO(asargent/benwells) - As a short term remediation for - // crbug.com/179010 we're adding the ability for a whitelisted extension to + // crbug.com/179010 we're adding the ability for a allowlisted extension to // use this API since chrome.fileBrowserHandler.selectFile is ChromeOS-only. // Eventually we'd like a better solution and likely this code will go back // to being platform-app only. @@ -276,7 +276,7 @@ // platform apps cannot open the file picker from a background page. // TODO(michaelpg): As a workaround for https://crbug.com/736930, allow this // to work from a background page for non-platform apps (which, in practice, - // is restricted to whitelisted extensions). + // is restricted to allowlisted extensions). if (extension->is_platform_app() && !AppWindowRegistry::Get(extension_function->browser_context()) ->GetAppWindowForWebContents(web_contents)) { @@ -323,7 +323,7 @@ content::RenderFrameHost* render_frame_host, const Extension& extension) { // Only kiosk apps in kiosk sessions can use this API. - // Additionally it is enabled for whitelisted component extensions and apps. + // Additionally it is enabled for allowlisted component extensions and apps. ConsentProviderDelegate consent_provider_delegate( Profile::FromBrowserContext(browser_context)); return ConsentProvider(&consent_provider_delegate)
diff --git a/chrome/browser/extensions/api/file_system/consent_provider.cc b/chrome/browser/extensions/api/file_system/consent_provider.cc index 9d4e9b4b..ca24268e 100644 --- a/chrome/browser/extensions/api/file_system/consent_provider.cc +++ b/chrome/browser/extensions/api/file_system/consent_provider.cc
@@ -29,9 +29,9 @@ namespace { -// List of whitelisted component apps and extensions by their ids for +// List of allowlisted component apps and extensions by their ids for // chrome.fileSystem.requestFileSystem. -const char* const kRequestFileSystemComponentWhitelist[] = { +const char* const kRequestFileSystemComponentAllowlist[] = { file_manager::kFileManagerAppId, file_manager::kVideoPlayerAppId, file_manager::kGalleryAppId, file_manager::kAudioPlayerAppId, file_manager::kImageLoaderExtensionId, file_manager::kZipArchiverId, @@ -93,15 +93,15 @@ ConsentCallback callback) { DCHECK(IsGrantableForVolume(extension, volume)); - // If a whitelisted component, then no need to ask or inform the user. + // If a allowlisted component, then no need to ask or inform the user. if (extension.location() == Manifest::COMPONENT && - delegate_->IsWhitelistedComponent(extension)) { + delegate_->IsAllowlistedComponent(extension)) { base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::BindOnce(std::move(callback), CONSENT_GRANTED)); return; } - // If a whitelisted app or extensions to access Downloads folder, then no + // If a allowlisted app or extensions to access Downloads folder, then no // need to ask or inform the user. if (volume.get() && volume->type() == file_manager::VOLUME_TYPE_DOWNLOADS_DIRECTORY && @@ -135,21 +135,21 @@ FileSystemDelegate::GrantVolumesMode ConsentProvider::GetGrantVolumesMode( const Extension& extension) { - const bool is_whitelisted_component = - delegate_->IsWhitelistedComponent(extension); + const bool is_allowlisted_component = + delegate_->IsAllowlistedComponent(extension); const bool is_running_in_kiosk_session = KioskModeInfo::IsKioskOnly(&extension) && user_manager::UserManager::Get()->IsLoggedInAsKioskApp(); - if (is_whitelisted_component || is_running_in_kiosk_session) { + if (is_allowlisted_component || is_running_in_kiosk_session) { return FileSystemDelegate::kGrantAll; } - const bool is_whitelisted_non_component = + const bool is_allowlisted_non_component = delegate_->HasRequestDownloadsPermission(extension); - return is_whitelisted_non_component ? FileSystemDelegate::kGrantPerVolume + return is_allowlisted_non_component ? FileSystemDelegate::kGrantPerVolume : FileSystemDelegate::kGrantNone; } @@ -245,10 +245,10 @@ app_info.was_auto_launched_with_zero_delay; } -bool ConsentProviderDelegate::IsWhitelistedComponent( +bool ConsentProviderDelegate::IsAllowlistedComponent( const Extension& extension) { - for (auto* whitelisted_id : kRequestFileSystemComponentWhitelist) { - if (extension.id().compare(whitelisted_id) == 0) + for (auto* allowlisted_id : kRequestFileSystemComponentAllowlist) { + if (extension.id().compare(allowlisted_id) == 0) return true; } return false;
diff --git a/chrome/browser/extensions/api/file_system/consent_provider.h b/chrome/browser/extensions/api/file_system/consent_provider.h index 2904c90..722aacf 100644 --- a/chrome/browser/extensions/api/file_system/consent_provider.h +++ b/chrome/browser/extensions/api/file_system/consent_provider.h
@@ -29,7 +29,7 @@ namespace file_system_api { // Requests consent for the chrome.fileSystem.requestFileSystem() method. -// Interaction with UI and environmental checks (kiosk mode, whitelist) are +// Interaction with UI and environmental checks (kiosk mode, allowlist) are // provided by a delegate: ConsentProviderDelegate. For testing, it is // TestingConsentProviderDelegate. // This class may post callbacks given to it, but does not asynchronously call @@ -61,8 +61,8 @@ // Checks if the extension was launched in auto-launch kiosk mode. virtual bool IsAutoLaunched(const Extension& extension) = 0; - // Checks if the extension is a whitelisted component extension or app. - virtual bool IsWhitelistedComponent(const Extension& extension) = 0; + // Checks if the extension is a allowlisted component extension or app. + virtual bool IsAllowlistedComponent(const Extension& extension) = 0; // Checks if the extension has the permission to access Downloads. virtual bool HasRequestDownloadsPermission(const Extension& extension) = 0; @@ -95,7 +95,7 @@ DISALLOW_COPY_AND_ASSIGN(ConsentProvider); }; -// Handles interaction with user as well as environment checks (whitelists, +// Handles interaction with user as well as environment checks (allowlists, // context of running extensions) for ConsentProvider. class ConsentProviderDelegate : public ConsentProvider::DelegateInterface { public: @@ -120,7 +120,7 @@ const base::WeakPtr<file_manager::Volume>& volume, bool writable) override; bool IsAutoLaunched(const Extension& extension) override; - bool IsWhitelistedComponent(const Extension& extension) override; + bool IsAllowlistedComponent(const Extension& extension) override; bool HasRequestDownloadsPermission(const Extension& extension) override; Profile* const profile_;
diff --git a/chrome/browser/extensions/api/file_system/consent_provider_unittest.cc b/chrome/browser/extensions/api/file_system/consent_provider_unittest.cc index 22c2c7f..1c6b0db7 100644 --- a/chrome/browser/extensions/api/file_system/consent_provider_unittest.cc +++ b/chrome/browser/extensions/api/file_system/consent_provider_unittest.cc
@@ -52,9 +52,9 @@ is_auto_launched_ = is_auto_launched; } - // Sets a whitelisted components list with a single id. - void SetComponentWhitelist(const std::string& extension_id) { - whitelisted_component_id_ = extension_id; + // Sets an allowlisted components list with a single id. + void SetComponentAllowlist(const std::string& extension_id) { + allowlisted_component_id_ = extension_id; } int show_dialog_counter() const { return show_dialog_counter_; } @@ -81,8 +81,8 @@ return is_auto_launched_; } - bool IsWhitelistedComponent(const extensions::Extension& extension) override { - return whitelisted_component_id_.compare(extension.id()) == 0; + bool IsAllowlistedComponent(const extensions::Extension& extension) override { + return allowlisted_component_id_.compare(extension.id()) == 0; } bool HasRequestDownloadsPermission(const Extension& extension) override { @@ -94,7 +94,7 @@ int show_notification_counter_; ui::DialogButton dialog_button_; bool is_auto_launched_; - std::string whitelisted_component_id_; + std::string allowlisted_component_id_; DISALLOW_COPY_AND_ASSIGN(TestingConsentProviderDelegate); }; @@ -142,7 +142,7 @@ }; TEST_F(FileSystemApiConsentProviderTest, ForNonKioskApps) { - // Component apps are not granted unless they are whitelisted. + // Component apps are not granted unless they are allowlisted. { scoped_refptr<const Extension> component_extension( ExtensionBuilder("Test", ExtensionBuilder::Type::PLATFORM_APP) @@ -154,21 +154,21 @@ FileSystemDelegate::kGrantNone); } - // Whitelisted component apps are instantly granted access without asking + // Allowlisted component apps are instantly granted access without asking // user. { - scoped_refptr<const Extension> whitelisted_component_extension( + scoped_refptr<const Extension> allowlisted_component_extension( ExtensionBuilder("Test", ExtensionBuilder::Type::PLATFORM_APP) .SetLocation(Manifest::COMPONENT) .Build()); TestingConsentProviderDelegate delegate; - delegate.SetComponentWhitelist(whitelisted_component_extension->id()); + delegate.SetComponentAllowlist(allowlisted_component_extension->id()); ConsentProvider provider(&delegate); - EXPECT_EQ(provider.GetGrantVolumesMode(*whitelisted_component_extension), + EXPECT_EQ(provider.GetGrantVolumesMode(*allowlisted_component_extension), FileSystemDelegate::kGrantAll); ConsentProvider::Consent result = ConsentProvider::CONSENT_IMPOSSIBLE; - provider.RequestConsent(*whitelisted_component_extension.get(), nullptr, + provider.RequestConsent(*allowlisted_component_extension.get(), nullptr, volume_, true /* writable */, base::BindOnce(&OnConsentReceived, &result)); base::RunLoop().RunUntilIdle(); @@ -178,25 +178,25 @@ EXPECT_EQ(ConsentProvider::CONSENT_GRANTED, result); } - // Whitelisted extensions are instantly granted downloads access without + // Allowlisted extensions are instantly granted downloads access without // asking user. { - scoped_refptr<const Extension> whitelisted_extension( + scoped_refptr<const Extension> allowlisted_extension( ExtensionBuilder("Test", ExtensionBuilder::Type::PLATFORM_APP) .SetLocation(Manifest::COMPONENT) .AddPermission("fileSystem.requestDownloads") .Build()); TestingConsentProviderDelegate delegate; ConsentProvider provider(&delegate); - EXPECT_EQ(provider.GetGrantVolumesMode(*whitelisted_extension), + EXPECT_EQ(provider.GetGrantVolumesMode(*allowlisted_extension), FileSystemDelegate::kGrantPerVolume); EXPECT_FALSE( - provider.IsGrantableForVolume(*whitelisted_extension, volume_)); - EXPECT_TRUE(provider.IsGrantableForVolume(*whitelisted_extension, + provider.IsGrantableForVolume(*allowlisted_extension, volume_)); + EXPECT_TRUE(provider.IsGrantableForVolume(*allowlisted_extension, download_volume_->AsWeakPtr())); ConsentProvider::Consent result = ConsentProvider::CONSENT_IMPOSSIBLE; - provider.RequestConsent(*whitelisted_extension.get(), nullptr, + provider.RequestConsent(*allowlisted_extension.get(), nullptr, download_volume_->AsWeakPtr(), true /* writable */, base::BindRepeating(&OnConsentReceived, &result)); base::RunLoop().RunUntilIdle();
diff --git a/chrome/browser/extensions/api/file_system/file_system_apitest_chromeos.cc b/chrome/browser/extensions/api/file_system/file_system_apitest_chromeos.cc index 91c1abf9..9ee993c 100644 --- a/chrome/browser/extensions/api/file_system/file_system_apitest_chromeos.cc +++ b/chrome/browser/extensions/api/file_system/file_system_apitest_chromeos.cc
@@ -502,7 +502,7 @@ } IN_PROC_BROWSER_TEST_F(FileSystemApiTestForRequestFileSystem, - WhitelistedComponent) { + AllowlistedComponent) { ScopedSkipRequestFileSystemDialog dialog_skipper(ui::DIALOG_BUTTON_CANCEL); ASSERT_TRUE(RunPlatformAppTestWithFlags( "api_test/file_system/request_file_system_whitelisted_component", @@ -511,7 +511,7 @@ } IN_PROC_BROWSER_TEST_F(FileSystemApiTestForRequestFileSystem, - NotWhitelistedComponent) { + NotAllowlistedComponent) { ScopedSkipRequestFileSystemDialog dialog_skipper(ui::DIALOG_BUTTON_OK); ASSERT_TRUE(RunPlatformAppTestWithFlags( "api_test/file_system/request_file_system_not_whitelisted_component", @@ -547,7 +547,7 @@ } IN_PROC_BROWSER_TEST_F(FileSystemApiTestForRequestFileSystem, - WhitelistedExtensionForDownloads) { + AllowlistedExtensionForDownloads) { ScopedSkipRequestFileSystemDialog dialog_skipper(ui::DIALOG_BUTTON_CANCEL); ASSERT_TRUE(RunPlatformAppTestWithFlags( "api_test/file_system/request_downloads_whitelisted_extension", kFlagNone,
diff --git a/chrome/browser/extensions/api/identity/identity_apitest.cc b/chrome/browser/extensions/api/identity/identity_apitest.cc index f16c161c..35829f5 100644 --- a/chrome/browser/extensions/api/identity/identity_apitest.cc +++ b/chrome/browser/extensions/api/identity/identity_apitest.cc
@@ -2962,9 +2962,9 @@ chromeos::MockUserManager* user_manager_; }; -IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionPublicSessionTest, NonWhitelisted) { +IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionPublicSessionTest, NonAllowlisted) { // GetAuthToken() should return UserNotSignedIn in public sessions for - // non-whitelisted extensions. + // non-allowlisted extensions. user_manager::ScopedUserManager user_manager_enabler( base::WrapUnique(user_manager_)); scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); @@ -2976,11 +2976,11 @@ EXPECT_FALSE(func->scope_ui_shown()); histogram_tester()->ExpectUniqueSample( kGetAuthTokenResultHistogramName, - IdentityGetAuthTokenError::State::kNotWhitelistedInPublicSession, 1); + IdentityGetAuthTokenError::State::kNotAllowlistedInPublicSession, 1); } -IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionPublicSessionTest, Whitelisted) { - // GetAuthToken() should return a token for whitelisted extensions. +IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionPublicSessionTest, Allowlisted) { + // GetAuthToken() should return a token for allowlisted extensions. user_manager::ScopedUserManager user_manager_enabler( base::WrapUnique(user_manager_)); scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction());
diff --git a/chrome/browser/extensions/api/identity/identity_get_auth_token_error.cc b/chrome/browser/extensions/api/identity/identity_get_auth_token_error.cc index 7f02651..c2028c8 100644 --- a/chrome/browser/extensions/api/identity/identity_get_auth_token_error.cc +++ b/chrome/browser/extensions/api/identity/identity_get_auth_token_error.cc
@@ -80,7 +80,7 @@ case State::kRemoteConsentFlowRejected: return identity_constants::kUserRejected; case State::kUserNotSignedIn: - case State::kNotWhitelistedInPublicSession: + case State::kNotAllowlistedInPublicSession: case State::kSignInFailed: case State::kRemoteConsentUserNotSignedIn: return identity_constants::kUserNotSignedIn;
diff --git a/chrome/browser/extensions/api/identity/identity_get_auth_token_error.h b/chrome/browser/extensions/api/identity/identity_get_auth_token_error.h index e03a89ce..e72554b 100644 --- a/chrome/browser/extensions/api/identity/identity_get_auth_token_error.h +++ b/chrome/browser/extensions/api/identity/identity_get_auth_token_error.h
@@ -31,7 +31,7 @@ kGaiaFlowRejected = 12, kRemoteConsentFlowRejected = 13, kUserNotSignedIn = 14, - kNotWhitelistedInPublicSession = 15, + kNotAllowlistedInPublicSession = 15, kSignInFailed = 16, kRemoteConsentUserNotSignedIn = 17, kUserNonPrimary = 18,
diff --git a/chrome/browser/extensions/api/identity/identity_get_auth_token_function.cc b/chrome/browser/extensions/api/identity/identity_get_auth_token_function.cc index 22b484d..ac9c6143 100644 --- a/chrome/browser/extensions/api/identity/identity_get_auth_token_function.cc +++ b/chrome/browser/extensions/api/identity/identity_get_auth_token_function.cc
@@ -261,9 +261,9 @@ user_manager::UserManager::Get()->IsLoggedInAsPublicAccount(); if (connector->IsEnterpriseManaged() && (is_kiosk || is_public_session)) { - if (is_public_session && !IsOriginWhitelistedInPublicSession()) { + if (is_public_session && !IsOriginAllowlistedInPublicSession()) { CompleteFunctionWithError(IdentityGetAuthTokenError( - IdentityGetAuthTokenError::State::kNotWhitelistedInPublicSession)); + IdentityGetAuthTokenError::State::kNotAllowlistedInPublicSession)); return; } @@ -490,10 +490,10 @@ #if defined(OS_CHROMEOS) // Always force minting token for ChromeOS kiosk app and public session. if (user_manager::UserManager::Get()->IsLoggedInAsPublicAccount() && - !IsOriginWhitelistedInPublicSession()) { + !IsOriginAllowlistedInPublicSession()) { CompleteFunctionWithError( IdentityGetAuthTokenError(IdentityGetAuthTokenError::State:: - kNotWhitelistedInPublicSession)); + kNotAllowlistedInPublicSession)); return; } @@ -513,7 +513,7 @@ #endif if (oauth2_info.auto_approve) - // oauth2_info.auto_approve is protected by a whitelist in + // oauth2_info.auto_approve is protected by an allowlist in // _manifest_features.json hence only selected extensions take // advantage of forcefully minting the token. gaia_mint_token_mode_ = OAuth2MintTokenFlow::MODE_MINT_TOKEN_FORCE; @@ -951,7 +951,7 @@ device_access_token_request_ = service->StartAccessTokenRequest(scopes, this); } -bool IdentityGetAuthTokenFunction::IsOriginWhitelistedInPublicSession() { +bool IdentityGetAuthTokenFunction::IsOriginAllowlistedInPublicSession() { DCHECK(extension()); GURL extension_url = extension()->url(); for (size_t i = 0; i < base::size(kPublicSessionAllowedOrigins); i++) {
diff --git a/chrome/browser/extensions/api/identity/identity_get_auth_token_function.h b/chrome/browser/extensions/api/identity/identity_get_auth_token_function.h index 50ae0ae7..164dc03 100644 --- a/chrome/browser/extensions/api/identity/identity_get_auth_token_function.h +++ b/chrome/browser/extensions/api/identity/identity_get_auth_token_function.h
@@ -206,10 +206,10 @@ // Starts a login access token request for device robot account. This method // will be called only in Chrome OS for: // 1. Enterprise kiosk mode. - // 2. Whitelisted first party apps in public session. + // 2. Allowlisted first party apps in public session. virtual void StartDeviceAccessTokenRequest(); - bool IsOriginWhitelistedInPublicSession(); + bool IsOriginAllowlistedInPublicSession(); #endif // Methods for invoking UI. Overridable for testing.
diff --git a/chrome/browser/extensions/api/image_writer_private/write_from_url_operation.cc b/chrome/browser/extensions/api/image_writer_private/write_from_url_operation.cc index efcab34..9fba19b0 100644 --- a/chrome/browser/extensions/api/image_writer_private/write_from_url_operation.cc +++ b/chrome/browser/extensions/api/image_writer_private/write_from_url_operation.cc
@@ -103,7 +103,7 @@ cookies_store: "user" setting: "This feature cannot be disabled by settings, it can only be used " - "by whitelisted apps/extension." + "by allowlisted apps/extension." policy_exception_justification: "Not implemented, considered not useful." })");
diff --git a/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc b/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc index 5cc290e..d7108a5 100644 --- a/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc +++ b/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc
@@ -47,6 +47,7 @@ #if defined(OS_CHROMEOS) #include "chrome/grit/generated_resources.h" +#include "chromeos/constants/chromeos_features.h" #include "ui/base/ime/chromeos/component_extension_ime_manager.h" #include "ui/base/ime/chromeos/extension_ime_util.h" #include "ui/base/ime/chromeos/input_method_manager.h" @@ -133,6 +134,12 @@ } } } + if (base::FeatureList::IsEnabled( + chromeos::features::kLanguageSettingsUpdate)) { + for (const auto& input_method_id : available_component_imes) { + component_ime_list.push_back(input_method_id); + } + } return component_ime_list; }
diff --git a/chrome/browser/extensions/api/mdns/mdns_api.cc b/chrome/browser/extensions/api/mdns/mdns_api.cc index 1656dfd9..f6d877ed 100644 --- a/chrome/browser/extensions/api/mdns/mdns_api.cc +++ b/chrome/browser/extensions/api/mdns/mdns_api.cc
@@ -23,12 +23,12 @@ namespace { -// Whitelisted mDNS service types. +// Allowlisted mDNS service types. const char kCastServiceType[] = "_googlecast._tcp.local"; const char kPrivetServiceType[] = "_privet._tcp.local"; const char kTestServiceType[] = "_testing._tcp.local"; -bool IsServiceTypeWhitelisted(const std::string& service_type) { +bool IsServiceTypeAllowlisted(const std::string& service_type) { return service_type == kCastServiceType || service_type == kPrivetServiceType || service_type == kTestServiceType; @@ -179,7 +179,7 @@ // TODO(justinlin): To avoid having listeners without filters getting all // events, modify API to have this event require filters. - // TODO(reddaly): If event isn't on whitelist, ensure it does not get + // TODO(reddaly): If event isn't on allowlist, ensure it does not get // broadcast to extensions. extensions::EventRouter::Get(browser_context_) ->BroadcastEvent(std::move(event)); @@ -198,7 +198,7 @@ ->enabled_extensions() .GetByID(extension_id); return (extension && (extension->is_platform_app() || - IsServiceTypeWhitelisted(service_type))); + IsServiceTypeAllowlisted(service_type))); } void MDnsAPI::GetValidOnServiceListListeners( @@ -218,7 +218,7 @@ continue; // Don't listen for services associated only with disabled extensions - // or non-whitelisted, non-platform-app extensions. + // or non-allowlisted, non-platform-app extensions. if (!IsMDnsAllowed(listener->extension_id(), service_type)) continue;
diff --git a/chrome/browser/extensions/api/mdns/mdns_api_unittest.cc b/chrome/browser/extensions/api/mdns/mdns_api_unittest.cc index 8c8eb9c..f1f2e5d0 100644 --- a/chrome/browser/extensions/api/mdns/mdns_api_unittest.cc +++ b/chrome/browser/extensions/api/mdns/mdns_api_unittest.cc
@@ -346,20 +346,20 @@ dns_sd_registry()->DispatchMDnsEvent("_testing._tcp.local", services); } -TEST_F(MDnsAPITest, ExtensionRespectsWhitelist) { +TEST_F(MDnsAPITest, ExtensionRespectsAllowlist) { scoped_refptr<extensions::Extension> extension = CreateExtension("Dinosaur networker", false, kExtId); ExtensionRegistry::Get(browser_context())->AddEnabled(extension); ASSERT_EQ(Manifest::TYPE_EXTENSION, extension->GetType()); - // There is a whitelist of mdns service types extensions may access, which - // includes "_testing._tcp.local" and exludes "_trex._tcp.local" + // There is a allowlist of mdns service types extensions may access, which + // includes "_testing._tcp.local" and excludes "_trex._tcp.local" { base::DictionaryValue filter; filter.SetString(kEventFilterServiceTypeKey, "_trex._tcp.local"); ASSERT_TRUE(dns_sd_registry()); - // Test that the extension is able to listen to a non-whitelisted service + // Test that the extension is able to listen to a non-allowlisted service EXPECT_CALL(*dns_sd_registry(), RegisterDnsSdListener("_trex._tcp.local")) .Times(0); EventRouter::Get(browser_context()) @@ -379,7 +379,7 @@ filter.SetString(kEventFilterServiceTypeKey, "_testing._tcp.local"); ASSERT_TRUE(dns_sd_registry()); - // Test that the extension is able to listen to a whitelisted service + // Test that the extension is able to listen to a allowlisted service EXPECT_CALL(*dns_sd_registry(), RegisterDnsSdListener("_testing._tcp.local")); EventRouter::Get(browser_context()) @@ -396,7 +396,7 @@ } } -TEST_F(MDnsAPITest, PlatformAppsNotSubjectToWhitelist) { +TEST_F(MDnsAPITest, PlatformAppsNotSubjectToAllowlist) { scoped_refptr<extensions::Extension> extension = CreateExtension("Dinosaur networker", true, kExtId); ExtensionRegistry::Get(browser_context())->AddEnabled(extension); @@ -406,7 +406,7 @@ filter.SetString(kEventFilterServiceTypeKey, "_trex._tcp.local"); ASSERT_TRUE(dns_sd_registry()); - // Test that the extension is able to listen to a non-whitelisted service + // Test that the extension is able to listen to a non-allowlisted service EXPECT_CALL(*dns_sd_registry(), RegisterDnsSdListener("_trex._tcp.local")); EventRouter::Get(browser_context())
diff --git a/chrome/browser/extensions/api/search/search_api.cc b/chrome/browser/extensions/api/search/search_api.cc index c728ee4..3a250539 100644 --- a/chrome/browser/extensions/api/search/search_api.cc +++ b/chrome/browser/extensions/api/search/search_api.cc
@@ -34,13 +34,13 @@ EXTENSION_FUNCTION_VALIDATE(params); // Convenience for input params. - const std::string& search = params->query_info.search; + const std::string& text = params->query_info.text; const std::unique_ptr<int>& tab_id = params->query_info.tab_id; Disposition disposition = params->query_info.disposition; // Simple validation of input params. - if (search.empty()) { - return RespondNow(Error("Empty search parameter.")); + if (text.empty()) { + return RespondNow(Error("Empty text parameter.")); } if (tab_id.get() && disposition != Disposition::DISPOSITION_NONE) { return RespondNow(Error("Cannot set both 'disposition' and 'tabId'.")); @@ -94,7 +94,7 @@ TemplateURLServiceFactory::GetForProfile(profile); DCHECK(url_service); GURL url = - GetDefaultSearchURLForSearchTerms(url_service, base::UTF8ToUTF16(search)); + GetDefaultSearchURLForSearchTerms(url_service, base::UTF8ToUTF16(text)); if (!url.is_valid()) { return RespondNow(Error("Missing default search provider.")); }
diff --git a/chrome/browser/extensions/api/search/search_api_unittest.cc b/chrome/browser/extensions/api/search/search_api_unittest.cc index 955fe95..7f4d4af5 100644 --- a/chrome/browser/extensions/api/search/search_api_unittest.cc +++ b/chrome/browser/extensions/api/search/search_api_unittest.cc
@@ -125,26 +125,26 @@ // Test for error if search field is empty string. TEST_F(SearchApiUnitTest, QueryEmpty) { - RunFunctionAndExpectError(R"([{"search": ""}])", "Empty search parameter."); + RunFunctionAndExpectError(R"([{"text": ""}])", "Empty text parameter."); } // Test for error if both disposition and tabId are populated. TEST_F(SearchApiUnitTest, DispositionAndTabIDValid) { RunFunctionAndExpectError( - R"([{"search": "1", "disposition": "NEW_TAB", "tabId": 1}])", + R"([{"text": "1", "disposition": "NEW_TAB", "tabId": 1}])", "Cannot set both 'disposition' and 'tabId'."); } // Test for error if both disposition and tabId are populated. TEST_F(SearchApiUnitTest, InvalidTabId) { - RunFunctionAndExpectError(R"([{"search": "1", "tabId": -1}])", + RunFunctionAndExpectError(R"([{"text": "1", "tabId": -1}])", "No tab with id: -1."); } // Test for error if missing browser context. TEST_F(SearchApiUnitTest, NoActiveBrowser) { auto result = api_test_utils::RunFunctionAndReturnError( - function(), R"([{"search": "1"}])", nullptr); + function(), R"([{"text": "1"}])", nullptr); EXPECT_EQ("No active browser.", result); }
diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chrome/browser/extensions/api/settings_private/prefs_util.cc index d17b2f6..6672402 100644 --- a/chrome/browser/extensions/api/settings_private/prefs_util.cc +++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc
@@ -148,594 +148,594 @@ using CrosSettings = chromeos::CrosSettings; #endif -const PrefsUtil::TypedPrefMap& PrefsUtil::GetWhitelistedKeys() { - static PrefsUtil::TypedPrefMap* s_whitelist = nullptr; - if (s_whitelist) - return *s_whitelist; - s_whitelist = new PrefsUtil::TypedPrefMap(); +const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() { + static PrefsUtil::TypedPrefMap* s_allowlist = nullptr; + if (s_allowlist) + return *s_allowlist; + s_allowlist = new PrefsUtil::TypedPrefMap(); // Miscellaneous - (*s_whitelist)[::embedder_support::kAlternateErrorPagesEnabled] = + (*s_allowlist)[::embedder_support::kAlternateErrorPagesEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[autofill::prefs::kAutofillProfileEnabled] = + (*s_allowlist)[autofill::prefs::kAutofillProfileEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[autofill::prefs::kAutofillCreditCardEnabled] = + (*s_allowlist)[autofill::prefs::kAutofillCreditCardEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[autofill::prefs::kAutofillCreditCardFidoAuthEnabled] = + (*s_allowlist)[autofill::prefs::kAutofillCreditCardFidoAuthEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[payments::kCanMakePaymentEnabled] = + (*s_allowlist)[payments::kCanMakePaymentEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[bookmarks::prefs::kShowBookmarkBar] = + (*s_allowlist)[bookmarks::prefs::kShowBookmarkBar] = settings_api::PrefType::PREF_TYPE_BOOLEAN; #if defined(OS_LINUX) && !defined(OS_CHROMEOS) - (*s_whitelist)[::prefs::kUseCustomChromeFrame] = + (*s_allowlist)[::prefs::kUseCustomChromeFrame] = settings_api::PrefType::PREF_TYPE_BOOLEAN; #endif - (*s_whitelist)[::prefs::kShowHomeButton] = + (*s_allowlist)[::prefs::kShowHomeButton] = settings_api::PrefType::PREF_TYPE_BOOLEAN; // Appearance settings. - (*s_whitelist)[::prefs::kCurrentThemeID] = + (*s_allowlist)[::prefs::kCurrentThemeID] = settings_api::PrefType::PREF_TYPE_STRING; #if defined(OS_LINUX) && !defined(OS_CHROMEOS) - (*s_whitelist)[::prefs::kUsesSystemTheme] = + (*s_allowlist)[::prefs::kUsesSystemTheme] = settings_api::PrefType::PREF_TYPE_BOOLEAN; #endif - (*s_whitelist)[::prefs::kHomePage] = settings_api::PrefType::PREF_TYPE_URL; - (*s_whitelist)[::prefs::kHomePageIsNewTabPage] = + (*s_allowlist)[::prefs::kHomePage] = settings_api::PrefType::PREF_TYPE_URL; + (*s_allowlist)[::prefs::kHomePageIsNewTabPage] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kWebKitDefaultFixedFontSize] = + (*s_allowlist)[::prefs::kWebKitDefaultFixedFontSize] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[::prefs::kWebKitDefaultFontSize] = + (*s_allowlist)[::prefs::kWebKitDefaultFontSize] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[::prefs::kWebKitMinimumFontSize] = + (*s_allowlist)[::prefs::kWebKitMinimumFontSize] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[::prefs::kWebKitFixedFontFamily] = + (*s_allowlist)[::prefs::kWebKitFixedFontFamily] = settings_api::PrefType::PREF_TYPE_STRING; - (*s_whitelist)[::prefs::kWebKitSansSerifFontFamily] = + (*s_allowlist)[::prefs::kWebKitSansSerifFontFamily] = settings_api::PrefType::PREF_TYPE_STRING; - (*s_whitelist)[::prefs::kWebKitSerifFontFamily] = + (*s_allowlist)[::prefs::kWebKitSerifFontFamily] = settings_api::PrefType::PREF_TYPE_STRING; - (*s_whitelist)[::prefs::kWebKitStandardFontFamily] = + (*s_allowlist)[::prefs::kWebKitStandardFontFamily] = settings_api::PrefType::PREF_TYPE_STRING; - (*s_whitelist)[::prefs::kDefaultCharset] = + (*s_allowlist)[::prefs::kDefaultCharset] = settings_api::PrefType::PREF_TYPE_STRING; #if defined(OS_MAC) - (*s_whitelist)[::prefs::kWebkitTabsToLinks] = + (*s_allowlist)[::prefs::kWebkitTabsToLinks] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kConfirmToQuitEnabled] = + (*s_allowlist)[::prefs::kConfirmToQuitEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; #endif - (*s_whitelist)[dom_distiller::prefs::kOfferReaderMode] = + (*s_allowlist)[dom_distiller::prefs::kOfferReaderMode] = settings_api::PrefType::PREF_TYPE_BOOLEAN; // On startup. - (*s_whitelist)[::prefs::kRestoreOnStartup] = + (*s_allowlist)[::prefs::kRestoreOnStartup] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[::prefs::kURLsToRestoreOnStartup] = + (*s_allowlist)[::prefs::kURLsToRestoreOnStartup] = settings_api::PrefType::PREF_TYPE_LIST; // Downloads settings. - (*s_whitelist)[::prefs::kDownloadDefaultDirectory] = + (*s_allowlist)[::prefs::kDownloadDefaultDirectory] = settings_api::PrefType::PREF_TYPE_STRING; - (*s_whitelist)[::prefs::kPromptForDownload] = + (*s_allowlist)[::prefs::kPromptForDownload] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[drive::prefs::kDisableDrive] = + (*s_allowlist)[drive::prefs::kDisableDrive] = settings_api::PrefType::PREF_TYPE_BOOLEAN; #if defined(OS_CHROMEOS) - (*s_whitelist)[::prefs::kNetworkFileSharesAllowed] = + (*s_allowlist)[::prefs::kNetworkFileSharesAllowed] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kMostRecentlyUsedNetworkFileShareURL] = + (*s_allowlist)[::prefs::kMostRecentlyUsedNetworkFileShareURL] = settings_api::PrefType::PREF_TYPE_STRING; #endif // Printing settings. - (*s_whitelist)[::prefs::kLocalDiscoveryNotificationsEnabled] = + (*s_allowlist)[::prefs::kLocalDiscoveryNotificationsEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; // Miscellaneous. TODO(stevenjb): categorize. - (*s_whitelist)[::prefs::kEnableDoNotTrack] = + (*s_allowlist)[::prefs::kEnableDoNotTrack] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kEnableEncryptedMedia] = + (*s_allowlist)[::prefs::kEnableEncryptedMedia] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::language::prefs::kApplicationLocale] = + (*s_allowlist)[::language::prefs::kApplicationLocale] = settings_api::PrefType::PREF_TYPE_STRING; - (*s_whitelist)[::prefs::kNetworkPredictionOptions] = + (*s_allowlist)[::prefs::kNetworkPredictionOptions] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[password_manager::prefs::kCredentialsEnableService] = + (*s_allowlist)[password_manager::prefs::kCredentialsEnableService] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[password_manager::prefs::kCredentialsEnableAutosignin] = + (*s_allowlist)[password_manager::prefs::kCredentialsEnableAutosignin] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[password_manager::prefs::kPasswordLeakDetectionEnabled] = + (*s_allowlist)[password_manager::prefs::kPasswordLeakDetectionEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; // Privacy page - (*s_whitelist)[::prefs::kSigninAllowedOnNextStartup] = + (*s_allowlist)[::prefs::kSigninAllowedOnNextStartup] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kDnsOverHttpsMode] = + (*s_allowlist)[::prefs::kDnsOverHttpsMode] = settings_api::PrefType::PREF_TYPE_STRING; - (*s_whitelist)[::prefs::kDnsOverHttpsTemplates] = + (*s_allowlist)[::prefs::kDnsOverHttpsTemplates] = settings_api::PrefType::PREF_TYPE_STRING; // Security page - (*s_whitelist)[::kGeneratedPasswordLeakDetectionPref] = + (*s_allowlist)[::kGeneratedPasswordLeakDetectionPref] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kSafeBrowsingEnabled] = + (*s_allowlist)[::prefs::kSafeBrowsingEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kSafeBrowsingEnhanced] = + (*s_allowlist)[::prefs::kSafeBrowsingEnhanced] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kSafeBrowsingScoutReportingEnabled] = + (*s_allowlist)[::prefs::kSafeBrowsingScoutReportingEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::safe_browsing::kGeneratedSafeBrowsingPref] = + (*s_allowlist)[::safe_browsing::kGeneratedSafeBrowsingPref] = settings_api::PrefType::PREF_TYPE_NUMBER; // Sync and personalization page. - (*s_whitelist)[::prefs::kSearchSuggestEnabled] = + (*s_allowlist)[::prefs::kSearchSuggestEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist) + (*s_allowlist) [::unified_consent::prefs::kUrlKeyedAnonymizedDataCollectionEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::omnibox::kDocumentSuggestEnabled] = + (*s_allowlist)[::omnibox::kDocumentSuggestEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; // Languages page - (*s_whitelist)[spellcheck::prefs::kSpellCheckEnable] = + (*s_allowlist)[spellcheck::prefs::kSpellCheckEnable] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[spellcheck::prefs::kSpellCheckDictionaries] = + (*s_allowlist)[spellcheck::prefs::kSpellCheckDictionaries] = settings_api::PrefType::PREF_TYPE_LIST; - (*s_whitelist)[spellcheck::prefs::kSpellCheckForcedDictionaries] = + (*s_allowlist)[spellcheck::prefs::kSpellCheckForcedDictionaries] = settings_api::PrefType::PREF_TYPE_LIST; - (*s_whitelist)[spellcheck::prefs::kSpellCheckBlocklistedDictionaries] = + (*s_allowlist)[spellcheck::prefs::kSpellCheckBlocklistedDictionaries] = settings_api::PrefType::PREF_TYPE_LIST; - (*s_whitelist)[spellcheck::prefs::kSpellCheckUseSpellingService] = + (*s_allowlist)[spellcheck::prefs::kSpellCheckUseSpellingService] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kOfferTranslateEnabled] = + (*s_allowlist)[::prefs::kOfferTranslateEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[language::prefs::kFluentLanguages] = + (*s_allowlist)[language::prefs::kFluentLanguages] = settings_api::PrefType::PREF_TYPE_LIST; #if defined(OS_CHROMEOS) - (*s_whitelist)[::prefs::kLanguageImeMenuActivated] = + (*s_allowlist)[::prefs::kLanguageImeMenuActivated] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[chromeos::prefs::kAssistPersonalInfoEnabled] = + (*s_allowlist)[chromeos::prefs::kAssistPersonalInfoEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[chromeos::prefs::kEmojiSuggestionEnabled] = + (*s_allowlist)[chromeos::prefs::kEmojiSuggestionEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kLanguageInputMethodSpecificSettings] = + (*s_allowlist)[::prefs::kLanguageInputMethodSpecificSettings] = settings_api::PrefType::PREF_TYPE_DICTIONARY; #endif // Nearby Share. - (*s_whitelist)[::prefs::kNearbySharingEnabledPrefName] = + (*s_allowlist)[::prefs::kNearbySharingEnabledPrefName] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kNearbySharingActiveProfilePrefName] = + (*s_allowlist)[::prefs::kNearbySharingActiveProfilePrefName] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kNearbySharingDeviceNamePrefName] = + (*s_allowlist)[::prefs::kNearbySharingDeviceNamePrefName] = settings_api::PrefType::PREF_TYPE_STRING; - (*s_whitelist)[::prefs::kNearbySharingDataUsageName] = + (*s_allowlist)[::prefs::kNearbySharingDataUsageName] = settings_api::PrefType::PREF_TYPE_NUMBER; // Search page. - (*s_whitelist)[DefaultSearchManager::kDefaultSearchProviderDataPrefName] = + (*s_allowlist)[DefaultSearchManager::kDefaultSearchProviderDataPrefName] = settings_api::PrefType::PREF_TYPE_DICTIONARY; // Site Settings prefs. - (*s_whitelist)[::content_settings::kCookiePrimarySetting] = + (*s_allowlist)[::content_settings::kCookiePrimarySetting] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[::content_settings::kCookieSessionOnly] = + (*s_allowlist)[::content_settings::kCookieSessionOnly] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kCookieControlsMode] = + (*s_allowlist)[::prefs::kCookieControlsMode] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[::prefs::kPluginsAlwaysOpenPdfExternally] = + (*s_allowlist)[::prefs::kPluginsAlwaysOpenPdfExternally] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kEnableDRM] = + (*s_allowlist)[::prefs::kEnableDRM] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kEnableQuietNotificationPermissionUi] = + (*s_allowlist)[::prefs::kEnableQuietNotificationPermissionUi] = settings_api::PrefType::PREF_TYPE_BOOLEAN; // Clear browsing data settings. - (*s_whitelist)[browsing_data::prefs::kDeleteBrowsingHistory] = + (*s_allowlist)[browsing_data::prefs::kDeleteBrowsingHistory] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[browsing_data::prefs::kDeleteBrowsingHistoryBasic] = + (*s_allowlist)[browsing_data::prefs::kDeleteBrowsingHistoryBasic] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[browsing_data::prefs::kDeleteDownloadHistory] = + (*s_allowlist)[browsing_data::prefs::kDeleteDownloadHistory] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[browsing_data::prefs::kDeleteCache] = + (*s_allowlist)[browsing_data::prefs::kDeleteCache] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[browsing_data::prefs::kDeleteCacheBasic] = + (*s_allowlist)[browsing_data::prefs::kDeleteCacheBasic] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[browsing_data::prefs::kDeleteCookies] = + (*s_allowlist)[browsing_data::prefs::kDeleteCookies] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[browsing_data::prefs::kDeleteCookiesBasic] = + (*s_allowlist)[browsing_data::prefs::kDeleteCookiesBasic] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[browsing_data::prefs::kDeletePasswords] = + (*s_allowlist)[browsing_data::prefs::kDeletePasswords] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[browsing_data::prefs::kDeleteFormData] = + (*s_allowlist)[browsing_data::prefs::kDeleteFormData] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[browsing_data::prefs::kDeleteSiteSettings] = + (*s_allowlist)[browsing_data::prefs::kDeleteSiteSettings] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[browsing_data::prefs::kDeleteHostedAppsData] = + (*s_allowlist)[browsing_data::prefs::kDeleteHostedAppsData] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[browsing_data::prefs::kDeleteTimePeriod] = + (*s_allowlist)[browsing_data::prefs::kDeleteTimePeriod] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[browsing_data::prefs::kDeleteTimePeriodBasic] = + (*s_allowlist)[browsing_data::prefs::kDeleteTimePeriodBasic] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[browsing_data::prefs::kLastClearBrowsingDataTab] = + (*s_allowlist)[browsing_data::prefs::kLastClearBrowsingDataTab] = settings_api::PrefType::PREF_TYPE_NUMBER; // Accessibility. - (*s_whitelist)[::prefs::kAccessibilityImageLabelsEnabled] = + (*s_allowlist)[::prefs::kAccessibilityImageLabelsEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kAccessibilityCaptionsTextSize] = + (*s_allowlist)[::prefs::kAccessibilityCaptionsTextSize] = settings_api::PrefType::PREF_TYPE_STRING; - (*s_whitelist)[::prefs::kAccessibilityCaptionsTextFont] = + (*s_allowlist)[::prefs::kAccessibilityCaptionsTextFont] = settings_api::PrefType::PREF_TYPE_STRING; - (*s_whitelist)[::prefs::kAccessibilityCaptionsTextColor] = + (*s_allowlist)[::prefs::kAccessibilityCaptionsTextColor] = settings_api::PrefType::PREF_TYPE_STRING; - (*s_whitelist)[::prefs::kAccessibilityCaptionsTextOpacity] = + (*s_allowlist)[::prefs::kAccessibilityCaptionsTextOpacity] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[::prefs::kAccessibilityCaptionsBackgroundColor] = + (*s_allowlist)[::prefs::kAccessibilityCaptionsBackgroundColor] = settings_api::PrefType::PREF_TYPE_STRING; - (*s_whitelist)[::prefs::kAccessibilityCaptionsTextShadow] = + (*s_allowlist)[::prefs::kAccessibilityCaptionsTextShadow] = settings_api::PrefType::PREF_TYPE_STRING; - (*s_whitelist)[::prefs::kAccessibilityCaptionsBackgroundOpacity] = + (*s_allowlist)[::prefs::kAccessibilityCaptionsBackgroundOpacity] = settings_api::PrefType::PREF_TYPE_NUMBER; #if !defined(OS_ANDROID) - (*s_whitelist)[::prefs::kLiveCaptionEnabled] = + (*s_allowlist)[::prefs::kLiveCaptionEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; #endif #if !defined(OS_CHROMEOS) - (*s_whitelist)[::prefs::kAccessibilityFocusHighlightEnabled] = + (*s_allowlist)[::prefs::kAccessibilityFocusHighlightEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; #endif - (*s_whitelist)[::prefs::kCaretBrowsingEnabled] = + (*s_allowlist)[::prefs::kCaretBrowsingEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; #if defined(OS_CHROMEOS) // Accounts / Users / People. - (*s_whitelist)[chromeos::kAccountsPrefAllowGuest] = + (*s_allowlist)[chromeos::kAccountsPrefAllowGuest] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[chromeos::kAccountsPrefSupervisedUsersEnabled] = + (*s_allowlist)[chromeos::kAccountsPrefSupervisedUsersEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[chromeos::kAccountsPrefShowUserNamesOnSignIn] = + (*s_allowlist)[chromeos::kAccountsPrefShowUserNamesOnSignIn] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[chromeos::kAccountsPrefAllowNewUser] = + (*s_allowlist)[chromeos::kAccountsPrefAllowNewUser] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[chromeos::kAccountsPrefUsers] = + (*s_allowlist)[chromeos::kAccountsPrefUsers] = settings_api::PrefType::PREF_TYPE_LIST; - (*s_whitelist)[chromeos::prefs::kSecondaryGoogleAccountSigninAllowed] = + (*s_allowlist)[chromeos::prefs::kSecondaryGoogleAccountSigninAllowed] = settings_api::PrefType::PREF_TYPE_BOOLEAN; // kEnableAutoScreenLock is read-only. - (*s_whitelist)[ash::prefs::kEnableAutoScreenLock] = + (*s_allowlist)[ash::prefs::kEnableAutoScreenLock] = settings_api::PrefType::PREF_TYPE_BOOLEAN; // kPinUnlockAutosubmitEnabled is read-only. - (*s_whitelist)[prefs::kPinUnlockAutosubmitEnabled] = + (*s_allowlist)[prefs::kPinUnlockAutosubmitEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kMessageCenterLockScreenMode] = + (*s_allowlist)[ash::prefs::kMessageCenterLockScreenMode] = settings_api::PrefType::PREF_TYPE_STRING; // Accessibility. - (*s_whitelist)[ash::prefs::kAccessibilitySpokenFeedbackEnabled] = + (*s_allowlist)[ash::prefs::kAccessibilitySpokenFeedbackEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kAccessibilityAutoclickEnabled] = + (*s_allowlist)[ash::prefs::kAccessibilityAutoclickEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kAccessibilityAutoclickDelayMs] = + (*s_allowlist)[ash::prefs::kAccessibilityAutoclickDelayMs] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[ash::prefs::kAccessibilityAutoclickEventType] = + (*s_allowlist)[ash::prefs::kAccessibilityAutoclickEventType] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[ash::prefs::kAccessibilityAutoclickRevertToLeftClick] = + (*s_allowlist)[ash::prefs::kAccessibilityAutoclickRevertToLeftClick] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kAccessibilityAutoclickStabilizePosition] = + (*s_allowlist)[ash::prefs::kAccessibilityAutoclickStabilizePosition] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kAccessibilityAutoclickMovementThreshold] = + (*s_allowlist)[ash::prefs::kAccessibilityAutoclickMovementThreshold] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[ash::prefs::kAccessibilityCaretHighlightEnabled] = + (*s_allowlist)[ash::prefs::kAccessibilityCaretHighlightEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kAccessibilityCursorHighlightEnabled] = + (*s_allowlist)[ash::prefs::kAccessibilityCursorHighlightEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kShouldAlwaysShowAccessibilityMenu] = + (*s_allowlist)[ash::prefs::kShouldAlwaysShowAccessibilityMenu] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kAccessibilityDictationEnabled] = + (*s_allowlist)[ash::prefs::kAccessibilityDictationEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kAccessibilityFocusHighlightEnabled] = + (*s_allowlist)[ash::prefs::kAccessibilityFocusHighlightEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kAccessibilityHighContrastEnabled] = + (*s_allowlist)[ash::prefs::kAccessibilityHighContrastEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kAccessibilityLargeCursorEnabled] = + (*s_allowlist)[ash::prefs::kAccessibilityLargeCursorEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kAccessibilityLargeCursorDipSize] = + (*s_allowlist)[ash::prefs::kAccessibilityLargeCursorDipSize] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[ash::prefs::kAccessibilityCursorColorEnabled] = + (*s_allowlist)[ash::prefs::kAccessibilityCursorColorEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kAccessibilityCursorColor] = + (*s_allowlist)[ash::prefs::kAccessibilityCursorColor] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[ash::prefs::kAccessibilityScreenMagnifierEnabled] = + (*s_allowlist)[ash::prefs::kAccessibilityScreenMagnifierEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kAccessibilityScreenMagnifierScale] = + (*s_allowlist)[ash::prefs::kAccessibilityScreenMagnifierScale] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[ash::prefs::kAccessibilitySelectToSpeakEnabled] = + (*s_allowlist)[ash::prefs::kAccessibilitySelectToSpeakEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kAccessibilityStickyKeysEnabled] = + (*s_allowlist)[ash::prefs::kAccessibilityStickyKeysEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kAccessibilitySwitchAccessEnabled] = + (*s_allowlist)[ash::prefs::kAccessibilitySwitchAccessEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kAccessibilitySwitchAccessSelectKeyCodes] = + (*s_allowlist)[ash::prefs::kAccessibilitySwitchAccessSelectKeyCodes] = settings_api::PrefType::PREF_TYPE_LIST; - (*s_whitelist)[ash::prefs::kAccessibilitySwitchAccessSelectSetting] = + (*s_allowlist)[ash::prefs::kAccessibilitySwitchAccessSelectSetting] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[ash::prefs::kAccessibilitySwitchAccessNextKeyCodes] = + (*s_allowlist)[ash::prefs::kAccessibilitySwitchAccessNextKeyCodes] = settings_api::PrefType::PREF_TYPE_LIST; - (*s_whitelist)[ash::prefs::kAccessibilitySwitchAccessNextSetting] = + (*s_allowlist)[ash::prefs::kAccessibilitySwitchAccessNextSetting] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[ash::prefs::kAccessibilitySwitchAccessPreviousKeyCodes] = + (*s_allowlist)[ash::prefs::kAccessibilitySwitchAccessPreviousKeyCodes] = settings_api::PrefType::PREF_TYPE_LIST; - (*s_whitelist)[ash::prefs::kAccessibilitySwitchAccessPreviousSetting] = + (*s_allowlist)[ash::prefs::kAccessibilitySwitchAccessPreviousSetting] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[ash::prefs::kAccessibilitySwitchAccessAutoScanEnabled] = + (*s_allowlist)[ash::prefs::kAccessibilitySwitchAccessAutoScanEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kAccessibilitySwitchAccessAutoScanSpeedMs] = + (*s_allowlist)[ash::prefs::kAccessibilitySwitchAccessAutoScanSpeedMs] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist) + (*s_allowlist) [ash::prefs::kAccessibilityTabletModeShelfNavigationButtonsEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist) + (*s_allowlist) [ash::prefs::kAccessibilitySwitchAccessAutoScanKeyboardSpeedMs] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[ash::prefs::kAccessibilityVirtualKeyboardEnabled] = + (*s_allowlist)[ash::prefs::kAccessibilityVirtualKeyboardEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kAccessibilityMonoAudioEnabled] = + (*s_allowlist)[ash::prefs::kAccessibilityMonoAudioEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; // Text to Speech. - (*s_whitelist)[::prefs::kTextToSpeechLangToVoiceName] = + (*s_allowlist)[::prefs::kTextToSpeechLangToVoiceName] = settings_api::PrefType::PREF_TYPE_DICTIONARY; - (*s_whitelist)[::prefs::kTextToSpeechRate] = + (*s_allowlist)[::prefs::kTextToSpeechRate] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[::prefs::kTextToSpeechPitch] = + (*s_allowlist)[::prefs::kTextToSpeechPitch] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[::prefs::kTextToSpeechVolume] = + (*s_allowlist)[::prefs::kTextToSpeechVolume] = settings_api::PrefType::PREF_TYPE_NUMBER; // Guest OS - (*s_whitelist)[crostini::prefs::kCrostiniEnabled] = + (*s_allowlist)[crostini::prefs::kCrostiniEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[crostini::prefs::kCrostiniSharedUsbDevices] = + (*s_allowlist)[crostini::prefs::kCrostiniSharedUsbDevices] = settings_api::PrefType::PREF_TYPE_LIST; - (*s_whitelist)[crostini::prefs::kCrostiniContainers] = + (*s_allowlist)[crostini::prefs::kCrostiniContainers] = settings_api::PrefType::PREF_TYPE_LIST; - (*s_whitelist)[crostini::prefs::kCrostiniPortForwarding] = + (*s_allowlist)[crostini::prefs::kCrostiniPortForwarding] = settings_api::PrefType::PREF_TYPE_LIST; - (*s_whitelist)[guest_os::prefs::kGuestOSPathsSharedToVms] = + (*s_allowlist)[guest_os::prefs::kGuestOSPathsSharedToVms] = settings_api::PrefType::PREF_TYPE_DICTIONARY; // Plugin Vm - (*s_whitelist)[plugin_vm::prefs::kPluginVmImageExists] = + (*s_allowlist)[plugin_vm::prefs::kPluginVmImageExists] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[plugin_vm::prefs::kPluginVmPrintersAllowed] = + (*s_allowlist)[plugin_vm::prefs::kPluginVmPrintersAllowed] = settings_api::PrefType::PREF_TYPE_BOOLEAN; // Android Apps. - (*s_whitelist)[arc::prefs::kArcEnabled] = + (*s_allowlist)[arc::prefs::kArcEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; // Ambient Mode. - (*s_whitelist)[ash::ambient::prefs::kAmbientModeEnabled] = + (*s_allowlist)[ash::ambient::prefs::kAmbientModeEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; // Google Assistant. - (*s_whitelist)[chromeos::assistant::prefs::kAssistantConsentStatus] = + (*s_allowlist)[chromeos::assistant::prefs::kAssistantConsentStatus] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[chromeos::assistant::prefs::kAssistantDisabledByPolicy] = + (*s_allowlist)[chromeos::assistant::prefs::kAssistantDisabledByPolicy] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[chromeos::assistant::prefs::kAssistantEnabled] = + (*s_allowlist)[chromeos::assistant::prefs::kAssistantEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[chromeos::assistant::prefs::kAssistantContextEnabled] = + (*s_allowlist)[chromeos::assistant::prefs::kAssistantContextEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[chromeos::assistant::prefs::kAssistantHotwordAlwaysOn] = + (*s_allowlist)[chromeos::assistant::prefs::kAssistantHotwordAlwaysOn] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[chromeos::assistant::prefs::kAssistantHotwordEnabled] = + (*s_allowlist)[chromeos::assistant::prefs::kAssistantHotwordEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[chromeos::assistant::prefs::kAssistantLaunchWithMicOpen] = + (*s_allowlist)[chromeos::assistant::prefs::kAssistantLaunchWithMicOpen] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[chromeos::assistant::prefs::kAssistantNotificationEnabled] = + (*s_allowlist)[chromeos::assistant::prefs::kAssistantNotificationEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[chromeos::assistant::prefs::kAssistantQuickAnswersEnabled] = + (*s_allowlist)[chromeos::assistant::prefs::kAssistantQuickAnswersEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; // Misc. - (*s_whitelist)[::prefs::kUse24HourClock] = + (*s_allowlist)[::prefs::kUse24HourClock] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::language::prefs::kPreferredLanguages] = + (*s_allowlist)[::language::prefs::kPreferredLanguages] = settings_api::PrefType::PREF_TYPE_STRING; - (*s_whitelist)[ash::prefs::kTapDraggingEnabled] = + (*s_allowlist)[ash::prefs::kTapDraggingEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[chromeos::kStatsReportingPref] = + (*s_allowlist)[chromeos::kStatsReportingPref] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::chromeos::prefs::kSuggestedContentEnabled] = + (*s_allowlist)[::chromeos::prefs::kSuggestedContentEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[chromeos::kAttestationForContentProtectionEnabled] = + (*s_allowlist)[chromeos::kAttestationForContentProtectionEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[prefs::kRestoreLastLockScreenNote] = + (*s_allowlist)[prefs::kRestoreLastLockScreenNote] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kSettingsShowOSBanner] = + (*s_allowlist)[::prefs::kSettingsShowOSBanner] = settings_api::PrefType::PREF_TYPE_BOOLEAN; // Bluetooth & Internet settings. - (*s_whitelist)[chromeos::kAllowBluetooth] = + (*s_allowlist)[chromeos::kAllowBluetooth] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[proxy_config::prefs::kUseSharedProxies] = + (*s_allowlist)[proxy_config::prefs::kUseSharedProxies] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::chromeos::kSignedDataRoamingEnabled] = + (*s_allowlist)[::chromeos::kSignedDataRoamingEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::ash::prefs::kUserBluetoothAdapterEnabled] = + (*s_allowlist)[::ash::prefs::kUserBluetoothAdapterEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::ash::prefs::kVpnConfigAllowed] = + (*s_allowlist)[::ash::prefs::kVpnConfigAllowed] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[arc::prefs::kAlwaysOnVpnPackage] = + (*s_allowlist)[arc::prefs::kAlwaysOnVpnPackage] = settings_api::PrefType::PREF_TYPE_STRING; - (*s_whitelist)[arc::prefs::kAlwaysOnVpnLockdown] = + (*s_allowlist)[arc::prefs::kAlwaysOnVpnLockdown] = settings_api::PrefType::PREF_TYPE_BOOLEAN; // Timezone settings. - (*s_whitelist)[chromeos::kSystemTimezone] = + (*s_allowlist)[chromeos::kSystemTimezone] = settings_api::PrefType::PREF_TYPE_STRING; - (*s_whitelist)[prefs::kUserTimezone] = + (*s_allowlist)[prefs::kUserTimezone] = settings_api::PrefType::PREF_TYPE_STRING; - (*s_whitelist)[settings_private::kResolveTimezoneByGeolocationOnOff] = + (*s_allowlist)[settings_private::kResolveTimezoneByGeolocationOnOff] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[chromeos::kPerUserTimezoneEnabled] = + (*s_allowlist)[chromeos::kPerUserTimezoneEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[settings_private::kResolveTimezoneByGeolocationMethodShort] = + (*s_allowlist)[settings_private::kResolveTimezoneByGeolocationMethodShort] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[chromeos::kFineGrainedTimeZoneResolveEnabled] = + (*s_allowlist)[chromeos::kFineGrainedTimeZoneResolveEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[prefs::kSystemTimezoneAutomaticDetectionPolicy] = + (*s_allowlist)[prefs::kSystemTimezoneAutomaticDetectionPolicy] = settings_api::PrefType::PREF_TYPE_NUMBER; // Ash settings. - (*s_whitelist)[ash::prefs::kAmbientColorEnabled] = + (*s_allowlist)[ash::prefs::kAmbientColorEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kEnableStylusTools] = + (*s_allowlist)[ash::prefs::kEnableStylusTools] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kLaunchPaletteOnEjectEvent] = + (*s_allowlist)[ash::prefs::kLaunchPaletteOnEjectEvent] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kNightLightEnabled] = + (*s_allowlist)[ash::prefs::kNightLightEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kNightLightTemperature] = + (*s_allowlist)[ash::prefs::kNightLightTemperature] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[ash::prefs::kNightLightScheduleType] = + (*s_allowlist)[ash::prefs::kNightLightScheduleType] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[ash::prefs::kNightLightCustomStartTime] = + (*s_allowlist)[ash::prefs::kNightLightCustomStartTime] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[ash::prefs::kNightLightCustomEndTime] = + (*s_allowlist)[ash::prefs::kNightLightCustomEndTime] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[ash::prefs::kDockedMagnifierEnabled] = + (*s_allowlist)[ash::prefs::kDockedMagnifierEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kDockedMagnifierScale] = + (*s_allowlist)[ash::prefs::kDockedMagnifierScale] = settings_api::PrefType::PREF_TYPE_NUMBER; // Input method settings. - (*s_whitelist)[::prefs::kLanguagePreloadEngines] = + (*s_allowlist)[::prefs::kLanguagePreloadEngines] = settings_api::PrefType::PREF_TYPE_STRING; - (*s_whitelist)[::prefs::kLanguageEnabledImes] = + (*s_allowlist)[::prefs::kLanguageEnabledImes] = settings_api::PrefType::PREF_TYPE_STRING; - (*s_whitelist)[::prefs::kLanguageAllowedInputMethods] = + (*s_allowlist)[::prefs::kLanguageAllowedInputMethods] = settings_api::PrefType::PREF_TYPE_LIST; // Device settings. - (*s_whitelist)[::prefs::kTapToClickEnabled] = + (*s_allowlist)[::prefs::kTapToClickEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kNaturalScroll] = + (*s_allowlist)[ash::prefs::kNaturalScroll] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kTouchpadSensitivity] = + (*s_allowlist)[::prefs::kTouchpadSensitivity] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[::prefs::kTouchpadScrollSensitivity] = + (*s_allowlist)[::prefs::kTouchpadScrollSensitivity] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[::prefs::kPrimaryMouseButtonRight] = + (*s_allowlist)[::prefs::kPrimaryMouseButtonRight] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[ash::prefs::kMouseReverseScroll] = + (*s_allowlist)[ash::prefs::kMouseReverseScroll] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kMouseAcceleration] = + (*s_allowlist)[::prefs::kMouseAcceleration] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kMouseScrollAcceleration] = + (*s_allowlist)[::prefs::kMouseScrollAcceleration] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kTouchpadAcceleration] = + (*s_allowlist)[::prefs::kTouchpadAcceleration] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kTouchpadScrollAcceleration] = + (*s_allowlist)[::prefs::kTouchpadScrollAcceleration] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kMouseSensitivity] = + (*s_allowlist)[::prefs::kMouseSensitivity] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[::prefs::kMouseScrollSensitivity] = + (*s_allowlist)[::prefs::kMouseScrollSensitivity] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[::prefs::kLanguageRemapSearchKeyTo] = + (*s_allowlist)[::prefs::kLanguageRemapSearchKeyTo] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[::prefs::kLanguageRemapControlKeyTo] = + (*s_allowlist)[::prefs::kLanguageRemapControlKeyTo] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[::prefs::kLanguageRemapAltKeyTo] = + (*s_allowlist)[::prefs::kLanguageRemapAltKeyTo] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[::prefs::kLanguageRemapCapsLockKeyTo] = + (*s_allowlist)[::prefs::kLanguageRemapCapsLockKeyTo] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[::prefs::kLanguageRemapBackspaceKeyTo] = + (*s_allowlist)[::prefs::kLanguageRemapBackspaceKeyTo] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[::prefs::kLanguageRemapAssistantKeyTo] = + (*s_allowlist)[::prefs::kLanguageRemapAssistantKeyTo] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[::prefs::kLanguageRemapEscapeKeyTo] = + (*s_allowlist)[::prefs::kLanguageRemapEscapeKeyTo] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[::prefs::kLanguageRemapExternalCommandKeyTo] = + (*s_allowlist)[::prefs::kLanguageRemapExternalCommandKeyTo] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[::prefs::kLanguageRemapExternalMetaKeyTo] = + (*s_allowlist)[::prefs::kLanguageRemapExternalMetaKeyTo] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[::prefs::kLanguageSendFunctionKeys] = + (*s_allowlist)[::prefs::kLanguageSendFunctionKeys] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::ash::prefs::kXkbAutoRepeatEnabled] = + (*s_allowlist)[::ash::prefs::kXkbAutoRepeatEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::ash::prefs::kXkbAutoRepeatDelay] = + (*s_allowlist)[::ash::prefs::kXkbAutoRepeatDelay] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[::ash::prefs::kXkbAutoRepeatInterval] = + (*s_allowlist)[::ash::prefs::kXkbAutoRepeatInterval] = settings_api::PrefType::PREF_TYPE_NUMBER; - (*s_whitelist)[chromeos::kDeviceDisplayResolution] = + (*s_allowlist)[chromeos::kDeviceDisplayResolution] = settings_api::PrefType::PREF_TYPE_DICTIONARY; - (*s_whitelist)[chromeos::kDisplayRotationDefault] = + (*s_allowlist)[chromeos::kDisplayRotationDefault] = settings_api::PrefType::PREF_TYPE_DICTIONARY; - (*s_whitelist)[arc::prefs::kArcVisibleExternalStorages] = + (*s_allowlist)[arc::prefs::kArcVisibleExternalStorages] = settings_api::PrefType::PREF_TYPE_LIST; // Native Printing settings. - (*s_whitelist)[::prefs::kUserPrintersAllowed] = + (*s_allowlist)[::prefs::kUserPrintersAllowed] = settings_api::PrefType::PREF_TYPE_BOOLEAN; #else - (*s_whitelist)[::language::prefs::kAcceptLanguages] = + (*s_allowlist)[::language::prefs::kAcceptLanguages] = settings_api::PrefType::PREF_TYPE_STRING; // System settings. - (*s_whitelist)[::prefs::kBackgroundModeEnabled] = + (*s_allowlist)[::prefs::kBackgroundModeEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kHardwareAccelerationModeEnabled] = + (*s_allowlist)[::prefs::kHardwareAccelerationModeEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; // Import data - (*s_whitelist)[::prefs::kImportDialogAutofillFormData] = + (*s_allowlist)[::prefs::kImportDialogAutofillFormData] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kImportDialogBookmarks] = + (*s_allowlist)[::prefs::kImportDialogBookmarks] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kImportDialogHistory] = + (*s_allowlist)[::prefs::kImportDialogHistory] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kImportDialogSavedPasswords] = + (*s_allowlist)[::prefs::kImportDialogSavedPasswords] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kImportDialogSearchEngine] = + (*s_allowlist)[::prefs::kImportDialogSearchEngine] = settings_api::PrefType::PREF_TYPE_BOOLEAN; #endif // Proxy settings. - (*s_whitelist)[proxy_config::prefs::kProxy] = + (*s_allowlist)[proxy_config::prefs::kProxy] = settings_api::PrefType::PREF_TYPE_DICTIONARY; #if BUILDFLAG(GOOGLE_CHROME_BRANDING) - (*s_whitelist)[::prefs::kMediaRouterEnableCloudServices] = + (*s_allowlist)[::prefs::kMediaRouterEnableCloudServices] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kUserFeedbackAllowed] = + (*s_allowlist)[::prefs::kUserFeedbackAllowed] = settings_api::PrefType::PREF_TYPE_BOOLEAN; #endif // BUILDFLAG(GOOGLE_CHROME_BRANDING) // Media Remoting settings. - (*s_whitelist)[::prefs::kMediaRouterMediaRemotingEnabled] = + (*s_allowlist)[::prefs::kMediaRouterMediaRemotingEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; #if defined(OS_WIN) // SwReporter settings. - (*s_whitelist)[::prefs::kSwReporterEnabled] = + (*s_allowlist)[::prefs::kSwReporterEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; - (*s_whitelist)[::prefs::kSwReporterReportingEnabled] = + (*s_allowlist)[::prefs::kSwReporterReportingEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; #endif - return *s_whitelist; + return *s_allowlist; } -settings_api::PrefType PrefsUtil::GetWhitelistedPrefType( +settings_api::PrefType PrefsUtil::GetAllowlistedPrefType( const std::string& pref_name) { - const TypedPrefMap& keys = GetWhitelistedKeys(); + const TypedPrefMap& keys = GetAllowlistedKeys(); const auto& iter = keys.find(pref_name); return iter != keys.end() ? iter->second : settings_api::PrefType::PREF_TYPE_NONE; @@ -782,7 +782,7 @@ std::unique_ptr<settings_api::PrefObject> PrefsUtil::GetPref( const std::string& name) { - if (GetWhitelistedPrefType(name) == settings_api::PrefType::PREF_TYPE_NONE) { + if (GetAllowlistedPrefType(name) == settings_api::PrefType::PREF_TYPE_NONE) { return nullptr; } @@ -907,7 +907,7 @@ settings_private::SetPrefResult PrefsUtil::SetPref(const std::string& pref_name, const base::Value* value) { - if (GetWhitelistedPrefType(pref_name) == + if (GetAllowlistedPrefType(pref_name) == settings_api::PrefType::PREF_TYPE_NONE) { return settings_private::SetPrefResult::PREF_NOT_FOUND; } @@ -1035,7 +1035,7 @@ } bool PrefsUtil::IsPrefTypeURL(const std::string& pref_name) { - return GetWhitelistedPrefType(pref_name) == + return GetAllowlistedPrefType(pref_name) == settings_api::PrefType::PREF_TYPE_URL; }
diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.h b/chrome/browser/extensions/api/settings_private/prefs_util.h index a67fb4f..c1b8fba 100644 --- a/chrome/browser/extensions/api/settings_private/prefs_util.h +++ b/chrome/browser/extensions/api/settings_private/prefs_util.h
@@ -29,14 +29,14 @@ explicit PrefsUtil(Profile* profile); virtual ~PrefsUtil(); - // Gets the list of whitelisted pref keys -- that is, those which correspond + // Gets the list of allowlisted pref keys -- that is, those which correspond // to prefs that clients of the settingsPrivate API may retrieve and // manipulate. - const TypedPrefMap& GetWhitelistedKeys(); + const TypedPrefMap& GetAllowlistedKeys(); // Returns the pref type for |pref_name| or PREF_TYPE_NONE if not in the - // whitelist. - api::settings_private::PrefType GetWhitelistedPrefType( + // allowlist. + api::settings_private::PrefType GetAllowlistedPrefType( const std::string& pref_name); // Gets the value of the pref with the given |name|. Returns a pointer to an
diff --git a/chrome/browser/extensions/api/settings_private/settings_private_delegate.cc b/chrome/browser/extensions/api/settings_private/settings_private_delegate.cc index 1c6eddf0..13a1058 100644 --- a/chrome/browser/extensions/api/settings_private/settings_private_delegate.cc +++ b/chrome/browser/extensions/api/settings_private/settings_private_delegate.cc
@@ -42,7 +42,7 @@ std::unique_ptr<base::Value> SettingsPrivateDelegate::GetAllPrefs() { std::unique_ptr<base::ListValue> prefs(new base::ListValue()); - const TypedPrefMap& keys = prefs_util_->GetWhitelistedKeys(); + const TypedPrefMap& keys = prefs_util_->GetAllowlistedKeys(); for (const auto& it : keys) { std::unique_ptr<base::Value> pref = GetPref(it.first); if (!pref->is_none())
diff --git a/chrome/browser/extensions/api/settings_private/settings_private_delegate.h b/chrome/browser/extensions/api/settings_private/settings_private_delegate.h index bbe82f1..1826e7b 100644 --- a/chrome/browser/extensions/api/settings_private/settings_private_delegate.h +++ b/chrome/browser/extensions/api/settings_private/settings_private_delegate.h
@@ -41,7 +41,7 @@ // Gets the value of the pref with the given |name|. virtual std::unique_ptr<base::Value> GetPref(const std::string& name); - // Gets the values of all whitelisted prefs. + // Gets the values of all allowlisted prefs. virtual std::unique_ptr<base::Value> GetAllPrefs(); // Gets the value.
diff --git a/chrome/browser/extensions/api/settings_private/settings_private_event_router.cc b/chrome/browser/extensions/api/settings_private/settings_private_event_router.cc index c09ec77..5596add 100644 --- a/chrome/browser/extensions/api/settings_private/settings_private_event_router.cc +++ b/chrome/browser/extensions/api/settings_private/settings_private_event_router.cc
@@ -50,7 +50,7 @@ #if defined(OS_CHROMEOS) cros_settings_subscription_map_.clear(); #endif - const PrefsUtil::TypedPrefMap& keys = prefs_util_->GetWhitelistedKeys(); + const PrefsUtil::TypedPrefMap& keys = prefs_util_->GetAllowlistedKeys(); settings_private::GeneratedPrefs* generated_prefs = settings_private::GeneratedPrefsFactory::GetForBrowserContext(context_); for (const auto& it : keys) { @@ -94,7 +94,7 @@ settings_private::GeneratedPrefs* generated_prefs = settings_private::GeneratedPrefsFactory::GetForBrowserContext(context_); if (should_listen && !listening_) { - const PrefsUtil::TypedPrefMap& keys = prefs_util_->GetWhitelistedKeys(); + const PrefsUtil::TypedPrefMap& keys = prefs_util_->GetAllowlistedKeys(); for (const auto& it : keys) { std::string pref_name = it.first; if (prefs_util_->IsCrosSetting(pref_name)) { @@ -117,7 +117,7 @@ } } } else if (!should_listen && listening_) { - const PrefsUtil::TypedPrefMap& keys = prefs_util_->GetWhitelistedKeys(); + const PrefsUtil::TypedPrefMap& keys = prefs_util_->GetAllowlistedKeys(); for (const auto& it : keys) { if (prefs_util_->IsCrosSetting(it.first)) { #if defined(OS_CHROMEOS)
diff --git a/chrome/browser/extensions/api/streams_private/streams_private_manifest_unittest.cc b/chrome/browser/extensions/api/streams_private/streams_private_manifest_unittest.cc index 2da7244..08e80a45 100644 --- a/chrome/browser/extensions/api/streams_private/streams_private_manifest_unittest.cc +++ b/chrome/browser/extensions/api/streams_private/streams_private_manifest_unittest.cc
@@ -48,8 +48,7 @@ EXPECT_TRUE(handler->CanHandleMIMEType("text/plain")); } -TEST_F(StreamsPrivateManifestTest, - MimeTypesHandlerMIMETypesNotWhitelisted) { +TEST_F(StreamsPrivateManifestTest, MimeTypesHandlerMIMETypesNotAllowlisted) { scoped_refptr<const Extension> extension = ExtensionBuilder() .SetManifest(
diff --git a/chrome/browser/extensions/api/tab_capture/tab_capture_api.cc b/chrome/browser/extensions/api/tab_capture/tab_capture_api.cc index 8506b4b3..dae3297 100644 --- a/chrome/browser/extensions/api/tab_capture/tab_capture_api.cc +++ b/chrome/browser/extensions/api/tab_capture/tab_capture_api.cc
@@ -56,8 +56,8 @@ "Extension has not been invoked for the current page (see activeTab " "permission). Chrome pages cannot be captured."; -const char kNotWhitelistedForOffscreenTabApi[] = - "Extension is not whitelisted for use of the unstable, in-development " +const char kNotAllowlistedForOffscreenTabApi[] = + "Extension is not allowlisted for use of the unstable, in-development " "chrome.tabCapture.captureOffscreenTab API."; const char kInvalidStartUrl[] = "Invalid/Missing/Malformatted starting URL for off-screen tab."; @@ -216,10 +216,10 @@ } // namespace -// Whitelisted extensions that do not check for a browser action grant because +// Allowlisted extensions that do not check for a browser action grant because // they provide API's. If there are additional extension ids that need -// whitelisting and are *not* the Media Router extension, add them to a new -// kWhitelist array. +// allowlisting and are *not* the Media Router extension, add them to a new +// kAllowlist array. const char* const kMediaRouterExtensionIds[] = { "enhhojjnijigcajfphajepfemndkmdlo", // Dev "pkedcjkdefgpdelpbcmbmeomcjbeemfm", // Stable @@ -301,7 +301,7 @@ TabCapture::CaptureOffscreenTab::Params::Create(*args_); EXTENSION_FUNCTION_VALIDATE(params); - // Make sure the extension is whitelisted for using this API, regardless of + // Make sure the extension is allowlisted for using this API, regardless of // Chrome channel. // // TODO(miu): Use _api_features.json and extensions::Feature library instead. @@ -312,7 +312,7 @@ SimpleFeature::IsIdInArray(extension()->id(), kMediaRouterExtensionIds, base::size(kMediaRouterExtensionIds)); if (!is_allowlisted_extension) - return RespondNow(Error(kNotWhitelistedForOffscreenTabApi)); + return RespondNow(Error(kNotAllowlistedForOffscreenTabApi)); const GURL start_url(params->start_url); if (!IsAcceptableOffscreenTabUrl(start_url))
diff --git a/chrome/browser/extensions/api/tab_capture/tab_capture_apitest.cc b/chrome/browser/extensions/api/tab_capture/tab_capture_apitest.cc index 2879d3f1..8bd63c7 100644 --- a/chrome/browser/extensions/api/tab_capture/tab_capture_apitest.cc +++ b/chrome/browser/extensions/api/tab_capture/tab_capture_apitest.cc
@@ -279,12 +279,12 @@ // http://crbug.com/427730 // Make sure tabCapture.capture only works if the tab has been granted -// permission via an extension icon click or the extension is whitelisted. +// permission via an extension icon click or the extension is allowlisted. IN_PROC_BROWSER_TEST_F(TabCaptureApiTest, DISABLED_ActiveTabPermission) { ExtensionTestMessageListener before_open_tab("ready1", true); ExtensionTestMessageListener before_grant_permission("ready2", true); ExtensionTestMessageListener before_open_new_tab("ready3", true); - ExtensionTestMessageListener before_whitelist_extension("ready4", true); + ExtensionTestMessageListener before_allowlist_extension("ready4", true); ASSERT_TRUE(RunExtensionSubtest("tab_capture", "active_tab_permission_test.html")) @@ -312,10 +312,10 @@ browser()->OpenURL(params); before_open_new_tab.Reply(""); - // Add extension to whitelist and make sure capture succeeds. - EXPECT_TRUE(before_whitelist_extension.WaitUntilSatisfied()); + // Add extension to allowlist and make sure capture succeeds. + EXPECT_TRUE(before_allowlist_extension.WaitUntilSatisfied()); AddExtensionToCommandLineAllowlist(); - before_whitelist_extension.Reply(""); + before_allowlist_extension.Reply(""); ResultCatcher catcher; catcher.RestrictToBrowserContext(browser()->profile());
diff --git a/chrome/browser/extensions/api/tab_capture/tab_capture_performance_test_base.h b/chrome/browser/extensions/api/tab_capture/tab_capture_performance_test_base.h index 2db0cf1..4099fa31 100644 --- a/chrome/browser/extensions/api/tab_capture/tab_capture_performance_test_base.h +++ b/chrome/browser/extensions/api/tab_capture/tab_capture_performance_test_base.h
@@ -44,7 +44,7 @@ ~TabCapturePerformanceTestBase() override; // SetUp overrides to enable pixel output, configure the embedded test server, - // whitelist the extension loaded by the tests. + // allowlist the extension loaded by the tests. void SetUp() override; void SetUpOnMainThread() override; void SetUpCommandLine(base::CommandLine* command_line) override;
diff --git a/chrome/browser/extensions/api/web_request/web_request_permissions_unittest.cc b/chrome/browser/extensions/api/web_request/web_request_permissions_unittest.cc index 1cb5d26..5b27db74e 100644 --- a/chrome/browser/extensions/api/web_request/web_request_permissions_unittest.cc +++ b/chrome/browser/extensions/api/web_request/web_request_permissions_unittest.cc
@@ -262,7 +262,7 @@ chromeos::ScopedTestPublicSessionLoginState login_state; // Host permission checks are disabled in Public Sessions, instead all URLs - // are whitelisted. + // are allowlisted. EXPECT_EQ(PermissionsData::PageAccess::kAllowed, WebRequestPermissions::CanExtensionAccessURL( permission_helper_, com_policy_extension_->id(), org_url,
diff --git a/chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_api.cc b/chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_api.cc index 55e8f2c7..3087660 100644 --- a/chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_api.cc +++ b/chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_api.cc
@@ -91,13 +91,13 @@ std::string* error) { // There are 2 ways these API functions can get called. // - // 1. From a whitelisted component extension on behalf of a page with the + // 1. From an allowlisted component extension on behalf of a page with the // appropriate origin via a message from that page. In this case, either the // guest process id or the tab id is on the message received by the component // extension, and the extension can pass that along in RequestInfo as // |guest_process_id| or |tab_id|. // - // 2. From a whitelisted app that hosts a page in a webview. In this case, + // 2. From an allowlisted app that hosts a page in a webview. In this case, // the app should call these API functions with the |target_webview| flag // set, from a web contents that has exactly 1 webview .
diff --git a/chrome/browser/extensions/api/webstore_private/extension_install_status_unittest.cc b/chrome/browser/extensions/api/webstore_private/extension_install_status_unittest.cc index a561b32..8e42fec 100644 --- a/chrome/browser/extensions/api/webstore_private/extension_install_status_unittest.cc +++ b/chrome/browser/extensions/api/webstore_private/extension_install_status_unittest.cc
@@ -498,7 +498,7 @@ } TEST_F(ExtensionInstallStatusTest, - ExtensionBlockedByPermissionButWhitelistById) { + ExtensionBlockedByPermissionButAllowlistById) { SetExtensionSettings(R"({ "*": { "blocked_permissions": ["storage"] @@ -506,7 +506,7 @@ "installation_mode": "allowed" }})"); - // Per-id whitelisted has higher priority than blocked permissions. + // Per-id allowlisted has higher priority than blocked permissions. APIPermissionSet api_permissions; api_permissions.insert(APIPermission::kStorage); EXPECT_EQ(ExtensionInstallStatus::kInstallable,
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 a155246e..a7aed41 100644 --- a/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc +++ b/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc
@@ -671,8 +671,8 @@ void WebstorePrivateBeginInstallWithManifest3Function::HandleInstallProceed() { // This gets cleared in CrxInstaller::ConfirmInstall(). TODO(asargent) - in - // the future we may also want to add time-based expiration, where a whitelist - // entry is only valid for some number of minutes. + // the future we may also want to add time-based expiration, where an + // allowlist entry is only valid for some number of minutes. std::unique_ptr<WebstoreInstaller::Approval> approval( WebstoreInstaller::Approval::CreateWithNoInstallPrompt( chrome_details_.GetProfile(), details().id, @@ -812,7 +812,7 @@ AddRef(); // The extension will install through the normal extension install flow, but - // the whitelist entry will bypass the normal permissions install dialog. + // the allowlist entry will bypass the normal permissions install dialog. scoped_refptr<WebstoreInstaller> installer = new WebstoreInstaller( chrome_details_.GetProfile(), this, web_contents, params->expected_id, std::move(approval_), WebstoreInstaller::INSTALL_SOURCE_OTHER);
diff --git a/chrome/browser/extensions/chrome_process_manager_delegate.cc b/chrome/browser/extensions/chrome_process_manager_delegate.cc index 690594f7..b832f6c 100644 --- a/chrome/browser/extensions/chrome_process_manager_delegate.cc +++ b/chrome/browser/extensions/chrome_process_manager_delegate.cc
@@ -23,7 +23,7 @@ #if defined(OS_CHROMEOS) #include "chrome/browser/chromeos/profiles/profile_helper.h" -#include "chrome/browser/extensions/component_extensions_whitelist/whitelist.h" +#include "chrome/browser/extensions/component_extensions_allowlist/allowlist.h" #include "chromeos/constants/chromeos_switches.h" #endif @@ -90,9 +90,9 @@ ->GetForceInstallList(); // For the ChromeOS login profile, only allow apps installed by device - // policy or that are explicitly whitelisted. + // policy or that are explicitly allowlisted. return login_screen_apps_list->HasKey(extension.id()) || - IsComponentExtensionWhitelistedForSignInProfile(extension.id()); + IsComponentExtensionAllowlistedForSignInProfile(extension.id()); } if (chromeos::ProfileHelper::IsLockScreenAppProfile(profile) &&
diff --git a/chrome/browser/extensions/component_extensions_whitelist/EXTENSION_WHITELIST_OWNERS b/chrome/browser/extensions/component_extensions_allowlist/EXTENSION_ALLOWLIST_OWNERS similarity index 100% rename from chrome/browser/extensions/component_extensions_whitelist/EXTENSION_WHITELIST_OWNERS rename to chrome/browser/extensions/component_extensions_allowlist/EXTENSION_ALLOWLIST_OWNERS
diff --git a/chrome/browser/extensions/component_extensions_allowlist/OWNERS b/chrome/browser/extensions/component_extensions_allowlist/OWNERS new file mode 100644 index 0000000..d3b8c8a --- /dev/null +++ b/chrome/browser/extensions/component_extensions_allowlist/OWNERS
@@ -0,0 +1,8 @@ +# Adding new component extensions requires approval from the Extensions Tech +# Lead. See comment in allowlist.h +set noparent + +file://chrome/browser/extensions/component_extensions_allowlist/EXTENSION_ALLOWLIST_OWNERS + +# TEAM: extensions-dev@chromium.org +# COMPONENT: Platform>Extensions
diff --git a/chrome/browser/extensions/component_extensions_whitelist/whitelist.cc b/chrome/browser/extensions/component_extensions_allowlist/allowlist.cc similarity index 90% rename from chrome/browser/extensions/component_extensions_whitelist/whitelist.cc rename to chrome/browser/extensions/component_extensions_allowlist/allowlist.cc index 3e709a6..c6a420c 100644 --- a/chrome/browser/extensions/component_extensions_whitelist/whitelist.cc +++ b/chrome/browser/extensions/component_extensions_allowlist/allowlist.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/extensions/component_extensions_whitelist/whitelist.h" +#include "chrome/browser/extensions/component_extensions_allowlist/allowlist.h" #include <stddef.h> @@ -24,7 +24,7 @@ namespace extensions { -bool IsComponentExtensionWhitelisted(const std::string& extension_id) { +bool IsComponentExtensionAllowlisted(const std::string& extension_id) { const char* const kAllowed[] = { extension_misc::kInAppPaymentsSupportAppId, extension_misc::kCastExtensionIdRelease, @@ -54,12 +54,12 @@ } #endif LOG(ERROR) << "Component extension with id " << extension_id << " not in " - << "whitelist and is not being loaded as a result."; + << "allowlist and is not being loaded as a result."; NOTREACHED(); return false; } -bool IsComponentExtensionWhitelisted(int manifest_resource_id) { +bool IsComponentExtensionAllowlisted(int manifest_resource_id) { switch (manifest_resource_id) { // Please keep the list in alphabetical order. #if BUILDFLAG(ENABLE_PRINTING) @@ -101,14 +101,14 @@ } LOG(ERROR) << "Component extension with manifest resource id " - << manifest_resource_id << " not in whitelist and is not being " + << manifest_resource_id << " not in allowlist and is not being " << "loaded as a result."; NOTREACHED(); return false; } #if defined(OS_CHROMEOS) -bool IsComponentExtensionWhitelistedForSignInProfile( +bool IsComponentExtensionAllowlistedForSignInProfile( const std::string& extension_id) { const char* const kAllowed[] = { extension_misc::kAccessibilityCommonExtensionId,
diff --git a/chrome/browser/extensions/component_extensions_whitelist/whitelist.h b/chrome/browser/extensions/component_extensions_allowlist/allowlist.h similarity index 81% rename from chrome/browser/extensions/component_extensions_whitelist/whitelist.h rename to chrome/browser/extensions/component_extensions_allowlist/allowlist.h index 73950e5..0002936 100644 --- a/chrome/browser/extensions/component_extensions_whitelist/whitelist.h +++ b/chrome/browser/extensions/component_extensions_allowlist/allowlist.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_EXTENSIONS_COMPONENT_EXTENSIONS_WHITELIST_WHITELIST_H_ -#define CHROME_BROWSER_EXTENSIONS_COMPONENT_EXTENSIONS_WHITELIST_WHITELIST_H_ +#ifndef CHROME_BROWSER_EXTENSIONS_COMPONENT_EXTENSIONS_ALLOWLIST_ALLOWLIST_H_ +#define CHROME_BROWSER_EXTENSIONS_COMPONENT_EXTENSIONS_ALLOWLIST_ALLOWLIST_H_ #include <string> @@ -37,17 +37,17 @@ // ============================================================================= // Checks using an extension ID. -bool IsComponentExtensionWhitelisted(const std::string& extension_id); +bool IsComponentExtensionAllowlisted(const std::string& extension_id); // Checks using resource ID of manifest. -bool IsComponentExtensionWhitelisted(int manifest_resource_id); +bool IsComponentExtensionAllowlisted(int manifest_resource_id); #if defined(OS_CHROMEOS) // Checks using extension id for sign in profile. -bool IsComponentExtensionWhitelistedForSignInProfile( +bool IsComponentExtensionAllowlistedForSignInProfile( const std::string& extension_id); #endif } // namespace extensions -#endif // CHROME_BROWSER_EXTENSIONS_COMPONENT_EXTENSIONS_WHITELIST_WHITELIST_H_ +#endif // CHROME_BROWSER_EXTENSIONS_COMPONENT_EXTENSIONS_ALLOWLIST_ALLOWLIST_H_
diff --git a/chrome/browser/extensions/component_extensions_whitelist/OWNERS b/chrome/browser/extensions/component_extensions_whitelist/OWNERS deleted file mode 100644 index c6768ff..0000000 --- a/chrome/browser/extensions/component_extensions_whitelist/OWNERS +++ /dev/null
@@ -1,8 +0,0 @@ -# Adding new component extensions requires approval from the Extensions Tech -# Lead. See comment in whitelist.h -set noparent - -file://chrome/browser/extensions/component_extensions_whitelist/EXTENSION_WHITELIST_OWNERS - -# TEAM: extensions-dev@chromium.org -# COMPONENT: Platform>Extensions
diff --git a/chrome/browser/extensions/component_loader.cc b/chrome/browser/extensions/component_loader.cc index b32655f..edbfdc3 100644 --- a/chrome/browser/extensions/component_loader.cc +++ b/chrome/browser/extensions/component_loader.cc
@@ -19,7 +19,7 @@ #include "base/trace_event/trace_event.h" #include "build/branding_buildflags.h" #include "build/build_config.h" -#include "chrome/browser/extensions/component_extensions_whitelist/whitelist.h" +#include "chrome/browser/extensions/component_extensions_allowlist/allowlist.h" #include "chrome/browser/extensions/data_deleter.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/launch_util.h" @@ -160,7 +160,7 @@ Profile* profile) : profile_(profile), extension_system_(extension_system), - ignore_whitelist_for_testing_(false) {} + ignore_allowlist_for_testing_(false) {} ComponentLoader::~ComponentLoader() = default; @@ -186,8 +186,8 @@ std::string ComponentLoader::Add(int manifest_resource_id, const base::FilePath& root_directory) { - if (!ignore_whitelist_for_testing_ && - !IsComponentExtensionWhitelisted(manifest_resource_id)) + if (!ignore_allowlist_for_testing_ && + !IsComponentExtensionAllowlisted(manifest_resource_id)) return std::string(); base::StringPiece manifest_contents = @@ -203,23 +203,23 @@ std::string ComponentLoader::Add(const base::StringPiece& manifest_contents, const base::FilePath& root_directory, - bool skip_whitelist) { + bool skip_allowlist) { // The Value is kept for the lifetime of the ComponentLoader. This is // required in case LoadAll() is called again. std::unique_ptr<base::DictionaryValue> manifest = ParseManifest(manifest_contents); if (manifest) - return Add(std::move(manifest), root_directory, skip_whitelist); + return Add(std::move(manifest), root_directory, skip_allowlist); return std::string(); } std::string ComponentLoader::Add( std::unique_ptr<base::DictionaryValue> parsed_manifest, const base::FilePath& root_directory, - bool skip_whitelist) { + bool skip_allowlist) { ComponentExtensionInfo info(std::move(parsed_manifest), root_directory); - if (!ignore_whitelist_for_testing_ && !skip_whitelist && - !IsComponentExtensionWhitelisted(info.extension_id)) + if (!ignore_allowlist_for_testing_ && !skip_allowlist && + !IsComponentExtensionAllowlisted(info.extension_id)) return std::string(); component_extensions_.push_back(std::move(info)); @@ -323,8 +323,8 @@ const base::FilePath& root_directory, const std::string& name_string, const std::string& description_string) { - if (!ignore_whitelist_for_testing_ && - !IsComponentExtensionWhitelisted(manifest_resource_id)) + if (!ignore_allowlist_for_testing_ && + !IsComponentExtensionAllowlisted(manifest_resource_id)) return; base::StringPiece manifest_contents =
diff --git a/chrome/browser/extensions/component_loader.h b/chrome/browser/extensions/component_loader.h index 2d82a3f5..64f0d79 100644 --- a/chrome/browser/extensions/component_loader.h +++ b/chrome/browser/extensions/component_loader.h
@@ -122,8 +122,8 @@ void AddChromeOsSpeechSynthesisExtensions(); #endif - void set_ignore_whitelist_for_testing(bool value) { - ignore_whitelist_for_testing_ = value; + void set_ignore_allowlist_for_testing(bool value) { + ignore_allowlist_for_testing_ = value; } private: @@ -159,10 +159,10 @@ std::string Add(const base::StringPiece& manifest_contents, const base::FilePath& root_directory, - bool skip_whitelist); + bool skip_allowlist); std::string Add(std::unique_ptr<base::DictionaryValue> parsed_manifest, const base::FilePath& root_directory, - bool skip_whitelist); + bool skip_allowlist); // Loads a registered component extension. void Load(const ComponentExtensionInfo& info); @@ -225,7 +225,7 @@ typedef std::vector<ComponentExtensionInfo> RegisteredComponentExtensions; RegisteredComponentExtensions component_extensions_; - bool ignore_whitelist_for_testing_; + bool ignore_allowlist_for_testing_; base::WeakPtrFactory<ComponentLoader> weak_factory_{this};
diff --git a/chrome/browser/extensions/component_loader_unittest.cc b/chrome/browser/extensions/component_loader_unittest.cc index 13f8bc3..5efac60 100644 --- a/chrome/browser/extensions/component_loader_unittest.cc +++ b/chrome/browser/extensions/component_loader_unittest.cc
@@ -61,7 +61,7 @@ base::CommandLine::ForCurrentProcess(), base::FilePath() /* install_directory */, false /* autoupdate_enabled */); - component_loader_.set_ignore_whitelist_for_testing(true); + component_loader_.set_ignore_allowlist_for_testing(true); } void SetUp() override {
diff --git a/chrome/browser/extensions/content_capabilities_browsertest.cc b/chrome/browser/extensions/content_capabilities_browsertest.cc index f2a358c..2e7a1ccb 100644 --- a/chrome/browser/extensions/content_capabilities_browsertest.cc +++ b/chrome/browser/extensions/content_capabilities_browsertest.cc
@@ -57,7 +57,7 @@ } // Builds an extension manifest with the given content_capabilities matches - // and permissions. The extension always has the same (whitelisted) ID. + // and permissions. The extension always has the same (allowlisted) ID. scoped_refptr<const Extension> LoadExtensionWithCapabilities( const std::string& matches, const std::string& permissions,
diff --git a/chrome/browser/extensions/crx_installer_browsertest.cc b/chrome/browser/extensions/crx_installer_browsertest.cc index 26e8cdb..f775294 100644 --- a/chrome/browser/extensions/crx_installer_browsertest.cc +++ b/chrome/browser/extensions/crx_installer_browsertest.cc
@@ -1034,7 +1034,7 @@ #if defined(OS_CHROMEOS) IN_PROC_BROWSER_TEST_F(ExtensionCrxInstallerTest, KioskOnlyTest) { base::ScopedAllowBlockingForTesting allow_io; - // kiosk_only is whitelisted from non-chromeos. + // kiosk_only is allowlisted from non-chromeos. base::FilePath crx_path = test_data_dir_.AppendASCII("kiosk/kiosk_only.crx"); EXPECT_FALSE(InstallExtension(crx_path, 0));
diff --git a/chrome/browser/extensions/extension_browsertest.cc b/chrome/browser/extensions/extension_browsertest.cc index 0bd71aa..1c7a5b5 100644 --- a/chrome/browser/extensions/extension_browsertest.cc +++ b/chrome/browser/extensions/extension_browsertest.cc
@@ -461,7 +461,7 @@ return NULL; } - extension_service()->component_loader()->set_ignore_whitelist_for_testing( + extension_service()->component_loader()->set_ignore_allowlist_for_testing( true); std::string extension_id = extension_service()->component_loader()->Add(manifest, path);
diff --git a/chrome/browser/extensions/extension_management.cc b/chrome/browser/extensions/extension_management.cc index 4530035..9d8854f 100644 --- a/chrome/browser/extensions/extension_management.cc +++ b/chrome/browser/extensions/extension_management.cc
@@ -153,7 +153,7 @@ return GetInstallListByMode(INSTALLATION_RECOMMENDED); } -bool ExtensionManagement::HasWhitelistedExtension() const { +bool ExtensionManagement::HasAllowlistedExtension() const { if (default_settings_->installation_mode != INSTALLATION_BLOCKED && default_settings_->installation_mode != INSTALLATION_REMOVED) { return true; @@ -173,7 +173,7 @@ if (it == settings_by_id_.end()) return false; // Checks if the extension is on the automatically installed list or - // install white-list. + // install allow-list. InstallationMode mode = it->second->installation_mode; return mode == INSTALLATION_FORCED || mode == INSTALLATION_RECOMMENDED || mode == INSTALLATION_ALLOWED; @@ -202,7 +202,7 @@ if (!url_patterns.MatchesURL(url)) return false; - // The referrer URL must also be whitelisted, unless the URL has the file + // The referrer URL must also be allowlisted, unless the URL has the file // scheme (there's no referrer for those URLs). return url.SchemeIsFile() || url_patterns.MatchesURL(referrer_url); } @@ -351,7 +351,7 @@ static_cast<const base::ListValue*>(LoadPreference( pref_names::kInstallAllowList, true, base::Value::Type::LIST)); // Allow user to use preference to block certain extensions. Note that policy - // managed forcelist or whitelist will always override this. + // managed forcelist or allowlist will always override this. const base::ListValue* denied_list_pref = static_cast<const base::ListValue*>(LoadPreference( pref_names::kInstallDenyList, false, base::Value::Type::LIST));
diff --git a/chrome/browser/extensions/extension_management.h b/chrome/browser/extensions/extension_management.h index 13e52e1..6fa7e74 100644 --- a/chrome/browser/extensions/extension_management.h +++ b/chrome/browser/extensions/extension_management.h
@@ -111,7 +111,7 @@ // Returns |true| if there is at least one extension with // |INSTALLATION_ALLOWED| as installation mode. This excludes force installed // extensions. - bool HasWhitelistedExtension() const; + bool HasAllowlistedExtension() const; // Returns if an extension with id |id| is explicitly allowed by enterprise // policy or not.
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc index 0f5349f..1fcb578 100644 --- a/chrome/browser/extensions/extension_service.cc +++ b/chrome/browser/extensions/extension_service.cc
@@ -683,7 +683,7 @@ std::string extension_id; UnpackedInstaller::Create(this)->LoadFromCommandLine( base::FilePath(t.token()), &extension_id, false /*only-allow-apps*/); - // Extension id is added to whitelist after its extension is loaded + // Extension id is added to allowlist after its extension is loaded // because code is executed asynchronously. TODO(michaelpg): Remove this // assumption so loading extensions does not have to be asynchronous: // crbug.com/708354.
diff --git a/chrome/browser/extensions/extension_service.h b/chrome/browser/extensions/extension_service.h index d8a9e122..6a5e4cfe1 100644 --- a/chrome/browser/extensions/extension_service.h +++ b/chrome/browser/extensions/extension_service.h
@@ -291,7 +291,7 @@ // preventing them from ever loading until UnblockAllExtensions is called. // This state is stored in preferences, so persists until Chrome restarts. // - // Component, external component and whitelisted policy installed extensions + // Component, external component and allowlisted policy installed extensions // are exempt from being Blocked (see CanBlockExtension in .cc file). void BlockAllExtensions(); @@ -618,7 +618,7 @@ // These extensions should appear in registry_. ExtensionSet greylist_; - // Set of whitelisted enabled extensions loaded from the + // Set of allowlisted enabled extensions loaded from the // --disable-extensions-except command line flag. std::set<std::string> disable_flag_exempted_extensions_;
diff --git a/chrome/browser/extensions/extension_service_test_base.cc b/chrome/browser/extensions/extension_service_test_base.cc index 8e1aec38..7d8f569 100644 --- a/chrome/browser/extensions/extension_service_test_base.cc +++ b/chrome/browser/extensions/extension_service_test_base.cc
@@ -353,7 +353,7 @@ base::CommandLine::ForCurrentProcess(), params.extensions_install_dir, params.autoupdate_enabled, params.extensions_enabled); - service_->component_loader()->set_ignore_whitelist_for_testing(true); + service_->component_loader()->set_ignore_allowlist_for_testing(true); // When we start up, we want to make sure there is no external provider, // since the ExtensionService on Windows will use the Registry as a default
diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc index edd0744..466dfd7 100644 --- a/chrome/browser/extensions/extension_service_unittest.cc +++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -3553,7 +3553,7 @@ test_blocklist.SetBlocklistState(good_crx, BLOCKLISTED_MALWARE, true); content::RunAllTasksUntilIdle(); - // The good_crx is blocklisted and the whitelist doesn't negate it. + // The good_crx is blocklisted and the allowlist doesn't negate it. ASSERT_TRUE(ValidateBooleanPref(good_crx, kPrefBlocklist, true)); EXPECT_EQ(0u, registry()->enabled_extensions().size()); } @@ -4052,7 +4052,7 @@ // Tests that active permissions are not revoked from component extensions // by policy when the policy is updated. https://crbug.com/746017. -TEST_F(ExtensionServiceTest, ComponentExtensionWhitelistedPermission) { +TEST_F(ExtensionServiceTest, ComponentExtensionAllowlistedPermission) { InitializeEmptyExtensionServiceWithTestingPrefs(); // Install a component extension. @@ -6614,19 +6614,17 @@ EXPECT_FALSE(pending_info->version().IsValid()); } -// This makes sure we can package and install CRX files that use whitelisted +// This makes sure we can package and install CRX files that use allowlisted // permissions. -TEST_F(ExtensionServiceTest, InstallWhitelistedExtension) { +TEST_F(ExtensionServiceTest, InstallAllowlistedExtension) { std::string test_id = "hdkklepkcpckhnpgjnmbdfhehckloojk"; base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( switches::kAllowlistedExtensionID, test_id); InitializeEmptyExtensionService(); base::FilePath path = data_dir().AppendASCII("permissions"); - base::FilePath pem_path = path - .AppendASCII("whitelist.pem"); - path = path - .AppendASCII("whitelist"); + base::FilePath pem_path = path.AppendASCII("allowlist.pem"); + path = path.AppendASCII("allowlist"); const Extension* extension = PackAndInstallCRX(path, pem_path, INSTALL_NEW); EXPECT_EQ(0u, GetErrors().size());
diff --git a/chrome/browser/extensions/extension_view_host.cc b/chrome/browser/extensions/extension_view_host.cc index 2ea67bd2..e6e4795 100644 --- a/chrome/browser/extensions/extension_view_host.cc +++ b/chrome/browser/extensions/extension_view_host.cc
@@ -157,7 +157,7 @@ content::WebContents* ExtensionViewHost::OpenURLFromTab( content::WebContents* source, const content::OpenURLParams& params) { - // Whitelist the dispositions we will allow to be opened. + // Allowlist the dispositions we will allow to be opened. switch (params.disposition) { case WindowOpenDisposition::SINGLETON_TAB: case WindowOpenDisposition::NEW_FOREGROUND_TAB:
diff --git a/chrome/browser/extensions/external_component_loader.cc b/chrome/browser/extensions/external_component_loader.cc index d046622..c8140cc 100644 --- a/chrome/browser/extensions/external_component_loader.cc +++ b/chrome/browser/extensions/external_component_loader.cc
@@ -7,7 +7,7 @@ #include "build/branding_buildflags.h" #include "build/build_config.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/extensions/component_extensions_whitelist/whitelist.h" +#include "chrome/browser/extensions/component_extensions_allowlist/allowlist.h" #include "chrome/browser/media/router/media_router_feature.h" #include "chrome/common/buildflags.h" #include "chrome/common/extensions/extension_constants.h" @@ -55,7 +55,7 @@ void ExternalComponentLoader::AddExternalExtension( const std::string& extension_id, base::DictionaryValue* prefs) { - if (!IsComponentExtensionWhitelisted(extension_id)) + if (!IsComponentExtensionAllowlisted(extension_id)) return; prefs->SetString(extension_id + ".external_update_url",
diff --git a/chrome/browser/extensions/forced_extensions/force_installed_metrics.cc b/chrome/browser/extensions/forced_extensions/force_installed_metrics.cc index 8cf8185f..8723714 100644 --- a/chrome/browser/extensions/forced_extensions/force_installed_metrics.cc +++ b/chrome/browser/extensions/forced_extensions/force_installed_metrics.cc
@@ -65,6 +65,70 @@ } #endif // defined(OS_CHROMEOS) +// Reports time taken for force installed extension during different +// installation stages. +void ReportInstallationStageTimes( + const ExtensionId& extension_id, + const InstallStageTracker::InstallationData& installation) { + if (installation.download_manifest_finish_time && + installation.download_manifest_started_time) { + base::UmaHistogramLongTimes( + "Extensions.ForceInstalledTime.DownloadingStartTo." + "ManifestDownloadComplete", + installation.download_manifest_finish_time.value() - + installation.download_manifest_started_time.value()); + } + // Report the download time for CRX only when + // installation.download_CRX_started_time is set because in other case CRX + // is fetched from cache and the download was not started. + if (installation.download_CRX_finish_time && + installation.download_CRX_started_time) { + base::UmaHistogramLongTimes( + "Extensions.ForceInstalledTime.ManifestDownloadCompleteTo." + "CRXDownloadComplete", + installation.download_CRX_finish_time.value() - + installation.download_CRX_started_time.value()); + } + if (installation.copying_started_time) { + DCHECK(installation.verification_started_time); + base::UmaHistogramLongTimes( + "Extensions.ForceInstalledTime.VerificationStartTo.CopyingStart", + installation.copying_started_time.value() - + installation.verification_started_time.value()); + } + if (installation.unpacking_started_time && + installation.copying_started_time) { + base::UmaHistogramLongTimes( + "Extensions.ForceInstalledTime.CopyingStartTo.UnpackingStart", + installation.unpacking_started_time.value() - + installation.copying_started_time.value()); + } + if (installation.checking_expectations_started_time && + installation.unpacking_started_time) { + base::UmaHistogramLongTimes( + "Extensions.ForceInstalledTime.UnpackingStartTo." + "CheckingExpectationsStart", + installation.checking_expectations_started_time.value() - + installation.unpacking_started_time.value()); + } + if (installation.finalizing_started_time && + installation.checking_expectations_started_time) { + base::UmaHistogramLongTimes( + "Extensions.ForceInstalledTime.CheckingExpectationsStartTo." + "FinalizingStart", + installation.finalizing_started_time.value() - + installation.checking_expectations_started_time.value()); + } + if (installation.installation_complete_time && + installation.finalizing_started_time) { + base::UmaHistogramLongTimes( + "Extensions.ForceInstalledTime.FinalizingStartTo." + "CRXInstallComplete", + installation.installation_complete_time.value() - + installation.finalizing_started_time.value()); + } +} + } // namespace ForceInstalledMetrics::ForceInstalledMetrics( @@ -127,63 +191,7 @@ } else { InstallStageTracker::InstallationData installation = install_stage_tracker->Get(extension.first); - if (installation.download_manifest_finish_time && - installation.download_manifest_started_time) { - base::UmaHistogramLongTimes( - "Extensions.ForceInstalledTime.DownloadingStartTo." - "ManifestDownloadComplete", - installation.download_manifest_finish_time.value() - - installation.download_manifest_started_time.value()); - } - // Report the download time for CRX only when - // installation.download_CRX_started_time is set because in other case CRX - // is fetched from cache and the download was not started. - if (installation.download_CRX_finish_time && - installation.download_CRX_started_time) { - base::UmaHistogramLongTimes( - "Extensions.ForceInstalledTime.ManifestDownloadCompleteTo." - "CRXDownloadComplete", - installation.download_CRX_finish_time.value() - - installation.download_CRX_started_time.value()); - } - if (installation.copying_started_time) { - DCHECK(installation.verification_started_time); - base::UmaHistogramLongTimes( - "Extensions.ForceInstalledTime.VerificationStartTo.CopyingStart", - installation.copying_started_time.value() - - installation.verification_started_time.value()); - } - if (installation.unpacking_started_time && - installation.copying_started_time) { - base::UmaHistogramLongTimes( - "Extensions.ForceInstalledTime.CopyingStartTo.UnpackingStart", - installation.unpacking_started_time.value() - - installation.copying_started_time.value()); - } - if (installation.checking_expectations_started_time && - installation.unpacking_started_time) { - base::UmaHistogramLongTimes( - "Extensions.ForceInstalledTime.UnpackingStartTo." - "CheckingExpectationsStart", - installation.checking_expectations_started_time.value() - - installation.unpacking_started_time.value()); - } - if (installation.finalizing_started_time && - installation.checking_expectations_started_time) { - base::UmaHistogramLongTimes( - "Extensions.ForceInstalledTime.CheckingExpectationsStartTo." - "FinalizingStart", - installation.finalizing_started_time.value() - - installation.checking_expectations_started_time.value()); - } - if (installation.installation_complete_time && - installation.finalizing_started_time) { - base::UmaHistogramLongTimes( - "Extensions.ForceInstalledTime.FinalizingStartTo." - "CRXInstallComplete", - installation.installation_complete_time.value() - - installation.finalizing_started_time.value()); - } + ReportInstallationStageTimes(extension.first, installation); } } if (missing_forced_extensions.empty()) {
diff --git a/chrome/browser/extensions/install_verifier.h b/chrome/browser/extensions/install_verifier.h index 9065dd1..084a131 100644 --- a/chrome/browser/extensions/install_verifier.h +++ b/chrome/browser/extensions/install_verifier.h
@@ -28,7 +28,7 @@ struct InstallSignature; // This class implements verification that a set of extensions are either from -// the webstore or are whitelisted by enterprise policy. The webstore +// the webstore or are allowlisted by enterprise policy. The webstore // verification process works by sending a request to a backend server to get a // signature proving that a set of extensions are verified. This signature is // written into the extension preferences and is checked for validity when
diff --git a/chrome/browser/extensions/permissions_updater_unittest.cc b/chrome/browser/extensions/permissions_updater_unittest.cc index 91299aa..bfa2c646 100644 --- a/chrome/browser/extensions/permissions_updater_unittest.cc +++ b/chrome/browser/extensions/permissions_updater_unittest.cc
@@ -408,8 +408,8 @@ EXPECT_TRUE(can_access_page(extension, kExampleGoogle)); // Block google.com for the Individual scope. - // Whitelist example.google.com for the Indiviaul scope. - // Leave google.com and example.google.com off both the whitelist and + // Allowlist example.google.com for the Indiviaul scope. + // Leave google.com and example.google.com off both the allowlist and // blocklist for Default scope. AddPattern(&policy_blocked_hosts, "*://*.google.com/*"); AddPattern(&policy_allowed_hosts, "*://example.google.com/*");
diff --git a/chrome/browser/extensions/shared_module_apitest.cc b/chrome/browser/extensions/shared_module_apitest.cc index 03161d5..cd29635 100644 --- a/chrome/browser/extensions/shared_module_apitest.cc +++ b/chrome/browser/extensions/shared_module_apitest.cc
@@ -28,14 +28,13 @@ .AppendASCII("import_non_existent"), 0)); } -IN_PROC_BROWSER_TEST_F(ExtensionApiTest, SharedModuleWhitelist) { - ASSERT_TRUE(LoadExtension( - test_data_dir_.AppendASCII("shared_module") - .AppendASCII("shared_whitelist"))); +IN_PROC_BROWSER_TEST_F(ExtensionApiTest, SharedModuleAllowlist) { + ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("shared_module") + .AppendASCII("shared_whitelist"))); - EXPECT_FALSE(InstallExtension( - test_data_dir_.AppendASCII("shared_module") - .AppendASCII("import_not_in_whitelist"), 0)); + EXPECT_FALSE(InstallExtension(test_data_dir_.AppendASCII("shared_module") + .AppendASCII("import_not_in_whitelist"), + 0)); } IN_PROC_BROWSER_TEST_F(ExtensionApiTest, SharedModuleInstallEvent) {
diff --git a/chrome/browser/extensions/shared_module_service_unittest.cc b/chrome/browser/extensions/shared_module_service_unittest.cc index 4120d39..cd4a827c 100644 --- a/chrome/browser/extensions/shared_module_service_unittest.cc +++ b/chrome/browser/extensions/shared_module_service_unittest.cc
@@ -232,11 +232,11 @@ } -TEST_F(SharedModuleServiceUnitTest, WhitelistedImports) { - std::string whitelisted_id = crx_file::id_util::GenerateId("whitelisted"); - std::string nonwhitelisted_id = - crx_file::id_util::GenerateId("nonwhitelisted"); - // Create a module which exports to a restricted whitelist. +TEST_F(SharedModuleServiceUnitTest, AllowlistedImports) { + std::string allowlisted_id = crx_file::id_util::GenerateId("allowlisted"); + std::string nonallowlisted_id = + crx_file::id_util::GenerateId("nonallowlisted"); + // Create a module which exports to a restricted allowlist. std::unique_ptr<base::DictionaryValue> manifest = DictionaryBuilder() .Set("name", "Shared Module") @@ -244,8 +244,8 @@ .Set("manifest_version", 2) .Set("export", DictionaryBuilder() - .Set("whitelist", - ListBuilder().Append(whitelisted_id).Build()) + .Set("allowlist", + ListBuilder().Append(allowlisted_id).Build()) .Set("resources", ListBuilder().Append("*").Build()) .Build()) .Build(); @@ -258,23 +258,23 @@ EXPECT_TRUE(InstallExtension(shared_module.get(), false)); - // Create and install an extension with the whitelisted ID. - scoped_refptr<const Extension> whitelisted_extension = + // Create and install an extension with the allowlisted ID. + scoped_refptr<const Extension> allowlisted_extension = CreateExtensionImportingModules( - std::vector<std::string>(1, shared_module->id()), whitelisted_id, + std::vector<std::string>(1, shared_module->id()), allowlisted_id, "1.0"); - EXPECT_TRUE(InstallExtension(whitelisted_extension.get(), false)); + EXPECT_TRUE(InstallExtension(allowlisted_extension.get(), false)); - // Try to install an extension with an ID that is not whitelisted. - scoped_refptr<const Extension> nonwhitelisted_extension = + // Try to install an extension with an ID that is not allowlisted. + scoped_refptr<const Extension> nonallowlisted_extension = CreateExtensionImportingModules( - std::vector<std::string>(1, shared_module->id()), nonwhitelisted_id, + std::vector<std::string>(1, shared_module->id()), nonallowlisted_id, "1.0"); // This should succeed because only CRX installer (and by extension the - // WebStore Installer) checks the shared module whitelist. InstallExtension - // bypasses the whitelist check because the SharedModuleService does not - // care about whitelists. - EXPECT_TRUE(InstallExtension(nonwhitelisted_extension.get(), false)); + // WebStore Installer) checks the shared module allowlist. InstallExtension + // bypasses the allowlist check because the SharedModuleService does not + // care about allowlists. + EXPECT_TRUE(InstallExtension(nonallowlisted_extension.get(), false)); } TEST_F(SharedModuleServiceUnitTest, PruneMultipleSharedModules) {
diff --git a/chrome/browser/extensions/standard_management_policy_provider.h b/chrome/browser/extensions/standard_management_policy_provider.h index 9b98488..631456f6 100644 --- a/chrome/browser/extensions/standard_management_policy_provider.h +++ b/chrome/browser/extensions/standard_management_policy_provider.h
@@ -16,7 +16,7 @@ class ExtensionManagement; // The standard management policy provider, which takes into account the -// extension black/whitelists and admin black/whitelists. +// extension block/allowlists and admin block/allowlists. class StandardManagementPolicyProvider : public ManagementPolicy::Provider { public: explicit StandardManagementPolicyProvider(
diff --git a/chrome/browser/extensions/unpacked_installer.cc b/chrome/browser/extensions/unpacked_installer.cc index 4533622..841adeb 100644 --- a/chrome/browser/extensions/unpacked_installer.cc +++ b/chrome/browser/extensions/unpacked_installer.cc
@@ -288,7 +288,7 @@ if (!service_weak_.get()) return true; // If there is a "*" in the extension blocklist, then no extensions should be - // allowed at all (except explicitly whitelisted extensions). + // allowed at all (except explicitly allowlisted extensions). return !ExtensionManagementFactory::GetForBrowserContext( service_weak_->profile()) ->BlocklistedByDefault();
diff --git a/chrome/browser/extensions/updater/chrome_extension_downloader_factory.h b/chrome/browser/extensions/updater/chrome_extension_downloader_factory.h index 910a027..d635dfd 100644 --- a/chrome/browser/extensions/updater/chrome_extension_downloader_factory.h +++ b/chrome/browser/extensions/updater/chrome_extension_downloader_factory.h
@@ -37,7 +37,7 @@ // non-empty. // // |profile_path| is used exclusely to support download of extensions through - // the file:// protocol. In practice, it whitelists specific directories the + // the file:// protocol. In practice, it allowlists specific directories the // the browser has access to. static std::unique_ptr<extensions::ExtensionDownloader> CreateForURLLoaderFactory(
diff --git a/chrome/browser/extensions/window_open_apitest.cc b/chrome/browser/extensions/window_open_apitest.cc index 4ea7d03..f05793ef 100644 --- a/chrome/browser/extensions/window_open_apitest.cc +++ b/chrome/browser/extensions/window_open_apitest.cc
@@ -439,7 +439,7 @@ EXPECT_FALSE( browser()->command_controller()->IsCommandEnabled(IDC_ZOOM_PLUS)); - // Verify some whitelisted commands. + // Verify some allowlisted commands. EXPECT_TRUE(browser()->command_controller()->IsCommandEnabled(IDC_COPY)); EXPECT_TRUE(browser()->command_controller()->IsCommandEnabled(IDC_PASTE)); }
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 4b61ffa..a42bf75 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -1443,6 +1443,11 @@ "expiry_milestone": 88 }, { + "name": "enable-desktop-pwas-migration-user-display-mode-clean-up", + "owners": [ "alancutter@chromium.org", "desktop-pwas-team@google.com" ], + "expiry_milestone": 89 + }, + { "name": "enable-desktop-pwas-run-on-os-login", "owners": [ "cafrias@microsoft.com", "desktop-pwas-team@google.com" ], "expiry_milestone": 88
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 7fc0c82..4b0f7c5a 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -674,6 +674,13 @@ "Persist the throttling of local PWA manifest update checks across browser " "restarts."; +const char kDesktopPWAsMigrationUserDisplayModeCleanUpName[] = + "Desktop PWAs migration user_display_mode clean up"; +const char kDesktopPWAsMigrationUserDisplayModeCleanUpDescription[] = + "Runs clean up code to fix web apps that had their window/browser tab " + "launch preference incorrectly migrated. See issue " + "https://crbug.com/1125020."; + const char kDesktopPWAsAppIconShortcutsMenuName[] = "Desktop PWAs app icon shortcuts menu"; const char kDesktopPWAsAppIconShortcutsMenuDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index a1bf42f..94e20f0 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -406,6 +406,9 @@ extern const char kDesktopPWAsLocalUpdatingThrottlePersistenceName[]; extern const char kDesktopPWAsLocalUpdatingThrottlePersistenceDescription[]; +extern const char kDesktopPWAsMigrationUserDisplayModeCleanUpName[]; +extern const char kDesktopPWAsMigrationUserDisplayModeCleanUpDescription[]; + extern const char kDesktopPWAsAppIconShortcutsMenuName[]; extern const char kDesktopPWAsAppIconShortcutsMenuDescription[];
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc index fc48bb2..a466aae 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -607,11 +607,11 @@ "TrustedWebActivityPostMessage", base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kTrustedWebActivityQualityEnforcement{ - "TrustedWebActivityQualityEnforcement", base::FEATURE_ENABLED_BY_DEFAULT}; + "TrustedWebActivityQualityEnforcement", base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kTrustedWebActivityQualityEnforcementForced{ "TrustedWebActivityQualityEnforcementForced", - base::FEATURE_ENABLED_BY_DEFAULT}; + base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kStartSurfaceAndroid{"StartSurfaceAndroid", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/chrome/browser/image_fetcher/android/java/src/org/chromium/chrome/browser/image_fetcher/ImageFetcher.java b/chrome/browser/image_fetcher/android/java/src/org/chromium/chrome/browser/image_fetcher/ImageFetcher.java index 4889bc2d1..40b074f5 100644 --- a/chrome/browser/image_fetcher/android/java/src/org/chromium/chrome/browser/image_fetcher/ImageFetcher.java +++ b/chrome/browser/image_fetcher/android/java/src/org/chromium/chrome/browser/image_fetcher/ImageFetcher.java
@@ -29,6 +29,7 @@ public static final String FEED_UMA_CLIENT_NAME = "Feed"; public static final String NTP_ANIMATED_LOGO_UMA_CLIENT_NAME = "NewTabPageAnimatedLogo"; public static final String QUERY_TILE_UMA_CLIENT_NAME = "QueryTiles"; + public static final String VIDEO_TUTORIALS_UMA_CLIENT_NAME = "VideoTutorials"; /** * Encapsulates image fetching customization options. Supports a subset of the native
diff --git a/chrome/browser/nearby_sharing/client/nearby_share_client_impl.cc b/chrome/browser/nearby_sharing/client/nearby_share_client_impl.cc index 24cdfe8..18b94e3 100644 --- a/chrome/browser/nearby_sharing/client/nearby_share_client_impl.cc +++ b/chrome/browser/nearby_sharing/client/nearby_share_client_impl.cc
@@ -6,6 +6,7 @@ #include <memory> +#include "base/base64url.h" #include "base/bind.h" #include "base/command_line.h" #include "base/memory/ptr_util.h" @@ -83,8 +84,12 @@ if (!request.page_token().empty()) { query_parameters.emplace_back(kPageToken, request.page_token()); } - for (int i = 0; i < request.secret_ids_size(); ++i) { - query_parameters.emplace_back(kSecretIds, request.secret_ids(i)); + for (const std::string& id : request.secret_ids()) { + // NOTE: One Platform requires that byte fields be URL-safe base64 encoded. + std::string encoded_id; + base::Base64UrlEncode(id, base::Base64UrlEncodePolicy::INCLUDE_PADDING, + &encoded_id); + query_parameters.emplace_back(kSecretIds, encoded_id); } return query_parameters; }
diff --git a/chrome/browser/nearby_sharing/client/nearby_share_client_impl_unittest.cc b/chrome/browser/nearby_sharing/client/nearby_share_client_impl_unittest.cc index 3afa6bd..2f1bf8a 100644 --- a/chrome/browser/nearby_sharing/client/nearby_share_client_impl_unittest.cc +++ b/chrome/browser/nearby_sharing/client/nearby_share_client_impl_unittest.cc
@@ -52,6 +52,8 @@ const char kPublicKey1[] = "publickey1"; const char kSecretId1[] = "secretid1"; const char kSecretId2[] = "secretid2"; +const char kSecretId1Encoded[] = "c2VjcmV0aWQx"; +const char kSecretId2Encoded[] = "c2VjcmV0aWQy"; const char kSecretKey1[] = "secretkey1"; const char kTestGoogleApisUrl[] = "https://nearbysharing-pa.testgoogleapis.com"; const int32_t kNanos1 = 123123123; @@ -688,7 +690,7 @@ std::vector<std::string>{kPageToken1}, ExpectQueryStringValues(request_as_query_parameters(), "page_token")); EXPECT_EQ( - (std::vector<std::string>{kSecretId1, kSecretId2}), + (std::vector<std::string>{kSecretId1Encoded, kSecretId2Encoded}), ExpectQueryStringValues(request_as_query_parameters(), "secret_ids")); nearbyshare::proto::ListPublicCertificatesResponse response_proto;
diff --git a/chrome/browser/nearby_sharing/local_device_data/nearby_share_device_data_updater_impl.cc b/chrome/browser/nearby_sharing/local_device_data/nearby_share_device_data_updater_impl.cc index 40ef5782..0c979648 100644 --- a/chrome/browser/nearby_sharing/local_device_data/nearby_share_device_data_updater_impl.cc +++ b/chrome/browser/nearby_sharing/local_device_data/nearby_share_device_data_updater_impl.cc
@@ -12,8 +12,8 @@ namespace { const char kDeviceIdPrefix[] = "users/me/devices/"; -const char kContactsFieldMaskPath[] = "device.contacts"; -const char kCertificatesFieldMaskPath[] = "device.public_certificates"; +const char kContactsFieldMaskPath[] = "contacts"; +const char kCertificatesFieldMaskPath[] = "public_certificates"; void RecordResultMetrics(NearbyShareHttpResult result) { base::UmaHistogramEnumeration(
diff --git a/chrome/browser/nearby_sharing/local_device_data/nearby_share_device_data_updater_impl_unittest.cc b/chrome/browser/nearby_sharing/local_device_data/nearby_share_device_data_updater_impl_unittest.cc index 258993a..ef03231 100644 --- a/chrome/browser/nearby_sharing/local_device_data/nearby_share_device_data_updater_impl_unittest.cc +++ b/chrome/browser/nearby_sharing/local_device_data/nearby_share_device_data_updater_impl_unittest.cc
@@ -80,9 +80,9 @@ field_mask.size()); EXPECT_EQ(expected_contacts.has_value(), - base::Contains(field_mask, "device.contacts")); + base::Contains(field_mask, "contacts")); EXPECT_EQ(expected_certificates.has_value(), - base::Contains(field_mask, "device.public_certificates")); + base::Contains(field_mask, "public_certificates")); EXPECT_EQ(std::string(kDeviceIdPrefix) + kTestDeviceId, request.device().name());
diff --git a/chrome/browser/notifications/notification_display_service_impl.cc b/chrome/browser/notifications/notification_display_service_impl.cc index 88ffe9b..20f768d2 100644 --- a/chrome/browser/notifications/notification_display_service_impl.cc +++ b/chrome/browser/notifications/notification_display_service_impl.cc
@@ -10,33 +10,25 @@ #include "base/callback.h" #include "base/feature_list.h" #include "base/logging.h" -#include "base/metrics/histogram_macros.h" #include "build/build_config.h" #include "build/buildflag.h" #include "chrome/browser/browser_features.h" -#include "chrome/browser/browser_process.h" #include "chrome/browser/notifications/non_persistent_notification_handler.h" #include "chrome/browser/notifications/notification_display_service_factory.h" -#include "chrome/browser/notifications/notification_platform_bridge.h" #include "chrome/browser/notifications/persistent_notification_handler.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/updates/announcement_notification/announcement_notification_handler.h" -#include "chrome/common/chrome_features.h" #include "chrome/common/pref_names.h" #include "components/pref_registry/pref_registry_syncable.h" #include "components/prefs/pref_service.h" #include "content/public/browser/browser_thread.h" -#include "ui/base/ui_base_features.h" +#include "extensions/buildflags/buildflags.h" #include "ui/message_center/public/cpp/notification.h" #if BUILDFLAG(ENABLE_EXTENSIONS) #include "chrome/browser/extensions/api/notifications/extension_notification_handler.h" #endif -#if BUILDFLAG(ENABLE_MESSAGE_CENTER) -#include "chrome/browser/notifications/notification_platform_bridge_message_center.h" -#endif - #if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_MAC) || \ defined(OS_WIN) #include "chrome/browser/nearby_sharing/nearby_notification_handler.h" @@ -44,81 +36,8 @@ #include "chrome/browser/sharing/sharing_notification_handler.h" #endif -#if defined(OS_WIN) -#include "base/strings/utf_string_conversions.h" -#include "chrome/browser/notifications/notification_platform_bridge_win.h" -#endif - namespace { -#if !defined(OS_CHROMEOS) -bool NativeNotificationsEnabled(Profile* profile) { -#if defined(OS_LINUX) || defined(OS_CHROMEOS) - if (profile) { - PrefService* prefs = profile->GetPrefs(); - if (!prefs->GetBoolean(prefs::kAllowNativeNotifications)) - return false; - } -#endif - - return base::FeatureList::IsEnabled(features::kNativeNotifications); -} -#endif - -// Returns the NotificationPlatformBridge to use for the current platform. -// Will return a nullptr for platforms that don't support native notifications. -// -// Platforms behave as follows: -// -// * Android -// Always uses native notifications. -// -// * Mac OS X, Linux, Windows 10 RS1+ -// Uses native notifications by default, but can fall back to the message -// center if base::kNativeNotifications is disabled or initialization fails. -// -// * Chrome OS -// Always uses the message center, either through the message center -// notification platform bridge when base::kNativeNotifications is disabled, -// which means the message center runs in-process, or through the Chrome OS -// specific bridge when the flag is enabled, which displays out-of-process. -// -// Please try to keep this comment up to date when changing behaviour on one of -// the platforms supported by the browser. -NotificationPlatformBridge* GetNativeNotificationPlatformBridge( - Profile* profile) { -#if BUILDFLAG(ENABLE_NATIVE_NOTIFICATIONS) -#if defined(OS_ANDROID) - DCHECK(NativeNotificationsEnabled(profile)); - return g_browser_process->notification_platform_bridge(); -#elif defined(OS_WIN) - if (NotificationPlatformBridgeWin::NativeNotificationEnabled()) - return g_browser_process->notification_platform_bridge(); -#elif defined(OS_CHROMEOS) - return g_browser_process->notification_platform_bridge(); -#else - if (NativeNotificationsEnabled(profile) && - g_browser_process->notification_platform_bridge()) { - return g_browser_process->notification_platform_bridge(); - } -#endif -#endif // BUILDFLAG(ENABLE_NATIVE_NOTIFICATIONS) - - // The platform does not support, or has not enabled, native notifications. - return nullptr; -} - -// Returns the NotificationPlatformBridge to use for the message center. May be -// a nullptr for platforms where the message center is not available. -std::unique_ptr<NotificationPlatformBridge> CreateMessageCenterBridge( - Profile* profile) { -#if BUILDFLAG(ENABLE_MESSAGE_CENTER) - return std::make_unique<NotificationPlatformBridgeMessageCenter>(profile); -#else - return nullptr; -#endif -} - void OperationCompleted() { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); } @@ -141,9 +60,7 @@ } NotificationDisplayServiceImpl::NotificationDisplayServiceImpl(Profile* profile) - : profile_(profile), - message_center_bridge_(CreateMessageCenterBridge(profile_)), - bridge_(GetNativeNotificationPlatformBridge(profile_)) { + : profile_(profile) { // TODO(peter): Move these to the NotificationDisplayServiceFactory. if (profile_) { AddNotificationHandler( @@ -179,15 +96,11 @@ #endif } - // Initialize the bridge if native notifications are available, otherwise - // signal that the bridge could not be initialized. - if (bridge_) { - bridge_->SetReadyCallback(base::BindOnce( - &NotificationDisplayServiceImpl::OnNotificationPlatformBridgeReady, - weak_factory_.GetWeakPtr())); - } else { - OnNotificationPlatformBridgeReady(false /* success */); - } + bridge_delegator_ = std::make_unique<NotificationPlatformBridgeDelegator>( + profile_, + base::BindOnce( + &NotificationDisplayServiceImpl::OnNotificationPlatformBridgeReady, + weak_factory_.GetWeakPtr())); } NotificationDisplayServiceImpl::~NotificationDisplayServiceImpl() { @@ -253,13 +166,7 @@ } void NotificationDisplayServiceImpl::Shutdown() { - if (!bridge_initialized_) - return; - - if (message_center_bridge_) - message_center_bridge_->DisplayServiceShutDown(profile_); - if (bridge_) - bridge_->DisplayServiceShutDown(profile_); + bridge_delegator_->DisplayServiceShutDown(); } void NotificationDisplayServiceImpl::Display( @@ -273,7 +180,7 @@ CHECK(profile_ || notification_type == NotificationHandler::Type::TRANSIENT); - if (!bridge_initialized_) { + if (!bridge_delegator_initialized_) { actions_.push(base::BindOnce(&NotificationDisplayServiceImpl::Display, weak_factory_.GetWeakPtr(), notification_type, notification, std::move(metadata))); @@ -283,16 +190,8 @@ for (auto& observer : observers_) observer.OnNotificationDisplayed(notification, metadata.get()); -#if BUILDFLAG(ENABLE_NATIVE_NOTIFICATIONS) - NotificationPlatformBridge* bridge = - NotificationPlatformBridge::CanHandleType(notification_type) - ? bridge_ - : message_center_bridge_.get(); - DCHECK(bridge); - - bridge->Display(notification_type, profile_, notification, - std::move(metadata)); -#endif + bridge_delegator_->Display(notification_type, notification, + std::move(metadata)); NotificationHandler* handler = GetNotificationHandler(notification_type); if (handler) @@ -304,34 +203,26 @@ const std::string& notification_id) { CHECK(profile_ || notification_type == NotificationHandler::Type::TRANSIENT); - if (!bridge_initialized_) { + if (!bridge_delegator_initialized_) { actions_.push(base::BindOnce(&NotificationDisplayServiceImpl::Close, weak_factory_.GetWeakPtr(), notification_type, notification_id)); return; } -#if BUILDFLAG(ENABLE_NATIVE_NOTIFICATIONS) - NotificationPlatformBridge* bridge = - NotificationPlatformBridge::CanHandleType(notification_type) - ? bridge_ - : message_center_bridge_.get(); - DCHECK(bridge); - - bridge->Close(profile_, notification_id); -#endif + bridge_delegator_->Close(notification_type, notification_id); } void NotificationDisplayServiceImpl::GetDisplayed( DisplayedNotificationsCallback callback) { - if (!bridge_initialized_) { + if (!bridge_delegator_initialized_) { actions_.push(base::BindOnce(&NotificationDisplayServiceImpl::GetDisplayed, weak_factory_.GetWeakPtr(), std::move(callback))); return; } - bridge_->GetDisplayed(profile_, std::move(callback)); + bridge_delegator_->GetDisplayed(std::move(callback)); } void NotificationDisplayServiceImpl::AddObserver(Observer* observer) { @@ -367,24 +258,9 @@ action_index, reply, by_user); } -void NotificationDisplayServiceImpl::OnNotificationPlatformBridgeReady( - bool success) { +void NotificationDisplayServiceImpl::OnNotificationPlatformBridgeReady() { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); -#if BUILDFLAG(ENABLE_NATIVE_NOTIFICATIONS) && !defined(OS_CHROMEOS) - if (NativeNotificationsEnabled(profile_)) { - UMA_HISTOGRAM_BOOLEAN("Notifications.UsingNativeNotificationCenter", - success); - } -#endif - - if (!success) { - // Fall back to the message center if initialization failed. Initialization - // must always succeed on platforms where the message center is unavailable. - DCHECK(message_center_bridge_); - bridge_ = message_center_bridge_.get(); - } - - bridge_initialized_ = true; + bridge_delegator_initialized_ = true; // Flush any pending actions that have yet to execute. while (!actions_.empty()) {
diff --git a/chrome/browser/notifications/notification_display_service_impl.h b/chrome/browser/notifications/notification_display_service_impl.h index ea976c0..8271f5c 100644 --- a/chrome/browser/notifications/notification_display_service_impl.h +++ b/chrome/browser/notifications/notification_display_service_impl.h
@@ -16,9 +16,9 @@ #include "chrome/browser/notifications/notification_common.h" #include "chrome/browser/notifications/notification_display_service.h" #include "chrome/browser/notifications/notification_handler.h" +#include "chrome/browser/notifications/notification_platform_bridge_delegator.h" class GURL; -class NotificationPlatformBridge; class Profile; namespace user_prefs { @@ -52,7 +52,7 @@ // received and dispatched to the right consumer depending on the type of // notification. Consumers include, service workers, pages, extensions... // - // TODO(peter): Remove this in favor of multiple targetted methods. + // TODO(peter): Remove this in favor of multiple targeted methods. virtual void ProcessNotificationOperation( NotificationCommon::Operation operation, NotificationHandler::Type notification_type, @@ -93,21 +93,21 @@ Profile* profile); private: - // Called when the NotificationPlatformBridge may have been initialized. - void OnNotificationPlatformBridgeReady(bool success); + // Called when the NotificationPlatformBridgeDelegator has been initialized. + void OnNotificationPlatformBridgeReady(); Profile* profile_; - // Bridge responsible for displaying notifications on the platform. The - // message center's bridge is maintained for platforms where it is available. - std::unique_ptr<NotificationPlatformBridge> message_center_bridge_; - NotificationPlatformBridge* bridge_; + // This NotificationPlatformBridgeDelegator delegates to either the native + // bridge or to the MessageCenter if there is no native bridge or it does not + // support certain notification types. + std::unique_ptr<NotificationPlatformBridgeDelegator> bridge_delegator_; // Tasks that need to be run once the display bridge has been initialized. base::queue<base::OnceClosure> actions_; - // Boolean tracking whether the |bridge_| has been initialized for use. - bool bridge_initialized_ = false; + // Boolean tracking whether the |bridge_delegator_| has been initialized. + bool bridge_delegator_initialized_ = false; // Map containing the notification handlers responsible for processing events. std::map<NotificationHandler::Type, std::unique_ptr<NotificationHandler>>
diff --git a/chrome/browser/notifications/notification_platform_bridge_delegator.cc b/chrome/browser/notifications/notification_platform_bridge_delegator.cc new file mode 100644 index 0000000..7ae9ce9c --- /dev/null +++ b/chrome/browser/notifications/notification_platform_bridge_delegator.cc
@@ -0,0 +1,174 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/notifications/notification_platform_bridge_delegator.h" + +#include <algorithm> +#include <utility> +#include <vector> + +#include "base/barrier_closure.h" +#include "base/bind.h" +#include "base/check.h" +#include "base/metrics/histogram_functions.h" +#include "build/build_config.h" +#include "build/buildflag.h" +#include "chrome/browser/browser_process.h" +#include "chrome/browser/notifications/notification_display_service_impl.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/common/chrome_features.h" +#include "chrome/common/pref_names.h" +#include "components/prefs/pref_service.h" +#include "ui/base/ui_base_features.h" + +#if BUILDFLAG(ENABLE_MESSAGE_CENTER) +#include "chrome/browser/notifications/notification_platform_bridge_message_center.h" +#endif + +#if defined(OS_WIN) +#include "chrome/browser/notifications/notification_platform_bridge_win.h" +#endif + +namespace { + +// Returns if the current platform has native notifications enabled. +// Platforms behave as follows: +// +// * Android, Chrome OS +// Always uses native notifications. +// +// * Windows before 10 RS4 (incl. Win8 & Win7) +// Always uses message center. +// +// * Mac OS X, Linux, Windows 10 RS4+ +// Uses native notifications by default, but can fall back to the message +// center if features::kNativeNotifications is disabled or initialization +// fails. Linux additionally checks if prefs::kAllowNativeNotifications is +// disabled and falls back to the message center if so. +// +// Please try to keep this comment up to date when changing behaviour on one of +// the platforms supported by the browser. +bool NativeNotificationsEnabled(Profile* profile) { +#if BUILDFLAG(ENABLE_NATIVE_NOTIFICATIONS) +#if defined(OS_CHROMEOS) || defined(OS_ANDROID) + return true; +#elif defined(OS_WIN) + return NotificationPlatformBridgeWin::NativeNotificationEnabled(); +#elif defined(OS_LINUX) + if (profile) { + // Prefs take precedence over flags. + PrefService* prefs = profile->GetPrefs(); + if (!prefs->GetBoolean(prefs::kAllowNativeNotifications)) + return false; + } +#endif + return base::FeatureList::IsEnabled(features::kNativeNotifications); +#endif // BUILDFLAG(ENABLE_NATIVE_NOTIFICATIONS) + return false; +} + +NotificationPlatformBridge* GetNativeNotificationPlatformBridge( + Profile* profile) { + if (NativeNotificationsEnabled(profile)) + return g_browser_process->notification_platform_bridge(); + + // The platform does not support, or has not enabled, native notifications. + return nullptr; +} + +// Returns the NotificationPlatformBridge to use for the message center. May be +// a nullptr for platforms where the message center is not available. +std::unique_ptr<NotificationPlatformBridge> CreateMessageCenterBridge( + Profile* profile) { +#if BUILDFLAG(ENABLE_MESSAGE_CENTER) + return std::make_unique<NotificationPlatformBridgeMessageCenter>(profile); +#else + return nullptr; +#endif +} + +} // namespace + +NotificationPlatformBridgeDelegator::NotificationPlatformBridgeDelegator( + Profile* profile, + base::OnceClosure ready_callback) + : profile_(profile), + message_center_bridge_(CreateMessageCenterBridge(profile_)), + native_bridge_(GetNativeNotificationPlatformBridge(profile_)), + ready_callback_(std::move(ready_callback)) { + // Initialize the |native_bridge_| if native notifications are available, + // otherwise signal that the bridge could not be initialized. + if (native_bridge_) { + native_bridge_->SetReadyCallback( + base::BindOnce(&NotificationPlatformBridgeDelegator:: + OnNativeNotificationPlatformBridgeReady, + weak_factory_.GetWeakPtr())); + } else { + OnNativeNotificationPlatformBridgeReady(/*success=*/false); + } +} + +NotificationPlatformBridgeDelegator::~NotificationPlatformBridgeDelegator() = + default; + +void NotificationPlatformBridgeDelegator::Display( + NotificationHandler::Type notification_type, + const message_center::Notification& notification, + std::unique_ptr<NotificationCommon::Metadata> metadata) { + NotificationPlatformBridge* bridge = GetBridgeForType(notification_type); + DCHECK(bridge); + bridge->Display(notification_type, profile_, notification, + std::move(metadata)); +} + +void NotificationPlatformBridgeDelegator::Close( + NotificationHandler::Type notification_type, + const std::string& notification_id) { + NotificationPlatformBridge* bridge = GetBridgeForType(notification_type); + DCHECK(bridge); + bridge->Close(profile_, notification_id); +} + +void NotificationPlatformBridgeDelegator::GetDisplayed( + GetDisplayedNotificationsCallback callback) const { + // TODO(knollr): Query both bridges to get all notifications. + NotificationPlatformBridge* bridge = + native_bridge_ ? native_bridge_ : message_center_bridge_.get(); + DCHECK(bridge); + bridge->GetDisplayed(profile_, std::move(callback)); +} + +void NotificationPlatformBridgeDelegator::DisplayServiceShutDown() { + if (message_center_bridge_) + message_center_bridge_->DisplayServiceShutDown(profile_); + if (native_bridge_) + native_bridge_->DisplayServiceShutDown(profile_); +} + +NotificationPlatformBridge* +NotificationPlatformBridgeDelegator::GetBridgeForType( + NotificationHandler::Type type) { +#if BUILDFLAG(ENABLE_NATIVE_NOTIFICATIONS) + // Prefer the native bridge if available and it can handle |type|. + if (native_bridge_ && NotificationPlatformBridge::CanHandleType(type)) + return native_bridge_; +#endif // BUILDFLAG(ENABLE_NATIVE_NOTIFICATIONS) + return message_center_bridge_.get(); +} + +void NotificationPlatformBridgeDelegator:: + OnNativeNotificationPlatformBridgeReady(bool success) { + if (!success) { + // Fall back to the message center if initialization failed. Initialization + // must always succeed on platforms where the message center is unavailable. + DCHECK(message_center_bridge_); + native_bridge_ = nullptr; + } + + base::UmaHistogramBoolean("Notifications.UsingNativeNotificationCenter", + native_bridge_ != nullptr); + + if (ready_callback_) + std::move(ready_callback_).Run(); +}
diff --git a/chrome/browser/notifications/notification_platform_bridge_delegator.h b/chrome/browser/notifications/notification_platform_bridge_delegator.h new file mode 100644 index 0000000..e6d7816 --- /dev/null +++ b/chrome/browser/notifications/notification_platform_bridge_delegator.h
@@ -0,0 +1,70 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_PLATFORM_BRIDGE_DELEGATOR_H_ +#define CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_PLATFORM_BRIDGE_DELEGATOR_H_ + +#include <memory> +#include <string> +#include <vector> + +#include "base/callback.h" +#include "base/memory/ref_counted.h" +#include "base/optional.h" +#include "base/scoped_observer.h" +#include "chrome/browser/notifications/displayed_notifications_dispatch_callback.h" +#include "chrome/browser/notifications/notification_common.h" +#include "chrome/browser/notifications/notification_handler.h" +#include "chrome/browser/notifications/notification_platform_bridge.h" +#include "ui/message_center/public/cpp/notification.h" + +class Profile; + +// This class is responsible for delegating notification events to either the +// native NotificationPlatformBridge or fall back to Chrome's own message +// center implementation. This can happen if there is no native support for +// notifications on this platform (or it has been disabled via flags). We also +// delegate to the message center if the given notification type is not +// supported on the native bridge. +class NotificationPlatformBridgeDelegator { + public: + NotificationPlatformBridgeDelegator(Profile* profile, + base::OnceClosure ready_callback); + NotificationPlatformBridgeDelegator( + const NotificationPlatformBridgeDelegator&) = delete; + NotificationPlatformBridgeDelegator& operator=( + const NotificationPlatformBridgeDelegator&) = delete; + ~NotificationPlatformBridgeDelegator(); + + void Display(NotificationHandler::Type notification_type, + const message_center::Notification& notification, + std::unique_ptr<NotificationCommon::Metadata> metadata); + + void Close(NotificationHandler::Type notification_type, + const std::string& notification_id); + + void GetDisplayed(GetDisplayedNotificationsCallback callback) const; + + void DisplayServiceShutDown(); + + private: + // Returns the NotificationPlatformBridge to use for |type|. This method is + // expected to return a valid bridge, either the native or message center one. + NotificationPlatformBridge* GetBridgeForType(NotificationHandler::Type type); + + // Called when the |native_bridge_| may have been initialized. + void OnNativeNotificationPlatformBridgeReady(bool success); + + Profile* profile_; + + // Bridge responsible for displaying notifications on the platform. The + // message center's bridge is maintained for platforms where it is available. + std::unique_ptr<NotificationPlatformBridge> message_center_bridge_; + NotificationPlatformBridge* native_bridge_; + base::OnceClosure ready_callback_; + + base::WeakPtrFactory<NotificationPlatformBridgeDelegator> weak_factory_{this}; +}; + +#endif // CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_PLATFORM_BRIDGE_DELEGATOR_H_
diff --git a/chrome/browser/password_manager/android/password_accessory_controller_impl.cc b/chrome/browser/password_manager/android/password_accessory_controller_impl.cc index fab7ace..8ba3d6c 100644 --- a/chrome/browser/password_manager/android/password_accessory_controller_impl.cc +++ b/chrome/browser/password_manager/android/password_accessory_controller_impl.cc
@@ -32,6 +32,7 @@ #include "components/autofill/core/browser/ui/accessory_sheet_enums.h" #include "components/autofill/core/common/autofill_features.h" #include "components/autofill/core/common/autofill_util.h" +#include "components/autofill/core/common/mojom/autofill_types.mojom-shared.h" #include "components/autofill/core/common/password_generation_util.h" #include "components/password_manager/content/browser/content_password_manager_driver.h" #include "components/password_manager/content/browser/content_password_manager_driver_factory.h" @@ -299,12 +300,7 @@ autofill::AccessoryTabType::PASSWORDS, GetTitle(has_suggestions, origin), std::move(info_to_add), std::move(footer_commands_to_add)); - if (base::FeatureList::IsEnabled( - password_manager::features::kRecoverFromNeverSaveAndroid) && - base::FeatureList::IsEnabled( - autofill::features::kAutofillKeyboardAccessory) && - is_password_field && - password_client_->IsSavingAndFillingEnabled(origin.GetURL())) { + if (ShouldShowRecoveryToggle(focused_field_type, origin)) { BlacklistedStatus blacklisted_status = credential_cache_->GetCredentialStore(origin).GetBlacklistedStatus(); if (blacklisted_status == BlacklistedStatus::kWasBlacklisted || @@ -381,6 +377,23 @@ }); } +bool PasswordAccessoryControllerImpl::ShouldShowRecoveryToggle( + autofill::mojom::FocusedFieldType field_type, + const url::Origin& origin) const { + if (!base::FeatureList::IsEnabled( + password_manager::features::kRecoverFromNeverSaveAndroid)) { + return false; + } + if (!base::FeatureList::IsEnabled( + autofill::features::kAutofillKeyboardAccessory)) { + return false; + } + if (!password_client_->IsSavingAndFillingEnabled(origin.GetURL())) + return false; + return field_type == FocusedFieldType::kFillablePasswordField || + field_type == FocusedFieldType::kFillableUsernameField; +} + base::WeakPtr<ManualFillingController> PasswordAccessoryControllerImpl::GetManualFillingController() { if (!mf_controller_)
diff --git a/chrome/browser/password_manager/android/password_accessory_controller_impl.h b/chrome/browser/password_manager/android/password_accessory_controller_impl.h index 5f9a99e3..7c234b8 100644 --- a/chrome/browser/password_manager/android/password_accessory_controller_impl.h +++ b/chrome/browser/password_manager/android/password_accessory_controller_impl.h
@@ -100,6 +100,11 @@ bool is_password, const url::Origin& origin) const; + // Returns true if `field_type` and `origin` of a focused field allow to show + // the option toggle to recover from a "never save" state. + bool ShouldShowRecoveryToggle(autofill::mojom::FocusedFieldType field_type, + const url::Origin& origin) const; + // Lazy-initializes and returns the ManualFillingController for the current // |web_contents_|. The lazy initialization allows injecting mocks for tests. base::WeakPtr<ManualFillingController> GetManualFillingController();
diff --git a/chrome/browser/password_manager/android/password_accessory_controller_impl_unittest.cc b/chrome/browser/password_manager/android/password_accessory_controller_impl_unittest.cc index e94de53..58ef6d7 100644 --- a/chrome/browser/password_manager/android/password_accessory_controller_impl_unittest.cc +++ b/chrome/browser/password_manager/android/password_accessory_controller_impl_unittest.cc
@@ -725,6 +725,32 @@ /*is_manual_generation_available=*/false); } +TEST_F(PasswordAccessoryControllerTest, AddsSaveToggleOnUsernameIfBlacklisted) { + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitWithFeatures( + {password_manager::features::kRecoverFromNeverSaveAndroid, + autofill::features::kAutofillKeyboardAccessory}, + {}); + cache()->SaveCredentialsAndBlacklistedForOrigin( + {}, CredentialCache::IsOriginBlacklisted(true), + url::Origin::Create(GURL(kExampleSite))); + ON_CALL(*password_client(), IsSavingAndFillingEnabled(GURL(kExampleSite))) + .WillByDefault(Return(true)); + AccessorySheetData::Builder data_builder(AccessoryTabType::PASSWORDS, + passwords_empty_str(kExampleDomain)); + data_builder + .SetOptionToggle( + l10n_util::GetStringUTF16(IDS_PASSWORD_SAVING_STATUS_TOGGLE), false, + autofill::AccessoryAction::TOGGLE_SAVE_PASSWORDS) + .AppendFooterCommand(manage_passwords_str(), + autofill::AccessoryAction::MANAGE_PASSWORDS); + EXPECT_CALL(mock_manual_filling_controller_, + RefreshSuggestions(std::move(data_builder).Build())); + controller()->RefreshSuggestionsForField( + FocusedFieldType::kFillableUsernameField, + /*is_manual_generation_available=*/false); +} + TEST_F(PasswordAccessoryControllerTest, RecordsAccessoryImpressionsForBlacklisted) { base::test::ScopedFeatureList scoped_feature_list;
diff --git a/chrome/browser/permissions/permission_request_manager_browsertest.cc b/chrome/browser/permissions/permission_request_manager_browsertest.cc index 7f17b90e..c4256c59 100644 --- a/chrome/browser/permissions/permission_request_manager_browsertest.cc +++ b/chrome/browser/permissions/permission_request_manager_browsertest.cc
@@ -206,7 +206,8 @@ void SetUpOnMainThread() override { // Skip super: It will install a mock permission UI factory, but for this // test we want to show "real" UI. - ui_test_utils::NavigateToURL(browser(), GetUrl()); + ui_test_utils::NavigateToURL(browser(), + GURL("https://toplevel.example.com")); } GURL GetUrl() { return GURL("https://example.com"); } @@ -261,7 +262,7 @@ auto cleanup = [] {}; // Leave cleanup to test harness destructor. owned_requests_.push_back( std::make_unique<permissions::PermissionRequestImpl>( - GetUrl(), GetUrl(), permission, user_gesture, base::BindOnce(decided), + GetUrl(), permission, user_gesture, base::BindOnce(decided), base::BindOnce(cleanup))); return owned_requests_.back().get(); } @@ -280,6 +281,7 @@ {"camera", ContentSettingsType::MEDIASTREAM_CAMERA}, {"protocol_handlers", ContentSettingsType::PROTOCOL_HANDLERS}, {"midi", ContentSettingsType::MIDI_SYSEX}, + {"storage_access", ContentSettingsType::STORAGE_ACCESS}, {kMultipleName, ContentSettingsType::DEFAULT}}; const auto* it = std::begin(kNameToType); for (; it != std::end(kNameToType); ++it) { @@ -311,6 +313,7 @@ case ContentSettingsType::PROTECTED_MEDIA_IDENTIFIER: // ChromeOS only. case ContentSettingsType::PPAPI_BROKER: case ContentSettingsType::PLUGINS: // Flash. + case ContentSettingsType::STORAGE_ACCESS: manager->AddRequest(source_frame, MakePermissionRequest(it->type)); break; case ContentSettingsType::DEFAULT: @@ -999,6 +1002,11 @@ ShowAndVerifyUi(); } +// Host wants to access storage from the site in which it's embedded. +IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeUi_storage_access) { + ShowAndVerifyUi(); +} + // Shows a permissions bubble with multiple requests. IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeUi_multiple) { ShowAndVerifyUi();
diff --git a/chrome/browser/resources/bookmarks/bookmarks_resources.grd b/chrome/browser/resources/bookmarks/bookmarks_resources.grd index c7be35f..0b56db8 100644 --- a/chrome/browser/resources/bookmarks/bookmarks_resources.grd +++ b/chrome/browser/resources/bookmarks/bookmarks_resources.grd
@@ -26,7 +26,7 @@ use_base_dir="false" compress="false" type="BINDATA" /> <include name="IDR_BOOKMARKS_ITEM_JS" file="${root_gen_dir}/chrome/browser/resources/bookmarks/item.js" - use_base_dir="false" compress="false" type="BINDATA" /> + use_base_dir="false" compress="false" type="BINDATA" preprocess="true" /> <include name="IDR_BOOKMARKS_LIST_JS" file="${root_gen_dir}/chrome/browser/resources/bookmarks/list.js" use_base_dir="false" compress="false" type="BINDATA" />
diff --git a/chrome/browser/resources/bookmarks/item.html b/chrome/browser/resources/bookmarks/item.html index f6501519..557afae 100644 --- a/chrome/browser/resources/bookmarks/item.html +++ b/chrome/browser/resources/bookmarks/item.html
@@ -22,6 +22,12 @@ } } +<if expr="is_macosx"> + .folder-icon { + margin: 2px; + } +</if> + #website-title { color: var(--cr-primary-text-color); flex: 1;
diff --git a/chrome/browser/resources/bookmarks/shared_style.html b/chrome/browser/resources/bookmarks/shared_style.html index b759e57..2a2a5d2 100644 --- a/chrome/browser/resources/bookmarks/shared_style.html +++ b/chrome/browser/resources/bookmarks/shared_style.html
@@ -51,12 +51,16 @@ .folder-icon { content: url(chrome://theme/IDR_FOLDER_CLOSED); - height: 20px; - min-width: 20px; - width: 20px; + height: var(--folder-icon-size); + min-width: var(--folder-icon-size); + width: var(--folder-icon-size); } <if expr="is_macosx"> + .folder-icon { + --folder-icon-size: 16px; + } + @media (prefers-color-scheme: dark) { .folder-icon { content: url(chrome://theme/IDR_FOLDER_CLOSED_WHITE); @@ -65,6 +69,10 @@ </if> <if expr="not is_macosx"> + .folder-icon { + --folder-icon-size: 20px; + } + .folder-icon[open] { content: url(chrome://theme/IDR_FOLDER_OPEN); }
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_af.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_af.xtb index ada12fa8..25f5ffa5 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_af.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_af.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">Wisselknoppie</translation> <translation id="1299774449519412690">Ligte hemelblou</translation> <translation id="1303806948938513162">Tik met 4 vingers om by die ChromeVox-kieslyste in te gaan</translation> +<translation id="1313373992684326101">Gaan na vorige afdeling. Voorbeelde sluit die Statuslaai en Lanseerder in.</translation> <translation id="1325363694295259631"><ph name="NAME" />, kieslysitemradioknoppie is ontmerk</translation> <translation id="1325946044405407859">Geelbruin</translation> <translation id="1331702245475014624"><ph name="INDEX" /> van <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">Verhoog toonhoogte</translation> <translation id="151784044608172266">Volgende sin</translation> <translation id="1524531499102321782">Braille se volgende reël</translation> +<translation id="1542513807034338907">Rollees na vorige bladsy</translation> <translation id="1546370775711804143">Rolleesbalk</translation> <translation id="1555130319947370107">Blou</translation> <translation id="1559739829547075274">Navigeer terug</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">video</translation> <translation id="4764692524839457597">verstek</translation> <translation id="4772771694153161212">Nie onderstreep nie</translation> +<translation id="4780458943471935919">Rollees na volgende bladsy</translation> <translation id="4784215347943747396">Beheer die toestel met net 1 of 2 skakelaars</translation> <translation id="4786285211967466855">Geen vorige vlak 1-opskrif nie</translation> <translation id="4787577491510559358">Sê formatering van huidige item hardop</translation> @@ -820,6 +823,7 @@ <translation id="744163271241493234">wagwoord</translation> <translation id="7484805699335881122">Verander toonhoogte wanneer jy elementsoorte en teks wat aangehaal, uitgevee, ingelas, in vetdruk of in hoofletters is, hardop sê.</translation> <translation id="7491962110804786152">oortjie</translation> +<translation id="7492497529767769458">Gaan na volgende afdeling. Voorbeelde sluit die Statuslaai en Lanseerder in.</translation> <translation id="7505149250476994901">Sê "cap" (hoofletter) voor letter</translation> <translation id="7518543783849163354">Druk die Control-sleutel om ChromeVox tydelik te laat ophou praat.</translation> <translation id="7533226154149229506">Ligte ougoud</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bs.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bs.xtb index f80a3f5e..8d3acbd 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bs.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bs.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">Dugme za uključivanje/isključivanje</translation> <translation id="1299774449519412690">Svijetla nebeskoplava</translation> <translation id="1303806948938513162">Dodirnite s 4 prsta za ulazak u menije ChromeVoxa</translation> +<translation id="1313373992684326101">Prelazak na prethodni odjeljak. Primjeri uključuju traku statusa i Pokretač.</translation> <translation id="1325363694295259631">Poništen je odabir dugmeta za izbor stavke menija <ph name="NAME" /></translation> <translation id="1325946044405407859">Zagasita</translation> <translation id="1331702245475014624"><ph name="INDEX" /> od <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">Povećaj visinu tona</translation> <translation id="151784044608172266">Sljedeća rečenica</translation> <translation id="1524531499102321782">Sljedeća linija Brailleovog pisma</translation> +<translation id="1542513807034338907">Pomicanje na prethodnu stranicu</translation> <translation id="1546370775711804143">Traka za pomicanje</translation> <translation id="1555130319947370107">Plava</translation> <translation id="1559739829547075274">Vrati se nazad</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">videozapis</translation> <translation id="4764692524839457597">zadano</translation> <translation id="4772771694153161212">Nije podvučeno</translation> +<translation id="4780458943471935919">Pomicanje na sljedeću stranicu</translation> <translation id="4784215347943747396">Kontrolirajte uređaj sa samo 1 ili 2 prekidača</translation> <translation id="4786285211967466855">Nema prethodnog naslova 1. nivoa</translation> <translation id="4787577491510559358">Najava formatiranja za trenutnu stavku</translation> @@ -820,6 +823,7 @@ <translation id="744163271241493234">urdlznk</translation> <translation id="7484805699335881122">Promijenite visinu glasa prilikom izgovaranja vrsta elemenata te teksta koji je citiran, izbrisan, boldiran, napisan u zagradi ili velikim slovima.</translation> <translation id="7491962110804786152">kart</translation> +<translation id="7492497529767769458">Prelazak na sljedeći odjeljak. Primjeri uključuju traku statusa i Pokretač.</translation> <translation id="7505149250476994901">Recite "veliko" prije slova</translation> <translation id="7518543783849163354">Da privremeno spriječite ChromeVox da govori, pritisnite tipku Ctrl.</translation> <translation id="7533226154149229506">Svijetla zlatnožuta</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ca.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ca.xtb index 068a7b9..fbff0e39 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ca.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ca.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">Botó per activar o desactivar</translation> <translation id="1299774449519412690">Blau cel clar</translation> <translation id="1303806948938513162">Toca amb 4 dits per entrar als menús de ChromeVox</translation> +<translation id="1313373992684326101">Va a la secció anterior. Entre els exemples s'inclouen la safata d'estat i el menú d'aplicacions.</translation> <translation id="1325363694295259631"><ph name="NAME" />, botó d'opció no seleccionat de l'element de menú</translation> <translation id="1325946044405407859">Canyella</translation> <translation id="1331702245475014624"><ph name="INDEX" /> de <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">Augmenta la presentació</translation> <translation id="151784044608172266">Frase següent</translation> <translation id="1524531499102321782">Va a la línia següent de Braille.</translation> +<translation id="1542513807034338907">Es desplaça a la pàgina anterior</translation> <translation id="1546370775711804143">Barra de desplaçament</translation> <translation id="1555130319947370107">Blau</translation> <translation id="1559739829547075274">Navega cap enrere</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">vídeo</translation> <translation id="4764692524839457597">opció predeterminada</translation> <translation id="4772771694153161212">Sense subratllat</translation> +<translation id="4780458943471935919">Desplaça't a la pàgina següent</translation> <translation id="4784215347943747396">Controla el dispositiu amb només 1 o 2 interruptors</translation> <translation id="4786285211967466855">No hi ha cap encapçalament anterior de nivell 1</translation> <translation id="4787577491510559358">Anuncia el format de l'element actual</translation> @@ -820,6 +823,7 @@ <translation id="744163271241493234">pwded</translation> <translation id="7484805699335881122">Canvia el to quan hi hagi tipus d'elements parlats i text entre cometes, suprimit, en negreta, entre parèntesis o en majúscula.</translation> <translation id="7491962110804786152">pestanya</translation> +<translation id="7492497529767769458">Va a la secció següent. Entre els exemples s'inclouen la safata d'estat i el menú d'aplicacions.</translation> <translation id="7505149250476994901">Digues "majúscula" abans de la lletra</translation> <translation id="7518543783849163354">Per aturar els comentaris de ChromeVox temporalment, prem la tecla Control.</translation> <translation id="7533226154149229506">Groc daurat clar</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_cs.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_cs.xtb index a7f59ba..3078726 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_cs.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_cs.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">Přepínač</translation> <translation id="1299774449519412690">Světlá nebeská modrá</translation> <translation id="1303806948938513162">Klepnutím čtyřmi prsty přejdete do nabídek funkce ChromeVox</translation> +<translation id="1313373992684326101">Přejít na předchozí sekci. Například stavový panel nebo spouštěč.</translation> <translation id="1325363694295259631"><ph name="NAME" />, nevybraný přepínač položky v nabídce</translation> <translation id="1325946044405407859">Šedobéžová</translation> <translation id="1331702245475014624"><ph name="INDEX" /> z <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">Zvýšit výšku hlasu</translation> <translation id="151784044608172266">Další věta</translation> <translation id="1524531499102321782">Braille – další řádek</translation> +<translation id="1542513807034338907">Přejít na předchozí stránku</translation> <translation id="1546370775711804143">Posuvník</translation> <translation id="1555130319947370107">Modrá</translation> <translation id="1559739829547075274">Zpět</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">video</translation> <translation id="4764692524839457597">výchozí</translation> <translation id="4772771694153161212">Bez podtržení</translation> +<translation id="4780458943471935919">Přejít na další stránku</translation> <translation id="4784215347943747396">Ovládejte zařízení jen jedním nebo dvěma přepínači</translation> <translation id="4786285211967466855">Žádný předchozí nadpis 1. úrovně není</translation> <translation id="4787577491510559358">Oznamovat formátování aktuální položky</translation> @@ -819,6 +822,7 @@ <translation id="744163271241493234">upr heslo</translation> <translation id="7484805699335881122">Změnit výšku hlasu při vyslovování typů prvků a textu, který je smazán nebo psán v uvozovkách, tučně, v závorkách nebo velkými písmeny.</translation> <translation id="7491962110804786152">karta</translation> +<translation id="7492497529767769458">Přejít na další sekci. Například stavový panel nebo spouštěč.</translation> <translation id="7505149250476994901">Před písmenem řekněte „velké“</translation> <translation id="7518543783849163354">Chcete-li hlasovou odezvu nástroje ChromeVox dočasně pozastavit, stiskněte klávesu Control.</translation> <translation id="7533226154149229506">Světle žlutá</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb index a3eb2f3..b3326c5 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">Til/fra-knap</translation> <translation id="1299774449519412690">Lys himmelblå</translation> <translation id="1303806948938513162">Tryk med fire fingre for at åbne ChromeVox-menuerne</translation> +<translation id="1313373992684326101">Gå til forrige sektion. Det kan f.eks. være statusbakken eller Appliste.</translation> <translation id="1325363694295259631">Alternativknappen <ph name="NAME" /> til menupunktet er ikke valgt</translation> <translation id="1325946044405407859">Gyldenbrun</translation> <translation id="1331702245475014624"><ph name="INDEX" /> af <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">Skru op for toneleje</translation> <translation id="151784044608172266">Næste sætning</translation> <translation id="1524531499102321782">Braille næste linje</translation> +<translation id="1542513807034338907">Rul til forrige side</translation> <translation id="1546370775711804143">Rullepanel</translation> <translation id="1555130319947370107">Blå</translation> <translation id="1559739829547075274">Naviger tilbage</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">video</translation> <translation id="4764692524839457597">standard</translation> <translation id="4772771694153161212">Ikke understregning</translation> +<translation id="4780458943471935919">Rul til næste side</translation> <translation id="4784215347943747396">Styr enheden med blot én eller to kontakter</translation> <translation id="4786285211967466855">Der er ingen forrige niveau 1-overskrifter</translation> <translation id="4787577491510559358">Oplæs formatering for aktuelt element</translation> @@ -820,6 +823,7 @@ <translation id="744163271241493234">pwded</translation> <translation id="7484805699335881122">Brug et andet toneleje, når der oplæses elementtyper, citeret tekst og slettet tekst samt tekst i parentes, med fed skrift eller med store bogstaver.</translation> <translation id="7491962110804786152">fane</translation> +<translation id="7492497529767769458">Gå til næste sektion. Det kan f.eks. være statusbakken eller Appliste.</translation> <translation id="7505149250476994901">Sig "stort" før bogstav</translation> <translation id="7518543783849163354">Tryk på Ctrl for midlertidigt at afbryde oplæsning i ChromeVox.</translation> <translation id="7533226154149229506">Lysegul gyldenris</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_el.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_el.xtb index 58cff837..c83189f 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_el.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_el.xtb
@@ -53,6 +53,7 @@ <translation id="1291286136605998134">Κουμπί εναλλαγής</translation> <translation id="1299774449519412690">Ανοιχτό μπλε του ουρανού</translation> <translation id="1303806948938513162">Πατήστε με τέσσερα δάκτυλα για εισαγωγή στα μενού ChromeVox</translation> +<translation id="1313373992684326101">Μετάβαση στην προηγούμενη ενότητα. Στα παραδείγματα περιλαμβάνονται η Περιοχή κατάστασης και η Εφαρμογή εκκίνησης.</translation> <translation id="1325363694295259631"><ph name="NAME" />, μη επιλεγμένο κουμπί επιλογής στοιχείου μενού</translation> <translation id="1325946044405407859">Ανοιχτό καφέ</translation> <translation id="1331702245475014624"><ph name="INDEX" /> από <ph name="TOTAL" /></translation> @@ -80,6 +81,7 @@ <translation id="1506187449813838456">Αύξηση τόνου</translation> <translation id="151784044608172266">Επόμενη πρόταση</translation> <translation id="1524531499102321782">Επόμενη γραμμή μπράιγ</translation> +<translation id="1542513807034338907">Κύλιση στην προηγούμενη σελίδα</translation> <translation id="1546370775711804143">Γραμμή κύλισης</translation> <translation id="1555130319947370107">Μπλε</translation> <translation id="1559739829547075274">Μετάβαση προς τα πίσω</translation> @@ -486,6 +488,7 @@ <translation id="4763480195061959176">βίντεο</translation> <translation id="4764692524839457597">προεπιλογή</translation> <translation id="4772771694153161212">Χωρίς υπογράμμιση</translation> +<translation id="4780458943471935919">Κύλιση στην επόμενη σελίδα</translation> <translation id="4784215347943747396">Ελέγξτε τη συσκευή με μόνο 1 ή 2 διακόπτες</translation> <translation id="4786285211967466855">Δεν υπάρχει προηγούμενη κεφαλίδα επιπέδου 1.</translation> <translation id="4787577491510559358">Ανακοίνωση μορφοποίησης για το τρέχον στοιχείο</translation> @@ -821,6 +824,7 @@ <translation id="744163271241493234">κωδικός πρόσβασης</translation> <translation id="7484805699335881122">Αλλάξτε τόνο όταν εκφωνείτε τους τύπους στοιχείων και το κείμενο με εισαγωγικά, διαγραφή, έντονους χαρακτήρες, παρένθεση ή κεφαλαίους χαρακτήρες.</translation> <translation id="7491962110804786152">καρτέλα</translation> +<translation id="7492497529767769458">Μεταβείτε στην επόμενη ενότητα. Στα παραδείγματα περιλαμβάνονται η Περιοχή κατάστασης και η Εφαρμογή εκκίνησης.</translation> <translation id="7505149250476994901">Πείτε "κεφαλαίο" πριν από το γράμμα</translation> <translation id="7518543783849163354">Για προσωρινή διακοπή της εκφώνησης του ChromeVox, πατήστε το πλήκτρο Control.</translation> <translation id="7533226154149229506">Ανοιχτή χρυσοκίτρινη ράβδος</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_es.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_es.xtb index e53385c..aebfe9181 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_es.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_es.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">Botón activar/desactivar</translation> <translation id="1299774449519412690">Azul cielo claro</translation> <translation id="1303806948938513162">Toca con 4 dedos para acceder a los menús de ChromeVox</translation> +<translation id="1313373992684326101">Ir a la sección anterior. Algunos ejemplos son la bandeja de estado y el menú de aplicaciones.</translation> <translation id="1325363694295259631"><ph name="NAME" />, botón de selección de opción de menú no seleccionado</translation> <translation id="1325946044405407859">Bronce</translation> <translation id="1331702245475014624"><ph name="INDEX" /> de <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">Sube el tono</translation> <translation id="151784044608172266">Frase siguiente</translation> <translation id="1524531499102321782">Línea braille posterior</translation> +<translation id="1542513807034338907">Desplazarte a la página anterior</translation> <translation id="1546370775711804143">Barra de desplazamiento</translation> <translation id="1555130319947370107">Azul</translation> <translation id="1559739829547075274">Retrocede</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">vídeo</translation> <translation id="4764692524839457597">opción predeterminada</translation> <translation id="4772771694153161212">Sin subrayado</translation> +<translation id="4780458943471935919">Desplazarse a la página siguiente</translation> <translation id="4784215347943747396">Controla el dispositivo con solo 1 o 2 interruptores</translation> <translation id="4786285211967466855">No hay ningún título de nivel 1 anterior</translation> <translation id="4787577491510559358">Indica el formato del elemento actual</translation> @@ -820,6 +823,7 @@ <translation id="744163271241493234">pwded</translation> <translation id="7484805699335881122">Cambiar el tono al leer los tipos de elementos y el texto entrecomillado, eliminado, en negrita, entre paréntesis o en mayúsculas.</translation> <translation id="7491962110804786152">tabulador</translation> +<translation id="7492497529767769458">Ir a la sección siguiente. Algunos ejemplos son la bandeja de estado y el menú de aplicaciones.</translation> <translation id="7505149250476994901">Di "mayúscula" después de la letra</translation> <translation id="7518543783849163354">Para que ChromeVox deje de hablar temporalmente, pulsa la tecla Control.</translation> <translation id="7533226154149229506">Amarillo dorado claro</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_et.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_et.xtb index 5fe488f..3c1a618 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_et.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_et.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">Lülitusnupp</translation> <translation id="1299774449519412690">Hele taevasinine</translation> <translation id="1303806948938513162">ChromeVoxi menüüdesse sisenemiseks puudutage nelja sõrmega</translation> +<translation id="1313373992684326101">Eelmise jaotise juurde liikumine. Näiteks olekusalv ja käivitaja.</translation> <translation id="1325363694295259631"><ph name="NAME" />, menüü-üksuse raadionupp on valimata</translation> <translation id="1325946044405407859">Helepruun</translation> <translation id="1331702245475014624"><ph name="INDEX" />/<ph name="TOTAL" />-st</translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">Suurendab helikõrgust</translation> <translation id="151784044608172266">Järgmine lause</translation> <translation id="1524531499102321782">Braille' järgmine rida</translation> +<translation id="1542513807034338907">Eelmisele lehele kerimine</translation> <translation id="1546370775711804143">Kerimisriba</translation> <translation id="1555130319947370107">Sinine</translation> <translation id="1559739829547075274">Liigu tagasi</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">video</translation> <translation id="4764692524839457597">vaikimisi</translation> <translation id="4772771694153161212">Allajoonimata</translation> +<translation id="4780458943471935919">Järgmisele lehele kerimine</translation> <translation id="4784215347943747396">Juhtige seadet vaid ühe või kahe lülitiga</translation> <translation id="4786285211967466855">Eelmist 1. taseme pealkirja ei ole</translation> <translation id="4787577491510559358">Praeguse üksuse vormingu ütlemine</translation> @@ -820,6 +823,7 @@ <translation id="744163271241493234">pwded</translation> <translation id="7484805699335881122">Muutke elemenditüüpide ja kustutatud, jutumärkides, paksus kirjas või sulgudes oleva või suurtähtedega kirjutatud teksti ettelugemisel helikõrgust.</translation> <translation id="7491962110804786152">Tabulaator</translation> +<translation id="7492497529767769458">Järgmise jaotise juurde liikumine. Näiteks olekusalv ja käivitaja.</translation> <translation id="7505149250476994901">Öelge enne tähte „suurtäht”</translation> <translation id="7518543783849163354">Vajutage klahvi Control, et ChromeVoxi kõne ajutiselt peatada.</translation> <translation id="7533226154149229506">Hele kuldkollane</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hi.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hi.xtb index f6b3482..1add538e 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hi.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hi.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">टॉगल बटन</translation> <translation id="1299774449519412690">हल्का आसमानी नीला</translation> <translation id="1303806948938513162">ChromeVox मेन्यू में जाने के लिए चार उंगलियों से टैप करें</translation> +<translation id="1313373992684326101">पिछले सेक्शन पर जाएं. जैसे कि स्टेटस ट्रे और लॉन्चर.</translation> <translation id="1325363694295259631"><ph name="NAME" />, मेन्यू आइटम रेडियो बटन से चुने का निशान हटाया गया</translation> <translation id="1325946044405407859">हल्का भूरा रंग</translation> <translation id="1331702245475014624"><ph name="TOTAL" /> में से <ph name="INDEX" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">पिच बढ़ाएं</translation> <translation id="151784044608172266">अगला वाक्य</translation> <translation id="1524531499102321782">अगली पंक्ति को ब्रेल में लिखें</translation> +<translation id="1542513807034338907">स्क्रोल करके पिछले पेज पर जाएं</translation> <translation id="1546370775711804143">स्क्रोल बार</translation> <translation id="1555130319947370107">नीला</translation> <translation id="1559739829547075274">'पीछे की ओर' नेविगेट करें</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">वीडियो</translation> <translation id="4764692524839457597">डिफ़ॉल्ट</translation> <translation id="4772771694153161212">अंडरलाइन नहीं है</translation> +<translation id="4780458943471935919">स्क्रोल करके अगले पेज पर जाएं</translation> <translation id="4784215347943747396">सिर्फ़ एक या दो स्विच से डिवाइस कंट्रोल करें</translation> <translation id="4786285211967466855">पहले से कोई लेवल 2 शीर्षक नहीं है</translation> <translation id="4787577491510559358">मौजूदा आइटम का फ़ॉर्मैट बताएं</translation> @@ -819,6 +822,7 @@ <translation id="744163271241493234">pwded</translation> <translation id="7484805699335881122">अलग-अलग तरह के एलिमेंट के अलावा, कोट किए गए, मिटाए गए, बोल्ड किए गए, ब्रैकेट में लिखे गए या बड़े अक्षरों में लिखे गए टेक्स्ट बोलते समय आवाज़ की रफ़्तार (पिच) बदलें.</translation> <translation id="7491962110804786152">टैब</translation> +<translation id="7492497529767769458">अगले सेक्शन पर जाएं. जैसे कि स्टेटस ट्रे और लॉन्चर.</translation> <translation id="7505149250476994901">अक्षर से पहले "बड़ा" कहें</translation> <translation id="7518543783849163354">ChromeVox को अस्थायी रूप से बोलने से रोकने के लिए, Control कुंजी दबाएं.</translation> <translation id="7533226154149229506">गोल्डन रॉड जैसा हल्का पीला रंग</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hr.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hr.xtb index ad2bc0a0..812d075 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hr.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hr.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">Prekidač</translation> <translation id="1299774449519412690">Svijetla nebeskoplava</translation> <translation id="1303806948938513162">Dodirnite s četiri prsta da biste pristupili izbornicima ChromeVoxa</translation> +<translation id="1313373992684326101">Prelazak na prethodni odjeljak. Primjeri uključuju traku statusa i Pokretač.</translation> <translation id="1325363694295259631">Izborni gumb stavke izbornika <ph name="NAME" /> je poništen</translation> <translation id="1325946044405407859">Boja kože</translation> <translation id="1331702245475014624"><ph name="INDEX" /> od <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">Povećanje visine tona</translation> <translation id="151784044608172266">Sljedeća rečenica</translation> <translation id="1524531499102321782">Sljedeći redak brajice</translation> +<translation id="1542513807034338907">Pomicanje na prethodnu stranicu</translation> <translation id="1546370775711804143">Kliznik</translation> <translation id="1555130319947370107">Plava</translation> <translation id="1559739829547075274">Kretanje unatrag</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">videozapis</translation> <translation id="4764692524839457597">zadano</translation> <translation id="4772771694153161212">Nije podcrtano</translation> +<translation id="4780458943471935919">Pomicanje na sljedeću stranicu</translation> <translation id="4784215347943747396">Kontrolirajte uređaj samo s jednim prekidačem ili dva prekidača</translation> <translation id="4786285211967466855">Nema prethodnog naslova 1. razine</translation> <translation id="4787577491510559358">Izgovori formatiranje za trenutačnu stavku</translation> @@ -820,6 +823,7 @@ <translation id="744163271241493234">zprk</translation> <translation id="7484805699335881122">Promijeni visinu glasa prilikom izgovaranja vrsta elemenata i teksta koji je citiran, izbrisan, podebljan, u zagradama ili napisan velikim slovima.</translation> <translation id="7491962110804786152">kart</translation> +<translation id="7492497529767769458">Prelazak na sljedeći odjeljak. Primjeri uključuju traku statusa i Pokretač.</translation> <translation id="7505149250476994901">Recite "cap" (veliko slovo) prije slova</translation> <translation id="7518543783849163354">Da biste privremeno zaustavili govorne povratne informacije ChromeVoxa, pritisnite tipku Control.</translation> <translation id="7533226154149229506">Svijetla zlatnožuta</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hy.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hy.xtb index 4f5c29c..d01800c 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hy.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hy.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">Փոխարկման կոճակ</translation> <translation id="1299774449519412690">Բաց երկնագույն</translation> <translation id="1303806948938513162">Հպեք 4 մատով՝ ChromeVox-ի ընտրացանկերը բացելու համար</translation> +<translation id="1313373992684326101">Անցնել նախորդ բաժին (օր․՝ Կարգավիճակի տող, Գործարկիչ և այլ)։</translation> <translation id="1325363694295259631"><ph name="NAME" />, ընտրացանկի տարրի կետակոճակն ընտրված չէ</translation> <translation id="1325946044405407859">Դեղնաշագանակագույն</translation> <translation id="1331702245475014624"><ph name="INDEX" /> / <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">Բարձրացնել ձայնածավալը</translation> <translation id="151784044608172266">Հաջորդ նախադասությունը</translation> <translation id="1524531499102321782">Հաջորդ տողը</translation> +<translation id="1542513807034338907">Ոլորեք մինչև նախորդ էջ</translation> <translation id="1546370775711804143">Ոլորագոտի</translation> <translation id="1555130319947370107">Կապույտ</translation> <translation id="1559739829547075274">Անցնել նախորդ տարրին</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">video</translation> <translation id="4764692524839457597">կանխադրված</translation> <translation id="4772771694153161212">Ընդգծումն անջատված է</translation> +<translation id="4780458943471935919">Ոլորեք մինչև հաջորդ էջ</translation> <translation id="4784215347943747396">Կառավարեք սարքն ընդամենը 1 կամ 2 փոխանջատիչի օգնությամբ</translation> <translation id="4786285211967466855">1-ին մակարդակի նախորդ վերնագիր չկա</translation> <translation id="4787577491510559358">Հնչեցնել ընթացիկ տարրի ձևաչափը</translation> @@ -820,6 +823,7 @@ <translation id="744163271241493234">pwded</translation> <translation id="7484805699335881122">Փոխել տոնը՝ տարրերի տեսակներ և մեջբերված, ջնջված, ընդգծված, փակագծերի մեջ վերցված կամ գլխատառերով գրված տեքստ արտասանելիս։</translation> <translation id="7491962110804786152">tab</translation> +<translation id="7492497529767769458">Անցնել հաջորդ բաժին (օր․՝ Կարգավիճակի տող, Գործարկիչ և այլ)։</translation> <translation id="7505149250476994901">Տառից առաջ արտասանեք «մեծատառ»</translation> <translation id="7518543783849163354">ChromeVox-ի ձայնը ժամանակավորապես անջատելու համար սեղմեք Control ստեղնը:</translation> <translation id="7533226154149229506">Բաց ոսկեդեղին</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_it.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_it.xtb index 636b8ce..1924a4c 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_it.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_it.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">Pulsante di attivazione/disattivazione</translation> <translation id="1299774449519412690">Azzurro cielo chiaro</translation> <translation id="1303806948938513162">Tocca con quattro dita per aprire i menu di ChromeVox</translation> +<translation id="1313373992684326101">Passa alla sezione precedente. Alcuni esempi includono la barra di stato e Avvio app.</translation> <translation id="1325363694295259631"><ph name="NAME" />, pulsante di opzione di una voce di menu non selezionato</translation> <translation id="1325946044405407859">Marrone chiaro</translation> <translation id="1331702245475014624"><ph name="INDEX" /> di <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">Aumenta tono</translation> <translation id="151784044608172266">Frase successiva</translation> <translation id="1524531499102321782">Braille riga successiva</translation> +<translation id="1542513807034338907">Scorri fino alla pagina precedente</translation> <translation id="1546370775711804143">Barra di scorrimento</translation> <translation id="1555130319947370107">Blu</translation> <translation id="1559739829547075274">Spostati indietro</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">video</translation> <translation id="4764692524839457597">predefinito</translation> <translation id="4772771694153161212">Non sottolineato</translation> +<translation id="4780458943471935919">Scorri fino alla pagina successiva</translation> <translation id="4784215347943747396">Controlla il dispositivo con solo uno o due sensori</translation> <translation id="4786285211967466855">Nessuna intestazione di livello 1 precedente</translation> <translation id="4787577491510559358">Annuncia la formattazione dell'elemento corrente</translation> @@ -820,6 +823,7 @@ <translation id="744163271241493234">pwded</translation> <translation id="7484805699335881122">Modifica il tono quando vengono letti tipi di elementi e testi tra virgolette, eliminati, in grassetto, tra parentesi o in maiuscolo.</translation> <translation id="7491962110804786152">Tab</translation> +<translation id="7492497529767769458">Passa alla sezione successiva. Alcuni esempi includono la barra di stato e Avvio app.</translation> <translation id="7505149250476994901">Di' "maiuscola" dopo la lettera</translation> <translation id="7518543783849163354">Per interrompere temporaneamente le funzioni vocali di ChromeVox, premi il tasto CTRL.</translation> <translation id="7533226154149229506">Giallo ocra dorato chiaro</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ka.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ka.xtb index 2f732606..1dc53182e 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ka.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ka.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">გადართვის ღილაკი</translation> <translation id="1299774449519412690">ღია ცისფერი</translation> <translation id="1303806948938513162">ChromeVox-ის მენიუებში შესასვლელად შეეხეთ 4 თითით</translation> +<translation id="1313373992684326101">წინა სექციაზე გადასვლა. მაგალითად, სტატუსის პანელზე და გამშვებზე.</translation> <translation id="1325363694295259631"><ph name="NAME" />, მენიუს ერთეული არჩევანის ღილაკი აურჩეველი</translation> <translation id="1325946044405407859">რუჯისფერი</translation> <translation id="1331702245475014624"><ph name="INDEX" /> სულ: <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">გაზარდეთ დახრა</translation> <translation id="151784044608172266">შემდეგი წინადადება</translation> <translation id="1524531499102321782">ბრაილის შემდეგი სტრიქონი</translation> +<translation id="1542513807034338907">წინა გვერდზე გადაადგილება</translation> <translation id="1546370775711804143">გადაადგილების ზოლი</translation> <translation id="1555130319947370107">ლურჯი</translation> <translation id="1559739829547075274">ნავიგაცია უკან</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">ვიდეო</translation> <translation id="4764692524839457597">ნაგულისხმევი</translation> <translation id="4772771694153161212">ხაზგაუსმელი</translation> +<translation id="4780458943471935919">შემდეგ გვერდზე გადაადგილება</translation> <translation id="4784215347943747396">მართეთ მოწყობილობა 1 ან 2 გადამრთველით</translation> <translation id="4786285211967466855">წინა 1-ლი დონის სათაური არ არის</translation> <translation id="4787577491510559358">მიმდინარე ერთეულის ფორმატირების გამოცხადება</translation> @@ -819,6 +822,7 @@ <translation id="744163271241493234">pwded</translation> <translation id="7484805699335881122">ტონის შეცვლა ელემენტების ტიპებისა და წაშლილი, გამუქებული, ბრჭყალებში ან ფრთჩხილებში ჩასმული თუ გამთავრულებული ტექსტის გამხმოვანებისას.</translation> <translation id="7491962110804786152">ჩანართი</translation> +<translation id="7492497529767769458">შემდეგ სექციაზე გადასვლა. მაგალითად, სტატუსის პანელზე და გამშვებზე.</translation> <translation id="7505149250476994901">ასომდე „მთავრულის“ წარმოთქმა</translation> <translation id="7518543783849163354">ChromeVox-ის გახმოვანების დროებით შესაწყვეტად, დააჭირეთ კლავიშს „Control“.</translation> <translation id="7533226154149229506">ღია ოქროწკეპლისფერი</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kn.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kn.xtb index e2956db..bbdbe99 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kn.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kn.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">ಟಾಗಲ್ ಬಟನ್</translation> <translation id="1299774449519412690">ತಿಳಿ ಆಕಾಶ ನೀಲಿ</translation> <translation id="1303806948938513162">ChromeVox ಮೆನುಗಳನ್ನು ಪ್ರವೇಶಿಸಲು 4 ಬೆರಳುಗಳಿಂದ ಟ್ಯಾಪ್ ಮಾಡಿ</translation> +<translation id="1313373992684326101">ಹಿಂದಿನ ವಿಭಾಗಕ್ಕೆ ಸರಿಸಿ. ಉದಾಹರಣೆಗಳು ಸ್ಥಿತಿ ಟ್ರೇ ಮತ್ತು ಲಾಂಚರ್ ಅನ್ನು ಒಳಗೊಂಡಿವೆ.</translation> <translation id="1325363694295259631"><ph name="NAME" />, ಮೆನು ಐಟಂ ರೇಡಿಯೋ ಬಟನ್ ಆಯ್ಕೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ</translation> <translation id="1325946044405407859">ಟ್ಯಾನ್</translation> <translation id="1331702245475014624"><ph name="TOTAL" /> / <ph name="INDEX" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">ಪಿಚ್ ಹೆಚ್ಚಿಸಿ</translation> <translation id="151784044608172266">ಮುಂದಿನ ವಾಕ್ಯ</translation> <translation id="1524531499102321782">ಬ್ರೈಲಿ ಮುಂದಿನ ಸಾಲು</translation> +<translation id="1542513807034338907">ಹಿಂದಿನ ಪುಟಕ್ಕೆ ಸ್ಕ್ರಾಲ್ ಮಾಡಿ</translation> <translation id="1546370775711804143">ಸ್ಕ್ರಾಲ್ ಪಟ್ಟಿ</translation> <translation id="1555130319947370107">ನೀಲಿ</translation> <translation id="1559739829547075274">ಹಿಂದಕ್ಕೆ ನ್ಯಾವಿಗೇಟ್ ಮಾಡಿ</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">ವೀಡಿಯೊ</translation> <translation id="4764692524839457597">ಡಿಫಾಲ್ಟ್</translation> <translation id="4772771694153161212">ಅಂಡರ್ಲೈನ್ ಮಾಡಿಲ್ಲ</translation> +<translation id="4780458943471935919">ಮುಂದಿನ ಪುಟಕ್ಕೆ ಸ್ಕ್ರಾಲ್ ಮಾಡಿ</translation> <translation id="4784215347943747396">ಕೇವಲ 1 ಅಥವಾ 2 ಸ್ವಿಚ್ಗಳನ್ನು ಹೊಂದಿರುವ ಸಾಧನವನ್ನು ನಿಯಂತ್ರಿಸಿ.</translation> <translation id="4786285211967466855">ಯಾವುದೇ ಹಿಂದಿನ ಹಂತ 1 ರ ಶಿರೋನಾಮೆಯಿಲ್ಲ</translation> <translation id="4787577491510559358">ಪ್ರಸ್ತುತ ಲೇಖನಕ್ಕಾಗಿ ಫಾರ್ಮ್ಯಾಟಿಂಗ್ ಅನ್ನು ಪ್ರಕಟಿಸಿ</translation> @@ -819,6 +822,7 @@ <translation id="744163271241493234">pwded</translation> <translation id="7484805699335881122">ಎಲಿಮೆಂಟ್ ಪ್ರಕಾರಗಳನ್ನು ಮಾತನಾಡುವಾಗ ಪಿಚ್ ಮತ್ತು ಉಲ್ಲೇಖಿಸಿದ, ಅಳಿಸಿದ, ಬೋಲ್ಡ್, ಆವರಣ ಅಥವಾ ದೊಡ್ಡಕ್ಷರ ಪಠ್ಯವನ್ನು ಬದಲಾಯಿಸಿ.</translation> <translation id="7491962110804786152">ಟ್ಯಾಬ್</translation> +<translation id="7492497529767769458">ಮುಂದಿನ ವಿಭಾಗಕ್ಕೆ ಸರಿಸಿ. ಉದಾಹರಣೆಗಳು ಸ್ಥಿತಿ ಟ್ರೇ ಮತ್ತು ಲಾಂಚರ್ ಅನ್ನು ಒಳಗೊಂಡಿವೆ.</translation> <translation id="7505149250476994901">ಅಕ್ಷರದ ಮೊದಲು "ದೊಡ್ಡಕ್ಷರ" ಎಂದು ಹೇಳಿ</translation> <translation id="7518543783849163354">ಮಾತನಾಡದಂತೆ ತಾತ್ಕಾಲಿಕವಾಗಿ ChromeVox ಅನ್ನು ನಿಲ್ಲಿಸಲು, Control ಕೀ ಒತ್ತಿ.</translation> <translation id="7533226154149229506">ತಿಳಿ ಗೋಲ್ಡನ್ ರಾಡ್ ಹಳದಿ</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lt.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lt.xtb index c69349d1..4dc4358a 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lt.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lt.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">Perjungimo mygtukas</translation> <translation id="1299774449519412690">Šviesi dangaus mėlynumo spalva</translation> <translation id="1303806948938513162">Kad pasiektumėte „ChromeVox“ meniu, palieskite keturiais pirštais</translation> +<translation id="1313373992684326101">Pereiti į ankstesnę skiltį. Pavyzdžiai apima būsenos dėklą ir paleidimo priemonę.</translation> <translation id="1325363694295259631">„<ph name="NAME" />“, meniu elemento akutės pasirinkimas atšauktas</translation> <translation id="1325946044405407859">Gelsvai ruda spalva</translation> <translation id="1331702245475014624"><ph name="INDEX" /> iš <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">Padidinti aukštį</translation> <translation id="151784044608172266">Kitas sakinys</translation> <translation id="1524531499102321782">Kita Brailio rašmenų eilutė</translation> +<translation id="1542513807034338907">Slinkti į ankstesnį puslapį</translation> <translation id="1546370775711804143">Slinkties juosta</translation> <translation id="1555130319947370107">Mėlyna</translation> <translation id="1559739829547075274">Eiti atgal</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">vaizdo įrašas</translation> <translation id="4764692524839457597">numatytasis</translation> <translation id="4772771694153161212">Nepabraukta</translation> +<translation id="4780458943471935919">Slinkti į kitą puslapį</translation> <translation id="4784215347943747396">Valdykite įrenginį tik 1 ar 2 jungikliais</translation> <translation id="4786285211967466855">Nėra ankstesnės 1 lygio antraštės</translation> <translation id="4787577491510559358">Pateikti dabartinio elemento formatavimą</translation> @@ -820,6 +823,7 @@ <translation id="744163271241493234">pwded</translation> <translation id="7484805699335881122">Keisti toną, kai ištariami elementų tipai ir kai tekstas cituojamas, ištrinamas, paryškinamas, rašomas skliausteliuose arba didžiosiomis raidėmis.</translation> <translation id="7491962110804786152">Tabuliavimo klavišas</translation> +<translation id="7492497529767769458">Pereiti į kitą skiltį. Pavyzdžiai apima būsenos dėklą ir paleidimo priemonę.</translation> <translation id="7505149250476994901">Prieš raidę pasakykite „cap“ (didžioji raidė)</translation> <translation id="7518543783849163354">Jei norite laikinai sustabdyti „ChromeVox“, kad nekalbėtų, paspauskite klavišą „Control“.</translation> <translation id="7533226154149229506">Blyški gelsva spalva</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mk.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mk.xtb index ddff00f..a6243b5 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mk.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mk.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">Копче за вклучување/исклучување</translation> <translation id="1299774449519412690">Светла небесносина</translation> <translation id="1303806948938513162">Допрете со 4 прста за да влезете во менијата на ChromeVox</translation> +<translation id="1313373992684326101">Одете на претходниот дел. Примерите ги вклучуваат „Фиоката за статусот“ и „Стартерот“.</translation> <translation id="1325363694295259631"><ph name="NAME" />, тркалезно копче за ставка на менито, неизбрано</translation> <translation id="1325946044405407859">Жолто-кафеава</translation> <translation id="1331702245475014624"><ph name="INDEX" /> од <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">Наголемување висина</translation> <translation id="151784044608172266">Следна реченица</translation> <translation id="1524531499102321782">Брајова следна линија</translation> +<translation id="1542513807034338907">Одете на претходната страница</translation> <translation id="1546370775711804143">Лента за лизгање</translation> <translation id="1555130319947370107">Сина</translation> <translation id="1559739829547075274">Врати се</translation> @@ -486,6 +488,7 @@ <translation id="4763480195061959176">видео</translation> <translation id="4764692524839457597">стандардно</translation> <translation id="4772771694153161212">Не е подвлечено</translation> +<translation id="4780458943471935919">Одете на следната страница</translation> <translation id="4784215347943747396">Контролирајте го уредот само со еден или два прекинувачи</translation> <translation id="4786285211967466855">Нема претходен наслов на ниво 1</translation> <translation id="4787577491510559358">Соопшти го форматирањето за тековната ставка</translation> @@ -821,6 +824,7 @@ <translation id="744163271241493234">pwded</translation> <translation id="7484805699335881122">Смени ја висината на гласот кога изговараш типови елементи и текст што е цитиран, избришан, со задебелени букви, во загради или со големи букви.</translation> <translation id="7491962110804786152">картичка</translation> +<translation id="7492497529767769458">Одете до следниот дел. Примерите ги вклучуваат „Фиоката за статусот“ и „Стартерот“.</translation> <translation id="7505149250476994901">Изговарајте „cap“ (голема) пред буквата</translation> <translation id="7518543783849163354">За привремено да го запрете зборувањето на ChromeVox, притиснете го копчето Control.</translation> <translation id="7533226154149229506">Светлозлатеста-жолта</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ml.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ml.xtb index 79bb8a4d..d12a96c 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ml.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ml.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">ടോഗിൾ ബട്ടൺ</translation> <translation id="1299774449519412690">ഇളം ആകാശനീല</translation> <translation id="1303806948938513162">ChromeVox മെനു നൽകാൻ 4 വിരലുകൾ ഉപയോഗിച്ച് ടാപ്പ് ചെയ്യുക</translation> +<translation id="1313373992684326101">മുമ്പത്തെ വിഭാഗത്തിലേക്ക് നീങ്ങുക. സ്റ്റാറ്റസ് ട്രേ, ലോഞ്ചർ എന്നിവ ഉദാഹരണങ്ങളിൽപ്പെടുന്നു.</translation> <translation id="1325363694295259631"><ph name="NAME" />, മെനു ഇനത്തിന്റെ റേഡിയോ ബട്ടണ് തിരഞ്ഞെടുത്തത് മാറ്റി</translation> <translation id="1325946044405407859">തവിട്ടുനിറം</translation> <translation id="1331702245475014624"><ph name="INDEX" /> / <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">പിച്ച് വർദ്ധിപ്പിക്കുക</translation> <translation id="151784044608172266">അടുത്ത വാക്യം</translation> <translation id="1524531499102321782">അടുത്ത ബ്രെയ്ലി വരി</translation> +<translation id="1542513807034338907">മുമ്പത്തെ പേജിലേക്ക് സ്ക്രോൾ ചെയ്യുക</translation> <translation id="1546370775711804143">സ്ക്രോൾ ബാർ</translation> <translation id="1555130319947370107">നീല</translation> <translation id="1559739829547075274">പിന്നോട്ട് നാവിഗേറ്റ് ചെയ്യുക</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">വീഡിയോ</translation> <translation id="4764692524839457597">ഡിഫോൾട്ട്</translation> <translation id="4772771694153161212">അടിവര ഇല്ല</translation> +<translation id="4780458943471935919">അടുത്ത പേജിലേക്ക് സ്ക്രോൾ ചെയ്യുക</translation> <translation id="4784215347943747396">ഒന്നോ രണ്ടോ സ്വിച്ച് ഉപയോഗിച്ച് ഉപകരണം നിയന്ത്രിക്കുക</translation> <translation id="4786285211967466855">മുൻ നില 1 ശീർഷകം ഒന്നുമില്ല</translation> <translation id="4787577491510559358">നിലവിലെ ഇനത്തിന്റെ ഫോർമാറ്റ് ചെയ്യൽ അറിയിക്കുക</translation> @@ -819,6 +822,7 @@ <translation id="744163271241493234">pwded</translation> <translation id="7484805699335881122">ഘടകത്തിന്റെ തരങ്ങളും ഉദ്ധരിച്ചതോ ഇല്ലാതാക്കിയതോ ബോൾഡ് ചെയ്തതോ ബ്രാക്കറ്റിനുള്ളിലെയോ വലിയക്ഷരത്തിലുള്ളതോ ആയ ടെക്സ്റ്റ് പറയുമ്പോൾ പിച്ച് മാറ്റുക.</translation> <translation id="7491962110804786152">ടാബ്</translation> +<translation id="7492497529767769458">അടുത്ത വിഭാഗത്തിലേക്ക് നീങ്ങുക. സ്റ്റാറ്റസ് ട്രേ, ലോഞ്ചർ എന്നിവ ഉദാഹരണങ്ങളിൽപ്പെടുന്നു.</translation> <translation id="7505149250476994901">അക്ഷരം പറയുന്നതിന് മുമ്പ് "വലിയക്ഷരം" എന്ന് പറയുക</translation> <translation id="7518543783849163354">സംസാരിക്കുന്നതിൽ നിന്ന് ChromeVox-നെ തൽക്കാലം നിർത്താൻ, കൺട്രോൾ കീ അമർത്തുക.</translation> <translation id="7533226154149229506">ഇളം ഗോൾഡൻ റോഡ് മഞ്ഞ</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mr.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mr.xtb index f21b720..d4ab2be 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mr.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mr.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">टॉगल बटण</translation> <translation id="1299774449519412690">फिकट आकाशी</translation> <translation id="1303806948938513162">ChromeVox मेनूमध्ये एंटर करण्यासाठी चार बोटांनी टॅप करा</translation> +<translation id="1313373992684326101">मागील विभागात जा. उदाहरणांमध्ये स्थिती ट्रे आणि लाँचरचा समावेश आहे.</translation> <translation id="1325363694295259631"><ph name="NAME" /> या मेनू आयटम रेडिओ बटणाची निवड रद्द केली</translation> <translation id="1325946044405407859">बदामी</translation> <translation id="1331702245475014624"><ph name="TOTAL" /> पैकी <ph name="INDEX" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">पीच वाढवा</translation> <translation id="151784044608172266">पुढील वाक्य</translation> <translation id="1524531499102321782">ब्रेल पुढील रेखा</translation> +<translation id="1542513807034338907">मागील पेजवर स्क्रोल करा</translation> <translation id="1546370775711804143">स्क्रोल बार</translation> <translation id="1555130319947370107">निळा</translation> <translation id="1559739829547075274">मागे नेव्हीगेट करा</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">व्हिडिओ</translation> <translation id="4764692524839457597">डीफॉल्ट</translation> <translation id="4772771694153161212">अधोरेखित नाही</translation> +<translation id="4780458943471935919">पुढील पेजवर स्क्रोल करा</translation> <translation id="4784215347943747396">फक्त एक किंवा दोन स्विचसोबत डिव्हाइस नियंत्रित करा</translation> <translation id="4786285211967466855">मागील पातळी एक शीर्षक नाही</translation> <translation id="4787577491510559358">सध्याचा आयटम फॉरमॅट केला असल्याचे सूचित करा</translation> @@ -820,6 +823,7 @@ <translation id="744163271241493234">pwded</translation> <translation id="7484805699335881122">घटक प्रकार आणि कोट केलेला, हटवलेला, ठळक केलेला, कंसात लिहिलेला किंवा कॅपिटलाइझ केलेला मजकूर बोलताना पिच बदला.</translation> <translation id="7491962110804786152">टॅब</translation> +<translation id="7492497529767769458">पुढील विभागात जा. उदाहरणांमध्ये स्थिती ट्रे आणि लाँचरचा समावेश आहे.</translation> <translation id="7505149250476994901">अक्षरापूर्वी "कॅप" म्हणा</translation> <translation id="7518543783849163354">तात्पुरते ChromeVox चे बोलणे थांबविण्यासाठी, Control की दाबा.</translation> <translation id="7533226154149229506">फिकट सोनेरी गडद पिवळा</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_nl.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_nl.xtb index 5f179398e..3fa591250 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_nl.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_nl.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">Schakelknop</translation> <translation id="1299774449519412690">Lichthemelsblauw</translation> <translation id="1303806948938513162">Tik met vier vingers om de ChromeVox-menu's te openen</translation> +<translation id="1313373992684326101">Naar vorige sectie. Voorbeelden omvatten het statusvak en de Launcher.</translation> <translation id="1325363694295259631"><ph name="NAME" />, keuzerondje van menu-item niet geselecteerd</translation> <translation id="1325946044405407859">Geelbruin</translation> <translation id="1331702245475014624"><ph name="INDEX" /> van <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">Toonhoogte verhogen</translation> <translation id="151784044608172266">Volgende zin</translation> <translation id="1524531499102321782">Volgende brailleregel</translation> +<translation id="1542513807034338907">Scrollen naar vorige pagina</translation> <translation id="1546370775711804143">Scrollbar</translation> <translation id="1555130319947370107">Blauw</translation> <translation id="1559739829547075274">Terug navigeren</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">video</translation> <translation id="4764692524839457597">standaard</translation> <translation id="4772771694153161212">Niet onderstreept</translation> +<translation id="4780458943471935919">Scrollen naar volgende pagina</translation> <translation id="4784215347943747396">Beheer het apparaat met slechts één of twee schakelaars</translation> <translation id="4786285211967466855">Geen vorige kop van niveau 1</translation> <translation id="4787577491510559358">Opmaak voor huidig item aankondigen</translation> @@ -819,6 +822,7 @@ <translation id="744163271241493234">pwded</translation> <translation id="7484805699335881122">Toonhoogte wijzigen als elementtypen en geciteerde, verwijderde of vetgedrukte tekst, tekst tussen aanhalingstekens of tekst met hoofdletters worden uitgesproken.</translation> <translation id="7491962110804786152">tab</translation> +<translation id="7492497529767769458">Naar volgende sectie. Voorbeelden omvatten het statusvak en de Launcher.</translation> <translation id="7505149250476994901">Eerst 'hoofdletter' zeggen vóór de letter</translation> <translation id="7518543783849163354">Druk op de Ctrl-toets om de spraakfunctie van ChromeVox tijdelijk uit te schakelen.</translation> <translation id="7533226154149229506">Licht guldenroedegeel</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_no.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_no.xtb index 82766960..d4727b8 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_no.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_no.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">Av/på-knapp</translation> <translation id="1299774449519412690">Lys himmelblå</translation> <translation id="1303806948938513162">Trykk med fire fingre for å åpne ChromeVox-menyene</translation> +<translation id="1313373992684326101">Gå til forrige del. Eksempler på dette er statusfeltet og Appoversikt.</translation> <translation id="1325363694295259631"><ph name="NAME" />, menyelement med alternativknapp som ikke er valgt</translation> <translation id="1325946044405407859">Gyllenbrun</translation> <translation id="1331702245475014624"><ph name="INDEX" /> av <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">Øk stemmeleiet</translation> <translation id="151784044608172266">Neste setning</translation> <translation id="1524531499102321782">Punktskrift – neste linje</translation> +<translation id="1542513807034338907">Rull til forrige side</translation> <translation id="1546370775711804143">Rullefelt</translation> <translation id="1555130319947370107">Blå</translation> <translation id="1559739829547075274">Naviger bakover</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">video</translation> <translation id="4764692524839457597">standard</translation> <translation id="4772771694153161212">Ikke understreking</translation> +<translation id="4780458943471935919">Rull til neste side</translation> <translation id="4784215347943747396">Styr enheten med kun én eller to brytere</translation> <translation id="4786285211967466855">Det finnes ingen tidligere overskrifter på nivå 1</translation> <translation id="4787577491510559358">Les opp formatering for det gjeldende elementet</translation> @@ -820,6 +823,7 @@ <translation id="744163271241493234">pwded</translation> <translation id="7484805699335881122">Endre tonehøyde ved opplesing av elementtyper, tekst i hermetegn, slettet tekst, fet tekst, tekst i parentes og tekst med store bokstaver.</translation> <translation id="7491962110804786152">tab</translation> +<translation id="7492497529767769458">Gå til neste del. Eksempler på dette er statusfeltet og Appoversikt.</translation> <translation id="7505149250476994901">Si «stor» før bokstaven</translation> <translation id="7518543783849163354">For å stoppe talemeldingene fra ChromeVox midlertidig, trykk på Control-tasten.</translation> <translation id="7533226154149229506">Lys gullris</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pl.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pl.xtb index 7bab4123..735186dc 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pl.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pl.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">Przycisk przełączania</translation> <translation id="1299774449519412690">Jasny błękit</translation> <translation id="1303806948938513162">Kliknij czterema palcami, by otworzyć menu ChromeVoxa</translation> +<translation id="1313373992684326101">Przejdź do poprzedniej sekcji. Przykłady: pasek stanu i Menu z aplikacjami.</translation> <translation id="1325363694295259631"><ph name="NAME" />, niewybrany przycisk pozycji menu</translation> <translation id="1325946044405407859">Pastelowobrązowy</translation> <translation id="1331702245475014624"><ph name="INDEX" /> z <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">Podnieś tonację.</translation> <translation id="151784044608172266">Następne zdanie</translation> <translation id="1524531499102321782">Pismo Braille'a – następny wiersz</translation> +<translation id="1542513807034338907">Przewiń do poprzedniej strony</translation> <translation id="1546370775711804143">Pasek przewijania</translation> <translation id="1555130319947370107">Niebieski</translation> <translation id="1559739829547075274">Przejdź wstecz</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">film</translation> <translation id="4764692524839457597">domyślne</translation> <translation id="4772771694153161212">Bez podkreślenia</translation> +<translation id="4780458943471935919">Przewiń do następnej strony</translation> <translation id="4784215347943747396">Steruj urządzeniem za pomocą 1 lub 2 przełączników</translation> <translation id="4786285211967466855">Nie ma poprzedniego nagłówka poziomu 1</translation> <translation id="4787577491510559358">Informuj głosowo o formatowaniu bieżącego elementu</translation> @@ -819,6 +822,7 @@ <translation id="744163271241493234">pwded</translation> <translation id="7484805699335881122">Zmieniaj ton w przypadku typów elementów oraz tekstu cytowanego, usuniętego, pogrubionego, pisanego wielkimi literami lub umieszczonego w nawiasach.</translation> <translation id="7491962110804786152">tab</translation> +<translation id="7492497529767769458">Przejdź do następnej sekcji. Przykłady: pasek stanu i Menu z aplikacjami.</translation> <translation id="7505149250476994901">Przed literą powiedz „wielka litera”</translation> <translation id="7518543783849163354">Aby tymczasowo wyłączyć komunikaty czytnika ChromeVox, naciśnij klawisz Ctrl.</translation> <translation id="7533226154149229506">Jasny złotożółty</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-BR.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-BR.xtb index b76c3d0..b7891ac 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-BR.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-BR.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">Botão ativar</translation> <translation id="1299774449519412690">Azul-celeste-claro</translation> <translation id="1303806948938513162">Toque com quatro dedos para entrar nos menus do ChromeVox</translation> +<translation id="1313373992684326101">Mover para a seção anterior. Alguns exemplos são a bandeja de status e o acesso rápido.</translation> <translation id="1325363694295259631">Botão de opção <ph name="NAME" /> para item de menu desmarcado</translation> <translation id="1325946044405407859">Castanho-claro</translation> <translation id="1331702245475014624"><ph name="INDEX" /> de <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">Aumentar tom de voz</translation> <translation id="151784044608172266">Próxima frase</translation> <translation id="1524531499102321782">Próxima linha Braille</translation> +<translation id="1542513807034338907">Rolar para a página anterior</translation> <translation id="1546370775711804143">Barra de rolagem</translation> <translation id="1555130319947370107">Azul</translation> <translation id="1559739829547075274">Navegar para trás</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">vídeo</translation> <translation id="4764692524839457597">padrão</translation> <translation id="4772771694153161212">Sem sublinhado</translation> +<translation id="4780458943471935919">Rolar para a próxima página</translation> <translation id="4784215347943747396">Controle o dispositivo com apenas um ou dois interruptores</translation> <translation id="4786285211967466855">Nenhum cabeçalho de nível 1 anterior</translation> <translation id="4787577491510559358">Anunciar formatação para item atual</translation> @@ -820,6 +823,7 @@ <translation id="744163271241493234">pwded</translation> <translation id="7484805699335881122">Mudar o timbre ao falar tipos de elemento, texto entre aspas ou parênteses e texto excluído, em negrito ou em letras maiúsculas.</translation> <translation id="7491962110804786152">tab</translation> +<translation id="7492497529767769458">Mover para a próxima seção. Alguns exemplos são a bandeja de status e o acesso rápido.</translation> <translation id="7505149250476994901">Dizer "maiúsculo" depois da letra</translation> <translation id="7518543783849163354">Para interromper temporariamente a fala do ChromeVox, pressione a tecla Control.</translation> <translation id="7533226154149229506">Amarelo-dourado-claro</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-PT.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-PT.xtb index 9389bd7..f1f2d672 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-PT.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-PT.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">Botão ativar/desativar</translation> <translation id="1299774449519412690">Azul-celeste escuro</translation> <translation id="1303806948938513162">Toque com 4 dedos para introduzir os menus do ChromeVox.</translation> +<translation id="1313373992684326101">Retroceda para a secção anterior. Os exemplos incluem o tabuleiro de estado e o Launcher.</translation> <translation id="1325363694295259631"><ph name="NAME" />, botão de opção do item de menu desselecionado</translation> <translation id="1325946044405407859">Bronzeado</translation> <translation id="1331702245475014624"><ph name="INDEX" /> de <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">Aumentar timbre</translation> <translation id="151784044608172266">Frase seguinte</translation> <translation id="1524531499102321782">Linha braille seguinte</translation> +<translation id="1542513807034338907">Desloque-se para a página anterior.</translation> <translation id="1546370775711804143">Barra de deslocamento</translation> <translation id="1555130319947370107">Azul</translation> <translation id="1559739829547075274">Navegar para trás</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">vídeo</translation> <translation id="4764692524839457597">predefinição</translation> <translation id="4772771694153161212">Sem sublinhado</translation> +<translation id="4780458943471935919">Desloque-se para a página seguinte.</translation> <translation id="4784215347943747396">Controle o dispositivo com apenas 1 ou 2 comutadores.</translation> <translation id="4786285211967466855">Não existe nenhum cabeçalho de nível 1 anterior.</translation> <translation id="4787577491510559358">Anunciar a formatação para o item atual</translation> @@ -820,6 +823,7 @@ <translation id="744163271241493234">pwded</translation> <translation id="7484805699335881122">Altere o tom ao dizer tipos de elementos e texto citado, eliminado, a negrito, entre parênteses ou em maiúsculas.</translation> <translation id="7491962110804786152">tab</translation> +<translation id="7492497529767769458">Avance para a secção seguinte. Os exemplos incluem o tabuleiro de estado e o Launcher.</translation> <translation id="7505149250476994901">Diga "cap" antes da letra.</translation> <translation id="7518543783849163354">Para parar temporariamente a voz do ChromeVox, prima a tecla Control.</translation> <translation id="7533226154149229506">Amarelo-ouro claro</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_si.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_si.xtb index 77e843d..651158b 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_si.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_si.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">මාරු බොත්තම</translation> <translation id="1299774449519412690">ළා අහස් නිල්</translation> <translation id="1303806948938513162">ChromeVox මෙනුවලට ඇතුළු වීමට ඇඟිලි 4ක් සමඟ තට්ටු කරන්න</translation> +<translation id="1313373992684326101">පෙර කොටස වෙත යන්න. උදාහරණවලට තත්ත්ව තැටි සහ දියත් කිරීම ඇතුළත් වේ.</translation> <translation id="1325363694295259631"><ph name="NAME" />, මෙනු අයිතම රේඩියෝ බොත්තම නොතේරිණි</translation> <translation id="1325946044405407859">පදම් කළ සම</translation> <translation id="1331702245475014624"><ph name="TOTAL" /> හි <ph name="INDEX" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">අන්තරාලය වැඩි කරන්න</translation> <translation id="151784044608172266">ඊළඟ වාක්යය</translation> <translation id="1524531499102321782">බ්රේල් ඊළඟ පේළිය</translation> +<translation id="1542513807034338907">පෙර පිටුවට අනුචලනය කරන්න</translation> <translation id="1546370775711804143">ස්ක්රෝල් බාර්</translation> <translation id="1555130319947370107">නිල්</translation> <translation id="1559739829547075274">පසුපසට ගවේශනය</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">වීඩියෝ</translation> <translation id="4764692524839457597">පෙරනිමි</translation> <translation id="4772771694153161212">යටින් ඉරි ඇඳ නොවේ</translation> +<translation id="4780458943471935919">ඊළඟ පිටුවට අනුචලනය කරන්න</translation> <translation id="4784215347943747396">1 ස්විචයක් හෝ ස්විච 2 ක් සමඟ උපාංගය පාලන කරන්න</translation> <translation id="4786285211967466855">පෙර 1 වෙනි මට්ටමේ ශීර්ෂ නැත</translation> <translation id="4787577491510559358">වත්මන් අයිතමය සඳහා ආකෘති කිරීම නිවේදන කරන්න</translation> @@ -820,6 +823,7 @@ <translation id="744163271241493234">pwded</translation> <translation id="7484805699335881122">මූලාංග වර්ග කථා කරන විට සහ උද්ධෘතව, මකා, තදකුරින්, වරහන් තුළ, හෝ කැපිටල් පාඨය වී ඇති විට ස්වරමානය වෙනස් කරන්න.</translation> <translation id="7491962110804786152">ටැබය</translation> +<translation id="7492497529767769458">ඊළඟ කොටස වෙත යන්න. උදාහරණවලට තත්ත්ව තැටි සහ දියත් කිරීම ඇතුළත් වේ.</translation> <translation id="7505149250476994901">අකුරට පෙර "මහකුරු" කථා කරන්න</translation> <translation id="7518543783849163354">ChromeVox කථා කිරීම තාවකාලිකව නැවැත්වීමට, Control යතුර ඔබන්න.</translation> <translation id="7533226154149229506">ළා රන් දණ්ඩ කහ</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sk.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sk.xtb index cf78f66..232d793 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sk.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sk.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">Prepínač</translation> <translation id="1299774449519412690">Svetlá nebeská modrá</translation> <translation id="1303806948938513162">Klepnutím štyrmi prstami prejdete do ponúk zariadenia ChromeVox</translation> +<translation id="1313373992684326101">Prejsť na predchádzajúcu sekciu. Príklady zahrnujú stavový panel a spúšťač.</translation> <translation id="1325363694295259631"><ph name="NAME" />, výber prepínača položiek ponuky bol zrušený</translation> <translation id="1325946044405407859">Okrová</translation> <translation id="1331702245475014624"><ph name="INDEX" /> z <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">Zvýšiť výšku hlasu</translation> <translation id="151784044608172266">Ďalšia veta</translation> <translation id="1524531499102321782">Braille – ďalší riadok</translation> +<translation id="1542513807034338907">Posunúť na predchádzajúcu stránku</translation> <translation id="1546370775711804143">Panel posúvania</translation> <translation id="1555130319947370107">Modrá</translation> <translation id="1559739829547075274">Prejsť späť</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">video</translation> <translation id="4764692524839457597">predvolené</translation> <translation id="4772771694153161212">Text nie je podčiarknutý</translation> +<translation id="4780458943471935919">Posunúť na ďalšiu stránku</translation> <translation id="4784215347943747396">Ovládajte zariadenie iba jedným alebo dvoma prepínačmi</translation> <translation id="4786285211967466855">Žiadny predchádzajúci nadpis prvej úrovne</translation> <translation id="4787577491510559358">Oznamovať formátovanie aktuálnej položky</translation> @@ -819,6 +822,7 @@ <translation id="744163271241493234">pwded</translation> <translation id="7484805699335881122">Zmeňte výšku hlasu pri vyslovovaní typov prvkov a citovaného, odstráneného a tučného textu, ako aj takého, ktorý je v zátvorkách alebo napísaný veľkými písmenami.</translation> <translation id="7491962110804786152">karta</translation> +<translation id="7492497529767769458">Prejsť na ďalšiu sekciu. Príklady zahrnujú stavový panel a spúšťač.</translation> <translation id="7505149250476994901">Povedať pred písmenom „veľké“</translation> <translation id="7518543783849163354">Ak chcete ChromeVox dočasne zastaviť, stlačte kláves Ctrl.</translation> <translation id="7533226154149229506">Svetlá žltá</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sl.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sl.xtb index 951f9cb..57187f3 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sl.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sl.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">Preklopni gumb</translation> <translation id="1299774449519412690">Svetlo nebesno modra</translation> <translation id="1303806948938513162">Dotaknite se s štirimi prsti, če želite odpreti menije za ChromeVox</translation> +<translation id="1313373992684326101">Premik na prejšnji razdelek. Med primeri sta vrstica stanja in zaganjalnik.</translation> <translation id="1325363694295259631"><ph name="NAME" />, izbirni gumb menijskega elementa ni izbran</translation> <translation id="1325946044405407859">Rumenorjava</translation> <translation id="1331702245475014624"><ph name="INDEX" /> od <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">Povečanje višine tona</translation> <translation id="151784044608172266">Naslednji stavek</translation> <translation id="1524531499102321782">Braillova pisava – naslednja vrstica</translation> +<translation id="1542513807034338907">Pomik na prejšnjo stran</translation> <translation id="1546370775711804143">Drsni trak</translation> <translation id="1555130319947370107">Modra</translation> <translation id="1559739829547075274">Pomik nazaj</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">video</translation> <translation id="4764692524839457597">privzeto</translation> <translation id="4772771694153161212">Ni podčrtano</translation> +<translation id="4780458943471935919">Pomik na naslednjo stran</translation> <translation id="4784215347943747396">Nadziranje naprave s samo enim ali dvema stikaloma</translation> <translation id="4786285211967466855">Ni prejšnjega naslova na ravni 1</translation> <translation id="4787577491510559358">Najava oblikovanja za trenutni element</translation> @@ -820,6 +823,7 @@ <translation id="744163271241493234">gesel</translation> <translation id="7484805699335881122">Spremeni višino tona pri izgovarjanju vrst elementov in citiranega, izbrisanega ali krepkega besedila oziroma besedila v oklepajih ali besedila z veliko začetnico.</translation> <translation id="7491962110804786152">tabulatorka</translation> +<translation id="7492497529767769458">Premik na naslednji razdelek. Med primeri sta vrstica stanja in zaganjalnik.</translation> <translation id="7505149250476994901">Pred črko izgovorite »cap« (velika črka)</translation> <translation id="7518543783849163354">Če želite začasno ustaviti izgovarjavo ChromeVoxa, pritisnite tipko Control.</translation> <translation id="7533226154149229506">Svetla zlatorumena</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr-Latn.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr-Latn.xtb index 05e5ddd..ae066d0 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr-Latn.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr-Latn.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">Dugme za uključivanje/isključivanje</translation> <translation id="1299774449519412690">Svetla nebeskoplava</translation> <translation id="1303806948938513162">Dodirnite sa 4 prsta da biste ušli u ChromeVox menije</translation> +<translation id="1313373992684326101">Pređite na prethodni odeljak. Primeri obuhvataju Statusnu traku i Pokretač.</translation> <translation id="1325363694295259631"><ph name="NAME" />, poništen je izbor dugmeta za izbor stavke menija</translation> <translation id="1325946044405407859">Žutomrka</translation> <translation id="1331702245475014624"><ph name="INDEX" /> od <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">Povećavanje registra</translation> <translation id="151784044608172266">Sledeća rečenica</translation> <translation id="1524531499102321782">Sledeći red na Brajevoj azbuci</translation> +<translation id="1542513807034338907">Pomerite do prethodne stranice</translation> <translation id="1546370775711804143">Traka za pomeranje</translation> <translation id="1555130319947370107">Plava</translation> <translation id="1559739829547075274">Kretanje unazad</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">video</translation> <translation id="4764692524839457597">podrazumevano</translation> <translation id="4772771694153161212">Nije podvučeno</translation> +<translation id="4780458943471935919">Pomerite do sledeće stranice</translation> <translation id="4784215347943747396">Kontrolišite uređaj pomoću samo 1 ili 2 prekidača</translation> <translation id="4786285211967466855">Nema prethodnog zaglavlja 1. nivoa</translation> <translation id="4787577491510559358">Opisuje formatiranje za trenutnu stavku</translation> @@ -820,6 +823,7 @@ <translation id="744163271241493234">lozinka</translation> <translation id="7484805699335881122">Promeni intonaciju prilikom izgovora tipova elemenata i citiranog, izbrisanog ili podebljanog teksta, teksta u zagradi ili teksta napisanog velikim slovima.</translation> <translation id="7491962110804786152">tab</translation> +<translation id="7492497529767769458">Pređite na sledeći odeljak. Primeri obuhvataju Statusnu traku i Pokretač.</translation> <translation id="7505149250476994901">Izgovorite „veliko“ pre slova</translation> <translation id="7518543783849163354">Da biste privremeno sprečili ChromeVox da govori, pritisnite taster Control.</translation> <translation id="7533226154149229506">Svetla zlatnožuta</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr.xtb index 8f9a438..d50d03c0 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">Дугме за укључивање/искључивање</translation> <translation id="1299774449519412690">Светла небескоплава</translation> <translation id="1303806948938513162">Додирните са 4 прста да бисте ушли у ChromeVox меније</translation> +<translation id="1313373992684326101">Пређите на претходни одељак. Примери обухватају Статусну траку и Покретач.</translation> <translation id="1325363694295259631"><ph name="NAME" />, поништен је избор дугмета за избор ставке менија</translation> <translation id="1325946044405407859">Жутомрка</translation> <translation id="1331702245475014624"><ph name="INDEX" /> од <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">Повећавање регистра</translation> <translation id="151784044608172266">Следећа реченица</translation> <translation id="1524531499102321782">Следећи ред на Брајевој азбуци</translation> +<translation id="1542513807034338907">Померите до претходне странице</translation> <translation id="1546370775711804143">Трака за померање</translation> <translation id="1555130319947370107">Плава</translation> <translation id="1559739829547075274">Кретање уназад</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">видео</translation> <translation id="4764692524839457597">подразумевано</translation> <translation id="4772771694153161212">Није подвучено</translation> +<translation id="4780458943471935919">Померите до следеће странице</translation> <translation id="4784215347943747396">Контролишите уређај помоћу само 1 или 2 прекидача</translation> <translation id="4786285211967466855">Нема претходног заглавља 1. нивоа</translation> <translation id="4787577491510559358">Описује форматирање за тренутну ставку</translation> @@ -820,6 +823,7 @@ <translation id="744163271241493234">лозинка</translation> <translation id="7484805699335881122">Промени интонацију приликом изговора типова елемената и цитираног, избрисаног или подебљаног текста, текста у загради или текста написаног великим словима.</translation> <translation id="7491962110804786152">tab</translation> +<translation id="7492497529767769458">Пређите на следећи одељак. Примери обухватају Статусну траку и Покретач.</translation> <translation id="7505149250476994901">Изговорите „велико“ пре слова</translation> <translation id="7518543783849163354">Да бисте привремено спречили ChromeVox да говори, притисните тастер Control.</translation> <translation id="7533226154149229506">Светла златножута</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sv.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sv.xtb index 5a7e5a6c..834988b 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sv.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sv.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">På/av-knapp</translation> <translation id="1299774449519412690">Ljust himmelsblå</translation> <translation id="1303806948938513162">Öppna ChromeVox-menyerna genom att trycka med fyra fingrar.</translation> +<translation id="1313373992684326101">Navigera till föregående avsnitt, till exempel statusfältet eller översikten.</translation> <translation id="1325363694295259631"><ph name="NAME" />, menyalternativ med omarkerad alternativknapp</translation> <translation id="1325946044405407859">Mellanbrun</translation> <translation id="1331702245475014624"><ph name="INDEX" /> av <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">Öka tonhöjden</translation> <translation id="151784044608172266">Nästa mening</translation> <translation id="1524531499102321782">Punktskrift på nästa rad</translation> +<translation id="1542513807034338907">Scrolla till föregående sida</translation> <translation id="1546370775711804143">Rullningslist</translation> <translation id="1555130319947370107">Blå</translation> <translation id="1559739829547075274">Navigera bakåt</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">video</translation> <translation id="4764692524839457597">standard</translation> <translation id="4772771694153161212">Inte understruken</translation> +<translation id="4780458943471935919">Scrolla till nästa sida</translation> <translation id="4784215347943747396">Styr enheten med bara en eller två brytare</translation> <translation id="4786285211967466855">Det finns ingen föregående rubrik på nivå 1</translation> <translation id="4787577491510559358">Läs upp formatering för det aktuella objektet</translation> @@ -820,6 +823,7 @@ <translation id="744163271241493234">lösenordsfält</translation> <translation id="7484805699335881122">Ändra tonhöjd när elementtyper och text i fetstil, inom parentes, skriven med versaler, citeras eller raderas läses upp.</translation> <translation id="7491962110804786152">tabb</translation> +<translation id="7492497529767769458">Navigera till nästa avsnitt, till exempel statusfältet eller översikten.</translation> <translation id="7505149250476994901">Säg ”stort” före bokstaven</translation> <translation id="7518543783849163354">Stoppa ChromeVox från att tala genom att trycka på Ctrl-tangenten.</translation> <translation id="7533226154149229506">Ljust gullrisgul</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uk.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uk.xtb index 7d9f5854..c083c715 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uk.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uk.xtb
@@ -52,6 +52,7 @@ <translation id="1291286136605998134">Перемикач</translation> <translation id="1299774449519412690">Світлий небесно-блакитний</translation> <translation id="1303806948938513162">Торкніться 4 пальцями, щоб відкрити меню ChromeVox</translation> +<translation id="1313373992684326101">Перейти до попереднього розділу. Приклади: "Панель статусу" або "Панель запуску".</translation> <translation id="1325363694295259631">Скасовано вибір перемикача пункту меню "<ph name="NAME" />"</translation> <translation id="1325946044405407859">Жовто-брунатний</translation> <translation id="1331702245475014624"><ph name="INDEX" /> з <ph name="TOTAL" /></translation> @@ -79,6 +80,7 @@ <translation id="1506187449813838456">Збільшити висоту звуку</translation> <translation id="151784044608172266">Наступне речення</translation> <translation id="1524531499102321782">Наступний рядок шрифтом Брайля</translation> +<translation id="1542513807034338907">Прокрутити до попередньої сторінки</translation> <translation id="1546370775711804143">Панель прокручування</translation> <translation id="1555130319947370107">Синій</translation> <translation id="1559739829547075274">Перейти назад</translation> @@ -485,6 +487,7 @@ <translation id="4763480195061959176">відео</translation> <translation id="4764692524839457597">за умовчанням</translation> <translation id="4772771694153161212">Без підкреслення</translation> +<translation id="4780458943471935919">Прокрутити до наступної сторінки</translation> <translation id="4784215347943747396">Керувати пристроєм за допомогою 1 або 2 перемикачів</translation> <translation id="4786285211967466855">Немає попереднього заголовка рівня 1</translation> <translation id="4787577491510559358">Озвучувати формат поточного елемента</translation> @@ -819,6 +822,7 @@ <translation id="744163271241493234">пароль</translation> <translation id="7484805699335881122">Змінювати тон під час озвучування типів елементів і цитованого чи видаленого тексту, а також фраз жирним шрифтом, у дужках або великими літерами.</translation> <translation id="7491962110804786152">вкладка</translation> +<translation id="7492497529767769458">Перейти до наступного розділу. Приклади: "Панель статусу" або "Панель запуску".</translation> <translation id="7505149250476994901">Казати "велика літера" перед буквою</translation> <translation id="7518543783849163354">Щоб тимчасово припинити звучання голосових підказок у ChromeVox, натисніть клавішу Control.</translation> <translation id="7533226154149229506">Світлий золотисто-жовтий</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access/nodes/group_node.js b/chrome/browser/resources/chromeos/accessibility/switch_access/nodes/group_node.js index 98a4d54..0f54ce2 100644 --- a/chrome/browser/resources/chromeos/accessibility/switch_access/nodes/group_node.js +++ b/chrome/browser/resources/chromeos/accessibility/switch_access/nodes/group_node.js
@@ -139,12 +139,6 @@ children.push(nodes[i]); i++; } - if (children.length <= 1) { - throw SwitchAccess.error( - SAConstants.ErrorType.ROW_TOO_SHORT, - 'Cannot group row with only one element.', - true /* shouldRecover */); - } result.push(new GroupNode(children)); }
diff --git a/chrome/browser/resources/chromeos/file_manager/OWNERS b/chrome/browser/resources/chromeos/file_manager/OWNERS new file mode 100644 index 0000000..7d236cb --- /dev/null +++ b/chrome/browser/resources/chromeos/file_manager/OWNERS
@@ -0,0 +1,2 @@ +file://ui/file_manager/OWNERS +# COMPONENT: Platform>Apps>FileManager
diff --git a/chromeos/components/file_manager/resources/browser_proxy.js b/chrome/browser/resources/chromeos/file_manager/browser_proxy.js similarity index 100% rename from chromeos/components/file_manager/resources/browser_proxy.js rename to chrome/browser/resources/chromeos/file_manager/browser_proxy.js
diff --git a/chromeos/components/file_manager/resources/file_manager.css b/chrome/browser/resources/chromeos/file_manager/file_manager.css similarity index 98% rename from chromeos/components/file_manager/resources/file_manager.css rename to chrome/browser/resources/chromeos/file_manager/file_manager.css index 2f32ae0..4a56066 100644 --- a/chromeos/components/file_manager/resources/file_manager.css +++ b/chrome/browser/resources/chromeos/file_manager/file_manager.css
@@ -1,3 +1,4 @@ /* Copyright (c) 2020 The Chromium Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ +
diff --git a/chromeos/components/file_manager/resources/file_manager.html b/chrome/browser/resources/chromeos/file_manager/file_manager.html similarity index 100% rename from chromeos/components/file_manager/resources/file_manager.html rename to chrome/browser/resources/chromeos/file_manager/file_manager.html
diff --git a/chromeos/components/file_manager/resources/file_manager.js b/chrome/browser/resources/chromeos/file_manager/file_manager.js similarity index 88% rename from chromeos/components/file_manager/resources/file_manager.js rename to chrome/browser/resources/chromeos/file_manager/file_manager.js index 8ed4391..31beeeb 100644 --- a/chromeos/components/file_manager/resources/file_manager.js +++ b/chrome/browser/resources/chromeos/file_manager/file_manager.js
@@ -20,6 +20,6 @@ console.log('eh? ' + something + '. what? ' + other); }); -document.addEventListener('DOMContentLoaded', () => { - console.info('File manager launched ...'); +document.addEventListener('DOMContentLoaded', function() { + alert('DOMContentLoaded'); });
diff --git a/chrome/browser/resources/chromeos/login/user_creation.html b/chrome/browser/resources/chromeos/login/user_creation.html index bf5f6a01..f4d415d 100644 --- a/chrome/browser/resources/chromeos/login/user_creation.html +++ b/chrome/browser/resources/chromeos/login/user_creation.html
@@ -55,7 +55,7 @@ } </style> <oobe-dialog id="userCreationDialog" role="dialog" has-buttons - title-key="userCreationTitle" subtitle-key="userCreationSubtitle" + title-key="[[titleKey_]]" subtitle-key="[[subtitleKey_]]" aria-label$="[[i18nDynamic(locale, 'userCreationTitle')]]" for-step="create"> <hd-iron-icon icon1x="oobe-32:googleg" icon2x="oobe-64:googleg"
diff --git a/chrome/browser/resources/chromeos/login/user_creation.js b/chrome/browser/resources/chromeos/login/user_creation.js index 11989e2..a6c24cd 100644 --- a/chrome/browser/resources/chromeos/login/user_creation.js +++ b/chrome/browser/resources/chromeos/login/user_creation.js
@@ -62,12 +62,23 @@ }, /** - * Is the back button visible on the first step of the screen + * Is the back button visible on the first step of the screen. Back button + * is visible iff we are in the add person flow. */ isBackButtonVisible_: { type: Boolean, value: true, - } + }, + + titleKey_: { + type: String, + value: '', + }, + + subtitleKey_: { + type: String, + value: '', + }, }, @@ -82,6 +93,11 @@ onBeforeShow() { this.selectedUserType = UserType.SELF; this.selectedSignInMethod = ''; + this.titleKey_ = this.isBackButtonVisible_ ? 'userCreationAddPersonTitle' : + 'userCreationTitle'; + this.subtitleKey_ = this.isBackButtonVisible_ ? + 'userCreationAddPersonSubtitle' : + 'userCreationSubtitle'; if (this.uiStep === UIState.CHILD) { chrome.send('updateOobeUIState', [OOBE_UI_STATE.GAIA_SIGNIN]); }
diff --git a/chrome/browser/resources/print_preview/ui/destination_list_item.html b/chrome/browser/resources/print_preview/ui/destination_list_item.html index 86d31e21..0b5bc752 100644 --- a/chrome/browser/resources/print_preview/ui/destination_list_item.html +++ b/chrome/browser/resources/print_preview/ui/destination_list_item.html
@@ -65,8 +65,21 @@ :host([stale_]) :-webkit-any(iron-icon, .name, .connection-status) { opacity: 0.4; } + +<if expr="chromeos"> + printer-status-icon-cros { + padding-inline-end: 12px; + } +</if> </style> - <iron-icon icon$="[[destination.icon]]"></iron-icon> + <iron-icon icon$="[[destination.icon]]" + hidden="[[isDestinationCrosLocal_]]"> + </iron-icon> +<if expr="chromeos"> + <printer-status-icon-cros icon-location="[[iconLocation_.DROPDOWN]]" + hidden="[[!isDestinationCrosLocal_]]"> + </printer-status-icon-cros> +</if> <span class="name searchable">[[destination.displayName]]</span> <span class="search-hint searchable">[[searchHint_]]</span> <span class="connection-status"
diff --git a/chrome/browser/resources/print_preview/ui/destination_list_item.js b/chrome/browser/resources/print_preview/ui/destination_list_item.js index f05328f..c5486104 100644 --- a/chrome/browser/resources/print_preview/ui/destination_list_item.js +++ b/chrome/browser/resources/print_preview/ui/destination_list_item.js
@@ -8,14 +8,21 @@ import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js'; import './icons.js'; import './print_preview_vars_css.js'; +// <if expr="chromeos"> +import './printer_status_icon_cros.js'; +// </if> import '../strings.m.js'; import {assert} from 'chrome://resources/js/assert.m.js'; +import {isChromeOS} from 'chrome://resources/js/cr.m.js'; import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; import {removeHighlights} from 'chrome://resources/js/search_highlight_utils.m.js'; import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {Destination, DestinationOrigin} from '../data/destination.js'; +// <if expr="chromeos"> +import {IconLocation} from '../data/printer_status_cros.js'; +// </if> import {updateHighlights} from './highlight_utils.js'; @@ -50,6 +57,13 @@ /** @private {string} */ searchHint_: String, + /** @private */ + isDestinationCrosLocal_: { + type: Boolean, + computed: 'computeIsDestinationCrosLocal_(destination)', + reflectToAttribute: true, + }, + // <if expr="chromeos"> /** @private {!DestinationConfigStatus} */ configurationStatus_: { @@ -61,10 +75,28 @@ * Mirroring the enum so that it can be used from HTML bindings. * @private */ + iconLocation_: { + type: Object, + value: IconLocation, + }, + + /** + * Mirroring the enum so that it can be used from HTML bindings. + * @private + */ statusEnum_: { type: Object, value: DestinationConfigStatus, }, + + /** @private */ + printerStatusFlagEnabled_: { + type: Boolean, + value() { + return loadTimeData.getBoolean('showPrinterStatusInDialog'); + }, + readOnly: true, + }, // </if> }, @@ -153,4 +185,24 @@ return loadTimeData.getStringF( 'extensionDestinationIconTooltip', this.destination.extensionName); }, + + /** + * True when the destination is a CrOS local printer. + * @return {boolean} + * @private + */ + computeIsDestinationCrosLocal_: function() { + if (!isChromeOS) { + return false; + } + + // <if expr="chromeos"> + if (!this.printerStatusFlagEnabled_) { + return false; + } + + return this.destination && + this.destination.origin === DestinationOrigin.CROS; + // </if> + }, });
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/os_languages_page/BUILD.gn index 865a0c63..a75b60b 100644 --- a/chrome/browser/resources/settings/chromeos/os_languages_page/BUILD.gn +++ b/chrome/browser/resources/settings/chromeos/os_languages_page/BUILD.gn
@@ -29,6 +29,7 @@ } js_library("add_input_methods_dialog") { + deps = [ "//ui/webui/resources/cr_elements:cr_scrollable_behavior" ] } js_library("change_device_language_dialog") { @@ -194,6 +195,7 @@ js_library("add_input_methods_dialog.m") { sources = [ "$root_gen_dir/chrome/browser/resources/settings/chromeos/os_languages_page/add_input_methods_dialog.m.js" ] + deps = [ "//ui/webui/resources/cr_elements:cr_scrollable_behavior.m" ] extra_deps = [ ":add_input_methods_dialog_module" ] }
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/add_input_methods_dialog.html b/chrome/browser/resources/settings/chromeos/os_languages_page/add_input_methods_dialog.html index a6caaef..dd90e77 100644 --- a/chrome/browser/resources/settings/chromeos/os_languages_page/add_input_methods_dialog.html +++ b/chrome/browser/resources/settings/chromeos/os_languages_page/add_input_methods_dialog.html
@@ -1,12 +1,86 @@ <link rel="import" href="chrome://resources/html/polymer.html"> <link rel="import" href="chrome://resources/cr_elements/cr_button/cr_button.html"> +<link rel="import" href="chrome://resources/cr_elements/cr_scrollable_behavior.html"> +<link rel="import" href="chrome://resources/cr_elements/cr_search_field/cr_search_field.html"> <link rel="import" href="chrome://resources/cr_elements/cr_dialog/cr_dialog.html"> +<link rel="import" href="chrome://resources/polymer/v1_0/iron-list/iron-list.html"> +<link rel="import" href="../metrics_recorder.html"> +<link rel="import" href="../../languages_page/languages.html"> +<link rel="import" href="../../settings_shared_css.html"> <dom-module id="os-settings-add-input-methods-dialog"> <template> + <style include="settings-shared"> + #dialogBody { + display: flex; + flex-direction: column; + height: 336px; + overflow: auto; + padding-inline-end: 0; + } + + cr-search-field { + padding-bottom: 8px; + } + + .label { + padding-bottom: 4px; + padding-top: 8px; + } + + .list-item { + color: var(--cros-text-color-primary); + min-height: 36px; + } + + cr-checkbox::part(label-container) { + white-space: nowrap; + } + </style> + <cr-dialog id="dialog" close-text="$i18n{close}" show-on-attach> <div slot="title">$i18n{addInputMethodLabel}</div> + <div id="dialogBody" slot="body" scrollable> + <cr-search-field label="$i18n{searchInputMethodsLabel}" + id="search" on-search-changed="onSearchChanged_" + on-keydown="onKeydown_" autofocus> + </cr-search-field> + <template is="dom-if" if="[[showSuggestedList_]]"> + <div id="suggestedInputMethods"> + <div class="label"> + $i18n{suggestedInputMethodsLabel} + </div> + <iron-list scroll-target="[[$$('suggestedInputMethods')]]" + items="[[suggestedInputMethods_]]"> + <template> + <cr-checkbox class="list-item no-outline" + checked="[[willAdd_(item.id, inputMethodsToAdd_.size)]]" + tab-index="[[tabIndex]]" on-change="onCheckboxChange_"> + [[item.displayName]] + </cr-checkbox> + </template> + </iron-list> + </div> + </template> + <div id="allInputMethods"> + <div id="allInputMethodsLabel" class="label" + hidden="[[!showSuggestedList_]]"> + $i18n{allInputMethodsLabel} + </div> + <iron-list scroll-target="[[$$('allInputMethods')]]" + items="[[getAllInputMethods_(languages.inputMethods, + lowercaseQueryString_)]]"> + <template> + <cr-checkbox class="list-item no-outline" + checked="[[willAdd_(item.id, inputMethodsToAdd_.size)]]" + tab-index="[[tabIndex]]" on-change="onCheckboxChange_"> + [[item.displayName]] + </cr-checkbox> + </template> + </iron-list> + </div> + </div> <div slot="button-container"> <cr-button class="cancel-button" on-click="onCancelButtonTap_"> $i18n{cancel}
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/add_input_methods_dialog.js b/chrome/browser/resources/settings/chromeos/os_languages_page/add_input_methods_dialog.js index c147185..c47f232 100644 --- a/chrome/browser/resources/settings/chromeos/os_languages_page/add_input_methods_dialog.js +++ b/chrome/browser/resources/settings/chromeos/os_languages_page/add_input_methods_dialog.js
@@ -9,12 +9,139 @@ Polymer({ is: 'os-settings-add-input-methods-dialog', + behaviors: [ + CrScrollableBehavior, + ], + properties: { + /** @type {!LanguagesModel|undefined} */ + languages: Object, + + /** @type {!LanguageHelper} */ + languageHelper: Object, + + /** @private {!Set<string>} */ + inputMethodsToAdd_: { + type: Object, + value() { + return new Set(); + }, + }, + + /** @private {!Array<!chrome.languageSettingsPrivate.InputMethod>} */ + suggestedInputMethods_: { + type: Array, + value: [], + computed: + 'getSuggestedInputMethods_(languages, languages.enabled.*, languages.inputMethods.*)', + }, + + /** @private */ + showSuggestedList_: { + type: Boolean, + value: false, + computed: + 'shouldShowSuggestedList_(suggestedInputMethods_, lowercaseQueryString_)' + }, + /** @private */ disableActionButton_: { type: Boolean, value: true, + computed: 'shouldDisableActionButton_(inputMethodsToAdd_.size)', }, + + /** @private */ + lowercaseQueryString_: { + type: String, + value: '', + }, + }, + + /** + * @param {!CustomEvent<string>} e + * @private + */ + onSearchChanged_(e) { + this.lowercaseQueryString_ = e.detail.toLocaleLowerCase(); + }, + + /** + * Get suggested input methods based on user's enabled languages and ARC IMEs + * @return {!Array<!chrome.languageSettingsPrivate.InputMethod>} + * @private + */ + getSuggestedInputMethods_() { + const languageCodes = [ + ...this.languageHelper.getEnabledLanguageCodes(), + this.languageHelper.getArcImeLanguageCode() + ]; + return this.languageHelper.getInputMethodsForLanguages(languageCodes) + .filter(inputMethod => { + return !this.languageHelper.isInputMethodEnabled(inputMethod.id); + }); + }, + + /** + * @return {!Array<!chrome.languageSettingsPrivate.InputMethod>} A list of + * possible input methods. + * @private + */ + getAllInputMethods_() { + return this.languages.inputMethods.supported.filter(inputMethod => { + // Don't show input methods which are already enabled. + if (this.languageHelper.isInputMethodEnabled(inputMethod.id)) { + return false; + } + // Show input methods whose name matches the query. + return inputMethod.displayName.toLocaleLowerCase().includes( + this.lowercaseQueryString_); + }); + }, + + /** + * @return {boolean} + * @private + */ + shouldShowSuggestedList_() { + return this.suggestedInputMethods_.length > 0 && + !this.lowercaseQueryString_; + }, + + /** + * True if the user has chosen to add this input method (checked its + * checkbox). + * @param {string} id + * @return {boolean} + * @private + */ + willAdd_(id) { + return this.inputMethodsToAdd_.has(id); + }, + + /** + * Handler for an input method checkbox. + * @param {!{model: !{item: chrome.languageSettingsPrivate.InputMethod}, + * target: !Element}} e + * @private + */ + onCheckboxChange_(e) { + const inputMethodId = e.model.item.id; + if (e.target.checked) { + this.inputMethodsToAdd_.add(inputMethodId); + } else { + this.inputMethodsToAdd_.delete(inputMethodId); + } + // Polymer doesn't notify changes to set size. + this.notifyPath('inputMethodsToAdd_.size'); + }, + + /** + * @return {boolean} + * @private + */ + shouldDisableActionButton_() { + return !this.inputMethodsToAdd_.size; }, /** @private */ @@ -22,8 +149,28 @@ this.$.dialog.close(); }, - /** @private */ + /** + * Add input methods. + * @private + */ onActionButtonTap_() { + this.inputMethodsToAdd_.forEach(id => { + this.languageHelper.addInputMethod(id); + }); + settings.recordSettingChange(); this.$.dialog.close(); }, + + /** + * @param {!KeyboardEvent} e + * @private + */ + onKeydown_(e) { + // Close dialog if 'esc' is pressed and the search box is already empty. + if (e.key === 'Escape' && !this.$.search.getValue().trim()) { + this.$.dialog.close(); + } else if (e.key !== 'PageDown' && e.key !== 'PageUp') { + this.$.search.scrollIntoViewIfNeeded(); + } + }, });
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.html b/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.html index a131b3c..78dee308 100644 --- a/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.html +++ b/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.html
@@ -242,7 +242,8 @@ </div> <template is="dom-if" if="[[showAddInputMethodsDialog_]]" restamp> - <os-settings-add-input-methods-dialog + <os-settings-add-input-methods-dialog languages="[[languages]]" + language-helper="[[languageHelper]]" on-close="onAddInputMethodsDialogClose_"> </os-settings-add-input-methods-dialog> </template>
diff --git a/chrome/browser/resources/settings/languages_page/languages.js b/chrome/browser/resources/settings/languages_page/languages.js index 14092ce..56e6967 100644 --- a/chrome/browser/resources/settings/languages_page/languages.js +++ b/chrome/browser/resources/settings/languages_page/languages.js
@@ -130,6 +130,17 @@ return new Map(); }, }, + + /** + * Hash set of enabled input methods id for mebership testings + * @private {!Set<string>} + */ + enabledInputMethodSet_: { + type: Object, + value() { + return new Set(); + } + }, // </if> /** @private Prospective UI language when the page was loaded. */ @@ -999,6 +1010,7 @@ enabledInputMethodIds = enabledInputMethodIds.concat( this.getPref('settings.language.enabled_extension_imes') .value.split(',')); + this.enabledInputMethodSet_ = new Set(enabledInputMethodIds); // Return only supported input methods. return enabledInputMethodIds @@ -1067,6 +1079,43 @@ }, /** + * Returns the input methods that support any of the given languages. + * @param {!Array<string>} languageCodes + * @return {!Array<!chrome.languageSettingsPrivate.InputMethod>} + */ + getInputMethodsForLanguages(languageCodes) { + // Input methods that have already been listed for this language. + const /** !Set<string> */ usedInputMethods = new Set(); + /** @type {!Array<chrome.languageSettingsPrivate.InputMethod>} */ + const combinedInputMethods = []; + for (const languageCode of languageCodes) { + const inputMethods = this.getInputMethodsForLanguage(languageCode); + // Get the language's unused input methods and mark them as used. + const newInputMethods = inputMethods.filter( + inputMethod => !usedInputMethods.has(inputMethod.id)); + newInputMethods.forEach( + inputMethod => usedInputMethods.add(inputMethod.id)); + combinedInputMethods.push(...newInputMethods); + } + return combinedInputMethods; + }, + + /** + * @return {!Set<string>} list of enabled language code. + */ + getEnabledLanguageCodes() { + return this.enabledLanguageSet_; + }, + + /** + * @param {string} id the input method id + * @return {boolean} True if the input method is enabled + */ + isInputMethodEnabled(id) { + return this.enabledInputMethodSet_.has(id); + }, + + /** * @param {!chrome.languageSettingsPrivate.InputMethod} inputMethod * @return {boolean} */
diff --git a/chrome/browser/resources/settings/languages_page/languages_types.js b/chrome/browser/resources/settings/languages_page/languages_types.js index 8e839ef..a390143 100644 --- a/chrome/browser/resources/settings/languages_page/languages_types.js +++ b/chrome/browser/resources/settings/languages_page/languages_types.js
@@ -223,6 +223,24 @@ getInputMethodsForLanguage(languageCode) {} /** + * Returns the input methods that support any of the given languages. + * @param {!Array<string>} languageCodes + * @return {!Array<!chrome.languageSettingsPrivate.InputMethod>} + */ + getInputMethodsForLanguages(languageCodes) {} + + /** + * @return {!Set<string>} list of enabled language code. + */ + getEnabledLanguageCodes() {} + + /** + * @param {string} id the input method id + * @return {boolean} True if the input method is enabled + */ + isInputMethodEnabled(id) {} + + /** * @param {!chrome.languageSettingsPrivate.InputMethod} inputMethod * @return {boolean} */
diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinator.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinator.java index acfae3d5..50e3e1a 100644 --- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinator.java +++ b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinator.java
@@ -7,49 +7,39 @@ import android.content.Context; import android.net.Uri; -import org.chromium.blink.mojom.TextFragmentSelectorProducer; import org.chromium.chrome.R; import org.chromium.chrome.browser.share.ChromeShareExtras; import org.chromium.chrome.browser.share.share_sheet.ChromeOptionShareCallback; -import org.chromium.chrome.browser.tab.EmptyTabObserver; -import org.chromium.chrome.browser.tab.Tab; -import org.chromium.chrome.browser.tab.TabHidingType; import org.chromium.components.browser_ui.share.ShareParams; -import org.chromium.services.service_manager.InterfaceProvider; +import org.chromium.ui.base.WindowAndroid; /** * Handles the Link To Text action in the Sharing Hub. */ -public class LinkToTextCoordinator extends EmptyTabObserver { +public class LinkToTextCoordinator { private static final String SHARE_TEXT_TEMPLATE = "\"%s\"\n%s"; private static final String TEXT_FRAGMENT_PREFIX = ":~:text="; - private static final String INVALID_SELECTOR = ""; private final Context mContext; + private final WindowAndroid mWindow; private final ChromeOptionShareCallback mChromeOptionShareCallback; private final String mVisibleUrl; private final String mSelectedText; - private final Tab mTab; - private TextFragmentSelectorProducer mProducer; - private boolean mCancelRequest; - - public LinkToTextCoordinator(Context context, Tab tab, + public LinkToTextCoordinator(Context context, WindowAndroid window, ChromeOptionShareCallback chromeOptionShareCallback, String visibleUrl, String selectedText) { mContext = context; + mWindow = window; mChromeOptionShareCallback = chromeOptionShareCallback; mVisibleUrl = visibleUrl; mSelectedText = selectedText; - mTab = tab; - mTab.addObserver(this); - mCancelRequest = false; - requestSelector(); + // TODO(1102382): Replace following line with a request to create text fragment selector and + // pass |OnSelectorReady| as callback. + onSelectorReady(""); } public void onSelectorReady(String selector) { - if (mCancelRequest) return; - String successMessage = mContext.getResources().getString(R.string.link_to_text_success_message); String failureMessage = @@ -58,10 +48,9 @@ // TODO(1102382): Consider creating SharedParams on sharesheet side. In that case there will // be no need to keep the WindowAndroid in this class. String textToShare = getTextToShare(selector); - ShareParams params = - new ShareParams.Builder(mTab.getWindowAndroid(), /*title=*/"", /*url=*/"") - .setText(textToShare) - .build(); + ShareParams params = new ShareParams.Builder(mWindow, /*title=*/"", /*url=*/"") + .setText(textToShare) + .build(); ChromeShareExtras chromeShareExtras = new ChromeShareExtras.Builder().build(); mChromeOptionShareCallback.showThirdPartyShareSheetWithMessage( @@ -69,23 +58,6 @@ System.currentTimeMillis()); } - public void requestSelector() { - if (mTab.getWebContents().getMainFrame() != mTab.getWebContents().getFocusedFrame()) { - onSelectorReady(INVALID_SELECTOR); - return; - } - - InterfaceProvider interfaces = mTab.getWebContents().getMainFrame().getRemoteInterfaces(); - mProducer = interfaces.getInterface(TextFragmentSelectorProducer.MANAGER); - mProducer.generateSelector(new TextFragmentSelectorProducer.GenerateSelectorResponse() { - @Override - public void call(String selector) { - onSelectorReady(selector); - cleanup(); - } - }); - } - public String getTextToShare(String selector) { String url = mVisibleUrl; if (!selector.isEmpty()) { @@ -95,29 +67,4 @@ } return String.format(SHARE_TEXT_TEMPLATE, mSelectedText, url); } - - // Discard results if tab is not on foreground anymore. - @Override - public void onHidden(Tab tab, @TabHidingType int type) { - cleanup(); - } - - // Discard results if tab content is changed by typing new URL in omnibox. - @Override - public void onUpdateUrl(Tab tab, String url) { - cleanup(); - } - - // Discard results if tab content crashes. - @Override - public void onCrash(Tab tab) { - cleanup(); - } - - private void cleanup() { - // TODO(gayane): Consider canceling request in renderer. - if (mProducer != null) mProducer.close(); - mCancelRequest = true; - mTab.removeObserver(this); - } } \ No newline at end of file
diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ChromeProvidedSharingOptionsProvider.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ChromeProvidedSharingOptionsProvider.java index 014cef2..70d2875 100644 --- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ChromeProvidedSharingOptionsProvider.java +++ b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ChromeProvidedSharingOptionsProvider.java
@@ -340,9 +340,10 @@ .setIcon(R.drawable.link, R.string.sharing_highlights) .setFeatureNameForMetrics("SharingHubAndroid.LinkToTextSelected") .setOnClickCallback((view) -> { - LinkToTextCoordinator linkToTextCoordinator = - new LinkToTextCoordinator(mActivity, mTabProvider.get(), - mChromeOptionShareCallback, mUrl, mShareParams.getText()); + LinkToTextCoordinator linkToTextCoordinator = new LinkToTextCoordinator( + mActivity, mTabProvider.get().getWindowAndroid(), + mChromeOptionShareCallback, mShareParams.getUrl(), + mShareParams.getText()); }) .build(); }
diff --git a/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinatorTest.java b/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinatorTest.java index 2a5b5d1..f768a0cfd 100644 --- a/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinatorTest.java +++ b/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinatorTest.java
@@ -11,7 +11,6 @@ import static org.mockito.Mockito.verify; import android.app.Activity; -import android.content.Context; import androidx.test.filters.SmallTest; @@ -20,14 +19,11 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.robolectric.Robolectric; import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.chrome.browser.share.share_sheet.ChromeOptionShareCallback; -import org.chromium.chrome.browser.tab.Tab; -import org.chromium.content_public.browser.WebContents; import org.chromium.ui.base.WindowAndroid; /** @@ -35,26 +31,10 @@ */ @RunWith(BaseRobolectricTestRunner.class) public class LinkToTextCoordinatorTest { - // Mock class for |LinkToTextCoordinator| that disables |requestSelector| call. - private class MockLinkToTextCoordinator extends LinkToTextCoordinator { - public MockLinkToTextCoordinator(Context context, Tab tab, - ChromeOptionShareCallback chromeOptionShareCallback, String visibleUrl, - String selectedText) { - super(context, tab, chromeOptionShareCallback, visibleUrl, selectedText); - } - - @Override - public void requestSelector() {} - }; - @Mock private ChromeOptionShareCallback mShareCallback; @Mock private WindowAndroid mWindow; - @Mock - private Tab mTab; - @Mock - private WebContents mWebContents; private Activity mAcivity; private static final String SELECTED_TEXT = "selection"; @@ -67,8 +47,6 @@ doNothing() .when(mShareCallback) .showThirdPartyShareSheetWithMessage(anyString(), any(), any(), anyLong()); - Mockito.when(mTab.getWebContents()).thenReturn(mWebContents); - Mockito.when(mTab.getWindowAndroid()).thenReturn(mWindow); } @Test @@ -76,8 +54,8 @@ public void getTextToShareTest() { String selector = "selector"; String expectedTextToShare = "\"selection\"\nwww.example.com#:~:text=selector"; - MockLinkToTextCoordinator coordinator = new MockLinkToTextCoordinator( - mAcivity, mTab, mShareCallback, VISIBLE_URL, SELECTED_TEXT); + LinkToTextCoordinator coordinator = new LinkToTextCoordinator( + mAcivity, mWindow, mShareCallback, VISIBLE_URL, SELECTED_TEXT); Assert.assertEquals(expectedTextToShare, coordinator.getTextToShare(selector)); } @@ -86,8 +64,8 @@ public void getTextToShareTest_URLWithFragment() { String selector = "selector"; String expectedTextToShare = "\"selection\"\nwww.example.com#:~:text=selector"; - MockLinkToTextCoordinator coordinator = new MockLinkToTextCoordinator( - mAcivity, mTab, mShareCallback, VISIBLE_URL + "#elementid", SELECTED_TEXT); + LinkToTextCoordinator coordinator = new LinkToTextCoordinator( + mAcivity, mWindow, mShareCallback, VISIBLE_URL + "#elementid", SELECTED_TEXT); Assert.assertEquals(expectedTextToShare, coordinator.getTextToShare(selector)); } @@ -96,29 +74,17 @@ public void getTextToShareTest_EmptySelector() { String selector = ""; String expectedTextToShare = "\"selection\"\nwww.example.com"; - MockLinkToTextCoordinator coordinator = new MockLinkToTextCoordinator( - mAcivity, mTab, mShareCallback, VISIBLE_URL, SELECTED_TEXT); + LinkToTextCoordinator coordinator = new LinkToTextCoordinator( + mAcivity, mWindow, mShareCallback, VISIBLE_URL, SELECTED_TEXT); Assert.assertEquals(expectedTextToShare, coordinator.getTextToShare(selector)); } @Test @SmallTest public void onSelectorReadyTest() { - MockLinkToTextCoordinator coordinator = new MockLinkToTextCoordinator( - mAcivity, mTab, mShareCallback, VISIBLE_URL, SELECTED_TEXT); + LinkToTextCoordinator coordinator = new LinkToTextCoordinator( + mAcivity, mWindow, mShareCallback, VISIBLE_URL, SELECTED_TEXT); // OnSelectorReady should call back the share sheet. - coordinator.onSelectorReady("selector"); - verify(mShareCallback) - .showThirdPartyShareSheetWithMessage(anyString(), any(), any(), anyLong()); - } - - @Test - @SmallTest - public void onSelectorReadyTest_EmptySelector() { - MockLinkToTextCoordinator coordinator = new MockLinkToTextCoordinator( - mAcivity, mTab, mShareCallback, VISIBLE_URL, SELECTED_TEXT); - // OnSelectorReady should call back the share sheet. - coordinator.onSelectorReady(""); verify(mShareCallback) .showThirdPartyShareSheetWithMessage(anyString(), any(), any(), anyLong()); }
diff --git a/chrome/browser/sharesheet/drive_share_action.cc b/chrome/browser/sharesheet/drive_share_action.cc index ceeff8b..edce64bb 100644 --- a/chrome/browser/sharesheet/drive_share_action.cc +++ b/chrome/browser/sharesheet/drive_share_action.cc
@@ -8,6 +8,7 @@ #include <vector> #include "base/strings/utf_string_conversions.h" +#include "chrome/app/vector_icons/vector_icons.h" #include "chrome/browser/sharesheet/sharesheet_types.h" #include "chrome/browser/ui/browser_navigator.h" #include "chrome/browser/ui/browser_navigator_params.h" @@ -17,6 +18,7 @@ #include "ui/base/window_open_disposition.h" #include "ui/chromeos/strings/grit/ui_chromeos_strings.h" #include "ui/gfx/image/image_skia.h" +#include "ui/gfx/paint_vector_icon.h" #include "url/gurl.h" DriveShareAction::DriveShareAction() = default; @@ -30,7 +32,8 @@ const gfx::ImageSkia DriveShareAction::GetActionIcon() { // TODO(crbug.com/1127750): Update to create the Icon at the // Sharesheet bubble view. Only get the VectorIcon here. - return gfx::ImageSkia(); + return gfx::CreateVectorIcon(kPersonAddIcon, sharesheet::kIconSize, + gfx::kPlaceholderColor); } void DriveShareAction::LaunchAction(
diff --git a/chrome/browser/storage_access_api/storage_access_grant_permission_context_unittest.cc b/chrome/browser/storage_access_api/storage_access_grant_permission_context_unittest.cc index dca9903..869472d1 100644 --- a/chrome/browser/storage_access_api/storage_access_grant_permission_context_unittest.cc +++ b/chrome/browser/storage_access_api/storage_access_grant_permission_context_unittest.cc
@@ -21,9 +21,13 @@ "API.StorageAccess.GrantIsImplicit"; constexpr char kPromptResultHistogram[] = "Permissions.Action.StorageAccess"; -constexpr char kInsecureURL[] = "http://www.example.com"; -constexpr char kSecureURL[] = "https://www.example.com"; -constexpr char kAlternateURL[] = "https://embedder_example.test"; +GURL GetTopLevelURL() { + return GURL("https://embedder.example.com"); +} + +GURL GetRequesterURL() { + return GURL("https://requester.example.com"); +} void SaveResult(ContentSetting* content_setting_result, ContentSetting content_setting) { @@ -40,7 +44,7 @@ ChromeRenderViewHostTestHarness::SetUp(); // Ensure we are navigated to some page so that the proper views get setup. - NavigateAndCommit(GURL(kInsecureURL)); + NavigateAndCommit(GetTopLevelURL()); // Create PermissionRequestManager. permissions::PermissionRequestManager::CreateForWebContents(web_contents()); @@ -78,7 +82,6 @@ /*user_gesture=*/true, base::BindOnce(&SaveResult, &result)); base::RunLoop().RunUntilIdle(); - // We should not have a prompt showing up right now. EXPECT_FALSE(manager->IsRequestInProgress()); } } @@ -95,11 +98,12 @@ }; TEST_F(StorageAccessGrantPermissionContextTest, InsecureOriginsAreAllowed) { + GURL insecure_url = GURL("http://www.example.com"); StorageAccessGrantPermissionContext permission_context(profile()); + EXPECT_TRUE(permission_context.IsPermissionAvailableToOrigins(insecure_url, + insecure_url)); EXPECT_TRUE(permission_context.IsPermissionAvailableToOrigins( - GURL(kInsecureURL), GURL(kInsecureURL))); - EXPECT_TRUE(permission_context.IsPermissionAvailableToOrigins( - GURL(kInsecureURL), GURL(kSecureURL))); + insecure_url, GetRequesterURL())); } // When the Storage Access API feature is disabled we should block the @@ -114,7 +118,7 @@ ContentSetting result = CONTENT_SETTING_DEFAULT; permission_context.DecidePermission( - web_contents(), fake_id, GURL(kSecureURL), GURL(kSecureURL), + web_contents(), fake_id, GetRequesterURL(), GetTopLevelURL(), /*user_gesture=*/true, base::BindOnce(&SaveResult, &result)); EXPECT_EQ(CONTENT_SETTING_BLOCK, result); } @@ -129,39 +133,26 @@ StorageAccessGrantPermissionContext permission_context(profile()); permissions::PermissionRequestID fake_id = CreateFakeID(); - const GURL requesting_origin(kAlternateURL); - const GURL embedding_origin(kSecureURL); - - // Ensure all our implicit grants are taken care of before we proceed to - // validate. - ExhaustImplicitGrants(requesting_origin, permission_context); + ExhaustImplicitGrants(GetRequesterURL(), permission_context); ContentSetting result = CONTENT_SETTING_DEFAULT; permission_context.DecidePermission( - web_contents(), fake_id, requesting_origin, embedding_origin, + web_contents(), fake_id, GetRequesterURL(), GetTopLevelURL(), /*user_gesture=*/true, base::BindOnce(&SaveResult, &result)); base::RunLoop().RunUntilIdle(); - // We should get a prompt showing up right now. permissions::PermissionRequestManager* manager = permissions::PermissionRequestManager::FromWebContents(web_contents()); - DCHECK(manager); - EXPECT_TRUE(manager->IsRequestInProgress()); + ASSERT_TRUE(manager); + ASSERT_TRUE(manager->IsRequestInProgress()); - // Verify the prompt is showing text that includes both of the origins we - // expect. permissions::PermissionRequest* request = manager->Requests().front(); ASSERT_TRUE(request); ASSERT_EQ(1u, manager->Requests().size()); - EXPECT_NE(request->GetMessageTextFragment().find( - base::UTF8ToUTF16(requesting_origin.host())), - base::string16::npos); - EXPECT_NE(request->GetMessageTextFragment().find( - base::UTF8ToUTF16(embedding_origin.host())), - base::string16::npos); + // Prompt should have both origins. + EXPECT_EQ(GetRequesterURL(), request->GetOrigin()); + EXPECT_EQ(GetTopLevelURL(), manager->GetEmbeddingOrigin()); - // Close the prompt and validate we get the expected setting back in our - // callback. manager->Closing(); base::RunLoop().RunUntilIdle(); EXPECT_EQ(CONTENT_SETTING_ASK, result); @@ -178,7 +169,7 @@ ContentSetting result = CONTENT_SETTING_DEFAULT; permission_context.DecidePermission( - web_contents(), fake_id, GURL(kSecureURL), GURL(kSecureURL), + web_contents(), fake_id, GetRequesterURL(), GetTopLevelURL(), /*user_gesture=*/false, base::BindOnce(&SaveResult, &result)); EXPECT_EQ(CONTENT_SETTING_BLOCK, result); } @@ -193,7 +184,7 @@ EXPECT_EQ(CONTENT_SETTING_BLOCK, permission_context .GetPermissionStatus(/*render_frame_host=*/nullptr, - GURL(kSecureURL), GURL(kSecureURL)) + GetRequesterURL(), GetTopLevelURL()) .content_setting); } @@ -207,7 +198,7 @@ EXPECT_EQ(CONTENT_SETTING_ASK, permission_context .GetPermissionStatus(/*render_frame_host=*/nullptr, - GURL(kSecureURL), GURL(kSecureURL)) + GetRequesterURL(), GetTopLevelURL()) .content_setting); } @@ -224,28 +215,21 @@ StorageAccessGrantPermissionContext permission_context(profile()); permissions::PermissionRequestID fake_id = CreateFakeID(); - const GURL requesting_origin_1(kAlternateURL); - const GURL requesting_origin_2(kInsecureURL); - const GURL embedding_origin(kSecureURL); - - // Ensure all our implicit grants are taken care of for |requesting_origin_1| - // before we proceed to validate. - ExhaustImplicitGrants(requesting_origin_1, permission_context); + ExhaustImplicitGrants(GetRequesterURL(), permission_context); histogram_tester.ExpectTotalCount(kGrantIsImplicitHistogram, 5); histogram_tester.ExpectBucketCount(kGrantIsImplicitHistogram, /*implicit_grant=*/1, 5); ContentSetting result = CONTENT_SETTING_DEFAULT; permission_context.DecidePermission( - web_contents(), fake_id, requesting_origin_1, embedding_origin, + web_contents(), fake_id, GetRequesterURL(), GetTopLevelURL(), /*user_gesture=*/true, base::BindOnce(&SaveResult, &result)); base::RunLoop().RunUntilIdle(); - // We should get a prompt showing up right now. permissions::PermissionRequestManager* manager = permissions::PermissionRequestManager::FromWebContents(web_contents()); - DCHECK(manager); - EXPECT_TRUE(manager->IsRequestInProgress()); + ASSERT_TRUE(manager); + ASSERT_TRUE(manager->IsRequestInProgress()); // Close the prompt and validate we get the expected setting back in our // callback. @@ -260,11 +244,13 @@ histogram_tester.ExpectBucketCount(kPromptResultHistogram, /*DISMISSED=*/2, 1); + GURL alternate_requester_url = GURL("https://requester2_example.com"); + // However now if a different requesting origin makes a request we should see // it gets auto-granted as the limit has not been reached for it yet. result = CONTENT_SETTING_DEFAULT; permission_context.DecidePermission( - web_contents(), fake_id, requesting_origin_2, embedding_origin, + web_contents(), fake_id, alternate_requester_url, GetTopLevelURL(), /*user_gesture=*/true, base::BindOnce(&SaveResult, &result)); base::RunLoop().RunUntilIdle(); @@ -290,28 +276,21 @@ StorageAccessGrantPermissionContext permission_context(profile()); permissions::PermissionRequestID fake_id = CreateFakeID(); - const GURL requesting_origin_1(kAlternateURL); - const GURL requesting_origin_2(kInsecureURL); - const GURL embedding_origin(kSecureURL); - - // Ensure all our implicit grants are taken care of for |requesting_origin_1| - // before we proceed to validate. - ExhaustImplicitGrants(requesting_origin_1, permission_context); + ExhaustImplicitGrants(GetRequesterURL(), permission_context); histogram_tester.ExpectTotalCount(kGrantIsImplicitHistogram, 5); histogram_tester.ExpectBucketCount(kGrantIsImplicitHistogram, /*implicit_grant=*/1, 5); ContentSetting result = CONTENT_SETTING_DEFAULT; permission_context.DecidePermission( - web_contents(), fake_id, requesting_origin_1, embedding_origin, + web_contents(), fake_id, GetRequesterURL(), GetTopLevelURL(), /*user_gesture=*/true, base::BindOnce(&SaveResult, &result)); base::RunLoop().RunUntilIdle(); - // We should get a prompt showing up right now. permissions::PermissionRequestManager* manager = permissions::PermissionRequestManager::FromWebContents(web_contents()); - DCHECK(manager); - EXPECT_TRUE(manager->IsRequestInProgress()); + ASSERT_TRUE(manager); + ASSERT_TRUE(manager->IsRequestInProgress()); // Deny the prompt and validate we get the expected setting back in our // callback. @@ -338,28 +317,21 @@ StorageAccessGrantPermissionContext permission_context(profile()); permissions::PermissionRequestID fake_id = CreateFakeID(); - const GURL requesting_origin_1(kAlternateURL); - const GURL requesting_origin_2(kInsecureURL); - const GURL embedding_origin(kSecureURL); - - // Ensure all our implicit grants are taken care of for |requesting_origin_1| - // before we proceed to validate. - ExhaustImplicitGrants(requesting_origin_1, permission_context); + ExhaustImplicitGrants(GetRequesterURL(), permission_context); histogram_tester.ExpectTotalCount(kGrantIsImplicitHistogram, 5); histogram_tester.ExpectBucketCount(kGrantIsImplicitHistogram, /*implicit_grant=*/1, 5); ContentSetting result = CONTENT_SETTING_DEFAULT; permission_context.DecidePermission( - web_contents(), fake_id, requesting_origin_1, embedding_origin, + web_contents(), fake_id, GetRequesterURL(), GetTopLevelURL(), /*user_gesture=*/true, base::BindOnce(&SaveResult, &result)); base::RunLoop().RunUntilIdle(); - // We should get a prompt showing up right now. permissions::PermissionRequestManager* manager = permissions::PermissionRequestManager::FromWebContents(web_contents()); - DCHECK(manager); - EXPECT_TRUE(manager->IsRequestInProgress()); + ASSERT_TRUE(manager); + ASSERT_TRUE(manager->IsRequestInProgress()); // Accept the prompt and validate we get the expected setting back in our // callback.
diff --git a/chrome/browser/sync/test/integration/password_manager_sync_test.cc b/chrome/browser/sync/test/integration/password_manager_sync_test.cc index c27fd7e8..261e918 100644 --- a/chrome/browser/sync/test/integration/password_manager_sync_test.cc +++ b/chrome/browser/sync/test/integration/password_manager_sync_test.cc
@@ -836,13 +836,14 @@ EXPECT_TRUE(password_manager::features_util::IsOptedInForAccountStorage( GetProfile(0)->GetPrefs(), GetSyncService(0))); - // Clear all data including cookies and passwords. + // Clear cookies and account passwords. content::BrowsingDataRemover* remover = content::BrowserContext::GetBrowsingDataRemover(GetProfile(0)); content::BrowsingDataRemoverCompletionObserver observer(remover); remover->RemoveAndReply( base::Time(), base::Time::Max(), - ChromeBrowsingDataRemoverDelegate::ALL_DATA_TYPES, + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA | + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_ACCOUNT_PASSWORDS, content::BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, &observer); observer.BlockUntilCompletion();
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 1d57541b..37689889 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -2179,6 +2179,10 @@ "webui/chromeos/drive_internals_ui.h", "webui/chromeos/edu_account_login_handler_chromeos.cc", "webui/chromeos/edu_account_login_handler_chromeos.h", + "webui/chromeos/file_manager/file_manager_page_handler.cc", + "webui/chromeos/file_manager/file_manager_page_handler.h", + "webui/chromeos/file_manager/file_manager_ui.cc", + "webui/chromeos/file_manager/file_manager_ui.h", "webui/chromeos/first_run/first_run_actor.cc", "webui/chromeos/first_run/first_run_actor.h", "webui/chromeos/first_run/first_run_handler.cc", @@ -2547,6 +2551,7 @@ "//chrome/browser/ui/webui/chromeos/add_supervision:mojo_bindings", "//chrome/browser/ui/webui/chromeos/crostini_installer:mojo_bindings", "//chrome/browser/ui/webui/chromeos/crostini_upgrader:mojo_bindings", + "//chrome/browser/ui/webui/chromeos/file_manager:mojo_bindings", "//chrome/browser/ui/webui/chromeos/machine_learning:mojo_bindings", "//chrome/browser/ui/webui/settings/chromeos/constants:mojom", "//chrome/browser/ui/webui/settings/chromeos/search:mojo_bindings", @@ -2652,7 +2657,6 @@ ] } deps += [ - "//chromeos/components/file_manager:file_manager_ui", "//chromeos/components/sample_system_web_app_ui", "//chromeos/components/telemetry_extension_ui", ]
diff --git a/chrome/browser/ui/android/passwords/manual_filling_view_android.cc b/chrome/browser/ui/android/passwords/manual_filling_view_android.cc index c24e352..d662336 100644 --- a/chrome/browser/ui/android/passwords/manual_filling_view_android.cc +++ b/chrome/browser/ui/android/passwords/manual_filling_view_android.cc
@@ -44,58 +44,61 @@ ManualFillingViewAndroid::ManualFillingViewAndroid( ManualFillingController* controller) - : controller_(controller) { - ui::ViewAndroid* view_android = controller_->container_view(); - DCHECK(view_android); - java_object_.Reset(Java_ManualFillingComponentBridge_create( - base::android::AttachCurrentThread(), reinterpret_cast<intptr_t>(this), - view_android->GetWindowAndroid()->GetJavaObject())); -} + : controller_(controller) {} ManualFillingViewAndroid::~ManualFillingViewAndroid() { - DCHECK(!java_object_.is_null()); + if (!java_object_internal_) + return; // No work to do. Java_ManualFillingComponentBridge_destroy( - base::android::AttachCurrentThread(), java_object_); - java_object_.Reset(nullptr); + base::android::AttachCurrentThread(), java_object_internal_); + java_object_internal_.Reset(nullptr); } void ManualFillingViewAndroid::OnItemsAvailable( const AccessorySheetData& data) { - DCHECK(!java_object_.is_null()); - - JNIEnv* env = base::android::AttachCurrentThread(); - Java_ManualFillingComponentBridge_onItemsAvailable( - env, java_object_, ConvertAccessorySheetDataToJavaObject(env, data)); + if (auto obj = GetOrCreateJavaObject()) { + JNIEnv* env = base::android::AttachCurrentThread(); + Java_ManualFillingComponentBridge_onItemsAvailable( + env, obj, ConvertAccessorySheetDataToJavaObject(env, data)); + } } void ManualFillingViewAndroid::CloseAccessorySheet() { - Java_ManualFillingComponentBridge_closeAccessorySheet( - base::android::AttachCurrentThread(), java_object_); + if (auto obj = GetOrCreateJavaObject()) { + Java_ManualFillingComponentBridge_closeAccessorySheet( + base::android::AttachCurrentThread(), obj); + } } void ManualFillingViewAndroid::SwapSheetWithKeyboard() { - Java_ManualFillingComponentBridge_swapSheetWithKeyboard( - base::android::AttachCurrentThread(), java_object_); + if (auto obj = GetOrCreateJavaObject()) { + Java_ManualFillingComponentBridge_swapSheetWithKeyboard( + base::android::AttachCurrentThread(), obj); + } } void ManualFillingViewAndroid::ShowWhenKeyboardIsVisible() { - Java_ManualFillingComponentBridge_showWhenKeyboardIsVisible( - base::android::AttachCurrentThread(), java_object_); + if (auto obj = GetOrCreateJavaObject()) { + Java_ManualFillingComponentBridge_showWhenKeyboardIsVisible( + base::android::AttachCurrentThread(), obj); + } } void ManualFillingViewAndroid::Hide() { - Java_ManualFillingComponentBridge_hide(base::android::AttachCurrentThread(), - java_object_); + if (auto obj = GetOrCreateJavaObject()) { + Java_ManualFillingComponentBridge_hide(base::android::AttachCurrentThread(), + obj); + } } void ManualFillingViewAndroid::OnAutomaticGenerationStatusChanged( bool available) { - if (!available && java_object_.is_null()) + if (!available && java_object_internal_.is_null()) return; - - JNIEnv* env = base::android::AttachCurrentThread(); - Java_ManualFillingComponentBridge_onAutomaticGenerationStatusChanged( - env, java_object_, available); + if (auto obj = GetOrCreateJavaObject()) { + Java_ManualFillingComponentBridge_onAutomaticGenerationStatusChanged( + base::android::AttachCurrentThread(), obj, available); + } } void ManualFillingViewAndroid::OnFillingTriggered( @@ -125,10 +128,17 @@ static_cast<autofill::AccessoryAction>(selected_action), enabled); } +void ManualFillingViewAndroid::OnViewDestroyed( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& obj) { + java_object_internal_.Reset(nullptr); +} + ScopedJavaLocalRef<jobject> ManualFillingViewAndroid::ConvertAccessorySheetDataToJavaObject( JNIEnv* env, const AccessorySheetData& tab_data) { + DCHECK(java_object_internal_); ScopedJavaLocalRef<jobject> j_tab_data = Java_ManualFillingComponentBridge_createAccessorySheetData( env, static_cast<int>(tab_data.get_sheet_type()), @@ -138,7 +148,7 @@ if (tab_data.option_toggle().has_value()) { autofill::OptionToggle toggle = tab_data.option_toggle().value(); Java_ManualFillingComponentBridge_addOptionToggleToAccessorySheetData( - env, java_object_, j_tab_data, + env, java_object_internal_, j_tab_data, ConvertUTF16ToJavaString(env, toggle.display_text()), toggle.is_enabled(), static_cast<int>(toggle.accessory_action())); } @@ -146,12 +156,12 @@ for (const UserInfo& user_info : tab_data.user_info_list()) { ScopedJavaLocalRef<jobject> j_user_info = Java_ManualFillingComponentBridge_addUserInfoToAccessorySheetData( - env, java_object_, j_tab_data, + env, java_object_internal_, j_tab_data, ConvertUTF8ToJavaString(env, user_info.origin()), user_info.is_psl_match().value()); for (const UserInfo::Field& field : user_info.fields()) { Java_ManualFillingComponentBridge_addFieldToUserInfo( - env, java_object_, j_user_info, + env, java_object_internal_, j_user_info, static_cast<int>(tab_data.get_sheet_type()), ConvertUTF16ToJavaString(env, field.display_text()), ConvertUTF16ToJavaString(env, field.a11y_description()), @@ -162,7 +172,7 @@ for (const FooterCommand& footer_command : tab_data.footer_commands()) { Java_ManualFillingComponentBridge_addFooterCommandToAccessorySheetData( - env, java_object_, j_tab_data, + env, java_object_internal_, j_tab_data, ConvertUTF16ToJavaString(env, footer_command.display_text()), static_cast<int>(footer_command.accessory_action())); } @@ -184,6 +194,18 @@ selectable); } +base::android::ScopedJavaGlobalRef<jobject> +ManualFillingViewAndroid::GetOrCreateJavaObject() { + if (java_object_internal_) + return java_object_internal_; + ui::ViewAndroid* view_android = controller_->container_view(); + DCHECK(view_android); + java_object_internal_.Reset(Java_ManualFillingComponentBridge_create( + base::android::AttachCurrentThread(), reinterpret_cast<intptr_t>(this), + view_android->GetWindowAndroid()->GetJavaObject())); + return java_object_internal_; +} + // static void JNI_ManualFillingComponentBridge_CachePasswordSheetDataForTesting( JNIEnv* env,
diff --git a/chrome/browser/ui/android/passwords/manual_filling_view_android.h b/chrome/browser/ui/android/passwords/manual_filling_view_android.h index 404d06a..e45d0ad 100644 --- a/chrome/browser/ui/android/passwords/manual_filling_view_android.h +++ b/chrome/browser/ui/android/passwords/manual_filling_view_android.h
@@ -54,6 +54,8 @@ const base::android::JavaParamRef<jobject>& obj, jint selected_action, jboolean enabled); + void OnViewDestroyed(JNIEnv* env, + const base::android::JavaParamRef<jobject>& obj); private: void OnImageFetched(base::android::ScopedJavaGlobalRef<jstring> j_origin, @@ -69,11 +71,13 @@ JNIEnv* env, const base::android::JavaRef<jobject>& j_field_to_convert); + base::android::ScopedJavaGlobalRef<jobject> GetOrCreateJavaObject(); + // The controller provides data for this view and owns it. ManualFillingController* controller_; - // The corresponding java object. - base::android::ScopedJavaGlobalRef<jobject> java_object_; + // The corresponding java object. Use `GetOrCreateJavaObject()` to access. + base::android::ScopedJavaGlobalRef<jobject> java_object_internal_; DISALLOW_COPY_AND_ASSIGN(ManualFillingViewAndroid); };
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd index 717eac2..c5ffe740 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -2415,6 +2415,11 @@ Waiting for Google Play Services to finish updating </message> + <!-- Strings for Incognito Interstitial. --> + <message name="IDS_INCOGNITO_INTERSTITIAL_TITLE" desc="The title of the incognito interstitial bottom sheet."> + Use incognito to sign in temporarily + </message> + <!-- Strings for Streamlined Signin and Unified Consent. --> <message name="IDS_SIGNIN_TITLE" desc="Title for the screen that asks users to sign-in and turn on Sync. [CHAR-LIMIT=27]"> Turn on sync?
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_INCOGNITO_INTERSTITIAL_TITLE.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_INCOGNITO_INTERSTITIAL_TITLE.png.sha1 new file mode 100644 index 0000000..cc65ae24 --- /dev/null +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_INCOGNITO_INTERSTITIAL_TITLE.png.sha1
@@ -0,0 +1 @@ +adc3b35662e21a7c4b2e4af2e5c3a1fb909bd9d6 \ No newline at end of file
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 10ca8b9..1642109d 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Bestuur</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> aflaaie is uitgevee</translation> <translation id="3856096718352044181">Bevestig dat dit 'n geldige verskaffer is of probeer later weer</translation> -<translation id="388596076286380598">Kry artikels, video's en ander inhoud vanaf werwe waarvan jy hou, selfs as jy vanlyn is of as jou verbinding swak is.</translation> <translation id="3892148308691398805">Kopieer teks</translation> <translation id="3894427358181296146">Voeg vouer by</translation> <translation id="3895926599014793903">Dwing aktivering van zoem</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Laai prent af</translation> <translation id="6865313869410766144">Vul vormdata outomaties in</translation> <translation id="6882836635272038266">Standaardbeskerming teen webwerwe, aflaaie en uitbreidings wat bekend is dat hulle gevaarlik is.</translation> -<translation id="6884306546558072722">Hou aan om vanlyn te verken</translation> <translation id="688738109438487280">Voeg bestaande data by <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Ontsluit om jou wagwoord te kopieer</translation> <translation id="6896758677409633944">Kopieer</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 d50694d4..8fe23906 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">አቀናብር</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> የሚወርዱ ተሰርዘዋል</translation> <translation id="3856096718352044181">ይህ ልክ የሆነ አገልግሎት አቅራቢ መሆኑን እባክዎ ያረጋግጡ ወይም ቆይተው እንደገና ይሞክሩ</translation> -<translation id="388596076286380598">ምንም እንኳ እርስዎ ከመስመር ውጭ ቢሆኑም ወይም የእርስዎ ግንኙነት ደካማ ቢሆንም እርስዎ ከሚወዷቸው ጣቢያዎች ጽሑፎችን፣ ቪዲዮዎችን፣ እና ሌላ ይዘት ያግኙ።</translation> <translation id="3892148308691398805">ጽሑፍ ቅዳ</translation> <translation id="3894427358181296146">አቃፊ ያክሉ</translation> <translation id="3895926599014793903">ማጉላት አንቃን ያስገድዱ</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">ምስል አውርድ</translation> <translation id="6865313869410766144">የራስ-ሙላ ቅጽ ውሂብ</translation> <translation id="6882836635272038266">አደገኛ መሆናቸው ከታወቁ የድር ጣቢያዎች፣ ማውረዶች እና ቅጥያዎች መደበኛ ጥበቃ።</translation> -<translation id="6884306546558072722">ከመስመር ውጭ ማሰስ ቀጥል</translation> <translation id="688738109438487280">ነባሩን ውሂብ ወደ <ph name="TO_ACCOUNT" /> ያክሉ።</translation> <translation id="6891726759199484455">የይለፍ ቃልዎን ለመቅዳት ይክፈቱ</translation> <translation id="6896758677409633944">ቅዳ</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 1211660..260c6c6 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">إدارة محرّكات البحث</translation> <translation id="3819178904835489326">تم إلغاء <ph name="NUMBER_OF_DOWNLOADS" /> من عمليات التنزيل</translation> <translation id="3856096718352044181">يُرجى إثبات صلاحية مقدّم الخدمة أو المحاولة مجددًا.</translation> -<translation id="388596076286380598">يمكنك الاطّلاع على المقالات والفيديوهات وغيرها من أنواع المحتوى في المواقع الإلكترونية التي تعجبك، حتى إذا كنت غير متصّل بالإنترنت أو كان اتصالك ضعيفًا.</translation> <translation id="3892148308691398805">نسخ النص</translation> <translation id="3894427358181296146">إضافة مجلد</translation> <translation id="3895926599014793903">فرض تفعيل التكبير أو التصغير</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">تنزيل الصورة</translation> <translation id="6865313869410766144">الملء التلقائي للبيانات</translation> <translation id="6882836635272038266">يوفّر لك حماية عادية من الإضافات وعمليات التنزيل والمواقع الإلكترونية الضارة.</translation> -<translation id="6884306546558072722">مواصلة الاطّلاع على المحتوى بلا اتصال بالإنترنت</translation> <translation id="688738109438487280">يمكنك إضافة البيانات الحالية إلى <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">فتح القفل لنسخ كلمة المرور</translation> <translation id="6896758677409633944">نسخ</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 b177158..9af6dafc 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">পৰিচালনা কৰক</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" />টা ডাউনল'ড মচা হ'ল</translation> <translation id="3856096718352044181">অনুগ্ৰহ কৰি এইটো কোনো মান্য প্ৰদানকাৰীৰ বুলি সত্যাপন কৰক অথবা পাছত আকৌ চেষ্টা কৰক</translation> -<translation id="388596076286380598">আপুনি অফলাইন হৈ থাকিলে অথবা আপোনাৰ সংযোগটো বেয়া হৈ থাকিলেও আপুনি পচন্দ কৰা ছাইটসমূহৰ পৰা প্ৰবন্ধ, ভিডিঅ’ আৰু অন্য সমল পাওক।</translation> <translation id="3892148308691398805">পাঠৰ প্ৰতিলিপি কৰক</translation> <translation id="3894427358181296146">ফ’ল্ডাৰ যোগ কৰক</translation> <translation id="3895926599014793903">বলেৰে জুম সক্ষম কৰক</translation> @@ -758,7 +757,6 @@ <translation id="6864459304226931083">প্ৰতিচ্ছবি ডাউনল'ড কৰক</translation> <translation id="6865313869410766144">স্বয়ংক্ৰিয়ভাৱে পূৰ কৰা ফৰ্মৰ ডেটা</translation> <translation id="6882836635272038266">ক্ষতিকাৰক হিচাপে জনাজাত ৱেবছাইট, ডাউনল'ড আৰু এক্সটেনশ্বনসমূহৰ পৰা উন্নত সুৰক্ষা।</translation> -<translation id="6884306546558072722">অফলাইনত অন্বেষণ কৰি থাকক</translation> <translation id="688738109438487280">আগৰেপৰা থকা ডেটাবোৰ <ph name="TO_ACCOUNT" />ত যোগ কৰক।</translation> <translation id="6891726759199484455">আপোনাৰ পাছৱৰ্ড প্ৰতিলিপি কৰিবলৈ আনলক কৰক</translation> <translation id="6896758677409633944">প্ৰতিলিপি কৰক</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 34b0d801..23ff6ee8 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">İdarə edin</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> endirmə silindi</translation> <translation id="3856096718352044181">Bunun etibarlı təminatçı olduğunu doğrulayın, ya da daha sonra təkrar cəhd edin</translation> -<translation id="388596076286380598">Oflayn və ya bağlantınız zəif olduqda belə, bəyəndiyiniz saytlardan məqalələr, videolar və digər məzmunu əldə edin.</translation> <translation id="3892148308691398805">Mətni kopyalayın</translation> <translation id="3894427358181296146">Qovluq əlavə edin</translation> <translation id="3895926599014793903">Zoom'a icazə verməyə məcbur edin</translation> @@ -757,7 +756,6 @@ <translation id="6864459304226931083">Şəkli endirin</translation> <translation id="6865313869410766144">Avtomatik data doldurması</translation> <translation id="6882836635272038266">Təhlükəli hesab edilən veb saytlar, endirmələr və artırmalara qarşı standart qoruma.</translation> -<translation id="6884306546558072722">Oflayn şəkildə araşdırmağa davam edin</translation> <translation id="688738109438487280">Mövcud datanı <ph name="TO_ACCOUNT" /> hesabına əlavə edin.</translation> <translation id="6891726759199484455">Parolu kopyalamaq üçün kiliddən çıxarın</translation> <translation id="6896758677409633944">Kopyalayın</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 530c82c..038a55a0 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Кіраваць</translation> <translation id="3819178904835489326">Выдалена спамповак: <ph name="NUMBER_OF_DOWNLOADS" /></translation> <translation id="3856096718352044181">Праверце, ці сапраўдны гэта аператар, або паўтарыце спробу</translation> -<translation id="388596076286380598">Чытайце артыкулы, глядзіце відэа і іншае змесціва на любімых сайтах, нават калі вы не падключаны да інтэрнэту або якасць падключэння дрэнная.</translation> <translation id="3892148308691398805">Скапіраваць тэкст</translation> <translation id="3894427358181296146">Дадаць папку</translation> <translation id="3895926599014793903">Прымусовае ўключэнне павелічэння</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Спампаваць відарыс</translation> <translation id="6865313869410766144">Даныя для аўтазапаўнення</translation> <translation id="6882836635272038266">Стандартная абарона ад вэб-сайтаў, спамповак і пашырэнняў, вядомых як небяспечныя.</translation> -<translation id="6884306546558072722">Праглядайце змесціва ў пазасеткавым рэжыме</translation> <translation id="688738109438487280">Дадаць існуючыя даныя ва ўліковы запіс <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Разблакіруйце, каб скапіраваць пароль</translation> <translation id="6896758677409633944">Капіраваць</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 21d3968..c38e2429 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Управление</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> изтегляния бяха изтрити</translation> <translation id="3856096718352044181">Моля, проверете дали този доставчик е валиден или опитайте отново по-късно</translation> -<translation id="388596076286380598">Получавайте статии, видеоклипове и друго съдържание от сайтовете, които харесвате, дори ако сте офлайн или връзката е лоша.</translation> <translation id="3892148308691398805">Копиране на текста</translation> <translation id="3894427358181296146">Добавяне на папка</translation> <translation id="3895926599014793903">Принудително активиране на промяната на мащаба</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Изтегляне на изображението</translation> <translation id="6865313869410766144">Данни за автоматично попълване на формуляри</translation> <translation id="6882836635272038266">Стандартна защита срещу уебсайтове, изтеглени файлове и разширения, за които е известно, че са опасни.</translation> -<translation id="6884306546558072722">Разглеждайте офлайн</translation> <translation id="688738109438487280">Добавяне на съществуващите данни към <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Отключете, за да копирате паролата си</translation> <translation id="6896758677409633944">Копиране</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 b15c2ca..3bfd217 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">পরিচালনা</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" />টি ডাউনলোড মোছা হয়েছে</translation> <translation id="3856096718352044181">এটি সঠিক প্রদানকারী কিনা যাচাই করুন অথবা পরে আবার চেষ্টা করুন</translation> -<translation id="388596076286380598">আপনি অফলাইনে থাকার সময়ে বা কানেকশন খারাপ থাকলেও আপনার পছন্দের সাইট থেকে আর্টিকেল, ভিডিও এবং অন্যান্য কন্টেন্ট দেখতে পাবেন।</translation> <translation id="3892148308691398805">টেক্সট কপি করুন</translation> <translation id="3894427358181296146">ফোল্ডার যোগ করুন</translation> <translation id="3895926599014793903">ফোর্স জুম চালু করুন</translation> @@ -761,7 +760,6 @@ <translation id="6864459304226931083">ছবি ডাউনলোড করুন</translation> <translation id="6865313869410766144">স্বতঃপূর্ণ ফর্ম ডেটা</translation> <translation id="6882836635272038266">ঝুঁকিপূর্ণ হিসেবে চিহ্নিত ওয়েবসাইট, ডাউনলোড এবং এক্সটেনশনের জন্য স্ট্যান্ডার্ড নিরাপত্তা।</translation> -<translation id="6884306546558072722">অফলাইন থাকার সময়ে খুঁজে দেখুন</translation> <translation id="688738109438487280">বিদ্যমান ডেটা <ph name="TO_ACCOUNT" /> এ যোগ করুন।</translation> <translation id="6891726759199484455">আপনার পাসওয়ার্ড কপি করতে আনলক করুন</translation> <translation id="6896758677409633944">কপি</translation> @@ -897,6 +895,7 @@ <translation id="7930998711684428189">আপনার পাসওয়ার্ড কোনও ডেটা নিরাপত্তা লঙ্ঘনের কারণে সর্বজনীনভাবে প্রকাশ হলে তা আপনাকে জানানো হবে।</translation> <translation id="7942131818088350342"><ph name="PRODUCT_NAME" /> পুরনো হয়ে গেছে।</translation> <translation id="7947953824732555851">সম্মত হয়ে সাইন-ইন করুন</translation> +<translation id="7961926449547174351">আপনি স্টোরেজ অ্যাক্সেস বন্ধ করে রেখেছেন, এটি চালু করতে 'সেটিংস'-এ যান।</translation> <translation id="7963646190083259054">বিক্রেতা:</translation> <translation id="7967911570373677897">QR কোড স্ক্যান করতে হলে, আপনার সেটিংস পরিবর্তন করুন যাতে Chrome আপনার ক্যামেরা ব্যবহার করতে পারে</translation> <translation id="7971136598759319605">১ দিন আগে ব্যবহার করা হয়েছে</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 457cfcd..17db2a0 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Upravljaj</translation> <translation id="3819178904835489326">Broj izbrisanih preuzimanja: <ph name="NUMBER_OF_DOWNLOADS" /></translation> <translation id="3856096718352044181">Potvrdite da je ovo važeći pružalac usluga ili pokušajte ponovo kasnije</translation> -<translation id="388596076286380598">Preuzmite članke, videozapise i drugi sadržaj s web lokacija koje vam se sviđaju, čak i kada ste van mreže ili kada vam je veza slaba.</translation> <translation id="3892148308691398805">Kopiraj tekst</translation> <translation id="3894427358181296146">Dodaj folder</translation> <translation id="3895926599014793903">Prisilno omogući zumiranje</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Preuzmi sliku</translation> <translation id="6865313869410766144">Podaci za automatsko popunjavanje obrasca</translation> <translation id="6882836635272038266">Standardna zaštita od web lokacija, preuzimanja i ekstenzija za koje se zna da su opasne.</translation> -<translation id="6884306546558072722">Nastavite istraživati van mreže</translation> <translation id="688738109438487280">Dodavanje postojećih podataka na račun <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Otključajte da kopirate lozinku</translation> <translation id="6896758677409633944">Kopiraj</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 ecc9810..d004a0a 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Gestiona</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> baixades suprimides</translation> <translation id="3856096718352044181">Verifica que aquest és un proveïdor vàlid o torna-ho a provar més tard</translation> -<translation id="388596076286380598">Accedeix a articles, vídeos i altres continguts dels llocs web que t'agraden encara que no tinguis connexió o que la connexió sigui deficient.</translation> <translation id="3892148308691398805">Copia el text</translation> <translation id="3894427358181296146">Afegeix una carpeta</translation> <translation id="3895926599014793903">Força l'activació del zoom</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Baixa la imatge</translation> <translation id="6865313869410766144">Dades d'Emplenament automàtic de formularis</translation> <translation id="6882836635272038266">Protecció estàndard contra llocs web, baixades i extensions que se sap que són perillosos.</translation> -<translation id="6884306546558072722">Continua navegant sense connexió</translation> <translation id="688738109438487280">Afegeix les dades existents a <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Desbloqueja la pantalla per copiar la contrasenya</translation> <translation id="6896758677409633944">Copia</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 c398b676..88ddb64 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Spravovat</translation> <translation id="3819178904835489326">Počet smazaných stažených souborů: <ph name="NUMBER_OF_DOWNLOADS" /></translation> <translation id="3856096718352044181">Zkontrolujte, zda se jedná o platného poskytovatele, nebo to zkuste znovu později</translation> -<translation id="388596076286380598">Články, videa a další obsah z webů, které se vám líbí, může sledovat i v režimu offline nebo při nekvalitním připojení.</translation> <translation id="3892148308691398805">Kopírovat text</translation> <translation id="3894427358181296146">Přidat složku</translation> <translation id="3895926599014793903">Vynutit aktivaci přiblížení</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Stáhnout obrázek</translation> <translation id="6865313869410766144">Automatické vyplňování formulářů</translation> <translation id="6882836635272038266">Standardní ochrana před weby, soubory ke stažení a rozšířeními, o nichž je známo, že jsou nebezpečné.</translation> -<translation id="6884306546558072722">Pokračujte v objevování i offline</translation> <translation id="688738109438487280">Přidat existující data do účtu <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Chcete-li zkopírovat heslo, odemkněte zařízení</translation> <translation id="6896758677409633944">Kopírovat</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 e3571cb..dd58c02 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Valgmuligheder</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> downloads blev slettet</translation> <translation id="3856096718352044181">Bekræft, at dette er en gyldig udbyder, eller prøv igen senere</translation> -<translation id="388596076286380598">Få adgang til artikler, videoer og andet indhold fra de websites, du kan lide, selvom du er offline eller har en dårlig forbindelse.</translation> <translation id="3892148308691398805">Kopiér tekst</translation> <translation id="3894427358181296146">Tilføj mappe</translation> <translation id="3895926599014793903">Tving aktivering af zoom</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Download billede</translation> <translation id="6865313869410766144">Formulardata for AutoFyld</translation> <translation id="6882836635272038266">Standardbeskyttelse mod websites, downloads og udvidelser, som er registreret som skadelige.</translation> -<translation id="6884306546558072722">Gå på opdagelse offline</translation> <translation id="688738109438487280">Føj eksisterende data til <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Lås op for at kopiere din adgangskode</translation> <translation id="6896758677409633944">Kopiér</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 221b7fe7..c2e1cc0 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Verwalten</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> Downloads gelöscht</translation> <translation id="3856096718352044181">Vergewissern Sie sich, dass dies ein gültiger Provider ist, oder versuchen Sie es später noch einmal</translation> -<translation id="388596076286380598">Erhalten Sie Artikel, Videos und weitere Inhalte von Websites, die Ihnen gefallen – auch offline oder bei schlechter Internetverbindung.</translation> <translation id="3892148308691398805">Text kopieren</translation> <translation id="3894427358181296146">Ordner hinzufügen</translation> <translation id="3895926599014793903">Zoom zwingend aktivieren</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Bild herunterladen</translation> <translation id="6865313869410766144">Formulardaten für automatisches Ausfüllen</translation> <translation id="6882836635272038266">Standardschutz vor Websites, Downloads und Erweiterungen, die bekannterweise schädlich sind.</translation> -<translation id="6884306546558072722">Offline mehr entdecken</translation> <translation id="688738109438487280">Vorhandene Daten werden zu <ph name="TO_ACCOUNT" /> hinzugefügt.</translation> <translation id="6891726759199484455">Entsperren, um Ihr Passwort zu kopieren</translation> <translation id="6896758677409633944">Kopieren</translation> @@ -895,6 +893,7 @@ <translation id="7930998711684428189">Sie werden gewarnt, wenn Passwörter durch eine Datenpanne preisgegeben werden.</translation> <translation id="7942131818088350342"><ph name="PRODUCT_NAME" /> ist veraltet.</translation> <translation id="7947953824732555851">Akzeptieren und anmelden</translation> +<translation id="7961926449547174351">Sie haben den Speicherzugriff deaktiviert. Gehen Sie zu den Einstellungen, um ihn zu aktivieren.</translation> <translation id="7963646190083259054">Anbieter:</translation> <translation id="7967911570373677897">Wenn Sie einen QR-Code scannen möchten, ändern Sie die Einstellungen, damit Chrome Ihre Kamera verwenden kann</translation> <translation id="7971136598759319605">Vor 1 Tag aktiv</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 9ab00440..43ac529 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Διαχείριση</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> λήψεις διαγράφηκαν</translation> <translation id="3856096718352044181">Βεβαιωθείτε ότι πρόκειται για έγκυρο πάροχο ή δοκιμάστε ξανά αργότερα</translation> -<translation id="388596076286380598">Λάβετε άρθρα, βίντεο και άλλο περιεχόμενο από τους ιστοτόπους που σας αρέσουν, ακόμη και όταν είστε εκτός σύνδεσης ή η σύνδεσή σας δεν είναι καλή.</translation> <translation id="3892148308691398805">Αντιγραφή κειμένου</translation> <translation id="3894427358181296146">Προσθήκη φακέλου…</translation> <translation id="3895926599014793903">Αναγκαστική ενεργοποίηση εστίασης</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Λήψη εικόνας</translation> <translation id="6865313869410766144">Δεδομένα φόρμας αυτόματης συμπλήρωσης</translation> <translation id="6882836635272038266">Βασική προστασία από ιστοτόπους, λήψεις και επεκτάσεις που είναι γνωστό ότι είναι επικίνδυνα.</translation> -<translation id="6884306546558072722">Συνεχίστε την αναζήτηση εκτός σύνδεσης</translation> <translation id="688738109438487280">Προσθήκη υπαρχόντων δεδομένων στον λογαριασμό <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Ξεκλειδώστε για αντιγραφή του κωδικού πρόσβασης</translation> <translation id="6896758677409633944">Αντιγραφή</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 87fb5a2..83982c2 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Manage</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> downloads deleted</translation> <translation id="3856096718352044181">Please verify that this is a valid provider or try again later</translation> -<translation id="388596076286380598">Get articles, videos and other content from sites that you like, even if you’re offline or your connection is poor.</translation> <translation id="3892148308691398805">Copy text</translation> <translation id="3894427358181296146">Add folder</translation> <translation id="3895926599014793903">Force enable zoom</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Download image</translation> <translation id="6865313869410766144">Auto-fill form data</translation> <translation id="6882836635272038266">Standard protection against websites, downloads and extensions that are known to be dangerous.</translation> -<translation id="6884306546558072722">Keep exploring offline</translation> <translation id="688738109438487280">Add existing data to <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Unlock to copy your password</translation> <translation id="6896758677409633944">Copy</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 612689133..cdaa639e6 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Administrar</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> descargas borradas</translation> <translation id="3856096718352044181">Verifica que sea un proveedor válido o vuelve a intentarlo más tarde</translation> -<translation id="388596076286380598">Recibe artículos, videos y otro contenido de sitios que te gustan, incluso si tu conexión es poca o nula.</translation> <translation id="3892148308691398805">Copiar texto</translation> <translation id="3894427358181296146">Agregar carpeta</translation> <translation id="3895926599014793903">Forzar habilitación de zoom</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Descargar imagen</translation> <translation id="6865313869410766144">Datos del formulario de autocompletar</translation> <translation id="6882836635272038266">Protección estándar contra descargas, extensiones y sitios web identificados como peligrosos.</translation> -<translation id="6884306546558072722">Seguir explorando sin conexión</translation> <translation id="688738109438487280">Agrega los datos existentes a <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Desbloquea la pantalla para copiar tu contraseña</translation> <translation id="6896758677409633944">Copiar</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 5c3a1cfb..3644ee5 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Gestionar</translation> <translation id="3819178904835489326">Descargas eliminadas: <ph name="NUMBER_OF_DOWNLOADS" /></translation> <translation id="3856096718352044181">Verifica que este sea un proveedor válido o inténtalo de nuevo más tarde.</translation> -<translation id="388596076286380598">Consulta artículos, vídeos y otros contenidos de los sitios web que te gusten incluso sin conexión a Internet o con una conexión inestable.</translation> <translation id="3892148308691398805">Copiar texto</translation> <translation id="3894427358181296146">Añadir carpeta</translation> <translation id="3895926599014793903">Forzar zoom</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Descargar imagen</translation> <translation id="6865313869410766144">Datos de Autocompletar formulario</translation> <translation id="6882836635272038266">Protección estándar frente a descargas, extensiones y sitios web que son peligrosos.</translation> -<translation id="6884306546558072722">Sigue explorando sin conexión</translation> <translation id="688738109438487280">Añade los datos actuales a <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Desbloquea la pantalla para copiar tu contraseña</translation> <translation id="6896758677409633944">Copiar</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 143565c..1173a94 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Halda</translation> <translation id="3819178904835489326">Tuvastati <ph name="NUMBER_OF_DOWNLOADS" /> allalaadimist</translation> <translation id="3856096718352044181">Veenduge, et tegemist oleks kehtiva teenusepakkujaga, või proovige hiljem uuesti</translation> -<translation id="388596076286380598">Hankige artikleid, videoid ja muud sisu teile meeldivatelt saitidelt – isegi kui võrguühendus on halb või puudub.</translation> <translation id="3892148308691398805">Kopeeri tekst</translation> <translation id="3894427358181296146">Kausta lisamine</translation> <translation id="3895926599014793903">Sundluba suumimine</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Laadi kujutis alla</translation> <translation id="6865313869410766144">Automaattäitmise vormiandmed</translation> <translation id="6882836635272038266">Standardne kaitse teadaolevalt ohtlike veebisaitide, allalaadimiste ja laienduste vastu.</translation> -<translation id="6884306546558072722">Jätkake uurimist võrguühenduseta</translation> <translation id="688738109438487280">Lisab olemasolevad andmed kontole <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Avage oma parooli kopeerimiseks</translation> <translation id="6896758677409633944">Kopeeri</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 c40acf7..3b800ba 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Kudeatu</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> deskarga ezabatu dira</translation> <translation id="3856096718352044181">Egiaztatu hornitzaile horrek balio duela edo saiatu berriro geroago</translation> -<translation id="388596076286380598">Eskuratu gustuko dituzun webguneetako artikuluak, bideoak edo bestelako edukia, baita konexiorik ez baduzu edo konexioa txarra baldin bada ere.</translation> <translation id="3892148308691398805">Kopiatu testua</translation> <translation id="3894427358181296146">Gehitu karpeta</translation> <translation id="3895926599014793903">Behartu zooma gaitzera</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Deskargatu irudia</translation> <translation id="6865313869410766144">Bete inprimakiko datuak automatikoki</translation> <translation id="6882836635272038266">Kaltegarriak direla dakigun webgune, deskarga eta luzapenen aurkako babes estandarra.</translation> -<translation id="6884306546558072722">Jarraitu arakatzen konexiorik gabe</translation> <translation id="688738109438487280">Gehitu lehendik dituzun datuak <ph name="TO_ACCOUNT" /> kontuan.</translation> <translation id="6891726759199484455">Desblokeatu pasahitza kopiatzeko</translation> <translation id="6896758677409633944">Kopiatu</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 9f1d13f..bbbc20d6 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">مدیریت</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> بارگیری حذف شد</translation> <translation id="3856096718352044181">لطفاً تأیید کنید این ارائهدهندهْ معتبر است یا بعداً دوباره امتحان کنید</translation> -<translation id="388596076286380598">حتی وقتی آفلاین هستید یا ارتباط ضعیفی دارید، مقاله، ویدیو، و محتواهای دیگر را از سایتهای موردعلاقه دریافت کنید.</translation> <translation id="3892148308691398805">کپی کردن نوشتار</translation> <translation id="3894427358181296146">افزودن پوشه</translation> <translation id="3895926599014793903">فعال کردن اجباری بزرگنمایی</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">بارگیری تصویر</translation> <translation id="6865313869410766144">تکمیل خودکار دادههای فرم</translation> <translation id="6882836635272038266">محافظت استاندارد دربرابر وبسایتها، بارگیریها، و افزونههایی که خطرناک بودنشان مشخص شده است.</translation> -<translation id="6884306546558072722">بهصورت آفلاین به کاوش ادامه دهید</translation> <translation id="688738109438487280">افزودن دادههای موجود به <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">برای کپی کردن گذرواژهتان، قفل صفحه را باز کنید</translation> <translation id="6896758677409633944">کپی</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 591d5319..e3ee928 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Hallinnoi</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> latausta poistettiin.</translation> <translation id="3856096718352044181">Varmista, että tämä on kelvollinen palveluntarjoaja, tai yritä myöhemmin uudelleen</translation> -<translation id="388596076286380598">Selaa suosikkisivustojesi artikkeleja, videoita ja muuta sisältöä, vaikka olet offline-tilassa tai yhteys on heikko.</translation> <translation id="3892148308691398805">Kopioi teksti</translation> <translation id="3894427358181296146">Lisää kansio</translation> <translation id="3895926599014793903">Ota zoomaus käyttöön</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Lataa kuva</translation> <translation id="6865313869410766144">Automaattisesti täydennetyt lomaketiedot</translation> <translation id="6882836635272038266">Perustason suojaus vaaralliseksi tiedettyjä sivustoja, latauksia ja laajennuksia vastaan.</translation> -<translation id="6884306546558072722">Jatka offline-sisällön tutkimista</translation> <translation id="688738109438487280">Lisää olemassa olevat tiedot tilille <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Avaa lukitus kopioidaksesi salasanan</translation> <translation id="6896758677409633944">Kopioi</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 afb1db2..6620bfb 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Mamahala</translation> <translation id="3819178904835489326">Na-delete ang <ph name="NUMBER_OF_DOWNLOADS" /> (na) pag-download</translation> <translation id="3856096718352044181">Paki-verify na valid na provider ito o subukan ulit sa ibang pagkakataon</translation> -<translation id="388596076286380598">Kumuha ng mga artikulo, video, at iba pang content sa mga site na gusto mo, kahit na offline ka o mahina ang iyong koneksyon.</translation> <translation id="3892148308691398805">Kopyahin ang text</translation> <translation id="3894427358181296146">Magdagdag ng folder</translation> <translation id="3895926599014793903">Puwersahang i-enable ang zoom</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">I-download ang larawan</translation> <translation id="6865313869410766144">Data ng form ng autofill</translation> <translation id="6882836635272038266">Karaniwang proteksyon laban sa mga website, download, at extension na kilalang mapanganib.</translation> -<translation id="6884306546558072722">Patuloy na mag-explore offline</translation> <translation id="688738109438487280">Idagdag ang kasalukuyang data sa <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">I-unlock upang kopyahin ang iyong password</translation> <translation id="6896758677409633944">Copy</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 164c7977..23376ec0 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Gérer</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> téléchargements supprimés</translation> <translation id="3856096718352044181">Veuillez vérifier qu'il s'agit d'un fournisseur valide ou réessayer plus tard</translation> -<translation id="388596076286380598">Consultez des articles, des vidéos et d'autres contenus sur les sites qui vous intéressent, même si vous êtes hors ligne ou si votre connexion est mauvaise.</translation> <translation id="3892148308691398805">Copier le texte</translation> <translation id="3894427358181296146">Ajouter un dossier</translation> <translation id="3895926599014793903">Forcer l'activation du zoom</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Télécharger l'image</translation> <translation id="6865313869410766144">Données de remplissage automatique de formulaires</translation> <translation id="6882836635272038266">Protection standard contre les sites Web, les téléchargements et les extensions qui sont réputés être dangereux.</translation> -<translation id="6884306546558072722">Continuer d'explorer hors ligne</translation> <translation id="688738109438487280">Ajouter les données existantes à <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Déverrouillez pour copier votre mot de passe</translation> <translation id="6896758677409633944">Copier</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 34edc39..44e7295d 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Gérer</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> téléchargements supprimés</translation> <translation id="3856096718352044181">Veuillez vérifier qu'il s'agit d'un fournisseur valide ou réessayer plus tard</translation> -<translation id="388596076286380598">Consultez des articles, des vidéos et d'autres contenus sur les sites qui vous intéressent, même si vous êtes hors connexion ou si votre connexion est mauvaise.</translation> <translation id="3892148308691398805">Copier le texte</translation> <translation id="3894427358181296146">Ajouter un dossier</translation> <translation id="3895926599014793903">Forcer l'activation du zoom</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Télécharger l'image</translation> <translation id="6865313869410766144">Données de saisie automatique</translation> <translation id="6882836635272038266">Ce mode offre une protection standard contre les téléchargements, les extensions et les sites Web connus pour être dangereux.</translation> -<translation id="6884306546558072722">Continuer d'explorer hors connexion</translation> <translation id="688738109438487280">Ajoutez les données existantes au compte <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Déverrouillez pour copier votre mot de passe</translation> <translation id="6896758677409633944">Copier</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 0555284..ef20731 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Xestionar</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> descargas eliminadas</translation> <translation id="3856096718352044181">Verifica que se trate dun fornecedor válido ou téntao de novo máis tarde.</translation> -<translation id="388596076286380598">Accede a artigos, vídeos e outros contidos dos sitios que che gustan, aínda que esteas sen conexión ou esta sexa de mala calidade.</translation> <translation id="3892148308691398805">Copiar texto</translation> <translation id="3894427358181296146">Engadir cartafol</translation> <translation id="3895926599014793903">Forzar a activación do zoom</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Descargar imaxe</translation> <translation id="6865313869410766144">Autocompletar datos do formulario</translation> <translation id="6882836635272038266">Protección estándar contra os sitios web, as descargas e as extensións que se consideren perigosos.</translation> -<translation id="6884306546558072722">Continuar explorando contido sen conexión</translation> <translation id="688738109438487280">Engade os datos existentes a <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Desbloquea a pantalla para copiar o teu contrasinal</translation> <translation id="6896758677409633944">Copiar</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 833b0ab..722c7dc8 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">મેનેજ કરો</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> ડાઉનલોડ કાઢી નાખ્યાં</translation> <translation id="3856096718352044181">કૃપા કરીને ચકાસણી કરો કે આ માન્ય પ્રદાતા છે અથવા પછીથી ફરી પ્રયાસ કરો</translation> -<translation id="388596076286380598">તમારું ઇન્ટરનેટ કનેક્શન ઉપલબ્ધ ન હોય અથવા ધીમું હોય ત્યારે પણ તમને ગમતી સાઇટ તરફથી લેખ, વીડિયો અને અન્ય કન્ટેન્ટ મેળવો.</translation> <translation id="3892148308691398805">ટેક્સ્ટ કૉપિ કરો</translation> <translation id="3894427358181296146">ફોલ્ડર ઉમેરો</translation> <translation id="3895926599014793903">ફરજિયાતપૂર્વક ઝૂમ ચાલુ કરો</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">છબી ડાઉનલોડ કરો</translation> <translation id="6865313869410766144">સ્વતઃભરણ ફોર્મ ડેટા</translation> <translation id="6882836635272038266">જોખમકારક જણાતી હોય એવી વેબસાઇટ, ડાઉનલોડ અને એક્સ્ટેંશન સામે માનક સંરક્ષણ.</translation> -<translation id="6884306546558072722">ઑફલાઇન શોધખોળ કરવાનું ચાલુ રાખો</translation> <translation id="688738109438487280">અસ્તિત્વમાંના ડેટાને <ph name="TO_ACCOUNT" /> માં ઉમેરો.</translation> <translation id="6891726759199484455">તમારો પાસવર્ડ કૉપિ કરવા માટે અનલૉક કરો</translation> <translation id="6896758677409633944">કૉપિ કરો</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 7757c98..8a7ae704 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">प्रबंधित करें</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> डाउनलोड हटाए गए</translation> <translation id="3856096718352044181">कृपया पुष्टि करें कि यह एक मान्य डीएनएस सेवा है या थोड़ी देर बाद कोशिश करें</translation> -<translation id="388596076286380598">ऑफ़लाइन होने या खराब कनेक्शन होने पर भी, अपनी पसंद की साइटों से लेख, वीडियो, और दूसरी सामग्री पाएं.</translation> <translation id="3892148308691398805">टेक्स्ट कॉपी करें</translation> <translation id="3894427358181296146">फ़ोल्डर जोड़ें</translation> <translation id="3895926599014793903">ज़बरदस्ती ज़ूम करना चालू करें</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">इमेज डाउनलोड करें</translation> <translation id="6865313869410766144">ऑटोमैटिक भरने वाले फ़ॉर्म का डेटा</translation> <translation id="6882836635272038266">उन वेबसाइटों, डाउनलोड, और एक्सटेंशन से मानक सुरक्षा जो नुकसान पहुंचा सकते हैं.</translation> -<translation id="6884306546558072722">ऑफ़लाइन फ़ीड देखते रहें</translation> <translation id="688738109438487280">मौजूदा डेटा <ph name="TO_ACCOUNT" /> में जोड़ें.</translation> <translation id="6891726759199484455">अपना पासवर्ड कॉपी करने के लिए अनलॉक करें</translation> <translation id="6896758677409633944">कॉपी बनाएं</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 1026d9b5..949b13f 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Upravljaj</translation> <translation id="3819178904835489326">Izbrisano preuzimanja: <ph name="NUMBER_OF_DOWNLOADS" /></translation> <translation id="3856096718352044181">Potvrdite da je to valjani davatelj ili pokušajte ponovo kasnije</translation> -<translation id="388596076286380598">Primajte članke, videozapise i druge sadržaje s web-lokacija koje vam se sviđaju, čak i izvanmrežno ili ako vam je veza loša.</translation> <translation id="3892148308691398805">Kopiranje teksta</translation> <translation id="3894427358181296146">Dodavanje mape</translation> <translation id="3895926599014793903">Prisilno omogućavanje zumiranja</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Preuzmi sliku</translation> <translation id="6865313869410766144">Automatski ispuni podatke u obrascu</translation> <translation id="6882836635272038266">Standardna zaštita od web-lokacija, preuzimanja i proširenja za koje je poznato da su opasni.</translation> -<translation id="6884306546558072722">Nastavite istraživati izvanmrežno</translation> <translation id="688738109438487280">Dodavanje postojećih podataka na račun <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Otključajte za kopiranje zaporke</translation> <translation id="6896758677409633944">Kopiraj</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 34e4b669..a33652a8 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Szerkesztés</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> letöltés törölve</translation> <translation id="3856096718352044181">Ellenőrizze a szolgáltató érvényességét, vagy próbálkozzon újra.</translation> -<translation id="388596076286380598">Hozzájuthat cikkekhez, videókhoz és más tartalmakhoz a kedvenc webhelyeiről – még akkor is, ha offline állapotban van, vagy ha a kapcsolat rossz minőségű.</translation> <translation id="3892148308691398805">Szöveg másolása</translation> <translation id="3894427358181296146">Mappa hozzáadása</translation> <translation id="3895926599014793903">A nagyítás mindig engedélyezett</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Kép letöltése</translation> <translation id="6865313869410766144">Automatikus kitöltési űrlapadatok</translation> <translation id="6882836635272038266">Normál védelem azon webhelyekkel, letöltésekkel és bővítményekkel szemben, amelyekről ismert, hogy veszélyesek.</translation> -<translation id="6884306546558072722">Offline állapotban is folytathatja a felfedezést</translation> <translation id="688738109438487280">Meglévő adatok hozzáadása a(z) <ph name="TO_ACCOUNT" /> fiókhoz.</translation> <translation id="6891726759199484455">Oldja fel a képernyőzárat a jelszó másolásához</translation> <translation id="6896758677409633944">Másolás</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 66e0d94..d5cb861 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Կառավարել</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> ներբեռնում ջնջվեց</translation> <translation id="3856096718352044181">Հաստատեք, որ սա վավեր մատակարար է կամ նորից փորձեք</translation> -<translation id="388596076286380598">Դուք կարող եք կարդալ հոդվածներ, դիտել տեսանյութեր և այլ բովանդակություն ձեր սիրած կայքերից նույնիսկ, երբ կապը թույլ է կամ բացակայում է։</translation> <translation id="3892148308691398805">Պատճենել տեքստը</translation> <translation id="3894427358181296146">Պանակի ավելացում</translation> <translation id="3895926599014793903">Հարկադրաբար միացնել չափափոխումը</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Ներբեռնել պատկերը</translation> <translation id="6865313869410766144">Ինքնալցման տվյալներ</translation> <translation id="6882836635272038266">Սովորական պաշտպանություն վտանգավոր կայքերից, ընդլայնումներից և ներբեռնումներից։</translation> -<translation id="6884306546558072722">Բովանդակության հասանելիություն անցանց ռեժիմում</translation> <translation id="688738109438487280">Ավելացնել առկա տվյալները <ph name="TO_ACCOUNT" /> հաշվում:</translation> <translation id="6891726759199484455">Գաղտնաբառը պատճենելու համար ապակողպեք էկրանը</translation> <translation id="6896758677409633944">Պատճենել</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 b18089d..3bafe07 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Kelola</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> download dihapus</translation> <translation id="3856096718352044181">Verifikasi bahwa ini adalah penyedia yang valid atau coba lagi nanti</translation> -<translation id="388596076286380598">Dapatkan artikel, video, dan konten lain dari situs yang Anda sukai, meskipun Anda sedang offline atau koneksi Anda buruk.</translation> <translation id="3892148308691398805">Salin teks</translation> <translation id="3894427358181296146">Tambah folder</translation> <translation id="3895926599014793903">Aktifkan zoom secara paksa</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Download gambar</translation> <translation id="6865313869410766144">Data formulir isi-otomatis</translation> <translation id="6882836635272038266">Perlindungan standar terhadap situs, download, dan ekstensi yang bereputasi berbahaya.</translation> -<translation id="6884306546558072722">Terus menjelajah saat offline</translation> <translation id="688738109438487280">Menambahkan data yang sudah ada ke <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Buka kunci untuk menyalin sandi Anda</translation> <translation id="6896758677409633944">Salin</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 1163e58..b0ce679 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Stjórna</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> niðurhölum eytt</translation> <translation id="3856096718352044181">Gakktu úr skugga um að þetta sé staðfest veita eða reyndu aftur síðar</translation> -<translation id="388596076286380598">Fáðu greinar, myndskeið og annað efni frá vefsvæðum sem þú kannt að meta, jafnvel án nettengingar eða þegar tengingin er léleg.</translation> <translation id="3892148308691398805">Afrita texta</translation> <translation id="3894427358181296146">Bæta möppu við</translation> <translation id="3895926599014793903">Þvinga fram aðdrátt</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Sækja mynd</translation> <translation id="6865313869410766144">Gögn sjálfvirkrar útfyllingar eyðublaða</translation> <translation id="6882836635272038266">Hefðbundin vörn gegn vefsvæðum, niðurhali og viðbótum sem vitað er að eru hættuleg.</translation> -<translation id="6884306546558072722">Haltu áfram að vafra án nettengingar</translation> <translation id="688738109438487280">Bæta fyrirliggjandi gögnum við <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Opnaðu til að afrita aðgangsorðið þitt</translation> <translation id="6896758677409633944">Afrita</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 bc2b4312..09fb3e7 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Gestisci</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> download eliminati</translation> <translation id="3856096718352044181">Verifica che questo fornitore sia valido e riprova più tardi</translation> -<translation id="388596076286380598">Accedi ad articoli, video e altri contenuti dai siti che ti piacciono anche quando sei offline o se la connessione è insufficiente.</translation> <translation id="3892148308691398805">Copia testo</translation> <translation id="3894427358181296146">Aggiungi cartella</translation> <translation id="3895926599014793903">Attivazione forzata dello zoom</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Scarica immagine</translation> <translation id="6865313869410766144">Dati della compilazione automatica dei moduli</translation> <translation id="6882836635272038266">Sistemi di protezione standard da siti web, download ed estensioni che sono noti per essere pericolosi.</translation> -<translation id="6884306546558072722">Continua a esplorare quando sei offline</translation> <translation id="688738109438487280">Aggiungi dati esistenti a <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Sblocca per copiare la password</translation> <translation id="6896758677409633944">Copia</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 0811b1d6..b4a3a13 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">נהל</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> הורדות נמחקו</translation> <translation id="3856096718352044181">יש לאמת שהספק הזה חוקי או לנסות שוב מאוחר יותר</translation> -<translation id="388596076286380598">גם כשאין חיבור לאינטרנט וגם כשהחיבור חלש, עדיין אפשר לגשת למאמרים, לסרטונים ולתוכן אחר מאתרים שמעניינים אותך.</translation> <translation id="3892148308691398805">העתקת הטקסט</translation> <translation id="3894427358181296146">הוספת תיקייה</translation> <translation id="3895926599014793903">שינוי הזום בכל מקרה</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">הורד תמונה</translation> <translation id="6865313869410766144">נתוני טפסים למילוי אוטומטי</translation> <translation id="6882836635272038266">הגנה רגילה מפני אתרים, הורדות ותוספים שידועים כמסוכנים.</translation> -<translation id="6884306546558072722">המשך גלישה ללא חיבור לאינטרנט</translation> <translation id="688738109438487280">הוסף נתונים קיימים אל <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">ביטול הנעילה יאפשר להעתיק את הסיסמה</translation> <translation id="6896758677409633944">העתק</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 c187323..476c79b9 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">管理</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> 件のダウンロードを削除しました</translation> <translation id="3856096718352044181">有効なプロバイダであることを確認するか、しばらくしてからもう一度お試しください</translation> -<translation id="388596076286380598">オフラインの場合や接続が不安定な場合でも、お気に入りのサイトの記事や動画などのコンテンツを閲覧できます。</translation> <translation id="3892148308691398805">テキストをコピー</translation> <translation id="3894427358181296146">フォルダの追加</translation> <translation id="3895926599014793903">強制的にズームを有効にする</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">画像をダウンロード</translation> <translation id="6865313869410766144">自動入力フォームのデータ</translation> <translation id="6882836635272038266">既知の危険なウェブサイト、ダウンロード、拡張機能から標準的な方法で保護します。</translation> -<translation id="6884306546558072722">オフラインで閲覧を続ける</translation> <translation id="688738109438487280">既存のデータを <ph name="TO_ACCOUNT" /> に追加します。</translation> <translation id="6891726759199484455">パスワードをコピーするにはロックを解除してください</translation> <translation id="6896758677409633944">コピー</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 17c3c56..1ba30f86 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">მართვა</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> ჩამოტვირთული ფაილი წაიშალა</translation> <translation id="3856096718352044181">დაადასტურეთ პროვაიდერის სისწორე ან ცადეთ მოგვიანებით</translation> -<translation id="388596076286380598">მიიღეთ სტატიები, ვიდეოები და სხვა კონტენტი საიტებიდან, რომლებიც მოგწონთ, მაშინაც კი თუ ხაზგარეშე რეჟიმში ხართ ან ცუდი კავშირი გაქვთ.</translation> <translation id="3892148308691398805">ტექსტის კოპირება</translation> <translation id="3894427358181296146">საქაღალდის დამატება</translation> <translation id="3895926599014793903">გადიდების იძულებით ჩართვა</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">სურათის ჩამოტვირთვა</translation> <translation id="6865313869410766144">ფორმათა მონაცემების ავტომატური შევსება</translation> <translation id="6882836635272038266">სტანდარტული დაცვა ცნობილი სახიფათო ვებსაიტებისგან, ჩამოტვირთვებისა და გაფართოებებისგან.</translation> -<translation id="6884306546558072722">დათვალიერების ხაზგარეშე რეჟიმში გაგრძელება</translation> <translation id="688738109438487280">არსებული მონაცემების <ph name="TO_ACCOUNT" />-ში დამატება.</translation> <translation id="6891726759199484455">განბლოკეთ თქვენი პაროლის კოპირებისთვის</translation> <translation id="6896758677409633944">კოპირება</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 58382dd..fcffd4f 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Басқару</translation> <translation id="3819178904835489326">Жүктелген <ph name="NUMBER_OF_DOWNLOADS" /> файл жойылды</translation> <translation id="3856096718352044181">Мұның жарамды провайдер екенін тексеріңіз немесе кейінірек қайталап көріңіз.</translation> -<translation id="388596076286380598">Интернетке қосылмасаңыз да немесе байланыс нашар болса да, өзіңізге ұнайтын сайттардағы мақалаларды, бейнелерді және басқа мазмұнды көріңіз.</translation> <translation id="3892148308691398805">Мәтінді көшіру</translation> <translation id="3894427358181296146">Қалта қосу</translation> <translation id="3895926599014793903">Масштабтауды мәжбүрлі түрде қосу</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Суретті жүктеп алу</translation> <translation id="6865313869410766144">Нысан деректерін автотолтыру</translation> <translation id="6882836635272038266">Қауіпті саналатын веб-сайттардан, жүктеп алынған файлдардан және кеңейтімдерден стандартты қорғау.</translation> -<translation id="6884306546558072722">Офлайн режимде пайдалана беру</translation> <translation id="688738109438487280">Бар деректерді <ph name="TO_ACCOUNT" /> есептік жазбасына енгізіңіз.</translation> <translation id="6891726759199484455">Құпия сөзді көшіру үшін құлыпты ашыңыз</translation> <translation id="6896758677409633944">Көшіру</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 88b23b85..58c8c26 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">គ្រប់គ្រង</translation> <translation id="3819178904835489326">បានលុបការទាញយក <ph name="NUMBER_OF_DOWNLOADS" /></translation> <translation id="3856096718352044181">សូមផ្ទៀងផ្ទាត់ថា នេះគឺជាក្រុមហ៊ុនផ្ដល់សេវាត្រឹមត្រូវ ឬព្យាយាមម្ដងទៀតនៅពេលក្រោយ</translation> -<translation id="388596076286380598">ទទួលបានអត្ថបទ វីដេអូ និងខ្លឹមសារផ្សេងទៀតពីគេហទំព័រដែលអ្នកចូលចិត្ត ទោះបីជាអ្នកគ្មានអ៊ីនធឺណិត ឬការតភ្ជាប់របស់អ្នកខ្សោយក៏ដោយ។</translation> <translation id="3892148308691398805">ចម្លងអត្ថបទ</translation> <translation id="3894427358181296146">បន្ថែមថតឯកសារ</translation> <translation id="3895926599014793903">បង្ខំបើកដំណើរការពង្រីក</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">ទាញយករូបភាព</translation> <translation id="6865313869410766144">បំពេញទិន្នន័យបែបបទស្វ័យប្រវត្តិ</translation> <translation id="6882836635272038266">ការការពារស្តង់ដារពីគេហទំព័រ ការទាញយក និងកម្មវិធីបន្ថែមដែលចាត់ទុកថាមានគ្រោះថ្នាក់។</translation> -<translation id="6884306546558072722">បន្តរុករកដោយគ្មានអ៊ីនធឺណិត</translation> <translation id="688738109438487280">បន្ថែមទិន្នន័យដែលមានស្រាប់ទៅ <ph name="TO_ACCOUNT" /> ។</translation> <translation id="6891726759199484455">ដោះសោដើម្បីចម្លងពាក្យសម្ងាត់របស់អ្នក</translation> <translation id="6896758677409633944">ចម្លង</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 7fb7ab99..a6627f3 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
@@ -352,7 +352,6 @@ <translation id="3810973564298564668">ನಿರ್ವಹಿಸು</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> ಡೌನ್ಲೋಡ್ಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ</translation> <translation id="3856096718352044181">ಇವರು ಮಾನ್ಯವಾದ ಪೂರೈಕೆದಾರರೇ ಎಂಬುದನ್ನು ದೃಢೀಕರಿಸಿ ಅಥವಾ ಆನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ</translation> -<translation id="388596076286380598">ನೀವು ಆಫ್ಲೈನ್ನಲ್ಲಿದ್ದರೂ ಅಥವಾ ನಿಮ್ಮ ಕನೆಕ್ಷನ್ ಕಳಪೆ ಆಗಿದ್ದರೂ ಸಹ ನಿಮಗೆ ಇಷ್ಟವಾಗುವ ಸೈಟ್ನಲ್ಲಿರುವ ಲೇಖನಗಳು, ವೀಡಿಯೊಗಳು ಮತ್ತು ಇತರ ವಿಷಯವನ್ನು ಪಡೆದುಕೊಳ್ಳಿ.</translation> <translation id="3892148308691398805">ಪಠ್ಯ ನಕಲಿಸಿ</translation> <translation id="3894427358181296146">ಫೋಲ್ಡರ್ ಸೇರಿಸು</translation> <translation id="3895926599014793903">ಒತ್ತಾಯದ ಝೂಮ್ ಸಕ್ರಿಯಗೊಳಿಸುವಿಕೆ</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">ಚಿತ್ರ ಡೌನ್ಲೋಡ್ ಮಾಡಿ</translation> <translation id="6865313869410766144">ಸ್ವಯಂತುಂಬುವಿಕೆ ಫಾರ್ಮ್ ಡೇಟಾ</translation> <translation id="6882836635272038266">ಅಪಾಯಕಾರಿ ಎಂದು ತಿಳಿದಿರುವ ವೆಬ್ಸೈಟ್ಗಳು, ಡೌನ್ಲೋಡ್ಗಳು ಮತ್ತು ವಿಸ್ತರಣೆಗಳ ವಿರುದ್ಧ ಪ್ರಮಾಣಿತ ಸುರಕ್ಷತೆ.</translation> -<translation id="6884306546558072722">ಆಫ್ಲೈನ್ನಲ್ಲಿ ಎಕ್ಸ್ಪ್ಲೋರ್ ಮುಂದುವರಿಸಿ</translation> <translation id="688738109438487280">ಪ್ರಸ್ತುತ ಡೇಟಾವನ್ನು <ph name="TO_ACCOUNT" /> ಗೆ ಸೇರಿಸಿ.</translation> <translation id="6891726759199484455">ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ನಕಲಿಸಲು ಅನ್ಲಾಕ್ ಮಾಡಲಾಗಿದೆ</translation> <translation id="6896758677409633944">ನಕಲಿಸು</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 c49e0910e..5056a67 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">관리</translation> <translation id="3819178904835489326">다운로드 <ph name="NUMBER_OF_DOWNLOADS" />개 삭제됨</translation> <translation id="3856096718352044181">유효한 제공업체인지 확인하거나 나중에 다시 시도하세요.</translation> -<translation id="388596076286380598">오프라인 상태이거나 연결 상태가 좋지 못할 때도 좋아하는 사이트의 기사, 동영상 및 기타 콘텐츠를 볼 수 있습니다.</translation> <translation id="3892148308691398805">텍스트 복사</translation> <translation id="3894427358181296146">폴더 추가</translation> <translation id="3895926599014793903">확대/축소 강제 사용</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">이미지 다운로드</translation> <translation id="6865313869410766144">양식 데이터 자동 완성</translation> <translation id="6882836635272038266">위험한 웹사이트, 다운로드 항목 및 확장 프로그램에 대응하는 표준 보호 기능입니다.</translation> -<translation id="6884306546558072722">오프라인에서 계속 탐색</translation> <translation id="688738109438487280"><ph name="TO_ACCOUNT" />에 기존 데이터 추가</translation> <translation id="6891726759199484455">비밀번호를 복사하려면 잠금 해제하세요</translation> <translation id="6896758677409633944">복사</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 add5fbc3..c812132 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Башкаруу</translation> <translation id="3819178904835489326">Жүктөлүп алынган <ph name="NUMBER_OF_DOWNLOADS" /> нерсе өчүрүлдү</translation> <translation id="3856096718352044181">Бул жарамдуу кызмат көрсөтүүчү экенин текшерип, кайра аракет кылыңыз</translation> -<translation id="388596076286380598">Интернет байланышы болбосо же начар болсо да, сүйүктүү сайттарыңыздагы макалаларды, видеолорду жана башка мазмунду көрүп туруңуз.</translation> <translation id="3892148308691398805">Текстти көчүрүү</translation> <translation id="3894427358181296146">Куржун кошуу</translation> <translation id="3895926599014793903">Мажбурлап чоңойтууну иштетүү</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Сүрөттү жүктөп алуу</translation> <translation id="6865313869410766144">Автотолтуруу формасынын дайындары</translation> <translation id="6882836635272038266">Кооптуу деп таанылган вебсайттардан, жүктөлүп алынган файлдардан жана кеңейтүүлөрдөн стандарттуу түрдө коргоо.</translation> -<translation id="6884306546558072722">Оффлайн режиминде изилдей бериңиз</translation> <translation id="688738109438487280">Учурдагы дайындарды <ph name="TO_ACCOUNT" /> аккаунтка кошуу.</translation> <translation id="6891726759199484455">Сырсөзүңүздү көчүрүү үчүн кулпусун ачыңыз</translation> <translation id="6896758677409633944">Көчүрүү</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 b740209..55ea3463 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">ຈັດການ</translation> <translation id="3819178904835489326">ລຶບ <ph name="NUMBER_OF_DOWNLOADS" /> ການດາວໂຫຼດແລ້ວ</translation> <translation id="3856096718352044181">ກະລຸນາຢັ້ງຢືນວ່ານີ້ແມ່ນຜູ້ໃຫ້ບໍລິການທີ່ຖືກຕ້ອງ ຫຼື ລອງໃໝ່ໃນພາຍຫຼັງ</translation> -<translation id="388596076286380598">ຮັບບົດຄວາມ, ວິດີໂອ ແລະ ເນື້ອຫາອື່ນໆຈາກເວັບໄຊທີ່ທ່ານມັກ, ເຖິງແມ່ນວ່າທ່ານອອບລາຍ ຫຼື ສັນຍານເຊື່ອມຕໍ່ຂອງທ່ານບໍ່ດີກໍຕາມ.</translation> <translation id="3892148308691398805">ສຳເນົາຂໍ້ຄວາມ</translation> <translation id="3894427358181296146">ເພີ່ມໂຟລເດີ</translation> <translation id="3895926599014793903">ບັງຄັບໃຫ້ເປີດໃຊ້ການຊູມ</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">ດາວໂຫຼດຮູບພາບ</translation> <translation id="6865313869410766144">ຕື່ມຂໍ້ມູນແບບຟອມອັດຕະໂນມັດ</translation> <translation id="6882836635272038266">ການປົກປ້ອງມາດຕະຖານຕໍ່ກັບເວັບໄຊ, ການດາວໂຫຼດ ແລະ ສ່ວນຂະຫຍາຍທີ່ຮູ້ຈັກວ່າເປັນອັນຕະລາຍ.</translation> -<translation id="6884306546558072722">ສືບຕໍ່ສຳຫຼວດແບບອອບລາຍ</translation> <translation id="688738109438487280">ເພີ່ມຂໍ້ມູນທີ່ມີຢູ່ໃສ່ <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">ປົດລັອກເພື່ອສຳເນົາລະຫັດຜ່ານຂອງທ່ານ</translation> <translation id="6896758677409633944">ກັອບປີ້</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 d36b796f..fdc58954 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Valdyti</translation> <translation id="3819178904835489326">Ištrinta atsisiuntimų: <ph name="NUMBER_OF_DOWNLOADS" /></translation> <translation id="3856096718352044181">Patvirtinkite, kad tai yra tinkamas paslaugų teikėjas, arba vėliau bandykite dar kartą</translation> -<translation id="388596076286380598">Gaukite straipsnių, vaizdo įrašų ir kito turinio iš jums patinkančių svetainių, net jei esate neprisijungę arba prastas jūsų ryšys.</translation> <translation id="3892148308691398805">Kopijuoti tekstą</translation> <translation id="3894427358181296146">Aplanko pridėjimas</translation> <translation id="3895926599014793903">Priverstinai įgalinti mastelio keitimą</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Atsisiųsti vaizdą</translation> <translation id="6865313869410766144">Automatinio pildymo formos duomenys</translation> <translation id="6882836635272038266">Įprasta apsauga nuo svetainių, atsisiuntimų ir plėtinių, kurie yra žinomi kaip pavojingi.</translation> -<translation id="6884306546558072722">Tolesnis naršymas neprisijungus</translation> <translation id="688738109438487280">Pridėti esamus duomenis prie <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Atrakinkite, kad galėtumėte kopijuoti slaptažodį</translation> <translation id="6896758677409633944">Kopijuoti</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 ba0abbd..6e93e82 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Pārvaldīt</translation> <translation id="3819178904835489326">Izdzēsti <ph name="NUMBER_OF_DOWNLOADS" /> lejupielādētie vienumi</translation> <translation id="3856096718352044181">Pārbaudiet, vai pakalpojumu sniedzējs ir derīgs, vai arī vēlāk mēģiniet vēlreiz</translation> -<translation id="388596076286380598">Saņemiet rakstus, videoklipus un citu saturu no vietnēm, kuras jums patīk, pat ja esat bezsaistē vai ir vājš savienojums.</translation> <translation id="3892148308691398805">Kopēt tekstu</translation> <translation id="3894427358181296146">Mapes pievienošana</translation> <translation id="3895926599014793903">Tālummaiņas piespiedu iespējošana</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Lejupielādēt attēlu</translation> <translation id="6865313869410766144">Automātiskās aizpildes veidlapas dati</translation> <translation id="6882836635272038266">Standarta aizsardzība pret zināmām bīstamām tīmekļa vietnēm, lejupielādēm un paplašinājumiem.</translation> -<translation id="6884306546558072722">Turpiniet izpēti tiešsaistē</translation> <translation id="688738109438487280">Pievienot esošos datus kontam <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Atbloķējiet, lai kopētu paroli</translation> <translation id="6896758677409633944">Kopēt</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 003efd6..651a514f 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Управувај</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> преземања се избришани</translation> <translation id="3856096718352044181">Потврдете дека ова е вистински давател на услуги или обидете се повторно подоцна</translation> -<translation id="388596076286380598">Добивајте статии, видеа и други содржини од сајтови што ви се допаѓаат, дури и ако сте офлајн или ако врската е слаба.</translation> <translation id="3892148308691398805">Копирај текст</translation> <translation id="3894427358181296146">Додај папка</translation> <translation id="3895926599014793903">Присилно овозможи зумирање</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Преземи слика</translation> <translation id="6865313869410766144">Автоматско пополнување податоци во формулар</translation> <translation id="6882836635272038266">Стандардна заштита од веб-сајтови, преземања и екстензии за коишто се знае дека се опасни.</translation> -<translation id="6884306546558072722">Продолжете да истражувате офлајн</translation> <translation id="688738109438487280">Додајте ги постоечките податоци во <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Отклучете за да ја копирате лозинката</translation> <translation id="6896758677409633944">Копирај</translation> @@ -895,6 +893,7 @@ <translation id="7930998711684428189">Ве предупредува ако лозинките се откриени при упад во податоците.</translation> <translation id="7942131818088350342"><ph name="PRODUCT_NAME" /> е застарен.</translation> <translation id="7947953824732555851">Прифати и најави се</translation> +<translation id="7961926449547174351">Сте го оневозможиле пристапот до капацитетот, одете во поставки за да го овозможите.</translation> <translation id="7963646190083259054">Продавач:</translation> <translation id="7967911570373677897">За да скенирате QR-код, променете ги поставките за да може Chrome да ја користи вашата камера</translation> <translation id="7971136598759319605">Активен пред 1 ден</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 1695a92..ef20bd2 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">മാനേജ് ചെയ്യുക</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> ഡൗൺലോഡുകൾ ഇല്ലാതാക്കി</translation> <translation id="3856096718352044181">ഇത് സാധുതയുള്ളൊരു ദാതാവാണെന്ന് പരിശോധിച്ചുറപ്പിക്കുക അല്ലെങ്കിൽ പിന്നീട് വീണ്ടും ശ്രമിക്കുക</translation> -<translation id="388596076286380598">നിങ്ങൾ ഓഫ്ലൈനിൽ ആണെങ്കിലും കണക്ഷന് വേഗത കുറവാണെങ്കിലും നിങ്ങൾ ഇഷ്ടപ്പെടുന്ന സൈറ്റുകളിൽ നിന്ന് ലേഖനങ്ങളും വീഡിയോകളും മറ്റ് ഉള്ളടക്കവും നേടുക.</translation> <translation id="3892148308691398805">ടെക്സ്റ്റ് പകർത്തുക</translation> <translation id="3894427358181296146">ഫോൾഡർ ചേർക്കുക</translation> <translation id="3895926599014793903">നിർബന്ധിത സൂം പ്രവർത്തനക്ഷമമാക്കുക</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">ചിത്രം ഡൗൺലോഡ് ചെയ്യുക</translation> <translation id="6865313869410766144">ഓട്ടോഫിൽ ഫോം ഡാറ്റ</translation> <translation id="6882836635272038266">അപകടകരമെന്ന് അറിയപ്പെടുന്ന വെബ്സൈറ്റുകൾ, ഡൗൺലോഡുകള്, വിപുലീകരണങ്ങൾ എന്നിവയ്ക്ക് എതിരായ സ്റ്റാൻഡേർഡ് സുരക്ഷ.</translation> -<translation id="6884306546558072722">ഓഫ്ലൈനിൽ അടുത്തറിയുന്നത് തുടരുക</translation> <translation id="688738109438487280">നിലവിലുള്ള വിവരങ്ങളെ <ph name="TO_ACCOUNT" /> അക്കൗണ്ടിലേക്ക് ചേർക്കുക</translation> <translation id="6891726759199484455">പാസ്വേഡ് പകർത്താൻ അൺലോക്ക് ചെയ്യുക</translation> <translation id="6896758677409633944">പകര്ത്തുക</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 ddb110c7..07e2f64 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">удирдах</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> таталтыг устгасан</translation> <translation id="3856096718352044181">Энэ нь хүчинтэй нийлүүлэгч болохыг бататгах эсвэл дараа дахин оролдоно уу</translation> -<translation id="388596076286380598">Та офлайн эсвэл таны холболт муу байсан ч дуртай сайтаасаа нийтлэл, видео болон бусад контентыг аваарай.</translation> <translation id="3892148308691398805">Текстийг хуулах</translation> <translation id="3894427358181296146">Хавтас нэмэх</translation> <translation id="3895926599014793903">Ямар ч тохиолдолд томруулан харуулах</translation> @@ -758,7 +757,6 @@ <translation id="6864459304226931083">Зураг татах</translation> <translation id="6865313869410766144">Autofill дээрх мэдээлэл</translation> <translation id="6882836635272038266">Аюултай гэж мэдэгдсэн вэб сайт, таталт болон өргөтгөлийн эсрэг стандарт хамгаалалт.</translation> -<translation id="6884306546558072722">Офлайн судлахаа үргэлжлүүлэх</translation> <translation id="688738109438487280">Одоо байгаа өгөгдлийг <ph name="TO_ACCOUNT" />-д нэмнэ үү.</translation> <translation id="6891726759199484455">Нууц үгээ хуулахын тулд түгжээг тайлна уу</translation> <translation id="6896758677409633944">Хуулах</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 2de8392..b7f085c 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">व्यवस्थापित करा</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> डाउनलोड हटविले</translation> <translation id="3856096718352044181">कृपया हा वैध पुरवठादार आहे याची पडताळणी करा किंवा नंतर पुन्हा प्रयत्न करा</translation> -<translation id="388596076286380598">तुम्ही ऑफलाइन असलात किंवा तुमचे कनेक्शन खराब असले तरीही, तुमच्या आवडीच्या साइटवरून लेख, व्हिडिओ आणि इतर आशय मिळवा.</translation> <translation id="3892148308691398805">मजकूर कॉपी करा</translation> <translation id="3894427358181296146">फोल्डर जोडा</translation> <translation id="3895926599014793903">झूम सुरू करण्याची सक्ती</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">इमेज डाउनलोड करा</translation> <translation id="6865313869410766144">ऑटोफिल फॉर्म डेटा</translation> <translation id="6882836635272038266">धोकादायक म्हणून ओळखल्या जाणार्या वेबसाइट, डाउनलोड आणि एक्स्टेंशनपासून साधारण संरक्षण.</translation> -<translation id="6884306546558072722">ऑफलाइन एक्सप्लोर करणे सुरू ठेवा</translation> <translation id="688738109438487280">विद्यमान डेटा <ph name="TO_ACCOUNT" /> मध्ये जोडा.</translation> <translation id="6891726759199484455">तुमचा पासवर्ड कॉपी करण्यासाठी अनलॉक करा</translation> <translation id="6896758677409633944">कॉपी करा</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 da67d02..d7d4c50e 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Urus</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> muat turun dipadamkan</translation> <translation id="3856096718352044181">Sila sahkan bahawa penyedia ini sah atau cuba lagi nanti</translation> -<translation id="388596076286380598">Dapatkan artikel, video dan kandungan lain daripada tapak yang anda sukai, walaupun anda di luar talian atau sambungan anda lemah.</translation> <translation id="3892148308691398805">Salin teks</translation> <translation id="3894427358181296146">Tambah folder</translation> <translation id="3895926599014793903">Zum didaya paksa</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Muat turun imej</translation> <translation id="6865313869410766144">Autolengkap data borang</translation> <translation id="6882836635272038266">Perlindungan standard daripada tapak web, muat turun dan sambungan yang diketahui berbahaya.</translation> -<translation id="6884306546558072722">Teruskan meneroka di luar talian</translation> <translation id="688738109438487280">Tambahkan data sedia ada pada <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Buka kunci untuk menyalin kata laluan anda</translation> <translation id="6896758677409633944">Salin</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 ab5521d7..b18ba33 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">စီမံရန်</translation> <translation id="3819178904835489326">ဒေါင်းလုဒ် <ph name="NUMBER_OF_DOWNLOADS" /> ခုကို ဖျက်လိုက်သည်</translation> <translation id="3856096718352044181">မှန်ကန်သည့် ဝန်ဆောင်မှုပေးသူ ဟုတ်မဟုတ် အတည်ပြုပါ သို့မဟုတ် နောက်မှ ထပ်စမ်းကြည့်ပါ</translation> -<translation id="388596076286380598">အော့ဖ်လိုင်းဖြစ်နေစဉ် သို့မဟုတ် လိုင်းမကောင်းသည့်အချိန်တွင်ပင် သင်ကြိုက်နှစ်သက်သည့် ဝဘ်ဆိုက်များမှ ဆောင်းပါး၊ ဗီဒီယိုနှင့် အခြားအကြောင်းအရာများကို ရယူလိုက်ပါ။</translation> <translation id="3892148308691398805">စာသား မိတ္တူကူးရန်</translation> <translation id="3894427358181296146">ဖိုလ်ဒါ ထည့်ရန်</translation> <translation id="3895926599014793903">ဇူးမ် အတင်း ဖွင့်ရန်</translation> @@ -758,7 +757,6 @@ <translation id="6864459304226931083">ပုံကို ဒေါင်းလုဒ်လုပ်ပါ</translation> <translation id="6865313869410766144">ဒေတာမှ အလိုလျောက် ဖြည့်စွက်</translation> <translation id="6882836635272038266">အန္တရာယ်ရှိသည်ဟု သိထားသော ဝဘ်ဆိုက်၊ ဒေါင်းလုဒ်နှင့် နောက်ဆက်တွဲများအတွက် သာမန်ကာကွယ်မှု။</translation> -<translation id="6884306546558072722">အော့ဖ်လိုင်းတွင် ဆက်လက်စူးစမ်းပါ</translation> <translation id="688738109438487280">လက်ရှိဒေတာကို <ph name="TO_ACCOUNT" /> သို့ ထည့်ပါ။</translation> <translation id="6891726759199484455">သင့်စကားဝှက်ကို မိတ္ထူကူးရန် ဖွင့်ပါ</translation> <translation id="6896758677409633944">ကူးယူရန်</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 de2a640..d57e0b6 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">व्यवस्थित गर्नुहोस्</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> डाउनलोडहरूलाई मेटाइयो</translation> <translation id="3856096718352044181">कृपया यो एउटा मान्य प्रदायक हो भनी पुष्टि गर्नुहोस् वा पछि फेरि प्रयास गर्नुहोस्</translation> -<translation id="388596076286380598">आफू अफलाइन भएको वा आफ्नो इन्टरनेट राम्रोसँग नचलेको बेलामा पनि आफूलाई मन पर्ने साइटहरूका लेख, भिडियो वा अन्य सामग्री प्राप्त गर्नुहोस्।</translation> <translation id="3892148308691398805">पाठ कपी गर्नुहोस्</translation> <translation id="3894427358181296146">फोल्डर थप्नुहोस्</translation> <translation id="3895926599014793903">जूम सक्षम गर्न दबाब दिनु</translation> @@ -758,7 +757,6 @@ <translation id="6864459304226931083">छवि डाउनलोड गर्नुहोस्</translation> <translation id="6865313869410766144">स्वत: भर्ने फारम लगत</translation> <translation id="6882836635272038266">खतरनाक मानिने वेबसाइट, डाउनलोड र एक्स्टेन्सनहरूबाट स्तरीय सुरक्षा।</translation> -<translation id="6884306546558072722">अफलाइन अन्वेषण गरिराख्नुहोस्</translation> <translation id="688738109438487280">विद्यमान डेटा <ph name="TO_ACCOUNT" /> मा थप्नुहोस्।</translation> <translation id="6891726759199484455">आफ्नो पासवर्ड प्रतिलिपि गर्न अनलक गर्नुहोस्</translation> <translation id="6896758677409633944">प्रतिलिपि गर्नुहोस्</translation> @@ -894,6 +892,7 @@ <translation id="7930998711684428189">डेटा चोरीको घटनामा पासवर्डको खुलासा हुँदा तपाईंलाई चेतावनी दिन्छ।</translation> <translation id="7942131818088350342"><ph name="PRODUCT_NAME" /> को म्याद सकिएको छ।</translation> <translation id="7947953824732555851">स्वीकार र साइन इन गर्नुहोस्</translation> +<translation id="7961926449547174351">तपाईंले भण्डारण प्रयोग गर्ने अनुमति दिनुभएको छैन, कृपया सेटिङमा गई उक्त अनुमति दिनुहोस्।</translation> <translation id="7963646190083259054">विक्रेता:</translation> <translation id="7967911570373677897">QR कोड स्क्यान गर्न आफ्नो सेटिङ परिवर्तन गरी Chrome लाई तपाईंको क्यामेरा प्रयोग गर्न दिनुहोस्</translation> <translation id="7971136598759319605">१ दिनअघि सक्रिय</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 d406243..3dc7ba8 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Beheren</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> downloads verwijderd</translation> <translation id="3856096718352044181">Controleer of dit een geldige provider is of probeer het later opnieuw</translation> -<translation id="388596076286380598">Krijg artikelen, video's en andere content van sites die je leuk vindt, ook als je offline bent of je een slechte verbinding hebt.</translation> <translation id="3892148308691398805">Tekst kopiëren</translation> <translation id="3894427358181296146">Map toevoegen</translation> <translation id="3895926599014793903">Zoom inschakelen forceren</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Afbeelding downloaden</translation> <translation id="6865313869410766144">Formuliergegevens voor Automatisch aanvullen</translation> <translation id="6882836635272038266">Standaardbeveiliging tegen websites, downloads en extensies die als gevaarlijk zijn bestempeld.</translation> -<translation id="6884306546558072722">Offline content ontdekken</translation> <translation id="688738109438487280">Bestaande gegevens toevoegen aan <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Ontgrendelen om je wachtwoord te kopiëren</translation> <translation id="6896758677409633944">Kopieer</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 14dd2a3..d59fe62 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Administrer</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> nedlastinger er slettet</translation> <translation id="3856096718352044181">Verifiser at dette er en gyldig leverandør, eller prøv på nytt senere</translation> -<translation id="388596076286380598">Få artikler, videoer og annet innhold fra nettsteder du liker, selv om du er uten nett eller har dårlig tilkobling.</translation> <translation id="3892148308691398805">Kopiér teksten</translation> <translation id="3894427358181296146">Legg til en mappe</translation> <translation id="3895926599014793903">Tving zoom på</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Last ned bildet</translation> <translation id="6865313869410766144">Skjemadata lagret med autofyll</translation> <translation id="6882836635272038266">Standardbeskyttelse mot nettsteder, nedlastinger og utvidelser som anses som farlige.</translation> -<translation id="6884306546558072722">Fortsett å utforske uten nett</translation> <translation id="688738109438487280">Legg til eksisterende data i <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Lås opp for å kopiere passordet ditt</translation> <translation id="6896758677409633944">Kopiér</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 41d381ac..bf7d683 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">ପରିଚାଳନା</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" />ଟି ଡାଉନ୍ଲୋଡ୍ ଡିଲିଟ୍ କରାଯାଇଛି</translation> <translation id="3856096718352044181">ଏହା ଏକ ବୈଧ ପ୍ରଦାନକାରୀ ବୋଲି ଯାଞ୍ଚ କରନ୍ତୁ କିମ୍ବା ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ</translation> -<translation id="388596076286380598">ଆପଣ ପସନ୍ଦ କରୁଥିବା ଆର୍ଟିକଲ୍, ଭିଡିଓ ଏବଂ ଅନ୍ୟ ବିଷୟବସ୍ତୁଗୁଡ଼ିକ ସାଇଟ୍ଗୁଡ଼ିକରୁ ପାଆନ୍ତୁ, ଏପରିକି ଆପଣ ଅଫ୍ଲାଇନ୍ ଥିବା ସମୟରେ କିମ୍ବା ଆପଣଙ୍କର ସଂଯୋଗ ଦୁର୍ବଳ ଥିବା ବେଳେ ମଧ୍ୟ ପାଆନ୍ତୁ।</translation> <translation id="3892148308691398805">ଟେକ୍ସଟ୍ କପି କରନ୍ତୁ</translation> <translation id="3894427358181296146">ଫୋଲ୍ଡର୍ରେ ଯୋଗ କରନ୍ତୁ</translation> <translation id="3895926599014793903">ଜୁମ୍ ସକ୍ଷମ କରିବା ପାଇଁ ବାଧ୍ୟ କରନ୍ତୁ</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">ଛବି ଡାଉନ୍ଲୋଡ୍ କରନ୍ତୁ</translation> <translation id="6865313869410766144">ସ୍ୱତଃପୂରଣ ଫର୍ମ ଡାଟା</translation> <translation id="6882836635272038266">ବିପଦଜନକ ପରି ଜଣାପଡ଼ୁଥିବା ୱେବସାଇଟ୍, ଡାଉନଲୋଡ୍ ଏବଂ ଏକ୍ସଟେନ୍ସନଗୁଡ଼ିକ ବିରୁଦ୍ଧରେ ଷ୍ଟାଣ୍ଡାର୍ଡ ସୁରକ୍ଷା।</translation> -<translation id="6884306546558072722">ଅଫ୍ଲାଇନ୍ରେ ଏକ୍ସପ୍ଲୋର୍ କରିବା ଜାରି ରଖନ୍ତୁ</translation> <translation id="688738109438487280"><ph name="TO_ACCOUNT" />ରେ ପୂର୍ବରୁ ଥିବା ଡାଟା ଯୋଗ କରନ୍ତୁ।</translation> <translation id="6891726759199484455">ଆପଣଙ୍କର ପାସ୍ୱର୍ଡ କପି କରିବାକୁ ଅନ୍ଲକ୍ କରନ୍ତୁ</translation> <translation id="6896758677409633944">କପି କରନ୍ତୁ</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 1a20320e..ce57a23a 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">ਵਿਵਸਥਿਤ ਕਰੋ</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> ਡਾਊਨਲੋਡ ਮਿਟਾਏ ਗਏ</translation> <translation id="3856096718352044181">ਕਿਰਪਾ ਕਰਕੇ ਪੁਸ਼ਟੀ ਕਰੋ ਕਿ ਇਹ ਇੱਕ ਵੈਧ ਪ੍ਰਦਾਨਕ ਹੈ ਜਾਂ ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ</translation> -<translation id="388596076286380598">ਆਪਣੀਆਂ ਮਨਪਸੰਦ ਸਾਈਟਾਂ ਤੋਂ ਲੇਖ, ਵੀਡੀਓ ਅਤੇ ਹੋਰ ਸਮੱਗਰੀ ਪ੍ਰਾਪਤ ਕਰੋ, ਭਾਵੇਂ ਤੁਸੀਂ ਆਫ਼ਲਾਈਨ ਹੋਵੋ ਜਾਂ ਤੁਹਾਡਾ ਕਨੈਕਸ਼ਨ ਖਰਾਬ ਹੋਵੇ।</translation> <translation id="3892148308691398805">ਲਿਖਤ ਕਾਪੀ ਕਰੋ</translation> <translation id="3894427358181296146">ਫੋਲਡਰ ਜੋੜੋ</translation> <translation id="3895926599014793903">ਜ਼ੂਮ ਨੂੰ ਚਾਲੂ ਕਰਨ 'ਤੇ ਜ਼ੋਰ ਦਿਓ</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">ਚਿੱਤਰ ਡਾਊਨਲੋਡ ਕਰੋ</translation> <translation id="6865313869410766144">ਆਟੋਫਿਲ ਫ਼ਾਰਮ ਡਾਟਾ</translation> <translation id="6882836635272038266">ਉਹਨਾਂ ਵੈੱਬਸਾਈਟਾਂ, ਡਾਊਨਲੋਡਾਂ ਅਤੇ ਐਕਸਟੈਂਸ਼ਨਾਂ ਤੋਂ ਮਿਆਰੀ ਸੁਰੱਖਿਆ ਜੋ ਖਤਰਨਾਕ ਮੰਨੀਆਂ ਜਾਂਦੀਆਂ ਹਨ।</translation> -<translation id="6884306546558072722">ਆਫ਼ਲਾਈਨ ਪੜਚੋਲ ਕਰਨਾ ਜਾਰੀ ਰੱਖੋ</translation> <translation id="688738109438487280">ਮੌਜੂਦਾ ਡਾਟੇ ਨੂੰ <ph name="TO_ACCOUNT" /> ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ।</translation> <translation id="6891726759199484455">ਆਪਣਾ ਪਾਸਵਰਡ ਕਾਪੀ ਕਰਨ ਲਈ ਅਣਲਾਕ ਕਰੋ</translation> <translation id="6896758677409633944">ਕਾਪੀ ਕਰੋ</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 69b5aa9..2c5ea2d 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Zarządzaj</translation> <translation id="3819178904835489326">Usunięte pobrane pliki: <ph name="NUMBER_OF_DOWNLOADS" /></translation> <translation id="3856096718352044181">Sprawdź, czy jest to prawidłowy dostawca, lub spróbuj ponownie później</translation> -<translation id="388596076286380598">Możesz czytać artykuły i oglądać filmy oraz inne treści ze swoich ulubionych stron nawet wtedy, gdy jesteś offline lub masz słabe połączenie.</translation> <translation id="3892148308691398805">Kopiuj tekst</translation> <translation id="3894427358181296146">Dodaj folder</translation> <translation id="3895926599014793903">Wymuś powiększenie</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Pobierz obraz</translation> <translation id="6865313869410766144">Autouzupełnianie danych formularzy</translation> <translation id="6882836635272038266">Standardowa ochrona przed stronami, pobieranymi plikami i rozszerzeniami, które są uznawane za niebezpieczne.</translation> -<translation id="6884306546558072722">Strony internetowe offline</translation> <translation id="688738109438487280">Dodaj istniejące dane do konta <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Odblokuj, by skopiować hasło</translation> <translation id="6896758677409633944">Kopiuj</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 8ec21743..f747aee9 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Gerenciar</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> downloads excluídos</translation> <translation id="3856096718352044181">Verifique se o provedor é válido ou tente novamente mais tarde</translation> -<translation id="388596076286380598">Receba artigos, vídeos e outros conteúdos dos sites que você gosta, mesmo que você esteja off-line ou com uma conexão ruim.</translation> <translation id="3892148308691398805">Copiar texto</translation> <translation id="3894427358181296146">Adicionar pasta</translation> <translation id="3895926599014793903">Forçar zoom</translation> @@ -760,7 +759,6 @@ <translation id="6864459304226931083">Fazer o download da imagem</translation> <translation id="6865313869410766144">Preenchimento automático de dados de formulário</translation> <translation id="6882836635272038266">Proteção padrão contra sites, downloads e extensões perigosos.</translation> -<translation id="6884306546558072722">Continuar explorando off-line</translation> <translation id="688738109438487280">Adicionar dados já existentes à conta <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Desbloqueie para copiar sua senha</translation> <translation id="6896758677409633944">Copiar</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 4c4b9a0..682f110 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Gerir</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> transferências eliminadas</translation> <translation id="3856096718352044181">Confirme que se trata de um fornecedor válido ou tente novamente mais tarde.</translation> -<translation id="388596076286380598">Obtenha artigos, vídeos e outros conteúdos dos sites de que gosta, mesmo se estiver offline ou se a ligação for fraca.</translation> <translation id="3892148308691398805">Copiar texto</translation> <translation id="3894427358181296146">Adicionar pasta</translation> <translation id="3895926599014793903">Forçar ativação do zoom</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Transferir imagem</translation> <translation id="6865313869410766144">Dados de formulário de Preenchimento automático</translation> <translation id="6882836635272038266">Proteção padrão contra Websites, transferências e extensões identificados como perigosos.</translation> -<translation id="6884306546558072722">Continue a explorar offline</translation> <translation id="688738109438487280">Adicionar dados existentes a <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Desbloqueie para copiar a palavra-passe.</translation> <translation id="6896758677409633944">Copiar</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 f8f57ff0..d37c9ca 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Gestionează</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> descărcări șterse</translation> <translation id="3856096718352044181">Confirmă dacă acesta este un furnizor valid sau încearcă din nou mai târziu</translation> -<translation id="388596076286380598">Descarcă articole, videoclipuri și alte tipuri de conținut de pe site-urile preferate, chiar dacă ești offline sau ai o conexiune lentă.</translation> <translation id="3892148308691398805">Copiază textul</translation> <translation id="3894427358181296146">Adaugă un dosar</translation> <translation id="3895926599014793903">Forțează activarea zoomului</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Descarcă imaginea</translation> <translation id="6865313869410766144">Datele salvate pentru completarea automată a formularelor</translation> <translation id="6882836635272038266">Protecție standard împotriva site-urilor, descărcărilor și extensiilor despre care se știe că sunt periculoase.</translation> -<translation id="6884306546558072722">Explorează în continuare offline</translation> <translation id="688738109438487280">Adaugă datele existente în <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Deblochează pentru a copia parola</translation> <translation id="6896758677409633944">Copiază</translation> @@ -895,7 +893,7 @@ <translation id="7930998711684428189">Te avertizează dacă parolele au fost expuse în urma încălcării securității datelor.</translation> <translation id="7942131818088350342"><ph name="PRODUCT_NAME" /> este învechit.</translation> <translation id="7947953824732555851">Accept și conectare</translation> -<translation id="7961926449547174351">Ai dezactivat Accesul la spațiul de stocare. Accesează Setările pentru a-l activa.</translation> +<translation id="7961926449547174351">Ai dezactivat accesul la stocare. Accesează Setările pentru a-l activa.</translation> <translation id="7963646190083259054">Producător:</translation> <translation id="7967911570373677897">Pentru a scana un cod QR, modifică setările astfel încât Chrome să poată folosi camera</translation> <translation id="7971136598759319605">Activ acum o zi</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 f815482..0cd2f89 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Настроить</translation> <translation id="3819178904835489326">Удаленные скачивания: <ph name="NUMBER_OF_DOWNLOADS" /></translation> <translation id="3856096718352044181">Убедитесь, что это действительный поставщик услуг, или повторите попытку позже.</translation> -<translation id="388596076286380598">Вы можете просматривать статьи, видео и другой контент на любимых сайтах даже в офлайн-режиме или при нестабильном подключении.</translation> <translation id="3892148308691398805">Копировать текст</translation> <translation id="3894427358181296146">Добавление папки</translation> <translation id="3895926599014793903">Принудительно изменять масштаб</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Скачать изображение</translation> <translation id="6865313869410766144">Данные для автозаполнения</translation> <translation id="6882836635272038266">Стандартная защита от опасных сайтов, расширений и скачанных файлов.</translation> -<translation id="6884306546558072722">Доступ к контенту в офлайн-режиме</translation> <translation id="688738109438487280">Объединить сохраненные данные с данными пользователя <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Чтобы скопировать пароль, разблокируйте экран</translation> <translation id="6896758677409633944">Копировать</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 f808a13a..704d040 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">කළමනාකරණය</translation> <translation id="3819178904835489326">බාගැනීම් <ph name="NUMBER_OF_DOWNLOADS" />ක් මැකිණි</translation> <translation id="3856096718352044181">මෙය වලංගු සැපයුම්කරුවෙක් බව සත්යාපන කරන්න, නැති නම් පසුව නැවත උත්සාහ කරන්න</translation> -<translation id="388596076286380598">ඔබ නොබැඳි හෝ ඔබේ සබැඳුම දුර්වල වුවත්, ඔබ කැමති අඩවි වලින් ලිපි, වීඩියෝ සහ වෙනත් අන්තර්ගතයන් ලබා ගන්න.</translation> <translation id="3892148308691398805">පෙළ පිටපත් කරන්න</translation> <translation id="3894427358181296146">ෆෝල්ඩරය එක් කරන්න</translation> <translation id="3895926599014793903">විශාලනය සක්රිය කිරීම බල කරන්න</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">රූපය බාගන්න</translation> <translation id="6865313869410766144">ස්වයංපිරවුම් පෝර්ම දත්ත</translation> <translation id="6882836635272038266">අනතුරුදායක බවට දන්නා වෙබ් අඩවිවලට, බාගැනීම්වලට, සහ දිගුවලට එරෙහි සම්මත ආරක්ෂාව.</translation> -<translation id="6884306546558072722">දිගටම නොබැඳිව ගවේෂණය</translation> <translation id="688738109438487280">පවතින දත්ත <ph name="TO_ACCOUNT" /> වෙත එක් කරන්න.</translation> <translation id="6891726759199484455">ඔබේ මුරපදය පිටපත් කිරීමට අගුළු හරින්න</translation> <translation id="6896758677409633944">පිටපත්</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 343f39f..30cfacd 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Spravovať</translation> <translation id="3819178904835489326">Počet odstránených stiahnutých súborov: <ph name="NUMBER_OF_DOWNLOADS" /></translation> <translation id="3856096718352044181">Overte, že ide o platného poskytovateľa, alebo to skúste znova</translation> -<translation id="388596076286380598">Dostávajte články, videá a ďalší obsah z webov, ktoré sa vám páčia, aj keď ste offline alebo máte slabé pripojenie.</translation> <translation id="3892148308691398805">Kopírovať text</translation> <translation id="3894427358181296146">Pridanie priečinka</translation> <translation id="3895926599014793903">Vynútiť povolenie priblíženia</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Stiahnuť obrázok</translation> <translation id="6865313869410766144">Dáta automatického dopĺňania formulárov</translation> <translation id="6882836635272038266">Štandardná ochrana pred nebezpečnými webmi, stiahnutými súbormi a rozšíreniami.</translation> -<translation id="6884306546558072722">Pokračovať v prieskume offline</translation> <translation id="688738109438487280">Pridať existujúce dáta do účtu <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Heslo môžete kopírovať po odomknutí</translation> <translation id="6896758677409633944">Kopírovať</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 ff773f56..67bc128 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Upravljanje</translation> <translation id="3819178904835489326">Št. izbrisanih prenosov: <ph name="NUMBER_OF_DOWNLOADS" /></translation> <translation id="3856096718352044181">Preverite, ali je ponudnik veljaven, in poskusite pozneje znova</translation> -<translation id="388596076286380598">Prejemajte članke, videoposnetke in drugo vsebino s spletnih mest, ki so vam všeč, tudi ko nimate povezave ali ko je ta slaba.</translation> <translation id="3892148308691398805">Kopiraj besedilo</translation> <translation id="3894427358181296146">Dodajanje mape</translation> <translation id="3895926599014793903">Vsili povečavo</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Prenos slike</translation> <translation id="6865313869410766144">Podatki za samodejno izpolnjevanje obrazcev</translation> <translation id="6882836635272038266">Standardna zaščita proti spletnim mestom, prenosom in razširitvam, za katere vemo, da so nevarni.</translation> -<translation id="6884306546558072722">Nadaljevanje raziskovanja brez povezave</translation> <translation id="688738109438487280">Dodajanje obstoječih podatkov v račun <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Odklenite, če želite kopirati geslo</translation> <translation id="6896758677409633944">Kopiraj</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 683d9be..347a7c5 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Menaxho</translation> <translation id="3819178904835489326">U fshinë <ph name="NUMBER_OF_DOWNLOADS" /> shkarkime</translation> <translation id="3856096718352044181">Verifiko që ky është një ofrues i vlefshëm ose provo përsëri më vonë</translation> -<translation id="388596076286380598">Merr artikuj, video dhe përmbajtje të tjera nga sajtet që të pëlqejnë, edhe nëse je jashtë linje ose lidhja jote është e dobët.</translation> <translation id="3892148308691398805">Kopjo tekstin</translation> <translation id="3894427358181296146">Shto dosje</translation> <translation id="3895926599014793903">Aktivizo me detyrim zmadhimin</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Shkarko imazhin</translation> <translation id="6865313869410766144">Plotëso automatikisht të dhënat e formularit</translation> <translation id="6882836635272038266">Mbrojtje standarde kundër faqeve të internetit, shkarkimeve dhe shtesave që njihen si të rrezikshme.</translation> -<translation id="6884306546558072722">Vazhdo të eksplorosh jashtë linje</translation> <translation id="688738109438487280">Shto të dhënat ekzistuese te <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Shkyçe për të kopjuar fjalëkalimin</translation> <translation id="6896758677409633944">Kopjo</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 f044eff..92b8cf5 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Promeni</translation> <translation id="3819178904835489326">Izbrisana preuzimanja: <ph name="NUMBER_OF_DOWNLOADS" /></translation> <translation id="3856096718352044181">Proverite da li je ovo važeći dobavljač usluge ili probajte ponovo kasnije</translation> -<translation id="388596076286380598">Dobijajte članke, video snimke i drugi sadržaj sa sajtova koji vam se sviđaju, čak i kada ste oflajn ili je veza slaba.</translation> <translation id="3892148308691398805">Kopiraj tekst</translation> <translation id="3894427358181296146">Dodajte direktorijum</translation> <translation id="3895926599014793903">Prinudno omogući zumiranje</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Preuzmi sliku</translation> <translation id="6865313869410766144">Podaci Automatskog popunjavanja za obrasce</translation> <translation id="6882836635272038266">Standardna zaštita od veb-sajtova, preuzimanja i dodataka za koje se zna da su štetni.</translation> -<translation id="6884306546558072722">Nastavite sa oflajn istraživanjem</translation> <translation id="688738109438487280">Dodavanje postojećih podataka na <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Otključajte da biste kopirali lozinku</translation> <translation id="6896758677409633944">Kopiraj</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 4a0a28b..1309f96 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Промени</translation> <translation id="3819178904835489326">Избрисана преузимања: <ph name="NUMBER_OF_DOWNLOADS" /></translation> <translation id="3856096718352044181">Проверите да ли је ово важећи добављач услуге или пробајте поново касније</translation> -<translation id="388596076286380598">Добијајте чланке, видео снимке и други садржај са сајтова који вам се свиђају, чак и када сте офлајн или је веза слаба.</translation> <translation id="3892148308691398805">Копирај текст</translation> <translation id="3894427358181296146">Додајте директоријум</translation> <translation id="3895926599014793903">Принудно омогући зумирање</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Преузми слику</translation> <translation id="6865313869410766144">Подаци Аутоматског попуњавања за обрасце</translation> <translation id="6882836635272038266">Стандардна заштита од веб-сајтова, преузимања и додатака за које се зна да су штетни.</translation> -<translation id="6884306546558072722">Наставите са офлајн истраживањем</translation> <translation id="688738109438487280">Додавање постојећих података на <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Откључајте да бисте копирали лозинку</translation> <translation id="6896758677409633944">Копирај</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 0ff292f..0ae1b560 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Hantera</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> nedladdningar har raderats</translation> <translation id="3856096718352044181">Verifiera att detta är en giltig leverantör eller försök igen senare</translation> -<translation id="388596076286380598">Kom åt artiklar, videor och annat innehåll från webbplatser som du gillar, även när du är offline eller har dålig anslutning.</translation> <translation id="3892148308691398805">Kopiera text</translation> <translation id="3894427358181296146">Lägg till mapp</translation> <translation id="3895926599014793903">Tvinga aktivering av zoom</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Ladda ned bild</translation> <translation id="6865313869410766144">Formuläruppgifter för Autofyll</translation> <translation id="6882836635272038266">Standardskydd mot kända skadliga webbplatser, nedladdningar och tillägg.</translation> -<translation id="6884306546558072722">Fortsätta utforska offline</translation> <translation id="688738109438487280">Lägg till befintlig data i <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Lås upp om du vill kopiera lösenordet</translation> <translation id="6896758677409633944">Kopiera</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 d22b787..5c29655 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Dhibiti</translation> <translation id="3819178904835489326">Vipakuliwa <ph name="NUMBER_OF_DOWNLOADS" /> vimefutwa</translation> <translation id="3856096718352044181">Tafadhali thibitisha kuwa huyu ni mtoa huduma sahihi au ujaribu tena baadaye</translation> -<translation id="388596076286380598">Pata makala, video na maudhui mengine kutoka tovuti unazopenda, hata ikiwa uko nje ya mtandao au muunganisho wako ni dhaifu.</translation> <translation id="3892148308691398805">Nakili maandishi</translation> <translation id="3894427358181296146">Ongeza folda</translation> <translation id="3895926599014793903">Lazimisha kuwasha ukuzaji</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Pakua picha</translation> <translation id="6865313869410766144">Data ya fomu ya Kujaza Kiotomatiki</translation> <translation id="6882836635272038266">Ulinzi wa kawaida dhidi ya tovuti, vipakuliwa na viendelezi vinavyojulikana kuwa hatari.</translation> -<translation id="6884306546558072722">Endelea kupitia ukiwa nje ya mtandao</translation> <translation id="688738109438487280">Ongeza data iliyopo kwenye <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Fungua ili unakili nenosiri lako</translation> <translation id="6896758677409633944">Nakili</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 f0f51f8..4299c4e7 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">நிர்வகி</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> பதிவிறக்கங்கள் உள்ளன</translation> <translation id="3856096718352044181">இது சரியான வழங்குநர்தான் என்பதைச் சரிபார்க்கவும் அல்லது பிறகு முயலவும்</translation> -<translation id="388596076286380598">ஆஃப்லைனிலும், வேகம் குறைந்த இணைப்பிலும் கூட உங்களுக்கு விருப்பமான தளங்களில் இருந்து கட்டுரைகள், வீடியோக்கள் மற்றும் பிற உள்ளடக்கங்களைப் பெற்றிடுங்கள்.</translation> <translation id="3892148308691398805">உரையை நகலெடு</translation> <translation id="3894427358181296146">கோப்புறையைச் சேர்</translation> <translation id="3895926599014793903">பெரிதாக்குவதைச் செயல்படுத்த வலியுறுத்து</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">படத்தைப் பதிவிறக்கு</translation> <translation id="6865313869410766144">தன்னிரப்பி படிவத் தரவு</translation> <translation id="6882836635272038266">நிலையான பாதுகாப்பு பயன்முறையானது ஆபத்து என அறியப்படும் இணையதளங்கள், பதிவிறக்கங்கள் மற்றும் நீட்டிப்புகளுக்கு எதிரானது.</translation> -<translation id="6884306546558072722">ஆஃப்லைனில் உலாவிடுங்கள்</translation> <translation id="688738109438487280">ஏற்கனவே உள்ள தரவை <ph name="TO_ACCOUNT" /> இல் சேர்.</translation> <translation id="6891726759199484455">உங்கள் கடவுச்சொல்லை நகலெடுக்க, திறக்கவும்</translation> <translation id="6896758677409633944">நகலெடு</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 6001558a..ee34122 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">నిర్వహించు</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> డౌన్లోడ్లు తొలగించబడ్డాయి</translation> <translation id="3856096718352044181">దయచేసి ఇది చెల్లుబాటు అయ్యే ప్రొవైడర్ అని వెరిఫై చేయండి లేదా తర్వాత మళ్లీ ట్రై చేయండి</translation> -<translation id="388596076286380598">మీరు ఆఫ్లైన్లో ఉన్నప్పటికీ, మీ కనెక్షన్ బలహీనంగా ఉన్నప్పటికీ మీరు ఇష్టపడే సైట్ల నుండి కథనాలు, వీడియోలు, ఇతర కంటెంట్ను పొందండి.</translation> <translation id="3892148308691398805">టెక్స్ట్ను కాపీ చేయి</translation> <translation id="3894427358181296146">ఫోల్డర్ను జోడించండి</translation> <translation id="3895926599014793903">జూమ్ చేయడాన్ని నిర్బంధంగా ప్రారంభించు</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">చిత్రాన్ని డౌన్లోడ్ చేయి</translation> <translation id="6865313869410766144">స్వీయపూర్తి ఫారమ్ డేటా</translation> <translation id="6882836635272038266">ప్రమాదకరంగా గుర్తించిన వెబ్సైట్లు, డౌన్లోడ్లు, ఎక్స్టెన్షన్ల నుండి ప్రామాణిక రక్షణ.</translation> -<translation id="6884306546558072722">ఆఫ్లైన్లో అన్వేషణను కొనసాగించండి</translation> <translation id="688738109438487280">ఇప్పటికే ఉన్న డేటాను <ph name="TO_ACCOUNT" />కి జోడించండి.</translation> <translation id="6891726759199484455">మీ పాస్వర్డ్ను కాపీ చేయడానికి అన్లాక్ చేయండి</translation> <translation id="6896758677409633944">కాపీ చేయి</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 8e24209f..024da346 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">จัดการ</translation> <translation id="3819178904835489326">ลบการดาวน์โหลด <ph name="NUMBER_OF_DOWNLOADS" /> รายการแล้ว</translation> <translation id="3856096718352044181">โปรดยืนยันว่านี่เป็นผู้ให้บริการที่ถูกต้องหรือลองอีกครั้งภายหลัง</translation> -<translation id="388596076286380598">ดูบทความ วิดีโอและเนื้อหาอื่นๆ จากเว็บไซต์ที่คุณชื่นชอบ แม้ว่าคุณกำลังออฟไลน์หรือมีการเชื่อมต่อสัญญาณที่ไม่ดี</translation> <translation id="3892148308691398805">คัดลอกข้อความ</translation> <translation id="3894427358181296146">เพิ่มโฟลเดอร์</translation> <translation id="3895926599014793903">บังคับให้เปิดใช้การซูม</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">ดาวน์โหลดรูปภาพ</translation> <translation id="6865313869410766144">ข้อมูลฟอร์มที่ป้อนอัตโนมัติ</translation> <translation id="6882836635272038266">การปกป้องแบบมาตรฐานจากเว็บไซต์ การดาวน์โหลด และส่วนขยายที่ทราบแล้วว่าเป็นอันตราย</translation> -<translation id="6884306546558072722">สำรวจแบบอออฟไลน์ต่อไป</translation> <translation id="688738109438487280">เพิ่มข้อมูลที่มีอยู่ลงใน <ph name="TO_ACCOUNT" /></translation> <translation id="6891726759199484455">ปลดล็อกเพื่อคัดลอกรหัสผ่าน</translation> <translation id="6896758677409633944">คัดลอก</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 bf108bd6..777ee70 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Yönet</translation> <translation id="3819178904835489326">İndirilen <ph name="NUMBER_OF_DOWNLOADS" /> dosya silindi</translation> <translation id="3856096718352044181">Lütfen bunun geçerli bir sağlayıcı olduğunu doğrulayın veya daha sonra tekrar deneyin</translation> -<translation id="388596076286380598">Çevrimdışıyken veya bağlantınız kötü olduğunda bile beğendiğiniz sitelerdeki makalelere, videolara ve diğer içeriklere ulaşabilirsiniz.</translation> <translation id="3892148308691398805">Metni kopyala</translation> <translation id="3894427358181296146">Klasör ekleyin</translation> <translation id="3895926599014793903">Yakınlaştırmayı etkinleştirmeye zorla</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Resmi indir</translation> <translation id="6865313869410766144">Form otomatik doldurma verileri</translation> <translation id="6882836635272038266">Tehlikeli olduğu bilinen web siteleri, indirmeler ve uzantılara karşı standart koruma.</translation> -<translation id="6884306546558072722">Çevrimdışıyken de keşfetmeye devam edin</translation> <translation id="688738109438487280">Mevcut veriler <ph name="TO_ACCOUNT" /> hesabına eklenir.</translation> <translation id="6891726759199484455">Şifrenizi kopyalamak için kilidi açın</translation> <translation id="6896758677409633944">Kopyala</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 dc37bf96..bde168b 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Змінити</translation> <translation id="3819178904835489326">Видалено завантажених файлів: <ph name="NUMBER_OF_DOWNLOADS" /></translation> <translation id="3856096718352044181">Підтвердьте, що цей постачальник активний, або повторіть спробу пізніше</translation> -<translation id="388596076286380598">Отримуйте статті, відео й інший контент від сайтів, які вам подобаються, навіть у режимі офлайн або при слабкому з'єднанні.</translation> <translation id="3892148308691398805">Копіювати текст</translation> <translation id="3894427358181296146">Додати папку</translation> <translation id="3895926599014793903">Примусово ввімкнути масштабування</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Завантажити зображення</translation> <translation id="6865313869410766144">Дані автозаповнення форм</translation> <translation id="6882836635272038266">Стандартний захист від відомих небезпечних веб-сайтів, завантажень і розширень.</translation> -<translation id="6884306546558072722">Переглядайте контент у режимі офлайн</translation> <translation id="688738109438487280">Додати наявні дані в обліковий запис <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Розблокуйте, щоб скопіювати пароль</translation> <translation id="6896758677409633944">Копіювати</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 eee6323..da6480f7 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">نظم کریں</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> ڈاؤن لوڈز کو حذف کر دیا گیا</translation> <translation id="3856096718352044181">براہ کرم توثیق کریں کہ یہ درست فراہم کنندہ ہے یا بعد میں دوبارہ کوشش کریں</translation> -<translation id="388596076286380598">آف لائن ہونے یا آپ کا کنکشن خراب ہونے کے باوجود اپنی پسندیدہ سائٹس سے مضامین، ویڈیوز اور دیگر مواد حاصل کریں۔</translation> <translation id="3892148308691398805">ٹیکسٹ کاپی کریں</translation> <translation id="3894427358181296146">فولڈر کا اضافہ کریں</translation> <translation id="3895926599014793903">زوم کو زبردستی فعال کریں</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">تصویر ڈاؤن لوڈ کریں</translation> <translation id="6865313869410766144">آٹو فل فارم ڈیٹا</translation> <translation id="6882836635272038266">خطرناک مانی جانے والی ویب سائٹس، ڈاؤن لوڈز اور ایکسٹینشنز سے معیاری حفاظت۔</translation> -<translation id="6884306546558072722">آف لائن دریافت کرتے رہیں</translation> <translation id="688738109438487280"><ph name="TO_ACCOUNT" /> میں موجودہ ڈیٹا شامل کریں۔</translation> <translation id="6891726759199484455">اپنا پاس ورڈ کاپی کرنے کیلئے غیر مقفل کریں</translation> <translation id="6896758677409633944">کاپی کریں</translation> @@ -895,6 +893,7 @@ <translation id="7930998711684428189">اگر پاس ورڈز ڈیٹا کی خلاف ورزی میں افشاء ہوتے ہیں تو آپ کو متنبہ کرتا ہے۔</translation> <translation id="7942131818088350342"><ph name="PRODUCT_NAME" /> پرانا ہے۔</translation> <translation id="7947953824732555851">قبول و سائن ان کریں</translation> +<translation id="7961926449547174351">آپ نے اسٹوریج تک رسائی کو غیر فعال کر دیا ہے، براہ کرم اسے فعال کرنے کے لیے ترتیبات پر جائیں۔</translation> <translation id="7963646190083259054">وینڈر:</translation> <translation id="7967911570373677897">QR کوڈ اسکین کرنے کے لیے، اپنی ترتیبات تبدیل کریں تاکہ Chrome آپ کا کیمرا استعمال کر سکے</translation> <translation id="7971136598759319605">1 دن پہلے فعال تھا</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 a7d4c0264..64445a7 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Sozlash</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> ta yuklanma o‘chirib tashlandi</translation> <translation id="3856096718352044181">Bu ishonchli xizmat ekanini tekshiring yoki keyinroq qayta urining</translation> -<translation id="388596076286380598">Sevimli saytlaringizda maqola, video va boshqa kontentni oflayn rejimda yoki uzilishli internetda ham ochishingiz mumkin.</translation> <translation id="3892148308691398805">Matnni nusxalash</translation> <translation id="3894427358181296146">Jild qo‘shish</translation> <translation id="3895926599014793903">Hajmni majburiy o‘zgartirish funksiyasini yoqish</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Rasmni yuklab olish</translation> <translation id="6865313869410766144">Avtomatik to‘ldirish ma’lumotlari</translation> <translation id="6882836635272038266">Zararli deb hisoblangan sayt, yuklanma va kengaytmalarga qarshi standart himoya</translation> -<translation id="6884306546558072722">Oflayn rejimda davom etish</translation> <translation id="688738109438487280">Mavjud ma’lumotlarni <ph name="TO_ACCOUNT" /> hisobiga qo‘shadi.</translation> <translation id="6891726759199484455">Paroldan nusxa olish uchun qulfni oching</translation> <translation id="6896758677409633944">Nusxa olish</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 f9aeeb02..d124df6 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Quản lý</translation> <translation id="3819178904835489326">Đã xóa <ph name="NUMBER_OF_DOWNLOADS" /> bản tải xuống</translation> <translation id="3856096718352044181">Vui lòng xác minh rằng đây là nhà cung cấp hợp lệ hoặc thử lại sau</translation> -<translation id="388596076286380598">Bạn có thể xem các bài viết, video và nội dung khác trên những trang web mình thích, ngay cả khi không có kết nối mạng hoặc kết nối yếu.</translation> <translation id="3892148308691398805">Sao chép văn bản</translation> <translation id="3894427358181296146">Thêm thư mục</translation> <translation id="3895926599014793903">Buộc bật thu phóng</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Tải hình ảnh xuống</translation> <translation id="6865313869410766144">Dữ liệu tự động điền vào biểu mẫu</translation> <translation id="6882836635272038266">Chế độ bảo vệ thông thường chống lại các trang web, tệp đã tải xuống và tiện ích được xác định là nguy hiểm.</translation> -<translation id="6884306546558072722">Tiếp tục khám phá khi không có mạng</translation> <translation id="688738109438487280">Thêm dữ liệu hiện có vào <ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Mở khóa để sao chép mật khẩu của bạn</translation> <translation id="6896758677409633944">Sao ché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 e56414a..eaefaeae 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">管理</translation> <translation id="3819178904835489326">已删除 <ph name="NUMBER_OF_DOWNLOADS" /> 项下载内容</translation> <translation id="3856096718352044181">请检查并确保这是一个有效的提供商,或者稍后重试</translation> -<translation id="388596076286380598">畅享您喜爱的网站上的文章、视频和其他内容,即使离线或网络连接状况不佳也不受影响。</translation> <translation id="3892148308691398805">复制文字</translation> <translation id="3894427358181296146">添加文件夹</translation> <translation id="3895926599014793903">强制启用缩放功能</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">下载图片</translation> <translation id="6865313869410766144">自动填充表单数据</translation> <translation id="6882836635272038266">针对已知危险网站、下载内容和扩展程序提供标准保护。</translation> -<translation id="6884306546558072722">离线时也能畅享网络内容</translation> <translation id="688738109438487280">将现有数据添加到 <ph name="TO_ACCOUNT" />。</translation> <translation id="6891726759199484455">需解锁才能复制您的密码</translation> <translation id="6896758677409633944">复制</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 6bd92eb..1c6e7af 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">管理</translation> <translation id="3819178904835489326">已刪除 <ph name="NUMBER_OF_DOWNLOADS" /> 個下載項目</translation> <translation id="3856096718352044181">請驗證供應商的有效性,或稍後再試</translation> -<translation id="388596076286380598">即使離線或連線速度欠佳,您仍可從喜歡的網站取得文章、影片和其他內容。</translation> <translation id="3892148308691398805">複製文字</translation> <translation id="3894427358181296146">新增資料夾</translation> <translation id="3895926599014793903">強制啟用縮放功能</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">下載圖片</translation> <translation id="6865313869410766144">自動填入表格數據</translation> <translation id="6882836635272038266">對已知的危險網站、下載檔案及擴充程式提供標準保護功能。</translation> -<translation id="6884306546558072722">離線時繼續探索</translation> <translation id="688738109438487280">將現有資料新增至 <ph name="TO_ACCOUNT" />。</translation> <translation id="6891726759199484455">解鎖即可複製您的密碼</translation> <translation id="6896758677409633944">複製</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 4944f70..8a155c6 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">管理</translation> <translation id="3819178904835489326">已刪除 <ph name="NUMBER_OF_DOWNLOADS" /> 個下載項目</translation> <translation id="3856096718352044181">請驗證供應商是否有效,或稍後再試</translation> -<translation id="388596076286380598">即使處於離線狀態或網路訊號不良,你也可以查看喜愛網站上的文章、影片和其他內容。</translation> <translation id="3892148308691398805">複製文字</translation> <translation id="3894427358181296146">新增資料夾</translation> <translation id="3895926599014793903">強制啟用縮放功能</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">下載圖片</translation> <translation id="6865313869410766144">自動填入表單資料</translation> <translation id="6882836635272038266">針對已知不安全的網站、下載內容和擴充功能提供標準防護機制。</translation> -<translation id="6884306546558072722">繼續探索離線內容</translation> <translation id="688738109438487280">將現有資料新增至 <ph name="TO_ACCOUNT" />。</translation> <translation id="6891726759199484455">解鎖即可複製你的密碼</translation> <translation id="6896758677409633944">複製</translation> @@ -895,7 +893,7 @@ <translation id="7930998711684428189">可在密碼因資料侵害事件遭到外洩時顯示警告訊息。</translation> <translation id="7942131818088350342"><ph name="PRODUCT_NAME" /> 版本過舊。</translation> <translation id="7947953824732555851">接受並登入</translation> -<translation id="7961926449547174351">你已停用儲存空間的存取權,請前往「設定」頁面進行啟用。</translation> +<translation id="7961926449547174351">你已停用儲存空間存取權,請前往「設定」頁面啟用這項權限。</translation> <translation id="7963646190083259054">供應商:</translation> <translation id="7967911570373677897">如要掃描 QR 圖碼,請將設定變更為允許 Chrome 使用你的攝影機</translation> <translation id="7971136598759319605">上次使用時間:1 天前</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 50df141..4f61f7c 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
@@ -351,7 +351,6 @@ <translation id="3810973564298564668">Phatha</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> ukulanda kutholakele</translation> <translation id="3856096718352044181">Sicela uqinisekise ukuthi lo ngumhlinzeki wangempela noma uzame futhi kamuva</translation> -<translation id="388596076286380598">Thola ama-athikili, amavidiyo, nokunye okuqukethwe kusuka kumasayithi owathandayo, ngisho noma ungaxhumekile ku-inthanethi noma uxhumo lwakho lungaqinile.</translation> <translation id="3892148308691398805">Kopisha umbhalo</translation> <translation id="3894427358181296146">Engeza ifolda</translation> <translation id="3895926599014793903">Phoqa ukunika amandla ukusondeza</translation> @@ -759,7 +758,6 @@ <translation id="6864459304226931083">Landa isithombe</translation> <translation id="6865313869410766144">Gcwalisa ngokuzenzakalela idatha yefomu</translation> <translation id="6882836635272038266">Ukuvikelwa okujwayelekile ngokumelene namawebhusayithi, okulandwayo, nezandiso ezaziwa njengeziyingozi.</translation> -<translation id="6884306546558072722">Qhubeka nokuhlola ngokungaxhumekile ku-inthanethi</translation> <translation id="688738109438487280">Engeza idatha ekhona ku-<ph name="TO_ACCOUNT" />.</translation> <translation id="6891726759199484455">Vula ukuze ukopishe iphasiwedi yakho</translation> <translation id="6896758677409633944">Kopisha</translation>
diff --git a/chrome/browser/ui/permission_bubble/permission_bubble_browser_test_util.cc b/chrome/browser/ui/permission_bubble/permission_bubble_browser_test_util.cc index a39ef680..46f035d 100644 --- a/chrome/browser/ui/permission_bubble/permission_bubble_browser_test_util.cc +++ b/chrome/browser/ui/permission_bubble/permission_bubble_browser_test_util.cc
@@ -29,11 +29,13 @@ return requests_; } -PermissionBubbleBrowserTest::PermissionBubbleBrowserTest() { +GURL TestPermissionBubbleViewDelegate::GetEmbeddingOrigin() const { + return GURL("https://embedder.example.com"); } -PermissionBubbleBrowserTest::~PermissionBubbleBrowserTest() { -} +PermissionBubbleBrowserTest::PermissionBubbleBrowserTest() = default; + +PermissionBubbleBrowserTest::~PermissionBubbleBrowserTest() = default; void PermissionBubbleBrowserTest::SetUpOnMainThread() { ExtensionBrowserTest::SetUpOnMainThread();
diff --git a/chrome/browser/ui/permission_bubble/permission_bubble_browser_test_util.h b/chrome/browser/ui/permission_bubble/permission_bubble_browser_test_util.h index ab4543b..fa9ac7b 100644 --- a/chrome/browser/ui/permission_bubble/permission_bubble_browser_test_util.h +++ b/chrome/browser/ui/permission_bubble/permission_bubble_browser_test_util.h
@@ -34,6 +34,8 @@ const std::vector<permissions::PermissionRequest*>& Requests() override; + GURL GetEmbeddingOrigin() const override; + void Accept() override {} void Deny() override {} void Closing() override {}
diff --git a/chrome/browser/ui/views/frame/tab_strip_region_view.cc b/chrome/browser/ui/views/frame/tab_strip_region_view.cc index 3b72292..95e7fbc7 100644 --- a/chrome/browser/ui/views/frame/tab_strip_region_view.cc +++ b/chrome/browser/ui/views/frame/tab_strip_region_view.cc
@@ -58,11 +58,11 @@ int TabStripRegionView::CalculateTabStripAvailableWidth() { Layout(); - base::Optional<int> available_width = + views::SizeBound available_width = GetAvailableSize(tab_strip_container_).width(); - // |available_width| might still be undefined in cases where the tabstrip is + // |available_width| might still be unbounded in cases where the tabstrip is // hidden (e.g. presentation mode on MacOS). In these cases we don't care // about the resulting layout, since the tabstrip is not visible, so we can // substitute 0 to ensure that we relayout once the width is defined again. - return available_width.value_or(0); + return available_width.is_bounded() ? available_width.value() : 0; }
diff --git a/chrome/browser/ui/views/frame/top_controls_slide_controller_chromeos_browsertest.cc b/chrome/browser/ui/views/frame/top_controls_slide_controller_chromeos_browsertest.cc index d5d09e2..244ee0b4d95 100644 --- a/chrome/browser/ui/views/frame/top_controls_slide_controller_chromeos_browsertest.cc +++ b/chrome/browser/ui/views/frame/top_controls_slide_controller_chromeos_browsertest.cc
@@ -1362,7 +1362,7 @@ // request bubble resulting in top chrome unhiding. auto decided = [](ContentSetting) {}; permissions::PermissionRequestImpl permission_request( - url, url, ContentSettingsType::GEOLOCATION, true /* user_gesture */, + url, ContentSettingsType::GEOLOCATION, true /* user_gesture */, base::BindOnce(decided), base::DoNothing() /* delete_callback */); auto* permission_manager = permissions::PermissionRequestManager::FromWebContents(active_contents);
diff --git a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc index a33814d..52297cd 100644 --- a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc +++ b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc
@@ -846,8 +846,9 @@ const views::View* view, const views::SizeBounds& bounds) const { DCHECK_EQ(view, web_view_); - const int width = - bounds.width() ? *bounds.width() : tab_contents_container_->width(); + const int width = bounds.width().is_bounded() + ? bounds.width().value() + : tab_contents_container_->width(); const int height = TabStripUILayout::CalculateForWebViewportSize( tab_contents_container_->size()) .CalculateContainerHeight();
diff --git a/chrome/browser/ui/views/layout/interpolating_layout_manager.cc b/chrome/browser/ui/views/layout/interpolating_layout_manager.cc index 227e73c..7052e985 100644 --- a/chrome/browser/ui/views/layout/interpolating_layout_manager.cc +++ b/chrome/browser/ui/views/layout/interpolating_layout_manager.cc
@@ -55,28 +55,27 @@ LayoutInterpolation result; - const base::Optional<int> dimension = - views::GetMainAxis(orientation_, size_bounds); + const views::SizeBound bound = views::GetMainAxis(orientation_, size_bounds); // Find the larger layout that overlaps the target size. - auto match = dimension ? embedded_layouts_.upper_bound({*dimension, 0}) - : embedded_layouts_.end(); + auto match = bound.is_bounded() + ? embedded_layouts_.upper_bound({bound.value(), 0}) + : embedded_layouts_.end(); DCHECK(match != embedded_layouts_.begin()) - << "No layout set for primary dimension size " - << (dimension ? *dimension : -1) << "; first layout starts at " - << match->first.ToString(); + << "No layout set for primary dimension size " << bound.ToString() + << "; first layout starts at " << match->first.ToString(); result.first = (--match)->second; // If the target size falls in an interpolation range, get the other layout. const views::Span& first_span = match->first; - if (dimension && first_span.end() > *dimension) { + if (first_span.end() > bound) { DCHECK(match != embedded_layouts_.begin()) - << "Primary dimension size " << (dimension ? *dimension : -1) + << "Primary dimension size " << bound.ToString() << " falls into interpolation range " << match->first.ToString() << " but there is no smaller layout to interpolate with."; result.second = (--match)->second; result.percent_second = - float{first_span.end() - *dimension} / first_span.length(); + float{first_span.end() - bound.value()} / first_span.length(); } return result; @@ -87,7 +86,8 @@ // For interpolating layout we will never call this method for unbounded // sizes. DCHECK(size_bounds.is_fully_bounded()); - const gfx::Size size(*size_bounds.width(), *size_bounds.height()); + const gfx::Size size(size_bounds.width().value(), + size_bounds.height().value()); const LayoutInterpolation interpolation = GetInterpolation(size_bounds); const views::ProposedLayout first = @@ -148,7 +148,7 @@ // experience; if this doesn't work in practice we can look at other options. const LayoutInterpolation interpolation = - GetInterpolation(views::SizeBounds(width, base::nullopt)); + GetInterpolation(views::SizeBounds(width, views::SizeBound())); const int first = interpolation.first->GetPreferredHeightForWidth(host, width); if (!interpolation.second)
diff --git a/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view.cc b/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view.cc index c525e633..5cf3ff67 100644 --- a/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view.cc +++ b/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view.cc
@@ -83,6 +83,27 @@ for (permissions::PermissionRequest* request : visible_requests_) AddPermissionRequestLine(request); + + base::Optional<base::string16> extra_text = GetExtraText(); + if (extra_text.has_value()) { + auto* extra_text_label = + AddChildView(std::make_unique<views::Label>(extra_text.value())); + extra_text_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); + extra_text_label->SetMultiLine(true); + } + + if (visible_requests_[0]->GetContentSettingsType() == + ContentSettingsType::PLUGINS) { + auto learn_more_button = views::CreateVectorImageButton(this); + learn_more_button->SetFocusForPlatform(); + learn_more_button->SetTooltipText( + l10n_util::GetStringUTF16(IDS_LEARN_MORE)); + SkColor text_color = GetNativeTheme()->GetSystemColor( + ui::NativeTheme::kColorId_LabelEnabledColor); + views::SetImageFromVectorIcon(learn_more_button.get(), + vector_icons::kHelpOutlineIcon, text_color); + SetExtraView(std::move(learn_more_button)); + } } PermissionPromptBubbleView::~PermissionPromptBubbleView() = default; @@ -161,40 +182,6 @@ std::make_unique<views::Label>(request->GetMessageTextFragment())); label->SetHorizontalAlignment(gfx::ALIGN_LEFT); label->SetMultiLine(true); - - // Text that warns the user that flash will be deprecated. This text is only - // shown for flash and should be empty for all other permissions. - // TODO (crbug.com/1058401): Remove the warning text once flash is deprecated. - const auto warning_text = request->GetMessageTextWarningFragment(); - - if (warning_text.empty()) - return; - - // Should only be reached if the permission required is for flash. - DCHECK(request->GetContentSettingsType() == ContentSettingsType::PLUGINS); - - auto* warning_line_container = AddChildView(std::make_unique<views::View>()); - warning_line_container->SetLayoutManager(std::make_unique<views::BoxLayout>( - views::BoxLayout::Orientation::kHorizontal, - gfx::Insets(0, provider->GetDistanceMetric( - DISTANCE_SUBSECTION_HORIZONTAL_INDENT)), - provider->GetDistanceMetric(views::DISTANCE_RELATED_LABEL_HORIZONTAL))); - - auto* warning_label = warning_line_container->AddChildView( - std::make_unique<views::Label>(std::move(warning_text))); - warning_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); - warning_label->SetMultiLine(true); - - auto learn_more_button = views::CreateVectorImageButton(this); - learn_more_button->SetFocusForPlatform(); - learn_more_button->SetTooltipText(l10n_util::GetStringUTF16(IDS_LEARN_MORE)); - SkColor text_color = GetNativeTheme()->GetSystemColor( - ui::NativeTheme::kColorId_LabelEnabledColor); - learn_more_button_ = learn_more_button.get(); - views::SetImageFromVectorIcon(learn_more_button_, - vector_icons::kHelpOutlineIcon, text_color); - - SetExtraView(std::move(learn_more_button)); } void PermissionPromptBubbleView::UpdateAnchorPosition() { @@ -272,14 +259,14 @@ void PermissionPromptBubbleView::ButtonPressed(views::Button* sender, const ui::Event& event) { - if (sender == learn_more_button_) - chrome::AddSelectedTabWithURL(browser_, - GURL(chrome::kFlashDeprecationLearnMoreURL), - ui::PAGE_TRANSITION_LINK); + DCHECK_EQ(sender, GetExtraView()); + chrome::AddSelectedTabWithURL(browser_, + GURL(chrome::kFlashDeprecationLearnMoreURL), + ui::PAGE_TRANSITION_LINK); } PermissionPromptBubbleView::DisplayNameOrOrigin -PermissionPromptBubbleView::GetDisplayNameOrOrigin() { +PermissionPromptBubbleView::GetDisplayNameOrOrigin() const { DCHECK(!visible_requests_.empty()); GURL origin_url = visible_requests_[0]->GetOrigin(); @@ -303,6 +290,27 @@ true /* is_origin */}; } +base::Optional<base::string16> PermissionPromptBubbleView::GetExtraText() + const { + switch (visible_requests_[0]->GetContentSettingsType()) { + case ContentSettingsType::PLUGINS: + // TODO(crbug.com/1058401): Remove this warning text once flash is + // deprecated. + return l10n_util::GetStringUTF16(IDS_FLASH_PERMISSION_WARNING_FRAGMENT); + case ContentSettingsType::STORAGE_ACCESS: + return l10n_util::GetStringFUTF16( + IDS_STORAGE_ACCESS_PERMISSION_EXPLANATION, + url_formatter::FormatUrlForSecurityDisplay( + visible_requests_[0]->GetOrigin(), + url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC), + url_formatter::FormatUrlForSecurityDisplay( + delegate_->GetEmbeddingOrigin(), + url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC)); + default: + return base::nullopt; + } +} + void PermissionPromptBubbleView::AcceptPermission() { RecordDecision(); delegate_->Accept();
diff --git a/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view.h b/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view.h index 59d1d4b..f63f02f 100644 --- a/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view.h +++ b/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view.h
@@ -13,10 +13,6 @@ class Browser; -namespace views { -class ImageButton; -} - // Bubble that prompts the user to grant or deny a permission request from a // website. class PermissionPromptBubbleView : public views::ButtonListener, @@ -61,7 +57,10 @@ // Returns the origin to be displayed in the permission prompt. May return // a non-origin, e.g. extension URLs use the name of the extension. - DisplayNameOrOrigin GetDisplayNameOrOrigin(); + DisplayNameOrOrigin GetDisplayNameOrOrigin() const; + + // Get extra information to display for the permission, if any. + base::Optional<base::string16> GetExtraText() const; // Record UMA Permissions.Prompt.TimeToDecision metric. void RecordDecision(); @@ -75,8 +74,6 @@ // The requesting domain's name or origin. const DisplayNameOrOrigin name_or_origin_; - views::ImageButton* learn_more_button_ = nullptr; - base::TimeTicks permission_requested_time_; DISALLOW_COPY_AND_ASSIGN(PermissionPromptBubbleView);
diff --git a/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view_unittest.cc b/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view_unittest.cc index 51883db9..6b6efe9e 100644 --- a/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view_unittest.cc +++ b/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view_unittest.cc
@@ -27,6 +27,7 @@ std::back_inserter(raw_requests_), [](auto& req) { return req.get(); }); } + TestDelegate(const GURL& origin, const std::vector<std::string> names) { std::transform( names.begin(), names.end(), std::back_inserter(requests_), @@ -43,6 +44,10 @@ return raw_requests_; } + GURL GetEmbeddingOrigin() const override { + return GURL("https://embedder.example.com"); + } + void Accept() override {} void Deny() override {} void Closing() override {} @@ -112,4 +117,5 @@ EXPECT_PRED_FORMAT2(::testing::IsSubstring, "CameraPanTiltZoom", title); EXPECT_PRED_FORMAT2(::testing::IsNotSubstring, "VideoCapture", title); } + } // namespace
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view.cc b/chrome/browser/ui/views/profiles/profile_menu_view.cc index 1a401d8..6e0d464 100644 --- a/chrome/browser/ui/views/profiles/profile_menu_view.cc +++ b/chrome/browser/ui/views/profiles/profile_menu_view.cc
@@ -593,14 +593,15 @@ #endif } + int window_count = CountBrowsersFor(profile); if (base::FeatureList::IsEnabled(features::kNewProfilePicker) && is_guest) { AddFeatureButton( - l10n_util::GetStringUTF16(IDS_GUEST_PROFILE_MENU_CLOSE_BUTTON), + l10n_util::GetPluralStringFUTF16(IDS_GUEST_PROFILE_MENU_CLOSE_BUTTON, + window_count), base::BindRepeating(&ProfileMenuView::OnExitProfileButtonClicked, base::Unretained(this)), vector_icons::kCloseIcon); } else { - int window_count = CountBrowsersFor(profile); if (window_count > 1) { AddFeatureButton( l10n_util::GetPluralStringFUTF16(IDS_PROFILES_CLOSE_X_WINDOWS_BUTTON,
diff --git a/chrome/browser/ui/views/toolbar/browser_actions_container.cc b/chrome/browser/ui/views/toolbar/browser_actions_container.cc index a2c0685..f481ae1 100644 --- a/chrome/browser/ui/views/toolbar/browser_actions_container.cc +++ b/chrome/browser/ui/views/toolbar/browser_actions_container.cc
@@ -377,7 +377,7 @@ const BrowserActionsContainer* browser_actions = static_cast<const BrowserActionsContainer*>(view); gfx::Size preferred_size = browser_actions->GetPreferredSize(); - if (maximum_size.width()) { + if (maximum_size.width().is_bounded()) { int width; if (browser_actions->resizing() || browser_actions->animating()) { // When there are actions present, the floor on the size of the @@ -387,13 +387,15 @@ : browser_actions->GetResizeAreaWidth(); // If the provided maximum width is too small even for |min_width|, // |min_width| takes precedence. - const int max_width = std::max(min_width, *maximum_size.width()); + const int max_width = + std::max(min_width, maximum_size.width().value()); width = base::ClampToRange(preferred_size.width(), min_width, max_width); } else { // When not animating or resizing, the desired width should always // be based on the number of icons that can be displayed. - width = browser_actions->GetWidthForMaxWidth(*maximum_size.width()); + width = browser_actions->GetWidthForMaxWidth( + maximum_size.width().value()); } preferred_size = gfx::Size(width, browser_actions->GetHeightForWidth(width));
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc index cb18c2ca..80c304a 100644 --- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc +++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -178,6 +178,7 @@ #include "chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_ui.h" #include "chrome/browser/ui/webui/chromeos/cryptohome_ui.h" #include "chrome/browser/ui/webui/chromeos/drive_internals_ui.h" +#include "chrome/browser/ui/webui/chromeos/file_manager/file_manager_ui.h" #include "chrome/browser/ui/webui/chromeos/first_run/first_run_ui.h" #include "chrome/browser/ui/webui/chromeos/internet_config_dialog.h" #include "chrome/browser/ui/webui/chromeos/internet_detail_dialog.h" @@ -218,8 +219,6 @@ #if defined(OS_CHROMEOS) && !defined(OFFICIAL_BUILD) #include "chrome/browser/ui/webui/chromeos/emulator/device_emulator_ui.h" -#include "chromeos/components/file_manager/file_manager_ui.h" -#include "chromeos/components/file_manager/url_constants.h" #include "chromeos/components/sample_system_web_app_ui/sample_system_web_app_ui.h" #include "chromeos/components/sample_system_web_app_ui/url_constants.h" #include "chromeos/components/telemetry_extension_ui/telemetry_extension_ui.h" @@ -649,6 +648,9 @@ return &NewWebUI<chromeos::CryptohomeUI>; if (url.host_piece() == chrome::kChromeUIDriveInternalsHost) return &NewWebUI<chromeos::DriveInternalsUI>; + if (base::FeatureList::IsEnabled(chromeos::features::kFilesSWA) && + url.host_piece() == chrome::kChromeUIFileManagerHost) + return &NewWebUI<chromeos::file_manager::FileManagerUI>; if (url.host_piece() == chrome::kChromeUIFirstRunHost) return &NewWebUI<chromeos::FirstRunUI>; if (url.host_piece() == chromeos::kChromeUIHelpAppHost) @@ -733,8 +735,6 @@ return &NewWebUI<DeviceEmulatorUI>; } #endif // !defined(USE_REAL_DBUS_CLIENTS) - if (url.host_piece() == chromeos::file_manager::kChromeUIFileManagerHost) - return &NewWebUI<chromeos::file_manager::FileManagerUI>; if (url.host_piece() == chromeos::kChromeUISampleSystemWebAppHost) return &NewWebUI<chromeos::SampleSystemWebAppUI>; if (url.host_piece() == chromeos::kChromeUITelemetryExtensionHost) {
diff --git a/chrome/browser/ui/webui/chromeos/file_manager/BUILD.gn b/chrome/browser/ui/webui/chromeos/file_manager/BUILD.gn new file mode 100644 index 0000000..db7d34a --- /dev/null +++ b/chrome/browser/ui/webui/chromeos/file_manager/BUILD.gn
@@ -0,0 +1,9 @@ +# Copyright 2020 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//mojo/public/tools/bindings/mojom.gni") + +mojom("mojo_bindings") { + sources = [ "file_manager.mojom" ] +}
diff --git a/chromeos/components/file_manager/OWNERS b/chrome/browser/ui/webui/chromeos/file_manager/OWNERS similarity index 100% rename from chromeos/components/file_manager/OWNERS rename to chrome/browser/ui/webui/chromeos/file_manager/OWNERS
diff --git a/chromeos/components/file_manager/file_manager.mojom b/chrome/browser/ui/webui/chromeos/file_manager/file_manager.mojom similarity index 100% rename from chromeos/components/file_manager/file_manager.mojom rename to chrome/browser/ui/webui/chromeos/file_manager/file_manager.mojom
diff --git a/chromeos/components/file_manager/file_manager_page_handler.cc b/chrome/browser/ui/webui/chromeos/file_manager/file_manager_page_handler.cc similarity index 77% rename from chromeos/components/file_manager/file_manager_page_handler.cc rename to chrome/browser/ui/webui/chromeos/file_manager/file_manager_page_handler.cc index ff83729..52255d05a 100644 --- a/chromeos/components/file_manager/file_manager_page_handler.cc +++ b/chrome/browser/ui/webui/chromeos/file_manager/file_manager_page_handler.cc
@@ -2,9 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chromeos/components/file_manager/file_manager_page_handler.h" +#include "chrome/browser/ui/webui/chromeos/file_manager/file_manager_ui.h" #include "base/bind.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/webui/chromeos/file_manager/file_manager_page_handler.h" +#include "chrome/common/url_constants.h" +#include "chrome/grit/browser_resources.h" +#include "content/public/browser/web_ui.h" +#include "content/public/browser/web_ui_data_source.h" namespace chromeos { namespace file_manager {
diff --git a/chromeos/components/file_manager/file_manager_page_handler.h b/chrome/browser/ui/webui/chromeos/file_manager/file_manager_page_handler.h similarity index 79% rename from chromeos/components/file_manager/file_manager_page_handler.h rename to chrome/browser/ui/webui/chromeos/file_manager/file_manager_page_handler.h index 9cc7f316..603c689 100644 --- a/chromeos/components/file_manager/file_manager_page_handler.h +++ b/chrome/browser/ui/webui/chromeos/file_manager/file_manager_page_handler.h
@@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROMEOS_COMPONENTS_FILE_MANAGER_FILE_MANAGER_PAGE_HANDLER_H_ -#define CHROMEOS_COMPONENTS_FILE_MANAGER_FILE_MANAGER_PAGE_HANDLER_H_ +#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_FILE_MANAGER_FILE_MANAGER_PAGE_HANDLER_H_ +#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_FILE_MANAGER_FILE_MANAGER_PAGE_HANDLER_H_ #include <memory> #include "base/macros.h" #include "base/timer/timer.h" -#include "chromeos/components/file_manager/file_manager.mojom.h" +#include "chrome/browser/ui/webui/chromeos/file_manager/file_manager.mojom.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver.h" @@ -47,4 +47,4 @@ } // namespace file_manager } // namespace chromeos -#endif // CHROMEOS_COMPONENTS_FILE_MANAGER_FILE_MANAGER_PAGE_HANDLER_H_ +#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_FILE_MANAGER_FILE_MANAGER_PAGE_HANDLER_H_
diff --git a/chrome/browser/ui/webui/chromeos/file_manager/file_manager_ui.cc b/chrome/browser/ui/webui/chromeos/file_manager/file_manager_ui.cc new file mode 100644 index 0000000..88d3cb9 --- /dev/null +++ b/chrome/browser/ui/webui/chromeos/file_manager/file_manager_ui.cc
@@ -0,0 +1,57 @@ +// Copyright (c) 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/webui/chromeos/file_manager/file_manager_ui.h" + +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/webui/chromeos/file_manager/file_manager_page_handler.h" +#include "chrome/common/url_constants.h" +#include "chrome/grit/browser_resources.h" +#include "content/public/browser/web_ui.h" +#include "content/public/browser/web_ui_data_source.h" + +namespace chromeos { +namespace file_manager { + +FileManagerUI::FileManagerUI(content::WebUI* web_ui) + : MojoWebUIController(web_ui) { + content::WebUIDataSource* source = + content::WebUIDataSource::Create(chrome::kChromeUIFileManagerHost); + source->AddResourcePath("file_manager.css", IDR_FILE_MANAGER_CSS); + source->AddResourcePath("file_manager.js", IDR_FILE_MANAGER_JS); + source->AddResourcePath("file_manager.mojom-lite.js", + IDR_FILE_MANAGER_MOJO_LITE_JS); + source->AddResourcePath("browser_proxy.js", IDR_FILE_MANAGER_PROXY_JS); + + // Default content for chrome://file-manager: ensures unhandled URLs return + // 404 rather than content from SetDefaultResource(). + source->AddResourcePath("", IDR_FILE_MANAGER_HTML); + + Profile* profile = Profile::FromWebUI(web_ui); + content::WebUIDataSource::Add(profile, source); +} + +FileManagerUI::~FileManagerUI() = default; + +void FileManagerUI::BindInterface( + mojo::PendingReceiver<mojom::PageHandlerFactory> pending_receiver) { + if (page_factory_receiver_.is_bound()) { + page_factory_receiver_.reset(); + } + page_factory_receiver_.Bind(std::move(pending_receiver)); +} + +void FileManagerUI::CreatePageHandler( + mojo::PendingRemote<mojom::Page> pending_page, + mojo::PendingReceiver<mojom::PageHandler> pending_page_handler) { + DCHECK(pending_page.is_valid()); + + page_handler_ = std::make_unique<FileManagerPageHandler>( + std::move(pending_page_handler), std::move(pending_page)); +} + +WEB_UI_CONTROLLER_TYPE_IMPL(FileManagerUI) + +} // namespace file_manager +} // namespace chromeos
diff --git a/chromeos/components/file_manager/file_manager_ui.h b/chrome/browser/ui/webui/chromeos/file_manager/file_manager_ui.h similarity index 81% rename from chromeos/components/file_manager/file_manager_ui.h rename to chrome/browser/ui/webui/chromeos/file_manager/file_manager_ui.h index 5d30f88..b33ab46 100644 --- a/chromeos/components/file_manager/file_manager_ui.h +++ b/chrome/browser/ui/webui/chromeos/file_manager/file_manager_ui.h
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROMEOS_COMPONENTS_FILE_MANAGER_FILE_MANAGER_UI_H_ -#define CHROMEOS_COMPONENTS_FILE_MANAGER_FILE_MANAGER_UI_H_ +#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_FILE_MANAGER_FILE_MANAGER_UI_H_ +#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_FILE_MANAGER_FILE_MANAGER_UI_H_ #include <memory> -#include "chromeos/components/file_manager/file_manager.mojom.h" +#include "chrome/browser/ui/webui/chromeos/file_manager/file_manager.mojom.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver.h" @@ -47,4 +47,4 @@ } // namespace file_manager } // namespace chromeos -#endif // CHROMEOS_COMPONENTS_FILE_MANAGER_FILE_MANAGER_UI_H_ +#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_FILE_MANAGER_FILE_MANAGER_UI_H_
diff --git a/chrome/browser/ui/webui/chromeos/login/user_creation_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/user_creation_screen_handler.cc index 06356a7..98ffbb060 100644 --- a/chrome/browser/ui/webui/chromeos/login/user_creation_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/user_creation_screen_handler.cc
@@ -33,6 +33,11 @@ builder->AddF("userCreationTitle", IDS_OOBE_USER_CREATION_TITLE, ui::GetChromeOSDeviceName()); builder->Add("userCreationSubtitle", IDS_OOBE_USER_CREATION_SUBTITLE); + builder->AddF("userCreationAddPersonTitle", + IDS_OOBE_USER_CREATION_ADD_PERSON_TITLE, + ui::GetChromeOSDeviceName()); + builder->Add("userCreationAddPersonSubtitle", + IDS_OOBE_USER_CREATION_ADD_PERSON_SUBTITLE); builder->Add("createForSelfLabel", IDS_OOBE_USER_CREATION_SELF_BUTTON_LABEL); builder->Add("createForSelfDescription", IDS_OOBE_USER_CREATION_SELF_BUTTON_DESCRIPTION);
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_ui.cc b/chrome/browser/ui/webui/print_preview/print_preview_ui.cc index a9aedac..cc4d6e8 100644 --- a/chrome/browser/ui/webui/print_preview/print_preview_ui.cc +++ b/chrome/browser/ui/webui/print_preview/print_preview_ui.cc
@@ -420,6 +420,9 @@ "showPrinterStatus", base::FeatureList::IsEnabled(chromeos::features::kPrinterStatus)); source->AddBoolean( + "showPrinterStatusInDialog", + base::FeatureList::IsEnabled(chromeos::features::kPrinterStatusDialog)); + source->AddBoolean( "printSaveToDrive", base::FeatureList::IsEnabled(chromeos::features::kPrintSaveToDrive)); #endif
diff --git a/chrome/browser/ui/webui/settings/chromeos/languages_section.cc b/chrome/browser/ui/webui/settings/chromeos/languages_section.cc index 125d03b..07867b4 100644 --- a/chrome/browser/ui/webui/settings/chromeos/languages_section.cc +++ b/chrome/browser/ui/webui/settings/chromeos/languages_section.cc
@@ -303,6 +303,12 @@ {"addInputMethodLabel", IDS_OS_SETTINGS_LANGUAGES_ADD_INPUT_METHOD_LABEL}, {"removeInputMethodLabel", IDS_OS_SETTINGS_LANGUAGES_REMOVE_INPUT_METHOD_LABEL}, + {"suggestedInputMethodsLabel", + IDS_OS_SETTINGS_LANGUAGES_SUGGESTED_INPUT_METHODS_LABEL}, + {"allInputMethodsLabel", + IDS_OS_SETTINGS_LANGUAGES_ALL_INPUT_METHODS_LABEL}, + {"searchInputMethodsLabel", + IDS_OS_SETTINGS_LANGUAGES_SEARCH_INPUT_METHODS_LABEL}, {"spellCheckTitle", IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_TITLE}, {"spellCheckEnhancedLabel", IDS_OS_SETTINGS_LANGUAGES_SPELL_CHECK_ENHANCED_LABEL},
diff --git a/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc b/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc index e7331b9..9206266 100644 --- a/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc +++ b/chrome/browser/ui/webui/settings/settings_clear_browsing_data_handler.cc
@@ -279,6 +279,8 @@ break; case BrowsingDataType::PASSWORDS: remove_mask |= ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS; + remove_mask |= + ChromeBrowsingDataRemoverDelegate::DATA_TYPE_ACCOUNT_PASSWORDS; break; case BrowsingDataType::FORM_DATA: remove_mask |= ChromeBrowsingDataRemoverDelegate::DATA_TYPE_FORM_DATA;
diff --git a/chrome/browser/ui/webui/tab_search/tab_search.mojom b/chrome/browser/ui/webui/tab_search/tab_search.mojom index d5b163a..008236d 100644 --- a/chrome/browser/ui/webui/tab_search/tab_search.mojom +++ b/chrome/browser/ui/webui/tab_search/tab_search.mojom
@@ -26,7 +26,6 @@ bool pinned; string title; string url; - string? fav_icon_url; bool is_default_favicon; bool show_icon; mojo_base.mojom.TimeTicks last_active_time_ticks;
diff --git a/chrome/browser/ui/webui/tab_search/tab_search_page_handler.cc b/chrome/browser/ui/webui/tab_search/tab_search_page_handler.cc index cb771c8..4c57761 100644 --- a/chrome/browser/ui/webui/tab_search/tab_search_page_handler.cc +++ b/chrome/browser/ui/webui/tab_search/tab_search_page_handler.cc
@@ -32,12 +32,10 @@ TabSearchPageHandler::TabSearchPageHandler( mojo::PendingReceiver<tab_search::mojom::PageHandler> receiver, mojo::PendingRemote<tab_search::mojom::Page> page, - content::WebUI* web_ui, Delegate* delegate) : receiver_(this, std::move(receiver)), page_(std::move(page)), browser_(chrome::FindLastActive()), - web_ui_(web_ui), delegate_(delegate), debounce_timer_(std::make_unique<base::RetainingOneShotTimer>( FROM_HERE, @@ -180,12 +178,11 @@ if (tab_renderer_data.favicon.isNull()) { tab_data->is_default_favicon = true; } else { - tab_data->fav_icon_url = webui::EncodePNGAndMakeDataURI( - tab_renderer_data.favicon, web_ui_->GetDeviceScaleFactor()); tab_data->is_default_favicon = tab_renderer_data.favicon.BackedBySameObjectAs( favicon::GetDefaultFavicon().AsImageSkia()); } + tab_data->show_icon = tab_renderer_data.show_icon; tab_data->last_active_time_ticks = contents->GetLastActiveTime();
diff --git a/chrome/browser/ui/webui/tab_search/tab_search_page_handler.h b/chrome/browser/ui/webui/tab_search/tab_search_page_handler.h index 871ab97..f349476 100644 --- a/chrome/browser/ui/webui/tab_search/tab_search_page_handler.h +++ b/chrome/browser/ui/webui/tab_search/tab_search_page_handler.h
@@ -41,7 +41,6 @@ TabSearchPageHandler( mojo::PendingReceiver<tab_search::mojom::PageHandler> receiver, mojo::PendingRemote<tab_search::mojom::Page> page, - content::WebUI* web_ui, Delegate* delegate); TabSearchPageHandler(const TabSearchPageHandler&) = delete; TabSearchPageHandler& operator=(const TabSearchPageHandler&) = delete; @@ -98,7 +97,6 @@ mojo::Receiver<tab_search::mojom::PageHandler> receiver_; mojo::Remote<tab_search::mojom::Page> page_; Browser* const browser_; - content::WebUI* const web_ui_; Delegate* const delegate_; BrowserTabStripTracker browser_tab_strip_tracker_{this, this}; std::unique_ptr<base::RetainingOneShotTimer> debounce_timer_;
diff --git a/chrome/browser/ui/webui/tab_search/tab_search_page_handler_unittest.cc b/chrome/browser/ui/webui/tab_search/tab_search_page_handler_unittest.cc index 35970d01..b2d15bf 100644 --- a/chrome/browser/ui/webui/tab_search/tab_search_page_handler_unittest.cc +++ b/chrome/browser/ui/webui/tab_search/tab_search_page_handler_unittest.cc
@@ -60,7 +60,6 @@ EXPECT_FALSE(tab->pinned); EXPECT_EQ(title, tab->title); EXPECT_EQ(url, tab->url); - EXPECT_TRUE(tab->fav_icon_url.has_value()); EXPECT_TRUE(tab->is_default_favicon); EXPECT_TRUE(tab->show_icon); EXPECT_GT(tab->last_active_time_ticks, base::TimeTicks()); @@ -80,12 +79,10 @@ class TestTabSearchPageHandler : public TabSearchPageHandler { public: TestTabSearchPageHandler(mojo::PendingRemote<tab_search::mojom::Page> page, - content::WebUI* web_ui, TabSearchPageHandler::Delegate* delegate) : TabSearchPageHandler( mojo::PendingReceiver<tab_search::mojom::PageHandler>(), std::move(page), - web_ui, delegate) { mock_debounce_timer_ = new base::MockRetainingOneShotTimer(); SetTimerForTesting(base::WrapUnique(mock_debounce_timer_)); @@ -120,7 +117,7 @@ BrowserList::SetLastActive(browser1()); handler_delegate_ = std::make_unique<MockTabSearchPageHandlerDelegate>(); handler_ = std::make_unique<TestTabSearchPageHandler>( - page_.BindAndGetRemote(), web_ui(), handler_delegate_.get()); + page_.BindAndGetRemote(), handler_delegate_.get()); } void TearDown() override {
diff --git a/chrome/browser/ui/webui/tab_search/tab_search_ui.cc b/chrome/browser/ui/webui/tab_search/tab_search_ui.cc index 0abc024..9020535 100644 --- a/chrome/browser/ui/webui/tab_search/tab_search_ui.cc +++ b/chrome/browser/ui/webui/tab_search/tab_search_ui.cc
@@ -70,6 +70,6 @@ mojo::PendingRemote<tab_search::mojom::Page> page, mojo::PendingReceiver<tab_search::mojom::PageHandler> receiver) { DCHECK(page); - page_handler_ = std::make_unique<TabSearchPageHandler>( - std::move(receiver), std::move(page), web_ui(), this); + page_handler_ = std::make_unique<TabSearchPageHandler>(std::move(receiver), + std::move(page), this); }
diff --git a/chrome/browser/video_tutorials/BUILD.gn b/chrome/browser/video_tutorials/BUILD.gn index 3e04d57..4d551ed 100644 --- a/chrome/browser/video_tutorials/BUILD.gn +++ b/chrome/browser/video_tutorials/BUILD.gn
@@ -53,18 +53,34 @@ android_library("java") { sources = [ "android/java/src/org/chromium/chrome/browser/video_tutorials/Tutorial.java", + "android/java/src/org/chromium/chrome/browser/video_tutorials/VideoIPHCoordinator.java", + "android/java/src/org/chromium/chrome/browser/video_tutorials/VideoIPHProperties.java", + "android/java/src/org/chromium/chrome/browser/video_tutorials/VideoIPHView.java", + "android/java/src/org/chromium/chrome/browser/video_tutorials/VideoTutorialIPHUtils.java", "android/java/src/org/chromium/chrome/browser/video_tutorials/VideoTutorialService.java", ] deps = [ + ":java_resources", "//base:base_java", + "//chrome/browser/image_fetcher:java", "//components/browser_ui/widget/android:java", + "//components/feature_engagement/public:public_java", "//third_party/android_deps:androidx_annotation_annotation_java", + "//ui/android:ui_java", ] + resources_package = "org.chromium.chrome.browser.video_tutorials" srcjar_deps = [ ":jni_enums" ] } + android_resources("java_resources") { + create_srcjar = false + sources = [ "android/java/res/layout/video_tutorial_iph_card.xml" ] + + deps = [ "//ui/android:ui_java_resources" ] + } + java_cpp_enum("jni_enums") { visibility = [ "*" ] @@ -80,7 +96,7 @@ # This internal file will be replaced by a generated file so the resulting # android_library target does not actually depend on this internal file. - sources = [ "internal/android/java/src/org/chromium/chrome/browser/video_tutorials/bridges/VideoTutorialServiceFactory.java" ] + sources = [ "internal/android/java/src/org/chromium/chrome/browser/video_tutorials/VideoTutorialServiceFactory.java" ] } }
diff --git a/chrome/browser/video_tutorials/android/java/res/layout/video_tutorial_iph_card.xml b/chrome/browser/video_tutorials/android/java/res/layout/video_tutorial_iph_card.xml new file mode 100644 index 0000000..7964a463 --- /dev/null +++ b/chrome/browser/video_tutorials/android/java/res/layout/video_tutorial_iph_card.xml
@@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2020 The Chromium Authors. All rights reserved. + Use of this source code is governed by a BSD-style license that can be + found in the LICENSE file. --> + +<RelativeLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/video_tutorial_card" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@drawable/hairline_border_card_background" + android:paddingTop="@dimen/promo_compact_padding" + android:paddingStart="@dimen/promo_compact_padding" + android:paddingEnd="@dimen/promo_compact_padding" + android:paddingBottom="@dimen/promo_compact_padding"> + + <org.chromium.components.browser_ui.widget.RoundedCornerImageView + android:id="@+id/thumbnail" + android:layout_width="80dp" + android:layout_height="58dp" + android:layout_gravity="center_vertical" + android:importantForAccessibility="no" + app:roundedfillColor="@color/modern_grey_300" + app:cornerRadiusBottomStart="@dimen/default_rounded_corner_radius" + app:cornerRadiusBottomEnd="@dimen/default_rounded_corner_radius" + app:cornerRadiusTopStart="@dimen/default_rounded_corner_radius" + app:cornerRadiusTopEnd="@dimen/default_rounded_corner_radius" /> + + <TextView + android:id="@+id/video_length" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignBottom="@id/thumbnail" + android:layout_marginStart="6dp" + android:layout_marginBottom="6dp" + android:paddingStart="4dp" + android:paddingEnd="4dp" + android:background="@color/modern_grey_900" + android:textAppearance="@style/TextAppearance.TextSmall.Primary.Light" /> + + <TextView + android:id="@+id/title" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_toEndOf="@id/thumbnail" + android:layout_toStartOf="@id/close_button" + android:layout_gravity="center_vertical" + android:layout_marginStart="12dp" + android:layout_marginEnd="12dp" + android:ellipsize="end" + android:maxLines="3" + android:textAppearance="@style/TextAppearance.TextLarge.Primary" /> + + <org.chromium.ui.widget.ChromeImageButton + android:id="@+id/close_button" + android:layout_height="24dp" + android:layout_width="24dp" + android:layout_alignParentEnd="true" + android:background="?attr/selectableItemBackground" + android:contentDescription="@string/close" + android:src="@drawable/btn_close" /> + +</RelativeLayout>
diff --git a/chrome/browser/video_tutorials/android/java/src/org/chromium/chrome/browser/video_tutorials/VideoIPHCoordinator.java b/chrome/browser/video_tutorials/android/java/src/org/chromium/chrome/browser/video_tutorials/VideoIPHCoordinator.java new file mode 100644 index 0000000..4dbdf21 --- /dev/null +++ b/chrome/browser/video_tutorials/android/java/src/org/chromium/chrome/browser/video_tutorials/VideoIPHCoordinator.java
@@ -0,0 +1,63 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.video_tutorials; + +import android.view.ViewStub; + +import org.chromium.base.Callback; +import org.chromium.chrome.browser.image_fetcher.ImageFetcher; +import org.chromium.ui.modelutil.PropertyModel; +import org.chromium.ui.modelutil.PropertyModelChangeProcessor; + +/** + * Creates and shows a video tutorial IPH. Requires a {@link ViewStub} to be passed which will + * inflate when the IPH is shown. + */ +public class VideoIPHCoordinator { + private final PropertyModel mModel; + private final VideoIPHView mView; + private final ImageFetcher mImageFetcher; + private final Callback<Tutorial> mOnClickListener; + private final Callback<Tutorial> mOnDismissListener; + + /** + * Constructor. + * @param viewStub The view stub which will inflate to show the IPH. + * @param imageFetcher The {@link ImageFetcher} to fetch thumbnail. + * @param onClickListener The on click listener that starts playing IPH. + * @param onDismissListener The listener to be invoked on dismissal. + */ + public VideoIPHCoordinator(ViewStub viewStub, ImageFetcher imageFetcher, + Callback<Tutorial> onClickListener, Callback<Tutorial> onDismissListener) { + mImageFetcher = imageFetcher; + mOnClickListener = onClickListener; + mOnDismissListener = onDismissListener; + + mModel = new PropertyModel(VideoIPHProperties.ALL_KEYS); + mView = new VideoIPHView(viewStub); + PropertyModelChangeProcessor.create(mModel, mView, VideoIPHView::bind); + } + + /** + * Shows an IPH card featuring the given {@link Tutorial}. Can be called multiple times with + * different tutorials. The ViewStub will inflate and create the card on the first invocation. + * @param tutorial The tutorial to be featured in the IPH. + */ + public void showVideoIPH(Tutorial tutorial) { + mModel.set(VideoIPHProperties.VISIBILITY, true); + mModel.set(VideoIPHProperties.DISPLAY_TITLE, tutorial.displayTitle); + mModel.set(VideoIPHProperties.VIDEO_LENGTH, + VideoTutorialIPHUtils.getVideoLengthString(tutorial.videoLength)); + mModel.set(VideoIPHProperties.CLICK_LISTENER, () -> mOnClickListener.onResult(tutorial)); + mModel.set( + VideoIPHProperties.DISMISS_LISTENER, () -> mOnDismissListener.onResult(tutorial)); + + mModel.set(VideoIPHProperties.THUMBNAIL, null); + ImageFetcher.Params params = ImageFetcher.Params.create( + tutorial.posterUrl, ImageFetcher.VIDEO_TUTORIALS_UMA_CLIENT_NAME); + mImageFetcher.fetchImage( + params, bitmap -> mModel.set(VideoIPHProperties.THUMBNAIL, bitmap)); + } +} \ No newline at end of file
diff --git a/chrome/browser/video_tutorials/android/java/src/org/chromium/chrome/browser/video_tutorials/VideoIPHProperties.java b/chrome/browser/video_tutorials/android/java/src/org/chromium/chrome/browser/video_tutorials/VideoIPHProperties.java new file mode 100644 index 0000000..a70d7762 --- /dev/null +++ b/chrome/browser/video_tutorials/android/java/src/org/chromium/chrome/browser/video_tutorials/VideoIPHProperties.java
@@ -0,0 +1,41 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.video_tutorials; + +import android.graphics.Bitmap; + +import org.chromium.ui.modelutil.PropertyKey; +import org.chromium.ui.modelutil.PropertyModel.WritableBooleanPropertyKey; +import org.chromium.ui.modelutil.PropertyModel.WritableObjectPropertyKey; + +/** The properties needed to show the video tutorial IPH. */ +class VideoIPHProperties { + /** Whether or not the IPH should be shown. */ + public static final WritableBooleanPropertyKey VISIBILITY = new WritableBooleanPropertyKey(); + + /** The display title. */ + public static final WritableObjectPropertyKey<String> DISPLAY_TITLE = + new WritableObjectPropertyKey<>(); + + /** The text representing the length of the video. */ + public static final WritableObjectPropertyKey<String> VIDEO_LENGTH = + new WritableObjectPropertyKey<>(); + + /** The thumbnail associated with the tutorial. */ + public static final WritableObjectPropertyKey<Bitmap> THUMBNAIL = + new WritableObjectPropertyKey<>(); + + /** The listener to be invoked when the IPH is clicked. */ + public static final WritableObjectPropertyKey<Runnable> CLICK_LISTENER = + new WritableObjectPropertyKey<>(); + + /** The listener to be invoked when the IPH is dismissed. */ + public static final WritableObjectPropertyKey<Runnable> DISMISS_LISTENER = + new WritableObjectPropertyKey<>(); + + /** All keys associated with the model. */ + public static final PropertyKey[] ALL_KEYS = new PropertyKey[] { + VISIBILITY, DISPLAY_TITLE, VIDEO_LENGTH, THUMBNAIL, CLICK_LISTENER, DISMISS_LISTENER}; +}
diff --git a/chrome/browser/video_tutorials/android/java/src/org/chromium/chrome/browser/video_tutorials/VideoIPHView.java b/chrome/browser/video_tutorials/android/java/src/org/chromium/chrome/browser/video_tutorials/VideoIPHView.java new file mode 100644 index 0000000..bc5dc70 --- /dev/null +++ b/chrome/browser/video_tutorials/android/java/src/org/chromium/chrome/browser/video_tutorials/VideoIPHView.java
@@ -0,0 +1,86 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.video_tutorials; + +import android.graphics.Bitmap; +import android.graphics.drawable.ColorDrawable; +import android.view.View; +import android.view.ViewStub; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.Nullable; + +import org.chromium.ui.modelutil.PropertyKey; +import org.chromium.ui.modelutil.PropertyModel; + +/** + * The View component of the video tutorial IPH. This takes the {@link ViewStub} and inflates it to + * show the UI. + */ +class VideoIPHView { + private final ViewStub mViewStub; + private View mCardView; + + /** Constructor. */ + public VideoIPHView(ViewStub viewStub) { + mViewStub = viewStub; + } + + private void setVisibility(boolean visible) { + if (visible && mCardView == null) mCardView = mViewStub.inflate(); + if (mCardView != null) mCardView.setVisibility(visible ? View.VISIBLE : View.GONE); + } + + private void setTitle(String title) { + TextView view = mCardView.findViewById(R.id.title); + view.setText(title); + } + + /** Called to set the video length text of an IPH. */ + private void setVideoLength(String videoLength) { + TextView view = mCardView.findViewById(R.id.video_length); + view.setText(videoLength); + } + + private void setThumbnail(@Nullable Bitmap bitmap) { + ImageView view = mCardView.findViewById(R.id.thumbnail); + if (bitmap == null) { + view.setImageDrawable( + new ColorDrawable(view.getResources().getColor(R.color.image_loading_color))); + } else { + view.setImageBitmap(bitmap); + } + } + + private void setClickListener(Runnable clickListener) { + mCardView.setOnClickListener(v -> clickListener.run()); + } + + private void setDismissListener(Runnable dismissListener) { + View closeButton = mCardView.findViewById(R.id.close_button); + closeButton.setOnClickListener(view -> { + mCardView.setVisibility(View.GONE); + dismissListener.run(); + }); + } + + /** The view binder that propagates events from model to view. */ + public static void bind(PropertyModel model, VideoIPHView view, PropertyKey propertyKey) { + if (propertyKey == VideoIPHProperties.VISIBILITY) { + view.setVisibility(model.get(VideoIPHProperties.VISIBILITY)); + } else if (propertyKey == VideoIPHProperties.DISPLAY_TITLE) { + view.setTitle(model.get(VideoIPHProperties.DISPLAY_TITLE)); + } else if (propertyKey == VideoIPHProperties.VIDEO_LENGTH) { + view.setVideoLength(model.get(VideoIPHProperties.VIDEO_LENGTH)); + } else if (propertyKey == VideoIPHProperties.THUMBNAIL) { + view.setThumbnail(model.get(VideoIPHProperties.THUMBNAIL)); + } else if (propertyKey == VideoIPHProperties.CLICK_LISTENER) { + view.setClickListener(model.get(VideoIPHProperties.CLICK_LISTENER)); + } else if (propertyKey == VideoIPHProperties.DISMISS_LISTENER) { + view.setDismissListener(model.get(VideoIPHProperties.DISMISS_LISTENER)); + } + } +}
diff --git a/chrome/browser/video_tutorials/android/java/src/org/chromium/chrome/browser/video_tutorials/VideoTutorialIPHUtils.java b/chrome/browser/video_tutorials/android/java/src/org/chromium/chrome/browser/video_tutorials/VideoTutorialIPHUtils.java new file mode 100644 index 0000000..854572b7e --- /dev/null +++ b/chrome/browser/video_tutorials/android/java/src/org/chromium/chrome/browser/video_tutorials/VideoTutorialIPHUtils.java
@@ -0,0 +1,70 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.video_tutorials; + +import org.chromium.components.feature_engagement.EventConstants; +import org.chromium.components.feature_engagement.FeatureConstants; + +/** + * Handles various feature utility functions associated with video tutorials IPH. + */ +public class VideoTutorialIPHUtils { + /** @return The feature name to be used in IPH backend for the given {@code featureType}. */ + public static String getFeatureName(@FeatureType int featureType) { + switch (featureType) { + case FeatureType.DOWNLOAD: + return FeatureConstants.VIDEO_TUTORIAL_DOWNLOAD_FEATURE; + case FeatureType.SEARCH: + return FeatureConstants.VIDEO_TUTORIAL_SEARCH_FEATURE; + default: + assert false; + return null; + } + } + + /** + * @return The event used in IPH backend when the IPH associated with the {@code featureType} + * is clicked. + */ + public static String getClickEvent(@FeatureType int featureType) { + switch (featureType) { + case FeatureType.DOWNLOAD: + return EventConstants.VIDEO_TUTORIAL_CLICKED_DOWNLOAD; + case FeatureType.SEARCH: + return EventConstants.VIDEO_TUTORIAL_CLICKED_SEARCH; + default: + assert false; + return null; + } + } + + /** + * @return The event used in IPH backend when the IPH associated with the {@code featureType} + * is dismissed. + */ + public static String getDismissEvent(@FeatureType int featureType) { + switch (featureType) { + case FeatureType.DOWNLOAD: + return EventConstants.VIDEO_TUTORIAL_DISMISSED_DOWNLOAD; + case FeatureType.SEARCH: + return EventConstants.VIDEO_TUTORIAL_DISMISSED_SEARCH; + default: + assert false; + return null; + } + } + + /** @return The text used to show the video length on the IPH card. */ + public static String getVideoLengthString(int videoLength) { + int minutes = videoLength / 60; + int seconds = videoLength % 60; + + StringBuilder builder = new StringBuilder(); + builder.append(minutes); + builder.append(":"); + builder.append(seconds); + return builder.toString(); + } +}
diff --git a/chrome/browser/video_tutorials/internal/BUILD.gn b/chrome/browser/video_tutorials/internal/BUILD.gn index af7f0fe..85a7fdd 100644 --- a/chrome/browser/video_tutorials/internal/BUILD.gn +++ b/chrome/browser/video_tutorials/internal/BUILD.gn
@@ -9,6 +9,8 @@ source_set("internal") { sources = [ + "config.cc", + "config.h", "proto_conversions.cc", "proto_conversions.h", "store.h", @@ -49,9 +51,9 @@ ] sources = [ + "android/java/src/org/chromium/chrome/browser/video_tutorials/VideoTutorialServiceFactory.java", "android/java/src/org/chromium/chrome/browser/video_tutorials/bridges/TutorialConversionBridge.java", "android/java/src/org/chromium/chrome/browser/video_tutorials/bridges/VideoTutorialServiceBridge.java", - "android/java/src/org/chromium/chrome/browser/video_tutorials/bridges/VideoTutorialServiceFactory.java", ] deps = [ @@ -69,9 +71,9 @@ visibility = [ ":*" ] sources = [ + "android/java/src/org/chromium/chrome/browser/video_tutorials/VideoTutorialServiceFactory.java", "android/java/src/org/chromium/chrome/browser/video_tutorials/bridges/TutorialConversionBridge.java", "android/java/src/org/chromium/chrome/browser/video_tutorials/bridges/VideoTutorialServiceBridge.java", - "android/java/src/org/chromium/chrome/browser/video_tutorials/bridges/VideoTutorialServiceFactory.java", ] } } @@ -80,6 +82,7 @@ testonly = true sources = [ + "config_unittest.cc", "proto_conversions_unittest.cc", "tutorial_group_unittest.cc", "tutorial_store_unittest.cc", @@ -89,6 +92,7 @@ ":internal", "//base", "//base/test:test_support", + "//chrome/browser/video_tutorials:public", "//chrome/browser/video_tutorials/proto", "//chrome/browser/video_tutorials/test:test_lib", "//components/leveldb_proto",
diff --git a/chrome/browser/video_tutorials/internal/android/java/src/org/chromium/chrome/browser/video_tutorials/bridges/VideoTutorialServiceFactory.java b/chrome/browser/video_tutorials/internal/android/java/src/org/chromium/chrome/browser/video_tutorials/VideoTutorialServiceFactory.java similarity index 89% rename from chrome/browser/video_tutorials/internal/android/java/src/org/chromium/chrome/browser/video_tutorials/bridges/VideoTutorialServiceFactory.java rename to chrome/browser/video_tutorials/internal/android/java/src/org/chromium/chrome/browser/video_tutorials/VideoTutorialServiceFactory.java index 3f559e7..70bffbf 100644 --- a/chrome/browser/video_tutorials/internal/android/java/src/org/chromium/chrome/browser/video_tutorials/bridges/VideoTutorialServiceFactory.java +++ b/chrome/browser/video_tutorials/internal/android/java/src/org/chromium/chrome/browser/video_tutorials/VideoTutorialServiceFactory.java
@@ -2,11 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.chromium.chrome.browser.video_tutorials.bridges; +package org.chromium.chrome.browser.video_tutorials; import org.chromium.base.annotations.NativeMethods; import org.chromium.chrome.browser.profiles.Profile; -import org.chromium.chrome.browser.video_tutorials.VideoTutorialService; /** * Basic factory that creates and returns an {@link VideoTutorialService} that is attached
diff --git a/chrome/browser/video_tutorials/internal/android/java/src/org/chromium/chrome/browser/video_tutorials/bridges/VideoTutorialServiceBridge.java b/chrome/browser/video_tutorials/internal/android/java/src/org/chromium/chrome/browser/video_tutorials/bridges/VideoTutorialServiceBridge.java index df85749..b62dbabcdb 100644 --- a/chrome/browser/video_tutorials/internal/android/java/src/org/chromium/chrome/browser/video_tutorials/bridges/VideoTutorialServiceBridge.java +++ b/chrome/browser/video_tutorials/internal/android/java/src/org/chromium/chrome/browser/video_tutorials/bridges/VideoTutorialServiceBridge.java
@@ -7,9 +7,11 @@ import org.chromium.base.Callback; import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; +import org.chromium.chrome.browser.video_tutorials.FeatureType; import org.chromium.chrome.browser.video_tutorials.Tutorial; import org.chromium.chrome.browser.video_tutorials.VideoTutorialService; +import java.util.ArrayList; import java.util.List; /** @@ -30,7 +32,22 @@ @Override public void getTutorials(Callback<List<Tutorial>> callback) { - callback.onResult(null); + callback.onResult(getSampleData()); + } + + private List<Tutorial> getSampleData() { + List<Tutorial> list = new ArrayList<>(); + list.add(new Tutorial(FeatureType.DOWNLOAD, + "How to use Google Chrome's download functionality", + "https://storage.googleapis.com/stock-wizard.appspot.com/portrait.jpg", + "https://storage.googleapis.com/stock-wizard.appspot.com/portrait.jpg", + "caption url", "share url", 35)); + + list.add(new Tutorial(FeatureType.SEARCH, "How to efficiently search with Google Chrome", + "https://storage.googleapis.com/stock-wizard.appspot.com/elephant.jpg ", + "https://storage.googleapis.com/stock-wizard.appspot.com/elephant.jpg", + "caption url", "share url", 35)); + return list; } @CalledByNative
diff --git a/chrome/browser/video_tutorials/internal/config.cc b/chrome/browser/video_tutorials/internal/config.cc new file mode 100644 index 0000000..27fc975 --- /dev/null +++ b/chrome/browser/video_tutorials/internal/config.cc
@@ -0,0 +1,53 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/video_tutorials/internal/config.h" + +#include "base/command_line.h" +#include "base/metrics/field_trial_params.h" +#include "chrome/browser/video_tutorials/switches.h" + +namespace video_tutorials { + +// Default base URL string for the server. +constexpr char kDefaultBaseURL[] = "https://chromeupboarding-pa.googleapis.com"; + +// Default URL string for GetTutorials RPC. +constexpr char kDefaultGetTutorialsPath[] = "/v1/videotutorials"; + +// Hindi is the default language. +constexpr char kDefaultPreferredLanguage[] = "hi"; + +// Finch parameter key for base server URL to retrieve the tutorials. +constexpr char kBaseURLKey[] = "base_url"; + +constexpr char kPrefferedLanguageKey[] = "default_lang"; + +namespace { +const GURL BuildGetTutorialsEndpoint(const GURL& base_url, const char* path) { + GURL::Replacements replacements; + replacements.SetPathStr(path); + return base_url.ReplaceComponents(replacements); +} + +} // namespace + +// static +GURL Config::GetTutorialsServerURL() { + std::string base_url_from_finch = base::GetFieldTrialParamValueByFeature( + features::kVideoTutorials, kBaseURLKey); + GURL server_url = base_url_from_finch.empty() ? GURL(kDefaultBaseURL) + : GURL(base_url_from_finch); + return BuildGetTutorialsEndpoint(server_url, kDefaultGetTutorialsPath); +} + +// static +std::string Config::GetDefaultPreferredLanguage() { + std::string default_lang_from_finch = base::GetFieldTrialParamValueByFeature( + features::kVideoTutorials, kPrefferedLanguageKey); + return default_lang_from_finch.empty() ? kDefaultPreferredLanguage + : default_lang_from_finch; +} + +} // namespace video_tutorials
diff --git a/chrome/browser/video_tutorials/internal/config.h b/chrome/browser/video_tutorials/internal/config.h new file mode 100644 index 0000000..eb85fc02 --- /dev/null +++ b/chrome/browser/video_tutorials/internal/config.h
@@ -0,0 +1,41 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_VIDEO_TUTORIALS_INTERNAL_CONFIG_H_ +#define CHROME_BROWSER_VIDEO_TUTORIALS_INTERNAL_CONFIG_H_ + +#include <memory> +#include <string> + +#include "url/gurl.h" + +namespace video_tutorials { + +// Default URL string for GetVideoTutorials RPC. +extern const char kDefaultGetTutorialsPath[]; + +// Default base URL string. +extern const char kDefaultBaseURL[]; + +// Finch parameter key for base server URL to retrieve the tutorials. +extern const char kBaseURLKey[]; + +// Finch parameter key for the default preferred language. +extern const char kPrefferedLanguageKey[]; + +// Default preferred language setting before users pick. +extern const char kDefaultPreferredLanguage[]; + +class Config { + public: + // Get video tutorials metadata server URL. + static GURL GetTutorialsServerURL(); + + // Get the default language before users choice. + static std::string GetDefaultPreferredLanguage(); +}; + +} // namespace video_tutorials + +#endif // CHROME_BROWSER_VIDEO_TUTORIALS_INTERNAL_CONFIG_H_
diff --git a/chrome/browser/video_tutorials/internal/config_unittest.cc b/chrome/browser/video_tutorials/internal/config_unittest.cc new file mode 100644 index 0000000..9b122e3 --- /dev/null +++ b/chrome/browser/video_tutorials/internal/config_unittest.cc
@@ -0,0 +1,36 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/video_tutorials/internal/config.h" + +#include <map> +#include <string> + +#include "base/test/scoped_feature_list.h" +#include "chrome/browser/video_tutorials/switches.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace video_tutorials { + +TEST(VideoTutorialsConfigTest, FinchConfigEnabled) { + base::test::ScopedFeatureList feature_list; + std::map<std::string, std::string> params = { + {kBaseURLKey, "https://test.com"}, {kPrefferedLanguageKey, "en"}}; + feature_list.InitAndEnableFeatureWithParameters(features::kVideoTutorials, + params); + + EXPECT_EQ(Config::GetTutorialsServerURL().spec(), + "https://test.com/v1/videotutorials"); + EXPECT_EQ(Config::GetDefaultPreferredLanguage(), "en"); +} + +TEST(VideoTutorialsConfigTest, ConfigDefaultParams) { + base::test::ScopedFeatureList feature_list; + feature_list.InitAndEnableFeature(features::kVideoTutorials); + EXPECT_EQ(Config::GetTutorialsServerURL().spec(), + "https://chromeupboarding-pa.googleapis.com/v1/videotutorials"); + EXPECT_EQ(Config::GetDefaultPreferredLanguage(), "hi"); +} + +} // namespace video_tutorials
diff --git a/chrome/browser/web_applications/BUILD.gn b/chrome/browser/web_applications/BUILD.gn index 9e1da36b..4c8e852c 100644 --- a/chrome/browser/web_applications/BUILD.gn +++ b/chrome/browser/web_applications/BUILD.gn
@@ -118,10 +118,7 @@ ] if (!is_official_build) { - deps += [ - "//chromeos/components/file_manager:file_manager_ui", - "//chromeos/components/sample_system_web_app_ui", - ] + deps += [ "//chromeos/components/sample_system_web_app_ui" ] } } @@ -264,6 +261,7 @@ "web_app_audio_focus_browsertest.cc", "web_app_icon_manager_browsertest.cc", "web_app_migration_manager_browsertest.cc", + "web_app_migration_user_display_mode_clean_up_browsertest.cc", ] defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ] @@ -301,6 +299,8 @@ sources = [ "web_app_migration_manager.cc", "web_app_migration_manager.h", + "web_app_migration_user_display_mode_clean_up.cc", + "web_app_migration_user_display_mode_clean_up.h", "web_app_provider.cc", "web_app_provider.h", "web_app_provider_factory.cc",
diff --git a/chrome/browser/web_applications/components/install_finalizer.cc b/chrome/browser/web_applications/components/install_finalizer.cc index e86691f..5beef83 100644 --- a/chrome/browser/web_applications/components/install_finalizer.cc +++ b/chrome/browser/web_applications/components/install_finalizer.cc
@@ -69,6 +69,10 @@ shortcut_created); } +InstallFinalizer* InstallFinalizer::legacy_finalizer_for_testing() { + return nullptr; +} + AppRegistrar& InstallFinalizer::registrar() const { DCHECK(!is_legacy_finalizer()); return *registrar_;
diff --git a/chrome/browser/web_applications/components/install_finalizer.h b/chrome/browser/web_applications/components/install_finalizer.h index 40074c7..4c24bc52 100644 --- a/chrome/browser/web_applications/components/install_finalizer.h +++ b/chrome/browser/web_applications/components/install_finalizer.h
@@ -95,6 +95,7 @@ content::WebContents* web_contents); virtual void RemoveLegacyInstallFinalizerForTesting() {} + virtual InstallFinalizer* legacy_finalizer_for_testing(); virtual void Start() {} virtual void Shutdown() {}
diff --git a/chrome/browser/web_applications/system_web_app_manager.cc b/chrome/browser/web_applications/system_web_app_manager.cc index 6aa9111..d368a83 100644 --- a/chrome/browser/web_applications/system_web_app_manager.cc +++ b/chrome/browser/web_applications/system_web_app_manager.cc
@@ -59,7 +59,6 @@ #include "extensions/common/constants.h" #if !defined(OFFICIAL_BUILD) -#include "chrome/browser/chromeos/web_applications/file_manager_web_app_info.h" #include "chrome/browser/chromeos/web_applications/sample_system_web_app_info.h" #include "chrome/browser/chromeos/web_applications/telemetry_extension_web_app_info.h" #endif // !defined(OFFICIAL_BUILD) @@ -196,12 +195,6 @@ } infos.emplace( - SystemAppType::FILE_MANAGER, - SystemAppInfo("File Manager", GURL("chrome://file-manager"), - base::BindRepeating(&CreateWebAppInfoForFileManager))); - infos.at(SystemAppType::FILE_MANAGER).capture_navigations = true; - - infos.emplace( SystemAppType::SAMPLE, SystemAppInfo( "Sample", GURL("chrome://sample-system-web-app/pwa.html"), @@ -333,8 +326,6 @@ case SystemAppType::TELEMETRY: return base::FeatureList::IsEnabled( chromeos::features::kTelemetryExtension); - case SystemAppType::FILE_MANAGER: - return base::FeatureList::IsEnabled(chromeos::features::kFilesSWA); case SystemAppType::SAMPLE: NOTREACHED(); return false;
diff --git a/chrome/browser/web_applications/system_web_app_manager.h b/chrome/browser/web_applications/system_web_app_manager.h index add81c9..ddf6d55 100644 --- a/chrome/browser/web_applications/system_web_app_manager.h +++ b/chrome/browser/web_applications/system_web_app_manager.h
@@ -57,7 +57,6 @@ SCANNING, DIAGNOSTICS, #if !defined(OFFICIAL_BUILD) - FILE_MANAGER, TELEMETRY, SAMPLE, #endif // !defined(OFFICIAL_BUILD)
diff --git a/chrome/browser/web_applications/web_app_install_finalizer.cc b/chrome/browser/web_applications/web_app_install_finalizer.cc index d3c7cdc..161cdfde 100644 --- a/chrome/browser/web_applications/web_app_install_finalizer.cc +++ b/chrome/browser/web_applications/web_app_install_finalizer.cc
@@ -312,6 +312,10 @@ legacy_finalizer_ = nullptr; } +InstallFinalizer* WebAppInstallFinalizer::legacy_finalizer_for_testing() { + return legacy_finalizer_.get(); +} + void WebAppInstallFinalizer::Start() { DCHECK(!started_); started_ = true;
diff --git a/chrome/browser/web_applications/web_app_install_finalizer.h b/chrome/browser/web_applications/web_app_install_finalizer.h index 145b71d..128e3a0 100644 --- a/chrome/browser/web_applications/web_app_install_finalizer.h +++ b/chrome/browser/web_applications/web_app_install_finalizer.h
@@ -51,6 +51,7 @@ UninstallWebAppCallback callback) override; bool WasExternalAppUninstalledByUser(const AppId& app_id) const override; void RemoveLegacyInstallFinalizerForTesting() override; + InstallFinalizer* legacy_finalizer_for_testing() override; void Start() override; void Shutdown() override;
diff --git a/chrome/browser/web_applications/web_app_migration_user_display_mode_clean_up.cc b/chrome/browser/web_applications/web_app_migration_user_display_mode_clean_up.cc new file mode 100644 index 0000000..6ee10808 --- /dev/null +++ b/chrome/browser/web_applications/web_app_migration_user_display_mode_clean_up.cc
@@ -0,0 +1,175 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/web_applications/web_app_migration_user_display_mode_clean_up.h" + +#include "base/feature_list.h" +#include "base/metrics/histogram_functions.h" +#include "base/no_destructor.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/sync/profile_sync_service_factory.h" +#include "chrome/browser/web_applications/web_app_registry_update.h" +#include "chrome/browser/web_applications/web_app_sync_bridge.h" +#include "chrome/common/chrome_features.h" +#include "chrome/common/pref_names.h" +#include "components/pref_registry/pref_registry_syncable.h" +#include "components/prefs/pref_service.h" + +namespace { + +bool g_disabled_for_testing = false; +bool g_skip_wait_for_sync_for_testing = false; + +base::OnceClosure& GetCompletedCallbackForTesting() { + static base::NoDestructor<base::OnceClosure> callback; + return *callback; +} + +} // namespace + +namespace web_app { + +void WebAppMigrationUserDisplayModeCleanUp::RegisterProfilePrefs( + user_prefs::PrefRegistrySyncable* registry) { + registry->RegisterBooleanPref(prefs::kWebAppsUserDisplayModeCleanedUp, false); +} + +std::unique_ptr<WebAppMigrationUserDisplayModeCleanUp> +WebAppMigrationUserDisplayModeCleanUp::CreateIfNeeded( + Profile* profile, + WebAppSyncBridge* sync_bridge) { + DCHECK(base::FeatureList::IsEnabled(features::kDesktopPWAsWithoutExtensions)); + + if (g_disabled_for_testing) + return nullptr; + + if (profile->GetPrefs()->GetBoolean(prefs::kWebAppsUserDisplayModeCleanedUp)) + return nullptr; + + if (!base::FeatureList::IsEnabled( + features::kDesktopPWAsMigrationUserDisplayModeCleanUp)) { + // Clear the pref if clean up is disabled to allow it to run again if it + // gets enabled again. + profile->GetPrefs()->SetBoolean(prefs::kWebAppsUserDisplayModeCleanedUp, + false); + return nullptr; + } + + return std::make_unique<WebAppMigrationUserDisplayModeCleanUp>(profile, + sync_bridge); +} + +void WebAppMigrationUserDisplayModeCleanUp::DisableForTesting() { + g_disabled_for_testing = true; +} + +void WebAppMigrationUserDisplayModeCleanUp::SkipWaitForSyncForTesting() { + g_skip_wait_for_sync_for_testing = true; +} + +void WebAppMigrationUserDisplayModeCleanUp::SetCompletedCallbackForTesting( + base::OnceClosure callback) { + GetCompletedCallbackForTesting() = std::move(callback); +} + +WebAppMigrationUserDisplayModeCleanUp::WebAppMigrationUserDisplayModeCleanUp( + Profile* profile, + WebAppSyncBridge* sync_bridge) + : profile_(profile), + sync_bridge_(sync_bridge), + bookmark_app_registrar_(profile), + bookmark_app_registry_controller_(profile, &bookmark_app_registrar_) {} + +WebAppMigrationUserDisplayModeCleanUp:: + ~WebAppMigrationUserDisplayModeCleanUp() = default; + +void WebAppMigrationUserDisplayModeCleanUp::Start() { + // We cannot grab the SyncService in the constructor without creating a + // circular KeyedService dependency. + sync_service_ = ProfileSyncServiceFactory::GetForProfile(profile_); + if (sync_service_) + sync_observer_.Add(sync_service_); + bookmark_app_registry_controller_.Init(base::BindOnce( + &WebAppMigrationUserDisplayModeCleanUp::OnBookmarkAppRegistryReady, + weak_ptr_factory_.GetWeakPtr())); +} + +void WebAppMigrationUserDisplayModeCleanUp::Shutdown() { + weak_ptr_factory_.InvalidateWeakPtrs(); + sync_observer_.RemoveAll(); +} + +void WebAppMigrationUserDisplayModeCleanUp::OnSyncCycleCompleted( + syncer::SyncService* sync_service) { + DCHECK_EQ(sync_service_, sync_service); + if (sync_ready_callback_) + std::move(sync_ready_callback_).Run(); +} + +void WebAppMigrationUserDisplayModeCleanUp::OnSyncShutdown( + syncer::SyncService* sync_service) { + DCHECK_EQ(sync_service_, sync_service); + sync_observer_.RemoveAll(); + sync_service_ = nullptr; +} + +void WebAppMigrationUserDisplayModeCleanUp::OnBookmarkAppRegistryReady() { + // We must wait for sync to complete at least one cycle. + // This avoids our local updates accidentally re-installing any web apps that + // were uninstalled on other devices. Updating any synced web app field sends + // the entire web app to the sync server. If that web app had been removed + // since we last synced then it would look like a new installation and get + // reinstalled on all the user's synced devices. + WaitForFirstSyncCycle(base::BindOnce( + &WebAppMigrationUserDisplayModeCleanUp::OnFirstSyncCycleComplete, + weak_ptr_factory_.GetWeakPtr())); +} + +void WebAppMigrationUserDisplayModeCleanUp::WaitForFirstSyncCycle( + base::OnceClosure callback) { + DCHECK(!sync_ready_callback_); + if (g_skip_wait_for_sync_for_testing || !sync_service_ || + sync_service_->HasCompletedSyncCycle()) { + std::move(callback).Run(); + return; + } + sync_ready_callback_ = std::move(callback); +} + +void WebAppMigrationUserDisplayModeCleanUp::OnFirstSyncCycleComplete() { + std::vector<AppId> clean_up_ids = bookmark_app_registrar_.GetAppIds(); + + // Filter down to apps that have a windowed bookmark app and a browser tab BMO + // app. + base::EraseIf(clean_up_ids, [this](const AppId& app_id) { + const WebApp* web_app = sync_bridge_->registrar().GetAppById(app_id); + if (!web_app) + return true; + + if (bookmark_app_registrar_.GetAppUserDisplayModeForMigration(app_id) == + DisplayMode::kBrowser) { + return true; + } + + return web_app->user_display_mode() != DisplayMode::kBrowser; + }); + + { + ScopedRegistryUpdate update(sync_bridge_); + for (const AppId& app_id : clean_up_ids) { + update->UpdateApp(app_id)->SetUserDisplayMode( + bookmark_app_registrar_.GetAppUserDisplayModeForMigration(app_id)); + } + } + + profile_->GetPrefs()->SetBoolean(prefs::kWebAppsUserDisplayModeCleanedUp, + true); + base::UmaHistogramBoolean("WebApp.Migration.UserDisplayModeCleanUp", + /*BooleanMigrated=*/!clean_up_ids.empty()); + + if (GetCompletedCallbackForTesting()) + std::move(GetCompletedCallbackForTesting()).Run(); +} + +} // namespace web_app
diff --git a/chrome/browser/web_applications/web_app_migration_user_display_mode_clean_up.h b/chrome/browser/web_applications/web_app_migration_user_display_mode_clean_up.h new file mode 100644 index 0000000..569b6fa --- /dev/null +++ b/chrome/browser/web_applications/web_app_migration_user_display_mode_clean_up.h
@@ -0,0 +1,103 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_MIGRATION_USER_DISPLAY_MODE_CLEAN_UP_H_ +#define CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_MIGRATION_USER_DISPLAY_MODE_CLEAN_UP_H_ + +#include <memory> + +#include "base/callback_forward.h" +#include "base/memory/weak_ptr.h" +#include "base/scoped_observer.h" +#include "chrome/browser/web_applications/extensions/bookmark_app_registrar.h" +#include "chrome/browser/web_applications/extensions/bookmark_app_registry_controller.h" +#include "components/sync/driver/sync_service.h" +#include "components/sync/driver/sync_service_observer.h" + +class Profile; + +namespace user_prefs { +class PrefRegistrySyncable; +} + +namespace web_app { + +class WebAppSyncBridge; + +// # Background +// This is a clean up job for https://crbug.com/1125020. +// When BMO shipped to stable the WebAppMigrationManager migration used the +// wrong user_display_mode for kStandalone bookmark apps that were not locally +// installed. It read kBrowser instead of kStandalone because we always open +// non-locally installed apps in browser tabs. The migrated kBrowser web app +// was then used to populate the sync server which replicated across to all +// other devices. Even if they had kStandalone locally installed bookmark apps +// that migrated correctly our sync logic always chooses the sync server's data +// over the local data. If the first device to migrate and populate the sync +// server hit this bug then all devices would replicate the kBrowser state. +// In effect users would experience their kStandalone window PWAs opening in +// browser tabs instead. +// +// # Clean up pseudocode +// On start up: +// - Check that we haven't already run this clean up successfully. +// - Wait for bookmark apps, web apps and sync to be ready. +// - Check for any kStandalone bookmarks with corresponding kBrowser web apps. +// - Set those web apps to be kStandalone. +// +// # Known issue +// The migration bug is indistinguishable from a user manually setting the +// user_display_mode for their web apps to kBrowser after migration. This clean +// up CL will erroneously undo such a change. To mitigate this we only run the +// clean up once per migrated device. +class WebAppMigrationUserDisplayModeCleanUp + : public syncer::SyncServiceObserver { + public: + static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); + static std::unique_ptr<WebAppMigrationUserDisplayModeCleanUp> CreateIfNeeded( + Profile* profile, + WebAppSyncBridge* sync_bridge); + + static void DisableForTesting(); + static void SkipWaitForSyncForTesting(); + static void SetCompletedCallbackForTesting(base::OnceClosure callback); + + WebAppMigrationUserDisplayModeCleanUp(Profile* profile, + WebAppSyncBridge* sync_bridge); + WebAppMigrationUserDisplayModeCleanUp( + const WebAppMigrationUserDisplayModeCleanUp&) = delete; + WebAppMigrationUserDisplayModeCleanUp& operator=( + const WebAppMigrationUserDisplayModeCleanUp&) = delete; + ~WebAppMigrationUserDisplayModeCleanUp() final; + + void Start(); + void Shutdown(); + + // syncer::SyncServiceObserver: + void OnSyncCycleCompleted(syncer::SyncService* sync_service) final; + void OnSyncShutdown(syncer::SyncService* sync_service) final; + + private: + void OnBookmarkAppRegistryReady(); + void WaitForFirstSyncCycle(base::OnceClosure callback); + void OnFirstSyncCycleComplete(); + + Profile* profile_ = nullptr; + WebAppSyncBridge* sync_bridge_ = nullptr; + syncer::SyncService* sync_service_ = nullptr; + base::OnceClosure sync_ready_callback_; + + extensions::BookmarkAppRegistrar bookmark_app_registrar_; + extensions::BookmarkAppRegistryController bookmark_app_registry_controller_; + + ScopedObserver<syncer::SyncService, syncer::SyncServiceObserver> + sync_observer_{this}; + + base::WeakPtrFactory<WebAppMigrationUserDisplayModeCleanUp> weak_ptr_factory_{ + this}; +}; + +} // namespace web_app + +#endif // CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_MIGRATION_USER_DISPLAY_MODE_CLEAN_UP_H_
diff --git a/chrome/browser/web_applications/web_app_migration_user_display_mode_clean_up_browsertest.cc b/chrome/browser/web_applications/web_app_migration_user_display_mode_clean_up_browsertest.cc new file mode 100644 index 0000000..5479a26 --- /dev/null +++ b/chrome/browser/web_applications/web_app_migration_user_display_mode_clean_up_browsertest.cc
@@ -0,0 +1,174 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/web_applications/web_app_migration_user_display_mode_clean_up.h" + +#include "base/run_loop.h" +#include "base/strings/string_piece.h" +#include "base/test/bind_test_util.h" +#include "base/test/metrics/histogram_tester.h" +#include "chrome/browser/extensions/launch_util.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/web_applications/components/install_finalizer.h" +#include "chrome/browser/web_applications/web_app_provider.h" +#include "chrome/common/chrome_features.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "content/public/browser/browser_context.h" +#include "content/public/test/browser_test.h" +#include "extensions/browser/extension_prefs.h" +#include "extensions/browser/extension_registry.h" + +namespace { + +const char kAppId[] = "dofnemchnjfeendjmdhaldenaiabpiad"; +const char kAppName[] = "Test App"; +const char kStartUrl[] = "https://test.com"; + +size_t GetTestPreCount() { + constexpr base::StringPiece kPreTestPrefix = "PRE_"; + base::StringPiece test_name = + testing::UnitTest::GetInstance()->current_test_info()->name(); + size_t count = 0; + while (test_name.find(kPreTestPrefix, kPreTestPrefix.size() * count) == + kPreTestPrefix.size() * count) { + ++count; + } + return count; +} + +} // namespace + +namespace web_app { + +class WebAppMigrationUserDisplayModeCleanUpBrowserTest + : public InProcessBrowserTest { + public: + WebAppMigrationUserDisplayModeCleanUpBrowserTest() { + scoped_feature_list_.InitWithFeatures( + { + features::kDesktopPWAsWithoutExtensions, + features::kDesktopPWAsMigrationUserDisplayModeCleanUp, + }, + {}); + switch (GetTestPreCount()) { + case 2: + WebAppMigrationUserDisplayModeCleanUp::DisableForTesting(); + break; + case 1: + WebAppMigrationUserDisplayModeCleanUp::SkipWaitForSyncForTesting(); + WebAppMigrationUserDisplayModeCleanUp::SetCompletedCallbackForTesting( + base::BindLambdaForTesting([this]() { + clean_up_completed_ = true; + if (completed_callback_) + std::move(completed_callback_).Run(); + })); + break; + } + } + + ~WebAppMigrationUserDisplayModeCleanUpBrowserTest() override = default; + + Profile* profile() { return browser()->profile(); } + WebAppProvider& provider() { return *WebAppProvider::Get(profile()); } + + protected: + bool clean_up_completed_ = false; + base::OnceClosure completed_callback_; + base::HistogramTester histograms_; + + private: + base::test::ScopedFeatureList scoped_feature_list_; +}; + +IN_PROC_BROWSER_TEST_F(WebAppMigrationUserDisplayModeCleanUpBrowserTest, + PRE_PRE_CleanUp) { + // Clean up must be disabled for this stage. + ASSERT_FALSE(WebAppMigrationUserDisplayModeCleanUp::CreateIfNeeded(profile(), + nullptr)); + + InstallFinalizer& web_app_finalizer = provider().install_finalizer(); + InstallFinalizer* bookmark_app_finalizer = + web_app_finalizer.legacy_finalizer_for_testing(); + ASSERT_TRUE(bookmark_app_finalizer); + + InstallFinalizer::FinalizeOptions options; + options.install_source = WebappInstallSource::OMNIBOX_INSTALL_ICON; + + // Install bookmark app set to open as window. + { + base::RunLoop run_loop; + WebApplicationInfo info; + info.app_url = GURL(kStartUrl); + info.title = base::UTF8ToUTF16(kAppName); + info.open_as_window = true; + bookmark_app_finalizer->FinalizeInstall( + info, options, + base::BindLambdaForTesting( + [&](const AppId& app_id, InstallResultCode code) { + EXPECT_EQ(app_id, kAppId); + EXPECT_EQ(code, InstallResultCode::kSuccessNewInstall); + run_loop.Quit(); + })); + run_loop.Run(); + + const extensions::Extension* extension = + extensions::ExtensionRegistry::Get(profile()) + ->enabled_extensions() + .GetByID(kAppId); + ASSERT_TRUE(extension); + EXPECT_EQ(extensions::GetLaunchContainer( + extensions::ExtensionPrefs::Get(profile()), extension), + extensions::LaunchContainer::kLaunchContainerWindow); + } + + // Install WebApp set to open as browser tab. + { + bookmark_app_finalizer = nullptr; + web_app_finalizer.RemoveLegacyInstallFinalizerForTesting(); + + base::RunLoop run_loop; + WebApplicationInfo info; + info.app_url = GURL(kStartUrl); + info.title = base::UTF8ToUTF16(kAppName); + info.open_as_window = false; + web_app_finalizer.FinalizeInstall( + info, options, + base::BindLambdaForTesting( + [&](const AppId& app_id, InstallResultCode code) { + EXPECT_EQ(app_id, kAppId); + EXPECT_EQ(code, InstallResultCode::kSuccessNewInstall); + run_loop.Quit(); + })); + run_loop.Run(); + + EXPECT_EQ(provider().registrar().GetAppUserDisplayMode(kAppId), + DisplayMode::kBrowser); + } +} + +IN_PROC_BROWSER_TEST_F(WebAppMigrationUserDisplayModeCleanUpBrowserTest, + PRE_CleanUp) { + // Wait for clean up to complete (this will timeout if we don't run clean up). + if (!clean_up_completed_) { + base::RunLoop run_loop; + completed_callback_ = run_loop.QuitClosure(); + run_loop.Run(); + } + + // Web app should now open in a window. + EXPECT_EQ(provider().registrar().GetAppUserDisplayMode(kAppId), + DisplayMode::kStandalone); + histograms_.ExpectBucketCount("WebApp.Migration.UserDisplayModeCleanUp", + /*BooleanMigrated=*/true, 1); +} + +IN_PROC_BROWSER_TEST_F(WebAppMigrationUserDisplayModeCleanUpBrowserTest, + CleanUp) { + // Check that clean up is not needed anymore. + EXPECT_FALSE(WebAppMigrationUserDisplayModeCleanUp::CreateIfNeeded(profile(), + nullptr)); +} + +} // namespace web_app
diff --git a/chrome/browser/web_applications/web_app_provider.cc b/chrome/browser/web_applications/web_app_provider.cc index d5295448..20394a3e 100644 --- a/chrome/browser/web_applications/web_app_provider.cc +++ b/chrome/browser/web_applications/web_app_provider.cc
@@ -35,6 +35,7 @@ #include "chrome/browser/web_applications/web_app_install_finalizer.h" #include "chrome/browser/web_applications/web_app_install_manager.h" #include "chrome/browser/web_applications/web_app_migration_manager.h" +#include "chrome/browser/web_applications/web_app_migration_user_display_mode_clean_up.h" #include "chrome/browser/web_applications/web_app_provider_factory.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/browser/web_applications/web_app_shortcut_manager.h" @@ -153,6 +154,8 @@ icon_manager_->Shutdown(); install_finalizer_->Shutdown(); registrar_->Shutdown(); + if (migration_user_display_mode_clean_up_) + migration_user_display_mode_clean_up_->Shutdown(); } void WebAppProvider::StartImpl() { @@ -218,6 +221,9 @@ migration_manager_ = std::make_unique<WebAppMigrationManager>( profile, database_factory_.get(), icon_manager.get()); + migration_user_display_mode_clean_up_ = + WebAppMigrationUserDisplayModeCleanUp::CreateIfNeeded(profile, + sync_bridge.get()); // Upcast to unified subsystem types: registrar_ = std::move(registrar); @@ -293,6 +299,8 @@ manifest_update_manager_->Start(); os_integration_manager_->Start(); ui_manager_->Start(); + if (migration_user_display_mode_clean_up_) + migration_user_display_mode_clean_up_->Start(); on_registry_ready_.Signal(); } @@ -311,6 +319,7 @@ WebAppPrefsUtilsRegisterProfilePrefs(registry); RegisterInstallBounceMetricProfilePrefs(registry); RegisterDailyWebAppMetricsProfilePrefs(registry); + WebAppMigrationUserDisplayModeCleanUp::RegisterProfilePrefs(registry); } } // namespace web_app
diff --git a/chrome/browser/web_applications/web_app_provider.h b/chrome/browser/web_applications/web_app_provider.h index 077cc50..f8e25888 100644 --- a/chrome/browser/web_applications/web_app_provider.h +++ b/chrome/browser/web_applications/web_app_provider.h
@@ -44,6 +44,7 @@ // Forward declarations for new extension-independent subsystems. class WebAppDatabaseFactory; class WebAppMigrationManager; +class WebAppMigrationUserDisplayModeCleanUp; // Connects Web App features, such as the installation of default and // policy-managed web apps, with Profiles (as WebAppProvider is a @@ -118,6 +119,9 @@ std::unique_ptr<WebAppDatabaseFactory> database_factory_; // migration_manager_ can be nullptr if no migration needed. std::unique_ptr<WebAppMigrationManager> migration_manager_; + // user_display_mode_migration_issue_ can be nullptr if no clean up needed. + std::unique_ptr<WebAppMigrationUserDisplayModeCleanUp> + migration_user_display_mode_clean_up_; // Generalized subsystems: std::unique_ptr<AppRegistrar> registrar_;
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index 14b466a..aa873a5 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-master-1600127994-a617f89793652b5fd810a69f7c568f33dff933e7.profdata +chrome-linux-master-1600171148-66b09300985d04c4504d7b1ddf5998f31579a7e2.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index 57d4d50d..d1d2fd5 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-master-1600062449-2fe327552dcb0c48f221a41ff1f1e25d4acb9926.profdata +chrome-win32-master-1600127994-c9f9f16ba321eab4723234f8c655960b2fa4cc9b.profdata
diff --git a/chrome/chrome_paks.gni b/chrome/chrome_paks.gni index d94b5a1..0cd6ab7 100644 --- a/chrome/chrome_paks.gni +++ b/chrome/chrome_paks.gni
@@ -208,12 +208,10 @@ if (!is_official_build) { sources += [ - "$root_gen_dir/chromeos/chromeos_file_manager_resources.pak", "$root_gen_dir/chromeos/chromeos_sample_system_web_app_resources.pak", "$root_gen_dir/chromeos/chromeos_telemetry_extension_resources.pak", ] deps += [ - "//chromeos/resources:file_manager_resources", "//chromeos/resources:sample_system_web_app_resources", "//chromeos/resources:telemetry_extension_resources", ]
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc index 24cb663..2d39811 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc
@@ -225,6 +225,12 @@ const base::Feature kDesktopPWAsLocalUpdating{"DesktopPWAsLocalUpdating", base::FEATURE_ENABLED_BY_DEFAULT}; +// Enables or disables the WebAppMigrationUserDisplayModeCleanUp code for +// cleaning up the fallout of https://crbug.com/1125020. +const base::Feature kDesktopPWAsMigrationUserDisplayModeCleanUp{ + "DesktopPWAsMigrationUserDisplayModeCleanUp", + base::FEATURE_DISABLED_BY_DEFAULT}; + // Enables or disables Desktop PWAs to be auto-started on OS login. const base::Feature kDesktopPWAsRunOnOsLogin{"DesktopPWAsRunOnOsLogin", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h index 3610197..02b0d2a1d 100644 --- a/chrome/common/chrome_features.h +++ b/chrome/common/chrome_features.h
@@ -162,6 +162,9 @@ extern const base::Feature kDesktopPWAsLocalUpdating; COMPONENT_EXPORT(CHROME_FEATURES) +extern const base::Feature kDesktopPWAsMigrationUserDisplayModeCleanUp; + +COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kDesktopPWAsRunOnOsLogin; COMPONENT_EXPORT(CHROME_FEATURES)
diff --git a/chrome/common/extensions/api/search.idl b/chrome/common/extensions/api/search.idl index 15eb5d7..6f462aa 100644 --- a/chrome/common/extensions/api/search.idl +++ b/chrome/common/extensions/api/search.idl
@@ -17,7 +17,7 @@ dictionary QueryInfo { // String to query with the default search provider. - DOMString search; + DOMString text; // Location where search results should be displayed. // <code>CURRENT_TAB</code> is the default.
diff --git a/chrome/common/extensions/docs/templates/public/extensions/search.html b/chrome/common/extensions/docs/templates/public/extensions/search.html new file mode 100644 index 0000000..2f8bf1e --- /dev/null +++ b/chrome/common/extensions/docs/templates/public/extensions/search.html
@@ -0,0 +1 @@ +{{+partials.standard_extensions_api api:apis.extensions.search/}}
diff --git a/chrome/common/importer/firefox_importer_utils.cc b/chrome/common/importer/firefox_importer_utils.cc index 0b1f6cd..dd5ec4ab 100644 --- a/chrome/common/importer/firefox_importer_utils.cc +++ b/chrome/common/importer/firefox_importer_utils.cc
@@ -75,16 +75,17 @@ break; } - std::string path; - if (!root.GetStringASCII(current_profile + ".Path", &path)) + base::string16 path; + if (!root.GetString(current_profile + ".Path", &path)) continue; FirefoxDetail details; details.path = GetProfilePath(root, current_profile); - std::string name; - root.GetStringASCII(current_profile + ".Name", &name); + base::string16 name; + root.GetString(current_profile + ".Name", &name); // Make the profile name more presentable by replacing dashes with spaces. - base::ReplaceChars(name, "-", " ", &name); + base::ReplaceChars(name, base::ASCIIToUTF16("-"), base::ASCIIToUTF16(" "), + &name); details.name = name; profile_details.push_back(details); } @@ -93,7 +94,7 @@ // The name is only used to disambiguate profiles in the profile selection UI, // which is only useful when there are multiple profiles. if (profile_details.size() == 1) { - profile_details[0].name = ""; + profile_details[0].name = base::string16(); } return profile_details;
diff --git a/chrome/common/importer/firefox_importer_utils.h b/chrome/common/importer/firefox_importer_utils.h index a3feb589..02f6374 100644 --- a/chrome/common/importer/firefox_importer_utils.h +++ b/chrome/common/importer/firefox_importer_utils.h
@@ -45,7 +45,7 @@ // in stored. base::FilePath path; // The user specified name of the profile. - std::string name; + base::string16 name; }; inline bool operator==(const FirefoxDetail& a1, const FirefoxDetail& a2) {
diff --git a/chrome/common/importer/firefox_importer_utils_unittest.cc b/chrome/common/importer/firefox_importer_utils_unittest.cc index 5fa593c..3ea9669 100644 --- a/chrome/common/importer/firefox_importer_utils_unittest.cc +++ b/chrome/common/importer/firefox_importer_utils_unittest.cc
@@ -9,12 +9,15 @@ #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" #include "base/stl_util.h" +#include "base/strings/utf_string_conversions.h" #include "base/values.h" #include "chrome/grit/generated_resources.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/l10n/l10n_util.h" +using base::ASCIIToUTF16; +using base::UTF8ToUTF16; using testing::UnorderedElementsAre; namespace { @@ -141,7 +144,8 @@ std::vector<FirefoxDetail> details = GetFirefoxDetailsFromDictionary(single_profile, std::string()); EXPECT_THAT(details, UnorderedElementsAre(FirefoxDetail{ - base::FilePath(FILE_PATH_LITERAL("first")), ""})); + base::FilePath(FILE_PATH_LITERAL("first")), + base::string16()})); base::DictionaryValue no_default; no_default.SetString("Profile0.Path", "first"); @@ -152,12 +156,12 @@ no_default.SetString("Profile1.IsRelative", "0"); std::vector<FirefoxDetail> no_default_details = GetFirefoxDetailsFromDictionary(no_default, std::string()); - EXPECT_THAT( - no_default_details, - UnorderedElementsAre( - FirefoxDetail{base::FilePath(FILE_PATH_LITERAL("first")), "namey"}, - FirefoxDetail{base::FilePath(FILE_PATH_LITERAL("second")), - "namey name"})); + EXPECT_THAT(no_default_details, + UnorderedElementsAre( + FirefoxDetail{base::FilePath(FILE_PATH_LITERAL("first")), + ASCIIToUTF16("namey")}, + FirefoxDetail{base::FilePath(FILE_PATH_LITERAL("second")), + ASCIIToUTF16("namey name")})); base::DictionaryValue default_first; default_first.SetString("Profile0.Path", "first"); @@ -169,12 +173,12 @@ default_first.SetString("Profile1.IsRelative", "0"); std::vector<FirefoxDetail> default_first_details = GetFirefoxDetailsFromDictionary(default_first, std::string()); - EXPECT_THAT( - default_first_details, - UnorderedElementsAre( - FirefoxDetail{base::FilePath(FILE_PATH_LITERAL("first")), "namey"}, - FirefoxDetail{base::FilePath(FILE_PATH_LITERAL("second")), - "namey name"})); + EXPECT_THAT(default_first_details, + UnorderedElementsAre( + FirefoxDetail{base::FilePath(FILE_PATH_LITERAL("first")), + ASCIIToUTF16("namey")}, + FirefoxDetail{base::FilePath(FILE_PATH_LITERAL("second")), + ASCIIToUTF16("namey name")})); base::DictionaryValue default_second; default_second.SetString("Profile0.Path", "first"); @@ -186,12 +190,12 @@ default_second.SetString("Profile1.Default", "1"); std::vector<FirefoxDetail> default_second_details = GetFirefoxDetailsFromDictionary(default_second, std::string()); - EXPECT_THAT( - default_second_details, - UnorderedElementsAre( - FirefoxDetail{base::FilePath(FILE_PATH_LITERAL("first")), "namey"}, - FirefoxDetail{base::FilePath(FILE_PATH_LITERAL("second")), - "namey name"})); + EXPECT_THAT(default_second_details, + UnorderedElementsAre( + FirefoxDetail{base::FilePath(FILE_PATH_LITERAL("first")), + ASCIIToUTF16("namey")}, + FirefoxDetail{base::FilePath(FILE_PATH_LITERAL("second")), + ASCIIToUTF16("namey name")})); // Firefox format from version 67 base::DictionaryValue default_single_install; @@ -215,11 +219,12 @@ std::vector<FirefoxDetail> default_single_install_unknown_profile_details = GetFirefoxDetailsFromDictionary(default_single_install_unknown_profile, std::string()); - EXPECT_THAT( - default_single_install_unknown_profile_details, - UnorderedElementsAre( - FirefoxDetail{base::FilePath(FILE_PATH_LITERAL("first")), ""}, - FirefoxDetail{base::FilePath(FILE_PATH_LITERAL("second")), ""})); + EXPECT_THAT(default_single_install_unknown_profile_details, + UnorderedElementsAre( + FirefoxDetail{base::FilePath(FILE_PATH_LITERAL("first")), + base::string16()}, + FirefoxDetail{base::FilePath(FILE_PATH_LITERAL("second")), + base::string16()})); default_single_install_unknown_profile.SetString("Install01.Default", "first"); @@ -233,9 +238,30 @@ std::vector<FirefoxDetail> default_multiple_install_details = GetFirefoxDetailsFromDictionary(default_single_install_unknown_profile, std::string()); - EXPECT_THAT( - default_multiple_install_details, - UnorderedElementsAre( - FirefoxDetail{base::FilePath(FILE_PATH_LITERAL("first")), ""}, - FirefoxDetail{base::FilePath(FILE_PATH_LITERAL("second")), ""})); + EXPECT_THAT(default_multiple_install_details, + UnorderedElementsAre( + FirefoxDetail{base::FilePath(FILE_PATH_LITERAL("first")), + base::string16()}, + FirefoxDetail{base::FilePath(FILE_PATH_LITERAL("second")), + base::string16()})); + + base::DictionaryValue one_of_profiles_is_not_ascii_named; + one_of_profiles_is_not_ascii_named.SetString("Profile0.Path", "first"); + one_of_profiles_is_not_ascii_named.SetString("Profile0.Name", "namey"); + one_of_profiles_is_not_ascii_named.SetString("Profile0.IsRelative", "0"); + one_of_profiles_is_not_ascii_named.SetString("Profile1.Path", + UTF8ToUTF16("second.профиль")); + one_of_profiles_is_not_ascii_named.SetString("Profile1.Name", + UTF8ToUTF16("профиль")); + one_of_profiles_is_not_ascii_named.SetString("Profile1.IsRelative", "0"); + std::vector<FirefoxDetail> one_of_profiles_is_not_ascii_named_details = + GetFirefoxDetailsFromDictionary(one_of_profiles_is_not_ascii_named, + std::string()); + EXPECT_THAT(one_of_profiles_is_not_ascii_named_details, + UnorderedElementsAre( + FirefoxDetail{base::FilePath(FILE_PATH_LITERAL("first")), + ASCIIToUTF16("namey")}, + FirefoxDetail{base::FilePath(FILE_PATH_LITERAL("second." + "профиль")), + UTF8ToUTF16("профиль")})); }
diff --git a/chrome/common/importer/importer_data_types.h b/chrome/common/importer/importer_data_types.h index 65cfcd4..6514aca 100644 --- a/chrome/common/importer/importer_data_types.h +++ b/chrome/common/importer/importer_data_types.h
@@ -48,7 +48,7 @@ // The application locale. Stored because we can only access it from the UI // thread on the browser process. This is only used by the Firefox importer. std::string locale; - std::string profile; + base::string16 profile; }; // Contains information needed for importing search engine urls.
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc index b5df2c57..271c959 100644 --- a/chrome/common/pref_names.cc +++ b/chrome/common/pref_names.cc
@@ -1930,6 +1930,9 @@ // outlive the app installation and uninstallation. const char kWebAppsPreferences[] = "web_apps.web_app_ids"; +const char kWebAppsUserDisplayModeCleanedUp[] = + "web_apps.user_display_mode_cleaned_up"; + // A string representing the last version of Chrome that System Web Apps were // updated for. const char kSystemWebAppLastUpdateVersion[] =
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h index d048078..bf15a0d 100644 --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h
@@ -649,6 +649,7 @@ extern const char kWebAppsDailyMetricsDate[]; extern const char kWebAppsExtensionIDs[]; extern const char kWebAppsPreferences[]; +extern const char kWebAppsUserDisplayModeCleanedUp[]; extern const char kSystemWebAppLastUpdateVersion[]; extern const char kSystemWebAppLastInstalledLocale[]; extern const char kSystemWebAppInstallFailureCount[];
diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc index e1394cf..202d666 100644 --- a/chrome/common/webui_url_constants.cc +++ b/chrome/common/webui_url_constants.cc
@@ -241,6 +241,7 @@ const char kChromeUICryptohomeHost[] = "cryptohome"; const char kChromeUIDeviceEmulatorHost[] = "device-emulator"; const char kChromeUIDiscoverURL[] = "chrome://oobe/discover"; +const char kChromeUIFileManagerHost[] = "file-manager"; const char kChromeUIFirstRunHost[] = "first-run"; const char kChromeUIFirstRunURL[] = "chrome://first-run/"; const char kChromeUIIntenetConfigDialogURL[] =
diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h index ef5f63f..b97d699 100644 --- a/chrome/common/webui_url_constants.h +++ b/chrome/common/webui_url_constants.h
@@ -236,6 +236,7 @@ extern const char kChromeUICryptohomeHost[]; extern const char kChromeUIDeviceEmulatorHost[]; extern const char kChromeUIDiscoverURL[]; +extern const char kChromeUIFileManagerHost[]; extern const char kChromeUIFirstRunHost[]; extern const char kChromeUIFirstRunURL[]; extern const char kChromeUIIntenetConfigDialogURL[];
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/SigninTestUtil.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/SigninTestUtil.java index b40ec1e..c26d9ab 100644 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/SigninTestUtil.java +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/SigninTestUtil.java
@@ -29,7 +29,7 @@ /** * Utility class for test signin functionality. */ -final class SigninTestUtil { +public final class SigninTestUtil { /** * Returns the currently signed in account. */ @@ -43,9 +43,11 @@ } /** - * Sign into an account. + * Signs into an account and enables the sync if given a {@link ProfileSyncService} object. + * + * @param profileSyncService Enable the sync with it if it is not null. */ - static void signIn(Account account, @Nullable ProfileSyncService profileSyncService) { + public static void signIn(Account account, @Nullable ProfileSyncService profileSyncService) { CallbackHelper callbackHelper = new CallbackHelper(); TestThreadUtils.runOnUiThreadBlocking(() -> { SigninManager signinManager = IdentityServicesProvider.get().getSigninManager(
diff --git a/chrome/test/data/extensions/api_test/search/query/incognito/background.js b/chrome/test/data/extensions/api_test/search/query/incognito/background.js index 5cd3a24..6c61d52 100644 --- a/chrome/test/data/extensions/api_test/search/query/incognito/background.js +++ b/chrome/test/data/extensions/api_test/search/query/incognito/background.js
@@ -15,14 +15,14 @@ function IncognitoSpecificTab() { chrome.tabs.query({active: true, currentWindow: true}, (tabs) => { const tab = tabs[0]; - testHelper(tabs, {search: SEARCH_WORDS, tabId: tab.id}); + testHelper(tabs, {text: SEARCH_WORDS, tabId: tab.id}); }); }, // Verify search results shown in current incognito tab. function IncognitoNoDisposition() { chrome.tabs.query({active: true, currentWindow: true}, (tabs) => { - testHelper(tabs, {search: SEARCH_WORDS}); + testHelper(tabs, {text: SEARCH_WORDS}); }); }, ]);
diff --git a/chrome/test/data/extensions/api_test/search/query/incognito_split/background.js b/chrome/test/data/extensions/api_test/search/query/incognito_split/background.js index 43687e5..1dff0e38 100644 --- a/chrome/test/data/extensions/api_test/search/query/incognito_split/background.js +++ b/chrome/test/data/extensions/api_test/search/query/incognito_split/background.js
@@ -18,14 +18,14 @@ // Verify search results shown in specified incognito tab. function IncognitoSpecificTab() { chrome.tabs.query({active: true, currentWindow: true}, (tabs) => { - testHelper(tabs, {search: SEARCH_WORDS, tabId: tabs[0].id}); + testHelper(tabs, {text: SEARCH_WORDS, tabId: tabs[0].id}); }); }, // Verify search results shown in current incognito tab. function IncognitoNoDisposition() { chrome.tabs.query({active: true, currentWindow: true}, (tabs) => { - testHelper(tabs, {search: SEARCH_WORDS}); + testHelper(tabs, {text: SEARCH_WORDS}); }); }, ]);
diff --git a/chrome/test/data/extensions/api_test/search/query/normal/background.js b/chrome/test/data/extensions/api_test/search/query/normal/background.js index ca2694b..424f573 100644 --- a/chrome/test/data/extensions/api_test/search/query/normal/background.js +++ b/chrome/test/data/extensions/api_test/search/query/normal/background.js
@@ -15,8 +15,8 @@ // Error if search string is empty. function QueryEmpty() { - chrome.search.query({search: ''}, function() { - assertLastError('Empty search parameter.'); + chrome.search.query({text: ''}, function() { + assertLastError('Empty text parameter.'); succeed(); }); }, @@ -25,7 +25,7 @@ function QueryPopulatedDispositionEmpty() { chrome.tabs.create({}, (tab) => { waitForTabAndPass(tab.id); - chrome.search.query({search: SEARCH_WORDS}, () => {}); + chrome.search.query({text: SEARCH_WORDS}, () => {}); }); }, @@ -33,7 +33,7 @@ function QueryPopulatedDispositionCurrentTab() { chrome.tabs.create({}, (tab) => { waitForTabAndPass(tab.id); - chrome.search.query({search: SEARCH_WORDS, disposition: 'CURRENT_TAB'}); + chrome.search.query({text: SEARCH_WORDS, disposition: 'CURRENT_TAB'}); }); }, @@ -46,7 +46,7 @@ waitForAnyTab(), new Promise(resolve => { chrome.search.query( - {search: SEARCH_WORDS, disposition: 'NEW_TAB'}, () => { + {text: SEARCH_WORDS, disposition: 'NEW_TAB'}, () => { chrome.tabs.query( {active: true, currentWindow: true}, (tabs) => { assertEq(1, tabs.length); @@ -72,7 +72,7 @@ waitForAnyTab(), new Promise((resolve) => { chrome.search.query( - {search: SEARCH_WORDS, disposition: 'NEW_WINDOW'}, () => { + {text: SEARCH_WORDS, disposition: 'NEW_WINDOW'}, () => { chrome.windows.getAll({}, (windows) => { let window = windows.find( window => !initialWindowIds.includes(window.id)); @@ -93,13 +93,13 @@ function QueryPopulatedTabIDValid() { chrome.tabs.create({}, (tab) => { waitForTabAndPass(tab.id); - chrome.search.query({search: SEARCH_WORDS, tabId: tab.id}); + chrome.search.query({text: SEARCH_WORDS, tabId: tab.id}); }); }, // Error if tab id invalid. function QueryPopulatedTabIDInvalid() { - chrome.search.query({search: SEARCH_WORDS, tabId: -1}, () => { + chrome.search.query({text: SEARCH_WORDS, tabId: -1}, () => { assertLastError('No tab with id: -1.'); succeed(); }); @@ -109,7 +109,7 @@ function QueryAndDispositionPopulatedTabIDValid() { chrome.tabs.query({active: true}, (tabs) => { chrome.search.query( - {search: SEARCH_WORDS, tabId: tabs[0].id, disposition: 'NEW_TAB'}, + {text: SEARCH_WORDS, tabId: tabs[0].id, disposition: 'NEW_TAB'}, () => { assertLastError('Cannot set both \'disposition\' and \'tabId\'.'); succeed();
diff --git a/chrome/test/data/extensions/permissions/whitelist.pem b/chrome/test/data/extensions/permissions/allowlist.pem similarity index 100% rename from chrome/test/data/extensions/permissions/whitelist.pem rename to chrome/test/data/extensions/permissions/allowlist.pem
diff --git a/chrome/test/data/extensions/permissions/whitelist/manifest.json b/chrome/test/data/extensions/permissions/allowlist/manifest.json similarity index 100% rename from chrome/test/data/extensions/permissions/whitelist/manifest.json rename to chrome/test/data/extensions/permissions/allowlist/manifest.json
diff --git a/chrome/test/data/webui/settings/chromeos/input_page_test.js b/chrome/test/data/webui/settings/chromeos/input_page_test.js index dae5bb5d..5471245 100644 --- a/chrome/test/data/webui/settings/chromeos/input_page_test.js +++ b/chrome/test/data/webui/settings/chromeos/input_page_test.js
@@ -5,6 +5,7 @@ // clang-format off // #import {LanguagesBrowserProxyImpl, LanguagesMetricsProxyImpl} from 'chrome://os-settings/chromeos/lazy_load.js'; // #import {CrSettingsPrefs, Router, routes} from 'chrome://os-settings/chromeos/os_settings.js'; +// #import {keyDownOn} from 'chrome://resources/polymer/v3_0/iron-test-helpers/mock-interactions.js'; // #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; // #import {getFakeLanguagePrefs} from '../fake_language_settings_private.m.js' // #import {FakeSettingsPrivate} from '../fake_settings_private.m.js'; @@ -167,11 +168,145 @@ }); suite('add input methods dialog', () => { - test('opens when clicking addInputMethod button', () => { + let dialog; + let suggestedInputMethods; + let allInputMethods; + let cancelButton; + let actionButton; + + setup(() => { assertFalse(!!inputPage.$$('os-settings-add-input-methods-dialog')); inputPage.$$('#addInputMethod').click(); Polymer.dom.flush(); - assertTrue(!!inputPage.$$('os-settings-add-input-methods-dialog')); + + dialog = inputPage.$$('os-settings-add-input-methods-dialog'); + assertTrue(!!dialog); + + actionButton = dialog.$$('.action-button'); + assertTrue(!!actionButton); + cancelButton = dialog.$$('.cancel-button'); + assertTrue(!!cancelButton); + + suggestedInputMethods = dialog.$$('#suggestedInputMethods'); + assertTrue(!!suggestedInputMethods); + + allInputMethods = dialog.$$('#allInputMethods'); + assertTrue(!!allInputMethods); + + // No input methods has been selected, so the action button is disabled. + assertTrue(actionButton.disabled); + assertFalse(cancelButton.disabled); + }); + + test('has action button working correctly', () => { + const listItems = suggestedInputMethods.querySelectorAll('.list-item'); + // selecting a language enables action button + listItems[0].click(); + assertFalse(actionButton.disabled); + + // selecting the same language again disables action button + listItems[0].click(); + assertTrue(actionButton.disabled); + }); + + test('adds input methods', () => { + const suggestedItems = + suggestedInputMethods.querySelectorAll('.list-item'); + // input methods are based on and ordered by enabled languages + assertEquals(2, suggestedItems.length); + assertEquals('US Swahili keyboard', suggestedItems[0].textContent.trim()); + assertEquals('Swahili keyboard', suggestedItems[1].textContent.trim()); + // selecting Swahili keyboard. + suggestedItems[1].click(); + + const allItems = allInputMethods.querySelectorAll('.list-item'); + // All input methods should appear and ordered based on fake settings + // data. + assertEquals(3, allItems.length); + assertEquals('Swahili keyboard', allItems[0].textContent.trim()); + // checked is reflected + assertTrue(allItems[0].checked); + assertEquals('US Swahili keyboard', allItems[1].textContent.trim()); + assertFalse(allItems[1].checked); + assertEquals('Vietnamese keyboard', allItems[2].textContent.trim()); + // selecting Vietnamese keyboard + allItems[2].click(); + + actionButton.click(); + + assertTrue(languageHelper.isInputMethodEnabled( + '_comp_ime_abcdefghijklmnopqrstuvwxyzabcdefxkb:sw:sw')); + assertFalse(languageHelper.isInputMethodEnabled( + '_comp_ime_abcdefghijklmnopqrstuvwxyzabcdefxkb:us:sw')); + assertTrue(languageHelper.isInputMethodEnabled( + '_comp_ime_abcdefghijklmnopqrstuvwxyzabcdefxkb:vi:vi')); + }); + + test('suggested input methods hidden when no languages is enabled', () => { + languageHelper.setPrefValue('settings.language.preferred_languages', ''); + Polymer.dom.flush(); + + suggestedInputMethods = dialog.$$('#suggestedInputMethods'); + // suggested input methods is rendered previously. + assertTrue(!!suggestedInputMethods); + assertEquals('none', getComputedStyle(suggestedInputMethods).display); + }); + + test('suggested input methods hidden when no input methods left', () => { + const languageCode = 'sw'; + languageHelper.setPrefValue( + 'settings.language.preferred_languages', languageCode); + languageHelper.getInputMethodsForLanguage(languageCode) + .forEach(inputMethod => { + languageHelper.addInputMethod(inputMethod.id); + }); + Polymer.dom.flush(); + + suggestedInputMethods = dialog.$$('#suggestedInputMethods'); + // suggested input methods is rendered previously. + assertTrue(!!suggestedInputMethods); + assertEquals('none', getComputedStyle(suggestedInputMethods).display); + }); + + test('searches input methods correctly', () => { + const searchInput = dialog.$$('cr-search-field'); + const getItems = function() { + return allInputMethods.querySelectorAll('.list-item:not([hidden])'); + }; + + assertFalse(dialog.$$('#allInputMethodsLabel').hidden); + assertEquals('block', getComputedStyle(suggestedInputMethods).display); + + // Expecting a few languages to be displayed when no query exists. + assertGE(getItems().length, 1); + + // Search hides suggestedInputMethods and allInputMethodsLabel. + searchInput.setValue('v'); + Polymer.dom.flush(); + assertTrue(dialog.$$('#allInputMethodsLabel').hidden); + assertEquals('none', getComputedStyle(suggestedInputMethods).display); + + // Search input methods name + searchInput.setValue('vietnamese'); + Polymer.dom.flush(); + assertEquals(1, getItems().length); + assertTrue(getItems()[0].textContent.includes('Vietnamese')); + }); + + test('has escape key behavior working correctly', function() { + const searchInput = dialog.$$('cr-search-field'); + searchInput.setValue('dummyquery'); + + // Test that dialog is not closed if 'Escape' is pressed on the input + // and a search query exists. + MockInteractions.keyDownOn(searchInput, 19, [], 'Escape'); + assertTrue(dialog.$.dialog.open); + + // Test that dialog is closed if 'Escape' is pressed on the input and no + // search query exists. + searchInput.setValue(''); + MockInteractions.keyDownOn(searchInput, 19, [], 'Escape'); + assertFalse(dialog.$.dialog.open); }); });
diff --git a/chrome/test/data/webui/settings/fake_language_settings_private.js b/chrome/test/data/webui/settings/fake_language_settings_private.js index d6c86b4e..2bd21963 100644 --- a/chrome/test/data/webui/settings/fake_language_settings_private.js +++ b/chrome/test/data/webui/settings/fake_language_settings_private.js
@@ -163,7 +163,13 @@ displayName: 'US Swahili keyboard', languageCodes: ['en', 'en-US', 'sw'], enabled: false, - } + }, + { + id: '_comp_ime_abcdefghijklmnopqrstuvwxyzabcdefxkb:vi:vi', + displayName: 'Vietnamese keyboard', + languageCodes: ['vi'], + enabled: false, + }, ]; }
diff --git a/chrome/test/permissions/permission_request_manager_test_api.cc b/chrome/test/permissions/permission_request_manager_test_api.cc index a0c0a0c..c7aaa2e 100644 --- a/chrome/test/permissions/permission_request_manager_test_api.cc +++ b/chrome/test/permissions/permission_request_manager_test_api.cc
@@ -26,8 +26,8 @@ bool user_gesture = true; auto decided = [](ContentSetting) {}; request_ = std::make_unique<permissions::PermissionRequestImpl>( - GURL("https://embedder_example.test"), GURL("https://example.com"), type, - user_gesture, base::BindOnce(decided), + GURL("https://example.com"), type, user_gesture, + base::BindOnce(decided), base::BindOnce(&TestPermissionRequestOwner::DeleteThis, base::Unretained(this))); }
diff --git a/chrome/updater/app/server/win/com_classes.cc b/chrome/updater/app/server/win/com_classes.cc index 8a9d5c95..185dd28 100644 --- a/chrome/updater/app/server/win/com_classes.cc +++ b/chrome/updater/app/server/win/com_classes.cc
@@ -39,12 +39,11 @@ STDMETHODIMP UpdateStateImpl::get_nextVersion(BSTR* next_version) { DCHECK(next_version); *next_version = - update_state_.next_version.IsValid() - ? base::win::ScopedBstr( - base::UTF8ToWide(update_state_.next_version.GetString())) - .Release() - : nullptr; - + base::win::ScopedBstr( + update_state_.next_version.IsValid() + ? base::UTF8ToWide(update_state_.next_version.GetString()) + : L"") + .Release(); return S_OK; } @@ -144,7 +143,7 @@ Microsoft::WRL::Make<UpdateStateImpl>( update_state)), base::BindOnce([](HRESULT hr) { - DVLOG(2) + DVLOG(4) << "IUpdaterObserver::OnStateChange returned " << std::hex << hr; }));
diff --git a/chromeos/components/BUILD.gn b/chromeos/components/BUILD.gn index 678048a4..0a1402c 100644 --- a/chromeos/components/BUILD.gn +++ b/chromeos/components/BUILD.gn
@@ -57,7 +57,6 @@ if (!is_official_build) { deps += [ - "//chromeos/components/file_manager/resources:closure_compile", "//chromeos/components/sample_system_web_app_ui:closure_compile", "//chromeos/components/telemetry_extension_ui:closure_compile", ]
diff --git a/chromeos/components/file_manager/BUILD.gn b/chromeos/components/file_manager/BUILD.gn deleted file mode 100644 index 14a08c17..0000000 --- a/chromeos/components/file_manager/BUILD.gn +++ /dev/null
@@ -1,31 +0,0 @@ -# Copyright 2020 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import("//mojo/public/tools/bindings/mojom.gni") - -assert(is_chromeos, "File Manager is Chrome OS only") -assert(!is_official_build, "File Manager is only built for unofficial builds") - -mojom("file_manager_mojom") { - sources = [ "file_manager.mojom" ] -} - -static_library("file_manager_ui") { - sources = [ - "file_manager_page_handler.cc", - "file_manager_page_handler.h", - "file_manager_ui.cc", - "file_manager_ui.h", - "url_constants.cc", - "url_constants.h", - ] - - deps = [ - ":file_manager_mojom", - "//chromeos/constants", - "//chromeos/resources:file_manager_resources", - "//content/public/browser", - "//ui/webui", - ] -}
diff --git a/chromeos/components/file_manager/DEPS b/chromeos/components/file_manager/DEPS deleted file mode 100644 index 4cfbff5..0000000 --- a/chromeos/components/file_manager/DEPS +++ /dev/null
@@ -1,6 +0,0 @@ -include_rules = [ - # Do not add chrome here (use a delegate instead). - "+chromeos/grit/chromeos_file_manager_resources.h", - "+content/public/browser", - "+ui/webui", -]
diff --git a/chromeos/components/file_manager/file_manager_ui.cc b/chromeos/components/file_manager/file_manager_ui.cc deleted file mode 100644 index b70e0d8..0000000 --- a/chromeos/components/file_manager/file_manager_ui.cc +++ /dev/null
@@ -1,68 +0,0 @@ -// Copyright (c) 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chromeos/components/file_manager/file_manager_ui.h" - -#include "base/memory/ptr_util.h" -#include "chromeos/components/file_manager/file_manager_page_handler.h" -#include "chromeos/components/file_manager/url_constants.h" -#include "chromeos/grit/chromeos_file_manager_resources.h" -#include "content/public/browser/web_contents.h" -#include "content/public/browser/web_ui.h" -#include "content/public/browser/web_ui_data_source.h" - -namespace chromeos { -namespace file_manager { - -FileManagerUI::FileManagerUI(content::WebUI* web_ui) - : MojoWebUIController(web_ui) { - auto source = base::WrapUnique(content::WebUIDataSource::Create( - chromeos::file_manager::kChromeUIFileManagerHost)); - // The HTML content loaded on chrome://file-manager. - source->AddResourcePath("", IDR_FILE_MANAGER_FILE_MANAGER_HTML); - - // The resources requested by chrome://file-manager HTML. - source->AddResourcePath("file_manager.css", - IDR_FILE_MANAGER_FILE_MANAGER_CSS); - source->AddResourcePath("file_manager.js", IDR_FILE_MANAGER_FILE_MANAGER_JS); - source->AddResourcePath("file_manager.mojom-lite.js", - IDR_FILE_MANAGER_MOJO_LITE_JS); - source->AddResourcePath("browser_proxy.js", - IDR_FILE_MANAGER_BROWSER_PROXY_JS); - -#if !DCHECK_IS_ON() - // If a user goes to an invalid url and non-DCHECK mode (DHECK = debug mode) - // is set, serve a default page so the user sees your default page instead - // of an unexpected error. But if DCHECK is set, the user will be a - // developer and be able to identify an error occurred. - source->SetDefaultResource(IDR_FILE_MANAGER_FILE_MANAGER_HTML); -#endif // !DCHECK_IS_ON() - - auto* browser_context = web_ui->GetWebContents()->GetBrowserContext(); - content::WebUIDataSource::Add(browser_context, source.release()); -} - -FileManagerUI::~FileManagerUI() = default; - -void FileManagerUI::BindInterface( - mojo::PendingReceiver<mojom::PageHandlerFactory> pending_receiver) { - if (page_factory_receiver_.is_bound()) { - page_factory_receiver_.reset(); - } - page_factory_receiver_.Bind(std::move(pending_receiver)); -} - -void FileManagerUI::CreatePageHandler( - mojo::PendingRemote<mojom::Page> pending_page, - mojo::PendingReceiver<mojom::PageHandler> pending_page_handler) { - DCHECK(pending_page.is_valid()); - - page_handler_ = std::make_unique<FileManagerPageHandler>( - std::move(pending_page_handler), std::move(pending_page)); -} - -WEB_UI_CONTROLLER_TYPE_IMPL(FileManagerUI) - -} // namespace file_manager -} // namespace chromeos
diff --git a/chromeos/components/file_manager/resources/BUILD.gn b/chromeos/components/file_manager/resources/BUILD.gn deleted file mode 100644 index 5d64f74..0000000 --- a/chromeos/components/file_manager/resources/BUILD.gn +++ /dev/null
@@ -1,17 +0,0 @@ -# Copyright 2020 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import("//third_party/closure_compiler/compile_js.gni") - -js_library("file_manager_js") { - sources = [ - "browser_proxy.js", - "file_manager.js", - ] - deps = [ "//chromeos/components/file_manager:file_manager_mojom_js_library_for_compile" ] -} - -js_type_check("closure_compile") { - deps = [ ":file_manager_js" ] -}
diff --git a/chromeos/components/file_manager/resources/file_manager_resources.grd b/chromeos/components/file_manager/resources/file_manager_resources.grd deleted file mode 100644 index 4044b190..0000000 --- a/chromeos/components/file_manager/resources/file_manager_resources.grd +++ /dev/null
@@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<grit latest_public_release="0" current_release="1" output_all_resource_defines="false"> - <outputs> - <output filename="grit/chromeos_file_manager_resources.h" type="rc_header"> - <emit emit_type='prepend'></emit> - </output> - <output filename="grit/chromeos_file_manager_resources_map.cc" - type="resource_file_map_source" /> - <output filename="grit/chromeos_file_manager_resources_map.h" - type="resource_map_header" /> - <output filename="chromeos_file_manager_resources.pak" type="data_package" /> - </outputs> - <release seq="1"> - <includes> - <if expr="is_official_build == false"> - <!-- Privileged app host contents. --> - <include name="IDR_FILE_MANAGER_BROWSER_PROXY_JS" file="browser_proxy.js" type="BINDATA" /> - <include name="IDR_FILE_MANAGER_FILE_MANAGER_HTML" file="file_manager.html" type="BINDATA" /> - <include name="IDR_FILE_MANAGER_FILE_MANAGER_CSS" file="file_manager.css" type="BINDATA" /> - <include name="IDR_FILE_MANAGER_FILE_MANAGER_JS" file="file_manager.js" type="BINDATA" /> - <include name="IDR_FILE_MANAGER_ICON_192" file="icon192.png" type="BINDATA" /> - - <!-- Mojo resources --> - <include name="IDR_FILE_MANAGER_MOJO_LITE_JS" - file="$root_gen_dir\chromeos\components\file_manager\file_manager.mojom-lite.js" - use_base_dir="false" - type="BINDATA" /> - </if> - </includes> - </release> -</grit> -
diff --git a/chromeos/components/file_manager/resources/icon192.png b/chromeos/components/file_manager/resources/icon192.png deleted file mode 100644 index b49fdee..0000000 --- a/chromeos/components/file_manager/resources/icon192.png +++ /dev/null Binary files differ
diff --git a/chromeos/components/file_manager/url_constants.cc b/chromeos/components/file_manager/url_constants.cc deleted file mode 100644 index c4be8375..0000000 --- a/chromeos/components/file_manager/url_constants.cc +++ /dev/null
@@ -1,14 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chromeos/components/file_manager/url_constants.h" - -namespace chromeos { -namespace file_manager { - -constexpr char kChromeUIFileManagerHost[] = "file-manager"; -constexpr char kChromeUIFileManagerURL[] = "chrome://file-manager"; - -} // namespace file_manager -} // namespace chromeos
diff --git a/chromeos/components/file_manager/url_constants.h b/chromeos/components/file_manager/url_constants.h deleted file mode 100644 index 143d697..0000000 --- a/chromeos/components/file_manager/url_constants.h +++ /dev/null
@@ -1,17 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROMEOS_COMPONENTS_FILE_MANAGER_URL_CONSTANTS_H_ -#define CHROMEOS_COMPONENTS_FILE_MANAGER_URL_CONSTANTS_H_ - -namespace chromeos { -namespace file_manager { - -extern const char kChromeUIFileManagerHost[]; -extern const char kChromeUIFileManagerURL[]; - -} // namespace file_manager -} // namespace chromeos - -#endif // CHROMEOS_COMPONENTS_FILE_MANAGER_URL_CONSTANTS_H_
diff --git a/chromeos/components/quick_answers/understanding/intent_generator.cc b/chromeos/components/quick_answers/understanding/intent_generator.cc index 34d4718e..f04adcba 100644 --- a/chromeos/components/quick_answers/understanding/intent_generator.cc +++ b/chromeos/components/quick_answers/understanding/intent_generator.cc
@@ -10,7 +10,6 @@ #include "base/no_destructor.h" #include "base/strings/utf_string_conversions.h" #include "chromeos/components/quick_answers/quick_answers_model.h" -#include "chromeos/components/quick_answers/utils/language_detector.h" #include "chromeos/constants/chromeos_features.h" #include "chromeos/services/machine_learning/public/cpp/service_connection.h" #include "chromeos/services/machine_learning/public/mojom/machine_learning_service.mojom.h" @@ -85,7 +84,6 @@ IntentGenerator::IntentGenerator(IntentGeneratorCallback complete_callback) : complete_callback_(std::move(complete_callback)) { - language_detector_ = std::make_unique<LanguageDetector>(); } IntentGenerator::~IntentGenerator() { @@ -155,9 +153,16 @@ MaybeGenerateTranslationIntent(request); } -void IntentGenerator::SetLanguageDetectorForTesting( - std::unique_ptr<LanguageDetector> language_detector) { - language_detector_ = std::move(language_detector); +void IntentGenerator::FindLanguagesCallback( + const QuickAnswersRequest& request, + std::vector<machine_learning::mojom::TextLanguagePtr> languages) { + auto intent_type = IntentType::kUnknown; + // TODO(b/b/150034512): Take confidence level into consideration. + if (!languages.empty() && + languages.front()->locale != request.context.device_properties.language) { + intent_type = IntentType::kTranslation; + } + std::move(complete_callback_).Run(request.selected_text, intent_type); } void IntentGenerator::MaybeGenerateTranslationIntent( @@ -178,16 +183,15 @@ .Run(request.selected_text, IntentType::kUnknown); return; } - auto detected_language = language_detector_->DetectLanguage( - !request.context.surrounding_text.empty() - ? request.context.surrounding_text - : request.selected_text); - auto intent_type = IntentType::kUnknown; - if (!detected_language.empty() && - detected_language != request.context.device_properties.language) { - intent_type = IntentType::kTranslation; + + if (text_classifier_) { + text_classifier_->FindLanguages( + !request.context.surrounding_text.empty() + ? request.context.surrounding_text + : request.selected_text, + base::BindOnce(&IntentGenerator::FindLanguagesCallback, + weak_factory_.GetWeakPtr(), request)); } - std::move(complete_callback_).Run(request.selected_text, intent_type); } } // namespace quick_answers
diff --git a/chromeos/components/quick_answers/understanding/intent_generator.h b/chromeos/components/quick_answers/understanding/intent_generator.h index 2ffb8b4..121387b15 100644 --- a/chromeos/components/quick_answers/understanding/intent_generator.h +++ b/chromeos/components/quick_answers/understanding/intent_generator.h
@@ -9,7 +9,6 @@ #include <string> #include "base/callback.h" -#include "chromeos/components/quick_answers/utils/language_detector.h" #include "chromeos/services/machine_learning/public/mojom/machine_learning_service.mojom.h" #include "chromeos/services/machine_learning/public/mojom/text_classifier.mojom.h" #include "mojo/public/cpp/bindings/remote.h" @@ -37,9 +36,6 @@ // Generate intent from the |request|. Virtual for testing. virtual void GenerateIntent(const QuickAnswersRequest& request); - void SetLanguageDetectorForTesting( - std::unique_ptr<LanguageDetector> language_detector); - private: FRIEND_TEST_ALL_PREFIXES(IntentGeneratorTest, TextAnnotationIntentNoAnnotation); @@ -53,11 +49,13 @@ void AnnotationCallback( const QuickAnswersRequest& request, std::vector<machine_learning::mojom::TextAnnotationPtr> annotations); + void FindLanguagesCallback( + const QuickAnswersRequest& request, + std::vector<machine_learning::mojom::TextLanguagePtr> languages); void MaybeGenerateTranslationIntent(const QuickAnswersRequest& request); IntentGeneratorCallback complete_callback_; - std::unique_ptr<LanguageDetector> language_detector_; mojo::Remote<::chromeos::machine_learning::mojom::TextClassifier> text_classifier_;
diff --git a/chromeos/components/quick_answers/understanding/intent_generator_unittest.cc b/chromeos/components/quick_answers/understanding/intent_generator_unittest.cc index 5a897f7..38b611d5 100644 --- a/chromeos/components/quick_answers/understanding/intent_generator_unittest.cc +++ b/chromeos/components/quick_answers/understanding/intent_generator_unittest.cc
@@ -11,7 +11,6 @@ #include "base/test/scoped_feature_list.h" #include "base/test/task_environment.h" #include "chromeos/components/quick_answers/quick_answers_model.h" -#include "chromeos/components/quick_answers/utils/language_detector.h" #include "chromeos/constants/chromeos_features.h" #include "chromeos/services/machine_learning/public/cpp/fake_service_connection.h" #include "chromeos/services/machine_learning/public/mojom/machine_learning_service.mojom.h" @@ -29,19 +28,12 @@ using machine_learning::mojom::TextEntity; using machine_learning::mojom::TextEntityData; using machine_learning::mojom::TextEntityPtr; +using machine_learning::mojom::TextLanguage; +using machine_learning::mojom::TextLanguagePtr; -class MockLanguageDetector : public LanguageDetector { - public: - MockLanguageDetector() = default; - - MockLanguageDetector(const MockLanguageDetector&) = delete; - MockLanguageDetector& operator=(const MockLanguageDetector&) = delete; - - ~MockLanguageDetector() override = default; - - // TestResultLoader: - MOCK_METHOD1(DetectLanguage, std::string(const std::string&)); -}; +TextLanguagePtr DefaultLanguage() { + return TextLanguage::New("en", /* confidence */ 1); +} } // namespace @@ -57,13 +49,6 @@ base::BindOnce(&IntentGeneratorTest::IntentGeneratorTestCallback, base::Unretained(this))); - // Mock language detector. - mock_language_detector_ = std::make_unique<MockLanguageDetector>(); - EXPECT_CALL(*mock_language_detector_, DetectLanguage(::testing::_)) - .WillRepeatedly(::testing::Return("en")); - intent_generator_->SetLanguageDetectorForTesting( - std::move(mock_language_detector_)); - scoped_feature_list_.InitWithFeatures( {chromeos::features::kQuickAnswersTextAnnotator, chromeos::features::kQuickAnswersTranslation}, @@ -80,15 +65,17 @@ protected: void UseFakeServiceConnection( const std::vector<TextAnnotationPtr>& annotations = - std::vector<TextAnnotationPtr>()) { + std::vector<TextAnnotationPtr>(), + const std::vector<TextLanguagePtr>& languages = + std::vector<TextLanguagePtr>()) { chromeos::machine_learning::ServiceConnection:: UseFakeServiceConnectionForTesting(&fake_service_connection_); fake_service_connection_.SetOutputAnnotation(annotations); + fake_service_connection_.SetOutputLanguages(languages); } base::test::TaskEnvironment task_environment_; std::unique_ptr<IntentGenerator> intent_generator_; - std::unique_ptr<MockLanguageDetector> mock_language_detector_; std::string intent_text_; IntentType intent_type_ = IntentType::kUnknown; base::test::ScopedFeatureList scoped_feature_list_; @@ -97,7 +84,9 @@ }; TEST_F(IntentGeneratorTest, TranslationIntent) { - UseFakeServiceConnection(); + std::vector<TextLanguagePtr> languages; + languages.push_back(DefaultLanguage()); + UseFakeServiceConnection({}, languages); QuickAnswersRequest request; request.selected_text = "quick answers"; @@ -111,7 +100,9 @@ } TEST_F(IntentGeneratorTest, TranslationIntentSameLanguage) { - UseFakeServiceConnection(); + std::vector<TextLanguagePtr> languages; + languages.push_back(DefaultLanguage()); + UseFakeServiceConnection({}, languages); QuickAnswersRequest request; request.selected_text = "quick answers"; @@ -125,7 +116,9 @@ } TEST_F(IntentGeneratorTest, TranslationIntentTextLengthAboveThreshold) { - UseFakeServiceConnection(); + std::vector<TextLanguagePtr> languages; + languages.push_back(DefaultLanguage()); + UseFakeServiceConnection({}, languages); QuickAnswersRequest request; request.selected_text = @@ -148,7 +141,9 @@ scoped_feature_list.InitWithFeatures( {chromeos::features::kQuickAnswersTextAnnotator}, {chromeos::features::kQuickAnswersTranslation}); - UseFakeServiceConnection(); + std::vector<TextLanguagePtr> languages; + languages.push_back(DefaultLanguage()); + UseFakeServiceConnection({}, languages); QuickAnswersRequest request; request.selected_text = "quick answers"; @@ -162,7 +157,9 @@ } TEST_F(IntentGeneratorTest, TranslationIntentDeviceLanguageNotSet) { - UseFakeServiceConnection(); + std::vector<TextLanguagePtr> languages; + languages.push_back(DefaultLanguage()); + UseFakeServiceConnection({}, languages); QuickAnswersRequest request; request.selected_text = "quick answers";
diff --git a/chromeos/components/quick_answers/utils/language_detector.h b/chromeos/components/quick_answers/utils/language_detector.h index 3c244c46..af13682 100644 --- a/chromeos/components/quick_answers/utils/language_detector.h +++ b/chromeos/components/quick_answers/utils/language_detector.h
@@ -15,7 +15,9 @@ namespace chromeos { namespace quick_answers { -// Utility class for langugage detection. +// Utility class for language detection. +// TODO(b/168541952): Cleanup this class after the new language detection API +// becomes stable. class LanguageDetector { public: LanguageDetector();
diff --git a/chromeos/components/telemetry_extension_ui/diagnostics_service_converters.cc b/chromeos/components/telemetry_extension_ui/diagnostics_service_converters.cc index bed425c3..bcb9084b 100644 --- a/chromeos/components/telemetry_extension_ui/diagnostics_service_converters.cc +++ b/chromeos/components/telemetry_extension_ui/diagnostics_service_converters.cc
@@ -109,8 +109,6 @@ return health::mojom::DiagnosticRoutineEnum::kBatteryCapacity; case cros_healthd::mojom::DiagnosticRoutineEnum::kBatteryHealth: return health::mojom::DiagnosticRoutineEnum::kBatteryHealth; - case cros_healthd::mojom::DiagnosticRoutineEnum::kUrandom: - return health::mojom::DiagnosticRoutineEnum::kUrandom; case cros_healthd::mojom::DiagnosticRoutineEnum::kSmartctlCheck: return health::mojom::DiagnosticRoutineEnum::kSmartctlCheck; case cros_healthd::mojom::DiagnosticRoutineEnum::kAcPower:
diff --git a/chromeos/components/telemetry_extension_ui/mojom/diagnostics_service.mojom b/chromeos/components/telemetry_extension_ui/mojom/diagnostics_service.mojom index 728545a4..ce614fe 100644 --- a/chromeos/components/telemetry_extension_ui/mojom/diagnostics_service.mojom +++ b/chromeos/components/telemetry_extension_ui/mojom/diagnostics_service.mojom
@@ -190,17 +190,16 @@ enum DiagnosticRoutineEnum { kBatteryCapacity = 0, kBatteryHealth = 1, - kUrandom = 2, - kSmartctlCheck = 3, - kAcPower = 4, - kCpuCache = 5, - kCpuStress = 6, - kFloatingPointAccuracy = 7, - kNvmeWearLevel = 8, - kNvmeSelfTest = 9, - kDiskRead = 10, - kPrimeSearch = 11, - kBatteryDischarge = 12, + kSmartctlCheck = 2, + kAcPower = 3, + kCpuCache = 4, + kCpuStress = 5, + kFloatingPointAccuracy = 6, + kNvmeWearLevel = 7, + kNvmeSelfTest = 8, + kDiskRead = 9, + kPrimeSearch = 10, + kBatteryDischarge = 11, }; // Enumeration of each of the possible statuses for a diagnostics routine.
diff --git a/chromeos/components/telemetry_extension_ui/resources/trusted.js b/chromeos/components/telemetry_extension_ui/resources/trusted.js index 85e996f..239e26e 100644 --- a/chromeos/components/telemetry_extension_ui/resources/trusted.js +++ b/chromeos/components/telemetry_extension_ui/resources/trusted.js
@@ -52,7 +52,6 @@ this.enumToRoutineName_ = new Map([ [routineEnum.kBatteryCapacity, 'battery-capacity'], [routineEnum.kBatteryHealth, 'battery-health'], - [routineEnum.kUrandom, 'urandom'], [routineEnum.kSmartctlCheck, 'smartctl-check'], [routineEnum.kAcPower, 'ac-power'], [routineEnum.kCpuCache, 'cpu-cache'],
diff --git a/chromeos/components/telemetry_extension_ui/test/telemetry_extension_ui_browsertest.cc b/chromeos/components/telemetry_extension_ui/test/telemetry_extension_ui_browsertest.cc index b819ca572..c6e840ae 100644 --- a/chromeos/components/telemetry_extension_ui/test/telemetry_extension_ui_browsertest.cc +++ b/chromeos/components/telemetry_extension_ui/test/telemetry_extension_ui_browsertest.cc
@@ -69,7 +69,6 @@ std::vector<cros_diagnostics::DiagnosticRoutineEnum> input{ cros_diagnostics::DiagnosticRoutineEnum::kBatteryCapacity, cros_diagnostics::DiagnosticRoutineEnum::kBatteryHealth, - cros_diagnostics::DiagnosticRoutineEnum::kUrandom, cros_diagnostics::DiagnosticRoutineEnum::kSmartctlCheck, cros_diagnostics::DiagnosticRoutineEnum::kAcPower, cros_diagnostics::DiagnosticRoutineEnum::kCpuCache,
diff --git a/chromeos/components/telemetry_extension_ui/test/untrusted_browsertest.js b/chromeos/components/telemetry_extension_ui/test/untrusted_browsertest.js index 54ea1b4..fc90163 100644 --- a/chromeos/components/telemetry_extension_ui/test/untrusted_browsertest.js +++ b/chromeos/components/telemetry_extension_ui/test/untrusted_browsertest.js
@@ -73,7 +73,6 @@ assertDeepEquals(response, [ 'battery-capacity', 'battery-health', - 'urandom', 'smartctl-check', 'ac-power', 'cpu-cache',
diff --git a/chromeos/profiles/orderfile.newest.txt b/chromeos/profiles/orderfile.newest.txt index 9500187c..0ef32e8 100644 --- a/chromeos/profiles/orderfile.newest.txt +++ b/chromeos/profiles/orderfile.newest.txt
@@ -1 +1 @@ -chromeos-chrome-orderfile-field-86-4183.39-1595842708-benchmark-86.0.4208.0-r1.orderfile.xz +chromeos-chrome-orderfile-field-86-4240.11-1599471529-benchmark-86.0.4240.36-r1.orderfile.xz
diff --git a/chromeos/resources/BUILD.gn b/chromeos/resources/BUILD.gn index ea4e295..8226d82 100644 --- a/chromeos/resources/BUILD.gn +++ b/chromeos/resources/BUILD.gn
@@ -66,29 +66,6 @@ ] } -# Resources used by chrome://file-manager -grit("file_manager_resources") { - source = "../components/file_manager/resources/file_manager_resources.grd" - - outputs = [ - "grit/chromeos_file_manager_resources.h", - "grit/chromeos_file_manager_resources_map.cc", - "grit/chromeos_file_manager_resources_map.h", - "chromeos_file_manager_resources.pak", - ] - output_dir = "$root_gen_dir/chromeos" - - grit_flags = [ - "-E", - "root_gen_dir=" + rebase_path(root_gen_dir, root_build_dir), - ] - - deps = [ - "//chromeos/components/file_manager:file_manager_mojom_js", - "//mojo/public/js:bindings_lite", - ] -} - # Resources used by chrome://help-app, and parts of the sandboxed app it hosts # that do not come from the app bundle (below). grit("help_app_resources") {
diff --git a/components/autofill/core/browser/data_model/autofill_structured_address.cc b/components/autofill/core/browser/data_model/autofill_structured_address.cc index a0b49d1..0eafddf 100644 --- a/components/autofill/core/browser/data_model/autofill_structured_address.cc +++ b/components/autofill/core/browser/data_model/autofill_structured_address.cc
@@ -105,11 +105,125 @@ "${ADDRESS_HOME_FLOOR;FL } ${ADDRESS_HOME_APT_NUM;APT }"); } +void StreetAddress::UnsetValue() { + AddressComponent::UnsetValue(); + address_lines_.clear(); +} + +void StreetAddress::SetValue(base::string16 value, VerificationStatus status) { + AddressComponent::SetValue(value, status); + CalculateAddressLines(); +} + +void StreetAddress::CalculateAddressLines() { + // Recalculate |address_lines_| after changing the street address. + address_lines_ = + base::SplitString(GetValue(), base::ASCIIToUTF16("\n"), + base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); + + // If splitting of the address line results in more than 3 entries, join the + // additional entries into the third line. + if (address_lines_.size() > 3) { + address_lines_[2] = + base::JoinString(std::vector<base::string16>(address_lines_.begin() + 2, + address_lines_.end()), + base::ASCIIToUTF16(" ")); + // Drop the addition address lines. + while (address_lines_.size() > 3) + address_lines_.pop_back(); + } +} + +bool StreetAddress::IsValueValid() const { + return !base::Contains(address_lines_, base::string16()); +} + +bool StreetAddress::ConvertAndGetTheValueForAdditionalFieldTypeName( + const std::string& type_name, + base::string16* value) const { + if (type_name == AutofillType(ADDRESS_HOME_LINE1).ToString()) { + if (value) { + *value = + address_lines_.size() > 0 ? address_lines_.at(0) : base::string16(); + } + return true; + } + if (type_name == AutofillType(ADDRESS_HOME_LINE2).ToString()) { + if (value) { + *value = + address_lines_.size() > 1 ? address_lines_.at(1) : base::string16(); + } + return true; + } + if (type_name == AutofillType(ADDRESS_HOME_LINE3).ToString()) { + if (value) { + *value = + address_lines_.size() > 2 ? address_lines_.at(2) : base::string16(); + } + return true; + } + + return false; +} + +// Implements support for setting the value of the individual address lines. +bool StreetAddress::ConvertAndSetValueForAdditionalFieldTypeName( + const std::string& type_name, + const base::string16& value, + const VerificationStatus& status) { + size_t index = 0; + if (type_name == AutofillType(ADDRESS_HOME_LINE1).ToString()) { + index = 0; + } else if (type_name == AutofillType(ADDRESS_HOME_LINE2).ToString()) { + index = 1; + } else if (type_name == AutofillType(ADDRESS_HOME_LINE3).ToString()) { + index = 2; + } else { + return false; + } + + // Make sure that there are three address lines stored. + if (index >= address_lines_.size()) + address_lines_.resize(index + 1, base::string16()); + + bool change = address_lines_[index] != value; + if (change) + address_lines_[index] = value; + + while (!address_lines_.empty() && address_lines_.back().empty()) + address_lines_.pop_back(); + + // By calling the base class implementation, the recreation of the address + // lines from the street address is omitted. + if (change) { + AddressComponent::SetValue( + base::JoinString(address_lines_, base::ASCIIToUTF16("\n")), status); + } + + return true; +} + +void StreetAddress::PostAssignSanitization() { + CalculateAddressLines(); +} + +void StreetAddress::GetAdditionalSupportedFieldTypes( + ServerFieldTypeSet* supported_types) const { + supported_types->insert(ADDRESS_HOME_LINE1); + supported_types->insert(ADDRESS_HOME_LINE2); + supported_types->insert(ADDRESS_HOME_LINE3); +} + CountryCode::CountryCode(AddressComponent* parent) : AddressComponent(ADDRESS_HOME_COUNTRY, parent) {} CountryCode::~CountryCode() = default; +DependentLocality::DependentLocality(AddressComponent* parent) + : AddressComponent(ADDRESS_HOME_DEPENDENT_LOCALITY, parent) {} + +DependentLocality::~DependentLocality() = default; + City::City(AddressComponent* parent) : AddressComponent(ADDRESS_HOME_CITY, parent) {} @@ -125,16 +239,36 @@ PostalCode::~PostalCode() = default; +SortingCode::SortingCode(AddressComponent* parent) + : AddressComponent(ADDRESS_HOME_SORTING_CODE, parent) {} + +SortingCode::~SortingCode() = default; + Address::Address() : Address{nullptr} {} +Address::Address(const Address& other) : Address() { + *this = other; +} + Address::Address(AddressComponent* parent) : AddressComponent( ADDRESS_HOME_ADDRESS, parent, - {&street_address_, &postal_code_, &city_, &state_, &country_code_}) {} + {&street_address_, &postal_code_, &sorting_code_, + &dependent_locality_, &city_, &state_, &country_code_}) {} Address::~Address() = default; +void Address::MigrateLegacyStructure(bool is_verified_profile) { + VerificationStatus status = is_verified_profile + ? VerificationStatus::kUserVerified + : VerificationStatus::kObserved; + if (GetVerificationStatus() == VerificationStatus::kNoStatus && + !GetValue().empty()) { + SetValue(GetValue(), status); + } +} + } // namespace structured_address } // namespace autofill
diff --git a/components/autofill/core/browser/data_model/autofill_structured_address.h b/components/autofill/core/browser/data_model/autofill_structured_address.h index a76ad66..3a0bbda3 100644 --- a/components/autofill/core/browser/data_model/autofill_structured_address.h +++ b/components/autofill/core/browser/data_model/autofill_structured_address.h
@@ -88,6 +88,13 @@ explicit StreetAddress(AddressComponent* parent); ~StreetAddress() override; + void GetAdditionalSupportedFieldTypes( + ServerFieldTypeSet* supported_types) const override; + + void SetValue(base::string16 value, VerificationStatus status) override; + + void UnsetValue() override; + protected: std::vector<const re2::RE2*> GetParseRegularExpressionsByRelevance() const override; @@ -95,11 +102,36 @@ // Returns the format string to create the full name from its subcomponents. base::string16 GetBestFormatString() const override; + // Recalculates the address line after an assignment. + void PostAssignSanitization() override; + + protected: + // Implements support for getting the value of the individual address lines. + bool ConvertAndGetTheValueForAdditionalFieldTypeName( + const std::string& type_name, + base::string16* value) const override; + + // Implements support for setting the value of the individual address lines. + bool ConvertAndSetValueForAdditionalFieldTypeName( + const std::string& type_name, + const base::string16& value, + const VerificationStatus& status) override; + + // Returns true of the address lines do not contain an empty line. + bool IsValueValid() const override; + private: + // Calculates the address line from the street address. + void CalculateAddressLines(); + StreetAndDependentStreetName streets_{this}; HouseNumber number_{this}; Premise premise_{this}; SubPremise sub_premise_{this}; + + // Holds the values of the individual address lines. + // Must be recalculated if the value of the component changes. + std::vector<base::string16> address_lines_; }; // Stores the country code of an address profile. @@ -110,6 +142,13 @@ }; // Stores the city of an address. +class DependentLocality : public AddressComponent { + public: + explicit DependentLocality(AddressComponent* parent); + ~DependentLocality() override; +}; + +// Stores the city of an address. class City : public AddressComponent { public: explicit City(AddressComponent* parent); @@ -130,17 +169,31 @@ ~PostalCode() override; }; +// Stores the sorting code. +class SortingCode : public AddressComponent { + public: + explicit SortingCode(AddressComponent* parent); + ~SortingCode() override; +}; + // Stores the overall Address that contains the StreetAddress, the PostalCode // the City, the State and the CountryCode. class Address : public AddressComponent { public: Address(); + Address(const Address& other); explicit Address(AddressComponent* parent); ~Address() override; + // Migrates from a legacy structure in which name tokens are imported without + // a status. + void MigrateLegacyStructure(bool is_verified_profile); + private: StreetAddress street_address_{this}; PostalCode postal_code_{this}; + SortingCode sorting_code_{this}; + DependentLocality dependent_locality_{this}; City city_{this}; State state_{this}; CountryCode country_code_{this};
diff --git a/components/autofill/core/browser/data_model/autofill_structured_address_component.cc b/components/autofill/core/browser/data_model/autofill_structured_address_component.cc index 807e9e86..3308eab 100644 --- a/components/autofill/core/browser/data_model/autofill_structured_address_component.cc +++ b/components/autofill/core/browser/data_model/autofill_structured_address_component.cc
@@ -5,7 +5,6 @@ #include "components/autofill/core/browser/data_model/autofill_structured_address_component.h" #include <algorithm> -#include <iostream> #include <map> #include <string> #include <utility> @@ -70,6 +69,8 @@ for (size_t i = 0; i < right.subcomponents_.size(); i++) *subcomponents_[i] = *right.subcomponents_[i]; + PostAssignSanitization(); + return *this; } @@ -80,9 +81,10 @@ if (GetStorageType() != right.GetStorageType()) return false; - if (value_ != right.value_ || - value_verification_status_ != right.value_verification_status_) + if (GetValue() != right.GetValue() || + value_verification_status_ != right.value_verification_status_) { return false; + } DCHECK(right.subcomponents_.size() == subcomponents_.size()); for (size_t i = 0; i < right.subcomponents_.size(); i++) @@ -99,6 +101,43 @@ return subcomponents_.empty(); } +bool AddressComponent::IsValueValid() const { + return true; +} + +bool AddressComponent::IsValueForTypeValid(const std::string& field_type_name, + bool wipe_if_not) { + bool validity_status; + if (GetIsValueForTypeValidIfPossible(field_type_name, &validity_status, + wipe_if_not)) + return validity_status; + return false; +} + +bool AddressComponent::IsValueForTypeValid(ServerFieldType field_type, + bool wipe_if_not) { + return IsValueForTypeValid(AutofillType(field_type).ToString(), wipe_if_not); +} + +bool AddressComponent::GetIsValueForTypeValidIfPossible( + const std::string& field_type_name, + bool* validity_status, + bool wipe_if_not) { + if (field_type_name == GetStorageTypeName()) { + *validity_status = IsValueValid(); + if (!(*validity_status) && wipe_if_not) + UnsetValue(); + return true; + } + + for (auto* subcomponent : subcomponents_) { + if (subcomponent->GetIsValueForTypeValidIfPossible( + field_type_name, validity_status, wipe_if_not)) + return true; + } + return false; +} + VerificationStatus AddressComponent::GetVerificationStatus() const { return value_verification_status_; } @@ -189,6 +228,17 @@ } bool AddressComponent::SetValueForTypeIfPossible( + const ServerFieldType& type, + const std::string& value, + const VerificationStatus& verification_status, + bool invalidate_child_nodes, + bool invalidate_parent_nodes) { + return SetValueForTypeIfPossible(type, base::UTF8ToUTF16(value), + verification_status, invalidate_child_nodes, + invalidate_parent_nodes); +} + +bool AddressComponent::SetValueForTypeIfPossible( const std::string& type_name, const base::string16& value, const VerificationStatus& verification_status, @@ -226,6 +276,17 @@ return false; } +bool AddressComponent::SetValueForTypeIfPossible( + const std::string& type_name, + const std::string& value, + const VerificationStatus& verification_status, + bool invalidate_child_nodes, + bool invalidate_parent_nodes) { + return SetValueForTypeIfPossible(type_name, base::UTF8ToUTF16(value), + verification_status, invalidate_child_nodes, + invalidate_parent_nodes); +} + void AddressComponent::UnsetAddressComponentAndItsSubcomponents() { UnsetValue(); UnsetSubcomponents(); @@ -283,8 +344,8 @@ base::string16 value; bool success = GetValueAndStatusForTypeIfPossible(type_name, &value, nullptr); // TODO(crbug.com/1113617): Honorifics are temporally disabled. - DCHECK(success || - type_name == AutofillType(NAME_HONORIFIC_PREFIX).ToString()); + DCHECK(success || type_name == AutofillType(NAME_HONORIFIC_PREFIX).ToString()) + << type_name; return value; }
diff --git a/components/autofill/core/browser/data_model/autofill_structured_address_component.h b/components/autofill/core/browser/data_model/autofill_structured_address_component.h index 98e1c63..3e8e839e 100644 --- a/components/autofill/core/browser/data_model/autofill_structured_address_component.h +++ b/components/autofill/core/browser/data_model/autofill_structured_address_component.h
@@ -129,11 +129,11 @@ bool IsValueAssigned() const; // Sets the value corresponding to the storage type of this AddressComponent. - void SetValue(base::string16 value, VerificationStatus status); + virtual void SetValue(base::string16 value, VerificationStatus status); // Sets the value to an empty string, marks it unassigned and sets the // verification status to |kNoStatus|. - void UnsetValue(); + virtual void UnsetValue(); // The method sets the value of the current node if its |storage_type_| is // |type| or if |ConvertAndGetTheValueForAdditionalFieldTypeName()| supports @@ -158,6 +158,20 @@ bool invalidate_child_nodes = false, bool invalidate_parent_nodes = false); + // Convenience wrapper to allow setting the value using a std::string. + bool SetValueForTypeIfPossible(const ServerFieldType& type, + const std::string& value, + const VerificationStatus& verification_status, + bool invalidate_child_nodes = false, + bool invalidate_parent_nodes = false); + + // Convenience wrapper to allow setting the value using a std::string. + bool SetValueForTypeIfPossible(const std::string& type_name, + const std::string& value, + const VerificationStatus& verification_status, + bool invalidate_child_nodes = false, + bool invalidate_parent_nodes = false); + // Convenience method to get the value of |type|. // Returns an empty string if |type| is not supported. base::string16 GetValueForType(const ServerFieldType& type) const; @@ -222,7 +236,7 @@ // Completes the full tree by calling |RecursivelyCompleteTree()| starting // form the root node. Returns true if the completion was successful. - bool CompleteFullTree(); + virtual bool CompleteFullTree(); // Checks if a tree is completable in the sense that there are no conflicting // observed or verified types. This means that there is not more than one @@ -279,6 +293,23 @@ // Recursively unsets all subcomponents. void RecursivelyUnsetSubcomponents(); + // Return if the value associated with |field_type_name| is valid. + // If |wipe_if_not|, the value is unset if invalid. + bool IsValueForTypeValid(const std::string& field_type_name, + bool wipe_if_not = false); + + // Convenience wrapper to work the ServerFieldTypes. + bool IsValueForTypeValid(ServerFieldType field_type, + bool wipe_if_not = false); + + // Recursively determines the validity status of a component value associated + // with |field_type_name|. If |wipe_if_not|, the value is unset if invalid. + // Returns true if it is possible to determine the validity status of the + // value in this subcomponent. + bool GetIsValueForTypeValidIfPossible(const std::string& field_type_name, + bool* validity_status, + bool wipe_if_not = false); + #ifdef UNIT_TEST // Initiates the formatting of the values from the subcomponents. void FormatValueFromSubcomponentsForTesting() { @@ -379,6 +410,13 @@ // Returns a reference to the root node of the tree. const AddressComponent& GetRootNode() const; + // Function to determine if the value stored in this component is valid. + // Return true be default but can be overloaded by a subclass. + virtual bool IsValueValid() const; + + // Function to be called post assign to do sanitization. + virtual void PostAssignSanitization() {} + private: // Unsets the node and all of its children. void UnsetAddressComponentAndItsSubcomponents();
diff --git a/components/autofill/core/browser/data_model/autofill_structured_address_name.h b/components/autofill/core/browser/data_model/autofill_structured_address_name.h index 46e8104..67dd210a 100644 --- a/components/autofill/core/browser/data_model/autofill_structured_address_name.h +++ b/components/autofill/core/browser/data_model/autofill_structured_address_name.h
@@ -43,7 +43,7 @@ ServerFieldTypeSet* supported_types) const override; protected: - // Implements support for getting for a value for the |MIDDLE_NAME_INITIAL| + // Implements support for getting the value for the |MIDDLE_NAME_INITIAL| // type. bool ConvertAndGetTheValueForAdditionalFieldTypeName( const std::string& type_name,
diff --git a/components/autofill/core/browser/data_model/autofill_structured_address_unittest.cc b/components/autofill/core/browser/data_model/autofill_structured_address_unittest.cc index a8bb69cb..9592d35b 100644 --- a/components/autofill/core/browser/data_model/autofill_structured_address_unittest.cc +++ b/components/autofill/core/browser/data_model/autofill_structured_address_unittest.cc
@@ -207,6 +207,114 @@ TestAddressLineFormatting(test_case); } +// Test setting the first address line. +TEST(AutofillStructuredAddress, TestSettingsAddressLine1) { + Address address; + AddressComponentTestValues test_values = { + {.type = ADDRESS_HOME_LINE1, + .value = "line1", + .status = VerificationStatus::kObserved}}; + + SetTestValues(&address, test_values); + + AddressComponentTestValues expectation = { + {.type = ADDRESS_HOME_LINE1, + .value = "line1", + .status = VerificationStatus::kObserved}, + {.type = ADDRESS_HOME_STREET_ADDRESS, + .value = "line1", + .status = VerificationStatus::kObserved}}; + + VerifyTestValues(&address, expectation); +} + +// Test settings all three address lines. +TEST(AutofillStructuredAddress, TestSettingsAddressLines) { + Address address; + AddressComponentTestValues test_values = { + {.type = ADDRESS_HOME_LINE1, + .value = "line1", + .status = VerificationStatus::kObserved}, + {.type = ADDRESS_HOME_LINE2, + .value = "line2", + .status = VerificationStatus::kObserved}, + {.type = ADDRESS_HOME_LINE3, + .value = "line3", + .status = VerificationStatus::kObserved}}; + + SetTestValues(&address, test_values); + + AddressComponentTestValues expectation = { + {.type = ADDRESS_HOME_LINE1, + .value = "line1", + .status = VerificationStatus::kObserved}, + {.type = ADDRESS_HOME_LINE2, + .value = "line2", + .status = VerificationStatus::kObserved}, + {.type = ADDRESS_HOME_LINE3, + .value = "line3", + .status = VerificationStatus::kObserved}, + {.type = ADDRESS_HOME_STREET_ADDRESS, + .value = "line1\nline2\nline3", + .status = VerificationStatus::kObserved}}; + + VerifyTestValues(&address, expectation); +} + +// Test setting the home street address and retrieving the address lines. +TEST(AutofillStructuredAddress, TestGettingAddressLines) { + Address address; + AddressComponentTestValues test_values = { + {.type = ADDRESS_HOME_STREET_ADDRESS, + .value = "line1\nline2\nline3", + .status = VerificationStatus::kObserved}}; + + SetTestValues(&address, test_values); + + AddressComponentTestValues expectation = { + {.type = ADDRESS_HOME_LINE1, + .value = "line1", + .status = VerificationStatus::kObserved}, + {.type = ADDRESS_HOME_LINE2, + .value = "line2", + .status = VerificationStatus::kObserved}, + {.type = ADDRESS_HOME_LINE3, + .value = "line3", + .status = VerificationStatus::kObserved}, + {.type = ADDRESS_HOME_STREET_ADDRESS, + .value = "line1\nline2\nline3", + .status = VerificationStatus::kObserved}}; + + VerifyTestValues(&address, expectation); +} + +// Test setting the home street address and retrieving the address lines. +TEST(AutofillStructuredAddress, TestGettingAddressLines_JoinedAdditionalLines) { + Address address; + AddressComponentTestValues test_values = { + {.type = ADDRESS_HOME_STREET_ADDRESS, + .value = "line1\nline2\nline3\nline4", + .status = VerificationStatus::kObserved}}; + + SetTestValues(&address, test_values); + + AddressComponentTestValues expectation = { + {.type = ADDRESS_HOME_LINE1, + .value = "line1", + .status = VerificationStatus::kObserved}, + {.type = ADDRESS_HOME_LINE2, + .value = "line2", + .status = VerificationStatus::kObserved}, + {.type = ADDRESS_HOME_LINE3, + .value = "line3 line4", + .status = VerificationStatus::kObserved}, + {.type = ADDRESS_HOME_STREET_ADDRESS, + .value = "line1\nline2\nline3\nline4", + .status = VerificationStatus::kObserved}}; + + VerifyTestValues(&address, expectation); +} + } // namespace } // namespace structured_address } // namespace autofill
diff --git a/components/autofill/core/browser/data_model/autofill_structured_address_utils.cc b/components/autofill/core/browser/data_model/autofill_structured_address_utils.cc index 04fee0b..36f0af7c 100644 --- a/components/autofill/core/browser/data_model/autofill_structured_address_utils.cc +++ b/components/autofill/core/browser/data_model/autofill_structured_address_utils.cc
@@ -41,6 +41,11 @@ features::kAutofillEnableSupportForMoreStructureInNames); } +bool StructuredAddressesEnabled() { + return base::FeatureList::IsEnabled( + features::kAutofillEnableSupportForMoreStructureInAddresses); +} + Re2RegExCache::Re2RegExCache() = default; // static
diff --git a/components/autofill/core/browser/data_model/autofill_structured_address_utils.h b/components/autofill/core/browser/data_model/autofill_structured_address_utils.h index 0afdc5e..356f707 100644 --- a/components/autofill/core/browser/data_model/autofill_structured_address_utils.h +++ b/components/autofill/core/browser/data_model/autofill_structured_address_utils.h
@@ -93,6 +93,9 @@ // Returns true if the structured names feature is enabled. bool StructuredNamesEnabled(); +// Returns true if the structured address feature is enabled. +bool StructuredAddressesEnabled(); + // A cache for compiled RE2 regular expressions. class Re2RegExCache { public:
diff --git a/components/autofill/core/common/autofill_features.cc b/components/autofill/core/common/autofill_features.cc index 55747282..80c557d 100644 --- a/components/autofill/core/common/autofill_features.cc +++ b/components/autofill/core/common/autofill_features.cc
@@ -97,6 +97,12 @@ "AutofillEnableSupportForMoreStructureInNames", base::FEATURE_DISABLED_BY_DEFAULT}; +// Controls if Autofill supports new structure in addresses. +// TODO(crbug.com/1098943): Remove once launched. +const base::Feature kAutofillEnableSupportForMoreStructureInAddresses{ + "AutofillEnableSupportForMoreStructureInAddresses", + base::FEATURE_DISABLED_BY_DEFAULT}; + // Controls if Autofill supports merging subset names. // TODO(crbug.com/1098943): Remove once launched. const base::Feature kAutofillEnableSupportForMergingSubsetNames{
diff --git a/components/autofill/core/common/autofill_features.h b/components/autofill/core/common/autofill_features.h index adcfb2e..9e03b42 100644 --- a/components/autofill/core/common/autofill_features.h +++ b/components/autofill/core/common/autofill_features.h
@@ -35,6 +35,7 @@ extern const base::Feature kAutofillEnableCompanyName; extern const base::Feature kAutofillEnableHideSuggestionsUI; extern const base::Feature kAutofillEnableSupportForMoreStructureInNames; +extern const base::Feature kAutofillEnableSupportForMoreStructureInAddresses; extern const base::Feature kAutofillEnableSupportForMergingSubsetNames; extern const base::Feature kAutofillEnableSupportForHouseNumbers; extern const base::Feature kAutofillEnforceMinRequiredFieldsForHeuristics;
diff --git a/components/download/internal/common/download_item_impl.cc b/components/download/internal/common/download_item_impl.cc index 8a474c4..dfe701e 100644 --- a/components/download/internal/common/download_item_impl.cc +++ b/components/download/internal/common/download_item_impl.cc
@@ -1313,24 +1313,10 @@ // a full request rather than a partial. Full restarts clobber validators. if (etag_ != new_create_info.etag || last_modified_time_ != new_create_info.last_modified) { - if (destination_info_.received_bytes > 0) { - RecordResumptionRestartCount( - ResumptionRestartCountTypes::kStrongValidatorChangesCount); - } received_slices_.clear(); destination_info_.received_bytes = 0; } - if (destination_info_.received_bytes > 0 && new_create_info.offset == 0) { - if (!base::FeatureList::IsEnabled( - features::kAllowDownloadResumptionWithoutStrongValidators) || - GetDownloadValidationLengthConfig() > - destination_info_.received_bytes) { - RecordResumptionRestartCount( - ResumptionRestartCountTypes::kRequestedByServerCount); - } - } - request_info_.url_chain.insert(request_info_.url_chain.end(), chain_iter, new_create_info.url_chain.end()); etag_ = new_create_info.etag; @@ -2521,10 +2507,6 @@ LOG_IF(ERROR, !GetFullPath().empty()) << "Download full path should be empty before resumption"; if (destination_info_.received_bytes > 0) { - if (!HasStrongValidators()) { - RecordResumptionRestartCount( - ResumptionRestartCountTypes::kMissingStrongValidatorsCount); - } RecordResumptionRestartReason(last_reason_); } destination_info_.received_bytes = 0;
diff --git a/components/download/internal/common/download_stats.cc b/components/download/internal/common/download_stats.cc index 9ee6aa4..338fc89 100644 --- a/components/download/internal/common/download_stats.cc +++ b/components/download/internal/common/download_stats.cc
@@ -762,10 +762,6 @@ base::UmaHistogramSparse("Download.ResumptionRestart.Reason", reason); } -void RecordResumptionRestartCount(ResumptionRestartCountTypes type) { - base::UmaHistogramEnumeration("Download.ResumptionRestart.Counts", type); -} - void RecordDownloadManagerCreationTimeSinceStartup( base::TimeDelta elapsed_time) { base::UmaHistogramLongTimes("Download.DownloadManager.CreationDelay",
diff --git a/components/download/public/common/download_stats.h b/components/download/public/common/download_stats.h index ca99bb1..3c7f34ef 100644 --- a/components/download/public/common/download_stats.h +++ b/components/download/public/common/download_stats.h
@@ -218,21 +218,6 @@ COUNT, }; -// Reason for download to restart during resumption. These enum values are -// persisted to logs, and should therefore never be renumbered nor removed. -enum class ResumptionRestartCountTypes { - // The download is restarted due to server response. - kRequestedByServerCount = 0, - - // Strong validator changes. - kStrongValidatorChangesCount = 1, - - // No strong validators are present. - kMissingStrongValidatorsCount = 2, - - kMaxValue = kMissingStrongValidatorsCount -}; - // Events for user scheduled downloads. Used in histograms, don't reuse or // remove items. Keep in sync with DownloadLaterEvent in enums.xml. enum class DownloadLaterEvent { @@ -445,9 +430,6 @@ COMPONENTS_DOWNLOAD_EXPORT void RecordResumptionStrongValidators( DownloadInterruptReason reason); -COMPONENTS_DOWNLOAD_EXPORT void RecordResumptionRestartCount( - ResumptionRestartCountTypes type); - COMPONENTS_DOWNLOAD_EXPORT void RecordDownloadManagerCreationTimeSinceStartup( base::TimeDelta elapsed_time);
diff --git a/components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement/EventConstants.java b/components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement/EventConstants.java index 5fe8d5e..f2ec94b 100644 --- a/components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement/EventConstants.java +++ b/components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement/EventConstants.java
@@ -175,6 +175,15 @@ public static final String NTP_SHOWN = "ntp_shown"; public static final String NTP_HOME_BUTTON_CLICKED = "ntp_homebutton_clicked"; + /** Video tutorial related events. */ + public static final String VIDEO_TUTORIAL_DISMISSED_DOWNLOAD = + "video_tutorial_iph_dismissed_download"; + public static final String VIDEO_TUTORIAL_DISMISSED_SEARCH = + "video_tutorial_iph_dismissed_search"; + public static final String VIDEO_TUTORIAL_CLICKED_DOWNLOAD = + "video_tutorial_iph_clicked_download"; + public static final String VIDEO_TUTORIAL_CLICKED_SEARCH = "video_tutorial_iph_clicked_search"; + /** Reengagement events. */ public static final String STARTED_FROM_MAIN_INTENT = "started_from_main_intent";
diff --git a/components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement/FeatureConstants.java b/components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement/FeatureConstants.java index fcdd730..ae3d074 100644 --- a/components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement/FeatureConstants.java +++ b/components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement/FeatureConstants.java
@@ -132,6 +132,16 @@ String TAB_GROUPS_DRAG_AND_DROP_FEATURE = "IPH_TabGroupsDragAndDrop"; /** + * An IPH feature to show a video tutorial card to educate about downloading in chrome. + */ + String VIDEO_TUTORIAL_DOWNLOAD_FEATURE = "IPH_VideoTutorial_Download"; + + /** + * An IPH feature to show a video tutorial card to educate about how to search in chrome. + */ + String VIDEO_TUTORIAL_SEARCH_FEATURE = "IPH_VideoTutorial_Search"; + + /** * An IPH feature to show on a card menu on the FeedNewTabPage. */ String FEED_CARD_MENU_FEATURE = "IPH_FeedCardMenu";
diff --git a/components/feature_engagement/public/feature_constants.cc b/components/feature_engagement/public/feature_constants.cc index e5caa338..23c0e65 100644 --- a/components/feature_engagement/public/feature_constants.cc +++ b/components/feature_engagement/public/feature_constants.cc
@@ -93,6 +93,10 @@ "IPH_TabGroupsDragAndDrop", base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kIPHTranslateMenuButtonFeature{ "IPH_TranslateMenuButton", base::FEATURE_ENABLED_BY_DEFAULT}; +const base::Feature kIPHVideoTutorialDownloadFeature{ + "IPH_VideoTutorial_Download", base::FEATURE_ENABLED_BY_DEFAULT}; +const base::Feature kIPHVideoTutorialSearchFeature{ + "IPH_VideoTutorial_Search", base::FEATURE_ENABLED_BY_DEFAULT}; const base::Feature kIPHExploreSitesTileFeature{ "IPH_ExploreSitesTile", base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kIPHFeedHeaderMenuFeature{
diff --git a/components/feature_engagement/public/feature_constants.h b/components/feature_engagement/public/feature_constants.h index 5cf41a3..aa0867ca 100644 --- a/components/feature_engagement/public/feature_constants.h +++ b/components/feature_engagement/public/feature_constants.h
@@ -65,6 +65,8 @@ extern const base::Feature kIPHTabGroupsYourTabsAreTogetherFeature; extern const base::Feature kIPHTabGroupsDragAndDropFeature; extern const base::Feature kIPHTranslateMenuButtonFeature; +extern const base::Feature kIPHVideoTutorialDownloadFeature; +extern const base::Feature kIPHVideoTutorialSearchFeature; extern const base::Feature kIPHExploreSitesTileFeature; extern const base::Feature kIPHFeedHeaderMenuFeature; extern const base::Feature kIPHChromeReengagementNotification1Feature;
diff --git a/components/feature_engagement/public/feature_list.cc b/components/feature_engagement/public/feature_list.cc index 00ee0c0..11b0dbc8 100644 --- a/components/feature_engagement/public/feature_list.cc +++ b/components/feature_engagement/public/feature_list.cc
@@ -50,6 +50,8 @@ &kIPHTabGroupsYourTabsAreTogetherFeature, &kIPHTabGroupsDragAndDropFeature, &kIPHTranslateMenuButtonFeature, + &kIPHVideoTutorialDownloadFeature, + &kIPHVideoTutorialSearchFeature, &kIPHExploreSitesTileFeature, &kIPHFeedHeaderMenuFeature, #endif // defined(OS_ANDROID)
diff --git a/components/feature_engagement/public/feature_list.h b/components/feature_engagement/public/feature_list.h index c935dba1..ce8e56e 100644 --- a/components/feature_engagement/public/feature_list.h +++ b/components/feature_engagement/public/feature_list.h
@@ -103,6 +103,10 @@ "IPH_TabGroupsDragAndDrop"); DEFINE_VARIATION_PARAM(kIPHTranslateMenuButtonFeature, "IPH_TranslateMenuButton"); +DEFINE_VARIATION_PARAM(kIPHVideoTutorialDownloadFeature, + "IPH_VideoTutorial_Download"); +DEFINE_VARIATION_PARAM(kIPHVideoTutorialSearchFeature, + "IPH_VideoTutorial_Search"); DEFINE_VARIATION_PARAM(kIPHExploreSitesTileFeature, "IPH_ExploreSitesTile"); DEFINE_VARIATION_PARAM(kIPHFeedHeaderMenuFeature, "IPH_FeedHeaderMenu"); #endif // defined(OS_ANDROID) @@ -174,6 +178,8 @@ VARIATION_ENTRY(kIPHTabGroupsYourTabsAreTogetherFeature), VARIATION_ENTRY(kIPHTabGroupsDragAndDropFeature), VARIATION_ENTRY(kIPHTranslateMenuButtonFeature), + VARIATION_ENTRY(kIPHVideoTutorialDownloadFeature), + VARIATION_ENTRY(kIPHVideoTutorialSearchFeature), VARIATION_ENTRY(kIPHExploreSitesTileFeature), VARIATION_ENTRY(kIPHFeedHeaderMenuFeature), #elif defined(OS_IOS)
diff --git a/components/password_manager/core/browser/BUILD.gn b/components/password_manager/core/browser/BUILD.gn index 8d347a9..2fcf0262 100644 --- a/components/password_manager/core/browser/BUILD.gn +++ b/components/password_manager/core/browser/BUILD.gn
@@ -51,7 +51,6 @@ "android_affiliation/facet_manager_host.h", "android_affiliation/lookup_affiliation_response_parser.cc", "android_affiliation/lookup_affiliation_response_parser.h", - "android_affiliation/test_affiliation_fetcher_factory.h", "biometric_authenticator.h", "browser_save_password_progress_logger.cc", "browser_save_password_progress_logger.h", @@ -205,6 +204,9 @@ "psl_matching_helper.cc", "psl_matching_helper.h", "reauth_purpose.h", + "site_affiliation/affiliation_fetcher_factory.h", + "site_affiliation/affiliation_fetcher_factory_impl.cc", + "site_affiliation/affiliation_fetcher_factory_impl.h", "site_affiliation/affiliation_service.h", "site_affiliation/affiliation_service_impl.cc", "site_affiliation/affiliation_service_impl.h",
diff --git a/components/password_manager/core/browser/android_affiliation/affiliation_fetcher.cc b/components/password_manager/core/browser/android_affiliation/affiliation_fetcher.cc index fb28a527..fef27285 100644 --- a/components/password_manager/core/browser/android_affiliation/affiliation_fetcher.cc +++ b/components/password_manager/core/browser/android_affiliation/affiliation_fetcher.cc
@@ -17,7 +17,7 @@ #include "components/password_manager/core/browser/android_affiliation/affiliation_api.pb.h" #include "components/password_manager/core/browser/android_affiliation/affiliation_utils.h" #include "components/password_manager/core/browser/android_affiliation/lookup_affiliation_response_parser.h" -#include "components/password_manager/core/browser/android_affiliation/test_affiliation_fetcher_factory.h" +#include "components/password_manager/core/browser/site_affiliation/affiliation_fetcher_factory.h" #include "google_apis/google_api_keys.h" #include "net/base/load_flags.h" #include "net/base/url_util.h" @@ -40,7 +40,7 @@ AFFILIATION_FETCH_RESULT_MAX }; -static TestAffiliationFetcherFactory* g_testing_factory = nullptr; +static AffiliationFetcherFactory* g_testing_factory = nullptr; AffiliationFetcher::AffiliationFetcher( scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, @@ -59,8 +59,8 @@ scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, AffiliationFetcherDelegate* delegate) { if (g_testing_factory) { - return base::WrapUnique(g_testing_factory->CreateInstance( - std::move(url_loader_factory), delegate)); + return g_testing_factory->CreateInstance(std::move(url_loader_factory), + delegate); } // Using `new` to access a non-public constructor. // (https://abseil.io/tips/134#recommendations) @@ -70,7 +70,7 @@ // static void AffiliationFetcher::SetFactoryForTesting( - TestAffiliationFetcherFactory* factory) { + AffiliationFetcherFactory* factory) { g_testing_factory = factory; }
diff --git a/components/password_manager/core/browser/android_affiliation/affiliation_fetcher.h b/components/password_manager/core/browser/android_affiliation/affiliation_fetcher.h index 56b4865..e317b48 100644 --- a/components/password_manager/core/browser/android_affiliation/affiliation_fetcher.h +++ b/components/password_manager/core/browser/android_affiliation/affiliation_fetcher.h
@@ -23,7 +23,7 @@ namespace password_manager { -class TestAffiliationFetcherFactory; +class AffiliationFetcherFactory; // Fetches authoritative information regarding which facets are affiliated with // each other, that is, which facets belong to the same logical application. @@ -35,6 +35,9 @@ // moved to a factory responsible for creating AffiliationFetcher instances. class AffiliationFetcher : public AffiliationFetcherInterface { public: + AffiliationFetcher( + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, + AffiliationFetcherDelegate* delegate); ~AffiliationFetcher() override; // Constructs a fetcher using the specified |url_loader_factory|, and will @@ -52,7 +55,7 @@ // // The caller must ensure that the |factory| outlives all potential Create() // calls. The caller may pass in NULL to resume using the default factory. - static void SetFactoryForTesting(TestAffiliationFetcherFactory* factory); + static void SetFactoryForTesting(AffiliationFetcherFactory* factory); // Actually starts the request to retrieve affiliations and optionally // groupings for each facet in |facet_uris| along with the details based on @@ -69,11 +72,6 @@ AffiliationFetcherDelegate* delegate() const; - protected: - AffiliationFetcher( - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, - AffiliationFetcherDelegate* delegate); - private: // Prepares and returns the serialized protocol buffer message that will be // the payload of the POST request. Sets mask request based on |request_info|.
diff --git a/components/password_manager/core/browser/android_affiliation/fake_affiliation_fetcher.cc b/components/password_manager/core/browser/android_affiliation/fake_affiliation_fetcher.cc index 73b5cc71..179861c 100644 --- a/components/password_manager/core/browser/android_affiliation/fake_affiliation_fetcher.cc +++ b/components/password_manager/core/browser/android_affiliation/fake_affiliation_fetcher.cc
@@ -47,12 +47,13 @@ return pending_fetchers_.front(); } -FakeAffiliationFetcher* ScopedFakeAffiliationFetcherFactory::CreateInstance( +std::unique_ptr<AffiliationFetcherInterface> +ScopedFakeAffiliationFetcherFactory::CreateInstance( scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, AffiliationFetcherDelegate* delegate) { - FakeAffiliationFetcher* fetcher = - new FakeAffiliationFetcher(std::move(url_loader_factory), delegate); - pending_fetchers_.push(fetcher); + auto fetcher = std::make_unique<FakeAffiliationFetcher>( + std::move(url_loader_factory), delegate); + pending_fetchers_.push(fetcher.get()); return fetcher; }
diff --git a/components/password_manager/core/browser/android_affiliation/fake_affiliation_fetcher.h b/components/password_manager/core/browser/android_affiliation/fake_affiliation_fetcher.h index 7d93c31..2571d11 100644 --- a/components/password_manager/core/browser/android_affiliation/fake_affiliation_fetcher.h +++ b/components/password_manager/core/browser/android_affiliation/fake_affiliation_fetcher.h
@@ -11,7 +11,7 @@ #include "base/macros.h" #include "components/password_manager/core/browser/android_affiliation/affiliation_fetcher.h" #include "components/password_manager/core/browser/android_affiliation/affiliation_fetcher_delegate.h" -#include "components/password_manager/core/browser/android_affiliation/test_affiliation_fetcher_factory.h" +#include "components/password_manager/core/browser/site_affiliation/affiliation_fetcher_factory.h" namespace password_manager { @@ -42,8 +42,7 @@ // While this factory is in scope, calls to AffiliationFetcher::Create() will // produce FakeAffiliationFetchers that can be used in tests to return fake API // responses to users of AffiliationFetcher. Nesting is not supported. -class ScopedFakeAffiliationFetcherFactory - : public TestAffiliationFetcherFactory { +class ScopedFakeAffiliationFetcherFactory : public AffiliationFetcherFactory { public: ScopedFakeAffiliationFetcherFactory(); ~ScopedFakeAffiliationFetcherFactory() override; @@ -65,7 +64,7 @@ bool has_pending_fetchers() const { return !pending_fetchers_.empty(); } // AffiliationFetcherFactory: - FakeAffiliationFetcher* CreateInstance( + std::unique_ptr<AffiliationFetcherInterface> CreateInstance( scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, AffiliationFetcherDelegate* delegate) override;
diff --git a/components/password_manager/core/browser/android_affiliation/test_affiliation_fetcher_factory.h b/components/password_manager/core/browser/android_affiliation/test_affiliation_fetcher_factory.h deleted file mode 100644 index 2bdd4d4..0000000 --- a/components/password_manager/core/browser/android_affiliation/test_affiliation_fetcher_factory.h +++ /dev/null
@@ -1,43 +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 COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_ANDROID_AFFILIATION_TEST_AFFILIATION_FETCHER_FACTORY_H_ -#define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_ANDROID_AFFILIATION_TEST_AFFILIATION_FETCHER_FACTORY_H_ - -#include "base/memory/scoped_refptr.h" - -namespace network { -class SharedURLLoaderFactory; -} // namespace network - -namespace password_manager { - -class AffiliationFetcherInterface; -class AffiliationFetcherDelegate; - -// Interface for a factory to be used by AffiliationFetcher::Create() in tests -// to construct instances of test-specific AffiliationFetcher subclasses. -// -// The factory is registered with AffiliationFetcher::SetFactoryForTesting(). -class TestAffiliationFetcherFactory { - public: - TestAffiliationFetcherFactory(const TestAffiliationFetcherFactory&) = delete; - TestAffiliationFetcherFactory& operator=( - const TestAffiliationFetcherFactory&) = delete; - - // Constructs a fetcher to retrieve affiliations for each facet in |facet_ids| - // using the specified |url_loader_factory|, and will provide the results - // to the |delegate| on the same thread that creates the instance. - virtual AffiliationFetcherInterface* CreateInstance( - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, - AffiliationFetcherDelegate* delegate) = 0; - - protected: - TestAffiliationFetcherFactory() = default; - virtual ~TestAffiliationFetcherFactory() = default; -}; - -} // namespace password_manager - -#endif // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_ANDROID_AFFILIATION_TEST_AFFILIATION_FETCHER_FACTORY_H_
diff --git a/components/password_manager/core/browser/site_affiliation/affiliation_fetcher_factory.h b/components/password_manager/core/browser/site_affiliation/affiliation_fetcher_factory.h new file mode 100644 index 0000000..1630b52e --- /dev/null +++ b/components/password_manager/core/browser/site_affiliation/affiliation_fetcher_factory.h
@@ -0,0 +1,44 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_SITE_AFFILIATION_AFFILIATION_FETCHER_FACTORY_H_ +#define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_SITE_AFFILIATION_AFFILIATION_FETCHER_FACTORY_H_ + +#include <memory> + +#include "base/memory/scoped_refptr.h" + +namespace network { +class SharedURLLoaderFactory; +} // namespace network + +namespace password_manager { + +class AffiliationFetcherInterface; +class AffiliationFetcherDelegate; + +// Interface for a factory to construct instances of AffiliationFetcher +// subclasses. +class AffiliationFetcherFactory { + public: + AffiliationFetcherFactory() = default; + virtual ~AffiliationFetcherFactory() = default; + + AffiliationFetcherFactory(const AffiliationFetcherFactory&) = delete; + AffiliationFetcherFactory& operator=(const AffiliationFetcherFactory&) = + delete; + AffiliationFetcherFactory(AffiliationFetcherFactory&&) = delete; + AffiliationFetcherFactory& operator=(AffiliationFetcherFactory&&) = delete; + + // Constructs a fetcher to retrieve affiliations for requested facets + // using the specified |url_loader_factory|, and will provide the results + // to the |delegate| on the same thread that creates the instance. + virtual std::unique_ptr<AffiliationFetcherInterface> CreateInstance( + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, + AffiliationFetcherDelegate* delegate) = 0; +}; + +} // namespace password_manager + +#endif // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_SITE_AFFILIATION_AFFILIATION_FETCHER_FACTORY_H_
diff --git a/components/password_manager/core/browser/site_affiliation/affiliation_fetcher_factory_impl.cc b/components/password_manager/core/browser/site_affiliation/affiliation_fetcher_factory_impl.cc new file mode 100644 index 0000000..38e4707 --- /dev/null +++ b/components/password_manager/core/browser/site_affiliation/affiliation_fetcher_factory_impl.cc
@@ -0,0 +1,23 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/password_manager/core/browser/site_affiliation/affiliation_fetcher_factory_impl.h" + +#include "components/password_manager/core/browser/android_affiliation/affiliation_fetcher.h" +#include "services/network/public/cpp/shared_url_loader_factory.h" + +namespace password_manager { + +AffiliationFetcherFactoryImpl::AffiliationFetcherFactoryImpl() = default; +AffiliationFetcherFactoryImpl::~AffiliationFetcherFactoryImpl() = default; + +std::unique_ptr<AffiliationFetcherInterface> +AffiliationFetcherFactoryImpl::CreateInstance( + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, + AffiliationFetcherDelegate* delegate) { + return std::make_unique<AffiliationFetcher>(std::move(url_loader_factory), + delegate); +} + +} // namespace password_manager
diff --git a/components/password_manager/core/browser/site_affiliation/affiliation_fetcher_factory_impl.h b/components/password_manager/core/browser/site_affiliation/affiliation_fetcher_factory_impl.h new file mode 100644 index 0000000..9b46e9c1 --- /dev/null +++ b/components/password_manager/core/browser/site_affiliation/affiliation_fetcher_factory_impl.h
@@ -0,0 +1,24 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_SITE_AFFILIATION_AFFILIATION_FETCHER_FACTORY_IMPL_H_ +#define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_SITE_AFFILIATION_AFFILIATION_FETCHER_FACTORY_IMPL_H_ + +#include "components/password_manager/core/browser/site_affiliation/affiliation_fetcher_factory.h" + +namespace password_manager { + +class AffiliationFetcherFactoryImpl : public AffiliationFetcherFactory { + public: + AffiliationFetcherFactoryImpl(); + ~AffiliationFetcherFactoryImpl() override; + + std::unique_ptr<AffiliationFetcherInterface> CreateInstance( + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, + AffiliationFetcherDelegate* delegate) override; +}; + +} // namespace password_manager + +#endif // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_SITE_AFFILIATION_AFFILIATION_FETCHER_FACTORY_IMPL_H_
diff --git a/components/password_manager/core/browser/site_affiliation/affiliation_service_impl.cc b/components/password_manager/core/browser/site_affiliation/affiliation_service_impl.cc index f3c0a03d..bdedbf7 100644 --- a/components/password_manager/core/browser/site_affiliation/affiliation_service_impl.cc +++ b/components/password_manager/core/browser/site_affiliation/affiliation_service_impl.cc
@@ -7,7 +7,6 @@ #include "base/metrics/histogram_functions.h" #include "base/ranges/algorithm.h" #include "base/threading/sequenced_task_runner_handle.h" -#include "components/password_manager/core/browser/android_affiliation/affiliation_fetcher.h" #include "components/password_manager/core/browser/password_store_factory_util.h" #include "components/sync/driver/sync_service.h" #include "services/network/public/cpp/shared_url_loader_factory.h" @@ -59,7 +58,8 @@ syncer::SyncService* sync_service, scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) : sync_service_(sync_service), - url_loader_factory_(std::move(url_loader_factory)) {} + url_loader_factory_(std::move(url_loader_factory)), + fetcher_factory_(std::make_unique<AffiliationFetcherFactoryImpl>()) {} AffiliationServiceImpl::~AffiliationServiceImpl() = default; @@ -157,7 +157,7 @@ const std::vector<FacetURI>& facets, const AffiliationFetcherInterface::RequestInfo request_info) { if (!facets.empty()) { - fetcher_ = AffiliationFetcher::Create(url_loader_factory_, this); + fetcher_ = fetcher_factory_->CreateInstance(url_loader_factory_, this); fetcher_->StartRequest(facets, request_info); } }
diff --git a/components/password_manager/core/browser/site_affiliation/affiliation_service_impl.h b/components/password_manager/core/browser/site_affiliation/affiliation_service_impl.h index 7b8b9ce..e7d7315c 100644 --- a/components/password_manager/core/browser/site_affiliation/affiliation_service_impl.h +++ b/components/password_manager/core/browser/site_affiliation/affiliation_service_impl.h
@@ -15,6 +15,7 @@ #include "components/password_manager/core/browser/android_affiliation/affiliation_fetcher_delegate.h" #include "components/password_manager/core/browser/android_affiliation/affiliation_fetcher_interface.h" #include "components/password_manager/core/browser/password_manager_metrics_util.h" +#include "components/password_manager/core/browser/site_affiliation/affiliation_fetcher_factory_impl.h" namespace network { class SharedURLLoaderFactory; @@ -65,6 +66,11 @@ url_loader_factory_ = std::move(url_loader_factory); } + void SetFetcherFactoryForTesting( + std::unique_ptr<AffiliationFetcherFactory> fetcher_factory) { + fetcher_factory_ = std::move(fetcher_factory); + } + void SetSyncServiceForTesting(syncer::SyncService* sync_service) { sync_service_ = sync_service; } @@ -92,6 +98,7 @@ std::map<url::SchemeHostPort, ChangePasswordUrlMatch> change_password_urls_; // TODO(crbug.com/1117045): A vector of pending fetchers to be created. std::unique_ptr<AffiliationFetcherInterface> fetcher_; + std::unique_ptr<AffiliationFetcherFactory> fetcher_factory_; // Callback is passed in PrefetchChangePasswordURLs and is run in // OnFetchSucceeded, OnFetchMalformed, OnFetchFailed to indicate the prefetch // has finished.
diff --git a/components/password_manager/core/browser/site_affiliation/affiliation_service_impl_unittest.cc b/components/password_manager/core/browser/site_affiliation/affiliation_service_impl_unittest.cc index 0e81aa69df..22cd262 100644 --- a/components/password_manager/core/browser/site_affiliation/affiliation_service_impl_unittest.cc +++ b/components/password_manager/core/browser/site_affiliation/affiliation_service_impl_unittest.cc
@@ -11,7 +11,7 @@ #include "base/test/task_environment.h" #include "components/password_manager/core/browser/android_affiliation/affiliation_fetcher.h" #include "components/password_manager/core/browser/android_affiliation/mock_affiliation_fetcher.h" -#include "components/password_manager/core/browser/android_affiliation/test_affiliation_fetcher_factory.h" +#include "components/password_manager/core/browser/site_affiliation/affiliation_fetcher_factory.h" #include "components/password_manager/core/browser/site_affiliation/affiliation_service_impl.h" #include "components/sync/driver/test_sync_service.h" #include "services/network/test/test_shared_url_loader_factory.h" @@ -20,6 +20,7 @@ #include "testing/gtest/include/gtest/gtest.h" using ::testing::_; +using ::testing::ByMove; using ::testing::Return; namespace password_manager { @@ -48,13 +49,13 @@ } // namespace -class MockAffiliationFetcherFactory : public TestAffiliationFetcherFactory { +class MockAffiliationFetcherFactory : public AffiliationFetcherFactory { public: MockAffiliationFetcherFactory() = default; ~MockAffiliationFetcherFactory() override = default; MOCK_METHOD( - AffiliationFetcherInterface*, + std::unique_ptr<AffiliationFetcherInterface>, CreateInstance, (scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, AffiliationFetcherDelegate* delegate), @@ -67,18 +68,18 @@ : sync_service_(std::make_unique<syncer::TestSyncService>()), service_(sync_service_.get(), base::MakeRefCounted<network::TestSharedURLLoaderFactory>()) { - AffiliationFetcher::SetFactoryForTesting(mock_fetcher_factory()); + auto fetcher_factory = std::make_unique<MockAffiliationFetcherFactory>(); + mock_fetcher_factory_ = fetcher_factory.get(); + service_.SetFetcherFactoryForTesting(std::move(fetcher_factory)); } - ~AffiliationServiceImplTest() override { - AffiliationFetcher::SetFactoryForTesting(nullptr); - } + ~AffiliationServiceImplTest() override = default; base::HistogramTester& histogram_tester() { return histogram_tester_; } syncer::TestSyncService* sync_service() { return sync_service_.get(); } AffiliationServiceImpl* service() { return &service_; } - MockAffiliationFetcherFactory* mock_fetcher_factory() { - return &mock_fetcher_factory_; + MockAffiliationFetcherFactory& mock_fetcher_factory() { + return *mock_fetcher_factory_; } // Sets TestSyncService flags. @@ -92,7 +93,7 @@ base::HistogramTester histogram_tester_; std::unique_ptr<syncer::TestSyncService> sync_service_; AffiliationServiceImpl service_; - MockAffiliationFetcherFactory mock_fetcher_factory_; + MockAffiliationFetcherFactory* mock_fetcher_factory_; }; TEST_F(AffiliationServiceImplTest, GetChangePasswordURLReturnsEmpty) { @@ -101,14 +102,14 @@ TEST_F(AffiliationServiceImplTest, ClearStopsOngoingAffiliationFetcherRequest) { const std::vector<GURL> origins = {GURL(k1ExampleURL), GURL(k2ExampleURL)}; - auto* mock_fetcher = new MockAffiliationFetcher(); + auto mock_fetcher = std::make_unique<MockAffiliationFetcher>(); EXPECT_CALL(*mock_fetcher, StartRequest(ToFacetsURIs(origins), AffiliationFetcherInterface::RequestInfo{ .change_password_info = true})); - EXPECT_CALL(*mock_fetcher_factory(), CreateInstance) - .WillOnce(Return(mock_fetcher)); + EXPECT_CALL(mock_fetcher_factory(), CreateInstance) + .WillOnce(Return(ByMove(std::move(mock_fetcher)))); service()->PrefetchChangePasswordURLs(origins, base::DoNothing()); EXPECT_NE(nullptr, service()->GetFetcherForTesting()); @@ -120,14 +121,14 @@ TEST_F(AffiliationServiceImplTest, OnFetchSuccededInsertsChangePasswordURLOfRequestedSiteIfFound) { const GURL origin(k1ExampleURL); - auto* mock_fetcher = new MockAffiliationFetcher(); + auto mock_fetcher = std::make_unique<MockAffiliationFetcher>(); EXPECT_CALL(*mock_fetcher, StartRequest(ToFacetsURIs({origin}), AffiliationFetcherInterface::RequestInfo{ .change_password_info = true})); - EXPECT_CALL(*mock_fetcher_factory(), CreateInstance) - .WillOnce(Return(mock_fetcher)); + EXPECT_CALL(mock_fetcher_factory(), CreateInstance) + .WillOnce(Return(ByMove(std::move(mock_fetcher)))); service()->PrefetchChangePasswordURLs({origin}, base::DoNothing()); @@ -140,8 +141,8 @@ .change_password_url = GURL(kOneExampleChangePasswordURL)}}; auto test_result = std::make_unique<AffiliationFetcherDelegate::Result>(); test_result->groupings.push_back(group); - AffiliationFetcherDelegate* service_delegate = service(); - service_delegate->OnFetchSucceeded(std::move(test_result)); + static_cast<AffiliationFetcherDelegate*>(service())->OnFetchSucceeded( + std::move(test_result)); // Expect Change Password URL of requested site. EXPECT_EQ(GURL(k1ExampleChangePasswordURL), @@ -151,14 +152,14 @@ TEST_F(AffiliationServiceImplTest, OnFetchSuccededInsertsChangePasswordURLOfAnotherSiteFromAGroup) { const GURL origin(kM1ExampleURL); - auto* mock_fetcher = new MockAffiliationFetcher(); + auto mock_fetcher = std::make_unique<MockAffiliationFetcher>(); EXPECT_CALL(*mock_fetcher, StartRequest(ToFacetsURIs({origin}), AffiliationFetcherInterface::RequestInfo{ .change_password_info = true})); - EXPECT_CALL(*mock_fetcher_factory(), CreateInstance) - .WillOnce(Return(mock_fetcher)); + EXPECT_CALL(mock_fetcher_factory(), CreateInstance) + .WillOnce(Return(ByMove(std::move(mock_fetcher)))); service()->PrefetchChangePasswordURLs({origin}, base::DoNothing()); @@ -169,8 +170,8 @@ .change_password_url = GURL()}}; auto test_result = std::make_unique<AffiliationFetcherDelegate::Result>(); test_result->groupings.push_back(group); - AffiliationFetcherDelegate* service_delegate = service(); - service_delegate->OnFetchSucceeded(std::move(test_result)); + static_cast<AffiliationFetcherDelegate*>(service())->OnFetchSucceeded( + std::move(test_result)); // Expect Change Password URL of another site from a grouping. EXPECT_EQ(GURL(k1ExampleChangePasswordURL), @@ -180,14 +181,14 @@ TEST_F(AffiliationServiceImplTest, OnFetchSucceedTakesNoActionWhenNoChangePasswordURLsAvailable) { const GURL origin(k1ExampleURL); - auto* mock_fetcher = new MockAffiliationFetcher(); + auto mock_fetcher = std::make_unique<MockAffiliationFetcher>(); EXPECT_CALL(*mock_fetcher, StartRequest(ToFacetsURIs({origin}), AffiliationFetcherInterface::RequestInfo{ .change_password_info = true})); - EXPECT_CALL(*mock_fetcher_factory(), CreateInstance) - .WillOnce(Return(mock_fetcher)); + EXPECT_CALL(mock_fetcher_factory(), CreateInstance) + .WillOnce(Return(ByMove(std::move(mock_fetcher)))); service()->PrefetchChangePasswordURLs({origin}, base::DoNothing()); @@ -200,48 +201,45 @@ .change_password_url = GURL()}}; auto test_result = std::make_unique<AffiliationFetcherDelegate::Result>(); test_result->groupings.push_back(group); - AffiliationFetcherDelegate* service_delegate = service(); - service_delegate->OnFetchSucceeded(std::move(test_result)); + static_cast<AffiliationFetcherDelegate*>(service())->OnFetchSucceeded( + std::move(test_result)); EXPECT_EQ(GURL(), service()->GetChangePasswordURL(origin)); } TEST_F(AffiliationServiceImplTest, OnFetchFailedResetsFetcher) { - auto* mock_fetcher = new MockAffiliationFetcher(); - AffiliationFetcherDelegate* service_delegate = service(); - - EXPECT_CALL(*mock_fetcher_factory(), CreateInstance) - .WillOnce(Return(mock_fetcher)); - std::vector<GURL> origins = {GURL(k1ExampleURL), GURL(k2ExampleURL)}; + auto mock_fetcher = std::make_unique<MockAffiliationFetcher>(); + EXPECT_CALL(*mock_fetcher, StartRequest(ToFacetsURIs(origins), AffiliationFetcherInterface::RequestInfo{ .change_password_info = true})); + EXPECT_CALL(mock_fetcher_factory(), CreateInstance) + .WillOnce(Return(ByMove(std::move(mock_fetcher)))); service()->PrefetchChangePasswordURLs(origins, base::DoNothing()); EXPECT_NE(nullptr, service()->GetFetcherForTesting()); - service_delegate->OnFetchFailed(); + static_cast<AffiliationFetcherDelegate*>(service())->OnFetchFailed(); EXPECT_EQ(nullptr, service()->GetFetcherForTesting()); } TEST_F(AffiliationServiceImplTest, OnMalformedResponseResetsFetcher) { std::vector<GURL> origins = {GURL(k1ExampleURL), GURL(k2ExampleURL)}; - auto* mock_fetcher = new MockAffiliationFetcher(); - AffiliationFetcherDelegate* service_delegate = service(); + auto mock_fetcher = std::make_unique<MockAffiliationFetcher>(); - EXPECT_CALL(*mock_fetcher_factory(), CreateInstance) - .WillOnce(Return(mock_fetcher)); EXPECT_CALL(*mock_fetcher, StartRequest(ToFacetsURIs(origins), AffiliationFetcherInterface::RequestInfo{ .change_password_info = true})); + EXPECT_CALL(mock_fetcher_factory(), CreateInstance) + .WillOnce(Return(ByMove(std::move(mock_fetcher)))); service()->PrefetchChangePasswordURLs(origins, base::DoNothing()); EXPECT_NE(nullptr, service()->GetFetcherForTesting()); - service_delegate->OnMalformedResponse(); + static_cast<AffiliationFetcherDelegate*>(service())->OnMalformedResponse(); EXPECT_EQ(nullptr, service()->GetFetcherForTesting()); } @@ -255,17 +253,17 @@ const std::vector<GURL> origins_1 = {origin1, origin2, origin3}; const std::vector<GURL> origins_2 = {origin3, origin4, origin5}; - auto* mock_fetcher = new MockAffiliationFetcher(); - auto* new_mock_fetcher = new MockAffiliationFetcher(); + auto mock_fetcher = std::make_unique<MockAffiliationFetcher>(); + auto new_mock_fetcher = std::make_unique<MockAffiliationFetcher>(); AffiliationFetcher::RequestInfo request_info{.change_password_info = true}; EXPECT_CALL(*mock_fetcher, StartRequest(ToFacetsURIs(origins_1), request_info)); EXPECT_CALL(*new_mock_fetcher, StartRequest(ToFacetsURIs(origins_2), request_info)); - EXPECT_CALL(*mock_fetcher_factory(), CreateInstance) - .WillOnce(Return(mock_fetcher)) - .WillOnce(Return(new_mock_fetcher)); + EXPECT_CALL(mock_fetcher_factory(), CreateInstance) + .WillOnce(Return(ByMove(std::move(mock_fetcher)))) + .WillOnce(Return(ByMove(std::move(new_mock_fetcher)))); service()->PrefetchChangePasswordURLs(origins_1, base::DoNothing()); service()->PrefetchChangePasswordURLs(origins_2, base::DoNothing()); @@ -279,14 +277,14 @@ /*is_passphrase_set=*/false); const std::vector<GURL> origins = {GURL(k1ExampleURL), GURL(k2ExampleURL)}; - auto* mock_fetcher = new MockAffiliationFetcher(); + auto mock_fetcher = std::make_unique<MockAffiliationFetcher>(); - EXPECT_CALL(*mock_fetcher_factory(), CreateInstance) - .WillOnce(Return(mock_fetcher)); EXPECT_CALL(*mock_fetcher, StartRequest(ToFacetsURIs(origins), AffiliationFetcherInterface::RequestInfo{ .change_password_info = true})); + EXPECT_CALL(mock_fetcher_factory(), CreateInstance) + .WillOnce(Return(ByMove(std::move(mock_fetcher)))); service()->PrefetchChangePasswordURLs(origins, base::DoNothing()); } @@ -294,7 +292,7 @@ TEST_F(AffiliationServiceImplTest, SecondaryPassphraseSetPreventsFetch) { SetSyncServiceStates(/*is_setup_completed=*/true, /*is_passphrase_set=*/true); - EXPECT_CALL(*mock_fetcher_factory(), CreateInstance).Times(0); + EXPECT_CALL(mock_fetcher_factory(), CreateInstance).Times(0); service()->PrefetchChangePasswordURLs( {GURL(k1ExampleURL), GURL(k2ExampleURL)}, base::DoNothing()); @@ -304,7 +302,7 @@ SetSyncServiceStates(/*is_setup_completed=*/false, /*is_passphrase_set=*/false); - EXPECT_CALL(*mock_fetcher_factory(), CreateInstance).Times(0); + EXPECT_CALL(mock_fetcher_factory(), CreateInstance).Times(0); service()->PrefetchChangePasswordURLs( {GURL(k1ExampleURL), GURL(k2ExampleURL)}, base::DoNothing()); @@ -315,14 +313,14 @@ TEST_F(AffiliationServiceImplTest, NotFetchedYetMetricIfWaitingForResponse) { const GURL origin(k1ExampleURL); - auto* mock_fetcher = new MockAffiliationFetcher(); + auto mock_fetcher = std::make_unique<MockAffiliationFetcher>(); EXPECT_CALL(*mock_fetcher, StartRequest(ToFacetsURIs({origin}), AffiliationFetcherInterface::RequestInfo{ .change_password_info = true})); - EXPECT_CALL(*mock_fetcher_factory(), CreateInstance) - .WillOnce(Return(mock_fetcher)); + EXPECT_CALL(mock_fetcher_factory(), CreateInstance) + .WillOnce(Return(ByMove(std::move(mock_fetcher)))); service()->PrefetchChangePasswordURLs({origin}, base::DoNothing()); service()->GetChangePasswordURL(origin); @@ -342,14 +340,14 @@ TEST_F(AffiliationServiceImplTest, FoundForRequestedFacetMetric) { const GURL origin(k1ExampleURL); - auto* mock_fetcher = new MockAffiliationFetcher(); + auto mock_fetcher = std::make_unique<MockAffiliationFetcher>(); EXPECT_CALL(*mock_fetcher, StartRequest(ToFacetsURIs({origin}), AffiliationFetcherInterface::RequestInfo{ .change_password_info = true})); - EXPECT_CALL(*mock_fetcher_factory(), CreateInstance) - .WillOnce(Return(mock_fetcher)); + EXPECT_CALL(mock_fetcher_factory(), CreateInstance) + .WillOnce(Return(ByMove(std::move(mock_fetcher)))); service()->PrefetchChangePasswordURLs({origin}, base::DoNothing()); @@ -361,8 +359,8 @@ auto test_result = std::make_unique<AffiliationFetcherDelegate::Result>(); test_result->groupings.push_back(group); - AffiliationFetcherDelegate* service_delegate = service(); - service_delegate->OnFetchSucceeded(std::move(test_result)); + static_cast<AffiliationFetcherDelegate*>(service())->OnFetchSucceeded( + std::move(test_result)); service()->GetChangePasswordURL(origin); histogram_tester().ExpectUniqueSample( @@ -372,14 +370,14 @@ TEST_F(AffiliationServiceImplTest, FoundForGroupedFacetMetric) { const GURL origin(kM1ExampleURL); - auto* mock_fetcher = new MockAffiliationFetcher(); + auto mock_fetcher = std::make_unique<MockAffiliationFetcher>(); EXPECT_CALL(*mock_fetcher, StartRequest(ToFacetsURIs({origin}), AffiliationFetcherInterface::RequestInfo{ .change_password_info = true})); - EXPECT_CALL(*mock_fetcher_factory(), CreateInstance) - .WillOnce(Return(mock_fetcher)); + EXPECT_CALL(mock_fetcher_factory(), CreateInstance) + .WillOnce(Return(ByMove(std::move(mock_fetcher)))); service()->PrefetchChangePasswordURLs({origin}, base::DoNothing()); @@ -391,8 +389,8 @@ auto test_result = std::make_unique<AffiliationFetcherDelegate::Result>(); test_result->groupings.push_back(group); - AffiliationFetcherDelegate* service_delegate = service(); - service_delegate->OnFetchSucceeded(std::move(test_result)); + static_cast<AffiliationFetcherDelegate*>(service())->OnFetchSucceeded( + std::move(test_result)); service()->GetChangePasswordURL(origin); histogram_tester().ExpectUniqueSample( @@ -402,21 +400,20 @@ TEST_F(AffiliationServiceImplTest, OnFetchSuccedeedRunsCallback) { const GURL origin(k1ExampleURL); - auto* mock_fetcher = new MockAffiliationFetcher(); + auto mock_fetcher = std::make_unique<MockAffiliationFetcher>(); EXPECT_CALL(*mock_fetcher, StartRequest(ToFacetsURIs({origin}), AffiliationFetcherInterface::RequestInfo{ .change_password_info = true})); - EXPECT_CALL(*mock_fetcher_factory(), CreateInstance) - .WillOnce(Return(mock_fetcher)); + EXPECT_CALL(mock_fetcher_factory(), CreateInstance) + .WillOnce(Return(ByMove(std::move(mock_fetcher)))); base::MockOnceClosure callback; service()->PrefetchChangePasswordURLs({origin}, callback.Get()); - AffiliationFetcherDelegate* service_delegate = service(); EXPECT_CALL(callback, Run()); - service_delegate->OnFetchSucceeded( + static_cast<AffiliationFetcherDelegate*>(service())->OnFetchSucceeded( std::make_unique<AffiliationFetcherDelegate::Result>()); }
diff --git a/components/permissions/android/permission_prompt_android.cc b/components/permissions/android/permission_prompt_android.cc index 245b0c7..e7e561c 100644 --- a/components/permissions/android/permission_prompt_android.cc +++ b/components/permissions/android/permission_prompt_android.cc
@@ -140,8 +140,21 @@ base::string16 PermissionPromptAndroid::GetMessageText() const { const std::vector<permissions::PermissionRequest*>& requests = delegate_->Requests(); - if (requests.size() == 1) - return requests[0]->GetMessageText(); + if (requests.size() == 1) { + if (requests[0]->GetContentSettingsType() == + ContentSettingsType::STORAGE_ACCESS) { + return l10n_util::GetStringFUTF16( + IDS_STORAGE_ACCESS_INFOBAR_TEXT, + url_formatter::FormatUrlForSecurityDisplay( + requests[0]->GetOrigin(), + url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC), + url_formatter::FormatUrlForSecurityDisplay( + delegate_->GetEmbeddingOrigin(), + url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC)); + } else { + return requests[0]->GetMessageText(); + } + } CheckValidRequestGroup(requests); if (IsValidARCameraAccessRequestGroup(requests)) { return l10n_util::GetStringFUTF16(
diff --git a/components/permissions/permission_context_base.cc b/components/permissions/permission_context_base.cc index 431eef4..ed1521d 100644 --- a/components/permissions/permission_context_base.cc +++ b/components/permissions/permission_context_base.cc
@@ -370,8 +370,7 @@ std::unique_ptr<PermissionRequest> request_ptr = std::make_unique<PermissionRequestImpl>( - embedding_origin, requesting_origin, content_settings_type_, - user_gesture, + requesting_origin, content_settings_type_, user_gesture, base::BindOnce(&PermissionContextBase::PermissionDecided, weak_factory_.GetWeakPtr(), id, requesting_origin, embedding_origin, std::move(callback)),
diff --git a/components/permissions/permission_prompt.h b/components/permissions/permission_prompt.h index 7aae7037..de0be84 100644 --- a/components/permissions/permission_prompt.h +++ b/components/permissions/permission_prompt.h
@@ -10,6 +10,7 @@ #include "base/callback.h" #include "base/strings/string16.h" +#include "url/gurl.h" namespace content { class WebContents; @@ -48,6 +49,10 @@ // deleted upon navigation and so on. virtual const std::vector<PermissionRequest*>& Requests() = 0; + // Get the top-level origin currently displayed in the address bar + // associated with the requests. + virtual GURL GetEmbeddingOrigin() const = 0; + virtual void Accept() = 0; virtual void Deny() = 0; virtual void Closing() = 0;
diff --git a/components/permissions/permission_request.cc b/components/permissions/permission_request.cc index 4032a22..70b2a8c 100644 --- a/components/permissions/permission_request.cc +++ b/components/permissions/permission_request.cc
@@ -24,15 +24,6 @@ } #endif -base::string16 PermissionRequest::GetMessageTextWarningFragment() const { - return base::string16(); -} - -GURL PermissionRequest::GetEmbeddingOrigin() const { - NOTREACHED(); - return GURL(); -} - #if defined(OS_ANDROID) base::string16 PermissionRequest::GetQuietTitleText() const { return base::string16();
diff --git a/components/permissions/permission_request.h b/components/permissions/permission_request.h index 9a7ae7d..35aec4a 100644 --- a/components/permissions/permission_request.h +++ b/components/permissions/permission_request.h
@@ -122,13 +122,6 @@ // be displayed next to an image and indicate the user grants the permission. virtual base::string16 GetMessageTextFragment() const = 0; - // Returns a warning prompt text related to this permission. - virtual base::string16 GetMessageTextWarningFragment() const; - - // Get the top-level origin currently displayed in the address bar associated - // with this request. - virtual GURL GetEmbeddingOrigin() const; - // Get the origin on whose behalf this permission request is being made. virtual GURL GetOrigin() const = 0;
diff --git a/components/permissions/permission_request_impl.cc b/components/permissions/permission_request_impl.cc index e795646..e5a19b2 100644 --- a/components/permissions/permission_request_impl.cc +++ b/components/permissions/permission_request_impl.cc
@@ -23,14 +23,12 @@ namespace permissions { PermissionRequestImpl::PermissionRequestImpl( - const GURL& embedding_origin, const GURL& request_origin, ContentSettingsType content_settings_type, bool has_gesture, PermissionDecidedCallback permission_decided_callback, base::OnceClosure delete_callback) - : embedding_origin_(embedding_origin), - request_origin_(request_origin), + : request_origin_(request_origin), content_settings_type_(content_settings_type), has_gesture_(has_gesture), permission_decided_callback_(std::move(permission_decided_callback)), @@ -151,14 +149,6 @@ case ContentSettingsType::AR: message_id = IDS_AR_INFOBAR_TEXT; break; - case ContentSettingsType::STORAGE_ACCESS: - return l10n_util::GetStringFUTF16( - IDS_STORAGE_ACCESS_INFOBAR_TEXT, - url_formatter::FormatUrlForSecurityDisplay( - GetOrigin(), url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC), - url_formatter::FormatUrlForSecurityDisplay( - GetEmbeddingOrigin(), - url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC)); default: NOTREACHED(); return base::string16(); @@ -237,13 +227,8 @@ message_id = IDS_AR_PERMISSION_FRAGMENT; break; case ContentSettingsType::STORAGE_ACCESS: - return l10n_util::GetStringFUTF16( - IDS_STORAGE_ACCESS_PERMISSION_FRAGMENT, - url_formatter::FormatUrlForSecurityDisplay( - GetOrigin(), url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC), - url_formatter::FormatUrlForSecurityDisplay( - GetEmbeddingOrigin(), - url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC)); + message_id = IDS_STORAGE_ACCESS_PERMISSION_FRAGMENT; + break; case ContentSettingsType::WINDOW_PLACEMENT: message_id = IDS_WINDOW_PLACEMENT_PERMISSION_FRAGMENT; break; @@ -293,16 +278,6 @@ } #endif -base::string16 PermissionRequestImpl::GetMessageTextWarningFragment() const { - if (content_settings_type_ == ContentSettingsType::PLUGINS) - return l10n_util::GetStringUTF16(IDS_FLASH_PERMISSION_WARNING_FRAGMENT); - return base::string16(); -} - -GURL PermissionRequestImpl::GetEmbeddingOrigin() const { - return embedding_origin_; -} - GURL PermissionRequestImpl::GetOrigin() const { return request_origin_; }
diff --git a/components/permissions/permission_request_impl.h b/components/permissions/permission_request_impl.h index 70631e4..385bdab 100644 --- a/components/permissions/permission_request_impl.h +++ b/components/permissions/permission_request_impl.h
@@ -24,8 +24,7 @@ public: using PermissionDecidedCallback = base::OnceCallback<void(ContentSetting)>; - PermissionRequestImpl(const GURL& embedding_origin, - const GURL& request_origin, + PermissionRequestImpl(const GURL& request_origin, ContentSettingsType content_settings_type, bool has_gesture, PermissionDecidedCallback permission_decided_callback, @@ -45,8 +44,6 @@ base::string16 GetChipText() const override; #endif base::string16 GetMessageTextFragment() const override; - base::string16 GetMessageTextWarningFragment() const override; - GURL GetEmbeddingOrigin() const override; GURL GetOrigin() const override; void PermissionGranted() override; void PermissionDenied() override; @@ -56,7 +53,6 @@ PermissionRequestGestureType GetGestureType() const override; ContentSettingsType GetContentSettingsType() const override; - GURL embedding_origin_; GURL request_origin_; ContentSettingsType content_settings_type_; bool has_gesture_;
diff --git a/components/permissions/permission_request_manager.cc b/components/permissions/permission_request_manager.cc index 7974474..299ad4b 100644 --- a/components/permissions/permission_request_manager.cc +++ b/components/permissions/permission_request_manager.cc
@@ -338,6 +338,10 @@ return requests_; } +GURL PermissionRequestManager::GetEmbeddingOrigin() const { + return web_contents()->GetLastCommittedURL().GetOrigin(); +} + void PermissionRequestManager::Accept() { if (deleting_bubble_) return;
diff --git a/components/permissions/permission_request_manager.h b/components/permissions/permission_request_manager.h index 5e8cc65..96edbda 100644 --- a/components/permissions/permission_request_manager.h +++ b/components/permissions/permission_request_manager.h
@@ -130,6 +130,7 @@ // PermissionPrompt::Delegate: const std::vector<PermissionRequest*>& Requests() override; + GURL GetEmbeddingOrigin() const override; void Accept() override; void Deny() override; void Closing() override;
diff --git a/components/permissions/test/mock_permission_prompt.cc b/components/permissions/test/mock_permission_prompt.cc index 82d3db0..b87746ea 100644 --- a/components/permissions/test/mock_permission_prompt.cc +++ b/components/permissions/test/mock_permission_prompt.cc
@@ -39,7 +39,11 @@ // The actual prompt will call these, so test they're sane. EXPECT_FALSE(request->GetMessageTextFragment().empty()); #if defined(OS_ANDROID) - EXPECT_FALSE(request->GetMessageText().empty()); + // For STORAGE_ACCESS, the prompt itself calculates the message text. + if (request->GetContentSettingsType() != + ContentSettingsType::STORAGE_ACCESS) { + EXPECT_FALSE(request->GetMessageText().empty()); + } EXPECT_NE(0, request->GetIconId()); #else EXPECT_FALSE(request->GetIconId().is_empty());
diff --git a/components/permissions_strings.grdp b/components/permissions_strings.grdp index 54c98b6a..8842471 100644 --- a/components/permissions_strings.grdp +++ b/components/permissions_strings.grdp
@@ -108,9 +108,10 @@ <message name="IDS_AR_PERMISSION_FRAGMENT" desc="Permission request shown if the user is visiting a site that wants to use AR. Follows a prompt: 'This site would like to:"> Create a 3D map of your surroundings and track camera position </message> - <message name="IDS_STORAGE_ACCESS_PERMISSION_FRAGMENT" desc="Permission request shown if the user is visiting a site needs access to its data while it is embedded into another site. Follows a prompt: 'This site would like to:"> + <message name="IDS_STORAGE_ACCESS_PERMISSION_FRAGMENT" desc="Permission request shown if the user is visiting a site needs access to its data while it is embedded into another site. Follows a prompt: 'This site would like to:'"> Access cookies and site data. - + </message> + <message name="IDS_STORAGE_ACCESS_PERMISSION_EXPLANATION" desc="Explanation of the permission request shown if the user is visiting a site needs access to its data while it is embedded into another site. Follows this text: 'This site would like to: Access cookies and site data.'"> Do you want to allow <ph name="EMBEDDED_URL">$1<ex>news.site</ex></ph> to use cookies and site data on <ph name="TOP_LEVEL_URL">$2<ex>content_domain.site</ex></ph>? This will otherwise be blocked by your privacy settings. This will allow the content you interacted with to work correctly, but may allow <ph name="EMBEDDED_URL">$1<ex>news.site</ex></ph> to track your activity.
diff --git a/components/permissions_strings_grdp/IDS_STORAGE_ACCESS_PERMISSION_EXPLANATION.png.sha1 b/components/permissions_strings_grdp/IDS_STORAGE_ACCESS_PERMISSION_EXPLANATION.png.sha1 new file mode 100644 index 0000000..346e49e --- /dev/null +++ b/components/permissions_strings_grdp/IDS_STORAGE_ACCESS_PERMISSION_EXPLANATION.png.sha1
@@ -0,0 +1 @@ +10641252f274f657fb248e37ca77aa729196d120 \ No newline at end of file
diff --git a/components/permissions_strings_grdp/IDS_STORAGE_ACCESS_PERMISSION_FRAGMENT.png.sha1 b/components/permissions_strings_grdp/IDS_STORAGE_ACCESS_PERMISSION_FRAGMENT.png.sha1 new file mode 100644 index 0000000..346e49e --- /dev/null +++ b/components/permissions_strings_grdp/IDS_STORAGE_ACCESS_PERMISSION_FRAGMENT.png.sha1
@@ -0,0 +1 @@ +10641252f274f657fb248e37ca77aa729196d120 \ No newline at end of file
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb index 599c5e3..7a3029a 100644 --- a/components/policy/resources/policy_templates_de.xtb +++ b/components/policy/resources/policy_templates_de.xtb
@@ -5068,6 +5068,7 @@ Wenn sie nicht konfiguriert ist, können Websites den Zugriff erfragen, aber Nutzer können diese Einstellung ändern.</translation> <translation id="8274603902181597201">ecryptfs-Basisverzeichnis des Nutzers löschen und durch ein neues ext4-verschlüsseltes Basisverzeichnis ersetzen.</translation> +<translation id="8284296539558710573">Ursprungsübergreifende HTTP-Authentifizierungsaufforderungen</translation> <translation id="8285435910062771358">Vollbildlupe aktiviert</translation> <translation id="8288199156259560552">Google-Standortdienst für Android-Geräte aktivieren</translation> <translation id="8290875622178450531">Mit dieser Richtlinie können Sie die Bedienungshilfe "Spracheingabe" aktivieren.
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb index 1b88a2f..660a17f 100644 --- a/components/policy/resources/policy_templates_es.xtb +++ b/components/policy/resources/policy_templates_es.xtb
@@ -2224,6 +2224,11 @@ Si no se le asigna ningún valor, el resaltado del símbolo de intercalación se inhabilitará inicialmente en la pantalla de inicio de sesión, pero el usuario podrá habilitarlo en cualquier momento.</translation> <translation id="4183229833636799228">Configuración predeterminada de <ph name="FLASH_PLUGIN_NAME" /></translation> <translation id="4192388905594723944">URL para validar el token de autenticación de clientes de acceso remoto</translation> +<translation id="4196466220333757818">Esta política especifica las extensiones que pueden utilizar la función de <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> <ph name="CHALLENGE_USER_KEY_FUNCTION" /> para la atestación remota. Las extensiones se deben añadir a esta lista para utilizar la API. + + Si una extensión no está en la lista o no se ha configurado la lista, la llamada a la API devolverá un código de error. + + Esta política está obsoleta. Usa la política <ph name="ATTESTATION_EXTENSION_ALLOWLIST_POLICY_NAME" /> en su lugar.</translation> <translation id="4203389617541558220">Limita el tiempo de actividad del dispositivo mediante la programación de reinicios automáticos. Si se establece esta política, especifica el tiempo de actividad del dispositivo que debe transcurrir para que se programe un reinicio automático. @@ -3245,6 +3250,9 @@ Si no se asigna ningún valor a esta política, la opción predeterminada no estará disponible para los usuarios gestionados por empresas, aunque sí lo estará para aquellos no gestionados por empresas.</translation> <translation id="5584132346604748282">Controlar los servicios de ubicación de Google de Android</translation> +<translation id="5585568978223984334">Esta política especifica las extensiones que pueden usar las funciones de <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> para la atestación remota. Las extensiones se deben añadir a esta lista para usar la API. + + Si la lista no se ha configurado o si una extensión no está incluida en ella, aparecerá un código de error en la llamada a la API.</translation> <translation id="5586942249556966598">No hacer nada</translation> <translation id="5590494712401018042">Especifica el porcentaje del retraso de atenuación de pantalla cuando el dispositivo se encuentra en el modo de presentación.
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb index 3ca9fa64..4f68c17 100644 --- a/components/policy/resources/policy_templates_it.xtb +++ b/components/policy/resources/policy_templates_it.xtb
@@ -567,7 +567,7 @@ Il criterio relativo al referrer predefinito di Chrome sarà rafforzato passando dal relativo valore corrente no-referrer-when-downgrade al più sicuro strict-origin-when-cross-origin tramite un rilascio graduale della release stabile di Chrome 85. - Prima del lancio, questo criterio aziendale non avrà alcun effetto. Dopo il lancio, una volta attivato questo criterio aziendale, il criterio relativo al referrer predefinito di Chrome verrà impostato sul suo valore precedente, no-referrer-when-downgrade. + Prima del rilascio, questo criterio aziendale non avrà alcun effetto. Dopo il rilascio, una volta attivato questo criterio aziendale, il criterio relativo al referrer predefinito di Chrome verrà impostato sul suo valore precedente, no-referrer-when-downgrade. Questo criterio aziendale è disattivato per impostazione predefinita.</translation> <translation id="1956493342242507974">Questa norma consente di configurare la gestione dell'alimentazione in relazione alla schermata di accesso di <ph name="PRODUCT_OS_NAME" />. @@ -2203,6 +2203,11 @@ Se questo criterio non viene impostato, inizialmente l'evidenziazione del cursore di testo è disattivata nella schermata di accesso, ma l'utente può attivarla in qualsiasi momento.</translation> <translation id="4183229833636799228">Impostazione predefinita per il plug-in <ph name="FLASH_PLUGIN_NAME" /></translation> <translation id="4192388905594723944">URL per la convalida del token di autenticazione del client di accesso remoto</translation> +<translation id="4196466220333757818">Questo criterio consente di specificare le estensioni autorizzate a usare la funzione <ph name="CHALLENGE_USER_KEY_FUNCTION" /> dell'<ph name="ENTERPRISE_PLATFORM_KEYS_API" /> per l'attestazione da remoto. Per utilizzare l'API, le estensioni devono essere aggiunte a questo elenco. + + Se un'estensione non è presente nell'elenco o se l'elenco non è configurato, la chiamata all'API non va a buon fine e viene generato un codice di errore. + + Questo criterio è deprecato. Usa il criterio <ph name="ATTESTATION_EXTENSION_ALLOWLIST_POLICY_NAME" />.</translation> <translation id="4203389617541558220">Consente di limitare il tempo di attività del dispositivo programmando riavvii automatici. Se questa norma viene impostata consente di specificare il periodo di tempo di attività del dispositivo trascorso il quale è programmato un riavvio automatico. @@ -3211,6 +3216,9 @@ Se questa norma non è impostata, per impostazione predefinita la funzione non è consentita per gli utenti gestiti dall'azienda ed è consentita per gli utenti non gestiti.</translation> <translation id="5584132346604748282">Controlla i servizi di geolocalizzazione di Google per Android</translation> +<translation id="5585568978223984334">Questo criterio consente di specificare le estensioni autorizzate a usare le funzioni dell'<ph name="ENTERPRISE_PLATFORM_KEYS_API" /> per l'attestazione da remoto. Per utilizzare l'API, le estensioni devono essere aggiunte a questo elenco. + + Se un'estensione non è presente nell'elenco o se l'elenco non è configurato, la chiamata all'API non va a buon fine e viene generato un codice di errore.</translation> <translation id="5586942249556966598">Non fare niente</translation> <translation id="5590494712401018042">Consente di specificare la percentuale di regolazione del ritardo di oscuramento dello schermo quando il dispositivo è in modalità di presentazione.
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb index 9ea4507..d17bce32 100644 --- a/components/policy/resources/policy_templates_nl.xtb +++ b/components/policy/resources/policy_templates_nl.xtb
@@ -2197,6 +2197,11 @@ Als dit beleid niet is ingesteld, is markering van het caret-teken in eerste instantie uitgeschakeld op het inlogscherm. De gebruiker kan deze functie op elk gewenst moment inschakelen.</translation> <translation id="4183229833636799228">Standaardinstelling voor <ph name="FLASH_PLUGIN_NAME" /></translation> <translation id="4192388905594723944">URL voor het valideren van verificatietoken voor client voor externe toegang</translation> +<translation id="4196466220333757818">Dit beleid geeft aan welke extensies de <ph name="ENTERPRISE_PLATFORM_KEYS_API" />-functie <ph name="CHALLENGE_USER_KEY_FUNCTION" /> mogen gebruiken voor externe bevestiging. Je moet extensies aan deze lijst toevoegen om de API te kunnen gebruiken. + + Als een extensie niet in de lijst voorkomt of als de lijst niet is ingesteld, mislukt het aanroepen van de API en wordt er een foutcode weergegeven. + + Dit beleid is verouderd. Gebruik in plaats daarvan <ph name="ATTESTATION_EXTENSION_ALLOWLIST_POLICY_NAME" />.</translation> <translation id="4203389617541558220">De bedrijfstijd van het apparaat beperken door automatisch opnieuw opstarten te plannen. Wanneer dit beleid is ingesteld, bepaalt het de duur van de bedrijfstijd van het apparaat waarna het automatisch opnieuw opstarten is gepland. @@ -3211,6 +3216,9 @@ Als dit beleid niet wordt ingesteld, geldt de standaardwaarde 'niet toegestaan' voor beheerde zakelijke gebruikers en 'toegestaan' voor niet-beheerde gebruikers.</translation> <translation id="5584132346604748282">Beheer van Google-locatieservices op Android</translation> +<translation id="5585568978223984334">Dit beleid geeft aan welke extensies de <ph name="ENTERPRISE_PLATFORM_KEYS_API" />-functies mogen gebruiken voor externe bevestiging. Je moet extensies aan deze lijst toevoegen om de API te kunnen gebruiken. + + Als een extensie niet in de lijst voorkomt of als de lijst niet is ingesteld, mislukt het aanroepen van de API en wordt er een foutcode weergegeven.</translation> <translation id="5586942249556966598">Niets doen</translation> <translation id="5590494712401018042">Geeft het percentage aan waarmee de dimvertraging van het scherm wordt geschaald wanneer het apparaat zich in de presentatiemodus bevindt.
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb index 9433f11..7a9d7ea 100644 --- a/components/policy/resources/policy_templates_pt-BR.xtb +++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -2201,6 +2201,11 @@ Se esta política não for definida, o destaque de circunflexos ficará desativado na tela de login, mas poderá ser ativado pelo usuário a qualquer momento.</translation> <translation id="4183229833636799228">Configuração padrão de <ph name="FLASH_PLUGIN_NAME" /></translation> <translation id="4192388905594723944">URL para validação do token de autenticação do cliente de acesso remoto</translation> +<translation id="4196466220333757818">Esta política especifica as extensões que podem usar a função <ph name="CHALLENGE_USER_KEY_FUNCTION" /> da <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> para atestado remoto. As extensões precisam ser adicionadas a esta lista para usar a API. + + Se uma extensão não estiver na lista ou se a lista não for definida, a chamada para a API falhará com um código de erro. + + Esta política está obsoleta. Use <ph name="ATTESTATION_EXTENSION_ALLOWLIST_POLICY_NAME" />.</translation> <translation id="4203389617541558220">Limitar tempo de execução do dispositivo agendando reinicializações automáticas. Quando esta política é definida, especifica o tempo de atividade do dispositivo, após o qual uma reinicialização automática é agendada. @@ -3195,6 +3200,9 @@ Se esta política for deixada sem definição, o comportamento padrão será não permitir para usuários gerenciados por empresas e permitir para usuários não gerenciados.</translation> <translation id="5584132346604748282">Controla os serviços de localização do Google para Android</translation> +<translation id="5585568978223984334">Esta política especifica as extensões que podem usar as funções da <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> para atestado remoto. As extensões precisam ser adicionadas a esta lista para usar a API. + + Se uma extensão não estiver na lista ou se a lista não for definida, a chamada para a API falhará com um código de erro.</translation> <translation id="5586942249556966598">Não fazer nada</translation> <translation id="5590494712401018042">Especifica o percentual pelo qual o intervalo de escurecimento da tela é calculado quando o dispositivo está no modo de apresentação.
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb index 189f3d6..d63b693 100644 --- a/components/policy/resources/policy_templates_uk.xtb +++ b/components/policy/resources/policy_templates_uk.xtb
@@ -2226,6 +2226,11 @@ Якщо це правило не налаштовано, функцію "Виділення символу вставки" на екрані входу вимкнено, але користувач може будь-коли ввімкнути її.</translation> <translation id="4183229833636799228">Налаштування плагіна <ph name="FLASH_PLUGIN_NAME" /> за умовчанням</translation> <translation id="4192388905594723944">URL-адреса для перевірки маркера автентифікації клієнта віддаленого доступу</translation> +<translation id="4196466220333757818">Це правило визначає розширення, яким дозволено використовувати функцію <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> <ph name="CHALLENGE_USER_KEY_FUNCTION" /> для віддаленого засвідчення. Щоб скористатись API, розширення потрібно додати в цей список. + + Якщо розширення немає в списку або список не налаштовано, виклики API закінчуватимуться помилкою. + + Це правило більше не підтримується. Натомість використовуйте правило <ph name="ATTESTATION_EXTENSION_ALLOWLIST_POLICY_NAME" />.</translation> <translation id="4203389617541558220">Обмежує режим роботи пристрою шляхом планування автоматичних перезавантажень. Якщо це правило встановлено, воно визначає тривалість режиму роботи пристрою, після якого заплановане автоматичне перезавантаження. @@ -3238,6 +3243,9 @@ Якщо це правило не налаштовано, за умовчанням дозвіл мають лише користувачі, якими не керує адміністратор.</translation> <translation id="5584132346604748282">Контролює служби локації Google на пристрої Android</translation> +<translation id="5585568978223984334">Це правило визначає розширення, яким дозволено використовувати функції <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> для віддаленого засвідчення. Щоб скористатись API, розширення потрібно додати в цей список. + + Якщо розширення немає в списку або список не налаштовано, виклики API закінчуватимуться помилкою.</translation> <translation id="5586942249556966598">Нічого не робити</translation> <translation id="5590494712401018042">Указує відсоток, за яким масштабується затримка затемнення екрана, коли пристрій працює в режимі презентації. @@ -5102,7 +5110,7 @@ Якщо це правило не налаштовано, веб-сайти зможуть запитувати дозвіл, але користувачі матимуть можливість змінити цей параметр.</translation> <translation id="8274603902181597201">Видалити домашній каталог eCryptfs і перейти на нову версію із шифруванням ext4.</translation> -<translation id="8284296539558710573">Сповіщення щодо міждоменноїавтентифікації HTTP</translation> +<translation id="8284296539558710573">Міждоменні запити автентифікації HTTP</translation> <translation id="8285435910062771358">Лупу для повноекранного режиму ввімкнено</translation> <translation id="8288199156259560552">Увімкнути службу локації Google на пристрої Android</translation> <translation id="8290875622178450531">Увімкнути спеціальну можливість "Диктування".
diff --git a/components/strings/components_chromium_strings_ar.xtb b/components/strings/components_chromium_strings_ar.xtb index 9fe88ed..a34a45c 100644 --- a/components/strings/components_chromium_strings_ar.xtb +++ b/components/strings/components_chromium_strings_ar.xtb
@@ -26,7 +26,7 @@ <ph name="ADVANCED_TITLE" /> > <ph name="PROXIES_TITLE" /> - وتأكد من ضبط التهيئة على "بلا خادم وكيل" أو "مباشر."</translation> + وتأكد من ضبط الإعداد على "بلا خادم وكيل" أو "مباشر."</translation> <translation id="6613594504749178791">ستسري التغييرات في المرة التالية التي تعيد فيها تشغيل Chromium.</translation> <translation id="7861509383340276692">انتقل إلى قائمة Chromium >
diff --git a/components/strings/components_google_chrome_strings_ar.xtb b/components/strings/components_google_chrome_strings_ar.xtb index 105f13a..eeddeb6 100644 --- a/components/strings/components_google_chrome_strings_ar.xtb +++ b/components/strings/components_google_chrome_strings_ar.xtb
@@ -18,7 +18,7 @@ <ph name="ADVANCED_TITLE" /> > <ph name="PROXIES_TITLE" /> - وتأكد من ضبط التهيئة على "بلا خادم وكيل" أو "مباشر."</translation> + وتأكد من ضبط الإعداد على "بلا خادم وكيل" أو "مباشر."</translation> <translation id="6341737370356890233">انتقل إلى قائمة Chrome > <ph name="SETTINGS_TITLE" />
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb index 1f54c8a5..759cdb76 100644 --- a/components/strings/components_strings_ar.xtb +++ b/components/strings/components_strings_ar.xtb
@@ -193,7 +193,7 @@ <translation id="168841957122794586">تحتوي شهادة الخادم على مفتاح ترميز ضعيف.</translation> <translation id="1697532407822776718">أنت الآن على أتم استعداد.</translation> <translation id="1703835215927279855">خطاب</translation> -<translation id="1706954506755087368">{1,plural, =1{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ من المفترض أن تبدأ شهادة أمانه من الغد. ربما يكون السبب في ذلك خطأ في التهيئة أو مهاجمًا يعترض اتصالك.}zero{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ من المفترض أن تبدأ شهادة أمانه خلال # يوم في المستقبل. ربما يكون السبب في ذلك خطأ في التهيئة أو مهاجمًا يعترض اتصالك.}two{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ من المفترض أن تبدأ شهادة أمانه خلال يومين (#) في المستقبل. ربما يكون السبب في ذلك خطأ في التهيئة أو مهاجمًا يعترض اتصالك.}few{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ من المفترض أن تبدأ شهادة أمانه خلال # أيام في المستقبل. ربما يكون السبب في ذلك خطأ في التهيئة أو مهاجمًا يعترض اتصالك.}many{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ من المفترض أن تبدأ شهادة أمانه خلال # يومًا في المستقبل. ربما يكون السبب في ذلك خطأ في التهيئة أو مهاجمًا يعترض اتصالك.}other{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ من المفترض أن تبدأ شهادة أمانه خلال # يوم في المستقبل. ربما يكون السبب في ذلك خطأ في التهيئة أو مهاجمًا يعترض اتصالك.}}</translation> +<translation id="1706954506755087368">{1,plural, =1{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ من المفترض أن تبدأ شهادة أمانه من الغد. ربما يكون السبب في ذلك خطأ في الإعداد أو مهاجمًا يعترض اتصالك.}zero{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ من المفترض أن تبدأ شهادة أمانه خلال # يوم في المستقبل. ربما يكون السبب في ذلك خطأ في الإعداد أو مهاجمًا يعترض اتصالك.}two{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ من المفترض أن تبدأ شهادة أمانه خلال يومين (#) في المستقبل. ربما يكون السبب في ذلك خطأ في الإعداد أو مهاجمًا يعترض اتصالك.}few{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ من المفترض أن تبدأ شهادة أمانه خلال # أيام في المستقبل. ربما يكون السبب في ذلك خطأ في الإعداد أو مهاجمًا يعترض اتصالك.}many{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ من المفترض أن تبدأ شهادة أمانه خلال # يومًا في المستقبل. ربما يكون السبب في ذلك خطأ في الإعداد أو مهاجمًا يعترض اتصالك.}other{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ من المفترض أن تبدأ شهادة أمانه خلال # يوم في المستقبل. ربما يكون السبب في ذلك خطأ في الإعداد أو مهاجمًا يعترض اتصالك.}}</translation> <translation id="1710259589646384581">نظام التشغيل</translation> <translation id="1712552549805331520">يريد <ph name="URL" /> تخزين بيانات على جهاز الكمبيوتر المحلي بشكل دائم.</translation> <translation id="1713628304598226412">الدُرج 2</translation> @@ -283,7 +283,7 @@ <translation id="2053553514270667976">الرمز البريدي</translation> <translation id="2064691555167957331">{COUNT,plural, =1{اقتراح واحد}zero{# اقتراح}two{اقتراحان (#)}few{# اقتراحات}many{# اقتراحًا}other{# اقتراح}}</translation> <translation id="2079545284768500474">تراجع</translation> -<translation id="20817612488360358">تم تعيين إعدادات الخادم الوكيل ليتم استخدامها وتم أيضًا تحديد تهيئة صريحة للخادم الوكيل.</translation> +<translation id="20817612488360358">تم تعيين إعدادات الخادم الوكيل ليتم استخدامها وتم أيضًا تحديد إعداد صريح للخادم الوكيل.</translation> <translation id="2082238445998314030">النتيجة <ph name="RESULT_NUMBER" /> من <ph name="TOTAL_RESULTS" /></translation> <translation id="2091887806945687916">الصوت</translation> <translation id="2094505752054353250">النطاق غير متطابق</translation> @@ -717,7 +717,7 @@ <translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation> <translation id="3939773374150895049">هل تريد استخدم WebAuthn بدلاً من رمز التحقق من البطاقة (CVC)؟</translation> <translation id="3946209740501886391">السؤال دائمًا على الموقع الإلكتروني هذا</translation> -<translation id="3949571496842715403">لم يتمكن هذا الخادم من إثبات أنه <ph name="DOMAIN" />؛ بل إن شهادة الأمان التابعة له لا تُحدّد الأسماء البديلة للمضيفات. وربما يكون السبب في ذلك وجود خطأ في التهيئة أو اعتراض أحد المهاجمين للاتصال.</translation> +<translation id="3949571496842715403">لم يتمكن هذا الخادم من إثبات أنه <ph name="DOMAIN" />؛ بل إن شهادة الأمان التابعة له لا تُحدّد الأسماء البديلة للمضيفات. وربما يكون السبب في ذلك وجود خطأ في الإعداد أو اعتراض أحد المهاجمين للاتصال.</translation> <translation id="3949601375789751990">يظهر سجلّ التصفّح هنا</translation> <translation id="3949870428812919180">لا تتوفر طرق دفع محفوظة</translation> <translation id="3950820424414687140">تسجيل الدخول</translation> @@ -858,7 +858,7 @@ <translation id="4432792777822557199">ستتم ترجمة الصفحات باللغة <ph name="SOURCE_LANGUAGE" /> إلى اللغة <ph name="TARGET_LANGUAGE" /> من الآن فصاعدًا</translation> <translation id="4434045419905280838">النوافذ المنبثقة وإعادة التوجيه</translation> <translation id="4435702339979719576">بطاقة بريدية)</translation> -<translation id="443673843213245140">تم إيقاف استخدام الخادم الوكيل ولكن تم تحديد تهيئة صريحة للخادم الوكيل.</translation> +<translation id="443673843213245140">تم إيقاف استخدام الخادم الوكيل ولكن تم تحديد إعداد صريح للخادم الوكيل.</translation> <translation id="4466881336512663640">سيتم فقدان تغييرات النموذج. هل تريد فعلاً المتابعة؟</translation> <translation id="4476953670630786061">هذا النموذج غير آمن. تمّ إيقاف ميزة "الملء التلقائي".</translation> <translation id="4477350412780666475">المقطع الصوتي التالي</translation> @@ -985,7 +985,7 @@ <translation id="5023310440958281426">التحقق من سياسات المشرف</translation> <translation id="5029568752722684782">محو النسخة</translation> <translation id="5030338702439866405">جهة الإصدار</translation> -<translation id="503069730517007720">يلزم شهادة جذر لـ "<ph name="SOFTWARE_NAME" />" ولكن لم يتم تثبيتها. ينبغي على مشرف تقنية المعلومات أن يلقي نظرة على تعليمات التهيئة لـ "<ph name="SOFTWARE_NAME" />" لإصلاح تلك المشكلة. <ph name="FURTHER_EXPLANATION" /></translation> +<translation id="503069730517007720">يلزم شهادة جذر لـ "<ph name="SOFTWARE_NAME" />" ولكن لم يتم تثبيتها. ينبغي على مشرف تقنية المعلومات أن يلقي نظرة على تعليمات الإعداد لـ "<ph name="SOFTWARE_NAME" />" لإصلاح تلك المشكلة. <ph name="FURTHER_EXPLANATION" /></translation> <translation id="5031870354684148875">لمحة عن "ترجمة Google"</translation> <translation id="503498442187459473">يريد <ph name="HOST" /> استخدام الكاميرا والميكروفون.</translation> <translation id="5039804452771397117">سماح</translation> @@ -1514,7 +1514,7 @@ <translation id="7243010569062352439"><ph name="PASSWORDS" />، <ph name="SIGNIN_DATA" /></translation> <translation id="724691107663265825">يحتوي الموقع الإلكتروني المقصود على برامج ضارة</translation> <translation id="724975217298816891">أدخل تاريخ انتهاء الصلاحية ورمز التحقق من البطاقة (CVC) لـ <ph name="CREDIT_CARD" /> لتحديث تفاصيل بطاقتك. بعد تأكيدك، ستتم مشاركة تفاصيل بطاقتك مع هذا الموقع.</translation> -<translation id="7251437084390964440">لا تتوافق إعداد الشبكة مع معيار ONC. وقد لا تُستورَد أجزاء من التهيئة. +<translation id="7251437084390964440">لا يتوافق إعداد الشبكة مع معيار ONC. وقد لا تُستورَد أجزاء من الإعداد. التفاصيل الإضافية: <ph name="DEBUG_INFO" /></translation> <translation id="725866823122871198">تعذر إنشاء اتصال خاص بـ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> نظرًا لأن التاريخ والوقت لجهاز الكمبيوتر (<ph name="DATE_AND_TIME" />) غير صحيحين.</translation>
diff --git a/components/test/data/autofill_assistant/html/form_target_website.html b/components/test/data/autofill_assistant/html/form_target_website.html index 79588b0..f499803b 100644 --- a/components/test/data/autofill_assistant/html/form_target_website.html +++ b/components/test/data/autofill_assistant/html/form_target_website.html
@@ -104,6 +104,16 @@ </form> </div> + <h4>Address</h4> + <div> + <form id="form4" action="https://example.com" method="post"> + Name: <input type="text" id="address_name" name="name" autocomplete="name"/><br/> + Street: <input type="text" id="street" name="street-address" autocomplete="street-address"/><br/> + Zip: <input type="text" id="zip" autocomplete="postal-code"/><br/> + State: <input type="text" id="state" autocomplete="address-level1"/><br/> + </form> + </div> + <iframe id="iframe" name="test_iframe" width="100%" height="500" src= "autofill_assistant_target_website_iframe_one.html"></iframe> </body>
diff --git a/components/viz/common/quads/aggregated_render_pass.h b/components/viz/common/quads/aggregated_render_pass.h index cd0161a..a2b0cd5 100644 --- a/components/viz/common/quads/aggregated_render_pass.h +++ b/components/viz/common/quads/aggregated_render_pass.h
@@ -89,6 +89,12 @@ // Uniquely identifies the render pass in the aggregated frame. AggregatedRenderPassId id; + // The type of color content present in this RenderPass. + gfx::ContentColorUsage content_color_usage = gfx::ContentColorUsage::kSRGB; + + // Indicates current RenderPass is a color conversion pass. + bool is_color_conversion_pass = false; + private: template <typename DrawQuadType> DrawQuadType* CopyFromAndAppendTypedDrawQuad(const DrawQuad* quad) {
diff --git a/components/viz/common/quads/compositor_render_pass.cc b/components/viz/common/quads/compositor_render_pass.cc index e24c42a9..0ddff20 100644 --- a/components/viz/common/quads/compositor_render_pass.cc +++ b/components/viz/common/quads/compositor_render_pass.cc
@@ -88,7 +88,6 @@ const cc::FilterOperations& filters, const cc::FilterOperations& backdrop_filters, const base::Optional<gfx::RRectF>& backdrop_filter_bounds, - gfx::ContentColorUsage content_color_usage, bool has_transparent_background, bool cache_render_pass, bool has_damage_from_contributing_content, @@ -102,7 +101,6 @@ this->filters = filters; this->backdrop_filters = backdrop_filters; this->backdrop_filter_bounds = backdrop_filter_bounds; - this->content_color_usage = content_color_usage; this->has_transparent_background = has_transparent_background; this->cache_render_pass = cache_render_pass; this->has_damage_from_contributing_content = @@ -224,9 +222,8 @@ quad_list.size()); copy_pass->SetAll(id, output_rect, damage_rect, transform_to_root_target, filters, backdrop_filters, backdrop_filter_bounds, - content_color_usage, has_transparent_background, - cache_render_pass, has_damage_from_contributing_content, - generate_mipmap); + has_transparent_background, cache_render_pass, + has_damage_from_contributing_content, generate_mipmap); if (shared_quad_state_list.empty()) { DCHECK(quad_list.empty());
diff --git a/components/viz/common/quads/compositor_render_pass.h b/components/viz/common/quads/compositor_render_pass.h index 3dd9bce..c0a6f7b 100644 --- a/components/viz/common/quads/compositor_render_pass.h +++ b/components/viz/common/quads/compositor_render_pass.h
@@ -67,7 +67,6 @@ const cc::FilterOperations& filters, const cc::FilterOperations& backdrop_filters, const base::Optional<gfx::RRectF>& backdrop_filter_bounds, - gfx::ContentColorUsage content_color_usage, bool has_transparent_background, bool cache_render_pass, bool has_damage_from_contributing_content,
diff --git a/components/viz/common/quads/compositor_render_pass_unittest.cc b/components/viz/common/quads/compositor_render_pass_unittest.cc index 603546c..cda0bebd 100644 --- a/components/viz/common/quads/compositor_render_pass_unittest.cc +++ b/components/viz/common/quads/compositor_render_pass_unittest.cc
@@ -21,26 +21,6 @@ namespace viz { namespace { -struct RenderPassSize { - // If you add a new field to this class, make sure to add it to the - // Copy() tests. - uint64_t id; - gfx::Rect output_rect; - gfx::Rect damage_rect; - gfx::Transform transform_to_root_target; - cc::FilterOperations filters; - cc::FilterOperations backdrop_filters; - base::Optional<gfx::RRectF> backdrop_filter_bounds; - gfx::ContentColorUsage content_color_usage; - bool has_transparent_background; - bool cache_render_pass; - bool has_damage_from_contributing_component; - bool generate_mipmap; - std::vector<std::unique_ptr<CopyOutputRequest>> copy_callbacks; - QuadList quad_list; - SharedQuadStateList shared_quad_state_list; -}; - static void CompareRenderPassLists( const CompositorRenderPassList& expected_list, const CompositorRenderPassList& actual_list) { @@ -75,7 +55,8 @@ } } -TEST(CompositorRenderPassTest, CopyShouldBeIdenticalExceptIdAndQuads) { +TEST(CompositorRenderPassTest, + AggregatedCopyShouldBeIdenticalExceptIdAndQuads) { AggregatedRenderPassId render_pass_id{3u}; gfx::Rect output_rect(45, 22, 120, 13); gfx::Transform transform_to_root = @@ -133,8 +114,6 @@ // The copy request should not be copied/duplicated. EXPECT_EQ(1u, pass->copy_requests.size()); EXPECT_EQ(0u, copy->copy_requests.size()); - - EXPECT_EQ(sizeof(RenderPassSize), sizeof(CompositorRenderPass)); } TEST(CompositorRenderPassTest, CopyAllShouldBeIdentical) { @@ -151,7 +130,6 @@ backdrop_filters.Append(cc::FilterOperation::CreateInvertFilter(1.0)); base::Optional<gfx::RRectF> backdrop_filter_bounds( {10, 20, 130, 140, 1, 2, 3, 4, 5, 6, 7, 8}); - gfx::ContentColorUsage content_color_usage = gfx::ContentColorUsage::kHDR; bool has_transparent_background = true; bool cache_render_pass = false; bool has_damage_from_contributing_content = false; @@ -159,7 +137,7 @@ auto pass = CompositorRenderPass::Create(); pass->SetAll(id, output_rect, damage_rect, transform_to_root, filters, - backdrop_filters, backdrop_filter_bounds, content_color_usage, + backdrop_filters, backdrop_filter_bounds, has_transparent_background, cache_render_pass, has_damage_from_contributing_content, generate_mipmap); @@ -207,20 +185,18 @@ contrib_backdrop_filters.Append(cc::FilterOperation::CreateSaturateFilter(1)); base::Optional<gfx::RRectF> contrib_backdrop_filter_bounds( {20, 30, 140, 150, 1, 2, 3, 4, 5, 6, 7, 8}); - gfx::ContentColorUsage contrib_content_color_usage = - gfx::ContentColorUsage::kHDR; bool contrib_has_transparent_background = true; bool contrib_cache_render_pass = false; bool contrib_has_damage_from_contributing_content = false; bool contrib_generate_mipmap = false; auto contrib = CompositorRenderPass::Create(); - contrib->SetAll( - contrib_id, contrib_output_rect, contrib_damage_rect, - contrib_transform_to_root, contrib_filters, contrib_backdrop_filters, - contrib_backdrop_filter_bounds, contrib_content_color_usage, - contrib_has_transparent_background, contrib_cache_render_pass, - contrib_has_damage_from_contributing_content, contrib_generate_mipmap); + contrib->SetAll(contrib_id, contrib_output_rect, contrib_damage_rect, + contrib_transform_to_root, contrib_filters, + contrib_backdrop_filters, contrib_backdrop_filter_bounds, + contrib_has_transparent_background, contrib_cache_render_pass, + contrib_has_damage_from_contributing_content, + contrib_generate_mipmap); SharedQuadState* contrib_shared_state = contrib->CreateAndAppendSharedQuadState(); @@ -264,7 +240,6 @@ backdrop_filters.Append(cc::FilterOperation::CreateInvertFilter(1.0)); base::Optional<gfx::RRectF> backdrop_filter_bounds( {10, 20, 130, 140, 1, 2, 3, 4, 5, 6, 7, 8}); - gfx::ContentColorUsage content_color_usage = gfx::ContentColorUsage::kHDR; bool has_transparent_background = true; bool cache_render_pass = false; bool has_damage_from_contributing_content = false; @@ -272,7 +247,7 @@ auto pass = CompositorRenderPass::Create(); pass->SetAll(id, output_rect, damage_rect, transform_to_root, filters, - backdrop_filters, backdrop_filter_bounds, content_color_usage, + backdrop_filters, backdrop_filter_bounds, has_transparent_background, cache_render_pass, has_damage_from_contributing_content, generate_mipmap);
diff --git a/components/viz/common/quads/render_pass_internal.h b/components/viz/common/quads/render_pass_internal.h index 64544c0..6949c19 100644 --- a/components/viz/common/quads/render_pass_internal.h +++ b/components/viz/common/quads/render_pass_internal.h
@@ -49,9 +49,6 @@ // Clipping bounds for backdrop filter. base::Optional<gfx::RRectF> backdrop_filter_bounds; - // The type of color content present in this RenderPass. - gfx::ContentColorUsage content_color_usage = gfx::ContentColorUsage::kSRGB; - // If false, the pixels in the render pass' texture are all opaque. bool has_transparent_background = true; @@ -64,9 +61,6 @@ // Generate mipmap for trilinear filtering, applied to render pass' texture. bool generate_mipmap = false; - // Indicates current RenderPass is a color conversion pass. - bool is_color_conversion_pass = false; - // If non-empty, the renderer should produce a copy of the render pass' // contents as a bitmap, and give a copy of the bitmap to each callback in // this list.
diff --git a/components/viz/service/display/display_unittest.cc b/components/viz/service/display/display_unittest.cc index 7425dd4..500b0bc 100644 --- a/components/viz/service/display/display_unittest.cc +++ b/components/viz/service/display/display_unittest.cc
@@ -754,11 +754,11 @@ auto bd_pass = CompositorRenderPass::Create(); cc::FilterOperations backdrop_filters; backdrop_filters.Append(cc::FilterOperation::CreateBlurFilter(5.0)); - bd_pass->SetAll( - render_pass_id_generator.GenerateNextId(), sub_surface_rect, - no_damage, gfx::Transform(), cc::FilterOperations(), backdrop_filters, - gfx::RRectF(gfx::RectF(sub_surface_rect), 0), - gfx::ContentColorUsage::kSRGB, false, false, false, false); + bd_pass->SetAll(render_pass_id_generator.GenerateNextId(), + sub_surface_rect, no_damage, gfx::Transform(), + cc::FilterOperations(), backdrop_filters, + gfx::RRectF(gfx::RectF(sub_surface_rect), 0), false, + false, false, false); pass_list.push_back(std::move(bd_pass)); CompositorFrame frame = CompositorFrameBuilder()
diff --git a/components/viz/service/display_embedder/output_presenter.cc b/components/viz/service/display_embedder/output_presenter.cc index 6679d806a..cd49041 100644 --- a/components/viz/service/display_embedder/output_presenter.cc +++ b/components/viz/service/display_embedder/output_presenter.cc
@@ -93,8 +93,11 @@ .fSignalSemaphores = end_semaphores_.data(), }; scoped_skia_write_access_->surface()->flush(flush_info); - DCHECK(scoped_skia_write_access_->surface()->getContext()); - scoped_skia_write_access_->surface()->getContext()->submit(); + auto* direct_context = scoped_skia_write_access_->surface() + ->recordingContext() + ->asDirectContext(); + DCHECK(direct_context); + direct_context->submit(); } scoped_skia_write_access_.reset(); end_semaphores_.clear();
diff --git a/content/browser/back_forward_cache_browsertest.cc b/content/browser/back_forward_cache_browsertest.cc index 8247a21..36410794 100644 --- a/content/browser/back_forward_cache_browsertest.cc +++ b/content/browser/back_forward_cache_browsertest.cc
@@ -117,7 +117,13 @@ class BackForwardCacheBrowserTest : public ContentBrowserTest, public WebContentsObserver { public: - ~BackForwardCacheBrowserTest() override = default; + ~BackForwardCacheBrowserTest() override { + if (fail_for_unexpected_messages_while_cached_) { + ExpectTotalCount( + "BackForwardCache.UnexpectedRendererToBrowserMessage.InterfaceName", + 0); + } + } protected: using UkmMetrics = ukm::TestUkmRecorder::HumanReadableUkmMetrics; @@ -139,7 +145,7 @@ EnableFeatureAndSetParams(features::kBackForwardCache, "TimeToLiveInBackForwardCacheInSeconds", "3600"); EnableFeatureAndSetParams(features::kBackForwardCache, - "message_handling_when_cached", "kill"); + "message_handling_when_cached", "log"); EnableFeatureAndSetParams( features::kBackForwardCache, "enable_same_site", same_site_back_forward_cache_enabled_ ? "true" : "false"); @@ -449,6 +455,12 @@ histogram_tester_.ExpectUniqueSample(name, sample, expected_count); } + // Do not fail this test if a message from a renderer arrives at the browser + // for a cached page. + void DoNotFailForUnexpectedMessagesWhileCached() { + fail_for_unexpected_messages_while_cached_ = false; + } + base::HistogramTester histogram_tester_; protected: @@ -491,6 +503,9 @@ // Indicates whether metrics for all sites regardless of the domains are // checked or not. bool check_all_sites_ = true; + // Whether we should fail the test if a message arrived at the browser from a + // renderer for a bfcached page. + bool fail_for_unexpected_messages_while_cached_ = true; }; // Match RenderFrameHostImpl* that are in the BackForwardCache. @@ -740,15 +755,11 @@ } // Navigate from back and forward repeatedly. -// Disable the test due to flaky: crbug.com/1099395. -#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_MAC) -#define MAYBE_NavigateBackForwardRepeatedly \ - DISABLED_NavigateBackForwardRepeatedly -#else -#define MAYBE_NavigateBackForwardRepeatedly _NavigateBackForwardRepeatedly -#endif IN_PROC_BROWSER_TEST_F(BackForwardCacheBrowserTest, - MAYBE_NavigateBackForwardRepeatedly) { + NavigateBackForwardRepeatedly) { + // Do not check for unexpected messages because the input task queue is not + // currently frozen, causing flakes in this test: crbug.com/1099395. + DoNotFailForUnexpectedMessagesWhileCached(); ASSERT_TRUE(embedded_test_server()->Start()); GURL url_a(embedded_test_server()->GetURL("a.com", "/title1.html")); GURL url_b(embedded_test_server()->GetURL("b.com", "/title1.html")); @@ -816,8 +827,7 @@ // The current page can't enter the BackForwardCache if another page can script // it. This can happen when one document opens a popup using window.open() for // instance. It prevents the BackForwardCache from being used. -// Flaky on all platforms. http://crbug.com/1116023 -IN_PROC_BROWSER_TEST_F(BackForwardCacheBrowserTest, DISABLED_WindowOpen) { +IN_PROC_BROWSER_TEST_F(BackForwardCacheBrowserTest, WindowOpen) { // This test assumes cross-site navigation staying in the same // BrowsingInstance to use a different SiteInstance. Otherwise, it will // timeout at step 2). @@ -6834,14 +6844,12 @@ } // namespace -IN_PROC_BROWSER_TEST_F( - BackForwardCacheBrowserTest, - ProcessKilledIfMessageReceivedOnAssociatedInterfaceWhileCached) { +IN_PROC_BROWSER_TEST_F(BackForwardCacheBrowserTest, + MessageReceivedOnAssociatedInterfaceWhileCached) { + DoNotFailForUnexpectedMessagesWhileCached(); ASSERT_TRUE(embedded_test_server()->Start()); GURL url_a(embedded_test_server()->GetURL("a.com", "/title1.html")); GURL url_b(embedded_test_server()->GetURL("b.com", "/title1.html")); - url::Origin origin_a = url::Origin::Create(url_a); - url::Origin origin_b = url::Origin::Create(url_b); // 1) Navigate to A. EXPECT_TRUE(NavigateToURL(shell(), url_a)); @@ -6861,15 +6869,11 @@ remote.BindNewPipeAndPassReceiver(), rfh_a->CreateMessageFilterForAssociatedReceiver(mojom::Echo::Name_)); - ScopedAllowRendererCrashes allow_crash(rfh_a->GetProcess()); - RenderProcessHostBadIpcMessageWaiter bad_message_waiter(rfh_a->GetProcess()); + base::RunLoop loop; + remote->EchoString( + "", base::BindLambdaForTesting([&](const std::string&) { loop.Quit(); })); + loop.Run(); - remote->EchoString("", base::NullCallback()); - - EXPECT_THAT(bad_message_waiter.Wait(), - testing::Optional( - bad_message::RFH_RECEIVED_ASSOCIATED_MESSAGE_WHILE_BFCACHED)); - EXPECT_TRUE(delete_observer_rfh_a.deleted()); ExpectBucketCount( "BackForwardCache.UnexpectedRendererToBrowserMessage.InterfaceName", base::HistogramBase::Sample( @@ -6879,7 +6883,99 @@ IN_PROC_BROWSER_TEST_F( BackForwardCacheBrowserTest, - ProcessNotKilledIfMessageReceivedOnAssociatedInterfaceWhileFreezing) { + MessageReceivedOnAssociatedInterfaceWhileCachedForProcessWithNonCachedPages) { + ASSERT_TRUE(embedded_test_server()->Start()); + GURL url_a(embedded_test_server()->GetURL("/title1.html")); + GURL url_b(embedded_test_server()->GetURL("/title2.html")); + + // 1) Navigate to A. + EXPECT_TRUE(NavigateToURL(shell(), url_a)); + RenderFrameHostImpl* rfh_a = current_frame_host(); + RenderFrameDeletedObserver delete_observer_rfh_a(rfh_a); + PageLifecycleStateManagerTestDelegate delegate( + rfh_a->render_view_host()->GetPageLifecycleStateManager()); + + // 2) Navigate to B. + EXPECT_TRUE(NavigateToURL(shell(), url_b)); + delegate.WaitForInBackForwardCacheAck(); + RenderFrameHostImpl* rfh_b = current_frame_host(); + ASSERT_FALSE(delete_observer_rfh_a.deleted()); + EXPECT_TRUE(rfh_a->IsInBackForwardCache()); + // Make sure both pages are on the same process (they are same site so they + // should). + ASSERT_EQ(rfh_a->GetProcess(), rfh_b->GetProcess()); + + mojo::Remote<mojom::Echo> remote; + EchoFakeWithFilter echo( + remote.BindNewPipeAndPassReceiver(), + rfh_a->CreateMessageFilterForAssociatedReceiver(mojom::Echo::Name_)); + + remote->EchoString("", base::NullCallback()); + // Give the killing a chance to run. (We do not expect a kill but need to + // "wait" for it to not happen) + base::RunLoop().RunUntilIdle(); + + // 3) Go back to A. + web_contents()->GetController().GoBack(); + EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); + + ExpectOutcome(BackForwardCacheMetrics::HistoryNavigationOutcome::kRestored, + FROM_HERE); +} + +IN_PROC_BROWSER_TEST_F( + BackForwardCacheBrowserTest, + MessageReceivedOnAssociatedInterfaceForProcessWithMultipleCachedPages) { + DoNotFailForUnexpectedMessagesWhileCached(); + web_contents() + ->GetController() + .GetBackForwardCache() + .set_cache_size_limit_for_testing(10); + ASSERT_TRUE(embedded_test_server()->Start()); + GURL url_a_1(embedded_test_server()->GetURL("a.com", "/title1.html")); + GURL url_a_2(embedded_test_server()->GetURL("a.com", "/title2.html")); + GURL url_b(embedded_test_server()->GetURL("b.com", "/title1.html")); + + // Get url_a_1 and url_a_2 into the cache. + EXPECT_TRUE(NavigateToURL(shell(), url_a_1)); + RenderFrameHostImpl* rfh_a_1 = current_frame_host(); + RenderFrameDeletedObserver delete_observer_rfh_a_1(rfh_a_1); + + EXPECT_TRUE(NavigateToURL(shell(), url_a_2)); + RenderFrameHostImpl* rfh_a_2 = current_frame_host(); + RenderFrameDeletedObserver delete_observer_rfh_a_2(rfh_a_2); + + EXPECT_TRUE(NavigateToURL(shell(), url_b)); + RenderFrameHostImpl* rfh_b = current_frame_host(); + RenderFrameDeletedObserver delete_observer_rfh_b(rfh_b); + + ASSERT_FALSE(delete_observer_rfh_a_1.deleted()); + ASSERT_FALSE(delete_observer_rfh_a_2.deleted()); + EXPECT_TRUE(rfh_a_1->IsInBackForwardCache()); + EXPECT_TRUE(rfh_a_2->IsInBackForwardCache()); + ASSERT_EQ(rfh_a_1->GetProcess(), rfh_a_2->GetProcess()); + + mojo::Remote<mojom::Echo> remote; + EchoFakeWithFilter echo( + remote.BindNewPipeAndPassReceiver(), + rfh_a_1->CreateMessageFilterForAssociatedReceiver(mojom::Echo::Name_)); + + base::RunLoop loop; + remote->EchoString( + "", base::BindLambdaForTesting([&](const std::string&) { loop.Quit(); })); + loop.Run(); + + ExpectBucketCount( + "BackForwardCache.UnexpectedRendererToBrowserMessage.InterfaceName", + base::HistogramBase::Sample( + static_cast<int32_t>(base::HashMetricName(mojom::Echo::Name_))), + 1); + + EXPECT_FALSE(delete_observer_rfh_b.deleted()); +} + +IN_PROC_BROWSER_TEST_F(BackForwardCacheBrowserTest, + MessageReceivedOnAssociatedInterfaceWhileFreezing) { ASSERT_TRUE(embedded_test_server()->Start()); GURL url_a(embedded_test_server()->GetURL("a.com", "/title1.html")); GURL url_b(embedded_test_server()->GetURL("b.com", "/title1.html"));
diff --git a/content/browser/background_fetch/background_fetch_test_data_manager.cc b/content/browser/background_fetch/background_fetch_test_data_manager.cc index b1154dfb..0889962 100644 --- a/content/browser/background_fetch/background_fetch_test_data_manager.cc +++ b/content/browser/background_fetch/background_fetch_test_data_manager.cc
@@ -7,6 +7,7 @@ #include <utility> #include "base/run_loop.h" +#include "base/task/post_task.h" #include "content/browser/blob_storage/chrome_blob_storage_context.h" #include "content/browser/cache_storage/cache_storage_manager.h" #include "content/browser/cache_storage/legacy/legacy_cache_storage_manager.h" @@ -81,8 +82,16 @@ DCHECK(cache_manager_); mojo::PendingRemote<storage::mojom::BlobStorageContext> remote; - blob_storage_context_->BindMojoContext( - remote.InitWithNewPipeAndPassReceiver()); + + base::RunLoop run_loop(base::RunLoop::Type::kNestableTasksAllowed); + base::PostTaskAndReply( + FROM_HERE, {BrowserThread::IO}, + base::BindOnce(&ChromeBlobStorageContext::BindMojoContext, + blob_storage_context_, + remote.InitWithNewPipeAndPassReceiver()), + run_loop.QuitClosure()); + run_loop.Run(); + auto context = base::MakeRefCounted<BlobStorageContextWrapper>(std::move(remote)); cache_manager_->SetBlobParametersForCache(std::move(context));
diff --git a/content/browser/browser_interface_binders.cc b/content/browser/browser_interface_binders.cc index 573d9f8..c80f820 100644 --- a/content/browser/browser_interface_binders.cc +++ b/content/browser/browser_interface_binders.cc
@@ -25,6 +25,7 @@ #include "content/browser/image_capture/image_capture_impl.h" #include "content/browser/keyboard_lock/keyboard_lock_service_impl.h" #include "content/browser/loader/content_security_notifier.h" +#include "content/browser/media/midi_host.h" #include "content/browser/media/session/media_session_service_impl.h" #include "content/browser/picture_in_picture/picture_in_picture_service_impl.h" #include "content/browser/process_internals/process_internals.mojom.h" @@ -543,6 +544,15 @@ base::Unretained(host))); } + // BrowserMainLoop::GetInstance() may be null on unit tests. + if (BrowserMainLoop::GetInstance()) { + map->Add<midi::mojom::MidiSessionProvider>( + base::BindRepeating(&MidiHost::BindReceiver, + host->GetProcess()->GetID(), + BrowserMainLoop::GetInstance()->midi_service()), + GetIOThreadTaskRunner({})); + } + map->Add<blink::mojom::NotificationService>(base::BindRepeating( &RenderFrameHostImpl::CreateNotificationService, base::Unretained(host)));
diff --git a/content/browser/media/midi_host.cc b/content/browser/media/midi_host.cc index c6e0e155..07681bd 100644 --- a/content/browser/media/midi_host.cc +++ b/content/browser/media/midi_host.cc
@@ -128,6 +128,8 @@ // SendData() does. if (message[0] == kSysExByte) { if (!has_sys_ex_permission_) { + // TODO(987505): This should check permission with the Frame and not the + // Process. has_sys_ex_permission_ = ChildProcessSecurityPolicyImpl::GetInstance() ->CanSendMidiSysExMessage(renderer_process_id_);
diff --git a/content/browser/renderer_host/back_forward_cache_impl.cc b/content/browser/renderer_host/back_forward_cache_impl.cc index e8474266..a84a35f 100644 --- a/content/browser/renderer_host/back_forward_cache_impl.cc +++ b/content/browser/renderer_host/back_forward_cache_impl.cc
@@ -261,8 +261,6 @@ return kMessagePolicyNone; } else if (param == "dump") { return kMessagePolicyDump; - } else if (param == "kill") { - return kMessagePolicyKill; } else { DLOG(WARNING) << "Failed to parse field trial param " << kFieldTrialParam << " with string value " << param
diff --git a/content/browser/renderer_host/back_forward_cache_impl.h b/content/browser/renderer_host/back_forward_cache_impl.h index b077694..6492ba26 100644 --- a/content/browser/renderer_host/back_forward_cache_impl.h +++ b/content/browser/renderer_host/back_forward_cache_impl.h
@@ -51,7 +51,6 @@ kMessagePolicyNone, kMessagePolicyLog, kMessagePolicyDump, - kMessagePolicyKill, }; static MessageHandlingPolicyWhenCached
diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc index 6d2487d9..f1a81fc 100644 --- a/content/browser/renderer_host/navigation_request.cc +++ b/content/browser/renderer_host/navigation_request.cc
@@ -2372,8 +2372,9 @@ SiteInstanceImpl* instance = render_frame_host_->GetSiteInstance(); const IsolationContext& isolation_context = instance->GetIsolationContext(); if (!instance->HasSite() && - SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - isolation_context, common_params_->url)) { + SiteInstanceImpl::DoesSiteInfoRequireDedicatedProcess( + isolation_context, SiteInstanceImpl::ComputeSiteInfo( + isolation_context, common_params_->url))) { instance->ConvertToDefaultOrSetSite(common_params_->url); }
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc index 245f0f8..d398c2e 100644 --- a/content/browser/renderer_host/render_frame_host_impl.cc +++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -376,13 +376,13 @@ bool debug_url_set_ = false; }; -// This class can be added as a MessageFilter to a mojo receiver to kill the -// sending process if the associated frame is in the Back-Forward Cache. -// Documents that are in the bfcache should not be sending mojo messages back to -// the browser. -class KillIfInBackForwardCacheMessageFilter : public mojo::MessageFilter { +// This class can be added as a MessageFilter to a mojo receiver to detect +// messages received while the the associated frame is in the Back-Forward +// Cache. Documents that are in the bfcache should not be sending mojo messages +// back to the browser. +class BackForwardCacheMessageFilter : public mojo::MessageFilter { public: - explicit KillIfInBackForwardCacheMessageFilter( + explicit BackForwardCacheMessageFilter( RenderFrameHostImpl* render_frame_host, const char* interface_name, BackForwardCacheImpl::MessageHandlingPolicyWhenCached policy) @@ -390,12 +390,12 @@ interface_name_(interface_name), policy_(policy) {} - ~KillIfInBackForwardCacheMessageFilter() override = default; + ~BackForwardCacheMessageFilter() override = default; private: // mojo::MessageFilter overrides. bool WillDispatch(mojo::Message* message) override { - if (!IsFrameInBackForwardCache() || + if (!IsFrameInBackForwardCache() || ProcessHoldsNonCachedPages() || policy_ == BackForwardCacheImpl::kMessagePolicyNone) { return true; } @@ -404,8 +404,7 @@ << interface_name_ << " from frame in bfcache."; TRACE_EVENT2( - "content", - "KillIfInBackForwardCacheMessageFilter::WillDispatch bad_message", + "content", "BackForwardCacheMessageFilter::WillDispatch bad_message", "interface_name", interface_name_, "message_name", message->name()); base::UmaHistogramSparse( @@ -419,11 +418,6 @@ case BackForwardCacheImpl::kMessagePolicyDump: base::debug::DumpWithoutCrashing(); return true; - case BackForwardCacheImpl::kMessagePolicyKill: - bad_message::ReceivedBadMessage( - render_frame_host_->GetProcess(), - bad_message::RFH_RECEIVED_ASSOCIATED_MESSAGE_WHILE_BFCACHED); - return false; } } @@ -440,6 +434,14 @@ mgr->last_state_sent_to_renderer().is_in_back_forward_cache; } + // TODO(https://crbug.com/1125996): Remove once a well-behaved frozen + // RenderFrame never send IPCs messages, even if there are active pages in the + // process. + bool ProcessHoldsNonCachedPages() { + return RenderViewHostImpl::HasNonBackForwardCachedInstancesForProcess( + render_frame_host_->GetProcess()); + } + RenderFrameHostImpl* const render_frame_host_; const char* const interface_name_; const BackForwardCacheImpl::MessageHandlingPolicyWhenCached policy_; @@ -487,9 +489,9 @@ const char* interface_name, BackForwardCacheImpl::MessageHandlingPolicyWhenCached policy) { auto filter_chain = std::make_unique<MessageFilterChain>(); - filter_chain->Add(std::make_unique<KillIfInBackForwardCacheMessageFilter>( + filter_chain->Add(std::make_unique<BackForwardCacheMessageFilter>( render_frame_host, interface_name, policy)); - // KillIfInBackForwardCacheMessageFilter might drop messages so add + // BackForwardCacheMessageFilter might drop messages so add // ActiveURLMessageFilter at the end of the chain as we need to make sure that // the debug url is reset, that is, DidDispatchOrReject() is called if // WillDispatch().
diff --git a/content/browser/renderer_host/render_frame_host_manager.cc b/content/browser/renderer_host/render_frame_host_manager.cc index ea884b7e..6b0ea056 100644 --- a/content/browser/renderer_host/render_frame_host_manager.cc +++ b/content/browser/renderer_host/render_frame_host_manager.cc
@@ -106,8 +106,11 @@ // Check whether |destination_effective_url| would require a dedicated process // if we left it in the current BrowsingInstance. If so, there's no need to // swap BrowsingInstances. - if (SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - current_instance->GetIsolationContext(), destination_effective_url)) { + auto& current_isolation_context = current_instance->GetIsolationContext(); + if (SiteInstanceImpl::DoesSiteInfoRequireDedicatedProcess( + current_isolation_context, + SiteInstanceImpl::ComputeSiteInfo(current_isolation_context, + destination_effective_url))) { return false; } @@ -117,8 +120,10 @@ // current_instance->GetIsolationContext(). IsolationContext future_isolation_context( current_instance->GetBrowserContext()); - return SiteInstanceImpl::DoesSiteRequireDedicatedProcess( + auto future_site_info = SiteInstanceImpl::ComputeSiteInfo( future_isolation_context, destination_effective_url); + return SiteInstanceImpl::DoesSiteInfoRequireDedicatedProcess( + future_isolation_context, future_site_info); } bool IsSiteInstanceCompatibleWithErrorIsolation(SiteInstance* site_instance, @@ -1937,9 +1942,13 @@ features::kProcessSharingWithStrictSiteInstances)) { if (!frame_tree_node_->IsMainFrame()) { RenderFrameHostImpl* parent = frame_tree_node_->parent(); + auto& parent_isolation_context = + parent->GetSiteInstance()->GetIsolationContext(); bool dest_url_requires_dedicated_process = - SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - parent->GetSiteInstance()->GetIsolationContext(), dest_url); + SiteInstanceImpl::DoesSiteInfoRequireDedicatedProcess( + parent_isolation_context, + SiteInstanceImpl::ComputeSiteInfo(parent_isolation_context, + dest_url)); if (!parent->GetSiteInstance()->RequiresDedicatedProcess() && !dest_url_requires_dedicated_process) { return SiteInstanceDescriptor(parent->GetSiteInstance());
diff --git a/content/browser/renderer_host/render_frame_host_manager_browsertest.cc b/content/browser/renderer_host/render_frame_host_manager_browsertest.cc index 3f246d1a..da0196d 100644 --- a/content/browser/renderer_host/render_frame_host_manager_browsertest.cc +++ b/content/browser/renderer_host/render_frame_host_manager_browsertest.cc
@@ -8638,9 +8638,12 @@ FrameTreeNode* root = web_contents->GetFrameTree()->root(); RenderProcessHost* foo_process = nullptr; TestNavigationManager foo_manager(web_contents, foo_url); - EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - root->current_frame_host()->GetSiteInstance()->GetIsolationContext(), - GURL("http://foo.com"))); + auto& current_isolation_context = + root->current_frame_host()->GetSiteInstance()->GetIsolationContext(); + EXPECT_TRUE(SiteInstanceImpl::DoesSiteInfoRequireDedicatedProcess( + current_isolation_context, + SiteInstanceImpl::ComputeSiteInfo(current_isolation_context, + GURL("http://foo.com")))); // Set up the work to be done after the renderer is asked to commit // |siteless_url|, but before the corresponding DidCommitProvisionalLoad IPC
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc index e45dbb3..ff226c9 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -102,7 +102,6 @@ #include "content/browser/locks/lock_manager.h" #include "content/browser/media/capture/audio_mirroring_manager.h" #include "content/browser/media/media_internals.h" -#include "content/browser/media/midi_host.h" #include "content/browser/mime_registry_impl.h" #include "content/browser/native_file_system/native_file_system_manager_impl.h" #include "content/browser/native_io/native_io_context.h" @@ -2415,10 +2414,6 @@ base::BindRepeating(&FileSystemManagerImpl::BindReceiver, base::Unretained(file_system_manager_impl_.get()))); - registry->AddInterface(base::BindRepeating( - &MidiHost::BindReceiver, GetID(), - base::Unretained(BrowserMainLoop::GetInstance()->midi_service()))); - if (gpu_client_) { // |gpu_client_| outlives the registry, because its destruction is posted to // IO thread from the destructor of |this|. @@ -4193,8 +4188,8 @@ // before the commit for the siteless URL arrives, resulting in a renderer // kill. See https://crbug.com/970046. if (SiteInstanceImpl::ShouldAssignSiteForURL(site_info.site_url()) && - SiteInstanceImpl::DoesSiteRequireDedicatedProcess(isolation_context, - site_info.site_url())) { + SiteInstanceImpl::DoesSiteInfoRequireDedicatedProcess(isolation_context, + site_info)) { SiteProcessCountTracker* pending_tracker = static_cast<SiteProcessCountTracker*>( browser_context->GetUserData(kPendingSiteProcessCountTrackerKey));
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc index 35b11ed9..aeb9f114 100644 --- a/content/browser/renderer_host/render_view_host_impl.cc +++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -4,6 +4,7 @@ #include "content/browser/renderer_host/render_view_host_impl.h" +#include <algorithm> #include <set> #include <string> #include <unordered_map> @@ -25,6 +26,7 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" +#include "base/supports_user_data.h" #include "base/system/sys_info.h" #include "base/task/post_task.h" #include "base/time/time.h" @@ -161,6 +163,52 @@ } #endif // defined(USE_OZONE) || defined(USE_X11) +// Set of RenderViewHostImpl* that can be attached as UserData to a +// RenderProcessHost. Used to keep track of whether any RenderViewHostImpl +// instances are in the bfcache. +class PerProcessRenderViewHostSet : public base::SupportsUserData::Data { + public: + static PerProcessRenderViewHostSet* GetOrCreateForProcess( + RenderProcessHost* process) { + DCHECK(process); + auto* set = static_cast<PerProcessRenderViewHostSet*>( + process->GetUserData(UserDataKey())); + if (!set) { + auto new_set = std::make_unique<PerProcessRenderViewHostSet>(); + set = new_set.get(); + process->SetUserData(UserDataKey(), std::move(new_set)); + } + return set; + } + + void Insert(const RenderViewHostImpl* rvh) { + render_view_host_instances_.insert(rvh); + } + + void Erase(const RenderViewHostImpl* rvh) { + auto it = render_view_host_instances_.find(rvh); + DCHECK(it != render_view_host_instances_.end()); + render_view_host_instances_.erase(it); + } + + bool HasNonBackForwardCachedInstances() const { + return std::find_if(render_view_host_instances_.begin(), + render_view_host_instances_.end(), + [](const RenderViewHostImpl* rvh) { + return !rvh->is_in_back_forward_cache(); + }) != render_view_host_instances_.end(); + } + + private: + static const void* UserDataKey() { return &kUserDataKey; } + + static constexpr int kUserDataKey = 0; + + std::unordered_set<const RenderViewHostImpl*> render_view_host_instances_; +}; + +const int PerProcessRenderViewHostSet::kUserDataKey; + } // namespace // static @@ -243,6 +291,13 @@ #endif } +// static +bool RenderViewHostImpl::HasNonBackForwardCachedInstancesForProcess( + RenderProcessHost* process) { + return PerProcessRenderViewHostSet::GetOrCreateForProcess(process) + ->HasNonBackForwardCachedInstances(); +} + RenderViewHostImpl::RenderViewHostImpl( SiteInstance* instance, std::unique_ptr<RenderWidgetHostImpl> widget, @@ -260,6 +315,9 @@ DCHECK(delegate_); DCHECK_NE(GetRoutingID(), render_widget_host_->GetRoutingID()); + PerProcessRenderViewHostSet::GetOrCreateForProcess(GetProcess()) + ->Insert(this); + std::pair<RoutingIDViewMap::iterator, bool> result = g_routing_id_view_map.Get().emplace( RenderViewHostID(GetProcess()->GetID(), routing_id_), this); @@ -296,6 +354,8 @@ } RenderViewHostImpl::~RenderViewHostImpl() { + PerProcessRenderViewHostSet::GetOrCreateForProcess(GetProcess())->Erase(this); + // We can't release the SessionStorageNamespace until our peer // in the renderer has wound down. // TODO(crbug.com/1111231): `ReleaseOnCloseACK()` should probably be called on
diff --git a/content/browser/renderer_host/render_view_host_impl.h b/content/browser/renderer_host/render_view_host_impl.h index 4c8f0bf..1f01a5e 100644 --- a/content/browser/renderer_host/render_view_host_impl.h +++ b/content/browser/renderer_host/render_view_host_impl.h
@@ -50,6 +50,7 @@ namespace content { class AgentSchedulingGroupHost; +class RenderProcessHost; class TimeoutMonitor; // A callback which will be called immediately before EnterBackForwardCache @@ -95,6 +96,14 @@ static void GetPlatformSpecificPrefs( blink::mojom::RendererPreferences* prefs); + // Checks whether any RenderViewHostImpl instance associated with a given + // process is not currently in the back-forward cache. + // TODO(https://crbug.com/1125996): Remove once a well-behaved frozen + // RenderFrame never send IPCs messages, even if there are active pages in the + // process. + static bool HasNonBackForwardCachedInstancesForProcess( + RenderProcessHost* process); + RenderViewHostImpl(SiteInstance* instance, std::unique_ptr<RenderWidgetHostImpl> widget, RenderViewHostDelegate* delegate, @@ -221,6 +230,8 @@ void LeaveBackForwardCache( blink::mojom::PageRestoreParamsPtr page_restore_params); + bool is_in_back_forward_cache() const { return is_in_back_forward_cache_; } + void SetVisibility(blink::mojom::PageVisibilityState visibility); void SetIsFrozen(bool frozen);
diff --git a/content/browser/service_worker/service_worker_context_wrapper.cc b/content/browser/service_worker/service_worker_context_wrapper.cc index 4ba977c..c07b4f69 100644 --- a/content/browser/service_worker/service_worker_context_wrapper.cc +++ b/content/browser/service_worker/service_worker_context_wrapper.cc
@@ -101,28 +101,26 @@ void DidStartWorker(scoped_refptr<ServiceWorkerVersion> version, ServiceWorkerContext::StartWorkerCallback info_callback, base::OnceClosure error_callback, - scoped_refptr<base::TaskRunner> callback_runner, blink::ServiceWorkerStatusCode start_worker_status) { DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); if (start_worker_status != blink::ServiceWorkerStatusCode::kOk) { - callback_runner->PostTask(FROM_HERE, std::move(error_callback)); + std::move(error_callback).Run(); return; } EmbeddedWorkerInstance* instance = version->embedded_worker(); - callback_runner->PostTask( - FROM_HERE, base::BindOnce(std::move(info_callback), version->version_id(), - instance->process_id(), instance->thread_id())); + std::move(info_callback) + .Run(version->version_id(), instance->process_id(), + instance->thread_id()); } void FoundRegistrationForStartWorker( ServiceWorkerContext::StartWorkerCallback info_callback, base::OnceClosure failure_callback, - scoped_refptr<base::TaskRunner> callback_runner, blink::ServiceWorkerStatusCode service_worker_status, scoped_refptr<ServiceWorkerRegistration> registration) { DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); if (service_worker_status != blink::ServiceWorkerStatusCode::kOk) { - callback_runner->PostTask(FROM_HERE, std::move(failure_callback)); + std::move(failure_callback).Run(); return; } @@ -138,7 +136,7 @@ // However, if the installation is rejected, the installing version can go // away by the time we reach here from DidFindRegistrationForFindImpl. if (!version_ptr) { - callback_runner->PostTask(FROM_HERE, std::move(failure_callback)); + std::move(failure_callback).Run(); return; } @@ -150,7 +148,7 @@ version->RunAfterStartWorker( ServiceWorkerMetrics::EventType::EXTERNAL_REQUEST, base::BindOnce(&DidStartWorker, version, std::move(info_callback), - std::move(failure_callback), std::move(callback_runner))); + std::move(failure_callback))); } void FinishRegistrationOnCoreThread( @@ -770,15 +768,11 @@ const GURL& scope, StartWorkerCallback info_callback, base::OnceClosure failure_callback) { - RunOrPostTaskOnCoreThread( - FROM_HERE, - base::BindOnce( - &ServiceWorkerContextWrapper::FindRegistrationForScopeOnCoreThread, - this, scope, /*include_installing_version=*/true, - base::BindOnce(&FoundRegistrationForStartWorker, - std::move(info_callback), std::move(failure_callback), - base::ThreadTaskRunnerHandle::Get()), - core_thread_task_runner_)); + DCHECK_CURRENTLY_ON(GetCoreThreadId()); + FindRegistrationForScopeImpl( + scope, /*include_installing_version=*/true, + base::BindOnce(&FoundRegistrationForStartWorker, std::move(info_callback), + std::move(failure_callback))); } void ServiceWorkerContextWrapper::StartServiceWorkerAndDispatchMessage( @@ -808,13 +802,12 @@ return; } - FindRegistrationForScopeOnCoreThread( + FindRegistrationForScopeImpl( net::SimplifyUrlForRequest(scope), false /* include_installing_version */, base::BindOnce( &ServiceWorkerContextWrapper::DidFindRegistrationForMessageDispatch, this, std::move(message), scope, std::move(result_callback), - std::move(callback_runner)), - core_thread_task_runner_); + std::move(callback_runner))); } void ServiceWorkerContextWrapper::DidFindRegistrationForMessageDispatch( @@ -1050,13 +1043,10 @@ void ServiceWorkerContextWrapper::FindRegistrationForScope( const GURL& scope, FindRegistrationCallback callback) { + DCHECK_CURRENTLY_ON(GetCoreThreadId()); const bool include_installing_version = true; - RunOrPostTaskOnCoreThread( - FROM_HERE, - base::BindOnce( - &ServiceWorkerContextWrapper::FindRegistrationForScopeOnCoreThread, - this, scope, include_installing_version, std::move(callback), - base::ThreadTaskRunnerHandle::Get())); + FindRegistrationForScopeImpl(scope, include_installing_version, + std::move(callback)); } void ServiceWorkerContextWrapper::FindReadyRegistrationForId( @@ -1600,25 +1590,21 @@ } } -void ServiceWorkerContextWrapper::FindRegistrationForScopeOnCoreThread( +void ServiceWorkerContextWrapper::FindRegistrationForScopeImpl( const GURL& scope, bool include_installing_version, - FindRegistrationCallback callback, - scoped_refptr<base::TaskRunner> callback_runner) { + FindRegistrationCallback callback) { DCHECK_CURRENTLY_ON(GetCoreThreadId()); if (!context_core_) { - callback_runner->PostTask( - FROM_HERE, - base::BindOnce(std::move(callback), - blink::ServiceWorkerStatusCode::kErrorAbort, nullptr)); + std::move(callback).Run(blink::ServiceWorkerStatusCode::kErrorAbort, + nullptr); return; } context_core_->registry()->FindRegistrationForScope( net::SimplifyUrlForRequest(scope), - base::BindOnce(&ServiceWorkerContextWrapper:: - DidFindRegistrationForFindImplWithRunner, - this, include_installing_version, std::move(callback), - std::move(callback_runner))); + base::BindOnce( + &ServiceWorkerContextWrapper::DidFindRegistrationForFindImpl, this, + include_installing_version, std::move(callback))); } void ServiceWorkerContextWrapper::ShutdownOnCoreThread() { @@ -1628,58 +1614,6 @@ context_core_.reset(); } -void ServiceWorkerContextWrapper::DidFindRegistrationForFindImplWithRunner( - bool include_installing_version, - FindRegistrationCallback callback, - scoped_refptr<base::TaskRunner> callback_runner, - blink::ServiceWorkerStatusCode status, - scoped_refptr<ServiceWorkerRegistration> registration) { - DCHECK_CURRENTLY_ON(GetCoreThreadId()); - if (status != blink::ServiceWorkerStatusCode::kOk) { - callback_runner->PostTask( - FROM_HERE, base::BindOnce(std::move(callback), status, nullptr)); - return; - } - - // Attempt to activate the waiting version because the registration retrieved - // from the disk might have only the waiting version. - if (registration->waiting_version()) - registration->ActivateWaitingVersionWhenReady(); - - scoped_refptr<ServiceWorkerVersion> active_version = - registration->active_version(); - if (active_version) { - if (active_version->status() == ServiceWorkerVersion::ACTIVATING) { - // Wait until the version is activated. - active_version->RegisterStatusChangeCallback( - base::BindOnce(&ServiceWorkerContextWrapper:: - OnStatusChangedForFindReadyRegistrationWithRunner, - this, std::move(callback), std::move(callback_runner), - std::move(registration))); - return; - } - DCHECK_EQ(ServiceWorkerVersion::ACTIVATED, active_version->status()); - callback_runner->PostTask( - FROM_HERE, - base::BindOnce(std::move(callback), blink::ServiceWorkerStatusCode::kOk, - std::move(registration))); - return; - } - - if (include_installing_version && registration->installing_version()) { - callback_runner->PostTask( - FROM_HERE, - base::BindOnce(std::move(callback), blink::ServiceWorkerStatusCode::kOk, - std::move(registration))); - return; - } - - callback_runner->PostTask( - FROM_HERE, - base::BindOnce(std::move(callback), - blink::ServiceWorkerStatusCode::kErrorNotFound, nullptr)); -} - void ServiceWorkerContextWrapper::DidFindRegistrationForFindImpl( bool include_installing_version, FindRegistrationCallback callback, @@ -1722,29 +1656,6 @@ nullptr); } -void ServiceWorkerContextWrapper:: - OnStatusChangedForFindReadyRegistrationWithRunner( - FindRegistrationCallback callback, - scoped_refptr<base::TaskRunner> callback_runner, - scoped_refptr<ServiceWorkerRegistration> registration) { - DCHECK_CURRENTLY_ON(GetCoreThreadId()); - scoped_refptr<ServiceWorkerVersion> active_version = - registration->active_version(); - if (!active_version || - active_version->status() != ServiceWorkerVersion::ACTIVATED) { - callback_runner->PostTask( - FROM_HERE, - base::BindOnce(std::move(callback), - blink::ServiceWorkerStatusCode::kErrorNotFound, - nullptr)); - return; - } - callback_runner->PostTask( - FROM_HERE, - base::BindOnce(std::move(callback), blink::ServiceWorkerStatusCode::kOk, - registration)); -} - void ServiceWorkerContextWrapper::OnStatusChangedForFindReadyRegistration( FindRegistrationCallback callback, scoped_refptr<ServiceWorkerRegistration> registration) {
diff --git a/content/browser/service_worker/service_worker_context_wrapper.h b/content/browser/service_worker/service_worker_context_wrapper.h index d91f6d9b..bcbc08a 100644 --- a/content/browser/service_worker/service_worker_context_wrapper.h +++ b/content/browser/service_worker/service_worker_context_wrapper.h
@@ -410,24 +410,11 @@ bool include_installing_version, FindRegistrationCallback callback); - // TODO(crbug.com/1127724): The *WithRunner functions should be removed. - // FindRegistrationCallback should only be called on the core thread, since - // ServiceWorkerRegistration is bound to that thread. - void DidFindRegistrationForFindImplWithRunner( - bool include_installing_version, - FindRegistrationCallback callback, - scoped_refptr<base::TaskRunner> callback_runner, - blink::ServiceWorkerStatusCode status, - scoped_refptr<ServiceWorkerRegistration> registration); void DidFindRegistrationForFindImpl( bool include_installing_version, FindRegistrationCallback callback, blink::ServiceWorkerStatusCode status, scoped_refptr<ServiceWorkerRegistration> registration); - void OnStatusChangedForFindReadyRegistrationWithRunner( - FindRegistrationCallback callback, - scoped_refptr<base::TaskRunner> callback_runner, - scoped_refptr<ServiceWorkerRegistration> registration); void OnStatusChangedForFindReadyRegistration( FindRegistrationCallback callback, scoped_refptr<ServiceWorkerRegistration> registration); @@ -532,11 +519,6 @@ const url::Origin& origin, ResultCallback callback, scoped_refptr<base::TaskRunner> callback_runner); - void FindRegistrationForScopeOnCoreThread( - const GURL& scope, - bool include_installing_version, - FindRegistrationCallback callback, - scoped_refptr<base::TaskRunner> callback_runner); void HasMainFrameWindowClientOnCoreThread( const GURL& origin, BoolCallback callback,
diff --git a/content/browser/service_worker/service_worker_process_browsertest.cc b/content/browser/service_worker/service_worker_process_browsertest.cc index 7f2a4d40..cae9309d 100644 --- a/content/browser/service_worker/service_worker_process_browsertest.cc +++ b/content/browser/service_worker/service_worker_process_browsertest.cc
@@ -197,17 +197,21 @@ base::RunLoop loop; GURL scope = embedded_test_server()->GetURL("/service_worker/"); int worker_process_id; - wrapper()->StartWorkerForScope( - scope, - base::BindLambdaForTesting( - [&](int64_t version_id, int process_id, int thread_id) { - worker_process_id = process_id; + scoped_refptr<ServiceWorkerContextWrapper> wrapper_ref = wrapper(); + RunOrPostTaskOnThread( + FROM_HERE, ServiceWorkerContext::GetCoreThreadId(), + base::BindOnce( + &ServiceWorkerContextWrapper::StartWorkerForScope, + std::move(wrapper_ref), scope, + base::BindLambdaForTesting( + [&](int64_t version_id, int process_id, int thread_id) { + worker_process_id = process_id; + loop.Quit(); + }), + base::BindLambdaForTesting([&loop]() { + ASSERT_FALSE(true) << "start worker failed"; loop.Quit(); - }), - base::BindLambdaForTesting([&loop]() { - ASSERT_FALSE(true) << "start worker failed"; - loop.Quit(); - })); + }))); loop.Run(); // The page and service worker should be in the same process.
diff --git a/content/browser/site_instance_impl.cc b/content/browser/site_instance_impl.cc index 9dc208b8..abc3c19 100644 --- a/content/browser/site_instance_impl.cc +++ b/content/browser/site_instance_impl.cc
@@ -1201,17 +1201,6 @@ } // static -bool SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - const IsolationContext& isolation_context, - const GURL& url) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - return SiteIsolationPolicy::UseDedicatedProcessesForAllSites() || - DoesSiteInfoRequireDedicatedProcess( - isolation_context, - SiteInstanceImpl::ComputeSiteInfo(isolation_context, url)); -} - -// static bool SiteInstanceImpl::DoesSiteInfoRequireDedicatedProcess( const IsolationContext& isolation_context, const SiteInfo& site_info) {
diff --git a/content/browser/site_instance_impl.h b/content/browser/site_instance_impl.h index d9c7d6c..ae79a93 100644 --- a/content/browser/site_instance_impl.h +++ b/content/browser/site_instance_impl.h
@@ -410,13 +410,13 @@ static GURL GetEffectiveURL(BrowserContext* browser_context, const GURL& url); - // Returns true if pages loaded from |url| ought to be handled only by a + // Returns true if pages loaded from |site_info| ought to be handled only by a // renderer process isolated from other sites. If --site-per-process is used, // this is true for all sites. In other site isolation modes, only a subset // of sites will require dedicated processes. - static bool DoesSiteRequireDedicatedProcess( + static bool DoesSiteInfoRequireDedicatedProcess( const IsolationContext& isolation_context, - const GURL& url); + const SiteInfo& site_info); // Returns true if a process for a |site_info| should be locked. Returning // true here also implies that |site_info| requires a dedicated process. @@ -427,7 +427,7 @@ // single-process mode, or extensions where a process is currently allowed to // be reused for different extensions. Most of these special cases should // eventually be removed, and this function should become equivalent to - // DoesSiteRequireDedicatedProcess(). + // DoesSiteInfoRequireDedicatedProcess(). // // |is_guest| should be set to true if the call is being made for a <webview> // guest SiteInstance(i.e. SiteInstance::IsGuest() returns true). @@ -572,16 +572,6 @@ // URLs. static bool HasEffectiveURL(BrowserContext* browser_context, const GURL& url); - // Returns true if pages loaded from |site_info| ought to be handled only by a - // renderer process isolated from other sites. If --site-per-process is used, - // this is true for all sites. In other site isolation modes, only a subset - // of sites will require dedicated processes. - // Note: Unlike DoesSiteRequireDedicatedProcess(), this method expects a - // SiteInfo instead of a plain URL. - static bool DoesSiteInfoRequireDedicatedProcess( - const IsolationContext& isolation_context, - const SiteInfo& site_info); - // Returns true if |url| and its |site_url| can be placed inside a default // SiteInstance. //
diff --git a/content/browser/site_instance_impl_unittest.cc b/content/browser/site_instance_impl_unittest.cc index fa283eb..9fb07306 100644 --- a/content/browser/site_instance_impl_unittest.cc +++ b/content/browser/site_instance_impl_unittest.cc
@@ -52,6 +52,13 @@ using IsolatedOriginSource = ChildProcessSecurityPolicy::IsolatedOriginSource; +bool DoesURLRequireDedicatedProcess(const IsolationContext& isolation_context, + const GURL& url) { + return SiteInstanceImpl::DoesSiteInfoRequireDedicatedProcess( + isolation_context, + SiteInstanceImpl::ComputeSiteInfo(isolation_context, url)); +} + } // namespace const char kPrivilegedScheme[] = "privileged"; @@ -1188,14 +1195,14 @@ isolated_filesystem_foo_url)); // Isolated origins always require a dedicated process. - EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - isolation_context, isolated_foo_url)); - EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - isolation_context, isolated_bar_url)); - EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - isolation_context, isolated_blob_foo_url)); - EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - isolation_context, isolated_filesystem_foo_url)); + EXPECT_TRUE( + DoesURLRequireDedicatedProcess(isolation_context, isolated_foo_url)); + EXPECT_TRUE( + DoesURLRequireDedicatedProcess(isolation_context, isolated_bar_url)); + EXPECT_TRUE( + DoesURLRequireDedicatedProcess(isolation_context, isolated_blob_foo_url)); + EXPECT_TRUE(DoesURLRequireDedicatedProcess(isolation_context, + isolated_filesystem_foo_url)); // Cleanup. policy->RemoveIsolatedOriginForTesting(url::Origin::Create(isolated_foo_url)); @@ -1303,8 +1310,8 @@ EXPECT_EQ(isolated_url, SiteInstanceImpl::GetSiteForURL(isolation_context, foo_isolated_url)); - EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - isolation_context, foo_isolated_url)); + EXPECT_TRUE( + DoesURLRequireDedicatedProcess(isolation_context, foo_isolated_url)); EXPECT_TRUE(IsSameSite(context(), isolated_url, foo_isolated_url)); EXPECT_TRUE(IsSameSite(context(), foo_isolated_url, isolated_url)); @@ -1347,15 +1354,14 @@ isolation_context, baz_isolated_foo_url)); if (!AreAllSitesIsolatedForTesting()) { - EXPECT_FALSE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - isolation_context, foo_url)); + EXPECT_FALSE(DoesURLRequireDedicatedProcess(isolation_context, foo_url)); } - EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - isolation_context, isolated_foo_url)); - EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - isolation_context, bar_isolated_foo_url)); - EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - isolation_context, baz_isolated_foo_url)); + EXPECT_TRUE( + DoesURLRequireDedicatedProcess(isolation_context, isolated_foo_url)); + EXPECT_TRUE( + DoesURLRequireDedicatedProcess(isolation_context, bar_isolated_foo_url)); + EXPECT_TRUE( + DoesURLRequireDedicatedProcess(isolation_context, baz_isolated_foo_url)); EXPECT_FALSE(IsSameSite(context(), foo_url, isolated_foo_url)); EXPECT_FALSE(IsSameSite(context(), isolated_foo_url, foo_url)); @@ -1398,14 +1404,12 @@ EXPECT_EQ(baz_bar_foo_url, SiteInstanceImpl::GetSiteForURL( isolation_context, qux_baz_bar_foo_url)); - EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - isolation_context, foo_url)); - EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - isolation_context, bar_foo_url)); - EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - isolation_context, baz_bar_foo_url)); - EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - isolation_context, qux_baz_bar_foo_url)); + EXPECT_TRUE(DoesURLRequireDedicatedProcess(isolation_context, foo_url)); + EXPECT_TRUE(DoesURLRequireDedicatedProcess(isolation_context, bar_foo_url)); + EXPECT_TRUE( + DoesURLRequireDedicatedProcess(isolation_context, baz_bar_foo_url)); + EXPECT_TRUE( + DoesURLRequireDedicatedProcess(isolation_context, qux_baz_bar_foo_url)); EXPECT_TRUE(IsSameSite(context(), foo_url, bar_foo_url)); EXPECT_FALSE(IsSameSite(context(), foo_url, baz_bar_foo_url)); @@ -1717,14 +1721,12 @@ IsolatedOriginSource::TEST); for (const auto& url : kUrlsThatAlwaysRequireADedicatedProcess) { - EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - isolation_context, GURL(url))); + EXPECT_TRUE(DoesURLRequireDedicatedProcess(isolation_context, GURL(url))); } for (const auto& url : kUrlsThatDoNotRequireADedicatedProcess) { EXPECT_EQ(AreAllSitesIsolatedForTesting(), - SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - isolation_context, GURL(url))); + DoesURLRequireDedicatedProcess(isolation_context, GURL(url))); } SetBrowserClientForTesting(regular_client); }
diff --git a/content/browser/webui/web_ui_navigation_browsertest.cc b/content/browser/webui/web_ui_navigation_browsertest.cc index eab9281..8f9e1a6e 100644 --- a/content/browser/webui/web_ui_navigation_browsertest.cc +++ b/content/browser/webui/web_ui_navigation_browsertest.cc
@@ -46,6 +46,13 @@ return params; } +bool DoesURLRequireDedicatedProcess(const IsolationContext& isolation_context, + const GURL& url) { + return SiteInstanceImpl::DoesSiteInfoRequireDedicatedProcess( + isolation_context, + SiteInstanceImpl::ComputeSiteInfo(isolation_context, url)); +} + } // namespace class WebUINavigationBrowserTest : public ContentBrowserTest { @@ -920,8 +927,8 @@ // chrome:// URLs should require a dedicated process. WebContents* web_contents = shell()->web_contents(); BrowserContext* browser_context = web_contents->GetBrowserContext(); - EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - IsolationContext(browser_context), chrome_url)); + EXPECT_TRUE(DoesURLRequireDedicatedProcess(IsolationContext(browser_context), + chrome_url)); // Navigate to a WebUI page. EXPECT_TRUE(NavigateToURL(shell(), chrome_url)); @@ -943,8 +950,8 @@ // Verify that the blob also requires a dedicated process and that it would // use the same site url as the original page. - EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - IsolationContext(browser_context), blob_url)); + EXPECT_TRUE(DoesURLRequireDedicatedProcess(IsolationContext(browser_context), + blob_url)); EXPECT_EQ(expected_site_url, SiteInstance::GetSiteForURL(browser_context, blob_url)); } @@ -961,8 +968,8 @@ // chrome-untrusted:// URLs should require a dedicated process. WebContents* web_contents = shell()->web_contents(); BrowserContext* browser_context = web_contents->GetBrowserContext(); - EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - IsolationContext(browser_context), chrome_untrusted_url)); + EXPECT_TRUE(DoesURLRequireDedicatedProcess(IsolationContext(browser_context), + chrome_untrusted_url)); // Navigate to a chrome-untrusted:// page. EXPECT_TRUE(NavigateToURL(shell(), chrome_untrusted_url)); @@ -984,8 +991,8 @@ // Verify that the blob also requires a dedicated process and that it would // use the same site url as the original page. - EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( - IsolationContext(browser_context), blob_url)); + EXPECT_TRUE(DoesURLRequireDedicatedProcess(IsolationContext(browser_context), + blob_url)); EXPECT_EQ(expected_site_url, SiteInstance::GetSiteForURL(browser_context, blob_url)); }
diff --git a/content/public/browser/service_worker_context.h b/content/public/browser/service_worker_context.h index aa6bfab..13f3e3d 100644 --- a/content/public/browser/service_worker_context.h +++ b/content/public/browser/service_worker_context.h
@@ -230,9 +230,12 @@ // Starts the active worker of the registration for the given |scope|. If // there is no active worker, starts the installing worker. - // |info_callback| is passed information about the started worker. + // |info_callback| is passed information about the started worker if + // successful, otherwise |failure_callback| is called. // - // May be called on any thread, and the callback is called on that thread. + // Must be called on the core thread, and the callback is called on that + // thread. There is no guarantee about whether the callback is called + // synchronously or asynchronously. virtual void StartWorkerForScope(const GURL& scope, StartWorkerCallback info_callback, base::OnceClosure failure_callback) = 0;
diff --git a/content/test/gpu/run_gpu_integration_test_fuchsia.py b/content/test/gpu/run_gpu_integration_test_fuchsia.py index a7efe4d..818fe46 100755 --- a/content/test/gpu/run_gpu_integration_test_fuchsia.py +++ b/content/test/gpu/run_gpu_integration_test_fuchsia.py
@@ -31,8 +31,9 @@ # If output_dir is not set, assume the script is being launched # from the output directory. - if not args.output_dir: - args.output_dir = os.getcwd() + if not args.out_dir: + args.out_dir = os.getcwd() + additional_target_args['out_dir'] = args.out_dir # Create a temporary log file that Telemetry will look to use to build # an artifact when tests fail. @@ -43,7 +44,7 @@ additional_target_args['system_log_file'] = args.system_log_file package_names = ['web_engine', 'web_engine_shell'] - web_engine_dir = os.path.join(args.output_dir, 'gen', 'fuchsia', 'engine') + web_engine_dir = os.path.join(args.out_dir, 'gen', 'fuchsia', 'engine') gpu_script = [ os.path.join(path_util.GetChromiumSrcDir(), 'content', 'test', 'gpu', 'run_gpu_integration_test.py') @@ -55,7 +56,7 @@ with GetDeploymentTargetForArgs(additional_target_args) as target: target.Start() _, fuchsia_ssh_port = target._GetEndpoint() - gpu_script.extend(['--fuchsia-ssh-config-dir', args.output_dir]) + gpu_script.extend(['--fuchsia-ssh-config-dir', args.out_dir]) gpu_script.extend(['--fuchsia-ssh-port', str(fuchsia_ssh_port)]) gpu_script.extend(['--fuchsia-system-log-file', args.system_log_file]) if args.verbose:
diff --git a/crypto/BUILD.gn b/crypto/BUILD.gn index c866aa7..2464e69 100644 --- a/crypto/BUILD.gn +++ b/crypto/BUILD.gn
@@ -5,16 +5,17 @@ import("//build/config/crypto.gni") import("//testing/test.gni") +# Reset sources_assignment_filter for the BUILD.gn file to prevent +# regression during the migration of Chromium away from the feature. +# See docs/no_sources_assignment_filter.md for more information. +# TODO(crbug.com/1018739): remove this when migration is done. +set_sources_assignment_filter([]) + component("crypto") { output_name = "crcrypto" # Avoid colliding with OpenSSL's libcrypto. sources = [ "aead.cc", "aead.h", - "apple_keychain.h", - "apple_keychain_ios.mm", - "apple_keychain_mac.mm", - "capi_util.cc", - "capi_util.h", "crypto_export.h", "ec_private_key.cc", "ec_private_key.h", @@ -28,21 +29,6 @@ "hkdf.h", "hmac.cc", "hmac.h", - "mac_security_services_lock.cc", - "mac_security_services_lock.h", - - # TODO(brettw) these mocks should be moved to a test_support_crypto target - # if possible. - "mock_apple_keychain.cc", - "mock_apple_keychain.h", - "mock_apple_keychain_ios.cc", - "mock_apple_keychain_mac.cc", - "nss_crypto_module_delegate.h", - "nss_key_util.cc", - "nss_key_util.h", - "nss_util.cc", - "nss_util.h", - "nss_util_internal.h", "openssl_util.cc", "openssl_util.h", "p224.cc", @@ -77,35 +63,58 @@ public_deps = [ "//third_party/boringssl" ] - if (!is_apple) { - sources -= [ + if (is_apple) { + sources += [ "apple_keychain.h", + + # TODO(brettw): these mocks should be moved to a test_support_crypto + # target if possible. "mock_apple_keychain.cc", "mock_apple_keychain.h", ] - } else { + + if (is_mac) { + sources += [ + "apple_keychain_mac.mm", + + # TODO(brettw): these mocks should be moved to a test_support_crypto + # target if possible. + "mock_apple_keychain_mac.cc", + ] + } + if (is_ios) { + sources += [ + "apple_keychain_ios.mm", + + # TODO(brettw): these mocks should be moved to a test_support_crypto + # target if possible. + "mock_apple_keychain_ios.cc", + ] + } + frameworks = [ "CoreFoundation.framework", "Security.framework", ] } - if (!is_mac) { - sources -= [ + if (is_mac) { + sources += [ "mac_security_services_lock.cc", "mac_security_services_lock.h", ] } - if (!is_win) { - sources -= [ + if (is_win) { + sources += [ "capi_util.cc", "capi_util.h", ] } # Some files are built when NSS is used for the platform certificate library. - if (!use_nss_certs) { - sources -= [ + if (use_nss_certs) { + sources += [ + "nss_crypto_module_delegate.h", "nss_key_util.cc", "nss_key_util.h", "nss_util.cc", @@ -132,8 +141,6 @@ "ec_signature_creator_unittest.cc", "encryptor_unittest.cc", "hmac_unittest.cc", - "nss_key_util_unittest.cc", - "nss_util_unittest.cc", "p224_spake_unittest.cc", "p224_unittest.cc", "random_unittest.cc", @@ -146,8 +153,8 @@ ] # Some files are built when NSS is used for the platform certificate library. - if (!use_nss_certs) { - sources -= [ + if (use_nss_certs) { + sources += [ "nss_key_util_unittest.cc", "nss_util_unittest.cc", ]
diff --git a/crypto/mac_security_services_lock.cc b/crypto/mac_security_services_lock.cc index a9a70cdf..bd8af9ae 100644 --- a/crypto/mac_security_services_lock.cc +++ b/crypto/mac_security_services_lock.cc
@@ -4,39 +4,14 @@ #include "crypto/mac_security_services_lock.h" -#include "base/macros.h" -#include "base/memory/singleton.h" +#include "base/no_destructor.h" #include "base/synchronization/lock.h" -namespace { - -class SecurityServicesSingleton { - public: - static SecurityServicesSingleton* GetInstance() { - return base::Singleton< - SecurityServicesSingleton, - base::LeakySingletonTraits<SecurityServicesSingleton>>::get(); - } - - base::Lock& lock() { return lock_; } - - private: - friend struct base::DefaultSingletonTraits<SecurityServicesSingleton>; - - SecurityServicesSingleton() {} - ~SecurityServicesSingleton() {} - - base::Lock lock_; - - DISALLOW_COPY_AND_ASSIGN(SecurityServicesSingleton); -}; - -} // namespace - namespace crypto { base::Lock& GetMacSecurityServicesLock() { - return SecurityServicesSingleton::GetInstance()->lock(); + static base::NoDestructor<base::Lock> lock; + return *lock; } } // namespace crypto
diff --git a/device/fido/client_data.cc b/device/fido/client_data.cc index 5ee8a6dc..eb04d50 100644 --- a/device/fido/client_data.cc +++ b/device/fido/client_data.cc
@@ -102,7 +102,7 @@ // unreasonably specific assumptions about the clientData JSON. This is // done in the fashion of // https://tools.ietf.org/html/draft-ietf-tls-grease - ret.append(R"(,"extra_keys_may_be_added_here":")"); + ret.append(R"(,"other_keys_can_be_added_here":")"); ret.append( "do not compare clientDataJSON against a template. See " "https://goo.gl/yabPex\"");
diff --git a/gpu/vulkan/demo/vulkan_demo.cc b/gpu/vulkan/demo/vulkan_demo.cc index 0d35d2f..b9b089b 100644 --- a/gpu/vulkan/demo/vulkan_demo.cc +++ b/gpu/vulkan/demo/vulkan_demo.cc
@@ -211,7 +211,7 @@ GrBackendSurfaceMutableState state(VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, queue_index); sk_surface_->flush(flush_info, &state); - sk_surface_->getContext()->submit(); + sk_surface_->recordingContext()->asDirectContext()->submit(); auto backend = sk_surface_->getBackendRenderTarget( SkSurface::kFlushRead_BackendHandleAccess); GrVkImageInfo vk_image_info;
diff --git a/infra/config/generated/cr-buildbucket-dev.cfg b/infra/config/generated/cr-buildbucket-dev.cfg index a7a54ff..289398a 100644 --- a/infra/config/generated/cr-buildbucket-dev.cfg +++ b/infra/config/generated/cr-buildbucket-dev.cfg
@@ -32,7 +32,7 @@ name: "swarming/staging" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" - properties_j: "$build/goma:{\"enable_ats\":true,\"rpc_extra_params\":\"?staging\",\"server_host\":\"staging-goma.chromium.org\"}" + properties_j: "$build/goma:{\"enable_ats\":true,\"rpc_extra_params\":\"?staging\",\"server_host\":\"staging-goma.chromium.org\",\"use_luci_auth\":true}" properties_j: "$recipe_engine/isolated:{\"server\":\"https://isolateserver-dev.appspot.com\"}" properties_j: "builder_group:\"chromium.dev\"" } @@ -59,7 +59,7 @@ name: "swarming/staging" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" - properties_j: "$build/goma:{\"enable_ats\":true,\"rpc_extra_params\":\"?staging\",\"server_host\":\"staging-goma.chromium.org\"}" + properties_j: "$build/goma:{\"enable_ats\":true,\"rpc_extra_params\":\"?staging\",\"server_host\":\"staging-goma.chromium.org\",\"use_luci_auth\":true}" properties_j: "$recipe_engine/isolated:{\"server\":\"https://isolateserver-dev.appspot.com\"}" properties_j: "builder_group:\"chromium.dev\"" } @@ -86,7 +86,7 @@ name: "swarming/staging" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" - properties_j: "$build/goma:{\"enable_ats\":true,\"rpc_extra_params\":\"?staging\",\"server_host\":\"staging-goma.chromium.org\"}" + properties_j: "$build/goma:{\"enable_ats\":true,\"rpc_extra_params\":\"?staging\",\"server_host\":\"staging-goma.chromium.org\",\"use_luci_auth\":true}" properties_j: "$recipe_engine/isolated:{\"server\":\"https://isolateserver-dev.appspot.com\"}" properties_j: "builder_group:\"chromium.dev\"" } @@ -114,7 +114,7 @@ name: "swarming/staging" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" - properties_j: "$build/goma:{\"enable_ats\":true,\"rpc_extra_params\":\"?staging\",\"server_host\":\"staging-goma.chromium.org\"}" + properties_j: "$build/goma:{\"enable_ats\":true,\"rpc_extra_params\":\"?staging\",\"server_host\":\"staging-goma.chromium.org\",\"use_luci_auth\":true}" properties_j: "$recipe_engine/isolated:{\"server\":\"https://isolateserver-dev.appspot.com\"}" properties_j: "builder_group:\"chromium.dev\"" } @@ -141,7 +141,7 @@ name: "swarming/staging" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" - properties_j: "$build/goma:{\"rpc_extra_params\":\"?staging\",\"server_host\":\"staging-goma.chromium.org\"}" + properties_j: "$build/goma:{\"rpc_extra_params\":\"?staging\",\"server_host\":\"staging-goma.chromium.org\",\"use_luci_auth\":true}" properties_j: "$recipe_engine/isolated:{\"server\":\"https://isolateserver-dev.appspot.com\"}" properties_j: "builder_group:\"chromium.dev\"" } @@ -168,7 +168,7 @@ name: "swarming/staging" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" - properties_j: "$build/goma:{\"enable_ats\":true,\"rpc_extra_params\":\"?staging\",\"server_host\":\"staging-goma.chromium.org\"}" + properties_j: "$build/goma:{\"enable_ats\":true,\"rpc_extra_params\":\"?staging\",\"server_host\":\"staging-goma.chromium.org\",\"use_luci_auth\":true}" properties_j: "$recipe_engine/isolated:{\"server\":\"https://isolateserver-dev.appspot.com\"}" properties_j: "builder_group:\"chromium.dev\"" } @@ -195,7 +195,7 @@ name: "swarming/staging" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" - properties_j: "$build/goma:{\"enable_ats\":true,\"rpc_extra_params\":\"?staging\",\"server_host\":\"staging-goma.chromium.org\"}" + properties_j: "$build/goma:{\"enable_ats\":true,\"rpc_extra_params\":\"?staging\",\"server_host\":\"staging-goma.chromium.org\",\"use_luci_auth\":true}" properties_j: "$recipe_engine/isolated:{\"server\":\"https://isolateserver-dev.appspot.com\"}" properties_j: "builder_group:\"chromium.dev\"" }
diff --git a/infra/config/generated/cr-buildbucket.cfg b/infra/config/generated/cr-buildbucket.cfg index 95795a3..3f6c524 100644 --- a/infra/config/generated/cr-buildbucket.cfg +++ b/infra/config/generated/cr-buildbucket.cfg
@@ -15210,7 +15210,7 @@ cipd_version: "refs/heads/master" cmd: "luciexe" } - properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"tryserver.chromium.codesearch\",\"recipe\":\"chromium_codesearch\"}" + properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"tryserver.chromium.codesearch\",\"recipe\":\"chromium_codesearch\"}" execution_timeout_secs: 32400 expiration_secs: 7200 caches { @@ -15244,7 +15244,7 @@ cipd_version: "refs/heads/master" cmd: "luciexe" } - properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"tryserver.chromium.codesearch\",\"recipe\":\"chromium_codesearch\"}" + properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"tryserver.chromium.codesearch\",\"recipe\":\"chromium_codesearch\"}" execution_timeout_secs: 32400 expiration_secs: 7200 caches { @@ -15278,7 +15278,7 @@ cipd_version: "refs/heads/master" cmd: "luciexe" } - properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"tryserver.chromium.codesearch\",\"recipe\":\"chromium_codesearch\"}" + properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"tryserver.chromium.codesearch\",\"recipe\":\"chromium_codesearch\"}" execution_timeout_secs: 32400 expiration_secs: 7200 caches { @@ -15312,7 +15312,7 @@ cipd_version: "refs/heads/master" cmd: "luciexe" } - properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"tryserver.chromium.codesearch\",\"recipe\":\"chromium_codesearch\"}" + properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"tryserver.chromium.codesearch\",\"recipe\":\"chromium_codesearch\"}" execution_timeout_secs: 32400 expiration_secs: 7200 caches { @@ -15346,7 +15346,7 @@ cipd_version: "refs/heads/master" cmd: "luciexe" } - properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"tryserver.chromium.codesearch\",\"recipe\":\"chromium_codesearch\"}" + properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"tryserver.chromium.codesearch\",\"recipe\":\"chromium_codesearch\"}" execution_timeout_secs: 32400 expiration_secs: 7200 caches { @@ -15380,7 +15380,7 @@ cipd_version: "refs/heads/master" cmd: "luciexe" } - properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"tryserver.chromium.codesearch\",\"recipe\":\"chromium_codesearch\"}" + properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"tryserver.chromium.codesearch\",\"recipe\":\"chromium_codesearch\"}" execution_timeout_secs: 32400 expiration_secs: 7200 caches { @@ -15430,7 +15430,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$build/goma\":{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"},\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"recipe\":\"findit/chromium/single_revision\"}" + properties: "{\"$build/goma\":{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"recipe\":\"findit/chromium/single_revision\"}" execution_timeout_secs: 28800 caches { name: "win_toolchain" @@ -15454,7 +15454,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$build/goma\":{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"},\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"recipe\":\"findit/chromium/compile\"}" + properties: "{\"$build/goma\":{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"recipe\":\"findit/chromium/compile\"}" execution_timeout_secs: 28800 caches { name: "win_toolchain" @@ -15479,7 +15479,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"gs_bucket\":\"findit-for-me\",\"gs_object\":\"bot_db.json\",\"recipe\":\"findit/chromium/export_bot_db\"}" + properties: "{\"$build/goma\":{\"use_luci_auth\":true},\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"gs_bucket\":\"findit-for-me\",\"gs_object\":\"bot_db.json\",\"recipe\":\"findit/chromium/export_bot_db\"}" execution_timeout_secs: 28800 caches { name: "win_toolchain" @@ -29491,7 +29491,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc\",\"perf_dashboard_machine_group\":\"ChromiumWebRTC\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc\",\"perf_dashboard_machine_group\":\"ChromiumWebRTC\",\"recipe\":\"chromium\"}" execution_timeout_secs: 7200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -29511,7 +29511,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc\",\"perf_dashboard_machine_group\":\"ChromiumWebRTC\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc\",\"perf_dashboard_machine_group\":\"ChromiumWebRTC\",\"recipe\":\"chromium\"}" execution_timeout_secs: 7200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -29531,7 +29531,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc\",\"perf_dashboard_machine_group\":\"ChromiumWebRTC\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc\",\"perf_dashboard_machine_group\":\"ChromiumWebRTC\",\"recipe\":\"chromium\"}" execution_timeout_secs: 7200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -29551,7 +29551,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc\",\"perf_dashboard_machine_group\":\"ChromiumWebRTC\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc\",\"perf_dashboard_machine_group\":\"ChromiumWebRTC\",\"recipe\":\"chromium\"}" execution_timeout_secs: 7200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -29572,7 +29572,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$build/goma\":{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc\",\"perf_dashboard_machine_group\":\"ChromiumWebRTC\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc\",\"perf_dashboard_machine_group\":\"ChromiumWebRTC\",\"recipe\":\"chromium\"}" execution_timeout_secs: 7200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -29592,7 +29592,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc\",\"perf_dashboard_machine_group\":\"ChromiumWebRTC\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc\",\"perf_dashboard_machine_group\":\"ChromiumWebRTC\",\"recipe\":\"chromium\"}" execution_timeout_secs: 7200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -29612,7 +29612,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc\",\"perf_dashboard_machine_group\":\"ChromiumWebRTC\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc\",\"perf_dashboard_machine_group\":\"ChromiumWebRTC\",\"recipe\":\"chromium\"}" execution_timeout_secs: 7200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -29632,7 +29632,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc\",\"perf_dashboard_machine_group\":\"ChromiumWebRTC\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc\",\"perf_dashboard_machine_group\":\"ChromiumWebRTC\",\"recipe\":\"chromium\"}" execution_timeout_secs: 7200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -29652,7 +29652,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc\",\"perf_dashboard_machine_group\":\"ChromiumWebRTC\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc\",\"perf_dashboard_machine_group\":\"ChromiumWebRTC\",\"recipe\":\"chromium\"}" execution_timeout_secs: 7200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -29672,7 +29672,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc\",\"perf_dashboard_machine_group\":\"ChromiumWebRTC\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc\",\"perf_dashboard_machine_group\":\"ChromiumWebRTC\",\"recipe\":\"chromium\"}" execution_timeout_secs: 7200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -29708,7 +29708,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" execution_timeout_secs: 7200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -29728,7 +29728,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" execution_timeout_secs: 7200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -29748,7 +29748,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" execution_timeout_secs: 7200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -29768,7 +29768,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" execution_timeout_secs: 7200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -29788,7 +29788,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" execution_timeout_secs: 7200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -29808,7 +29808,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" execution_timeout_secs: 7200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -29828,7 +29828,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" execution_timeout_secs: 7200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -29848,7 +29848,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" execution_timeout_secs: 7200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -29869,7 +29869,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$build/goma\":{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\",\"xcode_build_version\":\"11c29\"}" + properties: "{\"$build/goma\":{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\",\"xcode_build_version\":\"11c29\"}" execution_timeout_secs: 7200 caches { name: "xcode_ios_11c29" @@ -29894,7 +29894,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$build/goma\":{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\",\"xcode_build_version\":\"11c29\"}" + properties: "{\"$build/goma\":{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\",\"xcode_build_version\":\"11c29\"}" execution_timeout_secs: 7200 caches { name: "xcode_ios_11c29" @@ -29918,7 +29918,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\",\"xcode_build_version\":\"11c29\"}" + properties: "{\"$build/goma\":{\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\",\"xcode_build_version\":\"11c29\"}" execution_timeout_secs: 7200 caches { name: "xcode_ios_11c29" @@ -29942,7 +29942,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" execution_timeout_secs: 7200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -29962,7 +29962,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" execution_timeout_secs: 7200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -29982,7 +29982,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" execution_timeout_secs: 7200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -30002,7 +30002,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" execution_timeout_secs: 7200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -30022,7 +30022,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" + properties: "{\"$build/goma\":{\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"chromium\"}" execution_timeout_secs: 7200 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -30042,7 +30042,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$build/goma\":{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"webrtc/chromium_ios\",\"xcode_build_version\":\"12a8189n\"}" + properties: "{\"$build/goma\":{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"webrtc/chromium_ios\",\"xcode_build_version\":\"12a8189n\"}" execution_timeout_secs: 7200 caches { name: "xcode_ios_12a8189n" @@ -30066,7 +30066,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$build/goma\":{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"webrtc/chromium_ios\",\"xcode_build_version\":\"12a8189n\"}" + properties: "{\"$build/goma\":{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.webrtc.fyi\",\"recipe\":\"webrtc/chromium_ios\",\"xcode_build_version\":\"12a8189n\"}" execution_timeout_secs: 7200 caches { name: "xcode_ios_12a8189n"
diff --git a/infra/config/lib/builders.star b/infra/config/lib/builders.star index fe7ce8c8..59e48e7 100644 --- a/infra/config/lib/builders.star +++ b/infra/config/lib/builders.star
@@ -163,7 +163,7 @@ return chromium_tests or None -def _goma_property(*, goma_backend, goma_debug, goma_enable_ats, goma_jobs, goma_use_luci_auth, os): +def _goma_property(*, goma_backend, goma_debug, goma_enable_ats, goma_jobs, os): goma_properties = {} goma_backend = defaults.get_value("goma_backend", goma_backend) @@ -193,11 +193,10 @@ if goma_jobs != None: goma_properties["jobs"] = goma_jobs - goma_use_luci_auth = defaults.get_value("goma_use_luci_auth", goma_use_luci_auth) - if goma_use_luci_auth: - goma_properties["use_luci_auth"] = True + # Builders must use the task service accounts. + goma_properties["use_luci_auth"] = True - return goma_properties or None + return goma_properties def _code_coverage_property( *, @@ -264,7 +263,6 @@ goma_debug = False, goma_enable_ats = args.COMPUTE, goma_jobs = None, - goma_use_luci_auth = None, os = None, project_trigger_overrides = None, pool = None, @@ -309,7 +307,6 @@ goma_debug = args.DEFAULT, goma_enable_ats = args.DEFAULT, goma_jobs = args.DEFAULT, - goma_use_luci_auth = args.DEFAULT, use_clang_coverage = args.DEFAULT, use_java_coverage = args.DEFAULT, coverage_exclude_sources = args.DEFAULT, @@ -396,9 +393,6 @@ to be used by the builder. Sets the 'jobs' field of the '$build/goma' property will be set according to the enum member. By default, the 'jobs' considered None. - * goma_use_luci_auth - a boolean indicating whether luci_auth should be - used for accessing goma backend. If True, the 'use_luci_auth' field - will be set in the '$build/goma' property. By default, considered False. * use_clang_coverage - a boolean indicating whether clang coverage should be used. If True, the 'use_clang_coverage" field will be set in the '$build/code_coverage' property. By default, considered False. @@ -517,7 +511,6 @@ goma_debug = goma_debug, goma_enable_ats = goma_enable_ats, goma_jobs = goma_jobs, - goma_use_luci_auth = goma_use_luci_auth, os = os, ) if goma != None:
diff --git a/infra/config/lib/ci.star b/infra/config/lib/ci.star index 69cf90e7..3e694bc 100644 --- a/infra/config/lib/ci.star +++ b/infra/config/lib/ci.star
@@ -110,7 +110,6 @@ service_account = "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com", swarming_tags = ["vpython:native-python-wrapper"], triggered_by = [milestone_vars.ci_poller], - goma_use_luci_auth = True, ) default_values.update(kwargs) for k, v in default_values.items():
diff --git a/infra/config/lib/try.star b/infra/config/lib/try.star index 49e483a..c6a2c483 100644 --- a/infra/config/lib/try.star +++ b/infra/config/lib/try.star
@@ -121,7 +121,6 @@ service_account = "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com", swarming_tags = ["vpython:native-python-wrapper"], task_template_canary_percentage = 5, - goma_use_luci_auth = True, ) default_values.update(kwargs) for k, v in default_values.items():
diff --git a/infra/config/subprojects/goma/goma.star b/infra/config/subprojects/goma/goma.star index fd930cd1..7d2ba6d3 100644 --- a/infra/config/subprojects/goma/goma.star +++ b/infra/config/subprojects/goma/goma.star
@@ -52,7 +52,6 @@ name = name, builder_group = "chromium.goma.fyi", execution_timeout = 10 * time.hour, - goma_use_luci_auth = True, **kwargs ) @@ -156,7 +155,6 @@ execution_timeout = 10 * time.hour, goma_backend = goma_backend, os = os, - goma_use_luci_auth = True, **kwargs ) @@ -217,7 +215,6 @@ builder_group = "chromium.goma.fyi", execution_timeout = 10 * time.hour, os = os, - goma_use_luci_auth = True, **kwargs ) @@ -318,7 +315,6 @@ execution_timeout = 10 * time.hour, goma_backend = goma_backend, os = os, - goma_use_luci_auth = True, **kwargs ) @@ -398,7 +394,6 @@ builder_group = "chromium.goma", builderless = builderless, os = os, - goma_use_luci_auth = True, **kwargs )
diff --git a/ios/chrome/app/strings/resources/ios_strings_af.xtb b/ios/chrome/app/strings/resources/ios_strings_af.xtb index 6a7dd3c..118742f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_af.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_af.xtb
@@ -14,6 +14,7 @@ <translation id="1084365883616172403">Facebook-plasing is voltooi.</translation> <translation id="1103523840287552314">Vertaal <ph name="LANGUAGE" /> altyd</translation> <translation id="1104948393051856124">Aanvaar en gaan voort</translation> +<translation id="110724200315609752">Wissel na oop venster</translation> <translation id="1112015203684611006">Kon nie druk nie.</translation> <translation id="1125564390852150847">Skep nuwe oortjie.</translation> <translation id="1145536944570833626">Vee bestaande data uit.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_strings_bs.xtb index 69faaa9..d9a51c7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bs.xtb
@@ -14,6 +14,7 @@ <translation id="1084365883616172403">Objava na Facebooku je završena.</translation> <translation id="1103523840287552314">Uvijek prevodi <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Prihvati i nastavi</translation> +<translation id="110724200315609752">Prijeđite na otvoreni prozor</translation> <translation id="1112015203684611006">Štampanje nije uspjelo.</translation> <translation id="1125564390852150847">Kreiranje nove kartice.</translation> <translation id="1145536944570833626">Brisanje postojećih podataka.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb index 7298565..65c09b9 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -14,6 +14,7 @@ <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> +<translation id="110724200315609752">Canvia a la finestra oberta</translation> <translation id="1112015203684611006">Error en imprimir</translation> <translation id="1125564390852150847">Crea una pestanya nova.</translation> <translation id="1145536944570833626">Suprimeix les dades existents.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb index a52736b2..f57d179 100644 --- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -14,6 +14,7 @@ <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> +<translation id="110724200315609752">Přepnout na otevřené okno</translation> <translation id="1112015203684611006">Tisk se nezdařil.</translation> <translation id="1125564390852150847">Vytvořit novou kartu</translation> <translation id="1145536944570833626">Smazat existující data.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb index c724450..c478ea2 100644 --- a/ios/chrome/app/strings/resources/ios_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -14,6 +14,7 @@ <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> +<translation id="110724200315609752">Skift til åbent vindue</translation> <translation id="1112015203684611006">Udskrift mislykkedes.</translation> <translation id="1125564390852150847">Opret ny fane.</translation> <translation id="1145536944570833626">Slet eksisterende data.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb index 10a6966..8ccdffff 100644 --- a/ios/chrome/app/strings/resources/ios_strings_el.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -14,6 +14,7 @@ <translation id="1084365883616172403">Η ανάρτηση στο Facebook ολοκληρώθηκε.</translation> <translation id="1103523840287552314">Να μεταφράζονται πάντα τα <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Αποδοχή και συνέχεια</translation> +<translation id="110724200315609752">Εναλλαγή σε ανοικτό παράθυρο</translation> <translation id="1112015203684611006">Η εκτύπωση απέτυχε.</translation> <translation id="1125564390852150847">Δημιουργία νέας καρτέλας.</translation> <translation id="1145536944570833626">Διαγραφή υπαρχόντων δεδομένων.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb index 13c73dd..86067ffc 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -14,6 +14,7 @@ <translation id="1084365883616172403">Publicado en Facebook</translation> <translation id="1103523840287552314">Traducir siempre del <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Aceptar y continuar</translation> +<translation id="110724200315609752">Cambiar a ventana abierta</translation> <translation id="1112015203684611006">Error al imprimir.</translation> <translation id="1125564390852150847">Crear nueva pestaña.</translation> <translation id="1145536944570833626">Elimina los datos actuales.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb index 9c12010..0d76cde 100644 --- a/ios/chrome/app/strings/resources/ios_strings_et.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -14,6 +14,7 @@ <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> +<translation id="110724200315609752">Lülitu avatud aknale</translation> <translation id="1112015203684611006">Print. ebaõnn.</translation> <translation id="1125564390852150847">Loo uus vaheleht.</translation> <translation id="1145536944570833626">Kustutage olemasolevad andmed.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb index 84540da..8ba9558 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
@@ -14,6 +14,7 @@ <translation id="1084365883616172403">Facebook पोस्ट पूरी हुई.</translation> <translation id="1103523840287552314"><ph name="LANGUAGE" /> का हमेशा अनुवाद करें</translation> <translation id="1104948393051856124">स्वीकार करें और जारी रखें</translation> +<translation id="110724200315609752">खुली हुई विंडो पर जाएं</translation> <translation id="1112015203684611006">प्रिंट विफल रहा.</translation> <translation id="1125564390852150847">नया टैब बनाएं.</translation> <translation id="1145536944570833626">मौजूदा डेटा मिटाएं.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb index 1a590fe..2eb03c7f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -14,6 +14,7 @@ <translation id="1084365883616172403">Dovršen je post za Facebook.</translation> <translation id="1103523840287552314">Uvijek prevedi <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Prihvati i nastavi</translation> +<translation id="110724200315609752">Prijeđite na otvoreni prozor</translation> <translation id="1112015203684611006">Ispis nije uspio.</translation> <translation id="1125564390852150847">Otvori novu karticu.</translation> <translation id="1145536944570833626">Brisanje postojećih podataka.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hy.xtb b/ios/chrome/app/strings/resources/ios_strings_hy.xtb index d4c546d..2ad3bbe 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hy.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hy.xtb
@@ -14,6 +14,7 @@ <translation id="1084365883616172403">Facebook-ում փակցնումն ավարտվեց:</translation> <translation id="1103523840287552314">Միշտ թարգմանել <ph name="LANGUAGE" />-ից</translation> <translation id="1104948393051856124">Ընդունել և շարունակել</translation> +<translation id="110724200315609752">Անցնել բացված պատուհան</translation> <translation id="1112015203684611006">Չհաջողվեց տպել:</translation> <translation id="1125564390852150847">Ստեղծել նոր ներդիր:</translation> <translation id="1145536944570833626">Առկա տվյալների ջնջում։</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_it.xtb b/ios/chrome/app/strings/resources/ios_strings_it.xtb index e7c3cc0..4e849bf2 100644 --- a/ios/chrome/app/strings/resources/ios_strings_it.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_it.xtb
@@ -14,6 +14,7 @@ <translation id="1084365883616172403">Pubblicazione su Facebook completata.</translation> <translation id="1103523840287552314">Traduci sempre <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Accetta e continua</translation> +<translation id="110724200315609752">Passa alla finestra aperta</translation> <translation id="1112015203684611006">Stampa non riuscita.</translation> <translation id="1125564390852150847">Crea una nuova scheda.</translation> <translation id="1145536944570833626">Elimina dati esistenti.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ka.xtb b/ios/chrome/app/strings/resources/ios_strings_ka.xtb index 5aa5719..92db19b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ka.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ka.xtb
@@ -14,6 +14,7 @@ <translation id="1084365883616172403">Facebook-ის პოსტი დასრულებულია.</translation> <translation id="1103523840287552314">ყოველთვის თარგმნე ამ ენიდან: <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">მიღება და გაგრძელება</translation> +<translation id="110724200315609752">გახსნილ ფანჯარაზე გადართვა</translation> <translation id="1112015203684611006">ბეჭდვა ვერ განხორციელდა.</translation> <translation id="1125564390852150847">ახალი ჩანართის შექმნა.</translation> <translation id="1145536944570833626">არსებული მონაცემების წაშლა.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_strings_kn.xtb index 6cf2846..e4a1b408 100644 --- a/ios/chrome/app/strings/resources/ios_strings_kn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
@@ -14,6 +14,7 @@ <translation id="1084365883616172403">Facebook ಪೋಸ್ಟ್ ಪೂರ್ಣಗೊಂಡಿದೆ.</translation> <translation id="1103523840287552314">ಯಾವಾಗಲೂ ಅನುವಾದಿಸಿ <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">ಅಂಗೀಕರಿಸಿ ಮತ್ತು ಮುಂದುವರಿಯಿರಿ</translation> +<translation id="110724200315609752">ತೆರೆದ ವಿಂಡೋಗೆ ಬದಲಿಸಿ.</translation> <translation id="1112015203684611006">ಮುದ್ರಿಸುವಿಕೆ ವಿಫಲಗೊಂಡಿದೆ.</translation> <translation id="1125564390852150847">ಹೊಸ ಟ್ಯಾಬ್ ರಚಿಸಿ.</translation> <translation id="1145536944570833626">ಪ್ರಸ್ತುತ ಡೇಟಾ ಅಳಿಸಿ.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_strings_lt.xtb index ce3e1c32..1122830 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lt.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
@@ -14,6 +14,7 @@ <translation id="1084365883616172403">„Facebook“ įrašas paskelbtas.</translation> <translation id="1103523840287552314">Visada versti <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Sutikti ir tęsti</translation> +<translation id="110724200315609752">Perjungti į atidarytą langą</translation> <translation id="1112015203684611006">Nepav. atsp.</translation> <translation id="1125564390852150847">Kurti naują skirtuką.</translation> <translation id="1145536944570833626">Ištrinti esamus duomenis.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mk.xtb b/ios/chrome/app/strings/resources/ios_strings_mk.xtb index ca6ece8..cf29db3e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mk.xtb
@@ -14,6 +14,7 @@ <translation id="1084365883616172403">Објавата на Facebook е завршена.</translation> <translation id="1103523840287552314">Секогаш преведувај <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Прифати и продолжи</translation> +<translation id="110724200315609752">Префрлете се на отворениот прозорец</translation> <translation id="1112015203684611006">Печатењето не успеа.</translation> <translation id="1125564390852150847">Создај нова картичка.</translation> <translation id="1145536944570833626">Избришете ги постоечките податоци.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_strings_ml.xtb index 45d090d..908a7f7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ml.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
@@ -14,6 +14,7 @@ <translation id="1084365883616172403">Facebook പങ്കിടൽ പൂർത്തിയായി.</translation> <translation id="1103523840287552314"><ph name="LANGUAGE" /> എല്ലായ്പ്പോഴും വിവര്ത്തനം ചെയ്യുക </translation> <translation id="1104948393051856124">അംഗീകരിച്ച് തുടരുക</translation> +<translation id="110724200315609752">തുറന്ന വിൻഡോയിലേക്ക് മാറുക</translation> <translation id="1112015203684611006">പ്രിന്റിംഗ് പരാജയപ്പെട്ടു.</translation> <translation id="1125564390852150847">പുതിയ ടാബ് സൃഷ്ടിക്കുക.</translation> <translation id="1145536944570833626">നിലവിലുള്ള വിവരങ്ങൾ ഇല്ലാതാക്കുക.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb index 10de894..07b4aa8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -14,6 +14,7 @@ <translation id="1084365883616172403">Facebook पोस्ट पूर्ण केले.</translation> <translation id="1103523840287552314">नेहमी भाषांतर करा <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">स्वीकारा आणि सुरू ठेवा</translation> +<translation id="110724200315609752">उघड्या विंडोवर स्विच करा</translation> <translation id="1112015203684611006">प्रिंट अयशस्वी झाले.</translation> <translation id="1125564390852150847">नवीन टॅब तयार करा.</translation> <translation id="1145536944570833626">विद्यमान डेटा हटवा.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_strings_nl.xtb index 092b4e5..494ee4d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_nl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
@@ -14,6 +14,7 @@ <translation id="1084365883616172403">Facebook-bericht voltooid.</translation> <translation id="1103523840287552314"><ph name="LANGUAGE" /> altijd vertalen</translation> <translation id="1104948393051856124">Accepteren en doorgaan</translation> +<translation id="110724200315609752">Overschakelen naar geopend venster</translation> <translation id="1112015203684611006">Afdrukken mislukt.</translation> <translation id="1125564390852150847">Nieuw tabblad maken.</translation> <translation id="1145536944570833626">Bestaande gegevens verwijderen.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb index cfd1b44..7c2ff56 100644 --- a/ios/chrome/app/strings/resources/ios_strings_no.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -14,6 +14,7 @@ <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> +<translation id="110724200315609752">Bytt til åpent vindu</translation> <translation id="1112015203684611006">Utskriften mislyktes.</translation> <translation id="1125564390852150847">Åpne en ny fane.</translation> <translation id="1145536944570833626">Slett eksisterende data.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb index b0f6236..e120c82 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -14,6 +14,7 @@ <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> +<translation id="110724200315609752">Przełącz na otwarte okno</translation> <translation id="1112015203684611006">Drukowanie nie udało się.</translation> <translation id="1125564390852150847">Utwórz nową kartę.</translation> <translation id="1145536944570833626">Usuń istniejące dane.</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 cd61a5a..4a7ad27 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -14,6 +14,7 @@ <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> +<translation id="110724200315609752">Mudar para janela aberta</translation> <translation id="1112015203684611006">Falha na impressão.</translation> <translation id="1125564390852150847">Criar nova guia</translation> <translation id="1145536944570833626">Excluir dados já existentes.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb index 314c389..0223ba5 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -14,6 +14,7 @@ <translation id="1084365883616172403">Publicação no Facebook concluída.</translation> <translation id="1103523840287552314">Traduzir sempre <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Aceitar e Continuar</translation> +<translation id="110724200315609752">Mudar para a janela aberta</translation> <translation id="1112015203684611006">Falha ao imprimir.</translation> <translation id="1125564390852150847">Criar novo separador</translation> <translation id="1145536944570833626">Eliminar dados existentes.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_si.xtb b/ios/chrome/app/strings/resources/ios_strings_si.xtb index bb1f9cc..1b2ab2f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_si.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_si.xtb
@@ -14,6 +14,7 @@ <translation id="1084365883616172403">Facebook පළ කිරීම සම්පූර්ණයි.</translation> <translation id="1103523840287552314">සැමවිටම <ph name="LANGUAGE" /> පරිවර්තනය කරන්න</translation> <translation id="1104948393051856124">පිළිගෙන කරගෙන යන්න</translation> +<translation id="110724200315609752">කවුළුව විවෘත කරන්න වෙත මාරු වන්න</translation> <translation id="1112015203684611006">මුද්රණය කිරීම අසාර්ථක විය.</translation> <translation id="1125564390852150847">නව පටිත්තක් තනන්න.</translation> <translation id="1145536944570833626">පවතින දත්ත මකන්න.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb index be6590e..34660ad 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -14,6 +14,7 @@ <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> +<translation id="110724200315609752">Prepnúť na otvorené okno</translation> <translation id="1112015203684611006">Tlač zlyhala.</translation> <translation id="1125564390852150847">Vytvoriť novú kartu.</translation> <translation id="1145536944570833626">Odstrániť existujúce dáta.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_strings_sl.xtb index d2d9b5a..f64a58c7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
@@ -14,6 +14,7 @@ <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> +<translation id="110724200315609752">Preklop na odprto okno</translation> <translation id="1112015203684611006">Printing failed.</translation> <translation id="1125564390852150847">Create new tab.</translation> <translation id="1145536944570833626">Izbris obstoječih podatkov.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb index 9523d3e2..48ff4c59 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
@@ -14,6 +14,7 @@ <translation id="1084365883616172403">Facebook post je dovršen.</translation> <translation id="1103523840287552314">Uvek prevodi <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Prihvati i nastavi</translation> +<translation id="110724200315609752">Pređi na otvoren prozor</translation> <translation id="1112015203684611006">Štampanje nije uspelo.</translation> <translation id="1125564390852150847">Napravi novu karticu.</translation> <translation id="1145536944570833626">Izbrišite postojeće podatke</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb index 8aaaefed..1b5222cc 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -14,6 +14,7 @@ <translation id="1084365883616172403">Facebook пост је довршен.</translation> <translation id="1103523840287552314">Увек преводи <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Прихвати и настави</translation> +<translation id="110724200315609752">Пређи на отворен прозор</translation> <translation id="1112015203684611006">Штампање није успело.</translation> <translation id="1125564390852150847">Направи нову картицу.</translation> <translation id="1145536944570833626">Избришите постојеће податке</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sv.xtb b/ios/chrome/app/strings/resources/ios_strings_sv.xtb index 7e9a7ad3..7df55e5 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sv.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
@@ -14,6 +14,7 @@ <translation id="1084365883616172403">Inlägg på Facebook klart.</translation> <translation id="1103523840287552314">Översätt alltid <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Godkänn och fortsätt</translation> +<translation id="110724200315609752">Byt till Öppet fönster</translation> <translation id="1112015203684611006">Utskriftsfel.</translation> <translation id="1125564390852150847">Skapa en ny flik.</translation> <translation id="1145536944570833626">Radera befintlig data.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_strings_uk.xtb index 7b480423d..789596ce 100644 --- a/ios/chrome/app/strings/resources/ios_strings_uk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
@@ -14,6 +14,7 @@ <translation id="1084365883616172403">Опубліковано у Facebook</translation> <translation id="1103523840287552314">Завжди перекладати з такої мови: <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Прийняти та продовжити</translation> +<translation id="110724200315609752">Перейти у відкрите вікно</translation> <translation id="1112015203684611006">Не надруковано.</translation> <translation id="1125564390852150847">Створити вкладку.</translation> <translation id="1145536944570833626">Видалити наявні дані.</translation>
diff --git a/ios/chrome/browser/credential_provider/BUILD.gn b/ios/chrome/browser/credential_provider/BUILD.gn index c13dfdc21..354a10fb 100644 --- a/ios/chrome/browser/credential_provider/BUILD.gn +++ b/ios/chrome/browser/credential_provider/BUILD.gn
@@ -17,6 +17,8 @@ "credential_provider_service_factory.mm", "credential_provider_support.cc", "credential_provider_support.h", + "credential_provider_util.h", + "credential_provider_util.mm", ] deps = [ ":buildflags",
diff --git a/ios/chrome/browser/credential_provider/archivable_credential+password_form.mm b/ios/chrome/browser/credential_provider/archivable_credential+password_form.mm index 5614604..0097c91 100644 --- a/ios/chrome/browser/credential_provider/archivable_credential+password_form.mm +++ b/ios/chrome/browser/credential_provider/archivable_credential+password_form.mm
@@ -9,6 +9,7 @@ #include "components/autofill/core/common/password_form.h" #include "components/password_manager/core/browser/android_affiliation/affiliation_utils.h" #include "components/password_manager/core/browser/password_ui_utils.h" +#import "ios/chrome/browser/credential_provider/credential_provider_util.h" #include "url/gurl.h" #if !defined(__has_feature) || !__has_feature(objc_arc) @@ -19,22 +20,11 @@ using base::SysUTF8ToNSString; using base::SysUTF16ToNSString; -using base::UTF8ToUTF16; } // namespace @implementation ArchivableCredential (PasswordForm) -// Returns the equivalent of a unique record identifier. Built from the unique -// columns in the logins database. -NSString* recordIdentifierForPasswordForm(const autofill::PasswordForm& form) { - // These are the UNIQUE keys in the login database. - return SysUTF16ToNSString( - UTF8ToUTF16(form.url.spec() + "|") + form.username_element + - UTF8ToUTF16("|") + form.username_value + UTF8ToUTF16("|") + - form.password_element + UTF8ToUTF16("|" + form.signon_realm)); -} - - (instancetype)initWithPasswordForm:(const autofill::PasswordForm&)passwordForm favicon:(NSString*)favicon validationIdentifier:(NSString*)validationIdentifier { @@ -49,7 +39,7 @@ return [self initWithFavicon:favicon keychainIdentifier:keychainIdentifier rank:passwordForm.times_used - recordIdentifier:recordIdentifierForPasswordForm(passwordForm) + recordIdentifier:RecordIdentifierForPasswordForm(passwordForm) serviceIdentifier:SysUTF8ToNSString(passwordForm.url.spec()) serviceName:SysUTF8ToNSString(site_name) user:SysUTF16ToNSString(passwordForm.username_value)
diff --git a/ios/chrome/browser/credential_provider/credential_provider_service.mm b/ios/chrome/browser/credential_provider/credential_provider_service.mm index 75992ee..f2beeb23 100644 --- a/ios/chrome/browser/credential_provider/credential_provider_service.mm +++ b/ios/chrome/browser/credential_provider/credential_provider_service.mm
@@ -17,6 +17,7 @@ #include "components/password_manager/core/browser/password_store_change.h" #include "components/signin/public/identity_manager/identity_manager.h" #include "ios/chrome/browser/credential_provider/archivable_credential+password_form.h" +#import "ios/chrome/browser/credential_provider/credential_provider_util.h" #include "ios/chrome/common/app_group/app_group_constants.h" #import "ios/chrome/common/credential_provider/archivable_credential.h" #import "ios/chrome/common/credential_provider/archivable_credential_store.h" @@ -237,7 +238,7 @@ for (const PasswordStoreChange& change : changes) { ArchivableCredential* credential = CredentialFromForm(change.form(), account_validation_id_); - if (!credential) { + if (change.form().blocked_by_user) { continue; } switch (change.type()) { @@ -248,7 +249,11 @@ [archivable_credential_store_ updateCredential:credential]; break; case PasswordStoreChange::REMOVE: - [archivable_credential_store_ removeCredential:credential]; + // Using the record identifier from the form, as the credential might + // not be valid anymore. + [archivable_credential_store_ + removeCredentialWithRecordIdentifier: + RecordIdentifierForPasswordForm(change.form())]; break; default:
diff --git a/ios/chrome/browser/credential_provider/credential_provider_util.h b/ios/chrome/browser/credential_provider/credential_provider_util.h new file mode 100644 index 0000000..32fe1e98 --- /dev/null +++ b/ios/chrome/browser/credential_provider/credential_provider_util.h
@@ -0,0 +1,16 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_CREDENTIAL_PROVIDER_CREDENTIAL_PROVIDER_UTIL_H_ +#define IOS_CHROME_BROWSER_CREDENTIAL_PROVIDER_CREDENTIAL_PROVIDER_UTIL_H_ + +#import <Foundation/Foundation.h> + +#include "components/autofill/core/common/password_form.h" + +// Returns the equivalent of a unique record identifier. Built from the unique +// columns in the logins database. +NSString* RecordIdentifierForPasswordForm(const autofill::PasswordForm& form); + +#endif // IOS_CHROME_BROWSER_CREDENTIAL_PROVIDER_CREDENTIAL_PROVIDER_UTIL_H_
diff --git a/ios/chrome/browser/credential_provider/credential_provider_util.mm b/ios/chrome/browser/credential_provider/credential_provider_util.mm new file mode 100644 index 0000000..b365e80f --- /dev/null +++ b/ios/chrome/browser/credential_provider/credential_provider_util.mm
@@ -0,0 +1,23 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ios/chrome/browser/credential_provider/credential_provider_util.h" + +#include "base/strings/sys_string_conversions.h" +#include "base/strings/utf_string_conversions.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +using base::SysUTF16ToNSString; +using base::UTF8ToUTF16; + +NSString* RecordIdentifierForPasswordForm(const autofill::PasswordForm& form) { + // These are the UNIQUE keys in the login database. + return SysUTF16ToNSString( + UTF8ToUTF16(form.url.spec() + "|") + form.username_element + + UTF8ToUTF16("|") + form.username_value + UTF8ToUTF16("|") + + form.password_element + UTF8ToUTF16("|" + form.signon_realm)); +}
diff --git a/ios/chrome/browser/ui/main/scene_controller.mm b/ios/chrome/browser/ui/main/scene_controller.mm index 12e217c4..02500b5 100644 --- a/ios/chrome/browser/ui/main/scene_controller.mm +++ b/ios/chrome/browser/ui/main/scene_controller.mm
@@ -494,11 +494,20 @@ connectionInformation:self startupInformation:self.mainController browserState:self.currentInterface.browserState]; - // It is necessary to reset the pendingUserActivity after handling it. - // Handle the reset asynchronously to avoid interfering with other observers. - dispatch_async(dispatch_get_main_queue(), ^{ - self.sceneState.pendingUserActivity = nil; - }); + if (sceneIsActive) { + // It is necessary to reset the pendingUserActivity after handling it. + // Handle the reset asynchronously to avoid interfering with other + // observers. + dispatch_async(dispatch_get_main_queue(), ^{ + self.sceneState.pendingUserActivity = nil; + }); + } +} + +- (void)sceneStateDidHideModalOverlay:(SceneState*)sceneState { + if (self.sceneState.activationLevel >= SceneActivationLevelForegroundActive) { + [self handleExternalIntents]; + } } #pragma mark - AppStateObserver
diff --git a/ios/chrome/browser/ui/main/scene_state.h b/ios/chrome/browser/ui/main/scene_state.h index 992abfe..7628e5d 100644 --- a/ios/chrome/browser/ui/main/scene_state.h +++ b/ios/chrome/browser/ui/main/scene_state.h
@@ -55,6 +55,8 @@ - (void)sceneStateWillShowModalOverlay:(SceneState*)sceneState; // Notifies when presentingModalOverlay is being set to false. - (void)sceneStateWillHideModalOverlay:(SceneState*)sceneState; +// Notifies when presentingModalOverlay has been set to false. +- (void)sceneStateDidHideModalOverlay:(SceneState*)sceneState; // Notifies when URLContexts have been added to |URLContextsToOpen|. - (void)sceneState:(SceneState*)sceneState hasPendingURLs:(NSSet<UIOpenURLContext*>*)URLContexts
diff --git a/ios/chrome/browser/ui/main/scene_state.mm b/ios/chrome/browser/ui/main/scene_state.mm index c6321dce..4718cca 100644 --- a/ios/chrome/browser/ui/main/scene_state.mm +++ b/ios/chrome/browser/ui/main/scene_state.mm
@@ -112,6 +112,10 @@ } _presentingModalOverlay = presentingModalOverlay; + + if (!presentingModalOverlay) { + [self.observers sceneStateDidHideModalOverlay:self]; + } } - (void)setURLContextsToOpen:(NSSet<UIOpenURLContext*>*)URLContextsToOpen {
diff --git a/ios/chrome/common/credential_provider/archivable_credential_store.mm b/ios/chrome/common/credential_provider/archivable_credential_store.mm index 610d9f1..7f11ab38 100644 --- a/ios/chrome/common/credential_provider/archivable_credential_store.mm +++ b/ios/chrome/common/credential_provider/archivable_credential_store.mm
@@ -116,17 +116,16 @@ } - (void)updateCredential:(id<Credential>)credential { - [self removeCredential:credential]; + [self removeCredentialWithRecordIdentifier:credential.recordIdentifier]; [self addCredential:credential]; } -- (void)removeCredential:(id<Credential>)credential { - DCHECK(credential.recordIdentifier) - << "credential must have a record identifier"; +- (void)removeCredentialWithRecordIdentifier:(NSString*)recordIdentifier { + DCHECK(recordIdentifier.length) << "Invalid |recordIdentifier| was passed."; dispatch_barrier_async(self.workingQueue, ^{ - DCHECK(self.memoryStorage[credential.recordIdentifier]) + DCHECK(self.memoryStorage[recordIdentifier]) << "Credential doesn't exist in the storage"; - self.memoryStorage[credential.recordIdentifier] = nil; + self.memoryStorage[recordIdentifier] = nil; }); }
diff --git a/ios/chrome/common/credential_provider/archivable_credential_store_unittest.mm b/ios/chrome/common/credential_provider/archivable_credential_store_unittest.mm index 0042464..c0728b6 100644 --- a/ios/chrome/common/credential_provider/archivable_credential_store_unittest.mm +++ b/ios/chrome/common/credential_provider/archivable_credential_store_unittest.mm
@@ -100,7 +100,8 @@ [credentialStore addCredential:credential]; EXPECT_EQ(1u, credentialStore.credentials.count); - [credentialStore removeCredential:credential]; + [credentialStore + removeCredentialWithRecordIdentifier:credential.recordIdentifier]; EXPECT_EQ(0u, credentialStore.credentials.count); }
diff --git a/ios/chrome/common/credential_provider/credential_store.h b/ios/chrome/common/credential_provider/credential_store.h index e22d811..e71618a 100644 --- a/ios/chrome/common/credential_provider/credential_store.h +++ b/ios/chrome/common/credential_provider/credential_store.h
@@ -34,7 +34,7 @@ // Removes a credential from the memory storage. Use |-saveDataWithCompletion:| // to update the data on disk. -- (void)removeCredential:(id<Credential>)credential; +- (void)removeCredentialWithRecordIdentifier:(NSString*)recordIdentifier; // Returns the credential with matching |identifier| or nil if none. - (id<Credential>)credentialWithIdentifier:(NSString*)identifier;
diff --git a/ipc/BUILD.gn b/ipc/BUILD.gn index 994d45e..48bdc50 100644 --- a/ipc/BUILD.gn +++ b/ipc/BUILD.gn
@@ -10,6 +10,12 @@ import("//third_party/protobuf/proto_library.gni") import("//tools/ipc_fuzzer/ipc_fuzzer.gni") +# Reset sources_assignment_filter for the BUILD.gn file to prevent +# regression during the migration of Chromium away from the feature. +# See docs/no_sources_assignment_filter.md for more information. +# TODO(crbug.com/1018739): remove this when migration is done. +set_sources_assignment_filter([]) + buildflag_header("ipc_buildflags") { header = "ipc_buildflags.h" @@ -117,10 +123,6 @@ component("message_support") { sources = [ - "handle_attachment_win.cc", - "handle_attachment_win.h", - "handle_win.cc", - "handle_win.h", "ipc_message.cc", "ipc_message.h", "ipc_message_attachment.cc", @@ -136,12 +138,17 @@ "ipc_platform_file.h", "ipc_sync_message.cc", "ipc_sync_message.h", - "mach_port_attachment_mac.cc", - "mach_port_attachment_mac.h", - "mach_port_mac.cc", - "mach_port_mac.h", ] + if (is_win) { + sources += [ + "handle_attachment_win.cc", + "handle_attachment_win.h", + "handle_win.cc", + "handle_win.h", + ] + } + if (is_posix || is_fuchsia) { sources += [ "ipc_platform_file_attachment_posix.cc", @@ -149,6 +156,15 @@ ] } + if (is_mac) { + sources += [ + "mach_port_attachment_mac.cc", + "mach_port_attachment_mac.h", + "mach_port_mac.cc", + "mach_port_mac.h", + ] + } + if (is_fuchsia) { sources += [ "handle_attachment_fuchsia.cc",
diff --git a/net/dns/BUILD.gn b/net/dns/BUILD.gn index 0c38656..4a7e19e 100644 --- a/net/dns/BUILD.gn +++ b/net/dns/BUILD.gn
@@ -9,6 +9,12 @@ import("//build/config/android/rules.gni") } +# Reset sources_assignment_filter for the BUILD.gn file to prevent +# regression during the migration of Chromium away from the feature. +# See docs/no_sources_assignment_filter.md for more information. +# TODO(crbug.com/1018739): remove this when migration is done. +set_sources_assignment_filter([]) + enable_built_in_dns = !is_ios source_set("dns") { @@ -39,17 +45,12 @@ "address_info.cc", "address_info.h", "address_sorter.h", - "address_sorter_win.cc", "context_host_resolver.cc", "context_host_resolver.h", "dns_config.cc", "dns_config_overrides.cc", "dns_config_service.cc", "dns_config_service.h", - "dns_config_service_win.cc", - "dns_config_service_win.h", - "dns_config_watcher_mac.cc", - "dns_config_watcher_mac.h", "dns_hosts.cc", "dns_hosts.h", "dns_query.cc", @@ -78,8 +79,6 @@ "httpssvc_metrics.cc", "httpssvc_metrics.h", "mapped_host_resolver.cc", - "notify_watcher_mac.cc", - "notify_watcher_mac.h", "record_parsed.cc", "record_rdata.cc", "resolve_context.cc", @@ -90,6 +89,23 @@ "system_dns_config_change_notifier.h", ] + if (is_win) { + sources += [ + "address_sorter_win.cc", + "dns_config_service_win.cc", + "dns_config_service_win.h", + ] + } + + if (is_mac) { + sources += [ + "dns_config_watcher_mac.cc", + "dns_config_watcher_mac.h", + "notify_watcher_mac.cc", + "notify_watcher_mac.h", + ] + } + if (is_fuchsia) { sources += [ "dns_config_service_fuchsia.cc", @@ -387,7 +403,6 @@ "address_info_unittest.cc", "context_host_resolver_unittest.cc", "dns_config_service_unittest.cc", - "dns_config_service_win_unittest.cc", "dns_hosts_unittest.cc", "dns_query_unittest.cc", "dns_response_unittest.cc", @@ -406,6 +421,10 @@ "system_dns_config_change_notifier_unittest.cc", ] + if (is_win) { + sources += [ "dns_config_service_win_unittest.cc" ] + } + if (is_posix) { sources += [ "dns_config_service_posix_unittest.cc" ] }
diff --git a/services/device/public/mojom/BUILD.gn b/services/device/public/mojom/BUILD.gn index e7f0f73..55d880e 100644 --- a/services/device/public/mojom/BUILD.gn +++ b/services/device/public/mojom/BUILD.gn
@@ -36,7 +36,7 @@ public_deps = [ "//mojo/public/mojom/base", "//services/network/public/mojom", - "//services/network/public/mojom:mutable_network_traffic_annotation_interface", + "//services/network/public/mojom:url_loader_base", "//url/mojom:url_mojom_gurl", ]
diff --git a/services/network/public/cpp/BUILD.gn b/services/network/public/cpp/BUILD.gn index cc148fc..d66d36e 100644 --- a/services/network/public/cpp/BUILD.gn +++ b/services/network/public/cpp/BUILD.gn
@@ -244,9 +244,7 @@ ":cookies_mojom_support", ":crash_keys", ":ip_address_mojom_support", - "//services/network/public/mojom:data_pipe_interfaces", - "//services/network/public/mojom:mutable_network_traffic_annotation_interface", - "//services/network/public/mojom:trust_tokens_interface", + "//services/network/public/mojom:url_loader_base", "//third_party/webrtc_overrides:webrtc_component", "//url/ipc:url_ipc", "//url/mojom:url_mojom_gurl",
diff --git a/services/network/public/mojom/BUILD.gn b/services/network/public/mojom/BUILD.gn index c659ffa..47cc972d 100644 --- a/services/network/public/mojom/BUILD.gn +++ b/services/network/public/mojom/BUILD.gn
@@ -146,47 +146,45 @@ ] } -# These interfaces are put in their own target to avoid a circular dependency, +# These .mojom files are put in their own target to avoid a circular dependency, # which comes from the fact that the typemap for url_loader.mojom -# (ResourceRequestBody) uses these interfaces. -mojom("data_pipe_interfaces") { +# (ResourceRequest) depends on them. +mojom("url_loader_base") { generate_java = true sources = [ "chunked_data_pipe_getter.mojom", "data_pipe_getter.mojom", + "mutable_network_traffic_annotation_tag.mojom", + "mutable_partial_network_traffic_annotation_tag.mojom", + "trust_tokens.mojom", ] - # TODO(crbug/598073): When moving the service implementation to - # //services/network, add the correct values for export_class_attribute / - # export_define / export_header here. Context in https://crrev.com/2225673002. + public_deps = [ + "//mojo/public/mojom/base", + "//url/mojom:url_mojom_origin", + ] if (!is_ios) { export_class_attribute_blink = "BLINK_PLATFORM_EXPORT" export_define_blink = "BLINK_PLATFORM_IMPLEMENTATION=1" export_header_blink = "third_party/blink/public/platform/web_common.h" } -} -mojom("mutable_network_traffic_annotation_interface") { - generate_java = true - sources = [ - "mutable_network_traffic_annotation_tag.mojom", - "mutable_partial_network_traffic_annotation_tag.mojom", + # Shared by cpp_typemaps and blink_cpp_typemaps. + shared_typemaps = [ + { + types = [ + { + mojom = "network.mojom.MutableNetworkTrafficAnnotationTag" + cpp = "::net::MutableNetworkTrafficAnnotationTag" + }, + ] + traits_headers = [ "//services/network/public/cpp/mutable_network_traffic_annotation_tag_mojom_traits.h" ] + traits_public_deps = [ "//net/traffic_annotation" ] + }, ] - mutable_network_traffic_annotation_tag_typemap = { - types = [ - { - mojom = "network.mojom.MutableNetworkTrafficAnnotationTag" - cpp = "::net::MutableNetworkTrafficAnnotationTag" - }, - ] - traits_headers = [ "//services/network/public/cpp/mutable_network_traffic_annotation_tag_mojom_traits.h" ] - traits_public_deps = [ "//net/traffic_annotation" ] - } - cpp_typemaps = [ - mutable_network_traffic_annotation_tag_typemap, { types = [ { @@ -199,24 +197,9 @@ }, ] - blink_cpp_typemaps = [ mutable_network_traffic_annotation_tag_typemap ] -} + cpp_typemaps += shared_typemaps -# These interfaces are put in their own target to avoid a circular dependency, -# which comes from the fact that the typemap for url_loader.mojom -# (ResourceRequestBody) uses these interfaces. -mojom("trust_tokens_interface") { - generate_java = true - sources = [ "trust_tokens.mojom" ] - public_deps = [ - "//mojo/public/mojom/base", - "//url/mojom:url_mojom_origin", - ] - if (!is_ios) { - export_class_attribute_blink = "BLINK_PLATFORM_EXPORT" - export_define_blink = "BLINK_PLATFORM_IMPLEMENTATION=1" - export_header_blink = "third_party/blink/public/platform/web_common.h" - } + blink_cpp_typemaps = shared_typemaps } # This target is split from "mojom" target as the lazy serialization may @@ -487,11 +470,9 @@ public_deps = [ ":cookies_mojom", - ":data_pipe_interfaces", ":mojom_ip_address", ":mojom_network_isolation_key", - ":mutable_network_traffic_annotation_interface", - ":trust_tokens_interface", + ":url_loader_base", ":websocket_mojom", "//mojo/public/mojom/base", "//services/proxy_resolver/public/mojom",
diff --git a/services/resource_coordinator/BUILD.gn b/services/resource_coordinator/BUILD.gn index 66fde5a..87aeaa1f 100644 --- a/services/resource_coordinator/BUILD.gn +++ b/services/resource_coordinator/BUILD.gn
@@ -17,8 +17,6 @@ "memory_instrumentation/global_dump_graph_converter.h", "memory_instrumentation/graph.cc", "memory_instrumentation/graph.h", - "memory_instrumentation/graph_processor.cc", - "memory_instrumentation/graph_processor.h", "memory_instrumentation/memory_dump_map_converter.cc", "memory_instrumentation/memory_dump_map_converter.h", "memory_instrumentation/queued_request.cc", @@ -51,7 +49,6 @@ "memory_instrumentation/chrome_graph_processor_unittest.cc", "memory_instrumentation/coordinator_impl_unittest.cc", "memory_instrumentation/global_dump_graph_converter_unittest.cc", - "memory_instrumentation/graph_processor_unittest.cc", "memory_instrumentation/graph_unittest.cc", "memory_instrumentation/memory_dump_map_converter_unittest.cc", "public/cpp/memory_instrumentation/memory_instrumentation_mojom_traits_unittest.cc",
diff --git a/services/resource_coordinator/memory_instrumentation/graph.h b/services/resource_coordinator/memory_instrumentation/graph.h index 5b02517..a85dc515 100644 --- a/services/resource_coordinator/memory_instrumentation/graph.h +++ b/services/resource_coordinator/memory_instrumentation/graph.h
@@ -2,12 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// This file is being migrated to the //third_party/perfetto repository -// as part of the plan in http://crbug.com/1095982. Until the migration -// is finished, there will be two copies around. Contact -// mobica-google-contributors@mobica.com if you feel you need to make -// non-trivial changes to this file. - #ifndef SERVICES_RESOURCE_COORDINATOR_MEMORY_INSTRUMENTATION_GRAPH_H_ #define SERVICES_RESOURCE_COORDINATOR_MEMORY_INSTRUMENTATION_GRAPH_H_
diff --git a/services/resource_coordinator/memory_instrumentation/graph_processor.cc b/services/resource_coordinator/memory_instrumentation/graph_processor.cc deleted file mode 100644 index f52fd7f..0000000 --- a/services/resource_coordinator/memory_instrumentation/graph_processor.cc +++ /dev/null
@@ -1,787 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "services/resource_coordinator/memory_instrumentation/graph_processor.h" - -#include "base/bind.h" -#include "base/check_op.h" -#include "base/memory/shared_memory_tracker.h" -#include "base/strings/string_split.h" - -namespace memory_instrumentation { - -using base::CompareCase; -using base::ProcessId; -using base::trace_event::MemoryAllocatorDump; -using base::trace_event::MemoryAllocatorDumpGuid; -using base::trace_event::ProcessMemoryDump; -using Edge = memory_instrumentation::GlobalDumpGraph::Edge; -using Node = memory_instrumentation::GlobalDumpGraph::Node; -using Process = memory_instrumentation::GlobalDumpGraph::Process; - -namespace { - -const char kSizeEntryName[] = "size"; -const char kEffectiveSizeEntryName[] = "effective_size"; - -Node::Entry::ScalarUnits EntryUnitsFromString(std::string units) { - if (units == MemoryAllocatorDump::kUnitsBytes) { - return Node::Entry::ScalarUnits::kBytes; - } else if (units == MemoryAllocatorDump::kUnitsObjects) { - return Node::Entry::ScalarUnits::kObjects; - } else { - // Invalid units so we just return a value of the correct type. - return Node::Entry::ScalarUnits::kObjects; - } -} - -base::Optional<uint64_t> GetSizeEntryOfNode(Node* node) { - auto size_it = node->entries()->find(kSizeEntryName); - if (size_it == node->entries()->end()) - return base::nullopt; - - DCHECK(size_it->second.type == Node::Entry::Type::kUInt64); - DCHECK(size_it->second.units == Node::Entry::ScalarUnits::kBytes); - return base::Optional<uint64_t>(size_it->second.value_uint64); -} - -} // namespace - -// static -std::unique_ptr<GlobalDumpGraph> GraphProcessor::CreateMemoryGraph( - const GraphProcessor::MemoryDumpMap& process_dumps) { - auto global_graph = std::make_unique<GlobalDumpGraph>(); - - // First pass: collects allocator dumps into a graph and populate - // with entries. - for (const auto& pid_to_dump : process_dumps) { - // There can be null entries in the map; simply filter these out. - if (!pid_to_dump.second) - continue; - - auto* graph = global_graph->CreateGraphForProcess(pid_to_dump.first); - CollectAllocatorDumps(*pid_to_dump.second, global_graph.get(), graph); - } - - // Second pass: generate the graph of edges between the nodes. - for (const auto& pid_to_dump : process_dumps) { - // There can be null entries in the map; simply filter these out. - if (!pid_to_dump.second) - continue; - - AddEdges(*pid_to_dump.second, global_graph.get()); - } - - return global_graph; -} - -// static -void GraphProcessor::RemoveWeakNodesFromGraph(GlobalDumpGraph* global_graph) { - auto* global_root = global_graph->shared_memory_graph()->root(); - - // Third pass: mark recursively nodes as weak if they don't have an associated - // dump and all their children are weak. - MarkImplicitWeakParentsRecursively(global_root); - for (const auto& pid_to_process : global_graph->process_dump_graphs()) { - MarkImplicitWeakParentsRecursively(pid_to_process.second->root()); - } - - // Fourth pass: recursively mark nodes as weak if they own a node which is - // weak or if they have a parent who is weak. - { - std::set<const Node*> visited; - MarkWeakOwnersAndChildrenRecursively(global_root, &visited); - for (const auto& pid_to_process : global_graph->process_dump_graphs()) { - MarkWeakOwnersAndChildrenRecursively(pid_to_process.second->root(), - &visited); - } - } - - // Fifth pass: remove all nodes which are weak (including their descendants) - // and clean owned by edges to match. - RemoveWeakNodesRecursively(global_root); - for (const auto& pid_to_process : global_graph->process_dump_graphs()) { - RemoveWeakNodesRecursively(pid_to_process.second->root()); - } -} - -// static -void GraphProcessor::AddOverheadsAndPropogateEntries( - GlobalDumpGraph* global_graph) { - // Sixth pass: account for tracing overhead in system memory allocators. - for (auto& pid_to_process : global_graph->process_dump_graphs()) { - Process* process = pid_to_process.second.get(); - if (process->FindNode("winheap")) { - AssignTracingOverhead("winheap", global_graph, - pid_to_process.second.get()); - } else if (process->FindNode("malloc")) { - AssignTracingOverhead("malloc", global_graph, - pid_to_process.second.get()); - } - } - - // Seventh pass: aggregate non-size integer entries into parents and propogate - // string and int entries for shared graph. - auto* global_root = global_graph->shared_memory_graph()->root(); - AggregateNumericsRecursively(global_root); - PropagateNumericsAndDiagnosticsRecursively(global_root); - for (auto& pid_to_process : global_graph->process_dump_graphs()) { - AggregateNumericsRecursively(pid_to_process.second->root()); - } -} - -// static -void GraphProcessor::CalculateSizesForGraph(GlobalDumpGraph* global_graph) { - // Eighth pass: calculate the size field for nodes by considering the sizes - // of their children and owners. - { - auto it = global_graph->VisitInDepthFirstPostOrder(); - while (Node* node = it.next()) { - CalculateSizeForNode(node); - } - } - - // Ninth pass: Calculate not-owned and not-owning sub-sizes of all nodes. - { - auto it = global_graph->VisitInDepthFirstPostOrder(); - while (Node* node = it.next()) { - CalculateDumpSubSizes(node); - } - } - - // Tenth pass: Calculate owned and owning coefficients of owned and owner - // nodes. - { - auto it = global_graph->VisitInDepthFirstPostOrder(); - while (Node* node = it.next()) { - CalculateDumpOwnershipCoefficient(node); - } - } - - // Eleventh pass: Calculate cumulative owned and owning coefficients of all - // nodes. - { - auto it = global_graph->VisitInDepthFirstPreOrder(); - while (Node* node = it.next()) { - CalculateDumpCumulativeOwnershipCoefficient(node); - } - } - - // Twelfth pass: Calculate the effective sizes of all nodes. - { - auto it = global_graph->VisitInDepthFirstPostOrder(); - while (Node* node = it.next()) { - CalculateDumpEffectiveSize(node); - } - } -} - -// static -std::map<base::ProcessId, uint64_t> -GraphProcessor::ComputeSharedFootprintFromGraph( - const GlobalDumpGraph& global_graph) { - // Go through all nodes associated with global dumps and find if they are - // owned by shared memory nodes. - Node* global_root = - global_graph.shared_memory_graph()->root()->GetChild("global"); - - // If there are no global dumps then just return an empty map with no data. - if (!global_root) { - return std::map<base::ProcessId, uint64_t>(); - } - - struct GlobalNodeOwners { - std::list<Edge*> edges; - int max_priority = 0; - }; - - std::map<Node*, GlobalNodeOwners> global_node_to_shared_owners; - for (const auto& path_to_child : *global_root->children()) { - // The path of this node is something like "global/foo". - Node* global_node = path_to_child.second; - - // If there's no size to attribute, there's no point in propogating - // anything. - if (global_node->entries()->count("size") == 0) - continue; - - for (auto* edge : *global_node->owned_by_edges()) { - // Find if the source node's path starts with "shared_memory/" which - // indcates shared memory. - Node* source_root = edge->source()->dump_graph()->root(); - const Node* current = edge->source(); - DCHECK_NE(current, source_root); - - // Traverse up until we hit the point where |current| holds a node which - // is the child of |source_root|. - while (current->parent() != source_root) - current = current->parent(); - - // If the source is indeed a shared memory node, add the edge to the map. - if (source_root->GetChild(base::SharedMemoryTracker::kDumpRootName) == - current) { - GlobalNodeOwners* owners = &global_node_to_shared_owners[global_node]; - owners->edges.push_back(edge); - owners->max_priority = std::max(owners->max_priority, edge->priority()); - } - } - } - - // Go through the map and leave only the edges which have the maximum - // priority. - for (auto& global_to_shared_edges : global_node_to_shared_owners) { - int max_priority = global_to_shared_edges.second.max_priority; - global_to_shared_edges.second.edges.remove_if( - [max_priority](Edge* edge) { return edge->priority() < max_priority; }); - } - - // Compute the footprints by distributing the memory of the nodes - // among the processes which have edges left. - std::map<base::ProcessId, uint64_t> pid_to_shared_footprint; - for (const auto& global_to_shared_edges : global_node_to_shared_owners) { - Node* node = global_to_shared_edges.first; - const auto& edges = global_to_shared_edges.second.edges; - - const Node::Entry& size_entry = - node->entries()->find(kSizeEntryName)->second; - DCHECK_EQ(size_entry.type, Node::Entry::kUInt64); - - uint64_t size_per_process = size_entry.value_uint64 / edges.size(); - for (auto* edge : edges) { - base::ProcessId pid = edge->source()->dump_graph()->pid(); - pid_to_shared_footprint[pid] += size_per_process; - } - } - - return pid_to_shared_footprint; -} - -// static -void GraphProcessor::CollectAllocatorDumps( - const base::trace_event::ProcessMemoryDump& source, - GlobalDumpGraph* global_graph, - Process* process_graph) { - // Turn each dump into a node in the graph of dumps in the appropriate - // process dump or global dump. - for (const auto& path_to_dump : source.allocator_dumps()) { - const std::string& path = path_to_dump.first; - const MemoryAllocatorDump& dump = *path_to_dump.second; - - // All global dumps (i.e. those starting with global/) should be redirected - // to the shared graph. - bool is_global = base::StartsWith(path, "global/", CompareCase::SENSITIVE); - Process* process = - is_global ? global_graph->shared_memory_graph() : process_graph; - - Node* node; - auto node_iterator = global_graph->nodes_by_guid().find(dump.guid()); - if (node_iterator == global_graph->nodes_by_guid().end()) { - // Storing whether the process is weak here will allow for later - // computations on whether or not the node should be removed. - bool is_weak = dump.flags() & MemoryAllocatorDump::Flags::WEAK; - node = process->CreateNode(dump.guid(), path, is_weak); - } else { - node = node_iterator->second; - - DCHECK_EQ(node, process->FindNode(path)) - << "Nodes have different paths but same GUIDs"; - DCHECK(is_global) << "Multiple nodes have same GUID without being global"; - } - - // Copy any entries not already present into the node. - for (auto& entry : dump.entries()) { - switch (entry.entry_type) { - case MemoryAllocatorDump::Entry::EntryType::kUint64: - node->AddEntry(entry.name, EntryUnitsFromString(entry.units), - entry.value_uint64); - break; - case MemoryAllocatorDump::Entry::EntryType::kString: - node->AddEntry(entry.name, entry.value_string); - break; - } - } - } -} - -// static -void GraphProcessor::AddEdges( - const base::trace_event::ProcessMemoryDump& source, - GlobalDumpGraph* global_graph) { - const auto& nodes_by_guid = global_graph->nodes_by_guid(); - for (const auto& guid_to_edge : source.allocator_dumps_edges()) { - auto& edge = guid_to_edge.second; - - // Find the source and target nodes in the global map by guid. - auto source_it = nodes_by_guid.find(edge.source); - auto target_it = nodes_by_guid.find(edge.target); - - if (source_it == nodes_by_guid.end()) { - // If the source is missing then simply pretend the edge never existed - // leading to the memory being allocated to the target (if it exists). - continue; - } else if (target_it == nodes_by_guid.end()) { - // If the target is lost but the source is present, then also ignore - // this edge for now. - // TODO(lalitm): see crbug.com/770712 for the permanent fix for this - // issue. - continue; - } else { - // Add an edge indicating the source node owns the memory of the - // target node with the given importance of the edge. - global_graph->AddNodeOwnershipEdge(source_it->second, target_it->second, - edge.importance); - } - } -} - -// static -void GraphProcessor::MarkImplicitWeakParentsRecursively(Node* node) { - // Ensure that we aren't in a bad state where we have an implicit node - // which doesn't have any children (which is not the root node). - DCHECK(node->is_explicit() || !node->children()->empty() || !node->parent()); - - // Check that at this stage, any node which is weak is only so because - // it was explicitly created as such. - DCHECK(!node->is_weak() || node->is_explicit()); - - // If a node is already weak then all children will be marked weak at a - // later stage. - if (node->is_weak()) - return; - - // Recurse into each child and find out if all the children of this node are - // weak. - bool all_children_weak = true; - for (const auto& path_to_child : *node->children()) { - MarkImplicitWeakParentsRecursively(path_to_child.second); - all_children_weak = all_children_weak && path_to_child.second->is_weak(); - } - - // If all the children are weak and the parent is only an implicit one then we - // consider the parent as weak as well and we will later remove it. - node->set_weak(!node->is_explicit() && all_children_weak); -} - -// static -void GraphProcessor::MarkWeakOwnersAndChildrenRecursively( - Node* node, - std::set<const Node*>* visited) { - // If we've already visited this node then nothing to do. - if (visited->count(node) != 0) - return; - - // If we haven't visited the node which this node owns then wait for that. - if (node->owns_edge() && visited->count(node->owns_edge()->target()) == 0) - return; - - // If we haven't visited the node's parent then wait for that. - if (node->parent() && visited->count(node->parent()) == 0) - return; - - // If either the node we own or our parent is weak, then mark this node - // as weak. - if ((node->owns_edge() && node->owns_edge()->target()->is_weak()) || - (node->parent() && node->parent()->is_weak())) { - node->set_weak(true); - } - visited->insert(node); - - // Recurse into each owner node to mark any other nodes. - for (auto* owned_by_edge : *node->owned_by_edges()) { - MarkWeakOwnersAndChildrenRecursively(owned_by_edge->source(), visited); - } - - // Recurse into each child and find out if all the children of this node are - // weak. - for (const auto& path_to_child : *node->children()) { - MarkWeakOwnersAndChildrenRecursively(path_to_child.second, visited); - } -} - -// static -void GraphProcessor::RemoveWeakNodesRecursively(Node* node) { - auto* children = node->children(); - for (auto child_it = children->begin(); child_it != children->end();) { - Node* child = child_it->second; - - // If the node is weak, remove it. This automatically makes all - // descendents unreachable from the parents. If this node owned - // by another, it will have been marked earlier in - // |MarkWeakOwnersAndChildrenRecursively| and so will be removed - // by this method at some point. - if (child->is_weak()) { - child_it = children->erase(child_it); - continue; - } - - // We should never be in a situation where we're about to - // keep a node which owns a weak node (which will be/has been - // removed). - DCHECK(!child->owns_edge() || !child->owns_edge()->target()->is_weak()); - - // Descend and remove all weak child nodes. - RemoveWeakNodesRecursively(child); - - // Remove all edges with owner nodes which are weak. - std::vector<Edge*>* owned_by_edges = child->owned_by_edges(); - auto new_end = - std::remove_if(owned_by_edges->begin(), owned_by_edges->end(), - [](Edge* edge) { return edge->source()->is_weak(); }); - owned_by_edges->erase(new_end, owned_by_edges->end()); - - ++child_it; - } -} - -// static -void GraphProcessor::AssignTracingOverhead(base::StringPiece allocator, - GlobalDumpGraph* global_graph, - Process* process) { - // This method should only be called if the allocator node exists. - DCHECK(process->FindNode(allocator)); - - // Check that the tracing dump exists and isn't already owning another node. - Node* tracing_node = process->FindNode("tracing"); - if (!tracing_node) - return; - - // This should be first edge associated with the tracing node. - DCHECK(!tracing_node->owns_edge()); - - // Create the node under the allocator to which tracing overhead can be - // assigned. - std::string child_name = - allocator.as_string() + "/allocated_objects/tracing_overhead"; - Node* child_node = process->CreateNode(MemoryAllocatorDumpGuid(), child_name, - false /* weak */); - - // Assign the overhead of tracing to the tracing node. - global_graph->AddNodeOwnershipEdge(tracing_node, child_node, - 0 /* importance */); -} - -// static -Node::Entry GraphProcessor::AggregateNumericWithNameForNode( - Node* node, - base::StringPiece name) { - bool first = true; - Node::Entry::ScalarUnits units = Node::Entry::ScalarUnits::kObjects; - uint64_t aggregated = 0; - for (auto& path_to_child : *node->children()) { - auto* entries = path_to_child.second->entries(); - - // Retrieve the entry with the given column name. - auto name_to_entry_it = entries->find(name.as_string()); - if (name_to_entry_it == entries->end()) - continue; - - // Extract the entry from the iterator. - const Node::Entry& entry = name_to_entry_it->second; - - // Ensure that the entry is numeric. - DCHECK_EQ(entry.type, Node::Entry::Type::kUInt64); - - // Check that the units of every child's entry with the given name is the - // same (i.e. we don't get a number for one child and size for another - // child). We do this by having a DCHECK that the units match the first - // child's units. - DCHECK(first || units == entry.units); - units = entry.units; - aggregated += entry.value_uint64; - first = false; - } - return Node::Entry(units, aggregated); -} - -// static -void GraphProcessor::AggregateNumericsRecursively(Node* node) { - std::set<std::string> numeric_names; - - for (const auto& path_to_child : *node->children()) { - AggregateNumericsRecursively(path_to_child.second); - for (const auto& name_to_entry : *path_to_child.second->entries()) { - const std::string& name = name_to_entry.first; - if (name_to_entry.second.type == Node::Entry::Type::kUInt64 && - name != kSizeEntryName && name != kEffectiveSizeEntryName) { - numeric_names.insert(name); - } - } - } - - for (auto& name : numeric_names) { - node->entries()->emplace(name, AggregateNumericWithNameForNode(node, name)); - } -} - -// static -void GraphProcessor::PropagateNumericsAndDiagnosticsRecursively(Node* node) { - for (const auto& name_to_entry : *node->entries()) { - for (auto* edge : *node->owned_by_edges()) { - edge->source()->entries()->insert(name_to_entry); - } - } - for (const auto& path_to_child : *node->children()) { - PropagateNumericsAndDiagnosticsRecursively(path_to_child.second); - } -} - -// static -base::Optional<uint64_t> GraphProcessor::AggregateSizeForDescendantNode( - Node* root, - Node* descendant) { - Edge* owns_edge = descendant->owns_edge(); - if (owns_edge && owns_edge->target()->IsDescendentOf(*root)) - return 0; - - if (descendant->children()->size() == 0) - return GetSizeEntryOfNode(descendant).value_or(0ul); - - base::Optional<uint64_t> size; - for (auto path_to_child : *descendant->children()) { - auto c_size = AggregateSizeForDescendantNode(root, path_to_child.second); - if (size) - *size += c_size.value_or(0); - else - size = std::move(c_size); - } - return size; -} - -// Assumes that this function has been called on all children and owner nodes. -// static -void GraphProcessor::CalculateSizeForNode(Node* node) { - // Get the size at the root node if it exists. - base::Optional<uint64_t> node_size = GetSizeEntryOfNode(node); - - // Aggregate the size of all the child nodes. - base::Optional<uint64_t> aggregated_size; - for (auto path_to_child : *node->children()) { - auto c_size = AggregateSizeForDescendantNode(node, path_to_child.second); - if (aggregated_size) - *aggregated_size += c_size.value_or(0ul); - else - aggregated_size = std::move(c_size); - } - - // Check that if both aggregated and node sizes exist that the node size - // is bigger than the aggregated. - // TODO(lalitm): the following condition is triggered very often even though - // it is a warning in JS code. Find a way to add the warning to display in UI - // or to fix all instances where this is violated and then enable this check. - // DCHECK(!node_size || !aggregated_size || *node_size >= *aggregated_size); - - // Calculate the maximal size of an owner node. - base::Optional<uint64_t> max_owner_size; - for (auto* edge : *node->owned_by_edges()) { - auto o_size = GetSizeEntryOfNode(edge->source()); - if (max_owner_size) - *max_owner_size = std::max(o_size.value_or(0ul), *max_owner_size); - else - max_owner_size = std::move(o_size); - } - - // Check that if both owner and node sizes exist that the node size - // is bigger than the owner. - // TODO(lalitm): the following condition is triggered very often even though - // it is a warning in JS code. Find a way to add the warning to display in UI - // or to fix all instances where this is violated and then enable this check. - // DCHECK(!node_size || !max_owner_size || *node_size >= *max_owner_size); - - // Clear out any existing size entry which may exist. - node->entries()->erase(kSizeEntryName); - - // If no inference about size can be made then simply return. - if (!node_size && !aggregated_size && !max_owner_size) - return; - - // Update the node with the new size entry. - uint64_t aggregated_size_value = aggregated_size.value_or(0ul); - uint64_t process_size = - std::max({node_size.value_or(0ul), aggregated_size_value, - max_owner_size.value_or(0ul)}); - node->AddEntry(kSizeEntryName, Node::Entry::ScalarUnits::kBytes, - process_size); - - // If this is an intermediate node then add a ghost node which stores - // all sizes not accounted for by the children. - uint64_t unaccounted = process_size - aggregated_size_value; - if (unaccounted > 0 && !node->children()->empty()) { - Node* unspecified = node->CreateChild("<unspecified>"); - unspecified->AddEntry(kSizeEntryName, Node::Entry::ScalarUnits::kBytes, - unaccounted); - } -} - -// Assumes that this function has been called on all children and owner nodes. -// static -void GraphProcessor::CalculateDumpSubSizes(Node* node) { - // Completely skip dumps with undefined size. - base::Optional<uint64_t> size_opt = GetSizeEntryOfNode(node); - if (!size_opt) - return; - - // If the dump is a leaf node, then both sub-sizes are equal to the size. - if (node->children()->empty()) { - node->add_not_owning_sub_size(*size_opt); - node->add_not_owned_sub_size(*size_opt); - return; - } - - // Calculate this node's not-owning sub-size by summing up the not-owning - // sub-sizes of children which do not own another node. - for (const auto& path_to_child : *node->children()) { - if (path_to_child.second->owns_edge()) - continue; - node->add_not_owning_sub_size(path_to_child.second->not_owning_sub_size()); - } - - // Calculate this dump's not-owned sub-size. - for (const auto& path_to_child : *node->children()) { - Node* child = path_to_child.second; - - // If the child dump is not owned, then add its not-owned sub-size. - if (child->owned_by_edges()->empty()) { - node->add_not_owned_sub_size(child->not_owned_sub_size()); - continue; - } - - // If the child dump is owned, then add the difference between its size - // and the largest owner. - uint64_t largest_owner_size = 0; - for (Edge* edge : *child->owned_by_edges()) { - uint64_t source_size = GetSizeEntryOfNode(edge->source()).value_or(0); - largest_owner_size = std::max(largest_owner_size, source_size); - } - uint64_t child_size = GetSizeEntryOfNode(child).value_or(0); - node->add_not_owned_sub_size(child_size - largest_owner_size); - } -} - -// static -void GraphProcessor::CalculateDumpOwnershipCoefficient(Node* node) { - // Completely skip dumps with undefined size. - base::Optional<uint64_t> size_opt = GetSizeEntryOfNode(node); - if (!size_opt) - return; - - // We only need to consider owned dumps. - if (node->owned_by_edges()->empty()) - return; - - // Sort the owners in decreasing order of ownership priority and - // increasing order of not-owning sub-size (in case of equal priority). - std::vector<Edge*> owners = *node->owned_by_edges(); - std::sort(owners.begin(), owners.end(), [](Edge* a, Edge* b) { - if (a->priority() == b->priority()) { - return a->source()->not_owning_sub_size() < - b->source()->not_owning_sub_size(); - } - return b->priority() < a->priority(); - }); - - // Loop over the list of owners and distribute the owned dump's not-owned - // sub-size among them according to their ownership priority and - // not-owning sub-size. - uint64_t already_attributed_sub_size = 0; - for (auto current_it = owners.begin(); current_it != owners.end();) { - // Find the position of the first owner with lower priority. - int current_priority = (*current_it)->priority(); - auto next_it = - std::find_if(current_it, owners.end(), [current_priority](Edge* edge) { - return edge->priority() < current_priority; - }); - - // Compute the number of nodes which have the same priority as current. - size_t difference = std::distance(current_it, next_it); - - // Visit the owners with the same priority in increasing order of - // not-owned sub-size, split the owned memory among them appropriately, - // and calculate their owning coefficients. - double attributed_not_owning_sub_size = 0; - for (; current_it != next_it; current_it++) { - uint64_t not_owning_sub_size = - (*current_it)->source()->not_owning_sub_size(); - if (not_owning_sub_size > already_attributed_sub_size) { - attributed_not_owning_sub_size += - (not_owning_sub_size - already_attributed_sub_size) / difference; - already_attributed_sub_size = not_owning_sub_size; - } - - if (not_owning_sub_size != 0) { - double coeff = attributed_not_owning_sub_size / not_owning_sub_size; - (*current_it)->source()->set_owning_coefficient(coeff); - } - difference--; - } - - // At the end of this loop, we should move to a node with a lower priority. - DCHECK(current_it == next_it); - } - - // Attribute the remainder of the owned dump's not-owned sub-size to - // the dump itself and calculate its owned coefficient. - uint64_t not_owned_sub_size = node->not_owned_sub_size(); - if (not_owned_sub_size != 0) { - double remainder_sub_size = - not_owned_sub_size - already_attributed_sub_size; - node->set_owned_coefficient(remainder_sub_size / not_owned_sub_size); - } -} - -// static -void GraphProcessor::CalculateDumpCumulativeOwnershipCoefficient(Node* node) { - // Completely skip nodes with undefined size. - base::Optional<uint64_t> size_opt = GetSizeEntryOfNode(node); - if (!size_opt) - return; - - double cumulative_owned_coefficient = node->owned_coefficient(); - if (node->parent()) { - cumulative_owned_coefficient *= - node->parent()->cumulative_owned_coefficient(); - } - node->set_cumulative_owned_coefficient(cumulative_owned_coefficient); - - if (node->owns_edge()) { - node->set_cumulative_owning_coefficient( - node->owning_coefficient() * - node->owns_edge()->target()->cumulative_owning_coefficient()); - } else if (node->parent()) { - node->set_cumulative_owning_coefficient( - node->parent()->cumulative_owning_coefficient()); - } else { - node->set_cumulative_owning_coefficient(1); - } -} - -// static -void GraphProcessor::CalculateDumpEffectiveSize(Node* node) { - // Completely skip nodes with undefined size. As a result, each node will - // have defined effective size if and only if it has defined size. - base::Optional<uint64_t> size_opt = GetSizeEntryOfNode(node); - if (!size_opt) { - node->entries()->erase(kEffectiveSizeEntryName); - return; - } - - uint64_t effective_size = 0; - if (node->children()->empty()) { - // Leaf node. - effective_size = *size_opt * node->cumulative_owning_coefficient() * - node->cumulative_owned_coefficient(); - } else { - // Non-leaf node. - for (const auto& path_to_child : *node->children()) { - Node* child = path_to_child.second; - if (!GetSizeEntryOfNode(child)) - continue; - effective_size += - child->entries()->find(kEffectiveSizeEntryName)->second.value_uint64; - } - } - node->AddEntry(kEffectiveSizeEntryName, Node::Entry::ScalarUnits::kBytes, - effective_size); -} - -} // namespace memory_instrumentation \ No newline at end of file
diff --git a/services/resource_coordinator/memory_instrumentation/graph_processor.h b/services/resource_coordinator/memory_instrumentation/graph_processor.h deleted file mode 100644 index 2ef6d3b5..0000000 --- a/services/resource_coordinator/memory_instrumentation/graph_processor.h +++ /dev/null
@@ -1,237 +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. - -// This file is being migrated to the //third_party/perfetto repository -// as part of the plan in http://crbug.com/1095982. Until the migration -// is finished, there will be two copies around. Contact -// mobica-google-contributors@mobica.com if you feel you need to make -// non-trivial changes to this file. - -#ifndef SERVICES_RESOURCE_COORDINATOR_MEMORY_INSTRUMENTATION_GRAPH_PROCESSOR_H_ -#define SERVICES_RESOURCE_COORDINATOR_MEMORY_INSTRUMENTATION_GRAPH_PROCESSOR_H_ - -#include <memory> - -#include "base/process/process_handle.h" -#include "base/trace_event/process_memory_dump.h" -#include "services/resource_coordinator/memory_instrumentation/graph.h" - -namespace memory_instrumentation { - -class GraphProcessor { - public: - // This map does not own the pointers inside. - using MemoryDumpMap = - std::map<base::ProcessId, const base::trace_event::ProcessMemoryDump*>; - - static std::unique_ptr<GlobalDumpGraph> CreateMemoryGraph( - const MemoryDumpMap& process_dumps); - - static void RemoveWeakNodesFromGraph(GlobalDumpGraph* global_graph); - - static void AddOverheadsAndPropogateEntries(GlobalDumpGraph* global_graph); - - static void CalculateSizesForGraph(GlobalDumpGraph* global_graph); - - static std::map<base::ProcessId, uint64_t> ComputeSharedFootprintFromGraph( - const GlobalDumpGraph& global_graph); - - private: - friend class GraphProcessorTest; - - static void CollectAllocatorDumps( - const base::trace_event::ProcessMemoryDump& source, - GlobalDumpGraph* global_graph, - GlobalDumpGraph::Process* process_graph); - - static void AddEdges(const base::trace_event::ProcessMemoryDump& source, - GlobalDumpGraph* global_graph); - - static void MarkImplicitWeakParentsRecursively(GlobalDumpGraph::Node* node); - - static void MarkWeakOwnersAndChildrenRecursively( - GlobalDumpGraph::Node* node, - std::set<const GlobalDumpGraph::Node*>* nodes); - - static void RemoveWeakNodesRecursively(GlobalDumpGraph::Node* parent); - - static void AssignTracingOverhead(base::StringPiece allocator, - GlobalDumpGraph* global_graph, - GlobalDumpGraph::Process* process); - - static GlobalDumpGraph::Node::Entry AggregateNumericWithNameForNode( - GlobalDumpGraph::Node* node, - base::StringPiece name); - - static void AggregateNumericsRecursively(GlobalDumpGraph::Node* node); - - static void PropagateNumericsAndDiagnosticsRecursively( - GlobalDumpGraph::Node* node); - - static base::Optional<uint64_t> AggregateSizeForDescendantNode( - GlobalDumpGraph::Node* root, - GlobalDumpGraph::Node* descendant); - - static void CalculateSizeForNode(GlobalDumpGraph::Node* node); - - /** - * Calculate not-owned and not-owning sub-sizes of a memory allocator dump - * from its children's (sub-)sizes. - * - * Not-owned sub-size refers to the aggregated memory of all children which - * is not owned by other MADs. Conversely, not-owning sub-size is the - * aggregated memory of all children which do not own another MAD. The - * diagram below illustrates these two concepts: - * - * ROOT 1 ROOT 2 - * size: 4 size: 5 - * not-owned sub-size: 4 not-owned sub-size: 1 (!) - * not-owning sub-size: 0 (!) not-owning sub-size: 5 - * - * ^ ^ - * | | - * - * PARENT 1 ===== owns =====> PARENT 2 - * size: 4 size: 5 - * not-owned sub-size: 4 not-owned sub-size: 5 - * not-owning sub-size: 4 not-owning sub-size: 5 - * - * ^ ^ - * | | - * - * CHILD 1 CHILD 2 - * size [given]: 4 size [given]: 5 - * not-owned sub-size: 4 not-owned sub-size: 5 - * not-owning sub-size: 4 not-owning sub-size: 5 - * - * This method assumes that (1) the size of the dump, its children, and its - * owners [see calculateSizes()] and (2) the not-owned and not-owning - * sub-sizes of both the children and owners of the dump have already been - * calculated [depth-first post-order traversal]. - */ - static void CalculateDumpSubSizes(GlobalDumpGraph::Node* node); - - /** - * Calculate owned and owning coefficients of a memory allocator dump and - * its owners. - * - * The owning coefficient refers to the proportion of a dump's not-owning - * sub-size which is attributed to the dump (only relevant to owning MADs). - * Conversely, the owned coefficient is the proportion of a dump's - * not-owned sub-size, which is attributed to it (only relevant to owned - * MADs). - * - * The not-owned size of the owned dump is split among its owners in the - * order of the ownership importance as demonstrated by the following - * example: - * - * memory allocator dumps - * OWNED OWNER1 OWNER2 OWNER3 OWNER4 - * not-owned sub-size [given] 10 - - - - - * not-owning sub-size [given] - 6 7 5 8 - * importance [given] - 2 2 1 0 - * attributed not-owned sub-size 2 - - - - - * attributed not-owning sub-size - 3 4 0 1 - * owned coefficient 2/10 - - - - - * owning coefficient - 3/6 4/7 0/5 1/8 - * - * Explanation: Firstly, 6 bytes are split equally among OWNER1 and OWNER2 - * (highest importance). OWNER2 owns one more byte, so its attributed - * not-owning sub-size is 6/2 + 1 = 4 bytes. OWNER3 is attributed no size - * because it is smaller than the owners with higher priority. However, - * OWNER4 is larger, so it's attributed the difference 8 - 7 = 1 byte. - * Finally, 2 bytes remain unattributed and are hence kept in the OWNED - * dump as attributed not-owned sub-size. The coefficients are then - * directly calculated as fractions of the sub-sizes and corresponding - * attributed sub-sizes. - * - * Note that we always assume that all ownerships of a dump overlap (e.g. - * OWNER3 is subsumed by both OWNER1 and OWNER2). Hence, the table could - * be alternatively represented as follows: - * - * owned memory range - * 0 1 2 3 4 5 6 7 8 9 10 - * Priority 2 | OWNER1 + OWNER2 (split) | OWNER2 | - * Priority 1 | (already attributed) | - * Priority 0 | - - - (already attributed) - - - | OWNER4 | - * Remainder | - - - - - (already attributed) - - - - - - | OWNED | - * - * This method assumes that (1) the size of the dump [see calculateSizes()] - * and (2) the not-owned size of the dump and not-owning sub-sizes of its - * owners [see the first step of calculateEffectiveSizes()] have already - * been calculated. Note that the method doesn't make any assumptions about - * the order in which dumps are visited. - */ - static void CalculateDumpOwnershipCoefficient(GlobalDumpGraph::Node* node); - - /** - * Calculate cumulative owned and owning coefficients of a memory allocator - * dump from its (non-cumulative) owned and owning coefficients and the - * cumulative coefficients of its parent and/or owned dump. - * - * The cumulative coefficients represent the total effect of all - * (non-strict) ancestor ownerships on a memory allocator dump. The - * cumulative owned coefficient of a MAD can be calculated simply as: - * - * cumulativeOwnedC(M) = ownedC(M) * cumulativeOwnedC(parent(M)) - * - * This reflects the assumption that if a parent of a child MAD is - * (partially) owned, then the parent's owner also indirectly owns (a part - * of) the child MAD. - * - * The cumulative owning coefficient of a MAD depends on whether the MAD - * owns another dump: - * - * [if M doesn't own another MAD] - * / cumulativeOwningC(parent(M)) - * cumulativeOwningC(M) = - * \ [if M owns another MAD] - * owningC(M) * cumulativeOwningC(owned(M)) - * - * The reasoning behind the first case is similar to the one for cumulative - * owned coefficient above. The only difference is that we don't need to - * include the dump's (non-cumulative) owning coefficient because it is - * implicitly 1. - * - * The formula for the second case is derived as follows: Since the MAD - * owns another dump, its memory is not included in its parent's not-owning - * sub-size and hence shouldn't be affected by the parent's corresponding - * cumulative coefficient. Instead, the MAD indirectly owns everything - * owned by its owned dump (and so it should be affected by the - * corresponding coefficient). - * - * Note that undefined coefficients (and coefficients of non-existent - * dumps) are implicitly assumed to be 1. - * - * This method assumes that (1) the size of the dump [see calculateSizes()], - * (2) the (non-cumulative) owned and owning coefficients of the dump [see - * the second step of calculateEffectiveSizes()], and (3) the cumulative - * coefficients of the dump's parent and owned MADs (if present) - * [depth-first pre-order traversal] have already been calculated. - */ - static void CalculateDumpCumulativeOwnershipCoefficient( - GlobalDumpGraph::Node* node); - - /** - * Calculate the effective size of a memory allocator dump. - * - * In order to simplify the (already complex) calculation, we use the fact - * that effective size is cumulative (unlike regular size), i.e. the - * effective size of a non-leaf node is equal to the sum of effective sizes - * of its children. The effective size of a leaf MAD is calculated as: - * - * effectiveSize(M) = size(M) * cumulativeOwningC(M) * cumulativeOwnedC(M) - * - * This method assumes that (1) the size of the dump and its children [see - * calculateSizes()] and (2) the cumulative owning and owned coefficients - * of the dump (if it's a leaf node) [see the third step of - * calculateEffectiveSizes()] or the effective sizes of its children (if - * it's a non-leaf node) [depth-first post-order traversal] have already - * been calculated. - */ - static void CalculateDumpEffectiveSize(GlobalDumpGraph::Node* node); -}; - -} // namespace memory_instrumentation -#endif \ No newline at end of file
diff --git a/services/resource_coordinator/memory_instrumentation/graph_processor_unittest.cc b/services/resource_coordinator/memory_instrumentation/graph_processor_unittest.cc deleted file mode 100644 index 5dd2714..0000000 --- a/services/resource_coordinator/memory_instrumentation/graph_processor_unittest.cc +++ /dev/null
@@ -1,727 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "services/resource_coordinator/memory_instrumentation/graph_processor.h" - -#include "base/memory/shared_memory_tracker.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace memory_instrumentation { - -using base::ProcessId; -using base::trace_event::MemoryAllocatorDump; -using base::trace_event::MemoryAllocatorDumpGuid; -using base::trace_event::MemoryDumpArgs; -using base::trace_event::MemoryDumpLevelOfDetail; -using base::trace_event::ProcessMemoryDump; -using Edge = GlobalDumpGraph::Edge; -using Node = GlobalDumpGraph::Node; -using Process = GlobalDumpGraph::Process; - -namespace { - -const MemoryAllocatorDumpGuid kEmptyGuid; - -} // namespace - -class GraphProcessorTest : public testing::Test { - public: - GraphProcessorTest() {} - - void MarkImplicitWeakParentsRecursively(Node* node) { - GraphProcessor::MarkImplicitWeakParentsRecursively(node); - } - - void MarkWeakOwnersAndChildrenRecursively(Node* node) { - std::set<const Node*> visited; - GraphProcessor::MarkWeakOwnersAndChildrenRecursively(node, &visited); - } - - void RemoveWeakNodesRecursively(Node* node) { - GraphProcessor::RemoveWeakNodesRecursively(node); - } - - void AssignTracingOverhead(base::StringPiece allocator, - GlobalDumpGraph* global_graph, - Process* process) { - GraphProcessor::AssignTracingOverhead(allocator, global_graph, process); - } - - GlobalDumpGraph::Node::Entry AggregateNumericWithNameForNode( - Node* node, - base::StringPiece name) { - return GraphProcessor::AggregateNumericWithNameForNode(node, name); - } - - void AggregateNumericsRecursively(Node* node) { - GraphProcessor::AggregateNumericsRecursively(node); - } - - void PropagateNumericsAndDiagnosticsRecursively(Node* node) { - GraphProcessor::PropagateNumericsAndDiagnosticsRecursively(node); - } - - base::Optional<uint64_t> AggregateSizeForDescendantNode(Node* root, - Node* descendant) { - return GraphProcessor::AggregateSizeForDescendantNode(root, descendant); - } - - void CalculateSizeForNode(Node* node) { - GraphProcessor::CalculateSizeForNode(node); - } - - void CalculateDumpSubSizes(Node* node) { - GraphProcessor::CalculateDumpSubSizes(node); - } - - void CalculateDumpOwnershipCoefficient(Node* node) { - GraphProcessor::CalculateDumpOwnershipCoefficient(node); - } - - void CalculateDumpCumulativeOwnershipCoefficient(Node* node) { - GraphProcessor::CalculateDumpCumulativeOwnershipCoefficient(node); - } - - void CalculateDumpEffectiveSize(Node* node) { - GraphProcessor::CalculateDumpEffectiveSize(node); - } - - protected: - GlobalDumpGraph graph; -}; - -TEST_F(GraphProcessorTest, SmokeComputeMemoryGraph) { - std::map<ProcessId, const ProcessMemoryDump*> process_dumps; - - MemoryDumpArgs dump_args = {MemoryDumpLevelOfDetail::DETAILED}; - ProcessMemoryDump pmd(dump_args); - - auto* source = pmd.CreateAllocatorDump("test1/test2/test3"); - source->AddScalar(MemoryAllocatorDump::kNameSize, - MemoryAllocatorDump::kUnitsBytes, 10); - - auto* target = pmd.CreateAllocatorDump("target"); - pmd.AddOwnershipEdge(source->guid(), target->guid(), 10); - - auto* weak = - pmd.CreateWeakSharedGlobalAllocatorDump(MemoryAllocatorDumpGuid(1)); - - process_dumps.emplace(1, &pmd); - - auto global_dump = GraphProcessor::CreateMemoryGraph(process_dumps); - - ASSERT_EQ(1u, global_dump->process_dump_graphs().size()); - - auto id_to_dump_it = global_dump->process_dump_graphs().find(1); - auto* first_child = id_to_dump_it->second->FindNode("test1"); - ASSERT_NE(first_child, nullptr); - ASSERT_EQ(first_child->parent(), id_to_dump_it->second->root()); - - auto* second_child = first_child->GetChild("test2"); - ASSERT_NE(second_child, nullptr); - ASSERT_EQ(second_child->parent(), first_child); - - auto* third_child = second_child->GetChild("test3"); - ASSERT_NE(third_child, nullptr); - ASSERT_EQ(third_child->parent(), second_child); - - auto* direct = id_to_dump_it->second->FindNode("test1/test2/test3"); - ASSERT_EQ(third_child, direct); - - ASSERT_EQ(third_child->entries()->size(), 1ul); - - auto size = third_child->entries()->find(MemoryAllocatorDump::kNameSize); - ASSERT_EQ(10ul, size->second.value_uint64); - - ASSERT_TRUE(weak->flags() & MemoryAllocatorDump::Flags::WEAK); - - auto& edges = global_dump->edges(); - auto edge_it = edges.begin(); - ASSERT_EQ(std::distance(edges.begin(), edges.end()), 1l); - ASSERT_EQ(edge_it->source(), direct); - ASSERT_EQ(edge_it->target(), id_to_dump_it->second->FindNode("target")); - ASSERT_EQ(edge_it->priority(), 10); -} - -TEST_F(GraphProcessorTest, SmokeComputeSharedFootprint) { - std::map<ProcessId, const ProcessMemoryDump*> process_dumps; - - MemoryDumpArgs dump_args = {MemoryDumpLevelOfDetail::DETAILED}; - ProcessMemoryDump pmd1(dump_args); - ProcessMemoryDump pmd2(dump_args); - - auto* p1_d1 = pmd1.CreateAllocatorDump("process1/dump1"); - auto* p1_d2 = pmd1.CreateAllocatorDump("process1/dump2"); - auto* p2_d1 = pmd2.CreateAllocatorDump("process2/dump1"); - - base::UnguessableToken token = base::UnguessableToken::Create(); - - // Done by SharedMemoryTracker. - size_t size = 256; - auto global_dump_guid = - base::SharedMemoryTracker::GetGlobalDumpIdForTracing(token); - auto local_dump_name = - base::SharedMemoryTracker::GetDumpNameForTracing(token); - - MemoryAllocatorDump* local_dump_1 = - pmd1.CreateAllocatorDump(local_dump_name, MemoryAllocatorDumpGuid(1)); - local_dump_1->AddScalar("virtual_size", MemoryAllocatorDump::kUnitsBytes, - size); - local_dump_1->AddScalar(MemoryAllocatorDump::kNameSize, - MemoryAllocatorDump::kUnitsBytes, size); - - MemoryAllocatorDump* global_dump_1 = - pmd1.CreateSharedGlobalAllocatorDump(global_dump_guid); - global_dump_1->AddScalar(MemoryAllocatorDump::kNameSize, - MemoryAllocatorDump::kUnitsBytes, size); - - pmd1.AddOverridableOwnershipEdge(local_dump_1->guid(), global_dump_1->guid(), - 0 /* importance */); - - MemoryAllocatorDump* local_dump_2 = - pmd2.CreateAllocatorDump(local_dump_name, MemoryAllocatorDumpGuid(2)); - local_dump_2->AddScalar("virtual_size", MemoryAllocatorDump::kUnitsBytes, - size); - local_dump_2->AddScalar(MemoryAllocatorDump::kNameSize, - MemoryAllocatorDump::kUnitsBytes, size); - - MemoryAllocatorDump* global_dump_2 = - pmd2.CreateSharedGlobalAllocatorDump(global_dump_guid); - pmd2.AddOverridableOwnershipEdge(local_dump_2->guid(), global_dump_2->guid(), - 0 /* importance */); - - // Done by each consumer of the shared memory. - pmd1.CreateSharedMemoryOwnershipEdge(p1_d1->guid(), token, 2); - pmd1.CreateSharedMemoryOwnershipEdge(p1_d2->guid(), token, 1); - pmd2.CreateSharedMemoryOwnershipEdge(p2_d1->guid(), token, 2); - - process_dumps.emplace(1, &pmd1); - process_dumps.emplace(2, &pmd2); - - auto graph = GraphProcessor::CreateMemoryGraph(process_dumps); - auto pid_to_sizes = GraphProcessor::ComputeSharedFootprintFromGraph(*graph); - ASSERT_EQ(pid_to_sizes[1], 128ul); - ASSERT_EQ(pid_to_sizes[2], 128ul); -} - -TEST_F(GraphProcessorTest, ComputeSharedFootprintFromGraphSameImportance) { - Process* global_process = graph.shared_memory_graph(); - Node* global_node = global_process->CreateNode(kEmptyGuid, "global/1", false); - global_node->AddEntry("size", Node::Entry::ScalarUnits::kBytes, 100); - - Process* first = graph.CreateGraphForProcess(1); - Node* shared_1 = first->CreateNode(kEmptyGuid, "shared_memory/1", false); - - Process* second = graph.CreateGraphForProcess(2); - Node* shared_2 = second->CreateNode(kEmptyGuid, "shared_memory/2", false); - - graph.AddNodeOwnershipEdge(shared_1, global_node, 1); - graph.AddNodeOwnershipEdge(shared_2, global_node, 1); - - auto pid_to_sizes = GraphProcessor::ComputeSharedFootprintFromGraph(graph); - ASSERT_EQ(pid_to_sizes[1], 50ul); - ASSERT_EQ(pid_to_sizes[2], 50ul); -} - -TEST_F(GraphProcessorTest, ComputeSharedFootprintFromGraphSomeDiffImportance) { - Process* global_process = graph.shared_memory_graph(); - - Node* global_node = global_process->CreateNode(kEmptyGuid, "global/1", false); - global_node->AddEntry("size", Node::Entry::ScalarUnits::kBytes, 100); - - Process* first = graph.CreateGraphForProcess(1); - Node* shared_1 = first->CreateNode(kEmptyGuid, "shared_memory/1", false); - - Process* second = graph.CreateGraphForProcess(2); - Node* shared_2 = second->CreateNode(kEmptyGuid, "shared_memory/2", false); - - Process* third = graph.CreateGraphForProcess(3); - Node* shared_3 = third->CreateNode(kEmptyGuid, "shared_memory/3", false); - - Process* fourth = graph.CreateGraphForProcess(4); - Node* shared_4 = fourth->CreateNode(kEmptyGuid, "shared_memory/4", false); - - Process* fifth = graph.CreateGraphForProcess(5); - Node* shared_5 = fifth->CreateNode(kEmptyGuid, "shared_memory/5", false); - - graph.AddNodeOwnershipEdge(shared_1, global_node, 1); - graph.AddNodeOwnershipEdge(shared_2, global_node, 2); - graph.AddNodeOwnershipEdge(shared_3, global_node, 3); - graph.AddNodeOwnershipEdge(shared_4, global_node, 3); - graph.AddNodeOwnershipEdge(shared_5, global_node, 3); - - auto pid_to_sizes = GraphProcessor::ComputeSharedFootprintFromGraph(graph); - ASSERT_EQ(pid_to_sizes[1], 0ul); - ASSERT_EQ(pid_to_sizes[2], 0ul); - ASSERT_EQ(pid_to_sizes[3], 33ul); - ASSERT_EQ(pid_to_sizes[4], 33ul); - ASSERT_EQ(pid_to_sizes[5], 33ul); -} - -TEST_F(GraphProcessorTest, MarkWeakParentsSimple) { - Process* process = graph.CreateGraphForProcess(1); - Node* parent = process->CreateNode(kEmptyGuid, "parent", false); - Node* first = process->CreateNode(kEmptyGuid, "parent/first", true); - Node* second = process->CreateNode(kEmptyGuid, "parent/second", false); - - // Case where one child is not weak. - parent->set_explicit(false); - first->set_explicit(true); - second->set_explicit(true); - - // The function should be a no-op. - MarkImplicitWeakParentsRecursively(parent); - ASSERT_FALSE(parent->is_weak()); - ASSERT_TRUE(first->is_weak()); - ASSERT_FALSE(second->is_weak()); - - // Case where all children is weak. - second->set_weak(true); - - // The function should mark parent as weak. - MarkImplicitWeakParentsRecursively(parent); - ASSERT_TRUE(parent->is_weak()); - ASSERT_TRUE(first->is_weak()); - ASSERT_TRUE(second->is_weak()); -} - -TEST_F(GraphProcessorTest, MarkWeakParentsComplex) { - Process* process = graph.CreateGraphForProcess(1); - - // |first| is explicitly strong but |first_child| is implicitly so. - Node* parent = process->CreateNode(kEmptyGuid, "parent", false); - Node* first = process->CreateNode(kEmptyGuid, "parent/f", false); - Node* first_child = process->CreateNode(kEmptyGuid, "parent/f/c", false); - Node* first_gchild = process->CreateNode(kEmptyGuid, "parent/f/c/c", true); - - parent->set_explicit(false); - first->set_explicit(true); - first_child->set_explicit(false); - first_gchild->set_explicit(true); - - // That should lead to |first_child| marked implicitly weak. - MarkImplicitWeakParentsRecursively(parent); - ASSERT_FALSE(parent->is_weak()); - ASSERT_FALSE(first->is_weak()); - ASSERT_TRUE(first_child->is_weak()); - ASSERT_TRUE(first_gchild->is_weak()); - - // Reset and change so that first is now only implicitly strong. - first->set_explicit(false); - first_child->set_weak(false); - - // The whole chain should now be weak. - MarkImplicitWeakParentsRecursively(parent); - ASSERT_TRUE(parent->is_weak()); - ASSERT_TRUE(first->is_weak()); - ASSERT_TRUE(first_child->is_weak()); - ASSERT_TRUE(first_gchild->is_weak()); -} - -TEST_F(GraphProcessorTest, MarkWeakOwners) { - Process* process = graph.CreateGraphForProcess(1); - - // Make only the ultimate owned node weak. - Node* owner = process->CreateNode(kEmptyGuid, "owner", false); - Node* owned = process->CreateNode(kEmptyGuid, "owned", false); - Node* owned_2 = process->CreateNode(kEmptyGuid, "owned2", true); - - graph.AddNodeOwnershipEdge(owner, owned, 0); - graph.AddNodeOwnershipEdge(owned, owned_2, 0); - - // Starting from leaf node should lead to everything being weak. - MarkWeakOwnersAndChildrenRecursively(process->root()); - ASSERT_TRUE(owner->is_weak()); - ASSERT_TRUE(owned->is_weak()); - ASSERT_TRUE(owned_2->is_weak()); -} - -TEST_F(GraphProcessorTest, MarkWeakParent) { - Process* process = graph.CreateGraphForProcess(1); - Node* parent = process->CreateNode(kEmptyGuid, "parent", true); - Node* child = process->CreateNode(kEmptyGuid, "parent/c", false); - Node* child_2 = process->CreateNode(kEmptyGuid, "parent/c/c", false); - - // Starting from parent node should lead to everything being weak. - MarkWeakOwnersAndChildrenRecursively(process->root()); - ASSERT_TRUE(parent->is_weak()); - ASSERT_TRUE(child->is_weak()); - ASSERT_TRUE(child_2->is_weak()); -} - -TEST_F(GraphProcessorTest, MarkWeakParentOwner) { - Process* process = graph.CreateGraphForProcess(1); - - // Make only the parent node weak. - Node* parent = process->CreateNode(kEmptyGuid, "parent", true); - Node* child = process->CreateNode(kEmptyGuid, "parent/c", false); - Node* child_2 = process->CreateNode(kEmptyGuid, "parent/c/c", false); - Node* owner = process->CreateNode(kEmptyGuid, "owner", false); - - graph.AddNodeOwnershipEdge(owner, parent, 0); - - // Starting from parent node should lead to everything being weak. - MarkWeakOwnersAndChildrenRecursively(process->root()); - ASSERT_TRUE(parent->is_weak()); - ASSERT_TRUE(child->is_weak()); - ASSERT_TRUE(child_2->is_weak()); - ASSERT_TRUE(owner->is_weak()); -} - -TEST_F(GraphProcessorTest, RemoveWeakNodesRecursively) { - Process* process = graph.CreateGraphForProcess(1); - - // Make only the child node weak. - Node* parent = process->CreateNode(kEmptyGuid, "parent", false); - Node* child = process->CreateNode(kEmptyGuid, "parent/c", true); - process->CreateNode(kEmptyGuid, "parent/c/c", false); - Node* owned = process->CreateNode(kEmptyGuid, "parent/owned", false); - - graph.AddNodeOwnershipEdge(child, owned, 0); - - // Starting from parent node should lead child and child_2 being - // removed and owned to have the edge from it removed. - RemoveWeakNodesRecursively(parent); - - ASSERT_EQ(parent->children()->size(), 1ul); - ASSERT_EQ(parent->children()->begin()->second, owned); - - ASSERT_TRUE(owned->owned_by_edges()->empty()); -} - -TEST_F(GraphProcessorTest, RemoveWeakNodesRecursivelyBetweenGraphs) { - Process* f_process = graph.CreateGraphForProcess(1); - Process* s_process = graph.CreateGraphForProcess(2); - - // Make only the child node weak. - Node* child = f_process->CreateNode(kEmptyGuid, "c", true); - f_process->CreateNode(kEmptyGuid, "c/c", false); - Node* owned = s_process->CreateNode(kEmptyGuid, "owned", false); - - graph.AddNodeOwnershipEdge(child, owned, 0); - - // Starting from root node should lead child and child_2 being - // removed. - RemoveWeakNodesRecursively(f_process->root()); - - ASSERT_EQ(f_process->root()->children()->size(), 0ul); - ASSERT_EQ(s_process->root()->children()->size(), 1ul); - - // This should be false until our next pass. - ASSERT_FALSE(owned->owned_by_edges()->empty()); - - RemoveWeakNodesRecursively(s_process->root()); - - // We should now have cleaned up the owned node's edges. - ASSERT_TRUE(owned->owned_by_edges()->empty()); -} - -TEST_F(GraphProcessorTest, AssignTracingOverhead) { - Process* process = graph.CreateGraphForProcess(1); - - // Now add an allocator node. - process->CreateNode(kEmptyGuid, "malloc", false); - - // If the tracing node does not exist, this should do nothing. - AssignTracingOverhead("malloc", &graph, process); - ASSERT_TRUE(process->root()->GetChild("malloc")->children()->empty()); - - // Now add a tracing node. - process->CreateNode(kEmptyGuid, "tracing", false); - - // This should now add a node with the allocator. - AssignTracingOverhead("malloc", &graph, process); - ASSERT_NE(process->FindNode("malloc/allocated_objects/tracing_overhead"), - nullptr); -} - -TEST_F(GraphProcessorTest, AggregateNumericWithNameForNode) { - Process* process = graph.CreateGraphForProcess(1); - - Node* c1 = process->CreateNode(kEmptyGuid, "c1", false); - Node* c2 = process->CreateNode(kEmptyGuid, "c2", false); - Node* c3 = process->CreateNode(kEmptyGuid, "c3", false); - - c1->AddEntry("random_numeric", Node::Entry::ScalarUnits::kBytes, 100); - c2->AddEntry("random_numeric", Node::Entry::ScalarUnits::kBytes, 256); - c3->AddEntry("other_numeric", Node::Entry::ScalarUnits::kBytes, 1000); - - Node* root = process->root(); - Node::Entry entry = AggregateNumericWithNameForNode(root, "random_numeric"); - ASSERT_EQ(entry.value_uint64, 356ul); - ASSERT_EQ(entry.units, Node::Entry::ScalarUnits::kBytes); -} - -TEST_F(GraphProcessorTest, AggregateNumericsRecursively) { - Process* process = graph.CreateGraphForProcess(1); - - Node* c1 = process->CreateNode(kEmptyGuid, "c1", false); - Node* c2 = process->CreateNode(kEmptyGuid, "c2", false); - Node* c2_c1 = process->CreateNode(kEmptyGuid, "c2/c1", false); - Node* c2_c2 = process->CreateNode(kEmptyGuid, "c2/c2", false); - Node* c3_c1 = process->CreateNode(kEmptyGuid, "c3/c1", false); - Node* c3_c2 = process->CreateNode(kEmptyGuid, "c3/c2", false); - - // If an entry already exists in the parent, the child should not - // ovewrite it. If nothing exists, then the child can aggregrate. - c1->AddEntry("random_numeric", Node::Entry::ScalarUnits::kBytes, 100); - c2->AddEntry("random_numeric", Node::Entry::ScalarUnits::kBytes, 256); - c2_c1->AddEntry("random_numeric", Node::Entry::ScalarUnits::kBytes, 256); - c2_c2->AddEntry("random_numeric", Node::Entry::ScalarUnits::kBytes, 256); - c3_c1->AddEntry("random_numeric", Node::Entry::ScalarUnits::kBytes, 10); - c3_c2->AddEntry("random_numeric", Node::Entry::ScalarUnits::kBytes, 10); - - Node* root = process->root(); - AggregateNumericsRecursively(root); - ASSERT_EQ(root->entries()->size(), 1ul); - - auto entry = root->entries()->begin()->second; - ASSERT_EQ(entry.value_uint64, 376ul); - ASSERT_EQ(entry.units, Node::Entry::ScalarUnits::kBytes); -} - -TEST_F(GraphProcessorTest, AggregateSizeForDescendantNode) { - Process* process = graph.CreateGraphForProcess(1); - - Node* c1 = process->CreateNode(kEmptyGuid, "c1", false); - Node* c2 = process->CreateNode(kEmptyGuid, "c2", false); - Node* c2_c1 = process->CreateNode(kEmptyGuid, "c2/c1", false); - Node* c2_c2 = process->CreateNode(kEmptyGuid, "c2/c2", false); - Node* c3_c1 = process->CreateNode(kEmptyGuid, "c3/c1", false); - Node* c3_c2 = process->CreateNode(kEmptyGuid, "c3/c2", false); - - c1->AddEntry("size", Node::Entry::ScalarUnits::kBytes, 100); - c2_c1->AddEntry("size", Node::Entry::ScalarUnits::kBytes, 256); - c2_c2->AddEntry("size", Node::Entry::ScalarUnits::kBytes, 256); - c3_c1->AddEntry("size", Node::Entry::ScalarUnits::kBytes, 10); - c3_c2->AddEntry("size", Node::Entry::ScalarUnits::kBytes, 10); - - graph.AddNodeOwnershipEdge(c2_c2, c3_c2, 0); - - // Aggregating root should give size of (100 + 256 + 10 * 2) = 376. - // |c2_c2| is not counted because it is owns by |c3_c2|. - Node* root = process->root(); - ASSERT_EQ(376ul, *AggregateSizeForDescendantNode(root, root)); - - // Aggregating c2 should give size of (256 * 2) = 512. |c2_c2| is counted - // because |c3_c2| is not a child of |c2|. - ASSERT_EQ(512ul, *AggregateSizeForDescendantNode(c2, c2)); -} - -TEST_F(GraphProcessorTest, CalculateSizeForNode) { - Process* process = graph.CreateGraphForProcess(1); - - Node* c1 = process->CreateNode(kEmptyGuid, "c1", false); - Node* c2 = process->CreateNode(kEmptyGuid, "c2", false); - Node* c2_c1 = process->CreateNode(kEmptyGuid, "c2/c1", false); - Node* c2_c2 = process->CreateNode(kEmptyGuid, "c2/c2", false); - Node* c3 = process->CreateNode(kEmptyGuid, "c3", false); - Node* c3_c1 = process->CreateNode(kEmptyGuid, "c3/c1", false); - Node* c3_c2 = process->CreateNode(kEmptyGuid, "c3/c2", false); - - c1->AddEntry("size", Node::Entry::ScalarUnits::kBytes, 600); - c2_c1->AddEntry("size", Node::Entry::ScalarUnits::kBytes, 10); - c2_c2->AddEntry("size", Node::Entry::ScalarUnits::kBytes, 10); - c3->AddEntry("size", Node::Entry::ScalarUnits::kBytes, 600); - c3_c1->AddEntry("size", Node::Entry::ScalarUnits::kBytes, 256); - c3_c2->AddEntry("size", Node::Entry::ScalarUnits::kBytes, 256); - - graph.AddNodeOwnershipEdge(c2_c2, c3_c2, 0); - - // Compute size entry for |c2| since computations for |c2_c1| and |c2_c2| - // are already complete. - CalculateSizeForNode(c2); - - // Check that |c2| now has a size entry of 20 (sum of children). - auto c2_entry = c2->entries()->begin()->second; - ASSERT_EQ(c2_entry.value_uint64, 20ul); - ASSERT_EQ(c2_entry.units, Node::Entry::ScalarUnits::kBytes); - - // Compute size entry for |c3_c2| which should not change in size. - CalculateSizeForNode(c3_c2); - - // Check that |c3_c2| now has unchanged size. - auto c3_c2_entry = c3_c2->entries()->begin()->second; - ASSERT_EQ(c3_c2_entry.value_uint64, 256ul); - ASSERT_EQ(c3_c2_entry.units, Node::Entry::ScalarUnits::kBytes); - - // Compute size entry for |c3| which should add an unspecified node. - CalculateSizeForNode(c3); - - // Check that |c3| has unchanged size. - auto c3_entry = c3->entries()->begin()->second; - ASSERT_EQ(c3_entry.value_uint64, 600ul); - ASSERT_EQ(c3_entry.units, Node::Entry::ScalarUnits::kBytes); - - // Check that the unspecified node is a child of |c3| and has size - // 600 - 512 = 88. - Node* c3_child = c3->children()->find("<unspecified>")->second; - auto c3_child_entry = c3_child->entries()->begin()->second; - ASSERT_EQ(c3_child_entry.value_uint64, 88ul); - ASSERT_EQ(c3_child_entry.units, Node::Entry::ScalarUnits::kBytes); - - // Compute size entry for |root| which should aggregate children sizes. - CalculateSizeForNode(process->root()); - - // Check that |root| has been assigned a size of 600 + 10 + 600 = 1210. - // Note that |c2_c2| is not counted because it ows |c3_c2| which is a - // descendant of |root|. - auto root_entry = process->root()->entries()->begin()->second; - ASSERT_EQ(root_entry.value_uint64, 1210ul); - ASSERT_EQ(root_entry.units, Node::Entry::ScalarUnits::kBytes); -} - -TEST_F(GraphProcessorTest, CalculateDumpSubSizes) { - Process* process_1 = graph.CreateGraphForProcess(1); - Process* process_2 = graph.CreateGraphForProcess(2); - - Node* parent_1 = process_1->CreateNode(kEmptyGuid, "parent", false); - Node* child_1 = process_1->CreateNode(kEmptyGuid, "parent/child", false); - - Node* parent_2 = process_2->CreateNode(kEmptyGuid, "parent", false); - Node* child_2 = process_2->CreateNode(kEmptyGuid, "parent/child", false); - - graph.AddNodeOwnershipEdge(parent_1, parent_2, 0); - - process_1->root()->AddEntry("size", Node::Entry::ScalarUnits::kBytes, 4); - parent_1->AddEntry("size", Node::Entry::ScalarUnits::kBytes, 4); - child_1->AddEntry("size", Node::Entry::ScalarUnits::kBytes, 4); - process_2->root()->AddEntry("size", Node::Entry::ScalarUnits::kBytes, 5); - parent_2->AddEntry("size", Node::Entry::ScalarUnits::kBytes, 5); - child_2->AddEntry("size", Node::Entry::ScalarUnits::kBytes, 5); - - // Each of these nodes should have owner/owned same as size itself. - CalculateDumpSubSizes(child_1); - ASSERT_EQ(child_1->not_owned_sub_size(), 4ul); - ASSERT_EQ(child_1->not_owning_sub_size(), 4ul); - CalculateDumpSubSizes(child_2); - ASSERT_EQ(child_2->not_owned_sub_size(), 5ul); - ASSERT_EQ(child_2->not_owning_sub_size(), 5ul); - - // These nodes should also have size of children. - CalculateDumpSubSizes(parent_1); - ASSERT_EQ(parent_1->not_owned_sub_size(), 4ul); - ASSERT_EQ(parent_1->not_owning_sub_size(), 4ul); - CalculateDumpSubSizes(parent_2); - ASSERT_EQ(parent_2->not_owned_sub_size(), 5ul); - ASSERT_EQ(parent_2->not_owning_sub_size(), 5ul); - - // These nodes should account for edge between parents. - CalculateDumpSubSizes(process_1->root()); - ASSERT_EQ(process_1->root()->not_owned_sub_size(), 4ul); - ASSERT_EQ(process_1->root()->not_owning_sub_size(), 0ul); - CalculateDumpSubSizes(process_2->root()); - ASSERT_EQ(process_2->root()->not_owned_sub_size(), 1ul); - ASSERT_EQ(process_2->root()->not_owning_sub_size(), 5ul); -} - -TEST_F(GraphProcessorTest, CalculateDumpOwnershipCoefficient) { - Process* process = graph.CreateGraphForProcess(1); - - Node* owned = process->CreateNode(kEmptyGuid, "owned", false); - Node* owner_1 = process->CreateNode(kEmptyGuid, "owner1", false); - Node* owner_2 = process->CreateNode(kEmptyGuid, "owner2", false); - Node* owner_3 = process->CreateNode(kEmptyGuid, "owner3", false); - Node* owner_4 = process->CreateNode(kEmptyGuid, "owner4", false); - - graph.AddNodeOwnershipEdge(owner_1, owned, 2); - graph.AddNodeOwnershipEdge(owner_2, owned, 2); - graph.AddNodeOwnershipEdge(owner_3, owned, 1); - graph.AddNodeOwnershipEdge(owner_4, owned, 0); - - // Ensure the owned node has a size otherwise calculations will not happen. - owned->AddEntry("size", Node::Entry::kBytes, 10); - - // Setup the owned/owning sub sizes. - owned->add_not_owned_sub_size(10); - owner_1->add_not_owning_sub_size(6); - owner_2->add_not_owning_sub_size(7); - owner_3->add_not_owning_sub_size(5); - owner_4->add_not_owning_sub_size(8); - - // Perform the computation. - CalculateDumpOwnershipCoefficient(owned); - - // Ensure that the coefficients are correct. - ASSERT_DOUBLE_EQ(owned->owned_coefficient(), 2.0 / 10.0); - ASSERT_DOUBLE_EQ(owner_1->owning_coefficient(), 3.0 / 6.0); - ASSERT_DOUBLE_EQ(owner_2->owning_coefficient(), 4.0 / 7.0); - ASSERT_DOUBLE_EQ(owner_3->owning_coefficient(), 0.0 / 5.0); - ASSERT_DOUBLE_EQ(owner_4->owning_coefficient(), 1.0 / 8.0); -} - -TEST_F(GraphProcessorTest, CalculateDumpCumulativeOwnershipCoefficient) { - Process* process = graph.CreateGraphForProcess(1); - - Node* c1 = process->CreateNode(kEmptyGuid, "c1", false); - Node* c1_c1 = process->CreateNode(kEmptyGuid, "c1/c1", false); - Node* c1_c2 = process->CreateNode(kEmptyGuid, "c1/c2", false); - Node* owned = process->CreateNode(kEmptyGuid, "owned", false); - - graph.AddNodeOwnershipEdge(c1_c2, owned, 2); - - // Ensure all nodes have sizes otherwise calculations will not happen. - c1_c1->AddEntry("size", Node::Entry::kBytes, 10); - c1_c2->AddEntry("size", Node::Entry::kBytes, 10); - owned->AddEntry("size", Node::Entry::kBytes, 10); - - // Setup the owned/owning cummulative coefficients. - c1->set_cumulative_owning_coefficient(0.123); - c1->set_cumulative_owned_coefficient(0.456); - owned->set_cumulative_owning_coefficient(0.789); - owned->set_cumulative_owned_coefficient(0.987); - - // Set owning and owned for the children. - c1_c1->set_owning_coefficient(0.654); - c1_c1->set_owned_coefficient(0.321); - c1_c2->set_owning_coefficient(0.135); - c1_c2->set_owned_coefficient(0.246); - - // Perform the computation and check our answers. - CalculateDumpCumulativeOwnershipCoefficient(c1_c1); - ASSERT_DOUBLE_EQ(c1_c1->cumulative_owning_coefficient(), 0.123); - ASSERT_DOUBLE_EQ(c1_c1->cumulative_owned_coefficient(), 0.456 * 0.321); - - CalculateDumpCumulativeOwnershipCoefficient(c1_c2); - ASSERT_DOUBLE_EQ(c1_c2->cumulative_owning_coefficient(), 0.135 * 0.789); - ASSERT_DOUBLE_EQ(c1_c2->cumulative_owned_coefficient(), 0.456 * 0.246); -} - -TEST_F(GraphProcessorTest, CalculateDumpEffectiveSize) { - Process* process = graph.CreateGraphForProcess(1); - - Node* c1 = process->CreateNode(kEmptyGuid, "c1", false); - Node* c1_c1 = process->CreateNode(kEmptyGuid, "c1/c1", false); - Node* c1_c2 = process->CreateNode(kEmptyGuid, "c1/c2", false); - - // Ensure all nodes have sizes otherwise calculations will not happen. - c1->AddEntry("size", Node::Entry::kBytes, 200); - c1_c1->AddEntry("size", Node::Entry::kBytes, 32); - c1_c2->AddEntry("size", Node::Entry::kBytes, 20); - - // Setup the owned/owning cummulative coefficients. - c1_c1->set_cumulative_owning_coefficient(0.123); - c1_c1->set_cumulative_owned_coefficient(0.456); - c1_c2->set_cumulative_owning_coefficient(0.789); - c1_c2->set_cumulative_owned_coefficient(0.987); - - // Perform the computation and check our answers. - CalculateDumpEffectiveSize(c1_c1); - const Node::Entry& entry_c1_c1 = - c1_c1->entries()->find("effective_size")->second; - uint64_t expected_c1_c1 = static_cast<int>(0.123 * 0.456 * 32); - ASSERT_EQ(entry_c1_c1.value_uint64, expected_c1_c1); - - CalculateDumpEffectiveSize(c1_c2); - const Node::Entry& entry_c1_c2 = - c1_c2->entries()->find("effective_size")->second; - uint64_t expected_c1_c2 = static_cast<int>(0.789 * 0.987 * 20); - ASSERT_EQ(entry_c1_c2.value_uint64, expected_c1_c2); - - CalculateDumpEffectiveSize(c1); - const Node::Entry& entry_c1 = c1->entries()->find("effective_size")->second; - ASSERT_EQ(entry_c1.value_uint64, expected_c1_c1 + expected_c1_c2); -} - -} // namespace memory_instrumentation
diff --git a/services/tracing/public/cpp/perfetto/perfetto_config.cc b/services/tracing/public/cpp/perfetto/perfetto_config.cc index a9e1d680..f545904 100644 --- a/services/tracing/public/cpp/perfetto/perfetto_config.cc +++ b/services/tracing/public/cpp/perfetto/perfetto_config.cc
@@ -25,7 +25,8 @@ const char* name, const std::string& chrome_config_string, bool privacy_filtering_enabled, - bool convert_to_legacy_json) { + bool convert_to_legacy_json, + perfetto::protos::gen::ChromeConfig::ClientPriority client_priority) { auto* data_source = perfetto_config->add_data_sources(); auto* source_config = data_source->mutable_config(); source_config->set_name(name); @@ -34,6 +35,7 @@ chrome_config->set_trace_config(chrome_config_string); chrome_config->set_privacy_filtering_enabled(privacy_filtering_enabled); chrome_config->set_convert_to_legacy_json(convert_to_legacy_json); + chrome_config->set_client_priority(client_priority); return data_source; } @@ -43,7 +45,8 @@ const base::trace_event::TraceConfig& stripped_config, const std::set<std::string>& source_names, bool privacy_filtering_enabled, - bool convert_to_legacy_json) { + bool convert_to_legacy_json, + perfetto::protos::gen::ChromeConfig::ClientPriority client_priority) { const std::string chrome_config_string = stripped_config.ToString(); // Capture actual trace events. @@ -51,8 +54,8 @@ source_names.count(tracing::mojom::kTraceEventDataSourceName) == 1) { auto* trace_event_data_source = AddDataSourceConfig( perfetto_config, tracing::mojom::kTraceEventDataSourceName, - chrome_config_string, privacy_filtering_enabled, - convert_to_legacy_json); + chrome_config_string, privacy_filtering_enabled, convert_to_legacy_json, + client_priority); for (auto& enabled_pid : process_filters.included_process_ids()) { *trace_event_data_source->add_producer_name_filter() = base::StrCat( {mojom::kPerfettoProducerNamePrefix, @@ -69,7 +72,7 @@ AddDataSourceConfig(perfetto_config, tracing::mojom::kSystemTraceDataSourceName, chrome_config_string, privacy_filtering_enabled, - convert_to_legacy_json); + convert_to_legacy_json, client_priority); } #endif @@ -79,7 +82,7 @@ AddDataSourceConfig(perfetto_config, tracing::mojom::kArcTraceDataSourceName, chrome_config_string, privacy_filtering_enabled, - convert_to_legacy_json); + convert_to_legacy_json, client_priority); } #endif } @@ -89,7 +92,7 @@ source_names.count(tracing::mojom::kMetaDataSourceName) == 1) { AddDataSourceConfig(perfetto_config, tracing::mojom::kMetaDataSourceName, chrome_config_string, privacy_filtering_enabled, - convert_to_legacy_json); + convert_to_legacy_json, client_priority); } if (stripped_config.IsCategoryGroupEnabled( @@ -100,7 +103,7 @@ AddDataSourceConfig(perfetto_config, tracing::mojom::kSamplerProfilerSourceName, chrome_config_string, privacy_filtering_enabled, - convert_to_legacy_json); + convert_to_legacy_json, client_priority); } if (stripped_config.IsCategoryGroupEnabled( @@ -111,7 +114,7 @@ AddDataSourceConfig(perfetto_config, tracing::mojom::kJavaHeapProfilerSourceName, chrome_config_string, privacy_filtering_enabled, - convert_to_legacy_json); + convert_to_legacy_json, client_priority); } if (source_names.empty() || @@ -119,7 +122,7 @@ AddDataSourceConfig(perfetto_config, tracing::mojom::kReachedCodeProfilerSourceName, chrome_config_string, privacy_filtering_enabled, - convert_to_legacy_json); + convert_to_legacy_json, client_priority); } } @@ -128,9 +131,11 @@ perfetto::TraceConfig GetDefaultPerfettoConfig( const base::trace_event::TraceConfig& chrome_config, bool privacy_filtering_enabled, - bool convert_to_legacy_json) { + bool convert_to_legacy_json, + perfetto::protos::gen::ChromeConfig::ClientPriority client_priority) { return GetPerfettoConfigWithDataSources( - chrome_config, {}, privacy_filtering_enabled, convert_to_legacy_json); + chrome_config, {}, privacy_filtering_enabled, convert_to_legacy_json, + client_priority); } perfetto::TraceConfig COMPONENT_EXPORT(TRACING_CPP) @@ -138,7 +143,8 @@ const base::trace_event::TraceConfig& chrome_config, const std::set<std::string>& source_names, bool privacy_filtering_enabled, - bool convert_to_legacy_json) { + bool convert_to_legacy_json, + perfetto::protos::gen::ChromeConfig::ClientPriority client_priority) { perfetto::TraceConfig perfetto_config; size_t size_limit = chrome_config.GetTraceBufferSizeInKb(); @@ -200,7 +206,7 @@ AddDataSourceConfigs(&perfetto_config, chrome_config.process_filter_config(), stripped_config, source_names, privacy_filtering_enabled, - convert_to_legacy_json); + convert_to_legacy_json, client_priority); return perfetto_config; }
diff --git a/services/tracing/public/cpp/perfetto/perfetto_config.h b/services/tracing/public/cpp/perfetto/perfetto_config.h index 6f8b4a5b..1525335 100644 --- a/services/tracing/public/cpp/perfetto/perfetto_config.h +++ b/services/tracing/public/cpp/perfetto/perfetto_config.h
@@ -9,6 +9,7 @@ #include <string> #include "base/component_export.h" +#include "third_party/perfetto/include/perfetto/tracing/core/chrome_config.h" #include "third_party/perfetto/include/perfetto/tracing/core/trace_config.h" namespace base { @@ -22,7 +23,9 @@ perfetto::TraceConfig COMPONENT_EXPORT(TRACING_CPP) GetDefaultPerfettoConfig( const base::trace_event::TraceConfig& chrome_config, bool privacy_filtering_enabled = false, - bool convert_to_legacy_json = false); + bool convert_to_legacy_json = false, + perfetto::protos::gen::ChromeConfig::ClientPriority = + perfetto::protos::gen::ChromeConfig::USER_INITIATED); // Creates a perfetto trace config with only the data sources included in // |source_names| and enabled by |trace_config|. Passing empty set will add all @@ -33,7 +36,9 @@ const base::trace_event::TraceConfig& chrome_config, const std::set<std::string>& source_names, bool privacy_filtering_enabled = false, - bool convert_to_legacy_json = false); + bool convert_to_legacy_json = false, + perfetto::protos::gen::ChromeConfig::ClientPriority = + perfetto::protos::gen::ChromeConfig::USER_INITIATED); } // namespace tracing
diff --git a/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.cc b/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.cc index 808421e..c731ed29 100644 --- a/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.cc +++ b/services/tracing/public/cpp/perfetto/perfetto_tracing_backend.cc
@@ -378,11 +378,30 @@ void StartTracing() override { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - // TODO(skyostil): Don't hardcode the session's priority. + auto priority = mojom::TracingClientPriority::kUnknown; + for (const auto& data_source : trace_config_.data_sources()) { + if (!data_source.has_config() || + !data_source.config().has_chrome_config()) { + continue; + } + switch (data_source.config().chrome_config().client_priority()) { + case perfetto::protos::gen::ChromeConfig::BACKGROUND: + priority = + std::max(priority, mojom::TracingClientPriority::kBackground); + break; + case perfetto::protos::gen::ChromeConfig::USER_INITIATED: + priority = + std::max(priority, mojom::TracingClientPriority::kUserInitiated); + break; + default: + case perfetto::protos::gen::ChromeConfig::UNKNOWN: + break; + } + } consumer_host_->EnableTracing( tracing_session_host_.BindNewPipeAndPassReceiver(), tracing_session_client_.BindNewPipeAndPassRemote(), trace_config_, - tracing::mojom::TracingClientPriority::kUserInitiated); + priority); tracing_session_host_.set_disconnect_handler(base::BindOnce( &ConsumerEndpoint::OnTracingFailed, base::Unretained(this))); tracing_session_client_.set_disconnect_handler(base::BindOnce(
diff --git a/services/viz/public/cpp/compositing/compositor_render_pass_mojom_traits.cc b/services/viz/public/cpp/compositing/compositor_render_pass_mojom_traits.cc index 8a74e78..b13e59f 100644 --- a/services/viz/public/cpp/compositing/compositor_render_pass_mojom_traits.cc +++ b/services/viz/public/cpp/compositing/compositor_render_pass_mojom_traits.cc
@@ -24,7 +24,6 @@ !data.ReadFilters(&(*out)->filters) || !data.ReadBackdropFilters(&(*out)->backdrop_filters) || !data.ReadBackdropFilterBounds(&(*out)->backdrop_filter_bounds) || - !data.ReadContentColorUsage(&(*out)->content_color_usage) || !data.ReadCopyRequests(&(*out)->copy_requests) || !data.ReadId(&(*out)->id)) { return false;
diff --git a/services/viz/public/cpp/compositing/compositor_render_pass_mojom_traits.h b/services/viz/public/cpp/compositing/compositor_render_pass_mojom_traits.h index affd3fa..cf79f2b 100644 --- a/services/viz/public/cpp/compositing/compositor_render_pass_mojom_traits.h +++ b/services/viz/public/cpp/compositing/compositor_render_pass_mojom_traits.h
@@ -58,11 +58,6 @@ return input->backdrop_filter_bounds; } - static gfx::ContentColorUsage content_color_usage( - const std::unique_ptr<viz::CompositorRenderPass>& input) { - return input->content_color_usage; - } - static bool has_transparent_background( const std::unique_ptr<viz::CompositorRenderPass>& input) { return input->has_transparent_background;
diff --git a/services/viz/public/cpp/compositing/mojom_traits_perftest.cc b/services/viz/public/cpp/compositing/mojom_traits_perftest.cc index 11111c85..ec6e512 100644 --- a/services/viz/public/cpp/compositing/mojom_traits_perftest.cc +++ b/services/viz/public/cpp/compositing/mojom_traits_perftest.cc
@@ -191,8 +191,6 @@ ResourceId arbitrary_resourceid3 = 23; ResourceId arbitrary_resourceid4 = 16; SkScalar arbitrary_sigma = SkFloatToScalar(2.0f); - gfx::ContentColorUsage arbitrary_content_color_usage = - gfx::ContentColorUsage::kSRGB; CompositorRenderPassId root_id{14}; cc::FilterOperations arbitrary_filters1; @@ -210,9 +208,8 @@ auto pass_in = CompositorRenderPass::Create(); pass_in->SetAll(root_id, arbitrary_rect1, arbitrary_rect2, arbitrary_matrix1, arbitrary_filters2, arbitrary_filters1, - arbitrary_rrectf1, arbitrary_content_color_usage, - arbitrary_bool1, arbitrary_bool1, arbitrary_bool1, - arbitrary_bool1); + arbitrary_rrectf1, arbitrary_bool1, arbitrary_bool1, + arbitrary_bool1, arbitrary_bool1); // Texture quads for (uint32_t i = 0; i < 10; ++i) {
diff --git a/services/viz/public/cpp/compositing/mojom_traits_unittest.cc b/services/viz/public/cpp/compositing/mojom_traits_unittest.cc index 5e1ea399f..55f8852 100644 --- a/services/viz/public/cpp/compositing/mojom_traits_unittest.cc +++ b/services/viz/public/cpp/compositing/mojom_traits_unittest.cc
@@ -715,7 +715,6 @@ backdrop_filters.Append(cc::FilterOperation::CreateSaturateFilter(2.f)); base::Optional<gfx::RRectF> backdrop_filter_bounds( {10, 20, 130, 140, 1, 2, 3, 4, 5, 6, 7, 8}); - gfx::ContentColorUsage content_color_usage = gfx::ContentColorUsage::kHDR; const bool has_transparent_background = true; const bool cache_render_pass = true; const bool has_damage_from_contributing_content = true; @@ -723,9 +722,8 @@ auto input = CompositorRenderPass::Create(); input->SetAll(render_pass_id, output_rect, damage_rect, transform_to_root, filters, backdrop_filters, backdrop_filter_bounds, - content_color_usage, has_transparent_background, - cache_render_pass, has_damage_from_contributing_content, - generate_mipmap); + has_transparent_background, cache_render_pass, + has_damage_from_contributing_content, generate_mipmap); input->copy_requests.push_back(CopyOutputRequest::CreateStubForTesting()); const gfx::Rect copy_output_area(24, 42, 75, 57); input->copy_requests.back()->set_area(copy_output_area); @@ -787,7 +785,6 @@ EXPECT_EQ(output_rect, output->output_rect); EXPECT_EQ(damage_rect, output->damage_rect); EXPECT_EQ(transform_to_root, output->transform_to_root_target); - EXPECT_EQ(content_color_usage, output->content_color_usage); EXPECT_EQ(has_transparent_background, output->has_transparent_background); EXPECT_EQ(filters, output->filters); EXPECT_EQ(backdrop_filters, output->backdrop_filters); @@ -865,7 +862,6 @@ const gfx::Transform transform_to_root = gfx::Transform(1.0, 0.5, 0.5, -0.5, -1.0, 0.0); const base::Optional<gfx::RRectF> backdrop_filter_bounds; - gfx::ContentColorUsage content_color_usage = gfx::ContentColorUsage::kHDR; const bool has_transparent_background = true; const bool cache_render_pass = false; const bool has_damage_from_contributing_content = false; @@ -873,9 +869,9 @@ auto input = CompositorRenderPass::Create(); input->SetAll(render_pass_id, output_rect, damage_rect, transform_to_root, cc::FilterOperations(), cc::FilterOperations(), - backdrop_filter_bounds, content_color_usage, - has_transparent_background, cache_render_pass, - has_damage_from_contributing_content, generate_mipmap); + backdrop_filter_bounds, has_transparent_background, + cache_render_pass, has_damage_from_contributing_content, + generate_mipmap); // Unlike the previous test, don't add any quads to the list; we need to // verify that the serialization code can deal with that. @@ -891,7 +887,6 @@ EXPECT_EQ(damage_rect, output->damage_rect); EXPECT_EQ(transform_to_root, output->transform_to_root_target); EXPECT_EQ(backdrop_filter_bounds, output->backdrop_filter_bounds); - EXPECT_EQ(content_color_usage, output->content_color_usage); EXPECT_EQ(has_transparent_background, output->has_transparent_background); }
diff --git a/services/viz/public/mojom/compositing/compositor_render_pass.mojom b/services/viz/public/mojom/compositing/compositor_render_pass.mojom index 1b454ce3..be3cfa7 100644 --- a/services/viz/public/mojom/compositing/compositor_render_pass.mojom +++ b/services/viz/public/mojom/compositing/compositor_render_pass.mojom
@@ -9,7 +9,6 @@ import "services/viz/public/mojom/compositing/filter_operations.mojom"; import "services/viz/public/mojom/compositing/quads.mojom"; import "ui/gfx/geometry/mojom/geometry.mojom"; -import "ui/gfx/mojom/display_color_spaces.mojom"; import "ui/gfx/mojom/rrect_f.mojom"; import "ui/gfx/mojom/transform.mojom"; @@ -22,7 +21,6 @@ FilterOperations filters; FilterOperations backdrop_filters; gfx.mojom.RRectF? backdrop_filter_bounds; - gfx.mojom.ContentColorUsage content_color_usage; bool has_transparent_background; bool cache_render_pass = false; bool has_damage_from_contributing_content = false;
diff --git a/testing/buildbot/chromium.ci.json b/testing/buildbot/chromium.ci.json index d57cca923..f8ca91239 100644 --- a/testing/buildbot/chromium.ci.json +++ b/testing/buildbot/chromium.ci.json
@@ -6105,6 +6105,33 @@ "shards": 3 }, "test_id_prefix": "ninja://third_party/angle/src/tests:angle_perftests/" + }, + { + "args": [ + "-v" + ], + "isolate_name": "standalone_angle_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "standalone_angle_unittests", + "should_retry_with_patch": false, + "swarming": { + "can_use_on_swarming_builders": true, + "containment_type": "AUTO", + "dimension_sets": [ + { + "device_os": "Q", + "device_os_type": "userdebug", + "device_type": "walleye", + "os": "Android", + "pool": "chromium.tests.gpu" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://third_party/angle/src/tests:standalone_angle_unittests/" } ] }, @@ -6617,6 +6644,33 @@ "shards": 3 }, "test_id_prefix": "ninja://third_party/angle/src/tests:angle_perftests/" + }, + { + "args": [ + "-v" + ], + "isolate_name": "standalone_angle_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "standalone_angle_unittests", + "should_retry_with_patch": false, + "swarming": { + "can_use_on_swarming_builders": true, + "containment_type": "AUTO", + "dimension_sets": [ + { + "device_os": "Q", + "device_os_type": "userdebug", + "device_type": "walleye", + "os": "Android", + "pool": "chromium.tests.gpu" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://third_party/angle/src/tests:standalone_angle_unittests/" } ] }, @@ -253781,25 +253835,6 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "content_nocompile_tests", - "test_id_prefix": "ninja://content/test:content_nocompile_tests/" - }, - { - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "arm64", - "os": "Mac-11.0", - "pool": "chromium.tests.mac-arm64" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, "test": "content_unittests", "test_id_prefix": "ninja://content/test:content_unittests/" }, @@ -254352,25 +254387,6 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "nacl_loader_unittests", - "test_id_prefix": "ninja://components/nacl/loader:nacl_loader_unittests/" - }, - { - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "arm64", - "os": "Mac-11.0", - "pool": "chromium.tests.mac-arm64" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, "test": "native_theme_unittests", "test_id_prefix": "ninja://ui/native_theme:native_theme_unittests/" },
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index 99fa066ef..9b6fa1c 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -47133,25 +47133,6 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "content_nocompile_tests", - "test_id_prefix": "ninja://content/test:content_nocompile_tests/" - }, - { - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "arm64", - "os": "Mac-11.0", - "pool": "chromium.tests.mac-arm64" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, "test": "content_unittests", "test_id_prefix": "ninja://content/test:content_unittests/" }, @@ -47704,25 +47685,6 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "nacl_loader_unittests", - "test_id_prefix": "ninja://components/nacl/loader:nacl_loader_unittests/" - }, - { - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "arm64", - "os": "Mac-11.0", - "pool": "chromium.tests.mac-arm64" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, "test": "native_theme_unittests", "test_id_prefix": "ninja://ui/native_theme:native_theme_unittests/" },
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json index 2be581e5..c8a8ad085 100644 --- a/testing/buildbot/chromium.gpu.fyi.json +++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -2847,6 +2847,33 @@ "shards": 3 }, "test_id_prefix": "ninja://third_party/angle/src/tests:angle_perftests/" + }, + { + "args": [ + "-v" + ], + "isolate_name": "standalone_angle_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "standalone_angle_unittests", + "should_retry_with_patch": false, + "swarming": { + "can_use_on_swarming_builders": true, + "containment_type": "AUTO", + "dimension_sets": [ + { + "device_os": "Q", + "device_os_type": "userdebug", + "device_type": "walleye", + "os": "Android", + "pool": "chromium.tests.gpu" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://third_party/angle/src/tests:standalone_angle_unittests/" } ] }, @@ -3359,6 +3386,33 @@ "shards": 3 }, "test_id_prefix": "ninja://third_party/angle/src/tests:angle_perftests/" + }, + { + "args": [ + "-v" + ], + "isolate_name": "standalone_angle_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "standalone_angle_unittests", + "should_retry_with_patch": false, + "swarming": { + "can_use_on_swarming_builders": true, + "containment_type": "AUTO", + "dimension_sets": [ + { + "device_os": "Q", + "device_os_type": "userdebug", + "device_type": "walleye", + "os": "Android", + "pool": "chromium.tests.gpu" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://third_party/angle/src/tests:standalone_angle_unittests/" } ] },
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index 5094b1028..76c5317 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -2752,6 +2752,9 @@ # http://crbug.com/669196 '--test-launcher-retry-limit=0' ], + 'android_args': [ + '-v', + ], 'linux_args': ['--no-xvfb'], 'should_retry_with_patch': False, }, @@ -4774,6 +4777,14 @@ 'non_android_chromium_gtests_no_nacl', ], + 'chromium_mac_gtests_no_nacl_no_nocompile': [ + 'chromium_gtests', + 'chromium_gtests_for_devices_with_graphical_output', + 'mac_specific_chromium_gtests', + 'non_android_and_cast_and_chromeos_chromium_gtests', + 'non_android_chromium_gtests_no_nacl', + ], + 'chromium_mac_rel_isolated_scripts': [ 'chromedriver_py_tests_isolated_scripts', 'components_perftests_isolated_scripts',
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index fcce948..f0e5edaf 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -2436,7 +2436,7 @@ 'mac_arm64_apple_dtk_experimental', ], 'test_suites': { - 'gtest_tests': 'chromium_mac_gtests', + 'gtest_tests': 'chromium_mac_gtests_no_nacl_no_nocompile', 'isolated_scripts': 'chromium_mac_rel_isolated_scripts', }, }, @@ -3317,7 +3317,7 @@ ], 'test_suites': { 'gtest_tests': 'gpu_angle_gtests', - 'isolated_scripts': 'gpu_angle_perf_smoke_isolated_scripts', + 'isolated_scripts': 'gpu_angle_isolated_scripts', }, }, 'Android FYI 32 dEQP Vk Release (Pixel 2)': { @@ -3356,7 +3356,7 @@ ], 'test_suites': { 'gtest_tests': 'gpu_angle_gtests', - 'isolated_scripts': 'gpu_angle_perf_smoke_isolated_scripts', + 'isolated_scripts': 'gpu_angle_isolated_scripts', }, }, 'Android FYI 64 dEQP Vk Release (Pixel 2)': {
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index c94dca45..2ad7acb 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -3027,9 +3027,6 @@ "experiments": [ { "name": "Enabled", - "params": { - "overscroll_history_navigation_bottom_sheet": "false" - }, "enable_features": [ "OverscrollHistoryNavigation" ] @@ -7480,6 +7477,58 @@ ] } ], + "VideoTutorialDownloadStudy": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "VideoTutorialDownload", + "params": { + "availability": ">=0", + "event_1": "name:download_completed;comparator:any;window:30;storage:30", + "event_2": "name:video_tutorial_iph_clicked_download;comparator:any;window:30;storage:30", + "event_3": "name:video_tutorial_iph_dismissed_download;comparator:<10;window:30;storage:30", + "event_trigger": "name:tutorial_download_iph_trigger;comparator:any;window:30;storage:30", + "event_used": "name:download;comparator:any;window:30;storage:30", + "session_rate": "any", + "session_rate_impact": "none" + }, + "enable_features": [ + "IPH_VideoTutorial_Download" + ], + "disable_features": [] + } + ] + } + ], + "VideoTutorialSearchStudy": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "VideoTutorialSearch", + "params": { + "availability": ">=0", + "event_1": "name:search_completed;comparator:any;window:30;storage:30", + "event_2": "name:video_tutorial_iph_clicked_search;comparator:any;window:30;storage:30", + "event_3": "name:video_tutorial_iph_dismissed_search;comparator:<10;window:30;storage:30", + "event_trigger": "name:tutorial_search_iph_trigger;comparator:any;window:30;storage:30", + "event_used": "name:omnibox_search;comparator:any;window:30;storage:30", + "session_rate": "any", + "session_rate_impact": "none" + }, + "enable_features": [ + "IPH_VideoTutorial_Search" + ], + "disable_features": [] + } + ] + } + ], "VizForWebView": [ { "platforms": [
diff --git a/third_party/blink/public/mojom/BUILD.gn b/third_party/blink/public/mojom/BUILD.gn index d263afb..af4cd62 100644 --- a/third_party/blink/public/mojom/BUILD.gn +++ b/third_party/blink/public/mojom/BUILD.gn
@@ -77,7 +77,6 @@ "insecure_input/insecure_input_service.mojom", "keyboard_lock/keyboard_lock.mojom", "leak_detector/leak_detector.mojom", - "link_to_text/link_to_text.mojom", "loader/code_cache.mojom", "loader/content_security_notifier.mojom", "loader/fetch_client_settings_object.mojom", @@ -212,8 +211,8 @@ "//services/data_decoder/public/mojom:mojom_resource_snapshot_for_web_bundle", "//services/device/public/mojom", "//services/network/public/mojom", - "//services/network/public/mojom:data_pipe_interfaces", "//services/network/public/mojom:mojom_ip_address", + "//services/network/public/mojom:url_loader_base", "//services/network/public/mojom:websocket_mojom", "//services/service_manager/public/mojom", "//services/viz/public/mojom", @@ -628,7 +627,7 @@ sources += [ "remote_objects/remote_objects.mojom" ] # Direct deps (instead of transitive deps) are necessary for java targets. - public_deps += [ "//services/network/public/mojom:data_pipe_interfaces" ] + public_deps += [ "//services/network/public/mojom:url_loader_base" ] } # This Android unhandled-tap feature uses another mojo source, add it in.
diff --git a/third_party/blink/public/mojom/link_to_text/OWNERS b/third_party/blink/public/mojom/link_to_text/OWNERS deleted file mode 100644 index bf01ee9e..0000000 --- a/third_party/blink/public/mojom/link_to_text/OWNERS +++ /dev/null
@@ -1,4 +0,0 @@ -# COMPONENT: UI>Browser>Sharing - -per-file *.mojom=set noparent -per-file *.mojom=file://ipc/SECURITY_OWNERS \ No newline at end of file
diff --git a/third_party/blink/public/mojom/link_to_text/link_to_text.mojom b/third_party/blink/public/mojom/link_to_text/link_to_text.mojom deleted file mode 100644 index 342f4a1..0000000 --- a/third_party/blink/public/mojom/link_to_text/link_to_text.mojom +++ /dev/null
@@ -1,14 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -[JavaPackage="org.chromium.blink.mojom"] -module blink.mojom; - -// TextFragmentSelectorProducer is used for requesting renderer to generate -// text fragment selector for the latest text selection. Implemented in renderer. -interface TextFragmentSelectorProducer { - // Generates text fragment selector according to - // https://github.com/WICG/scroll-to-text-fragment#proposed-solution. - GenerateSelector() => (string selector); -};
diff --git a/third_party/blink/public/mojom/web_feature/web_feature.mojom b/third_party/blink/public/mojom/web_feature/web_feature.mojom index 6388c4b4..4ce8d58 100644 --- a/third_party/blink/public/mojom/web_feature/web_feature.mojom +++ b/third_party/blink/public/mojom/web_feature/web_feature.mojom
@@ -2795,6 +2795,7 @@ kTimerInstallFromBeforeUnload = 3468, kTimerInstallFromUnload = 3469, kElementAttachInternalsBeforeConstructor = 3470, + kSMILElementHasRepeatNEventListener = 3471, // Add new features immediately above this line. Don't change assigned // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/blink/public/strings/translations/blink_strings_af.xtb b/third_party/blink/public/strings/translations/blink_strings_af.xtb index 27aa35a..f3bef545 100644 --- a/third_party/blink/public/strings/translations/blink_strings_af.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_af.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">eindnota</translation> <translation id="1281252709823657822">dialoog</translation> <translation id="1306460908038601864">Af</translation> +<translation id="1311894908970423688">Waarde moet <ph name="VALUE_DATE_OR_TIME" /> wees.</translation> <translation id="1335095011850992622">erkennings</translation> <translation id="1342835525016946179">artikel</translation> <translation id="1359897965706325498">banier</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Vee uit</translation> <translation id="668171684555832681">Ander …</translation> <translation id="6692633176391053278">stapper</translation> +<translation id="6709093583001123835">Waarde moet <ph name="VALUE" /> wees.</translation> <translation id="6709570249143506788">Swak terugspeelgehalte</translation> <translation id="6755330956360078551">nutswenk</translation> <translation id="6790428901817661496">Speel</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_bs.xtb b/third_party/blink/public/strings/translations/blink_strings_bs.xtb index 1253306..93a9b706 100644 --- a/third_party/blink/public/strings/translations/blink_strings_bs.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_bs.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">završna napomena</translation> <translation id="1281252709823657822">dijaloški okvir</translation> <translation id="1306460908038601864">Isključeno</translation> +<translation id="1311894908970423688">Vrijednost mora biti <ph name="VALUE_DATE_OR_TIME" />.</translation> <translation id="1335095011850992622">zahvale</translation> <translation id="1342835525016946179">članak</translation> <translation id="1359897965706325498">oglasni natpis</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Obriši</translation> <translation id="668171684555832681">Drugo…</translation> <translation id="6692633176391053278">steper</translation> +<translation id="6709093583001123835">Vrijednost mora biti <ph name="VALUE" />.</translation> <translation id="6709570249143506788">Slab kvalitet reprodukcije</translation> <translation id="6755330956360078551">savjet u vezi s alatom</translation> <translation id="6790428901817661496">Pokreni</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ca.xtb b/third_party/blink/public/strings/translations/blink_strings_ca.xtb index 80880c4..b4fb871 100644 --- a/third_party/blink/public/strings/translations/blink_strings_ca.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_ca.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">nota final</translation> <translation id="1281252709823657822">quadre de diàleg</translation> <translation id="1306460908038601864">Desactivat</translation> +<translation id="1311894908970423688">El valor ha de ser <ph name="VALUE_DATE_OR_TIME" />.</translation> <translation id="1335095011850992622">crèdits</translation> <translation id="1342835525016946179">article</translation> <translation id="1359897965706325498">bàner</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Esborra</translation> <translation id="668171684555832681">Altres...</translation> <translation id="6692633176391053278">desplaçador</translation> +<translation id="6709093583001123835">El valor ha de ser <ph name="VALUE" />.</translation> <translation id="6709570249143506788">Qualitat de reproducció deficient</translation> <translation id="6755330956360078551">descripció emergent</translation> <translation id="6790428901817661496">Reprodueix</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_cs.xtb b/third_party/blink/public/strings/translations/blink_strings_cs.xtb index e990a0b..6266cddf 100644 --- a/third_party/blink/public/strings/translations/blink_strings_cs.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_cs.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">koncová poznámka</translation> <translation id="1281252709823657822">dialogové okno</translation> <translation id="1306460908038601864">Vypnuto</translation> +<translation id="1311894908970423688">Hodnota musí být <ph name="VALUE_DATE_OR_TIME" />.</translation> <translation id="1335095011850992622">poděkování</translation> <translation id="1342835525016946179">čl</translation> <translation id="1359897965706325498">banner</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Vymazat</translation> <translation id="668171684555832681">Další...</translation> <translation id="6692633176391053278">stepper</translation> +<translation id="6709093583001123835">Hodnota musí být <ph name="VALUE" />.</translation> <translation id="6709570249143506788">Špatná kvalita přehrávání</translation> <translation id="6755330956360078551">popisek</translation> <translation id="6790428901817661496">Přehrát</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_da.xtb b/third_party/blink/public/strings/translations/blink_strings_da.xtb index 6cd3d88..571f90e 100644 --- a/third_party/blink/public/strings/translations/blink_strings_da.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_da.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">slutnote</translation> <translation id="1281252709823657822">dialogboks</translation> <translation id="1306460908038601864">Fra</translation> +<translation id="1311894908970423688">Værdien skal være <ph name="VALUE_DATE_OR_TIME" />.</translation> <translation id="1335095011850992622">anerkendelser</translation> <translation id="1342835525016946179">artikel</translation> <translation id="1359897965706325498">banner</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Ryd</translation> <translation id="668171684555832681">Andre...</translation> <translation id="6692633176391053278">stepper</translation> +<translation id="6709093583001123835">Værdien skal være <ph name="VALUE" />.</translation> <translation id="6709570249143506788">Dårlig afspilningskvalitet</translation> <translation id="6755330956360078551">værktøjstip</translation> <translation id="6790428901817661496">Afspil</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_el.xtb b/third_party/blink/public/strings/translations/blink_strings_el.xtb index e220282f..365b356 100644 --- a/third_party/blink/public/strings/translations/blink_strings_el.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_el.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">σημείωση τέλους</translation> <translation id="1281252709823657822">παράθυρο διαλόγου</translation> <translation id="1306460908038601864">Απενεργοποιημένο</translation> +<translation id="1311894908970423688">Η τιμή πρέπει να είναι <ph name="VALUE_DATE_OR_TIME" />.</translation> <translation id="1335095011850992622">συντελεστές</translation> <translation id="1342835525016946179">άρθρο</translation> <translation id="1359897965706325498">banner</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Διαγραφή</translation> <translation id="668171684555832681">Άλλο...</translation> <translation id="6692633176391053278">stepper</translation> +<translation id="6709093583001123835">Η τιμή πρέπει να είναι <ph name="VALUE" />.</translation> <translation id="6709570249143506788">Κακή ποιότητα αναπαραγωγής</translation> <translation id="6755330956360078551">επεξήγηση εργαλείου</translation> <translation id="6790428901817661496">Αναπαραγωγή</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_es.xtb b/third_party/blink/public/strings/translations/blink_strings_es.xtb index 3b31f79f..93dbc2b 100644 --- a/third_party/blink/public/strings/translations/blink_strings_es.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_es.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">nota final</translation> <translation id="1281252709823657822">cuadro de diálogo</translation> <translation id="1306460908038601864">Desactivado</translation> +<translation id="1311894908970423688">El valor debe ser <ph name="VALUE_DATE_OR_TIME" />.</translation> <translation id="1335095011850992622">créditos</translation> <translation id="1342835525016946179">artículo</translation> <translation id="1359897965706325498">banner</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Eliminar</translation> <translation id="668171684555832681">Otros...</translation> <translation id="6692633176391053278">secuenciador</translation> +<translation id="6709093583001123835">El valor debe ser <ph name="VALUE" />.</translation> <translation id="6709570249143506788">Calidad de reproducción baja</translation> <translation id="6755330956360078551">descripción emergente</translation> <translation id="6790428901817661496">Reproducir</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_et.xtb b/third_party/blink/public/strings/translations/blink_strings_et.xtb index a681d68d..4602502 100644 --- a/third_party/blink/public/strings/translations/blink_strings_et.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_et.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">järelmärkus</translation> <translation id="1281252709823657822">dialoog</translation> <translation id="1306460908038601864">Väljas</translation> +<translation id="1311894908970423688">Väärtus peab olema <ph name="VALUE_DATE_OR_TIME" />.</translation> <translation id="1335095011850992622">tiitrid</translation> <translation id="1342835525016946179">artikkel</translation> <translation id="1359897965706325498">bänner</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Tühjenda</translation> <translation id="668171684555832681">Muu...</translation> <translation id="6692633176391053278">stepper</translation> +<translation id="6709093583001123835">Väärtus peab olema <ph name="VALUE" />.</translation> <translation id="6709570249143506788">Kehv esituskvaliteet</translation> <translation id="6755330956360078551">tööriistavihje</translation> <translation id="6790428901817661496">Esita</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_hi.xtb b/third_party/blink/public/strings/translations/blink_strings_hi.xtb index 9b3e68b..e6d22ba 100644 --- a/third_party/blink/public/strings/translations/blink_strings_hi.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_hi.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">एंड नोट</translation> <translation id="1281252709823657822">संवाद</translation> <translation id="1306460908038601864">बंद है</translation> +<translation id="1311894908970423688">तारीख <ph name="VALUE_DATE_OR_TIME" /> होनी चाहिए.</translation> <translation id="1335095011850992622">क्रेडिट</translation> <translation id="1342835525016946179">लेख</translation> <translation id="1359897965706325498">बैनर</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">साफ़ करें</translation> <translation id="668171684555832681">अन्य...</translation> <translation id="6692633176391053278">स्टेपर</translation> +<translation id="6709093583001123835">अंक <ph name="VALUE" /> होना चाहिए.</translation> <translation id="6709570249143506788">खराब वीडियो क्वालिटी</translation> <translation id="6755330956360078551">टूलटिप</translation> <translation id="6790428901817661496">चलाएं</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_hr.xtb b/third_party/blink/public/strings/translations/blink_strings_hr.xtb index 2dc6139..97c75f5 100644 --- a/third_party/blink/public/strings/translations/blink_strings_hr.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_hr.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">završna napomena</translation> <translation id="1281252709823657822">dijalog</translation> <translation id="1306460908038601864">Isključeno</translation> +<translation id="1311894908970423688">Vrijednost mora biti <ph name="VALUE_DATE_OR_TIME" />.</translation> <translation id="1335095011850992622">zasluge</translation> <translation id="1342835525016946179">članak</translation> <translation id="1359897965706325498">natpis</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Izbriši</translation> <translation id="668171684555832681">Ostalo...</translation> <translation id="6692633176391053278">povećanje/smanjenje strelicama gore/dolje (stepper)</translation> +<translation id="6709093583001123835">Vrijednost mora biti <ph name="VALUE" />.</translation> <translation id="6709570249143506788">Loša kvaliteta reprodukcije</translation> <translation id="6755330956360078551">opis</translation> <translation id="6790428901817661496">Reproduciraj</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_hy.xtb b/third_party/blink/public/strings/translations/blink_strings_hy.xtb index ecfdf67..0051050 100644 --- a/third_party/blink/public/strings/translations/blink_strings_hy.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_hy.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">ավարտական ծանոթագրություն</translation> <translation id="1281252709823657822">երկխոսության պատուհան</translation> <translation id="1306460908038601864">Անջատ</translation> +<translation id="1311894908970423688">Արժեքը պետք է լինի <ph name="VALUE_DATE_OR_TIME" />։</translation> <translation id="1335095011850992622">երախտիքի խոսքեր</translation> <translation id="1342835525016946179">article</translation> <translation id="1359897965706325498">ազդերիզ</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Մաքրել</translation> <translation id="668171684555832681">Այլ…</translation> <translation id="6692633176391053278">հաշվիչ</translation> +<translation id="6709093583001123835">Արժեքը պետք է լինի <ph name="VALUE" />։</translation> <translation id="6709570249143506788">Նվագարկման վատ որակ</translation> <translation id="6755330956360078551">գործիքահուշակ</translation> <translation id="6790428901817661496">Նվագարկել</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_it.xtb b/third_party/blink/public/strings/translations/blink_strings_it.xtb index e04cad0..a4775fcf 100644 --- a/third_party/blink/public/strings/translations/blink_strings_it.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_it.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">nota finale</translation> <translation id="1281252709823657822">finestra di dialogo</translation> <translation id="1306460908038601864">Off</translation> +<translation id="1311894908970423688">Il valore deve essere <ph name="VALUE_DATE_OR_TIME" />.</translation> <translation id="1335095011850992622">ringraziamenti</translation> <translation id="1342835525016946179">articolo</translation> <translation id="1359897965706325498">banner</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Cancella</translation> <translation id="668171684555832681">Altro...</translation> <translation id="6692633176391053278">stepper</translation> +<translation id="6709093583001123835">Il valore deve essere <ph name="VALUE" />.</translation> <translation id="6709570249143506788">Scarsa qualità di riproduzione</translation> <translation id="6755330956360078551">descrizione comando</translation> <translation id="6790428901817661496">Play</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ka.xtb b/third_party/blink/public/strings/translations/blink_strings_ka.xtb index 99b1cc7..2389364 100644 --- a/third_party/blink/public/strings/translations/blink_strings_ka.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_ka.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">საბოლოო შენიშვნა</translation> <translation id="1281252709823657822">დიალოგი</translation> <translation id="1306460908038601864">გამორთული</translation> +<translation id="1311894908970423688">მნიშვნელობა უნდა იყოს <ph name="VALUE_DATE_OR_TIME" />.</translation> <translation id="1335095011850992622">შემქმნელები</translation> <translation id="1342835525016946179">არტიკლი</translation> <translation id="1359897965706325498">ბანერი</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">გასუფთავება</translation> <translation id="668171684555832681">სხვა…</translation> <translation id="6692633176391053278">სტეპერი</translation> +<translation id="6709093583001123835">მნიშვნელობა უნდა იყოს <ph name="VALUE" />.</translation> <translation id="6709570249143506788">დაკვრის ხარისხი ცუდია</translation> <translation id="6755330956360078551">მინიშნება</translation> <translation id="6790428901817661496">დაკვრა</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_kn.xtb b/third_party/blink/public/strings/translations/blink_strings_kn.xtb index 0362870..3114fe4 100644 --- a/third_party/blink/public/strings/translations/blink_strings_kn.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_kn.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">ಮುಕ್ತಾಯ ಟಿಪ್ಪಣಿ</translation> <translation id="1281252709823657822">ಸಂವಾದ</translation> <translation id="1306460908038601864">ಆಫ್</translation> +<translation id="1311894908970423688">ಮೌಲ್ಯವು <ph name="VALUE_DATE_OR_TIME" /> ಇರಬೇಕು.</translation> <translation id="1335095011850992622">ಕ್ರೆಡಿಟ್ಗಳು</translation> <translation id="1342835525016946179">ಲೇಖನ</translation> <translation id="1359897965706325498">ಬ್ಯಾನರ್</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">ತೆರವುಗೊಳಿಸಿ</translation> <translation id="668171684555832681">ಇತರೆ...</translation> <translation id="6692633176391053278">ಸ್ಟೀಪರ್</translation> +<translation id="6709093583001123835">ಮೌಲ್ಯವು <ph name="VALUE" /> ಇರಬೇಕು.</translation> <translation id="6709570249143506788">ಪ್ಲೇಬ್ಯಾಕ್ ಗುಣಮಟ್ಟ ಕಳಪೆಯಾಗಿದೆ</translation> <translation id="6755330956360078551">ಟೂಲ್ ಟಿಪ್</translation> <translation id="6790428901817661496">ಪ್ಲೇ ಮಾಡು</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_lt.xtb b/third_party/blink/public/strings/translations/blink_strings_lt.xtb index c291ce8..21fc72f0 100644 --- a/third_party/blink/public/strings/translations/blink_strings_lt.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_lt.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">išnaša</translation> <translation id="1281252709823657822">dialogo langas</translation> <translation id="1306460908038601864">Išjungta</translation> +<translation id="1311894908970423688">Vertė turi būti <ph name="VALUE_DATE_OR_TIME" />.</translation> <translation id="1335095011850992622">titrai</translation> <translation id="1342835525016946179">artikelis</translation> <translation id="1359897965706325498">reklamjuostė</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Išvalyti</translation> <translation id="668171684555832681">Kita...</translation> <translation id="6692633176391053278">ėjimo aukštyn / žemyn valdiklis</translation> +<translation id="6709093583001123835">Vertė turi būti <ph name="VALUE" />.</translation> <translation id="6709570249143506788">Prasta atkūrimo kokybė</translation> <translation id="6755330956360078551">patarimas</translation> <translation id="6790428901817661496">Žaisti</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_mk.xtb b/third_party/blink/public/strings/translations/blink_strings_mk.xtb index 8c401004..b69a4a5 100644 --- a/third_party/blink/public/strings/translations/blink_strings_mk.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_mk.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">референца</translation> <translation id="1281252709823657822">дијалог</translation> <translation id="1306460908038601864">Исклучени</translation> +<translation id="1311894908970423688">Вредноста мора да биде <ph name="VALUE_DATE_OR_TIME" />.</translation> <translation id="1335095011850992622">благодарност</translation> <translation id="1342835525016946179">статија</translation> <translation id="1359897965706325498">банер</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Исчисти</translation> <translation id="668171684555832681">Друго...</translation> <translation id="6692633176391053278">градатор</translation> +<translation id="6709093583001123835">Вредноста мора да биде <ph name="VALUE" />.</translation> <translation id="6709570249143506788">Слаб квалитет на репродукција</translation> <translation id="6755330956360078551">совет за алатка</translation> <translation id="6790428901817661496">Репродуцирај</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ml.xtb b/third_party/blink/public/strings/translations/blink_strings_ml.xtb index 7b4f5bcb..c671e01 100644 --- a/third_party/blink/public/strings/translations/blink_strings_ml.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_ml.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">അന്തിമ കുറിപ്പ്</translation> <translation id="1281252709823657822">ഡയലോഗ്</translation> <translation id="1306460908038601864">ഓഫാണ്</translation> +<translation id="1311894908970423688">മൂല്യം <ph name="VALUE_DATE_OR_TIME" /> ആയിരിക്കണം.</translation> <translation id="1335095011850992622">ക്രെഡിറ്റുകൾ</translation> <translation id="1342835525016946179">ലേഖനം</translation> <translation id="1359897965706325498">ബാനർ</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">മായ്ക്കുക</translation> <translation id="668171684555832681">മറ്റുള്ളവ...</translation> <translation id="6692633176391053278">സ്റ്റെപ്പർ</translation> +<translation id="6709093583001123835">മൂല്യം <ph name="VALUE" /> ആയിരിക്കണം.</translation> <translation id="6709570249143506788">മോശം പ്ലേബാക്ക് നിലവാരം</translation> <translation id="6755330956360078551">ടൂൾടിപ്പ്</translation> <translation id="6790428901817661496">പ്ലേചെയ്യുക</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_mr.xtb b/third_party/blink/public/strings/translations/blink_strings_mr.xtb index ac8920d..7cbe925 100644 --- a/third_party/blink/public/strings/translations/blink_strings_mr.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_mr.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">तळटीप</translation> <translation id="1281252709823657822">डायलॉग</translation> <translation id="1306460908038601864">बंद करा</translation> +<translation id="1311894908970423688">मूल्य <ph name="VALUE_DATE_OR_TIME" /> असणे आवश्यक आहे.</translation> <translation id="1335095011850992622">श्रेय</translation> <translation id="1342835525016946179">लेख</translation> <translation id="1359897965706325498">बॅनर</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">साफ करा</translation> <translation id="668171684555832681">अन्य...</translation> <translation id="6692633176391053278">stepper</translation> +<translation id="6709093583001123835">मूल्य <ph name="VALUE" /> असणे आवश्यक आहे.</translation> <translation id="6709570249143506788">खराब प्लेबॅक गुणवत्ता</translation> <translation id="6755330956360078551">टूलटिप</translation> <translation id="6790428901817661496">प्ले करा</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_nl.xtb b/third_party/blink/public/strings/translations/blink_strings_nl.xtb index 25ea0631..5f04c4c 100644 --- a/third_party/blink/public/strings/translations/blink_strings_nl.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_nl.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">eindnoot</translation> <translation id="1281252709823657822">dialoogvenster</translation> <translation id="1306460908038601864">Uit</translation> +<translation id="1311894908970423688">Waarde moet <ph name="VALUE_DATE_OR_TIME" /> zijn.</translation> <translation id="1335095011850992622">bronvermelding</translation> <translation id="1342835525016946179">artikel</translation> <translation id="1359897965706325498">banner</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Wissen</translation> <translation id="668171684555832681">Anders...</translation> <translation id="6692633176391053278">stappenregelaar</translation> +<translation id="6709093583001123835">Waarde moet <ph name="VALUE" /> zijn.</translation> <translation id="6709570249143506788">Slechte afspeelkwaliteit</translation> <translation id="6755330956360078551">knopinfo</translation> <translation id="6790428901817661496">Spelen</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_no.xtb b/third_party/blink/public/strings/translations/blink_strings_no.xtb index 3be00e12..f68c5f5 100644 --- a/third_party/blink/public/strings/translations/blink_strings_no.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_no.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">sluttnote</translation> <translation id="1281252709823657822">dialog</translation> <translation id="1306460908038601864">Av</translation> +<translation id="1311894908970423688">Verdien må være <ph name="VALUE_DATE_OR_TIME" />.</translation> <translation id="1335095011850992622">anerkjennelser</translation> <translation id="1342835525016946179">article</translation> <translation id="1359897965706325498">banner</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Tøm</translation> <translation id="668171684555832681">Annen</translation> <translation id="6692633176391053278">stepper</translation> +<translation id="6709093583001123835">Verdien må være <ph name="VALUE" />.</translation> <translation id="6709570249143506788">Dårlig avspillingskvalitet</translation> <translation id="6755330956360078551">verktøytips</translation> <translation id="6790428901817661496">Spill av</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_pl.xtb b/third_party/blink/public/strings/translations/blink_strings_pl.xtb index 92659d37..05dd64ea 100644 --- a/third_party/blink/public/strings/translations/blink_strings_pl.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_pl.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">przypis końcowy</translation> <translation id="1281252709823657822">okno dialogowe</translation> <translation id="1306460908038601864">Wyłączono</translation> +<translation id="1311894908970423688">Wymagana wartość: <ph name="VALUE_DATE_OR_TIME" />.</translation> <translation id="1335095011850992622">autorzy</translation> <translation id="1342835525016946179">article</translation> <translation id="1359897965706325498">baner</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Wyczyść</translation> <translation id="668171684555832681">Inny...</translation> <translation id="6692633176391053278">element kroczący</translation> +<translation id="6709093583001123835">Wymagana wartość: <ph name="VALUE" />.</translation> <translation id="6709570249143506788">Niska jakość odtwarzania</translation> <translation id="6755330956360078551">etykietka</translation> <translation id="6790428901817661496">Odtwórz</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_pt-BR.xtb b/third_party/blink/public/strings/translations/blink_strings_pt-BR.xtb index 68a6c04..e0b33a1 100644 --- a/third_party/blink/public/strings/translations/blink_strings_pt-BR.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_pt-BR.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">nota final</translation> <translation id="1281252709823657822">caixa de diálogo</translation> <translation id="1306460908038601864">Desativadas</translation> +<translation id="1311894908970423688">O valor precisa ser <ph name="VALUE_DATE_OR_TIME" />.</translation> <translation id="1335095011850992622">créditos</translation> <translation id="1342835525016946179">article</translation> <translation id="1359897965706325498">banner</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Limpar</translation> <translation id="668171684555832681">Outro...</translation> <translation id="6692633176391053278">stepper</translation> +<translation id="6709093583001123835">O valor precisa ser <ph name="VALUE" />.</translation> <translation id="6709570249143506788">Baixa qualidade de reprodução</translation> <translation id="6755330956360078551">dica</translation> <translation id="6790428901817661496">Reproduzir</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_pt-PT.xtb b/third_party/blink/public/strings/translations/blink_strings_pt-PT.xtb index f1e09b6..0aa268b5 100644 --- a/third_party/blink/public/strings/translations/blink_strings_pt-PT.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_pt-PT.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">nota final</translation> <translation id="1281252709823657822">caixa de diálogo</translation> <translation id="1306460908038601864">Desativado</translation> +<translation id="1311894908970423688">O valor tem de ser <ph name="VALUE_DATE_OR_TIME" />.</translation> <translation id="1335095011850992622">créditos</translation> <translation id="1342835525016946179">article</translation> <translation id="1359897965706325498">banner</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Limpar</translation> <translation id="668171684555832681">Outros...</translation> <translation id="6692633176391053278">stepper</translation> +<translation id="6709093583001123835">O valor tem de ser <ph name="VALUE" />.</translation> <translation id="6709570249143506788">Má qualidade de reprodução.</translation> <translation id="6755330956360078551">sugestão</translation> <translation id="6790428901817661496">Reproduzir</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_si.xtb b/third_party/blink/public/strings/translations/blink_strings_si.xtb index 804df28..5067fc6 100644 --- a/third_party/blink/public/strings/translations/blink_strings_si.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_si.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">නිමි සටහන</translation> <translation id="1281252709823657822">සංවාදය</translation> <translation id="1306460908038601864">අක්රිය</translation> +<translation id="1311894908970423688">අගය <ph name="VALUE_DATE_OR_TIME" /> විය යුතුය.</translation> <translation id="1335095011850992622">සම්මාන</translation> <translation id="1342835525016946179">ලිපිය</translation> <translation id="1359897965706325498">බැනරය</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">මකන්න</translation> <translation id="668171684555832681">වෙනත්...</translation> <translation id="6692633176391053278">ස්ටෙපර්</translation> +<translation id="6709093583001123835">අගය <ph name="VALUE" /> විය යුතුය.</translation> <translation id="6709570249143506788">දුර්වල පසුධාවන ගුණත්වය</translation> <translation id="6755330956360078551">මෙවලම් ඉඟිය</translation> <translation id="6790428901817661496">වාදනය කරන්න</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_sk.xtb b/third_party/blink/public/strings/translations/blink_strings_sk.xtb index 8d2363a..11590f9d 100644 --- a/third_party/blink/public/strings/translations/blink_strings_sk.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_sk.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">vysvetlivka</translation> <translation id="1281252709823657822">dialóg</translation> <translation id="1306460908038601864">vypnuté</translation> +<translation id="1311894908970423688">Hodnota musí byť <ph name="VALUE_DATE_OR_TIME" />.</translation> <translation id="1335095011850992622">titulky</translation> <translation id="1342835525016946179">článok</translation> <translation id="1359897965706325498">banner</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Vymazať</translation> <translation id="668171684555832681">Iný...</translation> <translation id="6692633176391053278">stepper</translation> +<translation id="6709093583001123835">Hodnota musí byť <ph name="VALUE" />.</translation> <translation id="6709570249143506788">Nízka kvalita prehrávania</translation> <translation id="6755330956360078551">popis</translation> <translation id="6790428901817661496">Prehrať</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_sl.xtb b/third_party/blink/public/strings/translations/blink_strings_sl.xtb index 3ec8a46..b323c4e 100644 --- a/third_party/blink/public/strings/translations/blink_strings_sl.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_sl.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">končna opomba</translation> <translation id="1281252709823657822">pogovorno okno</translation> <translation id="1306460908038601864">Izklopljeno</translation> +<translation id="1311894908970423688">Vrednost mora biti <ph name="VALUE_DATE_OR_TIME" />.</translation> <translation id="1335095011850992622">seznam sodelujočih</translation> <translation id="1342835525016946179">člnk</translation> <translation id="1359897965706325498">pasica</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Izbriši</translation> <translation id="668171684555832681">Drugo ...</translation> <translation id="6692633176391053278">kontrolnik</translation> +<translation id="6709093583001123835">Vrednost mora biti <ph name="VALUE" />.</translation> <translation id="6709570249143506788">Slaba kakovost predvajanja</translation> <translation id="6755330956360078551">opis orodja</translation> <translation id="6790428901817661496">Predvajanje</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_sr-Latn.xtb b/third_party/blink/public/strings/translations/blink_strings_sr-Latn.xtb index da1c40c..35bd20d 100644 --- a/third_party/blink/public/strings/translations/blink_strings_sr-Latn.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_sr-Latn.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">završna napomena</translation> <translation id="1281252709823657822">dijalog</translation> <translation id="1306460908038601864">Isključeno</translation> +<translation id="1311894908970423688">Vrednost mora da bude <ph name="VALUE_DATE_OR_TIME" />.</translation> <translation id="1335095011850992622">zasluge</translation> <translation id="1342835525016946179">article</translation> <translation id="1359897965706325498">baner</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Obriši</translation> <translation id="668171684555832681">Drugo...</translation> <translation id="6692633176391053278">kontrola za promene u koracima</translation> +<translation id="6709093583001123835">Vrednost mora da bude <ph name="VALUE" />.</translation> <translation id="6709570249143506788">Loš kvalitet snimka</translation> <translation id="6755330956360078551">objašnjenje</translation> <translation id="6790428901817661496">Pusti</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_sr.xtb b/third_party/blink/public/strings/translations/blink_strings_sr.xtb index 7d80ce0..b0f6c2f3 100644 --- a/third_party/blink/public/strings/translations/blink_strings_sr.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_sr.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">завршна напомена</translation> <translation id="1281252709823657822">дијалог</translation> <translation id="1306460908038601864">Искључено</translation> +<translation id="1311894908970423688">Вредност мора да буде <ph name="VALUE_DATE_OR_TIME" />.</translation> <translation id="1335095011850992622">заслуге</translation> <translation id="1342835525016946179">article</translation> <translation id="1359897965706325498">банер</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Обриши</translation> <translation id="668171684555832681">Друго...</translation> <translation id="6692633176391053278">контрола за промене у корацима</translation> +<translation id="6709093583001123835">Вредност мора да буде <ph name="VALUE" />.</translation> <translation id="6709570249143506788">Лош квалитет снимка</translation> <translation id="6755330956360078551">објашњење</translation> <translation id="6790428901817661496">Пусти</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_sv.xtb b/third_party/blink/public/strings/translations/blink_strings_sv.xtb index 24e48ff5..65a676d 100644 --- a/third_party/blink/public/strings/translations/blink_strings_sv.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_sv.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">slutnot</translation> <translation id="1281252709823657822">dialogruta</translation> <translation id="1306460908038601864">Av</translation> +<translation id="1311894908970423688">Värdet måste vara <ph name="VALUE_DATE_OR_TIME" />.</translation> <translation id="1335095011850992622">medverkande</translation> <translation id="1342835525016946179">artikel</translation> <translation id="1359897965706325498">banner</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Rensa</translation> <translation id="668171684555832681">Annan...</translation> <translation id="6692633176391053278">knappreglage</translation> +<translation id="6709093583001123835">Värdet måste vara <ph name="VALUE" />.</translation> <translation id="6709570249143506788">Låg uppspelningskvalitet</translation> <translation id="6755330956360078551">beskrivning</translation> <translation id="6790428901817661496">Spela</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_uk.xtb b/third_party/blink/public/strings/translations/blink_strings_uk.xtb index f7ec591..071bf2e6d 100644 --- a/third_party/blink/public/strings/translations/blink_strings_uk.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_uk.xtb
@@ -13,6 +13,7 @@ <translation id="1211441953136645838">кінцева виноска</translation> <translation id="1281252709823657822">діалогове вікно</translation> <translation id="1306460908038601864">Вимкнено</translation> +<translation id="1311894908970423688">Укажіть значення <ph name="VALUE_DATE_OR_TIME" />.</translation> <translation id="1335095011850992622">подяки</translation> <translation id="1342835525016946179">стаття</translation> <translation id="1359897965706325498">банер</translation> @@ -185,6 +186,7 @@ <translation id="6643016212128521049">Очистити</translation> <translation id="668171684555832681">Інший...</translation> <translation id="6692633176391053278">повторювач stepper</translation> +<translation id="6709093583001123835">Укажіть значення <ph name="VALUE" />.</translation> <translation id="6709570249143506788">Низька якість відтворення</translation> <translation id="6755330956360078551">підказка</translation> <translation id="6790428901817661496">Відтворити</translation>
diff --git a/third_party/blink/renderer/core/css/css_properties.json5 b/third_party/blink/renderer/core/css/css_properties.json5 index 55f29e6..bf2f7f8 100644 --- a/third_party/blink/renderer/core/css/css_properties.json5 +++ b/third_party/blink/renderer/core/css/css_properties.json5
@@ -3104,7 +3104,7 @@ { name: "scrollbar-gutter", property_methods: ["ParseSingleValue", "CSSValueFromComputedStyleInternal"], - inherited: true, + inherited: false, field_size: 4, field_template: "primitive", default_value: "kScrollbarGutterAuto",
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc index b020369..04f84b3 100644 --- a/third_party/blink/renderer/core/dom/element.cc +++ b/third_party/blink/renderer/core/dom/element.cc
@@ -1352,8 +1352,10 @@ LayoutBox* Element::GetLayoutBoxForScrolling() const { LayoutBox* box = GetLayoutBox(); - if (!box || !box->HasNonVisibleOverflow()) + if (!box || (!box->HasNonVisibleOverflow() && + !box->StyleRef().ScrollbarGutterIsForce())) { return nullptr; + } return box; }
diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc index 137aade..29079e5c 100644 --- a/third_party/blink/renderer/core/frame/local_frame.cc +++ b/third_party/blink/renderer/core/frame/local_frame.cc
@@ -152,7 +152,6 @@ #include "third_party/blink/renderer/core/page/plugin_script_forbidden_scope.h" #include "third_party/blink/renderer/core/page/pointer_lock_controller.h" #include "third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.h" -#include "third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.h" #include "third_party/blink/renderer/core/paint/compositing/graphics_layer_tree_as_text.h" #include "third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.h" #include "third_party/blink/renderer/core/paint/object_painter.h" @@ -358,13 +357,6 @@ WTF::BindRepeating(&LocalFrame::BindToHighPriorityReceiver, WrapWeakPersistent(this)), GetTaskRunner(blink::TaskType::kInternalHighPriorityLocalFrame)); - - if (IsMainFrame()) { - GetInterfaceRegistry()->AddInterface( - WTF::BindRepeating(&LocalFrame::BindTextFragmentSelectorProducer, - WrapWeakPersistent(this))); - } - SetOpenerDoNotNotify(opener); loader_.Init(); } @@ -463,7 +455,6 @@ visitor->Trace(receiver_); visitor->Trace(main_frame_receiver_); visitor->Trace(high_priority_frame_receiver_); - visitor->Trace(text_fragment_selector_generator_); Frame::Trace(visitor); Supplementable<LocalFrame>::Trace(visitor); } @@ -601,11 +592,7 @@ // up calling back to LocalFrameClient via WindowProxy. GetScriptController().ClearForClose(); - if (text_fragment_selector_generator_) - text_fragment_selector_generator_->ClearSelection(); - - // TODO(crbug.com/729196): Trace why LocalFrameView::DetachFromLayout crashes. - CHECK(!view_->IsAttached()); + DCHECK(!view_->IsAttached()); SetView(nullptr); GetEventHandlerRegistry().DidRemoveAllEventHandlers(*DomWindow()); @@ -1399,10 +1386,6 @@ } DCHECK(ad_tracker_ ? RuntimeEnabledFeatures::AdTaggingEnabled() : !RuntimeEnabledFeatures::AdTaggingEnabled()); - if (IsMainFrame()) { - text_fragment_selector_generator_ = - MakeGarbageCollected<TextFragmentSelectorGenerator>(); - } Initialize(); @@ -3183,16 +3166,6 @@ GetTaskRunner(blink::TaskType::kInternalHighPriorityLocalFrame)); } -void LocalFrame::BindTextFragmentSelectorProducer( - mojo::PendingReceiver<mojom::blink::TextFragmentSelectorProducer> - receiver) { - if (IsDetached() || !text_fragment_selector_generator_) - return; - - text_fragment_selector_generator_->BindTextFragmentSelectorProducer( - std::move(receiver)); -} - SpellChecker& LocalFrame::GetSpellChecker() const { DCHECK(DomWindow()); return DomWindow()->GetSpellChecker();
diff --git a/third_party/blink/renderer/core/frame/local_frame.h b/third_party/blink/renderer/core/frame/local_frame.h index 213f430..785b893 100644 --- a/third_party/blink/renderer/core/frame/local_frame.h +++ b/third_party/blink/renderer/core/frame/local_frame.h
@@ -45,7 +45,6 @@ #include "third_party/blink/public/mojom/frame/lifecycle.mojom-blink-forward.h" #include "third_party/blink/public/mojom/frame/reporting_observer.mojom-blink-forward.h" #include "third_party/blink/public/mojom/input/focus_type.mojom-blink-forward.h" -#include "third_party/blink/public/mojom/link_to_text/link_to_text.mojom-blink.h" #include "third_party/blink/public/mojom/loader/pause_subresource_loading_handle.mojom-blink-forward.h" #include "third_party/blink/public/mojom/optimization_guide/optimization_guide.mojom-blink.h" #include "third_party/blink/public/mojom/reporting/reporting.mojom-blink.h" @@ -131,7 +130,6 @@ class ScriptController; class SmoothScrollSequencer; class SpellChecker; -class TextFragmentSelectorGenerator; class TextSuggestionController; class VirtualKeyboardOverlayChangedObserver; class WebContentSettingsClient; @@ -686,10 +684,6 @@ return LocalFrameToken(GetFrameToken()); } - TextFragmentSelectorGenerator* GetTextFragmentSelectorGenerator() const { - return text_fragment_selector_generator_; - } - private: friend class FrameNavigationDisabler; FRIEND_TEST_ALL_PREFIXES(LocalFrameTest, CharacterIndexAtPointWithPinchZoom); @@ -762,10 +756,6 @@ void BindToHighPriorityReceiver( mojo::PendingReceiver<mojom::blink::HighPriorityLocalFrame> receiver); - void BindTextFragmentSelectorProducer( - mojo::PendingReceiver<mojom::blink::TextFragmentSelectorProducer> - receiver); - std::unique_ptr<FrameScheduler> frame_scheduler_; // Holds all PauseSubresourceLoadingHandles allowing either |this| to delete @@ -907,8 +897,6 @@ Member<RawSystemClipboard> raw_system_clipboard_; mojom::blink::BlinkOptimizationGuideHintsPtr optimization_guide_hints_; - - Member<TextFragmentSelectorGenerator> text_fragment_selector_generator_; }; inline FrameLoader& LocalFrame::Loader() const {
diff --git a/third_party/blink/renderer/core/inspector/inspector_overlay_agent.h b/third_party/blink/renderer/core/inspector/inspector_overlay_agent.h index 7e15059..9223564 100644 --- a/third_party/blink/renderer/core/inspector/inspector_overlay_agent.h +++ b/third_party/blink/renderer/core/inspector/inspector_overlay_agent.h
@@ -284,7 +284,7 @@ Member<Hinge> hinge_; // The agent needs to keep AXContext because it enables caching of // a11y attributes shown in the inspector overlay. - HeapHashMap<Member<Document>, std::unique_ptr<AXContext>> + HeapHashMap<WeakMember<Document>, std::unique_ptr<AXContext>> document_to_ax_context_; bool swallow_next_mouse_up_; DOMNodeId backend_node_id_to_inspect_;
diff --git a/third_party/blink/renderer/core/layout/layout_box.cc b/third_party/blink/renderer/core/layout/layout_box.cc index 20bc84d..f7a92bc 100644 --- a/third_party/blink/renderer/core/layout/layout_box.cc +++ b/third_party/blink/renderer/core/layout/layout_box.cc
@@ -299,6 +299,9 @@ if (HasNonVisibleOverflow()) return kOverflowClipPaintLayer; + if (StyleRef().ScrollbarGutterIsForce()) + return kNormalPaintLayer; + return kNoPaintLayer; } @@ -817,7 +820,7 @@ } LayoutUnit LayoutBox::ScrollWidth() const { - if (HasNonVisibleOverflow()) + if (HasNonVisibleOverflow() || StyleRef().ScrollbarGutterIsForce()) return GetScrollableArea()->ScrollWidth(); // For objects with visible overflow, this matches IE. // FIXME: Need to work right with writing modes. @@ -828,7 +831,7 @@ } LayoutUnit LayoutBox::ScrollHeight() const { - if (HasNonVisibleOverflow()) + if (HasNonVisibleOverflow() || StyleRef().ScrollbarGutterIsForce()) return GetScrollableArea()->ScrollHeight(); // For objects with visible overflow, this matches IE. // FIXME: Need to work right with writing modes. @@ -1334,12 +1337,14 @@ if (orientation == kVerticalScrollbar) { EOverflow overflow = StyleRef().OverflowY(); - return (overflow == EOverflow::kAuto || overflow == EOverflow::kScroll) && + return (StyleRef().ScrollbarGutterIsForce() || + overflow == EOverflow::kAuto || overflow == EOverflow::kScroll) && StyleRef().IsHorizontalWritingMode() && !(is_stable && UsesOverlayScrollbars()); } else { EOverflow overflow = StyleRef().OverflowX(); - return (overflow == EOverflow::kAuto || overflow == EOverflow::kScroll) && + return (StyleRef().ScrollbarGutterIsForce() || + overflow == EOverflow::kAuto || overflow == EOverflow::kScroll) && !StyleRef().IsHorizontalWritingMode() && !(is_stable && UsesOverlayScrollbars()); } @@ -5254,42 +5259,50 @@ logical_left_length, logical_right_length, margin_logical_left, margin_logical_right, computed_values); - // Calculate constraint equation values for 'max-width' case. - if (!StyleRef().LogicalMaxWidth().IsNone()) { - LogicalExtentComputedValues max_values; + MinMaxSizes transferred_min_max{LayoutUnit(), LayoutUnit::Max()}; + if (ShouldComputeLogicalHeightFromAspectRatio()) + transferred_min_max = ComputeMinMaxLogicalWidthFromAspectRatio(); + // Calculate constraint equation values for 'max-width' case. + LogicalExtentComputedValues max_values; + max_values.extent_ = LayoutUnit::Max(); + if (!StyleRef().LogicalMaxWidth().IsNone()) { ComputePositionedLogicalWidthUsing( kMaxSize, StyleRef().LogicalMaxWidth(), container_block, container_direction, container_logical_width, borders_plus_padding, logical_left_length, logical_right_length, margin_logical_left, margin_logical_right, max_values); - - if (computed_values.extent_ > max_values.extent_) { - computed_values.extent_ = max_values.extent_; - computed_values.position_ = max_values.position_; - computed_values.margins_.start_ = max_values.margins_.start_; - computed_values.margins_.end_ = max_values.margins_.end_; - } + } + if (transferred_min_max.max_size < max_values.extent_) { + ComputePositionedLogicalWidthUsing( + kMaxSize, Length::Fixed(transferred_min_max.max_size), container_block, + container_direction, container_logical_width, borders_plus_padding, + logical_left_length, logical_right_length, margin_logical_left, + margin_logical_right, max_values); } + if (computed_values.extent_ > max_values.extent_) + max_values.CopyExceptBlockMargins(&computed_values); + + LogicalExtentComputedValues min_values; // Calculate constraint equation values for 'min-width' case. if (!StyleRef().LogicalMinWidth().IsZero() || StyleRef().LogicalMinWidth().IsIntrinsic()) { - LogicalExtentComputedValues min_values; - ComputePositionedLogicalWidthUsing( kMinSize, StyleRef().LogicalMinWidth(), container_block, container_direction, container_logical_width, borders_plus_padding, logical_left_length, logical_right_length, margin_logical_left, margin_logical_right, min_values); - - if (computed_values.extent_ < min_values.extent_) { - computed_values.extent_ = min_values.extent_; - computed_values.position_ = min_values.position_; - computed_values.margins_.start_ = min_values.margins_.start_; - computed_values.margins_.end_ = min_values.margins_.end_; - } } + if (transferred_min_max.min_size > min_values.extent_) { + ComputePositionedLogicalWidthUsing( + kMinSize, Length::Fixed(transferred_min_max.min_size), container_block, + container_direction, container_logical_width, borders_plus_padding, + logical_left_length, logical_right_length, margin_logical_left, + margin_logical_right, min_values); + } + if (computed_values.extent_ < min_values.extent_) + min_values.CopyExceptBlockMargins(&computed_values); computed_values.extent_ += borders_plus_padding; }
diff --git a/third_party/blink/renderer/core/layout/layout_box.h b/third_party/blink/renderer/core/layout/layout_box.h index 2c9ab38..fb96bb8b 100644 --- a/third_party/blink/renderer/core/layout/layout_box.h +++ b/third_party/blink/renderer/core/layout/layout_box.h
@@ -916,6 +916,13 @@ public: LogicalExtentComputedValues() = default; + void CopyExceptBlockMargins(LogicalExtentComputedValues* out) const { + out->extent_ = extent_; + out->position_ = position_; + out->margins_.start_ = margins_.start_; + out->margins_.end_ = margins_.end_; + } + // This is the dimension in the measured direction // (logical height or logical width). LayoutUnit extent_;
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_item_result.h b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_item_result.h index a1a7872..9ab17dd2 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_item_result.h +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_item_result.h
@@ -53,6 +53,9 @@ // The range of text content for this item. NGTextOffset text_offset; + // Indicates the limits of the trailing space run. + base::Optional<unsigned> non_hangable_run_end; + // Inline size of this item. LayoutUnit inline_size;
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc index 568bec8..3c71854 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc
@@ -198,7 +198,7 @@ handled_leading_floats_index_(handled_leading_floats_index), base_direction_(node_.BaseDirection()) { available_width_ = ComputeAvailableWidth(); - break_iterator_.SetBreakSpace(BreakSpaceType::kBeforeSpaceRun); + break_iterator_.SetBreakSpace(BreakSpaceType::kAfterSpaceRun); if (!break_token) return; @@ -622,6 +622,17 @@ return; } + // Hanging trailing spaces may resolve the overflow. + if (item_result->has_only_trailing_spaces) { + if (item_result->item->Style()->WhiteSpace() == EWhiteSpace::kPreWrap && + IsBreakableSpace(Text()[item_result->EndOffset() - 1])) { + unsigned end_index = item_result - line_info->Results().begin(); + Rewind(end_index, line_info); + } + state_ = LineBreakState::kTrailing; + return; + } + // If this is all trailable spaces, this item is trailable, and next item // maybe too. Don't go to |HandleOverflow()| yet. if (IsAllBreakableSpaces(Text(), item_result->StartOffset(), @@ -760,6 +771,8 @@ item_result->inline_size = inline_size; item_result->text_offset.end = result.break_offset; item_result->text_offset.AssertNotEmpty(); + item_result->non_hangable_run_end = result.non_hangable_run_end; + item_result->has_only_trailing_spaces = result.has_trailing_spaces; item_result->shape_result = std::move(shape_result); break; } @@ -884,20 +897,31 @@ if (end_offset >= item.EndOffset()) break; + unsigned non_hangable_run_end = end_offset; + if (item.Style()->WhiteSpace() != EWhiteSpace::kBreakSpaces) { + while (non_hangable_run_end > item.StartOffset() && + IsBreakableSpace(text[non_hangable_run_end - 1])) { + --non_hangable_run_end; + } + } + // Inserting a hyphenation character is not supported yet. - if (text[end_offset - 1] == kSoftHyphenCharacter) + // TODO (jfernandez): Maybe we need to use 'end_offset' here ? + if (text[non_hangable_run_end - 1] == kSoftHyphenCharacter) return false; float start_position = shape_result.CachedPositionForOffset( start_offset - shape_result.StartIndex()); float end_position = shape_result.CachedPositionForOffset( - end_offset - shape_result.StartIndex()); + non_hangable_run_end - shape_result.StartIndex()); float word_width = IsLtr(shape_result.Direction()) ? end_position - start_position : start_position - end_position; min_width = std::max(word_width, min_width); - last_end_offset = end_offset; + last_end_offset = non_hangable_run_end; + // TODO (jfernandez): I think that having the non_hangable_run_end + // would make this loop unnecessary/redudant. start_offset = end_offset; while (start_offset < item.EndOffset() && IsBreakableSpace(text[start_offset])) { @@ -914,7 +938,8 @@ return false; // Create an NGInlineItemResult that has the max of widths of all words. - item_result->text_offset.end = last_end_offset; + item_result->text_offset.end = + std::max(last_end_offset, item_result->text_offset.start + 1); item_result->text_offset.AssertNotEmpty(); item_result->inline_size = LayoutUnit::FromFloatCeil(min_width); item_result->can_break_after = true; @@ -1026,6 +1051,9 @@ (item.Type() == NGInlineItem::kControl && Text()[item.StartOffset()] == kTabulationCharacter)); DCHECK(&shape_result); + bool is_control_tab = item.Type() == NGInlineItem::kControl && + Text()[item.StartOffset()] == kTabulationCharacter; + DCHECK(item.Type() == NGInlineItem::kText || is_control_tab); DCHECK_GE(offset_, item.StartOffset()); DCHECK_LT(offset_, item.EndOffset()); const String& text = Text(); @@ -1039,6 +1067,8 @@ if (style.CollapseWhiteSpace()) { if (text[offset_] != kSpaceCharacter) { + if (offset_ > 0 && IsBreakableSpace(text[offset_ - 1])) + trailing_whitespace_ = WhitespaceState::kCollapsible; state_ = LineBreakState::kDone; return; } @@ -1060,18 +1090,29 @@ while (end < item.EndOffset() && IsBreakableSpace(text[end])) end++; if (end == offset_) { + if (IsBreakableSpace(text[end - 1])) + trailing_whitespace_ = WhitespaceState::kPreserved; state_ = LineBreakState::kDone; return; } + // TODO (jfernandez): Could we just modify the last ItemResult + // instead of creating a new one ? + // Probably we can (koji). We would need to review usage of these + // item results, and change them to use "non_hangable_run_end" + // instead. NGInlineItemResult* item_result = AddItem(item, end, line_info); + item_result->non_hangable_run_end = offset_; item_result->has_only_trailing_spaces = true; item_result->shape_result = ShapeResultView::Create(&shape_result); if (item_result->StartOffset() == item.StartOffset() && - item_result->EndOffset() == item.EndOffset()) - item_result->inline_size = item_result->shape_result->SnappedWidth(); - else + item_result->EndOffset() == item.EndOffset()) { + item_result->inline_size = item_result->shape_result + ? item_result->shape_result->SnappedWidth() + : LayoutUnit(); + } else { UpdateShapeResult(*line_info, item_result); + } position_ += item_result->inline_size; item_result->can_break_after = end < text.length() && !IsBreakableSpace(text[end]); @@ -1662,7 +1703,8 @@ DCHECK(!item_result->can_break_after); const NGInlineItemResults& item_results = line_info->Results(); if (UNLIKELY(!was_auto_wrap && auto_wrap_ && item_results.size() >= 2)) { - ComputeCanBreakAfter(std::prev(item_result), auto_wrap_, break_iterator_); + if (IsPreviousItemOfType(NGInlineItem::kText)) + ComputeCanBreakAfter(std::prev(item_result), auto_wrap_, break_iterator_); } } @@ -1691,29 +1733,15 @@ if (item_results.size() >= 2) { NGInlineItemResult* last = std::prev(item_result); if (was_auto_wrap || last->can_break_after) { - item_result->can_break_after = last->can_break_after; + item_result->can_break_after = + last->can_break_after || + IsBreakableSpace(Text()[item_result->EndOffset()]); last->can_break_after = false; return; } + if (auto_wrap_ && !IsBreakableSpace(Text()[item_result->EndOffset() - 1])) + ComputeCanBreakAfter(item_result, auto_wrap_, break_iterator_); } - if (was_auto_wrap) - return; - - DCHECK(!item_result->can_break_after); - if (!auto_wrap_) - return; - - // When auto-wrap follows no-wrap, the boundary is determined by the break - // iterator. However, when space characters follow the boundary, the break - // iterator cannot compute this because it considers break opportunities are - // before a run of spaces. - const String& text = Text(); - if (item_result->EndOffset() < text.length() && - IsBreakableSpace(text[item_result->EndOffset()])) { - item_result->can_break_after = true; - return; - } - ComputeCanBreakAfter(item_result, auto_wrap_, break_iterator_); } // Handles when the last item overflows. @@ -2149,6 +2177,10 @@ spacing_.SetSpacing(style.GetFont()); } +bool NGLineBreaker::IsPreviousItemOfType(NGInlineItem::NGInlineItemType type) { + return item_index_ > 0 ? Items().at(item_index_ - 1).Type() == type : false; +} + void NGLineBreaker::MoveToNextOf(const NGInlineItem& item) { offset_ = item.EndOffset(); item_index_++;
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h index a9e40ebc..47dc71d3 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h
@@ -194,6 +194,7 @@ NGLineInfo*) const; void SetCurrentStyle(const ComputedStyle&); + bool IsPreviousItemOfType(NGInlineItem::NGInlineItemType); void MoveToNextOf(const NGInlineItem&); void MoveToNextOf(const NGInlineItemResult&);
diff --git a/third_party/blink/renderer/core/layout/ng/layout_ng_fieldset.cc b/third_party/blink/renderer/core/layout/ng/layout_ng_fieldset.cc index 0e41da7..af15c505 100644 --- a/third_party/blink/renderer/core/layout/ng/layout_ng_fieldset.cc +++ b/third_party/blink/renderer/core/layout/ng/layout_ng_fieldset.cc
@@ -140,6 +140,29 @@ return LayoutBlockFlow::BackgroundIsKnownToBeOpaqueInRect(local_rect); } +bool LayoutNGFieldset::HitTestChildren(HitTestResult& result, + const HitTestLocation& hit_test_location, + const PhysicalOffset& accumulated_offset, + HitTestAction hit_test_action) { + if (LayoutNGBlockFlow::HitTestChildren(result, hit_test_location, + accumulated_offset, hit_test_action)) + return true; + + DCHECK(!RuntimeEnabledFeatures::LayoutNGFragmentTraversalEnabled()); + LayoutBox* legend = LayoutFieldset::FindInFlowLegend(*this); + if (!legend || legend->HasSelfPaintingLayer() || legend->IsColumnSpanAll()) + return false; + if (legend->NodeAtPoint(result, hit_test_location, + legend->PhysicalLocation(this), + hit_test_action == kHitTestChildBlockBackgrounds + ? kHitTestChildBlockBackground + : hit_test_action)) { + UpdateHitTestResult(result, hit_test_location.Point() - accumulated_offset); + return true; + } + return false; +} + LayoutUnit LayoutNGFieldset::ScrollWidth() const { const LayoutObject* child = FirstChild(); if (child && child->IsAnonymous())
diff --git a/third_party/blink/renderer/core/layout/ng/layout_ng_fieldset.h b/third_party/blink/renderer/core/layout/ng/layout_ng_fieldset.h index 2f71b28..78004f8 100644 --- a/third_party/blink/renderer/core/layout/ng/layout_ng_fieldset.h +++ b/third_party/blink/renderer/core/layout/ng/layout_ng_fieldset.h
@@ -27,6 +27,10 @@ ComputedStyle& child_style) const override; void InvalidatePaint(const PaintInvalidatorContext& context) const final; bool BackgroundIsKnownToBeOpaqueInRect(const PhysicalRect&) const override; + bool HitTestChildren(HitTestResult& result, + const HitTestLocation& hit_test_location, + const PhysicalOffset& accumulated_offset, + HitTestAction hit_test_action) override; bool AllowsNonVisibleOverflow() const override { return false; } // Override to forward to the anonymous fieldset content box.
diff --git a/third_party/blink/renderer/core/layout/scrollbars_test.cc b/third_party/blink/renderer/core/layout/scrollbars_test.cc index 1b45586..0218be4 100644 --- a/third_party/blink/renderer/core/layout/scrollbars_test.cc +++ b/third_party/blink/renderer/core/layout/scrollbars_test.cc
@@ -3084,12 +3084,32 @@ #always_both { scrollbar-gutter: always both; } + #stable_force { + overflow: visible; + scrollbar-gutter: stable force; + } + #stable_both_force { + overflow: hidden; + scrollbar-gutter: stable both force; + } + #always_force { + overflow: visible; + scrollbar-gutter: always force; + } + #always_both_force { + overflow: hidden; + scrollbar-gutter: always both force; + } </style> <div id="auto"></div> <div id="stable"></div> <div id="stable_both"></div> <div id="always"></div> <div id="always_both"></div> + <div id="stable_force"></div> + <div id="stable_both_force"></div> + <div id="always_force"></div> + <div id="always_both_force"></div> )HTML"); Compositor().BeginFrame(); auto* auto_ = GetDocument().getElementById("auto"); @@ -3143,6 +3163,34 @@ EXPECT_EQ(box_always_both_scrollbars.bottom, 0); EXPECT_EQ(box_always_both_scrollbars.left, 15); EXPECT_EQ(box_always_both_scrollbars.right, 15); + + auto* stable_force = GetDocument().getElementById("stable_force"); + LayoutBox* box_stable_force = ToLayoutBox(stable_force->GetLayoutObject()); + EXPECT_EQ(box_stable_force->OffsetWidth(), 100); + EXPECT_EQ(box_stable_force->ClientWidth(), 85); + EXPECT_EQ(box_stable_force->ComputeScrollbars(), box_stable_scrollbars); + + auto* stable_both_force = GetDocument().getElementById("stable_both_force"); + LayoutBox* box_stable_both_force = + ToLayoutBox(stable_both_force->GetLayoutObject()); + EXPECT_EQ(box_stable_both_force->OffsetWidth(), 100); + EXPECT_EQ(box_stable_both_force->ClientWidth(), 70); + EXPECT_EQ(box_stable_both_force->ComputeScrollbars(), + box_stable_both_scrollbars); + + auto* always_force = GetDocument().getElementById("always_force"); + LayoutBox* box_always_force = ToLayoutBox(always_force->GetLayoutObject()); + EXPECT_EQ(box_always_force->OffsetWidth(), 100); + EXPECT_EQ(box_always_force->ClientWidth(), 85); + EXPECT_EQ(box_always_force->ComputeScrollbars(), box_always_scrollbars); + + auto* always_both_force = GetDocument().getElementById("always_both_force"); + LayoutBox* box_always_both_force = + ToLayoutBox(always_both_force->GetLayoutObject()); + EXPECT_EQ(box_always_both_force->OffsetWidth(), 100); + EXPECT_EQ(box_always_both_force->ClientWidth(), 70); + EXPECT_EQ(box_always_both_force->ComputeScrollbars(), + box_always_both_scrollbars); } // Test scrollbar-gutter values with classic scrollbars and vertical-rl text. @@ -3177,12 +3225,32 @@ #always_both { scrollbar-gutter: always both; } + #stable_force { + overflow: hidden; + scrollbar-gutter: stable force; + } + #stable_both_force { + overflow: visible; + scrollbar-gutter: stable both force; + } + #always_force { + overflow: hidden; + scrollbar-gutter: always force; + } + #always_both_force { + overflow: visible; + scrollbar-gutter: always both force; + } </style> <div id="auto"></div> <div id="stable"></div> <div id="stable_both"></div> <div id="always"></div> <div id="always_both"></div> + <div id="stable_force"></div> + <div id="stable_both_force"></div> + <div id="always_force"></div> + <div id="always_both_force"></div> )HTML"); Compositor().BeginFrame(); auto* auto_ = GetDocument().getElementById("auto"); @@ -3236,6 +3304,34 @@ EXPECT_EQ(box_always_both_scrollbars.bottom, 15); EXPECT_EQ(box_always_both_scrollbars.left, 0); EXPECT_EQ(box_always_both_scrollbars.right, 0); + + auto* stable_force = GetDocument().getElementById("stable_force"); + LayoutBox* box_stable_force = ToLayoutBox(stable_force->GetLayoutObject()); + EXPECT_EQ(box_stable_force->OffsetHeight(), 100); + EXPECT_EQ(box_stable_force->ClientHeight(), 85); + EXPECT_EQ(box_stable_force->ComputeScrollbars(), box_stable_scrollbars); + + auto* stable_both_force = GetDocument().getElementById("stable_both_force"); + LayoutBox* box_stable_both_force = + ToLayoutBox(stable_both_force->GetLayoutObject()); + EXPECT_EQ(box_stable_both_force->OffsetHeight(), 100); + EXPECT_EQ(box_stable_both_force->ClientHeight(), 70); + EXPECT_EQ(box_stable_both_force->ComputeScrollbars(), + box_stable_both_scrollbars); + + auto* always_force = GetDocument().getElementById("always_force"); + LayoutBox* box_always_force = ToLayoutBox(always_force->GetLayoutObject()); + EXPECT_EQ(box_always_force->OffsetHeight(), 100); + EXPECT_EQ(box_always_force->ClientHeight(), 85); + EXPECT_EQ(box_always_force->ComputeScrollbars(), box_always_scrollbars); + + auto* always_both_force = GetDocument().getElementById("always_both_force"); + LayoutBox* box_always_both_force = + ToLayoutBox(always_both_force->GetLayoutObject()); + EXPECT_EQ(box_always_both_force->OffsetHeight(), 100); + EXPECT_EQ(box_always_both_force->ClientHeight(), 70); + EXPECT_EQ(box_always_both_force->ComputeScrollbars(), + box_always_both_scrollbars); } // Test scrollbar-gutter values with overlay scrollbars and horizontal-tb text. @@ -3271,12 +3367,32 @@ #always_both { scrollbar-gutter: always both; } + #stable_force { + overflow: hidden; + scrollbar-gutter: stable force; + } + #stable_both_force { + overflow: visible; + scrollbar-gutter: stable both force; + } + #always_force { + overflow: hidden; + scrollbar-gutter: always force; + } + #always_both_force { + overflow: visible; + scrollbar-gutter: always both force; + } </style> <div id="auto"></div> <div id="stable"></div> <div id="stable_both"></div> <div id="always"></div> <div id="always_both"></div> + <div id="stable_force"></div> + <div id="stable_both_force"></div> + <div id="always_force"></div> + <div id="always_both_force"></div> )HTML"); Compositor().BeginFrame(); auto* auto_ = GetDocument().getElementById("auto"); @@ -3335,6 +3451,35 @@ // scrollbar gutters EXPECT_GT(box_always_both_scrollbars.left, 0); EXPECT_GT(box_always_both_scrollbars.right, 0); + + auto* stable_force = GetDocument().getElementById("stable_force"); + LayoutBox* box_stable_force = ToLayoutBox(stable_force->GetLayoutObject()); + EXPECT_EQ(box_stable_force->OffsetWidth(), 100); + EXPECT_EQ(box_stable_force->ClientWidth(), 100); + EXPECT_EQ(box_stable_force->ComputeScrollbars(), box_stable_scrollbars); + + auto* stable_both_force = GetDocument().getElementById("stable_both_force"); + LayoutBox* box_stable_both_force = + ToLayoutBox(stable_both_force->GetLayoutObject()); + EXPECT_EQ(box_stable_both_force->OffsetWidth(), 100); + EXPECT_EQ(box_stable_both_force->ClientWidth(), 100); + EXPECT_EQ(box_stable_both_force->ComputeScrollbars(), + box_stable_both_scrollbars); + + auto* always_force = GetDocument().getElementById("always_force"); + LayoutBox* box_always_force = ToLayoutBox(always_force->GetLayoutObject()); + EXPECT_EQ(box_always_force->OffsetWidth(), 100); + EXPECT_LT(box_always_force->ClientWidth(), box_auto->ClientWidth()); + EXPECT_EQ(box_always_force->ComputeScrollbars(), box_always_scrollbars); + + auto* always_both_force = GetDocument().getElementById("always_both_force"); + LayoutBox* box_always_both_force = + ToLayoutBox(always_both_force->GetLayoutObject()); + EXPECT_EQ(box_always_both_force->OffsetWidth(), 100); + EXPECT_LT(box_always_both_force->ClientWidth(), + box_always_force->ClientWidth()); + EXPECT_EQ(box_always_both_force->ComputeScrollbars(), + box_always_both_scrollbars); } // Test scrollbar-gutter values with overlay scrollbars and vertical-rl text. @@ -3370,12 +3515,32 @@ #always_both { scrollbar-gutter: always both; } + #stable_force { + overflow: visible; + scrollbar-gutter: stable force; + } + #stable_both_force { + overflow: hidden; + scrollbar-gutter: stable both force; + } + #always_force { + overflow: visible; + scrollbar-gutter: always force; + } + #always_both_force { + overflow: hidden; + scrollbar-gutter: always both force; + } </style> <div id="auto"></div> <div id="stable"></div> <div id="stable_both"></div> <div id="always"></div> <div id="always_both"></div> + <div id="stable_force"></div> + <div id="stable_both_force"></div> + <div id="always_force"></div> + <div id="always_both_force"></div> )HTML"); Compositor().BeginFrame(); auto* auto_ = GetDocument().getElementById("auto"); @@ -3431,6 +3596,36 @@ EXPECT_GT(box_always_both_scrollbars.bottom, 0); EXPECT_EQ(box_always_both_scrollbars.left, 0); EXPECT_EQ(box_always_both_scrollbars.right, 0); + + auto* stable_force = GetDocument().getElementById("stable_force"); + LayoutBox* box_stable_force = ToLayoutBox(stable_force->GetLayoutObject()); + EXPECT_EQ(box_stable_force->OffsetHeight(), 100); + EXPECT_EQ(box_stable_force->ClientHeight(), 100); + EXPECT_EQ(box_stable_force->ComputeScrollbars(), box_stable_scrollbars); + + auto* stable_both_force = GetDocument().getElementById("stable_both_force"); + LayoutBox* box_stable_both_force = + ToLayoutBox(stable_both_force->GetLayoutObject()); + EXPECT_EQ(box_stable_both_force->OffsetHeight(), 100); + EXPECT_EQ(box_stable_both_force->ClientHeight(), 100); + EXPECT_EQ(box_stable_both_force->ComputeScrollbars(), + box_stable_both_scrollbars); + + // TODO this fails because overflow is "visible" + auto* always_force = GetDocument().getElementById("always_force"); + LayoutBox* box_always_force = ToLayoutBox(always_force->GetLayoutObject()); + EXPECT_EQ(box_always_force->OffsetHeight(), 100); + EXPECT_LT(box_always_force->ClientHeight(), box_auto->ClientHeight()); + EXPECT_EQ(box_always_force->ComputeScrollbars(), box_always_scrollbars); + + auto* always_both_force = GetDocument().getElementById("always_both_force"); + LayoutBox* box_always_both_force = + ToLayoutBox(always_both_force->GetLayoutObject()); + EXPECT_EQ(box_always_both_force->OffsetHeight(), 100); + EXPECT_LT(box_always_both_force->ClientHeight(), + box_always_force->ClientHeight()); + EXPECT_EQ(box_always_both_force->ComputeScrollbars(), + box_always_both_scrollbars); } } // namespace blink
diff --git a/third_party/blink/renderer/core/page/DEPS b/third_party/blink/renderer/core/page/DEPS index 1ddb8e26..3799876 100644 --- a/third_party/blink/renderer/core/page/DEPS +++ b/third_party/blink/renderer/core/page/DEPS
@@ -7,7 +7,4 @@ "chrome_client_impl_test\.cc": [ "+base/run_loop.h", ], - "text_fragment_selector_generator_test\.cc": [ - "+base/run_loop.h", - ], }
diff --git a/third_party/blink/renderer/core/page/context_menu_controller.cc b/third_party/blink/renderer/core/page/context_menu_controller.cc index dc69a0c..34bae4f 100644 --- a/third_party/blink/renderer/core/page/context_menu_controller.cc +++ b/third_party/blink/renderer/core/page/context_menu_controller.cc
@@ -524,14 +524,11 @@ void ContextMenuController::UpdateTextFragmentSelectorGenerator( LocalFrame* selected_frame) { - if (!selected_frame->GetTextFragmentSelectorGenerator()) - return; - VisibleSelectionInFlatTree selection = selected_frame->Selection().ComputeVisibleSelectionInFlatTree(); EphemeralRangeInFlatTree selection_range(selection.Start(), selection.End()); - selected_frame->GetTextFragmentSelectorGenerator()->UpdateSelection( - selected_frame, selection_range); + page_->GetTextFragmentSelectorGenerator().UpdateSelection(selected_frame, + selection_range); } } // namespace blink
diff --git a/third_party/blink/renderer/core/page/page.cc b/third_party/blink/renderer/core/page/page.cc index 97cb430..4acfdcfa 100644 --- a/third_party/blink/renderer/core/page/page.cc +++ b/third_party/blink/renderer/core/page/page.cc
@@ -75,6 +75,7 @@ #include "third_party/blink/renderer/core/page/scoped_page_pauser.h" #include "third_party/blink/renderer/core/page/scrolling/overscroll_controller.h" #include "third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.h" +#include "third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.h" #include "third_party/blink/renderer/core/page/scrolling/top_document_root_scroller_controller.h" #include "third_party/blink/renderer/core/page/spatial_navigation_controller.h" #include "third_party/blink/renderer/core/page/validation_message_client_impl.h" @@ -225,7 +226,9 @@ next_related_page_(this), prev_related_page_(this), autoplay_flags_(0), - web_text_autosizer_page_info_({0, 0, 1.f}) { + web_text_autosizer_page_info_({0, 0, 1.f}), + text_fragment_selector_generator_( + MakeGarbageCollected<TextFragmentSelectorGenerator>()) { DCHECK(!AllPages().Contains(this)); AllPages().insert(this); @@ -340,6 +343,7 @@ void Page::DocumentDetached(Document* document) { pointer_lock_controller_->DocumentDetached(document); + text_fragment_selector_generator_->DocumentDetached(document); context_menu_controller_->DocumentDetached(document); if (validation_message_client_) validation_message_client_->DocumentDetached(*document); @@ -917,6 +921,7 @@ visitor->Trace(plugins_changed_observers_); visitor->Trace(next_related_page_); visitor->Trace(prev_related_page_); + visitor->Trace(text_fragment_selector_generator_); Supplementable<Page>::Trace(visitor); }
diff --git a/third_party/blink/renderer/core/page/page.h b/third_party/blink/renderer/core/page/page.h index 4e4e496..b6a1caa 100644 --- a/third_party/blink/renderer/core/page/page.h +++ b/third_party/blink/renderer/core/page/page.h
@@ -76,6 +76,7 @@ class PluginData; class PluginsChangedObserver; class PointerLockController; +class TextFragmentSelectorGenerator; class ScopedPagePauser; class ScrollingCoordinator; class ScrollbarTheme; @@ -376,6 +377,10 @@ static void PrepareForLeakDetection(); + TextFragmentSelectorGenerator& GetTextFragmentSelectorGenerator() const { + return *text_fragment_selector_generator_; + } + private: friend class ScopedPagePauser; @@ -497,6 +502,8 @@ WebScopedVirtualTimePauser history_navigation_virtual_time_pauser_; + const Member<TextFragmentSelectorGenerator> text_fragment_selector_generator_; + DISALLOW_COPY_AND_ASSIGN(Page); };
diff --git a/third_party/blink/renderer/core/page/scrolling/text_fragment_selector.cc b/third_party/blink/renderer/core/page/scrolling/text_fragment_selector.cc index 787fb1b..42c93d9 100644 --- a/third_party/blink/renderer/core/page/scrolling/text_fragment_selector.cc +++ b/third_party/blink/renderer/core/page/scrolling/text_fragment_selector.cc
@@ -4,7 +4,6 @@ #include "third_party/blink/renderer/core/page/scrolling/text_fragment_selector.h" #include "third_party/blink/renderer/platform/weborigin/kurl.h" -#include "third_party/blink/renderer/platform/wtf/text/string_builder.h" namespace blink { @@ -82,28 +81,4 @@ TextFragmentSelector::TextFragmentSelector(SelectorType type) : type_(type) {} -String TextFragmentSelector::ToString() const { - StringBuilder selector; - if (!prefix_.IsEmpty()) { - selector.Append(EncodeWithURLEscapeSequences(prefix_)); - selector.Append("-,"); - } - - if (!start_.IsEmpty()) { - selector.Append(EncodeWithURLEscapeSequences(start_)); - } - - if (!end_.IsEmpty()) { - selector.Append(","); - selector.Append(EncodeWithURLEscapeSequences(end_)); - } - - if (!suffix_.IsEmpty()) { - selector.Append(",-"); - selector.Append(EncodeWithURLEscapeSequences(suffix_)); - } - - return selector.ToString(); -} - } // namespace blink
diff --git a/third_party/blink/renderer/core/page/scrolling/text_fragment_selector.h b/third_party/blink/renderer/core/page/scrolling/text_fragment_selector.h index 3161748..06013500 100644 --- a/third_party/blink/renderer/core/page/scrolling/text_fragment_selector.h +++ b/third_party/blink/renderer/core/page/scrolling/text_fragment_selector.h
@@ -34,11 +34,10 @@ ~TextFragmentSelector() = default; SelectorType Type() const { return type_; } - const String& Start() const { return start_; } - const String& End() const { return end_; } - const String& Prefix() const { return prefix_; } - const String& Suffix() const { return suffix_; } - String ToString() const; + String Start() const { return start_; } + String End() const { return end_; } + String Prefix() const { return prefix_; } + String Suffix() const { return suffix_; } private: const SelectorType type_;
diff --git a/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.cc b/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.cc index bcecdb3..5164e55 100644 --- a/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.cc +++ b/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.cc
@@ -4,8 +4,6 @@ #include "third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.h" -#include "third_party/blink/public/common/browser_interface_broker_proxy.h" -#include "third_party/blink/public/platform/interface_registry.h" #include "third_party/blink/renderer/core/editing/ephemeral_range.h" #include "third_party/blink/renderer/core/editing/finder/find_buffer.h" #include "third_party/blink/renderer/core/editing/iterators/text_iterator.h" @@ -20,11 +18,6 @@ void TextFragmentSelectorGenerator::UpdateSelection( LocalFrame* selection_frame, const EphemeralRangeInFlatTree& selection_range) { - DCHECK(selection_frame); - - // Scroll-to-text doesn't support iframes. - DCHECK(selection_frame->IsMainFrame()); - selection_frame_ = selection_frame; selection_range_ = MakeGarbageCollected<Range>( selection_range.GetDocument(), @@ -32,21 +25,7 @@ ToPositionInDOMTree(selection_range.EndPosition())); } -void TextFragmentSelectorGenerator::BindTextFragmentSelectorProducer( - mojo::PendingReceiver<mojom::blink::TextFragmentSelectorProducer> - producer) { - selector_producer_.reset(); - selector_producer_.Bind( - std::move(producer), - selection_frame_->GetTaskRunner(blink::TaskType::kInternalDefault)); -} - -void TextFragmentSelectorGenerator::GenerateSelector( - GenerateSelectorCallback callback) { - DCHECK(selection_range_); - DCHECK(callback); - - pending_generate_selector_callback_ = std::move(callback); +void TextFragmentSelectorGenerator::GenerateSelector() { EphemeralRangeInFlatTree ephemeral_range(selection_range_); const TextFragmentSelector kInvalidSelector( @@ -59,10 +38,8 @@ FindBuffer::GetFirstBlockLevelAncestorInclusive( *ephemeral_range.EndPosition().AnchorNode()); - if (!start_first_block_ancestor.isSameNode(&end_first_block_ancestor)) { + if (!start_first_block_ancestor.isSameNode(&end_first_block_ancestor)) NotifySelectorReady(kInvalidSelector); - return; - } // TODO(gayane): If same node, need to check if start and end are interrupted // by a block. Example: <div>start of the selection <div> sub block </div>end @@ -73,10 +50,8 @@ String selected_text = PlainText(ephemeral_range); if (selected_text.length() < kNoContextMinChars || - selected_text.length() > kExactTextMaxChars) { + selected_text.length() > kExactTextMaxChars) NotifySelectorReady(kInvalidSelector); - return; - } selector_ = std::make_unique<TextFragmentSelector>( TextFragmentSelector::SelectorType::kExact, selected_text, "", "", ""); @@ -97,14 +72,19 @@ } } -void TextFragmentSelectorGenerator::NotifySelectorReady( - const TextFragmentSelector& selector) { - DCHECK(pending_generate_selector_callback_); - std::move(pending_generate_selector_callback_).Run(selector.ToString()); +void TextFragmentSelectorGenerator::SetCallbackForTesting( + base::OnceCallback<void(const TextFragmentSelector&)> callback) { + callback_for_tests_ = std::move(callback); } -void TextFragmentSelectorGenerator::ClearSelection() { - if (selection_range_) { +void TextFragmentSelectorGenerator::NotifySelectorReady( + const TextFragmentSelector& selector) { + if (!callback_for_tests_.is_null()) + std::move(callback_for_tests_).Run(selector); +} + +void TextFragmentSelectorGenerator::DocumentDetached(Document* document) { + if (selection_range_ && selection_range_->OwnerDocument() == *document) { selection_range_->Dispose(); selection_range_ = nullptr; selection_frame_ = nullptr; @@ -114,7 +94,6 @@ void TextFragmentSelectorGenerator::Trace(Visitor* visitor) const { visitor->Trace(selection_frame_); visitor->Trace(selection_range_); - visitor->Trace(selector_producer_); } } // namespace blink
diff --git a/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.h b/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.h index a0de513..18220769 100644 --- a/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.h +++ b/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.h
@@ -5,11 +5,9 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_PAGE_SCROLLING_TEXT_FRAGMENT_SELECTOR_GENERATOR_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_PAGE_SCROLLING_TEXT_FRAGMENT_SELECTOR_GENERATOR_H_ -#include "third_party/blink/public/mojom/link_to_text/link_to_text.mojom-blink.h" #include "third_party/blink/renderer/core/editing/forward.h" #include "third_party/blink/renderer/core/page/scrolling/text_fragment_finder.h" #include "third_party/blink/renderer/core/page/scrolling/text_fragment_selector.h" -#include "third_party/blink/renderer/platform/mojo/heap_mojo_receiver.h" namespace blink { @@ -23,33 +21,30 @@ // triggered when users request "link to text" for the selected text. class CORE_EXPORT TextFragmentSelectorGenerator final : public GarbageCollected<TextFragmentSelectorGenerator>, - public TextFragmentFinder::Client, - public blink::mojom::blink::TextFragmentSelectorProducer { + public TextFragmentFinder::Client { public: explicit TextFragmentSelectorGenerator() = default; - void BindTextFragmentSelectorProducer( - mojo::PendingReceiver<mojom::blink::TextFragmentSelectorProducer> - producer); - // Sets the frame and range of the current selection. void UpdateSelection(LocalFrame* selection_frame, const EphemeralRangeInFlatTree& selection_range); - // blink::mojom::blink::TextFragmentSelectorProducer interface // Generates selector for current selection. - void GenerateSelector(GenerateSelectorCallback callback) override; + void GenerateSelector(); // TextFragmentFinder::Client interface void DidFindMatch(const EphemeralRangeInFlatTree& match, const TextFragmentAnchorMetrics::Match match_metrics, bool is_unique) override; + // Sets the callback used for notifying test results of |GenerateSelector|. + void SetCallbackForTesting( + base::OnceCallback<void(const TextFragmentSelector&)> callback); + // Notifies the results of |GenerateSelector|. void NotifySelectorReady(const TextFragmentSelector& selector); - // Releases members if necessary. - void ClearSelection(); + void DocumentDetached(Document* document); void Trace(Visitor*) const; @@ -58,12 +53,7 @@ Member<Range> selection_range_; std::unique_ptr<TextFragmentSelector> selector_; - // Used for communication between |TextFragmentSelectorGenerator| in renderer - // and |TextFragmentSelectorClientImpl| in browser. - HeapMojoReceiver<blink::mojom::blink::TextFragmentSelectorProducer, - TextFragmentSelectorGenerator> - selector_producer_{this, nullptr}; - GenerateSelectorCallback pending_generate_selector_callback_; + base::OnceCallback<void(const TextFragmentSelector&)> callback_for_tests_; DISALLOW_COPY_AND_ASSIGN(TextFragmentSelectorGenerator); };
diff --git a/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator_test.cc b/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator_test.cc index 4a3e33c..ddb466f7 100644 --- a/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator_test.cc +++ b/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator_test.cc
@@ -6,14 +6,8 @@ #include <gtest/gtest.h> -#include "base/run_loop.h" #include "base/test/bind_test_util.h" -#include "mojo/public/cpp/bindings/receiver_set.h" -#include "third_party/blink/public/common/browser_interface_broker_proxy.h" -#include "third_party/blink/public/mojom/link_to_text/link_to_text.mojom-blink.h" #include "third_party/blink/renderer/core/editing/ephemeral_range.h" -#include "third_party/blink/renderer/core/frame/local_frame.h" -#include "third_party/blink/renderer/core/html/html_iframe_element.h" #include "third_party/blink/renderer/core/testing/sim/sim_request.h" #include "third_party/blink/renderer/core/testing/sim/sim_test.h" @@ -25,33 +19,6 @@ SimTest::SetUp(); WebView().MainFrameWidget()->Resize(WebSize(800, 600)); } - - void GenerateAndVerifySelector(Position selected_start, - Position selected_end, - String expected_selector) { - GetDocument() - .GetFrame() - ->GetTextFragmentSelectorGenerator() - ->UpdateSelection(GetDocument().GetFrame(), - ToEphemeralRangeInFlatTree( - EphemeralRange(selected_start, selected_end))); - - bool callback_called = false; - auto lambda = [](bool& callback_called, const String& expected_selector, - const String& selector) { - EXPECT_EQ(selector, expected_selector); - callback_called = true; - }; - auto callback = - WTF::Bind(lambda, std::ref(callback_called), expected_selector); - GetDocument() - .GetFrame() - ->GetTextFragmentSelectorGenerator() - ->GenerateSelector(std::move(callback)); - base::RunLoop().RunUntilIdle(); - - EXPECT_TRUE(callback_called); - } }; TEST_F(TextFragmentSelectorGeneratorTest, ExactTextSelector) { @@ -66,9 +33,22 @@ Node* first_paragraph = GetDocument().getElementById("first")->firstChild(); const auto& selected_start = Position(first_paragraph, 0); const auto& selected_end = Position(first_paragraph, 28); + bool callback_called = false; + base::OnceCallback<void(const TextFragmentSelector&)> callback = + base::BindLambdaForTesting([&](const TextFragmentSelector& selector) { + EXPECT_EQ(selector.Type(), TextFragmentSelector::SelectorType::kExact); + EXPECT_EQ(selector.Start(), "First paragraph text that is"); + callback_called = true; + }); - GenerateAndVerifySelector(selected_start, selected_end, - "First%20paragraph%20text%20that%20is"); + TextFragmentSelectorGenerator generator; + generator.UpdateSelection( + GetDocument().GetFrame(), + ToEphemeralRangeInFlatTree(EphemeralRange(selected_start, selected_end))); + generator.SetCallbackForTesting(std::move(callback)); + generator.GenerateSelector(); + + EXPECT_TRUE(callback_called); } TEST_F(TextFragmentSelectorGeneratorTest, ExactTextWithNestedTextNodes) { @@ -84,9 +64,22 @@ const auto& selected_start = Position(first_paragraph->firstChild(), 0); const auto& selected_end = Position(first_paragraph->firstChild()->nextSibling()->firstChild(), 6); + bool callback_called = false; + base::OnceCallback<void(const TextFragmentSelector&)> callback = + base::BindLambdaForTesting([&](const TextFragmentSelector& selector) { + EXPECT_EQ(selector.Type(), TextFragmentSelector::SelectorType::kExact); + EXPECT_EQ(selector.Start(), "First paragraph text that is longer"); + callback_called = true; + }); - GenerateAndVerifySelector(selected_start, selected_end, - "First%20paragraph%20text%20that%20is%20longer"); + TextFragmentSelectorGenerator generator; + generator.UpdateSelection( + GetDocument().GetFrame(), + ToEphemeralRangeInFlatTree(EphemeralRange(selected_start, selected_end))); + generator.SetCallbackForTesting(std::move(callback)); + generator.GenerateSelector(); + + EXPECT_TRUE(callback_called); } TEST_F(TextFragmentSelectorGeneratorTest, ExactTextWithExtraSpace) { @@ -101,9 +94,22 @@ Node* second_paragraph = GetDocument().getElementById("second")->firstChild(); const auto& selected_start = Position(second_paragraph, 0); const auto& selected_end = Position(second_paragraph, 23); + bool callback_called = false; + base::OnceCallback<void(const TextFragmentSelector&)> callback = + base::BindLambdaForTesting([&](const TextFragmentSelector& selector) { + EXPECT_EQ(selector.Type(), TextFragmentSelector::SelectorType::kExact); + EXPECT_EQ(selector.Start(), "Second paragraph text"); + callback_called = true; + }); - GenerateAndVerifySelector(selected_start, selected_end, - "Second%20paragraph%20text"); + TextFragmentSelectorGenerator generator; + generator.UpdateSelection( + GetDocument().GetFrame(), + ToEphemeralRangeInFlatTree(EphemeralRange(selected_start, selected_end))); + generator.SetCallbackForTesting(std::move(callback)); + generator.GenerateSelector(); + + EXPECT_TRUE(callback_called); } // Multi-block selection is currently not implemented. @@ -120,8 +126,22 @@ Node* second_paragraph = GetDocument().getElementById("second")->firstChild(); const auto& selected_start = Position(first_paragraph, 0); const auto& selected_end = Position(second_paragraph, 6); + bool callback_called = false; + base::OnceCallback<void(const TextFragmentSelector&)> callback = + base::BindLambdaForTesting([&](const TextFragmentSelector& selector) { + EXPECT_EQ(selector.Type(), + TextFragmentSelector::SelectorType::kInvalid); + callback_called = true; + }); - GenerateAndVerifySelector(selected_start, selected_end, ""); + TextFragmentSelectorGenerator generator; + generator.UpdateSelection( + GetDocument().GetFrame(), + ToEphemeralRangeInFlatTree(EphemeralRange(selected_start, selected_end))); + generator.SetCallbackForTesting(std::move(callback)); + generator.GenerateSelector(); + + EXPECT_TRUE(callback_called); } } // namespace blink
diff --git a/third_party/blink/renderer/core/paint/paint_layer.cc b/third_party/blink/renderer/core/paint/paint_layer.cc index 070819e..b5f2b0c 100644 --- a/third_party/blink/renderer/core/paint/paint_layer.cc +++ b/third_party/blink/renderer/core/paint/paint_layer.cc
@@ -1566,6 +1566,10 @@ // PaintLayerScrollableArea. if (GetLayoutBox()->CanResize()) return true; + // When scrollbar-gutter is "force" we need a PaintLayerScrollableArea + // in order to calculate the size of scrollbar gutters. + if (GetLayoutObject().StyleRef().ScrollbarGutterIsForce()) + return true; return false; }
diff --git a/third_party/blink/renderer/core/svg/animation/svg_smil_element.cc b/third_party/blink/renderer/core/svg/animation/svg_smil_element.cc index d57568a..19054fc 100644 --- a/third_party/blink/renderer/core/svg/animation/svg_smil_element.cc +++ b/third_party/blink/renderer/core/svg/animation/svg_smil_element.cc
@@ -1174,6 +1174,16 @@ } } +void SVGSMILElement::AddedEventListener( + const AtomicString& event_type, + RegisteredEventListener& registered_listener) { + SVGElement::AddedEventListener(event_type, registered_listener); + if (event_type == "repeatn") { + UseCounter::Count(GetDocument(), + WebFeature::kSMILElementHasRepeatNEventListener); + } +} + void SVGSMILElement::UpdateProgressState(SMILTime presentation_time) { last_progress_ = CalculateProgressState(presentation_time); }
diff --git a/third_party/blink/renderer/core/svg/animation/svg_smil_element.h b/third_party/blink/renderer/core/svg/animation/svg_smil_element.h index 1a57325..9758eb001 100644 --- a/third_party/blink/renderer/core/svg/animation/svg_smil_element.h +++ b/third_party/blink/renderer/core/svg/animation/svg_smil_element.h
@@ -168,6 +168,9 @@ private: bool IsPresentationAttribute(const QualifiedName&) const override; + void AddedEventListener(const AtomicString& event_type, + RegisteredEventListener&) final; + void BuildPendingResource() override; void ClearResourceAndEventBaseReferences(); void ClearConditions();
diff --git a/third_party/blink/renderer/core/svg/animation/svg_smil_element_test.cc b/third_party/blink/renderer/core/svg/animation/svg_smil_element_test.cc index 1681ce8..ad2f6d8 100644 --- a/third_party/blink/renderer/core/svg/animation/svg_smil_element_test.cc +++ b/third_party/blink/renderer/core/svg/animation/svg_smil_element_test.cc
@@ -5,6 +5,9 @@ #include "third_party/blink/renderer/core/svg/animation/svg_smil_element.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/blink/renderer/core/dom/document.h" +#include "third_party/blink/renderer/core/dom/events/native_event_listener.h" +#include "third_party/blink/renderer/core/testing/dummy_page_holder.h" namespace blink { @@ -116,6 +119,24 @@ EXPECT_EQ(list.NextAfter(SMILTime::FromSecondsD(6)), SMILTime::Unresolved()); } +class EmptyEventListener : public NativeEventListener { + public: + void Invoke(ExecutionContext*, Event*) override {} +}; + +TEST(SVGSMILElementTest, RepeatNEventListenerUseCounted) { + auto dummy_page_holder = std::make_unique<DummyPageHolder>(IntSize(800, 600)); + Document& document = dummy_page_holder->GetDocument(); + Page::InsertOrdinaryPageForTesting(&dummy_page_holder->GetPage()); + WebFeature feature = WebFeature::kSMILElementHasRepeatNEventListener; + EXPECT_FALSE(document.IsUseCounted(feature)); + document.documentElement()->setInnerHTML("<svg><set/></svg>"); + Element* set = document.QuerySelector("set"); + ASSERT_TRUE(set); + set->addEventListener("repeatn", MakeGarbageCollected<EmptyEventListener>()); + EXPECT_TRUE(document.IsUseCounted(feature)); +} + } // namespace } // namespace blink
diff --git a/third_party/blink/renderer/core/svg/svg_element.h b/third_party/blink/renderer/core/svg/svg_element.h index 6e866331..15c59efb 100644 --- a/third_party/blink/renderer/core/svg/svg_element.h +++ b/third_party/blink/renderer/core/svg/svg_element.h
@@ -261,7 +261,7 @@ bool HasFocusEventListeners() const; void AddedEventListener(const AtomicString& event_type, - RegisteredEventListener&) final; + RegisteredEventListener&) override; void RemovedEventListener(const AtomicString& event_type, const RegisteredEventListener&) final;
diff --git a/third_party/blink/renderer/modules/webmidi/midi_access_initializer.cc b/third_party/blink/renderer/modules/webmidi/midi_access_initializer.cc index 549b63ae..2da277e 100644 --- a/third_party/blink/renderer/modules/webmidi/midi_access_initializer.cc +++ b/third_party/blink/renderer/modules/webmidi/midi_access_initializer.cc
@@ -140,7 +140,8 @@ // See https://bit.ly/2S0zRAS for task types. scoped_refptr<base::SingleThreadTaskRunner> task_runner = GetExecutionContext()->GetTaskRunner(TaskType::kMiscPlatformAPI); - dispatcher_ = std::make_unique<MIDIDispatcher>(task_runner); + dispatcher_ = + std::make_unique<MIDIDispatcher>(task_runner, GetExecutionContext()); dispatcher_->SetClient(this); }
diff --git a/third_party/blink/renderer/modules/webmidi/midi_dispatcher.cc b/third_party/blink/renderer/modules/webmidi/midi_dispatcher.cc index a9aba08..e571700 100644 --- a/third_party/blink/renderer/modules/webmidi/midi_dispatcher.cc +++ b/third_party/blink/renderer/modules/webmidi/midi_dispatcher.cc
@@ -7,9 +7,11 @@ #include <utility> #include "mojo/public/cpp/bindings/pending_remote.h" +#include "third_party/blink/public/common/browser_interface_broker_proxy.h" #include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/web_string.h" +#include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/platform/heap/persistent.h" #include "third_party/blink/renderer/platform/wtf/functional.h" #include "third_party/blink/renderer/platform/wtf/std_lib_extras.h" @@ -24,10 +26,13 @@ } // namespace MIDIDispatcher::MIDIDispatcher( - scoped_refptr<base::SingleThreadTaskRunner> task_runner) + scoped_refptr<base::SingleThreadTaskRunner> task_runner, + ExecutionContext* execution_context) + // TODO(1049056): Now that this has ExecutionContext, generate task_runner + // here. : task_runner_(std::move(task_runner)) { TRACE_EVENT0("midi", "MIDIDispatcher::MIDIDispatcher"); - Platform::Current()->GetBrowserInterfaceBroker()->GetInterface( + execution_context->GetBrowserInterfaceBroker().GetInterface( midi_session_provider_.BindNewPipeAndPassReceiver(task_runner_)); midi_session_provider_->StartSession( midi_session_.BindNewPipeAndPassReceiver(),
diff --git a/third_party/blink/renderer/modules/webmidi/midi_dispatcher.h b/third_party/blink/renderer/modules/webmidi/midi_dispatcher.h index f3bedca..ee77862c 100644 --- a/third_party/blink/renderer/modules/webmidi/midi_dispatcher.h +++ b/third_party/blink/renderer/modules/webmidi/midi_dispatcher.h
@@ -8,6 +8,7 @@ #include "media/midi/midi_service.mojom-blink.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h" +#include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/platform/heap/handle.h" #include "third_party/blink/renderer/platform/wtf/vector.h" @@ -40,7 +41,8 @@ }; explicit MIDIDispatcher( - scoped_refptr<base::SingleThreadTaskRunner> task_runner); + scoped_refptr<base::SingleThreadTaskRunner> task_runner, + ExecutionContext* execution_context); ~MIDIDispatcher() override; void SetClient(Client* client) { client_ = client; } @@ -76,6 +78,8 @@ // TODO(toyoshim): Consider to have a per-process limit. size_t unacknowledged_bytes_sent_ = 0u; + // TODO(1049056): Now that MidiSession is passed an ExecutionContext use it to + // convert these to HeapMojo. mojo::Remote<midi::mojom::blink::MidiSession> midi_session_; mojo::Receiver<midi::mojom::blink::MidiSessionClient> receiver_{this};
diff --git a/third_party/blink/renderer/platform/bindings/v8_set_return_value.h b/third_party/blink/renderer/platform/bindings/v8_set_return_value.h index 58be6b8..5e183cd 100644 --- a/third_party/blink/renderer/platform/bindings/v8_set_return_value.h +++ b/third_party/blink/renderer/platform/bindings/v8_set_return_value.h
@@ -25,6 +25,8 @@ // depending on the return value type. struct V8ReturnValue { + STATIC_ONLY(V8ReturnValue); + // Support compile-time overload resolution by making each value have its own // type. @@ -44,6 +46,16 @@ // Returns the interface object of the given type. enum InterfaceObject { kInterfaceObject }; + + // Selects the appropriate creation context. + static v8::Local<v8::Object> CreationContext( + const v8::FunctionCallbackInfo<v8::Value>& info) { + return info.This(); + } + static v8::Local<v8::Object> CreationContext( + const v8::PropertyCallbackInfo<v8::Value>& info) { + return info.Holder(); + } }; // V8 handle types @@ -72,9 +84,9 @@ v8::Isolate* isolate, const v8::PropertyDescriptor& desc); -template <typename CallbackInfo> -void V8SetReturnValue(const CallbackInfo& info, - const v8::PropertyDescriptor& value) { +PLATFORM_EXPORT inline void V8SetReturnValue( + const v8::PropertyCallbackInfo<v8::Value>& info, + const v8::PropertyDescriptor& value) { info.GetReturnValue().Set( CreatePropertyDescriptorObject(info.GetIsolate(), value)); } @@ -120,9 +132,9 @@ info.GetReturnValue().SetNull(); } -template <typename CallbackInfo> -void V8SetReturnValue(const CallbackInfo& info, - NamedPropertyDeleterResult value) { +PLATFORM_EXPORT inline void V8SetReturnValue( + const v8::PropertyCallbackInfo<v8::Boolean>& info, + NamedPropertyDeleterResult value) { if (value == NamedPropertyDeleterResult::kDidNotIntercept) { // Do not set the return value to indicate that the request was not // intercepted. @@ -273,7 +285,8 @@ wrappable)) return; - info.GetReturnValue().Set(wrappable->Wrap(info.GetIsolate(), info.This())); + info.GetReturnValue().Set( + wrappable->Wrap(info.GetIsolate(), V8ReturnValue::CreationContext(info))); } template <typename CallbackInfo> @@ -286,7 +299,8 @@ wrappable)) return; - info.GetReturnValue().Set(wrappable->Wrap(info.GetIsolate(), info.This())); + info.GetReturnValue().Set( + wrappable->Wrap(info.GetIsolate(), V8ReturnValue::CreationContext(info))); } template <typename CallbackInfo> @@ -298,11 +312,13 @@ ScriptWrappable* wrappable = const_cast<ScriptWrappable*>(value); if (DOMDataStore::SetReturnValueFast(info.GetReturnValue(), wrappable, - info.This(), receiver)) { + V8ReturnValue::CreationContext(info), + receiver)) { return; } - info.GetReturnValue().Set(wrappable->Wrap(info.GetIsolate(), info.This())); + info.GetReturnValue().Set( + wrappable->Wrap(info.GetIsolate(), V8ReturnValue::CreationContext(info))); } template <typename CallbackInfo> @@ -311,11 +327,13 @@ const ScriptWrappable* receiver) { ScriptWrappable* wrappable = const_cast<ScriptWrappable*>(&value); if (DOMDataStore::SetReturnValueFast(info.GetReturnValue(), wrappable, - info.This(), receiver)) { + V8ReturnValue::CreationContext(info), + receiver)) { return; } - info.GetReturnValue().Set(wrappable->Wrap(info.GetIsolate(), info.This())); + info.GetReturnValue().Set( + wrappable->Wrap(info.GetIsolate(), V8ReturnValue::CreationContext(info))); } template <typename CallbackInfo>
diff --git a/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker.cc b/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker.cc index 859395b..c02a28f8 100644 --- a/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker.cc +++ b/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker.cc
@@ -66,6 +66,19 @@ CHECK_LE(offset, end); } +unsigned FindNonHangableEnd(const String& text, unsigned candidate) { + DCHECK_LT(candidate, text.length()); + DCHECK(IsBreakableSpace(text[candidate])); + + // Looking for the non-hangable run end + unsigned non_hangable_end = candidate; + while (non_hangable_end > 0) { + if (!IsBreakableSpace(text[--non_hangable_end])) + return non_hangable_end + 1; + } + return non_hangable_end; +} + } // namespace inline const String& ShapingLineBreaker::GetText() const { @@ -110,8 +123,11 @@ bool backwards) const { const String& text = GetText(); unsigned word_end = break_iterator_->NextBreakOpportunity(offset); + if (word_end != offset && IsBreakableSpace(text[word_end - 1])) + word_end = std::max(start, FindNonHangableEnd(text, word_end - 1)); if (word_end == offset) { - DCHECK_EQ(offset, break_iterator_->PreviousBreakOpportunity(offset, start)); + DCHECK(IsBreakableSpace(text[offset]) || + offset == break_iterator_->PreviousBreakOpportunity(offset, start)); return {word_end, false}; } unsigned previous_break_opportunity = @@ -119,6 +135,7 @@ unsigned word_start = previous_break_opportunity; // Skip the leading spaces of this word because the break iterator breaks // before spaces. + // TODO (jfernandez): This is no longer true, so we should remove this code. while (word_start < text.length() && LazyLineBreakIterator::IsBreakableSpace(text[word_start])) word_start++; @@ -134,8 +151,8 @@ ShapingLineBreaker::BreakOpportunity ShapingLineBreaker::PreviousBreakOpportunity(unsigned offset, unsigned start) const { + const String& text = GetText(); if (UNLIKELY(!IsSoftHyphenEnabled())) { - const String& text = GetText(); for (;; offset--) { offset = break_iterator_->PreviousBreakOpportunity(offset, start); if (offset <= start || offset >= text.length() || @@ -147,15 +164,24 @@ if (UNLIKELY(hyphenation_)) return Hyphenate(offset, start, true); - return {break_iterator_->PreviousBreakOpportunity(offset, start), false}; + // If the break opportunity is preceded by trailing spaces, find the + // end of non-hangable character (i.e., start of the space run). + unsigned break_offset = + break_iterator_->PreviousBreakOpportunity(offset, start); + unsigned non_hangable_run_end = + IsBreakableSpace(text[break_offset - 1]) + ? FindNonHangableEnd(text, break_offset - 1) + : break_offset; + + return {break_offset, non_hangable_run_end, false}; } ShapingLineBreaker::BreakOpportunity ShapingLineBreaker::NextBreakOpportunity( unsigned offset, unsigned start, unsigned len) const { + const String& text = GetText(); if (UNLIKELY(!IsSoftHyphenEnabled())) { - const String& text = GetText(); for (;; offset++) { offset = break_iterator_->NextBreakOpportunity(offset); if (offset >= text.length() || text[offset - 1] != kSoftHyphenCharacter) @@ -166,7 +192,16 @@ if (UNLIKELY(hyphenation_)) return Hyphenate(offset, start, false); - return {break_iterator_->NextBreakOpportunity(offset, len), false}; + // We should also find the beginning of the space run to find the + // end of non-hangable character (i.e., start of the space run), + // which may be useful to avoid reshaping. + unsigned break_offset = break_iterator_->NextBreakOpportunity(offset, len); + unsigned non_hangable_run_end = + IsBreakableSpace(text[break_offset - 1]) + ? FindNonHangableEnd(text, break_offset - 1) + : break_offset; + + return {break_offset, non_hangable_run_end, false}; } // Shapes a line of text by finding a valid and appropriate break opportunity @@ -210,7 +245,10 @@ DCHECK_LT(start, range_end); result_out->is_overflow = false; result_out->is_hyphenated = false; + result_out->has_trailing_spaces = false; const String& text = GetText(); + const bool is_break_after_any_space = + break_iterator_->BreakSpace() == BreakSpaceType::kAfterEverySpace; // The start position in the original shape results. float start_position = result_->CachedPositionForOffset(start - range_start); @@ -242,24 +280,59 @@ // comparing floats. See ShapeLineZeroAvailableWidth on Linux/Mac. candidate_break = std::max(candidate_break, start); - // If there are no break opportunity before candidate_break, overflow. - // Find the next break opportunity after the candidate_break. + // If we are in the middle of a trailing space sequence, which are + // defined by the UAX#14 spec as Break After (A) class, we should + // look for breaking opportunityes after the end of the sequence. + // https://www.unicode.org/reports/tr14/#BA + // TODO(jfernandez): if break-spaces, do special handling. BreakOpportunity break_opportunity = - PreviousBreakOpportunity(candidate_break, start); + !IsBreakableSpace(text[candidate_break]) || is_break_after_any_space + ? PreviousBreakOpportunity(candidate_break, start) + : NextBreakOpportunity(std::max(candidate_break, start + 1), start, + range_end); + + // There are no break opportunity before candidate_break, overflow. + // Find the next break opportunity after the candidate_break. + // TODO: (jfernandez): Maybe also non_hangable_run_end <= start ? result_out->is_overflow = break_opportunity.offset <= start; if (result_out->is_overflow) { + DCHECK(is_break_after_any_space || + !IsBreakableSpace(text[candidate_break])); if (options & kNoResultIfOverflow) return nullptr; - // No need to scan past range_end for a break oppertunity. + // No need to scan past range_end for a break opportunity. break_opportunity = NextBreakOpportunity( std::max(candidate_break, start + 1), start, range_end); - // |range_end| may not be a break opportunity, but this function cannot - // measure beyond it. - if (break_opportunity.offset >= range_end) { - result_out->break_offset = range_end; - return ShapeToEnd(start, first_safe, range_start, range_end); + } + + // We don't care whether this result contains only spaces if we + // are breaking after any space. We shouldn't early return either + // in that case. + if (!is_break_after_any_space && + break_opportunity.non_hangable_run_end <= start) { + // TODO (jfenandez): There may be cases where candidate_break is + // not a breakable space but we also want to early return for + // triggering the trailing spaces handling + if (IsBreakableSpace(text[candidate_break])) { + result_out->has_trailing_spaces = true; + result_out->break_offset = std::min(range_end, break_opportunity.offset); + result_out->non_hangable_run_end = break_opportunity.non_hangable_run_end; +#if DCHECK_IS_ON() + DCHECK(IsAllSpaces(text, start, result_out->break_offset)); +#endif + return ShapeResultView::Create(result_.get(), start, + result_out->break_offset); } } + + // |range_end| may not be a break opportunity, but this function cannot + // measure beyond it. + if (break_opportunity.offset >= range_end) { + result_out->break_offset = range_end; + result_out->non_hangable_run_end = break_opportunity.non_hangable_run_end; + if (result_out->is_overflow) + return ShapeToEnd(start, first_safe, range_start, range_end); + } CheckBreakOffset(break_opportunity.offset, start, range_end); // If the start offset is not at a safe-to-break boundary the content between @@ -270,6 +343,7 @@ if (first_safe >= break_opportunity.offset) { // There is no safe-to-break, reshape the whole range. result_out->break_offset = break_opportunity.offset; + result_out->non_hangable_run_end = break_opportunity.non_hangable_run_end; CheckBreakOffset(result_out->break_offset, start, range_end); return ShapeResultView::Create( Shape(start, break_opportunity.offset).get()); @@ -285,12 +359,21 @@ DCHECK_LE(first_safe, break_opportunity.offset); scoped_refptr<const ShapeResult> line_end_result; - unsigned last_safe = break_opportunity.offset; bool reshape_line_end = true; if (options & kDontReshapeEndIfAtSpace) { - if (IsBreakableSpace(text[break_opportunity.offset])) + if (IsBreakableSpace(text[break_opportunity.offset - 1])) reshape_line_end = false; } + // Avoid re-shape if at the end of the range. + // TODO (jfernandez): Is this even possible ? Shouldn't we just + // early return if offset >= range_end ? + if (break_opportunity.offset == range_end) + reshape_line_end = false; + if (!is_break_after_any_space) { + break_opportunity.offset = + std::max(start + 1, break_opportunity.non_hangable_run_end); + } + unsigned last_safe = break_opportunity.offset; if (reshape_line_end) { // If the previous valid break opportunity is not at a safe-to-break // boundary reshape between the safe-to-break offset and the valid break @@ -298,6 +381,10 @@ // preceding boundary is tried until the available space is sufficient. while (true) { DCHECK_LE(start, break_opportunity.offset); + if (!is_break_after_any_space) { + break_opportunity.offset = + std::max(start + 1, break_opportunity.non_hangable_run_end); + } last_safe = result_->CachedPreviousSafeToBreakOffset(break_opportunity.offset); // No need to reshape the line end because this opportunity is safe. @@ -311,7 +398,7 @@ // Moved the opportunity back enough to require reshaping the whole line. if (UNLIKELY(last_safe < first_safe)) { - DCHECK_LT(last_safe, start); + DCHECK(last_safe == 0 || last_safe < start); last_safe = start; line_start_result = nullptr; } @@ -345,12 +432,17 @@ // because none can fit. The one after candidate_break is better for // ligatures, but the one before is better for kernings. result_out->is_overflow = true; + // TODO (jfernandez): Would be possible to refactor this logic + // with the one performed prior tp the reshape + // (FindBreakingOpportuntty() + overflow handling)? break_opportunity = PreviousBreakOpportunity(candidate_break, start); if (break_opportunity.offset <= start) { break_opportunity = NextBreakOpportunity( std::max(candidate_break, start + 1), start, range_end); if (break_opportunity.offset >= range_end) { result_out->break_offset = range_end; + result_out->non_hangable_run_end = + break_opportunity.non_hangable_run_end; return ShapeToEnd(start, first_safe, range_start, range_end); } } @@ -380,6 +472,7 @@ DCHECK_EQ(break_opportunity.offset - start, line_result->NumCharacters()); result_out->break_offset = break_opportunity.offset; + result_out->non_hangable_run_end = break_opportunity.non_hangable_run_end; result_out->is_hyphenated = break_opportunity.is_hyphenated || text[break_opportunity.offset - 1] == kSoftHyphenCharacter;
diff --git a/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker.h b/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker.h index 8958179e..297bdff5 100644 --- a/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker.h +++ b/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker.h
@@ -53,9 +53,15 @@ STACK_ALLOCATED(); public: + // Indicates the limits of the space run. + base::Optional<unsigned> non_hangable_run_end; + // Indicates the resulting break offset. unsigned break_offset; + // Indicates that the shape result contains trailing spaces + bool has_trailing_spaces; + // True if there were no break opportunities that can fit. When this is // false, the result width should be smaller than or equal to the available // space. @@ -107,7 +113,17 @@ STACK_ALLOCATED(); public: + BreakOpportunity(unsigned new_offset, bool hyphenated) + : offset(new_offset), + non_hangable_run_end(new_offset), + is_hyphenated(hyphenated) {} + BreakOpportunity(unsigned new_offset, unsigned run_end, bool hyphenated) + : offset(new_offset), + non_hangable_run_end(run_end), + is_hyphenated(hyphenated) {} + unsigned offset; + unsigned non_hangable_run_end; bool is_hyphenated; }; BreakOpportunity PreviousBreakOpportunity(unsigned offset,
diff --git a/third_party/blink/renderer/platform/text/text_break_iterator.cc b/third_party/blink/renderer/platform/text/text_break_iterator.cc index d0b2939..e34b073 100644 --- a/third_party/blink/renderer/platform/text/text_break_iterator.cc +++ b/third_party/blink/renderer/platform/text/text_break_iterator.cc
@@ -334,6 +334,12 @@ continue; } break; + case BreakSpaceType::kAfterSpaceRun: + if (is_space) + continue; + if (is_last_space) + return i; + break; case BreakSpaceType::kAfterEverySpace: if (is_last_space) return i; @@ -398,6 +404,10 @@ return NextBreakablePosition<CharacterType, lineBreakType, BreakSpaceType::kBeforeSpaceRun>(pos, str, len); + case BreakSpaceType::kAfterSpaceRun: + return NextBreakablePosition<CharacterType, lineBreakType, + BreakSpaceType::kAfterSpaceRun>(pos, str, + len); case BreakSpaceType::kAfterEverySpace: return NextBreakablePosition<CharacterType, lineBreakType, BreakSpaceType::kAfterEverySpace>(pos, str, @@ -516,6 +526,8 @@ return ostream << "kAfterEverySpace"; case BreakSpaceType::kBeforeSpaceRun: return ostream << "kBeforeSpaceRun"; + case BreakSpaceType::kAfterSpaceRun: + return ostream << "kAfterSpaceRun"; } NOTREACHED(); return ostream << "BreakSpaceType::" << static_cast<int>(break_space);
diff --git a/third_party/blink/renderer/platform/text/text_break_iterator.h b/third_party/blink/renderer/platform/text/text_break_iterator.h index 6192e29..00b32c6 100644 --- a/third_party/blink/renderer/platform/text/text_break_iterator.h +++ b/third_party/blink/renderer/platform/text/text_break_iterator.h
@@ -111,6 +111,11 @@ // LayoutNG line breaker uses this type. kBeforeSpaceRun, + // Break after a run of white space characters. + // This mode enables the LazyLineBreakIterator to completely rely on + // ICU for determining the breaking opportunities. + kAfterSpaceRun, + // white-spaces:break-spaces allows breaking after any preserved white-space, // even when these are leading spaces so that we can avoid breaking // the word in case of overflow.
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py b/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py index 2f24847..9feb124 100644 --- a/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py +++ b/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py
@@ -130,7 +130,7 @@ self._amber_repo = None self._target = None target_args = { - 'output_dir': build_path, + 'out_dir': build_path, 'target_cpu': 'x64', 'system_log_file': None, 'cpu_cores': CPU_CORES,
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng index 6e49082..5588c60 100644 --- a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng +++ b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
@@ -119,7 +119,6 @@ ### external/wpt/css/css-sizing/ crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/abspos-004.tentative.html [ Failure ] -crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/abspos-008.tentative.html [ Failure ] crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/abspos-009.tentative.html [ Failure ] crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/abspos-010.tentative.html [ Failure ] crbug.com/1045668 external/wpt/css/css-sizing/aspect-ratio/abspos-013.tentative.html [ Pass ] @@ -211,6 +210,9 @@ crbug.com/591099 external/wpt/css/css-text/white-space/control-chars-00C.html [ Failure ] crbug.com/591099 external/wpt/css/css-text/white-space/line-edge-white-space-collapse-001.html [ Failure ] crbug.com/591099 external/wpt/css/css-text/white-space/line-edge-white-space-collapse-002.html [ Failure ] +crbug.com/591099 external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-012.html [ Failure ] +crbug.com/591099 external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-013.html [ Failure ] +crbug.com/591099 external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-014.html [ Failure ] ### external/wpt/css/css-text/word-break/ crbug.com/591099 external/wpt/css/css-text/word-break/word-break-break-all-004.html [ Failure ] @@ -345,6 +347,9 @@ crbug.com/1012289 external/wpt/css/css-lists/list-style-type-string-006.html [ Failure ] crbug.com/1012294 external/wpt/css/css-lists/list-style-type-string-007.html [ Pass ] +### external/wpt/css/css-content/ +crbug.com/591099 external/wpt/css/css-content/quotes-033.html [ Failure ] + ### external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/ crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-horiz-002.xhtml [ Failure ] crbug.com/886592 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-margin-002.html [ Failure ] @@ -384,6 +389,7 @@ ### virtual/text-antialias/ crbug.com/591099 virtual/text-antialias/justify-ideograph-simple.html [ Failure ] +crbug.com/591099 virtual/text-antialias/apply-start-width-after-skipped-text.html [ Failure ] ### http/tests/ crbug.com/591099 http/tests/devtools/elements/highlight/highlight-node-vertical-rl.js [ Failure ] @@ -438,6 +444,10 @@ crbug.com/591099 external/wpt/css/css-overflow/webkit-line-clamp-014.html [ Failure ] crbug.com/591099 external/wpt/css/css-overflow/webkit-line-clamp-027.html [ Failure ] +# More than one scrollbar gutter (i.e. the "both" value of scrollbar-gutter) +crbug.com/710214 external/wpt/css/css-overflow/scrollbar-gutter-004.html [ Failure ] +crbug.com/710214 external/wpt/css/css-overflow/scrollbar-gutter-005.html [ Failure ] + # White space, absolute position and paint timing failures from June 5, 2020 crbug.com/591099 external/wpt/paint-timing/fcp-only/fcp-pseudo-element-visibility.html [ Failure ] crbug.com/591099 external/wpt/css/css-position/position-absolute-center-001.tentative.html [ Failure ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 5bd048fe..03d0d45 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -881,6 +881,7 @@ crbug.com/591099 fast/multicol/vertical-lr/unsplittable-inline-block.html [ Failure ] crbug.com/591099 [ Win ] virtual/text-antialias/ellipsis-with-self-painting-layer.html [ Failure ] crbug.com/591099 [ Mac ] fast/multicol/file-upload-as-multicol.html [ Failure ] +crbug.com/1098801 virtual/text-antialias/whitespace/whitespace-in-pre.html [ Failure ] # LayoutNG failures that needs to be triaged crbug.com/591099 virtual/text-antialias/selection/selection-rect-line-height-too-small.html [ Failure ] @@ -1624,10 +1625,12 @@ crbug.com/441840 external/wpt/css/css-shapes/shape-outside/values/shape-outside-polygon-004.html [ Failure ] crbug.com/441840 [ Win ] external/wpt/css/css-shapes/shape-outside/values/shape-outside-shape-arguments-000.html [ Failure ] -crbug.com/1022182 external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html [ Failure ] -crbug.com/1022182 external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html [ Timeout ] -crbug.com/1022182 external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-immediate-promise.html [ Timeout ] -crbug.com/1022182 external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html [ Timeout ] +# Fix once top-level-await is enabled +crbug.com/1022182 external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html [ Skip ] +crbug.com/1022182 external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html [ Skip ] +crbug.com/1022182 external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-immediate-promise.html [ Skip ] +crbug.com/1022182 external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html [ Skip ] +crbug.com/1022182 external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html [ Skip ] crbug.com/676270 [ Mac ] external/wpt/css/css-text/hyphens/hyphens-auto-001.html [ Failure ] crbug.com/1022415 [ Mac ] external/wpt/css/css-text/hyphens/hyphens-auto-010.html [ Failure ] @@ -2533,10 +2536,6 @@ crbug.com/626703 [ Mac ] external/wpt/fetch/connection-pool/network-partition-key.html [ Timeout ] crbug.com/626703 [ Mac11.0 ] external/wpt/fetch/connection-pool/network-partition-key.html [ Timeout ] crbug.com/626703 [ Win ] external/wpt/fetch/connection-pool/network-partition-key.html [ Timeout ] -crbug.com/626703 [ Linux ] virtual/omt-worker-fetch/external/wpt/fetch/connection-pool/network-partition-key.html [ Timeout ] -crbug.com/626703 [ Mac ] virtual/omt-worker-fetch/external/wpt/fetch/connection-pool/network-partition-key.html [ Timeout ] -crbug.com/626703 [ Mac11.0 ] virtual/omt-worker-fetch/external/wpt/fetch/connection-pool/network-partition-key.html [ Timeout ] -crbug.com/626703 [ Win ] virtual/omt-worker-fetch/external/wpt/fetch/connection-pool/network-partition-key.html [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/css/css-text/white-space/eol-spaces-bidi-002.html [ Failure ] crbug.com/626703 [ Mac ] external/wpt/css/css-text/white-space/eol-spaces-bidi-002.html [ Failure ] crbug.com/626703 [ Mac11.0 ] external/wpt/css/css-text/white-space/eol-spaces-bidi-002.html [ Failure ] @@ -5355,8 +5354,6 @@ # Sheriff 2019-01-07 crbug.com/919587 [ Linux ] virtual/threaded/fast/idle-callback/idle_periods.html [ Pass Failure ] -# WebRTC Unified Plan -crbug.com/923244 external/wpt/webrtc/RTCDTMFSender-ontonechange.https.html [ Failure Pass Crash Timeout ] # WebRTC Plan B crbug.com/920979 virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCTrackEvent-fire.html [ Timeout ]
diff --git a/third_party/blink/web_tests/dark-mode/images/gradient-invert-expected.png b/third_party/blink/web_tests/dark-mode/images/gradient-expected.png similarity index 100% rename from third_party/blink/web_tests/dark-mode/images/gradient-invert-expected.png rename to third_party/blink/web_tests/dark-mode/images/gradient-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/dark-mode/images/gradient-noinvert-expected.png b/third_party/blink/web_tests/dark-mode/images/gradient-noinvert-expected.png deleted file mode 100644 index 000d914..0000000 --- a/third_party/blink/web_tests/dark-mode/images/gradient-noinvert-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/dark-mode/images/gradient-noinvert.html b/third_party/blink/web_tests/dark-mode/images/gradient-noinvert.html deleted file mode 100644 index ff17874..0000000 --- a/third_party/blink/web_tests/dark-mode/images/gradient-noinvert.html +++ /dev/null
@@ -1,9 +0,0 @@ -<!DOCTYPE html> -<style> - .gradient { - background-image: linear-gradient(white 0%, blue 100%); - width: 400px; - height: 300px; - } -</style> -<div class="gradient"></div>
diff --git a/third_party/blink/web_tests/dark-mode/images/gradient-invert.html b/third_party/blink/web_tests/dark-mode/images/gradient.html similarity index 100% rename from third_party/blink/web_tests/dark-mode/images/gradient-invert.html rename to third_party/blink/web_tests/dark-mode/images/gradient.html
diff --git a/third_party/blink/web_tests/dark-mode/images/image-invert-expected.png b/third_party/blink/web_tests/dark-mode/images/image-expected.png similarity index 100% rename from third_party/blink/web_tests/dark-mode/images/image-invert-expected.png rename to third_party/blink/web_tests/dark-mode/images/image-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/dark-mode/images/image-noinvert-expected.png b/third_party/blink/web_tests/dark-mode/images/image-noinvert-expected.png deleted file mode 100644 index 2ce1c60..0000000 --- a/third_party/blink/web_tests/dark-mode/images/image-noinvert-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/dark-mode/images/image-noinvert.html b/third_party/blink/web_tests/dark-mode/images/image-noinvert.html deleted file mode 100644 index f49fd1c..0000000 --- a/third_party/blink/web_tests/dark-mode/images/image-noinvert.html +++ /dev/null
@@ -1,2 +0,0 @@ -<!DOCTYPE html> -<img src="resources/png-simple.png">
diff --git a/third_party/blink/web_tests/dark-mode/images/image-invert.html b/third_party/blink/web_tests/dark-mode/images/image.html similarity index 100% rename from third_party/blink/web_tests/dark-mode/images/image-invert.html rename to third_party/blink/web_tests/dark-mode/images/image.html
diff --git a/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollbar-gutter-001.html b/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollbar-gutter-001.html index b8c157a..c6cdb55b 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollbar-gutter-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollbar-gutter-001.html
@@ -73,10 +73,11 @@ test(function() { let container = document.getElementById('container_auto_h'); let content = document.getElementById('content_auto_h'); - assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 200, "visible/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth"); - assert_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth"); + assert_equals(container.scrollWidth, 200, "auto/auto scrollWidth"); + assert_equals(container.clientWidth, 200, "auto/auto clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "auto/auto offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "auto/auto clientWidth"); + assert_equals(container.offsetWidth, content.offsetWidth, "auto/auto offsetWidth"); }, "Unexpected layout: overflow auto, scrollbar-gutter auto, horizontal-tb"); test(function() { @@ -84,6 +85,7 @@ let content = document.getElementById('content_scroll_h'); assert_equals(container.scrollWidth, 180, "scroll/auto scrollWidth"); assert_equals(container.clientWidth, 180, "scroll/auto clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "scroll/auto offsetLeft"); assert_equals(container.clientWidth, content.clientWidth, "scroll/auto clientWidth"); assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/auto offsetWidth"); }, "Unexpected layout: overflow scroll, scrollbar-gutter auto, horizontal-tb"); @@ -93,6 +95,7 @@ let content = document.getElementById('content_visible_h'); assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth"); assert_equals(container.clientWidth, 200, "visible/auto clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "visible/auto offsetLeft"); assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth"); assert_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth"); }, "Unexpected layout: overflow visible, scrollbar-gutter auto, horizontal-tb"); @@ -100,26 +103,31 @@ test(function() { let container = document.getElementById('container_hidden_h'); let content = document.getElementById('content_hidden_h'); - assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 200, "visible/auto clientWidth"); + assert_equals(container.scrollWidth, 200, "hidden/auto scrollWidth"); + assert_equals(container.clientWidth, 200, "hidden/auto clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "hidden/auto offsetLeft"); assert_equals(container.clientWidth, content.clientWidth, "hidden/auto clientWidth"); assert_equals(container.offsetWidth, content.offsetWidth, "hidden/auto offsetWidth"); }, "Unexpected layout: overflow hidden, scrollbar-gutter auto, horizontal-tb"); + // vertical + test(function() { let container = document.getElementById('container_auto_v'); let content = document.getElementById('content_auto_v'); - assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 200, "visible/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight"); - assert_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight"); + assert_equals(container.scrollHeight, 200, "auto/auto scrollHeight"); + assert_equals(container.clientHeight, 200, "auto/auto clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "auto/auto offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "auto/auto clientHeight"); + assert_equals(container.offsetHeight, content.offsetHeight, "auto/auto offsetHeight"); }, "Unexpected layout: overflow auto, scrollbar-gutter auto, vertical-rl"); test(function() { let container = document.getElementById('container_scroll_v'); let content = document.getElementById('content_scroll_v'); - assert_equals(container.scrollHeight, 180, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 180, "visible/auto clientHeight"); + assert_equals(container.scrollHeight, 180, "scroll/auto scrollHeight"); + assert_equals(container.clientHeight, 180, "scroll/auto clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "scroll/auto offsetTop"); assert_equals(container.clientHeight, content.clientHeight, "scroll/auto clientHeight"); assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/auto offsetHeight"); }, "Unexpected layout: overflow scroll, scrollbar-gutter auto, vertical-rl"); @@ -129,6 +137,7 @@ let content = document.getElementById('content_visible_v'); assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight"); assert_equals(container.clientHeight, 200, "visible/auto clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "visible/auto offsetTop"); assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight"); assert_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight"); }, "Unexpected layout: overflow visible, scrollbar-gutter auto, vertical-rl"); @@ -136,8 +145,9 @@ test(function() { let container = document.getElementById('container_hidden_v'); let content = document.getElementById('content_hidden_v'); - assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 200, "visible/auto clientHeight"); + assert_equals(container.scrollHeight, 200, "hidden/auto scrollHeight"); + assert_equals(container.clientHeight, 200, "hidden/auto clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "hidden/auto offsetTop"); assert_equals(container.clientHeight, content.clientHeight, "hidden/auto clientHeight"); assert_equals(container.offsetHeight, content.offsetHeight, "hidden/auto offsetHeight"); }, "Unexpected layout: overflow hidden, scrollbar-gutter auto, vertical-rl");
diff --git a/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollbar-gutter-002.html b/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollbar-gutter-002.html index 5cfc45c..8756ab7f 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollbar-gutter-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollbar-gutter-002.html
@@ -19,6 +19,10 @@ background: deepskyblue; } + .container.force { + scrollbar-gutter: stable force; + } + .content { height: 100%; width: 100%; @@ -70,78 +74,130 @@ function performTest() { setup({explicit_done: true}); + // horizontal + test(function() { let container = document.getElementById('container_auto_h'); let content = document.getElementById('content_auto_h'); - assert_equals(container.scrollWidth, 180, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 180, "visible/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth"); - assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth"); + assert_equals(container.scrollWidth, 180, "auto/stable scrollWidth"); + assert_equals(container.clientWidth, 180, "auto/stable clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "auto/stable offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "auto/stable clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "auto/stable offsetWidth"); }, "Unexpected layout: overflow auto, scrollbar-gutter stable, horizontal-tb"); test(function() { let container = document.getElementById('container_scroll_h'); let content = document.getElementById('content_scroll_h'); - assert_equals(container.scrollWidth, 180, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 180, "visible/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "scroll/auto clientWidth"); - assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/auto offsetWidth"); + assert_equals(container.scrollWidth, 180, "scroll/stable scrollWidth"); + assert_equals(container.clientWidth, 180, "scroll/stable clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "scroll/stable offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "scroll/stable clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/stable offsetWidth"); }, "Unexpected layout: overflow scroll, scrollbar-gutter stable, horizontal-tb"); test(function() { let container = document.getElementById('container_visible_h'); let content = document.getElementById('content_visible_h'); - assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 200, "visible/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth"); - assert_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth"); + assert_equals(container.scrollWidth, 200, "visible/stable scrollWidth"); + assert_equals(container.clientWidth, 200, "visible/stable clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "visible/stable offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "visible/stable clientWidth"); + assert_equals(container.offsetWidth, content.offsetWidth, "visible/stable offsetWidth"); }, "Unexpected layout: overflow visible, scrollbar-gutter stable, horizontal-tb"); test(function() { let container = document.getElementById('container_hidden_h'); let content = document.getElementById('content_hidden_h'); - assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 200, "visible/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "hidden/auto clientWidth"); - assert_equals(container.offsetWidth, content.offsetWidth, "hidden/auto offsetWidth"); + assert_equals(container.scrollWidth, 200, "hidden/stable scrollWidth"); + assert_equals(container.clientWidth, 200, "hidden/stable clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "hidden/stable offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "hidden/stable clientWidth"); + assert_equals(container.offsetWidth, content.offsetWidth, "hidden/stable offsetWidth"); }, "Unexpected layout: overflow hidden, scrollbar-gutter stable, horizontal-tb"); test(function() { + let container = document.getElementById('container_visible_force_h'); + let content = document.getElementById('content_visible_force_h'); + assert_equals(container.scrollWidth, 180, "visible/stable force scrollWidth"); + assert_equals(container.clientWidth, 180, "visible/stable force clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "visible/stable force offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "visible/stable force clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/stable force offsetWidth"); + }, "Unexpected layout: overflow visible, scrollbar-gutter stable force, horizontal-tb"); + + test(function() { + let container = document.getElementById('container_hidden_force_h'); + let content = document.getElementById('content_hidden_force_h'); + assert_equals(container.scrollWidth, 180, "hidden/stable force scrollWidth"); + assert_equals(container.clientWidth, 180, "hidden/stable force clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "hidden/stable force offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "hidden/stable force clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "hidden/stable force offsetWidth"); + }, "Unexpected layout: overflow hidden, scrollbar-gutter stable force, horizontal-tb"); + + // vertical + + test(function() { let container = document.getElementById('container_auto_v'); let content = document.getElementById('content_auto_v'); - assert_equals(container.scrollHeight, 180, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 180, "visible/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight"); - assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight"); + assert_equals(container.scrollHeight, 180, "auto/stable scrollHeight"); + assert_equals(container.clientHeight, 180, "auto/stable clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "auto/stable offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "auto/stable clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "auto/stable offsetHeight"); }, "Unexpected layout: overflow auto, scrollbar-gutter stable, vertical-rl"); test(function() { let container = document.getElementById('container_scroll_v'); let content = document.getElementById('content_scroll_v'); - assert_equals(container.scrollHeight, 180, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 180, "visible/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "scroll/auto clientHeight"); - assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/auto offsetHeight"); + assert_equals(container.scrollHeight, 180, "scroll/stable scrollHeight"); + assert_equals(container.clientHeight, 180, "scroll/stable clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "scroll/stable offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "scroll/stable clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/stable offsetHeight"); }, "Unexpected layout: overflow scroll, scrollbar-gutter stable, vertical-rl"); test(function() { let container = document.getElementById('container_visible_v'); let content = document.getElementById('content_visible_v'); - assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 200, "visible/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight"); - assert_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight"); + assert_equals(container.scrollHeight, 200, "visible/stable scrollHeight"); + assert_equals(container.clientHeight, 200, "visible/stable clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "visible/stable offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "visible/stable clientHeight"); + assert_equals(container.offsetHeight, content.offsetHeight, "visible/stable offsetHeight"); }, "Unexpected layout: overflow visible, scrollbar-gutter stable, vertical-rl"); test(function() { let container = document.getElementById('container_hidden_v'); let content = document.getElementById('content_hidden_v'); - assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 200, "visible/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "hidden/auto clientHeight"); - assert_equals(container.offsetHeight, content.offsetHeight, "hidden/auto offsetHeight"); + assert_equals(container.scrollHeight, 200, "hidden/stable scrollHeight"); + assert_equals(container.clientHeight, 200, "hidden/stable clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "hidden/stable offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "hidden/stable clientHeight"); + assert_equals(container.offsetHeight, content.offsetHeight, "hidden/stable offsetHeight"); }, "Unexpected layout: overflow hidden, scrollbar-gutter stable, vertical-rl"); + test(function() { + let container = document.getElementById('container_visible_force_v'); + let content = document.getElementById('content_visible_force_v'); + assert_equals(container.scrollHeight, 180, "visible/stable force scrollHeight"); + assert_equals(container.clientHeight, 180, "visible/stable force clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "visible/stable force offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "visible/stable force clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/stable force offsetHeight"); + }, "Unexpected layout: overflow visible, scrollbar-gutter stable force, vertical-rl"); + + test(function() { + let container = document.getElementById('container_hidden_force_v'); + let content = document.getElementById('content_hidden_force_v'); + assert_equals(container.scrollHeight, 180, "hidden/stable force scrollHeight"); + assert_equals(container.clientHeight, 180, "hidden/stable force clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "hidden/stable force offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "hidden/stable force clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "hidden/stable force offsetHeight"); + }, "Unexpected layout: overflow hidden, scrollbar-gutter stable force, vertical-rl"); + done(); } @@ -166,6 +222,16 @@ <div class="content" id="content_hidden_h">overflow-y: hidden</div> </div> + scrollbar-gutter: stable force + + <div class="container classic horizontal visible force" id="container_visible_force_h"> + <div class="content" id="content_visible_force_h">overflow: visible (force)</div> + </div> + + <div class="container classic horizontal hidden force" id="container_hidden_force_h"> + <div class="content" id="content_hidden_force_h">overflow-y: hidden (force)</div> + </div> + writing-mode: vertical-rl; <div class="container classic vertical auto" id="container_auto_v"> @@ -184,4 +250,14 @@ <div class="content" id="content_hidden_v">overflow-x: hidden</div> </div> + scrollbar-gutter: stable force + + <div class="container classic vertical visible force" id="container_visible_force_v"> + <div class="content" id="content_visible_force_v">overflow: visible</div> + </div> + + <div class="container classic vertical hidden force" id="container_hidden_force_v"> + <div class="content" id="content_hidden_force_v">overflow-x: hidden</div> + </div> + </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollbar-gutter-003.html b/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollbar-gutter-003.html index 17f724f..1002b46 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollbar-gutter-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollbar-gutter-003.html
@@ -19,6 +19,10 @@ background: deepskyblue; } + .container.force { + scrollbar-gutter: always force; + } + .content { height: 100%; width: 100%; @@ -70,78 +74,130 @@ function performTest() { setup({explicit_done: true}); + // horizontal + test(function() { let container = document.getElementById('container_auto_h'); let content = document.getElementById('content_auto_h'); - assert_equals(container.scrollWidth, 180, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 180, "visible/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth"); - assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth"); + assert_equals(container.scrollWidth, 180, "auto/always scrollWidth"); + assert_equals(container.clientWidth, 180, "auto/always clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "auto/always offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "auto/always clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "auto/always offsetWidth"); }, "Unexpected layout: overflow auto, scrollbar-gutter always, horizontal-tb"); test(function() { let container = document.getElementById('container_scroll_h'); let content = document.getElementById('content_scroll_h'); - assert_equals(container.scrollWidth, 180, "scroll/auto scrollWidth"); - assert_equals(container.clientWidth, 180, "scroll/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "scroll/auto clientWidth"); - assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/auto offsetWidth"); + assert_equals(container.scrollWidth, 180, "scroll/always scrollWidth"); + assert_equals(container.clientWidth, 180, "scroll/always clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "scroll/always offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "scroll/always clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/always offsetWidth"); }, "Unexpected layout: overflow scroll, scrollbar-gutter always, horizontal-tb"); test(function() { let container = document.getElementById('container_visible_h'); let content = document.getElementById('content_visible_h'); - assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 200, "visible/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth"); - assert_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth"); + assert_equals(container.scrollWidth, 200, "visible/always scrollWidth"); + assert_equals(container.clientWidth, 200, "visible/always clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "visible/always offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "visible/always clientWidth"); + assert_equals(container.offsetWidth, content.offsetWidth, "visible/always offsetWidth"); }, "Unexpected layout: overflow visible, scrollbar-gutter always, horizontal-tb"); test(function() { let container = document.getElementById('container_hidden_h'); let content = document.getElementById('content_hidden_h'); - assert_equals(container.scrollWidth, 200, "hidden/auto scrollWidth"); - assert_equals(container.clientWidth, 200, "hidden/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "hidden/auto clientWidth"); - assert_equals(container.offsetWidth, content.offsetWidth, "hidden/auto offsetWidth"); + assert_equals(container.scrollWidth, 200, "hidden/always scrollWidth"); + assert_equals(container.clientWidth, 200, "hidden/always clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "hidden/always offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "hidden/always clientWidth"); + assert_equals(container.offsetWidth, content.offsetWidth, "hidden/always offsetWidth"); }, "Unexpected layout: overflow hidden, scrollbar-gutter always, horizontal-tb"); test(function() { + let container = document.getElementById('container_visible_force_h'); + let content = document.getElementById('content_visible_force_h'); + assert_equals(container.scrollWidth, 180, "visible/always force scrollWidth"); + assert_equals(container.clientWidth, 180, "visible/always force clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "visible/always force offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "visible/always force clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/always force offsetWidth"); + }, "Unexpected layout: overflow visible, scrollbar-gutter always force, horizontal-tb"); + + test(function() { + let container = document.getElementById('container_hidden_force_h'); + let content = document.getElementById('content_hidden_force_h'); + assert_equals(container.scrollWidth, 180, "hidden/always force scrollWidth"); + assert_equals(container.clientWidth, 180, "hidden/always force clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "hidden/always force offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "hidden/always force clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "hidden/always force offsetWidth"); + }, "Unexpected layout: overflow hidden, scrollbar-gutter always force, horizontal-tb"); + + // vertical + + test(function() { let container = document.getElementById('container_auto_v'); let content = document.getElementById('content_auto_v'); - assert_equals(container.scrollHeight, 180, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 180, "visible/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight"); - assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight"); + assert_equals(container.scrollHeight, 180, "auto/always scrollHeight"); + assert_equals(container.clientHeight, 180, "auto/always clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "auto/always offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "auto/always clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "auto/always offsetHeight"); }, "Unexpected layout: overflow auto, scrollbar-gutter always, vertical-rl"); test(function() { let container = document.getElementById('container_scroll_v'); let content = document.getElementById('content_scroll_v'); - assert_equals(container.scrollHeight, 180, "scroll/auto scrollHeight"); - assert_equals(container.clientHeight, 180, "scroll/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "scroll/auto clientHeight"); - assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/auto offsetHeight"); + assert_equals(container.scrollHeight, 180, "scroll/always scrollHeight"); + assert_equals(container.clientHeight, 180, "scroll/always clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "scroll/always offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "scroll/always clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/always offsetHeight"); }, "Unexpected layout: overflow scroll, scrollbar-gutter always, vertical-rl"); test(function() { let container = document.getElementById('container_visible_v'); let content = document.getElementById('content_visible_v'); - assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 200, "visible/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight"); - assert_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight"); + assert_equals(container.scrollHeight, 200, "visible/always scrollHeight"); + assert_equals(container.clientHeight, 200, "visible/always clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "visible/always offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "visible/always clientHeight"); + assert_equals(container.offsetHeight, content.offsetHeight, "visible/always offsetHeight"); }, "Unexpected layout: overflow visible, scrollbar-gutter always, vertical-rl"); test(function() { let container = document.getElementById('container_hidden_v'); let content = document.getElementById('content_hidden_v'); - assert_equals(container.scrollHeight, 200, "hidden/auto scrollHeight"); - assert_equals(container.clientHeight, 200, "hidden/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "hidden/auto clientHeight"); - assert_equals(container.offsetHeight, content.offsetHeight, "hidden/auto offsetHeight"); + assert_equals(container.scrollHeight, 200, "hidden/always scrollHeight"); + assert_equals(container.clientHeight, 200, "hidden/always clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "hidden/always offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "hidden/always clientHeight"); + assert_equals(container.offsetHeight, content.offsetHeight, "hidden/always offsetHeight"); }, "Unexpected layout: overflow hidden, scrollbar-gutter always, vertical-rl"); + test(function() { + let container = document.getElementById('container_visible_force_v'); + let content = document.getElementById('content_visible_force_v'); + assert_equals(container.scrollHeight, 180, "visible/always force scrollHeight"); + assert_equals(container.clientHeight, 180, "visible/always force clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "visible/always force offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "visible/always force clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/always force offsetHeight"); + }, "Unexpected layout: overflow visible, scrollbar-gutter always force, vertical-rl"); + + test(function() { + let container = document.getElementById('container_hidden_force_v'); + let content = document.getElementById('content_hidden_force_v'); + assert_equals(container.scrollHeight, 180, "hidden/always force scrollHeight"); + assert_equals(container.clientHeight, 180, "hidden/always force clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "hidden/always force offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "hidden/always force clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "hidden/always force offsetHeight"); + }, "Unexpected layout: overflow hidden, scrollbar-gutter always force, vertical-rl"); + done(); } @@ -166,6 +222,16 @@ <div class="content" id="content_hidden_h">overflow-y: hidden</div> </div> + scrollbar-gutter: always force + + <div class="container classic horizontal visible force" id="container_visible_force_h"> + <div class="content" id="content_visible_force_h">overflow: visible (force)</div> + </div> + + <div class="container classic horizontal hidden force" id="container_hidden_force_h"> + <div class="content" id="content_hidden_force_h">overflow-y: hidden (force)</div> + </div> + writing-mode: vertical-rl; <div class="container classic vertical auto" id="container_auto_v"> @@ -184,4 +250,14 @@ <div class="content" id="content_hidden_v">overflow-x: hidden</div> </div> + scrollbar-gutter: always force + + <div class="container classic vertical visible force" id="container_visible_force_v"> + <div class="content" id="content_visible_force_v">overflow: visible</div> + </div> + + <div class="container classic vertical hidden force" id="container_hidden_force_v"> + <div class="content" id="content_hidden_force_v">overflow-x: hidden</div> + </div> + </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollbar-gutter-004.html b/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollbar-gutter-004.html index 2f9ac9b7..b41e349 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollbar-gutter-004.html +++ b/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollbar-gutter-004.html
@@ -19,6 +19,10 @@ background: deepskyblue; } + .container.force { + scrollbar-gutter: stable both force; + } + .content { height: 100%; width: 100%; @@ -70,78 +74,130 @@ function performTest() { setup({explicit_done: true}); + // horizontal + test(function() { let container = document.getElementById('container_auto_h'); let content = document.getElementById('content_auto_h'); - assert_equals(container.scrollWidth, 160, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 160, "visible/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth"); - assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth"); + assert_equals(container.scrollWidth, 160, "auto/stable both scrollWidth"); + assert_equals(container.clientWidth, 160, "auto/stable both clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft - 20, "auto/stable both offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "auto/stable both clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "auto/stable both offsetWidth"); }, "Unexpected layout: overflow auto, scrollbar-gutter stable both, horizontal-tb"); test(function() { let container = document.getElementById('container_scroll_h'); let content = document.getElementById('content_scroll_h'); - assert_equals(container.scrollWidth, 160, "scroll/auto scrollWidth"); - assert_equals(container.clientWidth, 160, "scroll/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "scroll/auto clientWidth"); - assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/auto offsetWidth"); + assert_equals(container.scrollWidth, 160, "scroll/stable both scrollWidth"); + assert_equals(container.clientWidth, 160, "scroll/stable both clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft - 20, "scroll/stable both offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "scroll/stable both clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/stable both offsetWidth"); }, "Unexpected layout: overflow scroll, scrollbar-gutter stable both, horizontal-tb"); test(function() { let container = document.getElementById('container_visible_h'); let content = document.getElementById('content_visible_h'); - assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 200, "visible/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth"); - assert_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth"); + assert_equals(container.scrollWidth, 200, "visible/stable both scrollWidth"); + assert_equals(container.clientWidth, 200, "visible/stable both clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "visible/stable both offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "visible/stable both clientWidth"); + assert_equals(container.offsetWidth, content.offsetWidth, "visible/stable both offsetWidth"); }, "Unexpected layout: overflow visible, scrollbar-gutter stable both, horizontal-tb"); test(function() { let container = document.getElementById('container_hidden_h'); let content = document.getElementById('content_hidden_h'); - assert_equals(container.scrollWidth, 200, "hidden/auto scrollWidth"); - assert_equals(container.clientWidth, 200, "hidden/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "hidden/auto clientWidth"); - assert_equals(container.offsetWidth, content.offsetWidth, "hidden/auto offsetWidth"); + assert_equals(container.scrollWidth, 200, "hidden/stable both scrollWidth"); + assert_equals(container.clientWidth, 200, "hidden/stable both clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "hidden/stable both offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "hidden/stable both clientWidth"); + assert_equals(container.offsetWidth, content.offsetWidth, "hidden/stable both offsetWidth"); }, "Unexpected layout: overflow hidden, scrollbar-gutter stable both, horizontal-tb"); test(function() { + let container = document.getElementById('container_visible_force_h'); + let content = document.getElementById('content_visible_force_h'); + assert_equals(container.scrollWidth, 160, "visible/stable both force scrollWidth"); + assert_equals(container.clientWidth, 160, "visible/stable both force clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft - 20, "visible/stable both force offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "visible/stable both force clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/stable both force offsetWidth"); + }, "Unexpected layout: overflow visible, scrollbar-gutter stable both force, horizontal-tb"); + + test(function() { + let container = document.getElementById('container_hidden_force_h'); + let content = document.getElementById('content_hidden_force_h'); + assert_equals(container.scrollWidth, 160, "hidden/stable both force scrollWidth"); + assert_equals(container.clientWidth, 160, "hidden/stable both force clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft - 20, "hidden/stable both force offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "hidden/stable both force clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "hidden/stable both force offsetWidth"); + }, "Unexpected layout: overflow hidden, scrollbar-gutter stable both force, horizontal-tb"); + + // vertical + + test(function() { let container = document.getElementById('container_auto_v'); let content = document.getElementById('content_auto_v'); - assert_equals(container.scrollHeight, 160, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 160, "visible/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight"); - assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight"); + assert_equals(container.scrollHeight, 160, "auto/stable both scrollHeight"); + assert_equals(container.clientHeight, 160, "auto/stable both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop - 20, "auto/stable both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "auto/stable both clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "auto/stable both offsetHeight"); }, "Unexpected layout: overflow auto, scrollbar-gutter stable both, vertical-rl"); test(function() { let container = document.getElementById('container_scroll_v'); let content = document.getElementById('content_scroll_v'); - assert_equals(container.scrollHeight, 160, "scroll/auto scrollHeight"); - assert_equals(container.clientHeight, 160, "scroll/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "scroll/auto clientHeight"); - assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/auto offsetHeight"); + assert_equals(container.scrollHeight, 160, "scroll/stable both scrollHeight"); + assert_equals(container.clientHeight, 160, "scroll/stable both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop - 20, "scroll/stable both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "scroll/stable both clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/stable both offsetHeight"); }, "Unexpected layout: overflow scroll, scrollbar-gutter stable both, vertical-rl"); test(function() { let container = document.getElementById('container_visible_v'); let content = document.getElementById('content_visible_v'); - assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 200, "visible/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight"); - assert_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight"); + assert_equals(container.scrollHeight, 200, "visible/stable both scrollHeight"); + assert_equals(container.clientHeight, 200, "visible/stable both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "visible/stable both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "visible/stable both clientHeight"); + assert_equals(container.offsetHeight, content.offsetHeight, "visible/stable both offsetHeight"); }, "Unexpected layout: overflow visible, scrollbar-gutter stable both, vertical-rl"); test(function() { let container = document.getElementById('container_hidden_v'); let content = document.getElementById('content_hidden_v'); - assert_equals(container.scrollHeight, 200, "hidden/auto scrollHeight"); - assert_equals(container.clientHeight, 200, "hidden/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "hidden/auto clientHeight"); - assert_equals(container.offsetHeight, content.offsetHeight, "hidden/auto offsetHeight"); + assert_equals(container.scrollHeight, 200, "hidden/stable both scrollHeight"); + assert_equals(container.clientHeight, 200, "hidden/stable both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "hidden/stable both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "hidden/stable both clientHeight"); + assert_equals(container.offsetHeight, content.offsetHeight, "hidden/stable both offsetHeight"); }, "Unexpected layout: overflow hidden, scrollbar-gutter stable both, vertical-rl"); + test(function() { + let container = document.getElementById('container_visible_force_v'); + let content = document.getElementById('content_visible_force_v'); + assert_equals(container.scrollHeight, 160, "visible/stable both scrollHeight"); + assert_equals(container.clientHeight, 160, "visible/stable both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop - 20, "visible/stable both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "visible/stable both clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/stable both offsetHeight"); + }, "Unexpected layout: overflow visible, scrollbar-gutter stable both force, vertical-rl"); + + test(function() { + let container = document.getElementById('container_hidden_force_v'); + let content = document.getElementById('content_hidden_force_v'); + assert_equals(container.scrollHeight, 160, "hidden/stable both scrollHeight"); + assert_equals(container.clientHeight, 160, "hidden/stable both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop - 20, "hidden/stable both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "hidden/stable both clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "hidden/stable both offsetHeight"); + }, "Unexpected layout: overflow hidden, scrollbar-gutter stable both force, vertical-rl"); + done(); } @@ -166,6 +222,16 @@ <div class="content" id="content_hidden_h">overflow-y: hidden</div> </div> + scrollbar-gutter: stable both force + + <div class="container classic horizontal visible force" id="container_visible_force_h"> + <div class="content" id="content_visible_force_h">overflow: visible (force)</div> + </div> + + <div class="container classic horizontal hidden force" id="container_hidden_force_h"> + <div class="content" id="content_hidden_force_h">overflow-y: hidden (force)</div> + </div> + writing-mode: vertical-rl; <div class="container classic vertical auto" id="container_auto_v"> @@ -184,4 +250,14 @@ <div class="content" id="content_hidden_v">overflow-x: hidden</div> </div> + scrollbar-gutter: stable both force + + <div class="container classic vertical visible force" id="container_visible_force_v"> + <div class="content" id="content_visible_force_v">overflow: visible</div> + </div> + + <div class="container classic vertical hidden force" id="container_hidden_force_v"> + <div class="content" id="content_hidden_force_v">overflow-x: hidden</div> + </div> + </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollbar-gutter-005.html b/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollbar-gutter-005.html index 5f1e841..dca46577 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollbar-gutter-005.html +++ b/third_party/blink/web_tests/external/wpt/css/css-overflow/scrollbar-gutter-005.html
@@ -19,6 +19,10 @@ background: deepskyblue; } + .container.force { + scrollbar-gutter: always both force; + } + .content { height: 100%; width: 100%; @@ -70,78 +74,130 @@ function performTest() { setup({explicit_done: true}); + // horizontal + test(function() { let container = document.getElementById('container_auto_h'); let content = document.getElementById('content_auto_h'); - assert_equals(container.scrollWidth, 160, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 160, "visible/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth"); - assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth"); + assert_equals(container.scrollWidth, 160, "auto/always both scrollWidth"); + assert_equals(container.clientWidth, 160, "auto/always both clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft - 20, "auto/always both offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "auto/always both clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "auto/always both offsetWidth"); }, "Unexpected layout: overflow auto, scrollbar-gutter always both, horizontal-tb"); test(function() { let container = document.getElementById('container_scroll_h'); let content = document.getElementById('content_scroll_h'); - assert_equals(container.scrollWidth, 160, "scroll/auto scrollWidth"); - assert_equals(container.clientWidth, 160, "scroll/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "scroll/auto clientWidth"); - assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/auto offsetWidth"); + assert_equals(container.scrollWidth, 160, "scroll/always both scrollWidth"); + assert_equals(container.clientWidth, 160, "scroll/always both clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft - 20, "scroll/always both offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "scroll/always both clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/always both offsetWidth"); }, "Unexpected layout: overflow scroll, scrollbar-gutter always both, horizontal-tb"); test(function() { let container = document.getElementById('container_visible_h'); let content = document.getElementById('content_visible_h'); - assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 200, "visible/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth"); - assert_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth"); + assert_equals(container.scrollWidth, 200, "visible/always both scrollWidth"); + assert_equals(container.clientWidth, 200, "visible/always both clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "visible/always both offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "visible/always both clientWidth"); + assert_equals(container.offsetWidth, content.offsetWidth, "visible/always both offsetWidth"); }, "Unexpected layout: overflow visible, scrollbar-gutter always both, horizontal-tb"); test(function() { let container = document.getElementById('container_hidden_h'); let content = document.getElementById('content_hidden_h'); - assert_equals(container.scrollWidth, 200, "hidden/auto scrollWidth"); - assert_equals(container.clientWidth, 200, "hidden/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "hidden/auto clientWidth"); - assert_equals(container.offsetWidth, content.offsetWidth, "hidden/auto offsetWidth"); + assert_equals(container.scrollWidth, 200, "hidden/always both scrollWidth"); + assert_equals(container.clientWidth, 200, "hidden/always both clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "hidden/always both offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "hidden/always both clientWidth"); + assert_equals(container.offsetWidth, content.offsetWidth, "hidden/always both offsetWidth"); }, "Unexpected layout: overflow hidden, scrollbar-gutter always both, horizontal-tb"); test(function() { + let container = document.getElementById('container_visible_force_h'); + let content = document.getElementById('content_visible_force_h'); + assert_equals(container.scrollWidth, 160, "visible/always both force scrollWidth"); + assert_equals(container.clientWidth, 160, "visible/always both force clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft - 20, "visible/always both force offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "visible/always both force clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/always both force offsetWidth"); + }, "Unexpected layout: overflow visible, scrollbar-gutter always both force, horizontal-tb"); + + test(function() { + let container = document.getElementById('container_hidden_force_h'); + let content = document.getElementById('content_hidden_force_h'); + assert_equals(container.scrollWidth, 160, "hidden/always both force scrollWidth"); + assert_equals(container.clientWidth, 160, "hidden/always both force clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft - 20, "hidden/always both force offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "hidden/always both force clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "hidden/always both force offsetWidth"); + }, "Unexpected layout: overflow hidden, scrollbar-gutter always both force, horizontal-tb"); + + // vertical + + test(function() { let container = document.getElementById('container_auto_v'); let content = document.getElementById('content_auto_v'); - assert_equals(container.scrollHeight, 160, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 160, "visible/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight"); - assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight"); + assert_equals(container.scrollHeight, 160, "auto/always both scrollHeight"); + assert_equals(container.clientHeight, 160, "auto/always both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop - 20, "auto/always both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "auto/always both clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "auto/always both offsetHeight"); }, "Unexpected layout: overflow auto, scrollbar-gutter always both, vertical-rl"); test(function() { let container = document.getElementById('container_scroll_v'); let content = document.getElementById('content_scroll_v'); - assert_equals(container.scrollHeight, 160, "scroll/auto scrollHeight"); - assert_equals(container.clientHeight, 160, "scroll/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "scroll/auto clientHeight"); - assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/auto offsetHeight"); + assert_equals(container.scrollHeight, 160, "scroll/always both scrollHeight"); + assert_equals(container.clientHeight, 160, "scroll/always both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop - 20, "scroll/always both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "scroll/always both clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/always both offsetHeight"); }, "Unexpected layout: overflow scroll, scrollbar-gutter always both, vertical-rl"); test(function() { let container = document.getElementById('container_visible_v'); let content = document.getElementById('content_visible_v'); - assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 200, "visible/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight"); - assert_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight"); + assert_equals(container.scrollHeight, 200, "visible/always both scrollHeight"); + assert_equals(container.clientHeight, 200, "visible/always both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "visible/always both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "visible/always both clientHeight"); + assert_equals(container.offsetHeight, content.offsetHeight, "visible/always both offsetHeight"); }, "Unexpected layout: overflow visible, scrollbar-gutter always both, vertical-rl"); test(function() { let container = document.getElementById('container_hidden_v'); let content = document.getElementById('content_hidden_v'); - assert_equals(container.scrollHeight, 200, "hidden/auto scrollHeight"); - assert_equals(container.clientHeight, 200, "hidden/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "hidden/auto clientHeight"); - assert_equals(container.offsetHeight, content.offsetHeight, "hidden/auto offsetHeight"); + assert_equals(container.scrollHeight, 200, "hidden/always both scrollHeight"); + assert_equals(container.clientHeight, 200, "hidden/always both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "hidden/always both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "hidden/always both clientHeight"); + assert_equals(container.offsetHeight, content.offsetHeight, "hidden/always both offsetHeight"); }, "Unexpected layout: overflow hidden, scrollbar-gutter always both, vertical-rl"); + test(function() { + let container = document.getElementById('container_visible_force_v'); + let content = document.getElementById('content_visible_force_v'); + assert_equals(container.scrollHeight, 160, "visible/always both scrollHeight"); + assert_equals(container.clientHeight, 160, "visible/always both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop - 20, "visible/always both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "visible/always both clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/always both offsetHeight"); + }, "Unexpected layout: overflow visible, scrollbar-gutter always both force, vertical-rl"); + + test(function() { + let container = document.getElementById('container_hidden_force_v'); + let content = document.getElementById('content_hidden_force_v'); + assert_equals(container.scrollHeight, 160, "hidden/always both scrollHeight"); + assert_equals(container.clientHeight, 160, "hidden/always both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop - 20, "hidden/always both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "hidden/always both clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "hidden/always both offsetHeight"); + }, "Unexpected layout: overflow hidden, scrollbar-gutter always both force, vertical-rl"); + done(); } @@ -166,6 +222,16 @@ <div class="content" id="content_hidden_h">overflow-y: hidden</div> </div> + scrollbar-gutter: always both force + + <div class="container classic horizontal visible force" id="container_visible_force_h"> + <div class="content" id="content_visible_force_h">overflow: visible (force)</div> + </div> + + <div class="container classic horizontal hidden force" id="container_hidden_force_h"> + <div class="content" id="content_hidden_force_h">overflow-y: hidden (force)</div> + </div> + writing-mode: vertical-rl; <div class="container classic vertical auto" id="container_auto_v"> @@ -184,4 +250,14 @@ <div class="content" id="content_hidden_v">overflow-x: hidden</div> </div> + scrollbar-gutter: always both force + + <div class="container classic vertical visible force" id="container_visible_force_v"> + <div class="content" id="content_visible_force_v">overflow: visible</div> + </div> + + <div class="container classic vertical hidden force" id="container_hidden_force_v"> + <div class="content" id="content_hidden_force_v">overflow-x: hidden</div> + </div> + </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-013-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-013-ref.html new file mode 100644 index 0000000..af1f6bf2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-013-ref.html
@@ -0,0 +1,13 @@ +<!doctype html> +<meta charset=utf-8> +<meta http-equiv="content-language" content="en, ja" /> +<title>CSS test Reference</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<style> + div { white-space: pre; } + span { background: blue; } +</style> + +<p>This test passes if the line is after the white space, which hangs (blue). + +<div>ああ<span> <br>X</span></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/white-space-wrap-after-nowrap-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/white-space-wrap-after-nowrap-001-ref.html index 80b2260c..71e1c82 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/white-space-wrap-after-nowrap-001-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/white-space-wrap-after-nowrap-001-ref.html
@@ -24,7 +24,5 @@ <section class="ideo"> <div>国<br>国</div> <div>国<br>国</div> - <div>国<br>国</div> - <div>国<br>国</div> </section> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-012.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-012.html new file mode 100644 index 0000000..7f7b707 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-012.html
@@ -0,0 +1,35 @@ +<!doctype html> +<meta charset=utf-8> +<title>CSS Text test: hanging trailing spaces with white-space:pre-wrap</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre-wrap"> +<link rel="help" title="4.1.3. Phase II: Trimming and Positioning" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> +<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property" href="https://drafts.csswg.org/css-text-3/#word-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-normal"> +<link rel="match" href="reference/white-space-pre-wrap-trailing-spaces-004-ref.html"> +<meta name="assert" content="Previous breaking opportunities are not considered if the overflow is caused by hanging trailing spaces."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> +<style> +div { + font: 10px/1 Ahem; +} +.ref { + position: absolute; + color: red; + z-index: -1; +} +.ref span { color: green; } +span { background: green; } +.test { + color: green; + + width: 4ch; + white-space: pre-wrap; +} +</style> + +<p>This test passes if there is a green square and no red. +<div class="ref">XX<span>X</span>XX<br>XXXXX</span><br>XXXXX<br>XXXXX<br>XXXXX</div> +<div class="test">XX X<span> X</span><span>XX </span>XXXXX<br>XXXXX<br>XXXXX</div> +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-013.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-013.html new file mode 100644 index 0000000..40f14987 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-013.html
@@ -0,0 +1,24 @@ +<!doctype html> +<meta charset=utf-8> +<meta http-equiv="content-language" content="en, ja" /> +<title>CSS Text test: hanging trailing spaces with white-space:pre-wrap</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre-wrap"> +<link rel="help" title="4.1.3. Phase II: Trimming and Positioning" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> +<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property" href="https://drafts.csswg.org/css-text-3/#word-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-normal"> +<link rel="match" href="reference/white-space-pre-wrap-trailing-spaces-013-ref.html"> +<meta name="assert" content="Previous breaking opportunities are not considered if the overflow is caused by hanging trailing spaces."> +<style> +div { + width: 2em; + white-space: pre-wrap; +} +span { background: blue; } /* If the space is removed instead of hanging, there will be no blue box*/ +</style> + +<p>This test passes if the line is after the white space, which hangs (blue). + +<div>ああ<span> X<span></div> +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-014.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-014.html new file mode 100644 index 0000000..757e31e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-014.html
@@ -0,0 +1,35 @@ +<!doctype html> +<meta charset=utf-8> +<title>CSS Text test: hanging trailing spaces with white-space:pre-wrap</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre-wrap"> +<link rel="help" title="4.1.3. Phase II: Trimming and Positioning" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> +<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property" href="https://drafts.csswg.org/css-text-3/#word-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-normal"> +<link rel="match" href="reference/white-space-pre-wrap-trailing-spaces-004-ref.html"> +<meta name="assert" content="Previous breaking opportunities are not considered if the overflow is caused by hanging trailing spaces."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> +<style> +div { + font: 10px/1 Ahem; +} +.ref { + position: absolute; + color: red; + z-index: -1; +} +span { background: green; } +.ref span { color: green; } +.test { + color: green; + + width: 4ch; + white-space: pre-wrap; +} +</style> + +<p>This test passes if there is a green square and no red. +<div class="ref">XX<span>X</span>X<span>X</span><br>XXXXX</span><br>XXXXX<br>XXXXX<br>XXXXX</div> +<div class="test">XX<span> X</span> X<span>XX </span>XXXXX<br>XXXXX<br>XXXXX</div> +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-015.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-015.html new file mode 100644 index 0000000..ea74160 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-015.html
@@ -0,0 +1,35 @@ +<!doctype html> +<meta charset=utf-8> +<title>CSS Text test: hanging trailing spaces with white-space:pre-wrap</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre-wrap"> +<link rel="help" title="4.1.3. Phase II: Trimming and Positioning" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> +<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property" href="https://drafts.csswg.org/css-text-3/#word-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-normal"> +<link rel="match" href="reference/white-space-pre-wrap-trailing-spaces-004-ref.html"> +<meta name="assert" content="Previous breaking opportunities are not considered if the overflow is caused by hanging trailing spaces."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> +<style> +div { + font: 10px/1 Ahem; +} +.ref { + position: absolute; + color: red; + z-index: -1; +} +span { background: green; } +.ref span { color: green; } +.test { + color: green; + + width: 5ch; + white-space: pre-wrap; +} +</style> + +<p>This test passes if there is a green square and no red. +<div class="ref">XX<span>XXX</span><br>XXX<span>X</span>X<br>XXXXX</span><br>XXXXX<br>XXXXX<br></div> +<div class="test">XX XX<span>X X</span><br>XXXXX<br>XXXXX<br>XXXXX</div> +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-wrap-after-nowrap-001.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-wrap-after-nowrap-001.html index a484f1c..5947c28 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-wrap-after-nowrap-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-wrap-after-nowrap-001.html
@@ -35,7 +35,5 @@ <section class="ideo"> <div><span class="nowrap">国</span>国</div> <div><span class="nowrap">国</span><span class="normal">国</span></div> - <div><span class="nowrap">国<span class="normal">国</span></span></div> - <div class="nowrap">国<span class="normal">国</span></div> </section> </body>
diff --git a/third_party/blink/web_tests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-hover.html b/third_party/blink/web_tests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-hover.html new file mode 100644 index 0000000..461917a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-hover.html
@@ -0,0 +1,21 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> + +<style> +legend:hover { + background: lime; +} +</style> +<fieldset> + <legend>Legend</legend> +</fieldset> +<script> +// https://crbug.com/1127743 +promise_test(async () => { + await test_driver.click(document.querySelector('legend')); + assert_not_equals(document.querySelector('legend:hover'), null); +}, 'The rendered LEGEND should work well for :hover.'); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html new file mode 100644 index 0000000..9bfe5a1 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html
@@ -0,0 +1,10 @@ +<!DOCTYPE html> +<title>Testing evaluation order</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + const worker = new SharedWorker( + "evaluation-order-1-nothrow-worker-setup.js"); + fetch_tests_from_worker(worker); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-worker-setup.js b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-worker-setup.js new file mode 100644 index 0000000..88fc22b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-worker-setup.js
@@ -0,0 +1,4 @@ +importScripts("/resources/testharness.js"); +importScripts("module/evaluation-order-setup.mjs"); +importScripts("module/evaluation-order-1-nothrow-worker.mjs"); +importScripts("module/evaluation-order-1-nothrow.mjs");
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-worker.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-worker.html new file mode 100644 index 0000000..4ddfb61d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-worker.html
@@ -0,0 +1,10 @@ +<!DOCTYPE html> +<title>Testing evaluation order</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + const worker = new Worker( + "evaluation-order-1-nothrow-worker-setup.js"); + fetch_tests_from_worker(worker); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow.html new file mode 100644 index 0000000..b08372e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow.html
@@ -0,0 +1,19 @@ +<!DOCTYPE html> +<title>Testing evaluation order</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="module/evaluation-order-setup.mjs"></script> +<script> + window.addEventListener("load", ev => globalThis.testDone()); + globalThis.expectedLog = [ + "step-1-1", "step-1-2", + "microtask", + "script-load", + "global-load", + ]; +</script> + +<script src="module/evaluation-order-1-nothrow.mjs" + onerror="globalThis.unreachable()" + onload="globalThis.log.push('script-load')"></script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker-expected.txt b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker-expected.txt new file mode 100644 index 0000000..7ce88a5 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL Test evaluation order of modules assert_array_equals: expected property 2 to be "global-error" but got "microtask" (expected array ["step-1-1", "step-1-2", "global-error", "error", "microtask"] got ["step-1-1", "step-1-2", "microtask", "global-error", "error"]) +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html new file mode 100644 index 0000000..0ad18a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html
@@ -0,0 +1,10 @@ +<!DOCTYPE html> +<title>Testing evaluation order</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + const worker = new SharedWorker( + "evaluation-order-1-worker-setup.js"); + fetch_tests_from_worker(worker); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-worker-expected.txt b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-worker-expected.txt new file mode 100644 index 0000000..7ce88a5 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-worker-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL Test evaluation order of modules assert_array_equals: expected property 2 to be "global-error" but got "microtask" (expected array ["step-1-1", "step-1-2", "global-error", "error", "microtask"] got ["step-1-1", "step-1-2", "microtask", "global-error", "error"]) +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-worker-setup.js b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-worker-setup.js new file mode 100644 index 0000000..f5bb6ec --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-worker-setup.js
@@ -0,0 +1,4 @@ +importScripts("/resources/testharness.js"); +importScripts("module/evaluation-order-setup.mjs"); +importScripts("module/evaluation-order-1-worker.mjs"); +importScripts("module/evaluation-order-1.mjs");
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-worker.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-worker.html new file mode 100644 index 0000000..7760e08 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-worker.html
@@ -0,0 +1,10 @@ +<!DOCTYPE html> +<title>Testing evaluation order</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + const worker = new Worker( + "evaluation-order-1-worker-setup.js"); + fetch_tests_from_worker(worker); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1.html new file mode 100644 index 0000000..7bf71320 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1.html
@@ -0,0 +1,19 @@ +<!DOCTYPE html> +<title>Testing evaluation order</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="module/evaluation-order-setup.mjs"></script> +<script> + window.addEventListener("load", event => globalThis.testDone()); + globalThis.expectedLog = [ + "step-1-1", "step-1-2", + "global-error", "error", + "microtask", + "script-load", + "global-load" + ]; +</script> + +<script src="module/evaluation-order-1.mjs" + onerror="unreachable()" onload="log.push('script-load')"></script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/choice-of-error-1.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/choice-of-error-1.html index 73a6ce3..50933da 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/choice-of-error-1.html +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/choice-of-error-1.html
@@ -9,6 +9,7 @@ window.log = []; window.addEventListener("error", ev => log.push(ev.error)); + window.addEventListener("onunhandledrejection", unreachable); const test_load = async_test( "Parse errors in different files should be reported " +
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/choice-of-error-2.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/choice-of-error-2.html index 0d67cb8..51adb09d 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/choice-of-error-2.html +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/choice-of-error-2.html
@@ -9,6 +9,7 @@ window.log = []; window.addEventListener("error", ev => log.push(ev.error)); + window.addEventListener("onunhandledrejection", unreachable); const test_load = async_test( "Instantiation errors in different files should be reported " +
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/choice-of-error-3.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/choice-of-error-3.html index 5c0adff..bc52119b 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/choice-of-error-3.html +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/choice-of-error-3.html
@@ -9,6 +9,7 @@ window.log = []; window.addEventListener("error", ev => log.push(ev.error)); + window.addEventListener("onunhandledrejection", unreachable); const test_load = async_test( "Evaluation errors are cached in intermediate module scripts");
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/error-type-1.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/error-type-1.html index 6f119e30..2480a60 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/error-type-1.html +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/error-type-1.html
@@ -9,6 +9,7 @@ window.log = []; window.addEventListener("error", ev => log.push(ev.error)); + window.addEventListener("onunhandledrejection", unreachable); const test_load = async_test( "network error has higher priority than parse error");
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/error-type-2.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/error-type-2.html index a7df1df0..673bf28 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/error-type-2.html +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/error-type-2.html
@@ -9,6 +9,7 @@ window.log = []; window.addEventListener("error", ev => log.push(ev.error)); + window.addEventListener("onunhandledrejection", unreachable); const test_load = async_test( "parse error has higher priority than instantiation error");
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/error-type-3.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/error-type-3.html index 9b00df3..8a16266f 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/error-type-3.html +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/error-type-3.html
@@ -9,6 +9,7 @@ window.log = []; window.addEventListener("error", ev => log.push(ev.error)); + window.addEventListener("onunhandledrejection", unreachable); const test_load = async_test( "instantiation error has higher priority than evaluation error");
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html new file mode 100644 index 0000000..77ece9e4 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html
@@ -0,0 +1,10 @@ +<!DOCTYPE html> +<title>Testing evaluation order</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + const worker = new SharedWorker( + "evaluation-order-1-nothrow-worker-setup.mjs", {type:"module"}); + fetch_tests_from_worker(worker); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html new file mode 100644 index 0000000..cc7f030 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html
@@ -0,0 +1,10 @@ +<!DOCTYPE html> +<title>Testing evaluation order</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + const worker = new SharedWorker( + "evaluation-order-1-worker-setup.mjs", {type:"module"}); + fetch_tests_from_worker(worker); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html new file mode 100644 index 0000000..0645639 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html
@@ -0,0 +1,10 @@ +<!DOCTYPE html> +<title>Testing evaluation order</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + const worker = new SharedWorker( + "evaluation-order-2-import-worker-setup.mjs", {type:"module"}); + fetch_tests_from_worker(worker); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html new file mode 100644 index 0000000..cd1f5ed --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html
@@ -0,0 +1,11 @@ +<!DOCTYPE html> + +<title>Testing evaluation order</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + const worker = new SharedWorker( + "evaluation-order-3-dynamic-worker-setup.mjs", {type:"module"}); + fetch_tests_from_worker(worker); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html new file mode 100644 index 0000000..da07faf4 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html
@@ -0,0 +1,33 @@ +<!DOCTYPE html> +<title>Testing evaluation order</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + setup({allow_uncaught_exception: true}); + + window.log = []; + + window.addEventListener("error", ev => testDone()); + window.addEventListener("onunhandledrejection", unreachable); + + const test_load = async_test("Test evaluation order of modules"); + + window.addEventListener("load", ev => log.push("window-load")); + + function unreachable() { log.push("unexpected"); } + function testDone() { + test_load.step(() => { + assert_array_equals(log, [ + "step-4.1-1", "step-4.1-2", "microtask-4.1", + "script-load", "window-load", + "step-4.2-1", "step-4.2-2", "microtask-4.2", + ]); + }); + test_load.done(); + } +</script> + +<script type="module" src="evaluation-order-4.1.mjs" + onerror="unreachable()" onload="log.push('script-load')"> + </script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-4.1.mjs b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-4.1.mjs new file mode 100644 index 0000000..f3347c1 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-4.1.mjs
@@ -0,0 +1,8 @@ +log.push("step-4.1-1"); +queueMicrotask(() => log.push("microtask-4.1")); +log.push("step-4.1-2"); + +await import("./evaluation-order-4.2.mjs"); + +// Not happening as we throw in the above module. +log.push("step-4.1-3");
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-4.2.mjs b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-4.2.mjs new file mode 100644 index 0000000..96a5cca --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-4.2.mjs
@@ -0,0 +1,5 @@ +log.push("step-4.2-1"); +queueMicrotask(() => log.push("microtask-4.2")); +log.push("step-4.2-2"); + +throw new Error("error");
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html b/third_party/blink/web_tests/external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html index f269dcbcb..e54bf5d 100644 --- a/third_party/blink/web_tests/external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html +++ b/third_party/blink/web_tests/external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html
@@ -10,7 +10,9 @@ const iframe = document.createElement("iframe"); + iframe.onunhandledrejection = t.unreached_func("Unhandled promise rejection detected"); iframe.onerror = t.unreached_func("Error loading iframe"); + let onLoadWasCalled = false; iframe.onload = t.step_func(() => { assert_equals(iframe.contentDocument.body.textContent, "Initial body contents\n");
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html b/third_party/blink/web_tests/external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html index f59c3c0..20645f4d 100644 --- a/third_party/blink/web_tests/external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html +++ b/third_party/blink/web_tests/external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html
@@ -6,17 +6,20 @@ <script> async_test(t => { const iframe = document.createElement("iframe"); - iframe.onerror = t.unreached_func("Error loading iframe"); - let testEndWasCalled = false; - document.addEventListener("documentWriteDone", t.step_func(() => { + + let onLoadWasCalled = false; + + iframe.onload = t.step_func(() => { + onLoadWasCalled = true; assert_equals(iframe.contentDocument.body.textContent, "Initial body contents\n"); - testEndWasCalled = true; - })); - iframe.onload = t.step_func_done(() => { - assert_true(testEndWasCalled, 'documentWriteDone event was not sent'); - assert_equals(iframe.contentDocument.body.textContent, "Initial body contents\n"); + // Don't call the event handler another time after document.write. + iframe.onload = null; }); + document.addEventListener("documentWriteDone", t.step_func_done(() => { + assert_true(onLoadWasCalled, "onload must be called"); + assert_equals(iframe.contentDocument.body.textContent, "document.write body contents\n"); + })); iframe.src = "module-tla-import-iframe.html"; document.body.appendChild(iframe);
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise-iframe.html b/third_party/blink/web_tests/external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise-iframe.html index 5c55bed6..edc9e80c 100644 --- a/third_party/blink/web_tests/external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise-iframe.html +++ b/third_party/blink/web_tests/external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise-iframe.html
@@ -1,10 +1,11 @@ <!doctype html> <script type=module> await new Promise(resolve => { - window.parent.document.test.step_timeout(resolve, 0)); + window.parent.document.test.step_timeout(resolve, 0); document.write("document.write body contents\n"); document.close(); window.parent.document.dispatchEvent(new CustomEvent("documentWriteDone")); }); </script> + Initial body contents
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html b/third_party/blink/web_tests/external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html index 5fc30a8..4f1281b 100644 --- a/third_party/blink/web_tests/external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html +++ b/third_party/blink/web_tests/external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html
@@ -9,18 +9,14 @@ document.test = t; const iframe = document.createElement("iframe"); - iframe.onerror = t.unreached_func("Error loading iframe"); - let onLoadWasCalled = false; - iframe.onload = t.step_func(() => { - assert_equals(iframe.contentDocument.body.textContent, "Initial body contents\n"); - iframe.onload = null; - onLoadWasCalled = true; - }); - document.addEventListener("documentWriteDone", t.step_func_done(() => { - assert_true(onLoadWasCalled); + + document.addEventListener("documentWriteDone", t.step_func(() => { assert_equals(iframe.contentDocument.body.textContent, "Initial body contents\n"); })); + iframe.onload = t.step_func_done(() => { + assert_equals(iframe.contentDocument.body.textContent, "Initial body contents\n"); + }); iframe.src = "module-tla-promise-iframe.html"; document.body.appendChild(iframe);
diff --git a/third_party/blink/web_tests/external/wpt/web-bundle/subresource-loading/subresource-loading-from-web-bundle.tentative.html b/third_party/blink/web_tests/external/wpt/web-bundle/subresource-loading/subresource-loading-from-web-bundle.tentative.html index 1e0e78a3..574a25b 100644 --- a/third_party/blink/web_tests/external/wpt/web-bundle/subresource-loading/subresource-loading-from-web-bundle.tentative.html +++ b/third_party/blink/web_tests/external/wpt/web-bundle/subresource-loading/subresource-loading-from-web-bundle.tentative.html
@@ -16,6 +16,18 @@ }, "Subresource loading with WebBundle"); promise_test(async () => { + const response = await fetch('http://web-platform.test:8001/root.js'); + const text = await response.text(); + assert_equals(text, "export * from './submodule.js';\n"); + }, "Subresource loading with WebBundle (Fetch API)"); + + promise_test(t => { + const url = + '/common/redirect.py?location=http://web-platform.test:8001/root.js'; + return promise_rejects_js(t, TypeError, import(url)); + }, "Subresource loading with WebBundle shouldn't affect redirect"); + + promise_test(async () => { const link = document.createElement("link"); link.rel = "webbundle"; link.href = "../resources/wbn/dynamic1.wbn";
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCDTMFSender-ontonechange.https-expected.txt b/third_party/blink/web_tests/external/wpt/webrtc/RTCDTMFSender-ontonechange.https-expected.txt index 622e37be..cb6e177 100644 --- a/third_party/blink/web_tests/external/wpt/webrtc/RTCDTMFSender-ontonechange.https-expected.txt +++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCDTMFSender-ontonechange.https-expected.txt
@@ -1,17 +1,17 @@ This is a testharness.js-based test. -Harness Error. harness_status.status = 1 , harness_status.message = Uncaught TypeError: transceiver.stop is not a function PASS insertDTMF() with default duration and intertoneGap should fire tonechange events at the expected time PASS insertDTMF() with explicit duration and intertoneGap should fire tonechange events at the expected time PASS insertDTMF('') should not fire any tonechange event, including for '' tone PASS insertDTMF() with duration less than 40 should be clamped to 40 PASS insertDTMF() with interToneGap less than 30 should be clamped to 30 PASS insertDTMF with comma should delay next tonechange event for a constant 2000ms -FAIL insertDTMF() with transceiver stopped in the middle should stop future tonechange events from firing assert_greater_than: More tonechange event is fired than expected expected a number greater than 0 but got 0 +PASS insertDTMF() with transceiver stopped in the middle should stop future tonechange events from firing PASS Calling insertDTMF() in the middle of tonechange events should cause future tonechanges to be updated to new tones PASS Calling insertDTMF() multiple times in the middle of tonechange events should cause future tonechanges to be updated the last provided tones PASS Calling insertDTMF('') in the middle of tonechange events should stop future tonechange events from firing -FAIL Setting transceiver.currentDirection to recvonly in the middle of tonechange events should stop future tonechange events from firing Failed to execute 'insertDTMF' on 'RTCDTMFSender': The 'canInsertDTMF' attribute is false: this sender cannot send DTMF. +PASS Setting transceiver.currentDirection to recvonly in the middle of tonechange events should stop future tonechange events from firing PASS Tone change event constructor works PASS Tone change event with unexpected name should not crash +FAIL Tone change event init optional parameters Failed to construct 'RTCDTMFToneChangeEvent': 2 arguments required, but only 1 present. Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html new file mode 100644 index 0000000..11fc4e4f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html
@@ -0,0 +1,106 @@ +<!doctype html> +<title>Test RTCPeerConnection.prototype.addIceCandidate</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="RTCPeerConnection-helper.js"></script> +<script> + 'use strict'; + +// This test may be flaky, so it's in its own file. +// The test belongs in RTCPeerConnection-addIceCandidate. + +promise_test(async t => { + const pc1 = new RTCPeerConnection(); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + t.add_cleanup(() => pc2.close()); + const transceiver = pc1.addTransceiver('video'); + + exchangeIceCandidates(pc1, pc2); + await exchangeOffer(pc1, pc2); + const answer = await pc2.createAnswer(); + // Note that sequence of the following two calls is critical + // for test stability. + await pc1.setRemoteDescription(answer); + await pc2.setLocalDescription(answer); + await waitForState(transceiver.sender.transport, 'connected'); +}, 'Candidates are added dynamically; connection should work'); + +promise_test(async t => { + const pc1 = new RTCPeerConnection(); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + t.add_cleanup(() => pc2.close()); + const transceiver = pc1.addTransceiver('video'); + + let candidates1to2 = []; + let candidates2to1 = []; + pc1.onicecandidate = event => { + if (event.candidate) { + candidates1to2.push(event.candidate); + } + } + pc2.onicecandidate = event => { + if (event.candidate) { + candidates2to1.push(event.candidate); + } + } + const pc2GatheredCandidates = new Promise((resolve) => { + pc2.addEventListener('icegatheringstatechange', () => { + if (pc2.iceGatheringState == 'complete') { + resolve(); + } + }); + }); + await exchangeOffer(pc1, pc2); + let answer = await pc2.createAnswer(); + await pc1.setRemoteDescription(answer); + await pc2.setLocalDescription(answer); + await pc2GatheredCandidates; + // Add candidates to pc1, ensuring that it goes to "connecting" state before "connected". + for (let candidate of candidates2to1) { + await pc1.addIceCandidate(candidate); + } + await waitForState(transceiver.sender.transport, 'connecting'); + await waitForState(transceiver.sender.transport, 'connected'); +}, 'Candidates are added at PC1; connection should work'); + +promise_test(async t => { + const pc1 = new RTCPeerConnection(); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + t.add_cleanup(() => pc2.close()); + const transceiver = pc1.addTransceiver('video'); + + let candidates1to2 = []; + let candidates2to1 = []; + pc1.onicecandidate = event => { + if (event.candidate) { + candidates1to2.push(event.candidate); + } + } + pc2.onicecandidate = event => { + if (event.candidate) { + candidates2to1.push(event.candidate); + } + } + const pc1GatheredCandidates = new Promise((resolve) => { + pc1.addEventListener('icegatheringstatechange', () => { + if (pc1.iceGatheringState == 'complete') { + resolve(); + } + }); + }); + await exchangeOffer(pc1, pc2); + let answer = await pc2.createAnswer(); + await pc1.setRemoteDescription(answer); + await pc2.setLocalDescription(answer); + await pc1GatheredCandidates; + // Add candidates to pc2 + for (let candidate of candidates1to2) { + await pc2.addIceCandidate(candidate); + } + await waitForState(transceiver.sender.transport, 'connected'); +}, 'Candidates are added at PC2; connection should work'); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-addIceCandidate.html b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-addIceCandidate.html index c68e442a..5fcb6e86 100644 --- a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-addIceCandidate.html +++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-addIceCandidate.html
@@ -2,6 +2,7 @@ <title>Test RTCPeerConnection.prototype.addIceCandidate</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="RTCPeerConnection-helper.js"></script> <script> 'use strict'; @@ -224,18 +225,20 @@ pc.addIceCandidate({usernameFragment: "no such ufrag"})); }, 'addIceCandidate({usernameFragment: "no such ufrag"}) should not work'); - promise_test(t => { + promise_test(async t => { const pc = new RTCPeerConnection(); t.add_cleanup(() => pc.close()); - return pc.setRemoteDescription(sessionDesc) - .then(() => pc.addIceCandidate({ + await pc.setRemoteDescription(sessionDesc) + await pc.addIceCandidate({ candidate: candidateStr1, sdpMid: sdpMid1, sdpMLineIndex: sdpMLineIndex1, usernameFragement: usernameFragment1 - })); + }); + assert_candidate_line_after(pc.remoteDescription.sdp, + mediaLine1, candidateStr1); }, 'Add ICE candidate after setting remote description should succeed'); promise_test(t => { @@ -256,7 +259,6 @@ const pc = new RTCPeerConnection(); t.add_cleanup(() => pc.close()); - return pc.setRemoteDescription(sessionDesc) .then(() => pc.addIceCandidate({ candidate: candidateStr1,
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-helper-test.html b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-helper-test.html new file mode 100644 index 0000000..42f6652 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-helper-test.html
@@ -0,0 +1,21 @@ +<!doctype html> +<meta charset=utf-8> +<title>RTCPeerConnection-helper tests</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="RTCPeerConnection-helper.js"></script> +<script> +'use strict'; + +promise_test(async t => { + const pc1 = new RTCPeerConnection(); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + t.add_cleanup(() => pc2.close()); + const transceiver = pc1.addTransceiver('video'); + + exchangeIceCandidates(pc1, pc2); + await exchangeOfferAnswer(pc1, pc2); + await waitForState(transceiver.sender.transport, 'connected'); +}, 'Setting up a connection using helpers and defaults should work'); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-setDescription-transceiver-expected.txt b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-setDescription-transceiver-expected.txt deleted file mode 100644 index bee8749..0000000 --- a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-setDescription-transceiver-expected.txt +++ /dev/null
@@ -1,9 +0,0 @@ -This is a testharness.js-based test. -PASS setLocalDescription(offer) with m= section should assign mid to corresponding transceiver -PASS setRemoteDescription(offer) with m= section and no existing transceiver should create corresponding transceiver -PASS setLocalDescription(rollback) should unset transceiver.mid -PASS setLocalDescription(rollback) should only unset transceiver mids associated with current round -PASS setRemoteDescription(rollback) should remove newly created transceiver from transceiver list -FAIL setRemoteDescription should stop the transceiver if its corresponding m section is rejected assert_true: Transceiver is stopped expected true got false -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-setDescription-transceiver.html b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-setDescription-transceiver.html index a8056d4..9bbab30 100644 --- a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-setDescription-transceiver.html +++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-setDescription-transceiver.html
@@ -248,18 +248,14 @@ const offer = await pc1.createOffer(); await pc1.setLocalDescription(offer); - assert_false(pc1.getTransceivers()[0].stopped, 'Transceiver is not stopped'); - await pc2.setRemoteDescription(offer); pc2.getTransceivers()[0].stop(); const answer = await pc2.createAnswer(); await pc1.setRemoteDescription(answer); - assert_true(pc1.getTransceivers()[0].stopped, 'Transceiver is stopped'); - assert_equals(pc1.getReceivers().length, 0, 'getReceivers does not expose a receiver of a stopped transceiver'); - assert_equals(pc1.getSenders().length, 0, 'getSenders does not expose a sender of a stopped transceiver'); - }, 'setRemoteDescription should stop the transceiver if its corresponding m section is rejected'); + assert_equals(pc1.getTransceivers()[0].currentDirection, 'inactive', 'A stopped m-line should give an inactive transceiver'); + }, 'setRemoteDescription should set transceiver inactive if its corresponding m section is rejected'); /* TODO
diff --git a/third_party/blink/web_tests/http/tests/webmidi/mock-midiservice.js b/third_party/blink/web_tests/http/tests/webmidi/mock-midiservice.js index fed94f7d..e2bc9605 100644 --- a/third_party/blink/web_tests/http/tests/webmidi/mock-midiservice.js +++ b/third_party/blink/web_tests/http/tests/webmidi/mock-midiservice.js
@@ -9,7 +9,7 @@ this.start_session_result_ = midi.mojom.Result.OK; this.interceptor_ = new MojoInterfaceInterceptor( - midi.mojom.MidiSessionProvider.name, 'process'); + midi.mojom.MidiSessionProvider.name); this.binding_ = new mojo.Binding(midi.mojom.MidiSessionProvider, this); this.session_binding_ = new mojo.Binding(midi.mojom.MidiSession, this); this.interceptor_.oninterfacerequest = e => {
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/text-antialias/international/bidi-innertext-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/text-antialias/international/bidi-innertext-expected.png new file mode 100644 index 0000000..b790573 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/text-antialias/international/bidi-innertext-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/apply-start-width-after-skipped-text-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/apply-start-width-after-skipped-text-expected.png index 605b04e..caab5e5 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/apply-start-width-after-skipped-text-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/apply-start-width-after-skipped-text-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/whitespace/tab-character-basics-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/whitespace/tab-character-basics-expected.png index 51ad2db..b08ce32 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/whitespace/tab-character-basics-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/text-antialias/whitespace/tab-character-basics-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/text-antialias/apply-start-width-after-skipped-text-expected.png b/third_party/blink/web_tests/platform/mac/virtual/text-antialias/apply-start-width-after-skipped-text-expected.png index e9fdf44..1a775964 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/text-antialias/apply-start-width-after-skipped-text-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/text-antialias/apply-start-width-after-skipped-text-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/apply-start-width-after-skipped-text-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/apply-start-width-after-skipped-text-expected.png index a46017d..6d3a945 100644 --- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/apply-start-width-after-skipped-text-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/apply-start-width-after-skipped-text-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/apply-start-width-after-skipped-text-expected.png b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/apply-start-width-after-skipped-text-expected.png index 9ead6e8c..eee1e41 100644 --- a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/apply-start-width-after-skipped-text-expected.png +++ b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/apply-start-width-after-skipped-text-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/virtual/dark-mode-images-filter-all/dark-mode/images/gradient-invert-expected.png b/third_party/blink/web_tests/virtual/dark-mode-images-filter-all/dark-mode/images/gradient-expected.png similarity index 100% rename from third_party/blink/web_tests/virtual/dark-mode-images-filter-all/dark-mode/images/gradient-invert-expected.png rename to third_party/blink/web_tests/virtual/dark-mode-images-filter-all/dark-mode/images/gradient-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/virtual/dark-mode-images-filter-all/dark-mode/images/gradient-noinvert-expected.png b/third_party/blink/web_tests/virtual/dark-mode-images-filter-all/dark-mode/images/gradient-noinvert-expected.png deleted file mode 100644 index c024f62a..0000000 --- a/third_party/blink/web_tests/virtual/dark-mode-images-filter-all/dark-mode/images/gradient-noinvert-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/virtual/dark-mode-images-filter-all/dark-mode/images/image-invert-expected.png b/third_party/blink/web_tests/virtual/dark-mode-images-filter-all/dark-mode/images/image-expected.png similarity index 100% rename from third_party/blink/web_tests/virtual/dark-mode-images-filter-all/dark-mode/images/image-invert-expected.png rename to third_party/blink/web_tests/virtual/dark-mode-images-filter-all/dark-mode/images/image-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/virtual/dark-mode-images-filter-all/dark-mode/images/image-noinvert-expected.png b/third_party/blink/web_tests/virtual/dark-mode-images-filter-all/dark-mode/images/image-noinvert-expected.png deleted file mode 100644 index 2a73df1..0000000 --- a/third_party/blink/web_tests/virtual/dark-mode-images-filter-all/dark-mode/images/image-noinvert-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/virtual/dark-mode-images-filter-none/dark-mode/images/gradient-invert-expected.png b/third_party/blink/web_tests/virtual/dark-mode-images-filter-none/dark-mode/images/gradient-expected.png similarity index 100% rename from third_party/blink/web_tests/virtual/dark-mode-images-filter-none/dark-mode/images/gradient-invert-expected.png rename to third_party/blink/web_tests/virtual/dark-mode-images-filter-none/dark-mode/images/gradient-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/virtual/dark-mode-images-filter-none/dark-mode/images/gradient-noinvert-expected.png b/third_party/blink/web_tests/virtual/dark-mode-images-filter-none/dark-mode/images/gradient-noinvert-expected.png deleted file mode 100644 index da69f70..0000000 --- a/third_party/blink/web_tests/virtual/dark-mode-images-filter-none/dark-mode/images/gradient-noinvert-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/virtual/dark-mode-images-filter-none/dark-mode/images/image-invert-expected.png b/third_party/blink/web_tests/virtual/dark-mode-images-filter-none/dark-mode/images/image-expected.png similarity index 100% rename from third_party/blink/web_tests/virtual/dark-mode-images-filter-none/dark-mode/images/image-invert-expected.png rename to third_party/blink/web_tests/virtual/dark-mode-images-filter-none/dark-mode/images/image-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/virtual/dark-mode-images-filter-none/dark-mode/images/image-noinvert-expected.png b/third_party/blink/web_tests/virtual/dark-mode-images-filter-none/dark-mode/images/image-noinvert-expected.png deleted file mode 100644 index d22720e..0000000 --- a/third_party/blink/web_tests/virtual/dark-mode-images-filter-none/dark-mode/images/image-noinvert-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/virtual/dark-mode-images-grayscale/dark-mode/images/gradient-invert-expected.png b/third_party/blink/web_tests/virtual/dark-mode-images-grayscale/dark-mode/images/gradient-expected.png similarity index 100% rename from third_party/blink/web_tests/virtual/dark-mode-images-grayscale/dark-mode/images/gradient-invert-expected.png rename to third_party/blink/web_tests/virtual/dark-mode-images-grayscale/dark-mode/images/gradient-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/virtual/dark-mode-images-grayscale/dark-mode/images/gradient-noinvert-expected.png b/third_party/blink/web_tests/virtual/dark-mode-images-grayscale/dark-mode/images/gradient-noinvert-expected.png deleted file mode 100644 index c024f62a..0000000 --- a/third_party/blink/web_tests/virtual/dark-mode-images-grayscale/dark-mode/images/gradient-noinvert-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/virtual/dark-mode-images-grayscale/dark-mode/images/image-invert-expected.png b/third_party/blink/web_tests/virtual/dark-mode-images-grayscale/dark-mode/images/image-expected.png similarity index 100% rename from third_party/blink/web_tests/virtual/dark-mode-images-grayscale/dark-mode/images/image-invert-expected.png rename to third_party/blink/web_tests/virtual/dark-mode-images-grayscale/dark-mode/images/image-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/virtual/dark-mode-images-grayscale/dark-mode/images/image-noinvert-expected.png b/third_party/blink/web_tests/virtual/dark-mode-images-grayscale/dark-mode/images/image-noinvert-expected.png deleted file mode 100644 index 2a73df1..0000000 --- a/third_party/blink/web_tests/virtual/dark-mode-images-grayscale/dark-mode/images/image-noinvert-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup-expected.txt b/third_party/blink/web_tests/virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup-expected.txt new file mode 100644 index 0000000..265f4ad --- /dev/null +++ b/third_party/blink/web_tests/virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup-expected.txt
@@ -0,0 +1,6 @@ +This is a testharness.js-based test. +FAIL Candidates are added dynamically; connection should work promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'." +FAIL Candidates are added at PC1; connection should work promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'." +FAIL Candidates are added at PC2; connection should work promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'." +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCPeerConnection-helper-test-expected.txt b/third_party/blink/web_tests/virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCPeerConnection-helper-test-expected.txt new file mode 100644 index 0000000..1b5c8dc --- /dev/null +++ b/third_party/blink/web_tests/virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCPeerConnection-helper-test-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL Setting up a connection using helpers and defaults should work promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'." +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCPeerConnection-setDescription-transceiver-expected.txt b/third_party/blink/web_tests/virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCPeerConnection-setDescription-transceiver-expected.txt index 5051a05..d953cc0 100644 --- a/third_party/blink/web_tests/virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCPeerConnection-setDescription-transceiver-expected.txt +++ b/third_party/blink/web_tests/virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCPeerConnection-setDescription-transceiver-expected.txt
@@ -4,6 +4,6 @@ FAIL setLocalDescription(rollback) should unset transceiver.mid Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'. FAIL setLocalDescription(rollback) should only unset transceiver mids associated with current round Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'. FAIL setRemoteDescription(rollback) should remove newly created transceiver from transceiver list Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'. -FAIL setRemoteDescription should stop the transceiver if its corresponding m section is rejected promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'." +FAIL setRemoteDescription should set transceiver inactive if its corresponding m section is rejected promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'." Harness: the test ran to completion.
diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ids.spec index 32c6f27..902db6a2 100644 --- a/tools/gritsettings/resource_ids.spec +++ b/tools/gritsettings/resource_ids.spec
@@ -328,9 +328,6 @@ "chromeos/components/diagnostics_ui/resources/diagnostics_app_resources.grd": { "includes": [2517], }, - "chromeos/components/file_manager/resources/file_manager_resources.grd": { - "includes": [2518], - }, "chromeos/components/help_app_ui/resources/help_app_resources.grd": { "includes": [2520], },
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 0cd38739..36f08be 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -14048,6 +14048,7 @@ <int value="2" label="Failed VM Stopped"/> <int value="3" label="Failed VM Started"/> <int value="4" label="Failed Architecture mismatch"/> + <int value="5" label="Failed Insufficient Space"/> </enum> <enum name="CrostiniResult"> @@ -29158,6 +29159,7 @@ <int value="3468" label="TimerInstallFromBeforeUnload"/> <int value="3469" label="TimerInstallFromUnload"/> <int value="3470" label="ElementAttachInternalsBeforeConstructor"/> + <int value="3471" label="SMILElementHasRepeatNEventListener"/> </enum> <enum name="FeaturePolicyAllowlistType"> @@ -33351,7 +33353,7 @@ <int value="12" label="kGaiaFlowRejected"/> <int value="13" label="kRemoteConsentFlowRejected"/> <int value="14" label="kUserNotSignedIn"/> - <int value="15" label="kNotWhitelistedInPublicSession"/> + <int value="15" label="kNotAllowlistedInPublicSession"/> <int value="16" label="kSignInFailed"/> <int value="17" label="kRemoteConsentUserNotSignedIn"/> <int value="18" label="kUserNonPrimary"/> @@ -41218,6 +41220,8 @@ <int value="-1410001116" label="EnableAmbientAuthenticationInGuestSession:disabled"/> <int value="-1409643943" label="enable-child-account-detection"/> + <int value="-1408981164" + label="DesktopPWAsMigrationUserDisplayModeCleanUp:enabled"/> <int value="-1408869905" label="AutofillEnforceMinRequiredFieldsForQuery:disabled"/> <int value="-1408370474" label="AssistantRoutines:enabled"/> @@ -43878,6 +43882,8 @@ label="AutofillDoNotUploadSaveUnsupportedCards:enabled"/> <int value="1353113954" label="EnableMDRoundedCornersOnDialogs:enabled"/> <int value="1353629763" label="MediaSessionAccelerators:enabled"/> + <int value="1355656242" + label="DesktopPWAsMigrationUserDisplayModeCleanUp:disabled"/> <int value="1355923367" label="CrOSContainer:disabled"/> <int value="1356161410" label="VizHitTestSurfaceLayer:enabled"/> <int value="1359972809" label="enable-gesture-deletion"/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index 03a558e..144970f 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -27558,7 +27558,7 @@ </histogram> <histogram name="ChromeOS.SAML.APILogin" enum="ChromeOSSamlApiUsed" - expires_after="2020-10-02"> + expires_after="2021-04-02"> <owner>mslus@chromium.org</owner> <owner>emaxx@chromium.org</owner> <summary> @@ -47560,6 +47560,9 @@ <histogram name="Download.ResumptionRestart.Counts" enum="DownloadResumptionRestartCountType" expires_after="2020-10-25"> + <obsolete> + Removed in 09/2020. + </obsolete> <owner>qinmin@chromium.org</owner> <owner>xingliu@chromium.org</owner> <summary> @@ -192344,6 +192347,21 @@ </summary> </histogram> +<histogram name="WebApp.Migration.UserDisplayModeCleanUp" + enum="BooleanMigrated" expires_after="2021-01-01"> + <owner>alancutter@chromium.org</owner> + <owner>dxie@google.com</owner> + <owner>loyso@google.com</owner> + <owner>mgiuca@google.com</owner> + <summary> + The result of deploying a follow up migration after a migration bug + (https://crbug.com/1125020) that caused users' web apps to open in a browser + tab instead of a standalone window. This follow up migration only runs once + at startup for all Chrome profiles. If it fails it will retry until + successful on subsequent start ups, metrics are only recorded on success. + </summary> +</histogram> + <histogram name="Webapp.NavigationStatus" enum="BooleanSuccess" expires_after="M90"> <owner>peter@chromium.org</owner> @@ -208037,6 +208055,8 @@ <suffix name="OfflinePages" label="Showing cache patterns only for OfflinePages."/> <suffix name="QueryTiles" label="Showing Query tiles images."/> + <suffix name="VideoTutorials" + label="Showing thumbnails for video tutorials."/> <affected-histogram name="ImageFetcher.Events"/> <affected-histogram name="ImageFetcher.ImageLoadFromCacheTime"/> <affected-histogram name="ImageFetcher.ImageLoadFromCacheTimeJava"/>
diff --git a/tools/traffic_annotation/summary/annotations.xml b/tools/traffic_annotation/summary/annotations.xml index 71ff201..1e1301d4 100644 --- a/tools/traffic_annotation/summary/annotations.xml +++ b/tools/traffic_annotation/summary/annotations.xml
@@ -59,7 +59,7 @@ <item id="content_suggestion_get_favicon" hash_code="16653985" type="0" content_hash_code="134280933" os_list="linux,windows" file_path="components/ntp_snippets/content_suggestions_service.cc"/> <item id="conversion_measurement_report" hash_code="113422320" type="0" content_hash_code="60688877" os_list="linux,windows" file_path="content/browser/conversions/conversion_network_sender_impl.cc"/> <item id="credenential_avatar" hash_code="53695122" type="0" content_hash_code="113035371" os_list="linux,windows" file_path="chrome/browser/ui/passwords/account_avatar_fetcher.cc"/> - <item id="cros_recovery_image_download" hash_code="101725581" type="0" content_hash_code="23088027" os_list="linux,windows" file_path="chrome/browser/extensions/api/image_writer_private/write_from_url_operation.cc"/> + <item id="cros_recovery_image_download" hash_code="101725581" type="0" content_hash_code="10999698" os_list="linux,windows" file_path="chrome/browser/extensions/api/image_writer_private/write_from_url_operation.cc"/> <item id="cryptauth_device_sync_tickle" hash_code="96565489" type="1" second_id="29188932" deprecated="2018-03-15" content_hash_code="115714668" file_path=""/> <item id="cryptauth_enrollment_flow_finish" hash_code="54836939" type="1" second_id="29188932" deprecated="2018-04-04" content_hash_code="17060642" file_path=""/> <item id="cryptauth_enrollment_flow_setup" hash_code="84889397" type="1" second_id="29188932" deprecated="2018-04-04" content_hash_code="128348931" file_path=""/>
diff --git a/ui/base/x/x11_software_bitmap_presenter.cc b/ui/base/x/x11_software_bitmap_presenter.cc index f064b17..0894413 100644 --- a/ui/base/x/x11_software_bitmap_presenter.cc +++ b/ui/base/x/x11_software_bitmap_presenter.cc
@@ -199,7 +199,7 @@ if (ShmPoolReady()) { // TODO(thomasanderson): Investigate direct rendering with DRI3 to avoid any // unnecessary X11 IPC or buffer copying. - connection_->shm().PutImage({ + x11::Shm::PutImageRequest put_image_request{ .drawable = widget_, .gc = gc_, .total_width = shm_pool_->CurrentBitmap().width(), @@ -215,7 +215,8 @@ .send_event = enable_multibuffering_, .shmseg = shm_pool_->CurrentSegment(), .offset = 0, - }); + }; + connection_->shm().PutImage(put_image_request); needs_swap_ = true; // Flush now to ensure the X server gets the request as early as // possible to reduce frame-to-frame latency.
diff --git a/ui/events/ozone/evdev/event_device_info.cc b/ui/events/ozone/evdev/event_device_info.cc index 1f8a5df..e5f3ea5 100644 --- a/ui/events/ozone/evdev/event_device_info.cc +++ b/ui/events/ozone/evdev/event_device_info.cc
@@ -47,6 +47,7 @@ {0x056e, 0x0141}, // Elecom EPRIM Blue LED 5 button mouse 228 {0x056e, 0x0159}, // Elecom Blue LED Mouse 203 {0x05e0, 0x1200}, // Zebra LS2208 barcode scanner + {0x0c45, 0x7403}, // RDing FootSwitch1F1 {0x1bcf, 0x08a0}, // Kensington Pro Fit Full-size };
diff --git a/ui/message_center/views/message_view.h b/ui/message_center/views/message_view.h index 0aea059a..af921ef 100644 --- a/ui/message_center/views/message_view.h +++ b/ui/message_center/views/message_view.h
@@ -191,6 +191,8 @@ views::FocusRing* focus_ring() { return focus_ring_; } + int bottom_radius() const { return bottom_radius_; } + private: friend class test::MessagePopupCollectionTest;
diff --git a/ui/message_center/views/notification_control_buttons_unittest.cc b/ui/message_center/views/notification_control_buttons_unittest.cc index 2ce2e4c..b5354da7 100644 --- a/ui/message_center/views/notification_control_buttons_unittest.cc +++ b/ui/message_center/views/notification_control_buttons_unittest.cc
@@ -6,8 +6,13 @@ #include "base/strings/utf_string_conversions.h" #include "testing/gtest/include/gtest/gtest.h" +#include "ui/gfx/color_palette.h" +#include "ui/gfx/color_utils.h" #include "ui/gfx/image/image.h" +#include "ui/gfx/image/image_unittest_util.h" +#include "ui/gfx/paint_vector_icon.h" #include "ui/message_center/public/cpp/notification.h" +#include "ui/message_center/vector_icons.h" #include "ui/message_center/views/message_view.h" namespace message_center { @@ -50,6 +55,23 @@ return message_view_->GetControlButtonsView(); } + bool MatchesIcon(PaddedButton* button, + const gfx::VectorIcon& icon, + SkColor color) { + SkBitmap expected = *gfx::CreateVectorIcon(icon, color).bitmap(); + SkBitmap actual = *button->GetImage(views::Button::STATE_NORMAL).bitmap(); + return gfx::test::AreBitmapsEqual(expected, actual); + } + + void ExpectIconColor(SkColor color) { + EXPECT_TRUE(MatchesIcon(buttons_view()->close_button(), + kNotificationCloseButtonIcon, color)); + EXPECT_TRUE(MatchesIcon(buttons_view()->settings_button(), + kNotificationSettingsButtonIcon, color)); + EXPECT_TRUE(MatchesIcon(buttons_view()->snooze_button(), + kNotificationSnoozeButtonIcon, color)); + } + private: std::unique_ptr<TestMessageView> message_view_; @@ -78,4 +100,37 @@ EXPECT_EQ(nullptr, buttons_view()->snooze_button()); } +TEST_F(NotificationControlButtonsTest, IconColor_NoContrastEnforcement) { + buttons_view()->ShowCloseButton(true); + buttons_view()->ShowSettingsButton(true); + buttons_view()->ShowSnoozeButton(true); + + // Default icon color. + ExpectIconColor(gfx::kChromeIconGrey); + + // Without setting a background color we won't enforce contrast ratios. + buttons_view()->SetButtonIconColors(SK_ColorWHITE); + ExpectIconColor(SK_ColorWHITE); + buttons_view()->SetButtonIconColors(SK_ColorBLACK); + ExpectIconColor(SK_ColorBLACK); +} + +TEST_F(NotificationControlButtonsTest, IconColor_ContrastEnforcement) { + buttons_view()->ShowCloseButton(true); + buttons_view()->ShowSettingsButton(true); + buttons_view()->ShowSnoozeButton(true); + + // A bright background should enforce dark enough icons. + buttons_view()->SetBackgroundColor(SK_ColorWHITE); + buttons_view()->SetButtonIconColors(SK_ColorWHITE); + ExpectIconColor( + color_utils::BlendForMinContrast(SK_ColorWHITE, SK_ColorWHITE).color); + + // A dark background should enforce bright enough icons. + buttons_view()->SetBackgroundColor(SK_ColorBLACK); + buttons_view()->SetButtonIconColors(SK_ColorBLACK); + ExpectIconColor( + color_utils::BlendForMinContrast(SK_ColorBLACK, SK_ColorBLACK).color); +} + } // namespace message_center
diff --git a/ui/message_center/views/notification_control_buttons_view.cc b/ui/message_center/views/notification_control_buttons_view.cc index a710999..72f4805c 100644 --- a/ui/message_center/views/notification_control_buttons_view.cc +++ b/ui/message_center/views/notification_control_buttons_view.cc
@@ -10,6 +10,7 @@ #include "ui/compositor/layer.h" #include "ui/events/event.h" #include "ui/gfx/color_palette.h" +#include "ui/gfx/color_utils.h" #include "ui/gfx/paint_vector_icon.h" #include "ui/message_center/public/cpp/message_center_constants.h" #include "ui/message_center/vector_icons.h" @@ -44,9 +45,9 @@ void NotificationControlButtonsView::ShowCloseButton(bool show) { if (show && !close_button_) { close_button_ = AddChildView(std::make_unique<PaddedButton>(this)); - close_button_->SetImage( - views::Button::STATE_NORMAL, - gfx::CreateVectorIcon(kNotificationCloseButtonIcon, icon_color_)); + close_button_->SetImage(views::Button::STATE_NORMAL, + gfx::CreateVectorIcon(kNotificationCloseButtonIcon, + DetermineButtonIconColor())); close_button_->SetAccessibleName(l10n_util::GetStringUTF16( IDS_MESSAGE_CENTER_CLOSE_NOTIFICATION_BUTTON_ACCESSIBLE_NAME)); close_button_->SetTooltipText(l10n_util::GetStringUTF16( @@ -69,7 +70,8 @@ AddChildViewAt(std::make_unique<PaddedButton>(this), position); settings_button_->SetImage( views::Button::STATE_NORMAL, - gfx::CreateVectorIcon(kNotificationSettingsButtonIcon, icon_color_)); + gfx::CreateVectorIcon(kNotificationSettingsButtonIcon, + DetermineButtonIconColor())); settings_button_->SetAccessibleName(l10n_util::GetStringUTF16( IDS_MESSAGE_NOTIFICATION_SETTINGS_BUTTON_ACCESSIBLE_NAME)); settings_button_->SetTooltipText(l10n_util::GetStringUTF16( @@ -90,7 +92,8 @@ snooze_button_ = AddChildViewAt(std::make_unique<PaddedButton>(this), 0); snooze_button_->SetImage( views::Button::STATE_NORMAL, - gfx::CreateVectorIcon(kNotificationSnoozeButtonIcon, icon_color_)); + gfx::CreateVectorIcon(kNotificationSnoozeButtonIcon, + DetermineButtonIconColor())); snooze_button_->SetAccessibleName(l10n_util::GetStringUTF16( IDS_MESSAGE_CENTER_NOTIFICATION_SNOOZE_BUTTON_TOOLTIP)); snooze_button_->SetTooltipText(l10n_util::GetStringUTF16( @@ -123,22 +126,14 @@ if (color == icon_color_) return; icon_color_ = color; + UpdateButtonIconColors(); +} - if (close_button_) { - close_button_->SetImage( - views::Button::STATE_NORMAL, - gfx::CreateVectorIcon(kNotificationCloseButtonIcon, icon_color_)); - } - if (settings_button_) { - settings_button_->SetImage( - views::Button::STATE_NORMAL, - gfx::CreateVectorIcon(kNotificationSettingsButtonIcon, icon_color_)); - } - if (snooze_button_) { - snooze_button_->SetImage( - views::Button::STATE_NORMAL, - gfx::CreateVectorIcon(kNotificationSnoozeButtonIcon, icon_color_)); - } +void NotificationControlButtonsView::SetBackgroundColor(SkColor color) { + if (color == background_color_) + return; + background_color_ = color; + UpdateButtonIconColors(); } const char* NotificationControlButtonsView::GetClassName() const { @@ -164,4 +159,30 @@ } } +void NotificationControlButtonsView::UpdateButtonIconColors() { + SkColor icon_color = DetermineButtonIconColor(); + if (close_button_) { + close_button_->SetImage( + views::Button::STATE_NORMAL, + gfx::CreateVectorIcon(kNotificationCloseButtonIcon, icon_color)); + } + if (settings_button_) { + settings_button_->SetImage( + views::Button::STATE_NORMAL, + gfx::CreateVectorIcon(kNotificationSettingsButtonIcon, icon_color)); + } + if (snooze_button_) { + snooze_button_->SetImage( + views::Button::STATE_NORMAL, + gfx::CreateVectorIcon(kNotificationSnoozeButtonIcon, icon_color)); + } +} + +SkColor NotificationControlButtonsView::DetermineButtonIconColor() const { + if (SkColorGetA(background_color_) != SK_AlphaOPAQUE) + return icon_color_; + + return color_utils::BlendForMinContrast(icon_color_, background_color_).color; +} + } // namespace message_center
diff --git a/ui/message_center/views/notification_control_buttons_view.h b/ui/message_center/views/notification_control_buttons_view.h index 46821dc..e100d6c 100644 --- a/ui/message_center/views/notification_control_buttons_view.h +++ b/ui/message_center/views/notification_control_buttons_view.h
@@ -52,10 +52,13 @@ // Sets the icon color for the close, settings, and snooze buttons. void SetButtonIconColors(SkColor color); + // Sets the background color to ensure proper readability. + void SetBackgroundColor(SkColor color); + // Methods for retrieving the control buttons directly. - views::Button* close_button() { return close_button_; } - views::Button* settings_button() { return settings_button_; } - views::Button* snooze_button() { return snooze_button_; } + PaddedButton* close_button() { return close_button_; } + PaddedButton* settings_button() { return settings_button_; } + PaddedButton* snooze_button() { return snooze_button_; } // views::View const char* GetClassName() const override; @@ -67,6 +70,13 @@ void ButtonPressed(views::Button* sender, const ui::Event& event) override; private: + // Updates the button icon colors to the value of DetermineButtonIconColor(). + void UpdateButtonIconColors(); + + // Determines the button icon color to use given |icon_color_| and + // |background_color_| ensuring readability. + SkColor DetermineButtonIconColor() const; + MessageView* message_view_; PaddedButton* close_button_ = nullptr; @@ -75,6 +85,8 @@ // The color used for the close, settings, and snooze icons. SkColor icon_color_; + // The background color for readability of the icons. + SkColor background_color_ = SK_ColorTRANSPARENT; DISALLOW_COPY_AND_ASSIGN(NotificationControlButtonsView); };
diff --git a/ui/message_center/views/notification_header_view.cc b/ui/message_center/views/notification_header_view.cc index a9d2c14..1dc4c9f 100644 --- a/ui/message_center/views/notification_header_view.cc +++ b/ui/message_center/views/notification_header_view.cc
@@ -45,7 +45,7 @@ // Default paddings of the views of texts. Adjusted on Windows. // Top: 9px = 11px (from the mock) - 2px (outer padding). -// Buttom: 6px from the mock. +// Bottom: 6px from the mock. constexpr gfx::Insets kTextViewPaddingDefault(9, 0, 6, 0); // Paddings of the app icon (small image). @@ -70,8 +70,8 @@ // Minimum spacing before the control buttons. constexpr int kControlButtonSpacing = 16; -// ExpandButtton forwards all mouse and key events to NotificationHeaderView, -// but takes tab focus for accessibility purpose. +// ExpandButton forwards all mouse and key events to NotificationHeaderView, but +// takes tab focus for accessibility purpose. class ExpandButton : public views::ImageView { public: ExpandButton(); @@ -362,6 +362,7 @@ summary_text_view_->SetBackgroundColor(color); timestamp_divider_->SetBackgroundColor(color); timestamp_view_->SetBackgroundColor(color); + UpdateColors(); } void NotificationHeaderView::SetSubpixelRenderingEnabled(bool enabled) { @@ -404,13 +405,16 @@ summary_text_view_->SetEnabledColor(color); summary_text_divider_->SetEnabledColor(color); + // Get actual color based on readablility requirements. + SkColor actual_color = app_name_view_->GetEnabledColor(); + expand_button_->SetImage(gfx::CreateVectorIcon( is_expanded_ ? kNotificationExpandLessIcon : kNotificationExpandMoreIcon, - kExpandIconSize, color)); + kExpandIconSize, actual_color)); if (using_default_app_icon_) { app_icon_view_->SetImage( - gfx::CreateVectorIcon(kProductIcon, kSmallImageSizeMD, color)); + gfx::CreateVectorIcon(kProductIcon, kSmallImageSizeMD, actual_color)); } }
diff --git a/ui/message_center/views/notification_header_view_unittest.cc b/ui/message_center/views/notification_header_view_unittest.cc index 20c2e115..6f124adc 100644 --- a/ui/message_center/views/notification_header_view_unittest.cc +++ b/ui/message_center/views/notification_header_view_unittest.cc
@@ -9,6 +9,12 @@ #include "base/time/time.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/l10n/l10n_util.h" +#include "ui/gfx/color_palette.h" +#include "ui/gfx/color_utils.h" +#include "ui/gfx/image/image.h" +#include "ui/gfx/image/image_unittest_util.h" +#include "ui/gfx/paint_vector_icon.h" +#include "ui/message_center/vector_icons.h" #include "ui/strings/grit/ui_strings.h" #include "ui/views/controls/image_view.h" #include "ui/views/controls/label.h" @@ -46,6 +52,24 @@ ViewsTestBase::TearDown(); } + bool MatchesAppIconColor(SkColor color) { + SkBitmap expected = + *gfx::CreateVectorIcon(kProductIcon, kSmallImageSizeMD, color).bitmap(); + SkBitmap actual = + *notification_header_view_->app_icon_for_testing().bitmap(); + return gfx::test::AreBitmapsEqual(expected, actual); + } + + bool MatchesExpandIconColor(SkColor color) { + constexpr int kExpandIconSize = 8; + SkBitmap expected = *gfx::CreateVectorIcon(kNotificationExpandMoreIcon, + kExpandIconSize, color) + .bitmap(); + SkBitmap actual = + *notification_header_view_->expand_button()->GetImage().bitmap(); + return gfx::test::AreBitmapsEqual(expected, actual); + } + protected: NotificationHeaderView* notification_header_view_ = nullptr; @@ -156,4 +180,29 @@ EXPECT_TRUE(timestamp_view->GetVisible()); } +TEST_F(NotificationHeaderViewTest, ColorContrastEnforcement) { + notification_header_view_->SetSummaryText(base::ASCIIToUTF16("summary")); + auto* summary_text = notification_header_view_->summary_text_for_testing(); + notification_header_view_->ClearAppIcon(); + notification_header_view_->SetExpandButtonEnabled(true); + notification_header_view_->SetExpanded(false); + + // A bright background should enforce dark enough icons. + notification_header_view_->SetBackgroundColor(SK_ColorWHITE); + notification_header_view_->SetAccentColor(SK_ColorWHITE); + SkColor expected_color = + color_utils::BlendForMinContrast(SK_ColorWHITE, SK_ColorWHITE).color; + EXPECT_EQ(expected_color, summary_text->GetEnabledColor()); + EXPECT_TRUE(MatchesAppIconColor(expected_color)); + EXPECT_TRUE(MatchesExpandIconColor(expected_color)); + + // A dark background should enforce bright enough icons. + notification_header_view_->SetBackgroundColor(SK_ColorBLACK); + notification_header_view_->SetAccentColor(SK_ColorBLACK); + expected_color = + color_utils::BlendForMinContrast(SK_ColorBLACK, SK_ColorBLACK).color; + EXPECT_EQ(expected_color, summary_text->GetEnabledColor()); + EXPECT_TRUE(MatchesAppIconColor(expected_color)); + EXPECT_TRUE(MatchesExpandIconColor(expected_color)); +} } // namespace message_center
diff --git a/ui/message_center/views/notification_view_md.cc b/ui/message_center/views/notification_view_md.cc index 8964ff5..2660db8 100644 --- a/ui/message_center/views/notification_view_md.cc +++ b/ui/message_center/views/notification_view_md.cc
@@ -20,6 +20,7 @@ #include "ui/events/gesture_detection/gesture_provider_config_helper.h" #include "ui/gfx/canvas.h" #include "ui/gfx/color_palette.h" +#include "ui/gfx/color_utils.h" #include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/size.h" #include "ui/gfx/image/image_skia_operations.h" @@ -73,8 +74,7 @@ // and merge with contradicting |kNotificationIconSize|. constexpr gfx::Size kIconViewSize(36, 36); constexpr gfx::Insets kLargeImageContainerPadding(0, 16, 16, 16); -constexpr gfx::Size kLargeImageMinSize(328, 0); -constexpr gfx::Size kLargeImageMaxSize(328, 218); +constexpr int kLargeImageMaxHeight = 218; constexpr gfx::Insets kLeftContentPadding(2, 4, 0, 4); constexpr gfx::Insets kLeftContentPaddingWithIcon(2, 4, 0, 12); constexpr gfx::Insets kInputTextfieldPadding(16, 16, 16, 0); @@ -117,7 +117,7 @@ // In progress notification, if both the title and the message are long, the // message would be prioritized and the title would be elided. -// However, it is not perferable that we completely omit the title, so +// However, it is not preferable that we completely omit the title, so // the ratio of the message width is limited to this value. constexpr double kProgressNotificationMessageRatio = 0.7; @@ -167,7 +167,6 @@ title->SetFontList(font_list); title->SetCollapseWhenHidden(true); title->SetHorizontalAlignment(gfx::ALIGN_LEFT); - title->SetAutoColorReadabilityEnabled(false); view->AddChildView(title); views::Label* message = view->AddChildView(std::make_unique<views::Label>( @@ -178,7 +177,6 @@ message->SetFontList(font_list); message->SetCollapseWhenHidden(true); message->SetHorizontalAlignment(gfx::ALIGN_LEFT); - message->SetAutoColorReadabilityEnabled(false); return view; } @@ -265,15 +263,16 @@ // LargeImageView ////////////////////////////////////////////////////////////// -LargeImageView::LargeImageView() = default; +LargeImageView::LargeImageView(const gfx::Size& max_size) + : max_size_(max_size), min_size_(max_size_.width(), /*height=*/0) {} LargeImageView::~LargeImageView() = default; void LargeImageView::SetImage(const gfx::ImageSkia& image) { image_ = image; gfx::Size preferred_size = GetResizedImageSize(); - preferred_size.SetToMax(kLargeImageMinSize); - preferred_size.SetToMin(kLargeImageMaxSize); + preferred_size.SetToMax(min_size_); + preferred_size.SetToMin(max_size_); SetPreferredSize(preferred_size); SchedulePaint(); Layout(); @@ -284,7 +283,7 @@ gfx::Size resized_size = GetResizedImageSize(); gfx::Size drawn_size = resized_size; - drawn_size.SetToMin(kLargeImageMaxSize); + drawn_size.SetToMin(max_size_); gfx::Rect drawn_bounds = GetContentsBounds(); drawn_bounds.ClampToCenteredSize(drawn_size); @@ -309,19 +308,18 @@ } // Returns expected size of the image right after resizing. -// The GetResizedImageSize().width() <= kLargeImageMaxSize.width() holds, but -// GetResizedImageSize().height() may be larger than kLargeImageMaxSize.height() +// The GetResizedImageSize().width() <= max_size_.width() holds, but +// GetResizedImageSize().height() may be larger than max_size_.height(). // In this case, the overflown part will be just cutted off from the view. gfx::Size LargeImageView::GetResizedImageSize() { gfx::Size original_size = image_.size(); - if (original_size.width() <= kLargeImageMaxSize.width()) + if (original_size.width() <= max_size_.width()) return image_.size(); const double proportion = original_size.height() / static_cast<double>(original_size.width()); gfx::Size resized_size; - resized_size.SetSize(kLargeImageMaxSize.width(), - kLargeImageMaxSize.width() * proportion); + resized_size.SetSize(max_size_.width(), max_size_.width() * proportion); return resized_size; } @@ -343,6 +341,21 @@ // Overridden as no-op so we don't draw any background or border. } +void NotificationMdTextButton::OnThemeChanged() { + views::MdTextButton::OnThemeChanged(); + SetEnabledTextColors(text_color_); + label()->SetAutoColorReadabilityEnabled(true); + label()->SetBackgroundColor(GetNativeTheme()->GetSystemColor( + ui::NativeTheme::kColorId_NotificationActionsRowBackground)); +} + +void NotificationMdTextButton::OverrideTextColor( + base::Optional<SkColor> text_color) { + text_color_ = std::move(text_color); + SetEnabledTextColors(text_color_); + label()->SetAutoColorReadabilityEnabled(true); +} + BEGIN_METADATA(NotificationMdTextButton, views::MdTextButton) END_METADATA @@ -483,6 +496,7 @@ void OnThemeChanged() override { RadioButton::OnThemeChanged(); SetEnabledTextColors(GetTextColor()); + label()->SetAutoColorReadabilityEnabled(true); label()->SetBackgroundColor(GetNativeTheme()->GetSystemColor( ui::NativeTheme::kColorId_NotificationInlineSettingsBackground)); } @@ -517,7 +531,8 @@ class NotificationViewMD::NotificationViewMDPathGenerator : public views::HighlightPathGenerator { public: - NotificationViewMDPathGenerator() = default; + explicit NotificationViewMDPathGenerator(gfx::Insets insets) + : insets_(std::move(insets)) {} NotificationViewMDPathGenerator(const NotificationViewMDPathGenerator&) = delete; NotificationViewMDPathGenerator& operator=( @@ -528,6 +543,7 @@ gfx::RectF bounds = rect; if (!preferred_size_.IsEmpty()) bounds.set_size(gfx::SizeF(preferred_size_)); + bounds.Inset(insets_); gfx::RoundedCornersF corner_radius(top_radius_, top_radius_, bottom_radius_, bottom_radius_); return gfx::RRectF(bounds, corner_radius); @@ -540,6 +556,7 @@ private: int top_radius_ = 0; int bottom_radius_ = 0; + gfx::Insets insets_; // This custom PathGenerator is used for the ink drop clipping bounds. By // setting |preferred_size_| we set the correct clip bounds in @@ -581,6 +598,8 @@ // |header_row_| contains app_icon, app_name, control buttons, etc... header_row_ = new NotificationHeaderView(this); + header_row_->SetPreferredSize(header_row_->GetPreferredSize() - + gfx::Size(GetInsets().width(), 0)); control_buttons_view_ = header_row_->AddChildView( std::make_unique<NotificationControlButtonsView>(this)); AddChildView(header_row_); @@ -639,7 +658,7 @@ AddPreTargetHandler(click_activator_.get()); auto highlight_path_generator = - std::make_unique<NotificationViewMDPathGenerator>(); + std::make_unique<NotificationViewMDPathGenerator>(GetInsets()); highlight_path_generator_ = highlight_path_generator.get(); views::HighlightPathGenerator::Install(this, std::move(highlight_path_generator)); @@ -685,7 +704,7 @@ if (actions_row_->GetVisible()) { constexpr SkScalar kCornerRadius = SkIntToScalar(kNotificationCornerRadius); - // Use vertically larger clip path, so that actions row's top coners will + // Use vertically larger clip path, so that actions row's top corners will // not be rounded. SkPath path; gfx::Rect bounds = actions_row_->GetLocalBounds(); @@ -1074,12 +1093,18 @@ void NotificationViewMD::CreateOrUpdateSmallIconView( const Notification& notification) { + SkColor accent_color = + notification.accent_color().value_or(GetNativeTheme()->GetSystemColor( + ui::NativeTheme::kColorId_NotificationDefaultAccentColor)); + SkColor icon_color = + color_utils::BlendForMinContrast( + accent_color, GetNotificationHeaderViewBackgroundColor()) + .color; + // TODO(knollr): figure out if this has a performance impact and // cache images if so. (crbug.com/768748) - gfx::Image masked_small_icon = notification.GenerateMaskedSmallIcon( - kSmallImageSizeMD, - notification.accent_color().value_or(GetNativeTheme()->GetSystemColor( - ui::NativeTheme::kColorId_NotificationDefaultAccentColor))); + gfx::Image masked_small_icon = + notification.GenerateMaskedSmallIcon(kSmallImageSizeMD, icon_color); if (masked_small_icon.IsEmpty()) { header_row_->ClearAppIcon(); @@ -1105,7 +1130,10 @@ std::make_unique<views::FillLayout>()); image_container_view_->SetBorder( views::CreateEmptyBorder(kLargeImageContainerPadding)); - image_container_view_->AddChildView(new LargeImageView()); + int max_width = kNotificationWidth - kLargeImageContainerPadding.width() - + GetInsets().width(); + image_container_view_->AddChildView(std::make_unique<LargeImageView>( + gfx::Size(max_width, kLargeImageMaxHeight))); // Insert the created image container just after the |content_row_|. AddChildViewAt(image_container_view_, GetIndexOf(content_row_) + 1); @@ -1155,7 +1183,7 @@ } // Change action button color to the accent color. - action_buttons_[i]->SetEnabledTextColors(notification.accent_color()); + action_buttons_[i]->OverrideTextColor(notification.accent_color()); } // Inherit mouse hover state when action button views reset. @@ -1357,6 +1385,7 @@ else RemoveBackgroundAnimation(); + UpdateHeaderViewBackgroundColor(); Layout(); SchedulePaint(); @@ -1366,13 +1395,36 @@ MessageCenter::Get()->DisableNotification(notification_id()); } -void NotificationViewMD::UpdateCornerRadius(int top_radius, int bottom_radius) { - MessageView::UpdateCornerRadius(top_radius, bottom_radius); +void NotificationViewMD::UpdateHeaderViewBackgroundColor() { + SkColor header_background_color = GetNotificationHeaderViewBackgroundColor(); + header_row_->SetBackgroundColor(header_background_color); + control_buttons_view_->SetBackgroundColor(header_background_color); + + auto* notification = + MessageCenter::Get()->FindVisibleNotificationById(notification_id()); + if (notification) + CreateOrUpdateSmallIconView(*notification); +} + +SkColor NotificationViewMD::GetNotificationHeaderViewBackgroundColor() const { + bool inline_settings_visible = settings_row_ && settings_row_->GetVisible(); + return GetNativeTheme()->GetSystemColor( + inline_settings_visible + ? ui::NativeTheme::kColorId_NotificationInlineSettingsBackground + : ui::NativeTheme::kColorId_NotificationDefaultBackground); +} + +void NotificationViewMD::UpdateActionButtonsRowBackground() { action_buttons_row_->SetBackground(views::CreateBackgroundFromPainter( std::make_unique<NotificationBackgroundPainter>( - 0, bottom_radius, + /*top_radius=*/0, bottom_radius(), GetNativeTheme()->GetSystemColor( ui::NativeTheme::kColorId_NotificationActionsRowBackground)))); +} + +void NotificationViewMD::UpdateCornerRadius(int top_radius, int bottom_radius) { + MessageView::UpdateCornerRadius(top_radius, bottom_radius); + UpdateActionButtonsRowBackground(); highlight_path_generator_->set_top_radius(top_radius); highlight_path_generator_->set_bottom_radius(bottom_radius); } @@ -1415,16 +1467,8 @@ void NotificationViewMD::OnThemeChanged() { MessageView::OnThemeChanged(); - bool inline_settings_visible = settings_row_ && !settings_row_->GetVisible(); - header_row_->SetBackgroundColor(GetNativeTheme()->GetSystemColor( - inline_settings_visible - ? ui::NativeTheme::kColorId_NotificationInlineSettingsBackground - : ui::NativeTheme::kColorId_NotificationDefaultBackground)); - - auto* notification = - MessageCenter::Get()->FindVisibleNotificationById(notification_id()); - if (notification) - CreateOrUpdateSmallIconView(*notification); + UpdateHeaderViewBackgroundColor(); + UpdateActionButtonsRowBackground(); } void NotificationViewMD::Activate() {
diff --git a/ui/message_center/views/notification_view_md.h b/ui/message_center/views/notification_view_md.h index 8e1dec2e..7848548 100644 --- a/ui/message_center/views/notification_view_md.h +++ b/ui/message_center/views/notification_view_md.h
@@ -48,6 +48,7 @@ // views::MdTextButton: void UpdateBackgroundColor() override; + void OnThemeChanged() override; const base::Optional<base::string16>& placeholder() const { return placeholder_; @@ -59,8 +60,11 @@ return label()->GetEnabledColor(); } + void OverrideTextColor(base::Optional<SkColor> text_color); + private: base::Optional<base::string16> placeholder_; + base::Optional<SkColor> text_color_; }; // CompactTitleMessageView shows notification title and message in a single @@ -87,7 +91,7 @@ class LargeImageView : public views::View { public: - LargeImageView(); + explicit LargeImageView(const gfx::Size& max_size); ~LargeImageView() override; void SetImage(const gfx::ImageSkia& image); @@ -99,6 +103,8 @@ private: gfx::Size GetResizedImageSize(); + gfx::Size max_size_; + gfx::Size min_size_; gfx::ImageSkia image_; DISALLOW_COPY_AND_ASSIGN(LargeImageView); @@ -209,6 +215,7 @@ FRIEND_TEST_ALL_PREFIXES(NotificationViewMDTest, AppNameWebNotification); FRIEND_TEST_ALL_PREFIXES(NotificationViewMDTest, CreateOrUpdateTest); FRIEND_TEST_ALL_PREFIXES(NotificationViewMDTest, ExpandLongMessage); + FRIEND_TEST_ALL_PREFIXES(NotificationViewMDTest, InkDropClipRect); FRIEND_TEST_ALL_PREFIXES(NotificationViewMDTest, InlineSettings); FRIEND_TEST_ALL_PREFIXES(NotificationViewMDTest, InlineSettingsInkDropAnimation); @@ -263,6 +270,9 @@ void ToggleExpanded(); void UpdateViewForExpandedState(bool expanded); void ToggleInlineSettings(const ui::Event& event); + void UpdateHeaderViewBackgroundColor(); + SkColor GetNotificationHeaderViewBackgroundColor() const; + void UpdateActionButtonsRowBackground(); // Returns the list of children which need to have their layers created or // destroyed when the ink drop is visible.
diff --git a/ui/message_center/views/notification_view_md_unittest.cc b/ui/message_center/views/notification_view_md_unittest.cc index f4663af29..0ab9ed9 100644 --- a/ui/message_center/views/notification_view_md_unittest.cc +++ b/ui/message_center/views/notification_view_md_unittest.cc
@@ -15,6 +15,8 @@ #include "ui/events/event_utils.h" #include "ui/events/test/event_generator.h" #include "ui/gfx/canvas.h" +#include "ui/gfx/color_palette.h" +#include "ui/gfx/color_utils.h" #include "ui/gfx/image/image_unittest_util.h" #include "ui/message_center/message_center.h" #include "ui/message_center/message_center_observer.h" @@ -23,7 +25,9 @@ #include "ui/message_center/views/notification_header_view.h" #include "ui/message_center/views/padded_button.h" #include "ui/message_center/views/proportional_image_view.h" +#include "ui/views/animation/ink_drop_impl.h" #include "ui/views/animation/ink_drop_observer.h" +#include "ui/views/animation/test/ink_drop_impl_test_api.h" #include "ui/views/controls/button/image_button.h" #include "ui/views/controls/button/label_button.h" #include "ui/views/controls/button/radio_button.h" @@ -34,7 +38,7 @@ namespace message_center { -/* Test fixture ***************************************************************/ +namespace { // Used to fill bitmaps returned by CreateBitmap(). static const SkColor kBitmapColor = SK_ColorGREEN; @@ -103,6 +107,17 @@ ~DummyEvent() override = default; }; +SkColor DeriveMinContrastColor(SkColor foreground, SkColor background) { + SkColor contrast_color = + color_utils::BlendForMinContrast(foreground, background).color; + float contrast_ratio = + color_utils::GetContrastRatio(background, contrast_color); + EXPECT_GE(contrast_ratio, color_utils::kMinimumReadableContrastRatio); + return contrast_color; +} + +} // namespace + class NotificationViewMDTest : public views::InkDropObserver, public views::ViewsTestBase, public views::ViewObserver, @@ -976,8 +991,13 @@ } TEST_F(NotificationViewMDTest, TestAccentColor) { - constexpr SkColor kActionButtonTextColor = gfx::kGoogleBlue600; - constexpr SkColor kCustomAccentColor = gfx::kGoogleYellow900; + const SkColor kNotificationBackgroundColor = SK_ColorWHITE; + const SkColor kActionButtonBackgroundColor = SkColorSetRGB(0xEE, 0xEE, 0xEE); + const SkColor kActionButtonTextColor = + DeriveMinContrastColor(gfx::kGoogleBlue600, kActionButtonBackgroundColor); + + const SkColor kDarkCustomAccentColor = SkColorSetRGB(0x0D, 0x65, 0x2D); + const SkColor kBrightCustomAccentColor = SkColorSetRGB(0x34, 0xA8, 0x53); std::unique_ptr<Notification> notification = CreateSimpleNotification(); notification->set_buttons(CreateButtons(2)); @@ -1016,19 +1036,40 @@ // If custom accent color is set, the header and the buttons should have the // same accent color. - notification->set_accent_color(kCustomAccentColor); + notification->set_accent_color(kDarkCustomAccentColor); UpdateNotificationViews(*notification); auto accent_color = notification_view()->header_row_->accent_color_for_testing(); ASSERT_TRUE(accent_color.has_value()); - EXPECT_EQ(kCustomAccentColor, accent_color.value()); + EXPECT_EQ(kDarkCustomAccentColor, accent_color.value()); EXPECT_EQ( - kCustomAccentColor, + kDarkCustomAccentColor, notification_view()->action_buttons_[0]->enabled_color_for_testing()); EXPECT_EQ( - kCustomAccentColor, + kDarkCustomAccentColor, notification_view()->action_buttons_[1]->enabled_color_for_testing()); - EXPECT_TRUE(app_icon_color_matches(kCustomAccentColor)); + EXPECT_TRUE(app_icon_color_matches(kDarkCustomAccentColor)); + + // If the custom accent color is too bright, we expect it to be darkened so + // text and icons are still readable. + SkColor expected_color_title = DeriveMinContrastColor( + kBrightCustomAccentColor, kNotificationBackgroundColor); + // Action buttons have a darker background. + SkColor expected_color_actions = DeriveMinContrastColor( + kBrightCustomAccentColor, kActionButtonBackgroundColor); + + notification->set_accent_color(kBrightCustomAccentColor); + UpdateNotificationViews(*notification); + accent_color = notification_view()->header_row_->accent_color_for_testing(); + ASSERT_TRUE(accent_color.has_value()); + EXPECT_EQ(kBrightCustomAccentColor, accent_color.value()); + EXPECT_EQ( + expected_color_actions, + notification_view()->action_buttons_[0]->enabled_color_for_testing()); + EXPECT_EQ( + expected_color_actions, + notification_view()->action_buttons_[1]->enabled_color_for_testing()); + EXPECT_TRUE(app_icon_color_matches(expected_color_title)); } TEST_F(NotificationViewMDTest, UseImageAsIcon) { @@ -1228,6 +1269,42 @@ EXPECT_FALSE(ink_drop_stopped()); } +TEST_F(NotificationViewMDTest, PreferredSize) { + std::unique_ptr<Notification> notification = CreateSimpleNotification(); + notification->set_type(NotificationType::NOTIFICATION_TYPE_IMAGE); + UpdateNotificationViews(*notification); + + // Collapsed preferred width is determined by the header view. + notification_view()->SetExpanded(false); + EXPECT_EQ(kNotificationWidth, + notification_view()->GetPreferredSize().width()); + + // Ensure expanded preferred width is not extended by the image view. + notification_view()->SetExpanded(true); + EXPECT_EQ(kNotificationWidth, + notification_view()->GetPreferredSize().width()); +} + +TEST_F(NotificationViewMDTest, InkDropClipRect) { + std::unique_ptr<Notification> notification = CreateSimpleNotification(); + notification->set_type(NotificationType::NOTIFICATION_TYPE_IMAGE); + UpdateNotificationViews(*notification); + + // Toggle inline settings to show ink drop background. + notification_view()->ToggleInlineSettings(DummyEvent()); + + auto* ink_drop = + static_cast<views::InkDropImpl*>(notification_view()->GetInkDrop()); + views::test::InkDropImplTestApi ink_drop_test_api(ink_drop); + gfx::Rect clip_rect = ink_drop_test_api.GetRootLayer()->clip_rect(); + + // Expect clip rect to honor the insets to draw the shadow. + gfx::Insets insets = notification_view()->GetInsets(); + EXPECT_EQ(notification_view()->GetPreferredSize() - insets.size(), + clip_rect.size()); + EXPECT_EQ(gfx::Point(insets.left(), insets.top()), clip_rect.origin()); +} + TEST_F(NotificationViewMDTest, TestClick) { std::unique_ptr<Notification> notification = CreateSimpleNotification(); delegate_->set_expecting_click(true);
diff --git a/ui/views/layout/animating_layout_manager.cc b/ui/views/layout/animating_layout_manager.cc index d07358e..faa7dd5a 100644 --- a/ui/views/layout/animating_layout_manager.cc +++ b/ui/views/layout/animating_layout_manager.cc
@@ -549,13 +549,11 @@ // Either both axes are animating or only the main axis is animating or // the cross axis hasn't changed (because otherwise the previous condition // would have executed instead). - const base::Optional<int> bounds_main = - GetMainAxis(orientation(), available_size); + const SizeBound bounds_main = GetMainAxis(orientation(), available_size); const int host_main = GetMainAxis(orientation(), host_size); const int current_main = GetMainAxis(orientation(), current_layout_.host_size); - if (current_main > host_main || - (bounds_main && current_main > *bounds_main)) { + if ((current_main > host_main) || (current_main > bounds_main)) { // Reset the layout immediately if the current or target layout exceeds // the host size or the available space. last_available_host_size_ = available_size; @@ -1096,13 +1094,13 @@ const gfx::Size preferred_size = target_layout_manager()->GetPreferredSize(host_view()); - int width = preferred_size.width(); + int width; if (orientation() == LayoutOrientation::kVertical && bounds_animation_mode_ == BoundsAnimationMode::kAnimateMainAxis) { width = host_view()->width(); - } else if (bounds.width()) { - width = std::min(width, *bounds.width()); + } else { + width = bounds.width().min_of(preferred_size.width()); } int height; @@ -1115,9 +1113,7 @@ ? target_layout_manager()->GetPreferredHeightForWidth( host_view(), width) : preferred_size.height(); - if (bounds.height()) { - height = std::min(height, *bounds.height()); - } + height = bounds.height().min_of(height); } return gfx::Size(width, height); @@ -1142,9 +1138,7 @@ // Special case - if we're being asked for a zero-size layout we'll return the // minimum size of the layout. This is because we're being probed for how // small we can get, not being asked for an actual size. - const base::Optional<int> bounds_main = - GetMainAxis(animating_layout->orientation(), size_bounds); - if (bounds_main && *bounds_main <= 0) + if (GetMainAxis(animating_layout->orientation(), size_bounds) <= 0) return animating_layout->GetMinimumSize(view); // We know our current size does not fit into the bounds being given to us. @@ -1163,26 +1157,26 @@ // need to ask the target layout how large it wants to be in the space // provided. gfx::Size size; - if (size_bounds.width() && size_bounds.height()) { + if (size_bounds.width().is_bounded() && size_bounds.height().is_bounded()) { // Both width and height are specified. Constraining the width may change // the desired height, so we can't just blindly return the minimum in both // dimensions. Instead, query the target layout in the constrained space // and return its size. - size = gfx::Size(*size_bounds.width(), *size_bounds.height()); - } else if (size_bounds.width()) { + size = gfx::Size(size_bounds.width().value(), size_bounds.height().value()); + } else if (size_bounds.width().is_bounded()) { // The width is specified and too small. Use the height-for-width // calculation. // TODO(dfried): This should be rare, but it is also inefficient. See if we // can't add an alternative to GetPreferredHeightForWidth() that actually // calculates the layout in this space so we don't have to do it twice. - const int width = *size_bounds.width(); + const int width = size_bounds.width().value(); size = gfx::Size(width, target_layout->GetPreferredHeightForWidth(view, width)); } else { - DCHECK(size_bounds.height()); + DCHECK(size_bounds.height().is_bounded()); // The height is specified and too small. Fortunately the height of a // layout can't (shouldn't?) affect its width. - size = gfx::Size(target_preferred.width(), *size_bounds.height()); + size = gfx::Size(target_preferred.width(), size_bounds.height().value()); } return target_layout->GetProposedLayout(size).host_size;
diff --git a/ui/views/layout/animating_layout_manager_unittest.cc b/ui/views/layout/animating_layout_manager_unittest.cc index efb44b1..21755f00d 100644 --- a/ui/views/layout/animating_layout_manager_unittest.cc +++ b/ui/views/layout/animating_layout_manager_unittest.cc
@@ -31,10 +31,8 @@ // provided by |bounds|, if any. gfx::Size ConstrainSizeToBounds(const gfx::Size& size, const SizeBounds& bounds) { - return gfx::Size{ - bounds.width() ? std::min(size.width(), *bounds.width()) : size.width(), - bounds.height() ? std::min(size.height(), *bounds.height()) - : size.height()}; + return gfx::Size(bounds.width().min_of(size.width()), + bounds.height().min_of(size.height())); } // View that allows directly setting minimum size. @@ -3983,7 +3981,7 @@ gfx::Size(5, 5), true); const gfx::Size preferred = flex_layout()->GetPreferredSize(view()); const gfx::Size result = - RunFlexRule(SizeBounds(preferred.width() + 5, base::nullopt)); + RunFlexRule(SizeBounds(preferred.width() + 5, SizeBound())); EXPECT_EQ(preferred, result); EXPECT_EQ(3U, GetVisibleChildCount(result)); } @@ -3998,7 +3996,7 @@ const int height_for_width = flex_layout()->GetPreferredHeightForWidth(view(), width); DCHECK_GT(height_for_width, preferred.height()); - const gfx::Size result = RunFlexRule(SizeBounds(width, base::nullopt)); + const gfx::Size result = RunFlexRule(SizeBounds(width, SizeBound())); EXPECT_EQ(gfx::Size(width, height_for_width), result); EXPECT_EQ(3U, GetVisibleChildCount(result)); } @@ -4643,7 +4641,7 @@ TEST_F(AnimatingLayoutManagerRealtimeTest, TestConstrainedSpaceStopsAnimation) { constexpr gfx::Insets kChildMargins(5); - constexpr SizeBounds kSizeBounds(45, base::nullopt); + constexpr SizeBounds kSizeBounds(45, SizeBound()); layout()->SetBoundsAnimationMode( AnimatingLayoutManager::BoundsAnimationMode::kAnimateBothAxes); layout()->SetAnimationDuration(kMinimumAnimationTime); @@ -4688,7 +4686,7 @@ TEST_F(AnimatingLayoutManagerRealtimeTest, TestConstrainedSpaceDoesNotRestart) { constexpr gfx::Insets kChildMargins(5); - constexpr SizeBounds kSizeBounds(45, base::nullopt); + constexpr SizeBounds kSizeBounds(45, SizeBound()); layout()->SetBoundsAnimationMode( AnimatingLayoutManager::BoundsAnimationMode::kAnimateBothAxes); layout()->SetAnimationDuration(kMinimumAnimationTime); @@ -4737,7 +4735,7 @@ TEST_F(AnimatingLayoutManagerRealtimeTest, TestConstrainedSpaceRestartedAnimationSucceeds) { constexpr gfx::Insets kChildMargins(5); - constexpr SizeBounds kSizeBounds(45, base::nullopt); + constexpr SizeBounds kSizeBounds(45, SizeBound()); layout()->SetBoundsAnimationMode( AnimatingLayoutManager::BoundsAnimationMode::kAnimateBothAxes); layout()->SetAnimationDuration(kMinimumAnimationTime);
diff --git a/ui/views/layout/composite_layout_tests.cc b/ui/views/layout/composite_layout_tests.cc index 061d0cc..9852ed90 100644 --- a/ui/views/layout/composite_layout_tests.cc +++ b/ui/views/layout/composite_layout_tests.cc
@@ -245,7 +245,7 @@ // Calculate how many icons *should* be visible given the available space. SizeBounds available_size = parent()->GetAvailableSize(this); int num_visible = visible_views_.size(); - if (available_size.width().has_value()) { + if (available_size.width().is_bounded()) { num_visible = std::min( num_visible, (available_size.width().value() - kIconDimension) / kIconDimension);
diff --git a/ui/views/layout/flex_layout.cc b/ui/views/layout/flex_layout.cc index 045daa6..0a2b9aca 100644 --- a/ui/views/layout/flex_layout.cc +++ b/ui/views/layout/flex_layout.cc
@@ -106,9 +106,9 @@ // Returns the maximum size for the child at |view_index|, given its // |current_size| and the amount of |available_space| for flex allocation. - int GetMaxSize(size_t view_index, - int current_size, - int available_space) const; + SizeBound GetMaxSize(size_t view_index, + int current_size, + const SizeBound& available_space) const; // Returns the change in total allocated size if the child at |view_index| is // resized from |current_size| to |new_size|. @@ -185,9 +185,10 @@ [](int total, const auto& value) { return total + value.second; }); } -int FlexLayout::ChildViewSpacing::GetMaxSize(size_t view_index, - int current_size, - int available_space) const { +SizeBound FlexLayout::ChildViewSpacing::GetMaxSize( + size_t view_index, + int current_size, + const SizeBound& available_space) const { DCHECK_GE(available_space, 0); if (HasViewIndex(view_index)) @@ -202,7 +203,7 @@ // available space can cause the first view to be smaller than we would expect // (see TODOs in unit tests for examples). We should look into ways to make // this "feel" better (but in the meantime, specify reasonable margins). - return std::max(available_space - GetAddDelta(view_index), 0); + return std::max<SizeBound>(available_space - GetAddDelta(view_index), 0); } int FlexLayout::ChildViewSpacing::GetTotalSizeChangeForNewSize( @@ -410,8 +411,8 @@ } NormalizedSizeBounds bounds = Normalize(orientation(), size_bounds); bounds.Inset(data.host_insets); - if (bounds.cross() && *bounds.cross() < minimum_cross_axis_size()) - bounds.set_cross(minimum_cross_axis_size()); + bounds.set_cross( + std::max<SizeBound>(bounds.cross(), minimum_cross_axis_size())); // Populate the child layout data vectors and the order-to-index map. FlexOrderToViewIndexMap order_to_view_index; @@ -423,18 +424,16 @@ base::Unretained(this), std::cref(data))); UpdateLayoutFromChildren(bounds, &data, &child_spacing); - if (bounds.main().has_value()) { - // Flex up to preferred size. - CalculateNonFlexAvailableSpace( - &data, std::max(*bounds.main() - data.total_size.main(), 0), - child_spacing, order_to_view_index); - FlexOrderToViewIndexMap expandable_views; - AllocateFlexSpace(bounds, order_to_view_index, &data, &child_spacing, - &expandable_views); + // Flex up to preferred size. + CalculateNonFlexAvailableSpace( + &data, std::max<SizeBound>(bounds.main() - data.total_size.main(), 0), + child_spacing, order_to_view_index); + FlexOrderToViewIndexMap expandable_views; + AllocateFlexSpace(bounds, order_to_view_index, &data, &child_spacing, + &expandable_views); - // Flex up to maximum size. - AllocateFlexSpace(bounds, expandable_views, &data, &child_spacing, nullptr); - } + // Flex up to maximum size. + AllocateFlexSpace(bounds, expandable_views, &data, &child_spacing, nullptr); // Calculate the size of the host view. NormalizedSize host_size = data.total_size; @@ -451,7 +450,7 @@ NormalizedSize FlexLayout::GetPreferredSizeForRule( const FlexRule& rule, const View* child, - const base::Optional<int>& available_cross) const { + const SizeBound& available_cross) const { const NormalizedSize default_size = Normalize(orientation(), rule.Run(child, SizeBounds())); if (orientation() != LayoutOrientation::kVertical) @@ -459,9 +458,8 @@ // In vertical layouts it's important to consider height-for-width type // calculations. - const NormalizedSize stretch_size = - Normalize(orientation(), - rule.Run(child, SizeBounds(available_cross, base::nullopt))); + const NormalizedSize stretch_size = Normalize( + orientation(), rule.Run(child, SizeBounds(available_cross, SizeBound()))); if (cross_axis_alignment() == LayoutAlignment::kStretch) return stretch_size; @@ -485,7 +483,7 @@ FlexOrderToViewIndexMap* flex_order_to_index) const { // Step through the children, creating placeholder layout view elements // and setting up initial minimal visibility. - const bool main_axis_bounded = bounds.main().has_value(); + const bool main_axis_bounded = bounds.main().is_bounded(); for (View* child : host_view()->children()) { if (!IsChildIncludedInLayout(child)) continue; @@ -505,7 +503,7 @@ orientation(), GetViewProperty(child, layout_defaults_, views::kInternalPaddingKey)); - const base::Optional<int> available_cross = + const SizeBound available_cross = GetAvailableCrossAxisSize(*data, view_index, bounds); SetCrossAxis(&child_layout.available_size, orientation(), available_cross); @@ -527,7 +525,8 @@ // Keep track of non-hidden flex controls. if (flex_child.flex.weight() > 0 || - flex_child.current_size.main() < flex_child.preferred_size.main()) + flex_child.current_size.main() < flex_child.preferred_size.main() || + flex_child.flex.unlimited_main_axis_size()) (*flex_order_to_index)[flex_child.flex.order()].push_back(view_index); child_layout.visible = flex_child.current_size.main() > 0; @@ -541,8 +540,9 @@ Normalize(orientation(), size_bounds); const NormalizedSize normalized_host_size = Normalize(orientation(), data->layout.host_size); - int available_main = normalized_bounds.main() ? *normalized_bounds.main() - : normalized_host_size.main(); + int available_main = normalized_bounds.main().is_bounded() + ? normalized_bounds.main().value() + : normalized_host_size.main(); available_main = std::max(0, available_main - data->host_insets.main_size()); const int excess_main = available_main - data->total_size.main(); NormalizedPoint start(data->host_insets.main_leading(), @@ -583,7 +583,7 @@ void FlexLayout::CalculateNonFlexAvailableSpace( FlexLayoutData* data, - int available_space, + const SizeBound& available_space, const ChildViewSpacing& child_spacing, const FlexOrderToViewIndexMap& flex_views) const { // Add all views which are participating in flex (and will have their @@ -603,7 +603,7 @@ // Cross-axis available size is already set in InitializeChildData(), so // just set the main axis here. - const int max_size = child_spacing.GetMaxSize( + const SizeBound max_size = child_spacing.GetMaxSize( index, data->child_data[index].current_size.main(), available_space); SetMainAxis(&data->layout.child_layouts[index].available_size, orientation(), max_size); @@ -632,14 +632,12 @@ return std::max(0, result - internal_padding); } -base::Optional<int> FlexLayout::GetAvailableCrossAxisSize( +SizeBound FlexLayout::GetAvailableCrossAxisSize( const FlexLayoutData& layout, size_t child_index, const NormalizedSizeBounds& bounds) const { - if (!bounds.cross()) - return base::nullopt; const Inset1D cross_margins = GetCrossAxisMargins(layout, child_index); - return std::max(0, *bounds.cross() - cross_margins.size()); + return std::max<SizeBound>(0, bounds.cross() - cross_margins.size()); } int FlexLayout::CalculateChildSpacing( @@ -690,8 +688,8 @@ // For cases with a non-zero cross-axis bound, the objective is to fit the // layout into that precise size, not to determine what size we need. bool force_cross_size = false; - if (bounds.cross() && *bounds.cross() > 0) { - data->total_size.SetToMax(0, *bounds.cross()); + if (bounds.cross().is_bounded() && bounds.cross() > 0) { + data->total_size.SetToMax(0, bounds.cross().value()); force_cross_size = true; } @@ -757,8 +755,8 @@ // possible to each flex view. for (const auto& flex_elem : order_to_index) { // Check to see we haven't filled available space. - const int remaining_at_priority = - std::max(0, *bounds.main() - data->total_size.main()); + const SizeBound remaining_at_priority = + std::max<SizeBound>(0, bounds.main() - data->total_size.main()); // The flex algorithm we're using works as follows: // * For each child view at a particular flex order: @@ -786,7 +784,7 @@ // Flex children at this priority order. const int flex_order = flex_elem.first; - int remaining = remaining_at_priority; + SizeBound remaining = remaining_at_priority; int flex_total = std::accumulate(flex_elem.second.begin(), flex_elem.second.end(), 0, [data](int total, size_t index) { @@ -809,13 +807,14 @@ // We'll save the maximum amount of main axis size first offered to the // view so we can report the maximum available size later. - if (!GetMainAxis(orientation(), child_layout.available_size)) { + if (!GetMainAxis(orientation(), child_layout.available_size) + .is_bounded()) { // Calculate how much space this child view could take based on the // total remaining flex space at this priority. Note that this is not // the actual remaining space at this step, which will be based on flex // used by previous children at the same priority. - const int max_size = child_spacing->GetMaxSize(view_index, current_size, - remaining_at_priority); + const SizeBound max_size = child_spacing->GetMaxSize( + view_index, current_size, remaining_at_priority); SetMainAxis(&child_layout.available_size, orientation(), max_size); } @@ -825,12 +824,12 @@ continue; // Offer a share of the remaining space to the view. - int flex_amount = remaining; + SizeBound flex_amount = remaining; const int flex_weight = flex_child.flex.weight(); - if (flex_weight > 0) { + if ((flex_weight > 0) && remaining.is_bounded()) { // Round up so we give slightly greater weight to earlier views. - flex_amount = - base::ClampCeil(remaining * flex_weight / float{flex_total}); + flex_amount = base::ClampCeil(remaining.value() * flex_weight / + float{flex_total}); } flex_total -= flex_weight; @@ -839,10 +838,13 @@ const NormalizedSizeBounds available( child_spacing->GetMaxSize(view_index, current_size, flex_amount), GetCrossAxis(orientation(), child_layout.available_size)); + const bool desires_unlimited_size = + !available.main().is_bounded() && + flex_child.flex.unlimited_main_axis_size(); NormalizedSize desired_size = GetCurrentSizeForRule( flex_child.flex.rule(), child_layout.child_view, available); - if (desired_size.main() <= 0) + if (desired_size.main() <= 0 && !desires_unlimited_size) continue; // Limit the expansion of views past their preferred size in the first @@ -850,9 +852,11 @@ // them to |expandable_views| so that the remaining space can be allocated // later. if (expandable_views && - desired_size.main() > flex_child.preferred_size.main()) { + (desired_size.main() > flex_child.preferred_size.main() || + desires_unlimited_size)) { (*expandable_views)[flex_order].push_back(view_index); - desired_size.set_main(flex_child.preferred_size.main()); + desired_size.set_main( + std::min(flex_child.preferred_size.main(), desired_size.main())); } // Increasing the child size should not result in a net total size @@ -866,7 +870,7 @@ DCHECK_GE(to_deduct, 0); // If the desired size increases (but is still within bounds), we can make // the control visible and allocate the additional space. - if (to_deduct > 0 && to_deduct <= remaining) { + if ((to_deduct > 0 && to_deduct <= remaining) || desires_unlimited_size) { flex_child.current_size = desired_size; child_layout.visible = true; remaining -= to_deduct;
diff --git a/ui/views/layout/flex_layout.h b/ui/views/layout/flex_layout.h index 95ef88c..3326c4e 100644 --- a/ui/views/layout/flex_layout.h +++ b/ui/views/layout/flex_layout.h
@@ -158,7 +158,7 @@ NormalizedSize GetPreferredSizeForRule( const FlexRule& rule, const View* child, - const base::Optional<int>& available_cross) const; + const SizeBound& available_cross) const; // Returns the size for a given |rule| and |child| with |available| space. NormalizedSize GetCurrentSizeForRule( @@ -181,7 +181,7 @@ // Calculates available space for non-flex views. void CalculateNonFlexAvailableSpace( FlexLayoutData* data, - int available_space, + const SizeBound& available_space, const ChildViewSpacing& child_spacing, const FlexOrderToViewIndexMap& flex_views) const; @@ -198,10 +198,9 @@ // Calculates the cross-layout space available to a view based on the // available space and margins. - base::Optional<int> GetAvailableCrossAxisSize( - const FlexLayoutData& layout, - size_t child_index, - const NormalizedSizeBounds& bounds) const; + SizeBound GetAvailableCrossAxisSize(const FlexLayoutData& layout, + size_t child_index, + const NormalizedSizeBounds& bounds) const; // Calculates the preferred spacing between two child views, or between a // view edge and the first or last visible child views.
diff --git a/ui/views/layout/flex_layout_types.cc b/ui/views/layout/flex_layout_types.cc index 844b44d..7d0cd99f 100644 --- a/ui/views/layout/flex_layout_types.cc +++ b/ui/views/layout/flex_layout_types.cc
@@ -102,14 +102,14 @@ gfx::Size preferred = view->GetPreferredSize(); int width; - if (!maximum_size.width()) { + if (!maximum_size.width().is_bounded()) { // Not having a maximum size is different from having a large available // size; a view can't grow infinitely, so we go with its preferred size. width = preferred.width(); } else { width = InterpolateSize(minimum_width_rule, maximum_width_rule, min->width(), - preferred.width(), *maximum_size.width()); + preferred.width(), maximum_size.width().value()); } int preferred_height = preferred.height(); @@ -118,8 +118,8 @@ // want views to be able to adapt to the horizontal available space by // growing vertically. We therefore allow the horizontal size to shrink even // if there's otherwise no flex allowed. - if (maximum_size.width() && maximum_size.width() > 0) - width = std::min(width, *maximum_size.width()); + if (maximum_size.width() > 0) + width = maximum_size.width().min_of(width); if (width < preferred.width()) { // Allow views that need to grow vertically when they're compressed @@ -139,14 +139,14 @@ } int height; - if (!maximum_size.height()) { + if (!maximum_size.height().is_bounded()) { // Not having a maximum size is different from having a large available // size; a view can't grow infinitely, so we go with its preferred size. height = preferred_height; } else { height = InterpolateSize(minimum_height_rule, maximum_height_rule, min->height(), - preferred_height, *maximum_size.height()); + preferred_height, maximum_size.height().value()); } return gfx::Size(width, height); @@ -175,7 +175,10 @@ maximum_size_rule, minimum_size_rule, maximum_size_rule, - adjust_height_for_width)) {} + adjust_height_for_width)) { + unlimited_main_axis_size_ = + maximum_size_rule == MaximumFlexSizeRule::kUnbounded; +} FlexSpecification::FlexSpecification( LayoutOrientation orientation, @@ -196,7 +199,10 @@ orientation == LayoutOrientation::kVertical ? maximum_main_axis_rule : kDefaultMaximumFlexSizeRule, - adjust_height_for_width)) {} + adjust_height_for_width)) { + unlimited_main_axis_size_ = + maximum_main_axis_rule == MaximumFlexSizeRule::kUnbounded; +} FlexSpecification::FlexSpecification(const FlexSpecification& other) = default;
diff --git a/ui/views/layout/flex_layout_types.h b/ui/views/layout/flex_layout_types.h index 509d230..945936e3 100644 --- a/ui/views/layout/flex_layout_types.h +++ b/ui/views/layout/flex_layout_types.h
@@ -152,12 +152,14 @@ int weight() const { return weight_; } int order() const { return order_; } LayoutAlignment alignment() const { return alignment_; } + bool unlimited_main_axis_size() const { return unlimited_main_axis_size_; } private: FlexRule rule_; int order_ = 1; int weight_ = 0; LayoutAlignment alignment_ = LayoutAlignment::kStretch; + bool unlimited_main_axis_size_ = false; }; // Represents insets in a single dimension.
diff --git a/ui/views/layout/flex_layout_unittest.cc b/ui/views/layout/flex_layout_unittest.cc index da0f8917..d43bb119 100644 --- a/ui/views/layout/flex_layout_unittest.cc +++ b/ui/views/layout/flex_layout_unittest.cc
@@ -79,14 +79,14 @@ const Size large_size = view->GetPreferredSize(); const Size small_size = Size(large_size.width() / 2, large_size.height() / 2); int horizontal = 0; - if (!maximum_size.width() || *maximum_size.width() > large_size.width()) + if (maximum_size.width() >= large_size.width()) horizontal = large_size.width(); - else if (*maximum_size.width() >= small_size.width() || !snap_to_zero) + else if (maximum_size.width() >= small_size.width() || !snap_to_zero) horizontal = small_size.width(); int vertical = 0; - if (!maximum_size.height() || *maximum_size.height() > large_size.height()) + if (maximum_size.height() >= large_size.height()) vertical = large_size.height(); - else if (*maximum_size.height() >= small_size.height() || !snap_to_zero) + else if (maximum_size.height() >= small_size.height() || !snap_to_zero) vertical = small_size.height(); return Size(horizontal, vertical); } @@ -2571,9 +2571,7 @@ TEST_F(FlexLayoutTest, FlexRuleContradictsPreferredSize) { const FlexSpecification custom_spec( base::BindRepeating([](const View* view, const SizeBounds& maximum_size) { - return gfx::Size( - (!maximum_size.width() || *maximum_size.width() >= 100) ? 100 : 0, - 100); + return gfx::Size((maximum_size.width() >= 100) ? 100 : 0, 100); })); layout_->SetOrientation(LayoutOrientation::kHorizontal); @@ -3035,6 +3033,20 @@ EXPECT_FALSE(grandchild(2, 2)->GetVisible()); } +TEST_F(NestedFlexLayoutTest, UnboundedZeroSize) { + AddChildren(1); + child(1)->SetProperty(views::kFlexBehaviorKey, kUnboundedScaleToZero); + + AddGrandchild(1, gfx::Size(0, 5)); + grandchild(1, 1)->SetProperty(views::kFlexBehaviorKey, kUnboundedScaleToZero); + + EXPECT_EQ(5, child(1)->GetPreferredSize().height()); + host_->SetSize(gfx::Size(100, 5)); + EXPECT_EQ(5, child(1)->GetPreferredSize().height()); + host_->Layout(); + EXPECT_EQ(5, child(1)->height()); +} + namespace { struct DirectionalFlexRuleTestParamRules {
diff --git a/ui/views/layout/layout_manager_base.cc b/ui/views/layout/layout_manager_base.cc index cdab637..68f1874 100644 --- a/ui/views/layout/layout_manager_base.cc +++ b/ui/views/layout/layout_manager_base.cc
@@ -19,18 +19,16 @@ SizeBounds AdjustAvailableSizeForParentAvailableSize( const View* host, const SizeBounds& child_available_size) { - if (!host || !host->parent() || child_available_size == SizeBounds()) - return child_available_size; - - SizeBounds host_additional_size = host->parent()->GetAvailableSize(host); - host_additional_size.Enlarge(-host->width(), -host->height()); - return SizeBounds( - child_available_size.width() && host_additional_size.width() - ? *child_available_size.width() + *host_additional_size.width() - : child_available_size.width(), - child_available_size.height() && host_additional_size.height() - ? *child_available_size.height() + *host_additional_size.height() - : child_available_size.height()); + SizeBounds available_size = child_available_size; + if (host && host->parent() && available_size != SizeBounds()) { + SizeBounds host_additional_size = host->parent()->GetAvailableSize(host); + host_additional_size.Enlarge(-host->width(), -host->height()); + if (host_additional_size.width().is_bounded()) + available_size.width() += host_additional_size.width(); + if (host_additional_size.height().is_bounded()) + available_size.height() += host_additional_size.height(); + } + return available_size; } } // anonymous namespace @@ -54,7 +52,7 @@ int LayoutManagerBase::GetPreferredHeightForWidth(const View* host, int width) const { if (!cached_height_for_width_ || cached_height_for_width_->width() != width) { - const int height = CalculateProposedLayout(SizeBounds(width, base::nullopt)) + const int height = CalculateProposedLayout(SizeBounds(width, SizeBound())) .host_size.height(); cached_height_for_width_ = gfx::Size(width, height); }
diff --git a/ui/views/layout/layout_manager_base_unittest.cc b/ui/views/layout/layout_manager_base_unittest.cc index 6de04b8..827fc38 100644 --- a/ui/views/layout/layout_manager_base_unittest.cc +++ b/ui/views/layout/layout_manager_base_unittest.cc
@@ -6,6 +6,7 @@ #include <algorithm> +#include "base/numerics/ranges.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/views/test/test_layout_manager.h" #include "ui/views/test/test_views.h" @@ -49,11 +50,13 @@ ProposedLayout layout; layout.host_size.set_width( - std::max(kMinimumSize.width(), - size_bounds.width().value_or(kPreferredSize.width()))); - layout.host_size.set_height( - std::max(kMinimumSize.height(), - size_bounds.height().value_or(kPreferredSize.height()))); + base::ClampToRange<SizeBound>(size_bounds.width(), kMinimumSize.width(), + kPreferredSize.width()) + .value()); + layout.host_size.set_height(base::ClampToRange<SizeBound>( + size_bounds.height(), kMinimumSize.height(), + kPreferredSize.height()) + .value()); return layout; } @@ -97,8 +100,8 @@ const int required_width = preferred_size.width() + 2 * kChildViewPadding; const int required_height = preferred_size.height() + 2 * kChildViewPadding; - if ((!size_bounds.width() || required_width <= *size_bounds.width()) && - (!size_bounds.height() || required_height <= *size_bounds.height())) { + if ((required_width <= size_bounds.width()) && + (required_height <= size_bounds.height())) { visible = true; bounds = gfx::Rect(kChildViewPadding, kChildViewPadding, preferred_size.width(), preferred_size.height()); @@ -701,10 +704,10 @@ EXPECT_EQ(kChildAvailableSize, view()->GetAvailableSize(child)); SizeBounds expected; - expected.set_width(*kGrandchildAvailableSize.width() + - *kChildAvailableSize.width() - kChildSize.width()); - expected.set_height(*kGrandchildAvailableSize.height() + - *kChildAvailableSize.height() - kChildSize.height()); + expected.set_width(kGrandchildAvailableSize.width() + + kChildAvailableSize.width() - kChildSize.width()); + expected.set_height(kGrandchildAvailableSize.height() + + kChildAvailableSize.height() - kChildSize.height()); EXPECT_EQ(expected, child->GetAvailableSize(grandchild)); } @@ -716,7 +719,7 @@ child->SetLayoutManager(std::make_unique<TestLayoutManagerBase>()); constexpr gfx::Size kViewSize(18, 17); - constexpr SizeBounds kChildAvailableSize(16, base::nullopt); + constexpr SizeBounds kChildAvailableSize(16, SizeBound()); constexpr gfx::Size kChildSize(13, 12); constexpr SizeBounds kGrandchildAvailableSize(10, 9); constexpr gfx::Size kGrandchildSize(3, 2); @@ -731,9 +734,9 @@ EXPECT_EQ(kChildAvailableSize, view()->GetAvailableSize(child)); SizeBounds expected; - expected.set_width(*kGrandchildAvailableSize.width() + - *kChildAvailableSize.width() - kChildSize.width()); - expected.set_height(*kGrandchildAvailableSize.height()); + expected.set_width(kGrandchildAvailableSize.width() + + kChildAvailableSize.width() - kChildSize.width()); + expected.set_height(kGrandchildAvailableSize.height()); EXPECT_EQ(expected, child->GetAvailableSize(grandchild)); } @@ -745,9 +748,9 @@ child->SetLayoutManager(std::make_unique<TestLayoutManagerBase>()); constexpr gfx::Size kViewSize(18, 17); - constexpr SizeBounds kChildAvailableSize(16, base::nullopt); + constexpr SizeBounds kChildAvailableSize(16, SizeBound()); constexpr gfx::Size kChildSize(13, 12); - constexpr SizeBounds kGrandchildAvailableSize(base::nullopt, 9); + constexpr SizeBounds kGrandchildAvailableSize(SizeBound(), 9); constexpr gfx::Size kGrandchildSize(3, 2); layout()->OverrideProposedLayout( {kViewSize, {{child, true, {{3, 3}, kChildSize}, kChildAvailableSize}}});
diff --git a/ui/views/layout/layout_types.cc b/ui/views/layout/layout_types.cc index eb21877..f153932 100644 --- a/ui/views/layout/layout_types.cc +++ b/ui/views/layout/layout_types.cc
@@ -11,23 +11,51 @@ namespace views { +// SizeBound ------------------------------------------------------------------- + +void SizeBound::operator+=(const SizeBound& rhs) { + if (!rhs.is_bounded()) + bound_.reset(); + else if (is_bounded()) + *bound_ += rhs.value(); +} + +void SizeBound::operator-=(const SizeBound& rhs) { + if (!rhs.is_bounded()) + bound_ = 0; + else if (is_bounded()) + *bound_ -= rhs.value(); +} + +std::string SizeBound::ToString() const { + return is_bounded() ? base::NumberToString(*bound_) : "_"; +} + +SizeBound operator+(const SizeBound& lhs, const SizeBound& rhs) { + SizeBound result = lhs; + result += rhs; + return result; +} + +SizeBound operator-(const SizeBound& lhs, const SizeBound& rhs) { + SizeBound result = lhs; + result -= rhs; + return result; +} + // SizeBounds ------------------------------------------------------------------ void SizeBounds::Enlarge(int width, int height) { - if (width_) - width_ = std::max(0, *width_ + width); - if (height_) - height_ = std::max(0, *height_ + height); + width_ = std::max<SizeBound>(0, width_ + width); + height_ = std::max<SizeBound>(0, height_ + height); } std::string SizeBounds::ToString() const { - return base::StrCat({width_ ? base::NumberToString(*width_) : "_", " x ", - height_ ? base::NumberToString(*height_) : "_"}); + return base::StrCat({width_.ToString(), " x ", height_.ToString()}); } bool CanFitInBounds(const gfx::Size& size, const SizeBounds& bounds) { - return (!bounds.width() || (*bounds.width() >= size.width())) && - (!bounds.height() || (*bounds.height() >= size.height())); + return bounds.width() >= size.width() && bounds.height() >= size.height(); } } // namespace views
diff --git a/ui/views/layout/layout_types.h b/ui/views/layout/layout_types.h index b349e638..85fca0a 100644 --- a/ui/views/layout/layout_types.h +++ b/ui/views/layout/layout_types.h
@@ -5,6 +5,7 @@ #ifndef UI_VIEWS_LAYOUT_LAYOUT_TYPES_H_ #define UI_VIEWS_LAYOUT_LAYOUT_TYPES_H_ +#include <algorithm> #include <ostream> #include <string> #include <tuple> @@ -22,9 +23,9 @@ kVertical, }; -// Stores an optional width and height upper bound. Used when calculating the -// preferred size of a layout pursuant to a maximum available size. -class VIEWS_EXPORT SizeBounds { +// A value used to bound a View during layout. May be a finite bound or +// "unbounded", which is treated as larger than any finite value. +class VIEWS_EXPORT SizeBound { public: // Method definitions below to avoid "complex constructor" warning. Marked // explicitly inline because Clang currently doesn't realize that "constexpr" @@ -35,9 +36,75 @@ // TODO(crbug.com/1045570): Put method bodies here if complex constructor // heuristic learns to peer into types to discover that e.g. Optional is not // complex. + inline constexpr SizeBound(); + inline constexpr SizeBound(int bound); // NOLINT + inline constexpr SizeBound(const SizeBound&); + inline constexpr SizeBound(SizeBound&&); + SizeBound& operator=(const SizeBound&) = default; + SizeBound& operator=(SizeBound&&) = default; + ~SizeBound() = default; + + constexpr bool is_bounded() const { return bound_.has_value(); } + // Must only be invoked when there is a bound, since otherwise the value to + // return is unknown. + constexpr int value() const { + DCHECK(is_bounded()); + return *bound_; + } + + constexpr int min_of(int value) const { + return is_bounded() ? std::min(this->value(), value) : value; + } + + void operator+=(const SizeBound& rhs); + void operator-=(const SizeBound& rhs); + + std::string ToString() const; + + private: + friend constexpr bool operator==(const SizeBound& lhs, const SizeBound& rhs); + friend constexpr bool operator!=(const SizeBound& lhs, const SizeBound& rhs); + + // nullopt represents "unbounded". + base::Optional<int> bound_; +}; +constexpr SizeBound::SizeBound() = default; +constexpr SizeBound::SizeBound(int bound) : bound_(bound) {} +constexpr SizeBound::SizeBound(const SizeBound&) = default; +constexpr SizeBound::SizeBound(SizeBound&&) = default; +VIEWS_EXPORT SizeBound operator+(const SizeBound& lhs, const SizeBound& rhs); +VIEWS_EXPORT SizeBound operator-(const SizeBound& lhs, const SizeBound& rhs); +// Note: These comparisons treat unspecified values similar to infinity, that +// is, larger than any specified value and equal to any other unspecified value. +// While one can argue that two unspecified values can't be compared (and thus +// all comparisons should return false), this isn't what any callers want and +// breaks things in subtle ways, e.g. "a = b; DCHECK(a == b)" may fail. +constexpr bool operator<(const SizeBound& lhs, const SizeBound& rhs) { + return lhs.is_bounded() && (!rhs.is_bounded() || (lhs.value() < rhs.value())); +} +constexpr bool operator>(const SizeBound& lhs, const SizeBound& rhs) { + return rhs.is_bounded() && (!lhs.is_bounded() || (lhs.value() > rhs.value())); +} +constexpr bool operator<=(const SizeBound& lhs, const SizeBound& rhs) { + return !(lhs > rhs); +} +constexpr bool operator>=(const SizeBound& lhs, const SizeBound& rhs) { + return !(lhs < rhs); +} +constexpr bool operator==(const SizeBound& lhs, const SizeBound& rhs) { + return lhs.bound_ == rhs.bound_; +} +constexpr bool operator!=(const SizeBound& lhs, const SizeBound& rhs) { + return lhs.bound_ != rhs.bound_; +} + +// Stores an optional width and height upper bound. Used when calculating the +// preferred size of a layout pursuant to a maximum available size. +class VIEWS_EXPORT SizeBounds { + public: + // See comments in SizeBound re: "inline" with definitions below. inline constexpr SizeBounds(); - inline constexpr SizeBounds(base::Optional<int> width, - base::Optional<int> height); + inline constexpr SizeBounds(SizeBound width, SizeBound height); inline constexpr explicit SizeBounds(const gfx::Size& size); inline constexpr SizeBounds(const SizeBounds&); inline constexpr SizeBounds(SizeBounds&&); @@ -45,13 +112,17 @@ SizeBounds& operator=(SizeBounds&&) = default; ~SizeBounds() = default; - constexpr const base::Optional<int>& width() const { return width_; } - void set_width(base::Optional<int> width) { width_ = std::move(width); } + constexpr const SizeBound& width() const { return width_; } + constexpr SizeBound& width() { return width_; } + void set_width(SizeBound width) { width_ = std::move(width); } - constexpr const base::Optional<int>& height() const { return height_; } - void set_height(base::Optional<int> height) { height_ = std::move(height); } + constexpr const SizeBound& height() const { return height_; } + constexpr SizeBound& height() { return height_; } + void set_height(SizeBound height) { height_ = std::move(height); } - constexpr bool is_fully_bounded() const { return width_ && height_; } + constexpr bool is_fully_bounded() const { + return width_.is_bounded() && height_.is_bounded(); + } // Enlarges (or shrinks, if negative) each upper bound that is present by the // specified amounts. @@ -60,12 +131,11 @@ std::string ToString() const; private: - base::Optional<int> width_; - base::Optional<int> height_; + SizeBound width_; + SizeBound height_; }; constexpr SizeBounds::SizeBounds() = default; -constexpr SizeBounds::SizeBounds(base::Optional<int> width, - base::Optional<int> height) +constexpr SizeBounds::SizeBounds(SizeBound width, SizeBound height) : width_(std::move(width)), height_(std::move(height)) {} constexpr SizeBounds::SizeBounds(const gfx::Size& size) : width_(size.width()), height_(size.height()) {} @@ -86,7 +156,8 @@ // Returns true if the specified |size| can fit in the specified |bounds|. // Returns false if either the width or height of |bounds| is specified and is // smaller than the corresponding element of |size|. -bool CanFitInBounds(const gfx::Size& size, const SizeBounds& bounds); +VIEWS_EXPORT bool CanFitInBounds(const gfx::Size& size, + const SizeBounds& bounds); // These are declared here for use in gtest-based unit tests but is defined in // the views_test_support target. Depend on that to use this in your unit test.
diff --git a/ui/views/layout/normalized_geometry.cc b/ui/views/layout/normalized_geometry.cc index 0a0e9d4c..b77cd3c 100644 --- a/ui/views/layout/normalized_geometry.cc +++ b/ui/views/layout/normalized_geometry.cc
@@ -10,7 +10,6 @@ #include "base/numerics/ranges.h" #include "base/strings/strcat.h" -#include "base/strings/string_number_conversions.h" #include "base/strings/stringprintf.h" #include "ui/gfx/geometry/insets.h" #include "ui/gfx/geometry/point.h" @@ -117,8 +116,7 @@ NormalizedSizeBounds::NormalizedSizeBounds() = default; -NormalizedSizeBounds::NormalizedSizeBounds(base::Optional<int> main, - base::Optional<int> cross) +NormalizedSizeBounds::NormalizedSizeBounds(SizeBound main, SizeBound cross) : main_(std::move(main)), cross_(std::move(cross)) {} NormalizedSizeBounds::NormalizedSizeBounds(const NormalizedSizeBounds& other) @@ -128,10 +126,8 @@ : main_(other.main()), cross_(other.cross()) {} void NormalizedSizeBounds::Expand(int main, int cross) { - if (main_) - main_ = std::max(0, *main_ + main); - if (cross_) - cross_ = std::max(0, *cross_ + cross); + main_ = std::max<SizeBound>(0, main_ + main); + cross_ = std::max<SizeBound>(0, cross_ + cross); } void NormalizedSizeBounds::Inset(const NormalizedInsets& insets) { @@ -151,8 +147,7 @@ } std::string NormalizedSizeBounds::ToString() const { - return base::StrCat({main_ ? base::NumberToString(*main_) : "_", " x ", - cross_ ? base::NumberToString(*cross_) : "_"}); + return base::StrCat({main_.ToString(), " x ", cross_.ToString()}); } // NormalizedRect -------------------------------------------------------------- @@ -361,8 +356,7 @@ } } -base::Optional<int> GetMainAxis(LayoutOrientation orientation, - const SizeBounds& size) { +SizeBound GetMainAxis(LayoutOrientation orientation, const SizeBounds& size) { switch (orientation) { case LayoutOrientation::kHorizontal: return size.width(); @@ -371,8 +365,7 @@ } } -base::Optional<int> GetCrossAxis(LayoutOrientation orientation, - const SizeBounds& size) { +SizeBound GetCrossAxis(LayoutOrientation orientation, const SizeBounds& size) { switch (orientation) { case LayoutOrientation::kHorizontal: return size.height(); @@ -405,7 +398,7 @@ void SetMainAxis(SizeBounds* size, LayoutOrientation orientation, - base::Optional<int> main) { + SizeBound main) { switch (orientation) { case LayoutOrientation::kHorizontal: size->set_width(std::move(main)); @@ -418,7 +411,7 @@ void SetCrossAxis(SizeBounds* size, LayoutOrientation orientation, - base::Optional<int> cross) { + SizeBound cross) { switch (orientation) { case LayoutOrientation::kHorizontal: size->set_height(std::move(cross));
diff --git a/ui/views/layout/normalized_geometry.h b/ui/views/layout/normalized_geometry.h index e1b472e..87a6a32 100644 --- a/ui/views/layout/normalized_geometry.h +++ b/ui/views/layout/normalized_geometry.h
@@ -148,15 +148,15 @@ class VIEWS_EXPORT NormalizedSizeBounds { public: NormalizedSizeBounds(); - NormalizedSizeBounds(base::Optional<int> main, base::Optional<int> cross); + NormalizedSizeBounds(SizeBound main, SizeBound cross); explicit NormalizedSizeBounds(const NormalizedSize& size); NormalizedSizeBounds(const NormalizedSizeBounds& size_bounds); - const base::Optional<int>& main() const { return main_; } - void set_main(base::Optional<int> main) { main_ = std::move(main); } + const SizeBound& main() const { return main_; } + void set_main(SizeBound main) { main_ = std::move(main); } - const base::Optional<int>& cross() const { return cross_; } - void set_cross(base::Optional<int> cross) { cross_ = std::move(cross); } + const SizeBound& cross() const { return cross_; } + void set_cross(SizeBound cross) { cross_ = std::move(cross); } void Expand(int main, int cross); void Inset(const NormalizedInsets& insets); @@ -168,8 +168,8 @@ std::string ToString() const; private: - base::Optional<int> main_; - base::Optional<int> cross_; + SizeBound main_; + SizeBound cross_; }; // Represents a rectangle in layout space - that is, a rectangle whose @@ -284,10 +284,10 @@ const gfx::Size& size); int VIEWS_EXPORT GetCrossAxis(LayoutOrientation orientation, const gfx::Size& size); -base::Optional<int> VIEWS_EXPORT GetMainAxis(LayoutOrientation orientation, - const SizeBounds& size); -base::Optional<int> VIEWS_EXPORT GetCrossAxis(LayoutOrientation orientation, - const SizeBounds& size); +SizeBound VIEWS_EXPORT GetMainAxis(LayoutOrientation orientation, + const SizeBounds& size); +SizeBound VIEWS_EXPORT GetCrossAxis(LayoutOrientation orientation, + const SizeBounds& size); void VIEWS_EXPORT SetMainAxis(gfx::Size* size, LayoutOrientation orientation, int main); @@ -296,10 +296,10 @@ int cross); void VIEWS_EXPORT SetMainAxis(SizeBounds* size, LayoutOrientation orientation, - base::Optional<int> main); + SizeBound main); void VIEWS_EXPORT SetCrossAxis(SizeBounds* size, LayoutOrientation orientation, - base::Optional<int> cross); + SizeBound cross); } // namespace views
diff --git a/ui/views/layout/normalized_geometry_unittest.cc b/ui/views/layout/normalized_geometry_unittest.cc index 62c6a71..0938c0c 100644 --- a/ui/views/layout/normalized_geometry_unittest.cc +++ b/ui/views/layout/normalized_geometry_unittest.cc
@@ -57,14 +57,10 @@ SizeBounds size(1, 2); SizeBounds size2; - EXPECT_EQ(base::Optional<int>(1), - GetMainAxis(LayoutOrientation::kHorizontal, size)); - EXPECT_EQ(base::Optional<int>(2), - GetMainAxis(LayoutOrientation::kVertical, size)); - EXPECT_EQ(base::Optional<int>(), - GetMainAxis(LayoutOrientation::kHorizontal, size2)); - EXPECT_EQ(base::Optional<int>(), - GetMainAxis(LayoutOrientation::kVertical, size2)); + EXPECT_EQ(1, GetMainAxis(LayoutOrientation::kHorizontal, size)); + EXPECT_EQ(2, GetMainAxis(LayoutOrientation::kVertical, size)); + EXPECT_EQ(SizeBound(), GetMainAxis(LayoutOrientation::kHorizontal, size2)); + EXPECT_EQ(SizeBound(), GetMainAxis(LayoutOrientation::kVertical, size2)); } TEST(NormalizedGeometryTest, GetCrossAxis_Size) { @@ -78,14 +74,10 @@ SizeBounds size{1, 2}; SizeBounds size2; - EXPECT_EQ(base::Optional<int>(2), - GetCrossAxis(LayoutOrientation::kHorizontal, size)); - EXPECT_EQ(base::Optional<int>(1), - GetCrossAxis(LayoutOrientation::kVertical, size)); - EXPECT_EQ(base::Optional<int>(), - GetCrossAxis(LayoutOrientation::kHorizontal, size2)); - EXPECT_EQ(base::Optional<int>(), - GetCrossAxis(LayoutOrientation::kVertical, size2)); + EXPECT_EQ(2, GetCrossAxis(LayoutOrientation::kHorizontal, size)); + EXPECT_EQ(1, GetCrossAxis(LayoutOrientation::kVertical, size)); + EXPECT_EQ(SizeBound(), GetCrossAxis(LayoutOrientation::kHorizontal, size2)); + EXPECT_EQ(SizeBound(), GetCrossAxis(LayoutOrientation::kVertical, size2)); } TEST(NormalizedGeometryTest, SetMainAxis_Size) { @@ -103,10 +95,10 @@ SetMainAxis(&size, LayoutOrientation::kVertical, 4); EXPECT_EQ(SizeBounds(3, 4), size); - SetMainAxis(&size, LayoutOrientation::kHorizontal, base::nullopt); - EXPECT_EQ(SizeBounds(base::nullopt, 4), size); + SetMainAxis(&size, LayoutOrientation::kHorizontal, SizeBound()); + EXPECT_EQ(SizeBounds(SizeBound(), 4), size); - SetMainAxis(&size, LayoutOrientation::kVertical, base::nullopt); + SetMainAxis(&size, LayoutOrientation::kVertical, SizeBound()); EXPECT_EQ(SizeBounds(), size); } @@ -125,10 +117,10 @@ SetCrossAxis(&size, LayoutOrientation::kVertical, 4); EXPECT_EQ(SizeBounds(4, 3), size); - SetCrossAxis(&size, LayoutOrientation::kHorizontal, base::nullopt); - EXPECT_EQ(SizeBounds(4, base::nullopt), size); + SetCrossAxis(&size, LayoutOrientation::kHorizontal, SizeBound()); + EXPECT_EQ(SizeBounds(4, SizeBound()), size); - SetCrossAxis(&size, LayoutOrientation::kVertical, base::nullopt); + SetCrossAxis(&size, LayoutOrientation::kVertical, SizeBound()); EXPECT_EQ(SizeBounds(), size); }
diff --git a/ui/views/layout/proposed_layout.cc b/ui/views/layout/proposed_layout.cc index 6f8f5026..fb7535d 100644 --- a/ui/views/layout/proposed_layout.cc +++ b/ui/views/layout/proposed_layout.cc
@@ -14,19 +14,19 @@ namespace { -base::Optional<int> OptionalValueBetween(double value, - const base::Optional<int>& start, - const base::Optional<int>& target) { - return (start.has_value() && target.has_value()) - ? gfx::Tween::IntValueBetween(value, *start, *target) +SizeBound SizeBoundValueBetween(double value, + const SizeBound& start, + const SizeBound& target) { + return (start.is_bounded() && target.is_bounded()) + ? gfx::Tween::IntValueBetween(value, start.value(), target.value()) : target; } SizeBounds SizeBoundsBetween(double value, const SizeBounds& start, const SizeBounds& target) { - return {OptionalValueBetween(value, start.width(), target.width()), - OptionalValueBetween(value, start.height(), target.height())}; + return {SizeBoundValueBetween(value, start.width(), target.width()), + SizeBoundValueBetween(value, start.height(), target.height())}; } } // anonymous namespace
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TranslateTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TranslateTest.java index 866daf9..86df10c 100644 --- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TranslateTest.java +++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TranslateTest.java
@@ -19,6 +19,7 @@ import org.chromium.content_public.browser.test.util.Criteria; import org.chromium.content_public.browser.test.util.CriteriaHelper; import org.chromium.content_public.browser.test.util.TestThreadUtils; +import org.chromium.weblayer.Tab; import org.chromium.weblayer.TestWebLayer; import org.chromium.weblayer.shell.InstrumentationActivity; @@ -56,9 +57,10 @@ @Test @SmallTest - public void testShowTranslateUi() { + public void testShowTranslateUi() throws Exception { mActivityTestRule.navigateAndWait(mActivityTestRule.getTestDataURL("fr_test.html")); waitForInfoBarToShow(); + Assert.assertEquals("English", getInfoBarTargetLanguage()); EventUtils.simulateTouchCenterOfView(findViewByStringId("id/infobar_close_button")); waitForInfoBarToHide(); @@ -68,6 +70,49 @@ waitForInfoBarToShow(); } + @Test + @SmallTest + public void testOverridingOfTargetLanguage() throws Exception { + // Sanity-check that by default the infobar appears with the target language of the user's + // locale. + mActivityTestRule.navigateAndWait(mActivityTestRule.getTestDataURL("french_page.html")); + waitForInfoBarToShow(); + Assert.assertEquals("English", getInfoBarTargetLanguage()); + + EventUtils.simulateTouchCenterOfView(findViewByStringId("id/infobar_close_button")); + waitForInfoBarToHide(); + + // Verify overriding of the target language. + Tab tab = mActivityTestRule.getActivity().getTab(); + TestThreadUtils.runOnUiThreadBlocking(() -> { tab.setTranslateTargetLanguage("de"); }); + mActivityTestRule.navigateAndWait(mActivityTestRule.getTestDataURL("french_page.html")); + waitForInfoBarToShow(); + Assert.assertEquals("German", getInfoBarTargetLanguage()); + + EventUtils.simulateTouchCenterOfView(findViewByStringId("id/infobar_close_button")); + waitForInfoBarToHide(); + + // Check that the setting persists in the Tab by navigating to another page in French via a + // link click. + mActivityTestRule.executeScriptSync( + "document.onclick = function() {document.getElementById('link_to_french_page2').click()}", + true /* useSeparateIsolate */); + EventUtils.simulateTouchCenterOfView( + mActivityTestRule.getActivity().getWindow().getDecorView()); + waitForInfoBarToShow(); + Assert.assertEquals("German", getInfoBarTargetLanguage()); + + EventUtils.simulateTouchCenterOfView(findViewByStringId("id/infobar_close_button")); + waitForInfoBarToHide(); + + // Check that setting an empty string as the predefined target language causes behavior to + // revert to default. + TestThreadUtils.runOnUiThreadBlocking(() -> { tab.setTranslateTargetLanguage(""); }); + mActivityTestRule.navigateAndWait(mActivityTestRule.getTestDataURL("french_page.html")); + waitForInfoBarToShow(); + Assert.assertEquals("English", getInfoBarTargetLanguage()); + } + private View findViewByStringId(String id) { return mActivity.findViewById(ResourceUtil.getIdentifier(mRemoteContext, id)); } @@ -85,4 +130,12 @@ Matchers.nullValue()); }); } + + private String getInfoBarTargetLanguage() throws Exception { + TestWebLayer testWebLayer = TestWebLayer.getTestWebLayer(mActivity.getApplicationContext()); + return TestThreadUtils.runOnUiThreadBlocking(() -> { + return testWebLayer.getTranslateInfoBarTargetLanguage( + mActivity.getBrowser().getActiveTab()); + }); + } }
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/TabImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/TabImpl.java index 5594e7a..a662fbb 100644 --- a/weblayer/browser/java/org/chromium/weblayer_private/TabImpl.java +++ b/weblayer/browser/java/org/chromium/weblayer_private/TabImpl.java
@@ -38,6 +38,7 @@ import org.chromium.components.find_in_page.FindInPageBridge; import org.chromium.components.find_in_page.FindMatchRectsDetails; import org.chromium.components.find_in_page.FindResultBar; +import org.chromium.components.infobars.InfoBar; import org.chromium.components.url_formatter.UrlFormatter; import org.chromium.content_public.browser.LoadUrlParams; import org.chromium.content_public.browser.NavigationHandle; @@ -557,6 +558,11 @@ return proxy; } + @Override + public void setTranslateTargetLanguage(String targetLanguage) { + TabImplJni.get().setTranslateTargetLanguage(mNativeTab, targetLanguage); + } + public void removeFaviconCallbackProxy(FaviconCallbackProxy proxy) { mFaviconCallbackProxies.remove(proxy); } @@ -1042,6 +1048,16 @@ return mInfoBarContainer.getContainerViewForTesting().isAllowedToAutoHide(); } + @VisibleForTesting + public String getTranslateInfoBarTargetLanguageForTesting() { + if (!mInfoBarContainer.hasInfoBars()) return null; + + ArrayList<InfoBar> infobars = mInfoBarContainer.getInfoBarsForTesting(); + TranslateCompactInfoBar translateInfoBar = (TranslateCompactInfoBar) infobars.get(0); + + return translateInfoBar.getTargetLanguageForTesting(); + } + @NativeMethods interface Natives { TabImpl fromWebContents(WebContents webContents); @@ -1070,5 +1086,6 @@ void unregisterWebMessageCallback(long nativeTabImpl, String jsObjectName); boolean canTranslate(long nativeTabImpl); void showTranslateUi(long nativeTabImpl); + void setTranslateTargetLanguage(long nativeTabImpl, String targetLanguage); } }
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/TranslateCompactInfoBar.java b/weblayer/browser/java/org/chromium/weblayer_private/TranslateCompactInfoBar.java index e627c844..9e7ca44 100644 --- a/weblayer/browser/java/org/chromium/weblayer_private/TranslateCompactInfoBar.java +++ b/weblayer/browser/java/org/chromium/weblayer_private/TranslateCompactInfoBar.java
@@ -471,6 +471,13 @@ return this.isTabSelectedForTesting(TARGET_TAB_INDEX); } + /** + * Returns the name of the target language. This is only used for automation testing. + */ + public String getTargetLanguageForTesting() { + return mOptions.targetLanguageName(); + } + private void createAndShowSnackbar(int actionId) { // NOTE: WebLayer doesn't have snackbars, so the relevant action is just taken directly. // TODO(blundell): If WebLayer ends up staying with this implementation long-term, update
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/interfaces/ITab.aidl b/weblayer/browser/java/org/chromium/weblayer_private/interfaces/ITab.aidl index dfe46306..21c5084 100644 --- a/weblayer/browser/java/org/chromium/weblayer_private/interfaces/ITab.aidl +++ b/weblayer/browser/java/org/chromium/weblayer_private/interfaces/ITab.aidl
@@ -71,4 +71,5 @@ // Added in 86 void setGoogleAccountsCallbackClient(IGoogleAccountsCallbackClient client) = 23; IFaviconFetcher createFaviconFetcher(IFaviconFetcherClient client) = 24; + void setTranslateTargetLanguage(in String targetLanguage) = 25; }
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/test/TestWebLayerImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/test/TestWebLayerImpl.java index cda8ac7..b1e7bf2 100644 --- a/weblayer/browser/java/org/chromium/weblayer_private/test/TestWebLayerImpl.java +++ b/weblayer/browser/java/org/chromium/weblayer_private/test/TestWebLayerImpl.java
@@ -179,4 +179,10 @@ TextView urlBarTextView = (TextView) textView; return urlBarTextView.getText().toString(); } + + @Override + public String getTranslateInfoBarTargetLanguage(ITab tab) { + TabImpl tabImpl = (TabImpl) tab; + return tabImpl.getTranslateInfoBarTargetLanguageForTesting(); + } }
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/test_interfaces/ITestWebLayer.aidl b/weblayer/browser/java/org/chromium/weblayer_private/test_interfaces/ITestWebLayer.aidl index 2311f7f..335a137 100644 --- a/weblayer/browser/java/org/chromium/weblayer_private/test_interfaces/ITestWebLayer.aidl +++ b/weblayer/browser/java/org/chromium/weblayer_private/test_interfaces/ITestWebLayer.aidl
@@ -46,4 +46,8 @@ boolean canInfoBarContainerScroll(in ITab tab) = 14; String getDisplayedUrl(IObjectWrapper /* View */ urlBarView) = 15; + + // Returns the target language of the currently-showing translate infobar, or null if no translate + // infobar is currently showing. + String getTranslateInfoBarTargetLanguage(in ITab tab) = 16; }
diff --git a/weblayer/browser/tab_impl.cc b/weblayer/browser/tab_impl.cc index 85189bfe..4023f47 100644 --- a/weblayer/browser/tab_impl.cc +++ b/weblayer/browser/tab_impl.cc
@@ -94,6 +94,7 @@ #include "components/embedder_support/android/contextmenu/context_menu_builder.h" #include "components/embedder_support/android/delegate/color_chooser_android.h" #include "components/javascript_dialogs/tab_modal_dialog_manager.h" // nogncheck +#include "components/translate/core/browser/translate_manager.h" #include "ui/android/view_android.h" #include "ui/gfx/android/java_bitmap.h" #include "weblayer/browser/browser_controls_container_view.h" @@ -103,6 +104,7 @@ #include "weblayer/browser/java/jni/TabImpl_jni.h" #include "weblayer/browser/javascript_tab_modal_dialog_manager_delegate_android.h" #include "weblayer/browser/js_communication/web_message_host_factory_proxy.h" +#include "weblayer/browser/translate_client_impl.h" #include "weblayer/browser/weblayer_factory_impl_android.h" #include "weblayer/browser/webrtc/media_stream_manager.h" #endif @@ -805,6 +807,16 @@ TranslateClientImpl::FromWebContents(web_contents()) ->ManualTranslateWhenReady(); } + +void TabImpl::SetTranslateTargetLanguage( + JNIEnv* env, + const base::android::JavaParamRef<jstring>& translate_target_lang) { + translate::TranslateManager* translate_manager = + TranslateClientImpl::FromWebContents(web_contents()) + ->GetTranslateManager(); + translate_manager->SetPredefinedTargetLanguage( + base::android::ConvertJavaStringToUTF8(env, translate_target_lang)); +} #endif // OS_ANDROID content::WebContents* TabImpl::OpenURLFromTab(
diff --git a/weblayer/browser/tab_impl.h b/weblayer/browser/tab_impl.h index f529b5b1..acb659c 100644 --- a/weblayer/browser/tab_impl.h +++ b/weblayer/browser/tab_impl.h
@@ -198,6 +198,9 @@ const base::android::JavaParamRef<jstring>& js_object_name); jboolean CanTranslate(JNIEnv* env); void ShowTranslateUi(JNIEnv* env); + void SetTranslateTargetLanguage( + JNIEnv* env, + const base::android::JavaParamRef<jstring>& translate_target_lang); #endif ErrorPageDelegate* error_page_delegate() { return error_page_delegate_; }
diff --git a/weblayer/public/java/org/chromium/weblayer/Tab.java b/weblayer/public/java/org/chromium/weblayer/Tab.java index 8ed6f91..516cdfe 100644 --- a/weblayer/public/java/org/chromium/weblayer/Tab.java +++ b/weblayer/public/java/org/chromium/weblayer/Tab.java
@@ -190,6 +190,27 @@ } /** + * Sets the target language for translation such that whenever the translate UI shows in this + * Tab, the target language will be |targetLanguage|. Notes: + * - |targetLanguage| should be specified as the language code (e.g., "de" for German). + * - Passing an empty string causes behavior to revert to default. + * - Even with the target language specified, the translate UI will not trigger for pages in the + * user's locale. + * @since 86 + */ + public void setTranslateTargetLanguage(@NonNull String targetLanguage) { + ThreadCheck.ensureOnUiThread(); + if (WebLayer.getSupportedMajorVersionInternal() < 86) { + throw new UnsupportedOperationException(); + } + try { + mImpl.setTranslateTargetLanguage(targetLanguage); + } catch (RemoteException e) { + throw new APICallException(e); + } + } + + /** * Executes the script, and returns the result as a JSON object to the callback if provided. The * object passed to the callback will have a single key SCRIPT_RESULT_KEY which will hold the * result of running the script.
diff --git a/weblayer/public/javatestutil/org/chromium/weblayer/TestWebLayer.java b/weblayer/public/javatestutil/org/chromium/weblayer/TestWebLayer.java index cee8da7..3e8490ab 100644 --- a/weblayer/public/javatestutil/org/chromium/weblayer/TestWebLayer.java +++ b/weblayer/public/javatestutil/org/chromium/weblayer/TestWebLayer.java
@@ -118,6 +118,10 @@ return mITestWebLayer.getDisplayedUrl(ObjectWrapper.wrap(urlBarView)); } + public String getTranslateInfoBarTargetLanguage(Tab tab) throws RemoteException { + return mITestWebLayer.getTranslateInfoBarTargetLanguage(tab.getITab()); + } + public static void disableWebViewCompatibilityMode() { WebLayer.disableWebViewCompatibilityMode(); }
diff --git a/weblayer/shell/android/shell_apk/res/menu/app_menu.xml b/weblayer/shell/android/shell_apk/res/menu/app_menu.xml index 4057cc4..4b990c38 100644 --- a/weblayer/shell/android/shell_apk/res/menu/app_menu.xml +++ b/weblayer/shell/android/shell_apk/res/menu/app_menu.xml
@@ -22,4 +22,8 @@ android:title="Restart with WebView compat mode" /> <item android:id="@+id/no_webview_compat_menu_id" android:title="Restart without WebView compat mode" /> + <item android:id="@+id/set_translate_target_lang_menu_id" + android:title="Set translate target language to German" /> + <item android:id="@+id/clear_translate_target_lang_menu_id" + android:title="Clear translate target language override" /> </menu>
diff --git a/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/WebLayerShellActivity.java b/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/WebLayerShellActivity.java index 460b706..861ef94 100644 --- a/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/WebLayerShellActivity.java +++ b/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/WebLayerShellActivity.java
@@ -273,6 +273,14 @@ restartShell(false); } + if (item.getItemId() == R.id.set_translate_target_lang_menu_id) { + mBrowser.getActiveTab().setTranslateTargetLanguage("de"); + } + + if (item.getItemId() == R.id.clear_translate_target_lang_menu_id) { + mBrowser.getActiveTab().setTranslateTargetLanguage(""); + } + return false; }); popup.show();
diff --git a/weblayer/test/data/french_page.html b/weblayer/test/data/french_page.html index 7fcf684..a9d7eaf 100644 --- a/weblayer/test/data/french_page.html +++ b/weblayer/test/data/french_page.html
@@ -2,5 +2,8 @@ <head><title>Cette page est en Français</title></head> <body> Cette page a été rédigée en français. Saviez-vous que le Français est la langue officielle des jeux olympiques? Ça vous en bouche un coin, pas vrai? +<a id='link_to_french_page2' href="/weblayer/test/data/french_page2.html"> +Une autre page en français +</a> </body> </html>