Version in base suite: 150.0.7871.100-1~deb13u1
Version in overlay suite: 150.0.7871.124-1~deb13u1
Base version: chromium_150.0.7871.124-1~deb13u1
Target version: chromium_150.0.7871.181-1~deb13u1
Base file: /srv/ftp-master.debian.org/ftp/pool/main/c/chromium/chromium_150.0.7871.124-1~deb13u1.dsc
Target file: /srv/ftp-master.debian.org/policy/pool/main/c/chromium/chromium_150.0.7871.181-1~deb13u1.dsc
DEPS | 10
ash/strings/ash_strings_eu.xtb | 10
ash/strings/ash_strings_kk.xtb | 4
ash/strings/ash_strings_pt-BR.xtb | 2
ash/strings/ash_strings_te.xtb | 2
build/util/LASTCHANGE | 2
build/util/LASTCHANGE.committime | 2
chrome/VERSION | 2
chrome/app/resources/chromium_strings_iw.xtb | 2
chrome/app/resources/generated_resources_ca.xtb | 10
chrome/app/resources/generated_resources_en-GB.xtb | 16
chrome/app/resources/generated_resources_fa.xtb | 16
chrome/app/resources/generated_resources_gl.xtb | 2
chrome/app/resources/generated_resources_iw.xtb | 4
chrome/app/resources/generated_resources_ja.xtb | 2
chrome/app/resources/generated_resources_kk.xtb | 4
chrome/app/resources/generated_resources_my.xtb | 2
chrome/app/resources/generated_resources_ro.xtb | 2
chrome/app/resources/generated_resources_ru.xtb | 2
chrome/app/resources/generated_resources_sk.xtb | 2
chrome/app/resources/generated_resources_sr-Latn.xtb | 2
chrome/app/resources/generated_resources_sr.xtb | 2
chrome/app/resources/generated_resources_te.xtb | 4
chrome/browser/component_updater/platform_runtime_component_installer.cc | 22
chrome/browser/component_updater/platform_runtime_component_installer_unittest.cc | 40
chrome/browser/devtools/devtools_ui_bindings.cc | 14
chrome/browser/extensions/api/mime_handlers/mime_handler_fallback_browsertest.cc | 116
chrome/browser/password_manager/password_manager_util_mac.mm | 23
chrome/browser/plugins/plugin_response_interceptor_url_loader_throttle.cc | 29
chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_kk.xtb | 4
chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_ne.xtb | 2
chrome/browser/sharing/glic_experimental_triggering/glic_experimental_triggering_message_handler.cc | 1
chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb | 4
chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb | 2
chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb | 2
chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb | 6
chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb | 6
chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb | 2
chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb | 2
chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb | 2
chrome/browser/ui/views/status_icons/status_icon_linux_dbus.cc | 411
chrome/browser/ui/views/status_icons/status_icon_linux_dbus.h | 37
chromecast/browser/BUILD.gn | 1
chromeos/CHROMEOS_LKGM | 2
chromeos/profiles/arm.afdo.newest.txt | 2
chromeos/profiles/atom.afdo.newest.txt | 2
chromeos/profiles/bigcore.afdo.newest.txt | 2
chromeos/strings/chromeos_strings_iw.xtb | 10
chromeos/strings/chromeos_strings_kk.xtb | 6
components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb | 2
components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb | 6
components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb | 2
components/cast_streaming/renderer/frame/demuxer_connector.cc | 94
components/cast_streaming/renderer/frame/demuxer_connector.h | 49
components/cast_streaming/renderer/frame/frame_injecting_demuxer.cc | 35
components/cast_streaming/renderer/frame/frame_injecting_demuxer.h | 24
components/cast_streaming/renderer/resource_provider_impl.cc | 2
components/strings/components_strings_ar.xtb | 4
components/strings/components_strings_es-419.xtb | 2
components/strings/components_strings_fa.xtb | 12
components/strings/components_strings_iw.xtb | 4
components/strings/components_strings_ja.xtb | 6
components/strings/components_strings_kk.xtb | 4
components/strings/components_strings_lv.xtb | 2
components/strings/components_strings_ms.xtb | 2
components/strings/components_strings_pt-BR.xtb | 10
components/strings/components_strings_sk.xtb | 2
components/strings/components_strings_te.xtb | 4
components/strings/components_strings_th.xtb | 2
components/strings/components_strings_uk.xtb | 2
components/viz/service/layers/layer_context_impl.cc | 12
components/viz/service/layers/layer_context_impl_property_trees_unittest.cc | 33
components/viz/service/surfaces/surface.cc | 10
components/viz/service/surfaces/surface_manager.cc | 2
components/viz/service/surfaces/surface_manager.h | 6
debian/changelog | 33
extensions/browser/api/mime_handler/mime_handler_api_unittest.cc | 4
extensions/browser/mime_handler/mime_handler_stream_manager.cc | 29
extensions/browser/mime_handler/mime_handler_stream_manager.h | 52
extensions/browser/mime_handler/mime_handler_stream_manager_unittest.cc | 116
gpu/command_buffer/service/indexed_buffer_binding_host.cc | 35
gpu/command_buffer/service/indexed_buffer_binding_host.h | 4
gpu/command_buffer/service/shared_image/shared_image_representation.cc | 23
gpu/command_buffer/service/transform_feedback_manager.cc | 16
gpu/command_buffer/service/transform_feedback_manager.h | 2
gpu/command_buffer/service/transform_feedback_manager_unittest.cc | 117
gpu/command_buffer/tests/gl_ext_blend_func_extended_unittest.cc | 24
gpu/config/gpu_lists_version.h | 2
gpu/webgpu/DAWN_VERSION | 2
gpu/webgpu/dawn_commit_hash.h | 2
media/capture/video/apple/video_capture_device_apple.h | 2
media/capture/video/apple/video_capture_device_apple.mm | 42
media/capture/video/apple/video_capture_device_apple_unittest.mm | 32
net/cert/internal/trust_store_nss.cc | 8
net/cert/internal/trust_store_nss_unittest.cc | 26
net/disk_cache/backend_unittest.cc | 61
net/disk_cache/simple/simple_backend_impl.cc | 6
remoting/resources/remoting_strings_fa.xtb | 2
skia/ext/skia_commit_hash.h | 2
testing/buildbot/filters/linux.swiftshader.tsan.gl_tests_passthrough.filter | 5
testing/variations/fieldtrial_testing_config.json | 15
third_party/angle/src/compiler/translator/HashNames.cpp | 35
third_party/angle/src/compiler/translator/HashNames.h | 34
third_party/angle/src/compiler/translator/ShaderLang.cpp | 2
third_party/angle/src/tests/angle_unittests.gni | 1
third_party/angle/src/tests/compiler_tests/HashNames_test.cpp | 84
third_party/blink/common/features.cc | 6
third_party/blink/public/common/features.h | 2
third_party/blink/public/strings/translations/blink_strings_en-GB.xtb | 2
third_party/blink/renderer/core/workers/worker_backing_thread.cc | 12
third_party/blink/renderer/modules/breakout_box/media_stream_audio_track_underlying_source.cc | 2
third_party/blink/renderer/modules/webaudio/audio_worklet_global_scope_test.cc | 111
third_party/blink/renderer/modules/webaudio/audio_worklet_processor.cc | 17
third_party/blink/renderer/modules/webaudio/audio_worklet_processor.h | 2
third_party/dawn/src/dawn/native/vulkan/PhysicalDeviceVk.cpp | 7
third_party/skia/src/gpu/ganesh/GrDrawingManager.cpp | 14
third_party/skia/src/gpu/ganesh/GrTextureResolveRenderTask.cpp | 34
third_party/skia/src/gpu/ganesh/GrTextureResolveRenderTask.h | 6
third_party/skia/src/gpu/ganesh/SurfaceContext.cpp | 7
third_party/skia/tests/GrSurfaceResolveTest.cpp | 156
third_party/skia/tests/ReadWritePixelsGpuTest.cpp | 73
tools/metrics/histograms/metadata/dev/enums.xml | 5
tools/metrics/histograms/metadata/dev/histograms.xml | 11
ui/aura/window.cc | 27
ui/aura/window_unittest.cc | 102
ui/base/x/BUILD.gn | 2
ui/base/x/x11_whole_screen_move_loop.cc | 4
ui/base/x/x11_whole_screen_move_loop_unittest.cc | 82
ui/ozone/platform/wayland/host/wayland_buffer_manager_host.cc | 10
ui/ozone/platform/wayland/host/wayland_output_manager.cc | 16
ui/ozone/platform/wayland/host/wayland_window_manager.cc | 16
ui/ozone/platform/wayland/host/wayland_window_manager.h | 5
ui/ozone/platform/wayland/host/wayland_window_manager_unittest.cc | 3
ui/ozone/platform/wayland/wayland_buffer_manager_unittest.cc | 66
v8/include/v8-version.h | 2
v8/src/compiler/js-inlining-heuristic.cc | 22
v8/src/compiler/simplified-lowering.cc | 5
v8/tools/builtins-pgo/profiles/meta.json | 2
v8/tools/builtins-pgo/profiles/x64-rl.profile |32077 ++++----
v8/tools/builtins-pgo/profiles/x64.profile |36681 ++++------
v8/tools/builtins-pgo/profiles/x86-rl.profile |26446 +++----
v8/tools/builtins-pgo/profiles/x86.profile |27351 +++----
142 files changed, 63811 insertions(+), 61582 deletions(-)
dpkg-source: warning: cannot verify inline signature for /srv/release.debian.org/tmp/tmp5nz2_ewe/chromium_150.0.7871.124-1~deb13u1.dsc: no acceptable signature found
dpkg-source: warning: cannot verify inline signature for /srv/release.debian.org/tmp/tmp5nz2_ewe/chromium_150.0.7871.181-1~deb13u1.dsc: no acceptable signature found
diff -Nru chromium-150.0.7871.124/DEPS chromium-150.0.7871.181/DEPS
--- chromium-150.0.7871.124/DEPS 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/DEPS 2026-07-20 20:45:36.000000000 +0000
@@ -327,15 +327,15 @@
# Three lines of non-changing comments so that
# the commit queue can handle CLs rolling Skia
# and whatever else without interference from each other.
- 'skia_revision': 'bee4c917220040e147f14964635ff92ce6c5a3f6',
+ 'skia_revision': '587c5b0f5a7b0260826a0c19094c2d952195066e',
# Three lines of non-changing comments so that
# the commit queue can handle CLs rolling V8
# and whatever else without interference from each other.
- 'v8_revision': '209c9cea0db17d8caf23e9d2c7de08c351609744',
+ 'v8_revision': '49df3678d1b6a1511167b15a6b7499d3ab37a638',
# 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': '13e691adf3d4d3ebee2f7239731a07d3b9704956',
+ 'angle_revision': 'edae461ad2122a3a2be0b5d3d067472aa0e3329c',
# Three lines of non-changing comments so that
# the commit queue can handle CLs rolling SwiftShader
# and whatever else without interference from each other.
@@ -431,7 +431,7 @@
# Three lines of non-changing comments so that
# the commit queue can handle CLs rolling feed
# and whatever else without interference from each other.
- 'dawn_revision': '01249a97332468dbdd6cf5edb8dd7bae77875de5',
+ 'dawn_revision': 'd089fc91e7e4881362463faf8efe9ae435e34660',
# Three lines of non-changing comments so that
# the commit queue can handle CLs rolling feed
# and whatever else without interference from each other.
@@ -3729,7 +3729,7 @@
'src/chrome/common/request_header_integrity/internal': {
'url': Var('chrome_git') + '/chrome/browser/request_header_integrity/internal.git' + '@' +
- '55dc43ed2e96cff1908f98254152cd637685d2a4',
+ 'f8df62623b538b85c433c9b2ba673d02705a3465',
'condition': 'checkout_src_internal',
},
diff -Nru chromium-150.0.7871.124/ash/strings/ash_strings_eu.xtb chromium-150.0.7871.181/ash/strings/ash_strings_eu.xtb
--- chromium-150.0.7871.124/ash/strings/ash_strings_eu.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/ash/strings/ash_strings_eu.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -394,7 +394,7 @@
Ez duzu egitekorik. Bikain!
Ez dago irudirik Fitxategiak aplikazioan
Itzali Bruschetta
-Probatu kamerako markoa beti pantailaren erdian egon zaitezen bideodeietan. Aktiba ezazu ezarpen bizkorretan.
+Probatu kamera-enkoadraketa beti pantailaren erdian egon zaitezen bideodeietan. Aktiba ezazu ezarpen bizkorretan.
Aldatu leiho-lauzaren tamaina eskuinerantz
Joan aurreko fitxara
Mugitu lehenengo zortzi fitxen artean
@@ -2099,7 +2099,7 @@
gailuan gordeta zeuden erabiltzaile guztien fitxategi eta gailuko datu guztiak betiko ezabatu dira.
Telefonoa isilarazteko aukera ez dago erabilgarri laneko profilean
Alt + gora egiteko gezi-tekla lasterbidea aldatu egin da. Orrian gora egiteko tekla erabiltzeko, sakatu tekla + gora egiteko gezi-tekla.
-Kamerako markoa desaktibatuta dago.
+Kamera-enkoadraketa desaktibatuta dago.
Ados
Chromebook-erako Steam (beta-bertsioa) zerbitzuaren bidez instalatutako aplikazio eta joko guztiak gailutik kenduko dira. Aplikazio eta joko horiekin loturiko datuak ere kenduko dira. Desinstalatu aurretik, ziurtatu gordetako aplikazio eta jokoen babeskopiak egiten dituzula.
HID gailuak
@@ -2273,7 +2273,7 @@
Deskargatu
Android
orrian behera tekla
-Kamerako markoa aktibatuta dago.
+Kamera-enkoadraketa aktibatuta dago.
Gailua itzaltzen denean, administratzailearen saioa amaituko da, eta ezin izango du kontrolatu gailua.
Itzaltzeko, eduki sakatuta berriro gailuaren etengailua.
@@ -2318,7 +2318,7 @@
Konektatu egin da berriro kamera.
Aktibatu jokoak kontrolatzeko aukerak
Egin babeskopiak Google Drive-n. Leheneratu gailuaren datuak edo aldatu gailua edonoiz. Aplikazioetako datuak sartzen dira babeskopietan. Babeskopiak Google-ra kargatzen dira, eta Google-ko kontuko pasahitza erabilita enkriptatzen.
-Aktibatu/Desaktibatu kamerako markoa.
+Aktibatu/Desaktibatu kamera-enkoadraketa.
Quick Share-ren ezarpenak
Sistemak ezin izan du gorde gailuaren konfigurazioa.
°F
@@ -2641,7 +2641,7 @@
Desegin kolorearen arabera ordenatzeko irizpidea ezartzeko aukera
Erakutsi Quick Share-ren ezarpenak. Denentzat ikusgai egongo diren denbora: .
Kopiatu da testua arbelean
-Kamerako markoa
+Kamera-enk.
Ez dago lan-eremu edo txantiloirik gordeta
Desegin da ordenatzeko irizpidea ezartzeko aukera
Data- eta ordu-ezarpenak
diff -Nru chromium-150.0.7871.124/ash/strings/ash_strings_kk.xtb chromium-150.0.7871.181/ash/strings/ash_strings_kk.xtb
--- chromium-150.0.7871.124/ash/strings/ash_strings_kk.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/ash/strings/ash_strings_kk.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -242,7 +242,7 @@
қолжетімді емес.
Switch Access функциясын "Параметрлер > Accessibility" бөлімінен өшіруге болады.
құрылғы
-Жүктелуде
+Жүктеліп жатыр
Алдыңғы бет
"Тарих" бетін ашу
Ендірілген VPN
@@ -941,7 +941,7 @@
Терезелер қазіргі жұмыс үстелінен көрсетіліп тұр. Терезелерді барлық жұмыс үстелінен көрсету үшін жоғарыға бағыттауыш пернені басыңыз.
-
Ойын-сауық
-Жүктелуде…
+Жүктеліп жатыр…
және қолжетімді емес.
Бұған дейін жалғанғандар
Экранның осы жағына қоятын терезені таңдау
diff -Nru chromium-150.0.7871.124/ash/strings/ash_strings_pt-BR.xtb chromium-150.0.7871.181/ash/strings/ash_strings_pt-BR.xtb
--- chromium-150.0.7871.124/ash/strings/ash_strings_pt-BR.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/ash/strings/ash_strings_pt-BR.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -1626,7 +1626,7 @@
Essa ação libera o acesso para e todos os apps e sites com as permissões de câmera e microfone. Talvez seja necessário atualizar a página da Web ou reiniciar o app.
LTE+
Não foi possível verificar sua senha. Tente de novo.
-Saiba como
+Veja como ativar
Entrada para microfone
precisa de atenção.
A extensão externa requer que a versão do Google Chrome, ou mais recente, esteja instalada.
diff -Nru chromium-150.0.7871.124/ash/strings/ash_strings_te.xtb chromium-150.0.7871.181/ash/strings/ash_strings_te.xtb
--- chromium-150.0.7871.124/ash/strings/ash_strings_te.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/ash/strings/ash_strings_te.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -1130,7 +1130,7 @@
GPRS
స్థూలదృష్టి మోడ్
సెట్టింగ్లను తెరువు
-ఈ సెట్టింగ్లు మీ ఇతర Chrome OS డివైజ్లలో సింక్ అవుతున్నాయి. మీరు వీటిని ఇక్కడే మార్చుకోవచ్చు లేదా సెట్టింగ్లలో పూర్తి లిస్ట్ను మేనేజ్ చేయవచ్చు.
+ఈ సెట్టింగ్లు మీ ఇతర ChromeOS డివైజ్లలో సింక్ అవుతున్నాయి. మీరు వీటిని ఇక్కడే మార్చుకోవచ్చు లేదా సెట్టింగ్లలో పూర్తి లిస్ట్ను మేనేజ్ చేయవచ్చు.
అప్డేట్ చేసి, షట్ డౌన్ చేయండి
నెట్వర్క్ కనెక్షన్ కోసం వేచి ఉంది...
స్క్రీన్షాట్
diff -Nru chromium-150.0.7871.124/build/util/LASTCHANGE chromium-150.0.7871.181/build/util/LASTCHANGE
--- chromium-150.0.7871.124/build/util/LASTCHANGE 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/build/util/LASTCHANGE 2026-07-20 20:45:36.000000000 +0000
@@ -1,2 +1,2 @@
-LASTCHANGE=9261fd0a595ac4964ea84e6bd4a025c1173a2ffa-refs/branch-heads/7871@{#3359}
+LASTCHANGE=24b04c927b23c39cf9c5227cc8dc6f64a744c8e9-refs/branch-heads/7871@{#3786}
LASTCHANGE_YEAR=2026
diff -Nru chromium-150.0.7871.124/build/util/LASTCHANGE.committime chromium-150.0.7871.181/build/util/LASTCHANGE.committime
--- chromium-150.0.7871.124/build/util/LASTCHANGE.committime 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/build/util/LASTCHANGE.committime 2026-07-20 20:45:36.000000000 +0000
@@ -1 +1 @@
-1783978590
\ No newline at end of file
+1784580336
\ No newline at end of file
diff -Nru chromium-150.0.7871.124/chrome/VERSION chromium-150.0.7871.181/chrome/VERSION
--- chromium-150.0.7871.124/chrome/VERSION 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/VERSION 2026-07-20 20:45:36.000000000 +0000
@@ -1,4 +1,4 @@
MAJOR=150
MINOR=0
BUILD=7871
-PATCH=124
+PATCH=181
diff -Nru chromium-150.0.7871.124/chrome/app/resources/chromium_strings_iw.xtb chromium-150.0.7871.181/chrome/app/resources/chromium_strings_iw.xtb
--- chromium-150.0.7871.124/chrome/app/resources/chromium_strings_iw.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/app/resources/chromium_strings_iw.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -688,7 +688,7 @@
כדי להשתמש ב-Chromium נדרש Windows מגרסה 10 ואילך.
אופציונלי: שליחה אוטומטית של נתוני אבחון ונתוני שימוש במכשיר אל Google תעזור לשפר את התכונות ואת הביצועים של ChromiumOS.
כדי להשתמש בנתוני Chromium ולשמור אותם בחשבון Google, עליך לאמת את הזהות שלך
-הצגת הנחיות לצורך כניסה אל Chromium
+הצגת פרומפטים לצורך כניסה אל Chromium
Chromium אינו מעודכן
תודה שבחרת ב-Chromium כדפדפן ברירת המחדל שלך!
ל-Chromium יש אפשרות לבדוק את הסיסמאות שלך רק אם שמרת אותן
diff -Nru chromium-150.0.7871.124/chrome/app/resources/generated_resources_ca.xtb chromium-150.0.7871.181/chrome/app/resources/generated_resources_ca.xtb
--- chromium-150.0.7871.124/chrome/app/resources/generated_resources_ca.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/app/resources/generated_resources_ca.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -5960,7 +5960,7 @@
No rastregis
Veure i gestionar els teus grups de pestanyes
Prova de demanar coses com ara "resumeix aquesta pàgina" o fes la teva pròpia pregunta.
-D'acord
+D'acord, entesos
Espera que el fitxer s'obri abans de tornar-ho a provar
Idioma
S'estan cercant dispositius detectables a prop...
@@ -6698,7 +6698,7 @@
El micròfon està desactivat al dispositiu
S'ha esgotat el temps d'espera per iniciar la sessió
Segueix els colors del dispositiu
-D'acord
+D'acord, entesos
Contrasenyes desades
Tanca el menú d'accessibilitat
Errors greus
@@ -7133,7 +7133,7 @@
Se't tancarà la sessió dels llocs web que es mostren, també de les pestanyes obertes
Cop&ia la imatge
Restableix el nivell de zoom predeterminat
-En espera de la teva ajuda
+S'està esperant la teva ajuda
País/Regió
S'estan activant les dades mòbils
La contrasenya ha de tenir com a mínim 8 caràcters i incloure almenys dos dels elements següents: lletres majúscules, lletres minúscules, números o símbols. No ha de tenir caràcters repetits ni seqüències de 4 o més.
@@ -8677,7 +8677,7 @@
Descriu el problema abans d'enviar suggeriments.
Gestiona els certificats HTTPS/SSL al dispositiu
Confirma la contrasenya
-D'acord
+D'acord, entesos
Per utilitzar aquesta extensió, escriviu "", premeu la tecla de tabulació i indiqueu l'ordre o la cerca.
Fes clic per abandonar .
Teclat en pantalla
@@ -8928,7 +8928,7 @@
Android
Av Pàg
està en pausa
-Utilitza l'encriptació predeterminada de Google per a les contrasenyes del teu Compte de Google
+Utilitza l'encriptació predeterminada de Google per a les contrasenyes del meu Compte de Google
El membre de la teva família no pot rebre contrasenyes en aquest moment. Demana-li que actualitzi Chrome i que sincronitzi les seves contrasenyes.
Aquesta opció no està disponible en aquests moments.
Portal d'incògnit:
diff -Nru chromium-150.0.7871.124/chrome/app/resources/generated_resources_en-GB.xtb chromium-150.0.7871.181/chrome/app/resources/generated_resources_en-GB.xtb
--- chromium-150.0.7871.124/chrome/app/resources/generated_resources_en-GB.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/app/resources/generated_resources_en-GB.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -3337,7 +3337,7 @@
This file is encrypted. Ask its owner to decrypt it.
More about automated password change
App details
-Save video frame as…
+Save Video Frame As…
Note:
Look left
The screen reader on ChromeOS Flex, ChromeVox, is primarily used by people with blindness or low vision to read text displayed on the screen with a speech synthesiser or braille display. Press and hold both volume keys for five seconds to turn on ChromeVox. When ChromeVox is activated, you’ll go through a quick tour.
@@ -4549,7 +4549,7 @@
Translation Language:
Open your mouth wide
Real-time, AI-powered protection against dangerous sites, downloads and extensions that's based on your browsing data getting sent to Google
-Sa&ve video as...
+Sa&ve Video As...
Automated password change
File System
{NUM_GROUPS,plural, =1{Keep group}other{Keep groups}}
@@ -4757,7 +4757,7 @@
is blocked by your parent. Ask your parent for permission to use this app.
*.jpeg, *.jpg, *.png
Move to…
-New tab below
+New Tab Below
Make items on your screen, including text, smaller or larger
You can make this tab inactive or refresh to see the full list again
Focus group
@@ -5069,7 +5069,7 @@
Enable ADB debugging
To see a simplified view of this page, go to More Tools > Reading mode
Chrome was unable to set the system time. Please check the time below and correct it if needed.
-&Open video in new tab
+&Open Video in New Tab
Allow in Incognito
{GROUP_COUNT,plural, =1{Delete tab group?}other{Delete tab groups?}}
Managed by your parent
@@ -5763,7 +5763,7 @@
Recommendation
Follow instructions on your phone to verify the code
Password must be at least 8 characters
-Copy video frame
+Copy Video Frame
Netscape Certificate SSL Server Name
Free up disk space or select data may be automatically deleted
Skills in Chrome
@@ -6372,7 +6372,7 @@
The application appears to be invalid.
Try again or select from one of the available themes below.
Save in account
-Close tabs below
+Close Tabs Below
Save password?
iCloud Keychain
List of recent sites that you visited that can suggest ads to other sites as you keep browsing
@@ -9533,7 +9533,7 @@
Origin must be secure
Extended security updates available
Confirm Permission
-C&opy video address
+C&opy Video Address
Sites usually show ads so that they can provide content or services free of charge. But, some sites are known to show intrusive or misleading ads.
All pages of
Current tab
@@ -11250,7 +11250,7 @@
Do you trust this site with your data?
Scan this QR code with the camera on the device where you want to create and save your passkey for
-Picture-in-picture
+Picture-in-Picture
Show Reading List
The profile is not supported
accounts
diff -Nru chromium-150.0.7871.124/chrome/app/resources/generated_resources_fa.xtb chromium-150.0.7871.181/chrome/app/resources/generated_resources_fa.xtb
--- chromium-150.0.7871.124/chrome/app/resources/generated_resources_fa.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/app/resources/generated_resources_fa.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -270,7 +270,7 @@
خلق تصویر با هوش مصنوعی
راهاندازی سریع Android تمام شد. راهاندازی را در خود ادامه دهید.
میتوانید در «تنظیمات» به هر شبکه تلفن همراه واجدشرایطی متصل شوید
-دوباره نپرسیدن
+دیگر نپرسیدن
سفارشی
اجازه دارد این سایت را بخواند و تغییر دهد
از شما دربرابر سایتها، بارگیریها، و افزونههای خطرناک محافظت میکند
@@ -383,7 +383,7 @@
خودآزمایی ناموفق بود
تنظیم از دستگاه قبلیتان همگامسازی شده است.
صادر کردن گواهینامه انتخابشده
-ویژگیهای جدید
+تازهها
همیشه اجازه دادن پنجرههای بازشو و هدایتها از
متوسط
همیشه اجازه داشتن برای استفاده از بهینهسازی جاوا اسکریپت
@@ -445,7 +445,7 @@
هیچ دستگاه بلوتوثی یافت نشد
باز کردن
پین ایجاد شد
-دوباره از من پرسیده نشود
+دیگر نپرسیدن از من
برای اطمینان از اینکه همیشه میتوانید از گذرواژههای ذخیرهشده در «حساب Google» خود استفاده کنید، هویتتان را درستیسنجی کنید
متأسفانه سیستم نتوانست کد دسترسی دراز مدت به API را برای این دستگاه ذخیره کند.
این سایت کارتخوانهای هوشمند متصل به دستگاهتان و احتمالاً کارتهای هوشمندی را که دردسترس آنها است کنترل میکند
@@ -1779,7 +1779,7 @@
یک سایت و زیردامنههای آن میتوانند ببینند که چه برنامههای وب مرتبطی در دستگاهتان نصب شده است.
گروههای زبانه شما اینجا ذخیره میشود
آشنایی با نحوه نصب برنامههای وب
-۰ کلید اختصاص داده شده است
+۰ کلید اختصاص داده شده
جام مارتینی
نباید نویسه تکراری یا توالی ۴ نویسهای یا بیشتر داشته باشد
Chromebook خود را شارژ کنید
@@ -4740,7 +4740,7 @@
جستجو + تبدیل +
دستگاههای «جفتسازی سریع» ذخیرهشده در
غیر فعال کردن
- تا
+ تا
{COUNT,plural, =0{باز کردن همه}=1{باز کردن نشانک}one{باز کردن همه ({COUNT})}other{باز کردن همه ({COUNT})}}
لازم نیست این گذرواژه را بهخاطر بسپارید. این گذرواژه در برای ذخیره خواهد شد.
درباره درخواستهای دسترسی بیشتر بدانید.
@@ -8060,7 +8060,7 @@
همه افزونهها مجاز هستند
گذرواژه حذف شود؟
کولوسئوم
-دادههای فرم تکمیل خودکار
+دادههای تکمیل خودکار فرم
گزارش وقایع WebRTC ()
بیصدا
دمای رنگ
@@ -10070,7 +10070,7 @@
همه دادههای شما را در رایانه و همه وبسایتها بخواند و تغییر دهد
مرور جدا شود؟
برای اینکه به زبانههای بازشده در سایر دستگاهها دسترسی داشته باشید، به سیستم وارد شوید و سابقه را همگامسازی کنید. همچنین گذرواژههایتان و اطلاعات دیگر را در همه دستگاههایتان دریافت خواهید کرد. هرزمان بخواهید میتوانید همگامسازی را در تنظیمات متوقف کنید. Google ممکن است «جستجو» و سرویسهای دیگر را براساس سابقهتان شخصیسازی کند.
-دوباره سؤال نشود
+دیگر نپرسیدن
اجازه ندارد بریدهدان را ببیند
PKCS #7، زنجیره گواهی
قلم ریاضی
@@ -10896,7 +10896,7 @@
اکنون نوار عنوان پنهان است
بارگذاری پیدیاف
&تنظیمات
-دوباره سؤال نشود
+دیگر نپرسیدن
زبانهها پنهان شد
برخی تنظیمات بازنشانی شدند
سایتها مجازند در دستگاه داده ذخیره کنند
diff -Nru chromium-150.0.7871.124/chrome/app/resources/generated_resources_gl.xtb chromium-150.0.7871.181/chrome/app/resources/generated_resources_gl.xtb
--- chromium-150.0.7871.124/chrome/app/resources/generated_resources_gl.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/app/resources/generated_resources_gl.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -7334,7 +7334,7 @@
Ver todas as políticas de Chrome
Idiomas das aplicacións
A pestana moveuse cara abaixo
-Asumir control da tarefa
+Asumir tarefa
Non apagues o dispositivo
Sereno
Só alguén co teu contrasinal pode ler os teus datos encriptados. O contrasinal non se envía nin se almacena en Google. Se esqueciches o contrasinal ou queres cambiar esta configuración, deberás restablecer a sincronización.
diff -Nru chromium-150.0.7871.124/chrome/app/resources/generated_resources_iw.xtb chromium-150.0.7871.181/chrome/app/resources/generated_resources_iw.xtb
--- chromium-150.0.7871.124/chrome/app/resources/generated_resources_iw.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/app/resources/generated_resources_iw.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -2786,7 +2786,7 @@
איך משתמשים במצב AI בחיפוש Google
רמת טעינת הסוללה של הנרתיק %.
הגדרות...
-סנכרון הקובץ ב-Drive עדיין מתבצע.
+הקובץ עדיין מסתנכרן עם Drive.
אפשר להגיע למפתחות הגישה במכשיר הזה דרך מנהל הסיסמאות של Google
האם לשלוח בקשה למנהל שלך כדי להתקין את ""?
{NUM_SUB_APPS,plural, =1{אפליקציה אחת הוסרה על ידי }one{# אפליקציות הוסרו על ידי }two{# אפליקציות הוסרו על ידי }other{# אפליקציות הוסרו על ידי }}
@@ -6332,7 +6332,7 @@
מעכשיו אפשר לשלוט בקבוצות הכרטיסיות ובשיחות עם Gemini במקום אחד. אפשר לבטל את ההצמדה בכל שלב.
איפוס של המכשיר לא ישפיע על חשבונות Google שלך או על נתונים המסונכרנים לחשבונות אלה. אך כל הקבצים המאוחסנים במכשיר באופן מקומי יימחקו.
כניסה אוטומטית
-מזינים הנחיה מותאמת אישית או מדגישים טקסט כדי ליצור תמונה
+כותבים פרומפט מותאם אישית או מדגישים טקסט כדי ליצור תמונה
{ITEM_COUNT,plural, =1{פריט אחד שמור רק במכשיר הזה. כדי להשתמש בו במכשירים אחרים, צריך לשמור אותו בחשבון Google.}one{{ITEM_COUNT} פריטים שמורים רק במכשיר הזה. כדי להשתמש בהם במכשירים אחרים, צריך לשמור אותם בחשבון Google.}two{{ITEM_COUNT} פריטים שמורים רק במכשיר הזה. כדי להשתמש בהם במכשירים אחרים, צריך לשמור אותם בחשבון Google.}other{{ITEM_COUNT} פריטים שמורים רק במכשיר הזה. כדי להשתמש בהם במכשירים אחרים, צריך לשמור אותם בחשבון Google.}}
הסרה של מהרשימה
תצוגה מפוצלת
diff -Nru chromium-150.0.7871.124/chrome/app/resources/generated_resources_ja.xtb chromium-150.0.7871.181/chrome/app/resources/generated_resources_ja.xtb
--- chromium-150.0.7871.124/chrome/app/resources/generated_resources_ja.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/app/resources/generated_resources_ja.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -7600,7 +7600,7 @@
のパスキーを作成するには、Google パスワード マネージャーをオンにする必要があります
あらゆるものを作成できます
閉じた分割ビューを再度開く
-スマートフォンでスキャンしてパスワードを保存すると、サイトやアプリで自動入力して簡単にログインできます
+スマートフォンでスキャンしてパスワードを保存すると、サイトやアプリで自動入力して簡単にログインできます。
タブ検索
中量の節約
別のデバイスを使用
diff -Nru chromium-150.0.7871.124/chrome/app/resources/generated_resources_kk.xtb chromium-150.0.7871.181/chrome/app/resources/generated_resources_kk.xtb
--- chromium-150.0.7871.124/chrome/app/resources/generated_resources_kk.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/app/resources/generated_resources_kk.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -882,7 +882,7 @@
Қолданба деректеріне контактілер, хабарлар және фотосуреттер сияқты қолданба сақтаған (әзірлеуші параметрлеріне байланысты) кез келген дерек жатуы мүмкін. Сақтық көшірме деректері Drive жадында орын алмайды.
Бұл қызметті "Параметрлер" бөлімінен өшіруге болады.
Профильді ашу кезінде бірдеңе дұрыс болмады. Кейбір мүмкіндіктер қолжетімді болмауы мүмкін.
-Жүктелуде
+Жүктеліп жатыр
Safe Browsing
желісіне қатысты басқа әрекеттер
{NUM_PASSWORDS,plural, =1{Дұрыс форматталмағандықтан, тағы 1 құпия сөз импортталмады.}other{Дұрыс форматталмағандықтан, тағы {NUM_PASSWORDS} құпия сөз импортталмады.}}
@@ -3758,7 +3758,7 @@
Экранды құрылғысына трансляциялауды жалғастыру
Әр парақтағы бет саны
Wi‑Fi желісін қосу
-Жүктелуде…
+Жүктеліп жатыр…
Сіз кірген сайт көбінесе бот емес екеніңізді растау үшін Chrome-мен ақпараттың шағын көлемін сақтай алады
Аккаунтқа ретінде кірдіңіз.
Сілтемені жаңа қойындысында ашу
diff -Nru chromium-150.0.7871.124/chrome/app/resources/generated_resources_my.xtb chromium-150.0.7871.181/chrome/app/resources/generated_resources_my.xtb
--- chromium-150.0.7871.124/chrome/app/resources/generated_resources_my.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/app/resources/generated_resources_my.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -2853,7 +2853,7 @@
VPN ဝန်ဆောင်မှု
စတင်ရက်-
လက်မှတ်ထိုးဝင်မှုကို စစ်နေသည်…
-ဖြတ်လမ်းလင့်ခ်များ
+ဖြတ်လမ်းများ
နံပါတ်စဉ်:
လိပ်ပြာ
ဖရိန် အရင်းမြစ် ကြည့်မည်
diff -Nru chromium-150.0.7871.124/chrome/app/resources/generated_resources_ro.xtb chromium-150.0.7871.181/chrome/app/resources/generated_resources_ro.xtb
--- chromium-150.0.7871.124/chrome/app/resources/generated_resources_ro.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/app/resources/generated_resources_ro.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -10472,7 +10472,7 @@
Panoul lateral a fost fixat
Este disponibilă o actualizare de sistem. Se pregătește descărcarea...
Starea rețelei ChromeOS
-Setări pentru Completare automată
+Setări pentru completarea automată
Data ultimei deschideri
Folosește parolele pe dispozitivele iOS
Permisiune pentru camera foto pentru
diff -Nru chromium-150.0.7871.124/chrome/app/resources/generated_resources_ru.xtb chromium-150.0.7871.181/chrome/app/resources/generated_resources_ru.xtb
--- chromium-150.0.7871.124/chrome/app/resources/generated_resources_ru.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/app/resources/generated_resources_ru.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -7646,7 +7646,7 @@
Закрыть Gemini в Chrome
Настроить размер текста и шрифт для веб-браузера
Гостевой режим
-Поменять местами кнопки мыши
+Переключить основную кнопку мыши
Использовать безопасный DNS-сервер
Панна-котта
Когда вы начинаете новый чат, у Gemini появляется доступ к открытой вкладке. Эти данные не используются для улучшения моделей генеративного ИИ. Подробнее об ИИ и конфиденциальности…
diff -Nru chromium-150.0.7871.124/chrome/app/resources/generated_resources_sk.xtb chromium-150.0.7871.181/chrome/app/resources/generated_resources_sk.xtb
--- chromium-150.0.7871.124/chrome/app/resources/generated_resources_sk.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/app/resources/generated_resources_sk.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -4444,7 +4444,7 @@
Zlepšené bezpečné prehliadanie vás viac chráni pred nebezpečnými webmi, stiahnutými súbormi a rozšíreniami
Zariadenie HID (:)
zistí značku a model vášho bezpečnostného kľúča
-Vyhľadávanie v histórii používajúce umelú inteligenciu
+Vyhľadávanie v histórii využívajúce umelú inteligenciu
Pred prvým nastavením sa musíte pripojiť k internetu, aby sa súbory mohli synchronizovať s Chromebookom.
Zvýrazniť zameranie klávesnice
Chcete prijať pomocou funkcie ?
diff -Nru chromium-150.0.7871.124/chrome/app/resources/generated_resources_sr-Latn.xtb chromium-150.0.7871.181/chrome/app/resources/generated_resources_sr-Latn.xtb
--- chromium-150.0.7871.124/chrome/app/resources/generated_resources_sr-Latn.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/app/resources/generated_resources_sr-Latn.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -10821,7 +10821,7 @@
Rezimirajte sadržaj, pojednostavite složen jezik ili postavljajte pitanja
Izaberite vidljivost
Ovo podešavanje ne možete da promenite u sesiji demonstracije.
- koristi Bluetooth skeniranje da bi pronašlo uređaje u blizini.
+ koristi Bluetooth skeniranje za pronalaženje uređaja u blizini.
[matični direktorijum]
&Prikaži kao karticu
Zapamti podatke za prijavljivanje
diff -Nru chromium-150.0.7871.124/chrome/app/resources/generated_resources_sr.xtb chromium-150.0.7871.181/chrome/app/resources/generated_resources_sr.xtb
--- chromium-150.0.7871.124/chrome/app/resources/generated_resources_sr.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/app/resources/generated_resources_sr.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -10821,7 +10821,7 @@
Резимирајте садржај, поједноставите сложен језик или постављајте питања
Изаберите видљивост
Ово подешавање не можете да промените у сесији демонстрације.
- користи Bluetooth скенирање да би пронашло уређаје у близини.
+ користи Bluetooth скенирање за проналажење уређаја у близини.
[матични директоријум]
&Прикажи као картицу
Запамти податке за пријављивање
diff -Nru chromium-150.0.7871.124/chrome/app/resources/generated_resources_te.xtb chromium-150.0.7871.181/chrome/app/resources/generated_resources_te.xtb
--- chromium-150.0.7871.124/chrome/app/resources/generated_resources_te.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/app/resources/generated_resources_te.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -3464,7 +3464,7 @@
అజ్ఞాత యాక్టివిటీ
స్కాన్ చేయడం పూర్తయింది
పేరు
-జూలై 2025 నుండి Chrome OS డివైజ్లలో Chrome యాప్లు రన్ అవ్వడం ఆగిపోతుంది. ప్రత్యామ్నాయ యాప్ గురించి ఆలోచించండి.
+జూలై 2025 నుండి ChromeOS డివైజ్లలో Chrome యాప్లు రన్ అవ్వడం ఆగిపోతుంది. ప్రత్యామ్నాయ యాప్ గురించి ఆలోచించండి.
డౌన్లోడ్ చేస్తోంది... %
మీరు PINను లేదా పాస్వర్డ్ను మర్చిపోతే స్థానిక డేటాను రీస్టోర్ చేసుకోవచ్చు
బౌన్స్ కీలు
@@ -10252,7 +10252,7 @@
ప్రామాణీకరణ విఫలమైంది
మీ Chrome ప్రొఫైల్లో పాస్-కీలను మేనేజ్ చేయండి
నిలిపివేయబడింది.
-Chrome OS Flexలో సమస్య విశ్లేషణ టెస్ట్లను రన్ చేయండి
+ChromeOS Flexలో సమస్య విశ్లేషణ టెస్ట్లను రన్ చేయండి
ఈ వినియోగదారు ఖాతా ఆ సేవ కోసం అర్హత పొందలేదు.
చెల్లదు
అమలు చేయడానికి కి మీ అనుమతి అవసరం
diff -Nru chromium-150.0.7871.124/chrome/browser/component_updater/platform_runtime_component_installer.cc chromium-150.0.7871.181/chrome/browser/component_updater/platform_runtime_component_installer.cc
--- chromium-150.0.7871.124/chrome/browser/component_updater/platform_runtime_component_installer.cc 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/browser/component_updater/platform_runtime_component_installer.cc 2026-07-20 20:45:36.000000000 +0000
@@ -53,6 +53,25 @@
base::GetNativeLibraryName("chrome_platform_runtime"));
}
+// Extracts the release time from the version.
+// Assumes the version is in the format ....
+base::Time GetReleaseTimeFromVersion(const base::Version& version) {
+ if (version.IsValid() && version.components().size() >= 3) {
+ base::Time::Exploded exploded = {
+ .year = static_cast(version.components()[0]),
+ .month = static_cast(version.components()[1]),
+ .day_of_month = static_cast(version.components()[2]),
+ };
+
+ base::Time release_time;
+ if (exploded.HasValidValues() &&
+ base::Time::FromUTCExploded(exploded, &release_time)) {
+ return release_time;
+ }
+ }
+ return base::Time::Now();
+}
+
} // namespace
namespace component_updater {
@@ -101,7 +120,8 @@
!last_version.IsValid()) {
local_state->SetString(kPlatformRuntimeLastInstalledVersion,
version.GetString());
- local_state->SetTime(kPlatformRuntimeLastInstallTime, base::Time::Now());
+ local_state->SetTime(kPlatformRuntimeLastInstallTime,
+ GetReleaseTimeFromVersion(version));
base::UmaHistogramEnumeration(
"ComponentUpdater.PlatformRuntime.InstallTrigger", install_trigger_);
diff -Nru chromium-150.0.7871.124/chrome/browser/component_updater/platform_runtime_component_installer_unittest.cc chromium-150.0.7871.181/chrome/browser/component_updater/platform_runtime_component_installer_unittest.cc
--- chromium-150.0.7871.124/chrome/browser/component_updater/platform_runtime_component_installer_unittest.cc 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/browser/component_updater/platform_runtime_component_installer_unittest.cc 2026-07-20 20:45:36.000000000 +0000
@@ -10,6 +10,7 @@
#include "base/files/scoped_temp_dir.h"
#include "base/run_loop.h"
+#include "base/strings/stringprintf.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/test/scoped_feature_list.h"
#include "base/time/time.h"
@@ -387,4 +388,43 @@
PlatformRuntimeInstallTrigger::kStale, 1);
}
+TEST_F(PlatformRuntimeComponentInstallerTest,
+ ComponentReady_RecordsReleaseTimeFromVersionAndTriggersStale) {
+ auto* local_state =
+ TestingBrowserProcess::GetGlobal()->GetTestingLocalState();
+
+ // Test version with date ... dynamically generated
+ // 10 days in the past (`> 7 days` staleness threshold).
+ base::Time past_time = base::Time::Now() - base::Days(10);
+ base::Time::Exploded exploded;
+ past_time.UTCExplode(&exploded);
+ base::Version version(base::StringPrintf(
+ "%d.%d.%d.1", exploded.year, exploded.month, exploded.day_of_month));
+
+ base::Time expected_release_time = past_time.UTCMidnight();
+
+ PlatformRuntimeComponentInstallerPolicy policy;
+ policy.ComponentReadyForTesting(version, component_install_dir_.GetPath(),
+ base::DictValue());
+
+ // Verify the preference stored the extracted UTC midnight date from the
+ // version, not base::Time::Now().
+ EXPECT_EQ(local_state->GetTime(kPlatformRuntimeLastInstallTime),
+ expected_release_time);
+
+ // Verify that ShouldTriggerInstallOrUpdate immediately sees this version as
+ // stale because its release time is older than 7 days threshold.
+ auto service =
+ std::make_unique();
+ const std::string crx_id = "test_crx_id";
+ EXPECT_CALL(*service, GetComponentDetails(crx_id, _))
+ .WillOnce([&](const std::string& id, update_client::CrxUpdateItem* item) {
+ item->component = update_client::CrxComponent();
+ item->component->version = version;
+ return true;
+ });
+ EXPECT_TRUE(
+ policy.ShouldTriggerInstallOrUpdate(service.get(), local_state, crx_id));
+}
+
} // namespace component_updater
diff -Nru chromium-150.0.7871.124/chrome/browser/devtools/devtools_ui_bindings.cc chromium-150.0.7871.181/chrome/browser/devtools/devtools_ui_bindings.cc
--- chromium-150.0.7871.124/chrome/browser/devtools/devtools_ui_bindings.cc 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/browser/devtools/devtools_ui_bindings.cc 2026-07-20 20:45:36.000000000 +0000
@@ -548,6 +548,12 @@
base::Value(encoded));
}
+enum class DevToolsFrontendLocation {
+ kLocal = 0,
+ kRemote = 1,
+ kMaxValue = kRemote,
+};
+
bool IsLocalDevToolsFrontendURL(const GURL& url) {
if (!url.is_valid() || url.IsAboutBlank() ||
!url.SchemeIs(content::kChromeDevToolsScheme) ||
@@ -2449,6 +2455,14 @@
if (!remote_debugging_enabled) {
session_tags |= SessionTags::kDevToolsRemoteDebuggingDisabled;
}
+
+ // Log the frontend location explicitly
+ GURL frontend_url = web_contents_->GetVisibleURL();
+ DevToolsFrontendLocation location = IsLocalDevToolsFrontendURL(frontend_url)
+ ? DevToolsFrontendLocation::kLocal
+ : DevToolsFrontendLocation::kRemote;
+ base::UmaHistogramEnumeration("DevTools.FrontendLocation", location);
+
metrics::structured::StructuredMetricsClient::Record(
metrics::structured::events::v2::dev_tools::SessionStart()
.SetTags(session_tags)
diff -Nru chromium-150.0.7871.124/chrome/browser/extensions/api/mime_handlers/mime_handler_fallback_browsertest.cc chromium-150.0.7871.181/chrome/browser/extensions/api/mime_handlers/mime_handler_fallback_browsertest.cc
--- chromium-150.0.7871.124/chrome/browser/extensions/api/mime_handlers/mime_handler_fallback_browsertest.cc 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/browser/extensions/api/mime_handlers/mime_handler_fallback_browsertest.cc 2026-07-20 20:45:36.000000000 +0000
@@ -6,9 +6,11 @@
#include
#include "base/files/file_path.h"
+#include "base/files/file_util.h"
#include "base/path_service.h"
#include "base/test/scoped_feature_list.h"
#include "base/test/with_feature_override.h"
+#include "base/threading/thread_restrictions.h"
#include "chrome/browser/extensions/extension_apitest.h"
#include "chrome/browser/pdf/pdf_extension_test_util.h"
#include "chrome/browser/ui/browser.h"
@@ -26,6 +28,7 @@
#include "extensions/common/extension_features.h"
#include "extensions/common/features/feature_channel.h"
#include "net/dns/mock_host_resolver.h"
+#include "net/test/embedded_test_server/controllable_http_response.h"
#include "pdf/pdf_features.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "url/gurl.h"
@@ -291,6 +294,119 @@
EXPECT_EQ(pdf_url, web_contents->GetLastCommittedURL());
}
+class MimeHandlerFallbackRedirectBrowserTest
+ : public MimeHandlerFallbackBrowserTest {
+ public:
+ MimeHandlerFallbackRedirectBrowserTest() = default;
+
+ protected:
+ void SetUpOnMainThread() override {
+ const base::FilePath chrome_test_data_dir =
+ base::PathService::CheckedGet(chrome::DIR_TEST_DATA);
+ const base::FilePath pdf_path =
+ chrome_test_data_dir.AppendASCII("pdf").AppendASCII("test.pdf");
+ ASSERT_TRUE(base::PathExists(pdf_path));
+ {
+ base::ScopedAllowBlockingForTesting allow_blocking;
+ ASSERT_TRUE(base::ReadFileToString(pdf_path, &pdf_data_));
+ }
+
+ // Register controllable responses before starting the server. Expect two
+ // requests to "/spoof.pdf".
+ controllable_response1_ =
+ std::make_unique(
+ embedded_test_server(), "/spoof.pdf");
+ controllable_response2_ =
+ std::make_unique(
+ embedded_test_server(), "/spoof.pdf");
+
+ MimeHandlerFallbackBrowserTest::SetUpOnMainThread();
+ }
+
+ const std::string& pdf_data() const { return pdf_data_; }
+
+ net::test_server::ControllableHttpResponse* controllable_response1() {
+ return controllable_response1_.get();
+ }
+
+ net::test_server::ControllableHttpResponse* controllable_response2() {
+ return controllable_response2_.get();
+ }
+
+ private:
+ std::string pdf_data_;
+ std::unique_ptr
+ controllable_response1_;
+ std::unique_ptr
+ controllable_response2_;
+};
+
+// Verify that fallback reload redirected to a different origin does not use the
+// cached body, preventing spoofing.
+IN_PROC_BROWSER_TEST_P(MimeHandlerFallbackRedirectBrowserTest,
+ FallbackRedirectToDifferentOriginDoesNotUseCache) {
+ if (!chrome_pdf::features::IsOopifPdfEnabled()) {
+ GTEST_SKIP() << "Cached-body fallback routing is OOPIF-only.";
+ }
+
+ ASSERT_NO_FATAL_FAILURE(LoadThirdPartyHandler());
+ content::WebContents* const web_contents =
+ browser()->tab_strip_model()->GetActiveWebContents();
+
+ const GURL start_url = embedded_test_server()->GetURL("a.com", "/spoof.pdf");
+
+ const auto pdf_extension_observer = MakePdfExtensionObserver();
+
+ // Start navigation (non-blocking).
+ web_contents->GetController().LoadURLWithParams(
+ content::NavigationController::LoadURLParams(start_url));
+
+ // 1. Handle first request (attacker PDF).
+ net::test_server::ControllableHttpResponse* response1 =
+ controllable_response1();
+ response1->WaitForRequest();
+ response1->Send("HTTP/1.1 200 OK\r\n");
+ response1->Send("Content-Type: application/pdf\r\n");
+ response1->Send("\r\n");
+ response1->Send(pdf_data());
+ response1->Done();
+
+ // 2. Handle second request (fallback reload redirected to b.com).
+ net::test_server::ControllableHttpResponse* response2 =
+ controllable_response2();
+ response2->WaitForRequest();
+ const GURL target_url =
+ embedded_test_server()->GetURL("b.com", "/accessibility/multi-page.pdf");
+ response2->Send("HTTP/1.1 302 Found\r\n");
+ response2->Send("Location: " + target_url.spec() + "\r\n");
+ response2->Send("\r\n");
+ response2->Done();
+
+ // Now wait for the navigation to settle.
+ pdf_extension_observer->WaitForNavigationFinished();
+ ASSERT_TRUE(content::WaitForLoadStop(web_contents));
+
+ content::RenderFrameHost* const extension_host =
+ pdf_extension_test_util::GetOnlyPdfExtensionHost(web_contents);
+ ASSERT_TRUE(extension_host);
+
+ // Verify that the PDF has loaded.
+ EXPECT_TRUE(pdf_extension_test_util::EnsurePDFHasLoaded(web_contents));
+
+ // Get the page count.
+ const int page_count =
+ content::EvalJs(extension_host, "viewer.docLength_").ExtractInt();
+
+ // test.pdf has 1 page. accessibility/multi-page.pdf has 2 pages. Expect the
+ // browser to load the redirected PDF (multi-page, 2 pages). If spoofing
+ // occurs, the browser loads the cached PDF (test.pdf, 1 page).
+ EXPECT_EQ(2, page_count);
+
+ // Also verify the committed URL is the redirected one.
+ EXPECT_EQ(target_url, web_contents->GetLastCommittedURL());
+}
+
INSTANTIATE_FEATURE_OVERRIDE_TEST_SUITE(MimeHandlerFallbackBrowserTest);
+INSTANTIATE_FEATURE_OVERRIDE_TEST_SUITE(MimeHandlerFallbackRedirectBrowserTest);
} // namespace extensions
diff -Nru chromium-150.0.7871.124/chrome/browser/password_manager/password_manager_util_mac.mm chromium-150.0.7871.181/chrome/browser/password_manager/password_manager_util_mac.mm
--- chromium-150.0.7871.124/chrome/browser/password_manager/password_manager_util_mac.mm 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/browser/password_manager/password_manager_util_mac.mm 2026-07-20 20:45:36.000000000 +0000
@@ -29,23 +29,14 @@
}
bool EnsureAuthorizationRightExists() {
- NSString* right_name = UserAuthenticationRightName();
- // If the authorization right already exists and is valid, there is nothing to
- // do.
- base::apple::ScopedCFTypeRef right_definition;
- if (AuthorizationRightGet(right_name.UTF8String,
- right_definition.InitializeInto()) ==
- errAuthorizationSuccess &&
- right_definition) {
- CFStringRef rule = base::apple::GetValueFromDictionary(
- right_definition.get(), CFSTR("rule"));
- if (rule &&
- CFEqual(rule, CFSTR(kAuthorizationRuleAuthenticateAsSessionUser))) {
- return true;
- }
+ NSString* rightName = UserAuthenticationRightName();
+ // If the authorization right already exists there is nothing to do.
+ if (AuthorizationRightGet(rightName.UTF8String, nullptr) ==
+ errAuthorizationSuccess) {
+ return true;
}
- // The authorization right does not exist or is invalid, so create it.
+ // The authorization right does not exist so create it.
base::mac::ScopedAuthorizationRef authorization =
base::mac::CreateAuthorization();
if (!authorization) {
@@ -55,7 +46,7 @@
// Create a right which requires that the user authenticate as the session
// owner. The prompt must be specified each time the right is requested.
OSStatus status =
- AuthorizationRightSet(authorization, right_name.UTF8String,
+ AuthorizationRightSet(authorization, rightName.UTF8String,
CFSTR(kAuthorizationRuleAuthenticateAsSessionUser),
nullptr, nullptr, nullptr);
if (status != errAuthorizationSuccess) {
diff -Nru chromium-150.0.7871.124/chrome/browser/plugins/plugin_response_interceptor_url_loader_throttle.cc chromium-150.0.7871.181/chrome/browser/plugins/plugin_response_interceptor_url_loader_throttle.cc
--- chromium-150.0.7871.124/chrome/browser/plugins/plugin_response_interceptor_url_loader_throttle.cc 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/browser/plugins/plugin_response_interceptor_url_loader_throttle.cc 2026-07-20 20:45:36.000000000 +0000
@@ -166,25 +166,24 @@
if (response_head->mime_type == pdf::kPDFMimeType) {
// A generic MIME handler extension called
// chrome.mimeHandler.abortAndFallbackToNativeHandler() on a prior
- // navigation for this embedder frame. Peek (not consume) at the
- // fallback mark so the aborted extension does not re-claim its own
- // response across the whole redirect chain -- the mark is cleared in
- // `DidFinishNavigation()` once the re-fetch settles. Route the
- // application/pdf response to the user agent's built-in PDF viewer.
- // When the prior stream buffered the response body, take it now and
- // replay it below instead of re-reading the reload's network body.
- // The cached body is consumable only by the OOPIF PDF stream
- // pipeline; the legacy MimeHandlerView GuestView path has no hook
- // for a pre-fetched body pipe, so leave the pipe parked and let the
- // reload re-fetch from the network.
+ // navigation for this embedder frame. Peek (not consume) at the fallback
+ // mark so the aborted extension does not re-claim its own response on
+ // reload -- the mark is cleared in `DidFinishNavigation()` once the
+ // re-fetch settles. Route the application/pdf response to the user agent's
+ // built-in PDF viewer. When the prior stream buffered the response body,
+ // take it now and replay it below instead of re-reading the reload's
+ // network body. The cached body is consumable only by the OOPIF PDF stream
+ // pipeline; the legacy MimeHandlerView GuestView path has no hook for a
+ // pre-fetched body pipe, so leave the pipe parked and let the reload
+ // re-fetch from the network.
auto* stream_manager =
MimeHandlerStreamManager::FromWebContents(web_contents);
- if (stream_manager &&
- stream_manager->IsPendingNativeFallback(frame_tree_node_id_)) {
+ if (stream_manager && stream_manager->IsPendingNativeFallback(
+ frame_tree_node_id_, response_url)) {
extension_id = extension_misc::kPdfExtensionId;
if (chrome_pdf::features::IsOopifPdfEnabled()) {
- cached_body =
- stream_manager->TakeCachedFallbackBody(frame_tree_node_id_);
+ cached_body = stream_manager->TakeCachedFallbackBody(
+ frame_tree_node_id_, response_url);
}
}
}
diff -Nru chromium-150.0.7871.124/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_kk.xtb chromium-150.0.7871.181/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_kk.xtb
--- chromium-150.0.7871.124/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_kk.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_kk.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -7,7 +7,7 @@
Жасанды интеллект аудиосы ойнатылайын деп жатыр...
Өзен
Байсалды
-Жүктелуде
+Жүктеліп жатыр
Қорлаушы контент
Жылы
Лағыл
@@ -50,7 +50,7 @@
Рақмет! Пікіріңіз біз үшін құнды.
Ойнату
Аудару
-Жүктелуде…
+Жүктеліп жатыр…
"Осы бетті тыңдау" ойнатқышы
Қызыл маржан
Басқа
diff -Nru chromium-150.0.7871.124/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_ne.xtb chromium-150.0.7871.181/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_ne.xtb
--- chromium-150.0.7871.124/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_ne.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/browser/readaloud/android/resources/translations/android_readaloud_strings_ne.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -50,7 +50,7 @@
धन्यवाद! तपाईंको प्रतिक्रियाले हामीलाई मद्दत गर्छ।
प्ले गर्नुहोस्
अनुवाद गर्नुहोस्
-लोड हुँदै...
+लोड हुँदै छ...
“यो पेजमा भएको सामग्री सुन्नुहोस्” प्लेयर
कोरल
अन्य
diff -Nru chromium-150.0.7871.124/chrome/browser/sharing/glic_experimental_triggering/glic_experimental_triggering_message_handler.cc chromium-150.0.7871.181/chrome/browser/sharing/glic_experimental_triggering/glic_experimental_triggering_message_handler.cc
--- chromium-150.0.7871.124/chrome/browser/sharing/glic_experimental_triggering/glic_experimental_triggering_message_handler.cc 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/browser/sharing/glic_experimental_triggering/glic_experimental_triggering_message_handler.cc 2026-07-20 20:45:36.000000000 +0000
@@ -69,6 +69,7 @@
options.target.surface = new_tab;
options.feature_mode = glic::mojom::FeatureMode::kExperimentalTriggering;
+ options.timeout = base::Minutes(5);
if (request.has_request() &&
request.request().has_trigger_actuation_request() &&
diff -Nru chromium-150.0.7871.124/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb chromium-150.0.7871.181/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
--- chromium-150.0.7871.124/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -1429,7 +1429,7 @@
{ITEMS_COUNT,plural, =1{1 contrasenya}other{# contrasenyes}}
Quan tanquis la sessió, les teves adreces d'interès, contrasenyes i altres elements del teu Compte de Google se suprimiran d'aquest dispositiu.
Copia
-Utilitza la teva frase de contrasenya per encriptar totes les dades de Chrome al teu Compte de Google
+Utilitza la meva pròpia frase de contrasenya per encriptar totes les dades de Chrome al meu Compte de Google
Protecció millorada
Confirmes que vols suprimir aquest motor de cerca?
Assegura't de poder utilitzar sempre les contrasenyes al teu Compte de Google
@@ -1594,7 +1594,7 @@
Consulta la política de privadesa d'aquest proveïdor
Conserva aquest grup per afegir-hi pestanyes més endavant o surt-ne si ja no vols accedir-hi més
Baixa
-Utilitza l'encriptació predeterminada de Google per a les contrasenyes del teu Compte de Google
+Utilitza l'encriptació predeterminada de Google per a les contrasenyes del meu Compte de Google
Aquesta opció no està disponible en aquests moments.
No es pot connectar amb el lloc web
Cerca amb la càmera mitjançant Google Lens
diff -Nru chromium-150.0.7871.124/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb chromium-150.0.7871.181/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
--- chromium-150.0.7871.124/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -2004,7 +2004,7 @@
Choose an account to continue on
Share content only
Do you trust this site with your data?
-Picture-in-picture
+Picture-in-Picture
Move address bar to the bottom
Navigation history is half-opened
Do you want to download '' () anyway?
diff -Nru chromium-150.0.7871.124/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb chromium-150.0.7871.181/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
--- chromium-150.0.7871.124/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -1414,7 +1414,7 @@
«یافتهها» از Google - خاموش
بارگیری تصویر
برگ فیلتر کردن برنامه
-دادههای فرم تکمیل خودکار
+دادههای تکمیل خودکار فرم
زبانه ناشناس جدید
نشانیها با گذرعبارت رمزگذاری نمیشود. بدینترتیب میتوانید از آنها در دیگر سرویسهای Google استفاده کنید.
ورود به سیستم با
diff -Nru chromium-150.0.7871.124/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb chromium-150.0.7871.181/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
--- chromium-150.0.7871.124/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -1456,7 +1456,7 @@
העדפות מצב הקריאה נפתחו בחצי הגובה
לא לאשר
, כרטיסייה חדשה או כרטיסייה שעודכנה
-הוספת מקש קיצור חדש.
+הוספת קיצור חדש.
אתרים שחסמת
משחר ההיסטוריה
תפריט מודגש.
@@ -1697,7 +1697,7 @@
כרטיס וירטואלי מסתיר את הכרטיס שלך בפועל כדי להגן עליך מפני תרמיות פוטנציאליות. כאן מפורט מידע נוסף על כרטיסים וירטואליים
הכרטיסיות במכשיר הזה
השבתת את הגישה לאחסון. כדי להפעיל אותה, יש לעבור להגדרות.
-יש לך אפשרות להשתמש בסיסמאות השמורות בכל מכשיר. הן נשמרות במנהל הסיסמאות של Google לחשבון .
+הסיסמאות השמורות זמינות לך בכל מכשיר. הן נשמרות במנהל הסיסמאות של Google בחשבון .
נוסף לרשימת הקריאה
הצגת פרטים
תאריך התפוגה*
@@ -1711,7 +1711,7 @@
דפדפן
מקש הרווח או Tab
, כרטיסייה פרטית מוצמדת מתוך סדרת כרטיסיות שנבחרו והתוכן בה משותף
-הוספת מקש קיצור חדש
+הוספת קיצור חדש
בחירת המיקום להורדה
אישור
במעקב
diff -Nru chromium-150.0.7871.124/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb chromium-150.0.7871.181/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb
--- chromium-150.0.7871.124/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -150,7 +150,7 @@
, бөлісу қойындысы
Қосылса, Google аккаунтыңыздағы деректерді пайдаланыңыз және сақтаңыз. Өшірілсе, деректер тек осы құрылғыға сақталады.
{NUM_SELECTED,plural, =1{Таңдалған 1 элементті өшіру}other{Таңдалған # элементті өшіру}}
-Жүктелуде
+Жүктеліп жатыр
Safe Browsing
Осы беттің күнгі офлайн көшірмесі шығарылды
Тарих
@@ -1373,7 +1373,7 @@
Google аккаунтыңызда
Сіз кірген беттерді көруіңізге не оларды тарихтан жоюға болады.
, жазудың бекітілген инкогнито қойындысы
-Жүктелуде…
+Жүктеп алынып жатыр…
Моно
Аккаунт деректерін қарап шығу
Құпия сөздер мен басқа деректерді барлық құрылғыдан алу үшін ретінде кіріңіз.
@@ -1407,7 +1407,7 @@
Қауіпсіз емес
Аудару
Chrome сіз жоқта іздеу сұрауларыңызға ең жақсы нәтижелерді тапқан кезде, хабарландыру алыңыз.
-Жүктелуде…
+Жүктеліп жатыр…
Жүктеп алу әлі аяқталған жоқ
қойынды жабылған
{FILE_COUNT,plural, =1{Аудиофайлдар, тізімдегі 1 аудиофайл}other{Аудиофайлдар, тізімдегі # аудиофайл}}
diff -Nru chromium-150.0.7871.124/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb chromium-150.0.7871.181/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
--- chromium-150.0.7871.124/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -1406,7 +1406,7 @@
सुरक्षित छैन
अनुवाद गर्नुहोस्
तपाईं अनुपस्थित भएका बेला Chrome ले तपाईंले खोजेका कुराका उत्कृष्ट परिणामहरू भेट्टाउँदा नोटिफिकेसन प्राप्त गर्नुहोस्।
-लोड हुँदै...
+लोड हुँदै छ...
तपाईंको डाउनलोड हुने क्रम अझै जारी छ
ट्याबहरू बन्द भए
{FILE_COUNT,plural, =1{अडियो फाइलहरू, सूचीमा एउटा अडियो फाइल छ}other{अडियो फाइलहरू, सूचीमा # वटा अडियो फाइल छन्}}
diff -Nru chromium-150.0.7871.124/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb chromium-150.0.7871.181/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
--- chromium-150.0.7871.124/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -1089,7 +1089,7 @@
Procure seus arquivos e páginas em Downloads, usando o botão Mais opções
Não lidas - Disponíveis off-line
Gerenciar guias abertas
-Saiba como
+Veja como ativar
O precisa de sua permissão para executar
Login feito como . Erro na Conta do Google. Abre as configurações.
O histórico de pesquisa e outras formas de atividade podem ser salvos na sua Conta do Google.
diff -Nru chromium-150.0.7871.124/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb chromium-150.0.7871.181/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
--- chromium-150.0.7871.124/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb 2026-07-20 20:45:36.000000000 +0000
@@ -1875,7 +1875,7 @@
Ascuns pe ecrane înguste
Păstrezi grupul de file?
Pentru a accesa filele de pe alte dispozitive, activează sincronizarea.
-Setări pentru Completare automată
+Setări pentru completarea automată
Conectează-te la
Numele fișierului există deja
Înscrie-te la cu
diff -Nru chromium-150.0.7871.124/chrome/browser/ui/views/status_icons/status_icon_linux_dbus.cc chromium-150.0.7871.181/chrome/browser/ui/views/status_icons/status_icon_linux_dbus.cc
--- chromium-150.0.7871.124/chrome/browser/ui/views/status_icons/status_icon_linux_dbus.cc 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/browser/ui/views/status_icons/status_icon_linux_dbus.cc 2026-07-20 20:45:36.000000000 +0000
@@ -13,9 +13,11 @@
#include "base/environment.h"
#include "base/files/file_util.h"
#include "base/functional/bind.h"
+#include "base/functional/callback_helpers.h"
#include "base/memory/ref_counted_memory.h"
#include "base/memory/scoped_refptr.h"
#include "base/nix/xdg_util.h"
+#include "base/no_destructor.h"
#include "base/notreached.h"
#include "base/numerics/checked_math.h"
#include "base/process/process.h"
@@ -67,7 +69,7 @@
const char kInterfaceStatusNotifierWatcher[] = "org.kde.StatusNotifierWatcher";
// Object paths.
-const char kPathStatusNotifierItem[] = "/org/chromium/StatusNotifierItem";
+const char kPathStatusNotifierItem[] = "/StatusNotifierItem";
const char kPathStatusNotifierWatcher[] = "/StatusNotifierWatcher";
const char kPathDbusMenu[] = "/org/chromium/DbusMenu";
@@ -230,6 +232,210 @@
} // namespace
+class StatusIconLinuxDbus::Multiplexer {
+ public:
+ static Multiplexer* Get() {
+ static base::NoDestructor instance;
+ return instance.get();
+ }
+
+ static dbus::ExportedObject* GetMultiplexerItem() {
+ return Get()->item_.get();
+ }
+
+ void Register(const std::string& service_name,
+ StatusIconLinuxDbus* icon,
+ dbus::Bus* bus) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ if (icons_.empty()) {
+ ExportMethods(bus);
+ }
+ icons_[service_name] = icon;
+ }
+
+ void Unregister(const std::string& service_name, dbus::Bus* bus) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ // Unregister may be called for a service name that was never registered
+ // if initialization failed before registration.
+ icons_.erase(service_name);
+ if (icons_.empty()) {
+ UnexportMethods(bus);
+ }
+ }
+
+ StatusIconLinuxDbus* GetIcon(const std::string& service_name) {
+ auto it = icons_.find(service_name);
+ return it != icons_.end() ? it->second : nullptr;
+ }
+
+ private:
+ friend class base::NoDestructor;
+ Multiplexer() = default;
+ ~Multiplexer() = default;
+
+ void ExportMethods(dbus::Bus* bus) {
+ item_ = bus->GetExportedObject(dbus::ObjectPath(kPathStatusNotifierItem));
+
+ item_->ExportMethod(kInterfaceStatusNotifierItem, kMethodActivate,
+ base::BindRepeating(&Multiplexer::OnActivate),
+ base::DoNothing());
+ item_->ExportMethod(kInterfaceStatusNotifierItem, kMethodContextMenu,
+ base::BindRepeating(&Multiplexer::OnContextMenu),
+ base::DoNothing());
+ item_->ExportMethod(kInterfaceStatusNotifierItem, kMethodScroll,
+ base::BindRepeating(&Multiplexer::OnScroll),
+ base::DoNothing());
+ item_->ExportMethod(kInterfaceStatusNotifierItem, kMethodSecondaryActivate,
+ base::BindRepeating(&Multiplexer::OnSecondaryActivate),
+ base::DoNothing());
+ item_->ExportMethod(DBUS_INTERFACE_PROPERTIES, "Get",
+ base::BindRepeating(&Multiplexer::OnGetProperty),
+ base::DoNothing());
+ item_->ExportMethod(DBUS_INTERFACE_PROPERTIES, "GetAll",
+ base::BindRepeating(&Multiplexer::OnGetAllProperties),
+ base::DoNothing());
+ }
+
+ void UnexportMethods(dbus::Bus* bus) {
+ if (item_ && bus) {
+ bus->UnregisterExportedObject(dbus::ObjectPath(kPathStatusNotifierItem));
+ item_ = nullptr;
+ }
+ }
+
+ static void OnActivate(dbus::MethodCall* method_call,
+ dbus::ExportedObject::ResponseSender response_sender) {
+ std::string destination = method_call->GetDestination();
+ auto* icon = Get()->GetIcon(destination);
+ if (icon) {
+ dbus::MessageReader reader(method_call);
+ int32_t x = 0;
+ int32_t y = 0;
+ if (reader.PopInt32(&x) && reader.PopInt32(&y)) {
+ (void)icon->OnActivate(x, y);
+ }
+ }
+ std::move(response_sender).Run(dbus::Response::FromMethodCall(method_call));
+ }
+
+ static void OnContextMenu(
+ dbus::MethodCall* method_call,
+ dbus::ExportedObject::ResponseSender response_sender) {
+ std::string destination = method_call->GetDestination();
+ auto* icon = Get()->GetIcon(destination);
+ if (icon) {
+ dbus::MessageReader reader(method_call);
+ int32_t x = 0;
+ int32_t y = 0;
+ if (reader.PopInt32(&x) && reader.PopInt32(&y)) {
+ (void)icon->OnContextMenu(x, y);
+ }
+ }
+ std::move(response_sender).Run(dbus::Response::FromMethodCall(method_call));
+ }
+
+ static void OnScroll(dbus::MethodCall* method_call,
+ dbus::ExportedObject::ResponseSender response_sender) {
+ std::string destination = method_call->GetDestination();
+ auto* icon = Get()->GetIcon(destination);
+ if (icon) {
+ dbus::MessageReader reader(method_call);
+ int32_t delta = 0;
+ std::string orientation;
+ if (reader.PopInt32(&delta) && reader.PopString(&orientation)) {
+ (void)icon->OnScroll(delta, orientation);
+ }
+ }
+ std::move(response_sender).Run(dbus::Response::FromMethodCall(method_call));
+ }
+
+ static void OnSecondaryActivate(
+ dbus::MethodCall* method_call,
+ dbus::ExportedObject::ResponseSender response_sender) {
+ std::string destination = method_call->GetDestination();
+ auto* icon = Get()->GetIcon(destination);
+ if (icon) {
+ dbus::MessageReader reader(method_call);
+ int32_t x = 0;
+ int32_t y = 0;
+ if (reader.PopInt32(&x) && reader.PopInt32(&y)) {
+ (void)icon->OnSecondaryActivate(x, y);
+ }
+ }
+ std::move(response_sender).Run(dbus::Response::FromMethodCall(method_call));
+ }
+
+ static void OnGetProperty(
+ dbus::MethodCall* method_call,
+ dbus::ExportedObject::ResponseSender response_sender) {
+ std::string destination = method_call->GetDestination();
+ auto* icon = Get()->GetIcon(destination);
+ if (!icon) {
+ std::move(response_sender).Run(nullptr);
+ return;
+ }
+
+ dbus::MessageReader reader(method_call);
+ std::string interface;
+ std::string property_name;
+ if (!reader.PopString(&interface) || !reader.PopString(&property_name)) {
+ std::move(response_sender).Run(nullptr);
+ return;
+ }
+
+ if (interface != kInterfaceStatusNotifierItem) {
+ std::move(response_sender).Run(nullptr);
+ return;
+ }
+
+ std::unique_ptr response =
+ dbus::Response::FromMethodCall(method_call);
+ dbus::MessageWriter writer(response.get());
+
+ auto prop_it = icon->properties_.find(property_name);
+ if (prop_it != icon->properties_.end()) {
+ prop_it->second.Write(writer);
+ std::move(response_sender).Run(std::move(response));
+ } else {
+ std::move(response_sender).Run(nullptr);
+ }
+ }
+
+ static void OnGetAllProperties(
+ dbus::MethodCall* method_call,
+ dbus::ExportedObject::ResponseSender response_sender) {
+ std::string destination = method_call->GetDestination();
+ auto* icon = Get()->GetIcon(destination);
+ if (!icon) {
+ std::move(response_sender).Run(nullptr);
+ return;
+ }
+
+ dbus::MessageReader reader(method_call);
+ std::string interface;
+ if (!reader.PopString(&interface)) {
+ std::move(response_sender).Run(nullptr);
+ return;
+ }
+
+ if (interface != kInterfaceStatusNotifierItem) {
+ std::move(response_sender).Run(nullptr);
+ return;
+ }
+
+ std::unique_ptr response =
+ dbus::Response::FromMethodCall(method_call);
+ dbus::MessageWriter writer(response.get());
+
+ dbus_utils::WriteValue(writer, icon->properties_);
+ std::move(response_sender).Run(std::move(response));
+ }
+
+ // A map of registered status icons, keyed by their unique D-Bus service name.
+ std::map icons_;
+ scoped_refptr item_;
+};
+
StatusIconLinuxDbus::StatusIconLinuxDbus()
: bus_(dbus_thread_linux::GetSharedSessionBus()),
should_write_icon_to_file_(ShouldWriteIconToFile()),
@@ -247,7 +453,7 @@
void StatusIconLinuxDbus::SetIcon(const gfx::VectorIcon& icon) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
- if (!properties_) {
+ if (properties_.empty()) {
return;
}
@@ -273,17 +479,19 @@
void StatusIconLinuxDbus::SetToolTip(const std::u16string& tool_tip) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
- if (!properties_) {
+ if (properties_.empty()) {
return;
}
UpdateMenuImpl(delegate_->GetMenuModel(), true);
- properties_->SetProperty<"(sa(iiay)ss)">(
- kInterfaceStatusNotifierItem, kPropertyToolTip,
+ SetProperty<"(sa(iiay)ss)">(
+ kPropertyToolTip,
MakeDbusToolTip(base::UTF16ToUTF8(delegate_->GetToolTip())));
- dbus::Signal signal(kInterfaceStatusNotifierItem, kSignalNewToolTip);
- item_->SendSignal(&signal);
+ if (auto* multiplexer_item = Multiplexer::GetMultiplexerItem()) {
+ dbus::Signal signal(kInterfaceStatusNotifierItem, kSignalNewToolTip);
+ multiplexer_item->SendSignal(&signal);
+ }
}
void StatusIconLinuxDbus::UpdatePlatformContextMenu(ui::MenuModel* model) {
@@ -310,10 +518,15 @@
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
CleanupIconFile();
- properties_.reset();
- if (item_) {
- bus_->UnregisterExportedObject(
- ObjectPathFromId(kPathStatusNotifierItem, service_id_));
+ Multiplexer::Get()->Unregister(service_name_, bus_.get());
+ if (!service_name_.empty()) {
+ bus_->GetDBusTaskRunner()->PostTask(
+ FROM_HERE,
+ base::BindOnce(
+ [](scoped_refptr bus, const std::string& service_name) {
+ bus->ReleaseOwnership(service_name);
+ },
+ bus_, service_name_));
}
if (menu_) {
@@ -368,78 +581,39 @@
service_id_ = NextServiceId();
- // The barrier requires 4 calls (1 for each method exported) + 1 call for
- // `properties_` initialization + 1 call for `menu_` initialization = 6 calls
- // total.
+ service_name_ =
+ base::StrCat({"org.freedesktop.StatusNotifierItem-",
+ base::NumberToString(base::Process::Current().Pid()), "-",
+ base::NumberToString(service_id_)});
+
+ // The barrier only requires 1 call (for `menu_` initialization).
barrier_ = SuccessBarrierCallback(
- 6, base::BindOnce(&StatusIconLinuxDbus::OnInitialized,
+ 1, base::BindOnce(&StatusIconLinuxDbus::OnInitialized,
weak_factory_.GetWeakPtr()));
- item_ = bus_->GetExportedObject(
- ObjectPathFromId(kPathStatusNotifierItem, service_id_));
-
- dbus_utils::ExportMethod<"ii", "">(
- item_, kInterfaceStatusNotifierItem, kMethodActivate,
- dbus_utils::BindWeakPtrForExportMethod(&StatusIconLinuxDbus::OnActivate,
- weak_factory_.GetWeakPtr()),
- base::BindOnce(&StatusIconLinuxDbus::OnExported,
- weak_factory_.GetWeakPtr()));
- dbus_utils::ExportMethod<"ii", "">(
- item_, kInterfaceStatusNotifierItem, kMethodContextMenu,
- dbus_utils::BindWeakPtrForExportMethod(&StatusIconLinuxDbus::OnContextMenu,
- weak_factory_.GetWeakPtr()),
- base::BindOnce(&StatusIconLinuxDbus::OnExported,
- weak_factory_.GetWeakPtr()));
- dbus_utils::ExportMethod<"is", "">(
- item_, kInterfaceStatusNotifierItem, kMethodScroll,
- dbus_utils::BindWeakPtrForExportMethod(&StatusIconLinuxDbus::OnScroll,
- weak_factory_.GetWeakPtr()),
- base::BindOnce(&StatusIconLinuxDbus::OnExported,
- weak_factory_.GetWeakPtr()));
- dbus_utils::ExportMethod<"ii", "">(
- item_, kInterfaceStatusNotifierItem, kMethodSecondaryActivate,
- dbus_utils::BindWeakPtrForExportMethod(
- &StatusIconLinuxDbus::OnSecondaryActivate,
- weak_factory_.GetWeakPtr()),
- base::BindOnce(&StatusIconLinuxDbus::OnExported,
- weak_factory_.GetWeakPtr()));
-
menu_ = std::make_unique(
bus_->GetExportedObject(ObjectPathFromId(kPathDbusMenu, service_id_)),
barrier_);
UpdateMenuImpl(delegate_->GetMenuModel(), false);
- properties_ = std::make_unique(item_, barrier_);
- properties_->RegisterInterface(kInterfaceStatusNotifierItem);
-
- properties_->SetProperty<"b">(kInterfaceStatusNotifierItem,
- kPropertyItemIsMenu, false, false);
- properties_->SetProperty<"i">(kInterfaceStatusNotifierItem, kPropertyWindowId,
- 0, false);
- properties_->SetProperty<"o">(kInterfaceStatusNotifierItem, kPropertyMenu,
- ObjectPathFromId(kPathDbusMenu, service_id_),
- false);
- properties_->SetProperty<"s">(kInterfaceStatusNotifierItem,
- kPropertyAttentionIconName, "", false);
- properties_->SetProperty<"s">(kInterfaceStatusNotifierItem,
- kPropertyAttentionMovieName, "", false);
- properties_->SetProperty<"s">(kInterfaceStatusNotifierItem, kPropertyCategory,
- kPropertyValueCategory, false);
- properties_->SetProperty<"s">(kInterfaceStatusNotifierItem, kPropertyId,
- PropertyIdFromId(service_id_), false);
- properties_->SetProperty<"s">(kInterfaceStatusNotifierItem,
- kPropertyOverlayIconName, "", false);
- properties_->SetProperty<"s">(kInterfaceStatusNotifierItem, kPropertyStatus,
- kPropertyValueStatus, false);
- properties_->SetProperty<"s">(kInterfaceStatusNotifierItem, kPropertyTitle,
- "", false);
- properties_->SetProperty<"a(iiay)">(kInterfaceStatusNotifierItem,
- kPropertyAttentionIconPixmap, {}, false);
- properties_->SetProperty<"a(iiay)">(kInterfaceStatusNotifierItem,
- kPropertyOverlayIconPixmap, {}, false);
- properties_->SetProperty<"(sa(iiay)ss)">(
- kInterfaceStatusNotifierItem, kPropertyToolTip,
+ // Initialize properties map.
+ SetProperty<"b">(kPropertyItemIsMenu, false, false);
+ SetProperty<"i">(kPropertyWindowId, 0, false);
+ SetProperty<"o">(kPropertyMenu, ObjectPathFromId(kPathDbusMenu, service_id_),
+ false);
+ SetProperty<"s">(kPropertyAttentionIconName, "", false);
+ SetProperty<"s">(kPropertyAttentionMovieName, "", false);
+ SetProperty<"s">(kPropertyCategory, kPropertyValueCategory, false);
+ SetProperty<"s">(kPropertyId, PropertyIdFromId(service_id_), false);
+ SetProperty<"s">(kPropertyOverlayIconName, "", false);
+ SetProperty<"s">(kPropertyStatus, kPropertyValueStatus, false);
+ SetProperty<"s">(kPropertyTitle, "", false);
+ SetProperty<"a(iiay)">(kPropertyAttentionIconPixmap, {}, false);
+ SetProperty<"a(iiay)">(kPropertyOverlayIconPixmap, {}, false);
+ SetProperty<"(sa(iiay)ss)">(
+ kPropertyToolTip,
MakeDbusToolTip(base::UTF16ToUTF8(delegate_->GetToolTip())), false);
+
if (delegate_->GetIcon() && !delegate_->GetIcon()->is_empty()) {
SetIcon(*delegate_->GetIcon());
} else if (!delegate_->GetImage().isNull()) {
@@ -447,13 +621,6 @@
}
}
-void StatusIconLinuxDbus::OnExported(const std::string& interface_name,
- const std::string& method_name,
- bool success) {
- DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
- barrier_.Run(success);
-}
-
void StatusIconLinuxDbus::OnInitialized(bool success) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
if (!success) {
@@ -464,6 +631,23 @@
watcher_->SetNameOwnerChangedCallback(
base::BindRepeating(&StatusIconLinuxDbus::OnNameOwnerChangedReceived,
weak_factory_.GetWeakPtr()));
+
+ Multiplexer::Get()->Register(service_name_, this, bus_.get());
+
+ bus_->RequestOwnership(
+ service_name_, dbus::Bus::REQUIRE_PRIMARY,
+ base::BindOnce(&StatusIconLinuxDbus::OnOwnershipAcquired,
+ weak_factory_.GetWeakPtr()));
+}
+
+void StatusIconLinuxDbus::OnOwnershipAcquired(const std::string& service_name,
+ bool success) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ if (!success) {
+ delegate_->OnImplInitializationFailed();
+ return;
+ }
+
RegisterStatusNotifierItem();
}
@@ -473,7 +657,7 @@
kMethodRegisterStatusNotifierItem,
base::BindOnce(&StatusIconLinuxDbus::OnRegistered,
weak_factory_.GetWeakPtr()),
- ObjectPathFromId(kPathStatusNotifierItem, service_id_).value());
+ service_name_);
}
void StatusIconLinuxDbus::OnRegistered(
@@ -565,7 +749,7 @@
void StatusIconLinuxDbus::SetImageImpl(const gfx::ImageSkia& image,
bool send_signals) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
- if (!properties_) {
+ if (properties_.empty()) {
return;
}
@@ -577,12 +761,13 @@
/*is_vector_icon=*/false),
base::BindOnce(&StatusIconLinuxDbus::OnIconFileWritten, this));
} else {
- properties_->SetProperty<"a(iiay)">(kInterfaceStatusNotifierItem,
- kPropertyIconPixmap,
- MakeDbusImage(image), send_signals);
+ SetProperty<"a(iiay)">(kPropertyIconPixmap, MakeDbusImage(image),
+ send_signals);
if (send_signals) {
- dbus::Signal signal(kInterfaceStatusNotifierItem, kSignalNewIcon);
- item_->SendSignal(&signal);
+ if (auto* multiplexer_item = Multiplexer::GetMultiplexerItem()) {
+ dbus::Signal signal(kInterfaceStatusNotifierItem, kSignalNewIcon);
+ multiplexer_item->SendSignal(&signal);
+ }
}
}
}
@@ -595,20 +780,19 @@
return;
}
- properties_->SetProperty<"s">(kInterfaceStatusNotifierItem,
- kPropertyIconThemePath,
- icon_file_.DirName().value(), false);
- properties_->SetProperty<"s">(kInterfaceStatusNotifierItem, kPropertyIconName,
- icon_file_.BaseName().RemoveExtension().value(),
- false);
-
- dbus::Signal new_icon_theme_path_signal(kInterfaceStatusNotifierItem,
- kSignalNewIconThemePath);
- dbus::MessageWriter writer(&new_icon_theme_path_signal);
- writer.AppendString(icon_file_.DirName().value());
- item_->SendSignal(&new_icon_theme_path_signal);
- dbus::Signal new_icon_signal(kInterfaceStatusNotifierItem, kSignalNewIcon);
- item_->SendSignal(&new_icon_signal);
+ SetProperty<"s">(kPropertyIconThemePath, icon_file_.DirName().value(), false);
+ SetProperty<"s">(kPropertyIconName,
+ icon_file_.BaseName().RemoveExtension().value(), false);
+
+ if (auto* multiplexer_item = Multiplexer::GetMultiplexerItem()) {
+ dbus::Signal new_icon_theme_path_signal(kInterfaceStatusNotifierItem,
+ kSignalNewIconThemePath);
+ dbus::MessageWriter writer(&new_icon_theme_path_signal);
+ writer.AppendString(icon_file_.DirName().value());
+ multiplexer_item->SendSignal(&new_icon_theme_path_signal);
+ dbus::Signal new_icon_signal(kInterfaceStatusNotifierItem, kSignalNewIcon);
+ multiplexer_item->SendSignal(&new_icon_signal);
+ }
}
void StatusIconLinuxDbus::CleanupIconFile() {
@@ -619,3 +803,26 @@
(base::GetDeletePathRecursivelyCallback(icon_file_.DirName())));
}
}
+
+void StatusIconLinuxDbus::PropertyUpdated(const std::string& property_name) {
+ dbus::Signal signal(DBUS_INTERFACE_PROPERTIES, "PropertiesChanged");
+ dbus::MessageWriter writer(&signal);
+ writer.AppendString(kInterfaceStatusNotifierItem);
+
+ // Changed properties.
+ dbus::MessageWriter array_writer(nullptr);
+ writer.OpenArray("{sv}", &array_writer);
+ dbus::MessageWriter dict_entry_writer(nullptr);
+ array_writer.OpenDictEntry(&dict_entry_writer);
+ dict_entry_writer.AppendString(property_name);
+ properties_[property_name].Write(dict_entry_writer);
+ array_writer.CloseContainer(&dict_entry_writer);
+ writer.CloseContainer(&array_writer);
+
+ // Invalidated properties.
+ writer.AppendArrayOfStrings({});
+
+ if (auto* multiplexer_item = Multiplexer::GetMultiplexerItem()) {
+ multiplexer_item->SendSignal(&signal);
+ }
+}
diff -Nru chromium-150.0.7871.124/chrome/browser/ui/views/status_icons/status_icon_linux_dbus.h chromium-150.0.7871.181/chrome/browser/ui/views/status_icons/status_icon_linux_dbus.h
--- chromium-150.0.7871.124/chrome/browser/ui/views/status_icons/status_icon_linux_dbus.h 2026-07-13 21:36:30.000000000 +0000
+++ chromium-150.0.7871.181/chrome/browser/ui/views/status_icons/status_icon_linux_dbus.h 2026-07-20 20:45:36.000000000 +0000
@@ -5,6 +5,7 @@
#ifndef CHROME_BROWSER_UI_VIEWS_STATUS_ICONS_STATUS_ICON_LINUX_DBUS_H_
#define CHROME_BROWSER_UI_VIEWS_STATUS_ICONS_STATUS_ICON_LINUX_DBUS_H_
+#include