diff --git a/DEPS b/DEPS index 23a704d..6186c2b 100644 --- a/DEPS +++ b/DEPS
@@ -234,15 +234,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': 'fa183572bfd34c5ea8dec024d4751b131ebd3572', + 'skia_revision': '04a169e298f6686252ec5a1214fd3887be0908a3', # 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': '56a255c140f320df32ac6523a3a8d51c71767b17', + 'v8_revision': '0a42f3ff80d4310c6e455d27645c254bdebd0586', # 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': 'ce854632690e505551414f80d01d864df6118882', + 'angle_revision': 'fc860bc16be3e9bdc896bcdc9ea9a427c5c041ba', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -250,7 +250,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. - 'pdfium_revision': '9cb315df6674326a8abd2ceb1b43236c60289c49', + 'pdfium_revision': '5e0f14ee7cb3f8b347f23b5b27f807c50e15ec9b', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling BoringSSL # and whatever else without interference from each other. @@ -309,7 +309,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': 'f1bbca195f7a13b94ba638129c1f9e0bf7ee3912', + 'devtools_frontend_revision': 'c4d4ec9fa2cd0382fdeceae4b7fa0e33d6c34952', # 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. @@ -349,7 +349,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': 'dcf57433957731e9139358a5634f078912f1a26c', + 'dawn_revision': '2294cf44802b25f9ec81134613dd8156351f4a76', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -791,7 +791,7 @@ 'packages': [ { 'package': 'chromium/third_party/androidx', - 'version': 'TcDziAa8Rlh7MmMwOoAuvVyEbTC8z8QJJpj8gafKMdsC', + 'version': '8a6kYJk4XXA2YmNNjOvwU498busWWgp58N4H_ss4l2YC', }, ], 'condition': 'checkout_android', @@ -1030,7 +1030,7 @@ }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'ad7c145263ca671783a363131bfe7db9a49725f1', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'e68554385590d50eeb8a0d3802db4f59175f6c07', 'src/third_party/devtools-frontend/src': Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), @@ -1170,7 +1170,7 @@ Var('chromium_git') + '/chromium/deps/hunspell_dictionaries.git' + '@' + '18e09b9197a3b1d771c077c530d1a4ebad04c167', 'src/third_party/icu': - Var('chromium_git') + '/chromium/deps/icu.git' + '@' + 'bf66d373ae781a3498f2babe7b61d933dd774b82', + Var('chromium_git') + '/chromium/deps/icu.git' + '@' + 'edf883ad2db9c723b058a6a17a146d68d6343143', 'src/third_party/icu4j': { 'packages': [ @@ -1595,7 +1595,7 @@ 'src/third_party/usrsctp/usrsctplib': Var('chromium_git') + '/external/github.com/sctplab/usrsctp' + '@' + '62d7d0c928c9a040dce96aa2f16c00e7e67d59cb', - 'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@b83177223d96273d4788f64b19724c60dfb86507', + 'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@09e892902929c53e65b2c2e0a450077c9dbe3524', 'src/third_party/vulkan_memory_allocator': Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git' + '@' + '5e49f57a6e71a026a54eb42e366de09a4142d24e', @@ -1634,7 +1634,7 @@ Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'c531d83e7869a8265a62892db877fc56c20ca4c4', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '0ce7f165fdf237609a942786219bed248205c827', + Var('webrtc_git') + '/src.git' + '@' + '8d89f461c9620b5bafe528b6c2ccd30d4a306d04', 'src/third_party/libgifcodec': Var('skia_git') + '/libgifcodec' + '@'+ Var('libgifcodec_revision'), @@ -1692,7 +1692,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@5edfce7abcd30fcf502e0a47ad438293e411baab', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@98b5b31eaf05fd026c3339e7f69c562538cc21ee', 'condition': 'checkout_src_internal', }, @@ -1722,7 +1722,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/media_app/app', - 'version': 'Fhu-2t0HlKzg8-QXxw-EvIHb-l-XUjO8dF4I4pk8qVMC', + 'version': 'FkHLBaV8e8HUXa4nDmf2LOVQ3EK8ms_zE4PehI7TpAcC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -1733,7 +1733,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/projector_app/app', - 'version': 'PK6ukKmq202iqT4OSpzHijFV-zoxvzJ5h5HaNOC3zqEC', + 'version': 'D3TYPYISEZOhTe15_66zZ8xSZOLx1rP9QGAkdWLYs8EC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/WATCHLISTS b/WATCHLISTS index 8b5dbac5..701c733 100644 --- a/WATCHLISTS +++ b/WATCHLISTS
@@ -839,9 +839,9 @@ 'filepath': 'ui/webui/resources/cr_element', }, 'cros_commercial_policy': { - 'filepath': 'ash/policy/'\ + 'filepath': 'ash/components/policy/'\ + '|ash/policy/'\ '|components/policy/'\ - '|chromeos/policy/'\ '|chrome/browser/ash/policy/'\ '|chrome/browser/policy/' }, @@ -2856,14 +2856,15 @@ 'raphael.kubo.da.costa@intel.com'], 'wallpapers': ['croissant-eng+reviews@chromium.org'], 'web_applications': ['alancutter+chrome-cls@chromium.org', + 'dmurph+watching-webapps@chromium.org', 'dominickn+watch-web_applications@chromium.org', 'ericwilligers+watch-bmo@chromium.org', 'glenrob+watch@chromium.org', + 'isandrk+watch@chromium.org', 'loyso+watch@chromium.org', 'mgiuca+watch@chromium.org', - 'dmurph+watching-webapps@chromium.org', - 'webappwatch@microsoft.com', - 'phillis+watch@chromium.org'], + 'phillis+watch@chromium.org', + 'webappwatch@microsoft.com'], 'web_package': ['twifkak+watch@chromium.org', 'hayato+watch@chromium.org'], 'web_share': ['mgiuca+watch@chromium.org'],
diff --git a/ash/components/BUILD.gn b/ash/components/BUILD.gn index 7f2a2507..f72421e 100644 --- a/ash/components/BUILD.gn +++ b/ash/components/BUILD.gn
@@ -20,6 +20,7 @@ "//ash/components/geolocation:unit_tests", "//ash/components/pcie_peripheral:unit_tests", "//ash/components/phonehub:unit_tests", + "//ash/components/policy:unit_tests", "//ash/components/power:unit_tests", "//ash/components/security_token_pin:unit_tests", "//ash/components/settings:unit_tests",
diff --git a/ash/components/arc/BUILD.gn b/ash/components/arc/BUILD.gn index c7296f4..88716fe 100644 --- a/ash/components/arc/BUILD.gn +++ b/ash/components/arc/BUILD.gn
@@ -440,6 +440,7 @@ "//ash/components/arc/media_session", "//ash/components/arc/video_accelerator:common", "//ash/components/disks:test_support", + "//ash/components/policy", "//ash/constants", "//ash/keyboard/ui", "//ash/public/cpp", @@ -458,7 +459,6 @@ "//chromeos/dbus/tpm_manager:tpm_manager", "//chromeos/dbus/upstart", "//chromeos/network:test_support", - "//chromeos/policy", "//chromeos/ui/frame", "//components/account_id", "//components/exo",
diff --git a/ash/components/arc/DEPS b/ash/components/arc/DEPS index b4cf28c..14dab175 100644 --- a/ash/components/arc/DEPS +++ b/ash/components/arc/DEPS
@@ -1,11 +1,11 @@ include_rules = [ + "+ash/components/policy", "+ash/constants", "+ash/public/cpp", "+chromeos/components/sensors", "+chromeos/cryptohome", "+chromeos/dbus", "+chromeos/memory", - "+chromeos/policy", "+chromeos/system", # TODO(b/129295708): Remove after move is complete. "+components/arc",
diff --git a/ash/components/arc/enterprise/BUILD.gn b/ash/components/arc/enterprise/BUILD.gn index f06d627..3784edb 100644 --- a/ash/components/arc/enterprise/BUILD.gn +++ b/ash/components/arc/enterprise/BUILD.gn
@@ -24,6 +24,7 @@ deps = [ "//ash/components/arc:prefs", + "//ash/components/policy", "//ash/constants", "//base", "//chromeos/cryptohome", @@ -33,7 +34,6 @@ "//chromeos/dbus/tpm_manager", "//chromeos/dbus/tpm_manager:tpm_manager_proto", "//chromeos/dbus/upstart:upstart", - "//chromeos/policy:policy", "//components/prefs", "//components/session_manager/core", "//components/user_manager",
diff --git a/ash/components/arc/enterprise/snapshot_hours_policy_service.cc b/ash/components/arc/enterprise/snapshot_hours_policy_service.cc index 1baaef7..c74b199 100644 --- a/ash/components/arc/enterprise/snapshot_hours_policy_service.cc +++ b/ash/components/arc/enterprise/snapshot_hours_policy_service.cc
@@ -8,6 +8,7 @@ #include <utility> #include "ash/components/arc/arc_prefs.h" +#include "ash/components/policy/weekly_time/time_utils.h" #include "base/bind.h" #include "base/callback_helpers.h" #include "base/ignore_result.h" @@ -15,7 +16,6 @@ #include "base/time/default_clock.h" #include "base/time/tick_clock.h" #include "base/values.h" -#include "chromeos/policy/weekly_time/time_utils.h" #include "components/prefs/pref_service.h" #include "components/user_manager/user_manager.h"
diff --git a/ash/components/arc/enterprise/snapshot_hours_policy_service.h b/ash/components/arc/enterprise/snapshot_hours_policy_service.h index c7a8f8f..366f5d8 100644 --- a/ash/components/arc/enterprise/snapshot_hours_policy_service.h +++ b/ash/components/arc/enterprise/snapshot_hours_policy_service.h
@@ -7,12 +7,12 @@ #include <vector> +#include "ash/components/policy/weekly_time/weekly_time_interval.h" #include "base/memory/weak_ptr.h" #include "base/observer_list.h" #include "base/observer_list_types.h" #include "base/time/time.h" #include "base/timer/wall_clock_timer.h" -#include "chromeos/policy/weekly_time/weekly_time_interval.h" #include "components/prefs/pref_change_registrar.h" #include "components/user_manager/user_manager.h"
diff --git a/ash/components/arc/enterprise/snapshot_hours_policy_service_unittest.cc b/ash/components/arc/enterprise/snapshot_hours_policy_service_unittest.cc index 015d230a..c03d7cc6 100644 --- a/ash/components/arc/enterprise/snapshot_hours_policy_service_unittest.cc +++ b/ash/components/arc/enterprise/snapshot_hours_policy_service_unittest.cc
@@ -8,12 +8,12 @@ #include <string> #include "ash/components/arc/arc_prefs.h" +#include "ash/components/policy/weekly_time/weekly_time_interval.h" #include "base/callback_helpers.h" #include "base/json/json_reader.h" #include "base/run_loop.h" #include "base/test/task_environment.h" #include "base/values.h" -#include "chromeos/policy/weekly_time/weekly_time_interval.h" #include "components/prefs/testing_pref_service.h" #include "components/user_manager/fake_user_manager.h" #include "components/user_manager/scoped_user_manager.h"
diff --git a/ash/components/arc/memory_pressure/arc_memory_pressure_bridge.cc b/ash/components/arc/memory_pressure/arc_memory_pressure_bridge.cc index a30f5ce..1d2d6ed 100644 --- a/ash/components/arc/memory_pressure/arc_memory_pressure_bridge.cc +++ b/ash/components/arc/memory_pressure/arc_memory_pressure_bridge.cc
@@ -5,10 +5,10 @@ #include "ash/components/arc/memory_pressure/arc_memory_pressure_bridge.h" #include "ash/components/arc/arc_browser_context_keyed_service_factory_base.h" +#include "ash/components/arc/mojom/process.mojom.h" #include "ash/components/arc/session/arc_bridge_service.h" #include "base/logging.h" #include "base/memory/singleton.h" -#include "components/arc/mojom/process.mojom.h" namespace arc { namespace {
diff --git a/ash/components/arc/metrics/arc_metrics_service.h b/ash/components/arc/metrics/arc_metrics_service.h index c809a33f..d8e2404 100644 --- a/ash/components/arc/metrics/arc_metrics_service.h +++ b/ash/components/arc/metrics/arc_metrics_service.h
@@ -12,6 +12,9 @@ #include "ash/components/arc/arc_browser_context_keyed_service_factory_base.h" #include "ash/components/arc/metrics/arc_metrics_constants.h" +#include "ash/components/arc/mojom/anr.mojom.h" +#include "ash/components/arc/mojom/metrics.mojom.h" +#include "ash/components/arc/mojom/process.mojom.h" #include "ash/components/arc/session/arc_bridge_service.h" #include "ash/components/arc/session/connection_observer.h" #include "base/memory/singleton.h" @@ -21,9 +24,6 @@ #include "base/threading/thread_checker.h" #include "base/time/time.h" #include "base/timer/timer.h" -#include "components/arc/mojom/anr.mojom.h" -#include "components/arc/mojom/metrics.mojom.h" -#include "components/arc/mojom/process.mojom.h" #include "components/guest_os/guest_os_engagement_metrics.h" #include "components/keyed_service/core/keyed_service.h" #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/ash/components/arc/mojom/BUILD.gn b/ash/components/arc/mojom/BUILD.gn index 87fa5ae..1146b309 100644 --- a/ash/components/arc/mojom/BUILD.gn +++ b/ash/components/arc/mojom/BUILD.gn
@@ -16,6 +16,7 @@ sources = [ "accessibility_helper.mojom", "adbd.mojom", + "anr.mojom", "appfuse.mojom", "arc_bridge.mojom", "audio.mojom", @@ -41,12 +42,33 @@ "lock_screen.mojom", "media_session.mojom", "memory.mojom", + "metrics.mojom", "midis.mojom", "nearby_share.mojom", "net.mojom", "obb_mounter.mojom", "payment_app.mojom", "pip.mojom", + "policy.mojom", + "power.mojom", + "print_common.mojom", + "print_spooler.mojom", + "process.mojom", + "property.mojom", + "rotation_lock.mojom", + "screen_capture.mojom", + "sensor.mojom", + "sensor_service.mojom", + "sharesheet.mojom", + "storage_manager.mojom", + "timer.mojom", + "tracing.mojom", + "tts.mojom", + "usb_host.mojom", + "volume_mounter.mojom", + "wake_lock.mojom", + "wallpaper.mojom", + "webapk.mojom", ] public_deps = [ @@ -124,6 +146,61 @@ "//ui/events", ] }, + { + types = [ + { + mojom = "arc.mojom.PrintPageRange" + cpp = "::printing::PageRange" + }, + { + mojom = "arc.mojom.PrintResolution" + cpp = "::gfx::Size" + }, + { + mojom = "arc.mojom.PrinterCapabilities" + cpp = "::printing::PrinterSemanticCapsAndDefaults" + }, + ] + traits_headers = [ + "//printing/backend/print_backend.h", + "//printing/page_range.h", + "//ui/gfx/geometry/size.h", + ] + + traits_private_headers = [ "print_mojom_traits.h" ] + traits_sources = [ "print_mojom_traits.cc" ] + traits_public_deps = [ "//printing" ] + }, + { + types = [ + { + mojom = "arc.mojom.ClockId" + cpp = "::clockid_t" + }, + ] + traits_headers = + [ "//ash/components/arc/timer/arc_timer_mojom_traits.h" ] + traits_sources = + [ "//ash/components/arc/timer/arc_timer_mojom_traits.cc" ] + }, + { + types = [ + { + mojom = "arc.mojom.DeviceType" + cpp = "::chromeos::DeviceType" + }, + { + mojom = "arc.mojom.MountEvent" + cpp = "::chromeos::disks::DiskMountManager::MountEvent" + }, + ] + traits_headers = [ + "//ash/components/arc/volume_mounter/volume_mounter_mojom_traits.h", + ] + traits_sources = [ + "//ash/components/arc/volume_mounter/volume_mounter_mojom_traits.cc", + ] + }, ] }
diff --git a/components/arc/mojom/anr.mojom b/ash/components/arc/mojom/anr.mojom similarity index 100% rename from components/arc/mojom/anr.mojom rename to ash/components/arc/mojom/anr.mojom
diff --git a/ash/components/arc/mojom/arc_bridge.mojom b/ash/components/arc/mojom/arc_bridge.mojom index e32b15b4..a274ba4a 100644 --- a/ash/components/arc/mojom/arc_bridge.mojom +++ b/ash/components/arc/mojom/arc_bridge.mojom
@@ -30,6 +30,7 @@ import "ash/components/arc/mojom/lock_screen.mojom"; import "ash/components/arc/mojom/media_session.mojom"; import "ash/components/arc/mojom/memory.mojom"; +import "ash/components/arc/mojom/metrics.mojom"; import "ash/components/arc/mojom/midis.mojom"; import "ash/components/arc/mojom/nearby_share.mojom"; import "ash/components/arc/mojom/net.mojom"; @@ -38,31 +39,30 @@ import "ash/components/arc/mojom/oemcrypto.mojom"; import "ash/components/arc/mojom/payment_app.mojom"; import "ash/components/arc/mojom/pip.mojom"; +import "ash/components/arc/mojom/policy.mojom"; +import "ash/components/arc/mojom/power.mojom"; +import "ash/components/arc/mojom/print_spooler.mojom"; +import "ash/components/arc/mojom/process.mojom"; +import "ash/components/arc/mojom/property.mojom"; +import "ash/components/arc/mojom/rotation_lock.mojom"; +import "ash/components/arc/mojom/screen_capture.mojom"; +import "ash/components/arc/mojom/sensor.mojom"; +import "ash/components/arc/mojom/sharesheet.mojom"; +import "ash/components/arc/mojom/storage_manager.mojom"; +import "ash/components/arc/mojom/timer.mojom"; +import "ash/components/arc/mojom/tracing.mojom"; +import "ash/components/arc/mojom/tts.mojom"; +import "ash/components/arc/mojom/usb_host.mojom"; import "ash/components/arc/mojom/video.mojom"; +import "ash/components/arc/mojom/volume_mounter.mojom"; +import "ash/components/arc/mojom/wake_lock.mojom"; +import "ash/components/arc/mojom/wallpaper.mojom"; +import "ash/components/arc/mojom/webapk.mojom"; import "components/arc/mojom/app.mojom"; import "components/arc/mojom/app_permissions.mojom"; import "components/arc/mojom/compatibility_mode.mojom"; import "components/arc/mojom/file_system.mojom"; import "components/arc/mojom/intent_helper.mojom"; -import "components/arc/mojom/metrics.mojom"; -import "components/arc/mojom/policy.mojom"; -import "components/arc/mojom/power.mojom"; -import "components/arc/mojom/print_spooler.mojom"; -import "components/arc/mojom/process.mojom"; -import "components/arc/mojom/property.mojom"; -import "components/arc/mojom/rotation_lock.mojom"; -import "components/arc/mojom/screen_capture.mojom"; -import "components/arc/mojom/sensor.mojom"; -import "components/arc/mojom/sharesheet.mojom"; -import "components/arc/mojom/storage_manager.mojom"; -import "components/arc/mojom/timer.mojom"; -import "components/arc/mojom/tracing.mojom"; -import "components/arc/mojom/tts.mojom"; -import "components/arc/mojom/usb_host.mojom"; -import "components/arc/mojom/volume_mounter.mojom"; -import "components/arc/mojom/wake_lock.mojom"; -import "components/arc/mojom/wallpaper.mojom"; -import "components/arc/mojom/webapk.mojom"; // Next MinVersion: 61 // Deprecated method IDs: 101, 105, 121
diff --git a/components/arc/mojom/metrics.mojom b/ash/components/arc/mojom/metrics.mojom similarity index 99% rename from components/arc/mojom/metrics.mojom rename to ash/components/arc/mojom/metrics.mojom index 1665c79..9f2131f 100644 --- a/components/arc/mojom/metrics.mojom +++ b/ash/components/arc/mojom/metrics.mojom
@@ -6,7 +6,7 @@ module arc.mojom; import "mojo/public/mojom/base/time.mojom"; -import "components/arc/mojom/anr.mojom"; +import "ash/components/arc/mojom/anr.mojom"; [Extensible] enum BootType {
diff --git a/components/arc/mojom/policy.mojom b/ash/components/arc/mojom/policy.mojom similarity index 100% rename from components/arc/mojom/policy.mojom rename to ash/components/arc/mojom/policy.mojom
diff --git a/components/arc/mojom/power.mojom b/ash/components/arc/mojom/power.mojom similarity index 98% rename from components/arc/mojom/power.mojom rename to ash/components/arc/mojom/power.mojom index 84ab39d..42dcaf8 100644 --- a/components/arc/mojom/power.mojom +++ b/ash/components/arc/mojom/power.mojom
@@ -6,7 +6,7 @@ module arc.mojom; -import "components/arc/mojom/anr.mojom"; +import "ash/components/arc/mojom/anr.mojom"; // Enumerates the modes of CPU restrictions. // This enum should be synced with CpuRestrictionState in
diff --git a/components/arc/mojom/print_common.mojom b/ash/components/arc/mojom/print_common.mojom similarity index 100% rename from components/arc/mojom/print_common.mojom rename to ash/components/arc/mojom/print_common.mojom
diff --git a/components/arc/mojom/print_mojom_traits.cc b/ash/components/arc/mojom/print_mojom_traits.cc similarity index 98% rename from components/arc/mojom/print_mojom_traits.cc rename to ash/components/arc/mojom/print_mojom_traits.cc index 528d0e1c..c7ce254 100644 --- a/components/arc/mojom/print_mojom_traits.cc +++ b/ash/components/arc/mojom/print_mojom_traits.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 "components/arc/mojom/print_mojom_traits.h" +#include "ash/components/arc/mojom/print_mojom_traits.h" #include "base/strings/stringprintf.h" #include "printing/mojom/print.mojom.h"
diff --git a/components/arc/mojom/print_mojom_traits.h b/ash/components/arc/mojom/print_mojom_traits.h similarity index 91% rename from components/arc/mojom/print_mojom_traits.h rename to ash/components/arc/mojom/print_mojom_traits.h index d9974c9..77645e4 100644 --- a/components/arc/mojom/print_mojom_traits.h +++ b/ash/components/arc/mojom/print_mojom_traits.h
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef COMPONENTS_ARC_MOJOM_PRINT_MOJOM_TRAITS_H_ -#define COMPONENTS_ARC_MOJOM_PRINT_MOJOM_TRAITS_H_ +#ifndef ASH_COMPONENTS_ARC_MOJOM_PRINT_MOJOM_TRAITS_H_ +#define ASH_COMPONENTS_ARC_MOJOM_PRINT_MOJOM_TRAITS_H_ #include <string> #include <vector> -#include "components/arc/mojom/print_common.mojom.h" +#include "ash/components/arc/mojom/print_common.mojom.h" #include "printing/backend/print_backend.h" #include "printing/page_range.h" #include "ui/gfx/geometry/size.h" @@ -76,4 +76,4 @@ } // namespace mojo -#endif // COMPONENTS_ARC_MOJOM_PRINT_MOJOM_TRAITS_H_ +#endif // ASH_COMPONENTS_ARC_MOJOM_PRINT_MOJOM_TRAITS_H_
diff --git a/components/arc/mojom/print_spooler.mojom b/ash/components/arc/mojom/print_spooler.mojom similarity index 97% rename from components/arc/mojom/print_spooler.mojom rename to ash/components/arc/mojom/print_spooler.mojom index 5f0e13c8..6039dd1 100644 --- a/components/arc/mojom/print_spooler.mojom +++ b/ash/components/arc/mojom/print_spooler.mojom
@@ -6,7 +6,7 @@ module arc.mojom; -import "components/arc/mojom/print_common.mojom"; +import "ash/components/arc/mojom/print_common.mojom"; // Represents the Chrome side of a print session. Used by ARC to send // print-related messages to Chrome and interact with the ARC Custom Tab used
diff --git a/components/arc/mojom/process.mojom b/ash/components/arc/mojom/process.mojom similarity index 100% rename from components/arc/mojom/process.mojom rename to ash/components/arc/mojom/process.mojom
diff --git a/components/arc/mojom/property.mojom b/ash/components/arc/mojom/property.mojom similarity index 100% rename from components/arc/mojom/property.mojom rename to ash/components/arc/mojom/property.mojom
diff --git a/components/arc/mojom/rotation_lock.mojom b/ash/components/arc/mojom/rotation_lock.mojom similarity index 100% rename from components/arc/mojom/rotation_lock.mojom rename to ash/components/arc/mojom/rotation_lock.mojom
diff --git a/components/arc/mojom/screen_capture.mojom b/ash/components/arc/mojom/screen_capture.mojom similarity index 100% rename from components/arc/mojom/screen_capture.mojom rename to ash/components/arc/mojom/screen_capture.mojom
diff --git a/components/arc/mojom/sensor.mojom b/ash/components/arc/mojom/sensor.mojom similarity index 91% rename from components/arc/mojom/sensor.mojom rename to ash/components/arc/mojom/sensor.mojom index 5978fcc..e9763d7 100644 --- a/components/arc/mojom/sensor.mojom +++ b/ash/components/arc/mojom/sensor.mojom
@@ -4,7 +4,7 @@ module arc.mojom; -import "components/arc/mojom/sensor_service.mojom"; +import "ash/components/arc/mojom/sensor_service.mojom"; // Chrome implements this interface to handle requests from ARC. // Next method ID: 1
diff --git a/components/arc/mojom/sensor_service.mojom b/ash/components/arc/mojom/sensor_service.mojom similarity index 100% rename from components/arc/mojom/sensor_service.mojom rename to ash/components/arc/mojom/sensor_service.mojom
diff --git a/components/arc/mojom/sharesheet.mojom b/ash/components/arc/mojom/sharesheet.mojom similarity index 100% rename from components/arc/mojom/sharesheet.mojom rename to ash/components/arc/mojom/sharesheet.mojom
diff --git a/components/arc/mojom/storage_manager.mojom b/ash/components/arc/mojom/storage_manager.mojom similarity index 100% rename from components/arc/mojom/storage_manager.mojom rename to ash/components/arc/mojom/storage_manager.mojom
diff --git a/components/arc/mojom/timer.mojom b/ash/components/arc/mojom/timer.mojom similarity index 100% rename from components/arc/mojom/timer.mojom rename to ash/components/arc/mojom/timer.mojom
diff --git a/components/arc/mojom/tracing.mojom b/ash/components/arc/mojom/tracing.mojom similarity index 100% rename from components/arc/mojom/tracing.mojom rename to ash/components/arc/mojom/tracing.mojom
diff --git a/components/arc/mojom/tts.mojom b/ash/components/arc/mojom/tts.mojom similarity index 100% rename from components/arc/mojom/tts.mojom rename to ash/components/arc/mojom/tts.mojom
diff --git a/components/arc/mojom/usb_host.mojom b/ash/components/arc/mojom/usb_host.mojom similarity index 100% rename from components/arc/mojom/usb_host.mojom rename to ash/components/arc/mojom/usb_host.mojom
diff --git a/components/arc/mojom/volume_mounter.mojom b/ash/components/arc/mojom/volume_mounter.mojom similarity index 100% rename from components/arc/mojom/volume_mounter.mojom rename to ash/components/arc/mojom/volume_mounter.mojom
diff --git a/components/arc/mojom/wake_lock.mojom b/ash/components/arc/mojom/wake_lock.mojom similarity index 100% rename from components/arc/mojom/wake_lock.mojom rename to ash/components/arc/mojom/wake_lock.mojom
diff --git a/components/arc/mojom/wallpaper.mojom b/ash/components/arc/mojom/wallpaper.mojom similarity index 100% rename from components/arc/mojom/wallpaper.mojom rename to ash/components/arc/mojom/wallpaper.mojom
diff --git a/components/arc/mojom/webapk.mojom b/ash/components/arc/mojom/webapk.mojom similarity index 100% rename from components/arc/mojom/webapk.mojom rename to ash/components/arc/mojom/webapk.mojom
diff --git a/ash/components/arc/power/arc_power_bridge.h b/ash/components/arc/power/arc_power_bridge.h index a869d71..249aae13 100644 --- a/ash/components/arc/power/arc_power_bridge.h +++ b/ash/components/arc/power/arc_power_bridge.h
@@ -9,13 +9,13 @@ #include <memory> #include <string> +#include "ash/components/arc/mojom/anr.mojom.h" +#include "ash/components/arc/mojom/power.mojom.h" #include "ash/components/arc/session/connection_observer.h" #include "base/observer_list.h" #include "base/timer/timer.h" #include "chromeos/dbus/concierge/concierge_client.h" #include "chromeos/dbus/power/power_manager_client.h" -#include "components/arc/mojom/anr.mojom.h" -#include "components/arc/mojom/power.mojom.h" #include "components/keyed_service/core/keyed_service.h" #include "mojo/public/cpp/bindings/remote.h" #include "services/device/public/mojom/wake_lock.mojom.h"
diff --git a/ash/components/arc/power/arc_power_bridge_unittest.cc b/ash/components/arc/power/arc_power_bridge_unittest.cc index 89f9697..a1828de 100644 --- a/ash/components/arc/power/arc_power_bridge_unittest.cc +++ b/ash/components/arc/power/arc_power_bridge_unittest.cc
@@ -6,6 +6,7 @@ #include <utility> +#include "ash/components/arc/mojom/power.mojom.h" #include "ash/components/arc/session/arc_bridge_service.h" #include "ash/components/arc/test/connection_holder_util.h" #include "ash/components/arc/test/fake_power_instance.h" @@ -14,7 +15,6 @@ #include "chromeos/dbus/power/fake_power_manager_client.h" #include "chromeos/dbus/power_manager/power_supply_properties.pb.h" #include "chromeos/dbus/power_manager/suspend.pb.h" -#include "components/arc/mojom/power.mojom.h" #include "mojo/public/cpp/bindings/remote.h" #include "services/device/public/cpp/test/test_wake_lock_provider.h" #include "services/device/public/mojom/wake_lock_provider.mojom.h"
diff --git a/ash/components/arc/property/arc_property_bridge.h b/ash/components/arc/property/arc_property_bridge.h index 7c1b593..c978de71 100644 --- a/ash/components/arc/property/arc_property_bridge.h +++ b/ash/components/arc/property/arc_property_bridge.h
@@ -7,9 +7,9 @@ #include <vector> +#include "ash/components/arc/mojom/property.mojom.h" #include "ash/components/arc/session/connection_observer.h" #include "base/threading/thread_checker.h" -#include "components/arc/mojom/property.mojom.h" #include "components/keyed_service/core/keyed_service.h" namespace content {
diff --git a/ash/components/arc/rotation_lock/arc_rotation_lock_bridge.h b/ash/components/arc/rotation_lock/arc_rotation_lock_bridge.h index 1d6efdf2..5bb764ad 100644 --- a/ash/components/arc/rotation_lock/arc_rotation_lock_bridge.h +++ b/ash/components/arc/rotation_lock/arc_rotation_lock_bridge.h
@@ -5,11 +5,11 @@ #ifndef ASH_COMPONENTS_ARC_ROTATION_LOCK_ARC_ROTATION_LOCK_BRIDGE_H_ #define ASH_COMPONENTS_ARC_ROTATION_LOCK_ARC_ROTATION_LOCK_BRIDGE_H_ +#include "ash/components/arc/mojom/rotation_lock.mojom.h" #include "ash/components/arc/session/connection_observer.h" #include "ash/display/screen_orientation_controller.h" #include "ash/public/cpp/tablet_mode_observer.h" #include "base/threading/thread_checker.h" -#include "components/arc/mojom/rotation_lock.mojom.h" #include "components/keyed_service/core/keyed_service.h" namespace content {
diff --git a/ash/components/arc/sensor/arc_sensor_bridge.h b/ash/components/arc/sensor/arc_sensor_bridge.h index c498a09..d478d93 100644 --- a/ash/components/arc/sensor/arc_sensor_bridge.h +++ b/ash/components/arc/sensor/arc_sensor_bridge.h
@@ -5,7 +5,7 @@ #ifndef ASH_COMPONENTS_ARC_SENSOR_ARC_SENSOR_BRIDGE_H_ #define ASH_COMPONENTS_ARC_SENSOR_ARC_SENSOR_BRIDGE_H_ -#include "components/arc/mojom/sensor.mojom.h" +#include "ash/components/arc/mojom/sensor.mojom.h" #include "components/keyed_service/core/keyed_service.h" namespace content {
diff --git a/ash/components/arc/session/arc_bridge_host_impl.cc b/ash/components/arc/session/arc_bridge_host_impl.cc index 0ad5bfe..16318f4 100644 --- a/ash/components/arc/session/arc_bridge_host_impl.cc +++ b/ash/components/arc/session/arc_bridge_host_impl.cc
@@ -33,6 +33,7 @@ #include "ash/components/arc/mojom/lock_screen.mojom.h" #include "ash/components/arc/mojom/media_session.mojom.h" #include "ash/components/arc/mojom/memory.mojom.h" +#include "ash/components/arc/mojom/metrics.mojom.h" #include "ash/components/arc/mojom/midis.mojom.h" #include "ash/components/arc/mojom/nearby_share.mojom.h" #include "ash/components/arc/mojom/net.mojom.h" @@ -41,7 +42,25 @@ #include "ash/components/arc/mojom/oemcrypto.mojom.h" #include "ash/components/arc/mojom/payment_app.mojom.h" #include "ash/components/arc/mojom/pip.mojom.h" +#include "ash/components/arc/mojom/policy.mojom.h" +#include "ash/components/arc/mojom/power.mojom.h" +#include "ash/components/arc/mojom/print_spooler.mojom.h" +#include "ash/components/arc/mojom/process.mojom.h" +#include "ash/components/arc/mojom/property.mojom.h" +#include "ash/components/arc/mojom/rotation_lock.mojom.h" +#include "ash/components/arc/mojom/screen_capture.mojom.h" +#include "ash/components/arc/mojom/sensor.mojom.h" +#include "ash/components/arc/mojom/sharesheet.mojom.h" +#include "ash/components/arc/mojom/storage_manager.mojom.h" +#include "ash/components/arc/mojom/timer.mojom.h" +#include "ash/components/arc/mojom/tracing.mojom.h" +#include "ash/components/arc/mojom/tts.mojom.h" +#include "ash/components/arc/mojom/usb_host.mojom.h" #include "ash/components/arc/mojom/video.mojom.h" +#include "ash/components/arc/mojom/volume_mounter.mojom.h" +#include "ash/components/arc/mojom/wake_lock.mojom.h" +#include "ash/components/arc/mojom/wallpaper.mojom.h" +#include "ash/components/arc/mojom/webapk.mojom.h" #include "ash/components/arc/session/arc_bridge_service.h" #include "ash/components/arc/session/mojo_channel.h" #include "ash/public/cpp/external_arc/message_center/arc_notification_manager.h" @@ -54,25 +73,6 @@ #include "components/arc/mojom/compatibility_mode.mojom.h" #include "components/arc/mojom/file_system.mojom.h" #include "components/arc/mojom/intent_helper.mojom.h" -#include "components/arc/mojom/metrics.mojom.h" -#include "components/arc/mojom/policy.mojom.h" -#include "components/arc/mojom/power.mojom.h" -#include "components/arc/mojom/print_spooler.mojom.h" -#include "components/arc/mojom/process.mojom.h" -#include "components/arc/mojom/property.mojom.h" -#include "components/arc/mojom/rotation_lock.mojom.h" -#include "components/arc/mojom/screen_capture.mojom.h" -#include "components/arc/mojom/sensor.mojom.h" -#include "components/arc/mojom/sharesheet.mojom.h" -#include "components/arc/mojom/storage_manager.mojom.h" -#include "components/arc/mojom/timer.mojom.h" -#include "components/arc/mojom/tracing.mojom.h" -#include "components/arc/mojom/tts.mojom.h" -#include "components/arc/mojom/usb_host.mojom.h" -#include "components/arc/mojom/volume_mounter.mojom.h" -#include "components/arc/mojom/wake_lock.mojom.h" -#include "components/arc/mojom/wallpaper.mojom.h" -#include "components/arc/mojom/webapk.mojom.h" namespace arc {
diff --git a/ash/components/arc/session/arc_bridge_service.cc b/ash/components/arc/session/arc_bridge_service.cc index 3239bb4..b3560c66 100644 --- a/ash/components/arc/session/arc_bridge_service.cc +++ b/ash/components/arc/session/arc_bridge_service.cc
@@ -30,6 +30,7 @@ #include "ash/components/arc/mojom/kiosk.mojom.h" #include "ash/components/arc/mojom/lock_screen.mojom.h" #include "ash/components/arc/mojom/media_session.mojom.h" +#include "ash/components/arc/mojom/metrics.mojom.h" #include "ash/components/arc/mojom/midis.mojom.h" #include "ash/components/arc/mojom/nearby_share.mojom.h" #include "ash/components/arc/mojom/net.mojom.h" @@ -37,29 +38,28 @@ #include "ash/components/arc/mojom/oemcrypto.mojom.h" #include "ash/components/arc/mojom/payment_app.mojom.h" #include "ash/components/arc/mojom/pip.mojom.h" +#include "ash/components/arc/mojom/policy.mojom.h" +#include "ash/components/arc/mojom/power.mojom.h" +#include "ash/components/arc/mojom/print_spooler.mojom.h" +#include "ash/components/arc/mojom/process.mojom.h" +#include "ash/components/arc/mojom/property.mojom.h" +#include "ash/components/arc/mojom/rotation_lock.mojom.h" +#include "ash/components/arc/mojom/screen_capture.mojom.h" +#include "ash/components/arc/mojom/sensor.mojom.h" +#include "ash/components/arc/mojom/sharesheet.mojom.h" +#include "ash/components/arc/mojom/storage_manager.mojom.h" +#include "ash/components/arc/mojom/timer.mojom.h" +#include "ash/components/arc/mojom/tracing.mojom.h" +#include "ash/components/arc/mojom/tts.mojom.h" +#include "ash/components/arc/mojom/usb_host.mojom.h" #include "ash/components/arc/mojom/video.mojom.h" +#include "ash/components/arc/mojom/volume_mounter.mojom.h" +#include "ash/components/arc/mojom/wake_lock.mojom.h" +#include "ash/components/arc/mojom/wallpaper.mojom.h" #include "components/arc/mojom/app.mojom.h" #include "components/arc/mojom/app_permissions.mojom.h" #include "components/arc/mojom/file_system.mojom.h" #include "components/arc/mojom/intent_helper.mojom.h" -#include "components/arc/mojom/metrics.mojom.h" -#include "components/arc/mojom/policy.mojom.h" -#include "components/arc/mojom/power.mojom.h" -#include "components/arc/mojom/print_spooler.mojom.h" -#include "components/arc/mojom/process.mojom.h" -#include "components/arc/mojom/property.mojom.h" -#include "components/arc/mojom/rotation_lock.mojom.h" -#include "components/arc/mojom/screen_capture.mojom.h" -#include "components/arc/mojom/sensor.mojom.h" -#include "components/arc/mojom/sharesheet.mojom.h" -#include "components/arc/mojom/storage_manager.mojom.h" -#include "components/arc/mojom/timer.mojom.h" -#include "components/arc/mojom/tracing.mojom.h" -#include "components/arc/mojom/tts.mojom.h" -#include "components/arc/mojom/usb_host.mojom.h" -#include "components/arc/mojom/volume_mounter.mojom.h" -#include "components/arc/mojom/wake_lock.mojom.h" -#include "components/arc/mojom/wallpaper.mojom.h" namespace arc {
diff --git a/ash/components/arc/storage_manager/arc_storage_manager.h b/ash/components/arc/storage_manager/arc_storage_manager.h index 9dba14d3..a0cf2d8 100644 --- a/ash/components/arc/storage_manager/arc_storage_manager.h +++ b/ash/components/arc/storage_manager/arc_storage_manager.h
@@ -5,8 +5,8 @@ #ifndef ASH_COMPONENTS_ARC_STORAGE_MANAGER_ARC_STORAGE_MANAGER_H_ #define ASH_COMPONENTS_ARC_STORAGE_MANAGER_ARC_STORAGE_MANAGER_H_ +#include "ash/components/arc/mojom/storage_manager.mojom.h" #include "base/callback.h" -#include "components/arc/mojom/storage_manager.mojom.h" #include "components/keyed_service/core/keyed_service.h" namespace content {
diff --git a/ash/components/arc/test/fake_arc_bridge_host.cc b/ash/components/arc/test/fake_arc_bridge_host.cc index 7b75a129..c21bffd7 100644 --- a/ash/components/arc/test/fake_arc_bridge_host.cc +++ b/ash/components/arc/test/fake_arc_bridge_host.cc
@@ -29,6 +29,7 @@ #include "ash/components/arc/mojom/lock_screen.mojom.h" #include "ash/components/arc/mojom/media_session.mojom.h" #include "ash/components/arc/mojom/memory.mojom.h" +#include "ash/components/arc/mojom/metrics.mojom.h" #include "ash/components/arc/mojom/midis.mojom.h" #include "ash/components/arc/mojom/nearby_share.mojom.h" #include "ash/components/arc/mojom/net.mojom.h" @@ -36,30 +37,29 @@ #include "ash/components/arc/mojom/obb_mounter.mojom.h" #include "ash/components/arc/mojom/oemcrypto.mojom.h" #include "ash/components/arc/mojom/pip.mojom.h" +#include "ash/components/arc/mojom/policy.mojom.h" +#include "ash/components/arc/mojom/power.mojom.h" +#include "ash/components/arc/mojom/print_spooler.mojom.h" +#include "ash/components/arc/mojom/process.mojom.h" +#include "ash/components/arc/mojom/property.mojom.h" +#include "ash/components/arc/mojom/rotation_lock.mojom.h" +#include "ash/components/arc/mojom/screen_capture.mojom.h" +#include "ash/components/arc/mojom/sensor.mojom.h" +#include "ash/components/arc/mojom/sharesheet.mojom.h" +#include "ash/components/arc/mojom/storage_manager.mojom.h" +#include "ash/components/arc/mojom/timer.mojom.h" +#include "ash/components/arc/mojom/tracing.mojom.h" +#include "ash/components/arc/mojom/tts.mojom.h" +#include "ash/components/arc/mojom/usb_host.mojom.h" #include "ash/components/arc/mojom/video.mojom.h" +#include "ash/components/arc/mojom/volume_mounter.mojom.h" +#include "ash/components/arc/mojom/wake_lock.mojom.h" +#include "ash/components/arc/mojom/wallpaper.mojom.h" #include "components/arc/mojom/app.mojom.h" #include "components/arc/mojom/app_permissions.mojom.h" #include "components/arc/mojom/compatibility_mode.mojom.h" #include "components/arc/mojom/file_system.mojom.h" #include "components/arc/mojom/intent_helper.mojom.h" -#include "components/arc/mojom/metrics.mojom.h" -#include "components/arc/mojom/policy.mojom.h" -#include "components/arc/mojom/power.mojom.h" -#include "components/arc/mojom/print_spooler.mojom.h" -#include "components/arc/mojom/process.mojom.h" -#include "components/arc/mojom/property.mojom.h" -#include "components/arc/mojom/rotation_lock.mojom.h" -#include "components/arc/mojom/screen_capture.mojom.h" -#include "components/arc/mojom/sensor.mojom.h" -#include "components/arc/mojom/sharesheet.mojom.h" -#include "components/arc/mojom/storage_manager.mojom.h" -#include "components/arc/mojom/timer.mojom.h" -#include "components/arc/mojom/tracing.mojom.h" -#include "components/arc/mojom/tts.mojom.h" -#include "components/arc/mojom/usb_host.mojom.h" -#include "components/arc/mojom/volume_mounter.mojom.h" -#include "components/arc/mojom/wake_lock.mojom.h" -#include "components/arc/mojom/wallpaper.mojom.h" namespace arc {
diff --git a/ash/components/arc/test/fake_policy_instance.h b/ash/components/arc/test/fake_policy_instance.h index 1ec0042..ac683b5 100644 --- a/ash/components/arc/test/fake_policy_instance.h +++ b/ash/components/arc/test/fake_policy_instance.h
@@ -7,7 +7,7 @@ #include <string> -#include "components/arc/mojom/policy.mojom.h" +#include "ash/components/arc/mojom/policy.mojom.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h"
diff --git a/ash/components/arc/test/fake_power_instance.h b/ash/components/arc/test/fake_power_instance.h index 3a46dfa..586ff92 100644 --- a/ash/components/arc/test/fake_power_instance.h +++ b/ash/components/arc/test/fake_power_instance.h
@@ -5,7 +5,7 @@ #ifndef ASH_COMPONENTS_ARC_TEST_FAKE_POWER_INSTANCE_H_ #define ASH_COMPONENTS_ARC_TEST_FAKE_POWER_INSTANCE_H_ -#include "components/arc/mojom/power.mojom.h" +#include "ash/components/arc/mojom/power.mojom.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h"
diff --git a/ash/components/arc/test/fake_process_instance.h b/ash/components/arc/test/fake_process_instance.h index c312b95..dfa52f50 100644 --- a/ash/components/arc/test/fake_process_instance.h +++ b/ash/components/arc/test/fake_process_instance.h
@@ -5,7 +5,7 @@ #ifndef ASH_COMPONENTS_ARC_TEST_FAKE_PROCESS_INSTANCE_H_ #define ASH_COMPONENTS_ARC_TEST_FAKE_PROCESS_INSTANCE_H_ -#include "components/arc/mojom/process.mojom.h" +#include "ash/components/arc/mojom/process.mojom.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h"
diff --git a/ash/components/arc/test/fake_sharesheet_instance.h b/ash/components/arc/test/fake_sharesheet_instance.h index da936e45..639d5fb 100644 --- a/ash/components/arc/test/fake_sharesheet_instance.h +++ b/ash/components/arc/test/fake_sharesheet_instance.h
@@ -5,7 +5,7 @@ #ifndef ASH_COMPONENTS_ARC_TEST_FAKE_SHARESHEET_INSTANCE_H_ #define ASH_COMPONENTS_ARC_TEST_FAKE_SHARESHEET_INSTANCE_H_ -#include "components/arc/mojom/sharesheet.mojom.h" +#include "ash/components/arc/mojom/sharesheet.mojom.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h"
diff --git a/ash/components/arc/test/fake_storage_manager_instance.h b/ash/components/arc/test/fake_storage_manager_instance.h index 6a9404b..ca00e14f9 100644 --- a/ash/components/arc/test/fake_storage_manager_instance.h +++ b/ash/components/arc/test/fake_storage_manager_instance.h
@@ -5,8 +5,8 @@ #ifndef ASH_COMPONENTS_ARC_TEST_FAKE_STORAGE_MANAGER_INSTANCE_H_ #define ASH_COMPONENTS_ARC_TEST_FAKE_STORAGE_MANAGER_INSTANCE_H_ +#include "ash/components/arc/mojom/storage_manager.mojom.h" #include "base/callback_forward.h" -#include "components/arc/mojom/storage_manager.mojom.h" namespace arc {
diff --git a/ash/components/arc/test/fake_timer_instance.h b/ash/components/arc/test/fake_timer_instance.h index 19d4104..1901786 100644 --- a/ash/components/arc/test/fake_timer_instance.h +++ b/ash/components/arc/test/fake_timer_instance.h
@@ -5,7 +5,7 @@ #ifndef ASH_COMPONENTS_ARC_TEST_FAKE_TIMER_INSTANCE_H_ #define ASH_COMPONENTS_ARC_TEST_FAKE_TIMER_INSTANCE_H_ -#include "components/arc/mojom/timer.mojom.h" +#include "ash/components/arc/mojom/timer.mojom.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h"
diff --git a/ash/components/arc/test/fake_tracing_instance.h b/ash/components/arc/test/fake_tracing_instance.h index 328610ad..0e842b90 100644 --- a/ash/components/arc/test/fake_tracing_instance.h +++ b/ash/components/arc/test/fake_tracing_instance.h
@@ -8,7 +8,7 @@ #include <string> #include <vector> -#include "components/arc/mojom/tracing.mojom.h" +#include "ash/components/arc/mojom/tracing.mojom.h" #include "mojo/public/cpp/system/handle.h" namespace arc {
diff --git a/ash/components/arc/test/fake_wake_lock_instance.h b/ash/components/arc/test/fake_wake_lock_instance.h index bcd1296..83a35cf 100644 --- a/ash/components/arc/test/fake_wake_lock_instance.h +++ b/ash/components/arc/test/fake_wake_lock_instance.h
@@ -5,7 +5,7 @@ #ifndef ASH_COMPONENTS_ARC_TEST_FAKE_WAKE_LOCK_INSTANCE_H_ #define ASH_COMPONENTS_ARC_TEST_FAKE_WAKE_LOCK_INSTANCE_H_ -#include "components/arc/mojom/wake_lock.mojom.h" +#include "ash/components/arc/mojom/wake_lock.mojom.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h"
diff --git a/ash/components/arc/test/fake_wallpaper_instance.h b/ash/components/arc/test/fake_wallpaper_instance.h index b08f15f..5b4fe284 100644 --- a/ash/components/arc/test/fake_wallpaper_instance.h +++ b/ash/components/arc/test/fake_wallpaper_instance.h
@@ -8,7 +8,7 @@ #include <stdint.h> #include <vector> -#include "components/arc/mojom/wallpaper.mojom.h" +#include "ash/components/arc/mojom/wallpaper.mojom.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h"
diff --git a/ash/components/arc/test/fake_webapk_instance.h b/ash/components/arc/test/fake_webapk_instance.h index a68537cf..0d21444 100644 --- a/ash/components/arc/test/fake_webapk_instance.h +++ b/ash/components/arc/test/fake_webapk_instance.h
@@ -7,7 +7,7 @@ #include <unordered_set> -#include "components/arc/mojom/webapk.mojom.h" +#include "ash/components/arc/mojom/webapk.mojom.h" namespace arc {
diff --git a/ash/components/arc/timer/arc_timer_bridge.h b/ash/components/arc/timer/arc_timer_bridge.h index 3275592e..9506c14 100644 --- a/ash/components/arc/timer/arc_timer_bridge.h +++ b/ash/components/arc/timer/arc_timer_bridge.h
@@ -10,11 +10,11 @@ #include <utility> #include <vector> +#include "ash/components/arc/mojom/timer.mojom.h" #include "ash/components/arc/session/connection_observer.h" #include "base/memory/weak_ptr.h" #include "base/task/sequenced_task_runner.h" #include "base/time/time.h" -#include "components/arc/mojom/timer.mojom.h" #include "components/keyed_service/core/keyed_service.h" #include "mojo/public/cpp/bindings/receiver.h" #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/ash/components/arc/timer/arc_timer_bridge_unittest.cc b/ash/components/arc/timer/arc_timer_bridge_unittest.cc index c5cbb62..5e8fc2b7 100644 --- a/ash/components/arc/timer/arc_timer_bridge_unittest.cc +++ b/ash/components/arc/timer/arc_timer_bridge_unittest.cc
@@ -7,6 +7,7 @@ #include <utility> #include <vector> +#include "ash/components/arc/mojom/timer.mojom.h" #include "ash/components/arc/session/arc_bridge_service.h" #include "ash/components/arc/session/arc_service_manager.h" #include "ash/components/arc/session/connection_holder.h" @@ -23,7 +24,6 @@ #include "base/run_loop.h" #include "base/time/time.h" #include "chromeos/dbus/power/power_manager_client.h" -#include "components/arc/mojom/timer.mojom.h" #include "components/keyed_service/content/browser_context_keyed_service_factory.h" #include "content/public/test/browser_task_environment.h" #include "mojo/public/cpp/system/handle.h"
diff --git a/ash/components/arc/timer/arc_timer_mojom_traits.h b/ash/components/arc/timer/arc_timer_mojom_traits.h index 38ca351..fae514f 100644 --- a/ash/components/arc/timer/arc_timer_mojom_traits.h +++ b/ash/components/arc/timer/arc_timer_mojom_traits.h
@@ -7,7 +7,7 @@ #include <time.h> -#include "components/arc/mojom/timer.mojom-shared.h" +#include "ash/components/arc/mojom/timer.mojom-shared.h" namespace mojo {
diff --git a/ash/components/arc/usb/usb_host_bridge.h b/ash/components/arc/usb/usb_host_bridge.h index 72a44d0..c4f5eaa 100644 --- a/ash/components/arc/usb/usb_host_bridge.h +++ b/ash/components/arc/usb/usb_host_bridge.h
@@ -9,10 +9,10 @@ #include <string> #include <vector> +#include "ash/components/arc/mojom/usb_host.mojom.h" #include "ash/components/arc/session/connection_observer.h" #include "base/callback_forward.h" #include "base/sequence_checker.h" -#include "components/arc/mojom/usb_host.mojom.h" #include "components/keyed_service/core/keyed_service.h" #include "mojo/public/cpp/bindings/associated_receiver.h" #include "mojo/public/cpp/bindings/remote.h"
diff --git a/ash/components/arc/volume_mounter/arc_volume_mounter_bridge.cc b/ash/components/arc/volume_mounter/arc_volume_mounter_bridge.cc index 7cd5453..594d50c1 100644 --- a/ash/components/arc/volume_mounter/arc_volume_mounter_bridge.cc +++ b/ash/components/arc/volume_mounter/arc_volume_mounter_bridge.cc
@@ -25,12 +25,12 @@ #include "ui/base/l10n/l10n_util.h" #include "ui/chromeos/strings/grit/ui_chromeos_strings.h" -using chromeos::disks::DiskMountManager; - namespace arc { namespace { +using ::ash::disks::DiskMountManager; + // TODO(crbug.com/929031): Move MyFiles constants to a common place. constexpr char kMyFilesPath[] = "/home/chronos/user/MyFiles"; // Prefix of the removable media mount paths. @@ -196,7 +196,7 @@ } // Get disks informations that are needed by Android MountService. - const chromeos::disks::Disk* disk = + const ash::disks::Disk* disk = DiskMountManager::GetInstance()->FindDiskBySourcePath( mount_info.source_path); std::string fs_uuid, device_label;
diff --git a/ash/components/arc/volume_mounter/arc_volume_mounter_bridge.h b/ash/components/arc/volume_mounter/arc_volume_mounter_bridge.h index e4cb9a4..2ad5ef57 100644 --- a/ash/components/arc/volume_mounter/arc_volume_mounter_bridge.h +++ b/ash/components/arc/volume_mounter/arc_volume_mounter_bridge.h
@@ -7,11 +7,11 @@ #include <string> +#include "ash/components/arc/mojom/volume_mounter.mojom.h" #include "ash/components/arc/session/connection_observer.h" #include "ash/components/disks/disk_mount_manager.h" #include "base/callback_forward.h" #include "base/memory/weak_ptr.h" -#include "components/arc/mojom/volume_mounter.mojom.h" #include "components/keyed_service/core/keyed_service.h" #include "components/keyed_service/core/keyed_service_base_factory.h" #include "components/prefs/pref_change_registrar.h" @@ -28,7 +28,7 @@ // send them to Android. class ArcVolumeMounterBridge : public KeyedService, - public chromeos::disks::DiskMountManager::Observer, + public ash::disks::DiskMountManager::Observer, public ConnectionObserver<mojom::VolumeMounterInstance>, public mojom::VolumeMounterHost { public: @@ -65,11 +65,11 @@ ~ArcVolumeMounterBridge() override; - // chromeos::disks::DiskMountManager::Observer overrides: - void OnMountEvent(chromeos::disks::DiskMountManager::MountEvent event, - chromeos::MountError error_code, - const chromeos::disks::DiskMountManager::MountPointInfo& - mount_info) override; + // ash::disks::DiskMountManager::Observer overrides: + void OnMountEvent( + ash::disks::DiskMountManager::MountEvent event, + chromeos::MountError error_code, + const ash::disks::DiskMountManager::MountPointInfo& mount_info) override; // mojom::VolumeMounterHost overrides: void RequestAllMountPoints() override; @@ -84,7 +84,7 @@ private: void SendMountEventForMyFiles(); void SendMountEventForRemovableMedia( - chromeos::disks::DiskMountManager::MountEvent event, + ash::disks::DiskMountManager::MountEvent event, const std::string& source_path, const std::string& mount_path, const std::string& fs_uuid,
diff --git a/ash/components/arc/volume_mounter/arc_volume_mounter_bridge_unittest.cc b/ash/components/arc/volume_mounter/arc_volume_mounter_bridge_unittest.cc index bb11cb88..ac733cae 100644 --- a/ash/components/arc/volume_mounter/arc_volume_mounter_bridge_unittest.cc +++ b/ash/components/arc/volume_mounter/arc_volume_mounter_bridge_unittest.cc
@@ -23,11 +23,11 @@ ~ArcVolumeMounterBridgeTest() override = default; void SetUp() override { - chromeos::disks::DiskMountManager::InitializeForTesting( - new chromeos::disks::MockDiskMountManager); + ash::disks::DiskMountManager::InitializeForTesting( + new ash::disks::MockDiskMountManager); bridge_ = ArcVolumeMounterBridge::GetForBrowserContextForTesting(&context_); } - void TearDown() override { chromeos::disks::DiskMountManager::Shutdown(); } + void TearDown() override { ash::disks::DiskMountManager::Shutdown(); } ArcVolumeMounterBridge* bridge() { return bridge_; }
diff --git a/ash/components/arc/volume_mounter/volume_mounter_mojom_traits.cc b/ash/components/arc/volume_mounter/volume_mounter_mojom_traits.cc index 70ada6e..c0ac521 100644 --- a/ash/components/arc/volume_mounter/volume_mounter_mojom_traits.cc +++ b/ash/components/arc/volume_mounter/volume_mounter_mojom_traits.cc
@@ -47,13 +47,12 @@ } arc::mojom::MountEvent -EnumTraits<arc::mojom::MountEvent, - chromeos::disks::DiskMountManager::MountEvent>:: - ToMojom(chromeos::disks::DiskMountManager::MountEvent mount_event) { +EnumTraits<arc::mojom::MountEvent, ash::disks::DiskMountManager::MountEvent>:: + ToMojom(ash::disks::DiskMountManager::MountEvent mount_event) { switch (mount_event) { - case chromeos::disks::DiskMountManager::MountEvent::MOUNTING: + case ash::disks::DiskMountManager::MountEvent::MOUNTING: return arc::mojom::MountEvent::MOUNTING; - case chromeos::disks::DiskMountManager::MountEvent::UNMOUNTING: + case ash::disks::DiskMountManager::MountEvent::UNMOUNTING: return arc::mojom::MountEvent::UNMOUNTING; } NOTREACHED(); @@ -61,15 +60,15 @@ } bool EnumTraits<arc::mojom::MountEvent, - chromeos::disks::DiskMountManager::MountEvent>:: + ash::disks::DiskMountManager::MountEvent>:: FromMojom(arc::mojom::MountEvent input, - chromeos::disks::DiskMountManager::MountEvent* out) { + ash::disks::DiskMountManager::MountEvent* out) { switch (input) { case arc::mojom::MountEvent::MOUNTING: - *out = chromeos::disks::DiskMountManager::MountEvent::MOUNTING; + *out = ash::disks::DiskMountManager::MountEvent::MOUNTING; return true; case arc::mojom::MountEvent::UNMOUNTING: - *out = chromeos::disks::DiskMountManager::MountEvent::UNMOUNTING; + *out = ash::disks::DiskMountManager::MountEvent::UNMOUNTING; return true; } NOTREACHED();
diff --git a/ash/components/arc/volume_mounter/volume_mounter_mojom_traits.h b/ash/components/arc/volume_mounter/volume_mounter_mojom_traits.h index 515181f2..773ccf48 100644 --- a/ash/components/arc/volume_mounter/volume_mounter_mojom_traits.h +++ b/ash/components/arc/volume_mounter/volume_mounter_mojom_traits.h
@@ -5,8 +5,8 @@ #ifndef ASH_COMPONENTS_ARC_VOLUME_MOUNTER_VOLUME_MOUNTER_MOJOM_TRAITS_H_ #define ASH_COMPONENTS_ARC_VOLUME_MOUNTER_VOLUME_MOUNTER_MOJOM_TRAITS_H_ +#include "ash/components/arc/mojom/volume_mounter.mojom-shared.h" #include "ash/components/disks/disk_mount_manager.h" -#include "components/arc/mojom/volume_mounter.mojom-shared.h" namespace mojo { @@ -19,11 +19,11 @@ template <> struct EnumTraits<arc::mojom::MountEvent, - chromeos::disks::DiskMountManager::MountEvent> { + ash::disks::DiskMountManager::MountEvent> { static arc::mojom::MountEvent ToMojom( - chromeos::disks::DiskMountManager::MountEvent mount_event); + ash::disks::DiskMountManager::MountEvent mount_event); static bool FromMojom(arc::mojom::MountEvent input, - chromeos::disks::DiskMountManager::MountEvent* out); + ash::disks::DiskMountManager::MountEvent* out); }; } // namespace mojo
diff --git a/ash/components/arc/wake_lock/arc_wake_lock_bridge.h b/ash/components/arc/wake_lock/arc_wake_lock_bridge.h index b710d00..70f9370 100644 --- a/ash/components/arc/wake_lock/arc_wake_lock_bridge.h +++ b/ash/components/arc/wake_lock/arc_wake_lock_bridge.h
@@ -8,9 +8,9 @@ #include <map> #include <memory> +#include "ash/components/arc/mojom/wake_lock.mojom.h" #include "ash/components/arc/session/connection_observer.h" #include "base/memory/weak_ptr.h" -#include "components/arc/mojom/wake_lock.mojom.h" #include "components/keyed_service/core/keyed_service.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h"
diff --git a/ash/components/arc/wake_lock/arc_wake_lock_bridge_unittest.cc b/ash/components/arc/wake_lock/arc_wake_lock_bridge_unittest.cc index 30f7dc1..9fde1b9 100644 --- a/ash/components/arc/wake_lock/arc_wake_lock_bridge_unittest.cc +++ b/ash/components/arc/wake_lock/arc_wake_lock_bridge_unittest.cc
@@ -7,6 +7,7 @@ #include <memory> #include <utility> +#include "ash/components/arc/mojom/power.mojom.h" #include "ash/components/arc/session/arc_bridge_service.h" #include "ash/components/arc/test/connection_holder_util.h" #include "ash/components/arc/test/fake_power_instance.h" @@ -14,7 +15,6 @@ #include "base/bind.h" #include "base/run_loop.h" #include "base/test/task_environment.h" -#include "components/arc/mojom/power.mojom.h" #include "services/device/public/cpp/test/test_wake_lock_provider.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/ash/components/disks/disk.cc b/ash/components/disks/disk.cc index c58bc583..554c7b1 100644 --- a/ash/components/disks/disk.cc +++ b/ash/components/disks/disk.cc
@@ -9,12 +9,12 @@ #include "base/files/file_path.h" #include "base/memory/ptr_util.h" -namespace chromeos { +namespace ash { namespace disks { namespace { constexpr char kStatefulPartition[] = "/mnt/stateful_partition"; -} +} // namespace Disk::Disk(const DiskInfo& disk_info, bool write_disabled_by_policy, @@ -204,4 +204,4 @@ } } // namespace disks -} // namespace chromeos +} // namespace ash
diff --git a/ash/components/disks/disk.h b/ash/components/disks/disk.h index 9f144c38..d3f894b 100644 --- a/ash/components/disks/disk.h +++ b/ash/components/disks/disk.h
@@ -12,7 +12,7 @@ #include "base/files/file_path.h" #include "chromeos/dbus/cros_disks/cros_disks_client.h" -namespace chromeos { +namespace ash { namespace disks { class COMPONENT_EXPORT(ASH_DISKS) Disk { @@ -220,6 +220,6 @@ COMPONENT_EXPORT(ASH_DISKS) base::FilePath GetStatefulPartitionPath(); } // namespace disks -} // namespace chromeos +} // namespace ash #endif // ASH_COMPONENTS_DISKS_DISK_H_
diff --git a/ash/components/disks/disk_mount_manager.cc b/ash/components/disks/disk_mount_manager.cc index 632c301f..6263805 100644 --- a/ash/components/disks/disk_mount_manager.cc +++ b/ash/components/disks/disk_mount_manager.cc
@@ -29,7 +29,7 @@ #include "chromeos/dbus/cros_disks/cros_disks_client.h" #include "chromeos/dbus/dbus_thread_manager.h" -namespace chromeos { +namespace ash { namespace disks { namespace { @@ -1170,4 +1170,4 @@ } } // namespace disks -} // namespace chromeos +} // namespace ash
diff --git a/ash/components/disks/disk_mount_manager.h b/ash/components/disks/disk_mount_manager.h index 7e87d79..0489f79 100644 --- a/ash/components/disks/disk_mount_manager.h +++ b/ash/components/disks/disk_mount_manager.h
@@ -15,7 +15,7 @@ #include "base/observer_list_types.h" #include "chromeos/dbus/cros_disks/cros_disks_client.h" -namespace chromeos { +namespace ash { namespace disks { class Disk; @@ -262,13 +262,13 @@ }; } // namespace disks -} // namespace chromeos - -// TODO(https://crbug.com/1164001): remove when chromeos/disks is moved to ash. -namespace ash { -namespace disks { -using ::chromeos::disks::DiskMountManager; -} // namespace disks } // namespace ash +// TODO(https://crbug.com/1164001): remove when the migration is finished. +namespace chromeos { +namespace disks { +using ::ash::disks::DiskMountManager; +} // namespace disks +} // namespace chromeos + #endif // ASH_COMPONENTS_DISKS_DISK_MOUNT_MANAGER_H_
diff --git a/ash/components/disks/disk_mount_manager_unittest.cc b/ash/components/disks/disk_mount_manager_unittest.cc index 14069db..1e0a418 100644 --- a/ash/components/disks/disk_mount_manager_unittest.cc +++ b/ash/components/disks/disk_mount_manager_unittest.cc
@@ -30,8 +30,7 @@ using base::StringPrintf; using testing::Field; -namespace chromeos { - +namespace ash { namespace disks { namespace { @@ -76,7 +75,7 @@ const char* source_path; const char* mount_path; chromeos::MountType mount_type; - chromeos::disks::MountCondition mount_condition; + MountCondition mount_condition; }; // List of disks held in DiskMountManager at the beginning of the test. @@ -143,19 +142,19 @@ "/archive/source_path", "/archive/mount_path", chromeos::MOUNT_TYPE_ARCHIVE, - chromeos::disks::MOUNT_CONDITION_NONE + MOUNT_CONDITION_NONE }, { kDevice1SourcePath, kDevice1MountPath, chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE + MOUNT_CONDITION_NONE }, { kReadOnlyDeviceSourcePath, kReadOnlyDeviceMountPath, chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE + MOUNT_CONDITION_NONE }, }; @@ -1742,4 +1741,4 @@ } // namespace } // namespace disks -} // namespace chromeos +} // namespace ash
diff --git a/ash/components/disks/disk_unittest.cc b/ash/components/disks/disk_unittest.cc index 2dd0ace2..1825b38 100644 --- a/ash/components/disks/disk_unittest.cc +++ b/ash/components/disks/disk_unittest.cc
@@ -15,7 +15,7 @@ #include "testing/gtest/include/gtest/gtest.h" #include "third_party/cros_system_api/dbus/service_constants.h" -namespace chromeos { +namespace ash { namespace disks { namespace { @@ -269,4 +269,4 @@ } // namespace } // namespace disks -} // namespace chromeos +} // namespace ash
diff --git a/ash/components/disks/mock_disk_mount_manager.cc b/ash/components/disks/mock_disk_mount_manager.cc index 9d39666..3244101 100644 --- a/ash/components/disks/mock_disk_mount_manager.cc +++ b/ash/components/disks/mock_disk_mount_manager.cc
@@ -17,7 +17,7 @@ using testing::Invoke; using testing::ReturnRef; -namespace chromeos { +namespace ash { namespace disks { namespace { @@ -215,4 +215,4 @@ } } // namespace disks -} // namespace chromeos +} // namespace ash
diff --git a/ash/components/disks/mock_disk_mount_manager.h b/ash/components/disks/mock_disk_mount_manager.h index 46fc944..a594b718 100644 --- a/ash/components/disks/mock_disk_mount_manager.h +++ b/ash/components/disks/mock_disk_mount_manager.h
@@ -15,7 +15,7 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -namespace chromeos { +namespace ash { namespace disks { // TODO(tbarzic): Replace this mock with a fake implementation @@ -149,6 +149,6 @@ }; } // namespace disks -} // namespace chromeos +} // namespace ash #endif // ASH_COMPONENTS_DISKS_MOCK_DISK_MOUNT_MANAGER_H_
diff --git a/ash/components/disks/mount_point.cc b/ash/components/disks/mount_point.cc index 1c28da1..5a77dc4 100644 --- a/ash/components/disks/mount_point.cc +++ b/ash/components/disks/mount_point.cc
@@ -11,7 +11,7 @@ #include "base/logging.h" #include "base/threading/sequenced_task_runner_handle.h" -namespace chromeos { +namespace ash { namespace disks { namespace { @@ -89,4 +89,4 @@ } } // namespace disks -} // namespace chromeos +} // namespace ash
diff --git a/ash/components/disks/mount_point.h b/ash/components/disks/mount_point.h index f9a85cd..fe7dcf7 100644 --- a/ash/components/disks/mount_point.h +++ b/ash/components/disks/mount_point.h
@@ -13,7 +13,7 @@ #include "base/files/file_path.h" #include "base/memory/weak_ptr.h" -namespace chromeos { +namespace ash { namespace disks { class DiskMountManager; @@ -66,6 +66,6 @@ }; } // namespace disks -} // namespace chromeos +} // namespace ash #endif // ASH_COMPONENTS_DISKS_MOUNT_POINT_H_
diff --git a/ash/components/disks/mount_point_unittest.cc b/ash/components/disks/mount_point_unittest.cc index f8da3f58..79f8ae5 100644 --- a/ash/components/disks/mount_point_unittest.cc +++ b/ash/components/disks/mount_point_unittest.cc
@@ -17,7 +17,7 @@ using ::testing::WithArg; using ::testing::WithoutArgs; -namespace chromeos { +namespace ash { namespace disks { namespace { @@ -122,4 +122,4 @@ } // namespace } // namespace disks -} // namespace chromeos +} // namespace ash
diff --git a/ash/components/disks/suspend_unmount_manager.cc b/ash/components/disks/suspend_unmount_manager.cc index 60b379b..3fa2402 100644 --- a/ash/components/disks/suspend_unmount_manager.cc +++ b/ash/components/disks/suspend_unmount_manager.cc
@@ -10,7 +10,7 @@ #include "base/location.h" #include "base/logging.h" -namespace chromeos { +namespace ash { namespace disks { namespace { @@ -85,4 +85,4 @@ } } // namespace disks -} // namespace chromeos +} // namespace ash
diff --git a/ash/components/disks/suspend_unmount_manager.h b/ash/components/disks/suspend_unmount_manager.h index 67d6c6b..7c7125e 100644 --- a/ash/components/disks/suspend_unmount_manager.h +++ b/ash/components/disks/suspend_unmount_manager.h
@@ -14,7 +14,7 @@ #include "chromeos/dbus/cros_disks/cros_disks_client.h" #include "chromeos/dbus/power/power_manager_client.h" -namespace chromeos { +namespace ash { namespace disks { class DiskMountManager; @@ -52,6 +52,6 @@ }; } // namespace disks -} // namespace chromeos +} // namespace ash #endif // ASH_COMPONENTS_DISKS_SUSPEND_UNMOUNT_MANAGER_H_
diff --git a/ash/components/disks/suspend_unmount_manager_unittest.cc b/ash/components/disks/suspend_unmount_manager_unittest.cc index 420a38d..35c8386 100644 --- a/ash/components/disks/suspend_unmount_manager_unittest.cc +++ b/ash/components/disks/suspend_unmount_manager_unittest.cc
@@ -13,7 +13,7 @@ #include "chromeos/dbus/power_manager/suspend.pb.h" #include "testing/gtest/include/gtest/gtest.h" -namespace chromeos { +namespace ash { namespace disks { namespace { @@ -73,25 +73,25 @@ const std::string kDummyMountPathSd = "/dummy/mount/sd"; const std::string kDummyMountPathUnknown = "/dummy/mount/unknown"; disk_mount_manager_.CreateDiskEntryForMountDevice( - chromeos::disks::DiskMountManager::MountPointInfo( - "/dummy/device/usb", kDummyMountPathUsb, chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE), + DiskMountManager::MountPointInfo("/dummy/device/usb", kDummyMountPathUsb, + chromeos::MOUNT_TYPE_DEVICE, + MOUNT_CONDITION_NONE), kDeviceId, kDeviceLabel, kVendor, kProduct, chromeos::DEVICE_TYPE_USB, 1024 * 1024, false /* is_parent */, false /* has_media */, false /* on_boot_device */, true /* on_removable_device */, kFileSystemType); disk_mount_manager_.CreateDiskEntryForMountDevice( - chromeos::disks::DiskMountManager::MountPointInfo( - "/dummy/device/sd", kDummyMountPathSd, chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE), + DiskMountManager::MountPointInfo("/dummy/device/sd", kDummyMountPathSd, + chromeos::MOUNT_TYPE_DEVICE, + MOUNT_CONDITION_NONE), kDeviceId, kDeviceLabel, kVendor, kProduct, chromeos::DEVICE_TYPE_SD, 1024 * 1024, false /* is_parent */, false /* has_media */, false /* on_boot_device */, true /* on_removable_device */, kFileSystemType); disk_mount_manager_.CreateDiskEntryForMountDevice( - chromeos::disks::DiskMountManager::MountPointInfo( + DiskMountManager::MountPointInfo( "/dummy/device/unknown", kDummyMountPathUnknown, - chromeos::MOUNT_TYPE_DEVICE, chromeos::disks::MOUNT_CONDITION_NONE), + chromeos::MOUNT_TYPE_DEVICE, MOUNT_CONDITION_NONE), kDeviceId, kDeviceLabel, kVendor, kProduct, chromeos::DEVICE_TYPE_UNKNOWN, 1024 * 1024, false /* is_parent */, false /* has_media */, false /* on_boot_device */, true /* on_removable_device */, @@ -122,9 +122,9 @@ TEST_F(SuspendUnmountManagerTest, CancelAndSuspendAgain) { const std::string kDummyMountPath = "/dummy/mount"; disk_mount_manager_.CreateDiskEntryForMountDevice( - chromeos::disks::DiskMountManager::MountPointInfo( - "/dummy/device", kDummyMountPath, chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE), + DiskMountManager::MountPointInfo("/dummy/device", kDummyMountPath, + chromeos::MOUNT_TYPE_DEVICE, + MOUNT_CONDITION_NONE), kDeviceId, kDeviceLabel, kVendor, kProduct, chromeos::DEVICE_TYPE_USB, 1024 * 1024, false /* is_parent */, false /* has_media */, false /* on_boot_device */, true /* on_removable_device */, @@ -152,4 +152,4 @@ } // namespace } // namespace disks -} // namespace chromeos +} // namespace ash
diff --git a/ash/components/drivefs/drivefs_host.cc b/ash/components/drivefs/drivefs_host.cc index b733e06..74841993 100644 --- a/ash/components/drivefs/drivefs_host.cc +++ b/ash/components/drivefs/drivefs_host.cc
@@ -209,7 +209,7 @@ DriveFsHost::MountObserver* mount_observer, network::NetworkConnectionTracker* network_connection_tracker, const base::Clock* clock, - chromeos::disks::DiskMountManager* disk_mount_manager, + ash::disks::DiskMountManager* disk_mount_manager, std::unique_ptr<base::OneShotTimer> timer) : profile_path_(profile_path), delegate_(delegate),
diff --git a/ash/components/drivefs/drivefs_host.h b/ash/components/drivefs/drivefs_host.h index 33145885..d7f1bcc 100644 --- a/ash/components/drivefs/drivefs_host.h +++ b/ash/components/drivefs/drivefs_host.h
@@ -23,19 +23,19 @@ #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" -namespace drive { -class DriveNotificationManager; -} - -namespace chromeos { +namespace ash { namespace disks { class DiskMountManager; -} -} // namespace chromeos +} // namespace disks +} // namespace ash + +namespace drive { +class DriveNotificationManager; +} // namespace drive namespace network { class NetworkConnectionTracker; -} +} // namespace network namespace drivefs { @@ -78,7 +78,7 @@ MountObserver* mount_observer, network::NetworkConnectionTracker* network_connection_tracker, const base::Clock* clock, - chromeos::disks::DiskMountManager* disk_mount_manager, + ash::disks::DiskMountManager* disk_mount_manager, std::unique_ptr<base::OneShotTimer> timer); DriveFsHost(const DriveFsHost&) = delete; @@ -131,7 +131,7 @@ MountObserver* const mount_observer_; network::NetworkConnectionTracker* const network_connection_tracker_; const base::Clock* const clock_; - chromeos::disks::DiskMountManager* const disk_mount_manager_; + ash::disks::DiskMountManager* const disk_mount_manager_; std::unique_ptr<base::OneShotTimer> timer_; std::unique_ptr<DriveFsAuth> account_token_delegate_;
diff --git a/ash/components/drivefs/drivefs_host_unittest.cc b/ash/components/drivefs/drivefs_host_unittest.cc index 73376e2..9dcfe055 100644 --- a/ash/components/drivefs/drivefs_host_unittest.cc +++ b/ash/components/drivefs/drivefs_host_unittest.cc
@@ -213,7 +213,7 @@ profile_path_ = base::FilePath(FILE_PATH_LITERAL("/path/to/profile")); account_id_ = AccountId::FromUserEmailGaiaId("test@example.com", "ID"); - disk_manager_ = std::make_unique<chromeos::disks::MockDiskMountManager>(); + disk_manager_ = std::make_unique<ash::disks::MockDiskMountManager>(); identity_test_env_.MakePrimaryAccountAvailable( "test@example.com", signin::ConsentLevel::kSignin); host_delegate_ = std::make_unique<TestingDriveFsHostDelegate>( @@ -325,8 +325,8 @@ base::FilePath profile_path_; base::test::TaskEnvironment task_environment_; AccountId account_id_; - std::unique_ptr<chromeos::disks::MockDiskMountManager> disk_manager_; - chromeos::disks::DiskMountManager::MountPathCallback mount_callback_; + std::unique_ptr<ash::disks::MockDiskMountManager> disk_manager_; + ash::disks::DiskMountManager::MountPathCallback mount_callback_; std::unique_ptr<network::TestNetworkConnectionTracker> network_connection_tracker_; base::SimpleTestClock clock_;
diff --git a/ash/components/drivefs/drivefs_session.cc b/ash/components/drivefs/drivefs_session.cc index 4a3c408..52af142a 100644 --- a/ash/components/drivefs/drivefs_session.cc +++ b/ash/components/drivefs/drivefs_session.cc
@@ -24,8 +24,7 @@ class DiskMounterImpl : public DiskMounter { public: - explicit DiskMounterImpl( - chromeos::disks::DiskMountManager* disk_mount_manager) + explicit DiskMounterImpl(ash::disks::DiskMountManager* disk_mount_manager) : disk_mount_manager_(disk_mount_manager) {} DiskMounterImpl(const DiskMounterImpl&) = delete; @@ -46,7 +45,7 @@ std::string datadir_option = base::StrCat({kDataDirOption, data_path.value()}); - chromeos::disks::MountPoint::Mount( + ash::disks::MountPoint::Mount( disk_mount_manager_, source_path_, "", desired_mount_dir_name, {datadir_option, base::StrCat({kMyFilesOption, my_files_path.value()})}, chromeos::MOUNT_TYPE_NETWORK_STORAGE, @@ -58,7 +57,7 @@ private: // MountPoint::Mount() done callback. void OnMountDone(chromeos::MountError error_code, - std::unique_ptr<chromeos::disks::MountPoint> mount_point) { + std::unique_ptr<ash::disks::MountPoint> mount_point) { DCHECK(callback_); if (error_code != chromeos::MOUNT_ERROR_NONE) { @@ -72,11 +71,11 @@ std::move(callback_).Run(mount_point_->mount_path()); } - chromeos::disks::DiskMountManager* const disk_mount_manager_; + ash::disks::DiskMountManager* const disk_mount_manager_; base::OnceCallback<void(base::FilePath)> callback_; // The path passed to cros-disks to mount. std::string source_path_; - std::unique_ptr<chromeos::disks::MountPoint> mount_point_; + std::unique_ptr<ash::disks::MountPoint> mount_point_; base::WeakPtrFactory<DiskMounterImpl> weak_factory_{this}; }; @@ -84,7 +83,7 @@ } // namespace std::unique_ptr<DiskMounter> DiskMounter::Create( - chromeos::disks::DiskMountManager* disk_mount_manager) { + ash::disks::DiskMountManager* disk_mount_manager) { return std::make_unique<DiskMounterImpl>(disk_mount_manager); }
diff --git a/ash/components/drivefs/drivefs_session.h b/ash/components/drivefs/drivefs_session.h index 59401b3..17e5c34 100644 --- a/ash/components/drivefs/drivefs_session.h +++ b/ash/components/drivefs/drivefs_session.h
@@ -34,7 +34,7 @@ base::OnceCallback<void(base::FilePath)> callback) = 0; static std::unique_ptr<DiskMounter> Create( - chromeos::disks::DiskMountManager* disk_mount_manager); + ash::disks::DiskMountManager* disk_mount_manager); }; class DriveFsConnection;
diff --git a/ash/components/drivefs/drivefs_session_unittest.cc b/ash/components/drivefs/drivefs_session_unittest.cc index f5817bd..a064fb5 100644 --- a/ash/components/drivefs/drivefs_session_unittest.cc +++ b/ash/components/drivefs/drivefs_session_unittest.cc
@@ -66,8 +66,8 @@ MOCK_METHOD1(OnCompleted, void(base::FilePath)); base::test::TaskEnvironment task_environment_; - chromeos::disks::MockDiskMountManager disk_manager_; - chromeos::disks::DiskMountManager::MountPathCallback mount_callback_; + ash::disks::MockDiskMountManager disk_manager_; + ash::disks::DiskMountManager::MountPathCallback mount_callback_; }; TEST_F(DriveFsDiskMounterTest, MountUnmount) {
diff --git a/ash/components/drivefs/fake_drivefs.cc b/ash/components/drivefs/fake_drivefs.cc index 0247887..26dfaac 100644 --- a/ash/components/drivefs/fake_drivefs.cc +++ b/ash/components/drivefs/fake_drivefs.cc
@@ -356,6 +356,9 @@ metadata->alternate_url = GURL(base::StrCat({prefix, suffix})).spec(); metadata->capabilities = stored_metadata.capabilities.Clone(); metadata->stable_id = stored_metadata.stable_id; + if (stored_metadata.hosted) { + metadata->can_pin = mojom::FileMetadata::CanPinStatus::kDisabled; + } std::move(callback).Run(drive::FILE_ERROR_OK, std::move(metadata)); }
diff --git a/ash/components/drivefs/mojom/drivefs.mojom b/ash/components/drivefs/mojom/drivefs.mojom index 7474e1e9..2ee31e1 100644 --- a/ash/components/drivefs/mojom/drivefs.mojom +++ b/ash/components/drivefs/mojom/drivefs.mojom
@@ -261,7 +261,7 @@ mojo_base.mojom.FilePath path; }; -// Next MinVersion: 4 +// Next MinVersion: 5 struct FileMetadata { [Extensible] enum Type { // A regular file. @@ -312,6 +312,13 @@ // The unique device local ID used by DriveFS to refer to this file. // Note: 0 is an invalid stable id. [MinVersion=3] int64 stable_id = 0; + + [Extensible] enum CanPinStatus { + kOk, + kDisabled, + }; + + [MinVersion=4] CanPinStatus can_pin; }; struct ImageMetadata {
diff --git a/chromeos/policy/BUILD.gn b/ash/components/policy/BUILD.gn similarity index 80% rename from chromeos/policy/BUILD.gn rename to ash/components/policy/BUILD.gn index 76bbd58..06715caa4 100644 --- a/chromeos/policy/BUILD.gn +++ b/ash/components/policy/BUILD.gn
@@ -2,11 +2,13 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -assert(is_chromeos, "Non-Chrome-OS builds must not depend on //chromeos") +import("//build/config/chromeos/ui_mode.gni") + +assert(is_chromeos_ash, "Non-Chrome-OS builds must not depend on //ash") component("policy") { - output_name = "chromeos_policy" # Avoid conflict with //sandbox/policy - defines = [ "IS_CHROMEOS_POLICY_IMPL" ] + output_name = "ash_policy" # Avoid conflict with //sandbox/policy + defines = [ "IS_ASH_POLICY_IMPL" ] public_deps = [ "//components/policy/proto",
diff --git a/chromeos/policy/COMMON_METADATA b/ash/components/policy/COMMON_METADATA similarity index 100% rename from chromeos/policy/COMMON_METADATA rename to ash/components/policy/COMMON_METADATA
diff --git a/ash/components/policy/DEPS b/ash/components/policy/DEPS new file mode 100644 index 0000000..10f6b53 --- /dev/null +++ b/ash/components/policy/DEPS
@@ -0,0 +1,3 @@ +include_rules = [ + "+components/policy/proto" +]
diff --git a/ash/components/policy/DIR_METADATA b/ash/components/policy/DIR_METADATA new file mode 100644 index 0000000..f332abae1 --- /dev/null +++ b/ash/components/policy/DIR_METADATA
@@ -0,0 +1 @@ +mixins: "//ash/components/policy/COMMON_METADATA"
diff --git a/chromeos/policy/OWNERS b/ash/components/policy/OWNERS similarity index 100% rename from chromeos/policy/OWNERS rename to ash/components/policy/OWNERS
diff --git a/chromeos/policy/weekly_time/time_utils.cc b/ash/components/policy/weekly_time/time_utils.cc similarity index 96% rename from chromeos/policy/weekly_time/time_utils.cc rename to ash/components/policy/weekly_time/time_utils.cc index 19cbd61..5027727c 100644 --- a/chromeos/policy/weekly_time/time_utils.cc +++ b/ash/components/policy/weekly_time/time_utils.cc
@@ -2,18 +2,18 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chromeos/policy/weekly_time/time_utils.h" +#include "ash/components/policy/weekly_time/time_utils.h" #include <algorithm> #include <memory> +#include "ash/components/policy/weekly_time/weekly_time.h" +#include "ash/components/policy/weekly_time/weekly_time_interval.h" #include "base/i18n/time_formatting.h" #include "base/logging.h" #include "base/memory/ptr_util.h" #include "base/time/clock.h" #include "base/time/time.h" -#include "chromeos/policy/weekly_time/weekly_time.h" -#include "chromeos/policy/weekly_time/weekly_time_interval.h" #include "third_party/icu/source/common/unicode/unistr.h" #include "third_party/icu/source/common/unicode/utypes.h" #include "third_party/icu/source/i18n/unicode/gregocal.h"
diff --git a/chromeos/policy/weekly_time/time_utils.h b/ash/components/policy/weekly_time/time_utils.h similarity index 86% rename from chromeos/policy/weekly_time/time_utils.h rename to ash/components/policy/weekly_time/time_utils.h index cf6f270..03f55a5d 100644 --- a/chromeos/policy/weekly_time/time_utils.h +++ b/ash/components/policy/weekly_time/time_utils.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 CHROMEOS_POLICY_WEEKLY_TIME_TIME_UTILS_H_ -#define CHROMEOS_POLICY_WEEKLY_TIME_TIME_UTILS_H_ +#ifndef ASH_COMPONENTS_POLICY_WEEKLY_TIME_TIME_UTILS_H_ +#define ASH_COMPONENTS_POLICY_WEEKLY_TIME_TIME_UTILS_H_ #include <string> #include <vector> @@ -27,12 +27,12 @@ // Put time in milliseconds which is added to local time to get GMT time to // |offset| considering daylight from |clock|. Return true if there was no // error. -COMPONENT_EXPORT(CHROMEOS_POLICY) +COMPONENT_EXPORT(ASH_POLICY) bool GetOffsetFromTimezoneToGmt(const std::string& timezone, base::Clock* clock, int* offset); -COMPONENT_EXPORT(CHROMEOS_POLICY) +COMPONENT_EXPORT(ASH_POLICY) bool GetOffsetFromTimezoneToGmt(const icu::TimeZone& timezone, base::Clock* clock, int* offset); @@ -45,25 +45,25 @@ // Similarly, the output will be "Donnerstag 05:00" in a German locale in a GMT // timezone (there may be slight changes in formatting due to different // standards in different locales). -COMPONENT_EXPORT(CHROMEOS_POLICY) +COMPONENT_EXPORT(ASH_POLICY) std::u16string WeeklyTimeToLocalizedString(const WeeklyTime& weekly_time, base::Clock* clock); // Convert time intervals from |timezone| to GMT timezone. Timezone agnostic // intervals are not supported. -COMPONENT_EXPORT(CHROMEOS_POLICY) +COMPONENT_EXPORT(ASH_POLICY) std::vector<WeeklyTimeInterval> ConvertIntervalsToGmt( const std::vector<WeeklyTimeInterval>& intervals); // Checks if |time| is contained in one of the |intervals|. Timezone agnostic // intervals are not supported. -COMPONENT_EXPORT(CHROMEOS_POLICY) +COMPONENT_EXPORT(ASH_POLICY) bool Contains(const base::Time& time, const std::vector<WeeklyTimeInterval>& intervals); // Returns next start or end interval time after |current_time|, or // absl::nullopt in case |weekly_time_intervals| is empty. -COMPONENT_EXPORT(CHROMEOS_POLICY) +COMPONENT_EXPORT(ASH_POLICY) absl::optional<base::Time> GetNextEventTime( const base::Time& current_time, const std::vector<WeeklyTimeInterval>& weekly_time_intervals); @@ -71,4 +71,4 @@ } // namespace weekly_time_utils } // namespace policy -#endif // CHROMEOS_POLICY_WEEKLY_TIME_TIME_UTILS_H_ +#endif // ASH_COMPONENTS_POLICY_WEEKLY_TIME_TIME_UTILS_H_
diff --git a/chromeos/policy/weekly_time/time_utils_unittest.cc b/ash/components/policy/weekly_time/time_utils_unittest.cc similarity index 98% rename from chromeos/policy/weekly_time/time_utils_unittest.cc rename to ash/components/policy/weekly_time/time_utils_unittest.cc index 1d47963..9f894b0 100644 --- a/chromeos/policy/weekly_time/time_utils_unittest.cc +++ b/ash/components/policy/weekly_time/time_utils_unittest.cc
@@ -2,19 +2,19 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chromeos/policy/weekly_time/time_utils.h" +#include "ash/components/policy/weekly_time/time_utils.h" #include <memory> #include <utility> +#include "ash/components/policy/weekly_time/weekly_time.h" +#include "ash/components/policy/weekly_time/weekly_time_interval.h" #include "base/i18n/rtl.h" #include "base/memory/ptr_util.h" #include "base/strings/utf_string_conversions.h" #include "base/test/icu_test_util.h" #include "base/test/simple_test_clock.h" #include "base/time/time.h" -#include "chromeos/policy/weekly_time/weekly_time.h" -#include "chromeos/policy/weekly_time/weekly_time_interval.h" #include "testing/gtest/include/gtest/gtest.h" namespace em = enterprise_management;
diff --git a/chromeos/policy/weekly_time/weekly_time.cc b/ash/components/policy/weekly_time/weekly_time.cc similarity index 98% rename from chromeos/policy/weekly_time/weekly_time.cc rename to ash/components/policy/weekly_time/weekly_time.cc index a923143..40e038d 100644 --- a/chromeos/policy/weekly_time/weekly_time.cc +++ b/ash/components/policy/weekly_time/weekly_time.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 "chromeos/policy/weekly_time/weekly_time.h" +#include "ash/components/policy/weekly_time/weekly_time.h" #include <algorithm>
diff --git a/chromeos/policy/weekly_time/weekly_time.h b/ash/components/policy/weekly_time/weekly_time.h similarity index 94% rename from chromeos/policy/weekly_time/weekly_time.h rename to ash/components/policy/weekly_time/weekly_time.h index 5823ed5..fe6f185 100644 --- a/chromeos/policy/weekly_time/weekly_time.h +++ b/ash/components/policy/weekly_time/weekly_time.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 CHROMEOS_POLICY_WEEKLY_TIME_WEEKLY_TIME_H_ -#define CHROMEOS_POLICY_WEEKLY_TIME_WEEKLY_TIME_H_ +#ifndef ASH_COMPONENTS_POLICY_WEEKLY_TIME_WEEKLY_TIME_H_ +#define ASH_COMPONENTS_POLICY_WEEKLY_TIME_WEEKLY_TIME_H_ #include <memory> @@ -18,7 +18,7 @@ // WeeklyTime class contains day of week and time. Day of week is number from 1 // to 7 (1 = Monday, 2 = Tuesday, etc.) Time is in milliseconds from the // beginning of the day. -class COMPONENT_EXPORT(CHROMEOS_POLICY) WeeklyTime { +class COMPONENT_EXPORT(ASH_POLICY) WeeklyTime { public: // Dictionary value key constants for testing. static const char kDayOfWeek[]; @@ -118,10 +118,10 @@ }; // Constructs a WeeklyTime from an exploded base::Time. -COMPONENT_EXPORT(CHROMEOS_POLICY) +COMPONENT_EXPORT(ASH_POLICY) WeeklyTime GetWeeklyTimeFromExploded(const base::Time::Exploded& exploded, const absl::optional<int> timezone_offset); } // namespace policy -#endif // CHROMEOS_POLICY_WEEKLY_TIME_WEEKLY_TIME_H_ +#endif // ASH_COMPONENTS_POLICY_WEEKLY_TIME_WEEKLY_TIME_H_
diff --git a/chromeos/policy/weekly_time/weekly_time_interval.cc b/ash/components/policy/weekly_time/weekly_time_interval.cc similarity index 97% rename from chromeos/policy/weekly_time/weekly_time_interval.cc rename to ash/components/policy/weekly_time/weekly_time_interval.cc index ee95727..2184c2b 100644 --- a/chromeos/policy/weekly_time/weekly_time_interval.cc +++ b/ash/components/policy/weekly_time/weekly_time_interval.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 "chromeos/policy/weekly_time/weekly_time_interval.h" +#include "ash/components/policy/weekly_time/weekly_time_interval.h" #include "base/logging.h" #include "base/time/time.h"
diff --git a/chromeos/policy/weekly_time/weekly_time_interval.h b/ash/components/policy/weekly_time/weekly_time_interval.h similarity index 90% rename from chromeos/policy/weekly_time/weekly_time_interval.h rename to ash/components/policy/weekly_time/weekly_time_interval.h index 805c7ac..06a43cd 100644 --- a/chromeos/policy/weekly_time/weekly_time_interval.h +++ b/ash/components/policy/weekly_time/weekly_time_interval.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_POLICY_WEEKLY_TIME_WEEKLY_TIME_INTERVAL_H_ -#define CHROMEOS_POLICY_WEEKLY_TIME_WEEKLY_TIME_INTERVAL_H_ +#ifndef ASH_COMPONENTS_POLICY_WEEKLY_TIME_WEEKLY_TIME_INTERVAL_H_ +#define ASH_COMPONENTS_POLICY_WEEKLY_TIME_WEEKLY_TIME_INTERVAL_H_ #include <memory> +#include "ash/components/policy/weekly_time/weekly_time.h" #include "base/component_export.h" #include "base/values.h" -#include "chromeos/policy/weekly_time/weekly_time.h" #include "components/policy/proto/chrome_device_policy.pb.h" #include "third_party/abseil-cpp/absl/types/optional.h" @@ -19,7 +19,7 @@ // Interval can be wrapped across the end of the week. // Interval is empty if start = end. Empty intervals aren't allowed. // Both WeeklyTimes need to have the same timezone_offset. -class COMPONENT_EXPORT(CHROMEOS_POLICY) WeeklyTimeInterval { +class COMPONENT_EXPORT(ASH_POLICY) WeeklyTimeInterval { public: // Dictionary value key constants for testing. static const char kStart[]; @@ -89,4 +89,4 @@ } // namespace policy -#endif // CHROMEOS_POLICY_WEEKLY_TIME_WEEKLY_TIME_INTERVAL_H_ +#endif // ASH_COMPONENTS_POLICY_WEEKLY_TIME_WEEKLY_TIME_INTERVAL_H_
diff --git a/chromeos/policy/weekly_time/weekly_time_interval_unittest.cc b/ash/components/policy/weekly_time/weekly_time_interval_unittest.cc similarity index 98% rename from chromeos/policy/weekly_time/weekly_time_interval_unittest.cc rename to ash/components/policy/weekly_time/weekly_time_interval_unittest.cc index e737ea9..3851eaf 100644 --- a/chromeos/policy/weekly_time/weekly_time_interval_unittest.cc +++ b/ash/components/policy/weekly_time/weekly_time_interval_unittest.cc
@@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chromeos/policy/weekly_time/weekly_time_interval.h" +#include "ash/components/policy/weekly_time/weekly_time_interval.h" #include <tuple> #include <utility> +#include "ash/components/policy/weekly_time/weekly_time.h" #include "base/time/time.h" #include "base/values.h" -#include "chromeos/policy/weekly_time/weekly_time.h" #include "components/policy/proto/chrome_device_policy.pb.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chromeos/policy/weekly_time/weekly_time_unittest.cc b/ash/components/policy/weekly_time/weekly_time_unittest.cc similarity index 99% rename from chromeos/policy/weekly_time/weekly_time_unittest.cc rename to ash/components/policy/weekly_time/weekly_time_unittest.cc index 4f66854..cd9b9a3 100644 --- a/chromeos/policy/weekly_time/weekly_time_unittest.cc +++ b/ash/components/policy/weekly_time/weekly_time_unittest.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 "chromeos/policy/weekly_time/weekly_time.h" +#include "ash/components/policy/weekly_time/weekly_time.h" #include <memory> #include <tuple>
diff --git a/ash/components/settings/OWNERS b/ash/components/settings/OWNERS index 0731fe6..231be97 100644 --- a/ash/components/settings/OWNERS +++ b/ash/components/settings/OWNERS
@@ -1,4 +1,4 @@ -file://chromeos/policy/OWNERS +file://ash/components/policy/OWNERS # (in PST) stevenjb@chromium.org
diff --git a/ash/components/smbfs/smbfs_host.cc b/ash/components/smbfs/smbfs_host.cc index 9cea46c..236fa608 100644 --- a/ash/components/smbfs/smbfs_host.cc +++ b/ash/components/smbfs/smbfs_host.cc
@@ -81,7 +81,7 @@ SmbFsHost::Delegate::~Delegate() = default; SmbFsHost::SmbFsHost( - std::unique_ptr<chromeos::disks::MountPoint> mount_point, + std::unique_ptr<ash::disks::MountPoint> mount_point, Delegate* delegate, mojo::Remote<mojom::SmbFs> smbfs_remote, mojo::PendingReceiver<mojom::SmbFsDelegate> delegate_receiver)
diff --git a/ash/components/smbfs/smbfs_host.h b/ash/components/smbfs/smbfs_host.h index 901df85..0275ac57 100644 --- a/ash/components/smbfs/smbfs_host.h +++ b/ash/components/smbfs/smbfs_host.h
@@ -42,7 +42,7 @@ virtual void RequestCredentials(RequestCredentialsCallback callback) = 0; }; - SmbFsHost(std::unique_ptr<chromeos::disks::MountPoint> mount_point, + SmbFsHost(std::unique_ptr<ash::disks::MountPoint> mount_point, Delegate* delegate, mojo::Remote<mojom::SmbFs> smbfs_remote, mojo::PendingReceiver<mojom::SmbFsDelegate> delegate_receiver); @@ -85,7 +85,7 @@ void OnDeleteRecursivelyDone(DeleteRecursivelyCallback callback, smbfs::mojom::DeleteRecursivelyError error); - const std::unique_ptr<chromeos::disks::MountPoint> mount_point_; + const std::unique_ptr<ash::disks::MountPoint> mount_point_; Delegate* const delegate_; mojo::Remote<mojom::SmbFs> smbfs_;
diff --git a/ash/components/smbfs/smbfs_host_unittest.cc b/ash/components/smbfs/smbfs_host_unittest.cc index 957dfc0..06712a5 100644 --- a/ash/components/smbfs/smbfs_host_unittest.cc +++ b/ash/components/smbfs/smbfs_host_unittest.cc
@@ -43,7 +43,7 @@ base::test::TaskEnvironment task_environment_; MockDelegate mock_delegate_; - chromeos::disks::MockDiskMountManager mock_disk_mount_manager_; + ash::disks::MockDiskMountManager mock_disk_mount_manager_; mojo::Remote<mojom::SmbFs> smbfs_remote_; mojo::PendingReceiver<mojom::SmbFs> smbfs_pending_receiver_; @@ -59,8 +59,8 @@ .WillOnce(base::test::RunOnceCallback<1>(chromeos::MOUNT_ERROR_NONE)); std::unique_ptr<SmbFsHost> host = std::make_unique<SmbFsHost>( - std::make_unique<chromeos::disks::MountPoint>(base::FilePath(kMountPath), - &mock_disk_mount_manager_), + std::make_unique<ash::disks::MountPoint>(base::FilePath(kMountPath), + &mock_disk_mount_manager_), &mock_delegate_, std::move(smbfs_remote_), std::move(delegate_pending_receiver_)); delegate_remote_.reset(); @@ -76,8 +76,8 @@ .WillOnce(base::test::RunOnceCallback<1>(chromeos::MOUNT_ERROR_NONE)); std::unique_ptr<SmbFsHost> host = std::make_unique<SmbFsHost>( - std::make_unique<chromeos::disks::MountPoint>(base::FilePath(kMountPath), - &mock_disk_mount_manager_), + std::make_unique<ash::disks::MountPoint>(base::FilePath(kMountPath), + &mock_disk_mount_manager_), &mock_delegate_, std::move(smbfs_remote_), std::move(delegate_pending_receiver_)); smbfs_pending_receiver_.reset(); @@ -92,8 +92,8 @@ base::RunLoop run_loop; std::unique_ptr<SmbFsHost> host = std::make_unique<SmbFsHost>( - std::make_unique<chromeos::disks::MountPoint>(base::FilePath(kMountPath), - &mock_disk_mount_manager_), + std::make_unique<ash::disks::MountPoint>(base::FilePath(kMountPath), + &mock_disk_mount_manager_), &mock_delegate_, std::move(smbfs_remote_), std::move(delegate_pending_receiver_)); run_loop.RunUntilIdle(); @@ -105,8 +105,8 @@ .WillOnce(base::test::RunOnceCallback<1>(chromeos::MOUNT_ERROR_NONE)); std::unique_ptr<SmbFsHost> host = std::make_unique<SmbFsHost>( - std::make_unique<chromeos::disks::MountPoint>(base::FilePath(kMountPath), - &mock_disk_mount_manager_), + std::make_unique<ash::disks::MountPoint>(base::FilePath(kMountPath), + &mock_disk_mount_manager_), &mock_delegate_, std::move(smbfs_remote_), std::move(delegate_pending_receiver_)); EXPECT_CALL(mock_delegate_, RequestCredentials(_)) @@ -139,8 +139,8 @@ .WillOnce(base::test::RunOnceCallback<1>(chromeos::MOUNT_ERROR_NONE)); std::unique_ptr<SmbFsHost> host = std::make_unique<SmbFsHost>( - std::make_unique<chromeos::disks::MountPoint>(base::FilePath(kMountPath), - &mock_disk_mount_manager_), + std::make_unique<ash::disks::MountPoint>(base::FilePath(kMountPath), + &mock_disk_mount_manager_), &mock_delegate_, std::move(smbfs_remote_), std::move(delegate_pending_receiver_)); EXPECT_CALL(mock_delegate_, RequestCredentials(_))
diff --git a/ash/components/smbfs/smbfs_mounter.cc b/ash/components/smbfs/smbfs_mounter.cc index 31eafbe..fa3f1406 100644 --- a/ash/components/smbfs/smbfs_mounter.cc +++ b/ash/components/smbfs/smbfs_mounter.cc
@@ -35,12 +35,11 @@ SmbFsMounter::MountOptions::~MountOptions() = default; -SmbFsMounter::SmbFsMounter( - const std::string& share_path, - const std::string& mount_dir_name, - const MountOptions& options, - SmbFsHost::Delegate* delegate, - chromeos::disks::DiskMountManager* disk_mount_manager) +SmbFsMounter::SmbFsMounter(const std::string& share_path, + const std::string& mount_dir_name, + const MountOptions& options, + SmbFsHost::Delegate* delegate, + ash::disks::DiskMountManager* disk_mount_manager) : SmbFsMounter(share_path, mount_dir_name, options, @@ -48,13 +47,12 @@ disk_mount_manager, {}) {} -SmbFsMounter::SmbFsMounter( - const std::string& share_path, - const std::string& mount_dir_name, - const MountOptions& options, - SmbFsHost::Delegate* delegate, - chromeos::disks::DiskMountManager* disk_mount_manager, - mojo::Remote<mojom::SmbFsBootstrap> bootstrap) +SmbFsMounter::SmbFsMounter(const std::string& share_path, + const std::string& mount_dir_name, + const MountOptions& options, + SmbFsHost::Delegate* delegate, + ash::disks::DiskMountManager* disk_mount_manager, + mojo::Remote<mojom::SmbFsBootstrap> bootstrap) : share_path_(share_path), mount_dir_name_(mount_dir_name), options_(options), @@ -98,7 +96,7 @@ bootstrap_.set_disconnect_handler( base::BindOnce(&SmbFsMounter::OnMojoDisconnect, base::Unretained(this))); - chromeos::disks::MountPoint::Mount( + ash::disks::MountPoint::Mount( disk_mount_manager_, mount_url_, "" /* source_format */, mount_dir_name_, {} /* mount_options */, chromeos::MOUNT_TYPE_NETWORK_STORAGE, chromeos::MOUNT_ACCESS_MODE_READ_WRITE, @@ -110,7 +108,7 @@ void SmbFsMounter::OnMountDone( chromeos::MountError error_code, - std::unique_ptr<chromeos::disks::MountPoint> mount_point) { + std::unique_ptr<ash::disks::MountPoint> mount_point) { if (!callback_) { // This can happen if the mount timeout expires and the callback is already // run with a timeout error.
diff --git a/ash/components/smbfs/smbfs_mounter.h b/ash/components/smbfs/smbfs_mounter.h index 2e15f3b..d8943823 100644 --- a/ash/components/smbfs/smbfs_mounter.h +++ b/ash/components/smbfs/smbfs_mounter.h
@@ -76,7 +76,7 @@ const std::string& mount_dir_name, const MountOptions& options, SmbFsHost::Delegate* delegate, - chromeos::disks::DiskMountManager* disk_mount_manager); + ash::disks::DiskMountManager* disk_mount_manager); SmbFsMounter(const SmbFsMounter&) = delete; SmbFsMounter& operator=(const SmbFsMounter&) = delete; @@ -95,13 +95,13 @@ const std::string& mount_dir_name, const MountOptions& options, SmbFsHost::Delegate* delegate, - chromeos::disks::DiskMountManager* disk_mount_manager, + ash::disks::DiskMountManager* disk_mount_manager, mojo::Remote<mojom::SmbFsBootstrap> bootstrap); private: // Callback for MountPoint::Mount(). void OnMountDone(chromeos::MountError error_code, - std::unique_ptr<chromeos::disks::MountPoint> mount_point); + std::unique_ptr<ash::disks::MountPoint> mount_point); // Callback for receiving a Mojo bootstrap channel. void OnIpcChannel(base::ScopedFD mojo_fd); @@ -125,7 +125,7 @@ const std::string mount_dir_name_; const MountOptions options_; SmbFsHost::Delegate* const delegate_; - chromeos::disks::DiskMountManager* const disk_mount_manager_; + ash::disks::DiskMountManager* const disk_mount_manager_; const base::UnguessableToken token_; const std::string mount_url_; bool mojo_fd_pending_ = false; @@ -133,7 +133,7 @@ base::OneShotTimer mount_timer_; DoneCallback callback_; - std::unique_ptr<chromeos::disks::MountPoint> mount_point_; + std::unique_ptr<ash::disks::MountPoint> mount_point_; mojo::OutgoingInvitation bootstrap_invitation_; mojo::Remote<mojom::SmbFsBootstrap> bootstrap_;
diff --git a/ash/components/smbfs/smbfs_mounter_unittest.cc b/ash/components/smbfs/smbfs_mounter_unittest.cc index d820612..d0dab99 100644 --- a/ash/components/smbfs/smbfs_mounter_unittest.cc +++ b/ash/components/smbfs/smbfs_mounter_unittest.cc
@@ -49,12 +49,12 @@ constexpr char kKerberosIdentity[] = "my-kerberos-identity"; constexpr char kAccountHash[] = "00112233445566778899aabb"; -chromeos::disks::DiskMountManager::MountPointInfo MakeMountPointInfo( +ash::disks::DiskMountManager::MountPointInfo MakeMountPointInfo( const std::string& source_path, const std::string& mount_path) { - return chromeos::disks::DiskMountManager::MountPointInfo( + return ash::disks::DiskMountManager::MountPointInfo( source_path, mount_path, chromeos::MOUNT_TYPE_NETWORK_STORAGE, - chromeos::disks::MOUNT_CONDITION_NONE); + ash::disks::MOUNT_CONDITION_NONE); } class MockDelegate : public SmbFsHost::Delegate { @@ -108,7 +108,7 @@ .WillOnce(WithArgs<0, 6>( [mount_error, mount_path]( const std::string& source_path, - chromeos::disks::DiskMountManager::MountPathCallback callback) { + ash::disks::DiskMountManager::MountPathCallback callback) { base::SequencedTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::BindOnce( @@ -125,7 +125,7 @@ } private: - chromeos::disks::MockDiskMountManager mock_disk_mount_manager_; + ash::disks::MockDiskMountManager mock_disk_mount_manager_; }; class SmbFsMounterTest : public testing::Test { @@ -134,7 +134,7 @@ const std::string& source_path, const std::string& mount_path, chromeos::MountError mount_error, - chromeos::disks::DiskMountManager::MountPathCallback callback) { + ash::disks::DiskMountManager::MountPathCallback callback) { base::SequencedTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::BindOnce(std::move(callback), mount_error, MakeMountPointInfo(source_path, mount_path))); @@ -145,7 +145,7 @@ base::test::TaskEnvironment::TimeSource::MOCK_TIME}; MockDelegate mock_delegate_; - chromeos::disks::MockDiskMountManager mock_disk_mount_manager_; + ash::disks::MockDiskMountManager mock_disk_mount_manager_; }; TEST_F(SmbFsMounterTest, FilesystemMountTimeout) { @@ -193,9 +193,8 @@ EXPECT_CALL(mock_disk_mount_manager_, MountPath(StartsWith(kMountUrlPrefix), _, kMountDir, _, _, _, _)) .WillOnce(WithArgs<0, 6>( - [this]( - const std::string& source_path, - chromeos::disks::DiskMountManager::MountPathCallback callback) { + [this](const std::string& source_path, + ash::disks::DiskMountManager::MountPathCallback callback) { PostMountEvent(source_path, kMountPath, chromeos::MOUNT_ERROR_INTERNAL, std::move(callback)); })); @@ -222,9 +221,8 @@ EXPECT_CALL(mock_disk_mount_manager_, MountPath(StartsWith(kMountUrlPrefix), _, kMountDir, _, _, _, _)) .WillOnce(WithArgs<0, 6>( - [this]( - const std::string& source_path, - chromeos::disks::DiskMountManager::MountPathCallback callback) { + [this](const std::string& source_path, + ash::disks::DiskMountManager::MountPathCallback callback) { PostMountEvent(source_path, kMountPath, chromeos::MOUNT_ERROR_NONE, std::move(callback)); })); @@ -256,9 +254,8 @@ EXPECT_CALL(mock_disk_mount_manager_, MountPath(StartsWith(kMountUrlPrefix), _, kMountDir, _, _, _, _)) .WillOnce(WithArgs<0, 6>( - [this]( - const std::string& source_path, - chromeos::disks::DiskMountManager::MountPathCallback callback) { + [this](const std::string& source_path, + ash::disks::DiskMountManager::MountPathCallback callback) { // This posts a mount event to the task queue, which will not be run // until |run_loop| is started. PostMountEvent(source_path, kMountPath, @@ -563,7 +560,7 @@ void PostMountEvent( const std::string& source_path, const std::string& mount_path, - chromeos::disks::DiskMountManager::MountPathCallback callback) { + ash::disks::DiskMountManager::MountPathCallback callback) { base::SequencedTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::BindOnce(std::move(callback), chromeos::MOUNT_ERROR_NONE, @@ -576,7 +573,7 @@ base::test::TaskEnvironment task_environment_; MockDelegate mock_delegate_; - chromeos::disks::MockDiskMountManager mock_disk_mount_manager_; + ash::disks::MockDiskMountManager mock_disk_mount_manager_; }; // Child process that emulates the behaviour of smbfs. @@ -657,10 +654,11 @@ EXPECT_CALL(mock_disk_mount_manager_, MountPath(StartsWith(kMountUrlPrefix), _, kMountDir, _, _, _, _)) - .WillOnce(WithArgs<0, 6>([this, &channel]( - const std::string& source_path, - chromeos::disks::DiskMountManager:: - MountPathCallback callback) { + .WillOnce(WithArgs<0, + 6>([this, &channel]( + const std::string& source_path, + ash::disks::DiskMountManager::MountPathCallback + callback) { // Emulates cros-disks mount success. PostMountEvent(source_path, kMountPath, std::move(callback));
diff --git a/ash/constants/ash_features.cc b/ash/constants/ash_features.cc index ab0e792..c3c0daf 100644 --- a/ash/constants/ash_features.cc +++ b/ash/constants/ash_features.cc
@@ -702,7 +702,7 @@ // content and transfer or access it later. const base::Feature kHoldingSpaceInProgressDownloadsNotificationSuppression{ "HoldingSpaceInProgressNotificationSuppression", - base::FEATURE_ENABLED_BY_DEFAULT}; + base::FEATURE_DISABLED_BY_DEFAULT}; // Enables incognito profile integration with the productivity feature that // aims to reduce context switching by enabling users to collect content and
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_sq.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_sq.xtb index b9a85af6..52f4083 100644 --- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_sq.xtb +++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_sq.xtb
@@ -17,6 +17,7 @@ <translation id="1516966594427080024">Hap një dritare të re në modalitetin "e fshehtë"</translation> <translation id="152892567002884378">Rrit volumin</translation> <translation id="1560480564179555003"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, më pas <ph name="ESC" /></translation> +<translation id="1586324912145647027">Shko te tavolina e punës nga 1 deri në 8</translation> <translation id="1652741121070700329">Lëviz në fillim të fjalës së mëparshme</translation> <translation id="1679841710523778799">Aktivizo ndriçimin</translation> <translation id="168356808214100546">Shtyp dhe mbaj shtypur <ph name="ALT" />, trokit <ph name="TAB" /> derisa të arrish te dritarja që dëshiron të hapësh, më pas lëshoje.</translation> @@ -129,6 +130,7 @@ <translation id="5563050856984839829">Shtyp <ph name="CTRL" /><ph name="SEPARATOR" /><ph name="SHIFT" /> dhe kliko një lidhje</translation> <translation id="561814908794220892">Hap faqen e uebit në një skedë të re</translation> <translation id="5620219513321115856">Zhvendos dritaren aktive në tavolinën e punës në të djathtë</translation> +<translation id="5699366815052349604">Cakto dritaren aktive për të gjitha tavolinat e punës</translation> <translation id="5710621673935162997"><ph name="CTRL" /><ph name="SEPARATOR1" /><ph name="L" /> ose <ph name="ALT" /><ph name="SEPARATOR2" /><ph name="D" /></translation> <translation id="5757111373163288447">Hap lidhjen në skedë</translation> <translation id="5757474750054631686">Errëso tastierën (vetëm për tastierat me sfond të ndriçuar)</translation>
diff --git a/ash/strings/ash_strings_af.xtb b/ash/strings/ash_strings_af.xtb index ff245ec5..71dca66 100644 --- a/ash/strings/ash_strings_af.xtb +++ b/ash/strings/ash_strings_af.xtb
@@ -1018,6 +1018,7 @@ <translation id="7868900307798234037">Ontsluit met vingerafdruk</translation> <translation id="7872786842639831132">Af</translation> <translation id="7875575368831396199">Dit lyk of Bluetooth op jou <ph name="DEVICE_TYPE" /> afgeskakel is. Skakel asseblief Bluetooth aan om Foonsentrum te gebruik.</translation> +<translation id="7877557217297072640">{0,plural, =0{Verander toestel nou na vorige weergawe}=1{Verander toestel binne 1 sekonde na vorige weergawe}other{Verander toestel binne # sekondes na vorige weergawe}}</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>
diff --git a/ash/strings/ash_strings_be.xtb b/ash/strings/ash_strings_be.xtb index ec25424..95759c6 100644 --- a/ash/strings/ash_strings_be.xtb +++ b/ash/strings/ash_strings_be.xtb
@@ -248,6 +248,7 @@ <translation id="2653019840645008922">Здыманне акна</translation> <translation id="2653659639078652383">Адправіць</translation> <translation id="2658778018866295321">Націснуць і перацягнуць</translation> +<translation id="2665788051462227163">На гэтай прыладзе няма праграм "<ph name="UNAVAILABLE_APPS_ONE" />" і "<ph name="UNAVAILABLE_APPS_TWO" />".</translation> <translation id="2678852583403169292">Меню функцыі "Чытаць уголас"</translation> <translation id="2689613560355655046">Працоўны стол 8</translation> <translation id="2700493154570097719">Наладзьце клавіятуру</translation> @@ -419,6 +420,7 @@ <translation id="3708186454126126312">Падключаныя раней прылады</translation> <translation id="371370241367527062">Пярэдні мікрафон</translation> <translation id="3713734891607377840">Адкрыць пасля завяршэння</translation> +<translation id="3726171378575546917">На гэтай прыладзе няма праграм "<ph name="UNAVAILABLE_APPS_ONE" />", "<ph name="UNAVAILABLE_APPS_TWO" />" і яшчэ <ph name="UNAVAILABLE_APPS_COUNT" />.</translation> <translation id="3742055079367172538">Здымак экрана зроблены</translation> <translation id="3744282433224562605">Каб разблакіраваць Chromebook, увядзіце пароль</translation> <translation id="3771549900096082774">Рэжым высокай кантраснасці</translation> @@ -604,6 +606,7 @@ <translation id="4925542575807923399">Адміністратар гэтага ўліковага запісу патрабуе, каб у сеансе з уваходам у некалькі ўліковых запісаў гэты ўліковы запіс быў першым.</translation> <translation id="4945196315133970626">Выключыць апавяшчэнні</translation> <translation id="4946376291507881335">Зняць</translation> +<translation id="4947229553198882488">На гэтай прыладзе няма праграмы "<ph name="UNAVAILABLE_APPS" />".</translation> <translation id="495046168593986294">Прагартаць уверх</translation> <translation id="4952936045814352993">Функцыя "Знайсці тэлефон" недаступная, бо вы адключылі гукі будзільніка</translation> <translation id="4960324571663582548"><ph name="MANAGER" /> патрабуе, каб выканалі адкат на прыладзе <ph name="DEVICE_TYPE" />. Налады прылады будуць скінуты, а ўсе даныя выдалены.</translation>
diff --git a/ash/strings/ash_strings_bs.xtb b/ash/strings/ash_strings_bs.xtb index cc6baff1..5e32d12 100644 --- a/ash/strings/ash_strings_bs.xtb +++ b/ash/strings/ash_strings_bs.xtb
@@ -1017,6 +1017,7 @@ <translation id="7868900307798234037">Otključavanje otiskom prsta</translation> <translation id="7872786842639831132">Isključeno</translation> <translation id="7875575368831396199">Izgleda da je Bluetooth isključen na vašem uređaju <ph name="DEVICE_TYPE" />. Uključite Bluetooth da koristite Phone Hub.</translation> +<translation id="7877557217297072640">{0,plural, =0{Odmah vratite uređaj na prethodnu verziju}=1{Vratite uređaj na prethodnu verziju u roku od 1 s}one{Vratite uređaj na prethodnu verziju u roku od # s}few{Vratite uređaj na prethodnu verziju u roku od # s}other{Vratite uređaj na prethodnu verziju u roku od # s}}</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>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb index 88b8202..d30af09a 100644 --- a/ash/strings/ash_strings_cs.xtb +++ b/ash/strings/ash_strings_cs.xtb
@@ -1017,6 +1017,7 @@ <translation id="7868900307798234037">Odemknutí otiskem prstu</translation> <translation id="7872786842639831132">Vyp</translation> <translation id="7875575368831396199">Na zařízení <ph name="DEVICE_TYPE" /> je pravděpodobně vypnuté rozhraní Bluetooth. Pokud chcete používat Telefonní centrum, zapněte Bluetooth.</translation> +<translation id="7877557217297072640">{0,plural, =0{Převeďte zařízení na předchozí verzi}=1{Do 1 sekundy zařízení převeďte na předchozí verzi}few{Do # sekund zařízení převeďte na předchozí verzi}many{Do # sekundy zařízení převeďte na předchozí verzi}other{Do # sekund zařízení převeďte na předchozí verzi}}</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>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb index 764e9bd0..1a404f9 100644 --- a/ash/strings/ash_strings_es-419.xtb +++ b/ash/strings/ash_strings_es-419.xtb
@@ -248,6 +248,7 @@ <translation id="2653019840645008922">Captura de ventana</translation> <translation id="2653659639078652383">Enviar</translation> <translation id="2658778018866295321">Hacer clic y arrastrar</translation> +<translation id="2665788051462227163"><ph name="UNAVAILABLE_APPS_ONE" /> y <ph name="UNAVAILABLE_APPS_TWO" /> no están disponibles en este dispositivo.</translation> <translation id="2678852583403169292">Menú de Seleccionar para pronunciar</translation> <translation id="2689613560355655046">Escritorio 8</translation> <translation id="2700493154570097719">Establecer el teclado</translation> @@ -419,6 +420,7 @@ <translation id="3708186454126126312">Conectados anteriormente</translation> <translation id="371370241367527062">Micrófono delantero</translation> <translation id="3713734891607377840">Abrir cuando se complete la descarga</translation> +<translation id="3726171378575546917"><ph name="UNAVAILABLE_APPS_ONE" />, <ph name="UNAVAILABLE_APPS_TWO" /> y<ph name="UNAVAILABLE_APPS_COUNT" /> más no están disponibles en este dispositivo.</translation> <translation id="3742055079367172538">Captura de pantalla tomada</translation> <translation id="3744282433224562605">Para desbloquear la Chromebook, ingresa la contraseña</translation> <translation id="3771549900096082774">Modo de contraste alto</translation> @@ -605,6 +607,7 @@ <translation id="4925542575807923399">El administrador de esta cuenta requiere que sea la primera a la que se acceda al crear una sesión de acceso múltiple.</translation> <translation id="4945196315133970626">Desactivar las notificaciones</translation> <translation id="4946376291507881335">Captura</translation> +<translation id="4947229553198882488"><ph name="UNAVAILABLE_APPS" /> no está disponible en este dispositivo.</translation> <translation id="495046168593986294">Desplazar hacia arriba</translation> <translation id="4952936045814352993">La opción Ubicar teléfono no está disponible cuando se inhabilitan los sonidos de las alarmas</translation> <translation id="4960324571663582548"><ph name="MANAGER" /> requiere que reviertas tu <ph name="DEVICE_TYPE" />. Se restablecerá tu dispositivo y se borrarán todos los datos.</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb index 73afa16..323ef30 100644 --- a/ash/strings/ash_strings_fi.xtb +++ b/ash/strings/ash_strings_fi.xtb
@@ -248,6 +248,7 @@ <translation id="2653019840645008922">Ikkunan tallennus</translation> <translation id="2653659639078652383">Lähetä</translation> <translation id="2658778018866295321">Klikkaa ja vedä</translation> +<translation id="2665788051462227163"><ph name="UNAVAILABLE_APPS_ONE" /> ja <ph name="UNAVAILABLE_APPS_TWO" /> puuttuvat laitteelta.</translation> <translation id="2678852583403169292">Teksti puhuttuna ‑valikko</translation> <translation id="2689613560355655046">Työpöytä 8</translation> <translation id="2700493154570097719">Määritä näppäimistö</translation> @@ -419,6 +420,7 @@ <translation id="3708186454126126312">Aiemmin yhdistetyt</translation> <translation id="371370241367527062">Etumikrofoni</translation> <translation id="3713734891607377840">Avaa kun valmis</translation> +<translation id="3726171378575546917"><ph name="UNAVAILABLE_APPS_ONE" />, <ph name="UNAVAILABLE_APPS_TWO" /> ja <ph name="UNAVAILABLE_APPS_COUNT" /> muuta puuttuvat laitteelta.</translation> <translation id="3742055079367172538">Kuvakaappaus otettu</translation> <translation id="3744282433224562605">Avaa Chromebookin lukitus lisäämällä salasana</translation> <translation id="3771549900096082774">Suuri kontrasti ‑tila</translation> @@ -604,6 +606,7 @@ <translation id="4925542575807923399">Tämän tilin järjestelmänvalvoja edellyttää, että tämä tili on ensimmäinen sisään kirjautuva tili useiden tilien istunnossa.</translation> <translation id="4945196315133970626">Laita ilmoitukset pois päältä</translation> <translation id="4946376291507881335">Kuvakaappaus</translation> +<translation id="4947229553198882488"><ph name="UNAVAILABLE_APPS" /> puuttuu laitteelta.</translation> <translation id="495046168593986294">Vieritä ylös</translation> <translation id="4952936045814352993">Paikanna puhelin ei ole käytettävissä, kun hälytysäänet on poistettu käytöstä</translation> <translation id="4960324571663582548"><ph name="MANAGER" /> edellyttää, että <ph name="DEVICE_TYPE" /> päivitetään aiempaan versioon. Laitteen tehdasasetukset palautetaan ja kaikki data poistetaan.</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb index 4869e684..13a1e00b6 100644 --- a/ash/strings/ash_strings_fr.xtb +++ b/ash/strings/ash_strings_fr.xtb
@@ -248,6 +248,7 @@ <translation id="2653019840645008922">Capture de fenêtre</translation> <translation id="2653659639078652383">Envoyer</translation> <translation id="2658778018866295321">Cliquer et faire glisser</translation> +<translation id="2665788051462227163"><ph name="UNAVAILABLE_APPS_ONE" /> et <ph name="UNAVAILABLE_APPS_TWO" /> ne sont pas sur cet appareil.</translation> <translation id="2678852583403169292">Menu Sélectionner pour prononcer</translation> <translation id="2689613560355655046">Bureau 8</translation> <translation id="2700493154570097719">Définir votre clavier</translation> @@ -419,6 +420,7 @@ <translation id="3708186454126126312">Connectés précédemment</translation> <translation id="371370241367527062">Micro avant</translation> <translation id="3713734891607377840">Ouvrir une fois terminé</translation> +<translation id="3726171378575546917"><ph name="UNAVAILABLE_APPS_ONE" />, <ph name="UNAVAILABLE_APPS_TWO" /> et <ph name="UNAVAILABLE_APPS_COUNT" /> autres applis ne sont pas sur cet appareil.</translation> <translation id="3742055079367172538">Capture d'écran réalisée</translation> <translation id="3744282433224562605">Pour déverrouiller votre Chromebook, saisissez le mot de passe</translation> <translation id="3771549900096082774">Mode Contraste élevé</translation> @@ -604,6 +606,7 @@ <translation id="4925542575807923399">L'administrateur de ce compte a configuré ce dernier de sorte qu'il soit le premier compte à être connecté lors de sessions de connexion multicompte.</translation> <translation id="4945196315133970626">Désactiver les notifications</translation> <translation id="4946376291507881335">Capturer</translation> +<translation id="4947229553198882488"><ph name="UNAVAILABLE_APPS" /> n'est pas sur cet appareil.</translation> <translation id="495046168593986294">Faire défiler vers le haut</translation> <translation id="4952936045814352993">Impossible de localiser le téléphone lorsque les sons de l'alarme sont désactivés</translation> <translation id="4960324571663582548"><ph name="MANAGER" /> exige un rollback de votre <ph name="DEVICE_TYPE" />. Cela entraînera la réinitialisation de votre appareil et la suppression de toutes vos données.</translation>
diff --git a/ash/strings/ash_strings_gl.xtb b/ash/strings/ash_strings_gl.xtb index 3d48635..106ff4f5 100644 --- a/ash/strings/ash_strings_gl.xtb +++ b/ash/strings/ash_strings_gl.xtb
@@ -248,6 +248,7 @@ <translation id="2653019840645008922">Captura de ventá</translation> <translation id="2653659639078652383">Enviar</translation> <translation id="2658778018866295321">Facer clic e arrastrar</translation> +<translation id="2665788051462227163"><ph name="UNAVAILABLE_APPS_ONE" /> e <ph name="UNAVAILABLE_APPS_TWO" /> non están neste dispositivo.</translation> <translation id="2678852583403169292">Menú da función Escoitar selección</translation> <translation id="2689613560355655046">Escritorio 8</translation> <translation id="2700493154570097719">Definir teclado</translation> @@ -419,6 +420,7 @@ <translation id="3708186454126126312">Dispositivos conectados previamente</translation> <translation id="371370241367527062">Micrófono frontal</translation> <translation id="3713734891607377840">Abrir ao finalizar</translation> +<translation id="3726171378575546917"><ph name="UNAVAILABLE_APPS_ONE" />, <ph name="UNAVAILABLE_APPS_TWO" /> e <ph name="UNAVAILABLE_APPS_COUNT" /> aplicacións máis non están neste dispositivo.</translation> <translation id="3742055079367172538">Captura de pantalla feita</translation> <translation id="3744282433224562605">Para desbloquear o Chromebook, mete o contrasinal</translation> <translation id="3771549900096082774">Modo de alto contraste</translation> @@ -605,6 +607,7 @@ <translation id="4925542575807923399">O administrador desta conta require que esta conta sexa a primeira na que se inicie sesión cando se cree unha sesión de inicio de sesión múltiple.</translation> <translation id="4945196315133970626">Desactivar notificacións</translation> <translation id="4946376291507881335">Zona que se capturará</translation> +<translation id="4947229553198882488"><ph name="UNAVAILABLE_APPS" /> non está neste dispositivo.</translation> <translation id="495046168593986294">Desprazarse cara arriba</translation> <translation id="4952936045814352993">A función Localizar teléfono non está dispoñible se están desactivados os sons das alarmas</translation> <translation id="4960324571663582548"><ph name="MANAGER" /> require que cambies o teu dispositivo (<ph name="DEVICE_TYPE" />) a unha versión anterior. O dispositivo restablecerase e eliminaranse todos os datos.</translation>
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb index b471fccf..2973604 100644 --- a/ash/strings/ash_strings_gu.xtb +++ b/ash/strings/ash_strings_gu.xtb
@@ -793,7 +793,7 @@ <translation id="6284232397434400372">રિઝોલ્યુશન બદલાયું</translation> <translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" />ને પછીથી માતાપિતાની પરવાનગી સાથે ઉમેરી શકાય છે.</translation> <translation id="6291221004442998378">ચાર્જ થઈ રહ્યું નથી</translation> -<translation id="6315170314923504164">Voice</translation> +<translation id="6315170314923504164">અવાજ</translation> <translation id="6330012934079202188">બધી ડેસ્ક પરથી વિન્ડો બતાવી રહ્યાં છીએ, વર્તમાન ડેસ્ક પરની વિન્ડો બતાવવા માટે ઉપરની ઍરો કી દબાવો</translation> <translation id="6338485349199627913">મેનેજ કરાયેલું સત્ર <ph name="DISPLAY_NAME" />ને <ph name="MANAGER" /> દ્વારા મેનેજ કરવામાં આવે છે</translation> <translation id="6344138931392227467"><ph name="DEVICE_NAME" /> કનેક્ટ થયું</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb index 9d7abe0..b14abf8 100644 --- a/ash/strings/ash_strings_hr.xtb +++ b/ash/strings/ash_strings_hr.xtb
@@ -1017,6 +1017,7 @@ <translation id="7868900307798234037">Otključavanje otiskom prsta</translation> <translation id="7872786842639831132">Isključeno</translation> <translation id="7875575368831396199">Čini se da je na vašem uređaju <ph name="DEVICE_TYPE" /> isključen Bluetooth. Da biste mogli upotrebljavati Phone hub, uključite Bluetooth.</translation> +<translation id="7877557217297072640">{0,plural, =0{Odmah vratite uređaj na prethodnu verziju}=1{Vratite uređaj na prethodnu verziju u roku od 1 s}one{Vratite uređaj na prethodnu verziju u roku od # s}few{Vratite uređaj na prethodnu verziju u roku od # s}other{Vratite uređaj na prethodnu verziju u roku od # s}}</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>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb index 12c8aeb8..d18586e 100644 --- a/ash/strings/ash_strings_hu.xtb +++ b/ash/strings/ash_strings_hu.xtb
@@ -1018,6 +1018,7 @@ <translation id="7868900307798234037">Feloldás ujjlenyomattal</translation> <translation id="7872786842639831132">Ki</translation> <translation id="7875575368831396199">Úgy tűnik, ki van kapcsolva a Bluetooth a(z) <ph name="DEVICE_TYPE" /> eszközön. Kapcsolja be a Bluetootht a Telefonközpont használatához.</translation> +<translation id="7877557217297072640">{0,plural, =0{Eszköz módosítása az előző verzióra}=1{Eszköz módosítása az előző verzióra 1 másodpercen belül}other{Eszköz módosítása az előző verzióra # másodpercen belül}}</translation> <translation id="7886169021410746335">Adatvédelmi beállítások módosítása</translation> <translation id="7886277072580235377">Kijelentkezés után az internetes munkamenet törlődik. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">E-mail küldése</translation>
diff --git a/ash/strings/ash_strings_is.xtb b/ash/strings/ash_strings_is.xtb index a0826023..0e1c3e422 100644 --- a/ash/strings/ash_strings_is.xtb +++ b/ash/strings/ash_strings_is.xtb
@@ -248,6 +248,7 @@ <translation id="2653019840645008922">Myndataka glugga</translation> <translation id="2653659639078652383">Senda</translation> <translation id="2658778018866295321">Smella og draga</translation> +<translation id="2665788051462227163"><ph name="UNAVAILABLE_APPS_ONE" /> og <ph name="UNAVAILABLE_APPS_TWO" /> eru ekki í þessu tæki.</translation> <translation id="2678852583403169292">Valmynd textaupplesturs</translation> <translation id="2689613560355655046">Skrifborð 8</translation> <translation id="2700493154570097719">Veldu lyklaborð</translation> @@ -419,6 +420,7 @@ <translation id="3708186454126126312">Áður tengt</translation> <translation id="371370241367527062">Fremri hljóðnemi</translation> <translation id="3713734891607377840">Opna þegar niðurhali lýkur</translation> +<translation id="3726171378575546917"><ph name="UNAVAILABLE_APPS_ONE" />, <ph name="UNAVAILABLE_APPS_TWO" /> og <ph name="UNAVAILABLE_APPS_COUNT" /> í viðbót eru ekki í þessu tæki.</translation> <translation id="3742055079367172538">Skjámynd tekin</translation> <translation id="3744282433224562605">Sláðu inn aðgangsorð til að taka Chromebook úr lás</translation> <translation id="3771549900096082774">Mikil birtuskil</translation> @@ -604,6 +606,7 @@ <translation id="4925542575807923399">Stjórnandi þessa reiknings krefst þess að reikningurinn sé fyrsti innskráði reikningurinn í lotu fyrir margar innskráningar.</translation> <translation id="4945196315133970626">Slökkva á tilkynningum</translation> <translation id="4946376291507881335">Taka mynd</translation> +<translation id="4947229553198882488"><ph name="UNAVAILABLE_APPS" /> er ekki í þessu tæki.</translation> <translation id="495046168593986294">Fletta upp</translation> <translation id="4952936045814352993">„Staðsetja síma“ er ekki í boði þegar slökkt er á vekjarahljóðum</translation> <translation id="4960324571663582548"><ph name="MANAGER" /> krefst þess að þú niðurfærir útgáfu <ph name="DEVICE_TYPE" />. Tækið verður endurstillt og öllum gögnum verður eytt.</translation>
diff --git a/ash/strings/ash_strings_it.xtb b/ash/strings/ash_strings_it.xtb index 20ca5bbb..ff4d64e 100644 --- a/ash/strings/ash_strings_it.xtb +++ b/ash/strings/ash_strings_it.xtb
@@ -331,7 +331,7 @@ <translation id="3217205077783620295">Il volume è attivo. Selezionalo per disattivarlo.</translation> <translation id="3226991577105957773">+ altre <ph name="COUNT" /></translation> <translation id="3227137524299004712">Microfono</translation> -<translation id="324366796737464147">Eliminazione del rumore</translation> +<translation id="324366796737464147">Cancellazione del rumore</translation> <translation id="3249513730522716925">La finestra <ph name="WINDOW_TITLE" /> è stata spostata dalla scrivania <ph name="ACTIVE_DESK" /> alla scrivania <ph name="TARGET_DESK" /></translation> <translation id="3252248118006571685">Per sbloccare Chromebook, attiva il Bluetooth del telefono</translation> <translation id="3255483164551725916">Cosa sai fare?</translation> @@ -1018,6 +1018,7 @@ <translation id="7868900307798234037">Sblocco con l'impronta in corso</translation> <translation id="7872786842639831132">Off</translation> <translation id="7875575368831396199">Sembra che il Bluetooth sia disattivato su <ph name="DEVICE_TYPE" />. Attiva il Bluetooth per utilizzare Phone Hub.</translation> +<translation id="7877557217297072640">{0,plural, =0{Ripristina la versione precedente del dispositivo ora}=1{Ripristina la versione precedente del dispositivo entro 1 secondo}one{Ripristina la versione precedente del dispositivo entro # secondo}other{Ripristina la versione precedente del dispositivo entro # secondi}}</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>
diff --git a/ash/strings/ash_strings_ka.xtb b/ash/strings/ash_strings_ka.xtb index d5995a3f..80bdcb3 100644 --- a/ash/strings/ash_strings_ka.xtb +++ b/ash/strings/ash_strings_ka.xtb
@@ -248,6 +248,7 @@ <translation id="2653019840645008922">ფანჯრის აღბეჭდვა</translation> <translation id="2653659639078652383">გაგზავნა</translation> <translation id="2658778018866295321">დაწკაპუნება და ჩავლებით გადატანა</translation> +<translation id="2665788051462227163"><ph name="UNAVAILABLE_APPS_ONE" /> და <ph name="UNAVAILABLE_APPS_TWO" /> არ არის ამ მოწყობილობაზე.</translation> <translation id="2678852583403169292">წარმოსათქმელად მონიშვნის მენიუ</translation> <translation id="2689613560355655046">სამუშაო მაგიდა 8</translation> <translation id="2700493154570097719">დააყენეთ კლავიატურა</translation> @@ -419,6 +420,7 @@ <translation id="3708186454126126312">ადრე დაკავშირებული</translation> <translation id="371370241367527062">წინა მიკროფონი</translation> <translation id="3713734891607377840">დასრულებისას გახსნა</translation> +<translation id="3726171378575546917"><ph name="UNAVAILABLE_APPS_ONE" />, <ph name="UNAVAILABLE_APPS_TWO" /> და <ph name="UNAVAILABLE_APPS_COUNT" /> სხვა აპი არ არის ამ მოწყობილობაზე.</translation> <translation id="3742055079367172538">ეკრანის ანაბეჭდი გადაღებულია</translation> <translation id="3744282433224562605">თქვენი Chromebook-ის განსაბლოკად შეიყვანეთ პაროლი</translation> <translation id="3771549900096082774">მაღალკონტრასტული რეჟიმი</translation> @@ -604,6 +606,7 @@ <translation id="4925542575807923399">ამ ანგარიშის ადმინისტრატორს მოეთხოვება რომ ეს ანგარიში იყოს მრავალჯერადი შესვლის სესიის პირველი ანგარიში.</translation> <translation id="4945196315133970626">შეტყობინებების გამორთვა</translation> <translation id="4946376291507881335">აღბეჭდვა</translation> +<translation id="4947229553198882488"><ph name="UNAVAILABLE_APPS" /> არ არის ამ მოწყობილობაზე.</translation> <translation id="495046168593986294">ზემოთ გადაადგილება</translation> <translation id="4952936045814352993">ტელეფონის მდებარეობის დადგენის ფუნქცია მიუწვდომელია, როცა მაღვიძარას ხმები გათიშულია</translation> <translation id="4960324571663582548"><ph name="MANAGER" /> ითხოვს, თქვენი <ph name="DEVICE_TYPE" /> ძველ ვერსიაზე დააბრუნოთ. თქვენი მოწყობილობა გადაყენდება და ყველა მონაცემი წაიშლება.</translation> @@ -1014,6 +1017,7 @@ <translation id="7868900307798234037">მიმდინარეობს თითის ანაბეჭდით განბლოკვა</translation> <translation id="7872786842639831132">გამორთვა</translation> <translation id="7875575368831396199">როგორც ჩანს, თქვენს <ph name="DEVICE_TYPE" />-ზე გამორთულია Bluetooth. ტელეფონის ცენტრის გამოსაყენებლად ჩართეთ Bluetooth.</translation> +<translation id="7877557217297072640">{0,plural, =0{დააბრუნეთ მოწყობილობა წინა ვერსიაზე ახლავე}=1{დააბრუნეთ მოწყობილობა წინა ვერსიაზე 1 წამის განმავლობაში}other{დააბრუნეთ მოწყობილობა წინა ვერსიაზე # წამის განმავლობაში}}</translation> <translation id="7886169021410746335">კონფიდენციალურობის პარამეტრების კორექტირება</translation> <translation id="7886277072580235377">გასვლის შემდეგ თქვენი ინტერნეტ-სესია გასუფთავდება. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">ელფოსტის გაგზავნა</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb index 8257a7e6..f8b99b29 100644 --- a/ash/strings/ash_strings_lv.xtb +++ b/ash/strings/ash_strings_lv.xtb
@@ -248,6 +248,7 @@ <translation id="2653019840645008922">Loga uzņemšana</translation> <translation id="2653659639078652383">Iesniegt</translation> <translation id="2658778018866295321">Noklikšķiniet un velciet</translation> +<translation id="2665788051462227163">Šajā ierīcē nav lietotņu <ph name="UNAVAILABLE_APPS_ONE" /> un <ph name="UNAVAILABLE_APPS_TWO" />.</translation> <translation id="2678852583403169292">Funkcijas “Atlasīt, lai izrunātu” izvēlne</translation> <translation id="2689613560355655046">8. darbvieta</translation> <translation id="2700493154570097719">Iestatiet savu tastatūru</translation> @@ -419,6 +420,7 @@ <translation id="3708186454126126312">Ierīces, ar kurām iepriekš tika izveidots savienojums</translation> <translation id="371370241367527062">Priekšējais mikrofons</translation> <translation id="3713734891607377840">Kad gatavs, atvērt</translation> +<translation id="3726171378575546917">Šajā ierīcē nav lietotņu <ph name="UNAVAILABLE_APPS_ONE" />, <ph name="UNAVAILABLE_APPS_TWO" /> un vēl <ph name="UNAVAILABLE_APPS_COUNT" /> lietotnes(-ņu).</translation> <translation id="3742055079367172538">Ekrānuzņēmums ir uzņemts</translation> <translation id="3744282433224562605">Lai atbloķētu Chromebook datoru, ievadiet paroli.</translation> <translation id="3771549900096082774">Augsta kontrasta režīms</translation> @@ -604,6 +606,7 @@ <translation id="4925542575807923399">Šī konta administrators ir noteicis, ka vairākkārtējas pierakstīšanās sesijā šis ir pirmais konts, kurā jāpierakstās.</translation> <translation id="4945196315133970626">Izslēgt paziņojumus</translation> <translation id="4946376291507881335">Tvert</translation> +<translation id="4947229553198882488">Šajā ierīcē nav lietotnes <ph name="UNAVAILABLE_APPS" />.</translation> <translation id="495046168593986294">Ritināt uz augšu</translation> <translation id="4952936045814352993">Funkcija “Atrast tālruni” nav pieejama, ja brīdinājumu skaņas ir atspējotas</translation> <translation id="4960324571663582548"><ph name="MANAGER" /> pieprasa ierīcē <ph name="DEVICE_TYPE" /> atjaunot iepriekšējo versiju. Ierīce tiks atiestatīta, un visi dati tiks izdzēsti.</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb index d47ee7c..c2bb903 100644 --- a/ash/strings/ash_strings_ml.xtb +++ b/ash/strings/ash_strings_ml.xtb
@@ -1017,6 +1017,7 @@ <translation id="7868900307798234037">വിരലടയാളം ഉപയോഗിച്ച് അൺലോക്ക് ചെയ്യുന്നു</translation> <translation id="7872786842639831132">ഓഫാണ്</translation> <translation id="7875575368831396199">നിങ്ങളുടെ <ph name="DEVICE_TYPE" /> എന്നതിൽ Bluetooth ഓഫാണെന്ന് തോന്നുന്നു. ഫോൺ ഹബ് ഉപയോഗിക്കാൻ, Bluetooth ഓണാക്കുക.</translation> +<translation id="7877557217297072640">{0,plural, =0{ഉപകരണം ഇപ്പോൾ തന്നെ മുമ്പത്തെ പതിപ്പിലേക്ക് മാറ്റുക}=1{ഉപകരണം ഒരു സെക്കൻഡിനുള്ളിൽ മുമ്പത്തെ പതിപ്പിലേക്ക് മാറ്റുക}other{ഉപകരണം # സെക്കൻഡിനുള്ളിൽ മുമ്പത്തെ പതിപ്പിലേക്ക് മാറ്റുക}}</translation> <translation id="7886169021410746335">സ്വകാര്യതാ ക്രമീകരണം ശരിയാക്കുക</translation> <translation id="7886277072580235377">സൈൻ ഔട്ട് ചെയ്യുമ്പോൾ നിങ്ങളുടെ ഇന്റർനെറ്റ് സെഷൻ മായ്ക്കപ്പെടും. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">ഒരു ഇമെയിൽ അയയ്ക്കുക</translation>
diff --git a/ash/strings/ash_strings_nl.xtb b/ash/strings/ash_strings_nl.xtb index 90834db6..511ef48 100644 --- a/ash/strings/ash_strings_nl.xtb +++ b/ash/strings/ash_strings_nl.xtb
@@ -1017,6 +1017,7 @@ <translation id="7868900307798234037">Ontgrendelen met vingerafdruk</translation> <translation id="7872786842639831132">Uit</translation> <translation id="7875575368831396199">Zo te zien staat bluetooth uit op je <ph name="DEVICE_TYPE" />. Zet bluetooth aan om Telefoonhub te gebruiken.</translation> +<translation id="7877557217297072640">{0,plural, =0{Zet het apparaat nu terug naar een oudere versie}=1{Zet het apparaat binnen 1 seconde terug naar een oudere versie}other{Zet het apparaat binnen # seconden terug naar een oudere versie}}</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>
diff --git a/ash/strings/ash_strings_or.xtb b/ash/strings/ash_strings_or.xtb index 882cbf6f..a3c375a 100644 --- a/ash/strings/ash_strings_or.xtb +++ b/ash/strings/ash_strings_or.xtb
@@ -1014,6 +1014,7 @@ <translation id="7868900307798234037">ଟିପ ଚିହ୍ନ ସାହାଯ୍ୟରେ ଅନ୍ଲକ୍ କରୁଛି</translation> <translation id="7872786842639831132">ବନ୍ଦ ଅଛି</translation> <translation id="7875575368831396199">ଆପଣଙ୍କ <ph name="DEVICE_TYPE" />ରେ ବ୍ଲୁଟୁଥ୍ ବନ୍ଦ କରାଯାଇଥିବା ପରି ଜଣାପଡ଼ୁଛି। ଦୟାକରି ଫୋନ୍ ହବ୍ ବ୍ୟବହାର କରିବା ପାଇଁ ବ୍ଲୁଟୁଥକୁ ଚାଲୁ କରନ୍ତୁ।</translation> +<translation id="7877557217297072640">{0,plural, =0{ଡିଭାଇସକୁ ବର୍ତ୍ତମାନ ପୂର୍ବବର୍ତ୍ତୀ ସଂସ୍କରଣକୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ}=1{ଡିଭାଇସକୁ 1 ସେକେଣ୍ଡ ମଧ୍ୟରେ ପୂର୍ବବର୍ତ୍ତୀ ସଂସ୍କରଣକୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ}other{ଡିଭାଇସକୁ # ସେକେଣ୍ଡ ମଧ୍ୟରେ ପୂର୍ବବର୍ତ୍ତୀ ସଂସ୍କରଣକୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ}}</translation> <translation id="7886169021410746335">ଗୋପନୀୟତା ସେଟିଂସ୍ ଆଡ୍ଜଷ୍ଟ କରନ୍ତୁ</translation> <translation id="7886277072580235377">ଯେତେବେଳେ ଆପଣ ସାଇନ୍ ଆଉଟ୍ କରିବେ ସେତେବେଳେ ଆପଣଙ୍କ ଇଣ୍ଟର୍ନେଟ୍ ଅବଧି ଖାଲି ହୋଇଯିବ। <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">ଏକ ଇମେଲ୍ ପଠାନ୍ତୁ</translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb index fe49222..b373db55 100644 --- a/ash/strings/ash_strings_pt-PT.xtb +++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -1017,6 +1017,7 @@ <translation id="7868900307798234037">Desbloqueado com a impressão digital</translation> <translation id="7872786842639831132">Desativado</translation> <translation id="7875575368831396199">O Bluetooth está desativado no seu <ph name="DEVICE_TYPE" />. Ative o Bluetooth para utilizar o Phone Hub.</translation> +<translation id="7877557217297072640">{0,plural, =0{Altere o dispositivo para uma versão anterior agora}=1{Altere o dispositivo para uma versão anterior dentro de 1 segundo}one{Altere o dispositivo para uma versão anterior dentro de # segundo(s)}other{Altere o dispositivo para uma versão anterior dentro de # segundos}}</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>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb index dff9795..bd943bf 100644 --- a/ash/strings/ash_strings_ru.xtb +++ b/ash/strings/ash_strings_ru.xtb
@@ -248,6 +248,7 @@ <translation id="2653019840645008922">Съемка окна</translation> <translation id="2653659639078652383">Отправить</translation> <translation id="2658778018866295321">Перетаскивание</translation> +<translation id="2665788051462227163">Приложения "<ph name="UNAVAILABLE_APPS_ONE" />" и "<ph name="UNAVAILABLE_APPS_TWO" />" не установлены на этом устройстве.</translation> <translation id="2678852583403169292">Меню озвучивания при нажатии</translation> <translation id="2689613560355655046">Рабочий стол 8</translation> <translation id="2700493154570097719">Выберите раскладку</translation> @@ -419,6 +420,7 @@ <translation id="3708186454126126312">Ранее подключенные устройства</translation> <translation id="371370241367527062">Фронтальный микрофон</translation> <translation id="3713734891607377840">Открыть после скачивания</translation> +<translation id="3726171378575546917">Приложения "<ph name="UNAVAILABLE_APPS_ONE" />", "<ph name="UNAVAILABLE_APPS_TWO" />" и ещё несколько сервисов (<ph name="UNAVAILABLE_APPS_COUNT" />) не установлены на этом устройстве.</translation> <translation id="3742055079367172538">Сделан скриншот</translation> <translation id="3744282433224562605">Чтобы разблокировать Chromebook, введите пароль.</translation> <translation id="3771549900096082774">Режим высокой контрастности</translation> @@ -604,6 +606,7 @@ <translation id="4925542575807923399">Чтобы начать сеанс множественного входа, необходимо в первую очередь выполнить вход в этот аккаунт</translation> <translation id="4945196315133970626">Отключить уведомления</translation> <translation id="4946376291507881335">Снимок</translation> +<translation id="4947229553198882488">Приложение "<ph name="UNAVAILABLE_APPS" />" не установлено на этом устройстве.</translation> <translation id="495046168593986294">Прокрутить вверх</translation> <translation id="4952936045814352993">Функция "Найти телефон" недоступна, так как отключены сигналы оповещений</translation> <translation id="4960324571663582548">Согласно требованиям <ph name="MANAGER" /> вам нужно выполнить откат на устройстве <ph name="DEVICE_TYPE" />. Настройки устройства будут сброшены, а все данные – удалены.</translation>
diff --git a/ash/strings/ash_strings_sq.xtb b/ash/strings/ash_strings_sq.xtb index 233e9cf..27d0099 100644 --- a/ash/strings/ash_strings_sq.xtb +++ b/ash/strings/ash_strings_sq.xtb
@@ -4,6 +4,7 @@ <translation id="1012876632442809908">Pajisja USB-C (porta përpara)</translation> <translation id="1013598600051641573"><ph name="DISPLAY_NAME" /> ndryshoi në <ph name="RESOLUTION" /> (<ph name="REFRESH_RATE" /> Hz). Kliko te "Konfirmo" për t'i mbajtur ndryshimet. Cilësimet e mëparshme do të restaurohen për <ph name="TIMEOUT_SECONDS" />.</translation> <translation id="1013923882670373915">Pajisja me Bluetooth, "<ph name="DEVICE_NAME" />" kërkon leje për çiftim. Fut këtë kod PIN në atë pajisje: <ph name="PINCODE" /></translation> +<translation id="1014111206066007277">Veglat e transmetimit të ekranit</translation> <translation id="1024261588257374085">U zgjodh pamja e pjesshme e ekranit</translation> <translation id="1032891413405719768">Bateria e stilolapsit është e ulët</translation> <translation id="1036073649888683237">Për të menaxhuar njoftimet, shko te "Cilësimet"</translation> @@ -37,6 +38,7 @@ <translation id="1181037720776840403">Hiq</translation> <translation id="118532027333893379">Trokit diku për të regjistruar ekranin e plotë</translation> <translation id="1190609913194133056">Qendra e njoftimeve</translation> +<translation id="1190678134285018527">Pajisja duhet të kthehet në versionin e mëparshëm</translation> <translation id="1195412055398077112">mbiskanim</translation> <translation id="119944043368869598">Pastroji të gjitha</translation> <translation id="1199716647557067911">Je i sigurt që dëshiron të çaktivizosh "Qasjen me çelës"?</translation> @@ -125,6 +127,7 @@ <translation id="1743570585616704562">Nuk njihet</translation> <translation id="1746730358044914197">Metodat e hyrjes konfigurohen nga administratori yt.</translation> <translation id="1747827819627189109">Tastiera në ekran u aktivizua</translation> +<translation id="1749109475624620922">Dritarja <ph name="WINDOW_TITLE" /> u caktua për të gjitha tavolinat e punës</translation> <translation id="1761222317188459878">Aktivizo/çaktivizo lidhjen e rrjetit. <ph name="STATE_TEXT" /></translation> <translation id="1768366657309696705">Shkurtorja e tastierës për <ph name="LAUNCHER_KEY_NAME" /> + Pikë është ndryshuar. Për të përdorur tastin Insert, shtyp tastin <ph name="LAUNCHER_KEY_NAME" /> + Shift + Backspace.</translation> <translation id="1770726142253415363">Është zhvendosur në rreshtin <ph name="ROW_NUMBER" />, kolonën <ph name="COLUMN_NUMBER" />.</translation> @@ -259,6 +262,7 @@ <translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> menaxhohet nga <ph name="MANAGER" /></translation> <translation id="2782591952652094792">Dil nga modaliteti i regjistrimit</translation> <translation id="2792498699870441125">Alt+Kërko</translation> +<translation id="2797741504905337289">Grupi i rafteve</translation> <translation id="2803313416453193357">Hap dosjen</translation> <translation id="2805756323405976993">Aplikacionet</translation> <translation id="2814448776515246190">Regjistrim i pjesshëm</translation> @@ -316,6 +320,7 @@ <translation id="3153444934357957346">Mund të kesh vetëm deri në <ph name="MULTI_PROFILE_USER_LIMIT" /> llogari në identifikimin e shumëfishtë.</translation> <translation id="3154351730702813399">Administratori i pajisjes mund të monitorojë aktivitetin tënd të shfletimit.</translation> <translation id="316086887565479535">Aplikacione të pambështetura në shabllon</translation> +<translation id="316356270129335934"><ph name="MANAGER" /> po kthen pas pajisjen tënde <ph name="DEVICE_TYPE" />. Pajisja do të rivendoset dhe të gjitha të dhënat do të fshihen.</translation> <translation id="3181441307743005334">Rindezja mund të zgjasë pak</translation> <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Lidhur me një pajisje}other{Lidhur me # pajisje}}</translation> <translation id="320207200541803018">Cakto kohëmatësin</translation> @@ -439,6 +444,7 @@ <translation id="3899995891769452915">Hyrja zanore</translation> <translation id="3900355044994618856">Sesioni do të përfundojë për <ph name="SESSION_TIME_REMAINING" /></translation> <translation id="3901991538546252627">Po lidhet me <ph name="NAME" /></translation> +<translation id="3922427723338465344">{0,plural, =1{Kalo pajisjen në versionin e mëparshëm brenda 1 minute}other{Kalo pajisjen në versionin e mëparshëm brenda # minutash}}</translation> <translation id="3923494859158167397">Nuk ka asnjë rrjet celular të konfiguruar</translation> <translation id="3932043219784172185">Nuk është lidhur asnjë pajisje</translation> <translation id="3943857333388298514">Ngjite</translation> @@ -555,6 +561,7 @@ <translation id="4623167406982293031">Verifiko llogarinë</translation> <translation id="4628757576491864469">Pajisjet</translation> <translation id="4631891353005174729"><ph name="APP_NAME_TYPE" />, vlerësimi me yje <ph name="RATING_SCORE" /></translation> +<translation id="4633185660152240791">{0,plural, =1{Kalo pajisjen në versionin e mëparshëm brenda një dite}other{Kalo pajisjen në versionin e mëparshëm brenda # ditësh}}</translation> <translation id="4642092649622328492">Nxirr një pamje të pjesshme të ekranit</translation> <translation id="4648249871170053485"><ph name="APP_NAME" />, rekomandim për aplikacione</translation> <translation id="4659419629803378708">ChromeVox është aktivizuar</translation> @@ -596,6 +603,7 @@ <translation id="4946376291507881335">Regjistrimi</translation> <translation id="495046168593986294">Lëviz lart</translation> <translation id="4952936045814352993">"Gjej telefonin" nuk ofrohet kur tingujt e alarmeve janë çaktivizuar</translation> +<translation id="4960324571663582548"><ph name="MANAGER" /> kërkon që ta kthesh pas pajisjen tënde <ph name="DEVICE_TYPE" />. Pajisja do të rivendoset dhe të gjitha të dhënat do të fshihen.</translation> <translation id="4961318399572185831">Ekrani i transmetimit</translation> <translation id="4969092041573468113"><ph name="HOURS" /> orë e <ph name="MINUTES" /> min. e <ph name="SECONDS" /> sek.</translation> <translation id="4975771730019223894">Distinktivi i aplikacionit</translation> @@ -703,6 +711,7 @@ <translation id="5745612484876805746">"Drita e natës" aktivizohet automatikisht kur perëndon dielli</translation> <translation id="5750765938512549687">Bluetooth-i është joaktiv</translation> <translation id="576341972084747908">Shkarko <ph name="FILENAME" /> me rrezik</translation> +<translation id="5763928712329149804">"Grupi i rafteve" është joaktiv.</translation> <translation id="576453121877257266">"Drita e natës" është aktive.</translation> <translation id="5769373120130404283">Ekrani i privatësisë</translation> <translation id="5777841717266010279">Dëshiron të ndalosh ndarjen e ekranit?</translation> @@ -719,6 +728,7 @@ <translation id="5867217927013474703">Po mblidhet informacioni i rrjetit</translation> <translation id="5876666360658629066">Fut kodin e prindit</translation> <translation id="5881540930187678962">Konfiguroje Phone Hub më vonë</translation> +<translation id="5887954372087850114">Dritarja <ph name="WINDOW_TITLE" /> u caktua në <ph name="DESK_TITLE" /> dhe u hoq nga të gjitha tavolinat e tjera të punës</translation> <translation id="5895138241574237353">Rinis</translation> <translation id="589817443623831496">Skanimi me pika</translation> <translation id="5901316534475909376">Shift+Esc</translation> @@ -780,6 +790,7 @@ <translation id="6315170314923504164">Voice</translation> <translation id="6330012934079202188">Po shfaqen dritaret nga të gjitha tavolinat e punës. Shtyp tastin "Shigjeta lart" për të shfaqur dritaret nga tavolina aktuale e punës</translation> <translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> është sesion i menaxhuar që menaxhohet nga <ph name="MANAGER" /></translation> +<translation id="6344138931392227467"><ph name="DEVICE_NAME" /> u lidh</translation> <translation id="6351032674660237738">SUGJERIMET E APLIKACIONEVE</translation> <translation id="6376931439017688372">Bluetooth-i është aktiv</translation> <translation id="6381109794406942707">Për të shkyçur pajisjen, fut kodin PIN.</translation> @@ -796,6 +807,7 @@ <translation id="6459472438155181876">Po zgjeron ekranin në <ph name="DISPLAY_NAME" /></translation> <translation id="6482559668224714696">Zmadhuesi në ekran të plotë</translation> <translation id="6490471652906364588">Pajisja USB-C (porta djathtas)</translation> +<translation id="6491071886865974820"><ph name="MANAGER" /> kërkon që ta përditësosh pajisjen tënde <ph name="DEVICE_TYPE" /> përpara afatit</translation> <translation id="649452524636452238">Kodi PIN i kartës smart</translation> <translation id="6495400115277918834">"Figurë brenda figurës" filloi; shtyp "Alt+Shift+V" për të fokusuar</translation> <translation id="6500818810472529210">Shikoje rezultatin te "Kërko në Google"</translation> @@ -832,6 +844,7 @@ <translation id="6692996468359469499">Merr informacion në lidhje me përzgjedhjen tënde</translation> <translation id="6696025732084565524">Tastiera jote e shkëputshme ka nevojë për një përditësim me rëndësi</translation> <translation id="6700713906295497288">Butoni i menysë IME</translation> +<translation id="6707693040195709527">Kalimit të pajisjes në versionin e mëparshëm i ka kaluar afati</translation> <translation id="6710213216561001401">Prapa</translation> <translation id="6713285437468012787">Pajisja me Bluetooth "<ph name="DEVICE_NAME" />" është çiftuar dhe mundësohet tani për të gjithë përdoruesit. Mund ta heqësh këtë çiftim duke përdorur "Cilësimet".</translation> <translation id="6723839937902243910">Energjia</translation> @@ -888,6 +901,7 @@ <translation id="7067196344162293536">Rrotullim automatik</translation> <translation id="7068360136237591149">Hap skedarët</translation> <translation id="7076293881109082629">Po identifikohesh</translation> +<translation id="7086931198345821656">Ky përditësim kërkon që të kryesh Powerwash të <ph name="DEVICE_TYPE" />. Të gjitha të dhënat do të fshihen. Mëso më shumë rreth përditësimit të fundit të <ph name="SYSTEM_APP_NAME" />.</translation> <translation id="7088960765736518739">Qasja me çelës</translation> <translation id="7098389117866926363">Pajisja USB-C (porta majtas, prapa)</translation> <translation id="7106330611027933926">Shfaq panelin e fushës</translation> @@ -909,6 +923,7 @@ <translation id="7302889331339392448">"Titrat në çast" janë joaktivë.</translation> <translation id="7303365578352795231">Po përgjigjet në një pajisje tjetër</translation> <translation id="7305884605064981971">EDGE</translation> +<translation id="731589979057211264">"Grupi i rafteve" është aktiv.</translation> <translation id="7319740667687257810">Nisësi, pamje e pjesëshme</translation> <translation id="7343581795491695942"><ph name="QUERY_TEXT" />; <ph name="RESULT_TEXT" />; Shtyp "Kërko" plus "Hapësirë" për ta shikuar rezultatin në "Kërko në Google".</translation> <translation id="7346909386216857016">Në rregull, kuptova</translation> @@ -1050,12 +1065,15 @@ <translation id="8196787716797768628">Përdor gjestet për të kaluar me shpejtësi mes aplikacioneve dhe bashkëvepro me pajisjen tënde Chromebook në modalitetin e tabletit.</translation> <translation id="8200772114523450471">Vazhdo</translation> <translation id="8203795194971602413">Klikimi me butonin djathtas</translation> +<translation id="8209010265547628927">Rivendos</translation> <translation id="8219451629189078428">Pajisja jote Chromebook ka nevojë të qëndrojë aktive dhe e lidhur me energjinë gjatë kësaj kohe. Sigurohu që karikuesi ose kabllot e përshtatësit të jenë plotësisht të lidhura si me pajisjen tënde Chromebook, ashtu dhe me prizën elektrike. Mos e fik pajisjen tënde Chromebook.</translation> <translation id="8236042855478648955">Koha për një pushim</translation> <translation id="8247060538831475781"><ph name="CONNECTION_STATUS" />, fuqia e sinjalit <ph name="SIGNAL_STRENGTH" />, bateria e telefonit <ph name="BATTERY_STATUS" /></translation> <translation id="8247998213073982446"><ph name="APP_NAME" />, aplikacion</translation> +<translation id="8255234195843591763">Rivendos për ta përditësuar</translation> <translation id="826107067893790409">Shtyp "Enter" për ta shkyçur për <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="8261506727792406068">Fshi</translation> +<translation id="8270450402312105425">{0,plural, =1{Kalo pajisjen në versionin e mëparshëm brenda një ore}other{Kalo pajisjen në versionin e mëparshëm brenda # orësh}}</translation> <translation id="8281279285293265212">Ruajtja e transmetimit të ekranit dështoi</translation> <translation id="8284362522226889623">Rrëshqit shpejt majtas me katër gishta për të kaluar te tavolina e mëparshme e punës</translation> <translation id="828708037801473432">Joaktiv</translation> @@ -1064,6 +1082,7 @@ <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8345019317483336363">U zgjodh dritarja <ph name="WINDOW_TITLE" /></translation> <translation id="8351131234907093545">Krijo një shënim</translation> +<translation id="8364673525741149932">Aktivizo/çaktivizo "Grupin e rafteve". <ph name="STATE_TEXT" /></translation> <translation id="8371779926711439835">Përpara një shkronjë</translation> <translation id="8371991222807690464">Performanca e pajisjes periferike mund të jetë e kufizuar në modalitetin "vizitor"</translation> <translation id="8375916635258623388">Kjo pajisje <ph name="DEVICE_NAME" /> dhe telefoni yt do të lidhen automatikisht</translation> @@ -1090,6 +1109,7 @@ <translation id="851458219935658693">Shfaq dritaret nga tavolina aktuale e punës, butoni i radios i zgjedhur</translation> <translation id="8517041960877371778">Pajisja jote <ph name="DEVICE_TYPE" /> mund të mos ngarkohet kur është e ndezur.</translation> <translation id="8553395910833293175">Është caktuar tashmë te të gjitha tavolinat e punës.</translation> +<translation id="856298576161209842"><ph name="MANAGER" /> rekomandon që të përditësosh pajisjen tënde <ph name="DEVICE_TYPE" /></translation> <translation id="8563862697512465947">Cilësimet e njoftimeve</translation> <translation id="857201607579416096">Menyja u zhvendos në këndin poshtë djathtas të ekranit.</translation> <translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation> @@ -1197,6 +1217,7 @@ <translation id="9220525904950070496">Hiq llogarinë</translation> <translation id="923686485342484400">Shtyp dy herë Control, Shift, Q për të dalë.</translation> <translation id="925832987464884575">Fshih pamjet paraprake</translation> +<translation id="937214777182567951"><ph name="MANAGER" /> kërkon që ta përditësosh menjëherë <ph name="DEVICE_TYPE" /></translation> <translation id="938963181863597773">Çfarë ka në kalendarin tim?</translation> <translation id="945522503751344254">Dërgo komente</translation> <translation id="951991426597076286">Refuzo</translation>
diff --git a/ash/strings/ash_strings_sw.xtb b/ash/strings/ash_strings_sw.xtb index b258337..d7480d24 100644 --- a/ash/strings/ash_strings_sw.xtb +++ b/ash/strings/ash_strings_sw.xtb
@@ -248,6 +248,7 @@ <translation id="2653019840645008922">Kupiga picha ya dirisha</translation> <translation id="2653659639078652383">Wasilisha</translation> <translation id="2658778018866295321">Bofya na uburute</translation> +<translation id="2665788051462227163"><ph name="UNAVAILABLE_APPS_ONE" /> na <ph name="UNAVAILABLE_APPS_TWO" /> hazipo kwenye kifaa hiki.</translation> <translation id="2678852583403169292">Menyu ya kuchagua ili izungumze</translation> <translation id="2689613560355655046">Eneokazi la nane</translation> <translation id="2700493154570097719">Weka kibodi yako</translation> @@ -419,6 +420,7 @@ <translation id="3708186454126126312">Vilivyounganishwa awali</translation> <translation id="371370241367527062">Maikrofoni ya mbele</translation> <translation id="3713734891607377840">Ifungue ikimaliza kupakuliwa</translation> +<translation id="3726171378575546917"><ph name="UNAVAILABLE_APPS_ONE" />, <ph name="UNAVAILABLE_APPS_TWO" /> na zingine <ph name="UNAVAILABLE_APPS_COUNT" /> hazipo kwenye kifaa hiki.</translation> <translation id="3742055079367172538">Picha ya skrini imepigwa</translation> <translation id="3744282433224562605">Ili ufungue Chromebook yako, weka nenosiri</translation> <translation id="3771549900096082774">Hali ya Juu ya Utofautishaji</translation> @@ -604,6 +606,7 @@ <translation id="4925542575807923399">Msimamizi wa akaunti hii anahitaji uingie kwenye akaunti hii kwanza katika kipindi cha kuingia katika akaunti nyingi kwa wakati mmoja.</translation> <translation id="4945196315133970626">Zima arifa</translation> <translation id="4946376291507881335">Nasa</translation> +<translation id="4947229553198882488"><ph name="UNAVAILABLE_APPS" /> haipo kwenye kifaa hiki.</translation> <translation id="495046168593986294">Sogeza juu</translation> <translation id="4952936045814352993">Kipengele cha kutafuta simu hakipatikani wakati umezima sauti za kengele</translation> <translation id="4960324571663582548"><ph name="MANAGER" /> inahitaji urejeshe toleo la awali kwenye <ph name="DEVICE_TYPE" /> yako. Mipangilio ya kifaa chako itawekwa upya na data yote itafutwa.</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb index a34b406..51c43d6 100644 --- a/ash/strings/ash_strings_te.xtb +++ b/ash/strings/ash_strings_te.xtb
@@ -248,6 +248,7 @@ <translation id="2653019840645008922">విండోను క్యాప్చర్ చేయండి</translation> <translation id="2653659639078652383">సమర్పించు</translation> <translation id="2658778018866295321">క్లిక్ చేసి, లాగండి</translation> +<translation id="2665788051462227163"><ph name="UNAVAILABLE_APPS_ONE" />, <ph name="UNAVAILABLE_APPS_TWO" /> ఈ పరికరంలో అందుబాటులో లేవు.</translation> <translation id="2678852583403169292">'వినడానికి ఎంచుకోండి' మెనూ</translation> <translation id="2689613560355655046">డెస్క్ 8</translation> <translation id="2700493154570097719">మీ కీబోర్డ్ని సెట్ చేయండి</translation> @@ -419,6 +420,7 @@ <translation id="3708186454126126312">ఇంతకు మునుపు కనెక్ట్ చేయబడినవి</translation> <translation id="371370241367527062">ముందువైపు మైక్రోఫోన్</translation> <translation id="3713734891607377840">పూర్తయినప్పుడు తెరవండి</translation> +<translation id="3726171378575546917"><ph name="UNAVAILABLE_APPS_ONE" />, <ph name="UNAVAILABLE_APPS_TWO" />, మరో<ph name="UNAVAILABLE_APPS_COUNT" /> యాప్లు ఈ పరికరంలో అందుబాటులో లేవు.</translation> <translation id="3742055079367172538">స్క్రీన్షాట్ తీసినప్పుడు</translation> <translation id="3744282433224562605">మీ Chromebookను అన్లాక్ చేయడానికి, పాస్వర్డ్ను ఎంటర్ చేయండి</translation> <translation id="3771549900096082774">అధిక కాంట్రాస్ట్ మోడ్</translation> @@ -605,6 +607,7 @@ <translation id="4925542575807923399">బహుళ సైన్-ఇన్ సెషన్లో ఈ ఖాతా మొదటిగా సైన్-ఇన్ చేసిన ఖాతాగా ఉండటం ఈ ఖాతా నిర్వాహకులకు అవసరం.</translation> <translation id="4945196315133970626">నోటిఫికేషన్లను ఆఫ్ చేయండి</translation> <translation id="4946376291507881335">క్యాప్చర్ చేయండి</translation> +<translation id="4947229553198882488"><ph name="UNAVAILABLE_APPS" />ఈ పరికరంలో అందుబాటులో లేదు.</translation> <translation id="495046168593986294">పైకి స్క్రోల్ చేయి</translation> <translation id="4952936045814352993">అలారం శబ్దాలు డిజేబుల్ చేయబడినప్పుడు 'ఫోన్ను గుర్తించు' ఫీచర్ అందుబాటులో ఉండదు</translation> <translation id="4960324571663582548"><ph name="MANAGER" />, మీ <ph name="DEVICE_TYPE" /> వెర్షన్ను దాని మునపటి వెర్షన్కు మార్చాలనుకుంటోంది. మీ పరికరం రీసెట్ చేయబడుతుంది, ఇంకా మొత్తం డేటా తొలగించబడుతుంది.</translation>
diff --git a/ash/strings/ash_strings_uz.xtb b/ash/strings/ash_strings_uz.xtb index 10a6b90..0593d215 100644 --- a/ash/strings/ash_strings_uz.xtb +++ b/ash/strings/ash_strings_uz.xtb
@@ -248,6 +248,7 @@ <translation id="2653019840645008922">Oynani tasvirga olish</translation> <translation id="2653659639078652383">Yuborish</translation> <translation id="2658778018866295321">Bosib torting</translation> +<translation id="2665788051462227163"><ph name="UNAVAILABLE_APPS_ONE" /> va <ph name="UNAVAILABLE_APPS_TWO" /> bu qurilmada emas.</translation> <translation id="2678852583403169292">Teginib tinglash menyusi</translation> <translation id="2689613560355655046">Desk 8</translation> <translation id="2700493154570097719">Klaviaturani tanlash</translation> @@ -419,6 +420,7 @@ <translation id="3708186454126126312">Avval ulangan qurilmalar</translation> <translation id="371370241367527062">Old mikrofon</translation> <translation id="3713734891607377840">Yuklab olinganda ochish</translation> +<translation id="3726171378575546917"><ph name="UNAVAILABLE_APPS_ONE" />, <ph name="UNAVAILABLE_APPS_TWO" /> va yana <ph name="UNAVAILABLE_APPS_COUNT" /> ta ilova bu qurilmada emas.</translation> <translation id="3742055079367172538">Ekran suratga olindi</translation> <translation id="3744282433224562605">Chromebook qulfini ochish uchun parolni kiriting</translation> <translation id="3771549900096082774">Yuqori kontrastli rejim</translation> @@ -604,6 +606,7 @@ <translation id="4925542575807923399">Bu hisobning administratori ko‘plab tizimga kirish seanslarida birinchi bo‘lib shu hisobga kirishni talab qiladi.</translation> <translation id="4945196315133970626">Bildirishnoma kelmasin</translation> <translation id="4946376291507881335">Tasvirga olish</translation> +<translation id="4947229553198882488"><ph name="UNAVAILABLE_APPS" /> bu qurilmada emas.</translation> <translation id="495046168593986294">Tepaga chiqish</translation> <translation id="4952936045814352993">Telefonni topish funksiyasi signallar oʻchiqligida ishlamaydi</translation> <translation id="4960324571663582548"><ph name="MANAGER" /> <ph name="DEVICE_TYPE" /> tizimini eski versiyaga qaytarishni talab qilmoqda. Qurilma asliga qaytariladi va barcha maʼlumotlar butunlay tozalanadi.</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb index bac8e8e..ca7e95f3 100644 --- a/ash/strings/ash_strings_vi.xtb +++ b/ash/strings/ash_strings_vi.xtb
@@ -247,6 +247,7 @@ <translation id="2653019840645008922">Chụp/ghi cửa sổ</translation> <translation id="2653659639078652383">Gửi</translation> <translation id="2658778018866295321">Nhấp và kéo</translation> +<translation id="2665788051462227163"><ph name="UNAVAILABLE_APPS_ONE" /> và <ph name="UNAVAILABLE_APPS_TWO" /> không có trên thiết bị này.</translation> <translation id="2678852583403169292">Trình đơn Chọn để nói</translation> <translation id="2689613560355655046">Không gian làm việc 8</translation> <translation id="2700493154570097719">Đặt bàn phím</translation> @@ -418,6 +419,7 @@ <translation id="3708186454126126312">Từng được kết nối</translation> <translation id="371370241367527062">Micrô mặt trước</translation> <translation id="3713734891607377840">Mở khi hoàn tất</translation> +<translation id="3726171378575546917"><ph name="UNAVAILABLE_APPS_ONE" />, <ph name="UNAVAILABLE_APPS_TWO" />, và <ph name="UNAVAILABLE_APPS_COUNT" /> ứng dụng khác không có trên thiết bị này.</translation> <translation id="3742055079367172538">Ảnh màn hình đã chụp</translation> <translation id="3744282433224562605">Hãy nhập mật khẩu để mở khóa Chromebook của bạn</translation> <translation id="3771549900096082774">Chế độ tương phản cao</translation> @@ -603,6 +605,7 @@ <translation id="4925542575807923399">Quản trị viên của tài khoản này yêu cầu tài khoản này là tài khoản đăng nhập đầu tiên trong phiên đăng nhập nhiều tài khoản.</translation> <translation id="4945196315133970626">Tắt thông báo</translation> <translation id="4946376291507881335">Chụp</translation> +<translation id="4947229553198882488"><ph name="UNAVAILABLE_APPS" /> không có trên thiết bị này.</translation> <translation id="495046168593986294">Cuộn lên</translation> <translation id="4952936045814352993">Bạn không dùng được tính năng Tìm điện thoại khi đã tắt chuông báo</translation> <translation id="4960324571663582548">Theo yêu cầu của <ph name="MANAGER" />, bạn phải hạ cấp hệ điều hành trên thiết bị <ph name="DEVICE_TYPE" /> của mình. Thiết bị của bạn sẽ được đặt lại và toàn bộ dữ liệu sẽ bị xoá.</translation>
diff --git a/ash/strings/ash_strings_zh-HK.xtb b/ash/strings/ash_strings_zh-HK.xtb index 36dca5d..06c138e 100644 --- a/ash/strings/ash_strings_zh-HK.xtb +++ b/ash/strings/ash_strings_zh-HK.xtb
@@ -1016,7 +1016,7 @@ <translation id="7868900307798234037">用緊指紋解鎖</translation> <translation id="7872786842639831132">關閉</translation> <translation id="7875575368831396199"><ph name="DEVICE_TYPE" /> 上的藍牙似乎已關閉。請開啟藍牙,才能使用 Phone Hub。</translation> -<translation id="7877557217297072640">{0,plural, =0{立即將裝置復原為較舊的版本}=1{在 1 秒內將裝置復原為較舊的版本}other{在 # 秒內將裝置復原為較舊的版本}}</translation> +<translation id="7877557217297072640">{0,plural, =0{現在將裝置回復為先前的版本}=1{在 1 秒內將裝置回復為先前的版本}other{在 # 秒內將裝置回復為先前的版本}}</translation> <translation id="7886169021410746335">調整私隱權設定</translation> <translation id="7886277072580235377">登出帳戶後,系統將清除您的互聯網工作階段。<ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">傳送電郵</translation>
diff --git a/ash/system/unified/hps_notify_controller.cc b/ash/system/unified/hps_notify_controller.cc index 90e24de6..4ad69ea 100644 --- a/ash/system/unified/hps_notify_controller.cc +++ b/ash/system/unified/hps_notify_controller.cc
@@ -8,6 +8,7 @@ #include "ash/public/cpp/session/session_observer.h" #include "ash/session/session_controller_impl.h" #include "ash/shell.h" +#include "ash/system/hps/hps_configuration.h" #include "base/bind.h" #include "base/callback.h" #include "base/logging.h" @@ -32,14 +33,20 @@ DCHECK(session_controller); session_observation_.Observe(session_controller); - // Poll the current HPS notify state if the daemon is active. Then, from now - // on, observe changes to the HPS notify signal. - chromeos::HpsDBusClient::Get()->GetResultHpsNotify(base::BindOnce( - &HpsNotifyController::OnHpsPollResult, weak_ptr_factory_.GetWeakPtr())); - hps_dbus_observation_.Observe(chromeos::HpsDBusClient::Get()); + // Wait for the service to be available before subscribing to its events. If + // we directly subscribe here, we will attempt to configure the DBus service + // twice (once via this callback and once via |OnRestart|) if it's slow to + // start. Configuring HPS notify without first disabling it is an error. + chromeos::HpsDBusClient::Get()->WaitForServiceToBeAvailable( + base::BindOnce(&HpsNotifyController::StartHpsObservation, + weak_ptr_factory_.GetWeakPtr())); } -HpsNotifyController::~HpsNotifyController() = default; +HpsNotifyController::~HpsNotifyController() { + // This is a no-op if the service isn't available or isn't enabled. + // TODO(crbug.com/1241704): only disable if the service is enabled. + chromeos::HpsDBusClient::Get()->DisableHpsNotify(); +} // static void HpsNotifyController::RegisterProfilePrefs(PrefRegistrySimple* registry) { @@ -68,7 +75,7 @@ pref_change_registrar_->Init(pref_service); pref_change_registrar_->Add( prefs::kSnoopingProtectionEnabled, - base::BindRepeating(&HpsNotifyController::OnPrefChanged, + base::BindRepeating(&HpsNotifyController::UpdatePrefState, weak_ptr_factory_.GetWeakPtr())); } @@ -76,6 +83,17 @@ UpdateIconVisibility(session_active_, hps_state, is_enabled_); } +void HpsNotifyController::OnRestart() { + RestartHpsObservation(); +} + +void HpsNotifyController::OnShutdown() { + UpdateIconVisibility(session_active_, /*hps_state=*/false, is_enabled_); + + // We will be notified of the service starting back up again via our ongoing + // observation of the DBus client. +} + void HpsNotifyController::AddObserver(Observer* observer) { observers_.AddObserver(observer); } @@ -106,16 +124,42 @@ observer.ShouldUpdateVisibility(new_visibility); } -void HpsNotifyController::OnHpsPollResult(absl::optional<bool> result) { - if (!result.has_value()) { - LOG(WARNING) << "Polling the presence daemon failed"; +void HpsNotifyController::StartHpsObservation(bool service_is_available) { + if (!service_is_available) return; - } - UpdateIconVisibility(session_active_, *result, is_enabled_); + // Start listening for state updates and restarts/shutdowns. + hps_dbus_observation_.Observe(chromeos::HpsDBusClient::Get()); + + // Special case: at this point, the service could have been left in an enabled + // state by a previous session that crashed (and hence didn't clean up + // properly). Disable it here, which is a no-op if it is already disabled. + chromeos::HpsDBusClient::Get()->DisableHpsNotify(); + + RestartHpsObservation(); } -void HpsNotifyController::OnPrefChanged() { +void HpsNotifyController::RestartHpsObservation() { + // Configure the snooping started/stopped signals that the service will emit. + const absl::optional<hps::FeatureConfig> config = GetEnableHpsNotifyConfig(); + if (!config.has_value()) { + LOG(ERROR) << "Couldn't parse notify configuration"; + return; + } + chromeos::HpsDBusClient::Get()->EnableHpsNotify(*config); + + // Populate our initial HPS state for consistency with the service. + chromeos::HpsDBusClient::Get()->GetResultHpsNotify(base::BindOnce( + &HpsNotifyController::UpdateHpsState, weak_ptr_factory_.GetWeakPtr())); +} + +void HpsNotifyController::UpdateHpsState(absl::optional<bool> response) { + LOG_IF(WARNING, !response.has_value()) + << "Polling the presence daemon failed"; + UpdateIconVisibility(session_active_, response.value_or(false), is_enabled_); +} + +void HpsNotifyController::UpdatePrefState() { DCHECK(pref_change_registrar_); DCHECK(pref_change_registrar_->prefs());
diff --git a/ash/system/unified/hps_notify_controller.h b/ash/system/unified/hps_notify_controller.h index ce5aa926..ed6953c 100644 --- a/ash/system/unified/hps_notify_controller.h +++ b/ash/system/unified/hps_notify_controller.h
@@ -49,8 +49,10 @@ // chromeos::HpsDBusClient::Observer: void OnHpsNotifyChanged(bool state) override; + void OnRestart() override; + void OnShutdown() override; - // Add/remove views that are listening for visibility updates. + // Adds/removes views that are listening for visibility updates. void AddObserver(Observer* observer); void RemoveObserver(Observer* observer); @@ -62,12 +64,19 @@ // preference state. If changed, notifies observers. void UpdateIconVisibility(bool logged_in, bool hps_state, bool is_enabled); - // A callback to set our initial state by polling the presence daemon. - void OnHpsPollResult(absl::optional<bool> result); + // Configures the daemon and opts in to signals from it. + void StartHpsObservation(bool service_is_available); + + // Re-configures the daemon and polls its initial state (used in case of + // daemon restart). + void RestartHpsObservation(); + + // Performs the state update from the daemon response. + void UpdateHpsState(absl::optional<bool> result); // A callback to update visibility when the user enables or disables the // feature. - void OnPrefChanged(); + void UpdatePrefState(); // Used to track whether a signal should actually trigger a visibility change: bool hps_state_ = false; // The state last reported by the daemon.
diff --git a/ash/system/unified/hps_notify_controller_unittest.cc b/ash/system/unified/hps_notify_controller_unittest.cc index 4ac2c41..82a2373 100644 --- a/ash/system/unified/hps_notify_controller_unittest.cc +++ b/ash/system/unified/hps_notify_controller_unittest.cc
@@ -31,23 +31,28 @@ // controller hooked up to the test environment. class HpsNotifyControllerTestBase : public NoSessionAshTestBase { public: - // Argument controls whether the DBus method should return true or false when - // the controller is being initialized. We can't set this value in individual - // tests since it must be done before AshTestBase::SetUp() executes. - HpsNotifyControllerTestBase(bool initial_dbus_state) - : initial_dbus_state_(initial_dbus_state) {} + // Arguments control the state of the feature and service on controller + // construction. We can't set this value in individual tests since it must be + // done before AshTestBase::SetUp() executes. + HpsNotifyControllerTestBase(bool service_available, + bool service_state, + const std::map<std::string, std::string>& params) + : service_available_(service_available), + service_state_(service_state), + params_(params) {} HpsNotifyControllerTestBase(const HpsNotifyControllerTestBase&) = delete; HpsNotifyControllerTestBase& operator=(const HpsNotifyControllerTestBase&) = delete; ~HpsNotifyControllerTestBase() override = default; void SetUp() override { - scoped_feature_list_.InitAndEnableFeature( - ash::features::kSnoopingProtection); + scoped_feature_list_.InitAndEnableFeatureWithParameters( + ash::features::kSnoopingProtection, params_); chromeos::HpsDBusClient::InitializeFake(); dbus_client_ = chromeos::FakeHpsDBusClient::Get(); - dbus_client_->set_hps_notify_result(initial_dbus_state_); + dbus_client_->set_hps_service_is_available(service_available_); + dbus_client_->set_hps_notify_result(service_state_); AshTestBase::SetUp(); @@ -65,7 +70,9 @@ } protected: - const bool initial_dbus_state_; + const bool service_available_; + const bool service_state_; + const std::map<std::string, std::string> params_; chromeos::FakeHpsDBusClient* dbus_client_ = nullptr; HpsNotifyController* controller_ = nullptr; @@ -73,11 +80,15 @@ base::test::ScopedFeatureList scoped_feature_list_; }; -// A test fixture where no snooper is initially detected. +// A test fixture where no snooper is initially detected (using a minimal set of +// valid params). class HpsNotifyControllerTestAbsent : public HpsNotifyControllerTestBase { public: HpsNotifyControllerTestAbsent() - : HpsNotifyControllerTestBase(/*initial_dbus_state=*/false) {} + : HpsNotifyControllerTestBase( + /*service_available=*/true, + /*service_state=*/false, + /*params=*/{{"filter_config_case", "1"}}) {} }; // Test that icon is hidden by default. @@ -106,11 +117,15 @@ EXPECT_FALSE(controller_->IsIconVisible()); } -// A test fixture where a snooper is initially detected. +// A test fixture where a snooper is initially detected (using a minimal set of +// valid params). class HpsNotifyControllerTestPresent : public HpsNotifyControllerTestBase { public: HpsNotifyControllerTestPresent() - : HpsNotifyControllerTestBase(/*initial_dbus_state=*/true) {} + : HpsNotifyControllerTestBase( + /*service_available=*/true, + /*service_state=*/true, + /*params=*/{{"filter_config_case", "1"}}) {} }; // Test that initial daemon state is considered. @@ -174,4 +189,75 @@ EXPECT_TRUE(controller_->IsIconVisible()); } +// Test that the controller handles service restarts. +TEST_F(HpsNotifyControllerTestPresent, Restarts) { + SimulateUserLogin("testuser@gmail.com"); + SetEnabledPref(true); + + EXPECT_EQ(dbus_client_->hps_notify_count(), 1); + EXPECT_TRUE(controller_->IsIconVisible()); + + // Icon is hidden when service goes down. + dbus_client_->set_hps_service_is_available(false); + controller_->OnShutdown(); + EXPECT_FALSE(controller_->IsIconVisible()); + + // Icon returns when service restarts. + dbus_client_->set_hps_service_is_available(true); + controller_->OnRestart(); + + // Controller now polls the DBus service which responds asynchronously. + base::RunLoop().RunUntilIdle(); + EXPECT_EQ(dbus_client_->hps_notify_count(), 2); + EXPECT_TRUE(controller_->IsIconVisible()); +} + +// Fixture with the DBus service initially unavailable (using a minimal set of +// valid params). +class HpsNotifyControllerTestUnavailable : public HpsNotifyControllerTestBase { + public: + HpsNotifyControllerTestUnavailable() + : HpsNotifyControllerTestBase( + /*service_available=*/false, + /*service_state=*/true, + /*params=*/{{"filter_config_case", "1"}}) {} +}; + +// Test that the controller waits for the DBus service to be available. +TEST_F(HpsNotifyControllerTestUnavailable, WaitForService) { + SimulateUserLogin("testuser@gmail.com"); + SetEnabledPref(true); + + EXPECT_EQ(dbus_client_->hps_notify_count(), 0); + EXPECT_FALSE(controller_->IsIconVisible()); + + dbus_client_->set_hps_service_is_available(true); + controller_->OnRestart(); + + // Controller now polls the DBus service which responds asynchronously. + base::RunLoop().RunUntilIdle(); + EXPECT_EQ(dbus_client_->hps_notify_count(), 1); + EXPECT_TRUE(controller_->IsIconVisible()); +} + +// Fixture with an invalid feature config. +class HpsNotifyControllerTestBadParams : public HpsNotifyControllerTestBase { + public: + HpsNotifyControllerTestBadParams() + : HpsNotifyControllerTestBase( + /*service_available=*/false, + /*service_state=*/true, + /*params=*/{}) {} +}; + +// Test that the controller gracefully handles invalid feature parameters. +TEST_F(HpsNotifyControllerTestBadParams, BadParams) { + SimulateUserLogin("testuser@gmail.com"); + SetEnabledPref(true); + base::RunLoop().RunUntilIdle(); + + EXPECT_EQ(dbus_client_->hps_notify_count(), 0); + EXPECT_FALSE(controller_->IsIconVisible()); +} + } // namespace ash
diff --git a/ash/webui/camera_app_ui/resources/js/face.js b/ash/webui/camera_app_ui/resources/js/face.js index ff22c60..7c09e38d0 100644 --- a/ash/webui/camera_app_ui/resources/js/face.js +++ b/ash/webui/camera_app_ui/resources/js/face.js
@@ -39,9 +39,10 @@ export class FaceOverlay { /** * @param {!Resolution} activeArraySize - * @param {number} sensorOrientation + * @param {number} orientation Counter-clockwise angles to apply rotation to + * the face rectangles. */ - constructor(activeArraySize, sensorOrientation) { + constructor(activeArraySize, orientation) { /** * @const {!Resolution} * @private @@ -52,7 +53,7 @@ * @const {number} * @private */ - this.sensorOrientation_ = sensorOrientation; + this.orientation_ = orientation; /** * @const {!HTMLCanvasElement} @@ -79,7 +80,7 @@ // TODO(b/178344897): Handle zoomed preview. // TODO(b/178344897): Handle cropped preview. - // TODO(b/178344897): Handle screen orientation. + // TODO(b/178344897): Handle screen orientation dynamically. this.ctx_.strokeStyle = RECT_COLOR; for (let i = 0; i < rects.length; i += 4) { @@ -88,8 +89,8 @@ y1 /= this.activeArraySize_.height; x2 /= this.activeArraySize_.width; y2 /= this.activeArraySize_.height; - [x1, y1] = rotate(x1, y1, this.sensorOrientation_); - [x2, y2] = rotate(x2, y2, this.sensorOrientation_); + [x1, y1] = rotate(x1, y1, this.orientation_); + [x2, y2] = rotate(x2, y2, this.orientation_); x1 *= this.canvas_.width; y1 *= this.canvas_.height; x2 *= this.canvas_.width;
diff --git a/ash/webui/camera_app_ui/resources/js/views/camera.js b/ash/webui/camera_app_ui/resources/js/views/camera.js index 03a8967e..cd821c0 100644 --- a/ash/webui/camera_app_ui/resources/js/views/camera.js +++ b/ash/webui/camera_app_ui/resources/js/views/camera.js
@@ -529,7 +529,8 @@ // to take document photo with space key as shortcut. See b/196907822. const checkRefocus = () => { if (!state.get(state.State.CAMERA_CONFIGURING) && state.get(Mode.SCAN) && - this.scanOptions_.isDocumentModeEanbled()) { + this.scanOptions_.isDocumentModeEanbled() && + nav.isTopMostView(this.name)) { dom.getAll('button.shutter', HTMLButtonElement) .forEach((btn) => btn.offsetParent && btn.focus()); }
diff --git a/ash/webui/camera_app_ui/resources/js/views/camera/preview.js b/ash/webui/camera_app_ui/resources/js/views/camera/preview.js index 7b01243..10f7200 100644 --- a/ash/webui/camera_app_ui/resources/js/views/camera/preview.js +++ b/ash/webui/camera_app_ui/resources/js/views/camera/preview.js
@@ -634,9 +634,10 @@ const deviceId = videoTrack.getSettings().deviceId; const activeArraySize = await deviceOperator.getActiveArraySize(deviceId); - const sensorOrientation = - await deviceOperator.getSensorOrientation(deviceId); - this.faceOverlay_ = new FaceOverlay(activeArraySize, sensorOrientation); + const cameraFrameRotation = + await deviceOperator.getCameraFrameRotation(deviceId); + this.faceOverlay_ = + new FaceOverlay(activeArraySize, (360 - cameraFrameRotation) % 360); const updateFace = (mode, rects) => { if (mode ===
diff --git a/ash/webui/camera_app_ui/resources/js/views/dialog.js b/ash/webui/camera_app_ui/resources/js/views/dialog.js index 29bfca1..679f2ac4 100644 --- a/ash/webui/camera_app_ui/resources/js/views/dialog.js +++ b/ash/webui/camera_app_ui/resources/js/views/dialog.js
@@ -16,7 +16,9 @@ * @param {!ViewName} name View name of the dialog. */ constructor(name) { - super(name, true); + super( + name, + {dismissByEsc: true, defaultFocusSelector: '.dialog-positive-button'}); /** * @type {!HTMLButtonElement} @@ -59,11 +61,4 @@ this.negativeButton_.hidden = !cancellable; } } - - /** - * @override - */ - focus() { - this.positiveButton_.focus(); - } }
diff --git a/ash/webui/camera_app_ui/resources/js/views/ptz_panel.js b/ash/webui/camera_app_ui/resources/js/views/ptz_panel.js index a087dd1..3447d21 100644 --- a/ash/webui/camera_app_ui/resources/js/views/ptz_panel.js +++ b/ash/webui/camera_app_ui/resources/js/views/ptz_panel.js
@@ -100,8 +100,8 @@ */ constructor() { super( - ViewName.PTZ_PANEL, /* dismissByEsc */ true, - /* dismissByBkgndClick */ true); + ViewName.PTZ_PANEL, + {dismissByEsc: true, dismissByBackgroundClick: true}); /** * Video track of opened stream having PTZ support.
diff --git a/ash/webui/camera_app_ui/resources/js/views/review.js b/ash/webui/camera_app_ui/resources/js/views/review.js index 0e3a3ec..fdc5457 100644 --- a/ash/webui/camera_app_ui/resources/js/views/review.js +++ b/ash/webui/camera_app_ui/resources/js/views/review.js
@@ -76,7 +76,7 @@ * @public */ constructor(viewName = ViewName.REVIEW) { - super(viewName); + super(viewName, {defaultFocusSelector: '.primary'}); /** * @private {!ViewName} @@ -111,13 +111,6 @@ } /** - * @override - */ - focus() { - this.primaryBtn_.focus(); - } - - /** * @param {!Image|!HTMLImageElement} image * @param {!Blob} blob * @protected
diff --git a/ash/webui/camera_app_ui/resources/js/views/settings.js b/ash/webui/camera_app_ui/resources/js/views/settings.js index c6eb826..8aa92699 100644 --- a/ash/webui/camera_app_ui/resources/js/views/settings.js +++ b/ash/webui/camera_app_ui/resources/js/views/settings.js
@@ -61,7 +61,7 @@ * mapped by element ids. */ constructor(name, itemHandlers = {}) { - super(name, true, true); + super(name, {dismissByEsc: true, dismissByBackgroundClick: true}); dom.getFrom(this.root, '.menu-header button', HTMLButtonElement) .addEventListener('click', () => this.leave());
diff --git a/ash/webui/camera_app_ui/resources/js/views/view.js b/ash/webui/camera_app_ui/resources/js/views/view.js index 92fec0f..e27d69f 100644 --- a/ash/webui/camera_app_ui/resources/js/views/view.js +++ b/ash/webui/camera_app_ui/resources/js/views/view.js
@@ -71,11 +71,19 @@ /** * @param {!ViewName} name Unique name of view which should be same as its DOM * element id. - * @param {boolean=} dismissByEsc Enable dismissible by Esc-key. - * @param {boolean=} dismissByBkgndClick Enable dismissible by - * background-click. + * @param {{ + * dismissByEsc: (boolean|undefined), + * dismissByBackgroundClick: (boolean|undefined), + * defaultFocusSelector: (string|undefined), + * }=} params + * |dismissByEsc| enables dismissible by Esc-key. + * |dismissByBackgroundClick| enables dismissible by background-click. + * |defaultFocusSelector| selects element to be focused in focus(). Focus to + * first element whose tabindex is not -1 when argument is not presented. */ - constructor(name, dismissByEsc = false, dismissByBkgndClick = false) { + constructor( + name, + {dismissByEsc, dismissByBackgroundClick, defaultFocusSelector} = {}) { /** * @const {!ViewName} */ @@ -94,12 +102,19 @@ this.session_ = null; /** - * @type {boolean} + * @const {boolean} * @private */ - this.dismissByEsc_ = dismissByEsc; + this.dismissByEsc_ = dismissByEsc ?? false; - if (dismissByBkgndClick) { + /** + * @const {string} + * @private + */ + this.defaultFocusSelector_ = + defaultFocusSelector ?? '[tabindex]:not([tabindex="-1"])'; + + if (dismissByBackgroundClick) { this.root.addEventListener( 'click', (event) => event.target === this.root && this.leave({bkgnd: true})); @@ -141,7 +156,9 @@ /** * Focuses the default element on the view if applicable. */ - focus() {} + focus() { + this.root.querySelector(this.defaultFocusSelector_)?.focus(); + } /** * Layouts the view.
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_fr.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_fr.xtb index 2389d6f..2b265ea 100644 --- a/ash/webui/camera_app_ui/resources/strings/camera_strings_fr.xtb +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_fr.xtb
@@ -10,6 +10,7 @@ <translation id="1430915738399379752">Imprimer</translation> <translation id="1467231725790366244"><ph name="CAMERA" /> est débranchée.</translation> <translation id="1473110567575736769">Minuteur de 3 secondes</translation> +<translation id="148783771699678004">Déplacement vers le haut à droite</translation> <translation id="1545749641540134597">Scanner le code QR</translation> <translation id="1560052704389894104">GIF</translation> <translation id="1588438908519853928">Standard</translation> @@ -54,6 +55,7 @@ <translation id="3448774564454087943">Impossible d'enregistrer la vidéo, car elle est trop courte</translation> <translation id="346539236881580388">Reprendre</translation> <translation id="3517926952904427380">Impossible de prendre une photo en mode portrait</translation> +<translation id="3566302376254083266">Déplacement vers le haut à gauche</translation> <translation id="3569311554794739032">Voulez-vous vraiment supprimer <ph name="FILE" /> ?</translation> <translation id="3573890771273113519">Passer au mode de numérisation</translation> <translation id="3583444040776960729">Angle inférieur gauche du document</translation> @@ -72,14 +74,17 @@ <translation id="4570032796877367747">Caméra avant</translation> <translation id="4628948037717959914">Photo</translation> <translation id="4649291346448517080">Impossible d'enregistrer le fichier</translation> +<translation id="4695379108709712600">Déplacement vers le haut</translation> <translation id="4890010094662541459">3 x 3</translation> <translation id="491895758387112773">Enregistrement vidéo sur plusieurs flux</translation> <translation id="5057360777601936059">Votre appareil photo est actuellement indisponible. Vérifiez qu'il est bien connecté.</translation> <translation id="5152121255775685072">Accéder à la galerie</translation> +<translation id="5163387177077603948">Déplacement vers la droite</translation> <translation id="520537883758714667">Numérisation de documents désormais disponible</translation> <translation id="5266635337630551423">Angle supérieur gauche du document</translation> <translation id="5317780077021120954">Enregistrer</translation> +<translation id="5320594929574852403">Déplacement vers la gauche</translation> <translation id="5444515100983837161">Placez le document dans le cadre. L'image scannée sera de meilleure qualité si les couleurs du document et de l'arrière-plan sont différentes.</translation> <translation id="5671277269877808209">Carré</translation> <translation id="5746169159649715125">Enregistrer au format PDF</translation> @@ -102,6 +107,7 @@ <translation id="667999046851023355">Document</translation> <translation id="6681668084120808868">Prendre une photo</translation> <translation id="6778482348691154169">Impossible de prendre la photo</translation> +<translation id="6888362557094394345">Déplacement vers le bas</translation> <translation id="695140971690006676">Tout réinitialiser</translation> <translation id="6965382102122355670">OK</translation> <translation id="698156982839284926">3 secondes</translation> @@ -116,12 +122,14 @@ <translation id="7557677699350329807">Passer à la caméra suivante</translation> <translation id="7607002721634913082">Suspendu</translation> <translation id="7608223098072244877">4 par 4</translation> +<translation id="761421184377987513">Déplacement vers le bas à gauche</translation> <translation id="7649070708921625228">Aide</translation> <translation id="7658239707568436148">Annuler</translation> <translation id="7670511624014457267">60 FPS</translation> <translation id="7671804233658741790">Angle inférieur droit du document</translation> <translation id="7726641833034062494">Enregistrer une vidéo normale</translation> <translation id="7748344063862150053">Angle supérieur droit du document</translation> +<translation id="7933675232020478311">Déplacement vers le bas à droite</translation> <translation id="7983668134180549431">Texte détecté.</translation> <translation id="8067883171444229417">Lire la vidéo</translation> <translation id="8120146556401698679">Panoramique, inclinaison, zoom</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_or.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_or.xtb index 2a06a4aa..839e079 100644 --- a/ash/webui/camera_app_ui/resources/strings/camera_strings_or.xtb +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_or.xtb
@@ -10,6 +10,7 @@ <translation id="1430915738399379752">ପ୍ରିଣ୍ଟ କରନ୍ତୁ</translation> <translation id="1467231725790366244"><ph name="CAMERA" />କୁ ଅନପ୍ଲଗ୍ କରାଯାଇଛି।</translation> <translation id="1473110567575736769">3 ସେକେଣ୍ଡର ଟାଇମର୍</translation> +<translation id="148783771699678004">ଶୀର୍ଷ-ଡାହାଣ ପଟକୁ ମୁଭ ହେଉଛି</translation> <translation id="1545749641540134597">QR କୋଡ୍ ସ୍କାନ୍ କରନ୍ତୁ</translation> <translation id="1560052704389894104">GIF</translation> <translation id="1588438908519853928">ସାଧାରଣ</translation> @@ -54,6 +55,7 @@ <translation id="3448774564454087943">ଭିଡିଓଟି ବହୁତ ଛୋଟ ହୋଇଥିବା ଯୋଗୁଁ ଏହା ସେଭ୍ ହୋଇନାହିଁ</translation> <translation id="346539236881580388">ପୁଣି ଉଠାନ୍ତୁ</translation> <translation id="3517926952904427380">ପୋଟ୍ରେଟ୍ ଫଟୋ ଉଠାଇବା ପାଇଁ ଅକ୍ଷମ</translation> +<translation id="3566302376254083266">ଶୀର୍ଷ-ବାମ ପଟକୁ ମୁଭ ହେଉଛି</translation> <translation id="3569311554794739032">ଆପଣ କ'ଣ ପ୍ରକୃତରେ <ph name="FILE" />କୁ କାଢ଼ି ଦେବାକୁ ଚାହୁଁଛନ୍ତି?</translation> <translation id="3573890771273113519">ସ୍କାନ୍ ମୋଡକୁ ସ୍ୱିଚ୍ କରନ୍ତୁ</translation> <translation id="3583444040776960729">ଡକ୍ୟୁମେଣ୍ଟର ନିମ୍ନ-ବାମ ପଟ କୋଣ</translation> @@ -72,14 +74,17 @@ <translation id="4570032796877367747">ସାମ୍ନା କ୍ୟାମେରା</translation> <translation id="4628948037717959914">ଫଟୋ</translation> <translation id="4649291346448517080">ଫାଇଲ୍ ସେଭ୍ କରିବାରେ ଅକ୍ଷମ</translation> +<translation id="4695379108709712600">ଶୀର୍ଷ ଆଡ଼କୁ ମୁଭ ହେଉଛି</translation> <translation id="4890010094662541459">3 x 3</translation> <translation id="491895758387112773">ମଲ୍ଟିଷ୍ଟ୍ରିମ୍ ଭିଡିଓ ରେକର୍ଡିଂ</translation> <translation id="5057360777601936059">ସମ୍ପ୍ରତି, ଆପଣଙ୍କର କ୍ୟାମେରା ଉପଲବ୍ଧ ନାହିଁ। କ୍ୟାମେରା ଠିକ୍ ଭାବରେ ସଂଯୁକ୍ତ ଅଛି କି ନାହିଁ ଦୟାକରି ଯାଞ୍ଚ କରନ୍ତୁ।</translation> <translation id="5152121255775685072">ଗ୍ୟାଲେରୀକୁ ଯାଆନ୍ତୁ</translation> +<translation id="5163387177077603948">ଡାହାଣ ପଟକୁ ମୁଭ ହେଉଛି</translation> <translation id="520537883758714667">ଡକ୍ୟୁମେଣ୍ଟ ସ୍କାନ୍ କରିବା ସୁବିଧା ବର୍ତ୍ତମାନ ଉପଲବ୍ଧ ଅଛି</translation> <translation id="5266635337630551423">ଡକ୍ୟୁମେଣ୍ଟର ଶୀର୍ଷ-ବାମ ପଟ କୋଣ</translation> <translation id="5317780077021120954">ସଞ୍ଚୟ</translation> +<translation id="5320594929574852403">ବାମ ପଟକୁ ମୁଭ ହେଉଛି</translation> <translation id="5444515100983837161">ଡକ୍ୟୁମେଣ୍ଟର ସମସ୍ତ ଧାରକୁ ଫ୍ରେମ୍ ଭିତରେ ରଖନ୍ତୁ। ଯଦି ଡକ୍ୟୁମେଣ୍ଟ ଏବଂ ପୃଷ୍ଠପଟ ଭିନ୍ନ ରଙ୍ଗର ହୋଇଥାଏ ତେବେ ସ୍କାନିଂ ଭଲ କାମ କରେ।</translation> <translation id="5671277269877808209">ବର୍ଗାକାର</translation> <translation id="5746169159649715125">PDF ଭାବରେ ସେଭ୍ କରନ୍ତୁ</translation> @@ -102,6 +107,7 @@ <translation id="667999046851023355">ଡକ୍ୟୁମେଣ୍ଟ</translation> <translation id="6681668084120808868">ଫଟୋ ଉଠାନ୍ତୁ</translation> <translation id="6778482348691154169">ଫଟୋ ଉଠାଇବାରେ ଅକ୍ଷମ</translation> +<translation id="6888362557094394345">ନିମ୍ନ ଆଡ଼କୁ ମୁଭ ହେଉଛି</translation> <translation id="695140971690006676">ସବୁ ରିସେଟ୍ କରନ୍ତୁ</translation> <translation id="6965382102122355670">ଓକେ ବଟନ୍</translation> <translation id="698156982839284926">3 ସେକେଣ୍ଡ</translation> @@ -116,12 +122,14 @@ <translation id="7557677699350329807">ପରବର୍ତ୍ତୀ କ୍ୟାମେରାକୁ ସ୍ୱିଚ୍ କରନ୍ତୁ</translation> <translation id="7607002721634913082">ଅଚଳିତ</translation> <translation id="7608223098072244877">4 ଗୁଣନ 4</translation> +<translation id="761421184377987513">ନିମ୍ନ-ବାମ ପଟକୁ ମୁଭ ହେଉଛି</translation> <translation id="7649070708921625228">ସହାୟତା</translation> <translation id="7658239707568436148">ବାତିଲ୍</translation> <translation id="7670511624014457267">60 FPS</translation> <translation id="7671804233658741790">ଡକ୍ୟୁମେଣ୍ଟର ନିମ୍ନ-ଡାହାଣ ପଟ କୋଣ</translation> <translation id="7726641833034062494">ସାଧାରଣ ଭିଡିଓ ରେକର୍ଡ କରନ୍ତୁ</translation> <translation id="7748344063862150053">ଡକ୍ୟୁମେଣ୍ଟର ଶୀର୍ଷ-ଡାହାଣ ପଟ କୋଣ</translation> +<translation id="7933675232020478311">ନିମ୍ନ-ଡାହାଣ ପଟକୁ ମୁଭ ହେଉଛି</translation> <translation id="7983668134180549431">ଟେକ୍ସଟ୍ ଚିହ୍ନଟ କରାଯାଇଛି।</translation> <translation id="8067883171444229417">ଭିଡିଓ ଚଲାନ୍ତୁ</translation> <translation id="8120146556401698679">ପ୍ୟାନ୍ ଟିଲ୍ଟ ଜୁମ୍</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_ta.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_ta.xtb index aefa1830..9adfe80 100644 --- a/ash/webui/camera_app_ui/resources/strings/camera_strings_ta.xtb +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_ta.xtb
@@ -10,6 +10,7 @@ <translation id="1430915738399379752">அச்சிடுக</translation> <translation id="1467231725790366244"><ph name="CAMERA" /> அகற்றப்பட்டது.</translation> <translation id="1473110567575736769">3 வினாடிகள் டைமர்</translation> +<translation id="148783771699678004">மேல் வலதுபுறம் நகர்கிறது</translation> <translation id="1545749641540134597">QR குறியீட்டை ஸ்கேன் செய்க</translation> <translation id="1560052704389894104">GIF</translation> <translation id="1588438908519853928">இயல்பு</translation> @@ -54,6 +55,7 @@ <translation id="3448774564454087943">மிகவும் சிறியதாக உள்ளதால் வீடியோ சேமிக்கப்படவில்லை</translation> <translation id="346539236881580388">மீண்டும் எடு</translation> <translation id="3517926952904427380">படத்தை நீளவாக்கில் எடுக்க முடியவில்லை</translation> +<translation id="3566302376254083266">மேல் இடதுபுறம் நகர்கிறது</translation> <translation id="3569311554794739032"><ph name="FILE" /> ஃபைலை நிச்சயமாக அகற்ற விரும்புகிறீர்களா?</translation> <translation id="3573890771273113519">ஸ்கேன் பயன்முறைக்கு மாறு</translation> <translation id="3583444040776960729">ஆவணத்தின் கீழ் இடது மூலை</translation> @@ -72,14 +74,17 @@ <translation id="4570032796877367747">முன்பக்கக் கேமரா</translation> <translation id="4628948037717959914">படம்</translation> <translation id="4649291346448517080">ஃபைலைச் சேமிக்க முடியவில்லை</translation> +<translation id="4695379108709712600">மேற்புறம் நகர்கிறது</translation> <translation id="4890010094662541459">3 x 3</translation> <translation id="491895758387112773">மல்டிஸ்ட்ரீம் வீடியோ ரெக்கார்டிங்</translation> <translation id="5057360777601936059">உங்கள் கேமரா தற்போது கிடைக்கவில்லை. கேமரா சரியாக இணைக்கப்பட்டுள்ளதா எனப் பார்க்கவும்.</translation> <translation id="5152121255775685072">கேலரிக்குச் செல்</translation> +<translation id="5163387177077603948">வலதுபுறம் நகர்கிறது</translation> <translation id="520537883758714667">இப்போது ஆவணத்தை ஸ்கேன் செய்யலாம்</translation> <translation id="5266635337630551423">ஆவணத்தின் மேல் இடது மூலை</translation> <translation id="5317780077021120954">சேமி</translation> +<translation id="5320594929574852403">இடதுபுறம் நகர்கிறது</translation> <translation id="5444515100983837161">ஃபிரேமிற்குள் இருக்கும் வகையில் ஆவணத்தைச் சரிசெய்யவும். ஆவணமும் அதன் பின்புலமும் வெவ்வேறு வண்ணங்களாக இருந்தால் நன்றாக ஸ்கேன் செய்யலாம்.</translation> <translation id="5671277269877808209">சதுரம்</translation> <translation id="5746169159649715125">PDFஆக சேமி</translation> @@ -102,6 +107,7 @@ <translation id="667999046851023355">ஆவணம்</translation> <translation id="6681668084120808868">புகைப்படம் எடு</translation> <translation id="6778482348691154169">படம் எடுக்க முடியவில்லை</translation> +<translation id="6888362557094394345">கீழ்ப்புறம் நகர்கிறது</translation> <translation id="695140971690006676">அனைத்தையும் மீட்டமை</translation> <translation id="6965382102122355670">சரி</translation> <translation id="698156982839284926">3 வினாடிகள்</translation> @@ -116,12 +122,14 @@ <translation id="7557677699350329807">அடுத்த கேமராவுக்கு மாறு</translation> <translation id="7607002721634913082">இடைநிறுத்தப்பட்டது</translation> <translation id="7608223098072244877">4 x 4</translation> +<translation id="761421184377987513">கீழ் இடதுபுறம் நகர்கிறது</translation> <translation id="7649070708921625228">உதவி</translation> <translation id="7658239707568436148">ரத்து செய்</translation> <translation id="7670511624014457267">60 FPS</translation> <translation id="7671804233658741790">ஆவணத்தின் கீழ் வலது மூலை</translation> <translation id="7726641833034062494">சாதாரண வீடியோவை ரெக்கார்டு செய்யும்</translation> <translation id="7748344063862150053">ஆவணத்தின் மேல் வலது மூலை</translation> +<translation id="7933675232020478311">கீழ் வலதுபுறம் நகர்கிறது</translation> <translation id="7983668134180549431">உரை கண்டறியப்பட்டது.</translation> <translation id="8067883171444229417">வீடியோவை பிளே செய்</translation> <translation id="8120146556401698679">நகர்வு சாய்வு அளவை மாற்று</translation>
diff --git a/ash/webui/camera_app_ui/resources/utils/cca.py b/ash/webui/camera_app_ui/resources/utils/cca.py index 679c629..74a8763 100755 --- a/ash/webui/camera_app_ui/resources/utils/cca.py +++ b/ash/webui/camera_app_ui/resources/utils/cca.py
@@ -93,6 +93,7 @@ extract_resources_pak_cmd = [ pak_util_script, 'extract', + '--raw', os.path.join(target_dir, 'resources.pak'), '-o', tmp_dir, @@ -102,6 +103,7 @@ extract_camera_pak_cmd = [ pak_util_script, 'extract', + '--raw', os.path.join(target_dir, 'gen/ash/ash_camera_app_resources.pak'), '-o', tmp_dir,
diff --git a/ash/webui/camera_app_ui/resources/views/main.html b/ash/webui/camera_app_ui/resources/views/main.html index 2ea3e57..0431d71 100644 --- a/ash/webui/camera_app_ui/resources/views/main.html +++ b/ash/webui/camera_app_ui/resources/views/main.html
@@ -592,7 +592,7 @@ <div id="view-flash"> <div id="processing-indicator" class="centered-overlay"> <div class="icon"></div> - <div class="msg" i18n-text="msg_processing_image"></div> + <div class="msg" tabindex="0" i18n-text="msg_processing_image"></div> </div> </div> <div id="view-splash"></div>
diff --git a/ash/webui/eche_app_ui/eche_notification_generator.cc b/ash/webui/eche_app_ui/eche_notification_generator.cc index 8590791..7b184a5 100644 --- a/ash/webui/eche_app_ui/eche_notification_generator.cc +++ b/ash/webui/eche_app_ui/eche_notification_generator.cc
@@ -20,6 +20,7 @@ const std::u16string& title, const std::u16string& message, mojom::WebNotificationType type) { + PA_LOG(INFO) << "echeapi EcheNotificationGenerator ShowNotification"; launch_app_helper_->ShowNotification( title, message, std::make_unique<LaunchAppHelper::NotificationInfo>(
diff --git a/ash/webui/eche_app_ui/eche_signaler.cc b/ash/webui/eche_app_ui/eche_signaler.cc index 850e24cd..9e4bdfc 100644 --- a/ash/webui/eche_app_ui/eche_signaler.cc +++ b/ash/webui/eche_app_ui/eche_signaler.cc
@@ -5,6 +5,7 @@ #include "ash/webui/eche_app_ui/eche_signaler.h" #include "ash/webui/eche_app_ui/proto/exo_messages.pb.h" +#include "chromeos/components/multidevice/logging/logging.h" namespace ash { namespace eche_app { @@ -21,6 +22,7 @@ } void EcheSignaler::SendSignalingMessage(const std::vector<uint8_t>& signal) { + PA_LOG(INFO) << "echeapi EcheSignaler SendSignalingMessage"; std::string encoded_signal(signal.begin(), signal.end()); proto::SignalingRequest request; request.set_data(encoded_signal); @@ -31,11 +33,13 @@ void EcheSignaler::SetSignalingMessageObserver( mojo::PendingRemote<mojom::SignalingMessageObserver> observer) { + PA_LOG(INFO) << "echeapi EcheSignaler SetSignalingMessageObserver"; observer_.reset(); observer_.Bind(std::move(observer)); } void EcheSignaler::TearDownSignaling() { + PA_LOG(INFO) << "echeapi EcheSignaler TearDownSignaling"; proto::SignalingAction action; action.set_action_type(proto::ActionType::ACTION_TEAR_DOWN); proto::ExoMessage message; @@ -57,12 +61,16 @@ message.ParseFromString(payload); std::string signal; if (message.has_request()) { + PA_LOG(INFO) << "echeapi EcheSignaler OnMessageReceived has request"; signal = message.request().data(); } else if (message.has_response()) { + PA_LOG(INFO) << "echeapi EcheSignaler OnMessageReceived has response"; signal = message.response().data(); } else { + PA_LOG(INFO) << "echeapi EcheSignaler OnMessageReceived return"; return; } + PA_LOG(INFO) << "echeapi EcheSignaler OnMessageReceived"; std::vector<uint8_t> encoded_signal(signal.begin(), signal.end()); observer_->OnReceivedSignalingMessage(encoded_signal); }
diff --git a/ash/webui/eche_app_ui/eche_uid_provider.cc b/ash/webui/eche_app_ui/eche_uid_provider.cc index 50baf36..5fec7cd 100644 --- a/ash/webui/eche_app_ui/eche_uid_provider.cc +++ b/ash/webui/eche_app_ui/eche_uid_provider.cc
@@ -26,6 +26,7 @@ void EcheUidProvider::GetUid( base::OnceCallback<void(const std::string&)> callback) { + PA_LOG(INFO) << "echeapi EcheUidProvider GetUid"; if (!uid_.empty()) { std::move(callback).Run(uid_); return;
diff --git a/ash/webui/eche_app_ui/resources/browser_proxy.js b/ash/webui/eche_app_ui/resources/browser_proxy.js index f0d2f25..001afad 100644 --- a/ash/webui/eche_app_ui/resources/browser_proxy.js +++ b/ash/webui/eche_app_ui/resources/browser_proxy.js
@@ -57,88 +57,104 @@ /*rethrow_errors=*/ false); // Register bi-directional SEND_SIGNAL pipes. -guestMessagePipe.registerHandler(Message.SEND_SIGNAL, async (signal) => { -signalMessageExchanger.sendSignalingMessage(signal); -}); - -signalingMessageObserverRouter.onReceivedSignalingMessage.addListener( - (signal) => { - guestMessagePipe.sendMessage( - Message.SEND_SIGNAL, {/** @type {Uint8Array} */signal}); + guestMessagePipe.registerHandler(Message.SEND_SIGNAL, async (signal) => { + console.log('echeapi browser_proxy.js sendSignalingMessage'); + signalMessageExchanger.sendSignalingMessage(signal); }); -// Register TEAR_DOWN_SIGNAL pipes. -guestMessagePipe.registerHandler(Message.TEAR_DOWN_SIGNAL, async () => { - signalMessageExchanger.tearDownSignaling(); -}); + signalingMessageObserverRouter.onReceivedSignalingMessage.addListener( + (signal) => { + console.log('echeapi browser_proxy.js onReceivedSignalingMessage'); + guestMessagePipe.sendMessage( + Message.SEND_SIGNAL, {/** @type {Uint8Array} */ signal}); + }); -// window.close() doesn't work from the iframe. -guestMessagePipe.registerHandler(Message.CLOSE_WINDOW, async () => { - window.close(); -}); + // Register TEAR_DOWN_SIGNAL pipes. + guestMessagePipe.registerHandler(Message.TEAR_DOWN_SIGNAL, async () => { + console.log('echeapi browser_proxy.js tearDownSignaling'); + signalMessageExchanger.tearDownSignaling(); + }); -// Register GET_SYSTEM_INFO pipes for wrapping getSystemInfo async api call. -guestMessagePipe.registerHandler(Message.GET_SYSTEM_INFO, async () => { - return /** @type {!SystemInfo} */ (await systemInfo.getSystemInfo()); -}); + // window.close() doesn't work from the iframe. + guestMessagePipe.registerHandler(Message.CLOSE_WINDOW, async () => { + console.log('echeapi browser_proxy.js window.close'); + window.close(); + }); -// Register GET_UID pipes for wrapping getUid async api call. -guestMessagePipe.registerHandler(Message.GET_UID, async () => { - return /** @type {!UidInfo} */ (await uidGenerator.getUid()); -}); + // Register GET_SYSTEM_INFO pipes for wrapping getSystemInfo async api call. + guestMessagePipe.registerHandler(Message.GET_SYSTEM_INFO, async () => { + console.log('echeapi browser_proxy.js getSystemInfo'); + return /** @type {!SystemInfo} */ (await systemInfo.getSystemInfo()); + }); -// Add Screen Backlight state listener and send state via pipes. -systemInfoObserverRouter.onScreenBacklightStateChanged.addListener( - (state) => { - guestMessagePipe.sendMessage( - Message.SCREEN_BACKLIGHT_STATE, {/** @type {number} */state}); -}); + // Register GET_UID pipes for wrapping getUid async api call. + guestMessagePipe.registerHandler(Message.GET_UID, async () => { + console.log('echeapi browser_proxy.js getUid'); + return /** @type {!UidInfo} */ (await uidGenerator.getUid()); + }); -// Add tablet mode listener and send result via pipes. -systemInfoObserverRouter.onReceivedTabletModeChanged.addListener( - (isTabletMode) => { - guestMessagePipe.sendMessage( - Message.TABLET_MODE, {/** @type {boolean} */isTabletMode}); -}); + // Add Screen Backlight state listener and send state via pipes. + systemInfoObserverRouter.onScreenBacklightStateChanged.addListener((state) => { + console.log('echeapi browser_proxy.js onScreenBacklightStateChanged'); + guestMessagePipe.sendMessage( + Message.SCREEN_BACKLIGHT_STATE, {/** @type {number} */ state}); + }); -guestMessagePipe.registerHandler(Message.SHOW_NOTIFICATION, async (message) => { - // The C++ layer uses std::u16string, which use 16 bit characters. JS - // strings support either 8 or 16 bit characters, and must be converted - // to an array of 16 bit character codes that match std::u16string. - const titleArray = {data: Array.from(message.title, c => c.charCodeAt())}; - const messageArray = {data: Array.from(message.message, c => c.charCodeAt())}; - notificationGenerator.showNotification( - titleArray, messageArray, message.notificationType); -}); + // Add tablet mode listener and send result via pipes. + systemInfoObserverRouter.onReceivedTabletModeChanged.addListener( + (isTabletMode) => { + console.log('echeapi browser_proxy.js onReceivedTabletModeChanged'); + guestMessagePipe.sendMessage( + Message.TABLET_MODE, {/** @type {boolean} */ isTabletMode}); + }); -guestMessagePipe.registerHandler( - Message.TIME_HISTOGRAM_MESSAGE, async (message) => { - const histogramData = /** @type {TimeHistogram} */ (message); - chrome.metricsPrivate.recordTime( - histogramData.histogram, histogramData.value); - }); + guestMessagePipe.registerHandler( + Message.SHOW_NOTIFICATION, async (message) => { + // The C++ layer uses std::u16string, which use 16 bit characters. JS + // strings support either 8 or 16 bit characters, and must be converted + // to an array of 16 bit character codes that match std::u16string. + const titleArray = { + data: Array.from(message.title, c => c.charCodeAt()) + }; + const messageArray = { + data: Array.from(message.message, c => c.charCodeAt()) + }; + console.log('echeapi browser_proxy.js showNotification'); + notificationGenerator.showNotification( + titleArray, messageArray, message.notificationType); + }); -guestMessagePipe.registerHandler( - Message.ENUM_HISTOGRAM_MESSAGE, async (message) => { - const histogramData = /** @type {EnumHistogram} */ (message); - chrome.metricsPrivate.recordEnumerationValue( - histogramData.histogram, histogramData.value, histogramData.maxValue); - }); + guestMessagePipe.registerHandler( + Message.TIME_HISTOGRAM_MESSAGE, async (message) => { + console.log('echeapi browser_proxy.js recordTime'); + const histogramData = /** @type {TimeHistogram} */ (message); + chrome.metricsPrivate.recordTime( + histogramData.histogram, histogramData.value); + }); -// We can't access hash change event inside iframe so parse the notification -// info from the anchor part of the url when hash is changed and send them to -// untrusted section via message pipes. -function locationHashChanged() { - const urlParams = window.location.hash ? - new URLSearchParams(window.location.hash.substring(1)) : - new URLSearchParams(window.location.search.substring(1)); - const notificationId = urlParams.get('notification_id'); - const packageName = urlParams.get('package_name'); - const timestamp = urlParams.get('timestamp'); - const userId = urlParams.get('user_id'); - const notificationInfo = /** @type {!NotificationInfo} */( - {notificationId, packageName, timestamp, userId}); - guestMessagePipe.sendMessage(Message.NOTIFICATION_INFO, notificationInfo); -} + guestMessagePipe.registerHandler( + Message.ENUM_HISTOGRAM_MESSAGE, async (message) => { + console.log('echeapi browser_proxy.js recordEnumerationValue'); + const histogramData = /** @type {EnumHistogram} */ (message); + chrome.metricsPrivate.recordEnumerationValue( + histogramData.histogram, histogramData.value, + histogramData.maxValue); + }); + + // We can't access hash change event inside iframe so parse the notification + // info from the anchor part of the url when hash is changed and send them to + // untrusted section via message pipes. + function locationHashChanged() { + const urlParams = window.location.hash ? + new URLSearchParams(window.location.hash.substring(1)) : + new URLSearchParams(window.location.search.substring(1)); + const notificationId = urlParams.get('notification_id'); + const packageName = urlParams.get('package_name'); + const timestamp = urlParams.get('timestamp'); + const userId = urlParams.get('user_id'); + const notificationInfo = /** @type {!NotificationInfo} */ ( + {notificationId, packageName, timestamp, userId}); + guestMessagePipe.sendMessage(Message.NOTIFICATION_INFO, notificationInfo); + } window.onhashchange = locationHashChanged;
diff --git a/ash/webui/eche_app_ui/resources/receiver.js b/ash/webui/eche_app_ui/resources/receiver.js index fcffa20..fd17229 100644 --- a/ash/webui/eche_app_ui/resources/receiver.js +++ b/ash/webui/eche_app_ui/resources/receiver.js
@@ -41,60 +41,73 @@ // The implementation of echeapi.d.ts const EcheApiBindingImpl = new class { closeWindow() { + console.log('echeapi receiver.js closeWindow'); parentMessagePipe.sendMessage(Message.CLOSE_WINDOW); } onWebRtcSignalReceived(callback) { + console.log('echeapi receiver.js onWebRtcSignalReceived'); signalingCallback = callback; } sendWebRtcSignal(signaling) { + console.log('echeapi receiver.js sendWebRtcSignal'); parentMessagePipe.sendMessage(Message.SEND_SIGNAL, signaling); } tearDownSignal() { + console.log('echeapi receiver.js tearDownSignal'); parentMessagePipe.sendMessage(Message.TEAR_DOWN_SIGNAL); } getSystemInfo() { + console.log('echeapi receiver.js getSystemInfo'); return /** @type {!SystemInfo} */ ( parentMessagePipe.sendMessage(Message.GET_SYSTEM_INFO)); } getLocalUid() { + console.log('echeapi receiver.js getLocalUid'); return /** @type {!UidInfo} */ ( parentMessagePipe.sendMessage(Message.GET_UID)); } onScreenBacklightStateChanged(callback) { + console.log('echeapi receiver.js onScreenBacklightStateChanged'); screenBacklightCallback = callback; } onReceivedTabletModeChanged(callback) { + console.log('echeapi receiver.js onReceivedTabletModeChanged'); tabletModeCallback = callback; } onReceivedNotification(callback) { + console.log('echeapi receiver.js onReceivedNotification'); notificationCallback = callback; } showNotification(title, message, notificationType) { + console.log('echeapi receiver.js showNotification'); parentMessagePipe.sendMessage( Message.SHOW_NOTIFICATION, {title, message, notificationType}); } sendTimeHistogram(histogram, value) { + console.log('echeapi receiver.js sendTimeHistogram'); parentMessagePipe.sendMessage( Message.TIME_HISTOGRAM_MESSAGE, {histogram, value}); } sendEnumHistogram(histogram, value, maxValue) { + console.log('echeapi receiver.js sendEnumHistogram'); parentMessagePipe.sendMessage( Message.ENUM_HISTOGRAM_MESSAGE, {histogram, value, maxValue}); } }; // Declare module echeapi and bind the implementation to echeapi.d.ts +console.log('echeapi receiver.js start bind the implementation of echeapi'); const echeapi = {}; echeapi.webrtc = {}; echeapi.webrtc.sendSignal = @@ -123,3 +136,4 @@ echeapi.system.sendEnumHistogram = EcheApiBindingImpl.sendEnumHistogram.bind(EcheApiBindingImpl); window['echeapi'] = echeapi; +console.log('echeapi receiver.js finish bind the implementation of echeapi');
diff --git a/ash/webui/eche_app_ui/system_info_provider.cc b/ash/webui/eche_app_ui/system_info_provider.cc index 69ef4d97..113f3d2 100644 --- a/ash/webui/eche_app_ui/system_info_provider.cc +++ b/ash/webui/eche_app_ui/system_info_provider.cc
@@ -59,6 +59,7 @@ void SystemInfoProvider::GetSystemInfo( base::OnceCallback<void(const std::string&)> callback) { + PA_LOG(INFO) << "echeapi SystemInfoProvider GetSystemInfo"; base::DictionaryValue json_dictionary; json_dictionary.SetString(kJsonDeviceNameKey, system_info_->GetDeviceName()); json_dictionary.SetString(kJsonBoardNameKey, system_info_->GetBoardName()); @@ -77,6 +78,7 @@ void SystemInfoProvider::SetSystemInfoObserver( mojo::PendingRemote<mojom::SystemInfoObserver> observer) { + PA_LOG(INFO) << "echeapi SystemInfoProvider SetSystemInfoObserver"; observer_remote_.reset(); observer_remote_.Bind(std::move(observer)); } @@ -89,6 +91,7 @@ void SystemInfoProvider::OnScreenBacklightStateChanged( ash::ScreenBacklightState screen_state) { + PA_LOG(INFO) << "echeapi SystemInfoProvider OnScreenBacklightStateChanged"; if (!observer_remote_.is_bound()) return; @@ -96,6 +99,7 @@ } void SystemInfoProvider::SetTabletModeChanged(bool enabled) { + PA_LOG(INFO) << "echeapi SystemInfoProvider SetTabletModeChanged"; if (!observer_remote_.is_bound()) return;
diff --git a/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_fullscreen_element.html b/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_fullscreen_element.html index 2f9d0e4..4d18b80 100644 --- a/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_fullscreen_element.html +++ b/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_fullscreen_element.html
@@ -53,7 +53,7 @@ background: rgba(var(--google-blue-300-rgb), 0.08); } - #layoutButtons .fullscreen-button[aria-selected='true'] { + #layoutButtons .fullscreen-button[aria-pressed='true'] { background: var(--google-blue-300); color: var(--google-grey-900); } @@ -109,13 +109,13 @@ <div id="layoutButtons"> <cr-button class="fullscreen-button" on-click="onClickLayout_" data-layout="FILL" - aria-selected$="[[getLayoutAriaSelected_(selectedLayout_, 'FILL')]]"> + aria-pressed$="[[getLayoutAriaPressed_(selectedLayout_, 'FILL')]]"> <iron-icon icon="personalization:layout_fill"></iron-icon> <span>[[i18n('fill')]]</span> </cr-button> <cr-button class="fullscreen-button" on-click="onClickLayout_" data-layout="CENTER" - aria-selected$="[[getLayoutAriaSelected_(selectedLayout_, 'CENTER')]]"> + aria-pressed$="[[getLayoutAriaPressed_(selectedLayout_, 'CENTER')]]"> <iron-icon icon="personalization:layout_center"></iron-icon> <span>[[i18n('center')]]</span> </cr-button>
diff --git a/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_fullscreen_element.ts b/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_fullscreen_element.ts index 7f1b714..83bf87c 100644 --- a/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_fullscreen_element.ts +++ b/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_fullscreen_element.ts
@@ -162,7 +162,7 @@ this.selectedLayout_ = layout; } - private getLayoutAriaSelected_( + private getLayoutAriaPressed_( selectedLayout: WallpaperLayout, str: 'FILL'|'CENTER'): string { assert(str === 'FILL' || str === 'CENTER'); const layout = getWallpaperLayoutEnum(str);
diff --git a/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_selected_element.html b/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_selected_element.html index d698efc..0f11589d 100644 --- a/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_selected_element.html +++ b/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_selected_element.html
@@ -160,13 +160,13 @@ <template is="dom-if" if="[[showWallpaperOptions_]]"> <div id="wallpaperOptions"> <cr-button id="fill" data-layout="FILL" on-click="onClickLayoutIcon_" - aria-selected$="[[getFillAriaSelected_(image_)]]"> + aria-pressed$="[[getFillAriaPressed_(image_)]]"> <iron-icon icon="[[fillIcon_]]"></iron-icon> <div class="text">[[i18n('fill')]]</div> </cr-button> <cr-button id="center" data-layout="CENTER" on-click="onClickLayoutIcon_" - aria-selected$="[[getCenterAriaSelected_(image_)]]"> + aria-pressed$="[[getCenterAriaPressed_(image_)]]"> <iron-icon icon="[[centerIcon_]]"></iron-icon> <div class="text">[[i18n('center')]]</div> </cr-button>
diff --git a/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_selected_element.js b/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_selected_element.js index 95d26ed..3f2572f 100644 --- a/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_selected_element.js +++ b/ash/webui/personalization_app/resources/trusted/wallpaper/wallpaper_selected_element.js
@@ -372,7 +372,7 @@ * @return {string} * @private */ - getCenterAriaSelected_(image) { + getCenterAriaPressed_(image) { return (!!image && image.layout === WallpaperLayout.kCenter).toString(); } @@ -381,7 +381,7 @@ * @return {string} * @private */ - getFillAriaSelected_(image) { + getFillAriaPressed_(image) { return (!!image && image.layout === WallpaperLayout.kCenterCropped) .toString(); }
diff --git a/base/BUILD.gn b/base/BUILD.gn index 6aa5067..5a0d922 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn
@@ -1387,7 +1387,6 @@ ":cfi_buildflags", ":clang_profiling_buildflags", ":debugging_buildflags", - ":feature_list_buildflags", ":logging_buildflags", ":orderfile_buildflags", ":profiler_buildflags", @@ -2495,19 +2494,6 @@ ] } -buildflag_header("feature_list_buildflags") { - header = "feature_list_buildflags.h" - - if (is_chromeos_ash) { - flags = [ - "ENABLE_BANNED_BASE_FEATURE_PREFIX=true", - "BANNED_BASE_FEATURE_PREFIX=\"CrOSLateBoot\"", - ] - } else { - flags = [ "ENABLE_BANNED_BASE_FEATURE_PREFIX=false" ] - } -} - buildflag_header("logging_buildflags") { header = "logging_buildflags.h" @@ -3293,7 +3279,6 @@ ":base", ":base_stack_sampling_profiler_test_util", ":base_unittests_tasktraits", - ":feature_list_buildflags", ":i18n", ":sanitizer_buildflags", "//base/allocator:buildflags",
diff --git a/base/allocator/partition_allocator/partition_alloc_forward.h b/base/allocator/partition_allocator/partition_alloc_forward.h index 938ea38..38aaa66 100644 --- a/base/allocator/partition_allocator/partition_alloc_forward.h +++ b/base/allocator/partition_allocator/partition_alloc_forward.h
@@ -28,7 +28,8 @@ // platforms, as Chrome's requirement is C++14 as of 2020. #if defined(__STDCPP_DEFAULT_NEW_ALIGNMENT__) constexpr size_t kAlignment = - std::max(alignof(max_align_t), __STDCPP_DEFAULT_NEW_ALIGNMENT__); + std::max(alignof(max_align_t), + static_cast<size_t>(__STDCPP_DEFAULT_NEW_ALIGNMENT__)); #else constexpr size_t kAlignment = alignof(max_align_t); #endif
diff --git a/base/allocator/partition_allocator/partition_tls.h b/base/allocator/partition_allocator/partition_tls.h index 181b6a00..7afa23e 100644 --- a/base/allocator/partition_allocator/partition_tls.h +++ b/base/allocator/partition_allocator/partition_tls.h
@@ -26,12 +26,47 @@ #if defined(OS_POSIX) || defined(OS_FUCHSIA) typedef pthread_key_t PartitionTlsKey; +#if defined(OS_MAC) && defined(ARCH_CPU_X86_64) +namespace { + +ALWAYS_INLINE void* FastTlsGet(intptr_t index) { + // On macOS, pthread_getspecific() is in libSystem, so a call to it has to go + // through PLT. However, and contrary to some other platforms, *all* TLS keys + // are in a static array in the thread structure. So they are *always* at a + // fixed offset from the segment register holding the thread structure + // address. + // + // We could use _pthread_getspecific_direct(), but it is not + // exported. However, on all macOS versions we support, the TLS array is at + // %gs. This is used in V8 to back up InternalGetExistingThreadLocal(), and + // can also be seen by looking at pthread_getspecific() disassembly: + // + // libsystem_pthread.dylib`pthread_getspecific: + // libsystem_pthread.dylib[0x7ff800316099] <+0>: movq %gs:(,%rdi,8), %rax + // libsystem_pthread.dylib[0x7ff8003160a2] <+9>: retq + // + // This function is essentially inlining the content of pthread_getspecific() + // here. + intptr_t result; + asm("movq %%gs:(,%1,8), %0;" : "=r"(result) : "r"(index)); + + return reinterpret_cast<void*>(result); +} + +} // namespace +#endif // defined(OS_MAC) && defined(ARCH_CPU_X86_64) + ALWAYS_INLINE bool PartitionTlsCreate(PartitionTlsKey* key, void (*destructor)(void*)) { return !pthread_key_create(key, destructor); } ALWAYS_INLINE void* PartitionTlsGet(PartitionTlsKey key) { +#if defined(OS_MAC) && defined(ARCH_CPU_X86_64) + PA_DCHECK(pthread_getspecific(key) == FastTlsGet(key)); + return FastTlsGet(key); +#else return pthread_getspecific(key); +#endif } ALWAYS_INLINE void PartitionTlsSet(PartitionTlsKey key, void* value) { int ret = pthread_setspecific(key, value);
diff --git a/base/allocator/partition_allocator/spinning_mutex.h b/base/allocator/partition_allocator/spinning_mutex.h index 74f39ca6..5e4a44e 100644 --- a/base/allocator/partition_allocator/spinning_mutex.h +++ b/base/allocator/partition_allocator/spinning_mutex.h
@@ -103,9 +103,13 @@ private: void LockSlow() EXCLUSIVE_LOCK_FUNCTION(); - // Same as SpinLock, not scientifically calibrated. Consider lowering later, - // as the slow path has better characteristics than SpinLocks's. - static constexpr int kSpinCount = 1000; + // See below, the latency of YIELD_PROCESSOR can be as high as ~150 + // cycles. Meanwhile, sleeping costs a few us. Spinning 64 times at 3GHz would + // cost 150 * 64 / 3e9 ~= 3.2us. + // + // This applies to Linux kernels, on x86_64. On ARM we might want to spin + // more. + static constexpr int kSpinCount = 64; #if defined(PA_HAS_FAST_MUTEX) @@ -157,10 +161,14 @@ // Note: Per the intel optimization manual // (https://software.intel.com/content/dam/develop/public/us/en/documents/64-ia-32-architectures-optimization-manual.pdf), // the "pause" instruction is more costly on Skylake Client than on previous - // (and subsequent?) architectures. The latency is found to be 141 cycles - // there. This is not a big issue here as we don't spin long enough for this - // to become a problem, as we spend a maximum of ~141k cycles ~= 47us at - // 3GHz in "pause". + // architectures. The latency is found to be 141 cycles + // there (from ~10 on previous ones, nice 14x). + // + // According to Agner Fog's instruction tables, the latency is still >100 + // cycles on Ice Lake, and from other sources, seems to be high as well on + // Adler Lake. Separately, it is (from + // https://agner.org/optimize/instruction_tables.pdf) also high on AMD Zen 3 + // (~65). So just assume that it's this way for most x86_64 architectures. // // Also, loop several times here, following the guidelines in section 2.3.4 // of the manual, "Pause latency in Skylake Client Microarchitecture". @@ -168,7 +176,7 @@ YIELD_PROCESSOR; tries++; } - constexpr int kMaxBackoff = 64; + constexpr int kMaxBackoff = 16; backoff = std::min(kMaxBackoff, backoff << 1); } while (tries < kSpinCount);
diff --git a/base/android/java/src/org/chromium/base/library_loader/ModernLinker.java b/base/android/java/src/org/chromium/base/library_loader/ModernLinker.java index 4710a6d..5685377 100644 --- a/base/android/java/src/org/chromium/base/library_loader/ModernLinker.java +++ b/base/android/java/src/org/chromium/base/library_loader/ModernLinker.java
@@ -229,6 +229,16 @@ throw new UnsatisfiedLinkError(message); } + public static void reportDlopenExtTime(long millis) { + RecordHistogram.recordTimesHistogram( + "ChromiumAndroidLinker.ModernLinkerDlopenExtTime", millis); + } + + public static void reportIteratePhdrTime(long millis) { + RecordHistogram.recordTimesHistogram( + "ChromiumAndroidLinker.ModernLinkerIteratePhdrTime", millis); + } + // Intentionally omitting @NativeMethods because generation of the stubs it requires (as // GEN_JNI.java) is disabled by the @JniIgnoreNatives. interface Natives {
diff --git a/base/android/java/src/org/chromium/base/library_loader/ModernLinkerJni.java b/base/android/java/src/org/chromium/base/library_loader/ModernLinkerJni.java index 40bda2b..b629582 100644 --- a/base/android/java/src/org/chromium/base/library_loader/ModernLinkerJni.java +++ b/base/android/java/src/org/chromium/base/library_loader/ModernLinkerJni.java
@@ -4,6 +4,7 @@ package org.chromium.base.library_loader; +import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JniIgnoreNatives; /** @@ -13,6 +14,8 @@ */ @JniIgnoreNatives class ModernLinkerJni implements ModernLinker.Natives { + private static final String TAG = "ModernLinkerJni"; + @Override public boolean loadLibrary( String libFilePath, Linker.LibInfo libInfo, boolean spawnRelroRegion) { @@ -33,4 +36,14 @@ String libFilePath, Linker.LibInfo libInfo, boolean spawnRelroRegion); private static native boolean nativeUseRelros(Linker.LibInfo libInfo); private static native int nativeGetRelroSharingResult(); + + @CalledByNative + public static void reportDlopenExtTime(long millis) { + ModernLinker.reportDlopenExtTime(millis); + } + + @CalledByNative + public static void reportIteratePhdrTime(long millis) { + ModernLinker.reportIteratePhdrTime(millis); + } }
diff --git a/base/android/linker/modern_linker_jni.cc b/base/android/linker/modern_linker_jni.cc index 0f2f8b5..97300cb 100644 --- a/base/android/linker/modern_linker_jni.cc +++ b/base/android/linker/modern_linker_jni.cc
@@ -21,6 +21,7 @@ #include <sys/stat.h> #include <sys/syscall.h> #include <sys/types.h> +#include <time.h> #include <unistd.h> #include <limits> @@ -47,11 +48,59 @@ namespace { // Record of the Java VM passed to JNI_OnLoad(). -static JavaVM* s_java_vm = nullptr; +JavaVM* s_java_vm = nullptr; // Guarded by |mLock| in Linker.java. RelroSharingStatus s_relro_sharing_status = RelroSharingStatus::NOT_ATTEMPTED; +// Calls the ModernLinker Java methods to record the time intervals in UMA. The +// calls are made only once pre process, hence there is no need to cache the +// values obtained from JNIEnv. The class must *not* be reused across different +// Java->native calls because the |jclass| reference may become invalid in this +// case. +class LoadTimeReporterJni : public LoadTimeReporter { + public: + LoadTimeReporterJni(JNIEnv* env, jclass modern_linker_jni_class) + : env_(env), class_(modern_linker_jni_class) {} + + void reportDlopenExtTime(int64_t millis) const override { + env_->CallStaticVoidMethod( + class_, env_->GetStaticMethodID(class_, "reportDlopenExtTime", "(J)V"), + millis); + } + + void reportIteratePhdrTime(int64_t millis) const override { + env_->CallStaticVoidMethod( + class_, + env_->GetStaticMethodID(class_, "reportIteratePhdrTime", "(J)V"), + millis); + } + + private: + // Not copyable or movable. + LoadTimeReporterJni(const LoadTimeReporterJni&) = delete; + LoadTimeReporterJni& operator=(const LoadTimeReporterJni&) = delete; + + JNIEnv* env_; + jclass class_; +}; + +constexpr int64_t kMillisecondsPerSecond = 1'000; +constexpr int64_t kNanosecondsPerMillisecond = 1'000'000; + +int64_t GetMillisNow() { + struct timespec ts; + if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) { + PLOG_ERROR("clock_gettime"); + return 0; + } + + int64_t result = ts.tv_sec; + result *= kMillisecondsPerSecond; + result += (ts.tv_nsec / kNanosecondsPerMillisecond); + return result; +} + } // namespace // Starting with API level 26 (Android O) the following functions from @@ -273,7 +322,9 @@ return true; } -bool NativeLibInfo::LoadWithDlopenExt(const String& path, void** handle) { +bool NativeLibInfo::LoadWithDlopenExt(const String& path, + const LoadTimeReporter& reporter, + void** handle) { LOG_INFO("Entering"); // The address range must be reserved during initialization in Linker.java. @@ -288,6 +339,7 @@ auto* address = reinterpret_cast<void*>(load_address_); // Invoke android_dlopen_ext. + int64_t ticks_initial = GetMillisNow(); void* local_handle = nullptr; if (!AndroidDlopenExt(address, reservation_size, path.c_str(), &local_handle)) { @@ -295,6 +347,8 @@ munmap(address, load_size_); return false; } + int64_t ticks_after_dlopen_ext = GetMillisNow(); + reporter.reportDlopenExtTime(ticks_after_dlopen_ext - ticks_initial); // Determine the library address ranges and the RELRO region. if (!FindRelroAndLibraryRangesInElf()) { @@ -303,6 +357,7 @@ LOG_ERROR("Could not find RELRO in the loaded library: %s", path.c_str()); abort(); } + reporter.reportIteratePhdrTime(GetMillisNow() - ticks_after_dlopen_ext); // Release the unused parts of the memory reservation. TrimMapping(load_address_, reservation_size, load_size_); @@ -399,10 +454,11 @@ } bool NativeLibInfo::LoadLibrary(const String& library_path, - bool spawn_relro_region) { + bool spawn_relro_region, + const LoadTimeReporter& reporter) { // Load the library. void* handle = nullptr; - if (!LoadWithDlopenExt(library_path, &handle)) { + if (!LoadWithDlopenExt(library_path, reporter, &handle)) { LOG_ERROR("Failed to load native library: %s", library_path.c_str()); return false; } @@ -542,7 +598,8 @@ return false; String library_path(env, jdlopen_ext_path); - if (!lib_info.LoadLibrary(library_path, spawn_relro_region)) { + LoadTimeReporterJni reporter = {env, clazz}; + if (!lib_info.LoadLibrary(library_path, spawn_relro_region, reporter)) { return false; } return true;
diff --git a/base/android/linker/modern_linker_jni.h b/base/android/linker/modern_linker_jni.h index 56c2976..e39217fd 100644 --- a/base/android/linker/modern_linker_jni.h +++ b/base/android/linker/modern_linker_jni.h
@@ -33,6 +33,22 @@ struct SharedMemoryFunctions; +// Abstract class for NativeLibInfo to use for miscellaneous time measurements. +// Best to be provided with values from the same clock as +// SystemClock.uptimeMillis(). +// +// *Not* threadsafe. +class LoadTimeReporter { + public: + virtual ~LoadTimeReporter() = default; + + // Report the time it took to run android_dlopen_ext(). + virtual void reportDlopenExtTime(int64_t milliseconds_since_boot) const = 0; + + // Report the time it took to find the RELRO region using dl_iterate_phdr(). + virtual void reportIteratePhdrTime(int64_t milliseconds_since_boot) const = 0; +}; + // Holds address ranges of the loaded native library, its RELRO region, along // with the RELRO FD identifying the shared memory region. Carries the same // members as the Java-side LibInfo (without mLibFilePath), allowing to @@ -75,7 +91,9 @@ // provide RELRO FD before it starts processing arbitrary input. For example, // an App Zygote can create a RELRO FD in a sufficiently trustworthy way to // make the Browser/Privileged processes share the region with it. - bool LoadLibrary(const String& library_path, bool spawn_relro_region); + bool LoadLibrary(const String& library_path, + bool spawn_relro_region, + const LoadTimeReporter& reporter); // Finds the RELRO region in the native library identified by // |this->load_address()| and replaces it with the shared memory region @@ -132,7 +150,9 @@ // Loads and initializes the load address ranges: |load_address_|, // |load_size_|. Assumes that the memory range is reserved (in Linker.java). - bool LoadWithDlopenExt(const String& path, void** handle); + bool LoadWithDlopenExt(const String& path, + const LoadTimeReporter& reporter, + void** handle); // Initializes |relro_fd_| with a newly created read-only shared memory region // sized as the library's RELRO and with identical data.
diff --git a/base/feature_list.h b/base/feature_list.h index 4c978ef9..0cef8ac 100644 --- a/base/feature_list.h +++ b/base/feature_list.h
@@ -14,7 +14,6 @@ #include "base/base_export.h" #include "base/containers/flat_map.h" -#include "base/feature_list_buildflags.h" #include "base/gtest_prod_util.h" #include "base/memory/raw_ptr.h" #include "base/metrics/field_trial_params.h" @@ -41,17 +40,7 @@ // for a given feature name - generally defined as a constant global variable or // file static. It should never be used as a constexpr as it breaks // pointer-based identity lookup. -// Note: New code should use CONSTINIT on the base::Feature declaration. struct BASE_EXPORT Feature { - constexpr Feature(const char* name, FeatureState default_state) - : name(name), default_state(default_state) { -#if BUILDFLAG(ENABLE_BANNED_BASE_FEATURE_PREFIX) - if (StringPiece(name).find(BUILDFLAG(BANNED_BASE_FEATURE_PREFIX)) == 0) { - LOG(FATAL) << "Invalid feature name " << name << " starts with " - << BUILDFLAG(BANNED_BASE_FEATURE_PREFIX); - } -#endif // BUILDFLAG(ENABLE_BANNED_BASE_FEATURE_PREFIX) - } // The name of the feature. This should be unique to each feature and is used // for enabling/disabling features via command line flags and experiments. // It is strongly recommended to use CamelCase style for feature names, e.g.
diff --git a/base/feature_list_unittest.cc b/base/feature_list_unittest.cc index 5cddec583..8a8e093b 100644 --- a/base/feature_list_unittest.cc +++ b/base/feature_list_unittest.cc
@@ -10,13 +10,11 @@ #include <vector> #include "base/cxx17_backports.h" -#include "base/feature_list_buildflags.h" #include "base/format_macros.h" #include "base/memory/read_only_shared_memory_region.h" #include "base/metrics/field_trial.h" #include "base/metrics/persistent_memory_allocator.h" #include "base/ranges/algorithm.h" -#include "base/strings/strcat.h" #include "base/strings/string_piece.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" @@ -676,20 +674,6 @@ EXPECT_EQ(associated_trial2, trial2); } -#if BUILDFLAG(ENABLE_BANNED_BASE_FEATURE_PREFIX) && \ - defined(GTEST_HAS_DEATH_TEST) -using FeatureListDeathTest = FeatureListTest; -TEST_F(FeatureListDeathTest, DiesWithBadFeatureName) { - EXPECT_DEATH( - Feature( - StrCat({BUILDFLAG(BANNED_BASE_FEATURE_PREFIX), "MyFeature"}).c_str(), - FEATURE_DISABLED_BY_DEFAULT), - StrCat({"Invalid feature name ", BUILDFLAG(BANNED_BASE_FEATURE_PREFIX), - "MyFeature"})); -} -#endif // BUILDFLAG(ENABLE_BANNED_BASE_FEATURE_PREFIX) && - // defined(GTEST_HAS_DEATH_TEST) - TEST(FeatureListAccessorTest, DefaultStates) { auto feature_list = std::make_unique<FeatureList>(); auto feature_list_accessor = feature_list->ConstructAccessor();
diff --git a/base/memory/raw_ptr.h b/base/memory/raw_ptr.h index 5200c15..faf3c260 100644 --- a/base/memory/raw_ptr.h +++ b/base/memory/raw_ptr.h
@@ -35,8 +35,13 @@ namespace base { -// NOTE: All methods should be ALWAYS_INLINE. raw_ptr is meant to be a -// lightweight replacement of a raw pointer, hence performance is critical. +// NOTE: All methods should be `ALWAYS_INLINE NO_STACK_PROTECTOR`. +// ALWAYS_INLINE: raw_ptr is meant to be a lightweight replacement of a raw +// pointer, hence performance is critical. +// NO_STACK_PROTECTOR: This annotation is required to avoid failures when a +// raw_ptr is inside a NO_STACK_PROTECTOR function. +// TODO(https://crbug.com/1274129): Remove NO_STACK_PROTECTOR. +#define RAW_PTR_FUNC_ATTRIBUTES ALWAYS_INLINE NO_STACK_PROTECTOR namespace internal { // These classes/structures are part of the raw_ptr implementation. @@ -45,38 +50,41 @@ struct RawPtrNoOpImpl { // Wraps a pointer. template <typename T> - static ALWAYS_INLINE T* WrapRawPtr(T* ptr) { + static RAW_PTR_FUNC_ATTRIBUTES T* WrapRawPtr(T* ptr) { return ptr; } // Notifies the allocator when a wrapped pointer is being removed or replaced. template <typename T> - static ALWAYS_INLINE void ReleaseWrappedPtr(T*) {} + static RAW_PTR_FUNC_ATTRIBUTES void ReleaseWrappedPtr(T*) {} // Unwraps the pointer, while asserting that memory hasn't been freed. The // function is allowed to crash on nullptr. template <typename T> - static ALWAYS_INLINE T* SafelyUnwrapPtrForDereference(T* wrapped_ptr) { + static RAW_PTR_FUNC_ATTRIBUTES T* SafelyUnwrapPtrForDereference( + T* wrapped_ptr) { return wrapped_ptr; } // Unwraps the pointer, while asserting that memory hasn't been freed. The // function must handle nullptr gracefully. template <typename T> - static ALWAYS_INLINE T* SafelyUnwrapPtrForExtraction(T* wrapped_ptr) { + static RAW_PTR_FUNC_ATTRIBUTES T* SafelyUnwrapPtrForExtraction( + T* wrapped_ptr) { return wrapped_ptr; } // Unwraps the pointer, without making an assertion on whether memory was // freed or not. template <typename T> - static ALWAYS_INLINE T* UnsafelyUnwrapPtrForComparison(T* wrapped_ptr) { + static RAW_PTR_FUNC_ATTRIBUTES T* UnsafelyUnwrapPtrForComparison( + T* wrapped_ptr) { return wrapped_ptr; } // Upcasts the wrapped pointer. template <typename To, typename From> - static ALWAYS_INLINE constexpr To* Upcast(From* wrapped_ptr) { + static RAW_PTR_FUNC_ATTRIBUTES constexpr To* Upcast(From* wrapped_ptr) { static_assert(std::is_convertible<From*, To*>::value, "From must be convertible to To."); // Note, this cast may change the address if upcasting to base that lies in @@ -86,19 +94,20 @@ // Advance the wrapped pointer by |delta| bytes. template <typename T> - static ALWAYS_INLINE T* Advance(T* wrapped_ptr, ptrdiff_t delta_elems) { + static RAW_PTR_FUNC_ATTRIBUTES T* Advance(T* wrapped_ptr, + ptrdiff_t delta_elems) { return wrapped_ptr + delta_elems; } // Returns a copy of a wrapped pointer, without making an assertion on whether // memory was freed or not. template <typename T> - static ALWAYS_INLINE T* Duplicate(T* wrapped_ptr) { + static RAW_PTR_FUNC_ATTRIBUTES T* Duplicate(T* wrapped_ptr) { return wrapped_ptr; } // This is for accounting only, used by unit tests. - static ALWAYS_INLINE void IncrementSwapCountForTest() {} + static RAW_PTR_FUNC_ATTRIBUTES void IncrementSwapCountForTest() {} }; #if BUILDFLAG(USE_BACKUP_REF_PTR) @@ -112,7 +121,8 @@ // modify the same smart pointer object without synchronization, a data race // will occur. - static ALWAYS_INLINE bool IsSupportedAndNotNull(const volatile void* cv_ptr) { + static RAW_PTR_FUNC_ATTRIBUTES bool IsSupportedAndNotNull( + const volatile void* cv_ptr) { // |const volatile| qualifiers are used only to compile with |T*| pointers // passed by the caller that may have those qualifiers. From now on, the // pointer value is used, but is never dereferenced. @@ -171,7 +181,7 @@ // Wraps a pointer. template <typename T> - static ALWAYS_INLINE T* WrapRawPtr(T* ptr) { + static RAW_PTR_FUNC_ATTRIBUTES T* WrapRawPtr(T* ptr) { if (IsSupportedAndNotNull(ptr)) { #if DCHECK_IS_ON() || BUILDFLAG(ENABLE_BACKUP_REF_PTR_SLOW_CHECKS) CHECK(ptr != nullptr); @@ -190,7 +200,7 @@ // Notifies the allocator when a wrapped pointer is being removed or replaced. template <typename T> - static ALWAYS_INLINE void ReleaseWrappedPtr(T* wrapped_ptr) { + static RAW_PTR_FUNC_ATTRIBUTES void ReleaseWrappedPtr(T* wrapped_ptr) { if (IsSupportedAndNotNull(wrapped_ptr)) { #if DCHECK_IS_ON() || BUILDFLAG(ENABLE_BACKUP_REF_PTR_SLOW_CHECKS) CHECK(wrapped_ptr != nullptr); @@ -208,7 +218,8 @@ // Unwraps the pointer, while asserting that memory hasn't been freed. The // function is allowed to crash on nullptr. template <typename T> - static ALWAYS_INLINE T* SafelyUnwrapPtrForDereference(T* wrapped_ptr) { + static RAW_PTR_FUNC_ATTRIBUTES T* SafelyUnwrapPtrForDereference( + T* wrapped_ptr) { #if DCHECK_IS_ON() || BUILDFLAG(ENABLE_BACKUP_REF_PTR_SLOW_CHECKS) if (IsSupportedAndNotNull(wrapped_ptr)) { CHECK(wrapped_ptr != nullptr); @@ -221,20 +232,22 @@ // Unwraps the pointer, while asserting that memory hasn't been freed. The // function must handle nullptr gracefully. template <typename T> - static ALWAYS_INLINE T* SafelyUnwrapPtrForExtraction(T* wrapped_ptr) { + static RAW_PTR_FUNC_ATTRIBUTES T* SafelyUnwrapPtrForExtraction( + T* wrapped_ptr) { return wrapped_ptr; } // Unwraps the pointer, without making an assertion on whether memory was // freed or not. template <typename T> - static ALWAYS_INLINE T* UnsafelyUnwrapPtrForComparison(T* wrapped_ptr) { + static RAW_PTR_FUNC_ATTRIBUTES T* UnsafelyUnwrapPtrForComparison( + T* wrapped_ptr) { return wrapped_ptr; } // Upcasts the wrapped pointer. template <typename To, typename From> - static ALWAYS_INLINE constexpr To* Upcast(From* wrapped_ptr) { + static RAW_PTR_FUNC_ATTRIBUTES constexpr To* Upcast(From* wrapped_ptr) { static_assert(std::is_convertible<From*, To*>::value, "From must be convertible to To."); // Note, this cast may change the address if upcasting to base that lies in @@ -244,7 +257,8 @@ // Advance the wrapped pointer by |delta| bytes. template <typename T> - static ALWAYS_INLINE T* Advance(T* wrapped_ptr, ptrdiff_t delta_elem) { + static RAW_PTR_FUNC_ATTRIBUTES T* Advance(T* wrapped_ptr, + ptrdiff_t delta_elem) { #if DCHECK_IS_ON() || BUILDFLAG(ENABLE_BACKUP_REF_PTR_SLOW_CHECKS) if (IsSupportedAndNotNull(wrapped_ptr)) CHECK(IsValidDelta(wrapped_ptr, delta_elem * sizeof(T))); @@ -258,12 +272,12 @@ // memory was freed or not. // This method increments the reference count of the allocation slot. template <typename T> - static ALWAYS_INLINE T* Duplicate(T* wrapped_ptr) { + static RAW_PTR_FUNC_ATTRIBUTES T* Duplicate(T* wrapped_ptr) { return WrapRawPtr(wrapped_ptr); } // This is for accounting only, used by unit tests. - static ALWAYS_INLINE void IncrementSwapCountForTest() {} + static RAW_PTR_FUNC_ATTRIBUTES void IncrementSwapCountForTest() {} private: // We've evaluated several strategies (inline nothing, various parts, or @@ -374,17 +388,18 @@ #if BUILDFLAG(USE_BACKUP_REF_PTR) // BackupRefPtr requires a non-trivial default constructor, destructor, etc. - constexpr ALWAYS_INLINE raw_ptr() noexcept : wrapped_ptr_(nullptr) {} + constexpr RAW_PTR_FUNC_ATTRIBUTES raw_ptr() noexcept + : wrapped_ptr_(nullptr) {} - raw_ptr(const raw_ptr& p) noexcept + RAW_PTR_FUNC_ATTRIBUTES raw_ptr(const raw_ptr& p) noexcept : wrapped_ptr_(Impl::Duplicate(p.wrapped_ptr_)) {} - raw_ptr(raw_ptr&& p) noexcept { + RAW_PTR_FUNC_ATTRIBUTES raw_ptr(raw_ptr&& p) noexcept { wrapped_ptr_ = p.wrapped_ptr_; p.wrapped_ptr_ = nullptr; } - raw_ptr& operator=(const raw_ptr& p) { + RAW_PTR_FUNC_ATTRIBUTES raw_ptr& operator=(const raw_ptr& p) { // Duplicate before releasing, in case the pointer is assigned to itself. T* new_ptr = Impl::Duplicate(p.wrapped_ptr_); Impl::ReleaseWrappedPtr(wrapped_ptr_); @@ -392,7 +407,7 @@ return *this; } - raw_ptr& operator=(raw_ptr&& p) { + RAW_PTR_FUNC_ATTRIBUTES raw_ptr& operator=(raw_ptr&& p) { if (LIKELY(this != &p)) { Impl::ReleaseWrappedPtr(wrapped_ptr_); wrapped_ptr_ = p.wrapped_ptr_; @@ -401,7 +416,7 @@ return *this; } - ALWAYS_INLINE ~raw_ptr() noexcept { + RAW_PTR_FUNC_ATTRIBUTES ~raw_ptr() noexcept { Impl::ReleaseWrappedPtr(wrapped_ptr_); // Work around external issues where raw_ptr is used after destruction. wrapped_ptr_ = nullptr; @@ -414,30 +429,31 @@ // // TODO(lukasza): Always initialize |wrapped_ptr_|. Fix resulting build // errors. Analyze performance impact. - constexpr raw_ptr() noexcept = default; + constexpr RAW_PTR_FUNC_ATTRIBUTES raw_ptr() noexcept = default; // In addition to nullptr_t ctor above, raw_ptr needs to have these // as |=default| or |constexpr| to avoid hitting -Wglobal-constructors in // cases like this: // struct SomeStruct { int int_field; raw_ptr<int> ptr_field; }; // SomeStruct g_global_var = { 123, nullptr }; - raw_ptr(const raw_ptr&) noexcept = default; - raw_ptr(raw_ptr&&) noexcept = default; - raw_ptr& operator=(const raw_ptr&) noexcept = default; - raw_ptr& operator=(raw_ptr&&) noexcept = default; + RAW_PTR_FUNC_ATTRIBUTES raw_ptr(const raw_ptr&) noexcept = default; + RAW_PTR_FUNC_ATTRIBUTES raw_ptr(raw_ptr&&) noexcept = default; + RAW_PTR_FUNC_ATTRIBUTES raw_ptr& operator=(const raw_ptr&) noexcept = default; + RAW_PTR_FUNC_ATTRIBUTES raw_ptr& operator=(raw_ptr&&) noexcept = default; - ~raw_ptr() = default; + RAW_PTR_FUNC_ATTRIBUTES ~raw_ptr() = default; #endif // BUILDFLAG(USE_BACKUP_REF_PTR) // Deliberately implicit, because raw_ptr is supposed to resemble raw ptr. // NOLINTNEXTLINE(google-explicit-constructor) - constexpr ALWAYS_INLINE raw_ptr(std::nullptr_t) noexcept + constexpr RAW_PTR_FUNC_ATTRIBUTES raw_ptr(std::nullptr_t) noexcept : wrapped_ptr_(nullptr) {} // Deliberately implicit, because raw_ptr is supposed to resemble raw ptr. // NOLINTNEXTLINE(google-explicit-constructor) - ALWAYS_INLINE raw_ptr(T* p) noexcept : wrapped_ptr_(Impl::WrapRawPtr(p)) {} + RAW_PTR_FUNC_ATTRIBUTES raw_ptr(T* p) noexcept + : wrapped_ptr_(Impl::WrapRawPtr(p)) {} // Deliberately implicit in order to support implicit upcast. template <typename U, @@ -445,7 +461,7 @@ std::is_convertible<U*, T*>::value && !std::is_void<typename std::remove_cv<T>::type>::value>> // NOLINTNEXTLINE(google-explicit-constructor) - ALWAYS_INLINE raw_ptr(const raw_ptr<U, Impl>& ptr) noexcept + RAW_PTR_FUNC_ATTRIBUTES raw_ptr(const raw_ptr<U, Impl>& ptr) noexcept : wrapped_ptr_( Impl::Duplicate(Impl::template Upcast<T, U>(ptr.wrapped_ptr_))) {} // Deliberately implicit in order to support implicit upcast. @@ -454,19 +470,19 @@ std::is_convertible<U*, T*>::value && !std::is_void<typename std::remove_cv<T>::type>::value>> // NOLINTNEXTLINE(google-explicit-constructor) - ALWAYS_INLINE raw_ptr(raw_ptr<U, Impl>&& ptr) noexcept + RAW_PTR_FUNC_ATTRIBUTES raw_ptr(raw_ptr<U, Impl>&& ptr) noexcept : wrapped_ptr_(Impl::template Upcast<T, U>(ptr.wrapped_ptr_)) { #if BUILDFLAG(USE_BACKUP_REF_PTR) ptr.wrapped_ptr_ = nullptr; #endif } - ALWAYS_INLINE raw_ptr& operator=(std::nullptr_t) noexcept { + RAW_PTR_FUNC_ATTRIBUTES raw_ptr& operator=(std::nullptr_t) noexcept { Impl::ReleaseWrappedPtr(wrapped_ptr_); wrapped_ptr_ = nullptr; return *this; } - ALWAYS_INLINE raw_ptr& operator=(T* p) noexcept { + RAW_PTR_FUNC_ATTRIBUTES raw_ptr& operator=(T* p) noexcept { Impl::ReleaseWrappedPtr(wrapped_ptr_); wrapped_ptr_ = Impl::WrapRawPtr(p); return *this; @@ -477,7 +493,8 @@ typename Unused = std::enable_if_t< std::is_convertible<U*, T*>::value && !std::is_void<typename std::remove_cv<T>::type>::value>> - ALWAYS_INLINE raw_ptr& operator=(const raw_ptr<U, Impl>& ptr) noexcept { + RAW_PTR_FUNC_ATTRIBUTES raw_ptr& operator=( + const raw_ptr<U, Impl>& ptr) noexcept { // Make sure that pointer isn't assigned to itself (look at pointer address, // not its value). #if DCHECK_IS_ON() || BUILDFLAG(ENABLE_BACKUP_REF_PTR_SLOW_CHECKS) @@ -493,7 +510,7 @@ typename Unused = std::enable_if_t< std::is_convertible<U*, T*>::value && !std::is_void<typename std::remove_cv<T>::type>::value>> - ALWAYS_INLINE raw_ptr& operator=(raw_ptr<U, Impl>&& ptr) noexcept { + RAW_PTR_FUNC_ATTRIBUTES raw_ptr& operator=(raw_ptr<U, Impl>&& ptr) noexcept { // Make sure that pointer isn't assigned to itself (look at pointer address, // not its value). #if DCHECK_IS_ON() || BUILDFLAG(ENABLE_BACKUP_REF_PTR_SLOW_CHECKS) @@ -510,50 +527,52 @@ // Avoid using. The goal of raw_ptr is to be as close to raw pointer as // possible, so use it only if absolutely necessary (e.g. for const_cast). - ALWAYS_INLINE T* get() const { return GetForExtraction(); } + RAW_PTR_FUNC_ATTRIBUTES T* get() const { return GetForExtraction(); } - explicit ALWAYS_INLINE operator bool() const { return !!wrapped_ptr_; } + explicit RAW_PTR_FUNC_ATTRIBUTES operator bool() const { + return !!wrapped_ptr_; + } template <typename U = T, typename Unused = std::enable_if_t< !std::is_void<typename std::remove_cv<U>::type>::value>> - ALWAYS_INLINE U& operator*() const { + RAW_PTR_FUNC_ATTRIBUTES U& operator*() const { return *GetForDereference(); } - ALWAYS_INLINE T* operator->() const { return GetForDereference(); } + RAW_PTR_FUNC_ATTRIBUTES T* operator->() const { return GetForDereference(); } // Deliberately implicit, because raw_ptr is supposed to resemble raw ptr. // NOLINTNEXTLINE(runtime/explicit) - ALWAYS_INLINE operator T*() const { return GetForExtraction(); } + RAW_PTR_FUNC_ATTRIBUTES operator T*() const { return GetForExtraction(); } template <typename U> - explicit ALWAYS_INLINE operator U*() const { + explicit RAW_PTR_FUNC_ATTRIBUTES operator U*() const { // This operator may be invoked from static_cast, meaning the types may not // be implicitly convertible, hence the need for static_cast here. return static_cast<U*>(GetForExtraction()); } - ALWAYS_INLINE raw_ptr& operator++() { + RAW_PTR_FUNC_ATTRIBUTES raw_ptr& operator++() { wrapped_ptr_ = Impl::Advance(wrapped_ptr_, 1); return *this; } - ALWAYS_INLINE raw_ptr& operator--() { + RAW_PTR_FUNC_ATTRIBUTES raw_ptr& operator--() { wrapped_ptr_ = Impl::Advance(wrapped_ptr_, -1); return *this; } - ALWAYS_INLINE raw_ptr operator++(int /* post_increment */) { + RAW_PTR_FUNC_ATTRIBUTES raw_ptr operator++(int /* post_increment */) { raw_ptr result = *this; ++(*this); return result; } - ALWAYS_INLINE raw_ptr operator--(int /* post_decrement */) { + RAW_PTR_FUNC_ATTRIBUTES raw_ptr operator--(int /* post_decrement */) { raw_ptr result = *this; --(*this); return result; } - ALWAYS_INLINE raw_ptr& operator+=(ptrdiff_t delta_elems) { + RAW_PTR_FUNC_ATTRIBUTES raw_ptr& operator+=(ptrdiff_t delta_elems) { wrapped_ptr_ = Impl::Advance(wrapped_ptr_, delta_elems); return *this; } - ALWAYS_INLINE raw_ptr& operator-=(ptrdiff_t delta_elems) { + RAW_PTR_FUNC_ATTRIBUTES raw_ptr& operator-=(ptrdiff_t delta_elems) { return *this += -delta_elems; } @@ -571,48 +590,53 @@ // because a comparison operator defined inline would not be allowed to call // `raw_ptr<U>`'s private `GetForComparison()` method. template <typename U, typename V, typename I> - friend ALWAYS_INLINE bool operator==(const raw_ptr<U, I>& lhs, - const raw_ptr<V, I>& rhs); + friend RAW_PTR_FUNC_ATTRIBUTES bool operator==(const raw_ptr<U, I>& lhs, + const raw_ptr<V, I>& rhs); template <typename U> - friend ALWAYS_INLINE bool operator!=(const raw_ptr& lhs, - const raw_ptr<U, Impl>& rhs) { + friend RAW_PTR_FUNC_ATTRIBUTES bool operator!=(const raw_ptr& lhs, + const raw_ptr<U, Impl>& rhs) { return !(lhs == rhs); } // Comparisons with U*. These operators also handle the case where the RHS is // T*. template <typename U> - friend ALWAYS_INLINE bool operator==(const raw_ptr& lhs, U* rhs) { + friend RAW_PTR_FUNC_ATTRIBUTES bool operator==(const raw_ptr& lhs, U* rhs) { return lhs.GetForComparison() == rhs; } template <typename U> - friend ALWAYS_INLINE bool operator!=(const raw_ptr& lhs, U* rhs) { + friend RAW_PTR_FUNC_ATTRIBUTES bool operator!=(const raw_ptr& lhs, U* rhs) { return !(lhs == rhs); } template <typename U> - friend ALWAYS_INLINE bool operator==(U* lhs, const raw_ptr& rhs) { + friend RAW_PTR_FUNC_ATTRIBUTES bool operator==(U* lhs, const raw_ptr& rhs) { return rhs == lhs; // Reverse order to call the operator above. } template <typename U> - friend ALWAYS_INLINE bool operator!=(U* lhs, const raw_ptr& rhs) { + friend RAW_PTR_FUNC_ATTRIBUTES bool operator!=(U* lhs, const raw_ptr& rhs) { return rhs != lhs; // Reverse order to call the operator above. } // Comparisons with `std::nullptr_t`. - friend ALWAYS_INLINE bool operator==(const raw_ptr& lhs, std::nullptr_t) { + friend RAW_PTR_FUNC_ATTRIBUTES bool operator==(const raw_ptr& lhs, + std::nullptr_t) { return !lhs; } - friend ALWAYS_INLINE bool operator!=(const raw_ptr& lhs, std::nullptr_t) { + friend RAW_PTR_FUNC_ATTRIBUTES bool operator!=(const raw_ptr& lhs, + std::nullptr_t) { return !!lhs; // Use !! otherwise the costly implicit cast will be used. } - friend ALWAYS_INLINE bool operator==(std::nullptr_t, const raw_ptr& rhs) { + friend RAW_PTR_FUNC_ATTRIBUTES bool operator==(std::nullptr_t, + const raw_ptr& rhs) { return !rhs; } - friend ALWAYS_INLINE bool operator!=(std::nullptr_t, const raw_ptr& rhs) { + friend RAW_PTR_FUNC_ATTRIBUTES bool operator!=(std::nullptr_t, + const raw_ptr& rhs) { return !!rhs; // Use !! otherwise the costly implicit cast will be used. } - friend ALWAYS_INLINE void swap(raw_ptr& lhs, raw_ptr& rhs) noexcept { + friend RAW_PTR_FUNC_ATTRIBUTES void swap(raw_ptr& lhs, + raw_ptr& rhs) noexcept { Impl::IncrementSwapCountForTest(); std::swap(lhs.wrapped_ptr_, rhs.wrapped_ptr_); } @@ -621,19 +645,19 @@ // This getter is meant for situations where the pointer is meant to be // dereferenced. It is allowed to crash on nullptr (it may or may not), // because it knows that the caller will crash on nullptr. - ALWAYS_INLINE T* GetForDereference() const { + RAW_PTR_FUNC_ATTRIBUTES T* GetForDereference() const { return Impl::SafelyUnwrapPtrForDereference(wrapped_ptr_); } // This getter is meant for situations where the raw pointer is meant to be // extracted outside of this class, but not necessarily with an intention to // dereference. It mustn't crash on nullptr. - ALWAYS_INLINE T* GetForExtraction() const { + RAW_PTR_FUNC_ATTRIBUTES T* GetForExtraction() const { return Impl::SafelyUnwrapPtrForExtraction(wrapped_ptr_); } // This getter is meant *only* for situations where the pointer is meant to be // compared (guaranteeing no dereference or extraction outside of this class). // Any verifications can and should be skipped for performance reasons. - ALWAYS_INLINE T* GetForComparison() const { + RAW_PTR_FUNC_ATTRIBUTES T* GetForComparison() const { return Impl::UnsafelyUnwrapPtrForComparison(wrapped_ptr_); } @@ -644,8 +668,8 @@ }; template <typename U, typename V, typename I> -ALWAYS_INLINE bool operator==(const raw_ptr<U, I>& lhs, - const raw_ptr<V, I>& rhs) { +RAW_PTR_FUNC_ATTRIBUTES bool operator==(const raw_ptr<U, I>& lhs, + const raw_ptr<V, I>& rhs) { return lhs.GetForComparison() == rhs.GetForComparison(); }
diff --git a/base/metrics/field_trial_params_unittest.nc b/base/metrics/field_trial_params_unittest.nc index e0a0ff5..4c6005e3 100644 --- a/base/metrics/field_trial_params_unittest.nc +++ b/base/metrics/field_trial_params_unittest.nc
@@ -8,8 +8,7 @@ #include "base/feature_list.h" #include "base/metrics/field_trial_params.h" -constexpr base::Feature kFeature{ - "NoCompileFeature", base::FEATURE_DISABLED_BY_DEFAULT}; +constexpr base::Feature kFeature{"NoCompileFeature"}; enum Param { FOO, BAR };
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index c843063..3f34641 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -7.20211130.2.1 +7.20211130.3.2
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index 3cff4e7..3f34641 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -7.20211130.1.1 +7.20211130.3.2
diff --git a/build/lacros/mojo_connection_lacros_launcher.py b/build/lacros/mojo_connection_lacros_launcher.py index c537183..53fcc67 100755 --- a/build/lacros/mojo_connection_lacros_launcher.py +++ b/build/lacros/mojo_connection_lacros_launcher.py
@@ -29,8 +29,12 @@ import argparse import array import contextlib +import getpass +import grp import os import pathlib +import pwd +import resource import socket import sys import subprocess @@ -55,12 +59,12 @@ def _ReceiveFDs(sock): """Receives FDs from ash-chrome that will be used to launch lacros-chrome. - Args: - sock: A connected unix domain socket. + Args: + sock: A connected unix domain socket. - Returns: - File objects for the mojo connection and maybe startup data file. - """ + Returns: + File objects for the mojo connection and maybe startup data file. + """ # This function is borrowed from with modifications: # https://docs.python.org/3/library/socket.html#socket.socket.recvmsg fds = array.array("i") # Array of ints @@ -106,15 +110,44 @@ def _MaybeClosing(fileobj): """Returns closing context manager, if given fileobj is not None. - If the given fileobj is none, return nullcontext. - """ + If the given fileobj is none, return nullcontext. + """ return (contextlib.closing if fileobj else NullContext)(fileobj) +def _ApplyCgroups(): + """Applies cgroups used in ChromeOS to lacros chrome as well.""" + # Cgroup directories taken from ChromeOS session_manager job configuration. + UI_FREEZER_CGROUP_DIR = '/sys/fs/cgroup/freezer/ui' + UI_CPU_CGROUP_DIR = '/sys/fs/cgroup/cpu/ui' + pid = os.getpid() + with open(os.path.join(UI_CPU_CGROUP_DIR, 'tasks'), 'a') as f: + f.write(str(pid) + '\n') + with open(os.path.join(UI_FREEZER_CGROUP_DIR, 'cgroup.procs'), 'a') as f: + f.write(str(pid) + '\n') + + +def _PreExec(uid, gid, groups): + """Set environment up for running the chrome binary.""" + # Nice and realtime priority values taken ChromeOSs session_manager job + # configuration. + resource.setrlimit(resource.RLIMIT_NICE, (40, 40)) + resource.setrlimit(resource.RLIMIT_RTPRIO, (10, 10)) + os.setgroups(groups) + os.setgid(gid) + os.setuid(uid) + + def Main(): arg_parser = argparse.ArgumentParser() arg_parser.usage = __doc__ arg_parser.add_argument( + '-r', + '--root-env-setup', + action='store_true', + help='Set typical cgroups and environment for chrome. ' + 'If this is set, this script must be run as root.') + arg_parser.add_argument( '-s', '--socket-path', type=pathlib.Path, @@ -126,14 +159,26 @@ assert 'XDG_RUNTIME_DIR' in os.environ assert os.environ.get('EGL_PLATFORM') == 'surfaceless' + if flags.root_env_setup: + # Check if we are actually root and error otherwise. + assert getpass.getuser() == 'root', \ + 'Root required environment flag specified, but user is not root.' + # Apply necessary cgroups to our own process, so they will be inherited by + # lacros chrome. + _ApplyCgroups() + else: + print('WARNING: Running chrome without appropriate environment. ' + 'This may affect performance test results. ' + 'Set -r and run as root to avoid this.') + with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as sock: sock.connect(flags.socket_path.as_posix()) legacy_mojo_connection, startup_connection, mojo_connection = ( _ReceiveFDs(sock)) with _MaybeClosing(legacy_mojo_connection), \ - _MaybeClosing(startup_connection), \ - _MaybeClosing(mojo_connection): + _MaybeClosing(startup_connection), \ + _MaybeClosing(mojo_connection): cmd = args[:] pass_fds = [] if legacy_mojo_connection: @@ -151,7 +196,26 @@ cmd.append('--crosapi-mojo-platform-channel-handle=%d' % mojo_connection.fileno()) pass_fds.append(mojo_connection.fileno()) - proc = subprocess.Popen(cmd, pass_fds=pass_fds) + + env = os.environ.copy() + if flags.root_env_setup: + username = 'chronos' + p = pwd.getpwnam(username) + uid = p.pw_uid + gid = p.pw_gid + groups = [g.gr_gid for g in grp.getgrall() if username in g.gr_mem] + env['HOME'] = p.pw_dir + env['LOGNAME'] = username + env['USER'] = username + + def fn(): + return _PreExec(uid, gid, groups) + else: + + def fn(): + return None + + proc = subprocess.Popen(cmd, pass_fds=pass_fds, preexec_fn=fn) return proc.wait()
diff --git a/build/linux/strip_binary.gni b/build/linux/strip_binary.gni index ddc42cc4..2decba88 100644 --- a/build/linux/strip_binary.gni +++ b/build/linux/strip_binary.gni
@@ -22,21 +22,33 @@ action("${target_name}") { eu_strip_binary = "//buildtools/third_party/eu-strip/bin/eu-strip" script = "//build/linux/strip_binary.py" + + if (defined(invoker.stripped_binary_output)) { + stripped_binary_output = invoker.stripped_binary_output + } else { + stripped_binary_output = invoker.binary_input + ".stripped" + } + if (defined(invoker.symbol_output)) { + symbol_output = invoker.symbol_output + } else { + symbol_output = invoker.binary_input + ".debug" + } + inputs = [ invoker.binary_input, eu_strip_binary, ] outputs = [ - invoker.symbol_output, - invoker.stripped_binary_output, + symbol_output, + stripped_binary_output, ] args = [ "--eu-strip-binary-path", rebase_path(eu_strip_binary, root_build_dir), "--symbol-output", - rebase_path(invoker.symbol_output, root_build_dir), + rebase_path(symbol_output, root_build_dir), "--stripped-binary-output", - rebase_path(invoker.stripped_binary_output, root_build_dir), + rebase_path(stripped_binary_output, root_build_dir), "--binary-input", rebase_path(invoker.binary_input, root_build_dir), ]
diff --git a/chrome/VERSION b/chrome/VERSION index 4634856..968e1a3 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=98 MINOR=0 -BUILD=4740 +BUILD=4741 PATCH=0
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index 0d12476b..4b18631e 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -1139,6 +1139,7 @@ "//third_party/google-truth:google_truth_java", "//third_party/hamcrest:hamcrest_java", "//ui/android:ui_java", + "//ui/android:ui_junit_test_support", "//ui/base/mojom:mojom_java", "//url:gurl_java", "//url:gurl_junit_shadows",
diff --git a/chrome/android/features/autofill_assistant/BUILD.gn b/chrome/android/features/autofill_assistant/BUILD.gn index 39367dd..dfceb9b 100644 --- a/chrome/android/features/autofill_assistant/BUILD.gn +++ b/chrome/android/features/autofill_assistant/BUILD.gn
@@ -59,9 +59,15 @@ ] if (enable_chrome_android_internal) { - deps += [ "//clank/features/autofill_assistant:animated_poodle_java" ] + deps += [ + "//clank/components/autofill_assistant:gms_integrator_java", + "//clank/features/autofill_assistant:animated_poodle_java", + ] } else { - deps += [ "//components/autofill_assistant/android:animated_poodle_java" ] + deps += [ + "//components/autofill_assistant/android:animated_poodle_java", + "//components/autofill_assistant/android:gms_integrator_java", + ] } sources = [
diff --git a/chrome/android/features/autofill_assistant/DEPS b/chrome/android/features/autofill_assistant/DEPS index d66c99a..328680d4 100644 --- a/chrome/android/features/autofill_assistant/DEPS +++ b/chrome/android/features/autofill_assistant/DEPS
@@ -1,3 +1,4 @@ include_rules = [ "+components/image_fetcher/android", + "+components/autofill_assistant/android" ]
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantClient.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantClient.java index f7b68ac..016c192 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantClient.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantClient.java
@@ -6,6 +6,7 @@ import android.accessibilityservice.AccessibilityServiceInfo; import android.accounts.Account; +import android.app.Activity; import android.content.Context; import android.os.Build; import android.telephony.TelephonyManager; @@ -18,7 +19,9 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; +import org.chromium.chrome.browser.ActivityUtils; import org.chromium.chrome.browser.autofill_assistant.overlay.AssistantOverlayCoordinator; +import org.chromium.chrome.browser.autofill_assistant.user_data.GmsIntegrator; import org.chromium.chrome.browser.signin.services.IdentityServicesProvider; import org.chromium.components.signin.AccessTokenData; import org.chromium.components.signin.AccountManagerFacadeProvider; @@ -72,6 +75,9 @@ /** If set, fetch the access token once the accounts are fetched. */ private boolean mShouldFetchAccessToken; + /** If set, fetch the payments client token once the accounts are fetched. */ + private boolean mShouldFetchPaymentsClientToken; + /** Returns the client for the given web contents, null if it does not exist. */ public static AutofillAssistantClient fromWebContents(WebContents webContents) { return AutofillAssistantClientJni.get().fromWebContents(webContents); @@ -247,6 +253,11 @@ mShouldFetchAccessToken = false; fetchAccessToken(); } + + if (mShouldFetchPaymentsClientToken) { + mShouldFetchPaymentsClientToken = false; + fetchPaymentsClientToken(); + } } private static Account findAccountByName(List<Account> accounts, String name) { @@ -313,6 +324,41 @@ return mAccount != null ? mAccount.name : ""; } + @CalledByNative + private void fetchPaymentsClientToken() { + if (mNativeClientAndroid == 0) { + return; + } + if (!mAccountInitialized) { + // Still getting the account list. Fetch the token as soon as an account is available. + mShouldFetchPaymentsClientToken = true; + return; + } + if (mAccount == null) { + // If there is no account, send an empty token. + AutofillAssistantClientJni.get().onPaymentsClientToken( + mNativeClientAndroid, AutofillAssistantClient.this, ""); + return; + } + + Activity activity = ActivityUtils.getActivityFromWebContents( + AutofillAssistantClientJni.get() + .getDependencies(mNativeClientAndroid, AutofillAssistantClient.this) + .getWebContents()); + if (activity == null) { + // We require an activity to retrieve the token. + AutofillAssistantClientJni.get().onPaymentsClientToken( + mNativeClientAndroid, AutofillAssistantClient.this, ""); + return; + } + GmsIntegrator gmsIntegrator = new GmsIntegrator(mAccount.name, activity); + gmsIntegrator.getClientToken((Callback<byte[]>) result -> { + String clientToken = result == null ? "" : new String(result); + AutofillAssistantClientJni.get().onPaymentsClientToken( + mNativeClientAndroid, AutofillAssistantClient.this, clientToken); + }); + } + /** * Returns the country that the device is currently located in. This currently only works * for devices with active SIM cards. For a more general solution, we should probably use @@ -388,6 +434,8 @@ void onOnboardingUiChange(WebContents webContents, boolean shown); void onAccessToken(long nativeClientAndroid, AutofillAssistantClient caller, boolean success, String accessToken); + void onPaymentsClientToken( + long nativeClientAndroid, AutofillAssistantClient caller, String clientToken); String getPrimaryAccountName(long nativeClientAndroid, AutofillAssistantClient caller); void onJavaDestroyUI(long nativeClientAndroid, AutofillAssistantClient caller); void transferUITo( @@ -396,15 +444,15 @@ String experimentIds, String[] argumentNames, String[] argumentValues, Object callback); boolean hasRunFirstCheck(long nativeClientAndroid, AutofillAssistantClient caller); - AutofillAssistantDirectAction[] getDirectActions( long nativeClientAndroid, AutofillAssistantClient caller); - boolean performDirectAction(long nativeClientAndroid, AutofillAssistantClient caller, String actionId, String experimentId, String[] argumentNames, String[] argumentValues, @Nullable AssistantOverlayCoordinator overlayCoordinator); void showFatalError(long nativeClientAndroid, AutofillAssistantClient caller); void onSpokenFeedbackAccessibilityServiceChanged( long nativeClientAndroid, AutofillAssistantClient caller, boolean enabled); + AssistantDependencies getDependencies( + long nativeClientAndroid, AutofillAssistantClient caller); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java index 78873d4e..8493af8e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -117,7 +117,6 @@ import org.chromium.chrome.browser.multiwindow.MultiWindowUtils; import org.chromium.chrome.browser.native_page.NativePageAssassin; import org.chromium.chrome.browser.navigation_predictor.NavigationPredictorBridge; -import org.chromium.chrome.browser.night_mode.WebContentsDarkModeController; import org.chromium.chrome.browser.ntp.NewTabPageLaunchOrigin; import org.chromium.chrome.browser.ntp.NewTabPageUma; import org.chromium.chrome.browser.ntp.NewTabPageUtils; @@ -894,10 +893,6 @@ public void startNativeInitialization() { try (TraceEvent e = TraceEvent.scoped("ChromeTabbedActivity.startNativeInitialization")) { // This is on the critical path so don't delay. - if (ChromeFeatureList.isEnabled( - ChromeFeatureList.DARKEN_WEBSITES_CHECKBOX_IN_THEMES_SETTING)) { - WebContentsDarkModeController.createInstance(); - } setupCompositorContentPostNative(); // All this initialization can be expensive so it's split into multiple tasks.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java index b29653b..d1ab08e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
@@ -985,29 +985,6 @@ @Override public void onStartWithNative() { assert mNativeInitialized : "onStartWithNative was called before native was initialized."; - - // Record cases where first navigation commit and/or StartupPaintPreview's first - // paint happened pre-foregrounding (note that - // UmaUtils.hasComeToForeground() becomes true via the below call to - // ChromeActivitySessionTracker#onStartWithNative()). Per the semantics of these metrics we - // record them only when startup metrics are actually being tracked. - boolean firstCommitOccurredPreForeground = - getActivityTabStartupMetricsTracker().registeredFirstCommitPreForeground(); - // NOTE: ActivityTabStartupMetricsTracker#isTrackingStartupMetrics() returns false after the - // first tracked navigation commit has occurred. - boolean trackingStartupMetrics = - getActivityTabStartupMetricsTracker().isTrackingStartupMetrics() - || firstCommitOccurredPreForeground; - - if (trackingStartupMetrics) { - RecordHistogram.recordBooleanHistogram( - "Android.Startup.Cold.FirstNavigationCommitOccurredPreForeground", - firstCommitOccurredPreForeground); - RecordHistogram.recordBooleanHistogram( - "Android.Startup.Cold.FirstPaintOccurredPreForeground", - getActivityTabStartupMetricsTracker().registeredFirstPaintPreForeground()); - } - super.onStartWithNative(); UpdateMenuItemHelper.getInstance().onStart(); ChromeActivitySessionTracker.getInstance().onStartWithNative(); @@ -1189,7 +1166,7 @@ WebContents webContents = tab.getWebContents(); LaunchMetrics.commitLaunchMetrics(webContents); - // For picture-in-picture mode + // For picture-in-picture mode / auto-darken web contents. if (webContents != null) webContents.notifyRendererPreferenceUpdate(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java index 83951e3..c16e68e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java
@@ -52,7 +52,6 @@ import org.chromium.chrome.browser.night_mode.WebContentsDarkModeController; import org.chromium.chrome.browser.omaha.UpdateMenuItemHelper; import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations; -import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.read_later.ReadingListUtils; import org.chromium.chrome.browser.share.ShareHelper; @@ -77,7 +76,6 @@ import org.chromium.components.dom_distiller.core.DomDistillerUrlUtils; import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.components.embedder_support.util.UrlUtilities; -import org.chromium.components.user_prefs.UserPrefs; import org.chromium.components.webapk.lib.client.WebApkValidator; import org.chromium.components.webapps.AppBannerManager; import org.chromium.components.webapps.WebappsUtils; @@ -701,12 +699,13 @@ @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) public boolean isAutoDarkWebContentsEnabled() { + Profile profile = mTabModelSelector.getCurrentModel().getProfile(); + assert profile != null; boolean isFlagEnabled = ChromeFeatureList.isEnabled( ChromeFeatureList.DARKEN_WEBSITES_CHECKBOX_IN_THEMES_SETTING); - - return isFlagEnabled - && UserPrefs.get(mTabModelSelector.getCurrentModel().getProfile()) - .getBoolean(Pref.WEB_KIT_FORCE_DARK_MODE_ENABLED); + boolean isFeatureEnabled = + WebContentsDarkModeController.isFeatureEnabled(mContext, profile); + return isFlagEnabled && isFeatureEnabled; } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/metrics/ActivityTabStartupMetricsTracker.java b/chrome/android/java/src/org/chromium/chrome/browser/metrics/ActivityTabStartupMetricsTracker.java index 9faae34..cf905c1 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/metrics/ActivityTabStartupMetricsTracker.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/metrics/ActivityTabStartupMetricsTracker.java
@@ -26,6 +26,10 @@ */ public class ActivityTabStartupMetricsTracker { private static final String UMA_HISTOGRAM_TABBED_SUFFIX = ".Tabbed"; + private static final String FIRST_COMMIT_OCCURRED_PRE_FOREGROUND_HISTOGRAM = + "Startup.Android.Cold.FirstNavigationCommitOccurredPreForeground"; + private static final String FIRST_PAINT_OCCURRED_PRE_FOREGROUND_HISTOGRAM = + "Startup.Android.Cold.FirstPaintOccurredPreForeground"; /** Observer for startup metrics. */ public interface Observer { @@ -115,6 +119,7 @@ private String mHistogramSuffix; private TabModelSelectorTabObserver mTabModelSelectorTabObserver; private PageLoadMetricsObserverImpl mPageLoadMetricsObserver; + private UmaUtils.Observer mUmaUtilsObserver; private boolean mShouldTrackStartupMetrics; private boolean mFirstVisibleContentRecorded; private boolean mVisibleContentRecorded; @@ -132,18 +137,6 @@ tabModelSelectorSupplier.addObserver((selector) -> registerObservers(selector)); } - // Returns true if the tracked first navigation commit occurred while the browser had not yet - // come to foreground and had not been backgrounded (as defined by UmaUtils). - public boolean registeredFirstCommitPreForeground() { - return mRegisteredFirstCommitPreForeground; - } - - // Returns true if the first paint occurred while the browser had not yet - // come to foreground and had not been backgrounded (as defined by UmaUtils). - public boolean registeredFirstPaintPreForeground() { - return mRegisteredFirstPaintPreForeground; - } - // Note: In addition to returning false when startup metrics are not being tracked at all, this // method will also return false after first navigation commit has occurred. public boolean isTrackingStartupMetrics() { @@ -185,6 +178,32 @@ }; mPageLoadMetricsObserver = new PageLoadMetricsObserverImpl(); PageLoadMetrics.addObserver(mPageLoadMetricsObserver); + mUmaUtilsObserver = new UmaUtils.Observer() { + @Override + public void onHasComeToForeground() { + registerHasComeToForeground(); + } + }; + UmaUtils.addObserver(mUmaUtilsObserver); + } + + /** + * Registers the fact that UmaUtils#hasComeToForeground() has just become true for the first + * time. + */ + private void registerHasComeToForeground() { + // Record cases where first navigation commit and/or StartupPaintPreview's first + // paint happened pre-foregrounding. + if (mRegisteredFirstCommitPreForeground) { + RecordHistogram.recordBooleanHistogram( + FIRST_COMMIT_OCCURRED_PRE_FOREGROUND_HISTOGRAM, true); + } + if (mRegisteredFirstPaintPreForeground) { + RecordHistogram.recordBooleanHistogram( + FIRST_PAINT_OCCURRED_PRE_FOREGROUND_HISTOGRAM, true); + } + + clearUmaUtilsObserver(); } /** @@ -195,6 +214,8 @@ startupPaintPreviewHelper.addMetricsObserver(new PaintPreviewMetricsObserver() { @Override public void onFirstPaint(long durationMs) { + RecordHistogram.recordBooleanHistogram( + FIRST_PAINT_OCCURRED_PRE_FOREGROUND_HISTOGRAM, false); recordFirstVisibleContent(durationMs); recordVisibleContent(durationMs); } @@ -251,6 +272,11 @@ public void destroy() { mShouldTrackStartupMetrics = false; + clearNavigationObservers(); + clearUmaUtilsObserver(); + } + + private void clearNavigationObservers() { if (mTabModelSelectorTabObserver != null) { mTabModelSelectorTabObserver.destroy(); mTabModelSelectorTabObserver = null; @@ -262,6 +288,13 @@ } } + private void clearUmaUtilsObserver() { + if (mUmaUtilsObserver != null) { + UmaUtils.removeObserver(mUmaUtilsObserver); + mUmaUtilsObserver = null; + } + } + /** * Registers the fact that a navigation has finished. Based on this fact, may discard recording * histograms later. @@ -277,6 +310,8 @@ if (mHistogramSuffix.equals(UMA_HISTOGRAM_TABBED_SUFFIX)) { recordFirstVisibleContent(mFirstCommitTimeMs); } + RecordHistogram.recordBooleanHistogram( + FIRST_COMMIT_OCCURRED_PRE_FOREGROUND_HISTOGRAM, false); for (Observer observer : sObservers) { observer.onFirstNavigationCommit(); @@ -312,8 +347,9 @@ observer.onFirstContentfulPaint(); } } - // This is the last event we track, so destroy this tracker and remove observers. - destroy(); + // This is the last navigation-related event we track, so clean up related state. + mShouldTrackStartupMetrics = false; + clearNavigationObservers(); } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/metrics/UmaUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/metrics/UmaUtils.java index f4cb96d..4bf508d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/metrics/UmaUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/metrics/UmaUtils.java
@@ -7,6 +7,8 @@ import android.os.Build; import android.os.SystemClock; +import org.chromium.base.ObserverList; +import org.chromium.base.ThreadUtils; import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; @@ -17,6 +19,30 @@ */ @JNINamespace("chrome::android") public class UmaUtils { + /** Observer for this class. */ + public interface Observer { + /** + * Called when hasComeToForeground() changes from false to true. + */ + void onHasComeToForeground(); + } + + private static ObserverList<Observer> sObservers; + + /** Adds an observer. */ + public static boolean addObserver(Observer observer) { + ThreadUtils.assertOnUiThread(); + if (sObservers == null) sObservers = new ObserverList<>(); + return sObservers.addObserver(observer); + } + + /** Removes an observer. */ + public static boolean removeObserver(Observer observer) { + ThreadUtils.assertOnUiThread(); + if (sObservers == null) return false; + return sObservers.removeObserver(observer); + } + // All these values originate from SystemClock.uptimeMillis(). private static long sApplicationStartTimeMs; private static long sForegroundStartTimeMs; @@ -42,6 +68,12 @@ // and FirstRunActivity), only set the time if it hasn't been set previously or if // Chrome has been sent to background since the last foreground time. if (sForegroundStartTimeMs == 0 || sForegroundStartTimeMs < sBackgroundTimeMs) { + if (sObservers != null && sForegroundStartTimeMs == 0) { + for (Observer observer : sObservers) { + observer.onHasComeToForeground(); + } + } + sForegroundStartTimeMs = SystemClock.uptimeMillis(); } }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/SiteSettingsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/SiteSettingsTest.java index 1fe64b4..385a277 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/SiteSettingsTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/SiteSettingsTest.java
@@ -4,6 +4,7 @@ package org.chromium.chrome.browser.site_settings; +import static org.chromium.components.browser_ui.site_settings.AutoDarkMetrics.AutoDarkSettingsChangeSource.SITE_SETTINGS_GLOBAL; import static org.chromium.components.browser_ui.site_settings.WebsitePreferenceBridge.SITE_WILDCARD; import static org.chromium.components.content_settings.PrefNames.COOKIE_CONTROLS_MODE; @@ -26,6 +27,7 @@ import org.junit.Test; import org.junit.runner.RunWith; +import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CallbackHelper; import org.chromium.base.test.util.CommandLineFlags; @@ -57,7 +59,6 @@ import org.chromium.components.browser_ui.site_settings.FourStateCookieSettingsPreference.CookieSettingsState; import org.chromium.components.browser_ui.site_settings.R; import org.chromium.components.browser_ui.site_settings.SingleCategorySettings; -import org.chromium.components.browser_ui.site_settings.SingleCategorySettings.AutoDarkSiteSettingObserver; import org.chromium.components.browser_ui.site_settings.SingleWebsiteSettings; import org.chromium.components.browser_ui.site_settings.SiteSettingsCategory; import org.chromium.components.browser_ui.site_settings.TriStateSiteSettingsPreference; @@ -95,17 +96,6 @@ public class SiteSettingsTest { public static final String SITE_SETTINGS_BATCH_NAME = "site_settings"; - static class TestAutoDarkObserver implements AutoDarkSiteSettingObserver { - public boolean mDefaultValue; - @Override - public void onDefaultValueChanged(boolean isEnabled) { - mDefaultValue = isEnabled; - } - - @Override - public void onSiteExceptionChanged(boolean isAdded) {} - } - @ClassRule public static PermissionTestRule mPermissionRule = new PermissionTestRule(true); @@ -1157,33 +1147,32 @@ @SmallTest @Feature({"Preferences"}) public void testAllowAutoDark() { - TestAutoDarkObserver observer = new TestAutoDarkObserver(); - SingleCategorySettings.setAutoDarkSiteSettingsObserver(observer); - new TwoStatePermissionTestCase("AutoDarkWebContent", SiteSettingsCategory.Type.AUTO_DARK_WEB_CONTENT, ContentSettingsType.AUTO_DARK_WEB_CONTENT, true) .run(); - - Assert.assertTrue("Auto dark should be enabled.", observer.mDefaultValue); - SingleCategorySettings.setAutoDarkSiteSettingsObserver(null); + Assert.assertEquals("<Android.DarkTheme.AutoDarkMode.SettingsChangeSource.Enabled> " + + "should be recorded for SITE_SETTINGS_GLOBAL.", + 1, + RecordHistogram.getHistogramValueCountForTesting( + "Android.DarkTheme.AutoDarkMode.SettingsChangeSource.Enabled", + SITE_SETTINGS_GLOBAL)); } @Test @SmallTest @Feature({"Preferences"}) public void testBlockAutoDark() { - TestAutoDarkObserver observer = new TestAutoDarkObserver(); - observer.mDefaultValue = true; - SingleCategorySettings.setAutoDarkSiteSettingsObserver(observer); - new TwoStatePermissionTestCase("AutoDarkWebContent", SiteSettingsCategory.Type.AUTO_DARK_WEB_CONTENT, ContentSettingsType.AUTO_DARK_WEB_CONTENT, false) .run(); - - Assert.assertFalse("Auto dark should be disabled.", observer.mDefaultValue); - SingleCategorySettings.setAutoDarkSiteSettingsObserver(null); + Assert.assertEquals("<Android.DarkTheme.AutoDarkMode.SettingsChangeSource.Disabled> " + + "should be recorded for SITE_SETTINGS_GLOBAL.", + 1, + RecordHistogram.getHistogramValueCountForTesting( + "Android.DarkTheme.AutoDarkMode.SettingsChangeSource.Disabled", + SITE_SETTINGS_GLOBAL)); } @Test
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/app/tab_activity_glue/ActivityTabWebContentsDelegateAndroidUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/app/tab_activity_glue/ActivityTabWebContentsDelegateAndroidUnitTest.java index 87f1b7e..d356583f 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/app/tab_activity_glue/ActivityTabWebContentsDelegateAndroidUnitTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/app/tab_activity_glue/ActivityTabWebContentsDelegateAndroidUnitTest.java
@@ -8,7 +8,6 @@ import static org.mockito.Mockito.mock; import android.app.Activity; -import android.content.Context; import org.junit.After; import org.junit.Assert; @@ -26,7 +25,6 @@ import org.chromium.base.supplier.Supplier; import org.chromium.base.test.BaseRobolectricTestRunner; -import org.chromium.chrome.browser.app.tab_activity_glue.ActivityTabWebContentsDelegateAndroidUnitTest.ShadowColorUtils; import org.chromium.chrome.browser.app.tab_activity_glue.ActivityTabWebContentsDelegateAndroidUnitTest.ShadowProfile; import org.chromium.chrome.browser.app.tab_activity_glue.ActivityTabWebContentsDelegateAndroidUnitTest.ShadowWebContentsDarkModeController; import org.chromium.chrome.browser.flags.ChromeFeatureList; @@ -36,8 +34,9 @@ import org.chromium.chrome.test.util.browser.Features; import org.chromium.chrome.test.util.browser.Features.DisableFeatures; import org.chromium.chrome.test.util.browser.Features.EnableFeatures; +import org.chromium.content_public.browser.BrowserContextHandle; import org.chromium.content_public.browser.WebContents; -import org.chromium.ui.util.ColorUtils; +import org.chromium.ui.shadows.ShadowColorUtils; import org.chromium.url.GURL; import org.chromium.url.ShadowGURL; @@ -49,22 +48,13 @@ @EnableFeatures(ChromeFeatureList.DARKEN_WEBSITES_CHECKBOX_IN_THEMES_SETTING) @DisableFeatures(ChromeFeatureList.FORCE_WEB_CONTENTS_DARK_MODE) public class ActivityTabWebContentsDelegateAndroidUnitTest { - @Implements(ColorUtils.class) - static class ShadowColorUtils { - static boolean sInNightMode; - @Implementation - public static boolean inNightMode(Context context) { - return sInNightMode; - } - } - @Implements(WebContentsDarkModeController.class) static class ShadowWebContentsDarkModeController { static boolean sGlobalSettingsEnabled; static GURL sBlockedUrl; @Implementation - public static boolean isEnabledForUrl(Profile profile, GURL url) { + public static boolean isEnabledForUrl(BrowserContextHandle browserContextHandle, GURL url) { return sGlobalSettingsEnabled && (!url.equals(sBlockedUrl)); } }
diff --git a/chrome/app/bookmarks_strings.grdp b/chrome/app/bookmarks_strings.grdp index faade0d..30eaa7c6 100644 --- a/chrome/app/bookmarks_strings.grdp +++ b/chrome/app/bookmarks_strings.grdp
@@ -507,4 +507,16 @@ </message> <!-- End of Bookmark Star button strings. --> + <!-- Begin of screen reader message strings. --> + <message name="IDS_BOOKMARK_SCREEN_READER_CREATED" desc="Screen reader message that is read when a bookmark is created."> + '<ph name="BOOKMARK_TITLE">$1<ex>Google</ex></ph>' created. + </message> + <message name="IDS_BOOKMARK_SCREEN_READER_REORDERED" desc="Screen reader message that is read when a bookmark is reordered."> + '<ph name="BOOKMARK_TITLE">$1<ex>Google</ex></ph>' moved. + </message> + <message name="IDS_BOOKMARK_SCREEN_READER_MOVED" desc="Screen reader message that is read when a bookmark is moved into a different folder."> + '<ph name="BOOKMARK_TITLE">$1<ex>Google</ex></ph>' moved into '<ph name="NEW_FOLDER_TITLE">$2<ex>Search engines</ex></ph>'. + </message> + <!-- End of screen reader message strings. --> + </grit-part>
diff --git a/chrome/app/bookmarks_strings_grdp/IDS_BOOKMARK_SCREEN_READER_CREATED.png.sha1 b/chrome/app/bookmarks_strings_grdp/IDS_BOOKMARK_SCREEN_READER_CREATED.png.sha1 new file mode 100644 index 0000000..0081dd5b2 --- /dev/null +++ b/chrome/app/bookmarks_strings_grdp/IDS_BOOKMARK_SCREEN_READER_CREATED.png.sha1
@@ -0,0 +1 @@ +0fb4583788abe787f39ce50c4060bf78aa7906ae \ No newline at end of file
diff --git a/chrome/app/bookmarks_strings_grdp/IDS_BOOKMARK_SCREEN_READER_MOVED.png.sha1 b/chrome/app/bookmarks_strings_grdp/IDS_BOOKMARK_SCREEN_READER_MOVED.png.sha1 new file mode 100644 index 0000000..9b9178f --- /dev/null +++ b/chrome/app/bookmarks_strings_grdp/IDS_BOOKMARK_SCREEN_READER_MOVED.png.sha1
@@ -0,0 +1 @@ +25e68244241f7a060d66e602f0015cae5410d8ac \ No newline at end of file
diff --git a/chrome/app/bookmarks_strings_grdp/IDS_BOOKMARK_SCREEN_READER_REORDERED.png.sha1 b/chrome/app/bookmarks_strings_grdp/IDS_BOOKMARK_SCREEN_READER_REORDERED.png.sha1 new file mode 100644 index 0000000..a7c2dc1f --- /dev/null +++ b/chrome/app/bookmarks_strings_grdp/IDS_BOOKMARK_SCREEN_READER_REORDERED.png.sha1
@@ -0,0 +1 @@ +f23e3e96a068550d864948cad5f869717f514971 \ No newline at end of file
diff --git a/chrome/app/chromeos_strings.grdp b/chrome/app/chromeos_strings.grdp index acd1783..94f591a 100644 --- a/chrome/app/chromeos_strings.grdp +++ b/chrome/app/chromeos_strings.grdp
@@ -2634,32 +2634,14 @@ <message name="IDS_MOBILE_SETUP_TITLE" desc="ChromeOS mobile device activation page title"> Mobile data service management </message> - <message name="IDS_MOBILE_CONNECTING_HEADER" desc="Mobile connection page header while connecting to the provider"> - Connecting to <ph name="PROVIDER_NAME">$1<ex>Acme Mobile</ex></ph> - </message> - <message name="IDS_MOBILE_ERROR_HEADER" desc="Mobile connection page header when connection error occur"> - Connection error - </message> - <message name="IDS_MOBILE_ACTIVATING_HEADER" desc="Message header when data service is being activated"> - Activating your mobile data service - </message> - <message name="IDS_MOBILE_COMPLETED_HEADER" desc="Message header when data service is completed"> - Activation complete - </message> - <message name="IDS_MOBILE_PLEASE_WAIT" desc="Message user the header displayed while mobile plan is being activated"> - (this might take a few minutes) - </message> - <message name="IDS_MOBILE_COMPLETED_TEXT" desc="Message when cellular data service activation or payment is completed"> - Your mobile data service is activated and ready to use - </message> <message name="IDS_MOBILE_CANCEL_ACTIVATION" desc="Message when user attempts to cancel cellular data service activation proces"> Are you sure you want to cancel mobile data service setup process? </message> - <message name="IDS_MOBILE_NO_CONNECTION_HEADER" desc="Mobile page header when the network portal is not reachable due to no connection"> - Connect to Wi-Fi to begin + <message name="IDS_MOBILE_VIEW_ACCOUNT_ERROR_TITLE" desc="Error title shown when user failed to view mobile account"> + Can't access your mobile account </message> - <message name="IDS_MOBILE_INVALID_DEVICE_INFO_HEADER" desc="Mobile page header when the user tries to access mobile portal for a device with an invalid MDN"> - Please come back later + <message name="IDS_MOBILE_VIEW_ACCOUNT_ERROR_MESSAGE" desc="Error message shown when user failed to view mobile account"> + Please contact your mobile provider </message> <!-- About power UI display strings -->
diff --git a/chrome/app/chromeos_strings_grdp/IDS_MOBILE_VIEW_ACCOUNT_ERROR_MESSAGE.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_MOBILE_VIEW_ACCOUNT_ERROR_MESSAGE.png.sha1 new file mode 100644 index 0000000..d65e6dad --- /dev/null +++ b/chrome/app/chromeos_strings_grdp/IDS_MOBILE_VIEW_ACCOUNT_ERROR_MESSAGE.png.sha1
@@ -0,0 +1 @@ +953c88df3123dae845197999123611d9c1d3e73e \ No newline at end of file
diff --git a/chrome/app/chromeos_strings_grdp/IDS_MOBILE_VIEW_ACCOUNT_ERROR_TITLE.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_MOBILE_VIEW_ACCOUNT_ERROR_TITLE.png.sha1 new file mode 100644 index 0000000..d65e6dad --- /dev/null +++ b/chrome/app/chromeos_strings_grdp/IDS_MOBILE_VIEW_ACCOUNT_ERROR_TITLE.png.sha1
@@ -0,0 +1 @@ +953c88df3123dae845197999123611d9c1d3e73e \ No newline at end of file
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 4317293..d25eb7c 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -8845,12 +8845,18 @@ <message name="IDS_ACCOUNT_PASSWORDS_REAUTH_DESC" desc="Body of the account password storage reauth tab modal dialog."> Passwords from your Google Account will also be available on this device while you're signed in </message> + <message name="IDS_ACCOUNT_PASSWORDS_REAUTH_DESC_ALREADY_SAVED_LOCALLY" desc="Body of the account password storage reauth tab modal dialog, shown in the case where the password was already saved locally."> + Chrome saved your password to this device, but you can save it to your Google Account instead. Then, all passwords in your Google Account will also be available while you're signed in. + </message> <message name="IDS_ACCOUNT_PASSWORDS_REAUTH_CONFIRM_BUTTON_LABEL" desc="Label of the confirmation button in the account password storage reauth tab modal dialog."> Yes </message> <message name="IDS_ACCOUNT_PASSWORDS_REAUTH_CLOSE_BUTTON_LABEL" desc="Label of the close button in the account password storage reauth tab modal dialog."> No thanks </message> + <message name="IDS_ACCOUNT_PASSWORDS_REAUTH_CLOSE_BUTTON_LABEL_ALREADY_SAVED_LOCALLY" desc="Label of the close button in the account password storage reauth tab modal dialog, shown in the case where the password was already saved locally."> + No, this device only + </message> <message name="IDS_PLUGIN_OUTDATED_PROMPT" desc="Infobar message when an outdated plugin was disabled"> <ph name="PLUGIN_NAME">$1<ex>Flash</ex></ph> was blocked because it is out of date
diff --git a/chrome/app/generated_resources_grd/IDS_ACCOUNT_PASSWORDS_REAUTH_CLOSE_BUTTON_LABEL_ALREADY_SAVED_LOCALLY.png.sha1 b/chrome/app/generated_resources_grd/IDS_ACCOUNT_PASSWORDS_REAUTH_CLOSE_BUTTON_LABEL_ALREADY_SAVED_LOCALLY.png.sha1 new file mode 100644 index 0000000..63fe2284 --- /dev/null +++ b/chrome/app/generated_resources_grd/IDS_ACCOUNT_PASSWORDS_REAUTH_CLOSE_BUTTON_LABEL_ALREADY_SAVED_LOCALLY.png.sha1
@@ -0,0 +1 @@ +a1cfdabba94527b671cddf83a585690408023d0d \ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_ACCOUNT_PASSWORDS_REAUTH_DESC_ALREADY_SAVED_LOCALLY.png.sha1 b/chrome/app/generated_resources_grd/IDS_ACCOUNT_PASSWORDS_REAUTH_DESC_ALREADY_SAVED_LOCALLY.png.sha1 new file mode 100644 index 0000000..63fe2284 --- /dev/null +++ b/chrome/app/generated_resources_grd/IDS_ACCOUNT_PASSWORDS_REAUTH_DESC_ALREADY_SAVED_LOCALLY.png.sha1
@@ -0,0 +1 @@ +a1cfdabba94527b671cddf83a585690408023d0d \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb index 6766f26..9a45604 100644 --- a/chrome/app/resources/generated_resources_af.xtb +++ b/chrome/app/resources/generated_resources_af.xtb
@@ -1712,6 +1712,7 @@ <translation id="2721037002783622288">Deursoek <ph name="SEARCH_ENGINE" /> vir prent</translation> <translation id="2721334646575696520">Microsoft Edge</translation> <translation id="2721695630904737430">Gebruikers onder toesig is deur jou administrateur gedeaktiveer.</translation> +<translation id="2722540561488096675">Jou toestel sal oor <ph name="TIME_LEFT" /> afskakel. Verwyder die USB voordat jy jou toestel weer aanskakel. Jy kan begin om <ph name="DEVICE_OS" /> te gebruik.</translation> <translation id="2724841811573117416">WebRTC-loglêers</translation> <translation id="272488616838512378">Eenheidomskakeling</translation> <translation id="2725200716980197196">Netwerkverbinding is herstel</translation> @@ -4570,6 +4571,7 @@ <translation id="5739235828260127894">Wag tans vir verifikasie. <ph name="LINK_BEGIN" />Kom meer te wete<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Baie groot</translation> <translation id="5740328398383587084">Nabydeling</translation> +<translation id="5740709157181662145"><ph name="DEVICE_OS" />-hardewareondersteuning en -stabiliteit</translation> <translation id="574104302965107104">Skermweerspieëling</translation> <translation id="574209121243317957">Toonhoogte</translation> <translation id="5746169159649715125">Stoor as PDF</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index 5351f86..72422ad 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -1701,6 +1701,7 @@ <translation id="2721037002783622288">&بحث على <ph name="SEARCH_ENGINE" /> عن صورة</translation> <translation id="2721334646575696520">Microsoft Edge</translation> <translation id="2721695630904737430">تم إيقاف المستخدمين تحت الإشراف بواسطة المشرف.</translation> +<translation id="2722540561488096675">سيتم إيقاف تشغيل جهازك في غضون <ph name="TIME_LEFT" />. عليك إزالة جهاز USB قبل تشغيل جهازك مرة أخرى. بعد ذلك، يمكنك بدء استخدام <ph name="DEVICE_OS" />.</translation> <translation id="2724841811573117416">سجلات WebRTC</translation> <translation id="272488616838512378">تحويل الوحدات</translation> <translation id="2725200716980197196">تمت استعادة اتصال الشبكة</translation> @@ -4556,6 +4557,7 @@ <translation id="5739235828260127894">في انتظار التحقُّق من صحة الاتصال. <ph name="LINK_BEGIN" />مزيد من المعلومات<ph name="LINK_END" /></translation> <translation id="5739458112391494395">كبير جدًا</translation> <translation id="5740328398383587084">المشاركة عن قرب</translation> +<translation id="5740709157181662145">دعم أجهزة <ph name="DEVICE_OS" /> وزيادة ثباتها</translation> <translation id="574104302965107104">النسخ المطابق للشاشة</translation> <translation id="574209121243317957">درجة الصوت</translation> <translation id="5746169159649715125">حفظ بتنسيق ملف PDF</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb index 2c866cd..f500ff9 100644 --- a/chrome/app/resources/generated_resources_be.xtb +++ b/chrome/app/resources/generated_resources_be.xtb
@@ -132,6 +132,7 @@ <translation id="1129850422003387628">Кіраванне праграмамі</translation> <translation id="113050636487300043">Каб адрозніваць профілі, падбярыце для іх асобныя назвы і колеравыя тэмы</translation> <translation id="1130589222747246278"><ph name="WINDOW_TITLE" /> – належыць да групы <ph name="GROUP_NAME" /></translation> +<translation id="1130676589211693127">Зарад акумулятара правага навушніка: <ph name="PERCENTAGE" />%.</translation> <translation id="1133418583142946603">Дадаць бягучую ўкладку</translation> <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_INDEX" /> з <ph name="EMOJI_COUNT" />.</translation> <translation id="1136712381129578788">Ключ бяспекі заблакіраваны, бо занадта шмат разоў быў уведзены няправільны PIN-код. Каб разблакіраваць, выміце ключ і ўстаўце яго зноў.</translation> @@ -1642,6 +1643,7 @@ <translation id="2665647207431876759">Скончыўся тэрмін</translation> <translation id="2665717534925640469">Старонка перайшла ў поўнаэкранны рэжым і выключыла вам курсор мышы.</translation> <translation id="2665919335226618153">На жаль, падчас фармаціравання адбылася памылка.</translation> +<translation id="2666247341166669829">Зарад акумулятара ў левым навушніку: <ph name="PERCENTAGE" />%.</translation> <translation id="2667144577800272420">Іншыя праграмы наладжаны адкрываць такія ж спасылкі, што і <ph name="APP_NAME" />. Праграмы "<ph name="APP_NAME_2" />" і "<ph name="APP_NAME_3" />" перастануць адкрываць адпаведныя спасылкі.</translation> <translation id="2667463864537187133">Кіраванне праверкай правапісу</translation> <translation id="2669241540496514785">Немагчыма адкрыць праграму <ph name="APP_NAME" /></translation> @@ -1959,6 +1961,7 @@ <translation id="2979639724566107830">Адкрыць у новым акне</translation> <translation id="2981113813906970160">Паказваць вялікі курсор мышы</translation> <translation id="2981474224638493138">Якасць праекцыі ўкладкі/працоўнага стала</translation> +<translation id="2983373101216420412">Зарад акумулятара чахла: <ph name="PERCENTAGE" />%.</translation> <translation id="2985348301114641460">Адправіць запыт адміністратару на ўсталяванне пашырэння "<ph name="EXTENSION_NAME" />"?</translation> <translation id="2987620471460279764">Тэкст, абагулены з іншай прылады</translation> <translation id="2988018669686457659">Дадатковы сродак візуалізацыі</translation> @@ -2015,6 +2018,7 @@ <translation id="3030967311408872958">Ад захаду сонца да світання</translation> <translation id="3031417829280473749">Агент X</translation> <translation id="3031557471081358569">Выберыце, што імпартаваць:</translation> +<translation id="3033348223765101500">Кантроль даных</translation> <translation id="3036327949511794916">Тэрмін вяртання прылады <ph name="DEVICE_TYPE" /> мінуў.</translation> <translation id="3036546437875325427">Уключыць Flash</translation> <translation id="3037754279345160234">Не ўдалося прааналізаваць канфігурацыю, каб далучыцца да дамена. Звярніцеся да адміністратара.</translation> @@ -2115,6 +2119,7 @@ <translation id="3143754809889689516">Прайграць з пачатку</translation> <translation id="3144647712221361880">Адкрыць спасылку як</translation> <translation id="3149510190863420837">Праграмы Chrome</translation> +<translation id="3150622786624965651">Прылада <ph name="DEVICE_INDEX" /> з <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, гульнявы кантролер.</translation> <translation id="3150693969729403281">Запусціць праверку бяспекі</translation> <translation id="3150927491400159470">Халодная перазагрузка</translation> <translation id="315116470104423982">Мабільная перадача даных</translation> @@ -2322,6 +2327,7 @@ <translation id="339178315942519818">Чытайце апавяшчэнні з праграм для чатаў на прыладзе <ph name="DEVICE_TYPE" /></translation> <translation id="3393554941209044235">Аналіз дакументаў у Chrome</translation> <translation id="3394850431319394743">Сайты, якім дазволена выкарыстоўваць ідэнтыфікатары для прайгравання абароненага змесціва</translation> +<translation id="3395403082745257596">Прылада <ph name="DEVICE_INDEX" /> з <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, тып прылады невядомы.</translation> <translation id="3396744558790608201">Калі, робячы куплю або проста праглядаючы старонкі ў інтэрнэце, вы захочаце даведацца больш пра візуальнае змесціва пэўнай старонкі, вы можаце выканаць пошук па любой яе частцы. Для гэтага націсніце на старонцы правай кнопкай мышы і выберыце "Пошук відарысаў з дапамогай Google Аб'ектыва".</translation> <translation id="3396800784455899911">Націскаючы на кнопку "Прыняць і працягнуць", вы згаджаецеся з апісанымі вышэй умовамі гэтых сэрвісаў Google.</translation> <translation id="339722927132407568">Ёсць завісанні</translation> @@ -2377,6 +2383,7 @@ <translation id="3440663250074896476">Іншыя дзеянні для закладкі "<ph name="BOOKMARK_NAME" />"</translation> <translation id="3441653493275994384">Экран</translation> <translation id="3441663102605358937">Каб спраўдзіць уліковы запіс <ph name="ACCOUNT" />, увайдзіце ў яго</translation> +<translation id="3442674350323953953">Дазволіць Google выкарыстоўваць даныя аб апаратным забеспячэнні для паляпшэння <ph name="DEVICE_OS" />. Калі вы не паставіце гэту птушку, Google усё роўна будзе атрымліваць гэтыя даныя, каб своечасова выяўляць неабходнасць усталявання патрэбных абнаўленняў, але не будзе захоўваць іх або выкарыстоўваць у іншых мэтах.</translation> <translation id="3444641828375597683">Рэкламадаўцы і выдаўцы змогуць выкарыстоўваць тэхналогію FLoC, апісаную ніжэй на гэтай старонцы.</translation> <translation id="3444726579402183581">Сайт <ph name="ORIGIN" /> зможа праглядаць файл "<ph name="FILENAME" />"</translation> <translation id="3445047461171030979">Хуткія адказы Памочніка Google</translation> @@ -2509,6 +2516,7 @@ <translation id="3569682580018832495">Сайт <ph name="ORIGIN" /> можа праглядаць наступныя файлы і папкі</translation> <translation id="3571734092741541777">Наладзіць</translation> <translation id="3575121482199441727">Дазволіць для гэтага сайта</translation> +<translation id="3577745545227000795">Збор даных аб апаратным забеспячэнні <ph name="DEVICE_OS" /></translation> <translation id="3578594933904494462">Змесціва гэтай укладкі абагульваецца.</translation> <translation id="3581605050355435601">Задаваць IP-адрас аўтаматычна</translation> <translation id="3582057310199111521">Уведзены на сайце, вядомым падманнымі паводзінамі, і раскрыты пры ўцечцы даных</translation> @@ -2950,6 +2958,7 @@ <translation id="3994374631886003300">Разблакіруйце тэлефон і паднясіце яго бліжэй, каб разблакіраваць <ph name="DEVICE_TYPE" />.</translation> <translation id="3994878504415702912">&Маштаб</translation> <translation id="3995138139523574647">Прылада USB-C (задні порт справа)</translation> +<translation id="3995963973192100066">Прайграць анімацыю</translation> <translation id="4002329649066944389">Кіраванне выключэннямі для канкрэтных сайтаў</translation> <translation id="4002440992267487163">Наладзіць PIN-код</translation> <translation id="4005817994523282006">Спосаб выяўлення часавага пояса</translation> @@ -3597,6 +3606,7 @@ <translation id="4728558894243024398">Платформа</translation> <translation id="4728570203948182358"><ph name="BEGIN_LINK" />Адміністратар<ph name="END_LINK" /> адключыў функцыю праверкі наяўнасці шкоднага праграмнага забеспячэння</translation> <translation id="4730492586225682674">Апошняя зробленая пяром нататка на экране блакіроўкі</translation> +<translation id="4733161265940833579"><ph name="BATTERY_PERCENTAGE" />% (левы)</translation> <translation id="4733793249294335256">Месцазнаходжанне</translation> <translation id="473546211690256853">Гэты ўліковы запіс належыць дамену <ph name="DOMAIN" />.</translation> <translation id="4735803855089279419">Сістэма не змагла вызначыць ідэнтыфікатары прылад для гэтай прылады.</translation> @@ -4159,6 +4169,7 @@ <translation id="5341793073192892252">Наступныя файлы cookie былі заблакіраваны (староннія файлы cookie блакіруюцца без выключэнняў)</translation> <translation id="5342091991439452114">Мінімальная колькасць лічбаў PIN-кода: <ph name="MINIMUM" /></translation> <translation id="5344036115151554031">Ідзе аднаўленне Linux</translation> +<translation id="5344128444027639014"><ph name="BATTERY_PERCENTAGE" />% (правы)</translation> <translation id="5345916423802287046">Запускаць праграму пры ўваходзе</translation> <translation id="5350293332385664455">Выключыць Памочніка Google</translation> <translation id="535123479159372765">Тэкст скапіраваны з іншай прылады</translation> @@ -4398,6 +4409,7 @@ <translation id="5585898376467608182">У сховішчы прылады мала месца. Для ўсталявання праграмы "<ph name="APP_NAME" />" неабходна мець як мінімум <ph name="MINIMUM_SPACE" />. Каб вызваліць месца, выдаліце файлы з прылады.</translation> <translation id="5585912436068747822">Не ўдалося адфармаціраваць</translation> <translation id="5588033542900357244">(<ph name="RATING_COUNT" />)</translation> +<translation id="5589101568518637088">Прылада <ph name="DEVICE_INDEX" /> з <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, клавіятура.</translation> <translation id="558918721941304263">Загрузка праграм...</translation> <translation id="5592595402373377407">Пакуль што недастаткова даных.</translation> <translation id="5595485650161345191">Рэдагаваць адрас</translation> @@ -4599,6 +4611,7 @@ <translation id="5817069030404929329">Перамясціць паролі з гэтай прылады ва Уліковы запіс Google?</translation> <translation id="5817918615728894473">Спалучыць</translation> <translation id="5821565227679781414">Стварыць ярлык</translation> +<translation id="5822095611691580107">Зарад акумулятара ў левым навушніку: <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="5822865422567397338">Каб выканаць пошук на пэўным сайце або ў раздзеле Chrome, выкарыстоўвайце каманды з гэтай старонкі. Напрыклад, каб шукаць толькі ў Gmail, увядзіце "@gmail" і націсніце клавішу Tab або прабел.</translation> <translation id="5825412242012995131">Уключана (рэкамендуецца)</translation> <translation id="5826395379250998812">Падключыце прыладу "<ph name="DEVICE_TYPE" />" да тэлефона. <ph name="LINK_BEGIN" />Даведацца больш<ph name="LINK_END" /></translation> @@ -5050,6 +5063,7 @@ <translation id="6294759976468837022">Хуткасць аўтаматычнага сканіравання</translation> <translation id="6295158916970320988">Усе сайты</translation> <translation id="6295855836753816081">Ідзе захаванне...</translation> +<translation id="6297132509712149399">Прылада <ph name="DEVICE_INDEX" /> з <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, тэлефон.</translation> <translation id="629730747756840877">Уліковы запіс</translation> <translation id="6298962879096096191">Для ўсталявання праграм Android выкарыстоўвайце Google Play</translation> <translation id="6300177430812514606">Не дазволена завяршаць адпраўку або атрыманне даных</translation> @@ -5263,6 +5277,9 @@ <translation id="6528179044667508675">Не турбаваць</translation> <translation id="652948702951888897">Гісторыя праглядаў Chrome</translation> <translation id="6530186581263215931">Гэтыя налады прымусова ўключаны адміністратарам</translation> +<translation id="653031671361866334"><ph name="BEGIN_PARAGRAPH1" />Для зручнасці карыстальнікаў <ph name="DEVICE_OS" /> збірае даныя аб апаратным забеспячэнні прылад і абагульвае іх з Google, што дазваляе выяўляць, якія абнаўленні неабходна ўсталяваць. Вы таксама можаце дазволіць Google выкарыстоўваць гэтыя даныя і ў іншых мэтах, напрыклад, каб удасканальваць работу <ph name="DEVICE_OS" /> і аказваць карыстальнікам падтрымку.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />Каб паглядзець, якія звесткі адпраўляюцца ў Google для фільтрацыі абнаўленняў і для якіх яшчэ мэт можна перадаваць нам даныя, увайдзіце ва ўліковы запіс на гэтай прыладзе і азнаёмцеся з раздзелам CLOUDREADY_HARDWARE_INFO на старонцы chrome://system.<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" />Падрабязную інфармацыю пра даныя, якія <ph name="DEVICE_OS" /> можа абагульваць з Google, і іх выкарыстанне чытайце на старонцы g.co/xxxxx<ph name="END_PARAGRAPH3" /></translation> <translation id="6531282281159901044">Захаваць небяспечны файл</translation> <translation id="6532101170117367231">Захаваць на Google Дыск</translation> <translation id="6532106788206463496">Захаваць змены</translation> @@ -5338,6 +5355,7 @@ <translation id="6601612474695404578">Некаторыя сайты выкарыстоўваюць староннія файлы cookie для загрузкі сваіх старонак. Калі сайт не працуе, паспрабуйце дазволіць файлы cookie.</translation> <translation id="6602937173026466876">Доступ да прынтараў</translation> <translation id="6602956230557165253">Для пераходу выкарыстоўвайце клавішы са стрэлкамі ўлева і ўправа.</translation> +<translation id="6602998402703530379">Прылада <ph name="DEVICE_INDEX" /> з <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, відэакамера.</translation> <translation id="6605847144724004692">Ацэнак ад карыстальнікаў яшчэ няма.</translation> <translation id="6606671997164410857">Здаецца, вы ўжо наладзілі Памочніка на іншай прыладзе. Выкарыстоўвайце яго яшчэ эфектыўней, уключыўшы на гэтай прыладзе функцыю "Кантэкст экрана".</translation> <translation id="6607831829715835317">Больш &інструментаў</translation> @@ -5359,6 +5377,7 @@ <translation id="6624535038674360844">Файл "<ph name="FILE_NAME" />" змяшчае канфідэнцыяльнае або небяспечнае змесціва. Папрасіце ўладальніка файла вырашыць гэту праблему.</translation> <translation id="6624687053722465643">Ласунак</translation> <translation id="6628328486509726751">Запампавана: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation> +<translation id="663065535202460123">Прылада <ph name="DEVICE_INDEX" /> з <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, мыш.</translation> <translation id="6630752851777525409">Пашырэнне <ph name="EXTENSION_NAME" /> хоча атрымаць пастаянны доступ да сертыфіката, каб аўтэнтыфікаваць сябе ад вашага імя.</translation> <translation id="6635362468090274700">Ніхто не зможа абагульваць з вамі даныя, пакуль вы не зробіце сваю прыладу бачнай.<ph name="BR" /><ph name="BR" />Каб зрабіць яе бачнай часова, адкрыйце панэль стану, затым уключыце бачнасць з дапамогай кнопкі "Бачнасць паблізу".</translation> <translation id="6635674640674343739">Не ўдалося ўстанавіць падключэнне да сеткі. Праверце падключэнне да сеткі і паўтарыце спробу.</translation> @@ -5685,6 +5704,7 @@ <translation id="6973611239564315524">Даступна абнаўленне да Debian 10 (Buster)</translation> <translation id="6974609594866392343">Пазасеткавы дэма-рэжым</translation> <translation id="697508444536771064">Завяршыць працу Linux</translation> +<translation id="6977739184256564679">Прылада <ph name="DEVICE_INDEX" /> з <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, планшэт.</translation> <translation id="6978121630131642226">Пошукавыя сістэмы</translation> <translation id="6979044105893951891">Запуск і завяршэнне гасцявых сеансаў пад кіраваннем</translation> <translation id="6979158407327259162">Google Дыск</translation> @@ -5704,6 +5724,7 @@ <translation id="6991665348624301627">Выберыце месца прызначэння</translation> <translation id="6992554835374084304">Уключэнне палепшанай праверкі правапісу</translation> <translation id="6993000214273684335">Укладка выдалена з групы без назвы – <ph name="GROUP_CONTENTS" /></translation> +<translation id="6993889405941892667">Прылада <ph name="DEVICE_INDEX" /> з <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, камп'ютар.</translation> <translation id="6994069045767983299">Інвертаваныя колеры</translation> <translation id="6995899638241819463">Папярэджваць мяне ў выпадку, калі пры ўцечцы даных былі раскрыты паролі</translation> <translation id="6997642619627518301"><ph name="NAME_PH" /> – журнал актыўнасці</translation> @@ -6275,6 +6296,7 @@ <translation id="7602173054665172958">Кіраванне друкам</translation> <translation id="7603785829538808504">Да пералічаных ніжэй сайтаў прымяняецца карыстальніцкая налада</translation> <translation id="7605594153474022051">Сінхранізацыя не працуе</translation> +<translation id="7606560865764296217">Прыпыніць анімацыю</translation> <translation id="7606992457248886637">Цэнтры</translation> <translation id="7607002721634913082">Прыпынена</translation> <translation id="7608810328871051088">Налады Android</translation> @@ -7082,6 +7104,7 @@ <translation id="8410775397654368139">Google Play</translation> <translation id="8412136526970428322">Дазволена: <ph name="PERMISSION" /> і яшчэ <ph name="COUNT" /></translation> <translation id="8413385045638830869">Спачатку запытваць (рэкамендуецца)</translation> +<translation id="8416730306157376817"><ph name="BATTERY_PERCENTAGE" />% (чахол)</translation> <translation id="8417548266957501132">Бацькоўскі пароль</translation> <translation id="8418445294933751433">&Паказаць як укладку</translation> <translation id="8419098111404128271">Вынікі пошуку па запыце "<ph name="SEARCH_TEXT" />"</translation> @@ -7427,6 +7450,7 @@ Па правілах дамена <ph name="DOMAIN" /> разумная картка павінна быць устаўлена.}many{Ваша прылада <ph name="DEVICE_TYPE" /> будзе аўтаматычна заблакіравана праз # секунд. Па правілах дамена <ph name="DOMAIN" /> разумная картка павінна быць устаўлена.}other{Ваша прылада <ph name="DEVICE_TYPE" /> будзе аўтаматычна заблакіравана праз # секунды. Па правілах дамена <ph name="DOMAIN" /> разумная картка павінна быць устаўлена.}}</translation> +<translation id="8777259617149177596">Зарад акумулятара чахла: <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="8777628254805677039">root-пароль</translation> <translation id="8778328560035799409">Прызначаныя цяпер пераключальнікі будуць выдалены</translation> <translation id="8780123805589053431">Атрымліваць апісанні відарысаў ад Google</translation> @@ -7782,6 +7806,7 @@ <translation id="9128335130883257666">Адкрыць старонку налад для метаду ўводу "<ph name="INPUT_METHOD_NAME" />"</translation> <translation id="9128870381267983090">Падключыцеся да сеткі</translation> <translation id="9130015405878219958">Уведзены няправільны рэжым.</translation> +<translation id="9130215884425927484">Прылада <ph name="DEVICE_INDEX" /> з <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, аўдыяпрылада.</translation> <translation id="9131487537093447019">Адпраўка і атрыманне паведамленняў з прылад Bluetooth.</translation> <translation id="9134066738478820307">Сайты могуць выкарыстоўваць ідэнтыфікатары для прайгравання абароненага змесціва</translation> <translation id="913411432238655354">Аднаўляць праграмы пры запуску</translation> @@ -7825,6 +7850,7 @@ <translation id="916964310188958970">Чаму паказваецца гэта прапанова?</translation> <translation id="9170048603158555829">Thunderbolt</translation> <translation id="9170061643796692986">Бягучая налада бачнасці: усе кантакты</translation> +<translation id="9170199455952690202">Зарад акумулятара ў правым навушніку: <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="9170848237812810038">&Адрабіць</translation> <translation id="9170884462774788842">Іншая праграма на камп'ютары дадала тэму, якая можа змяніць працу Chrome.</translation> <translation id="917350715406657904">Скончыўся ліміт часу, зададзены вашымі бацькамі для праграмы "<ph name="APP_NAME" />". Заўтра ёю можна будзе карыстацца <ph name="TIME_LIMIT" />.</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb index bcfc477..152265a 100644 --- a/chrome/app/resources/generated_resources_cs.xtb +++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -1698,6 +1698,7 @@ <translation id="2721037002783622288">&Vyhledat obrázek pomocí vyhledávače <ph name="SEARCH_ENGINE" /></translation> <translation id="2721334646575696520">Microsoft Edge</translation> <translation id="2721695630904737430">Váš administrátor dozorované uživatele zakázal.</translation> +<translation id="2722540561488096675">Zařízení se za <ph name="TIME_LEFT" /> vypne. Než ho znovu zapnete, vyjměte z něj USB. Poté můžete zařízení <ph name="DEVICE_OS" /> začít používat.</translation> <translation id="2724841811573117416">Protokoly WebRTC</translation> <translation id="272488616838512378">Převod jednotek</translation> <translation id="2725200716980197196">Připojení k síti bylo obnoveno</translation> @@ -4553,6 +4554,7 @@ <translation id="5739235828260127894">Čeká na ověření. <ph name="LINK_BEGIN" />Další informace<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Velmi velké</translation> <translation id="5740328398383587084">Sdílení nablízko</translation> +<translation id="5740709157181662145"><ph name="DEVICE_OS" /> – hardwarová podpora a stabilita</translation> <translation id="574104302965107104">Zrcadlení displeje</translation> <translation id="574209121243317957">Výška</translation> <translation id="5746169159649715125">Uložit jako PDF</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb index 7c47a18a..81ad0894 100644 --- a/chrome/app/resources/generated_resources_da.xtb +++ b/chrome/app/resources/generated_resources_da.xtb
@@ -1713,6 +1713,7 @@ <translation id="2721037002783622288">&Søg efter billedet på <ph name="SEARCH_ENGINE" /></translation> <translation id="2721334646575696520">Microsoft Edge</translation> <translation id="2721695630904737430">Administrerede brugere er deaktiveret af din administrator.</translation> +<translation id="2722540561488096675">Din enhed lukker ned om <ph name="TIME_LEFT" />. Fjern USB-enheden, før du tænder enheden igen. Derefter kan du begynde at bruge <ph name="DEVICE_OS" />.</translation> <translation id="2724841811573117416">WebRTC-logfiler</translation> <translation id="272488616838512378">Enhedsomregning</translation> <translation id="2725200716980197196">Forbindelsen til netværket er genoprettet</translation> @@ -4570,6 +4571,7 @@ <translation id="5739235828260127894">Venter på bekræftelse. <ph name="LINK_BEGIN" />Få flere oplysninger<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Meget stor</translation> <translation id="5740328398383587084">Deling tæt på</translation> +<translation id="5740709157181662145"><ph name="DEVICE_OS" />-stabilitet og -understøttelse af hardware</translation> <translation id="574104302965107104">Skærmspejling</translation> <translation id="574209121243317957">Toneleje</translation> <translation id="5746169159649715125">Gem som PDF</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index 3c5a5b7..d66f916 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -1712,6 +1712,7 @@ <translation id="2721037002783622288">&Αναζήτηση <ph name="SEARCH_ENGINE" /> για εικόνα</translation> <translation id="2721334646575696520">Microsoft Edge</translation> <translation id="2721695630904737430">Οι εποπτευόμενοι χρήστες έχουν απενεργοποιηθεί από τον διαχειριστή σας.</translation> +<translation id="2722540561488096675">Η συσκευή σας θα απενεργοποιηθεί σε <ph name="TIME_LEFT" />. Αφαιρέστε το USB προτού ενεργοποιήσετε ξανά τη συσκευή σας. Στη συνέχεια, θα μπορείτε να ξεκινήσετε τη χρήση του <ph name="DEVICE_OS" />.</translation> <translation id="2724841811573117416">Αρχεία καταγραφής WebRTC</translation> <translation id="272488616838512378">Μετατροπή μονάδων</translation> <translation id="2725200716980197196">Αποκαταστάθηκε η συνδεσιμότητα δικτύου</translation> @@ -4570,6 +4571,7 @@ <translation id="5739235828260127894">Αναμονή για επαλήθευση. <ph name="LINK_BEGIN" />Μάθετε περισσότερα<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Πολύ μεγάλο</translation> <translation id="5740328398383587084">Κοινοποίηση κοντά</translation> +<translation id="5740709157181662145">Υποστήριξη εξοπλισμού και σταθερότητα <ph name="DEVICE_OS" /></translation> <translation id="574104302965107104">Κατοπτρισμός οθόνης</translation> <translation id="574209121243317957">Τόνος</translation> <translation id="5746169159649715125">Αποθήκευση ως PDF</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb index abf121ca..6a32df3 100644 --- a/chrome/app/resources/generated_resources_es-419.xtb +++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -132,6 +132,7 @@ <translation id="1129850422003387628">Administrar apps</translation> <translation id="113050636487300043">Elige un nombre y un tema de color para diferenciar los perfiles.</translation> <translation id="1130589222747246278"><ph name="WINDOW_TITLE" />: Parte del grupo <ph name="GROUP_NAME" /></translation> +<translation id="1130676589211693127">Nivel de batería del Pixel Bud derecho <ph name="PERCENTAGE" />%.</translation> <translation id="1133418583142946603">Agregar pestaña actual</translation> <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_INDEX" /> de <ph name="EMOJI_COUNT" />.</translation> <translation id="1136712381129578788">Se ingresó el PIN de forma incorrecta demasiadas veces; por lo tanto, se bloqueó la llave de seguridad. Para desbloquearla, quítala y vuelve a insertarla.</translation> @@ -1631,6 +1632,7 @@ <translation id="2665647207431876759">Caducado</translation> <translation id="2665717534925640469">Esta página se está visualizando en pantalla completa y ha inhabilitado el cursor del mouse.</translation> <translation id="2665919335226618153">Se produjo un error durante la aplicación de formato.</translation> +<translation id="2666247341166669829">Nivel de batería del Pixel Bud izquierdo <ph name="PERCENTAGE" />%.</translation> <translation id="2667144577800272420">Se configuraron otras apps para abrir los mismos vínculos que <ph name="APP_NAME" />. Esta acción impedirá que <ph name="APP_NAME_2" /> y <ph name="APP_NAME_3" /> abran los vínculos compatibles.</translation> <translation id="2667463864537187133">Administrar el corrector ortográfico</translation> <translation id="2669241540496514785">No se pudo abrir <ph name="APP_NAME" /></translation> @@ -1949,6 +1951,7 @@ <translation id="2979639724566107830">Abrir en una ventana nueva</translation> <translation id="2981113813906970160">Mostrar cursor del mouse grande</translation> <translation id="2981474224638493138">Calidad de proyección de escritorio o pestaña</translation> +<translation id="2983373101216420412">Nivel de batería de la funda <ph name="PERCENTAGE" />%.</translation> <translation id="2985348301114641460">¿Deseas enviarle una solicitud al administrador para instalar "<ph name="EXTENSION_NAME" />"?</translation> <translation id="2987620471460279764">Texto compartido desde otro dispositivo</translation> <translation id="2988018669686457659">Renderizador anticipado</translation> @@ -2005,6 +2008,7 @@ <translation id="3030967311408872958">Del atardecer al amanecer</translation> <translation id="3031417829280473749">Agente X</translation> <translation id="3031557471081358569">Selecciona elementos para importar:</translation> +<translation id="3033348223765101500">Controla tus datos</translation> <translation id="3036327949511794916">Ya pasó la fecha límite para devolver este dispositivo <ph name="DEVICE_TYPE" />.</translation> <translation id="3036546437875325427">Habilitar Flash</translation> <translation id="3037754279345160234">No se puede analizar la configuración para vincular el dominio. Comunícate con el administrador.</translation> @@ -2105,6 +2109,7 @@ <translation id="3143754809889689516">Reproducir desde el principio</translation> <translation id="3144647712221361880">Abrir vínculo como</translation> <translation id="3149510190863420837">Aplicaciones de Chrome</translation> +<translation id="3150622786624965651">Dispositivo <ph name="DEVICE_INDEX" /> de <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, control de juegos.</translation> <translation id="3150693969729403281">Ejecuta la verificación de seguridad ahora</translation> <translation id="3150927491400159470">Volver a cargar de manera forzada</translation> <translation id="315116470104423982">Datos móviles</translation> @@ -2311,6 +2316,7 @@ <translation id="339178315942519818">Mira las notificaciones de las apps de chat en tu dispositivo <ph name="DEVICE_TYPE" />.</translation> <translation id="3393554941209044235">Análisis de documentos de Chrome</translation> <translation id="3394850431319394743">Puede usar identificadores para reproducir contenido protegido.</translation> +<translation id="3395403082745257596">Dispositivo <ph name="DEVICE_INDEX" /> de <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, tipo de dispositivo desconocido.</translation> <translation id="3396744558790608201">Haz clic con el botón derecho y selecciona "Buscar imágenes con Google Lens" para buscar cualquier parte del sitio y obtener más información sobre el contenido visual que ves mientras navegas y realizas compras en la Web.</translation> <translation id="3396800784455899911">Al hacer clic en el botón "Aceptar y continuar", confirmas el procesamiento descrito anteriormente para estos servicios de Google.</translation> <translation id="339722927132407568">Intermitente</translation> @@ -2366,6 +2372,7 @@ <translation id="3440663250074896476">Más acciones para <ph name="BOOKMARK_NAME" /></translation> <translation id="3441653493275994384">Pantalla</translation> <translation id="3441663102605358937">Vuelve a acceder a <ph name="ACCOUNT" /> para verificar esta cuenta</translation> +<translation id="3442674350323953953">Permitir que Google utilice tus datos de hardware para mejorar <ph name="DEVICE_OS" />. Si lo rechazas, se enviarán estos datos a Google para determinar las actualizaciones adecuadas, pero no se almacenarán ni se utilizarán de otra manera.</translation> <translation id="3444641828375597683">Los anunciantes y los publicadores pueden usar el FLoC, que se describe más adelante en esta página.</translation> <translation id="3444726579402183581"><ph name="ORIGIN" /> podrá ver el archivo <ph name="FILENAME" /></translation> <translation id="3445047461171030979">Respuestas rápidas del Asistente de Google</translation> @@ -2498,6 +2505,7 @@ <translation id="3569682580018832495"><ph name="ORIGIN" /> puede ver los siguientes archivos y carpetas</translation> <translation id="3571734092741541777">Configurar</translation> <translation id="3575121482199441727">Permitir para este sitio</translation> +<translation id="3577745545227000795">Recopilación de datos de hardware de <ph name="DEVICE_OS" /></translation> <translation id="3578594933904494462">Se está compartiendo el contenido de esta pestaña.</translation> <translation id="3581605050355435601">Configurar la dirección IP de forma automática</translation> <translation id="3582057310199111521">Se ingresó en un sitio engañoso y se encontró en una violación de la seguridad de los datos</translation> @@ -2933,6 +2941,7 @@ <translation id="3994374631886003300">Desbloquea tu teléfono y acércalo para desbloquear tu <ph name="DEVICE_TYPE" />.</translation> <translation id="3994878504415702912">&Tamaño</translation> <translation id="3995138139523574647">Dispositivo USB-C (puerto lateral derecho trasero)</translation> +<translation id="3995963973192100066">Reproducir animación</translation> <translation id="4002329649066944389">Administra las excepciones de sitios específicos</translation> <translation id="4002440992267487163">Configuración del PIN</translation> <translation id="4005817994523282006">Método de detección de la zona horaria</translation> @@ -3576,6 +3585,7 @@ <translation id="4728558894243024398">Plataforma</translation> <translation id="4728570203948182358"><ph name="BEGIN_LINK" />Tu administrador<ph name="END_LINK" /> desactivó la función que busca software dañino.</translation> <translation id="4730492586225682674">Nota más reciente con la pluma stylus en la pantalla de bloqueo</translation> +<translation id="4733161265940833579"><ph name="BATTERY_PERCENTAGE" />% (izquierdo)</translation> <translation id="4733793249294335256">Ubicación</translation> <translation id="473546211690256853">Esta cuenta está administrada por <ph name="DOMAIN" />.</translation> <translation id="4735803855089279419">El sistema no pudo determinar los identificadores de dispositivo para este dispositivo.</translation> @@ -4136,6 +4146,7 @@ <translation id="5341793073192892252">Se bloquearon las siguientes cookies (las cookies de terceros se bloquean sin excepción)</translation> <translation id="5342091991439452114">El PIN debe tener al menos <ph name="MINIMUM" /> dígitos</translation> <translation id="5344036115151554031">Restaurando Linux</translation> +<translation id="5344128444027639014"><ph name="BATTERY_PERCENTAGE" />% (derecho)</translation> <translation id="5345916423802287046">Iniciar la app al acceder</translation> <translation id="5350293332385664455">Desactivar el Asistente de Google</translation> <translation id="535123479159372765">Texto copiado de otro dispositivo</translation> @@ -4373,6 +4384,7 @@ <translation id="5585898376467608182">El dispositivo tiene poco espacio de almacenamiento. Se necesitan al menos <ph name="MINIMUM_SPACE" /> de espacio libre para usar <ph name="APP_NAME" />. Si necesitas liberar espacio, borra archivos del dispositivo.</translation> <translation id="5585912436068747822">Error al dar formato</translation> <translation id="5588033542900357244">(<ph name="RATING_COUNT" />)</translation> +<translation id="5589101568518637088">Dispositivo <ph name="DEVICE_INDEX" /> de <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, teclado.</translation> <translation id="558918721941304263">Cargando apps…</translation> <translation id="5592595402373377407">Aún no hay suficientes datos disponibles.</translation> <translation id="5595485650161345191">Editar dirección</translation> @@ -4570,6 +4582,7 @@ <translation id="5817069030404929329">¿Deseas mover las contraseñas de este dispositivo a tu Cuenta de Google?</translation> <translation id="5817918615728894473">Sincronizar</translation> <translation id="5821565227679781414">Crear acceso directo</translation> +<translation id="5822095611691580107">Nivel de batería del Pixel Bud izquierdo <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="5822865422567397338">Si quieres realizar una búsqueda en un sitio específico o en una parte de Chrome, puedes usar estos atajos. Por ejemplo, para realizar una búsqueda solo en Gmail, escribe "@gmail" y, luego, presiona Tab o la barra espaciadora.</translation> <translation id="5825412242012995131">Activado (recomendado)</translation> <translation id="5826395379250998812">Conecta tu <ph name="DEVICE_TYPE" /> con el teléfono. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation> @@ -5022,6 +5035,7 @@ <translation id="6294759976468837022">Velocidad de la búsqueda automática</translation> <translation id="6295158916970320988">Todos los sitios</translation> <translation id="6295855836753816081">Guardando…</translation> +<translation id="6297132509712149399">Dispositivo <ph name="DEVICE_INDEX" /> de <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, teléfono.</translation> <translation id="629730747756840877">Cuenta</translation> <translation id="6298962879096096191">Usar Google Play para instalar apps de Android</translation> <translation id="6300177430812514606">No puede completar el envío ni la recepción de datos</translation> @@ -5235,6 +5249,9 @@ <translation id="6528179044667508675">No interrumpir</translation> <translation id="652948702951888897">Historial de Chrome</translation> <translation id="6530186581263215931">Tu administrador gestiona estas opciones de configuración.</translation> +<translation id="653031671361866334"><ph name="BEGIN_PARAGRAPH1" />A fin de proporcionar la mejor experiencia, <ph name="DEVICE_OS" /> recopila datos de hardware de los dispositivos y los comparte con Google para determinar qué actualizaciones hacer. De manera opcional, podrás permitir que Google utilice estos datos con otros fines, como la asistencia y mejoras en la experiencia y el servicio de <ph name="DEVICE_OS" />.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />Puedes acceder en este dispositivo y visitar la sección CLOUDREADY_HARDWARE_INFO en chrome://system a fin de ver los datos que se enviaron a Google para filtrar las actualizaciones, así como cualquier otra instancia en la que decidas compartir datos con Google.<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" />Para obtener más detalles sobre los datos que <ph name="DEVICE_OS" /> puede compartir con Google y como se utilizan, visita g.co/xxxxx<ph name="END_PARAGRAPH3" /></translation> <translation id="6531282281159901044">Conservar archivo peligroso</translation> <translation id="6532101170117367231">Guardar en Google Drive</translation> <translation id="6532106788206463496">Guardar cambios</translation> @@ -5309,6 +5326,7 @@ <translation id="6601612474695404578">Algunos sitios usan cookies de terceros para cargar las páginas. Si un sitio no funciona, intenta activar las cookies.</translation> <translation id="6602937173026466876">Acceder a tus impresoras</translation> <translation id="6602956230557165253">Utiliza las teclas de flecha hacia la izquierda y derecha para navegar.</translation> +<translation id="6602998402703530379">Dispositivo <ph name="DEVICE_INDEX" /> de <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, videocámara.</translation> <translation id="6605847144724004692">Todavía no tiene una calificación de los usuarios.</translation> <translation id="6606671997164410857">Al parecer, ya configuraste Asistente de Google en otro dispositivo. Activa el contexto de la pantalla en este dispositivo para sacarle incluso más provecho a Asistente.</translation> <translation id="6607831829715835317">Más herramientas</translation> @@ -5330,6 +5348,7 @@ <translation id="6624535038674360844"><ph name="FILE_NAME" /> incluye contenido sensible o peligroso. Pídele al propietario que solucione el problema.</translation> <translation id="6624687053722465643">Dulzura</translation> <translation id="6628328486509726751">Fecha y hora de carga: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation> +<translation id="663065535202460123">Dispositivo <ph name="DEVICE_INDEX" /> de <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, mouse.</translation> <translation id="6630752851777525409"><ph name="EXTENSION_NAME" /> solicita acceso permanente a un certificado para autenticarse en tu nombre.</translation> <translation id="6635362468090274700">Para que las personas puedan compartir contenido contigo, primero debes estar visible.<ph name="BR" /><ph name="BR" />Para activar tu visibilidad de forma temporal, abre el área de estado y, luego, activa la visibilidad de Nearby.</translation> <translation id="6635674640674343739">No es posible establecer una conexión de red. Verifica tu conexión de red y vuelve a intentarlo.</translation> @@ -5655,6 +5674,7 @@ <translation id="6973611239564315524">Hay disponible una actualización a Debian 10 (Buster)</translation> <translation id="6974609594866392343">Modo de demostración sin conexión</translation> <translation id="697508444536771064">Cerrar Linux</translation> +<translation id="6977739184256564679">Dispositivo <ph name="DEVICE_INDEX" /> de <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, tablet.</translation> <translation id="6978121630131642226">Motores de búsqueda</translation> <translation id="6979044105893951891">Inicia las sesiones de invitado administradas y sal de ellas</translation> <translation id="6979158407327259162">Google Drive</translation> @@ -5674,6 +5694,7 @@ <translation id="6991665348624301627">Seleccionar un destino</translation> <translation id="6992554835374084304">Activa el corrector ortográfico mejorado</translation> <translation id="6993000214273684335">Se quitó la pestaña del grupo sin nombre - <ph name="GROUP_CONTENTS" /></translation> +<translation id="6993889405941892667">Dispositivo <ph name="DEVICE_INDEX" /> de <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, computadora.</translation> <translation id="6994069045767983299">Colores invertidos</translation> <translation id="6995899638241819463">Advertirme si quedan expuestas las contraseñas ante una violación de la seguridad de los datos</translation> <translation id="6997642619627518301"><ph name="NAME_PH" />: Registro de actividad</translation> @@ -6243,6 +6264,7 @@ <translation id="7602173054665172958">Administración de impresiones</translation> <translation id="7603785829538808504">Los sitios que se mencionan a continuación usan una configuración personalizada.</translation> <translation id="7605594153474022051">La sincronización no funciona</translation> +<translation id="7606560865764296217">Pausar animación</translation> <translation id="7606992457248886637">Autoridades</translation> <translation id="7607002721634913082">Detenido</translation> <translation id="7608810328871051088">Preferencias de Android</translation> @@ -7051,6 +7073,7 @@ <translation id="8410775397654368139">Google Play</translation> <translation id="8412136526970428322">Permisos habilitados: <ph name="PERMISSION" /> y <ph name="COUNT" /> más</translation> <translation id="8413385045638830869">Preguntar primero (recomendado)</translation> +<translation id="8416730306157376817"><ph name="BATTERY_PERCENTAGE" />% (funda)</translation> <translation id="8417548266957501132">Contraseña del padre o madre</translation> <translation id="8418445294933751433">Mo&strar como pestaña</translation> <translation id="8419098111404128271">Resultados de la búsqueda para "<ph name="SEARCH_TEXT" />"</translation> @@ -7392,6 +7415,7 @@ <translation id="8775653927968399786">{0,plural, =1{Tu <ph name="DEVICE_TYPE" /> se bloqueará automáticamente en # segundo. <ph name="DOMAIN" /> requiere que no quites la tarjeta inteligente.}other{Tu <ph name="DEVICE_TYPE" /> se bloqueará automáticamente en # segundos. <ph name="DOMAIN" /> requiere que no quites la tarjeta inteligente.}}</translation> +<translation id="8777259617149177596">Nivel de batería de la funda <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="8777628254805677039">contraseña de raíz</translation> <translation id="8778328560035799409">Se borrarán los interruptores que hayas asignado.</translation> <translation id="8780123805589053431">Obtener descripciones de imágenes de Google</translation> @@ -7748,6 +7772,7 @@ <translation id="9128335130883257666">Abrir la página de configuración para <ph name="INPUT_METHOD_NAME" /></translation> <translation id="9128870381267983090">Conectarse a una red</translation> <translation id="9130015405878219958">Se ingresó un modo no válido.</translation> +<translation id="9130215884425927484">Dispositivo <ph name="DEVICE_INDEX" /> de <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, dispositivo de audio.</translation> <translation id="9131487537093447019">Enviar y recibir mensajes desde dispositivos Bluetooth</translation> <translation id="9134066738478820307">Permitir que los sitios utilicen identificadores para reproducir contenido protegido</translation> <translation id="913411432238655354">Restablecer apps en el inicio</translation> @@ -7791,6 +7816,7 @@ <translation id="916964310188958970">¿Por qué recibo esta sugerencia?</translation> <translation id="9170048603158555829">Thunderbolt</translation> <translation id="9170061643796692986">Se estableció la configuración de visibilidad actual en Todos los contactos</translation> +<translation id="9170199455952690202">Nivel de batería del Pixel Bud derecho <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="9170848237812810038">&Deshacer</translation> <translation id="9170884462774788842">Otro programa en tu computadora agregó un tema que puede cambiar el funcionamiento de Chrome.</translation> <translation id="917350715406657904">Alcanzaste el límite de tiempo que tu madre o padre establecieron para <ph name="APP_NAME" />. Mañana podrás volver a usar esta app por <ph name="TIME_LIMIT" />.</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb index bf8414f..31da058c 100644 --- a/chrome/app/resources/generated_resources_fi.xtb +++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -134,6 +134,7 @@ <translation id="1129850422003387628">Sovellusvalinnat</translation> <translation id="113050636487300043">Valitse nimi ja väriteema erottaaksesi profiilit</translation> <translation id="1130589222747246278"><ph name="WINDOW_TITLE" /> – kuuluu ryhmään: <ph name="GROUP_NAME" /></translation> +<translation id="1130676589211693127">Oikeanpuoleisen akun varaustaso <ph name="PERCENTAGE" /> %.</translation> <translation id="1133418583142946603">Lisää tämä välilehti</translation> <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_INDEX" />/<ph name="EMOJI_COUNT" />.</translation> <translation id="1136712381129578788">Suojausavain on lukittu, koska väärä PIN-koodi syötettiin liian monta kertaa. Avaa lukitus poistamalla avain ja asettamalla se uudelleen.</translation> @@ -1655,6 +1656,7 @@ <translation id="2665647207431876759">Vanhentunut</translation> <translation id="2665717534925640469">Tämä sivu on nyt koko ruudun kokoinen ja on poistanut hiiren osoittimen käytöstä.</translation> <translation id="2665919335226618153">Harmin paikka! Alustuksen aikana tapahtui virhe.</translation> +<translation id="2666247341166669829">Vasemmanpuoleisen akun varaus <ph name="PERCENTAGE" /> %.</translation> <translation id="2667144577800272420">Muut sovellukset on asetettu avaamaan samat linkit kuin <ph name="APP_NAME" />. Muutoksen jälkeen <ph name="APP_NAME_2" /> ja <ph name="APP_NAME_3" /> eivät enää voi avata tuettuja linkkejä.</translation> <translation id="2667463864537187133">Hallitse oikeinkirjoituksen tarkistusta</translation> <translation id="2669241540496514785"><ph name="APP_NAME" />:n avaus ei onnistunut</translation> @@ -1973,6 +1975,7 @@ <translation id="2979639724566107830">Avaa uudessa ikkunassa</translation> <translation id="2981113813906970160">Näytä suuri hiiren osoitin</translation> <translation id="2981474224638493138">Välilehden tai työpöydän heijastuksen laatu</translation> +<translation id="2983373101216420412">Kotelon akun varaustaso <ph name="PERCENTAGE" /> %.</translation> <translation id="2985348301114641460">Lähetetäänkö järjestelmänvalvojallesi pyyntö asentaa <ph name="EXTENSION_NAME" />?</translation> <translation id="2987620471460279764">Toiselta laitteelta jaettu teksti</translation> <translation id="2988018669686457659">Varahahmontaja</translation> @@ -2029,6 +2032,7 @@ <translation id="3030967311408872958">Auringonlaskusta sen nousuun</translation> <translation id="3031417829280473749">Agentti X</translation> <translation id="3031557471081358569">Valitse tuotavat kohteet:</translation> +<translation id="3033348223765101500">Hallitse dataasi</translation> <translation id="3036327949511794916">Laitteen (<ph name="DEVICE_TYPE" />) palauttamisen määräaika on mennyt umpeen.</translation> <translation id="3036546437875325427">Ota Flash käyttöön</translation> <translation id="3037754279345160234">Verkkotunnuksen liittymiskonfiguraatiota ei voi jäsentää. Ota yhteyttä järjestelmänvalvojaan.</translation> @@ -2129,6 +2133,7 @@ <translation id="3143754809889689516">Toista alusta</translation> <translation id="3144647712221361880">Avaa linkki käyttäjänä</translation> <translation id="3149510190863420837">Chrome-sovellukset</translation> +<translation id="3150622786624965651">Laite <ph name="DEVICE_INDEX" />/<ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, peliohjain.</translation> <translation id="3150693969729403281">Tee turvatarkistus nyt</translation> <translation id="3150927491400159470">Pakotettu päivitys</translation> <translation id="315116470104423982">Mobiilitiedonsiirto</translation> @@ -2336,6 +2341,7 @@ <translation id="339178315942519818">Katso ilmoitukset laitteen (<ph name="DEVICE_TYPE" />) chat-sovelluksista</translation> <translation id="3393554941209044235">Chromen dokumenttianalyysi</translation> <translation id="3394850431319394743">Tunnisteiden käyttö on sallittua suojatun sisällön toistamisessa</translation> +<translation id="3395403082745257596">Laite <ph name="DEVICE_INDEX" />/<ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, tuntematon laitetyyppi.</translation> <translation id="3396744558790608201">Hae miltä tahansa sivuston alueelta klikkaamalla kakkospainikkeella ja valitsemalla "Hae kuvia Google Lensillä". Näin saat lisätietoja kuvasisällöstä, jota näet selatessasi ja shoppaillessasi internetissä.</translation> <translation id="3396800784455899911">Kun valitset Hyväksy ja jatka, hyväksyt käsittelyn näissä Google-palveluissa edellä kuvatuilla tavoilla.</translation> <translation id="339722927132407568">Jumiutuu</translation> @@ -2391,6 +2397,7 @@ <translation id="3440663250074896476">Lisää toimintoja: <ph name="BOOKMARK_NAME" /></translation> <translation id="3441653493275994384">Näyttö</translation> <translation id="3441663102605358937">Kirjaudu uudelleen sisään sivustolle <ph name="ACCOUNT" /> vahvistaaksesi tilin</translation> +<translation id="3442674350323953953">Salli Googlen käyttää laitedataasi palvelun (<ph name="DEVICE_OS" />) kehittämiseksi. Jos kieltäydyt, dataa lähetetään Googlelle tarvittavien päivitysten selvittämiseksi, mutta sitä ei tallenneta tai käytetä muihin tarkoituksiin.</translation> <translation id="3444641828375597683">Mainostajat ja julkaisijat voivat käyttää FLoC-tekniikkaa (lisätietoja tällä sivulla).</translation> <translation id="3444726579402183581"><ph name="ORIGIN" /> voi nähdä tämän: <ph name="FILENAME" /></translation> <translation id="3445047461171030979">Google Assistantin nopeat vastaukset</translation> @@ -2523,6 +2530,7 @@ <translation id="3569682580018832495"><ph name="ORIGIN" /> saa nähdä seuraavat tiedostot ja kansiot</translation> <translation id="3571734092741541777">Määritä</translation> <translation id="3575121482199441727">Salli tällä sivustolla</translation> +<translation id="3577745545227000795">Laitedatan kerääminen: <ph name="DEVICE_OS" /></translation> <translation id="3578594933904494462">Tämän välilehden sisältöä jaetaan.</translation> <translation id="3581605050355435601">Määritä IP-osoite automaattisesti</translation> <translation id="3582057310199111521">Käytetty petollisella sivustolla ja kuului tietosuojaloukkaukseen</translation> @@ -2961,6 +2969,7 @@ <translation id="3994374631886003300">Avaa laitteen <ph name="DEVICE_TYPE" /> lukitus avaamalla ensin puhelimesi ja tuomalla se lähelle laitetta.</translation> <translation id="3994878504415702912">&Koko</translation> <translation id="3995138139523574647">C-tyypin USB-laite (oikean sivun taaimmainen portti)</translation> +<translation id="3995963973192100066">Toista animaatio</translation> <translation id="4002329649066944389">Ylläpidä sivustokohtaisia poikkeuksia</translation> <translation id="4002440992267487163">Aseta PIN</translation> <translation id="4005817994523282006">Aikavyöhykkeen tunnistusmenetelmä</translation> @@ -3611,6 +3620,7 @@ <translation id="4728558894243024398">Käyttöympäristö</translation> <translation id="4728570203948182358"><ph name="BEGIN_LINK" />Järjestelmänvalvoja<ph name="END_LINK" /> on laittanut haittaohjelmatarkistukset pois päältä</translation> <translation id="4730492586225682674">Näyttökynä viimeisin muistiinpano lukitusnäytöllä</translation> +<translation id="4733161265940833579"><ph name="BATTERY_PERCENTAGE" /> % (vasen)</translation> <translation id="4733793249294335256">Sijainti</translation> <translation id="473546211690256853">Tätä tiliä hallitsee <ph name="DOMAIN" /></translation> <translation id="4735803855089279419">Järjestelmä ei onnistunut määrittämään tämän laitteen laitetunnisteita.</translation> @@ -4176,6 +4186,7 @@ <translation id="5341793073192892252">Seuraavat evästeet estettiin (kolmannen osapuolen evästeet estetään poikkeuksetta)</translation> <translation id="5342091991439452114">PIN-koodissa on oltava vähintään <ph name="MINIMUM" /> numeroa.</translation> <translation id="5344036115151554031">Palautetaan Linuxia</translation> +<translation id="5344128444027639014"><ph name="BATTERY_PERCENTAGE" /> % (oikea)</translation> <translation id="5345916423802287046">Käynnistä sovellus kun kirjaudut sisään</translation> <translation id="5350293332385664455">Laita Google Assistant pois päältä</translation> <translation id="535123479159372765">Toiselta laitteelta kopioitu teksti</translation> @@ -4415,6 +4426,7 @@ <translation id="5585898376467608182">Laitteesi tallennustila on vähissä. <ph name="APP_NAME" /> tarvitsee vähintään <ph name="MINIMUM_SPACE" /> vapaata tilaa, jotta sitä voi käyttää. Vapauta tilaa poistamalla tiedostoja laitteelta.</translation> <translation id="5585912436068747822">Alustaminen epäonnistui</translation> <translation id="5588033542900357244">(<ph name="RATING_COUNT" />)</translation> +<translation id="5589101568518637088">Laite <ph name="DEVICE_INDEX" />/<ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, näppäimistö.</translation> <translation id="558918721941304263">Ladataan sovelluksia…</translation> <translation id="5592595402373377407">Tietoja ei ole vielä saatavilla tarpeeksi.</translation> <translation id="5595485650161345191">Osoitteen muokkaus</translation> @@ -4616,6 +4628,7 @@ <translation id="5817069030404929329">Siirretäänkö salasanat tältä laitteelta Google-tilillesi?</translation> <translation id="5817918615728894473">Muodosta laitepari</translation> <translation id="5821565227679781414">Luo pikakuvake</translation> +<translation id="5822095611691580107">Vasemman kuulokkeen akun varaus <ph name="BATTERY_PERCENTAGE" /> %.</translation> <translation id="5822865422567397338">Etsi tiettyä sivustoa tai Chromen osaa käyttämällä näitä pikakomentoja. Hae esimerkiksi Gmailia kirjoittamalla "@gmail" ja painamalla sarkainta tai välilyöntiä.</translation> <translation id="5825412242012995131">Käytössä (suositus)</translation> <translation id="5826395379250998812">Yhdistä <ph name="DEVICE_TYPE" /> puhelimeesi. <ph name="LINK_BEGIN" />Lue lisää<ph name="LINK_END" /></translation> @@ -5072,6 +5085,7 @@ <translation id="6294759976468837022">Automaattisen skannauksen nopeus</translation> <translation id="6295158916970320988">Kaikki sivustot</translation> <translation id="6295855836753816081">Tallennetaan…</translation> +<translation id="6297132509712149399">Laite <ph name="DEVICE_INDEX" />/<ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, puhelin.</translation> <translation id="629730747756840877">Tili</translation> <translation id="6298962879096096191">Asenna Android-sovelluksia Google Playn avulla</translation> <translation id="6300177430812514606">Tietojen lähetyksen tai vastaanoton viimeistely kielletty</translation> @@ -5285,6 +5299,9 @@ <translation id="6528179044667508675">Älä häiritse</translation> <translation id="652948702951888897">Chromen historia</translation> <translation id="6530186581263215931">Järjestelmänvalvojasi on ottanut nämä asetukset käyttöön</translation> +<translation id="653031671361866334"><ph name="BEGIN_PARAGRAPH1" /><ph name="DEVICE_OS" /> kerää laitedataa ja jakaa sen Googlelle parhaan mahdollisen käyttökokemuksen tarjoamiseksi. Tämä auttaa selvittämään, millaisia päivityksiä tarvitaan. Voit halutessasi antaa Googlelle luvan käyttää dataa myös muihin tarkoituksiin, esim. käyttökokemuksen ja palvelun (<ph name="DEVICE_OS" />) tukemiseen ja kehittämiseen.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />Näet Googlelle päivitysten suodattamista varten lähetetyn datan (ja kaiken muun Googlelle jakamasi datan) kirjautumalla laitteelle ja siirtymällä Chromen diagnostiikkatietojen (chrome://system) CLOUDREADY_HARDWARE_INFO-osioon.<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" />Lisätietoja datasta, jota <ph name="DEVICE_OS" /> voi jakaa Googlelle, ja sen käytöstä saat osoitteesta g.co/xxxxx<ph name="END_PARAGRAPH3" /></translation> <translation id="6531282281159901044">Pidä haitallinen tiedosto</translation> <translation id="6532101170117367231">Tallenna Google Driveen</translation> <translation id="6532106788206463496">Tallenna muutokset</translation> @@ -5361,6 +5378,7 @@ <translation id="6601612474695404578">Jotkut sivustot käyttävät sivujensa lataamiseen kolmannen osapuolen evästeitä. Jos sivusto ei toimi, voit kokeilla evästeiden sallimista.</translation> <translation id="6602937173026466876">käyttää tulostimia</translation> <translation id="6602956230557165253">Siirry vasemmalla ja oikealla nuolinäppäimellä.</translation> +<translation id="6602998402703530379">Laite <ph name="DEVICE_INDEX" />/<ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, videokamera.</translation> <translation id="6605847144724004692">Ei vielä käyttäjien arvioita</translation> <translation id="6606671997164410857">Näyttää siltä, että olet jo ottanut Google Assistantin käyttöön toisella laitteella. Assistantista on vielä enemmän hyötyä, jos laitat näyttökontekstin päälle.</translation> <translation id="6607831829715835317">&Lisää työkaluja</translation> @@ -5382,6 +5400,7 @@ <translation id="6624535038674360844"><ph name="FILE_NAME" /> sisältää arkaluontoista tai vaarallista sisältöä. Pyydä sen omistajaa korjaamaan asia.</translation> <translation id="6624687053722465643">Herkku</translation> <translation id="6628328486509726751">Lähetetty <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation> +<translation id="663065535202460123">Laite <ph name="DEVICE_INDEX" />/<ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, hiiri.</translation> <translation id="6630752851777525409"><ph name="EXTENSION_NAME" /> haluaa jatkuvan varmenteen käyttöoikeuden voidakseen varmentaa itsensä puolestasi.</translation> <translation id="6635362468090274700">Kukaan ei voi jakaa sinulle sisältöä ennen kuin teet itsestäsi näkyvän.<ph name="BR" /><ph name="BR" />Jos haluat näkyä muille väliaikaisesti, avaa tila-alue ja laita lähinäkyvyys päälle.</translation> <translation id="6635674640674343739">Verkkoyhteyttä ei voi muodostaa. Tarkista verkkoyhteys ja yritä uudelleen.</translation> @@ -5710,6 +5729,7 @@ <translation id="6973611239564315524">Päivitys Debian 10:een (Buster) saatavilla</translation> <translation id="6974609594866392343">Offline-esittelytila</translation> <translation id="697508444536771064">Sammuta Linux</translation> +<translation id="6977739184256564679">Laite <ph name="DEVICE_INDEX" />/<ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, tabletti.</translation> <translation id="6978121630131642226">Hakukoneet</translation> <translation id="6979044105893951891">käynnistää ylläpidettyjä Vierailija-käyttökertoja ja poistua niistä</translation> <translation id="6979158407327259162">Google Drive</translation> @@ -5729,6 +5749,7 @@ <translation id="6991665348624301627">Valitse kohde</translation> <translation id="6992554835374084304">Ota käyttöön parannettu oikeinkirjoituksen tarkistus</translation> <translation id="6993000214273684335">Välilehti poistettu nimettömästä ryhmästä – <ph name="GROUP_CONTENTS" /></translation> +<translation id="6993889405941892667">Laite <ph name="DEVICE_INDEX" />/<ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, tietokone.</translation> <translation id="6994069045767983299">Käänteiset värit</translation> <translation id="6995899638241819463">Varoita, jos salasanoja vaarantuu tietosuojaloukkauksessa</translation> <translation id="6997642619627518301"><ph name="NAME_PH" /> – toimintaloki</translation> @@ -6301,6 +6322,7 @@ <translation id="7602173054665172958">Tulostustyöt</translation> <translation id="7603785829538808504">Alla mainituilla sivustoilla käytetään muokattua asetusta</translation> <translation id="7605594153474022051">Synkronointi ei toimi</translation> +<translation id="7606560865764296217">Keskeytä animaatio</translation> <translation id="7606992457248886637">Myöntäjät</translation> <translation id="7607002721634913082">Keskeytetty</translation> <translation id="7608810328871051088">Android-asetukset</translation> @@ -7110,6 +7132,7 @@ <translation id="8410775397654368139">Google Play</translation> <translation id="8412136526970428322">Sallittu: <ph name="PERMISSION" /> ja <ph name="COUNT" /> muuta</translation> <translation id="8413385045638830869">Kysy ensin (suositus)</translation> +<translation id="8416730306157376817"><ph name="BATTERY_PERCENTAGE" /> % (kotelo)</translation> <translation id="8417548266957501132">Vanhemman salasana</translation> <translation id="8418445294933751433">&Näytä välilehtenä</translation> <translation id="8419098111404128271">Tulokset haulle <ph name="SEARCH_TEXT" /></translation> @@ -7452,6 +7475,7 @@ <translation id="8775653927968399786">{0,plural, =1{<ph name="DEVICE_TYPE" /> lukitaan automaattisesti # sekunnin päästä. <ph name="DOMAIN" /> ei salli älykortin poistamista.}other{<ph name="DEVICE_TYPE" /> lukitaan automaattisesti # sekunnin päästä. <ph name="DOMAIN" /> ei salli älykortin poistamista.}}</translation> +<translation id="8777259617149177596">Kotelon akun varaustaso <ph name="BATTERY_PERCENTAGE" /> %.</translation> <translation id="8777628254805677039">pääkäyttäjän salasana</translation> <translation id="8778328560035799409">Tällä hetkellä määritettynä olevat kytkimet tyhjennetään</translation> <translation id="8780123805589053431">Käytä Googlen kuvaselityksiä</translation> @@ -7810,6 +7834,7 @@ <translation id="9128335130883257666">Avaa asetussivu: <ph name="INPUT_METHOD_NAME" /></translation> <translation id="9128870381267983090">Yhdistä verkkoon</translation> <translation id="9130015405878219958">Annoit virheellisen tilan.</translation> +<translation id="9130215884425927484">Laite <ph name="DEVICE_INDEX" />/<ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, äänilaite.</translation> <translation id="9131487537093447019">Lähettää viestejä Bluetooth-laitteisiin ja vastaanottaa viestejä Bluetooth-laitteilta.</translation> <translation id="9134066738478820307">Sivustot voivat käyttää tunnisteita suojatun sisällön toistamiseen</translation> <translation id="913411432238655354">Palauta sovellukset käynnistettäessä</translation> @@ -7853,6 +7878,7 @@ <translation id="916964310188958970">Miksi ehdotus näytetään?</translation> <translation id="9170048603158555829">Thunderbolt</translation> <translation id="9170061643796692986">Näkyvyysasetus on kaikki yhteystiedot</translation> +<translation id="9170199455952690202">Oikean kuulokkeen akun varaus <ph name="BATTERY_PERCENTAGE" /> %.</translation> <translation id="9170848237812810038">K&umoa</translation> <translation id="9170884462774788842">Toinen tietokoneellasi oleva ohjelma lisäsi teeman, joka voi muuttaa Chromen toimintaa.</translation> <translation id="917350715406657904">Vanhempasi asettama aikaraja (<ph name="APP_NAME" />) tuli täyteen. Huomenna voit käyttää sovellusta <ph name="TIME_LIMIT" />.</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb index c4cae79..082491f1 100644 --- a/chrome/app/resources/generated_resources_fr-CA.xtb +++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -1324,6 +1324,7 @@ <translation id="2329597144923131178">Connectez-vous pour synchroniser favoris, historique, mots de passe et autres sur vos appareils.</translation> <translation id="2332131598580221120">Afficher dans la boutique</translation> <translation id="2332192922827071008">Ouvrir les préférences</translation> +<translation id="2332515770639153015">Navigation sécurisée améliorée activée</translation> <translation id="2332742915001411729">Rétablir la valeur par défaut</translation> <translation id="2332948465534020594">Mode Ne pas déranger activé</translation> <translation id="2335111415680198280">{0,plural, =1{Fermer # fenêtre}one{Fermer # fenêtre}other{Fermer # fenêtres}}</translation> @@ -1698,6 +1699,7 @@ <translation id="2721037002783622288">&Rechercher une image avec <ph name="SEARCH_ENGINE" /></translation> <translation id="2721334646575696520">Microsoft Edge</translation> <translation id="2721695630904737430">Les utilisateurs supervisés ont été désactivés par votre administrateur.</translation> +<translation id="2722540561488096675">Votre appareil s'éteindra au bout de <ph name="TIME_LEFT" />. Retirez la clé USB avant de rallumer votre appareil. Vous pourrez ensuite commencer à utiliser <ph name="DEVICE_OS" />.</translation> <translation id="2724841811573117416">Journaux WebRTC</translation> <translation id="272488616838512378">Conversion d'unités</translation> <translation id="2725200716980197196">La connectivité réseau a été rétablie</translation> @@ -3647,6 +3649,7 @@ <translation id="4779136857077979611">Onigiri</translation> <translation id="4779766576531456629">Renommer le réseau cellulaire de la carte eSIM</translation> <translation id="4780321648949301421">Enregistrer la page sous…</translation> +<translation id="4781443161433589743">Vous profitez de la sécurité la plus robuste de Chrome</translation> <translation id="4784559565779618838">Pour rechercher un site en particulier ou une partie de Chrome, vous pouvez taper le raccourci ici, dans la barre de recherche, puis appuyez sur Tabulation ou sur la barre d'espacement.</translation> <translation id="4785719467058219317">Vous utilisez une clé de sécurité qui n'est pas enregistrée auprès de ce site Web</translation> <translation id="478708757211772586">Utilisez le commutateur « Suivant » pour avancer sur l'écran</translation> @@ -4553,6 +4556,7 @@ <translation id="5739235828260127894">En attente de vérification. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Très grand</translation> <translation id="5740328398383587084">Partage à proximité</translation> +<translation id="5740709157181662145">prise en charge et stabilité du matériel de <ph name="DEVICE_OS" /></translation> <translation id="574104302965107104">Duplication d'écran</translation> <translation id="574209121243317957">Timbre de la voix</translation> <translation id="5746169159649715125">Enregistrer au format PDF</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb index cbf38f5..c50f2b3 100644 --- a/chrome/app/resources/generated_resources_fr.xtb +++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -132,6 +132,7 @@ <translation id="1129850422003387628">Gérer les applications</translation> <translation id="113050636487300043">Choisissez un nom et une couleur de thème pour différencier les profils</translation> <translation id="1130589222747246278"><ph name="WINDOW_TITLE" /> – Fait partie du groupe <ph name="GROUP_NAME" /></translation> +<translation id="1130676589211693127">Niveau de batterie côté droit (<ph name="PERCENTAGE" /> %).</translation> <translation id="1133418583142946603">Ajouter l'onglet actuel</translation> <translation id="1136179794690960030"><ph name="EMOJI_NAME" />-<ph name="EMOJI_INDEX" /> sur <ph name="EMOJI_COUNT" />.</translation> <translation id="1136712381129578788">La clé de sécurité est verrouillée, car vous avez saisi un code erroné trop de fois. Pour la déverrouiller, retirez-la et réinsérez-la.</translation> @@ -400,6 +401,7 @@ <translation id="1418954524306642206">Sélectionner le fichier PPD de votre imprimante</translation> <translation id="1420834118113404499">Licences multimédias</translation> <translation id="1420920093772172268"><ph name="TURN_ON_BLUETOOTH_LINK" /> pour autoriser l'association</translation> +<translation id="1421934779300263861">Contribuez à améliorer les fonctionnalités et performances de Chrome et Chrome OS en envoyant automatiquement à Google les rapports d'erreur, ainsi que les données d'utilisation et de diagnostic. Certaines données globales seront aussi utiles aux partenaires Google et développeurs d'applis Android. Si le paramètre "Activité sur le Web et les applications" est activé pour votre compte Google, vos données Android peuvent y être enregistrées.</translation> <translation id="1422159345171879700">Charger les scripts à risque</translation> <translation id="1423716227250567100">Les conséquences seront les suivantes : <ph name="LINE_BREAKS" /> @@ -627,6 +629,8 @@ <translation id="163309982320328737">La largeur de caractères initiale est Complète</translation> <translation id="1633947793238301227">Désactiver l'Assistant Google</translation> <translation id="1634783886312010422">Avez-vous déjà modifié ce mot de passe sur <ph name="WEBSITE" /> ?</translation> +<translation id="163712950892155760"><ph name="BEGIN_PARAGRAPH1" />Les données de l'appli peuvent être toutes celles qu'elle a enregistrées (selon les paramètres du développeur), y compris les contacts, messages, photos, etc. Les données sauvegardées ne sont pas comptabilisées dans votre quota de stockage Drive.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />Vous pouvez désactiver ce service dans les paramètres.<ph name="END_PARAGRAPH2" /></translation> <translation id="1637224376458524414">Enregistrer ce favori sur votre iPhone</translation> <translation id="1637350598157233081">Votre mot de passe est enregistré sur cet appareil</translation> <translation id="1637765355341780467">Une erreur s'est produite lors de l'ouverture de votre profil. Il est possible que certaines fonctionnalités ne soient pas disponibles.</translation> @@ -757,6 +761,7 @@ <translation id="1768212860412467516">Envoyez des commentaires sur <ph name="EXPERIMENT_NAME" />.</translation> <translation id="1768278914020124551">Petit problème… Impossible de contacter le serveur d'ouverture de session. Vérifiez votre connexion réseau et le nom de domaine, puis réessayez.</translation> <translation id="1769104665586091481">Ouvrir le lien dans une nouvelle &fenêtre</translation> +<translation id="177053719077591686">Sauvegardez les applis Android dans Google Drive.</translation> <translation id="177336675152937177">Données d'application hébergée</translation> <translation id="1775706469381199282">Ne pas autoriser les sites à utiliser JavaScript</translation> <translation id="1776712937009046120">Ajouter un utilisateur</translation> @@ -863,6 +868,7 @@ <translation id="186612162884103683">"<ph name="EXTENSION" />" dispose d'un droit d'accès en lecture et en écriture sur les images, les vidéos et les fichiers audio figurant dans les dossiers sélectionnés.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> est prêt à terminer l'installation.</translation> <translation id="1868553836791672080">La fonctionnalité Check-up Mots de passe n'est pas disponible dans Chromium</translation> +<translation id="1868617395637139709">Utilisez la position pour les applis et services Android.</translation> <translation id="1869433484041798909">Bouton de favori</translation> <translation id="1871098866036088250">Ouvrir dans le navigateur Chrome</translation> <translation id="187145082678092583">Moins d'applications</translation> @@ -1320,6 +1326,7 @@ <translation id="2332192922827071008">Ouvrir les préférences</translation> <translation id="2332515770639153015">Navigation sécurisée avec protection renforcée activée</translation> <translation id="2332742915001411729">Rétablir le thème par défaut</translation> +<translation id="2332948465534020594">Mode Ne pas déranger activé</translation> <translation id="2335111415680198280">{0,plural, =1{Fermer # fenêtre}one{Fermer # fenêtre}other{Fermer # fenêtres}}</translation> <translation id="2335122562899522968">Cette page place des cookies.</translation> <translation id="2336228925368920074">Ajouter tous les onglets aux favoris...</translation> @@ -1465,6 +1472,7 @@ <translation id="2484959914739448251">Pour effacer les données de navigation sur tous vos appareils synchronisés et dans votre compte Google, <ph name="BEGIN_LINK" />saisissez votre phrase secrète<ph name="END_LINK" />.</translation> <translation id="2485394160472549611">Recommandé pour vous</translation> <translation id="2485422356828889247">Désinstaller</translation> +<translation id="2485681265915754872">Conditions d'utilisation de Google Play</translation> <translation id="2487067538648443797">Ajouter un favori</translation> <translation id="2487268545026948104">Pour restaurer vos données, connectez-vous à Internet</translation> <translation id="2489686758589235262">Associer 2 autres contacteurs</translation> @@ -1635,6 +1643,7 @@ <translation id="2665647207431876759">Arrivé à expiration</translation> <translation id="2665717534925640469">Cette page est maintenant en mode plein écran et a désactivé le curseur de votre souris.</translation> <translation id="2665919335226618153">Petit problème… Une erreur s'est produite lors du formatage.</translation> +<translation id="2666247341166669829">Niveau de batterie côté gauche (<ph name="PERCENTAGE" /> %).</translation> <translation id="2667144577800272420">D'autres applis sont définies pour ouvrir les mêmes liens que <ph name="APP_NAME" />. Cela empêchera <ph name="APP_NAME_2" /> et <ph name="APP_NAME_3" /> d'ouvrir les liens compatibles.</translation> <translation id="2667463864537187133">Gérer le correcteur orthographique</translation> <translation id="2669241540496514785">Impossible d'ouvrir <ph name="APP_NAME" /></translation> @@ -1953,6 +1962,7 @@ <translation id="2979639724566107830">Ouvrir dans une nouvelle fenêtre</translation> <translation id="2981113813906970160">Afficher le grand curseur</translation> <translation id="2981474224638493138">Qualité de la projection (tablette ou ordinateur)</translation> +<translation id="2983373101216420412">Niveau de batterie de l'étui (<ph name="PERCENTAGE" /> %).</translation> <translation id="2985348301114641460">Envoyer une requête à votre administrateur pour installer "<ph name="EXTENSION_NAME" />" ?</translation> <translation id="2987620471460279764">Texte partagé depuis un autre appareil</translation> <translation id="2988018669686457659">Moteur de rendu de rechange</translation> @@ -2009,6 +2019,7 @@ <translation id="3030967311408872958">Du coucher au lever du soleil</translation> <translation id="3031417829280473749">Agent X</translation> <translation id="3031557471081358569">Sélectionnez les éléments à importer :</translation> +<translation id="3033348223765101500">Contrôler vos données</translation> <translation id="3036327949511794916">Le délai de retour de ce <ph name="DEVICE_TYPE" /> a expiré.</translation> <translation id="3036546437875325427">Activer Flash</translation> <translation id="3037754279345160234">Impossible d'analyser la configuration d'association de l'appareil au domaine. Veuillez contacter votre administrateur.</translation> @@ -2109,6 +2120,7 @@ <translation id="3143754809889689516">Lire depuis le début</translation> <translation id="3144647712221361880">Ouvrir le lien avec le compte</translation> <translation id="3149510190863420837">Applications Chrome</translation> +<translation id="3150622786624965651">Appareil <ph name="DEVICE_INDEX" /> sur <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, manette de jeu.</translation> <translation id="3150693969729403281">Lancer le contrôle de sécurité</translation> <translation id="3150927491400159470">Actualisation forcée</translation> <translation id="315116470104423982">Données mobiles</translation> @@ -2130,6 +2142,7 @@ <translation id="3162899666601560689">Les sites peuvent utiliser des cookies pour améliorer votre expérience de navigation, par exemple pour maintenir votre connexion ou mémoriser les articles de votre panier</translation> <translation id="3163201441334626963">Produit inconnu <ph name="PRODUCT_ID" /> du fournisseur <ph name="VENDOR_ID" /></translation> <translation id="3163254451837720982">Les services suivants permettent de protéger vos données. Vous pouvez les désactiver à tout moment.</translation> +<translation id="3163511056918491211">Restaurez vos données ou changez d'appareil, facilement et à tout moment. Vos sauvegardes sont importées dans Google et chiffrées à l'aide du mot de passe de votre compte Google.</translation> <translation id="3164329792803560526">Partage de l'onglet avec <ph name="APP_NAME" />…</translation> <translation id="3165390001037658081">Certains opérateurs peuvent bloquer cette fonctionnalité.</translation> <translation id="316652501498554287">Comptes G Suite for Education</translation> @@ -2315,6 +2328,7 @@ <translation id="339178315942519818">Afficher sur votre <ph name="DEVICE_TYPE" /> les notifications de vos applications de chat</translation> <translation id="3393554941209044235">Analyse de documents Chrome</translation> <translation id="3394850431319394743">Sites autorisés à utiliser des ID pour lire du contenu protégé</translation> +<translation id="3395403082745257596">Appareil <ph name="DEVICE_INDEX" /> sur <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, type d'appareil inconnu.</translation> <translation id="3396744558790608201">Effectuez un clic droit et sélectionnez "Rechercher à l'aide d'images avec Google Lens" pour faire une recherche sur une zone du site afin d'en savoir plus sur le contenu visuel qui s'affiche lorsque vous surfez ou faites des achats sur le Web.</translation> <translation id="3396800784455899911">En cliquant sur le bouton "Accepter et continuer", vous acceptez le processus décrit ci-dessus pour ces services Google.</translation> <translation id="339722927132407568">Se fige</translation> @@ -2370,6 +2384,7 @@ <translation id="3440663250074896476">Autres actions pour <ph name="BOOKMARK_NAME" /></translation> <translation id="3441653493275994384">Écran</translation> <translation id="3441663102605358937">Connectez-vous de nouveau à <ph name="ACCOUNT" /> pour valider ce compte</translation> +<translation id="3442674350323953953">Autorisez Google à utiliser vos données matérielles pour contribuer à améliorer <ph name="DEVICE_OS" />. Si vous refusez, ces données seront quand même envoyées à Google pour savoir quelles mises à jour fournir, mais elles ne seront pas stockées ni utilisées autrement.</translation> <translation id="3444641828375597683">Les annonceurs et les éditeurs peuvent utiliser le FLoC décrit plus loin sur cette page.</translation> <translation id="3444726579402183581"><ph name="ORIGIN" /> pourra consulter <ph name="FILENAME" /></translation> <translation id="3445047461171030979">Réponses rapides sur l'Assistant Google</translation> @@ -2502,6 +2517,7 @@ <translation id="3569682580018832495"><ph name="ORIGIN" /> peut accéder aux fichiers et dossiers suivants :</translation> <translation id="3571734092741541777">Configurer</translation> <translation id="3575121482199441727">Autoriser pour ce site</translation> +<translation id="3577745545227000795">Collecte des données matérielles par <ph name="DEVICE_OS" /></translation> <translation id="3578594933904494462">Le contenu de cet onglet est en cours de partage</translation> <translation id="3581605050355435601">Configurer automatiquement l'adresse IP</translation> <translation id="3582057310199111521">Saisi sur un site trompeur et détecté lors d'une violation des données</translation> @@ -2687,6 +2703,7 @@ <translation id="3771290962915251154">Ce paramètre est désactivé en raison de l'activation du contrôle parental</translation> <translation id="3771294271822695279">Fichiers vidéo</translation> <translation id="3771851622616482156">Vous allez être déconnecté de ce site, y compris dans les onglets ouverts</translation> +<translation id="3772046291955677288">J'ai lu et j'accepte les <ph name="BEGIN_LINK1" />Conditions d'utilisation de Google<ph name="END_LINK1" />, ainsi que les <ph name="BEGIN_LINK2" />Conditions d'utilisation supplémentaires de Chrome et Chrome OS<ph name="END_LINK2" />.</translation> <translation id="3775432569830822555">Certificat du serveur SSL</translation> <translation id="3775705724665058594">Envoyer à vos appareils</translation> <translation id="3776508619697147021">Les sites peuvent demander à télécharger automatiquement plusieurs fichiers</translation> @@ -2719,6 +2736,7 @@ <translation id="3798449238516105146">Version</translation> <translation id="3799128412641261490">Paramètres Switch Access</translation> <translation id="3800806661949714323">Tout afficher (recommandé)</translation> +<translation id="3800828618615365228">Conditions d'utilisation supplémentaires de Google Chrome et Chrome OS</translation> <translation id="380329542618494757">Nom</translation> <translation id="3803345858388753269">Qualité de la vidéo</translation> <translation id="380408572480438692">L'activation de la collecte d'informations relatives aux performances nous permet d'améliorer le système au fil du temps. Aucune information n'est envoyée jusqu'à ce que vous envoyiez un rapport de commentaires (Alt-Shift-I) comprenant des informations relatives aux performances. Vous pouvez revenir sur cet écran afin de désactiver la collecte des informations à tout moment.</translation> @@ -2751,6 +2769,7 @@ <translation id="3826440694796503677">Votre administrateur a désactivé la fonctionnalité d'ajout d'autres comptes Google</translation> <translation id="3827774300009121996">&Plein écran</translation> <translation id="3828029223314399057">Rechercher dans les favoris</translation> +<translation id="3828953470056652895">J'ai lu et j'accepte les <ph name="BEGIN_LINK1" />Conditions d'utilisation de Google<ph name="END_LINK1" />, les<ph name="BEGIN_LINK2" />Conditions d'utilisation supplémentaires de Chrome et Chrome OS<ph name="END_LINK2" />, ainsi que les <ph name="BEGIN_LINK3" />Conditions d'utilisation de Play<ph name="END_LINK3" />.</translation> <translation id="3829765597456725595">Partage de fichiers SMB</translation> <translation id="3830654885961023588">{NUM_EXTENSIONS,plural, =1{Votre administrateur a réactivé 1 extension potentiellement dangereuse}one{Votre administrateur a réactivé {NUM_EXTENSIONS} extension potentiellement dangereuse}other{Votre administrateur a réactivé {NUM_EXTENSIONS} extensions potentiellement dangereuses}}</translation> <translation id="3831436149286513437">Suggestions de recherche Google Drive</translation> @@ -2929,6 +2948,9 @@ <translation id="3984431586879874039">Autoriser ce site à lire les informations de votre clé de sécurité ?</translation> <translation id="398477389655464998">Copier le lien vers le texte en surbrillance</translation> <translation id="3984862166739904574">Définition pour Réponses rapides</translation> +<translation id="3986164906089840270"><ph name="BEGIN_PARAGRAPH1" />Autoriser les appareils Chrome OS à envoyer automatiquement des rapports nous aide à prioriser ce qu'il faut corriger et améliorer dans Chrome OS. Ces rapports peuvent inclure diverses informations (ex. : plantages de Chrome OS, fonctionnalités utilisées et quantité de mémoire généralement utilisée).<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />Vous pouvez autoriser ou suspendre l'envoi de ces rapports à tout moment dans les paramètres de votre appareil Chrome. Si vous êtes administrateur de domaine, vous pouvez modifier ce paramètre dans la console d'administration.<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" />Désactiver cette fonctionnalité n'empêche pas votre appareil d'envoyer les informations nécessaires pour bénéficier de services essentiels tels que les mises à jour et la sécurité du système.<ph name="END_PARAGRAPH3" /></translation> <translation id="3987544746655539083">Continuer à bloquer l'accès à votre position pour ce site</translation> <translation id="3987938432087324095">Pardon, je n'ai pas compris.</translation> <translation id="3987993985790029246">Copier lien</translation> @@ -2937,6 +2959,7 @@ <translation id="3994374631886003300">Déverrouillez votre téléphone et rapprochez-le de votre <ph name="DEVICE_TYPE" /> pour le déverrouiller.</translation> <translation id="3994878504415702912">&Zoom</translation> <translation id="3995138139523574647">Appareil USB de type C (port situé sur la droite de l'appareil, à l'arrière)</translation> +<translation id="3995963973192100066">Lire l'animation</translation> <translation id="4002329649066944389">Gérer les exceptions spécifiques aux sites</translation> <translation id="4002440992267487163">Configuration du code</translation> <translation id="4005817994523282006">Méthode de détection du fuseau horaire</translation> @@ -3095,6 +3118,7 @@ <translation id="4184885522552335684">Faites glisser un affichage pour le déplacer</translation> <translation id="4187424053537113647">Configuration de <ph name="APP_NAME" />…</translation> <translation id="4190828427319282529">Mettre en surbrillance l'objet sélectionné au clavier</translation> +<translation id="4193836101014293726">Impossible de supprimer ce profil</translation> <translation id="419427585139779713">Saisir une syllabe à la fois</translation> <translation id="4194570336751258953">Activer la fonction "Taper pour cliquer"</translation> <translation id="4195643157523330669">Ouvrir dans un nouvel onglet</translation> @@ -3185,12 +3209,16 @@ <translation id="4297219207642690536">Redémarrer et réinitialiser</translation> <translation id="4297813521149011456">Rotation de l'écran</translation> <translation id="4299022904780065004">Nouvelle fenêtre de navigation &privée</translation> +<translation id="4301011537467809690"><ph name="BEGIN_PARAGRAPH1" />Autoriser les appareils Chrome OS à envoyer automatiquement des rapports nous aide à prioriser ce qu'il faut corriger et améliorer dans Chrome OS. Ces rapports peuvent inclure diverses informations (ex. : plantages de Chrome OS, fonctionnalités utilisées et quantité de mémoire généralement utilisée).<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />Vous pouvez autoriser ou suspendre l'envoi de ces rapports à tout moment dans les paramètres de l'appareil Chrome OS de votre enfant. Si vous êtes administrateur de domaine, vous pouvez modifier ce paramètre dans la console d'administration.<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" />Désactiver cette fonctionnalité n'empêche pas cet appareil d'envoyer les informations nécessaires pour bénéficier de services essentiels tels que les mises à jour et la sécurité du système.<ph name="END_PARAGRAPH3" /></translation> <translation id="4301671483919369635">Cette page est autorisée à modifier les fichiers</translation> <translation id="4303079906735388947">Configurez un nouveau code pour votre clé de sécurité</translation> <translation id="4305402730127028764">Copier sur <ph name="DEVICE_NAME" /></translation> <translation id="4305817255990598646">Changer</translation> <translation id="4306119971288449206">Les applications doivent être diffusées avec le type de contenu <ph name="CONTENT_TYPE" /></translation> <translation id="4307992518367153382">Paramètres de base</translation> +<translation id="4309165024397827958">Permettre aux applis et services Android autorisés à accéder à la position d'utiliser celle de votre appareil. Google peut collecter régulièrement les données de localisation et s'en servir de façon anonyme pour améliorer la précision de la localisation et les services géolocalisés.</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> Ko (<ph name="NUM_KILOBYTES_LIVE" /> Ko effectifs)</translation> <translation id="4310139701823742692">Le format du fichier n'est pas valide. Vérifiez le fichier PPD, puis réessayez.</translation> <translation id="431076611119798497">&Détails</translation> @@ -3270,6 +3298,7 @@ <translation id="4400632832271803360">Maintenir la touche du lanceur d'applications enfoncée pour modifier la fonction des touches de la rangée supérieure</translation> <translation id="4400963414856942668">Vous pouvez cliquer sur l'étoile pour ajouter un onglet à vos favoris</translation> <translation id="4402755511846832236">Empêcher les sites de savoir si vous utilisez activement cet appareil</translation> +<translation id="4403266582403435904">Restaurez vos données ou changez d'appareil, facilement et à tout moment. Les sauvegardes sont importées dans Google et chiffrées à l'aide du mot de passe du compte Google de votre enfant.</translation> <translation id="4403775189117163360">Choisir un autre dossier</translation> <translation id="4404136731284211429">Analyser de nouveau</translation> <translation id="4404843640767531781">L'application <ph name="APP_NAME" /> est bloquée par un parent. Tu as besoin de leur autorisation pour l'utiliser.</translation> @@ -3580,6 +3609,7 @@ <translation id="4728558894243024398">Plate-forme</translation> <translation id="4728570203948182358"><ph name="BEGIN_LINK" />Votre administrateur<ph name="END_LINK" /> a désactivé la détection des logiciels malveillants</translation> <translation id="4730492586225682674">Dernière note prise avec le stylet sur l'écran de verrouillage</translation> +<translation id="4733161265940833579"><ph name="BATTERY_PERCENTAGE" /> % (gauche)</translation> <translation id="4733793249294335256">Emplacement</translation> <translation id="473546211690256853">Ce compte est géré par <ph name="DOMAIN" />.</translation> <translation id="4735803855089279419">Impossible de déterminer les identifiants de cet appareil.</translation> @@ -3606,6 +3636,7 @@ <translation id="4768332406694066911">Certains certificats provenant de ces organisations vous identifient.</translation> <translation id="4770119228883592393">Autorisation demandée, appuyez sur ⌘+Option+Flèche vers le bas pour répondre</translation> <translation id="4773112038801431077">Mettre à niveau Linux</translation> +<translation id="4775142426314270551">Contribuez à améliorer les fonctionnalités et performances de Chrome et Chrome OS en envoyant automatiquement à Google les rapports d'erreur, ainsi que les données d'utilisation et de diagnostic. Certaines données globales seront aussi utiles aux partenaires Google et développeurs d'applis Android. Si le paramètre "Activité sur le Web et les applications" est activé pour le compte Google de votre enfant, ses données Android peuvent être enregistrées dans son compte Google.</translation> <translation id="477647109558161443">Créer un raccourci sur le bureau</translation> <translation id="4776594120007763294">Pour ajouter une page à lire plus tard, cliquez sur le bouton</translation> <translation id="4777458362738635055">Les autres utilisateurs de cet appareil peuvent utiliser ce réseau</translation> @@ -3634,6 +3665,7 @@ <translation id="4801512016965057443">Autoriser l'itinérance des données mobiles</translation> <translation id="4804818685124855865">Se déconnecter</translation> <translation id="4804827417948292437">Avocat</translation> +<translation id="4806457879608775995">Voir ces conditions et contrôler vos données</translation> <translation id="4807098396393229769">Titulaire de la carte</translation> <translation id="4808024018088054533">Chrome n'a détecté aucun logiciel malveillant sur votre ordinateur • Vérification effectuée à l'instant</translation> <translation id="4808667324955055115">Pop-up bloqués :</translation> @@ -4001,6 +4033,8 @@ <translation id="5192652123103143854">Lire les infos provenant de l'appareil Chrome OS et ses données, et exécuter des tests de diagnostic.</translation> <translation id="5193988420012215838">Copié dans le presse-papiers</translation> <translation id="5194256020863090856">Cela ne concerne que les fenêtres de navigation privée</translation> +<translation id="5195863934285556588"><ph name="BEGIN_PARAGRAPH1" />Le service de localisation de Google utilise des sources comme le Wi-Fi, les réseaux mobiles et des capteurs pour estimer la position de cet appareil.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />Vous pouvez désactiver la localisation Android sur cet appareil à tout moment dans Paramètres > Applications > Google Play Store > Gérer les préférences Android > Sécurité et localisation > Localisation. Vous pouvez aussi empêcher l'utilisation du Wi-Fi, des réseaux mobiles et des capteurs en désactivant "Précision de la localisation Google" dans le même menu.<ph name="END_PARAGRAPH2" /></translation> <translation id="5197255632782567636">Internet</translation> <translation id="5198430103906431024">Envoyer des données d'utilisation et de diagnostic. À l'heure actuelle, cet appareil envoie automatiquement à Google des données liées à son utilisation et à celle des applications, ainsi que des données de diagnostic. Ces informations nous aideront à améliorer, entre autres, la stabilité du système et des applications. Certaines données globales seront également utiles aux développeurs des applications Google et à nos partenaires tels que les développeurs Android. Si vous avez activé le paramètre "Activité supplémentaire sur le Web et les applications", ces données peuvent être enregistrées dans votre compte Google.</translation> <translation id="5199729219167945352">Prototypes</translation> @@ -4129,6 +4163,7 @@ <translation id="5331069282670671859">Vous n'avez aucun certificat dans cette catégorie</translation> <translation id="5331425616433531170">"<ph name="CHROME_EXTENSION_NAME" />" tente de s'associer</translation> <translation id="5331975486040154427">Appareil USB de type C (port situé sur la gauche de l'appareil, à l'arrière)</translation> +<translation id="5333896723098573627">Pour supprimer des applis, sélectionnez Paramètres > Applications > Google Play Store > Gérer les préférences Android > Applications ou Gestionnaire d'applications. Appuyez ensuite sur l'appli à désinstaller (vous devrez peut-être balayer l'écran vers la droite ou vers la gauche pour trouver l'appli), puis sur "Désinstaller" ou "Désactiver".</translation> <translation id="5334142896108694079">Cache des scripts</translation> <translation id="5336126339807372270">N'autoriser aucun site à accéder aux appareils USB</translation> <translation id="5336688142483283574">Cette page sera également supprimée de l'historique et de l'activité liée à <ph name="SEARCH_ENGINE" />.</translation> @@ -4140,6 +4175,7 @@ <translation id="5341793073192892252">Les cookies suivants ont été bloqués (tous les cookies tiers sont bloqués, sans exception)</translation> <translation id="5342091991439452114">Le code doit comprendre au moins <ph name="MINIMUM" /> chiffres</translation> <translation id="5344036115151554031">Restauration de Linux…</translation> +<translation id="5344128444027639014"><ph name="BATTERY_PERCENTAGE" /> % (droit)</translation> <translation id="5345916423802287046">Lancer l'application lors de la connexion</translation> <translation id="5350293332385664455">Désactiver l'Assistant Google</translation> <translation id="535123479159372765">Texte copié depuis un autre appareil</translation> @@ -4208,6 +4244,7 @@ <translation id="5425863515030416387">Se connecter facilement sur tous les appareils</translation> <translation id="5427278936122846523">Toujours traduire</translation> <translation id="5427459444770871191">Rotation &horaire</translation> +<translation id="542750953150239272">En continuant, vous acceptez que cet appareil puisse aussi télécharger et installer automatiquement des mises à jour et des applis de Google, de votre opérateur et du fabricant de votre appareil, probablement via le réseau mobile. Certaines de ces applis permettent d'y effectuer des achats.</translation> <translation id="5428850089342283580"><ph name="ACCNAME_APP" /> (mise à jour disponible)</translation> <translation id="5429373054983029602">Rechercher sur votre écran avec <ph name="VISUAL_SEARCH_PROVIDER" /></translation> <translation id="542948651837270806">Vous devez mettre à jour le micrologiciel TPM (Trusted Platform Module). Consultez la page <ph name="TPM_FIRMWARE_UPDATE_LINK" /></translation> @@ -4251,6 +4288,7 @@ <translation id="5471768120198416576">Bonjour ! Je suis la voix de votre synthèse vocale.</translation> <translation id="5472627187093107397">Enregistrer les mots de passe pour ce site</translation> <translation id="5473075389972733037">IBM</translation> +<translation id="5473099001878321374">En continuant, vous acceptez que cet appareil puisse aussi télécharger et installer des mises à jour et applis de Google, de l'opérateur de votre enfant et du fabricant de cet appareil, probablement via le réseau mobile. Certaines de ces applis permettent d'y effectuer des achats.</translation> <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{Ce code doit comporter au moins 1 caractère}one{Ce code doit comporter au moins # caractère}other{Ce code doit comporter au moins # caractères}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> vous demande de vous connecter au Wi-Fi maintenant et de télécharger une mise à jour. Vous pouvez aussi la télécharger via une connexion facturée à l'usage (susceptible d'entraîner des frais).</translation> <translation id="5481273127572794904">Non autorisé à télécharger automatiquement plusieurs fichiers</translation> @@ -4377,6 +4415,7 @@ <translation id="5585898376467608182">L'espace libre sur votre appareil est insuffisant. Vous avez besoin d'au moins <ph name="MINIMUM_SPACE" /> pour utiliser <ph name="APP_NAME" />. Pour libérer de l'espace, supprimez des fichiers de l'appareil.</translation> <translation id="5585912436068747822">Échec du formatage</translation> <translation id="5588033542900357244">(<ph name="RATING_COUNT" />)</translation> +<translation id="5589101568518637088">Appareil <ph name="DEVICE_INDEX" /> sur <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, clavier.</translation> <translation id="558918721941304263">Chargement des applications…</translation> <translation id="5592595402373377407">Les données disponibles sont insuffisantes pour le moment.</translation> <translation id="5595485650161345191">Modifier l'adresse</translation> @@ -4430,6 +4469,10 @@ <translation id="5642508497713047">Signataire de la liste de révocation de certificats</translation> <translation id="5643321261065707929">Réseau facturé à l'usage</translation> <translation id="5643620609347735571">Effacer et continuer</translation> +<translation id="5644722238761632789"><ph name="BEGIN_PARAGRAPH1" />Contribuez à améliorer les fonctionnalités et performances de Chrome et Chrome OS en envoyant automatiquement à Google les rapports d'erreur, ainsi que les données d'utilisation et de diagnostic.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />Vous pouvez autoriser ou suspendre l'envoi de ces rapports à tout moment dans les paramètres de votre appareil Chrome OS. Si vous êtes administrateur de domaine, vous pouvez modifier ce paramètre dans la console d'administration.<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" />Désactiver cette fonctionnalité n'empêche pas votre appareil d'envoyer les informations nécessaires pour bénéficier de services essentiels tels que les mises à jour et la sécurité du système.<ph name="END_PARAGRAPH3" /> + <ph name="BEGIN_PARAGRAPH4" />Si le paramètre "Activité sur le Web et les applications" est activé pour votre compte Google, vos données Android peuvent y être enregistrées. Vous pouvez consulter vos données, les supprimer et modifier les paramètres de votre compte sur la page account.google.com.<ph name="END_PARAGRAPH4" /></translation> <translation id="5646376287012673985">Localisation</translation> <translation id="5646558797914161501">Homme d'affaires</translation> <translation id="5648166631817621825">7 derniers jours</translation> @@ -4575,6 +4618,7 @@ <translation id="5817069030404929329">Transférer les mots de passe de votre appareil vers votre compte Google ?</translation> <translation id="5817918615728894473">Associer</translation> <translation id="5821565227679781414">Créer un raccourci</translation> +<translation id="5822095611691580107">Niveau de batterie de l'écouteur gauche (<ph name="BATTERY_PERCENTAGE" /> %).</translation> <translation id="5822865422567397338">Pour effectuer une recherche sur un site spécifique ou une partie de Chrome, vous pouvez saisir les raccourcis ci-dessous. Par exemple, pour limiter votre recherche à Gmail, saisissez "@gmail", puis appuyez sur Tabulation ou Espace.</translation> <translation id="5825412242012995131">Activé (recommandé)</translation> <translation id="5826395379250998812">Connectez votre <ph name="DEVICE_TYPE" /> à votre téléphone. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation> @@ -4790,6 +4834,10 @@ <translation id="6047632800149092791">La synchronisation ne fonctionne pas. Essayez de vous déconnecter, puis de vous reconnecter.</translation> <translation id="6049797270917061226">Ce fichier pourrait permettre à des pirates informatiques de dérober vos informations personnelles.</translation> <translation id="6051354611314852653">Petit problème… Échec de l'autorisation d'accès à l'API pour cet appareil.</translation> +<translation id="6051638103735819069"><ph name="BEGIN_PARAGRAPH1" />Autoriser les appareils Chrome OS à envoyer automatiquement des rapports nous aide à prioriser ce qu'il faut corriger et améliorer dans Chrome OS. Ces rapports peuvent inclure diverses informations (plantages de Chrome OS, fonctionnalités utilisées, quantité de mémoire généralement utilisée, et données d'utilisation et de diagnostic des applis Android). Certaines données globales seront aussi utiles aux partenaires et développeurs d'applis Google tels que les développeurs Android.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />Vous pouvez autoriser ou suspendre l'envoi de ces rapports à tout moment dans les paramètres de l'appareil Chrome OS de votre enfant. Si vous êtes administrateur de domaine, vous pouvez modifier ce paramètre dans la console d'administration.<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" />Désactiver cette fonctionnalité n'empêche pas cet appareil d'envoyer les informations nécessaires pour bénéficier de services essentiels tels que les mises à jour et la sécurité du système.<ph name="END_PARAGRAPH3" /> + <ph name="BEGIN_PARAGRAPH4" />Si le paramètre "Activité sur le Web et les applications" est activé pour le compte Google de votre enfant, ses données peuvent être enregistrées dans son compte Google. Découvrez plus en détail ces paramètres et comment les ajuster sur le site families.google.com.<ph name="END_PARAGRAPH4" /></translation> <translation id="6052976518993719690">Autorité de certification SSL</translation> <translation id="6053401458108962351">&Effacer les données de navigation…</translation> <translation id="6054284857788651331">Groupe d'onglets récemment fermés</translation> @@ -5027,6 +5075,7 @@ <translation id="6294759976468837022">Vitesse de la recherche automatique</translation> <translation id="6295158916970320988">Tous les sites</translation> <translation id="6295855836753816081">Enregistrement…</translation> +<translation id="6297132509712149399">Appareil <ph name="DEVICE_INDEX" /> sur <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, téléphone.</translation> <translation id="629730747756840877">Compte</translation> <translation id="6298962879096096191">Utilise Google Play pour installer des applications Android</translation> <translation id="6300177430812514606">Non autorisé à terminer l'envoi ou la réception de données</translation> @@ -5240,6 +5289,9 @@ <translation id="6528179044667508675">Ne pas déranger</translation> <translation id="652948702951888897">Historique Chrome</translation> <translation id="6530186581263215931">Ces paramètres sont appliqués par votre administrateur</translation> +<translation id="653031671361866334"><ph name="BEGIN_PARAGRAPH1" />Pour vous offrir une expérience optimale et les mises à jour appropriées, <ph name="DEVICE_OS" /> collecte les données matérielles liées à vos appareils et les partage avec Google. Vous pouvez éventuellement autoriser Google à utiliser ces données à d'autres fins, par exemple pour l'assistance et les améliorations à apporter à <ph name="DEVICE_OS" />.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />Pour voir quelles données sont envoyées à Google afin de recevoir les bonnes mises à jour, et pour consulter la liste des autres cas où vous acceptez de les partager avec Google, vous pouvez vous connecter sur cet appareil et lire la section CLOUDREADY_HARDWARE_INFO dans chrome://system.<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" />Pour en savoir plus sur les données que <ph name="DEVICE_OS" /> peut partager avec Google et sur leur utilisation, accédez à g.co/xxxxx.<ph name="END_PARAGRAPH3" /></translation> <translation id="6531282281159901044">Conserver le fichier dangereux</translation> <translation id="6532101170117367231">Enregistrer sur Google Drive</translation> <translation id="6532106788206463496">Enregistrer les modifications</translation> @@ -5258,6 +5310,8 @@ <translation id="6545665334409411530">Fréquence de répétition</translation> <translation id="6545867563032584178">Micro désactivé dans les préférences système Mac</translation> <translation id="6547354035488017500">Si vous ne libérez pas au moins 512 Mo en supprimant des fichiers de l'espace de stockage, votre appareil ne répondra plus.</translation> +<translation id="6547854317475115430"><ph name="BEGIN_PARAGRAPH1" />Le service de localisation de Google utilise des sources comme le Wi-Fi, les réseaux mobiles et des capteurs pour estimer la position de votre appareil.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />Vous pouvez désactiver la localisation Android sur votre appareil à tout moment dans Paramètres > Applications > Google Play Store > Gérer les préférences Android > Sécurité et localisation > Localisation. Vous pouvez aussi empêcher l'utilisation du Wi-Fi, des réseaux mobiles et des capteurs en désactivant "Précision de la localisation Google" dans le même menu.<ph name="END_PARAGRAPH2" /></translation> <translation id="654871471440386944">Activer la navigation au clavier ?</translation> <translation id="6549038875972762904">Reconfigurer</translation> <translation id="6550675742724504774">Options</translation> @@ -5314,6 +5368,7 @@ <translation id="6601612474695404578">Certains sites utilisent des cookies tiers pour charger leurs pages. Lorsqu'un site ne fonctionne pas, vous pouvez tenter d'autoriser les cookies.</translation> <translation id="6602937173026466876">Accéder à vos imprimantes</translation> <translation id="6602956230557165253">Utilisez les touches fléchées gauche et droite pour naviguer.</translation> +<translation id="6602998402703530379">Appareil <ph name="DEVICE_INDEX" /> sur <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, caméra vidéo.</translation> <translation id="6605847144724004692">Aucune note d'utilisateurs reçue.</translation> <translation id="6606671997164410857">Apparemment, vous avez déjà configuré l'Assistant Google sur un autre appareil. Pour profiter encore plus de l'Assistant, activez le contexte de l'écran sur cet appareil.</translation> <translation id="6607831829715835317">Plus d'outi&ls</translation> @@ -5335,6 +5390,7 @@ <translation id="6624535038674360844">Le contenu du fichier "<ph name="FILE_NAME" />" est sensible ou dangereux. Demandez à son propriétaire de résoudre ce problème.</translation> <translation id="6624687053722465643">Cupcake</translation> <translation id="6628328486509726751">Date et heure d'importation : <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation> +<translation id="663065535202460123">Appareil <ph name="DEVICE_INDEX" /> sur <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, souris.</translation> <translation id="6630752851777525409">Une demande d'accès permanent à un certificat pour s'authentifier en votre nom a été initiée pour l'extension "<ph name="EXTENSION_NAME" />".</translation> <translation id="6635362468090274700">Personne ne peut partager du contenu avec vous tant que vous n'avez pas choisi d'être visible.<ph name="BR" /><ph name="BR" />Pour devenir visible temporairement, ouvrez la zone d'état, puis activez "Visibilité à proximité".</translation> <translation id="6635674640674343739">Impossible d'établir la connexion au réseau. Vérifiez votre connexion réseau et réessayez.</translation> @@ -5441,6 +5497,7 @@ <translation id="6746124502594467657">Descendre</translation> <translation id="674632704103926902">Activer le déplacement tactile</translation> <translation id="6748465660675848252">Vous pouvez continuer, mais seules les données que vous avez synchronisées seront restaurées (de même que vos paramètres). Toutes les données stockées en local seront perdues.</translation> +<translation id="6748980958975836188">J'ai lu et j'accepte les <ph name="BEGIN_LINK1" />Conditions d'utilisation de Google<ph name="END_LINK1" />, ainsi que les <ph name="BEGIN_LINK2" />Conditions d'utilisation supplémentaires de Chrome et Chrome OS<ph name="END_LINK2" />.</translation> <translation id="6750757184909117990">Désactiver le réseau mobile</translation> <translation id="6750946710563435348">Utiliser un autre nom d'utilisateur</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Navigation privée)</translation> @@ -5462,6 +5519,8 @@ <translation id="677965093459947883">Très petite</translation> <translation id="6781005693196527806">Gérer les &moteurs de recherche</translation> <translation id="6781284683813954823">Lien vers le doodle</translation> +<translation id="6781658011335120230"><ph name="BEGIN_PARAGRAPH1" />Les données de l'appli peuvent être toutes celles qu'elle a enregistrées (selon les paramètres du développeur), y compris les contacts, messages, photos, etc. Les données sauvegardées ne sont pas comptabilisées dans le quota de stockage Drive de votre enfant.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />Vous pouvez désactiver ce service dans les paramètres.<ph name="END_PARAGRAPH2" /></translation> <translation id="6781978626986383437">Sauvegarde Linux annulée</translation> <translation id="6782067259631821405">Code incorrect</translation> <translation id="6784523122863989144">Profil accepté</translation> @@ -5660,6 +5719,7 @@ <translation id="6973611239564315524">Une mise à niveau vers Debian 10 (Buster) est disponible</translation> <translation id="6974609594866392343">Mode de démonstration hors connexion</translation> <translation id="697508444536771064">Arrêter Linux</translation> +<translation id="6977739184256564679">Appareil <ph name="DEVICE_INDEX" /> sur <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, tablette.</translation> <translation id="6978121630131642226">Moteurs de recherche</translation> <translation id="6979044105893951891">Lancer et quitter les sessions Invité gérées</translation> <translation id="6979158407327259162">Google Drive</translation> @@ -5679,6 +5739,7 @@ <translation id="6991665348624301627">Sélectionner un emplacement de destination</translation> <translation id="6992554835374084304">Activer le correcteur orthographique amélioré</translation> <translation id="6993000214273684335">Onglet supprimé d'un groupe sans nom : <ph name="GROUP_CONTENTS" /></translation> +<translation id="6993889405941892667">Appareil <ph name="DEVICE_INDEX" /> sur <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, ordinateur.</translation> <translation id="6994069045767983299">Couleurs inversées</translation> <translation id="6995899638241819463">Recevoir une alerte si des mots de passe sont compromis lors d'une violation des données</translation> <translation id="6997642619627518301"><ph name="NAME_PH" /> – Journal d'activité</translation> @@ -5812,6 +5873,7 @@ <translation id="7125148293026877011">Supprimer Crostini</translation> <translation id="7127980134843952133">Historique des téléchargements</translation> <translation id="7128151990937044829">Afficher un symbole dans la barre d'adresse lorsqu'une notification est bloquée</translation> +<translation id="7130890260487814974">Envoyer des données d'utilisation et de diagnostic.</translation> <translation id="7131040479572660648">Lire vos données sur <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> et <ph name="WEBSITE_3" /></translation> <translation id="713122686776214250">Ajouter une pa&ge...</translation> <translation id="7134098520442464001">Réduit la taille du texte</translation> @@ -6060,10 +6122,12 @@ <translation id="7409735910987429903">Les sites peuvent afficher les annonces sous forme de pop-ups ou utiliser des redirections pour vous renvoyer vers des sites Web que vous ne souhaitez pas forcément visiter</translation> <translation id="7409854300652085600">Favoris importés.</translation> <translation id="7410344089573941623">Demander si <ph name="HOST" /> souhaite accéder à votre caméra et à votre micro</translation> +<translation id="7410852728357935715">Caster sur un appareil</translation> <translation id="741204030948306876">J'accepte</translation> <translation id="7412226954991670867">Mémoire processeur graphique</translation> <translation id="7414464185801331860">18x</translation> <translation id="7415454883318062233">Configuration terminée</translation> +<translation id="7416263748877373774">Impossible de charger les conditions d'utilisation. Veuillez vérifier votre connexion réseau et réessayer.</translation> <translation id="7416362041876611053">Erreur réseau inconnue.</translation> <translation id="741906494724992817">Cette application fonctionne sans autorisation spéciale.</translation> <translation id="7419565702166471774">Toujours utiliser une connexion sécurisée</translation> @@ -6248,6 +6312,7 @@ <translation id="7602173054665172958">Gestion de l'impression</translation> <translation id="7603785829538808504">Les sites listés ci-dessous appliquent un paramètre personnalisé</translation> <translation id="7605594153474022051">La synchronisation ne fonctionne pas</translation> +<translation id="7606560865764296217">Mettre l'animation en pause</translation> <translation id="7606992457248886637">Autorités</translation> <translation id="7607002721634913082">Suspendu</translation> <translation id="7608810328871051088">Préférences Android</translation> @@ -6822,6 +6887,7 @@ <translation id="8146177459103116374">Si vous êtes déjà enregistré sur cet appareil, vous pouvez vous <ph name="LINK2_START" />connecter en tant qu'utilisateur existant<ph name="LINK2_END" />.</translation> <translation id="8146287226035613638">Ajoutez et classez vos langues préférées. Les sites Web s'afficheront dans ces langues, si possible. Ces préférences sont synchronisées avec les paramètres de votre navigateur. <ph name="BEGIN_LINK_LEARN_MORE" />En savoir plus<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="8146793085009540321">Échec de la connexion. Veuillez contacter votre administrateur ou réessayer.</translation> +<translation id="8147346945017130012">Contribuez à améliorer les fonctionnalités et performances de Chrome et Chrome OS en envoyant automatiquement à Google les rapports d'erreur, ainsi que les données d'utilisation et de diagnostic.</translation> <translation id="8147900440966275470"><ph name="NUM" /> onglet trouvé</translation> <translation id="8148760431881541277">Limiter les connexions</translation> <translation id="8149564499626272569">Valider via votre téléphone avec un câble USB</translation> @@ -7053,9 +7119,11 @@ <translation id="8404893580027489425">Le lecteur d'empreinte digitale se trouve sur le côté droit de votre <ph name="DEVICE_TYPE" />. Appuyez dessus légèrement avec n'importe quel doigt.</translation> <translation id="8405046151008197676">Découvrez les nouveautés de la dernière mise à jour</translation> <translation id="8407199357649073301">Niveau de consignation :</translation> +<translation id="8408270600235826886">Vous pouvez définir quelles données sont partagées avec Google et modifier cela à tout moment dans les paramètres. Elles seront utilisées conformément aux <ph name="BEGIN_LINK" />Règles de confidentialité<ph name="END_LINK" /> de Google.</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8412136526970428322">Autorisations accordées : <ph name="PERMISSION" /> (et <ph name="COUNT" /> de plus)</translation> <translation id="8413385045638830869">Demander d'abord (recommandé)</translation> +<translation id="8416730306157376817"><ph name="BATTERY_PERCENTAGE" /> % (étui)</translation> <translation id="8417548266957501132">Mot de passe du parent</translation> <translation id="8418445294933751433">Afficher dan&s un onglet</translation> <translation id="8419098111404128271">Résultats de recherche pour "<ph name="SEARCH_TEXT" />"</translation> @@ -7235,6 +7303,7 @@ <translation id="862727964348362408">Suspendu</translation> <translation id="862750493060684461">Cache CSS</translation> <translation id="8627795981664801467">Uniquement les connexions sécurisées</translation> +<translation id="8627804903623428808">Voir ces conditions et contrôler les données de votre enfant</translation> <translation id="8630338733867813168">Mettre en veille lorsque l'appareil est en charge</translation> <translation id="8631032106121706562">Fleur</translation> <translation id="863109444997383731">Les sites ne pourront pas afficher de notifications. Si un site demande à afficher des notifications, un symbole indiquant le blocage de celles-ci s'affichera dans la barre d'adresse.</translation> @@ -7398,6 +7467,7 @@ <ph name="DOMAIN" /> vous demande de laisser votre carte à puce insérée.}one{Votre appareil (<ph name="DEVICE_TYPE" />) va être automatiquement verrouillé dans # seconde. <ph name="DOMAIN" /> vous demande de laisser votre carte à puce insérée.}other{Votre appareil (<ph name="DEVICE_TYPE" />) va être automatiquement verrouillé dans # secondes. <ph name="DOMAIN" /> vous demande de laisser votre carte à puce insérée.}}</translation> +<translation id="8777259617149177596">Niveau de batterie de l'étui (<ph name="BATTERY_PERCENTAGE" /> %).</translation> <translation id="8777628254805677039">mot de passe racine</translation> <translation id="8778328560035799409">Vos contacteurs ne seront plus associés</translation> <translation id="8780123805589053431">Obtenir des descriptions d'images de Google</translation> @@ -7499,6 +7569,7 @@ <translation id="8872155268274985541">Fichier manifeste de mise à jour externe de kiosque non valide. Échec de la mise à jour de l'application kiosque. Veuillez débrancher la clé USB.</translation> <translation id="8872777911145321141">Vous demander votre avis lorsqu'un site souhaite utiliser vos données et appareils de réalité virtuelle (recommandé)</translation> <translation id="8874184842967597500">Non connecté</translation> +<translation id="8874341931345877644">Castez sur un appareil :</translation> <translation id="8875520811099717934">Mise à niveau de Linux</translation> <translation id="8875736897340638404">Sélectionnez un paramètre de visibilité</translation> <translation id="8876307312329369159">Impossible de modifier ce paramètre dans une session de démonstration.</translation> @@ -7690,6 +7761,7 @@ Pour découvrir quelles données sont collectées par Google et pourquoi, accédez à <ph name="BEGIN_LINK2" />policies.google.com<ph name="END_LINK2" />.</translation> <translation id="9066777626153702300">Sites inactifs</translation> <translation id="9066782832737749352">Synthèse vocale</translation> +<translation id="9068298336633421551">Permettre aux applis et services Android autorisés à accéder à la position d'utiliser celle de cet appareil. Google peut collecter régulièrement les données de localisation et s'en servir de façon anonyme pour améliorer la précision de la localisation et les services géolocalisés.</translation> <translation id="9068878141610261315">Type de fichier non compatible</translation> <translation id="9070342919388027491">Onglet déplacé vers la gauche</translation> <translation id="9074739597929991885">Bluetooth</translation> @@ -7754,6 +7826,7 @@ <translation id="9128335130883257666">Accéder aux paramètres pour "<ph name="INPUT_METHOD_NAME" />"</translation> <translation id="9128870381267983090">Connectez-vous au réseau</translation> <translation id="9130015405878219958">Le mode indiqué est incorrect.</translation> +<translation id="9130215884425927484">Appareil <ph name="DEVICE_INDEX" /> sur <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, appareil audio.</translation> <translation id="9131487537093447019">Envoyer des messages à des appareils Bluetooth, et en recevoir de ces derniers</translation> <translation id="9134066738478820307">Les sites peuvent utiliser des ID pour lire du contenu protégé</translation> <translation id="913411432238655354">Restaurer les applis au démarrage</translation> @@ -7797,6 +7870,7 @@ <translation id="916964310188958970">Pourquoi cette suggestion ?</translation> <translation id="9170048603158555829">Thunderbolt</translation> <translation id="9170061643796692986">Le paramètre actuel de visibilité s'applique à tous les contacts</translation> +<translation id="9170199455952690202">Niveau de batterie de l'écouteur droit (<ph name="BATTERY_PERCENTAGE" /> %).</translation> <translation id="9170848237812810038">Ann&uler</translation> <translation id="9170884462774788842">Un autre programme sur votre ordinateur a ajouté un thème qui risque de modifier le fonctionnement de Google Chrome.</translation> <translation id="917350715406657904">Tu as atteint la limite de temps définie par un parent pour <ph name="APP_NAME" />. Tu pourras de nouveau l'utiliser demain pendant <ph name="TIME_LIMIT" />.</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb index 8164d2384..44e562a 100644 --- a/chrome/app/resources/generated_resources_gl.xtb +++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -132,6 +132,7 @@ <translation id="1129850422003387628">Xestionar aplicacións</translation> <translation id="113050636487300043">Para diferenciar entre os distintos perfís, escolle un nome e un tema de cor</translation> <translation id="1130589222747246278"><ph name="WINDOW_TITLE" /> (forma parte do grupo <ph name="GROUP_NAME" />)</translation> +<translation id="1130676589211693127">Nivel de batería do dispositivo dereito: <ph name="PERCENTAGE" /> %.</translation> <translation id="1133418583142946603">Engadir pestana actual</translation> <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_INDEX" /> de <ph name="EMOJI_COUNT" />.</translation> <translation id="1136712381129578788">A chave de seguranza bloqueouse porque se introduciu o PIN demasiadas veces. Para desbloqueala, quítaa e introdúcea de novo.</translation> @@ -1640,6 +1641,7 @@ <translation id="2665647207431876759">Caducado</translation> <translation id="2665717534925640469">Esta páxina móstrase agora en pantalla completa e desactivou o cursor do rato.</translation> <translation id="2665919335226618153">Produciuse un erro durante o formatado.</translation> +<translation id="2666247341166669829">Nivel de batería do dispositivo esquerdo: <ph name="PERCENTAGE" /> %.</translation> <translation id="2667144577800272420">Hai outras aplicacións configuradas para abrir as mesmas ligazóns que <ph name="APP_NAME" />. Con esta acción, <ph name="APP_NAME_2" /> e <ph name="APP_NAME_3" /> deixarán de ser as aplicacións predeterminadas para abrir as ligazóns compatibles.</translation> <translation id="2667463864537187133">Xestionar corrector ortográfico</translation> <translation id="2669241540496514785">Non se puido abrir <ph name="APP_NAME" /></translation> @@ -1957,6 +1959,7 @@ <translation id="2979639724566107830">Abre o marcador nunha ventá nova</translation> <translation id="2981113813906970160">Mostrar cursor do rato grande</translation> <translation id="2981474224638493138">Calidade da proxección do escritorio/pestana</translation> +<translation id="2983373101216420412">Nivel de batería do estoxo: <ph name="PERCENTAGE" /> %.</translation> <translation id="2985348301114641460">Queres enviarlle unha solicitude ao teu administrador para que instale <ph name="EXTENSION_NAME" />?</translation> <translation id="2987620471460279764">O texto compartiuse desde outro dispositivo</translation> <translation id="2988018669686457659">Renderizador de reposto</translation> @@ -2013,6 +2016,7 @@ <translation id="3030967311408872958">Do solpor ao amencer</translation> <translation id="3031417829280473749">Axente X</translation> <translation id="3031557471081358569">Seleccionar elementos para importar:</translation> +<translation id="3033348223765101500">Controla os teus datos</translation> <translation id="3036327949511794916">Expirou o prazo para devolver este <ph name="DEVICE_TYPE" />.</translation> <translation id="3036546437875325427">Activar o flash</translation> <translation id="3037754279345160234">Non se puido analizar a configuración de unión ao dominio. Ponte en contacto co administrador.</translation> @@ -2113,6 +2117,7 @@ <translation id="3143754809889689516">Reproducir desde o principio</translation> <translation id="3144647712221361880">Abrir ligazón como</translation> <translation id="3149510190863420837">Aplicacións de Chrome</translation> +<translation id="3150622786624965651">Dispositivo <ph name="DEVICE_INDEX" /> de <ph name="DEVICE_COUNT" />; <ph name="DEVICE_NAME" />; mando de xogos.</translation> <translation id="3150693969729403281">Realizar agora a comprobación de seguranza</translation> <translation id="3150927491400159470">Volver cargar de maneira forzada</translation> <translation id="315116470104423982">Datos móbiles</translation> @@ -2320,6 +2325,7 @@ <translation id="339178315942519818">Accede ás notificacións das aplicacións de chat no teu dispositivo (<ph name="DEVICE_TYPE" />)</translation> <translation id="3393554941209044235">Análise de documentos de Chrome</translation> <translation id="3394850431319394743">Sitios aos que se lles permite usar identificadores para reproducir contido protexido</translation> +<translation id="3395403082745257596">Dispositivo <ph name="DEVICE_INDEX" /> de <ph name="DEVICE_COUNT" />; <ph name="DEVICE_NAME" />; tipo de dispositivo descoñecido.</translation> <translation id="3396744558790608201">Fai clic co botón dereito e selecciona "Buscar imaxes con Google Lens" se queres buscar calquera zona do sitio para obter máis información sobre o contido visual que ves mentres navegas e compras por Internet.</translation> <translation id="3396800784455899911">Ao facer clic no botón Aceptar e continuar, aceptarás o procesamento descrito anteriormente para estes servizos de Google.</translation> <translation id="339722927132407568">A imaxe conxélase</translation> @@ -2375,6 +2381,7 @@ <translation id="3440663250074896476">Máis accións en relación co marcador <ph name="BOOKMARK_NAME" /></translation> <translation id="3441653493275994384">Pantalla</translation> <translation id="3441663102605358937">Inicia sesión en <ph name="ACCOUNT" /> de novo para verificar esta conta</translation> +<translation id="3442674350323953953">Permitir que Google use os datos do hardware para axudar a mellorar <ph name="DEVICE_OS" />. Se non dás o teu permiso, estes datos enviaránselle a Google de todas as formas co obxecto de determinar as actualizacións necesarias, pero non se almacenarán nin se utilizarán con outros fins.</translation> <translation id="3444641828375597683">Os anunciantes e os editores poden usar a técnica Federated Learning of Cohorts (FLoC), que se describe máis adiante nesta páxina.</translation> <translation id="3444726579402183581"><ph name="ORIGIN" /> poderá ver <ph name="FILENAME" /></translation> <translation id="3445047461171030979">Respostas rápidas do Asistente de Google</translation> @@ -2507,6 +2514,7 @@ <translation id="3569682580018832495"><ph name="ORIGIN" /> pode ver os seguintes ficheiros e cartafoles</translation> <translation id="3571734092741541777">Configurar</translation> <translation id="3575121482199441727">Permitir para este sitio</translation> +<translation id="3577745545227000795">Recompilación de datos de hardware por parte de <ph name="DEVICE_OS" /></translation> <translation id="3578594933904494462">Estase compartindo o contido desta pestana.</translation> <translation id="3581605050355435601">Configurar enderezo IP de forma automática</translation> <translation id="3582057310199111521">Escribiuse nun sitio enganoso e viuse implicado nunha violación da seguranza dos datos</translation> @@ -2948,6 +2956,7 @@ <translation id="3994374631886003300">Desbloquea o teléfono e achégao ao <ph name="DEVICE_TYPE" /> para desbloquealo.</translation> <translation id="3994878504415702912">&Zoom</translation> <translation id="3995138139523574647">Dispositivo USB‑C (porto dereito posterior)</translation> +<translation id="3995963973192100066">Reproducir animación</translation> <translation id="4002329649066944389">Xestionar as excepcións para sitios web específicos</translation> <translation id="4002440992267487163">Configuración do PIN</translation> <translation id="4005817994523282006">Método de detección de fuso horario</translation> @@ -3597,6 +3606,7 @@ <translation id="4728558894243024398">Plataforma</translation> <translation id="4728570203948182358"><ph name="BEGIN_LINK" />O teu administrador<ph name="END_LINK" /> desactivou a comprobación de software daniño</translation> <translation id="4730492586225682674">Nota máis recente do lapis óptico na pantalla de inicio</translation> +<translation id="4733161265940833579"><ph name="BATTERY_PERCENTAGE" /> % (dispositivo esquerdo)</translation> <translation id="4733793249294335256">Localización</translation> <translation id="473546211690256853">Esta conta está xestionada por <ph name="DOMAIN" /></translation> <translation id="4735803855089279419">O sistema non puido determinar os identificadores deste dispositivo.</translation> @@ -4162,6 +4172,7 @@ <translation id="5341793073192892252">Bloqueáronse as seguintes cookies (estanse bloqueando as cookies de terceiros sen excepción)</translation> <translation id="5342091991439452114">O PIN debe ter como mínimo <ph name="MINIMUM" /> díxitos</translation> <translation id="5344036115151554031">Restaurando Linux</translation> +<translation id="5344128444027639014"><ph name="BATTERY_PERCENTAGE" /> % (dispositivo dereito)</translation> <translation id="5345916423802287046">Iniciar aplicación ao iniciar sesión</translation> <translation id="5350293332385664455">Desactivar Asistente de Google</translation> <translation id="535123479159372765">Copiouse o texto desde outro dispositivo</translation> @@ -4401,6 +4412,7 @@ <translation id="5585898376467608182">Queda pouco almacenamento no teu dispositivo. Necesítase un espazo libre de polo menos <ph name="MINIMUM_SPACE" /> para poder utilizar <ph name="APP_NAME" />. Se queres liberar espazo, elimina ficheiros do dispositivo.</translation> <translation id="5585912436068747822">Erro de formato</translation> <translation id="5588033542900357244">(<ph name="RATING_COUNT" />)</translation> +<translation id="5589101568518637088">Dispositivo <ph name="DEVICE_INDEX" /> de <ph name="DEVICE_COUNT" />; <ph name="DEVICE_NAME" />; teclado.</translation> <translation id="558918721941304263">Cargando aplicacións...</translation> <translation id="5592595402373377407">Aínda non hai datos suficientes dispoñibles.</translation> <translation id="5595485650161345191">Editar enderezo</translation> @@ -4602,6 +4614,7 @@ <translation id="5817069030404929329">Queres transferir os contrasinais deste dispositivo á túa Conta de Google?</translation> <translation id="5817918615728894473">Sincronizar</translation> <translation id="5821565227679781414">Crear atallo</translation> +<translation id="5822095611691580107">Nivel de batería do auricular esquerdo: <ph name="BATTERY_PERCENTAGE" /> %.</translation> <translation id="5822865422567397338">Para realizar buscas nunha parte ou sitio específico de Chrome, podes usar estes atallos. Por exemplo, para facer buscas só en Gmail, escribe "@gmail" e despois preme Tabulador ou Espazo.</translation> <translation id="5825412242012995131">Activado (recomendado)</translation> <translation id="5826395379250998812">Conecta o <ph name="DEVICE_TYPE" /> co teu teléfono. <ph name="LINK_BEGIN" />Máis información<ph name="LINK_END" /></translation> @@ -5058,6 +5071,7 @@ <translation id="6294759976468837022">Velocidade da exploración automática</translation> <translation id="6295158916970320988">Todos os sitios</translation> <translation id="6295855836753816081">Gardando...</translation> +<translation id="6297132509712149399">Dispositivo <ph name="DEVICE_INDEX" /> de <ph name="DEVICE_COUNT" />; <ph name="DEVICE_NAME" />; teléfono.</translation> <translation id="629730747756840877">Conta</translation> <translation id="6298962879096096191">Utiliza Google Play para instalar aplicacións Android</translation> <translation id="6300177430812514606">Sitios que non poden rematar de enviar ou recibir datos</translation> @@ -5271,6 +5285,9 @@ <translation id="6528179044667508675">Non molestar</translation> <translation id="652948702951888897">Historial de Chrome</translation> <translation id="6530186581263215931">O teu administrador aplica estas opcións de configuración</translation> +<translation id="653031671361866334"><ph name="BEGIN_PARAGRAPH1" />Para ofrecerche a mellor experiencia posible, <ph name="DEVICE_OS" /> recompila datos de hardware sobre os dispositivos e compárteos con Google a fin de determinar as actualizacións necesarias. De maneira opcional, podes permitir que Google utilice estes datos con outros fins, como prestar asistencia e incorporar melloras á experiencia e aos servizos de <ph name="DEVICE_OS" />.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />Podes iniciar sesión neste dispositivo e visitar a sección CLOUDREADY_HARDWARE_INFO en chrome://system para consultar os datos que se lle envían a Google co obxectivo de filtrar as actualizacións, así como noutros casos nos que decides compartir información con Google.<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" />Se queres obter máis información sobre os datos que pode compartir <ph name="DEVICE_OS" /> con Google e o uso que se lles dá, visita g.co/xxxxx<ph name="END_PARAGRAPH3" /></translation> <translation id="6531282281159901044">Conservar ficheiro perigoso</translation> <translation id="6532101170117367231">Gardar en Google Drive</translation> <translation id="6532106788206463496">Gardar cambios</translation> @@ -5347,6 +5364,7 @@ <translation id="6601612474695404578">Algúns sitios utilizan cookies de terceiros para cargar as súas páxinas. Se un sitio non funciona, podes probar a permitir o uso de cookies.</translation> <translation id="6602937173026466876">Acceder ás túas impresoras</translation> <translation id="6602956230557165253">Utiliza as teclas de frecha cara á esquerda e cara á dereita para desprazarte.</translation> +<translation id="6602998402703530379">Dispositivo <ph name="DEVICE_INDEX" /> de <ph name="DEVICE_COUNT" />; <ph name="DEVICE_NAME" />; cámara de vídeo.</translation> <translation id="6605847144724004692">Ningún usuario valorou a extensión.</translation> <translation id="6606671997164410857">Parece que xa configuraches o Asistente de Google noutro dispositivo. Activa o contexto da pantalla para tirar aínda máis proveito do teu Asistente neste dispositivo.</translation> <translation id="6607831829715835317">Máis &ferramentas</translation> @@ -5368,6 +5386,7 @@ <translation id="6624535038674360844"><ph name="FILE_NAME" /> inclúe contido confidencial ou perigoso. Pídelle ao seu propietario que o corrixa.</translation> <translation id="6624687053722465643">Dozura</translation> <translation id="6628328486509726751">Data da carga: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation> +<translation id="663065535202460123">Dispositivo <ph name="DEVICE_INDEX" /> de <ph name="DEVICE_COUNT" />; <ph name="DEVICE_NAME" />; rato.</translation> <translation id="6630752851777525409"><ph name="EXTENSION_NAME" /> solicita acceso permanente a un certificado para autenticarse no teu nome.</translation> <translation id="6635362468090274700">Ninguén pode compartir contido contigo ata que o teu dispositivo sexa visible.<ph name="BR" /><ph name="BR" />Se queres facelo visible de forma temporal, abre a área de estado e, a continuación, activa Visibilidade.</translation> <translation id="6635674640674343739">Non se puido establecer a conexión de rede. Comproba a conexión de rede e téntao de novo.</translation> @@ -5696,6 +5715,7 @@ <translation id="6973611239564315524">Está dispoñible unha actualización a Debian 10 (Buster)</translation> <translation id="6974609594866392343">Modo de demostración sen conexión</translation> <translation id="697508444536771064">Pechar Linux</translation> +<translation id="6977739184256564679">Dispositivo <ph name="DEVICE_INDEX" /> de <ph name="DEVICE_COUNT" />; <ph name="DEVICE_NAME" />; tableta.</translation> <translation id="6978121630131642226">Motores de busca</translation> <translation id="6979044105893951891">Iniciar e pechar sesións de invitado xestionadas</translation> <translation id="6979158407327259162">Google Drive</translation> @@ -5715,6 +5735,7 @@ <translation id="6991665348624301627">Seleccionar un destino</translation> <translation id="6992554835374084304">Activar corrector ortográfico mellorado</translation> <translation id="6993000214273684335">A pestana quitouse do grupo sen nome (<ph name="GROUP_CONTENTS" />)</translation> +<translation id="6993889405941892667">Dispositivo <ph name="DEVICE_INDEX" /> de <ph name="DEVICE_COUNT" />; <ph name="DEVICE_NAME" />; ordenador.</translation> <translation id="6994069045767983299">Cores invertidas</translation> <translation id="6995899638241819463">Avisarte se os teus contrasinais están en risco debido a unha violación da seguranza dos datos</translation> <translation id="6997642619627518301"><ph name="NAME_PH" /> (rexistro de actividade)</translation> @@ -6287,6 +6308,7 @@ <translation id="7602173054665172958">Xestión das impresións</translation> <translation id="7603785829538808504">Aplicarase unha opción de configuración personalizada aos sitios que se indican a continuación</translation> <translation id="7605594153474022051">A sincronización non funciona</translation> +<translation id="7606560865764296217">Pór animación en pausa</translation> <translation id="7606992457248886637">Autoridades</translation> <translation id="7607002721634913082">En pausa</translation> <translation id="7608810328871051088">Preferencias de Android</translation> @@ -7095,6 +7117,7 @@ <translation id="8410775397654368139">Google Play</translation> <translation id="8412136526970428322">Permitíronse os seguintes permisos: <ph name="PERMISSION" /> e <ph name="COUNT" /> máis</translation> <translation id="8413385045638830869">Preguntar primeiro (recomendado)</translation> +<translation id="8416730306157376817"><ph name="BATTERY_PERCENTAGE" /> % (estoxo)</translation> <translation id="8417548266957501132">Contrasinal do pai ou nai</translation> <translation id="8418445294933751433">&Mostrar como pestana</translation> <translation id="8419098111404128271">Resultados da busca para "<ph name="SEARCH_TEXT" />"</translation> @@ -7437,6 +7460,7 @@ <translation id="8775653927968399786">{0,plural, =1{O teu dispositivo (<ph name="DEVICE_TYPE" />) bloquearase automaticamente en # segundo. <ph name="DOMAIN" /> require que manteñas a tarxeta intelixente inserida.}other{O teu dispositivo (<ph name="DEVICE_TYPE" />) bloquearase automaticamente en # segundos. <ph name="DOMAIN" /> require que manteñas a tarxeta intelixente inserida.}}</translation> +<translation id="8777259617149177596">Nivel de batería do estoxo: <ph name="BATTERY_PERCENTAGE" /> %.</translation> <translation id="8777628254805677039">contrasinal raíz</translation> <translation id="8778328560035799409">Borraranse as asignacións de accións a interruptores que tes configuradas nestes momentos</translation> <translation id="8780123805589053431">Obter descricións de Google para as imaxes</translation> @@ -7795,6 +7819,7 @@ <translation id="9128335130883257666">Abrir páxina de configuración de <ph name="INPUT_METHOD_NAME" /></translation> <translation id="9128870381267983090">Conectarse á rede</translation> <translation id="9130015405878219958">Modo non válido introducido.</translation> +<translation id="9130215884425927484">Dispositivo <ph name="DEVICE_INDEX" /> de <ph name="DEVICE_COUNT" />; <ph name="DEVICE_NAME" />; dispositivo de audio.</translation> <translation id="9131487537093447019">Enviar mensaxes a dispositivos Bluetooth e recibilos.</translation> <translation id="9134066738478820307">Permitir que os sitios usen identificadores para reproducir contido protexido</translation> <translation id="913411432238655354">Restaurar aplicacións ao inicio</translation> @@ -7838,6 +7863,7 @@ <translation id="916964310188958970">Por que ves esta suxestión?</translation> <translation id="9170048603158555829">Thunderbolt</translation> <translation id="9170061643796692986">Visibilidade actual configurada como Todos os contactos</translation> +<translation id="9170199455952690202">Nivel de batería do auricular dereito: <ph name="BATTERY_PERCENTAGE" /> %.</translation> <translation id="9170848237812810038">&Desfacer</translation> <translation id="9170884462774788842">Outro programa do teu ordenador engadiu un tema que pode cambiar o funcionamento de Chrome.</translation> <translation id="917350715406657904">Chegaches ao límite que definiu teu pai ou túa nai para <ph name="APP_NAME" />. Mañá poderás utilizala durante <ph name="TIME_LIMIT" />.</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb index af28e69..c1326e8 100644 --- a/chrome/app/resources/generated_resources_gu.xtb +++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -4283,7 +4283,7 @@ <translation id="5468173180030470402">શેર કરેલી ફાઇલ માટે શોધી રહ્યાં છીએ</translation> <translation id="5469852975082458401">તમે ટેક્સ્ટ કર્સર વડે કોઈપણ પેજ પર નૅવિગેટ કરી શકશો. બંધ કરવા માટે, F7 દબાવો.</translation> <translation id="5470735824776589490">તમારું ડિવાઇસ Powerwash સાથે રીસેટ થઈ શકે તે પહેલાં એકવાર ફરી શરૂ કરવું આવશ્યક છે. <ph name="LINK_BEGIN" />વધુ જાણો<ph name="LINK_END" /></translation> -<translation id="5471768120198416576">કેમ છો! હું તમારો ટેક્સ્ટ-ટુ-સ્પીચ વૉઇસ છું.</translation> +<translation id="5471768120198416576">કેમ છો! હું તમારો ટેક્સ્ટ-ટૂ-સ્પીચ વૉઇસ છું.</translation> <translation id="5472627187093107397">આ સાઇટ માટેનો પાસવર્ડ સાચવો</translation> <translation id="5473075389972733037">IBM</translation> <translation id="5473099001878321374">આગળ વધીને, તમે સંમત થાઓ છો કે આ ડિવાઇસ Google, તમારા બાળકના મોબાઇલ ઑપરેટર અને આ ડિવાઇસના નિર્માતા તરફથી સંભવિત રીતે સેલ્યુલર ડેટાનો ઉપયોગ કરીને, અપડેટ અને ઍપને ઑટોમૅટિક રીતે ડાઉનલોડ અને ઇન્સ્ટૉલ પણ કરી શકે છે. આમાંની અમુક ઍપ, ઍપમાંથી ખરીદીઓની ઑફર કરી શકે છે.</translation> @@ -5433,7 +5433,7 @@ <translation id="6673391612973410118"><ph name="PRINTER_MAKE_OR_MODEL" /> (USB)</translation> <translation id="6674571176963658787">સિંક કરવાનું શરૂ કરવા માટે, તમારો પાસફ્રેઝ દાખલ કરો</translation> <translation id="6675665718701918026">પોઇંટિંગ ઉપકરણ કનેક્ટ કર્યું</translation> -<translation id="6676212663108450937">તમારા અવાજને તાલીમ આપતી વખતે કૃપા કરીને હેડફોનનો ઉપયોગ કરવાનું વિચારો</translation> +<translation id="6676212663108450937">તમારા અવાજને તાલીમ આપતી વખતે કૃપા કરીને હૅડફોનનો ઉપયોગ કરવાનું વિચારો</translation> <translation id="6678717876183468697">ક્વેરી URL</translation> <translation id="6680442031740878064">ઉપલબ્ધ: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">રેટ કરો</translation> @@ -6395,7 +6395,7 @@ <translation id="7674537509496907005"><ph name="APP_COUNT" /> ઍપ</translation> <translation id="7674542105240814168">સ્થાનનો ઍક્સેસ નકારવામાં આવ્યો</translation> <translation id="7676119992609591770">'<ph name="SEARCH_TEXT" />' માટે <ph name="NUM" /> ટૅબ મળી છે</translation> -<translation id="7676867886086876795">કોઈપણ ટેક્સ્ટ ફીલ્ડમાં શ્રુતલેખનને મંજૂરી આપવા માટે Googleને તમારો અવાજ મોકલો.</translation> +<translation id="7676867886086876795">કોઈપણ ટેક્સ્ટ ફીલ્ડમાં ડિક્ટેશનને મંજૂરી આપવા માટે Googleને તમારો વૉઇસ મોકલો.</translation> <translation id="7679171213002716280">અહીં મેનેજ કરેલા <ph name="PRINTER_COUNT" /> પ્રિન્ટર ઉપલબ્ધ છે.</translation> <translation id="7680416688940118410">ટચસ્ક્રીનનું કેલિબ્રેશન</translation> <translation id="7681095912841365527">સાઇટ બ્લૂટૂથનો ઉપયોગ કરી શકે</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb index 3486b1f6..89eee18 100644 --- a/chrome/app/resources/generated_resources_hy.xtb +++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -1698,6 +1698,7 @@ <translation id="2721037002783622288">Որոնել պատկեր <ph name="SEARCH_ENGINE" />-ում</translation> <translation id="2721334646575696520">Microsoft Edge</translation> <translation id="2721695630904737430">Ձեր ադմինիստրատորն անջատել է վերահսկվող պրոֆիլները:</translation> +<translation id="2722540561488096675">Ձեր սարքը <ph name="TIME_LEFT" />ից կանջատվի։ Նախքան սարքը նորից միացնելը հեռացրեք USB-ն։ Դրանից հետո կարող եք սկսել օգտագործել <ph name="DEVICE_OS" />-ը։</translation> <translation id="2724841811573117416">WebRTC մատյաններ</translation> <translation id="272488616838512378">Չափման միավորների փոխարկում</translation> <translation id="2725200716980197196">Ցանցի կապակցումը վերականգնվել է</translation> @@ -4557,6 +4558,7 @@ <translation id="5739235828260127894">Պահանջվում է հաստատում: <ph name="LINK_BEGIN" />Մանրամասն<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Շատ մեծ</translation> <translation id="5740328398383587084">Փոխանակում մոտակա սարքերի հետ</translation> +<translation id="5740709157181662145"><ph name="DEVICE_OS" /> սարքակազմի աջակցում և կայունություն</translation> <translation id="574104302965107104">Էկրանի հայելապատճենում</translation> <translation id="574209121243317957">Ձայնի մակարդակը</translation> <translation id="5746169159649715125">Պահել որպես PDF</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb index cb8528613..805087a 100644 --- a/chrome/app/resources/generated_resources_id.xtb +++ b/chrome/app/resources/generated_resources_id.xtb
@@ -2123,7 +2123,7 @@ <translation id="3130528281680948470">Perangkat Anda akan direset dan semua akun pengguna serta data lokal akan dibuang. Tindakan ini tidak dapat diurungkan.</translation> <translation id="313205617302240621">Lupa sandi?</translation> <translation id="3132277757485842847">Kami tidak dapat mempertahankan koneksi dengan ponsel Anda. Pastikan ponsel berada di dekat Anda, tidak terkunci, serta Bluetooth dan Wi-Fi aktif.</translation> -<translation id="3132996321662585180">Refresh tiap hari</translation> +<translation id="3132996321662585180">Perbarui tiap hari</translation> <translation id="3134393957315651797">Pilih status eksperimen untuk eksperimen <ph name="EXPERIMENT_NAME" />. Deskripsi eksperimen: <ph name="EXPERIMENT_DESCRIPTION" /></translation> <translation id="313963229645891001">Mendownload, <ph name="STATUS" /></translation> <translation id="3139925690611372679">Avatar kuning default</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb index 01b9b4d..0fd0d0f9 100644 --- a/chrome/app/resources/generated_resources_is.xtb +++ b/chrome/app/resources/generated_resources_is.xtb
@@ -134,6 +134,7 @@ <translation id="1129850422003387628">Stjórna forritum</translation> <translation id="113050636487300043">Veldu nafn og litaþema til að aðgreina prófíla</translation> <translation id="1130589222747246278"><ph name="WINDOW_TITLE" /> – hluti af hópnum <ph name="GROUP_NAME" /></translation> +<translation id="1130676589211693127">Staða rafhlöðu hægra megin <ph name="PERCENTAGE" />%.</translation> <translation id="1133418583142946603">Bæta núverandi flipa við</translation> <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_INDEX" /> af <ph name="EMOJI_COUNT" />.</translation> <translation id="1136712381129578788">Öryggislykillinn er læstur vegna þess að rangt PIN-númer var slegið inn of oft. Til að taka hann úr lás þarftu að fjarlægja hann og setja aftur inn.</translation> @@ -1657,6 +1658,7 @@ <translation id="2665647207431876759">Útrunnið</translation> <translation id="2665717534925640469">Þessi síða er nú birt á öllum skjánum og hefur gert músarbendilinn óvirkan.</translation> <translation id="2665919335226618153">Obbosí! Villa kom upp við að sníða.</translation> +<translation id="2666247341166669829">Staða rafhlöðu vinstra megin <ph name="PERCENTAGE" />%.</translation> <translation id="2667144577800272420">Önnur forrit eru stillt á að opna sömu tengla og <ph name="APP_NAME" />. Þetta slekkur á því að <ph name="APP_NAME_2" /> og <ph name="APP_NAME_3" /> opni studda tengla.</translation> <translation id="2667463864537187133">Stjórna ritvilluleit</translation> <translation id="2669241540496514785">Ekki tókst að opna <ph name="APP_NAME" /></translation> @@ -1974,6 +1976,7 @@ <translation id="2979639724566107830">Opna í nýjum glugga</translation> <translation id="2981113813906970160">Sýna stóran músarbendil</translation> <translation id="2981474224638493138">Útsendingargæði flipa/tölvu</translation> +<translation id="2983373101216420412">Staða rafhlöðu í hulstri <ph name="PERCENTAGE" />%.</translation> <translation id="2985348301114641460">Viltu senda beiðni til kerfisstjórans þíns til að setja upp „<ph name="EXTENSION_NAME" />“?</translation> <translation id="2987620471460279764">Texta deilt úr öðru tæki</translation> <translation id="2988018669686457659">Aukamyndþýðandi</translation> @@ -2030,6 +2033,7 @@ <translation id="3030967311408872958">Sólsetur til sólarupprásar</translation> <translation id="3031417829280473749">Birgitta</translation> <translation id="3031557471081358569">Veldu atriði til að flytja inn:</translation> +<translation id="3033348223765101500">Stjórnaðu gögnunum þínum</translation> <translation id="3036327949511794916">Skilafrestur þessa <ph name="DEVICE_TYPE" /> tækis er liðinn.</translation> <translation id="3036546437875325427">Virkja Flash</translation> <translation id="3037754279345160234">Ekki tókst að þátta stillinguna til að tengjast léninu. Hafðu samband við kerfisstjóra.</translation> @@ -2130,6 +2134,7 @@ <translation id="3143754809889689516">Spila frá byrjun</translation> <translation id="3144647712221361880">Opna tengil sem</translation> <translation id="3149510190863420837">Chrome forrit</translation> +<translation id="3150622786624965651">Tæki <ph name="DEVICE_INDEX" /> af <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, leikjafjarstýring.</translation> <translation id="3150693969729403281">Keyra öryggisathugun núna</translation> <translation id="3150927491400159470">Algjör endurhleðsla</translation> <translation id="315116470104423982">Farsímagögn</translation> @@ -2337,6 +2342,7 @@ <translation id="339178315942519818">Skoðaðu tilkynningar úr spjallforritum í <ph name="DEVICE_TYPE" /></translation> <translation id="3393554941209044235">Skjalagreining Chrome</translation> <translation id="3394850431319394743">Heimilt að nota auðkenni til að spila varið efni</translation> +<translation id="3395403082745257596">Tæki <ph name="DEVICE_INDEX" /> af <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, tæki af óþekktri gerð.</translation> <translation id="3396744558790608201">Hægrismelltu og veldu „Leita í myndum með Google linsu“ til að leita hvar sem er á vefsvæðinu til að fá frekari upplýsingar um myndefnið sem þú sérð á meðan þú vafrar og verslar á netinu.</translation> <translation id="3396800784455899911">Með því að smella á hnappinn „Samþykkja og halda áfram“ samþykkir þú þá úrvinnslu sem lýst er hér að ofan fyrir þessa Google þjónustu.</translation> <translation id="339722927132407568">Frýs</translation> @@ -2392,6 +2398,7 @@ <translation id="3440663250074896476">Fleiri aðgerðir fyrir <ph name="BOOKMARK_NAME" /></translation> <translation id="3441653493275994384">Skjár</translation> <translation id="3441663102605358937">Skráðu þig aftur inn á <ph name="ACCOUNT" /> til að staðfesta þennan reikning</translation> +<translation id="3442674350323953953">Leyfa Google að nota vélbúnaðargögnin þín til að bæta <ph name="DEVICE_OS" />. Ef þú hafnar því verða þessi gögn samt send til Google til að leita að viðeigandi uppfærslum en gögnin verða hvorki vistuð né notuð í nokkrum öðrum tilgangi.</translation> <translation id="3444641828375597683">Auglýsendur og útgefendur geta notað FLoC-tæknina sem er lýst síðar á þessari síðu.</translation> <translation id="3444726579402183581"><ph name="ORIGIN" /> mun geta skoðað <ph name="FILENAME" /></translation> <translation id="3445047461171030979">Skjót svör Google hjálparans</translation> @@ -2524,6 +2531,7 @@ <translation id="3569682580018832495"><ph name="ORIGIN" /> getur skoðað eftirfarandi skrár og möppur</translation> <translation id="3571734092741541777">Setja upp</translation> <translation id="3575121482199441727">Leyfa fyrir þetta vefsvæði</translation> +<translation id="3577745545227000795">Söfnun vélbúnaðargagna í <ph name="DEVICE_OS" /></translation> <translation id="3578594933904494462">Verið er að deila efni þessa flipa.</translation> <translation id="3581605050355435601">Stilla IP-tölu sjálfkrafa</translation> <translation id="3582057310199111521">Notað á villandi vefsvæði og fannst í öryggisbroti</translation> @@ -2965,6 +2973,7 @@ <translation id="3994374631886003300">Taktu símann úr lás og færðu hann nær <ph name="DEVICE_TYPE" /> til að taka úr lás.</translation> <translation id="3994878504415702912">Aðdráttur</translation> <translation id="3995138139523574647">USB-C tæki (tengi hægra megin að aftan)</translation> +<translation id="3995963973192100066">Spila hreyfimynd</translation> <translation id="4002329649066944389">Stjórna undantekningum einstakra vefsvæða</translation> <translation id="4002440992267487163">Uppsetning PIN-númers</translation> <translation id="4005817994523282006">Aðferð við val á tímabelti</translation> @@ -3615,6 +3624,7 @@ <translation id="4728558894243024398">Kerfi</translation> <translation id="4728570203948182358"><ph name="BEGIN_LINK" />Kerfisstjórinn<ph name="END_LINK" /> slökkti á leit að skaðlegum hugbúnaði</translation> <translation id="4730492586225682674">Síðasta glósa með penna á lásskjá</translation> +<translation id="4733161265940833579"><ph name="BATTERY_PERCENTAGE" />% (vinstri)</translation> <translation id="4733793249294335256">Staðsetning</translation> <translation id="473546211690256853">Þessum reikningi er stjórnað af <ph name="DOMAIN" /></translation> <translation id="4735803855089279419">Kerfið gat ekki ákvarðað tækisauðkenni fyrir þetta tæki.</translation> @@ -4180,6 +4190,7 @@ <translation id="5341793073192892252">Eftirfarandi fótspor voru útilokuð (fótspor þriðja aðila eru útilokuð án undantekninga)</translation> <translation id="5342091991439452114">PIN-númerið má ekki vera styttra en <ph name="MINIMUM" /> tölustafir</translation> <translation id="5344036115151554031">Endurheimtir Linux</translation> +<translation id="5344128444027639014"><ph name="BATTERY_PERCENTAGE" />% (hægri)</translation> <translation id="5345916423802287046">Ræsa forrit þegar þú skráir þig inn</translation> <translation id="5350293332385664455">Slökkva á Google hjálpara</translation> <translation id="535123479159372765">Texti afritaður úr öðru tæki</translation> @@ -4419,6 +4430,7 @@ <translation id="5585898376467608182">Geymslurými tækisins er á þrotum. Þú þarft að minnsta kosti <ph name="MINIMUM_SPACE" /> af lausu plássi til að nota <ph name="APP_NAME" />. Eyddu skrám úr tækinu til að auka geymslurýmið.</translation> <translation id="5585912436068747822">Mistókst að sníða</translation> <translation id="5588033542900357244">(<ph name="RATING_COUNT" />)</translation> +<translation id="5589101568518637088">Tæki <ph name="DEVICE_INDEX" /> af <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, lyklaborð.</translation> <translation id="558918721941304263">Hleður forrit...</translation> <translation id="5592595402373377407">Ekki næg gögn komin enn.</translation> <translation id="5595485650161345191">Breyta heimilisfangi</translation> @@ -4620,6 +4632,7 @@ <translation id="5817069030404929329">Flytja aðgangsorð úr þessu tæki yfir á Google reikninginn þinn?</translation> <translation id="5817918615728894473">Para</translation> <translation id="5821565227679781414">Búa til flýtileið</translation> +<translation id="5822095611691580107">Staða rafhlöðu í vinstri Pixel Bud <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="5822865422567397338">Til að leita á ákveðnu vefsvæði eða á hluta Chrome geturðu notað flýtileiðirnar hér. Ef þú vilt t.d. aðeins leita á Gmail skaltu slá inn „@gmail“ og ýta svo á dálkalykilinn eða bilslána.</translation> <translation id="5825412242012995131">Kveikt (mælt með)</translation> <translation id="5826395379250998812">Tengdu <ph name="DEVICE_TYPE" /> við símann þinn. <ph name="LINK_BEGIN" />Frekari upplýsingar<ph name="LINK_END" /></translation> @@ -5076,6 +5089,7 @@ <translation id="6294759976468837022">Hraði sjálfvirkrar skönnunar</translation> <translation id="6295158916970320988">Öll vefsvæði</translation> <translation id="6295855836753816081">Vistar...</translation> +<translation id="6297132509712149399">Tæki <ph name="DEVICE_INDEX" /> af <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, sími.</translation> <translation id="629730747756840877">Reikningur</translation> <translation id="6298962879096096191">Notaðu Google Play til að setja upp Android forrit</translation> <translation id="6300177430812514606">Mega ekki ljúka við að senda eða móttaka gögn</translation> @@ -5289,6 +5303,9 @@ <translation id="6528179044667508675">Ónáðið ekki</translation> <translation id="652948702951888897">Chrome ferill</translation> <translation id="6530186581263215931">Kerfisstjórinn valdi þessar stillingar</translation> +<translation id="653031671361866334"><ph name="BEGIN_PARAGRAPH1" /> <ph name="DEVICE_OS" /> safnar vélbúnaðargögnum um tæki og deilir þeim með Google til að ákvarða hvaða uppfærslur skuli sækja. Þetta er gert til að bjóða upp á bestu mögulegu upplifunina. Þú getur einnig leyft Google að nota þessi gögn í öðrum tilgangi eins og til að veita aðstoð og bæta upplifun og þjónustu <ph name="DEVICE_OS" />.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />Þú getur skráð þig inn á þetta tæki og opnað hlutann CLOUDREADY_HARDWARE_INFO í chrome://system til að skoða gögnin sem eru send Google til uppfærslusíunar auk annarra tilvika þegar þú kýst að deila gögnum með Google.<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" />Frekari upplýsingar um gögn sem <ph name="DEVICE_OS" /> kann að deila með Google og um það hvernig gögnin eru notuð er að finna á g.co/xxxxx<ph name="END_PARAGRAPH3" /></translation> <translation id="6531282281159901044">Halda hættulegri skrá</translation> <translation id="6532101170117367231">Vista í Google Drive</translation> <translation id="6532106788206463496">Vista breytingar</translation> @@ -5365,6 +5382,7 @@ <translation id="6601612474695404578">Sum vefsvæði nota fótspor þriðju aðila til að hlaða síður. Ef vefsvæði virkar ekki geturðu prófað að leyfa fótspor.</translation> <translation id="6602937173026466876">Aðgangur að prenturunum þínum</translation> <translation id="6602956230557165253">Notaðu vinstri og hægri örvatakkana til að fletta.</translation> +<translation id="6602998402703530379">Tæki <ph name="DEVICE_INDEX" /> af <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, kvikmyndatökuvél.</translation> <translation id="6605847144724004692">Enginn notandi hefur gefið einkunn.</translation> <translation id="6606671997164410857">Þú virðist þegar hafa sett Google hjálparann upp í öðru tæki. Fáðu enn meira út úr Hjálparanum með því að kveikja á skjáumhverfi í þessu tæki.</translation> <translation id="6607831829715835317">F&leiri verkfæri</translation> @@ -5386,6 +5404,7 @@ <translation id="6624535038674360844"><ph name="FILE_NAME" /> inniheldur viðkvæmt eða hættulegt efni. Biddu eiganda hennar um að laga vandamálið.</translation> <translation id="6624687053722465643">Sætabrauð</translation> <translation id="6628328486509726751">Hlaðið inn <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation> +<translation id="663065535202460123">Tæki <ph name="DEVICE_INDEX" /> af <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, mús.</translation> <translation id="6630752851777525409"><ph name="EXTENSION_NAME" /> vill varanlegan aðgang að vottorði til að sannvotta sig sjálft fyrir þína hönd.</translation> <translation id="6635362468090274700">Enginn getur deilt með þér fyrr en þú gerir þig sýnilega(n).<ph name="BR" /><ph name="BR" />Til að gera þig tímabundið sýnilega(n) skaltu opna stöðusvæðið og kveikja svo á nærsýnileika.</translation> <translation id="6635674640674343739">Ekki er hægt að koma á nettengingu. Athugaðu nettenginguna og reyndu aftur.</translation> @@ -5714,6 +5733,7 @@ <translation id="6973611239564315524">Uppfærsla í Debian 10 (Buster) er í boði</translation> <translation id="6974609594866392343">Ónettengd prufustilling</translation> <translation id="697508444536771064">Slökkva á Linux</translation> +<translation id="6977739184256564679">Tæki <ph name="DEVICE_INDEX" /> af <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, spjaldtölva.</translation> <translation id="6978121630131642226">Leitarvélar</translation> <translation id="6979044105893951891">Ræsa og loka stýrðum gestalotum</translation> <translation id="6979158407327259162">Google Drive</translation> @@ -5733,6 +5753,7 @@ <translation id="6991665348624301627">Veldu áfangastað</translation> <translation id="6992554835374084304">Kveikja á endurbættri ritvilluleit</translation> <translation id="6993000214273684335">Flipi fjarlægður úr ónefndum hópi – <ph name="GROUP_CONTENTS" /></translation> +<translation id="6993889405941892667">Tæki <ph name="DEVICE_INDEX" /> af <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, tölva.</translation> <translation id="6994069045767983299">Umsnúnir litir</translation> <translation id="6995899638241819463">Láta vita ef aðgangsorðin þín eru afhjúpuð vegna öryggisbrots</translation> <translation id="6997642619627518301"><ph name="NAME_PH" /> – notkunarskrá</translation> @@ -6305,6 +6326,7 @@ <translation id="7602173054665172958">Prentstjórnun</translation> <translation id="7603785829538808504">Vefsvæðin hér fyrir neðan nota sérsniðna stillingu</translation> <translation id="7605594153474022051">Samstilling virkar ekki</translation> +<translation id="7606560865764296217">Gera hlé á hreyfimynd</translation> <translation id="7606992457248886637">Vottunarstöðvar</translation> <translation id="7607002721634913082">Hlé</translation> <translation id="7608810328871051088">Android kjörstillingar</translation> @@ -7114,6 +7136,7 @@ <translation id="8410775397654368139">Google Play</translation> <translation id="8412136526970428322">Leyfði <ph name="PERMISSION" /> og <ph name="COUNT" /> í viðbót</translation> <translation id="8413385045638830869">Spyrja fyrst (ráðlagt)</translation> +<translation id="8416730306157376817"><ph name="BATTERY_PERCENTAGE" />% (hulstur)</translation> <translation id="8417548266957501132">Aðgangsorð foreldris</translation> <translation id="8418445294933751433">&Sýna sem flipa</translation> <translation id="8419098111404128271">Leitarniðurstöður fyrir „<ph name="SEARCH_TEXT" />“</translation> @@ -7457,6 +7480,7 @@ <ph name="DOMAIN" /> krefst þess að snjallkortið sé haft í.}one{<ph name="DEVICE_TYPE" /> verður læst sjálfkrafa eftir # sekúndu. <ph name="DOMAIN" /> krefst þess að snjallkortið sé haft í.}other{<ph name="DEVICE_TYPE" /> verður læst sjálfkrafa eftir # sekúndur. <ph name="DOMAIN" /> krefst þess að snjallkortið sé haft í.}}</translation> +<translation id="8777259617149177596">Staða rafhlöðu í hulstri <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="8777628254805677039">rótaraðgangsorð</translation> <translation id="8778328560035799409">Rofar sem þegar er búið að úthluta verða hreinsaðir</translation> <translation id="8780123805589053431">Fá lýsingar á myndum frá Google</translation> @@ -7815,6 +7839,7 @@ <translation id="9128335130883257666">Opna stillingasíðu fyrir <ph name="INPUT_METHOD_NAME" /></translation> <translation id="9128870381267983090">Tengjast neti</translation> <translation id="9130015405878219958">Ógild stilling slegin inn.</translation> +<translation id="9130215884425927484">Tæki <ph name="DEVICE_INDEX" /> af <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, hljómtæki.</translation> <translation id="9131487537093447019">Senda skilaboð til Bluetooth-tækja og taka á móti skilaboðum frá þeim.</translation> <translation id="9134066738478820307">Vefsvæði mega nota auðkenni til að spila varið efni</translation> <translation id="913411432238655354">Endurheimta forrit við ræsingu</translation> @@ -7858,6 +7883,7 @@ <translation id="916964310188958970">Hvers vegna þessi tillaga?</translation> <translation id="9170048603158555829">Thunderbolt</translation> <translation id="9170061643796692986">Sýnileiki er stilltur á alla tengiliði</translation> +<translation id="9170199455952690202">Staða rafhlöðu í hægri Pixel Bud <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="9170848237812810038">Aft&urkalla</translation> <translation id="9170884462774788842">Annað forrit í tölvunni þinni bætti við þema sem gæti breytt því hvernig Chrome virkar.</translation> <translation id="917350715406657904">Þú hefur náð tímamörkunum sem foreldri þitt stillti fyrir <ph name="APP_NAME" />. Þú getur notað forritið í <ph name="TIME_LIMIT" /> á morgun.</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb index b738073..67a8916e 100644 --- a/chrome/app/resources/generated_resources_ka.xtb +++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -132,6 +132,7 @@ <translation id="1129850422003387628">აპების მართვა</translation> <translation id="113050636487300043">აირჩიეთ სახელი და ფერთა თემა, პროფილები რომ განასხვავოთ</translation> <translation id="1130589222747246278"><ph name="WINDOW_TITLE" /> — ჯგუფის „<ph name="GROUP_NAME" />“ ნაწილი</translation> +<translation id="1130676589211693127">მარჯვენა ბატარეის დონეა <ph name="PERCENTAGE" />%.</translation> <translation id="1133418583142946603">მიმდინარე ჩანართის დამატება</translation> <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_INDEX" /> / <ph name="EMOJI_COUNT" />-დან.</translation> <translation id="1136712381129578788">უსაფრთხოების ეს გასაღები დაბლოკილია არასწორი PIN-კოდის მეტისმეტად ბევრჯერ შეყვანის გამო. მის განსაბლოკად გამოართეთ და ხელახლა მიაერთეთ ის.</translation> @@ -1641,6 +1642,7 @@ <translation id="2665647207431876759">ვადაგასულია</translation> <translation id="2665717534925640469">ეს გვერდი ეხლა სრულ ეკრანზეა და გამორთო თქვენი მაუსის კურსორი.</translation> <translation id="2665919335226618153">უი! დაფორმატების დროს მოხდა შეცდომა.</translation> +<translation id="2666247341166669829">მარცხენა ბატარეის დონეა <ph name="PERCENTAGE" />%.</translation> <translation id="2667144577800272420">იმ ბმულების გასახსნელად, რომლებსაც <ph name="APP_NAME" /> ხსნის, დაყენებულია სხვა აპები. ამ ქმედების შედეგად, <ph name="APP_NAME_2" /> და <ph name="APP_NAME_3" /> აღარ გახსნის მხარდაჭერილ ბმულებს.</translation> <translation id="2667463864537187133">მართლწერის შემოწმების მართვა</translation> <translation id="2669241540496514785"><ph name="APP_NAME" />-ის გახსნა ვერ მოხერხდა</translation> @@ -1959,6 +1961,7 @@ <translation id="2979639724566107830">ახალ ფანჯარაში გახსნა</translation> <translation id="2981113813906970160">აჩვენეთ მაუსის დიდი კურსორი</translation> <translation id="2981474224638493138">ჩანართზე/დესკტოპზე პროექციის ხარისხი</translation> +<translation id="2983373101216420412">სათავსოს ბატარეის დონეა <ph name="PERCENTAGE" />%.</translation> <translation id="2985348301114641460">გსურთ, გაუგზავნოთ ადმინისტრატორს „<ph name="EXTENSION_NAME" />“-ის ინსტალაციის მოთხოვნა?</translation> <translation id="2987620471460279764">სხვა მოწყობილობიდან გაზიარებული ტექსტი</translation> <translation id="2988018669686457659">სათადარიგო რენდერერი</translation> @@ -2015,6 +2018,7 @@ <translation id="3030967311408872958">მზის ჩასვლიდან ამოსვლამდე</translation> <translation id="3031417829280473749">აგენტი X</translation> <translation id="3031557471081358569">აირჩიეთ ელემენტები იმპორტისთვის:</translation> +<translation id="3033348223765101500">მართეთ თქვენი მონაცემები</translation> <translation id="3036327949511794916">ამ <ph name="DEVICE_TYPE" />-ის დაბრუნების ბოლო ვადა გავიდა.</translation> <translation id="3036546437875325427">Flash-ის ჩართვა</translation> <translation id="3037754279345160234">დომენში გაწევრიანების კონფიგურაციის გარჩევა ვერ მოხერხდა. გთხოვთ, დაუკავშირდეთ ადმინისტრატორს.</translation> @@ -2115,6 +2119,7 @@ <translation id="3143754809889689516">დასაწყისიდან დაკვრა</translation> <translation id="3144647712221361880">ბმულის გახსნა, როგორც</translation> <translation id="3149510190863420837">Chrome-ის პროგრამები</translation> +<translation id="3150622786624965651">მოწყობილობა <ph name="DEVICE_INDEX" /> / <ph name="DEVICE_COUNT" />-დან, <ph name="DEVICE_NAME" />, სათამაშო კონტროლერი.</translation> <translation id="3150693969729403281">უსაფრთხოების შემოწმების გაშვება</translation> <translation id="3150927491400159470">მყარი ხელახლა ჩატვირთვა</translation> <translation id="315116470104423982">მობილური მონაცემები</translation> @@ -2322,6 +2327,7 @@ <translation id="339178315942519818">იხილეთ თქვენი ჩეთის აპების შეტყობინებები თქვენს <ph name="DEVICE_TYPE" />-ზე</translation> <translation id="3393554941209044235">Chrome-ის მიერ დოკუმენტების ანალიზი</translation> <translation id="3394850431319394743">ნებადართულია, გამოიყენოს იდენტიფიკატორები დაცული კონტენტის დასაკრავად</translation> +<translation id="3395403082745257596">მოწყობილობა <ph name="DEVICE_INDEX" /> / <ph name="DEVICE_COUNT" />-დან, <ph name="DEVICE_NAME" />, მოწყობილობის ტიპი უცნობია.</translation> <translation id="3396744558790608201">ვების დათვალიერებისას ან მისი მეშვეობით რაიმეს შეძენისას თქვენთვის ხილული ვიზუალური კონტენტი შესახებ დამატებითი ინფორმაცია რომ მიიღოთ, გამოიყენეთ მარჯვენა დაწკაპუნება საიტის ნებისმიერ რეგიონში და აირჩიეთ „სურათების ძიება Google Lens-ით“.</translation> <translation id="3396800784455899911">ღილაკზე „დათანხმება და გაგრძელება“ დაწკაპუნებით თქვენ ეთანხმებით მოცემული Google სერვისებისთვის მონაცემების ზემოაღნიშნული წესით დამუშავებას.</translation> <translation id="339722927132407568">იჭედება</translation> @@ -2377,6 +2383,7 @@ <translation id="3440663250074896476">სხვა ქმედებები „<ph name="BOOKMARK_NAME" />“-სთვის</translation> <translation id="3441653493275994384">ეკრანი</translation> <translation id="3441663102605358937">ამ ანგარიშის დასადასტურებლად ხელახლა შედით <ph name="ACCOUNT" />-ში</translation> +<translation id="3442674350323953953">მიეცით საშუალება Google-ს, გამოიყენოს თქვენი აპარატურის მონაცემები, <ph name="DEVICE_OS" />-ის გაუმჯობესების ხელშეწყობის მიზნით. უარყოფის შემთხვევაში, აღნიშნული მონაცემები მაინც გაეგზავნება Google-ს სათანადო განახლებების დასადგენად, თუმცა სხვა მიზნით არც შეინახება და არც გამოყენებული იქნება.</translation> <translation id="3444641828375597683">რეკლამის განმთავსებლებს და გამომცემლებს შეუძლიათ FLoC-ის გამოყენება, რაც ამ გვერდზე განმარტებულია ქვემოთ.</translation> <translation id="3444726579402183581"><ph name="ORIGIN" /> შეძლებს, ნახოს <ph name="FILENAME" /></translation> <translation id="3445047461171030979">Google ასისტენტის სწრაფი პასუხები</translation> @@ -2509,6 +2516,7 @@ <translation id="3569682580018832495"><ph name="ORIGIN" />-ს შეუძლია მითითებული ფაილებისა და საქაღალდეების ნახვა</translation> <translation id="3571734092741541777">დაყენება</translation> <translation id="3575121482199441727">დაშვება ამ საიტისთვის</translation> +<translation id="3577745545227000795"><ph name="DEVICE_OS" />-ის აპარატურის მონაცემების შეგროვება</translation> <translation id="3578594933904494462">ამ ჩანართის შიგთავსი გაზიარებულია.</translation> <translation id="3581605050355435601">IP მისამართის ავტომატური კონფიგურაცია</translation> <translation id="3582057310199111521">შეყვანილია შეცდომაში შემყვან საიტზე და დაფიქსირდა პერსონალურ მონაცემთა გაჟონვისას</translation> @@ -2950,6 +2958,7 @@ <translation id="3994374631886003300"><ph name="DEVICE_TYPE" />-ის განსაბლოკად მოაახლოვეთ და განბლოკეთ თქვენი ტელეფონი.</translation> <translation id="3994878504415702912">&მასშტაბი</translation> <translation id="3995138139523574647">USB-C მოწყობილობა (მარჯვენა უკანა პორტი)</translation> +<translation id="3995963973192100066">ანიმაციის დაკვრა</translation> <translation id="4002329649066944389">გამონაკლისების მართვა საიტების მიხედვით</translation> <translation id="4002440992267487163">PIN-კოდის დაყენება</translation> <translation id="4005817994523282006">სასაათო სარტყლის ამოცნობის მეთოდი</translation> @@ -3599,6 +3608,7 @@ <translation id="4728558894243024398">პლატფორმა</translation> <translation id="4728570203948182358">საზიანო პროგრამული უზრუნველყოფის შემოწმება გამორთულია <ph name="BEGIN_LINK" />თქვენი ადმინისტრატორის<ph name="END_LINK" /> მიერ</translation> <translation id="4730492586225682674">ჩაკეტილ ეკრანზე სტილუსით ბოლოს ჩანიშნული</translation> +<translation id="4733161265940833579"><ph name="BATTERY_PERCENTAGE" />% (მარცხენა)</translation> <translation id="4733793249294335256">მდებარეობა</translation> <translation id="473546211690256853">ეს ანგარიში იმართება <ph name="DOMAIN" />-ის მიერ</translation> <translation id="4735803855089279419">სისტემამ ვერ დაადგინა მოწყობილობის იდენტიფიკატორები ამ მოწყობილობისთვის.</translation> @@ -4164,6 +4174,7 @@ <translation id="5341793073192892252">დაბლოკილია შემდეგი ქუქი-ჩანაწერები (მესამე მხარის ქუქი-ჩანაწერები იბლოკება გამონაკლისების გარეშე)</translation> <translation id="5342091991439452114">PIN-კოდი უნდა შედგებოდეს მინიმუმ <ph name="MINIMUM" /> ციფრისგან</translation> <translation id="5344036115151554031">მიმდინარეობს Linux-ის აღდგენა</translation> +<translation id="5344128444027639014"><ph name="BATTERY_PERCENTAGE" />% (მარჯვენა)</translation> <translation id="5345916423802287046">აპის გაშვება სისტემაში შესვლისას</translation> <translation id="5350293332385664455">Google ასისტენტის გამორთვა</translation> <translation id="535123479159372765">სხვა მოწყობილობიდან დაკოპირდა ტექსტი</translation> @@ -4403,6 +4414,7 @@ <translation id="5585898376467608182">თქვენს მოწყობილობას მეხსიერება ეწურება. <ph name="APP_NAME" />-ის გამოსაყენებლად საჭიროა მინიმუმ <ph name="MINIMUM_SPACE" />. მეხსიერების გათავისუფლება შეგიძლიათ მოწყობილობიდან ფაილების წაშლით.</translation> <translation id="5585912436068747822">ფორმატირება ვერ მოხერხდა</translation> <translation id="5588033542900357244">(<ph name="RATING_COUNT" />)</translation> +<translation id="5589101568518637088">მოწყობილობა <ph name="DEVICE_INDEX" /> / <ph name="DEVICE_COUNT" />-დან, <ph name="DEVICE_NAME" />, კლავიატურა.</translation> <translation id="558918721941304263">აპები იტვირთება…</translation> <translation id="5592595402373377407">ჯერჯერობით არ არის საკმარისი მონაცემები.</translation> <translation id="5595485650161345191">მისამართის რედაქტირება</translation> @@ -4604,6 +4616,7 @@ <translation id="5817069030404929329">გსურთ პაროლების გადმოტანა ამ მოწყობილობიდან თქვენს Google ანგარიშში?</translation> <translation id="5817918615728894473">დაწყვილება</translation> <translation id="5821565227679781414">მალსახმობის შექმნა</translation> +<translation id="5822095611691580107">მარცხენა ყურსაცვამის ბატარეის დონეა <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="5822865422567397338">კონკრეტულ საიტში ან Chrome-ის ნაწილში რაიმე რომ მოიძიოთ, აქ შეგიძლიათ მალსახმობებით ისარგებლოთ. მაგალითად, მხოლოდ Gmail-ში ძიებისთვის აკრიფეთ „@gmail“, შემდეგ კი შეეხეთ კლავიშს Tab ან შორისს.</translation> <translation id="5825412242012995131">ჩართული (რეკომენდებულია)</translation> <translation id="5826395379250998812">დაუკავშირეთ <ph name="DEVICE_TYPE" /> თქვენს ტელეფონს. <ph name="LINK_BEGIN" />შეიტყვეთ მეტი<ph name="LINK_END" /></translation> @@ -5060,6 +5073,7 @@ <translation id="6294759976468837022">ავტომატური სკანირების სიჩქარე</translation> <translation id="6295158916970320988">ყველა საიტი</translation> <translation id="6295855836753816081">მიმდინარეობს შენახვა…</translation> +<translation id="6297132509712149399">მოწყობილობა <ph name="DEVICE_INDEX" /> / <ph name="DEVICE_COUNT" />-დან, <ph name="DEVICE_NAME" />, ტელეფონი.</translation> <translation id="629730747756840877">ანგარიში</translation> <translation id="6298962879096096191">Android-ის აპების ინსტალაციისთვის Google Play-ს გამოყენება</translation> <translation id="6300177430812514606">მონაცემთა გაგზავნის/მიღების დასრულება დაუშვებელია</translation> @@ -5273,6 +5287,9 @@ <translation id="6528179044667508675">არ შემაწუხოთ</translation> <translation id="652948702951888897">Chrome ისტორია</translation> <translation id="6530186581263215931">ეს პარამეტრები იძულებით არის გააქტიურებული თქვენი ადმინისტრატორის მიერ</translation> +<translation id="653031671361866334"><ph name="BEGIN_PARAGRAPH1" />საუკეთესო ფუნქციების უზრუნველყოფის მიზნით, <ph name="DEVICE_OS" /> აგროვებს მოწყობილობების აპარატურის მონაცემებს და უზიარებს მათ Google-ს, სათანადო განახლებების დასადგენად. სურვილისამებრ, შეგიძლიათ საშუალება მისცეთ Google-ს, გამოიყენოს აღნიშნული მონაცემები სხვა მიზნებითაც, მაგალითად, <ph name="DEVICE_OS" />-თან დაკავშირებული მხარდაჭერის, ფუნქციების და მომსახურების გაუმჯობესების მიზნით.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />Google-ისთვის განახლებების გაფილტვრის მიზნით (ასევე, თქვენ არჩეული სხვა მიზნებისთვის) გაგზავნილი მონაცემების სანახავად შედით თქვენს ანგარიშში ამ მოწყობილობაზე და გადადით chrome://system-ის სექციაზე „CLOUDREADY_HARDWARE_INFO“.<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" />დეტალური ინფორმაცია იმ მონაცემების შესახებ, რომელთა გაზიარებაც <ph name="DEVICE_OS" />-ს შეუძლია Google-ისთვის, ასევე, აღნიშნული მონაცემების გამოყენების შესახებ, ხელმისაწვდომია მისამართზე g.co/xxxxx<ph name="END_PARAGRAPH3" /></translation> <translation id="6531282281159901044">სახიფათო ფაილის შენარჩუნება</translation> <translation id="6532101170117367231">შენახვა Google Drive-ზე</translation> <translation id="6532106788206463496">ცვლილებების შენახვა</translation> @@ -5349,6 +5366,7 @@ <translation id="6601612474695404578">ზოგიერთი საიტი გვერდების ჩასატვირთად მესამე მხარის ქუქი-ჩანაწერებს იყენებს. თუ რომელიმე საიტი არ მუშაობს, შეგიძლიათ ცადოთ ქუქი-ჩანაწერების დაშვება.</translation> <translation id="6602937173026466876">თქვენს პრინტერებზე წვდომა</translation> <translation id="6602956230557165253">ნავიგაციისთვის გამოიყენეთ მარცხენა და მარჯვენა ღილაკები.</translation> +<translation id="6602998402703530379">მოწყობილობა <ph name="DEVICE_INDEX" /> / <ph name="DEVICE_COUNT" />-დან, <ph name="DEVICE_NAME" />, ვიდეოკამერა.</translation> <translation id="6605847144724004692">მომხმარებლებს ჯერ არ შეუფასებიათ.</translation> <translation id="6606671997164410857">როგორც ჩანს, თქვენ უკვე დააყენეთ Google ასისტენტი სხვა მოწყობილობაზე. ამ მოწყობილობაზე ეკრანის კონტექსტის ჩართვის შემთხვევაში ასისტენტის კიდევ უფრო მეტ შესაძლებლობას გამოიყენებთ.</translation> <translation id="6607831829715835317">დამატებითი ხე&ლსაწყოები</translation> @@ -5370,6 +5388,7 @@ <translation id="6624535038674360844"><ph name="FILE_NAME" /> შეიცავს სენსიტიურ ან სახიფათო კონტენტს. სთხოვეთ მის მფლობელს აღნიშნულის გამოსწორება.</translation> <translation id="6624687053722465643">ტკბილეულობა</translation> <translation id="6628328486509726751">ატვირთულია <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation> +<translation id="663065535202460123">მოწყობილობა <ph name="DEVICE_INDEX" /> / <ph name="DEVICE_COUNT" />-დან, <ph name="DEVICE_NAME" />, მაუსი.</translation> <translation id="6630752851777525409"><ph name="EXTENSION_NAME" />-ს სერტიფიკატზე მუდმივი წვდომის უფლების მიღება სურს, რათა საკუთარი თავის ავტორიზაცია თქვენი სახელით განახორციელოს.</translation> <translation id="6635362468090274700">თქვენთვის კონტენტის გაზიარებას ვერავინ შეძლებს, სანამ ხილული არ გახდებით.<ph name="BR" /><ph name="BR" />დროებით ხილული რომ გახდეთ, გახსენით სტატუსის არე, შემდეგ კი ჩართეთ ახლომახლო ხილვადობა.</translation> <translation id="6635674640674343739">ქსელთან კავშირი ვერ დამყარდა. შეამოწმეთ ქსელთან კავშირი და ხელახლა ცადეთ.</translation> @@ -5698,6 +5717,7 @@ <translation id="6973611239564315524">ხელმისაწვდომია Debian 10-ზე (Buster) განახლება</translation> <translation id="6974609594866392343">ხაზგარეშე დემო-რეჟიმი</translation> <translation id="697508444536771064">Linux-ის გამორთვა</translation> +<translation id="6977739184256564679">მოწყობილობა <ph name="DEVICE_INDEX" /> / <ph name="DEVICE_COUNT" />-დან, <ph name="DEVICE_NAME" />, ტაბლეტი.</translation> <translation id="6978121630131642226">საძიებო სისტემები</translation> <translation id="6979044105893951891">სტუმრების მართული სესიების გაშვება და სესიებიდან გასვლა</translation> <translation id="6979158407327259162">Google Drive</translation> @@ -5717,6 +5737,7 @@ <translation id="6991665348624301627">აირჩიეთ დანიშნულება</translation> <translation id="6992554835374084304">მართლწერის გაძლიერებული შემოწმების ჩართვა</translation> <translation id="6993000214273684335">ჩანართი ამოიშალა უსახელო ჯგუფიდან — <ph name="GROUP_CONTENTS" /></translation> +<translation id="6993889405941892667">მოწყობილობა <ph name="DEVICE_INDEX" /> / <ph name="DEVICE_COUNT" />-დან, <ph name="DEVICE_NAME" />, კომპიუტერი.</translation> <translation id="6994069045767983299">ფერების ინვერსია</translation> <translation id="6995899638241819463">გაფრთხილების მიღება მონაცემთა გაჟონვისას პაროლების გამოაშკარავების შემთხვევაში</translation> <translation id="6997642619627518301"><ph name="NAME_PH" /> — აქტივობის ჟურნალი</translation> @@ -6289,6 +6310,7 @@ <translation id="7602173054665172958">ბეჭდვის მართვა</translation> <translation id="7603785829538808504">ქვემოთ მოცემული საიტები მორგებული პარამეტრით ხელმძღვანელობს</translation> <translation id="7605594153474022051">სინქრონიზაცია არ მუშაობს</translation> +<translation id="7606560865764296217">ანიმაციის დაპაუზება</translation> <translation id="7606992457248886637">უფლებამოსილება</translation> <translation id="7607002721634913082">დაპაუზებული</translation> <translation id="7608810328871051088">Android-ის პარამეტრები</translation> @@ -7097,6 +7119,7 @@ <translation id="8410775397654368139">Google Play</translation> <translation id="8412136526970428322">დაშვებულია <ph name="PERMISSION" /> და <ph name="COUNT" /> სხვა</translation> <translation id="8413385045638830869">ჯერ მკითხეთ (რეკომენდებულია)</translation> +<translation id="8416730306157376817"><ph name="BATTERY_PERCENTAGE" />% (სათავსო)</translation> <translation id="8417548266957501132">მშობლის პაროლი</translation> <translation id="8418445294933751433">ჩ&ვენება ჩანართის სახით</translation> <translation id="8419098111404128271">ძიების შედეგები მოთხოვნაზე „<ph name="SEARCH_TEXT" />“</translation> @@ -7439,6 +7462,7 @@ <translation id="8775653927968399786">{0,plural, =1{თქვენი <ph name="DEVICE_TYPE" /> ავტომატურად ჩაიკეტება # წამში. <ph name="DOMAIN" /> მოითხოვს, რომ თქვენი სმარტ-ბარათი ჩასმული იყოს.}other{თქვენი <ph name="DEVICE_TYPE" /> ავტომატურად ჩაიკეტება # წამში. <ph name="DOMAIN" /> მოითხოვს, რომ თქვენი სმარტ-ბარათი ჩასმული იყოს.}}</translation> +<translation id="8777259617149177596">სათავსოს ბატარეის დონეა <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="8777628254805677039">ძირეული პაროლი</translation> <translation id="8778328560035799409">ამჟამად მიკუთვნებული გადამრთველები გასუფთავდება</translation> <translation id="8780123805589053431">სურათების აღწერილობების მიღება Google-ისგან</translation> @@ -7797,6 +7821,7 @@ <translation id="9128335130883257666">პარამეტრების გვერდის გახსნა შემდეგისთვის: <ph name="INPUT_METHOD_NAME" /></translation> <translation id="9128870381267983090">ქსელთან დაკავშირება</translation> <translation id="9130015405878219958">შეყვანილია არასწორი რეჟიმი.</translation> +<translation id="9130215884425927484">მოწყობილობა <ph name="DEVICE_INDEX" /> / <ph name="DEVICE_COUNT" />-დან, <ph name="DEVICE_NAME" />, აუდიომოწყობილობა.</translation> <translation id="9131487537093447019">Bluetooth მოწყობილობებიდან შეტყობინებების გაგზავნა და მიღება.</translation> <translation id="9134066738478820307">ვებსაიტებს შეუძლია იდენტიფიკატორების გამოყენება დაცული კონტენტის დასაკრავად</translation> <translation id="913411432238655354">აპების აღდგენა ჩართვისას</translation> @@ -7840,6 +7865,7 @@ <translation id="916964310188958970">რატომ მთავაზობთ ამას?</translation> <translation id="9170048603158555829">Thunderbolt</translation> <translation id="9170061643796692986">ხილვადობის პარამეტრად ამჟამად მითითებულია ყველა კონტაქტი</translation> +<translation id="9170199455952690202">მარჯვენა ყურსაცვამის ბატარეის დონეა <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="9170848237812810038">მოქმედების დაბრ&უნება</translation> <translation id="9170884462774788842">სხვა პროგრამამ თქვენს კომპიუტერში დაამატა თემა, რომელმაც შეიძლება შეცვალოს Chrome-ის მუშაობის ფორმა.</translation> <translation id="917350715406657904">მიღწეულია მშობლის მიერ <ph name="APP_NAME" />-ზე დაწესებული დროის ლიმიტი. ხვალ შეგიძლიათ <ph name="TIME_LIMIT" /> გამოიყენოთ ის.</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb index 3ccf9d1..4a0a6496 100644 --- a/chrome/app/resources/generated_resources_lv.xtb +++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -132,6 +132,7 @@ <translation id="1129850422003387628">Lietotņu pārvaldība</translation> <translation id="113050636487300043">Lai atšķirtu dažādus profilus, izvēlieties nosaukumu un krāsu motīvu</translation> <translation id="1130589222747246278"><ph name="WINDOW_TITLE" /> — grupas “<ph name="GROUP_NAME" />” elements</translation> +<translation id="1130676589211693127">Labās austiņas akumulatora uzlādes līmenis ir <ph name="PERCENTAGE" />%.</translation> <translation id="1133418583142946603">Pievienot pašreizējo cilni</translation> <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_INDEX" />. no <ph name="EMOJI_COUNT" />.</translation> <translation id="1136712381129578788">Šī drošības atslēga ir bloķēta, jo pārāk daudz reižu ievadīts nepareizs PIN. Lai atbloķētu atslēgu, noņemiet to un ievietojiet atkārtoti.</translation> @@ -1643,6 +1644,7 @@ <translation id="2665647207431876759">Beidzies derīguma termiņš</translation> <translation id="2665717534925640469">Šī lapa tagad ir redzama pilnekrāna režīmā un ir atspējojusi jūsu peles kursoru.</translation> <translation id="2665919335226618153">Diemžēl formatēšanas laikā radās kļūda.</translation> +<translation id="2666247341166669829">Kreisās austiņas akumulatora uzlādes līmenis ir <ph name="PERCENTAGE" />%.</translation> <translation id="2667144577800272420">Citas lietotnes ir iestatītas to pašu saišu atvēršanai, ko var atvērt, izmantojot lietotni <ph name="APP_NAME" />. Atbalstītās saites vairs nevarēs atvērt, izmantojot lietotnes <ph name="APP_NAME_2" /> un <ph name="APP_NAME_3" />.</translation> <translation id="2667463864537187133">Pareizrakstības pārbaudes pārvaldība</translation> <translation id="2669241540496514785">Nevarēja atvērt lietotni <ph name="APP_NAME" /></translation> @@ -1961,6 +1963,7 @@ <translation id="2979639724566107830">Atvērt jaunā logā</translation> <translation id="2981113813906970160">Rādīt lielu peles kursoru</translation> <translation id="2981474224638493138">Cilnes/darbvirsmas satura projekcijas kvalitāte</translation> +<translation id="2983373101216420412">Futrāļa akumulatora uzlādes līmenis ir <ph name="PERCENTAGE" />%.</translation> <translation id="2985348301114641460">Vai nosūtīt administratoram pieprasījumu instalēt <ph name="EXTENSION_NAME" />?</translation> <translation id="2987620471460279764">No citas ierīces kopīgotais teksts</translation> <translation id="2988018669686457659">Rezerves renderētājs</translation> @@ -2017,6 +2020,7 @@ <translation id="3030967311408872958">No saulrieta līdz saullēktam</translation> <translation id="3031417829280473749">Aģente X</translation> <translation id="3031557471081358569">Izvēlieties importējamos vienumus:</translation> +<translation id="3033348223765101500">Pārvaldiet savus datus</translation> <translation id="3036327949511794916">Šīs <ph name="DEVICE_TYPE" /> ierīces atdošanas termiņš ir pagājis.</translation> <translation id="3036546437875325427">Iespējot Flash</translation> <translation id="3037754279345160234">Nevar parsēt domēna pievienošanas konfigurāciju. Lūdzu, sazinieties ar administratoru.</translation> @@ -2117,6 +2121,7 @@ <translation id="3143754809889689516">Atskaņot no sākuma</translation> <translation id="3144647712221361880">Atvērt saiti kā</translation> <translation id="3149510190863420837">Chrome lietotnes</translation> +<translation id="3150622786624965651"><ph name="DEVICE_INDEX" />. ierīce no <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, spēles vadāmierīce.</translation> <translation id="3150693969729403281">Veikt drošības pārbaudi tūlīt</translation> <translation id="3150927491400159470">Veikt stingro atkārtoto ielādi</translation> <translation id="315116470104423982">Mobilie dati</translation> @@ -2324,6 +2329,7 @@ <translation id="339178315942519818">Skatiet paziņojumus no savām tērzēšanas lietotnēm savā <ph name="DEVICE_TYPE" /> ierīcē.</translation> <translation id="3393554941209044235">Chrome dokumenta analīze</translation> <translation id="3394850431319394743">Atļauts izmantot identifikatorus, lai atskaņotu aizsargātu saturu</translation> +<translation id="3395403082745257596"><ph name="DEVICE_INDEX" />. ierīce no <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, nezināms ierīces veids.</translation> <translation id="3396744558790608201">Noklikšķiniet ar peles labo pogu un atlasiet “Meklēt attēlus, izmantojot Google Lens”, lai veiktu meklēšanu jebkurā vietnes daļā un uzzinātu vairāk par vizuālo saturu, ko redzat, kad pārlūkojat tīmekli un iepērkaties tīmeklī.</translation> <translation id="3396800784455899911">Noklikšķinot uz pogas “Piekrist un turpināt”, jūs piekrītat iepriekš aprakstītajai apstrādei šajos Google pakalpojumos.</translation> <translation id="339722927132407568">Attēla sastingšana</translation> @@ -2379,6 +2385,7 @@ <translation id="3440663250074896476">Citas darbības ar grāmatzīmi <ph name="BOOKMARK_NAME" /></translation> <translation id="3441653493275994384">Ekrāns</translation> <translation id="3441663102605358937">Vēlreiz pierakstieties kontā <ph name="ACCOUNT" />, lai verificētu šo kontu</translation> +<translation id="3442674350323953953">Ļaujiet Google izmantot jūsu aparatūras datus, lai palīdzētu uzlabot operētājsistēmu <ph name="DEVICE_OS" />. Ja to neatļausiet, šie dati joprojām tiks nosūtīti uzņēmumam Google, lai noteiktu atbilstošus atjauninājumus, taču netiks saglabāti vai kā citādi izmantoti.</translation> <translation id="3444641828375597683">Reklāmdevēji un izdevēji var izmantot tehnoloģiju FPK, kā aprakstīts tālāk šajā lapā.</translation> <translation id="3444726579402183581">Vietne <ph name="ORIGIN" /> varēs skatīt failu <ph name="FILENAME" />.</translation> <translation id="3445047461171030979">Google asistenta ātrās atbildes</translation> @@ -2511,6 +2518,7 @@ <translation id="3569682580018832495">Vietne <ph name="ORIGIN" /> var skatīt šos failus un mapes:</translation> <translation id="3571734092741541777">Iestatīt</translation> <translation id="3575121482199441727">Atļaut šajā vietnē</translation> +<translation id="3577745545227000795">Aparatūras datu vākšana operētājsistēmā <ph name="DEVICE_OS" /></translation> <translation id="3578594933904494462">Šīs cilnes saturs tiek kopīgots.</translation> <translation id="3581605050355435601">IP adreses automātiska konfigurēšana</translation> <translation id="3582057310199111521">Ievadīta maldinošā vietnē, atklāta datu pārkāpuma dēļ</translation> @@ -2952,6 +2960,7 @@ <translation id="3994374631886003300">Atbloķējiet tālruni un pietuviniet to, lai atbloķētu savu ierīci (<ph name="DEVICE_TYPE" />).</translation> <translation id="3994878504415702912">Tālummaiņa</translation> <translation id="3995138139523574647">USB-C ierīce (pieslēgvieta labajā pusē aizmugurē)</translation> +<translation id="3995963973192100066">Atskaņot animāciju</translation> <translation id="4002329649066944389">Konkrētu vietņu izņēmumu pārvaldība</translation> <translation id="4002440992267487163">PIN koda iestatīšana</translation> <translation id="4005817994523282006">Laika joslas noteikšanas metode</translation> @@ -3601,6 +3610,7 @@ <translation id="4728558894243024398">Platforma</translation> <translation id="4728570203948182358"><ph name="BEGIN_LINK" />Jūsu administrators<ph name="END_LINK" /> ir izslēdzis kaitīgas programmatūras pārbaudīšanu.</translation> <translation id="4730492586225682674">Skārienekrāna pildspalva: pēdējā piezīme bloķēšanas ekrānā</translation> +<translation id="4733161265940833579"><ph name="BATTERY_PERCENTAGE" />% (kreisā)</translation> <translation id="4733793249294335256">Atrašanās vieta</translation> <translation id="473546211690256853">Šo kontu pārvalda <ph name="DOMAIN" /></translation> <translation id="4735803855089279419">Sistēmā neizdevās noteikt šīs ierīces identifikatorus.</translation> @@ -4166,6 +4176,7 @@ <translation id="5341793073192892252">Tālāk norādītie sīkfaili tika bloķēti (trešo pušu sīkfaili tiek bloķēti bez izņēmumiem).</translation> <translation id="5342091991439452114">PIN kodā ir jābūt vismaz <ph name="MINIMUM" /> cipariem.</translation> <translation id="5344036115151554031">Linux atjaunošana</translation> +<translation id="5344128444027639014"><ph name="BATTERY_PERCENTAGE" />% (labā)</translation> <translation id="5345916423802287046">Palaist lietotni pierakstoties</translation> <translation id="5350293332385664455">Google asistenta izslēgšana</translation> <translation id="535123479159372765">Teksts nokopēts no citas ierīces</translation> @@ -4405,6 +4416,7 @@ <translation id="5585898376467608182">Jūsu ierīcē ir maz brīvas krātuves vietas. Lai izmantotu lietotni <ph name="APP_NAME" />, ir nepieciešams <ph name="MINIMUM_SPACE" /> brīvas vietas. Lai atbrīvotu vietu, dzēsiet failus no ierīces.</translation> <translation id="5585912436068747822">Formatēšana neizdevās</translation> <translation id="5588033542900357244">(<ph name="RATING_COUNT" />)</translation> +<translation id="5589101568518637088"><ph name="DEVICE_INDEX" />. ierīce no <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, tastatūra.</translation> <translation id="558918721941304263">Notiek lietotņu ielāde...</translation> <translation id="5592595402373377407">Vēl nav pieejams pietiekami daudz datu.</translation> <translation id="5595485650161345191">Rediģēt adresi</translation> @@ -4606,6 +4618,7 @@ <translation id="5817069030404929329">Vai vēlaties pārvietot paroles no šīs ierīces uz Google kontu?</translation> <translation id="5817918615728894473">Savienot pārī</translation> <translation id="5821565227679781414">Izveidot saīsni</translation> +<translation id="5822095611691580107">Kreisās austiņas akumulatora uzlādes līmenis ir <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="5822865422567397338">Lai meklētu saturu konkrētā vietnē vai Chrome sadaļā, varat izmantot šeit minētās saīsnes. Piemēram, lai meklētu tikai pakalpojumā Gmail, ierakstiet “@gmail” un nospiediet tabulēšanas vai atstarpes taustiņu.</translation> <translation id="5825412242012995131">Ieslēgts (ieteicams)</translation> <translation id="5826395379250998812">Savienojiet <ph name="DEVICE_TYPE" /> ierīci ar tālruni. <ph name="LINK_BEGIN" />Uzzināt vairāk<ph name="LINK_END" /></translation> @@ -5062,6 +5075,7 @@ <translation id="6294759976468837022">Automātiskās pārlūkošanas ātrums</translation> <translation id="6295158916970320988">Visas vietnes</translation> <translation id="6295855836753816081">Notiek saglabāšana...</translation> +<translation id="6297132509712149399"><ph name="DEVICE_INDEX" />. ierīce no <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, tālrunis.</translation> <translation id="629730747756840877">Konts</translation> <translation id="6298962879096096191">Izmantojiet Google Play, lai instalētu Android lietotnes</translation> <translation id="6300177430812514606">Nedrīkst pabeigt datu sūtīšanu vai saņemšanu</translation> @@ -5275,6 +5289,9 @@ <translation id="6528179044667508675">Netraucēt</translation> <translation id="652948702951888897">Chrome vēsture</translation> <translation id="6530186581263215931">Šos iestatījumus ir noteicis administrators</translation> +<translation id="653031671361866334"><ph name="BEGIN_PARAGRAPH1" />Lai nodrošinātu vislabāko pieredzi, operētājsistēmā <ph name="DEVICE_OS" /> tiek vākti aparatūras dati par ierīcēm, un tie tiek kopīgoti ar uzņēmumu Google, lai noteiktu, kādus atjauninājumus piegādāt. Varat arī atļaut uzņēmumam Google izmantot šos datus citiem mērķiem, piemēram, operētājsistēmas <ph name="DEVICE_OS" /> saskarnes un pakalpojuma atbalstam un uzlabojumiem.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />Varat pieteikties šajā ierīcē un skatīt sadaļu CLOUDREADY_HARDWARE_INFO vietnē chrome://system, lai uzzinātu, kādi dati tiek sūtīti uzņēmumam Google atjauninājumu filtrēšanai, kā arī uzzinātu par citiem gadījumiem, kad izvēlaties kopīgot datus ar uzņēmumu Google.<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" />Plašāku informāciju par datiem, ko <ph name="DEVICE_OS" /> var kopīgot ar uzņēmumu Google, un to izmantošanu skatiet vietnē g.co/xxxxx.<ph name="END_PARAGRAPH3" /></translation> <translation id="6531282281159901044">Paturēt bīstamo failu</translation> <translation id="6532101170117367231">Saglabāt Google diskā</translation> <translation id="6532106788206463496">Saglabāt izmaiņas</translation> @@ -5351,6 +5368,7 @@ <translation id="6601612474695404578">Noteiktās vietnēs lapu ielādei tiek izmantoti trešo pušu sīkfaili. Ja vietne nedarbojas, varat mēģināt atļaut sīkfailus.</translation> <translation id="6602937173026466876">Piekļūstiet saviem printeriem</translation> <translation id="6602956230557165253">Lai pārvietotos, izmantojiet kreiso un labo bulttaustiņu.</translation> +<translation id="6602998402703530379"><ph name="DEVICE_INDEX" />. ierīce no <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, videokamera.</translation> <translation id="6605847144724004692">Vēl nav novērtējis neviens lietotājs.</translation> <translation id="6606671997164410857">Šķiet, ka jūs jau esat iestatījis Google asistentu citā ierīcē. Lai efektīvāk izmantotu Asistentu, ieslēdziet ekrāna kontekstu šajā ierīcē.</translation> <translation id="6607831829715835317">Vairā&k rīku</translation> @@ -5372,6 +5390,7 @@ <translation id="6624535038674360844">Fails <ph name="FILE_NAME" /> ietver sensitīvu vai bīstamu saturu. Lūdziet faila īpašniekam to labot.</translation> <translation id="6624687053722465643">Kārums</translation> <translation id="6628328486509726751">Augšupielādēts: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation> +<translation id="663065535202460123"><ph name="DEVICE_INDEX" />. ierīce no <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, pele.</translation> <translation id="6630752851777525409"><ph name="EXTENSION_NAME" /> vēlas pastāvīgu piekļuvi sertifikātam, lai varētu veikt autentificēšanu jūsu vārdā.</translation> <translation id="6635362468090274700">Neviens nevar kopīgot ar jums saturu, kamēr neesat padarījis sevi redzamu.<ph name="BR" /><ph name="BR" />Lai padarītu sevi īslaicīgi redzamu, atveriet statusa apgabalu un pēc tam ieslēdziet iestatījumu “Tuvumā: redzamība”.</translation> <translation id="6635674640674343739">Nevar izveidot tīkla savienojumu. Pārbaudiet tīkla savienojumu un mēģiniet vēlreiz.</translation> @@ -5700,6 +5719,7 @@ <translation id="6973611239564315524">Ir pieejams jauninājums uz versiju Debian 10 (Buster)</translation> <translation id="6974609594866392343">Bezsaistes demonstrācijas režīms</translation> <translation id="697508444536771064">Izslēgt Linux</translation> +<translation id="6977739184256564679"><ph name="DEVICE_INDEX" />. ierīce no <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, planšetdators.</translation> <translation id="6978121630131642226">Meklētāji</translation> <translation id="6979044105893951891">Palaist un iziet no pārvaldītajām viesu sesijām</translation> <translation id="6979158407327259162">Google disks</translation> @@ -5719,6 +5739,7 @@ <translation id="6991665348624301627">Printera atlase</translation> <translation id="6992554835374084304">Uzlabotās pareizrakstības pārbaudes ieslēgšana</translation> <translation id="6993000214273684335">Cilne tika noņemta no grupas bez nosaukuma — <ph name="GROUP_CONTENTS" /></translation> +<translation id="6993889405941892667"><ph name="DEVICE_INDEX" />. ierīce no <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, dators.</translation> <translation id="6994069045767983299">Invertētas krāsas</translation> <translation id="6995899638241819463">Brīdināt, ja paroles tiek atklātas datu noplūdes dēļ</translation> <translation id="6997642619627518301"><ph name="NAME_PH" />— darbību žurnāls</translation> @@ -6291,6 +6312,7 @@ <translation id="7602173054665172958">Drukāšanas pārvaldība</translation> <translation id="7603785829538808504">Tālāk norādītajās vietnēs tiek lietots pielāgots iestatījums</translation> <translation id="7605594153474022051">Sinhronizācija nedarbojas</translation> +<translation id="7606560865764296217">Pārtraukt animāciju</translation> <translation id="7606992457248886637">Izdevējiestādes</translation> <translation id="7607002721634913082">Apturēta</translation> <translation id="7608810328871051088">Android iestatījumi</translation> @@ -7100,6 +7122,7 @@ <translation id="8410775397654368139">Google Play</translation> <translation id="8412136526970428322">Atļauts: <ph name="PERMISSION" /> un vēl <ph name="COUNT" /></translation> <translation id="8413385045638830869">Vispirms jautāt (ieteicams)</translation> +<translation id="8416730306157376817"><ph name="BATTERY_PERCENTAGE" />% (futrālis)</translation> <translation id="8417548266957501132">Vecāku parole</translation> <translation id="8418445294933751433">Rādīt kā cilni</translation> <translation id="8419098111404128271">Vaicājuma “<ph name="SEARCH_TEXT" />” meklēšanas rezultāti</translation> @@ -7444,6 +7467,7 @@ Saskaņā ar domēna <ph name="DOMAIN" /> prasībām viedkartei ir jābūt ievietotai.}one{Jūsu <ph name="DEVICE_TYPE" /> ierīce tiks automātiski bloķēta pēc # sekundes. Saskaņā ar domēna <ph name="DOMAIN" /> prasībām viedkartei ir jābūt ievietotai.}other{Jūsu <ph name="DEVICE_TYPE" /> ierīce tiks automātiski bloķēta pēc # sekundēm. Saskaņā ar domēna <ph name="DOMAIN" /> prasībām viedkartei ir jābūt ievietotai.}}</translation> +<translation id="8777259617149177596">Futrāļa akumulatora uzlādes līmenis ir <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="8777628254805677039">saknes parole</translation> <translation id="8778328560035799409">Pašreizējie slēdžu piešķīrumi tiks notīrīti</translation> <translation id="8780123805589053431">Iegūt attēlu aprakstus no Google</translation> @@ -7802,6 +7826,7 @@ <translation id="9128335130883257666">Atvērt ievades metodes “<ph name="INPUT_METHOD_NAME" />” iestatījumu lapu</translation> <translation id="9128870381267983090">Izveidot savienojumu ar tīklu</translation> <translation id="9130015405878219958">Ievadīts nederīgs režīms.</translation> +<translation id="9130215884425927484"><ph name="DEVICE_INDEX" />. ierīce no <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, audioierīce.</translation> <translation id="9131487537093447019">Sūtīt ziņojumus uz Bluetooth ierīcēm un saņemt ziņojumus no tām.</translation> <translation id="9134066738478820307">Atļaut vietnēm izmantot identifikatorus, lai atskaņotu aizsargātu saturu</translation> <translation id="913411432238655354">Atjaunot lietotnes palaišanas laikā</translation> @@ -7845,6 +7870,7 @@ <translation id="916964310188958970">Kāpēc tiek rādīts šis ieteikums?</translation> <translation id="9170048603158555829">Thunderbolt</translation> <translation id="9170061643796692986">Pašreizējais redzamības iestatījums ir “Visas kontaktpersonas”.</translation> +<translation id="9170199455952690202">Labās austiņas akumulatora uzlādes līmenis ir <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="9170848237812810038">&Atsaukt</translation> <translation id="9170884462774788842">Cita datorā instalēta programma ir izraisījusi tāda motīva pievienošanu, kas var ietekmēt pārlūkprogrammas Chrome darbību.</translation> <translation id="917350715406657904">Ir sasniegts laika ierobežojums, ko jūsu vecāki iestatīja lietotnes <ph name="APP_NAME" /> izmantošanai. Rīt varēsiet to izmantot <ph name="TIME_LIMIT" />.</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb index ea6fe9f1..37c2b10 100644 --- a/chrome/app/resources/generated_resources_or.xtb +++ b/chrome/app/resources/generated_resources_or.xtb
@@ -400,6 +400,7 @@ <translation id="1418954524306642206">ଆପଣଙ୍କ ପ୍ରିଣ୍ଟର୍ PPD ନିର୍ଦ୍ଦିଷ୍ଟ କରିବାକୁ ବ୍ରାଉଜ୍ କରନ୍ତୁ</translation> <translation id="1420834118113404499">ମେଡିଆ ଲାଇସେନ୍ସ</translation> <translation id="1420920093772172268">ପେୟାରିଂକୁ ଅନୁମତି ଦେବା ପାଇଁ <ph name="TURN_ON_BLUETOOTH_LINK" /></translation> +<translation id="1421934779300263861">Googleକୁ ସ୍ୱଚାଳିତ ଭାବେ କ୍ରାସ ରିପୋର୍ଟଗୁଡ଼ିକ ସମେତ ଡାଏଗ୍ନୋଷ୍ଟିକ ଓ ବ୍ୟବହାର ଡାଟା ପଠାଇ Chrome ଏବଂ ChromeOS ଫିଚର ଓ ପରଫରମାନ୍ସକୁ ଉନ୍ନତ କରିବାରେ ସାହାଯ୍ୟ କରନ୍ତୁ। କିଛି ଏକତ୍ରିତ ଡାଟା Android ଆପ ଏବଂ Google ପାର୍ଟନରଗୁଡ଼ିକୁ ମଧ୍ୟ ସାହାଯ୍ୟ କରିବ। ଯଦି ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟ ପାଇଁ ୱେବ ଓ ଆପ କାର୍ଯ୍ୟକଳାପ ସେଟିଂ ଚାଲୁ ଅଛି, ତେବେ ଆପଣଙ୍କ Android ଡାଟା ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟରେ ସେଭ କରାଯାଇପାରେ।</translation> <translation id="1422159345171879700">ଅସୁରକ୍ଷିତ ସ୍କ୍ରିପ୍ଟ ଲୋଡ୍ କରନ୍ତୁ</translation> <translation id="1423716227250567100">ଏହି କାର୍ଯ୍ୟ: <ph name="LINE_BREAKS" /> @@ -625,6 +626,8 @@ <translation id="163309982320328737">ପ୍ରାରମ୍ଭିକ ଅକ୍ଷରର ଚଉଡ଼ା ପୂର୍ଣ୍ଣ ଅଛି</translation> <translation id="1633947793238301227">Google Assistant ଅକ୍ଷମ କରନ୍ତୁ</translation> <translation id="1634783886312010422"><ph name="WEBSITE" />ରେ ଆପଣ ପୂର୍ବରୁ ଏହି ପାସୱାର୍ଡ ପରିବର୍ତ୍ତନ କରିସାରିଛନ୍ତି?</translation> +<translation id="163712950892155760"><ph name="BEGIN_PARAGRAPH1" />ଯୋଗାଯୋଗ, ମେସେଜ ଏବଂ ଫଟୋଗୁଡ଼ିକ ପରି ଡାଟା ସମେତ, ଏକ ଆପ ଦ୍ୱାରା ସେଭ କରାଯାଇଥିବା (ଡେଭେଲପର ସେଟିଂସ ଆଧାରରେ) ଯେ କୌଣସି ଡାଟା ଆପ ଡାଟା ହୋଇପାରେ। ବ୍ୟାକଅପ ଡାଟାକୁ ଆପଣଙ୍କ Drive ଷ୍ଟୋରେଜ କୋଟାରେ ଗଣନା କରାଯିବ ନାହିଁ।<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />ଆପଣ ସେଟିଂସରେ ଏହି ସେବାକୁ ବନ୍ଦ କରିପାରିବେ।<ph name="END_PARAGRAPH2" /></translation> <translation id="1637224376458524414">ଆପଣଙ୍କର iPhoneରେ ଏହି ବୁକ୍ମାର୍କ ପ୍ରାପ୍ତ କରନ୍ତୁ</translation> <translation id="1637350598157233081">ଏହି ଡିଭାଇସରେ ଆପଣଙ୍କ ପାସୱାର୍ଡ ସେଭ୍ କରାଯାଇଛି</translation> <translation id="1637765355341780467">ଆପଣଙ୍କର ପ୍ରୋଫାଇଲ୍ ଖୋଲିବା ସମୟରେ କିଛି ତ୍ରୁଟି ହୋଇଛି। କିଛି ବୈଶିଷ୍ଟ୍ୟ ଉପଲବ୍ଧ ନଥାଇପାରେ।</translation> @@ -755,6 +758,7 @@ <translation id="1768212860412467516"><ph name="EXPERIMENT_NAME" /> ପାଇଁ ମତାମତ ପଠାନ୍ତୁ।</translation> <translation id="1768278914020124551">ଓହୋଃ! ଲଗ୍ଅନ୍ ସର୍ଭର୍କୁ ଯୋଗାଯୋଗ କରିବାରେ ଏକ ସମସ୍ୟା ହେଲା। ଦୟାକରି ଆପଣଙ୍କ ନେଟ୍ୱର୍କ ସଂଯୋଗ ଏବଂ ଡୋମେନ୍ ନାମ ଯାଞ୍ଚ କରନ୍ତୁ ଏବଂ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation> <translation id="1769104665586091481">ନୂତନ &ୱିଣ୍ଡୋରେ ଲିଙ୍କ୍ଗୁଡ଼ିକ ଖୋଲନ୍ତୁ</translation> +<translation id="177053719077591686">Google Driveରେ Android ଆପଗୁଡ଼ିକର ବ୍ୟାକ ଅପ ନିଅନ୍ତୁ।</translation> <translation id="177336675152937177">ହୋଷ୍ଟ କରାଯାଇଥିବା ଆପ୍ ଡାଟା</translation> <translation id="1775706469381199282">JavaScript ବ୍ୟବହାର କରିବା ପାଇଁ ସାଇଟଗୁଡ଼ିକୁ ଅନୁମତି ଦିଅନ୍ତୁ ନାହିଁ</translation> <translation id="1776712937009046120">ଉପଯୋଗକର୍ତ୍ତାଙ୍କୁ ଯୋଗ କରନ୍ତୁ</translation> @@ -859,6 +863,7 @@ <translation id="186612162884103683">ଯାଞ୍ଚ କରାଯାଇଥିବା ଲୋକେସନ୍ଗୁଡ଼ିକରେ "<ph name="EXTENSION" />", ଛବି, ଭିଡିଓ ଓ ସାଉଣ୍ଡ ଫାଇଲ୍ଗୁଡ଼ିକୁ ପଢ଼ିପାରିବ ଓ ଲେଖିପାରିବ।</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> ଆପଣଙ୍କର ଇନ୍ଷ୍ଟଲେସନ୍ ପ୍ରକ୍ରିୟା ସମ୍ପୂର୍ଣ୍ଣ କରିବାକୁ ପ୍ରସ୍ତୁତ ଅଛି</translation> <translation id="1868553836791672080">Chromiumରେ ପାସୱାର୍ଡ ଯାଞ୍ଚ ଉପଲବ୍ଧ ନାହିଁ</translation> +<translation id="1868617395637139709">Android ଆପ ଏବଂ ସେବାଗୁଡ଼ିକ ପାଇଁ ଲୋକେସନ ବ୍ୟବହାର କରନ୍ତୁ।</translation> <translation id="1869433484041798909">ବୁକମାର୍କ ବଟନ୍</translation> <translation id="1871098866036088250">Chrome ବ୍ରାଉଜରରେ ଖୋଲନ୍ତୁ</translation> <translation id="187145082678092583">କମ୍ ଆପ୍</translation> @@ -1317,6 +1322,7 @@ <translation id="2332192922827071008">ଅଗ୍ରାଧିକାରଗୁଡ଼ିକୁ ଖୋଲନ୍ତୁ</translation> <translation id="2332515770639153015">ଉନ୍ନତ ସୁରକ୍ଷିତ ବ୍ରାଉଜିଂ ଚାଲୁ ଅଛି</translation> <translation id="2332742915001411729">ଡିଫଲ୍ଟକୁ ରିସେଟ୍ କରନ୍ତୁ</translation> +<translation id="2332948465534020594">'ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ' ସକ୍ଷମ କରାଯାଇଛି</translation> <translation id="2335111415680198280">{0,plural, =1{#ଟି ୱିଣ୍ଡୋ ବନ୍ଦ କରନ୍ତୁ}other{#ଟି ୱିଣ୍ଡୋ ବନ୍ଦ କରନ୍ତୁ}}</translation> <translation id="2335122562899522968">ଏହି ପୃଷ୍ଠା କୁକୀଗୁଡ଼ିକ ସେଟ୍ କରେ।</translation> <translation id="2336228925368920074">ସମସ୍ତ ଟାବ୍କୁ ବୁକ୍ମାର୍କ କରନ୍ତୁ...</translation> @@ -1462,6 +1468,7 @@ <translation id="2484959914739448251">ଆପଣଙ୍କର ସିଙ୍କ ହୋଇଥିବା ସମସ୍ତ ଡିଭାଇସ୍ ଏବଂ ଆପଣଙ୍କର Google ଆକାଉଣ୍ଟରୁ ବ୍ରାଉଜିଂ ଡାଟା ଖାଲି କରିବା ପାଇଁ, <ph name="BEGIN_LINK" />ଆପଣଙ୍କର ପାସଫ୍ରେଜ୍ ଲେଖନ୍ତୁ<ph name="END_LINK" />।</translation> <translation id="2485394160472549611">ଆପଣଙ୍କ ପାଇଁ ଶ୍ରେଷ୍ଠ ପସନ୍ଦଗୁଡ଼ିକ</translation> <translation id="2485422356828889247">ଅନ୍ଇନ୍ଷ୍ଟଲ୍ କରନ୍ତୁ</translation> +<translation id="2485681265915754872">Google Play ସେବାର ସର୍ତ୍ତାବଳୀ</translation> <translation id="2487067538648443797">ନୂଆ ବୁକ୍ମାର୍କ ଯୋଗ କରନ୍ତୁ</translation> <translation id="2487268545026948104">ଆପଣଙ୍କର ଡାଟା ରିଷ୍ଟୋର୍ କରିବା ପାଇଁ, ଇଣ୍ଟର୍ନେଟ୍ ସଂଯୋଗ କରନ୍ତୁ</translation> <translation id="2489686758589235262">ଅଧିକ 2ଟି ସ୍ୱିଚ ଆସାଇନ କରନ୍ତୁ</translation> @@ -2127,6 +2134,7 @@ <translation id="3162899666601560689">ଆପଣଙ୍କୁ ସାଇନ୍ ଇନ୍ ରଖିବା କିମ୍ବା ଆପଣଙ୍କ ସପିଂ କାର୍ଟରେ ଥିବା ଆଇଟମଗୁଡ଼ିକୁ ମନେରଖିବା ପରି ଆପଣଙ୍କ ବ୍ରାଉଜିଂ ଅନୁଭୂତିକୁ ଉନ୍ନତ କରିବା ନିମନ୍ତେ ସାଇଟଗୁଡ଼ିକ କୁକୀଗୁଡ଼ିକୁ ବ୍ୟବହାର କରିପାରିବ</translation> <translation id="3163201441334626963">ଭେଣ୍ଡର <ph name="VENDOR_ID" />ରୁ ଅଜଣା ଉତ୍ପାଦ <ph name="PRODUCT_ID" /></translation> <translation id="3163254451837720982">ନିମ୍ନୋକ୍ତ ସେବାଗୁଡ଼ିକ ଆପଣଙ୍କ ଡାଟାକୁ ନିରାପଦ ଏବଂ ସୁରକ୍ଷିତ ରଖିବାରେ ସାହାଯ୍ୟ କରିଥାଏ। ଆପଣ ଯେ କୌଣସି ସମୟରେ ଏହି ଫିଚରଗୁଡ଼ିକୁ ବନ୍ଦ କରିପାରିବେ।</translation> +<translation id="3163511056918491211">ଯେ କୌଣସି ସମୟରେ ସହଜରେ ଆପଣଙ୍କ ଡାଟାକୁ ରିଷ୍ଟୋର କରନ୍ତୁ କିମ୍ବା ଡିଭାଇସଗୁଡ଼ିକୁ ସ୍ୱିଚ କରନ୍ତୁ। ଆପଣଙ୍କ ବ୍ୟାକଅପଗୁଡ଼ିକୁ Googleରେ ଅପଲୋଡ କରାଯାଇଛି ଏବଂ ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟ ପାସୱାର୍ଡକୁ ବ୍ୟବହାର କରି ଏନକ୍ରିପ୍ଟ କରାଯାଇଛି।</translation> <translation id="3164329792803560526"><ph name="APP_NAME" />ସହ ଏହି ଟାବ୍କୁ ସେୟାର୍ କରୁଛନ୍ତି</translation> <translation id="3165390001037658081">କିଛି ବାହକ ଏହି ବୈଶିଷ୍ଟ୍ୟକୁ ବ୍ଲକ୍ କରିପାରନ୍ତି।</translation> <translation id="316652501498554287">G Suite for Education ଆକାଉଣ୍ଟଗୁଡ଼ିକ</translation> @@ -2684,6 +2692,7 @@ <translation id="3771290962915251154">ବାପାମା ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ ଚାଲୁ ଥିବା ଯୋଗୁଁ ଏହି ସେଟିଂସକୁ ଅକ୍ଷମ କରାଯାଇଛି</translation> <translation id="3771294271822695279">ଭିଡିଓ ଫାଇଲ୍ଗୁଡ଼ିକ</translation> <translation id="3771851622616482156">ଖୋଲାଥିବା ଟାବଗୁଡ଼ିକ ସମେତ, ଆପଣ ଏହି ସାଇଟରୁ ସାଇନ ଆଉଟ ହୋଇଯିବେ</translation> +<translation id="3772046291955677288">ମୁଁ <ph name="BEGIN_LINK1" />Google ସେବାର ସର୍ତ୍ତାବଳୀ<ph name="END_LINK1" />, <ph name="BEGIN_LINK2" />Chrome ଏବଂ ChromeOS ଅତିରିକ୍ତ ସେବାର ସର୍ତ୍ତାବଳୀ<ph name="END_LINK2" />କୁ ପଢ଼ିଛି ଓ ସେଥିରେ ସମ୍ମତ ହୋଇଛି।</translation> <translation id="3775432569830822555">SSL ସର୍ଭର୍ ସାର୍ଟିଫିକେଟ୍</translation> <translation id="3775705724665058594">ଆପଣଙ୍କର ଡିଭାଇସ୍ଗୁଡ଼ିକୁ ପଠାନ୍ତୁ</translation> <translation id="3776508619697147021">ସାଇଟଗୁଡ଼ିକ ଏକାଧିକ ଫାଇଲକୁ ସ୍ୱଚାଳିତ ଭାବେ ଡାଉନଲୋଡ୍ କରିବାକୁ ପଚାରିପାରିବ</translation> @@ -2716,6 +2725,7 @@ <translation id="3798449238516105146">ସଂସ୍କରଣ</translation> <translation id="3799128412641261490">ଆକ୍ସେସ୍ ସେଟିଂସକୁ ସ୍ୱିଚ୍ କରନ୍ତୁ</translation> <translation id="3800806661949714323">ସବୁ ଦେଖାନ୍ତୁ (ସୁପାରିଶ୍ କରାଯାଇଛି)</translation> +<translation id="3800828618615365228">Google Chrome ଏବଂ ChromeOSର ଅତିରିକ୍ତ ସର୍ତ୍ତାବଳୀ</translation> <translation id="380329542618494757">ନାମ</translation> <translation id="3803345858388753269">ଭିଡିଓ ଗୁଣବତ୍ତା</translation> <translation id="380408572480438692">କାର୍ଯ୍ୟଦକ୍ଷତା ଡାଟା ସଂଗ୍ରହ ସକ୍ଷମ କରିବା ଦ୍ୱାରା ସମୟାନୁଯାୟୀ Googleକୁ ସିଷ୍ଟମ୍ ଉନ୍ନତ କରିବାରେ ସାହାଯ୍ୟ କରିବ। ଯେପର୍ଯ୍ୟନ୍ତ ଆପଣ କୌଣସି ମତାମତ ରିପୋର୍ଟ (Alt-Shift-I) ଦାଖଲ କରିନାହିଁନ୍ତି ଏବଂ କାର୍ଯ୍ୟଦକ୍ଷତା ଡାଟା ଅନ୍ତର୍ଭୁକ୍ତ କରିନାହିଁନ୍ତି, ସେପର୍ଯ୍ୟନ୍ତ କୌଣସି ଡାଟା ପଠାଯାଏ ନାହିଁ। ଯେକୌଣସି ସମୟରେ ସଂଗ୍ରହଗୁଡ଼ିକୁ ଅକ୍ଷମ କରିବାକୁ ଆପଣ ଏହି ସ୍କ୍ରିନ୍କୁ ଫେରିପାରିବେ।</translation> @@ -2748,6 +2758,7 @@ <translation id="3826440694796503677">ଆପଣଙ୍କର ଆଡ୍ମିନିଷ୍ଟ୍ରେଟର୍ ଅଧିକ Google ଆକାଉଣ୍ଟ ଯୋଗ କରିବାକୁ ଅକ୍ଷମ କରିଛନ୍ତି</translation> <translation id="3827774300009121996">&ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନ୍</translation> <translation id="3828029223314399057">ବୁକ୍ମାର୍କଗୁଡ଼ିକ ଖୋଜନ୍ତୁ</translation> +<translation id="3828953470056652895">ମୁଁ <ph name="BEGIN_LINK1" />Google ସେବାର ସର୍ତ୍ତାବଳୀ<ph name="END_LINK1" />, <ph name="BEGIN_LINK2" />Chrome ଏବଂ ChromeOS ଅତିରିକ୍ତ ସେବାର ସର୍ତ୍ତାବଳୀ<ph name="END_LINK2" /> ଏବଂ <ph name="BEGIN_LINK3" />Play ସେବାର ସର୍ତ୍ତାବଳୀ<ph name="END_LINK3" />କୁ ପଢ଼ିଛି ଓ ସେଥିରେ ସମ୍ମତ ହୋଇଛି।</translation> <translation id="3829765597456725595">SMB ଫାଇଲ୍ ସେୟାର୍</translation> <translation id="3830654885961023588">{NUM_EXTENSIONS,plural, =1{ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟର ପୁଣି 1ଟି ସମ୍ଭାବ୍ୟ କ୍ଷତିକାରକ ଏକ୍ସଟେନସନକୁ ଚାଲୁ କରିଛନ୍ତି}other{ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟର ପୁଣି {NUM_EXTENSIONS}ଟି ସମ୍ଭାବ୍ୟ କ୍ଷତିକାରକ ଏକ୍ସଟେନସନକୁ ଚାଲୁ କରିଛନ୍ତି}}</translation> <translation id="3831436149286513437">Google Drive ସନ୍ଧାନ ପ୍ରସ୍ତାବଗୁଡ଼ିକ</translation> @@ -2925,6 +2936,9 @@ <translation id="3984431586879874039">ଏହି ସାଇଟ୍କୁ ଆପଣଙ୍କର ସୁରକ୍ଷା କୀ' ଦେଖିବା ପାଇଁ ଅନୁମତି ଦେବେ?</translation> <translation id="398477389655464998">ହାଇଲାଇଟ୍ କରାଯାଇଥିବା ଟେକ୍ସଟର ଲିଙ୍କକୁ କପି କରନ୍ତୁ</translation> <translation id="3984862166739904574">କ୍ୱିକ୍ ଉତ୍ତରଗୁଡ଼ିକର ସଂଜ୍ଞା</translation> +<translation id="3986164906089840270"><ph name="BEGIN_PARAGRAPH1" />ChromeOS ଡିଭାଇସଗୁଡ଼ିକୁ ସ୍ୱଚାଳିତ ଭାବେ ରିପୋର୍ଟଗୁଡ଼ିକ ପଠାଇବାକୁ ଅନୁମତି ଦେବା ଫଳରେ, ChromeOSରେ କେଉଁ ସମସ୍ୟାକୁ ଠିକ୍ କରାଯିବ ଏବଂ ଏଥିରେ କଣ ଉନ୍ନତି କରାଯିବ, ତାହାକୁ ପ୍ରାଥମିକତା ଦେବାରେ ଏହା ଆମକୁ ସାହାଯ୍ୟ କରେ। ଏହି ରିପୋର୍ଟଗୁଡ଼ିକରେ କେତେବେଳେ ChromeOS କ୍ରାସ ହୁଏ, କେଉଁ ଫିଚରଗୁଡ଼ିକୁ ବ୍ୟବହାର କରାଯାଇଛି ଏବଂ ସାଧାରଣତଃ କେତେ ମେମୋରୀ ବ୍ୟବହୃତ ହୋଇଛି ପରି ସୂଚନା ଅନ୍ତର୍ଭୁକ୍ତ ହୋଇପାରେ।<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />ଆପଣ ଆପଣଙ୍କ Chrome ଡିଭାଇସ ସେଟିଂସରେ ଯେ କୌଣସି ସମୟରେ ଏହି ରିପୋର୍ଟଗୁଡ଼ିକୁ ଅନୁମତି ଦେବା ଆରମ୍ଭ କିମ୍ବା ବନ୍ଦ କରିପାରିବେ। ଯଦି ଆପଣ ଜଣେ ଡୋମେନ ଆଡମିନିଷ୍ଟ୍ରେଟର ଅଟନ୍ତି, ତେବେ ଆପଣ ଆଡମିନ କନସୋଲରେ ଏହି ସେଟିଂକୁ ପରିବର୍ତ୍ତନ କରିପାରିବେ।<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" />ଏହି ଫିଚରକୁ ବନ୍ଦ କରିବା ଫଳରେ ଏହା ସିଷ୍ଟମ ଅପଡେଟ ଓ ସୁରକ୍ଷା ପରି ଆପଣଙ୍କ ଡିଭାଇସର ଅତ୍ୟାବଶ୍ୟକ ସେବା ପାଇଁ ଆବଶ୍ୟକୀୟ ସୂଚନା ପଠାଇବା କ୍ଷମତାକୁ ପ୍ରଭାବିତ କରେ ନାହିଁ।<ph name="END_PARAGRAPH3" /></translation> <translation id="3987544746655539083">ଏହି ସାଇଟକୁ ଆପଣଙ୍କ ଲୋକେସନ୍ ଆକ୍ସେସ୍ କରିବାରୁ ବ୍ଲକ୍ କରିବା ଜାରି ରଖନ୍ତୁ</translation> <translation id="3987938432087324095">କ୍ଷମା କରିବେ, ତାହା ବୁଝିହେଲା ନାହିଁ।</translation> <translation id="3987993985790029246">ଲିଙ୍କ୍ କପି କରନ୍ତୁ</translation> @@ -3091,6 +3105,7 @@ <translation id="4184885522552335684">ଏକ ଡିସ୍ପ୍ଲେ ଘୁଞ୍ଚାଇବାକୁ ଡ୍ରାଗ୍ କରନ୍ତୁ</translation> <translation id="4187424053537113647"><ph name="APP_NAME" />କୁ ସେଟଅପ୍ କରାଯାଉଛି...</translation> <translation id="4190828427319282529">କୀବୋର୍ଡ ଫୋକସ୍ ହାଇଲାଇଟ୍ କରନ୍ତୁ</translation> +<translation id="4193836101014293726">ଏହି ପ୍ରୋଫାଇଲକୁ ଡିଲିଟ କରାଯାଇପାରିବ ନାହିଁ</translation> <translation id="419427585139779713">ଥରକେ ଗୋଟିଏ ଶବ୍ଦାଂଶ ଇନପୁଟ୍ କରନ୍ତୁ</translation> <translation id="4194570336751258953">'କ୍ଲିକ୍ ପାଇଁ ଟାପ୍ କରନ୍ତୁ' ବଟନ୍କୁ ସକ୍ଷମ କରନ୍ତୁ</translation> <translation id="4195643157523330669">ନୂତନ ଟ୍ୟାବରେ ଖୋଲନ୍ତୁ</translation> @@ -3181,12 +3196,16 @@ <translation id="4297219207642690536">ରିର୍ଷ୍ଟାଟ୍ ଏବଂ ରିସେଟ୍ କରନ୍ତୁ</translation> <translation id="4297813521149011456">ଡିସପ୍ଲେର ଘୂର୍ଣ୍ଣନ</translation> <translation id="4299022904780065004">ନୂଆ &ଇନକଗ୍ନିଟୋ ୱିଣ୍ଡୋ</translation> +<translation id="4301011537467809690"><ph name="BEGIN_PARAGRAPH1" />ChromeOS ଡିଭାଇସଗୁଡ଼ିକୁ ସ୍ୱଚାଳିତ ଭାବେ ରିପୋର୍ଟଗୁଡ଼ିକ ପଠାଇବାକୁ ଅନୁମତି ଦେବା ଫଳରେ, ChromeOSରେ କେଉଁ ସମସ୍ୟାକୁ ଠିକ୍ କରାଯିବ ଏବଂ ଏଥିରେ କଣ ଉନ୍ନତି କରାଯିବ, ତାହାକୁ ପ୍ରାଥମିକତା ଦେବାରେ ଏହା ଆମକୁ ସାହାଯ୍ୟ କରେ। ଏହି ରିପୋର୍ଟଗୁଡ଼ିକରେ କେତେବେଳେ ChromeOS କ୍ରାସ ହୁଏ, କେଉଁ ଫିଚରଗୁଡ଼ିକୁ ବ୍ୟବହାର କରାଯାଇଛି ଏବଂ ସାଧାରଣତଃ କେତେ ମେମୋରୀ ବ୍ୟବହୃତ ହୋଇଛି ପରି ସୂଚନା ଅନ୍ତର୍ଭୁକ୍ତ ହୋଇପାରେ।<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />ଆପଣ ଆପଣଙ୍କ ପିଲାର ChromeOS ଡିଭାଇସ ସେଟିଂସରେ ଯେ କୌଣସି ସମୟରେ ଏହି ରିପୋର୍ଟଗୁଡ଼ିକୁ ଅନୁମତି ଦେବା ଆରମ୍ଭ କିମ୍ବା ବନ୍ଦ କରିପାରିବେ। ଯଦି ଆପଣ ଜଣେ ଡୋମେନ ଆଡମିନିଷ୍ଟ୍ରେଟର ଅଟନ୍ତି, ତେବେ ଆପଣ ଆଡମିନ କନସୋଲରେ ଏହି ସେଟିଂକୁ ପରିବର୍ତ୍ତନ କରିପାରିବେ।<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" />ଏହି ଫିଚରକୁ ବନ୍ଦ କରିବା ଫଳରେ ଏହା ସିଷ୍ଟମ ଅପଡେଟ ଓ ସୁରକ୍ଷା ପରି ଏହି ଡିଭାଇସର ଅତ୍ୟାବଶ୍ୟକ ସେବାଗୁଡ଼ିକ ପାଇଁ ଆବଶ୍ୟକୀୟ ସୂଚନା ପଠାଇବା କ୍ଷମତାକୁ ପ୍ରଭାବିତ କରେ ନାହିଁ।<ph name="END_PARAGRAPH3" /></translation> <translation id="4301671483919369635">ଫାଇଲ୍ଗୁଡ଼ିକୁ ଏଡିଟ୍ କରିବା ପାଇଁ ଏହି ପୃଷ୍ଠାକୁ ଅନୁମତି ଅଛି</translation> <translation id="4303079906735388947">ଆପଣଙ୍କର ସୁରକ୍ଷା କୀ ପାଇଁ ଗୋଟିଏ ନୂଆ ପିନ୍ ସେଟ୍ ଅପ୍ କରନ୍ତୁ</translation> <translation id="4305402730127028764"><ph name="DEVICE_NAME" />କୁ କପି କରନ୍ତୁ</translation> <translation id="4305817255990598646">ସ୍ୱିଚ୍ କରନ୍ତୁ</translation> <translation id="4306119971288449206">"<ph name="CONTENT_TYPE" />" ବିଷୟବସ୍ତୁ-ପ୍ରକାର ସହିତ ହିଁ ଆପ୍ଗୁଡ଼ିକୁ ସେବା ଦିଆଯିବା ଦରକାର</translation> <translation id="4307992518367153382">ଆଧାରଗୁଡିକ</translation> +<translation id="4309165024397827958">ଲୋକେସନ ଅନୁମତି ଥିବା Android ଆପ ଓ ସେବାଗୁଡ଼ିକୁ ଆପଣଙ୍କ ଡିଭାଇସର ଲୋକେସନକୁ ବ୍ୟବହାର କରିବା ପାଇଁ ଅନୁମତି ଦିଅନ୍ତୁ। ସମୟ ସମୟରେ Google ଲୋକେସନ ଡାଟା ସଂଗ୍ରହ କରିପାରେ ଏବଂ ଏକ ବେନାମୀ ଉପାୟରେ ଏହି ଡାଟାକୁ ଲୋକେସନ ସଠିକତା ତଥା ଲୋକେସନ-ଆଧାରିତ ସେବାଗୁଡ଼ିକରେ ଉନ୍ନତି ଆଣିବାକୁ ବ୍ୟବହାର କରିପାରେ।</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K ଲାଇଭ୍)</translation> <translation id="4310139701823742692">ଫାଇଲ୍ର ଫର୍ମାଟ୍ ଭୁଲ୍ ଅଛି। PPD ଫାଇଲ୍ ଯାଞ୍ଚ କରି ପୁଣିଥରେ ଚେଷ୍ଟା କରନ୍ତୁ।</translation> <translation id="431076611119798497">&ବିବରଣୀ</translation> @@ -3266,6 +3285,7 @@ <translation id="4400632832271803360">ଶୀର୍ଷ-ଧାଡିରେ ଥିବା କୀଗୁଡ଼ିକର ଆଚରଣ ସ୍ୱିଚ୍ କରିବାକୁ ଲଞ୍ଚର୍ କୀ ଧରି ରଖନ୍ତୁ</translation> <translation id="4400963414856942668">ଏକ ଟାବ୍କୁ ବୁକ୍ମାର୍କ କରିବା ପାଇଁ ଆପଣ ତାରା ଚିହ୍ନରେ କ୍ଲିକ୍ କରିପାରିବେ</translation> <translation id="4402755511846832236">ଆପଣ କେତେବେଳେ ସକ୍ରିୟ ଭାବେ ଏହି ଡିଭାଇସକୁ ବ୍ୟବହାର କରୁଛନ୍ତି ତାହା ଜାଣିବାରୁ ସାଇଟଗୁଡ଼ିକୁ ବ୍ଲକ୍ କରନ୍ତୁ</translation> +<translation id="4403266582403435904">ଯେ କୌଣସି ସମୟରେ ସହଜରେ ଡାଟାକୁ ରିଷ୍ଟୋର କରନ୍ତୁ କିମ୍ବା ଡିଭାଇସଗୁଡ଼ିକୁ ସ୍ୱିଚ କରନ୍ତୁ। ବ୍ୟାକଅପଗୁଡ଼ିକୁ Googleରେ ଅପଲୋଡ କରାଯାଇଛି ଏବଂ ଆପଣଙ୍କ ପିଲାର Google ଆକାଉଣ୍ଟ ପାସୱାର୍ଡ ବ୍ୟବହାର କରି ଏନକ୍ରିପ୍ଟ କରାଯାଇଛି।</translation> <translation id="4403775189117163360">ଏକ ଭିନ୍ନ ଫୋଲ୍ଡର୍ ବାଛନ୍ତୁ</translation> <translation id="4404136731284211429">ପୁଣି ସ୍କାନ୍ କରନ୍ତୁ</translation> <translation id="4404843640767531781"><ph name="APP_NAME" /> ଆପଣଙ୍କ ବାପାମାଙ୍କ ଦ୍ୱାରା ବ୍ଲକ୍ କରାଯାଇଛି। ଏହି ଆପ୍ ବ୍ୟବହାର କରିବା ପାଇଁ ଅନୁମତି ଦେବାକୁ ଆପଣଙ୍କ ବାପାମାଙ୍କୁ କୁହନ୍ତୁ।</translation> @@ -3603,6 +3623,7 @@ <translation id="4768332406694066911">ଆପଣଙ୍କ ପାଖରେ ଏହି ସଂଗଠନଗୁଡ଼ିକରୁ ସାର୍ଟିଫିକେଟ୍ଗୁଡ଼ିକ ଅଛି ଯାହା ଆପଣଙ୍କୁ ଚିହ୍ନଟ କରିଥାଏ</translation> <translation id="4770119228883592393">ଅନୁମତି ପାଇଁ ଅନୁରୋଧ କରାଯାଇଛି, ଉତ୍ତର ଦେବାକୁ ⌘ + Option + ଡାଉନ୍ ତୀର କୀ ଦବାନ୍ତୁ</translation> <translation id="4773112038801431077">Linux ଅପଗ୍ରେଡ୍ କରନ୍ତୁ</translation> +<translation id="4775142426314270551">Googleକୁ ସ୍ୱଚାଳିତ ଭାବେ କ୍ରାସ ରିପୋର୍ଟଗୁଡ଼ିକ ସମେତ ଡାଏଗ୍ନୋଷ୍ଟିକ ଓ ବ୍ୟବହାର ଡାଟା ପଠାଇ Chrome ଏବଂ ChromeOS ଫିଚର ଓ ପରଫରମାନ୍ସକୁ ଉନ୍ନତ କରିବାରେ ସାହାଯ୍ୟ କରନ୍ତୁ। କିଛି ଏକତ୍ରିତ ଡାଟା Android ଆପ ଏବଂ Google ପାର୍ଟନରଗୁଡ଼ିକୁ ମଧ୍ୟ ସାହାଯ୍ୟ କରିବ। ଯଦି ଆପଣଙ୍କ ପିଲାର Google ଆକାଉଣ୍ଟ ପାଇଁ ୱେବ ଓ ଆପ କାର୍ଯ୍ୟକଳାପ ସେଟିଂ ଚାଲୁ ଅଛି, ତେବେ ଆପଣଙ୍କ ପିଲାର Android ଡାଟା ତା'ର Google ଆକାଉଣ୍ଟରେ ସେଭ କରାଯାଇପାରେ।</translation> <translation id="477647109558161443">ଏକ ଡେସ୍କଟପ୍ ସର୍ଟକଟ୍ ତିଆରି କରନ୍ତୁ</translation> <translation id="4776594120007763294">ପରେ ପଢ଼ିବା ପାଇଁ ଏକ ପୃଷ୍ଠା ଯୋଗ କରିବାକୁ, ଏହି ବଟନରେ କ୍ଲିକ୍ କରନ୍ତୁ</translation> <translation id="4777458362738635055">ଏହି ଡିଭାଇସର ଅନ୍ୟ ଉପଯୋଗକର୍ତ୍ତାମାନେ ଏ ନେଟୱାର୍କକୁ ବ୍ୟବହାର କରିପାରିବେ</translation> @@ -3631,6 +3652,7 @@ <translation id="4801512016965057443">ମୋବାଇଲ୍ ଡାଟା ରୋମିଂକୁ ଅନୁମତି ଦିଅନ୍ତୁ</translation> <translation id="4804818685124855865">ବିଚ୍ଛିନ୍ନ କରନ୍ତୁ</translation> <translation id="4804827417948292437">ଆଭୋକାଡୋ</translation> +<translation id="4806457879608775995">ଏହି ସର୍ତ୍ତାବଳୀର ସମୀକ୍ଷା କରି ଆପଣଙ୍କ ଡାଟାକୁ ନିୟନ୍ତ୍ରଣ କରନ୍ତୁ</translation> <translation id="4807098396393229769">କାର୍ଡରେ ଥିବା ନାମ</translation> <translation id="4808024018088054533">Chrome ଆପଣଙ୍କ କମ୍ପ୍ୟୁଟରରେ କ୍ଷତିକାରକ ସଫ୍ଟୱେରକୁ ଖୋଜି ପାଇଲା ନାହିଁ • ଏବେ ଯାଞ୍ଚ କରାଯାଇଛି</translation> <translation id="4808667324955055115">ପପ୍-ଅପ୍ଗୁଡିକ ଅବରୋଧ ହୋଇଛି:</translation> @@ -3998,6 +4020,8 @@ <translation id="5192652123103143854">Chrome OS ଡିଭାଇସ ସୂଚନା, ଡିଭାଇସ ଡାଟା ପଢ଼ନ୍ତୁ ଏବଂ ଡାଏଗ୍ନୋଷ୍ଟିକ ଟେଷ୍ଟଗୁଡ଼ିକ ଚଲାନ୍ତୁ।</translation> <translation id="5193988420012215838">ଆପଣଙ୍କର କ୍ଲିପ୍ବୋର୍ଡକୁ କପି କରାଯାଇଛି</translation> <translation id="5194256020863090856">ଏହା କେବଳ ଇନକଗ୍ନିଟୋ ୱିଣ୍ଡୋଗୁଡ଼ିକୁ ପ୍ରଭାବିତ କରେ</translation> +<translation id="5195863934285556588"><ph name="BEGIN_PARAGRAPH1" />Googleର ଲୋକେସନ ସେବା, ଏହି ଡିଭାଇସର ଲୋକେସନ ଅନୁମାନ କରିବାରେ ସାହାଯ୍ୟ କରିବା ପାଇଁ ୱାଇ-ଫାଇ, ମୋବାଇଲ ନେଟୱାର୍କ ଓ ସେନ୍ସରଗୁଡ଼ିକ ପରି ସୋର୍ସଗୁଡ଼ିକୁ ବ୍ୟବହାର କରେ।<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />ଆପଣ ସେଟିଂସ > ଆପ୍ସ > Google Play Store > Android ପସନ୍ଦଗୁଡ଼ିକୁ ପରିଚାଳନା କରନ୍ତୁ > ସୁରକ୍ଷା ଓ ଲୋକେସନ > ଲୋକେସନକୁ ଯାଇ ଯେ କୌଣସି ସମୟରେ ଏହି ଡିଭାଇସରେ Android ଲୋକେସନକୁ ବନ୍ଦ କରିପାରିବେ। ଆପଣ ସେହି ସମାନ ମେନୁରେ "Google ଲୋକେସନ ସଠିକତା"କୁ ବନ୍ଦ କରି Android ଲୋକେସନ ପାଇଁ ୱାଇ-ଫାଇ, ମୋବାଇଲ ନେଟୱାର୍କ ଓ ସେନ୍ସରଗୁଡ଼ିକର ବ୍ୟବହାରକୁ ମଧ୍ୟ ବନ୍ଦ କରିପାରିବେ।<ph name="END_PARAGRAPH2" /></translation> <translation id="5197255632782567636">ଇଣ୍ଟର୍ନେଟ୍</translation> <translation id="5198430103906431024">ବ୍ୟବହାର ଏବଂ ଡାଏଗ୍ନୋଷ୍ଟିକ୍ ଡାଟା ପଠାନ୍ତୁ। ଏହି ଡିଭାଇସ୍ ବର୍ତ୍ତମାନ ସ୍ୱଚାଳିତ ରୂପେ ଡାଏଗ୍ନୋଷ୍ଟିକ୍, ଡିଭାଇସ୍ ଏବଂ ଆପ୍ ବ୍ୟବହାର ଡାଟା Googleକୁ ପଠାଉଛି। ସିଷ୍ଟମ୍ ଓ ଆପର ସ୍ଥିରତା ଏବଂ ଅନ୍ୟ ଉନ୍ନତିଗୁଡ଼ିକରେ ଏହା ସାହାଯ୍ୟ କରିବ। କିଛି ଏକତ୍ରିତ ଡାଟା Google ଆପ୍ ଓ Android ଡେଭଲପର୍ ପରି ଏହାର ପାର୍ଟନରଗୁଡ଼ିକୁ ମଧ୍ୟ ସାହାଯ୍ୟ କରିବ। ଯଦି ଆପଣଙ୍କର ଅତିରିକ୍ତ ୱେବ୍ ଓ ଆପ୍ କାର୍ଯ୍ୟକଳାପ ସେଟିଂ ଚାଲୁ ଅଛି, ତେବେ ଏହି ଡାଟା ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟରେ ସେଭ୍ ହୋଇପାରେ।</translation> <translation id="5199729219167945352">ପରୀକ୍ଷାଗୁଡ଼ିକ</translation> @@ -4126,6 +4150,7 @@ <translation id="5331069282670671859">ଆପଣଙ୍କ ପାଖରେ ଏହି ବର୍ଗ ପାଇଁ କୌଣସି ସାର୍ଟିଫିକେଟ୍ ନାହିଁ</translation> <translation id="5331425616433531170">"<ph name="CHROME_EXTENSION_NAME" />" ପେୟାର୍ କରିବାକୁ ଚାହୁଁଛି</translation> <translation id="5331975486040154427">USB-C ଡିଭାଇସ୍ (ବାମପଟ ପଛ ପୋର୍ଟ)</translation> +<translation id="5333896723098573627">ଆପଗୁଡ଼ିକୁ କାଢ଼ିବା ପାଇଁ, ସେଟିଂସ > ଆପ > Google Play Store > Android ପସନ୍ଦଗୁଡ଼ିକୁ ପରିଚାଳନା କରନ୍ତୁ > ଆପଗୁଡ଼ିକ କିମ୍ବା ଆପ୍ଲିକେସନ ପରିଚାଳକକୁ ଯାଆନ୍ତୁ। ତା'ପରେ, ଆପଣ ଅନଇନଷ୍ଟଲ କରିବାକୁ ଚାହୁଁଥିବା ଆପରେ ଟାପ କରନ୍ତୁ (ଆପଟିକୁ ଖୋଜିବା ପାଇଁ ଆପଣଙ୍କୁ ଡାହାଣ ବା ବାମକୁ ସ୍ଵାଇପ କରିବାକୁ ପଡ଼ିପାରେ)। ତା’ପରେ 'ଅନଇନଷ୍ଟଲ କରନ୍ତୁ' କିମ୍ବା ଅକ୍ଷମ କରନ୍ତୁ'ରେ ଟାପ କରନ୍ତୁ।</translation> <translation id="5334142896108694079">ସ୍କ୍ରିପ୍ଟ କେଚ୍</translation> <translation id="5336126339807372270">କୌଣସି ସାଇଟ୍କୁ USB ଡିଭାଇସ୍ଗୁଡ଼ିକୁ ଆକ୍ସେସ୍ କରିବା ପାଇଁ ଅନୁମତି ଦିଅନ୍ତୁ ନାହିଁ</translation> <translation id="5336688142483283574">ଆପଣଙ୍କର ଇତିହାସ ଏବଂ <ph name="SEARCH_ENGINE" /> କାର୍ଯ୍ୟକଳାପରୁ ମଧ୍ୟ ଏହି ପୃଷ୍ଠାଟିକୁ କାଢ଼ି ଦିଆଯିବ।</translation> @@ -4205,6 +4230,7 @@ <translation id="5425863515030416387">ସବୁ ଡିଭାଇସ୍ରେ ସହଜରେ ସାଇନ୍-ଇନ୍ କରନ୍ତୁ</translation> <translation id="5427278936122846523">ସର୍ବଦା ଅନୁବାଦ କରନ୍ତୁ</translation> <translation id="5427459444770871191">&ଘଣ୍ଟାକଣ୍ଟା ଦିଗରେ ଘୂରାନ୍ତୁ</translation> +<translation id="542750953150239272">ଜାରି ରଖି, ଏହି ଡିଭାଇସ ସମ୍ଭବତଃ ସେଲ୍ୟୁଲାର ଡାଟା ବ୍ୟବହାର କରି, Google, ଆପଣଙ୍କ କ୍ୟାରିଅର ଏବଂ ଆପଣଙ୍କ ଡିଭାଇସର ନିର୍ମାତାଙ୍କଠାରୁ, ଅପଡେଟ ଓ ଆପଗୁଡ଼ିକୁ ମଧ୍ୟ ସ୍ଵଚାଳିତ ଭାବେ ଡାଉନଲୋଡ ଏବଂ ଇନଷ୍ଟଲ କରିପାରିବ ବୋଲି ଆପଣ ସମ୍ମତ ହୁଅନ୍ତି। ଏହି ଆପଗୁଡ଼ିକ ମଧ୍ୟରୁ କିଛି ଆପ ଇନ-ଆପ କ୍ରୟଗୁଡ଼ିକ ଅଫର କରିପାରେ।</translation> <translation id="5428850089342283580"><ph name="ACCNAME_APP" /> (ଅପ୍ଡେଟ୍ ଉପଲବ୍ଧ ଅଛି)</translation> <translation id="5429373054983029602"><ph name="VISUAL_SEARCH_PROVIDER" /> ମାଧ୍ୟମରେ ଆପଣଙ୍କ ସ୍କ୍ରିନ୍ ସନ୍ଧାନ କରନ୍ତୁ</translation> <translation id="542948651837270806">ବିଶ୍ୱସ୍ତ ପ୍ଲାଟଫର୍ମ ମଡ୍ୟୁଲ୍ ଫାର୍ମୱେର୍ ପାଇଁ ଏକ ଅପଡେଟ୍ ଇନଷ୍ଟଲ୍ କରିବାର ଆବଶ୍ୟକତା ଅଛି। <ph name="TPM_FIRMWARE_UPDATE_LINK" /> ଦେଖନ୍ତୁ</translation> @@ -4248,6 +4274,7 @@ <translation id="5471768120198416576">ଆଜ୍ଞା ନମସ୍କାର! ମୁଁ ଆପଣଙ୍କ ଲେଖାକୁ ସ୍ପୀଚ୍ରେ ପରିବର୍ତ୍ତନ କରୁଥିବା ଭଏସ୍ ଅଟେ।</translation> <translation id="5472627187093107397">ଏହି ସାଇଟ୍ ପାଇଁ ପାସୱାର୍ଡଗୁଡ଼ିକ ସେଭ୍ କରନ୍ତୁ</translation> <translation id="5473075389972733037">IBM</translation> +<translation id="5473099001878321374">ଜାରି ରଖି, ଏହି ଡିଭାଇସ ସମ୍ଭବତଃ ସେଲ୍ୟୁଲାର ଡାଟା ବ୍ୟବହାର କରି, Google, ଆପଣଙ୍କ ପିଲାର କ୍ୟାରିଅର ଏବଂ ଏହି ଡିଭାଇସର ନିର୍ମାତାଙ୍କଠାରୁ, ଅପଡେଟ ଓ ଆପଗୁଡ଼ିକୁ ମଧ୍ୟ ସ୍ଵଚାଳିତ ଭାବେ ଡାଉନଲୋଡ ଏବଂ ଇନଷ୍ଟଲ କରିପାରିବ ବୋଲି ଆପଣ ସମ୍ମତ ହୁଅନ୍ତି। ଏହି ଆପଗୁଡ଼ିକ ମଧ୍ୟରୁ କିଛି ଆପ ଇନ-ଆପ କ୍ରୟଗୁଡ଼ିକ ଅଫର କରିପାରେ।</translation> <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PINରେ ଅତିକମରେ ଗୋଟିଏ ଅକ୍ଷର ରହିବା ଆବଶ୍ୟକ}other{PINରେ ଅତିକମରେ #ଟି ଅକ୍ଷର ରହିବା ଆବଶ୍ୟକ}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> ପାଇଁ ଆପଣଙ୍କୁ ବର୍ତ୍ତମାନ ୱାଇ-ଫାଇ ସହ ସଂଯୋଗ କରି ଏକ ଅପଡେଟ ଡାଉନଲୋଡ କରିବାର ଆବଶ୍ୟକତା ଅଛି। କିମ୍ବା, ଏକ ମିଟର ହୋଇଥିବା ସଂଯୋଗରୁ ଡାଉନଲୋଡ କରନ୍ତୁ (ଚାର୍ଜ ଲାଗୁ ହୋଇପାରେ)।</translation> <translation id="5481273127572794904">ଏକାଧିକ ଫାଇଲକୁ ସ୍ୱଚାଳିତ ଭାବେ ଡାଉନଲୋଡ୍ କରିବାକୁ ଅନୁମତି ଦିଆଯାଇନାହିଁ</translation> @@ -4426,6 +4453,10 @@ <translation id="5642508497713047">CRL ସ୍ୱାକ୍ଷରକାରୀ</translation> <translation id="5643321261065707929">ମିଟର ହୋଇଥିବା ନେଟୱାର୍କ</translation> <translation id="5643620609347735571">ଖାଲି କରନ୍ତୁ ଏବଂ ଜାରି ରଖନ୍ତୁ</translation> +<translation id="5644722238761632789"><ph name="BEGIN_PARAGRAPH1" />Googleକୁ ସ୍ୱଚାଳିତ ଭାବେ କ୍ରାସ ରିପୋର୍ଟଗୁଡ଼ିକ ସମେତ ଡାଏଗ୍ନୋଷ୍ଟିକ ଓ ବ୍ୟବହାର ଡାଟା ପଠାଇ Chrome ଏବଂ ChromeOS ଫିଚର ଓ ପରଫରମାନ୍ସକୁ ଉନ୍ନତ କରିବାରେ ସାହାଯ୍ୟ କରନ୍ତୁ।<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />ଆପଣ ଆପଣଙ୍କ ChromeOS ଡିଭାଇସ ସେଟିଂସରେ ଯେ କୌଣସି ସମୟରେ ଏହି ରିପୋର୍ଟଗୁଡ଼ିକୁ ଅନୁମତି ଦେବା ଆରମ୍ଭ କିମ୍ବା ବନ୍ଦ କରିପାରିବେ। ଯଦି ଆପଣ ଜଣେ ଡୋମେନ ଆଡମିନିଷ୍ଟ୍ରେଟର ଅଟନ୍ତି, ତେବେ ଆପଣ ଆଡମିନ କନସୋଲରେ ଏହି ସେଟିଂକୁ ପରିବର୍ତ୍ତନ କରିପାରିବେ।<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" />ଏହି ଫିଚରକୁ ବନ୍ଦ କରିବା ଫଳରେ ଏହା ସିଷ୍ଟମ ଅପଡେଟ ଓ ସୁରକ୍ଷା ପରି ଆପଣଙ୍କ ଡିଭାଇସର ଅତ୍ୟାବଶ୍ୟକ ସେବା ପାଇଁ ଆବଶ୍ୟକୀୟ ସୂଚନା ପଠାଇବା କ୍ଷମତାକୁ ପ୍ରଭାବିତ କରେ ନାହିଁ।<ph name="END_PARAGRAPH3" /> + <ph name="BEGIN_PARAGRAPH4" />ଯଦି ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟ ପାଇଁ ୱେବ ଓ ଆପ କାର୍ଯ୍ୟକଳାପ ସେଟିଂ ଚାଲୁ ଅଛି, ତେବେ ଆପଣଙ୍କ Android ଡାଟା ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟରେ ସେଭ କରାଯାଇପାରେ। ଆପଣ account.google.comରେ ଆପଣଙ୍କର ଡାଟା ଦେଖିପାରିବେ, ଏହାକୁ ଡିଲିଟ କରିପାରିବେ ଏବଂ ଆପଣଙ୍କ ଆକାଉଣ୍ଟ ସେଟିଂସକୁ ପରିବର୍ତ୍ତନ କରିପାରିବେ।<ph name="END_PARAGRAPH4" /></translation> <translation id="5646376287012673985">ଅବସ୍ଥାନ</translation> <translation id="5646558797914161501">ବ୍ୟବସାୟୀ</translation> <translation id="5648166631817621825">ବିଗତ 7 ଦିନ</translation> @@ -4786,6 +4817,10 @@ <translation id="6047632800149092791">ସିଙ୍କ୍ କାମ କରୁନାହିଁ। ସାଇନ୍ ଆଉଟ୍ କରି ପୁଣି ସାଇନ୍ ଇନ୍ କରିବାକୁ ଚେଷ୍ଟା କରନ୍ତୁ।</translation> <translation id="6049797270917061226">ଏହି ଫାଇଲ୍ ଦ୍ୱାରା ଆକ୍ରମଣକାରୀମାନେ ଆପଣଙ୍କ ବ୍ୟକ୍ତିଗତ ସୂଚନା ଚୋରି କରିପାରିବେ।</translation> <translation id="6051354611314852653">ଓହୋଃ! ଏହି ଡିଭାଇସ୍ ପାଇଁ API ଆକ୍ସେସ୍ ଅଧିକୃତ କରିବାରେ ସିଷ୍ଟମ୍ ବିଫଳ ହେଲା।</translation> +<translation id="6051638103735819069"><ph name="BEGIN_PARAGRAPH1" />ChromeOS ଡିଭାଇସଗୁଡ଼ିକୁ ସ୍ୱଚାଳିତ ଭାବେ ରିପୋର୍ଟଗୁଡ଼ିକ ପଠାଇବାକୁ ଅନୁମତି ଦେବା ଫଳରେ, ChromeOSରେ କେଉଁ ସମସ୍ୟାକୁ ଠିକ୍ କରାଯିବ ଏବଂ ଏଥିରେ କଣ ଉନ୍ନତି କରାଯିବ, ତାହାକୁ ପ୍ରାଥମିକତା ଦେବାରେ ଏହା ଆମକୁ ସାହାଯ୍ୟ କରେ। ଏହି ରିପୋର୍ଟଗୁଡ଼ିକରେ କେତେବେଳେ ChromeOS କ୍ରାସ ହୁଏ, କେଉଁ ଫିଚରଗୁଡ଼ିକୁ ବ୍ୟବହାର କରାଯାଇଛି, ସାଧାରଣତଃ କେତେ ମେମୋରୀ ବ୍ୟବହୃତ ହୋଇଛି ଏବଂ Android ଆପ ଡାଏଗ୍ନୋଷ୍ଟିକ ଓ ବ୍ୟବହୃତ ଡାଟା ପରି ସୂଚନା ଅନ୍ତର୍ଭୁକ୍ତ ହୋଇପାରେ। କିଛି ଏକତ୍ରିତ ଡାଟା Google ଆପ ଓ Android ଡେଭେଲପରମାନଙ୍କ ପରି ଏହାର ପାର୍ଟନରଗୁଡ଼ିକୁ ମଧ୍ୟ ସାହାଯ୍ୟ କରିବ।<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />ଆପଣ ଆପଣଙ୍କ ପିଲାର ChromeOS ଡିଭାଇସ ସେଟିଂସରେ ଯେ କୌଣସି ସମୟରେ ଏହି ରିପୋର୍ଟଗୁଡ଼ିକୁ ଅନୁମତି ଦେବା ଆରମ୍ଭ କିମ୍ବା ବନ୍ଦ କରିପାରିବେ। ଯଦି ଆପଣ ଜଣେ ଡୋମେନ ଆଡମିନିଷ୍ଟ୍ରେଟର ଅଟନ୍ତି, ତେବେ ଆପଣ ଆଡମିନ କନସୋଲରେ ଏହି ସେଟିଂକୁ ପରିବର୍ତ୍ତନ କରିପାରିବେ।<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" />ଏହି ଫିଚରକୁ ବନ୍ଦ କରିବା ଫଳରେ ଏହା ସିଷ୍ଟମ ଅପଡେଟ ଓ ସୁରକ୍ଷା ପରି ଏହି ଡିଭାଇସର ଅତ୍ୟାବଶ୍ୟକ ସେବାଗୁଡ଼ିକ ପାଇଁ ଆବଶ୍ୟକୀୟ ସୂଚନା ପଠାଇବା କ୍ଷମତାକୁ ପ୍ରଭାବିତ କରେ ନାହିଁ।<ph name="END_PARAGRAPH3" /> + <ph name="BEGIN_PARAGRAPH4" />ଯଦି ଆପଣଙ୍କ ପିଲାର Google ଆକାଉଣ୍ଟ ପାଇଁ ୱେବ ଓ ଆପ କାର୍ଯ୍ୟକଳାପ ସେଟିଂ ଚାଲୁ ଅଛି, ତେବେ ଆପଣଙ୍କ ପିଲାର ଡାଟାକୁ ତା'ର Google ଆକାଉଣ୍ଟରେ ସେଭ କରାଯାଇପାରେ। ଏହି ସେଟିଂସ ଏବଂ ସେଗୁଡ଼ିକୁ କିପରି ଆଡଜଷ୍ଟ କରାଯାଏ, ସେ ବିଷୟରେ families.google.comରେ ଅଧିକ ଜାଣନ୍ତୁ।<ph name="END_PARAGRAPH4" /></translation> <translation id="6052976518993719690">SSL ସାର୍ଟିଫିକେସନ୍ କର୍ତ୍ତୃପକ୍ଷ</translation> <translation id="6053401458108962351">&ବ୍ରାଉଜିଂ ଡାଟା ଖାଲି କରନ୍ତୁ...</translation> <translation id="6054284857788651331">ବର୍ତ୍ତମାନ ବନ୍ଦ କରାଯାଇଥିବା ଟାବ୍ ଗୋଷ୍ଠୀ</translation> @@ -5255,6 +5290,8 @@ <translation id="6545665334409411530">ପୁନରାବୃତ୍ତି ଦର</translation> <translation id="6545867563032584178">Mac ସିଷ୍ଟମ୍ ଅଗ୍ରାଧିକାରଗୁଡ଼ିକରେ ମାଇକ୍ରୋଫୋନ୍ ବନ୍ଦ କରାଯାଇଛି</translation> <translation id="6547354035488017500">ଅତିକମ୍ରେ 512 MB ଜାଗା ଖାଲି କରନ୍ତୁ ନଚେତ୍ ଆପଣଙ୍କର ଡିଭାଇସ୍ ପ୍ରତିକ୍ରିୟାରହିତ ହୋଇଯିବ। ଜାଗା ଖାଲି କରିବାକୁ, ଡିଭାଇସ୍ ଷ୍ଟୋରେଜ୍ରୁ ଫାଇଲ୍ ଡିଲିଟ୍ କରନ୍ତୁ।</translation> +<translation id="6547854317475115430"><ph name="BEGIN_PARAGRAPH1" />Googleର ଲୋକେସନ ସେବା, ଆପଣଙ୍କ ଡିଭାଇସର ଲୋକେସନ ଅନୁମାନ କରିବାରେ ସାହାଯ୍ୟ କରିବା ପାଇଁ ୱାଇ-ଫାଇ, ମୋବାଇଲ ନେଟୱାର୍କ ଓ ସେନ୍ସରଗୁଡ଼ିକ ପରି ସୋର୍ସଗୁଡ଼ିକୁ ବ୍ୟବହାର କରେ।<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />ଆପଣ ସେଟିଂସ > ଆପ > Google Play Store > Android ପସନ୍ଦଗୁଡ଼ିକକୁ ପରିଚାଳନା କରନ୍ତୁ > ସୁରକ୍ଷା ଓ ଲୋକେସନ > ଲୋକେସନକୁ ଯାଇ ଯେ କୌଣସି ସମୟରେ ଆପଣଙ୍କ ଡିଭାଇସରେ Android ଲୋକେସନକୁ ବନ୍ଦ କରିପାରିବେ। ଆପଣ ସେହି ସମାନ ମେନୁରେ "Google ଲୋକେସନ ସଠିକତା"କୁ ବନ୍ଦ କରି Android ଲୋକେସନ ପାଇଁ ୱାଇ-ଫାଇ, ମୋବାଇଲ ନେଟୱାର୍କ ଓ ସେନ୍ସରଗୁଡ଼ିକର ବ୍ୟବହାରକୁ ମଧ୍ୟ ବନ୍ଦ କରିପାରିବେ।<ph name="END_PARAGRAPH2" /></translation> <translation id="654871471440386944">କ୍ୟାରେଟ୍ ବ୍ରାଉଜିଂ ଚାଲୁ କରିବେ?</translation> <translation id="6549038875972762904">ପୁଣି ସେଟଅପ କରନ୍ତୁ</translation> <translation id="6550675742724504774">ବିକଳ୍ପଗୁଡ଼ିକ</translation> @@ -5439,6 +5476,7 @@ <translation id="6746124502594467657">ତଳକୁ ଚାଳନ କରନ୍ତୁ</translation> <translation id="674632704103926902">ଟାପ୍ କରି ଟାଣି ଆଣିବାକୁ ସକ୍ଷମ କରନ୍ତୁ</translation> <translation id="6748465660675848252">ହୁଏତ ଆପଣ ଆଗକୁ ବଢ଼ିପାରିବେ, କିନ୍ତୁ ଆପଣଙ୍କର ସିଙ୍କ୍ କରାଯାଇଥିବା ଡାଟା ଏବଂ ସେଟିଂସ୍ କେବଳ ରିଷ୍ଟୋର୍ କରାଯିବ। ସମସ୍ତ ସ୍ଥାନୀୟ ଡାଟା ଡିଲିଟ୍ ହୋଇଯିବ।</translation> +<translation id="6748980958975836188">ମୁଁ <ph name="BEGIN_LINK1" />Google ସେବାର ସର୍ତ୍ତାବଳୀ<ph name="END_LINK1" />, <ph name="BEGIN_LINK2" />Chrome ଏବଂ ChromeOS ଅତିରିକ୍ତ ସେବାର ସର୍ତ୍ତାବଳୀ<ph name="END_LINK2" />କୁ ପଢ଼ିଛି ଓ ସେଥିରେ ସମ୍ମତ ହୋଇଛି।</translation> <translation id="6750757184909117990">ସେଲ୍ୟୁଲାର୍ ଅକ୍ଷମ କରନ୍ତୁ</translation> <translation id="6750946710563435348">ଅନ୍ୟ ଉପଯୋଗକର୍ତ୍ତାନାମ ବ୍ୟବହାର କରନ୍ତୁ</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (ଇନ୍କଗ୍ନିଟୋ)</translation> @@ -5460,6 +5498,8 @@ <translation id="677965093459947883">ଅତି ଛୋଟ</translation> <translation id="6781005693196527806">ସନ୍ଧାନ ଇଞ୍ଜିନଗୁଡ଼ିକୁ &ପରିଚାଳନା କରନ୍ତୁ...</translation> <translation id="6781284683813954823">ଡୁଡଲ୍ ଲିଙ୍କ</translation> +<translation id="6781658011335120230"><ph name="BEGIN_PARAGRAPH1" />ଯୋଗାଯୋଗ, ମେସେଜ ଏବଂ ଫଟୋଗୁଡ଼ିକ ପରି ଡାଟା ସମେତ, ଏକ ଆପ ଦ୍ୱାରା ସେଭ କରାଯାଇଥିବା (ଡେଭେଲପର ସେଟିଂସ ଆଧାରରେ) ଯେ କୌଣସି ଡାଟା ଆପ ଡାଟା ହୋଇପାରେ। ବ୍ୟାକଅପ ଡାଟାକୁ ଆପଣଙ୍କ ପିଲାର Drive ଷ୍ଟୋରେଜ କୋଟାରେ ଗଣନା କରାଯିବ ନାହିଁ।<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />ଆପଣ ସେଟିଂସରେ ଏହି ସେବାକୁ ବନ୍ଦ କରିପାରିବେ।<ph name="END_PARAGRAPH2" /></translation> <translation id="6781978626986383437">Linuxର ବ୍ୟାକ୍ଅପ୍ ବାତିଲ୍ କରାଯାଇଛି</translation> <translation id="6782067259631821405">ଅବୈଧ PIN</translation> <translation id="6784523122863989144">ପ୍ରୋଫାଇଲ୍ ସମର୍ଥିତ ଅଟେ</translation> @@ -5810,6 +5850,7 @@ <translation id="7125148293026877011">Crostini ଡିଲିଟ୍ କରନ୍ତୁ</translation> <translation id="7127980134843952133">ଡାଉନ୍ଲୋଡ୍ ଇତିବୃତ୍ତି</translation> <translation id="7128151990937044829">ଯେତେବେଳେ ବିଜ୍ଞପ୍ତି ବ୍ଲକ୍ କରାଯାଇଥାଏ, ସେତେବେଳେ ଠିକଣା ବାର୍ରେ ଏକ ସୂଚକ ଦେଖାଏ</translation> +<translation id="7130890260487814974">ବ୍ୟବହାର ଏବଂ ଡାଏଗ୍ନୋଷ୍ଟିକ ଡାଟା ପଠାନ୍ତୁ।</translation> <translation id="7131040479572660648"><ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />ଏବଂ <ph name="WEBSITE_3" />ରେ ଆପଣଙ୍କର ଡାଟା ପଢ଼ନ୍ତୁ</translation> <translation id="713122686776214250">&ପୃଷ୍ଠା ଯୋଗ କରନ୍ତୁ...</translation> <translation id="7134098520442464001">କ୍ଷୁଦ୍ରତର ଟେକ୍ସଟ୍ ତିଆରି କରନ୍ତୁ</translation> @@ -6058,10 +6099,12 @@ <translation id="7409735910987429903">ସାଇଟଗୁଡ଼ିକ ବିଜ୍ଞାପନ ଦେଖାଇବାକୁ ପପ୍-ଅପଗୁଡ଼ିକ ପଠାଇପାରେ କିମ୍ବା ଆପଣ ଭିଜିଟ୍ କରିବାକୁ ଚାହୁଁନଥିବା ୱେବସାଇଟଗୁଡ଼ିକୁ ଆପଣଙ୍କୁ ନେବାକୁ ରିଡାଇରେକ୍ଟଗୁଡ଼ିକୁ ବ୍ୟବହାର କରିପାରେ</translation> <translation id="7409854300652085600">ବୁକମାର୍କଗୁଡ଼ିକୁ ଇମ୍ପୋର୍ଟ କରାଯାଇଛି।</translation> <translation id="7410344089573941623">ଯଦି <ph name="HOST" /> ଆପଣଙ୍କର କ୍ୟାମେରା ଏବଂ ମାଇକ୍ରୋଫୋନ୍କୁ ଆକ୍ସେସ୍ କରିବାକୁ ଚାହୁଁଛି, ତେବେ ପଚାରନ୍ତୁ</translation> +<translation id="7410852728357935715">ଏକ ଡିଭାଇସକୁ କାଷ୍ଟ କରନ୍ତୁ</translation> <translation id="741204030948306876">ହଁ, ମୁଁ ପ୍ରସ୍ତୁତ</translation> <translation id="7412226954991670867">GPU ମେମୋରୀ</translation> <translation id="7414464185801331860">18x</translation> <translation id="7415454883318062233">ସେଟଅପ୍ ସମ୍ପୁର୍ଣ୍ଣ ହୋଇଛି</translation> +<translation id="7416263748877373774">ସେବାର ସର୍ତ୍ତାବଳୀ ଲୋଡ କରାଯାଇପାରିବ ନାହିଁ। ଦୟାକରି ଆପଣଙ୍କ ନେଟୱାର୍କ ସଂଯୋଗ ଯାଞ୍ଚ କରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation> <translation id="7416362041876611053">ଅଜଣା ନେଟ୍ୱାର୍କ ତ୍ରୁଟି।</translation> <translation id="741906494724992817">ଏହି ଆପ୍ ପାଇଁ କୌଣସି ବିଶେଷ ଅନୁମତିର ଆବଶ୍ୟକତା ନାହିଁ।</translation> <translation id="7419565702166471774">ସର୍ବଦା ସୁରକ୍ଷିତ ସଂଯୋଗ ବ୍ୟବହାର କରନ୍ତୁ</translation> @@ -6817,6 +6860,7 @@ <translation id="8146177459103116374">ଯଦି ଆପଣ ଆଗରୁ ଏହି ଡିଭାଇସ୍ରେ ପଞ୍ଜିକୃତ କରିସାରିଛନ୍ତି, ତେବେ ଆପଣ <ph name="LINK2_START" />ଜଣେ ବିଦ୍ୟମାନ ଉପଯୋଗକର୍ତ୍ତା ଭାବରେ ସାଇନ୍ ଇନ୍<ph name="LINK2_END" /> କରିପାରିବେ।</translation> <translation id="8146287226035613638">ଆପଣଙ୍କ ପସନ୍ଦର ଭାଷାକୁ ଯୋଗ କରନ୍ତୁ ଏବଂ ସେଗୁଡ଼ିକୁ ରେଙ୍କ ଦିଅନ୍ତୁ। ଯେତେବେଳେ ସମ୍ଭବ ହେବ, ସେତେବେଳେ ୱେବସାଇଟଗୁଡ଼ିକ ଆପଣଙ୍କ ପସନ୍ଦର ଭାଷାଗୁଡ଼ିକରେ ଦେଖାଯିବ। ଆପଣଙ୍କ ବ୍ରାଉଜର୍ ସେଟିଂସ୍ ସହିତ ଏହି ପସନ୍ଦଗୁଡ଼ିକୁ ସିଙ୍କ୍ କରାଯାଇଛି। <ph name="BEGIN_LINK_LEARN_MORE" />ଅଧିକ ଜାଣନ୍ତୁ<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="8146793085009540321">ସାଇନ୍-ଇନ୍ ବିଫଳ ହୋଇଛି। ଦୟାକରି ଆପଣଙ୍କ ବ୍ୟବସ୍ଥାପକଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ କିମ୍ବା ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation> +<translation id="8147346945017130012">Googleକୁ ସ୍ୱଚାଳିତ ଭାବେ କ୍ରାସ ରିପୋର୍ଟଗୁଡ଼ିକ ସମେତ ଡାଏଗ୍ନୋଷ୍ଟିକ ଓ ବ୍ୟବହାର ଡାଟା ପଠାଇ Chrome ଏବଂ ChromeOS ଫିଚର ଓ ପରଫରମାନ୍ସକୁ ଉନ୍ନତ କରିବାରେ ସାହାଯ୍ୟ କରନ୍ତୁ।</translation> <translation id="8147900440966275470"><ph name="NUM" />ଟି ଟାବ୍ ମିଳିଲା</translation> <translation id="8148760431881541277">ସାଇନ୍-ଇନ୍ ସୀମିତ କରନ୍ତୁ</translation> <translation id="8149564499626272569">ଏକ USB କେବୁଲ୍ ସହ ଆପଣଙ୍କ ଫୋନ୍ ମାଧ୍ୟମରେ ଯାଞ୍ଚ କରନ୍ତୁ</translation> @@ -7048,6 +7092,7 @@ <translation id="8404893580027489425">ଆପଣଙ୍କ <ph name="DEVICE_TYPE" />ର ଡାହାଣ-ପାର୍ଶ୍ୱରେ ଟିପଚିହ୍ନ ସେନ୍ସର୍ ଅଛି। ଏହାକୁ ଯେ କୌଣସି ଆଙ୍ଗୁଠିରେ ହାଲୁକା ଭାବେ ସ୍ପର୍ଶ କରନ୍ତୁ।</translation> <translation id="8405046151008197676">ନବୀନତମ ଅପ୍ଡେଟ୍ରୁ ହାଇଲାଇଟ୍ସ ପାଆନ୍ତୁ</translation> <translation id="8407199357649073301">ଲଗ୍ ଲେବଲ୍:</translation> +<translation id="8408270600235826886">Google ସହ କେଉଁ ଡାଟା ସେୟାର କରାଯିବ, ତାହା ଆପଣ ନିୟନ୍ତ୍ରଣ କରିପାରିବେ। ଆପଣ ଯେ କୌଣସି ସମୟରେ ସେଟିଂସରେ ଏହାକୁ ବଦଳାଇପାରିବେ। Googleର <ph name="BEGIN_LINK" />ଗୋପନୀୟତା ନୀତି<ph name="END_LINK" /> ଅନୁସାରେ ଡାଟା ବ୍ୟବହାର କରାଯିବ।</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8412136526970428322"><ph name="PERMISSION" /> ଏବଂ ଅଧିକ <ph name="COUNT" />ଟିକୁ ଅନୁମତି ଦିଆଯାଇଛି</translation> <translation id="8413385045638830869">ପ୍ରଥମେ ପଚାରନ୍ତୁ (ସୁପାରିଶ କରାଯାଇଛି)</translation> @@ -7230,6 +7275,7 @@ <translation id="862727964348362408">ନିଲମ୍ବିତ</translation> <translation id="862750493060684461">CSS କ୍ୟାଶ୍</translation> <translation id="8627795981664801467">କେବଳ ନିରାପତ୍ତା ସଂଯୋଜନାସମୂହ</translation> +<translation id="8627804903623428808">ଏହି ସର୍ତ୍ତାବଳୀର ସମୀକ୍ଷା କରି ଆପଣଙ୍କ ପିଲାର ଡାଟାକୁ ନିୟନ୍ତ୍ରଣ କରନ୍ତୁ</translation> <translation id="8630338733867813168">ଚାର୍ଜିଂ ସମୟରେ ଡିଭାଇସକୁ ସ୍ଲିପ୍ ମୋଡରେ ରଖନ୍ତୁ</translation> <translation id="8631032106121706562">ପାଖୁଡ଼ା</translation> <translation id="863109444997383731">ଆପଣଙ୍କୁ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ଦେଖାଇବା ପାଇଁ ପଚାରିବା ନିମନ୍ତେ ସାଇଟ୍ଗୁଡ଼ିକୁ ବ୍ଲକ୍ କରାଯିବ। ଯଦି କୌଣସି ସାଇଟ୍ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ପାଇଁ ଅନୁରୋଧ କରେ, ତେବେ ଠିକଣା ବାର୍ରେ ଏକ ବ୍ଲକ୍ କରାଯାଇଥିବା ସୂଚକ ଦେଖାଯିବ।</translation> @@ -7493,6 +7539,7 @@ <translation id="8872155268274985541">ଅବୈଧ କିଓସ୍କ ଏକ୍ସଟର୍ନଲ ଅପ୍ଡେଟ୍ ମାନିଫେଷ୍ଟ ଫାଇଲ୍ ମିଳିଲା। କିଓସ୍କ ଆପ୍ ଅପ୍ଡେଟ୍ କରିବାରେ ବିଫଳ ହେଲା। ଦୟାକରି USB ଷ୍ଟିକ୍ କାଢ଼ିଦିଅନ୍ତୁ।</translation> <translation id="8872777911145321141">କୌଣସି ସାଇଟ୍ ଆପଣଙ୍କ ଭର୍ଚୁଆଲ୍ ରିଆଲିଟୀ ଡିଭାଇସଗୁଡ଼ିକ ଏବଂ ଡାଟା ବ୍ୟବହାର କରିବାକୁ ଚାହିଁଲେ ପଚାରନ୍ତୁ (ସୁପାରିଶ କରାଯାଇଛି)</translation> <translation id="8874184842967597500">ସଂଯୁକ୍ତ ନାହିଁ</translation> +<translation id="8874341931345877644">ଏକ ଡିଭାଇସକୁ କାଷ୍ଟ କରନ୍ତୁ:</translation> <translation id="8875520811099717934">Linux ଅପଗ୍ରେଡ୍</translation> <translation id="8875736897340638404">ଆପଣଙ୍କର ଭିଜିବିଲିଟୀ ବାଛନ୍ତୁ</translation> <translation id="8876307312329369159">ଏହି ସେଟିଂ, ଡେମୋ ଅବଧି ସମୟରେ ପରିବର୍ତ୍ତନ କରାଯାଇପାରିବ ନାହିଁ।</translation> @@ -7522,6 +7569,7 @@ <translation id="8902667442496790482">'କହିବାକୁ-ଚୟନ କରନ୍ତୁ' ସେଟିଂସ୍ ଖୋଲନ୍ତୁ</translation> <translation id="8903263458134414071">ସାଇନ୍ ଇନ୍ କରିବାକୁ ଏକ ଆକାଉଣ୍ଟ ବାଛନ୍ତୁ</translation> <translation id="890616557918890486">ଉତ୍ସ ପରିବର୍ତ୍ତନ କରନ୍ତୁ</translation> +<translation id="8907701755790961703">ଦୟାକରି ଏକ ଦେଶ ଚୟନ କରନ୍ତୁ</translation> <translation id="8907787635362884532">ପବ୍ଲିସର୍: <ph name="APP_ORIGIN" /></translation> <translation id="8907906903932240086">Chrome କ୍ଷତିକାରକ ସଫ୍ଟୱେର୍ ପାଇଁ ଆପଣଙ୍କ କମ୍ପ୍ୟୁଟରକୁ ଯାଞ୍ଚ କରିପାରିବ</translation> <translation id="8909298138148012791"><ph name="APP_NAME" />କୁ ଅନଇନଷ୍ଟଲ୍ କରିଦିଆଯାଇଛି</translation> @@ -7683,6 +7731,7 @@ <ph name="BEGIN_LINK2" />policies.google.com<ph name="END_LINK2" />ରେ Google ସଂଗ୍ରହ କରୁଥିବା ଡାଟା ଏବଂ ଏହାର କାରଣ ବିଷୟରେ ଜାଣନ୍ତୁ।</translation> <translation id="9066777626153702300">ନିଷ୍କ୍ରିୟ ସାଇଟଗୁଡ଼ିକ</translation> <translation id="9066782832737749352">ଟେକ୍ସଟ୍ରୁ ସ୍ପିଚ୍</translation> +<translation id="9068298336633421551">ଲୋକେସନ ଅନୁମତି ଥିବା Android ଆପ ଓ ସେବାଗୁଡ଼ିକୁ ଏହି ଡିଭାଇସର ଲୋକେସନ ବ୍ୟବହାର କରିବା ପାଇଁ ଅନୁମତି ଦିଅନ୍ତୁ। ସମୟ ସମୟରେ Google ଲୋକେସନ ଡାଟା ସଂଗ୍ରହ କରିପାରେ ଏବଂ ଏକ ବେନାମୀ ଉପାୟରେ ଏହି ଡାଟାକୁ ଲୋକେସନ ସଠିକତା ତଥା ଲୋକେସନ-ଆଧାରିତ ସେବାଗୁଡ଼ିକରେ ଉନ୍ନତି ଆଣିବାକୁ ବ୍ୟବହାର କରିପାରେ।</translation> <translation id="9068878141610261315">ଅସମର୍ଥିତ ଫାଇଲର ପ୍ରକାର</translation> <translation id="9070342919388027491">ବାମକୁ ଟାବ୍ ମୁଭ୍ କରାଯାଇଛି</translation> <translation id="9074739597929991885">ବ୍ଲୁଟୁଥ୍</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index a0742a5..2a3c111 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -1713,6 +1713,7 @@ <translation id="2721037002783622288">&Procurar imagem no <ph name="SEARCH_ENGINE" /></translation> <translation id="2721334646575696520">Microsoft Edge</translation> <translation id="2721695630904737430">Os usuários supervisionados foram desativados pelo administrador.</translation> +<translation id="2722540561488096675">O dispositivo será desligado automaticamente em <ph name="TIME_LEFT" />. Remova o dispositivo USB antes de ligar novamente. Em seguida, use o <ph name="DEVICE_OS" />.</translation> <translation id="2724841811573117416">Registros WebRTC</translation> <translation id="272488616838512378">Conversão de unidades</translation> <translation id="2725200716980197196">Conectividade de rede restaurada</translation> @@ -4571,6 +4572,7 @@ <translation id="5739235828260127894">Aguardando verificação. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Muito grande</translation> <translation id="5740328398383587084">Compartilhar por proximidade</translation> +<translation id="5740709157181662145">Suporte de hardware e estabilidade do <ph name="DEVICE_OS" /></translation> <translation id="574104302965107104">Espelhamento da tela</translation> <translation id="574209121243317957">Tom da fala</translation> <translation id="5746169159649715125">Salvar como PDF</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb index 83b2552..8cbe6fc 100644 --- a/chrome/app/resources/generated_resources_ru.xtb +++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -132,6 +132,7 @@ <translation id="1129850422003387628">Управление приложениями</translation> <translation id="113050636487300043">Укажите имя и установите цветовую тему, чтобы отличать свой профиль от других.</translation> <translation id="1130589222747246278">"<ph name="WINDOW_TITLE" />" – элемент группы "<ph name="GROUP_NAME" />"</translation> +<translation id="1130676589211693127">Правый наушник заряжен на <ph name="PERCENTAGE" /> %.</translation> <translation id="1133418583142946603">Добавить текущую вкладку</translation> <translation id="1136179794690960030">Эмодзи <ph name="EMOJI_NAME" />: <ph name="EMOJI_INDEX" />из <ph name="EMOJI_COUNT" />.</translation> <translation id="1136712381129578788">Слишком много попыток ввода PIN-кода. Электронный ключ заблокирован. Чтобы разблокировать ключ, извлеките его и вставьте снова.</translation> @@ -1641,6 +1642,7 @@ <translation id="2665647207431876759">Срок действия истек.</translation> <translation id="2665717534925640469">Страница отображается в полноэкранном режиме и пытается скрыть курсор.</translation> <translation id="2665919335226618153">Произошла ошибка форматирования.</translation> +<translation id="2666247341166669829">Левый наушник заряжен на <ph name="PERCENTAGE" /> %.</translation> <translation id="2667144577800272420">Вы хотите установить "<ph name="APP_NAME" />" в качестве приложения по умолчанию? После изменения эти ссылки больше не будут открываться в приложениях "<ph name="APP_NAME_2" />" и "<ph name="APP_NAME_3" />".</translation> <translation id="2667463864537187133">Настроить проверку орфографии</translation> <translation id="2669241540496514785">Не удалось запустить <ph name="APP_NAME" /></translation> @@ -1958,6 +1960,7 @@ <translation id="2979639724566107830">Открыть в новом окне</translation> <translation id="2981113813906970160">Показывать большой курсор мыши</translation> <translation id="2981474224638493138">Качество видео во вкладке или в приложении на компьютере</translation> +<translation id="2983373101216420412">Чехол заряжен на <ph name="PERCENTAGE" /> %.</translation> <translation id="2985348301114641460">Отправить администратору запрос на установку расширения "<ph name="EXTENSION_NAME" />"?</translation> <translation id="2987620471460279764">Текст, полученный с другого устройства</translation> <translation id="2988018669686457659">Дополнительный отрисовщик</translation> @@ -2014,6 +2017,7 @@ <translation id="3030967311408872958">От заката до рассвета</translation> <translation id="3031417829280473749">Секретный агент</translation> <translation id="3031557471081358569">Выберите элементы для импорта:</translation> +<translation id="3033348223765101500">Управление данными</translation> <translation id="3036327949511794916">Истек срок возврата устройства <ph name="DEVICE_TYPE" />.</translation> <translation id="3036546437875325427">Включить Flash</translation> <translation id="3037754279345160234">Не удалось проанализировать конфигурацию для подключения к домену. Обратитесь к администратору.</translation> @@ -2114,6 +2118,7 @@ <translation id="3143754809889689516">Воспроизвести с начала</translation> <translation id="3144647712221361880">Открыть ссылку как</translation> <translation id="3149510190863420837">Приложения Chrome</translation> +<translation id="3150622786624965651">Устройство <ph name="DEVICE_INDEX" /> из <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, игровой контроллер.</translation> <translation id="3150693969729403281">Запустить проверку безопасности</translation> <translation id="3150927491400159470">Жесткая перезагрузка</translation> <translation id="315116470104423982">Мобильное подключение</translation> @@ -2321,6 +2326,7 @@ <translation id="339178315942519818">Просматривайте уведомления из мессенджеров на устройстве <ph name="DEVICE_TYPE" /></translation> <translation id="3393554941209044235">Анализ документов в Chrome</translation> <translation id="3394850431319394743">Сайты, которым разрешено использовать идентификаторы для воспроизведения защищенного контента</translation> +<translation id="3395403082745257596">Устройство <ph name="DEVICE_INDEX" /> из <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, неизвестный тип устройства.</translation> <translation id="3396744558790608201">Просматривая сайт или покупая товар в интернете, вы можете узнать больше о визуальном контенте страницы. Для этого нажмите на ней правой кнопкой мыши и выберите "Искать изображения с помощью функции "Google Объектив".</translation> <translation id="3396800784455899911">Нажимая кнопку "Принять условия и продолжить", вы соглашаетесь с Условиями использования сервисов Google, описанными выше.</translation> <translation id="339722927132407568">Зависает</translation> @@ -2376,6 +2382,7 @@ <translation id="3440663250074896476">Другие действия с закладкой <ph name="BOOKMARK_NAME" /></translation> <translation id="3441653493275994384">Экран</translation> <translation id="3441663102605358937">Войдите в аккаунт <ph name="ACCOUNT" /> ещё раз, чтобы подтвердить его</translation> +<translation id="3442674350323953953">Разрешить компании Google использовать данные о вашем оборудовании, чтобы улучшать <ph name="DEVICE_OS" />. Если вы откажетесь, эта информация все равно будет отправляться в Google для определения подходящих обновлений, но она не будет храниться или использоваться в других целях.</translation> <translation id="3444641828375597683">Рекламодатели и издатели могут использовать технологию FLoC, которая описана дальше на этой странице.</translation> <translation id="3444726579402183581">Сайт <ph name="ORIGIN" /> сможет просматривать файл "<ph name="FILENAME" />".</translation> <translation id="3445047461171030979">Быстрые ответы Google Ассистента</translation> @@ -2508,6 +2515,7 @@ <translation id="3569682580018832495"><ph name="ORIGIN" /> может просматривать следующие файлы и папки:</translation> <translation id="3571734092741541777">Настроить</translation> <translation id="3575121482199441727">Показывать уведомления с этого сайта</translation> +<translation id="3577745545227000795">Сбор данных об аппаратном обеспечении устройства с <ph name="DEVICE_OS" /></translation> <translation id="3578594933904494462">К контенту на этой вкладке открыт общий доступ</translation> <translation id="3581605050355435601">Настраивать IP-адрес автоматически</translation> <translation id="3582057310199111521">Введен на поддельном сайте и раскрыт при утечке данных</translation> @@ -2949,6 +2957,7 @@ <translation id="3994374631886003300">Разблокируйте телефон и поднесите его к устройству <ph name="DEVICE_TYPE" />.</translation> <translation id="3994878504415702912">&Размер текста</translation> <translation id="3995138139523574647">Устройство USB-C (дальний порт справа)</translation> +<translation id="3995963973192100066">Воспроизвести анимацию</translation> <translation id="4002329649066944389">Управление отдельными исключениями для сайтов</translation> <translation id="4002440992267487163">Установить PIN-код</translation> <translation id="4005817994523282006">Способ определения часового пояса</translation> @@ -3596,6 +3605,7 @@ <translation id="4728558894243024398">Платформа</translation> <translation id="4728570203948182358"><ph name="BEGIN_LINK" />Администратор<ph name="END_LINK" /> отключил проверку на наличие вредоносного ПО.</translation> <translation id="4730492586225682674">Последняя заметка, созданная на заблокированном экране с помощью стилуса</translation> +<translation id="4733161265940833579"><ph name="BATTERY_PERCENTAGE" /> % (левый)</translation> <translation id="4733793249294335256">Папка</translation> <translation id="473546211690256853">Этот аккаунт находится в домене <ph name="DOMAIN" /></translation> <translation id="4735803855089279419">Не удалось определить идентификаторы устройства.</translation> @@ -4160,6 +4170,7 @@ <translation id="5341793073192892252">Были заблокированы следующие файлы cookie (сторонние файлы cookie блокируются без исключения):</translation> <translation id="5342091991439452114">PIN-код должен содержать не менее <ph name="MINIMUM" /> знаков</translation> <translation id="5344036115151554031">Восстановление Linux</translation> +<translation id="5344128444027639014"><ph name="BATTERY_PERCENTAGE" /> % (правый)</translation> <translation id="5345916423802287046">Запускать при входе</translation> <translation id="5350293332385664455">Выключить Google Ассистента</translation> <translation id="535123479159372765">Текст скопирован с другого устройства</translation> @@ -4399,6 +4410,7 @@ <translation id="5585898376467608182">На устройстве осталось мало места. Чтобы использовать приложение "<ph name="APP_NAME" />", нужно как минимум <ph name="MINIMUM_SPACE" /> свободного пространства. Удалите с устройства файлы, которые больше не нужны.</translation> <translation id="5585912436068747822">Ошибка форматирования</translation> <translation id="5588033542900357244">(<ph name="RATING_COUNT" />)</translation> +<translation id="5589101568518637088">Устройство <ph name="DEVICE_INDEX" /> из <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, клавиатура.</translation> <translation id="558918721941304263">Загрузка...</translation> <translation id="5592595402373377407">Недостаточно данных.</translation> <translation id="5595485650161345191">Изменить адрес</translation> @@ -4600,6 +4612,7 @@ <translation id="5817069030404929329">Перенести пароли с этого устройства в ваш аккаунт Google?</translation> <translation id="5817918615728894473">Подключить</translation> <translation id="5821565227679781414">Создать ярлык</translation> +<translation id="5822095611691580107">Левый наушник заряжен на <ph name="BATTERY_PERCENTAGE" /> %.</translation> <translation id="5822865422567397338">Для поиска по определенному сайту или в отдельной части Chrome можно использовать указанные быстрые команды. Например, чтобы искать только в Gmail, введите "@gmail", а затем нажмите Tab или Пробел.</translation> <translation id="5825412242012995131">Вкл. (рекомендуется)</translation> <translation id="5826395379250998812">Подключите устройство <ph name="DEVICE_TYPE" /> к телефону. <ph name="LINK_BEGIN" />Подробнее…<ph name="LINK_END" /></translation> @@ -5051,6 +5064,7 @@ <translation id="6294759976468837022">Скорость автосканирования</translation> <translation id="6295158916970320988">Все сайты</translation> <translation id="6295855836753816081">Сохранение...</translation> +<translation id="6297132509712149399">Устройство <ph name="DEVICE_INDEX" /> из <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, телефон.</translation> <translation id="629730747756840877">Аккаунт</translation> <translation id="6298962879096096191">Использование Google Play для установки приложений Android</translation> <translation id="6300177430812514606">Запретить сайтам завершать отправку и получение данных</translation> @@ -5264,6 +5278,9 @@ <translation id="6528179044667508675">Не беспокоить</translation> <translation id="652948702951888897">История Chrome</translation> <translation id="6530186581263215931">Эти настройки определяются администратором</translation> +<translation id="653031671361866334"><ph name="BEGIN_PARAGRAPH1" />Для удобства пользователей <ph name="DEVICE_OS" /> собирает данные об аппаратном обеспечении устройств и передает эту информацию компании Google, чтобы определять подходящие обновления. Вы также можете разрешить Google использовать эти данные в других целях, например для улучшения <ph name="DEVICE_OS" /> и предоставления поддержки.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />Чтобы посмотреть, какие сведения отправляются в Google для фильтрации обновлений и для каких ещё целей можно передавать нам данные, войдите в аккаунт на этом устройстве и изучите раздел CLOUDREADY_HARDWARE_INFO на странице chrome://system.<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" />Чтобы узнать больше о том, какую информацию <ph name="DEVICE_OS" /> может отправлять в Google и как она будет использоваться, перейдите на страницу g.co/xxxxx.<ph name="END_PARAGRAPH3" /></translation> <translation id="6531282281159901044">Сохранить</translation> <translation id="6532101170117367231">Сохранить на Google Диске</translation> <translation id="6532106788206463496">Сохранить</translation> @@ -5339,6 +5356,7 @@ <translation id="6601612474695404578">Некоторые сайты используют сторонние файлы cookie для загрузки своих страниц. Если сайт не работает, разрешите файлы cookie.</translation> <translation id="6602937173026466876">Доступ к принтерам</translation> <translation id="6602956230557165253">Для перехода используйте клавиши со стрелками вправо и влево.</translation> +<translation id="6602998402703530379">Устройство <ph name="DEVICE_INDEX" /> из <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, видеокамера.</translation> <translation id="6605847144724004692">Оценок пока нет.</translation> <translation id="6606671997164410857">Похоже, вы уже настроили Google Ассистента на другом устройстве. Если разрешить доступ к содержимому экрана на этом устройстве, вы сможете пользоваться дополнительными возможностями Ассистента.</translation> <translation id="6607831829715835317">Дополнительные инстру&менты</translation> @@ -5360,6 +5378,7 @@ <translation id="6624535038674360844">Файл <ph name="FILE_NAME" /> содержит конфиденциальный или опасный контент. Попросите владельца его исправить.</translation> <translation id="6624687053722465643">Пирожное</translation> <translation id="6628328486509726751">Время загрузки: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation> +<translation id="663065535202460123">Устройство <ph name="DEVICE_INDEX" /> из <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, мышь.</translation> <translation id="6630752851777525409">Расширение "<ph name="EXTENSION_NAME" />" запрашивает постоянный доступ к сертификату для прохождения аутентификации от вашего имени.</translation> <translation id="6635362468090274700">Никто не сможет обмениваться с вами данными, пока вы не откроете доступ к своему устройству.<ph name="BR" /><ph name="BR" />Чтобы предоставить временный доступ, откройте панель состояния и включите параметр "Широкий доступ".</translation> <translation id="6635674640674343739">Не удается установить связь. Проверьте подключение к сети и повторите попытку.</translation> @@ -5687,6 +5706,7 @@ <translation id="6973611239564315524">Доступна версия Debian 10 (Buster).</translation> <translation id="6974609594866392343">Демонстрационный офлайн-режим</translation> <translation id="697508444536771064">Завершить работу Linux</translation> +<translation id="6977739184256564679">Устройство <ph name="DEVICE_INDEX" /> из <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, планшет.</translation> <translation id="6978121630131642226">Поисковые системы</translation> <translation id="6979044105893951891">Запуск и завершение управляемых гостевых сеансов</translation> <translation id="6979158407327259162">Google Диск</translation> @@ -5706,6 +5726,7 @@ <translation id="6991665348624301627">Выбор места назначения</translation> <translation id="6992554835374084304">Включите расширенную проверку правописания</translation> <translation id="6993000214273684335">Вкладка удалена из группы без названия – <ph name="GROUP_CONTENTS" /></translation> +<translation id="6993889405941892667">Устройство <ph name="DEVICE_INDEX" /> из <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, компьютер.</translation> <translation id="6994069045767983299">Инвертированные цвета</translation> <translation id="6995899638241819463">Сообщать, если пароли были раскрыты в результате утечки данных</translation> <translation id="6997642619627518301"><ph name="NAME_PH" /> – Журнал активности</translation> @@ -6277,6 +6298,7 @@ <translation id="7602173054665172958">Управление печатью</translation> <translation id="7603785829538808504">Для указанных ниже сайтов действуют специальные настройки.</translation> <translation id="7605594153474022051">Ошибка синхронизации</translation> +<translation id="7606560865764296217">Приостановить анимацию</translation> <translation id="7606992457248886637">Центры сертификации</translation> <translation id="7607002721634913082">Приостановлен</translation> <translation id="7608810328871051088">Настройки Android</translation> @@ -7085,6 +7107,7 @@ <translation id="8410775397654368139">Google Play</translation> <translation id="8412136526970428322">Предоставлено разрешение "<ph name="PERMISSION" />" и ещё <ph name="COUNT" /></translation> <translation id="8413385045638830869">Всегда спрашивать (рекомендуется)</translation> +<translation id="8416730306157376817"><ph name="BATTERY_PERCENTAGE" /> % (чехол)</translation> <translation id="8417548266957501132">Пароль родителя</translation> <translation id="8418445294933751433">&Показать как вкладку</translation> <translation id="8419098111404128271">Результаты поиска по запросу "<ph name="SEARCH_TEXT" />"</translation> @@ -7430,6 +7453,7 @@ По правилам домена <ph name="DOMAIN" /> смарт-карта должна быть вставлена.}many{Ваше устройство <ph name="DEVICE_TYPE" /> будет автоматически заблокировано через # секунд. По правилам домена <ph name="DOMAIN" /> смарт-карта должна быть вставлена.}other{Ваше устройство <ph name="DEVICE_TYPE" /> будет автоматически заблокировано через # секунды. По правилам домена <ph name="DOMAIN" /> смарт-карта должна быть вставлена.}}</translation> +<translation id="8777259617149177596">Чехол заряжен на <ph name="BATTERY_PERCENTAGE" /> %.</translation> <translation id="8777628254805677039">пароль суперпользователя</translation> <translation id="8778328560035799409">Назначенные переключатели будут удалены.</translation> <translation id="8780123805589053431">Получать описания изображений от Google</translation> @@ -7788,6 +7812,7 @@ <translation id="9128335130883257666">Открыть страницу настроек для способа ввода "<ph name="INPUT_METHOD_NAME" />"</translation> <translation id="9128870381267983090">Подключитесь к сети</translation> <translation id="9130015405878219958">Указан неверный режим.</translation> +<translation id="9130215884425927484">Устройство <ph name="DEVICE_INDEX" /> из <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, аудиоустройство.</translation> <translation id="9131487537093447019">Обмен сообщениями с устройствами Bluetooth.</translation> <translation id="9134066738478820307">Разрешить сайтам использовать идентификаторы для воспроизведения защищенного контента</translation> <translation id="913411432238655354">Восстанавливать приложения при запуске</translation> @@ -7831,6 +7856,7 @@ <translation id="916964310188958970">Почему я вижу эту подсказку?</translation> <translation id="9170048603158555829">Thunderbolt</translation> <translation id="9170061643796692986">Ваше устройство могут обнаруживать все пользователи из списка контактов</translation> +<translation id="9170199455952690202">Правый наушник заряжен на <ph name="BATTERY_PERCENTAGE" /> %.</translation> <translation id="9170848237812810038">&Отменить</translation> <translation id="9170884462774788842">Одна из программ на вашем компьютере установила тему, которая может влиять на работу Chrome.</translation> <translation id="917350715406657904">Время, установленное родителями для приложения "<ph name="APP_NAME" />", истекло. Лимит на завтра: <ph name="TIME_LIMIT" />.</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb index 92ae1fc..31c7c16 100644 --- a/chrome/app/resources/generated_resources_sq.xtb +++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -652,6 +652,7 @@ <translation id="16620462294541761">Na vjen keq, fjalëkalimi nuk mund të verifikohej. Provo sërish.</translation> <translation id="1662777896967868795">Aktive / Do të çaktivizohet automatikisht kur të lindë dielli</translation> <translation id="166278006618318542">Algoritmi i çelësit publik të subjektit</translation> +<translation id="1662801900924515589"><ph name="APP" /> u instalua</translation> <translation id="1666232093776384142">Çaktivizo mbrojtjen e qasjes te të dhënat për pajisjet periferike</translation> <translation id="1668435968811469751">Regjistrohu manualisht</translation> <translation id="1668979692599483141">Mëso për sugjerimet</translation> @@ -1309,6 +1310,7 @@ <translation id="2329597144923131178">Identifikohu për të marrë faqeshënuesit, historikun, fjalëkalimet dhe cilësime të tjera në të gjitha pajisjet e tua.</translation> <translation id="2332131598580221120">Shiko në dyqan</translation> <translation id="2332192922827071008">Hap "Preferencat"</translation> +<translation id="2332515770639153015">"Shfletimi i sigurt i përmirësuar" është aktiv</translation> <translation id="2332742915001411729">Rivendos me parazgjedhje</translation> <translation id="2335111415680198280">{0,plural, =1{Mbyll # dritare}other{Mbyll # dritare}}</translation> <translation id="2335122562899522968">Kjo faqe vendosi kuki.</translation> @@ -2530,6 +2532,7 @@ <translation id="3616741288025931835">&Pastro të dhënat e shfletimit...</translation> <translation id="3617891479562106823">Sfondet nuk disponohen. Provo sërish më vonë.</translation> <translation id="3619115746895587757">Kapuçino</translation> +<translation id="3619962278978697442">Zgjidh njërën sa herë që identifikohesh</translation> <translation id="362266093274784978">{COUNT,plural, =1{një aplikacion}other{# aplikacione}}</translation> <translation id="362333465072914957">Në pritje të lëshimit të certifikatës nga autoriteti i certifikatave</translation> <translation id="3624567683873126087">Shkyçe pajisjen dhe identifikohu në "Llogarinë e Google"</translation> @@ -3050,6 +3053,7 @@ <translation id="4138267921960073861">Shfaq emrat e përdoruesit dhe fotografitë në ekranin e identifikimit</translation> <translation id="4138598238327913711">Kontrolli gramatikor ofrohet aktualisht vetëm për anglishten</translation> <translation id="413915106327509564"><ph name="WINDOW_TITLE" /> - pajisja HID u lidh</translation> +<translation id="4139326893730851150">Përditësimet e firmuerit</translation> <translation id="4142052906269098341">Shkyç <ph name="DEVICE_TYPE" /> me telefonin tënd. <ph name="LINK_BEGIN" />Mëso më shumë<ph name="LINK_END" /></translation> <translation id="4142518881503042940">Ruaji printerët e zbuluar në profilin tënd ose shto një printer të ri. <ph name="LINK_BEGIN" />Mëso më shumë<ph name="LINK_END" /></translation> <translation id="4144218403971135344">Merr video me cilësi më të mirë dhe kurse kohëzgjatjen e baterisë. Videoja do të luhet vetëm në ekranin që mbështet transmetime.</translation> @@ -3532,6 +3536,7 @@ <translation id="4684471265911890182"><ph name="APP_NAME" /> po përpiqet të ketë qasje te kamera. Çaktivizo çelësin e privatësisë të kamerës për të lejuar qasjen.</translation> <translation id="4687613760714619596">Pajisje e panjohur (<ph name="DEVICE_ID" />)</translation> <translation id="4688036121858134881">ID-ja e evidencës lokale: <ph name="WEBRTC_EVENT_LOG_LOCAL_ID" />.</translation> +<translation id="4688176403504673761"><ph name="MANAGER" /> po e kalon këtë pajisje në një version të mëparshëm (<ph name="PROGRESS_PERCENT" />)</translation> <translation id="4689235506267737042">Zgjidh preferencat e tua për demonstrimin</translation> <translation id="4689421377817139245">Sinkronizoje këtë faqeshënues në telefonin tënd iPhone</translation> <translation id="4690091457710545971"><Katër skedarë të krijuar nga firmueri i Intel Wi-Fi: csr.lst, fh_regs.lst, radio_reg.lst, monitor.lst.sysmon. Tre të parët janë skedarë formati binar që përmbajnë shkarkimet e regjistrit dhe konfirmohen nga Intel se nuk përmbajnë informacione personale apo që mund të identifikojnë pajisjen. Skedari i fundit është gjurma e ekzekutimit nga firmueri i Intel; është spastruar nga informacionet e mundshme personale apo që mund të identifikojnë pajisjen, por është shumë i madh për t'u shfaqur këtu. Këta skedarë u krijuan në përgjigje të problemeve të fundit me Wi-Fi e pajisjes tënde, dhe do t'i përcillen Intel për të ndihmuar në diagnostikimin e këtyre problemeve.></translation> @@ -3597,6 +3602,7 @@ <translation id="4779136857077979611">Onigiri</translation> <translation id="4779766576531456629">Riemërto rrjetin celular të eSIM</translation> <translation id="4780321648949301421">Ruaje faqen si...</translation> +<translation id="4781443161433589743">Je në sigurinë më të fortë të Chrome</translation> <translation id="4784559565779618838">Për të kërkuar në një sajt specifik ose një pjesë të Chrome, mund të shkruash shkurtoret këtu në shiritin e adresave dhe më pas të shtypësh tastin Tab ose tastin e hapësirës.</translation> <translation id="4785719467058219317">Po përdor një çelës sigurie që nuk është i regjistruar me këtë sajt uebi</translation> <translation id="478708757211772586">Përdor “Para” për të kaluar përpara në ekran</translation> @@ -5239,6 +5245,7 @@ <translation id="655483977608336153">Provo përsëri</translation> <translation id="6555432686520421228">Hiqi të gjitha llogaritë e përdoruesit dhe rivendos pajisjen tënde <ph name="IDS_SHORT_PRODUCT_NAME" /> për ta bërë si të re.</translation> <translation id="6555810572223193255">Pastrimi aktualisht nuk ofrohet</translation> +<translation id="6556477848444788999">Ky kod PIN ose fjalëkalim i mbron të dhënat e tua në këtë <ph name="DEVICE_TYPE" />, duke përfshirë çdo përmbajtje që ti transmeton nga telefoni yt.</translation> <translation id="6556866813142980365">Ribëje</translation> <translation id="6556903358015358733">Tema dhe imazhi i sfondit</translation> <translation id="6557290421156335491">Shkurtoret e mia</translation> @@ -6113,6 +6120,7 @@ <translation id="7494694779888133066"><ph name="WIDTH" /> x <ph name="HEIGHT" /></translation> <translation id="7495778526395737099">Harrove fjalëkalimin e vjetër?</translation> <translation id="7497981768003291373">Nuk ke evidenca teksti WebRTC të regjistruara së fundi.</translation> +<translation id="7501957181231305652">ose</translation> <translation id="7503191893372251637">Lloji i certifikatës Netscape</translation> <translation id="7503985202154027481">Një regjistrim i vizitës sate në këtë sajt do të ruhet në çelësin tënd të sigurisë.</translation> <translation id="750509436279396091">Hap dosjen e shkarkimeve</translation> @@ -6152,6 +6160,7 @@ <translation id="7537451260744431038">Sajtet nuk mund t'i përdorin kukit për të përmirësuar përvojën e shfletimit, për shembull për të të mbajtur të identifikuar ose për të kujtuar artikujt në karrocën e blerjeve</translation> <translation id="753769905878158714">Në shiritin e adresës fut fjalën kyçe për faqen e internetit që dëshiron të kërkosh. Pastaj, përdor një shkurtore tastiere për të vazhduar.</translation> <translation id="7540972813190816353">Një gabim ndodhi gjatë kontrollit për përditësime: <ph name="ERROR" /></translation> +<translation id="7541076351905098232"><ph name="MANAGER" /> e ka kaluar këtë pajisje në një version të mëparshëm. Ruaj skedarët e rëndësishëm dhe më pas rinise. Të gjitha të dhënat në pajisje do të fshihen.</translation> <translation id="7541773865713908457"><ph name="ACTION_NAME" /> me aplikacionin <ph name="APP_NAME" /></translation> <translation id="754207240458482646">Sinkronizuar me pajisjet e tjera në llogarinë tënde. <ph name="LINK_BEGIN" />Mëso më shumë<ph name="LINK_END" /></translation> <translation id="7543104066686362383">Aktivizo funksionet e korrigjimit në këtë pajisje të <ph name="IDS_SHORT_PRODUCT_NAME" /></translation> @@ -6625,6 +6634,7 @@ <translation id="7984068253310542383">Pasqyro <ph name="DISPLAY_NAME" /></translation> <translation id="7986295104073916105">Lexo dhe ndrysho cilësimet e fjalëkalimeve të ruajtura</translation> <translation id="7987814697832569482">Lidhu gjithmonë nëpërmjet këtij rrjeti VPN</translation> +<translation id="7987932397583333141">Cakto një kod PIN ose fjalëkalim</translation> <translation id="7988355189918024273">Aktivizo veçoritë e qasshmërisë</translation> <translation id="7988805580376093356">Mbaj sistemin tënd operativ dhe ekzekuto <ph name="DEVICE_OS" /> nga USB-ja.</translation> <translation id="7991296728590311172">Cilësimet e "Qasjes me çelës"</translation> @@ -7230,6 +7240,7 @@ <translation id="8658645149275195032"><ph name="APP_NAME" /> po ndan ekranin tënd dhe audion me <ph name="TAB_NAME" />.</translation> <translation id="8661290697478713397">Hape lidhjen në një dritare të fshe&htë</translation> <translation id="8662671328352114214">Bashkohu në rrjetin <ph name="TYPE" /></translation> +<translation id="8662733268723715832">Kjo po zgjat më shumë nga sa pritej. Mund ta kapërcesh ose të presësh derisa të kryhet.</translation> <translation id="8662795692588422978">Kontaktet</translation> <translation id="8662811608048051533">Të nxjerr nga shumica e sajteve.</translation> <translation id="8662911384982557515">Ndrysho faqen tënde bazë te: <ph name="HOME_PAGE" /></translation> @@ -7764,6 +7775,7 @@ <translation id="9179524979050048593">Emri i përdoruesit të ekranit të identifikimit</translation> <translation id="9180281769944411366">Procesi mund të zgjasë disa minuta. Po hapet kontejneri i Linux.</translation> <translation id="9180380851667544951">Sajti mund të ndajë ekranin tënd</translation> +<translation id="918224512343736195">Lidhu me SSH</translation> <translation id="9182556968660520230">Mos lejo që sajtet të luajnë përmbajtje të mbrojtura</translation> <translation id="918352324374649435">{COUNT,plural, =1{Aplikacion}other{# aplikacione}}</translation> <translation id="9186963452600581158">Identifikohu me "Llogarinë e Google" të fëmijës tënd</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb index 49864a64..da2f6bc 100644 --- a/chrome/app/resources/generated_resources_sw.xtb +++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -134,6 +134,7 @@ <translation id="1129850422003387628">Dhibiti programu</translation> <translation id="113050636487300043">Chagua jina na rangi ili utofautishe kati ya wasifu mmoja na mwingine</translation> <translation id="1130589222747246278"><ph name="WINDOW_TITLE" /> - Sehemu ya kikundi cha <ph name="GROUP_NAME" /></translation> +<translation id="1130676589211693127">Kiwango cha betri ya upande wa kulia <ph name="PERCENTAGE" />%.</translation> <translation id="1133418583142946603">Weka kichupo cha sasa</translation> <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_INDEX" /> kati ya <ph name="EMOJI_COUNT" />.</translation> <translation id="1136712381129578788">Tumefunga ufunguo wa usalama kwa sababu umeweka PIN isiyo sahihi mara nyingi mno. Ili kuufungua, uondoe kisha uuweke tena.</translation> @@ -1652,6 +1653,7 @@ <translation id="2665647207431876759">Muda wake umekwisha</translation> <translation id="2665717534925640469">Ukurasa huu sasa uko kwenye skrini nzima na umelemaza kiteuzi cha kipanya chako.</translation> <translation id="2665919335226618153">Lo! Kulikuwa na hitilafu wakati wa uumbizaji.</translation> +<translation id="2666247341166669829">Kiwango cha betri ya upande wa kushoto <ph name="PERCENTAGE" />%.</translation> <translation id="2667144577800272420">Programu zingine zimeruhusiwa kufungua viungo vinavyofunguliwa na <ph name="APP_NAME" />. Hatua hii itazuia <ph name="APP_NAME_2" /> na <ph name="APP_NAME_3" /> zisifungue viungo vinavyoweza kutumika.</translation> <translation id="2667463864537187133">Dhibiti kikagua maendelezo</translation> <translation id="2669241540496514785">Imeshindwa kufungua <ph name="APP_NAME" /></translation> @@ -1970,6 +1972,7 @@ <translation id="2979639724566107830">Fungua katika dirisha jipya</translation> <translation id="2981113813906970160">Onyesha kiteuzi kikubwa cha kipanya</translation> <translation id="2981474224638493138">Ubora wa Kuakisi Kichupo au Eneo-kazi</translation> +<translation id="2983373101216420412">Kiwango cha betri cha kifuniko <ph name="PERCENTAGE" />%.</translation> <translation id="2985348301114641460">Ungependa kutuma ombi kwa msimamizi wako ili asakinishe "<ph name="EXTENSION_NAME" />"?</translation> <translation id="2987620471460279764">Maandishi yaliyoshirikiwa kutoka kifaa kingine</translation> <translation id="2988018669686457659">Kitekelezaji Mbadala</translation> @@ -2026,6 +2029,7 @@ <translation id="3030967311408872958">Machweo hadi mapambazuko</translation> <translation id="3031417829280473749">Wakala X</translation> <translation id="3031557471081358569">Chagua vitu vya kuleta:</translation> +<translation id="3033348223765101500">Dhibiti data yako</translation> <translation id="3036327949511794916">Tarehe ya mwisho ya kurudisha <ph name="DEVICE_TYPE" /> imepita.</translation> <translation id="3036546437875325427">Washa Flash</translation> <translation id="3037754279345160234">Imeshindwa kuchanganua mipangilio ya kujiunga na kikoa. Tafadhali wasiliana na msimamizi wako.</translation> @@ -2126,6 +2130,7 @@ <translation id="3143754809889689516">Cheza kuanzia mwanzo</translation> <translation id="3144647712221361880">Fungua kiungo ukitumia</translation> <translation id="3149510190863420837">Programu za Chrome</translation> +<translation id="3150622786624965651">Kifaa cha <ph name="DEVICE_INDEX" /> kati ya <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, Kidhibiti michezo.</translation> <translation id="3150693969729403281">Tekeleza angalizo la usalama sasa</translation> <translation id="3150927491400159470">Upakiaji upya Thabiti</translation> <translation id="315116470104423982">Data ya mtandao wa simu</translation> @@ -2333,6 +2338,7 @@ <translation id="339178315942519818">Angalia arifa kutoka programu zako za gumzo kwenye <ph name="DEVICE_TYPE" /> yako</translation> <translation id="3393554941209044235">Uchambuzi wa Hati kwenye Chrome</translation> <translation id="3394850431319394743">Zinazoruhusiwa kutumia vitambulishi kucheza maudhui yanayolindwa</translation> +<translation id="3395403082745257596">Kifaa cha <ph name="DEVICE_INDEX" /> kati ya <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, Aina ya kifaa isiyojulikana.</translation> <translation id="3396744558790608201">Bofya kulia kisha uchague “Tafuta picha ukitumia Lenzi ya Google” ili utafute kwenye sehemu yoyote ya tovuti na upate maelezo zaidi kuhusu maudhui unayoyaona unapovinjari na kununua bidhaa kwenye wavuti.</translation> <translation id="3396800784455899911">Kwa kubofya kitufe cha "Kubali na uendelee", unakubali uchakataji uliobainishwa hapo juu katika huduma hizi za Google.</translation> <translation id="339722927132407568">Inasita kucheza</translation> @@ -2388,6 +2394,7 @@ <translation id="3440663250074896476">Vitendo zaidi katika <ph name="BOOKMARK_NAME" /></translation> <translation id="3441653493275994384">Skrini</translation> <translation id="3441663102605358937">Ingia katika <ph name="ACCOUNT" /> tena ili uthibitishe akaunti hii</translation> +<translation id="3442674350323953953">Ruhusu Google itumie data yako ya maunzi ili kusaidia kuboresha <ph name="DEVICE_OS" />. Ukikataa, data hii bado itatumwa kwa Google ili kubainisha masasisho yanayofaa, lakini haitahifadhiwa wala kutumiwa vinginevyo.</translation> <translation id="3444641828375597683">Watangazaji na wachapishaji wanaweza kutumia teknolojia ya FLoC, iliyofafanuliwa baadaye kwenye ukurasa huu.</translation> <translation id="3444726579402183581"><ph name="ORIGIN" /> itaweza kuangalia <ph name="FILENAME" /></translation> <translation id="3445047461171030979">Majibu ya haraka ya programu ya Mratibu wa Google</translation> @@ -2520,6 +2527,7 @@ <translation id="3569682580018832495"><ph name="ORIGIN" /> inaweza kuona faili na folda zifuatazo</translation> <translation id="3571734092741541777">Weka mipangilio</translation> <translation id="3575121482199441727">Ruhusu kutoka tovuti hii</translation> +<translation id="3577745545227000795">Ukusanyaji wa data ya maunzi unaofanywa na <ph name="DEVICE_OS" /></translation> <translation id="3578594933904494462">Maudhui ya kichupo hiki yanashirikiwa</translation> <translation id="3581605050355435601">Weka mipangilio ya Anwani ya IP kiotomatiki</translation> <translation id="3582057310199111521">Liliwekwa kwenye tovuti ya kulaghai na lilipatikana kwenye tukio la ufichuzi haramu wa data</translation> @@ -2961,6 +2969,7 @@ <translation id="3994374631886003300">Ifungue simu yako na uilete karibu ili ukifungue kifaa chako cha <ph name="DEVICE_TYPE" />.</translation> <translation id="3994878504415702912">&Kuza</translation> <translation id="3995138139523574647">Kifaa cha USB-C (mlango wa upande wa kulia nyuma)</translation> +<translation id="3995963973192100066">Cheza uhuishaji</translation> <translation id="4002329649066944389">Dhibiti hali zisizofuata kanuni katika tovuti mahususi</translation> <translation id="4002440992267487163">Mipangilio ya Pin</translation> <translation id="4005817994523282006">Mbinu ya kutambua saa za eneo</translation> @@ -3609,6 +3618,7 @@ <translation id="4728558894243024398">Mfumo wa uendeshaji</translation> <translation id="4728570203948182358"><ph name="BEGIN_LINK" />Msimamizi wako<ph name="END_LINK" /> amezima kipengele cha kukagua kama kompyuta yako ina programu hatari</translation> <translation id="4730492586225682674">Dokezo la hivi punde lililoandikwa kwa kutumia Stylus wakati skrini imefungwa</translation> +<translation id="4733161265940833579"><ph name="BATTERY_PERCENTAGE" />% (Kushoto)</translation> <translation id="4733793249294335256">Eneo</translation> <translation id="473546211690256853">Akaunti hii inadhibitiwa na <ph name="DOMAIN" /></translation> <translation id="4735803855089279419">Mfumo umeshindwa kubaini vitambulishi vya kifaa kwa kifaa hiki.</translation> @@ -4174,6 +4184,7 @@ <translation id="5341793073192892252">Vidakuzi vifuatavyo vilizuiwa (vidakuzi vyote vya washirika wengine vinazuiwa)</translation> <translation id="5342091991439452114">Lazima PIN iwe na angalau tarakimu <ph name="MINIMUM" /></translation> <translation id="5344036115151554031">Inarejesha Linux</translation> +<translation id="5344128444027639014"><ph name="BATTERY_PERCENTAGE" />% (Kulia)</translation> <translation id="5345916423802287046">Fungua programu unapoingia katika akaunti</translation> <translation id="5350293332385664455">Zima programu ya Mratibu wa Google</translation> <translation id="535123479159372765">Maandishi yamenakiliwa kutoka kwenye kifaa kingine</translation> @@ -4413,6 +4424,7 @@ <translation id="5585898376467608182">Nafasi ya hifadhi ya kifaa chako haitoshi. Unahitaji angalau nafasi ya <ph name="MINIMUM_SPACE" /> ili utumie <ph name="APP_NAME" />. Ili upate nafasi zaidi ya hifadhi, futa faili kwenye kifaa.</translation> <translation id="5585912436068747822">Uumbizaji umeshindwa</translation> <translation id="5588033542900357244">(<ph name="RATING_COUNT" />)</translation> +<translation id="5589101568518637088">Kifaa cha <ph name="DEVICE_INDEX" /> kati ya <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, Kibodi.</translation> <translation id="558918721941304263">Inapakia programu...</translation> <translation id="5592595402373377407">Bado hakuna data ya kutosha.</translation> <translation id="5595485650161345191">Badilisha anwani</translation> @@ -4614,6 +4626,7 @@ <translation id="5817069030404929329">Ungependa kuhamishia manenosiri kwenye Akaunti yako ya Google kutoka kwenye kifaa hiki?</translation> <translation id="5817918615728894473">Oanisha</translation> <translation id="5821565227679781414">Unda Njia Mkato</translation> +<translation id="5822095611691580107">Kiwango cha betri cha tumba la upande wa kushoto <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="5822865422567397338">Ili utafute tovuti mahususi au sehemu ya Chrome, unaweza kutumia njia hizi za mkato. Kwa mfano, ili utafute Gmail, andika "@gmail", kisha ubonyeze 'Tab' au kitufe cha Nafasi.</translation> <translation id="5825412242012995131">Imewashwa (Inapendekezwa)</translation> <translation id="5826395379250998812">Unganisha <ph name="DEVICE_TYPE" /> yako na simu yako. <ph name="LINK_BEGIN" />Pata maelezo zaidi<ph name="LINK_END" /></translation> @@ -5070,6 +5083,7 @@ <translation id="6294759976468837022">Kasi ya kipengele cha kuchanganua kiotomatiki</translation> <translation id="6295158916970320988">Tovuti zote</translation> <translation id="6295855836753816081">Inahifadhi...</translation> +<translation id="6297132509712149399">Kifaa cha <ph name="DEVICE_INDEX" /> kati ya <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, Simu.</translation> <translation id="629730747756840877">Akaunti</translation> <translation id="6298962879096096191">Tumia Google Play kusakinisha programu za Android</translation> <translation id="6300177430812514606">Zisizoruhusiwa kumaliza kutuma au kupokea data</translation> @@ -5283,6 +5297,9 @@ <translation id="6528179044667508675">Usinisumbue</translation> <translation id="652948702951888897">Historia ya Chrome</translation> <translation id="6530186581263215931">Mipangilio hii inatekelezwa na msimamizi wako</translation> +<translation id="653031671361866334"><ph name="BEGIN_PARAGRAPH1" />Ili kukupa hali bora zaidi ya utumiaji, <ph name="DEVICE_OS" /> hukusanya data ya maunzi kuhusu vifaa na kuishiriki na Google ili kubainisha masasisho yanayofaa kutolewa. Ukipenda, unaweza kuruhusu Google itumie data hii kwa madhumuni ya ziada kama vile kuimarisha na kuboresha huduma na hali ya utumiaji wa <ph name="DEVICE_OS" />.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />Unaweza kuingia katika akaunti kwenye kifaa hiki kisha utembelee sehemu ya CLOUDREADY_HARDWARE_INFO katika chrome://system ili uone data inayotumwa kwa Google kwa ajili ya kuchuja masasisho, pamoja na matukio yoyote mengine ambapo unaweza kuchagua kushiriki data na Google.<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" />Kwa maelezo zaidi kuhusu data ambayo <ph name="DEVICE_OS" /> inaweza kushiriki na Google na jinsi data hiyo inavyotumika, tembelea g.co/xxxxx<ph name="END_PARAGRAPH3" /></translation> <translation id="6531282281159901044">Hifadhi faili hatari</translation> <translation id="6532101170117367231">Hifadhi katika Hifadhi ya Google</translation> <translation id="6532106788206463496">Hifadhi mabadiliko</translation> @@ -5359,6 +5376,7 @@ <translation id="6601612474695404578">Baadhi ya tovuti hutumia vidakuzi vya mtu au kampuni nyingine ili kupakia kurasa zao. Iwapo tovuti haifanyi kazi, unaweza kujaribu kuruhusu vidakuzi.</translation> <translation id="6602937173026466876">Fikia printa zako</translation> <translation id="6602956230557165253">Tumia vitufe vya mshale wa kushoto na kulia kutalii.</translation> +<translation id="6602998402703530379">Kifaa cha <ph name="DEVICE_INDEX" /> kati ya <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, Kamera ya video.</translation> <translation id="6605847144724004692">Bado haijakadiriwa na watumiaji.</translation> <translation id="6606671997164410857">Inaonekana tayari umeweka mipangilio ya Mratibu wa Google kwenye kifaa kingine. Nufaika hata zaidi na programu ya Mratibu kwa kuwasha kipengele cha Muktadha wa skrini kwenye kifaa hiki.</translation> <translation id="6607831829715835317">Zana zaidi</translation> @@ -5380,6 +5398,7 @@ <translation id="6624535038674360844"><ph name="FILE_NAME" /> ina maudhui hatari au nyeti. Mwombe mmiliki airekebishe.</translation> <translation id="6624687053722465643">Utamu</translation> <translation id="6628328486509726751">Imepakia <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation> +<translation id="663065535202460123">Kifaa cha <ph name="DEVICE_INDEX" /> kati ya <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, Kipanya.</translation> <translation id="6630752851777525409"><ph name="EXTENSION_NAME" /> inataka idhini ya kudumu ya kufikia cheti ili kujithibitisha kwa niaba yako.</translation> <translation id="6635362468090274700">Hakuna mtu anayeweza kushiriki nawe hadi utakapofanya kifaa chako kionekane.<ph name="BR" /><ph name="BR" />Ili ufanye kifaa chako kionekane kwa muda, fungua eneo la hali kisha uwashe Uonekanaji wa karibu.</translation> <translation id="6635674640674343739">Imeshindwa kutambua muunganisho wa mtandao. Kagua muunganisho wako wa mtandao kisha ujaribu tena.</translation> @@ -5708,6 +5727,7 @@ <translation id="6973611239564315524">Sasisho la Debian 10 (Buster) linapatikana</translation> <translation id="6974609594866392343">Hali ya onyesho la nje ya mtando</translation> <translation id="697508444536771064">Zima Linux</translation> +<translation id="6977739184256564679">Kifaa cha <ph name="DEVICE_INDEX" /> kati ya <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, Kompyuta kibao.</translation> <translation id="6978121630131642226">Injini tafuti</translation> <translation id="6979044105893951891">Kuanzisha na kufunga vipindi vya mgeni vinavyodhibitiwa</translation> <translation id="6979158407327259162">Hifadhi ya Google</translation> @@ -5727,6 +5747,7 @@ <translation id="6991665348624301627">Chagua printa</translation> <translation id="6992554835374084304">Washa kikagua maendelezo kilichoboreshwa</translation> <translation id="6993000214273684335">Kichupo kimeondolewa kwenye kikundi ambacho hakina jina - <ph name="GROUP_CONTENTS" /></translation> +<translation id="6993889405941892667">Kifaa cha <ph name="DEVICE_INDEX" /> kati ya <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, Kompyuta.</translation> <translation id="6994069045767983299">Rangi zilizogeuzwa</translation> <translation id="6995899638241819463">Nionye ikiwa manenosiri yamefichuliwa katika tukio la ufichuzi haramu wa data</translation> <translation id="6997642619627518301">Kumbukumbu ya Shughuli ya - <ph name="NAME_PH" /></translation> @@ -6299,6 +6320,7 @@ <translation id="7602173054665172958">Udhibiti wa kuchapisha</translation> <translation id="7603785829538808504">Tovuti zilizoorodheshwa hapo chini hufuata mipangilio maalum</translation> <translation id="7605594153474022051">Kipengele cha usawazishaji hakifanyi kazi</translation> +<translation id="7606560865764296217">Sitisha uhuishaji</translation> <translation id="7606992457248886637">Mamlaka</translation> <translation id="7607002721634913082">Imepumzishwa</translation> <translation id="7608810328871051088">Mapendeleo ya Android</translation> @@ -7111,6 +7133,7 @@ <translation id="8410775397654368139">Google Play</translation> <translation id="8412136526970428322">Umeruhusu <ph name="PERMISSION" /> na zingine <ph name="COUNT" /></translation> <translation id="8413385045638830869">Uliza kwanza (imependekezwa)</translation> +<translation id="8416730306157376817"><ph name="BATTERY_PERCENTAGE" />% (Kifuniko)</translation> <translation id="8417548266957501132">Nenosiri la mzazi</translation> <translation id="8418445294933751433">Onye&sha kama kichupo</translation> <translation id="8419098111404128271">Matokeo ya utafutaji wa '<ph name="SEARCH_TEXT" />'</translation> @@ -7453,6 +7476,7 @@ <translation id="8775653927968399786">{0,plural, =1{<ph name="DEVICE_TYPE" /> yako itafungwa kiotomatiki baada ya sekunde #. <ph name="DOMAIN" /> inahitaji usiondoe kadi yako mahiri.}other{<ph name="DEVICE_TYPE" /> yako itafungwa kiotomatiki baada ya sekunde #. <ph name="DOMAIN" /> inahitaji usiondoe kadi yako mahiri.}}</translation> +<translation id="8777259617149177596">Kiwango cha betri cha kifuniko <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="8777628254805677039">nenosiri msingi</translation> <translation id="8778328560035799409">Swichi ulizozikabidhi kwa sasa zitaondolewa</translation> <translation id="8780123805589053431">Pata ufafanuzi wa picha kutoka Google</translation> @@ -7811,6 +7835,7 @@ <translation id="9128335130883257666">Fungua ukurasa wa mipangilio ya <ph name="INPUT_METHOD_NAME" /></translation> <translation id="9128870381267983090">Unganisha kwenye mtandao</translation> <translation id="9130015405878219958">Modi batili imeingizwa.</translation> +<translation id="9130215884425927484">Kifaa cha <ph name="DEVICE_INDEX" /> kati ya <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, Kifaa cha sauti.</translation> <translation id="9131487537093447019">Tuma na upokee barua kutoka kwenye vifaa vya Bluetooth.</translation> <translation id="9134066738478820307">Tovuti zinaweza kutumia vitambulishi kucheza maudhui yanayolindwa</translation> <translation id="913411432238655354">Rejesha programu kifaa kinapowashwa</translation> @@ -7854,6 +7879,7 @@ <translation id="916964310188958970">Kwa nini pendekezo hili?</translation> <translation id="9170048603158555829">Thunderbolt</translation> <translation id="9170061643796692986">Mipangilio ya sasa ya uonekanaji ni 'anwani zote'</translation> +<translation id="9170199455952690202">Kiwango cha betri cha tumba la upande wa kulia <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="9170848237812810038">&Tendua</translation> <translation id="9170884462774788842">Programu nyingine kwenye kompyuta yako iliongeza mandhari ambayo yanaweza kubadilisha jinsi Chrome inavyofanya kazi.</translation> <translation id="917350715406657904">Umefikisha kikomo cha muda uliowekwa na mzazi wako katika <ph name="APP_NAME" />. Utaweza kuitumia kwa <ph name="TIME_LIMIT" /> kesho.</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index 5eb914fa..3ae52dc 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -402,6 +402,7 @@ <translation id="1418954524306642206">பிரிண்ட்டர் PPDயைக் குறிப்பிட உலாவுக</translation> <translation id="1420834118113404499">மீடியா உரிமங்கள்</translation> <translation id="1420920093772172268">இணைக்க, <ph name="TURN_ON_BLUETOOTH_LINK" />ஐ அனுமதிக்கவும்</translation> +<translation id="1421934779300263861">சிதைவு அறிக்கைகள், பிழை அறிக்கைத் தரவு, உபயோகத் தரவு ஆகியவற்றை Googleளுக்குத் தானாக அனுப்புவதன் மூலம் Chrome & ChromeOS அம்சங்களையும் செயல்திறனையும் மேம்படுத்த உதவுங்கள். ஒருங்கிணைக்கப்பட்ட சில தரவு Android ஆப்ஸிற்கும் Google பார்ட்னர்களுக்கும் உதவும். உங்கள் Google கணக்கில் 'இணையம் மற்றும் ஆப்ஸ் செயல்பாடு' அமைப்பு இயக்கப்பட்டிருந்தால் உங்கள் Android தரவு உங்களுடைய Google கணக்கில் சேமிக்கப்படக்கூடும்.</translation> <translation id="1422159345171879700">பாதுகாப்பற்ற ஸ்கிரிப்ட்களை ஏற்று</translation> <translation id="1423716227250567100">இதனால்: <ph name="LINE_BREAKS" /> @@ -630,6 +631,8 @@ <translation id="163309982320328737">முழுமையான தொடக்க எழுத்துக்குறி அகலம்</translation> <translation id="1633947793238301227">Google Assistantடை முடக்கு</translation> <translation id="1634783886312010422">இந்தக் கடவுச்சொல்லை ஏற்கெனவே <ph name="WEBSITE" /> தளத்தில் மாற்றிவிட்டீர்களா?</translation> +<translation id="163712950892155760"><ph name="BEGIN_PARAGRAPH1" />ஆப்ஸ் தரவு என்பது தொடர்புகள், மெசேஜ்கள், படங்கள் போன்ற தரவு உட்பட ஆப்ஸ் சேமித்த (டெவெலப்பர் அமைப்புகளின் அடிப்படையில்) எந்தத் தரவாகவும் இருக்கலாம். உங்கள் Drive சேமிப்பக ஒதுக்கீட்டில் காப்புப் பிரதித் தரவு கணக்கிடப்படாது.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />இந்தச் சேவையை அமைப்புகளில் முடக்கலாம்.<ph name="END_PARAGRAPH2" /></translation> <translation id="1637224376458524414">இந்தப் புத்தகக்குறியை உங்கள் iPhone இல் பெறுங்கள்</translation> <translation id="1637350598157233081">கடவுச்சொல் உங்கள் சாதனத்தில் சேமிக்கப்பட்டது</translation> <translation id="1637765355341780467">சுயவிவரத்தைத் திறக்கும் போது, ஏதோ தவறாகிவிட்டது. சில அம்சங்கள் கிடைக்காமல் போகக்கூடும்.</translation> @@ -768,6 +771,7 @@ <translation id="1768212860412467516"><ph name="EXPERIMENT_NAME" /> குறித்துக் கருத்து வழங்குக.</translation> <translation id="1768278914020124551">அச்சச்சோ! உள்நுழைவுச் சேவையகத்தைத் தொடர்புகொள்வதில் பிழை ஏற்பட்டது. நெட்வொர்க் இணைப்பையும் டொமைன் பெயரையும் சரிபார்த்து, மீண்டும் முயலவும்.</translation> <translation id="1769104665586091481">இணைப்பை புதிய &சாளரத்தில் திற</translation> +<translation id="177053719077591686">Android ஆப்ஸை Google Driveவுக்குக் காப்புப் பிரதி எடுத்தல்.</translation> <translation id="177336675152937177">ஹோஸ்ட் செய்யப்பட்ட ஆப்ஸின் தரவு</translation> <translation id="1775706469381199282">Javascriptடைப் பயன்படுத்த தளங்களை அனுமதிக்காதே</translation> <translation id="1776712937009046120">பயனரைச் சேர்</translation> @@ -875,6 +879,7 @@ <translation id="186612162884103683">தேர்வுசெய்யப்பட்ட இடங்களில் உள்ள படங்கள், வீடியோ மற்றும் ஒலி ஃபைல்கள் ஆகியவற்றை "<ph name="EXTENSION" />" ஆல் படிக்க மற்றும் எழுத முடியும்.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> உங்கள் நிறுவலை நிறைவு செய்யத் தயாராக உள்ளது</translation> <translation id="1868553836791672080">கடவுச்சொல் சரிபார்ப்பு அம்சம் Chromiumமில் இல்லை</translation> +<translation id="1868617395637139709">Android ஆப்ஸிற்கும் சேவைகளுக்கும் இருப்பிடத்தைப் பயன்படுத்துதல்.</translation> <translation id="1869433484041798909">புக்மார்க் பட்டன்</translation> <translation id="1871098866036088250">Chrome உலாவியில் திற</translation> <translation id="187145082678092583">சில ஆப்ஸ்</translation> @@ -1335,6 +1340,7 @@ <translation id="2332192922827071008">விருப்பத்தேர்வுகளைத் திற</translation> <translation id="2332515770639153015">‘மேம்பட்ட பாதுகாப்பு உலாவல்’ அம்சம் இயக்கப்பட்டுள்ளது</translation> <translation id="2332742915001411729">இயல்புநிலைக்கு மீட்டமை</translation> +<translation id="2332948465534020594">‘தொந்தரவு செய்ய வேண்டாம்’ அம்சம் இயக்கப்பட்டுள்ளது</translation> <translation id="2335111415680198280">{0,plural, =1{# சாளரத்தை மூடுக}other{# சாளரங்களை மூடுக}}</translation> <translation id="2335122562899522968">இந்தப் பக்கம் குக்கீகளை அமைக்கும்.</translation> <translation id="2336228925368920074">அனைத்து தாவல்களையும் புக்மார்க்கிடுக...</translation> @@ -1480,6 +1486,7 @@ <translation id="2484959914739448251">உங்கள் ஒத்திசைக்கப்பட்ட சாதனங்கள் அனைத்திலிருந்தும் Google கணக்கிலிருந்தும் உலாவல் தரவை முழுமையாக அழிக்க, <ph name="BEGIN_LINK" />உங்கள் கடவுச்சொற்றொடரை உள்ளிடவும்<ph name="END_LINK" />.</translation> <translation id="2485394160472549611">உங்களுக்கான சிறந்த தேர்வுகள்</translation> <translation id="2485422356828889247">நிறுவல் நீக்கு</translation> +<translation id="2485681265915754872">Google Play சேவை விதிமுறைகள்</translation> <translation id="2487067538648443797">புதிய புத்தகக்குறியைச் சேர்</translation> <translation id="2487268545026948104">உங்கள் தரவை மீட்டெடுக்க இணையத்துடன் இணைக்கவும்</translation> <translation id="2489686758589235262">மேலும் 2 ஸ்விட்ச்சுகளை ஒதுக்கு</translation> @@ -1705,6 +1712,7 @@ <translation id="2721037002783622288"><ph name="SEARCH_ENGINE" /> இல் படத்தைத் &தேடு</translation> <translation id="2721334646575696520">Microsoft Edge</translation> <translation id="2721695630904737430">மேற்பார்வையிடப்படும் பயனர்களை உங்கள் நிர்வாகி முடக்கியுள்ளார்.</translation> +<translation id="2722540561488096675"><ph name="TIME_LEFT" /> கடந்ததும் சாதனம் ஷட் டவுன் ஆகும். சாதனத்தை மீண்டும் ஆன் செய்யும் முன்பு USBயை அகற்றவும். இதன் பிறகு <ph name="DEVICE_OS" /> ஐப் பயன்படுத்தலாம்.</translation> <translation id="2724841811573117416">WebRTC பதிவுகள்</translation> <translation id="272488616838512378">அலகு மாற்றம்</translation> <translation id="2725200716980197196">நெட்வொர்க் இணைப்பு மீட்டெடுக்கப்பட்டது</translation> @@ -2149,6 +2157,7 @@ <translation id="3162899666601560689">உங்கள் உலாவல் அனுபவத்தை மேம்படுத்துவதற்காக (எ.கா., உங்களை உள்நுழைந்தபடியே வைத்திருப்பது, உங்கள் ஷாப்பிங் கார்ட்டில் உள்ளவற்றை நினைவில் கொள்வது போன்றவை) குக்கீகளைத் தளங்கள் பயன்படுத்த முடியும்</translation> <translation id="3163201441334626963"><ph name="VENDOR_ID" /> அனுப்பிய <ph name="PRODUCT_ID" /> தயாரிப்பை அறிய முடியவில்லை.</translation> <translation id="3163254451837720982">பின்வரும் சேவைகள் உங்கள் தரவைப் பத்திரமாகவும் பாதுகாப்பாகவும் வைத்திருக்க உதவுகின்றன. நீங்கள் எந்த நேரத்திலும் இந்த அம்சங்களை முடக்கலாம்.</translation> +<translation id="3163511056918491211">எப்போது வேண்டுமானாலும் தரவை எளிதாக மீட்டெடுக்கலாம், சாதனங்களை மாற்றலாம். உங்களின் காப்புப் பிரதிகள் Googleளுக்குப் பதிவேற்றப்பட்டு, உங்கள் Google கணக்கின் கடவுச்சொல்லைப் பயன்படுத்தி என்க்ரிப்ஷன் செய்யப்படுகின்றன.</translation> <translation id="3164329792803560526"><ph name="APP_NAME" /> ஆப்ஸுடன் இந்தத் தாவலைப் பகிர்கிறது</translation> <translation id="3165390001037658081">சில தொலைத்தொடர்பு நிறுவனங்கள் இந்த அம்சத்தைத் தடுக்கலாம்.</translation> <translation id="316652501498554287">G Suite for Education கணக்குகள்</translation> @@ -2709,6 +2718,7 @@ <translation id="3771290962915251154">பெற்றோர் கட்டுப்பாடுகள் இயக்கத்தில் உள்ளதால் இந்த அமைப்பு முடக்கப்பட்டுள்ளது</translation> <translation id="3771294271822695279">வீடியோ ஃபைல்கள் </translation> <translation id="3771851622616482156">திறந்துள்ள பக்கங்களில் உள்ளவை உட்பட இந்தத் தளத்தில் இருந்தும் வெளியேற்றப்படுவீர்கள்</translation> +<translation id="3772046291955677288"><ph name="BEGIN_LINK1" />Google சேவை விதிமுறைகளையும்<ph name="END_LINK1" /> <ph name="BEGIN_LINK2" />Chrome, ChromeOS ஆகியவை தொடர்பான கூடுதல் சேவை விதிமுறைகளையும்<ph name="END_LINK2" /> படித்துவிட்டேன், அவற்றை ஏற்கிறேன்.</translation> <translation id="3775432569830822555">SSL சேவையக சான்றிதழ்</translation> <translation id="3775705724665058594">என் சாதனங்களுக்கு அனுப்பு</translation> <translation id="3776508619697147021">பல ஃபைல்களைத் தானாகப் பதிவிறக்க முயலும்போது தளங்கள் அனுமதி கேட்க வேண்டும்</translation> @@ -2741,6 +2751,7 @@ <translation id="3798449238516105146">பதிப்பு</translation> <translation id="3799128412641261490">ஸ்விட்ச் அணுகலுக்கான அமைப்புகள்</translation> <translation id="3800806661949714323">எல்லாம் காட்டு (பரிந்துரைக்கப்படுவது)</translation> +<translation id="3800828618615365228">Google Chrome & ChromeOS தொடர்பான கூடுதல் விதிமுறைகள்</translation> <translation id="380329542618494757">பெயர்</translation> <translation id="3803345858388753269">வீடியோவின் தரம்</translation> <translation id="380408572480438692">செயல்திறன் தரவின் சேகரிப்பை இயக்குவது, குறிப்பிட்ட காலத்தில் அமைப்பை மேம்படுத்த Googleளுக்கு உதவும். நீங்கள் செயல்திறன் தரவுடன் கருத்து அறிக்கையை (Alt-Shift-I) பதிவுசெய்யும் வரை தரவு எதுவும் அனுப்பப்படாது. சேகரிப்பை முடக்க நீங்கள் எப்போது வேண்டுமானாலும் இந்தத் திரைக்கு திரும்ப வரலாம்.</translation> @@ -2773,6 +2784,7 @@ <translation id="3826440694796503677">கூடுதல் Google கணக்குகளைச் சேர்ப்பதை உங்கள் நிர்வாகி முடக்கியுள்ளார்</translation> <translation id="3827774300009121996">&முழுத்திரை</translation> <translation id="3828029223314399057">புக்மார்க்குகளைத் தேடுதல்</translation> +<translation id="3828953470056652895"><ph name="BEGIN_LINK1" />Google சேவை விதிமுறைகள்<ph name="END_LINK1" />, <ph name="BEGIN_LINK2" />Chrome & ChromeOS தொடர்பான கூடுதல் சேவை விதிமுறைகள்<ph name="END_LINK2" />, <ph name="BEGIN_LINK3" />Play சேவை விதிமுறைகள்<ph name="END_LINK3" /> ஆகியவற்றைப் படித்துவிட்டேன், அவற்றை ஏற்கிறேன்.</translation> <translation id="3829765597456725595">SMB கோப்புப் பகிர்வு</translation> <translation id="3830654885961023588">{NUM_EXTENSIONS,plural, =1{தீங்கிழைக்கச் சாத்தியமுள்ள 1 நீட்டிப்பை உங்கள் நிர்வாகி மீண்டும் இயக்கியுள்ளார்}other{தீங்கிழைக்கச் சாத்தியமுள்ள {NUM_EXTENSIONS} நீட்டிப்புகளை உங்கள் நிர்வாகி மீண்டும் இயக்கியுள்ளார்}}</translation> <translation id="3831436149286513437">Google இயக்ககத் தேடல் பரிந்துரைகள்</translation> @@ -2951,6 +2963,9 @@ <translation id="3984431586879874039">உங்கள் பாதுகாப்பு விசையைப் பார்க்க இந்தத் தளத்தை அனுமதிக்கவா?</translation> <translation id="398477389655464998">ஹைலைட் செய்யப்பட்ட உரைக்கான இணைப்பை நகலெடு</translation> <translation id="3984862166739904574">'விரைவான பதில்கள்' அம்சம் வழங்கும் விளக்கம்</translation> +<translation id="3986164906089840270"><ph name="BEGIN_PARAGRAPH1" />தானியங்கு அறிக்கைகளை அனுப்ப ChromeOS சாதனங்களை அனுமதிப்பது ChromeOSஸில் எதை முதலில் சரிசெய்ய வேண்டும், மேம்படுத்த வேண்டும் என்பதை நாங்கள் தீர்மானிக்க உதவுகிறது. ChromeOS எப்போது செயலிழந்தது, என்னென்ன அம்சங்கள் பயன்படுத்தப்பட்டன, வழக்கமாக எவ்வளவு நினைவகம் பயன்படுத்தப்பட்டது போன்ற தகவல்கள் இந்த அறிக்கைகளில் இருக்கும்.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />உங்கள் Chrome சாதன அமைப்புகளுக்குச் சென்று, இந்த அறிக்கைகள் அனுப்பப்படுவதை எப்போது வேண்டுமானாலும் அனுமதிக்கலாம் அல்லது தடுக்கலாம். நீங்கள் டொமைன் நிர்வாகி எனில் நிர்வாகிக் கன்சோலில் இந்த அமைப்பை மாற்றலாம்.<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" />இந்த அம்சத்தை முடக்குவதால் சிஸ்டம் புதுப்பிப்புகள், பாதுகாப்பு போன்ற அத்தியாவசியச் சேவைகளைப் பெறத் தேவைப்படும் தகவல்களை அனுப்புவதற்கான உங்கள் சாதனத்தின் திறனில் பாதிப்பு ஏற்படாது.<ph name="END_PARAGRAPH3" /></translation> <translation id="3987544746655539083">எனது இருப்பிடத் தகவலை இந்தத் தளம் அணுகுவதைத் தொடர்ந்து தடு</translation> <translation id="3987938432087324095">புரியவில்லை.</translation> <translation id="3987993985790029246">இணைப்பை நகலெடு</translation> @@ -3118,6 +3133,7 @@ <translation id="4184885522552335684">திரையை நகர்த்த, இழுக்கவும்</translation> <translation id="4187424053537113647"><ph name="APP_NAME" /> ஆப்ஸை அமைக்கிறது...</translation> <translation id="4190828427319282529">கீபோர்டு ஃபோக்கஸைத் தனிப்படுத்து</translation> +<translation id="4193836101014293726">இந்தச் சுயவிவரத்தை நீக்க முடியவில்லை</translation> <translation id="419427585139779713">ஒரு நேரத்தில் ஓர் அசையை மட்டும் உள்ளிடு</translation> <translation id="4194570336751258953">கிளிக்குக்கு தட்டுவதை இயக்கு</translation> <translation id="4195643157523330669">புதிய தாவலில் திற</translation> @@ -3208,12 +3224,16 @@ <translation id="4297219207642690536">மீண்டும் தொடங்கி, மீட்டமை</translation> <translation id="4297813521149011456">காட்சி சுழற்சி</translation> <translation id="4299022904780065004">புதிய &மறைநிலைச் சாளரம்</translation> +<translation id="4301011537467809690"><ph name="BEGIN_PARAGRAPH1" />தானியங்கு அறிக்கைகளை அனுப்ப ChromeOS சாதனங்களை அனுமதிப்பது ChromeOSஸில் எதை முதலில் சரிசெய்ய வேண்டும், மேம்படுத்த வேண்டும் என்பதை நாங்கள் தீர்மானிக்க உதவுகிறது. ChromeOS எப்போது செயலிழந்தது, என்னென்ன அம்சங்கள் பயன்படுத்தப்பட்டன, வழக்கமாக எவ்வளவு நினைவகம் பயன்படுத்தப்பட்டது போன்ற தகவல்கள் இந்த அறிக்கைகளில் இருக்கும்.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />உங்கள் பிள்ளையின் ChromeOS சாதன அமைப்புகளுக்குச் சென்று, இந்த அறிக்கைகள் அனுப்பப்படுவதை எப்போது வேண்டுமானாலும் அனுமதிக்கலாம் அல்லது தடுக்கலாம். நீங்கள் டொமைன் நிர்வாகி எனில் நிர்வாகிக் கன்சோலில் இந்த அமைப்பை மாற்றலாம்.<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" />இந்த அம்சத்தை முடக்குவதால் சிஸ்டம் புதுப்பிப்புகள், பாதுகாப்பு போன்ற அத்தியாவசியச் சேவைகளைப் பெறத் தேவைப்படும் தகவல்களை அனுப்புவதற்கான இந்தச் சாதனத்தின் திறனில் பாதிப்பு ஏற்படாது.<ph name="END_PARAGRAPH3" /></translation> <translation id="4301671483919369635">ஃபைல்களைத் திருத்த இந்தப் பக்கத்திற்கு அனுமதி உள்ளது</translation> <translation id="4303079906735388947">உங்கள் பாதுகாப்பு விசைக்கு புதிய பின்னை அமைக்கவும்</translation> <translation id="4305402730127028764"><ph name="DEVICE_NAME" />க்கு நகலெடு</translation> <translation id="4305817255990598646">மாறு</translation> <translation id="4306119971288449206">ஆப்ஸ் "<ph name="CONTENT_TYPE" />" எனும் உள்ளடக்க வகையுடனேயே வழங்கப்பட வேண்டும்</translation> <translation id="4307992518367153382">அடிப்படைகள்</translation> +<translation id="4309165024397827958">இருப்பிட அனுமதி உள்ள Android ஆப்ஸையும் சேவைகளையும் உங்கள் சாதனத்தின் இருப்பிடத்தைப் பயன்படுத்த அனுமதிக்கும். இருப்பிடத் துல்லியத்தையும் இருப்பிடம் சார்ந்த சேவைகளையும் மேம்படுத்த Google அவ்வப்போது இருப்பிடத் தரவைச் சேகரித்து, அடையாளத்தை வெளிப்படுத்தாமல் பயன்படுத்தக்கூடும்.</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K பயன்பாட்டில்)</translation> <translation id="4310139701823742692">ஃபைல் தவறான வடிவமைப்பில் உள்ளது. PPD ஃபைலைச் சரிபார்த்து, மீண்டும் முயலவும்.</translation> <translation id="431076611119798497">&விவரங்கள்</translation> @@ -3293,6 +3313,7 @@ <translation id="4400632832271803360">மேல் வரிசையில் உள்ள விசைகளின் செயல்பாட்டை மாற்ற, தொடக்கி விசையைத் தொடர்ந்து அழுத்திப் பிடிக்கவும்</translation> <translation id="4400963414856942668">தாவலை புக்மார்க் செய்ய நட்சத்திரத்தை கிளிக் செய்யலாம்</translation> <translation id="4402755511846832236">இந்தச் சாதனத்தில் நீங்கள் செயலில் இருப்பது குறித்துத் தளங்கள் அறிந்துகொள்வதைத் தடுக்கும்</translation> +<translation id="4403266582403435904">எப்போது வேண்டுமானாலும் தரவை எளிதாக மீட்டெடுக்கலாம் அல்லது புதிய சாதனங்களுக்குத் தரவை மாற்றலாம். காப்புப் பிரதிகள் Googleளுக்குப் பதிவேற்றப்பட்டு, உங்கள் பிள்ளையின் Google கணக்கின் கடவுச்சொல்லைப் பயன்படுத்தி என்க்ரிப்ஷன் செய்யப்படுகின்றன.</translation> <translation id="4403775189117163360">வேறு ஃபோல்டரைத் தேர்வுசெய்</translation> <translation id="4404136731284211429">மீண்டும் ஸ்கேன் செய்</translation> <translation id="4404843640767531781">உங்கள் பெற்றோரால் <ph name="APP_NAME" /> தடுக்கப்பட்டுள்ளது. இந்த ஆப்ஸைப் பயன்படுத்த உங்கள் பெற்றோரிடம் அனுமதி கேட்கவும்.</translation> @@ -3631,6 +3652,7 @@ <translation id="4768332406694066911">உங்களை அடையாளங்காணும் இந்த நிறுவனங்களின் சான்றிதழ்கள் உள்ளன</translation> <translation id="4770119228883592393">அணுகல் கோரப்பட்டுள்ளது, பதிலளிக்க ⌘ + Option + கீழ்நோக்கிய அம்புக்குறி விசைகளை அழுத்தவும்</translation> <translation id="4773112038801431077">Linuxஸை மேம்படுத்தல்</translation> +<translation id="4775142426314270551">சிதைவு அறிக்கைகள், பிழை அறிக்கைத் தரவு, உபயோகத் தரவு ஆகியவற்றை Googleளுக்குத் தானாக அனுப்புவதன் மூலம் Chrome & ChromeOS அம்சங்களையும் செயல்திறனையும் மேம்படுத்த உதவுங்கள். ஒருங்கிணைக்கப்பட்ட சில தரவு Android ஆப்ஸிற்கும் Google பார்ட்னர்களுக்கும் உதவும். உங்கள் பிள்ளையின் Google கணக்கில் 'இணையம் மற்றும் ஆப்ஸ் செயல்பாடு' அமைப்பு இயக்கப்பட்டிருந்தால் அவரது Android தரவு அவருடைய Google கணக்கில் சேமிக்கப்படக்கூடும்.</translation> <translation id="477647109558161443">டெஸ்க்டாப் ஷார்ட்கட்டை உருவாக்கு</translation> <translation id="4776594120007763294">பின்னர் வாசிப்பதற்கு ஒரு பக்கத்தைச் சேர்க்க, பட்டனைக் கிளிக் செய்யவும்</translation> <translation id="4777458362738635055">இந்தச் சாதனத்தின் பிற பயனர்களும் இந்த நெட்வொர்க்கைப் பயன்படுத்தலாம்</translation> @@ -3659,6 +3681,7 @@ <translation id="4801512016965057443">மொபைல் டேட்டா ரோமிங்கை அனுமதி</translation> <translation id="4804818685124855865">தொடர்பைத் துண்டி</translation> <translation id="4804827417948292437">அவகாடோ</translation> +<translation id="4806457879608775995">இந்த விதிமுறைகளைச் சரிபார்த்து உங்கள் தரவைக் கட்டுப்படுத்துங்கள்</translation> <translation id="4807098396393229769">அட்டையிலுள்ள பெயர் </translation> <translation id="4808024018088054533">தீங்கிழைக்கும் மென்பொருளை உங்கள் கம்ப்யூட்டரில் Chrome கண்டறியவில்லை • சரிபார்க்கப்பட்டது: சற்றுமுன்</translation> <translation id="4808667324955055115">பாப்-அப்கள் தடுக்கப்பட்டுள்ளன</translation> @@ -4026,6 +4049,8 @@ <translation id="5192652123103143854">Chrome OSஸின் சாதனத் தகவல்களையும் சாதனத் தரவையும் படித்தல் & பிழைகளைக் கண்டறிவதற்கான சோதனைகளைச் செய்தல்.</translation> <translation id="5193988420012215838">கிளிப்போர்டுக்கு நகலெடுக்கப்பட்டது</translation> <translation id="5194256020863090856">மறைநிலைச் சாளரங்களில் மட்டுமே தரவு அழிக்கப்படும்</translation> +<translation id="5195863934285556588"><ph name="BEGIN_PARAGRAPH1" />இந்தச் சாதனத்தின் இருப்பிடத்தைக் கணக்கிடுவதற்காக வைஃபை, மொபைல் நெட்வொர்க்குகள், சென்சார்கள் போன்றவற்றை Googleளின் இருப்பிடச் சேவை பயன்படுத்தும்.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />'அமைப்புகள் > ஆப்ஸ் > Google Play Store > Android விருப்பத்தேர்வுகளை நிர்வகித்தல் > பாதுகாப்பு & இருப்பிடம் > இருப்பிடம்' என்பதற்குச் சென்று இந்தச் சாதனத்தில் Android இருப்பிட அமைப்பை எப்போது வேண்டுமானாலும் முடக்கலாம். அதே மெனுவில் இருக்கும் "Google இருப்பிடத் துல்லியம்" என்பதை முடக்குவதன் மூலம் Android இருப்பிட அமைப்பிற்காக வைஃபை, மொபைல் நெட்வொர்க்குகள், சென்சார்கள் ஆகியவை பயன்படுத்தப்படுவதையும் முடக்கலாம்.<ph name="END_PARAGRAPH2" /></translation> <translation id="5197255632782567636">இணையம்</translation> <translation id="5198430103906431024">உபயோகம் மற்றும் பிழை கண்டறிதல் தரவை அனுப்பவும். பிழை கண்டறிதல் தரவு, சாதனம் மற்றும் ஆப்ஸ் உபயோகத் தரவு போன்றவற்றை இந்தச் சாதனம் தற்போது Googleளுக்குத் தானாக அனுப்புகிறது. இது சிஸ்டம் மற்றும் ஆப்ஸின் நிலைத்தன்மையை மேம்படுத்தவும் பிற மேம்பாடுகளைச் செய்யவும் உதவும். ஒருங்கிணைக்கப்பட்ட சில தரவு, Google ஆப்ஸுக்கும் Android டெவெலப்பர்கள் போன்ற கூட்டாளர்களுக்கும் உதவும். கூடுதல் ’இணையம் & ஆப்ஸ் செயல்பாடு’ அமைப்பு இயக்கப்பட்டிருந்தால், இந்தத் தரவு உங்கள் Google கணக்கில் சேமிக்கப்படக்கூடும்.</translation> <translation id="5199729219167945352">சோதனைகள்</translation> @@ -4154,6 +4179,7 @@ <translation id="5331069282670671859">உங்களிடம் இந்த வகையான சான்றிதழ்கள் இல்லை</translation> <translation id="5331425616433531170">"<ph name="CHROME_EXTENSION_NAME" />" இணைய விரும்புகிறது</translation> <translation id="5331975486040154427">USB-C சாதனம் (இடது பக்கம் பின்னே இருக்கும் போர்ட்)</translation> +<translation id="5333896723098573627">ஆப்ஸை அகற்ற, ‘அமைப்புகள் > ஆப்ஸ் > Google Play Store > Android விருப்பத்தேர்வுகளை நிர்வகித்தல் > ஆப்ஸ் அல்லது ஆப்ஸ் நிர்வாகி’ என்பதற்குச் செல்லவும். அதன்பிறகு, நிறுவல் நீக்க விரும்பும் ஆப்ஸைத் தட்டவும் (ஆப்ஸைக் கண்டறிய வலப்புறமோ இடப்புறமோ ஸ்வைப் செய்ய வேண்டியிருக்கலாம்). பின்னர், ‘நிறுவல் நீக்கு’ அல்லது ‘முடக்கு’ என்பதைத் தட்டவும்.</translation> <translation id="5334142896108694079">ஸ்கிரிப்ட் தற்காலிக சேமிப்பு</translation> <translation id="5336126339807372270">USB சாதனங்களை அணுக, எந்தத் தளத்தையும் அனுமதிக்காதே</translation> <translation id="5336688142483283574"><ph name="SEARCH_ENGINE" /> செயல்பாட்டிலிருந்தும் 'இதுவரை தேடியவற்றிலிருந்தும்' இந்தப் பக்கம் அகற்றப்படும்.</translation> @@ -4234,6 +4260,7 @@ <translation id="5425863515030416387">சாதனங்களில் எளிதில் உள்நுழையவும்</translation> <translation id="5427278936122846523">எப்போதும் மொழிபெயர்</translation> <translation id="5427459444770871191">&வலஞ்சுழியாகச் சுற்று</translation> +<translation id="542750953150239272">தொடர்வதன் மூலம் Google, உங்கள் மொபைல் நிறுவனம், உங்கள் சாதனத்தின் உற்பத்தியாளர் ஆகியோரிடமிருந்து புதுப்பிப்புகளையும் ஆப்ஸையும் மொபைல் டேட்டா மூலம் இந்தச் சாதனம் தானாகவே பதிவிறக்கி, நிறுவக்கூடும் என்பதை ஏற்கிறீர்கள். 'ஆப்ஸில் வாங்குதல்' வசதி சில ஆப்ஸில் இருக்கலாம்.</translation> <translation id="5428850089342283580"><ph name="ACCNAME_APP" /> (புதுப்பித்தல் இருக்கிறது)</translation> <translation id="5429373054983029602"><ph name="VISUAL_SEARCH_PROVIDER" /> மூலம் திரையில் இருப்பவற்றைத் தேடு</translation> <translation id="542948651837270806">Trusted Platform Module நிலைபொருளுக்கான புதுப்பிப்பை நிறுவ வேண்டும். <ph name="TPM_FIRMWARE_UPDATE_LINK" />ஐக் காட்டு</translation> @@ -4277,6 +4304,7 @@ <translation id="5471768120198416576">வணக்கம்! நான் தான் உங்கள் உரையைப் பேசும் குரல்</translation> <translation id="5472627187093107397">இந்தத் தளத்திற்காகக் கடவுச்சொற்களைச் சேமி</translation> <translation id="5473075389972733037">IBM</translation> +<translation id="5473099001878321374">தொடர்வதன் மூலம், Google, உங்கள் பிள்ளையின் மொபைல் நிறுவனம், இந்தச் சாதனத்தின் உற்பத்தியாளர் ஆகியோரிடமிருந்து புதுப்பிப்புகளையும் ஆப்ஸையும் மொபைல் டேட்டா மூலம் இந்தச் சாதனம் தானாகவே பதிவிறக்கி, நிறுவக்கூடும் என்பதை ஏற்கிறீர்கள். 'ஆப்ஸில் வாங்குதல்' வசதி சில ஆப்ஸில் இருக்கலாம்.</translation> <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{பின்(PIN) குறைந்தது 1 எழுத்தைக் கொண்டிருக்க வேண்டும்}other{பின்(PIN) குறைந்தது # எழுத்துகளைக் கொண்டிருக்க வேண்டும்}}</translation> <translation id="5474859849784484111">இப்போதே வைஃபையுடன் இணைத்து புதுப்பிப்பைப் பதிவிறக்குமாறு <ph name="MANAGER" /> கோருகிறது. அல்லது கட்டண நெட்வொர்க் இணைப்பின் மூலம் இதைப் பதிவிறக்கலாம் (கட்டணங்கள் விதிக்கப்படலாம்).</translation> <translation id="5481273127572794904">பல ஃபைல்களைத் தானாகவே பதிவிறக்க அனுமதி இல்லாத தளங்கள்</translation> @@ -4457,6 +4485,10 @@ <translation id="5642508497713047">CRL கையொப்பமிடுநர்</translation> <translation id="5643321261065707929">கட்டண நெட்வொர்க்</translation> <translation id="5643620609347735571">அழித்து, தொடர்க</translation> +<translation id="5644722238761632789"><ph name="BEGIN_PARAGRAPH1" />சிதைவு அறிக்கைகள், பிழை அறிக்கைத் தரவு, உபயோகத் தரவு ஆகியவற்றை Googleளுக்குத் தானாக அனுப்புவதன் மூலம் Chrome & ChromeOS அம்சங்களையும் செயல்திறனையும் மேம்படுத்த உதவுங்கள்.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />உங்கள் ChromeOS சாதன அமைப்புகளுக்குச் சென்று, இந்த அறிக்கைகள் அனுப்பப்படுவதை எப்போது வேண்டுமானாலும் அனுமதிக்கலாம் அல்லது தடுக்கலாம். நீங்கள் டொமைன் நிர்வாகி எனில் நிர்வாகிக் கன்சோலில் இந்த அமைப்பை மாற்றலாம்.<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" />இந்த அம்சத்தை முடக்குவதால் சிஸ்டம் புதுப்பிப்புகள், பாதுகாப்பு போன்ற அத்தியாவசியச் சேவைகளைப் பெறத் தேவைப்படும் தகவல்களை அனுப்புவதற்கான உங்கள் சாதனத்தின் திறனில் பாதிப்பு ஏற்படாது.<ph name="END_PARAGRAPH3" /> + <ph name="BEGIN_PARAGRAPH4" />உங்கள் Google கணக்கில் 'இணையம் மற்றும் ஆப்ஸ் செயல்பாடு' அமைப்பு இயக்கப்பட்டிருந்தால் உங்கள் Android தரவு உங்களுடைய Google கணக்கில் சேமிக்கப்படக்கூடும். account.google.com தளத்தில் உங்களின் தரவைப் பார்க்கலாம், நீக்கலாம், கணக்கு அமைப்புகளை மாற்றலாம்.<ph name="END_PARAGRAPH4" /></translation> <translation id="5646376287012673985">இருப்பிடம்</translation> <translation id="5646558797914161501">தொழிலதிபர்</translation> <translation id="5648166631817621825">கடந்த 7 நாட்கள்</translation> @@ -4539,6 +4571,7 @@ <translation id="5739235828260127894">சரிபார்ப்புக்காகக் காத்திருக்கிறது. <ph name="LINK_BEGIN" />மேலும் அறிக<ph name="LINK_END" /></translation> <translation id="5739458112391494395">மிகப் பெரியது</translation> <translation id="5740328398383587084">அருகிலுள்ளவற்றுடன் பகிர்தல்</translation> +<translation id="5740709157181662145"><ph name="DEVICE_OS" /> வன்பொருள் ஆதரவு மற்றும் நிலைப்புத்தன்மை</translation> <translation id="574104302965107104">காட்சி பிரதிபலித்தல்</translation> <translation id="574209121243317957">குரல் அழுத்தம்</translation> <translation id="5746169159649715125">PDFஆக சேமி</translation> @@ -4818,6 +4851,10 @@ <translation id="6047632800149092791">ஒத்திசைவு செயல்படவில்லை. வெளியேறி, மீண்டும் உள்நுழையவும்.</translation> <translation id="6049797270917061226">தீங்கிழைப்பவர்கள் உங்கள் தனிப்பட்ட தகவல்களைத் திருட இந்த ஃபைல் அனுமதிக்கக்கூடும்.</translation> <translation id="6051354611314852653">அச்சச்சோ! இந்தச் சாதனத்திற்கான API அணுகலை சிஸ்டம் அங்கீகரிக்கத் தவறியது.</translation> +<translation id="6051638103735819069"><ph name="BEGIN_PARAGRAPH1" />தானியங்கு அறிக்கைகளை அனுப்ப ChromeOS சாதனங்களை அனுமதிப்பது ChromeOSஸில் எதை முதலில் சரிசெய்ய வேண்டும், மேம்படுத்த வேண்டும் என்பதை நாங்கள் தீர்மானிக்க உதவுகிறது. ChromeOS எப்போது செயலிழந்தது, என்னென்ன அம்சங்கள் பயன்படுத்தப்பட்டன, வழக்கமாக எவ்வளவு நினைவகம் பயன்படுத்தப்பட்டது, Android ஆப்ஸ் தொடர்பான பிழை அறிக்கைத் தரவு & உபயோகத் தரவு போன்ற தகவல்கள் இந்த அறிக்கைகளில் இருக்கும். ஒருங்கிணைக்கப்பட்ட சில தரவு Google ஆப்ஸிற்கும் Android டெவெலப்பர்கள் போன்ற பார்ட்னர்களுக்கும் உதவும்.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />உங்கள் பிள்ளையின் ChromeOS சாதன அமைப்புகளுக்குச் சென்று, இந்த அறிக்கைகள் அனுப்பப்படுவதை எப்போது வேண்டுமானாலும் அனுமதிக்கலாம் அல்லது தடுக்கலாம். நீங்கள் டொமைன் நிர்வாகி எனில் நிர்வாகிக் கன்சோலில் இந்த அமைப்பை மாற்றலாம்.<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" />இந்த அம்சத்தை முடக்குவதால் சிஸ்டம் புதுப்பிப்புகள், பாதுகாப்பு போன்ற அத்தியாவசியச் சேவைகளைப் பெறத் தேவைப்படும் தகவல்களை அனுப்புவதற்கான இந்தச் சாதனத்தின் திறனில் பாதிப்பு ஏற்படாது.<ph name="END_PARAGRAPH3" /> + <ph name="BEGIN_PARAGRAPH4" />உங்கள் பிள்ளையின் Google கணக்கில் 'இணையம் மற்றும் ஆப்ஸ் செயல்பாடு' அமைப்பு இயக்கப்பட்டிருந்தால் அவரது தரவு அவருடைய Google கணக்கில் சேமிக்கப்படக்கூடும். இந்த அமைப்புகள் குறித்தும் அவற்றை எவ்வாறு மாற்றலாம் என்பது குறித்தும் families.google.com தளத்திற்குச் சென்று மேலும் அறிந்துகொள்ளுங்கள்.<ph name="END_PARAGRAPH4" /></translation> <translation id="6052976518993719690">SSL சான்றிதழ் அங்கீகாரம்</translation> <translation id="6053401458108962351">&உலாவல் தரவை அழி...</translation> <translation id="6054284857788651331">சமீபத்தில் மூடப்பட்ட தாவல் குழு</translation> @@ -5290,6 +5327,8 @@ <translation id="6545665334409411530">மீண்டும் இயக்குவதன் வீதம்</translation> <translation id="6545867563032584178">Mac சிஸ்டம் விருப்பத்தேர்வுகளில் மைக்ரோஃபோன் முடக்கப்பட்டுள்ளது</translation> <translation id="6547354035488017500">குறைந்தது 512 மெ.பை. இடத்தைக் காலியாக்கவும் அல்லது உங்கள் சாதனம் இயங்காது. இடத்தைக் காலியாக்க, சாதனத்தின் சேமிப்பகத்தில் இருந்து கோப்புகளை நீக்கவும்.</translation> +<translation id="6547854317475115430"><ph name="BEGIN_PARAGRAPH1" />உங்கள் சாதனத்தின் இருப்பிடத்தைக் கணக்கிடுவதற்காக வைஃபை, மொபைல் நெட்வொர்க்குகள், சென்சார்கள் போன்றவற்றை Googleளின் இருப்பிடச் சேவை பயன்படுத்தும்.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />'அமைப்புகள் > ஆப்ஸ் > Google Play Store > Android விருப்பத்தேர்வுகளை நிர்வகித்தல் > பாதுகாப்பு & இருப்பிடம் > இருப்பிடம்' என்பதற்குச் சென்று உங்கள் சாதனத்தில் Android இருப்பிட அமைப்பை எப்போது வேண்டுமானாலும் முடக்கலாம். அதே மெனுவில் இருக்கும் "Google இருப்பிடத் துல்லியம்" என்பதை முடக்குவதன் மூலம் Android இருப்பிட அமைப்பிற்காக வைஃபை, மொபைல் நெட்வொர்க்குகள், சென்சார்கள் ஆகியவை பயன்படுத்தப்படுவதையும் முடக்கலாம்.<ph name="END_PARAGRAPH2" /></translation> <translation id="654871471440386944">சுட்டி உலாவலை இயக்கவா?</translation> <translation id="6549038875972762904">அமைவை மீண்டும்செய்</translation> <translation id="6550675742724504774">விருப்பத்தேர்வுகள்</translation> @@ -5475,6 +5514,7 @@ <translation id="6746124502594467657">கீழே நகர்த்து</translation> <translation id="674632704103926902">தட்டி இழுப்பதை இயக்கு</translation> <translation id="6748465660675848252">தொடர்ந்தாலும், ஒத்திசைக்கப்பட்ட தரவும் அமைப்புகளும் மட்டுமே மீட்டெடுக்கப்படும். சிஸ்டத்தின் அகத் தரவு முழுவதையும் இழப்பீர்கள்.</translation> +<translation id="6748980958975836188"><ph name="BEGIN_LINK1" />Google சேவை விதிமுறைகளையும்<ph name="END_LINK1" />, <ph name="BEGIN_LINK2" />Chrome & ChromeOS தொடர்பான கூடுதல் சேவை விதிமுறைகளையும்<ph name="END_LINK2" /> படித்துவிட்டேன், அவற்றை ஏற்கிறேன்.</translation> <translation id="6750757184909117990">செல்லுலார் இணைப்பை முடக்கு</translation> <translation id="6750946710563435348">வேறொரு பயனர்பெயரைப் பயன்படுத்தவும்</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (மறைநிலை)</translation> @@ -5496,6 +5536,8 @@ <translation id="677965093459947883">மிகச் சிறியது</translation> <translation id="6781005693196527806">&தேடல் இன்ஜின்களை நிர்வகிக்கவும்...</translation> <translation id="6781284683813954823">Doodle இணைப்பு</translation> +<translation id="6781658011335120230"><ph name="BEGIN_PARAGRAPH1" />ஆப்ஸ் தரவு என்பது தொடர்புகள், மெசேஜ்கள், படங்கள் போன்ற தரவு உட்பட ஆப்ஸ் சேமித்த (டெவெலப்பர் அமைப்புகளின் அடிப்படையில்) எந்தத் தரவாகவும் இருக்கலாம். உங்கள் பிள்ளையின் Drive சேமிப்பக ஒதுக்கீட்டில் காப்புப் பிரதித் தரவு கணக்கிடப்படாது.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />இந்தச் சேவையை அமைப்புகளில் முடக்கலாம்.<ph name="END_PARAGRAPH2" /></translation> <translation id="6781978626986383437">Linux காப்புப் பிரதி ரத்துசெய்யப்பட்டது</translation> <translation id="6782067259631821405">தவறான பின்</translation> <translation id="6784523122863989144">இந்தச் சுயவிவரத்தில் பயன்படுத்தலாம்</translation> @@ -5848,6 +5890,7 @@ <translation id="7125148293026877011">Crostiniயை நீக்கு</translation> <translation id="7127980134843952133">பதிவிறக்க வரலாறு</translation> <translation id="7128151990937044829">அறிவிப்புகள் தடுக்கப்படும்போது முகவரிப் பட்டியில் இண்டிக்கேட்டர் ஒன்றைக் காட்டு</translation> +<translation id="7130890260487814974">உபயோகம் & பிழை கண்டறிதல் தரவை அனுப்புங்கள்.</translation> <translation id="7131040479572660648">உங்கள் தரவை <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> மற்றும் <ph name="WEBSITE_3" /> இல் படித்தல்</translation> <translation id="713122686776214250">பக்&கத்தைச் சேர்...</translation> <translation id="7134098520442464001">உரையைச் சிறிதாக்குக </translation> @@ -6096,10 +6139,12 @@ <translation id="7409735910987429903">தளங்கள் விளம்பரங்களைக் காட்டுவதற்காகப் பாப்-அப்களை அனுப்பக்கூடும் அல்லது நீங்கள் பார்க்க விரும்பாத இணையதளங்களைக் காட்டுவதற்காகத் திசைதிருப்புதல்களைப் பயன்படுத்தக்கூடும்</translation> <translation id="7409854300652085600">புக்மார்க்குகள் இறக்கப்பட்டன.</translation> <translation id="7410344089573941623">உங்கள் கேமராவையும் மைக்ரோஃபோனையும் <ph name="HOST" /> அணுக வேண்டுமெனில் கேட்க வேண்டும்</translation> +<translation id="7410852728357935715">சாதனத்திற்கு அலைபரப்பு</translation> <translation id="741204030948306876">ஏற்கிறேன்</translation> <translation id="7412226954991670867">GPU நினைவகம்</translation> <translation id="7414464185801331860">18x</translation> <translation id="7415454883318062233">அமைவு முடிந்தது</translation> +<translation id="7416263748877373774">சேவை விதிமுறைகளை ஏற்ற முடியவில்லை. நெட்வொர்க் இணைப்பைச் சரிபார்த்து மீண்டும் முயலவும்.</translation> <translation id="7416362041876611053">அறியப்படாத நெட்வொர்க் பிழை.</translation> <translation id="741906494724992817">இந்தப் பயன்பாட்டிற்கு சிறப்பு அனுமதிகள் தேவையில்லை.</translation> <translation id="7419565702166471774">பாதுகாப்பான இணைப்புகளை எப்போதும் பயன்படுத்து</translation> @@ -6859,6 +6904,7 @@ <translation id="8146177459103116374">இந்த சாதனத்தில் ஏற்கனவே பதிவுசெய்திருந்தால், <ph name="LINK2_START" />நடப்புப் பயனராக உள்நுழையலாம்<ph name="LINK2_END" />.</translation> <translation id="8146287226035613638">விருப்பமான மொழிகளைச் சேர்த்து வரிசைப்படுத்தலாம். இணையதளங்கள் அந்த மொழிகளில் காட்டப்படும் (கிடைக்கும்பட்சத்தில்). இந்த விருப்பத்தேர்வுகள் உங்கள் உலாவி அமைப்புகளுடன் ஒத்திசைக்கப்படும். <ph name="BEGIN_LINK_LEARN_MORE" />மேலும் அறிக<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="8146793085009540321">உள்நுழைய முடியவில்லை. உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும் அல்லது மீண்டும் முயலவும்.</translation> +<translation id="8147346945017130012">சிதைவு அறிக்கைகள், பிழை அறிக்கைத் தரவு, உபயோகத் தரவு ஆகியவற்றை Googleளுக்குத் தானாக அனுப்புவதன் மூலம் Chrome & ChromeOS அம்சங்களையும் செயல்திறனையும் மேம்படுத்த உதவுங்கள்.</translation> <translation id="8147900440966275470"><ph name="NUM" /> தாவல் உள்ளது</translation> <translation id="8148760431881541277">உள்நுழைவைக் கட்டுப்படுத்துதல்</translation> <translation id="8149564499626272569">USB கேபிளுடன் இணைக்கப்பட்டுள்ள எனது மொபைல் வழியாகச் சரிபார்</translation> @@ -7090,6 +7136,7 @@ <translation id="8404893580027489425"><ph name="DEVICE_TYPE" /> இன் வலதுபக்கத்தில் கைரேகை சென்சார் உள்ளது. ஏதேனும் ஒரு விரலால் அதை மெதுவாகத் தொடவும்.</translation> <translation id="8405046151008197676">சமீபத்திய புதுப்பிப்பில் இருந்து முக்கியத் தகவல்களைப் பெறுங்கள்</translation> <translation id="8407199357649073301">பதிவு நிலை:</translation> +<translation id="8408270600235826886">Googleளுடன் என்னென்ன தரவு பகிரப்பட வேண்டும் என்பதை நீங்கள் கட்டுப்படுத்தலாம். இதை எப்போது வேண்டுமானாலும் அமைப்புகளில் மாற்றிக்கொள்ளலாம். Googleளின் <ph name="BEGIN_LINK" />தனியுரிமைக் கொள்கைக்கு<ph name="END_LINK" /> உட்பட்டு தரவு பயன்படுத்தப்படும்.</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8412136526970428322"><ph name="PERMISSION" />, மேலும் <ph name="COUNT" /> அனுமதிகள் வழங்கப்பட்டுள்ளன</translation> <translation id="8413385045638830869">முதலில் கேள் (பரிந்துரைத்தது)</translation> @@ -7273,6 +7320,7 @@ <translation id="862727964348362408">இடைநீக்கப்பட்டது</translation> <translation id="862750493060684461">CSS தற்காலிக சேமிப்பு</translation> <translation id="8627795981664801467">பாதுகாப்பான இணைப்புகள் மட்டும்</translation> +<translation id="8627804903623428808">இந்த விதிமுறைகளைச் சரிபார்த்து உங்கள் பிள்ளையின் தரவைக் கட்டுப்படுத்துங்கள்</translation> <translation id="8630338733867813168">சார்ஜ் செய்யும்போது செயலற்ற நிலை</translation> <translation id="8631032106121706562">பெட்டல்ஸ்</translation> <translation id="863109444997383731">அறிவிப்புகளைக் காட்ட வேண்டுமா எனக் கேட்காதபடி தளங்கள் தடுக்கப்படும். ஒரு தளம் அறிவிப்புகளைக் காட்ட விரும்பினால், முகவரிப் பட்டியில் தடுக்கப்பட்டது என்ற இண்டிக்கேட்டர் காட்டப்படும்.</translation> @@ -7537,6 +7585,7 @@ <translation id="8872155268274985541">தவறான கியாஸ்க் வெளிப்புற புதுப்பிப்பு மெனிஃபெஸ்ட் ஃபைல் கண்டறியப்பட்டது. கியாஸ்க் ஆப்ஸைப் புதுப்பித்தல் தோல்வியுற்றது. USB சாதனத்தை அகற்றவும்.</translation> <translation id="8872777911145321141">விர்ச்சுவல் ரியாலிட்டி சாதனத்தையும் தரவையும் தளங்கள் பயன்படுத்த விரும்பினால் அனுமதி கேள் (பரிந்துரைக்கப்படுகிறது)</translation> <translation id="8874184842967597500">இணைக்கப்படவில்லை</translation> +<translation id="8874341931345877644">சாதனத்திற்கு அலைபரப்புங்கள்:</translation> <translation id="8875520811099717934">Linux மேம்பாடு</translation> <translation id="8875736897340638404">தெரிவுநிலையைத் தேர்வுசெய்க</translation> <translation id="8876307312329369159">டெமோ அமர்வில் இந்த அமைப்பை மாற்ற முடியாது.</translation> @@ -7728,6 +7777,7 @@ Google சேகரிக்கும் தரவையும் அவற்றை ஏன் சேகரிக்கிறது என்பதையும் <ph name="BEGIN_LINK2" />policies.google.com<ph name="END_LINK2" /> தளத்தில் அறிந்துகொள்ளலாம்.</translation> <translation id="9066777626153702300">செயலற்ற தளங்கள்</translation> <translation id="9066782832737749352">உரையிலிருந்து பேச்சு</translation> +<translation id="9068298336633421551">இருப்பிட அனுமதி உள்ள Android ஆப்ஸையும் சேவைகளையும் இந்தச் சாதனத்தின் இருப்பிடத்தைப் பயன்படுத்த அனுமதிக்கும். இருப்பிடத் துல்லியத்தையும் இருப்பிடம் சார்ந்த சேவைகளையும் மேம்படுத்த Google அவ்வப்போது இருப்பிடத் தரவைச் சேகரித்து, அடையாளத்தை வெளிப்படுத்தாமல் பயன்படுத்தக்கூடும்.</translation> <translation id="9068878141610261315">ஆதரிக்கப்படாத கோப்பு வகை</translation> <translation id="9070342919388027491">தாவல் இடதுபுறம் நகர்த்தப்பட்டது</translation> <translation id="9074739597929991885">புளூடூத்</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index fa593db..075609b 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -134,6 +134,7 @@ <translation id="1129850422003387628">యాప్లను మేనేజ్ చేయండి</translation> <translation id="113050636487300043">ప్రొఫైల్ల మధ్య తేడా కనిపించేలా పేరు, రంగు రూపాన్ని ఎంచుకోండి</translation> <translation id="1130589222747246278"><ph name="WINDOW_TITLE" /> - <ph name="GROUP_NAME" /> గ్రూప్లో భాగం</translation> +<translation id="1130676589211693127">కుడి వైపు వైర్లెస్ బడ్ బ్యాటరీ స్థాయి <ph name="PERCENTAGE" />%.</translation> <translation id="1133418583142946603">ప్రస్తుత ట్యాబ్ను జోడించండి</translation> <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_COUNT" />లో <ph name="EMOJI_INDEX" />వది.</translation> <translation id="1136712381129578788">చాలా ఎక్కువ సార్లు తప్పు పిన్ను నమోదు చేసినందున సెక్యూరిటీ కీ లాక్ చేయబడింది. అన్లాక్ చేయడానికి, దానిని తీసివేసి, మళ్లీ ఇన్సర్ట్ చేయండి.</translation> @@ -1655,6 +1656,7 @@ <translation id="2665647207431876759">గడువు ముగిసింది</translation> <translation id="2665717534925640469">ఇప్పుడు ఈ పేజీ పూర్తి స్క్రీన్ మరియు మీ మౌస్ కర్సర్ను నిలిపివేసింది.</translation> <translation id="2665919335226618153">అయ్యో! ఫార్మాటింగ్ సమయంలో ఎర్రర్ ఏర్పడింది.</translation> +<translation id="2666247341166669829">ఎడమ వైపు వైర్లెస్ బడ్ బ్యాటరీ స్థాయి <ph name="PERCENTAGE" />%.</translation> <translation id="2667144577800272420">ఇతర యాప్లు, <ph name="APP_NAME" /> తెరిచిన అవే లింక్లను తెరవడానికి సిద్ధంగా ఉన్నాయి. ఇది సపోర్ట్ చేయబడిన లింక్లను తెరవకుండా <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" />ను డిజేబుల్ చేస్తుంది.</translation> <translation id="2667463864537187133">స్పెల్ చెక్ను మేనేజ్ చేయండి</translation> <translation id="2669241540496514785"><ph name="APP_NAME" />ను తెరవడం సాధ్యపడలేదు</translation> @@ -1709,6 +1711,7 @@ <translation id="2721037002783622288">చిత్రం కోసం <ph name="SEARCH_ENGINE" />లో &శోధించండి</translation> <translation id="2721334646575696520">Microsoft Edge</translation> <translation id="2721695630904737430">పర్యవేక్షిత వినియోగదారులను మీ నిర్వాహకులు నిలిపివేశారు.</translation> +<translation id="2722540561488096675">మీ పరికరం <ph name="TIME_LEFT" />లో షట్ డౌన్ అవుతుంది. మీ పరికరాన్ని తిరిగి ఆన్ చేయడానికి ముందే USBని తీసివేయండి. తర్వాత మీరు <ph name="DEVICE_OS" />ను ఉపయోగించడం ప్రారంభించవచ్చు.</translation> <translation id="2724841811573117416">WebRTC లాగ్లు</translation> <translation id="272488616838512378">యూనిట్ మార్పిడి</translation> <translation id="2725200716980197196">నెట్వర్క్ కనెక్టివిటీ పునరుద్ధరించబడింది</translation> @@ -1973,6 +1976,7 @@ <translation id="2979639724566107830">కొత్త విండోలో తెరువు</translation> <translation id="2981113813906970160">పెద్ద మౌస్ కర్సర్ను చూపు</translation> <translation id="2981474224638493138">ట్యాబ్/డెస్క్టాప్ ప్రొజెక్షన్ క్వాలిటీ</translation> +<translation id="2983373101216420412">కేస్ బ్యాటరీ స్థాయి <ph name="PERCENTAGE" />%.</translation> <translation id="2985348301114641460">"<ph name="EXTENSION_NAME" />"ను ఇన్స్టాల్ చేయడానికి మీ అడ్మినిస్ట్రేటర్కు రిక్వెస్ట్ పంపాలా?</translation> <translation id="2987620471460279764">ఇతర పరికరం నుండి షేర్ చేయబడిన వచనం</translation> <translation id="2988018669686457659">స్పేర్ రెండరర్</translation> @@ -2029,6 +2033,7 @@ <translation id="3030967311408872958">సూర్యాస్తమయం నుండి సూర్యోదయం వరకు</translation> <translation id="3031417829280473749">ఏజెంట్ X</translation> <translation id="3031557471081358569">దిగుమతి చెయ్యడానికి ఐటమ్లను ఎంచుకోండి:</translation> +<translation id="3033348223765101500">మీ డేటాను కంట్రోల్ చేయండి</translation> <translation id="3036327949511794916">ఈ <ph name="DEVICE_TYPE" />ని తిరిగిచ్చే గడువు తేదీ గడువు దాటింది.</translation> <translation id="3036546437875325427">ఫ్లాష్ను ప్రారంభించు</translation> <translation id="3037754279345160234">డొమైన్లో చేరడానికి కాన్ఫిగరేషన్ను అన్వయించడం సాధ్యపడలేదు. దయచేసి మీ నిర్వాహకుడిని సంప్రదించండి.</translation> @@ -2129,6 +2134,7 @@ <translation id="3143754809889689516">ప్రారంభం నుండి ప్లే చేయి</translation> <translation id="3144647712221361880">లింక్ను దీని తరపున తెరువు</translation> <translation id="3149510190863420837">Chrome యాప్లు</translation> +<translation id="3150622786624965651"><ph name="DEVICE_COUNT" />లో <ph name="DEVICE_INDEX" /> పరికరం, <ph name="DEVICE_NAME" />, గేమ్ కంట్రోలర్.</translation> <translation id="3150693969729403281">ఇప్పుడే భద్రతా తనిఖీని రన్ చేయండి</translation> <translation id="3150927491400159470">నిర్బంధంగా మళ్లీ లోడ్ చేయి</translation> <translation id="315116470104423982">మొబైల్ డేటా</translation> @@ -2336,6 +2342,7 @@ <translation id="339178315942519818">మీ <ph name="DEVICE_TYPE" />లో చాట్ యాప్ల నుండి నోటిఫికేషన్లను చూడండి</translation> <translation id="3393554941209044235">Chrome డాక్యుమెంట్ అనాలిసిస్</translation> <translation id="3394850431319394743">సురక్షితమైన కంటెంట్ను ప్లే చేయడానికి, ఐడెంటిఫయర్లను ఉపయోగించడం అనుమతించబడింది</translation> +<translation id="3395403082745257596"><ph name="DEVICE_COUNT" />లో <ph name="DEVICE_INDEX" /> పరికరం, <ph name="DEVICE_NAME" />, తెలియని పరికర రకం.</translation> <translation id="3396744558790608201">మీరు వెబ్లో బ్రౌజింగ్, షాపింగ్ చేస్తున్నప్పుడు మీరు చూసే విజువల్ కంటెంట్ గురించి మరింత తెలుసుకోవడానికి ఆ సైట్లో ఏదైనా ఏరియాను సెర్చ్ చేయడానికి కుడి క్లిక్ చేసి, "Google Lensతో ఇమేజ్లను సెర్చ్ చేయండి"ని ఎంచుకోండి.</translation> <translation id="3396800784455899911">"నేను అంగీకరిస్తున్నాను" బటన్ని క్లిక్ చేయడం ద్వారా, ఈ Google సేవల కోసం ఎగువ పేర్కొన్న వాటిని ప్రాసెస్ చేయడానికి మీరు అంగీకరిస్తున్నారు.</translation> <translation id="339722927132407568">స్తంభనలు</translation> @@ -2391,6 +2398,7 @@ <translation id="3440663250074896476"><ph name="BOOKMARK_NAME" /> కోసం మరిన్ని చర్యలు</translation> <translation id="3441653493275994384">స్క్రీన్</translation> <translation id="3441663102605358937">ఈ ఖాతాను వెరిఫై చేయడానికి, <ph name="ACCOUNT" />కు మళ్లీ సైన్ ఇన్ చేయండి</translation> +<translation id="3442674350323953953"><ph name="DEVICE_OS" />ను మెరుగుపరచడంలో సహాయపడేందుకు మీ హార్డ్వేర్ డేటాను ఉపయోగించడానికి Googleకు అనుమతినివ్వండి. మీరు తిరస్కరిస్తే, సరైన అప్డేట్లను గుర్తించడానికి ఈ డేటా ఇప్పటికీ Googleకు పంపబడుతుంది, కానీ ఇది స్టోర్ చేయబడదు లేదా ఉపయోగించబడదు.</translation> <translation id="3444641828375597683">అడ్వర్టయిజర్లు, పబ్లిషర్లు FLoCను ఉపయోగించవచ్చు, ఈ పేజీలో తర్వాత వివరించబడింది.</translation> <translation id="3444726579402183581"><ph name="ORIGIN" />, <ph name="FILENAME" />ను చూడగలుగుతుంది</translation> <translation id="3445047461171030979">Google Assistant త్వరిత సమాధానాలు</translation> @@ -2523,6 +2531,7 @@ <translation id="3569682580018832495"><ph name="ORIGIN" />, కింద ఉన్న ఫైళ్లను, ఫోల్డర్లను చూడగలదు</translation> <translation id="3571734092741541777">సెటప్ చేయి</translation> <translation id="3575121482199441727">ఈ సైట్కు అనుమతించు</translation> +<translation id="3577745545227000795"><ph name="DEVICE_OS" /> హార్డ్వేర్ డేటా సేకరణ</translation> <translation id="3578594933904494462">ఈ ట్యాబ్ యొక్క కంటెంట్ భాగస్వామ్యం చేయబడుతోంది.</translation> <translation id="3581605050355435601">ఆటో కాన్ఫిగర్ IP అడ్రస్</translation> <translation id="3582057310199111521">మోసపూరిత సైట్లో ఎంటర్ చేయబడింది, డేటా ఉల్లంఘనలో కనుగొనబడింది</translation> @@ -2964,6 +2973,7 @@ <translation id="3994374631886003300">మీ <ph name="DEVICE_TYPE" />ను అన్లాక్ చేయడానికి, మీ ఫోన్ను అన్లాక్ చేసి దానిని దగ్గరికి తీసుకురండి.</translation> <translation id="3994878504415702912">&జూమ్ చేయి</translation> <translation id="3995138139523574647">USB-C పరికరం (కుడివైపు వెనుక పోర్ట్)</translation> +<translation id="3995963973192100066">యానిమేషన్ను ప్లే చేయండి</translation> <translation id="4002329649066944389">సైట్కు ప్రత్యేకమైన మినహాయింపులను మేనేజ్ చేయండి</translation> <translation id="4002440992267487163">పిన్ సెటప్</translation> <translation id="4005817994523282006">సమయ మండలి గుర్తింపు పద్ధతి</translation> @@ -3614,6 +3624,7 @@ <translation id="4728558894243024398">ప్లాట్ఫారమ్</translation> <translation id="4728570203948182358">ప్రమాదకరమైన సాఫ్ట్వేర్ కోసం చెక్ చేయడాన్ని <ph name="BEGIN_LINK" />మీ అడ్మినిస్ట్రేటర్<ph name="END_LINK" /> ఆఫ్ చేశారు</translation> <translation id="4730492586225682674">స్టైలస్ లాక్ స్క్రీన్పై తాజా గమనిక</translation> +<translation id="4733161265940833579"><ph name="BATTERY_PERCENTAGE" />% (ఎడమ)</translation> <translation id="4733793249294335256">లొకేషన్</translation> <translation id="473546211690256853">ఈ ఖాతాను <ph name="DOMAIN" /> మేనేజ్ చేస్తోంది</translation> <translation id="4735803855089279419">ఈ పరికర ఐడెంటిఫైయర్లను గుర్తించడంలో సిస్టమ్ విఫలమైంది.</translation> @@ -4179,6 +4190,7 @@ <translation id="5341793073192892252">కింది కుక్కీలు బ్లాక్ చేయబడ్డాయి (మూడవ-పక్ష కుక్కీలన్నీ, మినహాయింపు లేకుండా బ్లాక్ చేయబడుతున్నాయి)</translation> <translation id="5342091991439452114">PIN తప్పనిసరిగా కనీసం <ph name="MINIMUM" /> అంకెలు ఉండాలి</translation> <translation id="5344036115151554031">Linux రీస్టోర్ చేయబడుతోంది</translation> +<translation id="5344128444027639014"><ph name="BATTERY_PERCENTAGE" />% (కుడి)</translation> <translation id="5345916423802287046">మీరు సైన్ ఇన్ చేసినప్పుడు యాప్ను ప్రారంభించండి</translation> <translation id="5350293332385664455">Google Assistantను ఆఫ్ చేయండి</translation> <translation id="535123479159372765">ఇతర పరికరం నుండి కాపీ చేసిన వచనం</translation> @@ -4418,6 +4430,7 @@ <translation id="5585898376467608182">మీ పరికరంలో స్టోరేజ్ తక్కువగా ఉంది. <ph name="APP_NAME" />ను ఉపయోగించడానికి, కనీసం <ph name="MINIMUM_SPACE" /> ఖాళీ స్పేస్ అవసరం. తగిన ఖాళీ స్పేస్ కోసం, పరికరం నుండి ఫైల్స్ను తొలగించండి.</translation> <translation id="5585912436068747822">ఆకృతీకరణ విఫలమైంది</translation> <translation id="5588033542900357244">(<ph name="RATING_COUNT" />)</translation> +<translation id="5589101568518637088"><ph name="DEVICE_COUNT" />లో <ph name="DEVICE_INDEX" /> పరికరం, <ph name="DEVICE_NAME" />, కీబోర్డ్.</translation> <translation id="558918721941304263">యాప్లను లోడ్ చేస్తోంది...</translation> <translation id="5592595402373377407">ఇంకా తగినంత డేటా అందుబాటులో లేదు.</translation> <translation id="5595485650161345191">అడ్రస్ను సవరించు</translation> @@ -4556,6 +4569,7 @@ <translation id="5739235828260127894">ధృవీకరణ కోసం వేచి ఉంది. <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation> <translation id="5739458112391494395">చాలా పెద్దవిగా</translation> <translation id="5740328398383587084">సమీప షేరింగ్</translation> +<translation id="5740709157181662145"><ph name="DEVICE_OS" /> హార్డ్వేర్ సపోర్ట్, స్థిరత్వం</translation> <translation id="574104302965107104">డిస్ప్లే మిర్రరింగ్</translation> <translation id="574209121243317957">పిచ్</translation> <translation id="5746169159649715125">PDF లాగా సేవ్ చేయి</translation> @@ -4619,6 +4633,7 @@ <translation id="5817069030404929329">ఈ పరికరం నుండి మీ Google ఖాతాకు పాస్వర్డ్లను తరలించాలా?</translation> <translation id="5817918615728894473">జత చేయి</translation> <translation id="5821565227679781414">షార్ట్కట్ను సృష్టించు</translation> +<translation id="5822095611691580107">ఎడమ వైపు బడ్ బ్యాటరీ స్థాయి <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="5822865422567397338">నిర్దిష్ట సైట్ లేదా Chromeలో భాగాన్ని సెర్చ్ చేయడానికి, మీరు ఇక్కడ షార్ట్కట్లను ఉపయోగించవచ్చు. ఉదాహరణకు, Gmailను మాత్రమే సెర్చ్ చేయాలంటే, "@gmail" అని టైప్ చేసి, ఆపై Tab లేదా Spaceను నొక్కండి.</translation> <translation id="5825412242012995131">ఆన్ (సిఫార్సు చేయడమైనది)</translation> <translation id="5826395379250998812">మీ <ph name="DEVICE_TYPE" />ను మీ ఫోన్తో కనెక్ట్ చేయండి. <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation> @@ -5075,6 +5090,7 @@ <translation id="6294759976468837022">ఆటో-స్కాన్ వేగం</translation> <translation id="6295158916970320988">అన్ని సైట్లు</translation> <translation id="6295855836753816081">సేవ్ చేస్తోంది...</translation> +<translation id="6297132509712149399"><ph name="DEVICE_COUNT" />లో <ph name="DEVICE_INDEX" /> పరికరం, <ph name="DEVICE_NAME" />, ఫోన్.</translation> <translation id="629730747756840877">ఖాతా</translation> <translation id="6298962879096096191">Android యాప్లను ఇన్స్టాల్ చేయడానికి Google Playను ఉపయోగిస్తుంది</translation> <translation id="6300177430812514606">డేటాను పంపడాన్ని లేదా అందుకోవడాన్ని పూర్తి చేయడానికి అనుమతించబడలేదు</translation> @@ -5288,6 +5304,9 @@ <translation id="6528179044667508675">అంతరాయం వద్దు</translation> <translation id="652948702951888897">Chrome చరిత్ర</translation> <translation id="6530186581263215931">ఈ సెట్టింగ్లు మీ నిర్వాహకుడి ద్వారా అమలు చేయబడ్డాయి</translation> +<translation id="653031671361866334"><ph name="BEGIN_PARAGRAPH1" />అత్యుత్తమ అనుభవం అందించడానికి, పరికరాలకు సంబంధించిన హార్డ్వేర్ డేటాను <ph name="DEVICE_OS" /> సేకరిస్తుంది, అలాగే ఏ అప్డేట్లను డెలివరీ చేయాలో నిర్ణయించడం కోసం Googleకు దీనిని షేర్ చేస్తుంది. ఆప్షనల్గా, <ph name="DEVICE_OS" /> అనుభవం, సర్వీస్కు సపోర్ట్, మెరుగుదలల వంటి అదనపు ప్రయోజనాల కోసం ఈ డేటాను Google వినియోగించేందుకు మీరు అనుమతించవచ్చు.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />అప్డేట్లను ఫిల్టర్ చేయడానికి Googleకు పంపిన డేటాను, అలాగే మీరు Googleతో డేటాను షేర్ చేయడానికి ఎంచుకున్న ఏ ఇతర సందర్భాలను అయినా చూడటానికి ఈ పరికరంలో లాగిన్ చేసి, chrome://systemలోని CLOUDREADY_HARDWARE_INFO విభాగాన్ని సందర్శించండి.<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" /><ph name="DEVICE_OS" /> Googleతో షేర్ చేసే డేటా గురించి, అలాగే ఆ డేటా ఎలా ఉపయోగించబడుతుంది అనే దానికి సంబంధించిన మరిన్ని వివరాల కోసం, g.co/xxxxxను సందర్శించండి<ph name="END_PARAGRAPH3" /></translation> <translation id="6531282281159901044">అపాయకరమైన ఫైల్ను అలాగే ఉంచు</translation> <translation id="6532101170117367231">Google డిస్క్కు సేవ్ చేయండి</translation> <translation id="6532106788206463496">మార్పులను సేవ్ చేయి</translation> @@ -5364,6 +5383,7 @@ <translation id="6601612474695404578">కొన్ని సైట్లు వాటి పేజీలను లోడ్ చేయడానికి థర్డ్-పార్టీ కుక్కీలను ఉపయోగిస్తాయి. ఏదైనా ఒక సైట్ పని చేయకపోతే, మీరు కుక్కీలను అనుమతించి ప్రయత్నించవచ్చు.</translation> <translation id="6602937173026466876">మీ ప్రింటర్లను యాక్సెస్ చేయండి</translation> <translation id="6602956230557165253">నావిగేట్ చేయడానికి ఎడమ మరియు కుడి బాణం కీలను ఉపయోగించండి.</translation> +<translation id="6602998402703530379"><ph name="DEVICE_COUNT" />లో <ph name="DEVICE_INDEX" /> పరికరం, <ph name="DEVICE_NAME" />, వీడియో కెమెరా.</translation> <translation id="6605847144724004692">ఇంకా ఏ వినియోగదారులు రేట్ చేయలేదు.</translation> <translation id="6606671997164410857">మీరు ఇప్పటికే మరో పరికరంలో Google Assistantను సెటప్ చేసినట్టుగా అనిపిస్తోంది. ఈ పరికరంలో స్క్రీన్ కాంటెక్స్ట్ను ఆన్ చేయడం ద్వారా Assistant నుండి మరిన్ని ప్రయోజనాలను పొందండి.</translation> <translation id="6607831829715835317">మరిన్ని సాధనా&లు</translation> @@ -5385,6 +5405,7 @@ <translation id="6624535038674360844"><ph name="FILE_NAME" />, గోప్యమైన, లేదా హానికరమైన కంటెంట్ను కలిగి ఉంది. పరిష్కరించమని ఫైల్ యజమానిని అడగండి.</translation> <translation id="6624687053722465643">తియ్యదనం</translation> <translation id="6628328486509726751">అప్లోడ్ చేయబడినది <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation> +<translation id="663065535202460123"><ph name="DEVICE_COUNT" />లో <ph name="DEVICE_INDEX" /> పరికరం, <ph name="DEVICE_NAME" />, మౌస్.</translation> <translation id="6630752851777525409"><ph name="EXTENSION_NAME" /> మీ తరపున దానికదే ప్రామాణీకరించుకోవడం కోసం ఒక ప్రమాణపత్రానికి శాశ్వత యాక్సెస్ కోరుతోంది.</translation> <translation id="6635362468090274700">మీరు మీ సమీప షేరింగ్ విజిబిలిటీ సెట్టింగ్ను 'కనిపించు'కు సెట్ చేసేంత వరకు మీతో ఎవరూ షేర్ చేయలేరు.<ph name="BR" /><ph name="BR" />మీ సెట్టింగ్ను తాత్కాలికంగా 'కనిపించు'గా ఉంచడానికి స్టేటస్ ప్రాంతాన్ని తెరిచి, ఆపై సమీప విజిబిలిటీని ఆన్ చేయండి.</translation> <translation id="6635674640674343739">నెట్వర్క్ కనెక్షన్ను ఏర్పాటు చేయడం సాధ్యపడలేదు. మీ నెట్వర్క్ కనెక్షన్ను చెక్ చేసి, మళ్లీ ట్రై చేయండి.</translation> @@ -5713,6 +5734,7 @@ <translation id="6973611239564315524">Debian 10 (Buster)కు అప్గ్రేడ్ అందుబాటులో ఉంది</translation> <translation id="6974609594866392343">ఆఫ్లైన్ డెమో మోడ్</translation> <translation id="697508444536771064">Linuxను షట్ డౌన్ చేయండి</translation> +<translation id="6977739184256564679"><ph name="DEVICE_COUNT" />లో <ph name="DEVICE_INDEX" /> పరికరం, <ph name="DEVICE_NAME" />, టాబ్లెట్.</translation> <translation id="6978121630131642226">శోధన ఇంజిన్లు</translation> <translation id="6979044105893951891">నిర్వాహిత అతిథి సెషన్లను ప్రారంభించడం మరియు విడిచిపెట్టడం</translation> <translation id="6979158407327259162">Google Drive</translation> @@ -5732,6 +5754,7 @@ <translation id="6991665348624301627">గమ్యస్థానాన్ని ఎంచుకోండి</translation> <translation id="6992554835374084304">మెరుగైన స్పెల్ చెక్ను ఆన్ చేయండి</translation> <translation id="6993000214273684335">పేరులేని గ్రూప్ నుండి ట్యాబ్ తొలగించబడింది - <ph name="GROUP_CONTENTS" /></translation> +<translation id="6993889405941892667"><ph name="DEVICE_COUNT" />లో <ph name="DEVICE_INDEX" /> పరికరం, <ph name="DEVICE_NAME" />, కంప్యూటర్.</translation> <translation id="6994069045767983299">రంగుల మధ్య బేధం ఎక్కువగా ఉండే మోడ్</translation> <translation id="6995899638241819463">మీరు ఉపయోగించే పాస్వర్డ్లు, ఏదైనా డేటా ఉల్లంఘనలో బహిర్గతమైతే మిమ్మల్ని హెచ్చరిస్తుంది</translation> <translation id="6997642619627518301"><ph name="NAME_PH" /> - యాక్టివిటీ లాగ్</translation> @@ -6304,6 +6327,7 @@ <translation id="7602173054665172958">ప్రింట్ మేనేజ్మెంట్</translation> <translation id="7603785829538808504">దిగువున లిస్ట్ చేయబడిన సైట్లు అనుకూల సెట్టింగ్ను ఫాలో అవుతాయి</translation> <translation id="7605594153474022051">సింక్ పని చేయడం లేదు</translation> +<translation id="7606560865764296217">యానిమేషన్ను పాజ్ చేయండి</translation> <translation id="7606992457248886637">అధికారాలు</translation> <translation id="7607002721634913082">పాజ్ చెయ్యబడింది</translation> <translation id="7608810328871051088">Android ప్రాధాన్యతలు</translation> @@ -7110,6 +7134,7 @@ <translation id="8410775397654368139">Google Play</translation> <translation id="8412136526970428322"><ph name="PERMISSION" />, మరో <ph name="COUNT" /> అనుమతించబడ్డాయి</translation> <translation id="8413385045638830869">ముందుగా అడుగు (సిఫార్సు చేయబడింది)</translation> +<translation id="8416730306157376817"><ph name="BATTERY_PERCENTAGE" />% (కేస్)</translation> <translation id="8417548266957501132">తల్లి/తండ్రి పాస్వర్డ్</translation> <translation id="8418445294933751433">&ట్యాబ్ లాగా చూపండి</translation> <translation id="8419098111404128271">'<ph name="SEARCH_TEXT" />' కోసం శోధన ఫలితాలు</translation> @@ -7452,6 +7477,7 @@ <translation id="8775653927968399786">{0,plural, =1{మీ <ph name="DEVICE_TYPE" /> # సెకనులో ఆటోమేటిక్గా లాక్ చేయబడుతుంది. మీ స్మార్ట్ కార్డ్ను ఇన్సర్ట్ చేసి ఉంచమని <ph name="DOMAIN" /> మిమ్మల్ని కోరుతుంది.}other{మీ <ph name="DEVICE_TYPE" /> # సెకన్లలో ఆటోమేటిక్గా లాక్ చేయబడుతుంది. మీ స్మార్ట్ కార్డ్ను ఇన్సర్ట్ చేసి ఉంచమని <ph name="DOMAIN" /> మిమ్మల్ని కోరుతుంది.}}</translation> +<translation id="8777259617149177596">కేస్ బ్యాటరీ స్థాయి <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="8777628254805677039">మూల పాస్వర్డ్</translation> <translation id="8778328560035799409">మీ ప్రస్తుత అసైన్ చేయబడిన స్విచ్లు క్లియర్ చేయబడతాయి</translation> <translation id="8780123805589053431">Google నుండి చిత్ర వివరణలను పొందండి</translation> @@ -7810,6 +7836,7 @@ <translation id="9128335130883257666"><ph name="INPUT_METHOD_NAME" /> కోసం సెట్టింగ్ల పేజీని తెరవండి</translation> <translation id="9128870381267983090">నెట్వర్క్కి కనెక్ట్ చేయి</translation> <translation id="9130015405878219958">చెల్లని మోడ్ ఎంటర్ చేయబడింది.</translation> +<translation id="9130215884425927484"><ph name="DEVICE_COUNT" />లో <ph name="DEVICE_INDEX" /> పరికరం, <ph name="DEVICE_NAME" />, ఆడియో పరికరం.</translation> <translation id="9131487537093447019">బ్లూటూత్ పరికరాలకు మెసేజ్లను పంపడానికి మరియు వాటి నుండి స్వీకరించడానికి అనుమతి.</translation> <translation id="9134066738478820307">సురక్షితమైన కంటెంట్ను ప్లే చేయడానికి, సైట్లు ఐడెంటిఫయర్లను ఉపయోగించవచ్చు</translation> <translation id="913411432238655354">ఆన్ అయ్యే సమయంలో యాప్లను రీస్టోర్ చేయండి</translation> @@ -7853,6 +7880,7 @@ <translation id="916964310188958970">ఈ సూచన ఎందుకు చూపబడింది?</translation> <translation id="9170048603158555829">Thunderbolt</translation> <translation id="9170061643796692986">ప్రస్తుత విజిబిలిటీ సెట్టింగ్, 'అన్ని కాంటాక్ట్లు'గా సెట్ చేయబడింది</translation> +<translation id="9170199455952690202">కుడి వైపు బడ్ బ్యాటరీ స్థాయి <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="9170848237812810038">&అన్డు</translation> <translation id="9170884462774788842">మీ కంప్యూటర్లోని మరో ప్రోగ్రామ్ జోడించిన థీమ్ కారణంగా Chrome పని చేసే విధానం మారవచ్చు.</translation> <translation id="917350715406657904"><ph name="APP_NAME" /> కోసం మీ తల్లి/తండ్రి సెట్ చేసిన సమయ పరిమితిని మీరు చేరుకున్నారు. మీరు రేపు దానిని <ph name="TIME_LIMIT" /> సమయం ఉపయోగించవచ్చు.</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb index 1e9741f..01bf21e 100644 --- a/chrome/app/resources/generated_resources_tr.xtb +++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -1695,6 +1695,7 @@ <translation id="2721037002783622288"><ph name="SEARCH_ENGINE" /> içinde resim &ara</translation> <translation id="2721334646575696520">Microsoft Edge</translation> <translation id="2721695630904737430">Denetlenen kullanıcılar yöneticiniz tarafından devre dışı bırakıldı.</translation> +<translation id="2722540561488096675">Cihazınız <ph name="TIME_LEFT" /> sonra kapanacak. Cihazı tekrar açmadan önce USB'yi çıkarın. Daha sonra <ph name="DEVICE_OS" /> kullanmaya başlayabilirsiniz.</translation> <translation id="2724841811573117416">WebRTC günlükleri</translation> <translation id="272488616838512378">Birim Dönüştürme</translation> <translation id="2725200716980197196">Ağ bağlantısı geri yüklendi</translation> @@ -4552,6 +4553,7 @@ <translation id="5739235828260127894">Doğrulama bekleniyor. <ph name="LINK_BEGIN" />Daha fazla bilgi<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Çok büyük</translation> <translation id="5740328398383587084">Yakındakilerle Paylaş</translation> +<translation id="5740709157181662145"><ph name="DEVICE_OS" /> donanım desteği ve kararlılık</translation> <translation id="574104302965107104">Ekran yansıtma</translation> <translation id="574209121243317957">Ses Kalınlığı</translation> <translation id="5746169159649715125">PDF olarak kaydet</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb index c1367d6..0f06b98d 100644 --- a/chrome/app/resources/generated_resources_uz.xtb +++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -132,6 +132,7 @@ <translation id="1129850422003387628">Ilovalarni boshqarish</translation> <translation id="113050636487300043">Profillarni farqlash uchun noma va rang tanlang</translation> <translation id="1130589222747246278"><ph name="WINDOW_TITLE" /> – <ph name="GROUP_NAME" /> guruhi qismi</translation> +<translation id="1130676589211693127">Oʻng quloqlik batareya quvvati: <ph name="PERCENTAGE" />%</translation> <translation id="1133418583142946603">Joriy varaqqa kiritish</translation> <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_INDEX" /> / <ph name="EMOJI_COUNT" />.</translation> <translation id="1136712381129578788">PIN kod koʻp marta xato kiritilganligi uchun elektron kalit qulflandi. Qulfdan chiqarish uchun uni chiqarib, qaytadan suqing.</translation> @@ -1643,6 +1644,7 @@ <translation id="2665647207431876759">Muddati tugagan</translation> <translation id="2665717534925640469">Bu sahifa to‘liq ekranda ochilib, sichqoncha ko‘rsatkichini o‘chirib qo‘ydi.</translation> <translation id="2665919335226618153">Ana xolos! Formatlash paytida xatolik ro‘y berdi.</translation> +<translation id="2666247341166669829"><ph name="PERCENTAGE" />% quvvat qoldi.</translation> <translation id="2667144577800272420"><ph name="APP_NAME" /> ilovasini standart ilova sifatida oʻrnatishni istaysizmi? Bu havola oʻzgartirilgandan keyin <ph name="APP_NAME_2" /> va <ph name="APP_NAME_3" /> ilovalari ochilmay qoladi.</translation> <translation id="2667463864537187133">Imlo tekshirgichni boshqarish</translation> <translation id="2669241540496514785"><ph name="APP_NAME" /> ochilmadi</translation> @@ -1962,6 +1964,7 @@ <translation id="2979639724566107830">Yangi oynada ochish</translation> <translation id="2981113813906970160">Sichqonchaning katta kursorini ko‘rsatish</translation> <translation id="2981474224638493138">Brauzerning ichki oynasi yoki kompyuterdagi ilovada videoni koʻrsatish sifati</translation> +<translation id="2983373101216420412">Quti batareya quvvati: <ph name="PERCENTAGE" />%.</translation> <translation id="2985348301114641460">Administratorga “<ph name="EXTENSION_NAME" />” kengaytmasini oʻrnatish talabi yuborilsinmi?</translation> <translation id="2987620471460279764">Boshqa qurilmadan ulashilgan matn</translation> <translation id="2988018669686457659">Taqsimlab renderlash vositasi</translation> @@ -2018,6 +2021,7 @@ <translation id="3030967311408872958">Quyosh chiqishidan botishigacha</translation> <translation id="3031417829280473749">Sirli josus</translation> <translation id="3031557471081358569">Import qilinadigan obyektlarni tanlang:</translation> +<translation id="3033348223765101500">Maʼlumotlaringizni nazorat qiling</translation> <translation id="3036327949511794916">Bu <ph name="DEVICE_TYPE" /> qurilmasini qayrarish muddati tugadi.</translation> <translation id="3036546437875325427">Flash ta’minotini yoqish</translation> <translation id="3037754279345160234">Domenga ulanish uchun konfiguratsiya aniqlanmadi. Administrator bilan bog‘laning.</translation> @@ -2118,6 +2122,7 @@ <translation id="3143754809889689516">Boshidan ijro etish</translation> <translation id="3144647712221361880">Havolani quyidagicha ochish</translation> <translation id="3149510190863420837">Chrome ilovalari</translation> +<translation id="3150622786624965651">Qurilma <ph name="DEVICE_INDEX" />/<ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, joystik.</translation> <translation id="3150693969729403281">Xavfsizlik tekshiruvini ishga tushirish</translation> <translation id="3150927491400159470">Apparatni qayta yuklash</translation> <translation id="315116470104423982">Mobil internet</translation> @@ -2325,6 +2330,7 @@ <translation id="339178315942519818">Chat ilovalari bildirishnomalarini <ph name="DEVICE_TYPE" /> qurilmangizda koʻrish</translation> <translation id="3393554941209044235">Chrome hujjatlar tahlili</translation> <translation id="3394850431319394743">Himoyalangan kontentni ijro etish uchun identifikatorlardan foydalanishga ruxsat berilgan saytlar</translation> +<translation id="3395403082745257596">Qurilma <ph name="DEVICE_INDEX" />/<ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, notanish qurilma.</translation> <translation id="3396744558790608201">Sahifalarni kezish va xarid qilish vaqtida aks etgan vizual kontent haqida batafsil axborot olish uchun oʻng klikni bosib, “Rasmlarni Google Lens yordamida qidirish” bandini tanlang.</translation> <translation id="3396800784455899911">“Roziman va davom etish” tugmasini bosish orqali siz yuqorida keltirilgan Google xizmatlari shartlariga rozilik bildirgan hisoblanasiz.</translation> <translation id="339722927132407568">Qotib qolishlar bilan</translation> @@ -2380,6 +2386,7 @@ <translation id="3440663250074896476"><ph name="BOOKMARK_NAME" /> qo‘shimcha amallari</translation> <translation id="3441653493275994384">Ekran</translation> <translation id="3441663102605358937">Bu hisobni tasdiqlash uchun <ph name="ACCOUNT" /> hisobiga qaytadan kiring</translation> +<translation id="3442674350323953953"><ph name="DEVICE_OS" /> tizimini yaxshilash uchun Googlega qurilma maʼlumotlaridan foydalanishga ruxsat bering. Rad qilsangiz ham bu maʼlumotlar Googlega kerakli yangilanishlarni aniqlash uchun yuboriladi, lekin ular saqlab qolinmaydi va foydalanilmaydi.</translation> <translation id="3444641828375597683">Reklama beruvchilar va noshirlar FLoC uslubidan foydalanishi mumkin (batafsil axborot keyinroq shu sahifada chiqadi).</translation> <translation id="3444726579402183581"><ph name="ORIGIN" /> sayti <ph name="FILENAME" /> faylini koʻra oladi</translation> <translation id="3445047461171030979">Google Assistent tezkor javoblari</translation> @@ -2512,6 +2519,7 @@ <translation id="3569682580018832495"><ph name="ORIGIN" /> quyidagi fayl va jildlarni koʻra oladi</translation> <translation id="3571734092741541777">Sozlash</translation> <translation id="3575121482199441727">Bu saytda chiqaversin</translation> +<translation id="3577745545227000795"><ph name="DEVICE_OS" /> qurilmasidan maʼlumotlarni yigʻish</translation> <translation id="3578594933904494462">Bu ichki oynadagi kontentga umumiy ruxsat ochilgan.</translation> <translation id="3581605050355435601">IP manzilni avtomatik sozlash</translation> <translation id="3582057310199111521">Qalbaki va axborotlari oshkor qilingan saytga kirdingiz.</translation> @@ -2953,6 +2961,7 @@ <translation id="3994374631886003300">Telefoningizni qulfdan chiqaring va uni <ph name="DEVICE_TYPE" /> qurilmasiga yaqinlashtiring.</translation> <translation id="3994878504415702912">&Matn o‘lchami</translation> <translation id="3995138139523574647">USB-C qurilma (o‘ng tomondagi orqa port)</translation> +<translation id="3995963973192100066">Animatsiyani ijro qilish</translation> <translation id="4002329649066944389">Saytga oid istisnolarni boshqarish</translation> <translation id="4002440992267487163">PIN-kodni sozlash</translation> <translation id="4005817994523282006">Vaqt mintaqasi aniqlanish uslubi</translation> @@ -3603,6 +3612,7 @@ <translation id="4728558894243024398">Platforma</translation> <translation id="4728570203948182358"><ph name="BEGIN_LINK" />Administratoringiz<ph name="END_LINK" /> zararli dasturlar borligini tekshirishni faolsizlantirgan</translation> <translation id="4730492586225682674">Ekran qulfida stilus yordamida yaratilgan oxirgi qayd</translation> +<translation id="4733161265940833579"><ph name="BATTERY_PERCENTAGE" />% (chap)</translation> <translation id="4733793249294335256">Jild</translation> <translation id="473546211690256853">Bu hisob <ph name="DOMAIN" /> tomonidan boshqariladi</translation> <translation id="4735803855089279419">Qurilma identifikatorlari aniqlanmadi.</translation> @@ -4168,6 +4178,7 @@ <translation id="5341793073192892252">Quyidagi cookie fayllari bloklandi (tashqi cookie fayllari istisnolarsiz bloklanadi):</translation> <translation id="5342091991439452114">PIN kod kamida <ph name="MINIMUM" /> ta raqamdan iborat bo‘lishi lozim</translation> <translation id="5344036115151554031">Linux tiklanmoqda</translation> +<translation id="5344128444027639014"><ph name="BATTERY_PERCENTAGE" />% (oʻng)</translation> <translation id="5345916423802287046">Ilova tizim bilan birga ishga tushsin</translation> <translation id="5350293332385664455">Google Assistentni faolsizlantirish</translation> <translation id="535123479159372765">Matn boshqa qurilmadan nusxalangan</translation> @@ -4407,6 +4418,7 @@ <translation id="5585898376467608182">Qurilmangiz xotirasida kam joy qoldi. <ph name="APP_NAME" /> uchun kamida <ph name="MINIMUM_SPACE" /> joy ochilishi tavsiya etiladi. Boʻsh joyni koʻpaytirish uchun qurilmangizdan fayllarni oʻchiring.</translation> <translation id="5585912436068747822">Formatlash amalga oshmadi</translation> <translation id="5588033542900357244">(<ph name="RATING_COUNT" />)</translation> +<translation id="5589101568518637088">Qurilma <ph name="DEVICE_INDEX" />/<ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, klaviatura.</translation> <translation id="558918721941304263">Ilovalar yuklanmoqda…</translation> <translation id="5592595402373377407">Ma’lumotlar yetarli emas.</translation> <translation id="5595485650161345191">Manzilni o‘zgartirish</translation> @@ -4609,6 +4621,7 @@ <translation id="5817069030404929329">Parollar bu qurilmadan Google hisobignizga olinsinmi?</translation> <translation id="5817918615728894473">Ulanish</translation> <translation id="5821565227679781414">Yorliq yaratish</translation> +<translation id="5822095611691580107">Chap quloqlik batareya quvvati: <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="5822865422567397338">Muayyan sayt yoki Chrome qismini qidirish uchun buyruqlardan shu yerdan foydalanishingiz mumkin. Masalan, faqat Gmail ichidan qidirish uchun “@gmail” deb kiritib, keyin Tab yoki Boʻsh joy tugmasini bosing.</translation> <translation id="5825412242012995131">Yoqilgan (tavsiya etiladi)</translation> <translation id="5826395379250998812"><ph name="DEVICE_TYPE" /> qurilmasiga telefoningizni ulang. <ph name="LINK_BEGIN" />Batafsil<ph name="LINK_END" /></translation> @@ -5065,6 +5078,7 @@ <translation id="6294759976468837022">Avtomatik skanerlash tezligi</translation> <translation id="6295158916970320988">Barcha saytlar</translation> <translation id="6295855836753816081">Saqlanmoqda...</translation> +<translation id="6297132509712149399">Qurilma <ph name="DEVICE_INDEX" />/<ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, telefon.</translation> <translation id="629730747756840877">Hisob</translation> <translation id="6298962879096096191">Android ilovalarini o‘rnatish uchun Google Play ishlatilsin</translation> <translation id="6300177430812514606">Maʼlumotlarni yuborish yoki qabul qilishni tugatish taqiqlangan</translation> @@ -5278,6 +5292,9 @@ <translation id="6528179044667508675">Bezovta qilinmasin</translation> <translation id="652948702951888897">Chrome tarixi</translation> <translation id="6530186581263215931">Bu sozlalamalar administrator tomonidan belgilanadi</translation> +<translation id="653031671361866334"><ph name="BEGIN_PARAGRAPH1" />Xizmat sifatini oshirish uchun <ph name="DEVICE_OS" /> qurilmaga oid maʼlumotlarni jamlaydi va qanday yangilanishni taqdim qilishni aniqlashi uchun ularni Googlega yuboradi. Istasangiz, Googlega bu maʼlumotlardan boshqa maqsadlarda, masalan, <ph name="DEVICE_OS" /> ishlashi va xizmat sifatini oshirish<ph name="END_PARAGRAPH1" /> uchun foydalanishiga ruxsat berishingiz mumkin. + <ph name="BEGIN_PARAGRAPH2" />Bu qurilmaga kirishingiz va chrome://system sahifasidagi CLOUDREADY_HARDWARE_INFO qismiga tashrif buyurib, yangilanishni filtrlash uchun Googlega yuborilgan maʼlumotlarni, shuningdek, Googlega ulashilgan boshqa holatlarni ham koʻrishingiz mumkin.<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" /><ph name="DEVICE_OS" /> maʼlumotlarini Googlega ulashish va ulardan qanday maqsadlarda foydalanishi haqida batafsil axborot olish uchun g.co/xxxxx saytiga tashrif buyuring<ph name="END_PARAGRAPH3" /></translation> <translation id="6531282281159901044">Xavfli fayl yuklab olinsin</translation> <translation id="6532101170117367231">Google Drive omboriga saqlash</translation> <translation id="6532106788206463496">Oʻzgarishlarni saqlash</translation> @@ -5355,6 +5372,7 @@ <translation id="6601612474695404578">Ayrim saytlar sahifalarini yuklashda tashqi cookie fayllarni ishlatadi. Agar sayt ishlamay qolsa, cookie fayllar yuklanishiga ruxsat berib koʻring.</translation> <translation id="6602937173026466876">Printerlarga ruxsat</translation> <translation id="6602956230557165253">Kezish uchun chapga va o‘ngga tugmalarini ishlating.</translation> +<translation id="6602998402703530379">Qurilma <ph name="DEVICE_INDEX" />/<ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, video kamera.</translation> <translation id="6605847144724004692">Haligacha hech kim baho bermagan.</translation> <translation id="6606671997164410857">Boshqa qurilmada Google Assistentni sozlagansiz. Bu qurilmada ekran kontekstini yoqish orqali Assistentning barcha funksiyalaridan foydalaning.</translation> <translation id="6607831829715835317">Qo‘shimcha &asboblar</translation> @@ -5376,6 +5394,7 @@ <translation id="6624535038674360844"><ph name="FILE_NAME" /> faylida maxfiy yoki xavfli kontent bor. Egasidan uni tuzatishni soʻrang.</translation> <translation id="6624687053722465643">Shirinlik</translation> <translation id="6628328486509726751">Yuklangan vaqti: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation> +<translation id="663065535202460123">Qurilma <ph name="DEVICE_INDEX" />/<ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, sichqoncha.</translation> <translation id="6630752851777525409">“<ph name="EXTENSION_NAME" />” kengaytmasi sizning nomingizdan o‘zining haqiyligini tekshirish uchun sertifikatdan doimiy foydalanish uchun ruxsat so‘ramoqda.</translation> <translation id="6635362468090274700">Qurilmangiz boshqalarga koʻrinmaguncha, hech kim sizga fayl yubora olmaydi.<ph name="BR" /><ph name="BR" />Yaqin-atrofga vaqtincha koʻrinish uchun holat qatorida Yaqin-atrofga koʻrinish funksiyasini yoqing.</translation> <translation id="6635674640674343739">Tarmoqqa ulanish sozlanmadi. Internetga ulanishni tekshiring va qayta urining.</translation> @@ -5704,6 +5723,7 @@ <translation id="6973611239564315524">Debian 10 (Buster) versiyasi chiqdi</translation> <translation id="6974609594866392343">Oflayn demo rejimi</translation> <translation id="697508444536771064">Linux seansini tamomlash</translation> +<translation id="6977739184256564679">Qurilma <ph name="DEVICE_INDEX" />/<ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, planshet.</translation> <translation id="6978121630131642226">Qidiruv tizimlari</translation> <translation id="6979044105893951891">Boshqaruvdagi mehmon seanslariga ruxsat</translation> <translation id="6979158407327259162">Google Drive</translation> @@ -5723,6 +5743,7 @@ <translation id="6991665348624301627">Belgilangan manzil tanlang</translation> <translation id="6992554835374084304">Kengaytirilgan imlo tekshiruvini yoqish</translation> <translation id="6993000214273684335">Varaq nomsiz guruhdan olib tashlandi – <ph name="GROUP_CONTENTS" /></translation> +<translation id="6993889405941892667">Qurilma <ph name="DEVICE_INDEX" />/<ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, kompyuter.</translation> <translation id="6994069045767983299">Ranglarni akslantirish</translation> <translation id="6995899638241819463">Parolim oshkor etilganda ogohlantirilsin</translation> <translation id="6997642619627518301"><ph name="NAME_PH" /> – Faollik jurnali</translation> @@ -6295,6 +6316,7 @@ <translation id="7602173054665172958">Chop etish boshqaruvi</translation> <translation id="7603785829538808504">Quyidagi saytlarda maxsus sozlamalar amal qiladi</translation> <translation id="7605594153474022051">Sinxronizatsiya ishlamayapti</translation> +<translation id="7606560865764296217">Animatsiyani pauzalash</translation> <translation id="7606992457248886637">Sertifikat markazlari</translation> <translation id="7607002721634913082">Vaqtincha to‘xtatildi</translation> <translation id="7608810328871051088">Android sozlamalari</translation> @@ -7103,6 +7125,7 @@ <translation id="8410775397654368139">Google Play</translation> <translation id="8412136526970428322">Ruxsat berildi: <ph name="PERMISSION" /> va yana <ph name="COUNT" /> ta</translation> <translation id="8413385045638830869">Avval so‘ralsin (tavsiya etiladi)</translation> +<translation id="8416730306157376817"><ph name="BATTERY_PERCENTAGE" />% (quti)</translation> <translation id="8417548266957501132">Ota-ona paroli</translation> <translation id="8418445294933751433">&Ichki oyna sifatida ko‘rsatish</translation> <translation id="8419098111404128271">“<ph name="SEARCH_TEXT" />” uchun qidiruv natijalari</translation> @@ -7445,6 +7468,7 @@ <translation id="8775653927968399786">{0,plural, =1{<ph name="DEVICE_TYPE" /> qurilmangiz # soniyadan keyin avtomatik qulflanadi. <ph name="DOMAIN" /> smart karta kiritilishini talab qilmoqda.}other{<ph name="DEVICE_TYPE" /> qurilmangiz # soniyadan keyin avtomatik qulflanadi. <ph name="DOMAIN" /> smart karta kiritilishini talab qilmoqda.}}</translation> +<translation id="8777259617149177596">Quti batareya quvvati: <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="8777628254805677039">superfoydalanuvchi paroli</translation> <translation id="8778328560035799409">Joriy belgilangan kalitlar tozalanadi</translation> <translation id="8780123805589053431">Rasmlarni tavsiflash (Google orqali)</translation> @@ -7803,6 +7827,7 @@ <translation id="9128335130883257666"><ph name="INPUT_METHOD_NAME" /> uchun sahifa sozlamalarini ochish</translation> <translation id="9128870381267983090">Tarmoqqa ulanish</translation> <translation id="9130015405878219958">Noto‘g‘ri rejim ko‘rsatildi.</translation> +<translation id="9130215884425927484">Qurilma <ph name="DEVICE_INDEX" />/<ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, audio qurilma.</translation> <translation id="9131487537093447019">Bluetooth qurilmalari bilan xabarlar almashish</translation> <translation id="9134066738478820307">Himoyalangan kontentni ijro etish uchun saytlar identifikatorlardan foydalanishi mumkin</translation> <translation id="913411432238655354">Tizim ishga tushganda ilovalar tiklansin</translation> @@ -7846,6 +7871,7 @@ <translation id="916964310188958970">Bu taklif nega chiqdi?</translation> <translation id="9170048603158555829">Thunderbolt</translation> <translation id="9170061643796692986">Ayni vaqtda barcha kontaktlarga ochiqlik sozlangan</translation> +<translation id="9170199455952690202">Oʻng quloqlik batareya quvvati: <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="9170848237812810038">&Bekor qilish</translation> <translation id="9170884462774788842">Kompyuteringizdagi dasturlardan biri Chrome faoliyatiga ta’sir qiladigan mavzu o‘rnatib qo‘ydi.</translation> <translation id="917350715406657904">Ota-onangiz <ph name="APP_NAME" /> uchun belgilagan foydalanish vaqti tugadi. Ertaga yana <ph name="TIME_LIMIT" /> ishlata olasiz.</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index 4061614..68e945a 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -134,6 +134,7 @@ <translation id="1129850422003387628">Quản lý ứng dụng</translation> <translation id="113050636487300043">Chọn một tên và bảng màu để phân biệt giữa các hồ sơ</translation> <translation id="1130589222747246278"><ph name="WINDOW_TITLE" /> – Thuộc nhóm <ph name="GROUP_NAME" /></translation> +<translation id="1130676589211693127">Mức pin bên phải <ph name="PERCENTAGE" />%.</translation> <translation id="1133418583142946603">Thêm thẻ hiện tại</translation> <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_INDEX" />/<ph name="EMOJI_COUNT" />.</translation> <translation id="1136712381129578788">Khóa bảo mật đã bị khóa do bạn nhập sai mã PIN quá nhiều lần. Để mở khóa, hãy rút ra và cắm lại.</translation> @@ -1647,6 +1648,7 @@ <translation id="2665647207431876759">Đã hết hạn</translation> <translation id="2665717534925640469">Trang này hiện đang ở chế độ toàn màn hình và đã tắt con trỏ chuột của bạn.</translation> <translation id="2665919335226618153">Ôi, hỏng! Đã xảy ra lỗi trong khi định dạng.</translation> +<translation id="2666247341166669829">Mức pin bên trái <ph name="PERCENTAGE" />%.</translation> <translation id="2667144577800272420">Những ứng dụng khác cũng được đặt để mở các đường liên kết giống như <ph name="APP_NAME" />. Thao tác này sẽ ngăn <ph name="APP_NAME_2" /> và <ph name="APP_NAME_3" /> mở những đường liên kết được hỗ trợ.</translation> <translation id="2667463864537187133">Quản lý kiểm tra lỗi chính tả</translation> <translation id="2669241540496514785">Không mở được <ph name="APP_NAME" /></translation> @@ -1701,6 +1703,7 @@ <translation id="2721037002783622288">&Tìm kiếm hình ảnh trên <ph name="SEARCH_ENGINE" /></translation> <translation id="2721334646575696520">Microsoft Edge</translation> <translation id="2721695630904737430">Quản trị viên của bạn đã vô hiệu hóa người dùng được giám sát.</translation> +<translation id="2722540561488096675">Thiết bị của bạn sẽ tắt trong <ph name="TIME_LEFT" />. Hãy tháo USB trước khi bật lại thiết bị của bạn. Sau đó, bạn có thể bắt đầu dùng <ph name="DEVICE_OS" />.</translation> <translation id="2724841811573117416">Nhật ký WebRTC</translation> <translation id="272488616838512378">Chuyển đổi đơn vị</translation> <translation id="2725200716980197196">Đã khôi phục kết nối mạng</translation> @@ -1965,6 +1968,7 @@ <translation id="2979639724566107830">Mở trong cửa sổ mới</translation> <translation id="2981113813906970160">Hiển thị con trỏ chuột lớn</translation> <translation id="2981474224638493138">Chất lượng chiếu màn hình/thẻ</translation> +<translation id="2983373101216420412">Mức pin hộp đựng <ph name="PERCENTAGE" />%.</translation> <translation id="2985348301114641460">Gửi yêu cầu tới quản trị viên để cài đặt "<ph name="EXTENSION_NAME" />"?</translation> <translation id="2987620471460279764">Văn bản được chia sẻ từ thiết bị khác</translation> <translation id="2988018669686457659">Trình kết xuất dự phòng</translation> @@ -2021,6 +2025,7 @@ <translation id="3030967311408872958">Từ tối đến sáng</translation> <translation id="3031417829280473749">Đặc vụ X</translation> <translation id="3031557471081358569">Chọn các mục cần nhập:</translation> +<translation id="3033348223765101500">Kiểm soát dữ liệu của bạn</translation> <translation id="3036327949511794916">Đã quá thời hạn trả lại thiết bị <ph name="DEVICE_TYPE" /> này.</translation> <translation id="3036546437875325427">Bật Flash</translation> <translation id="3037754279345160234">Không thể phân tích cú pháp cấu hình để tham gia miền. Vui lòng liên hệ với quản trị viên của bạn.</translation> @@ -2121,6 +2126,7 @@ <translation id="3143754809889689516">Phát từ đầu</translation> <translation id="3144647712221361880">Mở đường liên kết bằng tài khoản</translation> <translation id="3149510190863420837">Ứng dụng Chrome</translation> +<translation id="3150622786624965651">Thiết bị <ph name="DEVICE_INDEX" /> trên <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, Tay điều khiển trò chơi.</translation> <translation id="3150693969729403281">Chạy tính năng kiểm tra an toàn ngay</translation> <translation id="3150927491400159470">Tải lại cứng</translation> <translation id="315116470104423982">Dữ liệu di động</translation> @@ -2327,6 +2333,7 @@ <translation id="339178315942519818">Xem thông báo từ các ứng dụng trò chuyện trên <ph name="DEVICE_TYPE" /> của bạn</translation> <translation id="3393554941209044235">Phân tích tài liệu Chrome</translation> <translation id="3394850431319394743">Được phép dùng giá trị nhận dạng để phát nội dung được bảo vệ</translation> +<translation id="3395403082745257596">Thiết bị <ph name="DEVICE_INDEX" /> trên <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, Loại thiết bị không xác định.</translation> <translation id="3396744558790608201">Hãy nhấp chuột phải và chọn “Tìm kiếm hình ảnh bằng Google Ống kính” để tìm kiếm trên mọi vùng của trang web. Thao tác này nhằm giúp bạn tìm hiểu thêm về nội dung hình ảnh mà bạn thấy khi đang duyệt web và mua sắm trên trang web đó.</translation> <translation id="3396800784455899911">Bằng cách nhấp vào nút "Đồng ý và tiếp tục", bạn đồng ý với quy trình xử lý mô tả ở trên cho các dịch vụ này của Google.</translation> <translation id="339722927132407568">Dừng hình</translation> @@ -2382,6 +2389,7 @@ <translation id="3440663250074896476">Thao tác khác cho <ph name="BOOKMARK_NAME" /></translation> <translation id="3441653493275994384">Màn hình</translation> <translation id="3441663102605358937">Đăng nhập lại vào <ph name="ACCOUNT" /> để xác minh tài khoản này</translation> +<translation id="3442674350323953953">Cho phép Google dùng dữ liệu phần cứng của bạn để giúp cải thiện <ph name="DEVICE_OS" />. Nếu bạn từ chối, dữ liệu này vẫn sẽ được gửi tới Google để xác định các bản cập nhật thích hợp, nhưng sẽ không được lưu trữ hoặc sử dụng cho mục đích khác.</translation> <translation id="3444641828375597683">Các nhà quảng cáo và nhà xuất bản có thể dùng kỹ thuật FLoC (Học liên kết theo nhóm cùng sở thích), được mô tả ở phần sau trên trang này.</translation> <translation id="3444726579402183581"><ph name="ORIGIN" /> sẽ xem được <ph name="FILENAME" /></translation> <translation id="3445047461171030979">Các câu trả lời nhanh của Trợ lý Google</translation> @@ -2514,6 +2522,7 @@ <translation id="3569682580018832495"><ph name="ORIGIN" /> có thể xem các tệp và thư mục sau</translation> <translation id="3571734092741541777">Thiết lập</translation> <translation id="3575121482199441727">Cho phép đối với trang web này</translation> +<translation id="3577745545227000795">Hoạt động thu thập dữ liệu phần cứng của <ph name="DEVICE_OS" /></translation> <translation id="3578594933904494462">Nội dung của thẻ này đang được chia sẻ.</translation> <translation id="3581605050355435601">Tự động định cấu hình địa chỉ IP</translation> <translation id="3582057310199111521">Bạn đã nhập mật khẩu vào trang web lừa đảo và mật khẩu này được phát hiện thấy trong một sự cố rò rỉ dữ liệu</translation> @@ -2949,6 +2958,7 @@ <translation id="3994374631886003300">Mở khóa điện thoại và mang điện thoại tới gần hơn để mở khóa <ph name="DEVICE_TYPE" /> của bạn.</translation> <translation id="3994878504415702912">Thu &phóng</translation> <translation id="3995138139523574647">Thiết bị USB-C (cổng phía sau, bên phải)</translation> +<translation id="3995963973192100066">Phát ảnh động</translation> <translation id="4002329649066944389">Quản lý các ngoại lệ cụ thể của trang web</translation> <translation id="4002440992267487163">Thiết lập mã PIN</translation> <translation id="4005817994523282006">Phương pháp phát hiện múi giờ</translation> @@ -3592,6 +3602,7 @@ <translation id="4728558894243024398">Nền tảng</translation> <translation id="4728570203948182358"><ph name="BEGIN_LINK" />Quản trị viên của bạn<ph name="END_LINK" /> đã tắt tính năng kiểm tra phần mềm gây hại</translation> <translation id="4730492586225682674">Ghi chú mới nhất bằng bút cảm ứng trên màn hình khóa</translation> +<translation id="4733161265940833579"><ph name="BATTERY_PERCENTAGE" />% (Trái)</translation> <translation id="4733793249294335256">Vị trí</translation> <translation id="473546211690256853">Tài khoản này do <ph name="DOMAIN" /> quản lý</translation> <translation id="4735803855089279419">Hệ thống không xác định được mã nhận dạng thiết bị cho thiết bị này.</translation> @@ -4151,6 +4162,7 @@ <translation id="5341793073192892252">Các cookie sau đã bị chặn (các cookie của bên thứ ba đang bị chặn mà không có ngoại lệ)</translation> <translation id="5342091991439452114">Mã PIN phải có ít nhất <ph name="MINIMUM" /> chữ số</translation> <translation id="5344036115151554031">Đang khôi phục Linux</translation> +<translation id="5344128444027639014"><ph name="BATTERY_PERCENTAGE" />% (Phải)</translation> <translation id="5345916423802287046">Mở ứng dụng khi bạn đăng nhập</translation> <translation id="5350293332385664455">Tắt Trợ lý Google</translation> <translation id="535123479159372765">Văn bản được sao chép từ thiết bị khác</translation> @@ -4388,6 +4400,7 @@ <translation id="5585898376467608182">Thiết bị của bạn sắp hết dung lượng lưu trữ. Thiết bị phải có ít nhất <ph name="MINIMUM_SPACE" /> dung lượng trống thì mới dùng được <ph name="APP_NAME" />. Để tăng dung lượng trống, hãy xóa bớt tệp khỏi thiết bị.</translation> <translation id="5585912436068747822">Định dạng không thành công</translation> <translation id="5588033542900357244">(<ph name="RATING_COUNT" />)</translation> +<translation id="5589101568518637088">Thiết bị <ph name="DEVICE_INDEX" /> trên <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, Bàn phím.</translation> <translation id="558918721941304263">Đang tải ứng dụng...</translation> <translation id="5592595402373377407">Chưa có đủ dữ liệu.</translation> <translation id="5595485650161345191">Chỉnh sửa địa chỉ</translation> @@ -4521,6 +4534,7 @@ <translation id="5739235828260127894">Đang chờ xác minh. <ph name="LINK_BEGIN" />Tìm hiểu thêm<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Rất lớn</translation> <translation id="5740328398383587084">Chia sẻ lân cận</translation> +<translation id="5740709157181662145">Chức năng cải thiện độ ổn định và hỗ trợ phần cứng của <ph name="DEVICE_OS" /></translation> <translation id="574104302965107104">Phản chiếu màn hình</translation> <translation id="574209121243317957">Cao độ</translation> <translation id="5746169159649715125">Lưu dưới dạng PDF</translation> @@ -4584,6 +4598,7 @@ <translation id="5817069030404929329">Di chuyển các mật khẩu từ thiết bị này sang Tài khoản Google của bạn?</translation> <translation id="5817918615728894473">Ghép nối</translation> <translation id="5821565227679781414">Tạo lối tắt</translation> +<translation id="5822095611691580107">Mức pin Pixel Bud bên trái <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="5822865422567397338">Để tìm kiếm một trang web cụ thể hoặc một phần của Chrome, bạn có thể dùng các lối tắt tại đây. Ví dụ: để chỉ tìm kiếm trong Gmail, hãy nhập "@gmail", sau đó nhấn phím Tab hoặc phím cách.</translation> <translation id="5825412242012995131">Bật (Đề xuất)</translation> <translation id="5826395379250998812">Hãy kết nối <ph name="DEVICE_TYPE" /> với điện thoại của bạn. <ph name="LINK_BEGIN" />Tìm hiểu thêm<ph name="LINK_END" /></translation> @@ -5036,6 +5051,7 @@ <translation id="6294759976468837022">Tốc độ tự động quét</translation> <translation id="6295158916970320988">Tất cả các trang web</translation> <translation id="6295855836753816081">Đang lưu...</translation> +<translation id="6297132509712149399">Thiết bị <ph name="DEVICE_INDEX" /> trên <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, Điện thoại.</translation> <translation id="629730747756840877">Tài khoản</translation> <translation id="6298962879096096191">Sử dụng Google Play để cài đặt các ứng dụng Android</translation> <translation id="6300177430812514606">Không được phép kết thúc quá trình gửi hoặc nhận dữ liệu</translation> @@ -5249,6 +5265,9 @@ <translation id="6528179044667508675">Ko làm phiền</translation> <translation id="652948702951888897">Lịch sử Chrome</translation> <translation id="6530186581263215931">Các tùy chọn cài đặt này được quản trị viên của bạn yêu cầu buộc phải tuân theo</translation> +<translation id="653031671361866334"><ph name="BEGIN_PARAGRAPH1" />Để mang lại trải nghiệm tốt nhất, <ph name="DEVICE_OS" /> sẽ thu thập dữ liệu phần cứng của thiết bị và chia sẻ dữ liệu đó với Google để xác định bản cập nhật nào sẽ được phân phối. Bạn có thể tuỳ ý cho phép Google dùng dữ liệu này cho các mục đích bổ sung như hỗ trợ và cải thiện trải nghiệm cùng chất lượng dịch vụ của <ph name="DEVICE_OS" />.<ph name="END_PARAGRAPH1" /> + <ph name="BEGIN_PARAGRAPH2" />Bạn có thể đăng nhập trên thiết bị này và truy cập vào mục CLOUDREADY_HARDWARE_INFO trong chrome://system để xem dữ liệu được gửi tới Google cho bộ lọc cập nhật, cũng như bất kỳ trường hợp nào khác mà bạn chọn chia sẻ dữ liệu với Google.<ph name="END_PARAGRAPH2" /> + <ph name="BEGIN_PARAGRAPH3" />Để biết thêm thông tin chi tiết về dữ liệu mà <ph name="DEVICE_OS" /> có thể chia sẻ với Google và cách dữ liệu đó được sử dụng, hãy truy cập g.co/xxxxx<ph name="END_PARAGRAPH3" /></translation> <translation id="6531282281159901044">Giữ tệp nguy hiểm</translation> <translation id="6532101170117367231">Lưu vào Google Drive</translation> <translation id="6532106788206463496">Lưu thay đổi</translation> @@ -5323,6 +5342,7 @@ <translation id="6601612474695404578">Một số trang web sử dụng cookie của bên thứ ba để tải trang. Nếu một trang web không hoạt động, thì bạn có thể thử cho phép các cookie.</translation> <translation id="6602937173026466876">Truy cập vào máy in của bạn</translation> <translation id="6602956230557165253">Sử dụng các phím mũi tên trái và phải để điều hướng.</translation> +<translation id="6602998402703530379">Thiết bị <ph name="DEVICE_INDEX" /> trên <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, Máy quay video.</translation> <translation id="6605847144724004692">Chưa có người dùng nào xếp hạng.</translation> <translation id="6606671997164410857">Có vẻ như bạn đã thiết lập Trợ lý Google trên một thiết bị khác. Hãy khai thác thêm sức mạnh của Trợ lý bằng cách bật tính năng Ngữ cảnh trên màn hình cho thiết bị này.</translation> <translation id="6607831829715835317">Côn&g cụ khác</translation> @@ -5344,6 +5364,7 @@ <translation id="6624535038674360844">Tệp <ph name="FILE_NAME" /> có chứa nội dung nhạy cảm hoặc nguy hiểm. Hãy yêu cầu chủ sở hữu tệp khắc phục vấn đề.</translation> <translation id="6624687053722465643">Ngọt ngào</translation> <translation id="6628328486509726751">Đã tải lên vào <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation> +<translation id="663065535202460123">Thiết bị <ph name="DEVICE_INDEX" /> trên <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, Chuột.</translation> <translation id="6630752851777525409"><ph name="EXTENSION_NAME" /> muốn có quyền truy cập vĩnh viễn vào chứng chỉ để tự xác thực thay mặt bạn.</translation> <translation id="6635362468090274700">Không ai có thể chia sẻ với bạn cho đến khi bạn cho phép mọi người thấy thiết bị của mình.<ph name="BR" /><ph name="BR" />Để tạm thời cho phép mọi người thấy thiết bị của bạn, hãy mở khu vực trạng thái, sau đó bật Chế độ hiển thị lân cận.</translation> <translation id="6635674640674343739">Không thể thiết lập kết nối mạng. Hãy kiểm tra kết nối mạng rồi thử lại.</translation> @@ -5669,6 +5690,7 @@ <translation id="6973611239564315524">Đã có bản nâng cấp lên Debian 10 (Buster)</translation> <translation id="6974609594866392343">Chế độ minh họa ngoại tuyến</translation> <translation id="697508444536771064">Tắt Linux</translation> +<translation id="6977739184256564679">Thiết bị <ph name="DEVICE_INDEX" /> trên <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, Máy tính bảng.</translation> <translation id="6978121630131642226">Công cụ Tìm kiếm</translation> <translation id="6979044105893951891">Chạy và thoát khỏi các phiên khách được quản lý</translation> <translation id="6979158407327259162">Google Drive</translation> @@ -5688,6 +5710,7 @@ <translation id="6991665348624301627">Chọn máy in đích</translation> <translation id="6992554835374084304">Bật tính năng kiểm tra lỗi chính tả nâng cao</translation> <translation id="6993000214273684335">Đã xóa thẻ khỏi nhóm chưa có tên – <ph name="GROUP_CONTENTS" /></translation> +<translation id="6993889405941892667">Thiết bị <ph name="DEVICE_INDEX" /> trên <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, Máy tính.</translation> <translation id="6994069045767983299">Màu đảo ngược</translation> <translation id="6995899638241819463">Cảnh báo bạn nếu mật khẩu bị lộ trong một sự cố rò rỉ dữ liệu</translation> <translation id="6997642619627518301"><ph name="NAME_PH" /> - Nhật ký hoạt động</translation> @@ -6257,6 +6280,7 @@ <translation id="7602173054665172958">Quản lý lệnh in</translation> <translation id="7603785829538808504">Các trang web trong danh sách dưới đây tuân theo một chế độ cài đặt tùy chỉnh</translation> <translation id="7605594153474022051">Đồng bộ hóa không hoạt động</translation> +<translation id="7606560865764296217">Tạm dừng ảnh động</translation> <translation id="7606992457248886637">Quyền</translation> <translation id="7607002721634913082">Đã tạm dừng</translation> <translation id="7608810328871051088">Các tùy chọn Android</translation> @@ -7065,6 +7089,7 @@ <translation id="8410775397654368139">Google Play</translation> <translation id="8412136526970428322">Đã cho phép <ph name="PERMISSION" /> và <ph name="COUNT" /> quyền khác</translation> <translation id="8413385045638830869">Hỏi trước (khuyên dùng)</translation> +<translation id="8416730306157376817"><ph name="BATTERY_PERCENTAGE" />% (Hộp đựng)</translation> <translation id="8417548266957501132">Mật khẩu của cha mẹ</translation> <translation id="8418445294933751433">&Hiển thị dưới dạng thẻ</translation> <translation id="8419098111404128271">Kết quả tìm kiếm cho '<ph name="SEARCH_TEXT" />'</translation> @@ -7406,6 +7431,7 @@ <translation id="8775653927968399786">{0,plural, =1{<ph name="DEVICE_TYPE" /> của bạn sẽ tự động khóa sau # giây. <ph name="DOMAIN" /> yêu cầu bạn không tháo thẻ thông minh.}other{<ph name="DEVICE_TYPE" /> của bạn sẽ tự động khóa sau # giây. <ph name="DOMAIN" /> yêu cầu bạn không tháo thẻ thông minh.}}</translation> +<translation id="8777259617149177596">Mức pin hộp đựng <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="8777628254805677039">mật khẩu gốc</translation> <translation id="8778328560035799409">Các công tắc hiện đã gán của bạn sẽ bị xóa</translation> <translation id="8780123805589053431">Lấy nội dung mô tả hình ảnh từ Google</translation> @@ -7762,6 +7788,7 @@ <translation id="9128335130883257666">Mở trang cài đặt cho <ph name="INPUT_METHOD_NAME" /></translation> <translation id="9128870381267983090">Kết nối đến mạng</translation> <translation id="9130015405878219958">Chế độ không hợp lệ được nhập.</translation> +<translation id="9130215884425927484">Thiết bị <ph name="DEVICE_INDEX" /> trên <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" />, Thiết bị âm thanh.</translation> <translation id="9131487537093447019">Gửi tin nhắn tới và nhận tin nhắn từ thiết bị Bluetooth.</translation> <translation id="9134066738478820307">Các trang web có thể dùng giá trị nhận dạng để phát nội dung được bảo vệ</translation> <translation id="913411432238655354">Khôi phục ứng dụng khi khởi động</translation> @@ -7805,6 +7832,7 @@ <translation id="916964310188958970">Tại sao bạn thấy đề xuất này?</translation> <translation id="9170048603158555829">Thunderbolt</translation> <translation id="9170061643796692986">Tùy chọn hiển thị hiện tại là tất cả những người liên hệ</translation> +<translation id="9170199455952690202">Mức pin Pixel Bud bên phải <ph name="BATTERY_PERCENTAGE" />%.</translation> <translation id="9170848237812810038">H&oàn tác</translation> <translation id="9170884462774788842">Một chương trình khác trên máy tính của bạn đã thêm một chủ đề có thể thay đổi cách Chrome hoạt động.</translation> <translation id="917350715406657904">Bạn đã đạt đến giới hạn thời gian sử dụng <ph name="APP_NAME" /> do cha mẹ đặt ra. Bạn có thể dùng ứng dụng này trong <ph name="TIME_LIMIT" /> vào ngày mai.</translation>
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp index ca6b2f6..4516b79 100644 --- a/chrome/app/settings_strings.grdp +++ b/chrome/app/settings_strings.grdp
@@ -525,7 +525,13 @@ Make sure the password you are saving matches your password for <ph name="WEBSITE">$1<ex>airbnb.com</ex></ph> </message> <message name="IDS_SETTINGS_PASSWORD_USERNAME_ALREADY_USED" desc="An error message when user tried editing the username to a value which is already used for the same site."> - You already saved this username for this site + You already saved a password with this username for <ph name="WEBSITE">$1<ex>website.com</ex></ph> + </message> + <message name="IDS_SETTINGS_PASSWORD_VIEW_EXISTING_PASSWORD" desc="A link text shown together with an error message when user tried editing the username to a value which is already used for the same site. On click shows existing password editor."> + View password + </message> + <message name="IDS_SETTINGS_PASSWORD_VIEW_EXISTING_PASSWORD_ARIA_DESCRIPTION" desc="An accessibility description for a link text shown together with an error message when user tried editing the username to a value which is already used for the same site. On click shows existing password editor."> + View password with username <ph name="USERNAME">$1<ex>username</ex></ph> for <ph name="WEBSITE">$2<ex>website.com</ex></ph> </message> <message name="IDS_SETTINGS_PASSWORD_MISSING_TLD" desc="An error message when user entered a URL without a top-level domain as a site for a new password. It suggests to use the same value but with common top level domain." meaning="Suggesting user to add the top-level domain in the website text."> Did you mean <ph name="WEBSITE">$1<ex>twitter.com</ex></ph>?
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORD_USERNAME_ALREADY_USED.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORD_USERNAME_ALREADY_USED.png.sha1 index 17feb49..7fa72ea 100644 --- a/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORD_USERNAME_ALREADY_USED.png.sha1 +++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORD_USERNAME_ALREADY_USED.png.sha1
@@ -1 +1 @@ -65b985cbdd9905b01170b331f7d9ce3b19e60d90 \ No newline at end of file +735c600b7e19a048d95b5e0bcb746cddc564bab6 \ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORD_VIEW_EXISTING_PASSWORD.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORD_VIEW_EXISTING_PASSWORD.png.sha1 new file mode 100644 index 0000000..7fa72ea --- /dev/null +++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORD_VIEW_EXISTING_PASSWORD.png.sha1
@@ -0,0 +1 @@ +735c600b7e19a048d95b5e0bcb746cddc564bab6 \ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORD_VIEW_EXISTING_PASSWORD_ARIA_DESCRIPTION.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORD_VIEW_EXISTING_PASSWORD_ARIA_DESCRIPTION.png.sha1 new file mode 100644 index 0000000..7fa72ea --- /dev/null +++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORD_VIEW_EXISTING_PASSWORD_ARIA_DESCRIPTION.png.sha1
@@ -0,0 +1 @@ +735c600b7e19a048d95b5e0bcb746cddc564bab6 \ No newline at end of file
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index f9c76e3..d520325 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -816,14 +816,14 @@ "metrics/power/power_details_provider.h", "metrics/process_memory_metrics_emitter.cc", "metrics/process_memory_metrics_emitter.h", + "metrics/shutdown_watcher_helper.cc", + "metrics/shutdown_watcher_helper.h", "metrics/tab_count_metrics.cc", "metrics/tab_count_metrics.h", "metrics/tab_footprint_aggregator.cc", "metrics/tab_footprint_aggregator.h", "metrics/testing/metrics_reporting_pref_helper.cc", "metrics/testing/metrics_reporting_pref_helper.h", - "metrics/thread_watcher.cc", - "metrics/thread_watcher.h", "metrics/thread_watcher_report_hang.cc", "metrics/thread_watcher_report_hang.h", "metrics/ukm_background_recorder_service.cc", @@ -3192,8 +3192,6 @@ "metrics/incognito_observer_android.cc", "metrics/page_load_metrics_provider.cc", "metrics/page_load_metrics_provider.h", - "metrics/thread_watcher_android.cc", - "metrics/thread_watcher_android.h", "notifications/notification_platform_bridge_android.cc", "notifications/notification_platform_bridge_android.h", "notifications/notification_trigger_scheduler_android.cc", @@ -4567,8 +4565,8 @@ "apps/app_service/app_icon/arc_activity_adaptive_icon_impl.h", "apps/app_service/app_icon/arc_icon_once_loader.cc", "apps/app_service/app_icon/arc_icon_once_loader.h", - "apps/app_service/app_service_proxy_chromeos.cc", - "apps/app_service/app_service_proxy_chromeos.h", + "apps/app_service/app_service_proxy_ash.cc", + "apps/app_service/app_service_proxy_ash.h", "apps/app_service/app_shortcut_item.cc", "apps/app_service/app_shortcut_item.h", "apps/app_service/file_utils.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index b2c244d6..292c615 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -4875,11 +4875,6 @@ flag_descriptions::kScrollableTabStripButtonsDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kScrollableTabStripButtons)}, - {"force-disable-stacked-tabs", - flag_descriptions::kForceDisableStackedTabsName, - flag_descriptions::kForceDisableStackedTabsDescription, kOsDesktop, - FEATURE_VALUE_TYPE(features::kForceDisableStackedTabs)}, - {flag_descriptions::kSidePanelFlagId, flag_descriptions::kSidePanelName, flag_descriptions::kSidePanelDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kSidePanel)},
diff --git a/chrome/browser/android/autofill_assistant/client_android.cc b/chrome/browser/android/autofill_assistant/client_android.cc index 6f52808..db02b2d 100644 --- a/chrome/browser/android/autofill_assistant/client_android.cc +++ b/chrome/browser/android/autofill_assistant/client_android.cc
@@ -400,6 +400,12 @@ controller_->OnSpokenFeedbackAccessibilityServiceChanged(enabled); } +base::android::ScopedJavaGlobalRef<jobject> ClientAndroid::GetDependencies( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& jcaller) { + return jdependencies_; +} + int ClientAndroid::FindDirectAction(const std::string& action_name) { // It's too late to create a controller. This should have been done in // FetchWebsiteActions. @@ -482,6 +488,27 @@ return ClientContextProto::UNDEFINED_ORIENTATION; } +void ClientAndroid::FetchPaymentsClientToken( + base::OnceCallback<void(const std::string&)> callback) { + DCHECK(!fetch_payments_client_token_callback_); + fetch_payments_client_token_callback_ = std::move(callback); + + Java_AutofillAssistantClient_fetchPaymentsClientToken(AttachCurrentThread(), + java_object_); +} + +void ClientAndroid::OnPaymentsClientToken( + JNIEnv* env, + const JavaParamRef<jobject>& jcaller, + const JavaParamRef<jstring>& jclient_token) { + if (!fetch_payments_client_token_callback_) { + return; + } + std::move(fetch_payments_client_token_callback_) + .Run(ui_controller_android_utils::SafeConvertJavaStringToNative( + AttachCurrentThread(), jclient_token)); +} + AccessTokenFetcher* ClientAndroid::GetAccessTokenFetcher() { return this; }
diff --git a/chrome/browser/android/autofill_assistant/client_android.h b/chrome/browser/android/autofill_assistant/client_android.h index 1b267cc..cba6d86 100644 --- a/chrome/browser/android/autofill_assistant/client_android.h +++ b/chrome/browser/android/autofill_assistant/client_android.h
@@ -74,6 +74,10 @@ const base::android::JavaParamRef<jobject>& jcaller, jboolean success, const base::android::JavaParamRef<jstring>& access_token); + void OnPaymentsClientToken( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& jcaller, + const base::android::JavaParamRef<jstring>& jclient_token); void FetchWebsiteActions( JNIEnv* env, @@ -108,6 +112,10 @@ const base::android::JavaParamRef<jobject>& jcaller, jboolean enabled); + base::android::ScopedJavaGlobalRef<jobject> GetDependencies( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& jcaller); + // Overrides Client void AttachUI() override; void DestroyUI() override; @@ -116,6 +124,8 @@ std::string GetChromeSignedInEmailAddress() const override; absl::optional<std::pair<int, int>> GetWindowSize() const override; ClientContextProto::ScreenOrientation GetScreenOrientation() const override; + void FetchPaymentsClientToken( + base::OnceCallback<void(const std::string&)> callback) override; AccessTokenFetcher* GetAccessTokenFetcher() override; autofill::PersonalDataManager* GetPersonalDataManager() const override; WebsiteLoginManager* GetWebsiteLoginManager() const override; @@ -183,6 +193,8 @@ base::OnceCallback<void(bool, const std::string&)> fetch_access_token_callback_; + base::OnceCallback<void(const std::string&)> + fetch_payments_client_token_callback_; base::WeakPtrFactory<ClientAndroid> weak_ptr_factory_{this}; };
diff --git a/chrome/browser/android/tab_android_user_data.h b/chrome/browser/android/tab_android_user_data.h index c637181..c2991ca 100644 --- a/chrome/browser/android/tab_android_user_data.h +++ b/chrome/browser/android/tab_android_user_data.h
@@ -50,7 +50,7 @@ // This macro declares a static variable inside the class that inherits from // TabAndroidUserData The address of this static variable is used as the key to // store/retrieve an instance of the class on/from a TabAndroid. -#define TAB_ANDROID_USER_DATA_KEY_DECL() static constexpr int kUserDataKey = 0 +#define TAB_ANDROID_USER_DATA_KEY_DECL() static const int kUserDataKey = 0 // This macro instantiates the static variable declared by the previous macro. // It must live in a .cc file to ensure that there is only one instantiation
diff --git a/chrome/browser/apps/app_service/app_service_proxy.h b/chrome/browser/apps/app_service/app_service_proxy.h index e398601d..8704835f 100644 --- a/chrome/browser/apps/app_service/app_service_proxy.h +++ b/chrome/browser/apps/app_service/app_service_proxy.h
@@ -9,7 +9,7 @@ #include "chrome/browser/apps/app_service/app_service_proxy_forward.h" #if BUILDFLAG(IS_CHROMEOS_ASH) -#include "chrome/browser/apps/app_service/app_service_proxy_chromeos.h" +#include "chrome/browser/apps/app_service/app_service_proxy_ash.h" #elif BUILDFLAG(IS_CHROMEOS_LACROS) #include "chrome/browser/apps/app_service/app_service_proxy_lacros.h" #else
diff --git a/chrome/browser/apps/app_service/app_service_proxy_chromeos.cc b/chrome/browser/apps/app_service/app_service_proxy_ash.cc similarity index 81% rename from chrome/browser/apps/app_service/app_service_proxy_chromeos.cc rename to chrome/browser/apps/app_service/app_service_proxy_ash.cc index b2c49df..2570fa4d 100644 --- a/chrome/browser/apps/app_service/app_service_proxy_chromeos.cc +++ b/chrome/browser/apps/app_service/app_service_proxy_ash.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/apps/app_service/app_service_proxy_chromeos.h" +#include "chrome/browser/apps/app_service/app_service_proxy_ash.h" #include <utility> @@ -41,7 +41,7 @@ namespace apps { -AppServiceProxyChromeOs::AppServiceProxyChromeOs(Profile* profile) +AppServiceProxyAsh::AppServiceProxyAsh(Profile* profile) : AppServiceProxyBase(profile) { if (web_app::IsWebAppsCrosapiEnabled()) { browser_app_instance_tracker_ = @@ -56,7 +56,7 @@ } } -AppServiceProxyChromeOs::~AppServiceProxyChromeOs() { +AppServiceProxyAsh::~AppServiceProxyAsh() { if (IsValidProfile() && full_restore::features::IsFullRestoreEnabled()) { ::full_restore::FullRestoreSaveHandler::GetInstance()->SetAppRegistryCache( profile_->GetPath(), nullptr); @@ -67,7 +67,7 @@ AppRegistryCacheWrapper::Get().RemoveAppRegistryCache(&app_registry_cache_); } -void AppServiceProxyChromeOs::Initialize() { +void AppServiceProxyAsh::Initialize() { if (!IsValidProfile()) { return; } @@ -122,40 +122,39 @@ app_platform_metrics_service_ = std::make_unique<AppPlatformMetricsService>(profile_); base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::BindOnce(&AppServiceProxyChromeOs::InitAppPlatformMetrics, - weak_ptr_factory_.GetWeakPtr())); + FROM_HERE, base::BindOnce(&AppServiceProxyAsh::InitAppPlatformMetrics, + weak_ptr_factory_.GetWeakPtr())); } } -apps::InstanceRegistry& AppServiceProxyChromeOs::InstanceRegistry() { +apps::InstanceRegistry& AppServiceProxyAsh::InstanceRegistry() { return instance_registry_; } apps::BrowserAppInstanceTracker* -AppServiceProxyChromeOs::BrowserAppInstanceTracker() { +AppServiceProxyAsh::BrowserAppInstanceTracker() { return browser_app_instance_tracker_.get(); } apps::BrowserAppInstanceRegistry* -AppServiceProxyChromeOs::BrowserAppInstanceRegistry() { +AppServiceProxyAsh::BrowserAppInstanceRegistry() { return browser_app_instance_registry_.get(); } -apps::AppPlatformMetrics* AppServiceProxyChromeOs::AppPlatformMetrics() { +apps::AppPlatformMetrics* AppServiceProxyAsh::AppPlatformMetrics() { return app_platform_metrics_service_ ? app_platform_metrics_service_->AppPlatformMetrics() : nullptr; } -void AppServiceProxyChromeOs::Uninstall( +void AppServiceProxyAsh::Uninstall( const std::string& app_id, apps::mojom::UninstallSource uninstall_source, gfx::NativeWindow parent_window) { UninstallImpl(app_id, uninstall_source, parent_window, base::DoNothing()); } -void AppServiceProxyChromeOs::PauseApps( +void AppServiceProxyAsh::PauseApps( const std::map<std::string, PauseData>& pause_data) { if (!app_service_.is_connected()) { return; @@ -184,15 +183,14 @@ data.first, [this, &data](const apps::AppUpdate& update) { LoadIconForDialog( update, - base::BindOnce(&AppServiceProxyChromeOs::OnLoadIconForPauseDialog, + base::BindOnce(&AppServiceProxyAsh::OnLoadIconForPauseDialog, weak_ptr_factory_.GetWeakPtr(), update.AppType(), update.AppId(), update.Name(), data.second)); }); } } -void AppServiceProxyChromeOs::UnpauseApps( - const std::set<std::string>& app_ids) { +void AppServiceProxyAsh::UnpauseApps(const std::set<std::string>& app_ids) { if (!app_service_.is_connected()) { return; } @@ -208,16 +206,15 @@ } } -void AppServiceProxyChromeOs::SetResizeLocked( - const std::string& app_id, - apps::mojom::OptionalBool locked) { +void AppServiceProxyAsh::SetResizeLocked(const std::string& app_id, + apps::mojom::OptionalBool locked) { if (app_service_.is_connected()) { apps::mojom::AppType app_type = app_registry_cache_.GetAppType(app_id); app_service_->SetResizeLocked(app_type, app_id, locked); } } -void AppServiceProxyChromeOs::SetArcIsRegistered() { +void AppServiceProxyAsh::SetArcIsRegistered() { if (arc_is_registered_) { return; } @@ -228,7 +225,7 @@ } } -void AppServiceProxyChromeOs::FlushMojoCallsForTesting() { +void AppServiceProxyAsh::FlushMojoCallsForTesting() { app_service_mojom_impl_->FlushMojoCallsForTesting(); if (publisher_host_) { @@ -238,32 +235,31 @@ receivers_.FlushForTesting(); } -void AppServiceProxyChromeOs::ReInitializeCrostiniForTesting() { +void AppServiceProxyAsh::ReInitializeCrostiniForTesting() { if (app_service_.is_connected() && publisher_host_) { publisher_host_->ReInitializeCrostiniForTesting(this); // IN-TEST } } -void AppServiceProxyChromeOs::SetDialogCreatedCallbackForTesting( +void AppServiceProxyAsh::SetDialogCreatedCallbackForTesting( base::OnceClosure callback) { dialog_created_callback_ = std::move(callback); } -void AppServiceProxyChromeOs::UninstallForTesting( - const std::string& app_id, - gfx::NativeWindow parent_window, - base::OnceClosure callback) { +void AppServiceProxyAsh::UninstallForTesting(const std::string& app_id, + gfx::NativeWindow parent_window, + base::OnceClosure callback) { UninstallImpl(app_id, apps::mojom::UninstallSource::kUnknown, parent_window, std::move(callback)); } -void AppServiceProxyChromeOs::SetAppPlatformMetricsServiceForTesting( +void AppServiceProxyAsh::SetAppPlatformMetricsServiceForTesting( std::unique_ptr<apps::AppPlatformMetricsService> app_platform_metrics_service) { app_platform_metrics_service_ = std::move(app_platform_metrics_service); } -void AppServiceProxyChromeOs::Shutdown() { +void AppServiceProxyAsh::Shutdown() { app_platform_metrics_service_.reset(); uninstall_dialogs_.clear(); @@ -273,7 +269,7 @@ } } -void AppServiceProxyChromeOs::UninstallImpl( +void AppServiceProxyAsh::UninstallImpl( const std::string& app_id, apps::mojom::UninstallSource uninstall_source, gfx::NativeWindow parent_window, @@ -289,7 +285,7 @@ auto uninstall_dialog = std::make_unique<UninstallDialog>( profile_, update.AppType(), update.AppId(), update.Name(), std::move(icon_key), this, parent_window, - base::BindOnce(&AppServiceProxyChromeOs::OnUninstallDialogClosed, + base::BindOnce(&AppServiceProxyAsh::OnUninstallDialogClosed, weak_ptr_factory_.GetWeakPtr(), update.AppType(), update.AppId(), uninstall_source)); uninstall_dialog->SetDialogCreatedCallbackForTesting(std::move(callback)); @@ -297,7 +293,7 @@ }); } -void AppServiceProxyChromeOs::OnUninstallDialogClosed( +void AppServiceProxyAsh::OnUninstallDialogClosed( apps::mojom::AppType app_type, const std::string& app_id, apps::mojom::UninstallSource uninstall_source, @@ -320,7 +316,7 @@ uninstall_dialogs_.erase(it); } -bool AppServiceProxyChromeOs::MaybeShowLaunchPreventionDialog( +bool AppServiceProxyAsh::MaybeShowLaunchPreventionDialog( const apps::AppUpdate& update) { if (update.AppId() == extension_misc::kChromeAppId) { return false; @@ -330,9 +326,8 @@ // is blocked by policy. if (update.Readiness() == apps::mojom::Readiness::kDisabledByPolicy) { LoadIconForDialog( - update, - base::BindOnce(&AppServiceProxyChromeOs::OnLoadIconForBlockDialog, - weak_ptr_factory_.GetWeakPtr(), update.Name())); + update, base::BindOnce(&AppServiceProxyAsh::OnLoadIconForBlockDialog, + weak_ptr_factory_.GetWeakPtr(), update.Name())); return true; } @@ -353,10 +348,9 @@ pause_data.hours = time_limit.value().InHours(); pause_data.minutes = time_limit.value().InMinutes() % 60; LoadIconForDialog( - update, - base::BindOnce(&AppServiceProxyChromeOs::OnLoadIconForPauseDialog, - weak_ptr_factory_.GetWeakPtr(), update.AppType(), - update.AppId(), update.Name(), pause_data)); + update, base::BindOnce(&AppServiceProxyAsh::OnLoadIconForPauseDialog, + weak_ptr_factory_.GetWeakPtr(), update.AppType(), + update.AppId(), update.Name(), pause_data)); return true; } @@ -364,9 +358,8 @@ return false; } -void AppServiceProxyChromeOs::LoadIconForDialog( - const apps::AppUpdate& update, - apps::LoadIconCallback callback) { +void AppServiceProxyAsh::LoadIconForDialog(const apps::AppUpdate& update, + apps::LoadIconCallback callback) { apps::mojom::IconKeyPtr mojom_icon_key = update.IconKey(); constexpr bool kAllowPlaceholderIcon = false; constexpr int32_t kIconSize = 48; @@ -406,15 +399,14 @@ std::move(callback)); } -void AppServiceProxyChromeOs::OnLoadIconForBlockDialog( - const std::string& app_name, - IconValuePtr icon_value) { +void AppServiceProxyAsh::OnLoadIconForBlockDialog(const std::string& app_name, + IconValuePtr icon_value) { if (icon_value->icon_type != IconType::kStandard) { return; } - AppServiceProxyChromeOs::CreateBlockDialog(app_name, icon_value->uncompressed, - profile_); + AppServiceProxyAsh::CreateBlockDialog(app_name, icon_value->uncompressed, + profile_); // For browser tests, call the dialog created callback to stop the run loop. if (!dialog_created_callback_.is_null()) { @@ -422,20 +414,19 @@ } } -void AppServiceProxyChromeOs::OnLoadIconForPauseDialog( - apps::mojom::AppType app_type, - const std::string& app_id, - const std::string& app_name, - const PauseData& pause_data, - IconValuePtr icon_value) { +void AppServiceProxyAsh::OnLoadIconForPauseDialog(apps::mojom::AppType app_type, + const std::string& app_id, + const std::string& app_name, + const PauseData& pause_data, + IconValuePtr icon_value) { if (icon_value->icon_type != IconType::kStandard) { OnPauseDialogClosed(app_type, app_id); return; } - AppServiceProxyChromeOs::CreatePauseDialog( + AppServiceProxyAsh::CreatePauseDialog( app_type, app_name, icon_value->uncompressed, pause_data, - base::BindOnce(&AppServiceProxyChromeOs::OnPauseDialogClosed, + base::BindOnce(&AppServiceProxyAsh::OnPauseDialogClosed, weak_ptr_factory_.GetWeakPtr(), app_type, app_id)); // For browser tests, call the dialog created callback to stop the run loop. @@ -444,8 +435,8 @@ } } -void AppServiceProxyChromeOs::OnPauseDialogClosed(apps::mojom::AppType app_type, - const std::string& app_id) { +void AppServiceProxyAsh::OnPauseDialogClosed(apps::mojom::AppType app_type, + const std::string& app_id) { bool should_pause_app = pending_pause_requests_.IsPaused(app_id); if (!should_pause_app) { app_registry_cache_.ForOneApp( @@ -460,7 +451,7 @@ } } -void AppServiceProxyChromeOs::OnAppUpdate(const apps::AppUpdate& update) { +void AppServiceProxyAsh::OnAppUpdate(const apps::AppUpdate& update) { if ((update.PausedChanged() && update.Paused() == apps::mojom::OptionalBool::kTrue) || (update.ReadinessChanged() && @@ -469,12 +460,12 @@ } } -void AppServiceProxyChromeOs::OnAppRegistryCacheWillBeDestroyed( +void AppServiceProxyAsh::OnAppRegistryCacheWillBeDestroyed( apps::AppRegistryCache* cache) { Observe(nullptr); } -void AppServiceProxyChromeOs::RecordAppPlatformMetrics( +void AppServiceProxyAsh::RecordAppPlatformMetrics( Profile* profile, const apps::AppUpdate& update, apps::mojom::LaunchSource launch_source, @@ -483,14 +474,14 @@ launch_source, container); } -void AppServiceProxyChromeOs::InitAppPlatformMetrics() { +void AppServiceProxyAsh::InitAppPlatformMetrics() { if (app_platform_metrics_service_) { app_platform_metrics_service_->Start(app_registry_cache_, instance_registry_); } } -void AppServiceProxyChromeOs::PerformPostUninstallTasks( +void AppServiceProxyAsh::PerformPostUninstallTasks( apps::mojom::AppType app_type, const std::string& app_id, apps::mojom::UninstallSource uninstall_source) { @@ -501,7 +492,7 @@ } } -void AppServiceProxyChromeOs::PerformPostLaunchTasks( +void AppServiceProxyAsh::PerformPostLaunchTasks( apps::mojom::LaunchSource launch_source) { if (apps_util::IsHumanLaunch(launch_source)) { ash::full_restore::FullRestoreService::MaybeCloseNotification(profile_);
diff --git a/chrome/browser/apps/app_service/app_service_proxy_chromeos.h b/chrome/browser/apps/app_service/app_service_proxy_ash.h similarity index 92% rename from chrome/browser/apps/app_service/app_service_proxy_chromeos.h rename to chrome/browser/apps/app_service/app_service_proxy_ash.h index b5d61e8..1643f599 100644 --- a/chrome/browser/apps/app_service/app_service_proxy_chromeos.h +++ b/chrome/browser/apps/app_service/app_service_proxy_ash.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_APPS_APP_SERVICE_APP_SERVICE_PROXY_CHROMEOS_H_ -#define CHROME_BROWSER_APPS_APP_SERVICE_APP_SERVICE_PROXY_CHROMEOS_H_ +#ifndef CHROME_BROWSER_APPS_APP_SERVICE_APP_SERVICE_PROXY_ASH_H_ +#define CHROME_BROWSER_APPS_APP_SERVICE_APP_SERVICE_PROXY_ASH_H_ #include <map> #include <memory> @@ -25,7 +25,7 @@ #include "ui/gfx/native_widget_types.h" // Avoid including this header file directly or referring directly to -// AppServiceProxyChromeOs as a type. Instead: +// AppServiceProxyAsh as a type. Instead: // - for forward declarations, use app_service_proxy_forward.h // - for the full header, use app_service_proxy.h, which aliases correctly // based on the platform @@ -55,15 +55,15 @@ // OS. // // See components/services/app_service/README.md. -class AppServiceProxyChromeOs : public AppServiceProxyBase, - public apps::AppRegistryCache::Observer { +class AppServiceProxyAsh : public AppServiceProxyBase, + public apps::AppRegistryCache::Observer { public: using OnPauseDialogClosedCallback = base::OnceCallback<void()>; - explicit AppServiceProxyChromeOs(Profile* profile); - AppServiceProxyChromeOs(const AppServiceProxyChromeOs&) = delete; - AppServiceProxyChromeOs& operator=(const AppServiceProxyChromeOs&) = delete; - ~AppServiceProxyChromeOs() override; + explicit AppServiceProxyAsh(Profile* profile); + AppServiceProxyAsh(const AppServiceProxyAsh&) = delete; + AppServiceProxyAsh& operator=(const AppServiceProxyAsh&) = delete; + ~AppServiceProxyAsh() override; apps::InstanceRegistry& InstanceRegistry(); apps::AppPlatformMetrics* AppPlatformMetrics(); @@ -221,9 +221,9 @@ // TODO(crbug.com/1174246): Support Lacros not keeping alive. std::unique_ptr<crosapi::BrowserManager::ScopedKeepAlive> keep_alive_; - base::WeakPtrFactory<AppServiceProxyChromeOs> weak_ptr_factory_{this}; + base::WeakPtrFactory<AppServiceProxyAsh> weak_ptr_factory_{this}; }; } // namespace apps -#endif // CHROME_BROWSER_APPS_APP_SERVICE_APP_SERVICE_PROXY_CHROMEOS_H_ +#endif // CHROME_BROWSER_APPS_APP_SERVICE_APP_SERVICE_PROXY_ASH_H_
diff --git a/chrome/browser/apps/app_service/app_service_proxy_base.cc b/chrome/browser/apps/app_service/app_service_proxy_base.cc index c148e2f..de35771 100644 --- a/chrome/browser/apps/app_service/app_service_proxy_base.cc +++ b/chrome/browser/apps/app_service/app_service_proxy_base.cc
@@ -374,7 +374,30 @@ std::move(callback).Run(LaunchResult()); return; } - publisher->LaunchAppWithParams(std::move(params), std::move(callback)); + + app_registry_cache_.ForOneApp( + params.app_id, + [this, ¶ms, &callback, &publisher](const apps::AppUpdate& update) { + if (MaybeShowLaunchPreventionDialog(update)) { + std::move(callback).Run(LaunchResult()); + return; + } + auto launch_source = params.launch_source; + // TODO(crbug/1117655): File manager records metrics for apps it + // launched. So we only record launches from other places. We should + // eventually move those metrics here, after AppService supports all + // app types launched by file manager. + if (launch_source != apps::mojom::LaunchSource::kFromFileManager) { + RecordAppLaunch(update.AppId(), launch_source); + } + + RecordAppPlatformMetrics(profile_, update, launch_source, + params.container); + + publisher->LaunchAppWithParams(std::move(params), std::move(callback)); + + PerformPostLaunchTasks(launch_source); + }); } void AppServiceProxyBase::SetPermission(const std::string& app_id,
diff --git a/chrome/browser/apps/app_service/app_service_proxy_forward.h b/chrome/browser/apps/app_service/app_service_proxy_forward.h index d0a70ba2..c75a5d2 100644 --- a/chrome/browser/apps/app_service/app_service_proxy_forward.h +++ b/chrome/browser/apps/app_service/app_service_proxy_forward.h
@@ -12,8 +12,8 @@ // Include this header to forward-declare AppServiceProxy in a way that is // compatible across all platforms. #if BUILDFLAG(IS_CHROMEOS_ASH) -class AppServiceProxyChromeOs; -using AppServiceProxy = AppServiceProxyChromeOs; +class AppServiceProxyAsh; +using AppServiceProxy = AppServiceProxyAsh; #elif BUILDFLAG(IS_CHROMEOS_LACROS) class AppServiceProxyLacros; using AppServiceProxy = AppServiceProxyLacros;
diff --git a/chrome/browser/apps/app_service/webapk/webapk_install_queue.cc b/chrome/browser/apps/app_service/webapk/webapk_install_queue.cc index dc8e05b0..3e408fd 100644 --- a/chrome/browser/apps/app_service/webapk/webapk_install_queue.cc +++ b/chrome/browser/apps/app_service/webapk/webapk_install_queue.cc
@@ -6,6 +6,7 @@ #include <utility> +#include "ash/components/arc/mojom/webapk.mojom.h" #include "ash/components/arc/session/arc_bridge_service.h" #include "ash/components/arc/session/arc_service_manager.h" #include "base/bind.h" @@ -15,7 +16,6 @@ #include "base/threading/thread_task_runner_handle.h" #include "chrome/browser/apps/app_service/webapk/webapk_install_task.h" #include "chrome/browser/profiles/profile.h" -#include "components/arc/mojom/webapk.mojom.h" namespace apps {
diff --git a/chrome/browser/apps/app_service/webapk/webapk_install_queue.h b/chrome/browser/apps/app_service/webapk/webapk_install_queue.h index d49e28a..fc55b8a 100644 --- a/chrome/browser/apps/app_service/webapk/webapk_install_queue.h +++ b/chrome/browser/apps/app_service/webapk/webapk_install_queue.h
@@ -8,10 +8,10 @@ #include <memory> #include <string> +#include "ash/components/arc/mojom/webapk.mojom-forward.h" #include "ash/components/arc/session/connection_observer.h" #include "base/containers/circular_deque.h" #include "base/memory/weak_ptr.h" -#include "components/arc/mojom/webapk.mojom-forward.h" class Profile;
diff --git a/chrome/browser/apps/app_service/webapk/webapk_install_task.cc b/chrome/browser/apps/app_service/webapk/webapk_install_task.cc index 45836a1..4bd1a15 100644 --- a/chrome/browser/apps/app_service/webapk/webapk_install_task.cc +++ b/chrome/browser/apps/app_service/webapk/webapk_install_task.cc
@@ -7,6 +7,7 @@ #include <algorithm> #include <utility> +#include "ash/components/arc/mojom/webapk.mojom.h" #include "ash/components/arc/session/arc_bridge_service.h" #include "ash/components/arc/session/arc_service_manager.h" #include "base/bind.h" @@ -26,7 +27,6 @@ #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/browser/web_applications/web_application_info.h" #include "chrome/common/chrome_switches.h" -#include "components/arc/mojom/webapk.mojom.h" #include "components/services/app_service/public/cpp/share_target.h" #include "components/version_info/version_info.h" #include "components/webapk/webapk.pb.h"
diff --git a/chrome/browser/apps/app_service/webapk/webapk_install_task.h b/chrome/browser/apps/app_service/webapk/webapk_install_task.h index f2d3233a..b85c6c8 100644 --- a/chrome/browser/apps/app_service/webapk/webapk_install_task.h +++ b/chrome/browser/apps/app_service/webapk/webapk_install_task.h
@@ -10,13 +10,13 @@ #include <vector> #include "ash/components/arc/arc_features_parser.h" +#include "ash/components/arc/mojom/webapk.mojom.h" #include "base/callback.h" #include "base/memory/weak_ptr.h" #include "base/time/time.h" #include "base/timer/timer.h" #include "chrome/browser/apps/app_service/webapk/webapk_metrics.h" #include "chrome/browser/web_applications/web_application_info.h" -#include "components/arc/mojom/webapk.mojom.h" #include "third_party/abseil-cpp/absl/types/optional.h" class Profile;
diff --git a/chrome/browser/apps/app_service/webapk/webapk_install_task_unittest.cc b/chrome/browser/apps/app_service/webapk/webapk_install_task_unittest.cc index f4018be0..ec3c729 100644 --- a/chrome/browser/apps/app_service/webapk/webapk_install_task_unittest.cc +++ b/chrome/browser/apps/app_service/webapk/webapk_install_task_unittest.cc
@@ -6,6 +6,7 @@ #include <memory> +#include "ash/components/arc/mojom/webapk.mojom.h" #include "ash/components/arc/session/arc_bridge_service.h" #include "ash/components/arc/session/arc_service_manager.h" #include "ash/components/arc/test/fake_webapk_instance.h" @@ -24,7 +25,6 @@ #include "chrome/browser/web_applications/web_application_info.h" #include "chrome/common/chrome_switches.h" #include "chrome/test/base/testing_profile.h" -#include "components/arc/mojom/webapk.mojom.h" #include "components/webapk/webapk.pb.h" #include "content/public/test/browser_task_environment.h" #include "net/test/embedded_test_server/default_handlers.h"
diff --git a/chrome/browser/apps/app_service/webapk/webapk_metrics.cc b/chrome/browser/apps/app_service/webapk/webapk_metrics.cc index 542206e2e..59be6da 100644 --- a/chrome/browser/apps/app_service/webapk/webapk_metrics.cc +++ b/chrome/browser/apps/app_service/webapk/webapk_metrics.cc
@@ -4,8 +4,8 @@ #include "chrome/browser/apps/app_service/webapk/webapk_metrics.h" +#include "ash/components/arc/mojom/webapk.mojom.h" #include "base/metrics/histogram_functions.h" -#include "components/arc/mojom/webapk.mojom.h" namespace apps {
diff --git a/chrome/browser/apps/app_service/webapk/webapk_metrics.h b/chrome/browser/apps/app_service/webapk/webapk_metrics.h index 8b203ed..2d09b33 100644 --- a/chrome/browser/apps/app_service/webapk/webapk_metrics.h +++ b/chrome/browser/apps/app_service/webapk/webapk_metrics.h
@@ -5,7 +5,7 @@ #ifndef CHROME_BROWSER_APPS_APP_SERVICE_WEBAPK_WEBAPK_METRICS_H_ #define CHROME_BROWSER_APPS_APP_SERVICE_WEBAPK_WEBAPK_METRICS_H_ -#include "components/arc/mojom/webapk.mojom-forward.h" +#include "ash/components/arc/mojom/webapk.mojom-forward.h" namespace apps {
diff --git a/chrome/browser/ash/app_mode/kiosk_external_updater.h b/chrome/browser/ash/app_mode/kiosk_external_updater.h index c5aea1a..4df4d31a 100644 --- a/chrome/browser/ash/app_mode/kiosk_external_updater.h +++ b/chrome/browser/ash/app_mode/kiosk_external_updater.h
@@ -22,7 +22,7 @@ // Observes the disk mount/unmount events, scans the usb stick for external // kiosk app updates, validates the external crx, and updates the cache. -class KioskExternalUpdater : public chromeos::disks::DiskMountManager::Observer, +class KioskExternalUpdater : public disks::DiskMountManager::Observer, public KioskExternalUpdateValidatorDelegate { public: enum class ErrorCode { @@ -56,11 +56,11 @@ std::u16string error; }; - // chromeos::disks::DiskMountManager::Observer overrides. - void OnMountEvent(chromeos::disks::DiskMountManager::MountEvent event, - chromeos::MountError error_code, - const chromeos::disks::DiskMountManager::MountPointInfo& - mount_info) override; + // ash::disks::DiskMountManager::Observer overrides. + void OnMountEvent( + disks::DiskMountManager::MountEvent event, + chromeos::MountError error_code, + const disks::DiskMountManager::MountPointInfo& mount_info) override; // KioskExternalUpdateValidatorDelegate overrides: void OnExternalUpdateUnpackSuccess(const std::string& app_id,
diff --git a/chrome/browser/ash/arc/enterprise/cert_store/arc_cert_installer_unittest.cc b/chrome/browser/ash/arc/enterprise/cert_store/arc_cert_installer_unittest.cc index a6dd707..5d417ff 100644 --- a/chrome/browser/ash/arc/enterprise/cert_store/arc_cert_installer_unittest.cc +++ b/chrome/browser/ash/arc/enterprise/cert_store/arc_cert_installer_unittest.cc
@@ -7,6 +7,7 @@ #include <string> #include <vector> +#include "ash/components/arc/mojom/policy.mojom.h" #include "ash/components/arc/session/arc_bridge_service.h" #include "ash/components/arc/session/arc_service_manager.h" #include "ash/components/arc/test/fake_policy_instance.h" @@ -16,7 +17,6 @@ #include "base/time/time.h" #include "chrome/browser/ash/arc/policy/arc_policy_bridge.h" #include "chrome/test/base/testing_profile.h" -#include "components/arc/mojom/policy.mojom.h" #include "components/policy/core/common/remote_commands/remote_commands_queue.h" #include "content/public/test/browser_task_environment.h" #include "crypto/rsa_private_key.h"
diff --git a/chrome/browser/ash/arc/input_method_manager/arc_input_method_manager_service.cc b/chrome/browser/ash/arc/input_method_manager/arc_input_method_manager_service.cc index f0dc86f..98806fbc 100644 --- a/chrome/browser/ash/arc/input_method_manager/arc_input_method_manager_service.cc +++ b/chrome/browser/ash/arc/input_method_manager/arc_input_method_manager_service.cc
@@ -206,6 +206,7 @@ const ui::IMEEngineHandlerInterface::InputContext& context) override { owner_->Focus(context_id); } + void OnTouch(ui::EventPointerType pointerType) override {} void OnBlur(const std::string& engine_id, int context_id) override { owner_->Blur(); }
diff --git a/chrome/browser/ash/arc/input_method_manager/input_connection_impl_unittest.cc b/chrome/browser/ash/arc/input_method_manager/input_connection_impl_unittest.cc index 571c9ca..e97a973 100644 --- a/chrome/browser/ash/arc/input_method_manager/input_connection_impl_unittest.cc +++ b/chrome/browser/ash/arc/input_method_manager/input_connection_impl_unittest.cc
@@ -37,6 +37,7 @@ const std::string& engine_id, int context_id, const ui::IMEEngineHandlerInterface::InputContext& context) override {} + void OnTouch(ui::EventPointerType pointerType) override {} void OnBlur(const std::string& engine_id, int context_id) override {} void OnKeyEvent( const std::string& engine_id,
diff --git a/chrome/browser/ash/arc/instance_throttle/arc_instance_throttle.cc b/chrome/browser/ash/arc/instance_throttle/arc_instance_throttle.cc index d4465eb0..f94b01b 100644 --- a/chrome/browser/ash/arc/instance_throttle/arc_instance_throttle.cc +++ b/chrome/browser/ash/arc/instance_throttle/arc_instance_throttle.cc
@@ -6,6 +6,7 @@ #include "ash/components/arc/arc_browser_context_keyed_service_factory_base.h" #include "ash/components/arc/arc_features.h" +#include "ash/components/arc/mojom/power.mojom.h" #include "ash/components/arc/session/arc_bridge_service.h" #include "base/logging.h" #include "base/metrics/histogram_functions.h" @@ -22,7 +23,6 @@ #include "chrome/browser/ash/arc/instance_throttle/arc_switch_throttle_observer.h" #include "chromeos/dbus/concierge/concierge_client.h" #include "chromeos/dbus/session_manager/session_manager_client.h" -#include "components/arc/mojom/power.mojom.h" namespace arc {
diff --git a/chrome/browser/ash/arc/instance_throttle/arc_instance_throttle_unittest.cc b/chrome/browser/ash/arc/instance_throttle/arc_instance_throttle_unittest.cc index c322e3df..5a199d6 100644 --- a/chrome/browser/ash/arc/instance_throttle/arc_instance_throttle_unittest.cc +++ b/chrome/browser/ash/arc/instance_throttle/arc_instance_throttle_unittest.cc
@@ -10,6 +10,7 @@ #include "ash/components/arc/arc_features.h" #include "ash/components/arc/arc_prefs.h" +#include "ash/components/arc/mojom/power.mojom.h" #include "ash/components/arc/power/arc_power_bridge.h" #include "ash/components/arc/session/arc_bridge_service.h" #include "ash/components/arc/session/arc_service_manager.h" @@ -27,7 +28,6 @@ #include "chromeos/dbus/concierge/concierge_client.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/power/power_manager_client.h" -#include "components/arc/mojom/power.mojom.h" #include "components/sync_preferences/testing_pref_service_syncable.h" #include "content/public/test/browser_task_environment.h" #include "services/device/public/cpp/test/test_wake_lock_provider.h"
diff --git a/chrome/browser/ash/arc/instance_throttle/arc_power_throttle_observer_unittest.cc b/chrome/browser/ash/arc/instance_throttle/arc_power_throttle_observer_unittest.cc index 43f1900..05fc40cb 100644 --- a/chrome/browser/ash/arc/instance_throttle/arc_power_throttle_observer_unittest.cc +++ b/chrome/browser/ash/arc/instance_throttle/arc_power_throttle_observer_unittest.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/ash/arc/instance_throttle/arc_power_throttle_observer.h" +#include "ash/components/arc/mojom/anr.mojom.h" #include "ash/components/arc/session/arc_bridge_service.h" #include "ash/components/arc/session/arc_service_manager.h" #include "ash/components/arc/test/arc_util_test_support.h" @@ -16,7 +17,6 @@ #include "chromeos/dbus/concierge/concierge_client.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/power/power_manager_client.h" -#include "components/arc/mojom/anr.mojom.h" #include "content/public/test/browser_task_environment.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/ash/arc/policy/arc_policy_bridge.h b/chrome/browser/ash/arc/policy/arc_policy_bridge.h index 0e99a1ec..f9c17951 100644 --- a/chrome/browser/ash/arc/policy/arc_policy_bridge.h +++ b/chrome/browser/ash/arc/policy/arc_policy_bridge.h
@@ -12,12 +12,12 @@ #include <string> #include <vector> +#include "ash/components/arc/mojom/policy.mojom.h" #include "ash/components/arc/session/connection_observer.h" #include "base/callback_forward.h" #include "base/memory/weak_ptr.h" #include "base/observer_list.h" #include "base/time/time.h" -#include "components/arc/mojom/policy.mojom.h" #include "components/keyed_service/core/keyed_service.h" #include "components/policy/core/common/policy_namespace.h" #include "components/policy/core/common/policy_service.h"
diff --git a/chrome/browser/ash/arc/print_spooler/arc_print_spooler_bridge.h b/chrome/browser/ash/arc/print_spooler/arc_print_spooler_bridge.h index 24c11cd9..c41529a9a 100644 --- a/chrome/browser/ash/arc/print_spooler/arc_print_spooler_bridge.h +++ b/chrome/browser/ash/arc/print_spooler/arc_print_spooler_bridge.h
@@ -5,8 +5,8 @@ #ifndef CHROME_BROWSER_ASH_ARC_PRINT_SPOOLER_ARC_PRINT_SPOOLER_BRIDGE_H_ #define CHROME_BROWSER_ASH_ARC_PRINT_SPOOLER_ARC_PRINT_SPOOLER_BRIDGE_H_ +#include "ash/components/arc/mojom/print_spooler.mojom.h" #include "base/memory/weak_ptr.h" -#include "components/arc/mojom/print_spooler.mojom.h" #include "components/keyed_service/core/keyed_service.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/system/platform_handle.h"
diff --git a/chrome/browser/ash/arc/print_spooler/print_session_impl.cc b/chrome/browser/ash/arc/print_spooler/print_session_impl.cc index 2ccd26c3..65f07bb 100644 --- a/chrome/browser/ash/arc/print_spooler/print_session_impl.cc +++ b/chrome/browser/ash/arc/print_spooler/print_session_impl.cc
@@ -8,6 +8,7 @@ #include <string> #include <utility> +#include "ash/components/arc/mojom/print_common.mojom.h" #include "base/bind.h" #include "base/containers/span.h" #include "base/files/file.h" @@ -26,7 +27,6 @@ #include "chrome/browser/printing/printing_service.h" #include "chrome/services/printing/public/mojom/printing_service.mojom.h" #include "components/arc/intent_helper/custom_tab.h" -#include "components/arc/mojom/print_common.mojom.h" #include "content/public/browser/web_contents.h" #include "mojo/public/c/system/types.h" #include "net/base/filename_util.h"
diff --git a/chrome/browser/ash/arc/print_spooler/print_session_impl.h b/chrome/browser/ash/arc/print_spooler/print_session_impl.h index 16c1999..aba9053 100644 --- a/chrome/browser/ash/arc/print_spooler/print_session_impl.h +++ b/chrome/browser/ash/arc/print_spooler/print_session_impl.h
@@ -7,6 +7,7 @@ #include <memory> +#include "ash/components/arc/mojom/print_spooler.mojom.h" #include "base/containers/flat_map.h" #include "base/memory/read_only_shared_memory_region.h" #include "base/memory/weak_ptr.h" @@ -14,7 +15,6 @@ #include "base/values.h" #include "chrome/browser/ui/ash/arc_custom_tab_modal_dialog_host.h" #include "chrome/services/printing/public/mojom/pdf_flattener.mojom.h" -#include "components/arc/mojom/print_spooler.mojom.h" #include "components/printing/common/print.mojom.h" #include "content/public/browser/web_contents_user_data.h" #include "mojo/public/cpp/bindings/associated_receiver.h"
diff --git a/chrome/browser/ash/arc/process/arc_process.cc b/chrome/browser/ash/arc/process/arc_process.cc index 23a9b2d9..f1d7d4c 100644 --- a/chrome/browser/ash/arc/process/arc_process.cc +++ b/chrome/browser/ash/arc/process/arc_process.cc
@@ -6,9 +6,9 @@ #include <utility> +#include "ash/components/arc/mojom/process.mojom.h" #include "base/no_destructor.h" #include "base/strings/string_util.h" -#include "components/arc/mojom/process.mojom.h" namespace arc {
diff --git a/chrome/browser/ash/arc/process/arc_process.h b/chrome/browser/ash/arc/process/arc_process.h index 580902c..96ac21e 100644 --- a/chrome/browser/ash/arc/process/arc_process.h +++ b/chrome/browser/ash/arc/process/arc_process.h
@@ -11,8 +11,8 @@ #include <string> #include <vector> +#include "ash/components/arc/mojom/process.mojom-forward.h" #include "base/process/process_handle.h" -#include "components/arc/mojom/process.mojom-forward.h" namespace arc {
diff --git a/chrome/browser/ash/arc/process/arc_process_service.cc b/chrome/browser/ash/arc/process/arc_process_service.cc index 79bee4c8..8a89f2d 100644 --- a/chrome/browser/ash/arc/process/arc_process_service.cc +++ b/chrome/browser/ash/arc/process/arc_process_service.cc
@@ -18,6 +18,7 @@ #include "ash/components/arc/arc_browser_context_keyed_service_factory_base.h" #include "ash/components/arc/arc_util.h" +#include "ash/components/arc/mojom/process.mojom.h" #include "ash/components/arc/session/arc_bridge_service.h" #include "base/bind.h" #include "base/containers/cxx20_erase.h" @@ -35,7 +36,6 @@ #include "base/time/time.h" #include "base/trace_event/trace_event.h" #include "chrome/browser/ash/process_snapshot_server.h" -#include "components/arc/mojom/process.mojom.h" #include "content/public/browser/browser_thread.h" namespace arc {
diff --git a/chrome/browser/ash/arc/process/arc_process_service.h b/chrome/browser/ash/arc/process/arc_process_service.h index b5a5393..13142c8a 100644 --- a/chrome/browser/ash/arc/process/arc_process_service.h +++ b/chrome/browser/ash/arc/process/arc_process_service.h
@@ -10,6 +10,7 @@ #include <queue> #include <vector> +#include "ash/components/arc/mojom/process.mojom-forward.h" #include "ash/components/arc/session/connection_observer.h" #include "base/callback.h" #include "base/memory/ref_counted.h" @@ -18,7 +19,6 @@ #include "base/task/sequenced_task_runner.h" #include "chrome/browser/ash/arc/process/arc_process.h" #include "chrome/browser/ash/process_snapshot_server.h" -#include "components/arc/mojom/process.mojom-forward.h" #include "components/keyed_service/core/keyed_service.h" #include "services/resource_coordinator/public/cpp/memory_instrumentation/global_memory_dump.h" #include "services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom.h"
diff --git a/chrome/browser/ash/arc/process/arc_process_unittest.cc b/chrome/browser/ash/arc/process/arc_process_unittest.cc index 716d2ab..046b084 100644 --- a/chrome/browser/ash/arc/process/arc_process_unittest.cc +++ b/chrome/browser/ash/arc/process/arc_process_unittest.cc
@@ -9,7 +9,7 @@ #include <list> #include <sstream> -#include "components/arc/mojom/process.mojom.h" +#include "ash/components/arc/mojom/process.mojom.h" #include "testing/gtest/include/gtest/gtest.h" namespace arc {
diff --git a/chrome/browser/ash/arc/screen_capture/arc_screen_capture_bridge.cc b/chrome/browser/ash/arc/screen_capture/arc_screen_capture_bridge.cc index 62efcc73..780b82a 100644 --- a/chrome/browser/ash/arc/screen_capture/arc_screen_capture_bridge.cc +++ b/chrome/browser/ash/arc/screen_capture/arc_screen_capture_bridge.cc
@@ -195,8 +195,9 @@ } // TODO(crbug.com/955171): Remove this temporary conversion to InterfacePtr - // once OpenSession callback from //components/arc/mojom/screen_capture.mojom - // could take pending_remote directly. Refer to crrev.com/c/1868870. + // once OpenSession callback from + // //ash/components/arc/mojom/screen_capture.mojom could take pending_remote + // directly. Refer to crrev.com/c/1868870. mojo::PendingRemote<mojom::ScreenCaptureSession> screen_capture_session_remote(ArcScreenCaptureSession::Create( std::move(notifier), found->second.display_name,
diff --git a/chrome/browser/ash/arc/screen_capture/arc_screen_capture_bridge.h b/chrome/browser/ash/arc/screen_capture/arc_screen_capture_bridge.h index 00cd32c..a748efb 100644 --- a/chrome/browser/ash/arc/screen_capture/arc_screen_capture_bridge.h +++ b/chrome/browser/ash/arc/screen_capture/arc_screen_capture_bridge.h
@@ -9,8 +9,8 @@ #include <string> #include <unordered_map> +#include "ash/components/arc/mojom/screen_capture.mojom.h" #include "chrome/browser/media/webrtc/desktop_media_picker.h" -#include "components/arc/mojom/screen_capture.mojom.h" #include "components/keyed_service/core/keyed_service.h" #include "content/public/browser/desktop_media_id.h"
diff --git a/chrome/browser/ash/arc/screen_capture/arc_screen_capture_session.cc b/chrome/browser/ash/arc/screen_capture/arc_screen_capture_session.cc index 7d34300..2d3bef0 100644 --- a/chrome/browser/ash/arc/screen_capture/arc_screen_capture_session.cc +++ b/chrome/browser/ash/arc/screen_capture/arc_screen_capture_session.cc
@@ -6,13 +6,13 @@ #include <utility> +#include "ash/components/arc/mojom/screen_capture.mojom.h" #include "ash/shell.h" #include "base/bind.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/ash/notifications/screen_capture_notification_ui_ash.h" #include "chrome/browser/media/webrtc/desktop_capture_access_handler.h" #include "chrome/grit/generated_resources.h" -#include "components/arc/mojom/screen_capture.mojom.h" #include "components/viz/common/frame_sinks/copy_output_request.h" #include "components/viz/common/frame_sinks/copy_output_result.h" #include "components/viz/common/gpu/context_provider.h"
diff --git a/chrome/browser/ash/arc/screen_capture/arc_screen_capture_session.h b/chrome/browser/ash/arc/screen_capture/arc_screen_capture_session.h index aed410f..1b60668 100644 --- a/chrome/browser/ash/arc/screen_capture/arc_screen_capture_session.h +++ b/chrome/browser/ash/arc/screen_capture/arc_screen_capture_session.h
@@ -9,7 +9,7 @@ #include <queue> #include <string> -#include "components/arc/mojom/screen_capture.mojom.h" +#include "ash/components/arc/mojom/screen_capture.mojom.h" #include "components/viz/common/gpu/context_lost_observer.h" #include "gpu/command_buffer/client/gl_helper.h" #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/chrome/browser/ash/arc/sharesheet/arc_sharesheet_bridge.h b/chrome/browser/ash/arc/sharesheet/arc_sharesheet_bridge.h index a1a2ff2..49e85c5 100644 --- a/chrome/browser/ash/arc/sharesheet/arc_sharesheet_bridge.h +++ b/chrome/browser/ash/arc/sharesheet/arc_sharesheet_bridge.h
@@ -5,8 +5,8 @@ #ifndef CHROME_BROWSER_ASH_ARC_SHARESHEET_ARC_SHARESHEET_BRIDGE_H_ #define CHROME_BROWSER_ASH_ARC_SHARESHEET_ARC_SHARESHEET_BRIDGE_H_ +#include "ash/components/arc/mojom/sharesheet.mojom.h" #include "base/memory/weak_ptr.h" -#include "components/arc/mojom/sharesheet.mojom.h" #include "components/keyed_service/core/keyed_service.h" class Profile;
diff --git a/chrome/browser/ash/arc/tracing/arc_app_performance_tracing.h b/chrome/browser/ash/arc/tracing/arc_app_performance_tracing.h index 952d143d..463e0da 100644 --- a/chrome/browser/ash/arc/tracing/arc_app_performance_tracing.h +++ b/chrome/browser/ash/arc/tracing/arc_app_performance_tracing.h
@@ -12,10 +12,10 @@ #include <set> #include <string> +#include "ash/components/arc/mojom/metrics.mojom.h" #include "base/callback.h" #include "base/time/time.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" -#include "components/arc/mojom/metrics.mojom.h" #include "components/exo/surface_observer.h" #include "components/keyed_service/core/keyed_service.h" #include "ui/aura/window_observer.h"
diff --git a/chrome/browser/ash/arc/tracing/arc_tracing_bridge.cc b/chrome/browser/ash/arc/tracing/arc_tracing_bridge.cc index 4d92eb6..4a88b36 100644 --- a/chrome/browser/ash/arc/tracing/arc_tracing_bridge.cc +++ b/chrome/browser/ash/arc/tracing/arc_tracing_bridge.cc
@@ -7,6 +7,7 @@ #include <utility> #include "ash/components/arc/arc_browser_context_keyed_service_factory_base.h" +#include "ash/components/arc/mojom/tracing.mojom.h" #include "ash/components/arc/session/arc_bridge_service.h" #include "ash/components/arc/session/arc_service_manager.h" #include "base/bind.h" @@ -20,7 +21,6 @@ #include "base/time/time.h" #include "base/trace_event/trace_config.h" #include "base/trace_event/trace_event.h" -#include "components/arc/mojom/tracing.mojom.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "mojo/public/cpp/system/platform_handle.h"
diff --git a/chrome/browser/ash/arc/tracing/arc_tracing_bridge.h b/chrome/browser/ash/arc/tracing/arc_tracing_bridge.h index af2f4fb..a6bf782 100644 --- a/chrome/browser/ash/arc/tracing/arc_tracing_bridge.h +++ b/chrome/browser/ash/arc/tracing/arc_tracing_bridge.h
@@ -10,12 +10,12 @@ #include <string> #include <vector> +#include "ash/components/arc/mojom/tracing.mojom-forward.h" #include "ash/components/arc/session/connection_observer.h" #include "base/callback_forward.h" #include "base/memory/weak_ptr.h" #include "base/synchronization/lock.h" #include "base/thread_annotations.h" -#include "components/arc/mojom/tracing.mojom-forward.h" #include "components/keyed_service/core/keyed_service.h" #include "services/tracing/public/cpp/base_agent.h"
diff --git a/chrome/browser/ash/arc/tts/arc_tts_service.h b/chrome/browser/ash/arc/tts/arc_tts_service.h index 0d57721..bbec1e1 100644 --- a/chrome/browser/ash/arc/tts/arc_tts_service.h +++ b/chrome/browser/ash/arc/tts/arc_tts_service.h
@@ -7,7 +7,7 @@ #include <string> -#include "components/arc/mojom/tts.mojom.h" +#include "ash/components/arc/mojom/tts.mojom.h" #include "components/keyed_service/core/keyed_service.h" namespace content {
diff --git a/chrome/browser/ash/arc/wallpaper/arc_wallpaper_service.h b/chrome/browser/ash/arc/wallpaper/arc_wallpaper_service.h index 1242fcc..1c965ef 100644 --- a/chrome/browser/ash/arc/wallpaper/arc_wallpaper_service.h +++ b/chrome/browser/ash/arc/wallpaper/arc_wallpaper_service.h
@@ -10,8 +10,8 @@ #include <memory> #include <vector> +#include "ash/components/arc/mojom/wallpaper.mojom.h" #include "chrome/browser/image_decoder/image_decoder.h" -#include "components/arc/mojom/wallpaper.mojom.h" #include "components/keyed_service/core/keyed_service.h" namespace content {
diff --git a/chrome/browser/ash/crosapi/browser_manager.h b/chrome/browser/ash/crosapi/browser_manager.h index 9cf56d4..5891d0f4 100644 --- a/chrome/browser/ash/crosapi/browser_manager.h +++ b/chrome/browser/ash/crosapi/browser_manager.h
@@ -35,7 +35,7 @@ } // namespace component_updater namespace apps { -class AppServiceProxyChromeOs; +class AppServiceProxyAsh; class StandaloneBrowserExtensionApps; } // namespace apps @@ -255,7 +255,7 @@ // TODO(crbug.com/1174246): This is a short term solution to integrate // web apps in Lacros. Need to decouple the App Platform systems from // needing lacros-chrome running all the time. - friend class apps::AppServiceProxyChromeOs; + friend class apps::AppServiceProxyAsh; // Returns true if the binary is ready to launch or already launched. bool IsReady() const;
diff --git a/chrome/browser/ash/crostini/crostini_browser_test_util.cc b/chrome/browser/ash/crostini/crostini_browser_test_util.cc index a09a5f1..392337f 100644 --- a/chrome/browser/ash/crostini/crostini_browser_test_util.cc +++ b/chrome/browser/ash/crostini/crostini_browser_test_util.cc
@@ -95,11 +95,11 @@ scoped_feature_list_.InitAndEnableFeature(features::kCrostini); fake_crostini_features_.SetAll(true); - dmgr_ = new chromeos::disks::MockDiskMountManager; + dmgr_ = new ash::disks::MockDiskMountManager; ON_CALL(*dmgr_, MountPath) .WillByDefault(Invoke(this, &CrostiniBrowserTestBase::DiskMountImpl)); // Test object will be deleted by DiskMountManager::Shutdown - chromeos::disks::DiskMountManager::InitializeForTesting(dmgr_); + ash::disks::DiskMountManager::InitializeForTesting(dmgr_); } void CrostiniBrowserTestBase::DiskMountImpl( const std::string& source_path, @@ -108,14 +108,12 @@ const std::vector<std::string>& mount_options, chromeos::MountType type, chromeos::MountAccessMode access_mode, - chromeos::disks::DiskMountManager::MountPathCallback callback) { - chromeos::disks::DiskMountManager::MountPointInfo info( - source_path, "/path/to/mount", type, - chromeos::disks::MOUNT_CONDITION_NONE); + ash::disks::DiskMountManager::MountPathCallback callback) { + ash::disks::DiskMountManager::MountPointInfo info( + source_path, "/path/to/mount", type, ash::disks::MOUNT_CONDITION_NONE); std::move(callback).Run(chromeos::MountError::MOUNT_ERROR_NONE, info); - dmgr_->NotifyMountEvent( - chromeos::disks::DiskMountManager::MountEvent::MOUNTING, - chromeos::MountError::MOUNT_ERROR_NONE, info); + dmgr_->NotifyMountEvent(ash::disks::DiskMountManager::MountEvent::MOUNTING, + chromeos::MountError::MOUNT_ERROR_NONE, info); } void CrostiniBrowserTestBase::CreatedBrowserMainParts(
diff --git a/chrome/browser/ash/crostini/crostini_browser_test_util.h b/chrome/browser/ash/crostini/crostini_browser_test_util.h index c93ce247..806588c 100644 --- a/chrome/browser/ash/crostini/crostini_browser_test_util.h +++ b/chrome/browser/ash/crostini/crostini_browser_test_util.h
@@ -45,17 +45,16 @@ CrostiniBrowserTestChromeBrowserMainExtraParts* extra_parts_ = nullptr; private: - void DiskMountImpl( - const std::string& source_path, - const std::string& source_format, - const std::string& mount_label, - const std::vector<std::string>& mount_options, - chromeos::MountType type, - chromeos::MountAccessMode access_mode, - chromeos::disks::DiskMountManager::MountPathCallback callback); + void DiskMountImpl(const std::string& source_path, + const std::string& source_format, + const std::string& mount_label, + const std::vector<std::string>& mount_options, + chromeos::MountType type, + chromeos::MountAccessMode access_mode, + ash::disks::DiskMountManager::MountPathCallback callback); - // Owned by chromeos::disks::DiskMountManager; - chromeos::disks::MockDiskMountManager* dmgr_; + // Owned by ash::disks::DiskMountManager; + ash::disks::MockDiskMountManager* dmgr_; }; #endif // CHROME_BROWSER_ASH_CROSTINI_CROSTINI_BROWSER_TEST_UTIL_H_
diff --git a/chrome/browser/ash/crostini/crostini_installer_unittest.cc b/chrome/browser/ash/crostini/crostini_installer_unittest.cc index bdc736a..00977e4 100644 --- a/chrome/browser/ash/crostini/crostini_installer_unittest.cc +++ b/chrome/browser/ash/crostini/crostini_installer_unittest.cc
@@ -127,8 +127,8 @@ chromeos::SeneschalClient::InitializeFake(); - disk_mount_manager_mock_ = new chromeos::disks::MockDiskMountManager; - chromeos::disks::DiskMountManager::InitializeForTesting( + disk_mount_manager_mock_ = new ash::disks::MockDiskMountManager; + ash::disks::DiskMountManager::InitializeForTesting( disk_mount_manager_mock_); profile_ = std::make_unique<TestingProfile>(); @@ -153,7 +153,7 @@ crostini_test_helper_.reset(); profile_.reset(); - chromeos::disks::MockDiskMountManager::Shutdown(); + ash::disks::MockDiskMountManager::Shutdown(); chromeos::SeneschalClient::Shutdown(); chromeos::ConciergeClient::Shutdown(); chromeos::CiceroneClient::Shutdown(); @@ -188,7 +188,7 @@ base::HistogramTester histogram_tester_; // Owned by DiskMountManager - chromeos::disks::MockDiskMountManager* disk_mount_manager_mock_ = nullptr; + ash::disks::MockDiskMountManager* disk_mount_manager_mock_ = nullptr; WaitingFakeConciergeClient* waiting_fake_concierge_client_ = nullptr;
diff --git a/chrome/browser/ash/crostini/crostini_manager_unittest.cc b/chrome/browser/ash/crostini/crostini_manager_unittest.cc index 965844a..cbc0c0eb 100644 --- a/chrome/browser/ash/crostini/crostini_manager_unittest.cc +++ b/chrome/browser/ash/crostini/crostini_manager_unittest.cc
@@ -803,7 +803,7 @@ int restart_crostini_callback_count_ = 0; CrostiniResult last_crostini_callback_result_ = CrostiniResult::SUCCESS; int remove_crostini_callback_count_ = 0; - chromeos::disks::MockDiskMountManager* disk_mount_manager_mock_; + ash::disks::MockDiskMountManager* disk_mount_manager_mock_; base::HistogramTester histogram_tester_{}; base::RepeatingCallback<void(mojom::InstallerState)> on_stage_started_ = @@ -1780,7 +1780,7 @@ } void TearDown() override { - chromeos::disks::DiskMountManager::Shutdown(); + ash::disks::DiskMountManager::Shutdown(); CrostiniManagerRestartTest::TearDown(); } };
diff --git a/chrome/browser/ash/crostini/crostini_sshfs.cc b/chrome/browser/ash/crostini/crostini_sshfs.cc index 343f8cdc..0c1ea5e9 100644 --- a/chrome/browser/ash/crostini/crostini_sshfs.cc +++ b/chrome/browser/ash/crostini/crostini_sshfs.cc
@@ -139,7 +139,7 @@ } // Add ourselves as an observer so we can continue once the path is mounted. - auto* dmgr = chromeos::disks::DiskMountManager::GetInstance(); + auto* dmgr = ash::disks::DiskMountManager::GetInstance(); // Call to sshfs to mount. in_progress_mount_->source_path = base::StringPrintf( @@ -158,7 +158,7 @@ void CrostiniSshfs::OnMountEvent( chromeos::MountError error_code, - const chromeos::disks::DiskMountManager::MountPointInfo& mount_info) { + const ash::disks::DiskMountManager::MountPointInfo& mount_info) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); if (error_code != chromeos::MountError::MOUNT_ERROR_NONE) {
diff --git a/chrome/browser/ash/crostini/crostini_sshfs.h b/chrome/browser/ash/crostini/crostini_sshfs.h index 9e4ffd4..c51279ca0e 100644 --- a/chrome/browser/ash/crostini/crostini_sshfs.h +++ b/chrome/browser/ash/crostini/crostini_sshfs.h
@@ -47,7 +47,7 @@ void OnMountEvent( chromeos::MountError error_code, - const chromeos::disks::DiskMountManager::MountPointInfo& mount_info); + const ash::disks::DiskMountManager::MountPointInfo& mount_info); // Returns true if sshfs is mounted for the specified container, else false. bool IsSshfsMounted(const ContainerId& container);
diff --git a/chrome/browser/ash/crostini/crostini_sshfs_unittest.cc b/chrome/browser/ash/crostini/crostini_sshfs_unittest.cc index 674cbd6..4a2b5509 100644 --- a/chrome/browser/ash/crostini/crostini_sshfs_unittest.cc +++ b/chrome/browser/ash/crostini/crostini_sshfs_unittest.cc
@@ -40,7 +40,7 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -using chromeos::disks::DiskMountManager; +using ::ash::disks::DiskMountManager; using testing::_; namespace { @@ -59,8 +59,7 @@ return std::make_unique<file_manager::VolumeManager>( Profile::FromBrowserContext(context), nullptr /* drive_integration_service */, - nullptr /* power_manager_client */, - chromeos::disks::DiskMountManager::GetInstance(), + nullptr /* power_manager_client */, DiskMountManager::GetInstance(), nullptr /* file_system_provider_service */, file_manager::VolumeManager::GetMtpStorageInfoCallback()); } @@ -80,12 +79,12 @@ std::make_unique<CrostiniTestHelper>(profile_.get()); // DiskMountManager::InitializeForTesting takes ownership and works with // a raw pointer, hence the new with no matching delete. - disk_manager_ = new chromeos::disks::MockDiskMountManager; + disk_manager_ = new ash::disks::MockDiskMountManager; crostini_sshfs_ = std::make_unique<CrostiniSshfs>(profile_.get()); file_manager::VolumeManagerFactory::GetInstance()->SetTestingFactory( profile_.get(), base::BindRepeating(&BuildVolumeManager)); - chromeos::disks::DiskMountManager::InitializeForTesting(disk_manager_); + DiskMountManager::InitializeForTesting(disk_manager_); std::string known_hosts; base::Base64Encode("[hostname]:2222 pubkey", &known_hosts); @@ -104,7 +103,7 @@ kMountName); file_manager::VolumeManagerFactory::GetInstance()->SetTestingFactory( profile_.get(), BrowserContextKeyedServiceFactory::TestingFactory{}); - chromeos::disks::DiskMountManager::Shutdown(); + DiskMountManager::Shutdown(); crostini_sshfs_.reset(); crostini_test_helper_.reset(); profile_.reset(); @@ -130,13 +129,12 @@ const std::vector<std::string>& mount_options, chromeos::MountType type, chromeos::MountAccessMode access_mode, - chromeos::disks::DiskMountManager::MountPathCallback callback) { + ash::disks::DiskMountManager::MountPathCallback callback) { auto event = DiskMountManager::MountEvent::MOUNTING; auto code = chromeos::MountError::MOUNT_ERROR_NONE; auto info = DiskMountManager::MountPointInfo( "sshfs://username@hostname:", "/media/fuse/" + kMountName, - chromeos::MOUNT_TYPE_NETWORK_STORAGE, - chromeos::disks::MOUNT_CONDITION_NONE); + chromeos::MOUNT_TYPE_NETWORK_STORAGE, ash::disks::MOUNT_CONDITION_NONE); disk_manager_->NotifyMountEvent(event, code, info); std::move(callback).Run(code, info); } @@ -161,7 +159,7 @@ } content::BrowserTaskEnvironment task_environment_; - chromeos::disks::MockDiskMountManager* disk_manager_; + ash::disks::MockDiskMountManager* disk_manager_; std::unique_ptr<TestingProfile> profile_; std::unique_ptr<CrostiniTestHelper> crostini_test_helper_; const std::string kMountName = "crostini_test_termina_penguin";
diff --git a/chrome/browser/ash/drive/drive_integration_service.cc b/chrome/browser/ash/drive/drive_integration_service.cc index 009d5a50..7a0e8f0ee 100644 --- a/chrome/browser/ash/drive/drive_integration_service.cc +++ b/chrome/browser/ash/drive/drive_integration_service.cc
@@ -479,7 +479,7 @@ this, content::GetNetworkConnectionTracker(), base::DefaultClock::GetInstance(), - chromeos::disks::DiskMountManager::GetInstance(), + ash::disks::DiskMountManager::GetInstance(), std::make_unique<base::OneShotTimer>()) {} DriveFsHolder(const DriveFsHolder&) = delete;
diff --git a/chrome/browser/ash/file_manager/fake_disk_mount_manager.cc b/chrome/browser/ash/file_manager/fake_disk_mount_manager.cc index 9ec3432..20a9b72 100644 --- a/chrome/browser/ash/file_manager/fake_disk_mount_manager.cc +++ b/chrome/browser/ash/file_manager/fake_disk_mount_manager.cc
@@ -48,18 +48,18 @@ observers_.RemoveObserver(observer); } -const chromeos::disks::DiskMountManager::DiskMap& -FakeDiskMountManager::disks() const { +const ash::disks::DiskMountManager::DiskMap& FakeDiskMountManager::disks() + const { return disks_; } -const chromeos::disks::Disk* FakeDiskMountManager::FindDiskBySourcePath( +const ash::disks::Disk* FakeDiskMountManager::FindDiskBySourcePath( const std::string& source_path) const { DiskMap::const_iterator iter = disks_.find(source_path); return iter != disks_.end() ? iter->second.get() : nullptr; } -const chromeos::disks::DiskMountManager::MountPointMap& +const ash::disks::DiskMountManager::MountPointMap& FakeDiskMountManager::mount_points() const { return mount_points_; } @@ -81,11 +81,8 @@ mount_requests_.emplace_back(source_path, source_format, mount_label, mount_options, type, access_mode); - const MountPointInfo mount_point( - source_path, - source_path, - type, - chromeos::disks::MOUNT_CONDITION_NONE); + const MountPointInfo mount_point(source_path, source_path, type, + ash::disks::MOUNT_CONDITION_NONE); mount_points_.insert(make_pair(source_path, mount_point)); std::move(callback).Run(chromeos::MOUNT_ERROR_NONE, mount_point); for (auto& observer : observers_) { @@ -147,12 +144,12 @@ void FakeDiskMountManager::FormatMountedDevice( const std::string& mount_path, - chromeos::disks::FormatFileSystemType filesystem, + ash::disks::FormatFileSystemType filesystem, const std::string& label) {} void FakeDiskMountManager::SinglePartitionFormatDevice( const std::string& device_path, - chromeos::disks::FormatFileSystemType filesystem, + ash::disks::FormatFileSystemType filesystem, const std::string& label) {} void FakeDiskMountManager::RenameMountedDevice(const std::string& mount_path, @@ -164,7 +161,7 @@ UnmountDeviceRecursivelyCallbackType callback) {} bool FakeDiskMountManager::AddDiskForTest( - std::unique_ptr<chromeos::disks::Disk> disk) { + std::unique_ptr<ash::disks::Disk> disk) { DCHECK(disk); return disks_.insert(make_pair(disk->device_path(), std::move(disk))).second; } @@ -182,8 +179,8 @@ } void FakeDiskMountManager::InvokeDiskEventForTest( - chromeos::disks::DiskMountManager::DiskEvent event, - const chromeos::disks::Disk* disk) { + ash::disks::DiskMountManager::DiskEvent event, + const ash::disks::Disk* disk) { for (auto& observer : observers_) { disk->is_auto_mountable() ? observer.OnAutoMountableDiskEvent(event, *disk) : observer.OnBootDeviceDiskEvent(event, *disk);
diff --git a/chrome/browser/ash/file_manager/fake_disk_mount_manager.h b/chrome/browser/ash/file_manager/fake_disk_mount_manager.h index 4fe31de..faab9fa 100644 --- a/chrome/browser/ash/file_manager/fake_disk_mount_manager.h +++ b/chrome/browser/ash/file_manager/fake_disk_mount_manager.h
@@ -18,7 +18,7 @@ namespace file_manager { -class FakeDiskMountManager : public chromeos::disks::DiskMountManager { +class FakeDiskMountManager : public ash::disks::DiskMountManager { public: struct MountRequest { MountRequest(const std::string& source_path, @@ -73,7 +73,7 @@ void AddObserver(Observer* observer) override; void RemoveObserver(Observer* observer) override; const DiskMap& disks() const override; - const chromeos::disks::Disk* FindDiskBySourcePath( + const ash::disks::Disk* FindDiskBySourcePath( const std::string& source_path) const override; const MountPointMap& mount_points() const override; void EnsureMountInfoRefreshed(EnsureMountInfoRefreshedCallback callback, @@ -93,22 +93,20 @@ void RemountAllRemovableDrives( chromeos::MountAccessMode access_mode) override; void FormatMountedDevice(const std::string& mount_path, - chromeos::disks::FormatFileSystemType filesystem, + ash::disks::FormatFileSystemType filesystem, const std::string& label) override; - void SinglePartitionFormatDevice( - const std::string& device_path, - chromeos::disks::FormatFileSystemType filesystem, - const std::string& label) override; + void SinglePartitionFormatDevice(const std::string& device_path, + ash::disks::FormatFileSystemType filesystem, + const std::string& label) override; void RenameMountedDevice(const std::string& mount_path, const std::string& volume_name) override; void UnmountDeviceRecursively( const std::string& device_path, UnmountDeviceRecursivelyCallbackType callback) override; - bool AddDiskForTest(std::unique_ptr<chromeos::disks::Disk> disk) override; + bool AddDiskForTest(std::unique_ptr<ash::disks::Disk> disk) override; bool AddMountPointForTest(const MountPointInfo& mount_point) override; - void InvokeDiskEventForTest(DiskEvent event, - const chromeos::disks::Disk* disk); + void InvokeDiskEventForTest(DiskEvent event, const ash::disks::Disk* disk); private: base::ObserverList<Observer> observers_;
diff --git a/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc b/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc index 535fdb5a..02b868d 100644 --- a/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc +++ b/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc
@@ -1616,9 +1616,9 @@ std::move(mount_callback) .Run(smbfs::mojom::MountError::kOk, std::make_unique<smbfs::SmbFsHost>( - std::make_unique<chromeos::disks::MountPoint>( + std::make_unique<ash::disks::MountPoint>( mount_path(), - chromeos::disks::DiskMountManager::GetInstance()), + ash::disks::DiskMountManager::GetInstance()), delegate, std::move(smbfs_remote), delegate_.BindNewPipeAndPassReceiver())); });
diff --git a/chrome/browser/ash/file_manager/path_util.cc b/chrome/browser/ash/file_manager/path_util.cc index 6ca2c57..6f3a7fdd 100644 --- a/chrome/browser/ash/file_manager/path_util.cc +++ b/chrome/browser/ash/file_manager/path_util.cc
@@ -172,7 +172,7 @@ const std::string mount_path( base::StringPrintf("%s/%s", kRemovableMediaPath, volume_name.c_str())); const auto& mount_points = - chromeos::disks::DiskMountManager::GetInstance()->mount_points(); + ash::disks::DiskMountManager::GetInstance()->mount_points(); const auto found = mount_points.find(mount_path); return found == mount_points.end() ? std::string() : found->second.source_path; @@ -187,8 +187,8 @@ LOG(WARNING) << "No source path is found for volume name: " << volume_name; return std::string(); } - const chromeos::disks::Disk* disk = - chromeos::disks::DiskMountManager::GetInstance()->FindDiskBySourcePath( + const ash::disks::Disk* disk = + ash::disks::DiskMountManager::GetInstance()->FindDiskBySourcePath( source_path); std::string fs_uuid = disk == nullptr ? std::string() : disk->fs_uuid(); if (fs_uuid.empty())
diff --git a/chrome/browser/ash/file_manager/path_util_unittest.cc b/chrome/browser/ash/file_manager/path_util_unittest.cc index e338e8f..709dd9f1 100644 --- a/chrome/browser/ash/file_manager/path_util_unittest.cc +++ b/chrome/browser/ash/file_manager/path_util_unittest.cc
@@ -150,8 +150,7 @@ EXPECT_EQ("foo", GetPathDisplayTextForSettings(profile_.get(), "/media/archive/foo")); - chromeos::disks::DiskMountManager::InitializeForTesting( - new FakeDiskMountManager); + ash::disks::DiskMountManager::InitializeForTesting(new FakeDiskMountManager); TestingProfile profile2(base::FilePath("/home/chronos/u-0123456789abcdef")); ash::FakeChromeUserManager user_manager; user_manager.AddUser( @@ -203,7 +202,7 @@ // path for a guest profile. EXPECT_EQ("foo", GetPathDisplayTextForSettings(&guest_profile, "foo")); - chromeos::disks::DiskMountManager::Shutdown(); + ash::disks::DiskMountManager::Shutdown(); } TEST_F(FileManagerPathUtilTest, MultiProfileDownloadsFolderMigration) { @@ -636,22 +635,21 @@ storage::FileSystemMountOption(), crostini_mount_point_); - chromeos::disks::DiskMountManager::InitializeForTesting( + ash::disks::DiskMountManager::InitializeForTesting( new FakeDiskMountManager); // Add the disk and mount point for a fake removable device. + ASSERT_TRUE(ash::disks::DiskMountManager::GetInstance()->AddDiskForTest( + ash::disks::Disk::Builder() + .SetDevicePath("/device/source_path") + .SetFileSystemUUID("0123-abcd") + .Build())); ASSERT_TRUE( - chromeos::disks::DiskMountManager::GetInstance()->AddDiskForTest( - chromeos::disks::Disk::Builder() - .SetDevicePath("/device/source_path") - .SetFileSystemUUID("0123-abcd") - .Build())); - ASSERT_TRUE( - chromeos::disks::DiskMountManager::GetInstance()->AddMountPointForTest( - chromeos::disks::DiskMountManager::MountPointInfo( + ash::disks::DiskMountManager::GetInstance()->AddMountPointForTest( + ash::disks::DiskMountManager::MountPointInfo( "/device/source_path", "/media/removable/a", chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE))); + ash::disks::MOUNT_CONDITION_NONE))); // Add a Share Cache mount point for the primary profile. ASSERT_TRUE(mount_points->RegisterFileSystem( @@ -675,7 +673,7 @@ // Run all pending tasks before destroying testing profile. base::RunLoop().RunUntilIdle(); - chromeos::disks::DiskMountManager::Shutdown(); + ash::disks::DiskMountManager::Shutdown(); } protected:
diff --git a/chrome/browser/ash/file_manager/volume_manager.cc b/chrome/browser/ash/file_manager/volume_manager.cc index 17b360a..c27db79 100644 --- a/chrome/browser/ash/file_manager/volume_manager.cc +++ b/chrome/browser/ash/file_manager/volume_manager.cc
@@ -225,7 +225,7 @@ : source_(SOURCE_FILE), type_(VOLUME_TYPE_GOOGLE_DRIVE), device_type_(chromeos::DEVICE_TYPE_UNKNOWN), - mount_condition_(chromeos::disks::MOUNT_CONDITION_NONE), + mount_condition_(ash::disks::MOUNT_CONDITION_NONE), mount_context_(MOUNT_CONTEXT_UNKNOWN), is_parent_(false), is_read_only_(false), @@ -246,7 +246,7 @@ volume->source_path_ = drive_path; volume->source_ = SOURCE_NETWORK; volume->mount_path_ = drive_path; - volume->mount_condition_ = chromeos::disks::MOUNT_CONDITION_NONE; + volume->mount_condition_ = ash::disks::MOUNT_CONDITION_NONE; volume->volume_id_ = GenerateVolumeId(*volume); volume->watchable_ = true; return volume; @@ -261,7 +261,7 @@ // Keep source_path empty. volume->source_ = SOURCE_SYSTEM; volume->mount_path_ = downloads_path; - volume->mount_condition_ = chromeos::disks::MOUNT_CONDITION_NONE; + volume->mount_condition_ = ash::disks::MOUNT_CONDITION_NONE; volume->volume_id_ = GenerateVolumeId(*volume); volume->watchable_ = true; return volume; @@ -269,8 +269,8 @@ // static std::unique_ptr<Volume> Volume::CreateForRemovable( - const chromeos::disks::DiskMountManager::MountPointInfo& mount_point, - const chromeos::disks::Disk* disk) { + const ash::disks::DiskMountManager::MountPointInfo& mount_point, + const ash::disks::Disk* disk) { std::unique_ptr<Volume> volume(new Volume()); volume->type_ = MountTypeToVolumeType(mount_point.mount_type); volume->source_path_ = base::FilePath(mount_point.source_path); @@ -322,7 +322,7 @@ volume->volume_label_ = file_system_info.display_name(); volume->type_ = VOLUME_TYPE_PROVIDED; volume->mount_path_ = file_system_info.mount_path(); - volume->mount_condition_ = chromeos::disks::MOUNT_CONDITION_NONE; + volume->mount_condition_ = ash::disks::MOUNT_CONDITION_NONE; volume->mount_context_ = mount_context; volume->is_parent_ = true; volume->is_read_only_ = !file_system_info.writable(); @@ -340,7 +340,7 @@ std::unique_ptr<Volume> volume(new Volume()); volume->type_ = VOLUME_TYPE_MTP; volume->mount_path_ = mount_path; - volume->mount_condition_ = chromeos::disks::MOUNT_CONDITION_NONE; + volume->mount_condition_ = ash::disks::MOUNT_CONDITION_NONE; volume->is_parent_ = true; volume->is_read_only_ = read_only; volume->volume_id_ = kMtpVolumeIdPrefix + label; @@ -360,7 +360,7 @@ volume->source_ = SOURCE_SYSTEM; volume->mount_path_ = arc::GetDocumentsProviderMountPath( arc::kMediaDocumentsProviderAuthority, root_document_id); - volume->mount_condition_ = chromeos::disks::MOUNT_CONDITION_NONE; + volume->mount_condition_ = ash::disks::MOUNT_CONDITION_NONE; volume->volume_label_ = root_document_id; volume->is_read_only_ = true; volume->watchable_ = false; @@ -379,7 +379,7 @@ volume->source_ = SOURCE_SYSTEM; volume->mount_path_ = sshfs_mount_path; volume->remote_mount_path_ = remote_mount_path; - volume->mount_condition_ = chromeos::disks::MOUNT_CONDITION_NONE; + volume->mount_condition_ = ash::disks::MOUNT_CONDITION_NONE; volume->volume_id_ = GenerateVolumeId(*volume); volume->watchable_ = false; return volume; @@ -394,7 +394,7 @@ // Keep source_path empty. volume->source_ = SOURCE_SYSTEM; volume->mount_path_ = mount_path; - volume->mount_condition_ = chromeos::disks::MOUNT_CONDITION_NONE; + volume->mount_condition_ = ash::disks::MOUNT_CONDITION_NONE; volume->volume_id_ = GenerateVolumeId(*volume); volume->watchable_ = true; return volume; @@ -416,7 +416,7 @@ volume->source_ = SOURCE_SYSTEM; volume->mount_path_ = arc::GetDocumentsProviderMountPath(authority, document_id); - volume->mount_condition_ = chromeos::disks::MOUNT_CONDITION_NONE; + volume->mount_condition_ = ash::disks::MOUNT_CONDITION_NONE; volume->volume_label_ = title; volume->is_read_only_ = read_only; volume->watchable_ = false; @@ -439,7 +439,7 @@ // Keep source_path empty. volume->source_ = SOURCE_NETWORK; volume->mount_path_ = mount_point; - volume->mount_condition_ = chromeos::disks::MOUNT_CONDITION_NONE; + volume->mount_condition_ = ash::disks::MOUNT_CONDITION_NONE; volume->volume_id_ = GenerateVolumeId(*volume); volume->volume_label_ = display_name; volume->watchable_ = false; @@ -460,7 +460,7 @@ // Keep source_path empty. volume->source_ = SOURCE_SYSTEM; volume->mount_path_ = mount_path; - volume->mount_condition_ = chromeos::disks::MOUNT_CONDITION_NONE; + volume->mount_condition_ = ash::disks::MOUNT_CONDITION_NONE; volume->volume_id_ = GenerateVolumeId(*volume); volume->watchable_ = false; volume->is_read_only_ = true; @@ -485,7 +485,7 @@ volume->source_ = SOURCE_DEVICE; volume->mount_path_ = path; volume->storage_device_path_ = device_path; - volume->mount_condition_ = chromeos::disks::MOUNT_CONDITION_NONE; + volume->mount_condition_ = ash::disks::MOUNT_CONDITION_NONE; volume->is_read_only_ = read_only; volume->volume_id_ = GenerateVolumeId(*volume); volume->drive_label_ = drive_label; @@ -510,7 +510,7 @@ Profile* profile, drive::DriveIntegrationService* drive_integration_service, chromeos::PowerManagerClient* power_manager_client, - chromeos::disks::DiskMountManager* disk_mount_manager, + ash::disks::DiskMountManager* disk_mount_manager, ash::file_system_provider::Service* file_system_provider_service, GetMtpStorageInfoCallback get_mtp_storage_info_callback) : profile_(profile), @@ -853,8 +853,8 @@ } void VolumeManager::OnAutoMountableDiskEvent( - chromeos::disks::DiskMountManager::DiskEvent event, - const chromeos::disks::Disk& disk) { + ash::disks::DiskMountManager::DiskEvent event, + const ash::disks::Disk& disk) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); // Disregard hidden devices. @@ -862,8 +862,8 @@ return; switch (event) { - case chromeos::disks::DiskMountManager::DISK_ADDED: - case chromeos::disks::DiskMountManager::DISK_CHANGED: { + case ash::disks::DiskMountManager::DISK_ADDED: + case ash::disks::DiskMountManager::DISK_CHANGED: { if (disk.device_path().empty()) { DVLOG(1) << "Empty system path for " << disk.device_path(); return; @@ -896,12 +896,12 @@ return; } - case chromeos::disks::DiskMountManager::DISK_REMOVED: + case ash::disks::DiskMountManager::DISK_REMOVED: // If the disk is already mounted, unmount it. if (!disk.mount_path().empty()) { disk_mount_manager_->UnmountPath( disk.mount_path(), - chromeos::disks::DiskMountManager::UnmountPathCallback()); + ash::disks::DiskMountManager::UnmountPathCallback()); } // Notify to observers. @@ -913,22 +913,22 @@ } void VolumeManager::OnDeviceEvent( - chromeos::disks::DiskMountManager::DeviceEvent event, + ash::disks::DiskMountManager::DeviceEvent event, const std::string& device_path) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DVLOG(1) << "OnDeviceEvent: " << event << ", " << device_path; switch (event) { - case chromeos::disks::DiskMountManager::DEVICE_ADDED: + case ash::disks::DiskMountManager::DEVICE_ADDED: for (auto& observer : observers_) observer.OnDeviceAdded(device_path); return; - case chromeos::disks::DiskMountManager::DEVICE_REMOVED: { + case ash::disks::DiskMountManager::DEVICE_REMOVED: { for (auto& observer : observers_) observer.OnDeviceRemoved(device_path); return; } - case chromeos::disks::DiskMountManager::DEVICE_SCANNED: + case ash::disks::DiskMountManager::DEVICE_SCANNED: DVLOG(1) << "Ignore SCANNED event: " << device_path; return; } @@ -936,24 +936,24 @@ } void VolumeManager::OnMountEvent( - chromeos::disks::DiskMountManager::MountEvent event, + ash::disks::DiskMountManager::MountEvent event, chromeos::MountError error_code, - const chromeos::disks::DiskMountManager::MountPointInfo& mount_info) { + const ash::disks::DiskMountManager::MountPointInfo& mount_info) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); // Network storage is responsible for doing its own mounting. if (mount_info.mount_type == chromeos::MOUNT_TYPE_NETWORK_STORAGE) return; // Notify a mounting/unmounting event to observers. - const chromeos::disks::Disk* const disk = + const ash::disks::Disk* const disk = disk_mount_manager_->FindDiskBySourcePath(mount_info.source_path); std::unique_ptr<Volume> volume = Volume::CreateForRemovable(mount_info, disk); switch (event) { - case chromeos::disks::DiskMountManager::MOUNTING: { + case ash::disks::DiskMountManager::MOUNTING: { DoMountEvent(error_code, std::move(volume)); return; } - case chromeos::disks::DiskMountManager::UNMOUNTING: + case ash::disks::DiskMountManager::UNMOUNTING: DoUnmountEvent(error_code, *volume); return; } @@ -961,7 +961,7 @@ } void VolumeManager::OnFormatEvent( - chromeos::disks::DiskMountManager::FormatEvent event, + ash::disks::DiskMountManager::FormatEvent event, chromeos::FormatError error_code, const std::string& device_path, const std::string& device_label) { @@ -970,13 +970,13 @@ << ", " << device_path; switch (event) { - case chromeos::disks::DiskMountManager::FORMAT_STARTED: + case ash::disks::DiskMountManager::FORMAT_STARTED: for (auto& observer : observers_) { observer.OnFormatStarted(device_path, device_label, error_code == chromeos::FORMAT_ERROR_NONE); } return; - case chromeos::disks::DiskMountManager::FORMAT_COMPLETED: + case ash::disks::DiskMountManager::FORMAT_COMPLETED: // Even if format did not complete successfully, try to mount the device // so the user can retry. // MountPath auto-detects filesystem format if second argument is @@ -998,7 +998,7 @@ } void VolumeManager::OnPartitionEvent( - chromeos::disks::DiskMountManager::PartitionEvent event, + ash::disks::DiskMountManager::PartitionEvent event, chromeos::PartitionError error_code, const std::string& device_path, const std::string& device_label) { @@ -1007,14 +1007,14 @@ << device_path; switch (event) { - case chromeos::disks::DiskMountManager::PARTITION_STARTED: + case ash::disks::DiskMountManager::PARTITION_STARTED: for (auto& observer : observers_) { observer.OnPartitionStarted( device_path, device_label, error_code == chromeos::PARTITION_ERROR_NONE); } return; - case chromeos::disks::DiskMountManager::PARTITION_COMPLETED: + case ash::disks::DiskMountManager::PARTITION_COMPLETED: // If partitioning failed, try to mount the device so the user can retry. // MountPath auto-detects filesystem format if second argument is // empty. The third argument (mount label) is not used in a disk mount @@ -1037,7 +1037,7 @@ } void VolumeManager::OnRenameEvent( - chromeos::disks::DiskMountManager::RenameEvent event, + ash::disks::DiskMountManager::RenameEvent event, chromeos::RenameError error_code, const std::string& device_path, const std::string& device_label) { @@ -1046,13 +1046,13 @@ << device_path; switch (event) { - case chromeos::disks::DiskMountManager::RENAME_STARTED: + case ash::disks::DiskMountManager::RENAME_STARTED: for (auto& observer : observers_) { observer.OnRenameStarted(device_path, device_label, error_code == chromeos::RENAME_ERROR_NONE); } return; - case chromeos::disks::DiskMountManager::RENAME_COMPLETED: + case ash::disks::DiskMountManager::RENAME_COMPLETED: // Find previous mount point label if it exists std::string mount_label; auto disk_map_iter = disk_mount_manager_->disks().find(device_path); @@ -1364,7 +1364,7 @@ std::vector<std::unique_ptr<Volume>> archives; - const chromeos::disks::DiskMountManager::MountPointMap& mount_points = + const ash::disks::DiskMountManager::MountPointMap& mount_points = disk_mount_manager_->mount_points(); for (const auto& mount_point : mount_points) { switch (mount_point.second.mount_type) {
diff --git a/chrome/browser/ash/file_manager/volume_manager.h b/chrome/browser/ash/file_manager/volume_manager.h index 004d3b87..842fd79a 100644 --- a/chrome/browser/ash/file_manager/volume_manager.h +++ b/chrome/browser/ash/file_manager/volume_manager.h
@@ -101,8 +101,8 @@ static std::unique_ptr<Volume> CreateForDownloads( const base::FilePath& downloads_path); static std::unique_ptr<Volume> CreateForRemovable( - const chromeos::disks::DiskMountManager::MountPointInfo& mount_point, - const chromeos::disks::Disk* disk); + const ash::disks::DiskMountManager::MountPointInfo& mount_point, + const ash::disks::Disk* disk); static std::unique_ptr<Volume> CreateForProvidedFileSystem( const ash::file_system_provider::ProvidedFileSystemInfo& file_system_info, MountContext mount_context); @@ -156,7 +156,7 @@ const base::FilePath& source_path() const { return source_path_; } const base::FilePath& mount_path() const { return mount_path_; } const base::FilePath& remote_mount_path() const { return remote_mount_path_; } - chromeos::disks::MountCondition mount_condition() const { + ash::disks::MountCondition mount_condition() const { return mount_condition_; } MountContext mount_context() const { return mount_context_; } @@ -227,7 +227,7 @@ base::FilePath remote_mount_path_; // The mounting condition. See the enum for the details. - chromeos::disks::MountCondition mount_condition_; + ash::disks::MountCondition mount_condition_; // The context of the mount. Whether mounting was performed due to a user // interaction or not. @@ -288,7 +288,7 @@ class VolumeManager : public KeyedService, public arc::ArcSessionManagerObserver, public drive::DriveIntegrationServiceObserver, - public chromeos::disks::DiskMountManager::Observer, + public ash::disks::DiskMountManager::Observer, public ash::file_system_provider::Observer, public storage_monitor::RemovableStorageObserver, public DocumentsProviderRootManager::Observer { @@ -306,7 +306,7 @@ Profile* profile, drive::DriveIntegrationService* drive_integration_service, chromeos::PowerManagerClient* power_manager_client, - chromeos::disks::DiskMountManager* disk_mount_manager, + ash::disks::DiskMountManager* disk_mount_manager, ash::file_system_provider::Service* file_system_provider_service, GetMtpStorageInfoCallback get_mtp_storage_info_callback); @@ -403,25 +403,24 @@ void OnFileSystemMounted() override; void OnFileSystemBeingUnmounted() override; - // chromeos::disks::DiskMountManager::Observer overrides. - void OnAutoMountableDiskEvent( - chromeos::disks::DiskMountManager::DiskEvent event, - const chromeos::disks::Disk& disk) override; - void OnDeviceEvent(chromeos::disks::DiskMountManager::DeviceEvent event, + // ash::disks::DiskMountManager::Observer overrides. + void OnAutoMountableDiskEvent(ash::disks::DiskMountManager::DiskEvent event, + const ash::disks::Disk& disk) override; + void OnDeviceEvent(ash::disks::DiskMountManager::DeviceEvent event, const std::string& device_path) override; - void OnMountEvent(chromeos::disks::DiskMountManager::MountEvent event, - chromeos::MountError error_code, - const chromeos::disks::DiskMountManager::MountPointInfo& - mount_info) override; - void OnFormatEvent(chromeos::disks::DiskMountManager::FormatEvent event, + void OnMountEvent( + ash::disks::DiskMountManager::MountEvent event, + chromeos::MountError error_code, + const ash::disks::DiskMountManager::MountPointInfo& mount_info) override; + void OnFormatEvent(ash::disks::DiskMountManager::FormatEvent event, chromeos::FormatError error_code, const std::string& device_path, const std::string& device_label) override; - void OnPartitionEvent(chromeos::disks::DiskMountManager::PartitionEvent event, + void OnPartitionEvent(ash::disks::DiskMountManager::PartitionEvent event, chromeos::PartitionError error_code, const std::string& device_path, const std::string& device_label) override; - void OnRenameEvent(chromeos::disks::DiskMountManager::RenameEvent event, + void OnRenameEvent(ash::disks::DiskMountManager::RenameEvent event, chromeos::RenameError error_code, const std::string& device_path, const std::string& device_label) override; @@ -497,7 +496,7 @@ Profile* profile_; drive::DriveIntegrationService* drive_integration_service_; // Not owned. - chromeos::disks::DiskMountManager* disk_mount_manager_; // Not owned. + ash::disks::DiskMountManager* disk_mount_manager_; // Not owned. PrefChangeRegistrar pref_change_registrar_; base::ObserverList<VolumeManagerObserver>::Unchecked observers_; ash::file_system_provider::Service*
diff --git a/chrome/browser/ash/file_manager/volume_manager_factory.cc b/chrome/browser/ash/file_manager/volume_manager_factory.cc index 610d5d09..5fb6d29 100644 --- a/chrome/browser/ash/file_manager/volume_manager_factory.cc +++ b/chrome/browser/ash/file_manager/volume_manager_factory.cc
@@ -47,7 +47,7 @@ VolumeManager* instance = new VolumeManager( profile, drive::DriveIntegrationServiceFactory::GetForProfile(profile), chromeos::PowerManagerClient::Get(), - chromeos::disks::DiskMountManager::GetInstance(), + ash::disks::DiskMountManager::GetInstance(), ash::file_system_provider::ServiceFactory::Get(context), VolumeManager::GetMtpStorageInfoCallback()); instance->Initialize();
diff --git a/chrome/browser/ash/file_manager/volume_manager_observer.h b/chrome/browser/ash/file_manager/volume_manager_observer.h index 479208e8..f702a9c 100644 --- a/chrome/browser/ash/file_manager/volume_manager_observer.h +++ b/chrome/browser/ash/file_manager/volume_manager_observer.h
@@ -9,11 +9,11 @@ #include "chromeos/dbus/cros_disks/cros_disks_client.h" -namespace chromeos { +namespace ash { namespace disks { class Disk; } // namespace disks -} // namespace chromeos +} // namespace ash namespace file_manager { @@ -25,10 +25,10 @@ virtual ~VolumeManagerObserver() = default; // Fired when a new disk is added. - virtual void OnDiskAdded(const chromeos::disks::Disk& disk, bool mounting) {} + virtual void OnDiskAdded(const ash::disks::Disk& disk, bool mounting) {} // Fired when a disk is removed. - virtual void OnDiskRemoved(const chromeos::disks::Disk& disk) {} + virtual void OnDiskRemoved(const ash::disks::Disk& disk) {} // Fired when a new device is added. virtual void OnDeviceAdded(const std::string& device_path) {}
diff --git a/chrome/browser/ash/file_manager/volume_manager_unittest.cc b/chrome/browser/ash/file_manager/volume_manager_unittest.cc index 2e630fc..e445cd1 100644 --- a/chrome/browser/ash/file_manager/volume_manager_unittest.cc +++ b/chrome/browser/ash/file_manager/volume_manager_unittest.cc
@@ -39,12 +39,12 @@ #include "services/device/public/mojom/mtp_storage_info.mojom.h" #include "testing/gtest/include/gtest/gtest.h" -using chromeos::disks::Disk; -using chromeos::disks::DiskMountManager; - namespace file_manager { namespace { +using ::ash::disks::Disk; +using ::ash::disks::DiskMountManager; + class LoggingObserver : public VolumeManagerObserver { public: struct Event { @@ -621,7 +621,7 @@ const DiskMountManager::MountPointInfo kMountPoint( "device1", "mount1", chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE); + ash::disks::MOUNT_CONDITION_NONE); volume_manager()->OnMountEvent(DiskMountManager::MOUNTING, chromeos::MOUNT_ERROR_NONE, kMountPoint); @@ -656,7 +656,7 @@ const DiskMountManager::MountPointInfo kMountPoint( "device1", "mount1", chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE); + ash::disks::MOUNT_CONDITION_NONE); volume_manager()->OnMountEvent(DiskMountManager::MOUNTING, chromeos::MOUNT_ERROR_NONE, kMountPoint); @@ -695,7 +695,7 @@ const DiskMountManager::MountPointInfo kMountPoint( "device1", "mount1", chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE); + ash::disks::MOUNT_CONDITION_NONE); volume_manager()->OnMountEvent(DiskMountManager::UNMOUNTING, chromeos::MOUNT_ERROR_NONE, kMountPoint); @@ -1075,14 +1075,14 @@ DiskMountManager::MOUNTING, chromeos::MOUNT_ERROR_NONE, DiskMountManager::MountPointInfo("/removable/usb", "/removable/usb", chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE)); + ash::disks::MOUNT_CONDITION_NONE)); // Mount a zip archive in the stick. volume_manager()->OnMountEvent( DiskMountManager::MOUNTING, chromeos::MOUNT_ERROR_NONE, DiskMountManager::MountPointInfo("/removable/usb/1.zip", "/archive/1", chromeos::MOUNT_TYPE_ARCHIVE, - chromeos::disks::MOUNT_CONDITION_NONE)); + ash::disks::MOUNT_CONDITION_NONE)); base::WeakPtr<Volume> volume = volume_manager()->FindVolumeById("archive:1"); ASSERT_TRUE(volume.get()); EXPECT_EQ("/archive/1", volume->mount_path().AsUTF8Unsafe()); @@ -1093,7 +1093,7 @@ DiskMountManager::MOUNTING, chromeos::MOUNT_ERROR_NONE, DiskMountManager::MountPointInfo("/archive/1/2.zip", "/archive/2", chromeos::MOUNT_TYPE_ARCHIVE, - chromeos::disks::MOUNT_CONDITION_NONE)); + ash::disks::MOUNT_CONDITION_NONE)); base::WeakPtr<Volume> second_volume = volume_manager()->FindVolumeById("archive:2"); ASSERT_TRUE(second_volume.get()); @@ -1106,7 +1106,7 @@ DiskMountManager::MOUNTING, chromeos::MOUNT_ERROR_NONE, DiskMountManager::MountPointInfo( "/other/profile/drive/folder/3.zip", "/archive/3", - chromeos::MOUNT_TYPE_ARCHIVE, chromeos::disks::MOUNT_CONDITION_NONE)); + chromeos::MOUNT_TYPE_ARCHIVE, ash::disks::MOUNT_CONDITION_NONE)); base::WeakPtr<Volume> third_volume = volume_manager()->FindVolumeById("archive:3"); ASSERT_FALSE(third_volume.get());
diff --git a/chrome/browser/ash/guest_os/guest_os_share_path_unittest.cc b/chrome/browser/ash/guest_os/guest_os_share_path_unittest.cc index 7a57927..b7c08e4 100644 --- a/chrome/browser/ash/guest_os/guest_os_share_path_unittest.cc +++ b/chrome/browser/ash/guest_os/guest_os_share_path_unittest.cc
@@ -58,7 +58,7 @@ Profile::FromBrowserContext(context), nullptr /* drive_integration_service */, nullptr /* power_manager_client */, - chromeos::disks::DiskMountManager::GetInstance(), + ash::disks::DiskMountManager::GetInstance(), nullptr /* file_system_provider_service */, file_manager::VolumeManager::GetMtpStorageInfoCallback()); } @@ -237,7 +237,7 @@ void SetUpVolume() { // Setup Downloads and path to share, which depend on MyFilesVolume flag, // thus can't be on SetUp. - chromeos::disks::DiskMountManager::InitializeForTesting( + ash::disks::DiskMountManager::InitializeForTesting( new file_manager::FakeDiskMountManager); file_manager::VolumeManagerFactory::GetInstance()->SetTestingFactory( profile(), base::BindRepeating(&BuildVolumeManager));
diff --git a/chrome/browser/ash/input_method/input_method_engine.cc b/chrome/browser/ash/input_method/input_method_engine.cc index a5d6d0f7..c332ee7f 100644 --- a/chrome/browser/ash/input_method/input_method_engine.cc +++ b/chrome/browser/ash/input_method/input_method_engine.cc
@@ -89,6 +89,13 @@ observer_->OnFocus(active_component_id_, context_id_, input_context); } +void InputMethodEngine::OnTouch(ui::EventPointerType pointerType) { + if (!IsActive() || current_input_type_ == ui::TEXT_INPUT_TYPE_NONE) + return; + + observer_->OnTouch(pointerType); +} + void InputMethodEngine::FocusOut() { if (!IsActive() || current_input_type_ == ui::TEXT_INPUT_TYPE_NONE) return;
diff --git a/chrome/browser/ash/input_method/input_method_engine.h b/chrome/browser/ash/input_method/input_method_engine.h index ad87a9d..601ba1c 100644 --- a/chrome/browser/ash/input_method/input_method_engine.h +++ b/chrome/browser/ash/input_method/input_method_engine.h
@@ -99,6 +99,7 @@ void FocusIn(const ui::IMEEngineHandlerInterface::InputContext& input_context) override; void FocusOut() override; + void OnTouch(ui::EventPointerType pointerType) override; void PropertyActivate(const std::string& property_name) override; void CandidateClicked(uint32_t index) override; void AssistiveWindowButtonClicked(
diff --git a/chrome/browser/ash/input_method/input_method_engine_base.h b/chrome/browser/ash/input_method/input_method_engine_base.h index e1ec27d0..0b6a900 100644 --- a/chrome/browser/ash/input_method/input_method_engine_base.h +++ b/chrome/browser/ash/input_method/input_method_engine_base.h
@@ -70,6 +70,11 @@ int context_id, const IMEEngineHandlerInterface::InputContext& context) = 0; + // Called on a touch within a text field. Allows for features like changing + // virtual keyboard layout based on touch type after onfocus (since + // subsequent touches within the same input field do not send onfocus), + virtual void OnTouch(ui::EventPointerType pointerType) = 0; + // Called when a text field loses focus, and will no longer generate events. virtual void OnBlur(const std::string& engine_id, int context_id) = 0;
diff --git a/chrome/browser/ash/input_method/input_method_engine_unittest.cc b/chrome/browser/ash/input_method/input_method_engine_unittest.cc index 5538bae..adc1b175 100644 --- a/chrome/browser/ash/input_method/input_method_engine_unittest.cc +++ b/chrome/browser/ash/input_method/input_method_engine_unittest.cc
@@ -104,6 +104,7 @@ void OnBlur(const std::string& engine_id, int context_id) override { calls_bitmap_ |= ONBLUR; } + void OnTouch(ui::EventPointerType pointerType) override {} void OnKeyEvent( const std::string& engine_id, const ui::KeyEvent& event,
diff --git a/chrome/browser/ash/input_method/mock_input_method_engine.cc b/chrome/browser/ash/input_method/mock_input_method_engine.cc index 1012577..a994022 100644 --- a/chrome/browser/ash/input_method/mock_input_method_engine.cc +++ b/chrome/browser/ash/input_method/mock_input_method_engine.cc
@@ -17,6 +17,8 @@ void MockInputMethodEngine::FocusIn( const IMEEngineHandlerInterface::InputContext& input_context) {} +void MockInputMethodEngine::OnTouch(ui::EventPointerType pointerType) {} + void MockInputMethodEngine::FocusOut() {} void MockInputMethodEngine::Enable(const std::string& component_id) {
diff --git a/chrome/browser/ash/input_method/mock_input_method_engine.h b/chrome/browser/ash/input_method/mock_input_method_engine.h index 4b67218..6945666 100644 --- a/chrome/browser/ash/input_method/mock_input_method_engine.h +++ b/chrome/browser/ash/input_method/mock_input_method_engine.h
@@ -30,6 +30,7 @@ // IMEEngineHandlerInterface overrides. void FocusIn( const IMEEngineHandlerInterface::InputContext& input_context) override; + void OnTouch(ui::EventPointerType pointerType) override; void FocusOut() override; void Enable(const std::string& component_id) override; void Disable() override;
diff --git a/chrome/browser/ash/input_method/native_input_method_engine.cc b/chrome/browser/ash/input_method/native_input_method_engine.cc index c29a2884..c8fed9c 100644 --- a/chrome/browser/ash/input_method/native_input_method_engine.cc +++ b/chrome/browser/ash/input_method/native_input_method_engine.cc
@@ -681,6 +681,11 @@ } } +void NativeInputMethodEngine::ImeObserver::OnTouch( + ui::EventPointerType pointerType) { + ime_base_observer_->OnTouch(pointerType); +} + void NativeInputMethodEngine::ImeObserver::OnBlur(const std::string& engine_id, int context_id) { if (assistive_suggester_->IsAssistiveFeatureEnabled())
diff --git a/chrome/browser/ash/input_method/native_input_method_engine.h b/chrome/browser/ash/input_method/native_input_method_engine.h index f79cafe..d30302c 100644 --- a/chrome/browser/ash/input_method/native_input_method_engine.h +++ b/chrome/browser/ash/input_method/native_input_method_engine.h
@@ -109,6 +109,7 @@ const std::string& engine_id, int context_id, const IMEEngineHandlerInterface::InputContext& context) override; + void OnTouch(ui::EventPointerType pointerType) override; void OnBlur(const std::string& engine_id, int context_id) override; void OnKeyEvent( const std::string& engine_id,
diff --git a/chrome/browser/ash/input_method/native_input_method_engine_browsertest.cc b/chrome/browser/ash/input_method/native_input_method_engine_browsertest.cc index 43df38e..6a08c5b 100644 --- a/chrome/browser/ash/input_method/native_input_method_engine_browsertest.cc +++ b/chrome/browser/ash/input_method/native_input_method_engine_browsertest.cc
@@ -67,6 +67,7 @@ const std::string& engine_id, int context_id, const ui::IMEEngineHandlerInterface::InputContext& context) override {} + void OnTouch(ui::EventPointerType pointerType) override {} void OnBlur(const std::string& engine_id, int context_id) override {} void OnKeyEvent( const std::string& engine_id,
diff --git a/chrome/browser/ash/input_method/stub_input_method_engine_observer.h b/chrome/browser/ash/input_method/stub_input_method_engine_observer.h index ad156c9..4bf9a09 100644 --- a/chrome/browser/ash/input_method/stub_input_method_engine_observer.h +++ b/chrome/browser/ash/input_method/stub_input_method_engine_observer.h
@@ -23,6 +23,7 @@ const std::string& engine_id, int context_id, const ui::IMEEngineHandlerInterface::InputContext& context) override {} + void OnTouch(ui::EventPointerType pointerType) override {} void OnBlur(const std::string& engine_id, int context_id) override {} void OnKeyEvent( const std::string& engine_id,
diff --git a/chrome/browser/ash/login/easy_unlock/easy_unlock_key_manager.cc b/chrome/browser/ash/login/easy_unlock/easy_unlock_key_manager.cc index 568bc99..ba39e19f 100644 --- a/chrome/browser/ash/login/easy_unlock/easy_unlock_key_manager.cc +++ b/chrome/browser/ash/login/easy_unlock/easy_unlock_key_manager.cc
@@ -133,17 +133,12 @@ << "expected serialized_beacon_seeds."; } - bool unlock_key; - if (!dict.GetBoolean(key_names::kKeyUnlockKey, &unlock_key)) { - // If GetBoolean() fails, that means we're reading a Dictionary from - // user prefs which did not include the bool when it was stored. That means - // it's an older Dictionary that didn't include this `unlock_key` field -- - // only one device was persisted, and it was implicitly assumed to be the - // unlock key -- thus `unlock_key` should default to being true. - unlock_key = true; - } - data->unlock_key = unlock_key; - + // If FindBoolPath() fails, that means we're reading a Dictionary from + // user prefs which did not include the bool when it was stored. That means + // it's an older Dictionary that didn't include this `unlock_key` field -- + // only one device was persisted, and it was implicitly assumed to be the + // unlock key -- thus `unlock_key` should default to being true. + data->unlock_key = dict.FindBoolPath(key_names::kKeyUnlockKey).value_or(true); data->bluetooth_address.swap(bluetooth_address); data->public_key.swap(public_key); data->psk.swap(psk);
diff --git a/chrome/browser/ash/login/easy_unlock/smartlock_state_handler_unittest.cc b/chrome/browser/ash/login/easy_unlock/smartlock_state_handler_unittest.cc index 2231b2b..ef0269b 100644 --- a/chrome/browser/ash/login/easy_unlock/smartlock_state_handler_unittest.cc +++ b/chrome/browser/ash/login/easy_unlock/smartlock_state_handler_unittest.cc
@@ -224,18 +224,18 @@ // Whether the custom icon's tooltip should be autoshown. If the icon is not // set, or it doesn't have a tooltip, returns false. bool IsCustomIconTooltipAutoshown() const { - bool result = false; - if (last_custom_icon_) - last_custom_icon_->GetBoolean("tooltip.autoshow", &result); - return result; + if (!last_custom_icon_) + return false; + + return last_custom_icon_->FindBoolPath("tooltip.autoshow").value_or(false); } // Whether the custom icon is set and if has hardlock capability enabed. bool CustomIconHardlocksOnClick() const { - bool result = false; - if (last_custom_icon_) - last_custom_icon_->GetBoolean("hardlockOnClick", &result); - return result; + if (!last_custom_icon_) + return false; + + return last_custom_icon_->FindBoolKey("hardlockOnClick").value_or(false); } private:
diff --git a/chrome/browser/ash/note_taking_helper_unittest.cc b/chrome/browser/ash/note_taking_helper_unittest.cc index 68dfe35..b4a85dc7 100644 --- a/chrome/browser/ash/note_taking_helper_unittest.cc +++ b/chrome/browser/ash/note_taking_helper_unittest.cc
@@ -1127,20 +1127,18 @@ } TEST_F(NoteTakingHelperTest, LaunchAndroidAppWithPath) { - chromeos::disks::DiskMountManager::InitializeForTesting( + disks::DiskMountManager::InitializeForTesting( new file_manager::FakeDiskMountManager); - ASSERT_TRUE(chromeos::disks::DiskMountManager::GetInstance()->AddDiskForTest( - chromeos::disks::Disk::Builder() + ASSERT_TRUE(disks::DiskMountManager::GetInstance()->AddDiskForTest( + disks::Disk::Builder() .SetDevicePath("/device/source_path") .SetFileSystemUUID("0123-abcd") .Build())); - ASSERT_TRUE( - chromeos::disks::DiskMountManager::GetInstance()->AddMountPointForTest( - chromeos::disks::DiskMountManager::MountPointInfo( - "/device/source_path", "/media/removable/UNTITLED", - chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE))); + ASSERT_TRUE(disks::DiskMountManager::GetInstance()->AddMountPointForTest( + disks::DiskMountManager::MountPointInfo( + "/device/source_path", "/media/removable/UNTITLED", + chromeos::MOUNT_TYPE_DEVICE, disks::MOUNT_CONDITION_NONE))); const std::string kPackage = "org.chromium.package"; std::vector<IntentHandlerInfoPtr> handlers; @@ -1203,7 +1201,7 @@ NoteTakingHelper::kDefaultLaunchResultHistogramName, static_cast<int>(LaunchResult::ANDROID_FAILED_TO_CONVERT_PATH), 1); - chromeos::disks::DiskMountManager::Shutdown(); + disks::DiskMountManager::Shutdown(); } TEST_F(NoteTakingHelperTest, NoAppsAvailable) {
diff --git a/chrome/browser/ash/policy/DIR_METADATA b/chrome/browser/ash/policy/DIR_METADATA index 50ec60f..f332abae1 100644 --- a/chrome/browser/ash/policy/DIR_METADATA +++ b/chrome/browser/ash/policy/DIR_METADATA
@@ -1 +1 @@ -mixins: "//chromeos/policy/COMMON_METADATA" +mixins: "//ash/components/policy/COMMON_METADATA"
diff --git a/chrome/browser/ash/policy/OWNERS b/chrome/browser/ash/policy/OWNERS index 3f9a2a7..92e0deea 100644 --- a/chrome/browser/ash/policy/OWNERS +++ b/chrome/browser/ash/policy/OWNERS
@@ -1 +1 @@ -file://chromeos/policy/OWNERS +file://ash/components/policy/OWNERS
diff --git a/chrome/browser/ash/policy/off_hours/device_off_hours_controller.cc b/chrome/browser/ash/policy/off_hours/device_off_hours_controller.cc index 9742262..2549235 100644 --- a/chrome/browser/ash/policy/off_hours/device_off_hours_controller.cc +++ b/chrome/browser/ash/policy/off_hours/device_off_hours_controller.cc
@@ -8,6 +8,7 @@ #include <tuple> #include <utility> +#include "ash/components/policy/weekly_time/time_utils.h" #include "base/bind.h" #include "base/logging.h" #include "base/time/default_clock.h" @@ -17,7 +18,6 @@ #include "chrome/browser/ash/policy/off_hours/off_hours_proto_parser.h" #include "chrome/browser/ash/settings/device_settings_service.h" #include "chromeos/dbus/dbus_thread_manager.h" -#include "chromeos/policy/weekly_time/time_utils.h" #include "components/prefs/pref_value_map.h" #include "components/user_manager/user.h" #include "components/user_manager/user_manager.h"
diff --git a/chrome/browser/ash/policy/off_hours/device_off_hours_controller.h b/chrome/browser/ash/policy/off_hours/device_off_hours_controller.h index b8402ef..ee34bdb 100644 --- a/chrome/browser/ash/policy/off_hours/device_off_hours_controller.h +++ b/chrome/browser/ash/policy/off_hours/device_off_hours_controller.h
@@ -8,13 +8,13 @@ #include <memory> #include <vector> +#include "ash/components/policy/weekly_time/weekly_time_interval.h" #include "base/memory/weak_ptr.h" #include "base/observer_list.h" #include "base/time/clock.h" #include "base/time/time.h" #include "base/timer/wall_clock_timer.h" #include "chromeos/dbus/system_clock/system_clock_client.h" -#include "chromeos/policy/weekly_time/weekly_time_interval.h" #include "components/policy/proto/chrome_device_policy.pb.h" namespace policy {
diff --git a/chrome/browser/ash/policy/off_hours/off_hours_policy_applier_unittest.cc b/chrome/browser/ash/policy/off_hours/off_hours_policy_applier_unittest.cc index 7621b3f..dd65ba2 100644 --- a/chrome/browser/ash/policy/off_hours/off_hours_policy_applier_unittest.cc +++ b/chrome/browser/ash/policy/off_hours/off_hours_policy_applier_unittest.cc
@@ -6,8 +6,8 @@ #include <utility> -#include "chromeos/policy/weekly_time/weekly_time.h" -#include "chromeos/policy/weekly_time/weekly_time_interval.h" +#include "ash/components/policy/weekly_time/weekly_time.h" +#include "ash/components/policy/weekly_time/weekly_time_interval.h" #include "components/policy/proto/chrome_device_policy.pb.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/ash/policy/off_hours/off_hours_proto_parser.cc b/chrome/browser/ash/policy/off_hours/off_hours_proto_parser.cc index 7c72900f..0dc2929 100644 --- a/chrome/browser/ash/policy/off_hours/off_hours_proto_parser.cc +++ b/chrome/browser/ash/policy/off_hours/off_hours_proto_parser.cc
@@ -4,9 +4,9 @@ #include "chrome/browser/ash/policy/off_hours/off_hours_proto_parser.h" +#include "ash/components/policy/weekly_time/time_utils.h" #include "base/time/default_clock.h" #include "base/time/time.h" -#include "chromeos/policy/weekly_time/time_utils.h" namespace em = enterprise_management;
diff --git a/chrome/browser/ash/policy/off_hours/off_hours_proto_parser.h b/chrome/browser/ash/policy/off_hours/off_hours_proto_parser.h index 2e51737..030cfc4 100644 --- a/chrome/browser/ash/policy/off_hours/off_hours_proto_parser.h +++ b/chrome/browser/ash/policy/off_hours/off_hours_proto_parser.h
@@ -9,9 +9,9 @@ #include <string> #include <vector> +#include "ash/components/policy/weekly_time/weekly_time.h" +#include "ash/components/policy/weekly_time/weekly_time_interval.h" #include "base/values.h" -#include "chromeos/policy/weekly_time/weekly_time.h" -#include "chromeos/policy/weekly_time/weekly_time_interval.h" #include "components/policy/proto/chrome_device_policy.pb.h" #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/chrome/browser/ash/policy/off_hours/off_hours_proto_parser_unittest.cc b/chrome/browser/ash/policy/off_hours/off_hours_proto_parser_unittest.cc index 02191f6..004c6c9 100644 --- a/chrome/browser/ash/policy/off_hours/off_hours_proto_parser_unittest.cc +++ b/chrome/browser/ash/policy/off_hours/off_hours_proto_parser_unittest.cc
@@ -6,9 +6,9 @@ #include <utility> +#include "ash/components/policy/weekly_time/weekly_time.h" +#include "ash/components/policy/weekly_time/weekly_time_interval.h" #include "base/values.h" -#include "chromeos/policy/weekly_time/weekly_time.h" -#include "chromeos/policy/weekly_time/weekly_time_interval.h" #include "components/policy/proto/chrome_device_policy.pb.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/ash/policy/remote_commands/user_command_arc_job.cc b/chrome/browser/ash/policy/remote_commands/user_command_arc_job.cc index 44afe02..7fa44ec 100644 --- a/chrome/browser/ash/policy/remote_commands/user_command_arc_job.cc +++ b/chrome/browser/ash/policy/remote_commands/user_command_arc_job.cc
@@ -6,6 +6,7 @@ #include <utility> +#include "ash/components/arc/mojom/policy.mojom.h" #include "base/bind.h" #include "base/location.h" #include "base/memory/ref_counted.h" @@ -15,7 +16,6 @@ #include "base/time/time.h" #include "chrome/browser/ash/arc/policy/arc_policy_bridge.h" #include "chrome/browser/profiles/profile.h" -#include "components/arc/mojom/policy.mojom.h" #include "components/policy/proto/device_management_backend.pb.h" namespace policy {
diff --git a/chrome/browser/ash/policy/reporting/OWNERS b/chrome/browser/ash/policy/reporting/OWNERS index 971314c..dcdc9422 100644 --- a/chrome/browser/ash/policy/reporting/OWNERS +++ b/chrome/browser/ash/policy/reporting/OWNERS
@@ -1,3 +1,3 @@ -file://chromeos/policy/OWNERS +file://ash/components/policy/OWNERS swapnilgupta@google.com
diff --git a/chrome/browser/ash/policy/reporting/arc_app_install_event_log_collector.h b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_collector.h index 3b1b467..277de371 100644 --- a/chrome/browser/ash/policy/reporting/arc_app_install_event_log_collector.h +++ b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_collector.h
@@ -11,12 +11,12 @@ #include <set> #include <string> +#include "ash/components/arc/mojom/policy.mojom-forward.h" #include "base/logging.h" #include "chrome/browser/ash/arc/policy/arc_policy_bridge.h" #include "chrome/browser/ash/policy/reporting/install_event_log_collector_base.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" -#include "components/arc/mojom/policy.mojom-forward.h" class Profile;
diff --git a/chrome/browser/ash/policy/reporting/install_event_logger_base.h b/chrome/browser/ash/policy/reporting/install_event_logger_base.h index bb0e1d7..dcae10b0 100644 --- a/chrome/browser/ash/policy/reporting/install_event_logger_base.h +++ b/chrome/browser/ash/policy/reporting/install_event_logger_base.h
@@ -26,7 +26,7 @@ class InstallEventLoggerBase { public: explicit InstallEventLoggerBase(Profile* profile) : profile_(profile) { - stateful_path_ = chromeos::disks::GetStatefulPartitionPath(); + stateful_path_ = ash::disks::GetStatefulPartitionPath(); } std::unique_ptr<Event> CreateEvent(EventType type) {
diff --git a/chrome/browser/ash/policy/reporting/user_added_removed/OWNERS b/chrome/browser/ash/policy/reporting/user_added_removed/OWNERS index a026755..75ec46e 100644 --- a/chrome/browser/ash/policy/reporting/user_added_removed/OWNERS +++ b/chrome/browser/ash/policy/reporting/user_added_removed/OWNERS
@@ -1,2 +1,2 @@ -file://chromeos/policy/OWNERS +file://ash/components/policy/OWNERS file://components/reporting/OWNERS
diff --git a/chrome/browser/ash/policy/status_collector/OWNERS b/chrome/browser/ash/policy/status_collector/OWNERS index 511a5f6..de6967b8 100644 --- a/chrome/browser/ash/policy/status_collector/OWNERS +++ b/chrome/browser/ash/policy/status_collector/OWNERS
@@ -1,2 +1,2 @@ file://components/reporting/OWNERS -file://chromeos/policy/OWNERS \ No newline at end of file +file://ash/components/policy/OWNERS
diff --git a/chrome/browser/ash/policy/status_collector/device_status_collector.cc b/chrome/browser/ash/policy/status_collector/device_status_collector.cc index bf47704..aacba0a3 100644 --- a/chrome/browser/ash/policy/status_collector/device_status_collector.cc +++ b/chrome/browser/ash/policy/status_collector/device_status_collector.cc
@@ -699,7 +699,7 @@ mount_points.push_back(info.path.value()); for (const auto& mount_info : - chromeos::disks::DiskMountManager::GetInstance()->mount_points()) { + ash::disks::DiskMountManager::GetInstance()->mount_points()) { // Extract a list of mount points to populate. mount_points.push_back(mount_info.first); }
diff --git a/chrome/browser/ash/policy/status_collector/device_status_collector_browsertest.cc b/chrome/browser/ash/policy/status_collector/device_status_collector_browsertest.cc index f7d4d8c..d965f81 100644 --- a/chrome/browser/ash/policy/status_collector/device_status_collector_browsertest.cc +++ b/chrome/browser/ash/policy/status_collector/device_status_collector_browsertest.cc
@@ -112,9 +112,9 @@ #include "ui/aura/env.h" #include "ui/aura/test/test_windows.h" +using ::ash::disks::DiskMountManager; using base::Time; using base::test::ScopedChromeOSVersionInfo; -using chromeos::disks::DiskMountManager; using ::testing::Return; using ::testing::ReturnRef; @@ -948,9 +948,8 @@ env->SetVar("TZ", "UTC"); // Initialize our mock mounted disk volumes. - std::unique_ptr<chromeos::disks::MockDiskMountManager> - mock_disk_mount_manager = - std::make_unique<chromeos::disks::MockDiskMountManager>(); + std::unique_ptr<ash::disks::MockDiskMountManager> mock_disk_mount_manager = + std::make_unique<ash::disks::MockDiskMountManager>(); AddMountPoint("/mount/volume1"); AddMountPoint("/mount/volume2"); EXPECT_CALL(*mock_disk_mount_manager, mount_points()) @@ -1040,7 +1039,7 @@ mount_point_map_.insert(DiskMountManager::MountPointMap::value_type( mount_point, DiskMountManager::MountPointInfo( mount_point, mount_point, chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE))); + ash::disks::MOUNT_CONDITION_NONE))); } virtual void RestartStatusCollector(
diff --git a/chrome/browser/ash/policy/status_collector/legacy_device_status_collector.cc b/chrome/browser/ash/policy/status_collector/legacy_device_status_collector.cc index 63fb2bb..d2771f6 100644 --- a/chrome/browser/ash/policy/status_collector/legacy_device_status_collector.cc +++ b/chrome/browser/ash/policy/status_collector/legacy_device_status_collector.cc
@@ -696,7 +696,7 @@ mount_points.push_back(info.path.value()); for (const auto& mount_info : - chromeos::disks::DiskMountManager::GetInstance()->mount_points()) { + ash::disks::DiskMountManager::GetInstance()->mount_points()) { // Extract a list of mount points to populate. mount_points.push_back(mount_info.first); }
diff --git a/chrome/browser/ash/policy/status_collector/legacy_device_status_collector_browsertest.cc b/chrome/browser/ash/policy/status_collector/legacy_device_status_collector_browsertest.cc index 51a849a..7fc0476 100644 --- a/chrome/browser/ash/policy/status_collector/legacy_device_status_collector_browsertest.cc +++ b/chrome/browser/ash/policy/status_collector/legacy_device_status_collector_browsertest.cc
@@ -109,9 +109,9 @@ #include "ui/aura/env.h" #include "ui/aura/test/test_windows.h" +using ::ash::disks::DiskMountManager; using base::Time; using base::test::ScopedChromeOSVersionInfo; -using chromeos::disks::DiskMountManager; using ::testing::Return; using ::testing::ReturnRef; @@ -868,9 +868,8 @@ env->SetVar("TZ", "UTC"); // Initialize our mock mounted disk volumes. - std::unique_ptr<chromeos::disks::MockDiskMountManager> - mock_disk_mount_manager = - std::make_unique<chromeos::disks::MockDiskMountManager>(); + std::unique_ptr<ash::disks::MockDiskMountManager> mock_disk_mount_manager = + std::make_unique<ash::disks::MockDiskMountManager>(); AddMountPoint("/mount/volume1"); AddMountPoint("/mount/volume2"); EXPECT_CALL(*mock_disk_mount_manager, mount_points()) @@ -959,7 +958,7 @@ mount_point_map_.insert(DiskMountManager::MountPointMap::value_type( mount_point, DiskMountManager::MountPointInfo( mount_point, mount_point, chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE))); + ash::disks::MOUNT_CONDITION_NONE))); } virtual void RestartStatusCollector(
diff --git a/chrome/browser/ash/smb_client/smb_service_unittest.cc b/chrome/browser/ash/smb_client/smb_service_unittest.cc index 79efd11..fe610fe 100644 --- a/chrome/browser/ash/smb_client/smb_service_unittest.cc +++ b/chrome/browser/ash/smb_client/smb_service_unittest.cc
@@ -126,7 +126,7 @@ Profile::FromBrowserContext(context), nullptr /* drive_integration_service */, nullptr /* power_manager_client */, - chromeos::disks::DiskMountManager::GetInstance(), + disks::DiskMountManager::GetInstance(), nullptr /* file_system_provider_service */, file_manager::VolumeManager::GetMtpStorageInfoCallback()); } @@ -178,8 +178,7 @@ chromeos::ConciergeClient::InitializeFake(/*fake_cicerone_client=*/nullptr); // Takes ownership of |disk_mount_manager_|. - chromeos::disks::DiskMountManager::InitializeForTesting( - disk_mount_manager_); + disks::DiskMountManager::InitializeForTesting(disk_mount_manager_); } ~SmbServiceWithSmbfsTest() override { @@ -245,10 +244,9 @@ } } - std::unique_ptr<chromeos::disks::MountPoint> MakeMountPoint( + std::unique_ptr<disks::MountPoint> MakeMountPoint( const base::FilePath& path) { - return std::make_unique<chromeos::disks::MountPoint>(path, - disk_mount_manager_); + return std::make_unique<disks::MountPoint>(path, disk_mount_manager_); } // Helper function for creating a basic smbfs mount with an empty
diff --git a/chrome/browser/ash/smb_client/smbfs_share.cc b/chrome/browser/ash/smb_client/smbfs_share.cc index 57ee7c9..6c7665d 100644 --- a/chrome/browser/ash/smb_client/smbfs_share.cc +++ b/chrome/browser/ash/smb_client/smbfs_share.cc
@@ -87,7 +87,7 @@ } else { mounter_ = std::make_unique<smbfs::SmbFsMounter>( share_url_.ToString(), mount_dir, options_, this, - chromeos::disks::DiskMountManager::GetInstance()); + disks::DiskMountManager::GetInstance()); } mounter_->Mount(base::BindOnce(&SmbFsShare::OnMountDone, base::Unretained(this), std::move(callback)));
diff --git a/chrome/browser/ash/smb_client/smbfs_share_unittest.cc b/chrome/browser/ash/smb_client/smbfs_share_unittest.cc index 64512ef6..b886417 100644 --- a/chrome/browser/ash/smb_client/smbfs_share_unittest.cc +++ b/chrome/browser/ash/smb_client/smbfs_share_unittest.cc
@@ -55,7 +55,7 @@ Profile::FromBrowserContext(context), nullptr /* drive_integration_service */, nullptr /* power_manager_client */, - chromeos::disks::DiskMountManager::GetInstance(), + disks::DiskMountManager::GetInstance(), nullptr /* file_system_provider_service */, file_manager::VolumeManager::GetMtpStorageInfoCallback()); } @@ -100,8 +100,7 @@ class SmbFsShareTest : public testing::Test { protected: void SetUp() override { - chromeos::disks::DiskMountManager::InitializeForTesting( - disk_mount_manager_); + disks::DiskMountManager::InitializeForTesting(disk_mount_manager_); file_manager::VolumeManagerFactory::GetInstance()->SetTestingFactory( &profile_, base::BindRepeating(&BuildVolumeManager)); @@ -126,8 +125,8 @@ mojo::Receiver<smbfs::mojom::SmbFs>* smbfs_receiver, mojo::Remote<smbfs::mojom::SmbFsDelegate>* delegate) { return std::make_unique<smbfs::SmbFsHost>( - std::make_unique<chromeos::disks::MountPoint>( - base::FilePath(kMountPath), disk_mount_manager_), + std::make_unique<disks::MountPoint>(base::FilePath(kMountPath), + disk_mount_manager_), share, mojo::Remote<smbfs::mojom::SmbFs>( smbfs_receiver->BindNewPipeAndPassRemote()),
diff --git a/chrome/browser/ash/system_extensions/api/window_management/window_management_impl.cc b/chrome/browser/ash/system_extensions/api/window_management/window_management_impl.cc index 9ba16470..fa498258b 100644 --- a/chrome/browser/ash/system_extensions/api/window_management/window_management_impl.cc +++ b/chrome/browser/ash/system_extensions/api/window_management/window_management_impl.cc
@@ -5,7 +5,7 @@ #include "chrome/browser/ash/system_extensions/api/window_management/window_management_impl.h" #include "base/strings/utf_string_conversions.h" #include "base/unguessable_token.h" -#include "chrome/browser/apps/app_service/app_service_proxy_chromeos.h" +#include "chrome/browser/apps/app_service/app_service_proxy.h" #include "chrome/browser/apps/app_service/app_service_proxy_factory.h" #include "chrome/browser/profiles/profile.h" #include "components/services/app_service/public/cpp/instance.h" @@ -24,9 +24,8 @@ : browser_context_(browser_context) {} void WindowManagementImpl::GetAllWindows(GetAllWindowsCallback callback) { - apps::AppServiceProxyChromeOs* proxy = - apps::AppServiceProxyFactory::GetForProfile( - Profile::FromBrowserContext(browser_context_)); + apps::AppServiceProxy* proxy = apps::AppServiceProxyFactory::GetForProfile( + Profile::FromBrowserContext(browser_context_)); std::vector<blink::mojom::CrosWindowPtr> windows; proxy->InstanceRegistry().ForEachInstance( [&windows](const apps::InstanceUpdate& update) { @@ -56,9 +55,8 @@ int32_t width, int32_t height) { aura::Window* target = nullptr; - apps::AppServiceProxyChromeOs* proxy = - apps::AppServiceProxyFactory::GetForProfile( - Profile::FromBrowserContext(browser_context_)); + apps::AppServiceProxy* proxy = apps::AppServiceProxyFactory::GetForProfile( + Profile::FromBrowserContext(browser_context_)); proxy->InstanceRegistry().ForEachInstance( [&target, &id](const apps::InstanceUpdate& update) { if (id == update.InstanceId()) {
diff --git a/chrome/browser/ash/usb/cros_usb_detector_unittest.cc b/chrome/browser/ash/usb/cros_usb_detector_unittest.cc index 13b2e18..b06836b 100644 --- a/chrome/browser/ash/usb/cros_usb_detector_unittest.cc +++ b/chrome/browser/ash/usb/cros_usb_detector_unittest.cc
@@ -141,16 +141,15 @@ chromeos::DBusThreadManager::Get()->GetVmPluginDispatcherClient()); mock_disk_mount_manager_ = - new testing::NiceMock<chromeos::disks::MockDiskMountManager>; - chromeos::disks::DiskMountManager::InitializeForTesting( - mock_disk_mount_manager_); + new testing::NiceMock<disks::MockDiskMountManager>; + disks::DiskMountManager::InitializeForTesting(mock_disk_mount_manager_); } CrosUsbDetectorTest(const CrosUsbDetectorTest&) = delete; CrosUsbDetectorTest& operator=(const CrosUsbDetectorTest&) = delete; ~CrosUsbDetectorTest() override { - chromeos::disks::DiskMountManager::Shutdown(); + disks::DiskMountManager::Shutdown(); chromeos::SeneschalClient::Shutdown(); chromeos::ConciergeClient::Shutdown(); chromeos::CiceroneClient::Shutdown(); @@ -247,7 +246,7 @@ int device_number, bool mounted) { mock_disk_mount_manager_->CreateDiskEntryForMountDevice( - chromeos::disks::Disk::Builder() + disks::Disk::Builder() .SetBusNumber(bus_number) .SetDeviceNumber(device_number) .SetDevicePath("/dev/" + name) @@ -255,18 +254,18 @@ .SetIsMounted(mounted) .Build()); if (mounted) - NotifyMountEvent(name, chromeos::disks::DiskMountManager::MOUNTING); + NotifyMountEvent(name, disks::DiskMountManager::MOUNTING); } void NotifyMountEvent( const std::string& name, - chromeos::disks::DiskMountManager::MountEvent event, + disks::DiskMountManager::MountEvent event, chromeos::MountError mount_error = chromeos::MOUNT_ERROR_NONE) { // In theory we should also clear the mounted flag from the disk, but we // don't rely on that. - chromeos::disks::DiskMountManager::MountPointInfo info( + disks::DiskMountManager::MountPointInfo info( "/dev/" + name, "/mount/" + name, chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE); + disks::MOUNT_CONDITION_NONE); mock_disk_mount_manager_->NotifyMountEvent(event, mount_error, info); } @@ -280,8 +279,8 @@ device::FakeUsbDeviceManager device_manager_; std::unique_ptr<NotificationDisplayServiceTester> display_service_; - chromeos::disks::MockDiskMountManager* mock_disk_mount_manager_; - chromeos::disks::DiskMountManager::DiskMap disks_; + disks::MockDiskMountManager* mock_disk_mount_manager_; + disks::DiskMountManager::DiskMap disks_; chromeos::FakeCiceroneClient* fake_cicerone_client_; chromeos::FakeConciergeClient* fake_concierge_client_; @@ -1029,7 +1028,7 @@ AddDisk("disk1", 3, 4, true); AddDisk("disk2", 3, 4, /*mounted=*/false); - NotifyMountEvent("disk2", chromeos::disks::DiskMountManager::MOUNTING, + NotifyMountEvent("disk2", disks::DiskMountManager::MOUNTING, chromeos::MOUNT_ERROR_INTERNAL); AddDisk("disk3", 3, 5, true); AddDisk("disk4", 3, 4, true); @@ -1045,14 +1044,14 @@ EXPECT_EQ(fake_concierge_client_->attach_usb_device_call_count(), 0); // Unmount events would normally be fired by the DiskMountManager. - NotifyMountEvent("disk1", chromeos::disks::DiskMountManager::UNMOUNTING); + NotifyMountEvent("disk1", disks::DiskMountManager::UNMOUNTING); std::move(callback1).Run(chromeos::MOUNT_ERROR_NONE); base::RunLoop().RunUntilIdle(); EXPECT_FALSE(GetSingleDeviceInfo().shared_vm_name.has_value()); EXPECT_EQ(fake_concierge_client_->attach_usb_device_call_count(), 0); // All unmounts must complete before sharing succeeds. - NotifyMountEvent("disk4", chromeos::disks::DiskMountManager::UNMOUNTING); + NotifyMountEvent("disk4", disks::DiskMountManager::UNMOUNTING); std::move(callback4).Run(chromeos::MOUNT_ERROR_NONE); base::RunLoop().RunUntilIdle(); @@ -1084,10 +1083,10 @@ // Unmount events would normally be fired by the DiskMountManager. AttachDeviceToVm("VM1", GetSingleDeviceInfo().guid, /*success=*/false); - NotifyMountEvent("disk1", chromeos::disks::DiskMountManager::UNMOUNTING); + NotifyMountEvent("disk1", disks::DiskMountManager::UNMOUNTING); std::move(callback1).Run(chromeos::MOUNT_ERROR_NONE); std::move(callback2).Run(chromeos::MOUNT_ERROR_UNKNOWN); - NotifyMountEvent("disk3", chromeos::disks::DiskMountManager::UNMOUNTING); + NotifyMountEvent("disk3", disks::DiskMountManager::UNMOUNTING); std::move(callback3).Run(chromeos::MOUNT_ERROR_NONE); base::RunLoop().RunUntilIdle(); @@ -1128,12 +1127,12 @@ EXPECT_TRUE(GetSingleDeviceInfo().prompt_before_sharing); - NotifyMountEvent("disk_early", chromeos::disks::DiskMountManager::UNMOUNTING); + NotifyMountEvent("disk_early", disks::DiskMountManager::UNMOUNTING); EXPECT_FALSE(GetSingleDeviceInfo().prompt_before_sharing); // A disk which fails to mount shouldn't cause the prompt to be shown. AddDisk("disk_error", 1, 5, /*mounted=*/false); - NotifyMountEvent("disk_error", chromeos::disks::DiskMountManager::MOUNTING, + NotifyMountEvent("disk_error", disks::DiskMountManager::MOUNTING, chromeos::MOUNT_ERROR_INTERNAL); EXPECT_FALSE(GetSingleDeviceInfo().prompt_before_sharing);
diff --git a/chrome/browser/browser_process.h b/chrome/browser/browser_process.h index 1580321..263369df 100644 --- a/chrome/browser/browser_process.h +++ b/chrome/browser/browser_process.h
@@ -38,7 +38,6 @@ class StartupData; class StatusTray; class SystemNetworkContextManager; -class WatchDogThread; class WebRtcLogUploader; #if !defined(OS_ANDROID) @@ -165,9 +164,6 @@ // network quality change events. virtual network::NetworkQualityTracker* network_quality_tracker() = 0; - // Returns the thread that is used for health check of all browser threads. - virtual WatchDogThread* watchdog_thread() = 0; - // Starts and manages the policy system. virtual policy::ChromeBrowserPolicyConnector* browser_policy_connector() = 0;
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc index 6e25c996..3a1bf72 100644 --- a/chrome/browser/browser_process_impl.cc +++ b/chrome/browser/browser_process_impl.cc
@@ -57,7 +57,6 @@ #include "chrome/browser/metrics/chrome_feature_list_creator.h" #include "chrome/browser/metrics/chrome_metrics_services_manager_client.h" #include "chrome/browser/metrics/metrics_reporting_state.h" -#include "chrome/browser/metrics/thread_watcher.h" #include "chrome/browser/net/system_network_context_manager.h" #include "chrome/browser/notifications/notification_platform_bridge.h" #include "chrome/browser/notifications/system_notification_helper.h" @@ -470,9 +469,6 @@ if (gcm_driver_) gcm_driver_->Shutdown(); - // Stop the watchdog thread before stopping other threads. - watchdog_thread_.reset(); - platform_part()->StartTearDown(); // Cancel any uploads to release the system url request context references. @@ -705,14 +701,6 @@ return network_quality_tracker_.get(); } -WatchDogThread* BrowserProcessImpl::watchdog_thread() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - if (!created_watchdog_thread_) - CreateWatchdogThread(); - DCHECK(watchdog_thread_.get() != NULL); - return watchdog_thread_.get(); -} - ProfileManager* BrowserProcessImpl::profile_manager() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (!created_profile_manager_) @@ -1106,18 +1094,6 @@ void BrowserProcessImpl::OnKeepAliveRestartStateChanged(bool can_restart) {} -void BrowserProcessImpl::CreateWatchdogThread() { - DCHECK(!created_watchdog_thread_ && !watchdog_thread_); - created_watchdog_thread_ = true; - - auto thread = std::make_unique<WatchDogThread>(); - base::Thread::Options options; - options.timer_slack = base::TIMER_SLACK_MAXIMUM; - if (!thread->StartWithOptions(std::move(options))) - return; - watchdog_thread_.swap(thread); -} - void BrowserProcessImpl::CreateProfileManager() { DCHECK(!created_profile_manager_ && !profile_manager_); created_profile_manager_ = true;
diff --git a/chrome/browser/browser_process_impl.h b/chrome/browser/browser_process_impl.h index 006e037..9d28c95 100644 --- a/chrome/browser/browser_process_impl.h +++ b/chrome/browser/browser_process_impl.h
@@ -158,7 +158,6 @@ scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory() override; network::NetworkQualityTracker* network_quality_tracker() override; - WatchDogThread* watchdog_thread() override; ProfileManager* profile_manager() override; PrefService* local_state() override; variations::VariationsService* variations_service() override; @@ -236,7 +235,6 @@ // changes to the render process. void CreateNetworkQualityObserver(); - void CreateWatchdogThread(); void CreateProfileManager(); void CreateIconManager(); void CreateNotificationPlatformBridge(); @@ -261,9 +259,6 @@ const raw_ptr<StartupData> startup_data_; - bool created_watchdog_thread_ = false; - std::unique_ptr<WatchDogThread> watchdog_thread_; - // Must be destroyed after |local_state_|. std::unique_ptr<policy::ChromeBrowserPolicyConnector> browser_policy_connector_;
diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd index 3c8eaa0d..4e24e6d4 100644 --- a/chrome/browser/browser_resources.grd +++ b/chrome/browser/browser_resources.grd
@@ -220,8 +220,6 @@ <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. --> - <include name="IDR_MOBILE_MANIFEST" file="resources\chromeos\mobile_app\manifest.json" type="BINDATA" /> - <include name="IDR_MOBILE_SETUP_PAGE_HTML" file="resources\chromeos\mobile_setup.html" flattenhtml="true" type="BINDATA" /> <include name="IDR_MOBILE_SETUP_PORTAL_PAGE_HTML" file="resources\chromeos\mobile_setup_portal.html" flattenhtml="true" type="BINDATA" /> <include name="IDR_ECHO_MANIFEST" file="resources\chromeos\echo\manifest.json" type="BINDATA" />
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc index c51f614..9a2def9 100644 --- a/chrome/browser/chrome_browser_main.cc +++ b/chrome/browser/chrome_browser_main.cc
@@ -72,7 +72,7 @@ #include "chrome/browser/metrics/chrome_feature_list_creator.h" #include "chrome/browser/metrics/chrome_metrics_service_accessor.h" #include "chrome/browser/metrics/expired_histograms_array.h" -#include "chrome/browser/metrics/thread_watcher.h" +#include "chrome/browser/metrics/shutdown_watcher_helper.h" #include "chrome/browser/nacl_host/nacl_browser_delegate_impl.h" #include "chrome/browser/net/system_network_context_manager.h" #include "chrome/browser/policy/chrome_browser_policy_connector.h" @@ -187,7 +187,6 @@ #if defined(OS_ANDROID) #include "chrome/browser/flags/android/chrome_feature_list.h" -#include "chrome/browser/metrics/thread_watcher_android.h" #include "chrome/browser/share/share_history.h" #include "chrome/browser/ui/page_info/chrome_page_info_client.h" #include "ui/base/resource/resource_bundle_android.h" @@ -1207,12 +1206,6 @@ // Now that the file thread has been started, start metrics. StartMetricsRecording(); - if (!base::debug::BeingDebugged()) { - // Create watchdog thread after creating all other threads because it will - // watch the other threads and they must be running. - browser_process_->watchdog_thread(); - } - // Do any initializating in the browser process that requires all threads // running. browser_process_->PreMainMessageLoopRun();
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index 0a40e34..28f382d 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -96,6 +96,7 @@ "//ash/components/pcie_peripheral", "//ash/components/phonehub", "//ash/components/phonehub/proto", + "//ash/components/policy", "//ash/components/power", "//ash/components/settings", "//ash/components/smbfs", @@ -293,7 +294,6 @@ "//chromeos/login/session", "//chromeos/memory", "//chromeos/network", - "//chromeos/policy", "//chromeos/services/assistant/public/cpp", "//chromeos/services/bluetooth_config:in_process_bluetooth_config", "//chromeos/services/cros_healthd/public/cpp",
diff --git a/chrome/browser/chromeos/extensions/file_manager/device_event_router.cc b/chrome/browser/chromeos/extensions/file_manager/device_event_router.cc index 325ca9d..d25a177 100644 --- a/chrome/browser/chromeos/extensions/file_manager/device_event_router.cc +++ b/chrome/browser/chromeos/extensions/file_manager/device_event_router.cc
@@ -67,12 +67,12 @@ ""); } -void DeviceEventRouter::OnDiskAdded(const chromeos::disks::Disk& disk, +void DeviceEventRouter::OnDiskAdded(const ash::disks::Disk& disk, bool mounting) { // Do nothing. } -void DeviceEventRouter::OnDiskRemoved(const chromeos::disks::Disk& disk) { +void DeviceEventRouter::OnDiskRemoved(const ash::disks::Disk& disk) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); if (is_resuming_ || is_starting_up_)
diff --git a/chrome/browser/chromeos/extensions/file_manager/device_event_router.h b/chrome/browser/chromeos/extensions/file_manager/device_event_router.h index 0d4a1f2..29fb9c920 100644 --- a/chrome/browser/chromeos/extensions/file_manager/device_event_router.h +++ b/chrome/browser/chromeos/extensions/file_manager/device_event_router.h
@@ -46,8 +46,8 @@ void Startup(); // VolumeManagerObserver overrides. - void OnDiskAdded(const chromeos::disks::Disk& disk, bool mounting) override; - void OnDiskRemoved(const chromeos::disks::Disk& disk) override; + void OnDiskAdded(const ash::disks::Disk& disk, bool mounting) override; + void OnDiskRemoved(const ash::disks::Disk& disk) override; void OnDeviceAdded(const std::string& device_path) override; void OnDeviceRemoved(const std::string& device_path) override; void OnVolumeMounted(chromeos::MountError error_code,
diff --git a/chrome/browser/chromeos/extensions/file_manager/device_event_router_unittest.cc b/chrome/browser/chromeos/extensions/file_manager/device_event_router_unittest.cc index 8f860f6..761d073a 100644 --- a/chrome/browser/chromeos/extensions/file_manager/device_event_router_unittest.cc +++ b/chrome/browser/chromeos/extensions/file_manager/device_event_router_unittest.cc
@@ -18,7 +18,7 @@ namespace { namespace file_manager_private = extensions::api::file_manager_private; -using chromeos::disks::Disk; +using ::ash::disks::Disk; const char kTestDevicePath[] = "/device/test";
diff --git a/chrome/browser/chromeos/extensions/file_manager/event_router.cc b/chrome/browser/chromeos/extensions/file_manager/event_router.cc index a3895c4..6d9f9e9 100644 --- a/chrome/browser/chromeos/extensions/file_manager/event_router.cc +++ b/chrome/browser/chromeos/extensions/file_manager/event_router.cc
@@ -70,8 +70,8 @@ #include "storage/common/file_system/file_system_types.h" #include "storage/common/file_system/file_system_util.h" -using chromeos::disks::Disk; -using chromeos::disks::DiskMountManager; +using ::ash::disks::Disk; +using ::ash::disks::DiskMountManager; using content::BrowserThread; using drive::DriveIntegrationService; using drive::DriveIntegrationServiceFactory;
diff --git a/chrome/browser/chromeos/extensions/file_manager/event_router.h b/chrome/browser/chromeos/extensions/file_manager/event_router.h index 8523e96..8692aeafa 100644 --- a/chrome/browser/chromeos/extensions/file_manager/event_router.h +++ b/chrome/browser/chromeos/extensions/file_manager/event_router.h
@@ -138,8 +138,8 @@ void TimezoneChanged(const icu::TimeZone& timezone) override; // VolumeManagerObserver overrides. - void OnDiskAdded(const chromeos::disks::Disk& disk, bool mounting) override; - void OnDiskRemoved(const chromeos::disks::Disk& disk) override; + void OnDiskAdded(const ash::disks::Disk& disk, bool mounting) override; + void OnDiskRemoved(const ash::disks::Disk& disk) override; void OnDeviceAdded(const std::string& device_path) override; void OnDeviceRemoved(const std::string& device_path) override; void OnVolumeMounted(chromeos::MountError error_code,
diff --git a/chrome/browser/chromeos/extensions/file_manager/file_manager_private_apitest.cc b/chrome/browser/chromeos/extensions/file_manager/file_manager_private_apitest.cc index 0966908..4c6bcf1 100644 --- a/chrome/browser/chromeos/extensions/file_manager/file_manager_private_apitest.cc +++ b/chrome/browser/chromeos/extensions/file_manager/file_manager_private_apitest.cc
@@ -46,12 +46,12 @@ using ::testing::_; using ::testing::ReturnRef; -using chromeos::disks::Disk; -using chromeos::disks::DiskMountManager; -using chromeos::disks::FormatFileSystemType; - namespace { +using ::ash::disks::Disk; +using ::ash::disks::DiskMountManager; +using ::ash::disks::FormatFileSystemType; + struct TestDiskInfo { const char* file_path; bool write_disabled_by_policy; @@ -79,7 +79,7 @@ std::string source_path; std::string mount_path; chromeos::MountType mount_type; - chromeos::disks::MountCondition mount_condition; + ash::disks::MountCondition mount_condition; // -1 if there is no disk info. int disk_info_index; @@ -198,9 +198,8 @@ // ExtensionApiTest override void SetUpInProcessBrowserTestFixture() override { extensions::ExtensionApiTest::SetUpInProcessBrowserTestFixture(); - disk_mount_manager_mock_ = new chromeos::disks::MockDiskMountManager; - chromeos::disks::DiskMountManager::InitializeForTesting( - disk_mount_manager_mock_); + disk_mount_manager_mock_ = new ash::disks::MockDiskMountManager; + DiskMountManager::InitializeForTesting(disk_mount_manager_mock_); disk_mount_manager_mock_->SetupDefaultReplies(); // override mock functions. @@ -214,7 +213,7 @@ // ExtensionApiTest override void TearDownInProcessBrowserTestFixture() override { - chromeos::disks::DiskMountManager::Shutdown(); + DiskMountManager::Shutdown(); disk_mount_manager_mock_ = nullptr; extensions::ExtensionApiTest::TearDownInProcessBrowserTestFixture(); @@ -228,7 +227,7 @@ chromeos::CrosDisksClient::GetRemovableDiskMountPoint().AppendASCII( "mount_path1").AsUTF8Unsafe(), chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE, + ash::disks::MOUNT_CONDITION_NONE, 0 }, { @@ -236,7 +235,7 @@ chromeos::CrosDisksClient::GetRemovableDiskMountPoint().AppendASCII( "mount_path2").AsUTF8Unsafe(), chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE, + ash::disks::MOUNT_CONDITION_NONE, 1 }, { @@ -244,7 +243,7 @@ chromeos::CrosDisksClient::GetRemovableDiskMountPoint().AppendASCII( "mount_path3").AsUTF8Unsafe(), chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE, + ash::disks::MOUNT_CONDITION_NONE, 2 }, { @@ -254,7 +253,7 @@ chromeos::CrosDisksClient::GetArchiveMountPoint().AppendASCII( "archive_mount_path").AsUTF8Unsafe(), chromeos::MOUNT_TYPE_ARCHIVE, - chromeos::disks::MOUNT_CONDITION_NONE, + ash::disks::MOUNT_CONDITION_NONE, -1 } }; @@ -315,20 +314,19 @@ } protected: - void SshfsMount( - const std::string& source_path, - const std::string& source_format, - const std::string& mount_label, - const std::vector<std::string>& mount_options, - chromeos::MountType type, - chromeos::MountAccessMode access_mode, - chromeos::disks::DiskMountManager::MountPathCallback callback) { - auto mount_point_info = chromeos::disks::DiskMountManager::MountPointInfo( + void SshfsMount(const std::string& source_path, + const std::string& source_format, + const std::string& mount_label, + const std::vector<std::string>& mount_options, + chromeos::MountType type, + chromeos::MountAccessMode access_mode, + DiskMountManager::MountPathCallback callback) { + auto mount_point_info = DiskMountManager::MountPointInfo( source_path, "/media/fuse/" + mount_label, chromeos::MountType::MOUNT_TYPE_NETWORK_STORAGE, - chromeos::disks::MountCondition::MOUNT_CONDITION_NONE); + ash::disks::MountCondition::MOUNT_CONDITION_NONE); disk_mount_manager_mock_->NotifyMountEvent( - chromeos::disks::DiskMountManager::MountEvent::MOUNTING, + DiskMountManager::MountEvent::MOUNTING, chromeos::MountError::MOUNT_ERROR_NONE, mount_point_info); std::move(callback).Run(chromeos::MOUNT_ERROR_NONE, mount_point_info); } @@ -350,7 +348,7 @@ } base::ScopedTempDir temp_dir_; - chromeos::disks::MockDiskMountManager* disk_mount_manager_mock_; + ash::disks::MockDiskMountManager* disk_mount_manager_mock_; DiskMountManager::DiskMap volumes_; DiskMountManager::MountPointMap mount_points_; file_manager::EventRouter* event_router_ = nullptr;
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_file_system.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_file_system.cc index 25d5760..302ef9a 100644 --- a/chrome/browser/chromeos/extensions/file_manager/private_api_file_system.cc +++ b/chrome/browser/chromeos/extensions/file_manager/private_api_file_system.cc
@@ -74,7 +74,7 @@ #include "ui/base/clipboard/clipboard_buffer.h" #include "ui/base/clipboard/clipboard_non_backed.h" -using chromeos::disks::DiskMountManager; +using ::ash::disks::DiskMountManager; using content::BrowserThread; using content::ChildProcessSecurityPolicy; using file_manager::util::EntryDefinition; @@ -364,20 +364,20 @@ return prefix_matches; } -chromeos::disks::FormatFileSystemType ApiFormatFileSystemToChromeEnum( +ash::disks::FormatFileSystemType ApiFormatFileSystemToChromeEnum( api::file_manager_private::FormatFileSystemType filesystem) { switch (filesystem) { case api::file_manager_private::FORMAT_FILE_SYSTEM_TYPE_NONE: - return chromeos::disks::FormatFileSystemType::kUnknown; + return ash::disks::FormatFileSystemType::kUnknown; case api::file_manager_private::FORMAT_FILE_SYSTEM_TYPE_VFAT: - return chromeos::disks::FormatFileSystemType::kVfat; + return ash::disks::FormatFileSystemType::kVfat; case api::file_manager_private::FORMAT_FILE_SYSTEM_TYPE_EXFAT: - return chromeos::disks::FormatFileSystemType::kExfat; + return ash::disks::FormatFileSystemType::kExfat; case api::file_manager_private::FORMAT_FILE_SYSTEM_TYPE_NTFS: - return chromeos::disks::FormatFileSystemType::kNtfs; + return ash::disks::FormatFileSystemType::kNtfs; } NOTREACHED() << "Unknown format filesystem " << filesystem; - return chromeos::disks::FormatFileSystemType::kUnknown; + return ash::disks::FormatFileSystemType::kUnknown; } absl::optional<file_manager::io_task::OperationType> IOTaskTypeToChromeEnum( @@ -798,7 +798,7 @@ const DiskMountManager::DiskMap& disks = DiskMountManager::GetInstance()->disks(); - chromeos::disks::Disk* device_disk; + ash::disks::Disk* device_disk; DiskMountManager::DiskMap::const_iterator it; for (it = disks.begin(); it != disks.end(); ++it) {
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_mount.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_mount.cc index f4acdc4..7199354b 100644 --- a/chrome/browser/chromeos/extensions/file_manager/private_api_mount.cc +++ b/chrome/browser/chromeos/extensions/file_manager/private_api_mount.cc
@@ -34,7 +34,7 @@ namespace extensions { -using chromeos::disks::DiskMountManager; +using ::ash::disks::DiskMountManager; using content::BrowserThread; namespace file_manager_private = extensions::api::file_manager_private;
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_util.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_util.cc index c31edc6..c783891 100644 --- a/chrome/browser/chromeos/extensions/file_manager/private_api_util.cc +++ b/chrome/browser/chromeos/extensions/file_manager/private_api_util.cc
@@ -350,6 +350,9 @@ properties_->can_share = std::make_unique<bool>(metadata->capabilities->can_share); + properties_->can_pin = std::make_unique<bool>( + metadata->can_pin == drivefs::mojom::FileMetadata::CanPinStatus::kOk); + if (drivefs::IsAFile(metadata->type)) { properties_->thumbnail_url = std::make_unique<std::string>( base::StrCat({"drivefs:", file_system_url_.ToGURL().spec()})); @@ -542,15 +545,15 @@ volume_metadata->hidden = volume.hidden(); switch (volume.mount_condition()) { - case chromeos::disks::MOUNT_CONDITION_NONE: + case ash::disks::MOUNT_CONDITION_NONE: volume_metadata->mount_condition = file_manager_private::MOUNT_CONDITION_NONE; break; - case chromeos::disks::MOUNT_CONDITION_UNKNOWN_FILESYSTEM: + case ash::disks::MOUNT_CONDITION_UNKNOWN_FILESYSTEM: volume_metadata->mount_condition = file_manager_private::MOUNT_CONDITION_UNKNOWN; break; - case chromeos::disks::MOUNT_CONDITION_UNSUPPORTED_FILESYSTEM: + case ash::disks::MOUNT_CONDITION_UNSUPPORTED_FILESYSTEM: volume_metadata->mount_condition = file_manager_private::MOUNT_CONDITION_UNSUPPORTED; break;
diff --git a/chrome/browser/chromeos/extensions/file_manager/system_notification_manager_unittest.cc b/chrome/browser/chromeos/extensions/file_manager/system_notification_manager_unittest.cc index 2405b7d..dba631c 100644 --- a/chrome/browser/chromeos/extensions/file_manager/system_notification_manager_unittest.cc +++ b/chrome/browser/chromeos/extensions/file_manager/system_notification_manager_unittest.cc
@@ -217,12 +217,12 @@ } // Creates a disk instance with |device_path| and |mount_path| for testing. - std::unique_ptr<chromeos::disks::Disk> CreateTestDisk( + std::unique_ptr<ash::disks::Disk> CreateTestDisk( const std::string& device_path, const std::string& mount_path, bool is_read_only_hardware, bool is_mounted) { - return chromeos::disks::Disk::Builder() + return ash::disks::Disk::Builder() .SetDevicePath(device_path) .SetMountPath(mount_path) .SetStorageDevicePath(device_path) @@ -445,7 +445,7 @@ TEST_F(SystemNotificationManagerTest, DeviceHardUnplugged) { base::HistogramTester histogram_tester; - std::unique_ptr<chromeos::disks::Disk> disk = + std::unique_ptr<ash::disks::Disk> disk = CreateTestDisk(kDevicePath, kMountPath, /*is_read_only_hardware=*/false, /*is_mounted=*/true); GetDeviceEventRouter()->OnDiskRemoved(*disk);
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/BUILD.gn b/chrome/browser/chromeos/extensions/telemetry/api/BUILD.gn index 8e49b54..09f1c0e 100644 --- a/chrome/browser/chromeos/extensions/telemetry/api/BUILD.gn +++ b/chrome/browser/chromeos/extensions/telemetry/api/BUILD.gn
@@ -12,8 +12,6 @@ source_set("api") { sources = [ - "api_guard_delegate.cc", - "api_guard_delegate.h", "base_telemetry_extension_api_guard_function.cc", "base_telemetry_extension_api_guard_function.h", "diagnostics_api.cc", @@ -30,7 +28,6 @@ "//ash/webui/telemetry_extension_ui/mojom", "//ash/webui/telemetry_extension_ui/services:telemetry_services", "//base", - "//chrome/browser/extensions", "//chrome/browser/profiles:profile", "//chrome/browser/ui", "//chrome/common/chromeos/extensions", @@ -66,8 +63,6 @@ "base_telemetry_extension_browser_test.cc", "base_telemetry_extension_browser_test.h", "diagnostics_api_browsertest.cc", - "fake_api_guard_delegate.cc", - "fake_api_guard_delegate.h", "fake_hardware_info_delegate.cc", "fake_hardware_info_delegate.h", "telemetry_api_browsertest.cc", @@ -85,9 +80,7 @@ "//chromeos/dbus/debug_daemon", "//chromeos/services/cros_healthd/public/cpp", "//chromeos/services/cros_healthd/public/mojom", - "//components/user_manager", "//extensions:test_support", - "//extensions/browser", "//extensions/browser:test_support", "//extensions/common", "//url",
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/api_guard_delegate.cc b/chrome/browser/chromeos/extensions/telemetry/api/api_guard_delegate.cc deleted file mode 100644 index 00cd549a..0000000 --- a/chrome/browser/chromeos/extensions/telemetry/api/api_guard_delegate.cc +++ /dev/null
@@ -1,50 +0,0 @@ -// Copyright 2021 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/extensions/telemetry/api/api_guard_delegate.h" - -#include <string> - -#include "base/memory/ptr_util.h" -#include "base/values.h" -#include "chrome/browser/extensions/extension_management.h" - -namespace content { -class BrowserContext; -} - -namespace chromeos { - -// static -ApiGuardDelegate::Factory* ApiGuardDelegate::Factory::test_factory_ = nullptr; - -// static -std::unique_ptr<ApiGuardDelegate> ApiGuardDelegate::Factory::Create() { - if (test_factory_) { - return test_factory_->CreateInstance(); - } - return base::WrapUnique<ApiGuardDelegate>(new ApiGuardDelegate()); -} - -// static -void ApiGuardDelegate::Factory::SetForTesting(Factory* test_factory) { - test_factory_ = test_factory; -} - -ApiGuardDelegate::Factory::Factory() = default; -ApiGuardDelegate::Factory::~Factory() = default; - -ApiGuardDelegate::ApiGuardDelegate() = default; -ApiGuardDelegate::~ApiGuardDelegate() = default; - -bool ApiGuardDelegate::IsExtensionForceInstalled( - content::BrowserContext* context, - const std::string& extension_id) { - const auto force_install_list = - extensions::ExtensionManagementFactory::GetForBrowserContext(context) - ->GetForceInstallList(); - return force_install_list->FindKey(extension_id) != nullptr; -} - -} // namespace chromeos
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/api_guard_delegate.h b/chrome/browser/chromeos/extensions/telemetry/api/api_guard_delegate.h deleted file mode 100644 index bd916fadf..0000000 --- a/chrome/browser/chromeos/extensions/telemetry/api/api_guard_delegate.h +++ /dev/null
@@ -1,49 +0,0 @@ -// Copyright 2021 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_EXTENSIONS_TELEMETRY_API_API_GUARD_DELEGATE_H_ -#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_TELEMETRY_API_API_GUARD_DELEGATE_H_ - -#include <memory> -#include <string> - -namespace content { -class BrowserContext; -} - -namespace chromeos { - -// ApiGuardDelegate is a helper class to offload API guard checks and make it -// test-friendly. E.g. check if the extension is force installed by policy. -class ApiGuardDelegate { - public: - class Factory { - public: - static std::unique_ptr<ApiGuardDelegate> Create(); - static void SetForTesting(Factory* test_factory); - - virtual ~Factory(); - - protected: - Factory(); - virtual std::unique_ptr<ApiGuardDelegate> CreateInstance() = 0; - - private: - static Factory* test_factory_; - }; - - ApiGuardDelegate(const ApiGuardDelegate&) = delete; - ApiGuardDelegate& operator=(const ApiGuardDelegate&) = delete; - virtual ~ApiGuardDelegate(); - - virtual bool IsExtensionForceInstalled(content::BrowserContext* context, - const std::string& extension_id); - - protected: - ApiGuardDelegate(); -}; - -} // namespace chromeos - -#endif // CHROME_BROWSER_CHROMEOS_EXTENSIONS_TELEMETRY_API_API_GUARD_DELEGATE_H_
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/api_guard_delegate_unittest.cc b/chrome/browser/chromeos/extensions/telemetry/api/api_guard_delegate_unittest.cc deleted file mode 100644 index a310c53e..0000000 --- a/chrome/browser/chromeos/extensions/telemetry/api/api_guard_delegate_unittest.cc +++ /dev/null
@@ -1,58 +0,0 @@ -// Copyright 2021 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 <string> - -#include "base/values.h" -#include "chrome/browser/chromeos/extensions/telemetry/api/api_guard_delegate.h" -#include "chrome/browser/extensions/extension_management_test_util.h" -#include "chrome/test/base/testing_profile.h" -#include "components/sync_preferences/testing_pref_service_syncable.h" -#include "content/public/test/browser_task_environment.h" -#include "extensions/common/extension_urls.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace chromeos { - -namespace { - -constexpr char kExtensionId[] = "gogonhoemckpdpadfnjnpgbjpbjnodgc"; - -} // namespace - -class ApiGuardDelegateTest : public testing::Test { - public: - ApiGuardDelegateTest() - : task_environment_(content::BrowserTaskEnvironment::IO_MAINLOOP) {} - ~ApiGuardDelegateTest() override = default; - - protected: - content::BrowserTaskEnvironment task_environment_; - TestingProfile profile_; -}; - -TEST_F(ApiGuardDelegateTest, IsExtensionForceInstalledFalse) { - EXPECT_FALSE(ApiGuardDelegate::Factory::Create()->IsExtensionForceInstalled( - &profile_, kExtensionId)); -} - -TEST_F(ApiGuardDelegateTest, IsExtensionForceInstalledTrue) { - { - extensions::ExtensionManagementPrefUpdater< - sync_preferences::TestingPrefServiceSyncable> - updater(profile_.GetTestingPrefService()); - updater.SetIndividualExtensionAutoInstalled( - kExtensionId, extension_urls::kChromeWebstoreUpdateURL, - /*forced=*/true); - } - - EXPECT_TRUE(ApiGuardDelegate::Factory::Create()->IsExtensionForceInstalled( - &profile_, kExtensionId)); - - // Make sure IsExtensionForceInstalled() doesn't return true blindly. - EXPECT_FALSE(ApiGuardDelegate::Factory::Create()->IsExtensionForceInstalled( - &profile_, "alnedpmllcfpgldkagbfbjkloonjlfjb")); -} - -} // namespace chromeos
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/base_telemetry_extension_api_guard_function.cc b/chrome/browser/chromeos/extensions/telemetry/api/base_telemetry_extension_api_guard_function.cc index a65e542..d6286e4 100644 --- a/chrome/browser/chromeos/extensions/telemetry/api/base_telemetry_extension_api_guard_function.cc +++ b/chrome/browser/chromeos/extensions/telemetry/api/base_telemetry_extension_api_guard_function.cc
@@ -4,23 +4,18 @@ #include "chrome/browser/chromeos/extensions/telemetry/api/base_telemetry_extension_api_guard_function.h" -#include <memory> #include <string> #include "base/strings/stringprintf.h" -#include "chrome/browser/chromeos/extensions/telemetry/api/api_guard_delegate.h" #include "chrome/browser/chromeos/extensions/telemetry/api/hardware_info_delegate.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/common/chromeos/extensions/chromeos_system_extension_info.h" -#include "components/user_manager/user.h" #include "components/user_manager/user_manager.h" #include "content/public/browser/web_contents.h" #include "extensions/browser/extension_function.h" -#include "extensions/browser/extension_system.h" -#include "extensions/browser/management_policy.h" #include "extensions/common/manifest_handlers/externally_connectable.h" #include "url/gurl.h" @@ -33,19 +28,7 @@ ExtensionFunction::ResponseAction BaseTelemetryExtensionApiGuardFunction::Run() { - // As agreed with the privacy team, a user can access telemetry APIs in one of - // the following cases: - // 1. The user is managed and the extension was force-installed via policy. - // 2. The user is the device owner. - if (user_manager::UserManager::Get()->GetActiveUser()->IsAffiliated()) { - if (!ApiGuardDelegate::Factory::Create()->IsExtensionForceInstalled( - browser_context(), extension_id())) { - return RespondNow(Error( - base::StringPrintf("Unauthorized access to chrome.%s. " - "This extension is not installed by the admin", - name()))); - } - } else if (!user_manager::UserManager::Get()->IsCurrentUserOwner()) { + if (!user_manager::UserManager::Get()->IsCurrentUserOwner()) { return RespondNow(Error( base::StringPrintf("Unauthorized access to chrome.%s. " "This extension is not run by the device owner",
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/base_telemetry_extension_api_guard_function_browsertest.cc b/chrome/browser/chromeos/extensions/telemetry/api/base_telemetry_extension_api_guard_function_browsertest.cc index 35faec9..a00bdb1 100644 --- a/chrome/browser/chromeos/extensions/telemetry/api/base_telemetry_extension_api_guard_function_browsertest.cc +++ b/chrome/browser/chromeos/extensions/telemetry/api/base_telemetry_extension_api_guard_function_browsertest.cc
@@ -2,17 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include <memory> - #include "base/strings/string_util.h" #include "chrome/browser/ash/login/users/fake_chrome_user_manager.h" -#include "chrome/browser/chromeos/extensions/telemetry/api/api_guard_delegate.h" #include "chrome/browser/chromeos/extensions/telemetry/api/base_telemetry_extension_browser_test.h" -#include "chrome/browser/chromeos/extensions/telemetry/api/fake_api_guard_delegate.h" #include "chrome/browser/chromeos/extensions/telemetry/api/fake_hardware_info_delegate.h" #include "components/user_manager/user_manager.h" #include "content/public/test/browser_test.h" -#include "extensions/browser/test_management_policy.h" #include "testing/gtest/include/gtest/gtest.h" namespace chromeos { @@ -160,7 +155,8 @@ IN_PROC_BROWSER_TEST_P(TelemetryExtensionApiGuardBrowserTest, ActiveUserNotOwner) { // Make sure that current user is not a device owner. - auto* const user_manager = GetFakeUserManager(); + auto* const user_manager = + static_cast<FakeChromeUserManager*>(user_manager::UserManager::Get()); const AccountId regular_user = AccountId::FromUserEmail("regular@gmail.com"); user_manager->AddUser(regular_user); user_manager->SetOwnerId(regular_user); @@ -183,33 +179,8 @@ INSTANTIATE_TEST_SUITE_P( All, TelemetryExtensionApiGuardBrowserTest, - testing::Combine( - testing::Values(false), - testing::ValuesIn( - BaseTelemetryExtensionBrowserTest::kAllExtensionInfoTestParams))); - -using TelemetryExtensionApiGuardManagedUserNotPolicyInstalledExtensionBrowserTest = - BaseTelemetryExtensionBrowserTest; - -IN_PROC_BROWSER_TEST_P( - TelemetryExtensionApiGuardManagedUserNotPolicyInstalledExtensionBrowserTest, - AffiliatedUserNotPolicyInstalledExtension) { - // Make sure that ApiGuardDelegate::IsExtensionForceInstalled() returns false. - api_guard_delegate_factory_ = std::make_unique<FakeApiGuardDelegate::Factory>( - /*is_extension_force_installed=*/false); - ApiGuardDelegate::Factory::SetForTesting(api_guard_delegate_factory_.get()); - - CreateExtensionAndRunServiceWorker( - GetServiceWorkerForError("This extension is not installed by the admin")); -} - -INSTANTIATE_TEST_SUITE_P( - All, - TelemetryExtensionApiGuardManagedUserNotPolicyInstalledExtensionBrowserTest, - testing::Combine( - testing::Values(true), - testing::ValuesIn( - BaseTelemetryExtensionBrowserTest::kAllExtensionInfoTestParams))); + testing::ValuesIn( + BaseTelemetryExtensionBrowserTest::kAllExtensionInfoTestParams)); class TelemetryExtensionApiGuardWithoutPwaBrowserTest : public BaseTelemetryExtensionBrowserTest { @@ -234,9 +205,7 @@ INSTANTIATE_TEST_SUITE_P( All, TelemetryExtensionApiGuardWithoutPwaBrowserTest, - testing::Combine( - testing::Bool(), - testing::ValuesIn( - BaseTelemetryExtensionBrowserTest::kAllExtensionInfoTestParams))); + testing::ValuesIn( + BaseTelemetryExtensionBrowserTest::kAllExtensionInfoTestParams)); } // namespace chromeos
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/base_telemetry_extension_browser_test.cc b/chrome/browser/chromeos/extensions/telemetry/api/base_telemetry_extension_browser_test.cc index 501e98e..4f5295e 100644 --- a/chrome/browser/chromeos/extensions/telemetry/api/base_telemetry_extension_browser_test.cc +++ b/chrome/browser/chromeos/extensions/telemetry/api/base_telemetry_extension_browser_test.cc
@@ -14,17 +14,11 @@ #include "base/location.h" #include "base/strings/stringprintf.h" #include "chrome/browser/ash/login/users/fake_chrome_user_manager.h" -#include "chrome/browser/chromeos/extensions/telemetry/api/api_guard_delegate.h" -#include "chrome/browser/chromeos/extensions/telemetry/api/fake_api_guard_delegate.h" #include "chrome/browser/chromeos/extensions/telemetry/api/fake_hardware_info_delegate.h" #include "chrome/browser/chromeos/extensions/telemetry/api/hardware_info_delegate.h" #include "chrome/common/chromeos/extensions/chromeos_system_extension_info.h" #include "chrome/test/base/ui_test_utils.h" -#include "components/user_manager/scoped_user_manager.h" -#include "components/user_manager/user.h" #include "components/user_manager/user_manager.h" -#include "extensions/browser/extension_system.h" -#include "extensions/browser/management_policy.h" #include "extensions/test/result_catcher.h" #include "extensions/test/test_extension_dir.h" #include "net/dns/mock_host_resolver.h" @@ -70,26 +64,11 @@ void BaseTelemetryExtensionBrowserTest::SetUpOnMainThread() { extensions::ExtensionBrowserTest::SetUpOnMainThread(); - if (is_user_affiliated()) { - // Make sure that ApiGuardDelegate::IsExtensionForceInstalled returns true. - api_guard_delegate_factory_ = - std::make_unique<FakeApiGuardDelegate::Factory>( - /*is_extension_force_installed=*/true); - ApiGuardDelegate::Factory::SetForTesting(api_guard_delegate_factory_.get()); - } - - // Must be initialized before dealing with UserManager. - user_manager_enabler_ = std::make_unique<user_manager::ScopedUserManager>( - std::make_unique<ash::FakeChromeUserManager>()); - // Add a new user and make it active. - auto* const user_manager = GetFakeUserManager(); - const AccountId account_id = AccountId::FromUserEmail("user@example.com"); - user_manager->AddUserWithAffiliation(account_id, - /*is_affiliated=*/is_user_affiliated()); - user_manager->LoginUser(account_id); - user_manager->SwitchActiveUser(account_id); - if (!is_user_affiliated()) - user_manager->SetOwnerId(account_id); + // Make sure that current user is a device owner. + auto* const user_manager = + static_cast<FakeChromeUserManager*>(user_manager::UserManager::Get()); + user_manager->SetOwnerId( + user_manager::UserManager::Get()->GetActiveUser()->GetAccountId()); // Make sure device OEM is allowlisted. hardware_info_delegate_factory_ = @@ -100,39 +79,18 @@ if (should_open_pwa_ui_) { host_resolver()->AddRule("*", "127.0.0.1"); // Make sure PWA UI is open. - pwa_page_rfh_ = ui_test_utils::NavigateToURL( - browser(), GURL(extension_info_params().pwa_page_url)); + pwa_page_rfh_ = + ui_test_utils::NavigateToURL(browser(), GURL(GetParam().pwa_page_url)); ASSERT_TRUE(pwa_page_rfh_); } } -void BaseTelemetryExtensionBrowserTest::TearDownOnMainThread() { - user_manager_enabler_.reset(); - - extensions::ExtensionBrowserTest::TearDownOnMainThread(); -} - -bool BaseTelemetryExtensionBrowserTest::is_user_affiliated() const { - return std::get<0>(GetParam()); -} -ExtensionInfoTestParams -BaseTelemetryExtensionBrowserTest::extension_info_params() const { - return std::get<1>(GetParam()); -} - -ash::FakeChromeUserManager* -BaseTelemetryExtensionBrowserTest::GetFakeUserManager() const { - return static_cast<ash::FakeChromeUserManager*>( - user_manager::UserManager::Get()); -} - void BaseTelemetryExtensionBrowserTest::CreateExtensionAndRunServiceWorker( const std::string& service_worker_content) { // Must outlive the extension. extensions::TestExtensionDir test_dir; test_dir.WriteManifest( - GetManifestFile(extension_info_params().public_key, - extension_info_params().matches_origin)); + GetManifestFile(GetParam().public_key, GetParam().matches_origin)); test_dir.WriteFile(FILE_PATH_LITERAL("sw.js"), service_worker_content); test_dir.WriteFile(FILE_PATH_LITERAL("options.html"), "");
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/base_telemetry_extension_browser_test.h b/chrome/browser/chromeos/extensions/telemetry/api/base_telemetry_extension_browser_test.h index 58843fc..3c13cf7 100644 --- a/chrome/browser/chromeos/extensions/telemetry/api/base_telemetry_extension_browser_test.h +++ b/chrome/browser/chromeos/extensions/telemetry/api/base_telemetry_extension_browser_test.h
@@ -5,21 +5,12 @@ #ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_TELEMETRY_API_BASE_TELEMETRY_EXTENSION_BROWSER_TEST_H_ #define CHROME_BROWSER_CHROMEOS_EXTENSIONS_TELEMETRY_API_BASE_TELEMETRY_EXTENSION_BROWSER_TEST_H_ -#include <memory> #include <string> -#include <tuple> #include <vector> -#include "chrome/browser/chromeos/extensions/telemetry/api/api_guard_delegate.h" #include "chrome/browser/chromeos/extensions/telemetry/api/hardware_info_delegate.h" #include "chrome/browser/extensions/extension_browsertest.h" -#include "components/user_manager/scoped_user_manager.h" #include "content/public/browser/render_frame_host.h" -#include "extensions/browser/test_management_policy.h" - -namespace ash { -class FakeChromeUserManager; -} namespace chromeos { @@ -37,17 +28,9 @@ const std::string matches_origin; }; -// The base test class for all TelemetryExtension browser tests. All tests are -// parameterized with the following parameters: -// * |is_user_affiliated| - a flag used to setup the testing environment for two -// scenarios: affiliated and normal user. -// * |extension_info_params| - parameters of the extension under test. -// Note: All tests must be defined using the IN_PROC_BROWSER_TEST_P macro and -// must use the INSTANTIATE_TEST_SUITE_P macro to instantiate the test suite. class BaseTelemetryExtensionBrowserTest : public extensions::ExtensionBrowserTest, - public testing::WithParamInterface< - std::tuple<bool, ExtensionInfoTestParams>> { + public testing::WithParamInterface<ExtensionInfoTestParams> { public: static const std::vector<ExtensionInfoTestParams> kAllExtensionInfoTestParams; @@ -61,25 +44,18 @@ // BrowserTestBase: void SetUpOnMainThread() override; - void TearDownOnMainThread() override; protected: - bool is_user_affiliated() const; - ExtensionInfoTestParams extension_info_params() const; - ash::FakeChromeUserManager* GetFakeUserManager() const; void CreateExtensionAndRunServiceWorker( const std::string& service_worker_content); virtual std::string GetManifestFile(const std::string& public_key, const std::string& matches_origin); - std::unique_ptr<ApiGuardDelegate::Factory> api_guard_delegate_factory_; std::unique_ptr<HardwareInfoDelegate::Factory> hardware_info_delegate_factory_; + bool should_open_pwa_ui_ = true; content::RenderFrameHost* pwa_page_rfh_ = nullptr; - - private: - std::unique_ptr<user_manager::ScopedUserManager> user_manager_enabler_; }; } // namespace chromeos
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api_browsertest.cc b/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api_browsertest.cc index d9d26dc..6d23302 100644 --- a/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api_browsertest.cc +++ b/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api_browsertest.cc
@@ -297,9 +297,7 @@ INSTANTIATE_TEST_SUITE_P( All, TelemetryExtensionDiagnosticsApiBrowserTest, - testing::Combine( - testing::Bool(), - testing::ValuesIn( - BaseTelemetryExtensionBrowserTest::kAllExtensionInfoTestParams))); + testing::ValuesIn( + BaseTelemetryExtensionBrowserTest::kAllExtensionInfoTestParams)); } // namespace chromeos
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/fake_api_guard_delegate.cc b/chrome/browser/chromeos/extensions/telemetry/api/fake_api_guard_delegate.cc deleted file mode 100644 index 159908b..0000000 --- a/chrome/browser/chromeos/extensions/telemetry/api/fake_api_guard_delegate.cc +++ /dev/null
@@ -1,40 +0,0 @@ -// Copyright 2021 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/extensions/telemetry/api/fake_api_guard_delegate.h" - -#include <memory> -#include <string> - -#include "base/memory/ptr_util.h" - -namespace content { -class BrowserContext; -} - -namespace chromeos { - -FakeApiGuardDelegate::Factory::Factory(bool is_extension_force_installed) - : is_extension_force_installed_(is_extension_force_installed) {} - -FakeApiGuardDelegate::Factory::~Factory() = default; - -std::unique_ptr<ApiGuardDelegate> -FakeApiGuardDelegate::Factory::CreateInstance() { - return base::WrapUnique<ApiGuardDelegate>( - new FakeApiGuardDelegate(is_extension_force_installed_)); -} - -FakeApiGuardDelegate::FakeApiGuardDelegate(bool is_extension_force_installed) - : is_extension_force_installed_(is_extension_force_installed) {} - -FakeApiGuardDelegate::~FakeApiGuardDelegate() = default; - -bool FakeApiGuardDelegate::IsExtensionForceInstalled( - content::BrowserContext* context, - const std::string& extension_id) { - return is_extension_force_installed_; -} - -} // namespace chromeos
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/fake_api_guard_delegate.h b/chrome/browser/chromeos/extensions/telemetry/api/fake_api_guard_delegate.h deleted file mode 100644 index 20b7bd1..0000000 --- a/chrome/browser/chromeos/extensions/telemetry/api/fake_api_guard_delegate.h +++ /dev/null
@@ -1,51 +0,0 @@ -// Copyright 2021 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_EXTENSIONS_TELEMETRY_API_FAKE_API_GUARD_DELEGATE_H_ -#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_TELEMETRY_API_FAKE_API_GUARD_DELEGATE_H_ - -#include <memory> -#include <string> - -#include "chrome/browser/chromeos/extensions/telemetry/api/api_guard_delegate.h" - -namespace content { -class BrowserContext; -} - -namespace chromeos { - -class FakeApiGuardDelegate : public ApiGuardDelegate { - public: - class Factory : public ApiGuardDelegate::Factory { - public: - explicit Factory(bool is_extension_force_installed); - ~Factory() override; - - protected: - // ApiGuardDelegate::Factory: - std::unique_ptr<ApiGuardDelegate> CreateInstance() override; - - private: - bool is_extension_force_installed_; - }; - - FakeApiGuardDelegate(const FakeApiGuardDelegate&) = delete; - FakeApiGuardDelegate& operator=(const FakeApiGuardDelegate&) = delete; - ~FakeApiGuardDelegate() override; - - // ApiGuardDelegate: - bool IsExtensionForceInstalled(content::BrowserContext* context, - const std::string& extension_id) override; - - protected: - explicit FakeApiGuardDelegate(bool is_extension_force_installed); - - private: - bool is_extension_force_installed_; -}; - -} // namespace chromeos - -#endif // CHROME_BROWSER_CHROMEOS_EXTENSIONS_TELEMETRY_API_FAKE_API_GUARD_DELEGATE_H_
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/telemetry_api.cc b/chrome/browser/chromeos/extensions/telemetry/api/telemetry_api.cc index 55cf1c9..ab9fb700 100644 --- a/chrome/browser/chromeos/extensions/telemetry/api/telemetry_api.cc +++ b/chrome/browser/chromeos/extensions/telemetry/api/telemetry_api.cc
@@ -54,7 +54,7 @@ std::make_unique<std::string>(vpd_info->sku_number.value()); } - // Protect accessing the serial number by a permission. + // Protect accessing the serial number by a runtime permission. if (extension()->permissions_data()->HasAPIPermission( extensions::mojom::APIPermissionID::kChromeOSTelemetrySerialNumber) && vpd_info->serial_number.has_value()) { @@ -71,7 +71,7 @@ OsTelemetryGetOemDataFunction::~OsTelemetryGetOemDataFunction() = default; void OsTelemetryGetOemDataFunction::RunIfAllowed() { - // Protect accessing the serial number by a permission. + // Protect accessing the serial number by a runtime permission. if (!extension()->permissions_data()->HasAPIPermission( extensions::mojom::APIPermissionID::kChromeOSTelemetrySerialNumber)) { Respond(
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/telemetry_api_browsertest.cc b/chrome/browser/chromeos/extensions/telemetry/api/telemetry_api_browsertest.cc index e8e4782d..767f51ad 100644 --- a/chrome/browser/chromeos/extensions/telemetry/api/telemetry_api_browsertest.cc +++ b/chrome/browser/chromeos/extensions/telemetry/api/telemetry_api_browsertest.cc
@@ -125,10 +125,8 @@ INSTANTIATE_TEST_SUITE_P( All, TelemetryExtensionTelemetryApiBrowserTest, - testing::Combine( - testing::Bool(), - testing::ValuesIn( - BaseTelemetryExtensionBrowserTest::kAllExtensionInfoTestParams))); + testing::ValuesIn( + BaseTelemetryExtensionBrowserTest::kAllExtensionInfoTestParams)); class TelemetryExtensionTelemetryApiWithoutSerialNumberBrowserTest : public TelemetryExtensionTelemetryApiBrowserTest { @@ -230,9 +228,7 @@ INSTANTIATE_TEST_SUITE_P( All, TelemetryExtensionTelemetryApiWithoutSerialNumberBrowserTest, - testing::Combine( - testing::Bool(), - testing::ValuesIn( - BaseTelemetryExtensionBrowserTest::kAllExtensionInfoTestParams))); + testing::ValuesIn( + BaseTelemetryExtensionBrowserTest::kAllExtensionInfoTestParams)); } // namespace chromeos
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/telemetry_extension_capabilities_browser_test.cc b/chrome/browser/chromeos/extensions/telemetry/api/telemetry_extension_capabilities_browser_test.cc index 5507455..386fce0 100644 --- a/chrome/browser/chromeos/extensions/telemetry/api/telemetry_extension_capabilities_browser_test.cc +++ b/chrome/browser/chromeos/extensions/telemetry/api/telemetry_extension_capabilities_browser_test.cc
@@ -34,12 +34,9 @@ // Must outlive the extension. extensions::TestExtensionDir test_dir_receiver; test_dir_receiver.WriteManifest( - GetManifestFile(extension_info_params().public_key, - extension_info_params().matches_origin)); + GetManifestFile(GetParam().public_key, GetParam().matches_origin)); test_dir_receiver.WriteFile(FILE_PATH_LITERAL("options.html"), ""); - test_dir_receiver.WriteFile( - "sw.js", - base::StringPrintf(R"( + test_dir_receiver.WriteFile("sw.js", base::StringPrintf(R"( chrome.test.runTests([ function runtimeOnMessageExternal() { chrome.runtime.onMessageExternal.addListener( @@ -51,8 +48,7 @@ chrome.test.sendMessage('ready'); } ]); - )", - extension_info_params().pwa_page_url.c_str())); + )", GetParam().pwa_page_url.c_str())); // Load and run the extenion (chromeos_system_extension). const extensions::Extension* receiver = @@ -70,7 +66,7 @@ // Note: |pwa_page_rfh_| is the RenderFrameHost for |kPwaPageUrlString| page. const auto script = base::StringPrintf( "window.chrome.runtime.sendMessage('%s', 'ping', (result) => {});", - extension_info_params().extension_id.c_str()); + GetParam().extension_id.c_str()); pwa_page_rfh_->ExecuteJavaScriptForTests(base::ASCIIToUTF16(script), base::NullCallback()); @@ -89,8 +85,7 @@ // Must outlive the extension. extensions::TestExtensionDir test_dir; test_dir.WriteManifest( - GetManifestFile(extension_info_params().public_key, - extension_info_params().matches_origin)); + GetManifestFile(GetParam().public_key, GetParam().matches_origin)); test_dir.WriteFile(FILE_PATH_LITERAL("options.html"), "<script>chrome.test.sendMessage('done')</script>"); test_dir.WriteFile("sw.js", "chrome.test.sendMessage('ready');"); @@ -119,9 +114,7 @@ INSTANTIATE_TEST_SUITE_P( All, TelemetryExtensionBrowserTest, - testing::Combine( - testing::Bool(), - testing::ValuesIn( - BaseTelemetryExtensionBrowserTest::kAllExtensionInfoTestParams))); + testing::ValuesIn( + BaseTelemetryExtensionBrowserTest::kAllExtensionInfoTestParams)); } // namespace chromeos
diff --git a/chrome/browser/extensions/api/image_writer_private/operation_chromeos.cc b/chrome/browser/extensions/api/image_writer_private/operation_chromeos.cc index b3724a6a..4c9172b0 100644 --- a/chrome/browser/extensions/api/image_writer_private/operation_chromeos.cc +++ b/chrome/browser/extensions/api/image_writer_private/operation_chromeos.cc
@@ -18,7 +18,7 @@ namespace extensions { namespace image_writer { -using chromeos::disks::DiskMountManager; +using ::ash::disks::DiskMountManager; using chromeos::ImageBurnerClient; using content::BrowserThread;
diff --git a/chrome/browser/extensions/api/image_writer_private/removable_storage_provider_chromeos.cc b/chrome/browser/extensions/api/image_writer_private/removable_storage_provider_chromeos.cc index bbac466b..8717087 100644 --- a/chrome/browser/extensions/api/image_writer_private/removable_storage_provider_chromeos.cc +++ b/chrome/browser/extensions/api/image_writer_private/removable_storage_provider_chromeos.cc
@@ -13,8 +13,8 @@ const char kUnknownSDDiskModel[] = "SD Card"; const char kUnknownUSBDiskModel[] = "USB Drive"; -using chromeos::disks::Disk; -using chromeos::disks::DiskMountManager; +using ::ash::disks::Disk; +using ::ash::disks::DiskMountManager; // The Chrome OS implementation takes advantage of the Chrome OS // DiskMountManager. This does not expose whether the device is a removable or
diff --git a/chrome/browser/extensions/api/image_writer_private/removable_storage_provider_chromeos_unittest.cc b/chrome/browser/extensions/api/image_writer_private/removable_storage_provider_chromeos_unittest.cc index df4bdb3..83ad5b1 100644 --- a/chrome/browser/extensions/api/image_writer_private/removable_storage_provider_chromeos_unittest.cc +++ b/chrome/browser/extensions/api/image_writer_private/removable_storage_provider_chromeos_unittest.cc
@@ -33,13 +33,13 @@ public: RemovableStorageProviderChromeOsUnitTest() {} void SetUp() override { - disk_mount_manager_mock_ = new chromeos::disks::MockDiskMountManager(); - chromeos::disks::DiskMountManager::InitializeForTesting( + disk_mount_manager_mock_ = new ash::disks::MockDiskMountManager(); + ash::disks::DiskMountManager::InitializeForTesting( disk_mount_manager_mock_); disk_mount_manager_mock_->SetupDefaultReplies(); } - void TearDown() override { chromeos::disks::DiskMountManager::Shutdown(); } + void TearDown() override { ash::disks::DiskMountManager::Shutdown(); } void DevicesCallback(scoped_refptr<StorageDeviceList> devices) { devices_ = devices; @@ -66,9 +66,9 @@ bool is_parent, bool has_media, bool on_boot_device) { - chromeos::disks::DiskMountManager::MountPointInfo mount_info( + ash::disks::DiskMountManager::MountPointInfo mount_info( device_path, kMountPath, chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE); + ash::disks::MOUNT_CONDITION_NONE); disk_mount_manager_mock_->CreateDiskEntryForMountDevice( mount_info, kDeviceId, kDeviceName, vendor_name, product_name, device_type, kDeviceSize, is_parent, has_media, on_boot_device, @@ -102,7 +102,7 @@ } content::BrowserTaskEnvironment task_environment_; - chromeos::disks::MockDiskMountManager* disk_mount_manager_mock_; + ash::disks::MockDiskMountManager* disk_mount_manager_mock_; scoped_refptr<StorageDeviceList> devices_; };
diff --git a/chrome/browser/extensions/api/image_writer_private/test_utils.cc b/chrome/browser/extensions/api/image_writer_private/test_utils.cc index 22e363f..9c6ff0f0 100644 --- a/chrome/browser/extensions/api/image_writer_private/test_utils.cc +++ b/chrome/browser/extensions/api/image_writer_private/test_utils.cc
@@ -255,13 +255,13 @@ } FakeDiskMountManager* disk_manager = new FakeDiskMountManager(); - chromeos::disks::DiskMountManager::InitializeForTesting(disk_manager); + ash::disks::DiskMountManager::InitializeForTesting(disk_manager); // Adds a disk entry for test_device_path_ with the same device and file path. disk_manager->CreateDiskEntryForMountDevice( - chromeos::disks::DiskMountManager::MountPointInfo( + ash::disks::DiskMountManager::MountPointInfo( test_device_path_.value(), "/dummy/mount", - chromeos::MOUNT_TYPE_DEVICE, chromeos::disks::MOUNT_CONDITION_NONE), + chromeos::MOUNT_TYPE_DEVICE, ash::disks::MOUNT_CONDITION_NONE), "device_id", "device_label", "Vendor", "Product", chromeos::DEVICE_TYPE_USB, kTestFileSize, true, true, true, false, kTestFileSystemType); @@ -279,7 +279,7 @@ chromeos::ConciergeClient::Shutdown(); chromeos::DBusThreadManager::Shutdown(); } - chromeos::disks::DiskMountManager::Shutdown(); + ash::disks::DiskMountManager::Shutdown(); #else ImageWriterUtilityClient::SetFactoryForTesting(nullptr); #endif
diff --git a/chrome/browser/extensions/api/image_writer_private/test_utils.h b/chrome/browser/extensions/api/image_writer_private/test_utils.h index 6a3037d9..68970d4c 100644 --- a/chrome/browser/extensions/api/image_writer_private/test_utils.h +++ b/chrome/browser/extensions/api/image_writer_private/test_utils.h
@@ -64,7 +64,7 @@ #if BUILDFLAG(IS_CHROMEOS_ASH) // A fake for the DiskMountManager that will successfully call the unmount // callback. -class FakeDiskMountManager : public chromeos::disks::MockDiskMountManager { +class FakeDiskMountManager : public ash::disks::MockDiskMountManager { public: FakeDiskMountManager(); ~FakeDiskMountManager() override;
diff --git a/chrome/browser/extensions/api/input_ime/input_ime_api.h b/chrome/browser/extensions/api/input_ime/input_ime_api.h index 69eedee..3411048c 100644 --- a/chrome/browser/extensions/api/input_ime/input_ime_api.h +++ b/chrome/browser/extensions/api/input_ime/input_ime_api.h
@@ -53,6 +53,7 @@ void OnFocus(const std::string& engine_id, int context_id, const IMEEngineHandlerInterface::InputContext& context) override; + void OnTouch(ui::EventPointerType pointerType) override {} void OnBlur(const std::string& engine_id, int context_id) override; void OnKeyEvent( const std::string& component_id,
diff --git a/chrome/browser/extensions/api/input_ime/input_ime_api_chromeos.cc b/chrome/browser/extensions/api/input_ime/input_ime_api_chromeos.cc index 42754c5..81de37a 100644 --- a/chrome/browser/extensions/api/input_ime/input_ime_api_chromeos.cc +++ b/chrome/browser/extensions/api/input_ime/input_ime_api_chromeos.cc
@@ -296,6 +296,34 @@ ImeObserver::OnFocus(engine_id, context_id, context); } + void OnTouch(ui::EventPointerType pointerType) override { + if (extension_id_.empty() || + !HasListener(input_method_private::OnTouch::kEventName)) + return; + + std::string pointer = ""; + switch (pointerType) { + case ui::EventPointerType::kPen: + pointer = "pen"; + break; + case ui::EventPointerType::kMouse: + pointer = "mouse"; + break; + case ui::EventPointerType::kTouch: + pointer = "touch"; + break; + default: + pointer = "other"; + break; + } + + auto args(input_method_private::OnTouch::Create( + input_method_private::ParseFocusReason(pointer))); + + DispatchEventToExtension(extensions::events::INPUT_METHOD_PRIVATE_ON_TOUCH, + input_method_private::OnTouch::kEventName, + std::move(args)); + } void OnAssistiveWindowButtonClicked( const ui::ime::AssistiveWindowButton& button) override {
diff --git a/chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc b/chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc index 1dfeec0..c2cd4e63 100644 --- a/chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc +++ b/chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc
@@ -439,26 +439,12 @@ if (extension->is_hosted_app()) return extension->id() != kWebStoreAppId; - // Some special case extension URLs must be allowed to load in any guest. Note - // that CanCommitURL may be called for validating origins as well, so do not - // enforce a path comparison in the special cases unless there is a real path - // (more than just "/"). - // TODO(creis): Remove this call when bugs 688565 and 778021 are resolved. - base::StringPiece url_path = url.path_piece(); - bool is_guest = - WebViewRendererState::GetInstance()->IsGuest(process_host->GetID()); - if (is_guest && - url_request_util::AllowSpecialCaseExtensionURLInGuest( - extension, url_path.length() > 1 - ? absl::make_optional<base::StringPiece>(url_path) - : absl::nullopt)) { - return true; - } - // Platform app URLs may commit in their own guest processes, when they have // the webview permission. (Some extensions are allowlisted for webviews as // well, but their pages load in their own extension process and are allowed // through above.) + bool is_guest = + WebViewRendererState::GetInstance()->IsGuest(process_host->GetID()); if (is_guest) { std::string owner_extension_id; int owner_process_id = -1;
diff --git a/chrome/browser/extensions/chromeos_component_extensions_browsertest.cc b/chrome/browser/extensions/chromeos_component_extensions_browsertest.cc deleted file mode 100644 index 5466f3b..0000000 --- a/chrome/browser/extensions/chromeos_component_extensions_browsertest.cc +++ /dev/null
@@ -1,23 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/extensions/extension_browsertest.h" -#include "content/public/test/browser_test.h" -#include "extensions/browser/extension_registry.h" - -namespace extensions { - -using ComponentExtensionsTest = ExtensionBrowserTest; - -// Tests that the mobile_app component extension loads. It would be nice to get -// rid of this (see https://crbug.com/835391), but for now let's at least make -// sure it is added correctly. -IN_PROC_BROWSER_TEST_F(ComponentExtensionsTest, LoadsMobileAppExtension) { - constexpr char kMobileActivationExtensionId[] = - "iadeocfgjdjdmpenejdbfeaocpbikmab"; - EXPECT_TRUE(ExtensionRegistry::Get(profile())->enabled_extensions().Contains( - kMobileActivationExtensionId)); -} - -} // namespace extensions
diff --git a/chrome/browser/extensions/component_extensions_allowlist/allowlist.cc b/chrome/browser/extensions/component_extensions_allowlist/allowlist.cc index ad71126..3c7c154 100644 --- a/chrome/browser/extensions/component_extensions_allowlist/allowlist.cc +++ b/chrome/browser/extensions/component_extensions_allowlist/allowlist.cc
@@ -84,7 +84,6 @@ case IDR_FILEMANAGER_MANIFEST: case IDR_IMAGE_LOADER_MANIFEST: case IDR_KEYBOARD_MANIFEST: - case IDR_MOBILE_MANIFEST: case IDR_WALLPAPERMANAGER_MANIFEST: #if BUILDFLAG(GOOGLE_CHROME_BRANDING) case IDR_HELP_MANIFEST:
diff --git a/chrome/browser/extensions/component_loader.cc b/chrome/browser/extensions/component_loader.cc index 8c284898..0545623 100644 --- a/chrome/browser/extensions/component_loader.cc +++ b/chrome/browser/extensions/component_loader.cc
@@ -430,8 +430,6 @@ // Do not add component extensions that have background pages here -- add them // to AddDefaultComponentExtensionsWithBackgroundPages. #if BUILDFLAG(IS_CHROMEOS_ASH) - Add(IDR_MOBILE_MANIFEST, - base::FilePath(FILE_PATH_LITERAL("/usr/share/chromeos-assets/mobile"))); #if BUILDFLAG(GOOGLE_CHROME_BRANDING) if (browser_defaults::enable_help_app) {
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 9c689ff0..a02c390 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -2194,11 +2194,6 @@ "When the scrollable-tabstrip flag is enabled, this enables buttons to " "permanently appear on the tabstrip."; -const char kForceDisableStackedTabsName[] = "Force Disable Stacked Tabs"; -const char kForceDisableStackedTabsDescription[] = - "Prevents the tabstrip from " - "entering stacked tabs mode, for any reason."; - const char kScrollUnificationName[] = "Scroll Unification"; const char kScrollUnificationDescription[] = "Refactoring project that eliminates scroll handling code from Blink. "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 08fe7661..a4c4e1f 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -1256,9 +1256,6 @@ extern const char kScrollableTabStripButtonsName[]; extern const char kScrollableTabStripButtonsDescription[]; -extern const char kForceDisableStackedTabsName[]; -extern const char kForceDisableStackedTabsDescription[]; - extern const char kScrollUnificationName[]; extern const char kScrollUnificationDescription[];
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc index ac018c0f..7fb28d6 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -185,6 +185,7 @@ &kCCTExternalLinkHandling, &kCCTIncognito, &kCCTIncognitoAvailableToThirdParty, + &kCCTNewDownloadTab, &kCCTPostMessageAPI, &kCCTRedirectPreconnect, &kCCTRemoveRemoteViewIds, @@ -339,6 +340,7 @@ &password_manager::features::kLeakDetectionUnauthenticated, &password_manager::features::kPasswordScriptsFetching, &password_manager::features::kRecoverFromNeverSaveAndroid, + &password_manager::features::kUnifiedCredentialManagerDryRun, &password_manager::features::kUnifiedPasswordManagerAndroid, &performance_hints::features::kContextMenuPerformanceInfo, &permissions::features::kRevertDSEAutomaticPermissions, @@ -451,6 +453,9 @@ const base::Feature kCCTClientDataHeader{"CCTClientDataHeader", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kCCTNewDownloadTab{"CCTNewDownloadTab", + base::FEATURE_DISABLED_BY_DEFAULT}; + const base::Feature kCCTExternalLinkHandling{"CCTExternalLinkHandling", base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h index a671ab8..1aba694 100644 --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h
@@ -37,6 +37,7 @@ extern const base::Feature kCCTExternalLinkHandling; extern const base::Feature kCCTIncognito; extern const base::Feature kCCTIncognitoAvailableToThirdParty; +extern const base::Feature kCCTNewDownloadTab; extern const base::Feature kCCTPostMessageAPI; extern const base::Feature kCCTRedirectPreconnect; extern const base::Feature kCCTRemoveRemoteViewIds;
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java index 9f3d8dd..420b9e07 100644 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -253,6 +253,7 @@ public static final String CCT_INCOGNITO_AVAILABLE_TO_THIRD_PARTY = "CCTIncognitoAvailableToThirdParty"; public static final String CCT_EXTERNAL_LINK_HANDLING = "CCTExternalLinkHandling"; + public static final String CCT_NEW_DOWNLOAD_TAB = "CCTNewDownloadTab"; public static final String CCT_POST_MESSAGE_API = "CCTPostMessageAPI"; public static final String CCT_REDIRECT_PRECONNECT = "CCTRedirectPreconnect"; public static final String CCT_REMOVE_REMOTE_VIEW_IDS = "CCTRemoveRemoteViewIds"; @@ -537,6 +538,8 @@ public static final String TRUSTED_WEB_ACTIVITY_QUALITY_ENFORCEMENT_WARNING = "TrustedWebActivityQualityEnforcementWarning"; public static final String VIDEO_TUTORIALS = "VideoTutorials"; + public static final String UNIFIED_CREDENTIAL_MANAGER_DRY_RUN = + "UnifiedCredentialManagerDryRun"; public static final String UNIFIED_PASSWORD_MANAGER_ANDROID = "UnifiedPasswordManagerAndroid"; public static final String UPCOMING_SHARING_FEATURES = "UpcomingSharingFeatures"; public static final String UPDATE_NOTIFICATION_IMMEDIATE_SHOW_OPTION =
diff --git a/chrome/browser/lifetime/application_lifetime.cc b/chrome/browser/lifetime/application_lifetime.cc index e4227d8..87dab86 100644 --- a/chrome/browser/lifetime/application_lifetime.cc +++ b/chrome/browser/lifetime/application_lifetime.cc
@@ -25,7 +25,7 @@ #include "chrome/browser/download/download_core_service.h" #include "chrome/browser/lifetime/browser_close_manager.h" #include "chrome/browser/lifetime/browser_shutdown.h" -#include "chrome/browser/metrics/thread_watcher.h" +#include "chrome/browser/metrics/shutdown_watcher_helper.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/common/buildflags.h"
diff --git a/chrome/browser/media_galleries/media_galleries_preferences.cc b/chrome/browser/media_galleries/media_galleries_preferences.cc index cbed5bd..591d926 100644 --- a/chrome/browser/media_galleries/media_galleries_preferences.cc +++ b/chrome/browser/media_galleries/media_galleries_preferences.cc
@@ -340,11 +340,12 @@ bool GetMediaGalleryPermissionFromDictionary( const base::DictionaryValue* dict, MediaGalleryPermission* out_permission) { - std::string string_id; - if (dict->GetString(kMediaGalleryIdKey, &string_id) && - base::StringToUint64(string_id, &out_permission->pref_id) && - dict->GetBoolean(kMediaGalleryHasPermissionKey, - &out_permission->has_permission)) { + const std::string* string_id = dict->FindStringPath(kMediaGalleryIdKey); + absl::optional<bool> has_permission = + dict->FindBoolPath(kMediaGalleryHasPermissionKey); + if (string_id && base::StringToUint64(*string_id, &out_permission->pref_id) && + has_permission) { + out_permission->has_permission = *has_permission; return true; } NOTREACHED();
diff --git a/chrome/browser/metrics/shutdown_watcher_helper.cc b/chrome/browser/metrics/shutdown_watcher_helper.cc new file mode 100644 index 0000000..dfc8671 --- /dev/null +++ b/chrome/browser/metrics/shutdown_watcher_helper.cc
@@ -0,0 +1,80 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/metrics/shutdown_watcher_helper.h" + +#include "chrome/browser/metrics/thread_watcher_report_hang.h" +#include "chrome/common/channel_info.h" +#include "components/version_info/channel.h" + +// ShutdownWatcherHelper is not available on Android. +#if !defined(OS_ANDROID) + +namespace { + +// ShutdownWatchDogThread methods and members. +// +// Class for detecting hangs during shutdown. +class ShutdownWatchDogThread : public base::Watchdog { + public: + // Constructor specifies how long the ShutdownWatchDogThread will wait before + // alarming. + explicit ShutdownWatchDogThread(const base::TimeDelta& duration) + : base::Watchdog(duration, "Shutdown watchdog thread", true) {} + + ShutdownWatchDogThread(const ShutdownWatchDogThread&) = delete; + ShutdownWatchDogThread& operator=(const ShutdownWatchDogThread&) = delete; + + // Alarm is called if the time expires after an Arm() without someone calling + // Disarm(). We crash the browser if this method is called. + void Alarm() override { metrics::ShutdownHang(); } +}; + +} // namespace + +// ShutdownWatcherHelper methods and members. +// +// ShutdownWatcherHelper is a wrapper class for detecting hangs during +// shutdown. +ShutdownWatcherHelper::ShutdownWatcherHelper() + : shutdown_watchdog_(nullptr), + thread_id_(base::PlatformThread::CurrentId()) {} + +ShutdownWatcherHelper::~ShutdownWatcherHelper() { + DCHECK_EQ(thread_id_, base::PlatformThread::CurrentId()); + if (shutdown_watchdog_) { + shutdown_watchdog_->Disarm(); + delete shutdown_watchdog_; + shutdown_watchdog_ = nullptr; + } +} + +void ShutdownWatcherHelper::Arm(const base::TimeDelta& duration) { + DCHECK_EQ(thread_id_, base::PlatformThread::CurrentId()); + DCHECK(!shutdown_watchdog_); + shutdown_watchdog_ = + new ShutdownWatchDogThread(GetPerChannelTimeout(duration)); + shutdown_watchdog_->Arm(); +} + +// static +base::TimeDelta ShutdownWatcherHelper::GetPerChannelTimeout( + base::TimeDelta duration) { + base::TimeDelta actual_duration = duration; + + version_info::Channel channel = chrome::GetChannel(); + if (channel == version_info::Channel::STABLE) { + actual_duration *= 20; + } else if (channel == version_info::Channel::BETA) { + actual_duration *= 10; + } else if (channel == version_info::Channel::DEV) { + actual_duration *= 4; + } else { + actual_duration *= 2; + } + + return actual_duration; +} + +#endif // !defined(OS_ANDROID)
diff --git a/chrome/browser/metrics/shutdown_watcher_helper.h b/chrome/browser/metrics/shutdown_watcher_helper.h new file mode 100644 index 0000000..28e7eaa --- /dev/null +++ b/chrome/browser/metrics/shutdown_watcher_helper.h
@@ -0,0 +1,46 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +#ifndef CHROME_BROWSER_METRICS_SHUTDOWN_WATCHER_HELPER_H_ +#define CHROME_BROWSER_METRICS_SHUTDOWN_WATCHER_HELPER_H_ + +#include "base/threading/platform_thread.h" +#include "base/threading/watchdog.h" +#include "base/time/time.h" +#include "build/build_config.h" + +// ShutdownWatcherHelper is useless on Android because there is no shutdown, +// Chrome is always killed one way or another (swiped away in the task +// switcher, OOM-killed, etc.). +#if !defined(OS_ANDROID) +// This is a wrapper class for detecting hangs during shutdown. +class ShutdownWatcherHelper { + public: + // Create an empty holder for |shutdown_watchdog_|. + ShutdownWatcherHelper(); + + ShutdownWatcherHelper(const ShutdownWatcherHelper&) = delete; + ShutdownWatcherHelper& operator=(const ShutdownWatcherHelper&) = delete; + + // Destructor disarm's shutdown_watchdog_ so that alarm doesn't go off. + ~ShutdownWatcherHelper(); + + // Constructs ShutdownWatchDogThread which spawns a thread and starts timer. + // |duration| specifies how long it will wait before it calls alarm. + void Arm(const base::TimeDelta& duration); + + // Get the timeout after which a shutdown hang is detected, for the current + // channel. + static base::TimeDelta GetPerChannelTimeout(base::TimeDelta duration); + + private: + // shutdown_watchdog_ watches for hangs during shutdown. + base::Watchdog* shutdown_watchdog_; + + // The |thread_id_| on which this object is constructed. + const base::PlatformThreadId thread_id_; +}; + +#endif // !defined(OS_ANDROID) + +#endif // CHROME_BROWSER_METRICS_SHUTDOWN_WATCHER_HELPER_H_
diff --git a/chrome/browser/metrics/thread_watcher.cc b/chrome/browser/metrics/thread_watcher.cc deleted file mode 100644 index 5141b80..0000000 --- a/chrome/browser/metrics/thread_watcher.cc +++ /dev/null
@@ -1,925 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/metrics/thread_watcher.h" - -#include <math.h> // ceil - -#include "base/bind.h" -#include "base/compiler_specific.h" -#include "base/cxx17_backports.h" -#include "base/debug/dump_without_crashing.h" -#include "base/lazy_instance.h" -#include "base/location.h" -#include "base/metrics/histogram.h" -#include "base/strings/string_number_conversions.h" -#include "base/strings/string_piece.h" -#include "base/strings/string_split.h" -#include "base/strings/string_tokenizer.h" -#include "base/strings/stringprintf.h" -#include "base/threading/platform_thread.h" -#include "base/threading/thread_restrictions.h" -#include "base/threading/thread_task_runner_handle.h" -#include "base/time/time.h" -#include "build/chromeos_buildflags.h" -#include "chrome/browser/chrome_notification_types.h" -#include "chrome/browser/metrics/thread_watcher_report_hang.h" -#include "chrome/common/channel_info.h" -#include "chrome/common/chrome_switches.h" -#include "chrome/common/logging_chrome.h" -#include "components/crash/core/common/crash_key.h" -#include "components/metrics/call_stack_profile_metrics_provider.h" -#include "components/omnibox/browser/omnibox_event_global_tracker.h" -#include "components/version_info/version_info.h" -#include "content/public/browser/browser_task_traits.h" -#include "content/public/browser/browser_thread.h" -#include "content/public/browser/notification_observer.h" -#include "content/public/browser/notification_registrar.h" -#include "content/public/browser/notification_service.h" - -#if !defined(OS_ANDROID) -#include "chrome/browser/metrics/browser_activity_watcher.h" -#endif - -using content::BrowserThread; - -namespace { - -// This class ensures that the thread watching is actively taking place. Only -// one instance of this class exists. -class ThreadWatcherObserver : public content::NotificationObserver { - public: - ThreadWatcherObserver(const ThreadWatcherObserver&) = delete; - ThreadWatcherObserver& operator=(const ThreadWatcherObserver&) = delete; - - // |wakeup_interval| specifies how often to wake up thread watchers due to - // new user activity. - static void Start(const base::TimeDelta& wakeup_interval); - static void Stop(); - - private: - explicit ThreadWatcherObserver(const base::TimeDelta& wakeup_interval); - ~ThreadWatcherObserver() override; - - // content::NotificationObserver: - void Observe(int type, - const content::NotificationSource& source, - const content::NotificationDetails& details) override; - - // Called when a URL is opened from the Omnibox. - void OnURLOpenedFromOmnibox(OmniboxLog* log); - - // Called when user activity is detected. - void OnUserActivityDetected(); - -#if !defined(OS_ANDROID) - std::unique_ptr<BrowserActivityWatcher> browser_activity_watcher_; -#endif - - content::NotificationRegistrar registrar_; - - // This is the last time when woke all thread watchers up. - base::TimeTicks last_wakeup_time_; - - // It is the time interval between wake up calls to thread watchers. - const base::TimeDelta wakeup_interval_; - - // Subscription for receiving callbacks that a URL was opened from the - // omnibox. - base::CallbackListSubscription omnibox_url_opened_subscription_; -}; - -ThreadWatcherObserver* g_thread_watcher_observer_ = nullptr; - -ThreadWatcherObserver::ThreadWatcherObserver( - const base::TimeDelta& wakeup_interval) - : last_wakeup_time_(base::TimeTicks::Now()), - wakeup_interval_(wakeup_interval) { - DCHECK(!g_thread_watcher_observer_); - g_thread_watcher_observer_ = this; - -#if !defined(OS_ANDROID) - browser_activity_watcher_ = std::make_unique<BrowserActivityWatcher>( - base::BindRepeating(&ThreadWatcherObserver::OnUserActivityDetected, - base::Unretained(this))); -#endif - - registrar_.Add(this, content::NOTIFICATION_LOAD_START, - content::NotificationService::AllSources()); - registrar_.Add(this, content::NOTIFICATION_LOAD_STOP, - content::NotificationService::AllSources()); - registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, - content::NotificationService::AllSources()); - registrar_.Add(this, content::NOTIFICATION_RENDER_WIDGET_HOST_HANG, - content::NotificationService::AllSources()); - omnibox_url_opened_subscription_ = - OmniboxEventGlobalTracker::GetInstance()->RegisterCallback( - base::BindRepeating(&ThreadWatcherObserver::OnURLOpenedFromOmnibox, - base::Unretained(this))); -} - -ThreadWatcherObserver::~ThreadWatcherObserver() { - DCHECK_EQ(this, g_thread_watcher_observer_); - g_thread_watcher_observer_ = nullptr; -} - -// static -void ThreadWatcherObserver::Start(const base::TimeDelta& wakeup_interval) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - new ThreadWatcherObserver(wakeup_interval); -} - -// static -void ThreadWatcherObserver::Stop() { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - delete g_thread_watcher_observer_; -} - -void ThreadWatcherObserver::Observe( - int type, - const content::NotificationSource& source, - const content::NotificationDetails& details) { - OnUserActivityDetected(); -} - -void ThreadWatcherObserver::OnURLOpenedFromOmnibox(OmniboxLog* log) { - OnUserActivityDetected(); -} - -void ThreadWatcherObserver::OnUserActivityDetected() { - // There is some user activity, see if thread watchers are to be awakened. - base::TimeTicks now = base::TimeTicks::Now(); - if ((now - last_wakeup_time_) < wakeup_interval_) - return; - last_wakeup_time_ = now; - WatchDogThread::PostTask(FROM_HERE, - base::BindOnce(&ThreadWatcherList::WakeUpAll)); -} - -} // namespace - -// ThreadWatcher methods and members. -ThreadWatcher::ThreadWatcher(const WatchingParams& params) - : thread_id_(params.thread_id), - thread_name_(params.thread_name), - watched_runner_(BrowserThread::GetTaskRunnerForThread(params.thread_id)), - sleep_time_(params.sleep_time), - unresponsive_time_(params.unresponsive_time), - ping_time_(base::TimeTicks::Now()), - pong_time_(ping_time_), - ping_sequence_number_(0), - active_(false), - ping_count_(params.unresponsive_threshold), - response_time_histogram_(nullptr), - unresponsive_time_histogram_(nullptr), - unresponsive_count_(0), - hung_processing_complete_(false), - unresponsive_threshold_(params.unresponsive_threshold), - crash_on_hang_(params.crash_on_hang) { - DCHECK(watched_runner_); - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - Initialize(); -} - -ThreadWatcher::~ThreadWatcher() {} - -// static -void ThreadWatcher::StartWatching(const WatchingParams& params) { - DCHECK_GE(params.sleep_time.InMilliseconds(), 0); - DCHECK_GE(params.unresponsive_time.InMilliseconds(), - params.sleep_time.InMilliseconds()); - - // If we are not on WatchDogThread, then post a task to call StartWatching on - // WatchDogThread. - if (!WatchDogThread::CurrentlyOnWatchDogThread()) { - WatchDogThread::PostTask( - FROM_HERE, base::BindOnce(&ThreadWatcher::StartWatching, params)); - return; - } - - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - - // Create a new thread watcher object for the given thread and activate it. - std::unique_ptr<ThreadWatcher> watcher(new ThreadWatcher(params)); - - // If we couldn't register the thread watcher object, we are shutting down, - // so don't activate thread watching. - ThreadWatcher* registered_watcher = - ThreadWatcherList::Register(std::move(watcher)); - if (registered_watcher != nullptr) - registered_watcher->ActivateThreadWatching(); -} - -void ThreadWatcher::ActivateThreadWatching() { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - if (active_) return; - active_ = true; - ping_count_ = unresponsive_threshold_; - ResetHangCounters(); - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&ThreadWatcher::PostPingMessage, - weak_ptr_factory_.GetWeakPtr())); -} - -void ThreadWatcher::DeActivateThreadWatching() { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - active_ = false; - ping_count_ = 0; - weak_ptr_factory_.InvalidateWeakPtrs(); -} - -void ThreadWatcher::WakeUp() { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - // There is some user activity, PostPingMessage task of thread watcher if - // needed. - if (!active_) return; - - // Throw away the previous |unresponsive_count_| and start over again. Just - // before going to sleep, |unresponsive_count_| could be very close to - // |unresponsive_threshold_| and when user becomes active, - // |unresponsive_count_| can go over |unresponsive_threshold_| if there was no - // response for ping messages. Reset |unresponsive_count_| to start measuring - // the unresponsiveness of the threads when system becomes active. - unresponsive_count_ = 0; - - if (ping_count_ <= 0) { - ping_count_ = unresponsive_threshold_; - ResetHangCounters(); - PostPingMessage(); - } else { - ping_count_ = unresponsive_threshold_; - } -} - -void ThreadWatcher::PostPingMessage() { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - // If we have stopped watching or if the user is idle, then stop sending - // ping messages. - if (!active_ || ping_count_ <= 0) - return; - - // Save the current time when we have sent ping message. - ping_time_ = base::TimeTicks::Now(); - - // Send a ping message to the watched thread. Callback will be called on - // the WatchDogThread. - base::OnceClosure callback(base::BindOnce(&ThreadWatcher::OnPongMessage, - weak_ptr_factory_.GetWeakPtr(), - ping_sequence_number_)); - if (watched_runner_->PostTask( - FROM_HERE, base::BindOnce(&ThreadWatcher::OnPingMessage, thread_id_, - std::move(callback)))) { - // Post a task to check the responsiveness of watched thread. - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, - base::BindOnce(&ThreadWatcher::OnCheckResponsiveness, - weak_ptr_factory_.GetWeakPtr(), ping_sequence_number_), - unresponsive_time_); - } else { - // Watched thread might have gone away, stop watching it. - DeActivateThreadWatching(); - } -} - -void ThreadWatcher::OnPongMessage(uint64_t ping_sequence_number) { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - - // Record watched thread's response time. - base::TimeTicks now = base::TimeTicks::Now(); - base::TimeDelta response_time = now - ping_time_; - response_time_histogram_->AddTime(response_time); - -#if BUILDFLAG(IS_CHROMEOS_ASH) - // On ChromeOS, we log when the response time is long on the UI thread as part - // of an effort to debug extreme jank reported by some users. This log message - // can be used to correlate the period of jank with other system logs. - if (response_time > base::Seconds(1) && thread_id_ == BrowserThread::UI) { - LOG(WARNING) << "Long response time on the UI thread: " << response_time; - } -#endif - - // Save the current time when we have got pong message. - pong_time_ = now; - - // Check if there are any extra pings in flight. - DCHECK_EQ(ping_sequence_number_, ping_sequence_number); - if (ping_sequence_number_ != ping_sequence_number) - return; - - // Increment sequence number for the next ping message to indicate watched - // thread is responsive. - ++ping_sequence_number_; - - // If we have stopped watching or if the user is idle, then stop sending - // ping messages. - if (!active_ || --ping_count_ <= 0) - return; - - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, - base::BindOnce(&ThreadWatcher::PostPingMessage, - weak_ptr_factory_.GetWeakPtr()), - sleep_time_); -} - -void ThreadWatcher::OnCheckResponsiveness(uint64_t ping_sequence_number) { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - // If we have stopped watching then consider thread as responding. - if (!active_) { - responsive_ = true; - return; - } - // If the latest ping_sequence_number_ is not same as the ping_sequence_number - // that is passed in, then we can assume OnPongMessage was called. - // OnPongMessage increments ping_sequence_number_. - if (ping_sequence_number_ != ping_sequence_number) { - // Reset unresponsive_count_ to zero because we got a response from the - // watched thread. - ResetHangCounters(); - - responsive_ = true; - return; - } - // Record that we got no response from watched thread. - GotNoResponse(); - - // Post a task to check the responsiveness of watched thread. - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, - base::BindOnce(&ThreadWatcher::OnCheckResponsiveness, - weak_ptr_factory_.GetWeakPtr(), ping_sequence_number_), - unresponsive_time_); - responsive_ = false; -} - -void ThreadWatcher::Initialize() { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - - const std::string response_time_histogram_name = - "ThreadWatcher.ResponseTime." + thread_name_; - response_time_histogram_ = base::Histogram::FactoryTimeGet( - response_time_histogram_name, base::Milliseconds(1), base::Seconds(100), - 50, base::Histogram::kUmaTargetedHistogramFlag); - - const std::string unresponsive_time_histogram_name = - "ThreadWatcher.Unresponsive." + thread_name_; - unresponsive_time_histogram_ = base::Histogram::FactoryTimeGet( - unresponsive_time_histogram_name, base::Milliseconds(1), - base::Seconds(100), 50, base::Histogram::kUmaTargetedHistogramFlag); - - const std::string responsive_count_histogram_name = - "ThreadWatcher.ResponsiveThreads." + thread_name_; - responsive_count_histogram_ = base::LinearHistogram::FactoryGet( - responsive_count_histogram_name, 1, 10, 11, - base::Histogram::kUmaTargetedHistogramFlag); - - const std::string unresponsive_count_histogram_name = - "ThreadWatcher.UnresponsiveThreads." + thread_name_; - unresponsive_count_histogram_ = base::LinearHistogram::FactoryGet( - unresponsive_count_histogram_name, 1, 10, 11, - base::Histogram::kUmaTargetedHistogramFlag); -} - -// static -void ThreadWatcher::OnPingMessage(const BrowserThread::ID& thread_id, - base::OnceClosure callback_task) { - // This method is called on watched thread. - DCHECK(BrowserThread::CurrentlyOn(thread_id)); - WatchDogThread::PostTask(FROM_HERE, std::move(callback_task)); -} - -void ThreadWatcher::ResetHangCounters() { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - unresponsive_count_ = 0; - hung_processing_complete_ = false; -} - -void ThreadWatcher::GotNoResponse() { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - - ++unresponsive_count_; - if (!IsVeryUnresponsive()) - return; - - // Record total unresponsive_time since last pong message. - base::TimeDelta unresponse_time = base::TimeTicks::Now() - pong_time_; - unresponsive_time_histogram_->AddTime(unresponse_time); - - // We have already collected stats for the non-responding watched thread. - if (hung_processing_complete_) - return; - - // Record how other threads are responding. - uint32_t responding_thread_count = 0; - uint32_t unresponding_thread_count = 0; - ThreadWatcherList::GetStatusOfThreads(&responding_thread_count, - &unresponding_thread_count); - - // Record how many watched threads are responding. - responsive_count_histogram_->Add(responding_thread_count); - - // Record how many watched threads are not responding. - unresponsive_count_histogram_->Add(unresponding_thread_count); - - // Crash the browser if the watched thread is to be crashed on hang and at - // least one other thread is responding. - if (crash_on_hang_ && responding_thread_count > 0) { - static bool crashed_once = false; - if (!crashed_once) { - crashed_once = true; - - // The swap storm that happens under critical memory pressure can cause - // hangs. Add the time since last critical memory pressure signal as a - // crash key to allow filtering of hangs that are likely caused by that. - SetTimeSinceLastCriticalMemoryPressureCrashKey(); - - // Simulate a crash.ou - metrics::CrashBecauseThreadWasUnresponsive(thread_id_); - } - } - - hung_processing_complete_ = true; -} - -void ThreadWatcher::SetTimeSinceLastCriticalMemoryPressureCrashKey() { - // The crash key size is large enough to hold the biggest possible return - // value from base::TimeDelta::InSeconds(). - constexpr size_t kCrashKeyContentSize = 19; - DCHECK_EQ(kCrashKeyContentSize, - base::NumberToString(std::numeric_limits<int64_t>::max()).size()); - - static crash_reporter::CrashKeyString<kCrashKeyContentSize> crash_key( - "seconds-since-last-memory-pressure"); - - if (last_critical_memory_pressure_.is_null()) { - constexpr char kNoMemoryPressureMsg[] = "No memory pressure"; - static_assert(base::size(kNoMemoryPressureMsg) <= kCrashKeyContentSize, - "The crash key is too small to hold \"No memory pressure\"."); - crash_key.Set(kNoMemoryPressureMsg); - } else { - base::TimeDelta time_since_last_critical_memory_pressure = - base::TimeTicks::Now() - last_critical_memory_pressure_; - crash_key.Set(base::NumberToString( - time_since_last_critical_memory_pressure.InSeconds())); - } -} - -bool ThreadWatcher::IsVeryUnresponsive() { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - return unresponsive_count_ >= unresponsive_threshold_; -} - -// ThreadWatcherList methods and members. -// -// static -ThreadWatcherList* ThreadWatcherList::g_thread_watcher_list_ = nullptr; -// static -bool ThreadWatcherList::g_stopped_ = false; -// static -const int ThreadWatcherList::kSleepSeconds = 1; -// static -const int ThreadWatcherList::kUnresponsiveSeconds = 2; -// static -const int ThreadWatcherList::kUnresponsiveCount = 9; -// static, non-const for tests. -int ThreadWatcherList::g_initialize_delay_seconds = 120; - -// static -void ThreadWatcherList::StartWatchingAll( - const base::CommandLine& command_line) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - uint32_t unresponsive_threshold; - CrashOnHangThreadMap crash_on_hang_threads; - ParseCommandLine(command_line, - &unresponsive_threshold, - &crash_on_hang_threads); - - ThreadWatcherObserver::Start( - base::Seconds(kSleepSeconds * unresponsive_threshold)); - - WatchDogThread::PostTask( - FROM_HERE, base::BindOnce(&ThreadWatcherList::SetStopped, false)); - - WatchDogThread::PostDelayedTask( - FROM_HERE, - base::BindOnce(&ThreadWatcherList::InitializeAndStartWatching, - unresponsive_threshold, crash_on_hang_threads), - base::Seconds(g_initialize_delay_seconds)); -} - -// static -void ThreadWatcherList::StopWatchingAll() { - // TODO(rtenneti): Enable ThreadWatcher. - ThreadWatcherObserver::Stop(); - DeleteAll(); -} - -// static -ThreadWatcher* ThreadWatcherList::Register( - std::unique_ptr<ThreadWatcher> watcher) { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - if (!g_thread_watcher_list_) - return nullptr; - content::BrowserThread::ID thread_id = watcher->thread_id(); - DCHECK(g_thread_watcher_list_->registered_.count(thread_id) == 0); - return g_thread_watcher_list_->registered_[thread_id] = watcher.release(); -} - -// static -void ThreadWatcherList::GetStatusOfThreads( - uint32_t* responding_thread_count, - uint32_t* unresponding_thread_count) { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - *responding_thread_count = 0; - *unresponding_thread_count = 0; - if (!g_thread_watcher_list_) - return; - - for (auto it = g_thread_watcher_list_->registered_.begin(); - g_thread_watcher_list_->registered_.end() != it; ++it) { - if (it->second->IsVeryUnresponsive()) - ++(*unresponding_thread_count); - else - ++(*responding_thread_count); - } -} - -// static -void ThreadWatcherList::WakeUpAll() { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - if (!g_thread_watcher_list_) - return; - - for (auto it = g_thread_watcher_list_->registered_.begin(); - g_thread_watcher_list_->registered_.end() != it; ++it) - it->second->WakeUp(); -} - -ThreadWatcherList::ThreadWatcherList() - : memory_pressure_listener_( - FROM_HERE, - base::BindRepeating(&ThreadWatcherList::OnMemoryPressure, - base::Unretained(this))) { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - CHECK(!g_thread_watcher_list_); - g_thread_watcher_list_ = this; -} - -ThreadWatcherList::~ThreadWatcherList() { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - DCHECK(this == g_thread_watcher_list_); - g_thread_watcher_list_ = nullptr; -} - -// static -void ThreadWatcherList::ParseCommandLine( - const base::CommandLine& command_line, - uint32_t* unresponsive_threshold, - CrashOnHangThreadMap* crash_on_hang_threads) { - // Initialize |unresponsive_threshold| to a default value. - *unresponsive_threshold = kUnresponsiveCount; - - const version_info::Channel channel = chrome::GetChannel(); - - // Increase the unresponsive_threshold on the Stable and Beta channels to - // reduce the number of crashes due to ThreadWatcher. - // TODO: Bring this back when re-enabling beyond Canary? - // if (channel == version_info::Channel::STABLE) { - // *unresponsive_threshold *= 4; - // } else if (channel == version_info::Channel::BETA) { - // *unresponsive_threshold *= 2; - // } - - uint32_t crash_seconds = *unresponsive_threshold * kUnresponsiveSeconds; - std::string crash_on_hang_thread_names; - if (command_line.HasSwitch(switches::kCrashOnHangThreads)) { - crash_on_hang_thread_names = - command_line.GetSwitchValueASCII(switches::kCrashOnHangThreads); - } else if (channel == version_info::Channel::CANARY) { - // Default to crashing the browser if IO thread is not responsive. - // TODO: Bring this back on Dev/Beta channel and on UI thread once issues - // uncovered by https://crbug.com/804345's resolution stabilize (e.g. - // https://crbug.com/806174). - crash_on_hang_thread_names = base::StringPrintf("IO:%d", crash_seconds); - } - - ParseCommandLineCrashOnHangThreads(crash_on_hang_thread_names, - crash_seconds, - crash_on_hang_threads); -} - -// static -void ThreadWatcherList::ParseCommandLineCrashOnHangThreads( - const std::string& crash_on_hang_thread_names, - uint32_t default_crash_seconds, - CrashOnHangThreadMap* crash_on_hang_threads) { - base::StringTokenizer tokens(crash_on_hang_thread_names, ","); - while (tokens.GetNext()) { - std::vector<base::StringPiece> values = base::SplitStringPiece( - tokens.token_piece(), ":", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); - - // Accepted format for each thread is "THREADNAME" or "THREADNAME:18". The - // optional integer is the number of seconds a thread must remain - // unresponsive before considering it as hung. - CHECK_LE(values.size(), 2U); - - std::string thread_name(values[0]); - - uint32_t crash_seconds = default_crash_seconds; - if (values.size() >= 2 && - (!base::StringToUint(values[1], &crash_seconds))) { - continue; - } - - const UnresponsiveCountThreshold unresponsive_threshold = - static_cast<UnresponsiveCountThreshold>( - ceil(static_cast<float>(crash_seconds) / kUnresponsiveSeconds)); - - // Use the last specifier. - (*crash_on_hang_threads)[thread_name] = unresponsive_threshold; - } -} - -// static -void ThreadWatcherList::InitializeAndStartWatching( - uint32_t unresponsive_threshold, - const CrashOnHangThreadMap& crash_on_hang_threads) { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - - // This method is deferred in relationship to its StopWatchingAll() - // counterpart. If a previous initialization has already happened, or if - // stop has been called, there's nothing left to do here. - if (g_thread_watcher_list_ || g_stopped_) - return; - - ThreadWatcherList* thread_watcher_list = new ThreadWatcherList(); - CHECK(thread_watcher_list); - - // TODO(rtenneti): Because we don't generate crash dumps for ThreadWatcher in - // stable channel, disable ThreadWatcher in stable and unknown channels. We - // will also not collect histogram data in these channels until - // http://crbug.com/426203 is fixed. - version_info::Channel channel = chrome::GetChannel(); - if (channel == version_info::Channel::STABLE || - channel == version_info::Channel::UNKNOWN) { - return; - } - - const base::TimeDelta kSleepTime = base::Seconds(kSleepSeconds); - const base::TimeDelta kUnresponsiveTime = base::Seconds(kUnresponsiveSeconds); - - StartWatching(BrowserThread::UI, "UI", kSleepTime, kUnresponsiveTime, - unresponsive_threshold, crash_on_hang_threads); - StartWatching(BrowserThread::IO, "IO", kSleepTime, kUnresponsiveTime, - unresponsive_threshold, crash_on_hang_threads); -} - -// static -void ThreadWatcherList::StartWatching( - const BrowserThread::ID& thread_id, - const std::string& thread_name, - const base::TimeDelta& sleep_time, - const base::TimeDelta& unresponsive_time, - UnresponsiveCountThreshold unresponsive_threshold, - const CrashOnHangThreadMap& crash_on_hang_threads) { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - - auto it = crash_on_hang_threads.find(thread_name); - bool crash_on_hang = false; - if (it != crash_on_hang_threads.end()) { - crash_on_hang = true; - unresponsive_threshold = it->second; - } - - ThreadWatcher::StartWatching(ThreadWatcher::WatchingParams( - thread_id, thread_name, sleep_time, unresponsive_time, - unresponsive_threshold, crash_on_hang)); -} - -// static -void ThreadWatcherList::DeleteAll() { - if (!WatchDogThread::CurrentlyOnWatchDogThread()) { - WatchDogThread::PostTask(FROM_HERE, - base::BindOnce(&ThreadWatcherList::DeleteAll)); - return; - } - - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - - SetStopped(true); - - if (!g_thread_watcher_list_) - return; - - // Delete all thread watcher objects. - while (!g_thread_watcher_list_->registered_.empty()) { - auto it = g_thread_watcher_list_->registered_.begin(); - delete it->second; - g_thread_watcher_list_->registered_.erase(it); - } - - delete g_thread_watcher_list_; -} - -// static -ThreadWatcher* ThreadWatcherList::Find(const BrowserThread::ID& thread_id) { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - if (!g_thread_watcher_list_) - return nullptr; - auto it = g_thread_watcher_list_->registered_.find(thread_id); - if (g_thread_watcher_list_->registered_.end() == it) - return nullptr; - return it->second; -} - -// static -void ThreadWatcherList::SetStopped(bool stopped) { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - g_stopped_ = stopped; -} - -// static -void ThreadWatcherList::OnMemoryPressure( - base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level) { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - - if (memory_pressure_level == - base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL) { - const base::TimeTicks now = base::TimeTicks::Now(); - for (auto& thread_watcher : registered_) - thread_watcher.second->last_critical_memory_pressure_ = now; - } -} - -// WatchDogThread methods and members. - -// This lock protects g_watchdog_thread. -static base::LazyInstance<base::Lock>::Leaky - g_watchdog_lock = LAZY_INSTANCE_INITIALIZER; - -// The singleton of this class. -static WatchDogThread* g_watchdog_thread = nullptr; - -WatchDogThread::WatchDogThread() : Thread("BrowserWatchdog") { -} - -WatchDogThread::~WatchDogThread() { - Stop(); -} - -// static -bool WatchDogThread::CurrentlyOnWatchDogThread() { - base::AutoLock lock(g_watchdog_lock.Get()); - return g_watchdog_thread && - g_watchdog_thread->task_runner()->BelongsToCurrentThread(); -} - -// static -bool WatchDogThread::PostTask(const base::Location& from_here, - base::OnceClosure task) { - return PostTaskHelper(from_here, std::move(task), base::TimeDelta()); -} - -// static -bool WatchDogThread::PostDelayedTask(const base::Location& from_here, - base::OnceClosure task, - base::TimeDelta delay) { - return PostTaskHelper(from_here, std::move(task), delay); -} - -// static -bool WatchDogThread::PostTaskHelper(const base::Location& from_here, - base::OnceClosure task, - base::TimeDelta delay) { - { - base::AutoLock lock(g_watchdog_lock.Get()); - - scoped_refptr<base::SingleThreadTaskRunner> task_runner = - g_watchdog_thread ? g_watchdog_thread->task_runner() : nullptr; - if (task_runner) { - task_runner->PostDelayedTask(from_here, std::move(task), delay); - return true; - } - } - - return false; -} - -bool WatchDogThread::Started() const { - base::AutoLock lock(g_watchdog_lock.Get()); - return g_watchdog_thread != nullptr; -} - -void WatchDogThread::Init() { - // This thread shouldn't be allowed to perform any blocking disk I/O. - base::DisallowBlocking(); - - base::AutoLock lock(g_watchdog_lock.Get()); - CHECK(!g_watchdog_thread); - g_watchdog_thread = this; -} - -void WatchDogThread::CleanUp() { - base::AutoLock lock(g_watchdog_lock.Get()); - g_watchdog_thread = nullptr; -} - -// ShutdownWatcherHelper is not available on Android. -#if !defined(OS_ANDROID) - -namespace { - -// StartupWatchDogThread methods and members. -// -// Class for detecting hangs during startup. -class StartupWatchDogThread : public base::Watchdog { - public: - // Constructor specifies how long the StartupWatchDogThread will wait before - // alarming. - explicit StartupWatchDogThread(const base::TimeDelta& duration) - : base::Watchdog(duration, "Startup watchdog thread", true) { - } - - StartupWatchDogThread(const StartupWatchDogThread&) = delete; - StartupWatchDogThread& operator=(const StartupWatchDogThread&) = delete; - - // Alarm is called if the time expires after an Arm() without someone calling - // Disarm(). When Alarm goes off, in release mode we get the crash dump - // without crashing and in debug mode we break into the debugger. - void Alarm() override { -#if !defined(NDEBUG) - metrics::StartupHang(); -#else - WatchDogThread::PostTask(FROM_HERE, base::BindOnce(&metrics::StartupHang)); -#endif - } -}; - -// ShutdownWatchDogThread methods and members. -// -// Class for detecting hangs during shutdown. -class ShutdownWatchDogThread : public base::Watchdog { - public: - // Constructor specifies how long the ShutdownWatchDogThread will wait before - // alarming. - explicit ShutdownWatchDogThread(const base::TimeDelta& duration) - : base::Watchdog(duration, "Shutdown watchdog thread", true) { - } - - ShutdownWatchDogThread(const ShutdownWatchDogThread&) = delete; - ShutdownWatchDogThread& operator=(const ShutdownWatchDogThread&) = delete; - - // Alarm is called if the time expires after an Arm() without someone calling - // Disarm(). We crash the browser if this method is called. - void Alarm() override { metrics::ShutdownHang(); } -}; - -} // namespace - -// ShutdownWatcherHelper methods and members. -// -// ShutdownWatcherHelper is a wrapper class for detecting hangs during -// shutdown. -ShutdownWatcherHelper::ShutdownWatcherHelper() - : shutdown_watchdog_(nullptr), - thread_id_(base::PlatformThread::CurrentId()) { -} - -ShutdownWatcherHelper::~ShutdownWatcherHelper() { - DCHECK_EQ(thread_id_, base::PlatformThread::CurrentId()); - if (shutdown_watchdog_) { - shutdown_watchdog_->Disarm(); - delete shutdown_watchdog_; - shutdown_watchdog_ = nullptr; - } -} - -void ShutdownWatcherHelper::Arm(const base::TimeDelta& duration) { - DCHECK_EQ(thread_id_, base::PlatformThread::CurrentId()); - DCHECK(!shutdown_watchdog_); - shutdown_watchdog_ = - new ShutdownWatchDogThread(GetPerChannelTimeout(duration)); - shutdown_watchdog_->Arm(); -} - -// static -base::TimeDelta ShutdownWatcherHelper::GetPerChannelTimeout( - base::TimeDelta duration) { - base::TimeDelta actual_duration = duration; - - version_info::Channel channel = chrome::GetChannel(); - if (channel == version_info::Channel::STABLE) { - actual_duration *= 20; - } else if (channel == version_info::Channel::BETA) { - actual_duration *= 10; - } else if (channel == version_info::Channel::DEV) { - actual_duration *= 4; - } else { - actual_duration *= 2; - } - - return actual_duration; -} - -#endif // !defined(OS_ANDROID)
diff --git a/chrome/browser/metrics/thread_watcher.h b/chrome/browser/metrics/thread_watcher.h deleted file mode 100644 index 6186b631..0000000 --- a/chrome/browser/metrics/thread_watcher.h +++ /dev/null
@@ -1,534 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// This file defines a WatchDog thread that monitors the responsiveness of other -// browser threads like UI, IO, DB, FILE and CACHED threads. It also defines -// ThreadWatcher class which performs health check on threads that would like to -// be watched. This file also defines ThreadWatcherList class that has list of -// all active ThreadWatcher objects. -// -// ThreadWatcher class sends ping message to the watched thread and the watched -// thread responds back with a pong message. It uploads response time -// (difference between ping and pong times) as a histogram. -// -// TODO(raman): ThreadWatcher can detect hung threads. If a hung thread is -// detected, we should probably just crash, and allow the crash system to gather -// then stack trace. -// -// Example Usage: -// -// The following is an example for watching responsiveness of watched (IO) -// thread. |sleep_time| specifies how often ping messages have to be sent to -// watched (IO) thread. |unresponsive_time| is the wait time after ping -// message is sent, to check if we have received pong message or not. -// |unresponsive_threshold| specifies the number of unanswered ping messages -// after which watched (IO) thread is considered as not responsive. -// |crash_on_hang| specifies if we want to crash the browser when the watched -// (IO) thread has become sufficiently unresponsive, while other threads are -// sufficiently responsive. -// -// base::TimeDelta sleep_time = base::Seconds(5); -// base::TimeDelta unresponsive_time = base::Seconds(10); -// uint32_t unresponsive_threshold = ThreadWatcherList::kUnresponsiveCount; -// bool crash_on_hang = false; -// ThreadWatcher::StartWatching( -// BrowserThread::IO, "IO", sleep_time, unresponsive_time, -// unresponsive_threshold, crash_on_hang); - -#ifndef CHROME_BROWSER_METRICS_THREAD_WATCHER_H_ -#define CHROME_BROWSER_METRICS_THREAD_WATCHER_H_ - -#include <stdint.h> - -#include <map> -#include <string> -#include <vector> - -#include "base/command_line.h" -#include "base/gtest_prod_util.h" -#include "base/memory/memory_pressure_listener.h" -#include "base/memory/raw_ptr.h" -#include "base/memory/ref_counted.h" -#include "base/memory/weak_ptr.h" -#include "base/synchronization/lock.h" -#include "base/task/single_thread_task_runner.h" -#include "base/threading/platform_thread.h" -#include "base/threading/thread.h" -#include "base/threading/watchdog.h" -#include "base/time/time.h" -#include "build/build_config.h" -#include "components/metrics/call_stack_profile_params.h" -#include "content/public/browser/browser_thread.h" - -class CustomThreadWatcher; -class ThreadWatcherList; - -namespace base { -class HistogramBase; -} - -// This class performs health check on threads that would like to be watched. -class ThreadWatcher { - public: - // base::Bind supports methods with up to 6 parameters. WatchingParams is used - // as a workaround that limitation for invoking ThreadWatcher::StartWatching. - struct WatchingParams { - content::BrowserThread::ID thread_id; - std::string thread_name; - base::TimeDelta sleep_time; - base::TimeDelta unresponsive_time; - uint32_t unresponsive_threshold; - bool crash_on_hang; - - WatchingParams(const content::BrowserThread::ID& thread_id_in, - const std::string& thread_name_in, - const base::TimeDelta& sleep_time_in, - const base::TimeDelta& unresponsive_time_in, - uint32_t unresponsive_threshold_in, - bool crash_on_hang_in) - : thread_id(thread_id_in), - thread_name(thread_name_in), - sleep_time(sleep_time_in), - unresponsive_time(unresponsive_time_in), - unresponsive_threshold(unresponsive_threshold_in), - crash_on_hang(crash_on_hang_in) {} - }; - - ThreadWatcher(const ThreadWatcher&) = delete; - ThreadWatcher& operator=(const ThreadWatcher&) = delete; - - virtual ~ThreadWatcher(); - - // This method starts performing health check on the given |thread_id|. It - // will create ThreadWatcher object for the given |thread_id|, |thread_name|. - // |sleep_time| is the wait time between ping messages. |unresponsive_time| is - // the wait time after ping message is sent, to check if we have received pong - // message or not. |unresponsive_threshold| is used to determine if the thread - // is responsive or not. The watched thread is considered unresponsive if it - // hasn't responded with a pong message for |unresponsive_threshold| number of - // ping messages. |crash_on_hang| specifies if browser should be crashed when - // the watched thread is unresponsive. It will register that ThreadWatcher - // object and activate the thread watching of the given thread_id. - static void StartWatching(const WatchingParams& params); - - // Return the |thread_id_| of the thread being watched. - content::BrowserThread::ID thread_id() const { return thread_id_; } - - // Return the name of the thread being watched. - std::string thread_name() const { return thread_name_; } - - // Return the sleep time between ping messages to be sent to the thread. - base::TimeDelta sleep_time() const { return sleep_time_; } - - // Return the the wait time to check the responsiveness of the thread. - base::TimeDelta unresponsive_time() const { return unresponsive_time_; } - - // Returns true if we are montioring the thread. - bool active() const { return active_; } - - // Returns |ping_time_| (used by unit tests). - base::TimeTicks ping_time() const { return ping_time_; } - - // Returns |ping_sequence_number_| (used by unit tests). - uint64_t ping_sequence_number() const { return ping_sequence_number_; } - - protected: - // Construct a ThreadWatcher for the given |thread_id|. |sleep_time| is the - // wait time between ping messages. |unresponsive_time| is the wait time after - // ping message is sent, to check if we have received pong message or not. - explicit ThreadWatcher(const WatchingParams& params); - - // This method activates the thread watching which starts ping/pong messaging. - virtual void ActivateThreadWatching(); - - // This method de-activates the thread watching and revokes all tasks. - virtual void DeActivateThreadWatching(); - - // This will ensure that the watching is actively taking place, and awaken - // (i.e., post a PostPingMessage()) if the watcher has stopped pinging due to - // lack of user activity. It will also reset |ping_count_| to - // |unresponsive_threshold_|. - virtual void WakeUp(); - - // This method records when ping message was sent and it will Post a task - // (OnPingMessage()) to the watched thread that does nothing but respond with - // OnPongMessage(). It also posts a task (OnCheckResponsiveness()) to check - // responsiveness of monitored thread that would be called after waiting - // |unresponsive_time_|. - // This method is accessible on WatchDogThread. - virtual void PostPingMessage(); - - // This method handles a Pong Message from watched thread. It will track the - // response time (pong time minus ping time) via histograms. It posts a - // PostPingMessage() task that would be called after waiting |sleep_time_|. It - // increments |ping_sequence_number_| by 1. - // This method is accessible on WatchDogThread. - virtual void OnPongMessage(uint64_t ping_sequence_number); - - // This method will determine if the watched thread is responsive or not. If - // the latest |ping_sequence_number_| is not same as the - // |ping_sequence_number| that is passed in, then we can assume that watched - // thread has responded with a pong message. - // This method is accessible on WatchDogThread. - virtual void OnCheckResponsiveness(uint64_t ping_sequence_number); - - // Set by OnCheckResponsiveness when it determines if the watched thread is - // responsive or not. - bool responsive_; - - private: - friend class ThreadWatcherList; - friend class CustomThreadWatcher; - - // Allow tests to access our innards for testing purposes. - FRIEND_TEST_ALL_PREFIXES(ThreadWatcherTest, Registration); - FRIEND_TEST_ALL_PREFIXES(ThreadWatcherTest, ThreadResponding); - FRIEND_TEST_ALL_PREFIXES(ThreadWatcherTest, ThreadNotResponding); - FRIEND_TEST_ALL_PREFIXES(ThreadWatcherTest, MultipleThreadsResponding); - FRIEND_TEST_ALL_PREFIXES(ThreadWatcherTest, MultipleThreadsNotResponding); - FRIEND_TEST_ALL_PREFIXES(ThreadWatcherTestWithMockTime, - MemoryPressureCrashKey); - - // Post constructor initialization. - void Initialize(); - - // Watched thread does nothing except post callback_task to the WATCHDOG - // Thread. This method is called on watched thread. - static void OnPingMessage(const content::BrowserThread::ID& thread_id, - base::OnceClosure callback_task); - - // This method resets |unresponsive_count_| to zero because watched thread is - // responding to the ping message with a pong message. - void ResetHangCounters(); - - // This method records watched thread is not responding to the ping message. - // It increments |unresponsive_count_| by 1. - void GotNoResponse(); - - // Sets a crash key with the time since last critical memory pressure signal. - void SetTimeSinceLastCriticalMemoryPressureCrashKey(); - - // This method returns true if the watched thread has not responded with a - // pong message for |unresponsive_threshold_| number of ping messages. - bool IsVeryUnresponsive(); - - // The |thread_id_| of the thread being watched. Only one instance can exist - // for the given |thread_id_| of the thread being watched. - const content::BrowserThread::ID thread_id_; - - // The name of the thread being watched. - const std::string thread_name_; - - // Used to post messages to watched thread. - const scoped_refptr<base::SingleThreadTaskRunner> watched_runner_; - - // It is the sleep time between the receipt of a pong message back, and the - // sending of another ping message. - const base::TimeDelta sleep_time_; - - // It is the duration from sending a ping message, until we check status to be - // sure a pong message has been returned. - const base::TimeDelta unresponsive_time_; - - // This is the last time when ping message was sent. - base::TimeTicks ping_time_; - - // This is the last time when we got pong message. - base::TimeTicks pong_time_; - - // This is the sequence number of the next ping for which there is no pong. If - // the instance is sleeping, then it will be the sequence number for the next - // ping. - uint64_t ping_sequence_number_; - - // This is set to true if thread watcher is watching. - bool active_; - - // The counter tracks least number of ping messages that will be sent to - // watched thread before the ping-pong mechanism will go into an extended - // sleep. If this value is zero, then the mechanism is in an extended sleep, - // and awaiting some observed user action before continuing. - int ping_count_; - - // Histogram that keeps track of response times for the watched thread. - raw_ptr<base::HistogramBase> response_time_histogram_; - - // Histogram that keeps track of unresponsive time since the last pong message - // when we got no response (GotNoResponse()) from the watched thread. - raw_ptr<base::HistogramBase> unresponsive_time_histogram_; - - // Histogram that keeps track of how many threads are responding when we got - // no response (GotNoResponse()) from the watched thread. - raw_ptr<base::HistogramBase> responsive_count_histogram_; - - // Histogram that keeps track of how many threads are not responding when we - // got no response (GotNoResponse()) from the watched thread. Count includes - // the thread that got no response. - raw_ptr<base::HistogramBase> unresponsive_count_histogram_; - - // This counter tracks the unresponsiveness of watched thread. If this value - // is zero then watched thread has responded with a pong message. This is - // incremented by 1 when we got no response (GotNoResponse()) from the watched - // thread. - uint32_t unresponsive_count_; - - // This is set to true when we would have crashed the browser because the - // watched thread hasn't responded at least |unresponsive_threshold_| times. - // It is reset to false when watched thread responds with a pong message. - bool hung_processing_complete_; - - // This is used to determine if the watched thread is responsive or not. If - // watched thread's |unresponsive_count_| is greater than or equal to - // |unresponsive_threshold_| then we would consider it as unresponsive. - uint32_t unresponsive_threshold_; - - // This is set to true if we want to crash the browser when the watched thread - // has become sufficiently unresponsive, while other threads are sufficiently - // responsive. - bool crash_on_hang_; - - // The last time at which a critical memory pressure signal was received, or - // null if no signal was ever received. Maintained by ThreadWatcherList. - base::TimeTicks last_critical_memory_pressure_; - - // We use this factory to create callback tasks for ThreadWatcher object. We - // use this during ping-pong messaging between WatchDog thread and watched - // thread. - base::WeakPtrFactory<ThreadWatcher> weak_ptr_factory_{this}; -}; - -// Class with a list of all active thread watchers. A thread watcher is active -// if it has been registered, which includes determing the histogram name. This -// class provides utility functions to start and stop watching all browser -// threads. Only one instance of this class exists. -class ThreadWatcherList { - public: - // A map from BrowserThread to the actual instances. - typedef std::map<content::BrowserThread::ID, ThreadWatcher*> RegistrationList; - - // A map from thread names (UI/IO) to |UnresponsiveCountThreshold|. - // - // UnresponsiveCountThreshold specifies the number of unanswered ping messages - // after which watched (UI/IO) thread is considered as not responsive. We - // translate "time" (given in seconds) into a number of pings. As a result, we - // only declare a thread unresponsive when a lot of "time" has passed (many - // pings), and yet our pinging thread has continued to process messages (so we - // know the entire PC is not hung). Set this number higher to crash less - // often, and lower to crash more often. - // - // The map lists all threads (by name) that can induce a crash by hanging. It - // is populated from the command line, or given a default list. See - // InitializeAndStartWatching() for the separate list of all threads that are - // watched, as they provide the system context of how hung *other* threads - // are. - // - // ThreadWatcher monitors UI and IO browser threads. - // - // The example command line argument consists of "UI:18,IO:18". In that - // string, the first parameter specifies the thread_id: UI or IO. The second - // parameter specifies the unresponsive threshold seconds. This number is used - // to calculate the UnresponsiveCountThreshold. In this example for UI and IO - // threads, we would crash if those threads don't respond for 18 seconds (i.e. - // 9 unanswered ping messages with a 2 seconds timeout). - using UnresponsiveCountThreshold = uint32_t; - typedef std::map<std::string, UnresponsiveCountThreshold> - CrashOnHangThreadMap; - - ThreadWatcherList(const ThreadWatcherList&) = delete; - ThreadWatcherList& operator=(const ThreadWatcherList&) = delete; - - // This method posts a task on WatchDogThread to start watching all browser - // threads. - // This method is accessible on UI thread. - static void StartWatchingAll(const base::CommandLine& command_line); - - // This method posts a task on WatchDogThread to RevokeAll tasks and to - // deactive thread watching of other threads and tell NotificationService to - // stop calling Observe. - // This method is accessible on UI thread. - static void StopWatchingAll(); - - // Register() stores a pointer to the given ThreadWatcher in a global map. - // Returns the pointer if it was successfully registered, null otherwise. - static ThreadWatcher* Register(std::unique_ptr<ThreadWatcher> watcher); - - // This method returns number of responsive and unresponsive watched threads. - static void GetStatusOfThreads(uint32_t* responding_thread_count, - uint32_t* unresponding_thread_count); - - // This will ensure that the watching is actively taking place, and awaken - // all thread watchers that are registered. - static void WakeUpAll(); - - private: - // Allow tests to access our innards for testing purposes. - friend class CustomThreadWatcher; - friend class ThreadWatcherListTest; - friend class ThreadWatcherTest; - FRIEND_TEST_ALL_PREFIXES(ThreadWatcherAndroidTest, - ApplicationStatusNotification); - FRIEND_TEST_ALL_PREFIXES(ThreadWatcherListTest, Restart); - FRIEND_TEST_ALL_PREFIXES(ThreadWatcherTest, ThreadNamesOnlyArgs); - FRIEND_TEST_ALL_PREFIXES(ThreadWatcherTest, CrashOnHangThreadsAllArgs); - FRIEND_TEST_ALL_PREFIXES(ThreadWatcherCrashKeyTest, MemoryPressureCrashKey); - - // This singleton holds the global list of registered ThreadWatchers. - ThreadWatcherList(); - - // Destructor deletes all registered ThreadWatcher instances. - virtual ~ThreadWatcherList(); - - // Parses the command line to get |crash_on_hang_threads| map from - // switches::kCrashOnHangThreads. |crash_on_hang_threads| is a map of - // |crash_on_hang| thread's names to |CrashDataThresholds|. - static void ParseCommandLine(const base::CommandLine& command_line, - uint32_t* unresponsive_threshold, - CrashOnHangThreadMap* crash_on_hang_threads); - - // Parses the argument |crash_on_hang_thread_names| and creates - // |crash_on_hang_threads| map of |crash_on_hang| thread's names to - // |CrashDataThresholds|. If |crash_on_hang_thread_names| doesn't specify - // |crash_seconds|, then it uses |default_crash_seconds| as the value. - static void ParseCommandLineCrashOnHangThreads( - const std::string& crash_on_hang_thread_names, - uint32_t default_crash_seconds, - CrashOnHangThreadMap* crash_on_hang_threads); - - // This constructs the |ThreadWatcherList| singleton and starts watching - // browser threads by calling StartWatching() on each browser thread that is - // watched. - static void InitializeAndStartWatching( - uint32_t unresponsive_threshold, - const CrashOnHangThreadMap& crash_on_hang_threads); - - // This method calls ThreadWatcher::StartWatching() to perform health check on - // the given |thread_id|. - static void StartWatching(const content::BrowserThread::ID& thread_id, - const std::string& thread_name, - const base::TimeDelta& sleep_time, - const base::TimeDelta& unresponsive_time, - uint32_t unresponsive_threshold, - const CrashOnHangThreadMap& crash_on_hang_threads); - - // Delete all thread watcher objects and remove them from global map. It also - // deletes |g_thread_watcher_list_|. - static void DeleteAll(); - - // The Find() method can be used to test to see if a given ThreadWatcher was - // already registered, or to retrieve a pointer to it from the global map. - static ThreadWatcher* Find(const content::BrowserThread::ID& thread_id); - - // Sets |g_stopped_| on the WatchDogThread. This is necessary to reflect the - // state between the delayed |StartWatchingAll| and the immediate - // |StopWatchingAll|. - static void SetStopped(bool stopped); - - // Invoked on memory pressure signal. - void OnMemoryPressure( - base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level); - - // The singleton of this class and is used to keep track of information about - // threads that are being watched. - static ThreadWatcherList* g_thread_watcher_list_; - - // StartWatchingAll() is delayed in relation to StopWatchingAll(), so if - // a Stop comes first, prevent further initialization. - static bool g_stopped_; - - // This is the wait time between ping messages. - static const int kSleepSeconds; - - // This is the wait time after ping message is sent, to check if we have - // received pong message or not. - static const int kUnresponsiveSeconds; - - // Default values for |unresponsive_threshold|. - static const int kUnresponsiveCount; - - // Default value for the delay until |InitializeAndStartWatching| is called. - // Non-const for tests. - static int g_initialize_delay_seconds; - - // Registration to receive memory pressure signals. - base::MemoryPressureListener memory_pressure_listener_; - - // Map of all registered watched threads, from thread_id to ThreadWatcher. - RegistrationList registered_; -}; - -// Class for WatchDogThread and in its Init method, we start watching UI, IO, -// DB, FILE, CACHED threads. -class WatchDogThread : public base::Thread { - public: - // Constructor. - WatchDogThread(); - - WatchDogThread(const WatchDogThread&) = delete; - WatchDogThread& operator=(const WatchDogThread&) = delete; - - // Destroys the thread and stops the thread. - ~WatchDogThread() override; - - // Callable on any thread. Returns whether you're currently on a - // WatchDogThread. - static bool CurrentlyOnWatchDogThread(); - - // These are the same methods in message_loop.h, but are guaranteed to either - // get posted to the MessageLoop if it's still alive, or be deleted otherwise. - // They return true iff the watchdog thread existed and the task was posted. - // Note that even if the task is posted, there's no guarantee that it will - // run, since the target thread may already have a Quit message in its queue. - static bool PostTask(const base::Location& from_here, base::OnceClosure task); - static bool PostDelayedTask(const base::Location& from_here, - base::OnceClosure task, - base::TimeDelta delay); - - protected: - void Init() override; - void CleanUp() override; - - private: - // This method returns true if Init() is called. - bool Started() const; - - static bool PostTaskHelper(const base::Location& from_here, - base::OnceClosure task, - base::TimeDelta delay); -}; - -// ShutdownWatcherHelper is useless on Android because there is no shutdown, -// Chrome is always killed one way or another (swiped away in the task -// switcher, OOM-killed, etc.). -#if !defined(OS_ANDROID) -// This is a wrapper class for detecting hangs during shutdown. -class ShutdownWatcherHelper { - public: - // Create an empty holder for |shutdown_watchdog_|. - ShutdownWatcherHelper(); - - ShutdownWatcherHelper(const ShutdownWatcherHelper&) = delete; - ShutdownWatcherHelper& operator=(const ShutdownWatcherHelper&) = delete; - - // Destructor disarm's shutdown_watchdog_ so that alarm doesn't go off. - ~ShutdownWatcherHelper(); - - // Constructs ShutdownWatchDogThread which spawns a thread and starts timer. - // |duration| specifies how long it will wait before it calls alarm. - void Arm(const base::TimeDelta& duration); - - // Get the timeout after which a shutdown hang is detected, for the current - // channel. - static base::TimeDelta GetPerChannelTimeout(base::TimeDelta duration); - - private: - // shutdown_watchdog_ watches for hangs during shutdown. - base::Watchdog* shutdown_watchdog_; - - // The |thread_id_| on which this object is constructed. - const base::PlatformThreadId thread_id_; -}; - -#endif // !defined(OS_ANDROID) - -#endif // CHROME_BROWSER_METRICS_THREAD_WATCHER_H_
diff --git a/chrome/browser/metrics/thread_watcher_android.cc b/chrome/browser/metrics/thread_watcher_android.cc deleted file mode 100644 index 1d6aef24..0000000 --- a/chrome/browser/metrics/thread_watcher_android.cc +++ /dev/null
@@ -1,79 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/metrics/thread_watcher_android.h" - -#include "base/android/application_status_listener.h" -#include "base/bind.h" -#include "base/check_op.h" -#include "base/command_line.h" -#include "base/lazy_instance.h" -#include "chrome/browser/metrics/thread_watcher.h" -#include "content/public/browser/browser_thread.h" - -namespace { - -// For most of the activities, the C++ side is initialized asynchronously -// and the very first APPLICATION_STATE_HAS_RUNNING_ACTIVITIES is never received -// whilst the ThreadWatcherList is initiated higher up in the stack. -// However, some activities are initialized synchronously, and it'll receive -// an APPLICATION_STATE_HAS_RUNNING_ACTIVITIES here as well. -// Protect against this case, and only let -// APPLICATION_STATE_HAS_RUNNING_ACTIVITIES turn on the -// watchdog if it was previously handled by an -// APPLICATION_STATE_HAS_STOPPED_ACTIVITIES (which is always handled here). -bool g_application_has_stopped = false; - -void OnApplicationStateChange( - base::android::ApplicationState application_state) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - if (application_state == - base::android::APPLICATION_STATE_HAS_STOPPED_ACTIVITIES) { - g_application_has_stopped = true; - ThreadWatcherList::StopWatchingAll(); - } else if (application_state == - base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES && - g_application_has_stopped) { - g_application_has_stopped = false; - ThreadWatcherList::StartWatchingAll( - *base::CommandLine::ForCurrentProcess()); - } -} - -// This wrapper is needed so we can call the ApplicationStatusListener::New -// method which returns a unique_ptr. -class ApplicationStatusListenerWrapper { - public: - ApplicationStatusListenerWrapper() - : listener_(base::android::ApplicationStatusListener::New( - base::BindRepeating(&OnApplicationStateChange))) {} - - private: - std::unique_ptr<base::android::ApplicationStatusListener> listener_; -}; - -struct LeakyApplicationStatusListenerTraits { - static const bool kRegisterOnExit = false; -#if DCHECK_IS_ON() - static const bool kAllowedToAccessOnNonjoinableThread = true; -#endif - - static ApplicationStatusListenerWrapper* New(void* instance) { - ANNOTATE_SCOPED_MEMORY_LEAK; - return new (instance) ApplicationStatusListenerWrapper(); - } - - static void Delete(ApplicationStatusListenerWrapper* instance) {} -}; - -base::LazyInstance<ApplicationStatusListenerWrapper, - LeakyApplicationStatusListenerTraits> - g_application_status_listener = LAZY_INSTANCE_INITIALIZER; - -} // namespace - -void ThreadWatcherAndroid::RegisterApplicationStatusListener() { - // Leaky. - g_application_status_listener.Get(); -}
diff --git a/chrome/browser/metrics/thread_watcher_android.h b/chrome/browser/metrics/thread_watcher_android.h deleted file mode 100644 index a249ca1..0000000 --- a/chrome/browser/metrics/thread_watcher_android.h +++ /dev/null
@@ -1,24 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// This file integrates ThreadWatcher with Android's activity life-cycle. -// When Activity.onStop() is called, in order to preserve battery, it will -// deactive the thread watcher. Conversely, when onRestart() is called, -// it will reactivate. -// See more details in: -// http://developer.android.com/training/basics/activity-lifecycle/stopping.html - -#ifndef CHROME_BROWSER_METRICS_THREAD_WATCHER_ANDROID_H_ -#define CHROME_BROWSER_METRICS_THREAD_WATCHER_ANDROID_H_ - -class ThreadWatcherAndroid { - public: - ThreadWatcherAndroid() = delete; - ThreadWatcherAndroid(const ThreadWatcherAndroid&) = delete; - ThreadWatcherAndroid& operator=(const ThreadWatcherAndroid&) = delete; - - static void RegisterApplicationStatusListener(); -}; - -#endif // CHROME_BROWSER_METRICS_THREAD_WATCHER_ANDROID_H_
diff --git a/chrome/browser/metrics/thread_watcher_android_unittest.cc b/chrome/browser/metrics/thread_watcher_android_unittest.cc deleted file mode 100644 index dc7d941..0000000 --- a/chrome/browser/metrics/thread_watcher_android_unittest.cc +++ /dev/null
@@ -1,75 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/metrics/thread_watcher_android.h" - -#include "base/android/application_status_listener.h" -#include "base/bind.h" -#include "base/run_loop.h" -#include "base/synchronization/waitable_event.h" -#include "chrome/browser/metrics/thread_watcher.h" -#include "content/public/test/browser_task_environment.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace { -void OnThreadWatcherTask(base::WaitableEvent* event) { - event->Signal(); -} - -void PostAndWaitForWatchdogThread(base::WaitableEvent* event) { - WatchDogThread::PostDelayedTask( - FROM_HERE, base::BindOnce(&OnThreadWatcherTask, event), base::Seconds(0)); - - EXPECT_TRUE(event->TimedWait(base::Seconds(1))); -} - -void NotifyApplicationStateChange(base::android::ApplicationState state) { - base::WaitableEvent watchdog_thread_event( - base::WaitableEvent::ResetPolicy::AUTOMATIC, - base::WaitableEvent::InitialState::NOT_SIGNALED); - - base::android::ApplicationStatusListener::NotifyApplicationStateChange(state); - base::RunLoop().RunUntilIdle(); - - PostAndWaitForWatchdogThread(&watchdog_thread_event); -} - -} // namespace - -TEST(ThreadWatcherAndroidTest, ApplicationStatusNotification) { - // Do not delay the ThreadWatcherList initialization for this test. - ThreadWatcherList::g_initialize_delay_seconds = 0; - - content::BrowserTaskEnvironment task_environment; - - std::unique_ptr<WatchDogThread> watchdog_thread_(new WatchDogThread()); - watchdog_thread_->StartAndWaitForTesting(); - - EXPECT_FALSE(ThreadWatcherList::g_thread_watcher_list_); - - - // Register, and notify the application has just started, - // and ensure the thread watcher list is created. - ThreadWatcherAndroid::RegisterApplicationStatusListener(); - ThreadWatcherList::StartWatchingAll(*base::CommandLine::ForCurrentProcess()); - NotifyApplicationStateChange( - base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES); - EXPECT_TRUE(ThreadWatcherList::g_thread_watcher_list_); - - // Notify the application has been stopped, and ensure the thread watcher list - // has been destroyed. - NotifyApplicationStateChange( - base::android::APPLICATION_STATE_HAS_STOPPED_ACTIVITIES); - EXPECT_FALSE(ThreadWatcherList::g_thread_watcher_list_); - - // And again the last transition, STOPPED -> STARTED. - NotifyApplicationStateChange( - base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES); - EXPECT_TRUE(ThreadWatcherList::g_thread_watcher_list_); - - // ThreadWatcherList::StartWatchingAll() creates g_thread_watcher_observer_. - // This should be released by ThreadWatcherList::StopWatchingAll() in the end - // of test to not affect other test cases. - ThreadWatcherList::StopWatchingAll(); -}
diff --git a/chrome/browser/metrics/thread_watcher_unittest.cc b/chrome/browser/metrics/thread_watcher_unittest.cc deleted file mode 100644 index d3cfa630..0000000 --- a/chrome/browser/metrics/thread_watcher_unittest.cc +++ /dev/null
@@ -1,836 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/metrics/thread_watcher.h" - -#include <math.h> -#include <stdint.h> - -#include <memory> - -#include "base/bind.h" -#include "base/cancelable_callback.h" -#include "base/check.h" -#include "base/cxx17_backports.h" -#include "base/location.h" -#include "base/memory/raw_ptr.h" -#include "base/run_loop.h" -#include "base/strings/string_number_conversions.h" -#include "base/strings/string_piece.h" -#include "base/strings/string_split.h" -#include "base/strings/string_tokenizer.h" -#include "base/synchronization/condition_variable.h" -#include "base/synchronization/lock.h" -#include "base/synchronization/waitable_event.h" -#include "base/task/single_thread_task_runner.h" -#include "base/test/bind.h" -#include "base/threading/platform_thread.h" -#include "base/threading/thread_task_runner_handle.h" -#include "base/time/time.h" -#include "build/build_config.h" -#include "chrome/common/chrome_switches.h" -#include "components/crash/core/common/crash_key.h" -#include "content/public/browser/browser_task_traits.h" -#include "content/public/browser/browser_thread.h" -#include "content/public/test/browser_task_environment.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "testing/platform_test.h" - -using base::TimeTicks; -using content::BrowserThread; - -enum State { - INITIALIZED, // Created ThreadWatch object. - ACTIVATED, // Thread watching activated. - SENT_PING, // Sent ping message to watched thread. - RECEIVED_PONG, // Received Pong message. - DEACTIVATED, // Thread watching de-activated. -}; - -enum WaitState { - UNINITIALIZED, - STARTED_WAITING, // Start waiting for state_ to change to expected_state. - STOPPED_WAITING, // Done with the waiting. - ALL_DONE, // Done with waiting for STOPPED_WAITING. -}; - -enum CheckResponseState { - UNKNOWN, - SUCCESSFUL, // CheckResponse was successful. - FAILED, // CheckResponse has failed. -}; - -// This class helps to track and manipulate thread state during tests. This -// class also has utility method to simulate hanging of watched thread by making -// the watched thread wait for a very long time by posting a task on watched -// thread that keeps it busy. It also has an utility method to block running of -// tests until ThreadWatcher object's post-condition state changes to an -// expected state. -class CustomThreadWatcher : public ThreadWatcher { - public: - State thread_watcher_state_; - // Wait state may be accessed from VeryLongMethod on another thread. - base::Lock wait_state_lock_; - base::ConditionVariable wait_state_changed_; - WaitState wait_state_; - CheckResponseState check_response_state_; - uint64_t ping_sent_; - uint64_t pong_received_; - int32_t success_response_; - int32_t failed_response_; - base::TimeTicks saved_ping_time_; - uint64_t saved_ping_sequence_number_; - base::RepeatingClosure on_state_changed_; - - CustomThreadWatcher(const BrowserThread::ID thread_id, - const std::string thread_name, - const base::TimeDelta& sleep_time, - const base::TimeDelta& unresponsive_time) - : ThreadWatcher(WatchingParams(thread_id, - thread_name, - sleep_time, - unresponsive_time, - ThreadWatcherList::kUnresponsiveCount, - true)), - thread_watcher_state_(INITIALIZED), - wait_state_changed_(&wait_state_lock_), - wait_state_(UNINITIALIZED), - check_response_state_(UNKNOWN), - ping_sent_(0), - pong_received_(0), - success_response_(0), - failed_response_(0), - saved_ping_time_(base::TimeTicks::Now()), - saved_ping_sequence_number_(0) {} - - State UpdateState(State new_state) { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - State old_state = thread_watcher_state_; - if (old_state != DEACTIVATED) - thread_watcher_state_ = new_state; - if (new_state == SENT_PING) - ++ping_sent_; - if (new_state == RECEIVED_PONG) - ++pong_received_; - saved_ping_time_ = ping_time(); - saved_ping_sequence_number_ = ping_sequence_number(); - OnStateChanged(); - return old_state; - } - - void UpdateWaitState(WaitState new_state) { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - { - base::AutoLock auto_lock(wait_state_lock_); - wait_state_ = new_state; - } - wait_state_changed_.Broadcast(); - OnStateChanged(); - } - - void ActivateThreadWatching() override { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - State old_state = UpdateState(ACTIVATED); - EXPECT_EQ(old_state, INITIALIZED); - ThreadWatcher::ActivateThreadWatching(); - } - - void DeActivateThreadWatching() override { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - State old_state = UpdateState(DEACTIVATED); - EXPECT_TRUE(old_state == ACTIVATED || old_state == SENT_PING || - old_state == RECEIVED_PONG); - ThreadWatcher::DeActivateThreadWatching(); - } - - void PostPingMessage() override { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - State old_state = UpdateState(SENT_PING); - EXPECT_TRUE(old_state == ACTIVATED || old_state == RECEIVED_PONG); - ThreadWatcher::PostPingMessage(); - } - - void OnPongMessage(uint64_t ping_sequence_number) override { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - State old_state = UpdateState(RECEIVED_PONG); - EXPECT_TRUE(old_state == SENT_PING || old_state == DEACTIVATED); - ThreadWatcher::OnPongMessage(ping_sequence_number); - } - - void OnCheckResponsiveness(uint64_t ping_sequence_number) override { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - ThreadWatcher::OnCheckResponsiveness(ping_sequence_number); - if (responsive_) { - ++success_response_; - check_response_state_ = SUCCESSFUL; - } else { - ++failed_response_; - check_response_state_ = FAILED; - } - OnStateChanged(); - } - - void WaitForWaitStateChange(base::TimeDelta wait_time, - WaitState expected_state) { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - base::RunLoop run_loop(base::RunLoop::Type::kNestableTasksAllowed); - base::RepeatingClosure quit_closure = run_loop.QuitClosure(); - on_state_changed_ = base::BindRepeating( - [](CustomThreadWatcher* watcher, base::RepeatingClosure quit_closure, - WaitState expected_state) { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - // No need to acquire wait_state_lock_ since we're on the same thread - // that modifies wait_state_. - if (watcher->wait_state_ == expected_state) - quit_closure.Run(); - }, - base::Unretained(this), quit_closure, expected_state); - base::CancelableOnceClosure timeout_closure(base::BindOnce( - [](base::OnceClosure quit_closure) { - ADD_FAILURE() << "WaitForWaitStateChange timed out"; - std::move(quit_closure).Run(); - }, - quit_closure)); - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, timeout_closure.callback(), wait_time); - run_loop.Run(); - on_state_changed_.Reset(); - } - - // May be called on any thread other than the WatchDogThread. - void BusyWaitForWaitStateChange(base::TimeDelta wait_time, - WaitState expected_state) { - DCHECK(!WatchDogThread::CurrentlyOnWatchDogThread()); - TimeTicks end_time = TimeTicks::Now() + wait_time; - { - base::AutoLock auto_lock(wait_state_lock_); - while (wait_state_ != expected_state && TimeTicks::Now() < end_time) - wait_state_changed_.TimedWait(end_time - TimeTicks::Now()); - } - } - - void VeryLongMethod(base::TimeDelta wait_time) { - DCHECK(!WatchDogThread::CurrentlyOnWatchDogThread()); - // ThreadWatcher tasks should not be allowed to execute while we're waiting, - // so hog the thread until the state changes. - BusyWaitForWaitStateChange(wait_time, STOPPED_WAITING); - WatchDogThread::PostTask( - FROM_HERE, base::BindRepeating(&CustomThreadWatcher::UpdateWaitState, - base::Unretained(this), ALL_DONE)); - } - - State WaitForStateChange(const base::TimeDelta& wait_time, - State expected_state) { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - UpdateWaitState(STARTED_WAITING); - - // Keep the watch dog thread looping until the state changes to the - // expected_state or until wait_time elapses enough times for the - // unresponsive threshold to be reached. - base::RunLoop run_loop(base::RunLoop::Type::kNestableTasksAllowed); - base::RepeatingClosure quit_closure = run_loop.QuitClosure(); - State exit_state = INITIALIZED; - on_state_changed_ = base::BindRepeating( - [](CustomThreadWatcher* watcher, base::RepeatingClosure quit_closure, - State expected_state, State* exit_state) { - *exit_state = watcher->thread_watcher_state_; - if (watcher->thread_watcher_state_ == expected_state) - quit_closure.Run(); - }, - base::Unretained(this), quit_closure, expected_state, - base::Unretained(&exit_state)); - base::CancelableOnceClosure timeout_closure(base::BindOnce( - [](base::OnceClosure quit_closure) { std::move(quit_closure).Run(); }, - quit_closure)); - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, timeout_closure.callback(), - wait_time * unresponsive_threshold_); - run_loop.Run(); - on_state_changed_.Reset(); - - UpdateWaitState(STOPPED_WAITING); - return exit_state; - } - - CheckResponseState WaitForCheckResponse(const base::TimeDelta& wait_time, - CheckResponseState expected_state) { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - UpdateWaitState(STARTED_WAITING); - - // Keep the watch dog thread looping until the state changes to the - // expected_state or until wait_time elapses enough times for the - // unresponsive threshold to be reached. - base::RunLoop run_loop(base::RunLoop::Type::kNestableTasksAllowed); - base::RepeatingClosure quit_closure = run_loop.QuitClosure(); - CheckResponseState exit_state = UNKNOWN; - on_state_changed_ = base::BindRepeating( - [](CustomThreadWatcher* watcher, base::RepeatingClosure quit_closure, - CheckResponseState expected_state, CheckResponseState* exit_state) { - *exit_state = watcher->check_response_state_; - if (watcher->check_response_state_ == expected_state) - quit_closure.Run(); - }, - base::Unretained(this), quit_closure, expected_state, - base::Unretained(&exit_state)); - base::CancelableOnceClosure timeout_closure(base::BindOnce( - [](base::OnceClosure quit_closure) { std::move(quit_closure).Run(); }, - quit_closure)); - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, timeout_closure.callback(), - wait_time * unresponsive_threshold_); - run_loop.Run(); - on_state_changed_.Reset(); - - UpdateWaitState(STOPPED_WAITING); - return exit_state; - } - - void OnStateChanged() { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - if (on_state_changed_) - on_state_changed_.Run(); - } -}; - -class ThreadWatcherTest : public ::testing::Test { - public: - static constexpr base::TimeDelta kSleepTime = base::Milliseconds(50); - static constexpr base::TimeDelta kUnresponsiveTime = base::Milliseconds(500); - static constexpr char kIOThreadName[] = "IO"; - static constexpr char kUIThreadName[] = "UI"; - static constexpr char kCrashOnHangThreadNames[] = "UI,IO"; - static constexpr char kCrashOnHangThreadData[] = "UI:12,IO:12"; - - raw_ptr<CustomThreadWatcher> io_watcher_; - raw_ptr<CustomThreadWatcher> ui_watcher_; - raw_ptr<ThreadWatcherList> thread_watcher_list_; - - template <typename... TaskEnvironmentTraits> - ThreadWatcherTest(base::test::TaskEnvironment::TimeSource time_source = - base::test::TaskEnvironment::TimeSource::SYSTEM_TIME) - : task_environment_(content::BrowserTaskEnvironment::REAL_IO_THREAD, - time_source), - setup_complete_(&lock_), - initialized_(false) { - crash_reporter::InitializeCrashKeysForTesting(); - - // Make sure UI and IO threads are started and ready. - task_environment_.RunIOThreadUntilIdle(); - - watchdog_thread_ = std::make_unique<WatchDogThread>(); - watchdog_thread_->StartAndWaitForTesting(); - - WatchDogThread::PostTask( - FROM_HERE, base::BindRepeating(&ThreadWatcherTest::SetUpObjects, - base::Unretained(this))); - - WaitForSetUp(base::Minutes(1)); - } - - void SetUpObjects() { - DCHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - - // Setup the registry for thread watchers. - thread_watcher_list_ = new ThreadWatcherList(); - - // Create thread watcher object for the IO thread. - std::unique_ptr<CustomThreadWatcher> io_watcher(new CustomThreadWatcher( - BrowserThread::IO, kIOThreadName, kSleepTime, kUnresponsiveTime)); - io_watcher_ = io_watcher.get(); - ThreadWatcher* registered_io_watcher = - ThreadWatcherList::Register(std::move(io_watcher)); - EXPECT_EQ(io_watcher_, registered_io_watcher); - EXPECT_EQ(io_watcher_, thread_watcher_list_->Find(BrowserThread::IO)); - - // Create thread watcher object for the UI thread. - std::unique_ptr<CustomThreadWatcher> ui_watcher(new CustomThreadWatcher( - BrowserThread::UI, kUIThreadName, kSleepTime, kUnresponsiveTime)); - ui_watcher_ = ui_watcher.get(); - ThreadWatcher* registered_ui_watcher = - ThreadWatcherList::Register(std::move(ui_watcher)); - EXPECT_EQ(ui_watcher_, registered_ui_watcher); - EXPECT_EQ(ui_watcher_, thread_watcher_list_->Find(BrowserThread::UI)); - - { - base::AutoLock lock(lock_); - initialized_ = true; - } - setup_complete_.Signal(); - } - - void WaitForSetUp(base::TimeDelta wait_time) { - DCHECK(!WatchDogThread::CurrentlyOnWatchDogThread()); - TimeTicks end_time = TimeTicks::Now() + wait_time; - { - base::AutoLock auto_lock(lock_); - while (!initialized_ && TimeTicks::Now() < end_time) - setup_complete_.TimedWait(end_time - TimeTicks::Now()); - } - } - - ThreadWatcherTest(const ThreadWatcherTest&) = delete; - ThreadWatcherTest& operator=(const ThreadWatcherTest&) = delete; - - ~ThreadWatcherTest() override { - ThreadWatcherList::DeleteAll(); - io_watcher_ = nullptr; - ui_watcher_ = nullptr; - watchdog_thread_.reset(); - thread_watcher_list_ = nullptr; - - crash_reporter::ResetCrashKeysForTesting(); - } - - protected: - content::BrowserTaskEnvironment task_environment_; - base::Lock lock_; - base::ConditionVariable setup_complete_; - bool initialized_; - std::unique_ptr<WatchDogThread> watchdog_thread_; -}; - -class ThreadWatcherTestWithMockTime : public ThreadWatcherTest { - public: - ThreadWatcherTestWithMockTime() - : ThreadWatcherTest(base::test::TaskEnvironment::TimeSource::MOCK_TIME) {} -}; - -// Verify that the "seconds-since-last-memory-pressure" crash key is written -// correctly. -// -// Note: It is not possible to split this test in 3 smaller tests, because -// reusing the same crash key in multiple unit tests is broken with breakpad. -// https://crbug.com/1041106. -TEST_F(ThreadWatcherTestWithMockTime, MemoryPressureCrashKey) { - // The "seconds-since-last-memory-pressure" crash key should hold "No memory - // pressure" when there has never been any memory pressure signal. - watchdog_thread_->PostTask( - FROM_HERE, base::BindLambdaForTesting([&]() { - ui_watcher_->SetTimeSinceLastCriticalMemoryPressureCrashKey(); - EXPECT_EQ("No memory pressure", - crash_reporter::GetCrashKeyValue( - "seconds-since-last-memory-pressure")); - })); - - watchdog_thread_->FlushForTesting(); - - // The "seconds-since-last-memory-pressure" crash key should hold "No memory - // pressure" when there has been a MODERATE memory pressure signal, but no - // CRITICAL memory pressure signal. - base::MemoryPressureListener::SimulatePressureNotification( - base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE); - watchdog_thread_->FlushForTesting(); - - watchdog_thread_->PostTask( - FROM_HERE, base::BindLambdaForTesting([&]() { - ui_watcher_->SetTimeSinceLastCriticalMemoryPressureCrashKey(); - EXPECT_EQ("No memory pressure", - crash_reporter::GetCrashKeyValue( - "seconds-since-last-memory-pressure")); - })); - - watchdog_thread_->FlushForTesting(); - - // The "seconds-since-last-memory-pressure" crash key should hold "4" when set - // 4 seconds after a CRITICAL memory pressure signal. - base::MemoryPressureListener::SimulatePressureNotification( - base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL); - watchdog_thread_->FlushForTesting(); - - task_environment_.FastForwardBy(base::Seconds(4)); - watchdog_thread_->PostTask( - FROM_HERE, base::BindLambdaForTesting([&]() { - ui_watcher_->SetTimeSinceLastCriticalMemoryPressureCrashKey(); - EXPECT_EQ("4", crash_reporter::GetCrashKeyValue( - "seconds-since-last-memory-pressure")); - })); - - watchdog_thread_->FlushForTesting(); -} - -// Test fixture that runs a test body on the WatchDogThread. Subclasses override -// TestBodyOnWatchDogThread() and should call RunTestOnWatchDogThread() in their -// TEST_F() declaration. -class ThreadWatcherTestOnWatchDogThread : public ThreadWatcherTest { - public: - ThreadWatcherTestOnWatchDogThread() - : test_body_run_loop_(base::RunLoop::Type::kNestableTasksAllowed) {} - - protected: - void RunTestOnWatchDogThread() { - WatchDogThread::PostTask(FROM_HERE, - base::BindRepeating( - [](ThreadWatcherTestOnWatchDogThread* test) { - test->TestBodyOnWatchDogThread(); - test->test_body_run_loop_.Quit(); - }, - base::Unretained(this))); - test_body_run_loop_.Run(); - } - - virtual void TestBodyOnWatchDogThread() = 0; - - protected: - base::RunLoop test_body_run_loop_; -}; - -// Declare storage for ThreadWatcherTest's static constants. -constexpr base::TimeDelta ThreadWatcherTest::kSleepTime; -constexpr base::TimeDelta ThreadWatcherTest::kUnresponsiveTime; -constexpr char ThreadWatcherTest::kIOThreadName[]; -constexpr char ThreadWatcherTest::kUIThreadName[]; -constexpr char ThreadWatcherTest::kCrashOnHangThreadNames[]; -constexpr char ThreadWatcherTest::kCrashOnHangThreadData[]; - -TEST_F(ThreadWatcherTest, ThreadNamesOnlyArgs) { - // Setup command_line arguments. - base::CommandLine command_line(base::CommandLine::NO_PROGRAM); - command_line.AppendSwitchASCII(switches::kCrashOnHangThreads, - kCrashOnHangThreadNames); - - // Parse command_line arguments. - ThreadWatcherList::CrashOnHangThreadMap crash_on_hang_threads; - uint32_t unresponsive_threshold; - ThreadWatcherList::ParseCommandLine(command_line, - &unresponsive_threshold, - &crash_on_hang_threads); - - // Verify the data. - base::CStringTokenizer tokens( - kCrashOnHangThreadNames, - kCrashOnHangThreadNames + (base::size(kCrashOnHangThreadNames) - 1), ","); - while (tokens.GetNext()) { - std::vector<base::StringPiece> values = base::SplitStringPiece( - tokens.token_piece(), ":", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); - std::string thread_name(values[0]); - - auto it = crash_on_hang_threads.find(thread_name); - bool crash_on_hang = (it != crash_on_hang_threads.end()); - EXPECT_TRUE(crash_on_hang); - EXPECT_LT(0u, it->second); - } -} - -TEST_F(ThreadWatcherTest, CrashOnHangThreadsAllArgs) { - // Setup command_line arguments. - base::CommandLine command_line(base::CommandLine::NO_PROGRAM); - command_line.AppendSwitchASCII(switches::kCrashOnHangThreads, - kCrashOnHangThreadData); - - // Parse command_line arguments. - ThreadWatcherList::CrashOnHangThreadMap crash_on_hang_threads; - uint32_t unresponsive_threshold; - ThreadWatcherList::ParseCommandLine(command_line, - &unresponsive_threshold, - &crash_on_hang_threads); - - // Verify the data. - base::CStringTokenizer tokens( - kCrashOnHangThreadData, - kCrashOnHangThreadData + (base::size(kCrashOnHangThreadData) - 1), ","); - while (tokens.GetNext()) { - std::vector<base::StringPiece> values = base::SplitStringPiece( - tokens.token_piece(), ":", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); - std::string thread_name(values[0]); - - auto it = crash_on_hang_threads.find(thread_name); - - bool crash_on_hang = (it != crash_on_hang_threads.end()); - EXPECT_TRUE(crash_on_hang); - - uint32_t crash_unresponsive_threshold = it->second; - uint32_t crash_on_unresponsive_seconds = - ThreadWatcherList::kUnresponsiveSeconds * crash_unresponsive_threshold; - EXPECT_EQ(12u, crash_on_unresponsive_seconds); - } -} - -// Test registration. When thread_watcher_list_ goes out of scope after -// TearDown, all thread watcher objects will be deleted. -class ThreadWatcherTestRegistration : public ThreadWatcherTestOnWatchDogThread { - protected: - void TestBodyOnWatchDogThread() override { - // Check ThreadWatcher object has all correct parameters. - EXPECT_EQ(BrowserThread::IO, io_watcher_->thread_id()); - EXPECT_EQ(kIOThreadName, io_watcher_->thread_name()); - EXPECT_EQ(kSleepTime, io_watcher_->sleep_time()); - EXPECT_EQ(kUnresponsiveTime, io_watcher_->unresponsive_time()); - EXPECT_FALSE(io_watcher_->active()); - - // Check ThreadWatcher object of watched UI thread has correct data. - EXPECT_EQ(BrowserThread::UI, ui_watcher_->thread_id()); - EXPECT_EQ(kUIThreadName, ui_watcher_->thread_name()); - EXPECT_EQ(kSleepTime, ui_watcher_->sleep_time()); - EXPECT_EQ(kUnresponsiveTime, ui_watcher_->unresponsive_time()); - EXPECT_FALSE(ui_watcher_->active()); - } -}; - -TEST_F(ThreadWatcherTestRegistration, RunTest) { - RunTestOnWatchDogThread(); -} - -// Test ActivateThreadWatching and DeActivateThreadWatching of IO thread. This -// method also checks that pong message was sent by the watched thread and pong -// message was received by the WatchDogThread. It also checks that -// OnCheckResponsiveness has verified the ping-pong mechanism and the watched -// thread is not hung. -class ThreadWatcherTestThreadResponding - : public ThreadWatcherTestOnWatchDogThread { - protected: - void TestBodyOnWatchDogThread() override { - TimeTicks time_before_ping = TimeTicks::Now(); - // Activate watching IO thread. - io_watcher_->ActivateThreadWatching(); - - // Activate would have started ping/pong messaging. Expect at least one - // ping/pong messaging sequence to happen. - io_watcher_->WaitForStateChange(kSleepTime + base::Minutes(1), - RECEIVED_PONG); - EXPECT_GT(io_watcher_->ping_sent_, static_cast<uint64_t>(0)); - EXPECT_GT(io_watcher_->pong_received_, static_cast<uint64_t>(0)); - EXPECT_TRUE(io_watcher_->active()); - EXPECT_GE(io_watcher_->saved_ping_time_, time_before_ping); - EXPECT_GE(io_watcher_->saved_ping_sequence_number_, - static_cast<uint64_t>(0)); - - // Verify watched thread is responding with ping/pong messaging. - io_watcher_->WaitForCheckResponse(kUnresponsiveTime + base::Minutes(1), - SUCCESSFUL); - EXPECT_GT(io_watcher_->success_response_, 0); - EXPECT_EQ(io_watcher_->failed_response_, 0); - - // DeActivate thread watching for shutdown. - io_watcher_->DeActivateThreadWatching(); - } -}; - -TEST_F(ThreadWatcherTestThreadResponding, RunTest) { - RunTestOnWatchDogThread(); -} - -// This test posts a task on watched thread that takes very long time (this is -// to simulate hanging of watched thread). It then checks for -// OnCheckResponsiveness raising an alert (OnCheckResponsiveness returns false -// if the watched thread is not responding). -class ThreadWatcherTestThreadNotResponding - : public ThreadWatcherTestOnWatchDogThread { - protected: - void TestBodyOnWatchDogThread() override { - // Simulate hanging of watched thread by making the watched thread wait for - // a very long time by posting a task on watched thread that keeps it busy. - // It is safe to use base::Unretained because test is waiting for the method - // to finish. - content::GetIOThreadTaskRunner({})->PostTask( - FROM_HERE, - base::BindOnce(&CustomThreadWatcher::VeryLongMethod, - base::Unretained(io_watcher_), kUnresponsiveTime * 10)); - - // Activate thread watching. - io_watcher_->ActivateThreadWatching(); - - // Verify watched thread is not responding for ping messages. - io_watcher_->WaitForCheckResponse(kUnresponsiveTime + base::Minutes(1), - FAILED); - EXPECT_EQ(io_watcher_->success_response_, 0); - EXPECT_GT(io_watcher_->failed_response_, 0); - - // DeActivate thread watching for shutdown. - io_watcher_->DeActivateThreadWatching(); - - // Wait for the io_watcher_'s VeryLongMethod to finish. - io_watcher_->WaitForWaitStateChange(kUnresponsiveTime * 10, ALL_DONE); - } -}; - -TEST_F(ThreadWatcherTestThreadNotResponding, RunTest) { - RunTestOnWatchDogThread(); -} - -// Test watching of multiple threads with all threads not responding. -class ThreadWatcherTestMultipleThreadsResponding - : public ThreadWatcherTestOnWatchDogThread { - protected: - void TestBodyOnWatchDogThread() override { - // Check for UI thread to perform ping/pong messaging. - ui_watcher_->ActivateThreadWatching(); - - // Check for IO thread to perform ping/pong messaging. - io_watcher_->ActivateThreadWatching(); - - // Verify UI thread is responding with ping/pong messaging. - ui_watcher_->WaitForCheckResponse(kUnresponsiveTime + base::Minutes(1), - SUCCESSFUL); - EXPECT_GT(ui_watcher_->ping_sent_, static_cast<uint64_t>(0)); - EXPECT_GT(ui_watcher_->pong_received_, static_cast<uint64_t>(0)); - EXPECT_GE(ui_watcher_->ping_sequence_number(), static_cast<uint64_t>(0)); - EXPECT_GT(ui_watcher_->success_response_, 0); - EXPECT_EQ(ui_watcher_->failed_response_, 0); - - // Verify IO thread is responding with ping/pong messaging. - io_watcher_->WaitForCheckResponse(kUnresponsiveTime + base::Minutes(1), - SUCCESSFUL); - EXPECT_GT(io_watcher_->ping_sent_, static_cast<uint64_t>(0)); - EXPECT_GT(io_watcher_->pong_received_, static_cast<uint64_t>(0)); - EXPECT_GE(io_watcher_->ping_sequence_number(), static_cast<uint64_t>(0)); - EXPECT_GT(io_watcher_->success_response_, 0); - EXPECT_EQ(io_watcher_->failed_response_, 0); - - // DeActivate thread watching for shutdown. - io_watcher_->DeActivateThreadWatching(); - ui_watcher_->DeActivateThreadWatching(); - } -}; - -TEST_F(ThreadWatcherTestMultipleThreadsResponding, RunTest) { - RunTestOnWatchDogThread(); -} - -// Test watching of multiple threads with one of the threads not responding. -class ThreadWatcherTestMultipleThreadsNotResponding - : public ThreadWatcherTestOnWatchDogThread { - protected: - void TestBodyOnWatchDogThread() override { - // Simulate hanging of watched thread by making the watched thread wait for - // a very long time by posting a task on watched thread that keeps it busy. - // It is safe to use base::Unretained because test is waiting for the method - // to finish. - content::GetIOThreadTaskRunner({})->PostTask( - FROM_HERE, - base::BindOnce(&CustomThreadWatcher::VeryLongMethod, - base::Unretained(io_watcher_), kUnresponsiveTime * 10)); - - // Activate watching of UI thread. - ui_watcher_->ActivateThreadWatching(); - - // Activate watching of IO thread. - io_watcher_->ActivateThreadWatching(); - - // Verify UI thread is responding with ping/pong messaging. - ui_watcher_->WaitForCheckResponse(kUnresponsiveTime + base::Minutes(1), - SUCCESSFUL); - EXPECT_GT(ui_watcher_->success_response_, 0); - EXPECT_EQ(ui_watcher_->failed_response_, 0); - - // Verify IO thread is not responding for ping messages. - io_watcher_->WaitForCheckResponse(kUnresponsiveTime + base::Minutes(1), - FAILED); - EXPECT_EQ(io_watcher_->success_response_, 0); - EXPECT_GT(io_watcher_->failed_response_, 0); - - // DeActivate thread watching for shutdown. - io_watcher_->DeActivateThreadWatching(); - ui_watcher_->DeActivateThreadWatching(); - - // Wait for the io_watcher_'s VeryLongMethod to finish. - io_watcher_->WaitForWaitStateChange(kUnresponsiveTime * 10, ALL_DONE); - } -}; - -TEST_F(ThreadWatcherTestMultipleThreadsNotResponding, RunTest) { - RunTestOnWatchDogThread(); -} - -class ThreadWatcherListTest : public ::testing::Test { - protected: - ThreadWatcherListTest() - : done_(&lock_), - state_available_(false), - has_thread_watcher_list_(false), - stopped_(false) {} - - void ReadStateOnWatchDogThread() { - CHECK(WatchDogThread::CurrentlyOnWatchDogThread()); - { - base::AutoLock auto_lock(lock_); - has_thread_watcher_list_ = - ThreadWatcherList::g_thread_watcher_list_ != nullptr; - stopped_ = ThreadWatcherList::g_stopped_; - state_available_ = true; - } - done_.Signal(); - } - - void CheckState(bool has_thread_watcher_list, - bool stopped, - const char* const msg) { - CHECK(!WatchDogThread::CurrentlyOnWatchDogThread()); - { - base::AutoLock auto_lock(lock_); - state_available_ = false; - } - - WatchDogThread::PostTask( - FROM_HERE, - base::BindRepeating(&ThreadWatcherListTest::ReadStateOnWatchDogThread, - base::Unretained(this))); - { - base::AutoLock auto_lock(lock_); - while (!state_available_) - done_.Wait(); - - EXPECT_EQ(has_thread_watcher_list, has_thread_watcher_list_) << msg; - EXPECT_EQ(stopped, stopped_) << msg; - } - } - - content::BrowserTaskEnvironment task_environment_; - base::Lock lock_; - base::ConditionVariable done_; - - bool state_available_; - bool has_thread_watcher_list_; - bool stopped_; -}; - -TEST_F(ThreadWatcherListTest, Restart) { - ThreadWatcherList::g_initialize_delay_seconds = 1; - - std::unique_ptr<WatchDogThread> watchdog_thread_(new WatchDogThread()); - watchdog_thread_->StartAndWaitForTesting(); - - // See http://crbug.com/347887. - // StartWatchingAll() will PostDelayedTask to create g_thread_watcher_list_, - // whilst StopWatchingAll() will just PostTask to destroy it. - // Ensure that when Stop is called, Start will NOT create - // g_thread_watcher_list_ later on. - ThreadWatcherList::StartWatchingAll(*base::CommandLine::ForCurrentProcess()); - ThreadWatcherList::StopWatchingAll(); - { - base::RunLoop run_loop; - content::GetUIThreadTaskRunner({})->PostDelayedTask( - FROM_HERE, run_loop.QuitWhenIdleClosure(), - base::Seconds(ThreadWatcherList::g_initialize_delay_seconds)); - run_loop.Run(); - } - - CheckState(false /* has_thread_watcher_list */, true /* stopped */, - "Start / Stopped"); - - // Proceed with just |StartWatchingAll| and ensure it'll be started. - ThreadWatcherList::StartWatchingAll(*base::CommandLine::ForCurrentProcess()); - { - base::RunLoop run_loop; - content::GetUIThreadTaskRunner({})->PostDelayedTask( - FROM_HERE, run_loop.QuitWhenIdleClosure(), - base::Seconds(ThreadWatcherList::g_initialize_delay_seconds + 1)); - run_loop.Run(); - } - - CheckState(true /* has_thread_watcher_list */, false /* stopped */, - "Started"); - - // Finally, StopWatchingAll() must stop. - ThreadWatcherList::StopWatchingAll(); - { - base::RunLoop run_loop; - content::GetUIThreadTaskRunner({})->PostDelayedTask( - FROM_HERE, run_loop.QuitWhenIdleClosure(), - base::Seconds(ThreadWatcherList::g_initialize_delay_seconds)); - run_loop.Run(); - } - - CheckState(false /* has_thread_watcher_list */, true /* stopped */, - "Stopped"); -}
diff --git a/chrome/browser/password_manager/android/BUILD.gn b/chrome/browser/password_manager/android/BUILD.gn index 41e225a05..67c4331 100644 --- a/chrome/browser/password_manager/android/BUILD.gn +++ b/chrome/browser/password_manager/android/BUILD.gn
@@ -121,6 +121,7 @@ "//base:base_java", "//base:base_java_test_support", "//base:base_junit_test_support", + "//chrome/browser/flags:java", "//chrome/browser/profiles/android:java", "//chrome/browser/signin/services/android:java", "//chrome/browser/sync/android:java",
diff --git a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerHelper.java b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerHelper.java index 04e8114..c6507cd 100644 --- a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerHelper.java +++ b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerHelper.java
@@ -11,6 +11,7 @@ import android.os.SystemClock; import org.chromium.base.metrics.RecordHistogram; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.password_manager.CredentialManagerLauncher.CredentialManagerError; import org.chromium.chrome.browser.sync.SyncService; import org.chromium.components.browser_ui.settings.SettingsLauncher; @@ -137,6 +138,10 @@ PendingIntent intent, long startTimeMs, boolean forAccount) { recordSuccessMetrics(SystemClock.elapsedRealtime() - startTimeMs, forAccount); + if (!ChromeFeatureList.isEnabled(ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_ANDROID)) { + return; + } + boolean launchIntentSuccessfully = true; try { intent.send();
diff --git a/chrome/browser/password_manager/android/junit/src/org/chromium/chrome/browser/password_manager/PasswordManagerHelperTest.java b/chrome/browser/password_manager/android/junit/src/org/chromium/chrome/browser/password_manager/PasswordManagerHelperTest.java index ce50a52..eff5ed7 100644 --- a/chrome/browser/password_manager/android/junit/src/org/chromium/chrome/browser/password_manager/PasswordManagerHelperTest.java +++ b/chrome/browser/password_manager/android/junit/src/org/chromium/chrome/browser/password_manager/PasswordManagerHelperTest.java
@@ -8,6 +8,7 @@ import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -16,7 +17,9 @@ import org.junit.Assert; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TestRule; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -30,8 +33,12 @@ import org.chromium.base.metrics.test.ShadowRecordHistogram; import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.util.Batch; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.password_manager.CredentialManagerLauncher.CredentialManagerError; import org.chromium.chrome.browser.sync.SyncService; +import org.chromium.chrome.test.util.browser.Features; +import org.chromium.chrome.test.util.browser.Features.DisableFeatures; +import org.chromium.chrome.test.util.browser.Features.EnableFeatures; import org.chromium.components.browser_ui.settings.SettingsLauncher; import org.chromium.components.signin.base.CoreAccountInfo; import org.chromium.components.sync.ModelType; @@ -62,6 +69,9 @@ private static final String LOCAL_LAUNCH_CREDENTIAL_MANAGER_SUCCESS_HISTOGRAM = "PasswordManager.CredentialManager.LocalProfile.Launch.Success"; + @Rule + public TestRule mProcessor = new Features.JUnitProcessor(); + @Mock private CredentialManagerLauncher mCredentialManagerLauncherMock; @@ -169,6 +179,7 @@ } @Test + @EnableFeatures(ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_ANDROID) public void testRecordsSuccessMetricsForAccountIntent() { chooseToSyncPasswordsWithoutCustomPassphrase(); setUpSuccessfulIntentFetchingForAccount(); @@ -214,6 +225,7 @@ } @Test + @EnableFeatures(ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_ANDROID) public void testRecordsMetricsWhenAccountIntentFails() throws CanceledException { chooseToSyncPasswordsWithoutCustomPassphrase(); setUpSuccessfulIntentFetchingForAccount(); @@ -238,6 +250,7 @@ } @Test + @EnableFeatures(ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_ANDROID) public void testRecordsSuccessMetricsForLocalIntent() { when(mSyncServiceMock.isSyncFeatureEnabled()).thenReturn(false); setUpSuccessfulIntentFetchingForLocal(); @@ -282,6 +295,7 @@ } @Test + @EnableFeatures(ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_ANDROID) public void testRecordsMetricsWhenLocalIntentFails() throws CanceledException { when(mSyncServiceMock.isSyncFeatureEnabled()).thenReturn(false); setUpSuccessfulIntentFetchingForLocal(); @@ -304,6 +318,16 @@ LOCAL_LAUNCH_CREDENTIAL_MANAGER_SUCCESS_HISTOGRAM, 0)); } + @Test + @DisableFeatures(ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_ANDROID) + public void testDoesntCallIntentIfFeatureIsDisabled() throws CanceledException { + setUpSuccessfulIntentFetchingForAccount(); + PasswordManagerHelper.showPasswordSettings(ContextUtils.getApplicationContext(), + ManagePasswordsReferrer.CHROME_SETTINGS, mSettingsLauncherMock, + mCredentialManagerLauncherMock, mSyncServiceMock); + verify(mPendingIntentMock, never()).send(); + } + private void chooseToSyncPasswordsWithoutCustomPassphrase() { when(mSyncServiceMock.isSyncFeatureEnabled()).thenReturn(true); when(mSyncServiceMock.getChosenDataTypes())
diff --git a/chrome/browser/performance_manager/policies/working_set_trimmer_policy_chromeos_unittest.cc b/chrome/browser/performance_manager/policies/working_set_trimmer_policy_chromeos_unittest.cc index 919991b..4cc36ec6 100644 --- a/chrome/browser/performance_manager/policies/working_set_trimmer_policy_chromeos_unittest.cc +++ b/chrome/browser/performance_manager/policies/working_set_trimmer_policy_chromeos_unittest.cc
@@ -6,13 +6,13 @@ #include <memory> +#include "ash/components/arc/mojom/process.mojom.h" #include "base/memory/memory_pressure_listener.h" #include "base/test/bind.h" #include "base/test/metrics/histogram_tester.h" #include "chrome/browser/ash/arc/process/arc_process.h" #include "chrome/browser/ash/arc/process/arc_process_service.h" #include "chrome/browser/performance_manager/policies/policy_features.h" -#include "components/arc/mojom/process.mojom.h" #include "components/performance_manager/graph/graph_impl_operations.h" #include "components/performance_manager/graph/page_node_impl.h" #include "components/performance_manager/graph/process_node_impl.h"
diff --git a/chrome/browser/picture_in_picture/picture_in_picture_window_controller_browsertest.cc b/chrome/browser/picture_in_picture/picture_in_picture_window_controller_browsertest.cc index c674cfe..8d8dc5d 100644 --- a/chrome/browser/picture_in_picture/picture_in_picture_window_controller_browsertest.cc +++ b/chrome/browser/picture_in_picture/picture_in_picture_window_controller_browsertest.cc
@@ -1612,10 +1612,8 @@ content::test::FencedFrameTestHelper fenced_frame_helper_; }; -// TODO(crbug.com/1269935): Make this test work properly with -// FencedFrameTestHelper and re-enable the test. IN_PROC_BROWSER_TEST_F(PictureInPictureWindowControllerFencedFrameBrowserTest, - DISABLED_FencedFrameShouldNotCloseWindow) { + FencedFrameShouldNotCloseWindow) { GURL test_page_url = embedded_test_server()->GetURL( "example.com", "/media/picture-in-picture/window-size.html"); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), test_page_url)); @@ -1632,17 +1630,12 @@ EXPECT_TRUE(window_controller()->GetWindowForTesting()->IsVisible()); // Navigation to fenced frame page should not close Picture-in-Picture window. - GURL fenced_frame_url = embedded_test_server()->GetURL( - "example.com", "/media/picture-in-picture/window-size.html"); + GURL fenced_frame_url = + embedded_test_server()->GetURL("/fenced_frames/title1.html"); content::RenderFrameHost* fenced_frame_host = fenced_frame_test_helper().CreateFencedFrame( active_web_contents->GetMainFrame(), fenced_frame_url); - EXPECT_TRUE(window_controller()->GetWindowForTesting()->IsVisible()); - - // Picture-in-Picture window should not be closed when navigating the fenced - // frame as the user has not navigated away from the primary page. - fenced_frame_test_helper().NavigateFrameInFencedFrameTree(fenced_frame_host, - fenced_frame_url); + EXPECT_NE(nullptr, fenced_frame_host); EXPECT_TRUE(window_controller()->GetWindowForTesting()->IsVisible()); }
diff --git a/chrome/browser/printing/print_backend_service_manager.h b/chrome/browser/printing/print_backend_service_manager.h index 2b99a615..7cb215b 100644 --- a/chrome/browser/printing/print_backend_service_manager.h +++ b/chrome/browser/printing/print_backend_service_manager.h
@@ -37,6 +37,8 @@ // Register as a client of PrintBackendServiceManager. This acts as a signal // of impending activity enabling possible optimizations within the manager. + // Returns an ID which the caller is to use with `UnregisterClient()` once it + // is completed its printing activity. uint32_t RegisterClient(); // Notify the manager that this client is no longer needing print backend
diff --git a/chrome/browser/printing/print_browsertest.cc b/chrome/browser/printing/print_browsertest.cc index 4ce10a19..4846b47b 100644 --- a/chrome/browser/printing/print_browsertest.cc +++ b/chrome/browser/printing/print_browsertest.cc
@@ -5,6 +5,7 @@ #include <algorithm> #include <memory> #include <utility> +#include <vector> #include "base/auto_reset.h" #include "base/bind.h" @@ -72,6 +73,7 @@ #include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" #include "third_party/blink/public/common/features.h" #include "third_party/blink/public/common/scheduler/web_scheduler_tracked_feature.h" +#include "ui/gfx/geometry/size.h" namespace printing { @@ -101,11 +103,16 @@ // TODO(crbug.com/822505) ChromeOS uses different testing setup that isn't // hooked up to make use of `TestPrintingContext` yet. #if !defined(OS_CHROMEOS) -constexpr int kPrinterCapabilitiesMaxCopies = 99; -constexpr int kPrintSettingsCopies = 42; +constexpr int kTestPrintingDpi = 72; +constexpr int kTestPrinterCapabilitiesMaxCopies = 99; +constexpr gfx::Size kTestPrinterCapabilitiesDpi(kTestPrintingDpi, + kTestPrintingDpi); +constexpr int kTestPrintSettingsCopies = 42; -const PrinterBasicInfoOptions kPrintInfoOptions{{"opt1", "123"}, - {"opt2", "456"}}; +const std::vector<gfx::Size> kTestPrinterCapabilitiesDefaultDpis{ + kTestPrinterCapabilitiesDpi}; +const PrinterBasicInfoOptions kTestDummyPrintInfoOptions{{"opt1", "123"}, + {"opt2", "456"}}; #endif // !defined(OS_CHROMEOS) constexpr int kDefaultDocumentCookie = 1234; @@ -381,6 +388,18 @@ TestPrintViewManager& operator=(const TestPrintViewManager&) = delete; ~TestPrintViewManager() override = default; + bool StartPrinting(content::WebContents* contents) { + auto* print_view_manager = TestPrintViewManager::FromWebContents(contents); + if (!print_view_manager) + return false; + + content::RenderFrameHost* rfh_to_use = GetFrameToPrint(contents); + if (!rfh_to_use) + return false; + + return print_view_manager->PrintNow(rfh_to_use); + } + PrintSettings* snooped_settings() { return snooped_settings_.get(); } private: @@ -1619,10 +1638,12 @@ /*display_name=*/"test printer", /*printer_description=*/"A printer for testing.", /*printer_status=*/0, - /*is_default=*/true, kPrintInfoOptions); + /*is_default=*/true, kTestDummyPrintInfoOptions); auto default_caps = std::make_unique<PrinterSemanticCapsAndDefaults>(); - default_caps->copies_max = kPrinterCapabilitiesMaxCopies; + default_caps->copies_max = kTestPrinterCapabilitiesMaxCopies; + default_caps->dpis = kTestPrinterCapabilitiesDefaultDpis; + default_caps->default_dpi = kTestPrinterCapabilitiesDpi; test_backend_->AddValidPrinter( printer_name, std::move(default_caps), std::make_unique<PrinterBasicInfo>(kPrinterInfo)); @@ -1633,6 +1654,46 @@ printer_name); } + void SetUpPrintViewManager(content::WebContents* web_contents) { + web_contents->SetUserData( + PrintViewManager::UserDataKey(), + std::make_unique<TestPrintViewManager>(web_contents)); + } + + void PrintAfterPreviewIsReadyAndLoaded() { + // First invoke the Print Preview dialog with `StartPrint()`. + PrintPreviewObserver print_preview_observer(/*wait_for_loaded=*/true); + StartPrint(browser()->tab_strip_model()->GetActiveWebContents(), + /*print_renderer=*/mojo::NullAssociatedRemote(), + /*print_preview_disabled=*/false, + /*has_selection=*/false); + print_preview_observer.WaitUntilPreviewIsReady(); + + content::WebContents* preview_dialog = + print_preview_observer.GetPrintPreviewDialog(); + ASSERT_TRUE(preview_dialog); + + // Print Preview is completely ready, can now initiate printing. + // This script locates and clicks the Print button. + const char kScript[] = R"( + const button = document.getElementsByTagName('print-preview-app')[0] + .$['sidebar'] + .shadowRoot.querySelector('print-preview-button-strip') + .shadowRoot.querySelector('.action-button'); + button.click();)"; + ASSERT_TRUE(content::ExecuteScript(preview_dialog, kScript)); + WaitUntilCallbackReceived(); + } + + void PrimeForAccessDeniedErrorsInNewDocument() { + test_printing_context_factory_.SetAccessDeniedErrorOnNewDocument( + /*cause_errors=*/true); + } + + mojom::ResultCode start_printing_result() const { + return start_printing_result_; + } + private: class PrintBackendPrintingContextFactoryForTest : public PrintingContextFactoryForTest { @@ -1644,11 +1705,15 @@ std::make_unique<TestPrintingContext>(delegate, skip_system_calls); auto settings = std::make_unique<PrintSettings>(); - settings->set_copies(kPrintSettingsCopies); + settings->set_copies(kTestPrintSettingsCopies); + settings->set_dpi(kTestPrintingDpi); settings->set_device_name( base::ASCIIToUTF16(base::StringPiece(printer_name_))); context->SetDeviceSettings(printer_name_, std::move(settings)); + if (access_denied_errors_for_new_document_) + context->SetNewDocumentBlockedByPermissions(); + return std::move(context); } @@ -1656,8 +1721,13 @@ printer_name_ = printer_name; } + void SetAccessDeniedErrorOnNewDocument(bool cause_errors) { + access_denied_errors_for_new_document_ = cause_errors; + } + private: std::string printer_name_; + bool access_denied_errors_for_new_document_ = false; }; std::unique_ptr<PrintJobWorker> CreatePrintJobWorker(int render_process_id, @@ -1679,7 +1749,8 @@ } void ResetForNoAccessDeniedErrors() { - // TODO(crbug.com/809738) Fill in testing reset for access denied errors. + test_printing_context_factory_.SetAccessDeniedErrorOnNewDocument( + /*cause_errors=*/false); } base::test::ScopedFeatureList feature_list_; @@ -1693,6 +1764,15 @@ mojom::ResultCode start_printing_result_ = mojom::ResultCode::kFailed; }; +class PrintBackendPrintBrowserTestService + : public PrintBackendPrintBrowserTestBase { + public: + PrintBackendPrintBrowserTestService() = default; + ~PrintBackendPrintBrowserTestService() override = default; + + bool UseService() override { return true; } +}; + class PrintBackendPrintBrowserTest : public PrintBackendPrintBrowserTestBase, public testing::WithParamInterface<bool> { public: @@ -1722,7 +1802,7 @@ ASSERT_TRUE(print_view_manager.snooped_settings()); EXPECT_EQ(print_view_manager.snooped_settings()->copies(), - kPrintSettingsCopies); + kTestPrintSettingsCopies); #if defined(OS_LINUX) && defined(USE_CUPS) // Collect just the keys to compare the info options vs. advanced settings. std::vector<std::string> advanced_setting_keys; @@ -1732,13 +1812,55 @@ for (const auto& advanced_setting : advanced_settings) { advanced_setting_keys.push_back(advanced_setting.first); } - for (const auto& option : kPrintInfoOptions) { + for (const auto& option : kTestDummyPrintInfoOptions) { print_info_options_keys.push_back(option.first); } EXPECT_THAT(advanced_setting_keys, testing::UnorderedElementsAreArray(print_info_options_keys)); #endif // defined(OS_LINUX) && defined(USE_CUPS) } + +IN_PROC_BROWSER_TEST_F(PrintBackendPrintBrowserTestService, StartPrinting) { + AddPrinter("printer1"); + SetPrinterNameForSubsequentContexts("printer1"); + + ASSERT_TRUE(embedded_test_server()->Started()); + GURL url(embedded_test_server()->GetURL("/printing/test3.html")); + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url)); + + content::WebContents* web_contents = + browser()->tab_strip_model()->GetActiveWebContents(); + ASSERT_TRUE(web_contents); + SetUpPrintViewManager(web_contents); + + PrintAfterPreviewIsReadyAndLoaded(); + + EXPECT_EQ(start_printing_result(), mojom::ResultCode::kSuccess); +} + +IN_PROC_BROWSER_TEST_F(PrintBackendPrintBrowserTestService, + StartPrintingAccessDenied) { + AddPrinter("printer1"); + SetPrinterNameForSubsequentContexts("printer1"); + PrimeForAccessDeniedErrorsInNewDocument(); + + ASSERT_TRUE(embedded_test_server()->Started()); + GURL url(embedded_test_server()->GetURL("/printing/test3.html")); + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url)); + + content::WebContents* web_contents = + browser()->tab_strip_model()->GetActiveWebContents(); + ASSERT_TRUE(web_contents); + SetUpPrintViewManager(web_contents); + + // The test will retry to print after getting an access-denied error when + // trying to start printing, resulting in 2 calls. + SetNumExpectedMessages(/*num=*/2); + + PrintAfterPreviewIsReadyAndLoaded(); + + EXPECT_EQ(start_printing_result(), mojom::ResultCode::kSuccess); +} #endif // !defined(OS_CHROMEOS) } // namespace printing
diff --git a/chrome/browser/printing/print_job_worker.cc b/chrome/browser/printing/print_job_worker.cc index 50dc36e..992e14fa 100644 --- a/chrome/browser/printing/print_job_worker.cc +++ b/chrome/browser/printing/print_job_worker.cc
@@ -333,30 +333,46 @@ GetSettingsDone(std::move(callback), result); } -void PrintJobWorker::StartPrinting(PrintedDocument* new_document) { +bool PrintJobWorker::StartPrintingSanityCheck( + const PrintedDocument* new_document) const { DCHECK(task_runner_->RunsTasksInCurrentSequence()); if (page_number_ != PageNumber::npos()) { NOTREACHED(); - return; + return false; } if (!document_) { NOTREACHED(); - return; + return false; } if (document_.get() != new_document) { NOTREACHED(); - return; + return false; } + return true; +} + +std::u16string PrintJobWorker::GetDocumentName( + const PrintedDocument* new_document) const { + DCHECK(task_runner_->RunsTasksInCurrentSequence()); + std::u16string document_name = SimplifyDocumentTitle(document_->name()); if (document_name.empty()) { document_name = SimplifyDocumentTitle( l10n_util::GetStringUTF16(IDS_DEFAULT_PRINT_DOCUMENT_TITLE)); } - mojom::ResultCode result = printing_context_->NewDocument(document_name); + return document_name; +} + +void PrintJobWorker::StartPrinting(PrintedDocument* new_document) { + if (!StartPrintingSanityCheck(new_document)) + return; + + mojom::ResultCode result = + printing_context_->NewDocument(GetDocumentName(new_document)); if (result != mojom::ResultCode::kSuccess) { OnFailure(); return;
diff --git a/chrome/browser/printing/print_job_worker.h b/chrome/browser/printing/print_job_worker.h index 9c10538c..143a2008 100644 --- a/chrome/browser/printing/print_job_worker.h +++ b/chrome/browser/printing/print_job_worker.h
@@ -75,7 +75,7 @@ // Starts the printing loop. Every pages are printed as soon as the data is // available. Makes sure the new_document is the right one. - void StartPrinting(PrintedDocument* new_document); + virtual void StartPrinting(PrintedDocument* new_document); // Updates the printed document. void OnDocumentChanged(PrintedDocument* new_document); @@ -109,6 +109,12 @@ content::WebContents* GetWebContents(); protected: + // Sanity check that it is okay to proceed with starting a print job. + bool StartPrintingSanityCheck(const PrintedDocument* new_document) const; + + // Get the document name to be used when initiating printing. + std::u16string GetDocumentName(const PrintedDocument* new_document) const; + // Reports settings back to |callback|. void GetSettingsDone(SettingsCallback callback, mojom::ResultCode result); @@ -116,8 +122,13 @@ virtual void UpdatePrintSettings(base::Value new_settings, SettingsCallback callback); - // Retrieves the context for testing only. + // Discards the current document, the current page and cancels the printing + // context. + virtual void OnFailure(); + PrintingContext* printing_context() { return printing_context_.get(); } + PrintedDocument* document() { return document_.get(); } + base::SequencedTaskRunner* task_runner() { return task_runner_.get(); } private: // The shared NotificationService service can only be accessed from the UI @@ -145,10 +156,6 @@ // Closes the job since spooling is done. void OnDocumentDone(); - // Discards the current document, the current page and cancels the printing - // context. - void OnFailure(); - // Asks the user for print settings. Must be called on the UI thread. // Required on Mac and Linux. Windows can display UI from non-main threads, // but sticks with this for consistency.
diff --git a/chrome/browser/printing/print_job_worker_oop.cc b/chrome/browser/printing/print_job_worker_oop.cc index f8792f3..8b633221 100644 --- a/chrome/browser/printing/print_job_worker_oop.cc +++ b/chrome/browser/printing/print_job_worker_oop.cc
@@ -4,23 +4,99 @@ #include "chrome/browser/printing/print_job_worker_oop.h" +#include "base/strings/utf_string_conversions.h" #include "base/values.h" +#include "build/build_config.h" #include "chrome/browser/printing/print_backend_service_manager.h" #include "chrome/services/printing/public/mojom/print_backend_service.mojom.h" #include "components/device_event_log/device_event_log.h" +#include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" +#include "printing/printed_document.h" +#include "printing/printing_features.h" +#include "third_party/abseil-cpp/absl/types/optional.h" using content::BrowserThread; namespace printing { +namespace { + +mojom::PrintTargetType DeterminePrintTargetType( + const base::Value& job_settings) { +#if defined(OS_MAC) + if (job_settings.FindKey(kSettingOpenPDFInPreview)) + return mojom::PrintTargetType::kExternalPreview; +#endif + if (job_settings.FindBoolKey(kSettingShowSystemDialog).value_or(false)) + return mojom::PrintTargetType::kSystemDialog; + return mojom::PrintTargetType::kDirectToDevice; +} + +} // namespace + PrintJobWorkerOop::PrintJobWorkerOop(int render_process_id, int render_frame_id) : PrintJobWorker(render_process_id, render_frame_id) {} -PrintJobWorkerOop::~PrintJobWorkerOop() = default; +PrintJobWorkerOop::~PrintJobWorkerOop() { + DCHECK(!service_manager_client_id_.has_value()); +} + +void PrintJobWorkerOop::StartPrinting(PrintedDocument* new_document) { + if (!StartPrintingSanityCheck(new_document)) + return; + + // Do browser-side context setup. + std::u16string document_name = GetDocumentName(new_document); + mojom::ResultCode result = printing_context()->NewDocument(document_name); + if (result != mojom::ResultCode::kSuccess) { + OnFailure(); + return; + } + + std::string device_name = + base::UTF16ToUTF8(document()->settings().device_name()); + VLOG(1) << "Start printing document " << document()->cookie() << " to " + << device_name; + + // `PrintBackendServiceManager` interactions must happen on the UI thread. + content::GetUIThreadTaskRunner({})->PostTask( + FROM_HERE, base::BindOnce(&PrintJobWorkerOop::SendStartPrinting, + ui_weak_factory_.GetWeakPtr(), device_name, + document_name)); +} void PrintJobWorkerOop::OnDidStartPrinting(mojom::ResultCode result) { - // TODO(crbug.com/809738) Temporary placeholder for testing preparation. + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + if (result != mojom::ResultCode::kSuccess) { + PRINTER_LOG(ERROR) << "Error initiating printing via service for document " + << document()->cookie() << ": " << result; + if (result == mojom::ResultCode::kAccessDenied) { + // Register that this printer requires elevated privileges. + PrintBackendServiceManager& service_mgr = + PrintBackendServiceManager::GetInstance(); + service_mgr.SetPrinterDriverRequiresElevatedPrivilege(device_name_); + + // Failure from access-denied means we no longer need this client. + UnregisterServiceManagerClient(); + + // Retry the operation which should now happen at a higher privilege + // level. + SendStartPrinting(device_name_, document_name_); + return; + } + task_runner()->PostTask(FROM_HERE, + base::BindOnce(&PrintJobWorkerOop::OnFailure, + worker_weak_factory_.GetWeakPtr())); + return; + } + VLOG(1) << "Printing initiated with service for document " + << document()->cookie(); + // TODO(crbug.com/809738) Still need more support for printing pipeline in + // the service. + task_runner()->PostTask(FROM_HERE, + base::BindOnce(&PrintJobWorkerOop::OnFailure, + worker_weak_factory_.GetWeakPtr())); } void PrintJobWorkerOop::UpdatePrintSettings(base::Value new_settings, @@ -31,18 +107,36 @@ // isn't safe after TakeDict() destroys the internal dictionary for it. std::string device_name = *new_settings.FindStringKey(kSettingDeviceName); + // Save the print target type from the settings, since this will be needed + // later when printing is started. + print_target_type_ = DeterminePrintTargetType(new_settings); + VLOG(1) << "Updating print settings via service for " << device_name; PrintBackendServiceManager& service_mgr = PrintBackendServiceManager::GetInstance(); - // Safe to use base::Unretained(this) since the callback owns `this`, and - // `service_mgr` is a global instance which never exits and simply wraps - // `callback` so that it is still called should the service terminate - // unexpectedly. service_mgr.UpdatePrintSettings( device_name, std::move(new_settings).TakeDict(), base::BindOnce(&PrintJobWorkerOop::OnDidUpdatePrintSettings, - base::Unretained(this), device_name, std::move(callback))); + ui_weak_factory_.GetWeakPtr(), device_name, + std::move(callback))); +} + +void PrintJobWorkerOop::OnFailure() { + content::GetUIThreadTaskRunner({})->PostTask( + FROM_HERE, + base::BindOnce(&PrintJobWorkerOop::UnregisterServiceManagerClient, + ui_weak_factory_.GetWeakPtr())); + PrintJobWorker::OnFailure(); +} + +void PrintJobWorkerOop::UnregisterServiceManagerClient() { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + if (service_manager_client_id_.has_value()) { + PrintBackendServiceManager::GetInstance().UnregisterClient( + service_manager_client_id_.value()); + service_manager_client_id_.reset(); + } } void PrintJobWorkerOop::OnDidUpdatePrintSettings( @@ -68,4 +162,34 @@ GetSettingsDone(std::move(callback), result); } +void PrintJobWorkerOop::SendStartPrinting(const std::string& device_name, + const std::u16string& document_name) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + DCHECK(features::kEnableOopPrintDriversJobPrint.Get()); + + // The device name is needed repeatedly for each call to the service, cache + // that for this print job. + device_name_ = device_name; + + // Save the document name in case it is needed for retrying a job after + // failure. + document_name_ = document_name; + + const int32_t document_cookie = document()->cookie(); + VLOG(1) << "Starting printing via service for to `" << device_name_ + << "` for document " << document_cookie; + + PrintBackendServiceManager& service_mgr = + PrintBackendServiceManager::GetInstance(); + + // Register this worker as a printing client. + service_manager_client_id_ = service_mgr.RegisterClient(); + + service_mgr.StartPrinting( + device_name_, document_cookie, document_name_, print_target_type_, + document()->settings(), + base::BindOnce(&PrintJobWorkerOop::OnDidStartPrinting, + ui_weak_factory_.GetWeakPtr())); +} + } // namespace printing
diff --git a/chrome/browser/printing/print_job_worker_oop.h b/chrome/browser/printing/print_job_worker_oop.h index 7d0bc7b..fc2c196 100644 --- a/chrome/browser/printing/print_job_worker_oop.h +++ b/chrome/browser/printing/print_job_worker_oop.h
@@ -5,10 +5,15 @@ #ifndef CHROME_BROWSER_PRINTING_PRINT_JOB_WORKER_OOP_H_ #define CHROME_BROWSER_PRINTING_PRINT_JOB_WORKER_OOP_H_ +#include <string> + +#include "base/memory/weak_ptr.h" #include "base/values.h" #include "chrome/browser/printing/print_job_worker.h" -#include "chrome/services/printing/public/mojom/print_backend_service.mojom-forward.h" +#include "chrome/services/printing/public/mojom/print_backend_service.mojom.h" #include "printing/buildflags/buildflags.h" +#include "printing/mojom/print.mojom.h" +#include "third_party/abseil-cpp/absl/types/optional.h" #if !BUILDFLAG(ENABLE_OOP_PRINTING) #error "OOP printing must be enabled" @@ -16,6 +21,13 @@ namespace printing { +class PrintedDocument; + +// Worker thread code. It manages the PrintingContext and offloads all system +// driver interactions to the Print Backend service. This is the object that +// generates most NOTIFY_PRINT_JOB_EVENT notifications, but they are generated +// through a NotificationTask task to be executed from the right thread, the UI +// thread. PrintJob always outlives its worker instance. class PrintJobWorkerOop : public PrintJobWorker { public: PrintJobWorkerOop(int render_process_id, int render_frame_id); @@ -23,6 +35,9 @@ PrintJobWorkerOop& operator=(const PrintJobWorkerOop&) = delete; ~PrintJobWorkerOop() override; + // `PrintJobWorker` overrides. + void StartPrinting(PrintedDocument* new_document) override; + protected: // Local callback wrapper for Print Backend Service mojom call. Virtual to // support testing. @@ -31,12 +46,43 @@ // `PrintJobWorker` overrides. void UpdatePrintSettings(base::Value new_settings, SettingsCallback callback) override; + void OnFailure() override; private: + // Support to unregister this worker as a printing client. Applicable any + // time a print job finishes, is canceled, or needs to be restarted. + void UnregisterServiceManagerClient(); + // Local callback wrapper for Print Backend Service mojom call. void OnDidUpdatePrintSettings(const std::string& device_name, SettingsCallback callback, mojom::PrintSettingsResultPtr print_settings); + + // Mojo support to send messages from UI thread. + void SendStartPrinting(const std::string& device_name, + const std::u16string& document_name); + + // Client ID with the print backend service manager for this print job. + // Used only from UI thread. + absl::optional<uint32_t> service_manager_client_id_; + + // The device name used when printing via a service. Used only from the UI + // thread. + std::string device_name_; + + // The processed name of the document being printed. Used only from the UI + // thread. + std::u16string document_name_; + + // The type of target to print to. Used only from the UI thread. + mojom::PrintTargetType print_target_type_ = + mojom::PrintTargetType::kDirectToDevice; + + // Weak pointers have flags that get bound to the thread where they are + // checked, so it is necessary to use different factories when getting a + // weak pointer to send to the worker task runner vs. to the UI thread. + base::WeakPtrFactory<PrintJobWorkerOop> worker_weak_factory_{this}; + base::WeakPtrFactory<PrintJobWorkerOop> ui_weak_factory_{this}; }; } // namespace printing
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu.cc b/chrome/browser/renderer_context_menu/render_view_context_menu.cc index 3915ec4..0ddcda1 100644 --- a/chrome/browser/renderer_context_menu/render_view_context_menu.cc +++ b/chrome/browser/renderer_context_menu/render_view_context_menu.cc
@@ -1394,7 +1394,7 @@ std::u16string text = params_.has_image_contents ? u"" : params_.link_text; share_submenu_model_ = std::make_unique<share::ShareSubmenuModel>( - GetBrowser(), CreateDataEndpoint(true), context, url, text); + source_web_contents_, CreateDataEndpoint(true), context, url, text); if (share_submenu_model_->GetItemCount() > 0) { menu_model_.AddSubMenuWithStringId(IDC_CONTENT_CONTEXT_SHARING_SUBMENU, IDS_SHARE_MENU_TITLE, @@ -1568,7 +1568,7 @@ if (ShouldUseShareMenu() && !share_submenu_model_) { share_submenu_model_ = std::make_unique<share::ShareSubmenuModel>( - GetBrowser(), CreateDataEndpoint(true), + source_web_contents_, CreateDataEndpoint(true), share::ShareSubmenuModel::Context::IMAGE, params_.src_url, u""); if (share_submenu_model_->GetItemCount() > 0) { menu_model_.AddSubMenuWithStringId(IDC_CONTENT_CONTEXT_SHARING_SUBMENU, @@ -1699,7 +1699,7 @@ if (ShouldUseShareMenu()) { menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); share_submenu_model_ = std::make_unique<share::ShareSubmenuModel>( - GetBrowser(), CreateDataEndpoint(true), + source_web_contents_, CreateDataEndpoint(true), share::ShareSubmenuModel::Context::PAGE, params_.page_url, source_web_contents_->GetTitle()); if (share_submenu_model_->GetItemCount() > 0) {
diff --git a/chrome/browser/resource_coordinator/tab_manager_delegate_chromeos.h b/chrome/browser/resource_coordinator/tab_manager_delegate_chromeos.h index 70e76434..ce78d52a 100644 --- a/chrome/browser/resource_coordinator/tab_manager_delegate_chromeos.h +++ b/chrome/browser/resource_coordinator/tab_manager_delegate_chromeos.h
@@ -10,6 +10,7 @@ #include <utility> #include <vector> +#include "ash/components/arc/mojom/process.mojom.h" #include "base/callback.h" #include "base/check.h" #include "base/containers/flat_map.h" @@ -24,7 +25,6 @@ #include "chrome/browser/resource_coordinator/tab_manager.h" #include "chrome/browser/ui/browser_list_observer.h" #include "chromeos/dbus/debug_daemon/debug_daemon_client.h" -#include "components/arc/mojom/process.mojom.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" #include "ui/wm/public/activation_change_observer.h"
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js index efe82b3..e4ab048 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js
@@ -132,6 +132,24 @@ `; } + get listBoxDoc() { + return ` + <p>Start</p> + <div role="listbox" aria-expanded="false" aria-label="Select an item"> + <div aria-selected="true" tabindex="0" role="option"> + <span>Listbox item one</span> + </div> + <div aria-selected="false" tabindex="-1" role="option"> + <span>Listbox item two</span> + </div> + <div aria-selected="false" role="option"> + <span>Listbox item three</span> + </div> + </div> + <button>Click</button> + `; + } + /** * Fires an onCustomSpokenFeedbackToggled event with enabled state of * |enabled|. @@ -918,10 +936,19 @@ <div role="option">banana</div> </div> `; + this.runWithLoadedTree(site, function(root) { - mockFeedback.call(doCmd('nextObject')) + // Select first child of the list box, similar to what happens if navigated + // by Tab. + const firstChild = root.find({role: RoleType.PARAGRAPH}); + mockFeedback + .call( + () => ChromeVoxState.instance.setCurrentRange( + cursors.Range.fromNode(firstChild))) + .call(doCmd('nextObject')) + .expectSpeech('List box') .expectSpeech('Fruits') - .expectSpeech('with 2 items') + .call(doCmd('nextObject')) .expectSpeech('apple') .expectSpeech(' 1 of 2 ') .call(doCmd('nextObject')) @@ -3775,6 +3802,7 @@ TEST_F('ChromeVoxBackgroundTest', 'MultipleListBoxes', function() { const mockFeedback = this.createMockFeedback(); const site = ` + <p>start</p> <div role="listbox" aria-expanded="false" aria-label="Configuration 1"> <div role="presentation"> <div role="presentation"> @@ -3827,7 +3855,7 @@ </div> `; this.runWithLoadedTree(site, function(root) { - mockFeedback + mockFeedback.call(press(KeyCode.TAB)) .expectSpeech( 'Listbox item 1', ' 1 of 3 ', 'Configuration 1', 'List box') .call(press(KeyCode.TAB)) @@ -3839,3 +3867,35 @@ .replay(); }); }); + +// Make sure linear navigation does not go inside ListBox's options. +TEST_F('ChromeVoxBackgroundTest', 'ListBoxLinearNavigation', function() { + const mockFeedback = this.createMockFeedback(); + const site = + + this.runWithLoadedTree(this.listBoxDoc, function(root) { + mockFeedback.call(doCmd('nextObject')) + .expectSpeech('Select an item', 'List box') + .call(doCmd('nextObject')) + .expectSpeech('Click', 'Button') + .call(doCmd('previousObject')) + .expectSpeech('Select an item', 'List box') + .replay(); + }); +}); + +// Make sure navigation with Tab to ListBox lands on options. +TEST_F('ChromeVoxBackgroundTest', 'ListBoxItemsNavigation', function() { + const mockFeedback = this.createMockFeedback(); + + this.runWithLoadedTree(this.listBoxDoc, function(root) { + mockFeedback.call(press(KeyCode.TAB)) + .expectSpeech( + 'Listbox item one', ' 1 of 3 ', 'Select an item', 'List box') + .call(doCmd('nextObject')) + .expectSpeech('Listbox item two', ' 2 of 3 ') + .call(doCmd('nextObject')) + .expectSpeech('Listbox item three', ' 3 of 3 ') + .replay(); + }); +});
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js index 90f52da..76c837c5 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js
@@ -606,19 +606,15 @@ pred = AutomationPredicate.landmark; predErrorMsg = 'no_previous_landmark'; break; - case 'right': - case 'nextObject': - didNavigate = true; - current = current.move(cursors.Unit.NODE, Dir.FORWARD); - current = CommandHandler.skipLabelOrDescriptionFor_(current, Dir.FORWARD); - break; case 'left': case 'previousObject': dir = Dir.BACKWARD; + // Falls through. + case 'right': + case 'nextObject': didNavigate = true; current = current.move(cursors.Unit.NODE, dir); - current = - CommandHandler.skipLabelOrDescriptionFor_(current, Dir.BACKWARD); + current = CommandHandler.skipLabelOrDescriptionFor_(current, dir); break; case 'previousGroup': skipSync = true;
diff --git a/chrome/browser/resources/chromeos/accessibility/common/automation_predicate.js b/chrome/browser/resources/chromeos/accessibility/common/automation_predicate.js index dc4591f2..9805357 100644 --- a/chrome/browser/resources/chromeos/accessibility/common/automation_predicate.js +++ b/chrome/browser/resources/chromeos/accessibility/common/automation_predicate.js
@@ -212,10 +212,10 @@ */ static touchLeaf(node) { return !!(!node.firstChild && node.name) || node.role === Role.BUTTON || - node.role === Role.CHECK_BOX || node.role === Role.POP_UP_BUTTON || - node.role === Role.PORTAL || node.role === Role.RADIO_BUTTON || - node.role === Role.SLIDER || node.role === Role.SWITCH || - node.role === Role.TEXT_FIELD || + node.role === Role.CHECK_BOX || node.role === Role.LIST_BOX || + node.role === Role.POP_UP_BUTTON || node.role === Role.PORTAL || + node.role === Role.RADIO_BUTTON || node.role === Role.SLIDER || + node.role === Role.SWITCH || node.role === Role.TEXT_FIELD || node.role === Role.TEXT_FIELD_WITH_COMBO_BOX || (node.role === Role.MENU_ITEM && !hasActionableDescendant(node)) || // Simple list items should be leaves.
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb index 3cdcf7a..6d7fd32 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb
@@ -40,7 +40,7 @@ કોઈ ટૅબને બંધ કરવા માટે, Control+W દબાવો. ખુલ્લા ટૅબમાં આગળ જવા માટે, Control+Tabનો ઉપયોગ કરો. Chrome બ્રાઉઝર મેનૂ ખોલવા માટે, Alt+F દબાવો.</translation> -<translation id="1213216066620407844">ChromeVox - Chrome ને વૉઇસ આપવો</translation> +<translation id="1213216066620407844">ChromeVox - Chromeને વૉઇસ આપવો</translation> <translation id="1225969361094801578">ઘાટો સ્લેટ ગ્રે</translation> <translation id="1230503547248836149">પસંદગીની શરૂઆત</translation> <translation id="1236794971743289975">અંતિમ નોંધ</translation> @@ -201,7 +201,7 @@ <translation id="2390264819538553347">આગળ જવા માટે, enter દબાવો, પાછળ જવા માટે backspace દબાવો.</translation> <translation id="2398579267367951220">પેજ શોધવા માટે ટાઇપ કરો. પરિણામ પર જવા માટે Enter, પરિણામો બ્રાઉઝ કરવા માટે ઉપર અથવા નીચેનો ઍરો દબાવો, તમારી શોધમાં ફેરફાર કરવા માટે ટાઇપ કરવાનું ચાલુ રાખો અથવા રદ કરવા માટે Escape દબાવો.</translation> <translation id="240709722712693803">ભૂરો જાંબલી</translation> -<translation id="2410298923485357543">જ્યારે ડિવાઇસ ઑનલાઇન હોય, ત્યારે નૈસર્ગિક અવાજનો ઉપયોગ કરો</translation> +<translation id="2410298923485357543">જ્યારે ડિવાઇસ ઑનલાઇન હોય, ત્યારે સાહજિક અવાજનો ઉપયોગ કરો</translation> <translation id="2416512023405990736">અનચેક કરેલુંં ચેકબોક્સ</translation> <translation id="2417569100218200841">કન્ટેન્ટ માહિતી</translation> <translation id="2417948780551741035">અંતિમ નોંધ</translation> @@ -432,7 +432,7 @@ <translation id="3813387282697781382">આછો લાલ</translation> <translation id="3816633764618089385">આગલું મીડિયા</translation> <translation id="3840823741487267909">સંક્ષેપ</translation> -<translation id="3841319830220785495">ડિફૉલ્ટ તરીકે સેટ કરેલો નૈસર્ગિક અવાજ</translation> +<translation id="3841319830220785495">ડિફૉલ્ટ તરીકે સેટ કરેલો સાહજિક અવાજ</translation> <translation id="385383972552776628">વિકલ્પોનું પેજ ખોલો</translation> <translation id="3856075812838139784">ફક્ત વાંચવા માટે</translation> <translation id="3857141338659865495">મધ્યમ પીરોજી</translation> @@ -655,7 +655,7 @@ <translation id="5452267669091857717">કોઈ આગલું 'લેવલ 1' મથાળું નથી</translation> <translation id="5455441614648621694">પૂરક</translation> <translation id="5462510922370980473">પેજ સૂચિ</translation> -<translation id="5471768120198416576">કેમ છો! હું તમારો ટેક્સ્ટ-ટુ-સ્પીચ વૉઇસ છું.</translation> +<translation id="5471768120198416576">કેમ છો! હું તમારો ટેક્સ્ટ-ટૂ-સ્પીચ વૉઇસ છું.</translation> <translation id="5495517933067991341">આવશ્યક કી: Shift</translation> <translation id="549602578321198708">શબ્દ</translation> <translation id="5513242761114685513">સંદર્ભ મેનૂ</translation> @@ -928,7 +928,7 @@ <translation id="743783356331413498">ઉદાહરણ</translation> <translation id="7439060726180460871">ડિરેક્ટરી</translation> <translation id="744163271241493234">pwded</translation> -<translation id="7465123027577412805">નૈસર્ગિક અવાજનો ઉપયોગ કરીએ?</translation> +<translation id="7465123027577412805">સાહજિક અવાજનો ઉપયોગ કરીએ?</translation> <translation id="7491962110804786152">ટેબ</translation> <translation id="7492497529767769458">આગળના વિભાગ પર ખસેડો. ઉદાહરણોમાં સ્ટેટસ ટ્રે અને લૉન્ચર શામેલ છે.</translation> <translation id="7505149250476994901">અક્ષર પહેલાં "કૅપિટલ" બોલો</translation> @@ -960,7 +960,7 @@ <translation id="7693840228159394336">પાછલું રેડિયો બટન</translation> <translation id="7701040980221191251">કોઈ નથી</translation> <translation id="7701196182766842984">autolst</translation> -<translation id="7713139339518499741">નૈસર્ગિક અવાજ</translation> +<translation id="7713139339518499741">સાહજિક અવાજ</translation> <translation id="7714340021005120797">કોઈ આગલું કૉમ્બો બૉક્સ નથી</translation> <translation id="772146615414628379">અભિનંદન! તમે ChromeVoxનો સફળતાપૂર્વક ઉપયોગ કરવા માટેની જરૂરી વસ્તુઓ શીખી લીધી છે. યાદ રાખો કે તમે Search+Period દબાવીને કોઈપણ સમયે ChromeVox આદેશ મેનૂ ખોલી શકો છો. ChromeVox અને Chrome OS વિશે હજી વધુ જાણવા માટે, નીચે આપેલા લેખો વાંચો. જો તમે ટ્યૂટૉરિઅલ પૂરું કરી લીધું હોય, તો બંધ કરો બટન પર નૅવિગેટ કરવા અને તેને ક્લિક કરવા માટે ChromeVoxનો ઉપયોગ કરો.</translation>
diff --git a/chrome/browser/resources/chromeos/mobile_app/manifest.json b/chrome/browser/resources/chromeos/mobile_app/manifest.json deleted file mode 100644 index 5a4a822..0000000 --- a/chrome/browser/resources/chromeos/mobile_app/manifest.json +++ /dev/null
@@ -1,10 +0,0 @@ -{ - "key": "MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDITTAJ8zmgRjcmCRIAUbzlrSSzoWPBRY/kaBP3mxZ8nlCMljhQLDDKClnyGK6+krYq8/LayF4r0PR7g0Q27lwvw+asg1BFN+AL+suJqe4jJzxBK3GaMBRsBCCcwpAQw4F82zI9Hk0e6EqfrDq4ePNgv+PsI2MDbOuk3b1vS5oBjQIBIw==", - "name": "Mobile Activation", - "version": "1.0", - "description": "Chrome OS Mobile Activation Resources", - "default_locale": "en", - "incognito": "split", - "permissions": [], - "manifest_version": 2 -}
diff --git a/chrome/browser/resources/chromeos/mobile_setup.css b/chrome/browser/resources/chromeos/mobile_setup.css index 6219475a..d99406bf 100644 --- a/chrome/browser/resources/chromeos/mobile_setup.css +++ b/chrome/browser/resources/chromeos/mobile_setup.css
@@ -95,13 +95,6 @@ width: 100%; } -#carrierPage { - height: 380px; - overflow: hidden; - padding-top: 10px; - width: 500px; -} - #banner { background-color: rgb(252, 246, 224); border: 1px solid #ccc; @@ -124,6 +117,15 @@ font-size: 16px; } +#statusMessage { + height: 180px; + overflow: hidden; + padding-top: 10px; + width: 500px; + font-size: 15px; + font-family: arial, sans-serif; +} + #finalMessage { padding-bottom: 50px; }
diff --git a/chrome/browser/resources/chromeos/mobile_setup.html b/chrome/browser/resources/chromeos/mobile_setup.html deleted file mode 100644 index 6dafa49..0000000 --- a/chrome/browser/resources/chromeos/mobile_setup.html +++ /dev/null
@@ -1,50 +0,0 @@ -<!doctype html> -<html lang="$i18n{language}"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> -<title>$i18n{title}</title> -<link rel="stylesheet" href="chrome://resources/css/text_defaults.css"> -<link rel="stylesheet" href="chrome://resources/css/dialogs.css"></link> -<link rel="stylesheet" href="mobile_setup.css"></link> -<script src="chrome://resources/js/cr.js"></script> -<script src="chrome://resources/js/assert.js"></script> -<script src="chrome://resources/js/util.js"></script> -<script src="chrome://resources/js/cr/ui/dialogs.js"></script> -<script src="chrome://resources/cr_components/chromeos/cellular_setup/webview_post_util.js"> -</script> -<script src="mobile_setup.js"></script> -</head> -<body> - <div id="mainDiv" class="dialog-body"> - <div id="portalFrame" class="hidden"></div> - <div id="systemStatus" class="overlay opaque-overlay hidden"> - <div class="startup"> - <div id="banner"> - <table border="0"> - <tbody><tr> - <td class="canvas-cell"><canvas id="canvas" width="56" - height="56"></canvas></td> - <td class="header-cell"> - <div id="statusHeader"></div> - <div id="auxHeader"></div> - </td> - </tr> - </tbody></table> - </div> - <webview id="carrierPage"></webview> - </div> - </div> - <div id="finalStatus" class="overlay translucent-black-overlay hidden"> - <div class="startup"> - <div class="header"><h3 id="finalHeader"></h3></div> - <div id="finalMessage"></div> - <div class="splitter"></div> - <div class="logo"></div> - <div class="button-strip"> - <button id="closeButton" class="hidden">$i18n{close_button}</button> - </div> - </div> - </div> - </div> -</body> -</html>
diff --git a/chrome/browser/resources/chromeos/mobile_setup.js b/chrome/browser/resources/chromeos/mobile_setup.js deleted file mode 100644 index 3c927eb4..0000000 --- a/chrome/browser/resources/chromeos/mobile_setup.js +++ /dev/null
@@ -1,431 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -cr.define('mobile', function() { - - function MobileSetup() {} - - cr.addSingletonGetter(MobileSetup); - - MobileSetup.PLAN_ACTIVATION_UNKNOWN = -2; - MobileSetup.PLAN_ACTIVATION_PAGE_LOADING = -1; - MobileSetup.PLAN_ACTIVATION_START = 0; - MobileSetup.PLAN_ACTIVATION_TRYING_OTASP = 1; - MobileSetup.PLAN_ACTIVATION_INITIATING_ACTIVATION = 3; - MobileSetup.PLAN_ACTIVATION_RECONNECTING = 4; - MobileSetup.PLAN_ACTIVATION_WAITING_FOR_CONNECTION = 5; - MobileSetup.PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING = 6; - MobileSetup.PLAN_ACTIVATION_SHOWING_PAYMENT = 7; - MobileSetup.PLAN_ACTIVATION_RECONNECTING_PAYMENT = 8; - MobileSetup.PLAN_ACTIVATION_DELAY_OTASP = 9; - MobileSetup.PLAN_ACTIVATION_START_OTASP = 10; - MobileSetup.PLAN_ACTIVATION_OTASP = 11; - MobileSetup.PLAN_ACTIVATION_DONE = 12; - MobileSetup.PLAN_ACTIVATION_ERROR = 0xFF; - - MobileSetup.EXTENSION_PAGE_URL = - 'chrome-extension://iadeocfgjdjdmpenejdbfeaocpbikmab'; - MobileSetup.ACTIVATION_PAGE_URL = - MobileSetup.EXTENSION_PAGE_URL + '/activation.html'; - MobileSetup.PORTAL_OFFLINE_PAGE_URL = - MobileSetup.EXTENSION_PAGE_URL + '/portal_offline.html'; - - MobileSetup.prototype = { - // Mobile device information. - deviceInfo_: null, - initialized_: false, - fakedTransaction_: false, - paymentShown_: false, - carrierPageUrl_: null, - spinnerInt_: -1, - // UI states. - state_: MobileSetup.PLAN_ACTIVATION_UNKNOWN, - STATE_UNKNOWN_: 'unknown', - STATE_CONNECTING_: 'connecting', - STATE_ERROR_: 'error', - STATE_PAYMENT_: 'payment', - STATE_ACTIVATING_: 'activating', - STATE_CONNECTED_: 'connected', - - initialize(frame_name, carrierPage) { - if (this.initialized_) { - console.log('calling initialize() again?'); - return; - } - this.initialized_ = true; - self = this; - - cr.ui.dialogs.BaseDialog.OK_LABEL = loadTimeData.getString('ok_button'); - cr.ui.dialogs.BaseDialog.CANCEL_LABEL = - loadTimeData.getString('cancel_button'); - this.confirm_ = new cr.ui.dialogs.ConfirmDialog(document.body); - - window.addEventListener('message', function(e) { - self.onMessageReceived_(e); - }); - - $('closeButton').addEventListener('click', function(e) { - $('finalStatus').classList.add('hidden'); - }); - - // Kick off activation process. - chrome.send('startActivation'); - }, - - startSpinner_() { - this.stopSpinner_(); - this.spinnerInt_ = setInterval(mobile.MobileSetup.drawProgress, 100); - }, - - stopSpinner_() { - if (this.spinnerInt_ != -1) { - clearInterval(this.spinnerInt_); - this.spinnerInt_ = -1; - } - }, - - /** - * Handler for loadabort event on the payment portal webview. - * Notifies Chrome that the payment portal load failed. - * @param {string} paymentUrl The payment portal URL, as provided by the - * cellular service. - * @param {!Object} evt Load abort event. - * @private - */ - paymentLoadAborted_(paymentUrl, evt) { - if (!evt.isTopLevel || - new URL(evt.url).origin != new URL(paymentUrl).origin) { - return; - } - chrome.send('paymentPortalLoad', ['failed']); - }, - - /** - * Handler for loadcommit event on the payment portal webview. - * Notifies Chrome that the payment portal was loaded. - * @param {string} paymentUrl The payment portal URL, as provided by the - * cellular service. - * @param {!Object} evt Load commit event. - * @private - */ - paymentLoadCommitted_(paymentUrl, evt) { - if (!evt.isTopLevel || - new URL(evt.url).origin != new URL(paymentUrl).origin) { - return; - } - - // Workaround for https://crbug.com/893248 - for some reason, the payment - // portal does not load properly after the payment frame submition. - // Reloading the frame seems to bypass the problem. - // TODO(tbarzic): Remove this once the problem has been properly - // addressed. - if (!this.paymentPortalReloaded_) { - this.paymentPortalReloaded_ = true; - $('portalFrameWebview').reload(); - } else { - chrome.send('paymentPortalLoad', ['ok']); - } - }, - - /** - * Sends a <code>loadedInWebview</code> message to the mobile service - * portal webview. - * @param {string} paymentUrl The payment portal URL - used to restrict - * origins to which the message is sent. - */ - sendInitialMessage_(paymentUrl) { - $('portalFrameWebview') - .contentWindow.postMessage({msg: 'loadedInWebview'}, paymentUrl); - }, - - /** - * Loads payment URL defined by <code>deviceInfo</code> into the - * portal frame webview. - * If the webview element already exists, it will not be reused - the - * existing webview will be removed from DOM, and a new one will be - * created. - * If deviceInfo provides post data to be sent to the payment URL, the - * webview will be initilized using - * <code>webviewPost.util.postDeviceDataToWebview</code>, otherwise the - * payment URL will be loaded directly into the webview. - * - * Note that the portal frame webview will only ever contain data and web - * URLs - it will never embed the mobile setup extension resources. - * - * @param {!Object} deviceInfo The cellular service info - contains the - * information that should be passed to the payment portal. - * @private - */ - loadPaymentFrame_(deviceInfo) { - if (!deviceInfo) - return; - this.deviceInfo_ = deviceInfo; - - var existingWebview = $('portalFrameWebview'); - if (existingWebview) - existingWebview.remove(); - - var frame = document.createElement('webview'); - frame.id = 'portalFrameWebview'; - - this.paymentPortalReloaded_ = false; - - $('portalFrame').appendChild(frame); - - frame.addEventListener( - 'loadabort', - this.paymentLoadAborted_.bind(this, deviceInfo.payment_url)); - - frame.addEventListener( - 'loadcommit', - this.paymentLoadCommitted_.bind(this, deviceInfo.payment_url)); - - // Send a message to the loaded webview, so it can get a reference to - // which to send messages as needed. - frame.addEventListener( - 'loadstop', - this.sendInitialMessage_.bind(this, deviceInfo.payment_url)); - - if (deviceInfo.post_data && deviceInfo.post_data.length) { - webviewPost.util.postDeviceDataToWebview( - frame, deviceInfo.payment_url, deviceInfo.post_data); - } else { - frame.src = deviceInfo.payment_url; - } - }, - - onMessageReceived_(e) { - if (e.origin != - this.deviceInfo_.payment_url.substring(0, e.origin.length)) - return; - - if (e.data.type == 'requestDeviceInfoMsg') { - this.sendDeviceInfo_(); - } else if (e.data.type == 'reportTransactionStatusMsg') { - console.log('calling setTransactionStatus from onMessageReceived_'); - chrome.send('setTransactionStatus', [e.data.status]); - } - }, - - changeState_(deviceInfo) { - var newState = deviceInfo.state; - if (this.state_ == newState) - return; - - // The mobile setup is already in its final state. - if (this.state_ == MobileSetup.PLAN_ACTIVATION_DONE || - this.state_ == MobileSetup.PLAN_ACTIVATION_ERROR) { - return; - } - - // Map handler state to UX. - var simpleActivationFlow = - (deviceInfo.activation_type == 'NonCellular' || - deviceInfo.activation_type == 'OTA'); - switch (newState) { - case MobileSetup.PLAN_ACTIVATION_PAGE_LOADING: - case MobileSetup.PLAN_ACTIVATION_START: - case MobileSetup.PLAN_ACTIVATION_DELAY_OTASP: - case MobileSetup.PLAN_ACTIVATION_START_OTASP: - case MobileSetup.PLAN_ACTIVATION_RECONNECTING: - case MobileSetup.PLAN_ACTIVATION_RECONNECTING_PAYMENT: - // Activation page should not be shown for the simple activation - // flow. - if (simpleActivationFlow) - break; - - $('statusHeader').textContent = - loadTimeData.getString('connecting_header'); - $('auxHeader').textContent = loadTimeData.getString('please_wait'); - $('portalFrame').classList.add('hidden'); - $('finalStatus').classList.add('hidden'); - this.setCarrierPage_(MobileSetup.ACTIVATION_PAGE_URL); - $('systemStatus').classList.remove('hidden'); - $('canvas').classList.remove('hidden'); - this.startSpinner_(); - break; - case MobileSetup.PLAN_ACTIVATION_TRYING_OTASP: - case MobileSetup.PLAN_ACTIVATION_INITIATING_ACTIVATION: - case MobileSetup.PLAN_ACTIVATION_OTASP: - // Activation page should not be shown for the simple activation - // flow. - if (simpleActivationFlow) - break; - - $('statusHeader').textContent = - loadTimeData.getString('activating_header'); - $('auxHeader').textContent = loadTimeData.getString('please_wait'); - $('portalFrame').classList.add('hidden'); - $('finalStatus').classList.add('hidden'); - this.setCarrierPage_(MobileSetup.ACTIVATION_PAGE_URL); - $('systemStatus').classList.remove('hidden'); - $('canvas').classList.remove('hidden'); - this.startSpinner_(); - break; - case MobileSetup.PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING: - // Activation page should not be shown for the simple activation - // flow. - if (!simpleActivationFlow) { - $('statusHeader').textContent = - loadTimeData.getString('connecting_header'); - $('auxHeader').textContent = ''; - $('portalFrame').classList.add('hidden'); - $('finalStatus').classList.add('hidden'); - this.setCarrierPage_(MobileSetup.ACTIVATION_PAGE_URL); - $('systemStatus').classList.remove('hidden'); - $('canvas').classList.remove('hidden'); - } - this.loadPaymentFrame_(deviceInfo); - break; - case MobileSetup.PLAN_ACTIVATION_WAITING_FOR_CONNECTION: - var statusHeaderText; - var carrierPage; - if (deviceInfo.activation_type == 'NonCellular') { - statusHeaderText = - loadTimeData.getString('portal_unreachable_header'); - carrierPage = MobileSetup.PORTAL_OFFLINE_PAGE_URL; - } else if (deviceInfo.activation_type == 'OTA') { - statusHeaderText = loadTimeData.getString('connecting_header'); - carrierPage = MobileSetup.ACTIVATION_PAGE_URL; - } - $('statusHeader').textContent = statusHeaderText; - $('auxHeader').textContent = ''; - $('auxHeader').classList.add('hidden'); - $('portalFrame').classList.add('hidden'); - $('finalStatus').classList.add('hidden'); - $('systemStatus').classList.remove('hidden'); - this.setCarrierPage_(carrierPage); - $('canvas').classList.remove('hidden'); - this.startSpinner_(); - break; - case MobileSetup.PLAN_ACTIVATION_SHOWING_PAYMENT: - $('statusHeader').textContent = ''; - $('auxHeader').textContent = ''; - $('finalStatus').classList.add('hidden'); - $('systemStatus').classList.add('hidden'); - $('portalFrame').classList.remove('hidden'); - $('canvas').classList.add('hidden'); - this.stopSpinner_(); - this.paymentShown_ = true; - break; - case MobileSetup.PLAN_ACTIVATION_DONE: - $('statusHeader').textContent = ''; - $('auxHeader').textContent = ''; - $('finalHeader').textContent = - loadTimeData.getString('completed_header'); - $('finalMessage').textContent = - loadTimeData.getString('completed_text'); - $('systemStatus').classList.add('hidden'); - $('closeButton').classList.remove('hidden'); - $('finalStatus').classList.remove('hidden'); - $('canvas').classList.add('hidden'); - $('closeButton').classList.toggle('hidden', !this.paymentShown_); - $('portalFrame').classList.toggle('hidden', !this.paymentShown_); - this.stopSpinner_(); - break; - case MobileSetup.PLAN_ACTIVATION_ERROR: - $('statusHeader').textContent = ''; - $('auxHeader').textContent = ''; - $('finalHeader').textContent = loadTimeData.getString('error_header'); - $('finalMessage').textContent = deviceInfo.error; - $('systemStatus').classList.add('hidden'); - $('canvas').classList.add('hidden'); - $('closeButton').classList.toggle('hidden', !this.paymentShown_); - $('portalFrame').classList.toggle('hidden', !this.paymentShown_); - $('finalStatus').classList.remove('hidden'); - this.stopSpinner_(); - break; - } - this.state_ = newState; - }, - - /** - * Embeds a URL into the <code>carrierPage</code> webview. The webview is - * ever expected to contain mobile setup extension URLs. - * @param {string} url The URL to embed into the carrierPage webview. - * @param - */ - setCarrierPage_(url) { - if (this.carrierPageUrl_ == url) - return; - - this.carrierPageUrl_ = url; - $('carrierPage').src = url; - }, - - updateDeviceStatus_(deviceInfo) { - this.changeState_(deviceInfo); - }, - - sendDeviceInfo_() { - var msg = { - type: 'deviceInfoMsg', - domain: document.location, - payload: { - 'carrier': this.deviceInfo_.carrier, - 'MEID': this.deviceInfo_.MEID, - 'IMEI': this.deviceInfo_.IMEI, - 'MDN': this.deviceInfo_.MDN - } - }; - $('portalFrameWebview') - .contentWindow.postMessage(msg, this.deviceInfo_.payment_url); - } - - }; - - MobileSetup.drawProgress = function() { - var ctx = canvas.getContext('2d'); - ctx.clearRect(0, 0, canvas.width, canvas.height); - - var segmentCount = Math.min(12, canvas.width / 1.6); // Number of segments - var rotation = 0.75; // Counterclockwise rotation - - // Rotate canvas over time - ctx.translate(canvas.width / 2, canvas.height / 2); - ctx.rotate(Math.PI * 2 / (segmentCount + rotation)); - ctx.translate(-canvas.width / 2, -canvas.height / 2); - - var gap = canvas.width / 24; // Gap between segments - var oRadius = canvas.width / 2; // Outer radius - var iRadius = oRadius * 0.618; // Inner radius - var oCircumference = Math.PI * 2 * oRadius; // Outer circumference - var iCircumference = Math.PI * 2 * iRadius; // Inner circumference - var oGap = gap / oCircumference; // Gap size as fraction of outer ring - var iGap = gap / iCircumference; // Gap size as fraction of inner ring - var oArc = Math.PI * 2 * (1 / segmentCount - oGap); // Angle of outer arcs - var iArc = Math.PI * 2 * (1 / segmentCount - iGap); // Angle of inner arcs - - for (i = 0; i < segmentCount; i++) { // Draw each segment - var opacity = Math.pow(1.0 - i / segmentCount, 3.0); - opacity = (0.15 + opacity * 0.8); // Vary from 0.15 to 0.95 - var angle = -Math.PI * 2 * i / segmentCount; - - ctx.beginPath(); - ctx.arc( - canvas.width / 2, canvas.height / 2, oRadius, angle - oArc / 2, - angle + oArc / 2, false); - ctx.arc( - canvas.width / 2, canvas.height / 2, iRadius, angle + iArc / 2, - angle - iArc / 2, true); - ctx.closePath(); - ctx.fillStyle = 'rgba(240, 30, 29, ' + opacity + ')'; - ctx.fill(); - } - }; - - MobileSetup.deviceStateChanged = function(deviceInfo) { - MobileSetup.getInstance().updateDeviceStatus_(deviceInfo); - }; - - MobileSetup.loadPage = function() { - mobile.MobileSetup.getInstance().initialize( - mobile.MobileSetup.ACTIVATION_PAGE_URL); - }; - - // Export - return {MobileSetup: MobileSetup}; -}); - -document.addEventListener('DOMContentLoaded', mobile.MobileSetup.loadPage);
diff --git a/chrome/browser/resources/chromeos/mobile_setup_portal.html b/chrome/browser/resources/chromeos/mobile_setup_portal.html index 626c20d..21a2d28 100644 --- a/chrome/browser/resources/chromeos/mobile_setup_portal.html +++ b/chrome/browser/resources/chromeos/mobile_setup_portal.html
@@ -31,7 +31,7 @@ </tbody> </table> </div> - <webview id="carrierPage"></webview> + <div id="statusMessage"></div> </div> </div> </div>
diff --git a/chrome/browser/resources/chromeos/mobile_setup_portal.js b/chrome/browser/resources/chromeos/mobile_setup_portal.js index 2820167..fdf51da 100644 --- a/chrome/browser/resources/chromeos/mobile_setup_portal.js +++ b/chrome/browser/resources/chromeos/mobile_setup_portal.js
@@ -3,29 +3,18 @@ // found in the LICENSE file. cr.define('mobile', function() { - - /** @const {string} */ - var EXTENSION_BASE_URL = - 'chrome-extension://iadeocfgjdjdmpenejdbfeaocpbikmab/'; - /** @const {string} */ - var PORTAL_OFFLINE_PAGE_URL = EXTENSION_BASE_URL + 'portal_offline.html'; - /** @const {string} */ - var INVALID_DEVICE_INFO_PAGE_URL = - EXTENSION_BASE_URL + 'invalid_device_info.html'; - /** @enum {number} */ var NetworkState = {UNKNOWN: 0, PORTAL_REACHABLE: 1, PORTAL_UNREACHABLE: 2}; /** @enum {number} */ - var CarrierPageType = {NOT_SET: 0, PORTAL_OFFLINE: 1, INVALID_DEVICE_INFO: 2}; + var StatusMessageType = {NOT_SET: 0, PORTAL_OFFLINE: 1}; function PortalImpl() { // Mobile device information. this.deviceInfo_ = null; - this.spinnerInt_ = -1; this.networkState_ = NetworkState.UNKNOWN; this.portalFrameSet_ = false; - this.carrierPageType_ = CarrierPageType.NOT_SET; + this.statusMessageType_ = StatusMessageType.NOT_SET; } cr.addSingletonGetter(PortalImpl); @@ -59,64 +48,51 @@ if (!this.deviceInfo_ || this.networkState_ == NetworkState.UNKNOWN) return; - if (!this.isDeviceInfoValid_()) { - // If the device info is not valid, hide portalFrame and show system - // status displaying 'invalid device info' page. - this.setCarrierPage_(CarrierPageType.INVALID_DEVICE_INFO); - $('portalFrame').hidden = true; - $('systemStatus').hidden = false; - } else if (this.networkState_ != NetworkState.PORTAL_REACHABLE) { - // If the portal is not reachable, hide portalFrame and show system - // status displaying 'offline portal' page. - this.setCarrierPage_(CarrierPageType.PORTAL_OFFLINE); + if (!this.isDeviceInfoValid_() || + this.networkState_ != NetworkState.PORTAL_REACHABLE) { + // If the device info is not valid or portal is unreachable, hide + // portalFrame and show system status displaying error message. + this.setStatusMessage_(StatusMessageType.PORTAL_OFFLINE); $('portalFrame').hidden = true; $('systemStatus').hidden = false; } else { // If the portal is reachable and device info is valid, set and show - // portalFrame; and hide system status displaying 'offline portal' page. + // portalFrame; and hide system status displaying 'offline portal' + // message. this.setPortalFrameIfNeeded_(this.deviceInfo_); - this.setCarrierPage_(CarrierPageType.NOT_SET); + this.setStatusMessage_(StatusMessageType.NOT_SET); $('portalFrame').hidden = false; $('systemStatus').hidden = true; - this.stopSpinner_(); } }, /** - * Updates the carrier page webview src, depending on the requested carrier - * page type. Note that the webview is expected to load only extension - * URLs - specifically, the mobile setup extension URLs. - * @param {CarrierPageType} type The requested carrier page type. + * Updates the status header and status message text content, depending on + * the requested status message type. + * @param {StatusMessageType} type The requested status message type. * @private */ - setCarrierPage_(type) { - // The page is already set, nothing to do. - if (type == this.carrierPageType_) + setStatusMessage_(type) { + // The status is already set, nothing to do. + if (type == this.statusMessageType_) return; switch (type) { - case CarrierPageType.PORTAL_OFFLINE: - $('carrierPage').src = PORTAL_OFFLINE_PAGE_URL; + case StatusMessageType.PORTAL_OFFLINE: $('statusHeader').textContent = - loadTimeData.getString('portal_unreachable_header'); - this.startSpinner_(); + loadTimeData.getString('view_account_error_title'); + $('statusMessage').textContent = + loadTimeData.getString('view_account_error_message'); break; - case CarrierPageType.INVALID_DEVICE_INFO: - $('carrierPage').src = INVALID_DEVICE_INFO_PAGE_URL; - $('statusHeader').textContent = - loadTimeData.getString('invalid_device_info_header'); - this.stopSpinner_(); - break; - case CarrierPageType.NOT_SET: - $('carrierPage').src = 'about:blank'; + case StatusMessageType.NOT_SET: + $('statusMessage').textContent = ''; $('statusHeader').textContent = ''; - this.stopSpinner_(); break; default: break; } - this.carrierPageType_ = type; + this.statusMessageType_ = type; }, /** @@ -146,63 +122,6 @@ this.deviceInfo_.MDN.match('[^0]'); }, - startSpinner_() { - this.stopSpinner_(); - this.spinnerInt_ = setInterval(this.drawProgress_.bind(this), 100); - }, - - stopSpinner_() { - if (this.spinnerInt_ != -1) { - clearInterval(this.spinnerInt_); - this.spinnerInt_ = -1; - } - // Clear the spinner canvas. - var ctx = canvas.getContext('2d'); - ctx.clearRect(0, 0, canvas.width, canvas.height); - }, - - drawProgress_() { - var ctx = canvas.getContext('2d'); - ctx.clearRect(0, 0, canvas.width, canvas.height); - - var segmentCount = - Math.min(12, canvas.width / 1.6); // Number of segments - var rotation = 0.75; // Counterclockwise rotation - - // Rotate canvas over time - ctx.translate(canvas.width / 2, canvas.height / 2); - ctx.rotate(Math.PI * 2 / (segmentCount + rotation)); - ctx.translate(-canvas.width / 2, -canvas.height / 2); - - var gap = canvas.width / 24; // Gap between segments - var oRadius = canvas.width / 2; // Outer radius - var iRadius = oRadius * 0.618; // Inner radius - var oCircumference = Math.PI * 2 * oRadius; // Outer circumference - var iCircumference = Math.PI * 2 * iRadius; // Inner circumference - var oGap = gap / oCircumference; // Gap size as fraction of outer ring - var iGap = gap / iCircumference; // Gap size as fraction of inner ring - var oArc = - Math.PI * 2 * (1 / segmentCount - oGap); // Angle of outer arcs - var iArc = - Math.PI * 2 * (1 / segmentCount - iGap); // Angle of inner arcs - - for (i = 0; i < segmentCount; i++) { // Draw each segment - var opacity = Math.pow(1.0 - i / segmentCount, 3.0); - opacity = (0.15 + opacity * 0.8); // Vary from 0.15 to 0.95 - var angle = -Math.PI * 2 * i / segmentCount; - - ctx.beginPath(); - ctx.arc( - canvas.width / 2, canvas.height / 2, oRadius, angle - oArc / 2, - angle + oArc / 2, false); - ctx.arc( - canvas.width / 2, canvas.height / 2, iRadius, angle + iArc / 2, - angle - iArc / 2, true); - ctx.closePath(); - ctx.fillStyle = 'rgba(240, 30, 29, ' + opacity + ')'; - ctx.fill(); - } - } }; function MobileSetupPortal() {}
diff --git a/chrome/browser/resources/read_later/side_panel/app.ts b/chrome/browser/resources/read_later/side_panel/app.ts index 75ab34de..a1a753a 100644 --- a/chrome/browser/resources/read_later/side_panel/app.ts +++ b/chrome/browser/resources/read_later/side_panel/app.ts
@@ -89,4 +89,11 @@ Object.keys(this.tabs_)[tabIndex]; } } + +declare global { + interface HTMLElementTagNameMap { + 'side-panel-app': SidePanelAppElement; + } +} + customElements.define(SidePanelAppElement.is, SidePanelAppElement);
diff --git a/chrome/browser/resources/read_later/side_panel/bookmark_folder.ts b/chrome/browser/resources/read_later/side_panel/bookmark_folder.ts index f18975f..3ffb65a 100644 --- a/chrome/browser/resources/read_later/side_panel/bookmark_folder.ts +++ b/chrome/browser/resources/read_later/side_panel/bookmark_folder.ts
@@ -246,13 +246,20 @@ } } +declare global { + interface HTMLElementTagNameMap { + 'bookmark-folder': BookmarkFolderElement; + } +} + customElements.define(BookmarkFolderElement.is, BookmarkFolderElement); interface DraggableElement extends HTMLElement { dataBookmark: chrome.bookmarks.BookmarkTreeNode; } -export function getBookmarkFromElement(element: HTMLElement) { +export function getBookmarkFromElement(element: HTMLElement): + chrome.bookmarks.BookmarkTreeNode { return (element as DraggableElement).dataBookmark; }
diff --git a/chrome/browser/resources/read_later/side_panel/bookmarks_list.ts b/chrome/browser/resources/read_later/side_panel/bookmarks_list.ts index 5d347ac..429916f 100644 --- a/chrome/browser/resources/read_later/side_panel/bookmarks_list.ts +++ b/chrome/browser/resources/read_later/side_panel/bookmarks_list.ts
@@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import {CrA11yAnnouncerElement} from 'chrome://resources/cr_elements/cr_a11y_announcer/cr_a11y_announcer.js'; +import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; import {afterNextRender, html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {BookmarkFolderElement, FOLDER_OPEN_CHANGED_EVENT, getBookmarkFromElement, isBookmarkFolderElement} from './bookmark_folder.js'; @@ -11,6 +13,10 @@ // Key for localStorage object that refers to all the open folders. export const LOCAL_STORAGE_OPEN_FOLDERS_KEY = 'openFolders'; +function getBookmarkName(bookmark: chrome.bookmarks.BookmarkTreeNode): string { + return bookmark.title || bookmark.url || ''; +} + export class BookmarksListElement extends PolymerElement { static get is() { return 'bookmarks-list'; @@ -216,6 +222,8 @@ this.splice(`${pathToParentString}.children`, node.index!, 0, node); afterNextRender(this, () => { this.focusBookmark_(node.id); + CrA11yAnnouncerElement.getInstance().announce( + loadTimeData.getStringF('bookmarkCreated', getBookmarkName(node))); }); } @@ -259,6 +267,8 @@ this.bookmarksApi_.cutBookmark(bookmarkData.id); } else if (event.key === 'c') { this.bookmarksApi_.copyBookmark(bookmarkData.id); + CrA11yAnnouncerElement.getInstance().announce(loadTimeData.getStringF( + 'bookmarkCopied', getBookmarkName(bookmarkData))); } else if (event.key === 'v') { if (isBookmarkFolderElement(eventTarget)) { this.bookmarksApi_.pasteToBookmark(bookmarkData.id); @@ -298,7 +308,7 @@ const oldParentPath = this.findPathToId_(movedInfo.oldParentId); const oldParentPathString = this.getPathString_(oldParentPath); const oldParent = oldParentPath[oldParentPath.length - 1]; - const movedNode = oldParent!.children![movedInfo.oldIndex]; + const movedNode = oldParent!.children![movedInfo.oldIndex]!; Object.assign( movedNode, {index: movedInfo.index, parentId: movedInfo.parentId}); this.splice(`${oldParentPathString}.children`, movedInfo.oldIndex, 1); @@ -312,6 +322,15 @@ } this.splice( `${newParentPathString}.children`, movedInfo.index, 0, movedNode); + + if (movedInfo.oldParentId === movedInfo.parentId) { + CrA11yAnnouncerElement.getInstance().announce(loadTimeData.getStringF( + 'bookmarkReordered', getBookmarkName(movedNode))); + } else { + CrA11yAnnouncerElement.getInstance().announce(loadTimeData.getStringF( + 'bookmarkMoved', getBookmarkName(movedNode), + getBookmarkName(newParent!))); + } } private onRemoved_(id: string) { @@ -322,6 +341,9 @@ this.splice( `${oldParentPathString}.children`, oldParent.children!.indexOf(removedNode), 1); + + CrA11yAnnouncerElement.getInstance().announce(loadTimeData.getStringF( + 'bookmarkDeleted', getBookmarkName(removedNode))); } private focusBookmark_(id: string) { @@ -346,4 +368,10 @@ } } +declare global { + interface HTMLElementTagNameMap { + 'bookmarks-list': BookmarksListElement; + } +} + customElements.define(BookmarksListElement.is, BookmarksListElement);
diff --git a/chrome/browser/resources/settings/autofill_page/autofill_page.ts b/chrome/browser/resources/settings/autofill_page/autofill_page.ts index d48c6882..c5ff980a 100644 --- a/chrome/browser/resources/settings/autofill_page/autofill_page.ts +++ b/chrome/browser/resources/settings/autofill_page/autofill_page.ts
@@ -28,7 +28,8 @@ const SettingsAutofillPageElementBase = PrefsMixin(PasswordCheckMixin(BaseMixin(PolymerElement))); -class SettingsAutofillPageElement extends SettingsAutofillPageElementBase { +export class SettingsAutofillPageElement extends + SettingsAutofillPageElementBase { static get is() { return 'settings-autofill-page'; } @@ -101,5 +102,11 @@ } } +declare global { + interface HTMLElementTagNameMap { + 'settings-autofill-page': SettingsAutofillPageElement; + } +} + customElements.define( SettingsAutofillPageElement.is, SettingsAutofillPageElement);
diff --git a/chrome/browser/resources/settings/autofill_page/autofill_section.ts b/chrome/browser/resources/settings/autofill_page/autofill_section.ts index e6a49ba4..19ede76 100644 --- a/chrome/browser/resources/settings/autofill_page/autofill_section.ts +++ b/chrome/browser/resources/settings/autofill_page/autofill_section.ts
@@ -43,7 +43,7 @@ }; } -interface SettingsAutofillSectionElement { +export interface SettingsAutofillSectionElement { $: { addressSharedMenu: CrActionMenuElement, addAddress: HTMLElement, @@ -52,7 +52,7 @@ const SettingsAutofillSectionElementBase = I18nMixin(PolymerElement); -class SettingsAutofillSectionElement extends +export class SettingsAutofillSectionElement extends SettingsAutofillSectionElementBase { static get is() { return 'settings-autofill-section'; @@ -219,5 +219,11 @@ } } +declare global { + interface HTMLElementTagNameMap { + 'settings-autofill-section': SettingsAutofillSectionElement; + } +} + customElements.define( SettingsAutofillSectionElement.is, SettingsAutofillSectionElement);
diff --git a/chrome/browser/resources/settings/autofill_page/credit_card_edit_dialog.ts b/chrome/browser/resources/settings/autofill_page/credit_card_edit_dialog.ts index e61d2107..6993d35 100644 --- a/chrome/browser/resources/settings/autofill_page/credit_card_edit_dialog.ts +++ b/chrome/browser/resources/settings/autofill_page/credit_card_edit_dialog.ts
@@ -16,6 +16,7 @@ import '../settings_shared_css.js'; import '../settings_vars_css.js'; +import {CrButtonElement} from 'chrome://resources/cr_elements/cr_button/cr_button.m.js'; import {CrDialogElement} from 'chrome://resources/cr_elements/cr_dialog/cr_dialog.m.js'; import {I18nMixin} from 'chrome://resources/js/i18n_mixin.js'; import {html, microTask, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; @@ -34,9 +35,11 @@ } } -interface SettingsCreditCardEditDialogElement { +export interface SettingsCreditCardEditDialogElement { $: { + cancelButton: CrButtonElement, dialog: CrDialogElement, + saveButton: CrButtonElement, month: HTMLSelectElement, year: HTMLSelectElement, }; @@ -44,7 +47,7 @@ const SettingsCreditCardEditDialogElementBase = I18nMixin(PolymerElement); -class SettingsCreditCardEditDialogElement extends +export class SettingsCreditCardEditDialogElement extends SettingsCreditCardEditDialogElementBase { static get is() { return 'settings-credit-card-edit-dialog'; @@ -274,6 +277,12 @@ } } +declare global { + interface HTMLElementTagNameMap { + 'settings-credit-card-edit-dialog': SettingsCreditCardEditDialogElement; + } +} + customElements.define( SettingsCreditCardEditDialogElement.is, SettingsCreditCardEditDialogElement);
diff --git a/chrome/browser/resources/settings/autofill_page/password_edit_dialog.html b/chrome/browser/resources/settings/autofill_page/password_edit_dialog.html index dbdcf42..dc011fa 100644 --- a/chrome/browser/resources/settings/autofill_page/password_edit_dialog.html +++ b/chrome/browser/resources/settings/autofill_page/password_edit_dialog.html
@@ -1,6 +1,6 @@ -<style include="settings-shared passwords-shared md-select"> - cr-input:not(:last-of-type) { - margin-bottom: var(--cr-form-field-bottom-spacing); +<style include="settings-shared passwords-shared md-select action-link"> + cr-input:not(:first-of-type) { + margin-top: var(--cr-form-field-bottom-spacing); } cr-icon-button { @@ -32,6 +32,13 @@ margin-bottom: var(--cr-form-field-bottom-spacing); margin-top: 2px; /* Needed to avoid outline cropping */ } + + #viewExistingPasswordLink { + display: block; + font-size: var(--cr-form-field-label-font-size); + line-height: 1; + width: fit-content; + } </style> <cr-dialog id="dialog" close-text="$i18n{close}" show-on-attach> <div slot="title" id="title">[[getTitle_(dialogMode_)]]</div> @@ -64,8 +71,13 @@ <cr-input id="usernameInput" label="$i18n{editPasswordUsernameLabel}" readonly="[[isInViewMode_]]" invalid="[[usernameInputInvalid_]]" value="{{username_}}" - error-message="$i18n{usernameAlreadyUsed}"> + error-message="[[getUsernameErrorMessage_(websiteUrls_.shown)]]"> </cr-input> + <a id="viewExistingPasswordLink" is="action-link" + on-click="onViewExistingPasswordClick_" + aria-description="[[getViewExistingPasswordAriaDescription_( + websiteUrls_.shown, username_)]]" + hidden="[[!usernameInputInvalid_]]">$i18n{viewExistingPassword}</a> <cr-input id="passwordInput" label="$i18n{editPasswordPasswordLabel}" type="[[getPasswordInputType_(isInViewMode_, isPasswordVisible_)]]" value="{{password_}}" class="password-input" @@ -74,7 +86,7 @@ <template is="dom-if" if="[[!isInViewMode_]]"> <cr-icon-button id="showPasswordButton" class$="[[getIconClass_(isPasswordVisible_)]]" - slot="suffix" on-click="onShowPasswordButtonTap_" + slot="suffix" on-click="onShowPasswordButtonClick_" title="[[showPasswordTitle_(isPasswordVisible_)]]"> </cr-icon-button> </template> @@ -89,7 +101,8 @@ $i18n{cancel} </cr-button> <cr-button id="actionButton" class="action-button" - on-click="onActionButtonTap_" disabled="[[isSaveButtonDisabled_]]"> + on-click="onActionButtonClick_" + disabled="[[isSaveButtonDisabled_]]"> [[getActionButtonName_(isInViewMode_)]] </cr-button> </div>
diff --git a/chrome/browser/resources/settings/autofill_page/password_edit_dialog.ts b/chrome/browser/resources/settings/autofill_page/password_edit_dialog.ts index cd48e8f..7c914b0 100644 --- a/chrome/browser/resources/settings/autofill_page/password_edit_dialog.ts +++ b/chrome/browser/resources/settings/autofill_page/password_edit_dialog.ts
@@ -24,6 +24,9 @@ import {I18nMixin} from 'chrome://resources/js/i18n_mixin.js'; import {html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; +// <if expr="chromeos or lacros"> +import {BlockingRequestManager} from './blocking_request_manager.js'; +// </if> import {MultiStorePasswordUiEntry} from './multi_store_password_ui_entry.js'; import {PasswordManagerImpl} from './password_manager_proxy.js'; @@ -85,6 +88,13 @@ value: () => [], }, + // <if expr="chromeos or lacros"> + /** + * Used for authentication when switching from ADD to EDIT mode. + */ + tokenRequestManager: {type: Object, value: null}, + // </if> + dialogMode_: { type: String, computed: 'computeDialogMode_(existingEntry)', @@ -159,6 +169,9 @@ readonly storeOptionAccountValue: string; readonly storeOptionDeviceValue: string; savedPasswords: Array<MultiStorePasswordUiEntry>; + // <if expr="chromeos or lacros"> + tokenRequestManager: BlockingRequestManager|null; + // </if> private usernamesByOrigin_: Map<string, Set<string>>|null = null; private dialogMode_: PasswordDialogMode; private isInViewMode_: boolean; @@ -173,6 +186,10 @@ connectedCallback() { super.connectedCallback(); + this.initDialog_(); + } + + private initDialog_() { if (this.existingEntry) { this.websiteUrls_ = this.existingEntry.urls; this.username_ = this.existingEntry.username; @@ -189,6 +206,7 @@ this.storeOptionDeviceValue; }); } + this.isPasswordVisible_ = false; } /** Closes the dialog. */ @@ -284,7 +302,7 @@ /** * Handler for tapping the show/hide button. */ - private onShowPasswordButtonTap_() { + private onShowPasswordButtonClick_() { assert(!this.isInViewMode_); this.isPasswordVisible_ = !this.isPasswordVisible_; } @@ -294,7 +312,7 @@ * For 'save' button it should save new password. After pressing action button * the edit dialog should be closed. */ - private onActionButtonTap_() { + private onActionButtonClick_() { switch (this.dialogMode_) { case PasswordDialogMode.VIEW: this.close(); @@ -457,6 +475,53 @@ }); } + private getUsernameErrorMessage_(): string { + return this.websiteUrls_ ? + this.i18n('usernameAlreadyUsed', this.websiteUrls_.shown) : + ''; + } + + private getViewExistingPasswordAriaDescription_(): string { + return this.websiteUrls_ ? this.i18n( + 'viewExistingPasswordAriaDescription', + this.username_, this.websiteUrls_.shown) : + ''; + } + + private onViewExistingPasswordClick_() { + const existingEntry = this.savedPasswords.find(entry => { + return entry.urls.origin === this.websiteUrls_!.origin && + entry.username === this.username_; + })!; + this.requestPlaintextPasswordForEditing_(existingEntry.getAnyId()) + .then(password => { + existingEntry.password = password; + this.switchToEditMode_(existingEntry); + }); + } + + private requestPlaintextPasswordForEditing_(id: number): Promise<string> { + return new Promise(resolve => { + PasswordManagerImpl.getInstance() + .requestPlaintextPassword( + id, chrome.passwordsPrivate.PlaintextReason.EDIT) + .then(password => resolve(password), () => { + // <if expr="chromeos or lacros"> + // If no password was found, refresh auth token and retry. + this.tokenRequestManager!.request(() => { + this.requestPlaintextPasswordForEditing_(id).then(resolve); + }); + // </if> + }); + }); + } + + private switchToEditMode_(existingEntry: MultiStorePasswordUiEntry) { + this.existingEntry = existingEntry; + this.initDialog_(); + this.$.dialog.focus(); + } + /** * Checks whether edited username is not used for the same website. */
diff --git a/chrome/browser/resources/settings/autofill_page/passwords_section.html b/chrome/browser/resources/settings/autofill_page/passwords_section.html index 5ce21d19..66d9808 100644 --- a/chrome/browser/resources/settings/autofill_page/passwords_section.html +++ b/chrome/browser/resources/settings/autofill_page/passwords_section.html
@@ -263,6 +263,9 @@ <password-edit-dialog on-close="onAddPasswordDialogClosed_" id="addPasswordDialog" account-email="[[profileEmail_]]" saved-passwords="[[savedPasswords]]" +<if expr="chromeos or lacros"> + token-request-manager="[[tokenRequestManager_]]" +</if> is-account-store-user="[[isAccountStoreUser_]]"> </password-edit-dialog> </template>
diff --git a/chrome/browser/resources/settings/autofill_page/payments_section.ts b/chrome/browser/resources/settings/autofill_page/payments_section.ts index d563a0b..fcc334a 100644 --- a/chrome/browser/resources/settings/autofill_page/payments_section.ts +++ b/chrome/browser/resources/settings/autofill_page/payments_section.ts
@@ -21,6 +21,7 @@ import './payments_list.js'; import {CrActionMenuElement} from 'chrome://resources/cr_elements/cr_action_menu/cr_action_menu.js'; +import {CrButtonElement} from 'chrome://resources/cr_elements/cr_button/cr_button.m.js'; import {assert} from 'chrome://resources/js/assert.m.js'; import {focusWithoutInk} from 'chrome://resources/js/cr/ui/focus_without_ink.m.js'; import {I18nMixin} from 'chrome://resources/js/i18n_mixin.js'; @@ -45,16 +46,23 @@ } } -interface SettingsPaymentsSectionElement { +export interface SettingsPaymentsSectionElement { $: { + addCreditCard: CrButtonElement, + autofillCreditCardToggle: SettingsToggleButtonElement, + canMakePaymentToggle: SettingsToggleButtonElement, creditCardSharedMenu: CrActionMenuElement, - addCreditCard: HTMLElement, + menuClearCreditCard: HTMLElement, + menuEditCreditCard: HTMLElement, + menuRemoveCreditCard: HTMLElement, + migrateCreditCards: HTMLElement, + paymentsList: HTMLElement, }; } const SettingsPaymentsSectionElementBase = I18nMixin(PolymerElement); -class SettingsPaymentsSectionElement extends +export class SettingsPaymentsSectionElement extends SettingsPaymentsSectionElementBase { static get is() { return 'settings-payments-section'; @@ -66,6 +74,8 @@ static get properties() { return { + prefs: Object, + /** * An array of all saved credit cards. */ @@ -114,6 +124,7 @@ }; } + prefs: {[key: string]: any}; creditCards: Array<chrome.autofillPrivate.CreditCardEntry>; upiIds: Array<string>; private userIsFidoVerifiable_: boolean; @@ -343,5 +354,11 @@ } } +declare global { + interface HTMLElementTagNameMap { + 'settings-payments-section': SettingsPaymentsSectionElement; + } +} + customElements.define( SettingsPaymentsSectionElement.is, SettingsPaymentsSectionElement);
diff --git a/chrome/browser/resources/settings/lazy_load.ts b/chrome/browser/resources/settings/lazy_load.ts index d3f7dd1..9915f8f 100644 --- a/chrome/browser/resources/settings/lazy_load.ts +++ b/chrome/browser/resources/settings/lazy_load.ts
@@ -67,15 +67,18 @@ export {FontsBrowserProxy, FontsBrowserProxyImpl, FontsData} from './appearance_page/fonts_browser_proxy.js'; export {CountryDetailManagerImpl} from './autofill_page/address_edit_dialog.js'; export {AutofillManagerImpl, AutofillManagerProxy, PersonalDataChangedListener} from './autofill_page/autofill_manager_proxy.js'; +export {SettingsAutofillSectionElement} from './autofill_page/autofill_section.js'; // <if expr="chromeos or lacros"> export {BlockingRequestManager} from './autofill_page/blocking_request_manager.js'; // </if> +export {SettingsCreditCardEditDialogElement} from './autofill_page/credit_card_edit_dialog.js'; export {PasswordEditDialogElement} from './autofill_page/password_edit_dialog.js'; export {PasswordListItemElement} from './autofill_page/password_list_item.js'; export {PasswordMoveMultiplePasswordsToAccountDialogElement} from './autofill_page/password_move_multiple_passwords_to_account_dialog.js'; export {PasswordsExportDialogElement} from './autofill_page/passwords_export_dialog.js'; export {PasswordsSectionElement} from './autofill_page/passwords_section.js'; export {PaymentsManagerImpl, PaymentsManagerProxy} from './autofill_page/payments_manager_proxy.js'; +export {SettingsPaymentsSectionElement} from './autofill_page/payments_section.js'; // <if expr="_google_chrome and is_win"> export {ChromeCleanupIdleReason} from './chrome_cleanup_page/chrome_cleanup_page.js'; export {ChromeCleanupProxy, ChromeCleanupProxyImpl} from './chrome_cleanup_page/chrome_cleanup_proxy.js';
diff --git a/chrome/browser/resources/settings/settings.ts b/chrome/browser/resources/settings/settings.ts index 106e14d..1bf00a7 100644 --- a/chrome/browser/resources/settings/settings.ts +++ b/chrome/browser/resources/settings/settings.ts
@@ -15,6 +15,7 @@ export {AppearanceBrowserProxy, AppearanceBrowserProxyImpl} from './appearance_page/appearance_browser_proxy.js'; export {SettingsAppearancePageElement} from './appearance_page/appearance_page.js'; export {HomeUrlInputElement} from './appearance_page/home_url_input.js'; +export {SettingsAutofillPageElement} from './autofill_page/autofill_page.js'; export {MultiStoreExceptionEntry} from './autofill_page/multi_store_exception_entry.js'; export {MultiStorePasswordUiEntry} from './autofill_page/multi_store_password_ui_entry.js'; export {AccountStorageOptInStateChangedListener, CredentialsChangedListener, PasswordCheckInteraction, PasswordCheckReferrer, PasswordCheckStatusChangedListener, PasswordExceptionListChangedListener, PasswordManagerImpl, PasswordManagerProxy, PasswordsFileExportProgressListener, SavedPasswordListChangedListener} from './autofill_page/password_manager_proxy.js';
diff --git a/chrome/browser/resources/signin/signin_reauth/signin_reauth_app.html b/chrome/browser/resources/signin/signin_reauth/signin_reauth_app.html index c6e739c6..59d61bd5 100644 --- a/chrome/browser/resources/signin/signin_reauth/signin_reauth_app.html +++ b/chrome/browser/resources/signin/signin_reauth/signin_reauth_app.html
@@ -78,7 +78,9 @@ $i18n{signinReauthTitle} </h1> <div class="message-container"> - <div consent-description>$i18n{signinReauthDesc}</div> + <div consent-description> + $i18n{signinReauthDesc} + </div> </div> </div> <div class="action-container">
diff --git a/chrome/browser/share/share_submenu_model.cc b/chrome/browser/share/share_submenu_model.cc index f0206ec4..d5d0ff7 100644 --- a/chrome/browser/share/share_submenu_model.cc +++ b/chrome/browser/share/share_submenu_model.cc
@@ -8,6 +8,7 @@ #include "build/build_config.h" #include "chrome/app/chrome_command_ids.h" #include "chrome/app/vector_icons/vector_icons.h" +#include "chrome/browser/profiles/profile.h" #include "chrome/browser/send_tab_to_self/send_tab_to_self_desktop_util.h" #include "chrome/browser/send_tab_to_self/send_tab_to_self_util.h" #include "chrome/browser/share/share_features.h" @@ -25,6 +26,7 @@ #include "components/send_tab_to_self/metrics_util.h" #include "components/strings/grit/components_strings.h" #include "components/url_formatter/url_formatter.h" +#include "content/public/browser/web_contents.h" #include "ui/base/clipboard/scoped_clipboard_writer.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/models/image_model.h" @@ -80,13 +82,13 @@ } ShareSubmenuModel::ShareSubmenuModel( - Browser* browser, + content::WebContents* web_contents, std::unique_ptr<ui::DataTransferEndpoint> source_endpoint, Context context, GURL url, std::u16string text) : ui::SimpleMenuModel(this), - browser_(browser), + web_contents_(web_contents), source_endpoint_(std::move(source_endpoint)), context_(context), url_(url), @@ -164,11 +166,11 @@ void ShareSubmenuModel::AddSendTabToSelfItem() { // Allowed in tests. - if (!browser_) + if (!web_contents_) return; send_tab_to_self::SendTabToSelfSyncService* service = - SendTabToSelfSyncServiceFactory::GetForProfile(browser_->profile()); + SendTabToSelfSyncServiceFactory::GetForProfile(GetProfile()); if (!send_tab_to_self::ShouldOfferToShareUrl(service, url_)) return; @@ -221,9 +223,8 @@ } void ShareSubmenuModel::GenerateQRCode() { - auto* web_contents = browser_->tab_strip_model()->GetActiveWebContents(); auto* bubble_controller = - qrcode_generator::QRCodeGeneratorBubbleController::Get(web_contents); + qrcode_generator::QRCodeGeneratorBubbleController::Get(web_contents_); if (context_ == Context::IMAGE) { base::RecordAction(base::UserMetricsAction( @@ -240,11 +241,9 @@ } void ShareSubmenuModel::SendTabToSelf() { - content::WebContents* web_contents = - browser_->tab_strip_model()->GetActiveWebContents(); send_tab_to_self::SendTabToSelfBubbleController* controller = send_tab_to_self::SendTabToSelfBubbleController:: - CreateOrGetFromWebContents(web_contents); + CreateOrGetFromWebContents(web_contents_); controller->ShowBubble(); } @@ -252,8 +251,12 @@ if (url_.is_empty() || !url_.is_valid()) return; + auto source_endpoint_copy = + source_endpoint_ + ? std::make_unique<ui::DataTransferEndpoint>(*source_endpoint_) + : nullptr; ui::ScopedClipboardWriter scw(ui::ClipboardBuffer::kCopyPaste, - std::move(source_endpoint_)); + std::move(source_endpoint_copy)); scw.WriteText(FormatURLForClipboard(url_)); } @@ -261,17 +264,21 @@ auto* model = GetSharingHubModel(); DCHECK(model); - model->ExecuteThirdPartyAction(browser_->profile(), url_, text_, id); + model->ExecuteThirdPartyAction(GetProfile(), url_, text_, id); } sharing_hub::SharingHubModel* ShareSubmenuModel::GetSharingHubModel() { // Allowed in unit tests. - if (!browser_) + if (!web_contents_) return nullptr; sharing_hub::SharingHubService* const service = - sharing_hub::SharingHubServiceFactory::GetForProfile(browser_->profile()); + sharing_hub::SharingHubServiceFactory::GetForProfile(GetProfile()); return service ? service->GetSharingHubModel() : nullptr; } +Profile* ShareSubmenuModel::GetProfile() { + return Profile::FromBrowserContext(web_contents_->GetBrowserContext()); +} + } // namespace share
diff --git a/chrome/browser/share/share_submenu_model.h b/chrome/browser/share/share_submenu_model.h index e21db26..3d9a3f8 100644 --- a/chrome/browser/share/share_submenu_model.h +++ b/chrome/browser/share/share_submenu_model.h
@@ -11,7 +11,11 @@ #include "ui/base/models/simple_menu_model.h" #include "url/gurl.h" -class Browser; +class Profile; + +namespace content { +class WebContents; +} namespace sharing_hub { class SharingHubModel; @@ -48,12 +52,14 @@ // based on the state of field trials & flags. static bool IsEnabled(); + // |web_contents| can be null in tests, otherwise it must outlive |this|. In + // other words, this object is tied to a single tab. // The |url| parameter is a bit tricky: it is the "target URL" of the // containing menu, whatever that happens to be. The exact meaning of that // depends on |context|. The |source_endpoint| is the source of |url| or // whichever other data is being offered for share (image or similar), and // |text| is text describing the data being shared. - ShareSubmenuModel(Browser* browser, + ShareSubmenuModel(content::WebContents* web_contents, std::unique_ptr<ui::DataTransferEndpoint> source_endpoint, Context context, GURL url, @@ -78,11 +84,14 @@ sharing_hub::SharingHubModel* GetSharingHubModel(); - raw_ptr<Browser> browser_; - std::unique_ptr<ui::DataTransferEndpoint> source_endpoint_; - Context context_; - GURL url_; - std::u16string text_; + Profile* GetProfile(); + + raw_ptr<content::WebContents> const web_contents_; + // TODO(victorvianna): There's no need to wrap this with std::unique_ptr. + std::unique_ptr<ui::DataTransferEndpoint> const source_endpoint_; + const Context context_; + const GURL url_; + const std::u16string text_; bool menu_opened_for_metrics_ = false; bool any_option_selected_for_metrics_ = false;
diff --git a/chrome/browser/signin/signin_ui_util.cc b/chrome/browser/signin/signin_ui_util.cc index a045ab2..18c541f 100644 --- a/chrome/browser/signin/signin_ui_util.cc +++ b/chrome/browser/signin/signin_ui_util.cc
@@ -151,6 +151,8 @@ return "ToGeneratePassword"; case signin_metrics::ReauthAccessPoint::kPasswordMoveBubble: return "ToMovePassword"; + case signin_metrics::ReauthAccessPoint::kPasswordSaveLocallyBubble: + return "ToSavePasswordLocallyThenMove"; } }
diff --git a/chrome/browser/speech/tts_chromeos.cc b/chrome/browser/speech/tts_chromeos.cc index bb04b106..0930690 100644 --- a/chrome/browser/speech/tts_chromeos.cc +++ b/chrome/browser/speech/tts_chromeos.cc
@@ -7,10 +7,10 @@ #include <algorithm> #include <utility> +#include "ash/components/arc/mojom/tts.mojom.h" #include "ash/components/arc/session/arc_bridge_service.h" #include "ash/components/arc/session/arc_service_manager.h" #include "base/strings/string_number_conversions.h" -#include "components/arc/mojom/tts.mojom.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/tts_platform.h"
diff --git a/chrome/browser/task_manager/providers/arc/arc_process_task.cc b/chrome/browser/task_manager/providers/arc/arc_process_task.cc index bfd0ed7..393def12 100644 --- a/chrome/browser/task_manager/providers/arc/arc_process_task.cc +++ b/chrome/browser/task_manager/providers/arc/arc_process_task.cc
@@ -7,6 +7,7 @@ #include <utility> #include "ash/components/arc/arc_util.h" +#include "ash/components/arc/mojom/process.mojom.h" #include "ash/components/arc/session/arc_bridge_service.h" #include "ash/components/arc/session/arc_service_manager.h" #include "base/bind.h" @@ -15,7 +16,6 @@ #include "base/strings/utf_string_conversions.h" #include "chrome/grit/generated_resources.h" #include "components/arc/intent_helper/arc_intent_helper_bridge.h" -#include "components/arc/mojom/process.mojom.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/common/child_process_host.h"
diff --git a/chrome/browser/task_manager/providers/arc/arc_process_task.h b/chrome/browser/task_manager/providers/arc/arc_process_task.h index 9a4aac9..d07f4f9 100644 --- a/chrome/browser/task_manager/providers/arc/arc_process_task.h +++ b/chrome/browser/task_manager/providers/arc/arc_process_task.h
@@ -8,13 +8,13 @@ #include <memory> #include <string> +#include "ash/components/arc/mojom/process.mojom-forward.h" #include "ash/components/arc/session/connection_observer.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/ash/arc/process/arc_process.h" #include "chrome/browser/task_manager/providers/task.h" #include "components/arc/intent_helper/arc_intent_helper_bridge.h" #include "components/arc/mojom/intent_helper.mojom-forward.h" -#include "components/arc/mojom/process.mojom-forward.h" namespace task_manager {
diff --git a/chrome/browser/task_manager/providers/arc/arc_process_task_provider.cc b/chrome/browser/task_manager/providers/arc/arc_process_task_provider.cc index 4ffb9c8c..f554a64 100644 --- a/chrome/browser/task_manager/providers/arc/arc_process_task_provider.cc +++ b/chrome/browser/task_manager/providers/arc/arc_process_task_provider.cc
@@ -11,6 +11,7 @@ #include <utility> #include <vector> +#include "ash/components/arc/mojom/process.mojom.h" #include "base/bind.h" #include "base/callback.h" #include "base/logging.h" @@ -18,7 +19,6 @@ #include "base/threading/thread_task_runner_handle.h" #include "base/trace_event/trace_event.h" #include "chrome/browser/ash/arc/process/arc_process_service.h" -#include "components/arc/mojom/process.mojom.h" namespace task_manager {
diff --git a/chrome/browser/task_manager/sampling/arc_shared_sampler.h b/chrome/browser/task_manager/sampling/arc_shared_sampler.h index 7486480..44cf8b5 100644 --- a/chrome/browser/task_manager/sampling/arc_shared_sampler.h +++ b/chrome/browser/task_manager/sampling/arc_shared_sampler.h
@@ -9,11 +9,11 @@ #include <map> +#include "ash/components/arc/mojom/process.mojom.h" #include "base/callback.h" #include "base/containers/flat_map.h" #include "base/memory/weak_ptr.h" #include "base/process/process_handle.h" -#include "components/arc/mojom/process.mojom.h" #include "third_party/abseil-cpp/absl/types/optional.h" namespace task_manager {
diff --git a/chrome/browser/themes/theme_helper.cc b/chrome/browser/themes/theme_helper.cc index ccec930f..238ce8f3 100644 --- a/chrome/browser/themes/theme_helper.cc +++ b/chrome/browser/themes/theme_helper.cc
@@ -120,7 +120,7 @@ case TP::COLOR_TAB_GROUP_TABSTRIP_FRAME_ACTIVE_GREY: case TP::COLOR_TAB_GROUP_TABSTRIP_FRAME_INACTIVE_GREY: default: - return {gfx::kGoogleGrey600, gfx::kGoogleGrey300}; + return {gfx::kGoogleGrey700, gfx::kGoogleGrey300}; } }
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 669d4755..121599a 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -1249,6 +1249,8 @@ "startup/automation_infobar_delegate.h", "startup/google_api_keys_infobar_delegate.cc", "startup/google_api_keys_infobar_delegate.h", + "startup/infobar_utils.cc", + "startup/infobar_utils.h", "startup/launch_mode_recorder.cc", "startup/launch_mode_recorder.h", "startup/obsolete_system_infobar_delegate.cc",
diff --git a/chrome/browser/ui/android/night_mode/BUILD.gn b/chrome/browser/ui/android/night_mode/BUILD.gn index 23e5203..c0362127 100644 --- a/chrome/browser/ui/android/night_mode/BUILD.gn +++ b/chrome/browser/ui/android/night_mode/BUILD.gn
@@ -36,9 +36,9 @@ "//components/browser_ui/strings/android:browser_ui_strings_grd", "//components/browser_ui/widget/android:java", "//components/content_settings/android:content_settings_enums_java", + "//components/content_settings/android:java", "//components/feature_engagement/public:public_java", "//components/messages/android:java", - "//components/prefs/android:java", "//components/ukm/android:java", "//components/user_prefs/android:java", "//content/public/android:content_full_java", @@ -126,6 +126,7 @@ "//components/browser_ui/settings/android:java", "//components/browser_ui/site_settings/android:java", "//components/content_settings/android:content_settings_enums_java", + "//components/content_settings/android:java", "//components/feature_engagement/public:public_java", "//components/messages/android:java", "//components/prefs/android:java",
diff --git a/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeController.java b/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeController.java index 23de5b3..b248da7 100644 --- a/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeController.java +++ b/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeController.java
@@ -4,105 +4,98 @@ package org.chromium.chrome.browser.night_mode; -import androidx.annotation.IntDef; -import androidx.annotation.VisibleForTesting; +import android.content.Context; -import org.chromium.base.ApplicationState; -import org.chromium.base.ApplicationStatus; -import org.chromium.base.ApplicationStatus.ApplicationStateListener; -import org.chromium.base.metrics.RecordHistogram; -import org.chromium.chrome.browser.preferences.Pref; -import org.chromium.chrome.browser.profiles.Profile; -import org.chromium.components.browser_ui.site_settings.SingleCategorySettings; +import org.chromium.components.browser_ui.site_settings.AutoDarkMetrics; +import org.chromium.components.browser_ui.site_settings.AutoDarkMetrics.AutoDarkSettingsChangeSource; import org.chromium.components.browser_ui.site_settings.WebsitePreferenceBridge; import org.chromium.components.content_settings.ContentSettingValues; import org.chromium.components.content_settings.ContentSettingsType; import org.chromium.components.ukm.UkmRecorder; -import org.chromium.components.user_prefs.UserPrefs; +import org.chromium.content_public.browser.BrowserContextHandle; import org.chromium.content_public.browser.WebContents; +import org.chromium.ui.util.ColorUtils; import org.chromium.url.GURL; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - /** - * A controller class could enable or disable web content dark mode feature based on the night mode - * and the user preference. - * - * TODO(https://crbug.com/1249345): Rework and try removing Pref.WEB_KIT_FORCE_DARK_MODE_ENABLED. + * A controller class could enable or disable web content dark mode feature based on the content + * settings {@link ContentSettingsType.AUTO_DARK_WEB_CONTENT}. */ -public class WebContentsDarkModeController - implements ApplicationStateListener, SingleCategorySettings.AutoDarkSiteSettingObserver { +public class WebContentsDarkModeController { /** - * Source from which auto dark web content settings changed. This includes both changes to the - * global user settings and the site exceptions. - * - * This is used for histograms and should therefore be treated as append-only. - * See AndroidAutoDarkModeSettingsChangeSource in tools/metrics/histograms/enums.xml. + * Return whether auto dark mode is enable for a given URL. + * @param browserContextHandle Current browser context handle. + * @param url Queried URL to check whether auto dark is enabled. + * @return Whether auto dark mode is enable for a given URL. */ - @IntDef({AutoDarkSettingsChangeSource.THEME_SETTINGS, - AutoDarkSettingsChangeSource.SITE_SETTINGS_GLOBAL, - AutoDarkSettingsChangeSource.APP_MENU, - AutoDarkSettingsChangeSource.SITE_SETTINGS_EXCEPTION_LIST}) - @Retention(RetentionPolicy.SOURCE) - public @interface AutoDarkSettingsChangeSource { - int THEME_SETTINGS = 0; - int SITE_SETTINGS_GLOBAL = 1; - int APP_MENU = 2; - int SITE_SETTINGS_EXCEPTION_LIST = 3; - - int NUM_ENTRIES = 4; - } - - private NightModeStateProvider.Observer mNightModeObserver; - private static WebContentsDarkModeController sController; - - private WebContentsDarkModeController() { - final int applicationState = ApplicationStatus.getStateForApplication(); - if (applicationState == ApplicationState.HAS_RUNNING_ACTIVITIES - || applicationState == ApplicationState.HAS_PAUSED_ACTIVITIES) { - start(); - } else { - // For other application state, set the correct state based on current settings. - enableWebContentsDarkMode(shouldEnableWebContentsDarkMode()); - } - ApplicationStatus.registerApplicationStateListener(this); - } - - /** - * @return The instance can enable or disable the feature. Call the start method to listen - * the user setting and app night mode change so that the instance can automatically apply the - * change. Call the stop method to stop the listening. - */ - public static WebContentsDarkModeController createInstance() { - if (sController == null) { - sController = new WebContentsDarkModeController(); - } - return sController; - } - - public static boolean isEnabledForUrl(Profile profile, GURL url) { + public static boolean isEnabledForUrl(BrowserContextHandle browserContextHandle, GURL url) { @ContentSettingValues int contentSetting = WebsitePreferenceBridge.getContentSetting( - profile, ContentSettingsType.AUTO_DARK_WEB_CONTENT, url, url); + browserContextHandle, ContentSettingsType.AUTO_DARK_WEB_CONTENT, url, url); return contentSetting != ContentSettingValues.BLOCK; } - public static void setEnabledForUrl(Profile profile, GURL url, boolean enabled) { + /** + * Set whether auto dark mode is enable for a given URL. + * @param browserContextHandle Current browser context handle. + * @param url Queried URL whether auto dark is enabled. + * @param enabled Whether auto dark should enabled for the url. + */ + public static void setEnabledForUrl( + BrowserContextHandle browserContextHandle, GURL url, boolean enabled) { // This is only called when a user disables/enables the feature for a site from the app // menu. The app menu item should only be visible (and thus clickable) if Auto Dark is // enabled. If it is enabled, the default content setting should be ALLOW. assert WebsitePreferenceBridge.getDefaultContentSetting( - profile, ContentSettingsType.AUTO_DARK_WEB_CONTENT) + browserContextHandle, ContentSettingsType.AUTO_DARK_WEB_CONTENT) == ContentSettingValues.ALLOW; @ContentSettingValues int contentSettingValue = enabled ? ContentSettingValues.DEFAULT : ContentSettingValues.BLOCK; - WebsitePreferenceBridge.setContentSettingDefaultScope( - profile, ContentSettingsType.AUTO_DARK_WEB_CONTENT, url, url, contentSettingValue); - recordAutoDarkSettingsChangeSource(AutoDarkSettingsChangeSource.APP_MENU, enabled); + WebsitePreferenceBridge.setContentSettingDefaultScope(browserContextHandle, + ContentSettingsType.AUTO_DARK_WEB_CONTENT, url, url, contentSettingValue); + AutoDarkMetrics.recordAutoDarkSettingsChangeSource( + AutoDarkSettingsChangeSource.APP_MENU, enabled); + } + + /** + * Enable or disable the global user settings for auto dark mode. If the global settings is + * enabled, the web contents will be darkened by default if Chrome is in dark mode. + * @param browserContextHandle Current browser context handle. + * @param enabled The new global setting state of the web content auto dark mode. + */ + public static void setGlobalUserSettings( + BrowserContextHandle browserContextHandle, boolean enabled) { + // This function is only used by Theme Settings so far. If this function has additional + // call sites, change the AutoDarkSettingsChangeSource as well. + WebsitePreferenceBridge.setContentSettingEnabled( + browserContextHandle, ContentSettingsType.AUTO_DARK_WEB_CONTENT, enabled); + AutoDarkMetrics.recordAutoDarkSettingsChangeSource( + AutoDarkSettingsChangeSource.THEME_SETTINGS, enabled); + } + + /** + * Return whether web content dark mode is enabled by settings, despite whether the current + * activity is in night mode. + * @param browserContextHandle Current browser context handle. + * */ + public static boolean isGlobalUserSettingsEnabled(BrowserContextHandle browserContextHandle) { + return WebsitePreferenceBridge.isContentSettingEnabled( + browserContextHandle, ContentSettingsType.AUTO_DARK_WEB_CONTENT); + } + + /** + * Whether web contents dark mode feature is enabled for the UI. + * Returns true when auto dark global setting is enabled, and context is in night mode. + * @param context {@link Context} used to check whether UI is in night mode. + * @param browserContextHandle Current browser context handle. + * */ + public static boolean isFeatureEnabled( + Context context, BrowserContextHandle browserContextHandle) { + return WebContentsDarkModeController.isGlobalUserSettingsEnabled(browserContextHandle) + && ColorUtils.inNightMode(context); } /** @@ -115,100 +108,4 @@ new UkmRecorder.Bridge().recordEventWithBooleanMetric( webContents, "Android.DarkTheme.AutoDarkMode", "DisabledByUser"); } - - /** - * Enable or disable the global user settings for auto dark mode. If the global settings is - * enabled, the web contents will be darkened by default if Chrome is in dark mode. - * @param enabled The new global setting state of the web content auto dark mode. - * - */ - public static void setGlobalUserSettings(boolean enabled) { - // This function is only used by Theme Settings so far. If this function has additional - // call sites, change the AutoDarkSettingsChangeSource as well. - WebsitePreferenceBridge.setContentSettingEnabled(Profile.getLastUsedRegularProfile(), - ContentSettingsType.AUTO_DARK_WEB_CONTENT, enabled); - enableWebContentsDarkMode(shouldEnableWebContentsDarkMode()); - recordAutoDarkSettingsChangeSource(AutoDarkSettingsChangeSource.THEME_SETTINGS, enabled); - } - - /** Return whether web content dark mode is enabled by settings. */ - public static boolean isGlobalUserSettingsEnabled() { - return WebsitePreferenceBridge.isContentSettingEnabled( - Profile.getLastUsedRegularProfile(), ContentSettingsType.AUTO_DARK_WEB_CONTENT); - } - - private static boolean shouldEnableWebContentsDarkMode() { - return GlobalNightModeStateProviderHolder.getInstance().isInNightMode() - && isGlobalUserSettingsEnabled(); - } - - private static void enableWebContentsDarkMode(boolean enabled) { - UserPrefs.get(Profile.getLastUsedRegularProfile()) - .setBoolean(Pref.WEB_KIT_FORCE_DARK_MODE_ENABLED, enabled); - } - - /** - * start listening to any event can enable or disable web content dark mode - */ - private void start() { - if (mNightModeObserver != null) return; - mNightModeObserver = () -> enableWebContentsDarkMode(shouldEnableWebContentsDarkMode()); - - enableWebContentsDarkMode(shouldEnableWebContentsDarkMode()); - GlobalNightModeStateProviderHolder.getInstance().addObserver(mNightModeObserver); - SingleCategorySettings.setAutoDarkSiteSettingsObserver(this); - } - - /** - * stop listening to any event can enable or disable web content dark mode - */ - private void stop() { - if (mNightModeObserver == null) return; - GlobalNightModeStateProviderHolder.getInstance().removeObserver(mNightModeObserver); - mNightModeObserver = null; - SingleCategorySettings.setAutoDarkSiteSettingsObserver(null); - } - - @Override - public void onApplicationStateChange(int newState) { - // TODO(https://crbug.com/1249503): Listen to foreground top-level activities only. - if (newState == ApplicationState.HAS_RUNNING_ACTIVITIES) { - start(); - } else if (newState == ApplicationState.HAS_STOPPED_ACTIVITIES) { - stop(); - } - } - - // AutoDarkSiteSettingsObserver: - @Override - public void onDefaultValueChanged(boolean newState) { - enableWebContentsDarkMode(shouldEnableWebContentsDarkMode()); - recordAutoDarkSettingsChangeSource( - AutoDarkSettingsChangeSource.SITE_SETTINGS_GLOBAL, newState); - } - - @Override - public void onSiteExceptionChanged(boolean isAdded) { - recordAutoDarkSettingsChangeSource( - AutoDarkSettingsChangeSource.SITE_SETTINGS_EXCEPTION_LIST, !isAdded); - } - - @VisibleForTesting - public static void setTestInstance(WebContentsDarkModeController testInstance) { - sController = testInstance; - } - - /** - * Records the source that changes the auto dark web content settings. - * @param source The {@link AutoDarkSettingsChangeSource} that changes the auto dark web content - * settings. - * @param enabled Whether auto dark is enabled after the change. - */ - private static void recordAutoDarkSettingsChangeSource( - @AutoDarkSettingsChangeSource int source, boolean enabled) { - String histogram = "Android.DarkTheme.AutoDarkMode.SettingsChangeSource." - + (enabled ? "Enabled" : "Disabled"); - RecordHistogram.recordEnumeratedHistogram( - histogram, source, AutoDarkSettingsChangeSource.NUM_ENTRIES); - } }
diff --git a/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeControllerUnitTest.java b/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeControllerUnitTest.java index 81a5436..65502ed 100644 --- a/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeControllerUnitTest.java +++ b/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeControllerUnitTest.java
@@ -4,14 +4,12 @@ package org.chromium.chrome.browser.night_mode; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.notNull; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; +import android.content.Context; import org.junit.After; import org.junit.Assert; @@ -23,89 +21,36 @@ import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; -import org.robolectric.annotation.Implementation; -import org.robolectric.annotation.Implements; -import org.chromium.base.ApplicationState; -import org.chromium.base.ApplicationStatus; -import org.chromium.base.ApplicationStatus.ApplicationStateListener; import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.metrics.test.ShadowRecordHistogram; import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.util.JniMocker; -import org.chromium.chrome.browser.night_mode.WebContentsDarkModeController.AutoDarkSettingsChangeSource; -import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.profiles.Profile; -import org.chromium.components.browser_ui.site_settings.SingleCategorySettings.AutoDarkSiteSettingObserver; +import org.chromium.components.browser_ui.site_settings.AutoDarkMetrics.AutoDarkSettingsChangeSource; import org.chromium.components.browser_ui.site_settings.WebsitePreferenceBridge; import org.chromium.components.browser_ui.site_settings.WebsitePreferenceBridgeJni; import org.chromium.components.content_settings.ContentSettingValues; import org.chromium.components.content_settings.ContentSettingsType; -import org.chromium.components.prefs.PrefService; -import org.chromium.components.user_prefs.UserPrefs; -import org.chromium.components.user_prefs.UserPrefsJni; +import org.chromium.ui.shadows.ShadowColorUtils; import org.chromium.url.GURL; /** Unit tests for {@link WebContentsDarkModeController}. */ @RunWith(BaseRobolectricTestRunner.class) -@Config(manifest = Config.NONE, - shadows = {WebContentsDarkModeControllerUnitTest.ShadowApplicationStatus.class, - ShadowRecordHistogram.class}) +@Config(manifest = Config.NONE, shadows = {ShadowRecordHistogram.class, ShadowColorUtils.class}) public class WebContentsDarkModeControllerUnitTest { - @Implements(ApplicationStatus.class) - static class ShadowApplicationStatus { - @ApplicationState - static int sApplicationState; - @Nullable - static ApplicationStateListener sLastListener; - - @Implementation - public static int getStateForApplication() { - return sApplicationState; - } - - @Implementation - public static void registerApplicationStateListener(ApplicationStateListener listener) { - sLastListener = listener; - } - } - - static class TestNightModeStateProvider implements NightModeStateProvider { - public boolean mIsInNightMode; - public @Nullable Observer mObserver; - - @Override - public boolean isInNightMode() { - return mIsInNightMode; - } - - @Override - public void addObserver(@NonNull Observer observer) { - mObserver = observer; - } - - @Override - public void removeObserver(@NonNull Observer observer) { - if (observer == mObserver) mObserver = null; - } - } - @Rule public JniMocker mJniMocker = new JniMocker(); @Mock - UserPrefs.Natives mMockUserPrefJni; - @Mock WebsitePreferenceBridge.Natives mMockWebsitePreferenceBridgeJni; @Mock - PrefService mMockPrefService; - @Mock Profile mMockProfile; @Mock GURL mMockGurl; + @Mock + Context mMockContext; - TestNightModeStateProvider mNightModeStateProvider; - WebContentsDarkModeController mWebContentsDarkModeController; boolean mIsGlobalSettingsEnabled; @ContentSettingValues int mIsAutoDarkEnabledForUrlContentSettingValue; @@ -113,17 +58,9 @@ @Before public void setup() { MockitoAnnotations.initMocks(this); - - mJniMocker.mock(UserPrefsJni.TEST_HOOKS, mMockUserPrefJni); mJniMocker.mock(WebsitePreferenceBridgeJni.TEST_HOOKS, mMockWebsitePreferenceBridgeJni); - Mockito.when(mMockUserPrefJni.get(any())).thenReturn(mMockPrefService); - - mNightModeStateProvider = new TestNightModeStateProvider(); - GlobalNightModeStateProviderHolder.setInstanceForTesting(mNightModeStateProvider); Profile.setLastUsedProfileForTesting(mMockProfile); - ShadowApplicationStatus.sApplicationState = ApplicationState.HAS_RUNNING_ACTIVITIES; - ShadowRecordHistogram.reset(); Mockito.doAnswer(invocation -> { @@ -154,47 +91,44 @@ @After public void tearDown() { GlobalNightModeStateProviderHolder.setInstanceForTesting(null); - WebContentsDarkModeController.setTestInstance(null); Profile.setLastUsedProfileForTesting(null); - ShadowApplicationStatus.sApplicationState = ApplicationState.UNKNOWN; - ShadowApplicationStatus.sLastListener = null; ShadowRecordHistogram.reset(); } - @Test - public void testApplicationStatus_RunningActivities() { - mWebContentsDarkModeController = WebContentsDarkModeController.createInstance(); - - assertIsObservingNightMode(true); - Assert.assertEquals("Controller should be started and observing application status.", - mWebContentsDarkModeController, ShadowApplicationStatus.sLastListener); - - ShadowApplicationStatus.sApplicationState = ApplicationState.HAS_STOPPED_ACTIVITIES; - ShadowApplicationStatus.sLastListener.onApplicationStateChange( - ShadowApplicationStatus.sApplicationState); - assertIsObservingNightMode(false); - } - - @Test - public void testApplicationStatus_NoRunningActivities() { - ShadowApplicationStatus.sApplicationState = ApplicationState.HAS_STOPPED_ACTIVITIES; - - mWebContentsDarkModeController = WebContentsDarkModeController.createInstance(); - Assert.assertEquals("Controller should be started and observing application status.", - mWebContentsDarkModeController, ShadowApplicationStatus.sLastListener); - assertIsObservingNightMode(false); - } - private void doTestSetAutoDarkGlobalSettingsEnabled(boolean enabled) { - mNightModeStateProvider.mIsInNightMode = true; - - WebContentsDarkModeController.setGlobalUserSettings(enabled); - Assert.assertEquals( - "Auto dark settings state incorrect.", enabled, mIsGlobalSettingsEnabled); - assertForceDarkModeEnabled(enabled); + WebContentsDarkModeController.setGlobalUserSettings(mMockProfile, enabled); + Assert.assertEquals("Auto dark settings state incorrect.", enabled, + WebContentsDarkModeController.isGlobalUserSettingsEnabled(mMockProfile)); assertAutoDarkModeChangeSourceRecorded( AutoDarkSettingsChangeSource.THEME_SETTINGS, enabled, 1); + assertAutoDarkModeChangeSourceRecorded( + AutoDarkSettingsChangeSource.SITE_SETTINGS_GLOBAL, enabled, 0); + } + + @Test + public void testFeatureEnabled() { + ShadowColorUtils.sInNightMode = true; + mIsGlobalSettingsEnabled = true; + Assert.assertTrue( + "Feature should be enabled, if both global settings and night mode enabled.", + WebContentsDarkModeController.isFeatureEnabled(mMockContext, mMockProfile)); + } + + @Test + public void testFeatureEnabled_LightMode() { + ShadowColorUtils.sInNightMode = false; + mIsGlobalSettingsEnabled = true; + Assert.assertFalse("Feature should be disabled when not in night mode.", + WebContentsDarkModeController.isFeatureEnabled(mMockContext, mMockProfile)); + } + + @Test + public void testFeatureEnabled_NoUserSettings() { + ShadowColorUtils.sInNightMode = true; + mIsGlobalSettingsEnabled = false; + Assert.assertFalse("Feature should be disabled when global settings disabled.", + WebContentsDarkModeController.isFeatureEnabled(mMockContext, mMockProfile)); } @Test @@ -208,7 +142,6 @@ } private void doTestSetAutoDarkForUrl(boolean enableForUrl) { - mNightModeStateProvider.mIsInNightMode = true; Mockito.doReturn(ContentSettingValues.ALLOW) .when(mMockWebsitePreferenceBridgeJni) .getDefaultContentSetting( @@ -232,58 +165,6 @@ doTestSetAutoDarkForUrl(false); } - @Test - public void testAutoDarkSiteSettingsObserver_DefaultValueChanged() { - AutoDarkSiteSettingObserver observer = WebContentsDarkModeController.createInstance(); - - observer.onDefaultValueChanged(true); - assertAutoDarkModeChangeSourceRecorded( - AutoDarkSettingsChangeSource.SITE_SETTINGS_GLOBAL, true, 1); - observer.onDefaultValueChanged(false); - assertAutoDarkModeChangeSourceRecorded( - AutoDarkSettingsChangeSource.SITE_SETTINGS_GLOBAL, false, 1); - } - - @Test - public void testAutoDarkSiteSettingsObserver_SiteExceptionChanged() { - AutoDarkSiteSettingObserver observer = WebContentsDarkModeController.createInstance(); - observer.onSiteExceptionChanged(true); - assertAutoDarkModeChangeSourceRecorded( - AutoDarkSettingsChangeSource.SITE_SETTINGS_EXCEPTION_LIST, false, 1); - observer.onSiteExceptionChanged(false); - assertAutoDarkModeChangeSourceRecorded( - AutoDarkSettingsChangeSource.SITE_SETTINGS_EXCEPTION_LIST, true, 1); - } - - @Test - public void testOnNightModeChange() { - mIsGlobalSettingsEnabled = true; - mNightModeStateProvider.mIsInNightMode = false; - - mWebContentsDarkModeController = WebContentsDarkModeController.createInstance(); - assertIsObservingNightMode(true); - assertForceDarkModeEnabled(false); - - mNightModeStateProvider.mIsInNightMode = true; - mNightModeStateProvider.mObserver.onNightModeStateChanged(); - assertForceDarkModeEnabled(true); - } - - private void assertForceDarkModeEnabled(boolean enabled) { - Mockito.verify(mMockPrefService) - .setBoolean(eq(Pref.WEB_KIT_FORCE_DARK_MODE_ENABLED), eq(enabled)); - } - - private void assertIsObservingNightMode(boolean isObserving) { - if (isObserving) { - Assert.assertNotNull("Controller should be started and observing night mode.", - mNightModeStateProvider.mObserver); - } else { - Assert.assertNull("Controller will not should not observing night mode.", - mNightModeStateProvider.mObserver); - } - } - private void assertAutoDarkModeChangeSourceRecorded( @AutoDarkSettingsChangeSource int source, boolean enabled, int expectedCounts) { String histogramName = "Android.DarkTheme.AutoDarkMode.SettingsChangeSource."
diff --git a/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeMessageController.java b/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeMessageController.java index 812daf50..39863cf 100644 --- a/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeMessageController.java +++ b/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeMessageController.java
@@ -20,7 +20,6 @@ import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.night_mode.NightModeMetrics.ThemeSettingsEntry; import org.chromium.chrome.browser.night_mode.settings.ThemeSettingsFragment; -import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.components.browser_ui.settings.SettingsLauncher; import org.chromium.components.feature_engagement.EventConstants; @@ -30,7 +29,6 @@ import org.chromium.components.messages.MessageBannerProperties; import org.chromium.components.messages.MessageDispatcher; import org.chromium.components.messages.MessageIdentifier; -import org.chromium.components.user_prefs.UserPrefs; import org.chromium.ui.modaldialog.DialogDismissalCause; import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.modaldialog.ModalDialogManager.ModalDialogType; @@ -55,13 +53,13 @@ * should be sent. Otherwise return false. * * @param profile Profile associated with current tab. + * @param context {@link Context} used to check whether UI is in night mode. * @return Whether or not the user education message should be shown. */ - private static boolean shouldSendMessage(Profile profile) { + private static boolean shouldSendMessage(Profile profile, Context context) { // Only send message if the feature is enabled and the message has not yet been shown. Tracker tracker = TrackerFactory.getTrackerForProfile(profile); - boolean featureEnabled = - UserPrefs.get(profile).getBoolean(Pref.WEB_KIT_FORCE_DARK_MODE_ENABLED); + boolean featureEnabled = WebContentsDarkModeController.isFeatureEnabled(context, profile); return featureEnabled && tracker.shouldTriggerHelpUI( FeatureConstants.AUTO_DARK_USER_EDUCATION_MESSAGE_FEATURE); @@ -92,7 +90,7 @@ */ public static void attemptToSendMessage(Activity activity, Profile profile, SettingsLauncher settingsLauncher, MessageDispatcher messageDispatcher) { - if (!shouldSendMessage(profile)) return; + if (!shouldSendMessage(profile, activity)) return; // Set the properties (icon, text, etc.) for the message. Resources resources = activity.getResources();
diff --git a/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeMessageControllerUnitTest.java b/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeMessageControllerUnitTest.java index c1739d0..312411cb 100644 --- a/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeMessageControllerUnitTest.java +++ b/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeMessageControllerUnitTest.java
@@ -14,6 +14,7 @@ import static org.mockito.Mockito.when; import android.app.Activity; +import android.content.Context; import android.content.res.Resources; import org.junit.After; @@ -27,6 +28,8 @@ import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; import org.chromium.base.FeatureList; import org.chromium.base.FeatureList.TestValues; @@ -36,8 +39,8 @@ import org.chromium.chrome.browser.feedback.HelpAndFeedbackLauncher; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.night_mode.WebContentsDarkModeMessageController.AutoDarkClickableSpan; +import org.chromium.chrome.browser.night_mode.WebContentsDarkModeMessageControllerUnitTest.ShadowWebContentsDarkModeController; import org.chromium.chrome.browser.night_mode.settings.ThemeSettingsFragment; -import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.test.util.browser.Features; import org.chromium.components.browser_ui.settings.SettingsLauncher; @@ -46,9 +49,7 @@ import org.chromium.components.feature_engagement.Tracker; import org.chromium.components.messages.DismissReason; import org.chromium.components.messages.MessageDispatcher; -import org.chromium.components.prefs.PrefService; -import org.chromium.components.user_prefs.UserPrefs; -import org.chromium.components.user_prefs.UserPrefsJni; +import org.chromium.content_public.browser.BrowserContextHandle; import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.modaldialog.ModalDialogProperties; import org.chromium.ui.modaldialog.ModalDialogProperties.ButtonType; @@ -62,7 +63,8 @@ * engagement system. */ @RunWith(BaseRobolectricTestRunner.class) -@Config(manifest = Config.NONE, shadows = ShadowAppCompatResources.class) +@Config(manifest = Config.NONE, + shadows = {ShadowAppCompatResources.class, ShadowWebContentsDarkModeController.class}) public class WebContentsDarkModeMessageControllerUnitTest { private static final String USER_ED_FEATURE = FeatureConstants.AUTO_DARK_USER_EDUCATION_MESSAGE_FEATURE; @@ -94,6 +96,17 @@ } } + @Implements(WebContentsDarkModeController.class) + static class ShadowWebContentsDarkModeController { + static boolean sIsFeatureEnabled; + + @Implementation + public static boolean isFeatureEnabled( + Context context, BrowserContextHandle browserContextHandle) { + return sIsFeatureEnabled; + } + } + @Rule public TestRule mProcessor = new Features.JUnitProcessor(); @Rule @@ -111,10 +124,6 @@ HelpAndFeedbackLauncher mMockFeedbackLauncher; @Mock - UserPrefs.Natives mMockUserPrefJni; - @Mock - PrefService mMockPrefService; - @Mock Resources mMockResources; @Mock Tracker mMockTracker; @@ -125,10 +134,6 @@ public void setup() { MockitoAnnotations.initMocks(this); - mJniMocker.mock(UserPrefsJni.TEST_HOOKS, mMockUserPrefJni); - when(mMockUserPrefJni.get(eq(mMockProfile))).thenReturn(mMockPrefService); - when(mMockPrefService.getBoolean(eq(Pref.WEB_KIT_FORCE_DARK_MODE_ENABLED))) - .thenReturn(true); when(mMockActivity.getResources()).thenReturn(mMockResources); when(mMockResources.getString(anyInt())).thenReturn("<link></link>"); @@ -138,6 +143,7 @@ mModalDialogManager = new FakeModalDialogManager(); TrackerFactory.setTrackerForTests(mMockTracker); + ShadowWebContentsDarkModeController.sIsFeatureEnabled = true; } @After @@ -188,7 +194,7 @@ @Test public void testSendMessage_featureDisabled() { // Feature is disabled. - when(mMockPrefService.getBoolean(any())).thenReturn(false); + ShadowWebContentsDarkModeController.sIsFeatureEnabled = false; // Attempt to send message and fail because feature is disabled. WebContentsDarkModeMessageController.attemptToSendMessage(
diff --git a/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/settings/ThemeSettingsFragment.java b/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/settings/ThemeSettingsFragment.java index ffd071d2..6b9d60b 100644 --- a/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/settings/ThemeSettingsFragment.java +++ b/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/settings/ThemeSettingsFragment.java
@@ -41,7 +41,8 @@ SharedPreferencesManager sharedPreferencesManager = SharedPreferencesManager.getInstance(); RadioButtonGroupThemePreference radioButtonGroupThemePreference = (RadioButtonGroupThemePreference) findPreference(PREF_UI_THEME_PREF); - mWebContentsDarkModeEnabled = WebContentsDarkModeController.isGlobalUserSettingsEnabled(); + mWebContentsDarkModeEnabled = WebContentsDarkModeController.isGlobalUserSettingsEnabled( + Profile.getLastUsedRegularProfile()); radioButtonGroupThemePreference.initialize( NightModeUtils.getThemeSetting(), mWebContentsDarkModeEnabled); @@ -53,7 +54,7 @@ mWebContentsDarkModeEnabled = radioButtonGroupThemePreference.isDarkenWebsitesEnabled(); WebContentsDarkModeController.setGlobalUserSettings( - mWebContentsDarkModeEnabled); + Profile.getLastUsedRegularProfile(), mWebContentsDarkModeEnabled); } } int theme = (int) newValue;
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 a587111..cdfad39c 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
@@ -813,6 +813,7 @@ <translation id="5809361687334836369">{HOURS,plural, =1{# uur gelede}other{# uur gelede}}</translation> <translation id="5810288467834065221">Kopiereg <ph name="YEAR" /> Google LLC. Alle regte voorbehou.</translation> <translation id="5810864297166300463">Webbystand</translation> +<translation id="5813552293717797987">Hierdie blaaier word bestuur deur <ph name="PARENT_NAME_1" /> en <ph name="PARENT_NAME_2" />.</translation> <translation id="5814131985548525293">Tik hier of tik op die stemikoon om te begin</translation> <translation id="5814749351757353073">Bly op hoogte van jou gunstelingwerwe</translation> <translation id="583281660410589416">Onbekend</translation> @@ -1077,6 +1078,7 @@ <translation id="727288900855680735">Dien <ph name="ONE_TIME_CODE" /> in by <ph name="ORIGIN" />?</translation> <translation id="7274013316676448362">Geblokkeerde werf</translation> <translation id="7286572596625053347">Verander <ph name="LANGUAGE" />?</translation> +<translation id="7286703216224610554">Deel net reaksie</translation> <translation id="7290209999329137901">Hernoeming is nie beskikbaar nie</translation> <translation id="7291910923717764901">Prentbeskrywings is vir hierdie bladsy bygevoeg</translation> <translation id="7293429513719260019">Kies taal</translation> @@ -1157,6 +1159,7 @@ <translation id="7646772052135772216">Wagwoordsinkronisering werk nie</translation> <translation id="7655900163790317559">Skakel tans Bluetooth aan …</translation> <translation id="7658239707568436148">Kanselleer</translation> +<translation id="7663313374500954251">Hierdie blaaier word bestuur deur <ph name="PARENT_NAME" />.</translation> <translation id="7665369617277396874">Voeg rekening by</translation> <translation id="766587987807204883">Artikels verskyn hier, wat jy kan lees selfs wanneer jy vanlyn is</translation> <translation id="7682724950699840886">Probeer die volgende wenke: maak seker dat daar genoeg spasie op jou toestel is; probeer om weer uit te voer.</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 293f38b..1c9a4bd 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
@@ -813,6 +813,7 @@ <translation id="5809361687334836369">{HOURS,plural, =1{قبل ساعة واحدة (#)}zero{قبل # ساعة}two{قبل ساعتين (#)}few{قبل # ساعات}many{قبل # ساعة}other{قبل # ساعة}}</translation> <translation id="5810288467834065221">حقوق الطبع والنشر لعام <ph name="YEAR" /> لشركة Google LLC. جميع الحقوق محفوظة.</translation> <translation id="5810864297166300463">المساعدة على الويب</translation> +<translation id="5813552293717797987">تتم إدارة هذا المتصفِّح من خلال <ph name="PARENT_NAME_1" /> و<ph name="PARENT_NAME_2" />.</translation> <translation id="5814131985548525293">يمكنك الكتابة هنا أو النقر على رمز الصوت للبدء.</translation> <translation id="5814749351757353073">متابعة المواقع الإلكترونية المفضّلة</translation> <translation id="583281660410589416">غير معروف</translation> @@ -1077,6 +1078,7 @@ <translation id="727288900855680735">هل تريد إرسال <ph name="ONE_TIME_CODE" /> إلى <ph name="ORIGIN" />؟</translation> <translation id="7274013316676448362">الموقع المحظور</translation> <translation id="7286572596625053347">هل تريد تغيير اللغة <ph name="LANGUAGE" />؟</translation> +<translation id="7286703216224610554">مشاركة التفاعل فقط</translation> <translation id="7290209999329137901">إعادة التسمية غير متوفرة</translation> <translation id="7291910923717764901">تم إضافة أوصاف الصور لهذه الصفحة.</translation> <translation id="7293429513719260019">اختيار لغة</translation> @@ -1157,6 +1159,7 @@ <translation id="7646772052135772216">مزامنة كلمات المرور لا تعمل</translation> <translation id="7655900163790317559">جارٍ تفعيل البلوتوث…</translation> <translation id="7658239707568436148">إلغاء</translation> +<translation id="7663313374500954251">تتم إدارة هذا المتصفِّح من خلال <ph name="PARENT_NAME" />.</translation> <translation id="7665369617277396874">إضافة حساب</translation> <translation id="766587987807204883">تظهر المقالات هنا، ويمكنك الاطّلاع عليها حتى عندما لا يكون الجهاز متّصلًا بالإنترنت.</translation> <translation id="7682724950699840886">يمكنك تجربة النصائح التالية: تأكد من توفر مساحة كافية على جهازك وحاول التصدير مرة أخرى.</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 9f05b84..2c9b25a 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
@@ -813,6 +813,7 @@ <translation id="5809361687334836369">{HOURS,plural, =1{před # hodinou}few{před # hodinami}many{před # hodiny}other{před # hodinami}}</translation> <translation id="5810288467834065221">Copyright <ph name="YEAR" /> Google LLC. Všechna práva vyhrazena.</translation> <translation id="5810864297166300463">Asistence na webu</translation> +<translation id="5813552293717797987">Tento prohlížeč spravuje <ph name="PARENT_NAME_1" /> a <ph name="PARENT_NAME_2" />.</translation> <translation id="5814131985548525293">Začněte psát nebo klepněte na ikonu hlasového zadávání</translation> <translation id="5814749351757353073">Sledujte své oblíbené weby</translation> <translation id="583281660410589416">Neznámé</translation> @@ -1077,6 +1078,7 @@ <translation id="727288900855680735">Odeslat <ph name="ONE_TIME_CODE" /> webu <ph name="ORIGIN" />?</translation> <translation id="7274013316676448362">Blokovaný web</translation> <translation id="7286572596625053347">Změnit jazyk <ph name="LANGUAGE" />?</translation> +<translation id="7286703216224610554">Sdílet pouze reakci</translation> <translation id="7290209999329137901">Přejmenování není k dispozici</translation> <translation id="7291910923717764901">Byly přidány popisy obrázků pro tuto stránku</translation> <translation id="7293429513719260019">Zvolte jazyk</translation> @@ -1157,6 +1159,7 @@ <translation id="7646772052135772216">Synchronizace hesel nefunguje</translation> <translation id="7655900163790317559">Zapínání Bluetooth…</translation> <translation id="7658239707568436148">Zrušit</translation> +<translation id="7663313374500954251">Tento prohlížeč spravuje <ph name="PARENT_NAME" />.</translation> <translation id="7665369617277396874">Přidat účet</translation> <translation id="766587987807204883">Zde se zobrazují články, které si můžete číst i offline</translation> <translation id="7682724950699840886">Vyzkoušejte tyto tipy: Zajistěte, aby v zařízení byl dostatek místa a zkuste export zopakovat.</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 3c2371c..c8f4ca94 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
@@ -813,6 +813,7 @@ <translation id="5809361687334836369">{HOURS,plural, =1{For 1 time siden}one{For # time siden}other{For # timer siden}}</translation> <translation id="5810288467834065221">Copyright <ph name="YEAR" /> Google LLC. Alle rettigheder forbeholdes.</translation> <translation id="5810864297166300463">Webassistance</translation> +<translation id="5813552293717797987">Denne browser administreres af <ph name="PARENT_NAME_1" /> og <ph name="PARENT_NAME_2" />.</translation> <translation id="5814131985548525293">Skriv her, eller tryk på mikrofonikonet for at komme i gang</translation> <translation id="5814749351757353073">Hold dig opdateret om dine foretrukne websites</translation> <translation id="583281660410589416">Ukendt</translation> @@ -1077,6 +1078,7 @@ <translation id="727288900855680735">Vil du angive <ph name="ONE_TIME_CODE" /> på <ph name="ORIGIN" />?</translation> <translation id="7274013316676448362">Blokeret website</translation> <translation id="7286572596625053347">Vil du skifte til et andet sprog end <ph name="LANGUAGE" />?</translation> +<translation id="7286703216224610554">Del kun reaktion</translation> <translation id="7290209999329137901">Elementet kan ikke omdøbes.</translation> <translation id="7291910923717764901">Der blev tilføjet billedbeskrivelser for denne side</translation> <translation id="7293429513719260019">Vælg sprog</translation> @@ -1157,6 +1159,7 @@ <translation id="7646772052135772216">Synkronisering af adgangskoder fungerer ikke</translation> <translation id="7655900163790317559">Aktiverer Bluetooth…</translation> <translation id="7658239707568436148">Annuller</translation> +<translation id="7663313374500954251">Denne browser administreres af <ph name="PARENT_NAME" />.</translation> <translation id="7665369617277396874">Tilføj konto</translation> <translation id="766587987807204883">Her vises artikler, som du kan læse, selv når du er offline</translation> <translation id="7682724950699840886">Prøv følgende tips: Sørg for, at der er nok ledig plads på din enhed, og prøv at eksportere igen.</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 eadaf53..8eb2dba 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
@@ -813,6 +813,7 @@ <translation id="5809361687334836369">{HOURS,plural, =1{Πριν από # ώρα}other{Πριν από # ώρες}}</translation> <translation id="5810288467834065221">Πνευματικά δικαιώματα <ph name="YEAR" /> Google LLC. Με την επιφύλαξη παντός δικαιώματος.</translation> <translation id="5810864297166300463">Βοήθεια ιστού</translation> +<translation id="5813552293717797987">Η διαχείριση αυτού του προγράμματος περιήγησης πραγματοποιείται από τους γονείς<ph name="PARENT_NAME_1" /> και <ph name="PARENT_NAME_2" />.</translation> <translation id="5814131985548525293">Πληκτρολογήστε εδώ ή πατήστε το εικονίδιο φωνής για να ξεκινήσετε</translation> <translation id="5814749351757353073">Ενημερωθείτε σχετικά με τους αγαπημένους σας ιστοτόπους</translation> <translation id="583281660410589416">Άγνωστο</translation> @@ -1077,6 +1078,7 @@ <translation id="727288900855680735">Υποβολή <ph name="ONE_TIME_CODE" /> σε <ph name="ORIGIN" />;</translation> <translation id="7274013316676448362">Αποκλεισμένος ιστότοπος</translation> <translation id="7286572596625053347">Αλλαγή <ph name="LANGUAGE" />;</translation> +<translation id="7286703216224610554">Κοινοποίηση μόνο της αντίδρασης</translation> <translation id="7290209999329137901">Η μετονομασία δεν είναι διαθέσιμη</translation> <translation id="7291910923717764901">Προστέθηκαν περιγραφές εικόνας για αυτήν τη σελίδα</translation> <translation id="7293429513719260019">Επιλογή γλώσσας</translation> @@ -1157,6 +1159,7 @@ <translation id="7646772052135772216">Ο συγχρονισμός κωδικών πρόσβασης δεν λειτουργεί</translation> <translation id="7655900163790317559">Ενεργοποίηση Bluetooth…</translation> <translation id="7658239707568436148">Ακύρωση</translation> +<translation id="7663313374500954251">Η διαχείριση αυτού του προγράμματος περιήγησης πραγματοποιείται από τον γονέα <ph name="PARENT_NAME" />.</translation> <translation id="7665369617277396874">Προσθήκη λογαριασμού</translation> <translation id="766587987807204883">Εδώ εμφανίζονται άρθρα τα οποία μπορείτε να διαβάσετε ακόμη και εκτός σύνδεσης</translation> <translation id="7682724950699840886">Δοκιμάστε τις παρακάτω συμβουλές: Βεβαιωθείτε ότι υπάρχει αρκετός χώρος στη συσκευή σας. Δοκιμάστε να επαναλάβετε την εξαγωγή.</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 6fe6768..d3a6e31 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
@@ -813,6 +813,7 @@ <translation id="5809361687334836369">{HOURS,plural, =1{Il y a # heure}one{Il y a # heure}other{Il y a # heures}}</translation> <translation id="5810288467834065221">© <ph name="YEAR" /> Google LLC. Tous droits réservés.</translation> <translation id="5810864297166300463">Assistance sur le Web</translation> +<translation id="5813552293717797987">Ce navigateur est géré par <ph name="PARENT_NAME_1" /> et <ph name="PARENT_NAME_2" />.</translation> <translation id="5814131985548525293">Entrez votre requête de recherche ou touchez l'icône du micro pour commencer</translation> <translation id="5814749351757353073">Suivez l'actualité de vos sites favoris</translation> <translation id="583281660410589416">Inconnu</translation> @@ -1077,6 +1078,7 @@ <translation id="727288900855680735">Envoyer un <ph name="ONE_TIME_CODE" /> à <ph name="ORIGIN" />?</translation> <translation id="7274013316676448362">Site bloqué</translation> <translation id="7286572596625053347">Ne plus utiliser <ph name="LANGUAGE" />?</translation> +<translation id="7286703216224610554">Partager la réaction uniquement</translation> <translation id="7290209999329137901">Impossible de renommer l'élément</translation> <translation id="7291910923717764901">Les descriptions d'image ont été ajoutées pour cette page</translation> <translation id="7293429513719260019">Sélectionner la langue</translation> @@ -1157,6 +1159,7 @@ <translation id="7646772052135772216">La synchronisation des mots de passe ne fonctionne pas</translation> <translation id="7655900163790317559">Activation du Bluetooth en cours…</translation> <translation id="7658239707568436148">Annuler</translation> +<translation id="7663313374500954251">Ce navigateur est géré par <ph name="PARENT_NAME" />.</translation> <translation id="7665369617277396874">Ajouter un compte</translation> <translation id="766587987807204883">Les articles s'affichent ici, et vous pouvez les lire même lorsque vous êtes hors ligne</translation> <translation id="7682724950699840886">Essayez de suivre les conseils suivants : assurez-vous qu'il y a suffisamment d'espace sur votre appareil et réessayez d'exporter les mots de passe.</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 524e5f5..a10fa42 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
@@ -94,6 +94,7 @@ <translation id="1506061864768559482">Moteur de recherche</translation> <translation id="1513352483775369820">Favoris et historique Web</translation> <translation id="1513858653616922153">Supprimer le mot de passe</translation> +<translation id="1518421282666914498">GIF émotions <ph name="CURRENT_DATE_ISO" /></translation> <translation id="1521774566618522728">Actif aujourd'hui</translation> <translation id="1538801903729528855">Une meilleure expérience vocale sur le Web</translation> <translation id="1544826120773021464">Pour gérer votre compte Google, appuyez sur le bouton "Gérer le compte"</translation> @@ -116,6 +117,7 @@ <translation id="1702543251015153180">Modifier les paramètres du thème sombre ?</translation> <translation id="1718835860248848330">Dernière heure</translation> <translation id="1724977129262658800">Déverrouillez la session pour modifier votre mot de passe</translation> +<translation id="1726477445370128854">Le préchargement de pages que vous êtes susceptible de consulter selon Chrome permet de les parcourir et d'effectuer des recherches plus rapidement</translation> <translation id="173522743738009831">À propos de Privacy Sandbox</translation> <translation id="1736419249208073774">Découvrir</translation> <translation id="1749561566933687563">Synchroniser vos favoris</translation> @@ -276,6 +278,7 @@ <translation id="2649068648233607930">Votre navigateur est géré par <ph name="DOMAIN" /></translation> <translation id="2650751991977523696">Télécharger de nouveau le fichier ?</translation> <translation id="2651091186440431324">{FILE_COUNT,plural, =1{# fichier audio}one{# fichier audio}other{# fichiers audio}}</translation> +<translation id="265156376773362237">Préchargement standard</translation> <translation id="2656405586795711023">Applications Web</translation> <translation id="2689830683995595741">En utilisant Chrome, vous acceptez les <ph name="BEGIN_LINK1" />Conditions d'utilisation de Google<ph name="END_LINK1" /> et les <ph name="BEGIN_LINK2" />Conditions d'utilisation supplémentaires de Google Chrome et Chrome OS<ph name="END_LINK2" />. L'<ph name="BEGIN_LINK3" />Avis de confidentialité relatif aux comptes Google gérés avec Family Link<ph name="END_LINK3" /> s'applique également.</translation> <translation id="2702516483241149200">Nouveau : partagez un lien vers ce texte</translation> @@ -311,6 +314,7 @@ <translation id="2856503607207334158">Échec de la connexion</translation> <translation id="2860954141821109167">Assurez-vous qu'une application Téléphone est activée sur cet appareil</translation> <translation id="2870560284913253234">Site</translation> +<translation id="2871733351037274014">Précharger des pages</translation> <translation id="2888126860611144412">À propos de Chrome</translation> <translation id="2891154217021530873">Arrêter le chargement de la page</translation> <translation id="2892647708214602204">Une notification s'affichera lorsque ce fichier sera prêt</translation> @@ -340,10 +344,12 @@ <translation id="2992473221983447149">Descriptions d'images</translation> <translation id="2996291259634659425">Créer une phrase secrète</translation> <translation id="2996809686854298943">Veuillez saisir une URL.</translation> +<translation id="2997081575621687554">Quand un site Google demande de précharger en mode privé des liens sur sa page, Chrome chiffre et précharge les pages via les serveurs de Google sans cookies. Le site préchargé ne sait alors rien de votre identité.</translation> <translation id="3006881078666935414">Aucune donnée sur l'utilisation</translation> <translation id="301080557829842765">Guide de confidentialité</translation> <translation id="3016635187733453316">Assurez-vous que cet appareil est bien connecté à Internet</translation> <translation id="3026955690410463085">Inclure le lien</translation> +<translation id="3029276696788198026">Aucun préchargement</translation> <translation id="3029704984691124060">Les phrases secrètes ne correspondent pas.</translation> <translation id="3031225630520268969">Interface d'autorisation pour la recherche vocale de l'Assistant</translation> <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Obtenir de l'aide<ph name="END_LINK" /></translation> @@ -377,6 +383,7 @@ <translation id="3232754137068452469">Application Web</translation> <translation id="3234978181857588512">Enregistrer sur l'appareil</translation> <translation id="3236059992281584593">1 minute restante</translation> +<translation id="3237087289225714896">Préchargement standard :</translation> <translation id="3244271242291266297">MM</translation> <translation id="3245429137663807393">Si vous partagez aussi les rapports d'utilisation Chrome, ceux-ci incluent les URL que vous consultez</translation> <translation id="3250563604907490871">Les descriptions d'images seront réactivées lorsque vous vous connecterez au Wi-Fi</translation> @@ -410,6 +417,7 @@ <translation id="3389286852084373014">Volume de texte trop important</translation> <translation id="3391512812407811893">Essais Privacy Sandbox</translation> <translation id="3398320232533725830">Ouvrir le gestionnaire de favoris</translation> +<translation id="3407392651057365886">Plus de pages sont préchargées. Elles peuvent l'être via les serveurs de Google à la demande d'autres sites.</translation> <translation id="3414952576877147120">Taille :</translation> <translation id="3421726884497337397">Choisir quand bloquer les cookies tiers</translation> <translation id="3429160811076349561">Les fonctionnalités à l'essai sont désactivées</translation> @@ -532,6 +540,7 @@ <translation id="4196597275619698563">Créer une fiche</translation> <translation id="4198423547019359126">Aucun emplacement de téléchargements disponible</translation> <translation id="4209895695669353772">Activez la synchronisation pour obtenir des suggestions de contenu personnalisées de la part de Google</translation> +<translation id="4214315110991671325">Si vous autorisez les cookies, Chrome peut les utiliser pour le préchargement.</translation> <translation id="4225895483398857530">Raccourci de la barre d'outils</translation> <translation id="4242533952199664413">Ouvrir les paramètres</translation> <translation id="4248098802131000011">Protégez vos mots de passe contre les violations de données et d'autres problèmes liés à la sécurité</translation> @@ -581,6 +590,7 @@ <translation id="4532845899244822526">Sélectionner un dossier</translation> <translation id="4538018662093857852">Activer le mode simplifié</translation> <translation id="4547551584605870320">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> onglet}one{<ph name="TAB_COUNT_MANY" /> onglet, <ph name="TAB_COUNT_INCOGNITO" /> en navigation privée}other{<ph name="TAB_COUNT_MANY" /> onglets, <ph name="TAB_COUNT_INCOGNITO" /> en navigation privée}}</translation> +<translation id="4549903594034243526">chrome_emotion_gif_<ph name="CURRENT_TIMESTAMP_MS" /></translation> <translation id="4550003330909367850">Pour afficher ou copier votre mot de passe ici, définissez le verrouillage de l'écran sur cet appareil.</translation> <translation id="4554077758708533499">Connecté avec un câble USB</translation> <translation id="4557685098773234337">Pour accéder à ce site plus rapidement, ajoutez-le à l'écran d'accueil</translation> @@ -723,6 +733,7 @@ <translation id="5317780077021120954">Enregistrer</translation> <translation id="5319359161174645648">Google recommande Chrome</translation> <translation id="5324858694974489420">Paramètres parentaux</translation> +<translation id="5326921373682845375">Étant donné que les pages préchargées sont chiffrées et que le site lié aux pages est un site Google, les serveurs de Google ne reçoivent pas de nouvelles informations lors du préchargement de ces pages en mode privé.</translation> <translation id="5329858041417644019">Votre navigateur n'est pas géré</translation> <translation id="5342314432463739672">Demandes d'autorisation</translation> <translation id="5355191726083956201">La protection renforcée est activée</translation> @@ -873,6 +884,7 @@ <translation id="6154478581116148741">Activez le verrouillage de l'écran dans les paramètres pour exporter vos mots de passe à partir de cet appareil</translation> <translation id="6159335304067198720"><ph name="PERCENT" /> de données économisées</translation> <translation id="6159729262978459665">Efface l'historique de tous les appareils synchronisés.</translation> +<translation id="6162892189396105610">Les pages que vous êtes susceptible de consulter selon Chrome sont préchargées.</translation> <translation id="6186394685773237175">Aucun mot de passe compromis trouvé</translation> <translation id="6192907950379606605">Obtenir descriptions images</translation> <translation id="6203593061661911168">Le téléchargement commencera lorsque vous serez connecté au Wi-Fi</translation> @@ -907,6 +919,7 @@ <translation id="6364438453358674297">Supprimer la suggestion de l'historique ?</translation> <translation id="6378173571450987352">Détails : tri effectué par volume de données utilisées</translation> <translation id="6379829913050047669">L'application <ph name="APP_NAME" /> va s'ouvrir dans Chrome. En continuant, vous acceptez les <ph name="BEGIN_LINK1" />Conditions d'utilisation de Google<ph name="END_LINK1" /> et les <ph name="BEGIN_LINK2" />Conditions d'utilisation supplémentaires de Google Chrome et Chrome OS<ph name="END_LINK2" />.</translation> +<translation id="6380100320871303656">Les pages que vous êtes susceptible de consulter selon Chrome sont préchargées plus souvent (cela peut augmenter la consommation des données).</translation> <translation id="6395288395575013217">LIEN</translation> <translation id="6397616442223433927">Connexion rétablie</translation> <translation id="6402652558933147609"><ph name="ERROR_CODE" /> sur <ph name="VIOLATED_URL" /></translation> @@ -940,6 +953,7 @@ <translation id="6532866250404780454">Les sites que vous consultez dans Chrome ne s'afficheront pas. Tous les minuteurs de site seront supprimés.</translation> <translation id="6534565668554028783">Google a mis trop de temps à répondre</translation> <translation id="6539092367496845964">Un problème est survenu. Réessayez plus tard.</translation> +<translation id="6541042852576515209">Redimensionnez et faites pivoter</translation> <translation id="6541983376925655882">{NUM_HOURS,plural, =1{Vérification effectuée il y a 1 heure}one{Vérification effectuée il y a # heure}other{Vérification effectuée il y a # heures}}</translation> <translation id="6545017243486555795">Supprimer toutes les données</translation> <translation id="6546511553472444032">Fichier potentiellement corrompu</translation> @@ -1013,6 +1027,7 @@ <translation id="6896758677409633944">Copier</translation> <translation id="6900532703269623216">Protection renforcée</translation> <translation id="6903907808598579934">Activer la synchronisation</translation> +<translation id="6909589135458168665">Précharger des pages</translation> <translation id="6929699136511445623">Activer la synchronisation du système Android</translation> <translation id="6942665639005891494">Modifier à tout moment l'emplacement de téléchargement par défaut à l'aide de l'option de menu "Paramètres"</translation> <translation id="694267552845942083">Vous personnalisez actuellement vos paramètres de synchronisation. Pour valider l'activation de la synchronisation, appuyez sur le bouton "Confirmer" en bas de l'écran. Revenir en haut de la page</translation> @@ -1096,6 +1111,8 @@ <translation id="7444811645081526538">Autres catégories</translation> <translation id="7453467225369441013">Vous déconnecte de la plupart des sites. Vous ne serez cependant pas déconnecté de votre compte Google.</translation> <translation id="7454641608352164238">Espace insuffisant</translation> +<translation id="7456774706094330779">Préchargement avancé</translation> +<translation id="7468819939926272717">Sélectionnez une émotion</translation> <translation id="7474822150871987353">Découvrez les thèmes abordés sur les sites Web sans quitter la page. Sélectionnez au moins un mot sur celle-ci pour le rechercher.</translation> <translation id="7475192538862203634">Si vous rencontrez souvent ce problème, essayez les <ph name="BEGIN_LINK" />suggestions<ph name="END_LINK" /> suivantes.</translation> <translation id="7475688122056506577">Carte SD introuvable. Certains de vos fichiers risquent d'être manquants.</translation> @@ -1143,6 +1160,7 @@ <translation id="7665369617277396874">Ajouter un compte</translation> <translation id="766587987807204883">Les articles sont affichés ici (vous pouvez les lire même lorsque vous êtes hors connexion)</translation> <translation id="7682724950699840886">Essayez l'astuce suivante°: assurez-vous de disposer de suffisamment d'espace sur votre appareil, puis tentez à nouveau d'exporter les mots de passe.</translation> +<translation id="768618399695552958">Certaines pages que vous consultez sont préchargées. Elles peuvent l'être via les serveurs de Google lorsqu'elles sont liées à partir d'un site Google.</translation> <translation id="7698359219371678927">Créer un e-mail dans <ph name="APP_NAME" /></translation> <translation id="7704317875155739195">Saisir semi-automatiquement les recherches et les URL</translation> <translation id="7707922173985738739">Utilisera les données mobiles</translation> @@ -1215,6 +1233,7 @@ <translation id="8051695050440594747"><ph name="MEGABYTES" /> Mo disponibles</translation> <translation id="8058655154417507695">Année d'expiration</translation> <translation id="8058746566562539958">Ouvrir dans nouvel onglet Chrome</translation> +<translation id="8062594758852531064">Préchargement avancé :</translation> <translation id="8063895661287329888">Échec de l'ajout du favori</translation> <translation id="806745655614357130">Conserver mes données à part</translation> <translation id="8073388330009372546">Ouvrir image dans autre onglet</translation> @@ -1250,6 +1269,7 @@ <translation id="8250920743982581267">Documents</translation> <translation id="825412236959742607">Cette page utilise trop de mémoire, Chrome a donc supprimé du contenu.</translation> <translation id="8255617931166444521">Les sites ne peuvent utiliser vos cookies que pour voir votre activité de navigation sur ces sites</translation> +<translation id="8259179246279078674">Les pages préchargées étant chiffrées, Google n'analyse pas leur contenu. Les serveurs de Google voient quels sites sont préchargés en mode privé. Ces informations ne servent qu'à précharger les pages et ne sont liées à aucune autre information de votre compte Google.</translation> <translation id="8260126382462817229">Essayez de vous connecter de nouveau à votre compte.</translation> <translation id="8261506727792406068">Supprimer</translation> <translation id="82619448491672958">Voir les autres onglets</translation> @@ -1308,6 +1328,7 @@ <translation id="8551513938758868521">Verrouiller les onglets de navigation privée quand vous fermez Chrome</translation> <translation id="8555836665334561807">Via le Wi-Fi</translation> <translation id="8559990750235505898">Proposer de traduire les pages dans d'autres langues</translation> +<translation id="8560560256644480257">Création du GIF en cours (<ph name="PERCENT" /> %%)</translation> <translation id="8560602726703398413">Retrouvez votre liste de lecture dans les favoris</translation> <translation id="8562452229998620586">Les mots de passe enregistrés s'affichent ici.</translation> <translation id="856481929701340285">Voir version ordinateur</translation> @@ -1326,6 +1347,7 @@ <translation id="8636825310635137004">Activez la synchronisation pour accéder à vos onglets sur vos autres appareils.</translation> <translation id="8641930654639604085">Essayer de bloquer les sites réservés aux adultes</translation> <translation id="864544049772947936">Gérer les fenêtres (<ph name="INSTANCE_COUNTS" />)</translation> +<translation id="8646467750715887511">Les pages ne se chargent qu'une fois que vous les avez ouvertes.</translation> <translation id="8655129584991699539">Vous pouvez effacer les données dans les paramètres Chrome</translation> <translation id="8656747343598256512">Connectez-vous à ce site et à Chrome avec votre compte Google. Vous pourrez activer la synchronisation plus tard.</translation> <translation id="8659579665266920523">Comment effectuer une recherche avec Chrome</translation> @@ -1422,6 +1444,7 @@ <translation id="9209888181064652401">Impossible de passer des appels</translation> <translation id="9212845824145208577">Impossible d'aller plus bas. Essayez de commencer plus bas sur la page.</translation> <translation id="9219103736887031265">Images</translation> +<translation id="92381315203627188">Quand un site demande de précharger en mode privé des liens sur sa page, Chrome chiffre et précharge les pages via les serveurs de Google sans cookies. Le site préchargé ne sait alors rien de votre identité.</translation> <translation id="926205370408745186">Supprimer votre activité Chrome de Bien-être numérique</translation> <translation id="927968626442779827">Utilisez le mode simplifié dans Google Chrome</translation> <translation id="928550791203542716">Vous suivez <ph name="SITE_NAME" /></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 1712800..13cbbea 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
@@ -813,6 +813,7 @@ <translation id="5809361687334836369">{HOURS,plural, =1{# ժամ առաջ}one{# ժամ առաջ}other{# ժամ առաջ}}</translation> <translation id="5810288467834065221">© Google LLC <ph name="YEAR" />։ Բոլոր իրավունքները պահպանված են:</translation> <translation id="5810864297166300463">Օգնություն համացանցում աշխատելիս</translation> +<translation id="5813552293717797987">Այս դիտարկիչը կառավարվում է <ph name="PARENT_NAME_1" /> և <ph name="PARENT_NAME_2" /> հաշիվների կողմից։</translation> <translation id="5814131985548525293">Սկսելու համար հպեք այստեղ կամ ձայնի պատկերակին</translation> <translation id="5814749351757353073">Բաժանորդագրվեք ձեր սիրած կայքերին</translation> <translation id="583281660410589416">Անհայտ</translation> @@ -1077,6 +1078,7 @@ <translation id="727288900855680735">Ուղարկե՞լ <ph name="ONE_TIME_CODE" /> կոդը <ph name="ORIGIN" /> կայքին</translation> <translation id="7274013316676448362">Արգելափակված կայք</translation> <translation id="7286572596625053347">Փոխե՞լ լեզուն (<ph name="LANGUAGE" />)</translation> +<translation id="7286703216224610554">Կիսվել միայն արձագանքով</translation> <translation id="7290209999329137901">Հնարավոր չէ վերանվանել</translation> <translation id="7291910923717764901">Այս պատկերի համար ավելացված նկարագրությունները</translation> <translation id="7293429513719260019">Ընտրել լեզուն</translation> @@ -1157,6 +1159,7 @@ <translation id="7646772052135772216">Գաղտնաբառերի համաժամացումը չի աշխատում</translation> <translation id="7655900163790317559">Bluetooth-ը միանում է…</translation> <translation id="7658239707568436148">Չեղարկել</translation> +<translation id="7663313374500954251">Այս դիտարկիչը կառավարվում է <ph name="PARENT_NAME" /> հաշվի կողմից։</translation> <translation id="7665369617277396874">Ավելացնել հաշիվ</translation> <translation id="766587987807204883">Հոդվածները ցուցադրվում են այստեղ։ Դրանք կարող եք կարդալ նույնիսկ անցանց ռեժիմում։</translation> <translation id="7682724950699840886">Փորձեք անել հետևյալը․ համոզվեք, որ ձեր սարքում բավարար տարածք կա և նորից փորձեք արտահանել։</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 65086963..dab27d6 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
@@ -40,7 +40,7 @@ <translation id="1204037785786432551">Download link</translation> <translation id="1206892813135768548">Salin teks link</translation> <translation id="1208340532756947324">Untuk menyinkronkan dan mempersonalisasi berbagai perangkat, aktifkan sinkronisasi</translation> -<translation id="1209206284964581585">Sembunyikan sekarang</translation> +<translation id="1209206284964581585">Sembunyikan untuk saat ini</translation> <translation id="1227058898775614466">Histori navigasi</translation> <translation id="1231733316453485619">Aktifkan sinkronisasi?</translation> <translation id="123724288017357924">Memuat ulang halaman, mengabaikan konten dalam cache</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 8b6fc3a..3532a5b 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
@@ -94,6 +94,7 @@ <translation id="1506061864768559482">ସନ୍ଧାନ ଇଞ୍ଜିନ୍</translation> <translation id="1513352483775369820">ବୁକ୍ମାର୍କ ଏବଂ ୱେବ୍ ଇତିବୃତ୍ତି</translation> <translation id="1513858653616922153">ପାସ୍ୱାର୍ଡକୁ ଡିଲିଟ୍ କରନ୍ତୁ</translation> +<translation id="1518421282666914498">ଇମୋସନ GIF <ph name="CURRENT_DATE_ISO" /></translation> <translation id="1521774566618522728">ଆଜି ସକ୍ରିୟ ଅଛି</translation> <translation id="1538801903729528855">ୱେବରେ ଏକ ଉନ୍ନତ ଭଏସ୍ ଅନୁଭୂତି ପାଆନ୍ତୁ</translation> <translation id="1544826120773021464">ଆପଣଙ୍କର Google ଆକାଉଣ୍ଟ ପରିଚାଳନା କରିବାକୁ, "ଆକାଉଣ୍ଟ ପରିଚାଳନା କରନ୍ତୁ" ବଟନ୍ରେ ଟାପ୍ କରନ୍ତୁ</translation> @@ -116,6 +117,7 @@ <translation id="1702543251015153180">ଆପଣଙ୍କ ଗାଢ଼ା ଥିମ ସେଟିଂସ ବଦଳାଇବେ କି?</translation> <translation id="1718835860248848330">ଶେଷ ଘଣ୍ଟାକର</translation> <translation id="1724977129262658800">ଆପଣଙ୍କ ପାସୱାର୍ଡ ଏଡିଟ୍ କରିବାକୁ ଅନଲକ୍ କରନ୍ତୁ</translation> +<translation id="1726477445370128854">ଆପଣ ଭିଜିଟ କରିପାରନ୍ତି ବୋଲି Chrome ଭାବୁଥିବା ପୃଷ୍ଠାଗୁଡ଼ିକୁ ଏହା ପ୍ରିଲୋଡ କଲେ ଆପଣ ଶୀଘ୍ର ବ୍ରାଉଜ ଏବଂ ସନ୍ଧାନ କରିପାରିବେ</translation> <translation id="173522743738009831">ପ୍ରାଇଭେସି ସେଣ୍ଡବକ୍ସ ବିଷୟରେ</translation> <translation id="1736419249208073774">ଏକ୍ସପ୍ଲୋର୍ କରନ୍ତୁ</translation> <translation id="1749561566933687563">ନିଜର ବୁକ୍ମାର୍କ୍ସ ସିଙ୍କ୍ କରନ୍ତୁ</translation> @@ -276,6 +278,7 @@ <translation id="2649068648233607930">ଆପଣଙ୍କ ବ୍ରାଉଜର <ph name="DOMAIN" /> ଦ୍ୱାରା ପରିଚାଳିତ ହେଉଛି</translation> <translation id="2650751991977523696">ଫାଇଲ୍ଟି ପୁଣି ଡାଉନ୍ଲୋଡ୍ କରିବେ?</translation> <translation id="2651091186440431324">{FILE_COUNT,plural, =1{#ଟି ଅଡିଓ ଫାଇଲ୍}other{#ଟି ଅଡିଓ ଫାଇଲ୍}}</translation> +<translation id="265156376773362237">ଷ୍ଟାଣ୍ଡାର୍ଡ ପ୍ରିଲୋଡିଂ</translation> <translation id="2656405586795711023">ୱେବ୍ ଆପଗୁଡ଼ିକ</translation> <translation id="2689830683995595741">Chrome ବ୍ୟବହାର କରିବା ଦ୍ୱାରା, ଆପଣ <ph name="BEGIN_LINK1" />Google ସେବାର ସର୍ତ୍ତାବଳୀ<ph name="END_LINK1" /> ଏବଂ <ph name="BEGIN_LINK2" />Google Chrome ଏବଂ Chrome OS ଅତିରିକ୍ତ ସେବାର ସର୍ତ୍ତାବଳୀ<ph name="END_LINK2" /> ସହିତ ସହମତ ହେଉଛନ୍ତି। <ph name="BEGIN_LINK3" />Family Link ମାଧ୍ୟମରେ ପରିଚାଳନା କରାଯାଇଥିବା Google ଆକାଉଣ୍ଟଗୁଡ଼ିକ ପାଇଁ ଗୋପନୀୟତା ନୋଟିସ୍<ph name="END_LINK3" /> ମଧ୍ୟ ଲାଗୁ ହୋଇଥାଏ।</translation> <translation id="2702516483241149200">ନୂଆ: ଏହି ଟେକ୍ସଟକୁ ସ୍କ୍ରୋଲ୍ କରୁଥିବା ଏକ ଲିଙ୍କ୍ ସେୟାର୍ କରନ୍ତୁ</translation> @@ -311,6 +314,7 @@ <translation id="2856503607207334158">ସାଇନ୍-ଇନ୍ କରିବା ବିଫଳ ହୋଇଛି</translation> <translation id="2860954141821109167">ଏହି ଡିଭାଇସ୍ରେ ଫୋନ୍ ଆପ୍ ସକ୍ଷମ ଅଛି ବୋଲି ସୁନିଶ୍ଚିତ କରନ୍ତୁ</translation> <translation id="2870560284913253234">ସାଇଟ୍</translation> +<translation id="2871733351037274014">ପୃଷ୍ଠାଗୁଡ଼ିକୁ ପ୍ରିଲୋଡ କରନ୍ତୁ</translation> <translation id="2888126860611144412">Chrome ବିଷୟରେ</translation> <translation id="2891154217021530873">ପୃଷ୍ଠା ଲୋଡ୍ କରିବା ବନ୍ଦ କରନ୍ତୁ</translation> <translation id="2892647708214602204">ଯେତେବେଳେ ଏହି ଫାଇଲ୍ ପ୍ରସ୍ତୁତ ହୋଇଯାଏ ଆପଣ ଏକ ବିଜ୍ଞପ୍ତି ଦେଖିବେ</translation> @@ -340,10 +344,12 @@ <translation id="2992473221983447149">ଛବିର ବର୍ଣ୍ଣନା</translation> <translation id="2996291259634659425">ପାସ୍ଫ୍ରେଜ୍ ତିଆରି କରନ୍ତୁ</translation> <translation id="2996809686854298943">URL ଆବଶ୍ୟକ</translation> +<translation id="2997081575621687554">ଯେତେବେଳେ ଏକ Google ସାଇଟ ତା'ର ପୃଷ୍ଠାରେ ଲିଙ୍କଗୁଡ଼ିକୁ ବ୍ୟକ୍ତିଗତ ଭାବେ ପ୍ରିଲୋଡ କରିବାକୁ କୁହେ, Chrome କୁକୀଗୁଡ଼ିକ ବିନା Google ସର୍ଭର ମାଧ୍ୟମରେ ଏନକ୍ରିପ୍ଟ କରି ପୃଷ୍ଠାଗୁଡ଼ିକୁ ପ୍ରିଲୋଡ କରେ। ଏହା ପ୍ରିଲୋଡ କରାଯାଇଥିବା ସାଇଟରୁ ଆପଣଙ୍କ ପରିଚୟକୁ ଲୁଚାଇଥାଏ।</translation> <translation id="3006881078666935414">କୌଣସି ବ୍ୟବହାର ହେଉଥିବା ଡାଟା ନାହିଁ</translation> <translation id="301080557829842765">ଗୋପନୀୟତା ଗାଇଡ୍</translation> <translation id="3016635187733453316">ଏହି ଡିଭାଇସ୍ଟି ଇଣ୍ଟର୍ନେଟ୍ ସହ ସଂଯୁକ୍ତ ହୋଇଥିବା ସୁନିଶ୍ଚିତ କରନ୍ତୁ</translation> <translation id="3026955690410463085">ଲିଙ୍କ୍ ଅନ୍ତର୍ଭୁକ୍ତ କରନ୍ତୁ</translation> +<translation id="3029276696788198026">କିଛି ପ୍ରିଲୋଡ କରାଯାଉନାହିଁ</translation> <translation id="3029704984691124060">ପାସଫ୍ରେଜ୍ ମେଳ ଖାଉନାହିଁ</translation> <translation id="3031225630520268969">Assistantର ଭଏସ୍ ମାଧ୍ୟମରେ ସନ୍ଧାନ ପାଇଁ ସମ୍ମତିର ui</translation> <translation id="3036750288708366620"><ph name="BEGIN_LINK" />ସାହାଯ୍ୟ ପାଆନ୍ତୁ<ph name="END_LINK" /></translation> @@ -377,6 +383,7 @@ <translation id="3232754137068452469">ୱେବ୍ ଆପ୍</translation> <translation id="3234978181857588512">ଡିଭାଇସରେ ସେଭ୍ କରନ୍ତୁ</translation> <translation id="3236059992281584593">ଅବଶିଷ୍ଟ 1 ମିନଟ୍ ଅଛି</translation> +<translation id="3237087289225714896">ଷ୍ଟାଣ୍ଡାର୍ଡ ପ୍ରିଲୋଡିଂ:</translation> <translation id="3244271242291266297">ମାସ</translation> <translation id="3245429137663807393">ଯଦି ଆପଣ Chrome ବ୍ୟବହାର ରିପୋର୍ଟଗୁଡ଼ିକ ମଧ୍ୟ ସେୟାର କରନ୍ତି, ତେବେ ସେହି ରିପୋର୍ଟଗୁଡ଼ିକ ଆପଣ ଭିଜିଟ କରିଥିବା URLଗୁଡ଼ିକୁ ଅନ୍ତର୍ଭୁକ୍ତ କରିବ</translation> <translation id="3250563604907490871">ଯେତେବେଳେ ଆପଣ ୱାଇ-ଫାଇ ସହ ସଂଯୋଗ କରନ୍ତି ଛବିର ବର୍ଣ୍ଣନା ପୁଣି ଆରମ୍ଭ ହେବ</translation> @@ -410,6 +417,7 @@ <translation id="3389286852084373014">ଟେକ୍ସଟ୍ ବହୁତ ଲମ୍ବା ଅଟେ</translation> <translation id="3391512812407811893">ପ୍ରାଇଭେସି ସେଣ୍ଡବକ୍ସ ଟ୍ରାଏଲ୍</translation> <translation id="3398320232533725830">ବୁକ୍ମାର୍କ ପରିଚାଳକ ଖୋଲନ୍ତୁ</translation> +<translation id="3407392651057365886">ଅଧିକ ପୃଷ୍ଠାକୁ ପ୍ରିଲୋଡ କରାଯାଇଛି। ଅନ୍ୟ ସାଇଟଗୁଡ଼ିକ ଅନୁରୋଧ କଲେ ପୃଷ୍ଠାଗୁଡ଼ିକୁ Google ସର୍ଭରଗୁଡ଼ିକ ମାଧ୍ୟମରେ ପ୍ରିଲୋଡ କରାଯାଇପାରେ।</translation> <translation id="3414952576877147120">ଆକାର:</translation> <translation id="3421726884497337397">ତୃତୀୟ-ପକ୍ଷ କୁକୀଗୁଡ଼ିକୁ କେତେବେଳେ ବ୍ଲକ କରିବେ ତାହା ବାଛନ୍ତୁ</translation> <translation id="3429160811076349561">ଟ୍ରାଏଲ୍ ଫିଚରଗୁଡ଼ିକ ବନ୍ଦ ଅଛି</translation> @@ -532,6 +540,7 @@ <translation id="4196597275619698563">କାର୍ଡ ତିଆରି କରନ୍ତୁ</translation> <translation id="4198423547019359126">କୌଣସି ଡାଉନ୍ଲୋଡ୍ ହୋଇଥିବା ଲୋକେସନ୍ ଉପଲବ୍ଧ ନାହିଁ</translation> <translation id="4209895695669353772">Google ଦ୍ୱାରା ପ୍ରସ୍ତାବିତ ବ୍ୟକ୍ତିଗତକୃତ ବିଷୟବସ୍ତୁ ପ୍ରାପ୍ତ କରିବା ପାଇଁ, ସିଙ୍କ ଚାଲୁ କରନ୍ତୁ</translation> +<translation id="4214315110991671325">ଯଦି ଆପଣ କୁକୀଗୁଡ଼ିକୁ ଅନୁମତି ଦିଅନ୍ତି, ତେବେ Chrome ସେଗୁଡ଼ିକୁ ପ୍ରିଲୋଡ କରିବା ପାଇଁ ବ୍ୟବହାର କରିପାରେ।</translation> <translation id="4225895483398857530">ଟୁଲବାର୍ ସର୍ଟକଟ୍</translation> <translation id="4242533952199664413">ସେଟିଂସ୍ ଖୋଲନ୍ତୁ</translation> <translation id="4248098802131000011">ଡାଟା ଉଲ୍ଲଙ୍ଘନ ଏବଂ ଅନ୍ୟ ସୁରକ୍ଷା ସମସ୍ୟାଗୁଡ଼ିକରୁ ଆପଣଙ୍କର ପାସୱାର୍ଡଗୁଡ଼ିକୁ ସୁରକ୍ଷିତ ରଖନ୍ତୁ</translation> @@ -581,6 +590,7 @@ <translation id="4532845899244822526">ଫୋଲ୍ଡର୍ ଚୟନ କରନ୍ତୁ</translation> <translation id="4538018662093857852">Lite ମୋଡ୍କୁ ଚାଲୁ କରନ୍ତୁ</translation> <translation id="4547551584605870320">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" />ଟି ଟାବ୍}other{<ph name="TAB_COUNT_MANY" />ଟି ଟାବ୍, <ph name="TAB_COUNT_INCOGNITO" />ଟି ଇନକଗ୍ନିଟୋ}}</translation> +<translation id="4549903594034243526">chrome_emotion_gif_<ph name="CURRENT_TIMESTAMP_MS" /></translation> <translation id="4550003330909367850">ଏଠାରେ ଆପଣଙ୍କର ପାସ୍ୱର୍ଡ ଦେଖିବାକୁ ଏବଂ କପି କରିବାକୁ, ଏହି ଡିଭାଇସ୍ରେ ସ୍କ୍ରିନ୍ ଲକ୍ ସେଟ୍ କରନ୍ତୁ।</translation> <translation id="4554077758708533499">USB କେବୁଲ ମାଧ୍ୟମରେ ସଂଯୋଗ କରାଯାଇଛି</translation> <translation id="4557685098773234337">ଏଠାକୁ ଶୀଘ୍ର ଯିବା ପାଇଁ, ଆପଣଙ୍କ ମୂଳ ସ୍କ୍ରିନରେ ଏହି ପୃଷ୍ଠାକୁ ଯୋଗ କରନ୍ତୁ</translation> @@ -723,6 +733,7 @@ <translation id="5317780077021120954">ସଞ୍ଚୟ</translation> <translation id="5319359161174645648">Google Chromeକୁ ସୁପାରିଶ କରୁଛି</translation> <translation id="5324858694974489420">ଅଭିଭାବକୀୟ ସେଟିଂସ୍</translation> +<translation id="5326921373682845375">ପ୍ରିଲୋଡ କରାଯାଇଥିବା ପୃଷ୍ଠାଗୁଡ଼ିକ ଏନକ୍ରିପ୍ଟ କରାଯାଇଥିବା ଏବଂ ପୃଷ୍ଠାଗୁଡ଼ିକ ସହ ଲିଙ୍କ କରାଯାଉଥିବା ସାଇଟ ଏକ Google ସାଇଟ ହୋଇଥିବା ଯୋଗୁଁ ଏହି ପୃଷ୍ଠାଗୁଡ଼ିକୁ ବ୍ୟକ୍ତିଗତ ଭାବେ ପ୍ରିଲୋଡ କରାଯିବା ବେଳେ Google ସର୍ଭରଗୁଡ଼ିକ ନୂଆ ସୂଚନା ପାଏ ନାହିଁ।</translation> <translation id="5329858041417644019">ଆପଣଙ୍କର ବ୍ରାଉଜର୍ ପରିଚାଳିତ ନୁହେଁ</translation> <translation id="5342314432463739672">ଅନୁମତି ଅନୁରୋଧଗୁଡ଼ିକ</translation> <translation id="5355191726083956201">ଉନ୍ନତ ସୁରକ୍ଷା ଚାଲୁ ଅଛି</translation> @@ -873,6 +884,7 @@ <translation id="6154478581116148741">ଏହି ଡିଭାଇସ୍ରୁ ଆପଣଙ୍କର ପାସ୍ୱର୍ଡ ଏକ୍ସପୋର୍ଟ କରିବାକୁ ସେଟିଂସ୍ରେ ସ୍କ୍ରିନ୍ ଲକ୍ ଚାଲୁ କରନ୍ତୁ</translation> <translation id="6159335304067198720"><ph name="PERCENT" /> ଡାଟା ସେଭ୍ ହେଉଛି</translation> <translation id="6159729262978459665">ସିଙ୍କ୍ କରାଯାଇଥିବା ସମସ୍ତ ଡିଭାଇସରୁ ଇତିହାସକୁ ଖାଲି କରେ।</translation> +<translation id="6162892189396105610">ଆପଣ ଭିଜିଟ କରିବାର ସମ୍ଭାବନା ଅଛି ବୋଲି Chrome ଭାବୁଥିବା ପୃଷ୍ଠାଗୁଡ଼ିକୁ ପ୍ରିଲୋଡ କରେ।</translation> <translation id="6186394685773237175">କୌଣସି ଚୋରି ହୋଇଯାଇଥିବା ପାସୱାର୍ଡ ମିଳିଲା ନାହିଁ</translation> <translation id="6192907950379606605">ଛବିର ବର୍ଣ୍ଣନା ପାଆନ୍ତୁ</translation> <translation id="6203593061661911168">ୱାଇ-ଫାଇ ଚାଲୁ ଥିବା ବେଳେ ଡାଉନଲୋଡ୍ ଆରମ୍ଭ ହେବ</translation> @@ -907,6 +919,7 @@ <translation id="6364438453358674297">ଇତିବୃତ୍ତିରୁ ପ୍ରସ୍ତାବକୁ କାଢ଼ି ଦେବେକି?</translation> <translation id="6378173571450987352">ବିବରଣୀ: ବ୍ୟବହାର କରାଯାଇଥିବା ଡାଟାର ପରିମାଣ ଅନୁସାରେ କ୍ରମବଦ୍ଧ କରାଯାଇଛି</translation> <translation id="6379829913050047669"><ph name="APP_NAME" /> Chromeରେ ଖୋଲିବ। ଜାରି ରଖିବା ଦ୍ୱାରା, ଆପଣ <ph name="BEGIN_LINK1" />Google ସେବାର ସର୍ତ୍ତାବଳୀ<ph name="END_LINK1" /> ଏବଂ <ph name="BEGIN_LINK2" />Google Chrome ଏବଂ Chrome OS ଅତିରିକ୍ତ ସେବାର ସର୍ତ୍ତାବଳୀ<ph name="END_LINK2" /> ସହିତ ସହମତ ହେଉଛନ୍ତି।</translation> +<translation id="6380100320871303656">ଆପଣ ଭିଜିଟ କରିବାର ସମ୍ଭାବନା ଅଛି ବୋଲି Chrome ଭାବୁଥିବା ପୃଷ୍ଠାଗୁଡ଼ିକୁ ବାରମ୍ବାର ପ୍ରିଲୋଡ କରେ। ଏହି ସେଟିଂ ଯୋଗୁଁ ଡାଟାର ବ୍ୟବହାର ବଢ଼ିପାରେ।</translation> <translation id="6395288395575013217">ଲିଙ୍କ୍</translation> <translation id="6397616442223433927">ପୁଣି ଅନଲାଇନ୍ ହୋଇଛି</translation> <translation id="6402652558933147609"><ph name="VIOLATED_URL" />ରେ <ph name="ERROR_CODE" /></translation> @@ -940,6 +953,7 @@ <translation id="6532866250404780454">Chromeରେ ଆପଣ ଯେଉଁ ସାଇଟ୍ଗୁଡ଼ିକୁ ଯାଆନ୍ତି ସେଗୁଡ଼ିକ ଦେଖାଇବ ନାହିଁ। ସମସ୍ତ ସାଇଟ୍ ଟାଇମର୍ ଡିଲିଟ୍ କରାଯିବ।</translation> <translation id="6534565668554028783">Google ପ୍ରତିକ୍ରିୟା ଦେବାକୁ ବହୁତ ସମୟ ନେଉଛି</translation> <translation id="6539092367496845964">କିଛି ଭୁଲ ହୋଇଗଲା। ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation> +<translation id="6541042852576515209">ରିସାଇଜ କରନ୍ତୁ ଏବଂ ଘୂରାନ୍ତୁ</translation> <translation id="6541983376925655882">{NUM_HOURS,plural, =1{1 ଘଣ୍ଟା ପୂର୍ବେ ଯାଞ୍ଚ କରାଯାଇଛି}other{# ଘଣ୍ଟା ପୂର୍ବେ ଯାଞ୍ଚ କରାଯାଇଛି}}</translation> <translation id="6545017243486555795">ସମସ୍ତ ଡାଟା ଖାଲି କରନ୍ତୁ</translation> <translation id="6546511553472444032">ଫାଇଲଟି କ୍ଷତିକାରକ ହୋଇପାରେ</translation> @@ -1013,6 +1027,7 @@ <translation id="6896758677409633944">କପି କରନ୍ତୁ</translation> <translation id="6900532703269623216">ଉନ୍ନତ ସୁରକ୍ଷା</translation> <translation id="6903907808598579934">ସିଙ୍କ୍ ଚାଲୁ କରନ୍ତୁ</translation> +<translation id="6909589135458168665">ପୃଷ୍ଠାଗୁଡ଼ିକୁ ପ୍ରିଲୋଡ କରନ୍ତୁ</translation> <translation id="6929699136511445623">Android ସିଷ୍ଟମ୍ ସିଙ୍କକୁ ସକ୍ଷମ କରନ୍ତୁ</translation> <translation id="6942665639005891494">ସେଟିଂସ୍ ମେନୁ ବିକଳ୍ପ ବ୍ୟବହାର କରି ଯେକୌଣସି ସମୟରେ ଡାଉନ୍ଲୋଡ୍ କରିବାର ଡିଫଲ୍ଟ ଲୋକେସନ୍କୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ</translation> <translation id="694267552845942083">ବର୍ତ୍ତମାନ ଆପଣ ଆପଣଙ୍କ ସିଙ୍କ ସେଟିଂସକୁ କଷ୍ଟମାଇଜ୍ କରୁଛନ୍ତି। ସିଙ୍କ ଚାଲୁ କରିବା ସମ୍ପୂର୍ଣ୍ଣ କରିବା ପାଇଁ, ସ୍କ୍ରିନର ତଳ ପାର୍ଶ୍ୱରେ ଥିବା 'ସୁନିଶ୍ଚିତ କରନ୍ତୁ' ବଟନରେ ଟାପ୍ କରନ୍ତୁ। ଉପରକୁ ନାଭିଗେଟ୍ କରନ୍ତୁ</translation> @@ -1096,6 +1111,8 @@ <translation id="7444811645081526538">ଅଧିକ ବର୍ଗ</translation> <translation id="7453467225369441013">ଆପଣଙ୍କୁ ଅଧିକତମ ସାଇଟ୍ରୁ ସାଇନ୍ ଆଉଟ୍ କରିଦିଏ। ଆପଣଙ୍କର Google ଆକାଉଣ୍ଟରୁ ଆପଣ ସାଇନ୍ ଆଉଟ୍ ହେବେନାହିଁ।</translation> <translation id="7454641608352164238">ପର୍ଯ୍ୟାପ୍ତ ଜାଗା ନାହିଁ</translation> +<translation id="7456774706094330779">ଏକ୍ସଟେଣ୍ଡେଡ ପ୍ରିଲୋଡିଂ</translation> +<translation id="7468819939926272717">ଏକ ଇମୋସନ ବାଛନ୍ତୁ</translation> <translation id="7474822150871987353">ପୃଷ୍ଠାରୁ ବାହାରି ନଯାଇ ୱେବସାଇଟରେ ଥିବା ବିଷୟଗୁଡ଼ିକ ସମ୍ବନ୍ଧରେ ଜାଣନ୍ତୁ। ଗୋଟିଏ କିମ୍ବା ଅଧିକ ଶବ୍ଦ ବିଷୟରେ ସନ୍ଧାନ କରିବାକୁ ପୃଷ୍ଠାରେ ସେଗୁଡ଼ିକୁ ଚୟନ କରନ୍ତୁ।</translation> <translation id="7475192538862203634">ଯଦି ଆପଣ ଏହା ବାରମ୍ବାର ଦେଖୁଛନ୍ତି, ତେବେ ଏହି <ph name="BEGIN_LINK" />ପରାମର୍ଶଗୁଡ଼ିକ<ph name="END_LINK" /> ବ୍ୟବହାର କରି ଦେଖନ୍ତୁ।</translation> <translation id="7475688122056506577">SD କାର୍ଡ୍ ମିଳିଲା ନାହିଁ। ଆପଣଙ୍କର ଫାଇଲ୍ ମଧ୍ୟରୁ କିଛି ଫାଇଲ୍ ନାହିଁ</translation> @@ -1143,6 +1160,7 @@ <translation id="7665369617277396874">ଆକାଉଣ୍ଟ ଯୋଗ କରନ୍ତୁ</translation> <translation id="766587987807204883">ଅନୁଚ୍ଛେଦଗୁଡ଼ିକ ଏଠାରେ ଦେଖାଯାଏ, ଯାହା ଆପଣ ଅଫ୍ଲାଇନ୍ ଥିଲେ ମଧ୍ୟ ପଢ଼ିପାରିବେ</translation> <translation id="7682724950699840886">ନିମ୍ନୋକ୍ତ ପରାମର୍ଶଗୁଡ଼ିକୁ ଚେଷ୍ଟା କରନ୍ତୁ: ଆପଣଙ୍କର ଡିଭାଇସ୍ରେ ଯଥେଷ୍ଟ ଜାଗା ଥିବା ସୁନିଶ୍ଚିତ କରନ୍ତୁ, ପୁଣି ଏକ୍ସପୋର୍ଟ କରିବାକୁ ଚେଷ୍ଟା କରନ୍ତୁ।</translation> +<translation id="768618399695552958">ଆପଣ ଭିଜିଟ କରୁଥିବା କିଛି ପୃଷ୍ଠାକୁ ପ୍ରିଲୋଡ କରାଯାଇଛି। ପୃଷ୍ଠାଗୁଡ଼ିକୁ କୌଣସି Google ସାଇଟରୁ ଲିଙ୍କ କରାଯାଇଥିଲେ, Google ସର୍ଭରଗୁଡ଼ିକ ମାଧ୍ୟମରେ ସେଗୁଡ଼ିକୁ ପ୍ରିଲୋଡ କରାଯାଇପାରେ।</translation> <translation id="7698359219371678927"><ph name="APP_NAME" />ରେ ଇମେଲ୍ ତିଆରି କରନ୍ତୁ</translation> <translation id="7704317875155739195">ସନ୍ଧାନ ଓ URLଗୁଡ଼ିକୁ ସ୍ୱଚାଳିତ ଭାବେ ସମ୍ପୂର୍ଣ୍ଣ ହେବାକୁ ଦିଅନ୍ତୁ</translation> <translation id="7707922173985738739">ମୋବାଇଲ୍ ଡାଟା ବ୍ୟବହାର କରନ୍ତୁ।</translation> @@ -1215,6 +1233,7 @@ <translation id="8051695050440594747"><ph name="MEGABYTES" /> MB ଉପଲବ୍ଧ ଅଛି</translation> <translation id="8058655154417507695">ମିଆଦ ଶେଷ ହେଉଥିବା ବର୍ଷ</translation> <translation id="8058746566562539958">ନୂଆ Chrome ଟାବ୍ରେ ଖୋଲନ୍ତୁ</translation> +<translation id="8062594758852531064">ଏକ୍ସଟେଣ୍ଡେଡ ପ୍ରିଲୋଡିଂ:</translation> <translation id="8063895661287329888">ବୁକ୍ମାର୍କ ଯୋଗକରିବାରେ ବିଫଳ ହେଲା।</translation> <translation id="806745655614357130">ମୋ ଡାଟାକୁ ଅଲଗା ରଖନ୍ତୁ</translation> <translation id="8073388330009372546">ନୂତନ ଟାବ୍ରେ ଛବି ଖୋଲନ୍ତୁ</translation> @@ -1250,6 +1269,7 @@ <translation id="8250920743982581267">ଡକୁମେଣ୍ଟ</translation> <translation id="825412236959742607">ଏହି ପୃଷ୍ଠାଟି ବହୁତ ଅଧିକ ମେମୋରୀ ବ୍ୟବହାର କରୁଛି, ତେଣୁ Chrome କିଛି ବିଷୟବସ୍ତୁ ବାହାର କରି ଦେଇଛି।</translation> <translation id="8255617931166444521">କେବଳ ସେମାନଙ୍କ ନିଜ ସାଇଟରେ, ଆପଣଙ୍କ ବ୍ରାଉଜିଂ କାର୍ଯ୍ୟକଳାପକୁ ଦେଖିବା ପାଇଁ ସାଇଟଗୁଡ଼ିକ କେବଳ ଆପଣଙ୍କ କୁକୀଗୁଡ଼ିକୁ ବ୍ୟବହାର କରିପାରିବ</translation> +<translation id="8259179246279078674">ପ୍ରିଲୋଡ କରାଯାଇଥିବା ପୃଷ୍ଠାଗୁଡ଼ିକୁ ଏନକ୍ରିପ୍ଟ କରାଯାଇଥିବା ଯୋଗୁଁ Google ପ୍ରିଲୋଡ କରାଯାଇଥିବା ପୃଷ୍ଠାର ବିଷୟବସ୍ତୁ ବିଷୟରେ କିଛି ଜାଣିବ ନାହିଁ। କେଉଁ ସାଇଟଗୁଡ଼ିକୁ ବ୍ୟକ୍ତିଗତ ଭାବେ ପ୍ରିଲୋଡ କରାଯାଇଛି, ତାହା Google ସର୍ଭରଗୁଡ଼ିକ ଜାଣିବ। ଏହି ସୂଚନା କେବଳ ପୃଷ୍ଠାଗୁଡ଼ିକୁ ପ୍ରିଲୋଡ କରିବା ପାଇଁ ବ୍ୟବହୃତ ହୁଏ ଏବଂ ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟର ଅନ୍ୟ ସୂଚନା ସହ ଲିଙ୍କ କରାଯାଏ ନାହିଁ।</translation> <translation id="8260126382462817229">ପୁଣି ସାଇନ୍ ଇନ୍ କରିବାକୁ ଚେଷ୍ଟା କରନ୍ତୁ</translation> <translation id="8261506727792406068">ବିଲୋପ</translation> <translation id="82619448491672958">ଅନ୍ୟ ଟାବଗୁଡ଼ିକୁ ଦେଖନ୍ତୁ</translation> @@ -1308,6 +1328,7 @@ <translation id="8551513938758868521">ଆପଣ Chromeରୁ ବାହାରି ଯିବା ସମୟରେ ଇନକଗ୍ନିଟୋ ଟାବଗୁଡ଼ିକୁ ଲକ କରନ୍ତୁ</translation> <translation id="8555836665334561807">ୱାଇ-ଫାଇରେ</translation> <translation id="8559990750235505898">ଅନ୍ୟ ଭାଷାରେ ପୃଷ୍ଠାଗୁଡ଼ିକୁ ଅନୁବାଦ କରିବାକୁ ଅଫର୍ ଦିଅନ୍ତୁ</translation> +<translation id="8560560256644480257">GIF <ph name="PERCENT" />%% ତିଆରି କରାଯାଉଛି</translation> <translation id="8560602726703398413">ବୁକମାର୍କରେ ଆପଣଙ୍କ ପଢ଼ିବା ତାଲିକା ଖୋଜନ୍ତୁ</translation> <translation id="8562452229998620586">ସେଭ୍ ଥିବା ପାସ୍ୱର୍ଡ ଏଠାରେ ଦେଖାଯିବ।</translation> <translation id="856481929701340285">ଡେସ୍କଟପ ସାଇଟ ପାଇଁ ଅନୁରୋଧ କର</translation> @@ -1326,6 +1347,7 @@ <translation id="8636825310635137004">ଆପଣଙ୍କର ଅନ୍ୟ ଡିଭାଇସ୍ରୁ ନିଜର ଟାବ୍ଗୁଡ଼ିକୁ ପ୍ରାପ୍ତ କରିବାକୁ, ସିଙ୍କ ଚାଲୁ କରନ୍ତୁ।</translation> <translation id="8641930654639604085">ଅଶ୍ଳୀଳ ସାଇଟ୍ଗୁଡ଼ିକୁ ବ୍ଲକ୍ କରିବାକୁ ଚେଷ୍ଟା କରନ୍ତୁ</translation> <translation id="864544049772947936">ୱିଣ୍ଡୋଗୁଡ଼ିକୁ ପରିଚାଳନା କର (<ph name="INSTANCE_COUNTS" />)</translation> +<translation id="8646467750715887511">ଆପଣ ପୃଷ୍ଠାଗୁଡ଼ିକୁ ଖୋଲିବା ପରେ ହିଁ କେବଳ ସେଗୁଡ଼ିକ ଲୋଡ ହୁଏ।</translation> <translation id="8655129584991699539">ଆପଣା Chrome ସେଟିଂସ୍ରେ ଡାଟା ଖାଲି କରିପାରିବେ</translation> <translation id="8656747343598256512">ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟ ସହିତ ଏହି ସାଇଟ୍ ଏବଂ Chromeରେ ସାଇନ୍ ଇନ୍ କରନ୍ତୁ। ଆପଣ ପରେ ସିଙ୍କ୍ ଚାଲୁ କରିପାରିବେ।</translation> <translation id="8659579665266920523">Chrome ସହ କିପରି ସନ୍ଧାନ କରିବେ</translation> @@ -1422,6 +1444,7 @@ <translation id="9209888181064652401">କଲ୍ କରାଯାଇପାରିବ ନାହିଁ</translation> <translation id="9212845824145208577">ଏହାଠାରୁ ତଳକୁ ଯାଇପାରିବ ନାହିଁ। ପୃଷ୍ଠାର ଆହୁରି ତଳୁ ଆରମ୍ଭ କରିବାକୁ ଚେଷ୍ଟା କରନ୍ତୁ।</translation> <translation id="9219103736887031265">Images</translation> +<translation id="92381315203627188">ଯେତେବେଳେ କୌଣସି ସାଇଟ ଏହାର ପୃଷ୍ଠାରେ ଲିଙ୍କଗୁଡ଼ିକୁ ବ୍ୟକ୍ତିଗତ ଭାବେ ପ୍ରିଲୋଡ କରିବାକୁ କୁହେ, Chrome କୁକୀଗୁଡ଼ିକ ବିନା Google ସର୍ଭର ମାଧ୍ୟମରେ ପୃଷ୍ଠାଗୁଡ଼ିକୁ ଏନକ୍ରିପ୍ଟ କରି ପ୍ରିଲୋଡ କରେ। ଏହା ପ୍ରିଲୋଡ କରାଯାଇଥିବା ସାଇଟରୁ ଆପଣଙ୍କ ପରିଚୟକୁ ଲୁଚାଇଥାଏ।</translation> <translation id="926205370408745186">ଡିଜିଟାଲ୍ ୱେଲ୍ବିଂରୁ ଆପଣଙ୍କର Chrome କାର୍ଯ୍ୟକଳାପଗୁଡ଼ିକୁ କାଢ଼ନ୍ତୁ</translation> <translation id="927968626442779827">Google Chromeରେ ଲାଇଟ୍ ମୋଡ୍ ବ୍ୟବହାର କରନ୍ତୁ</translation> <translation id="928550791203542716"><ph name="SITE_NAME" />କୁ ଅନୁସରଣ କରାଯାଉଛି</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 90821a5..48fdb239 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
@@ -814,6 +814,7 @@ <translation id="5809361687334836369">{HOURS,plural, =1{# hora atrás}one{# horas atrás}other{# horas atrás}}</translation> <translation id="5810288467834065221">Copyright <ph name="YEAR" /> Google LLC. Todos os direitos reservados.</translation> <translation id="5810864297166300463">Assistência na Web</translation> +<translation id="5813552293717797987">Este navegador é gerenciado por <ph name="PARENT_NAME_1" /> e <ph name="PARENT_NAME_2" />.</translation> <translation id="5814131985548525293">Digite aqui ou toque no ícone de voz para começar</translation> <translation id="5814749351757353073">Acompanhe seus sites favoritos</translation> <translation id="583281660410589416">Desconhecido</translation> @@ -1078,6 +1079,7 @@ <translation id="727288900855680735">Enviar <ph name="ONE_TIME_CODE" /> para <ph name="ORIGIN" />?</translation> <translation id="7274013316676448362">Site bloqueado</translation> <translation id="7286572596625053347">Mudar <ph name="LANGUAGE" />?</translation> +<translation id="7286703216224610554">Compartilhar apenas a reação</translation> <translation id="7290209999329137901">Ação de renomear indisponível</translation> <translation id="7291910923717764901">Descrições de imagens adicionadas a esta página</translation> <translation id="7293429513719260019">Selecionar idioma</translation> @@ -1158,6 +1160,7 @@ <translation id="7646772052135772216">A sincronização de senha não está funcionando</translation> <translation id="7655900163790317559">Ativando o Bluetooth…</translation> <translation id="7658239707568436148">Cancelar</translation> +<translation id="7663313374500954251">Este navegador é gerenciado por <ph name="PARENT_NAME" />.</translation> <translation id="7665369617277396874">Adicionar conta</translation> <translation id="766587987807204883">Os artigos são exibidos aqui e podem ser lidos até quando você está off-line</translation> <translation id="7682724950699840886">Experimente as seguintes dicas: verifique se há espaço suficiente no dispositivo e tente exportar novamente.</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 4d2f1fbd..6f89107 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
@@ -603,6 +603,7 @@ <translation id="4696983787092045100">Dërgo tekstin te pajisjet e tua</translation> <translation id="4699172675775169585">Imazhet dhe skedarët në memorien specifike</translation> <translation id="4714588616299687897">Kurse deri në 60% të të dhënave të tua</translation> +<translation id="471759387343966120">Duke vazhduar, ti pranon <ph name="BEGIN_TOS_LINK" />Kushtet e shërbimit<ph name="END_TOS_LINK" /> dhe <ph name="BEGIN_PRIVACY_LINK" />Politikën e privatësisë<ph name="END_PRIVACY_LINK" />.\nPër të ndihmuar në përmirësimin e aplikacionit, Chrome dërgon të dhëna të përdorimit dhe të ndërprerjeve aksidentale te Google. <ph name="BEGIN_UMA_LINK" />Menaxho<ph name="END_UMA_LINK" /></translation> <translation id="4719927025381752090">Ofro që t'i përkthesh</translation> <translation id="4720023427747327413">Hape në <ph name="PRODUCT_NAME" /></translation> <translation id="4720982865791209136">Ndihmo në përmirësimin e Chrome. <ph name="BEGIN_LINK" />Plotëso anketën<ph name="END_LINK" /></translation> @@ -1027,6 +1028,7 @@ <translation id="7106762743910369165">Shfletuesi yt menaxhohet nga organizata jote</translation> <translation id="7121362699166175603">Pastron historikun dhe plotësimet automatike në shiritin e adresës. Llogaria jote e Google mund të ketë forma të tjera të historikut të shfletimit në <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7138678301420049075">Tjetër</translation> +<translation id="7143462160780459030">Pamja e ekranit nuk mund të nxirret. Provo përsëri.</translation> <translation id="7146622961999026732">Këto sajte dhe aplikacione duken të rëndësishme për ty:</translation> <translation id="7149893636342594995">24 orët e fundit</translation> <translation id="7155317020660659215">Për të skanuar një kod QR, ndrysho cilësimet e tua në mënyrë që Chrome të mund të përdorë kamerën tënde</translation> @@ -1205,6 +1207,7 @@ <translation id="808747664143081553">U lidh me pajisjen</translation> <translation id="8088176524274673045">Për të ndarë me personat në afërsi, lejoji të skanojnë këtë kod QR</translation> <translation id="8103578431304235997">Skeda "e fshehtë"</translation> +<translation id="8105613260829665809">Duke vazhduar, ti pranon <ph name="BEGIN_TOS_LINK" />Kushtet e shërbimit<ph name="END_TOS_LINK" />.\nPër të ndihmuar në përmirësimin e aplikacionit, Chrome dërgon të dhëna të përdorimit dhe të ndërprerjeve aksidentale te Google. <ph name="BEGIN_UMA_LINK" />Menaxho<ph name="END_UMA_LINK" /></translation> <translation id="8105893657415066307"><ph name="DESCRIPTION" /> <ph name="SEPARATOR" /> <ph name="FILE_SIZE" /></translation> <translation id="8109613176066109935">Për të marrë faqeshënuesit e tu në të gjitha pajisjet e tua, aktivizo sinkronizimin</translation> <translation id="8110024788458304985">Ndihmo në përmirësimin e veçorive dhe të cilësisë së funksionimit të Chrome</translation> @@ -1241,6 +1244,7 @@ <translation id="831192587911042850">Shton sajtin aktual të uebit në listën e sajteve të uebit që po ndjek ti.</translation> <translation id="834313815369870491">Mos i përkthe asnjëherë sajtet</translation> <translation id="8349013245300336738">Rendit sipas sasisë së të dhënave të përdorura</translation> +<translation id="8352996530981010042">Reagimet nuk mund të shkarkohen. Provo përsëri.</translation> <translation id="8354977102499939946">Kërko me shpejtësi me zërin tënd. Për ta modifikuar këtë shkurtore, shko te "Cilësimet".</translation> <translation id="835847953965672673"><ph name="NUMBER_OF_DOWNLOADS" /> shkarkime u restauruan</translation> <translation id="8364299278605033898">Shiko sajte uebi të mirënjohura</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 95412ca..3ba8a6e 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
@@ -94,6 +94,7 @@ <translation id="1506061864768559482">தேடல் இன்ஜின்</translation> <translation id="1513352483775369820">புத்தகக்குறிகளும் இணைய வரலாறும்</translation> <translation id="1513858653616922153">கடவுச்சொல்லை நீக்கு</translation> +<translation id="1518421282666914498">எமோடிகான் GIF <ph name="CURRENT_DATE_ISO" /></translation> <translation id="1521774566618522728">இன்று பயன்படுத்தியுள்ளார்</translation> <translation id="1538801903729528855">இன்னும் சிறப்பான குரல் அனுபவத்தை இணையத்தில் பெறுங்கள்</translation> <translation id="1544826120773021464">உங்கள் Google கணக்கை நிர்வகிக்க "கணக்கை நிர்வகி" என்ற பட்டனைத் தட்டுங்கள்</translation> @@ -116,6 +117,7 @@ <translation id="1702543251015153180">டார்க் தீம் அமைப்புகளை மாற்ற வேண்டுமா?</translation> <translation id="1718835860248848330">கடந்த ஒரு மணிநேரம்</translation> <translation id="1724977129262658800">கடவுச்சொல்லைத் திருத்த, அன்லாக் செய்யவும்</translation> +<translation id="1726477445370128854">நீங்கள் பார்வையிடக்கூடிய பக்கங்களைக் கணித்து அவற்றை Chrome முன்கூட்டியே ஏற்றினால் நீங்கள் வேகமாக உலாவலாம் தேடலாம்</translation> <translation id="173522743738009831">தனியுரிமை சாண்ட்பாக்ஸைப் பற்றி</translation> <translation id="1736419249208073774">அறிக</translation> <translation id="1749561566933687563">உங்கள் புத்தகக்குறிகளை ஒத்திசைக்கவும்</translation> @@ -276,6 +278,7 @@ <translation id="2649068648233607930">உங்கள் உலாவியை <ph name="DOMAIN" /> நிர்வகிக்கிறது</translation> <translation id="2650751991977523696">ஃபைலை மீண்டும் பதிவிறக்கவா?</translation> <translation id="2651091186440431324">{FILE_COUNT,plural, =1{# ஆடியோ ஃபைல்}other{# ஆடியோ ஃபைல்கள் }}</translation> +<translation id="265156376773362237">இயல்பான முன்கூட்டிய ஏற்றுதல்</translation> <translation id="2656405586795711023">இணைய ஆப்ஸ்</translation> <translation id="2689830683995595741">Chromeமைப் பயன்படுத்துவதன் மூலம் <ph name="BEGIN_LINK1" />Google சேவை விதிமுறைகளையும்<ph name="END_LINK1" /> <ph name="BEGIN_LINK2" />Google Chrome மற்றும் Chrome OS தொடர்பான கூடுதல் சேவை விதிமுறைகளையும்<ph name="END_LINK2" /> ஏற்கிறீர்கள். இவற்றோடு <ph name="BEGIN_LINK3" />Family Link நிர்வகிக்கும் Google கணக்குகளுக்கான தனியுரிமை அறிக்கையும்<ph name="END_LINK3" /> பொருந்தும்.</translation> <translation id="2702516483241149200">புதிது: இந்த உரைக்குச் செல்லும் இணைப்பைப் பகிரலாம்</translation> @@ -311,6 +314,7 @@ <translation id="2856503607207334158">உள்நுழைய முடியவில்லை</translation> <translation id="2860954141821109167">இந்தச் சாதனத்தில் ஃபோன் ஆப்ஸ் இயக்கப்பட்டுள்ளதை உறுதிசெய்து கொள்ளவும்</translation> <translation id="2870560284913253234">தளம்</translation> +<translation id="2871733351037274014">பக்கங்களை முன்கூட்டியே ஏற்றுதல்</translation> <translation id="2888126860611144412">Chrome அறிமுகம்</translation> <translation id="2891154217021530873">பக்கத்தை ஏற்றுவதை நிறுத்து</translation> <translation id="2892647708214602204">இந்த ஃபைல் தயாராக உள்ளபோது அறிவிப்பைப் பெறுவீர்கள்</translation> @@ -340,10 +344,12 @@ <translation id="2992473221983447149">பட விளக்கங்கள்</translation> <translation id="2996291259634659425">கடவுச்சொற்றொடரை உருவாக்கு</translation> <translation id="2996809686854298943">URL தேவை</translation> +<translation id="2997081575621687554">ஒரு Google தளம் அதன் பக்கத்தில் இருக்கும் இணைப்புகளைத் தனிப்பட்ட முறையில் முன்கூட்டியே ஏற்றுமாறு கேட்கும்போது, Google சேவையகங்கள் மூலம் பக்கங்களை என்க்ரிப்ஷன் செய்து, அவற்றைக் குக்கீகள் இல்லாமல் Chrome முன்கூட்டியே ஏற்றும். இதனால், முன்கூட்டியே ஏற்றப்பட்ட தளத்துடன் உங்கள் அடையாளம் பகிரப்படாது.</translation> <translation id="3006881078666935414">பயன்பாட்டுத் தரவு இல்லை</translation> <translation id="301080557829842765">தனியுரிமை வழிகாட்டி</translation> <translation id="3016635187733453316">இந்தச் சாதனம் இணையத்துடன் இணைக்கப்பட்டுள்ளதை உறுதி செய்யவும்</translation> <translation id="3026955690410463085">இணைப்பைச் சேர்க்கும்</translation> +<translation id="3029276696788198026">பக்கங்களை முன்கூட்டியே ஏற்றாதே</translation> <translation id="3029704984691124060">கடவுத்தொடர்கள் பொருந்தவில்லை</translation> <translation id="3031225630520268969">குரல் தேடலுக்கு Assistantடைப் பயன்படுத்துவதற்கான ஒப்புதல் ui</translation> <translation id="3036750288708366620"><ph name="BEGIN_LINK" />உதவி பெறுக<ph name="END_LINK" /></translation> @@ -377,6 +383,7 @@ <translation id="3232754137068452469">இணைய ஆப்ஸ்</translation> <translation id="3234978181857588512">சாதனத்தில் சேமி</translation> <translation id="3236059992281584593">1 நிமிடம் மீதமுள்ளது</translation> +<translation id="3237087289225714896">இயல்பான முன்கூட்டிய ஏற்றுதல்:</translation> <translation id="3244271242291266297">MM</translation> <translation id="3245429137663807393">Chrome உபயோக அறிக்கைகளைப் பகிர்ந்தாலும் நீங்கள் பார்வையிட்ட URLகள் அவற்றில் இருக்கும்</translation> <translation id="3250563604907490871">வைஃபையுடன் இணைத்ததும் பட விளக்கங்கள் மீண்டும் தொடங்கும்</translation> @@ -410,6 +417,7 @@ <translation id="3389286852084373014">உரையின் அளவு மிகப் பெரியதாக உள்ளது</translation> <translation id="3391512812407811893">சோதனையிலுள்ள தனியுரிமை சாண்ட்பாக்ஸ்</translation> <translation id="3398320232533725830">புக்மார்க்குகள் மேலாளரைத் திறக்கும்</translation> +<translation id="3407392651057365886">இன்னும் அதிகமான பக்கங்களை முன்கூட்டியே ஏற்றும். பிற தளங்கள் கோரும்போது Google சேவையகங்கள் மூலம் பக்கங்கள் முன்கூட்டியே ஏற்றப்படக்கூடும்.</translation> <translation id="3414952576877147120">அளவு:</translation> <translation id="3421726884497337397">மூன்றாம் தரப்புக் குக்கீகளை எப்போது தடுக்க வேண்டும் என்பதைத் தேர்வுசெய்யவும்</translation> <translation id="3429160811076349561">சோதனையிலுள்ள அம்சங்கள் முடக்கப்பட்டுள்ளன</translation> @@ -532,6 +540,7 @@ <translation id="4196597275619698563">கார்டை உருவாக்கு</translation> <translation id="4198423547019359126">பதிவிறக்க இருப்பிடம் எதுவும் இல்லை</translation> <translation id="4209895695669353772">Google பரிந்துரைக்கும் பிரத்யேக உள்ளடக்கத்தைப் பெற, ஒத்திசைவை இயக்கவும்</translation> +<translation id="4214315110991671325">குக்கீகளை அனுமதித்தால் பக்கங்களை முன்கூட்டியே ஏற்றுவதற்கு Chrome அவற்றைப் பயன்படுத்தக்கூடும்.</translation> <translation id="4225895483398857530">கருவிப்பட்டி ஷார்ட்கட்</translation> <translation id="4242533952199664413">அமைப்புகளைத் திற</translation> <translation id="4248098802131000011">தரவு மீறல்கள் மற்றும் பிற பாதுகாப்பு சிக்கல்களிலிருந்து உங்கள் கடவுச்சொற்களைப் பாதுகாத்திடுங்கள்</translation> @@ -581,6 +590,7 @@ <translation id="4532845899244822526">ஃபோல்டரைத் தேர்வுசெய்யவும்</translation> <translation id="4538018662093857852">லைட் பயன்முறையை இயக்கு</translation> <translation id="4547551584605870320">{TAB_COUNT,plural, =1{<ph name="TAB_COUNT_ONE" /> பக்கம்}other{<ph name="TAB_COUNT_MANY" /> பக்கங்கள், <ph name="TAB_COUNT_INCOGNITO" /> மறைநிலை}}</translation> +<translation id="4549903594034243526">chrome_emotion_gif_<ph name="CURRENT_TIMESTAMP_MS" /></translation> <translation id="4550003330909367850">உங்கள் கடவுச்சொல்லை இங்கே பார்க்க அல்லது நகலெடுக்க, இந்தச் சாதனத்தில் திரைப் பூட்டை அமைக்கவும்.</translation> <translation id="4554077758708533499">USB கேபிள் மூலம் இணைக்கப்பட்டது</translation> <translation id="4557685098773234337">இந்தப் பக்கத்தை விரைவாக அணுக, இதை உங்கள் முகப்புத் திரையில் சேர்க்கவும்</translation> @@ -723,6 +733,7 @@ <translation id="5317780077021120954">சேமி</translation> <translation id="5319359161174645648">Google ஆனது Chromeஐப் பரிந்துரைக்கிறது</translation> <translation id="5324858694974489420">பெற்றோர் அமைப்புகள்</translation> +<translation id="5326921373682845375">முன்கூட்டியே ஏற்றப்பட்ட பக்கங்கள் என்க்ரிப்ஷன் செய்யப்பட்டிருப்பதாலும், பக்கங்களுடன் இணைக்கின்ற தளம் Google தளமாக இருப்பதாலும் இந்தப் பக்கங்களைத் தனிப்பட்ட முறையில் முன்கூட்டியே ஏற்றும்போது புதிய தகவல்களை Google சேவையகங்கள் பெறாது.</translation> <translation id="5329858041417644019">உங்கள் உலாவி நிர்வகிக்கப்படவில்லை</translation> <translation id="5342314432463739672">அனுமதிக் கோரிக்கைகள்</translation> <translation id="5355191726083956201">மேம்படுத்தப்பட்ட பாதுகாப்பு இயக்கப்பட்டுள்ளது</translation> @@ -802,6 +813,7 @@ <translation id="5809361687334836369">{HOURS,plural, =1{# மணிநேரம் முன்பு}other{# மணிநேரம் முன்பு}}</translation> <translation id="5810288467834065221">பதிப்புரிமை <ph name="YEAR" /> Google LLC. அனைத்து உரிமைகளும் பாதுகாக்கப்பட்டுள்ளன.</translation> <translation id="5810864297166300463">இணைய உதவி</translation> +<translation id="5813552293717797987">இந்த உலாவியை நிர்வகிப்போர்: <ph name="PARENT_NAME_1" />, <ph name="PARENT_NAME_2" />.</translation> <translation id="5814131985548525293">தேடுவதற்கு இங்கே உள்ளிடவும் அல்லது மைக் ஐகானைத் தட்டவும்</translation> <translation id="5814749351757353073">உங்களுக்குப் பிடித்த தளங்களைத் தவறாமல் பார்க்கலாம்</translation> <translation id="583281660410589416">தெரியாதது</translation> @@ -873,6 +885,7 @@ <translation id="6154478581116148741">இந்தச் சாதனத்திலிருந்து உங்கள் கடவுச்சொற்களை ஏற்ற, அமைப்புகளில் திரைப் பூட்டை இயக்கவும்</translation> <translation id="6159335304067198720"><ph name="PERCENT" /> தரவுச் சேமிப்புகள்</translation> <translation id="6159729262978459665">ஒத்திசைக்கப்பட்ட சாதனங்கள் அனைத்திலிருந்தும் இதுவரையான செயல்பாடுகள் பற்றிய தகவல்களை அழிக்கும்.</translation> +<translation id="6162892189396105610">நீங்கள் பார்வையிடக்கூடிய பக்கங்களைக் கணித்து அவற்றை Chrome முன்கூட்டியே ஏற்றும்.</translation> <translation id="6186394685773237175">களவாடப்பட்ட கடவுச்சொற்கள் எதுவும் இல்லை</translation> <translation id="6192907950379606605">பட விளக்கங்களைப் பெறு</translation> <translation id="6203593061661911168">வைஃபையுடன் இணைக்கப்பட்டதும் பதிவிறக்கம் தொடங்கும்</translation> @@ -907,6 +920,7 @@ <translation id="6364438453358674297">வரலாற்றிலிருந்து பரிந்துரையை அகற்றவா?</translation> <translation id="6378173571450987352">விவரங்கள்: பயன்படுத்திய டேட்டா அளவின்படி வரிசைப்படுத்தப்பட்டுள்ளன</translation> <translation id="6379829913050047669"><ph name="APP_NAME" /> Chromeமில் திறக்கும். தொடர்வதன் மூலம் <ph name="BEGIN_LINK1" />Google சேவை விதிமுறைகளையும்<ph name="END_LINK1" /> <ph name="BEGIN_LINK2" />Google Chrome மற்றும் Chrome OS தொடர்பான கூடுதல் சேவை விதிமுறைகளையும்<ph name="END_LINK2" /> ஏற்கிறீர்கள்.</translation> +<translation id="6380100320871303656">நீங்கள் பார்வையிடக்கூடும் என Chrome கணிக்கும் பக்கங்களைப் பெரும்பாலும் முன்கூட்டியே ஏற்றும். இந்த அமைப்பின் காரணமாக டேட்டா உபயோகம் அதிகரிக்கக்கூடும்.</translation> <translation id="6395288395575013217">இணைப்பு</translation> <translation id="6397616442223433927">இணைப்பு வந்துவிட்டது</translation> <translation id="6402652558933147609"><ph name="VIOLATED_URL" /> இல் <ph name="ERROR_CODE" /> பிழை</translation> @@ -940,6 +954,7 @@ <translation id="6532866250404780454">Chromeமில் நீங்கள் பார்க்கும் தளங்களைக் காட்டாது. தளத்தில் உள்ள அத்தனை டைமர்களும் நீக்கப்படும்.</translation> <translation id="6534565668554028783">பதிலளிக்க, Google நீண்ட நேரம் எடுத்துக்கொண்டது</translation> <translation id="6539092367496845964">ஏதோ தவறாகிவிட்டது. பிறகு முயலவும்.</translation> +<translation id="6541042852576515209">அளவை மாற்றலாம், சுழற்றலாம்</translation> <translation id="6541983376925655882">{NUM_HOURS,plural, =1{சரிபார்த்தது: 1 மணிநேரத்திற்கு முன்பு}other{சரிபார்த்தது: # மணிநேரத்திற்கு முன்பு}}</translation> <translation id="6545017243486555795">எல்லா தரவையும் அழி</translation> <translation id="6546511553472444032">ஃபைல் தீங்கிழைப்பதாக இருக்கக்கூடும்</translation> @@ -1013,6 +1028,7 @@ <translation id="6896758677409633944">நகலெடு</translation> <translation id="6900532703269623216">மேம்பட்ட பாதுகாப்பு</translation> <translation id="6903907808598579934">ஒத்திசைவை இயக்கு</translation> +<translation id="6909589135458168665">பக்கங்களை முன்கூட்டியே ஏற்றுதல்</translation> <translation id="6929699136511445623">Android சிஸ்டம் ஒத்திசைவை இயக்கு</translation> <translation id="6942665639005891494">அமைப்புகள் மெனு விருப்பத்தைப் பயன்படுத்தி எப்போது வேண்டுமானாலும் இயல்புப் பதிவிறக்க இடத்தை மாற்றலாம்</translation> <translation id="694267552845942083">தற்போது ஒத்திசைவு அமைப்புகளைப் பிரத்தியேகமாக்குகிறீர்கள். ஒத்திசைவை இயக்க திரையின் கீழ்ப்பகுதிக்கு அருகிலுள்ள ‘உறுதிப்படுத்து’ பட்டனைத் தட்டவும். மேலே செல்</translation> @@ -1062,6 +1078,7 @@ <translation id="727288900855680735"><ph name="ONE_TIME_CODE" /> என்ற குறியீட்டை <ph name="ORIGIN" /> தளத்தில் சமர்ப்பிக்கவா?</translation> <translation id="7274013316676448362">தடுக்கப்பட்ட தளம்</translation> <translation id="7286572596625053347"><ph name="LANGUAGE" /> மொழியை மாற்றவா?</translation> +<translation id="7286703216224610554">உணர்வு வெளிப்பாட்டை மட்டும் பகிரும்</translation> <translation id="7290209999329137901">இதை மறுபெயரிட இயலாது</translation> <translation id="7291910923717764901">இந்தப் பக்கத்திற்கான பட விளக்கங்கள் சேர்க்கப்பட்டன</translation> <translation id="7293429513719260019">மொழியைத் தேர்ந்தெடு</translation> @@ -1096,6 +1113,8 @@ <translation id="7444811645081526538">கூடுதல் வகைகள்</translation> <translation id="7453467225369441013">பெரும்பாலான தளங்களிலிருந்து உங்களை வெளியேற்றும். உங்கள் Google கணக்கிலிருந்து வெளியேற்றாது.</translation> <translation id="7454641608352164238">போதுமான இடம் இல்லை</translation> +<translation id="7456774706094330779">நீட்டிக்கப்பட்ட முன்கூட்டிய ஏற்றுதல்</translation> +<translation id="7468819939926272717">எமோடிகானைத் தேர்வுசெய்யலாம்</translation> <translation id="7474822150871987353">பக்கத்தை விட்டு வெளியேறாமலேயே இணையதளங்களில் தலைப்புகளைப் பற்றித் தெரிந்துகொள்ளலாம். ஒரு பக்கத்தில் உள்ள ஒன்று அல்லது அதற்கு மேற்பட்ட வார்த்தைகள் குறித்துத் தேட அவற்றைத் தேர்ந்தெடுக்கவும்.</translation> <translation id="7475192538862203634">இதை அடிக்கடி காண்கிறீர்கள் எனில், இந்தப் <ph name="BEGIN_LINK" />பரிந்துரைகளைப்<ph name="END_LINK" /> பயன்படுத்திப் பார்க்கவும்.</translation> <translation id="7475688122056506577">SD கார்டு உள்ளது. உங்கள் கோப்புகளில் சில இல்லாமல் இருக்கலாம்.</translation> @@ -1140,9 +1159,11 @@ <translation id="7646772052135772216">கடவுச்சொல் ஒத்திசைவு இயங்கவில்லை</translation> <translation id="7655900163790317559">புளூடூத் இயக்கப்படுகிறது…</translation> <translation id="7658239707568436148">ரத்து செய்</translation> +<translation id="7663313374500954251">இந்த உலாவியை நிர்வகிப்பவர்: <ph name="PARENT_NAME" />.</translation> <translation id="7665369617277396874">கணக்கைச் சேர்</translation> <translation id="766587987807204883">செய்திகளை இங்கே பார்க்கலாம், ஆஃப்லைனில் இருந்தாலும்கூட அவற்றைப் படிக்கலாம்</translation> <translation id="7682724950699840886">பின்வரும் உதவிக்குறிப்புகளை முயன்று பார்க்கவும்: சாதனத்தில் போதுமான சேமிப்பிடம் இருப்பதை உறுதிப்படுத்தி, மீண்டும் ஏற்ற முயலவும்.</translation> +<translation id="768618399695552958">நீங்கள் பார்வையிடும் சில பக்கங்கள் முன்கூட்டியே ஏற்றப்பட்டிருக்கும். Google தளத்தில் இருந்து இணைக்கப்படும்போது Google சேவையகங்கள் மூலம் பக்கங்கள் முன்கூட்டியே ஏற்றப்படக்கூடும்.</translation> <translation id="7698359219371678927"><ph name="APP_NAME" /> இல் மின்னஞ்சலை உருவாக்கவும்</translation> <translation id="7704317875155739195">தேடல்களையும் URLகளையும் தானே நிரப்பு</translation> <translation id="7707922173985738739">மொபைல் டேட்டாவைப் பயன்படுத்து</translation> @@ -1215,6 +1236,7 @@ <translation id="8051695050440594747"><ph name="MEGABYTES" /> மெ.பை கிடைக்கிறது</translation> <translation id="8058655154417507695">காலாவதியாகும் ஆண்டு</translation> <translation id="8058746566562539958">புதிய Chrome தாவலில் திற</translation> +<translation id="8062594758852531064">நீட்டிக்கப்பட்ட முன்கூட்டிய ஏற்றுதல்:</translation> <translation id="8063895661287329888">புக்மார்க்கைச் சேர்க்க முடியவில்லை.</translation> <translation id="806745655614357130">எனது தரவைத் தனியாக வை</translation> <translation id="8073388330009372546">படத்தை புதிய தாவலில் திற</translation> @@ -1250,6 +1272,7 @@ <translation id="8250920743982581267">ஆவணங்கள்</translation> <translation id="825412236959742607">இந்தப் பக்கம் அதிகளவு நினைவகத்தைப் பயன்படுத்துவதால், Chrome சில உள்ளடக்கங்களை அகற்றியது.</translation> <translation id="8255617931166444521">உங்கள் உலாவல் செயல்பாட்டை அறிந்துகொள்வதற்காக மட்டுமே, நீங்கள் பார்வையிடும் தளங்களால் உங்கள் குக்கீகளைப் பயன்படுத்த முடியும்</translation> +<translation id="8259179246279078674">முன்கூட்டியே ஏற்றப்பட்ட பக்கங்கள் என்க்ரிப்ஷன் செய்யப்பட்டிருப்பதால் அவற்றின் உள்ளடக்கத்தை Google அறிந்துகொள்ள முடியாது. எந்தெந்தத் தளங்கள் தனிப்பட்ட முறையில் முன்கூட்டியே ஏற்றப்பட்டுள்ளன என்பதை Google சேவையகங்கள் அறிந்துகொள்ளும். பக்கங்களை முன்கூட்டியே ஏற்றுவதற்கு மட்டுமே இந்தத் தகவல்கள் பயன்படுத்தப்படும், அத்துடன் இவை உங்கள் Google கணக்கில் உள்ள பிற தகவல்களுடன் இணைக்கப்படவில்லை.</translation> <translation id="8260126382462817229">மீண்டும் உள்நுழையவும்</translation> <translation id="8261506727792406068">நீக்கு</translation> <translation id="82619448491672958">மற்ற பக்கங்களைக் காட்டு</translation> @@ -1308,6 +1331,7 @@ <translation id="8551513938758868521">Chromeமில் இருந்து வெளியேறும்போது மறைநிலைப் பக்கங்களைப் பூட்டு</translation> <translation id="8555836665334561807">வைஃபையில்</translation> <translation id="8559990750235505898">பக்கங்களைப் பிற மொழிகளில் மொழிபெயர்ப்பதற்கான சலுகை</translation> +<translation id="8560560256644480257">GIF படத்தை உருவாக்குகிறது <ph name="PERCENT" />%%</translation> <translation id="8560602726703398413">புக்மார்க்குகளில் உங்கள் வாசிப்புப் பட்டியலைக் கண்டறியலாம்</translation> <translation id="8562452229998620586">சேமிக்கப்பட்ட கடவுச்சொற்கள் இங்கு காண்பிக்கப்படும்.</translation> <translation id="856481929701340285">டெஸ்க்டாப் தளத்தைக் கோரு</translation> @@ -1326,6 +1350,7 @@ <translation id="8636825310635137004">உங்கள் பிற சாதனங்களிலிருந்து தாவல்களைப் பெற, ஒத்திசைவை இயக்கவும்.</translation> <translation id="8641930654639604085">பெரியவர்களுக்கான தளங்களைத் தடு</translation> <translation id="864544049772947936">சாளரங்களை (<ph name="INSTANCE_COUNTS" />) நிர்வகி</translation> +<translation id="8646467750715887511">பக்கங்களை நீங்கள் திறந்த பிறகே அவை ஏற்றப்படும்.</translation> <translation id="8655129584991699539">Chrome அமைப்புகளில் தரவை அழிக்கலாம்</translation> <translation id="8656747343598256512">இந்தத் தளத்திலும் உங்கள் Google கணக்கிலும் உள்நுழைவீர்கள். ஒத்திசைவைப் பின்னர் இயக்கலாம்.</translation> <translation id="8659579665266920523">Chromeமைப் பயன்படுத்தி எப்படித் தேடுவது?</translation> @@ -1422,6 +1447,7 @@ <translation id="9209888181064652401">அழைப்புகளைச் செய்ய இயலவில்லை</translation> <translation id="9212845824145208577">இதற்குக் கீழ் செல்ல முடியாது. பக்கத்தின் கீழ்ப்பகுதியில் இருந்து எடுக்கவும்.</translation> <translation id="9219103736887031265">Images</translation> +<translation id="92381315203627188">ஒரு தளம் அதன் பக்கத்தில் இருக்கும் இணைப்புகளைத் தனிப்பட்ட முறையில் முன்கூட்டியே ஏற்றுமாறு கேட்கும்போது, Google சேவையகங்கள் மூலம் பக்கங்களை என்க்ரிப்ஷன் செய்து, அவற்றைக் குக்கீகள் இல்லாமல் Chrome முன்கூட்டியே ஏற்றும். இதனால், முன்கூட்டியே ஏற்றப்பட்ட தளத்துடன் உங்கள் அடையாளம் பகிரப்படாது.</translation> <translation id="926205370408745186">Chrome செயல்பாட்டை டிஜிட்டல் வெல்பீயிங்கிலிருந்து நீக்குதல்</translation> <translation id="927968626442779827">Google Chrome உலாவியில் லைட் பயன்முறையைப் பயன்படுத்தலாம்</translation> <translation id="928550791203542716"><ph name="SITE_NAME" /> தளத்தைப் பின்தொடர்கிறீர்கள்</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 89443d2..1e067de2 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
@@ -813,6 +813,7 @@ <translation id="5809361687334836369">{HOURS,plural, =1{# గంట క్రితం}other{# గంటల క్రితం}}</translation> <translation id="5810288467834065221">కాపీరైట్ <ph name="YEAR" /> Google LLC. సర్వ హక్కులు ప్రత్యేకించబడ్డాయి.</translation> <translation id="5810864297166300463">వెబ్ సహాయం</translation> +<translation id="5813552293717797987">ఈ బ్రౌజర్ <ph name="PARENT_NAME_1" />, <ph name="PARENT_NAME_2" /> ద్వారా మేనేజ్ చేయబడుతోంది.</translation> <translation id="5814131985548525293">ప్రారంభించడానికి ఇక్కడ టైప్ చేయండి లేదా వాయిస్ చిహ్నాన్ని ట్యాప్ చేయండి</translation> <translation id="5814749351757353073">మీకు ఇష్టమైన సైట్ల గురించి తెలుసుకోండి</translation> <translation id="583281660410589416">తెలియని</translation> @@ -1077,6 +1078,7 @@ <translation id="727288900855680735"><ph name="ORIGIN" />కు <ph name="ONE_TIME_CODE" />ను సమర్పించాలా?</translation> <translation id="7274013316676448362">బ్లాక్ చేసిన సైట్</translation> <translation id="7286572596625053347"><ph name="LANGUAGE" /> మార్చాలా?</translation> +<translation id="7286703216224610554">ప్రతిస్పందనను మాత్రమే షేర్ చేయండి</translation> <translation id="7290209999329137901">పేరు మార్పు అందుబాటులో లేదు</translation> <translation id="7291910923717764901">ఈ పేజీకి ఇమేజ్ వివరణలు జోడించబడ్డాయి.</translation> <translation id="7293429513719260019">భాషను ఎంచుకోండి</translation> @@ -1157,6 +1159,7 @@ <translation id="7646772052135772216">పాస్వర్డ్ సింక్ పనిచేయడం లేదు</translation> <translation id="7655900163790317559">బ్లూటూత్ ఆన్ అవుతోంది…</translation> <translation id="7658239707568436148">రద్దు చేయి</translation> +<translation id="7663313374500954251">ఈ బ్రౌజర్ <ph name="PARENT_NAME" /> ద్వారా మేనేజ్ చేయబడుతోంది.</translation> <translation id="7665369617277396874">ఖాతాను జోడించండి</translation> <translation id="766587987807204883">కథనాలు ఇక్కడ కనిపిస్తాయి, మీరు ఆఫ్లైన్లో ఉన్నప్పటికీ కూడా వీటిని చదవవచ్చు</translation> <translation id="7682724950699840886">కింది చిట్కాలను ప్రయత్నించండి: మీ పరికరంలో తగినంత స్థలం ఉన్నట్లు నిర్ధారించుకోండి, మళ్లీ ఎగుమతి చేయడానికి ప్రయత్నించండి.</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 ec2e852..57b9b12 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
@@ -813,6 +813,7 @@ <translation id="5809361687334836369">{HOURS,plural, =1{# saat önce}other{# saat önce}}</translation> <translation id="5810288467834065221">Telif hakkı <ph name="YEAR" /> Google LLC. Tüm hakları saklıdır.</translation> <translation id="5810864297166300463">Web Yardımı</translation> +<translation id="5813552293717797987">Bu tarayıcı <ph name="PARENT_NAME_1" /> ve <ph name="PARENT_NAME_2" /> tarafından yönetiliyor.</translation> <translation id="5814131985548525293">Başlamak için buraya yazın veya ses simgesine dokunun</translation> <translation id="5814749351757353073">Favori sitelerinizi takip edin</translation> <translation id="583281660410589416">Bilinmiyor</translation> @@ -1077,6 +1078,7 @@ <translation id="727288900855680735"><ph name="ORIGIN" /> adresine <ph name="ONE_TIME_CODE" /> gönderilsin mi?</translation> <translation id="7274013316676448362">Engellenmiş site</translation> <translation id="7286572596625053347"><ph name="LANGUAGE" /> değiştirilsin mi?</translation> +<translation id="7286703216224610554">Yalnızca tepkileri paylaş</translation> <translation id="7290209999329137901">Yeniden adlandırma yapılamıyor</translation> <translation id="7291910923717764901">Bu sayfa için resim açıklamaları eklendi</translation> <translation id="7293429513719260019">Dil seç</translation> @@ -1157,6 +1159,7 @@ <translation id="7646772052135772216">Şifre senkronizasyonu çalışmıyor</translation> <translation id="7655900163790317559">Bluetooth açılıyor…</translation> <translation id="7658239707568436148">İptal</translation> +<translation id="7663313374500954251">Bu tarayıcı <ph name="PARENT_NAME" /> tarafından yönetiliyor.</translation> <translation id="7665369617277396874">Hesap ekle</translation> <translation id="766587987807204883">Çevrimdışı olsanız bile okuyabileceğiniz makaleler burada görünür.</translation> <translation id="7682724950699840886">Şu ipuçlarını deneyin: Cihazınızda yeterli alan bulunduğundan emin olun, daha sonra dışa aktarmayı tekrar deneyin.</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 558e068..2da7c89 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
@@ -795,6 +795,7 @@ <translation id="5809361687334836369">{HOURS,plural, =1{# giờ trước}other{# giờ trước}}</translation> <translation id="5810288467834065221">Bản quyền <ph name="YEAR" /> Google LLC. Mọi quyền được bảo lưu.</translation> <translation id="5810864297166300463">Hỗ trợ trên web</translation> +<translation id="5813552293717797987">Trình duyệt này do <ph name="PARENT_NAME_1" /> và <ph name="PARENT_NAME_2" /> quản lý.</translation> <translation id="5814131985548525293">Nhập vào đây hoặc nhấn vào biểu tượng giọng nói để bắt đầu</translation> <translation id="5814749351757353073">Cập nhật thông tin với các trang web yêu thích của bạn</translation> <translation id="583281660410589416">Không xác định</translation> @@ -1049,6 +1050,7 @@ <translation id="727288900855680735">Gửi <ph name="ONE_TIME_CODE" /> tới <ph name="ORIGIN" />?</translation> <translation id="7274013316676448362">Trang web bị chặn</translation> <translation id="7286572596625053347">Thay đổi <ph name="LANGUAGE" />?</translation> +<translation id="7286703216224610554">Chỉ chia sẻ phản ứng</translation> <translation id="7290209999329137901">Không đổi tên được</translation> <translation id="7291910923717764901">Đã thêm nội dung mô tả hình ảnh cho trang này</translation> <translation id="7293429513719260019">Chọn ngôn ngữ</translation> @@ -1127,6 +1129,7 @@ <translation id="7646772052135772216">Tính năng đồng bộ hóa mật khẩu hiện không hoạt động</translation> <translation id="7655900163790317559">Đang bật Bluetooth…</translation> <translation id="7658239707568436148">Hủy</translation> +<translation id="7663313374500954251"><ph name="PARENT_NAME" /> quản lý trình duyệt này.</translation> <translation id="7665369617277396874">Thêm tài khoản</translation> <translation id="766587987807204883">Các bài viết xuất hiện ở đây và bạn có thể đọc ngay cả khi không có kết nối mạng</translation> <translation id="7682724950699840886">Thử các mẹo sau: đảm bảo thiết bị của bạn có đủ dung lượng, sau đó thử xuất lại.</translation>
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc index 2a8eb59..e0ff686 100644 --- a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc +++ b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc
@@ -109,7 +109,7 @@ Profile::FromBrowserContext(context), nullptr /* drive_integration_service */, nullptr /* power_manager_client */, - chromeos::disks::DiskMountManager::GetInstance(), + ash::disks::DiskMountManager::GetInstance(), nullptr /* file_system_provider_service */, file_manager::VolumeManager::GetMtpStorageInfoCallback()); } @@ -327,14 +327,14 @@ task_environment()->AdvanceClock(base::subtle::TimeNowIgnoringOverride() - base::Time::Now()); // Needed by `file_manager::VolumeManager`. - chromeos::disks::DiskMountManager::InitializeForTesting( + ash::disks::DiskMountManager::InitializeForTesting( new file_manager::FakeDiskMountManager); BrowserWithTestWindowTest::SetUp(); } void TearDown() override { BrowserWithTestWindowTest::TearDown(); - chromeos::disks::DiskMountManager::Shutdown(); + ash::disks::DiskMountManager::Shutdown(); } TestingProfile* CreateProfile() override {
diff --git a/chrome/browser/ui/ash/shelf/app_service/app_service_app_window_shelf_item_controller.cc b/chrome/browser/ui/ash/shelf/app_service/app_service_app_window_shelf_item_controller.cc index b1d4e0f..d5074117 100644 --- a/chrome/browser/ui/ash/shelf/app_service/app_service_app_window_shelf_item_controller.cc +++ b/chrome/browser/ui/ash/shelf/app_service/app_service_app_window_shelf_item_controller.cc
@@ -50,10 +50,12 @@ Profile* profile = ChromeShelfController::instance()->profile(); arc::ArcPipBridge* pip_bridge = arc::ArcPipBridge::GetForBrowserContext(profile); - // ClosePip() actually expands PIP. - pip_bridge->ClosePip(); - std::move(callback).Run(ash::SHELF_ACTION_NONE, {}); - return; + if (pip_bridge) { + // ClosePip() actually expands PIP. + pip_bridge->ClosePip(); + std::move(callback).Run(ash::SHELF_ACTION_NONE, {}); + return; + } } } AppWindowShelfItemController::ItemSelected(std::move(event), display_id,
diff --git a/chrome/browser/ui/exclusive_access/exclusive_access_test.cc b/chrome/browser/ui/exclusive_access/exclusive_access_test.cc index 33720bafa7..f4f62d6 100644 --- a/chrome/browser/ui/exclusive_access/exclusive_access_test.cc +++ b/chrome/browser/ui/exclusive_access/exclusive_access_test.cc
@@ -58,6 +58,10 @@ run_loop_.Run(); } +void FullscreenNotificationObserver::Reset() { + observed_change_ = false; +} + const char ExclusiveAccessTest::kFullscreenKeyboardLockHTML[] = "/fullscreen_keyboardlock/fullscreen_keyboardlock.html";
diff --git a/chrome/browser/ui/exclusive_access/exclusive_access_test.h b/chrome/browser/ui/exclusive_access/exclusive_access_test.h index ee3b79f..88b537b 100644 --- a/chrome/browser/ui/exclusive_access/exclusive_access_test.h +++ b/chrome/browser/ui/exclusive_access/exclusive_access_test.h
@@ -46,6 +46,10 @@ // observed, in which case it returns immediately). void Wait(); + // Resets the observer so that it can be re-used to wait for another change of + // fullscreen. + void Reset(); + // FullscreenObserver: void OnFullscreenStateChanged() override;
diff --git a/chrome/browser/ui/exclusive_access/fullscreen_controller_interactive_browsertest.cc b/chrome/browser/ui/exclusive_access/fullscreen_controller_interactive_browsertest.cc index b71a772..4afea17 100644 --- a/chrome/browser/ui/exclusive_access/fullscreen_controller_interactive_browsertest.cc +++ b/chrome/browser/ui/exclusive_access/fullscreen_controller_interactive_browsertest.cc
@@ -40,10 +40,6 @@ #include "ui/display/test/display_manager_test_api.h" // nogncheck #endif // BUILDFLAG(IS_CHROMEOS_ASH) -#if defined(OS_LINUX) && defined(USE_OZONE) -#include "ui/ozone/public/ozone_platform.h" -#endif - #if defined(USE_AURA) #include "ui/aura/window.h" #endif // USE_AURA @@ -164,24 +160,19 @@ // Tests that while in fullscreen creating a new tab will exit fullscreen. IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest, TestNewTabExitsFullscreen) { -#if defined(OS_LINUX) && defined(USE_OZONE) - // Flaky in Linux interactive_ui_tests_wayland: crbug.com/1200036 - if (ui::OzonePlatform::GetPlatformNameForTest() == "wayland") - GTEST_SKIP(); -#endif - ASSERT_TRUE(embedded_test_server()->Start()); AddTabAtIndex(0, GURL(url::kAboutBlankURL), PAGE_TRANSITION_TYPED); + FullscreenNotificationObserver fullscreen_observer(browser()); ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(true)); + fullscreen_observer.Wait(); + EXPECT_TRUE(browser()->window()->IsFullscreen()); - { - FullscreenNotificationObserver fullscreen_observer(browser()); - AddTabAtIndex(1, GURL(url::kAboutBlankURL), PAGE_TRANSITION_TYPED); - fullscreen_observer.Wait(); - ASSERT_FALSE(browser()->window()->IsFullscreen()); - } + fullscreen_observer.Reset(); + AddTabAtIndex(1, GURL(url::kAboutBlankURL), PAGE_TRANSITION_TYPED); + fullscreen_observer.Wait(); + EXPECT_FALSE(browser()->window()->IsFullscreen()); } // Tests a tab exiting fullscreen will bring the browser out of fullscreen.
diff --git a/chrome/browser/ui/omnibox/omnibox_pedals_unittest.cc b/chrome/browser/ui/omnibox/omnibox_pedals_unittest.cc index 6739e47..1adc7a00 100644 --- a/chrome/browser/ui/omnibox/omnibox_pedals_unittest.cc +++ b/chrome/browser/ui/omnibox/omnibox_pedals_unittest.cc
@@ -53,6 +53,15 @@ "ማንነት የማያሳውቅ መስኮት", "ቋንቋ ቀይር ይህ ገጽ", "google chrome አዘምን", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "ar", @@ -79,6 +88,15 @@ "一時的踏板placeholder", "一時的踏板placeholder", "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "bg", @@ -89,6 +107,15 @@ "стартиране поверително сърфиране", "промяна езика тази страница", "браузъра актуализиране", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "bn", @@ -99,6 +126,15 @@ "ব্যক্তিগত উইন্ডো", "ভাষা পরিবর্তন করুন এই পৃষ্ঠা", "ব্রাউজার আপগ্রেড করুন", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "ca", @@ -109,6 +145,15 @@ "finestra d'incògnit", "canviar l'idioma aquesta pàgina", "google chrome actualitzar versió", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "cs", @@ -119,6 +164,15 @@ "anonymní režim", "změnit jazyk tato stránka", "google chrome aktualizovat", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "da", @@ -129,6 +183,15 @@ "inkognitotilstand", "skift sprog denne side", "google chrome installer", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "de", @@ -155,6 +218,15 @@ "一時的踏板placeholder", "一時的踏板placeholder", "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "el", @@ -165,6 +237,15 @@ "παράθυρο για ανώνυμη περιήγηση", "αλλαγή γλώσσας αυτή η σελίδα", "πρόγραμμα περιήγησης εγκατάσταση", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "en", @@ -245,6 +326,15 @@ "pestaña de incógnito", "cambiar idioma esta página", "google chrome actualización", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "es-419", @@ -271,6 +361,15 @@ "一時的踏板placeholder", "一時的踏板placeholder", "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "et", @@ -281,6 +380,15 @@ "inkognito vaheleht", "muuda keelt see leht", "google chrome uuenda versiooni", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "fa", @@ -291,6 +399,15 @@ "پنجره ناشناس", "ترجمه کردن این صفحه", "google chrome بهروزرسانی کردن", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "fi", @@ -301,6 +418,15 @@ "yksityinen välilehti", "vaihda kieltä tämä sivu", "google chrome päivitys", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "fil", @@ -311,6 +437,15 @@ "incognito window", "baguhin ang wika i-translate ang page", "google chrome i-install", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "fr", @@ -337,6 +472,15 @@ "一時的踏板placeholder", "一時的踏板placeholder", "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "gu", @@ -347,6 +491,15 @@ "ખાનગી વિંડો", "અનુવાદ કરો આ પેજ", "બ્રાઉઝર ઇન્સ્ટૉલ કરો", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "he", @@ -357,6 +510,15 @@ "כרטיסיית מצב אנונימי", "לשנות שפה דף זה", "google chrome להתקין", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "hi", @@ -367,6 +529,15 @@ "गुप्त विंडो", "अनुवाद करें यह पेज", "ब्राउज़र अपग्रेड करें", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "hr", @@ -377,6 +548,15 @@ "anonimna kartica", "promjena jezika ova stranica", "google chrome instaliranje", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "hu", @@ -387,6 +567,15 @@ "inkognitó ablak", "nyelvének módosítása ezt az oldalt", "google chrome frissítése", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "id", @@ -397,6 +586,15 @@ "jendela pribadi", "terjemahkan halaman ini", "google chrome upgrade", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "it", @@ -407,6 +605,15 @@ "modalità di navigazione in incognito", "cambiare la lingua questa pagina", "google chrome eseguire l'upgrade", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "ja", @@ -433,6 +640,15 @@ "一時的踏板placeholder", "一時的踏板placeholder", "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "kn", @@ -443,6 +659,15 @@ "ಅಜ್ಞಾತ ಟ್ಯಾಬ್", "ಭಾಷೆಯನ್ನು ಬದಲಾಯಿಸಿ ಈ ಪುಟ", "ಬ್ರೌಸರ್ ಅಪ್ಗ್ರೇಡ್ ಮಾಡಿ", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "ko", @@ -453,6 +678,15 @@ "비공개 모드", "언어 변경 이 페이지", "브라우저 업그레이드", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "lt", @@ -463,6 +697,15 @@ "inkognito skirtukas", "pakeisti kalbą šis puslapis", "google chrome atnaujinti", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "lv", @@ -473,6 +716,15 @@ "inkognito režīma logs", "mainīt valodu šī lapa", "google chrome atjaunināt", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "ml", @@ -483,6 +735,15 @@ "സ്വകാര്യ വിൻഡോ", "വിവർത്തനം ചെയ്യുക ഈ പേജ്", "ബ്രൗസർ അപ്ഗ്രേഡ് ചെയ്യുക", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "mr", @@ -493,6 +754,15 @@ "खाजगी विंडो", "भाषांतर करा हे पेज", "ब्राउझर अपग्रेड करा", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "ms", @@ -503,6 +773,15 @@ "tetingkap inkognito", "tukar bahasa halaman ini", "penyemak imbas kemas kini", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "nl", @@ -513,6 +792,15 @@ "incognitotabblad", "taal wijzigen deze pagina", "google chrome installeren", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "pl", @@ -523,6 +811,15 @@ "tryb niewidzialny", "zmień język tę stronę", "google chrome zaktualizuj", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "pt-BR", @@ -533,6 +830,15 @@ "modo de navegação anônima", "mudar idioma esta página", "google chrome fazer upgrade", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "pt-PT", @@ -543,6 +849,15 @@ "separador de navegação anónima", "alterar idioma esta página", "google chrome atualizar", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "ro", @@ -553,6 +868,15 @@ "fereastră incognito", "schimbă limba această pagină", "google chrome actualizează", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "ru", @@ -563,6 +887,15 @@ "анонимный просмотр", "изменить язык эту страницу", "браузер установить обновление", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "sk", @@ -573,6 +906,15 @@ "súkromný režim", "zmeniť jazyk túto stránku", "google chrome aktualizovať", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "sl", @@ -583,6 +925,15 @@ "zavihek brez beleženja dejavnosti", "spremeni jezik to stran", "google chrome nadgradi", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "sr", @@ -593,6 +944,15 @@ "картица за приватно прегледање", "променити језик ове странице", "прегледача надограђивање", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "sv", @@ -603,6 +963,15 @@ "inkognitofönster", "ändra språk denna sida", "google chrome installera", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "sw", @@ -613,6 +982,15 @@ "dirisha la faragha", "badilisha lugha ukurasa huu", "google chrome installera", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "ta", @@ -623,6 +1001,15 @@ "தனிப்பட்ட பயன்முறை", "மொழியை மாற்று மொழிபெயர்க்கவும்", "உலாவி மேம்படுத்து", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "te", @@ -633,6 +1020,15 @@ "ప్రైవేట్ ట్యాబ్", "భాష మార్చడం ఈ పేజీ", "బ్రౌజర్ అప్గ్రేడ్ చేయడం", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "th", @@ -643,6 +1039,15 @@ "หน้าต่างไม่ระบุตัวตน", "เปลี่ยนภาษา หน้านี้", "เบราว์เซอร์ ติดตั้ง", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "tr", @@ -653,6 +1058,15 @@ "gizli pencereye", "dili değiştir bu sayfayı", "google chrome yeni sürüme geçir", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "uk", @@ -663,6 +1077,15 @@ "вікно в режимі анонімного перегляду", "змінити мову цієї сторінки", "веб-переглядач установити", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "vi", @@ -673,6 +1096,15 @@ "chế độ riêng tư", "thay đổi ngôn ngữ trang này", "trình duyệt cập nhật", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "zh-CN", @@ -699,6 +1131,15 @@ "一時的踏板placeholder", "一時的踏板placeholder", "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, { "zh-TW", @@ -725,6 +1166,15 @@ "一時的踏板placeholder", "一時的踏板placeholder", "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", + "一時的踏板placeholder", } }, // clang-format on
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc index c20fb83..c0693ad 100644 --- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc +++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
@@ -690,7 +690,7 @@ // updated with any edits the user made in the Save bubble. So at this point, // just using GetPendingCredentials() is safe. passwords_data_.client()->TriggerReauthForPrimaryAccount( - signin_metrics::ReauthAccessPoint::kPasswordSaveBubble, + signin_metrics::ReauthAccessPoint::kPasswordSaveLocallyBubble, base::BindOnce(&ManagePasswordsUIController:: MoveJustSavedPasswordAfterAccountStoreOptIn, weak_ptr_factory_.GetWeakPtr(),
diff --git a/chrome/browser/ui/startup/infobar_utils.cc b/chrome/browser/ui/startup/infobar_utils.cc new file mode 100644 index 0000000..8c5e9b5 --- /dev/null +++ b/chrome/browser/ui/startup/infobar_utils.cc
@@ -0,0 +1,134 @@ +// Copyright 2021 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/startup/infobar_utils.h" + +#include "base/command_line.h" +#include "build/buildflag.h" +#include "chrome/browser/browser_process.h" +#include "chrome/browser/obsolete_system/obsolete_system.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/session_crashed_bubble.h" +#include "chrome/browser/ui/startup/automation_infobar_delegate.h" +#include "chrome/browser/ui/startup/bad_flags_prompt.h" +#include "chrome/browser/ui/startup/default_browser_prompt.h" +#include "chrome/browser/ui/startup/google_api_keys_infobar_delegate.h" +#include "chrome/browser/ui/startup/obsolete_system_infobar_delegate.h" +#include "chrome/browser/ui/startup/startup_browser_creator.h" +#include "chrome/browser/ui/startup/startup_types.h" +#include "chrome/common/chrome_switches.h" +#include "chrome/common/pref_names.h" +#include "components/infobars/content/content_infobar_manager.h" +#include "components/prefs/pref_service.h" +#include "content/public/common/content_switches.h" +#include "google_apis/google_api_keys.h" + +namespace { +bool ShouldShowBadFlagsSecurityWarnings() { +#if !BUILDFLAG(IS_CHROMEOS_ASH) + PrefService* local_state = g_browser_process->local_state(); + if (!local_state) + return true; + + const auto* pref = local_state->FindPreference( + prefs::kCommandLineFlagSecurityWarningsEnabled); + DCHECK(pref); + + // The warnings can only be disabled by policy. Default to show warnings. + if (pref->IsManaged()) + return pref->GetValue()->GetBool(); +#endif + return true; +} + +// This is a separate function to avoid accidentally reading the switch from +// `startup_command_line`. +bool IsAutomationEnabled() { + return base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kEnableAutomation); +} + +// This is a separate function to avoid accidentally reading the switch from +// `startup_command_line`. +bool IsKioskModeEnabled() { + return base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kKioskMode); +} + +} // namespace + +void AddInfoBarsIfNecessary(Browser* browser, + Profile* profile, + const base::CommandLine& startup_command_line, + chrome::startup::IsFirstRun is_first_run, + bool is_web_app) { + if (!browser || !profile || browser->tab_strip_model()->count() == 0) + return; + + // Show the Automation info bar unless it has been disabled by policy. + bool show_bad_flags_security_warnings = ShouldShowBadFlagsSecurityWarnings(); + if (IsAutomationEnabled() && show_bad_flags_security_warnings) { + AutomationInfoBarDelegate::Create(); + } + + // Do not show any other info bars in Kiosk mode, because it's unlikely that + // the viewer can act upon or dismiss them. + if (IsKioskModeEnabled()) + return; + + // Web apps should not display the session restore bubble (crbug.com/1264121) + if (!is_web_app && HasPendingUncleanExit(browser->profile())) + SessionCrashedBubble::ShowIfNotOffTheRecordProfile( + browser, /*skip_tab_checking=*/false); + + // These info bars are not shown when the browser is being controlled by + // automated tests, so that they don't interfere with tests that assume no + // info bars. + if (!startup_command_line.HasSwitch(switches::kTestType) && + !IsAutomationEnabled()) { + // The below info bars are only added to the first profile which is + // launched. Other profiles might be restoring the browsing sessions + // asynchronously, so we cannot add the info bars to the focused tabs here. + // + // We cannot use `chrome::startup::IsProcessStartup` to determine whether + // this is the first profile that launched: The browser may be started + // without a startup window (`kNoStartupWindow`), or open the profile + // picker, which means that `chrome::startup::IsProcessStartup` will already + // be `kNo` when the first browser window is opened. + static bool infobars_shown = false; + if (infobars_shown) + return; + infobars_shown = true; + + content::WebContents* web_contents = + browser->tab_strip_model()->GetActiveWebContents(); + DCHECK(web_contents); + + if (show_bad_flags_security_warnings) + chrome::ShowBadFlagsPrompt(web_contents); + + infobars::ContentInfoBarManager* infobar_manager = + infobars::ContentInfoBarManager::FromWebContents(web_contents); + + if (!google_apis::HasAPIKeyConfigured()) + GoogleApiKeysInfoBarDelegate::Create(infobar_manager); + + if (ObsoleteSystem::IsObsoleteNowOrSoon()) { + PrefService* local_state = g_browser_process->local_state(); + if (!local_state || + !local_state->GetBoolean(prefs::kSuppressUnsupportedOSWarning)) + ObsoleteSystemInfoBarDelegate::Create(infobar_manager); + } + +#if !BUILDFLAG(IS_CHROMEOS_ASH) + if (!is_web_app && + !startup_command_line.HasSwitch(switches::kNoDefaultBrowserCheck)) { + // The default browser prompt should only be shown after the first run. + if (is_first_run == chrome::startup::IsFirstRun::kNo) + ShowDefaultBrowserPrompt(profile); + } +#endif + } +}
diff --git a/chrome/browser/ui/startup/infobar_utils.h b/chrome/browser/ui/startup/infobar_utils.h new file mode 100644 index 0000000..1d62a77b --- /dev/null +++ b/chrome/browser/ui/startup/infobar_utils.h
@@ -0,0 +1,24 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_STARTUP_INFOBAR_UTILS_H_ +#define CHROME_BROWSER_UI_STARTUP_INFOBAR_UTILS_H_ + +#include "chrome/browser/ui/startup/startup_types.h" + +class Browser; +class Profile; + +namespace base { +class CommandLine; +} + +// Adds any startup infobars to the selected tab of the given browser. +void AddInfoBarsIfNecessary(Browser* browser, + Profile* profile, + const base::CommandLine& startup_command_line, + chrome::startup::IsFirstRun is_first_run, + bool is_web_app); + +#endif // CHROME_BROWSER_UI_STARTUP_INFOBAR_UTILS_H_
diff --git a/chrome/browser/ui/startup/startup_browser_creator.cc b/chrome/browser/ui/startup/startup_browser_creator.cc index fe5fe2e..8332425f 100644 --- a/chrome/browser/ui/startup/startup_browser_creator.cc +++ b/chrome/browser/ui/startup/startup_browser_creator.cc
@@ -371,6 +371,7 @@ // Handles the --app switch. bool MaybeLaunchAppShortcutWindow(const base::CommandLine& command_line, const base::FilePath& cur_dir, + chrome::startup::IsFirstRun is_first_run, Profile* profile) { if (!command_line.HasSwitch(switches::kApp)) return false; @@ -394,7 +395,7 @@ apps::OpenExtensionAppShortcutWindow(profile, url); if (web_contents) { web_app::startup::FinalizeWebAppLaunch( - LaunchMode::kAsWebAppInWindowByUrl, + LaunchMode::kAsWebAppInWindowByUrl, command_line, is_first_run, chrome::FindBrowserWithWebContents(web_contents), apps::mojom::LaunchContainer::kLaunchContainerWindow); return true; @@ -409,26 +410,28 @@ const base::CommandLine& command_line, const base::FilePath& cur_dir, chrome::startup::IsProcessStartup process_startup, + chrome::startup::IsFirstRun is_first_run, Profile* last_used_profile, const std::vector<Profile*>& last_opened_profiles) { auto on_urls_unhandled_cb = base::BindOnce( [](const base::CommandLine& command_line, const base::FilePath& cur_dir, chrome::startup::IsProcessStartup process_startup, - Profile* last_used_profile, + chrome::startup::IsFirstRun is_first_run, Profile* last_used_profile, const std::vector<Profile*>& last_opened_profiles) { // TODO(crbug.com/1208199): Refactor StartupBrowserCreator and use the // state struct here. StartupBrowserCreator startup_browser_creator; startup_browser_creator.LaunchBrowserForLastProfiles( - command_line, cur_dir, process_startup, last_used_profile, - last_opened_profiles); + command_line, cur_dir, process_startup, is_first_run, + last_used_profile, last_opened_profiles); }, - command_line, cur_dir, process_startup, last_used_profile, + command_line, cur_dir, process_startup, is_first_run, last_used_profile, last_opened_profiles); return web_app::startup::MaybeLaunchUrlHandlerWebAppFromCmd( command_line, cur_dir, std::move(on_urls_unhandled_cb), - base::BindOnce(&web_app::startup::FinalizeWebAppLaunch, absl::nullopt)); + base::BindOnce(&web_app::startup::FinalizeWebAppLaunch, absl::nullopt, + command_line, is_first_run)); } #endif @@ -571,12 +574,9 @@ const base::CommandLine& command_line, const base::FilePath& cur_dir, chrome::startup::IsProcessStartup process_startup, + chrome::startup::IsFirstRun is_first_run, Profile* last_used_profile, const Profiles& last_opened_profiles) { - chrome::startup::IsFirstRun is_first_run = - first_run::IsChromeFirstRun() ? chrome::startup::IsFirstRun::kYes - : chrome::startup::IsFirstRun::kNo; - // On Windows, when chrome is launched by notification activation where the // kNotificationLaunchId switch is used, always use |last_used_profile| which // contains the profile id extracted from the notification launch id. @@ -780,10 +780,16 @@ void StartupBrowserCreator::MaybeHandleProfileAgnosticUrls( const std::vector<GURL>& urls, base::OnceCallback<void()> on_urls_unhandled_cb) { + chrome::startup::IsFirstRun is_first_run = + first_run::IsChromeFirstRun() ? chrome::startup::IsFirstRun::kYes + : chrome::startup::IsFirstRun::kNo; + // Web app URL handling. web_app::startup::MaybeLaunchUrlHandlerWebAppFromUrls( urls, std::move(on_urls_unhandled_cb), - base::BindOnce(&web_app::startup::FinalizeWebAppLaunch, absl::nullopt)); + base::BindOnce(&web_app::startup::FinalizeWebAppLaunch, absl::nullopt, + base::CommandLine(base::CommandLine::NO_PROGRAM), + is_first_run)); } #endif // defined(OS_MAC) @@ -802,6 +808,10 @@ content::NavigationController::DisablePromptOnRepost(); } + chrome::startup::IsFirstRun is_first_run = + first_run::IsChromeFirstRun() ? chrome::startup::IsFirstRun::kYes + : chrome::startup::IsFirstRun::kNo; + bool silent_launch = false; bool should_launch_incognito = IncognitoModePrefs::ShouldLaunchIncognito( command_line, last_used_profile->GetPrefs()); @@ -1050,7 +1060,7 @@ // AppServiceProxyFactory available. The --app command line switch does not // require the AppServiceProxyFactory. This also allows the --app parameter // to work in conjunction with the --incognito command line parameter. - if (MaybeLaunchAppShortcutWindow(command_line, cur_dir, + if (MaybeLaunchAppShortcutWindow(command_line, cur_dir, is_first_run, privacy_safe_profile)) { return true; } @@ -1058,20 +1068,20 @@ // Launch the browser if the profile is unable to open web apps. if (!CanOpenWebApp(privacy_safe_profile)) { return LaunchBrowserForLastProfiles(command_line, cur_dir, process_startup, - last_used_profile, + is_first_run, last_used_profile, last_opened_profiles); } bool handled_as_app = // Try a web app launch (--app-id is present). - web_app::startup::MaybeHandleWebAppLaunch(command_line, cur_dir, - privacy_safe_profile); + web_app::startup::MaybeHandleWebAppLaunch( + command_line, cur_dir, privacy_safe_profile, is_first_run); #if defined(OS_WIN) || (defined(OS_LINUX) && !BUILDFLAG(IS_CHROMEOS_LACROS)) handled_as_app = handled_as_app || // Give web apps a chance to handle a URL. MaybeLaunchUrlHandlerWebAppFromCmd( - command_line, cur_dir, process_startup, + command_line, cur_dir, process_startup, is_first_run, last_used_profile, last_opened_profiles); #endif @@ -1081,7 +1091,8 @@ return true; return LaunchBrowserForLastProfiles(command_line, cur_dir, process_startup, - last_used_profile, last_opened_profiles); + is_first_run, last_used_profile, + last_opened_profiles); } bool StartupBrowserCreator::ProcessLastOpenedProfiles(
diff --git a/chrome/browser/ui/startup/startup_browser_creator.h b/chrome/browser/ui/startup/startup_browser_creator.h index 5bc2c02..813490db0 100644 --- a/chrome/browser/ui/startup/startup_browser_creator.h +++ b/chrome/browser/ui/startup/startup_browser_creator.h
@@ -142,6 +142,7 @@ const base::CommandLine& command_line, const base::FilePath& cur_dir, chrome::startup::IsProcessStartup process_startup, + chrome::startup::IsFirstRun is_first_run, Profile* last_used_profile, const Profiles& last_opened_profiles);
diff --git a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc index 4b44327..5d1acc6 100644 --- a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc +++ b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
@@ -3374,6 +3374,58 @@ policy_ != CommandLineFlagSecurityWarningsPolicy::kDisabled); } +IN_PROC_BROWSER_TEST_P(StartupBrowserCreatorInfobarsTest, + CheckInfobarIsShownForWebApps) { + // We deliberately set the flag on the process command line instead of on the + // command_line passed to the StartupBrowserCreator, because these flags are + // all read from CommandLine::ForCurrentProcess and ignore the command line + // passed to StartupBrowserCreator. In browser tests, this references the + // browser test's instead of the new process. + base::CommandLine::ForCurrentProcess()->AppendSwitch(flag_type_.flag); + + Profile* test_profile = browser()->profile(); + // Install web app + GURL example_url("http://www.example.com"); + web_app::AppId app_id = InstallPWA(test_profile, example_url); + + base::CommandLine command_line(base::CommandLine::NO_PROGRAM); + command_line.AppendSwitchASCII(switches::kAppId, app_id); + + infobars::ContentInfoBarManager* infobar_manager = + LaunchBrowserAndGetCreatedInfoBarManager(command_line); + ASSERT_TRUE(infobar_manager); + + EXPECT_EQ(HasInfoBar(infobar_manager, flag_type_.infobar_identifier), + policy_ != CommandLineFlagSecurityWarningsPolicy::kDisabled); +} + +IN_PROC_BROWSER_TEST_P(StartupBrowserCreatorInfobarsTest, + CheckInfobarIsShownForAppUrlShortcuts) { + // We deliberately set the flag on the process command line instead of on the + // command_line passed to the StartupBrowserCreator, because these flags are + // all read from CommandLine::ForCurrentProcess and ignore the command line + // passed to StartupBrowserCreator. In browser tests, this references the + // browser test's instead of the new process. + base::CommandLine::ForCurrentProcess()->AppendSwitch(flag_type_.flag); + + // Add --app=<url> to the command line. Tests launching legacy apps which may + // have been created by "Add to Desktop" in old versions of Chrome. + // TODO(mgiuca): Delete this feature (https://crbug.com/751029). We are + // keeping it for now to avoid disrupting existing workflows. + base::CommandLine command_line(base::CommandLine::NO_PROGRAM); + GURL url = ui_test_utils::GetTestUrl( + base::FilePath(base::FilePath::kCurrentDirectory), + base::FilePath(FILE_PATH_LITERAL("title2.html"))); + command_line.AppendSwitchASCII(switches::kApp, url.spec()); + + infobars::ContentInfoBarManager* infobar_manager = + LaunchBrowserAndGetCreatedInfoBarManager(command_line); + ASSERT_TRUE(infobar_manager); + + EXPECT_EQ(HasInfoBar(infobar_manager, flag_type_.infobar_identifier), + policy_ != CommandLineFlagSecurityWarningsPolicy::kDisabled); +} + // The trybots set the kNoSandbox flag when running browser tests with the // address sanitizer enabled, which contradicts with the assumption of this test // that there is no bad flag on the process command line.
diff --git a/chrome/browser/ui/startup/startup_browser_creator_impl.cc b/chrome/browser/ui/startup/startup_browser_creator_impl.cc index e26c1c7..a5432ad 100644 --- a/chrome/browser/ui/startup/startup_browser_creator_impl.cc +++ b/chrome/browser/ui/startup/startup_browser_creator_impl.cc
@@ -26,7 +26,6 @@ #include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h" #include "chrome/browser/defaults.h" #include "chrome/browser/infobars/simple_alert_infobar_creator.h" -#include "chrome/browser/obsolete_system/obsolete_system.h" #include "chrome/browser/prefs/session_startup_pref.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_io_data.h" @@ -43,13 +42,8 @@ #include "chrome/browser/ui/browser_navigator_params.h" #include "chrome/browser/ui/browser_tabstrip.h" #include "chrome/browser/ui/browser_window.h" -#include "chrome/browser/ui/session_crashed_bubble.h" -#include "chrome/browser/ui/startup/automation_infobar_delegate.h" -#include "chrome/browser/ui/startup/bad_flags_prompt.h" -#include "chrome/browser/ui/startup/default_browser_prompt.h" -#include "chrome/browser/ui/startup/google_api_keys_infobar_delegate.h" +#include "chrome/browser/ui/startup/infobar_utils.h" #include "chrome/browser/ui/startup/launch_mode_recorder.h" -#include "chrome/browser/ui/startup/obsolete_system_infobar_delegate.h" #include "chrome/browser/ui/startup/startup_browser_creator.h" #include "chrome/browser/ui/startup/startup_tab.h" #include "chrome/browser/ui/startup/startup_tab_provider.h" @@ -68,7 +62,6 @@ #include "content/public/browser/dom_storage_context.h" #include "content/public/browser/storage_partition.h" #include "content/public/common/content_switches.h" -#include "google_apis/google_api_keys.h" #include "rlz/buildflags/buildflags.h" #include "ui/base/buildflags.h" @@ -136,23 +129,6 @@ to->insert(to->begin(), from.begin(), from.end()); } -bool ShouldShowBadFlagsSecurityWarnings() { -#if !BUILDFLAG(IS_CHROMEOS_ASH) - PrefService* local_state = g_browser_process->local_state(); - if (!local_state) - return true; - - const auto* pref = local_state->FindPreference( - prefs::kCommandLineFlagSecurityWarningsEnabled); - DCHECK(pref); - - // The warnings can only be disabled by policy. Default to show warnings. - if (pref->IsManaged()) - return pref->GetValue()->GetBool(); -#endif - return true; -} - } // namespace StartupBrowserCreatorImpl::StartupBrowserCreatorImpl( @@ -428,7 +404,8 @@ tabs, behavior, restore_options, process_startup, is_post_crash_launch); // Finally, add info bars. - AddInfoBarsIfNecessary(browser); + AddInfoBarsIfNecessary(browser, profile_, command_line_, is_first_run_, + /*is_web_app=*/false); return result.launch_result; } @@ -632,73 +609,6 @@ return browser; } -void StartupBrowserCreatorImpl::AddInfoBarsIfNecessary(Browser* browser) { - if (!browser || !profile_ || browser->tab_strip_model()->count() == 0) - return; - - // Show the Automation info bar unless it has been disabled by policy. - bool show_bad_flags_security_warnings = ShouldShowBadFlagsSecurityWarnings(); - if (IsAutomationEnabled() && show_bad_flags_security_warnings) { - AutomationInfoBarDelegate::Create(); - } - - // Do not show any other info bars in Kiosk mode, because it's unlikely that - // the viewer can act upon or dismiss them. - if (IsKioskModeEnabled()) - return; - - if (HasPendingUncleanExit(browser->profile())) - SessionCrashedBubble::ShowIfNotOffTheRecordProfile( - browser, /*skip_tab_checking=*/false); - - // These info bars are not shown when the browser is being controlled by - // automated tests, so that they don't interfere with tests that assume no - // info bars. - if (!command_line_.HasSwitch(switches::kTestType) && !IsAutomationEnabled()) { - // The below info bars are only added to the first profile which is - // launched. Other profiles might be restoring the browsing sessions - // asynchronously, so we cannot add the info bars to the focused tabs here. - // - // We cannot use `chrome::startup::IsProcessStartup` to determine whether - // this is the first profile that launched: The browser may be started - // without a startup window (`kNoStartupWindow`), or open the profile - // picker, which means that `chrome::startup::IsProcessStartup` will already - // be `kNo` when the first browser window is opened. - static bool infobars_shown = false; - if (infobars_shown) - return; - infobars_shown = true; - - content::WebContents* web_contents = - browser->tab_strip_model()->GetActiveWebContents(); - DCHECK(web_contents); - - if (show_bad_flags_security_warnings) - chrome::ShowBadFlagsPrompt(web_contents); - - infobars::ContentInfoBarManager* infobar_manager = - infobars::ContentInfoBarManager::FromWebContents(web_contents); - - if (!google_apis::HasAPIKeyConfigured()) - GoogleApiKeysInfoBarDelegate::Create(infobar_manager); - - if (ObsoleteSystem::IsObsoleteNowOrSoon()) { - PrefService* local_state = g_browser_process->local_state(); - if (!local_state || - !local_state->GetBoolean(prefs::kSuppressUnsupportedOSWarning)) - ObsoleteSystemInfoBarDelegate::Create(infobar_manager); - } - -#if !BUILDFLAG(IS_CHROMEOS_ASH) - if (!command_line_.HasSwitch(switches::kNoDefaultBrowserCheck)) { - // The default browser prompt should only be shown after the first run. - if (is_first_run_ == chrome::startup::IsFirstRun::kNo) - ShowDefaultBrowserPrompt(profile_); - } -#endif - } -} - // static StartupBrowserCreatorImpl::BrowserOpenBehavior StartupBrowserCreatorImpl::DetermineBrowserOpenBehavior( @@ -771,12 +681,6 @@ } // static -bool StartupBrowserCreatorImpl::IsAutomationEnabled() { - return base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kEnableAutomation); -} - -// static bool StartupBrowserCreatorImpl::IsKioskModeEnabled() { return base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kKioskMode);
diff --git a/chrome/browser/ui/startup/startup_browser_creator_impl.h b/chrome/browser/ui/startup/startup_browser_creator_impl.h index 9ee8cb6..078cb1e6 100644 --- a/chrome/browser/ui/startup/startup_browser_creator_impl.h +++ b/chrome/browser/ui/startup/startup_browser_creator_impl.h
@@ -188,9 +188,6 @@ chrome::startup::IsProcessStartup process_startup, bool is_post_crash_launch); - // Adds any startup infobars to the selected tab of the given browser. - void AddInfoBarsIfNecessary(Browser* browser); - // Determines how the launch flow should obtain a Browser. static BrowserOpenBehavior DetermineBrowserOpenBehavior( const SessionStartupPref& pref, @@ -206,11 +203,6 @@ // Returns whether or not a browser window should be created/restored. static bool ShouldLaunch(const base::CommandLine& command_line); - // Returns whether `switches::kEnableAutomation` is set on the command line of - // the current process. This is a static method to avoid accidentally reading - // it from `command_line_`. - static bool IsAutomationEnabled(); - // Returns whether `switches::kKioskMode` is set on the command line of // the current process. This is a static method to avoid accidentally reading // it from `command_line_`.
diff --git a/chrome/browser/ui/startup/web_app_startup_utils.cc b/chrome/browser/ui/startup/web_app_startup_utils.cc index 7e3e80a..22513b8 100644 --- a/chrome/browser/ui/startup/web_app_startup_utils.cc +++ b/chrome/browser/ui/startup/web_app_startup_utils.cc
@@ -29,9 +29,11 @@ #include "chrome/browser/profiles/scoped_profile_keep_alive.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_dialogs.h" +#include "chrome/browser/ui/startup/infobar_utils.h" #include "chrome/browser/ui/startup/launch_mode_recorder.h" #include "chrome/browser/ui/startup/startup_browser_creator.h" #include "chrome/browser/ui/startup/startup_browser_creator_impl.h" +#include "chrome/browser/ui/startup/startup_types.h" #include "chrome/browser/web_applications/os_integration_manager.h" #include "chrome/browser/web_applications/web_app.h" #include "chrome/browser/web_applications/web_app_id.h" @@ -69,16 +71,18 @@ // Factory to create a `StartupWebAppCreator` to handle the given command // line. Will return false if this launch will not be handled as a web app // launch, or true if it will. - static bool MaybeHandleWebAppLaunch(const base::CommandLine& command_line, - const base::FilePath& cur_dir, - Profile* profile) { + static bool MaybeHandleWebAppLaunch( + const base::CommandLine& command_line, + const base::FilePath& cur_dir, + Profile* profile, + chrome::startup::IsFirstRun is_first_run) { std::string app_id = command_line.GetSwitchValueASCII(switches::kAppId); // There must be a kAppId switch arg in the command line to launch. if (app_id.empty()) return false; - base::AdoptRef( - new StartupWebAppCreator(command_line, cur_dir, profile, app_id)) + base::AdoptRef(new StartupWebAppCreator(command_line, cur_dir, profile, + is_first_run, app_id)) ->Start(); return true; } @@ -96,10 +100,12 @@ StartupWebAppCreator(const base::CommandLine& command_line, const base::FilePath& cur_dir, Profile* profile, + chrome::startup::IsFirstRun is_first_run, const AppId& app_id) : command_line_(command_line), cur_dir_(cur_dir), profile_(profile), + is_first_run_(is_first_run), app_id_(app_id), profile_keep_alive_( profile, @@ -301,13 +307,15 @@ } void OnAppLaunched(Browser* browser, apps::mojom::LaunchContainer container) { - FinalizeWebAppLaunch(launch_mode_, browser, container); + FinalizeWebAppLaunch(launch_mode_, command_line_, is_first_run_, browser, + container); } // Command line for this launch. const base::CommandLine command_line_; const base::FilePath cur_dir_; const raw_ptr<Profile> profile_; + chrome::startup::IsFirstRun is_first_run_; // The app id for this launch, corresponding to --app-id on the command line. const AppId app_id_; @@ -330,12 +338,15 @@ bool MaybeHandleWebAppLaunch(const base::CommandLine& command_line, const base::FilePath& cur_dir, - Profile* profile) { + Profile* profile, + chrome::startup::IsFirstRun is_first_run) { return StartupWebAppCreator::MaybeHandleWebAppLaunch(command_line, cur_dir, - profile); + profile, is_first_run); } void FinalizeWebAppLaunch(absl::optional<LaunchMode> app_launch_mode, + const base::CommandLine& command_line, + chrome::startup::IsFirstRun is_first_run, Browser* browser, apps::mojom::LaunchContainer container) { if (!browser) @@ -362,6 +373,10 @@ LaunchModeRecorder().SetLaunchMode(mode); + AddInfoBarsIfNecessary(browser, browser->profile(), command_line, + is_first_run, + /*is_web_app=*/true); + StartupBrowserCreatorImpl::MaybeToggleFullscreen(browser); }
diff --git a/chrome/browser/ui/startup/web_app_startup_utils.h b/chrome/browser/ui/startup/web_app_startup_utils.h index ecef482..c7edae81 100644 --- a/chrome/browser/ui/startup/web_app_startup_utils.h +++ b/chrome/browser/ui/startup/web_app_startup_utils.h
@@ -5,6 +5,7 @@ #ifndef CHROME_BROWSER_UI_STARTUP_WEB_APP_STARTUP_UTILS_H_ #define CHROME_BROWSER_UI_STARTUP_WEB_APP_STARTUP_UTILS_H_ +#include "chrome/browser/ui/startup/startup_types.h" #include "components/services/app_service/public/mojom/types.mojom.h" #include "third_party/abseil-cpp/absl/types/optional.h" @@ -25,10 +26,13 @@ // return true if the --app-id flag was found, otherwise false. bool MaybeHandleWebAppLaunch(const base::CommandLine& command_line, const base::FilePath& cur_dir, - Profile* profile); + Profile* profile, + chrome::startup::IsFirstRun is_first_run); // Final handling after a web app has been launched. void FinalizeWebAppLaunch(absl::optional<LaunchMode> app_launch_mode, + const base::CommandLine& command_line, + chrome::startup::IsFirstRun is_first_run, Browser* browser, apps::mojom::LaunchContainer container);
diff --git a/chrome/browser/ui/ui_features.cc b/chrome/browser/ui/ui_features.cc index 702aa33..bc7635c 100644 --- a/chrome/browser/ui/ui_features.cc +++ b/chrome/browser/ui/ui_features.cc
@@ -110,9 +110,6 @@ const base::Feature kScrollableTabStripButtons{ "ScrollableTabStripButtons", base::FEATURE_DISABLED_BY_DEFAULT}; -const base::Feature kForceDisableStackedTabs{"ForceDisableStackedTabs", - base::FEATURE_ENABLED_BY_DEFAULT}; - #if !defined(ANDROID) // Changes the layout of the chrome://settings page to only show one section at // a time, crbug.com/1204457.
diff --git a/chrome/browser/ui/ui_features.h b/chrome/browser/ui/ui_features.h index 998a433..54bab86 100644 --- a/chrome/browser/ui/ui_features.h +++ b/chrome/browser/ui/ui_features.h
@@ -58,8 +58,6 @@ extern const base::Feature kScrollableTabStripButtons; -extern const base::Feature kForceDisableStackedTabs; - #if !defined(ANDROID) extern const base::Feature kSettingsLandingPageRedesign; #endif
diff --git a/chrome/browser/ui/views/apps/app_dialog/app_block_dialog_view.cc b/chrome/browser/ui/views/apps/app_dialog/app_block_dialog_view.cc index 88b87a0..56e81ea 100644 --- a/chrome/browser/ui/views/apps/app_dialog/app_block_dialog_view.cc +++ b/chrome/browser/ui/views/apps/app_dialog/app_block_dialog_view.cc
@@ -4,7 +4,7 @@ #include "chrome/browser/ui/views/apps/app_dialog/app_block_dialog_view.h" -#include "chrome/browser/apps/app_service/app_service_proxy_chromeos.h" +#include "chrome/browser/apps/app_service/app_service_proxy.h" #include "chrome/browser/profiles/profile.h" #include "chrome/grit/generated_resources.h" #include "ui/base/l10n/l10n_util.h" @@ -20,9 +20,9 @@ namespace apps { // static -void AppServiceProxyChromeOs::CreateBlockDialog(const std::string& app_name, - const gfx::ImageSkia& image, - Profile* profile) { +void AppServiceProxy::CreateBlockDialog(const std::string& app_name, + const gfx::ImageSkia& image, + Profile* profile) { views::DialogDelegate::CreateDialogWidget( new AppBlockDialogView(app_name, image, profile), nullptr, nullptr) ->Show();
diff --git a/chrome/browser/ui/views/apps/app_dialog/app_dialog_view_browsertest.cc b/chrome/browser/ui/views/apps/app_dialog/app_dialog_view_browsertest.cc index d913fe6..4bf0d4f0 100644 --- a/chrome/browser/ui/views/apps/app_dialog/app_dialog_view_browsertest.cc +++ b/chrome/browser/ui/views/apps/app_dialog/app_dialog_view_browsertest.cc
@@ -70,9 +70,7 @@ const std::string& app_id() const { return app_id_; } - apps::AppServiceProxyChromeOs* app_service_proxy() { - return app_service_proxy_; - } + apps::AppServiceProxy* app_service_proxy() { return app_service_proxy_; } bool IsAppPaused() { app_service_proxy()->FlushMojoCallsForTesting(); @@ -147,7 +145,7 @@ private: std::string app_id_; - apps::AppServiceProxyChromeOs* app_service_proxy_ = nullptr; + apps::AppServiceProxy* app_service_proxy_ = nullptr; ArcAppListPrefs* arc_app_list_pref_ = nullptr; std::unique_ptr<arc::FakeAppInstance> app_instance_; };
diff --git a/chrome/browser/ui/views/apps/app_dialog/app_pause_dialog_view.cc b/chrome/browser/ui/views/apps/app_dialog/app_pause_dialog_view.cc index 623fbd92a..50d0612 100644 --- a/chrome/browser/ui/views/apps/app_dialog/app_pause_dialog_view.cc +++ b/chrome/browser/ui/views/apps/app_dialog/app_pause_dialog_view.cc
@@ -19,13 +19,12 @@ } // namespace // static -void apps::AppServiceProxyChromeOs::CreatePauseDialog( +void apps::AppServiceProxy::CreatePauseDialog( apps::mojom::AppType app_type, const std::string& app_name, const gfx::ImageSkia& image, const apps::PauseData& pause_data, - apps::AppServiceProxyChromeOs::OnPauseDialogClosedCallback - closed_callback) { + apps::AppServiceProxy::OnPauseDialogClosedCallback closed_callback) { views::DialogDelegate::CreateDialogWidget( new AppPauseDialogView(app_type, app_name, image, pause_data, std::move(closed_callback)), @@ -38,7 +37,7 @@ const std::string& app_name, const gfx::ImageSkia& image, const apps::PauseData& pause_data, - apps::AppServiceProxyChromeOs::OnPauseDialogClosedCallback closed_callback) + apps::AppServiceProxy::OnPauseDialogClosedCallback closed_callback) : AppDialogView(image) { SetTitle(l10n_util::GetStringFUTF16(IDS_APP_PAUSE_PROMPT_TITLE, base::UTF8ToUTF16(app_name)));
diff --git a/chrome/browser/ui/views/apps/app_dialog/app_pause_dialog_view.h b/chrome/browser/ui/views/apps/app_dialog/app_pause_dialog_view.h index 7dc17a4..62183303 100644 --- a/chrome/browser/ui/views/apps/app_dialog/app_pause_dialog_view.h +++ b/chrome/browser/ui/views/apps/app_dialog/app_pause_dialog_view.h
@@ -21,7 +21,7 @@ const std::string& app_name, const gfx::ImageSkia& image, const apps::PauseData& pause_data, - apps::AppServiceProxyChromeOs::OnPauseDialogClosedCallback callback); + apps::AppServiceProxy::OnPauseDialogClosedCallback callback); ~AppPauseDialogView() override; static AppPauseDialogView* GetActiveViewForTesting();
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc index 97500fa4..7810803 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
@@ -440,7 +440,7 @@ private: std::unique_ptr<gfx::SlideAnimation> show_animation_; tab_groups::TabGroupColorId tab_group_color_id_ = - tab_groups::TabGroupColorId::kOrange; + tab_groups::TabGroupColorId::kGrey; float border_radius_ = 4.5f; float button_radius_ = 5.0f; }; @@ -1756,17 +1756,19 @@ // Use this variable to set the tab_group_color for all folders in the // bookmark bar tab_groups::TabGroupColorId tab_group_color_id = - tab_groups::TabGroupColorId::kOrange; + tab_groups::TabGroupColorId::kGrey; // In most cases our text color will match the hover border color // However, for yellow, orange, and custom colors this may not be true // for contrast and visibility, so a default grey color may be // more appropriate. - text_color = - tp->GetColor(GetTabGroupContextMenuColorId(tab_group_color_id)); - bool default_to_grey = text_color == gfx::kGoogleYellow600 || - text_color == gfx::kGoogleOrange400; - if (default_to_grey) + SkColor background_color = + tp->GetColor(GetTabGroupBookmarkColorId(tab_group_color_id)); + text_color = tp->GetColor(GetTabGroupDialogColorId(tab_group_color_id)); + bool meets_contrast_req = + color_utils::GetContrastRatio(background_color, text_color) >= + color_utils::kMinimumVisibleContrastRatio; + if (!meets_contrast_req) text_color = gfx::kGoogleGrey800; // Set empty border using the default horizontal padding (but leaving
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc index a1abea6..1e345fc 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc +++ b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc
@@ -257,6 +257,10 @@ } void OmniboxViewViews::OnTabChanged(content::WebContents* web_contents) { + // These have a reference to the WebContents, avoid a dangling pointer. + share_submenu_model_.reset(); + send_tab_to_self_sub_menu_model_.reset(); + const OmniboxState* state = static_cast<OmniboxState*>( web_contents->GetUserData(&OmniboxState::kKey)); model()->RestoreState(state ? &state->model_state : nullptr); @@ -1922,7 +1926,7 @@ } share_submenu_model_ = std::make_unique<share::ShareSubmenuModel>( - location_bar_view_->browser(), + web_contents, std::make_unique<ui::DataTransferEndpoint>(ui::EndpointType::kDefault, false), share::ShareSubmenuModel::Context::PAGE, page_url,
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views.h b/chrome/browser/ui/views/omnibox/omnibox_view_views.h index 6def9228..7fe6f710 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_view_views.h +++ b/chrome/browser/ui/views/omnibox/omnibox_view_views.h
@@ -414,7 +414,8 @@ scoped_template_url_service_observation_{this}; // Send tab to self submenu & share submenu - only one of these is populated - // at a time. + // at a time. These are tied to a WebContents, they are created when the user + // opens the menu and destroyed when the tab changes. std::unique_ptr<share::ShareSubmenuModel> share_submenu_model_; std::unique_ptr<send_tab_to_self::SendTabToSelfSubMenuModel> send_tab_to_self_sub_menu_model_;
diff --git a/chrome/browser/ui/webui/chromeos/arc_power_control/arc_power_control_handler.cc b/chrome/browser/ui/webui/chromeos/arc_power_control/arc_power_control_handler.cc index bdf2fc0..745613b1a 100644 --- a/chrome/browser/ui/webui/chromeos/arc_power_control/arc_power_control_handler.cc +++ b/chrome/browser/ui/webui/chromeos/arc_power_control/arc_power_control_handler.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/ui/webui/chromeos/arc_power_control/arc_power_control_handler.h" +#include "ash/components/arc/mojom/power.mojom.h" #include "ash/components/arc/session/arc_bridge_service.h" #include "ash/components/arc/session/arc_service_manager.h" #include "base/bind.h" @@ -20,7 +21,6 @@ #include "chrome/browser/ash/arc/tracing/arc_value_event_trimmer.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" -#include "components/arc/mojom/power.mojom.h" namespace chromeos {
diff --git a/chrome/browser/ui/webui/chromeos/arc_power_control/arc_power_control_handler.h b/chrome/browser/ui/webui/chromeos/arc_power_control/arc_power_control_handler.h index e00e4943..a3e9601 100644 --- a/chrome/browser/ui/webui/chromeos/arc_power_control/arc_power_control_handler.h +++ b/chrome/browser/ui/webui/chromeos/arc_power_control/arc_power_control_handler.h
@@ -10,11 +10,11 @@ #include <utility> #include <vector> +#include "ash/components/arc/mojom/power.mojom.h" #include "ash/components/arc/power/arc_power_bridge.h" #include "base/memory/weak_ptr.h" #include "base/timer/timer.h" #include "chrome/browser/ash/throttle_service.h" -#include "components/arc/mojom/power.mojom.h" #include "content/public/browser/web_ui_message_handler.h" #include "ui/aura/window_observer.h" #include "ui/events/event_handler.h"
diff --git a/chrome/browser/ui/webui/chromeos/cellular_setup/mobile_setup_ui.cc b/chrome/browser/ui/webui/chromeos/cellular_setup/mobile_setup_ui.cc index 83ab8eb2..30672827 100644 --- a/chrome/browser/ui/webui/chromeos/cellular_setup/mobile_setup_ui.cc +++ b/chrome/browser/ui/webui/chromeos/cellular_setup/mobile_setup_ui.cc
@@ -52,11 +52,7 @@ namespace { // Host page JS API function names. -const char kJsApiStartActivation[] = "startActivation"; -const char kJsApiSetTransactionStatus[] = "setTransactionStatus"; -const char kJsApiPaymentPortalLoad[] = "paymentPortalLoad"; const char kJsGetDeviceInfo[] = "getDeviceInfo"; -const char kJsApiResultOK[] = "ok"; const char kJsDeviceStatusChangedCallback[] = "mobile.MobileSetup.deviceStateChanged"; @@ -237,9 +233,6 @@ void Reset(); // Handlers for JS WebUI messages. - void HandleSetTransactionStatus(const base::ListValue* args); - void HandleStartActivation(const base::ListValue* args); - void HandlePaymentPortalLoad(const base::ListValue* args); void HandleGetDeviceInfo(const base::ListValue* args); // NetworkStateHandlerObserver implementation. @@ -321,24 +314,11 @@ base::DictionaryValue strings; strings.SetString( - "connecting_header", - l10n_util::GetStringFUTF16(IDS_MOBILE_CONNECTING_HEADER, - base::UTF8ToUTF16(device->operator_name()))); - strings.SetString("error_header", - l10n_util::GetStringUTF16(IDS_MOBILE_ERROR_HEADER)); - strings.SetString("activating_header", - l10n_util::GetStringUTF16(IDS_MOBILE_ACTIVATING_HEADER)); - strings.SetString("completed_header", - l10n_util::GetStringUTF16(IDS_MOBILE_COMPLETED_HEADER)); - strings.SetString("please_wait", - l10n_util::GetStringUTF16(IDS_MOBILE_PLEASE_WAIT)); - strings.SetString("completed_text", - l10n_util::GetStringUTF16(IDS_MOBILE_COMPLETED_TEXT)); - strings.SetString("portal_unreachable_header", - l10n_util::GetStringUTF16(IDS_MOBILE_NO_CONNECTION_HEADER)); + "view_account_error_title", + l10n_util::GetStringUTF16(IDS_MOBILE_VIEW_ACCOUNT_ERROR_TITLE)); strings.SetString( - "invalid_device_info_header", - l10n_util::GetStringUTF16(IDS_MOBILE_INVALID_DEVICE_INFO_HEADER)); + "view_account_error_message", + l10n_util::GetStringUTF16(IDS_MOBILE_VIEW_ACCOUNT_ERROR_MESSAGE)); strings.SetString("title", l10n_util::GetStringUTF16(IDS_MOBILE_SETUP_TITLE)); strings.SetString("close_button", l10n_util::GetStringUTF16(IDS_CLOSE)); strings.SetString("cancel_button", l10n_util::GetStringUTF16(IDS_CANCEL)); @@ -347,21 +327,13 @@ const std::string& app_locale = g_browser_process->GetApplicationLocale(); webui::SetLoadTimeDataDefaults(app_locale, &strings); - // The webui differs based on whether the network is activated or not. If the - // network is activated, the webui goes straight to portal. Otherwise the - // webui is used for activation flow. - std::string full_html; - if (network->activation_state() == shill::kActivationStateActivated) { - static const base::NoDestructor<std::string> html_string( - ui::ResourceBundle::GetSharedInstance().LoadDataResourceString( - IDR_MOBILE_SETUP_PORTAL_PAGE_HTML)); - full_html = webui::GetI18nTemplateHtml(*html_string, &strings); - } else { - static const base::NoDestructor<std::string> html_string( - ui::ResourceBundle::GetSharedInstance().LoadDataResourceString( - IDR_MOBILE_SETUP_PAGE_HTML)); - full_html = webui::GetI18nTemplateHtml(*html_string, &strings); - } + // mobile_setup_ui.cc will only be triggered from the detail page for + // activated cellular network. + DCHECK(network->activation_state() == shill::kActivationStateActivated); + static const base::NoDestructor<std::string> html_string( + ui::ResourceBundle::GetSharedInstance().LoadDataResourceString( + IDR_MOBILE_SETUP_PORTAL_PAGE_HTML)); + std::string full_html = webui::GetI18nTemplateHtml(*html_string, &strings); std::move(callback).Run(base::RefCountedString::TakeString(&full_html)); } @@ -425,76 +397,11 @@ void MobileSetupHandler::RegisterMessages() { web_ui()->RegisterDeprecatedMessageCallback( - kJsApiStartActivation, - base::BindRepeating(&MobileSetupHandler::HandleStartActivation, - base::Unretained(this))); - web_ui()->RegisterDeprecatedMessageCallback( - kJsApiSetTransactionStatus, - base::BindRepeating(&MobileSetupHandler::HandleSetTransactionStatus, - base::Unretained(this))); - web_ui()->RegisterDeprecatedMessageCallback( - kJsApiPaymentPortalLoad, - base::BindRepeating(&MobileSetupHandler::HandlePaymentPortalLoad, - base::Unretained(this))); - web_ui()->RegisterDeprecatedMessageCallback( kJsGetDeviceInfo, base::BindRepeating(&MobileSetupHandler::HandleGetDeviceInfo, base::Unretained(this))); } -void MobileSetupHandler::HandleStartActivation(const base::ListValue* args) { - DCHECK_EQ(TYPE_UNDETERMINED, type_); - if (!web_ui()) - return; - - std::string path = web_ui()->GetWebContents()->GetURL().path(); - if (path.empty()) - return; - - NET_LOG(EVENT) << "Starting activation for service: " << NetworkPathId(path); - active_ = true; - AllowJavascript(); - - type_ = TYPE_ACTIVATION; - ash::MobileActivator::GetInstance()->AddObserver(this); - ash::MobileActivator::GetInstance()->InitiateActivation(path.substr(1)); -} - -void MobileSetupHandler::HandleSetTransactionStatus( - const base::ListValue* args) { - DCHECK_EQ(TYPE_ACTIVATION, type_); - if (!web_ui()) - return; - - const size_t kSetTransactionStatusParamCount = 1; - if (args->GetList().size() != kSetTransactionStatusParamCount) - return; - // Get change callback function name. - if (!args->GetList()[0].is_string()) - return; - std::string status = args->GetList()[0].GetString(); - - ash::MobileActivator::GetInstance()->OnSetTransactionStatus( - base::LowerCaseEqualsASCII(status, kJsApiResultOK)); -} - -void MobileSetupHandler::HandlePaymentPortalLoad(const base::ListValue* args) { - // Only activation flow webui is interested in these events. - if (type_ != TYPE_ACTIVATION || !web_ui()) - return; - - const size_t kPaymentPortalLoadParamCount = 1; - if (args->GetList().size() != kPaymentPortalLoadParamCount) - return; - // Get change callback function name. - if (!args->GetList()[0].is_string()) - return; - std::string result = args->GetList()[0].GetString(); - - ash::MobileActivator::GetInstance()->OnPortalLoaded( - base::LowerCaseEqualsASCII(result, kJsApiResultOK)); -} - void MobileSetupHandler::HandleGetDeviceInfo(const base::ListValue* args) { DCHECK_NE(TYPE_ACTIVATION, type_); if (!web_ui())
diff --git a/chrome/browser/ui/webui/read_later/read_later_ui.cc b/chrome/browser/ui/webui/read_later/read_later_ui.cc index 12b34fa..6f379a5 100644 --- a/chrome/browser/ui/webui/read_later/read_later_ui.cc +++ b/chrome/browser/ui/webui/read_later/read_later_ui.cc
@@ -53,6 +53,11 @@ static constexpr webui::LocalizedString kLocalizedStrings[] = { {"addCurrentTab", IDS_READ_LATER_ADD_CURRENT_TAB}, {"bookmarksTabTitle", IDS_BOOKMARK_MANAGER_TITLE}, + {"bookmarkCopied", IDS_BOOKMARK_MANAGER_TOAST_ITEM_COPIED}, + {"bookmarkDeleted", IDS_BOOKMARK_MANAGER_TOAST_ITEM_DELETED}, + {"bookmarkCreated", IDS_BOOKMARK_SCREEN_READER_CREATED}, + {"bookmarkReordered", IDS_BOOKMARK_SCREEN_READER_REORDERED}, + {"bookmarkMoved", IDS_BOOKMARK_SCREEN_READER_MOVED}, {"emptyStateAddFromDialogSubheader", IDS_READ_LATER_MENU_EMPTY_STATE_ADD_FROM_DIALOG_SUBHEADER}, {"emptyStateHeader", IDS_READ_LATER_MENU_EMPTY_STATE_HEADER},
diff --git a/chrome/browser/ui/webui/settings/chromeos/calculator/size_calculator.h b/chrome/browser/ui/webui/settings/chromeos/calculator/size_calculator.h index c395b7d..441fd877 100644 --- a/chrome/browser/ui/webui/settings/chromeos/calculator/size_calculator.h +++ b/chrome/browser/ui/webui/settings/chromeos/calculator/size_calculator.h
@@ -10,6 +10,7 @@ #include <memory> #include <vector> +#include "ash/components/arc/mojom/storage_manager.mojom.h" #include "ash/components/arc/session/connection_observer.h" #include "ash/components/arc/storage_manager/arc_storage_manager.h" #include "base/files/file_util.h" @@ -19,7 +20,6 @@ #include "chrome/browser/browsing_data/site_data_size_collector.h" #include "chromeos/dbus/cryptohome/UserDataAuth.pb.h" #include "chromeos/dbus/cryptohome/rpc.pb.h" -#include "components/arc/mojom/storage_manager.mojom.h" #include "components/user_manager/user.h" class Profile;
diff --git a/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.cc b/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.cc index 663687bb..4d64bbd 100644 --- a/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.cc +++ b/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.cc
@@ -22,14 +22,14 @@ #include "ui/base/l10n/l10n_util.h" #include "ui/base/text/bytes_formatting.h" -using chromeos::disks::Disk; -using chromeos::disks::DiskMountManager; - namespace chromeos { namespace settings { namespace { +using ::ash::disks::Disk; +using ::ash::disks::DiskMountManager; + constexpr char kAndroidEnabled[] = "androidEnabled"; // Dummy UUID for testing. The UUID is taken from // ash/components/arc/volume_mounter/arc_volume_mounter_bridge.cc. @@ -204,9 +204,8 @@ if (!IsEligibleForAndroidStorage(mount_info.source_path)) continue; - const chromeos::disks::Disk* disk = - DiskMountManager::GetInstance()->FindDiskBySourcePath( - mount_info.source_path); + const Disk* disk = DiskMountManager::GetInstance()->FindDiskBySourcePath( + mount_info.source_path); // Assigning a dummy UUID for diskless volume for testing. const std::string uuid = disk ? disk->fs_uuid() : kDummyUuid;
diff --git a/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h b/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h index 92d4d66..161bb176 100644 --- a/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h +++ b/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h
@@ -44,7 +44,7 @@ class StorageHandler : public ::settings::SettingsPageUIHandler, public arc::ArcSessionManagerObserver, - public chromeos::disks::DiskMountManager::Observer, + public ash::disks::DiskMountManager::Observer, public calculator::SizeCalculator::Observer { public: StorageHandler(Profile* profile, content::WebUIDataSource* html_source); @@ -62,11 +62,11 @@ // arc::ArcSessionManagerObserver: void OnArcPlayStoreEnabledChanged(bool enabled) override; - // chromeos::disks::DiskMountManager::Observer: - void OnMountEvent(chromeos::disks::DiskMountManager::MountEvent event, - chromeos::MountError error_code, - const chromeos::disks::DiskMountManager::MountPointInfo& - mount_info) override; + // ash::disks::DiskMountManager::Observer: + void OnMountEvent( + ash::disks::DiskMountManager::MountEvent event, + chromeos::MountError error_code, + const ash::disks::DiskMountManager::MountPointInfo& mount_info) override; // chromeos::settings::calculator::SizeCalculator::Observer: void OnSizeCalculated(
diff --git a/chrome/browser/ui/webui/settings/chromeos/device_storage_handler_unittest.cc b/chrome/browser/ui/webui/settings/chromeos/device_storage_handler_unittest.cc index b3f7190..ad9e7a1 100644 --- a/chrome/browser/ui/webui/settings/chromeos/device_storage_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/chromeos/device_storage_handler_unittest.cc
@@ -71,7 +71,7 @@ // The storage handler requires an instance of DiskMountManager, // ArcServiceManager and ArcSessionManager. - chromeos::disks::DiskMountManager::InitializeForTesting( + ash::disks::DiskMountManager::InitializeForTesting( new file_manager::FakeDiskMountManager); arc_service_manager_ = std::make_unique<arc::ArcServiceManager>(); arc_session_manager_ = arc::CreateTestArcSessionManager( @@ -136,7 +136,7 @@ other_users_size_test_api_.reset(); arc_session_manager_.reset(); arc_service_manager_.reset(); - chromeos::disks::DiskMountManager::Shutdown(); + ash::disks::DiskMountManager::Shutdown(); storage::ExternalMountPoints::GetSystemInstance()->RevokeAllFileSystems(); chromeos::SpacedClient::Shutdown(); chromeos::ConciergeClient::Shutdown();
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc index d1497527..39e3b72 100644 --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -1008,6 +1008,9 @@ IDS_PASSWORD_MANAGER_DESTINATION_DROPDOWN_ACCESSIBLE_NAME}, {"usernameAlreadyUsed", IDS_SETTINGS_PASSWORD_USERNAME_ALREADY_USED}, {"missingTLD", IDS_SETTINGS_PASSWORD_MISSING_TLD}, + {"viewExistingPassword", IDS_SETTINGS_PASSWORD_VIEW_EXISTING_PASSWORD}, + {"viewExistingPasswordAriaDescription", + IDS_SETTINGS_PASSWORD_VIEW_EXISTING_PASSWORD_ARIA_DESCRIPTION}, {"copyPassword", IDS_SETTINGS_PASSWORD_COPY}, {"passwordStoredOnDevice", IDS_SETTINGS_PASSWORD_STORED_ON_DEVICE}, {"passwordStoredInAccount", IDS_SETTINGS_PASSWORD_STORED_IN_ACCOUNT},
diff --git a/chrome/browser/ui/webui/signin/signin_reauth_ui.cc b/chrome/browser/ui/webui/signin/signin_reauth_ui.cc index 2b959922..6dcb530 100644 --- a/chrome/browser/ui/webui/signin/signin_reauth_ui.cc +++ b/chrome/browser/ui/webui/signin/signin_reauth_ui.cc
@@ -55,6 +55,37 @@ : profiles::GetPlaceholderAvatarIconUrl(); } +bool WasPasswordSavedLocally(signin_metrics::ReauthAccessPoint access_point) { + switch (access_point) { + case signin_metrics::ReauthAccessPoint::kUnknown: + case signin_metrics::ReauthAccessPoint::kAutofillDropdown: + case signin_metrics::ReauthAccessPoint::kPasswordSaveBubble: + case signin_metrics::ReauthAccessPoint::kPasswordSettings: + case signin_metrics::ReauthAccessPoint::kGeneratePasswordDropdown: + case signin_metrics::ReauthAccessPoint::kGeneratePasswordContextMenu: + case signin_metrics::ReauthAccessPoint::kPasswordMoveBubble: + return false; + case signin_metrics::ReauthAccessPoint::kPasswordSaveLocallyBubble: + return true; + } +} + +int GetReauthDescriptionStringId( + signin_metrics::ReauthAccessPoint access_point) { + if (WasPasswordSavedLocally(access_point)) { + return IDS_ACCOUNT_PASSWORDS_REAUTH_DESC_ALREADY_SAVED_LOCALLY; + } + return IDS_ACCOUNT_PASSWORDS_REAUTH_DESC; +} + +int GetReauthCloseButtonLabelStringId( + signin_metrics::ReauthAccessPoint access_point) { + if (WasPasswordSavedLocally(access_point)) { + return IDS_ACCOUNT_PASSWORDS_REAUTH_CLOSE_BUTTON_LABEL_ALREADY_SAVED_LOCALLY; + } + return IDS_ACCOUNT_PASSWORDS_REAUTH_CLOSE_BUTTON_LABEL; +} + } // namespace SigninReauthUI::SigninReauthUI(content::WebUI* web_ui) @@ -81,14 +112,18 @@ source->AddString("accountImageUrl", GetAccountImageURL(profile)); + signin_metrics::ReauthAccessPoint access_point = + signin::GetReauthAccessPointForReauthConfirmationURL( + web_ui->GetWebContents()->GetVisibleURL()); + AddStringResource(source, "signinReauthTitle", IDS_ACCOUNT_PASSWORDS_REAUTH_TITLE); AddStringResource(source, "signinReauthDesc", - IDS_ACCOUNT_PASSWORDS_REAUTH_DESC); + GetReauthDescriptionStringId(access_point)); AddStringResource(source, "signinReauthConfirmLabel", IDS_ACCOUNT_PASSWORDS_REAUTH_CONFIRM_BUTTON_LABEL); AddStringResource(source, "signinReauthCloseLabel", - IDS_ACCOUNT_PASSWORDS_REAUTH_CLOSE_BUTTON_LABEL); + GetReauthCloseButtonLabelStringId(access_point)); content::WebUIDataSource::Add(profile, source); }
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index 49e94a2..e8a6b66 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-main-1638316670-aa21a8032de4d6ab34fbb02943f83f22371fbce7.profdata +chrome-linux-main-1638338332-c7f05450c7d526e563e3b7d465a31b4cf4acfed8.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index 5198e8e7..e275f63 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-main-1638316670-cf39dda6b34cfd75050c88da1c2943ff6299d114.profdata +chrome-mac-main-1638338332-cc5ae9875d65de661cffd5766d794683c1e93418.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index dbaf4d6e..76b96c2c 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1638295043-755fb6865447a4c8bb4df3f472397a4ac307f3f5.profdata +chrome-win32-main-1638349073-6f77e698d47f5a90603a093c8e7defc610cdb14e.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index cfe3a41..c1fe51d 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1638295043-b4e967fedb50bbb893540e3fccac91f1db5e2385.profdata +chrome-win64-main-1638338332-d848b3e25892242a9c9ff82d6d44778709ab9236.profdata
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc index a0581cd4..514ac005 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc
@@ -313,11 +313,6 @@ #endif }; -// API that allows installed PWAs to add additional shortcuts by means of -// installing sub app components. -const base::Feature kDesktopPWAsSubApps{"DesktopPWAsSubApps", - base::FEATURE_DISABLED_BY_DEFAULT}; - // Makes user navigations via links within web app scopes get captured tab // tabbed app windows. // TODO(crbug.com/897314): Enable this feature.
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h index 5929c09b..8aecefd8 100644 --- a/chrome/common/chrome_features.h +++ b/chrome/common/chrome_features.h
@@ -208,9 +208,6 @@ extern const base::Feature kDesktopPWAsRunOnOsLogin; COMPONENT_EXPORT(CHROME_FEATURES) -extern const base::Feature kDesktopPWAsSubApps; - -COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kDesktopPWAsTabStripLinkCapturing; COMPONENT_EXPORT(CHROME_FEATURES)
diff --git a/chrome/common/extensions/api/file_manager_private.idl b/chrome/common/extensions/api/file_manager_private.idl index 4f66ad03..ba4f034 100644 --- a/chrome/common/extensions/api/file_manager_private.idl +++ b/chrome/common/extensions/api/file_manager_private.idl
@@ -284,6 +284,7 @@ canRename, canAddChildren, canShare, + canPin, isMachineRoot, isExternalMedia, isArbitrarySyncFolder @@ -479,6 +480,9 @@ // True if the entry can be shared by the user. boolean? canShare; + // True if the entry can be pinned by the user. + boolean? canPin; + // True if the entry is a machine root for backup and sync. boolean? isMachineRoot;
diff --git a/chrome/common/extensions/api/input_method_private.json b/chrome/common/extensions/api/input_method_private.json index 132c9113..42e84b2 100644 --- a/chrome/common/extensions/api/input_method_private.json +++ b/chrome/common/extensions/api/input_method_private.json
@@ -939,6 +939,17 @@ } ] }, { + "name": "onTouch", + "type": "function", + "description": "This event is sent when a touch occurs in a text field. Should only happen after onFocus()", + "parameters": [ + { + "$ref": "FocusReason", + "name": "pointerType", + "description": "Pointer type used to touch the text field" + } + ] + }, { "name": "onSettingsChanged", "type": "function", "description": "This event is sent when the settings for any input method changed. It is sent to all extensions that are listening to this event, and enabled by the user.",
diff --git a/chrome/installer/linux/BUILD.gn b/chrome/installer/linux/BUILD.gn index 4d9054e..4ab8f6b6 100644 --- a/chrome/installer/linux/BUILD.gn +++ b/chrome/installer/linux/BUILD.gn
@@ -178,11 +178,62 @@ strip_binary("strip_chrome_binary") { binary_input = "$root_out_dir/chrome" - symbol_output = "$root_out_dir/chrome.debug" - stripped_binary_output = "$root_out_dir/chrome.stripped" deps = [ "//chrome" ] } +strip_binary("strip_chrome_crashpad_handler") { + binary_input = "$root_out_dir/chrome_crashpad_handler" + deps = [ "//components/crash/core/app:chrome_crashpad_handler" ] +} + +strip_binary("strip_chrome_sandbox") { + binary_input = "$root_out_dir/chrome_sandbox" + deps = [ "//sandbox/linux:chrome_sandbox" ] +} + +strip_binary("strip_libEGL_shlib") { + binary_input = "$root_out_dir/libEGL.so" + deps = [ "//third_party/angle:libEGL" ] +} + +strip_binary("strip_libGLESv2_shlib") { + binary_input = "$root_out_dir/libGLESv2.so" + deps = [ "//third_party/angle:libGLESv2" ] +} + +strip_binary("strip_libvulkan_shlib") { + binary_input = "$root_out_dir/libvulkan.so.1" + deps = [ "//third_party/vulkan-deps/vulkan-loader/src:libvulkan" ] +} + +strip_binary("strip_swiftshader_libEGL_shlib") { + binary_input = "$root_out_dir/swiftshader/libEGL.so" + deps = [ "//third_party/swiftshader/src/OpenGL/libEGL:swiftshader_libEGL" ] +} + +strip_binary("strip_swiftshader_libGLESv2_shlib") { + binary_input = "$root_out_dir/swiftshader/libGLESv2.so" + deps = + [ "//third_party/swiftshader/src/OpenGL/libGLESv2:swiftshader_libGLESv2" ] +} + +strip_binary("strip_libvk_swiftshader.shlib") { + binary_input = "$root_out_dir/libvk_swiftshader.so" + deps = [ "//third_party/swiftshader/src/Vulkan:swiftshader_libvulkan" ] +} + +if (enable_nacl) { + strip_binary("strip_nacl_helper") { + binary_input = "$root_out_dir/nacl_helper" + deps = [ "//components/nacl/loader:nacl_helper" ] + } + + strip_binary("strip_nacl_helper_bootstrap") { + binary_input = "$root_out_dir/nacl_helper_bootstrap" + deps = [ "//native_client/src/trusted/service_runtime/linux:bootstrap" ] + } +} + # This target builds all "normal" Linux installers. You must set # is_component_build=false before building this target. group("linux") { @@ -318,6 +369,8 @@ ":deb_packaging_files", ":save_build_info", ":strip_chrome_binary", + ":strip_chrome_crashpad_handler", + ":strip_chrome_sandbox", ":theme_files", "//chrome", "//chrome:packed_resources", @@ -327,6 +380,8 @@ ] if (enable_nacl) { public_deps += [ + ":strip_nacl_helper", + ":strip_nacl_helper_bootstrap", "//components/nacl/loader:nacl_helper", # These are data_deps of nacl_helper, but that is not enough, @@ -340,15 +395,23 @@ } if (use_egl) { public_deps += [ + ":strip_libEGL_shlib", + ":strip_libGLESv2_shlib", "//third_party/angle:libEGL", "//third_party/angle:libGLESv2", ] if (angle_shared_libvulkan && !is_chromeos) { - public_deps += [ "//third_party/vulkan-deps/vulkan-loader/src:libvulkan" ] + public_deps += [ + ":strip_libvulkan_shlib", + "//third_party/vulkan-deps/vulkan-loader/src:libvulkan", + ] } } if (enable_swiftshader) { public_deps += [ + ":strip_libvk_swiftshader.shlib", + ":strip_swiftshader_libEGL_shlib", + ":strip_swiftshader_libGLESv2_shlib", ":swiftshader_libs", "//third_party/swiftshader/src/Vulkan:icd_file", "//third_party/swiftshader/src/Vulkan:swiftshader_libvulkan",
diff --git a/chrome/installer/linux/common/installer.include b/chrome/installer/linux/common/installer.include index ee22774..3009df4 100644 --- a/chrome/installer/linux/common/installer.include +++ b/chrome/installer/linux/common/installer.include
@@ -143,10 +143,7 @@ install -m 755 "${STRIPPEDFILE}" "${STAGEDIR}/${INSTALLDIR}/${PROGNAME}" # crashpad - buildfile="${OUTPUTDIR}/chrome_crashpad_handler" - strippedfile="${buildfile}.stripped" - debugfile="${buildfile}.debug" - "${OUTPUTDIR}/installer/common/eu-strip" -o "${strippedfile}" -f "${debugfile}" "${buildfile}" + strippedfile="${OUTPUTDIR}/chrome_crashpad_handler.stripped" install -m 755 "${strippedfile}" "${STAGEDIR}/${INSTALLDIR}/chrome_crashpad_handler" # resources @@ -182,10 +179,7 @@ # where it did not support hyphens, so this is stuck as is to avoid breaking # anyone who expects the build artifact to have the underscore. # the code looks for, but the build targets can't use hyphens (scons bug?) - buildfile="${OUTPUTDIR}/${PROGNAME}_sandbox" - strippedfile="${buildfile}.stripped" - debugfile="${buildfile}.debug" - "${OUTPUTDIR}/installer/common/eu-strip" -o "${strippedfile}" -f "${debugfile}" "${buildfile}" + strippedfile="${OUTPUTDIR}/${PROGNAME}_sandbox.stripped" install -m 4755 "${strippedfile}" "${STAGEDIR}/${INSTALLDIR}/chrome-sandbox" # l10n paks @@ -220,10 +214,7 @@ # ANGLE if [ -f "${OUTPUTDIR}/libEGL.so" ]; then for file in libEGL.so libGLESv2.so; do - buildfile="${OUTPUTDIR}/${file}" - strippedfile="${buildfile}.stripped" - debugfile="${buildfile}.debug" - "${OUTPUTDIR}/installer/common/eu-strip" -o "${strippedfile}" -f "${debugfile}" "${buildfile}" + strippedfile="${OUTPUTDIR}/${file}.stripped" install -m ${SHLIB_PERMS} "${strippedfile}" "${STAGEDIR}/${INSTALLDIR}/${file}" done fi @@ -231,10 +222,7 @@ # ANGLE's libvulkan library if [ -f "${OUTPUTDIR}/libvulkan.so.1" ]; then file="libvulkan.so.1" - buildfile="${OUTPUTDIR}/${file}" - strippedfile="${buildfile}.stripped" - debugfile="${buildfile}.debug" - "${OUTPUTDIR}/installer/common/eu-strip" -o "${strippedfile}" -f "${debugfile}" "${buildfile}" + strippedfile="${OUTPUTDIR}/${file}.stripped" install -m 755 "${strippedfile}" "${STAGEDIR}/${INSTALLDIR}/${file}" fi @@ -242,10 +230,7 @@ if [ -f "${OUTPUTDIR}/swiftshader/libEGL.so" ]; then install -m 755 -d "${STAGEDIR}/${INSTALLDIR}/swiftshader/" for file in libEGL.so libGLESv2.so; do - buildfile="${OUTPUTDIR}/swiftshader/${file}" - strippedfile="${buildfile}.stripped" - debugfile="${buildfile}.debug" - "${OUTPUTDIR}/installer/common/eu-strip" -o "${strippedfile}" -f "${debugfile}" "${buildfile}" + strippedfile="${OUTPUTDIR}/swiftshader/${file}.stripped" install -m ${SHLIB_PERMS} "${strippedfile}" "${STAGEDIR}/${INSTALLDIR}/swiftshader/${file}" done fi @@ -254,10 +239,7 @@ if [ -f "${OUTPUTDIR}/libvk_swiftshader.so" ]; then install -m 755 -d "${STAGEDIR}/${INSTALLDIR}/" file="libvk_swiftshader.so" - buildfile="${OUTPUTDIR}/${file}" - strippedfile="${buildfile}.stripped" - debugfile="${buildfile}.debug" - "${OUTPUTDIR}/installer/common/eu-strip" -o "${strippedfile}" -f "${debugfile}" "${buildfile}" + strippedfile="${OUTPUTDIR}/${file}.stripped" install -m ${SHLIB_PERMS} "${strippedfile}" "${STAGEDIR}/${INSTALLDIR}/${file}" # Install the ICD json file to point ANGLE to libvk_swiftshader.so install -m 644 "${OUTPUTDIR}/vk_swiftshader_icd.json" "${STAGEDIR}/${INSTALLDIR}/" @@ -277,8 +259,6 @@ buildfile="${OUTPUTDIR}/${file}" if [ -f "${buildfile}" ]; then strippedfile="${buildfile}.stripped" - debugfile="${buildfile}.debug" - "${OUTPUTDIR}/installer/common/eu-strip" -o "${strippedfile}" -f "${debugfile}" "${buildfile}" install -m 755 "${strippedfile}" "${STAGEDIR}/${INSTALLDIR}/${file}" fi done
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 96d4a3d..5884863 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -3440,7 +3440,6 @@ "../browser/extensions/api/networking_private/networking_private_chromeos_apitest.cc", "../browser/extensions/api/settings_private/settings_private_browsertest_chromeos.cc", "../browser/extensions/api/vpn_provider/vpn_provider_apitest.cc", - "../browser/extensions/chromeos_component_extensions_browsertest.cc", "../browser/metrics/chromeos_metrics_provider_browsertest.cc", "../browser/metrics/family_link_user_metrics_provider_browsertest.cc", "../browser/metrics/family_user_metrics_provider_browsertest.cc", @@ -4604,7 +4603,6 @@ "../browser/metrics/power/power_details_provider_unittest.cc", "../browser/metrics/process_memory_metrics_emitter_unittest.cc", "../browser/metrics/tab_footprint_aggregator_unittest.cc", - "../browser/metrics/thread_watcher_unittest.cc", "../browser/navigation_predictor/navigation_predictor_unittest.cc", "../browser/net/chrome_network_delegate_unittest.cc", "../browser/net/chrome_report_sender_unittest.cc", @@ -4942,7 +4940,6 @@ "../browser/download/android/download_manager_service_unittest.cc", "../browser/feed/android/feed_service_factory_unittest.cc", "../browser/feed/android/rss_links_fetcher_unittest.cc", - "../browser/metrics/thread_watcher_android_unittest.cc", "../browser/notifications/notification_channels_provider_android_unittest.cc", "../browser/optimization_guide/android/optimization_guide_tab_url_provider_android_unittest.cc", "../browser/password_manager/android/password_ui_view_android_unittest.cc", @@ -7201,9 +7198,6 @@ "../browser/ash/login/easy_unlock/smartlock_feature_usage_metrics_unittest.cc", "../browser/ash/login/easy_unlock/smartlock_state_handler_unittest.cc", "../browser/chromeos/extensions/extensions_permissions_tracker_unittest.cc", - - # TODO(b/207754758): Move the following two files into the appropriate target - "../browser/chromeos/extensions/telemetry/api/api_guard_delegate_unittest.cc", "../browser/chromeos/extensions/telemetry/chromeos_permission_messages_unittest.cc", "../browser/extensions/api/file_system/consent_provider_unittest.cc", "../browser/extensions/api/image_writer_private/removable_storage_provider_chromeos_unittest.cc", @@ -7221,7 +7215,6 @@ ] deps += [ - "//chrome/browser/chromeos/extensions/telemetry/api", "//chrome/browser/chromeos/extensions/telemetry/api:unit_tests", "//chrome/common/chromeos/extensions", "//chromeos/dbus/image_burner",
diff --git a/chrome/test/base/testing_browser_process.cc b/chrome/test/base/testing_browser_process.cc index 3f1d66194..749228e 100644 --- a/chrome/test/base/testing_browser_process.cc +++ b/chrome/test/base/testing_browser_process.cc
@@ -181,10 +181,6 @@ return test_network_quality_tracker_.get(); } -WatchDogThread* TestingBrowserProcess::watchdog_thread() { - return nullptr; -} - ProfileManager* TestingBrowserProcess::profile_manager() { return profile_manager_.get(); }
diff --git a/chrome/test/base/testing_browser_process.h b/chrome/test/base/testing_browser_process.h index bd83db5f..e2ba4d8c 100644 --- a/chrome/test/base/testing_browser_process.h +++ b/chrome/test/base/testing_browser_process.h
@@ -36,7 +36,6 @@ class NotificationUIManager; class PrefService; class SystemNotificationHelper; -class WatchDogThread; namespace content { class NotificationService; @@ -87,7 +86,6 @@ scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory() override; network::NetworkQualityTracker* network_quality_tracker() override; - WatchDogThread* watchdog_thread() override; ProfileManager* profile_manager() override; PrefService* local_state() override; variations::VariationsService* variations_service() override;
diff --git a/chrome/test/data/webui/chromeos/personalization_app/wallpaper_fullscreen_element_test.js b/chrome/test/data/webui/chromeos/personalization_app/wallpaper_fullscreen_element_test.js index 47af9459..0e5eb5b 100644 --- a/chrome/test/data/webui/chromeos/personalization_app/wallpaper_fullscreen_element_test.js +++ b/chrome/test/data/webui/chromeos/personalization_app/wallpaper_fullscreen_element_test.js
@@ -229,7 +229,7 @@ assertTrue(centerPreviewMode); }); - test('aria selected set for chosen layout option', async () => { + test('aria pressed set for chosen layout option', async () => { wallpaperFullscreenElement = initElement(WallpaperFullscreen.is); const {requestFullscreenPromise} = mockFullscreenApis(); await waitAfterNextRender(wallpaperFullscreenElement); @@ -251,14 +251,14 @@ const fill = wallpaperFullscreenElement.shadowRoot.querySelector( 'cr-button[data-layout="FILL"]'); - assertEquals('false', center.getAttribute('aria-selected')); - assertEquals('true', fill.getAttribute('aria-selected')); + assertEquals('false', center.getAttribute('aria-pressed')); + assertEquals('true', fill.getAttribute('aria-pressed')); wallpaperFullscreenElement.selectedLayout_ = WallpaperLayout.kCenter; await waitAfterNextRender(wallpaperFullscreenElement); - assertEquals('true', center.getAttribute('aria-selected')); - assertEquals('false', fill.getAttribute('aria-selected')); + assertEquals('true', center.getAttribute('aria-pressed')); + assertEquals('false', fill.getAttribute('aria-pressed')); }); test('clicking set as wallpaper confirms wallpaper', async () => {
diff --git a/chrome/test/data/webui/read_later/BUILD.gn b/chrome/test/data/webui/read_later/BUILD.gn index 071c946..3c52d05 100644 --- a/chrome/test/data/webui/read_later/BUILD.gn +++ b/chrome/test/data/webui/read_later/BUILD.gn
@@ -28,14 +28,17 @@ ] in_files = [ "read_later_app_test.ts", - "side_panel/bookmark_folder_test.js", - "side_panel/bookmarks_drag_manager_test.js", - "side_panel/bookmarks_list_test.js", - "side_panel/side_panel_app_test.js", + "side_panel/bookmark_folder_test.ts", + "side_panel/bookmarks_drag_manager_test.ts", + "side_panel/bookmarks_list_test.ts", + "side_panel/side_panel_app_test.ts", "side_panel/test_bookmarks_api_proxy.ts", "test_read_later_api_proxy.ts", ] - definitions = [ "//tools/typescript/definitions/bookmarks.d.ts" ] + definitions = [ + "//tools/typescript/definitions/bookmarks.d.ts", + "//tools/typescript/definitions/bookmark_manager_private.d.ts", + ] deps = [ "//chrome/browser/resources/read_later:build_ts" ] extra_deps = [ "..:generate_definitions" ] }
diff --git a/chrome/test/data/webui/read_later/read_later_app_test.ts b/chrome/test/data/webui/read_later/read_later_app_test.ts index b3f665c..e4b9fb3f 100644 --- a/chrome/test/data/webui/read_later/read_later_app_test.ts +++ b/chrome/test/data/webui/read_later/read_later_app_test.ts
@@ -84,8 +84,7 @@ testProxy.setEntries(getSampleData()); document.body.innerHTML = ''; - readLaterApp = /** @type {!ReadLaterAppElement} */ ( - document.createElement('read-later-app')); + readLaterApp = document.createElement('read-later-app'); document.body.appendChild(readLaterApp); await flushTasks(); }); @@ -267,8 +266,8 @@ }); test('Favicons present in the dom', async () => { - const readLaterItems = /** @type {!NodeList<!Element>} */ - (readLaterApp.shadowRoot!.querySelectorAll('read-later-item')); + const readLaterItems = + readLaterApp.shadowRoot!.querySelectorAll('read-later-item'); readLaterItems.forEach((readLaterItem) => { assertTrue(!!readLaterItem.shadowRoot!.querySelector('.favicon'));
diff --git a/chrome/test/data/webui/read_later/side_panel/bookmark_folder_test.js b/chrome/test/data/webui/read_later/side_panel/bookmark_folder_test.ts similarity index 65% rename from chrome/test/data/webui/read_later/side_panel/bookmark_folder_test.js rename to chrome/test/data/webui/read_later/side_panel/bookmark_folder_test.ts index 9cfbd57d..51c4adb 100644 --- a/chrome/test/data/webui/read_later/side_panel/bookmark_folder_test.js +++ b/chrome/test/data/webui/read_later/side_panel/bookmark_folder_test.ts
@@ -8,24 +8,20 @@ import 'chrome://read-later.top-chrome/side_panel/bookmark_folder.js'; -import {BookmarkFolderElement, FOLDER_OPEN_CHANGED_EVENT} from 'chrome://read-later.top-chrome/side_panel/bookmark_folder.js'; +import {BookmarkFolderElement, FOLDER_OPEN_CHANGED_EVENT, getBookmarkFromElement} from 'chrome://read-later.top-chrome/side_panel/bookmark_folder.js'; import {BookmarksApiProxyImpl} from 'chrome://read-later.top-chrome/side_panel/bookmarks_api_proxy.js'; import {getFaviconForPageURL} from 'chrome://resources/js/icon.js'; -import {assertDeepEquals, assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js'; +import {assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js'; import {eventToPromise, flushTasks, waitAfterNextRender} from 'chrome://webui-test/test_util.js'; import {TestBookmarksApiProxy} from './test_bookmarks_api_proxy.js'; suite('SidePanelBookmarkFolderTest', () => { - /** @type {!BookmarkFolderElement} */ - let bookmarkFolder; + let bookmarkFolder: BookmarkFolderElement; + let bookmarksApi: TestBookmarksApiProxy; - /** @type {!TestBookmarksApiProxy} */ - let bookmarksApi; - - /** @type {!chrome.bookmarks.BookmarkTreeNode} */ - const folder = { + const folder: chrome.bookmarks.BookmarkTreeNode = { id: '0', title: 'Bookmarks bar', children: [ @@ -53,11 +49,9 @@ ], }; - /** @return {!Array<!HTMLElement|!BookmarkFolderElement>} */ - function getChildElements() { - return /** @type {!Array<!HTMLElement|!BookmarkFolderElement>} */ ( - Array.from(bookmarkFolder.shadowRoot.querySelectorAll( - 'bookmark-folder, .bookmark'))); + function getChildElements(): Array<HTMLElement|BookmarkFolderElement> { + return Array.from(bookmarkFolder.shadowRoot!.querySelectorAll( + 'bookmark-folder, .bookmark')); } setup(async () => { @@ -66,8 +60,7 @@ bookmarksApi = new TestBookmarksApiProxy(); BookmarksApiProxyImpl.setInstance(bookmarksApi); - bookmarkFolder = /** @type {!BookmarkFolderElement} */ ( - document.createElement('bookmark-folder')); + bookmarkFolder = document.createElement('bookmark-folder'); bookmarkFolder.folder = folder; bookmarkFolder.openFolders = ['0']; document.body.appendChild(bookmarkFolder); @@ -86,14 +79,16 @@ assertEquals(3, childElements.length); assertTrue(childElements[0] instanceof BookmarkFolderElement); - assertEquals(folder.children[0], childElements[0].folder); + assertEquals( + folder.children![0], + (childElements[0]! as BookmarkFolderElement).folder); assertEquals( - folder.children[1].title, - childElements[1].querySelector('.title').textContent); + folder.children![1]!.title, + childElements[1]!.querySelector('.title')!.textContent); assertEquals( - folder.children[2].title, - childElements[2].querySelector('.title').textContent); + folder.children![2]!.title, + childElements[2]!.querySelector('.title')!.textContent); }); test('UpdatesChildCountVariable', () => { @@ -115,43 +110,44 @@ }); test('ShowsFaviconForBookmarks', () => { - const fooWebsiteElement = getChildElements()[1]; + const fooWebsiteElement = getChildElements()[1]!; assertEquals( - getFaviconForPageURL(folder.children[1].url, false), - fooWebsiteElement.querySelector('.icon').style.getPropertyValue( - 'background-image')); + getFaviconForPageURL(folder.children![1]!.url!, false), + fooWebsiteElement.querySelector<HTMLElement>('.icon')!.style + .getPropertyValue('background-image')); }); test('OpensAndClosesFolder', async () => { - const arrowIcon = bookmarkFolder.shadowRoot.querySelector('#arrowIcon'); + const arrowIcon = + bookmarkFolder.shadowRoot!.querySelector<HTMLElement>('#arrowIcon')!; assertTrue(arrowIcon.hasAttribute('open')); assertEquals(3, getChildElements().length); const eventPromise = eventToPromise(FOLDER_OPEN_CHANGED_EVENT, document.body); - bookmarkFolder.shadowRoot.querySelector('.row').click(); + bookmarkFolder.shadowRoot!.querySelector<HTMLElement>('.row')!.click(); await eventPromise; // Normally, the event listener for FOLDER_OPEN_CHANGED_EVENT will update // the openFolders property. bookmarkFolder.openFolders = []; - await waitAfterNextRender(); + await waitAfterNextRender(bookmarkFolder); assertFalse(arrowIcon.hasAttribute('open')); assertEquals(0, getChildElements().length); }); test('UpdatesOpenStateBasedOnOpenFolders', async () => { bookmarkFolder.openFolders = []; - await waitAfterNextRender(); + await waitAfterNextRender(bookmarkFolder); getChildElements().forEach( child => assertEquals('none', child.style.display)); }); test('OpensBookmark', async () => { - getChildElements()[1].click(); + getChildElements()[1]!.click(); const [url, parentFolderDepth] = await bookmarksApi.whenCalled('openBookmark'); - assertEquals(folder.children[1].url, url); + assertEquals(folder.children![1]!.url, url); assertEquals(0, parentFolderDepth); }); @@ -159,24 +155,24 @@ // No focus yet, should focus folder row. assertTrue(bookmarkFolder.moveFocus(1)); assertEquals( - bookmarkFolder.shadowRoot.querySelector('.row'), - bookmarkFolder.shadowRoot.activeElement); + bookmarkFolder.shadowRoot!.querySelector('.row'), + bookmarkFolder.shadowRoot!.activeElement); // Move focus down one, should focus first child which is a folder. assertTrue(bookmarkFolder.moveFocus(1)); assertEquals( - bookmarkFolder.shadowRoot.querySelector('#children bookmark-folder'), - bookmarkFolder.shadowRoot.activeElement); + bookmarkFolder.shadowRoot!.querySelector('#children bookmark-folder'), + bookmarkFolder.shadowRoot!.activeElement); const bookmarkElements = - bookmarkFolder.shadowRoot.querySelectorAll('#children .row'); + bookmarkFolder.shadowRoot!.querySelectorAll('#children .row'); // Move focus down one, should focus second child, the first bookmark. assertTrue(bookmarkFolder.moveFocus(1)); - assertEquals(bookmarkElements[0], bookmarkFolder.shadowRoot.activeElement); + assertEquals(bookmarkElements[0], bookmarkFolder.shadowRoot!.activeElement); // Move focus down one, should focus second child, the second bookmark. assertTrue(bookmarkFolder.moveFocus(1)); - assertEquals(bookmarkElements[1], bookmarkFolder.shadowRoot.activeElement); + assertEquals(bookmarkElements[1], bookmarkFolder.shadowRoot!.activeElement); // No more room. assertFalse(bookmarkFolder.moveFocus(1)); @@ -185,27 +181,27 @@ test('MovesFocusUp', () => { // No focus yet, should focus last bookmark. const bookmarkElements = - bookmarkFolder.shadowRoot.querySelectorAll('#children .row'); + bookmarkFolder.shadowRoot!.querySelectorAll('#children .row'); assertTrue(bookmarkFolder.moveFocus(-1)); assertEquals( bookmarkElements[bookmarkElements.length - 1], - bookmarkFolder.shadowRoot.activeElement); + bookmarkFolder.shadowRoot!.activeElement); // Move focus up one, should focus the first bookmark. assertTrue(bookmarkFolder.moveFocus(-1)); - assertEquals(bookmarkElements[0], bookmarkFolder.shadowRoot.activeElement); + assertEquals(bookmarkElements[0], bookmarkFolder.shadowRoot!.activeElement); // Move focus up one, should focus the child folder. assertTrue(bookmarkFolder.moveFocus(-1)); assertEquals( - bookmarkFolder.shadowRoot.querySelector('#children bookmark-folder'), - bookmarkFolder.shadowRoot.activeElement); + bookmarkFolder.shadowRoot!.querySelector('#children bookmark-folder'), + bookmarkFolder.shadowRoot!.activeElement); // Move focus up one, should focus the folder itself. assertTrue(bookmarkFolder.moveFocus(-1)); assertEquals( - bookmarkFolder.shadowRoot.querySelector('.row'), - bookmarkFolder.shadowRoot.activeElement); + bookmarkFolder.shadowRoot!.querySelector('.row'), + bookmarkFolder.shadowRoot!.activeElement); // No more room. assertFalse(bookmarkFolder.moveFocus(-1)); @@ -213,7 +209,7 @@ test('DoesNotFocusHiddenChildren', async () => { bookmarkFolder.openFolders = []; - await waitAfterNextRender(); + await waitAfterNextRender(bookmarkFolder); assertTrue(bookmarkFolder.moveFocus(1)); // Moves focus to folder. assertFalse(bookmarkFolder.moveFocus(1)); // No children to move focus to. }); @@ -237,44 +233,48 @@ }], }; bookmarkFolder.openFolders = ['0', '1', '2', '3']; - await waitAfterNextRender(); + await waitAfterNextRender(bookmarkFolder); // Move focus down 1, should focus root folder. assertTrue(bookmarkFolder.moveFocus(1)); assertEquals( - bookmarkFolder.shadowRoot.querySelector('.row'), - bookmarkFolder.shadowRoot.activeElement); + bookmarkFolder.shadowRoot!.querySelector('.row'), + bookmarkFolder.shadowRoot!.activeElement); // Move focus down 1, should focus first nested folder. assertTrue(bookmarkFolder.moveFocus(1)); assertEquals( - bookmarkFolder.folder.children[0], - bookmarkFolder.shadowRoot.activeElement.folder); + bookmarkFolder.folder.children![0], + (bookmarkFolder.shadowRoot!.activeElement! as BookmarkFolderElement) + .folder); // Move focus down 1, should focus grandchild folder. assertTrue(bookmarkFolder.moveFocus(1)); assertEquals( - bookmarkFolder.folder.children[0].children[0], - bookmarkFolder.shadowRoot.activeElement.shadowRoot.activeElement + bookmarkFolder.folder.children![0]!.children![0], + (bookmarkFolder.shadowRoot!.activeElement!.shadowRoot!.activeElement! as + BookmarkFolderElement) .folder); // Move focus down 1, should focus great grandchild folder. assertTrue(bookmarkFolder.moveFocus(1)); assertEquals( - bookmarkFolder.folder.children[0].children[0].children[0], - bookmarkFolder.shadowRoot.activeElement.shadowRoot.activeElement - .shadowRoot.activeElement.folder); + bookmarkFolder.folder.children![0]!.children![0]!.children![0], + (bookmarkFolder.shadowRoot!.activeElement!.shadowRoot!.activeElement! + .shadowRoot!.activeElement! as BookmarkFolderElement) + .folder); // Move focus up 1, should focus grandchild folder. assertTrue(bookmarkFolder.moveFocus(-1)); assertEquals( - bookmarkFolder.folder.children[0].children[0], - bookmarkFolder.shadowRoot.activeElement.shadowRoot.activeElement + bookmarkFolder.folder.children![0]!.children![0], + (bookmarkFolder.shadowRoot!.activeElement!.shadowRoot!.activeElement! as + BookmarkFolderElement) .folder); }); test('SendsClickModifiers', async () => { - const item = getChildElements()[1]; + const item = getChildElements()[1]!; item.dispatchEvent(new MouseEvent('click')); const [, , click] = await bookmarksApi.whenCalled('openBookmark'); assertFalse( @@ -311,33 +311,38 @@ test('GetsFocusableElements', async () => { let focusableElement = bookmarkFolder.getFocusableElement([folder]); - assertEquals('folder', focusableElement.id); + assertTrue(!!focusableElement); + assertEquals('folder', focusableElement!.id); - const childBookmark = folder.children[1]; + const childBookmark = folder.children![1]!; focusableElement = bookmarkFolder.getFocusableElement([childBookmark]); - assertTrue(focusableElement.classList.contains('bookmark')); - assertEquals(childBookmark, focusableElement.dataBookmark); + assertTrue(!!focusableElement); + assertTrue(focusableElement!.classList.contains('bookmark')); + assertEquals(childBookmark, getBookmarkFromElement(focusableElement!)); - const childFolder = folder.children[0]; + const childFolder = folder.children![0]!; focusableElement = bookmarkFolder.getFocusableElement([childFolder]); - assertEquals('folder', focusableElement.id); - assertEquals(childFolder.id, focusableElement.dataBookmark.id); + assertTrue(!!focusableElement); + assertEquals('folder', focusableElement!.id); + assertEquals(childFolder.id, getBookmarkFromElement(focusableElement!).id); // Grandchild bookmark is in a closed folder, so the focusable element // should still be the child folder. - const grandchildBookmark = childFolder.children[0]; + const grandchildBookmark = childFolder.children![0]!; focusableElement = bookmarkFolder.getFocusableElement([childFolder, grandchildBookmark]); - assertEquals('folder', focusableElement.id); - assertEquals(childFolder.id, focusableElement.dataBookmark.id); + assertTrue(!!focusableElement); + assertEquals('folder', focusableElement!.id); + assertEquals(childFolder.id, getBookmarkFromElement(focusableElement!).id); // Once the child folder is opened, the grandchild bookmark element should // be focusable. bookmarkFolder.openFolders = ['0', '1']; - await waitAfterNextRender(); + await waitAfterNextRender(bookmarkFolder); focusableElement = bookmarkFolder.getFocusableElement([childFolder, grandchildBookmark]); - assertTrue(focusableElement.classList.contains('bookmark')); - assertEquals(grandchildBookmark, focusableElement.dataBookmark); + assertTrue(!!focusableElement); + assertTrue(focusableElement!.classList.contains('bookmark')); + assertEquals(grandchildBookmark, getBookmarkFromElement(focusableElement!)); }); });
diff --git a/chrome/test/data/webui/read_later/side_panel/bookmarks_drag_manager_test.js b/chrome/test/data/webui/read_later/side_panel/bookmarks_drag_manager_test.ts similarity index 80% rename from chrome/test/data/webui/read_later/side_panel/bookmarks_drag_manager_test.js rename to chrome/test/data/webui/read_later/side_panel/bookmarks_drag_manager_test.ts index 102e09b1..ab8a893 100644 --- a/chrome/test/data/webui/read_later/side_panel/bookmarks_drag_manager_test.js +++ b/chrome/test/data/webui/read_later/side_panel/bookmarks_drag_manager_test.ts
@@ -4,7 +4,6 @@ import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js'; -import {FOLDER_OPEN_CHANGED_EVENT} from 'chrome://read-later.top-chrome/side_panel/bookmark_folder.js'; import {BookmarksApiProxyImpl} from 'chrome://read-later.top-chrome/side_panel/bookmarks_api_proxy.js'; import {BookmarksDragManager, DROP_POSITION_ATTR, DropPosition, overrideFolderOpenerTimeoutDelay} from 'chrome://read-later.top-chrome/side_panel/bookmarks_drag_manager.js'; import {BookmarksListElement, LOCAL_STORAGE_OPEN_FOLDERS_KEY} from 'chrome://read-later.top-chrome/side_panel/bookmarks_list.js'; @@ -16,14 +15,9 @@ import {TestBookmarksApiProxy} from './test_bookmarks_api_proxy.js'; suite('SidePanelBookmarkDragManagerTest', () => { - /** @type {!BookmarkDragManager} */ - let bookmarkDragManager; + let delegate: BookmarksListElement; - /** @type {!BookmarksListElement} */ - let delegate; - - /** @type {!Array<!chrome.bookmarks.BookmarkTreeNode>} */ - const folders = [{ + const folders: chrome.bookmarks.BookmarkTreeNode[] = [{ id: '1', title: 'Bookmarks bar', parentId: '0', @@ -65,14 +59,14 @@ ], }]; - function getDraggableElements() { - function getDraggableElementsInner(root) { - const draggableElements = []; - const children = - root.shadowRoot.querySelectorAll('bookmark-folder, .bookmark'); + function getDraggableElements(): HTMLElement[] { + function getDraggableElementsInner(root: HTMLElement) { + const draggableElements: HTMLElement[] = []; + const children = root.shadowRoot!.querySelectorAll<HTMLElement>( + 'bookmark-folder, .bookmark'); children.forEach(child => { if (child.tagName === 'BOOKMARK-FOLDER') { - draggableElements.push(child.shadowRoot.querySelector('#folder')); + draggableElements.push(child.shadowRoot!.querySelector('#folder')!); draggableElements.push(...getDraggableElementsInner(child)); } else { draggableElements.push(child); @@ -81,7 +75,7 @@ return draggableElements; } - const rootFolder = delegate.shadowRoot.querySelector('bookmark-folder'); + const rootFolder = delegate.shadowRoot!.querySelector('bookmark-folder')!; return getDraggableElementsInner(rootFolder); } @@ -93,32 +87,33 @@ }); const bookmarksApi = new TestBookmarksApiProxy(); - bookmarksApi.setFolders( - /** @type {!Array<!chrome.bookmarks.BookmarkTreeNode>} */ ( - JSON.parse(JSON.stringify(folders)))); + bookmarksApi.setFolders(JSON.parse(JSON.stringify(folders))); BookmarksApiProxyImpl.setInstance(bookmarksApi); window.localStorage[LOCAL_STORAGE_OPEN_FOLDERS_KEY] = JSON.stringify(['1', '4']); delegate = new BookmarksListElement(); - bookmarkDragManager = new BookmarksDragManager(delegate); + new BookmarksDragManager(delegate); document.body.appendChild(delegate); await flushTasks(); }); test('DragStartCallsAPI', () => { - let calledIds, calledIndex, calledTouch, calledX, calledY; - chrome.bookmarkManagerPrivate.startDrag = (ids, index, touch, x, y) => { - calledIds = ids; - calledIndex = index; - calledTouch = touch; - calledX = x; - calledY = y; - }; + let calledIds, calledIndex, calledX, calledY; + let calledTouch = false; + chrome.bookmarkManagerPrivate.startDrag = + (ids: string[], index: number, touch: boolean, x: number, + y: number) => { + calledIds = ids; + calledIndex = index; + calledTouch = touch; + calledX = x; + calledY = y; + }; - const draggableBookmark = getDraggableElements()[0]; + const draggableBookmark = getDraggableElements()[0]!; draggableBookmark.dispatchEvent(new DragEvent( 'dragstart', {bubbles: true, composed: true, clientX: 100, clientY: 200})); @@ -133,16 +128,13 @@ test('DragOverUpdatesAttributes', () => { chrome.bookmarkManagerPrivate.startDrag = () => {}; const draggableElements = getDraggableElements(); - const draggedBookmark = draggableElements[0]; + const draggedBookmark = draggableElements[0]!; draggedBookmark.dispatchEvent(new DragEvent( 'dragstart', {bubbles: true, composed: true, clientX: 0, clientY: 0})); - /** - * @param {!HTMLElement} dragOverElement - * @param {number} yRatio - * @param {!DropPosition} dropPosition - */ - function assertDropPosition(dragOverElement, yRatio, dropPosition) { + function assertDropPosition( + dragOverElement: HTMLElement, yRatio: number, + dropPosition: DropPosition) { const dragOverRect = dragOverElement.getBoundingClientRect(); dragOverElement.dispatchEvent(new DragEvent('dragover', { bubbles: true, @@ -154,12 +146,12 @@ dropPosition, dragOverElement.getAttribute(DROP_POSITION_ATTR)); } - const dragOverBookmark = draggableElements[1]; + const dragOverBookmark = draggableElements[1]!; assertDropPosition(dragOverBookmark, 0.2, DropPosition.ABOVE); assertDropPosition(dragOverBookmark, 0.5, DropPosition.ABOVE); assertDropPosition(dragOverBookmark, 0.8, DropPosition.BELOW); - const dragOverFolder = draggableElements[2]; + const dragOverFolder = draggableElements[2]!; assertDropPosition(dragOverFolder, 0.2, DropPosition.ABOVE); assertDropPosition(dragOverFolder, 0.5, DropPosition.INTO); delegate.isFolderOpen = () => false; @@ -171,7 +163,7 @@ test('DragOverDescendant', async () => { chrome.bookmarkManagerPrivate.startDrag = () => {}; const draggableElements = getDraggableElements(); - const draggedFolder = draggableElements[2]; + const draggedFolder = draggableElements[2]!; draggedFolder.dispatchEvent(new DragEvent( 'dragstart', {bubbles: true, composed: true, clientX: 0, clientY: 0})); @@ -185,7 +177,7 @@ })); assertEquals(null, draggedFolder.getAttribute(DROP_POSITION_ATTR)); - const dragOverChild = draggableElements[3]; + const dragOverChild = draggableElements[3]!; dragOverRect = dragOverChild.getBoundingClientRect(); dragOverChild.dispatchEvent(new DragEvent('dragover', { bubbles: true, @@ -205,11 +197,11 @@ }; const draggableElements = getDraggableElements(); - const draggedBookmark = draggableElements[0]; + const draggedBookmark = draggableElements[0]!; draggedBookmark.dispatchEvent(new DragEvent( 'dragstart', {bubbles: true, composed: true, clientX: 0, clientY: 0})); - const dropFolder = draggableElements[2]; + const dropFolder = draggableElements[2]!; const dragOverRect = dropFolder.getBoundingClientRect(); dropFolder.dispatchEvent(new DragEvent('dragover', { bubbles: true, @@ -233,11 +225,11 @@ }; const draggableElements = getDraggableElements(); - const draggedBookmark = draggableElements[2]; + const draggedBookmark = draggableElements[2]!; draggedBookmark.dispatchEvent(new DragEvent( 'dragstart', {bubbles: true, composed: true, clientX: 0, clientY: 0})); - const dragAboveBookmark = draggableElements[0]; + const dragAboveBookmark = draggableElements[0]!; const dragAboveRect = dragAboveBookmark.getBoundingClientRect(); dragAboveBookmark.dispatchEvent(new DragEvent('dragover', { bubbles: true, @@ -252,7 +244,7 @@ draggedBookmark.dispatchEvent(new DragEvent( 'dragstart', {bubbles: true, composed: true, clientX: 0, clientY: 0})); - const dragBelowBookmark = draggableElements[1]; + const dragBelowBookmark = draggableElements[1]!; const dragBelowRect = dragBelowBookmark.getBoundingClientRect(); dragBelowBookmark.dispatchEvent(new DragEvent('dragover', { bubbles: true, @@ -270,12 +262,12 @@ overrideFolderOpenerTimeoutDelay(0); chrome.bookmarkManagerPrivate.startDrag = () => {}; const draggableElements = getDraggableElements(); - const draggedBookmark = draggableElements[0]; + const draggedBookmark = draggableElements[0]!; draggedBookmark.dispatchEvent(new DragEvent( 'dragstart', {bubbles: true, composed: true, clientX: 0, clientY: 0})); - const folderNode = folders[0].children[3]; - const dragOverFolder = draggableElements[4]; + const folderNode = folders[0]!.children![3]!; + const dragOverFolder = draggableElements[4]!; const dragOverRect = dragOverFolder.getBoundingClientRect(); dragOverFolder.dispatchEvent(new DragEvent('dragover', { bubbles: true, @@ -287,7 +279,7 @@ // Drag over a new bookmark before the timeout runs out to ensure the // timeout is canceled. - const newDragOverBookmark = draggableElements[3]; + const newDragOverBookmark = draggableElements[3]!; const newDragOverBookmarkRect = newDragOverBookmark.getBoundingClientRect(); newDragOverBookmark.dispatchEvent(new DragEvent('dragover', { bubbles: true,
diff --git a/chrome/test/data/webui/read_later/side_panel/bookmarks_list_test.js b/chrome/test/data/webui/read_later/side_panel/bookmarks_list_test.ts similarity index 77% rename from chrome/test/data/webui/read_later/side_panel/bookmarks_list_test.js rename to chrome/test/data/webui/read_later/side_panel/bookmarks_list_test.ts index cd6fe4fa..21ded94 100644 --- a/chrome/test/data/webui/read_later/side_panel/bookmarks_list_test.js +++ b/chrome/test/data/webui/read_later/side_panel/bookmarks_list_test.ts
@@ -19,14 +19,10 @@ import {TestBookmarksApiProxy} from './test_bookmarks_api_proxy.js'; suite('SidePanelBookmarksListTest', () => { - /** @type {!BookmarksListElement} */ - let bookmarksList; + let bookmarksList: BookmarksListElement; + let bookmarksApi: TestBookmarksApiProxy; - /** @type {!TestBookmarksApiProxy} */ - let bookmarksApi; - - /** @type {!Array<!chrome.bookmarks.BookmarkTreeNode>} */ - const folders = [ + const folders: chrome.bookmarks.BookmarkTreeNode[] = [ { id: '0', parentId: 'root', @@ -66,22 +62,12 @@ }, ]; - /** - * @param {!HTMLElement} root - * @return {!Array<!BookmarkFolderElement>} - */ - function getFolderElements(root) { - return /** @type {!Array<!BookmarkFolderElement>} */ ( - Array.from(root.shadowRoot.querySelectorAll('bookmark-folder'))); + function getFolderElements(root: HTMLElement): BookmarkFolderElement[] { + return Array.from(root.shadowRoot!.querySelectorAll('bookmark-folder')); } - /** - * @param {!HTMLElement} root - * @return {!Array<!HTMLElement>} - */ - function getBookmarkElements(root) { - return /** @type {!Array<!HTMLElement>} */ ( - Array.from(root.shadowRoot.querySelectorAll('.bookmark'))); + function getBookmarkElements(root: HTMLElement): HTMLElement[] { + return Array.from(root.shadowRoot!.querySelectorAll('.bookmark')); } setup(async () => { @@ -89,13 +75,10 @@ document.body.innerHTML = ''; bookmarksApi = new TestBookmarksApiProxy(); - bookmarksApi.setFolders( - /** @type {!Array<!chrome.bookmarks.BookmarkTreeNode>} */ ( - JSON.parse(JSON.stringify(folders)))); + bookmarksApi.setFolders(JSON.parse(JSON.stringify(folders))); BookmarksApiProxyImpl.setInstance(bookmarksApi); - bookmarksList = /** @type {!BookmarksListElement} */ ( - document.createElement('bookmarks-list')); + bookmarksList = document.createElement('bookmarks-list'); document.body.appendChild(bookmarksList); await flushTasks(); @@ -110,28 +93,29 @@ const rootFolderIndex = 0; const bookmarkIndex = 0; - const changedBookmark = folders[rootFolderIndex].children[bookmarkIndex]; + const changedBookmark = folders[rootFolderIndex]!.children![bookmarkIndex]!; bookmarksApi.callbackRouter.onChanged.callListeners(changedBookmark.id, { title: 'New title', url: 'http://new/url', }); - const folderElement = getFolderElements(bookmarksList)[rootFolderIndex]; - const bookmarkElement = getBookmarkElements(folderElement)[bookmarkIndex]; + const folderElement = getFolderElements(bookmarksList)[rootFolderIndex] as + BookmarkFolderElement; + const bookmarkElement = getBookmarkElements(folderElement)[bookmarkIndex]!; assertEquals('New title', bookmarkElement.textContent); }); test('UpdatesReorderedChildren', () => { // Reverse the children of Bookmarks bar. - const children = folders[0].children; + const children = folders[0]!.children!; const reverseOrder = children.map(child => child.id).reverse(); bookmarksApi.callbackRouter.onChildrenReordered.callListeners( - folders[0].id, {childIds: reverseOrder}); + folders[0]!.id, {childIds: reverseOrder}); flush(); - const rootFolderElement = getFolderElements(bookmarksList)[0]; - const childFolder = getFolderElements(rootFolderElement)[0]; - const childBookmark = getBookmarkElements(rootFolderElement)[0]; + const rootFolderElement = getFolderElements(bookmarksList)[0]!; + const childFolder = getFolderElements(rootFolderElement)[0]!; + const childBookmark = getBookmarkElements(rootFolderElement)[0]!; assertTrue( !!(childFolder.compareDocumentPosition(childBookmark) & Node.DOCUMENT_POSITION_FOLLOWING)); @@ -147,13 +131,14 @@ }); flush(); - const rootFolderElement = getFolderElements(bookmarksList)[0]; - const childFolder = getFolderElements(rootFolderElement)[0]; - childFolder.shadowRoot.querySelector('.row').click(); // Open folder. + const rootFolderElement = getFolderElements(bookmarksList)[0]!; + const childFolder = getFolderElements(rootFolderElement)[0]!; + childFolder.shadowRoot!.querySelector<HTMLElement>( + '.row')!.click(); // Open folder. await flushTasks(); const childFolderBookmarks = getBookmarkElements(childFolder); assertEquals(2, childFolderBookmarks.length); - assertEquals('New bookmark', childFolderBookmarks[0].textContent); + assertEquals('New bookmark', childFolderBookmarks[0]!.textContent); }); test('AddsCreatedBookmarkForNewFolder', () => { @@ -176,26 +161,26 @@ }); flush(); - const rootFolderElement = getFolderElements(bookmarksList)[0]; - const newFolder = getFolderElements(rootFolderElement)[0]; - assertEquals(1, newFolder.folder.children.length); + const rootFolderElement = getFolderElements(bookmarksList)[0]!; + const newFolder = getFolderElements(rootFolderElement)[0]!; + assertEquals(1, newFolder.folder.children!.length); }); test('MovesBookmarks', () => { - const movedBookmark = folders[0].children[1].children[0]; + const movedBookmark = folders[0]!.children![1]!.children![0]!; bookmarksApi.callbackRouter.onMoved.callListeners(movedBookmark.id, { index: 0, - parentId: folders[0].id, // Moving to bookmarks bar. - oldParentId: folders[0].children[1].id, // Moving from child folder. + parentId: folders[0]!.id, // Moving to bookmarks bar. + oldParentId: folders[0]!.children![1]!.id, // Moving from child folder. oldIndex: 0, }); flush(); - const bookmarksBarFolder = getFolderElements(bookmarksList)[0]; - const movedBookmarkElement = getBookmarkElements(bookmarksBarFolder)[0]; + const bookmarksBarFolder = getFolderElements(bookmarksList)[0]!; + const movedBookmarkElement = getBookmarkElements(bookmarksBarFolder)[0]!; assertEquals('Nested bookmark', movedBookmarkElement.textContent); - const childFolder = getFolderElements(bookmarksBarFolder)[0]; + const childFolder = getFolderElements(bookmarksBarFolder)[0]!; const childFolderBookmarks = getBookmarkElements(childFolder); assertEquals(0, childFolderBookmarks.length); }); @@ -210,23 +195,23 @@ }); flush(); - const movedBookmark = folders[0].children[1].children[0]; + const movedBookmark = folders[0]!.children![1]!.children![0]!; bookmarksApi.callbackRouter.onMoved.callListeners(movedBookmark.id, { index: 0, parentId: '1000', - oldParentId: folders[0].children[1].id, + oldParentId: folders[0]!.children![1]!.id, oldIndex: 0, }); flush(); - const bookmarksBarFolder = getFolderElements(bookmarksList)[0]; - const newFolder = getFolderElements(bookmarksBarFolder)[0]; - assertEquals(1, newFolder.folder.children.length); + const bookmarksBarFolder = getFolderElements(bookmarksList)[0]!; + const newFolder = getFolderElements(bookmarksBarFolder)[0]!; + assertEquals(1, newFolder.folder.children!.length); }); test('DefaultsToFirstFolderBeingOpen', () => { assertEquals( - JSON.stringify([folders[0].id]), + JSON.stringify([folders[0]!.id]), window.localStorage[LOCAL_STORAGE_OPEN_FOLDERS_KEY]); }); @@ -235,7 +220,7 @@ bubbles: true, composed: true, detail: { - id: folders[0].id, + id: folders[0]!.id, open: false, } })); @@ -259,19 +244,17 @@ test('MovesFocusBetweenFolders', () => { const folderElements = getFolderElements(bookmarksList); - /** @param {string} key */ - function dispatchArrowKey(key) { + function dispatchArrowKey(key: string) { bookmarksList.dispatchEvent(new KeyboardEvent('keydown', {key})); } - /** @param {number} index */ - function assertActiveElement(index) { + function assertActiveElement(index: number) { assertEquals( - folderElements[index], bookmarksList.shadowRoot.activeElement); + folderElements[index], bookmarksList.shadowRoot!.activeElement); } // Move focus to the first folder. - folderElements[0].moveFocus(1); + folderElements[0]!.moveFocus(1); assertActiveElement(0); // One ArrowDown key should still keep focus in the first folder since the @@ -302,8 +285,8 @@ }); test('CutsCopyPastesBookmark', async () => { - const folderElement = getFolderElements(bookmarksList)[0]; - const bookmarkElement = getBookmarkElements(folderElement)[0]; + const folderElement = getFolderElements(bookmarksList)[0]!; + const bookmarkElement = getBookmarkElements(folderElement)[0]!; bookmarkElement.dispatchEvent(new KeyboardEvent( 'keydown', {key: 'x', ctrlKey: true, bubbles: true, composed: true}));
diff --git a/chrome/test/data/webui/read_later/side_panel/side_panel_app_test.js b/chrome/test/data/webui/read_later/side_panel/side_panel_app_test.ts similarity index 71% rename from chrome/test/data/webui/read_later/side_panel/side_panel_app_test.js rename to chrome/test/data/webui/read_later/side_panel/side_panel_app_test.ts index c82fa62..41ea81c 100644 --- a/chrome/test/data/webui/read_later/side_panel/side_panel_app_test.js +++ b/chrome/test/data/webui/read_later/side_panel/side_panel_app_test.ts
@@ -5,26 +5,23 @@ // ReadLaterUI is a Mojo WebUI controller and therefore needs mojo defined to // finish running its tests. import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js'; - import 'chrome://read-later.top-chrome/side_panel/app.js'; import {LOCAL_STORAGE_TAB_ID_KEY, SidePanelAppElement} from 'chrome://read-later.top-chrome/side_panel/app.js'; +import {assertEquals} from 'chrome://webui-test/chai_assert.js'; import {flushTasks} from 'chrome://webui-test/test_util.js'; -import {assertEquals} from 'chrome:/webui-test/chai_assert.js'; suite('SidePanelAppElementTest', () => { - /** @type {!SidePanelAppElement} */ - let sidePanelApp; + let sidePanelApp: SidePanelAppElement; setup(() => { document.body.innerHTML = ''; - sidePanelApp = /** @type {!SidePanelAppElement} */ ( - document.createElement('side-panel-app')); + sidePanelApp = document.createElement('side-panel-app'); document.body.appendChild(sidePanelApp); }); test('RemembersLastActiveTab', () => { - const tabs = sidePanelApp.shadowRoot.querySelector('cr-tabs'); + const tabs = sidePanelApp.shadowRoot!.querySelector('cr-tabs')!; // Remove the app, change localStorage to select the Bookmarks tab, and add // the app back to the DOM to see if the app changes tabs on @@ -41,17 +38,17 @@ }); test('LazilyLoadsTabContents', async () => { - const tabs = sidePanelApp.shadowRoot.querySelector('cr-tabs'); + const tabs = sidePanelApp.shadowRoot!.querySelector('cr-tabs')!; tabs.selected = 0; await flushTasks(); assertEquals( - 1, sidePanelApp.shadowRoot.querySelectorAll('read-later-app').length); + 1, sidePanelApp.shadowRoot!.querySelectorAll('read-later-app').length); assertEquals( - 0, sidePanelApp.shadowRoot.querySelectorAll('bookmarks-list').length); + 0, sidePanelApp.shadowRoot!.querySelectorAll('bookmarks-list').length); tabs.selected = 1; await flushTasks(); assertEquals( - 1, sidePanelApp.shadowRoot.querySelectorAll('bookmarks-list').length); + 1, sidePanelApp.shadowRoot!.querySelectorAll('bookmarks-list').length); }); });
diff --git a/chrome/test/data/webui/read_later/side_panel/test_bookmarks_api_proxy.ts b/chrome/test/data/webui/read_later/side_panel/test_bookmarks_api_proxy.ts index c384fc7..7fbc612 100644 --- a/chrome/test/data/webui/read_later/side_panel/test_bookmarks_api_proxy.ts +++ b/chrome/test/data/webui/read_later/side_panel/test_bookmarks_api_proxy.ts
@@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import {ChromeEvent} from '/tools/typescript/definitions/chrome_event.js'; import {BookmarksApiProxy} from 'chrome://read-later.top-chrome/side_panel/bookmarks_api_proxy.js'; import {ClickModifiers} from 'chrome://resources/mojo/ui/base/mojom/window_open_disposition.mojom-webui.js'; import {FakeChromeEvent} from 'chrome://webui-test/fake_chrome_event.js'; @@ -11,7 +10,13 @@ export class TestBookmarksApiProxy extends TestBrowserProxy implements BookmarksApiProxy { private folders_: chrome.bookmarks.BookmarkTreeNode[] = []; - callbackRouter: {[key: string]: ChromeEvent<Function>}; + callbackRouter: { + onChanged: FakeChromeEvent, + onChildrenReordered: FakeChromeEvent, + onCreated: FakeChromeEvent, + onMoved: FakeChromeEvent, + onRemoved: FakeChromeEvent, + }; constructor() { super([
diff --git a/chrome/test/data/webui/read_later/tsconfig_base.json b/chrome/test/data/webui/read_later/tsconfig_base.json index eeddfb3..371e43b 100644 --- a/chrome/test/data/webui/read_later/tsconfig_base.json +++ b/chrome/test/data/webui/read_later/tsconfig_base.json
@@ -1,7 +1,6 @@ { "extends": "../../../../../tools/typescript/tsconfig_base.json", "compilerOptions": { - "allowJs": true, "typeRoots": [ "./../../../../../third_party/node/node_modules/@types" ]
diff --git a/chrome/test/data/webui/settings/BUILD.gn b/chrome/test/data/webui/settings/BUILD.gn index 27fe6abe..e7e4cd9d 100644 --- a/chrome/test/data/webui/settings/BUILD.gn +++ b/chrome/test/data/webui/settings/BUILD.gn
@@ -36,7 +36,7 @@ "advanced_page_test.js", "all_sites_tests.ts", "appearance_fonts_page_test.ts", - "autofill_page_test.js", + "autofill_page_test.ts", "autofill_section_test.js", "avatar_icon_test.ts", "basic_page_test.js", @@ -70,7 +70,7 @@ "passwords_export_test.js", "passwords_section_test.js", "payments_section_interactive_test.js", - "payments_section_test.js", + "payments_section_test.ts", "people_page_sync_controls_test.js", "people_page_sync_page_interactive_test.js", "people_page_sync_page_test.js",
diff --git a/chrome/test/data/webui/settings/autofill_page_test.js b/chrome/test/data/webui/settings/autofill_page_test.ts similarity index 67% rename from chrome/test/data/webui/settings/autofill_page_test.js rename to chrome/test/data/webui/settings/autofill_page_test.ts index 582019b..e30af1c7 100644 --- a/chrome/test/data/webui/settings/autofill_page_test.js +++ b/chrome/test/data/webui/settings/autofill_page_test.ts
@@ -3,9 +3,10 @@ // found in the LICENSE file. // clang-format off -import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; -import {AutofillManagerImpl, PaymentsManagerImpl} from 'chrome://settings/lazy_load.js'; -import {CrSettingsPrefs, MultiStoreExceptionEntry, MultiStorePasswordUiEntry, OpenWindowProxyImpl, PasswordManagerImpl, Router, routes, SettingsPluralStringProxyImpl} from 'chrome://settings/settings.js'; +import {DomIf, flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; +import {AutofillManagerImpl, PasswordsSectionElement, PaymentsManagerImpl, SettingsAutofillSectionElement, SettingsPaymentsSectionElement} from 'chrome://settings/lazy_load.js'; +import {CrSettingsPrefs, MultiStoreExceptionEntry, MultiStorePasswordUiEntry, OpenWindowProxyImpl, PasswordManagerImpl, SettingsAutofillPageElement, SettingsPluralStringProxyImpl, SettingsPrefsElement} from 'chrome://settings/settings.js'; +import {assertDeepEquals, assertEquals, assertNotEquals} from 'chrome://webui-test/chai_assert.js'; import {TestPluralStringProxy} from 'chrome://webui-test/test_plural_string_proxy.js'; import {FakeSettingsPrivate} from './fake_settings_private.js'; @@ -19,64 +20,64 @@ suite('PasswordsAndForms', function() { /** * Creates a new passwords and forms element. - * @return {!Object} */ - function createAutofillElement(prefsElement) { + function createAutofillElement(prefsElement: SettingsPrefsElement): + SettingsAutofillPageElement { const element = document.createElement('settings-autofill-page'); element.prefs = prefsElement.prefs; document.body.appendChild(element); - element.shadowRoot.querySelector('dom-if[route-path="/passwords"]').if = - true; - element.shadowRoot.querySelector('dom-if[route-path="/payments"]').if = - true; - element.shadowRoot.querySelector('dom-if[route-path="/addresses"]').if = - true; + element.shadowRoot!.querySelector<DomIf>( + 'dom-if[route-path="/passwords"]')!.if = true; + element.shadowRoot!.querySelector<DomIf>( + 'dom-if[route-path="/payments"]')!.if = true; + element.shadowRoot!.querySelector<DomIf>( + 'dom-if[route-path="/addresses"]')!.if = true; flush(); return element; } /** - * @pram {boolean} autofill Whether autofill is enabled or not. - * @param {boolean} passwords Whether passwords are enabled or not. - * @return {!Promise<!Element>} The |prefs| element. + * @param autofill Whether autofill is enabled or not. + * @param passwords Whether passwords are enabled or not. */ - function createPrefs(autofill, passwords) { + function createPrefs( + autofill: boolean, passwords: boolean): Promise<SettingsPrefsElement> { return new Promise(function(resolve) { CrSettingsPrefs.deferInitialization = true; const prefs = document.createElement('settings-prefs'); prefs.initialize(new FakeSettingsPrivate([ - { - key: 'autofill.enabled', - type: chrome.settingsPrivate.PrefType.BOOLEAN, - value: autofill, - }, - { - key: 'autofill.profile_enabled', - type: chrome.settingsPrivate.PrefType.BOOLEAN, - value: true, - }, - { - key: 'autofill.credit_card_enabled', - type: chrome.settingsPrivate.PrefType.BOOLEAN, - value: true, - }, - { - key: 'credentials_enable_service', - type: chrome.settingsPrivate.PrefType.BOOLEAN, - value: passwords, - }, - { - key: 'credentials_enable_autosignin', - type: chrome.settingsPrivate.PrefType.BOOLEAN, - value: true, - }, - { - key: 'payments.can_make_payment_enabled', - type: chrome.settingsPrivate.PrefType.BOOLEAN, - value: true, - } - ])); + { + key: 'autofill.enabled', + type: chrome.settingsPrivate.PrefType.BOOLEAN, + value: autofill, + }, + { + key: 'autofill.profile_enabled', + type: chrome.settingsPrivate.PrefType.BOOLEAN, + value: true, + }, + { + key: 'autofill.credit_card_enabled', + type: chrome.settingsPrivate.PrefType.BOOLEAN, + value: true, + }, + { + key: 'credentials_enable_service', + type: chrome.settingsPrivate.PrefType.BOOLEAN, + value: passwords, + }, + { + key: 'credentials_enable_autosignin', + type: chrome.settingsPrivate.PrefType.BOOLEAN, + value: true, + }, + { + key: 'payments.can_make_payment_enabled', + type: chrome.settingsPrivate.PrefType.BOOLEAN, + value: true, + } + ]) as unknown as typeof chrome.settingsPrivate); CrSettingsPrefs.initialized.then(function() { resolve(prefs); @@ -86,9 +87,9 @@ /** * Cleans up prefs so tests can continue to run. - * @param {!Element} prefs The prefs element. + * @param prefs The prefs element. */ - function destroyPrefs(prefs) { + function destroyPrefs(prefs: SettingsPrefsElement) { CrSettingsPrefs.resetForTesting(); CrSettingsPrefs.deferInitialization = false; prefs.resetForTesting(); @@ -97,9 +98,8 @@ /** * Creates PasswordManagerExpectations with the values expected after first * creating the element. - * @return {!PasswordManagerExpectations} */ - function basePasswordExpectations() { + function basePasswordExpectations(): PasswordManagerExpectations { const expected = new PasswordManagerExpectations(); expected.requested.passwords = 1; expected.requested.exceptions = 1; @@ -113,9 +113,8 @@ /** * Creates AutofillManagerExpectations with the values expected after first * creating the element. - * @return {!AutofillManagerExpectations} */ - function baseAutofillExpectations() { + function baseAutofillExpectations(): AutofillManagerExpectations { const expected = new AutofillManagerExpectations(); expected.requestedAddresses = 1; expected.listeningAddresses = 1; @@ -125,22 +124,21 @@ /** * Creates PaymentsManagerExpectations with the values expected after first * creating the element. - * @return {!PaymentsManagerExpectations} */ - function basePaymentsExpectations() { + function basePaymentsExpectations(): PaymentsManagerExpectations { const expected = new PaymentsManagerExpectations(); expected.requestedCreditCards = 1; expected.listeningCreditCards = 1; return expected; } - let passwordManager; - let autofillManager; - let paymentsManager; + let passwordManager: TestPasswordManagerProxy; + let autofillManager: TestAutofillManager; + let paymentsManager: TestPaymentsManager; setup(async function() { - PolymerTest.clearBody(); + document.body.innerHTML = ''; // Override the PasswordManagerImpl for testing. passwordManager = new TestPasswordManagerProxy(); @@ -195,12 +193,14 @@ createPasswordEntry({url: 'two.com', username: 'user1', id: 1}) ]; - passwordManager.lastCallback.addSavedPasswordListChangedListener(list); + passwordManager.lastCallback.addSavedPasswordListChangedListener!(list); flush(); assertDeepEquals( list.map(entry => new MultiStorePasswordUiEntry(entry)), - element.shadowRoot.querySelector('#passwordSection').savedPasswords); + element.shadowRoot! + .querySelector<PasswordsSectionElement>( + '#passwordSection')!.savedPasswords); // The callback is coming from the manager, so the element shouldn't // have additional calls to the manager after the base expectations. @@ -220,13 +220,14 @@ createExceptionEntry({url: 'one.com', id: 0}), createExceptionEntry({url: 'two.com', id: 1}) ]; - passwordManager.lastCallback.addExceptionListChangedListener(list); + passwordManager.lastCallback.addExceptionListChangedListener!(list); flush(); assertDeepEquals( list.map(entry => new MultiStoreExceptionEntry(entry)), - element.shadowRoot.querySelector('#passwordSection') - .passwordExceptions); + element.shadowRoot! + .querySelector<PasswordsSectionElement>( + '#passwordSection')!.passwordExceptions); // The callback is coming from the manager, so the element shouldn't // have additional calls to the manager after the base expectations. @@ -244,13 +245,15 @@ const addressList = [createAddressEntry(), createAddressEntry()]; const cardList = [createCreditCardEntry(), createCreditCardEntry()]; - autofillManager.lastCallback.setPersonalDataManagerListener( - addressList, cardList); + autofillManager.lastCallback.setPersonalDataManagerListener! + (addressList, cardList); flush(); assertEquals( addressList, - element.shadowRoot.querySelector('#autofillSection').addresses); + element.shadowRoot! + .querySelector<SettingsAutofillSectionElement>( + '#autofillSection')!.addresses); // The callback is coming from the manager, so the element shouldn't // have additional calls to the manager after the base expectations. @@ -268,13 +271,15 @@ const addressList = [createAddressEntry(), createAddressEntry()]; const cardList = [createCreditCardEntry(), createCreditCardEntry()]; - paymentsManager.lastCallback.setPersonalDataManagerListener( - addressList, cardList); + paymentsManager.lastCallback.setPersonalDataManagerListener! + (addressList, cardList); flush(); assertEquals( cardList, - element.shadowRoot.querySelector('#paymentsSection').creditCards); + element.shadowRoot! + .querySelector<SettingsPaymentsSectionElement>( + '#paymentsSection')!.creditCards); // The callback is coming from the manager, so the element shouldn't // have additional calls to the manager after the base expectations. @@ -295,19 +300,17 @@ password_manager_leak_detection: {}, }, }; - PolymerTest.clearBody(); + document.body.innerHTML = ''; document.body.appendChild(autofillPage); flush(); return autofillPage; } suite('PasswordsUITest', function() { - /** @type {SettingsAutofillPageElement} */ - let autofillPage = null; - /** @type {OpenWindowProxy} */ - let openWindowProxy = null; - let passwordManager; - let pluralString; + let autofillPage: SettingsAutofillPageElement; + let openWindowProxy: TestOpenWindowProxy; + let passwordManager: TestPasswordManagerProxy; + let pluralString: TestPluralStringProxy; setup(function() { openWindowProxy = new TestOpenWindowProxy(); @@ -329,12 +332,15 @@ // Check if sublabel is empty assertEquals( '', - autofillPage.shadowRoot.querySelector('#passwordManagerSubLabel') - .innerText.trim()); + autofillPage.shadowRoot! + .querySelector<HTMLElement>( + '#passwordManagerSubLabel')!.innerText.trim()); // Simulate one compromised password const leakedPasswords = [ - makeCompromisedCredential('google.com', 'jdoerrie', 'LEAKED'), + makeCompromisedCredential( + 'google.com', 'jdoerrie', + chrome.passwordsPrivate.CompromiseType.LEAKED), ]; passwordManager.data.leakedCredentials = leakedPasswords; @@ -347,7 +353,8 @@ // With compromised credentials sublabel should have text assertNotEquals( '', - autofillPage.shadowRoot.querySelector('#passwordManagerSubLabel') - .innerText.trim()); + autofillPage.shadowRoot! + .querySelector<HTMLElement>( + '#passwordManagerSubLabel')!.innerText.trim()); }); });
diff --git a/chrome/test/data/webui/settings/password_edit_dialog_test.js b/chrome/test/data/webui/settings/password_edit_dialog_test.js index f105c79..b6d7810 100644 --- a/chrome/test/data/webui/settings/password_edit_dialog_test.js +++ b/chrome/test/data/webui/settings/password_edit_dialog_test.js
@@ -7,9 +7,10 @@ // clang-format off import 'chrome://settings/lazy_load.js'; +import {isChromeOS, isLacros} from 'chrome://resources/js/cr.m.js'; import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {PasswordManagerImpl} from 'chrome://settings/settings.js'; -import {eventToPromise} from 'chrome://webui-test/test_util.js'; +import {eventToPromise, flushTasks} from 'chrome://webui-test/test_util.js'; import {createMultiStorePasswordEntry, PasswordSectionElementFactory} from './passwords_and_autofill_fake_data.js'; import {TestPasswordManagerProxy} from './test_password_manager_proxy.js'; @@ -549,4 +550,62 @@ assertFalse(addDialog.$.websiteInput.invalid); assertFalse(addDialog.$.actionButton.disabled); }); + + test( + 'requestsPlaintextPasswordAndSwitchesToEditModeOnViewPasswordClick', + async function() { + const existingEntry = createMultiStorePasswordEntry( + {url: 'website.com', username: 'username', accountId: 0}); + const addDialog = + elementFactory.createPasswordEditDialog(null, [existingEntry]); + assertFalse(isElementVisible(addDialog.$.viewExistingPasswordLink)); + + await updateWebsiteInput( + addDialog, passwordManager, existingEntry.urls.shown); + addDialog.$.usernameInput.value = existingEntry.username; + assertTrue(isElementVisible(addDialog.$.viewExistingPasswordLink)); + + existingEntry.password = 'plaintext password'; + passwordManager.setPlaintextPassword(existingEntry.password); + addDialog.$.viewExistingPasswordLink.click(); + const {id, reason} = + await passwordManager.whenCalled('requestPlaintextPassword'); + assertEquals(existingEntry.getAnyId(), id); + assertEquals(chrome.passwordsPrivate.PlaintextReason.EDIT, reason); + await flushTasks(); + + assertEditDialogParts(addDialog); + assertEquals(existingEntry.urls.link, addDialog.$.websiteInput.value); + assertEquals(existingEntry.username, addDialog.$.usernameInput.value); + assertEquals(existingEntry.password, addDialog.$.passwordInput.value); + }); + + // On ChromeOS/Lacros the behavior is different (on failure we request token + // and retry). + if (!isChromeOS && !isLacros) { + test( + 'notSwitchToEditModeOnViewPasswordClickWhenRequestPlaintextPasswordFailed', + async function() { + const existingEntry = createMultiStorePasswordEntry( + {url: 'website.com', username: 'username', accountId: 0}); + const addDialog = + elementFactory.createPasswordEditDialog(null, [existingEntry]); + assertFalse(isElementVisible(addDialog.$.viewExistingPasswordLink)); + + await updateWebsiteInput( + addDialog, passwordManager, existingEntry.urls.shown); + addDialog.$.usernameInput.value = existingEntry.username; + assertTrue(isElementVisible(addDialog.$.viewExistingPasswordLink)); + + // By default requestPlaintextPassword fails if value not set. + addDialog.$.viewExistingPasswordLink.click(); + const {id, reason} = + await passwordManager.whenCalled('requestPlaintextPassword'); + assertEquals(existingEntry.getAnyId(), id); + assertEquals(chrome.passwordsPrivate.PlaintextReason.EDIT, reason); + await flushTasks(); + + assertAddDialogParts(addDialog); + }); + } });
diff --git a/chrome/test/data/webui/settings/passwords_section_test_cros.js b/chrome/test/data/webui/settings/passwords_section_test_cros.js index 7bad1b8..9c3d8ff 100644 --- a/chrome/test/data/webui/settings/passwords_section_test_cros.js +++ b/chrome/test/data/webui/settings/passwords_section_test_cros.js
@@ -184,6 +184,9 @@ return requestPromise; }); + // TODO(crbug.com/1274569): add test for edit-dialog requesting token when + // switching from ADD to EDIT mode when other tests are fixed. + // Note (rbpotter): this passes locally, but may still be flaky (see // https://www.crbug.com/1021474) test.skip(
diff --git a/chrome/test/data/webui/settings/payments_section_test.js b/chrome/test/data/webui/settings/payments_section_test.ts similarity index 70% rename from chrome/test/data/webui/settings/payments_section_test.js rename to chrome/test/data/webui/settings/payments_section_test.ts index 4b759fd..8540d27 100644 --- a/chrome/test/data/webui/settings/payments_section_test.js +++ b/chrome/test/data/webui/settings/payments_section_test.ts
@@ -5,9 +5,10 @@ // clang-format off import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; -import {PaymentsManagerImpl} from 'chrome://settings/lazy_load.js'; -import {MetricsBrowserProxyImpl, PrivacyElementInteractions} from 'chrome://settings/settings.js'; -import {eventToPromise, isVisible, whenAttributeIs} from 'chrome://webui-test/test_util.js'; +import {PaymentsManagerImpl, SettingsCreditCardEditDialogElement, SettingsPaymentsSectionElement} from 'chrome://settings/lazy_load.js'; +import {MetricsBrowserProxyImpl, PrivacyElementInteractions, SettingsToggleButtonElement} from 'chrome://settings/settings.js'; +import {assertEquals, assertFalse, assertNotEquals, assertTrue} from 'chrome://webui-test/chai_assert.js'; +import {eventToPromise, whenAttributeIs} from 'chrome://webui-test/test_util.js'; import {createCreditCardEntry, createEmptyCreditCardEntry,TestPaymentsManager} from './passwords_and_autofill_fake_data.js'; import {TestMetricsBrowserProxy} from './test_metrics_browser_proxy.js'; @@ -24,7 +25,7 @@ document.body.appendChild(section); assertFalse( - !!section.shadowRoot.querySelector('#autofillExtensionIndicator')); + !!section.shadowRoot!.querySelector('#autofillExtensionIndicator')); section.set('prefs.autofill.credit_card_enabled.extensionId', 'test-id-1'); section.set( 'prefs.autofill.credit_card_fido_auth_enabled.extensionId', @@ -32,13 +33,13 @@ flush(); assertTrue( - !!section.shadowRoot.querySelector('#autofillExtensionIndicator')); + !!section.shadowRoot!.querySelector('#autofillExtensionIndicator')); }); }); suite('PaymentsSection', function() { setup(function() { - PolymerTest.clearBody(); + document.body.innerHTML = ''; loadTimeData.overrideValues({ migrationEnabled: true, }); @@ -46,12 +47,11 @@ /** * Creates the payments autofill section for the given list. - * @param {!Array<!chrome.autofillPrivate.CreditCardEntry>} creditCards - * @param {!Array<!string>} upiIds * @param {!Object} prefValues - * @return {!Object} */ - function createPaymentsSection(creditCards, upiIds, prefValues) { + function createPaymentsSection( + creditCards: chrome.autofillPrivate.CreditCardEntry[], upiIds: string[], + prefValues: any): SettingsPaymentsSectionElement { // Override the PaymentsManagerImpl for testing. const paymentsManager = new TestPaymentsManager(); paymentsManager.data.creditCards = creditCards; @@ -68,10 +68,10 @@ /** * Creates the Edit Credit Card dialog. - * @param {!chrome.autofillPrivate.CreditCardEntry} creditCardItem - * @return {!Object} */ - function createCreditCardDialog(creditCardItem) { + function createCreditCardDialog( + creditCardItem: chrome.autofillPrivate.CreditCardEntry): + SettingsCreditCardEditDialogElement { const section = document.createElement('settings-credit-card-edit-dialog'); section.creditCard = creditCardItem; document.body.appendChild(section); @@ -82,51 +82,45 @@ // Fakes the existence of a platform authenticator. function addFakePlatformAuthenticator() { if (!window.PublicKeyCredential) { - window.PublicKeyCredential = {}; + (window.PublicKeyCredential as PublicKeyCredential) = {} as + PublicKeyCredential; } window.PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable = function() { - return new Promise(callback => { - callback(true); - }); + return Promise.resolve(true); }; } /** * Returns an array containing the local and server credit card items. - * @return {!Array<!chrome.autofillPrivate.CreditCardEntry>} */ function getLocalAndServerCreditCardListItems() { - return document.body.querySelector('settings-payments-section') - .shadowRoot.querySelector('#paymentsList') - .shadowRoot.querySelectorAll('settings-credit-card-list-entry'); + return document.body.querySelector('settings-payments-section')!.shadowRoot! + .querySelector('#paymentsList')!.shadowRoot!.querySelectorAll( + 'settings-credit-card-list-entry')!; } /** * Returns the shadow root of the card row from the specified list of * payment methods. - * @param {!HTMLElement} paymentsList - * @return {?HTMLElement} */ - function getCardRowShadowRoot(paymentsList) { - const row = paymentsList.shadowRoot.querySelector( + function getCardRowShadowRoot(paymentsList: HTMLElement): ShadowRoot { + const row = paymentsList.shadowRoot!.querySelector( 'settings-credit-card-list-entry'); assertTrue(!!row); - return row.shadowRoot; + return row!.shadowRoot!; } /** * Returns the shadow root of the UPI ID row from the specified list of * payment methods. - * @param {!HTMLElement} paymentsList - * @return {?HTMLElement} */ - function getUPIRowShadowRoot(paymentsList) { + function getUPIRowShadowRoot(paymentsList: HTMLElement): ShadowRoot { const row = - paymentsList.shadowRoot.querySelector('settings-upi-id-list-entry'); + paymentsList.shadowRoot!.querySelector('settings-upi-id-list-entry'); assertTrue(!!row); - return row.shadowRoot; + return row!.shadowRoot!; } test('verifyNoCreditCards', function() { @@ -134,18 +128,17 @@ /*creditCards=*/[], /*upiIds=*/[], {credit_card_enabled: {value: true}}); - const creditCardList = section.shadowRoot.querySelector('#paymentsList'); + const creditCardList = section.$.paymentsList; assertTrue(!!creditCardList); assertEquals(0, getLocalAndServerCreditCardListItems().length); assertFalse( - creditCardList.shadowRoot.querySelector('#noPaymentMethodsLabel') - .hidden); - assertTrue( - creditCardList.shadowRoot.querySelector('#creditCardsHeading').hidden); - assertFalse( - section.shadowRoot.querySelector('#autofillCreditCardToggle').disabled); - assertFalse(section.shadowRoot.querySelector('#addCreditCard').disabled); + creditCardList.shadowRoot! + .querySelector<HTMLElement>('#noPaymentMethodsLabel')!.hidden); + assertTrue(creditCardList.shadowRoot! + .querySelector<HTMLElement>('#creditCardsHeading')!.hidden); + assertFalse(section.$.autofillCreditCardToggle.disabled); + assertFalse(section.$.addCreditCard.disabled); }); test('verifyCreditCardsDisabled', function() { @@ -153,9 +146,8 @@ /*creditCards=*/[], /*upiIds=*/[], {credit_card_enabled: {value: false}}); - assertFalse( - section.shadowRoot.querySelector('#autofillCreditCardToggle').disabled); - assertTrue(section.shadowRoot.querySelector('#addCreditCard').hidden); + assertFalse(section.$.autofillCreditCardToggle.disabled); + assertTrue(section.$.addCreditCard.hidden); }); test('verifyCreditCardCount', function() { @@ -170,42 +162,41 @@ const section = createPaymentsSection( creditCards, /*upiIds=*/[], {credit_card_enabled: {value: true}}); - const creditCardList = section.shadowRoot.querySelector('#paymentsList'); + const creditCardList = section.$.paymentsList; assertTrue(!!creditCardList); assertEquals( creditCards.length, getLocalAndServerCreditCardListItems().length); - assertTrue(creditCardList.shadowRoot.querySelector('#noPaymentMethodsLabel') - .hidden); - assertFalse( - creditCardList.shadowRoot.querySelector('#creditCardsHeading').hidden); - assertFalse( - section.shadowRoot.querySelector('#autofillCreditCardToggle').disabled); - assertFalse(section.shadowRoot.querySelector('#addCreditCard').disabled); + assertTrue( + creditCardList.shadowRoot! + .querySelector<HTMLElement>('#noPaymentMethodsLabel')!.hidden); + assertFalse(creditCardList.shadowRoot! + .querySelector<HTMLElement>('#creditCardsHeading')!.hidden); + assertFalse(section.$.autofillCreditCardToggle.disabled); + assertFalse(section.$.addCreditCard.disabled); }); test('verifyCreditCardFields', function() { const creditCard = createCreditCardEntry(); const section = createPaymentsSection([creditCard], /*upiIds=*/[], /*prefValues=*/ {}); - const rowShadowRoot = - getCardRowShadowRoot(section.shadowRoot.querySelector('#paymentsList')); + const rowShadowRoot = getCardRowShadowRoot(section.$.paymentsList); assertEquals( - creditCard.metadata.summaryLabel, - rowShadowRoot.querySelector('#creditCardLabel').textContent); + creditCard.metadata!.summaryLabel, + rowShadowRoot.querySelector<HTMLElement>( + '#creditCardLabel')!.textContent); assertEquals( creditCard.expirationMonth + '/' + creditCard.expirationYear, - rowShadowRoot.querySelector('#creditCardExpiration') - .textContent.trim()); + rowShadowRoot.querySelector<HTMLElement>( + '#creditCardExpiration')!.textContent!.trim()); }); test('verifyCreditCardRowButtonIsDropdownWhenLocal', function() { const creditCard = createCreditCardEntry(); - creditCard.metadata.isLocal = true; + creditCard.metadata!.isLocal = true; const section = createPaymentsSection([creditCard], /*upiIds=*/[], /*prefValues=*/ {}); - const rowShadowRoot = - getCardRowShadowRoot(section.shadowRoot.querySelector('#paymentsList')); + const rowShadowRoot = getCardRowShadowRoot(section.$.paymentsList); const menuButton = rowShadowRoot.querySelector('#creditCardMenu'); assertTrue(!!menuButton); const outlinkButton = @@ -215,11 +206,10 @@ test('verifyCreditCardRowButtonIsOutlinkWhenRemote', function() { const creditCard = createCreditCardEntry(); - creditCard.metadata.isLocal = false; + creditCard.metadata!.isLocal = false; const section = createPaymentsSection([creditCard], /*upiIds=*/[], /*prefValues=*/ {}); - const rowShadowRoot = - getCardRowShadowRoot(section.shadowRoot.querySelector('#paymentsList')); + const rowShadowRoot = getCardRowShadowRoot(section.$.paymentsList); const menuButton = rowShadowRoot.querySelector('#creditCardMenu'); assertFalse(!!menuButton); const outlinkButton = @@ -233,9 +223,15 @@ const oldCreditCard = createCreditCardEntry(); const oldCreditCardDialog = createCreditCardDialog(oldCreditCard); - assertNotEquals(oldCreditCardDialog.title_, newCreditCardDialog.title_); - assertNotEquals('', newCreditCardDialog.title_); - assertNotEquals('', oldCreditCardDialog.title_); + function getTitle(dialog: SettingsCreditCardEditDialogElement) { + return dialog.shadowRoot!.querySelector('[slot=title]')!.textContent; + } + + const oldTitle = getTitle(oldCreditCardDialog); + const newTitle = getTitle(newCreditCardDialog); + assertNotEquals(oldTitle, newTitle); + assertNotEquals('', oldTitle); + assertNotEquals('', newTitle); // Wait for dialogs to open before finishing test. return Promise.all([ @@ -259,10 +255,10 @@ const maxYear = now.getFullYear() + 19; const yearOptions = creditCardDialog.$.year.options; - assertEquals('2015', yearOptions[0].textContent.trim()); + assertEquals('2015', yearOptions[0]!.textContent!.trim()); assertEquals( maxYear.toString(), - yearOptions[yearOptions.length - 1].textContent.trim()); + yearOptions[yearOptions.length - 1]!.textContent!.trim()); assertEquals( creditCard.expirationYear, creditCardDialog.$.year.value); }); @@ -283,10 +279,11 @@ const yearOptions = creditCardDialog.$.year.options; assertEquals( - now.getFullYear().toString(), yearOptions[0].textContent.trim()); + now.getFullYear().toString(), + yearOptions[0]!.textContent!.trim()); assertEquals( farFutureYear.toString(), - yearOptions[yearOptions.length - 1].textContent.trim()); + yearOptions[yearOptions.length - 1]!.textContent!.trim()); assertEquals( creditCard.expirationYear, creditCardDialog.$.year.value); }); @@ -308,10 +305,11 @@ const yearOptions = creditCardDialog.$.year.options; assertEquals( - now.getFullYear().toString(), yearOptions[0].textContent.trim()); + now.getFullYear().toString(), + yearOptions[0]!.textContent!.trim()); assertEquals( maxYear.toString(), - yearOptions[yearOptions.length - 1].textContent.trim()); + yearOptions[yearOptions.length - 1]!.textContent!.trim()); assertEquals( creditCard.expirationYear, creditCardDialog.$.year.value); }); @@ -326,7 +324,7 @@ // Not expired, but still can't be saved, because there's no // name. const expiredError = - creditCardDialog.shadowRoot.querySelector('#expired-error'); + creditCardDialog.shadowRoot!.querySelector('#expired-error')!; assertEquals('hidden', getComputedStyle(expiredError).visibility); assertTrue(creditCardDialog.$.saveButton.disabled); @@ -373,78 +371,73 @@ const creditCard = createCreditCardEntry(); // When credit card is local, |isCached| will be undefined. - creditCard.metadata.isLocal = true; - creditCard.metadata.isCached = undefined; + creditCard.metadata!.isLocal = true; + creditCard.metadata!.isCached = undefined; const section = createPaymentsSection([creditCard], /*upiIds=*/[], /*prefValues=*/ {}); assertEquals(1, getLocalAndServerCreditCardListItems().length); // Local credit cards will show the overflow menu. - const rowShadowRoot = - getCardRowShadowRoot(section.shadowRoot.querySelector('#paymentsList')); + const rowShadowRoot = getCardRowShadowRoot(section.$.paymentsList); assertFalse(!!rowShadowRoot.querySelector('#remoteCreditCardLink')); - const menuButton = rowShadowRoot.querySelector('#creditCardMenu'); + const menuButton = + rowShadowRoot.querySelector<HTMLElement>('#creditCardMenu'); assertTrue(!!menuButton); - menuButton.click(); + menuButton!.click(); flush(); - const menu = section.$.creditCardSharedMenu; - // Menu should have 2 options. - assertFalse(menu.querySelector('#menuEditCreditCard').hidden); - assertFalse(menu.querySelector('#menuRemoveCreditCard').hidden); - assertTrue(menu.querySelector('#menuClearCreditCard').hidden); + assertFalse(section.$.menuEditCreditCard.hidden); + assertFalse(section.$.menuRemoveCreditCard.hidden); + assertTrue(section.$.menuClearCreditCard.hidden); - menu.close(); + section.$.creditCardSharedMenu.close(); flush(); }); test('verifyCachedCreditCardMenu', function() { const creditCard = createCreditCardEntry(); - creditCard.metadata.isLocal = false; - creditCard.metadata.isCached = true; + creditCard.metadata!.isLocal = false; + creditCard.metadata!.isCached = true; const section = createPaymentsSection([creditCard], /*upiIds=*/[], /*prefValues=*/ {}); assertEquals(1, getLocalAndServerCreditCardListItems().length); // Cached remote CCs will show overflow menu. - const rowShadowRoot = - getCardRowShadowRoot(section.shadowRoot.querySelector('#paymentsList')); + const rowShadowRoot = getCardRowShadowRoot(section.$.paymentsList); assertFalse(!!rowShadowRoot.querySelector('#remoteCreditCardLink')); - const menuButton = rowShadowRoot.querySelector('#creditCardMenu'); + const menuButton = + rowShadowRoot.querySelector<HTMLElement>('#creditCardMenu'); assertTrue(!!menuButton); - menuButton.click(); + menuButton!.click(); flush(); - const menu = section.$.creditCardSharedMenu; - // Menu should have 2 options. - assertFalse(menu.querySelector('#menuEditCreditCard').hidden); - assertTrue(menu.querySelector('#menuRemoveCreditCard').hidden); - assertFalse(menu.querySelector('#menuClearCreditCard').hidden); + assertFalse(section.$.menuEditCreditCard.hidden); + assertTrue(section.$.menuRemoveCreditCard.hidden); + assertFalse(section.$.menuClearCreditCard.hidden); - menu.close(); + section.$.creditCardSharedMenu.close(); flush(); }); test('verifyNotCachedCreditCardMenu', function() { const creditCard = createCreditCardEntry(); - creditCard.metadata.isLocal = false; - creditCard.metadata.isCached = false; + creditCard.metadata!.isLocal = false; + creditCard.metadata!.isCached = false; const section = createPaymentsSection([creditCard], /*upiIds=*/[], /*prefValues=*/ {}); assertEquals(1, getLocalAndServerCreditCardListItems().length); // No overflow menu when not cached. - const rowShadowRoot = - getCardRowShadowRoot(section.shadowRoot.querySelector('#paymentsList')); + const rowShadowRoot = getCardRowShadowRoot(section.$.paymentsList); assertTrue(!!rowShadowRoot.querySelector('#remoteCreditCardLink')); assertFalse(!!rowShadowRoot.querySelector('#creditCardMenu')); }); @@ -455,43 +448,43 @@ // Add one migratable credit card. const creditCard = createCreditCardEntry(); - creditCard.metadata.isMigratable = true; + creditCard.metadata!.isMigratable = true; const section = createPaymentsSection( [creditCard], /*upiIds=*/[], {credit_card_enabled: {value: true}}); - assertTrue(section.shadowRoot.querySelector('#migrateCreditCards').hidden); + assertTrue(section.$.migrateCreditCards.hidden); }); test('verifyMigrationButtonNotShownIfCreditCardDisabled', function() { // Add one migratable credit card. const creditCard = createCreditCardEntry(); - creditCard.metadata.isMigratable = true; + creditCard.metadata!.isMigratable = true; // Mock credit card save toggle is turned off by users. const section = createPaymentsSection( [creditCard], /*upiIds=*/[], {credit_card_enabled: {value: false}}); - assertTrue(section.shadowRoot.querySelector('#migrateCreditCards').hidden); + assertTrue(section.$.migrateCreditCards.hidden); }); test('verifyMigrationButtonNotShownIfNoCardIsMigratable', function() { // Add one migratable credit card. const creditCard = createCreditCardEntry(); // Mock credit card is not valid. - creditCard.metadata.isMigratable = false; + creditCard.metadata!.isMigratable = false; const section = createPaymentsSection( [creditCard], /*upiIds=*/[], {credit_card_enabled: {value: true}}); - assertTrue(section.shadowRoot.querySelector('#migrateCreditCards').hidden); + assertTrue(section.$.migrateCreditCards.hidden); }); test('verifyMigrationButtonShown', function() { // Add one migratable credit card. const creditCard = createCreditCardEntry(); - creditCard.metadata.isMigratable = true; + creditCard.metadata!.isMigratable = true; const section = createPaymentsSection( [creditCard], /*upiIds=*/[], {credit_card_enabled: {value: true}}); - assertFalse(section.shadowRoot.querySelector('#migrateCreditCards').hidden); + assertFalse(section.$.migrateCreditCards.hidden); }); test('verifyFIDOAuthToggleShownIfUserIsVerifiable', function() { @@ -502,7 +495,7 @@ /*creditCards=*/[], /*upiIds=*/[], {credit_card_enabled: {value: true}}); - assertTrue(!!section.shadowRoot.querySelector( + assertTrue(!!section.shadowRoot!.querySelector( '#autofillCreditCardFIDOAuthToggle')); }); @@ -513,7 +506,7 @@ const section = createPaymentsSection( /*creditCards=*/[], /*upiIds=*/[], {credit_card_enabled: {value: true}}); - assertFalse(!!section.shadowRoot.querySelector( + assertFalse(!!section.shadowRoot!.querySelector( '#autofillCreditCardFIDOAuthToggle')); }); @@ -525,9 +518,9 @@ credit_card_enabled: {value: true}, credit_card_fido_auth_enabled: {value: true} }); - assertTrue( - section.shadowRoot.querySelector('#autofillCreditCardFIDOAuthToggle') - .checked); + assertTrue(section.shadowRoot! + .querySelector<SettingsToggleButtonElement>( + '#autofillCreditCardFIDOAuthToggle')!.checked); }); test('verifyFIDOAuthToggleUncheckedIfOptedOut', function() { @@ -538,9 +531,9 @@ credit_card_enabled: {value: true}, credit_card_fido_auth_enabled: {value: false} }); - assertFalse( - section.shadowRoot.querySelector('#autofillCreditCardFIDOAuthToggle') - .checked); + assertFalse(section.shadowRoot! + .querySelector<SettingsToggleButtonElement>( + '#autofillCreditCardFIDOAuthToggle')!.checked); }); test('verifyUpiIdRow', function() { @@ -548,11 +541,10 @@ const section = createPaymentsSection( /*creditCards=*/[], ['vpa@indianbank'], /*prefValues=*/ {}); - const rowShadowRoot = - getUPIRowShadowRoot(section.shadowRoot.querySelector('#paymentsList')); + const rowShadowRoot = getUPIRowShadowRoot(section.$.paymentsList); assertTrue(!!rowShadowRoot); assertEquals( - rowShadowRoot.querySelector('#upiIdLabel').textContent, + rowShadowRoot.querySelector<HTMLElement>('#upiIdLabel')!.textContent, 'vpa@indianbank'); }); @@ -562,9 +554,9 @@ const section = createPaymentsSection( /*creditCards=*/[], /*upiIds=*/[], /*prefValues=*/ {}); - const paymentsList = section.shadowRoot.querySelector('#paymentsList'); + const paymentsList = section.$.paymentsList; const upiRows = - paymentsList.shadowRoot.querySelectorAll('settings-upi-id-list-entry'); + paymentsList.shadowRoot!.querySelectorAll('settings-upi-id-list-entry'); assertEquals(0, upiRows.length); }); @@ -576,9 +568,9 @@ const section = createPaymentsSection( /*creditCards=*/[], upiIds, /*prefValues=*/ {}); - const paymentsList = section.shadowRoot.querySelector('#paymentsList'); + const paymentsList = section.$.paymentsList; const upiRows = - paymentsList.shadowRoot.querySelectorAll('settings-upi-id-list-entry'); + paymentsList.shadowRoot!.querySelectorAll('settings-upi-id-list-entry'); assertEquals(upiIds.length, upiRows.length); }); @@ -591,9 +583,9 @@ const section = createPaymentsSection( /*creditCards=*/[], upiIds, /*prefValues=*/ {}); - const paymentsList = section.shadowRoot.querySelector('#paymentsList'); + const paymentsList = section.$.paymentsList; const upiRows = - paymentsList.shadowRoot.querySelectorAll('settings-upi-id-list-entry'); + paymentsList.shadowRoot!.querySelectorAll('settings-upi-id-list-entry'); assertEquals(0, upiRows.length); }); @@ -605,7 +597,7 @@ const section = createPaymentsSection( /*creditCards=*/[], /*upiIds=*/[], /*prefValues=*/ {}); - section.shadowRoot.querySelector('#canMakePaymentToggle').click(); + section.$.canMakePaymentToggle.click(); const result = await testMetricsBrowserProxy.whenCalled('recordSettingsPageHistogram');
diff --git a/chrome/test/data/webui/settings/test_password_manager_proxy.ts b/chrome/test/data/webui/settings/test_password_manager_proxy.ts index 5b5fd684..2a7a9a2 100644 --- a/chrome/test/data/webui/settings/test_password_manager_proxy.ts +++ b/chrome/test/data/webui/settings/test_password_manager_proxy.ts
@@ -196,6 +196,9 @@ requestPlaintextPassword( id: number, reason: chrome.passwordsPrivate.PlaintextReason) { this.methodCalled('requestPlaintextPassword', {id, reason}); + if (!this.plaintextPassword_) { + return Promise.reject(new Error('Could not obtain plaintext password')); + } return Promise.resolve(this.plaintextPassword_); } @@ -259,7 +262,7 @@ this.methodCalled('startBulkPasswordCheck'); if (this.data.checkStatus.state === chrome.passwordsPrivate.PasswordCheckState.NO_PASSWORDS) { - return Promise.reject('error'); + return Promise.reject(new Error('error')); } return Promise.resolve(); } @@ -307,7 +310,7 @@ reason: chrome.passwordsPrivate.PlaintextReason) { this.methodCalled('getPlaintextInsecurePassword', {credential, reason}); if (!this.plaintextPassword_) { - return Promise.reject('Could not obtain plaintext password'); + return Promise.reject(new Error('Could not obtain plaintext password')); } const newCredential =
diff --git a/chromeos/BUILD.gn b/chromeos/BUILD.gn index 67549b1..f6fc390 100644 --- a/chromeos/BUILD.gn +++ b/chromeos/BUILD.gn
@@ -40,7 +40,6 @@ "//base", "//base:i18n", "//chromeos/dbus", - "//chromeos/policy", "//google_apis", "//services/network/public/cpp:cpp", ] @@ -165,7 +164,6 @@ "//chromeos/memory:unit_tests", "//chromeos/network:test_support", "//chromeos/network:unit_tests", - "//chromeos/policy:unit_tests", "//chromeos/process_proxy:unit_tests", "//chromeos/services:unit_tests", "//chromeos/startup:unit_tests",
diff --git a/chromeos/dbus/cros_disks/cros_disks_client.h b/chromeos/dbus/cros_disks/cros_disks_client.h index e7abb0b..f5ac7a2 100644 --- a/chromeos/dbus/cros_disks/cros_disks_client.h +++ b/chromeos/dbus/cros_disks/cros_disks_client.h
@@ -427,10 +427,52 @@ // TODO(https://crbug.com/1164001): remove when //chromeos/dbus moved to ash. namespace ash { +using ::chromeos::CROS_DISKS_DEVICE_ADDED; +using ::chromeos::CROS_DISKS_DEVICE_REMOVED; +using ::chromeos::CROS_DISKS_DEVICE_SCANNED; +using ::chromeos::CROS_DISKS_DISK_ADDED; +using ::chromeos::CROS_DISKS_DISK_REMOVED; +using ::chromeos::CrosDisksClient; +using ::chromeos::DEVICE_TYPE_MOBILE; +using ::chromeos::DEVICE_TYPE_OPTICAL_DISC; +using ::chromeos::DEVICE_TYPE_SD; +using ::chromeos::DEVICE_TYPE_UNKNOWN; +using ::chromeos::DEVICE_TYPE_USB; +using ::chromeos::DeviceType; +using ::chromeos::DiskInfo; +using ::chromeos::FORMAT_ERROR_DEVICE_NOT_ALLOWED; +using ::chromeos::FORMAT_ERROR_NONE; +using ::chromeos::FORMAT_ERROR_UNKNOWN; +using ::chromeos::FORMAT_ERROR_UNSUPPORTED_FILESYSTEM; +using ::chromeos::FormatError; +using ::chromeos::MOUNT_ACCESS_MODE_READ_ONLY; +using ::chromeos::MOUNT_ACCESS_MODE_READ_WRITE; +using ::chromeos::MOUNT_ERROR_INTERNAL; +using ::chromeos::MOUNT_ERROR_INVALID_DEVICE_PATH; +using ::chromeos::MOUNT_ERROR_INVALID_PATH; using ::chromeos::MOUNT_ERROR_NONE; +using ::chromeos::MOUNT_ERROR_PATH_ALREADY_MOUNTED; +using ::chromeos::MOUNT_ERROR_PATH_NOT_MOUNTED; +using ::chromeos::MOUNT_ERROR_UNKNOWN; +using ::chromeos::MOUNT_ERROR_UNKNOWN_FILESYSTEM; +using ::chromeos::MOUNT_ERROR_UNSUPPORTED_FILESYSTEM; +using ::chromeos::MOUNT_TYPE_ARCHIVE; using ::chromeos::MOUNT_TYPE_DEVICE; +using ::chromeos::MountAccessMode; +using ::chromeos::MountEntry; using ::chromeos::MountError; +using ::chromeos::MountEventType; using ::chromeos::MountType; +using ::chromeos::PARTITION_ERROR_INVALID_DEVICE_PATH; +using ::chromeos::PARTITION_ERROR_NONE; +using ::chromeos::PARTITION_ERROR_UNKNOWN; +using ::chromeos::PartitionError; +using ::chromeos::REMOUNT_OPTION_MOUNT_NEW_DEVICE; +using ::chromeos::REMOUNT_OPTION_REMOUNT_EXISTING_DEVICE; +using ::chromeos::RENAME_ERROR_DEVICE_NOT_ALLOWED; +using ::chromeos::RENAME_ERROR_NONE; +using ::chromeos::RENAME_ERROR_UNKNOWN; +using ::chromeos::RenameError; } // namespace ash #endif // CHROMEOS_DBUS_CROS_DISKS_CROS_DISKS_CLIENT_H_
diff --git a/chromeos/dbus/cros_disks/fake_cros_disks_client.h b/chromeos/dbus/cros_disks/fake_cros_disks_client.h index 6e975674..f934b8a1 100644 --- a/chromeos/dbus/cros_disks/fake_cros_disks_client.h +++ b/chromeos/dbus/cros_disks/fake_cros_disks_client.h
@@ -202,4 +202,9 @@ } // namespace chromeos +// TODO(https://crbug.com/1164001): remove when //chromeos/dbus moved to ash. +namespace ash { +using ::chromeos::FakeCrosDisksClient; +} // namespace ash + #endif // CHROMEOS_DBUS_CROS_DISKS_FAKE_CROS_DISKS_CLIENT_H_
diff --git a/chromeos/dbus/hps/hps_dbus_client.cc b/chromeos/dbus/hps/hps_dbus_client.cc index 1caea0b..76dbcfa 100644 --- a/chromeos/dbus/hps/hps_dbus_client.cc +++ b/chromeos/dbus/hps/hps_dbus_client.cc
@@ -53,6 +53,10 @@ weak_ptr_factory_.GetWeakPtr()), base::BindOnce(&HpsDBusClientImpl::HpsNotifyChangedConnected, weak_ptr_factory_.GetWeakPtr())); + + // Monitor daemon restarts. + hps_proxy_->SetNameOwnerChangedCallback(base::BindRepeating( + &HpsDBusClientImpl::NameOwnerChanged, weak_ptr_factory_.GetWeakPtr())); } ~HpsDBusClientImpl() override = default; @@ -75,6 +79,17 @@ } } + // Called with a non-empty |new_owner| when the service is restarted, or an + // empty |new_owner| when the service is shutdown. + void NameOwnerChanged(const std::string& /* old_owner */, + const std::string& new_owner) { + const auto method = + new_owner.empty() ? &Observer::OnShutdown : &Observer::OnRestart; + for (auto& observer : observers_) { + (observer.*method)(); + } + } + // Called when the HpsNotifyChanged signal is initially connected. void HpsNotifyChangedConnected(const std::string& /* interface_name */, const std::string& /* signal_name */, @@ -153,7 +168,6 @@ } // namespace -HpsDBusClient::Observer::Observer() = default; HpsDBusClient::Observer::~Observer() = default; HpsDBusClient::HpsDBusClient() {
diff --git a/chromeos/dbus/hps/hps_dbus_client.h b/chromeos/dbus/hps/hps_dbus_client.h index aea568e5..31eadfe7 100644 --- a/chromeos/dbus/hps/hps_dbus_client.h +++ b/chromeos/dbus/hps/hps_dbus_client.h
@@ -28,11 +28,15 @@ public: ~Observer() override; - // See go/cros-hps-notify-ui-impl for event details. + // Called when the presence of a "snooper" looking over the user's shoulder + // starts or stops being detected. virtual void OnHpsNotifyChanged(bool state) = 0; - protected: - Observer(); + // Called when the service starts or restarts. + virtual void OnRestart() = 0; + + // Called when the service shuts down. + virtual void OnShutdown() = 0; }; using GetResultHpsNotifyCallback = @@ -57,6 +61,7 @@ virtual void EnableHpsNotify(const hps::FeatureConfig& config) = 0; // Disables HpsNotify in HpsService. virtual void DisableHpsNotify() = 0; + // Registers |callback| to run when the HpsService becomes available. // If the service is already available, or if connecting to the name-owner- // changed signal fails, |callback| will be run once asynchronously.
diff --git a/chromeos/policy/DIR_METADATA b/chromeos/policy/DIR_METADATA deleted file mode 100644 index 50ec60f..0000000 --- a/chromeos/policy/DIR_METADATA +++ /dev/null
@@ -1 +0,0 @@ -mixins: "//chromeos/policy/COMMON_METADATA"
diff --git a/chromeos/services/libassistant/grpc/assistant_client.h b/chromeos/services/libassistant/grpc/assistant_client.h index 64b54ce..db1156c 100644 --- a/chromeos/services/libassistant/grpc/assistant_client.h +++ b/chromeos/services/libassistant/grpc/assistant_client.h
@@ -171,6 +171,7 @@ virtual std::string GetDeviceId() = 0; // Audio-related functionality: + // Enables or disables audio input pipeline. virtual void EnableListening(bool listening_enabled) = 0; // Alarm/timer-related functionality:
diff --git a/chromeos/services/libassistant/grpc/assistant_client_impl.cc b/chromeos/services/libassistant/grpc/assistant_client_impl.cc index 730b6db7..ca09cd71 100644 --- a/chromeos/services/libassistant/grpc/assistant_client_impl.cc +++ b/chromeos/services/libassistant/grpc/assistant_client_impl.cc
@@ -17,6 +17,7 @@ #include "chromeos/assistant/internal/internal_constants.h" #include "chromeos/assistant/internal/internal_util.h" #include "chromeos/assistant/internal/proto/shared/proto/v2/alarm_timer_interface.pb.h" +#include "chromeos/assistant/internal/proto/shared/proto/v2/audio_utils_interface.pb.h" #include "chromeos/assistant/internal/proto/shared/proto/v2/bootup_settings_interface.pb.h" #include "chromeos/assistant/internal/proto/shared/proto/v2/config_settings_interface.pb.h" #include "chromeos/assistant/internal/proto/shared/proto/v2/display_interface.pb.h" @@ -35,6 +36,11 @@ namespace { +using ::assistant::api::EnableListeningRequest; +using ::assistant::api::EnableListeningResponse; +using ::assistant::api::SetLocaleOverrideRequest; +using ::assistant::api::SetLocaleOverrideResponse; + // Rpc call config constants. constexpr int kMaxRpcRetries = 5; constexpr int kDefaultTimeoutMs = 5000; @@ -241,6 +247,24 @@ kDefaultStateConfig); } +void AssistantClientImpl::SetLocaleOverride(const std::string& locale) { + SetLocaleOverrideRequest request; + request.set_locale(locale); + + libassistant_client_.CallServiceMethod( + request, GetLoggingCallback<SetLocaleOverrideResponse>(__func__), + kDefaultStateConfig); +} + +void AssistantClientImpl::EnableListening(bool listening_enabled) { + EnableListeningRequest request; + request.set_enable(listening_enabled); + + libassistant_client_.CallServiceMethod( + request, GetLoggingCallback<EnableListeningResponse>(__func__), + kDefaultStateConfig); +} + void AssistantClientImpl::AddTimeToTimer(const std::string& id, const base::TimeDelta& duration) { ::assistant::api::AddTimeToTimerRequest request;
diff --git a/chromeos/services/libassistant/grpc/assistant_client_impl.h b/chromeos/services/libassistant/grpc/assistant_client_impl.h index 8a12266..c94c3f4 100644 --- a/chromeos/services/libassistant/grpc/assistant_client_impl.h +++ b/chromeos/services/libassistant/grpc/assistant_client_impl.h
@@ -64,6 +64,10 @@ base::OnceCallback< void(const ::assistant::api::GetAssistantSettingsResponse&)> on_done) override; + void SetLocaleOverride(const std::string& locale) override; + + // Audio-related functionality: + void EnableListening(bool listening_enabled) override; // Timer related: void AddTimeToTimer(const std::string& id,
diff --git a/chromeos/services/libassistant/grpc/grpc_libassistant_client.cc b/chromeos/services/libassistant/grpc/grpc_libassistant_client.cc index 7bc46fe..2b871be 100644 --- a/chromeos/services/libassistant/grpc/grpc_libassistant_client.cc +++ b/chromeos/services/libassistant/grpc/grpc_libassistant_client.cc
@@ -9,6 +9,7 @@ #include "base/check.h" #include "chromeos/assistant/internal/libassistant_util.h" #include "chromeos/assistant/internal/proto/shared/proto/v2/alarm_timer_interface.pb.h" +#include "chromeos/assistant/internal/proto/shared/proto/v2/audio_utils_interface.pb.h" #include "chromeos/assistant/internal/proto/shared/proto/v2/bootup_settings_interface.pb.h" #include "chromeos/assistant/internal/proto/shared/proto/v2/config_settings_interface.pb.h" #include "chromeos/assistant/internal/proto/shared/proto/v2/customer_registration_interface.pb.h" @@ -105,6 +106,23 @@ template <> std::string +GetLibassistGrpcMethodName<::assistant::api::SetLocaleOverrideRequest>() { + // Set the locale override of the device. This will override the locale + // obtained from user's assistant settings. + return chromeos::assistant::GetLibassistGrpcMethodName( + "ConfigSettingsService", "SetLocaleOverride"); +} + +template <> +std::string +GetLibassistGrpcMethodName<::assistant::api::EnableListeningRequest>() { + // Enables or disables Assistant listening on the device. + return chromeos::assistant::GetLibassistGrpcMethodName("AudioUtilsService", + "EnableListening"); +} + +template <> +std::string GetLibassistGrpcMethodName<::assistant::api::AddTimeToTimerRequest>() { return chromeos::assistant::GetLibassistGrpcMethodName("AlarmTimerService", "AddTimeToTimer");
diff --git a/chromeos/services/libassistant/grpc/grpc_libassistant_client.h b/chromeos/services/libassistant/grpc/grpc_libassistant_client.h index 28388a3e..3f3e1e4 100644 --- a/chromeos/services/libassistant/grpc/grpc_libassistant_client.h +++ b/chromeos/services/libassistant/grpc/grpc_libassistant_client.h
@@ -31,6 +31,9 @@ GrpcLibassistantClient& operator=(const GrpcLibassistantClient&) = delete; ~GrpcLibassistantClient(); + // Calls an async client method. ResponseCallback will be invoked from + // caller's sequence. The raw pointer will be handled by |RPCState| internally + // and gets deleted upon completion of the RPC call. template <typename Request, typename Response> void CallServiceMethod( const Request& request,
diff --git a/chromeos/strings/chromeos_strings_sq.xtb b/chromeos/strings/chromeos_strings_sq.xtb index 8c0fe8e..9d8410d 100644 --- a/chromeos/strings/chromeos_strings_sq.xtb +++ b/chromeos/strings/chromeos_strings_sq.xtb
@@ -118,6 +118,7 @@ <translation id="2783010256799387990">KALOI</translation> <translation id="2789486458103222910">Në rregull</translation> <translation id="2805756323405976993">Aplikacionet</translation> +<translation id="2859243502336719778">Përditësim kritik</translation> <translation id="2860473693272905224">Vendos një faqe tjetër në skaner</translation> <translation id="2872961005593481000">Ndërprit punën</translation> <translation id="2878387241690264070">U shkarkua <ph name="RATE" /> në <ph name="NUM_SECONDS" /> sekonda.</translation> @@ -152,6 +153,7 @@ <translation id="3456078764689556234">U printua faqja <ph name="PRINTED_PAGES" /> nga <ph name="TOTAL_PAGES" />.</translation> <translation id="345898999683440380">Po skanon faqen <ph name="PAGE_NUM" />. <ph name="PERCENTAGE_VALUE" />% e përfunduar.</translation> <translation id="3459509316159669723">Po printon</translation> +<translation id="3462187165860821523"><ph name="DEVICE_NAME" /> po përditësohet</translation> <translation id="3488065109653206955">I aktivizuar pjesërisht</translation> <translation id="3527036260304016759">Dështoi - Gabim i panjohur</translation> <translation id="3532980081107202182">Rreth <ph name="MIN_REMAINING" /> minuta të mbetura</translation> @@ -206,6 +208,7 @@ <translation id="4378373042927530923">Nuk u ekzekutua</translation> <translation id="4378551569595875038">Po lidhet...</translation> <translation id="4382484599443659549">PDF</translation> +<translation id="4418498623216225764">Përditëso pajisjet periferike</translation> <translation id="4425149324548788773">Disku im</translation> <translation id="4428374560396076622"><ph name="NETWORK_NAME" /> është joaktiv</translation> <translation id="4429881212383817840">Bileta e Kerberos skadon së shpejti</translation> @@ -258,6 +261,7 @@ <translation id="4921665434385737356">U karikua <ph name="RATE" /> në <ph name="NUM_SECONDS" /> sekonda.</translation> <translation id="4930320165497208503">Për të konfiguruar ose përditësuar një lidhje, shko te <ph name="BEGIN_LINK" />Cilësimet<ph name="END_LINK" />.</translation> <translation id="4932733599132424254">Data</translation> +<translation id="4950314376641394653">Firmueri <ph name="DEVICE_NAME" /> është përditësuar në versionin <ph name="VERSION" /></translation> <translation id="498186245079027698">Kontrollo skanerin dhe provo përsëri. Sigurohu që të jetë hapësirë lokale të mjaftueshme për të ruajtur skedarët e skanuar.</translation> <translation id="4985509611418653372">Ekzekuto</translation> <translation id="4987769320337599931">Mur mbrojtës</translation> @@ -398,6 +402,7 @@ <translation id="7040230719604914234">Operatori</translation> <translation id="7058278511608979688">Mbaro dhe ruaj</translation> <translation id="7059230779847288458">Po karikohet, <ph name="TIME_VALUE" /> derisa të mbushet</translation> +<translation id="7068619307603204412">Përgatit pajisjen</translation> <translation id="708426984172631313">NDALOI</translation> <translation id="7086440545492620869"><ph name="VALUE" /> <ph name="DISPLAY_NAME" /></translation> <translation id="710028965487274708">Dështoi - Autorizimi dështoi</translation> @@ -411,6 +416,7 @@ <translation id="7177485034254901881">Kjo pajisje <ph name="DEVICE_TYPE" /> menaxhohet nga <ph name="MANAGER" />. Administratorët mund ta konfigurojnë në distancë pajisjen.</translation> <translation id="7180611975245234373">Rifresko</translation> <translation id="7216409898977639127">Operatori celular</translation> +<translation id="7240035910874241640">Të gjitha pajisjet periferike janë të përditësuara</translation> <translation id="7271040990581020067">Skaneri është aktualisht në përdorim. Provo përsëri më vonë.</translation> <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation> <translation id="7287310195820267359">Koleksionet e imazheve të sfondit</translation> @@ -452,6 +458,7 @@ <translation id="7763470514545477072">Përputhje e prapashtesës së domenit</translation> <translation id="7769672763586021400">ID-ja e modelit</translation> <translation id="7784116172884276937">Nuk është konfiguruar asnjë server DNS</translation> +<translation id="7786540085520432425">Gjatë përditësimit, mund të minimizosh dritaren, por mos e hiq nga priza pajisjen. Kjo mund të zgjasë disa minuta dhe pajisja mund të mos funksionojë gjatë përditësimit</translation> <translation id="7805768142964895445">Statusi</translation> <translation id="7819857487979277519">PSK (WPA ose RSN)</translation> <translation id="7835501727204647447">Instalo CloudReady</translation> @@ -508,6 +515,7 @@ <translation id="8498220429738806196">Matësit e trafikut</translation> <translation id="8503813439785031346">Emri i përdoruesit</translation> <translation id="8503836310948963452">Edhe vetëm pak minuta...</translation> +<translation id="8520963233738002436">Pajisja jote <ph name="DEVICE_NAME" /> është e përditësuar</translation> <translation id="8521021929829989041">Përdore si pajisje personale</translation> <translation id="8528615187455571738">Crosvm</translation> <translation id="8575298406870537639">Operatori celular mund të kërkojë këtë opsion për t'u lidhur me rrjetin e tij. Kontakto me operatorin celular për detaje.</translation> @@ -547,6 +555,7 @@ <translation id="8970109610781093811">Ekzekuto përsëri</translation> <translation id="8983038754672563810">HSPA</translation> <translation id="8987565828374052507">{NUMBER_OF_PAGES,plural, =0{Skano}=1{Skano faqen {NUMBER_OF_PAGES}}other{Skano faqen {NUMBER_OF_PAGES}}}</translation> +<translation id="8994273342647807496">Po instalohet - <ph name="PERCENTAGE_VALUE" />%</translation> <translation id="9003704114456258138">Frekuenca</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9062831201344759865">Rezolucioni i DNS-së ka vonesë të lartë</translation>
diff --git a/components/arc/DEPS b/components/arc/DEPS index 0b3cdb7..11a7184 100644 --- a/components/arc/DEPS +++ b/components/arc/DEPS
@@ -6,7 +6,6 @@ "+chromeos/cryptohome", "+chromeos/dbus", "+chromeos/memory", - "+chromeos/policy", "+chromeos/system", "+components/guest_os", "+components/account_id",
diff --git a/components/arc/mojom/BUILD.gn b/components/arc/mojom/BUILD.gn index d6b3aff..b675d61 100644 --- a/components/arc/mojom/BUILD.gn +++ b/components/arc/mojom/BUILD.gn
@@ -12,35 +12,13 @@ if (is_chromeos_ash) { mojom("mojom") { sources = [ - "anr.mojom", "app.mojom", "app_permissions.mojom", "compatibility_mode.mojom", "file_system.mojom", "intent_common.mojom", "intent_helper.mojom", - "metrics.mojom", - "policy.mojom", - "power.mojom", - "print_common.mojom", - "print_spooler.mojom", - "process.mojom", - "property.mojom", - "rotation_lock.mojom", "scale_factor.mojom", - "screen_capture.mojom", - "sensor.mojom", - "sensor_service.mojom", - "sharesheet.mojom", - "storage_manager.mojom", - "timer.mojom", - "tracing.mojom", - "tts.mojom", - "usb_host.mojom", - "volume_mounter.mojom", - "wake_lock.mojom", - "wallpaper.mojom", - "webapk.mojom", ] public_deps = [ @@ -109,61 +87,6 @@ traits_sources = [ "//components/arc/intent_helper/intent_filter_mojom_traits.cc" ] }, - { - types = [ - { - mojom = "arc.mojom.PrintPageRange" - cpp = "::printing::PageRange" - }, - { - mojom = "arc.mojom.PrintResolution" - cpp = "::gfx::Size" - }, - { - mojom = "arc.mojom.PrinterCapabilities" - cpp = "::printing::PrinterSemanticCapsAndDefaults" - }, - ] - traits_headers = [ - "//printing/backend/print_backend.h", - "//printing/page_range.h", - "//ui/gfx/geometry/size.h", - ] - - traits_private_headers = [ "print_mojom_traits.h" ] - traits_sources = [ "print_mojom_traits.cc" ] - traits_public_deps = [ "//printing" ] - }, - { - types = [ - { - mojom = "arc.mojom.ClockId" - cpp = "::clockid_t" - }, - ] - traits_headers = - [ "//ash/components/arc/timer/arc_timer_mojom_traits.h" ] - traits_sources = - [ "//ash/components/arc/timer/arc_timer_mojom_traits.cc" ] - }, - { - types = [ - { - mojom = "arc.mojom.DeviceType" - cpp = "::chromeos::DeviceType" - }, - { - mojom = "arc.mojom.MountEvent" - cpp = "::chromeos::disks::DiskMountManager::MountEvent" - }, - ] - traits_headers = [ - "//ash/components/arc/volume_mounter/volume_mounter_mojom_traits.h", - ] - traits_sources = [ - "//ash/components/arc/volume_mounter/volume_mounter_mojom_traits.cc", - ] - }, ] } }
diff --git a/components/autofill_assistant/android/BUILD.gn b/components/autofill_assistant/android/BUILD.gn index cd6b52a4..251403c 100644 --- a/components/autofill_assistant/android/BUILD.gn +++ b/components/autofill_assistant/android/BUILD.gn
@@ -32,6 +32,18 @@ [ "internal/java/res_poodle/drawable/ic_autofill_assistant_24dp.xml" ] } +# The paments_integrator_java target is overridden downstream and used instead +# of this one if the enable_chrome_android_internal flag is enabled. +android_library("gms_integrator_java") { + deps = [ + "//base:base_java", + "//ui/android:ui_no_recycler_view_java", + ] + + sources = [ "internal/java/src/org/chromium/chrome/browser/" + + "autofill_assistant/user_data/GmsIntegrator.java" ] +} + android_resources("java_resources") { sources = [ "internal/java/res/drawable/autofill_assistant_actions_gradient.xml",
diff --git a/components/autofill_assistant/android/DEPS b/components/autofill_assistant/android/DEPS new file mode 100644 index 0000000..d21e072 --- /dev/null +++ b/components/autofill_assistant/android/DEPS
@@ -0,0 +1,3 @@ +include_rules = [ + "+ui/android", +]
diff --git a/components/autofill_assistant/android/internal/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/GmsIntegrator.java b/components/autofill_assistant/android/internal/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/GmsIntegrator.java new file mode 100644 index 0000000..15c18f23 --- /dev/null +++ b/components/autofill_assistant/android/internal/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/GmsIntegrator.java
@@ -0,0 +1,36 @@ +// Copyright 2021 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.autofill_assistant.user_data; + +import android.app.Activity; + +import org.chromium.base.Callback; +import org.chromium.ui.base.WindowAndroid; + +/** + * Represents the interface to integrate with GMS's systems. + * + * <p>Warning: do not rename this class or change the signature of the non-private methods + * (including constructor) without adapting the associated upstream code. + */ +public class GmsIntegrator { + public GmsIntegrator(String email, Activity activity) { + // Do nothing. + } + + public void launchAccountIntent( + int screenId, WindowAndroid windowAndroid, Callback<Boolean> callback) { + callback.onResult(false); + } + + public void launchAddInstrumentIntent( + byte[] actionToken, WindowAndroid windowAndroid, Callback<Boolean> callback) { + callback.onResult(false); + } + + public void getClientToken(Callback<byte[]> callback) { + callback.onResult(null); + } +}
diff --git a/components/autofill_assistant/browser/client.h b/components/autofill_assistant/browser/client.h index b29ba48..f331c3f 100644 --- a/components/autofill_assistant/browser/client.h +++ b/components/autofill_assistant/browser/client.h
@@ -7,6 +7,7 @@ #include <string> +#include "base/callback.h" #include "components/autofill_assistant/browser/device_context.h" #include "components/autofill_assistant/browser/metrics.h" #include "components/autofill_assistant/browser/service/service.h" @@ -84,6 +85,10 @@ virtual ClientContextProto::ScreenOrientation GetScreenOrientation() const = 0; + // Returns the payments client token through the |callback|. + virtual void FetchPaymentsClientToken( + base::OnceCallback<void(const std::string&)> callback) = 0; + // Returns current WebContents. virtual content::WebContents* GetWebContents() const = 0;
diff --git a/components/autofill_assistant/browser/client_context.cc b/components/autofill_assistant/browser/client_context.cc index e3cbab6..962d06c 100644 --- a/components/autofill_assistant/browser/client_context.cc +++ b/components/autofill_assistant/browser/client_context.cc
@@ -78,6 +78,11 @@ proto_.set_screen_orientation(client_->GetScreenOrientation()); } +void ClientContextImpl::SetPaymentsClientToken( + const std::string& client_token) { + proto_.set_payments_client_token(client_token); +} + ClientContextProto ClientContextImpl::AsProto() const { return proto_; }
diff --git a/components/autofill_assistant/browser/client_context.h b/components/autofill_assistant/browser/client_context.h index e6cede8..fa3a1728 100644 --- a/components/autofill_assistant/browser/client_context.h +++ b/components/autofill_assistant/browser/client_context.h
@@ -18,6 +18,8 @@ virtual ~ClientContext() = default; // Updates the client context based on the current state of the client. virtual void Update(const TriggerContext& trigger_context) = 0; + // Updates the payments client token. This is not part of the normal update. + virtual void SetPaymentsClientToken(const std::string& client_token); // Returns the proto representation of this client context. virtual ClientContextProto AsProto() const = 0; }; @@ -29,6 +31,7 @@ ClientContextImpl(const Client* client); ~ClientContextImpl() override = default; void Update(const TriggerContext& trigger_context) override; + void SetPaymentsClientToken(const std::string& client_token) override; ClientContextProto AsProto() const override; private: @@ -42,6 +45,7 @@ EmptyClientContext() = default; ~EmptyClientContext() override = default; void Update(const TriggerContext& trigger_context) override {} + void SetPaymentsClientToken(const std::string& client_token) override {} ClientContextProto AsProto() const override; };
diff --git a/components/autofill_assistant/browser/features.cc b/components/autofill_assistant/browser/features.cc index 7a2f790..725880d 100644 --- a/components/autofill_assistant/browser/features.cc +++ b/components/autofill_assistant/browser/features.cc
@@ -42,6 +42,12 @@ "AutofillAssistantDisableProactiveHelpTiedToMSBB", base::FEATURE_ENABLED_BY_DEFAULT}; +// Get a payments client token from GMS. This is an emergency off-switch in +// case calling this by default has a negative impact. +const base::Feature kAutofillAssistantGetPaymentsClientToken{ + "AutofillAssistantGetPaymentsClientToken", + base::FEATURE_ENABLED_BY_DEFAULT}; + // Whether Autofill Assistant should enable in-CCT triggering, i.e., requesting // and showing trigger scripts in CCTs without explicit user request. This // requires also specifying valid URL heuristics via
diff --git a/components/autofill_assistant/browser/features.h b/components/autofill_assistant/browser/features.h index 4a9e63c..4b8179b7 100644 --- a/components/autofill_assistant/browser/features.h +++ b/components/autofill_assistant/browser/features.h
@@ -20,6 +20,7 @@ extern const base::Feature kAutofillAssistantDirectActions; extern const base::Feature kAutofillAssistantDisableOnboardingFlow; extern const base::Feature kAutofillAssistantDisableProactiveHelpTiedToMSBB; +extern const base::Feature kAutofillAssistantGetPaymentsClientToken; extern const base::Feature kAutofillAssistantInCCTTriggering; extern const base::Feature kAutofillAssistantInTabTriggering; extern const base::Feature kAutofillAssistantFeedbackChip;
diff --git a/components/autofill_assistant/browser/mock_client.h b/components/autofill_assistant/browser/mock_client.h index cb093fe..102071c 100644 --- a/components/autofill_assistant/browser/mock_client.h +++ b/components/autofill_assistant/browser/mock_client.h
@@ -5,6 +5,7 @@ #ifndef COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_MOCK_CLIENT_H_ #define COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_MOCK_CLIENT_H_ +#include "base/callback.h" #include "components/autofill/core/browser/personal_data_manager.h" #include "components/autofill_assistant/browser/client.h" #include "components/autofill_assistant/browser/device_context.h" @@ -44,6 +45,8 @@ MOCK_METHOD0(DestroyUI, void()); MOCK_CONST_METHOD0(HasHadUI, bool()); MOCK_CONST_METHOD0(IsFirstTimeTriggerScriptUser, bool()); + MOCK_METHOD1(FetchPaymentsClientToken, + void(base::OnceCallback<void(const std::string&)>)); private: std::unique_ptr<MockPersonalDataManager> mock_personal_data_manager_;
diff --git a/components/autofill_assistant/browser/mock_client_context.h b/components/autofill_assistant/browser/mock_client_context.h index cc9a593c..69a09db 100644 --- a/components/autofill_assistant/browser/mock_client_context.h +++ b/components/autofill_assistant/browser/mock_client_context.h
@@ -19,6 +19,7 @@ ~MockClientContext() override; MOCK_METHOD1(Update, void(const TriggerContext& trigger_context)); + MOCK_METHOD1(SetPaymentsClientToken, void(const std::string&)); MOCK_CONST_METHOD0(AsProto, ClientContextProto()); };
diff --git a/components/autofill_assistant/browser/service.proto b/components/autofill_assistant/browser/service.proto index e1c078e..fb1d448 100644 --- a/components/autofill_assistant/browser/service.proto +++ b/components/autofill_assistant/browser/service.proto
@@ -26,6 +26,7 @@ } // Context contains client environment details. +// Next ID: 20 message ClientContextProto { message Chrome { optional string chrome_version = 1; @@ -122,6 +123,9 @@ LANDSCAPE = 2; } optional ScreenOrientation screen_orientation = 16; + + // An opaque client token for interactions with payments' systems. + optional bytes payments_client_token = 19; } // Get the list of scripts that can potentially be run on a url. @@ -508,6 +512,8 @@ // The exact URL on which the script was initially started. optional string url = 2; optional PolicyType policy = 3; + + reserved 4 to 12; } optional QueryProto query = 3; @@ -515,6 +521,8 @@ // Specify a bundle and version to run. optional ScriptStoreConfig script_store_config = 6; + + reserved 1, 4, 5, 7 to 11; } message RoundtripTimingStats {
diff --git a/components/autofill_assistant/browser/service/mock_service.cc b/components/autofill_assistant/browser/service/mock_service.cc index 0b6ce7b..a0bb4ba3 100644 --- a/components/autofill_assistant/browser/service/mock_service.cc +++ b/components/autofill_assistant/browser/service/mock_service.cc
@@ -11,7 +11,8 @@ namespace autofill_assistant { MockService::MockService() - : ServiceImpl(/* request_sender = */ nullptr, + : ServiceImpl(/* client= */ nullptr, + /* request_sender = */ nullptr, /* script_server_url = */ GURL("http://fake"), /* action_server_url = */ GURL("http://fake"), /* client_context = */ nullptr) {}
diff --git a/components/autofill_assistant/browser/service/service_impl.cc b/components/autofill_assistant/browser/service/service_impl.cc index fd3db45..e86d52a 100644 --- a/components/autofill_assistant/browser/service/service_impl.cc +++ b/components/autofill_assistant/browser/service/service_impl.cc
@@ -10,8 +10,10 @@ #include "base/bind.h" #include "base/command_line.h" +#include "base/feature_list.h" #include "base/strings/strcat.h" #include "components/autofill_assistant/browser/client.h" +#include "components/autofill_assistant/browser/features.h" #include "components/autofill_assistant/browser/protocol_utils.h" #include "components/autofill_assistant/browser/service/api_key_fetcher.h" #include "components/autofill_assistant/browser/service/service_request_sender_impl.h" @@ -50,16 +52,19 @@ /* disable_auth_if_no_access_token = */ true); return std::make_unique<ServiceImpl>( - std::move(request_sender), url_fetcher.GetSupportsScriptEndpoint(), + client, std::move(request_sender), + url_fetcher.GetSupportsScriptEndpoint(), url_fetcher.GetNextActionsEndpoint(), std::make_unique<ClientContextImpl>(client)); } -ServiceImpl::ServiceImpl(std::unique_ptr<ServiceRequestSender> request_sender, +ServiceImpl::ServiceImpl(Client* client, + std::unique_ptr<ServiceRequestSender> request_sender, const GURL& script_server_url, const GURL& action_server_url, std::unique_ptr<ClientContext> client_context) - : request_sender_(std::move(request_sender)), + : client_(client), + request_sender_(std::move(request_sender)), script_server_url_(script_server_url), script_action_server_url_(action_server_url), client_context_(std::move(client_context)) { @@ -94,6 +99,41 @@ ResponseCallback callback) { DCHECK(!script_path.empty()); client_context_->Update(trigger_context); + if (client_context_->AsProto().payments_client_token().empty() && + base::FeatureList::IsEnabled( + features::kAutofillAssistantGetPaymentsClientToken)) { + client_->FetchPaymentsClientToken(base::BindOnce( + &ServiceImpl::OnFetchPaymentsClientToken, + weak_ptr_factory_.GetWeakPtr(), script_path, url, + std::make_unique<TriggerContext>( + std::vector<const TriggerContext*>{&trigger_context}), + global_payload, script_payload, std::move(callback))); + } else { + SendGetActions(script_path, url, trigger_context, global_payload, + script_payload, std::move(callback)); + } +} + +void ServiceImpl::OnFetchPaymentsClientToken( + const std::string& script_path, + const GURL& url, + std::unique_ptr<TriggerContext> trigger_context, + const std::string& global_payload, + const std::string& script_payload, + ResponseCallback callback, + const std::string& client_token) { + DCHECK(!client_token.empty()); + client_context_->SetPaymentsClientToken(client_token); + SendGetActions(script_path, url, *trigger_context, global_payload, + script_payload, std::move(callback)); +} + +void ServiceImpl::SendGetActions(const std::string& script_path, + const GURL& url, + const TriggerContext& trigger_context, + const std::string& global_payload, + const std::string& script_payload, + ResponseCallback callback) { request_sender_->SendRequest( script_action_server_url_, ProtocolUtils::CreateInitialScriptActionsRequest(
diff --git a/components/autofill_assistant/browser/service/service_impl.h b/components/autofill_assistant/browser/service/service_impl.h index 75536c48..69a2c5b1 100644 --- a/components/autofill_assistant/browser/service/service_impl.h +++ b/components/autofill_assistant/browser/service/service_impl.h
@@ -47,7 +47,8 @@ Client* client, const ServerUrlFetcher& url_fetcher); - ServiceImpl(std::unique_ptr<ServiceRequestSender> request_sender, + ServiceImpl(Client* client, + std::unique_ptr<ServiceRequestSender> request_sender, const GURL& script_server_url, const GURL& action_server_url, std::unique_ptr<ClientContext> client_context); @@ -82,6 +83,23 @@ const ScriptStoreConfig& script_store_config) override; private: + void OnFetchPaymentsClientToken( + const std::string& script_path, + const GURL& url, + std::unique_ptr<TriggerContext> trigger_context, + const std::string& global_payload, + const std::string& script_payload, + ResponseCallback callback, + const std::string& client_token); + void SendGetActions(const std::string& script_path, + const GURL& url, + const TriggerContext& trigger_context, + const std::string& global_payload, + const std::string& script_payload, + ResponseCallback callback); + + Client* const client_; + // The request sender responsible for communicating with a remote endpoint. std::unique_ptr<ServiceRequestSender> request_sender_;
diff --git a/components/autofill_assistant/browser/service/service_impl_unittest.cc b/components/autofill_assistant/browser/service/service_impl_unittest.cc index 32d0c34..267f85d9 100644 --- a/components/autofill_assistant/browser/service/service_impl_unittest.cc +++ b/components/autofill_assistant/browser/service/service_impl_unittest.cc
@@ -7,6 +7,9 @@ #include "base/memory/raw_ptr.h" #include "base/test/gmock_callback_support.h" #include "base/test/mock_callback.h" +#include "base/test/scoped_feature_list.h" +#include "components/autofill_assistant/browser/features.h" +#include "components/autofill_assistant/browser/mock_client.h" #include "components/autofill_assistant/browser/mock_client_context.h" #include "components/autofill_assistant/browser/service/mock_service_request_sender.h" #include "components/autofill_assistant/browser/service/service.h" @@ -27,6 +30,8 @@ const char kScriptServerUrl[] = "https://www.fake.backend.com/script_server"; const char kActionServerUrl[] = "https://www.fake.backend.com/action_server"; +// TODO(b/207744539): In all tests, check that protocol utils is called with +// the correct parameters. class ServiceImplTest : public testing::Test { public: ServiceImplTest() { @@ -38,41 +43,41 @@ mock_request_sender_ = mock_request_sender.get(); service_ = std::make_unique<ServiceImpl>( - std::move(mock_request_sender), GURL(kScriptServerUrl), + &mock_client_, std::move(mock_request_sender), GURL(kScriptServerUrl), GURL(kActionServerUrl), std::move(mock_client_context)); } ~ServiceImplTest() override = default; protected: base::MockCallback<Service::ResponseCallback> mock_response_callback_; + NiceMock<MockClient> mock_client_; raw_ptr<NiceMock<MockClientContext>> mock_client_context_; raw_ptr<NiceMock<MockServiceRequestSender>> mock_request_sender_; std::unique_ptr<ServiceImpl> service_; }; TEST_F(ServiceImplTest, GetScriptsForUrl) { - EXPECT_CALL(*mock_client_context_, Update).Times(1); - // TODO(b/158998456), here and in other tests of service_impl: check that - // protocol utils is called with the correct parameters. + EXPECT_CALL(*mock_client_context_, Update); EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kScriptServerUrl), _, _)) .WillOnce(RunOnceCallback<2>(net::HTTP_OK, std::string("response"))); EXPECT_CALL(mock_response_callback_, - Run(net::HTTP_OK, std::string("response"))) - .Times(1); + Run(net::HTTP_OK, std::string("response"))); service_->GetScriptsForUrl(GURL("https://www.example.com"), TriggerContext(), mock_response_callback_.Get()); } TEST_F(ServiceImplTest, GetActions) { - EXPECT_CALL(*mock_client_context_, Update).Times(1); + EXPECT_CALL(*mock_client_context_, Update); + EXPECT_CALL(mock_client_, FetchPaymentsClientToken) + .WillOnce(RunOnceCallback<0>("token")); + EXPECT_CALL(*mock_client_context_, SetPaymentsClientToken("token")); EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kActionServerUrl), _, _)) .WillOnce(RunOnceCallback<2>(net::HTTP_OK, std::string("response"))); EXPECT_CALL(mock_response_callback_, - Run(net::HTTP_OK, std::string("response"))) - .Times(1); + Run(net::HTTP_OK, std::string("response"))); service_->GetActions( std::string("fake_script_path"), GURL("https://www.example.com"), @@ -81,7 +86,10 @@ } TEST_F(ServiceImplTest, GetActionsForwardsScriptStoreConfig) { - EXPECT_CALL(*mock_client_context_, Update).Times(1); + EXPECT_CALL(*mock_client_context_, Update); + EXPECT_CALL(mock_client_, FetchPaymentsClientToken) + .WillOnce(RunOnceCallback<0>("token")); + EXPECT_CALL(*mock_client_context_, SetPaymentsClientToken("token")); ScriptActionRequestProto expected_get_actions; ScriptStoreConfig* config = expected_get_actions.mutable_initial_request() @@ -114,14 +122,54 @@ .bundle_version()); } -TEST_F(ServiceImplTest, GetNextActions) { - EXPECT_CALL(*mock_client_context_, Update).Times(1); +TEST_F(ServiceImplTest, GetActionsWithoutClientToken) { + base::test::ScopedFeatureList feature_list; + feature_list.InitAndDisableFeature( + features::kAutofillAssistantGetPaymentsClientToken); + + EXPECT_CALL(*mock_client_context_, Update); + EXPECT_CALL(mock_client_, FetchPaymentsClientToken).Times(0); + EXPECT_CALL(*mock_client_context_, SetPaymentsClientToken).Times(0); EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kActionServerUrl), _, _)) .WillOnce(RunOnceCallback<2>(net::HTTP_OK, std::string("response"))); EXPECT_CALL(mock_response_callback_, - Run(net::HTTP_OK, std::string("response"))) - .Times(1); + Run(net::HTTP_OK, std::string("response"))); + + service_->GetActions( + std::string("fake_script_path"), GURL("https://www.example.com"), + TriggerContext(), std::string("fake_global_payload"), + std::string("fake_script_payload"), mock_response_callback_.Get()); +} + +TEST_F(ServiceImplTest, GetActionsDoesNotReloadClientToken) { + ClientContextProto client_context_proto; + client_context_proto.set_payments_client_token("token"); + ON_CALL(*mock_client_context_, AsProto) + .WillByDefault(Return(client_context_proto)); + + EXPECT_CALL(*mock_client_context_, Update); + EXPECT_CALL(mock_client_, FetchPaymentsClientToken).Times(0); + EXPECT_CALL(*mock_client_context_, SetPaymentsClientToken).Times(0); + EXPECT_CALL(*mock_request_sender_, + OnSendRequest(GURL(kActionServerUrl), _, _)) + .WillOnce(RunOnceCallback<2>(net::HTTP_OK, std::string("response"))); + EXPECT_CALL(mock_response_callback_, + Run(net::HTTP_OK, std::string("response"))); + + service_->GetActions( + std::string("fake_script_path"), GURL("https://www.example.com"), + TriggerContext(), std::string("fake_global_payload"), + std::string("fake_script_payload"), mock_response_callback_.Get()); +} + +TEST_F(ServiceImplTest, GetNextActions) { + EXPECT_CALL(*mock_client_context_, Update); + EXPECT_CALL(*mock_request_sender_, + OnSendRequest(GURL(kActionServerUrl), _, _)) + .WillOnce(RunOnceCallback<2>(net::HTTP_OK, std::string("response"))); + EXPECT_CALL(mock_response_callback_, + Run(net::HTTP_OK, std::string("response"))); service_->GetNextActions( TriggerContext(), std::string("fake_previous_global_payload"),
diff --git a/components/browser_ui/site_settings/OWNERS b/components/browser_ui/site_settings/OWNERS index a8321c8..684b1af 100644 --- a/components/browser_ui/site_settings/OWNERS +++ b/components/browser_ui/site_settings/OWNERS
@@ -3,3 +3,5 @@ andypaicu@chromium.org dullweber@chromium.org eokoyomon@chromium.org + +per-file *AutoDarkMetrics.java=file://chrome/browser/ui/android/night_mode/OWNERS
diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/browser_ui/site_settings/android/BUILD.gn index 624ba958..9452acd 100644 --- a/components/browser_ui/site_settings/android/BUILD.gn +++ b/components/browser_ui/site_settings/android/BUILD.gn
@@ -36,6 +36,7 @@ sources = [ "java/src/org/chromium/components/browser_ui/site_settings/AddExceptionPreference.java", "java/src/org/chromium/components/browser_ui/site_settings/AllSiteSettings.java", + "java/src/org/chromium/components/browser_ui/site_settings/AutoDarkMetrics.java", "java/src/org/chromium/components/browser_ui/site_settings/ChosenObjectInfo.java", "java/src/org/chromium/components/browser_ui/site_settings/ChosenObjectSettings.java", "java/src/org/chromium/components/browser_ui/site_settings/ClearWebsiteStorage.java",
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/AutoDarkMetrics.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/AutoDarkMetrics.java new file mode 100644 index 0000000..5bbd641 --- /dev/null +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/AutoDarkMetrics.java
@@ -0,0 +1,53 @@ +// Copyright 2021 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.components.browser_ui.site_settings; + +import androidx.annotation.IntDef; + +import org.chromium.base.metrics.RecordHistogram; +import org.chromium.components.content_settings.ContentSettingsType; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * Metrics recording functions for {@link ContentSettingsType.AUTO_DARK_WEB_CONTENT}. + */ +public final class AutoDarkMetrics { + /** + * Source from which auto dark web content settings changed. This includes both changes to the + * global user settings and the site exceptions. + * + * This is used for histograms and should therefore be treated as append-only. + * See AndroidAutoDarkModeSettingsChangeSource in tools/metrics/histograms/enums.xml. + */ + @IntDef({AutoDarkSettingsChangeSource.THEME_SETTINGS, + AutoDarkSettingsChangeSource.SITE_SETTINGS_GLOBAL, + AutoDarkSettingsChangeSource.APP_MENU, + AutoDarkSettingsChangeSource.SITE_SETTINGS_EXCEPTION_LIST}) + @Retention(RetentionPolicy.SOURCE) + public @interface AutoDarkSettingsChangeSource { + int THEME_SETTINGS = 0; + int SITE_SETTINGS_GLOBAL = 1; + int APP_MENU = 2; + int SITE_SETTINGS_EXCEPTION_LIST = 3; + + int NUM_ENTRIES = 4; + } + + /** + * Records the source that changes the auto dark web content settings. + * @param source The {@link AutoDarkSettingsChangeSource} that changes the auto dark web content + * settings. + * @param enabled Whether auto dark is enabled after the change. + */ + public static void recordAutoDarkSettingsChangeSource( + @AutoDarkSettingsChangeSource int source, boolean enabled) { + String histogram = "Android.DarkTheme.AutoDarkMode.SettingsChangeSource." + + (enabled ? "Enabled" : "Disabled"); + RecordHistogram.recordEnumeratedHistogram( + histogram, source, AutoDarkSettingsChangeSource.NUM_ENTRIES); + } +}
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java index f277e52..f7f97e7 100644 --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java
@@ -48,6 +48,7 @@ import org.chromium.components.browser_ui.settings.ManagedPreferencesUtils; import org.chromium.components.browser_ui.settings.SearchUtils; import org.chromium.components.browser_ui.settings.SettingsUtils; +import org.chromium.components.browser_ui.site_settings.AutoDarkMetrics.AutoDarkSettingsChangeSource; import org.chromium.components.browser_ui.site_settings.FourStateCookieSettingsPreference.CookieSettingsState; import org.chromium.components.content_settings.ContentSettingValues; import org.chromium.components.content_settings.ContentSettingsType; @@ -92,32 +93,6 @@ */ public static final String EXTRA_SELECTED_DOMAINS = "selected_domains"; - /** - * Observer that monitors changes for {@link SiteSettingsCategory.Type.AUTO_DARK_WEB_CONTENT}. - * Used to receive updates that //component/site_settings might not have access to. - * - * This is a temporary workaround until JNI content setting observer is available thus is not a - * recommended pattern to follow. - * TODO(https://crbug.com/1252504): Remove when java content_settings_observer is available. - */ - public interface AutoDarkSiteSettingObserver { - /** - * Called when {@link SiteSettingsCategory.Type.AUTO_DARK_WEB_CONTENT} changed in its - * default value (by the toggle). - * @param isEnabled The new state of the default value. - */ - void onDefaultValueChanged(boolean isEnabled); - - /** - * Called when {@link SiteSettingsCategory.Type.AUTO_DARK_WEB_CONTENT} as a site exception - * is being added or removed. - * @param isAdded True if a site exception is being added; False otherwise. - */ - void onSiteExceptionChanged(boolean isAdded); - } - - private static @Nullable AutoDarkSiteSettingObserver sAutoDarkSiteSettingsObserver; - // The list that contains preferences. private RecyclerView mListView; // The item for searching the list of items. @@ -214,15 +189,6 @@ } } - /** - * Set the observer that looks at {@link SiteSettingsCategory.Type.AUTO_DARK_WEB_CONTENT} - * @param observer - */ - public static void setAutoDarkSiteSettingsObserver( - @Nullable AutoDarkSiteSettingObserver observer) { - sAutoDarkSiteSettingsObserver = observer; - } - private void getInfoForOrigins() { if (!mCategory.enabledInAndroid(getActivity())) { // No need to fetch any data if we're not going to show it, but we do need to update @@ -511,7 +477,8 @@ if (type == SiteSettingsCategory.Type.NOTIFICATIONS) { updateNotificationsSecondaryControls(); } else if (type == SiteSettingsCategory.Type.AUTO_DARK_WEB_CONTENT) { - sAutoDarkSiteSettingsObserver.onDefaultValueChanged((boolean) newValue); + AutoDarkMetrics.recordAutoDarkSettingsChangeSource( + AutoDarkSettingsChangeSource.SITE_SETTINGS_GLOBAL, (boolean) newValue); } else if (type == SiteSettingsCategory.Type.REQUEST_DESKTOP_SITE) { recordSiteLayoutChanged((boolean) newValue); } @@ -687,8 +654,6 @@ } else { RecordUserAction.record("SoundContentSetting.UnmuteBy.PatternException"); } - } else if (mCategory.showSites(SiteSettingsCategory.Type.AUTO_DARK_WEB_CONTENT)) { - sAutoDarkSiteSettingsObserver.onSiteExceptionChanged(true); } } @@ -1155,8 +1120,9 @@ if (mCategory.showSites( SiteSettingsCategory.Type.AUTO_DARK_WEB_CONTENT)) { - sAutoDarkSiteSettingsObserver.onSiteExceptionChanged( - /*isAdded=*/false); + AutoDarkMetrics.recordAutoDarkSettingsChangeSource( + AutoDarkSettingsChangeSource.SITE_SETTINGS_EXCEPTION_LIST, + false); } getInfoForOrigins();
diff --git a/components/certificate_matching/OWNERS b/components/certificate_matching/OWNERS index be4c2b35..545a983 100644 --- a/components/certificate_matching/OWNERS +++ b/components/certificate_matching/OWNERS
@@ -1,2 +1,2 @@ -file://chromeos/policy/OWNERS +file://ash/components/policy/OWNERS file://chromeos/network/OWNERS
diff --git a/components/omnibox/browser/actions/omnibox_pedal_concepts.h b/components/omnibox/browser/actions/omnibox_pedal_concepts.h index 342ed30f..c7ac803 100644 --- a/components/omnibox/browser/actions/omnibox_pedal_concepts.h +++ b/components/omnibox/browser/actions/omnibox_pedal_concepts.h
@@ -10,7 +10,7 @@ // This value is generated during Pedal concept data processing, and written // to all data files as well as the source code here to ensure synchrony. // The runtime loaded data must match this version exactly or it won't load. -constexpr int OMNIBOX_PEDAL_CONCEPTS_DATA_VERSION = 16122060; +constexpr int OMNIBOX_PEDAL_CONCEPTS_DATA_VERSION = 16140733; // Unique identifiers for Pedals, used to bind loaded data to implementations. // Also used in the Omnibox.SuggestionUsed.Pedal histogram. Do not remove or
diff --git a/components/omnibox/browser/shortcuts_provider_unittest.cc b/components/omnibox/browser/shortcuts_provider_unittest.cc index e80bca6..6a5f30a 100644 --- a/components/omnibox/browser/shortcuts_provider_unittest.cc +++ b/components/omnibox/browser/shortcuts_provider_unittest.cc
@@ -211,6 +211,10 @@ int CalculateScore(const std::string& terms, const ShortcutsDatabase::Shortcut& shortcut); + // ScopedFeatureList needs to be defined before TaskEnvironment, so that it is + // destroyed after TaskEnvironment, to prevent data races on the + // ScopedFeatureList. + base::test::ScopedFeatureList scoped_feature_list_; base::test::TaskEnvironment task_environment_; std::unique_ptr<FakeAutocompleteProviderClient> client_; scoped_refptr<ShortcutsProvider> provider_; @@ -508,11 +512,19 @@ EXPECT_LT(score_more_popular_two_weeks_old, kMaxScore); } -TEST_F(ShortcutsProviderTest, CalculateScore_LongTextFeature) { - base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitAndEnableFeature( - omnibox::kPreserveLongerShortcutsText); +class ShortcutsProviderPreserveLongerShortcutsTest + : public ShortcutsProviderTest { + public: + ShortcutsProviderPreserveLongerShortcutsTest() { + // `scoped_feature_list_` needs to be initialized as early as possible, to + // avoid data races caused by tasks on other threads accessing it. + scoped_feature_list_.InitAndEnableFeature( + omnibox::kPreserveLongerShortcutsText); + } +}; +TEST_F(ShortcutsProviderPreserveLongerShortcutsTest, + CalculateScore_LongTextFeature) { auto long_shortcut = MakeShortcutWithText(u"test Yerevan"); // Maximal score. const int kMaxScore = CalculateScore("test Yerevan", long_shortcut);
diff --git a/components/omnibox/resources/omnibox_pedal_concepts.json b/components/omnibox/resources/omnibox_pedal_concepts.json index 9fd0618..2309c31 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts.json +++ b/components/omnibox/resources/omnibox_pedal_concepts.json
@@ -1,7 +1,7 @@ { "schema": "pedals_translation_model", "schema_version": 3, - "time_generated": "2021-11-11T20:59:04.692Z", + "time_generated": "2021-11-24T19:46:49.634Z", "primary_language_code": "en", "pedal_definitions": [ { @@ -1005,7 +1005,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -1026,7 +1026,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -1047,7 +1047,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -1068,7 +1068,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -1110,7 +1110,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -1131,7 +1131,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -1152,7 +1152,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -1173,7 +1173,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -1194,7 +1194,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -1215,7 +1215,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -1236,7 +1236,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -1257,7 +1257,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -1278,7 +1278,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -1989,7 +1989,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -2010,7 +2010,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -2031,7 +2031,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -2052,7 +2052,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -2094,7 +2094,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -2115,7 +2115,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -2136,7 +2136,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -2157,7 +2157,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -2178,7 +2178,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -2199,7 +2199,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -2220,7 +2220,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -2241,7 +2241,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -2262,7 +2262,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -3127,7 +3127,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -3148,7 +3148,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -3169,7 +3169,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -3190,7 +3190,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -3232,7 +3232,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -3253,7 +3253,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -3274,7 +3274,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -3295,7 +3295,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -3316,7 +3316,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -3337,7 +3337,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -3358,7 +3358,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -3379,7 +3379,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -3400,7 +3400,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -4098,7 +4098,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -4119,7 +4119,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -4140,7 +4140,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -4161,7 +4161,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -4203,7 +4203,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -4224,7 +4224,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -4245,7 +4245,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -4266,7 +4266,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -4287,7 +4287,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -4308,7 +4308,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -4329,7 +4329,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -4350,7 +4350,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -4371,7 +4371,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -5132,7 +5132,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -5153,7 +5153,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -5174,7 +5174,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -5195,7 +5195,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -5237,7 +5237,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -5258,7 +5258,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -5279,7 +5279,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -5300,7 +5300,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -5321,7 +5321,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -5342,7 +5342,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -5363,7 +5363,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -5384,7 +5384,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -5405,7 +5405,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -6104,7 +6104,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -6125,7 +6125,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -6146,7 +6146,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -6167,7 +6167,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -6209,7 +6209,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -6230,7 +6230,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -6251,7 +6251,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -6272,7 +6272,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -6293,7 +6293,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -6314,7 +6314,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -6335,7 +6335,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -6356,7 +6356,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -6377,7 +6377,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -7082,7 +7082,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -7103,7 +7103,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -7124,7 +7124,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -7145,7 +7145,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -7187,7 +7187,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -7208,7 +7208,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -7229,7 +7229,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -7250,7 +7250,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -7271,7 +7271,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -7292,7 +7292,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -7313,7 +7313,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -7334,7 +7334,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -7355,7 +7355,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -8060,7 +8060,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -8081,7 +8081,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -8102,7 +8102,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -8123,7 +8123,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -8165,7 +8165,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -8186,7 +8186,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -8207,7 +8207,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -8228,7 +8228,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -8249,7 +8249,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -8270,7 +8270,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -8291,7 +8291,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -8312,7 +8312,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -8333,7 +8333,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -9040,7 +9040,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -9061,7 +9061,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -9082,7 +9082,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -9103,7 +9103,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -9145,7 +9145,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -9166,7 +9166,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -9187,7 +9187,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -9208,7 +9208,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -9229,7 +9229,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -9250,7 +9250,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -9271,7 +9271,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -9292,7 +9292,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -9313,7 +9313,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -13420,7 +13420,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -13441,7 +13441,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -13462,7 +13462,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -13483,7 +13483,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -13525,7 +13525,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -13546,7 +13546,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -13567,7 +13567,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -13588,7 +13588,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -13609,7 +13609,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -13630,7 +13630,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -13651,7 +13651,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -13672,7 +13672,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -13693,7 +13693,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -14395,7 +14395,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -14416,7 +14416,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -14437,7 +14437,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -14458,7 +14458,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -14500,7 +14500,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -14521,7 +14521,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -14542,7 +14542,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -14563,7 +14563,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -14584,7 +14584,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -14605,7 +14605,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -14626,7 +14626,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -14647,7 +14647,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -14668,7 +14668,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -15366,7 +15366,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -15387,7 +15387,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -15408,7 +15408,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -15429,7 +15429,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -15471,7 +15471,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -15492,7 +15492,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -15513,7 +15513,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -15534,7 +15534,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -15555,7 +15555,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -15576,7 +15576,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -15597,7 +15597,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -15618,7 +15618,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -15639,7 +15639,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -16338,7 +16338,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -16359,7 +16359,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -16380,7 +16380,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -16401,7 +16401,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -16443,7 +16443,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -16464,7 +16464,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -16485,7 +16485,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -16506,7 +16506,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -16527,7 +16527,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -16548,7 +16548,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -16569,7 +16569,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -16590,7 +16590,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -16611,7 +16611,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -17306,7 +17306,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -17327,7 +17327,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -17348,7 +17348,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -17369,7 +17369,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -17411,7 +17411,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -17432,7 +17432,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -17453,7 +17453,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -17474,7 +17474,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -17495,7 +17495,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -17516,7 +17516,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -17537,7 +17537,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -17558,7 +17558,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -17579,7 +17579,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -18284,7 +18284,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -18305,7 +18305,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -18326,7 +18326,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -18347,7 +18347,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -18389,7 +18389,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -18410,7 +18410,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -18431,7 +18431,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -18452,7 +18452,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -18473,7 +18473,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -18494,7 +18494,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -18515,7 +18515,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -18536,7 +18536,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -18557,7 +18557,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -19330,7 +19330,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -19351,7 +19351,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -19372,7 +19372,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -19393,7 +19393,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -19435,7 +19435,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -19456,7 +19456,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -19477,7 +19477,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -19498,7 +19498,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -19519,7 +19519,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -19540,7 +19540,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -19561,7 +19561,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -19582,7 +19582,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -19603,7 +19603,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -20301,7 +20301,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -20322,7 +20322,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -20343,7 +20343,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -20364,7 +20364,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -20406,7 +20406,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -20427,7 +20427,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -20448,7 +20448,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -20469,7 +20469,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -20490,7 +20490,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -20511,7 +20511,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -20532,7 +20532,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -20553,7 +20553,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -20574,7 +20574,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -21306,7 +21306,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -21327,7 +21327,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -21348,7 +21348,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -21369,7 +21369,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -21411,7 +21411,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -21432,7 +21432,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -21453,7 +21453,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -21474,7 +21474,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -21495,7 +21495,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -21516,7 +21516,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -21537,7 +21537,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -21558,7 +21558,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -21579,7 +21579,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -22283,7 +22283,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -22304,7 +22304,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -22325,7 +22325,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -22346,7 +22346,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -22388,7 +22388,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -22409,7 +22409,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -22430,7 +22430,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -22451,7 +22451,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -22472,7 +22472,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -22493,7 +22493,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -22514,7 +22514,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -22535,7 +22535,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -22556,7 +22556,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -23260,7 +23260,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -23281,7 +23281,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -23302,7 +23302,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -23323,7 +23323,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -23365,7 +23365,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -23386,7 +23386,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -23407,7 +23407,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -23428,7 +23428,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -23449,7 +23449,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -23470,7 +23470,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -23491,7 +23491,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -23512,7 +23512,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -23533,7 +23533,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -24241,7 +24241,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -24262,7 +24262,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -24283,7 +24283,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -24304,7 +24304,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -24346,7 +24346,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -24367,7 +24367,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -24388,7 +24388,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -24409,7 +24409,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -24430,7 +24430,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -24451,7 +24451,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -24472,7 +24472,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -24493,7 +24493,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -24514,7 +24514,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -25207,7 +25207,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -25228,7 +25228,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -25249,7 +25249,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -25270,7 +25270,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -25312,7 +25312,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -25333,7 +25333,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -25354,7 +25354,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -25375,7 +25375,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -25396,7 +25396,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -25417,7 +25417,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -25438,7 +25438,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -25459,7 +25459,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -25480,7 +25480,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -26199,7 +26199,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -26220,7 +26220,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -26241,7 +26241,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -26262,7 +26262,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -26304,7 +26304,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -26325,7 +26325,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -26346,7 +26346,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -26367,7 +26367,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -26388,7 +26388,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -26409,7 +26409,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -26430,7 +26430,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -26451,7 +26451,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -26472,7 +26472,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -27208,7 +27208,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -27229,7 +27229,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -27250,7 +27250,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -27271,7 +27271,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -27313,7 +27313,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -27334,7 +27334,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -27355,7 +27355,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -27376,7 +27376,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -27397,7 +27397,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -27418,7 +27418,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -27439,7 +27439,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -27460,7 +27460,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -27481,7 +27481,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -28182,7 +28182,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -28203,7 +28203,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -28224,7 +28224,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -28245,7 +28245,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -28287,7 +28287,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -28308,7 +28308,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -28329,7 +28329,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -28350,7 +28350,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -28371,7 +28371,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -28392,7 +28392,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -28413,7 +28413,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -28434,7 +28434,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -28455,7 +28455,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -29148,7 +29148,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -29169,7 +29169,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -29190,7 +29190,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -29211,7 +29211,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -29253,7 +29253,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -29274,7 +29274,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -29295,7 +29295,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -29316,7 +29316,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -29337,7 +29337,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -29358,7 +29358,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -29379,7 +29379,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -29400,7 +29400,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -29421,7 +29421,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -30115,7 +30115,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -30136,7 +30136,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -30157,7 +30157,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -30178,7 +30178,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -30220,7 +30220,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -30241,7 +30241,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -30262,7 +30262,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -30283,7 +30283,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -30304,7 +30304,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -30325,7 +30325,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -30346,7 +30346,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -30367,7 +30367,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -30388,7 +30388,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -31087,7 +31087,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -31108,7 +31108,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -31129,7 +31129,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -31150,7 +31150,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -31192,7 +31192,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -31213,7 +31213,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -31234,7 +31234,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -31255,7 +31255,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -31276,7 +31276,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -31297,7 +31297,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -31318,7 +31318,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -31339,7 +31339,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -31360,7 +31360,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -32058,7 +32058,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -32079,7 +32079,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -32100,7 +32100,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -32121,7 +32121,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -32163,7 +32163,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -32184,7 +32184,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -32205,7 +32205,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -32226,7 +32226,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -32247,7 +32247,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -32268,7 +32268,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -32289,7 +32289,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -32310,7 +32310,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -32331,7 +32331,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -33032,7 +33032,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -33053,7 +33053,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -33074,7 +33074,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -33095,7 +33095,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -33137,7 +33137,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -33158,7 +33158,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -33179,7 +33179,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -33200,7 +33200,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -33221,7 +33221,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -33242,7 +33242,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -33263,7 +33263,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -33284,7 +33284,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -33305,7 +33305,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -33997,7 +33997,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -34018,7 +34018,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -34039,7 +34039,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -34060,7 +34060,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -34102,7 +34102,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -34123,7 +34123,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -34144,7 +34144,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -34165,7 +34165,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -34186,7 +34186,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -34207,7 +34207,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -34228,7 +34228,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -34249,7 +34249,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -34270,7 +34270,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -34992,7 +34992,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -35013,7 +35013,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -35034,7 +35034,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -35055,7 +35055,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -35097,7 +35097,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -35118,7 +35118,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -35139,7 +35139,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -35160,7 +35160,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -35181,7 +35181,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -35202,7 +35202,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -35223,7 +35223,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -35244,7 +35244,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -35265,7 +35265,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -36024,7 +36024,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -36045,7 +36045,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -36066,7 +36066,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -36087,7 +36087,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -36129,7 +36129,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -36150,7 +36150,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -36171,7 +36171,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -36192,7 +36192,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -36213,7 +36213,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -36234,7 +36234,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -36255,7 +36255,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -36276,7 +36276,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -36297,7 +36297,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -37002,7 +37002,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -37023,7 +37023,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -37044,7 +37044,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -37065,7 +37065,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -37107,7 +37107,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -37128,7 +37128,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -37149,7 +37149,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -37170,7 +37170,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -37191,7 +37191,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -37212,7 +37212,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -37233,7 +37233,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -37254,7 +37254,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -37275,7 +37275,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -37976,7 +37976,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -37997,7 +37997,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -38018,7 +38018,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -38039,7 +38039,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -38081,7 +38081,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -38102,7 +38102,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -38123,7 +38123,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -38144,7 +38144,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -38165,7 +38165,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -38186,7 +38186,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -38207,7 +38207,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -38228,7 +38228,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -38249,7 +38249,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -38956,7 +38956,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -38977,7 +38977,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -38998,7 +38998,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -39019,7 +39019,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -39061,7 +39061,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -39082,7 +39082,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -39103,7 +39103,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -39124,7 +39124,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -39145,7 +39145,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -39166,7 +39166,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -39187,7 +39187,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -39208,7 +39208,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -39229,7 +39229,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -39942,7 +39942,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -39963,7 +39963,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -39984,7 +39984,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -40005,7 +40005,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -40047,7 +40047,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -40068,7 +40068,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -40089,7 +40089,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -40110,7 +40110,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -40131,7 +40131,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -40152,7 +40152,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -40173,7 +40173,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -40194,7 +40194,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -40215,7 +40215,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -40920,7 +40920,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -40941,7 +40941,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -40962,7 +40962,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -40983,7 +40983,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -41025,7 +41025,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -41046,7 +41046,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -41067,7 +41067,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -41088,7 +41088,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -41109,7 +41109,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -41130,7 +41130,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -41151,7 +41151,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -41172,7 +41172,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -41193,7 +41193,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -41890,7 +41890,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -41911,7 +41911,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -41932,7 +41932,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -41953,7 +41953,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -41995,7 +41995,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -42016,7 +42016,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -42037,7 +42037,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -42058,7 +42058,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -42079,7 +42079,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -42100,7 +42100,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -42121,7 +42121,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -42142,7 +42142,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -42163,7 +42163,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -42964,7 +42964,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -42985,7 +42985,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -43006,7 +43006,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -43027,7 +43027,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -43069,7 +43069,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -43090,7 +43090,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -43111,7 +43111,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -43132,7 +43132,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -43153,7 +43153,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -43174,7 +43174,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -43195,7 +43195,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -43216,7 +43216,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -43237,7 +43237,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -43943,7 +43943,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -43964,7 +43964,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -43985,7 +43985,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -44006,7 +44006,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -44048,7 +44048,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -44069,7 +44069,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -44090,7 +44090,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -44111,7 +44111,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -44132,7 +44132,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -44153,7 +44153,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -44174,7 +44174,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -44195,7 +44195,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -44216,7 +44216,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -44912,7 +44912,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -44933,7 +44933,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -44954,7 +44954,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -44975,7 +44975,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -45017,7 +45017,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -45038,7 +45038,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -45059,7 +45059,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -45080,7 +45080,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -45101,7 +45101,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -45122,7 +45122,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -45143,7 +45143,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -45164,7 +45164,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -45185,7 +45185,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -45894,7 +45894,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -45915,7 +45915,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -45936,7 +45936,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -45957,7 +45957,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -45999,7 +45999,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -46020,7 +46020,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -46041,7 +46041,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -46062,7 +46062,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -46083,7 +46083,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -46104,7 +46104,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -46125,7 +46125,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -46146,7 +46146,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -46167,7 +46167,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -46868,7 +46868,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -46889,7 +46889,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -46910,7 +46910,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -46931,7 +46931,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -46973,7 +46973,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -46994,7 +46994,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -47015,7 +47015,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -47036,7 +47036,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -47057,7 +47057,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -47078,7 +47078,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -47099,7 +47099,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -47120,7 +47120,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -47141,7 +47141,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -47839,7 +47839,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -47860,7 +47860,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -47881,7 +47881,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -47902,7 +47902,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -47944,7 +47944,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -47965,7 +47965,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -47986,7 +47986,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -48007,7 +48007,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -48028,7 +48028,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -48049,7 +48049,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -48070,7 +48070,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -48091,7 +48091,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -48112,7 +48112,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -48837,7 +48837,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -48858,7 +48858,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -48879,7 +48879,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -48900,7 +48900,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -48942,7 +48942,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -48963,7 +48963,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -48984,7 +48984,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -49005,7 +49005,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -49026,7 +49026,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -49047,7 +49047,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -49068,7 +49068,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -49089,7 +49089,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -49110,7 +49110,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -49823,7 +49823,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -49844,7 +49844,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -49865,7 +49865,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -49886,7 +49886,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -49928,7 +49928,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -49949,7 +49949,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -49970,7 +49970,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -49991,7 +49991,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -50012,7 +50012,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -50033,7 +50033,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -50054,7 +50054,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -50075,7 +50075,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -50096,7 +50096,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -50797,7 +50797,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -50818,7 +50818,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -50839,7 +50839,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -50860,7 +50860,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -50902,7 +50902,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -50923,7 +50923,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -50944,7 +50944,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -50965,7 +50965,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -50986,7 +50986,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -51007,7 +51007,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -51028,7 +51028,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -51049,7 +51049,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -51070,7 +51070,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -51771,7 +51771,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -51792,7 +51792,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -51813,7 +51813,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -51834,7 +51834,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -51876,7 +51876,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -51897,7 +51897,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -51918,7 +51918,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -51939,7 +51939,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -51960,7 +51960,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -51981,7 +51981,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -52002,7 +52002,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -52023,7 +52023,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -52044,7 +52044,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -52739,7 +52739,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -52760,7 +52760,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -52781,7 +52781,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -52802,7 +52802,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -52844,7 +52844,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -52865,7 +52865,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -52886,7 +52886,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -52907,7 +52907,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -52928,7 +52928,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -52949,7 +52949,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -52970,7 +52970,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -52991,7 +52991,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "", @@ -53012,7 +53012,7 @@ } ], "cover_cases": [], - "enabled": false, + "enabled": true, "omnibox_ui_strings": { "button_text": "", "description_text": "",
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_am.json b/components/omnibox/resources/omnibox_pedal_concepts_am.json index 3fcf67d5..1becec0e 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_am.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_am.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "chrome", @@ -456,6 +456,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_ar.json b/components/omnibox/resources/omnibox_pedal_concepts_ar.json index 4a178bc..ac8421290 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_ar.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_ar.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "a", @@ -739,6 +739,214 @@ ], "omnibox_ui_strings": null, "url": "https://myaccount.google.com/signinoptions/password?utm_source=ga-chrome-actions&utm_medium=changePW" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 81 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 81 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 81 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 81 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 81 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 81 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 81 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 81 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 81 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 81 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 81 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 81 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 81 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_bg.json b/components/omnibox/resources/omnibox_pedal_concepts_bg.json index 36a333b8..e39999c1 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_bg.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_bg.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "chrome", @@ -1088,6 +1088,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 169 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 169 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 169 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 169 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 169 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 169 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 169 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 169 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 169 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 169 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 169 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 169 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 169 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_bn.json b/components/omnibox/resources/omnibox_pedal_concepts_bn.json index f760ec6..256cca5 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_bn.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_bn.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "chrome", @@ -456,6 +456,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_ca.json b/components/omnibox/resources/omnibox_pedal_concepts_ca.json index a7a616e..0b79f79 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_ca.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_ca.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "a", @@ -657,6 +657,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_cs.json b/components/omnibox/resources/omnibox_pedal_concepts_cs.json index 9a9d86aa..ce82abb 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_cs.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_cs.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "aktualizovat", @@ -461,6 +461,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_da.json b/components/omnibox/resources/omnibox_pedal_concepts_da.json index 443af38..d0a883e9 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_da.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_da.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "adgangskode", @@ -459,6 +459,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_de.json b/components/omnibox/resources/omnibox_pedal_concepts_de.json index dd7ff17a..9b5d1f02 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_de.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_de.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "aktualisieren", @@ -688,6 +688,214 @@ ], "omnibox_ui_strings": null, "url": "https://myaccount.google.com/signinoptions/password?utm_source=ga-chrome-actions&utm_medium=changePW" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 67 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_el.json b/components/omnibox/resources/omnibox_pedal_concepts_el.json index cf71f11..9c05e72 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_el.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_el.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "chrome", @@ -474,6 +474,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 73 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 73 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 73 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 73 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 73 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 73 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 73 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 73 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 73 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 73 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 73 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 73 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 73 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_en-GB.json b/components/omnibox/resources/omnibox_pedal_concepts_en-GB.json index d185a9e..48ee936 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_en-GB.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_en-GB.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "a",
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_en.json b/components/omnibox/resources/omnibox_pedal_concepts_en.json index 4062cc0..35c7ae9 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_en.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_en.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "a",
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_es-419.json b/components/omnibox/resources/omnibox_pedal_concepts_es-419.json index c3dc8ec5..1bd9f8d 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_es-419.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_es-419.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "abrir", @@ -724,6 +724,214 @@ ], "omnibox_ui_strings": null, "url": "https://myaccount.google.com/signinoptions/password?utm_source=ga-chrome-actions&utm_medium=changePW" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_es.json b/components/omnibox/resources/omnibox_pedal_concepts_es.json index 84949db..6130586 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_es.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_es.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "a", @@ -456,6 +456,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_et.json b/components/omnibox/resources/omnibox_pedal_concepts_et.json index 77efd159..4f61ab5 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_et.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_et.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "ajalugu", @@ -442,6 +442,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_fa.json b/components/omnibox/resources/omnibox_pedal_concepts_fa.json index ae3d88a..6437adc 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_fa.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_fa.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "chrome", @@ -472,6 +472,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_fi.json b/components/omnibox/resources/omnibox_pedal_concepts_fi.json index b94cd44b..6636a56 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_fi.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_fi.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "asenna", @@ -449,6 +449,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_fil.json b/components/omnibox/resources/omnibox_pedal_concepts_fil.json index 6ceffa138..b5baf3ff 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_fil.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_fil.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "akin", @@ -480,6 +480,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_fr.json b/components/omnibox/resources/omnibox_pedal_concepts_fr.json index 3bb2ca74..c6c6195 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_fr.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_fr.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "actualise", @@ -992,6 +992,214 @@ ], "omnibox_ui_strings": null, "url": "https://myaccount.google.com/signinoptions/password?utm_source=ga-chrome-actions&utm_medium=changePW" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 99 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 99 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 99 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 99 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 99 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 99 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 99 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 99 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 99 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 99 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 99 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 99 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 99 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_gu.json b/components/omnibox/resources/omnibox_pedal_concepts_gu.json index 7dfbf3e3..a6bb298b 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_gu.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_gu.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "chrome", @@ -440,6 +440,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 62 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_he.json b/components/omnibox/resources/omnibox_pedal_concepts_he.json index ce7494e..46a715a5 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_he.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_he.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "chrome", @@ -579,6 +579,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_hi.json b/components/omnibox/resources/omnibox_pedal_concepts_hi.json index 59dbd98..6d46058 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_hi.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_hi.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "chrome", @@ -452,6 +452,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 64 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 64 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 64 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 64 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 64 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 64 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 64 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 64 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 64 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 64 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 64 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 64 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 64 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_hr.json b/components/omnibox/resources/omnibox_pedal_concepts_hr.json index 7109324..fa5f1ef5 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_hr.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_hr.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "anonimna", @@ -475,6 +475,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 66 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 66 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 66 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 66 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 66 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 66 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 66 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 66 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 66 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 66 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 66 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 66 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 66 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_hu.json b/components/omnibox/resources/omnibox_pedal_concepts_hu.json index 16db4c9..72ff3b0 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_hu.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_hu.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "a", @@ -479,6 +479,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_id.json b/components/omnibox/resources/omnibox_pedal_concepts_id.json index 291e002..1b4ed9d 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_id.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_id.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "bagaimana", @@ -424,6 +424,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 48 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 48 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 48 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 48 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 48 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 48 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 48 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 48 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 48 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 48 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 48 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 48 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 48 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_it.json b/components/omnibox/resources/omnibox_pedal_concepts_it.json index b28a987..f03382ef 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_it.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_it.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "a", @@ -490,6 +490,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 75 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 75 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 75 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 75 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 75 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 75 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 75 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 75 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 75 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 75 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 75 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 75 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 75 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_ja.json b/components/omnibox/resources/omnibox_pedal_concepts_ja.json index 6833c28..782613a 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_ja.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_ja.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": true, "dictionary": [ " ", @@ -1531,6 +1531,409 @@ ], "omnibox_ui_strings": null, "url": "https://myaccount.google.com/signinoptions/password?utm_source=ga-chrome-actions&utm_medium=changePW" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69, + 93, + 106, + 117, + 99, + 10, + 7, + 1, + 2, + 4, + 6, + 9, + 7, + 3, + 4, + 11 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69, + 93, + 106, + 117, + 99, + 10, + 7, + 1, + 2, + 4, + 6, + 9, + 7, + 3, + 4, + 11 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69, + 93, + 106, + 117, + 99, + 10, + 7, + 1, + 2, + 4, + 6, + 9, + 7, + 3, + 4, + 11 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69, + 93, + 106, + 117, + 99, + 10, + 7, + 1, + 2, + 4, + 6, + 9, + 7, + 3, + 4, + 11 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69, + 93, + 106, + 117, + 99, + 10, + 7, + 1, + 2, + 4, + 6, + 9, + 7, + 3, + 4, + 11 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69, + 93, + 106, + 117, + 99, + 10, + 7, + 1, + 2, + 4, + 6, + 9, + 7, + 3, + 4, + 11 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69, + 93, + 106, + 117, + 99, + 10, + 7, + 1, + 2, + 4, + 6, + 9, + 7, + 3, + 4, + 11 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69, + 93, + 106, + 117, + 99, + 10, + 7, + 1, + 2, + 4, + 6, + 9, + 7, + 3, + 4, + 11 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69, + 93, + 106, + 117, + 99, + 10, + 7, + 1, + 2, + 4, + 6, + 9, + 7, + 3, + 4, + 11 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69, + 93, + 106, + 117, + 99, + 10, + 7, + 1, + 2, + 4, + 6, + 9, + 7, + 3, + 4, + 11 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69, + 93, + 106, + 117, + 99, + 10, + 7, + 1, + 2, + 4, + 6, + 9, + 7, + 3, + 4, + 11 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69, + 93, + 106, + 117, + 99, + 10, + 7, + 1, + 2, + 4, + 6, + 9, + 7, + 3, + 4, + 11 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69, + 93, + 106, + 117, + 99, + 10, + 7, + 1, + 2, + 4, + 6, + 9, + 7, + 3, + 4, + 11 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_kn.json b/components/omnibox/resources/omnibox_pedal_concepts_kn.json index 123faef..85857b1 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_kn.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_kn.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "chrome", @@ -442,6 +442,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_ko.json b/components/omnibox/resources/omnibox_pedal_concepts_ko.json index 9896771..dc3a7edf 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_ko.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_ko.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "chrome", @@ -407,6 +407,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 1 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 1 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 1 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 1 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 1 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 1 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 1 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 1 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 1 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 1 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 1 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 1 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 1 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_lt.json b/components/omnibox/resources/omnibox_pedal_concepts_lt.json index 27a07a7..17aeafa 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_lt.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_lt.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "a", @@ -436,6 +436,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 52 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 52 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 52 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 52 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 52 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 52 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 52 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 52 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 52 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 52 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 52 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 52 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 52 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_lv.json b/components/omnibox/resources/omnibox_pedal_concepts_lv.json index 0030b35..fa7b38a 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_lv.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_lv.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "a", @@ -463,6 +463,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_ml.json b/components/omnibox/resources/omnibox_pedal_concepts_ml.json index 2281019..e66a39c 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_ml.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_ml.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "chrome", @@ -452,6 +452,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 57 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 57 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 57 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 57 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 57 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 57 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 57 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 57 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 57 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 57 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 57 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 57 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 57 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_mr.json b/components/omnibox/resources/omnibox_pedal_concepts_mr.json index 9b85c08..90cc067 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_mr.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_mr.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "chrome", @@ -448,6 +448,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_ms.json b/components/omnibox/resources/omnibox_pedal_concepts_ms.json index 01e0755..dcc4c33 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_ms.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_ms.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "alih", @@ -436,6 +436,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 54 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 54 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 54 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 54 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 54 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 54 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 54 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 54 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 54 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 54 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 54 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 54 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 54 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_nl.json b/components/omnibox/resources/omnibox_pedal_concepts_nl.json index 416348f..b6b75f8 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_nl.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_nl.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "aan", @@ -508,6 +508,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 82 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 82 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 82 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 82 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 82 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 82 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 82 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 82 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 82 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 82 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 82 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 82 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 82 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_pl.json b/components/omnibox/resources/omnibox_pedal_concepts_pl.json index 6cc89f1..d6f33e2 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_pl.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_pl.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "a", @@ -703,6 +703,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 102 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_pt-BR.json b/components/omnibox/resources/omnibox_pedal_concepts_pt-BR.json index 73aab2a0..5e9af81 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_pt-BR.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_pt-BR.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "abrir", @@ -477,6 +477,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 63 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 63 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 63 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 63 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 63 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 63 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 63 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 63 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 63 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 63 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 63 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 63 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 63 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_pt-PT.json b/components/omnibox/resources/omnibox_pedal_concepts_pt-PT.json index 4c47a52..a8aeb480 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_pt-PT.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_pt-PT.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "abrir", @@ -454,6 +454,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 60 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_ro.json b/components/omnibox/resources/omnibox_pedal_concepts_ro.json index 1fd38ab6..5e63c43 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_ro.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_ro.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "a", @@ -480,6 +480,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 70 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 70 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 70 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 70 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 70 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 70 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 70 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 70 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 70 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 70 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 70 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 70 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 70 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_ru.json b/components/omnibox/resources/omnibox_pedal_concepts_ru.json index e97ca97c..6469b34 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_ru.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_ru.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "chrome", @@ -496,6 +496,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 76 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 76 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 76 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 76 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 76 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 76 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 76 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 76 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 76 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 76 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 76 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 76 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 76 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_sk.json b/components/omnibox/resources/omnibox_pedal_concepts_sk.json index 5750622..f21de70 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_sk.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_sk.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "a", @@ -451,6 +451,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 69 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_sl.json b/components/omnibox/resources/omnibox_pedal_concepts_sl.json index 24ba16a..21e40c5 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_sl.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_sl.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "beleženja", @@ -457,6 +457,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 61 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_sr.json b/components/omnibox/resources/omnibox_pedal_concepts_sr.json index b90be87..f6eb3ff 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_sr.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_sr.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "chrome", @@ -868,6 +868,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 129 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 129 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 129 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 129 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 129 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 129 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 129 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 129 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 129 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 129 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 129 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 129 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 129 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_sv.json b/components/omnibox/resources/omnibox_pedal_concepts_sv.json index 7bc66525..de3c230 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_sv.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_sv.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "aktivera", @@ -455,6 +455,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 68 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 68 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 68 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 68 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 68 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 68 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 68 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 68 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 68 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 68 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 68 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 68 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 68 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_sw.json b/components/omnibox/resources/omnibox_pedal_concepts_sw.json index 6786accb..cf348143 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_sw.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_sw.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "anza", @@ -435,6 +435,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 55 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_ta.json b/components/omnibox/resources/omnibox_pedal_concepts_ta.json index 3436144..26e70fd 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_ta.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_ta.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "chrome", @@ -487,6 +487,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 72 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 72 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 72 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 72 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 72 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 72 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 72 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 72 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 72 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 72 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 72 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 72 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 72 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_te.json b/components/omnibox/resources/omnibox_pedal_concepts_te.json index be882bd3..e84cec0 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_te.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_te.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "chrome", @@ -457,6 +457,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_th.json b/components/omnibox/resources/omnibox_pedal_concepts_th.json index 07e27c2..27b6a17a 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_th.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_th.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "chrome", @@ -425,6 +425,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 59 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_tr.json b/components/omnibox/resources/omnibox_pedal_concepts_tr.json index 7c5a93b..ad9df9b6 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_tr.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_tr.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "aç", @@ -577,6 +577,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 86 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_uk.json b/components/omnibox/resources/omnibox_pedal_concepts_uk.json index b74ee3c..a058c5f 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_uk.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_uk.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "a", @@ -492,6 +492,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 78 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 78 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 78 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 78 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 78 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 78 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 78 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 78 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 78 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 78 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 78 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 78 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 78 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_vi.json b/components/omnibox/resources/omnibox_pedal_concepts_vi.json index 3d72b02..8d9b3230 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_vi.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_vi.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "a", @@ -513,6 +513,214 @@ ], "omnibox_ui_strings": null, "url": "" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 79 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 79 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 79 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 79 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 79 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 79 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 79 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 79 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 79 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 79 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 79 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 79 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 79 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_zh-CN.json b/components/omnibox/resources/omnibox_pedal_concepts_zh-CN.json index 6636bed..3e1d9d05 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_zh-CN.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_zh-CN.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": true, "dictionary": [ " ", @@ -1201,6 +1201,409 @@ ], "omnibox_ui_strings": null, "url": "https://myaccount.google.com/signinoptions/password?utm_source=ga-chrome-actions&utm_medium=changePW" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 14, + 54, + 67, + 90, + 57, + 12, + 9, + 1, + 2, + 4, + 6, + 11, + 9, + 3, + 4, + 13 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 14, + 54, + 67, + 90, + 57, + 12, + 9, + 1, + 2, + 4, + 6, + 11, + 9, + 3, + 4, + 13 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 14, + 54, + 67, + 90, + 57, + 12, + 9, + 1, + 2, + 4, + 6, + 11, + 9, + 3, + 4, + 13 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 14, + 54, + 67, + 90, + 57, + 12, + 9, + 1, + 2, + 4, + 6, + 11, + 9, + 3, + 4, + 13 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 14, + 54, + 67, + 90, + 57, + 12, + 9, + 1, + 2, + 4, + 6, + 11, + 9, + 3, + 4, + 13 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 14, + 54, + 67, + 90, + 57, + 12, + 9, + 1, + 2, + 4, + 6, + 11, + 9, + 3, + 4, + 13 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 14, + 54, + 67, + 90, + 57, + 12, + 9, + 1, + 2, + 4, + 6, + 11, + 9, + 3, + 4, + 13 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 14, + 54, + 67, + 90, + 57, + 12, + 9, + 1, + 2, + 4, + 6, + 11, + 9, + 3, + 4, + 13 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 14, + 54, + 67, + 90, + 57, + 12, + 9, + 1, + 2, + 4, + 6, + 11, + 9, + 3, + 4, + 13 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 14, + 54, + 67, + 90, + 57, + 12, + 9, + 1, + 2, + 4, + 6, + 11, + 9, + 3, + 4, + 13 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 14, + 54, + 67, + 90, + 57, + 12, + 9, + 1, + 2, + 4, + 6, + 11, + 9, + 3, + 4, + 13 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 14, + 54, + 67, + 90, + 57, + 12, + 9, + 1, + 2, + 4, + 6, + 11, + 9, + 3, + 4, + 13 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 14, + 54, + 67, + 90, + 57, + 12, + 9, + 1, + 2, + 4, + 6, + 11, + 9, + 3, + 4, + 13 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/omnibox/resources/omnibox_pedal_concepts_zh-TW.json b/components/omnibox/resources/omnibox_pedal_concepts_zh-TW.json index b89cefd..8610b02 100644 --- a/components/omnibox/resources/omnibox_pedal_concepts_zh-TW.json +++ b/components/omnibox/resources/omnibox_pedal_concepts_zh-TW.json
@@ -1,7 +1,7 @@ { "schema": "pedal_concepts_runtime", "schema_version": 3, - "data_version": 16122060, + "data_version": 16140733, "tokenize_each_character": false, "dictionary": [ "chrome", @@ -666,6 +666,214 @@ ], "omnibox_ui_strings": null, "url": "https://myaccount.google.com/signinoptions/password?utm_source=ga-chrome-actions&utm_medium=changePW" + }, + { + "id": 26, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 4 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 27, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 4 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://dino" + }, + { + "id": 28, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 4 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/find-your-phone?utm_source=ga-chrome-actions&utm_medium=findYourPhone" + }, + { + "id": 29, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 4 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "https://myaccount.google.com/data-and-privacy?utm_source=ga-chrome-actions&utm_medium=managePrivacy" + }, + { + "id": 31, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 4 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings" + }, + { + "id": 32, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 4 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://downloads" + }, + { + "id": 33, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 4 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://history" + }, + { + "id": 34, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 4 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "" + }, + { + "id": 35, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 4 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/accessibility" + }, + { + "id": 36, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 4 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/fonts" + }, + { + "id": 37, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 4 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://new-tab-page/?customize=backgrounds" + }, + { + "id": 38, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 4 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://settings/searchEngines" + }, + { + "id": 39, + "groups": [ + { + "required": true, + "single": true, + "synonyms": [ + [ + 4 + ] + ] + } + ], + "omnibox_ui_strings": null, + "url": "chrome://os-settings/manageAccessibility" } ], "ignore_group": {
diff --git a/components/password_manager/core/common/password_manager_features.cc b/components/password_manager/core/common/password_manager_features.cc index 8c56ef5..cd5b413a 100644 --- a/components/password_manager/core/common/password_manager_features.cc +++ b/components/password_manager/core/common/password_manager_features.cc
@@ -140,6 +140,11 @@ "TreatNewPasswordHeuristicsAsReliable", base::FEATURE_DISABLED_BY_DEFAULT}; #if defined(OS_ANDROID) +// Enables the intent fetching for the credential manager in Google Mobile +// Services. It does not enable launching the credential manager. +const base::Feature kUnifiedCredentialManagerDryRun = { + "UnifiedCredentialManagerDryRun", base::FEATURE_DISABLED_BY_DEFAULT}; + // Enables use of Google Mobile Services for password storage. Chrome's local // database will be unused but kept in sync for local passwords. const base::Feature kUnifiedPasswordManagerAndroid{
diff --git a/components/password_manager/core/common/password_manager_features.h b/components/password_manager/core/common/password_manager_features.h index 0aea65e..8d183d8e 100644 --- a/components/password_manager/core/common/password_manager_features.h +++ b/components/password_manager/core/common/password_manager_features.h
@@ -43,6 +43,7 @@ extern const base::Feature kSupportForAddPasswordsInSettings; extern const base::Feature kTreatNewPasswordHeuristicsAsReliable; #if defined(OS_ANDROID) +extern const base::Feature kUnifiedCredentialManagerDryRun; extern const base::Feature kUnifiedPasswordManagerAndroid; extern const base::Feature kUnifiedPasswordManagerMigration; extern const base::Feature kUnifiedPasswordManagerShadowAndroid;
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb index ee9c06a..abe7c9f18 100644 --- a/components/policy/resources/policy_templates_es-419.xtb +++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -2778,6 +2778,9 @@ Nota: En Android, usa la política <ph name="ISOLATE_ORIGINS_ANDROID_POLICY_NAME" /> en su lugar.</translation> <translation id="4261820385751181068">Configuración regional de la pantalla de acceso del dispositivo</translation> +<translation id="4261964161337162399">Es la tasa a la que se toman muestras de los datos del audio y se los recopila. El mínimo permitido es 1 minuto. + + Si no estableces la política, se aplicará la tasa predeterminada de 10 minutos.</translation> <translation id="4266547484666068234">Si estableces la política, permitirás el acceso a las URL de la lista, como excepciones a la lista de la política <ph name="URL_BLOCKLIST_POLICY_NAME" />. Consulta la descripción de esa política para conocer el formato de las entradas de esta lista. Por ejemplo, si estableces "*" en la política <ph name="URL_BLOCKLIST_POLICY_NAME" />, se bloquearán todas las solicitudes. Además, con esta política puedes permitir el acceso a una lista limitada de URL. Úsala a fin de abrir excepciones para determinados esquemas, subdominios de otros dominios, puertos o rutas específicas, mediante el formato que se indica en ( https://www.chromium.org/administrators/url-blocklist-filter-format ). El filtro más específico determina si una URL está bloqueada o habilitada. La política <ph name="URL_ALLOWLIST_POLICY_NAME" /> tiene prioridad sobre la política <ph name="URL_BLOCKLIST_POLICY_NAME" />, y se limitará a 1,000 entradas. Además, esta política puede permitir que el navegador invoque de forma automática aplicaciones externas registradas como controladores de los protocolos que se encuentran en la lista correspondiente, p. ej., "tel:" o "ssh:". @@ -6783,6 +6786,7 @@ Esta política solo afecta a los usuarios autenticados mediante SAML. El valor de la política debe especificarse en segundos.</translation> +<translation id="9015578113567730893">Tasa de recopilación de telemetría del audio en milisegundos.</translation> <translation id="9035086760683255833">Habilita la función de accesibilidad para destacar el cursor del teclado. Esta función destaca el elemento donde está el cursor del teclado.
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb index c75086a..8a27a2c 100644 --- a/components/policy/resources/policy_templates_es.xtb +++ b/components/policy/resources/policy_templates_es.xtb
@@ -2786,6 +2786,9 @@ Nota: En Android, usa la política <ph name="ISOLATE_ORIGINS_ANDROID_POLICY_NAME" />.</translation> <translation id="4261820385751181068">Configuración regional para la pantalla de inicio de sesión del dispositivo</translation> +<translation id="4261964161337162399">Intervalo con el que los datos de audio se muestrean y recogen. El valor mínimo permitido es 1 minuto. + + Si no se establece esta política, se aplicará el intervalo predeterminado de 10 minutos.</translation> <translation id="4266547484666068234">Si se define esta política, se permite acceder a las URLs incluidas en la lista, las cuales se consideran excepciones de <ph name="URL_BLOCKLIST_POLICY_NAME" />. Consulta la descripción de la política para conocer el formato de las entradas de esta lista. Por ejemplo, si se le asigna el valor asterisco (*) a <ph name="URL_BLOCKLIST_POLICY_NAME" />, se bloquearán todas las solicitudes, y esta política se podrá usar para permitir el acceso a una lista limitada de URLs. También se puede utilizar para abrir excepciones de determinados esquemas, subdominios de otros dominios, puertos o rutas específicas usando el formato especificado en (https://www.chromium.org/administrators/url-blocklist-filter-format). El filtro más específico determinará si una URL está bloqueada o permitida. La política <ph name="URL_ALLOWLIST_POLICY_NAME" /> prevalece frente a <ph name="URL_BLOCKLIST_POLICY_NAME" />. Esta política está limitada a 1000 entradas. Esta política también permite habilitar la invocación automática que realiza el navegador de aplicaciones externas registradas como controladores de los protocolos incluidos en la lista, como "tel:" o "ssh:". @@ -6796,6 +6799,7 @@ Esta política solo afecta a los usuarios autenticados a través de SAML. El valor de la política se debe especificar en segundos.</translation> +<translation id="9015578113567730893">Intervalo de recogida de telemetría de audio en milisegundos.</translation> <translation id="9035086760683255833">Habilita la función de accesibilidad de elementos destacados. Esta función destaca el elemento donde está el foco del teclado.
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb index 456759a..2f911a7 100644 --- a/components/policy/resources/policy_templates_fr.xtb +++ b/components/policy/resources/policy_templates_fr.xtb
@@ -2776,6 +2776,9 @@ Remarque : Sous Android, utilisez la règle <ph name="ISOLATE_ORIGINS_ANDROID_POLICY_NAME" /> à la place.</translation> <translation id="4261820385751181068">Paramètres régionaux de l'écran de connexion de l'appareil</translation> +<translation id="4261964161337162399">Fréquence d'échantillonnage et de collecte des données audio. La valeur minimale autorisée est de 1 minute. + + Si la règle n'est pas configurée, la fréquence par défaut (10 minutes) est appliquée.</translation> <translation id="4266547484666068234">Configurer cette règle autorise l'accès aux URL répertoriées (prévaut sur <ph name="URL_BLOCKLIST_POLICY_NAME" />). Consultez la description de la règle pour connaître le format des entrées de cette liste. Par exemple, définir <ph name="URL_BLOCKLIST_POLICY_NAME" /> sur "*" bloque toutes les requêtes, et vous pouvez appliquer cette règle pour autoriser l'accès à une liste limitée d'URL. Utilisez-la pour définir des exceptions à certains schémas, ports, chemins d'accès spécifiques ou sous-domaines d'autres domaines à l'aide du format spécifié sur https://www.chromium.org/administrators/url-blocklist-filter-format. Le filtre le plus spécifique détermine si une URL est bloquée ou autorisée. La règle <ph name="URL_ALLOWLIST_POLICY_NAME" /> prévaut sur <ph name="URL_BLOCKLIST_POLICY_NAME" />. Cette règle est limitée à 1 000 entrées. Elle permet aussi d'autoriser le navigateur d'une application externe enregistrée comme gestionnaire de protocoles à appeler automatiquement les protocoles répertoriés tels que "tel:" ou "ssh:". @@ -2947,6 +2950,7 @@ <translation id="449784980858429908">Autoriser automatiquement les sites à se connecter à tous les ports série.</translation> <translation id="450080746522343150">Bloquer tous les téléchargements.</translation> <translation id="4510923771103268849">L'utilisateur est autorisé à accéder à la racine des conteneurs Crostini</translation> +<translation id="4512407512989846472">Permettre de bloquer la copie dans le presse-papiers sur les URL spécifiées</translation> <translation id="4513691822411041977">N'appliquez pas l'utilisation de SafeSearch dans la recherche Google ou du mode restreint sur YouTube</translation> <translation id="4515404363392014383">Activer la navigation sécurisée pour les sources fiables</translation> <translation id="4518251772179446575">Demander chaque fois qu'un site veut suivre la position géographique des utilisateurs</translation> @@ -5916,6 +5920,14 @@ <translation id="8028814157747157754">Activer le moteur de recherche par défaut et autoriser les utilisateurs à modifier la liste des moteurs de recherche</translation> <translation id="8029201909194194377">Durée maximale des sessions autorisée pour les connexions d'accès à distance</translation> <translation id="8029607810986641704">Verrouiller l'appareil quand il est inactif ou suspendu</translation> +<translation id="8032201191311129122">Cette règle permet de bloquer ou non la copie de données dans le presse-papiers sur des URL précises. + + Les listes de formats d'URL <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> et <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> déterminent quels sites sont autorisés ou non à écrire dans le presse-papiers. L'écriture dans le presse-papiers est bloquée si le format d'URL concerné figure dans la liste "enable" et pas dans la liste "disable". La copie n'est pas bloquée si le format d'URL n'est dans aucune liste. + + Les formats correspondant à l'origine dans la liste sont semblables à ceux de la règle <ph name="URL_BLOCKLIST_POLICY_NAME" /> décrite à la page http://www.chromium.org/administrators/url-blocklist-filter-format. + + Le champ <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> indique la quantité minimale de données en octets à partir de laquelle le format est vérifié. Autrement dit, l'écriture dans le presse-papiers sur une URL bloquée serait autorisée si la taille des données copiées est inférieure à la valeur indiquée dans ce champ. Si ce champ n'est pas renseigné, la valeur par défaut est de 100 octets. + </translation> <translation id="8044493735196713914">Indiquer le mode de démarrage de l'appareil</translation> <translation id="80453040817068401">Rendre le navigateur <ph name="LACROS_NAME" /> disponible</translation> <translation id="804619600634661088">Autoriser l'utilisation du débogage à distance</translation> @@ -6761,6 +6773,7 @@ Cette règle n'affecte que les utilisateurs qui se sont authentifiés via SAML. La valeur doit être indiquée en secondes.</translation> +<translation id="9015578113567730893">Fréquence de collecte par télémétrie audio en millisecondes.</translation> <translation id="9035086760683255833">Active la fonctionnalité d'accessibilité de mise en surbrillance au clavier. Cette fonctionnalité permet de mettre en surbrillance l'objet sélectionné à l'aide du clavier.
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb index b3a5ac49..4faca200 100644 --- a/components/policy/resources/policy_templates_ru.xtb +++ b/components/policy/resources/policy_templates_ru.xtb
@@ -2766,6 +2766,9 @@ Примечание. Для устройств Android используйте правило <ph name="ISOLATE_ORIGINS_ANDROID_POLICY_NAME" />.</translation> <translation id="4261820385751181068">Региональные настройки экрана входа</translation> +<translation id="4261964161337162399">Частота выборки и сбора аудиоданных. Минимальное значение – 1 минута. + + Если значение не указано, частота по умолчанию составляет 10 минут.</translation> <translation id="4266547484666068234">Если правило настроено, указанные URL становятся доступны и считаются исключениями из правила <ph name="URL_BLOCKLIST_POLICY_NAME" />. Формат элементов этого списка приведен в описании правила. Например, если установить значение * (символ звездочки) для правила <ph name="URL_BLOCKLIST_POLICY_NAME" />, то все запросы будут блокироваться. Чтобы разрешить доступ к некоторым URL, можно задать исключения в формате, приведенном на странице https://www.chromium.org/administrators/url-blocklist-filter-format. Это правило позволяет настроить исключения для определенных протоколов, субдоменов, отдельных доменов, портов или путей. Определять, блокируется URL или нет, будет фильтр с самыми узкими критериями. Правило <ph name="URL_ALLOWLIST_POLICY_NAME" /> имеет приоритет над правилом <ph name="URL_BLOCKLIST_POLICY_NAME" />. В этом правиле можно указать не более 1000 URL. С его помощью также можно разрешить браузеру автоматически вызывать внешние приложения, зарегистрированные как обработчики указанных в списке протоколов (например, tel: или ssh:). @@ -6759,6 +6762,7 @@ Правило затрагивает только тех пользователей, которые проходят аутентификацию с помощью SAML. Значение правила указывается в секундах.</translation> +<translation id="9015578113567730893">Частота сбора телеметрических аудиоданных (в миллисекундах)</translation> <translation id="9035086760683255833">Включает специальную возможность – выделение объектов, выбранных с помощью клавиатуры. Эта функция позволяет выделить объект, который был выбран с помощью клавиатуры.
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb index c09e8eb1..2180e62 100644 --- a/components/policy/resources/policy_templates_vi.xtb +++ b/components/policy/resources/policy_templates_vi.xtb
@@ -2780,6 +2780,9 @@ Xin lưu ý: Đối với Android, hãy dùng chính sách <ph name="ISOLATE_ORIGINS_ANDROID_POLICY_NAME" />.</translation> <translation id="4261820385751181068">Ngôn ngữ màn hình đăng nhập thiết bị</translation> +<translation id="4261964161337162399">Chu kỳ hệ thống lấy mẫu và thu thập dữ liệu âm thanh. Thời gian tối thiểu cho phép là 1 phút. + + Nếu bạn không đặt chính sách này, thì chu kỳ mặc định là 10 phút sẽ được áp dụng.</translation> <translation id="4266547484666068234">Việc đặt chính sách này sẽ cho phép bạn chỉ định danh sách các URL có thể truy cập như một trường hợp ngoại lệ của <ph name="URL_BLOCKLIST_POLICY_NAME" />. Hãy xem thông tin mô tả của chính sách đó để biết định dạng của các mục trong danh sách này. Ví dụ: khi bạn đặt <ph name="URL_BLOCKLIST_POLICY_NAME" /> thành *, tất cả yêu cầu sẽ bị chặn, và bạn có thể dùng chính sách này để cho phép truy cập vào một danh sách hạn chế gồm các URL. Hãy dùng danh sách này để mở các trường hợp ngoại lệ đối với một số tên giao thức, miền con của các miền khác, cổng hoặc đường dẫn cụ thể theo định dạng nêu tại (https://www.chromium.org/administrators/url-blocklist-filter-format). Bộ lọc cụ thể nhất sẽ xác định liệu một URL bị chặn hay được phép. Chính sách <ph name="URL_ALLOWLIST_POLICY_NAME" /> sẽ được ưu tiên hơn chính sách <ph name="URL_BLOCKLIST_POLICY_NAME" />. Chính sách này chỉ áp dụng cho 1.000 mục. Chính sách này cũng cho phép trình duyệt tự động gọi ứng dụng bên ngoài được đăng ký ở dạng trình xử lý giao thức cho các giao thức có trong danh sách, chẳng hạn như "tel:" hoặc "ssh:". @@ -6783,6 +6786,7 @@ Chính sách này chỉ ảnh hưởng đến người dùng đã xác thực bằng Ngôn ngữ đánh dấu xác nhận bảo mật (SAML). Bạn nên chỉ định giá trị tính bằng giây cho chính sách này.</translation> +<translation id="9015578113567730893">Chu kỳ thu thập âm thanh từ xa tính bằng mili giây.</translation> <translation id="9035086760683255833">Bật tính năng hỗ trợ tiếp cận về làm nổi bật tiêu điểm bằng bàn phím. Tính năng này giúp bạn làm nổi bật đối tượng có tiêu điểm bằng bàn phím.
diff --git a/components/safe_browsing/core/browser/safe_browsing_token_fetch_tracker.cc b/components/safe_browsing/core/browser/safe_browsing_token_fetch_tracker.cc index b9ae10b1..e1128e23 100644 --- a/components/safe_browsing/core/browser/safe_browsing_token_fetch_tracker.cc +++ b/components/safe_browsing/core/browser/safe_browsing_token_fetch_tracker.cc
@@ -65,6 +65,9 @@ callbacks_.erase(request_id); std::move(callback).Run(access_token); + + // NOTE: Invoking the callback might have resulted in the synchronous + // destruction of this object, so there is nothing safe to do here but return. } } // namespace safe_browsing
diff --git a/components/safe_browsing/core/browser/sync/BUILD.gn b/components/safe_browsing/core/browser/sync/BUILD.gn index 7323b189..935541f 100644 --- a/components/safe_browsing/core/browser/sync/BUILD.gn +++ b/components/safe_browsing/core/browser/sync/BUILD.gn
@@ -31,6 +31,7 @@ deps = [ ":sync", "//base/test:test_support", + "//components/safe_browsing/core/browser:token_fetcher", "//components/signin/public/identity_manager:test_support", "//components/sync/driver:test_support", "//testing/gtest",
diff --git a/components/safe_browsing/core/browser/sync/safe_browsing_primary_account_token_fetcher.cc b/components/safe_browsing/core/browser/sync/safe_browsing_primary_account_token_fetcher.cc index 1cbc0e8..1f147205 100644 --- a/components/safe_browsing/core/browser/sync/safe_browsing_primary_account_token_fetcher.cc +++ b/components/safe_browsing/core/browser/sync/safe_browsing_primary_account_token_fetcher.cc
@@ -30,13 +30,14 @@ Callback callback) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - // NOTE: base::Unretained() is safe below as this object owns - // |token_fetch_tracker_|, and the callback will not be invoked after - // |token_fetch_tracker_| is destroyed. + // NOTE: When a token fetch timeout occurs |token_fetch_tracker_| will invoke + // the client callback, which may end up synchronously destroying this object + // before this object's own callback is invoked. Hence we bind our own + // callback via a WeakPtr. const int request_id = token_fetch_tracker_.StartTrackingTokenFetch( std::move(callback), base::BindOnce(&SafeBrowsingPrimaryAccountTokenFetcher::OnTokenTimeout, - base::Unretained(this))); + weak_ptr_factory_.GetWeakPtr())); CoreAccountId account_id = identity_manager_->GetPrimaryAccountId(signin::ConsentLevel::kSignin); token_fetchers_[request_id] = @@ -64,16 +65,22 @@ signin::AccessTokenInfo access_token_info) { UMA_HISTOGRAM_ENUMERATION("SafeBrowsing.TokenFetcher.ErrorType", error.state(), GoogleServiceAuthError::NUM_STATES); + DCHECK(token_fetchers_.contains(request_id)); + token_fetchers_.erase(request_id); + if (error.state() == GoogleServiceAuthError::NONE) token_fetch_tracker_.OnTokenFetchComplete(request_id, access_token_info.token); else token_fetch_tracker_.OnTokenFetchComplete(request_id, std::string()); - token_fetchers_.erase(request_id); + // NOTE: Calling SafeBrowsingTokenFetchTracker::OnTokenFetchComplete might + // have resulted in the synchronous destruction of this object, so there is + // nothing safe to do here but return. } void SafeBrowsingPrimaryAccountTokenFetcher::OnTokenTimeout(int request_id) { + DCHECK(token_fetchers_.contains(request_id)); token_fetchers_.erase(request_id); }
diff --git a/components/safe_browsing/core/browser/sync/safe_browsing_primary_account_token_fetcher_unittest.cc b/components/safe_browsing/core/browser/sync/safe_browsing_primary_account_token_fetcher_unittest.cc index 05d52e1..9b22781 100644 --- a/components/safe_browsing/core/browser/sync/safe_browsing_primary_account_token_fetcher_unittest.cc +++ b/components/safe_browsing/core/browser/sync/safe_browsing_primary_account_token_fetcher_unittest.cc
@@ -7,6 +7,7 @@ #include "base/run_loop.h" #include "base/test/task_environment.h" +#include "components/safe_browsing/core/browser/safe_browsing_token_fetch_tracker.h" #include "components/signin/public/identity_manager/identity_test_environment.h" #include "testing/gtest/include/gtest/gtest.h" @@ -17,7 +18,8 @@ SafeBrowsingPrimaryAccountTokenFetcherTest() {} protected: - base::test::TaskEnvironment task_environment_; + base::test::TaskEnvironment task_environment_{ + base::test::TaskEnvironment::TimeSource::MOCK_TIME}; signin::IdentityTestEnvironment identity_test_environment_; }; @@ -70,4 +72,64 @@ EXPECT_EQ(access_token, "token"); } +// Verifies that destruction of a SafeBrowsingPrimaryAccountTokenFetcher +// instance from within the client callback that the token was fetched doesn't +// cause a crash. +TEST_F(SafeBrowsingPrimaryAccountTokenFetcherTest, + FetcherDestroyedFromWithinOnTokenFetchedCallback) { + identity_test_environment_.MakePrimaryAccountAvailable( + "test@example.com", signin::ConsentLevel::kSignin); + std::string access_token; + + // Destroyed in the token fetch callback. + auto* fetcher = new SafeBrowsingPrimaryAccountTokenFetcher( + identity_test_environment_.identity_manager()); + + fetcher->Start(base::BindOnce( + [](std::string* target_token, + SafeBrowsingPrimaryAccountTokenFetcher* fetcher, + const std::string& token) { + *target_token = token; + delete fetcher; + }, + &access_token, fetcher)); + + identity_test_environment_ + .WaitForAccessTokenRequestIfNecessaryAndRespondWithError( + GoogleServiceAuthError(GoogleServiceAuthError::CONNECTION_FAILED)); + ASSERT_TRUE(access_token.empty()); +} + +// Verifies that destruction of a SafeBrowsingPrimaryAccountTokenFetcher +// instance from within the client callback that the token was fetched doesn't +// cause a crash when invoked due to the token fetch timing out. +TEST_F(SafeBrowsingPrimaryAccountTokenFetcherTest, + FetcherDestroyedFromWithinOnTokenFetchedCallbackInvokedOnTimeout) { + identity_test_environment_.MakePrimaryAccountAvailable( + "test@example.com", signin::ConsentLevel::kSignin); + std::string access_token; + bool callback_invoked = false; + + // Destroyed in the token fetch callback, which is invoked on timeout. + auto* fetcher = new SafeBrowsingPrimaryAccountTokenFetcher( + identity_test_environment_.identity_manager()); + + fetcher->Start(base::BindOnce( + [](bool* on_invoked_flag, std::string* target_token, + SafeBrowsingPrimaryAccountTokenFetcher* fetcher, + const std::string& token) { + *on_invoked_flag = true; + *target_token = token; + delete fetcher; + }, + &callback_invoked, &access_token, fetcher)); + + // Trigger a timeout of the fetch, which will invoke the client callback + // passed to the fetcher. + task_environment_.FastForwardBy( + base::Milliseconds(kTokenFetchTimeoutDelayFromMilliseconds)); + ASSERT_TRUE(callback_invoked); + ASSERT_TRUE(access_token.empty()); +} + } // namespace safe_browsing
diff --git a/components/signin/public/base/signin_metrics.h b/components/signin/public/base/signin_metrics.h index 2ce1c42..4041615b 100644 --- a/components/signin/public/base/signin_metrics.h +++ b/components/signin/public/base/signin_metrics.h
@@ -177,13 +177,18 @@ // Account password storage opt-in: kAutofillDropdown = 1, + // The password save bubble, which included the destination picker (set to + // "Save to your Google Account"). kPasswordSaveBubble = 2, kPasswordSettings = 3, kGeneratePasswordDropdown = 4, kGeneratePasswordContextMenu = 5, kPasswordMoveBubble = 6, + // The password save bubble *without* a destination picker, i.e. the password + // was already saved locally. + kPasswordSaveLocallyBubble = 7, - kMaxValue = kPasswordMoveBubble + kMaxValue = kPasswordSaveLocallyBubble }; // Enum values which enumerates all user actions on the sign-in promo.
diff --git a/components/storage_monitor/storage_monitor_chromeos.cc b/components/storage_monitor/storage_monitor_chromeos.cc index b06a043..615917c 100644 --- a/components/storage_monitor/storage_monitor_chromeos.cc +++ b/components/storage_monitor/storage_monitor_chromeos.cc
@@ -29,13 +29,13 @@ #include "content/public/browser/browser_thread.h" #include "content/public/browser/device_service.h" -using chromeos::disks::Disk; -using chromeos::disks::DiskMountManager; - namespace storage_monitor { namespace { +using ::ash::disks::Disk; +using ::ash::disks::DiskMountManager; + // Constructs a device id using uuid or manufacturer (vendor and product) id // details. std::string MakeDeviceUniqueId(const Disk& disk) { @@ -205,7 +205,7 @@ // Ignore errors. if (error_code != chromeos::MOUNT_ERROR_NONE) return; - if (mount_info.mount_condition != chromeos::disks::MOUNT_CONDITION_NONE) + if (mount_info.mount_condition != ash::disks::MOUNT_CONDITION_NONE) return; switch (event) {
diff --git a/components/storage_monitor/storage_monitor_chromeos.h b/components/storage_monitor/storage_monitor_chromeos.h index 0aff4bf..390e8f8 100644 --- a/components/storage_monitor/storage_monitor_chromeos.h +++ b/components/storage_monitor/storage_monitor_chromeos.h
@@ -34,7 +34,7 @@ class MtpManagerClientChromeOS; class StorageMonitorCros : public StorageMonitor, - public chromeos::disks::DiskMountManager::Observer { + public ash::disks::DiskMountManager::Observer { public: // Should only be called by browser start up code. // Use StorageMonitor::GetInstance() instead. @@ -53,13 +53,13 @@ void SetMediaTransferProtocolManagerForTest( mojo::PendingRemote<device::mojom::MtpManager> test_manager); - // chromeos::disks::DiskMountManager::Observer implementation. - void OnBootDeviceDiskEvent(chromeos::disks::DiskMountManager::DiskEvent event, - const chromeos::disks::Disk& disk) override; - void OnMountEvent(chromeos::disks::DiskMountManager::MountEvent event, - chromeos::MountError error_code, - const chromeos::disks::DiskMountManager::MountPointInfo& - mount_info) override; + // ash::disks::DiskMountManager::Observer implementation. + void OnBootDeviceDiskEvent(ash::disks::DiskMountManager::DiskEvent event, + const ash::disks::Disk& disk) override; + void OnMountEvent( + ash::disks::DiskMountManager::MountEvent event, + chromeos::MountError error_code, + const ash::disks::DiskMountManager::MountPointInfo& mount_info) override; // StorageMonitor implementation. bool GetStorageInfoForPath(const base::FilePath& path, @@ -80,16 +80,16 @@ // device attach notification. |has_dcim| is true if the attached device has // a DCIM folder. void AddMountedPath( - const chromeos::disks::DiskMountManager::MountPointInfo& mount_info, + const ash::disks::DiskMountManager::MountPointInfo& mount_info, bool has_dcim); // Adds the mount point in |disk| to |mount_map_| and send a device // attach notification. - void AddFixedStorageDisk(const chromeos::disks::Disk& disk); + void AddFixedStorageDisk(const ash::disks::Disk& disk); // Removes the mount point in |disk| from |mount_map_| and send a device // detach notification. - void RemoveFixedStorageDisk(const chromeos::disks::Disk& disk); + void RemoveFixedStorageDisk(const ash::disks::Disk& disk); // Mapping of relevant mount points and their corresponding mount devices. MountMap mount_map_;
diff --git a/components/storage_monitor/storage_monitor_chromeos_unittest.cc b/components/storage_monitor/storage_monitor_chromeos_unittest.cc index 63bc4e5..c4ef4125 100644 --- a/components/storage_monitor/storage_monitor_chromeos_unittest.cc +++ b/components/storage_monitor/storage_monitor_chromeos_unittest.cc
@@ -31,8 +31,8 @@ namespace { -using chromeos::disks::Disk; -using chromeos::disks::DiskMountManager; +using ::ash::disks::Disk; +using ::ash::disks::DiskMountManager; using testing::_; const char kDevice1[] = "/dev/d1"; @@ -91,7 +91,7 @@ } void OnBootDeviceDiskEvent(DiskMountManager::DiskEvent event, - const chromeos::disks::Disk& disk) override { + const Disk& disk) override { StorageMonitorCros::OnBootDeviceDiskEvent(event, disk); } @@ -150,7 +150,7 @@ TestStorageMonitorCros* monitor_; // Owned by DiskMountManager. - chromeos::disks::MockDiskMountManager* disk_mount_manager_mock_; + ash::disks::MockDiskMountManager* disk_mount_manager_mock_; StorageMonitor::EjectStatus status_; @@ -174,7 +174,7 @@ void StorageMonitorCrosTest::SetUp() { ASSERT_TRUE(scoped_temp_dir_.CreateUniqueTempDir()); - disk_mount_manager_mock_ = new chromeos::disks::MockDiskMountManager(); + disk_mount_manager_mock_ = new ash::disks::MockDiskMountManager(); DiskMountManager::InitializeForTesting(disk_mount_manager_mock_); disk_mount_manager_mock_->SetupDefaultReplies(); @@ -261,7 +261,7 @@ kDevice1, mount_path1.value(), chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE); + ash::disks::MOUNT_CONDITION_NONE); MountDevice(chromeos::MOUNT_ERROR_NONE, mount_info, kUniqueId1, @@ -288,7 +288,7 @@ kDevice2, mount_path2.value(), chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE); + ash::disks::MOUNT_CONDITION_NONE); MountDevice(chromeos::MOUNT_ERROR_NONE, mount_info2, kUniqueId2, @@ -320,7 +320,7 @@ kDevice1, mount_path.value(), chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE); + ash::disks::MOUNT_CONDITION_NONE); const std::string device_id = StorageInfo::MakeDeviceId( StorageInfo::REMOVABLE_MASS_STORAGE_NO_DCIM, kFSUniqueIdPrefix + kUniqueId); @@ -350,7 +350,7 @@ kDevice1, mount_path.value(), chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE); + ash::disks::MOUNT_CONDITION_NONE); MountDevice(chromeos::MOUNT_ERROR_UNKNOWN, mount_info, kUniqueId, @@ -378,7 +378,7 @@ // Unsupported file system. mount_info.mount_type = chromeos::MOUNT_TYPE_DEVICE; mount_info.mount_condition = - chromeos::disks::MOUNT_CONDITION_UNSUPPORTED_FILESYSTEM; + ash::disks::MOUNT_CONDITION_UNSUPPORTED_FILESYSTEM; MountDevice(chromeos::MOUNT_ERROR_NONE, mount_info, kUniqueId, @@ -398,7 +398,7 @@ kSDCardDeviceName1, mount_path1.value(), chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE); + ash::disks::MOUNT_CONDITION_NONE); MountDevice(chromeos::MOUNT_ERROR_NONE, mount_info1, kUniqueId2, @@ -425,7 +425,7 @@ kSDCardDeviceName2, mount_path2.value(), chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE); + ash::disks::MOUNT_CONDITION_NONE); MountDevice(chromeos::MOUNT_ERROR_NONE, mount_info2, kUniqueId2, @@ -454,7 +454,7 @@ kEmptyDeviceLabel, mount_path1.value(), chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE); + ash::disks::MOUNT_CONDITION_NONE); MountDevice(chromeos::MOUNT_ERROR_NONE, mount_info, kUniqueId1, @@ -483,7 +483,7 @@ kEmptyDeviceLabel, mount_path1.value(), chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE); + ash::disks::MOUNT_CONDITION_NONE); MountDevice(chromeos::MOUNT_ERROR_NONE, mount_info, kUniqueId1, @@ -513,7 +513,7 @@ kEmptyDeviceLabel, mount_path1.value(), chromeos::MOUNT_TYPE_DEVICE, - chromeos::disks::MOUNT_CONDITION_NONE); + ash::disks::MOUNT_CONDITION_NONE); MountDevice(chromeos::MOUNT_ERROR_NONE, mount_info, kUniqueId1,
diff --git a/components/strings/components_strings_af.xtb b/components/strings/components_strings_af.xtb index 5e0e2fa2..e458ce00 100644 --- a/components/strings/components_strings_af.xtb +++ b/components/strings/components_strings_af.xtb
@@ -270,6 +270,7 @@ <translation id="1741613555002899862">Moet gespesifseer en 'n geldige string wees wanneer DnsOverHttpsMode <ph name="SECURE_DNS_MODE_SECURE" /> is.</translation> <translation id="1745880797583122200">Jou blaaier word bestuur</translation> <translation id="1746113442205726301">Skuif prent langs Y-as</translation> +<translation id="1747819498338037826">Verander outomaties</translation> <translation id="17513872634828108">Oop oortjies</translation> <translation id="1752021286346845558">Posbus 8</translation> <translation id="1753706481035618306">Bladsynommer</translation> @@ -1687,6 +1688,7 @@ <translation id="643051589346665201">Verander Google-wagwoord</translation> <translation id="6433490469411711332">Wysig kontakinligting</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> het geweier om te koppel.</translation> +<translation id="6438025220577812695">Verander dit self</translation> <translation id="6440503408713884761">Geïgnoreer</translation> <translation id="6443406338865242315">Watter uitbreidings en inproppe jy geïnstalleer het</translation> <translation id="6446163441502663861">Kahu (Envelope)</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb index c92d6f6..506cd539 100644 --- a/components/strings/components_strings_ar.xtb +++ b/components/strings/components_strings_ar.xtb
@@ -270,6 +270,7 @@ <translation id="1741613555002899862">يجب أن تكون محدّدة وتُمثّل سلسلة صالحة عندما تكون DnsOverHttpsMode مضبوطة على <ph name="SECURE_DNS_MODE_SECURE" />.</translation> <translation id="1745880797583122200">إدارة متصفِّحك</translation> <translation id="1746113442205726301">Image Y shift</translation> +<translation id="1747819498338037826">تغيير كلمة المرور تلقائيًا</translation> <translation id="17513872634828108">علامات التبويب المفتوحة</translation> <translation id="1752021286346845558">صندوق البريد الإلكتروني 8</translation> <translation id="1753706481035618306">رقم الصفحة</translation> @@ -1687,6 +1688,7 @@ <translation id="643051589346665201">تغيير كلمة مرور Google</translation> <translation id="6433490469411711332">تعديل معلومات الاتصال</translation> <translation id="6433595998831338502">رفض <ph name="HOST_NAME" /> الاتصال.</translation> +<translation id="6438025220577812695">تغيير كلمة المرور بنفسي</translation> <translation id="6440503408713884761">تم تجاهله</translation> <translation id="6443406338865242315">الإضافات والمكوّنات الإضافية التي تثبّتها</translation> <translation id="6446163441502663861">Kahu (مغلف)</translation>
diff --git a/components/strings/components_strings_be.xtb b/components/strings/components_strings_be.xtb index 6f2d0b3..d00d66c 100644 --- a/components/strings/components_strings_be.xtb +++ b/components/strings/components_strings_be.xtb
@@ -827,6 +827,8 @@ выдаліць яго са спіса і дадаць зноў.</translation> <translation id="3630699740441428070">Адміністратары прылады наладзілі падключэнне да сеткі і цяпер могуць бачыць інфармацыю пра ваш сеткавы трафік, у тым ліку якія вэб-сайты вы наведваеце.</translation> <translation id="3631244953324577188">Біяметрыя</translation> +<translation id="3632503704576938756">Абагульванне экрана ўзноўлена</translation> +<translation id="3632892046558972264">Абагульванне экрана прыпынена</translation> <translation id="3633738897356909127">Кнопка "Абнавіць Chrome". Каб абнавіць браўзер Chrome праз яго налады, націсніце Enter</translation> <translation id="3634530185120165534">Латок 5</translation> <translation id="3634567936866541746">Вы толькі што ўвялі свой пароль на сайце, вядомым падманнымі паводзінамі. Chrome рэкамендуе вам праверыць захаваныя паролі, каб абараніць свае ўліковыя запісы.</translation> @@ -1061,6 +1063,7 @@ <translation id="4346197816712207223">Якія крэдытныя карткі прымаюцца</translation> <translation id="4346833872170306413">Roc-16K</translation> <translation id="4348834659292907206">Падключэнне да сайта <ph name="SITE" /> не з'яўляецца надзейным</translation> +<translation id="4349365535725594680">Нельга абагульваць канфідэнцыяльнае змесціва</translation> <translation id="4350629523305688469">Шматфункцыянальны латок</translation> <translation id="4351060348582610152"><ph name="ORIGIN" /> запытвае пошук прылад Bluetooth паблізу. Знойдзены наступныя прылады:</translation> <translation id="4351175281479794167">Увядзіце код спраўджання</translation> @@ -1651,6 +1654,7 @@ <translation id="6328786501058569169">Гэты сайт уводзіць у зман</translation> <translation id="6337133576188860026">Вызваліцца да <ph name="SIZE" />. Некаторыя сайты могуць загружацца павальней пры наступным наведванні.</translation> <translation id="6337534724793800597">Фільтр палітык па назве</translation> +<translation id="6340739886198108203">Згодна з зададзенай адміністратарам палітыкай, не рэкамендуецца рабіць здымкі або відэазапісы экрана, калі паказваецца канфідэнцыяльнае змесціва:</translation> <translation id="6349101878882523185">Усталяваць праграму "<ph name="APP_NAME" />"</translation> <translation id="6353505687280762741">{COUNT,plural, =0{Няма}=1{1 пароль (для даменаў <ph name="DOMAIN_LIST" />, сінхранізаваны)}=2{2 паролі (для даменаў <ph name="DOMAIN_LIST" />, сінхранізаваны)}one{# пароль (для даменаў <ph name="DOMAIN_LIST" />, сінхранізаваны)}few{# паролі (для даменаў <ph name="DOMAIN_LIST" />, сінхранізаваны)}many{# пароляў (для даменаў <ph name="DOMAIN_LIST" />, сінхранізаваны)}other{# пароля (для даменаў <ph name="DOMAIN_LIST" />, сінхранізаваны)}}</translation> <translation id="6355392890578844978">Гэты браўзер не знаходзіцца пад кіраваннем кампаніі або іншай арганізацыі. Аднак сама прылада можа знаходзіцца пад знешнім кіраваннем. <ph name="BEGIN_LINK" />Даведацца больш<ph name="END_LINK" /></translation> @@ -1833,6 +1837,7 @@ <translation id="6972629891077993081">Прылады HID</translation> <translation id="6973656660372572881">Вызначаюцца і фіксаваныя проксі-серверы, і URL-адрас сцэнарыя .pac.</translation> <translation id="6973932557599545801">На жаль, дапамагчы не ўдалося. Працягвайце самастойна.</translation> +<translation id="6978236010531171013">Усё роўна абагуліць</translation> <translation id="6979158407327259162">Google Дыск</translation> <translation id="6979440798594660689">Выключыць (стандартна)</translation> <translation id="6979983982287291980">Спампаваныя файлы перасылаюцца для аналізу ў Google Cloud або трэцім бакам: напрыклад, для праверкі на наяўнасць канфідэнцыяльных даных або шкодных праграм.</translation> @@ -2024,6 +2029,7 @@ <translation id="7578104083680115302">Хуткая аплата на сайтах і ў праграмах з розных прылад карткамі, захаванымі ў сэрвісах Google.</translation> <translation id="7581199239021537589">Зрух відарыса па восі Y, бок 2</translation> <translation id="7582602800368606489">Хутка стварыць новую падзею ў Google Календары</translation> +<translation id="7591288787774558753">Абагуліць канфідэнцыяльнае змесціва?</translation> <translation id="7591636454931265313">Сайт <ph name="EMBEDDED_URL" /> запытвае дазвол выкарыстоўваць файлы cookie і даныя сайта <ph name="TOP_LEVEL_URL" /></translation> <translation id="7592362899630581445">Сертыфікат сервера парушае абмежаванні для імён.</translation> <translation id="7598391785903975535">Менш за <ph name="UPPER_ESTIMATE" /></translation> @@ -2034,6 +2040,7 @@ <translation id="7614494068621678628"><ph name="MANAGE_PASSWORDS_FOCUSED_FRIENDLY_MATCH_TEXT" />. Каб паглядзець паролі або кіраваць імі ў наладах Chrome, націсніце Tab, затым Enter</translation> <translation id="7616645509853975347">Адміністратар уключыў злучальнікі Chrome Enterprise Connectors у вашым браўзеры. У злучальнікаў ёсць доступ да некаторых вашых даных.</translation> <translation id="7619838219691048931">Канцавы аркуш</translation> +<translation id="7625242817712715120">Згодна з зададзенай адміністратарам палітыкай, не рэкамендуецца друкаваць гэта змесціва</translation> <translation id="762844065391966283">Па адным за раз</translation> <translation id="7633909222644580952">Даныя аб прадукцыйнасці і справаздачы аб збоях</translation> <translation id="7637571805876720304">Выдаліць крэдытную картку з браўзера Chromium?</translation> @@ -2187,6 +2194,7 @@ <translation id="809898108652741896">A6</translation> <translation id="8100588592594801589">Несапраўдныя карткі выдалены</translation> <translation id="8103161714697287722">Спосаб аплаты</translation> +<translation id="8103643211515685474">Усё роўна надрукаваць</translation> <translation id="8105368624971345109">Выключыць</translation> <translation id="810875025413331850">Прылад паблізу не знойдзена.</translation> <translation id="8116925261070264013">Без гуку</translation> @@ -2399,6 +2407,7 @@ <translation id="886872106311861689">B3</translation> <translation id="8870413625673593573">Нядаўна закрытыя</translation> <translation id="8870494189203302833">У тым жа парадку, рабочым бокам уніз</translation> +<translation id="8870700989640064057">Нарукаваць канфідэнцыяльны файл?</translation> <translation id="8871553383647848643">Наладзіць выгляд браўзера</translation> <translation id="8874824191258364635">Увядзіце сапраўдны нумар карткі</translation> <translation id="8884537526797090108">Немагчыма зрабіць запіс з-за наяўнасці на экране прыватнага змесціва</translation> @@ -2477,6 +2486,7 @@ <translation id="9119042192571987207">Запампавана</translation> <translation id="9128016270925453879">Палітыкі загружаны</translation> <translation id="9128870381267983090">Падключыцеся да сеткі</translation> +<translation id="9131119348384879525">Зняць канфідэнцыяльнае змесціва?</translation> <translation id="9137013805542155359">Паказаць арыгінал</translation> <translation id="9141013498910525015">Кіраваць адрасамі</translation> <translation id="9144951720726881238">Заканчэнне тэрміну дзеяння:</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb index a003290f..fd82fb2 100644 --- a/components/strings/components_strings_bn.xtb +++ b/components/strings/components_strings_bn.xtb
@@ -270,6 +270,7 @@ <translation id="1741613555002899862">DnsOverHttpsMode <ph name="SECURE_DNS_MODE_SECURE" /> হলে অবশ্যই নির্দিষ্ট করে দিতে হবে এবং একটি সঠিক স্ট্রিং হতে হবে।</translation> <translation id="1745880797583122200">আপনার ব্রাউজারটি ম্যানেজ করা হচ্ছে</translation> <translation id="1746113442205726301">ছবি Y শিফ্ট</translation> +<translation id="1747819498338037826">অটোমেটিক পরিবর্তন করা যাবে</translation> <translation id="17513872634828108">খোলা ট্যাব</translation> <translation id="1752021286346845558">মেলবক্স ৮</translation> <translation id="1753706481035618306">পৃষ্ঠা সংখ্যা</translation> @@ -1683,6 +1684,7 @@ <translation id="643051589346665201">Google পাসওয়ার্ড পরিবর্তন করুন</translation> <translation id="6433490469411711332">পরিচিতি তথ্য সম্পাদনা করুন</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> সংযোগ করতে প্রত্যাখ্যান করেছে।</translation> +<translation id="6438025220577812695">নিজে পরিবর্তন করব</translation> <translation id="6440503408713884761">এড়ানো হয়েছে</translation> <translation id="6443406338865242315">কোন কোন এক্সটেনশন ও প্লাগ-ইন আপনি ইনস্টল করেছেন</translation> <translation id="6446163441502663861">Kahu (Envelope)</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb index 91430e1..2cfff8c 100644 --- a/components/strings/components_strings_cs.xtb +++ b/components/strings/components_strings_cs.xtb
@@ -270,6 +270,7 @@ <translation id="1741613555002899862">Když je zásada DnsOverHttpsMode nastavená na hodnotu <ph name="SECURE_DNS_MODE_SECURE" />, musí být tato zásada nastavená a musí být platná.</translation> <translation id="1745880797583122200">Váš prohlížeč je spravován</translation> <translation id="1746113442205726301">Posun obrázku na ose Y</translation> +<translation id="1747819498338037826">Změnit automaticky</translation> <translation id="17513872634828108">Otevřené karty</translation> <translation id="1752021286346845558">Schránka 8</translation> <translation id="1753706481035618306">Číslo stránky</translation> @@ -1673,6 +1674,7 @@ <translation id="643051589346665201">Změnit heslo Google</translation> <translation id="6433490469411711332">Upravit kontaktní údaje</translation> <translation id="6433595998831338502">Web <ph name="HOST_NAME" /> odmítl připojení.</translation> +<translation id="6438025220577812695">Změním ho ručně</translation> <translation id="6440503408713884761">Ignorováno</translation> <translation id="6443406338865242315">Která rozšíření a pluginy máte nainstalované</translation> <translation id="6446163441502663861">Kahu (obálka)</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb index 81a7801..aeaa4061 100644 --- a/components/strings/components_strings_de.xtb +++ b/components/strings/components_strings_de.xtb
@@ -270,6 +270,7 @@ <translation id="1741613555002899862">Muss angegeben werden und ein gültiger String sein, wenn "DnsOverHttpsMode" auf <ph name="SECURE_DNS_MODE_SECURE" /> gesetzt ist.</translation> <translation id="1745880797583122200">Ihr Browser wird verwaltet</translation> <translation id="1746113442205726301">Y-Verschiebung des Bilds</translation> +<translation id="1747819498338037826">Automatisch ändern</translation> <translation id="17513872634828108">Geöffnete Tabs</translation> <translation id="1752021286346845558">Ablage 8</translation> <translation id="1753706481035618306">Seitennummer</translation> @@ -1676,6 +1677,7 @@ <translation id="643051589346665201">Google-Passwort ändern</translation> <translation id="6433490469411711332">Kontaktdaten bearbeiten</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> hat die Verbindung abgelehnt.</translation> +<translation id="6438025220577812695">Selbst ändern</translation> <translation id="6440503408713884761">Ignoriert</translation> <translation id="6443406338865242315">Welche Erweiterungen und Plug-ins Sie installiert haben</translation> <translation id="6446163441502663861">Kahu (Umschlag)</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb index 93e6bf7..d82c986 100644 --- a/components/strings/components_strings_es-419.xtb +++ b/components/strings/components_strings_es-419.xtb
@@ -823,6 +823,8 @@ quitarlo de la lista y agregarlo de nuevo.</translation> <translation id="3630699740441428070">Los administradores de este dispositivo configuraron tu conexión de red, lo cual puede permitirles ver tu tráfico de red, incluido los sitios web que visitas.</translation> <translation id="3631244953324577188">Biométricos</translation> +<translation id="3632503704576938756">Se reanudó compartir pantalla</translation> +<translation id="3632892046558972264">Se pausó compartir pantalla</translation> <translation id="3633738897356909127">Botón Actualizar Chrome: presiona Intro para actualizar Chrome desde la configuración del navegador</translation> <translation id="3634530185120165534">Bandeja 5</translation> <translation id="3634567936866541746">Ingresaste tu contraseña en un sitio engañoso. Para proteger tus cuentas, Chrome te recomienda revisar las contraseñas que tengas guardadas.</translation> @@ -1052,6 +1054,7 @@ <translation id="4346197816712207223">Tarjetas de crédito aceptadas</translation> <translation id="4346833872170306413">Roc-16K</translation> <translation id="4348834659292907206">La conexión a <ph name="SITE" /> no es segura</translation> +<translation id="4349365535725594680">No se pudo compartir contenido confidencial</translation> <translation id="4350629523305688469">Bandeja multifuncional</translation> <translation id="4351060348582610152"><ph name="ORIGIN" /> quiere detectar dispositivos Bluetooth cercanos. Se encontraron los siguientes dispositivos:</translation> <translation id="4351175281479794167">Ingresar código de verificación</translation> @@ -1639,6 +1642,7 @@ <translation id="6328786501058569169">Este sitio es engañoso</translation> <translation id="6337133576188860026">Esta acción libera menos de <ph name="SIZE" />. Es posible que algunos sitios se carguen más lento en tu próxima visita.</translation> <translation id="6337534724793800597">Filtrar políticas por nombre</translation> +<translation id="6340739886198108203">La política del administrador no recomienda grabar pantalla o tomar capturas cuando hay contenido confidencial visible:</translation> <translation id="6349101878882523185">Instalar <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Ninguna}=1{1 contraseña (para <ph name="DOMAIN_LIST" />, sincronizada)}=2{2 contraseñas (para <ph name="DOMAIN_LIST" />, sincronizadas)}other{# contraseñas (para <ph name="DOMAIN_LIST" />, sincronizadas)}}</translation> <translation id="6355392890578844978">Este navegador no es administrado por una empresa ni por otra organización. Es posible que la actividad correspondiente a este dispositivo se administre fuera de Chromium. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation> @@ -1818,6 +1822,7 @@ <translation id="6972629891077993081">Dispositivos HID</translation> <translation id="6973656660372572881">Se especifican servidores proxy fijos y URL de secuencias de comandos .pac.</translation> <translation id="6973932557599545801">No puedo ayudarte. Continúa por tu cuenta.</translation> +<translation id="6978236010531171013">Compartir de todos modos</translation> <translation id="6979158407327259162">Google Drive</translation> <translation id="6979440798594660689">Silenciar (predeterminado)</translation> <translation id="6979983982287291980">Se envían los archivos que descargas a Google Cloud o a terceros para su análisis. Por ejemplo, es posible que se analicen para detectar datos sensibles o software malicioso.</translation> @@ -2008,6 +2013,7 @@ <translation id="7578104083680115302">Paga con rapidez en sitios y apps a través de varios dispositivos con tarjetas que guardaste en Google.</translation> <translation id="7581199239021537589">Cambio en el eje Y del lado 2 de la imagen</translation> <translation id="7582602800368606489">Crear un evento nuevo en el Calendario de Google rápidamente</translation> +<translation id="7591288787774558753">¿Deseas compartir contenido confidencial?</translation> <translation id="7591636454931265313"><ph name="EMBEDDED_URL" /> desea utilizar cookies y datos de los sitios en <ph name="TOP_LEVEL_URL" /></translation> <translation id="7592362899630581445">El certificado del servidor no cumple con las restricciones de nombre.</translation> <translation id="7598391785903975535">Menos de <ph name="UPPER_ESTIMATE" /></translation> @@ -2018,6 +2024,7 @@ <translation id="7614494068621678628"><ph name="MANAGE_PASSWORDS_FOCUSED_FRIENDLY_MATCH_TEXT" />: presiona Tab y, luego, Intro para ver y administrar tus contraseñas en la configuración de Chrome</translation> <translation id="7616645509853975347">Tu administrador activó Chrome Enterprise Connectors en tu navegador. Estos conectores tienen acceso a algunos de tus datos.</translation> <translation id="7619838219691048931">Final de la hoja</translation> +<translation id="7625242817712715120">La política del administrador no recomienda imprimir este contenido.</translation> <translation id="762844065391966283">Uno por vez</translation> <translation id="7633909222644580952">Informes sobre fallos y datos de rendimiento</translation> <translation id="7637571805876720304">¿Confirmas que quieres quitar la tarjeta de crédito de Chromium?</translation> @@ -2171,6 +2178,7 @@ <translation id="809898108652741896">A6</translation> <translation id="8100588592594801589">Se quitaron las tarjetas no válidas</translation> <translation id="8103161714697287722">Forma de pago</translation> +<translation id="8103643211515685474">Imprimir de todos modos</translation> <translation id="8105368624971345109">Desactivar</translation> <translation id="810875025413331850">No se encontraron dispositivos cercanos.</translation> <translation id="8116925261070264013">Silenciados</translation> @@ -2384,6 +2392,7 @@ <translation id="886872106311861689">B3</translation> <translation id="8870413625673593573">Cerrado recientemente</translation> <translation id="8870494189203302833">Mismo orden hacia abajo</translation> +<translation id="8870700989640064057">¿Deseas imprimir un archivo confidencial?</translation> <translation id="8871553383647848643">Personalizar el estilo del navegador</translation> <translation id="8874824191258364635">Ingresa un número de tarjeta válido</translation> <translation id="8884537526797090108">No se puede grabar contenido confidencial</translation> @@ -2462,6 +2471,7 @@ <translation id="9119042192571987207">Subido</translation> <translation id="9128016270925453879">Se cargaron las políticas</translation> <translation id="9128870381267983090">Conectarse a una red</translation> +<translation id="9131119348384879525">¿Deseas capturar contenido confidencial?</translation> <translation id="9137013805542155359">Mostrar original</translation> <translation id="9141013498910525015">Administrar direcciones</translation> <translation id="9144951720726881238">Fecha de vencimiento:</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb index 6fe6f91..d8bd4088 100644 --- a/components/strings/components_strings_et.xtb +++ b/components/strings/components_strings_et.xtb
@@ -270,6 +270,7 @@ <translation id="1741613555002899862">Peab olema määratud ja kehtiv string, kui reegli DnsOverHttpsMode väärtus on <ph name="SECURE_DNS_MODE_SECURE" />.</translation> <translation id="1745880797583122200">Teie brauserit hallatakse</translation> <translation id="1746113442205726301">Pildi nihe Y-teljel</translation> +<translation id="1747819498338037826">Muuda automaatselt</translation> <translation id="17513872634828108">Avatud vahelehed</translation> <translation id="1752021286346845558">Postkast 8</translation> <translation id="1753706481035618306">Lk</translation> @@ -1686,6 +1687,7 @@ <translation id="643051589346665201">Muuda Google'i parooli</translation> <translation id="6433490469411711332">Kontaktandmete muutmine</translation> <translation id="6433595998831338502">Host <ph name="HOST_NAME" /> keeldus ühendamast.</translation> +<translation id="6438025220577812695">Muudan seda ise</translation> <translation id="6440503408713884761">Eiras</translation> <translation id="6443406338865242315">Millised laiendused ja pistikprogrammid olete installinud</translation> <translation id="6446163441502663861">Kahu (ümbrik)</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb index 49a47b2..e3abf75 100644 --- a/components/strings/components_strings_fi.xtb +++ b/components/strings/components_strings_fi.xtb
@@ -830,6 +830,8 @@ sallittujen ohjelmien luettelosta ja lisäämistä sitten uudelleen.</translation> <translation id="3630699740441428070">Laitteen järjestelmänvalvojat ovat valinneet yhteysasetuksesi, joten he saattavat nähdä verkkoliikenteen, myös avaamasi sivustot.</translation> <translation id="3631244953324577188">Biometriikka</translation> +<translation id="3632503704576938756">Näytön jakamista jatkettu</translation> +<translation id="3632892046558972264">Näytön jakaminen keskeytetty</translation> <translation id="3633738897356909127">Päivitä Chrome ‑painike, päivitä Chrome sen asetuksista painamalla Enter</translation> <translation id="3634530185120165534">Lokero 5</translation> <translation id="3634567936866541746">Lisäsit juuri salasanasi petolliselle sivustolle. Chrome suosittelee tarkistamaan tallennetut salasanasi tilisi suojaamiseksi.</translation> @@ -1064,6 +1066,7 @@ <translation id="4346197816712207223">Hyväksytyt luottokortit</translation> <translation id="4346833872170306413">Roc-16K</translation> <translation id="4348834659292907206">Yhteys sivustoon (<ph name="SITE" />) ei ole turvallinen</translation> +<translation id="4349365535725594680">Luottamuksellista sisältöä ei voida jakaa</translation> <translation id="4350629523305688469">Monikäyttölokero</translation> <translation id="4351060348582610152"><ph name="ORIGIN" /> haluaa etsiä lähellä olevia Bluetooth-laitteita. Seuraavat laitteet löydettiin:</translation> <translation id="4351175281479794167">Lisää vahvistuskoodi</translation> @@ -1654,6 +1657,7 @@ <translation id="6328786501058569169">Tämä sivusto on petollinen</translation> <translation id="6337133576188860026">Vapauttaa alle <ph name="SIZE" />. Jotkin sivustot saattavat latautua hitaammin seuraavalla käynnillä.</translation> <translation id="6337534724793800597">Suodata käytäntöjä nimen mukaan</translation> +<translation id="6340739886198108203">Järjestelmänvalvojakäytännössä ei suositella kuvakaappausten ottamista tai tallenteen kuvaamista, kun luottamuksellinen sisältö on näkyvissä:</translation> <translation id="6349101878882523185">Asenna <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Ei mitään}=1{1 salasana: (<ph name="DOMAIN_LIST" />, synkronoitu)}=2{2 salasanaa (<ph name="DOMAIN_LIST" />, synkronoitu)}other{# salasanaa (<ph name="DOMAIN_LIST" />, synkronoitu)}}</translation> <translation id="6355392890578844978">Yritys tai muu organisaatio ei ylläpidä selainta. Laitteen toimintaa saatetaan ylläpitää Chromiumin ulkopuolelta. <ph name="BEGIN_LINK" />Lue lisää<ph name="END_LINK" /></translation> @@ -1837,6 +1841,7 @@ <translation id="6972629891077993081">HID-laitteet</translation> <translation id="6973656660372572881">Sekä kiinteät välityspalvelimet että .pac-URL-osoite on määritetty.</translation> <translation id="6973932557599545801">En valitettavasti voi auttaa. Voit jatkaa omatoimisesti.</translation> +<translation id="6978236010531171013">Jaa silti</translation> <translation id="6979158407327259162">Google Drive</translation> <translation id="6979440798594660689">Mykistä (oletus)</translation> <translation id="6979983982287291980">Lataamasi tiedostot lähetetään Google Cloudiin tai kolmansille osapuolille analysoitaviksi. Ne voidaan esimerkiksi skannata arkaluontoisten tietojen tai haittaohjelmien varalta.</translation> @@ -2027,6 +2032,7 @@ <translation id="7578104083680115302">Voit maksaa sivustoilla ja sovelluksissa nopeasti eri laitteillasi käyttämällä Googleen tallennettuja kortteja.</translation> <translation id="7581199239021537589">2. puolen kuvan Y vaihto</translation> <translation id="7582602800368606489">Luo uusi tapahtuma nopeasti Google Kalenterissa</translation> +<translation id="7591288787774558753">Jaetaanko luottamuksellinen sisältö?</translation> <translation id="7591636454931265313"><ph name="EMBEDDED_URL" /> haluaa käyttää evästeitä ja sivustodataa täällä: <ph name="TOP_LEVEL_URL" /></translation> <translation id="7592362899630581445">Palvelimen varmenne rikkoo nimirajoituksia.</translation> <translation id="7598391785903975535">Alle <ph name="UPPER_ESTIMATE" /></translation> @@ -2037,6 +2043,7 @@ <translation id="7614494068621678628"><ph name="MANAGE_PASSWORDS_FOCUSED_FRIENDLY_MATCH_TEXT" />, katso ja ylläpidä salasanojasi Chromen asetuksissa painamalla sarkainta ja sitten Enter</translation> <translation id="7616645509853975347">Järjestelmänvalvoja on ottanut Chrome Enterprise Connectorsin käyttöön selaimellesi. Nämä liittimet pääsevät osaan datastasi.</translation> <translation id="7619838219691048931">Viimeinen sivu</translation> +<translation id="7625242817712715120">Järjestelmänvalvojakäytännössä ei suositella tämän sisällön tulostamista</translation> <translation id="762844065391966283">Yksi kerrallaan</translation> <translation id="7633909222644580952">Tehokkuusdata ja virheraportit</translation> <translation id="7637571805876720304">Poistetaanko luottokortti Chromiumista?</translation> @@ -2190,6 +2197,7 @@ <translation id="809898108652741896">A6</translation> <translation id="8100588592594801589">Virheelliset kortit on poistettu</translation> <translation id="8103161714697287722">Maksutapa</translation> +<translation id="8103643211515685474">Tulosta silti</translation> <translation id="8105368624971345109">Poista käytöstä</translation> <translation id="810875025413331850">Lähistöllä olevia laitteita ei löydy.</translation> <translation id="8116925261070264013">Mykistetty</translation> @@ -2403,6 +2411,7 @@ <translation id="886872106311861689">B3</translation> <translation id="8870413625673593573">Hiljattain suljetut</translation> <translation id="8870494189203302833">Sama järjestys tulostuspuoli alaspäin</translation> +<translation id="8870700989640064057">Tulostetaanko luottamuksellinen tiedosto?</translation> <translation id="8871553383647848643">Muokkaa selaimen ulkoasua</translation> <translation id="8874824191258364635">Anna kelvollinen kortin numero.</translation> <translation id="8884537526797090108">Luottamuksellista sisältöä ei voi tallentaa</translation> @@ -2481,6 +2490,7 @@ <translation id="9119042192571987207">Lähetetty</translation> <translation id="9128016270925453879">Käytännöt on ladattu</translation> <translation id="9128870381267983090">Yhdistä verkkoon</translation> +<translation id="9131119348384879525">Otetaanko luottamuksellisesta sisällöstä kuvakaappaus?</translation> <translation id="9137013805542155359">Näytä alkuperäinen</translation> <translation id="9141013498910525015">Ylläpidä osoitteita</translation> <translation id="9144951720726881238">Vanhenemispäivämäärä:</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb index 577043d7..b0c8476 100644 --- a/components/strings/components_strings_fr.xtb +++ b/components/strings/components_strings_fr.xtb
@@ -270,6 +270,7 @@ <translation id="1741613555002899862">Cette règle doit être spécifiée avec une chaîne valide lorsque la règle DnsOverHttpsMode est définie sur <ph name="SECURE_DNS_MODE_SECURE" />.</translation> <translation id="1745880797583122200">Votre navigateur est géré</translation> <translation id="1746113442205726301">Décalage Y de l'image</translation> +<translation id="1747819498338037826">Changer automatiquement</translation> <translation id="17513872634828108">Onglets ouverts</translation> <translation id="1752021286346845558">Boîte aux lettres 8</translation> <translation id="1753706481035618306">Numéro de page</translation> @@ -685,6 +686,7 @@ <translation id="3215092763954878852">Impossible d'utiliser WebAuthn</translation> <translation id="3218181027817787318">Valeur relative</translation> <translation id="3223287115535306850">Indicateur de lancement de l'appli</translation> +<translation id="3225347164936328585">Applaudissements</translation> <translation id="3225919329040284222">Le serveur dispose d'un certificat qui ne répond pas aux exigences intégrées. Celles-ci sont incluses dans certains sites Web très sécurisés afin de vous protéger.</translation> <translation id="3226128629678568754">Veuillez appuyer sur le bouton d'actualisation pour renvoyer les données nécessaires au chargement de la page.</translation> <translation id="3226387218769101247">Vignettes</translation> @@ -721,6 +723,7 @@ <translation id="3333762389743153920">Non éligible pour la carte virtuelle</translation> <translation id="3338095232262050444">Sécurisé</translation> <translation id="3339446062576134663">Cloud (Ash)</translation> +<translation id="3345782426586609320">Yeux</translation> <translation id="3355823806454867987">Modifier les paramètres du proxy...</translation> <translation id="3360103848165129075">Feuille du gestionnaire de paiement</translation> <translation id="3361596688432910856">Les informations suivantes <ph name="BEGIN_EMPHASIS" />ne seront pas enregistrées<ph name="END_EMPHASIS" /> dans Chrome : @@ -826,6 +829,8 @@ essayez de le supprimer de la liste, puis de le rajouter.</translation> <translation id="3630699740441428070">Les administrateurs de cet appareil ont configuré votre connexion réseau grâce à laquelle ils ont la possibilité d'afficher le trafic de votre réseau, y compris les sites Web que vous consultez.</translation> <translation id="3631244953324577188">Biométrie</translation> +<translation id="3632503704576938756">Partage d'écran réactivé</translation> +<translation id="3632892046558972264">Partage d'écran suspendu</translation> <translation id="3633738897356909127">Bouton "Mise à jour de Chrome" : appuyer sur Entrée pour mettre à jour Chrome depuis les paramètres du navigateur</translation> <translation id="3634530185120165534">Bac 5</translation> <translation id="3634567936866541746">Vous venez de saisir votre mot de passe sur un site trompeur. Pour sécuriser vos comptes, Chrome vous recommande de vérifier vos mots de passe enregistrés.</translation> @@ -1060,6 +1065,7 @@ <translation id="4346197816712207223">Cartes de crédit acceptées</translation> <translation id="4346833872170306413">Roc-16K</translation> <translation id="4348834659292907206">La connexion à <ph name="SITE" /> n'est pas sécurisée</translation> +<translation id="4349365535725594680">Impossible de partager le contenu confidentiel</translation> <translation id="4350629523305688469">Bac multifonction</translation> <translation id="4351060348582610152">Le site <ph name="ORIGIN" /> souhaite rechercher les appareils Bluetooth à proximité. Les appareils suivants ont été détectés :</translation> <translation id="4351175281479794167">Saisir le code de validation</translation> @@ -1076,6 +1082,7 @@ <translation id="4390472908992056574">Brim</translation> <translation id="4406883609789734330">Sous-titres instantanés</translation> <translation id="4406896451731180161">résultats de recherche</translation> +<translation id="4407755609041463909">Feu</translation> <translation id="4408413947728134509">Cookies <ph name="NUM_COOKIES" /></translation> <translation id="4414515549596849729">cookies et infos liées aux sites</translation> <translation id="4415426530740016218">Adresse d'enlèvement</translation> @@ -1383,6 +1390,7 @@ <translation id="5344579389779391559">L'accès à la page suivante peut engendrer des frais</translation> <translation id="5347645913823149105">Bouton "Personnaliser les polices dans Chrome", appuyez sur Entrée pour personnaliser la taille des polices et les polices de caractères dans Chrome</translation> <translation id="5355557959165512791">Le site <ph name="SITE" /> est actuellement inaccessible, car son certificat a été révoqué. Les erreurs réseau et les attaques sont généralement temporaires. Vous devriez donc pouvoir accéder à cette page plus tard.</translation> +<translation id="5356837363448394805">Rougir</translation> <translation id="536296301121032821">Échec du stockage des paramètres de la règle.</translation> <translation id="5363309033720083897">Port série autorisé par votre administrateur</translation> <translation id="5371425731340848620">Mettre à jour la carte</translation> @@ -1613,6 +1621,7 @@ <translation id="622039917539443112">Pli parallèle</translation> <translation id="6221345481584921695">La fonctionnalité de navigation sécurisée Google a récemment permis de <ph name="BEGIN_LINK" />détecter des logiciels malveillants<ph name="END_LINK" /> sur le site <ph name="SITE" />. Un site Web qui est normalement sans danger peut parfois être infecté par des logiciels malveillants. Le contenu en cause provient de l'hôte "<ph name="SUBRESOURCE_HOST" />", une source de logiciels malveillants connue.</translation> <translation id="6226163402662242066"><ph name="MANAGE_CHROME_ACCESSIBILITY_FOCUSED_FRIENDLY_MATCH_TEXT" />, puis Tabulation, puis Entrée pour personnaliser vos outils d'accessibilité dans les paramètres Chrome</translation> +<translation id="6233160458685643793">Très souriant</translation> <translation id="6234122620015464377">Couper après chaque document</translation> <translation id="6240447795304464094">Logo Google Pay</translation> <translation id="6241121617266208201">Masquer les suggestions</translation> @@ -1647,6 +1656,7 @@ <translation id="6328786501058569169">Ce site est trompeur</translation> <translation id="6337133576188860026">Libère moins de <ph name="SIZE" />. Le chargement de certains sites risque d'être plus lent lors de votre prochaine visite.</translation> <translation id="6337534724793800597">Filtrer les règles par nom</translation> +<translation id="6340739886198108203">Une règle de l'administrateur déconseille de capturer ou d'enregistrer l'écran quand du contenu confidentiel est visible :</translation> <translation id="6349101878882523185">Installer <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Aucun}=1{1 mot de passe (associé à <ph name="DOMAIN_LIST" /> ; synchronisé)}=2{2 mots de passe (associés à <ph name="DOMAIN_LIST" /> ; synchronisés)}one{# mot de passe (associé à <ph name="DOMAIN_LIST" /> ; synchronisé)}other{# mots de passe (associés à <ph name="DOMAIN_LIST" /> ; synchronisés)}}</translation> <translation id="6355392890578844978">Ce navigateur n'est géré par aucune entreprise ni aucune autre organisation. Il se peut que l'activité sur cet appareil soit gérée en dehors de Chromium. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation> @@ -1664,6 +1674,7 @@ <translation id="6390662030813198813">Engineering-E</translation> <translation id="6391700400718590966">La bottom sheet indiquant qu'aucun identifiant ne correspond pour le paiement sécurisé est fermée</translation> <translation id="6393956493820063117">Le règlement de l'administrateur bloque le collage de contenus provenant de "<ph name="ORIGIN_NAME" />" à cet endroit</translation> +<translation id="6398277657359595425">Pleurer fort</translation> <translation id="6398765197997659313">Quitter le mode plein écran</translation> <translation id="6401136357288658127">Cette règle est obsolète. Vous devez utiliser la règle "<ph name="NEW_POLICY" />" à la place.</translation> <translation id="6404511346730675251">Modifier le favori</translation> @@ -1677,6 +1688,7 @@ <translation id="643051589346665201">Changer de mot de passe Google</translation> <translation id="6433490469411711332">Modifier les coordonnées</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> n'autorise pas la connexion.</translation> +<translation id="6438025220577812695">Changer moi-même</translation> <translation id="6440503408713884761">Ignoré</translation> <translation id="6443406338865242315">Les extensions et les plug-ins que vous avez installés</translation> <translation id="6446163441502663861">Kahu (enveloppe)</translation> @@ -1738,6 +1750,7 @@ <translation id="6660413144148052430">position</translation> <translation id="6662457027866368246">1er rouleau</translation> <translation id="666259744093848177">(x86_64, langage traduit)</translation> +<translation id="6663846344464066639">Mains jointes</translation> <translation id="6665553082534466207">Triple perforation à droite</translation> <translation id="6671697161687535275">Supprimer la suggestion de saisie de formulaire de Chromium ?</translation> <translation id="6685834062052613830">Déconnectez-vous et complétez la configuration.</translation> @@ -1806,6 +1819,7 @@ <translation id="6934672428414710184">Ce nom provient de votre compte Google</translation> <translation id="6944692733090228304">Vous avez saisi votre mot de passe sur un site qui n'est pas géré par <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Pour protéger votre compte, ne réutilisez pas ce mot de passe dans d'autres applications ni sur d'autres sites.</translation> <translation id="6945221475159498467">Sélectionner</translation> +<translation id="6946722113367118030">Penser</translation> <translation id="6948051842255602737">Partie terminée ! Votre score est de <ph name="SCORE" />.</translation> <translation id="6948701128805548767">Sélectionnez une adresse pour consulter les modes et conditions d'enlèvement disponibles</translation> <translation id="6949872517221025916">Réinitialiser le mot de passe</translation> @@ -1826,6 +1840,7 @@ <translation id="6972629891077993081">Périphériques HID</translation> <translation id="6973656660372572881">Les serveurs proxy déterminés et une URL de script .pac sont spécifiés tous les deux.</translation> <translation id="6973932557599545801">Malheureusement, je ne peux pas vous aider. Veuillez continuer manuellement.</translation> +<translation id="6978236010531171013">Partager quand même</translation> <translation id="6979158407327259162">Google Drive</translation> <translation id="6979440798594660689">Coupé (par défaut)</translation> <translation id="6979983982287291980">Le fichier que vous téléchargez est envoyé dans Google Cloud ou à des tiers pour y être analysé (par exemple, pour vérifier qu'il ne contient pas de données sensibles ni des logiciels malveillants).</translation> @@ -2017,6 +2032,7 @@ <translation id="7578104083680115302">Payez rapidement sur des sites et dans des applications sur tous vos appareils au moyen de cartes que vous avez enregistrées sur Google.</translation> <translation id="7581199239021537589">Décalage Y de l'image côté 2</translation> <translation id="7582602800368606489">Créer rapidement un événement dans Google Agenda</translation> +<translation id="7591288787774558753">Partager le contenu confidentiel ?</translation> <translation id="7591636454931265313">Le site <ph name="EMBEDDED_URL" /> souhaite utiliser les cookies et les données de site sur <ph name="TOP_LEVEL_URL" /></translation> <translation id="7592362899630581445">Le certificat du serveur ne respecte pas les restrictions de noms.</translation> <translation id="7598391785903975535">Moins de <ph name="UPPER_ESTIMATE" /></translation> @@ -2027,6 +2043,7 @@ <translation id="7614494068621678628"><ph name="MANAGE_PASSWORDS_FOCUSED_FRIENDLY_MATCH_TEXT" /> : appuyer sur Tabulation, puis sur Entrée pour consulter et gérer vos mots de passe dans les paramètres Chrome</translation> <translation id="7616645509853975347">Votre administrateur a activé ces connecteurs dans votre navigateur, lesquels ont accès à certaines de vos données.</translation> <translation id="7619838219691048931">Feuille de fin</translation> +<translation id="7625242817712715120">Une règle de l'administrateur déconseille d'imprimer ce contenu</translation> <translation id="762844065391966283">Un à la fois</translation> <translation id="7633909222644580952">Données relatives aux performances et rapports d'erreur</translation> <translation id="7637571805876720304">Supprimer les données de carte de paiement de Chromium ?</translation> @@ -2180,6 +2197,7 @@ <translation id="809898108652741896">A6</translation> <translation id="8100588592594801589">Les cartes non valides ont été supprimées</translation> <translation id="8103161714697287722">Mode de paiement</translation> +<translation id="8103643211515685474">Imprimer quand même</translation> <translation id="8105368624971345109">Désactiver</translation> <translation id="810875025413331850">Aucun appareil à proximité n'a été trouvé.</translation> <translation id="8116925261070264013">Son coupé</translation> @@ -2392,6 +2410,7 @@ <translation id="886872106311861689">B3</translation> <translation id="8870413625673593573">Récemment fermés</translation> <translation id="8870494189203302833">Même ordre, face vers le bas</translation> +<translation id="8870700989640064057">Imprimer le fichier confidentiel ?</translation> <translation id="8871553383647848643">Personnaliser l'apparence de votre navigateur</translation> <translation id="8874824191258364635">Saisissez un numéro de carte valide</translation> <translation id="8884537526797090108">Impossible d'enregistrer un contenu confidentiel</translation> @@ -2470,6 +2489,7 @@ <translation id="9119042192571987207">Importation terminée</translation> <translation id="9128016270925453879">Les règles sont chargées</translation> <translation id="9128870381267983090">Connectez-vous au réseau</translation> +<translation id="9131119348384879525">Capturer le contenu confidentiel ?</translation> <translation id="9137013805542155359">Afficher l'original</translation> <translation id="9141013498910525015">Gérer les adresses</translation> <translation id="9144951720726881238">Date d'expiration :</translation>
diff --git a/components/strings/components_strings_gl.xtb b/components/strings/components_strings_gl.xtb index 4013a97..752a40c 100644 --- a/components/strings/components_strings_gl.xtb +++ b/components/strings/components_strings_gl.xtb
@@ -827,6 +827,8 @@ a eliminalo da lista e volver engadilo.</translation> <translation id="3630699740441428070">Os administradores deste dispositivo configuraron a túa conexión de rede, o cal pode permitirlles ver o tráfico de rede, así como os sitios web que visitas.</translation> <translation id="3631244953324577188">Autenticación biométrica</translation> +<translation id="3632503704576938756">Retomouse a pantalla compartida</translation> +<translation id="3632892046558972264">Púxose en pausa a pantalla compartida</translation> <translation id="3633738897356909127">Botón Actualizar Chrome. Preme Intro para actualizar Chrome desde a configuración do navegador</translation> <translation id="3634530185120165534">Bandexa 5</translation> <translation id="3634567936866541746">Acabas de escribir o teu contrasinal nun sitio enganoso. Para protexer as túas contas, Chrome recoméndache que comprobes os contrasinais que tes gardados.</translation> @@ -1061,6 +1063,7 @@ <translation id="4346197816712207223">Acéptanse tarxetas de crédito</translation> <translation id="4346833872170306413">Roc-16K</translation> <translation id="4348834659292907206">A conexión a <ph name="SITE" /> non é segura</translation> +<translation id="4349365535725594680">Non se pode compartir contido confidencial</translation> <translation id="4350629523305688469">Bandexa multifunción</translation> <translation id="4351060348582610152"><ph name="ORIGIN" /> quere buscar dispositivos Bluetooth cerca. Atopáronse os seguintes dispositivos:</translation> <translation id="4351175281479794167">Mete o código de verificación</translation> @@ -1651,6 +1654,7 @@ <translation id="6328786501058569169">Este sitio é enganoso</translation> <translation id="6337133576188860026">Libera menos de <ph name="SIZE" />. É posible que algúns sitios carguen de forma máis lenta a próxima vez que os visites.</translation> <translation id="6337534724793800597">Filtrar políticas por nome</translation> +<translation id="6340739886198108203">Na política do administrador recoméndase que non se fagan capturas nin gravacións se na pantalla se mostra contido confidencial:</translation> <translation id="6349101878882523185">Instalar a aplicación <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Ningún}=1{1 contrasinal (para <ph name="DOMAIN_LIST" />, sincronizado)}=2{2 contrasinais (para <ph name="DOMAIN_LIST" />, sincronizados)}other{# contrasinais (para <ph name="DOMAIN_LIST" />, sincronizados)}}</translation> <translation id="6355392890578844978">Ningunha compañía ou organización xestiona este navegador. A actividade deste dispositivo pódese xestionar fóra de Chromium. <ph name="BEGIN_LINK" />Máis información<ph name="END_LINK" /></translation> @@ -1833,6 +1837,7 @@ <translation id="6972629891077993081">Dispositivos de interface humana</translation> <translation id="6973656660372572881">Especifícanse tanto servidores proxy fixos como un URL de script .pac.</translation> <translation id="6973932557599545801">Síntoo, non podo axudar. Continúa sen asistencia.</translation> +<translation id="6978236010531171013">Compartir de todos os modos</translation> <translation id="6979158407327259162">Google Drive</translation> <translation id="6979440798594660689">Silenciar (opción predeterminada)</translation> <translation id="6979983982287291980">Os ficheiros que descargas envíanse a Google Cloud ou a terceiros para analizalos. Por exemplo, poderíase comprobar se conteñen datos confidenciais ou software malicioso.</translation> @@ -2023,6 +2028,7 @@ <translation id="7578104083680115302">Paga rapidamente en sitios e aplicacións en diferentes dispositivos usando as tarxetas que gardaches con Google.</translation> <translation id="7581199239021537589">Desprazamento do lado 2 da imaxe no eixe Y</translation> <translation id="7582602800368606489">Crear rapidamente un evento novo en Google Calendar</translation> +<translation id="7591288787774558753">Queres compartir contido confidencial?</translation> <translation id="7591636454931265313"><ph name="EMBEDDED_URL" /> quere utilizar as cookies e os datos do sitio <ph name="TOP_LEVEL_URL" /></translation> <translation id="7592362899630581445">O certificado do servidor inclúe un nome que está fóra do teu alcance.</translation> <translation id="7598391785903975535">Menos de <ph name="UPPER_ESTIMATE" /></translation> @@ -2033,6 +2039,7 @@ <translation id="7614494068621678628"><ph name="MANAGE_PASSWORDS_FOCUSED_FRIENDLY_MATCH_TEXT" />. Preme Tab e, a continuación, Intro para ver e xestionar os teus contrasinais desde a configuración de Chrome</translation> <translation id="7616645509853975347">O teu administrador activou Chrome Enterprise Connectors no teu navegador. Estes conectores teñen acceso a algúns dos teus datos.</translation> <translation id="7619838219691048931">Folla final</translation> +<translation id="7625242817712715120">Na política do administrador recoméndase que non se imprima este contido</translation> <translation id="762844065391966283">Un de cada vez</translation> <translation id="7633909222644580952">Datos de rendemento e informes de fallos</translation> <translation id="7637571805876720304">Queres eliminar a túa tarxeta de crédito de Chromium?</translation> @@ -2186,6 +2193,7 @@ <translation id="809898108652741896">A6</translation> <translation id="8100588592594801589">Quitáronse as tarxetas non válidas</translation> <translation id="8103161714697287722">Método de pago</translation> +<translation id="8103643211515685474">Imprimir de todos os modos</translation> <translation id="8105368624971345109">Desactivar</translation> <translation id="810875025413331850">Non se encontraron dispositivos cerca.</translation> <translation id="8116925261070264013">Silenciados</translation> @@ -2398,6 +2406,7 @@ <translation id="886872106311861689">B3</translation> <translation id="8870413625673593573">Pechados recentemente</translation> <translation id="8870494189203302833">A mesma orde cara abaixo</translation> +<translation id="8870700989640064057">Queres imprimir o ficheiro confidencial?</translation> <translation id="8871553383647848643">Personalizar o aspecto do navegador</translation> <translation id="8874824191258364635">Introduce un número de tarxeta válido</translation> <translation id="8884537526797090108">Non se pode gravar contido confidencial</translation> @@ -2476,6 +2485,7 @@ <translation id="9119042192571987207">Cargouse</translation> <translation id="9128016270925453879">Cargáronse as políticas</translation> <translation id="9128870381267983090">Conectarse á rede</translation> +<translation id="9131119348384879525">Queres capturar contido confidencial?</translation> <translation id="9137013805542155359">Mostrar orixinal</translation> <translation id="9141013498910525015">Xestionar enderezos</translation> <translation id="9144951720726881238">Data de vencemento:</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb index 776893e..93be65a 100644 --- a/components/strings/components_strings_id.xtb +++ b/components/strings/components_strings_id.xtb
@@ -70,7 +70,7 @@ <translation id="1201402288615127009">Berikutnya</translation> <translation id="1201895884277373915">Lainnya dari situs ini</translation> <translation id="1206967143813997005">Tanda tangan awal tidak valid</translation> -<translation id="1209206284964581585">Sembunyikan sekarang</translation> +<translation id="1209206284964581585">Sembunyikan untuk saat ini</translation> <translation id="1209221128712833642">Tombol Buat formulir, tekan Enter untuk membuat formulir baru di Google Formulir dengan cepat</translation> <translation id="121201262018556460">Anda bermaksud membuka <ph name="DOMAIN" />, namun server menyajikan sertifikat yang berisi kunci yang lemah. Penyerang mungkin telah merusak kunci pribadi, dan server mungkin bukan yang diharapkan (Anda mungkin sedang berkomunikasi dengan penyerang).</translation> <translation id="1219129156119358924">Keamanan Sistem</translation>
diff --git a/components/strings/components_strings_is.xtb b/components/strings/components_strings_is.xtb index fe43989..1455935 100644 --- a/components/strings/components_strings_is.xtb +++ b/components/strings/components_strings_is.xtb
@@ -828,6 +828,8 @@ að taka hana af listanum og bæta henni svo við aftur.</translation> <translation id="3630699740441428070">Kerfisstjórar þessa tækis grunnstilltu nettenginguna þína sem kann að gera þeim kleift að skoða netumferðina þína, þar á meðal hvaða vefsvæði þú heimsækir.</translation> <translation id="3631244953324577188">Lífkenni</translation> +<translation id="3632503704576938756">Skjádeiling er hafin að nýju</translation> +<translation id="3632892046558972264">Hlé var gert á skjádeilingu</translation> <translation id="3633738897356909127">Hnappurinn Uppfæra Chrome, ýttu á Enter til að uppfæra Chrome úr stillingum Chrome</translation> <translation id="3634530185120165534">Bakki 5</translation> <translation id="3634567936866541746">Þú gafst upp aðgangsorðið þitt á svindlsíðu. Chrome mælir með því að þú athugir vistuðu aðgangsorðin þín núna til að tryggja öryggi reikninganna þinna.</translation> @@ -1062,6 +1064,7 @@ <translation id="4346197816712207223">Kreditkort sem tekið er við</translation> <translation id="4346833872170306413">Roc-16K</translation> <translation id="4348834659292907206">Tengingin við <ph name="SITE" /> er ekki örugg</translation> +<translation id="4349365535725594680">Ekki er hægt að deila trúnaðarupplýsingum</translation> <translation id="4350629523305688469">Fjölnota bakki</translation> <translation id="4351060348582610152"><ph name="ORIGIN" /> vill leita að nálægum Bluetooth-tækjum. Eftirfarandi tæki hafa fundist:</translation> <translation id="4351175281479794167">Sláðu inn staðfestingarkóða</translation> @@ -1652,6 +1655,7 @@ <translation id="6328786501058569169">Þetta vefsvæði villir á sér heimildir</translation> <translation id="6337133576188860026">Losar minna en <ph name="SIZE" />. Lengri tíma gæti tekið að sækja sum vefsvæði þegar þú heimsækir þau næst.</translation> <translation id="6337534724793800597">Sía reglur eftir heiti</translation> +<translation id="6340739886198108203">Regla kerfisstjóra ræður gegn því að taka skjámyndir eða taka upp þegar trúnaðarupplýsingar eru sýnilegar:</translation> <translation id="6349101878882523185">Setja upp <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Ekkert}=1{1 aðgangsorð (fyrir <ph name="DOMAIN_LIST" />, samstillt)}=2{2 aðgangsorð fyrir (<ph name="DOMAIN_LIST" />, samstillt)}one{# aðgangsorð (fyrir <ph name="DOMAIN_LIST" />, samstillt)}other{# aðgangsorð (fyrir <ph name="DOMAIN_LIST" />, samstillt)}}</translation> <translation id="6355392890578844978">Þessi vafri er ekki í umsjón fyrirtækis eða stofnunar Hægt er að hafa umsjón með aðgerðum í þessu tæki utan Chromium. <ph name="BEGIN_LINK" />Nánar<ph name="END_LINK" /></translation> @@ -1834,6 +1838,7 @@ <translation id="6972629891077993081">HID-tæki</translation> <translation id="6973656660372572881">Bæði fastir proxy-þjónar og vefslóð á .pac-skriftu eru skilgreind.</translation> <translation id="6973932557599545801">Ég get ekki aðstoðað meira, haltu áfram upp á eigin spýtur.</translation> +<translation id="6978236010531171013">Deila samt</translation> <translation id="6979158407327259162">Google Drive</translation> <translation id="6979440798594660689">Slökkva á hljóði (sjálfgefið)</translation> <translation id="6979983982287291980">Skrár sem þú sækir eru sendar til Google Cloud eða þriðju aðila til greiningar. Þær gætu til dæmis verið skannaðar í leit að viðkvæmum upplýsingum eða spilliforritum.</translation> @@ -2024,6 +2029,7 @@ <translation id="7578104083680115302">Borgaðu með hraði á vefsvæðum og forritum úr öllum tækjum með því að nota greiðslukort sem þú hefur vistað hjá Google.</translation> <translation id="7581199239021537589">Y-færsla myndar á hlið 2</translation> <translation id="7582602800368606489">Búa til nýjan viðburð í Google dagatali á skjótan hátt</translation> +<translation id="7591288787774558753">Deila trúnaðarupplýsingum?</translation> <translation id="7591636454931265313"><ph name="EMBEDDED_URL" /> vill nota fótspor og gögn vefsvæða á <ph name="TOP_LEVEL_URL" /></translation> <translation id="7592362899630581445">Vottorð þjónsins brýtur heitistakmarkanir.</translation> <translation id="7598391785903975535">Minna en <ph name="UPPER_ESTIMATE" /></translation> @@ -2034,6 +2040,7 @@ <translation id="7614494068621678628"><ph name="MANAGE_PASSWORDS_FOCUSED_FRIENDLY_MATCH_TEXT" />, ýttu á Tab og svo Enter til að skoða og stjórna aðgangsorðunum þínum í stillingum Chrome</translation> <translation id="7616645509853975347">Kerfisstjórinn þinn hefur kveikt á Chrome Enterprise Connectors í vafranum þínum. Þessi tengi hafa aðgang að sumum af gögnunum þínum.</translation> <translation id="7619838219691048931">Síðasta blað</translation> +<translation id="7625242817712715120">Regla kerfisstjóra ræður gegn því að prenta út þetta efni</translation> <translation id="762844065391966283">Eitt í einu</translation> <translation id="7633909222644580952">Afkastagögn og hrunskýrslur</translation> <translation id="7637571805876720304">Fjarlægja kreditkort úr Chromium?</translation> @@ -2187,6 +2194,7 @@ <translation id="809898108652741896">A6</translation> <translation id="8100588592594801589">Ógild kort hafa verið fjarlægð</translation> <translation id="8103161714697287722">Greiðslumáti</translation> +<translation id="8103643211515685474">Prenta samt</translation> <translation id="8105368624971345109">Slökkva</translation> <translation id="810875025413331850">Engin nálæg tæki fundust.</translation> <translation id="8116925261070264013">Þögguð</translation> @@ -2399,6 +2407,7 @@ <translation id="886872106311861689">B3</translation> <translation id="8870413625673593573">Nýlega lokað</translation> <translation id="8870494189203302833">Sama röð, snýr niður</translation> +<translation id="8870700989640064057">Prenta skrá sem er trúnaðarmál?</translation> <translation id="8871553383647848643">Sérsníddu útlit vafrans</translation> <translation id="8874824191258364635">Færðu inn gilt kortanúmer</translation> <translation id="8884537526797090108">Ekki hægt að taka upp trúnaðarefni</translation> @@ -2477,6 +2486,7 @@ <translation id="9119042192571987207">Sent</translation> <translation id="9128016270925453879">Reglum var hlaðið</translation> <translation id="9128870381267983090">Tengjast neti</translation> +<translation id="9131119348384879525">Taka mynd af trúnaðarupplýsingum?</translation> <translation id="9137013805542155359">Sýna frumtexta</translation> <translation id="9141013498910525015">Stjórna heimilisföngum</translation> <translation id="9144951720726881238">Lokadagsetning:</translation>
diff --git a/components/strings/components_strings_ka.xtb b/components/strings/components_strings_ka.xtb index 7e7395b..bb1401d6 100644 --- a/components/strings/components_strings_ka.xtb +++ b/components/strings/components_strings_ka.xtb
@@ -825,6 +825,8 @@ მისი სიიდან ამოშლა და ხელახლა დამატება.</translation> <translation id="3630699740441428070">თქვენი ქსელის კავშირი კონფიგურირებულია ამ მოწყობილობის ადმინისტრატორების მიერ, რაც საშუალებას აძლევთ, იხილონ თქვენი ქსელის ტრაფიკი, მათ შორის, თქვენ მიერ მონახულებული ვებსაიტები.</translation> <translation id="3631244953324577188">ბიომეტრიული მონაცემები</translation> +<translation id="3632503704576938756">ეკრანის გაზიარება განახლდა</translation> +<translation id="3632892046558972264">ეკრანის გაზიარება შეჩერდა</translation> <translation id="3633738897356909127">Chrome-ის განახლების ღილაკი, Chrome-ის პარამეტრებიდან Chrome-ის გასაახლებლად დააჭირეთ კლავიშს Enter</translation> <translation id="3634530185120165534">ლანგარი 5</translation> <translation id="3634567936866541746">თქვენ ეს-ესაა შეიყვანეთ პაროლი შეცდომაში შემყვან საიტზე. თქვენი ანგარიშების დაცვის მიზნით, Chrome გირჩევთ, შეამოწმოთ თქვენი შენახული პაროლები.</translation> @@ -1054,6 +1056,7 @@ <translation id="4346197816712207223">მისაღები საკრედიტო ბარათები</translation> <translation id="4346833872170306413">Roc-16K</translation> <translation id="4348834659292907206"><ph name="SITE" />-თან კავშირი არ არის დაცული</translation> +<translation id="4349365535725594680">კონფიდენციალური კონტენტის გაზიარება ვერ მოხერხდება</translation> <translation id="4350629523305688469">მულტიფუნქციური ლანგარი</translation> <translation id="4351060348582610152"><ph name="ORIGIN" /> ითხოვს ახლომდებარე Bluetooth მოწყობილობების სკანირებას. ნაპოვნია შემდეგი მოწყობილობები:</translation> <translation id="4351175281479794167">შეიყვანეთ დამადასტურებელი კოდი</translation> @@ -1644,6 +1647,7 @@ <translation id="6328786501058569169">ეს საიტი შეცდომაში შემყვანია</translation> <translation id="6337133576188860026">გამოთავისუფლდება <ph name="SIZE" /> ან ნაკლები. ზოგიერთი საიტი შემდეგი მონახულებისას შეიძლება უფრო ნელა ჩაიტვირთოს.</translation> <translation id="6337534724793800597">ფილტრის წესები სახელის მიხედვით</translation> +<translation id="6340739886198108203">ადმინისტრატორის წესების მიხედვით, ეკრანის ანაბეჭდების ან ჩანაწერების გაკეთება არ არის რეკომენდებული, როცა ხილულია კონფიდენციალური კონტენტი:</translation> <translation id="6349101878882523185"><ph name="APP_NAME" />-ის ინსტალაცია</translation> <translation id="6353505687280762741">{COUNT,plural, =0{არცერთი}=1{1 პაროლი (<ph name="DOMAIN_LIST" />-ისთვის, სინქრონიზებული)}=2{2 პაროლი (<ph name="DOMAIN_LIST" />-ისთვის, სინქრონიზებული)}other{# პაროლი (<ph name="DOMAIN_LIST" />-ისთვის, სინქრონიზებული)}}</translation> <translation id="6355392890578844978">ამ ბრაუზერს არ მართავს კომპანია და არც სხვა ორგანიზაცია. ამ მოწყობილობაზე აქტივობა შეიძლება იმართებოდეს Chromium-ს მიღმა. <ph name="BEGIN_LINK" />შეიტყვეთ მეტი<ph name="END_LINK" /></translation> @@ -1827,6 +1831,7 @@ <translation id="6972629891077993081">HID მოწყობილობები</translation> <translation id="6973656660372572881">ფიქსირებული პროქსი სერვერები და .pac სკრიპტის URL მითითებულია.</translation> <translation id="6973932557599545801">სამწუხაროდ, ვერ დაგეხმარებით. გთხოვთ, დამოუკიდებლად გააგრძელოთ.</translation> +<translation id="6978236010531171013">მაინც გაზიარება</translation> <translation id="6979158407327259162">Google Drive</translation> <translation id="6979440798594660689">დადუმება (ნაგულისხმევი)</translation> <translation id="6979983982287291980">თქვენ მიერ ჩამოტვირთული ფაილები გასაანალიზებლად გაეგზავნება Google Cloud-ს ან მესამე მხარეს. მაგალითად, შეიძლება შესრულდეს მათი სკანირება მათში სენსიტიური მონაცემების ან მავნე კოდის აღმოსაჩენად.</translation> @@ -2017,6 +2022,7 @@ <translation id="7578104083680115302">სწრაფად გადაიხადეთ საიტებსა და აპებში სხვადასხვა მოწყობილობიდან Google-ში შენახული ბარათების მეშვეობით.</translation> <translation id="7581199239021537589">მხარე 2 — სურათის წანაცვლება Y ღერძზე</translation> <translation id="7582602800368606489">Google Calendar-ში ახალი მოვლენის სწრაფად შექმნა</translation> +<translation id="7591288787774558753">გსურთ კონფიდენციალური კონტენტის გაზიარება?</translation> <translation id="7591636454931265313"><ph name="EMBEDDED_URL" /> ითხოვს <ph name="TOP_LEVEL_URL" />-ის ქუქი-ჩანაწერებისა და საიტის მონაცემების გამოყენების ნებართვას</translation> <translation id="7592362899630581445">სერვერის სერთიფიკატი არღვევს სახელის შეზღუდვებს.</translation> <translation id="7598391785903975535">ნაკლები, ვიდრე <ph name="UPPER_ESTIMATE" /></translation> @@ -2027,6 +2033,7 @@ <translation id="7614494068621678628"><ph name="MANAGE_PASSWORDS_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome-ის პარამეტრებიდან თქვენი პაროლების სანახავად და სამართავად დააჭირეთ კლავიშს Tab, შემდეგ კი Enter-ს</translation> <translation id="7616645509853975347">თქვენმა ადმინისტრატორმა ჩართო Chrome Enterprise Connectors თქვენს ბრაუზერში. აღნიშნულ მაერთებლებს წვდომა აქვს თქვენს გარკვეულ მონაცემებზე.</translation> <translation id="7619838219691048931">ბოლო ფურცელი</translation> +<translation id="7625242817712715120">ადმინისტრატორის წესების მიხედვით, ამ კონტენტის ბეჭდვა რეკომენდებული არ არის</translation> <translation id="762844065391966283">ერთ ჯერზე ერთი</translation> <translation id="7633909222644580952">წარმადობის მონაცემები და ავარიულად გათიშვის ანგარიშები</translation> <translation id="7637571805876720304">ამოიშალოს საკრედიტო ბარათი Chromium-იდან?</translation> @@ -2180,6 +2187,7 @@ <translation id="809898108652741896">A6</translation> <translation id="8100588592594801589">არასწორი ბარათები ამოიშალა</translation> <translation id="8103161714697287722">გადახდის მეთოდი</translation> +<translation id="8103643211515685474">მაინც ბეჭდვა</translation> <translation id="8105368624971345109">გამორთვა</translation> <translation id="810875025413331850">ახლომდებარე მოწყობილობები ვერ მოიძებნა.</translation> <translation id="8116925261070264013">დადუმებული</translation> @@ -2392,6 +2400,7 @@ <translation id="886872106311861689">B3</translation> <translation id="8870413625673593573">ბოლოს დახურული</translation> <translation id="8870494189203302833">იგივე მიმდევრობა ნაბეჭდი მხარით დაღმა</translation> +<translation id="8870700989640064057">გსურთ კონფიდენციალური კონტენტის ბეჭდვა?</translation> <translation id="8871553383647848643">თქვენი ბრაუზერის იერსახის მორგება</translation> <translation id="8874824191258364635">შეიყვანეთ ბარათის სწორი ნომერი</translation> <translation id="8884537526797090108">კონფიდენციალური კონტენტის ჩაწერა ვერ მოხერხდება</translation> @@ -2470,6 +2479,7 @@ <translation id="9119042192571987207">ატვირთულია</translation> <translation id="9128016270925453879">წესები ჩაიტვირთა</translation> <translation id="9128870381267983090">ქსელთან დაკავშირება</translation> +<translation id="9131119348384879525">გსურთ კონფიდენციალური კონტენტის აღბეჭდვა?</translation> <translation id="9137013805542155359">ორიგინალის ჩვენება</translation> <translation id="9141013498910525015">მისამართების მართვა</translation> <translation id="9144951720726881238">მოქმედების ვადის გასვლის თარიღი:</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb index bf2684f..302e9ed 100644 --- a/components/strings/components_strings_kn.xtb +++ b/components/strings/components_strings_kn.xtb
@@ -269,6 +269,7 @@ <translation id="1741613555002899862">DnsOverHttpsMode ಕಾರ್ಯನೀತಿಯು <ph name="SECURE_DNS_MODE_SECURE" /> ಆಗಿದ್ದಾಗ, ಮಾನ್ಯವಾದ ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಬೇಕು.</translation> <translation id="1745880797583122200">ನಿಮ್ಮ ಬ್ರೌಸರ್ ಅನ್ನು ನಿರ್ವಹಿಸಲಾಗಿದೆ</translation> <translation id="1746113442205726301">ಚಿತ್ರ Y ಶಿಫ್ಟ್</translation> +<translation id="1747819498338037826">ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಬದಲಾಯಿಸಿ</translation> <translation id="17513872634828108">ತೆರೆದ ಟ್ಯಾಬ್ಗಳು</translation> <translation id="1752021286346845558">ಮೇಲ್ಬಾಕ್ಸ್ 8</translation> <translation id="1753706481035618306">ಪುಟ ಸಂಖ್ಯೆ</translation> @@ -1676,6 +1677,7 @@ <translation id="643051589346665201">Google ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಬದಲಾಯಿಸಿ</translation> <translation id="6433490469411711332">ಸಂಪರ್ಕ ಮಾಹಿತಿ ಎಡಿಟ್ ಮಾಡಿ</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> ಸಂಪರ್ಕಗೊಳ್ಳಲು ನಿರಾಕರಿಸಿದೆ.</translation> +<translation id="6438025220577812695">ನಾನೇ ಪಾಸ್ವರ್ಡ್ ಬದಲಾಯಿಸುತ್ತೇನೆ</translation> <translation id="6440503408713884761">ನಿರ್ಲಕ್ಷಿಸಲಾಗಿದೆ</translation> <translation id="6443406338865242315">ನೀವು ಇನ್ಸ್ಟಾಲ್ ಮಾಡಿರುವ ವಿಸ್ತರಣೆಗಳು ಮತ್ತು ಪ್ಲಗ್ಇನ್ಗಳು</translation> <translation id="6446163441502663861">Kahu (Envelope)</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb index acafafd..3b3dc5f2 100644 --- a/components/strings/components_strings_lv.xtb +++ b/components/strings/components_strings_lv.xtb
@@ -827,6 +827,8 @@ <translation id="3630155396527302611">Ja tā jau ir norādīta kā programma, kurai ir atļauts piekļūt tīklam, noņemiet to no saraksta un pievienojiet vēlreiz.</translation> <translation id="3630699740441428070">Šīs ierīces administratori ir konfigurējuši jūsu tīkla savienojumu, tāpēc viņi, iespējams, var skatīt jūsu tīkla datplūsmu, tostarp apmeklētās vietnes.</translation> <translation id="3631244953324577188">Biometrija</translation> +<translation id="3632503704576938756">Ekrāna kopīgošana atsākta</translation> +<translation id="3632892046558972264">Ekrāna kopīgošana apturēta</translation> <translation id="3633738897356909127">Poga “Atjaunināt Chrome”. Lai Chrome iestatījumos atjauninātu pārlūkprogrammu Chrome, nospiediet ievadīšanas taustiņu.</translation> <translation id="3634530185120165534">5. paplāte</translation> <translation id="3634567936866541746">Jūs tikko ievadījāt savu paroli maldinošā vietnē. Chrome ieteikums jūsu kontu aizsardzībai: pārbaudiet saglabātās paroles.</translation> @@ -1061,6 +1063,7 @@ <translation id="4346197816712207223">Pieņemtās kredītkartes</translation> <translation id="4346833872170306413">Roc-16K</translation> <translation id="4348834659292907206">Savienojums ar vietni <ph name="SITE" /> nav drošs</translation> +<translation id="4349365535725594680">Nevar kopīgot konfidenciālu saturu</translation> <translation id="4350629523305688469">Vairākfunkciju paplāte</translation> <translation id="4351060348582610152"><ph name="ORIGIN" /> vēlas meklēt tuvumā esošas Bluetooth ierīces. Ir atrastas šīs ierīces:</translation> <translation id="4351175281479794167">Ievadiet verifikācijas kodu</translation> @@ -1651,6 +1654,7 @@ <translation id="6328786501058569169">Šī vietne ir krāpnieciska</translation> <translation id="6337133576188860026">Tiks atbrīvots mazāk nekā <ph name="SIZE" />. Dažas vietnes nākamajā apmeklējumā var ielādēt lēnāk.</translation> <translation id="6337534724793800597">Filtrēt politikas pēc nosaukuma</translation> +<translation id="6340739886198108203">Administratora politika nosaka, ka nav ieteicams izveidot ekrānuzņēmumus vai videoierakstus, ja ir redzams konfidenciāls saturs.</translation> <translation id="6349101878882523185">Instalēt <ph name="APP_NAME" /> lietotni</translation> <translation id="6353505687280762741">{COUNT,plural, =0{Nav}=1{1 parole (šādiem domēniem: <ph name="DOMAIN_LIST" />, sinhronizēta)}=2{2 paroles (šādiem domēniem: <ph name="DOMAIN_LIST" />, sinhronizētas)}zero{# paroļu (šādiem domēniem: <ph name="DOMAIN_LIST" />, sinhronizētas)}one{# parole (šādiem domēniem: <ph name="DOMAIN_LIST" />, sinhronizētas)}other{# paroles (šādiem domēniem: <ph name="DOMAIN_LIST" />, sinhronizētas)}}</translation> <translation id="6355392890578844978">Šo pārlūku nepārvalda uzņēmums vai cita organizācija. Darbības šajā ierīcē var pārvaldīt ārpus pārlūka Chromium. <ph name="BEGIN_LINK" />Uzziniet vairāk<ph name="END_LINK" />.</translation> @@ -1833,6 +1837,7 @@ <translation id="6972629891077993081">HID ierīces</translation> <translation id="6973656660372572881">Ir norādīti gan fiksēti starpniekserveri, gan .pac skripta URL.</translation> <translation id="6973932557599545801">Diemžēl nevaru palīdzēt. Lūdzu, turpiniet patstāvīgi.</translation> +<translation id="6978236010531171013">Tomēr kopīgot</translation> <translation id="6979158407327259162">Google disks</translation> <translation id="6979440798594660689">Izslēgt skaņu (noklusējums)</translation> <translation id="6979983982287291980">Jūsu lejupielādētie faili tiek nosūtīti uz Google mākoni vai trešajām pusēm, lai veiktu analīzi. Šie faili var tikt pārmeklēti, lai konstatētu, piemēram, vai tajos ir ietverti sensitīvi dati vai ļaunprātīga programmatūra.</translation> @@ -2023,6 +2028,7 @@ <translation id="7578104083680115302">Ātri apmaksājiet pirkumus vietnēs un lietotnēs no dažādām ierīcēm, izmantojot kartes, ko esat saglabājis Google sistēmā.</translation> <translation id="7581199239021537589">2. puses attēla nobīde uz Y ass</translation> <translation id="7582602800368606489">Ātri izveidot jaunu pasākumu Google kalendārā</translation> +<translation id="7591288787774558753">Vai kopīgot konfidenciālu saturu?</translation> <translation id="7591636454931265313"><ph name="EMBEDDED_URL" /> vēlas izmantot sīkfailus un vietnes datus šeit: <ph name="TOP_LEVEL_URL" /></translation> <translation id="7592362899630581445">Servera sertifikātā ir pārkāpti nosaukuma ierobežojumi.</translation> <translation id="7598391785903975535">Mazāk nekā <ph name="UPPER_ESTIMATE" /></translation> @@ -2033,6 +2039,7 @@ <translation id="7614494068621678628"><ph name="MANAGE_PASSWORDS_FOCUSED_FRIENDLY_MATCH_TEXT" />. Lai skatītu un pārvaldītu savas paroles Chrome iestatījumos, nospiediet tabulēšanas taustiņu un pēc tam — ievadīšanas taustiņu.</translation> <translation id="7616645509853975347">Administrators ir ieslēdzis savienotāju kolekciju Chrome Enterprise Connectors jūsu pārlūkā. Šie savienotāji var piekļūt daļai jūsu datu.</translation> <translation id="7619838219691048931">Beigu lapa</translation> +<translation id="7625242817712715120">Administratora politika nosaka, ka nav ieteicams drukāt šo saturu.</translation> <translation id="762844065391966283">Pa vienam</translation> <translation id="7633909222644580952">Veiktspējas dati un avāriju pārskati</translation> <translation id="7637571805876720304">Vai noņemt kredītkarti no pārlūka Chromium?</translation> @@ -2186,6 +2193,7 @@ <translation id="809898108652741896">A6</translation> <translation id="8100588592594801589">Nederīgās kartes tika noņemtas</translation> <translation id="8103161714697287722">Maksājuma veids</translation> +<translation id="8103643211515685474">Tomēr drukāt</translation> <translation id="8105368624971345109">Izslēgt</translation> <translation id="810875025413331850">Nav atrasta neviena tuvumā esoša ierīce.</translation> <translation id="8116925261070264013">Izslēgta skaņa</translation> @@ -2399,6 +2407,7 @@ <translation id="886872106311861689">B3</translation> <translation id="8870413625673593573">Nesen aizvērtas</translation> <translation id="8870494189203302833">Tāda pati secība, virspuse uz leju</translation> +<translation id="8870700989640064057">Vai drukāt konfidenciālu failu?</translation> <translation id="8871553383647848643">Pielāgot pārlūka izskatu</translation> <translation id="8874824191258364635">Ievadiet derīgu kartes numuru</translation> <translation id="8884537526797090108">Konfidenciālu saturu nevar ierakstīt</translation> @@ -2477,6 +2486,7 @@ <translation id="9119042192571987207">Augšupielādēts</translation> <translation id="9128016270925453879">Politikas ir ielādētas</translation> <translation id="9128870381267983090">Izveidot savienojumu ar tīklu</translation> +<translation id="9131119348384879525">Vai tvert konfidenciālu saturu?</translation> <translation id="9137013805542155359">Rādīt oriģinālo</translation> <translation id="9141013498910525015">Pārvaldīt adreses</translation> <translation id="9144951720726881238">Derīguma termiņš:</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb index 3e13a36..7080d61 100644 --- a/components/strings/components_strings_ml.xtb +++ b/components/strings/components_strings_ml.xtb
@@ -270,6 +270,7 @@ <translation id="1741613555002899862">DnsOverHttpsMode, <ph name="SECURE_DNS_MODE_SECURE" /> ആയിരിക്കുമ്പോൾ അക്കാര്യം വ്യക്തമാക്കിയിരിക്കണം, കൂടാതെ സാധുവായ സ്ട്രിംഗ് ആയിരിക്കുകയും വേണം.</translation> <translation id="1745880797583122200">നിങ്ങളുടെ ബ്രൗസർ മാനേജ് ചെയ്യപ്പെട്ടിരിക്കുന്നു</translation> <translation id="1746113442205726301">ചിത്രം Y ഷിഫ്റ്റ്</translation> +<translation id="1747819498338037826">സ്വയമേവ മാറ്റുക</translation> <translation id="17513872634828108">ഓപ്പൺ ടാബുകൾ</translation> <translation id="1752021286346845558">മെയിൽബോക്സ് 8</translation> <translation id="1753706481035618306">പേജ് നമ്പർ</translation> @@ -1683,6 +1684,7 @@ <translation id="643051589346665201">Google പാസ്വേഡ് മാറ്റുക</translation> <translation id="6433490469411711332">കോൺടാക്റ്റ് വിവരം എഡിറ്റ് ചെയ്യുക</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> കണക്റ്റുചെയ്യൽ നിരസിച്ചു.</translation> +<translation id="6438025220577812695">നേരിട്ട് മാറ്റുക</translation> <translation id="6440503408713884761">അവഗണിച്ചു</translation> <translation id="6443406338865242315">ഏതൊക്കെ വിപുലീകരണങ്ങളും പ്ലഗിനുകളും നിങ്ങൾ ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ട് എന്നത്</translation> <translation id="6446163441502663861">കഹു (എൻവലപ്പ്)</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb index 52f84a8..099cefcb0 100644 --- a/components/strings/components_strings_no.xtb +++ b/components/strings/components_strings_no.xtb
@@ -270,6 +270,7 @@ <translation id="1741613555002899862">Må være angitt som en gyldig streng når DnsOverHttpsMode er <ph name="SECURE_DNS_MODE_SECURE" />.</translation> <translation id="1745880797583122200">Nettleseren din administreres</translation> <translation id="1746113442205726301">Y-forskyvning av bilde</translation> +<translation id="1747819498338037826">Endre automatisk</translation> <translation id="17513872634828108">Åpne faner</translation> <translation id="1752021286346845558">Postkasse 8</translation> <translation id="1753706481035618306">Sidenummer</translation> @@ -1681,6 +1682,7 @@ <translation id="643051589346665201">Bytt Google-passord</translation> <translation id="6433490469411711332">Endre kontaktinformasjonen</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> avviste tilkoblingsforsøket.</translation> +<translation id="6438025220577812695">Jeg endrer det selv</translation> <translation id="6440503408713884761">Ignorert</translation> <translation id="6443406338865242315">hvilke utvidelser og programtillegg du har installert</translation> <translation id="6446163441502663861">Kahu (konvolutt)</translation>
diff --git a/components/strings/components_strings_or.xtb b/components/strings/components_strings_or.xtb index 175c88975..fe9a08d 100644 --- a/components/strings/components_strings_or.xtb +++ b/components/strings/components_strings_or.xtb
@@ -680,6 +680,7 @@ <translation id="3215092763954878852">WebAuthn ବ୍ୟବହାର କରାଯାଇପାରିଲା ନାହିଁ</translation> <translation id="3218181027817787318">ରିଲେଟିଭ୍</translation> <translation id="3223287115535306850">ଲଞ୍ଚ କରାଯାଉଥିବା ଆପର ଥ୍ରୋବର୍</translation> +<translation id="3225347164936328585">ତାଳି ମାରିବା</translation> <translation id="3225919329040284222">ସର୍ଭର୍ ଏକ ସାର୍ଟିଫିକେଟ୍କୁ ଉପସ୍ଥାପନ କରୁଛି, ଯାହା ବିଲ୍ଟ-ଇନ୍ ପ୍ରତ୍ୟାଶା ସହ ମେଳ ଖାଉନାହିଁ। ଏହି ପ୍ରତ୍ୟାଶାଗୁଡ଼ିକ ଆପଣଙ୍କୁ ସୁରକ୍ଷିତ ରଖିବାକୁ କିଛି ଉଚ୍ଚ ସୁରକ୍ଷା ଥିବା ୱେବ୍ସାଇଟ୍ଗୁଡ଼ିକ ପାଇଁ ଅନ୍ତର୍ଭୁକ୍ତ କରାଯାଇଛି।</translation> <translation id="3226128629678568754">ପୃଷ୍ଠା ଲୋଡ୍ କରିବାକୁ ଆବଶ୍ୟକ ହେଉଥିବା ଡାଟା ପୁଣି ଦାଖଲ କରିବାକୁ ରିଲୋଡ୍ ବଟନ୍ ଦବାନ୍ତୁ।</translation> <translation id="3226387218769101247">ଥମ୍ବନେଲଗୁଡ଼ିକ</translation> @@ -716,6 +717,7 @@ <translation id="3333762389743153920">ଭର୍ଚୁଆଲ୍ କାର୍ଡ ପାଇଁ ଯୋଗ୍ୟ ନୁହେଁ</translation> <translation id="3338095232262050444">ସୁରକ୍ଷିତ</translation> <translation id="3339446062576134663">କ୍ଲାଉଡ (Ash)</translation> +<translation id="3345782426586609320">ଆଖି</translation> <translation id="3355823806454867987">ପ୍ରୋକ୍ସି ସେଟିଂସ୍ ପରିବର୍ତ୍ତନ କରନ୍ତୁ...</translation> <translation id="3360103848165129075">ପେମେଣ୍ଟ ହ୍ୟାଣ୍ଡଲର୍ ସିଟ୍</translation> <translation id="3361596688432910856">Chrome ନିମ୍ନୋକ୍ତ ସୂଚନାକୁ <ph name="BEGIN_EMPHASIS" />ସେଭ୍ କରିବ ନାହିଁ<ph name="END_EMPHASIS" />: @@ -1065,6 +1067,7 @@ <translation id="4390472908992056574">ବ୍ରିମ୍</translation> <translation id="4406883609789734330">ଲାଇଭ୍ କ୍ୟାପସନ୍</translation> <translation id="4406896451731180161">ସନ୍ଧାନ ପରିଣାମ</translation> +<translation id="4407755609041463909">ନିଆଁ</translation> <translation id="4408413947728134509"><ph name="NUM_COOKIES" />ଟି କୁକୀ</translation> <translation id="4414515549596849729">କୁକୀ ଏବଂ ସାଇଟ୍ ଡାଟା</translation> <translation id="4415426530740016218">ପିକ୍ଅପ୍ ଠିକଣା</translation> @@ -1372,6 +1375,7 @@ <translation id="5344579389779391559">ଏହି ପୃଷ୍ଠା ଆପଣଙ୍କ ଠାରୁ ଶୁଳ୍କ ନେବା ପାଇଁ ଚେଷ୍ଟା କରିପାରେ</translation> <translation id="5347645913823149105">"Chromeରେ ଫଣ୍ଟଗୁଡ଼ିକୁ କଷ୍ଟମାଇଜ କରନ୍ତୁ" ବଟନ, Chromeରେ ଫଣ୍ଟ ଆକାର ଏବଂ ଟାଇପଫେସକୁ କଷ୍ଟମାଇଜ କରିବା ପାଇଁ Enter ଦବାନ୍ତୁ</translation> <translation id="5355557959165512791">ବର୍ତ୍ତମାନ, ଆପଣ <ph name="SITE" />କୁ ଯାଇପାରିବେ ନାହିଁ କାରଣ ଏହାର ସାର୍ଟିଫିକେଟ୍ ପ୍ରତ୍ୟାହାର କରିନିଆଯାଇଛି। ସାଧାରଣତଃ ନେଟ୍ୱର୍କ ତ୍ରୁଟି ଏବଂ ଆକ୍ରମଣ ଅସ୍ଥାୟୀ ଅଟେ, ତେଣୁ ସମ୍ଭବତଃ ଏହି ପୃଷ୍ଠା ପରେ କାର୍ଯ୍ୟ କରିବ।</translation> +<translation id="5356837363448394805">ଲାଲ ପଡ଼ିଯାଇଥିବା ମୁହଁ</translation> <translation id="536296301121032821">ନୀତି ସେଟିଂସ୍ ଷ୍ଟୋର୍ କରିବାରେ ବିଫଳ ହେଲା</translation> <translation id="5363309033720083897">ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ଦ୍ୱାରା ସିରିଅଲ୍ ପୋର୍ଟକୁ ଅନୁମତି ଦିଆଯାଇଛି</translation> <translation id="5371425731340848620">କାର୍ଡ ଅପ୍ଡେଟ୍ କରନ୍ତୁ</translation> @@ -1601,6 +1605,7 @@ <translation id="622039917539443112">ସମାନ୍ତରାଳ ଫୋଲ୍ଡ</translation> <translation id="6221345481584921695">Google ସେଫ୍ ବ୍ରାଉଜିଂ, ସମ୍ପ୍ରତି <ph name="SITE" />ରେ <ph name="BEGIN_LINK" />ମାଲ୍ୱେର୍ ଚିହ୍ନଟ କରିଛି<ph name="END_LINK" />। ପ୍ରାୟତଃ ସୁରକ୍ଷିତ ରହୁଥିବା ୱେବ୍ସାଇଟ୍ଗୁଡ଼ିକ ବେଳେବେଳେ ମାଲ୍ୱେର୍ ଦ୍ୱାରା ସଂକ୍ରମିତ ହୋଇଥାନ୍ତି। ଏହି ଦ୍ୱେଷଯୁକ୍ତ ବିଷୟବସ୍ତୁ <ph name="SUBRESOURCE_HOST" />ରୁ ଆସିଥାଏ, ଯାହା ଏକ ଜଣାଶୁଣା ମାଲ୍ୱେର୍ ବିତରକ ଅଟେ।</translation> <translation id="6226163402662242066"><ph name="MANAGE_CHROME_ACCESSIBILITY_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome ସେଟିଂସରେ ଆପଣଙ୍କ ଆକ୍ସେସିବିଲିଟୀ ଟୁଲଗୁଡ଼ିକୁ ପର୍ସନାଲାଇଜ କରିବା ପାଇଁ Tab କରି Enter ଦବାନ୍ତୁ</translation> +<translation id="6233160458685643793">ଦାନ୍ତ ଦେଖାଇ ହସିବା</translation> <translation id="6234122620015464377">ପ୍ରତ୍ୟେକ ଡକ୍ୟୁମେଣ୍ଟ ପରେ ଟ୍ରିମ୍ କରନ୍ତୁ</translation> <translation id="6240447795304464094">Google Pay ଲୋଗୋ</translation> <translation id="6241121617266208201">ପ୍ରସ୍ତାବଗୁଡ଼ିକୁ ଲୁଚାନ୍ତୁ</translation> @@ -1652,6 +1657,7 @@ <translation id="6390662030813198813">ଇଞ୍ଜିନିୟରିଂ-E</translation> <translation id="6391700400718590966">ସୁରକ୍ଷିତ ପେମେଣ୍ଟ କ୍ରେଡେନସିଆଲ୍ ସହ ମେଳ ହେଉଥିବା କୌଣସି କ୍ରେଡେନସିଆଲ୍ ସିଟ୍ ବନ୍ଦ କରାଯାଇନାହିଁ</translation> <translation id="6393956493820063117">ଆଡମିନିଷ୍ଟ୍ରେଟର୍ ନୀତି ଦ୍ୱାରା <ph name="ORIGIN_NAME" />ରୁ ଏହି ଲୋକେସନକୁ ପେଷ୍ଟ କରିବା ବ୍ଲକ୍ କରାଯାଇଛି</translation> +<translation id="6398277657359595425">ଜୋରରେ କାନ୍ଦିବା</translation> <translation id="6398765197997659313">ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନ୍ରୁ ପ୍ରସ୍ଥାନ କରନ୍ତୁ</translation> <translation id="6401136357288658127">ଏହି ନୀତିକୁ ଅଗ୍ରାହ୍ୟ କରାଯାଇଛି। ଏହା ପରିବର୍ତ୍ତେ ଆପଣ <ph name="NEW_POLICY" /> ନୀତି ବ୍ୟବହାର କରିବା ଉଚିତ।</translation> <translation id="6404511346730675251">ବୁକ୍ମାର୍କ ଏଡିଟ୍ କରନ୍ତୁ</translation> @@ -1727,6 +1733,7 @@ <translation id="6660413144148052430">ଲୋକେସନ୍</translation> <translation id="6662457027866368246">ପ୍ରଥମ ରୋଲ୍</translation> <translation id="666259744093848177">(x86_64 ଅନୁବାଦ କରାଯାଇଛି)</translation> +<translation id="6663846344464066639">ହାତ ଯୋଡ଼ି ନମସ୍କାର କରିବା</translation> <translation id="6665553082534466207">ଡାହାଣ ପଟରେ ତିନୋଟି ପଞ୍ଚ୍</translation> <translation id="6671697161687535275">Chromiumରୁ ପରାମର୍ଶରୁ କାଢ଼ି ଦେବେ?</translation> <translation id="6685834062052613830">ସାଇନ୍ ଆଉଟ୍ କରନ୍ତୁ ଏବଂ ସେଟ୍ଅପ୍ ସମ୍ପୂର୍ଣ୍ଣ କରନ୍ତୁ</translation> @@ -1795,6 +1802,7 @@ <translation id="6934672428414710184">ଏହି ନାମ ଆପଣଙ୍କର Google ଆକାଉଣ୍ଟରୁ ଅଟେ</translation> <translation id="6944692733090228304">ଆପଣ ନିଜର ପାସ୍ୱାର୍ଡ ଏଭଳି ଏକ ସାଇଟ୍ରେ ଲେଖିଛନ୍ତି ଯାହା <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> ଦ୍ବାରା ପରିଚାଳିତ ନୁହେଁ। ଆପଣଙ୍କ ଆକାଉଣ୍ଟକୁ ସୁରକ୍ଷିତ ରଖିବା ପାଇଁ, ଅନ୍ୟ ଆପ୍ ଓ ସାଇଟ୍ଗୁଡ଼ିକରେ ଆପଣଙ୍କର ପାସ୍ୱର୍ଡ ପୁନଃବ୍ୟବହାର କରନ୍ତୁ ନାହିଁ।</translation> <translation id="6945221475159498467">ଚୟନ କରନ୍ତୁ</translation> +<translation id="6946722113367118030">ଚିନ୍ତା କରିବା</translation> <translation id="6948051842255602737">ଗେମ୍ ଶେଷ ହୋଇଛି, ଆପଣଙ୍କ ସ୍କୋର୍ ହେଉଛି <ph name="SCORE" />।</translation> <translation id="6948701128805548767">ପିକ୍ଅପ୍ ପଦ୍ଧତି ଓ ଆବଶ୍ୟକତା ଦେଖିବା ପାଇଁ ଗୋଟିଏ ଠିକଣା ଚୟନ କରନ୍ତୁ</translation> <translation id="6949872517221025916">ପାସ୍ୱର୍ଡ ରିସେଟ୍ କରନ୍ତୁ</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb index 6b4b5830..59c3b46 100644 --- a/components/strings/components_strings_pt-BR.xtb +++ b/components/strings/components_strings_pt-BR.xtb
@@ -270,6 +270,7 @@ <translation id="1741613555002899862">Precisa ser especificada e ser uma string válida quando DnsOverHttpsMode for <ph name="SECURE_DNS_MODE_SECURE" />.</translation> <translation id="1745880797583122200">Seu navegador é gerenciado</translation> <translation id="1746113442205726301">Mudança Y na imagem</translation> +<translation id="1747819498338037826">Mudar automaticamente</translation> <translation id="17513872634828108">Guias abertas</translation> <translation id="1752021286346845558">Caixa de e-mails 8</translation> <translation id="1753706481035618306">Numero da página</translation> @@ -1678,6 +1679,7 @@ <translation id="643051589346665201">Mudar senha do Google</translation> <translation id="6433490469411711332">Editar informações de contato</translation> <translation id="6433595998831338502">A conexão com <ph name="HOST_NAME" /> foi recusada.</translation> +<translation id="6438025220577812695">Mudar manualmente</translation> <translation id="6440503408713884761">Ignorada</translation> <translation id="6443406338865242315">quais extensões e plug-ins você instalou;</translation> <translation id="6446163441502663861">Kahu (Envelope)</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb index 4dd13b8..8e02907 100644 --- a/components/strings/components_strings_ru.xtb +++ b/components/strings/components_strings_ru.xtb
@@ -823,6 +823,8 @@ удалите ее из списка и добавьте туда снова.</translation> <translation id="3630699740441428070">Администраторы этого устройства настроили подключение к Интернету так, чтобы видеть ваш сетевой трафик, в том числе сайты, которые вы посещаете.</translation> <translation id="3631244953324577188">Биометрия</translation> +<translation id="3632503704576938756">Демонстрация экрана возобновлена</translation> +<translation id="3632892046558972264">Демонстрация экрана приостановлена</translation> <translation id="3633738897356909127">Кнопка "Обновить Chrome". Нажмите Ввод, чтобы обновить Chrome.</translation> <translation id="3634530185120165534">Лоток 5</translation> <translation id="3634567936866541746">Вы только что ввели пароль на поддельном сайте. Чтобы защитить свои аккаунты, проверьте сохраненные пароли в браузере Chrome.</translation> @@ -1052,6 +1054,7 @@ <translation id="4346197816712207223">Кредитные карты, которые принимаются к оплате</translation> <translation id="4346833872170306413">Roc-16K</translation> <translation id="4348834659292907206">Подключение к сайту <ph name="SITE" /> не защищено.</translation> +<translation id="4349365535725594680">Невозможно поделиться конфиденциальным контентом</translation> <translation id="4350629523305688469">Многофункциональный лоток</translation> <translation id="4351060348582610152">Сайт <ph name="ORIGIN" /> ищет устройства Bluetooth поблизости. Обнаружены следующие устройства:</translation> <translation id="4351175281479794167">Введите код подтверждения</translation> @@ -1642,6 +1645,7 @@ <translation id="6328786501058569169">Это поддельный сайт</translation> <translation id="6337133576188860026">Освободится менее <ph name="SIZE" /> пространства. После этого некоторые веб-страницы могут загружаться дольше обычного.</translation> <translation id="6337534724793800597">Фильтровать правила по названию</translation> +<translation id="6340739886198108203">Администратор не рекомендует делать снимки и видеозаписи экрана, когда на нем показаны конфиденциальные данные:</translation> <translation id="6349101878882523185">Установить приложение "<ph name="APP_NAME" />"</translation> <translation id="6353505687280762741">{COUNT,plural, =0{Нет}=1{1 пароль (для <ph name="DOMAIN_LIST" />, синхронизировано)}=2{2 пароля (для <ph name="DOMAIN_LIST" />, синхронизировано)}one{# пароль (для <ph name="DOMAIN_LIST" />, синхронизировано)}few{# пароля (для <ph name="DOMAIN_LIST" />, синхронизировано)}many{# паролей (для <ph name="DOMAIN_LIST" />, синхронизировано)}other{# пароля (для <ph name="DOMAIN_LIST" />, синхронизировано)}}</translation> <translation id="6355392890578844978">Компания или организация не управляет этим браузером. Действиями на этом устройстве можно управлять вне браузера Chromium. <ph name="BEGIN_LINK" />Подробнее…<ph name="END_LINK" /></translation> @@ -1824,6 +1828,7 @@ <translation id="6972629891077993081">Устройства HID</translation> <translation id="6973656660372572881">Указаны как фиксированные прокси-серверы, так и URL PAC-скриптов.</translation> <translation id="6973932557599545801">Извините, я ничем не могу помочь. Продолжите самостоятельно.</translation> +<translation id="6978236010531171013">Все равно поделиться</translation> <translation id="6979158407327259162">Google Диск</translation> <translation id="6979440798594660689">Без звука (по умолчанию)</translation> <translation id="6979983982287291980">Скачанные вами файлы передаются на проверку в Google Cloud или сторонние сервисы. В частности, файлы могут быть просканированы на наличие конфиденциальных данных или вредоносного ПО.</translation> @@ -2014,6 +2019,7 @@ <translation id="7578104083680115302">Быстро оплачивайте покупки на сайтах и в приложениях с помощью карт, сохраненных в Google Pay. Настройка будет действовать на всех ваших устройствах.</translation> <translation id="7581199239021537589">Смещение изображений на оборотной стороне по оси Y</translation> <translation id="7582602800368606489">Быстро создать мероприятие в Google Календаре</translation> +<translation id="7591288787774558753">Поделиться конфиденциальным контентом?</translation> <translation id="7591636454931265313">Сайт <ph name="EMBEDDED_URL" /> запрашивает разрешение на использование файлов cookie и данных сайта <ph name="TOP_LEVEL_URL" /></translation> <translation id="7592362899630581445">Сертификат сервера не соответствует ограничениям в отношении имен.</translation> <translation id="7598391785903975535">Менее <ph name="UPPER_ESTIMATE" /></translation> @@ -2024,6 +2030,7 @@ <translation id="7614494068621678628"><ph name="MANAGE_PASSWORDS_FOCUSED_FRIENDLY_MATCH_TEXT" />. Нажмите Tab и затем Ввод, чтобы перейти к управлению паролями в настройках Chrome.</translation> <translation id="7616645509853975347">Администратор включил в браузере коннекторы Chrome Enterprise Connectors. У них есть доступ к некоторым вашим данным.</translation> <translation id="7619838219691048931">Последний лист</translation> +<translation id="7625242817712715120">Администратор не рекомендует распечатывать этот контент.</translation> <translation id="762844065391966283">По одному объекту</translation> <translation id="7633909222644580952">Данные о производительности и отчеты о сбоях</translation> <translation id="7637571805876720304">Удалить кредитную карту из Chromium?</translation> @@ -2177,6 +2184,7 @@ <translation id="809898108652741896">A6</translation> <translation id="8100588592594801589">Недействительные карты удалены.</translation> <translation id="8103161714697287722">Способ оплаты</translation> +<translation id="8103643211515685474">Все равно распечатать</translation> <translation id="8105368624971345109">Отключить</translation> <translation id="810875025413331850">Устройства поблизости не найдены.</translation> <translation id="8116925261070264013">Сайты с отключенным звуком</translation> @@ -2388,6 +2396,7 @@ <translation id="886872106311861689">В3</translation> <translation id="8870413625673593573">Недавно закрытые</translation> <translation id="8870494189203302833">В том же порядке лицевой стороной вниз</translation> +<translation id="8870700989640064057">Распечатать конфиденциальный файл?</translation> <translation id="8871553383647848643">Настроить внешний вид браузера</translation> <translation id="8874824191258364635">Введите действительный номер карты.</translation> <translation id="8884537526797090108">Не удается записать видео конфиденциального контента</translation> @@ -2466,6 +2475,7 @@ <translation id="9119042192571987207">Загружен</translation> <translation id="9128016270925453879">Правила загружены</translation> <translation id="9128870381267983090">Подключитесь к сети</translation> +<translation id="9131119348384879525">Записать конфиденциальный контент?</translation> <translation id="9137013805542155359">Показать оригинал</translation> <translation id="9141013498910525015">Управление адресами</translation> <translation id="9144951720726881238">Срок действия:</translation>
diff --git a/components/strings/components_strings_sq.xtb b/components/strings/components_strings_sq.xtb index 00215df..da55806 100644 --- a/components/strings/components_strings_sq.xtb +++ b/components/strings/components_strings_sq.xtb
@@ -1086,6 +1086,7 @@ <translation id="443673843213245140">Përdorimi i një përfaqësuesi është i çaktivizuar, por është specifikuar një konfigurim i qartë përfaqësuesi.</translation> <translation id="4450893287417543264">Mos e shfaq përsëri</translation> <translation id="4451135742916150903">Mund të kërkojë të lidhet me pajisjet HID</translation> +<translation id="4455222631300069614">Ndrysho fjalëkalimin tënd tani</translation> <translation id="4460315069258617173">Lejohet derisa të mbyllësh skedat për këtë faqe</translation> <translation id="4464826014807964867">Sajtet e uebit me informacione nga organizata jote</translation> <translation id="447665707681730621"><ph name="BUBBLE_MESSAGE" />. <ph name="LEARN_MORE_TEXT" /></translation> @@ -1324,6 +1325,7 @@ <translation id="51918995459521422"><ph name="ORIGIN" /> dëshiron të shkarkojë disa skedarë</translation> <translation id="519422657042045905">Shënimi nuk ofrohet</translation> <translation id="5201306358585911203">Një faqe e integruar në këtë faqe thotë</translation> +<translation id="5204468114771111727">Chrome e gjeti fjalëkalimin që sapo përdore në një nxjerrje të paautorizuar të të dhënave. "Asistenti yt i Google" mund ta ndryshojë fjalëkalimin tënd automatikisht.</translation> <translation id="5205222826937269299">Emri është i detyrueshëm</translation> <translation id="5209518306177824490">Gjurma e gishtit SHA-1</translation> <translation id="5209670883520018268">Tabakaja 20</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb index 110893109..524a8cf 100644 --- a/components/strings/components_strings_sv.xtb +++ b/components/strings/components_strings_sv.xtb
@@ -270,6 +270,7 @@ <translation id="1741613555002899862">Måste anges och vara en giltig sträng när DnsOverHttpsMode är <ph name="SECURE_DNS_MODE_SECURE" />.</translation> <translation id="1745880797583122200">Din webbläsare hanteras</translation> <translation id="1746113442205726301">Bild Y – byte</translation> +<translation id="1747819498338037826">Ändra automatiskt</translation> <translation id="17513872634828108">Öppna flikar</translation> <translation id="1752021286346845558">Postfack 8</translation> <translation id="1753706481035618306">Sidnummer</translation> @@ -1683,6 +1684,7 @@ <translation id="643051589346665201">Byt lösenord till Google</translation> <translation id="6433490469411711332">Redigera kontaktuppgifter</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> avvisade anslutningen.</translation> +<translation id="6438025220577812695">Ändra det själv</translation> <translation id="6440503408713884761">Ignoreras</translation> <translation id="6443406338865242315">Vilka tillägg och pluginprogram som du har installerat</translation> <translation id="6446163441502663861">Kahu (kuvert)</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb index 0d79d6d..efdfe2a 100644 --- a/components/strings/components_strings_sw.xtb +++ b/components/strings/components_strings_sw.xtb
@@ -270,6 +270,7 @@ <translation id="1741613555002899862">Lazima ibainishwe na iwe mfuatano sahihi wakati DnsOverHttpsMode ni <ph name="SECURE_DNS_MODE_SECURE" />.</translation> <translation id="1745880797583122200">Kivinjari chako kinadhibitiwa</translation> <translation id="1746113442205726301">Ugeuzaji wa Picha ya Y</translation> +<translation id="1747819498338037826">Badilisha kiotomatiki</translation> <translation id="17513872634828108">Vichupo vilivyo wazi</translation> <translation id="1752021286346845558">Kikasha cha barua cha nane</translation> <translation id="1753706481035618306">Nambari ya ukurasa</translation> @@ -827,6 +828,8 @@ kuiondoa kwenye orodha kisha uiongeze tena.</translation> <translation id="3630699740441428070">Wasimamizi wa kifaa hiki wameweka mipangilio kwenye muunganisho wa mtandao wako. Huenda hatua hii ikawaruhusu waone trafiki ya mtandao wako, ikiwa ni pamoja na tovuti unazotembelea.</translation> <translation id="3631244953324577188">Bayometriki</translation> +<translation id="3632503704576938756">Mchakato wa kushiriki skrini unaendelea</translation> +<translation id="3632892046558972264">Mchakato wa kushiriki skrini umesitishwa</translation> <translation id="3633738897356909127">Kitufe cha 'Sasisha Chrome', bonyeza 'Enter' ili usasishe Chrome katika mipangilio yako ya Chrome</translation> <translation id="3634530185120165534">Trei ya tano</translation> <translation id="3634567936866541746">Umeweka nenosiri lako kwenye tovuti ya kupotosha. Ili uimarishe usalama wa akaunti zako, Chrome inapendekeza ukague manenosiri uliyoyahifadhi.</translation> @@ -1061,6 +1064,7 @@ <translation id="4346197816712207223">Kadi za Mikopo Zinazokubaliwa</translation> <translation id="4346833872170306413">Roc-16K</translation> <translation id="4348834659292907206">Muunganisho kwenye <ph name="SITE" /> si salama</translation> +<translation id="4349365535725594680">Huwezi kushiriki maudhui ya siri</translation> <translation id="4350629523305688469">Trei Inayotekeleza Vitendo Vingi</translation> <translation id="4351060348582610152"><ph name="ORIGIN" /> inataka kutafuta vifaa vya Bluetooth vilivyo karibu. Vifaa vifuatavyo vimepatikana:</translation> <translation id="4351175281479794167">Weka nambari ya kuthibitisha</translation> @@ -1651,6 +1655,7 @@ <translation id="6328786501058569169">Tovuti hii ni ya udanganyifu</translation> <translation id="6337133576188860026">Huongeza nafasi isiyozidi <ph name="SIZE" />. Baadhi ya tovuti huenda zikapakia polepole zaidi utakapozivinjari tena.</translation> <translation id="6337534724793800597">Chuja sera kwa jina</translation> +<translation id="6340739886198108203">Sera ya msimamizi haipendekezi kurekodi au kupiga picha za skrini wakati maudhui ya siri yanaonekana:</translation> <translation id="6349101878882523185">Sakinisha <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Hamna}=1{Nenosiri 1 (la <ph name="DOMAIN_LIST" />, limesawazishwa)}=2{Manenosiri 2 (ya <ph name="DOMAIN_LIST" />, yamesawazishwa)}other{Manenosiri # (ya <ph name="DOMAIN_LIST" />, yamesawazishwa)}}</translation> <translation id="6355392890578844978">Kivinjari hiki hakidhibitiwi na kampuni au shirika lingine. Huenda shughuli kwenye kifaa hiki zikadhibitiwa nje ya Chromium. <ph name="BEGIN_LINK" />Pata maelezo zaidi<ph name="END_LINK" /></translation> @@ -1682,6 +1687,7 @@ <translation id="643051589346665201">Badilisha nenosiri la Google</translation> <translation id="6433490469411711332">Badilisha maelezo ya mawasiliano</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> imekataa kuunganisha.</translation> +<translation id="6438025220577812695">Nitabadilisha mwenyewe</translation> <translation id="6440503408713884761">Imepuuzwa</translation> <translation id="6443406338865242315">Viendelezi au programu jalizi ulizosakinisha</translation> <translation id="6446163441502663861">Kahu (Bahasha)</translation> @@ -1833,6 +1839,7 @@ <translation id="6972629891077993081">Vifaa vya HID</translation> <translation id="6973656660372572881">Seva zote za proksi thabiti na URL ya hati ya .pac zimebainishwa.</translation> <translation id="6973932557599545801">Samahani, nimeshindwa kukusaidia, tafadhali endelea mwenyewe.</translation> +<translation id="6978236010531171013">Shiriki licha ya hilo</translation> <translation id="6979158407327259162">Hifadhi ya Google</translation> <translation id="6979440798594660689">Zima (chaguomsingi)</translation> <translation id="6979983982287291980">Faili unazopakua hutumwa kwenye Wingu la Google au mifumo ya wengine ili kuchanganuliwa. Kwa mfano, zinaweza kuchanganuliwa ili kubaini data nyeti au programu hasidi.</translation> @@ -2021,6 +2028,7 @@ <translation id="7578104083680115302">Lipa haraka kwenye tovuti na programu katika vifaa vyote ukitumia kadi ulizohifadhi kwenye Google.</translation> <translation id="7581199239021537589">Ugeuzaji wa upande wa pili wa picha ya Y</translation> <translation id="7582602800368606489">Weka tukio jipya katika Kalenda ya Google kwa haraka</translation> +<translation id="7591288787774558753">Ungependa kushiriki maudhui ya siri?</translation> <translation id="7591636454931265313"><ph name="EMBEDDED_URL" /> inataka kutumia data ya tovuti na vidakuzi kwenye <ph name="TOP_LEVEL_URL" /></translation> <translation id="7592362899630581445">Cheti cha seva kinakiuka vikwazo vya jina.</translation> <translation id="7598391785903975535">Chini ya MB <ph name="UPPER_ESTIMATE" /></translation> @@ -2031,6 +2039,7 @@ <translation id="7614494068621678628"><ph name="MANAGE_PASSWORDS_FOCUSED_FRIENDLY_MATCH_TEXT" />, bonyeza 'Tab' kisha 'Enter' ili uangalie na udhibiti manenosiri yako katika mipangilio ya Chrome</translation> <translation id="7616645509853975347">Msimamizi wako amewasha Viunganishi vya Chrome Enterprise kwenye kivinjari chako. Viunganishi hivi vina uwezo wa kufikia baadhi ya data yako.</translation> <translation id="7619838219691048931">Laha la mwisho</translation> +<translation id="7625242817712715120">Sera ya msimamizi haipendekezi kuchapisha maudhui haya</translation> <translation id="762844065391966283">Moja kwa wakati mmoja</translation> <translation id="7633909222644580952">Ripoti za utendaji na programu kuacha kufanya kazi</translation> <translation id="7637571805876720304">Je, ungependa kuondoa kadi ya mikopo kwenye Chromium?</translation> @@ -2184,6 +2193,7 @@ <translation id="809898108652741896">A6</translation> <translation id="8100588592594801589">Tumeondoa kadi zisizo sahihi</translation> <translation id="8103161714697287722">Njia ya Kulipa</translation> +<translation id="8103643211515685474">Chapisha licha ya hayo</translation> <translation id="8105368624971345109">Zima</translation> <translation id="810875025413331850">Haikupata vifaa vyovyote vilivyo karibu.</translation> <translation id="8116925261070264013">Imezimwa</translation> @@ -2395,6 +2405,7 @@ <translation id="886872106311861689">B3</translation> <translation id="8870413625673593573">Zilizofungwa Hivi Karibuni</translation> <translation id="8870494189203302833">Mpangilio sawa zikiangalia chini</translation> +<translation id="8870700989640064057">Ungependa kuchapisha faili ya siri?</translation> <translation id="8871553383647848643">Weka mapendeleo ya mwonekano wa kivinjari chako</translation> <translation id="8874824191258364635">Andika nambari sahihi ya kadi</translation> <translation id="8884537526797090108">Huwezi kurekodi maudhui ya siri</translation> @@ -2473,6 +2484,7 @@ <translation id="9119042192571987207">Imepakiwa</translation> <translation id="9128016270925453879">Sera zimepakiwa</translation> <translation id="9128870381267983090">Unganisha kwenye mtandao</translation> +<translation id="9131119348384879525">Ungependa kunasa maudhui ya siri?</translation> <translation id="9137013805542155359">Onyesha asili</translation> <translation id="9141013498910525015">Dhibiti anwani</translation> <translation id="9144951720726881238">Tarehe ya mwisho wa matumizi:</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb index 2815944..7cc437c9 100644 --- a/components/strings/components_strings_ta.xtb +++ b/components/strings/components_strings_ta.xtb
@@ -683,6 +683,7 @@ <translation id="3215092763954878852">WebAuthnனைப் பயன்படுத்த முடியவில்லை</translation> <translation id="3218181027817787318">சார்புடையது</translation> <translation id="3223287115535306850">ஆப்ஸ் துவக்கி லோடிங் ஐகான்</translation> +<translation id="3225347164936328585">கைதட்டும் ஈமோஜி</translation> <translation id="3225919329040284222">உள்ளமைந்த எதிர்பார்ப்புகளுடன் பொருந்தாத சான்றிதழை சேவையகம் வழங்கியது. சில உயர்-பாதுகாப்பு வலைத்தளங்களில் உங்களைப் பாதுகாக்கவே இந்த எதிர்பார்ப்புகள் சேர்க்கப்படுகின்றன.</translation> <translation id="3226128629678568754">பக்கத்தை ஏற்ற தேவைப்படும் தரவை மறுமுறைச் சமர்ப்பிப்பதற்கு மீண்டும் ஏற்று என்ற பொத்தானை அழுத்துக.</translation> <translation id="3226387218769101247">சிறுபடங்கள்</translation> @@ -719,6 +720,7 @@ <translation id="3333762389743153920">விர்ச்சுவல் கார்டாகப் பயன்படுத்தத் தகுதிபெறவில்லை</translation> <translation id="3338095232262050444">பாதுகாப்பானது</translation> <translation id="3339446062576134663">கிளவுட் (ஆஷ்)</translation> +<translation id="3345782426586609320">கண்கள் ஈமோஜி</translation> <translation id="3355823806454867987">ப்ராக்ஸி அமைப்புகளை மாற்றுக...</translation> <translation id="3360103848165129075">பேமெண்ட் ஹேண்ட்லர் ஷீட்</translation> <translation id="3361596688432910856">பின்வரும் தகவலை Chrome <ph name="BEGIN_EMPHASIS" />சேமிக்காது<ph name="END_EMPHASIS" />: @@ -1076,6 +1078,7 @@ <translation id="4390472908992056574">பிரிம்</translation> <translation id="4406883609789734330">உடனடி வசனம்</translation> <translation id="4406896451731180161">தேடல் முடிவுகள்</translation> +<translation id="4407755609041463909">தீ ஈமோஜி</translation> <translation id="4408413947728134509">குக்கீகள் (<ph name="NUM_COOKIES" />)</translation> <translation id="4414515549596849729">குக்கீகள் & தளத்தின் தரவு</translation> <translation id="4415426530740016218">பிக்அப் முகவரி</translation> @@ -1383,6 +1386,7 @@ <translation id="5344579389779391559">இந்தப் பக்கம் உங்களிடமிருந்து கட்டணம் வசூலிக்கலாம்</translation> <translation id="5347645913823149105">Chromeமில் எழுத்து வடிவங்களைப் பிரத்தியேகமாக்கும் பட்டன். Chromeமில் எழுத்து வடிவ அளவுகளையும் வகைகளையும் பிரத்தியேகமாக்க, Enter பட்டனை அழுத்துங்கள்</translation> <translation id="5355557959165512791"><ph name="SITE" /> தளத்தின் சான்றிதழ் ரத்துசெய்யப்பட்டதால், தற்போது அதைப் பார்க்க முடியாது. பொதுவாக நெட்வொர்க் பிழைகளும் பாதிப்புகளும் தற்காலிகமானவை என்பதால், இந்தப் பக்கம் பின்னர் சரியாகச் செயல்படக்கூடும்.</translation> +<translation id="5356837363448394805">அதிர்ச்சியில் கன்னங்கள் சிவந்த ஈமோஜி</translation> <translation id="536296301121032821">கொள்கை அமைப்புகளைச் சேமிப்பதில் தோல்வி</translation> <translation id="5363309033720083897">உங்கள் நிர்வாகி அனுமதித்துள்ள சீரியல் போர்ட்</translation> <translation id="5371425731340848620">கார்டை மாற்றவும்</translation> @@ -1612,6 +1616,7 @@ <translation id="622039917539443112">பேரலல் ஃபோல்டு</translation> <translation id="6221345481584921695">Google பாதுகாப்பு உலாவலானது, சமீபத்தில் <ph name="SITE" /> இல் <ph name="BEGIN_LINK" />மால்வேர் உள்ளதைக் கண்டுபிடித்தது<ph name="END_LINK" />. இயல்பாகவே பாதுகாப்பாக இருக்கும் இணையதளங்களும் சில சமயங்களில் மால்வேரினால் பாதிக்கப்பட்டிருக்கும். தீங்குவிளைவிக்கும் உள்ளடக்கமானது மால்வேரைப் பகிர்பவர் என அழைக்கப்படும் <ph name="SUBRESOURCE_HOST" /> இலிருந்து வருகிறது.</translation> <translation id="6226163402662242066"><ph name="MANAGE_CHROME_ACCESSIBILITY_FOCUSED_FRIENDLY_MATCH_TEXT" />. Chrome அமைப்புகளில் அணுகல் கருவிகளைப் பிரத்தியேகமாக்க, Tab பட்டனை அழுத்திவிட்டு Enter பட்டனை அழுத்துங்கள்</translation> +<translation id="6233160458685643793">பற்களைக் காட்டிச் சிரிக்கும் ஈமோஜி</translation> <translation id="6234122620015464377">டிரிம் ஆஃப்டர் ஈச் டாக்குமெண்ட்</translation> <translation id="6240447795304464094">Google Pay லோகோ</translation> <translation id="6241121617266208201">பரிந்துரைகளை மறை</translation> @@ -1664,6 +1669,7 @@ <translation id="6390662030813198813">Engineering-E</translation> <translation id="6391700400718590966">பாதுகாப்பான பேமெண்ட் அனுமதிச் சான்றுகள் பொருந்தவில்லை என்பதற்கான தாள் மூடப்பட்டது</translation> <translation id="6393956493820063117"><ph name="ORIGIN_NAME" /> என்ற தளத்திலிருந்து நகலெடுத்து இங்கே ஒட்டுவது நிர்வாகக் கொள்கையின்படி தடுக்கப்பட்டுள்ளது</translation> +<translation id="6398277657359595425">சத்தமாக அழும் ஈமோஜி</translation> <translation id="6398765197997659313">முழுத்திரையிலிருந்து வெளியேறு</translation> <translation id="6401136357288658127">இது நிறுத்தப்பட்ட கொள்கை. இதற்குப் பதிலாக <ph name="NEW_POLICY" /> கொள்கையைப் பயன்படுத்த வேண்டும்.</translation> <translation id="6404511346730675251">புக்மார்க்களைத் திருத்து</translation> @@ -1739,6 +1745,7 @@ <translation id="6660413144148052430">இருப்பிடம்</translation> <translation id="6662457027866368246">ரோல் 1</translation> <translation id="666259744093848177">(x86_64க்கு ஏற்றவாறு மாற்றியமைக்கப்பட்டது)</translation> +<translation id="6663846344464066639">இரு கைகளால் கும்பிடும் ஈமோஜி</translation> <translation id="6665553082534466207">டிரிப்பில் பஞ்ச் ரைட்</translation> <translation id="6671697161687535275">Chromium இலிருந்து படிவப் பரிந்துரையை அகற்றவா?</translation> <translation id="6685834062052613830">வெளியேறி, அமைப்பை முடிக்கவும்</translation> @@ -1807,6 +1814,7 @@ <translation id="6934672428414710184">இந்தப் பெயர் உங்கள் ‘Google கணக்கிலிருந்து’ பெறப்பட்டது</translation> <translation id="6944692733090228304"><ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> நிர்வகிக்காத ஒரு தளத்தில் உங்கள் கடவுச்சொல்லை உள்ளிட்டுள்ளீர்கள். உங்கள் கணக்கைப் பாதுகாக்க, பிற ஆப்ஸிலும் தளங்களிலும் உங்கள் கடவுச்சொல்லை மீண்டும் பயன்படுத்த வேண்டாம்.</translation> <translation id="6945221475159498467">தேர்ந்தெடு</translation> +<translation id="6946722113367118030">யோசிக்கும் ஈமோஜி</translation> <translation id="6948051842255602737">கேம் முடிந்தது, உங்கள் ஸ்கோர்: <ph name="SCORE" />.</translation> <translation id="6948701128805548767">பிக்அப் முறைகளையும் தேவைகளையும் பார்க்க, முகவரியைத் தேர்ந்தெடுக்கவும்</translation> <translation id="6949872517221025916">கடவுச்சொல்லை மீட்டமைக்கவும்</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb index 96e70bd0..f48acbe 100644 --- a/components/strings/components_strings_te.xtb +++ b/components/strings/components_strings_te.xtb
@@ -831,6 +831,8 @@ దీన్ని లిస్ట్ నుండి తీసివేసి, ఆపై మళ్లీ జోడించి ప్రయత్నించండి.</translation> <translation id="3630699740441428070">ఈ పరికరానికి సంబంధించిన అడ్మినిస్ట్రేటర్లు మీ నెట్వర్క్ కనెక్షన్ను కాన్ఫిగర్ చేశారు, ఇది మీరు సందర్శించే వెబ్సైట్లతో సహా మీ నెట్వర్క్ ట్రాఫిక్ను చూడటానికి వారిని అనుమతించవచ్చు.</translation> <translation id="3631244953324577188">బయోమెట్రిక్స్</translation> +<translation id="3632503704576938756">స్క్రీన్ షేరింగ్ కొనసాగించబడింది</translation> +<translation id="3632892046558972264">స్క్రీన్ షేరింగ్ పాజ్ చేయబడింది</translation> <translation id="3633738897356909127">'Chromeను అప్డేట్ చేయి' బటన్, మీ Chrome సెట్టింగ్ల నుండి Chromeను అప్డేట్ చేయడానికి 'Enter'ను నొక్కండి</translation> <translation id="3634530185120165534">ట్రే 5</translation> <translation id="3634567936866541746">మీరు మోసపూరితమైన సైట్లో మీ పాస్వర్డ్ను ఎంటర్ చేశారు. మీ ఖాతాలను సురక్షితంగా ఉంచడానికి, Chrome మీ సేవ్ చేసిన పాస్వర్డ్లను చెక్ చేయాలని సిఫార్సు చేస్తోంది.</translation> @@ -1065,6 +1067,7 @@ <translation id="4346197816712207223">ఆమోదించే క్రెడిట్ కార్డ్లు</translation> <translation id="4346833872170306413">Roc-16K</translation> <translation id="4348834659292907206"><ph name="SITE" />కు కనెక్షన్ సురక్షితం కాదు</translation> +<translation id="4349365535725594680">గోప్యమైన కంటెంట్ను షేర్ చేయడం సాధ్యం కాదు</translation> <translation id="4350629523305688469">మల్టీఫంక్షన్ ట్రే</translation> <translation id="4351060348582610152"><ph name="ORIGIN" /> సమీపంలోని బ్లూటూత్ పరికరాల కోసం స్కాన్ చేయాలనుకుంటోంది. కింది పరికరాలు కనుగొనబడ్డాయి:</translation> <translation id="4351175281479794167">వెరిఫికేషన్ కోడ్ను ఎంటర్ చేయండి</translation> @@ -1655,6 +1658,7 @@ <translation id="6328786501058569169">ఈ సైట్ మోసపూరితమైనది</translation> <translation id="6337133576188860026"><ph name="SIZE" /> కంటే తక్కువ స్థలాన్ని ఖాళీ చేస్తుంది. మీ తదుపరి సందర్శనలో కొన్ని సైట్లు మరింత నెమ్మదిగా లోడ్ కావచ్చు.</translation> <translation id="6337534724793800597">పేరు ద్వారా విధానాలను ఫిల్టర్ చేయి</translation> +<translation id="6340739886198108203">గోప్యమైన కంటెంట్ కనిపించినప్పుడు, దానిని స్క్రీన్షాట్లు తీయవద్దని లేదా రికార్డ్ చేయవద్దని అడ్మినిస్ట్రేటర్ పాలసీ సిఫార్సు చేస్తోంది:</translation> <translation id="6349101878882523185"><ph name="APP_NAME" />ను ఇన్స్టాల్ చేయండి</translation> <translation id="6353505687280762741">{COUNT,plural, =0{ఏవీ లేవు}=1{1 పాస్వర్డ్ (<ph name="DOMAIN_LIST" />కు చెందినది, సింక్ చేయబడింది)}=2{2 పాస్వర్డ్లు (<ph name="DOMAIN_LIST" />కు చెందినవి, సింక్ చేయబడ్డాయి)}other{# పాస్వర్డ్లు (<ph name="DOMAIN_LIST" />కు చెందినవి, సింక్ చేయబడ్డాయి)}}</translation> <translation id="6355392890578844978">ఈ బ్రౌజర్ కంపెనీ లేదా ఇతర సంస్థ ద్వారా మేనేజ్ చేయబడదు. ఈ పరికరంలోని యాక్టివిటీని Chromium వెలుపల మేనేజ్ చేస్తుండవచ్చు. <ph name="BEGIN_LINK" />మరింత తెలుసుకోండి<ph name="END_LINK" /></translation> @@ -1838,6 +1842,7 @@ <translation id="6972629891077993081">HID పరికరాలు</translation> <translation id="6973656660372572881">రెండు స్థిర ప్రాక్సీ సర్వర్లు మరియు ఒక .pac స్క్రిప్ట్ URL పేర్కొనబడ్డాయి.</translation> <translation id="6973932557599545801">క్షమించండి నేను సహాయం చేయలేకపోయాను, దయచేసి మీరే స్వంతంగా కొనసాగండి.</translation> +<translation id="6978236010531171013">ఏదేమైనా షేర్ చేయండి</translation> <translation id="6979158407327259162">Google Drive</translation> <translation id="6979440798594660689">మ్యూట్ (డిఫాల్ట్)</translation> <translation id="6979983982287291980">మీరు డౌన్లోడ్ చేసిన ఫైల్స్ Google క్లౌడ్ లేదా థర్డ్ పార్టీలకు విశ్లేషణ కోసం పంపబడతాయి. ఉదాహరణకు, వాటిని సున్నితమైన వ్యక్తిగత సమాచారం లేదా మాల్వేర్ కోసం స్కాన్ చేయబడవచ్చు.</translation> @@ -2028,6 +2033,7 @@ <translation id="7578104083680115302">మీరు Googleతో సేవ్ చేసిన కార్డ్లను ఉపయోగించి పరికరాల్లోని సైట్లు మరియు అనువర్తనాల్లో శీఘ్రంగా పేమెంట్ చేయండి.</translation> <translation id="7581199239021537589">2వ వైపు ప్రింట్లో చిత్రాన్ని Y అక్షంలో జరపు</translation> <translation id="7582602800368606489">Google Calendarలో త్వరగా కొత్త ఈవెంట్ను క్రియేట్ చేయండి</translation> +<translation id="7591288787774558753">గోప్యమైన కంటెంట్ను షేర్ చేయాలా?</translation> <translation id="7591636454931265313"><ph name="TOP_LEVEL_URL" />లోని కుక్కీలను, సైట్ డేటాను వినియోగించడానికి <ph name="EMBEDDED_URL" /> అనుమతి అడుగుతోంది</translation> <translation id="7592362899630581445">సర్వర్ యొక్క ప్రమాణపత్రం పేరు పరిమితులను ఉల్లంఘిస్తోంది.</translation> <translation id="7598391785903975535"><ph name="UPPER_ESTIMATE" /> కంటే తక్కువ</translation> @@ -2038,6 +2044,7 @@ <translation id="7614494068621678628"><ph name="MANAGE_PASSWORDS_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome సెట్టింగ్లలో మీ పాస్వర్డ్లను చూసి, మేనేజ్ చేయడానికి 'Tab'ను నొక్కి, ఆపై 'Enter'ను నొక్కండి</translation> <translation id="7616645509853975347">మీ అడ్మినిస్ట్రేటర్, మీ బ్రౌజర్లో Chrome Enterprise కనెక్టర్లను ఆన్ చేశారు. ఈ కనెక్టర్లకు మీ డేటాలో కొంత డేటాకు యాక్సెస్ ఉంది.</translation> <translation id="7619838219691048931">చివరి షీట్</translation> +<translation id="7625242817712715120">ఈ కంటెంట్ను ప్రింట్ చేయవద్దని అడ్మినిస్ట్రేటర్ పాలసీ సిఫార్సు చేస్తోంది</translation> <translation id="762844065391966283">ఒకసారికి ఒకటి</translation> <translation id="7633909222644580952">పనితీరు డేటా, క్రాష్ రిపోర్ట్లు</translation> <translation id="7637571805876720304">Chromium నుండి క్రెడిట్ కార్డ్ను తీసివేయాలా?</translation> @@ -2191,6 +2198,7 @@ <translation id="809898108652741896">A6</translation> <translation id="8100588592594801589">చెల్లని కార్డ్లు తీసివేయబడ్డాయి</translation> <translation id="8103161714697287722">చెల్లింపు పద్ధతి</translation> +<translation id="8103643211515685474">ఏదేమైనా ప్రింట్ చేయండి</translation> <translation id="8105368624971345109">ఆఫ్ చేయి</translation> <translation id="810875025413331850">సమీప పరికరాలు ఏవీ కనుగొనబడలేదు.</translation> <translation id="8116925261070264013">మ్యూట్ చేసినవి</translation> @@ -2403,6 +2411,7 @@ <translation id="886872106311861689">B3</translation> <translation id="8870413625673593573">ఇటీవల మూసివేసినవి</translation> <translation id="8870494189203302833">ఒకే క్రమంలో ఉన్న ఫేస్ డౌన్</translation> +<translation id="8870700989640064057">గోప్యమైన ఫైల్ను ప్రింట్ చేయాలా?</translation> <translation id="8871553383647848643">మీ బ్రౌజర్ రూపాన్ని అనుకూలీకరించండి</translation> <translation id="8874824191258364635">చెల్లుబాటు అయ్యే కార్డ్ నంబర్ను నమోదు చేయండి</translation> <translation id="8884537526797090108">గోప్యమైన కంటెంట్ను రికార్డ్ చేయడం సాధ్యం కాదు</translation> @@ -2481,6 +2490,7 @@ <translation id="9119042192571987207">అప్లోడ్ చేయబడింది</translation> <translation id="9128016270925453879">పాలసీలు లోడ్ చేయబడ్డాయి</translation> <translation id="9128870381267983090">నెట్వర్క్కి కనెక్ట్ చేయి</translation> +<translation id="9131119348384879525">గోప్యమైన కంటెంట్ను క్యాప్చర్ చేయాలా?</translation> <translation id="9137013805542155359">అసలును చూపించు</translation> <translation id="9141013498910525015">అడ్రస్లను నిర్వహించండి</translation> <translation id="9144951720726881238">గడువు తేదీ:</translation>
diff --git a/components/strings/components_strings_uz.xtb b/components/strings/components_strings_uz.xtb index 20b26ba..e511348 100644 --- a/components/strings/components_strings_uz.xtb +++ b/components/strings/components_strings_uz.xtb
@@ -824,6 +824,8 @@ <translation id="3630155396527302611">Agar bu dasturga avvaldan tarmoqqa ulanish uchun ruxsat berilgan bo‘lsa, undan ruxsatni olib tashlab, keyin qaytadan ruxsat bering.</translation> <translation id="3630699740441428070">Qurilmadagi tarmoq administratorlar tomonidan sozlangan va ular tarmoqdagi trafik, siz ochadigan saytlarni kuzatishi mumkin.</translation> <translation id="3631244953324577188">Biometrik tizimlar</translation> +<translation id="3632503704576938756">Ekran namoyishi davom ettirildi</translation> +<translation id="3632892046558972264">Ekran namoyishi pauzalandi</translation> <translation id="3633738897356909127">Chromeni yangilash tugmasi, Chrome sozlamalari orqali Chromeni yangilash uchun Enter tugmasini bosing</translation> <translation id="3634530185120165534">Tarnov 5</translation> <translation id="3634567936866541746">Hozirgina shubhali saytda parol kiritdingiz. Hisoblar himoyasi uchun Chrome saqlangan parollaringizni tekshirishni tavsiya qiladi.</translation> @@ -1058,6 +1060,7 @@ <translation id="4346197816712207223">Qabul qilinadigan kredit kartalar</translation> <translation id="4346833872170306413">Roc-16K</translation> <translation id="4348834659292907206"><ph name="SITE" /> saytiga ulanish xavfsiz emas</translation> +<translation id="4349365535725594680">Maxfiy kontent ulashilmadi</translation> <translation id="4350629523305688469">Koʻp funksiyali tarnov</translation> <translation id="4351060348582610152"><ph name="ORIGIN" /> sayti yaqin-atrofdagi Bluetooth qurilmalarni tekshirmoqchi. Quyidagi qurilmalar topilgan:</translation> <translation id="4351175281479794167">Tasdiqlash kodini kiriting</translation> @@ -1647,6 +1650,7 @@ <translation id="6328786501058569169">Bu – soxta sayt</translation> <translation id="6337133576188860026">Xotirada <ph name="SIZE" /> tozalandi. Bundan keyin ba’zi veb-saytlar sekinroq yuklanishi mumkin.</translation> <translation id="6337534724793800597">Qoidalarni nomi bo‘yicha filtrlash</translation> +<translation id="6340739886198108203">Maxfiy kontent koʻringanda administrator skrinshot olish yoki yozib olishni tavsiya qilmaydi:</translation> <translation id="6349101878882523185"><ph name="APP_NAME" /> ilovasini oʻrnatish</translation> <translation id="6353505687280762741">{COUNT,plural, =0{Hech qanday}=1{1 ta parol (<ph name="DOMAIN_LIST" /> uchun, sinxronlandi)}=2{2 ta parol (<ph name="DOMAIN_LIST" /> uchun, sinxronlandi)}other{# ta parol (<ph name="DOMAIN_LIST" /> uchun, sinxronlandi)}}</translation> <translation id="6355392890578844978">Bu brauzer kompaniya yoki tashkilot boshqaruvida emas. Bu qurilmadagi amallar Chromiumdan tashqarida boshqarilishi mumkin. <ph name="BEGIN_LINK" />Batafsil<ph name="END_LINK" /></translation> @@ -1830,6 +1834,7 @@ <translation id="6972629891077993081">HID qurilmalar</translation> <translation id="6973656660372572881">Sozlangan proksi-serverlar va PAC-skriptlar URL manzillari ko‘rsatilgan</translation> <translation id="6973932557599545801">Uzr, men yordam bera olmayman. Oʻzingiz harakat qiling.</translation> +<translation id="6978236010531171013">Ulashish</translation> <translation id="6979158407327259162">Google Drive</translation> <translation id="6979440798594660689">Ovozsiz (birlamchi)</translation> <translation id="6979983982287291980">Siz yuklab oladigan fayllar tekshiruv uchun Google Cloud yoki boshqa tashqi xizmatlarga yuboriladi. Masalan, tarkibida maxfiy yoki zararli axborotlar mavjudligini aniqlash uchun.</translation> @@ -2020,6 +2025,7 @@ <translation id="7578104083680115302">Google Payments xizmatiga saqlangan bank kartangiz yordamida turli sayt va ilovalardagi xaridlar uchun to‘lovni osongina amalga oshiring. Sozlamalar barcha qurilmalaringizda amal qiladi.</translation> <translation id="7581199239021537589">Tasvirning orqa tomondagi Y oʻqidagi siljish</translation> <translation id="7582602800368606489">Google Taqvimda yangi tadbirni tez yaratish</translation> +<translation id="7591288787774558753">Maxfiy kontent ulashilsinmi?</translation> <translation id="7591636454931265313"><ph name="EMBEDDED_URL" /> sayti <ph name="TOP_LEVEL_URL" /> cookie-fayllari va sayt maʼlumotlaridan foydalanmoqchi</translation> <translation id="7592362899630581445">Server sertifikati nom cheklovlarni buzgan.</translation> <translation id="7598391785903975535"><ph name="UPPER_ESTIMATE" />dan kam</translation> @@ -2030,6 +2036,7 @@ <translation id="7614494068621678628"><ph name="MANAGE_PASSWORDS_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome sozlamalari orqali parollaringizni boshqarish uchun avval Tab, keyin esa Enter tugmasini bosing</translation> <translation id="7616645509853975347">Brauzeringizda administrator tomonidan Chrome korporativ konnektorlari yoqilgan. Bu konnektorlar ayrim axborotlaringizdan foydalana oladi.</translation> <translation id="7619838219691048931">Oxirgi varaq</translation> +<translation id="7625242817712715120">Administrator bu kontentni chop etishni tavsiya qilmaydi</translation> <translation id="762844065391966283">Bir obyektdan</translation> <translation id="7633909222644580952">Foydalanish statistikasi va ishdan chiqishlar hisoboti</translation> <translation id="7637571805876720304">Bu kredit karta Chromium’dan o‘chirib tashlansinmi?</translation> @@ -2183,6 +2190,7 @@ <translation id="809898108652741896">A6</translation> <translation id="8100588592594801589">Yaroqsiz kartalar olib tashlandi</translation> <translation id="8103161714697287722">To‘lov usuli</translation> +<translation id="8103643211515685474">Baribir chop etilsin</translation> <translation id="8105368624971345109">O‘chirib qo‘yish</translation> <translation id="810875025413331850">Yaqin-atrofda hech qanday qurilma topilmadi.</translation> <translation id="8116925261070264013">Ovozsiz</translation> @@ -2395,6 +2403,7 @@ <translation id="886872106311861689">B3</translation> <translation id="8870413625673593573">Yaqinda yopilganlar</translation> <translation id="8870494189203302833">Bir xil tartibda orqa tomonida</translation> +<translation id="8870700989640064057">Maxfiy fayl chop etilsinmi?</translation> <translation id="8871553383647848643">Brauzer koʻrinishini moslash</translation> <translation id="8874824191258364635">Karta raqamini xatosiz kiriting</translation> <translation id="8884537526797090108">Maxfiy kontent yozib olinmadi</translation> @@ -2473,6 +2482,7 @@ <translation id="9119042192571987207">Yuklangan</translation> <translation id="9128016270925453879">Qoidalar yuklandi</translation> <translation id="9128870381267983090">Tarmoqqa ulanish</translation> +<translation id="9131119348384879525">Maxfiy kontent yozib olinsinmi?</translation> <translation id="9137013805542155359">Asl tilda ko‘rsatish</translation> <translation id="9141013498910525015">Manzillarni boshqarish</translation> <translation id="9144951720726881238">Tugash muddati:</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb index 2ba9b4f..f901cfe 100644 --- a/components/strings/components_strings_vi.xtb +++ b/components/strings/components_strings_vi.xtb
@@ -827,6 +827,8 @@ xóa chương trình này khỏi danh sách rồi thêm lại.</translation> <translation id="3630699740441428070">Các quản trị viên của thiết bị này đã định cấu hình đường kết nối mạng của bạn, nhờ đó họ có thể xem lưu lượng truy cập mạng của bạn, kể cả những trang web mà bạn truy cập.</translation> <translation id="3631244953324577188">Sinh trắc học</translation> +<translation id="3632503704576938756">Tính năng chia sẻ màn hình đã được tiếp tục</translation> +<translation id="3632892046558972264">Tính năng chia sẻ màn hình đã bị tạm dừng</translation> <translation id="3633738897356909127">Nút Cập nhật Chrome, nhấn phím Enter để cập nhật Chrome trong phần cài đặt của Chrome</translation> <translation id="3634530185120165534">Khay 5</translation> <translation id="3634567936866541746">Bạn vừa nhập mật khẩu vào một trang web lừa đảo. Để bảo mật tài khoản của mình, bạn nên kiểm tra các mật khẩu đã lưu trên Chrome.</translation> @@ -1061,6 +1063,7 @@ <translation id="4346197816712207223">Thẻ tín dụng được chấp nhận</translation> <translation id="4346833872170306413">Roc-16K</translation> <translation id="4348834659292907206">Kết nối đến <ph name="SITE" /> không an toàn</translation> +<translation id="4349365535725594680">Không thể chia sẻ nội dung bảo mật</translation> <translation id="4350629523305688469">Khay đa chức năng</translation> <translation id="4351060348582610152"><ph name="ORIGIN" /> muốn quét tìm các thiết bị Bluetooth ở gần và đã tìm thấy các thiết bị sau đây:</translation> <translation id="4351175281479794167">Nhập mã xác minh</translation> @@ -1648,6 +1651,7 @@ <translation id="6328786501058569169">Đây là trang web lừa đảo</translation> <translation id="6337133576188860026">Bộ nhớ đệm còn chưa đầy <ph name="SIZE" />. Một số trang web có thể tải chậm hơn vào lần tới bạn truy cập.</translation> <translation id="6337534724793800597">Lọc chính sách theo tên</translation> +<translation id="6340739886198108203">Chính sách của quản trị viên không khuyến khích chụp ảnh màn hình hoặc ghi âm khi đang có nội dung bảo mật trên màn hình:</translation> <translation id="6349101878882523185">Cài đặt <ph name="APP_NAME" /></translation> <translation id="6353505687280762741">{COUNT,plural, =0{Không có}=1{1 mật khẩu (cho <ph name="DOMAIN_LIST" />, đã đồng bộ hóa)}=2{2 mật khẩu (cho <ph name="DOMAIN_LIST" />, đã đồng bộ hóa)}other{# mật khẩu (cho <ph name="DOMAIN_LIST" />, đã đồng bộ hóa)}}</translation> <translation id="6355392890578844978">Không có công ty hay tổ chức nào quản lý trình duyệt này. Hoạt động trên thiết bị này có thể được quản lý ở bên ngoài Chromium. <ph name="BEGIN_LINK" />Tìm hiểu thêm<ph name="END_LINK" /></translation> @@ -1828,6 +1832,7 @@ <translation id="6972629891077993081">Thiết bị HID</translation> <translation id="6973656660372572881">Cả hai máy chủ proxy cố định và URL tập lệnh .pac đều được chỉ định.</translation> <translation id="6973932557599545801">Rất tiếc, tôi không thể trợ giúp được nữa. Bạn vui lòng tự thực hiện việc này.</translation> +<translation id="6978236010531171013">Vẫn chia sẻ</translation> <translation id="6979158407327259162">Google Drive</translation> <translation id="6979440798594660689">Tắt tiếng (mặc định)</translation> <translation id="6979983982287291980">Các tệp bạn tải xuống được gửi đến Google Cloud hoặc bên thứ ba để phân tích. Ví dụ: các tệp đó có thể được quét tìm dữ liệu nhạy cảm hoặc phần mềm độc hại.</translation> @@ -2018,6 +2023,7 @@ <translation id="7578104083680115302">Thanh toán nhanh trên các trang web và ứng dụng trong mọi thiết bị nhờ sử dụng thẻ bạn đã lưu với Google.</translation> <translation id="7581199239021537589">Trục Y của hình ảnh mặt 2</translation> <translation id="7582602800368606489">Tạo nhanh một sự kiện mới trong Lịch Google</translation> +<translation id="7591288787774558753">Chia sẻ nội dung bảo mật?</translation> <translation id="7591636454931265313"><ph name="EMBEDDED_URL" /> muốn sử dụng cookie và dữ liệu trang web trên <ph name="TOP_LEVEL_URL" /></translation> <translation id="7592362899630581445">Chứng chỉ của máy chủ vi phạm hạn chế tên.</translation> <translation id="7598391785903975535">Dưới <ph name="UPPER_ESTIMATE" /></translation> @@ -2028,6 +2034,7 @@ <translation id="7614494068621678628"><ph name="MANAGE_PASSWORDS_FOCUSED_FRIENDLY_MATCH_TEXT" />, nhấn phím Tab rồi nhấn Enter để xem và quản lý các mật khẩu của bạn trong phần cài đặt của Chrome</translation> <translation id="7616645509853975347">Quản trị viên đã bật Chrome Enterprise Connectors trên trình duyệt bạn dùng. Các trình kết nối này có quyền truy cập vào một số dữ liệu của bạn.</translation> <translation id="7619838219691048931">Tờ cuối</translation> +<translation id="7625242817712715120">Chính sách của quản trị viên không khuyến khích in nội dung này</translation> <translation id="762844065391966283">Từng đối tượng</translation> <translation id="7633909222644580952">Báo cáo sự cố và dữ liệu hiệu suất</translation> <translation id="7637571805876720304">Bạn muốn xóa thẻ tín dụng khỏi Chromium?</translation> @@ -2181,6 +2188,7 @@ <translation id="809898108652741896">A6</translation> <translation id="8100588592594801589">Đã xóa các thẻ không hợp lệ</translation> <translation id="8103161714697287722">Phương thức thanh toán</translation> +<translation id="8103643211515685474">Vẫn in</translation> <translation id="8105368624971345109">Tắt</translation> <translation id="810875025413331850">Không tìm thấy thiết bị lân cận.</translation> <translation id="8116925261070264013">Đã ẩn</translation> @@ -2394,6 +2402,7 @@ <translation id="886872106311861689">B3</translation> <translation id="8870413625673593573">Các thẻ đã Đóng gần đây</translation> <translation id="8870494189203302833">Cùng thứ tự hướng xuống</translation> +<translation id="8870700989640064057">In tệp bảo mật?</translation> <translation id="8871553383647848643">Tùy chỉnh giao diện trình duyệt của bạn</translation> <translation id="8874824191258364635">Nhập số thẻ hợp lệ</translation> <translation id="8884537526797090108">Không thể ghi nội dung bí mật</translation> @@ -2472,6 +2481,7 @@ <translation id="9119042192571987207">Đã tải lên</translation> <translation id="9128016270925453879">Đã tải chính sách</translation> <translation id="9128870381267983090">Kết nối đến mạng</translation> +<translation id="9131119348384879525">Chụp nội dung bảo mật?</translation> <translation id="9137013805542155359">Hiển thị văn bản gốc</translation> <translation id="9141013498910525015">Quản lý địa chỉ</translation> <translation id="9144951720726881238">Ngày hết hạn:</translation>
diff --git a/components/value_store/BUILD.gn b/components/value_store/BUILD.gn index 1d2da1f3..faf74566 100644 --- a/components/value_store/BUILD.gn +++ b/components/value_store/BUILD.gn
@@ -25,7 +25,6 @@ deps = [ "//base", - "//content/public/browser", "//third_party/abseil-cpp:absl", ] } @@ -45,7 +44,7 @@ deps = [ ":value_store", "//base", - "//content/test:test_support", + "//base/test:test_support", "//testing/gtest", ] } @@ -64,7 +63,7 @@ ":test_support", ":value_store", "//base", - "//content/test:test_support", + "//base/test:test_support", "//skia", "//testing/gtest", ]
diff --git a/components/value_store/DEPS b/components/value_store/DEPS index cc004459..5de94653 100644 --- a/components/value_store/DEPS +++ b/components/value_store/DEPS
@@ -1,5 +1,4 @@ include_rules = [ - "+content/public/browser", - "+content/public/test", + "+base", "+third_party/leveldatabase", -] \ No newline at end of file +]
diff --git a/components/value_store/lazy_leveldb.cc b/components/value_store/lazy_leveldb.cc index a78f26e..2ad9ad9d 100644 --- a/components/value_store/lazy_leveldb.cc +++ b/components/value_store/lazy_leveldb.cc
@@ -5,17 +5,16 @@ #include "components/value_store/lazy_leveldb.h" #include "base/json/json_reader.h" +#include "base/logging.h" #include "base/memory/ptr_util.h" #include "base/metrics/histogram.h" #include "base/strings/string_util.h" #include "base/threading/sequenced_task_runner_handle.h" -#include "content/public/browser/browser_thread.h" #include "third_party/leveldatabase/env_chromium.h" #include "third_party/leveldatabase/src/include/leveldb/iterator.h" #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" using base::StringPiece; -using content::BrowserThread; namespace value_store {
diff --git a/components/value_store/leveldb_value_store_unittest.cc b/components/value_store/leveldb_value_store_unittest.cc index a769b9c..597d060 100644 --- a/components/value_store/leveldb_value_store_unittest.cc +++ b/components/value_store/leveldb_value_store_unittest.cc
@@ -10,10 +10,10 @@ #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" #include "base/memory/ref_counted.h" +#include "base/test/task_environment.h" #include "base/values.h" #include "components/value_store/leveldb_value_store.h" #include "components/value_store/value_store_test_suite.h" -#include "content/public/test/browser_task_environment.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/leveldatabase/src/include/leveldb/db.h" #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" @@ -64,10 +64,9 @@ const base::FilePath& database_path() { return database_dir_.GetPath(); } private: + base::test::TaskEnvironment task_environment_; std::unique_ptr<LeveldbValueStore> store_; base::ScopedTempDir database_dir_; - - content::BrowserTaskEnvironment task_environment_; }; // Check that we can restore a single corrupted key in the LeveldbValueStore.
diff --git a/components/value_store/value_store_frontend.cc b/components/value_store/value_store_frontend.cc index cf15833..8952b80b 100644 --- a/components/value_store/value_store_frontend.cc +++ b/components/value_store/value_store_frontend.cc
@@ -15,10 +15,6 @@ #include "components/value_store/leveldb_value_store.h" #include "components/value_store/value_store.h" #include "components/value_store/value_store_factory.h" -#include "content/public/browser/browser_task_traits.h" -#include "content/public/browser/browser_thread.h" - -using content::BrowserThread; namespace value_store { @@ -27,16 +23,18 @@ Backend(const scoped_refptr<ValueStoreFactory>& store_factory, const base::FilePath& directory, const std::string& uma_client_name, - const scoped_refptr<base::SequencedTaskRunner>& task_runner) + const scoped_refptr<base::SequencedTaskRunner>& origin_task_runner, + const scoped_refptr<base::SequencedTaskRunner>& file_task_runner) : store_factory_(store_factory), directory_(directory), uma_client_name_(uma_client_name), - task_runner_(task_runner) {} + origin_task_runner_(origin_task_runner), + file_task_runner_(file_task_runner) {} Backend(const Backend&) = delete; Backend& operator=(const Backend&) = delete; void Get(const std::string& key, ValueStoreFrontend::ReadCallback callback) { - DCHECK(task_runner_->RunsTasksInCurrentSequence()); + DCHECK(file_task_runner_->RunsTasksInCurrentSequence()); LazyInit(); ValueStore::ReadResult result = storage_->Get(key); @@ -50,7 +48,7 @@ << " failed: " << result.status().message; } - content::GetUIThreadTaskRunner({})->PostTask( + origin_task_runner_->PostTask( FROM_HERE, base::BindOnce(&ValueStoreFrontend::Backend::RunCallback, this, std::move(callback), @@ -60,7 +58,7 @@ } void Set(const std::string& key, std::unique_ptr<base::Value> value) { - DCHECK(task_runner_->RunsTasksInCurrentSequence()); + DCHECK(file_task_runner_->RunsTasksInCurrentSequence()); LazyInit(); // We don't need the old value, so skip generating changes. ValueStore::WriteResult result = storage_->Set( @@ -71,7 +69,7 @@ } void Remove(const std::string& key) { - DCHECK(task_runner_->RunsTasksInCurrentSequence()); + DCHECK(file_task_runner_->RunsTasksInCurrentSequence()); LazyInit(); storage_->Remove(key); } @@ -80,12 +78,12 @@ friend class base::RefCountedThreadSafe<Backend>; virtual ~Backend() { - if (storage_ && !task_runner_->RunsTasksInCurrentSequence()) - task_runner_->DeleteSoon(FROM_HERE, storage_.release()); + if (storage_ && !file_task_runner_->RunsTasksInCurrentSequence()) + file_task_runner_->DeleteSoon(FROM_HERE, storage_.release()); } void LazyInit() { - DCHECK(task_runner_->RunsTasksInCurrentSequence()); + DCHECK(file_task_runner_->RunsTasksInCurrentSequence()); if (storage_) return; TRACE_EVENT0("ValueStoreFrontend::Backend", "LazyInit"); @@ -94,7 +92,7 @@ void RunCallback(ValueStoreFrontend::ReadCallback callback, std::unique_ptr<base::Value> value) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); + DCHECK(origin_task_runner_->RunsTasksInCurrentSequence()); std::move(callback).Run(std::move(value)); } @@ -104,7 +102,8 @@ const base::FilePath directory_; const std::string uma_client_name_; - scoped_refptr<base::SequencedTaskRunner> task_runner_; + scoped_refptr<base::SequencedTaskRunner> origin_task_runner_; + scoped_refptr<base::SequencedTaskRunner> file_task_runner_; // The actual ValueStore that handles persisting the data to disk. Used // exclusively on the backend sequence. @@ -117,40 +116,43 @@ const scoped_refptr<ValueStoreFactory>& store_factory, const base::FilePath& directory, const std::string& uma_client_name, - const scoped_refptr<base::SequencedTaskRunner>& task_runner) + const scoped_refptr<base::SequencedTaskRunner>& origin_task_runner, + const scoped_refptr<base::SequencedTaskRunner>& file_task_runner) : backend_(base::MakeRefCounted<Backend>(store_factory, directory, uma_client_name, - task_runner)), - task_runner_(task_runner) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); + origin_task_runner, + file_task_runner)), + origin_task_runner_(origin_task_runner), + file_task_runner_(file_task_runner) { + DCHECK(origin_task_runner_->RunsTasksInCurrentSequence()); } ValueStoreFrontend::~ValueStoreFrontend() { - DCHECK_CURRENTLY_ON(BrowserThread::UI); + DCHECK(origin_task_runner_->RunsTasksInCurrentSequence()); } void ValueStoreFrontend::Get(const std::string& key, ReadCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); + DCHECK(origin_task_runner_->RunsTasksInCurrentSequence()); - task_runner_->PostTask( + file_task_runner_->PostTask( FROM_HERE, base::BindOnce(&ValueStoreFrontend::Backend::Get, backend_, key, std::move(callback))); } void ValueStoreFrontend::Set(const std::string& key, std::unique_ptr<base::Value> value) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); + DCHECK(origin_task_runner_->RunsTasksInCurrentSequence()); - task_runner_->PostTask( + file_task_runner_->PostTask( FROM_HERE, base::BindOnce(&ValueStoreFrontend::Backend::Set, backend_, key, std::move(value))); } void ValueStoreFrontend::Remove(const std::string& key) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); + DCHECK(origin_task_runner_->RunsTasksInCurrentSequence()); - task_runner_->PostTask( + file_task_runner_->PostTask( FROM_HERE, base::BindOnce(&ValueStoreFrontend::Backend::Remove, backend_, key)); }
diff --git a/components/value_store/value_store_frontend.h b/components/value_store/value_store_frontend.h index 2d876c74..1f10a70 100644 --- a/components/value_store/value_store_frontend.h +++ b/components/value_store/value_store_frontend.h
@@ -29,7 +29,8 @@ const scoped_refptr<ValueStoreFactory>& store_factory, const base::FilePath& directory, const std::string& uma_client_name, - const scoped_refptr<base::SequencedTaskRunner>& task_runner); + const scoped_refptr<base::SequencedTaskRunner>& origin_task_runner, + const scoped_refptr<base::SequencedTaskRunner>& file_task_runner); ~ValueStoreFrontend(); ValueStoreFrontend(const ValueStoreFrontend&) = delete; ValueStoreFrontend& operator=(const ValueStoreFrontend&) = delete; @@ -51,7 +52,10 @@ // on the FILE thread. scoped_refptr<Backend> backend_; - scoped_refptr<base::SequencedTaskRunner> task_runner_; + // The task runner on which to fire callbacks. + scoped_refptr<base::SequencedTaskRunner> origin_task_runner_; + + scoped_refptr<base::SequencedTaskRunner> file_task_runner_; }; } // namespace value_store
diff --git a/components/value_store/value_store_frontend_unittest.cc b/components/value_store/value_store_frontend_unittest.cc index e7936a55..2347817 100644 --- a/components/value_store/value_store_frontend_unittest.cc +++ b/components/value_store/value_store_frontend_unittest.cc
@@ -11,10 +11,10 @@ #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" #include "base/path_service.h" +#include "base/test/task_environment.h" +#include "base/threading/thread_task_runner_handle.h" #include "components/value_store/test_value_store_factory.h" #include "components/value_store/value_store_task_runner.h" -#include "content/public/test/browser_task_environment.h" -#include "content/public/test/test_utils.h" #include "testing/gtest/include/gtest/gtest.h" namespace value_store { @@ -39,7 +39,7 @@ } void TearDown() override { - content::RunAllTasksUntilIdle(); + RunUntilIdle(); storage_.reset(); } @@ -47,27 +47,30 @@ void ResetStorage() { storage_ = std::make_unique<ValueStoreFrontend>( factory_, base::FilePath(FILE_PATH_LITERAL("Test dir")), - "test_uma_name", value_store::GetValueStoreTaskRunner()); + "test_uma_name", base::ThreadTaskRunnerHandle::Get(), + value_store::GetValueStoreTaskRunner()); } bool Get(const std::string& key, std::unique_ptr<base::Value>* output) { storage_->Get(key, base::BindOnce(&ValueStoreFrontendTest::GetAndWait, base::Unretained(this), output)); - content::RunAllTasksUntilIdle(); + RunUntilIdle(); return !!output->get(); } protected: + void RunUntilIdle() { task_environment_.RunUntilIdle(); } + void GetAndWait(std::unique_ptr<base::Value>* output, std::unique_ptr<base::Value> result) { *output = std::move(result); } + base::test::TaskEnvironment task_environment_; scoped_refptr<TestValueStoreFactory> factory_; std::unique_ptr<ValueStoreFrontend> storage_; base::ScopedTempDir temp_dir_; base::FilePath db_path_; - content::BrowserTaskEnvironment task_environment_; }; TEST_F(ValueStoreFrontendTest, GetExistingData) {
diff --git a/components/value_store/value_store_test_suite.h b/components/value_store/value_store_test_suite.h index 1b43f60..450200d 100644 --- a/components/value_store/value_store_test_suite.h +++ b/components/value_store/value_store_test_suite.h
@@ -9,8 +9,8 @@ #include "base/files/scoped_temp_dir.h" #include "base/memory/ref_counted.h" +#include "base/test/task_environment.h" #include "components/value_store/value_store.h" -#include "content/public/test/browser_task_environment.h" #include "testing/gtest/include/gtest/gtest.h" namespace value_store { @@ -65,7 +65,7 @@ private: base::ScopedTempDir temp_dir_; - content::BrowserTaskEnvironment task_environment_; + base::test::TaskEnvironment task_environment_; }; } // namespace value_store
diff --git a/content/browser/prerender/prerender_host_registry.cc b/content/browser/prerender/prerender_host_registry.cc index a446fa2..5c78dff 100644 --- a/content/browser/prerender/prerender_host_registry.cc +++ b/content/browser/prerender/prerender_host_registry.cc
@@ -384,10 +384,13 @@ "render_frame_host", render_frame_host); // Disallow activation when the navigation is for a nested browsing context - // (e.g., iframes). This is because nested browsing contexts are supposed to - // be created in the parent's browsing context group and can script with the - // parent, but prerendered pages are created in new browsing context groups. - if (!navigation_request.IsInMainFrame()) + // (e.g., iframes, fenced frames). This is because nested browsing contexts + // such as iframes are supposed to be created in the parent's browsing context + // group and can script with the parent, but prerendered pages are created in + // new browsing context groups. And also, we disallow activation when the + // navigation is for a fenced frame to prevent the communication path from the + // embedding page to the fenced frame. + if (!navigation_request.IsInPrimaryMainFrame()) return RenderFrameHost::kNoFrameTreeNodeId; // Disallow activation when the navigation happens in the prerendering frame
diff --git a/content/browser/renderer_host/media/media_stream_manager.cc b/content/browser/renderer_host/media/media_stream_manager.cc index 239fc0c7..aa7e3798 100644 --- a/content/browser/renderer_host/media/media_stream_manager.cc +++ b/content/browser/renderer_host/media/media_stream_manager.cc
@@ -455,6 +455,15 @@ base::BindOnce(std::move(callback), absl::nullopt)); } +bool EnableChangeSourceForDevice(const MediaStreamDevice& device) { + DesktopMediaID media_id = DesktopMediaID::Parse(device.id); + return media_id.type == DesktopMediaID::TYPE_WEB_CONTENTS && + (device.type == MediaStreamType::GUM_DESKTOP_VIDEO_CAPTURE || + (device.type == MediaStreamType::DISPLAY_VIDEO_CAPTURE && + base::FeatureList::IsEnabled( + media::kShareThisTabInsteadButtonGetDisplayMedia))); +} + #if !defined(OS_ANDROID) base::TimeDelta GetConditionalFocusWindow() { const std::string custom_window = @@ -2756,13 +2765,9 @@ // Show "Change source" button on notification bar only for tab sharing by // desktopCapture API or getDisplayMedia. - bool enable_change_source = std::any_of( - request->devices.cbegin(), request->devices.cend(), [](auto device) { - DesktopMediaID media_id = DesktopMediaID::Parse(device.id); - return (device.type == MediaStreamType::GUM_DESKTOP_VIDEO_CAPTURE || - device.type == MediaStreamType::DISPLAY_VIDEO_CAPTURE) && - media_id.type == DesktopMediaID::TYPE_WEB_CONTENTS; - }); + bool enable_change_source = + std::any_of(request->devices.cbegin(), request->devices.cend(), + &EnableChangeSourceForDevice); MediaStreamUI::SourceCallback device_changed_cb; if (enable_change_source &&
diff --git a/content/browser/renderer_host/media/peer_connection_tracker_host.cc b/content/browser/renderer_host/media/peer_connection_tracker_host.cc index ec9b521..e5bd5d6 100644 --- a/content/browser/renderer_host/media/peer_connection_tracker_host.cc +++ b/content/browser/renderer_host/media/peer_connection_tracker_host.cc
@@ -151,7 +151,6 @@ } void PeerConnectionTrackerHost::GetUserMedia( - const std::string& origin, int request_id, bool audio, bool video, @@ -160,8 +159,8 @@ DCHECK_CURRENTLY_ON(BrowserThread::UI); for (auto& observer : GetObserverList()) { - observer.OnGetUserMedia(frame_id_, peer_pid_, origin, request_id, audio, - video, audio_constraints, video_constraints); + observer.OnGetUserMedia(frame_id_, peer_pid_, request_id, audio, video, + audio_constraints, video_constraints); } }
diff --git a/content/browser/renderer_host/media/peer_connection_tracker_host.h b/content/browser/renderer_host/media/peer_connection_tracker_host.h index 770a0854..1ec5b6e0 100644 --- a/content/browser/renderer_host/media/peer_connection_tracker_host.h +++ b/content/browser/renderer_host/media/peer_connection_tracker_host.h
@@ -85,8 +85,7 @@ const std::string& value) override; void OnPeerConnectionSessionIdSet(int lid, const std::string& session_id) override; - void GetUserMedia(const std::string& origin, - int request_id, + void GetUserMedia(int request_id, bool audio, bool video, const std::string& audio_constraints,
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc index f580ccc3..55ff748 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -1686,18 +1686,10 @@ if (!input_handler || fragments.empty()) return false; - if (!text_input_manager_ || !text_input_manager_->GetActiveWidget()) - return false; - unsigned max_fragment_end = 0; std::vector<::ui::ImeTextSpan> ime_text_spans; ime_text_spans.reserve(fragments.size()); - bool conflict_with_spellcheck = false; for (auto& fragment : fragments) { - if (text_input_manager_->OverlapsWithSpellCheckMarker(fragment.range)) { - conflict_with_spellcheck = true; - break; - } ui::ImeTextSpan ui_ime_text_span; ui_ime_text_span.type = ui::ImeTextSpan::Type::kGrammarSuggestion; ui_ime_text_span.start_offset = fragment.range.start(); @@ -1712,10 +1704,6 @@ max_fragment_end = fragment.range.end(); } } - - if (conflict_with_spellcheck) - return false; - input_handler->AddImeTextSpansToExistingText(0, max_fragment_end, ime_text_spans); @@ -2001,6 +1989,10 @@ void RenderWidgetHostViewAura::OnTouchEvent(ui::TouchEvent* event) { last_pointer_type_ = event->pointer_details().pointer_type; + ui::InputMethod* input_method = GetInputMethod(); + if (window_ && window_->HasFocus() && input_method) { + input_method->OnTouch(event->pointer_details().pointer_type); + } event_handler_->OnTouchEvent(event); }
diff --git a/content/browser/renderer_host/render_widget_targeter.cc b/content/browser/renderer_host/render_widget_targeter.cc index 1da17c8..7cff5b1 100644 --- a/content/browser/renderer_host/render_widget_targeter.cc +++ b/content/browser/renderer_host/render_widget_targeter.cc
@@ -303,7 +303,7 @@ // |target_client| may not be set yet for this |target| on Mac, need to // understand why this happens. https://crbug.com/859492. // We do not verify hit testing result under this circumstance. - if (!target_client.get() || !target_client.is_connected()) { + if (!target_client.is_bound() || !target_client.is_connected()) { FoundTarget(target, target_location, false, &request); return; }
diff --git a/content/browser/renderer_host/text_input_manager.cc b/content/browser/renderer_host/text_input_manager.cc index f07fce52..aad1e66 100644 --- a/content/browser/renderer_host/text_input_manager.cc +++ b/content/browser/renderer_host/text_input_manager.cc
@@ -110,25 +110,6 @@ return absl::nullopt; } -bool TextInputManager::OverlapsWithSpellCheckMarker( - const gfx::Range range) const { - if (!active_view_) - return false; - - for (const auto& ime_text_span_info : - text_input_state_map_.at(active_view_)->ime_text_spans_info) { - if (ime_text_span_info->span.type == - ui::ImeTextSpan::Type::kMisspellingSuggestion) { - auto span_range = gfx::Range(ime_text_span_info->span.start_offset, - ime_text_span_info->span.end_offset); - if (span_range.Intersects(range)) { - return true; - } - } - } - return false; -} - const TextInputManager::SelectionRegion* TextInputManager::GetSelectionRegion( RenderWidgetHostViewBase* view) const { DCHECK(!view || IsRegistered(view));
diff --git a/content/browser/renderer_host/text_input_manager.h b/content/browser/renderer_host/text_input_manager.h index 4c87bc6..8382547 100644 --- a/content/browser/renderer_host/text_input_manager.h +++ b/content/browser/renderer_host/text_input_manager.h
@@ -169,10 +169,6 @@ absl::optional<ui::GrammarFragment> GetGrammarFragment( gfx::Range range) const; - // Returns if the given |range| is overlapping with any existing spellcheck - // markers. - bool OverlapsWithSpellCheckMarker(const gfx::Range range) const; - // Returns the selection bounds information for |view|. If |view| == nullptr, // it will return the corresponding information for |active_view_| or nullptr // if there are no active views.
diff --git a/content/browser/webrtc/webrtc_internals.cc b/content/browser/webrtc/webrtc_internals.cc index 9a76d11..c9da582 100644 --- a/content/browser/webrtc/webrtc_internals.cc +++ b/content/browser/webrtc/webrtc_internals.cc
@@ -284,7 +284,6 @@ void WebRTCInternals::OnGetUserMedia(GlobalRenderFrameHostId frame_id, base::ProcessId pid, - const std::string& origin, int request_id, bool audio, bool video, @@ -298,6 +297,10 @@ return; } + RenderFrameHost* host = RenderFrameHost::FromID(frame_id); + // Frame may be gone (and does not exist in tests). + std::string origin = host ? host->GetLastCommittedOrigin().Serialize() : ""; + base::Value dict(base::Value::Type::DICTIONARY); dict.SetIntKey("rid", frame_id.child_id); dict.SetIntKey("pid", static_cast<int>(pid));
diff --git a/content/browser/webrtc/webrtc_internals.h b/content/browser/webrtc/webrtc_internals.h index 88108f8..8f484fb 100644 --- a/content/browser/webrtc/webrtc_internals.h +++ b/content/browser/webrtc/webrtc_internals.h
@@ -78,7 +78,6 @@ base::Value value) override; void OnGetUserMedia(GlobalRenderFrameHostId frame_id, base::ProcessId pid, - const std::string& origin, int request_id, bool audio, bool video,
diff --git a/content/browser/webrtc/webrtc_internals_unittest.cc b/content/browser/webrtc/webrtc_internals_unittest.cc index 0fa8f5b..ba9620b6 100644 --- a/content/browser/webrtc/webrtc_internals_unittest.cc +++ b/content/browser/webrtc/webrtc_internals_unittest.cc
@@ -162,7 +162,6 @@ void VerifyGetUserMediaData(base::Value* actual_data, GlobalRenderFrameHostId frame_id, int pid, - const std::string& origin, int request_id, const std::string& audio, const std::string& video) { @@ -172,7 +171,8 @@ VerifyInt(dict, "rid", frame_id.child_id); VerifyInt(dict, "pid", pid); - VerifyString(dict, "origin", origin); + // origin is the empty string in tests. + VerifyString(dict, "origin", ""); VerifyInt(dict, "request_id", request_id); VerifyString(dict, "audio", audio); VerifyString(dict, "video", video); @@ -400,14 +400,14 @@ // Add one observer before "getUserMedia". webrtc_internals.AddObserver(&observer); - webrtc_internals.OnGetUserMedia(kFrameId, kPid, kUrl, kRequestId, true, true, + webrtc_internals.OnGetUserMedia(kFrameId, kPid, kRequestId, true, true, kAudioConstraint, kVideoConstraint); loop.Run(); ASSERT_EQ("add-get-user-media", observer.event_name()); - VerifyGetUserMediaData(observer.event_data(), kFrameId, kPid, kUrl, - kRequestId, kAudioConstraint, kVideoConstraint); + VerifyGetUserMediaData(observer.event_data(), kFrameId, kPid, kRequestId, + kAudioConstraint, kVideoConstraint); webrtc_internals.RemoveObserver(&observer); @@ -463,7 +463,7 @@ TEST_F(WebRtcInternalsTest, SendAllUpdateWithGetUserMedia) { WebRTCInternalsForTest webrtc_internals; - webrtc_internals.OnGetUserMedia(kFrameId, kPid, kUrl, kRequestId, true, true, + webrtc_internals.OnGetUserMedia(kFrameId, kPid, kRequestId, true, true, kAudioConstraint, kVideoConstraint); MockWebRtcInternalsProxy observer; @@ -472,8 +472,8 @@ webrtc_internals.UpdateObserver(&observer); EXPECT_EQ("add-get-user-media", observer.event_name()); - VerifyGetUserMediaData(observer.event_data(), kFrameId, kPid, kUrl, - kRequestId, kAudioConstraint, kVideoConstraint); + VerifyGetUserMediaData(observer.event_data(), kFrameId, kPid, kRequestId, + kAudioConstraint, kVideoConstraint); webrtc_internals.RemoveObserver(&observer);
diff --git a/content/public/browser/document_user_data.h b/content/public/browser/document_user_data.h index be171a2..80b56cd 100644 --- a/content/public/browser/document_user_data.h +++ b/content/public/browser/document_user_data.h
@@ -149,7 +149,7 @@ // This macro declares a static variable inside the class that inherits from // DocumentUserData. The address of this static variable is used as // the key to store/retrieve an instance of the class on/from a WebState. -#define DOCUMENT_USER_DATA_KEY_DECL() static constexpr int kUserDataKey = 0 +#define DOCUMENT_USER_DATA_KEY_DECL() static const int kUserDataKey = 0 // This macro instantiates the static variable declared by the previous macro. // It must live in a .cc file to ensure that there is only one instantiation
diff --git a/content/public/browser/navigation_handle_user_data.h b/content/public/browser/navigation_handle_user_data.h index e6e826b4..df1411425 100644 --- a/content/public/browser/navigation_handle_user_data.h +++ b/content/public/browser/navigation_handle_user_data.h
@@ -80,8 +80,7 @@ // This macro declares a static variable inside the class that inherits from // NavigationHandleUserData. The address of this static variable is used as // the key to store/retrieve an instance of the class. -#define NAVIGATION_HANDLE_USER_DATA_KEY_DECL() \ - static constexpr int kUserDataKey = 0 +#define NAVIGATION_HANDLE_USER_DATA_KEY_DECL() static const int kUserDataKey = 0 // This macro instantiates the static variable declared by the previous macro. // It must live in a .cc file to ensure that there is only one instantiation
diff --git a/content/public/browser/page_user_data.h b/content/public/browser/page_user_data.h index 4405651..54204f1e 100644 --- a/content/public/browser/page_user_data.h +++ b/content/public/browser/page_user_data.h
@@ -88,7 +88,7 @@ // This macro declares a static variable inside the class that inherits from // PageUserData. The address of this static variable is used as // the key to store/retrieve an instance of the class. -#define PAGE_USER_DATA_KEY_DECL() static constexpr int kUserDataKey = 0 +#define PAGE_USER_DATA_KEY_DECL() static const int kUserDataKey = 0 // This macro instantiates the static variable declared by the previous macro. // It must live in a .cc file to ensure that there is only one instantiation
diff --git a/content/public/browser/peer_connection_tracker_host_observer.h b/content/public/browser/peer_connection_tracker_host_observer.h index 4b77cae..0d53850 100644 --- a/content/public/browser/peer_connection_tracker_host_observer.h +++ b/content/public/browser/peer_connection_tracker_host_observer.h
@@ -97,7 +97,6 @@ // This method is called when getUserMedia is called. // - |render_frame_host_id| identifies the RenderFrameHost. // - |pid| is the OS process ID. - // - |origin| is the security origin of the getUserMedia call. // - |request_id| is an id assigned to the getUserMedia call and its // callback/error // - |audio| is true if the audio stream is requested. @@ -106,7 +105,6 @@ // - |video_constraints| is the constraints for the video. virtual void OnGetUserMedia(GlobalRenderFrameHostId render_frame_host_id, base::ProcessId pid, - const std::string& origin, int request_id, bool audio, bool video,
diff --git a/docs/testing/web_test_expectations.md b/docs/testing/web_test_expectations.md index 901ad807..480cc44 100644 --- a/docs/testing/web_test_expectations.md +++ b/docs/testing/web_test_expectations.md
@@ -109,7 +109,7 @@ Run the tool with the option - `blink_tool.py rebaseline-cl --use-blink-try-bots-only` * If you would like to rebaseline for flag specific builders, use the flag-specific option. - Rebaseline for highdpi, disable-layout-ng and composite-after-paint are + Rebaseline for highdpi and disable-layout-ng are supported for now. For example, to rebaseline for highdpi, use `blink_tool.py rebaseline-cl --flag-specific=highdpi`. This will trigger only the highdpi try builder. Since this is an experimental builder at this time,
diff --git a/extensions/browser/extension_event_histogram_value.h b/extensions/browser/extension_event_histogram_value.h index 0fa26b9..9dfe72b 100644 --- a/extensions/browser/extension_event_histogram_value.h +++ b/extensions/browser/extension_event_histogram_value.h
@@ -504,6 +504,7 @@ SPEECH_RECOGNITION_PRIVATE_ON_RESULT = 482, SPEECH_RECOGNITION_PRIVATE_ON_ERROR = 483, FILE_MANAGER_PRIVATE_ON_IO_TASK_PROGRESS_STATUS = 484, + INPUT_METHOD_PRIVATE_ON_TOUCH = 485, // Last entry: Add new entries above, then run: // python tools/metrics/histograms/update_extension_histograms.py ENUM_BOUNDARY
diff --git a/extensions/browser/state_store.cc b/extensions/browser/state_store.cc index ea0a87dd..3ea7405 100644 --- a/extensions/browser/state_store.cc +++ b/extensions/browser/state_store.cc
@@ -76,17 +76,20 @@ case BackendType::RULES: store_ = std::make_unique<value_store::ValueStoreFrontend>( store_factory, base::FilePath(kRulesStoreName), - kRulesDatabaseUMAClientName, GetExtensionFileTaskRunner()); + kRulesDatabaseUMAClientName, content::GetUIThreadTaskRunner({}), + GetExtensionFileTaskRunner()); break; case BackendType::STATE: store_ = std::make_unique<value_store::ValueStoreFrontend>( store_factory, base::FilePath(kStateStoreName), - kStateDatabaseUMAClientName, GetExtensionFileTaskRunner()); + kStateDatabaseUMAClientName, content::GetUIThreadTaskRunner({}), + GetExtensionFileTaskRunner()); break; case BackendType::SCRIPTS: store_ = std::make_unique<value_store::ValueStoreFrontend>( store_factory, base::FilePath(kScriptsStoreName), - kScriptsDatabaseUMAClientName, GetExtensionFileTaskRunner()); + kScriptsDatabaseUMAClientName, content::GetUIThreadTaskRunner({}), + GetExtensionFileTaskRunner()); break; }
diff --git a/extensions/browser/url_request_util.cc b/extensions/browser/url_request_util.cc index eac50e73..8ccb1c2 100644 --- a/extensions/browser/url_request_util.cc +++ b/extensions/browser/url_request_util.cc
@@ -125,11 +125,6 @@ ui::PageTransition page_transition, bool* allowed) { if (is_guest) { - if (AllowSpecialCaseExtensionURLInGuest(extension, resource_path)) { - *allowed = true; - return true; - } - // An extension's resources should only be accessible to WebViews owned by // that extension. if (owner_extension != extension) { @@ -145,32 +140,5 @@ return false; } -bool AllowSpecialCaseExtensionURLInGuest( - const Extension* extension, - absl::optional<base::StringPiece> resource_path) { - // Allow mobile setup web UI (chrome://mobilesetup) to embed resources from - // the component mobile activation extension in a webview. This is needed - // because the activation web UI relies on the activation extension to - // provide parts of its UI, and to redirect POST requests to the network - // payment URL during mobile device initialization. - // - // TODO(http://crbug.com/778021): Fix mobile activation UI not to require - // this workaround. - bool is_mobile_activation_extension = - extension && extension->id() == "iadeocfgjdjdmpenejdbfeaocpbikmab"; - if (is_mobile_activation_extension) { - if (!resource_path.has_value()) - return true; - if (resource_path.value() == "/activation.html" || - resource_path.value() == "/portal_offline.html" || - resource_path.value() == "/invalid_device_info.html") { - return true; - } - } - - // Otherwise this isn't a special case, and the normal logic should apply. - return false; -} - } // namespace url_request_util } // namespace extensions
diff --git a/extensions/browser/url_request_util.h b/extensions/browser/url_request_util.h index b1eaf24..9f78f13 100644 --- a/extensions/browser/url_request_util.h +++ b/extensions/browser/url_request_util.h
@@ -52,18 +52,6 @@ ui::PageTransition page_transition, bool* allowed); -// Checks whether the given |extension| and |resource_path| are part of a -// special case where an extension URL is permitted to load in any guest -// process, rather than only in guests of a given platform app. If -// |resource_path| is absl::nullopt, then the check is based solely on which -// extension is passed in, allowing this to be used for origin checks as well as -// URL checks. -// TODO(creis): Remove this method when the special cases (listed by bug number -// in the definition of this method) are gone. -bool AllowSpecialCaseExtensionURLInGuest( - const Extension* extension, - absl::optional<base::StringPiece> resource_path); - } // namespace url_request_util } // namespace extensions
diff --git a/extensions/shell/browser/shell_browser_main_parts.cc b/extensions/shell/browser/shell_browser_main_parts.cc index 8353e0d1..1b429b1 100644 --- a/extensions/shell/browser/shell_browser_main_parts.cc +++ b/extensions/shell/browser/shell_browser_main_parts.cc
@@ -129,7 +129,7 @@ chromeos::PowerManagerClient::InitializeFake(); } - chromeos::disks::DiskMountManager::Initialize(); + ash::disks::DiskMountManager::Initialize(); chromeos::NetworkHandler::Initialize(); network_controller_ = std::make_unique<ShellNetworkController>( @@ -298,7 +298,7 @@ #if BUILDFLAG(IS_CHROMEOS_ASH) network_controller_.reset(); chromeos::NetworkHandler::Shutdown(); - chromeos::disks::DiskMountManager::Shutdown(); + ash::disks::DiskMountManager::Shutdown(); device::BluetoothAdapterFactory::Shutdown(); bluez::BluezDBusManager::Shutdown(); chromeos::PowerManagerClient::Shutdown();
diff --git a/infra/config/generated/builders/try/linux_layout_tests_composite_after_paint/properties.textpb b/infra/config/generated/builders/try/linux_layout_tests_composite_after_paint/properties.textpb deleted file mode 100644 index 19e0479..0000000 --- a/infra/config/generated/builders/try/linux_layout_tests_composite_after_paint/properties.textpb +++ /dev/null
@@ -1,17 +0,0 @@ -{ - "$build/goma": { - "enable_ats": true, - "rpc_extra_params": "?prod", - "server_host": "goma.chromium.org", - "use_luci_auth": true - }, - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "tryserver.chromium.linux", - "recipe": "chromium_trybot" -} \ No newline at end of file
diff --git a/infra/config/generated/cq-builders.md b/infra/config/generated/cq-builders.md index b07628b..ddfa3f17 100644 --- a/infra/config/generated/cq-builders.md +++ b/infra/config/generated/cq-builders.md
@@ -306,14 +306,6 @@ Path regular expressions: * [`//build/.*check_gn_headers.*`](https://cs.chromium.org/search?q=+file:build/.*check_gn_headers.*) -* [linux_layout_tests_composite_after_paint](https://ci.chromium.org/p/chromium/builders/try/linux_layout_tests_composite_after_paint) ([definition](https://cs.chromium.org/search?q=+file:/try.star$+""linux_layout_tests_composite_after_paint"")) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+""linux_layout_tests_composite_after_paint"")) - - Path regular expressions: - * [`//third_party/blink/renderer/core/paint/.+`](https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/paint/) - * [`//third_party/blink/renderer/core/svg/.+`](https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/svg/) - * [`//third_party/blink/renderer/platform/graphics/.+`](https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/graphics/) - * [`//third_party/blink/web_tests/.+`](https://cs.chromium.org/chromium/src/third_party/blink/web_tests/) - * [linux_layout_tests_layout_ng_disabled](https://ci.chromium.org/p/chromium/builders/try/linux_layout_tests_layout_ng_disabled) ([definition](https://cs.chromium.org/search?q=+file:/try.star$+""linux_layout_tests_layout_ng_disabled"")) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+""linux_layout_tests_layout_ng_disabled"")) Path regular expressions:
diff --git a/infra/config/generated/cq-usage/full.cfg b/infra/config/generated/cq-usage/full.cfg index 073bba3..2dd3212a 100644 --- a/infra/config/generated/cq-usage/full.cfg +++ b/infra/config/generated/cq-usage/full.cfg
@@ -408,15 +408,6 @@ location_regexp_exclude: ".+/[+]/infra/config/.+" } builders { - name: "chromium/try/linux_layout_tests_composite_after_paint" - location_regexp: ".+/[+]/third_party/blink/renderer/core/paint/.+" - location_regexp: ".+/[+]/third_party/blink/renderer/core/svg/.+" - location_regexp: ".+/[+]/third_party/blink/renderer/platform/graphics/.+" - location_regexp: ".+/[+]/third_party/blink/web_tests/.+" - location_regexp_exclude: ".+/[+]/docs/.+" - location_regexp_exclude: ".+/[+]/infra/config/.+" - } - builders { name: "chromium/try/linux_layout_tests_layout_ng_disabled" location_regexp: ".+/[+]/third_party/blink/renderer/core/editing/.+" location_regexp: ".+/[+]/third_party/blink/renderer/core/layout/.+"
diff --git a/infra/config/generated/luci/commit-queue.cfg b/infra/config/generated/luci/commit-queue.cfg index ce3fe57..e5e6de1 100644 --- a/infra/config/generated/luci/commit-queue.cfg +++ b/infra/config/generated/luci/commit-queue.cfg
@@ -1543,15 +1543,6 @@ includable_only: true } builders { - name: "chromium/try/linux_layout_tests_composite_after_paint" - location_regexp: ".+/[+]/third_party/blink/renderer/core/paint/.+" - location_regexp: ".+/[+]/third_party/blink/renderer/core/svg/.+" - location_regexp: ".+/[+]/third_party/blink/renderer/platform/graphics/.+" - location_regexp: ".+/[+]/third_party/blink/web_tests/.+" - location_regexp_exclude: ".+/[+]/docs/.+" - location_regexp_exclude: ".+/[+]/infra/config/.+" - } - builders { name: "chromium/try/linux_layout_tests_layout_ng_disabled" location_regexp: ".+/[+]/third_party/blink/renderer/core/editing/.+" location_regexp: ".+/[+]/third_party/blink/renderer/core/layout/.+"
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg index bdc8240..24aa7b8 100644 --- a/infra/config/generated/luci/cr-buildbucket.cfg +++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -74409,97 +74409,6 @@ } } builders { - name: "linux_layout_tests_composite_after_paint" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cores:8" - dimensions: "cpu:x86-64" - dimensions: "os:Ubuntu-18.04" - dimensions: "pool:luci.chromium.try" - dimensions: "ssd:0" - exe { - cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" - cipd_version: "refs/heads/main" - cmd: "luciexe" - } - properties: - '{' - ' "$build/goma": {' - ' "enable_ats": true,' - ' "rpc_extra_params": "?prod",' - ' "server_host": "goma.chromium.org",' - ' "use_luci_auth": true' - ' },' - ' "$recipe_engine/resultdb/test_presentation": {' - ' "column_keys": [],' - ' "grouping_keys": [' - ' "status",' - ' "v.test_suite"' - ' ]' - ' },' - ' "builder_group": "tryserver.chromium.linux",' - ' "recipe": "chromium_trybot"' - '}' - execution_timeout_secs: 14400 - expiration_secs: 7200 - grace_period { - seconds: 120 - } - caches { - name: "win_toolchain" - path: "win_toolchain" - } - build_numbers: YES - service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com" - task_template_canary_percentage { - value: 5 - } - experiments { - key: "chromium.chromium_tests.use_rdb_results" - value: 100 - } - experiments { - key: "luci.recipes.use_python3" - value: 5 - } - experiments { - key: "luci.use_realms" - value: 100 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "try_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "blink_web_tests_try_test_results" - test_results { - predicate { - test_id_regexp: "ninja://[^/]*blink_web_tests/.+" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - } - builders { name: "linux_layout_tests_layout_ng_disabled" swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1"
diff --git a/infra/config/generated/luci/luci-milo.cfg b/infra/config/generated/luci/luci-milo.cfg index 0d53a12c..a393398 100644 --- a/infra/config/generated/luci/luci-milo.cfg +++ b/infra/config/generated/luci/luci-milo.cfg
@@ -2561,9 +2561,6 @@ name: "buildbucket/luci.chromium.try/linux_chromium_tsan_rel_ng_rts" } builders { - name: "buildbucket/luci.chromium.try/linux_layout_tests_composite_after_paint" - } - builders { name: "buildbucket/luci.chromium.try/linux_layout_tests_layout_ng_disabled" } builders { @@ -14977,9 +14974,6 @@ name: "buildbucket/luci.chromium.try/linux_chromium_ubsan_rel_ng" } builders { - name: "buildbucket/luci.chromium.try/linux_layout_tests_composite_after_paint" - } - builders { name: "buildbucket/luci.chromium.try/linux_layout_tests_layout_ng_disabled" } builders { @@ -16005,9 +15999,6 @@ name: "buildbucket/luci.chromium.try/linux_chromium_ubsan_rel_ng" } builders { - name: "buildbucket/luci.chromium.try/linux_layout_tests_composite_after_paint" - } - builders { name: "buildbucket/luci.chromium.try/linux_layout_tests_layout_ng_disabled" } builders {
diff --git a/infra/config/subprojects/chromium/try.star b/infra/config/subprojects/chromium/try.star index 997ab93..a24e64c9 100644 --- a/infra/config/subprojects/chromium/try.star +++ b/infra/config/subprojects/chromium/try.star
@@ -1552,20 +1552,6 @@ ) try_.chromium_linux_builder( - name = "linux_layout_tests_composite_after_paint", - branch_selector = branches.STANDARD_MILESTONE, - main_list_view = "try", - tryjob = try_.job( - location_regexp = [ - ".+/[+]/third_party/blink/renderer/core/paint/.+", - ".+/[+]/third_party/blink/renderer/core/svg/.+", - ".+/[+]/third_party/blink/renderer/platform/graphics/.+", - ".+/[+]/third_party/blink/web_tests/.+", - ], - ), -) - -try_.chromium_linux_builder( name = "linux_layout_tests_layout_ng_disabled", branch_selector = branches.STANDARD_MILESTONE, main_list_view = "try",
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb index 2a7cff7..ee3ead4 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_af.xtb
@@ -14,6 +14,7 @@ <translation id="1531155317299575425">Wys porboodskappe om by Chromium aan te meld.</translation> <translation id="1584569488888892906">Chromium is eenvoudig, veilig en vinniger as ooit vantevore</translation> <translation id="1617663976202781617">Data van Chromium-sinkronisering af</translation> +<translation id="1722370509450468186">Jou wagwoord sal in jou rekening (<ph name="EMAIL" />) gestoor word.</translation> <translation id="1736662517232558588">Chromium-data is uitgevee</translation> <translation id="1838412507805038478">Chromium het geverifieer dat <ph name="ISSUER" /> hierdie webwerf se sertifikaat uitgereik het.</translation> <translation id="1843424232666537147">Chromium het kenmerke wat jou help om jou internetdata te bestuur en hoe vinnig jy webblaaie kan laai.
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb index eda0213..42e8b997 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb
@@ -14,6 +14,7 @@ <translation id="1531155317299575425">عرض رسائل مطالبة تسجيل الدخول إلى Chromium</translation> <translation id="1584569488888892906">متصفِّح Chromium بسيط وآمن وأكثر سرعة من ذي قبل.</translation> <translation id="1617663976202781617">البيانات من مزامنة Chromium</translation> +<translation id="1722370509450468186">سيتم حفظ كلمة المرور في حسابك (<ph name="EMAIL" />).</translation> <translation id="1736662517232558588">تم محو بيانات Chromium</translation> <translation id="1838412507805038478">لقد تحقق Chromium من أن <ph name="ISSUER" /> أصدر شهادة الموقع الإلكتروني هذه.</translation> <translation id="1843424232666537147">يتمتع Chromium بميزات تساعدك على إدارة بياناتك على الإنترنت ومدى السرعة التي بمقدورك تحميل صفحات الويب من خلالها.
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_cs.xtb index b7a759f..0289b5c 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_cs.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_cs.xtb
@@ -14,6 +14,7 @@ <translation id="1531155317299575425">Zobrazuje výzvy k přihlášení do Chromia.</translation> <translation id="1584569488888892906">Prohlížeč Chromium je jednoduchý, bezpečný a rychlejší než kdy dřív</translation> <translation id="1617663976202781617">Data ze synchronizace prohlížeče Chromium</translation> +<translation id="1722370509450468186">Heslo bude uloženo do vašeho účtu (<ph name="EMAIL" />).</translation> <translation id="1736662517232558588">Data prohlížeče Chromium byla vymazána</translation> <translation id="1838412507805038478">Prohlížeč Chromium ověřil, že certifikát tohoto webu byl vydán vydavatelem <ph name="ISSUER" />.</translation> <translation id="1843424232666537147">Chromium obsahuje funkce, které pomáhají spravovat přenosy dat z internetu a umožňují zrychlit načítání webových stránek. <ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb index 9659b8c..377ae4d 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb
@@ -14,6 +14,7 @@ <translation id="1531155317299575425">Viser anmodninger om at logge ind i Chromium.</translation> <translation id="1584569488888892906">Chromium er brugervenligt, sikkert og hurtigere end nogensinde før</translation> <translation id="1617663976202781617">Data fra Chromium Sync</translation> +<translation id="1722370509450468186">Din adgangskode gemmes på din konto (<ph name="EMAIL" />).</translation> <translation id="1736662517232558588">Chromium-data blev ryddet</translation> <translation id="1838412507805038478">Chromium har bekræftet, at <ph name="ISSUER" /> har udstedt certifikatet for dette website.</translation> <translation id="1843424232666537147">Chromium har funktioner, der hjælper dig med at administrere internetdata og hastigheden, som websider indlæses med.
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_el.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_el.xtb index 76c1619..9234b486 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_el.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_el.xtb
@@ -14,6 +14,7 @@ <translation id="1531155317299575425">Εμφάνιση προτροπών σύνδεσης στο Chromium.</translation> <translation id="1584569488888892906">Το Chromium είναι απλό, ασφαλές και πιο γρήγορο από ποτέ</translation> <translation id="1617663976202781617">Δεδομένα από τον συγχρονισμό του Chromium</translation> +<translation id="1722370509450468186">Ο κωδικός πρόσβασής σας θα αποθηκευτεί στον Λογαριασμό σας (<ph name="EMAIL" />).</translation> <translation id="1736662517232558588">Διαγρ. δεδ. Chromium</translation> <translation id="1838412507805038478">Το Chromium επαλήθευσε ότι το πιστοποιητικό αυτού του ιστότοπου εκδόθηκε από τον/τη(ν) <ph name="ISSUER" />.</translation> <translation id="1843424232666537147">Το Chromium διαθέτει λειτουργίες που σας διευκολύνουν να διαχειριστείτε τα δεδομένα σας στο διαδίκτυο και την ταχύτητα φόρτωσης των ιστοσελίδων.
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb index e0914ae3..0fa880f 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb
@@ -14,6 +14,7 @@ <translation id="1531155317299575425">Affiche les invites de connexion dans Chromium.</translation> <translation id="1584569488888892906">Chromium est simple, sécuritaire et plus rapide que jamais</translation> <translation id="1617663976202781617">Données de la synchronisation de Chromium</translation> +<translation id="1722370509450468186">Votre mot de passe sera enregistré dans votre compte (<ph name="EMAIL" />).</translation> <translation id="1736662517232558588">Données Chromium effacées</translation> <translation id="1838412507805038478">Chromium a vérifié que <ph name="ISSUER" /> a émis le certificat de ce site Web.</translation> <translation id="1843424232666537147">Chromium comprend des fonctionnalités qui vous aident à gérer vos données Internet et la vitesse de chargement des pages Web.
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_hy.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_hy.xtb index fb355fa..5039c64 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_hy.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_hy.xtb
@@ -14,6 +14,7 @@ <translation id="1531155317299575425">Ցույց է տալիս հաղորդագրություն Chromium-ում մուտք գործելու համար։</translation> <translation id="1584569488888892906">Chromium-ը դարձել է ավելի հարմար, անվտանգ և արագ</translation> <translation id="1617663976202781617">Տվյալներ Chromium Sync-ից</translation> +<translation id="1722370509450468186">Գաղտնաբառը կպահվի ձեր հաշվում (<ph name="EMAIL" />)։</translation> <translation id="1736662517232558588">Chromium-ի տվյալները մաքրվեցին</translation> <translation id="1838412507805038478">Chromium-ը հաստատել է, որ <ph name="ISSUER" />-ն է թողարկել վեբկայքի հավաստագիրը:</translation> <translation id="1843424232666537147">Chromium-ի գործառույթները կօգնեն ձեզ կառավարել թրաֆիկի սպառման և էջերի բեռնման արագությունները:
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb index e89bc21..95d6f0a 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb
@@ -14,6 +14,7 @@ <translation id="1531155317299575425">Mostra solicitações para fazer login no Chromium.</translation> <translation id="1584569488888892906">O Chromium é simples, seguro e está mais rápido do que nunca</translation> <translation id="1617663976202781617">Dados da sincronização do Chromium</translation> +<translation id="1722370509450468186">A senha será salva na sua conta (<ph name="EMAIL" />).</translation> <translation id="1736662517232558588">Dados do Chromium apagados</translation> <translation id="1838412507805038478">O Chromium verificou que <ph name="ISSUER" /> emitiu o certificado deste website.</translation> <translation id="1843424232666537147">O Google Chrome possui recursos que ajudam a gerenciar seus dados de Internet e a velocidade de carregamento de páginas da Web.
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_sq.xtb index c392ddbf..0229e3b 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_sq.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_sq.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="sq"> <translation id="102360288709523007">Ndihmo në përmirësimin e Chromium duke dërguar te Google statistika përdorimi dhe raporte të ndërprerjeve aksidentale.</translation> +<translation id="1047130070405668746">Zgjidh Chromium</translation> <translation id="1185134272377778587">Rreth Chromium</translation> <translation id="1257458525759135959">Për të ruajtur imazhet, trokit te "Cilësimet" për të lejuar që Chromium të shtojë te fotografitë e tua</translation> <translation id="1289216811211435351">Kalo te Chromium</translation> @@ -17,6 +18,7 @@ <translation id="1838412507805038478">Chromium verifikoi që <ph name="ISSUER" /> ka lëshuar certifikatën e këtij sajti të uebit.</translation> <translation id="1843424232666537147">Chromium ka funksione që të ndihmojnë të menaxhosh të dhënat e internetit dhe sa shpejt mund të ngarkosh faqet e uebit. <ph name="BEGIN_LINK" />Mëso më shumë<ph name="END_LINK" /></translation> +<translation id="1867772173333403444">4. Zgjidh Chromium</translation> <translation id="2006345422933397527">Chromium nuk mund të kontrollonte për përditësime. Provo të kontrollosh lidhjen e internetit.</translation> <translation id="2054703085270098503">Qëndro i sigurt me Chromium</translation> <translation id="2168108852149185974">Disa përbërës shtesë shkaktojnë ndërprerje aksidentale të Chromium. Çinstalo:</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb index c5ebdb2..1fcec458 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb
@@ -14,6 +14,7 @@ <translation id="1531155317299575425">Chromiumமில் உள்நுழைவதற்கான அறிவிப்புகளைக் காட்டும்.</translation> <translation id="1584569488888892906">Chromium எளிமையானது பாதுகாப்பானது & மிகவும் விரைவானது</translation> <translation id="1617663976202781617">Chromium ஒத்திசைவிலிருந்து தரவு</translation> +<translation id="1722370509450468186">கடவுச்சொல் உங்கள் கணக்கில் (<ph name="EMAIL" />) சேமிக்கப்படும்.</translation> <translation id="1736662517232558588">Chromium தரவு அழிக்கப்பட்டது</translation> <translation id="1838412507805038478">இந்த இணையதளச் சான்றிதழை <ph name="ISSUER" /> தான் வழங்கியுள்ளார் என்பதை Chromium சரிபார்த்தது.</translation> <translation id="1843424232666537147">இணையத் தரவையும் இணையப் பக்கங்கள் ஏற்றப்படும் வேகத்தையும் நிர்வகிக்க உதவும் அம்சங்கள் Chromium இல் உள்ளன.
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_te.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_te.xtb index 1d874dd..528268f 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_te.xtb
@@ -14,6 +14,7 @@ <translation id="1531155317299575425">Chromiumకు సైన్ ఇన్ చేయడానికి ప్రాంప్ట్లను చూపిస్తుంది.</translation> <translation id="1584569488888892906">Chromium ఇప్పుడు మరింత సరళంగా, సురక్షితంగా, అలాగే మునుపటి కంటే వేగంగా మారుతుంది</translation> <translation id="1617663976202781617">Chromium సింక్ నుండి పొందే డేటా</translation> +<translation id="1722370509450468186">మీ పాస్వర్డ్ మీ ఖాతా (<ph name="EMAIL" />)లో సేవ్ చేయబడుతుంది.</translation> <translation id="1736662517232558588">Chromium డేటా తీసేసింది</translation> <translation id="1838412507805038478">Chromium ఈ వెబ్సైట్ సర్టిఫికెట్ను <ph name="ISSUER" /> జారీ చేసినట్లు ధృవీకరించింది.</translation> <translation id="1843424232666537147">మీ ఇంటర్నెట్ డేటాను నిర్వహించడంలో మరియు మీరు వెబ్ పేజీలను త్వరగా లోడ్ చేయగలగడంలో మీకు సహాయపడే ఫీచర్లు Chromiumలో ఉన్నాయి.
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_tr.xtb index c72e8e3..50c94727 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_tr.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_tr.xtb
@@ -14,6 +14,7 @@ <translation id="1531155317299575425">Chromium'da oturum açmak için istekleri gösterir.</translation> <translation id="1584569488888892906">Chromium basit, güvenli ve her zamankinden daha hızlı</translation> <translation id="1617663976202781617">Chromium senkronizasyonundan veriler</translation> +<translation id="1722370509450468186">Şifreniz, hesabınıza (<ph name="EMAIL" />) kaydedilir.</translation> <translation id="1736662517232558588">Chromium verileri temizlendi</translation> <translation id="1838412507805038478">Chromium, bu web sitesi sertifikasının <ph name="ISSUER" /> tarafından yayınlandığını doğruladı.</translation> <translation id="1843424232666537147">Chromium İnternet verilerinizi yönetmenize ve web sayfalarını hızlı yükleyebilmenize yardımcı olacak özelliklere sahiptir.
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb index b37d8f63..2fd4859 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb
@@ -14,6 +14,7 @@ <translation id="1531155317299575425">Hiển thị lời nhắc đăng nhập vào Chromium.</translation> <translation id="1584569488888892906">Chromium giờ đây đơn giản, an toàn và nhanh hơn bao giờ hết</translation> <translation id="1617663976202781617">Dữ liệu từ tính năng đồng bộ hóa của Chromium</translation> +<translation id="1722370509450468186">Mật khẩu của bạn sẽ được lưu trong Tài khoản (<ph name="EMAIL" />).</translation> <translation id="1736662517232558588">Đã xóa dữ liệu Chromium</translation> <translation id="1838412507805038478">Chromium xác minh rằng <ph name="ISSUER" /> đã cấp chứng chỉ của trang web này.</translation> <translation id="1843424232666537147">Chromium có tính năng giúp bạn quản lý dữ liệu Internet của mình và tốc độ mà bạn có thể tải trang web.
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb index 25b11d0..34518e5 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_af.xtb
@@ -16,6 +16,7 @@ <translation id="2147651015520127414">Chrome het geverifieer dat <ph name="ISSUER" /> hierdie webwerf se sertifikaat uitgereik het.</translation> <translation id="2199719347983604670">Data van Chrome-sinkronisering af</translation> <translation id="2313070403598893276">Google Chrome is eenvoudig, veilig en vinniger as ooit vantevore</translation> +<translation id="2339201583852607431">Jou wagwoord sal in jou Google-rekening (<ph name="EMAIL" />) gestoor word.</translation> <translation id="2342919707875585281">Chrome deel jou ligging met werwe wat jy toelaat.</translation> <translation id="2347208864470321755">Wanneer hierdie kenmerk aangeskakel is, sal Chrome aanbied om bladsye wat in ander tale geskryf is, te vertaal deur Google Vertaal te gebruik. <ph name="BEGIN_LINK" />Kom meer te wete<ph name="END_LINK" /></translation> <translation id="2427791862912929107">Chrome het kenmerke wat jou help om jou internetdata te bestuur, asook hoe vinnig jy webbladsye kan laai.
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb index 1b7657e..75f3770 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ar.xtb
@@ -16,6 +16,7 @@ <translation id="2147651015520127414">لقد تحقق Chrome من أن <ph name="ISSUER" /> أصدر شهادة الموقع الإلكتروني.</translation> <translation id="2199719347983604670">البيانات من مزامنة Chrome</translation> <translation id="2313070403598893276">متصفِّح Google Chrome بسيط وآمن وأكثر سرعة من ذي قبل.</translation> +<translation id="2339201583852607431">سيتم حفظ كلمة المرور في حسابك على Google (<ph name="EMAIL" />).</translation> <translation id="2342919707875585281">يشارك Chrome موقعك الجغرافي مع المواقع الإلكترونية التي تسمح بها.</translation> <translation id="2347208864470321755">عند تفعيل هذه الميزة، سيقترح Chrome ترجمة الصفحات المكتوبة بلغات أخرى باستخدام "ترجمة Google". <ph name="BEGIN_LINK" />مزيد من المعلومات<ph name="END_LINK" /></translation> <translation id="2427791862912929107">يشتمِل Chrome على ميزات من شأنها مساعدتك على إدارة بيانات الإنترنت والوقوف على مدى السرعة التي يمكنك تحميل صفحات الويب من خلالها.
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_cs.xtb index 179f002..2ce99a5 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_cs.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_cs.xtb
@@ -16,6 +16,7 @@ <translation id="2147651015520127414">Chrome ověřil, že certifikát tohoto webu byl vydán vydavatelem <ph name="ISSUER" />.</translation> <translation id="2199719347983604670">Data ze synchronizace Chromu</translation> <translation id="2313070403598893276">Prohlížeč Google Chrome je jednoduchý, bezpečný a rychlejší než kdy dřív</translation> +<translation id="2339201583852607431">Heslo bude uloženo do vašeho účtu Google (<ph name="EMAIL" />).</translation> <translation id="2342919707875585281">Chrome sdílí vaši polohu s weby, u kterých to povolíte.</translation> <translation id="2347208864470321755">Pokud je tato funkce zapnutá, bude Chrome nabízet překlad stránek v jiných jazycích pomocí Překladače Google. <ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /></translation> <translation id="2427791862912929107">Chrome obsahuje funkce, které pomáhají spravovat přenosy dat z internetu a umožňují zrychlit načítání webových stránek.
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb index 8562436..e3deeb0 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb
@@ -16,6 +16,7 @@ <translation id="2147651015520127414">Chrome bekræftede, at <ph name="ISSUER" /> har udstedt certifikatet for dette website.</translation> <translation id="2199719347983604670">Data fra Chrome-synkronisering</translation> <translation id="2313070403598893276">Google Chrome er brugervenligt, sikkert og hurtigere end nogensinde før</translation> +<translation id="2339201583852607431">Din adgangskode gemmes på din Google-konto (<ph name="EMAIL" />).</translation> <translation id="2342919707875585281">Chrome deler din lokation med godkendte websites.</translation> <translation id="2347208864470321755">Når denne funktion er aktiveret, vil Chrome tilbyde at oversætte sider, der er skrevet på andre sprog, ved hjælp af Google Oversæt. <ph name="BEGIN_LINK" />Få flere oplysninger<ph name="END_LINK" /></translation> <translation id="2427791862912929107">Google Chrome har funktioner, der hjælper dig med at administrere internetdata og hastigheden, som websider indlæses med.
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_el.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_el.xtb index 4e081297..7ddfc432 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_el.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_el.xtb
@@ -16,6 +16,7 @@ <translation id="2147651015520127414">Το Chrome επαλήθευσε ότι το πιστοποιητικό αυτού του ιστότοπου εκδόθηκε από τον/την <ph name="ISSUER" />.</translation> <translation id="2199719347983604670">Δεδομένα από τον συγχρονισμό Chrome</translation> <translation id="2313070403598893276">Το Google Chrome είναι απλό, ασφαλές και πιο γρήγορο από ποτέ</translation> +<translation id="2339201583852607431">Ο κωδικός πρόσβασής σας θα αποθηκευτεί στον Λογαριασμό σας Google (<ph name="EMAIL" />).</translation> <translation id="2342919707875585281">Το Chrome κοινοποιεί την τοποθεσία σας στους ιστοτόπους που επιτρέπετε.</translation> <translation id="2347208864470321755">Όταν αυτή η λειτουργία είναι ενεργοποιημένη, το Chrome θα προσφέρει τη μετάφραση σελίδων που είναι γραμμένες σε άλλες γλώσσες χρησιμοποιώντας τη Μετάφραση Google. <ph name="BEGIN_LINK" />Μάθετε περισσότερα<ph name="END_LINK" /></translation> <translation id="2427791862912929107">Το Chrome διαθέτει λειτουργίες που σας διευκολύνουν να διαχειριστείτε τα δεδομένα σας στο διαδίκτυο και την ταχύτητα φόρτωσης των ιστοσελίδων.
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb index 2311343..eab83af 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb
@@ -16,6 +16,7 @@ <translation id="2147651015520127414">Chrome a vérifié que <ph name="ISSUER" /> a émis le certificat de ce site Web.</translation> <translation id="2199719347983604670">Données provenant de la synchronisation Google Chrome</translation> <translation id="2313070403598893276">Google Chrome est simple, sécuritaire et plus rapide que jamais</translation> +<translation id="2339201583852607431">Votre mot de passe sera enregistré dans votre compte Google (<ph name="EMAIL" />).</translation> <translation id="2342919707875585281">Chrome partage votre position avec les sites que vous autorisez.</translation> <translation id="2347208864470321755">Lorsque cette fonction est activée, Google Chrome vous propose de traduire les pages écrites dans d'autres langues à l'aide de Google Traduction. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation> <translation id="2427791862912929107">Chrome comprend des fonctionnalités qui vous aident à gérer vos données Internet et la vitesse de chargement des pages Web.
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hy.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hy.xtb index 62747236..b95ce131 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hy.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hy.xtb
@@ -16,6 +16,7 @@ <translation id="2147651015520127414">Chrome-ը հաստատեց, որ <ph name="ISSUER" />-ն է թողարկել վեբկայքի վկայագիրը:</translation> <translation id="2199719347983604670">Տվյալներ Chrome Sync-ից</translation> <translation id="2313070403598893276">Google Chrome-ը դարձել է ավելի հարմար, անվտանգ և արագ</translation> +<translation id="2339201583852607431">Գաղտնաբառը կպահվի ձեր Google հաշվում (<ph name="EMAIL" />)։</translation> <translation id="2342919707875585281">Chrome-ը կիսվում է ձեր տեղադրության տվյալներով այն կայքերի հետ, որոնց համար տվել եք թույլտվություն։</translation> <translation id="2347208864470321755">Եթե միացնեք այս գործառույթը, Chrome-ը կառաջարկի թարգմանել այլ լեզուներով ներկայացված էջերը Google Translate-ի միջոցով: <ph name="BEGIN_LINK" />Իմանալ ավելին<ph name="END_LINK" /></translation> <translation id="2427791862912929107">Chrome-ն ունի գործառույթներ, որոնց օգնությամբ կարող եք կառավարել ձեր համացանցի տվյալները և վեբ էջերը բեռնելու արագությունը։
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb index ecdc740..40feacbc 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb
@@ -16,6 +16,7 @@ <translation id="2147651015520127414">O Chrome verificou que <ph name="ISSUER" /> emitiu o certificado desse website.</translation> <translation id="2199719347983604670">Dados da "Sincronização do Chrome"</translation> <translation id="2313070403598893276">O Google Chrome é simples, seguro e está mais rápido do que nunca</translation> +<translation id="2339201583852607431">A senha será salva na sua Conta do Google (<ph name="EMAIL" />).</translation> <translation id="2342919707875585281">O Chrome compartilha sua localização com os sites aos quais você concede permissão.</translation> <translation id="2347208864470321755">Quando este recurso está ativado, o Google Chrome disponibiliza a tradução de páginas escritas em outros idiomas usando o Google Tradutor. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation> <translation id="2427791862912929107">O Chrome tem recursos que ajudam a gerenciar seus dados de Internet e a velocidade de carregamento de páginas da Web.
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sq.xtb index ad41189..27909ee 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sq.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sq.xtb
@@ -54,8 +54,10 @@ <translation id="4698415050768537821">Chrome nuk mund t'i kontrollonte të gjitha fjalëkalimet. Provo përsëri nesër ose <ph name="BEGIN_LINK" />kontrollo fjalëkalimet në "Llogarinë tënde të Google".<ph name="END_LINK" /></translation> <translation id="484033449593719797">Nuk mbështetet në Chrome Beta</translation> <translation id="5030102366287574140">Chrome mund të të ndihmojë të qëndrosh i sigurt nga nxjerrjet e paautorizuara të të dhënave, faqet e pasigurta të internetit etj.</translation> +<translation id="5119391094379141756">Zgjidh Chrome</translation> <translation id="5162467219239570114">Chrome është i papërditësuar Nëse nuk ofrohet një përditësim në <ph name="BEGIN_LINK" />App Store<ph name="END_LINK" />, ka mundësi që pajisja jote nuk i mbështet më versionet e reja të Chrome.</translation> <translation id="5389212809648216794">Google Chrome nuk mund të përdorë kamerën tënde sepse ajo është në përdorim nga një aplikacion tjetër</translation> +<translation id="5460571915754665838">4. Zgjidh Chrome</translation> <translation id="5639704535586432836">Hap Cilësimet > Privatësia > Kamera > Google Chrome dhe aktivizo kamerën.</translation> <translation id="5642200033778930880">Google Chrome nuk mund ta përdorë kamerën tënde në modalitetin e "Pamjes së ndarë"</translation> <translation id="5690427481109656848">Google LLC</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb index 412a7b17..91ff5a0 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb
@@ -16,6 +16,7 @@ <translation id="2147651015520127414">இந்த இணையதளச் சான்றிதழ் <ph name="ISSUER" /> ஆல் வழங்கப்பட்டதா என Chrome சரிபார்த்தது.</translation> <translation id="2199719347983604670">Chrome ஒத்திசைவுத் தரவு</translation> <translation id="2313070403598893276">Google Chrome எளிமையானது பாதுகாப்பானது & மிகவும் விரைவானது</translation> +<translation id="2339201583852607431">கடவுச்சொல் உங்கள் Google கணக்கில் (<ph name="EMAIL" />) சேமிக்கப்படும்.</translation> <translation id="2342919707875585281">நீங்கள் அனுமதிக்கும் தளங்களுடன் இருப்பிடத் தகவலை Chrome பகிரும்.</translation> <translation id="2347208864470321755">இந்த அம்சம் இயக்கப்பட்டிருக்கும்போது, பிற மொழிகளில் எழுதப்பட்ட பக்கங்களை Google மொழியாக்கத்தைப் பயன்படுத்தி மொழிப்பெயர்ப்பதற்கான வாய்ப்பை Chrome வழங்கும். <ph name="BEGIN_LINK" />மேலும் அறிக<ph name="END_LINK" /></translation> <translation id="2427791862912929107">இணையத் தரவையும் இணையப் பக்கங்கள் ஏற்றப்படும் வேகத்தையும் நிர்வகிக்க உதவும் அம்சங்கள் Chromeமில் உள்ளன.
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_te.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_te.xtb index f250782..7bbb61c4 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_te.xtb
@@ -16,6 +16,7 @@ <translation id="2147651015520127414">Chrome ఈ వెబ్సైట్ సర్టిఫికెట్ను <ph name="ISSUER" /> జారీ చేసినట్లు ధృవీకరించింది.</translation> <translation id="2199719347983604670">Chrome సింక్ నుండి డేటా</translation> <translation id="2313070403598893276">Google Chrome ఇప్పుడు మరింత సరళంగా, సురక్షితంగా, అలాగే మునుపటి కంటే వేగంగా మారింది</translation> +<translation id="2339201583852607431">మీ పాస్వర్డ్ మీ Google ఖాతా (<ph name="EMAIL" />)లో సేవ్ చేయబడుతుంది.</translation> <translation id="2342919707875585281">మీరు అనుమతించే సైట్లతో Chrome మీ లొకేషన్ను షేర్ చేస్తుంది.</translation> <translation id="2347208864470321755">ఈ లక్షణం ప్రారంభించబడినప్పుడు, Chrome ఇతర భాషల్లో వ్రాసిన పేజీలకు Google అనువాదం ఉపయోగించి అనువాదాన్ని అందిస్తుంది. <ph name="BEGIN_LINK" />మరింత తెలుసుకోండి<ph name="END_LINK" /></translation> <translation id="2427791862912929107">మీ ఇంటర్నెట్ డేటాను మేనేజ్ చేయడంలో, అలాగే మీరు వెబ్పేజీలను త్వరగా లోడ్ చేయగలగడంలో మీకు సహాయపడే ఫీచర్లను Chrome కలిగి ఉంది.
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_tr.xtb index f781dc44..7dd480d 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_tr.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_tr.xtb
@@ -16,6 +16,7 @@ <translation id="2147651015520127414">Chrome, bu web sitesi sertifikasının <ph name="ISSUER" /> tarafından yayınlandığını doğruladı.</translation> <translation id="2199719347983604670">Chrome senkronizasyonundan veriler</translation> <translation id="2313070403598893276">Google Chrome basit, güvenli ve her zamankinden daha hızlı</translation> +<translation id="2339201583852607431">Şifreniz, Google Hesabınıza (<ph name="EMAIL" />) kaydedilir.</translation> <translation id="2342919707875585281">Chrome, konumunuzu izin verdiğiniz sitelerle paylaşır.</translation> <translation id="2347208864470321755">Bu özellik açık durumdayken Chrome, diğer dillerde yazılmış sayfaları Google Çeviri'yi kullanarak çevirmeyi teklif eder. <ph name="BEGIN_LINK" />Daha fazla bilgi edinin<ph name="END_LINK" /></translation> <translation id="2427791862912929107">Chrome internet verilerinizi yönetmenize ve web sayfalarını hızlı yükleyebilmenize yardımcı olacak özelliklere sahiptir.
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_vi.xtb index 6f631f7..5dcd8f4 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_vi.xtb
@@ -16,6 +16,7 @@ <translation id="2147651015520127414">Chrome xác minh <ph name="ISSUER" /> đã cấp chứng chỉ của trang web này.</translation> <translation id="2199719347983604670">Dữ liệu từ Chrome Sync</translation> <translation id="2313070403598893276">Google Chrome giờ đây đơn giản, an toàn và nhanh hơn bao giờ hết</translation> +<translation id="2339201583852607431">Mật khẩu của bạn sẽ được lưu trong Tài khoản Google (<ph name="EMAIL" />).</translation> <translation id="2342919707875585281">Chrome chia sẻ thông tin vị trí của bạn với những trang web mà bạn cho phép.</translation> <translation id="2347208864470321755">Khi tính năng này được bật, Chrome sẽ đề xuất sử dụng Google Dịch để dịch các trang viết bằng ngôn ngữ khác. <ph name="BEGIN_LINK" />Tìm hiểu thêm<ph name="END_LINK" /></translation> <translation id="2427791862912929107">Chrome có tính năng giúp bạn quản lý dữ liệu Internet của mình và tốc độ mà bạn có thể tải trang web.
diff --git a/ios/chrome/app/strings/resources/ios_strings_af.xtb b/ios/chrome/app/strings/resources/ios_strings_af.xtb index dddf7875..94db9751 100644 --- a/ios/chrome/app/strings/resources/ios_strings_af.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_af.xtb
@@ -641,6 +641,7 @@ <translation id="6873263987691478642">Deelaansig</translation> <translation id="6888009575607455378">Is jy seker jy wil jou veranderinge weggooi?</translation> <translation id="6896758677409633944">Kopieer</translation> +<translation id="6897187120838603299">Jou wagwoord sal op jou toestel gestoor word.</translation> <translation id="6914583639806229067">Soek vir prent wat jy gekopieer het</translation> <translation id="6914783257214138813">Jou wagwoorde sal sigbaar wees aan enigiemand wat die uitgevoerde lêer kan sien.</translation> <translation id="6930799952781667037">Tik om na hierdie taal te verander.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb index 85130adde..8e72193 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -641,6 +641,7 @@ <translation id="6873263987691478642">وضع تقسيم العرض</translation> <translation id="6888009575607455378">هل تريد فعلاً تجاهل التغييرات؟</translation> <translation id="6896758677409633944">نسخ</translation> +<translation id="6897187120838603299">سيتم حفظ كلمة المرور في جهازك.</translation> <translation id="6914583639806229067">البحث عن الصورة التي نسختها</translation> <translation id="6914783257214138813">ستكون كلمات مرورك مرئية لأي شخص يمكنه الاطلاع على الملف الذي تم تصديره.</translation> <translation id="6930799952781667037">انقر للتغيير إلى هذه اللغة.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb index 1702492..5b09f0d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -641,6 +641,7 @@ <translation id="6873263987691478642">Režim Split View</translation> <translation id="6888009575607455378">Opravdu chcete změny zahodit?</translation> <translation id="6896758677409633944">Kopírovat</translation> +<translation id="6897187120838603299">Heslo bude uloženo do zařízení.</translation> <translation id="6914583639806229067">Vyhledat zkopírovaný obrázek</translation> <translation id="6914783257214138813">Vaše hesla uvidí každý, kdo může zobrazit exportovaný soubor.</translation> <translation id="6930799952781667037">Klepnutím přepnete na tento jazyk.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb index 1050b086..fd7b9ed 100644 --- a/ios/chrome/app/strings/resources/ios_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -641,6 +641,7 @@ <translation id="6873263987691478642">Opdelt visning</translation> <translation id="6888009575607455378">Er du sikker på, at du vil kassere dine ændringer?</translation> <translation id="6896758677409633944">Kopiér</translation> +<translation id="6897187120838603299">Din adgangskode gemmes på din enhed.</translation> <translation id="6914583639806229067">Søg efter billede, du har kopieret</translation> <translation id="6914783257214138813">Dine adgangskoder vil være synlige for alle, der kan se den eksporterede fil.</translation> <translation id="6930799952781667037">Tryk for at skifte til dette sprog.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb index 9aeb6b0..e700279 100644 --- a/ios/chrome/app/strings/resources/ios_strings_el.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -642,6 +642,7 @@ <translation id="6873263987691478642">Προβολή διαχωρισμού οθόνης</translation> <translation id="6888009575607455378">Είστε βέβαιοι ότι θέλετε να απορρίψετε τις αλλαγές σας;</translation> <translation id="6896758677409633944">Αντιγραφή</translation> +<translation id="6897187120838603299">Ο κωδικός πρόσβασής σας θα αποθηκευτεί στη συσκευή σας.</translation> <translation id="6914583639806229067">Αναζήτηση της εικόνας που αντιγράψατε</translation> <translation id="6914783257214138813">Οι κωδικοί πρόσβασής σας θα είναι ορατοί σε οποιονδήποτε μπορεί να δει το αρχείο εξαγωγής.</translation> <translation id="6930799952781667037">Πατήστε για αλλαγή σε αυτήν τη γλώσσα.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb index 35404709..7d3c075 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
@@ -641,6 +641,7 @@ <translation id="6873263987691478642">Vue partagée</translation> <translation id="6888009575607455378">Voulez-vous vraiment supprimer les modifications?</translation> <translation id="6896758677409633944">Copier</translation> +<translation id="6897187120838603299">Votre mot de passe sera enregistré sur votre appareil.</translation> <translation id="6914583639806229067">Rechercher l'image que vous avez copiée</translation> <translation id="6914783257214138813">Vos mots de passe seront accessibles à quiconque peut voir le fichier exporté.</translation> <translation id="6930799952781667037">Toucher pour changer la langue en celle-ci.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hy.xtb b/ios/chrome/app/strings/resources/ios_strings_hy.xtb index 9daf06c9..a7933760 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hy.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hy.xtb
@@ -641,6 +641,7 @@ <translation id="6873263987691478642">Տրոհված դիտակերպ</translation> <translation id="6888009575607455378">Չեղարկե՞լ փոփոխությունները</translation> <translation id="6896758677409633944">Պատճենել</translation> +<translation id="6897187120838603299">Գաղտնաբառը կպահվի ձեր սարքում։</translation> <translation id="6914583639806229067">Որոնեք ձեր պատճենած պատկերը</translation> <translation id="6914783257214138813">Ձեր գաղտնաբառերը տեսանելի կլինեն արտահանված ֆայլին մուտք ունեցող բոլոր օգտատերերին:</translation> <translation id="6930799952781667037">Հպեք՝ այս լեզուն փոխելու համար։</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb index 122705ec..c57da4e7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_id.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -30,7 +30,7 @@ <translation id="1176932207622159128">Gambar Tak Disimpan</translation> <translation id="1181037720776840403">Hapus</translation> <translation id="1207113853726624428">Penelusuran Baru</translation> -<translation id="1209206284964581585">Sembunyikan sekarang</translation> +<translation id="1209206284964581585">Sembunyikan untuk saat ini</translation> <translation id="1219674500290482172">Tidak dapat terhubung ke internet.</translation> <translation id="122699739164161391">Tutup Semua Tab</translation> <translation id="1229222343402087523">Telusuri ${searchPhrase} di Chrome</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 1280c2d7..7d04b39 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -641,6 +641,7 @@ <translation id="6873263987691478642">Visualização dividida</translation> <translation id="6888009575607455378">Tem certeza de que quer descartar suas alterações?</translation> <translation id="6896758677409633944">Copiar</translation> +<translation id="6897187120838603299">A senha será salva no seu dispositivo.</translation> <translation id="6914583639806229067">Pesquisar imagem que você copiou</translation> <translation id="6914783257214138813">Suas senhas ficarão visíveis para qualquer pessoa que tiver acesso ao arquivo exportado.</translation> <translation id="6930799952781667037">Toque para mudar para esse idioma.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_strings_sq.xtb index b0023ff..7a2fef6 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sq.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sq.xtb
@@ -138,6 +138,7 @@ <translation id="225943865679747347">Kodi i gabimit: <ph name="ERROR_CODE" /></translation> <translation id="2267753748892043616">Shto një llogari</translation> <translation id="2268044343513325586">Ripërpuno</translation> +<translation id="2271351792809375263">Përdor fjalëkalimin që ke ruajtur në Chrome në aplikacione të tjera në pajisjen tënde</translation> <translation id="2273327106802955778">Menyja "Më shumë"</translation> <translation id="2302742851632557585">Ndryshoje fjalëkalimin në faqen e internetit</translation> <translation id="2316709634732130529">Përdor fjalëkalimin e sugjeruar</translation> @@ -258,6 +259,7 @@ <translation id="3393920035788932672">Lejohen dritaret kërcyese</translation> <translation id="3399930248910934354">Hap "Cilësimet" e Chrome</translation> <translation id="3404744938087714423">Dalja e çaktivizon sinkronizimin.</translation> +<translation id="3414451675185661089">2. Trokit te "Fjalëkalimet"</translation> <translation id="3425644765244388016">Pseudonimi i kartës</translation> <translation id="3433057996795775706">Fshirja e këtij fjalëkalimi nuk do ta fshijë llogarinë tënde në <ph name="WEBSITE" />. Ndrysho fjalëkalimin në <ph name="WEBSITE" /> për ta mbajtur të sigurt nga të tjerët.</translation> <translation id="3443810440409579745">Skeda u mor.</translation> @@ -379,6 +381,7 @@ <translation id="4666531726415300315">Je identifikuar si <ph name="EMAIL" />. Të dhënat e tua janë të koduara me frazën tënde të kalimit për sinkronizimin. Fute atë për të nisur sinkronizimin.</translation> +<translation id="4682686630151240767">1. Hap "Cilësimet e iPhone"</translation> <translation id="4689564913179979534">Menaxho mënyrat e pagesës...</translation> <translation id="470966556546083668">Mos e aktivizo sinkronizimin</translation> <translation id="473775607612524610">Përditësoje</translation> @@ -459,6 +462,7 @@ <translation id="5489208564673669003">Për të menaxhuar kukit për të gjitha sajtet, shiko <ph name="BEGIN_LINK" />Cilësimet e kukive<ph name="END_LINK" />.</translation> <translation id="5490005495580364134">Blloko të gjitha kukit (nuk rekomandohet)</translation> <translation id="5513681519188741830"><ph name="TIME" /> orë më parë</translation> +<translation id="5523579157975978438">Për ta çaktivizuar, hap <ph name="BEGIN_LINK" />Cilësimet<ph name="END_LINK" /> dhe shko te "Fjalëkalimet".</translation> <translation id="5525269841082836315">Krijo fjalëkalim</translation> <translation id="5532698011560297095">Nuk mund të identifkohesh</translation> <translation id="5548760955356983418">Handoff të lejon të fillosh të shfletosh një faqe interneti në këtë pajisje dhe pastaj me lehtësi të vazhdosh në kompjuterin tënd Mac. Faqja aktuale e hapur e internetit do të shfaqet në Dock të kompjuterit tënd Mac. @@ -740,6 +744,7 @@ Sajtet mund t'i përdorin kukit për të parë aktivitetin tënd të shfletimit nëpër sajte të ndryshme, për shembull për t'i personalizuar reklamat.</translation> <translation id="7971521879845308059">Blloko dritaret kërcyese</translation> <translation id="797413074872316787">Për të sinkronizuar dhe personalizuar mes pajisjeve, aktivizo sinkronizimin.</translation> +<translation id="7978018860671536736">3. Trokit "Plotëso automatikisht fjalëkalimet"</translation> <translation id="7982789257301363584">Rrjeti</translation> <translation id="7993619969781047893">Veçoritë në disa sajte mund të ndalojnë së funksionuari</translation> <translation id="800361585186029508">Hap URL-të e futura në Google Chrome.</translation> @@ -765,6 +770,7 @@ <translation id="8205564605687841303">Anulo</translation> <translation id="8206354486702514201">Ky cilësim zbatohet nga administratori yt.</translation> <translation id="8225985093977202398">Imazhet dhe skedarët në memorien specifike</translation> +<translation id="8237382152611443140">Hap "Cilësimet e plotësimit automatik të fjalëkalimit"</translation> <translation id="8261506727792406068">Fshi</translation> <translation id="8271720166617117963">Pranoje dhe identifikohu</translation> <translation id="8281781826761538115">Parazgjedhja - <ph name="DEFAULT_LOCALE" /></translation> @@ -833,6 +839,7 @@ <translation id="8917490105272468696">Po, jam dakord</translation> <translation id="8952559610785099500">Shto fjalëkalimin</translation> <translation id="895541991026785598">Raporto një problem</translation> +<translation id="8974714402877957201">1. Hap "Cilësimet e iPad"</translation> <translation id="8976382372951310360">Ndihma</translation> <translation id="8976414606286374109">Kartat ruhen në "Llogarinë tënde të Google".</translation> <translation id="8981454092730389528">Kontrollet e aktivitetit të Google</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_strings_ta.xtb index ecbf678..73af3037 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ta.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
@@ -641,6 +641,7 @@ <translation id="6873263987691478642">காட்சிப் பிரிப்பு</translation> <translation id="6888009575607455378">நீங்கள் செய்த மாற்றங்களை நிச்சயமாக நிராகரிக்கவா?</translation> <translation id="6896758677409633944">நகலெடு</translation> +<translation id="6897187120838603299">கடவுச்சொல் உங்கள் சாதனத்தில் சேமிக்கப்படும்.</translation> <translation id="6914583639806229067">நீங்கள் நகலெடுத்த படத்தைத் தேடுக</translation> <translation id="6914783257214138813">ஏற்றிய ஃபைலைப் பார்க்கக்கூடிய அனைவரும் உங்கள் கடவுச்சொற்களைப் பார்க்க முடியும்.</translation> <translation id="6930799952781667037">இந்த மொழிக்கு மாற்ற தட்டவும்.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb index b028235..68a08c2 100644 --- a/ios/chrome/app/strings/resources/ios_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -641,6 +641,7 @@ <translation id="6873263987691478642">విభజన వీక్షణ</translation> <translation id="6888009575607455378">మీరు చేసిన మార్పులను ఖచ్చితంగా విస్మరించాలనుకుంటున్నారా?</translation> <translation id="6896758677409633944">కాపీ చేయి</translation> +<translation id="6897187120838603299">మీ పాస్వర్డ్ మీ పరికరంలో సేవ్ చేయబడుతుంది.</translation> <translation id="6914583639806229067">మీరు కాపీ చేసిన చిత్రాన్ని వెతకండి</translation> <translation id="6914783257214138813">ఎగుమతి చేయబడిన ఫైల్ను చూడగల ఎవరికైనా మీ పాస్వర్డ్లు కనిపిస్తాయి.</translation> <translation id="6930799952781667037">ఈ భాషకు మార్చడానికి నొక్కండి.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb index c902142..cb108051 100644 --- a/ios/chrome/app/strings/resources/ios_strings_tr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
@@ -641,6 +641,7 @@ <translation id="6873263987691478642">Bölünmüş Görünüm</translation> <translation id="6888009575607455378">Değişikliklerinizi iptal etmek istediğinizden emin misiniz?</translation> <translation id="6896758677409633944">Kopyala</translation> +<translation id="6897187120838603299">Şifreniz, cihazınıza kaydedilir.</translation> <translation id="6914583639806229067">Kopyalanan Metni Ara</translation> <translation id="6914783257214138813">Şifreleriniz, dışa aktarılan dosyayı görebilen herkes tarafından görülebilir.</translation> <translation id="6930799952781667037">Bu dile değiştirmek için dokunun.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb index 7d06a2b..28dbc016 100644 --- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -641,6 +641,7 @@ <translation id="6873263987691478642">Chế độ xem phân tách</translation> <translation id="6888009575607455378">Bạn có chắc chắn muốn hủy các nội dung mình thay đổi không?</translation> <translation id="6896758677409633944">Sao chép</translation> +<translation id="6897187120838603299">Mật khẩu của bạn sẽ được lưu vào thiết bị.</translation> <translation id="6914583639806229067">Tìm kiếm hình ảnh bạn đã sao chép</translation> <translation id="6914783257214138813">Bất cứ ai có thể xem tệp đã xuất đều có thể biết mật khẩu của bạn.</translation> <translation id="6930799952781667037">Nhấn để đổi sang ngôn ngữ này.</translation>
diff --git a/ios/chrome/browser/main/browser_user_data.h b/ios/chrome/browser/main/browser_user_data.h index 758cfa86..276dfd2 100644 --- a/ios/chrome/browser/main/browser_user_data.h +++ b/ios/chrome/browser/main/browser_user_data.h
@@ -12,7 +12,7 @@ // This macro declares a static variable inside the class that inherits from // BrwoserUserData. The address of this static variable is used as the key to // store/retrieve an instance of the class on/from a Browser. -#define BROWSER_USER_DATA_KEY_DECL() static constexpr int kUserDataKey = 0 +#define BROWSER_USER_DATA_KEY_DECL() static const int kUserDataKey = 0 // This macro instantiates the static variable declared by the previous macro. // It must live in a .mm/.cc file to ensure that there is only one instantiation
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_action_row.swift b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_action_row.swift index 11b854d5..506f8e8 100644 --- a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_action_row.swift +++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_action_row.swift
@@ -27,6 +27,8 @@ .opacity(enabled ? 1 : 0.5) } .contentShape(Rectangle()) + .accessibilityElement() + .accessibilityLabel(Text(action.name)) } ) .accentColor(.cr_textPrimaryColor)
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_view.swift b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_view.swift index 7d4d05a2..63634c69 100644 --- a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_view.swift +++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_destination_view.swift
@@ -53,6 +53,8 @@ } } .contentShape(Rectangle()) + .accessibilityElement(children: .ignore) + .accessibilityLabel(Text("destination.name")) } /// View representing the background of the icon.
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 index efc692e..b1316e1 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -83543d71493657a089a8e73c28c97e406a8a948c \ No newline at end of file +65ef8e68bebef809d1dc428a52fe2ee81c921b51 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 index 56d1b8d..007f46ac 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -681e44a6e57bcc865b67decbde8a7d21565598a6 \ No newline at end of file +3e65bf0882e346c03fd2e761278568d3ea7f6017 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 index e893245..656255ab 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -a845266dbb1f3b6ae00914291d7fbf667847a7ea \ No newline at end of file +a7b93f80dd8def1ad5da5608fb7d4aee5dfc568d \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 index f69bb0c..60e880b 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -5939b702261ee752309e88e4d8229e52cc8993f4 \ No newline at end of file +9d4a276c9d7b00bcf2bf494887ce47f6a6d9061d \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1 index 484a4187..4934a4a 100644 --- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -18d500ef7bd4349c3b05e58ae5153d4a32932328 \ No newline at end of file +efa910d796cfc9c513faf7dbd21da4cf90c19e58 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1 index ab37914e..b94abf1c 100644 --- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -d22c79332faf1d22524f5d7c2bb596d066e07d88 \ No newline at end of file +bb57108c7146a0faf22e9ca3caa853f32fe7656d \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 index 549b5f3..7daecc8ee 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -70b400cda0ef21c820bd774345b56068e845cf70 \ No newline at end of file +02c8698543caa9098eb938a1e1690606ef1939c9 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 index a077208..021fd169 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -4c723533fdb9ac965d1ed2dd5d961998a58fd075 \ No newline at end of file +8faaf98f914c0f46e5969f96251df00c5ba26211 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 index d6a7f57..05877d5 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -bab0eb3a1d39d18f6d301d7529f41ffb5a69e0f6 \ No newline at end of file +eaa0c251530875e7051a413ef1503a1dd9f851b0 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 index 0d1cd3dd..035f5f2 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -628b6d68247721f7070bd4b723cbc8ee011ef9c6 \ No newline at end of file +f8d14045b7d643e0ed89b507efb9e5a0de1dda3c \ No newline at end of file
diff --git a/ios/web/common/features.mm b/ios/web/common/features.mm index 1c50e424..b879bc773 100644 --- a/ios/web/common/features.mm +++ b/ios/web/common/features.mm
@@ -68,8 +68,7 @@ const base::Feature kSynthesizedRestoreSession{ "SynthesizedRestoreSession", base::FEATURE_DISABLED_BY_DEFAULT}; -const base::Feature kEnableUnrealizedWebStates{ - "EnableUnrealizedWebStates", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kEnableUnrealizedWebStates{"EnableUnrealizedWebStates"}; bool UseWebClientDefaultUserAgent() { return base::FeatureList::IsEnabled(kUseDefaultUserAgentInWebClient);
diff --git a/ios/web/public/web_state_user_data.h b/ios/web/public/web_state_user_data.h index 17f9e17..5ce0b64 100644 --- a/ios/web/public/web_state_user_data.h +++ b/ios/web/public/web_state_user_data.h
@@ -12,7 +12,7 @@ // This macro declares a static variable inside the class that inherits from // WebStateUserData. The address of this static variable is used as the key to // store/retrieve an instance of the class on/from a WebState. -#define WEB_STATE_USER_DATA_KEY_DECL() static constexpr int kUserDataKey = 0 +#define WEB_STATE_USER_DATA_KEY_DECL() static const int kUserDataKey = 0 // This macro instantiates the static variable declared by the previous macro. // It must live in a .mm/.cc file to ensure that there is only one instantiation
diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc index cdb8edc..47eb87a0 100644 --- a/media/base/media_switches.cc +++ b/media/base/media_switches.cc
@@ -559,6 +559,13 @@ const base::Feature kUseSodaForLiveCaption{"UseSodaForLiveCaption", base::FEATURE_ENABLED_BY_DEFAULT}; +// Controls whether a "Share this tab instead" button should be shown for +// getDisplayMedia captures. Note: This flag does not control if the "Share this +// tab instead" button is shown for chrome.desktopCapture captures. +const base::Feature kShareThisTabInsteadButtonGetDisplayMedia{ + "ShareThisTabInsteadButtonGetDisplayMedia", + base::FEATURE_ENABLED_BY_DEFAULT}; + // Enable the Speaker Change Detection feature, which inserts a line break when // the Speech On-Device API (SODA) detects a speaker change. const base::Feature kSpeakerChangeDetection{"SpeakerChangeDetection",
diff --git a/media/base/media_switches.h b/media/base/media_switches.h index ab04d0d..36cd239 100644 --- a/media/base/media_switches.h +++ b/media/base/media_switches.h
@@ -175,6 +175,8 @@ MEDIA_EXPORT extern const base::Feature kResumeBackgroundVideo; MEDIA_EXPORT extern const base::Feature kReuseMediaPlayer; MEDIA_EXPORT extern const base::Feature kRevokeMediaSourceObjectURLOnAttach; +MEDIA_EXPORT extern const base::Feature + kShareThisTabInsteadButtonGetDisplayMedia; MEDIA_EXPORT extern const base::Feature kSpeakerChangeDetection; MEDIA_EXPORT extern const base::Feature kSpecCompliantCanPlayThrough; MEDIA_EXPORT extern const base::Feature kSurfaceLayerForMediaStreams;
diff --git a/net/cookies/canonical_cookie.cc b/net/cookies/canonical_cookie.cc index 845d2a99..f4056c6 100644 --- a/net/cookies/canonical_cookie.cc +++ b/net/cookies/canonical_cookie.cc
@@ -45,7 +45,6 @@ #include "net/cookies/canonical_cookie.h" #include <limits> -#include <sstream> #include <utility> #include "base/containers/contains.h"
diff --git a/net/cookies/canonical_cookie_test_helpers.h b/net/cookies/canonical_cookie_test_helpers.h index ab9908e..7d891245 100644 --- a/net/cookies/canonical_cookie_test_helpers.h +++ b/net/cookies/canonical_cookie_test_helpers.h
@@ -6,6 +6,8 @@ #define NET_COOKIES_CANONICAL_COOKIE_TEST_HELPERS_H_ #include <string> +#include <utility> +#include <vector> #include "base/strings/string_split.h" #include "net/cookies/canonical_cookie.h"
diff --git a/net/cookies/canonical_cookie_unittest.cc b/net/cookies/canonical_cookie_unittest.cc index 9bff880..47a00bc 100644 --- a/net/cookies/canonical_cookie_unittest.cc +++ b/net/cookies/canonical_cookie_unittest.cc
@@ -4,6 +4,10 @@ #include "net/cookies/canonical_cookie.h" +#include <memory> +#include <string> +#include <vector> + #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" #include "build/build_config.h"
diff --git a/net/cookies/cookie_access_delegate.h b/net/cookies/cookie_access_delegate.h index 0dfba9e..1899a4d 100644 --- a/net/cookies/cookie_access_delegate.h +++ b/net/cookies/cookie_access_delegate.h
@@ -5,6 +5,8 @@ #ifndef NET_COOKIES_COOKIE_ACCESS_DELEGATE_H_ #define NET_COOKIES_COOKIE_ACCESS_DELEGATE_H_ +#include <set> + #include "base/containers/flat_map.h" #include "net/base/net_export.h" #include "net/cookies/canonical_cookie.h"
diff --git a/net/cookies/cookie_inclusion_status.cc b/net/cookies/cookie_inclusion_status.cc index 3dc2527..4634257 100644 --- a/net/cookies/cookie_inclusion_status.cc +++ b/net/cookies/cookie_inclusion_status.cc
@@ -4,6 +4,9 @@ #include "net/cookies/cookie_inclusion_status.h" +#include <initializer_list> +#include <utility> + #include "base/strings/strcat.h" #include "url/gurl.h"
diff --git a/net/cookies/cookie_monster.cc b/net/cookies/cookie_monster.cc index 9c482b0..aca9530 100644 --- a/net/cookies/cookie_monster.cc +++ b/net/cookies/cookie_monster.cc
@@ -47,6 +47,7 @@ #include <functional> #include <numeric> #include <set> +#include <utility> #include "base/bind.h" #include "base/callback.h"
diff --git a/net/cookies/cookie_monster.h b/net/cookies/cookie_monster.h index 8efa8a7..324c1d4 100644 --- a/net/cookies/cookie_monster.h +++ b/net/cookies/cookie_monster.h
@@ -14,7 +14,6 @@ #include <memory> #include <set> #include <string> -#include <utility> #include <vector> #include "base/callback_forward.h"
diff --git a/net/cookies/cookie_monster_change_dispatcher.cc b/net/cookies/cookie_monster_change_dispatcher.cc index 2ab3f551..f724199 100644 --- a/net/cookies/cookie_monster_change_dispatcher.cc +++ b/net/cookies/cookie_monster_change_dispatcher.cc
@@ -4,6 +4,8 @@ #include "net/cookies/cookie_monster_change_dispatcher.h" +#include <utility> + #include "base/bind.h" #include "base/strings/string_piece.h" #include "base/task/task_runner.h"
diff --git a/net/cookies/cookie_monster_perftest.cc b/net/cookies/cookie_monster_perftest.cc index 3d9746c..4acddef 100644 --- a/net/cookies/cookie_monster_perftest.cc +++ b/net/cookies/cookie_monster_perftest.cc
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include <algorithm> #include <memory> +#include <utility> #include "base/bind.h" #include "base/memory/ref_counted.h"
diff --git a/net/cookies/cookie_monster_store_test.h b/net/cookies/cookie_monster_store_test.h index 190191d..8f3b96a 100644 --- a/net/cookies/cookie_monster_store_test.h +++ b/net/cookies/cookie_monster_store_test.h
@@ -15,7 +15,6 @@ #include <map> #include <memory> #include <string> -#include <tuple> #include <utility> #include <vector>
diff --git a/net/cookies/cookie_monster_unittest.cc b/net/cookies/cookie_monster_unittest.cc index 4bf5073..95d389b 100644 --- a/net/cookies/cookie_monster_unittest.cc +++ b/net/cookies/cookie_monster_unittest.cc
@@ -9,6 +9,7 @@ #include <algorithm> #include <memory> #include <string> +#include <utility> #include <vector> #include "base/bind.h"
diff --git a/net/cookies/cookie_options.cc b/net/cookies/cookie_options.cc index 685647c..4dc8768 100644 --- a/net/cookies/cookie_options.cc +++ b/net/cookies/cookie_options.cc
@@ -6,6 +6,8 @@ #include "net/cookies/cookie_options.h" +#include <tuple> + #include "base/metrics/histogram_functions.h" #include "net/cookies/cookie_util.h" #include "net/cookies/same_party_context.h"
diff --git a/net/cookies/cookie_options.h b/net/cookies/cookie_options.h index 76d3b23dd..1358903e 100644 --- a/net/cookies/cookie_options.h +++ b/net/cookies/cookie_options.h
@@ -8,7 +8,6 @@ #define NET_COOKIES_COOKIE_OPTIONS_H_ #include <ostream> -#include <set> #include "net/base/net_export.h" #include "net/cookies/cookie_constants.h"
diff --git a/net/cookies/cookie_partition_key.cc b/net/cookies/cookie_partition_key.cc index ac98222..16367d7e 100644 --- a/net/cookies/cookie_partition_key.cc +++ b/net/cookies/cookie_partition_key.cc
@@ -4,6 +4,8 @@ #include "net/cookies/cookie_partition_key.h" +#include <tuple> + #include "base/feature_list.h" #include "net/base/features.h" #include "net/cookies/cookie_constants.h"
diff --git a/net/cookies/cookie_partition_key_fuzzer.cc b/net/cookies/cookie_partition_key_fuzzer.cc index 0770838..6ed8006 100644 --- a/net/cookies/cookie_partition_key_fuzzer.cc +++ b/net/cookies/cookie_partition_key_fuzzer.cc
@@ -4,6 +4,7 @@ #include <stddef.h> #include <stdint.h> +#include <string> #include <fuzzer/FuzzedDataProvider.h>
diff --git a/net/cookies/cookie_partition_key_unittest.cc b/net/cookies/cookie_partition_key_unittest.cc index 1c7a1831..ed50953 100644 --- a/net/cookies/cookie_partition_key_unittest.cc +++ b/net/cookies/cookie_partition_key_unittest.cc
@@ -5,6 +5,8 @@ #ifndef NET_COOKIES_COOKIE_PARTITION_KEY_UNITTEST_H_ #define NET_COOKIES_COOKIE_PARTITION_KEY_UNITTEST_H_ +#include <string> + #include "net/cookies/cookie_partition_key.h" #include "base/test/scoped_feature_list.h" #include "net/base/features.h"
diff --git a/net/cookies/cookie_partition_keychain.h b/net/cookies/cookie_partition_keychain.h index da1ce61..f5e7f13 100644 --- a/net/cookies/cookie_partition_keychain.h +++ b/net/cookies/cookie_partition_keychain.h
@@ -5,7 +5,6 @@ #ifndef NET_COOKIES_COOKIE_PARTITION_KEYCHAIN_H_ #define NET_COOKIES_COOKIE_PARTITION_KEYCHAIN_H_ -#include <set> #include <vector> #include "net/base/net_export.h"
diff --git a/net/cookies/cookie_store.cc b/net/cookies/cookie_store.cc index adc34fb..89e2761 100644 --- a/net/cookies/cookie_store.cc +++ b/net/cookies/cookie_store.cc
@@ -4,6 +4,8 @@ #include "net/cookies/cookie_store.h" +#include <utility> + #include "base/bind.h" #include "base/callback.h"
diff --git a/net/cookies/cookie_store_test_helpers.cc b/net/cookies/cookie_store_test_helpers.cc index f413abe..fb963c99 100644 --- a/net/cookies/cookie_store_test_helpers.cc +++ b/net/cookies/cookie_store_test_helpers.cc
@@ -4,6 +4,8 @@ #include "net/cookies/cookie_store_test_helpers.h" +#include <utility> + #include "base/bind.h" #include "base/location.h" #include "base/strings/string_util.h"
diff --git a/net/cookies/cookie_store_test_helpers.h b/net/cookies/cookie_store_test_helpers.h index 864a139..df553e3 100644 --- a/net/cookies/cookie_store_test_helpers.h +++ b/net/cookies/cookie_store_test_helpers.h
@@ -7,6 +7,7 @@ #include "net/cookies/cookie_monster.h" +#include <memory> #include <string> #include <vector>
diff --git a/net/cookies/cookie_store_unittest.h b/net/cookies/cookie_store_unittest.h index f439153e..80c5c973 100644 --- a/net/cookies/cookie_store_unittest.h +++ b/net/cookies/cookie_store_unittest.h
@@ -10,6 +10,7 @@ #include <memory> #include <set> #include <string> +#include <utility> #include <vector> #include "base/bind.h"
diff --git a/net/cookies/cookie_util.cc b/net/cookies/cookie_util.cc index 89618a9..1446bc4 100644 --- a/net/cookies/cookie_util.cc +++ b/net/cookies/cookie_util.cc
@@ -6,6 +6,7 @@ #include <cstdio> #include <cstdlib> +#include <utility> #include "base/bind.h" #include "base/callback.h"
diff --git a/net/cookies/cookie_util.h b/net/cookies/cookie_util.h index 0a6884c..8da0455 100644 --- a/net/cookies/cookie_util.h +++ b/net/cookies/cookie_util.h
@@ -6,7 +6,6 @@ #define NET_COOKIES_COOKIE_UTIL_H_ #include <string> -#include <utility> #include <vector> #include "base/callback_forward.h"
diff --git a/net/cookies/cookie_util_unittest.cc b/net/cookies/cookie_util_unittest.cc index 2cedc33..a8a411eb 100644 --- a/net/cookies/cookie_util_unittest.cc +++ b/net/cookies/cookie_util_unittest.cc
@@ -3,8 +3,11 @@ // found in the LICENSE file. #include <algorithm> +#include <memory> #include <string> +#include <tuple> #include <utility> +#include <vector> #include "base/callback.h" #include "base/containers/contains.h"
diff --git a/net/cookies/parse_cookie_line_fuzzer.cc b/net/cookies/parse_cookie_line_fuzzer.cc index 3bb8dd88..50420ec 100644 --- a/net/cookies/parse_cookie_line_fuzzer.cc +++ b/net/cookies/parse_cookie_line_fuzzer.cc
@@ -4,6 +4,7 @@ #include <stddef.h> #include <stdint.h> +#include <string> #include <fuzzer/FuzzedDataProvider.h>
diff --git a/net/cookies/parsed_cookie.h b/net/cookies/parsed_cookie.h index 897b7ec1d..cdad3939 100644 --- a/net/cookies/parsed_cookie.h +++ b/net/cookies/parsed_cookie.h
@@ -8,6 +8,7 @@ #include <stddef.h> #include <string> +#include <utility> #include <vector> #include "net/base/net_export.h"
diff --git a/net/cookies/same_party_context.cc b/net/cookies/same_party_context.cc index 70d0dd0..43aad64 100644 --- a/net/cookies/same_party_context.cc +++ b/net/cookies/same_party_context.cc
@@ -4,6 +4,8 @@ #include "net/cookies/same_party_context.h" +#include <tuple> + #include "net/cookies/cookie_constants.h" namespace net {
diff --git a/net/cookies/site_for_cookies.cc b/net/cookies/site_for_cookies.cc index 5907339ec..357867b5 100644 --- a/net/cookies/site_for_cookies.cc +++ b/net/cookies/site_for_cookies.cc
@@ -4,7 +4,7 @@ #include "net/cookies/site_for_cookies.h" -#include <tuple> +#include <utility> #include "base/strings/strcat.h" #include "base/strings/string_util.h"
diff --git a/net/cookies/site_for_cookies_unittest.cc b/net/cookies/site_for_cookies_unittest.cc index bf20aef..33312b6 100644 --- a/net/cookies/site_for_cookies_unittest.cc +++ b/net/cookies/site_for_cookies_unittest.cc
@@ -4,6 +4,7 @@ #include "net/cookies/site_for_cookies.h" +#include <string> #include <vector> #include "base/strings/strcat.h"
diff --git a/net/cookies/test_cookie_access_delegate.h b/net/cookies/test_cookie_access_delegate.h index d04e9e6a..58a9d91e 100644 --- a/net/cookies/test_cookie_access_delegate.h +++ b/net/cookies/test_cookie_access_delegate.h
@@ -6,7 +6,10 @@ #define NET_COOKIES_TEST_COOKIE_ACCESS_DELEGATE_H_ #include <map> +#include <set> +#include <string> +#include "base/containers/flat_map.h" #include "net/cookies/cookie_access_delegate.h" #include "net/cookies/cookie_constants.h" #include "net/cookies/same_party_context.h"
diff --git a/net/socket/client_socket_pool.cc b/net/socket/client_socket_pool.cc index d56a35c..cb9cd4c4 100644 --- a/net/socket/client_socket_pool.cc +++ b/net/socket/client_socket_pool.cc
@@ -153,11 +153,9 @@ void ClientSocketPool::NetLogTcpClientSocketPoolRequestedSocket( const NetLogWithSource& net_log, const GroupId& group_id) { - if (net_log.IsCapturing()) { - // TODO(eroman): Split out the host and port parameters. - net_log.AddEvent(NetLogEventType::TCP_CLIENT_SOCKET_POOL_REQUESTED_SOCKET, - [&] { return NetLogGroupIdParams(group_id); }); - } + // TODO(eroman): Split out the host and port parameters. + net_log.AddEvent(NetLogEventType::TCP_CLIENT_SOCKET_POOL_REQUESTED_SOCKET, + [&] { return NetLogGroupIdParams(group_id); }); } base::Value ClientSocketPool::NetLogGroupIdParams(const GroupId& group_id) {
diff --git a/net/socket/transport_client_socket_pool.cc b/net/socket/transport_client_socket_pool.cc index d9d9dca..b47590a 100644 --- a/net/socket/transport_client_socket_pool.cc +++ b/net/socket/transport_client_socket_pool.cc
@@ -275,11 +275,9 @@ const absl::optional<NetworkTrafficAnnotationTag>& proxy_annotation_tag, int num_sockets, const NetLogWithSource& net_log) { - if (net_log.IsCapturing()) { - // TODO(eroman): Split out the host and port parameters. - net_log.AddEvent(NetLogEventType::TCP_CLIENT_SOCKET_POOL_REQUESTED_SOCKETS, - [&] { return NetLogGroupIdParams(group_id); }); - } + // TODO(eroman): Split out the host and port parameters. + net_log.AddEvent(NetLogEventType::TCP_CLIENT_SOCKET_POOL_REQUESTED_SOCKETS, + [&] { return NetLogGroupIdParams(group_id); }); Request request(nullptr /* no handle */, CompletionOnceCallback(), ProxyAuthCallback(), IDLE, SocketTag(),
diff --git a/printing/test_printing_context.cc b/printing/test_printing_context.cc index 3d7c8e5..6675c12 100644 --- a/printing/test_printing_context.cc +++ b/printing/test_printing_context.cc
@@ -12,6 +12,7 @@ #include "base/notreached.h" #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" +#include "printing/buildflags/buildflags.h" #include "printing/mojom/print.mojom.h" #include "printing/print_settings.h" #include "printing/printing_context.h" @@ -99,6 +100,9 @@ mojom::ResultCode TestPrintingContext::NewDocument( const std::u16string& document_name) { + if (!skip_system_calls() && new_document_blocked_by_permissions_) + return mojom::ResultCode::kAccessDenied; + // No-op. return mojom::ResultCode::kSuccess; }
diff --git a/printing/test_printing_context.h b/printing/test_printing_context.h index 4e515996..8eeeb8b 100644 --- a/printing/test_printing_context.h +++ b/printing/test_printing_context.h
@@ -43,6 +43,11 @@ void SetDeviceSettings(const std::string& device_name, std::unique_ptr<PrintSettings> settings); + // Enables tests to fail with an access-denied error. + void SetNewDocumentBlockedByPermissions() { + new_document_blocked_by_permissions_ = true; + } + // PrintingContext overrides: void AskUserForSettings(int max_pages, bool has_selection, @@ -66,6 +71,7 @@ private: base::flat_map<std::string, std::unique_ptr<PrintSettings>> device_settings_; + bool new_document_blocked_by_permissions_ = false; }; } // namespace printing
diff --git a/services/audio/output_device_mixer_impl.cc b/services/audio/output_device_mixer_impl.cc index d1f57df..85df85ac 100644 --- a/services/audio/output_device_mixer_impl.cc +++ b/services/audio/output_device_mixer_impl.cc
@@ -386,7 +386,6 @@ DCHECK(mixing_graph_output_params_.IsValid()); DCHECK_EQ(mixing_graph_output_params_.format(), media::AudioParameters::AUDIO_PCM_LOW_LATENCY); - DCHECK(!media::AudioDeviceDescription::IsDefaultDevice(device_id)); TRACE_EVENT_NESTABLE_ASYNC_BEGIN1(TRACE_DISABLED_BY_DEFAULT("audio"), "OutputDeviceMixerImpl", this, "device_id", device_id);
diff --git a/services/audio/output_device_mixer_impl_unittest.cc b/services/audio/output_device_mixer_impl_unittest.cc index ce62a983..3d7fa1a4 100644 --- a/services/audio/output_device_mixer_impl_unittest.cc +++ b/services/audio/output_device_mixer_impl_unittest.cc
@@ -23,6 +23,8 @@ using media::AudioOutputStream; +const std::string kDeviceId = "device-id"; + MATCHER_P(AudioParamsEq, other, "AudioParameters matcher") { return arg.Equals(other); } @@ -173,7 +175,7 @@ MixingGraph::OnErrorCallback on_error_cb_; }; -class OutputDeviceMixerImplTest : public testing::TestWithParam<int> { +class OutputDeviceMixerImplTestBase { protected: enum class PlaybackMode { kMixing, kIndependent }; @@ -207,13 +209,14 @@ // Creates the mixer for testing, passing callbacks to produce mock // MixingGraph and mock physical output stream_under_test. - std::unique_ptr<OutputDeviceMixer> CreateMixerUnderTest() { + std::unique_ptr<OutputDeviceMixer> CreateMixerUnderTest( + const std::string& device_id = kDeviceId) { auto mixer = std::make_unique<OutputDeviceMixerImpl>( - kDeviceId, mixer_output_params_, - base::BindOnce(&OutputDeviceMixerImplTest::CreateMockMixingGraph, + device_id, mixer_output_params_, + base::BindOnce(&OutputDeviceMixerImplTestBase::CreateMockMixingGraph, base::Unretained(this)), - base::BindRepeating(&OutputDeviceMixerImplTest::CreateOutputStream, - base::Unretained(this))); + base::BindRepeating(&OutputDeviceMixerImplTestBase::CreateOutputStream, + base::Unretained(this), device_id)); return mixer; } @@ -224,12 +227,12 @@ EXPECT_LE(mix_track_mocks_in_use_count_, mix_track_mocks_.size() - 1); const media::AudioParameters params = mix_track_mocks_[mix_track_mocks_in_use_count_].params; - return { - mixer->MakeMixableStream( - params, base::BindOnce( - &OutputDeviceMixerImplTest::OnDeviceChangeForMixMember, - base::Unretained(this), params)), - &mix_track_mocks_[mix_track_mocks_in_use_count_++]}; + return {mixer->MakeMixableStream( + params, + base::BindOnce( + &OutputDeviceMixerImplTestBase::OnDeviceChangeForMixMember, + base::Unretained(this), params)), + &mix_track_mocks_[mix_track_mocks_in_use_count_++]}; } // Opens a MixabeOutputStream created by the mixer under test and sets @@ -397,9 +400,10 @@ media::CHANNEL_LAYOUT_STEREO, 48000, 5}; private: - AudioOutputStream* CreateOutputStream(const std::string& device_id, + AudioOutputStream* CreateOutputStream(const std::string& expected_device_id, + const std::string& device_id, const media::AudioParameters& params) { - EXPECT_EQ(device_id, kDeviceId); + EXPECT_EQ(device_id, expected_device_id); if (!MockCreateOutputStream(params)) return nullptr; // Fail stream creation. if (params.Equals(mixer_output_params_)) @@ -413,8 +417,9 @@ MixingGraph::OnMoreDataCallback on_more_data_cb, MixingGraph::OnErrorCallback on_error_cb) { auto mock_mixing_graph = std::make_unique<StrictMock<MockMixingGraph>>( - base::BindRepeating(&OutputDeviceMixerImplTest::CreateMockGraphInput, - base::Unretained(this)), + base::BindRepeating( + &OutputDeviceMixerImplTestBase::CreateMockGraphInput, + base::Unretained(this)), std::move(on_more_data_cb), std::move(on_error_cb)); mock_mixing_graph_ = mock_mixing_graph.get(); return mock_mixing_graph; @@ -441,8 +446,6 @@ base::test::SingleThreadTaskEnvironment task_environment_{ base::test::SingleThreadTaskEnvironment::TimeSource::MOCK_TIME}; - const std::string kDeviceId = "device-id"; - // A set of mocks for the data associated with MixableOutputStream; each mock // is identfied by its MixTrackMock::|params|.frames_per_buffer(). // To create mixable_stream output streams_under_test the tests call @@ -459,8 +462,15 @@ bool mixing_graph_output_stream_not_running_ = true; }; -TEST_F(OutputDeviceMixerImplTest, OneUmixedStream_CreateClose) { - std::unique_ptr<OutputDeviceMixer> mixer = CreateMixerUnderTest(); +class OutputDeviceMixerImplTest : public OutputDeviceMixerImplTestBase, + public testing::TestWithParam<int> {}; + +class OutputDeviceMixerImplTestWithDefault + : public OutputDeviceMixerImplTestBase, + public testing::TestWithParam<std::string> {}; + +TEST_P(OutputDeviceMixerImplTestWithDefault, OneUmixedStream_CreateClose) { + std::unique_ptr<OutputDeviceMixer> mixer = CreateMixerUnderTest(GetParam()); StreamUnderTest stream_under_test = CreateNextStreamUnderTest(mixer.get()); // Physical output streams are created only on Open(). @@ -545,8 +555,8 @@ stream_under_test.mixable_stream->Close(); } -TEST_F(OutputDeviceMixerImplTest, OneUmixedStream_CreateOpenClose) { - std::unique_ptr<OutputDeviceMixer> mixer = CreateMixerUnderTest(); +TEST_P(OutputDeviceMixerImplTestWithDefault, OneUmixedStream_CreateOpenClose) { + std::unique_ptr<OutputDeviceMixer> mixer = CreateMixerUnderTest(GetParam()); StreamUnderTest stream_under_test = CreateNextStreamUnderTest(mixer.get()); OpenAndVerifyStreamUnderTest(stream_under_test); CloseAndVerifyStreamUnderTest(stream_under_test); @@ -1241,9 +1251,13 @@ mixer->StopListening(&listener); } -INSTANTIATE_TEST_CASE_P(, - OutputDeviceMixerImplTest, - testing::Values(0, 1, 2, 3)); +INSTANTIATE_TEST_SUITE_P(, + OutputDeviceMixerImplTest, + testing::Values(0, 1, 2, 3)); + +INSTANTIATE_TEST_SUITE_P(, + OutputDeviceMixerImplTestWithDefault, + testing::Values(kDeviceId, "")); } // namespace
diff --git a/services/audio/output_device_mixer_manager.cc b/services/audio/output_device_mixer_manager.cc index 658540d..5713195 100644 --- a/services/audio/output_device_mixer_manager.cc +++ b/services/audio/output_device_mixer_manager.cc
@@ -14,6 +14,20 @@ #include "services/audio/device_listener_output_stream.h" #include "services/audio/output_device_mixer.h" +namespace { + +const char kNormalizedDefaultDeviceId[] = ""; + +// Helper function which returns a consistent representation of the default +// device ID. +std::string NormalizeIfDefault(const std::string& device_id) { + return media::AudioDeviceDescription::IsDefaultDevice(device_id) + ? kNormalizedDefaultDeviceId + : device_id; +} + +} // namespace + namespace media { // Helper class to get access to the protected AudioManager API. @@ -22,10 +36,13 @@ explicit AudioManagerPowerUser(AudioManager* audio_manager) : audio_manager_(audio_manager) {} std::string GetDefaultOutputDeviceID() { - return audio_manager_->GetDefaultOutputDeviceID(); + std::string device_id = audio_manager_->GetDefaultOutputDeviceID(); + return device_id.empty() ? kNormalizedDefaultDeviceId : device_id; } AudioParameters GetOutputStreamParameters(const std::string& device_id) { - return audio_manager_->GetOutputStreamParameters(device_id); + return media::AudioDeviceDescription::IsDefaultDevice(device_id) + ? audio_manager_->GetDefaultOutputStreamParameters() + : audio_manager_->GetOutputStreamParameters(device_id); } private: @@ -36,24 +53,19 @@ namespace audio { -namespace { - -// Helper function to make sure the default device ID is consistent. -std::string UniformizeDefaultDeviceId(const std::string& device_id) { - if (media::AudioDeviceDescription::IsDefaultDevice(device_id)) - return ""; - - return device_id; -} - -} // namespace - OutputDeviceMixerManager::OutputDeviceMixerManager( media::AudioManager* audio_manager, OutputDeviceMixer::CreateCallback create_mixer_callback) : audio_manager_(audio_manager), + current_default_device_id_(media::AudioManagerPowerUser(audio_manager_) + .GetDefaultOutputDeviceID()), create_mixer_callback_(std::move(create_mixer_callback)), - device_change_weak_ptr_factory_(this) {} + device_change_weak_ptr_factory_(this) { + // This should be a static_assert, but there is no compile time way to run + // AudioDeviceDescription::IsDefaultDevice(). + DCHECK(media::AudioDeviceDescription::IsDefaultDevice( + kNormalizedDefaultDeviceId)); +} OutputDeviceMixerManager::~OutputDeviceMixerManager() { DCHECK_CALLED_ON_VALID_SEQUENCE(owning_sequence_); @@ -71,12 +83,12 @@ device_id, params); } - auto physical_device_id = ConvertToPhysicalDeviceId(device_id); + std::string mixer_device_id = ToMixerDeviceId(device_id); - OutputDeviceMixer* mixer = FindMixer(physical_device_id); + OutputDeviceMixer* mixer = FindMixer(mixer_device_id); if (!mixer) - mixer = AddMixer(physical_device_id); + mixer = AddMixer(mixer_device_id); // Add mixer can still fail. if (!mixer) @@ -91,7 +103,8 @@ "OutputDeviceMixerManager::OnDeviceChange"); DCHECK_CALLED_ON_VALID_SEQUENCE(owning_sequence_); - current_default_device_id_ = absl::nullopt; + current_default_device_id_ = + media::AudioManagerPowerUser(audio_manager_).GetDefaultOutputDeviceID(); // Invalidate WeakPtrs, cancelling any pending device change callbacks // generated by the same device change event. @@ -110,14 +123,14 @@ const std::string& output_device_id) { DCHECK_CALLED_ON_VALID_SEQUENCE(owning_sequence_); - std::string device_id = UniformizeDefaultDeviceId(output_device_id); + std::string device_id = NormalizeIfDefault(output_device_id); ListenerSet& listeners = device_id_to_listeners_[device_id]; bool insert_succeeded = listeners.insert(listener).second; DCHECK(insert_succeeded); // |listener| shouldn't already be in the set. - OutputDeviceMixer* mixer = FindMixer(ConvertToPhysicalDeviceId(device_id)); + OutputDeviceMixer* mixer = FindMixer(ToMixerDeviceId(device_id)); if (!mixer) return; @@ -130,7 +143,7 @@ const std::string& output_device_id) { DCHECK_CALLED_ON_VALID_SEQUENCE(owning_sequence_); - std::string device_id = UniformizeDefaultDeviceId(output_device_id); + std::string device_id = NormalizeIfDefault(output_device_id); ListenerSet& listeners = device_id_to_listeners_.at(device_id); @@ -143,7 +156,7 @@ if (listeners.empty()) device_id_to_listeners_.erase(device_id); - OutputDeviceMixer* mixer = FindMixer(ConvertToPhysicalDeviceId(device_id)); + OutputDeviceMixer* mixer = FindMixer(ToMixerDeviceId(device_id)); // The mixer was never created, because there was no playback to that device // (possibly after a device device change). Listening never started, so there @@ -154,30 +167,22 @@ mixer->StopListening(listener); } -const std::string& OutputDeviceMixerManager::ConvertToPhysicalDeviceId( +std::string OutputDeviceMixerManager::ToMixerDeviceId( const std::string& device_id) { if (media::AudioDeviceDescription::IsDefaultDevice(device_id)) - return GetCurrentDefaultDeviceId(); + return kNormalizedDefaultDeviceId; - return device_id; -} - -const std::string& OutputDeviceMixerManager::GetCurrentDefaultDeviceId() { - if (!current_default_device_id_.has_value()) { - current_default_device_id_ = - media::AudioManagerPowerUser(audio_manager_).GetDefaultOutputDeviceID(); - } - - return current_default_device_id_.value(); + return device_id == current_default_device_id_ ? kNormalizedDefaultDeviceId + : device_id; } OutputDeviceMixer* OutputDeviceMixerManager::FindMixer( - const std::string& physical_device_id) { + const std::string& device_id) { DCHECK_CALLED_ON_VALID_SEQUENCE(owning_sequence_); - DCHECK(!media::AudioDeviceDescription::IsDefaultDevice(physical_device_id)); + DCHECK(IsValidMixerId(device_id)); for (const auto& mixer : output_device_mixers_) { - if (mixer->device_id() == physical_device_id) + if (mixer->device_id() == device_id) return mixer.get(); } @@ -185,15 +190,15 @@ } OutputDeviceMixer* OutputDeviceMixerManager::AddMixer( - const std::string& physical_device_id) { + const std::string& device_id) { DCHECK_CALLED_ON_VALID_SEQUENCE(owning_sequence_); - DCHECK(!media::AudioDeviceDescription::IsDefaultDevice(physical_device_id)); + DCHECK(IsValidMixerId(device_id)); - DCHECK(!FindMixer(physical_device_id)); + DCHECK(!FindMixer(device_id)); media::AudioParameters output_params = media::AudioManagerPowerUser(audio_manager_) - .GetOutputStreamParameters(physical_device_id); + .GetOutputStreamParameters(device_id); if (!output_params.IsValid()) { LOG(ERROR) << "Adding OutputDeviceMixer failed: invalid output parameters"; @@ -207,13 +212,12 @@ // are owned by |this|. std::unique_ptr<OutputDeviceMixer> output_device_mixer = create_mixer_callback_.Run( - physical_device_id, output_params, + device_id, output_params, base::BindRepeating(&OutputDeviceMixerManager::CreateMixerOwnedStream, base::Unretained(this)), audio_manager_->GetTaskRunner()); - // The |physical_device_id| might no longer be valid, e.g. if a device was - // unplugged. + // The |device_id| might no longer be valid, e.g. if a device was unplugged. if (!output_device_mixer) { LOG(ERROR) << "Adding OutputDeviceMixer failed: creation error"; return nullptr; @@ -222,12 +226,15 @@ auto* mixer = output_device_mixer.get(); output_device_mixers_.push_back(std::move(output_device_mixer)); - AttachListenersById(physical_device_id, mixer); + AttachListenersById(device_id, mixer); - // If we just created a mixer for the current default device ID, also attach - // the "default device" listeners. - if (physical_device_id == GetCurrentDefaultDeviceId()) - AttachListenersById(UniformizeDefaultDeviceId(""), mixer); + // We only create a single "default" mixer for both kNormalizedDefaultDeviceId + // and |current_default_device_id_|. If we just created this "default" mixer, + // also attach any listeners matching a physical |current_default_device_id_|. + if (device_id == kNormalizedDefaultDeviceId && + current_default_device_id_ != kNormalizedDefaultDeviceId) { + AttachListenersById(current_default_device_id_, mixer); + } return mixer; } @@ -235,6 +242,8 @@ void OutputDeviceMixerManager::AttachListenersById(const std::string& device_id, OutputDeviceMixer* mixer) { DCHECK_CALLED_ON_VALID_SEQUENCE(owning_sequence_); + DCHECK(!media::AudioDeviceDescription::IsDefaultDevice(device_id) || + device_id == kNormalizedDefaultDeviceId); DCHECK(mixer); auto listeners_it = device_id_to_listeners_.find(device_id); @@ -284,4 +293,9 @@ std::move(on_device_change_callback)); } +bool OutputDeviceMixerManager::IsValidMixerId(const std::string& device_id) { + return device_id == kNormalizedDefaultDeviceId || + device_id != current_default_device_id_; +} + } // namespace audio
diff --git a/services/audio/output_device_mixer_manager.h b/services/audio/output_device_mixer_manager.h index dfd969b4..9a57306e7 100644 --- a/services/audio/output_device_mixer_manager.h +++ b/services/audio/output_device_mixer_manager.h
@@ -18,7 +18,6 @@ #include "services/audio/device_output_listener.h" #include "services/audio/output_device_mixer.h" #include "services/audio/reference_output.h" -#include "third_party/abseil-cpp/absl/types/optional.h" namespace media { class AudioManager; @@ -65,13 +64,11 @@ // Forwards device change notifications to OutputDeviceMixers. void OnDeviceChange(); - // Returns the current physical default device ID, which can change after - // OnDeviceChange(). - const std::string& GetCurrentDefaultDeviceId(); - - // Returns |device_id|, or the current default device ID if |device_id| is - // the default ID. - const std::string& ConvertToPhysicalDeviceId(const std::string& device_id); + // Helper function which merges "default IDs" (as defined by + // AudioDeviceDescription::IsDefaultId()) and physical IDs matching + // GetCurrentDefaultPhysicalDeviceIdOrEmpty() into the same normalized default + // ID. This guarantees we create a single "default ID" OutputDeviceMixer. + std::string ToMixerDeviceId(const std::string& device_id); // Returns a callback that call OnDeviceChange(), and that can be cancelled // through invalidating |device_change_weak_ptr_factory_|. @@ -96,9 +93,15 @@ // Creates and returns a new mixer, or nullptr if the creation failed. OutputDeviceMixer* AddMixer(const std::string& physical_device_id); + bool IsValidMixerId(const std::string& device_id); + SEQUENCE_CHECKER(owning_sequence_); - absl::optional<std::string> current_default_device_id_ = absl::nullopt; const raw_ptr<media::AudioManager> audio_manager_; + + // Physical device ID of the current default device, or kNormalizedDefaultId + // if not supported by the platform. + std::string current_default_device_id_; + OutputDeviceMixer::CreateCallback create_mixer_callback_; OutputDeviceMixers output_device_mixers_; DeviceToListenersMap device_id_to_listeners_;
diff --git a/services/audio/output_device_mixer_manager_unittest.cc b/services/audio/output_device_mixer_manager_unittest.cc index a57fa93f..b91ebf4 100644 --- a/services/audio/output_device_mixer_manager_unittest.cc +++ b/services/audio/output_device_mixer_manager_unittest.cc
@@ -7,6 +7,7 @@ #include "base/test/bind.h" #include "base/test/gmock_callback_support.h" #include "base/test/task_environment.h" +#include "media/audio/audio_device_description.h" #include "media/audio/audio_io.h" #include "media/audio/mock_audio_manager.h" #include "media/audio/test_audio_thread.h" @@ -58,8 +59,9 @@ const std::string kFakeDeviceId = "0x1234"; const std::string kOtherFakeDeviceId = "0x9876"; -const std::string kDefaultDeviceId = "default"; -const std::string kEmptyDeviceId = ""; +const std::string kEmptyDeviceId = std::string(); +const std::string kNormalizedDefaultDeviceId = kEmptyDeviceId; +const auto* kDefaultDeviceId = media::AudioDeviceDescription::kDefaultDeviceId; class MockAudioOutputStream : public AudioOutputStream { public: @@ -87,6 +89,10 @@ GetOutputStreamParameters, (const std::string&), (override)); + MOCK_METHOD(AudioParameters, + GetDefaultOutputStreamParameters, + (), + (override)); MOCK_METHOD(AudioOutputStream*, MakeAudioOutputStreamProxy, @@ -126,7 +132,7 @@ : public ::testing::TestWithParam<std::string> { public: OutputDeviceMixerManagerTest() - : current_default_device_id_(kFakeDeviceId), + : current_default_physical_device_id_(kFakeDeviceId), default_params_(AudioParameters::Format::AUDIO_PCM_LOW_LATENCY, media::ChannelLayout::CHANNEL_LAYOUT_STEREO, /*sample_rate=*/8000, @@ -139,9 +145,18 @@ EXPECT_CALL(audio_manager_, GetOutputStreamParameters(_)) .WillRepeatedly(Return(default_params_)); + EXPECT_CALL(audio_manager_, GetDefaultOutputStreamParameters()) + .WillRepeatedly(Return(default_params_)); + EXPECT_CALL(audio_manager_, GetDefaultOutputDeviceID()).WillRepeatedly([&] { - return current_default_device_id_; + return audio_manager_supports_default_physical_id_ + ? current_default_physical_device_id_ + : kEmptyDeviceId; }); + + // Force |output_mixer_manager_| to pick up the latest default device ID + // from AudioManager::GetDefaultOutputDeviceID(). + output_mixer_manager_.OnDeviceChange(); } ~OutputDeviceMixerManagerTest() override { audio_manager_.Shutdown(); } @@ -154,7 +169,22 @@ scoped_refptr<base::SingleThreadTaskRunner>)); protected: - MockOutputDeviceMixer* SetUpMockMixerCreation(std::string device_id) { + std::string current_default_physical_device() { + return current_default_physical_device_id_; + } + + void SetAudioManagerGetDefaultOutputDeviceIdSupport(bool support) { + bool needs_device_change = + audio_manager_supports_default_physical_id_ != support; + audio_manager_supports_default_physical_id_ = support; + + // Force |output_mixer_manager_| to pick up the latest default device ID. + if (needs_device_change) + output_mixer_manager_.OnDeviceChange(); + } + + MockOutputDeviceMixer* SetUpMockMixerCreation( + std::string device_id = kNormalizedDefaultDeviceId) { auto mock_output_mixer = std::make_unique<NiceMock<MockOutputDeviceMixer>>(device_id); MockOutputDeviceMixer* mixer = mock_output_mixer.get(); @@ -168,7 +198,8 @@ // Sets up a mock OutputDeviceMixer for creation, which will only return // nullptr when creating streams. - MockOutputDeviceMixer* SetUpMockMixer_NoStreams(std::string device_id) { + MockOutputDeviceMixer* SetUpMockMixer_NoStreams( + std::string device_id = kNormalizedDefaultDeviceId) { MockOutputDeviceMixer* output_mixer = SetUpMockMixerCreation(device_id); EXPECT_CALL(*output_mixer, MakeMixableStream(_, _)) @@ -177,18 +208,19 @@ return output_mixer; } - std::unique_ptr<NiceMock<MockListener>> GetListenerWithStartStopExpectations( - MockOutputDeviceMixer* mixer, - int starts, - int stops) { - auto listener = std::make_unique<NiceMock<MockListener>>(); + std::unique_ptr<NiceMock<MockListener>> GetListener_MixerExpectsStartStop( + MockOutputDeviceMixer* mixer) { + return GetListenerWithStartStopExpectations(mixer, 1, 1); + } - auto* listener_ptr = listener.get(); + std::unique_ptr<NiceMock<MockListener>> GetListener_MixerExpectsStart( + MockOutputDeviceMixer* mixer) { + return GetListenerWithStartStopExpectations(mixer, 1, 0); + } - EXPECT_CALL(*mixer, StartListening(listener_ptr)).Times(starts); - EXPECT_CALL(*mixer, StopListening(listener_ptr)).Times(stops); - - return listener; + std::unique_ptr<NiceMock<MockListener>> GetListener_MixerExpectsNoCalls( + MockOutputDeviceMixer* mixer) { + return GetListenerWithStartStopExpectations(mixer, 0, 0); } void ForceOutputMixerCreation(const std::string& device_id) { @@ -197,8 +229,10 @@ } void SimulateDeviceChange( - const std::string& new_default_device_id = kFakeDeviceId) { - current_default_device_id_ = new_default_device_id; + absl::optional<std::string> new_default_physical_device = absl::nullopt) { + if (new_default_physical_device) + current_default_physical_device_id_ = *new_default_physical_device; + output_mixer_manager_.OnDeviceChange(); } @@ -213,34 +247,79 @@ // Syntactic sugar, to differentiate from base::OnceClosure in tests. base::OnceClosure GetNoopDeviceChangeCallback() { return base::DoNothing(); } - std::string current_default_device_id_; + bool audio_manager_supports_default_physical_id_ = true; + + // Simulate the value that would be returned by + // AudioManager::GetDefaultOutputDeviceId() if it is supported. + std::string current_default_physical_device_id_; + base::test::SingleThreadTaskEnvironment task_environment_; AudioParameters default_params_; NiceMock<LocalMockAudioManager> audio_manager_; OutputDeviceMixerManager output_mixer_manager_; -}; -// Used for tests that deal with the default output device, which can be -// represented as kDefaultDeviceId or kEmptyDeviceId. -class OutputDeviceMixerManagerTestWithDefault - : public OutputDeviceMixerManagerTest { - protected: - std::string default_device_id() { return GetParam(); } + private: + std::unique_ptr<NiceMock<MockListener>> GetListenerWithStartStopExpectations( + MockOutputDeviceMixer* mixer, + int starts, + int stops) { + auto listener = std::make_unique<NiceMock<MockListener>>(); + + auto* listener_ptr = listener.get(); + + EXPECT_CALL(*mixer, StartListening(listener_ptr)).Times(starts); + EXPECT_CALL(*mixer, StopListening(listener_ptr)).Times(stops); + + return listener; + } }; // Makes sure we can create an output stream for the default output device. -TEST_P(OutputDeviceMixerManagerTestWithDefault, - MakeOutputStream_ForDefaultDevice) { - MockOutputDeviceMixer* mock_mixer = - SetUpMockMixerCreation(current_default_device_id_); +TEST_F(OutputDeviceMixerManagerTest, MakeOutputStream_ForDefaultDevice) { + MockOutputDeviceMixer* default_mixer = SetUpMockMixerCreation(); MockAudioOutputStream mock_stream; - EXPECT_CALL(*mock_mixer, MakeMixableStream(ExactParams(default_params_), - ValidDeviceChangeCallback())) + EXPECT_CALL(*default_mixer, MakeMixableStream(ExactParams(default_params_), + ValidDeviceChangeCallback())) .WillOnce(Return(&mock_stream)); AudioOutputStream* out_stream = output_mixer_manager_.MakeOutputStream( - default_device_id(), default_params_, GetNoopDeviceChangeCallback()); + kDefaultDeviceId, default_params_, GetNoopDeviceChangeCallback()); + + EXPECT_EQ(&mock_stream, out_stream); +} + +// Makes sure we can create a default output stream when AudioManager doesn't +// support getting the current default ID. +TEST_F(OutputDeviceMixerManagerTest, + MakeOutputStream_ForDefaultDevice_NoGetDefaultOuputDeviceIdSupport) { + SetAudioManagerGetDefaultOutputDeviceIdSupport(false); + + MockOutputDeviceMixer* default_mixer = SetUpMockMixerCreation(); + + MockAudioOutputStream mock_stream; + EXPECT_CALL(*default_mixer, MakeMixableStream(ExactParams(default_params_), + ValidDeviceChangeCallback())) + .WillOnce(Return(&mock_stream)); + + AudioOutputStream* out_stream = output_mixer_manager_.MakeOutputStream( + kDefaultDeviceId, default_params_, GetNoopDeviceChangeCallback()); + + EXPECT_EQ(&mock_stream, out_stream); +} + +TEST_F(OutputDeviceMixerManagerTest, + MakeOutputStream_ForDefaultDevice_EmptyDeviceId) { + MockOutputDeviceMixer* default_mixer = SetUpMockMixerCreation(); + + MockAudioOutputStream mock_stream; + EXPECT_CALL(*default_mixer, MakeMixableStream(ExactParams(default_params_), + ValidDeviceChangeCallback())) + .WillOnce(Return(&mock_stream)); + + // kEmptyDeviceId should be treated the same as kDefaultDeviceId. + AudioOutputStream* out_stream = output_mixer_manager_.MakeOutputStream( + kEmptyDeviceId, default_params_, GetNoopDeviceChangeCallback()); EXPECT_EQ(&mock_stream, out_stream); } @@ -249,17 +328,44 @@ // the current default. TEST_F(OutputDeviceMixerManagerTest, MakeOutputStream_ForSpecificDeviceId_IdIsDefault) { - ASSERT_EQ(kFakeDeviceId, current_default_device_id_); + SetAudioManagerGetDefaultOutputDeviceIdSupport(true); - MockOutputDeviceMixer* mock_mixer = SetUpMockMixerCreation(kFakeDeviceId); + MockOutputDeviceMixer* default_mixer = SetUpMockMixerCreation(); MockAudioOutputStream mock_stream; - EXPECT_CALL(*mock_mixer, MakeMixableStream(ExactParams(default_params_), - ValidDeviceChangeCallback())) + EXPECT_CALL(*default_mixer, MakeMixableStream(ExactParams(default_params_), + ValidDeviceChangeCallback())) + .WillOnce(Return(&mock_stream)); + + // Getting a stream for current_default_physical_device() should create + // the |default_mixer| instead of a mixer for that physical ID. + AudioOutputStream* out_stream = output_mixer_manager_.MakeOutputStream( + current_default_physical_device(), default_params_, + GetNoopDeviceChangeCallback()); + + EXPECT_EQ(&mock_stream, out_stream); +} + +// Makes sure we can create an output stream for a device ID when +// AudioManager::GetDefaultOutputDeviceId() is unsupported. +TEST_F(OutputDeviceMixerManagerTest, + MakeOutputStream_ForSpecificDeviceId_NoGetDefaultOuputDeviceIdSupport) { + SetAudioManagerGetDefaultOutputDeviceIdSupport(false); + + // A mixer for the physical device ID should be created, instead of the + // default mixer. + MockOutputDeviceMixer* physical_device_mixer = + SetUpMockMixerCreation(current_default_physical_device()); + + MockAudioOutputStream mock_stream; + EXPECT_CALL(*physical_device_mixer, + MakeMixableStream(ExactParams(default_params_), + ValidDeviceChangeCallback())) .WillOnce(Return(&mock_stream)); AudioOutputStream* out_stream = output_mixer_manager_.MakeOutputStream( - kFakeDeviceId, default_params_, GetNoopDeviceChangeCallback()); + current_default_physical_device(), default_params_, + GetNoopDeviceChangeCallback()); EXPECT_EQ(&mock_stream, out_stream); } @@ -267,8 +373,8 @@ // Makes sure we can create an output stream a device ID for a device that is // not the default device. TEST_F(OutputDeviceMixerManagerTest, - MakeOutputStream_ForSpecificDeviceId_IdIsNotDefault) { - ASSERT_NE(kOtherFakeDeviceId, current_default_device_id_); + MakeOutputStream_ForSpecificDeviceId_IdIsNotDefaultOutput) { + ASSERT_NE(kOtherFakeDeviceId, current_default_physical_device()); MockOutputDeviceMixer* mock_mixer = SetUpMockMixerCreation(kOtherFakeDeviceId); @@ -284,6 +390,35 @@ EXPECT_EQ(&mock_stream, out_stream); } +// Makes sure we get the correct output parameters from the AudioManager when +// creating streams. +TEST_F(OutputDeviceMixerManagerTest, + MakeOutputStream_GetsDeviceOrDefaultParams) { + // Reset default test setup expectations. + testing::Mock::VerifyAndClearExpectations(&audio_manager_); + + SetUpMockMixerCreation(); + + EXPECT_CALL(audio_manager_, GetOutputStreamParameters(_)).Times(0); + EXPECT_CALL(audio_manager_, GetDefaultOutputStreamParameters()) + .WillOnce(Return(default_params_)); + + output_mixer_manager_.MakeOutputStream(kDefaultDeviceId, default_params_, + GetNoopDeviceChangeCallback()); + + testing::Mock::VerifyAndClearExpectations(this); + testing::Mock::VerifyAndClearExpectations(&audio_manager_); + + SetUpMockMixerCreation(kOtherFakeDeviceId); + + EXPECT_CALL(audio_manager_, GetDefaultOutputStreamParameters()).Times(0); + EXPECT_CALL(audio_manager_, GetOutputStreamParameters(kOtherFakeDeviceId)) + .WillOnce(Return(default_params_)); + + output_mixer_manager_.MakeOutputStream(kOtherFakeDeviceId, default_params_, + GetNoopDeviceChangeCallback()); +} + // Makes sure we still get an unmixable stream when requesting bitstream // formats. TEST_F(OutputDeviceMixerManagerTest, MakeOutputStream_WithBitstreamFormat) { @@ -299,7 +434,7 @@ /*frames_per_buffer=*/800}; AudioOutputStream* out_stream = output_mixer_manager_.MakeOutputStream( - kFakeDeviceId, bitstream_params, GetNoopDeviceChangeCallback()); + kOtherFakeDeviceId, bitstream_params, GetNoopDeviceChangeCallback()); EXPECT_TRUE(out_stream); @@ -322,20 +457,20 @@ /*frames_per_buffer=*/800}; AudioOutputStream* out_stream = output_mixer_manager_.MakeOutputStream( - kFakeDeviceId, bitstream_params, GetNoopDeviceChangeCallback()); + kOtherFakeDeviceId, bitstream_params, GetNoopDeviceChangeCallback()); EXPECT_FALSE(out_stream); } // Makes sure we handle failing to create a mixer. TEST_F(OutputDeviceMixerManagerTest, MakeOutputStream_MixerCreationFails) { - EXPECT_CALL(*this, - CreateOutputDeviceMixerCalled( - kFakeDeviceId, CompatibleParams(default_params_), _, _)) + EXPECT_CALL(*this, CreateOutputDeviceMixerCalled( + kNormalizedDefaultDeviceId, + CompatibleParams(default_params_), _, _)) .WillOnce(Return(ByMove(nullptr))); AudioOutputStream* out_stream = output_mixer_manager_.MakeOutputStream( - kFakeDeviceId, default_params_, GetNoopDeviceChangeCallback()); + kDefaultDeviceId, default_params_, GetNoopDeviceChangeCallback()); EXPECT_FALSE(out_stream); } @@ -343,14 +478,14 @@ // Makes sure we handle the case when the output mixer returns a nullptr when // creating a stream. TEST_F(OutputDeviceMixerManagerTest, MakeOutputStream_MixerReturnsNull) { - MockOutputDeviceMixer* mock_mixer = SetUpMockMixerCreation(kFakeDeviceId); + MockOutputDeviceMixer* default_mixer = SetUpMockMixerCreation(); - EXPECT_CALL(*mock_mixer, MakeMixableStream(ExactParams(default_params_), - ValidDeviceChangeCallback())) + EXPECT_CALL(*default_mixer, MakeMixableStream(ExactParams(default_params_), + ValidDeviceChangeCallback())) .WillOnce(Return(nullptr)); AudioOutputStream* out_stream = output_mixer_manager_.MakeOutputStream( - kFakeDeviceId, default_params_, GetNoopDeviceChangeCallback()); + kDefaultDeviceId, default_params_, GetNoopDeviceChangeCallback()); EXPECT_FALSE(out_stream); } @@ -358,54 +493,57 @@ // Makes sure creating multiple output streams for the same device ID re-uses // the same OutputDeviceMixer. TEST_F(OutputDeviceMixerManagerTest, MakeOutputStream_OneMixerPerId) { - MockOutputDeviceMixer* mock_mixer = SetUpMockMixerCreation(kFakeDeviceId); + MockOutputDeviceMixer* physical_id_mixer = + SetUpMockMixerCreation(kOtherFakeDeviceId); MockAudioOutputStream mock_stream_a; MockAudioOutputStream mock_stream_b; - EXPECT_CALL(*mock_mixer, MakeMixableStream(ExactParams(default_params_), - ValidDeviceChangeCallback())) + EXPECT_CALL(*physical_id_mixer, + MakeMixableStream(ExactParams(default_params_), + ValidDeviceChangeCallback())) .WillOnce(Return(&mock_stream_b)) .WillOnce(Return(&mock_stream_a)); // This call should create an OutputDeviceMixer. AudioOutputStream* out_stream_a = output_mixer_manager_.MakeOutputStream( - kFakeDeviceId, default_params_, GetNoopDeviceChangeCallback()); + kOtherFakeDeviceId, default_params_, GetNoopDeviceChangeCallback()); // This call should re-use the OutputDeviceMixer. AudioOutputStream* out_stream_b = output_mixer_manager_.MakeOutputStream( - kFakeDeviceId, default_params_, GetNoopDeviceChangeCallback()); + kOtherFakeDeviceId, default_params_, GetNoopDeviceChangeCallback()); EXPECT_NE(out_stream_a, out_stream_b); } // Makes sure creating an output stream for the "default ID" or the -// "current default device" is equivalent, and the mixers are shared. -TEST_P(OutputDeviceMixerManagerTestWithDefault, +// "current default device" is equivalent, and the mixer are shared. +TEST_F(OutputDeviceMixerManagerTest, MakeOutputStream_DefaultIdAndCurrentDefaultShareOneMixer) { - MockOutputDeviceMixer* mock_mixer = - SetUpMockMixerCreation(current_default_device_id_); + MockOutputDeviceMixer* default_mixer = SetUpMockMixerCreation(); MockAudioOutputStream mock_stream_a; MockAudioOutputStream mock_stream_b; - EXPECT_CALL(*mock_mixer, MakeMixableStream(ExactParams(default_params_), - ValidDeviceChangeCallback())) + EXPECT_CALL(*default_mixer, MakeMixableStream(ExactParams(default_params_), + ValidDeviceChangeCallback())) .WillOnce(Return(&mock_stream_b)) .WillOnce(Return(&mock_stream_a)); // This call should create an OutputDeviceMixer. AudioOutputStream* out_stream_a = output_mixer_manager_.MakeOutputStream( - current_default_device_id_, default_params_, + current_default_physical_device(), default_params_, GetNoopDeviceChangeCallback()); // This call should re-use the same OutputDeviceMixer. AudioOutputStream* out_stream_b = output_mixer_manager_.MakeOutputStream( - default_device_id(), default_params_, GetNoopDeviceChangeCallback()); + kDefaultDeviceId, default_params_, GetNoopDeviceChangeCallback()); EXPECT_NE(out_stream_a, out_stream_b); } // Makes sure we create one output mixer per device ID. TEST_F(OutputDeviceMixerManagerTest, MakeOutputStream_TwoDevicesTwoMixers) { + SetAudioManagerGetDefaultOutputDeviceIdSupport(false); + InSequence s; MockOutputDeviceMixer* mock_mixer_a = SetUpMockMixerCreation(kFakeDeviceId); @@ -433,40 +571,76 @@ EXPECT_NE(out_stream_a, out_stream_b); } -// Makes sure we get the latest default device ID each time we create a stream -// for the default device ID. -TEST_P(OutputDeviceMixerManagerTestWithDefault, - MakeOutputStream_CurrentDefaultIsUpdatedAfterDeviceChange) { - const std::string& first_default_id = current_default_device_id_; - const std::string& second_default_id = kOtherFakeDeviceId; +// Makes sure the default mixer is separate from other mixers. +TEST_F(OutputDeviceMixerManagerTest, + MakeOutputStream_DefaultMixerDistinctFromOtherMixers) { + SetAudioManagerGetDefaultOutputDeviceIdSupport(false); - ASSERT_NE(first_default_id, second_default_id); + InSequence s; + MockOutputDeviceMixer* fake_device_mixer = + SetUpMockMixerCreation(kFakeDeviceId); - MockOutputDeviceMixer* mock_mixer_a = - SetUpMockMixerCreation(first_default_id); - MockOutputDeviceMixer* mock_mixer_b = - SetUpMockMixerCreation(second_default_id); + MockAudioOutputStream fake_stream; + EXPECT_CALL(*fake_device_mixer, + MakeMixableStream(ExactParams(default_params_), + ValidDeviceChangeCallback())) + .WillOnce(Return(&fake_stream)); - MockAudioOutputStream mock_stream_a; - EXPECT_CALL(*mock_mixer_a, MakeMixableStream(ExactParams(default_params_), - ValidDeviceChangeCallback())) - .WillOnce(Return(&mock_stream_a)); + MockOutputDeviceMixer* default_mixer = SetUpMockMixerCreation(); - MockAudioOutputStream mock_stream_b; - EXPECT_CALL(*mock_mixer_b, MakeMixableStream(ExactParams(default_params_), - ValidDeviceChangeCallback())) - .WillOnce(Return(&mock_stream_b)); + MockAudioOutputStream default_stream; + EXPECT_CALL(*default_mixer, MakeMixableStream(ExactParams(default_params_), + ValidDeviceChangeCallback())) + .WillOnce(Return(&default_stream)); // Create the first OutputDeviceMixer. AudioOutputStream* out_stream_a = output_mixer_manager_.MakeOutputStream( - default_device_id(), default_params_, GetNoopDeviceChangeCallback()); - - // Force the manager to get the latest current default device ID. - SimulateDeviceChange(second_default_id); + kFakeDeviceId, default_params_, GetNoopDeviceChangeCallback()); // Create a second OutputDeviceMixer. AudioOutputStream* out_stream_b = output_mixer_manager_.MakeOutputStream( - default_device_id(), default_params_, GetNoopDeviceChangeCallback()); + kDefaultDeviceId, default_params_, GetNoopDeviceChangeCallback()); + + EXPECT_NE(out_stream_a, out_stream_b); +} + +// Makes sure we get the latest default device ID each time we create a stream +// for the default device ID. +TEST_F(OutputDeviceMixerManagerTest, + MakeOutputStream_CurrentDefaultIsUpdatedAfterDeviceChange) { + SetAudioManagerGetDefaultOutputDeviceIdSupport(true); + + MockOutputDeviceMixer* default_mixer_a = SetUpMockMixerCreation(); + + MockAudioOutputStream default_stream_a; + EXPECT_CALL(*default_mixer_a, MakeMixableStream(ExactParams(default_params_), + ValidDeviceChangeCallback())) + .WillOnce(Return(&default_stream_a)); + + // Force the creation of |default_mixer_a|. + AudioOutputStream* out_stream_a = output_mixer_manager_.MakeOutputStream( + current_default_physical_device(), default_params_, + GetNoopDeviceChangeCallback()); + + // Update the current default physical device. + ASSERT_NE(current_default_physical_device(), kOtherFakeDeviceId); + SimulateDeviceChange(/*new_default_physical_device=*/kOtherFakeDeviceId); + ASSERT_EQ(current_default_physical_device(), kOtherFakeDeviceId); + + testing::Mock::VerifyAndClearExpectations(this); + + MockOutputDeviceMixer* default_mixer_b = SetUpMockMixerCreation(); + + MockAudioOutputStream default_stream_b; + EXPECT_CALL(*default_mixer_b, MakeMixableStream(ExactParams(default_params_), + ValidDeviceChangeCallback())) + .WillOnce(Return(&default_stream_b)); + + // Force the creation of |default_mixer_b|, with a new + // current_default_physical_device(). + AudioOutputStream* out_stream_b = output_mixer_manager_.MakeOutputStream( + current_default_physical_device(), default_params_, + GetNoopDeviceChangeCallback()); EXPECT_NE(out_stream_a, out_stream_b); } @@ -474,19 +648,20 @@ // Makes sure OutputDeviceMixers are notified of device changes. TEST_F(OutputDeviceMixerManagerTest, OnDeviceChange_MixersReceiveDeviceChanges) { + SetAudioManagerGetDefaultOutputDeviceIdSupport(false); + // We don't care about the streams these devices will create. InSequence s; MockOutputDeviceMixer* pre_mock_mixer_a = SetUpMockMixer_NoStreams(kFakeDeviceId); MockOutputDeviceMixer* pre_mock_mixer_b = SetUpMockMixer_NoStreams(kOtherFakeDeviceId); + MockOutputDeviceMixer* pre_mock_mixer_c = + SetUpMockMixer_NoStreams(kNormalizedDefaultDeviceId); EXPECT_CALL(*pre_mock_mixer_a, ProcessDeviceChange()).Times(1); EXPECT_CALL(*pre_mock_mixer_b, ProcessDeviceChange()).Times(1); - - MockOutputDeviceMixer* post_mock_mixer_a = - SetUpMockMixer_NoStreams(kFakeDeviceId); - EXPECT_CALL(*post_mock_mixer_a, ProcessDeviceChange()).Times(0); + EXPECT_CALL(*pre_mock_mixer_c, ProcessDeviceChange()).Times(1); // Create the OutputDeviceMixers. output_mixer_manager_.MakeOutputStream(kFakeDeviceId, default_params_, @@ -495,42 +670,42 @@ output_mixer_manager_.MakeOutputStream(kOtherFakeDeviceId, default_params_, GetNoopDeviceChangeCallback()); + output_mixer_manager_.MakeOutputStream(kDefaultDeviceId, default_params_, + GetNoopDeviceChangeCallback()); + // Trigger the calls to ProcessDeviceChange() SimulateDeviceChange(); - - // Force the recreation of output mixers, |post_mock_mixer_a| in this case. - output_mixer_manager_.MakeOutputStream(kFakeDeviceId, default_params_, - GetNoopDeviceChangeCallback()); } // Makes sure OnDeviceChange() is only called once per device change. TEST_F(OutputDeviceMixerManagerTest, OnDeviceChange_OncePerDeviceChange) { // Setup a mixer that expects exactly 1 device change. - MockOutputDeviceMixer* mixer = SetUpMockMixer_NoStreams(kFakeDeviceId); - EXPECT_CALL(*mixer, ProcessDeviceChange()).Times(1); + MockOutputDeviceMixer* default_mixer = SetUpMockMixer_NoStreams(); + EXPECT_CALL(*default_mixer, ProcessDeviceChange()).Times(1); // Create the mixer. - ForceOutputMixerCreation(kFakeDeviceId); + ForceOutputMixerCreation(kDefaultDeviceId); auto first_device_change_callback = GetOnDeviceChangeCallback(); auto second_device_change_callback = GetOnDeviceChangeCallback(); - // |mixer| should have been notified of the device change. + // |default_mixer| be notified of the device change. std::move(first_device_change_callback).Run(); - testing::Mock::VerifyAndClearExpectations(mixer); + testing::Mock::VerifyAndClearExpectations(default_mixer); // Setup a new mixer. testing::Mock::VerifyAndClearExpectations(this); - MockOutputDeviceMixer* new_mixer = SetUpMockMixer_NoStreams(kFakeDeviceId); + MockOutputDeviceMixer* new_default_mixer = SetUpMockMixer_NoStreams(); - // Make sure it's not notified by the old callback. - EXPECT_CALL(*new_mixer, ProcessDeviceChange()).Times(0); - ForceOutputMixerCreation(kFakeDeviceId); + // Make sure old callbacks don't trigger new device change events. + EXPECT_CALL(*new_default_mixer, ProcessDeviceChange()).Times(0); + ForceOutputMixerCreation(kDefaultDeviceId); std::move(second_device_change_callback).Run(); - testing::Mock::VerifyAndClearExpectations(new_mixer); + testing::Mock::VerifyAndClearExpectations(new_default_mixer); - // Make sure the new mixer gets notified of changes through this new callback. - EXPECT_CALL(*new_mixer, ProcessDeviceChange()).Times(1); + // Make sure the new mixer gets notified of changes through this new + // callback. + EXPECT_CALL(*new_default_mixer, ProcessDeviceChange()).Times(1); GetOnDeviceChangeCallback().Run(); } @@ -576,21 +751,56 @@ } // Attach/detach to the default device. -TEST_P(OutputDeviceMixerManagerTestWithDefault, - DeviceOutputListener_StartStop_DefaultId) { +TEST_F(OutputDeviceMixerManagerTest, DeviceOutputListener_StartStop_DefaultId) { ExpectNoMixerCreated(); StrictMock<MockListener> listener; - output_mixer_manager_.StartListening(&listener, default_device_id()); - output_mixer_manager_.StopListening(&listener, default_device_id()); + output_mixer_manager_.StartListening(&listener, kDefaultDeviceId); + output_mixer_manager_.StopListening(&listener, kDefaultDeviceId); } // Listeners are attached as they are added. TEST_F(OutputDeviceMixerManagerTest, DeviceOutputListener_CreateStartStop) { + MockOutputDeviceMixer* mixer = SetUpMockMixer_NoStreams(kOtherFakeDeviceId); + + auto listener = GetListener_MixerExpectsStartStop(mixer); + + ForceOutputMixerCreation(kOtherFakeDeviceId); + output_mixer_manager_.StartListening(listener.get(), kOtherFakeDeviceId); + output_mixer_manager_.StopListening(listener.get(), kOtherFakeDeviceId); +} + +// Listeners are attached on mixer creation. +TEST_F(OutputDeviceMixerManagerTest, DeviceOutputListener_StartCreateStop) { + MockOutputDeviceMixer* mixer = SetUpMockMixer_NoStreams(kOtherFakeDeviceId); + + auto listener = GetListener_MixerExpectsStartStop(mixer); + + output_mixer_manager_.StartListening(listener.get(), kOtherFakeDeviceId); + ForceOutputMixerCreation(kOtherFakeDeviceId); + output_mixer_manager_.StopListening(listener.get(), kOtherFakeDeviceId); +} + +// Removed listeners are not attached. +TEST_F(OutputDeviceMixerManagerTest, DeviceOutputListener_StartStopCreate) { + MockOutputDeviceMixer* mixer = SetUpMockMixer_NoStreams(kOtherFakeDeviceId); + + auto listener = GetListener_MixerExpectsNoCalls(mixer); + + output_mixer_manager_.StartListening(listener.get(), kOtherFakeDeviceId); + output_mixer_manager_.StopListening(listener.get(), kOtherFakeDeviceId); + ForceOutputMixerCreation(kOtherFakeDeviceId); +} + +// Listeners are attached as they are added. +TEST_F(OutputDeviceMixerManagerTest, + DeviceOutputListener_CreateStartStop_NoGetDefaultOuputDeviceIdSupport) { + SetAudioManagerGetDefaultOutputDeviceIdSupport(false); + MockOutputDeviceMixer* mixer = SetUpMockMixer_NoStreams(kFakeDeviceId); - auto listener = GetListenerWithStartStopExpectations(mixer, 1, 1); + auto listener = GetListener_MixerExpectsStartStop(mixer); ForceOutputMixerCreation(kFakeDeviceId); output_mixer_manager_.StartListening(listener.get(), kFakeDeviceId); @@ -598,10 +808,13 @@ } // Listeners are attached on mixer creation. -TEST_F(OutputDeviceMixerManagerTest, DeviceOutputListener_StartCreateStop) { +TEST_F(OutputDeviceMixerManagerTest, + DeviceOutputListener_StartCreateStop_NoGetDefaultOuputDeviceIdSupport) { + SetAudioManagerGetDefaultOutputDeviceIdSupport(false); + MockOutputDeviceMixer* mixer = SetUpMockMixer_NoStreams(kFakeDeviceId); - auto listener = GetListenerWithStartStopExpectations(mixer, 1, 1); + auto listener = GetListener_MixerExpectsStartStop(mixer); output_mixer_manager_.StartListening(listener.get(), kFakeDeviceId); ForceOutputMixerCreation(kFakeDeviceId); @@ -609,10 +822,13 @@ } // Removed listeners are not attached. -TEST_F(OutputDeviceMixerManagerTest, DeviceOutputListener_StartStopCreate) { +TEST_F(OutputDeviceMixerManagerTest, + DeviceOutputListener_StartStopCreate_NoGetDefaultOuputDeviceIdSupport) { + SetAudioManagerGetDefaultOutputDeviceIdSupport(false); + MockOutputDeviceMixer* mixer = SetUpMockMixer_NoStreams(kFakeDeviceId); - auto listener = GetListenerWithStartStopExpectations(mixer, 0, 0); + auto listener = GetListener_MixerExpectsNoCalls(mixer); output_mixer_manager_.StartListening(listener.get(), kFakeDeviceId); output_mixer_manager_.StopListening(listener.get(), kFakeDeviceId); @@ -622,96 +838,109 @@ // Removed listeners are not attached, and remaining listeners are. TEST_F(OutputDeviceMixerManagerTest, DeviceOutputListener_StartStopCreate_TwoListeners) { - MockOutputDeviceMixer* mixer = SetUpMockMixer_NoStreams(kFakeDeviceId); + MockOutputDeviceMixer* default_mixer = SetUpMockMixer_NoStreams(); - auto listener = GetListenerWithStartStopExpectations(mixer, 1, 0); - auto removed_listener = GetListenerWithStartStopExpectations(mixer, 0, 0); - - output_mixer_manager_.StartListening(listener.get(), kFakeDeviceId); - output_mixer_manager_.StartListening(removed_listener.get(), kFakeDeviceId); - output_mixer_manager_.StopListening(removed_listener.get(), kFakeDeviceId); - ForceOutputMixerCreation(kFakeDeviceId); -} - -TEST_P(OutputDeviceMixerManagerTestWithDefault, - DeviceOutputListener_CreateStartStop_DefaultId) { - MockOutputDeviceMixer* mixer = - SetUpMockMixer_NoStreams(current_default_device_id_); - - auto listener = GetListenerWithStartStopExpectations(mixer, 1, 1); - - ForceOutputMixerCreation(default_device_id()); - output_mixer_manager_.StartListening(listener.get(), default_device_id()); - output_mixer_manager_.StopListening(listener.get(), default_device_id()); -} - -TEST_P(OutputDeviceMixerManagerTestWithDefault, - DeviceOutputListener_StartCreateStop_DefaultId) { - MockOutputDeviceMixer* mixer = - SetUpMockMixer_NoStreams(current_default_device_id_); - - auto listener = GetListenerWithStartStopExpectations(mixer, 1, 1); - - output_mixer_manager_.StartListening(listener.get(), default_device_id()); - ForceOutputMixerCreation(default_device_id()); - output_mixer_manager_.StopListening(listener.get(), default_device_id()); -} - -// Makes sure default-listeners are attached to the current-default-device-mixer -// when it is created. -TEST_P(OutputDeviceMixerManagerTestWithDefault, - DeviceOutputListener_DefaultIdListenersAttachToCurrentDefaultMixer) { - MockOutputDeviceMixer* mixer = - SetUpMockMixer_NoStreams(current_default_device_id_); - - auto listener = GetListenerWithStartStopExpectations(mixer, 1, 1); - - output_mixer_manager_.StartListening(listener.get(), default_device_id()); - ForceOutputMixerCreation(current_default_device_id_); - output_mixer_manager_.StopListening(listener.get(), default_device_id()); -} - -// Makes sure current-default-device-listeners are attached when the -// default-device-mixer is created. -TEST_P(OutputDeviceMixerManagerTestWithDefault, - DeviceOutputListener_CurrentDefaultListenersAttachToDefaultIdMixer) { - MockOutputDeviceMixer* mixer = - SetUpMockMixer_NoStreams(current_default_device_id_); - - auto listener = GetListenerWithStartStopExpectations(mixer, 1, 1); + auto listener = GetListener_MixerExpectsStart(default_mixer); + auto removed_listener = GetListener_MixerExpectsNoCalls(default_mixer); output_mixer_manager_.StartListening(listener.get(), - current_default_device_id_); - ForceOutputMixerCreation(default_device_id()); + current_default_physical_device()); + output_mixer_manager_.StartListening(removed_listener.get(), + current_default_physical_device()); + output_mixer_manager_.StopListening(removed_listener.get(), + current_default_physical_device()); + ForceOutputMixerCreation(current_default_physical_device()); +} + +TEST_F(OutputDeviceMixerManagerTest, + DeviceOutputListener_CreateStartStop_DefaultId) { + MockOutputDeviceMixer* default_mixer = SetUpMockMixer_NoStreams(); + + auto listener = GetListener_MixerExpectsStartStop(default_mixer); + + ForceOutputMixerCreation(kDefaultDeviceId); + output_mixer_manager_.StartListening(listener.get(), kDefaultDeviceId); + output_mixer_manager_.StopListening(listener.get(), kDefaultDeviceId); +} + +TEST_F(OutputDeviceMixerManagerTest, + DeviceOutputListener_StartCreateStop_DefaultId) { + MockOutputDeviceMixer* default_mixer = SetUpMockMixer_NoStreams(); + + auto listener = GetListener_MixerExpectsStartStop(default_mixer); + + output_mixer_manager_.StartListening(listener.get(), kDefaultDeviceId); + ForceOutputMixerCreation(kDefaultDeviceId); + output_mixer_manager_.StopListening(listener.get(), kDefaultDeviceId); +} + +TEST_F(OutputDeviceMixerManagerTest, + DeviceOutputListener_StartCreateStop_DefaultId_EmptyDeviceId) { + MockOutputDeviceMixer* default_mixer = SetUpMockMixer_NoStreams(); + + auto listener = GetListener_MixerExpectsStartStop(default_mixer); + + // kEmptyDeviceId should be treated the same as kDefaultDeviceId. + output_mixer_manager_.StartListening(listener.get(), kEmptyDeviceId); + ForceOutputMixerCreation(kEmptyDeviceId); + output_mixer_manager_.StopListening(listener.get(), kEmptyDeviceId); +} + +// Makes sure default-listeners are attached to the default-mixer when it is +// created via current_default_physical_device(). +TEST_F(OutputDeviceMixerManagerTest, + DeviceOutputListener_DefaultIdListenersAttachToCurrentDefaultMixer) { + MockOutputDeviceMixer* default_mixer = SetUpMockMixer_NoStreams(); + + auto listener = GetListener_MixerExpectsStartStop(default_mixer); + + output_mixer_manager_.StartListening(listener.get(), kDefaultDeviceId); + ForceOutputMixerCreation(current_default_physical_device()); + output_mixer_manager_.StopListening(listener.get(), kDefaultDeviceId); +} + +// Makes sure current_default_physical_device() listeners are attached when the +// default-mixer is created. +TEST_F(OutputDeviceMixerManagerTest, + DeviceOutputListener_CurrentDefaultListenersAttachToDefaultIdMixer) { + MockOutputDeviceMixer* default_mixer = SetUpMockMixer_NoStreams(); + + auto listener = GetListener_MixerExpectsStartStop(default_mixer); + + output_mixer_manager_.StartListening(listener.get(), + current_default_physical_device()); + ForceOutputMixerCreation(kDefaultDeviceId); output_mixer_manager_.StopListening(listener.get(), - current_default_device_id_); + current_default_physical_device()); } // Makes sure the presence of listeners does not force device recreation // on device change. TEST_F(OutputDeviceMixerManagerTest, DeviceOutputListener_NoCreateAfterDeviceChange_WithListeners) { - MockOutputDeviceMixer* mixer = SetUpMockMixer_NoStreams(kFakeDeviceId); + MockOutputDeviceMixer* mixer = SetUpMockMixer_NoStreams(kOtherFakeDeviceId); - auto listener = GetListenerWithStartStopExpectations(mixer, 1, 0); + // |mixer| should never get a call to StopListening(|listener|). + auto listener = GetListener_MixerExpectsStart(mixer); - ForceOutputMixerCreation(kFakeDeviceId); - output_mixer_manager_.StartListening(listener.get(), kFakeDeviceId); + ForceOutputMixerCreation(kOtherFakeDeviceId); + output_mixer_manager_.StartListening(listener.get(), kOtherFakeDeviceId); SimulateDeviceChange(); - output_mixer_manager_.StopListening(listener.get(), kFakeDeviceId); + output_mixer_manager_.StopListening(listener.get(), kOtherFakeDeviceId); } // Makes sure listeners are re-attached when mixers are recreated. TEST_F(OutputDeviceMixerManagerTest, DeviceOutputListener_ListenersReattachedAfterDeviceChange) { - // Setup pre-device-change expectations - MockOutputDeviceMixer* mixer = SetUpMockMixer_NoStreams(kFakeDeviceId); - auto listener = GetListenerWithStartStopExpectations(mixer, 1, 0); + MockOutputDeviceMixer* mixer = SetUpMockMixer_NoStreams(kOtherFakeDeviceId); - ForceOutputMixerCreation(kFakeDeviceId); - output_mixer_manager_.StartListening(listener.get(), kFakeDeviceId); + // |mixer| should never get a call to StopListening(|listener|). + auto listener = GetListener_MixerExpectsStart(mixer); + + ForceOutputMixerCreation(kOtherFakeDeviceId); + output_mixer_manager_.StartListening(listener.get(), kOtherFakeDeviceId); SimulateDeviceChange(); @@ -719,112 +948,171 @@ testing::Mock::VerifyAndClearExpectations(this); testing::Mock::VerifyAndClearExpectations(listener.get()); - // Setup post-device-change expectations - MockOutputDeviceMixer* new_mixer = SetUpMockMixer_NoStreams(kFakeDeviceId); + // The same |listener| should be started when |new_mixer| is created. + MockOutputDeviceMixer* new_mixer = + SetUpMockMixer_NoStreams(kOtherFakeDeviceId); EXPECT_CALL(*new_mixer, StartListening(listener.get())).Times(1); - ForceOutputMixerCreation(kFakeDeviceId); + ForceOutputMixerCreation(kOtherFakeDeviceId); } -// Makes sure the default listeners are re-attached when mixers are re-created. -TEST_P(OutputDeviceMixerManagerTestWithDefault, +// Makes sure the default listeners are re-attached when mixers are +// re-created. +TEST_F(OutputDeviceMixerManagerTest, DeviceOutputListener_DefaultIdListenersReattachedAfterDeviceChange) { - // Setup pre-device-change expectations - const std::string& kInitialDefaultId = current_default_device_id_; - MockOutputDeviceMixer* mixer = SetUpMockMixer_NoStreams(kInitialDefaultId); - auto listener = GetListenerWithStartStopExpectations(mixer, 1, 0); + SetAudioManagerGetDefaultOutputDeviceIdSupport(true); - // Setup post-device-change expectations - const std::string& kNewDefaultId = kOtherFakeDeviceId; - MockOutputDeviceMixer* new_mixer = SetUpMockMixer_NoStreams(kNewDefaultId); - EXPECT_CALL(*new_mixer, StartListening(listener.get())).Times(1); + MockOutputDeviceMixer* default_mixer = SetUpMockMixer_NoStreams(); - output_mixer_manager_.StartListening(listener.get(), default_device_id()); + auto listener = GetListener_MixerExpectsStart(default_mixer); - // Listener should be attached to |mixer|. - ForceOutputMixerCreation(kInitialDefaultId); + output_mixer_manager_.StartListening(listener.get(), kDefaultDeviceId); - SimulateDeviceChange(kNewDefaultId); + // |listener| will be started when |default_mixer| is created. + ForceOutputMixerCreation(current_default_physical_device()); - // Listener should be attached to |new_mixer|. - ForceOutputMixerCreation(kNewDefaultId); + // Make sure the AudioManager::GetDefaultOutputDeviceId() returns a new value. + ASSERT_NE(current_default_physical_device(), kOtherFakeDeviceId); + SimulateDeviceChange(/*new_default_physical_device=*/kOtherFakeDeviceId); + + testing::Mock::VerifyAndClearExpectations(this); + testing::Mock::VerifyAndClearExpectations(listener.get()); + + // |listener| should be attached to |new_default_mixer| when it is created. + MockOutputDeviceMixer* new_default_mixer = SetUpMockMixer_NoStreams(); + EXPECT_CALL(*new_default_mixer, StartListening(listener.get())).Times(1); + + ASSERT_EQ(kOtherFakeDeviceId, current_default_physical_device()); + ForceOutputMixerCreation(kOtherFakeDeviceId); } -// Makes sure both the "default listeners" and "current default device" -// listeners get attached to the "current default device" mixer. -TEST_P(OutputDeviceMixerManagerTestWithDefault, +// Makes sure the default listeners are not attached to non-default listeners, +// if support for AudioManager::GetDefaultOutputDeviceId() changes. +TEST_F(OutputDeviceMixerManagerTest, + DeviceOutputListener_CurrentDefaultListenersNotReattached) { + SetAudioManagerGetDefaultOutputDeviceIdSupport(true); + + MockOutputDeviceMixer* default_mixer = SetUpMockMixer_NoStreams(); + + // |default_mixer| should never get a call to StopListening(|listener|). + auto listener = GetListener_MixerExpectsStart(default_mixer); + + output_mixer_manager_.StartListening(listener.get(), + current_default_physical_device()); + + // |listener| should be attached to |mixer|. + ForceOutputMixerCreation(kDefaultDeviceId); + + SetAudioManagerGetDefaultOutputDeviceIdSupport(false); + SimulateDeviceChange(); + + testing::Mock::VerifyAndClearExpectations(this); + testing::Mock::VerifyAndClearExpectations(listener.get()); + + // Now that AudioManager::GetDefaultOutputDeviceId() only returns + // kEmptyDeviceId, |listener| should not be attached to |new_default_mixer|. + MockOutputDeviceMixer* new_default_mixer = SetUpMockMixer_NoStreams(); + EXPECT_CALL(*new_default_mixer, StartListening(listener.get())).Times(0); + + ForceOutputMixerCreation(kDefaultDeviceId); + + testing::Mock::VerifyAndClearExpectations(this); + testing::Mock::VerifyAndClearExpectations(listener.get()); + + // |listener| should still be attached to |new_physical_mixer| when it's + // created after a device change. + MockOutputDeviceMixer* new_physical_mixer = + SetUpMockMixer_NoStreams(current_default_physical_device()); + EXPECT_CALL(*new_physical_mixer, StartListening(listener.get())).Times(1); + + // |listener| should be attached to |new_physical_mixer|. + ForceOutputMixerCreation(current_default_physical_device()); +} + +// Makes sure both "default listeners" and "current_default_physical_device() +// listeners" get attached to the same current_default_physical_device() mixer. +TEST_F(OutputDeviceMixerManagerTest, DeviceOutputListener_CurrentDefaultMixerCreation_ListenersAttached) { - MockOutputDeviceMixer* mixer = - SetUpMockMixer_NoStreams(current_default_device_id_); - auto default_listener = GetListenerWithStartStopExpectations(mixer, 1, 0); - auto current_default_device_listener = - GetListenerWithStartStopExpectations(mixer, 1, 0); - auto other_listener = GetListenerWithStartStopExpectations(mixer, 0, 0); + MockOutputDeviceMixer* default_mixer = SetUpMockMixer_NoStreams(); + // Create listeners for kDefaultDeviceId and + // current_default_physical_device(), BOTH listening to |default_mixer|. + auto default_listener = GetListener_MixerExpectsStart(default_mixer); + auto current_default_physical_listener = + GetListener_MixerExpectsStart(default_mixer); + + // Create another listener, NOT listening to |default_mixer|. + ASSERT_NE(kOtherFakeDeviceId, current_default_physical_device()); + auto other_listener = GetListener_MixerExpectsNoCalls(default_mixer); + + // Start all listeners. output_mixer_manager_.StartListening(default_listener.get(), - default_device_id()); - output_mixer_manager_.StartListening(current_default_device_listener.get(), - current_default_device_id_); - - ASSERT_NE(kOtherFakeDeviceId, current_default_device_id_); + kDefaultDeviceId); + output_mixer_manager_.StartListening(current_default_physical_listener.get(), + current_default_physical_device()); output_mixer_manager_.StartListening(other_listener.get(), kOtherFakeDeviceId); - // |other_listener| should not be attached to |mixer|. - ForceOutputMixerCreation(current_default_device_id_); + // |default_listener| and |current_default_physical_listener| should be + // attached to |default_mixer|. + ForceOutputMixerCreation(current_default_physical_device()); } -// Makes sure both the "default listeners" and "current default device" -// listeners get attached to the "default ID" mixer. -TEST_P(OutputDeviceMixerManagerTestWithDefault, +// Makes sure both "default listeners" and "current_default_physical_device() +// listeners" get attached to the same default mixer. +TEST_F(OutputDeviceMixerManagerTest, DeviceOutputListener_DefaultIdMixerCreation_ListenersAttached) { - MockOutputDeviceMixer* mixer = - SetUpMockMixer_NoStreams(current_default_device_id_); - auto default_listener = GetListenerWithStartStopExpectations(mixer, 1, 0); - auto current_default_device_listener = - GetListenerWithStartStopExpectations(mixer, 1, 0); - auto other_listener = GetListenerWithStartStopExpectations(mixer, 0, 0); + MockOutputDeviceMixer* default_mixer = SetUpMockMixer_NoStreams(); + // Create listeners for kDefaultDeviceId and + // current_default_physical_device(), BOTH listening to |default_mixer|. + auto default_listener = GetListener_MixerExpectsStart(default_mixer); + auto current_default_physical_listener = + GetListener_MixerExpectsStart(default_mixer); + + // Create another listener, NOT listening to |default_mixer|. + ASSERT_NE(kOtherFakeDeviceId, current_default_physical_device()); + auto other_listener = GetListener_MixerExpectsNoCalls(default_mixer); + + // Start all listeners. output_mixer_manager_.StartListening(default_listener.get(), - default_device_id()); - output_mixer_manager_.StartListening(current_default_device_listener.get(), - current_default_device_id_); - - ASSERT_NE(kOtherFakeDeviceId, current_default_device_id_); + kDefaultDeviceId); + output_mixer_manager_.StartListening(current_default_physical_listener.get(), + current_default_physical_device()); output_mixer_manager_.StartListening(other_listener.get(), kOtherFakeDeviceId); - // |other_listener| should not be attached to |mixer|. - ForceOutputMixerCreation(default_device_id()); + // |default_listener| and |current_default_physical_listener| should be + // attached to |default_mixer|. + ForceOutputMixerCreation(kDefaultDeviceId); } -// Makes sure listeners attached to devices that aren't the "current default -// device" aren't attached to the "current default device" mixer. -TEST_P(OutputDeviceMixerManagerTestWithDefault, +// Makes sure both "default listeners" and "current_default_physical_device() +// listeners" don't get attached to non-default mixers. +TEST_F(OutputDeviceMixerManagerTest, DeviceOutputListener_OtherDeviceMixerCreation_ListenersNotAttached) { MockOutputDeviceMixer* other_mixer = SetUpMockMixer_NoStreams(kOtherFakeDeviceId); - auto default_listener = - GetListenerWithStartStopExpectations(other_mixer, 0, 0); - auto current_default_device_listener = - GetListenerWithStartStopExpectations(other_mixer, 0, 0); - auto other_listener = GetListenerWithStartStopExpectations(other_mixer, 1, 0); + // Create listeners for kDefaultDeviceId and + // current_default_physical_device(), BOTH NOT listening to |other_mixer|. + auto default_listener = GetListener_MixerExpectsNoCalls(other_mixer); + auto current_default_physical_listener = + GetListener_MixerExpectsNoCalls(other_mixer); + + // Create another listener, listening to |other_mixer|. + ASSERT_NE(kOtherFakeDeviceId, current_default_physical_device()); + auto other_listener = GetListener_MixerExpectsStart(other_mixer); + + // Start all listeners. output_mixer_manager_.StartListening(default_listener.get(), - default_device_id()); - output_mixer_manager_.StartListening(current_default_device_listener.get(), - current_default_device_id_); - - ASSERT_NE(kOtherFakeDeviceId, current_default_device_id_); + kDefaultDeviceId); + output_mixer_manager_.StartListening(current_default_physical_listener.get(), + current_default_physical_device()); output_mixer_manager_.StartListening(other_listener.get(), kOtherFakeDeviceId); // Only |other_listener| should be attached to |other_mixer|. ForceOutputMixerCreation(kOtherFakeDeviceId); } - -INSTANTIATE_TEST_SUITE_P(DefaultDeviceIdTests, - OutputDeviceMixerManagerTestWithDefault, - testing::Values(kDefaultDeviceId, kEmptyDeviceId)); - } // namespace audio
diff --git a/services/network/OWNERS b/services/network/OWNERS index 0f2bce7..62d6e9f 100644 --- a/services/network/OWNERS +++ b/services/network/OWNERS
@@ -23,7 +23,7 @@ per-file expect_ct_reporter*=estark@chromium.org -per-file cert_verifier_with_trust_anchors*=file://chromeos/policy/OWNERS +per-file cert_verifier_with_trust_anchors*=file://ash/components/policy/OWNERS per-file *_type_converter*.*=set noparent per-file *_type_converter*.*=file://ipc/SECURITY_OWNERS
diff --git a/services/network/cookie_settings.h b/services/network/cookie_settings.h index d9f09bb0..64d0e50 100644 --- a/services/network/cookie_settings.h +++ b/services/network/cookie_settings.h
@@ -5,6 +5,10 @@ #ifndef SERVICES_NETWORK_COOKIE_SETTINGS_H_ #define SERVICES_NETWORK_COOKIE_SETTINGS_H_ +#include <set> +#include <string> +#include <vector> + #include "base/component_export.h" #include "base/feature_list.h" #include "components/content_settings/core/common/content_settings.h"
diff --git a/storage/browser/file_system/file_system_operation.h b/storage/browser/file_system/file_system_operation.h index 32ccd73..192fa55 100644 --- a/storage/browser/file_system/file_system_operation.h +++ b/storage/browser/file_system/file_system_operation.h
@@ -243,9 +243,8 @@ // set to the copied file size. using CopyFileProgressCallback = base::RepeatingCallback<void(int64_t size)>; - // The possible options for copy or move operations. - // Some combinations might not work (e.g. kPreserveLastModified and - // kPreserveDestinationPermissions on Mac). + // The possible options for copy or move operations. Used as an EnumSet to + // allow multiple options to be specified. enum class CopyOrMoveOption { // Preserves last modified time if possible. If the operation to update // last modified time is not supported on the file system for the
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json index 4024955..bee750d 100644 --- a/testing/buildbot/chromium.android.fyi.json +++ b/testing/buildbot/chromium.android.fyi.json
@@ -5796,7 +5796,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M96", - "revision": "version:96.0.4664.78" + "revision": "version:96.0.4664.79" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -5884,7 +5884,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M97", - "revision": "version:97.0.4692.35" + "revision": "version:97.0.4692.36" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -6060,7 +6060,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M96", - "revision": "version:96.0.4664.78" + "revision": "version:96.0.4664.79" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -6148,7 +6148,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M97", - "revision": "version:97.0.4692.35" + "revision": "version:97.0.4692.36" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json index c1f9bfc..1d04c156 100644 --- a/testing/buildbot/chromium.android.json +++ b/testing/buildbot/chromium.android.json
@@ -43665,7 +43665,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M96", - "revision": "version:96.0.4664.78" + "revision": "version:96.0.4664.79" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -43753,7 +43753,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M97", - "revision": "version:97.0.4692.35" + "revision": "version:97.0.4692.36" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -43929,7 +43929,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M96", - "revision": "version:96.0.4664.78" + "revision": "version:96.0.4664.79" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -44017,7 +44017,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M97", - "revision": "version:97.0.4692.35" + "revision": "version:97.0.4692.36" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -44268,7 +44268,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M96", - "revision": "version:96.0.4664.78" + "revision": "version:96.0.4664.79" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -44356,7 +44356,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M97", - "revision": "version:97.0.4692.35" + "revision": "version:97.0.4692.36" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -44532,7 +44532,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M96", - "revision": "version:96.0.4664.78" + "revision": "version:96.0.4664.79" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -44620,7 +44620,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M97", - "revision": "version:97.0.4692.35" + "revision": "version:97.0.4692.36" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -44871,7 +44871,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M96", - "revision": "version:96.0.4664.78" + "revision": "version:96.0.4664.79" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -44959,7 +44959,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M97", - "revision": "version:97.0.4692.35" + "revision": "version:97.0.4692.36" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -45135,7 +45135,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M96", - "revision": "version:96.0.4664.78" + "revision": "version:96.0.4664.79" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -45223,7 +45223,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M97", - "revision": "version:97.0.4692.35" + "revision": "version:97.0.4692.36" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index 3baf17cf..b59338c 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -3751,43 +3751,6 @@ } ] }, - "WebKit Linux composite_after_paint Dummy Builder": { - "additional_compile_targets": [ - "blink_tests" - ], - "isolated_scripts": [ - { - "args": [ - "--num-retries=3", - "--flag-specific=composite-after-paint" - ], - "isolate_name": "blink_web_tests", - "merge": { - "args": [ - "--verbose" - ], - "script": "//third_party/blink/tools/merge_web_test_results.py" - }, - "name": "blink_web_tests", - "resultdb": { - "enable": true - }, - "results_handler": "layout tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-18.04" - } - ], - "hard_timeout": 900, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 20 - }, - "test_id_prefix": "ninja://:blink_web_tests/" - } - ] - }, "WebKit Linux layout_ng_disabled Builder": { "additional_compile_targets": [ "blink_tests"
diff --git a/testing/buildbot/generate_buildbot_json.py b/testing/buildbot/generate_buildbot_json.py index f608fb8..7642edb2 100755 --- a/testing/buildbot/generate_buildbot_json.py +++ b/testing/buildbot/generate_buildbot_json.py
@@ -1555,7 +1555,6 @@ 'mac11.0.arm64-blink-rel-dummy', 'win7-blink-rel-dummy', 'win10.20h2-blink-rel-dummy', - 'WebKit Linux composite_after_paint Dummy Builder', 'WebKit Linux layout_ng_disabled Builder', # chromium, due to https://crbug.com/878915 'win-dbg',
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl index cee9a4b7..5260bbf 100644 --- a/testing/buildbot/test_suite_exceptions.pyl +++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -336,14 +336,6 @@ 'shards': 20, }, }, - 'WebKit Linux composite_after_paint Dummy Builder': { - 'args': [ - '--flag-specific=composite-after-paint', - ], - 'swarming': { - 'shards': 20, - }, - }, 'WebKit Linux layout_ng_disabled Builder': { 'args': [ '--flag-specific=disable-layout-ng',
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl index 85dc253..9f0af6a5 100644 --- a/testing/buildbot/variants.pyl +++ b/testing/buildbot/variants.pyl
@@ -363,7 +363,7 @@ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M97', - 'revision': 'version:97.0.4692.35', + 'revision': 'version:97.0.4692.36', } ], }, @@ -387,7 +387,7 @@ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M96', - 'revision': 'version:96.0.4664.78', + 'revision': 'version:96.0.4664.79', } ], }, @@ -435,7 +435,7 @@ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M97', - 'revision': 'version:97.0.4692.35', + 'revision': 'version:97.0.4692.36', } ], }, @@ -459,7 +459,7 @@ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M96', - 'revision': 'version:96.0.4664.78', + 'revision': 'version:96.0.4664.79', } ], }, @@ -507,7 +507,7 @@ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M97', - 'revision': 'version:97.0.4692.35', + 'revision': 'version:97.0.4692.36', } ], }, @@ -531,7 +531,7 @@ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M96', - 'revision': 'version:96.0.4664.78', + 'revision': 'version:96.0.4664.79', } ], },
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index 79c2d0373..f87f3c9 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -2610,20 +2610,6 @@ 'gtest_tests': 'vr_platform_specific_chromium_gtests', }, }, - 'WebKit Linux composite_after_paint Dummy Builder': { - 'mixins': [ - 'linux-bionic', - ], - 'additional_compile_targets': [ - 'blink_tests', - ], - 'swarming': { - 'hard_timeout': 900, - }, - 'test_suites': { - 'isolated_scripts': 'chromium_webkit_isolated_scripts', - }, - }, 'WebKit Linux layout_ng_disabled Builder': { 'mixins': [ 'linux-bionic',
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc index ae9ff31..b0285488 100644 --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc
@@ -876,11 +876,6 @@ const base::Feature kMediaStreamTrackUseConfigMaxFrameRate{ "MediaStreamTrackUseConfigMaxFrameRate", base::FEATURE_DISABLED_BY_DEFAULT}; -// When enabled, WebRTC's worker thread will run on a thread context distinct -// from the WebRTC signaling and network threads. -const base::Feature kWebRtcDistinctWorkerThread{ - "WebRtcDistinctWorkerThread", base::FEATURE_ENABLED_BY_DEFAULT}; - // When enabled, the SubresourceFilter receives calls from the ResourceLoader // to perform additional checks against any aliases found from DNS CNAME records // for the requested URL.
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h index c91f038..6470f51 100644 --- a/third_party/blink/public/common/features.h +++ b/third_party/blink/public/common/features.h
@@ -348,8 +348,6 @@ BLINK_COMMON_EXPORT extern const base::Feature kMediaStreamTrackUseConfigMaxFrameRate; -BLINK_COMMON_EXPORT extern const base::Feature kWebRtcDistinctWorkerThread; - // Performs additional SubresourceFilter checks when CNAME aliases are found // for the host of a requested URL. BLINK_COMMON_EXPORT extern const base::Feature
diff --git a/third_party/blink/public/mojom/locks/lock_manager.mojom b/third_party/blink/public/mojom/locks/lock_manager.mojom index 034d3c1e..ec10f25 100644 --- a/third_party/blink/public/mojom/locks/lock_manager.mojom +++ b/third_party/blink/public/mojom/locks/lock_manager.mojom
@@ -47,7 +47,7 @@ // availablility and options. Once granted, the lock will be held until // explicitly released or the holding context is terminated. // -// Proposal: https://wicg.github.io/web-locks +// Proposal: https://w3c.github.io/web-locks interface LockManager { // PREEMPT corresponds to the |steal| option in the API; if used then
diff --git a/third_party/blink/public/mojom/peerconnection/peer_connection_tracker.mojom b/third_party/blink/public/mojom/peerconnection/peer_connection_tracker.mojom index bbe5fc4..b08eeb2 100644 --- a/third_party/blink/public/mojom/peerconnection/peer_connection_tracker.mojom +++ b/third_party/blink/public/mojom/peerconnection/peer_connection_tracker.mojom
@@ -86,7 +86,6 @@ OnPeerConnectionSessionIdSet(int32 lid, string session_id); // Lets WebRTCInternals know that a getUserMedia() call has been made. - // |origin| is the security origin of getusermedia call // |request_id| is an id assigned to the getusermedia call and its // callback/error // |audio| is true if audio stream is requested @@ -95,9 +94,8 @@ // |video_constraints| is constraints for video like audio source device id // The constraint strings are for display only and should not be parsed // by the browser for security reasons. - // TODO(crbug.com/801955) Remove the |origin| parameter. - GetUserMedia(string origin, int32 request_id, bool audio, bool video, string - audio_constraints, string video_constraints); + GetUserMedia(int32 request_id, bool audio, bool video, + string audio_constraints, string video_constraints); // Lets WebRTCInternals know that a getUserMedia() call has resolved. // |request_id| is an id assigned to the getusermedia call and its
diff --git a/third_party/blink/public/platform/task_type.h b/third_party/blink/public/platform/task_type.h index b2e3bf3..a8a6f803 100644 --- a/third_party/blink/public/platform/task_type.h +++ b/third_party/blink/public/platform/task_type.h
@@ -161,7 +161,7 @@ // https://w3c.github.io/ServiceWorker/#dfn-client-message-queue kServiceWorkerClientMessage = 60, - // https://wicg.github.io/web-locks/#web-locks-tasks-source + // https://w3c.github.io/web-locks/#web-locks-tasks-source kWebLocks = 66, // Task type used for the Prioritized Task Scheduling API
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 165216a1..abed46f 100644 --- a/third_party/blink/public/strings/translations/blink_strings_es.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_es.xtb
@@ -26,7 +26,7 @@ <translation id="1632409084477505723">Icono de descarga</translation> <translation id="1637811476055996098">Elegir archivos</translation> <translation id="1658806147928973309">Icono de silenciar micrófono</translation> -<translation id="1677491356035817504">Icono de la comilla angular hacia abajo, que puede ser de mostrar</translation> +<translation id="1677491356035817504">Icono de corchete angular hacia abajo, que puede significar mostrar</translation> <translation id="1681022320378710418">hora actual</translation> <translation id="1727839386348365796">Cuentagotas</translation> <translation id="1727886345390570319">ocultar menú de subtítulos</translation> @@ -98,7 +98,7 @@ <translation id="4363712632243441817">Icono de enviar, que puede ser de enviar vídeo a una pantalla remota</translation> <translation id="4371899966896349864">ocultar menú de velocidad de reproducción</translation> <translation id="4384249794467006333">Esta imagen no tiene texto. Abre el menú Más opciones, arriba a la derecha, para obtener descripciones de imágenes.</translation> -<translation id="4436211924730548766">Icono de la comilla angular izquierda</translation> +<translation id="4436211924730548766">Icono del corchete angular izquierdo</translation> <translation id="4444765639179266822">Parece que pone: <ph name="OCR_TEXT" /></translation> <translation id="4522570452068850558">Detalles</translation> <translation id="4540719609030900356">Icono del avión de papel, que puede ser de enviar</translation> @@ -213,7 +213,7 @@ <translation id="775297008183122718">Entrada no válida</translation> <translation id="7782515065589691344">1.25</translation> <translation id="7789962463072032349">pausar</translation> -<translation id="7796968532285333302">Icono de la comilla angular hacia abajo, que puede ser de ocultar</translation> +<translation id="7796968532285333302">Icono del corchete angular hacia abajo, que puede significar ocultar</translation> <translation id="7819026464394689674">Icono de pausa</translation> <translation id="7852167693871241274">Control deslizante del tono</translation> <translation id="7855610409192055689">Icono del sujetapapeles, que puede ser de archivo adjunto</translation> @@ -229,7 +229,7 @@ <translation id="8147719583347050106">Icono de Google</translation> <translation id="8199524924445686405">aaaa</translation> <translation id="8261464734335370856">La ortografía no es válida</translation> -<translation id="8276790177939055966">Icono de la comilla angular derecha</translation> +<translation id="8276790177939055966">Icono de corchete angular derecho</translation> <translation id="8284326494547611709">Subtítulos</translation> <translation id="835897206747267392">Valor no válido</translation> <translation id="839593075537728968">El valor debe estar entre <ph name="MINIMUM_TIME" /> y <ph name="MAXIMUM_TIME" />.</translation>
diff --git a/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_utils.py b/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_utils.py index de1e3b4..b21e3257 100644 --- a/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_utils.py +++ b/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_utils.py
@@ -82,6 +82,7 @@ header_include_headers.update([ "third_party/blink/renderer/core/typed_arrays/array_buffer_view_helpers.h", "third_party/blink/renderer/core/typed_arrays/dom_typed_array.h", + "third_party/blink/renderer/platform/heap/member.h", ]) elif idl_type.is_nullable: if not blink_type_info(idl_type.inner_type).has_null_value: @@ -108,15 +109,21 @@ PathManager(type_def_obj).api_path(ext="h")) elif type_def_obj.is_interface: header_forward_decls.add(blink_class_name(type_def_obj)) + header_include_headers.add( + "third_party/blink/renderer/platform/heap/member.h") source_include_headers.add( PathManager(type_def_obj).blink_path(ext="h")) else: header_forward_decls.add(blink_class_name(type_def_obj)) + header_include_headers.add( + "third_party/blink/renderer/platform/heap/member.h") source_include_headers.add( PathManager(type_def_obj).api_path(ext="h")) elif idl_type.union_definition_object: union_def_obj = idl_type.union_definition_object header_forward_decls.add(blink_class_name(union_def_obj)) + header_include_headers.add( + "third_party/blink/renderer/platform/heap/member.h") source_include_headers.add( PathManager(union_def_obj).api_path(ext="h")) else:
diff --git a/third_party/blink/renderer/core/animation/animation_utils_test.cc b/third_party/blink/renderer/core/animation/animation_utils_test.cc index 9be2610..950fe02 100644 --- a/third_party/blink/renderer/core/animation/animation_utils_test.cc +++ b/third_party/blink/renderer/core/animation/animation_utils_test.cc
@@ -118,6 +118,7 @@ TEST_F(AnimationUtilsTest, ForEachInterpolatedPropertyValueWithContainerQuery) { ScopedCSSContainerQueriesForTest enable_cq(true); + ScopedLayoutNGForTest enable_ng(true); SetBodyInnerHTML(R"HTML( <style>
diff --git a/third_party/blink/renderer/core/css/container_query_evaluator_test.cc b/third_party/blink/renderer/core/css/container_query_evaluator_test.cc index 38a3ef88..1ae65dc 100644 --- a/third_party/blink/renderer/core/css/container_query_evaluator_test.cc +++ b/third_party/blink/renderer/core/css/container_query_evaluator_test.cc
@@ -17,9 +17,11 @@ namespace blink { class ContainerQueryEvaluatorTest : public PageTestBase, - private ScopedCSSContainerQueriesForTest { + private ScopedCSSContainerQueriesForTest, + private ScopedLayoutNGForTest { public: - ContainerQueryEvaluatorTest() : ScopedCSSContainerQueriesForTest(true) {} + ContainerQueryEvaluatorTest() + : ScopedCSSContainerQueriesForTest(true), ScopedLayoutNGForTest(true) {} ContainerQuery* ParseContainer(String query) { String rule = "@container " + query + " {}";
diff --git a/third_party/blink/renderer/core/css/container_query_test.cc b/third_party/blink/renderer/core/css/container_query_test.cc index 8dc4ae8..efba3bf 100644 --- a/third_party/blink/renderer/core/css/container_query_test.cc +++ b/third_party/blink/renderer/core/css/container_query_test.cc
@@ -23,9 +23,11 @@ namespace blink { class ContainerQueryTest : public PageTestBase, - private ScopedCSSContainerQueriesForTest { + private ScopedCSSContainerQueriesForTest, + private ScopedLayoutNGForTest { public: - ContainerQueryTest() : ScopedCSSContainerQueriesForTest(true) {} + ContainerQueryTest() + : ScopedCSSContainerQueriesForTest(true), ScopedLayoutNGForTest(true) {} bool HasUnknown(StyleRuleContainer* rule) { return rule && rule->GetContainerQuery().Query().HasUnknown();
diff --git a/third_party/blink/renderer/core/css/css_selector_watch_test.cc b/third_party/blink/renderer/core/css/css_selector_watch_test.cc index d53fb8a..aa41f02 100644 --- a/third_party/blink/renderer/core/css/css_selector_watch_test.cc +++ b/third_party/blink/renderer/core/css/css_selector_watch_test.cc
@@ -84,9 +84,11 @@ } class CSSSelectorWatchCQTest : public CSSSelectorWatchTest, - private ScopedCSSContainerQueriesForTest { + private ScopedCSSContainerQueriesForTest, + private ScopedLayoutNGForTest { protected: - CSSSelectorWatchCQTest() : ScopedCSSContainerQueriesForTest(true) {} + CSSSelectorWatchCQTest() + : ScopedCSSContainerQueriesForTest(true), ScopedLayoutNGForTest(true) {} }; TEST_F(CSSSelectorWatchCQTest, ContainerQueryDisplayNone) {
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc b/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc index 1096694..0b695f3 100644 --- a/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc +++ b/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc
@@ -63,9 +63,11 @@ }; class StyleResolverTestCQ : public StyleResolverTest, - public ScopedCSSContainerQueriesForTest { + public ScopedCSSContainerQueriesForTest, + public ScopedLayoutNGForTest { protected: - StyleResolverTestCQ() : ScopedCSSContainerQueriesForTest(true) {} + StyleResolverTestCQ() + : ScopedCSSContainerQueriesForTest(true), ScopedLayoutNGForTest(true) {} }; TEST_F(StyleResolverTest, StyleForTextInDisplayNone) { @@ -149,7 +151,8 @@ StyleForId("div"); StyleResolverState state(GetDocument(), *div); - EXPECT_TRUE(StyleResolver::CanReuseBaseComputedStyle(state)); + EXPECT_NE(StyleResolver::CanReuseBaseComputedStyle(state), + RuntimeEnabledFeatures::CSSContainerQueriesEnabled()); } TEST_F(StyleResolverTest, AnimationNotMaskedByImportant) { @@ -352,7 +355,8 @@ EXPECT_TRUE(computed_style->GetBaseComputedStyle()); StyleResolverState state(GetDocument(), *div); - EXPECT_TRUE(StyleResolver::CanReuseBaseComputedStyle(state)); + EXPECT_NE(StyleResolver::CanReuseBaseComputedStyle(state), + RuntimeEnabledFeatures::CSSContainerQueriesEnabled()); } INSTANTIATE_TEST_SUITE_P(All, @@ -829,9 +833,7 @@ EXPECT_EQ("1em", map.at(top)->CssText()); } -TEST_F(StyleResolverTest, CascadedValuesForElementInContainer) { - ScopedCSSContainerQueriesForTest scope(true); - +TEST_F(StyleResolverTestCQ, CascadedValuesForElementInContainer) { GetDocument().body()->setInnerHTML(R"HTML( <style> #container { container-type: inline-size; } @@ -861,9 +863,7 @@ EXPECT_EQ("1em", map.at(top)->CssText()); } -TEST_F(StyleResolverTest, CascadedValuesForPseudoElementInContainer) { - ScopedCSSContainerQueriesForTest scope(true); - +TEST_F(StyleResolverTestCQ, CascadedValuesForPseudoElementInContainer) { GetDocument().body()->setInnerHTML(R"HTML( <style> #container { container-type: inline-size; }
diff --git a/third_party/blink/renderer/core/css/style_engine_test.cc b/third_party/blink/renderer/core/css/style_engine_test.cc index bd0755a..b0d3022 100644 --- a/third_party/blink/renderer/core/css/style_engine_test.cc +++ b/third_party/blink/renderer/core/css/style_engine_test.cc
@@ -145,15 +145,12 @@ std::unique_ptr<DummyPageHolder> dummy_page_holder_; }; -// It's currently not possible to use ScopedCSSContainerQueriesForTest in -// individual tests. CSSContainerQueries implies LayoutNGGrid, and -// LayoutNGGrid needs to be enabled early (before StyleResolver::InitialStyle -// is created, probably). Otherwise assumptions made by e.g. -// GridTrackList::AssignFrom do not hold. class StyleEngineContainerQueryTest : public StyleEngineTest, - private ScopedCSSContainerQueriesForTest { + private ScopedCSSContainerQueriesForTest, + private ScopedLayoutNGForTest { public: - StyleEngineContainerQueryTest() : ScopedCSSContainerQueriesForTest(true) {} + StyleEngineContainerQueryTest() + : ScopedCSSContainerQueriesForTest(true), ScopedLayoutNGForTest(true) {} }; void StyleEngineTest::SetUp() { @@ -3944,6 +3941,7 @@ )CSS"; { + ScopedCSSContainerQueriesForTest cq_feature(false); ScopedCSSContainerRelativeUnitsForTest feature(false); const CSSPropertyValueSet* set = css_test_helpers::ParseDeclarationBlock(css); @@ -3953,6 +3951,7 @@ } { + ScopedCSSContainerQueriesForTest cq_feature(false); ScopedCSSContainerRelativeUnitsForTest feature(true); const CSSPropertyValueSet* set = css_test_helpers::ParseDeclarationBlock(css);
diff --git a/third_party/blink/renderer/core/css/style_recalc_test.cc b/third_party/blink/renderer/core/css/style_recalc_test.cc index 8a717f8..06b3df3 100644 --- a/third_party/blink/renderer/core/css/style_recalc_test.cc +++ b/third_party/blink/renderer/core/css/style_recalc_test.cc
@@ -17,6 +17,17 @@ class StyleRecalcTest : public PageTestBase {}; +class StyleRecalcTestCQ : public StyleRecalcTest, + private ScopedCSSContainerQueriesForTest, + private ScopedCSSContainerSkipStyleRecalcForTest, + private ScopedLayoutNGForTest { + public: + StyleRecalcTestCQ() + : ScopedCSSContainerQueriesForTest(true), + ScopedCSSContainerSkipStyleRecalcForTest(true), + ScopedLayoutNGForTest(true) {} +}; + TEST_F(StyleRecalcTest, SuppressRecalc) { SetBodyInnerHTML(R"HTML( <style> @@ -39,10 +50,7 @@ .ShouldRecalcStyleFor(*element)); } -TEST_F(StyleRecalcTest, SkipStyleRecalcForContainer) { - ScopedCSSContainerQueriesForTest scoped_cq(true); - ScopedCSSContainerSkipStyleRecalcForTest scoped_skip(true); - +TEST_F(StyleRecalcTestCQ, SkipStyleRecalcForContainer) { UpdateAllLifecyclePhasesForTest(); ASSERT_TRUE(GetDocument().body()); @@ -174,10 +182,7 @@ GetCSSPropertyColor())); } -TEST_F(StyleRecalcTest, SkipStyleRecalcForContainerCleanSubtree) { - ScopedCSSContainerQueriesForTest scoped_cq(true); - ScopedCSSContainerSkipStyleRecalcForTest scoped_skip(true); - +TEST_F(StyleRecalcTestCQ, SkipStyleRecalcForContainerCleanSubtree) { UpdateAllLifecyclePhasesForTest(); ASSERT_TRUE(GetDocument().body()); @@ -207,10 +212,7 @@ EXPECT_FALSE(container->GetContainerQueryData()->SkippedStyleRecalc()); } -TEST_F(StyleRecalcTest, SkipAttachLayoutTreeForContainer) { - ScopedCSSContainerQueriesForTest scoped_cq(true); - ScopedCSSContainerSkipStyleRecalcForTest scoped_skip(true); - +TEST_F(StyleRecalcTestCQ, SkipAttachLayoutTreeForContainer) { GetDocument().body()->setInnerHTML(R"HTML( <style> #container { container-type: inline-size; }
diff --git a/third_party/blink/renderer/core/dom/element.h b/third_party/blink/renderer/core/dom/element.h index 750c06b..8c90511 100644 --- a/third_party/blink/renderer/core/dom/element.h +++ b/third_party/blink/renderer/core/dom/element.h
@@ -42,7 +42,6 @@ #include "third_party/blink/renderer/core/dom/names_map.h" #include "third_party/blink/renderer/core/dom/whitespace_attacher.h" #include "third_party/blink/renderer/core/html_names.h" -#include "third_party/blink/renderer/core/scroll/scroll_types.h" #include "third_party/blink/renderer/core/trustedtypes/trusted_types_util.h" #include "third_party/blink/renderer/platform/geometry/float_rect.h" #include "third_party/blink/renderer/platform/heap/handle.h" @@ -52,6 +51,10 @@ #include "third_party/blink/renderer/platform/wtf/hash_set.h" #include "third_party/blink/renderer/platform/wtf/text/atomic_string_table.h" +namespace gfx { +class Vector2dF; +} + namespace blink { class AccessibleNode; @@ -106,6 +109,8 @@ struct FocusParams; +using ScrollOffset = gfx::Vector2dF; + enum SpellcheckAttributeState { kSpellcheckAttributeTrue, kSpellcheckAttributeFalse,
diff --git a/third_party/blink/renderer/core/editing/ime/input_method_controller.cc b/third_party/blink/renderer/core/editing/ime/input_method_controller.cc index 0687a6ef..20982d2 100644 --- a/third_party/blink/renderer/core/editing/ime/input_method_controller.cc +++ b/third_party/blink/renderer/core/editing/ime/input_method_controller.cc
@@ -1848,44 +1848,30 @@ const HeapVector<std::pair<Member<const Text>, Member<DocumentMarker>>>& node_marker_pairs = GetDocument().Markers().MarkersIntersectingRange( ToEphemeralRangeInFlatTree(range), - DocumentMarker::MarkerTypes::Suggestion().Add( - DocumentMarker::MarkerTypes::Spelling())); + DocumentMarker::MarkerTypes::Suggestion()); for (const std::pair<Member<const Text>, Member<DocumentMarker>>& node_marker_pair : node_marker_pairs) { - DocumentMarker* marker = node_marker_pair.second.Get(); - const Text* node = node_marker_pair.first; - const EphemeralRange& marker_ephemeral_range = - EphemeralRange(Position(node, marker->StartOffset()), - Position(node, marker->EndOffset())); - const PlainTextRange& marker_plain_text_range = - cached_text_input_info_.GetPlainTextRange(marker_ephemeral_range); + SuggestionMarker* marker = + To<SuggestionMarker>(node_marker_pair.second.Get()); + ImeTextSpan::Type type = + ConvertSuggestionMarkerType(marker->GetSuggestionType()); + if (ShouldGetImeTextSpans(type)) { + const Text* node = node_marker_pair.first; + const EphemeralRange& marker_ephemeral_range = + EphemeralRange(Position(node, marker->StartOffset()), + Position(node, marker->EndOffset())); + const PlainTextRange& marker_plain_text_range = + cached_text_input_info_.GetPlainTextRange(marker_ephemeral_range); - if (DocumentMarker::MarkerTypes::Spelling().Contains( - node_marker_pair.second.Get()->GetType())) { ime_text_spans.emplace_back( - ImeTextSpan(ImeTextSpan::Type::kMisspellingSuggestion, - marker_plain_text_range.Start(), + ImeTextSpan(type, marker_plain_text_range.Start(), marker_plain_text_range.End(), Color::kTransparent, ImeTextSpanThickness::kNone, ImeTextSpanUnderlineStyle::kNone, Color::kTransparent, - Color::kTransparent) + Color::kTransparent, Color::kTransparent, false, false, + marker->Suggestions()) .ToUiImeTextSpan()); - } else { - SuggestionMarker* suggestion_marker = - To<SuggestionMarker>(node_marker_pair.second.Get()); - ImeTextSpan::Type type = - ConvertSuggestionMarkerType(suggestion_marker->GetSuggestionType()); - if (ShouldGetImeTextSpans(type)) { - ime_text_spans.emplace_back( - ImeTextSpan(type, marker_plain_text_range.Start(), - marker_plain_text_range.End(), Color::kTransparent, - ImeTextSpanThickness::kNone, - ImeTextSpanUnderlineStyle::kNone, Color::kTransparent, - Color::kTransparent, Color::kTransparent, false, false, - suggestion_marker->Suggestions()) - .ToUiImeTextSpan()); - } } }
diff --git a/third_party/blink/renderer/core/editing/ime/input_method_controller_test.cc b/third_party/blink/renderer/core/editing/ime/input_method_controller_test.cc index e15e2c2..a86b50fc 100644 --- a/third_party/blink/renderer/core/editing/ime/input_method_controller_test.cc +++ b/third_party/blink/renderer/core/editing/ime/input_method_controller_test.cc
@@ -208,8 +208,8 @@ } TEST_F(InputMethodControllerTest, GetImeTextSpans) { - Element* div = InsertHTMLElement( - "<div id='sample' contenteditable>hello world</div>", "sample"); + InsertHTMLElement("<div id='sample' contenteditable>hello world</div>", + "sample"); ImeTextSpan span1 = ImeTextSpan(ImeTextSpan::Type::kAutocorrect, 0, 5, Color(255, 0, 0), ImeTextSpanThickness::kThin, ImeTextSpanUnderlineStyle::kSolid, 0, 0); @@ -226,31 +226,22 @@ Controller().AddImeTextSpansToExistingText({span1, span2, span3, span4}, 0, 10); - GetFrame().GetDocument()->Markers().AddSpellingMarker( - PlainTextRange(4, 6).CreateRange(*div)); Controller().SetEditableSelectionOffsets(PlainTextRange(1, 1)); const WebVector<ui::ImeTextSpan>& ime_text_spans = Controller().TextInputInfo().ime_text_spans; - EXPECT_EQ(3u, ime_text_spans.size()); - - EXPECT_EQ(4u, ime_text_spans[0].start_offset); - EXPECT_EQ(6u, ime_text_spans[0].end_offset); - EXPECT_EQ(ui::ImeTextSpan::Type::kMisspellingSuggestion, - ime_text_spans[0].type); + EXPECT_EQ(2u, ime_text_spans.size()); + EXPECT_EQ(0u, ime_text_spans[0].start_offset); + EXPECT_EQ(5u, ime_text_spans[0].end_offset); + EXPECT_EQ(ui::ImeTextSpan::Type::kAutocorrect, ime_text_spans[0].type); EXPECT_EQ(0u, ime_text_spans[0].suggestions.size()); - EXPECT_EQ(0u, ime_text_spans[1].start_offset); - EXPECT_EQ(5u, ime_text_spans[1].end_offset); - EXPECT_EQ(ui::ImeTextSpan::Type::kAutocorrect, ime_text_spans[1].type); - EXPECT_EQ(0u, ime_text_spans[1].suggestions.size()); - - EXPECT_EQ(6u, ime_text_spans[2].start_offset); - EXPECT_EQ(8u, ime_text_spans[2].end_offset); - EXPECT_EQ(ui::ImeTextSpan::Type::kGrammarSuggestion, ime_text_spans[2].type); - EXPECT_EQ(1u, ime_text_spans[2].suggestions.size()); - EXPECT_EQ("fake_suggestion", ime_text_spans[2].suggestions[0]); + EXPECT_EQ(6u, ime_text_spans[1].start_offset); + EXPECT_EQ(8u, ime_text_spans[1].end_offset); + EXPECT_EQ(ui::ImeTextSpan::Type::kGrammarSuggestion, ime_text_spans[1].type); + EXPECT_EQ(1u, ime_text_spans[1].suggestions.size()); + EXPECT_EQ("fake_suggestion", ime_text_spans[1].suggestions[0]); } TEST_F(InputMethodControllerTest, SetCompositionAfterEmoji) {
diff --git a/third_party/blink/renderer/core/inspector/inspector_highlight_test.cc b/third_party/blink/renderer/core/inspector/inspector_highlight_test.cc index f7d6152..535e188 100644 --- a/third_party/blink/renderer/core/inspector/inspector_highlight_test.cc +++ b/third_party/blink/renderer/core/inspector/inspector_highlight_test.cc
@@ -36,9 +36,11 @@ } // namespace class InspectorHighlightTest : public testing::Test, - private ScopedCSSContainerQueriesForTest { + private ScopedCSSContainerQueriesForTest, + private ScopedLayoutNGForTest { public: - InspectorHighlightTest() : ScopedCSSContainerQueriesForTest(true) {} + InspectorHighlightTest() + : ScopedCSSContainerQueriesForTest(true), ScopedLayoutNGForTest(true) {} protected: void SetUp() override;
diff --git a/third_party/blink/renderer/core/layout/geometry/physical_rect.h b/third_party/blink/renderer/core/layout/geometry/physical_rect.h index f163696..4c8a3b85 100644 --- a/third_party/blink/renderer/core/layout/geometry/physical_rect.h +++ b/third_party/blink/renderer/core/layout/geometry/physical_rect.h
@@ -217,7 +217,9 @@ : offset(r.origin()), size(r.size()) {} explicit PhysicalRect(const gfx::Rect& r) : PhysicalRect(IntRect(r)) {} - static IntRect InfiniteIntRect() { return LayoutRect::InfiniteIntRect(); } + static constexpr gfx::Rect InfiniteIntRect() { + return LayoutRect::InfiniteIntRect(); + } String ToString() const; }; @@ -244,6 +246,19 @@ inline IntRect PixelSnappedIntRect(const PhysicalRect& r) { return {r.PixelSnappedOffset(), r.PixelSnappedSize()}; } +inline gfx::Rect ToEnclosingRect(const PhysicalRect& r) { + gfx::Point location = ToFlooredPoint(r.offset); + gfx::Point max_point = ToCeiledPoint(r.MaxXMaxYCorner()); + // Because the range of LayoutUnit is much smaller than int, the following + // '-' operations can never overflow, so no clamping is needed. + // TODO(1261553): We can have a special version of gfx::Rect constructor that + // skips internal clamping to improve performance. + return gfx::Rect(location.x(), location.y(), max_point.x() - location.x(), + max_point.y() - location.y()); +} +inline gfx::Rect ToPixelSnappedRect(const PhysicalRect& r) { + return {r.PixelSnappedOffset(), ToGfxSize(r.PixelSnappedSize())}; +} // TODO(wangxianzhu): For temporary conversion from LayoutRect to PhysicalRect, // where the input will be changed to PhysicalRect soon, to avoid redundant
diff --git a/third_party/blink/renderer/core/layout/layout_box.cc b/third_party/blink/renderer/core/layout/layout_box.cc index 30964b0..eb4866a 100644 --- a/third_party/blink/renderer/core/layout/layout_box.cc +++ b/third_party/blink/renderer/core/layout/layout_box.cc
@@ -1968,9 +1968,9 @@ return gfx::PointF(); // Use the |size| parameter instead of |Size()| if present. - FloatSize float_size = size ? FloatSize(*size) : FloatSize(Size()); + gfx::SizeF float_size = size ? gfx::SizeF(*size) : gfx::SizeF(Size()); - return FloatPointForLengthPoint(StyleRef().PerspectiveOrigin(), float_size); + return PointForLengthPoint(StyleRef().PerspectiveOrigin(), float_size); } bool LayoutBox::MapVisualRectToContainer(
diff --git a/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.cc b/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.cc index 1ef1fe10..3894ecfc 100644 --- a/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.cc +++ b/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.cc
@@ -397,13 +397,12 @@ // If we are a layout root, use the previous space if available. This will // include any stretched sizes if applicable. NGConstraintSpace constraint_space = - is_layout_root && previous_result + is_layout_root && previous_result && + previous_result->GetConstraintSpaceForCaching() + .GetWritingMode() == Base::StyleRef().GetWritingMode() ? previous_result->GetConstraintSpaceForCaching() : NGConstraintSpace::CreateFromLayoutObject(*this); - DCHECK_EQ(constraint_space.GetWritingMode(), - Base::StyleRef().GetWritingMode()); - scoped_refptr<const NGLayoutResult> result = NGBlockNode(this).Layout(constraint_space);
diff --git a/third_party/blink/renderer/core/layout/ng/table/layout_ng_table.cc b/third_party/blink/renderer/core/layout/ng/table/layout_ng_table.cc index afaad447..aa3a994 100644 --- a/third_party/blink/renderer/core/layout/ng/table/layout_ng_table.cc +++ b/third_party/blink/renderer/core/layout/ng/table/layout_ng_table.cc
@@ -223,7 +223,7 @@ if (StyleRef().BorderCollapse() == EBorderCollapse::kCollapse) { clip_rect = PhysicalRect(location, Size()); const auto overflow_clip = GetOverflowClipAxes(); - IntRect infinite_rect = PhysicalRect::InfiniteIntRect(); + gfx::Rect infinite_rect = PhysicalRect::InfiniteIntRect(); if ((overflow_clip & kOverflowClipX) == kNoOverflowClip) { clip_rect.offset.left = LayoutUnit(infinite_rect.x()); clip_rect.size.width = LayoutUnit(infinite_rect.width());
diff --git a/third_party/blink/renderer/core/layout/shapes/box_shape.cc b/third_party/blink/renderer/core/layout/shapes/box_shape.cc index 30cd362..0fefc53b 100644 --- a/third_party/blink/renderer/core/layout/shapes/box_shape.cc +++ b/third_party/blink/renderer/core/layout/shapes/box_shape.cc
@@ -58,7 +58,7 @@ float y1 = logical_top.ToFloat(); float y2 = (logical_top + logical_height).ToFloat(); - const FloatRect& rect = margin_bounds.Rect(); + const gfx::RectF& rect = margin_bounds.Rect(); if (!margin_bounds.IsRounded()) return LineSegment(margin_bounds.Rect().x(), margin_bounds.Rect().right());
diff --git a/third_party/blink/renderer/core/layout/shapes/box_shape_test.cc b/third_party/blink/renderer/core/layout/shapes/box_shape_test.cc index 371d08e..a45e824 100644 --- a/third_party/blink/renderer/core/layout/shapes/box_shape_test.cc +++ b/third_party/blink/renderer/core/layout/shapes/box_shape_test.cc
@@ -130,10 +130,10 @@ */ TEST_F(BoxShapeTest, getIntervals) { const FloatRoundedRect::Radii corner_radii( - FloatSize(10, 15), FloatSize(10, 20), FloatSize(25, 15), - FloatSize(20, 30)); + gfx::SizeF(10, 15), gfx::SizeF(10, 20), gfx::SizeF(25, 15), + gfx::SizeF(20, 30)); std::unique_ptr<Shape> shape = CreateBoxShape( - FloatRoundedRect(IntRect(0, 0, 100, 100), corner_radii), 0); + FloatRoundedRect(gfx::Rect(0, 0, 100, 100), corner_radii), 0); EXPECT_FALSE(shape->IsEmpty()); EXPECT_EQ(LayoutRect(0, 0, 100, 100), shape->ShapeMarginLogicalBoundingBox());
diff --git a/third_party/blink/renderer/core/layout/shapes/shape.cc b/third_party/blink/renderer/core/layout/shapes/shape.cc index f630f35f..81581724 100644 --- a/third_party/blink/renderer/core/layout/shapes/shape.cc +++ b/third_party/blink/renderer/core/layout/shapes/shape.cc
@@ -63,16 +63,16 @@ return std::make_unique<BoxShape>(bounds); } -static inline FloatRect PhysicalRectToLogical(const FloatRect& rect, - float logical_box_height, - WritingMode writing_mode) { +static inline gfx::RectF PhysicalRectToLogical(const gfx::RectF& rect, + float logical_box_height, + WritingMode writing_mode) { if (IsHorizontalWritingMode(writing_mode)) return rect; if (IsFlippedBlocksWritingMode(writing_mode)) { - return FloatRect(rect.y(), logical_box_height - rect.right(), rect.height(), - rect.width()); + return gfx::RectF(rect.y(), logical_box_height - rect.right(), + rect.height(), rect.width()); } - return rect.TransposedRect(); + return gfx::TransposeRect(rect); } static inline gfx::PointF PhysicalPointToLogical(const gfx::PointF& point, @@ -85,11 +85,11 @@ return gfx::TransposePoint(point); } -static inline FloatSize PhysicalSizeToLogical(const FloatSize& size, - WritingMode writing_mode) { +static inline gfx::SizeF PhysicalSizeToLogical(const gfx::SizeF& size, + WritingMode writing_mode) { if (IsHorizontalWritingMode(writing_mode)) return size; - return size.TransposedSize(); + return gfx::TransposeSize(size); } std::unique_ptr<Shape> Shape::CreateShape(const BasicShape* basic_shape, @@ -162,24 +162,20 @@ float top = FloatValueForLength(inset.Top(), box_height); float right = FloatValueForLength(inset.Right(), box_width); float bottom = FloatValueForLength(inset.Bottom(), box_height); - FloatRect rect(left, top, std::max<float>(box_width - left - right, 0), - std::max<float>(box_height - top - bottom, 0)); - FloatRect logical_rect = PhysicalRectToLogical( + gfx::RectF rect(left, top, std::max<float>(box_width - left - right, 0), + std::max<float>(box_height - top - bottom, 0)); + gfx::RectF logical_rect = PhysicalRectToLogical( rect, logical_box_size.Height().ToFloat(), writing_mode); - FloatSize box_size(box_width, box_height); - FloatSize top_left_radius = PhysicalSizeToLogical( - FloatSizeForLengthSize(inset.TopLeftRadius(), box_size), - writing_mode); - FloatSize top_right_radius = PhysicalSizeToLogical( - FloatSizeForLengthSize(inset.TopRightRadius(), box_size), - writing_mode); - FloatSize bottom_left_radius = PhysicalSizeToLogical( - FloatSizeForLengthSize(inset.BottomLeftRadius(), box_size), - writing_mode); - FloatSize bottom_right_radius = PhysicalSizeToLogical( - FloatSizeForLengthSize(inset.BottomRightRadius(), box_size), - writing_mode); + gfx::SizeF box_size(box_width, box_height); + gfx::SizeF top_left_radius = PhysicalSizeToLogical( + SizeForLengthSize(inset.TopLeftRadius(), box_size), writing_mode); + gfx::SizeF top_right_radius = PhysicalSizeToLogical( + SizeForLengthSize(inset.TopRightRadius(), box_size), writing_mode); + gfx::SizeF bottom_left_radius = PhysicalSizeToLogical( + SizeForLengthSize(inset.BottomLeftRadius(), box_size), writing_mode); + gfx::SizeF bottom_right_radius = PhysicalSizeToLogical( + SizeForLengthSize(inset.BottomRightRadius(), box_size), writing_mode); FloatRoundedRect::Radii corner_radii(top_left_radius, top_right_radius, bottom_left_radius, bottom_right_radius); @@ -350,8 +346,7 @@ const FloatRoundedRect& rounded_rect, WritingMode writing_mode, float margin) { - FloatRect rect(0, 0, rounded_rect.Rect().width(), - rounded_rect.Rect().height()); + gfx::RectF rect(rounded_rect.Rect().size()); FloatRoundedRect bounds(rect, rounded_rect.GetRadii()); std::unique_ptr<Shape> shape = CreateInsetShape(bounds); shape->writing_mode_ = writing_mode;
diff --git a/third_party/blink/renderer/core/paint/background_image_geometry.cc b/third_party/blink/renderer/core/paint/background_image_geometry.cc index a7c8dd8..3f3f32233 100644 --- a/third_party/blink/renderer/core/paint/background_image_geometry.cc +++ b/third_party/blink/renderer/core/paint/background_image_geometry.cc
@@ -481,7 +481,7 @@ // TODO(schenney) The LayoutUnit(float) constructor always // rounds down. We should FromFloatFloor or FromFloatCeil to // move toward the border. - FloatRect inner_border_rect = + gfx::RectF inner_border_rect = RoundedBorderGeometry::PixelSnappedRoundedInnerBorder( positioning_box_->StyleRef(), unsnapped_positioning_area) .Rect(); @@ -518,7 +518,7 @@ // move toward the border. BorderEdge edges[4]; positioning_box_->StyleRef().GetBorderEdgeInfo(edges); - FloatRect inner_border_rect = + gfx::RectF inner_border_rect = RoundedBorderGeometry::PixelSnappedRoundedInnerBorder( positioning_box_->StyleRef(), unsnapped_positioning_area) .Rect(); @@ -580,7 +580,7 @@ // the size and position of the borders, sometimes adjusting the inner // border by more than a pixel when done (particularly under magnifying // zoom). - FloatRect inner_border_rect = + gfx::RectF inner_border_rect = RoundedBorderGeometry::PixelSnappedRoundedInnerBorder( positioning_box_->StyleRef(), unsnapped_positioning_area) .Rect();
diff --git a/third_party/blink/renderer/core/paint/box_border_painter.cc b/third_party/blink/renderer/core/paint/box_border_painter.cc index 348df014..c478541 100644 --- a/third_party/blink/renderer/core/paint/box_border_painter.cc +++ b/third_party/blink/renderer/core/paint/box_border_painter.cc
@@ -86,8 +86,8 @@ return false; } -inline bool BorderWillArcInnerEdge(const FloatSize& first_radius, - const FloatSize& second_radius) { +inline bool BorderWillArcInnerEdge(const gfx::SizeF& first_radius, + const gfx::SizeF& second_radius) { return !first_radius.IsZero() || !second_radius.IsZero(); } @@ -127,7 +127,7 @@ FloatRect CalculateSideRect(const FloatRoundedRect& outer_border, const BorderEdge& edge, BoxSide side) { - FloatRect side_rect = outer_border.Rect(); + FloatRect side_rect(outer_border.Rect()); float width = edge.Width(); if (side == BoxSide::kTop) @@ -150,7 +150,7 @@ // radii not contained within each edge if one of the radii for an edge is // zero, so we can shift the arc towards the zero radius corner. FloatRoundedRect::Radii new_radii = inner_border.GetRadii(); - FloatRect new_rect = inner_border.Rect(); + gfx::RectF new_rect = inner_border.Rect(); float overshoot; float max_radii; @@ -166,8 +166,8 @@ if (!new_radii.TopLeft().width()) new_rect.Offset(-overshoot, 0); } - new_radii.SetBottomLeft(FloatSize(0, 0)); - new_radii.SetBottomRight(FloatSize(0, 0)); + new_radii.SetBottomLeft(gfx::SizeF(0, 0)); + new_radii.SetBottomRight(gfx::SizeF(0, 0)); max_radii = std::max(new_radii.TopLeft().height(), new_radii.TopRight().height()); if (max_radii > new_rect.height()) @@ -182,8 +182,8 @@ if (!new_radii.BottomLeft().width()) new_rect.Offset(-overshoot, 0); } - new_radii.SetTopLeft(FloatSize(0, 0)); - new_radii.SetTopRight(FloatSize(0, 0)); + new_radii.SetTopLeft(gfx::SizeF(0, 0)); + new_radii.SetTopRight(gfx::SizeF(0, 0)); max_radii = std::max(new_radii.BottomLeft().height(), new_radii.BottomRight().height()); if (max_radii > new_rect.height()) { @@ -200,8 +200,8 @@ if (!new_radii.TopLeft().height()) new_rect.Offset(0, -overshoot); } - new_radii.SetTopRight(FloatSize(0, 0)); - new_radii.SetBottomRight(FloatSize(0, 0)); + new_radii.SetTopRight(gfx::SizeF(0, 0)); + new_radii.SetBottomRight(gfx::SizeF(0, 0)); max_radii = std::max(new_radii.TopLeft().width(), new_radii.BottomLeft().width()); if (max_radii > new_rect.width()) @@ -216,8 +216,8 @@ if (!new_radii.TopRight().height()) new_rect.Offset(0, -overshoot); } - new_radii.SetTopLeft(FloatSize(0, 0)); - new_radii.SetBottomLeft(FloatSize(0, 0)); + new_radii.SetTopLeft(gfx::SizeF(0, 0)); + new_radii.SetBottomLeft(gfx::SizeF(0, 0)); max_radii = std::max(new_radii.TopRight().width(), new_radii.BottomRight().width()); if (max_radii > new_rect.width()) { @@ -264,7 +264,7 @@ // *outside* of inner rrect, all the way to the layer bounds (enclosing // int rect for the clip, in device space). SkPath path; - path.addRRect(inner); + path.addRRect(SkRRect(inner)); path.setFillType(SkPathFillType::kInverseWinding); PaintFlags flags; @@ -816,7 +816,8 @@ if (is_uniform_width_ && !outer_.IsRounded()) { // 4-side, solid, uniform-width, rectangular border => one drawRect() DrawSolidBorderRect( - context_, outer_.Rect(), FirstEdge().Width(), FirstEdge().color, + context_, FloatRect(outer_.Rect()), FirstEdge().Width(), + FirstEdge().color, PaintAutoDarkMode(style_, DarkModeFilter::ElementRole::kBackground)); } else { @@ -1114,7 +1115,7 @@ const Color color(edge.color.Red(), edge.color.Green(), edge.color.Blue(), alpha); - FloatRect side_rect = outer_.Rect(); + FloatRect side_rect(outer_.Rect()); const Path* path = nullptr; // TODO(fmalita): find a way to consolidate these without sacrificing @@ -1326,7 +1327,7 @@ context_.SetStrokeStyle(kNoStroke); context_.SetFillColor(color); context_.DrawRect( - RoundedIntRect(outer_.Rect()), + IntRect(gfx::ToRoundedRect(outer_.Rect())), PaintAutoDarkMode(style_, DarkModeFilter::ElementRole::kBackground)); } @@ -1461,7 +1462,7 @@ FloatRect BoxBorderPainter::CalculateSideRectIncludingInner( BoxSide side) const { - FloatRect side_rect = outer_.Rect(); + FloatRect side_rect(outer_.Rect()); float width; switch (side) {
diff --git a/third_party/blink/renderer/core/paint/box_painter_base.cc b/third_party/blink/renderer/core/paint/box_painter_base.cc index a2bc06a..8e7aa52 100644 --- a/third_party/blink/renderer/core/paint/box_painter_base.cc +++ b/third_party/blink/renderer/core/paint/box_painter_base.cc
@@ -113,7 +113,7 @@ style.VisitedDependentColor(GetCSSPropertyColor()), style.UsedColorScheme()); - FloatRect fill_rect = border.Rect(); + gfx::RectF fill_rect = border.Rect(); fill_rect.Outset(shadow_spread); if (fill_rect.IsEmpty()) continue; @@ -138,7 +138,7 @@ // This IntRect is correct even with fractional shadows, because it is // used for the rectangle of the box itself, which is always // pixel-aligned. - FloatRect rect_to_clip_out = border.Rect(); + gfx::RectF rect_to_clip_out = border.Rect(); // If the box is opaque, it is unnecessary to clip it out. However, // doing so saves time when painting the shadow. On the other hand, it @@ -146,10 +146,10 @@ // pixel-aligned. Those are avoided by insetting the clipping path by // one CSS pixel. if (has_opaque_background) - rect_to_clip_out.Outset(-1); + rect_to_clip_out.Inset(1); if (!rect_to_clip_out.IsEmpty()) - context.ClipOut(rect_to_clip_out); + context.ClipOut(FloatRect(rect_to_clip_out)); } } @@ -170,7 +170,7 @@ PaintAutoDarkMode(style, DarkModeFilter::ElementRole::kBackground)); } else { context.FillRect( - fill_rect, Color::kBlack, + FloatRect(fill_rect), Color::kBlack, PaintAutoDarkMode(style, DarkModeFilter::ElementRole::kBackground)); } } @@ -201,20 +201,20 @@ namespace { -inline FloatRect AreaCastingShadowInHole(const FloatRect& hole_rect, - const ShadowData& shadow) { - FloatRect bounds(hole_rect); +inline gfx::RectF AreaCastingShadowInHole(const gfx::RectF& hole_rect, + const ShadowData& shadow) { + gfx::RectF bounds = hole_rect; bounds.Outset(shadow.Blur()); if (shadow.Spread() < 0) bounds.Outset(-shadow.Spread()); - FloatRect offset_bounds = bounds; + gfx::RectF offset_bounds = bounds; offset_bounds.Offset(-shadow.Location().OffsetFromOrigin()); - return UnionRects(bounds, offset_bounds); + return gfx::UnionRects(bounds, offset_bounds); } -void AdjustInnerRectForSideClipping(FloatRect& inner_rect, +void AdjustInnerRectForSideClipping(gfx::RectF& inner_rect, const ShadowData& shadow, PhysicalBoxSides sides_to_include) { if (!sides_to_include.left) { @@ -260,8 +260,8 @@ AutoDarkMode auto_dark_mode( PaintAutoDarkMode(style, DarkModeFilter::ElementRole::kBackground)); - FloatRect inner_rect(bounds.Rect()); - inner_rect.Outset(-shadow.Spread()); + gfx::RectF inner_rect = bounds.Rect(); + inner_rect.Inset(shadow.Spread()); if (inner_rect.IsEmpty()) { context.FillRoundedRect(bounds, shadow_color, auto_dark_mode); continue; @@ -274,7 +274,7 @@ context.ClipRoundedRect(bounds); ApplySpreadToShadowShape(inner_rounded_rect, -shadow.Spread()); } else { - context.Clip(bounds.Rect()); + context.Clip(FloatRect(bounds.Rect())); } DrawLooperBuilder draw_looper_builder; @@ -286,9 +286,9 @@ Color fill_color(shadow_color.Red(), shadow_color.Green(), shadow_color.Blue()); - FloatRect outer_rect = AreaCastingShadowInHole(bounds.Rect(), shadow); - context.FillRectWithRoundedHole(outer_rect, inner_rounded_rect, fill_color, - auto_dark_mode); + gfx::RectF outer_rect = AreaCastingShadowInHole(bounds.Rect(), shadow); + context.FillRectWithRoundedHole(FloatRect(outer_rect), inner_rounded_rect, + fill_color, auto_dark_mode); } } @@ -572,7 +572,7 @@ scoped_refptr<Image> GetBGColorPaintWorkletImage(const Document* document, Node* node, - const FloatSize& image_size) { + const gfx::SizeF& image_size) { LocalFrame* frame = document->GetFrame(); if (!frame) return nullptr; @@ -588,7 +588,8 @@ &progress)) { return nullptr; } - return generator->Paint(image_size, node, animated_colors, offsets, progress); + return generator->Paint(FloatSize(image_size), node, animated_colors, offsets, + progress); } // Returns true if the background color was painted by the paint worklet. @@ -604,11 +605,11 @@ GetBGColorPaintWorkletImage(document, node, dest_rect.Rect().size()); if (!paint_worklet_image) return false; - FloatRect src_rect(gfx::PointF(), dest_rect.Rect().size()); + gfx::RectF src_rect(dest_rect.Rect().size()); context.DrawImageRRect( paint_worklet_image.get(), Image::kSyncDecode, PaintAutoDarkMode(style, DarkModeFilter::ElementRole::kBackground), - dest_rect, src_rect); + dest_rect, FloatRect(src_rect)); return true; } @@ -657,7 +658,7 @@ // need it for computing the image painting rect for optimization. FloatRoundedRect color_border = info.is_rounded_fill ? border_rect - : FloatRoundedRect(PixelSnappedIntRect(rect)); + : FloatRoundedRect(ToPixelSnappedRect(rect)); // When the layer has an image, figure out whether it is covered by a single // tile. The border for painting images may not be the same as the color due // to optimizations for the image painting destination that avoid painting @@ -673,9 +674,9 @@ image_border = info.is_rounded_fill ? color_border - : FloatRoundedRect(FloatRect(geometry.SnappedDestRect())); + : FloatRoundedRect(gfx::RectF(geometry.SnappedDestRect())); - const FloatRect& image_rect = image_border.Rect(); + const gfx::RectF& image_rect = image_border.Rect(); if (!image_rect.IsEmpty()) { // We cannot optimize if the tile is too small. if (geometry.TileSize().width < image_rect.width() || @@ -686,7 +687,7 @@ // At this point it should have been derived from a snapped rectangle, so // the conversion from float should be as precise as it can be. const PhysicalRect dest_rect = - PhysicalRect::FastAndLossyFromFloatRect(image_rect); + PhysicalRect::FastAndLossyFromRectF(image_rect); absl::optional<FloatRect> single_tile_src = OptimizeToSingleTileDraw( geometry, dest_rect, image, info.respect_image_orientation); @@ -741,7 +742,7 @@ DidDrawImage(node, *image, *info.image, context.GetPaintController().CurrentPaintChunkProperties(), - ToGfxRectF(image_border.Rect())); + image_border.Rect()); return true; } @@ -778,8 +779,9 @@ -fractional_inset * edges[static_cast<unsigned>(BoxSide::kLeft)].UsedWidth()); - FloatRect inset_rect(background_rounded_rect.Rect()); - inset_rect.Expand(insets); + gfx::RectF inset_rect = background_rounded_rect.Rect(); + inset_rect.Outset(insets.Left(), insets.Top(), insets.Right(), + insets.Bottom()); FloatRoundedRect::Radii inset_radii(background_rounded_rect.GetRadii()); inset_radii.Shrink(-insets.Top(), -insets.Bottom(), -insets.Left(), -insets.Right()); @@ -818,8 +820,7 @@ // Clip to the padding or content boxes as necessary. // Use FastAndLossyFromFloatRect because we know it has been pixel snapped. - PhysicalRect border_rect = - PhysicalRect::FastAndLossyFromFloatRect(border.Rect()); + PhysicalRect border_rect = PhysicalRect::FastAndLossyFromRectF(border.Rect()); if (bg_layer.Clip() == EFillBox::kContent) { border = RoundedBorderGeometry::PixelSnappedRoundedBorderWithOutsets( style, border_rect, border_padding_insets, info.sides_to_include); @@ -845,14 +846,14 @@ // culling test by verifying whether the background image covers the entire // painting area. if (info.should_paint_color) { - IntRect background_rect(PixelSnappedIntRect(scrolled_paint_rect)); + gfx::Rect background_rect = ToPixelSnappedRect(scrolled_paint_rect); // Try to paint the background with a paint worklet first in case it will be // animated. Otherwise, paint it directly into the context. if (!PaintBGColorWithPaintWorklet(document, info, node, style, FloatRoundedRect(background_rect), context)) { context.FillRect( - background_rect, info.color, + IntRect(background_rect), info.color, PaintAutoDarkMode(style, DarkModeFilter::ElementRole::kBackground)); } } @@ -872,7 +873,7 @@ info.respect_image_orientation); DidDrawImage(node, *image, *info.image, context.GetPaintController().CurrentPaintChunkProperties(), - ToGfxRectF(FloatRect(geometry.SnappedDestRect()))); + gfx::RectF(geometry.SnappedDestRect())); } }
diff --git a/third_party/blink/renderer/core/paint/box_painter_test.cc b/third_party/blink/renderer/core/paint/box_painter_test.cc index 53ca4ec..3750040a 100644 --- a/third_party/blink/renderer/core/paint/box_painter_test.cc +++ b/third_party/blink/renderer/core/paint/box_painter_test.cc
@@ -279,7 +279,7 @@ EXPECT_EQ(&root_transform, scroll_hit_test_transform.Parent()); const auto& scroll_hit_test_clip = ToUnaliased(scroll_hit_test_chunk.properties.Clip()); - EXPECT_EQ(FloatRect(0, 0, 800, 600), + EXPECT_EQ(gfx::RectF(0, 0, 800, 600), scroll_hit_test_clip.PaintClipRect().Rect()); // The scrolled contents should be scrolled and clipped. @@ -290,7 +290,7 @@ EXPECT_EQ(gfx::Rect(0, 0, 200, 300), contents_scroll->ContentsRect()); EXPECT_EQ(gfx::Rect(0, 0, 200, 200), contents_scroll->ContainerRect()); const auto& contents_clip = ToUnaliased(contents_chunk.properties.Clip()); - EXPECT_EQ(FloatRect(0, 0, 200, 200), contents_clip.PaintClipRect().Rect()); + EXPECT_EQ(gfx::RectF(0, 0, 200, 200), contents_clip.PaintClipRect().Rect()); // The scroll paint chunk maintains a reference to a scroll translation node // and the contents should be scrolled by this node.
diff --git a/third_party/blink/renderer/core/paint/clip_path_clipper.cc b/third_party/blink/renderer/core/paint/clip_path_clipper.cc index 2918e2bd..f5f65fd1 100644 --- a/third_party/blink/renderer/core/paint/clip_path_clipper.cc +++ b/third_party/blink/renderer/core/paint/clip_path_clipper.cc
@@ -132,8 +132,7 @@ UsesZoomedReferenceBox(object) ? object.StyleRef().EffectiveZoom() : 1; auto& shape = To<ShapeClipPathOperation>(clip_path); gfx::RectF bounding_box = shape.GetPath(reference_box, zoom).BoundingRect(); - bounding_box.Intersect( - gfx::RectF(ToGfxRect(LayoutRect::InfiniteIntRect()))); + bounding_box.Intersect(gfx::RectF(LayoutRect::InfiniteIntRect())); return bounding_box; } @@ -153,7 +152,7 @@ // local space is shifted by paint offset. bounding_box.Offset(reference_box.OffsetFromOrigin()); } - bounding_box.Intersect(gfx::RectF(ToGfxRect(LayoutRect::InfiniteIntRect()))); + bounding_box.Intersect(gfx::RectF(LayoutRect::InfiniteIntRect())); return bounding_box; } @@ -226,8 +225,7 @@ // CompositeClipPathAnimation. DrawingRecorder recorder( context, display_item_client, DisplayItem::kSVGClip, - ToGfxRect( - EnclosingIntRect(properties->MaskClip()->PaintClipRect().Rect()))); + gfx::ToEnclosingRect(properties->MaskClip()->PaintClipRect().Rect())); context.Save(); context.Translate(paint_offset.left, paint_offset.top);
diff --git a/third_party/blink/renderer/core/paint/clip_path_clipper_test.cc b/third_party/blink/renderer/core/paint/clip_path_clipper_test.cc index 261ab3e..73afc22c 100644 --- a/third_party/blink/renderer/core/paint/clip_path_clipper_test.cc +++ b/third_party/blink/renderer/core/paint/clip_path_clipper_test.cc
@@ -23,8 +23,7 @@ absl::optional<gfx::RectF> bounding_box = ClipPathClipper::LocalClipPathBoundingBox(object); ASSERT_TRUE(bounding_box.has_value()); - EXPECT_EQ(gfx::RectF(ToGfxRect(LayoutRect::InfiniteIntRect())), - *bounding_box); + EXPECT_EQ(gfx::RectF(LayoutRect::InfiniteIntRect()), *bounding_box); } } // unnamed namespace
diff --git a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc index 04572063..3a36e6514 100644 --- a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc +++ b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc
@@ -511,7 +511,7 @@ // transformed by a non-translation transform. owning_layer_->SetSubpixelAccumulation(subpixel_accumulation); - absl::optional<IntRect> mask_bounding_box = + absl::optional<gfx::Rect> mask_bounding_box = CSSMaskPainter::MaskBoundingBox(GetLayoutObject(), subpixel_accumulation); absl::optional<gfx::RectF> clip_path_bounding_box = ClipPathClipper::LocalClipPathBoundingBox(GetLayoutObject()); @@ -522,7 +522,7 @@ // the compositor implementation requires mask layer bound to match its // host layer. if (mask_bounding_box) { - local_bounds = *mask_bounding_box; + local_bounds = IntRect(*mask_bounding_box); if (clip_path_bounding_box) { local_bounds.Intersect( IntRect(gfx::ToEnclosingRect(*clip_path_bounding_box)));
diff --git a/third_party/blink/renderer/core/paint/css_mask_painter.cc b/third_party/blink/renderer/core/paint/css_mask_painter.cc index ff04268..49955a5 100644 --- a/third_party/blink/renderer/core/paint/css_mask_painter.cc +++ b/third_party/blink/renderer/core/paint/css_mask_painter.cc
@@ -12,7 +12,7 @@ namespace blink { -absl::optional<IntRect> CSSMaskPainter::MaskBoundingBox( +absl::optional<gfx::Rect> CSSMaskPainter::MaskBoundingBox( const LayoutObject& object, const PhysicalOffset& paint_offset) { if (!object.IsBoxModelObject() && !object.IsSVGChild()) @@ -28,8 +28,8 @@ SVGResources::ReferenceBoxForEffects(object); const float reference_box_zoom = object.IsSVGForeignObject() ? object.StyleRef().EffectiveZoom() : 1; - return IntRect(gfx::ToEnclosingRect( - masker->ResourceBoundingBox(reference_box, reference_box_zoom))); + return gfx::ToEnclosingRect( + masker->ResourceBoundingBox(reference_box, reference_box_zoom)); } } } @@ -56,7 +56,7 @@ if (style.HasMaskBoxImageOutsets()) maximum_mask_region.Expand(style.MaskBoxImageOutsets()); maximum_mask_region.offset += paint_offset; - return PixelSnappedIntRect(maximum_mask_region); + return ToPixelSnappedRect(maximum_mask_region); } } // namespace blink
diff --git a/third_party/blink/renderer/core/paint/css_mask_painter.h b/third_party/blink/renderer/core/paint/css_mask_painter.h index ded2397..63c4623 100644 --- a/third_party/blink/renderer/core/paint/css_mask_painter.h +++ b/third_party/blink/renderer/core/paint/css_mask_painter.h
@@ -7,8 +7,8 @@ #include "third_party/abseil-cpp/absl/types/optional.h" #include "third_party/blink/renderer/core/core_export.h" -#include "third_party/blink/renderer/platform/geometry/int_rect.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" +#include "ui/gfx/geometry/rect.h" namespace blink { @@ -22,7 +22,7 @@ // Returns the bounding box of the computed mask, which could be // smaller or bigger than the reference box. Returns nullopt if the // there is no mask or the mask is invalid. - static absl::optional<IntRect> MaskBoundingBox( + static absl::optional<gfx::Rect> MaskBoundingBox( const LayoutObject&, const PhysicalOffset& paint_offset); };
diff --git a/third_party/blink/renderer/core/paint/css_mask_painter_test.cc b/third_party/blink/renderer/core/paint/css_mask_painter_test.cc index fcd9425..afc8e45 100644 --- a/third_party/blink/renderer/core/paint/css_mask_painter_test.cc +++ b/third_party/blink/renderer/core/paint/css_mask_painter_test.cc
@@ -25,10 +25,10 @@ </svg> )HTML"); auto& masked = *GetLayoutObjectByElementId("masked"); - absl::optional<IntRect> mask_bounding_box = + absl::optional<gfx::Rect> mask_bounding_box = CSSMaskPainter::MaskBoundingBox(masked, PhysicalOffset()); ASSERT_TRUE(mask_bounding_box.has_value()); - EXPECT_EQ(IntRect(35, 35, 180, 180), *mask_bounding_box); + EXPECT_EQ(gfx::Rect(35, 35, 180, 180), *mask_bounding_box); } TEST_F(CSSMaskPainterTest, MaskBoundingBoxCSSBlock) { @@ -37,10 +37,10 @@ width:300px; height:200px;"></div> )HTML"); auto& masked = *GetLayoutObjectByElementId("masked"); - absl::optional<IntRect> mask_bounding_box = + absl::optional<gfx::Rect> mask_bounding_box = CSSMaskPainter::MaskBoundingBox(masked, PhysicalOffset(8, 8)); ASSERT_TRUE(mask_bounding_box.has_value()); - EXPECT_EQ(IntRect(8, 8, 300, 200), *mask_bounding_box); + EXPECT_EQ(gfx::Rect(8, 8, 300, 200), *mask_bounding_box); } TEST_F(CSSMaskPainterTest, MaskBoundingBoxCSSMaskBoxImageOutset) { @@ -50,10 +50,10 @@ -webkit-mask-box-image-outset:10px; width:300px; height:200px;"></div> )HTML"); auto& masked = *GetLayoutObjectByElementId("masked"); - absl::optional<IntRect> mask_bounding_box = + absl::optional<gfx::Rect> mask_bounding_box = CSSMaskPainter::MaskBoundingBox(masked, PhysicalOffset(8, 8)); ASSERT_TRUE(mask_bounding_box.has_value()); - EXPECT_EQ(IntRect(-2, -2, 320, 220), *mask_bounding_box); + EXPECT_EQ(gfx::Rect(-2, -2, 320, 220), *mask_bounding_box); } TEST_F(CSSMaskPainterTest, MaskBoundingBoxCSSInline) { @@ -68,10 +68,10 @@ </div> )HTML"); auto& masked = *GetLayoutObjectByElementId("masked"); - absl::optional<IntRect> mask_bounding_box = + absl::optional<gfx::Rect> mask_bounding_box = CSSMaskPainter::MaskBoundingBox(masked, PhysicalOffset(8, 8)); ASSERT_TRUE(mask_bounding_box.has_value()); - EXPECT_EQ(IntRect(8, 8, 260, 20), *mask_bounding_box); + EXPECT_EQ(gfx::Rect(8, 8, 260, 20), *mask_bounding_box); } } // unnamed namespace
diff --git a/third_party/blink/renderer/core/paint/embedded_object_painter.cc b/third_party/blink/renderer/core/paint/embedded_object_painter.cc index 601dbe1..1f8683d 100644 --- a/third_party/blink/renderer/core/paint/embedded_object_painter.cc +++ b/third_party/blink/renderer/core/paint/embedded_object_painter.cc
@@ -74,7 +74,7 @@ LayoutUnit(kReplacementTextRoundedRectHeight)); background_rect.offset += content_rect.Center() - background_rect.Center(); FloatRoundedRect rounded_background_rect( - FloatRect(PixelSnappedIntRect(background_rect)), + gfx::RectF(ToPixelSnappedRect(background_rect)), kReplacementTextRoundedRectRadius); Color color = ScaleAlpha(Color::kWhite, kReplacementTextRoundedRectOpacity); AutoDarkMode auto_dark_mode(
diff --git a/third_party/blink/renderer/core/paint/fragment_data.cc b/third_party/blink/renderer/core/paint/fragment_data.cc index eb53028..30eda97 100644 --- a/third_party/blink/renderer/core/paint/fragment_data.cc +++ b/third_party/blink/renderer/core/paint/fragment_data.cc
@@ -166,7 +166,7 @@ rare_data_->clip_path_path = nullptr; } -void FragmentData::SetClipPathCache(const IntRect& bounding_box, +void FragmentData::SetClipPathCache(const gfx::Rect& bounding_box, scoped_refptr<const RefCountedPath> path) { EnsureRareData().is_clip_path_cache_valid = true; rare_data_->clip_path_bounding_box = bounding_box;
diff --git a/third_party/blink/renderer/core/paint/fragment_data.h b/third_party/blink/renderer/core/paint/fragment_data.h index e72fddf..72113f4 100644 --- a/third_party/blink/renderer/core/paint/fragment_data.h +++ b/third_party/blink/renderer/core/paint/fragment_data.h
@@ -101,7 +101,7 @@ } void InvalidateClipPathCache(); - absl::optional<IntRect> ClipPathBoundingBox() const { + absl::optional<gfx::Rect> ClipPathBoundingBox() const { DCHECK(IsClipPathCacheValid()); return rare_data_ ? rare_data_->clip_path_bounding_box : absl::nullopt; } @@ -109,7 +109,7 @@ DCHECK(IsClipPathCacheValid()); return rare_data_ ? rare_data_->clip_path_path.get() : nullptr; } - void SetClipPathCache(const IntRect& bounding_box, + void SetClipPathCache(const gfx::Rect& bounding_box, scoped_refptr<const RefCountedPath>); void ClearClipPathCache() { if (rare_data_) { @@ -247,7 +247,7 @@ std::unique_ptr<ObjectPaintProperties> paint_properties; std::unique_ptr<RefCountedPropertyTreeState> local_border_box_properties; bool is_clip_path_cache_valid = false; - absl::optional<IntRect> clip_path_bounding_box; + absl::optional<gfx::Rect> clip_path_bounding_box; scoped_refptr<const RefCountedPath> clip_path_path; CullRect cull_rect_; CullRect contents_cull_rect_;
diff --git a/third_party/blink/renderer/core/paint/link_highlight_impl.cc b/third_party/blink/renderer/core/paint/link_highlight_impl.cc index f2f1988..9396cc29f 100644 --- a/third_party/blink/renderer/core/paint/link_highlight_impl.cc +++ b/third_party/blink/renderer/core/paint/link_highlight_impl.cc
@@ -307,12 +307,12 @@ Path new_path; for (auto& rect : rects) { - FloatRect snapped_rect(PixelSnappedIntRect(rect)); + gfx::RectF snapped_rect(ToPixelSnappedRect(rect)); if (use_rounded_rects) { constexpr float kRadius = 3; new_path.AddRoundedRect(FloatRoundedRect(snapped_rect, kRadius)); } else { - new_path.AddRect(ToGfxRectF(snapped_rect)); + new_path.AddRect(snapped_rect); } }
diff --git a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc index 9b171c0..6a2b393 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc +++ b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc
@@ -2281,9 +2281,22 @@ return true; } - if (cursor.ContainerFragment().IsSvgText() && - item.Style().UsedPointerEvents() != EPointerEvents::kBoundingBox) - return false; + if (cursor.ContainerFragment().IsSvgText()) { + if (item.Style().UsedPointerEvents() != EPointerEvents::kBoundingBox) + return false; + // Now hit test ourselves. + if (hit_test.action != kHitTestForeground || + !IsVisibleToHitTest(item, hit_test.result->GetHitTestRequest())) + return false; + // In SVG <text>, we should not refer to the geometry of kBox + // NGFragmentItems because they don't have final values. + auto bounds_rect = PhysicalRect::EnclosingRect( + item.GetLayoutObject()->ObjectBoundingBox()); + return hit_test.location.Intersects(bounds_rect) && + hit_test.AddNodeToResultWithContentOffset( + item.NodeForHitTest(), cursor.ContainerFragment(), bounds_rect, + bounds_rect.offset); + } // Now hit test ourselves. if (hit_test.action == kHitTestForeground &&
diff --git a/third_party/blink/renderer/core/paint/outline_painter.cc b/third_party/blink/renderer/core/paint/outline_painter.cc index 29e140e..52bf074 100644 --- a/third_party/blink/renderer/core/paint/outline_painter.cc +++ b/third_party/blink/renderer/core/paint/outline_painter.cc
@@ -217,14 +217,14 @@ // Given 3 points defining a right angle corner, returns the corresponding // corner in |convex_radii| or |concave_radii|. -FloatSize GetRadiiCorner(const FloatRoundedRect::Radii& convex_radii, - const FloatRoundedRect::Radii& concave_radii, - const SkPoint& p1, - const SkPoint& p2, - const SkPoint& p3) { +gfx::SizeF GetRadiiCorner(const FloatRoundedRect::Radii& convex_radii, + const FloatRoundedRect::Radii& concave_radii, + const SkPoint& p1, + const SkPoint& p2, + const SkPoint& p3) { if (p1.x() == p2.x()) { if (p1.y() == p2.y() || p2.x() == p3.x()) - return FloatSize(); + return gfx::SizeF(); DCHECK_EQ(p2.y(), p3.y()); if (p1.y() < p2.y()) { return p2.x() < p3.x() ? concave_radii.BottomLeft() @@ -234,7 +234,7 @@ } DCHECK_EQ(p1.y(), p2.y()); if (p2.x() != p3.x() || p2.y() == p3.y()) - return FloatSize(); + return gfx::SizeF(); if (p1.x() < p2.x()) { return p2.y() < p3.y() ? convex_radii.TopRight() : concave_radii.BottomRight(); @@ -248,10 +248,10 @@ const FloatRoundedRect::Radii& concave_radii, const SkPoint& prev_point, const SkPoint& next_point) { - FloatSize corner1 = GetRadiiCorner(convex_radii, concave_radii, prev_point, - line.start, line.end); - FloatSize corner2 = GetRadiiCorner(convex_radii, concave_radii, line.start, - line.end, next_point); + gfx::SizeF corner1 = GetRadiiCorner(convex_radii, concave_radii, prev_point, + line.start, line.end); + gfx::SizeF corner2 = GetRadiiCorner(convex_radii, concave_radii, line.start, + line.end, next_point); if (line.start.x() == line.end.x()) { // |line| is vertical, and adjacent lines are horizontal. float height = std::abs(line.end.y() - line.start.y()); @@ -803,8 +803,9 @@ SkRect rect; if (path.isRect(&rect)) { - context.DrawFocusRingRect(FloatRoundedRect(rect, corner_radii), color, - width, auto_dark_mode); + context.DrawFocusRingRect( + SkRRect(FloatRoundedRect(gfx::SkRectToRectF(rect), corner_radii)), + color, width, auto_dark_mode); return; }
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc index d5a755a..fc739e74 100644 --- a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc +++ b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
@@ -1302,13 +1302,13 @@ if (NeedsPaintPropertyUpdate()) { if (NeedsEffect(object_, full_context_.direct_compositing_reasons)) { - absl::optional<IntRect> mask_clip = CSSMaskPainter::MaskBoundingBox( + absl::optional<gfx::Rect> mask_clip = CSSMaskPainter::MaskBoundingBox( object_, context_.current.paint_offset); bool has_clip_path = style.HasClipPath() && fragment_data_.ClipPathBoundingBox(); bool has_mask_based_clip_path = has_clip_path && !fragment_data_.ClipPathPath(); - absl::optional<IntRect> clip_path_clip; + absl::optional<gfx::Rect> clip_path_clip; if (has_mask_based_clip_path) clip_path_clip = fragment_data_.ClipPathBoundingBox(); @@ -1317,7 +1317,7 @@ : nullptr; if (mask_clip || clip_path_clip) { - IntRect combined_clip = mask_clip ? *mask_clip : *clip_path_clip; + gfx::Rect combined_clip = mask_clip ? *mask_clip : *clip_path_clip; if (mask_clip && clip_path_clip) combined_clip.Intersect(*clip_path_clip); @@ -1327,7 +1327,7 @@ OnUpdateClip(properties_->UpdateMaskClip( *context_.current.clip, ClipPaintPropertyNode::State(context_.current.transform, - gfx::RectF(ToGfxRect(combined_clip)), + gfx::RectF(combined_clip), FloatRoundedRect(combined_clip)))); output_clip = properties_->MaskClip(); } else { @@ -1680,7 +1680,7 @@ } static FloatRoundedRect ToSnappedClipRect(const PhysicalRect& rect) { - return FloatRoundedRect(PixelSnappedIntRect(rect)); + return FloatRoundedRect(ToPixelSnappedRect(rect)); } void FragmentPaintPropertyTreeBuilder::UpdateFragmentClip() { @@ -1747,7 +1747,7 @@ // coordinates. ClipPaintPropertyNode::State state( context_.current.transform, - gfx::RectF(ToGfxRect(*fragment_data_.ClipPathBoundingBox())), + gfx::RectF(*fragment_data_.ClipPathBoundingBox()), FloatRoundedRect(*fragment_data_.ClipPathBoundingBox())); state.clip_path = fragment_data_.ClipPathPath(); OnUpdateClip(properties_->UpdateClipPathClip(*context_.current.clip, @@ -1917,9 +1917,8 @@ PhysicalRect box_rect(context_.current.paint_offset, box.Size()); ClipPaintPropertyNode::State state( context_.current.transform, - ToGfxRectF(RoundedBorderGeometry::RoundedInnerBorder(box.StyleRef(), - box_rect) - .Rect()), + RoundedBorderGeometry::RoundedInnerBorder(box.StyleRef(), box_rect) + .Rect(), RoundedBorderGeometry::PixelSnappedRoundedInnerBorder(box.StyleRef(), box_rect)); OnUpdateClip(properties_->UpdateInnerBorderRadiusClip( @@ -1967,12 +1966,12 @@ // could overflow by 1px due to pre-snapping. Adjust clip rect to // match pre-snapped box as a special case. clip_rect.SetRect( - FloatRect(clip_rect.Rect().origin(), - FloatSize(replaced.ReplacedContentRect().size))); + gfx::RectF(clip_rect.Rect().origin(), + gfx::SizeF(replaced.ReplacedContentRect().size))); } // TODO(crbug.com/1248598): Should we use non-snapped clip rect for // the first parameter? - state.SetClipRect(ToGfxRectF(clip_rect.Rect()), clip_rect); + state.SetClipRect(clip_rect.Rect(), clip_rect); } else if (object_.IsBox()) { PhysicalRect clip_rect; if (pre_paint_info_) { @@ -2015,8 +2014,7 @@ const ComputedStyle& style = box.StyleRef(); // Perspective origin has no effect without perspective. DCHECK(style.HasPerspective()); - FloatSize border_box_size(box.Size()); - return FloatPointForLengthPoint(style.PerspectiveOrigin(), border_box_size); + return PointForLengthPoint(style.PerspectiveOrigin(), gfx::SizeF(box.Size())); } static bool NeedsPerspective(const LayoutObject& object) { @@ -2142,8 +2140,8 @@ // The container bounds are snapped to integers to match the equivalent // bounds on cc::ScrollNode. The offset is snapped to match the current // integer offsets used in CompositedLayerMapping. - state.container_rect = ToGfxRect(PixelSnappedIntRect( - box.OverflowClipRect(context_.current.paint_offset))); + state.container_rect = ToPixelSnappedRect( + box.OverflowClipRect(context_.current.paint_offset)); state.contents_size = ToGfxSize(scrollable_area->PixelSnappedContentsSize( context_.current.paint_offset)); @@ -2833,7 +2831,7 @@ if (path) path->Translate(gfx::Vector2dF(fragment_data_.PaintOffset())); fragment_data_.SetClipPathCache( - IntRect(gfx::ToEnclosingRect(*bounding_box)), + gfx::ToEnclosingRect(*bounding_box), path ? AdoptRef(new RefCountedPath(std::move(*path))) : nullptr); }
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc b/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc index 8debd07d..96c9c9d 100644 --- a/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc +++ b/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc
@@ -1512,7 +1512,7 @@ ASSERT_NE(nullptr, clip); EXPECT_EQ(nullptr, transform); EXPECT_EQ(parent_clip, clip->Parent()); - EXPECT_CLIP_RECT(FloatRect(0, 0, 30, 30), clip); + EXPECT_CLIP_RECT(gfx::RectF(0, 0, 30, 30), clip); EXPECT_EQ(parent_transform, &clip->LocalTransformSpace()); // overflow: hidden and non-zero offset and viewport scale: @@ -1524,7 +1524,7 @@ ASSERT_NE(nullptr, clip); ASSERT_NE(nullptr, transform); EXPECT_EQ(parent_clip, clip->Parent()); - EXPECT_CLIP_RECT(FloatRect(0, 0, 60, 60), clip); + EXPECT_CLIP_RECT(gfx::RectF(0, 0, 60, 60), clip); EXPECT_EQ(transform, &clip->LocalTransformSpace()); EXPECT_EQ(TransformationMatrix().Translate(40, 50).Scale(0.5), transform->Matrix()); @@ -1567,7 +1567,7 @@ const auto* clip = properties1->OverflowClip(); ASSERT_NE(nullptr, clip); EXPECT_EQ(parent_clip, clip->Parent()); - EXPECT_CLIP_RECT(FloatRect(10, 20, 30, 40), clip); + EXPECT_CLIP_RECT(gfx::RectF(10, 20, 30, 40), clip); EXPECT_EQ(parent_transform, &clip->LocalTransformSpace()); const auto* properties2 = PaintPropertiesForElement("object2"); @@ -1591,7 +1591,7 @@ const auto* clip = PaintPropertiesForElement("container")->OverflowClip(); EXPECT_NE(nullptr, clip); - EXPECT_CLIP_RECT(FloatRect(0, 0, 90, 90), clip); + EXPECT_CLIP_RECT(gfx::RectF(0, 0, 90, 90), clip); } TEST_P(PaintPropertyTreeBuilderTest, @@ -1763,14 +1763,14 @@ // radius of the corner may transition from one value to the other. i.e. being // an ellipse. // The following is border box(610, 500) - border outset(110, 100). - FloatRect border_box_minus_border_outset(60, 45, 500, 400); + gfx::RectF border_box_minus_border_outset(60, 45, 500, 400); EXPECT_CLIP_RECT( FloatRoundedRect( border_box_minus_border_outset, - FloatSize(), // (top left) = max((12, 12) - (60, 45), (0, 0)) - FloatSize(), // (top right) = max((34, 34) - (50, 45), (0, 0)) - FloatSize(18, 23), // (bot left) = max((78, 78) - (60, 55), (0, 0)) - FloatSize(6, 1)), // (bot right) = max((56, 56) - (50, 55), (0, 0)) + gfx::SizeF(), // (top left) = max((12, 12) - (60, 45), (0, 0)) + gfx::SizeF(), // (top right) = max((34, 34) - (50, 45), (0, 0)) + gfx::SizeF(18, 23), // (bot left) = max((78, 78) - (60, 55), (0, 0)) + gfx::SizeF(6, 1)), // (bot right) = max((56, 56) - (50, 55), (0, 0)) &border_radius_clip); EXPECT_EQ(DocContentClip(), border_radius_clip.Parent()); CHECK_EXACT_VISUAL_RECT(PhysicalRect(0, 0, 610, 500), &div, @@ -1804,7 +1804,7 @@ expected_layout_clip_rect.SetHasRadius(); EXPECT_EQ(expected_layout_clip_rect, border_radius_clip->LayoutClipRect()); EXPECT_EQ( - FloatRoundedRect(FloatRect(0, 1, 100, 100), FloatRoundedRect::Radii(50)), + FloatRoundedRect(gfx::RectF(0, 1, 100, 100), FloatRoundedRect::Radii(50)), border_radius_clip->PaintClipRect()); } @@ -2215,7 +2215,7 @@ EXPECT_EQ(DocContentClip(), clip_properties->CssClip()->Parent()); EXPECT_EQ(DocScrollTranslation(), &clip_properties->CssClip()->LocalTransformSpace()); - EXPECT_CLIP_RECT(FloatRect(absolute_clip_rect), clip_properties->CssClip()); + EXPECT_CLIP_RECT(gfx::RectF(absolute_clip_rect), clip_properties->CssClip()); CHECK_VISUAL_RECT(absolute_clip_rect, &clip, GetDocument().View()->GetLayoutView(), // TODO(crbug.com/599939): mapToVisualRectInAncestorSpace() @@ -2274,7 +2274,7 @@ EXPECT_TRUE(DocScrollTranslation()); EXPECT_EQ(DocScrollTranslation(), &clip_properties->CssClip()->LocalTransformSpace()); - EXPECT_CLIP_RECT(FloatRect(absolute_clip_rect), clip_properties->CssClip()); + EXPECT_CLIP_RECT(gfx::RectF(absolute_clip_rect), clip_properties->CssClip()); CHECK_VISUAL_RECT(absolute_clip_rect, clip, GetDocument().View()->GetLayoutView(), // TODO(crbug.com/599939): mapToVisualRectInAncestorSpace() @@ -2328,9 +2328,9 @@ EXPECT_TRUE(DocScrollTranslation()); EXPECT_EQ(DocScrollTranslation(), &clip_properties->CssClip()->LocalTransformSpace()); - EXPECT_EQ(FloatClipRect(ToGfxRectF(FloatRect(absolute_clip_rect))), + EXPECT_EQ(FloatClipRect(gfx::RectF(absolute_clip_rect)), clip_properties->CssClip()->LayoutClipRect()); - EXPECT_EQ(FloatRoundedRect(PixelSnappedIntRect((absolute_clip_rect))), + EXPECT_EQ(FloatRoundedRect(ToPixelSnappedRect((absolute_clip_rect))), clip_properties->CssClip()->PaintClipRect()); } @@ -2392,13 +2392,13 @@ clip_properties->CssClip()->Parent()); EXPECT_EQ(overflow_properties->ScrollTranslation(), &clip_properties->CssClip()->LocalTransformSpace()); - EXPECT_CLIP_RECT(FloatRoundedRect(FloatRect(absolute_clip_rect)), + EXPECT_CLIP_RECT(FloatRoundedRect(gfx::RectF(absolute_clip_rect)), clip_properties->CssClip()); EXPECT_EQ(DocContentClip(), clip_properties->CssClipFixedPosition()->Parent()); EXPECT_EQ(overflow_properties->ScrollTranslation(), &clip_properties->CssClipFixedPosition()->LocalTransformSpace()); - EXPECT_CLIP_RECT(FloatRoundedRect(FloatRect(absolute_clip_rect)), + EXPECT_CLIP_RECT(FloatRoundedRect(gfx::RectF(absolute_clip_rect)), clip_properties->CssClipFixedPosition()); CHECK_EXACT_VISUAL_RECT(PhysicalRect(), clip, GetDocument().View()->GetLayoutView()); @@ -3781,7 +3781,7 @@ LayoutObject& rounded_box = *GetLayoutObjectByElementId("roundedBox"); const ObjectPaintProperties* rounded_box_properties = rounded_box.FirstFragment().PaintProperties(); - EXPECT_CLIP_RECT(FloatRoundedRect(FloatRect(50, 50, 200, 200), + EXPECT_CLIP_RECT(FloatRoundedRect(gfx::RectF(50, 50, 200, 200), FloatRoundedRect::Radii(50)), rounded_box_properties->InnerBorderRadiusClip()); @@ -4439,7 +4439,7 @@ const auto* fragment_clip = FragmentAt(flowthread, 0).PaintProperties()->FragmentClip(); ASSERT_NE(nullptr, fragment_clip); - EXPECT_CLIP_RECT(FloatRect(-1000000, -1000000, 2000000, 1000030), + EXPECT_CLIP_RECT(gfx::RectF(-1000000, -1000000, 2000000, 1000030), fragment_clip); EXPECT_EQ(fragment_clip, &FragmentAt(relpos, 0).LocalBorderBoxProperties().Clip()); @@ -4466,7 +4466,7 @@ const auto* fragment_clip = FragmentAt(flowthread, 1).PaintProperties()->FragmentClip(); ASSERT_NE(nullptr, fragment_clip); - EXPECT_CLIP_RECT(FloatRect(-999900, 0, 2000000, 30), fragment_clip); + EXPECT_CLIP_RECT(gfx::RectF(-999900, 0, 2000000, 30), fragment_clip); EXPECT_EQ(fragment_clip, &FragmentAt(relpos, 1).LocalBorderBoxProperties().Clip()); } @@ -4491,7 +4491,7 @@ const auto* fragment_clip = FragmentAt(flowthread, 2).PaintProperties()->FragmentClip(); ASSERT_NE(nullptr, fragment_clip); - EXPECT_CLIP_RECT(FloatRect(-1000000, 80, 2000000, 30), fragment_clip); + EXPECT_CLIP_RECT(gfx::RectF(-1000000, 80, 2000000, 30), fragment_clip); EXPECT_EQ(fragment_clip, &FragmentAt(relpos, 2).LocalBorderBoxProperties().Clip()); } @@ -4517,7 +4517,7 @@ const auto* fragment_clip = FragmentAt(flowthread, 3).PaintProperties()->FragmentClip(); ASSERT_NE(nullptr, fragment_clip); - EXPECT_CLIP_RECT(FloatRect(-999900, 80, 2000000, 999910), fragment_clip); + EXPECT_CLIP_RECT(gfx::RectF(-999900, 80, 2000000, 999910), fragment_clip); EXPECT_EQ(fragment_clip, &FragmentAt(relpos, 3).LocalBorderBoxProperties().Clip()); } @@ -5601,7 +5601,7 @@ const auto* properties = PaintPropertiesForElement("iframe"); const auto* border_radius_clip = properties->OverflowClip(); ASSERT_NE(nullptr, border_radius_clip); - EXPECT_CLIP_RECT(FloatRoundedRect(FloatRect(28, 28, 200, 200), + EXPECT_CLIP_RECT(FloatRoundedRect(gfx::RectF(28, 28, 200, 200), FloatRoundedRect::Radii(30)), border_radius_clip); EXPECT_EQ(DocContentClip(), border_radius_clip->Parent()); @@ -5628,7 +5628,7 @@ const auto* border_radius_clip = properties->OverflowClip(); ASSERT_NE(nullptr, border_radius_clip); EXPECT_CLIP_RECT( - FloatRoundedRect(FloatRect(18, 18, 50, 50), FloatRoundedRect::Radii(20)), + FloatRoundedRect(gfx::RectF(18, 18, 50, 50), FloatRoundedRect::Radii(20)), border_radius_clip); EXPECT_EQ(DocContentClip(), border_radius_clip->Parent()); EXPECT_EQ(DocScrollTranslation(), &border_radius_clip->LocalTransformSpace()); @@ -5643,15 +5643,15 @@ // When not printing, both main and child frame views have content clip. auto* const main_frame_doc = &GetDocument(); auto* const child_frame_doc = &ChildDocument(); - EXPECT_CLIP_RECT(FloatRect(0, 0, 800, 600), DocContentClip(main_frame_doc)); - EXPECT_CLIP_RECT(FloatRect(0, 0, 300, 150), DocContentClip(child_frame_doc)); + EXPECT_CLIP_RECT(gfx::RectF(0, 0, 800, 600), DocContentClip(main_frame_doc)); + EXPECT_CLIP_RECT(gfx::RectF(0, 0, 300, 150), DocContentClip(child_frame_doc)); // When the main frame is printing, it should not have content clip. FloatSize page_size(100, 100); GetFrame().StartPrinting(page_size, page_size, 1); GetDocument().View()->UpdateLifecyclePhasesForPrinting(); EXPECT_EQ(nullptr, DocContentClip(main_frame_doc)); - EXPECT_CLIP_RECT(FloatRect(0, 0, 300, 150), DocContentClip(child_frame_doc)); + EXPECT_CLIP_RECT(gfx::RectF(0, 0, 300, 150), DocContentClip(child_frame_doc)); GetFrame().EndPrinting(); UpdateAllLifecyclePhasesForTest(); @@ -5661,7 +5661,7 @@ ChildFrame().StartPrinting(page_size, page_size, 1); GetDocument().View()->UpdateLifecyclePhasesForPrinting(); ASSERT_NE(nullptr, DocContentClip(main_frame_doc)); - EXPECT_CLIP_RECT(FloatRect(0, 0, 800, 600), DocContentClip(main_frame_doc)); + EXPECT_CLIP_RECT(gfx::RectF(0, 0, 800, 600), DocContentClip(main_frame_doc)); EXPECT_EQ(nullptr, DocContentClip(child_frame_doc)); } @@ -5675,7 +5675,7 @@ const auto* properties1 = PaintPropertiesForElement("div1"); ASSERT_NE(nullptr, properties1); const auto* overflow_controls_clip = properties1->OverflowControlsClip(); - EXPECT_CLIP_RECT(FloatRect(0, 0, 5, 50), overflow_controls_clip); + EXPECT_CLIP_RECT(gfx::RectF(0, 0, 5, 50), overflow_controls_clip); const auto* properties2 = PaintPropertiesForElement("div2"); ASSERT_NE(nullptr, properties2); @@ -6616,14 +6616,14 @@ const auto* clip_path_clip = properties->ClipPathClip(); ASSERT_NE(nullptr, clip_path_clip); EXPECT_EQ(DocContentClip(), clip_path_clip->Parent()); - EXPECT_CLIP_RECT(FloatRect(75, 0, 150, 150), clip_path_clip); + EXPECT_CLIP_RECT(gfx::RectF(75, 0, 150, 150), clip_path_clip); EXPECT_EQ(transform, &clip_path_clip->LocalTransformSpace()); EXPECT_NE(nullptr, clip_path_clip->ClipPath()); const auto* overflow_clip = properties->OverflowClip(); ASSERT_NE(nullptr, overflow_clip); EXPECT_EQ(clip_path_clip, overflow_clip->Parent()); - EXPECT_CLIP_RECT(FloatRect(0, 0, 300, 150), overflow_clip); + EXPECT_CLIP_RECT(gfx::RectF(0, 0, 300, 150), overflow_clip); EXPECT_EQ(transform, &overflow_clip->LocalTransformSpace()); const auto* effect = properties->Effect();
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.h b/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.h index 495d019..4e60ccc 100644 --- a/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.h +++ b/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.h
@@ -67,15 +67,14 @@ // Used when LayoutClipRect and PaintClipRect are the same. // |expected_arg| can be FloatRect or FloatRoundedRect. -#define EXPECT_CLIP_RECT(expected_arg, clip_node) \ - do { \ - FloatRoundedRect expected((expected_arg)); \ - ASSERT_TRUE(clip_node); \ - EXPECT_EQ(expected.Rect(), \ - FloatRect((clip_node)->LayoutClipRect().Rect())); \ - EXPECT_EQ(expected.IsRounded(), \ - (clip_node)->LayoutClipRect().HasRadius()); \ - EXPECT_EQ(expected, (clip_node)->PaintClipRect()); \ +#define EXPECT_CLIP_RECT(expected_arg, clip_node) \ + do { \ + FloatRoundedRect expected((expected_arg)); \ + ASSERT_TRUE(clip_node); \ + EXPECT_EQ(expected.Rect(), (clip_node)->LayoutClipRect().Rect()); \ + EXPECT_EQ(expected.IsRounded(), \ + (clip_node)->LayoutClipRect().HasRadius()); \ + EXPECT_EQ(expected, (clip_node)->PaintClipRect()); \ } while (false) } // namespace blink
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_update_tests.cc b/third_party/blink/renderer/core/paint/paint_property_tree_update_tests.cc index a5d63460..9c3759c 100644 --- a/third_party/blink/renderer/core/paint/paint_property_tree_update_tests.cc +++ b/third_party/blink/renderer/core/paint/paint_property_tree_update_tests.cc
@@ -484,17 +484,17 @@ UpdateAllLifecyclePhasesForTest(); auto* clip_properties = div->GetLayoutObject()->FirstFragment().PaintProperties()->OverflowClip(); - EXPECT_CLIP_RECT(FloatRect(0, 0, 7, 0), clip_properties); + EXPECT_CLIP_RECT(gfx::RectF(0, 0, 7, 0), clip_properties); // Width changes should update the overflow clip. div->setAttribute(html_names::kStyleAttr, "display:inline-block; width:7px;"); UpdateAllLifecyclePhasesForTest(); clip_properties = div->GetLayoutObject()->FirstFragment().PaintProperties()->OverflowClip(); - EXPECT_CLIP_RECT(FloatRect(0, 0, 7, 0), clip_properties); + EXPECT_CLIP_RECT(gfx::RectF(0, 0, 7, 0), clip_properties); div->setAttribute(html_names::kStyleAttr, "display:inline-block; width:9px;"); UpdateAllLifecyclePhasesForTest(); - EXPECT_CLIP_RECT(FloatRect(0, 0, 9, 0), clip_properties); + EXPECT_CLIP_RECT(gfx::RectF(0, 0, 9, 0), clip_properties); // An inline block's overflow clip should be updated when padding changes, // even if the border box remains unchanged. @@ -503,33 +503,33 @@ UpdateAllLifecyclePhasesForTest(); clip_properties = div->GetLayoutObject()->FirstFragment().PaintProperties()->OverflowClip(); - EXPECT_CLIP_RECT(FloatRect(0, 0, 10, 0), clip_properties); + EXPECT_CLIP_RECT(gfx::RectF(0, 0, 10, 0), clip_properties); div->setAttribute(html_names::kStyleAttr, "display:inline-block; width:8px; padding-right:2px;"); UpdateAllLifecyclePhasesForTest(); - EXPECT_CLIP_RECT(FloatRect(0, 0, 10, 0), clip_properties); + EXPECT_CLIP_RECT(gfx::RectF(0, 0, 10, 0), clip_properties); div->setAttribute(html_names::kStyleAttr, "display:inline-block; width:8px;" "padding-right:1px; padding-left:1px;"); UpdateAllLifecyclePhasesForTest(); - EXPECT_CLIP_RECT(FloatRect(0, 0, 10, 0), clip_properties); + EXPECT_CLIP_RECT(gfx::RectF(0, 0, 10, 0), clip_properties); // An block's overflow clip should be updated when borders change. div->setAttribute(html_names::kStyleAttr, "border-right:3px solid red;"); UpdateAllLifecyclePhasesForTest(); clip_properties = div->GetLayoutObject()->FirstFragment().PaintProperties()->OverflowClip(); - EXPECT_CLIP_RECT(FloatRect(0, 0, 797, 0), clip_properties); + EXPECT_CLIP_RECT(gfx::RectF(0, 0, 797, 0), clip_properties); div->setAttribute(html_names::kStyleAttr, "border-right:5px solid red;"); UpdateAllLifecyclePhasesForTest(); - EXPECT_CLIP_RECT(FloatRect(0, 0, 795, 0), clip_properties); + EXPECT_CLIP_RECT(gfx::RectF(0, 0, 795, 0), clip_properties); // Removing overflow clip should remove the property. div->setAttribute(html_names::kStyleAttr, "overflow:hidden;"); UpdateAllLifecyclePhasesForTest(); clip_properties = div->GetLayoutObject()->FirstFragment().PaintProperties()->OverflowClip(); - EXPECT_CLIP_RECT(FloatRect(0, 0, 800, 0), clip_properties); + EXPECT_CLIP_RECT(gfx::RectF(0, 0, 800, 0), clip_properties); div->setAttribute(html_names::kStyleAttr, "overflow:visible;"); UpdateAllLifecyclePhasesForTest(); EXPECT_TRUE(!div->GetLayoutObject()->FirstFragment().PaintProperties() || @@ -553,7 +553,7 @@ auto* div = GetDocument().getElementById("div"); auto* properties = div->GetLayoutObject()->FirstFragment().PaintProperties()->OverflowClip(); - EXPECT_CLIP_RECT(FloatRect(0, 0, 7, 6), properties); + EXPECT_CLIP_RECT(gfx::RectF(0, 0, 7, 6), properties); div->setAttribute(html_names::kStyleAttr, ""); UpdateAllLifecyclePhasesForTest(); @@ -766,12 +766,12 @@ auto* outer = GetDocument().getElementById("outer"); auto* clip = GetLayoutObjectByElementId("clip"); - EXPECT_CLIP_RECT(FloatRect(45, 50, 105, 100), + EXPECT_CLIP_RECT(gfx::RectF(45, 50, 105, 100), clip->FirstFragment().PaintProperties()->CssClip()); outer->setAttribute(html_names::kStyleAttr, "height: 200px"); UpdateAllLifecyclePhasesForTest(); - EXPECT_CLIP_RECT(FloatRect(45, 50, 105, 200), + EXPECT_CLIP_RECT(gfx::RectF(45, 50, 105, 200), clip->FirstFragment().PaintProperties()->CssClip()); } @@ -899,7 +899,7 @@ auto* container = GetLayoutObjectByElementId("container"); auto* overflow_clip = container->FirstFragment().PaintProperties()->OverflowClip(); - EXPECT_CLIP_RECT(FloatRect(0, 0, 80, 80), overflow_clip); + EXPECT_CLIP_RECT(gfx::RectF(0, 0, 80, 80), overflow_clip); auto* new_style = GetDocument().CreateRawElement(html_names::kStyleTag); new_style->setTextContent("::-webkit-scrollbar {width: 40px; height: 40px}"); @@ -908,7 +908,7 @@ UpdateAllLifecyclePhasesForTest(); EXPECT_EQ(overflow_clip, container->FirstFragment().PaintProperties()->OverflowClip()); - EXPECT_CLIP_RECT(FloatRect(0, 0, 60, 60), overflow_clip); + EXPECT_CLIP_RECT(gfx::RectF(0, 0, 60, 60), overflow_clip); } TEST_P(PaintPropertyTreeUpdateTest, Preserve3DChange) { @@ -1197,7 +1197,7 @@ const auto* properties = PaintPropertiesForElement("target"); ASSERT_NE(nullptr, properties); - EXPECT_CLIP_RECT(FloatRect(0, 0, 30, 40), properties->OverflowClip()); + EXPECT_CLIP_RECT(gfx::RectF(0, 0, 30, 40), properties->OverflowClip()); GetDocument().getElementById("target")->setAttribute("overflow", "visible"); UpdateAllLifecyclePhasesForTest(); @@ -1207,7 +1207,7 @@ UpdateAllLifecyclePhasesForTest(); properties = PaintPropertiesForElement("target"); ASSERT_NE(nullptr, properties); - EXPECT_CLIP_RECT(FloatRect(0, 0, 30, 40), properties->OverflowClip()); + EXPECT_CLIP_RECT(gfx::RectF(0, 0, 30, 40), properties->OverflowClip()); } TEST_P(PaintPropertyTreeUpdateTest, SVGForeignObjectOverflowChange) { @@ -1221,7 +1221,7 @@ const auto* properties = PaintPropertiesForElement("target"); ASSERT_NE(nullptr, properties); - EXPECT_CLIP_RECT(FloatRect(10, 20, 30, 40), properties->OverflowClip()); + EXPECT_CLIP_RECT(gfx::RectF(10, 20, 30, 40), properties->OverflowClip()); GetDocument().getElementById("target")->setAttribute("overflow", "visible"); UpdateAllLifecyclePhasesForTest(); @@ -1231,7 +1231,7 @@ UpdateAllLifecyclePhasesForTest(); properties = PaintPropertiesForElement("target"); ASSERT_NE(nullptr, properties); - EXPECT_CLIP_RECT(FloatRect(10, 20, 30, 40), properties->OverflowClip()); + EXPECT_CLIP_RECT(gfx::RectF(10, 20, 30, 40), properties->OverflowClip()); } TEST_P(PaintPropertyTreeUpdateTest, @@ -1486,7 +1486,7 @@ ASSERT_TRUE(properties); ASSERT_TRUE(properties->OverflowClip()); FloatRoundedRect::Radii radii(2); - EXPECT_CLIP_RECT(FloatRoundedRect(FloatRect(8, 8, 8, 8), radii), + EXPECT_CLIP_RECT(FloatRoundedRect(gfx::RectF(8, 8, 8, 8), radii), properties->OverflowClip()); // We should update clip rect on border radius change. @@ -1496,7 +1496,7 @@ ASSERT_EQ(properties, PaintPropertiesForElement("target")); ASSERT_TRUE(properties->OverflowClip()); radii.Expand(1); - EXPECT_CLIP_RECT(FloatRoundedRect(FloatRect(8, 8, 8, 8), radii), + EXPECT_CLIP_RECT(FloatRoundedRect(gfx::RectF(8, 8, 8, 8), radii), properties->OverflowClip()); // We should update clip rect on padding change. @@ -1509,9 +1509,8 @@ // The rounded clip rect is the intersection of the rounded inner border // rect and the content box rect. EXPECT_CLIP_RECT( - FloatRoundedRect(FloatRect(12, 9, 2, 4), - FloatRoundedRect::Radii(FloatSize(0, 2), FloatSize(1, 2), - FloatSize(), FloatSize(1, 0))), + FloatRoundedRect(gfx::RectF(12, 9, 2, 4), gfx::SizeF(0, 2), + gfx::SizeF(1, 2), gfx::SizeF(), gfx::SizeF(1, 0)), properties->OverflowClip()); }
diff --git a/third_party/blink/renderer/core/paint/rounded_border_geometry.cc b/third_party/blink/renderer/core/paint/rounded_border_geometry.cc index 9b9e34a..973aff9 100644 --- a/third_party/blink/renderer/core/paint/rounded_border_geometry.cc +++ b/third_party/blink/renderer/core/paint/rounded_border_geometry.cc
@@ -15,31 +15,31 @@ namespace { FloatRoundedRect::Radii CalcRadiiFor(const ComputedStyle& style, - FloatSize size) { + gfx::SizeF size) { return FloatRoundedRect::Radii( - FloatSizeForLengthSize(style.BorderTopLeftRadius(), size), - FloatSizeForLengthSize(style.BorderTopRightRadius(), size), - FloatSizeForLengthSize(style.BorderBottomLeftRadius(), size), - FloatSizeForLengthSize(style.BorderBottomRightRadius(), size)); + SizeForLengthSize(style.BorderTopLeftRadius(), size), + SizeForLengthSize(style.BorderTopRightRadius(), size), + SizeForLengthSize(style.BorderBottomLeftRadius(), size), + SizeForLengthSize(style.BorderBottomRightRadius(), size)); } void ExcludeSides(PhysicalBoxSides sides_to_include, FloatRoundedRect::Radii* radii) { if (!sides_to_include.left) { - radii->SetTopLeft(FloatSize(0, radii->TopLeft().height())); - radii->SetBottomLeft(FloatSize(0, radii->BottomLeft().height())); + radii->SetTopLeft(gfx::SizeF(0, radii->TopLeft().height())); + radii->SetBottomLeft(gfx::SizeF(0, radii->BottomLeft().height())); } if (!sides_to_include.right) { - radii->SetTopRight(FloatSize(0, radii->TopRight().height())); - radii->SetBottomRight(FloatSize(0, radii->BottomRight().height())); + radii->SetTopRight(gfx::SizeF(0, radii->TopRight().height())); + radii->SetBottomRight(gfx::SizeF(0, radii->BottomRight().height())); } if (!sides_to_include.top) { - radii->SetTopLeft(FloatSize(radii->TopLeft().width(), 0)); - radii->SetTopRight(FloatSize(radii->TopRight().width(), 0)); + radii->SetTopLeft(gfx::SizeF(radii->TopLeft().width(), 0)); + radii->SetTopRight(gfx::SizeF(radii->TopRight().width(), 0)); } if (!sides_to_include.bottom) { - radii->SetBottomLeft(FloatSize(radii->BottomLeft().width(), 0)); - radii->SetBottomRight(FloatSize(radii->BottomRight().width(), 0)); + radii->SetBottomLeft(gfx::SizeF(radii->BottomLeft().width(), 0)); + radii->SetBottomRight(gfx::SizeF(radii->BottomRight().width(), 0)); } } @@ -48,10 +48,10 @@ FloatRoundedRect RoundedBorderGeometry::RoundedBorder( const ComputedStyle& style, const PhysicalRect& border_rect) { - FloatRoundedRect rounded_rect((FloatRect(border_rect))); + FloatRoundedRect rounded_rect((gfx::RectF(border_rect))); if (style.HasBorderRadius()) { FloatRoundedRect::Radii radii = - CalcRadiiFor(style, FloatSize(border_rect.size)); + CalcRadiiFor(style, gfx::SizeF(border_rect.size)); rounded_rect.SetRadii(radii); rounded_rect.ConstrainRadii(); } @@ -62,10 +62,10 @@ const ComputedStyle& style, const PhysicalRect& border_rect, PhysicalBoxSides sides_to_include) { - FloatRoundedRect rounded_rect(PixelSnappedIntRect(border_rect)); + FloatRoundedRect rounded_rect(ToPixelSnappedRect(border_rect)); if (style.HasBorderRadius()) { FloatRoundedRect::Radii radii = - CalcRadiiFor(style, FloatSize(border_rect.size)); + CalcRadiiFor(style, gfx::SizeF(border_rect.size)); ExcludeSides(sides_to_include, &radii); rounded_rect.SetRadii(radii); rounded_rect.ConstrainRadii(); @@ -88,7 +88,7 @@ inner_rect.Expand(insets); inner_rect.size.ClampNegativeToZero(); - FloatRoundedRect float_inner_rect((FloatRect(inner_rect))); + FloatRoundedRect float_inner_rect((gfx::RectF(inner_rect))); if (style.HasBorderRadius()) { FloatRoundedRect::Radii radii = @@ -132,12 +132,12 @@ // preventing an inner border for a very thin element from snapping to // zero size as occurs when a unit width border is applied to a sub-pixel // sized element. So round without forcing non-near-zero sizes to one. - FloatRoundedRect rounded_rect( - IntRect(ToRoundedPoint(rect_with_outsets.offset), - IntSize(SnapSizeToPixelAllowingZero(rect_with_outsets.Width(), - rect_with_outsets.X()), - SnapSizeToPixelAllowingZero(rect_with_outsets.Height(), - rect_with_outsets.Y())))); + FloatRoundedRect rounded_rect(gfx::Rect( + ToRoundedPoint(rect_with_outsets.offset), + gfx::Size(SnapSizeToPixelAllowingZero(rect_with_outsets.Width(), + rect_with_outsets.X()), + SnapSizeToPixelAllowingZero(rect_with_outsets.Height(), + rect_with_outsets.Y())))); if (style.HasBorderRadius()) { FloatRoundedRect::Radii radii =
diff --git a/third_party/blink/renderer/core/paint/rounded_inner_rect_clipper.cc b/third_party/blink/renderer/core/paint/rounded_inner_rect_clipper.cc index 3832e93e..1ba389a4 100644 --- a/third_party/blink/renderer/core/paint/rounded_inner_rect_clipper.cc +++ b/third_party/blink/renderer/core/paint/rounded_inner_rect_clipper.cc
@@ -23,17 +23,17 @@ // making sure we clip opposing corners together. if (!clip_rect.GetRadii().TopLeft().IsEmpty() || !clip_rect.GetRadii().BottomRight().IsEmpty()) { - FloatRect top_corner(clip_rect.Rect().x(), clip_rect.Rect().y(), - rect.Right() - clip_rect.Rect().x(), - rect.Bottom() - clip_rect.Rect().y()); + gfx::RectF top_corner(clip_rect.Rect().x(), clip_rect.Rect().y(), + rect.Right() - clip_rect.Rect().x(), + rect.Bottom() - clip_rect.Rect().y()); FloatRoundedRect::Radii top_corner_radii; top_corner_radii.SetTopLeft(clip_rect.GetRadii().TopLeft()); rounded_rect_clips.push_back( FloatRoundedRect(top_corner, top_corner_radii)); - FloatRect bottom_corner(rect.X().ToFloat(), rect.Y().ToFloat(), - clip_rect.Rect().right() - rect.X().ToFloat(), - clip_rect.Rect().bottom() - rect.Y().ToFloat()); + gfx::RectF bottom_corner(rect.X().ToFloat(), rect.Y().ToFloat(), + clip_rect.Rect().right() - rect.X().ToFloat(), + clip_rect.Rect().bottom() - rect.Y().ToFloat()); FloatRoundedRect::Radii bottom_corner_radii; bottom_corner_radii.SetBottomRight(clip_rect.GetRadii().BottomRight()); rounded_rect_clips.push_back( @@ -42,17 +42,17 @@ if (!clip_rect.GetRadii().TopRight().IsEmpty() || !clip_rect.GetRadii().BottomLeft().IsEmpty()) { - FloatRect top_corner(rect.X().ToFloat(), clip_rect.Rect().y(), - clip_rect.Rect().right() - rect.X().ToFloat(), - rect.Bottom() - clip_rect.Rect().y()); + gfx::RectF top_corner(rect.X().ToFloat(), clip_rect.Rect().y(), + clip_rect.Rect().right() - rect.X().ToFloat(), + rect.Bottom() - clip_rect.Rect().y()); FloatRoundedRect::Radii top_corner_radii; top_corner_radii.SetTopRight(clip_rect.GetRadii().TopRight()); rounded_rect_clips.push_back( FloatRoundedRect(top_corner, top_corner_radii)); - FloatRect bottom_corner(clip_rect.Rect().x(), rect.Y().ToFloat(), - rect.Right() - clip_rect.Rect().x(), - clip_rect.Rect().bottom() - rect.Y().ToFloat()); + gfx::RectF bottom_corner(clip_rect.Rect().x(), rect.Y().ToFloat(), + rect.Right() - clip_rect.Rect().x(), + clip_rect.Rect().bottom() - rect.Y().ToFloat()); FloatRoundedRect::Radii bottom_corner_radii; bottom_corner_radii.SetBottomLeft(clip_rect.GetRadii().BottomLeft()); rounded_rect_clips.push_back(
diff --git a/third_party/blink/renderer/core/paint/svg_mask_painter.cc b/third_party/blink/renderer/core/paint/svg_mask_painter.cc index 8699e4ed..83067be 100644 --- a/third_party/blink/renderer/core/paint/svg_mask_painter.cc +++ b/third_party/blink/renderer/core/paint/svg_mask_painter.cc
@@ -12,6 +12,7 @@ #include "third_party/blink/renderer/platform/graphics/paint/drawing_recorder.h" #include "third_party/blink/renderer/platform/graphics/paint/paint_controller.h" #include "third_party/blink/renderer/platform/graphics/paint/scoped_paint_chunk_properties.h" +#include "ui/gfx/geometry/rect_conversions.h" namespace blink { @@ -38,9 +39,9 @@ return; // TODO(fs): Should clip this with the bounds of the mask's PaintRecord. - FloatRect visual_rect = properties->MaskClip()->PaintClipRect().Rect(); + gfx::RectF visual_rect = properties->MaskClip()->PaintClipRect().Rect(); DrawingRecorder recorder(context, display_item_client, DisplayItem::kSVGMask, - ToGfxRect(EnclosingIntRect(visual_rect))); + gfx::ToEnclosingRect(visual_rect)); SVGResourceClient* client = SVGResources::GetClient(layout_object); const ComputedStyle& style = layout_object.StyleRef();
diff --git a/third_party/blink/renderer/core/paint/view_painter_test.cc b/third_party/blink/renderer/core/paint/view_painter_test.cc index ed3cf16..521de663 100644 --- a/third_party/blink/renderer/core/paint/view_painter_test.cc +++ b/third_party/blink/renderer/core/paint/view_painter_test.cc
@@ -183,7 +183,7 @@ EXPECT_EQ(nullptr, scroll_hit_test_transform.ScrollNode()); const auto& scroll_hit_test_clip = ToUnaliased(scroll_hit_test_chunk.properties.Clip()); - EXPECT_EQ(FloatRect(LayoutRect::InfiniteIntRect()), + EXPECT_EQ(gfx::RectF(LayoutRect::InfiniteIntRect()), scroll_hit_test_clip.PaintClipRect().Rect()); // The scrolled contents should be scrolled and clipped. @@ -193,7 +193,7 @@ EXPECT_EQ(gfx::Rect(0, 0, 800, 2000), contents_scroll->ContentsRect()); EXPECT_EQ(gfx::Rect(0, 0, 800, 600), contents_scroll->ContainerRect()); const auto& contents_clip = ToUnaliased(contents_chunk.properties.Clip()); - EXPECT_EQ(FloatRect(0, 0, 800, 600), contents_clip.PaintClipRect().Rect()); + EXPECT_EQ(gfx::RectF(0, 0, 800, 600), contents_clip.PaintClipRect().Rect()); // The scroll hit test paint chunk maintains a reference to a scroll offset // translation node and the contents should be scrolled by this node.
diff --git a/third_party/blink/renderer/core/style/basic_shapes.cc b/third_party/blink/renderer/core/style/basic_shapes.cc index a785a8c1..34da9e9 100644 --- a/third_party/blink/renderer/core/style/basic_shapes.cc +++ b/third_party/blink/renderer/core/style/basic_shapes.cc
@@ -149,7 +149,7 @@ DCHECK(path.IsEmpty()); float left = FloatValueForLength(left_, bounding_box.width()); float top = FloatValueForLength(top_, bounding_box.height()); - FloatRect rect( + gfx::RectF rect( left + bounding_box.x(), top + bounding_box.y(), std::max<float>(bounding_box.width() - left - FloatValueForLength(right_, bounding_box.width()), @@ -157,12 +157,12 @@ std::max<float>(bounding_box.height() - top - FloatValueForLength(bottom_, bounding_box.height()), 0)); - FloatSize box_size(bounding_box.size()); + gfx::SizeF box_size = bounding_box.size(); auto radii = FloatRoundedRect::Radii( - FloatSizeForLengthSize(top_left_radius_, box_size), - FloatSizeForLengthSize(top_right_radius_, box_size), - FloatSizeForLengthSize(bottom_left_radius_, box_size), - FloatSizeForLengthSize(bottom_right_radius_, box_size)); + SizeForLengthSize(top_left_radius_, box_size), + SizeForLengthSize(top_right_radius_, box_size), + SizeForLengthSize(bottom_left_radius_, box_size), + SizeForLengthSize(bottom_right_radius_, box_size)); FloatRoundedRect final_rect(rect, radii); final_rect.ConstrainRadii();
diff --git a/third_party/blink/renderer/core/style/computed_style.cc b/third_party/blink/renderer/core/style/computed_style.cc index 5ba6b08..b1cceea 100644 --- a/third_party/blink/renderer/core/style/computed_style.cc +++ b/third_party/blink/renderer/core/style/computed_style.cc
@@ -1397,7 +1397,7 @@ // they will have the default value, auto. gfx::PointF anchor_point(origin_x, origin_y); if (!position.X().IsAuto() || !anchor.X().IsAuto()) { - anchor_point = FloatPointForLengthPoint(anchor, bounding_box.size()); + anchor_point = PointForLengthPoint(anchor, ToGfxSizeF(bounding_box.size())); anchor_point += bounding_box.OffsetFromOrigin(); // Shift the origin from transform-origin to offset-anchor.
diff --git a/third_party/blink/renderer/core/svg/svg_element_test.cc b/third_party/blink/renderer/core/svg/svg_element_test.cc index c2f11c4e..083ec256 100644 --- a/third_party/blink/renderer/core/svg/svg_element_test.cc +++ b/third_party/blink/renderer/core/svg/svg_element_test.cc
@@ -15,6 +15,7 @@ TEST_F(SVGElementTest, BaseComputedStyleForSMILWithContainerQueries) { ScopedCSSContainerQueriesForTest scoped_cq(true); ScopedCSSContainerSkipStyleRecalcForTest scoped_skip(true); + ScopedLayoutNGForTest scoped_ng(true); GetDocument().body()->setInnerHTML(R"HTML( <style>
diff --git a/third_party/blink/renderer/core/svg/svg_rect_element.cc b/third_party/blink/renderer/core/svg/svg_rect_element.cc index 32c0dbc..4f68973c 100644 --- a/third_party/blink/renderer/core/svg/svg_rect_element.cc +++ b/third_party/blink/renderer/core/svg/svg_rect_element.cc
@@ -97,7 +97,7 @@ gfx::Vector2dF origin = length_context.ResolveLengthPair(style.X(), style.Y(), style); - FloatRect rect(origin.x(), origin.y(), size.x(), size.y()); + gfx::RectF rect(origin.x(), origin.y(), size.x(), size.y()); gfx::Vector2dF radii = length_context.ResolveLengthPair(style.Rx(), style.Ry(), style); @@ -117,7 +117,7 @@ radii.SetToMin(gfx::ScaleVector2d(size, 0.5)); path.AddRoundedRect(FloatRoundedRect(rect, radii.x(), radii.y())); } else { - path.AddRect(ToGfxRectF(rect)); + path.AddRect(rect); } return path; }
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc index 415090c2..e66dc59e 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc
@@ -530,7 +530,7 @@ // TODO(crbug.com/1234113): Instrument new canvas APIs. identifiability_study_helper_.set_encountered_skipped_ops(); - FloatSize r[num_radii]; + gfx::SizeF r[num_radii]; for (int i = 0; i < num_radii; ++i) { switch (radii[i]->GetContentType()) { case V8UnionDOMPointInitOrUnrestrictedDouble::ContentType:: @@ -550,8 +550,8 @@ "Y-radius value " + String::Number(r_y) + " is negative."); return; } - r[i] = FloatSize(base::saturated_cast<float>(p->x()), - base::saturated_cast<float>(p->y())); + r[i] = gfx::SizeF(base::saturated_cast<float>(p->x()), + base::saturated_cast<float>(p->y())); break; } case V8UnionDOMPointInitOrUnrestrictedDouble::ContentType:: @@ -565,7 +565,7 @@ " is negative."); return; } - r[i] = FloatSize(a, a); + r[i] = gfx::SizeF(a, a); break; } } @@ -578,7 +578,7 @@ return; } - FloatSize corner_radii[4]; // row-wise ordering + gfx::SizeF corner_radii[4]; // row-wise ordering switch (num_radii) { case 1: corner_radii[0] = corner_radii[1] = corner_radii[2] = corner_radii[3] = @@ -606,12 +606,9 @@ clockwise = false; x += width; width = -width; - FloatSize tmp = corner_radii[1]; - corner_radii[1] = corner_radii[0]; - corner_radii[0] = tmp; - tmp = corner_radii[3]; - corner_radii[3] = corner_radii[2]; - corner_radii[2] = tmp; + using std::swap; + swap(corner_radii[0], corner_radii[1]); + swap(corner_radii[2], corner_radii[3]); } if (UNLIKELY(height < 0)) { @@ -619,15 +616,12 @@ clockwise = !clockwise; y += height; height = -height; - FloatSize tmp = corner_radii[2]; - corner_radii[2] = corner_radii[0]; - corner_radii[0] = tmp; - tmp = corner_radii[3]; - corner_radii[3] = corner_radii[1]; - corner_radii[1] = tmp; + using std::swap; + swap(corner_radii[0], corner_radii[2]); + swap(corner_radii[1], corner_radii[3]); } - FloatRect rect(x, y, width, height); + gfx::RectF rect(x, y, width, height); path_.AddRoundedRect(FloatRoundedRect(rect, corner_radii[0], corner_radii[1], corner_radii[2], corner_radii[3]), clockwise);
diff --git a/third_party/blink/renderer/modules/locks/lock.idl b/third_party/blink/renderer/modules/locks/lock.idl index 182914a..edb2c75f 100644 --- a/third_party/blink/renderer/modules/locks/lock.idl +++ b/third_party/blink/renderer/modules/locks/lock.idl
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// https://wicg.github.io/web-locks/#lock +// https://w3c.github.io/web-locks/#lock [ SecureContext, Exposed=(Window,Worker)
diff --git a/third_party/blink/renderer/modules/locks/lock_info.idl b/third_party/blink/renderer/modules/locks/lock_info.idl index f788995..40ae6026 100644 --- a/third_party/blink/renderer/modules/locks/lock_info.idl +++ b/third_party/blink/renderer/modules/locks/lock_info.idl
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// https://wicg.github.io/web-locks/#dictdef-lockinfo +// https://w3c.github.io/web-locks/#dictdef-lockinfo dictionary LockInfo { DOMString name; LockMode mode;
diff --git a/third_party/blink/renderer/modules/locks/lock_manager.idl b/third_party/blink/renderer/modules/locks/lock_manager.idl index 9ef2227..2807232 100644 --- a/third_party/blink/renderer/modules/locks/lock_manager.idl +++ b/third_party/blink/renderer/modules/locks/lock_manager.idl
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// https://wicg.github.io/web-locks/#callbackdef-lockgrantedcallback +// https://w3c.github.io/web-locks/#callbackdef-lockgrantedcallback callback LockGrantedCallback = any (Lock? lock); -// https://wicg.github.io/web-locks/#lockmanager +// https://w3c.github.io/web-locks/#lockmanager [ SecureContext, Exposed=(Window,Worker)
diff --git a/third_party/blink/renderer/modules/locks/lock_manager_snapshot.idl b/third_party/blink/renderer/modules/locks/lock_manager_snapshot.idl index a53b8e5..ebc3b91f 100644 --- a/third_party/blink/renderer/modules/locks/lock_manager_snapshot.idl +++ b/third_party/blink/renderer/modules/locks/lock_manager_snapshot.idl
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// https://wicg.github.io/web-locks/#dictdef-lockmanagersnapshot +// https://w3c.github.io/web-locks/#dictdef-lockmanagersnapshot dictionary LockManagerSnapshot { sequence<LockInfo> held; sequence<LockInfo> pending;
diff --git a/third_party/blink/renderer/modules/locks/lock_options.idl b/third_party/blink/renderer/modules/locks/lock_options.idl index 6afdfd87..a19d504 100644 --- a/third_party/blink/renderer/modules/locks/lock_options.idl +++ b/third_party/blink/renderer/modules/locks/lock_options.idl
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// https://wicg.github.io/web-locks/#enumdef-lockmode +// https://w3c.github.io/web-locks/#enumdef-lockmode enum LockMode { "shared", "exclusive" }; -// https://wicg.github.io/web-locks/#dictdef-lockoptions +// https://w3c.github.io/web-locks/#dictdef-lockoptions dictionary LockOptions { LockMode mode = "exclusive"; boolean ifAvailable = false;
diff --git a/third_party/blink/renderer/modules/locks/navigator_locks.idl b/third_party/blink/renderer/modules/locks/navigator_locks.idl index 87389ef..252d5e3 100644 --- a/third_party/blink/renderer/modules/locks/navigator_locks.idl +++ b/third_party/blink/renderer/modules/locks/navigator_locks.idl
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// https://wicg.github.io/web-locks/#navigatorlocks +// https://w3c.github.io/web-locks/#navigatorlocks [ SecureContext, Exposed=Window,
diff --git a/third_party/blink/renderer/modules/locks/worker_navigator_locks.idl b/third_party/blink/renderer/modules/locks/worker_navigator_locks.idl index 4dfdd5e..4e372bc 100644 --- a/third_party/blink/renderer/modules/locks/worker_navigator_locks.idl +++ b/third_party/blink/renderer/modules/locks/worker_navigator_locks.idl
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// https://wicg.github.io/web-locks/#navigatorlocks +// https://w3c.github.io/web-locks/#navigatorlocks [ SecureContext, Exposed=Worker,
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc index 75a17cb1..d27530e 100644 --- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc +++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
@@ -139,11 +139,8 @@ public: PeerConnectionStaticDeps() : chrome_signaling_thread_("WebRTC_Signaling"), - chrome_network_thread_("WebRTC_Network") { - if (base::FeatureList::IsEnabled(features::kWebRtcDistinctWorkerThread)) { - chrome_worker_thread_.emplace("WebRTC_Worker"); - } - } + chrome_worker_thread_("WebRTC_Worker"), + chrome_network_thread_("WebRTC_Network") {} void EnsureChromeThreadsStarted() { if (!chrome_signaling_thread_.IsRunning()) @@ -151,8 +148,8 @@ if (!chrome_network_thread_.IsRunning()) chrome_network_thread_.Start(); - if (chrome_worker_thread_ && !chrome_worker_thread_->IsRunning()) - chrome_worker_thread_->Start(); + if (!chrome_worker_thread_.IsRunning()) + chrome_worker_thread_.Start(); // To allow sending to the signaling/worker threads. jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop(); @@ -160,13 +157,9 @@ } base::WaitableEvent& InitializeWorkerThread() { - // If there is no worker thread, the event was already created SIGNALED. - if (!chrome_worker_thread_) - return init_worker_event; - if (!worker_thread_) { PostCrossThreadTask( - *chrome_worker_thread_->task_runner(), FROM_HERE, + *chrome_worker_thread_.task_runner(), FROM_HERE, CrossThreadBindOnce( &PeerConnectionStaticDeps::InitializeOnThread, CrossThreadUnretained(&worker_thread_), @@ -215,10 +208,6 @@ rtc::Thread* GetWorkerThread() { return worker_thread_; } rtc::Thread* GetNetworkThread() { return network_thread_; } base::Thread& GetChromeSignalingThread() { return chrome_signaling_thread_; } - base::Thread* GetChromeWorkerThread() { - return chrome_worker_thread_.has_value() ? &*chrome_worker_thread_ - : nullptr; - } base::Thread& GetChromeNetworkThread() { return chrome_network_thread_; } private: @@ -275,7 +264,7 @@ rtc::Thread* worker_thread_ = nullptr; rtc::Thread* network_thread_ = nullptr; base::Thread chrome_signaling_thread_; - absl::optional<base::Thread> chrome_worker_thread_; + base::Thread chrome_worker_thread_; base::Thread chrome_network_thread_; // WaitableEvents for observing thread initialization. @@ -284,11 +273,7 @@ base::WaitableEvent::InitialState::NOT_SIGNALED}; base::WaitableEvent init_worker_event{ base::WaitableEvent::ResetPolicy::MANUAL, - // If we don't create a separate worker thread, start the event as already - // signaled so it doesn't block anything. - base::FeatureList::IsEnabled(features::kWebRtcDistinctWorkerThread) - ? base::WaitableEvent::InitialState::NOT_SIGNALED - : base::WaitableEvent::InitialState::SIGNALED}; + base::WaitableEvent::InitialState::NOT_SIGNALED}; base::WaitableEvent init_network_event{ base::WaitableEvent::ResetPolicy::MANUAL, base::WaitableEvent::InitialState::NOT_SIGNALED}; @@ -313,9 +298,6 @@ base::Thread& GetChromeSignalingThread() { return StaticDeps().GetChromeSignalingThread(); } -base::Thread* GetChromeWorkerThread() { - return StaticDeps().GetChromeWorkerThread(); -} base::Thread& GetChromeNetworkThread() { return StaticDeps().GetChromeNetworkThread(); } @@ -522,7 +504,7 @@ // Wait for the worker thread, since `InitializeSignalingThread` needs to // refer to `worker_thread_`. worker_thread_started_event.Wait(); - CHECK(!GetChromeWorkerThread() || GetWorkerThread()); + CHECK(GetWorkerThread()); if (!metronome_source_ && base::FeatureList::IsEnabled(kWebRtcMetronomeTaskQueue)) {
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.cc index 8ef2632f..8ce835e 100644 --- a/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.cc +++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.cc
@@ -1151,23 +1151,9 @@ UserMediaRequest* user_media_request) { DCHECK_CALLED_ON_VALID_THREAD(main_thread_); - // When running tests, it is possible that UserMediaRequest's - // ExecutionContext is null. - // - // TODO(crbug.com/704136): Is there a better way to do this? - String security_origin; - if (!user_media_request->GetExecutionContext()) { - security_origin = - SecurityOrigin::CreateFromString("test://test")->ToString(); - } else { - security_origin = user_media_request->GetExecutionContext() - ->GetSecurityOrigin() - ->ToString(); - } - peer_connection_tracker_host_->GetUserMedia( - security_origin, user_media_request->request_id(), - user_media_request->Audio(), user_media_request->Video(), + user_media_request->request_id(), user_media_request->Audio(), + user_media_request->Video(), SerializeMediaConstraints(user_media_request->AudioConstraints()), SerializeMediaConstraints(user_media_request->VideoConstraints())); }
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker_test.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker_test.cc index 308df17..d520255a 100644 --- a/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker_test.cc +++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker_test.cc
@@ -64,9 +64,8 @@ void(blink::mojom::blink::PeerConnectionInfoPtr)); MOCK_METHOD1(RemovePeerConnection, void(int)); MOCK_METHOD2(OnPeerConnectionSessionIdSet, void(int, const String&)); - MOCK_METHOD6( - GetUserMedia, - void(const String&, int, bool, bool, const String&, const String&)); + MOCK_METHOD5(GetUserMedia, + void(int, bool, bool, const String&, const String&)); MOCK_METHOD4(GetUserMediaSuccess, void(int, const String&, const String&, const String&)); MOCK_METHOD3(GetUserMediaFailure, void(int, const String&, const String&));
diff --git a/third_party/blink/renderer/platform/geometry/float_quad.cc b/third_party/blink/renderer/platform/geometry/float_quad.cc index 16ca1540..75e4917 100644 --- a/third_party/blink/renderer/platform/geometry/float_quad.cc +++ b/third_party/blink/renderer/platform/geometry/float_quad.cc
@@ -228,7 +228,7 @@ } bool FloatQuad::IntersectsEllipse(const gfx::PointF& center, - const FloatSize& radii) const { + const gfx::SizeF& radii) const { // Transform the ellipse to an origin-centered circle whose radius is the // product of major radius and minor radius. Here we apply the same // transformation to the quad.
diff --git a/third_party/blink/renderer/platform/geometry/float_quad.h b/third_party/blink/renderer/platform/geometry/float_quad.h index a0972c85..6fc4a733 100644 --- a/third_party/blink/renderer/platform/geometry/float_quad.h +++ b/third_party/blink/renderer/platform/geometry/float_quad.h
@@ -36,6 +36,8 @@ #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" #include "ui/gfx/geometry/point_f.h" #include "ui/gfx/geometry/quad_f.h" +#include "ui/gfx/geometry/rect.h" +#include "ui/gfx/geometry/rect_f.h" struct SkPoint; @@ -62,12 +64,24 @@ p3_(in_rect.right(), in_rect.bottom()), p4_(in_rect.x(), in_rect.bottom()) {} + explicit constexpr FloatQuad(const gfx::RectF& in_rect) + : p1_(in_rect.origin()), + p2_(in_rect.right(), in_rect.y()), + p3_(in_rect.right(), in_rect.bottom()), + p4_(in_rect.x(), in_rect.bottom()) {} + explicit FloatQuad(const IntRect& in_rect) : p1_(in_rect.origin()), p2_(in_rect.right(), in_rect.y()), p3_(in_rect.right(), in_rect.bottom()), p4_(in_rect.x(), in_rect.bottom()) {} + explicit FloatQuad(const gfx::Rect& in_rect) + : p1_(in_rect.origin()), + p2_(in_rect.right(), in_rect.y()), + p3_(in_rect.right(), in_rect.bottom()), + p4_(in_rect.x(), in_rect.bottom()) {} + // Converts from an array of four SkPoints, as from SkMatrix::mapRectToQuad. explicit FloatQuad(const SkPoint (&)[4]); @@ -113,6 +127,9 @@ // This intersection is edge-inclusive and will return true even if the // intersecting area is empty (i.e., the intersection is a line or a point). bool IntersectsRect(const FloatRect&) const; + bool IntersectsRect(const gfx::RectF& rect) const { + return IntersectsRect(FloatRect(rect)); + } // Test whether any part of the circle/ellipse intersects with this quad. // Note that these two functions only work for convex quads. @@ -120,7 +137,7 @@ // intersecting area is empty (i.e., the intersection is a line or a point). bool IntersectsCircle(const gfx::PointF& center, float radius) const; bool IntersectsEllipse(const gfx::PointF& center, - const FloatSize& radii) const; + const gfx::SizeF& radii) const; // The center of the quad. If the quad is the result of a affine-transformed // rectangle this is the same as the original center transformed.
diff --git a/third_party/blink/renderer/platform/geometry/float_rounded_rect.cc b/third_party/blink/renderer/platform/geometry/float_rounded_rect.cc index 11b629264..e395db67 100644 --- a/third_party/blink/renderer/platform/geometry/float_rounded_rect.cc +++ b/third_party/blink/renderer/platform/geometry/float_rounded_rect.cc
@@ -33,23 +33,24 @@ #include "third_party/blink/renderer/platform/geometry/float_quad.h" #include "third_party/blink/renderer/platform/geometry/layout_rect.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" +#include "ui/gfx/geometry/insets_f.h" namespace blink { FloatRoundedRect::FloatRoundedRect(float x, float y, float width, float height) : rect_(x, y, width, height) {} -FloatRoundedRect::FloatRoundedRect(const FloatRect& rect, const Radii& radii) +FloatRoundedRect::FloatRoundedRect(const gfx::RectF& rect, const Radii& radii) : rect_(rect), radii_(radii) {} -FloatRoundedRect::FloatRoundedRect(const IntRect& rect, const Radii& radii) - : rect_(FloatRect(rect)), radii_(radii) {} +FloatRoundedRect::FloatRoundedRect(const gfx::Rect& rect, const Radii& radii) + : rect_(rect), radii_(radii) {} -FloatRoundedRect::FloatRoundedRect(const FloatRect& rect, - const FloatSize& top_left, - const FloatSize& top_right, - const FloatSize& bottom_left, - const FloatSize& bottom_right) +FloatRoundedRect::FloatRoundedRect(const gfx::RectF& rect, + const gfx::SizeF& top_left, + const gfx::SizeF& top_right, + const gfx::SizeF& bottom_left, + const gfx::SizeF& bottom_right) : rect_(rect), radii_(top_left, top_right, bottom_left, bottom_right) {} void FloatRoundedRect::Radii::SetMinimumRadius(float minimum_radius) { @@ -78,16 +79,16 @@ // If either radius on a corner becomes zero, reset both radii on that corner. top_left_.Scale(factor); if (!top_left_.width() || !top_left_.height()) - top_left_ = FloatSize(); + top_left_ = gfx::SizeF(); top_right_.Scale(factor); if (!top_right_.width() || !top_right_.height()) - top_right_ = FloatSize(); + top_right_ = gfx::SizeF(); bottom_left_.Scale(factor); if (!bottom_left_.width() || !bottom_left_.height()) - bottom_left_ = FloatSize(); + bottom_left_ = gfx::SizeF(); bottom_right_.Scale(factor); if (!bottom_right_.width() || !bottom_right_.height()) - bottom_right_ = FloatSize(); + bottom_right_ = gfx::SizeF(); } void FloatRoundedRect::Radii::Shrink(float top_width, @@ -141,20 +142,21 @@ } } -static inline float CornerRectIntercept(float y, const FloatRect& corner_rect) { +static inline float CornerRectIntercept(float y, + const gfx::RectF& corner_rect) { DCHECK_GT(corner_rect.height(), 0); return corner_rect.width() * sqrt(1 - (y * y) / (corner_rect.height() * corner_rect.height())); } -FloatRect FloatRoundedRect::RadiusCenterRect() const { - FloatRectOutsets maximum_radius_insets( - -std::max(radii_.TopLeft().height(), radii_.TopRight().height()), - -std::max(radii_.TopRight().width(), radii_.BottomRight().width()), - -std::max(radii_.BottomLeft().height(), radii_.BottomRight().height()), - -std::max(radii_.TopLeft().width(), radii_.BottomLeft().width())); - FloatRect center_rect(rect_); - center_rect.Expand(maximum_radius_insets); +gfx::RectF FloatRoundedRect::RadiusCenterRect() const { + gfx::InsetsF maximum_radius_insets( + std::max(radii_.TopLeft().height(), radii_.TopRight().height()), + std::max(radii_.TopRight().width(), radii_.BottomRight().width()), + std::max(radii_.BottomLeft().height(), radii_.BottomRight().height()), + std::max(radii_.TopLeft().width(), radii_.BottomLeft().width())); + gfx::RectF center_rect(rect_); + center_rect.Inset(maximum_radius_insets); return center_rect; } @@ -170,8 +172,8 @@ return true; } - const FloatRect& top_left_rect = TopLeftCorner(); - const FloatRect& bottom_left_rect = BottomLeftCorner(); + const gfx::RectF& top_left_rect = TopLeftCorner(); + const gfx::RectF& bottom_left_rect = BottomLeftCorner(); if (!top_left_rect.IsEmpty() && y >= top_left_rect.y() && y < top_left_rect.bottom()) { @@ -187,8 +189,8 @@ min_x_intercept = rect_.x(); } - const FloatRect& top_right_rect = TopRightCorner(); - const FloatRect& bottom_right_rect = BottomRightCorner(); + const gfx::RectF& top_right_rect = TopRightCorner(); + const gfx::RectF& bottom_right_rect = BottomRightCorner(); if (!top_right_rect.IsEmpty() && y >= top_right_rect.y() && y <= top_right_rect.bottom()) { @@ -208,7 +210,7 @@ } void FloatRoundedRect::InflateWithRadii(int size) { - FloatRect old = rect_; + gfx::RectF old = rect_; rect_.Outset(size); // Considering the inflation factor of shorter size to scale the radii seems @@ -226,53 +228,53 @@ if (!quad.IntersectsRect(rect_)) return false; - const FloatSize& top_left = radii_.TopLeft(); + const gfx::SizeF& top_left = radii_.TopLeft(); if (!top_left.IsEmpty()) { - FloatRect rect(rect_.x(), rect_.y(), top_left.width(), top_left.height()); + gfx::RectF rect(rect_.x(), rect_.y(), top_left.width(), top_left.height()); if (quad.IntersectsRect(rect)) { gfx::PointF center(rect_.x() + top_left.width(), rect_.y() + top_left.height()); - FloatSize size(top_left.width(), top_left.height()); + gfx::SizeF size(top_left.width(), top_left.height()); if (!quad.IntersectsEllipse(center, size)) return false; } } - const FloatSize& top_right = radii_.TopRight(); + const gfx::SizeF& top_right = radii_.TopRight(); if (!top_right.IsEmpty()) { - FloatRect rect(rect_.right() - top_right.width(), rect_.y(), - top_right.width(), top_right.height()); + gfx::RectF rect(rect_.right() - top_right.width(), rect_.y(), + top_right.width(), top_right.height()); if (quad.IntersectsRect(rect)) { gfx::PointF center(rect_.right() - top_right.width(), rect_.y() + top_right.height()); - FloatSize size(top_right.width(), top_right.height()); + gfx::SizeF size(top_right.width(), top_right.height()); if (!quad.IntersectsEllipse(center, size)) return false; } } - const FloatSize& bottom_left = radii_.BottomLeft(); + const gfx::SizeF& bottom_left = radii_.BottomLeft(); if (!bottom_left.IsEmpty()) { - FloatRect rect(rect_.x(), rect_.bottom() - bottom_left.height(), - bottom_left.width(), bottom_left.height()); + gfx::RectF rect(rect_.x(), rect_.bottom() - bottom_left.height(), + bottom_left.width(), bottom_left.height()); if (quad.IntersectsRect(rect)) { gfx::PointF center(rect_.x() + bottom_left.width(), rect_.bottom() - bottom_left.height()); - FloatSize size(bottom_left.width(), bottom_left.height()); + gfx::SizeF size(bottom_left.width(), bottom_left.height()); if (!quad.IntersectsEllipse(center, size)) return false; } } - const FloatSize& bottom_right = radii_.BottomRight(); + const gfx::SizeF& bottom_right = radii_.BottomRight(); if (!bottom_right.IsEmpty()) { - FloatRect rect(rect_.right() - bottom_right.width(), - rect_.bottom() - bottom_right.height(), bottom_right.width(), - bottom_right.height()); + gfx::RectF rect(rect_.right() - bottom_right.width(), + rect_.bottom() - bottom_right.height(), + bottom_right.width(), bottom_right.height()); if (quad.IntersectsRect(rect)) { gfx::PointF center(rect_.right() - bottom_right.width(), rect_.bottom() - bottom_right.height()); - FloatSize size(bottom_right.width(), bottom_right.height()); + gfx::SizeF size(bottom_right.width(), bottom_right.height()); if (!quad.IntersectsEllipse(center, size)) return false; } @@ -302,15 +304,15 @@ } bool FloatRoundedRect::IsRenderable() const { - constexpr float kTolerance = 0.0001; + constexpr float kTolerance = 1.0001; return radii_.TopLeft().width() + radii_.TopRight().width() <= - rect_.width() + kTolerance && + rect_.width() * kTolerance && radii_.BottomLeft().width() + radii_.BottomRight().width() <= - rect_.width() + kTolerance && + rect_.width() * kTolerance && radii_.TopLeft().height() + radii_.BottomLeft().height() <= - rect_.height() + kTolerance && + rect_.height() * kTolerance && radii_.TopRight().height() + radii_.BottomRight().height() <= - rect_.height() + kTolerance; + rect_.height() * kTolerance; } std::ostream& operator<<(std::ostream& ostream, const FloatRoundedRect& rect) { @@ -323,16 +325,18 @@ } String FloatRoundedRect::Radii::ToString() const { - return "tl:" + TopLeft().ToString() + "; tr:" + TopRight().ToString() + - "; bl:" + BottomLeft().ToString() + "; br:" + BottomRight().ToString(); + return String::Format( + "tl:%s; tr:%s; bl:%s; br:%s", TopLeft().ToString().c_str(), + TopRight().ToString().c_str(), BottomLeft().ToString().c_str(), + BottomRight().ToString().c_str()); } String FloatRoundedRect::ToString() const { - if (Rect() == FloatRect(LayoutRect::InfiniteIntRect())) + if (Rect() == gfx::RectF(LayoutRect::InfiniteIntRect())) return "InfiniteIntRect"; if (GetRadii().IsZero()) - return Rect().ToString(); - return Rect().ToString() + " radii:(" + GetRadii().ToString() + ")"; + return String(Rect().ToString()); + return String(Rect().ToString()) + " radii:(" + GetRadii().ToString() + ")"; } } // namespace blink
diff --git a/third_party/blink/renderer/platform/geometry/float_rounded_rect.h b/third_party/blink/renderer/platform/geometry/float_rounded_rect.h index db360e6..028e2c6 100644 --- a/third_party/blink/renderer/platform/geometry/float_rounded_rect.h +++ b/third_party/blink/renderer/platform/geometry/float_rounded_rect.h
@@ -32,10 +32,13 @@ #include <iosfwd> #include "third_party/abseil-cpp/absl/types/optional.h" -#include "third_party/blink/renderer/platform/geometry/float_rect.h" -#include "third_party/blink/renderer/platform/geometry/float_size.h" +#include "third_party/blink/renderer/platform/platform_export.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" +#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" #include "third_party/skia/include/core/SkRRect.h" +#include "ui/gfx/geometry/rect_f.h" +#include "ui/gfx/geometry/size_f.h" +#include "ui/gfx/geometry/skia_conversions.h" namespace blink { @@ -56,32 +59,32 @@ public: constexpr Radii() = default; - constexpr Radii(const FloatSize& top_left, - const FloatSize& top_right, - const FloatSize& bottom_left, - const FloatSize& bottom_right) + constexpr Radii(const gfx::SizeF& top_left, + const gfx::SizeF& top_right, + const gfx::SizeF& bottom_left, + const gfx::SizeF& bottom_right) : top_left_(top_left), top_right_(top_right), bottom_left_(bottom_left), bottom_right_(bottom_right) {} explicit constexpr Radii(float radius) : Radii(radius, radius) {} constexpr Radii(float radius_x, float radius_y) - : Radii(FloatSize(radius_x, radius_y), - FloatSize(radius_x, radius_y), - FloatSize(radius_x, radius_y), - FloatSize(radius_x, radius_y)) {} + : Radii(gfx::SizeF(radius_x, radius_y), + gfx::SizeF(radius_x, radius_y), + gfx::SizeF(radius_x, radius_y), + gfx::SizeF(radius_x, radius_y)) {} constexpr Radii(const Radii&) = default; constexpr Radii& operator=(const Radii&) = default; - void SetTopLeft(const FloatSize& size) { top_left_ = size; } - void SetTopRight(const FloatSize& size) { top_right_ = size; } - void SetBottomLeft(const FloatSize& size) { bottom_left_ = size; } - void SetBottomRight(const FloatSize& size) { bottom_right_ = size; } - constexpr const FloatSize& TopLeft() const { return top_left_; } - constexpr const FloatSize& TopRight() const { return top_right_; } - constexpr const FloatSize& BottomLeft() const { return bottom_left_; } - constexpr const FloatSize& BottomRight() const { return bottom_right_; } + void SetTopLeft(const gfx::SizeF& size) { top_left_ = size; } + void SetTopRight(const gfx::SizeF& size) { top_right_ = size; } + void SetBottomLeft(const gfx::SizeF& size) { bottom_left_ = size; } + void SetBottomRight(const gfx::SizeF& size) { bottom_right_ = size; } + constexpr const gfx::SizeF& TopLeft() const { return top_left_; } + constexpr const gfx::SizeF& TopRight() const { return top_right_; } + constexpr const gfx::SizeF& BottomLeft() const { return bottom_left_; } + constexpr const gfx::SizeF& BottomRight() const { return bottom_right_; } void SetMinimumRadius(float); absl::optional<float> UniformRadius() const; @@ -108,38 +111,35 @@ String ToString() const; private: - FloatSize top_left_; - FloatSize top_right_; - FloatSize bottom_left_; - FloatSize bottom_right_; + gfx::SizeF top_left_; + gfx::SizeF top_right_; + gfx::SizeF bottom_left_; + gfx::SizeF bottom_right_; }; constexpr FloatRoundedRect() = default; - explicit FloatRoundedRect(const gfx::RectF& rect, - const Radii& radii = Radii()) - : FloatRoundedRect(FloatRect(rect), radii) {} - explicit FloatRoundedRect(const FloatRect&, const Radii& = Radii()); - explicit FloatRoundedRect(const IntRect&, const Radii& = Radii()); + explicit FloatRoundedRect(const gfx::RectF&, const Radii& radii = Radii()); + explicit FloatRoundedRect(const gfx::Rect&, const Radii& radii = Radii()); FloatRoundedRect(float x, float y, float width, float height); - FloatRoundedRect(const FloatRect&, - const FloatSize& top_left, - const FloatSize& top_right, - const FloatSize& bottom_left, - const FloatSize& bottom_right); - FloatRoundedRect(const FloatRect& r, float radius) - : FloatRoundedRect(r, Radii(radius)) {} - FloatRoundedRect(const FloatRect& r, float radius_x, float radius_y) + FloatRoundedRect(const gfx::RectF& rect, + const gfx::SizeF& top_left, + const gfx::SizeF& top_right, + const gfx::SizeF& bottom_left, + const gfx::SizeF& bottom_right); + FloatRoundedRect(const gfx::RectF& rect, float radius) + : rect_(rect), radii_(radius) {} + FloatRoundedRect(const gfx::RectF& r, float radius_x, float radius_y) : FloatRoundedRect(r, Radii(radius_x, radius_y)) {} - constexpr const FloatRect& Rect() const { return rect_; } + constexpr const gfx::RectF& Rect() const { return rect_; } constexpr const Radii& GetRadii() const { return radii_; } constexpr bool IsRounded() const { return !radii_.IsZero(); } constexpr bool IsEmpty() const { return rect_.IsEmpty(); } - void SetRect(const FloatRect& rect) { rect_ = rect; } + void SetRect(const gfx::RectF& rect) { rect_ = rect; } void SetRadii(const Radii& radii) { radii_ = radii; } - void Move(const FloatSize& size) { rect_.Offset(size); } + void Move(const gfx::Vector2dF& offset) { rect_.Offset(offset); } void InflateWithRadii(int size); void Inflate(float size) { rect_.Outset(size); } @@ -151,25 +151,26 @@ void ShrinkRadii(float size) { radii_.Shrink(size); } // Returns a quickly computed rect enclosed by the rounded rect. - FloatRect RadiusCenterRect() const; + gfx::RectF RadiusCenterRect() const; - constexpr FloatRect TopLeftCorner() const { - return FloatRect(rect_.x(), rect_.y(), radii_.TopLeft().width(), - radii_.TopLeft().height()); + constexpr gfx::RectF TopLeftCorner() const { + return gfx::RectF(rect_.x(), rect_.y(), radii_.TopLeft().width(), + radii_.TopLeft().height()); } - constexpr FloatRect TopRightCorner() const { - return FloatRect(rect_.right() - radii_.TopRight().width(), rect_.y(), - radii_.TopRight().width(), radii_.TopRight().height()); + constexpr gfx::RectF TopRightCorner() const { + return gfx::RectF(rect_.right() - radii_.TopRight().width(), rect_.y(), + radii_.TopRight().width(), radii_.TopRight().height()); } - constexpr FloatRect BottomLeftCorner() const { - return FloatRect(rect_.x(), rect_.bottom() - radii_.BottomLeft().height(), - radii_.BottomLeft().width(), radii_.BottomLeft().height()); + constexpr gfx::RectF BottomLeftCorner() const { + return gfx::RectF(rect_.x(), rect_.bottom() - radii_.BottomLeft().height(), + radii_.BottomLeft().width(), + radii_.BottomLeft().height()); } - constexpr FloatRect BottomRightCorner() const { - return FloatRect(rect_.right() - radii_.BottomRight().width(), - rect_.bottom() - radii_.BottomRight().height(), - radii_.BottomRight().width(), - radii_.BottomRight().height()); + constexpr gfx::RectF BottomRightCorner() const { + return gfx::RectF(rect_.right() - radii_.BottomRight().width(), + rect_.bottom() - radii_.BottomRight().height(), + radii_.BottomRight().width(), + radii_.BottomRight().height()); } bool XInterceptsAtY(float y, @@ -192,12 +193,12 @@ // the rounded border. void ConstrainRadii(); - operator SkRRect() const; + explicit operator SkRRect() const; String ToString() const; private: - FloatRect rect_; + gfx::RectF rect_; Radii radii_; }; @@ -215,9 +216,9 @@ radii[SkRRect::kLowerLeft_Corner].set(BottomLeftCorner().width(), BottomLeftCorner().height()); - rrect.setRectRadii(Rect(), radii); + rrect.setRectRadii(gfx::RectFToSkRect(Rect()), radii); } else { - rrect.setRect(Rect()); + rrect.setRect(gfx::RectFToSkRect(Rect())); } return rrect;
diff --git a/third_party/blink/renderer/platform/geometry/float_rounded_rect_test.cc b/third_party/blink/renderer/platform/geometry/float_rounded_rect_test.cc index af6ed44c..56bf7109 100644 --- a/third_party/blink/renderer/platform/geometry/float_rounded_rect_test.cc +++ b/third_party/blink/renderer/platform/geometry/float_rounded_rect_test.cc
@@ -50,19 +50,19 @@ TEST(FloatRoundedRectTest, zeroRadii) { FloatRoundedRect r = FloatRoundedRect(1, 2, 3, 4); - EXPECT_EQ(FloatRect(1, 2, 3, 4), r.Rect()); - EXPECT_EQ(FloatSize(), r.GetRadii().TopLeft()); - EXPECT_EQ(FloatSize(), r.GetRadii().TopRight()); - EXPECT_EQ(FloatSize(), r.GetRadii().BottomLeft()); - EXPECT_EQ(FloatSize(), r.GetRadii().BottomRight()); + EXPECT_EQ(gfx::RectF(1, 2, 3, 4), r.Rect()); + EXPECT_EQ(gfx::SizeF(), r.GetRadii().TopLeft()); + EXPECT_EQ(gfx::SizeF(), r.GetRadii().TopRight()); + EXPECT_EQ(gfx::SizeF(), r.GetRadii().BottomLeft()); + EXPECT_EQ(gfx::SizeF(), r.GetRadii().BottomRight()); EXPECT_TRUE(r.GetRadii().IsZero()); EXPECT_FALSE(r.IsRounded()); EXPECT_FALSE(r.IsEmpty()); - EXPECT_EQ(FloatRect(1, 2, 0, 0), r.TopLeftCorner()); - EXPECT_EQ(FloatRect(4, 2, 0, 0), r.TopRightCorner()); - EXPECT_EQ(FloatRect(4, 6, 0, 0), r.BottomRightCorner()); - EXPECT_EQ(FloatRect(1, 6, 0, 0), r.BottomLeftCorner()); + EXPECT_EQ(gfx::RectF(1, 2, 0, 0), r.TopLeftCorner()); + EXPECT_EQ(gfx::RectF(4, 2, 0, 0), r.TopRightCorner()); + EXPECT_EQ(gfx::RectF(4, 6, 0, 0), r.BottomRightCorner()); + EXPECT_EQ(gfx::RectF(1, 6, 0, 0), r.BottomLeftCorner()); TEST_INTERCEPTS(r, 2, r.Rect().x(), r.Rect().right()); TEST_INTERCEPTS(r, 4, r.Rect().x(), r.Rect().right()); @@ -75,18 +75,18 @@ EXPECT_FALSE(r.XInterceptsAtY(7, min_x_intercept, max_x_intercept)); // The FloatRoundedRect::expandRadii() function doesn't change radii - // FloatSizes that are <= zero. Same as RoundedRect::expandRadii(). + // gfx::SizeFs that are <= zero. Same as RoundedRect::expandRadii(). r.ExpandRadii(20); r.ShrinkRadii(10); EXPECT_TRUE(r.GetRadii().IsZero()); } TEST(FloatRoundedRectTest, circle) { - FloatSize corner_radii(50, 50); - FloatRoundedRect r(FloatRect(0, 0, 100, 100), corner_radii, corner_radii, + gfx::SizeF corner_radii(50, 50); + FloatRoundedRect r(gfx::RectF(0, 0, 100, 100), corner_radii, corner_radii, corner_radii, corner_radii); - EXPECT_EQ(FloatRect(0, 0, 100, 100), r.Rect()); + EXPECT_EQ(gfx::RectF(0, 0, 100, 100), r.Rect()); EXPECT_EQ(corner_radii, r.GetRadii().TopLeft()); EXPECT_EQ(corner_radii, r.GetRadii().TopRight()); EXPECT_EQ(corner_radii, r.GetRadii().BottomLeft()); @@ -95,10 +95,10 @@ EXPECT_TRUE(r.IsRounded()); EXPECT_FALSE(r.IsEmpty()); - EXPECT_EQ(FloatRect(0, 0, 50, 50), r.TopLeftCorner()); - EXPECT_EQ(FloatRect(50, 0, 50, 50), r.TopRightCorner()); - EXPECT_EQ(FloatRect(0, 50, 50, 50), r.BottomLeftCorner()); - EXPECT_EQ(FloatRect(50, 50, 50, 50), r.BottomRightCorner()); + EXPECT_EQ(gfx::RectF(0, 0, 50, 50), r.TopLeftCorner()); + EXPECT_EQ(gfx::RectF(50, 0, 50, 50), r.TopRightCorner()); + EXPECT_EQ(gfx::RectF(0, 50, 50, 50), r.BottomLeftCorner()); + EXPECT_EQ(gfx::RectF(50, 50, 50, 50), r.BottomRightCorner()); TEST_INTERCEPTS(r, 0, 50, 50); TEST_INTERCEPTS(r, 25, 6.69873, 93.3013); @@ -129,22 +129,22 @@ */ TEST(FloatRoundedRectTest, ellipticalCorners) { FloatRoundedRect::Radii corner_radii; - corner_radii.SetTopLeft(FloatSize(10, 15)); - corner_radii.SetTopRight(FloatSize(10, 20)); - corner_radii.SetBottomLeft(FloatSize(25, 15)); - corner_radii.SetBottomRight(FloatSize(20, 30)); + corner_radii.SetTopLeft(gfx::SizeF(10, 15)); + corner_radii.SetTopRight(gfx::SizeF(10, 20)); + corner_radii.SetBottomLeft(gfx::SizeF(25, 15)); + corner_radii.SetBottomRight(gfx::SizeF(20, 30)); - FloatRoundedRect r(FloatRect(0, 0, 100, 100), corner_radii); + FloatRoundedRect r(gfx::RectF(0, 0, 100, 100), corner_radii); EXPECT_EQ(r.GetRadii(), - FloatRoundedRect::Radii(FloatSize(10, 15), FloatSize(10, 20), - FloatSize(25, 15), FloatSize(20, 30))); - EXPECT_EQ(r, FloatRoundedRect(FloatRect(0, 0, 100, 100), corner_radii)); + FloatRoundedRect::Radii(gfx::SizeF(10, 15), gfx::SizeF(10, 20), + gfx::SizeF(25, 15), gfx::SizeF(20, 30))); + EXPECT_EQ(r, FloatRoundedRect(gfx::RectF(0, 0, 100, 100), corner_radii)); - EXPECT_EQ(FloatRect(0, 0, 10, 15), r.TopLeftCorner()); - EXPECT_EQ(FloatRect(90, 0, 10, 20), r.TopRightCorner()); - EXPECT_EQ(FloatRect(0, 85, 25, 15), r.BottomLeftCorner()); - EXPECT_EQ(FloatRect(80, 70, 20, 30), r.BottomRightCorner()); + EXPECT_EQ(gfx::RectF(0, 0, 10, 15), r.TopLeftCorner()); + EXPECT_EQ(gfx::RectF(90, 0, 10, 20), r.TopRightCorner()); + EXPECT_EQ(gfx::RectF(0, 85, 25, 15), r.BottomLeftCorner()); + EXPECT_EQ(gfx::RectF(80, 70, 20, 30), r.BottomRightCorner()); TEST_INTERCEPTS(r, 5, 2.5464401, 96.61438); TEST_INTERCEPTS(r, 15, 0, 99.682457); @@ -162,89 +162,136 @@ } TEST(FloatRoundedRectTest, radiusCenterRect) { - FloatSize corner_rect(10, 10); - FloatRoundedRect r0(FloatRect(0, 0, 100, 50), + gfx::SizeF corner_rect(10, 10); + FloatRoundedRect r0(gfx::RectF(0, 0, 100, 50), FloatRoundedRect::Radii(corner_rect, corner_rect, corner_rect, corner_rect)); - EXPECT_EQ(FloatRect(10, 10, 80, 30), r0.RadiusCenterRect()); + EXPECT_EQ(gfx::RectF(10, 10, 80, 30), r0.RadiusCenterRect()); // "Degenerate" cases all return an empty rectangle. - FloatRect collapsed_rect(0, 0, 100, 50); - collapsed_rect.Expand(FloatRectOutsets(-200, -200, -200, -200)); + gfx::RectF collapsed_rect(0, 0, 100, 50); + collapsed_rect.Inset(200); FloatRoundedRect r1(collapsed_rect); EXPECT_TRUE(r1.RadiusCenterRect().IsEmpty()); FloatRoundedRect::Radii radii_with_too_large_corner( - FloatSize(55, 55), FloatSize(), FloatSize(), FloatSize()); - FloatRoundedRect r2(FloatRect(0, 0, 100, 50), radii_with_too_large_corner); + gfx::SizeF(55, 55), gfx::SizeF(), gfx::SizeF(), gfx::SizeF()); + FloatRoundedRect r2(gfx::RectF(0, 0, 100, 50), radii_with_too_large_corner); EXPECT_TRUE(r2.RadiusCenterRect().IsEmpty()); } TEST(FloatRoundedRectTest, IntersectsQuadIsInclusive) { FloatRoundedRect::Radii corner_radii; - corner_radii.SetTopLeft(FloatSize(5, 5)); - corner_radii.SetTopRight(FloatSize(5, 5)); - corner_radii.SetBottomLeft(FloatSize(5, 5)); - corner_radii.SetBottomRight(FloatSize(5, 5)); + corner_radii.SetTopLeft(gfx::SizeF(5, 5)); + corner_radii.SetTopRight(gfx::SizeF(5, 5)); + corner_radii.SetBottomLeft(gfx::SizeF(5, 5)); + corner_radii.SetBottomRight(gfx::SizeF(5, 5)); // A rect at (10, 10) with dimensions 20x20 and radii of size 5x5. - FloatRoundedRect r(FloatRect(10, 10, 20, 20), corner_radii); + FloatRoundedRect r(gfx::RectF(10, 10, 20, 20), corner_radii); // A quad fully inside the rounded rect should intersect. - EXPECT_TRUE(r.IntersectsQuad(FloatQuad(FloatRect(11, 11, 8, 8)))); + EXPECT_TRUE(r.IntersectsQuad(FloatQuad(gfx::RectF(11, 11, 8, 8)))); // A quad fully outside the rounded rect should not intersect. - EXPECT_FALSE(r.IntersectsQuad(FloatQuad(FloatRect(0, 0, 1, 1)))); + EXPECT_FALSE(r.IntersectsQuad(FloatQuad(gfx::RectF(0, 0, 1, 1)))); // A quad touching the top edge of the rounded rect should intersect. - EXPECT_TRUE(r.IntersectsQuad(FloatQuad(FloatRect(15, 9, 5, 1)))); + EXPECT_TRUE(r.IntersectsQuad(FloatQuad(gfx::RectF(15, 9, 5, 1)))); // A quad touching the right edge of the rounded rect should intersect. - EXPECT_TRUE(r.IntersectsQuad(FloatQuad(FloatRect(30, 15, 1, 1)))); + EXPECT_TRUE(r.IntersectsQuad(FloatQuad(gfx::RectF(30, 15, 1, 1)))); // A quad touching the bottom edge of the rounded rect should intersect. - EXPECT_TRUE(r.IntersectsQuad(FloatQuad(FloatRect(15, 30, 1, 1)))); + EXPECT_TRUE(r.IntersectsQuad(FloatQuad(gfx::RectF(15, 30, 1, 1)))); // A quad touching the left edge of the rounded rect should intersect. - EXPECT_TRUE(r.IntersectsQuad(FloatQuad(FloatRect(9, 15, 1, 1)))); + EXPECT_TRUE(r.IntersectsQuad(FloatQuad(gfx::RectF(9, 15, 1, 1)))); // A quad outside the top-left arc should not intersect. - EXPECT_FALSE(r.IntersectsQuad(FloatQuad(FloatRect(10, 10, 1, 1)))); + EXPECT_FALSE(r.IntersectsQuad(FloatQuad(gfx::RectF(10, 10, 1, 1)))); // A quad inside the top-left arc should intersect. - EXPECT_TRUE(r.IntersectsQuad(FloatQuad(FloatRect(13, 13, 1, 1)))); + EXPECT_TRUE(r.IntersectsQuad(FloatQuad(gfx::RectF(13, 13, 1, 1)))); // A quad outside the top-right arc should not intersect. - EXPECT_FALSE(r.IntersectsQuad(FloatQuad(FloatRect(29, 10, 1, 1)))); + EXPECT_FALSE(r.IntersectsQuad(FloatQuad(gfx::RectF(29, 10, 1, 1)))); // A quad inside the top-right arc should intersect. - EXPECT_TRUE(r.IntersectsQuad(FloatQuad(FloatRect(26, 13, 1, 1)))); + EXPECT_TRUE(r.IntersectsQuad(FloatQuad(gfx::RectF(26, 13, 1, 1)))); // A quad outside the bottom-right arc should not intersect. - EXPECT_FALSE(r.IntersectsQuad(FloatQuad(FloatRect(29, 29, 1, 1)))); + EXPECT_FALSE(r.IntersectsQuad(FloatQuad(gfx::RectF(29, 29, 1, 1)))); // A quad inside the bottom-right arc should intersect. - EXPECT_TRUE(r.IntersectsQuad(FloatQuad(FloatRect(26, 26, 1, 1)))); + EXPECT_TRUE(r.IntersectsQuad(FloatQuad(gfx::RectF(26, 26, 1, 1)))); // A quad outside the bottom-left arc should not intersect. - EXPECT_FALSE(r.IntersectsQuad(FloatQuad(FloatRect(10, 29, 1, 1)))); + EXPECT_FALSE(r.IntersectsQuad(FloatQuad(gfx::RectF(10, 29, 1, 1)))); // A quad inside the bottom-left arc should intersect. - EXPECT_TRUE(r.IntersectsQuad(FloatQuad(FloatRect(13, 26, 1, 1)))); + EXPECT_TRUE(r.IntersectsQuad(FloatQuad(gfx::RectF(13, 26, 1, 1)))); +} + +TEST(FloatRoundedrectTest, ConstrainRadii) { + FloatRoundedRect empty; + empty.ConstrainRadii(); + EXPECT_EQ(FloatRoundedRect(), empty); + + FloatRoundedRect r1(-100, -100, 200, 200); + r1.ConstrainRadii(); + EXPECT_EQ(FloatRoundedRect(-100, -100, 200, 200), r1); + + FloatRoundedRect r2(gfx::RectF(-100, -100, 200, 200), 10); + r2.ConstrainRadii(); + EXPECT_EQ(FloatRoundedRect(gfx::RectF(-100, -100, 200, 200), 10), r2); + + FloatRoundedRect r3(gfx::RectF(-100, -100, 200, 200), 100); + r3.ConstrainRadii(); + EXPECT_EQ(FloatRoundedRect(gfx::RectF(-100, -100, 200, 200), 100), r3); + + FloatRoundedRect r4(gfx::RectF(-100, -100, 200, 200), 160); + r4.ConstrainRadii(); + EXPECT_EQ(FloatRoundedRect(gfx::RectF(-100, -100, 200, 200), 100), r4); + + FloatRoundedRect r5(gfx::RectF(-100, -100, 200, 200), gfx::SizeF(10, 20), + gfx::SizeF(100, 250), gfx::SizeF(200, 60), + gfx::SizeF(50, 150)); + r5.ConstrainRadii(); + EXPECT_EQ(FloatRoundedRect(gfx::RectF(-100, -100, 200, 200), + gfx::SizeF(5, 10), gfx::SizeF(50, 125), + gfx::SizeF(100, 30), gfx::SizeF(25, 75)), + r5); + + FloatRoundedRect r6(gfx::RectF(-100, -100, 200, 200), gfx::SizeF(10, 20), + gfx::SizeF(60, 200), gfx::SizeF(250, 100), + gfx::SizeF(150, 50)); + r6.ConstrainRadii(); + EXPECT_EQ(FloatRoundedRect(gfx::RectF(-100, -100, 200, 200), + gfx::SizeF(5, 10), gfx::SizeF(30, 100), + gfx::SizeF(125, 50), gfx::SizeF(75, 25)), + r6); + + FloatRoundedRect r7(gfx::RectF(0, 0, 85089, 21377), + gfx::SizeF(1388.89, 1388.89), + gfx::SizeF(58711.2, 14750.3), gfx::SizeF(0, 13467.7), + gfx::SizeF(85088.6, 21377.3)); + r7.ConstrainRadii(); + EXPECT_TRUE(r7.IsRenderable()); } TEST(FloatRoundedRectTest, ToString) { - FloatSize corner_rect(1, 2); + gfx::SizeF corner_rect(1, 2); FloatRoundedRect rounded_rect( - FloatRect(3, 5, 7, 11), + gfx::RectF(3, 5, 7, 11), FloatRoundedRect::Radii(corner_rect, corner_rect, corner_rect, corner_rect)); EXPECT_EQ("3,5 7x11 radii:(tl:1x2; tr:1x2; bl:1x2; br:1x2)", rounded_rect.ToString()); - FloatRoundedRect infinite((FloatRect(LayoutRect::InfiniteIntRect()))); + FloatRoundedRect infinite((gfx::RectF(LayoutRect::InfiniteIntRect()))); EXPECT_EQ("InfiniteIntRect", infinite.ToString()); - FloatRoundedRect rect_without_radii(FloatRect(1, 3, 5, 7)); + FloatRoundedRect rect_without_radii(gfx::RectF(1, 3, 5, 7)); EXPECT_EQ("1,3 5x7", rect_without_radii.ToString()); }
diff --git a/third_party/blink/renderer/platform/geometry/layout_rect.h b/third_party/blink/renderer/platform/geometry/layout_rect.h index 89aeb2c..2e21d3bd 100644 --- a/third_party/blink/renderer/platform/geometry/layout_rect.h +++ b/third_party/blink/renderer/platform/geometry/layout_rect.h
@@ -69,6 +69,8 @@ : location_(location), size_(size) {} constexpr explicit LayoutRect(const IntRect& rect) : location_(rect.origin()), size_(rect.size()) {} + constexpr explicit LayoutRect(const gfx::Rect& rect) + : location_(rect.origin()), size_(rect.size()) {} // Don't do these implicitly since they are lossy. constexpr explicit LayoutRect(const FloatRect& r) @@ -280,14 +282,13 @@ return LayoutRect(location_.TransposedPoint(), size_.TransposedSize()); } - static IntRect InfiniteIntRect() { - // Due to saturated arithemetic this value is not the same as + static constexpr gfx::Rect InfiniteIntRect() { + // Due to saturated arithmetic this value is not the same as // LayoutRect(IntRect(INT_MIN/2, INT_MIN/2, INT_MAX, INT_MAX)). - static IntRect infinite_int_rect(LayoutUnit::NearlyMin().ToInt() / 2, - LayoutUnit::NearlyMin().ToInt() / 2, - LayoutUnit::NearlyMax().ToInt(), - LayoutUnit::NearlyMax().ToInt()); - return infinite_int_rect; + return gfx::Rect(LayoutUnit::NearlyMin().ToInt() / 2, + LayoutUnit::NearlyMin().ToInt() / 2, + LayoutUnit::NearlyMax().ToInt(), + LayoutUnit::NearlyMax().ToInt()); } String ToString() const; @@ -334,18 +335,38 @@ IntSize(SnapSizeToPixel(rect.Width(), rect.X()), SnapSizeToPixel(rect.Height(), rect.Y()))); } +inline gfx::Rect ToPixelSnappedRect(const LayoutRect& rect) { + return gfx::Rect(ToRoundedPoint(rect.Location()), + gfx::Size(SnapSizeToPixel(rect.Width(), rect.X()), + SnapSizeToPixel(rect.Height(), rect.Y()))); +} inline IntRect EnclosingIntRect(const LayoutRect& rect) { gfx::Point location = ToFlooredPoint(rect.MinXMinYCorner()); gfx::Point max_point = ToCeiledPoint(rect.MaxXMaxYCorner()); return IntRect(location, IntSize(max_point - location)); } +inline gfx::Rect ToEnclosingRect(const LayoutRect& rect) { + gfx::Point location = ToFlooredPoint(rect.MinXMinYCorner()); + gfx::Point max_point = ToCeiledPoint(rect.MaxXMaxYCorner()); + // Because the range of LayoutUnit is much smaller than int, the following + // '-' operations can never overflow, so no clamping is needed. + // TODO(1261553): We can have a special version of gfx::Rect constructor that + // skips internal clamping to improve performance. + return gfx::Rect(location.x(), location.y(), max_point.x() - location.x(), + max_point.y() - location.y()); +} inline IntRect EnclosedIntRect(const LayoutRect& rect) { gfx::Point location = ToCeiledPoint(rect.MinXMinYCorner()); gfx::Point max_point = ToFlooredPoint(rect.MaxXMaxYCorner()); return IntRect(location, IntSize(max_point - location)); } +inline gfx::Rect ToEnclosedRect(const LayoutRect& rect) { + gfx::Point location = ToCeiledPoint(rect.MinXMinYCorner()); + gfx::Point max_point = ToFlooredPoint(rect.MaxXMaxYCorner()); + return gfx::BoundingRect(location, max_point); +} inline LayoutRect EnclosingLayoutRect(const FloatRect& rect) { LayoutUnit x = LayoutUnit::FromFloatFloor(rect.x()); @@ -363,26 +384,6 @@ return LayoutRect(x, y, max_x - x, max_y - y); } -inline IntRect PixelSnappedIntRect(LayoutUnit left, - LayoutUnit top, - LayoutUnit width, - LayoutUnit height) { - return IntRect(left.Round(), top.Round(), SnapSizeToPixel(width, left), - SnapSizeToPixel(height, top)); -} - -inline IntRect PixelSnappedIntRectFromEdges(LayoutUnit left, - LayoutUnit top, - LayoutUnit right, - LayoutUnit bottom) { - return IntRect(left.Round(), top.Round(), SnapSizeToPixel(right - left, left), - SnapSizeToPixel(bottom - top, top)); -} - -inline IntRect PixelSnappedIntRect(LayoutPoint location, LayoutSize size) { - return IntRect(ToRoundedPoint(location), PixelSnappedIntSize(size, location)); -} - PLATFORM_EXPORT std::ostream& operator<<(std::ostream&, const LayoutRect&); PLATFORM_EXPORT WTF::TextStream& operator<<(WTF::TextStream&, const LayoutRect&);
diff --git a/third_party/blink/renderer/platform/geometry/layout_size.h b/third_party/blink/renderer/platform/geometry/layout_size.h index 7c0fee7..306b4cb7 100644 --- a/third_party/blink/renderer/platform/geometry/layout_size.h +++ b/third_party/blink/renderer/platform/geometry/layout_size.h
@@ -39,6 +39,7 @@ #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" #include "third_party/blink/renderer/platform/wtf/forward.h" #include "ui/gfx/geometry/point_f.h" +#include "ui/gfx/geometry/size.h" #include "ui/gfx/geometry/size_f.h" #include "ui/gfx/geometry/vector2d_f.h" @@ -224,6 +225,14 @@ return IntSize(s.Width().Round(), s.Height().Round()); } +inline gfx::Size ToFlooredSize(const LayoutSize& s) { + return gfx::Size(s.Width().Floor(), s.Height().Floor()); +} + +inline gfx::Size ToRoundedSize(const LayoutSize& s) { + return gfx::Size(s.Width().Round(), s.Height().Round()); +} + inline LayoutSize RoundedLayoutSize(const FloatSize& s) { return LayoutSize(s); }
diff --git a/third_party/blink/renderer/platform/geometry/layout_unit.h b/third_party/blink/renderer/platform/geometry/layout_unit.h index d228f97..829b01aa 100644 --- a/third_party/blink/renderer/platform/geometry/layout_unit.h +++ b/third_party/blink/renderer/platform/geometry/layout_unit.h
@@ -268,12 +268,12 @@ // Versions of max/min that are slightly smaller/larger than max/min() to // allow for roinding without overflowing. - static const LayoutUnit NearlyMax() { + static constexpr LayoutUnit NearlyMax() { LayoutUnit m; m.value_ = std::numeric_limits<int>::max() - kFixedPointDenominator / 2; return m; } - static const LayoutUnit NearlyMin() { + static constexpr LayoutUnit NearlyMin() { LayoutUnit m; m.value_ = std::numeric_limits<int>::min() + kFixedPointDenominator / 2; return m;
diff --git a/third_party/blink/renderer/platform/geometry/length_functions.cc b/third_party/blink/renderer/platform/geometry/length_functions.cc index f8aa3e02..047605c 100644 --- a/third_party/blink/renderer/platform/geometry/length_functions.cc +++ b/third_party/blink/renderer/platform/geometry/length_functions.cc
@@ -28,6 +28,7 @@ #include "third_party/blink/renderer/platform/geometry/length_point.h" #include "third_party/blink/renderer/platform/geometry/length_size.h" #include "ui/gfx/geometry/point_f.h" +#include "ui/gfx/geometry/size_f.h" namespace blink { @@ -117,15 +118,15 @@ return LayoutUnit(); } -FloatSize FloatSizeForLengthSize(const LengthSize& length_size, - const FloatSize& box_size) { - return FloatSize( +gfx::SizeF SizeForLengthSize(const LengthSize& length_size, + const gfx::SizeF& box_size) { + return gfx::SizeF( FloatValueForLength(length_size.Width(), box_size.width()), FloatValueForLength(length_size.Height(), box_size.height())); } -gfx::PointF FloatPointForLengthPoint(const LengthPoint& length_point, - const FloatSize& box_size) { +gfx::PointF PointForLengthPoint(const LengthPoint& length_point, + const gfx::SizeF& box_size) { return gfx::PointF(FloatValueForLength(length_point.X(), box_size.width()), FloatValueForLength(length_point.Y(), box_size.height())); }
diff --git a/third_party/blink/renderer/platform/geometry/length_functions.h b/third_party/blink/renderer/platform/geometry/length_functions.h index 7c9f8ce4..a2412b2 100644 --- a/third_party/blink/renderer/platform/geometry/length_functions.h +++ b/third_party/blink/renderer/platform/geometry/length_functions.h
@@ -30,11 +30,11 @@ namespace gfx { class PointF; +class SizeF; } namespace blink { -class FloatSize; class LayoutUnit; class Length; class LengthSize; @@ -56,10 +56,10 @@ PLATFORM_EXPORT LayoutUnit ValueForLength(const Length&, LayoutUnit maximum_value); -PLATFORM_EXPORT FloatSize FloatSizeForLengthSize(const LengthSize&, - const FloatSize& box_size); -PLATFORM_EXPORT gfx::PointF FloatPointForLengthPoint(const LengthPoint&, - const FloatSize& box_size); +PLATFORM_EXPORT gfx::SizeF SizeForLengthSize(const LengthSize&, + const gfx::SizeF& box_size); +PLATFORM_EXPORT gfx::PointF PointForLengthPoint(const LengthPoint&, + const gfx::SizeF& box_size); } // namespace blink
diff --git a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc index d0be373..26906aa 100644 --- a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc +++ b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc
@@ -624,8 +624,8 @@ } const RefCountedPath* path = clip.ClipPath(); - SkRRect new_rrect = clip.PaintClipRect(); - IntRect layer_bounds = EnclosingIntRect(clip.PaintClipRect().Rect()); + SkRRect new_rrect(clip.PaintClipRect()); + gfx::Rect layer_bounds = gfx::ToEnclosingRect(clip.PaintClipRect().Rect()); bool needs_display = false; auto new_translation_2d_or_matrix = @@ -653,8 +653,8 @@ layer_->SetNeedsDisplay(); layer_->SetOffsetToTransformParent( - gfx::Vector2dF(layer_bounds.x(), layer_bounds.y())); - layer_->SetBounds(ToGfxSize(layer_bounds.size())); + gfx::Vector2dF(layer_bounds.OffsetFromOrigin())); + layer_->SetBounds(layer_bounds.size()); rrect_ = new_rrect; path_ = path; }
diff --git a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor_test.cc b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor_test.cc index d9cf4c6..6e040e4 100644 --- a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor_test.cc +++ b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor_test.cc
@@ -836,8 +836,7 @@ for (auto it = clips.rbegin(); it != clips.rend(); ++it) { const ClipPaintPropertyNode* paint_clip_node = it->get(); EXPECT_EQ(cc::ClipNode::ClipType::APPLIES_LOCAL_CLIP, clip_node->clip_type); - EXPECT_EQ(ToGfxRectF(paint_clip_node->PaintClipRect().Rect()), - clip_node->clip); + EXPECT_EQ(paint_clip_node->PaintClipRect().Rect(), clip_node->clip); clip_node = GetPropertyTrees().clip_tree.Node(clip_node->parent_id); } } @@ -2570,9 +2569,7 @@ TEST_P(PaintArtifactCompositorTest, SynthesizedClipSimple) { // This tests the simplest case that a single layer needs to be clipped // by a single composited rounded clip. - FloatSize corner(5, 5); - FloatRoundedRect rrect(FloatRect(50, 50, 300, 200), corner, corner, corner, - corner); + FloatRoundedRect rrect(gfx::RectF(50, 50, 300, 200), 5); auto c1 = CreateClip(c0(), t0(), rrect); TestPaintArtifact artifact; @@ -2614,9 +2611,7 @@ FloatPoint3D(100, 100, 0), CompositingReason::k3DTransform); - FloatSize corner(5, 5); - FloatRoundedRect rrect(FloatRect(50, 50, 300, 200), corner, corner, corner, - corner); + FloatRoundedRect rrect(gfx::RectF(50, 50, 300, 200), 5); auto c1 = CreateClip(c0(), *transform, rrect); TestPaintArtifact artifact; @@ -2669,9 +2664,7 @@ FloatPoint3D(100, 100, 0), CompositingReason::k3DTransform); - FloatSize corner(5, 5); - FloatRoundedRect rrect(FloatRect(50, 50, 300, 200), corner, corner, corner, - corner); + FloatRoundedRect rrect(gfx::RectF(50, 50, 300, 200), 5); auto c1 = CreateClip(c0(), *transform, rrect); TestPaintArtifact artifact; @@ -2711,9 +2704,7 @@ // This tests the simplest case that a single layer needs to be clipped // by a single composited rounded clip. Because the radius is unsymmetric, // it falls back to a mask layer. - FloatSize corner(30, 40); - FloatRoundedRect rrect(FloatRect(50, 50, 300, 200), corner, corner, corner, - corner); + FloatRoundedRect rrect(gfx::RectF(50, 50, 300, 200), 30, 40); auto c1 = CreateClip(c0(), t0(), rrect); TestPaintArtifact artifact; @@ -2765,9 +2756,9 @@ SynthesizedClipSimpleShaderBasedBorderRadiusNotSupportedMacNonEqualCorners) { // Tests that on Mac, we fall back to a mask layer if the corners are not all // the same radii. - FloatSize corner(30, 30); - FloatRoundedRect rrect(FloatRect(50, 50, 300, 200), corner, corner, corner, - FloatSize()); + gfx::SizeF corner(30, 30); + FloatRoundedRect rrect(gfx::RectF(50, 50, 300, 200), corner, corner, corner, + gfx::SizeF()); auto c1 = CreateClip(c0(), t0(), rrect); TestPaintArtifact artifact; @@ -2785,9 +2776,7 @@ TEST_P(PaintArtifactCompositorTest, SynthesizedClipNested) { // This tests the simplest case that a single layer needs to be clipped // by a single composited rounded clip. - FloatSize corner(5, 5); - FloatRoundedRect rrect(FloatRect(50, 50, 300, 200), corner, corner, corner, - corner); + FloatRoundedRect rrect(gfx::RectF(50, 50, 300, 200), 5); auto c1 = CreateClip(c0(), t0(), rrect); auto c2 = CreateClip(*c1, t0(), rrect); auto c3 = CreateClip(*c2, t0(), rrect); @@ -2882,9 +2871,7 @@ TEST_P(PaintArtifactCompositorTest, SynthesizedClipIsNotDrawable) { // This tests the simplist case that a single layer needs to be clipped // by a single composited rounded clip. - FloatSize corner(5, 5); - FloatRoundedRect rrect(FloatRect(50, 50, 300, 200), corner, corner, corner, - corner); + FloatRoundedRect rrect(gfx::RectF(50, 50, 300, 200), 5); auto c1 = CreateClip(c0(), t0(), rrect); TestPaintArtifact artifact; @@ -2918,9 +2905,7 @@ TEST_P(PaintArtifactCompositorTest, ReuseSyntheticClip) { // This tests the simplist case that a single layer needs to be clipped // by a single composited rounded clip. - FloatSize corner(5, 5); - FloatRoundedRect rrect(FloatRect(50, 50, 300, 200), corner, corner, corner, - corner); + FloatRoundedRect rrect(gfx::RectF(50, 50, 300, 200), 5); auto c1 = CreateClip(c0(), t0(), rrect); auto c2 = CreateClip(c0(), t0(), rrect); @@ -3017,9 +3002,7 @@ auto t1 = CreateTransform(t0(), TransformationMatrix(), FloatPoint3D(), CompositingReason::kWillChangeTransform); - FloatSize corner(5, 5); - FloatRoundedRect rrect(FloatRect(50, 50, 300, 200), corner, corner, corner, - corner); + FloatRoundedRect rrect(gfx::RectF(50, 50, 300, 200), 5); auto c1 = CreateClip(c0(), t0(), rrect); TestPaintArtifact artifact; @@ -3073,9 +3056,7 @@ auto t1 = CreateTransform(t0(), TransformationMatrix(), FloatPoint3D(), CompositingReason::kWillChangeTransform); - FloatSize corner(5, 5); - FloatRoundedRect rrect(FloatRect(50, 50, 300, 200), corner, corner, corner, - corner); + FloatRoundedRect rrect(gfx::RectF(50, 50, 300, 200), 5); auto c1 = CreateClip(c0(), t0(), rrect); TestPaintArtifact artifact; @@ -3142,9 +3123,7 @@ TEST_P(PaintArtifactCompositorTest, SynthesizedClipAcrossChildEffect) { // This tests the case that an effect having the same output clip as the // layers before and after it can share the synthesized mask. - FloatSize corner(5, 5); - FloatRoundedRect rrect(FloatRect(50, 50, 300, 200), corner, corner, corner, - corner); + FloatRoundedRect rrect(gfx::RectF(50, 50, 300, 200), 5); auto c1 = CreateClip(c0(), t0(), rrect); auto e1 = CreateOpacityEffect(e0(), t0(), c1.get(), 1, CompositingReason::kWillChangeOpacity); @@ -3203,9 +3182,7 @@ // This tests the case that a layer cannot share the synthesized mask despite // having the same composited rounded clip if it's enclosed by an effect not // clipped by the common clip. - FloatSize corner(5, 5); - FloatRoundedRect rrect(FloatRect(50, 50, 300, 200), corner, corner, corner, - corner); + FloatRoundedRect rrect(gfx::RectF(50, 50, 300, 200), 5); auto c1 = CreateClip(c0(), t0(), rrect); CompositorFilterOperations non_trivial_filter; @@ -3286,9 +3263,7 @@ // This tests the case that an effect with exotic blending cannot share // the synthesized mask with its siblings because its blending has to be // applied by the outermost mask. - FloatSize corner(5, 5); - FloatRoundedRect rrect(FloatRect(50, 50, 300, 200), corner, corner, corner, - corner); + FloatRoundedRect rrect(gfx::RectF(50, 50, 300, 200), 5); auto c1 = CreateClip(c0(), t0(), rrect); EffectPaintPropertyNode::State e1_state; @@ -3369,9 +3344,7 @@ // This tests the case that an effect with backdrop filter cannot share // the synthesized mask with its siblings because its backdrop filter has to // be applied by the outermost mask in the correct transform space. - FloatSize corner(5, 5); - FloatRoundedRect rrect(FloatRect(50, 50, 300, 200), corner, corner, corner, - corner); + FloatRoundedRect rrect(gfx::RectF(50, 50, 300, 200), 5); auto c1 = CreateClip(c0(), t0(), rrect); auto c2 = CreateClip(*c1, t0(), FloatRoundedRect(60, 60, 200, 100)); @@ -3488,9 +3461,7 @@ TEST_P(PaintArtifactCompositorTest, SynthesizedClipMultipleNonBackdropEffects) { // This tests the case that multiple non-backdrop effects can share the // synthesized mask. - FloatSize corner(5, 5); - FloatRoundedRect rrect(FloatRect(50, 50, 300, 200), corner, corner, corner, - corner); + FloatRoundedRect rrect(gfx::RectF(50, 50, 300, 200), 5); auto c1 = CreateClip(c0(), t0(), rrect); auto c2 = CreateClip(*c1, t0(), FloatRoundedRect(60, 60, 200, 100)); @@ -3636,10 +3607,8 @@ TEST_P(PaintArtifactCompositorTest, ContentsOpaqueUnitedWithRoundedClip) { // Almost the same as ContentsOpaqueUnitedOpaque1, but the first layer has a // rounded clip. - FloatSize corner(5, 5); auto clip1 = CreateClip(c0(), t0(), - FloatRoundedRect(FloatRect(175, 175, 100, 100), - corner, corner, corner, corner)); + FloatRoundedRect(gfx::RectF(175, 175, 100, 100), 5)); TestPaintArtifact artifact; artifact.Chunk(t0(), *clip1, e0()) .RectDrawing(gfx::Rect(100, 100, 210, 210), Color::kBlack) @@ -4281,9 +4250,7 @@ TEST_P(PaintArtifactCompositorTest, Non2dAxisAlignedRoundedRectClip) { auto rotate = CreateTransform(t0(), TransformationMatrix().Rotate(45)); - FloatSize corner(5, 5); - FloatRoundedRect rounded_clip(FloatRect(50, 50, 50, 50), corner, corner, - corner, corner); + FloatRoundedRect rounded_clip(gfx::RectF(50, 50, 50, 50), 5); auto clip = CreateClip(c0(), *rotate, rounded_clip); auto opacity = CreateOpacityEffect( e0(), 0.5f, CompositingReason::kActiveOpacityAnimation);
diff --git a/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer.cc b/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer.cc index 07031fff3..34c80c9d 100644 --- a/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer.cc +++ b/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer.cc
@@ -413,10 +413,10 @@ ApplyTransform(local_transform); const bool antialias = true; if (combined_clip_rect.IsRounded()) { - cc_list_.push<cc::ClipRRectOp>(combined_clip_rect, SkClipOp::kIntersect, - antialias); + cc_list_.push<cc::ClipRRectOp>(SkRRect(combined_clip_rect), + SkClipOp::kIntersect, antialias); } else { - cc_list_.push<cc::ClipRectOp>(combined_clip_rect.Rect(), + cc_list_.push<cc::ClipRectOp>(gfx::RectFToSkRect(combined_clip_rect.Rect()), SkClipOp::kIntersect, antialias); } if (const auto* clip_path = lowest_combined_clip_node.ClipPath()) {
diff --git a/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer_test.cc b/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer_test.cc index cb34ace..5ef7e7b 100644 --- a/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer_test.cc +++ b/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer_test.cc
@@ -140,7 +140,7 @@ const auto* clip_op = \ (op_buffer).GetOpAtForTesting<cc::ClipRectOp>(index); \ ASSERT_NE(nullptr, clip_op); \ - EXPECT_EQ(SkRect(r), clip_op->rect); \ + EXPECT_EQ(gfx::RectFToSkRect(r), clip_op->rect); \ } while (false) #define EXPECT_ROUNDED_CLIP(r, op_buffer, index) \ @@ -798,20 +798,17 @@ cc::PaintOpType::Restore, // </c3 non_identity> cc::PaintOpType::Restore})); // </c1+c2> - EXPECT_CLIP(FloatRect(50, 50, 50, 50), *output, 1); + EXPECT_CLIP(gfx::RectF(50, 50, 50, 50), *output, 1); EXPECT_TRANSFORM_MATRIX(non_identity->Matrix(), *output, 3); - EXPECT_CLIP(FloatRect(1, 2, 3, 4), *output, 4); + EXPECT_CLIP(gfx::RectF(1, 2, 3, 4), *output, 4); EXPECT_TRANSFORM_MATRIX(non_invertible->Matrix(), *output, 6); - EXPECT_CLIP(FloatRect(5, 6, 7, 8), *output, 7); + EXPECT_CLIP(gfx::RectF(5, 6, 7, 8), *output, 7); } TEST_P(PaintChunksToCcLayerTest, CombineClipsWithRoundedRects) { FloatRoundedRect clip_rect(0, 0, 100, 100); - FloatSize corner(5, 5); - FloatRoundedRect big_rounded_clip_rect(FloatRect(0, 0, 200, 200), corner, - corner, corner, corner); - FloatRoundedRect small_rounded_clip_rect(FloatRect(0, 0, 100, 100), corner, - corner, corner, corner); + FloatRoundedRect big_rounded_clip_rect(gfx::RectF(0, 0, 200, 200), 5); + FloatRoundedRect small_rounded_clip_rect(gfx::RectF(0, 0, 100, 100), 5); auto c1 = CreateClip(c0(), t0(), clip_rect); auto c2 = CreateClip(*c1, t0(), small_rounded_clip_rect);
diff --git a/third_party/blink/renderer/platform/graphics/compositing/pending_layer.cc b/third_party/blink/renderer/platform/graphics/compositing/pending_layer.cc index 4757587..c51e3fd 100644 --- a/third_party/blink/renderer/platform/graphics/compositing/pending_layer.cc +++ b/third_party/blink/renderer/platform/graphics/compositing/pending_layer.cc
@@ -31,7 +31,7 @@ // When possible, provides a clip rect that limits the visibility. absl::optional<gfx::RectF> VisibilityLimit(const PropertyTreeState& state) { if (&state.Clip().LocalTransformSpace() == &state.Transform()) - return ToGfxRectF(state.Clip().PaintClipRect().Rect()); + return state.Clip().PaintClipRect().Rect(); if (const auto* scroll = state.Transform().ScrollNode()) return gfx::RectF(scroll->ContentsRect()); return absl::nullopt;
diff --git a/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.cc b/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.cc index 2f08535..149c9ba 100644 --- a/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.cc +++ b/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.cc
@@ -564,7 +564,7 @@ cc::ClipNode& compositor_node = *GetClipTree().Node(id); - compositor_node.clip = ToGfxRectF(clip_node.PaintClipRect().Rect()); + compositor_node.clip = clip_node.PaintClipRect().Rect(); compositor_node.transform_id = EnsureCompositorTransformNode(clip_node.LocalTransformSpace().Unalias()); compositor_node.clip_type = cc::ClipNode::ClipType::APPLIES_LOCAL_CLIP; @@ -888,7 +888,7 @@ &next_effect->LocalTransformSpace() != &clip.LocalTransformSpace()) return false; - auto WidthAndHeightAreTheSame = [](const FloatSize& size) { + auto WidthAndHeightAreTheSame = [](const gfx::SizeF& size) { return size.width() == size.height(); }; @@ -1018,7 +1018,7 @@ if (SupportsShaderBasedRoundedCorner(*pending_clip.clip, pending_clip.type, next_effect)) { synthetic_effect.mask_filter_info = gfx::MaskFilterInfo( - gfx::RRectF(pending_clip.clip->PaintClipRect())); + gfx::RRectF(SkRRect(pending_clip.clip->PaintClipRect()))); synthetic_effect.is_fast_rounded_corner = true; // Nested rounded corner clips need to force render surfaces for
diff --git a/third_party/blink/renderer/platform/graphics/graphics_context.cc b/third_party/blink/renderer/platform/graphics/graphics_context.cc index d9b12f7b..7f937f74 100644 --- a/third_party/blink/renderer/platform/graphics/graphics_context.cc +++ b/third_party/blink/renderer/platform/graphics/graphics_context.cc
@@ -772,8 +772,8 @@ return; if (!dest.IsRounded()) { - DrawImage(image, decode_mode, auto_dark_mode, dest.Rect(), &src_rect, op, - respect_orientation); + DrawImage(image, decode_mode, auto_dark_mode, FloatRect(dest.Rect()), + &src_rect, op, respect_orientation); return; } @@ -785,7 +785,7 @@ return; SkSamplingOptions sampling = - ComputeSamplingOptions(image, dest.Rect(), src_rect); + ComputeSamplingOptions(image, FloatRect(dest.Rect()), src_rect); PaintFlags image_flags = ImmutableState()->FillFlags(); image_flags.setBlendMode(op); image_flags.setColor(SK_ColorBLACK); @@ -800,9 +800,10 @@ image->HasDefaultOrientation()); if (use_shader) { const SkMatrix local_matrix = - SkMatrix::RectToRect(visible_src, dest.Rect()); - use_shader = image->ApplyShader(image_flags, local_matrix, dest.Rect(), - src_rect, draw_options); + SkMatrix::RectToRect(visible_src, FloatRect(dest.Rect())); + use_shader = + image->ApplyShader(image_flags, local_matrix, FloatRect(dest.Rect()), + src_rect, draw_options); } if (use_shader) { @@ -810,14 +811,15 @@ // Should be replaced with explicit sampling parameter passed to // ApplyShader() image_flags.setFilterQuality( - ComputeFilterQuality(image, dest.Rect(), src_rect)); + ComputeFilterQuality(image, FloatRect(dest.Rect()), src_rect)); // Shader-based fast path. - canvas_->drawRRect(dest, image_flags); + canvas_->drawRRect(SkRRect(dest), image_flags); } else { // Clip-based fallback. PaintCanvasAutoRestore auto_restore(canvas_, true); - canvas_->clipRRect(dest, image_flags.isAntiAlias()); - image->Draw(canvas_, image_flags, dest.Rect(), src_rect, draw_options); + canvas_->clipRRect(SkRRect(dest), image_flags.isAntiAlias()); + image->Draw(canvas_, image_flags, FloatRect(dest.Rect()), src_rect, + draw_options); } paint_controller_.SetImagePainted(); @@ -940,19 +942,19 @@ const Color& color, const AutoDarkMode& auto_dark_mode) { if (!rrect.IsRounded() || !rrect.IsRenderable()) { - FillRect(rrect.Rect(), color, auto_dark_mode); + FillRect(FloatRect(rrect.Rect()), color, auto_dark_mode); return; } if (color == FillColor()) { - DrawRRect(rrect, ImmutableState()->FillFlags(), auto_dark_mode); + DrawRRect(SkRRect(rrect), ImmutableState()->FillFlags(), auto_dark_mode); return; } PaintFlags flags = ImmutableState()->FillFlags(); flags.setColor(color.Rgb()); - DrawRRect(rrect, flags, auto_dark_mode); + DrawRRect(SkRRect(rrect), flags, auto_dark_mode); } namespace { @@ -971,8 +973,8 @@ return false; } - const auto& is_simple_corner = [&stroke_size](const FloatSize& outer, - const FloatSize& inner) { + const auto& is_simple_corner = [&stroke_size](const gfx::SizeF& outer, + const gfx::SizeF& inner) { // trivial/zero-radius corner if (outer.IsZero() && inner.IsZero()) return true; @@ -1007,12 +1009,12 @@ if (!IsSimpleDRRect(outer, inner)) { if (color == FillColor()) { canvas_->drawDRRect( - outer, inner, + SkRRect(outer), SkRRect(inner), DarkModeFlags(this, auto_dark_mode, ImmutableState()->FillFlags())); } else { PaintFlags flags(ImmutableState()->FillFlags()); flags.setColor(color.Rgb()); - canvas_->drawDRRect(outer, inner, + canvas_->drawDRRect(SkRRect(outer), SkRRect(inner), DarkModeFlags(this, auto_dark_mode, flags)); } @@ -1021,7 +1023,7 @@ // We can draw this as a stroked rrect. float stroke_width = inner.Rect().x() - outer.Rect().x(); - SkRRect stroke_r_rect = outer; + SkRRect stroke_r_rect(outer); stroke_r_rect.inset(stroke_width / 2, stroke_width / 2); PaintFlags stroke_flags(ImmutableState()->FillFlags()); @@ -1040,7 +1042,7 @@ const AutoDarkMode& auto_dark_mode) { PaintFlags flags(ImmutableState()->FillFlags()); flags.setColor(color.Rgb()); - canvas_->drawDRRect(SkRRect::MakeRect(rect), rounded_hole_rect, + canvas_->drawDRRect(SkRRect::MakeRect(rect), SkRRect(rounded_hole_rect), DarkModeFlags(this, auto_dark_mode, flags)); } @@ -1096,11 +1098,11 @@ SkClipOp clip_op, AntiAliasingMode should_antialias) { if (!rrect.IsRounded()) { - ClipRect(rrect.Rect(), should_antialias, clip_op); + ClipRect(FloatRect(rrect.Rect()), should_antialias, clip_op); return; } - ClipRRect(rrect, should_antialias, clip_op); + ClipRRect(SkRRect(rrect), should_antialias, clip_op); } void GraphicsContext::ClipOut(const Path& path_to_clip) {
diff --git a/third_party/blink/renderer/platform/graphics/paint/clip_paint_property_node.cc b/third_party/blink/renderer/platform/graphics/paint/clip_paint_property_node.cc index f6ec29d..e5ad12b 100644 --- a/third_party/blink/renderer/platform/graphics/paint/clip_paint_property_node.cc +++ b/third_party/blink/renderer/platform/graphics/paint/clip_paint_property_node.cc
@@ -14,7 +14,7 @@ ClipPaintPropertyNode, root, base::AdoptRef(new ClipPaintPropertyNode( nullptr, State(&TransformPaintPropertyNode::Root(), - gfx::RectF(ToGfxRect(LayoutRect::InfiniteIntRect())), + gfx::RectF(LayoutRect::InfiniteIntRect()), FloatRoundedRect(LayoutRect::InfiniteIntRect()))))); return *root; } @@ -45,7 +45,7 @@ json->SetString("changed", PaintPropertyChangeTypeToString(NodeChanged())); json->SetString("localTransformSpace", String::Format("%p", state_.local_transform_space.get())); - json->SetString("rect", state_.paint_clip_rect.Rect().ToString()); + json->SetString("rect", String(state_.paint_clip_rect.Rect().ToString())); if (state_.layout_clip_rect_excluding_overlay_scrollbars) { json->SetString( "rectExcludingOverlayScrollbars",
diff --git a/third_party/blink/renderer/platform/graphics/paint/cull_rect.h b/third_party/blink/renderer/platform/graphics/paint/cull_rect.h index 7c3acc0a..1ef0a16 100644 --- a/third_party/blink/renderer/platform/graphics/paint/cull_rect.h +++ b/third_party/blink/renderer/platform/graphics/paint/cull_rect.h
@@ -32,13 +32,9 @@ CullRect() = default; explicit CullRect(const gfx::Rect& rect) : rect_(rect) {} - static CullRect Infinite() { - return CullRect(ToGfxRect(LayoutRect::InfiniteIntRect())); - } + static CullRect Infinite() { return CullRect(LayoutRect::InfiniteIntRect()); } - bool IsInfinite() const { - return rect_ == ToGfxRect(LayoutRect::InfiniteIntRect()); - } + bool IsInfinite() const { return rect_ == LayoutRect::InfiniteIntRect(); } bool Intersects(const gfx::Rect&) const; bool IntersectsTransformed(const AffineTransform&, const gfx::RectF&) const;
diff --git a/third_party/blink/renderer/platform/graphics/paint/cull_rect_test.cc b/third_party/blink/renderer/platform/graphics/paint/cull_rect_test.cc index 7e3fea2d..eb9dfc4 100644 --- a/third_party/blink/renderer/platform/graphics/paint/cull_rect_test.cc +++ b/third_party/blink/renderer/platform/graphics/paint/cull_rect_test.cc
@@ -74,7 +74,7 @@ TEST_F(CullRectTest, Infinite) { EXPECT_TRUE(CullRect::Infinite().IsInfinite()); - EXPECT_TRUE(CullRect(ToGfxRect(LayoutRect::InfiniteIntRect())).IsInfinite()); + EXPECT_TRUE(CullRect(LayoutRect::InfiniteIntRect()).IsInfinite()); EXPECT_FALSE(CullRect(gfx::Rect(0, 0, 100, 100)).IsInfinite()); }
diff --git a/third_party/blink/renderer/platform/graphics/paint/float_clip_rect.h b/third_party/blink/renderer/platform/graphics/paint/float_clip_rect.h index bed78b7c..c05acc5d 100644 --- a/third_party/blink/renderer/platform/graphics/paint/float_clip_rect.h +++ b/third_party/blink/renderer/platform/graphics/paint/float_clip_rect.h
@@ -19,7 +19,7 @@ public: FloatClipRect() - : rect_(ToGfxRect(LayoutRect::InfiniteIntRect())), + : rect_(LayoutRect::InfiniteIntRect()), has_radius_(false), is_tight_(true), is_infinite_(true) {} @@ -27,7 +27,7 @@ explicit FloatClipRect(const gfx::RectF& rect) { SetRect(rect); } explicit FloatClipRect(const FloatRoundedRect& rect) - : rect_(ToGfxRectF(rect.Rect())), + : rect_(rect.Rect()), has_radius_(rect.IsRounded()), is_tight_(!rect.IsRounded()), is_infinite_(false) {}
diff --git a/third_party/blink/renderer/platform/graphics/paint/geometry_mapper_test.cc b/third_party/blink/renderer/platform/graphics/paint/geometry_mapper_test.cc index d7cbc19..3c18dd7 100644 --- a/third_party/blink/renderer/platform/graphics/paint/geometry_mapper_test.cc +++ b/third_party/blink/renderer/platform/graphics/paint/geometry_mapper_test.cc
@@ -440,9 +440,9 @@ } TEST_P(GeometryMapperTest, RoundedClip) { - FloatRoundedRect rect(FloatRect(10, 10, 50, 50), - FloatRoundedRect::Radii(FloatSize(1, 1), FloatSize(), - FloatSize(), FloatSize())); + FloatRoundedRect rect(gfx::RectF(10, 10, 50, 50), + FloatRoundedRect::Radii(gfx::SizeF(1, 1), gfx::SizeF(), + gfx::SizeF(), gfx::SizeF())); auto clip = CreateClip(c0(), t0(), rect); local_state.SetClip(*clip); @@ -455,9 +455,9 @@ } TEST_P(GeometryMapperTest, ClipPath) { - FloatRoundedRect rect(FloatRect(10, 10, 50, 50), - FloatRoundedRect::Radii(FloatSize(1, 1), FloatSize(), - FloatSize(), FloatSize())); + FloatRoundedRect rect(gfx::RectF(10, 10, 50, 50), + FloatRoundedRect::Radii(gfx::SizeF(1, 1), gfx::SizeF(), + gfx::SizeF(), gfx::SizeF())); auto clip = CreateClipPathClip(c0(), t0(), FloatRoundedRect(10, 10, 50, 50)); local_state.SetClip(*clip); @@ -471,9 +471,9 @@ TEST_P(GeometryMapperTest, TwoClips) { FloatRoundedRect clip_rect1( - FloatRect(10, 10, 30, 40), - FloatRoundedRect::Radii(FloatSize(1, 1), FloatSize(), FloatSize(), - FloatSize())); + gfx::RectF(10, 10, 30, 40), + FloatRoundedRect::Radii(gfx::SizeF(1, 1), gfx::SizeF(), gfx::SizeF(), + gfx::SizeF())); auto clip1 = CreateClip(c0(), t0(), clip_rect1); auto clip2 = CreateClip(*clip1, t0(), FloatRoundedRect(10, 10, 50, 50)); @@ -496,9 +496,9 @@ auto transform = Create2DTranslation(t0(), 0, 0); FloatRoundedRect clip_rect1( - FloatRect(10, 10, 50, 50), - FloatRoundedRect::Radii(FloatSize(1, 1), FloatSize(), FloatSize(), - FloatSize())); + gfx::RectF(10, 10, 50, 50), + FloatRoundedRect::Radii(gfx::SizeF(1, 1), gfx::SizeF(), gfx::SizeF(), + gfx::SizeF())); auto clip1 = CreateClip(c0(), *transform, clip_rect1); auto clip2 = CreateClip(*clip1, *transform, FloatRoundedRect(10, 10, 30, 40));
diff --git a/third_party/blink/renderer/platform/graphics/paint/raster_invalidator_test.cc b/third_party/blink/renderer/platform/graphics/paint/raster_invalidator_test.cc index 002a0ab..811896e 100644 --- a/third_party/blink/renderer/platform/graphics/paint/raster_invalidator_test.cc +++ b/third_party/blink/renderer/platform/graphics/paint/raster_invalidator_test.cc
@@ -335,9 +335,9 @@ // Tests the path based on ClipPaintPropertyNode::Changed(). TEST_P(RasterInvalidatorTest, ClipPropertyChangeRounded) { - FloatRoundedRect::Radii radii(FloatSize(1, 2), FloatSize(2, 3), - FloatSize(3, 4), FloatSize(4, 5)); - FloatRoundedRect clip_rect(FloatRect(-1000, -1000, 2000, 2000), radii); + FloatRoundedRect::Radii radii(gfx::SizeF(1, 2), gfx::SizeF(2, 3), + gfx::SizeF(3, 4), gfx::SizeF(4, 5)); + FloatRoundedRect clip_rect(gfx::RectF(-1000, -1000, 2000, 2000), radii); auto clip0 = CreateClip(c0(), t0(), clip_rect); auto clip2 = CreateClip(*clip0, t0(), clip_rect); @@ -358,7 +358,7 @@ // Change both clip0 and clip2. invalidator_.SetTracksRasterInvalidations(true); - FloatRoundedRect new_clip_rect(FloatRect(-2000, -2000, 4000, 4000), radii); + FloatRoundedRect new_clip_rect(gfx::RectF(-2000, -2000, 4000, 4000), radii); UpdateClip(*clip0, new_clip_rect); UpdateClip(*clip2, new_clip_rect); @@ -399,15 +399,14 @@ auto clip1 = CreateClip(*clip0, t0(), clip_rect); PropertyTreeState layer_state = PropertyTreeState::Root(); - PaintChunkSubset chunks( - TestPaintArtifact() - .Chunk(0) - .Properties(t0(), *clip0, e0()) - .Bounds(gfx::ToEnclosingRect(ToGfxRectF(clip_rect.Rect()))) - .Chunk(1) - .Properties(t0(), *clip1, e0()) - .Bounds(gfx::ToEnclosingRect(ToGfxRectF(clip_rect.Rect()))) - .Build()); + PaintChunkSubset chunks(TestPaintArtifact() + .Chunk(0) + .Properties(t0(), *clip0, e0()) + .Bounds(gfx::ToEnclosingRect(clip_rect.Rect())) + .Chunk(1) + .Properties(t0(), *clip1, e0()) + .Bounds(gfx::ToEnclosingRect(clip_rect.Rect())) + .Build()); invalidator_.Generate(base::DoNothing(), chunks, kDefaultLayerOffset, kDefaultLayerBounds, layer_state); @@ -463,13 +462,12 @@ auto c1 = CreateClip(c0(), t0(), clip_rect); PropertyTreeState layer_state = PropertyTreeState::Root(); - PaintChunkSubset chunks( - TestPaintArtifact() - .Chunk(0) - .Properties(t0(), *c1, e0()) - .Bounds(gfx::ToEnclosingRect(ToGfxRectF(clip_rect.Rect()))) - .IsMovedFromCachedSubsequence() - .Build()); + PaintChunkSubset chunks(TestPaintArtifact() + .Chunk(0) + .Properties(t0(), *c1, e0()) + .Bounds(gfx::ToEnclosingRect(clip_rect.Rect())) + .IsMovedFromCachedSubsequence() + .Build()); invalidator_.Generate(base::DoNothing(), chunks, kDefaultLayerOffset, kDefaultLayerBounds, layer_state); @@ -505,7 +503,7 @@ TestPaintArtifact() .Chunk(0) .Properties(t0(), *clip, e0()) - .Bounds(gfx::ToEnclosingRect(ToGfxRectF(clip_rect.Rect()))) + .Bounds(gfx::ToEnclosingRect(clip_rect.Rect())) .SetRasterEffectOutset(RasterEffectOutset::kWholePixel) .Build()); @@ -532,9 +530,9 @@ auto t1 = CreateTransform(t0(), TransformationMatrix()); auto t2 = CreateTransform(*t1, TransformationMatrix()); - FloatRoundedRect::Radii radii(FloatSize(1, 2), FloatSize(2, 3), - FloatSize(3, 4), FloatSize(4, 5)); - FloatRoundedRect clip_rect(FloatRect(-1000, -1000, 2000, 2000), radii); + FloatRoundedRect::Radii radii(gfx::SizeF(1, 2), gfx::SizeF(2, 3), + gfx::SizeF(3, 4), gfx::SizeF(4, 5)); + FloatRoundedRect clip_rect(gfx::RectF(-1000, -1000, 2000, 2000), radii); auto c1 = CreateClip(c0(), *t1, clip_rect); PropertyTreeState layer_state = DefaultPropertyTreeState(); @@ -566,9 +564,9 @@ auto t1 = CreateTransform(t0(), TransformationMatrix()); auto t2 = CreateTransform(*t1, TransformationMatrix()); - FloatRoundedRect::Radii radii(FloatSize(1, 2), FloatSize(2, 3), - FloatSize(3, 4), FloatSize(4, 5)); - FloatRoundedRect clip_rect(FloatRect(-1000, -1000, 2000, 2000), radii); + FloatRoundedRect::Radii radii(gfx::SizeF(1, 2), gfx::SizeF(2, 3), + gfx::SizeF(3, 4), gfx::SizeF(4, 5)); + FloatRoundedRect clip_rect(gfx::RectF(-1000, -1000, 2000, 2000), radii); // This set is different from ClipLocalTransformSpaceChange. auto c1 = CreateClip(c0(), *t2, clip_rect);
diff --git a/third_party/blink/renderer/platform/graphics/path.cc b/third_party/blink/renderer/platform/graphics/path.cc index dc65b30..9f23115 100644 --- a/third_party/blink/renderer/platform/graphics/path.cc +++ b/third_party/blink/renderer/platform/graphics/path.cc
@@ -450,7 +450,8 @@ if (rect.IsEmpty()) return; - path_.addRRect(rect, clockwise ? SkPathDirection::kCW : SkPathDirection::kCCW, + path_.addRRect(SkRRect(rect), + clockwise ? SkPathDirection::kCW : SkPathDirection::kCCW, /* start at upper-left after corner radius */ 0); }
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index 90b87e6..ccc95242 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -559,6 +559,7 @@ { // https://drafts.csswg.org/css-contain-3/#container-queries name: "CSSContainerQueries", + status: "test" }, { // https://drafts.csswg.org/css-contain-3/#container-lengths @@ -1249,7 +1250,7 @@ // provides a convenient way for testing legacy layout code path in blink // unit tests. name: "LayoutNG", - implied_by: ["BidiCaretAffinity", "CSSContainerQueries"], + implied_by: ["BidiCaretAffinity"], status: "stable", }, {
diff --git a/third_party/blink/renderer/platform/testing/paint_property_test_helpers.h b/third_party/blink/renderer/platform/testing/paint_property_test_helpers.h index a21cec6f..d1e55ce 100644 --- a/third_party/blink/renderer/platform/testing/paint_property_test_helpers.h +++ b/third_party/blink/renderer/platform/testing/paint_property_test_helpers.h
@@ -175,8 +175,7 @@ const ClipPaintPropertyNodeOrAlias& parent, const TransformPaintPropertyNodeOrAlias& local_transform_space, const FloatRoundedRect& clip_rect) { - return CreateClip(parent, local_transform_space, ToGfxRectF(clip_rect.Rect()), - clip_rect); + return CreateClip(parent, local_transform_space, clip_rect.Rect(), clip_rect); } inline void UpdateClip(ClipPaintPropertyNode& clip, @@ -189,15 +188,15 @@ inline void UpdateClip(ClipPaintPropertyNode& clip, const FloatRoundedRect& clip_rect) { - UpdateClip(clip, ToGfxRectF(clip_rect.Rect()), clip_rect); + UpdateClip(clip, clip_rect.Rect(), clip_rect); } inline scoped_refptr<ClipPaintPropertyNode> CreateClipPathClip( const ClipPaintPropertyNodeOrAlias& parent, const TransformPaintPropertyNodeOrAlias& local_transform_space, const FloatRoundedRect& clip_rect) { - ClipPaintPropertyNode::State state(&local_transform_space, - ToGfxRectF(clip_rect.Rect()), clip_rect); + ClipPaintPropertyNode::State state(&local_transform_space, clip_rect.Rect(), + clip_rect); state.clip_path = base::AdoptRef(new RefCountedPath); return ClipPaintPropertyNode::Create(parent, std::move(state)); } @@ -300,7 +299,7 @@ container_rect, contents_size, compositing_reasons), *CreateClip(parent_state.Clip(), parent_state.Transform(), - FloatRoundedRect(IntRect(container_rect))), + FloatRoundedRect(container_rect)), e0())); }
diff --git a/third_party/blink/tools/blinkpy/common/config/builders.json b/third_party/blink/tools/blinkpy/common/config/builders.json index 0d35b28..9de2d432 100644 --- a/third_party/blink/tools/blinkpy/common/config/builders.json +++ b/third_party/blink/tools/blinkpy/common/config/builders.json
@@ -169,15 +169,6 @@ "is_try_builder": true, "is_cq_builder":true }, - "linux_layout_tests_composite_after_paint": { - "master": "tryserver.chromium.linux", - "port_name": "linux-trusty", - "specifiers": ["Trusty", "Release"], - "flag_specific": "composite-after-paint", - "step_name": "blink_web_tests (with patch)", - "is_try_builder": true, - "is_cq_builder":true - }, "android-weblayer-pie-x86-wpt-fyi-rel": { "port_name": "android-android-pie", "master": "chromium.android.fyi",
diff --git a/third_party/blink/tools/blinkpy/tool/commands/rebaseline.py b/third_party/blink/tools/blinkpy/tool/commands/rebaseline.py index a2a1510..b00798bf 100644 --- a/third_party/blink/tools/blinkpy/tool/commands/rebaseline.py +++ b/third_party/blink/tools/blinkpy/tool/commands/rebaseline.py
@@ -94,7 +94,7 @@ flag_specific_option = optparse.make_option( '--flag-specific', # TODO: build the list from builders.json - choices=["composite-after-paint", "disable-layout-ng", "highdpi"], + choices=["disable-layout-ng", "highdpi"], default=None, action='store', help=(
diff --git a/third_party/blink/tools/blinkpy/tool/commands/rebaseline_cl.py b/third_party/blink/tools/blinkpy/tool/commands/rebaseline_cl.py index 68865d3..4eb4f3a0 100644 --- a/third_party/blink/tools/blinkpy/tool/commands/rebaseline_cl.py +++ b/third_party/blink/tools/blinkpy/tool/commands/rebaseline_cl.py
@@ -82,13 +82,13 @@ '--flag-specific', dest='flag_specific', # TODO: try to get the list from builders.json - choices=["composite-after-paint", "disable-layout-ng", "highdpi"], + choices=["disable-layout-ng", "highdpi"], default=None, action='store', help=('Name of a flag-specific configuration defined in ' 'FlagSpecificConfig. This option will rebaseline ' - 'results for the given FlagSpecificConfig while ignoring results ' - 'from other builders.')), + 'results for the given FlagSpecificConfig while ' + 'ignoring results from other builders.')), optparse.make_option( '--patchset', default=None,
diff --git a/third_party/blink/tools/blinkpy/w3c/test_importer.py b/third_party/blink/tools/blinkpy/w3c/test_importer.py index a296fe66..7a868927 100644 --- a/third_party/blink/tools/blinkpy/w3c/test_importer.py +++ b/third_party/blink/tools/blinkpy/w3c/test_importer.py
@@ -654,9 +654,6 @@ self.rebaselined_tests, self.new_test_expectations = ( self._expectations_updater.update_expectations()) - _log.info('Adding test expectations lines for composite-after-paint') - self._expectations_updater.update_expectations_for_flag_specific('composite-after-paint') - _log.info('Adding test expectations lines for disable-layout-ng') self._expectations_updater.update_expectations_for_flag_specific('disable-layout-ng')
diff --git a/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/builders.py b/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/builders.py index 0a20f1a..7537293 100644 --- a/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/builders.py +++ b/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/builders.py
@@ -55,9 +55,6 @@ 'mac11.0.arm64-blink-rel-dummy': { 'mac11.0.arm64-blink-rel', }, - 'WebKit Linux composite_after_paint Dummy Builder': { - 'linux_layout_tests_composite_after_paint', - }, 'WebKit Linux layout_ng_disabled Builder': { 'linux_layout_tests_layout_ng_disabled', },
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng index 13cbf0c..50b0ab0 100644 --- a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng +++ b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
@@ -691,8 +691,14 @@ ### http/tests/csslayout/ crbug.com/591099 http/tests/csslayout/* [ Skip ] -### virtual/container-queries/ -virtual/container-queries/* [ Skip ] +### Container Queries tests require enabled LayoutNG +crbug.com/1145970 external/wpt/css/css-contain/container-queries/* [ Skip ] +crbug.com/1145970 inspector-protocol/css/css-get-styles-for-node.js [ Skip ] +crbug.com/1145970 inspector-protocol/css/container-queries/* [ Skip ] +crbug.com/1145970 inspector-protocol/dom/container-queries/* [ Skip ] +crbug.com/1145970 inspector-protocol/overlay/overlay-container-query.js [ Skip ] +crbug.com/1145970 wpt_internal/css/css-conditional/container-queries/* [ Skip ] +crbug.com/1145970 wpt_internal/css/css-contain/* [ Skip ] ### virtual/controls-refresh-hc/ virtual/controls-refresh-hc/* [ Skip ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 6e7d6423..a3b0d14e4d 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -1749,20 +1749,10 @@ crbug.com/1158554 external/wpt/css/css-conditional/css-supports-042.xht [ Failure ] # @container -# The container-queries/ tests are only valid when the runtime flag -# CSSContainerQueries is enabled. -# -# The css-contain/ tests are only valid when the runtime flag CSSContainSize1D -# is enabled. -# -# Both these flags are enabled in virtual/container-queries/ -crbug.com/1145970 wpt_internal/css/css-conditional/container-queries/* [ Skip ] -crbug.com/1146092 wpt_internal/css/css-contain/* [ Skip ] -crbug.com/1145970 virtual/container-queries/* [ Pass ] -crbug.com/1273913 virtual/container-queries/wpt_internal/css/css-conditional/container-queries/at-container-017.html [ Failure ] -crbug.com/1249468 virtual/container-queries/wpt_internal/css/css-conditional/container-queries/block-size-and-min-height.html [ Failure ] -crbug.com/829028 virtual/container-queries/wpt_internal/css/css-contain/multicol-block-size.html [ Failure ] -crbug.com/829028 virtual/container-queries/wpt_internal/css/css-contain/multicol-inline-size.html [ Failure ] +crbug.com/1273913 wpt_internal/css/css-conditional/container-queries/at-container-017.html [ Failure ] +crbug.com/1249468 wpt_internal/css/css-conditional/container-queries/block-size-and-min-height.html [ Failure ] +crbug.com/829028 wpt_internal/css/css-contain/multicol-block-size.html [ Failure ] +crbug.com/829028 wpt_internal/css/css-contain/multicol-inline-size.html [ Failure ] # CSS Scrollbars crbug.com/891944 external/wpt/css/css-scrollbars/textarea-scrollbar-width-none.html [ Failure ] @@ -3067,15 +3057,6 @@ crbug.com/626703 [ Mac11-arm64 ] virtual/consume-code-cache-off-thread/external/wpt/html/semantics/scripting-1/the-template-element/template-element/template-descendant-frameset.html [ Crash ] crbug.com/626703 [ Mac11-arm64 ] virtual/consume-code-cache-off-thread/external/wpt/html/semantics/scripting-1/the-template-element/template-element/template-descendant-head.html [ Crash ] crbug.com/626703 [ Mac11-arm64 ] virtual/consume-code-cache-off-thread/external/wpt/workers/modules/shared-worker-import-csp.html [ Crash ] -crbug.com/626703 [ Mac11-arm64 ] virtual/container-queries/wpt_internal/css/css-conditional/container-queries/at-container-015.html [ Crash ] -crbug.com/626703 [ Mac11-arm64 ] virtual/container-queries/wpt_internal/css/css-conditional/container-queries/at-container-parsing.html [ Crash ] -crbug.com/626703 [ Mac11-arm64 ] virtual/container-queries/wpt_internal/css/css-conditional/container-queries/change-display-in-container.html [ Crash ] -crbug.com/626703 [ Mac11-arm64 ] virtual/container-queries/wpt_internal/css/css-conditional/container-queries/container-type-computed.html [ Crash ] -crbug.com/626703 [ Mac11-arm64 ] virtual/container-queries/wpt_internal/css/css-conditional/container-queries/focus-inside-content-visibility-crash.html [ Crash ] -crbug.com/626703 [ Mac11-arm64 ] virtual/container-queries/wpt_internal/css/css-conditional/container-queries/inline-size-and-min-width.html [ Crash ] -crbug.com/626703 [ Mac11-arm64 ] virtual/container-queries/wpt_internal/css/css-conditional/container-queries/viewport-units-dynamic.html [ Crash ] -crbug.com/626703 [ Mac11-arm64 ] virtual/container-queries/wpt_internal/css/css-contain/flex-inline-size.html [ Crash ] -crbug.com/626703 [ Mac11-arm64 ] virtual/container-queries/wpt_internal/css/css-contain/grid-inline-size.html [ Crash ] crbug.com/626703 [ Mac11-arm64 ] virtual/css-calc-infinity-and-nan-disabled/external/wpt/css/css-transforms/parsing/backface-visibility-computed.html [ Crash ] crbug.com/626703 [ Mac11-arm64 ] virtual/css-calc-infinity-and-nan-disabled/external/wpt/css/css-transforms/parsing/perspective-origin-invalid.html [ Crash ] crbug.com/626703 [ Mac11-arm64 ] virtual/css-calc-infinity-and-nan-disabled/external/wpt/css/css-values/attr-invalid-type-002.html [ Crash ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites index 81b58e90..a3bf397 100644 --- a/third_party/blink/web_tests/VirtualTestSuites +++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -642,16 +642,6 @@ "--enable-features=EyeDropper"] }, { - "prefix": "container-queries", - "bases": ["wpt_internal/css/css-conditional/container-queries", - "wpt_internal/css/css-contain", - "inspector-protocol/css/css-get-styles-for-node.js", - "inspector-protocol/css/container-queries", - "inspector-protocol/dom/container-queries", - "inspector-protocol/overlay/overlay-container-query.js"], - "args": ["--enable-blink-features=CSSContainerQueries,CSSDelayedAnimationUpdates"] - }, - { "prefix": "delayed-animation-updates", "bases": ["external/wpt/css/css-animations", "external/wpt/css/css-transitions", @@ -1091,7 +1081,7 @@ "wpt_internal/fenced_frame", "http/tests/inspector-protocol/fenced-frame" ], - "args": ["--enable-features=FencedFrames:implementation_type/mparch"] + "args": ["--enable-features=FencedFrames:implementation_type/mparch,Prerender2"] }, { "prefix": "disable-custom-element-default-style",
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom/getComputedStyle-detached-subtree-expected.txt b/third_party/blink/web_tests/external/wpt/css/cssom/getComputedStyle-detached-subtree-expected.txt index 282a2fb..0b9e740 100644 --- a/third_party/blink/web_tests/external/wpt/css/cssom/getComputedStyle-detached-subtree-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/cssom/getComputedStyle-detached-subtree-expected.txt
@@ -1,9 +1,9 @@ This is a testharness.js-based test. PASS getComputedStyle returns no style for detached element -FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) assert_equals: expected 0 but got 350 -FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) from iframe's window assert_equals: expected 0 but got 350 -FAIL getComputedStyle returns no style for element outside the flat tree assert_equals: expected 0 but got 350 -FAIL getComputedStyle returns no style for descendant outside the flat tree assert_equals: expected 0 but got 350 +FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) assert_equals: expected 0 but got 352 +FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) from iframe's window assert_equals: expected 0 but got 352 +FAIL getComputedStyle returns no style for element outside the flat tree assert_equals: expected 0 but got 352 +FAIL getComputedStyle returns no style for descendant outside the flat tree assert_equals: expected 0 but got 352 PASS getComputedStyle returns no style for shadow tree outside of flattened tree Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom/getComputedStyle-pseudo-expected.txt b/third_party/blink/web_tests/external/wpt/css/cssom/getComputedStyle-pseudo-expected.txt index ff763d3..f971456 100644 --- a/third_party/blink/web_tests/external/wpt/css/cssom/getComputedStyle-pseudo-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/cssom/getComputedStyle-pseudo-expected.txt
@@ -7,6 +7,6 @@ PASS Item-based blockification of nonexistent pseudo-elements PASS display: contents on pseudo-elements PASS Dynamically change to display: contents on pseudo-elements -FAIL Unknown pseudo-elements assert_equals: Should return an empty style for unknown pseudo-elements starting with double-colon expected 0 but got 350 +FAIL Unknown pseudo-elements assert_equals: Should return an empty style for unknown pseudo-elements starting with double-colon expected 0 but got 352 Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/svg/text/reftests/writing-mode-dynamic-change-ref.html b/third_party/blink/web_tests/external/wpt/svg/text/reftests/writing-mode-dynamic-change-ref.html new file mode 100644 index 0000000..58b556c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/svg/text/reftests/writing-mode-dynamic-change-ref.html
@@ -0,0 +1,14 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<body> +<svg style="border: 1px solid gray;"> + <text id="test-text" y="0" x="50" font-size="16" writing-mode="vertical-rl">🎓👺👕👖👢</text> +</svg> +<p id="result"></p> + +<script> +var text = document.getElementById("test-text"); +var bbox = text.getBBox(); +result.textContent = `BBox: ${bbox.width} x ${bbox.height}`; +</script> +</body>
diff --git a/third_party/blink/web_tests/external/wpt/svg/text/reftests/writing-mode-dynamic-change.html b/third_party/blink/web_tests/external/wpt/svg/text/reftests/writing-mode-dynamic-change.html new file mode 100644 index 0000000..7a325b0c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/svg/text/reftests/writing-mode-dynamic-change.html
@@ -0,0 +1,19 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<link rel="match" href="writing-mode-dynamic-change-ref.html"> +<link rel="help" href="https://crbug.com/1273783"> +<body> +<svg style="border: 1px solid gray;"> + <text id="test-text" y="0" x="50" font-size="16">🎓👺👕👖👢</text> +</svg> +<p id="result"></p> + +<script> +var text = document.getElementById("test-text"); +text.getBBox(); + +text.style.writingMode = "vertical-rl"; +var bbox = text.getBBox(); +result.textContent = `BBox: ${bbox.width} x ${bbox.height}`; +</script> +</body>
diff --git a/third_party/blink/web_tests/external/wpt/web-locks/META.yml b/third_party/blink/web_tests/external/wpt/web-locks/META.yml index 24e7d28..dfa5bd3 100644 --- a/third_party/blink/web_tests/external/wpt/web-locks/META.yml +++ b/third_party/blink/web_tests/external/wpt/web-locks/META.yml
@@ -1,4 +1,4 @@ -spec: https://wicg.github.io/web-locks/ +spec: https://w3c.github.io/web-locks/ suggested_reviewers: - inexorabletash - pwnall
diff --git a/third_party/blink/web_tests/external/wpt/web-locks/README.md b/third_party/blink/web_tests/external/wpt/web-locks/README.md index 8ff534e..84af41b 100644 --- a/third_party/blink/web_tests/external/wpt/web-locks/README.md +++ b/third_party/blink/web_tests/external/wpt/web-locks/README.md
@@ -1,5 +1,5 @@ This directory contains a test suite for the proposed Web Locks API. -Explainer: https://github.com/WICG/web-locks/ +Explainer: https://github.com/w3c/web-locks/ -Spec: https://wicg.github.io/web-locks/ +Spec: https://w3c.github.io/web-locks/
diff --git a/third_party/blink/web_tests/external/wpt/web-locks/bfcache/abort.tentative.https.html b/third_party/blink/web_tests/external/wpt/web-locks/bfcache/abort.tentative.https.html index 59231f9..35d9b11 100644 --- a/third_party/blink/web_tests/external/wpt/web-locks/bfcache/abort.tentative.https.html +++ b/third_party/blink/web_tests/external/wpt/web-locks/bfcache/abort.tentative.https.html
@@ -2,7 +2,7 @@ <meta charset=utf-8> <meta name="timeout" content="long"> <title>Web Locks API: bfcache</title> -<link rel=help href="https://wicg.github.io/web-locks/"> +<link rel=help href="https://w3c.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/common/utils.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/web-locks/bfcache/held.tentative.https.html b/third_party/blink/web_tests/external/wpt/web-locks/bfcache/held.tentative.https.html index dc35e5fa..9d670c5 100644 --- a/third_party/blink/web_tests/external/wpt/web-locks/bfcache/held.tentative.https.html +++ b/third_party/blink/web_tests/external/wpt/web-locks/bfcache/held.tentative.https.html
@@ -2,7 +2,7 @@ <meta charset=utf-8> <meta name="timeout" content="long"> <title>Web Locks API: bfcache</title> -<link rel=help href="https://wicg.github.io/web-locks/"> +<link rel=help href="https://w3c.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/common/utils.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/web-locks/bfcache/release-across-thread.tentative.https.html b/third_party/blink/web_tests/external/wpt/web-locks/bfcache/release-across-thread.tentative.https.html index cf5b914c..374cee8 100644 --- a/third_party/blink/web_tests/external/wpt/web-locks/bfcache/release-across-thread.tentative.https.html +++ b/third_party/blink/web_tests/external/wpt/web-locks/bfcache/release-across-thread.tentative.https.html
@@ -2,7 +2,7 @@ <meta charset=utf-8> <meta name="timeout" content="long"> <title>Web Locks API: bfcache</title> -<link rel=help href="https://wicg.github.io/web-locks/"> +<link rel=help href="https://w3c.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/common/utils.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/web-locks/bfcache/release.tentative.https.html b/third_party/blink/web_tests/external/wpt/web-locks/bfcache/release.tentative.https.html index 9280739..97f542f 100644 --- a/third_party/blink/web_tests/external/wpt/web-locks/bfcache/release.tentative.https.html +++ b/third_party/blink/web_tests/external/wpt/web-locks/bfcache/release.tentative.https.html
@@ -2,7 +2,7 @@ <meta charset=utf-8> <meta name="timeout" content="long"> <title>Web Locks API: bfcache</title> -<link rel=help href="https://wicg.github.io/web-locks/"> +<link rel=help href="https://w3c.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/common/utils.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/web-locks/bfcache/sharedworker-multiple.tentative.https.html b/third_party/blink/web_tests/external/wpt/web-locks/bfcache/sharedworker-multiple.tentative.https.html index febb0e17..71a79bc 100644 --- a/third_party/blink/web_tests/external/wpt/web-locks/bfcache/sharedworker-multiple.tentative.https.html +++ b/third_party/blink/web_tests/external/wpt/web-locks/bfcache/sharedworker-multiple.tentative.https.html
@@ -2,7 +2,7 @@ <meta charset=utf-8> <meta name="timeout" content="long"> <title>Web Locks API: bfcache</title> -<link rel=help href="https://wicg.github.io/web-locks/"> +<link rel=help href="https://w3c.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/common/utils.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/web-locks/clientids.tentative.https.html b/third_party/blink/web_tests/external/wpt/web-locks/clientids.tentative.https.html index c5d066d..7a3ffe4 100644 --- a/third_party/blink/web_tests/external/wpt/web-locks/clientids.tentative.https.html +++ b/third_party/blink/web_tests/external/wpt/web-locks/clientids.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: Client IDs in query() vs. Service Worker</title> -<link rel=help href="https://wicg.github.io/web-locks/"> +<link rel=help href="https://w3c.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/web-locks/frames.tentative.https.html b/third_party/blink/web_tests/external/wpt/web-locks/frames.tentative.https.html index e88f6c0..980b2fe 100644 --- a/third_party/blink/web_tests/external/wpt/web-locks/frames.tentative.https.html +++ b/third_party/blink/web_tests/external/wpt/web-locks/frames.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: Frames</title> -<link rel=help href="https://wicg.github.io/web-locks/"> +<link rel=help href="https://w3c.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="resources/helpers.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/web-locks/non-fully-active.tentative.https.html b/third_party/blink/web_tests/external/wpt/web-locks/non-fully-active.tentative.https.html index de82ef6d..56a5372 100644 --- a/third_party/blink/web_tests/external/wpt/web-locks/non-fully-active.tentative.https.html +++ b/third_party/blink/web_tests/external/wpt/web-locks/non-fully-active.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: Non-fully-active documents</title> -<link rel=help href="https://wicg.github.io/web-locks/"> +<link rel=help href="https://w3c.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="resources/helpers.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/web-locks/opaque-origin.tentative.https.html b/third_party/blink/web_tests/external/wpt/web-locks/opaque-origin.tentative.https.html index 1cb7a2d..3ba636e 100644 --- a/third_party/blink/web_tests/external/wpt/web-locks/opaque-origin.tentative.https.html +++ b/third_party/blink/web_tests/external/wpt/web-locks/opaque-origin.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: Opaque origins</title> -<link rel=help href="https://wicg.github.io/web-locks/"> +<link rel=help href="https://w3c.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script>
diff --git a/third_party/blink/web_tests/external/wpt/web-locks/query-ordering.tentative.https.html b/third_party/blink/web_tests/external/wpt/web-locks/query-ordering.tentative.https.html index 172a1db8..d5e722b 100644 --- a/third_party/blink/web_tests/external/wpt/web-locks/query-ordering.tentative.https.html +++ b/third_party/blink/web_tests/external/wpt/web-locks/query-ordering.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: navigator.locks.query ordering</title> -<link rel=help href="https://wicg.github.io/web-locks/"> +<link rel=help href="https://w3c.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="resources/helpers.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/web-locks/workers.tentative.https.html b/third_party/blink/web_tests/external/wpt/web-locks/workers.tentative.https.html index f1f11c6..9fe38db 100644 --- a/third_party/blink/web_tests/external/wpt/web-locks/workers.tentative.https.html +++ b/third_party/blink/web_tests/external/wpt/web-locks/workers.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: Workers</title> -<link rel=help href="https://wicg.github.io/web-locks/"> +<link rel=help href="https://w3c.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="resources/helpers.js"></script>
diff --git a/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-listing-expected.txt b/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-listing-expected.txt index a83e72a5..30e8911d 100644 --- a/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-listing-expected.txt +++ b/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-listing-expected.txt
@@ -148,6 +148,8 @@ contain-intrinsic-inline-size: none contain-intrinsic-size: none contain-intrinsic-width: none +container-name: none +container-type: none content: normal cursor: auto cx: 0px
diff --git a/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-without-renderer-listing-expected.txt b/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-without-renderer-listing-expected.txt index 32f2775..15c9cc7 100644 --- a/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-without-renderer-listing-expected.txt +++ b/third_party/blink/web_tests/fast/css/getComputedStyle/computed-style-without-renderer-listing-expected.txt
@@ -148,6 +148,8 @@ contain-intrinsic-inline-size: none contain-intrinsic-size: none contain-intrinsic-width: none +container-name: none +container-type: none content: normal cursor: auto cx: 0px
diff --git a/third_party/blink/web_tests/fast/css/style-enumerate-properties.html b/third_party/blink/web_tests/fast/css/style-enumerate-properties.html index 8c994e6..66e31e528 100644 --- a/third_party/blink/web_tests/fast/css/style-enumerate-properties.html +++ b/third_party/blink/web_tests/fast/css/style-enumerate-properties.html
@@ -43,7 +43,7 @@ testFailed("Invalid CSS-mapped property order: '" + p + "' after '" + previous + "'"); break; } - if (++cssPropertyCount <= 150) + if (++cssPropertyCount <= 160) previous = p; else { if (seenFilter)
diff --git a/third_party/blink/web_tests/inspector-protocol/css/container-queries/css-container-queries-in-constructed-stylesheet-expected.txt b/third_party/blink/web_tests/inspector-protocol/css/container-queries/css-container-queries-in-constructed-stylesheet-expected.txt index b5aed5af..a1b5308 100644 --- a/third_party/blink/web_tests/inspector-protocol/css/container-queries/css-container-queries-in-constructed-stylesheet-expected.txt +++ b/third_party/blink/web_tests/inspector-protocol/css/container-queries/css-container-queries-in-constructed-stylesheet-expected.txt
@@ -1,3 +1,42 @@ Test CSS.getMatchedStylesForNode and CSS.setContainerQueryText methods for container queries in a constructed stylesheet -container query experiment not enabled +@container size(min-width: 100px) + *.item* { regular + font-size: 1px; @[2:10-2:25] + font-size: 1px; @[undefined-undefined] + } +==== Style sheet text ==== +#parent { width: 200px; contain: size layout style; } +@container size(max-width: 300px) { + .item { font-size: 1px; } +} +#named-container { width: 300px; container: inline-size / container-1; } +@container container-1 size(max-width: 300px) { + .item { color: rgb(170, 187, 204); } +} + +Dumping matched rules: +@container size(max-width: 300px) + *.item* { regular + font-size: 1px; @[2:10-2:25] + font-size: 1px; @[undefined-undefined] + } +@container container-1 size(max-width: 300px) + *.item* { regular + color: rgb(170, 187, 204); @[6:10-6:36] + color: rgb(170, 187, 204); @[undefined-undefined] + } +Dumping inherited rules: +*#parent* { regular + width: 200px; @[0:10-0:23] + contain: size layout style; @[0:24-0:51] + width: 200px; @[undefined-undefined] + contain: size layout style; @[undefined-undefined] +} +*#named-container* { regular + width: 300px; @[4:19-4:32] + container: inline-size / container-1; @[4:33-4:70] + width: 300px; @[undefined-undefined] + container-name: container-1; @[undefined-undefined] + container-type: inline-size; @[undefined-undefined] +}
diff --git a/third_party/blink/web_tests/inspector-protocol/css/container-queries/css-set-container-query-text-expected.txt b/third_party/blink/web_tests/inspector-protocol/css/container-queries/css-set-container-query-text-expected.txt index b752e3e..5274993 100644 --- a/third_party/blink/web_tests/inspector-protocol/css/container-queries/css-set-container-query-text-expected.txt +++ b/third_party/blink/web_tests/inspector-protocol/css/container-queries/css-set-container-query-text-expected.txt
@@ -8,10 +8,22 @@ Running test: testSimpleEdit -ERROR: SyntaxError Selector or container query text is not valid. +==== Style sheet text ==== +@container size((min-width: 100px) and (max-height: 200px)) { + div { + color: red; + } +} + Running test: testFeatureChange -ERROR: SyntaxError Selector or container query text is not valid. +==== Style sheet text ==== +@container size(min-aspect-ratio: 1 / 1000) { + div { + color: red; + } +} + Running test: testInvalidParameters Expected protocol error: Invalid parameters (Failed to deserialize params.range.startLine - BINDINGS: int32 value expected <somewhere>) @@ -20,9 +32,27 @@ Expected protocol error: SyntaxError Selector or container query text is not valid. Running test: testEditSequentially -ERROR: SyntaxError Selector or container query text is not valid. -ERROR: SyntaxError Selector or container query text is not valid. +==== Style sheet text ==== +@container size(min-width: 50px) { + div { + color: red; + } +} + +==== Style sheet text ==== +@container size(min-height: 80px) { + div { + color: red; + } +} + Running test: testAfterSequentially -ERROR: SyntaxError Selector or container query text is not valid. +==== Style sheet text ==== +@container size(min-height: 20px) { + div { + color: red; + } +} +
diff --git a/third_party/blink/web_tests/inspector-protocol/css/css-get-styles-for-node-expected.txt b/third_party/blink/web_tests/inspector-protocol/css/css-get-styles-for-node-expected.txt index ce44fe36..b102913 100644 --- a/third_party/blink/web_tests/inspector-protocol/css/css-get-styles-for-node-expected.txt +++ b/third_party/blink/web_tests/inspector-protocol/css/css-get-styles-for-node-expected.txt
@@ -45,6 +45,11 @@ padding-left: 10px; @[undefined-undefined] margin-top: 15px !important; @[undefined-undefined] } +@container size(min-width: 50px) + *#inspected* { regular + padding-right: 10px; @[26:8-26:28] + padding-right: 10px; @[undefined-undefined] + } Dumping inherited rules: padding-top: 20px; @[0:0-0:18] padding-top: 20px; @[undefined-undefined] @@ -52,5 +57,6 @@ width: 100px; @[20:4-20:17] container-type: size; @[21:4-21:25] width: 100px; @[undefined-undefined] + container-type: size; @[undefined-undefined] }
diff --git a/third_party/blink/web_tests/inspector-protocol/dom/container-queries/dom-get-container-for-node-expected.txt b/third_party/blink/web_tests/inspector-protocol/dom/container-queries/dom-get-container-for-node-expected.txt index 2fc0d8b..8b0fe6f 100644 --- a/third_party/blink/web_tests/inspector-protocol/dom/container-queries/dom-get-container-for-node-expected.txt +++ b/third_party/blink/web_tests/inspector-protocol/dom/container-queries/dom-get-container-for-node-expected.txt
@@ -2,25 +2,28 @@ { id : <number> result : { + nodeId : <number> } sessionId : <string> } Is the returned container the expected named container? -false +true { id : <number> result : { + nodeId : <number> } sessionId : <string> } Is the returned container the expected unnamed container? -false +true { id : <number> result : { + nodeId : <number> } sessionId : <string> } Is the returned container the expected dynamic container? -false +true
diff --git a/third_party/blink/web_tests/inspector-protocol/dom/container-queries/dom-get-querying-descendants-for-container-expected.txt b/third_party/blink/web_tests/inspector-protocol/dom/container-queries/dom-get-querying-descendants-for-container-expected.txt index 6378c8e..c5ed501e 100644 --- a/third_party/blink/web_tests/inspector-protocol/dom/container-queries/dom-get-querying-descendants-for-container-expected.txt +++ b/third_party/blink/web_tests/inspector-protocol/dom/container-queries/dom-get-querying-descendants-for-container-expected.txt
@@ -1,6 +1,6 @@ Test CSS.getQueryingDescendantsForContainer method for container query containers Are the returned nodes the expected descendants for #container-unnamed? -false +true Are the returned nodes the expected descendants for #container-named? -false +true
diff --git a/third_party/blink/web_tests/inspector-protocol/overlay/overlay-container-query-expected.txt b/third_party/blink/web_tests/inspector-protocol/overlay/overlay-container-query-expected.txt index 3ea293d..c9ceb28 100644 --- a/third_party/blink/web_tests/inspector-protocol/overlay/overlay-container-query-expected.txt +++ b/third_party/blink/web_tests/inspector-protocol/overlay/overlay-container-query-expected.txt
@@ -73,7 +73,25 @@ 508, "Z" ], - "queryingDescendants": [], + "queryingDescendants": [ + { + "descendantBorder": [ + "M", + 8, + 8, + "L", + 108, + 8, + "L", + 108, + 108, + "L", + 8, + 108, + "Z" + ] + } + ], "containerQueryContainerHighlightConfig": { "containerBorder": { "color": "#000000",
diff --git a/third_party/blink/web_tests/svg/css/getComputedStyle-listing-expected.txt b/third_party/blink/web_tests/svg/css/getComputedStyle-listing-expected.txt index b91f769f4..3503a319 100644 --- a/third_party/blink/web_tests/svg/css/getComputedStyle-listing-expected.txt +++ b/third_party/blink/web_tests/svg/css/getComputedStyle-listing-expected.txt
@@ -148,6 +148,8 @@ contain-intrinsic-inline-size: none contain-intrinsic-size: none contain-intrinsic-width: none +container-name: none +container-type: none content: normal cursor: auto cx: 0px
diff --git a/third_party/blink/web_tests/svg/hittest/tspan-bounding-box.html b/third_party/blink/web_tests/svg/hittest/tspan-bounding-box.html new file mode 100644 index 0000000..5e047c33 --- /dev/null +++ b/third_party/blink/web_tests/svg/hittest/tspan-bounding-box.html
@@ -0,0 +1,24 @@ +<!DOCTYPE html> +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<svg width="700" height="300" xmlns="http://www.w3.org/2000/svg"> +<style> +text { + font-family: sans-serif; + /* this caused an issue */ + pointer-events: bounding-box; +} +tspan:hover { + fill: lime; +} +</style> +<text font-size="30" y="80" x="0"> + <tspan fill="blue">tspan</tspan> inside a text. +</text> +</svg> + +<script> +test(() => { + assert_not_equals(document.elementFromPoint(10, 10), document.querySelector('tspan')); +}, 'tspan\'s bounding box was wrong on hit-testing with pointer-events:bouding-box'); +</script>
diff --git a/third_party/blink/web_tests/virtual/container-queries/README.md b/third_party/blink/web_tests/virtual/container-queries/README.md deleted file mode 100644 index f393084..0000000 --- a/third_party/blink/web_tests/virtual/container-queries/README.md +++ /dev/null
@@ -1 +0,0 @@ -Virtual test suites for container queries (runtime flag: CSSContainerQueries).
diff --git a/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/css/README.txt b/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/css/README.txt deleted file mode 100644 index 1cb78f1..0000000 --- a/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/css/README.txt +++ /dev/null
@@ -1,2 +0,0 @@ -# This suite runs the tests in web_tests/inspector-protocol/css/ with the -# flag --enable-blink-features=CSSContainerQueries.
diff --git a/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/css/container-queries/css-container-queries-in-constructed-stylesheet-expected.txt b/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/css/container-queries/css-container-queries-in-constructed-stylesheet-expected.txt deleted file mode 100644 index a1b5308..0000000 --- a/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/css/container-queries/css-container-queries-in-constructed-stylesheet-expected.txt +++ /dev/null
@@ -1,42 +0,0 @@ -Test CSS.getMatchedStylesForNode and CSS.setContainerQueryText methods for container queries in a constructed stylesheet -@container size(min-width: 100px) - *.item* { regular - font-size: 1px; @[2:10-2:25] - font-size: 1px; @[undefined-undefined] - } -==== Style sheet text ==== -#parent { width: 200px; contain: size layout style; } -@container size(max-width: 300px) { - .item { font-size: 1px; } -} -#named-container { width: 300px; container: inline-size / container-1; } -@container container-1 size(max-width: 300px) { - .item { color: rgb(170, 187, 204); } -} - -Dumping matched rules: -@container size(max-width: 300px) - *.item* { regular - font-size: 1px; @[2:10-2:25] - font-size: 1px; @[undefined-undefined] - } -@container container-1 size(max-width: 300px) - *.item* { regular - color: rgb(170, 187, 204); @[6:10-6:36] - color: rgb(170, 187, 204); @[undefined-undefined] - } -Dumping inherited rules: -*#parent* { regular - width: 200px; @[0:10-0:23] - contain: size layout style; @[0:24-0:51] - width: 200px; @[undefined-undefined] - contain: size layout style; @[undefined-undefined] -} -*#named-container* { regular - width: 300px; @[4:19-4:32] - container: inline-size / container-1; @[4:33-4:70] - width: 300px; @[undefined-undefined] - container-name: container-1; @[undefined-undefined] - container-type: inline-size; @[undefined-undefined] -} -
diff --git a/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/css/container-queries/css-get-container-for-node-expected.txt b/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/css/container-queries/css-get-container-for-node-expected.txt deleted file mode 100644 index e69de29..0000000 --- a/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/css/container-queries/css-get-container-for-node-expected.txt +++ /dev/null
diff --git a/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/css/container-queries/css-set-container-query-text-expected.txt b/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/css/container-queries/css-set-container-query-text-expected.txt deleted file mode 100644 index 5274993..0000000 --- a/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/css/container-queries/css-set-container-query-text-expected.txt +++ /dev/null
@@ -1,58 +0,0 @@ -Tests CSS.setContainerQueryText method. -==== Initial style sheet text ==== -@container size((max-width: 200px) and (min-height: 100px)) { - div { - color: red; - } -} - - -Running test: testSimpleEdit -==== Style sheet text ==== -@container size((min-width: 100px) and (max-height: 200px)) { - div { - color: red; - } -} - - -Running test: testFeatureChange -==== Style sheet text ==== -@container size(min-aspect-ratio: 1 / 1000) { - div { - color: red; - } -} - - -Running test: testInvalidParameters -Expected protocol error: Invalid parameters (Failed to deserialize params.range.startLine - BINDINGS: int32 value expected <somewhere>) - -Running test: testInvalidText -Expected protocol error: SyntaxError Selector or container query text is not valid. - -Running test: testEditSequentially -==== Style sheet text ==== -@container size(min-width: 50px) { - div { - color: red; - } -} - -==== Style sheet text ==== -@container size(min-height: 80px) { - div { - color: red; - } -} - - -Running test: testAfterSequentially -==== Style sheet text ==== -@container size(min-height: 20px) { - div { - color: red; - } -} - -
diff --git a/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/css/css-get-styles-for-node-expected.txt b/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/css/css-get-styles-for-node-expected.txt deleted file mode 100644 index b102913..0000000 --- a/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/css/css-get-styles-for-node-expected.txt +++ /dev/null
@@ -1,62 +0,0 @@ -The test verifies functionality of protocol method CSS.getMatchedStylesForNode and CSS.getInlineStylesForNode. -{ - error : { - code : -32000 - message : Node is not an Element - } - id : <number> - sessionId : <string> -} -{ - error : { - code : -32000 - message : Node is not an Element - } - id : <number> - sessionId : <string> -} -Dumping inline style: -{ - padding-top: 55px; @[0:0-0:18] - margin-top: 33px !important; @[0:19-0:47] - padding-top: 55px; @[undefined-undefined] - margin-top: 33px !important; @[undefined-undefined] -} -Dumping matched rules: -*#inspected* { regular - margin-left: 10px !important; @[1:4-1:33] - margin-left: 10px !important; @[undefined-undefined] -} -*#inspected* { regular - padding: 10px 20px 30px 40px; @[6:4-6:33] - padding-top: 50px; @[7:4-7:22] - padding-right: 20px; @[undefined-undefined] - padding-bottom: 30px; @[undefined-undefined] - padding-left: 40px; @[undefined-undefined] - padding-top: 50px; @[undefined-undefined] -} -@media (min-width: 1px) - *#inspected* { regular - padding-left: 5px; @[12:8-12:26] - margin-left: 20px; @[13:8-13:26] - padding-left: 10px; @[14:8-14:27] - margin-top: 15px !important; @[15:8-15:36] - margin-left: 20px; @[undefined-undefined] - padding-left: 10px; @[undefined-undefined] - margin-top: 15px !important; @[undefined-undefined] - } -@container size(min-width: 50px) - *#inspected* { regular - padding-right: 10px; @[26:8-26:28] - padding-right: 10px; @[undefined-undefined] - } -Dumping inherited rules: - padding-top: 20px; @[0:0-0:18] - padding-top: 20px; @[undefined-undefined] -*#parent-div* { regular - width: 100px; @[20:4-20:17] - container-type: size; @[21:4-21:25] - width: 100px; @[undefined-undefined] - container-type: size; @[undefined-undefined] -} -
diff --git a/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/dom/README.txt b/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/dom/README.txt deleted file mode 100644 index ad6f7b48..0000000 --- a/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/dom/README.txt +++ /dev/null
@@ -1,2 +0,0 @@ -# This suite runs the tests in web_tests/inspector-protocol/dom/ with the -# flag --enable-blink-features=CSSContainerQueries.
diff --git a/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/dom/container-queries/dom-get-container-for-node-expected.txt b/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/dom/container-queries/dom-get-container-for-node-expected.txt deleted file mode 100644 index 8b0fe6f..0000000 --- a/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/dom/container-queries/dom-get-container-for-node-expected.txt +++ /dev/null
@@ -1,29 +0,0 @@ -Test CSS.getContainerForNode method for node with container queries -{ - id : <number> - result : { - nodeId : <number> - } - sessionId : <string> -} -Is the returned container the expected named container? -true -{ - id : <number> - result : { - nodeId : <number> - } - sessionId : <string> -} -Is the returned container the expected unnamed container? -true -{ - id : <number> - result : { - nodeId : <number> - } - sessionId : <string> -} -Is the returned container the expected dynamic container? -true -
diff --git a/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/dom/container-queries/dom-get-querying-descendants-for-container-expected.txt b/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/dom/container-queries/dom-get-querying-descendants-for-container-expected.txt deleted file mode 100644 index c5ed501e..0000000 --- a/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/dom/container-queries/dom-get-querying-descendants-for-container-expected.txt +++ /dev/null
@@ -1,6 +0,0 @@ -Test CSS.getQueryingDescendantsForContainer method for container query containers -Are the returned nodes the expected descendants for #container-unnamed? -true -Are the returned nodes the expected descendants for #container-named? -true -
diff --git a/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/overlay/README.txt b/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/overlay/README.txt deleted file mode 100644 index 2515cd830..0000000 --- a/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/overlay/README.txt +++ /dev/null
@@ -1,2 +0,0 @@ -# This suite runs the tests in web_tests/inspector-protocol/overlay/ with the -# flag --enable-blink-features=CSSContainerQueries.
diff --git a/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/overlay/overlay-container-query-expected.txt b/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/overlay/overlay-container-query-expected.txt deleted file mode 100644 index c9ceb28..0000000 --- a/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/overlay/overlay-container-query-expected.txt +++ /dev/null
@@ -1,107 +0,0 @@ -Verifies that Overlay.setShowContainerQueryOverlays works. -Overlay not rendered: - -Overlay rendered: -{ - "name": "drawContainerQueryHighlight", - "data": { - "containerBorder": [ - "M", - 8, - 8, - "L", - 408, - 8, - "L", - 408, - 508, - "L", - 8, - 508, - "Z" - ], - "containerQueryContainerHighlightConfig": { - "containerBorder": { - "color": "#000000", - "pattern": "solid" - } - } - } -} -Overlay rendered: -[ - { - "containerBorder": [ - "M", - 8, - 8, - "L", - 408, - 8, - "L", - 408, - 508, - "L", - 8, - 508, - "Z" - ], - "containerQueryContainerHighlightConfig": { - "containerBorder": { - "color": "#000000", - "pattern": "solid" - } - } - } -] -Overlay rendered: -{ - "name": "drawContainerQueryHighlight", - "data": { - "containerBorder": [ - "M", - 8, - 8, - "L", - 408, - 8, - "L", - 408, - 508, - "L", - 8, - 508, - "Z" - ], - "queryingDescendants": [ - { - "descendantBorder": [ - "M", - 8, - 8, - "L", - 108, - 8, - "L", - 108, - 108, - "L", - 8, - 108, - "Z" - ] - } - ], - "containerQueryContainerHighlightConfig": { - "containerBorder": { - "color": "#000000", - "pattern": "solid" - }, - "descendantBorder": { - "color": "#010000", - "pattern": "solid" - } - } - } -} -
diff --git a/third_party/blink/web_tests/virtual/fenced-frame-mparch/wpt_internal/fenced_frame/prerender.https-expected.txt b/third_party/blink/web_tests/virtual/fenced-frame-mparch/wpt_internal/fenced_frame/prerender.https-expected.txt new file mode 100644 index 0000000..41b28d9 --- /dev/null +++ b/third_party/blink/web_tests/virtual/fenced-frame-mparch/wpt_internal/fenced_frame/prerender.https-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +PASS Fenced Frame must not load prerendered page. +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/webexposed/css-properties-as-js-properties-expected.txt b/third_party/blink/web_tests/webexposed/css-properties-as-js-properties-expected.txt index 5b7d72b2..bd80bb8 100644 --- a/third_party/blink/web_tests/webexposed/css-properties-as-js-properties-expected.txt +++ b/third_party/blink/web_tests/webexposed/css-properties-as-js-properties-expected.txt
@@ -135,6 +135,9 @@ containIntrinsicInlineSize containIntrinsicSize containIntrinsicWidth +container +containerName +containerType content contentVisibility counterIncrement
diff --git a/third_party/blink/web_tests/webexposed/css-property-listing-expected.txt b/third_party/blink/web_tests/webexposed/css-property-listing-expected.txt index a75703e..77d35d60 100644 --- a/third_party/blink/web_tests/webexposed/css-property-listing-expected.txt +++ b/third_party/blink/web_tests/webexposed/css-property-listing-expected.txt
@@ -157,6 +157,8 @@ contain-intrinsic-height contain-intrinsic-inline-size contain-intrinsic-width + container-name + container-type content content-visibility counter-increment @@ -576,6 +578,9 @@ contain-intrinsic-size contain-intrinsic-height contain-intrinsic-width + container + container-name + container-type flex flex-basis flex-grow
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt index a41f0fa4..6f7b994 100644 --- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt +++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -703,6 +703,9 @@ attribute @@toStringTag getter conditionText method constructor +interface CSSContainerRule : CSSConditionRule + attribute @@toStringTag + method constructor interface CSSCounterStyleRule : CSSRule attribute @@toStringTag getter additiveSymbols @@ -11382,6 +11385,12 @@ method percent method pt method px + method qb + method qh + method qi + method qmax + method qmin + method qw method rad method registerProperty method rem
diff --git a/third_party/blink/web_tests/wpt_internal/fenced_frame/prerender.https-expected.txt b/third_party/blink/web_tests/wpt_internal/fenced_frame/prerender.https-expected.txt new file mode 100644 index 0000000..a00576d --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/fenced_frame/prerender.https-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL Fenced Frame must not load prerendered page. assert_implements: <script type="speculationrules"> is not supported undefined +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/wpt_internal/fenced_frame/prerender.https.html b/third_party/blink/web_tests/wpt_internal/fenced_frame/prerender.https.html new file mode 100644 index 0000000..a3959dd1a --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/fenced_frame/prerender.https.html
@@ -0,0 +1,49 @@ +<!DOCTYPE html> +<title>Test prerendering</title> +<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> +<script src="resources/utils.js"></script> + +<body> + +<script> +promise_test(async t => { + assert_implements( + 'supports' in HTMLScriptElement, + 'HTMLScriptElement.supports is not supported'); + assert_implements( + HTMLScriptElement.supports('speculationrules'), + '<script type="speculationrules"> is not supported'); + + const prerender_ready_key = KEYS['prerender READY']; + const prerender_loaded_key = KEYS['prerender LOADED']; + const prerender_activated_key = KEYS['prerender ACTIVATED']; + const url = 'resources/prerender-inner.html'; + + // TODO: This test expects that the browser always triggers prerendering when + // SpeculationRules is provided. But SpeculationRules allows browsers not to + // trigger the speculative resource loading even if SpeculationRules is + // specified. So we have to use a new WebDriver API that deterministically + // triggers prerendering. + // https://github.com/WICG/nav-speculation/blob/main/speculation-rules-testing.md + const script = document.createElement('script'); + script.type = 'speculationrules'; + script.text = `{"prerender": [{"source": "list", "urls": ["${url}"] }] }`; + document.head.appendChild(script); + + const ready_result = await nextValueFromServer(prerender_ready_key); + assert_equals(ready_result, 'ready'); + + attachFencedFrame(url); + + const loaded_or_acrivated_result = await Promise.race([ + nextValueFromServer(prerender_loaded_key), + nextValueFromServer(prerender_activated_key) + ]); + assert_equals(loaded_or_acrivated_result, 'loaded'); +}, 'Fenced Frame must not load prerendered page.'); +</script> + +</body>
diff --git a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/prerender-inner.html b/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/prerender-inner.html new file mode 100644 index 0000000..65ad4bd --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/prerender-inner.html
@@ -0,0 +1,21 @@ +<!DOCTYPE html> +<script src="utils.js"></script> +<title>Fenced frame content to report the result of prerendering</title> + +<body> +<script> +(() => { + document.addEventListener('prerenderingchange', () => { + const prerender_activated_key = KEYS['prerender READY']; + writeValueToServer(prerender_activated_key, 'activated'); + }); + if (document.prerendering) { + const prerender_ready_key = KEYS['prerender READY']; + writeValueToServer(prerender_ready_key, 'ready'); + } else { + const prerender_loaded_key = KEYS['prerender LOADED']; + writeValueToServer(prerender_loaded_key, 'loaded'); + } +})(); +</script> +</body>
diff --git a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/prerender-inner.html.headers b/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/prerender-inner.html.headers new file mode 100644 index 0000000..1b63235 --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/prerender-inner.html.headers
@@ -0,0 +1 @@ +Supports-Loading-Mode: fenced-frame
diff --git a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/utils.js b/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/utils.js index 516677b3..210ac19 100644 --- a/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/utils.js +++ b/third_party/blink/web_tests/wpt_internal/fenced_frame/resources/utils.js
@@ -68,6 +68,10 @@ "presentation.receiver" : "00000000-0000-0000-0000-000000000021", "background-sync" : "00000000-0000-0000-0000-000000000022", + + "prerender READY" : "00000000-0000-0000-0000-000000000023", + "prerender LOADED" : "00000000-0000-0000-0000-000000000024", + "prerender ACTIVATED" : "00000000-0000-0000-0000-000000000025", // Add keys above this list, incrementing the key UUID in hexadecimal }
diff --git a/third_party/closure_compiler/externs/file_manager_private.js b/third_party/closure_compiler/externs/file_manager_private.js index 079a7a84cf..5e173c2 100644 --- a/third_party/closure_compiler/externs/file_manager_private.js +++ b/third_party/closure_compiler/externs/file_manager_private.js
@@ -232,6 +232,15 @@ EXTERNAL_FILE_URL: 'externalFileUrl', ALTERNATE_URL: 'alternateUrl', SHARE_URL: 'shareUrl', + CAN_COPY: 'canCopy', + CAN_DELETE: 'canDelete', + CAN_RENAME: 'canRename', + CAN_ADD_CHILDREN: 'canAddChildren', + CAN_SHARE: 'canShare', + CAN_PIN: 'canPin', + IS_MACHINE_ROOT: 'isMachineRoot', + IS_EXTERNAL_MEDIA: 'isExternalMedia', + IS_ARBITRARY_SYNC_FOLDER: 'isArbitrarySyncFolder', }; /** @enum {string} */ @@ -361,6 +370,7 @@ * canRename: (boolean|undefined), * canAddChildren: (boolean|undefined), * canShare: (boolean|undefined), + * canPin: (boolean|undefined), * isMachineRoot: (boolean|undefined), * isExternalMedia: (boolean|undefined), * isArbitrarySyncFolder: (boolean|undefined)
diff --git a/third_party/closure_compiler/externs/input_method_private.js b/third_party/closure_compiler/externs/input_method_private.js index 7715fb9..f9e9878 100644 --- a/third_party/closure_compiler/externs/input_method_private.js +++ b/third_party/closure_compiler/externs/input_method_private.js
@@ -483,6 +483,12 @@ chrome.inputMethodPrivate.onFocus; /** + * This event is sent when a touch occurs in a text field + * @type {!ChromeEvent} + */ +chrome.inputMethodPrivate.onTouch; + +/** * This event is sent when the settings for any input method changed. It is sent * to all extensions that are listening to this event, and enabled by the user. * @type {!ChromeEvent}
diff --git a/tools/mb/mb.py b/tools/mb/mb.py index 27360e9c..c74bebb 100755 --- a/tools/mb/mb.py +++ b/tools/mb/mb.py
@@ -1584,8 +1584,6 @@ self.WriteJSON( { 'args': [ - '--isolated', - self.ToSrcRelPath('%s/%s.isolated' % (build_dir, target)), '--isolate', self.ToSrcRelPath('%s/%s.isolate' % (build_dir, target)), ],
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index 0d57327..58b0d88 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -1077,7 +1077,6 @@ # the CI configuration, where no debug builder exists. 'linux_chromium_ubsan_rel_ng': 'ubsan_vptr_release_bot', - 'linux_layout_tests_composite_after_paint': 'gpu_tests_release_trybot', 'linux_layout_tests_layout_ng_disabled': 'release_trybot', 'linux-layout-tests-edit-ng': 'release_trybot', 'linux-blink-web-tests-force-accessibility-rel': 'release_trybot',
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.linux.json b/tools/mb/mb_config_expectations/tryserver.chromium.linux.json index 5b2f64e..0c3d7a8 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.linux.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.linux.json
@@ -1082,18 +1082,6 @@ "use_goma": true } }, - "linux_layout_tests_composite_after_paint": { - "gn_args": { - "blink_enable_generated_code_formatting": false, - "dcheck_always_on": true, - "ffmpeg_branding": "Chrome", - "is_component_build": false, - "is_debug": false, - "proprietary_codecs": true, - "symbol_level": 0, - "use_goma": true - } - }, "linux_layout_tests_layout_ng_disabled": { "gn_args": { "blink_enable_generated_code_formatting": false,
diff --git a/tools/md_browser/README.md b/tools/md_browser/README.md index 05d6b9d6..00368641 100644 --- a/tools/md_browser/README.md +++ b/tools/md_browser/README.md
@@ -19,7 +19,7 @@ 1. cd to the top of your chromium checkout -2. run `python tools/md_browser/md_browser.py` +2. run `python3 tools/md_browser/md_browser.py` 3. There is no step three.
diff --git a/tools/md_browser/gitiles_autolink.py b/tools/md_browser/gitiles_autolink.py index eb77ebb51..65039ba 100644 --- a/tools/md_browser/gitiles_autolink.py +++ b/tools/md_browser/gitiles_autolink.py
@@ -9,7 +9,7 @@ https://gerrit.googlesource.com/gitiles/+/master/java/com/google/gitiles/Linkifier.java """ -from markdown.inlinepatterns import (AutolinkPattern, Pattern) +from markdown.inlinepatterns import (AutolinkInlineProcessor, Pattern) from markdown.extensions import Extension @@ -24,10 +24,10 @@ class _GitilesSmartQuotesExtension(Extension): """Add Gitiles' simpler linkifier to Markdown.""" - def extendMarkdown(self, md, md_globals): + + def extendMarkdown(self, md): md.inlinePatterns.add('gitilesautolink', - AutolinkPattern(AUTOLINK_RE, md), - '<autolink') + AutolinkInlineProcessor(AUTOLINK_RE, md), '<autolink') def makeExtension(*args, **kwargs):
diff --git a/tools/md_browser/gitiles_ext_blocks.py b/tools/md_browser/gitiles_ext_blocks.py index b1a53795..974ee87 100644 --- a/tools/md_browser/gitiles_ext_blocks.py +++ b/tools/md_browser/gitiles_ext_blocks.py
@@ -74,7 +74,8 @@ class _GitilesExtBlockExtension(Extension): """Add Gitiles' extended blocks to Markdown.""" - def extendMarkdown(self, md, md_globals): + + def extendMarkdown(self, md): md.parser.blockprocessors.add('gitilesextblocks', _GitilesExtBlockProcessor(md.parser), '_begin')
diff --git a/tools/md_browser/gitiles_smart_quotes.py b/tools/md_browser/gitiles_smart_quotes.py index 502a245..ab55fc0 100644 --- a/tools/md_browser/gitiles_smart_quotes.py +++ b/tools/md_browser/gitiles_smart_quotes.py
@@ -29,10 +29,11 @@ class _GitilesSmartQuotesExtension(Extension): """Add Gitiles' smart quotes to Markdown.""" - def extendMarkdown(self, md, md_globals): + + def extendMarkdown(self, md): md.inlinePatterns.add('gitilessmartquotes', _GitilesSmartQuotesPattern(r"""(['"])([^\2]+)\2"""), - '<emphasis') + '<em_strong') def makeExtension(*args, **kwargs):
diff --git a/tools/md_browser/md_browser.py b/tools/md_browser/md_browser.py index 74259f2f..802ebf2 100755 --- a/tools/md_browser/md_browser.py +++ b/tools/md_browser/md_browser.py
@@ -1,23 +1,22 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # 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. """Simple Markdown browser for a Git checkout.""" -from __future__ import print_function -import SimpleHTTPServer -import SocketServer +import http.server +import socketserver import argparse -import cgi import codecs +import html import os import re import socket import sys import threading import time -import urllib +import urllib.request, urllib.parse, urllib.error import webbrowser from xml.etree import ElementTree @@ -113,17 +112,18 @@ # behavior (ex. 95 -> '_'). return chr(int(regex_match.group(1))) - value = value.encode('ascii', 'replace') # Non-ASCII turns into '?'. - value = re.sub(u'\x02(\\d+)\x03', decode_escaped_chars, value) + # Non-ASCII turns into '?'. + value = value.encode('ascii', 'replace').decode('ascii') + value = re.sub('\x02(\\d+)\x03', decode_escaped_chars, value) value = re.sub(r'[^- a-zA-Z0-9]', '_', value) # Non-alphanumerics to '_'. - value = value.replace(u' ', u'-') + value = value.replace(' ', '-') value = re.sub(r'([-_])[-_]+', r'\1', value) # Fold hyphens and underscores. return value -class Server(SocketServer.TCPServer): +class Server(socketserver.TCPServer): def __init__(self, server_address, top_level): - SocketServer.TCPServer.__init__(self, server_address, Handler) + socketserver.TCPServer.__init__(self, server_address, Handler) self.top_level = top_level def server_bind(self): @@ -131,9 +131,9 @@ self.socket.bind(self.server_address) -class Handler(SimpleHTTPServer.SimpleHTTPRequestHandler): +class Handler(http.server.SimpleHTTPRequestHandler): def do_GET(self): - self.path = urllib.unquote(self.path) + self.path = urllib.parse.unquote(self.path) path = self.path # strip off the repo and branch info, if present, for compatibility @@ -196,16 +196,16 @@ if (line.startswith('#') and not line.startswith('##'))]) == 1) - md.treeprocessors['adjust_toc'] = _AdjustTOC(has_a_single_h1) + md.treeprocessors.register(_AdjustTOC(has_a_single_h1), 'adjust_toc', 4) - md_fragment = md.convert(contents).encode('utf-8') + md_fragment = md.convert(contents) try: self._WriteHeader('text/html') self._WriteTemplate('header.html') - self.wfile.write('<div class="doc">') - self.wfile.write(md_fragment) - self.wfile.write('</div>') + self._Write('<div class="doc">') + self._Write(md_fragment) + self._Write('</div>') self._WriteTemplate('footer.html') except: raise @@ -214,7 +214,7 @@ self._WriteHeader('text/html') self._WriteTemplate('header.html') - self.wfile.write('<table class="FileContents">') + self._Write('<table class="FileContents">') with open(full_path) as fp: # Escape html over the entire file at once. data = fp.read().replace( @@ -223,15 +223,18 @@ '>', '>').replace( '"', '"') for i, line in enumerate(data.splitlines(), start=1): - self.wfile.write( - ('<tr class="u-pre u-monospace FileContents-line">' - '<td class="u-lineNum u-noSelect FileContents-lineNum">' - '<a name="%(num)s" ' - 'onclick="window.location.hash=%(quot)s#%(num)s%(quot)s">' - '%(num)s</a></td>' - '<td class="FileContents-lineContents">%(line)s</td></tr>') - % {'num': i, 'quot': "'", 'line': line}) - self.wfile.write('</table>') + self._Write( + ('<tr class="u-pre u-monospace FileContents-line">' + '<td class="u-lineNum u-noSelect FileContents-lineNum">' + '<a name="%(num)s" ' + 'onclick="window.location.hash=%(quot)s#%(num)s%(quot)s">' + '%(num)s</a></td>' + '<td class="FileContents-lineContents">%(line)s</td></tr>') % { + 'num': i, + 'quot': "'", + 'line': line + }) + self._Write('</table>') self._WriteTemplate('footer.html') @@ -241,57 +244,55 @@ def _DoNotFound(self): self._WriteHeader('text/html', status_code=404) - self.wfile.write( - '<html><body>%s not found</body></html>' % cgi.escape(self.path)) + self._Write('<html><body>%s not found</body></html>' % + html.escape(self.path)) def _DoUnknown(self): self._WriteHeader('text/html', status_code=501) - self.wfile.write('<html><body>I do not know how to serve %s.</body>' - '</html>' % cgi.escape(self.path)) + self._Write('<html><body>I do not know how to serve %s.</body>' + '</html>' % html.escape(self.path)) def _DoDirListing(self, full_path): self._WriteHeader('text/html') self._WriteTemplate('header.html') - self.wfile.write('<div class="doc">') + self._Write('<div class="doc">') - self.wfile.write('<div class="Breadcrumbs">\n') - self.wfile.write( - '<a class="Breadcrumbs-crumb">%s</a>\n' % cgi.escape(self.path)) - self.wfile.write('</div>\n') + self._Write('<div class="Breadcrumbs">\n') + self._Write('<a class="Breadcrumbs-crumb">%s</a>\n' % + html.escape(self.path)) + self._Write('</div>\n') - escaped_dir = cgi.escape(self.path.rstrip('/'), quote=True) + escaped_dir = html.escape(self.path.rstrip('/'), quote=True) for _, dirs, files in os.walk(full_path): for f in sorted(files): if f.startswith('.'): continue - f = cgi.escape(f, quote=True) + f = html.escape(f, quote=True) if f.endswith('.md'): bold = ('<b>', '</b>') else: bold = ('', '') - self.wfile.write('<a href="%s/%s">%s%s%s</a><br/>\n' % - (escaped_dir, f, bold[0], f, bold[1])) + self._Write('<a href="%s/%s">%s%s%s</a><br/>\n' % + (escaped_dir, f, bold[0], f, bold[1])) - self.wfile.write('<br/>\n') + self._Write('<br/>\n') for d in sorted(dirs): if d.startswith('.'): continue - d = cgi.escape(d, quote=True) - self.wfile.write('<a href="%s/%s">%s/</a><br/>\n' % - (escaped_dir, d, d)) + d = html.escape(d, quote=True) + self._Write('<a href="%s/%s">%s/</a><br/>\n' % (escaped_dir, d, d)) break - self.wfile.write('</div>') + self._Write('</div>') self._WriteTemplate('footer.html') def _DoImage(self, full_path, mime_type): self._WriteHeader(mime_type) - with open(full_path) as f: + with open(full_path, 'rb') as f: self.wfile.write(f.read()) - f.close() def _Read(self, relpath, relative_to=None): if relative_to is None: @@ -301,6 +302,9 @@ with codecs.open(path, encoding='utf-8') as fp: return fp.read() + def _Write(self, contents): + self.wfile.write(contents.encode('utf-8')) + def _WriteHeader(self, content_type='text/plain', status_code=200): self.send_response(status_code) self.send_header('Content-Type', content_type) @@ -309,7 +313,7 @@ def _WriteTemplate(self, template): contents = self._Read(os.path.join('tools', 'md_browser', template), relative_to=SRC_DIR) - self.wfile.write(contents.encode('utf-8')) + self._Write(contents) class _AdjustTOC(markdown.treeprocessors.Treeprocessor):
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 9ecc1bb..eca36328 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -28639,6 +28639,7 @@ <int value="482" label="SPEECH_RECOGNITION_PRIVATE_ON_RESULT"/> <int value="483" label="SPEECH_RECOGNITION_PRIVATE_ON_ERROR"/> <int value="484" label="FILE_MANAGER_PRIVATE_ON_IO_TASK_PROGRESS_STATUS"/> + <int value="485" label="INPUT_METHOD_PRIVATE_ON_TOUCH"/> </enum> <enum name="ExtensionFileWriteResult">
diff --git a/tools/metrics/histograms/metadata/apps/histograms.xml b/tools/metrics/histograms/metadata/apps/histograms.xml index e7ec9a1..8555713 100644 --- a/tools/metrics/histograms/metadata/apps/histograms.xml +++ b/tools/metrics/histograms/metadata/apps/histograms.xml
@@ -3051,8 +3051,9 @@ </histogram> <histogram name="Apps.StateTransition.AnimationSmoothness{AppListTargetState}" - units="%" expires_after="2022-01-16"> + units="%" expires_after="2022-05-30"> <owner>newcomer@chromium.org</owner> + <owner>src/ash/app_list/OWNERS</owner> <summary> Relative smoothness of animations of peeking launcher state transitions. 100% represents ideally smooth 60 frames per second. 50% represents only 30
diff --git a/tools/metrics/histograms/metadata/ash/histograms.xml b/tools/metrics/histograms/metadata/ash/histograms.xml index 98a6d72..1cd1637 100644 --- a/tools/metrics/histograms/metadata/ash/histograms.xml +++ b/tools/metrics/histograms/metadata/ash/histograms.xml
@@ -1465,7 +1465,7 @@ </histogram> <histogram name="Ash.DragWindowFromShelf.PresentationTime" units="ms" - expires_after="2021-12-31"> + expires_after="2022-05-30"> <owner>tbarzic@chromium.org</owner> <owner>xdai@chromium.org</owner> <summary> @@ -1475,7 +1475,7 @@ </histogram> <histogram name="Ash.DragWindowFromShelf.PresentationTime.MaxLatency" - units="ms" expires_after="2021-12-31"> + units="ms" expires_after="2022-05-30"> <owner>tbarzic@chromium.org</owner> <owner>xdai@chromium.org</owner> <summary> @@ -2201,7 +2201,7 @@ </histogram> <histogram base="true" name="Ash.Overview.WindowDrag.PresentationTime" - units="ms" expires_after="2021-12-31"> + units="ms" expires_after="2022-05-30"> <!-- Name completed by histogram_suffixes name="TabletOrClamshellMode" --> @@ -2212,7 +2212,7 @@ <histogram base="true" name="Ash.Overview.WindowDrag.PresentationTime.MaxLatency" units="ms" - expires_after="2021-12-31"> + expires_after="2022-05-30"> <!-- Name completed by histogram_suffixes name="TabletOrClamshellMode" -->
diff --git a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml index b37af210..ba9eaf0f 100644 --- a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml +++ b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
@@ -17860,6 +17860,9 @@ label="The reauth happened to move a password to the account store."/> <suffix name="ToSaveOrUpdatePassword" label="The reauth happened to save a password to the account store."/> + <suffix name="ToSavePasswordLocallyThenMove" + label="The reauth happened to move a just-locally-saved password to the + account store."/> <affected-histogram name="Signin.TransactionalReauthResult"/> <affected-histogram name="Signin.TransactionalReauthUserAction"/> </histogram_suffixes>
diff --git a/tools/metrics/histograms/metadata/login/histograms.xml b/tools/metrics/histograms/metadata/login/histograms.xml index 95aafce..54aa707 100644 --- a/tools/metrics/histograms/metadata/login/histograms.xml +++ b/tools/metrics/histograms/metadata/login/histograms.xml
@@ -86,7 +86,7 @@ <histogram name="Login.InvalidCombinationsOfAllowedUsersPolicies" enum="AllowedUsersPoliciesInvalidState" expires_after="2022-04-17"> <owner>emaamari@google.com</owner> - <owner>src/chromeos/policy/OWNERS</owner> + <owner>src/ash/components/policy/OWNERS</owner> <summary> Chrome OS histogram that keeps track of cases where devices have an invalid combination of allow_new_users and user_allowlist policies. This is emitted
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml index d9449777..c650923 100644 --- a/tools/metrics/histograms/metadata/others/histograms.xml +++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -2794,6 +2794,29 @@ </token> </histogram> +<histogram name="ChromiumAndroidLinker.ModernLinkerDlopenExtTime" units="ms" + expires_after="2022-10-01"> + <owner>pasko@chromium.org</owner> + <owner>agrieve@chromium.org</owner> + <summary> + The amount of time the ModernLinker spends to run android_dlopen_ext(). + Samples from the app zygote process can be counted multiple times when the + app zygote is enabled. See ChromiumAndroidLinker.*LoadTime2 for details. + </summary> +</histogram> + +<histogram name="ChromiumAndroidLinker.ModernLinkerIteratePhdrTime" units="ms" + expires_after="2022-10-01"> + <owner>pasko@chromium.org</owner> + <owner>agrieve@chromium.org</owner> + <summary> + The amount of time the ModernLinker spends to find the RELRO region using + dl_iterate_phdr(). Samples from the app zygote process can be counted + multiple times when the app zygote is enabled. See + ChromiumAndroidLinker.*LoadTime2 for details. + </summary> +</histogram> + <histogram name="ChromiumAndroidLinker.RelroAvailableImmediately" enum="BooleanRelroAvailableImmediately" expires_after="2022-10-01"> <owner>lizeb@chromium.org</owner>
diff --git a/tools/perf/expectations.config b/tools/perf/expectations.config index ce4f9c51..95e43e42 100644 --- a/tools/perf/expectations.config +++ b/tools/perf/expectations.config
@@ -532,9 +532,6 @@ crbug.com/v8/11180 [ android ] system_health.pcscan/browse:news:cnn:2021 [ Skip ] crbug.com/v8/11180 [ desktop ] system_health.pcscan/browse:news:cnn:2021 [ Skip ] -# Benchmark: system_health.webview_startup -crbug.com/1271869 [ android-webview ] system_health.webview_startup/load:chrome:blank [ Skip ] - # Benchmark: tab_switching.typical_25 crbug.com/747026 [ mac ] tab_switching.typical_25/multitab:misc:typical24 [ Skip ] crbug.com/883731 [ win ] tab_switching.typical_25/multitab:misc:typical24 [ Skip ]
diff --git a/ui/android/BUILD.gn b/ui/android/BUILD.gn index c670725..80336627 100644 --- a/ui/android/BUILD.gn +++ b/ui/android/BUILD.gn
@@ -403,8 +403,10 @@ "junit/src/org/chromium/ui/shadows/ShadowAnimatedStateListDrawable.java", "junit/src/org/chromium/ui/shadows/ShadowAppCompatResources.java", "junit/src/org/chromium/ui/shadows/ShadowAsyncLayoutInflater.java", + "junit/src/org/chromium/ui/shadows/ShadowColorUtils.java", ] deps = [ + ":ui_java", "//base:base_java", "//third_party/android_deps:robolectric_all_java", "//third_party/androidx:androidx_annotation_annotation_java",
diff --git a/ui/android/junit/src/org/chromium/ui/shadows/ShadowColorUtils.java b/ui/android/junit/src/org/chromium/ui/shadows/ShadowColorUtils.java new file mode 100644 index 0000000..475eef0 --- /dev/null +++ b/ui/android/junit/src/org/chromium/ui/shadows/ShadowColorUtils.java
@@ -0,0 +1,23 @@ +// Copyright 2021 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.ui.shadows; + +import android.content.Context; + +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; + +import org.chromium.ui.util.ColorUtils; + +/** Shadow class for {@link org.chromium.ui.util.ColorUtils} */ +@Implements(ColorUtils.class) +public class ShadowColorUtils { + public static boolean sInNightMode; + + @Implementation + public static boolean inNightMode(Context context) { + return sInNightMode; + } +}
diff --git a/ui/aura/demo/demo_main.cc b/ui/aura/demo/demo_main.cc index 93dee9e..4b2d29b 100644 --- a/ui/aura/demo/demo_main.cc +++ b/ui/aura/demo/demo_main.cc
@@ -46,6 +46,10 @@ #include "ui/display/win/dpi.h" #endif +#if defined(USE_OZONE) +#include "ui/ozone/public/ozone_platform.h" +#endif + namespace { // Trivial WindowDelegate implementation that draws a colored background. @@ -159,6 +163,12 @@ } int DemoMain() { +#if defined(USE_OZONE) + ui::OzonePlatform::InitParams params; + params.single_process = true; + ui::OzonePlatform::InitializeForUI(params); + ui::OzonePlatform::InitializeForGPU(params); +#endif gl::init::InitializeGLOneOff(); #if defined(OS_WIN)
diff --git a/ui/base/ime/ash/ime_engine_handler_interface.h b/ui/base/ime/ash/ime_engine_handler_interface.h index d808769b..320b081b 100644 --- a/ui/base/ime/ash/ime_engine_handler_interface.h +++ b/ui/base/ime/ash/ime_engine_handler_interface.h
@@ -17,6 +17,7 @@ #include "ui/base/ime/text_input_client.h" #include "ui/base/ime/text_input_mode.h" #include "ui/base/ime/text_input_type.h" +#include "ui/events/event_constants.h" namespace gfx { class Rect; @@ -66,6 +67,9 @@ // Called when an input field gains focus. virtual void FocusIn(const InputContext& input_context) = 0; + // Called on touch inside an input field which already has focus. + virtual void OnTouch(ui::EventPointerType pointerType) = 0; + // Called when the currently focused input field loses the focus. virtual void FocusOut() = 0;
diff --git a/ui/base/ime/ash/input_method_ash.cc b/ui/base/ime/ash/input_method_ash.cc index 4bb368cc..01ddb7a 100644 --- a/ui/base/ime/ash/input_method_ash.cc +++ b/ui/base/ime/ash/input_method_ash.cc
@@ -310,6 +310,17 @@ } } +void InputMethodAsh::OnTouch(ui::EventPointerType pointerType) { + TextInputClient* client = GetTextInputClient(); + if (!client || !IsTextInputClientFocused(client)) { + return; + } + ui::IMEEngineHandlerInterface* engine = GetEngine(); + if (engine) { + engine->OnTouch(pointerType); + } +} + void InputMethodAsh::OnBlur() { if (ui::IMEBridge::Get() && ui::IMEBridge::Get()->GetInputContextHandler() == this)
diff --git a/ui/base/ime/ash/input_method_ash.h b/ui/base/ime/ash/input_method_ash.h index 40cf6b62..fad27b3 100644 --- a/ui/base/ime/ash/input_method_ash.h +++ b/ui/base/ime/ash/input_method_ash.h
@@ -46,6 +46,7 @@ // Overridden from InputMethodBase: void OnFocus() override; void OnBlur() override; + void OnTouch(ui::EventPointerType pointerType) override; void OnWillChangeFocusedClient(TextInputClient* focused_before, TextInputClient* focused) override; void OnDidChangeFocusedClient(TextInputClient* focused_before,
diff --git a/ui/base/ime/ash/mock_ime_engine_handler.cc b/ui/base/ime/ash/mock_ime_engine_handler.cc index 446fab2..5325a4bd 100644 --- a/ui/base/ime/ash/mock_ime_engine_handler.cc +++ b/ui/base/ime/ash/mock_ime_engine_handler.cc
@@ -29,6 +29,8 @@ ++focus_in_call_count_; } +void MockIMEEngineHandler::OnTouch(ui::EventPointerType pointerType) {} + void MockIMEEngineHandler::FocusOut() { if (last_text_input_context_.type != ui::TEXT_INPUT_TYPE_NONE) ++focus_out_call_count_;
diff --git a/ui/base/ime/ash/mock_ime_engine_handler.h b/ui/base/ime/ash/mock_ime_engine_handler.h index 26c5edc..2d6ccc7c 100644 --- a/ui/base/ime/ash/mock_ime_engine_handler.h +++ b/ui/base/ime/ash/mock_ime_engine_handler.h
@@ -23,6 +23,7 @@ // ui::IMEEngineHandlerInterface: void FocusIn(const InputContext& input_context) override; + void OnTouch(ui::EventPointerType pointerType) override; void FocusOut() override; void Enable(const std::string& component_id) override; void Disable() override;
diff --git a/ui/base/ime/dummy_input_method.cc b/ui/base/ime/dummy_input_method.cc index 08300ee..2ff39bb7 100644 --- a/ui/base/ime/dummy_input_method.cc +++ b/ui/base/ime/dummy_input_method.cc
@@ -20,6 +20,8 @@ void DummyInputMethod::OnFocus() { } +void DummyInputMethod::OnTouch(ui::EventPointerType pointerType) {} + void DummyInputMethod::OnBlur() { }
diff --git a/ui/base/ime/dummy_input_method.h b/ui/base/ime/dummy_input_method.h index 1bec574..89f00ed5 100644 --- a/ui/base/ime/dummy_input_method.h +++ b/ui/base/ime/dummy_input_method.h
@@ -24,6 +24,7 @@ // InputMethod overrides: void SetDelegate(internal::InputMethodDelegate* delegate) override; void OnFocus() override; + void OnTouch(ui::EventPointerType pointerType) override; void OnBlur() override; #if defined(OS_WIN)
diff --git a/ui/base/ime/input_method.h b/ui/base/ime/input_method.h index 573daa9..d763c91 100644 --- a/ui/base/ime/input_method.h +++ b/ui/base/ime/input_method.h
@@ -65,6 +65,9 @@ // Called when the top-level system window gets keyboard focus. virtual void OnFocus() = 0; + // Called when there is a touch within a text field that has focus. + virtual void OnTouch(ui::EventPointerType pointerType) = 0; + // Called when the top-level system window loses keyboard focus. virtual void OnBlur() = 0;
diff --git a/ui/base/ime/input_method_base.cc b/ui/base/ime/input_method_base.cc index 1f776a55..332b6598 100644 --- a/ui/base/ime/input_method_base.cc +++ b/ui/base/ime/input_method_base.cc
@@ -42,6 +42,8 @@ void InputMethodBase::OnBlur() { } +void InputMethodBase::OnTouch(ui::EventPointerType pointerType) {} + #if defined(OS_WIN) bool InputMethodBase::OnUntranslatedIMEMessage( const CHROME_MSG event,
diff --git a/ui/base/ime/input_method_base.h b/ui/base/ime/input_method_base.h index 38ec52a1..c74ec52 100644 --- a/ui/base/ime/input_method_base.h +++ b/ui/base/ime/input_method_base.h
@@ -43,6 +43,7 @@ // Overriden from InputMethod. void SetDelegate(internal::InputMethodDelegate* delegate) override; void OnFocus() override; + void OnTouch(ui::EventPointerType pointerType) override; void OnBlur() override; #if defined(OS_WIN)
diff --git a/ui/base/ime/mock_input_method.cc b/ui/base/ime/mock_input_method.cc index bdf06b1..89314f9 100644 --- a/ui/base/ime/mock_input_method.cc +++ b/ui/base/ime/mock_input_method.cc
@@ -62,6 +62,8 @@ observer.OnFocus(); } +void MockInputMethod::OnTouch(ui::EventPointerType pointerType) {} + void MockInputMethod::OnBlur() { for (InputMethodObserver& observer : observer_list_) observer.OnBlur();
diff --git a/ui/base/ime/mock_input_method.h b/ui/base/ime/mock_input_method.h index dce13eb..1f5fa3b 100644 --- a/ui/base/ime/mock_input_method.h +++ b/ui/base/ime/mock_input_method.h
@@ -36,6 +36,7 @@ void SetDelegate(internal::InputMethodDelegate* delegate) override; void OnFocus() override; void OnBlur() override; + void OnTouch(ui::EventPointerType pointerType) override; #if defined(OS_WIN) bool OnUntranslatedIMEMessage(const CHROME_MSG event,
diff --git a/ui/file_manager/file_manager/BUILD.gn b/ui/file_manager/file_manager/BUILD.gn index 86035213..de02b9f 100644 --- a/ui/file_manager/file_manager/BUILD.gn +++ b/ui/file_manager/file_manager/BUILD.gn
@@ -76,8 +76,6 @@ "foreground/images/files/ui/2x/search.png", "foreground/images/files/ui/2x/service_drive.png", "foreground/images/files/ui/arrow_right.svg", - "foreground/images/files/ui/arrow_right_white.png", - "foreground/images/files/ui/2x/arrow_right_white.png", "foreground/images/files/ui/back.svg", "foreground/images/files/ui/state_banner_icon.svg", "foreground/images/files/ui/warning_banner_icon.svg",
diff --git a/ui/file_manager/file_manager/foreground/css/file_manager.css b/ui/file_manager/file_manager/foreground/css/file_manager.css index 31545b3..a4f5517 100644 --- a/ui/file_manager/file_manager/foreground/css/file_manager.css +++ b/ui/file_manager/file_manager/foreground/css/file_manager.css
@@ -663,8 +663,7 @@ .dialog-header.files-ng cr-button > .icon, .dialog-header.files-ng button > .icon, .dialog-header.files-ng #search-box .clear, -.dialog-header.files-ng #read-only-icon, -.dialog-header.files-ng .breadcrumbs .separator { +.dialog-header.files-ng #read-only-icon { -webkit-mask-position: center; -webkit-mask-repeat: no-repeat; background-color: currentColor; @@ -1333,92 +1332,6 @@ display: none; } -.breadcrumbs button > paper-ripple { - color: black; -} - -.breadcrumbs > [collapsed]::before { - content: '...'; -} - -.breadcrumbs > [collapsed] .name { - display: none; -} - -.breadcrumbs > [collapsed] { - box-sizing: content-box !important; - width: 1em; -} - -/* A single directory name in the list of path breadcrumbs. */ -.breadcrumbs .breadcrumb-path { - box-sizing: border-box; - cursor: pointer; - flex: none; - font-size: 14px; - font-weight: 500; - margin: 0; - min-width: 0; - padding: 0 9px; - text-transform: none; - white-space: nowrap; -} - -.breadcrumbs .breadcrumb-path:first-child { - /* margin-inline-start isn't proper - because folder names should be ltr even in RTL languages. */ - margin-inline-start: 8px; -} - -html[dir='rtl'] .breadcrumbs .breadcrumb-path:first-child { - margin-inline-end: 8px; - margin-inline-start: 0; -} - -.breadcrumbs .breadcrumb-path:active { - color: inherit; -} - -.breadcrumbs .breadcrumb-path > .name { - overflow: hidden; - position: relative; - text-align: initial; - text-overflow: ellipsis; - z-index: 1; -} - -/* The final breadcrumb, representing the current directory. */ -.breadcrumbs .breadcrumb-path.breadcrumb-last { - cursor: default; -} - -.dialog-header.files-ng .breadcrumbs .breadcrumb-path { - --text-color: currentColor; -} - -.dialog-header.files-ng .breadcrumbs .breadcrumb-path.breadcrumb-last { - color: var(--google-grey-900); - --text-color: currentColor; -} - -/* The > arrow between breadcrumbs. */ -.breadcrumbs .separator { - background: -webkit-image-set( - url(../images/files/ui/arrow_right_white.png) 1x, - url(../images/files/ui/2x/arrow_right_white.png) 2x) center no-repeat; - flex: none; - height: 16px; - width: 8px; -} - -.dialog-header.files-ng .breadcrumbs .separator { - -webkit-mask-image: url(../images/files/ui/arrow_right.svg); -} - -html[dir='rtl'] .breadcrumbs .separator { - transform: scaleX(-1); -} - /* The toolbar indicator that means the current directory is read only. */ #read-only-indicator { align-items: center;
diff --git a/ui/file_manager/file_manager/foreground/images/files/ui/2x/arrow_right_white.png b/ui/file_manager/file_manager/foreground/images/files/ui/2x/arrow_right_white.png deleted file mode 100644 index b45977f..0000000 --- a/ui/file_manager/file_manager/foreground/images/files/ui/2x/arrow_right_white.png +++ /dev/null Binary files differ
diff --git a/ui/file_manager/file_manager/foreground/images/files/ui/arrow_right_white.png b/ui/file_manager/file_manager/foreground/images/files/ui/arrow_right_white.png deleted file mode 100644 index cff83f12..0000000 --- a/ui/file_manager/file_manager/foreground/images/files/ui/arrow_right_white.png +++ /dev/null Binary files differ
diff --git a/ui/file_manager/file_manager/foreground/js/actions_model.js b/ui/file_manager/file_manager/foreground/js/actions_model.js index 8cfd658..6ee0e64 100644 --- a/ui/file_manager/file_manager/foreground/js/actions_model.js +++ b/ui/file_manager/file_manager/foreground/js/actions_model.js
@@ -199,13 +199,6 @@ * @const */ this.onExecute_ = onExecute; - - /** - * @private {boolean} - * @const - */ - this.containsOnlyHosted_ = metadataModel.getCache(entries, ['hosted']) - .every(metadata => metadata.hosted); } /** @@ -254,10 +247,9 @@ return; } currentEntry = entries.shift(); - // Skip hosted files if we cannot pin them. - if (this.volumeManager_.getDriveConnectionState().canPinHostedFiles || - !this.metadataModel_.getCache([currentEntry], ['hosted'])[0] - .hosted) { + // Skip files we cannot pin. + if (this.metadataModel_.getCache([currentEntry], ['canPin'])[0] + .canPin) { chrome.fileManagerPrivate.pinDriveFile( currentEntry, this.value_, steps.entryPinned); } else { @@ -317,8 +309,8 @@ * @override */ canExecute() { - return this.volumeManager_.getDriveConnectionState().canPinHostedFiles || - !this.containsOnlyHosted_; + return this.metadataModel_.getCache(this.entries_, ['canPin']) + .some(metadata => metadata.canPin); } /**
diff --git a/ui/file_manager/file_manager/foreground/js/actions_model_unittest.m.js b/ui/file_manager/file_manager/foreground/js/actions_model_unittest.m.js index cefaacf..bb3fcd9 100644 --- a/ui/file_manager/file_manager/foreground/js/actions_model_unittest.m.js +++ b/ui/file_manager/file_manager/foreground/js/actions_model_unittest.m.js
@@ -249,6 +249,7 @@ const metadataModel = new MockMetadataModel({ hosted: false, pinned: false, + canPin: true, }); let model = new ActionsModel( @@ -355,8 +356,8 @@ driveFileSystem.entries['/test.txt'] = testFile; const metadataModel = new MockMetadataModel({}); - metadataModel.set(testDocument, {hosted: true, pinned: false}); - metadataModel.set(testFile, {hosted: false, pinned: false}); + metadataModel.set(testDocument, {hosted: true, pinned: false, canPin: true}); + metadataModel.set(testFile, {hosted: false, pinned: false, canPin: true}); volumeManager.driveConnectionState = { type: chrome.fileManagerPrivate.DriveConnectionStateType.ONLINE, hasCellularNetworkAccess: false, @@ -454,18 +455,18 @@ } /** - * Tests that the correct actions are available for a Google Drive hosted file - * when the user does not have the required extension installed. + * Tests that the correct actions are available for a Drive file that cannot be + * pinned. */ -export function testDriveHostedFileEntryWithoutExtension(callback) { +export function testUnpinnableDriveHostedFileEntry(callback) { const testDocument = MockFileEntry.create(driveFileSystem, '/test.gdoc'); const testFile = MockFileEntry.create(driveFileSystem, '/test.txt'); driveFileSystem.entries['/test.gdoc'] = testDocument; driveFileSystem.entries['/test.txt'] = testFile; const metadataModel = new MockMetadataModel({}); - metadataModel.set(testDocument, {hosted: true, pinned: false}); - metadataModel.set(testFile, {hosted: false, pinned: false}); + metadataModel.set(testDocument, {hosted: true, pinned: false, canPin: false}); + metadataModel.set(testFile, {hosted: false, pinned: false, canPin: true}); volumeManager.driveConnectionState = { type: chrome.fileManagerPrivate.DriveConnectionStateType.ONLINE, hasCellularNetworkAccess: false, @@ -610,6 +611,7 @@ const metadataModel = new MockMetadataModel({ canShare: true, + canPin: true, }); const model = new ActionsModel( @@ -664,6 +666,7 @@ const metadataModel = new MockMetadataModel({ hosted: false, pinned: false, + canPin: true, }); const model = new ActionsModel(
diff --git a/ui/file_manager/file_manager/foreground/js/constants.js b/ui/file_manager/file_manager/foreground/js/constants.js index 11d1956..76539cd 100644 --- a/ui/file_manager/file_manager/foreground/js/constants.js +++ b/ui/file_manager/file_manager/foreground/js/constants.js
@@ -11,7 +11,11 @@ /** * @const {!Array<string>} */ -constants.ACTIONS_MODEL_METADATA_PREFETCH_PROPERTY_NAMES = ['hosted', 'pinned']; +constants.ACTIONS_MODEL_METADATA_PREFETCH_PROPERTY_NAMES = [ + 'canPin', + 'hosted', + 'pinned', +]; /** * The list of executable file extensions. @@ -37,6 +41,7 @@ 'availableOffline', 'contentMimeType', 'hosted', + 'canPin', ]; /** @@ -62,6 +67,7 @@ 'canRename', 'canAddChildren', 'canShare', + 'canPin', 'isMachineRoot', 'isExternalMedia', 'isArbitrarySyncFolder',
diff --git a/ui/file_manager/file_manager/foreground/js/metadata/external_metadata_provider.js b/ui/file_manager/file_manager/foreground/js/metadata/external_metadata_provider.js index 5ff673b..e292dc5 100644 --- a/ui/file_manager/file_manager/foreground/js/metadata/external_metadata_provider.js +++ b/ui/file_manager/file_manager/foreground/js/metadata/external_metadata_provider.js
@@ -136,6 +136,9 @@ if (prop.canShare !== undefined || nameMap['canShare']) { item.canShare = prop.canShare; } + if (prop.canPin !== undefined || nameMap['canPin']) { + item.canPin = prop.canPin; + } if (prop.isMachineRoot !== undefined || nameMap['isMachineRoot']) { item.isMachineRoot = prop.isMachineRoot; } @@ -179,6 +182,7 @@ 'canRename', 'canAddChildren', 'canShare', + 'canPin', 'isMachineRoot', 'isExternalMedia', 'isArbitrarySyncFolder',
diff --git a/ui/file_manager/file_manager/foreground/js/ui/location_line.js b/ui/file_manager/file_manager/foreground/js/ui/location_line.js index 7913214..64d9065 100644 --- a/ui/file_manager/file_manager/foreground/js/ui/location_line.js +++ b/ui/file_manager/file_manager/foreground/js/ui/location_line.js
@@ -142,23 +142,4 @@ this.navigateToIndex_(Number(signal)); } } - - /** - * Execute an element. - * @param {number} index The index of clicked path component. - * @param {!Event} event The MouseEvent object. - * @private - */ - onClick_(index, event) { - let button = event.target; - - // Remove 'focused' state from the clicked button. - while (button && !button.classList.contains('breadcrumb-path')) { - button = button.parentElement; - } - if (button) { - button.blur(); - } - this.navigateToIndex_(index); - } }
diff --git a/ui/views/BUILD.gn b/ui/views/BUILD.gn index 2f6b0e97..c59f89e 100644 --- a/ui/views/BUILD.gn +++ b/ui/views/BUILD.gn
@@ -1386,6 +1386,7 @@ "//base", "//base/test:test_support", "//build:chromeos_buildflags", + "//build:os_buildflags", "//mojo/core/embedder", "//skia", "//testing/gtest",
diff --git a/ui/views/widget/desktop_aura/x11_topmost_window_finder_interactive_uitest.cc b/ui/views/widget/desktop_aura/x11_topmost_window_finder_interactive_uitest.cc index 75ec6d2..34fd28d 100644 --- a/ui/views/widget/desktop_aura/x11_topmost_window_finder_interactive_uitest.cc +++ b/ui/views/widget/desktop_aura/x11_topmost_window_finder_interactive_uitest.cc
@@ -11,10 +11,11 @@ #include <vector> #include "base/containers/contains.h" +#include "base/test/task_environment.h" #include "build/build_config.h" +#include "testing/gtest/include/gtest/gtest.h" #include "third_party/skia/include/core/SkRect.h" -#include "ui/aura/window.h" -#include "ui/aura/window_tree_host.h" +#include "third_party/skia/include/core/SkRegion.h" #include "ui/base/x/test/x11_property_change_waiter.h" #include "ui/base/x/x11_util.h" #include "ui/gfx/native_widget_types.h" @@ -25,16 +26,93 @@ #include "ui/gfx/x/x11_path.h" #include "ui/gfx/x/xproto.h" #include "ui/gfx/x/xproto_util.h" -#include "ui/views/test/widget_test.h" -#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h" -#include "ui/views/widget/desktop_aura/desktop_window_tree_host_linux.h" -#include "ui/views/widget/widget.h" #include "ui/ozone/public/ozone_platform.h" +#include "ui/platform_window/platform_window_init_properties.h" +#include "ui/platform_window/x11/x11_window.h" +#include "ui/platform_window/x11/x11_window_manager.h" namespace views { namespace { +// Waits until the |x11_window| is mapped and becomes viewable. +class X11VisibilityWaiter : public x11::EventObserver { + public: + X11VisibilityWaiter() = default; + X11VisibilityWaiter(const X11VisibilityWaiter&) = delete; + X11VisibilityWaiter& operator=(const X11VisibilityWaiter&) = delete; + ~X11VisibilityWaiter() override = default; + + void WaitUntilWindowIsVisible(x11::Window x11_window) { + if (ui::IsWindowVisible(x11_window)) + return; + + event_selector_ = std::make_unique<x11::XScopedEventSelector>( + x11_window, + x11::EventMask::StructureNotify | x11::EventMask::SubstructureNotify); + x11_window_ = x11_window; + + x11::Connection::Get()->AddEventObserver(this); + + base::RunLoop run_loop; + quit_closure_ = run_loop.QuitClosure(); + run_loop.Run(); + DCHECK(ui::IsWindowVisible(x11_window)); + } + + private: + // x11::EventObserver: + void OnEvent(const x11::Event& event) override { + auto* map = event.As<x11::MapNotifyEvent>(); + if (map && map->window == x11_window_) { + DCHECK(!quit_closure_.is_null()); + std::move(quit_closure_).Run(); + x11::Connection::Get()->RemoveEventObserver(this); + } + } + + x11::Window x11_window_; + std::unique_ptr<x11::XScopedEventSelector> event_selector_; + // Ends the run loop. + base::OnceClosure quit_closure_; +}; + +class TestPlatformWindowDelegate : public ui::PlatformWindowDelegate { + public: + TestPlatformWindowDelegate() = default; + TestPlatformWindowDelegate(const TestPlatformWindowDelegate&) = delete; + TestPlatformWindowDelegate& operator=(const TestPlatformWindowDelegate&) = + delete; + ~TestPlatformWindowDelegate() override = default; + + ui::PlatformWindowState state() { return state_; } + + // PlatformWindowDelegate: + void OnBoundsChanged(const BoundsChange& change) override {} + void OnDamageRect(const gfx::Rect& damaged_region) override {} + void DispatchEvent(ui::Event* event) override {} + void OnCloseRequest() override {} + void OnClosed() override {} + void OnWindowStateChanged(ui::PlatformWindowState old_state, + ui::PlatformWindowState new_state) override { + state_ = new_state; + } + void OnLostCapture() override {} + void OnAcceleratedWidgetAvailable(gfx::AcceleratedWidget widget) override { + widget_ = widget; + } + void OnWillDestroyAcceleratedWidget() override {} + void OnAcceleratedWidgetDestroyed() override { + widget_ = gfx::kNullAcceleratedWidget; + } + void OnActivationChanged(bool active) override {} + void OnMouseEnter() override {} + + private: + gfx::AcceleratedWidget widget_ = gfx::kNullAcceleratedWidget; + ui::PlatformWindowState state_ = ui::PlatformWindowState::kUnknown; +}; + // Waits till |window| is minimized. class MinimizeWaiter : public ui::X11PropertyChangeWaiter { public: @@ -66,9 +144,10 @@ } // namespace -class X11TopmostWindowFinderTest : public test::DesktopWidgetTestInteractive { +class X11TopmostWindowFinderTest : public testing::Test { public: - X11TopmostWindowFinderTest() = default; + X11TopmostWindowFinderTest() + : task_env_(base::test::TaskEnvironment::MainThreadType::UI) {} X11TopmostWindowFinderTest(const X11TopmostWindowFinderTest&) = delete; X11TopmostWindowFinderTest& operator=(const X11TopmostWindowFinderTest&) = @@ -76,40 +155,46 @@ ~X11TopmostWindowFinderTest() override = default; - // DesktopWidgetTestInteractive + // testing::Test: void SetUp() override { // Run tests only for X11. - if (ui::OzonePlatform::GetPlatformNameForTest() != "x11") { - // SetUp still is required to be run. Otherwise, ViewsTestBase CHECKs in - // the dtor. - DesktopWidgetTestInteractive::SetUp(); + if (ui::OzonePlatform::GetPlatformNameForTest() != "x11") GTEST_SKIP(); - } + auto* connection = x11::Connection::Get(); // Make X11 synchronous for our display connection. This does not force the // window manager to behave synchronously. - connection()->SynchronizeForTest(true); - DesktopWidgetTestInteractive::SetUp(); + connection->SynchronizeForTest(true); + testing::Test::SetUp(); } void TearDown() override { if (!IsSkipped()) connection()->SynchronizeForTest(false); - DesktopWidgetTestInteractive::TearDown(); } - // Creates and shows a Widget with |bounds|. The caller takes ownership of - // the returned widget. - std::unique_ptr<Widget> CreateAndShowWidget(const gfx::Rect& bounds) { - std::unique_ptr<Widget> toplevel(new Widget); - Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW); - params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; - params.native_widget = new DesktopNativeWidgetAura(toplevel.get()); - params.bounds = bounds; - params.remove_standard_frame = true; - toplevel->Init(std::move(params)); - toplevel->Show(); - return toplevel; + // Creates and shows an X11Window with |bounds|. The caller takes ownership of + // the returned window. + std::unique_ptr<ui::X11Window> CreateAndShowX11Window( + ui::PlatformWindowDelegate* delegate, + const gfx::Rect& bounds) { + ui::PlatformWindowInitProperties init_params(bounds); + init_params.type = ui::PlatformWindowType::kWindow; + init_params.remove_standard_frame = true; + auto window = std::make_unique<ui::X11Window>(delegate); + window->Initialize(std::move(init_params)); + window->Show(true); + // The window must have a title. Otherwise, the X11TopmostWindowFinder + // refuses to use this window. + window->SetTitle(u"X11FinderTest"); + + // Wait until the window becomes visible so that window finder doesn't skip + // these windows (it's required to wait because mapping and searching for + // toplevel window is a subject to races). + X11VisibilityWaiter waiter; + waiter.WaitUntilWindowIsVisible( + static_cast<x11::Window>(window->GetWidget())); + return window; } // Creates and shows an X window with |bounds|. @@ -129,6 +214,12 @@ ui::SetUseOSWindowFrame(window, false); ShowAndSetXWindowBounds(window, bounds); + + // Wait until the window becomes visible so that window finder doesn't skip + // these windows (it's required to wait because mapping and searching for + // toplevel window is a subject to races). + X11VisibilityWaiter waiter; + waiter.WaitUntilWindowIsVisible(static_cast<x11::Window>(window)); return window; } @@ -157,105 +248,103 @@ // |ignore_window|. x11::Window FindTopmostXWindowWithIgnore(int screen_x, int screen_y, - aura::Window* ignore_window) { + x11::Window ignore_window) { std::set<gfx::AcceleratedWidget> ignore; - ignore.insert(ignore_window->GetHost()->GetAcceleratedWidget()); + ignore.insert(static_cast<gfx::AcceleratedWidget>(ignore_window)); ui::X11TopmostWindowFinder finder(ignore); return finder.FindWindowAt(gfx::Point(screen_x, screen_y)); } - // Returns the topmost aura::Window at the passed in screen position. Returns - // NULL if the topmost window does not have an associated aura::Window. - aura::Window* FindTopmostLocalProcessWindowAt(int screen_x, int screen_y) { + // Returns the topmost ui::X11Window at the passed in screen position. Returns + // nullptr if the topmost window does not have an associated ui::X11Window. + ui::X11Window* FindTopmostLocalProcessWindowAt(int screen_x, int screen_y) { ui::X11TopmostWindowFinder finder({}); - auto widget = static_cast<gfx::AcceleratedWidget>( - finder.FindLocalProcessWindowAt(gfx::Point(screen_x, screen_y))); - return widget != gfx::kNullAcceleratedWidget - ? DesktopWindowTreeHostPlatform::GetContentWindowForWidget( - widget) - : nullptr; + auto x11_window = + finder.FindLocalProcessWindowAt(gfx::Point(screen_x, screen_y)); + return x11_window == x11::Window::None + ? nullptr + : ui::X11WindowManager::GetInstance()->GetWindow( + static_cast<gfx::AcceleratedWidget>(x11_window)); } - // Returns the topmost aura::Window at the passed in screen position ignoring - // |ignore_window|. Returns NULL if the topmost window does not have an - // associated aura::Window. - aura::Window* FindTopmostLocalProcessWindowWithIgnore( + // Returns the topmost ui::X11Window at the passed in screen position ignoring + // |ignore_window|. Returns nullptr if the topmost window does not have an + // associated ui::X11Window. + ui::X11Window* FindTopmostLocalProcessWindowWithIgnore( int screen_x, int screen_y, - aura::Window* ignore_window) { + x11::Window ignore_window) { std::set<gfx::AcceleratedWidget> ignore; - ignore.insert(ignore_window->GetHost()->GetAcceleratedWidget()); + ignore.insert(static_cast<gfx::AcceleratedWidget>(ignore_window)); ui::X11TopmostWindowFinder finder(ignore); - auto widget = static_cast<gfx::AcceleratedWidget>( - finder.FindLocalProcessWindowAt(gfx::Point(screen_x, screen_y))); - return widget != gfx::kNullAcceleratedWidget - ? DesktopWindowTreeHostPlatform::GetContentWindowForWidget( - widget) - : nullptr; + auto x11_window = + finder.FindLocalProcessWindowAt(gfx::Point(screen_x, screen_y)); + return x11_window == x11::Window::None + ? nullptr + : ui::X11WindowManager::GetInstance()->GetWindow( + static_cast<gfx::AcceleratedWidget>(x11_window)); } + + private: + base::test::TaskEnvironment task_env_; }; TEST_F(X11TopmostWindowFinderTest, Basic) { // Avoid positioning test windows at 0x0 because window managers often have a // panel/launcher along one of the screen edges and do not allow windows to // position themselves to overlap the panel/launcher. - std::unique_ptr<Widget> widget1( - CreateAndShowWidget(gfx::Rect(100, 100, 200, 100))); - aura::Window* window1 = widget1->GetNativeWindow(); - x11::Window x11_window1 = - static_cast<x11::Window>(window1->GetHost()->GetAcceleratedWidget()); + TestPlatformWindowDelegate delegate; + auto window1 = CreateAndShowX11Window(&delegate, {100, 100, 200, 100}); + auto x11_window1 = static_cast<x11::Window>(window1->GetWidget()); x11::Window x11_window2 = CreateAndShowXWindow(gfx::Rect(200, 100, 100, 200)); - std::unique_ptr<Widget> widget3( - CreateAndShowWidget(gfx::Rect(100, 190, 200, 110))); - aura::Window* window3 = widget3->GetNativeWindow(); - x11::Window x11_window3 = - static_cast<x11::Window>(window3->GetHost()->GetAcceleratedWidget()); + TestPlatformWindowDelegate delegate2; + auto window3 = CreateAndShowX11Window(&delegate2, {100, 190, 200, 110}); + auto x11_window3 = static_cast<x11::Window>(window3->GetWidget()); connection()->DispatchAll(); EXPECT_EQ(x11_window1, FindTopmostXWindowAt(150, 150)); - EXPECT_EQ(window1, FindTopmostLocalProcessWindowAt(150, 150)); + EXPECT_EQ(window1.get(), FindTopmostLocalProcessWindowAt(150, 150)); EXPECT_EQ(x11_window2, FindTopmostXWindowAt(250, 150)); EXPECT_FALSE(FindTopmostLocalProcessWindowAt(250, 150)); EXPECT_EQ(x11_window3, FindTopmostXWindowAt(250, 250)); - EXPECT_EQ(window3, FindTopmostLocalProcessWindowAt(250, 250)); + EXPECT_EQ(window3.get(), FindTopmostLocalProcessWindowAt(250, 250)); EXPECT_EQ(x11_window3, FindTopmostXWindowAt(150, 250)); - EXPECT_EQ(window3, FindTopmostLocalProcessWindowAt(150, 250)); + EXPECT_EQ(window3.get(), FindTopmostLocalProcessWindowAt(150, 250)); EXPECT_EQ(x11_window3, FindTopmostXWindowAt(150, 195)); - EXPECT_EQ(window3, FindTopmostLocalProcessWindowAt(150, 195)); + EXPECT_EQ(window3.get(), FindTopmostLocalProcessWindowAt(150, 195)); EXPECT_NE(x11_window1, FindTopmostXWindowAt(1000, 1000)); EXPECT_NE(x11_window2, FindTopmostXWindowAt(1000, 1000)); EXPECT_NE(x11_window3, FindTopmostXWindowAt(1000, 1000)); EXPECT_FALSE(FindTopmostLocalProcessWindowAt(1000, 1000)); - EXPECT_EQ(x11_window1, FindTopmostXWindowWithIgnore(150, 150, window3)); - EXPECT_EQ(window1, - FindTopmostLocalProcessWindowWithIgnore(150, 150, window3)); - EXPECT_EQ(x11_window2, FindTopmostXWindowWithIgnore(250, 250, window3)); - EXPECT_FALSE(FindTopmostLocalProcessWindowWithIgnore(250, 250, window3)); - EXPECT_EQ(x11::Window::None, FindTopmostXWindowWithIgnore(150, 250, window3)); - EXPECT_FALSE(FindTopmostLocalProcessWindowWithIgnore(150, 250, window3)); - EXPECT_EQ(x11_window1, FindTopmostXWindowWithIgnore(150, 195, window3)); - EXPECT_EQ(window1, - FindTopmostLocalProcessWindowWithIgnore(150, 195, window3)); + EXPECT_EQ(x11_window1, FindTopmostXWindowWithIgnore(150, 150, x11_window3)); + EXPECT_EQ(window1.get(), + FindTopmostLocalProcessWindowWithIgnore(150, 150, x11_window3)); + EXPECT_EQ(x11_window2, FindTopmostXWindowWithIgnore(250, 250, x11_window3)); + EXPECT_FALSE(FindTopmostLocalProcessWindowWithIgnore(250, 250, x11_window3)); + EXPECT_EQ(x11::Window::None, + FindTopmostXWindowWithIgnore(150, 250, x11_window3)); + EXPECT_FALSE(FindTopmostLocalProcessWindowWithIgnore(150, 250, x11_window3)); + EXPECT_EQ(x11_window1, FindTopmostXWindowWithIgnore(150, 195, x11_window3)); + EXPECT_EQ(window1.get(), + FindTopmostLocalProcessWindowWithIgnore(150, 195, x11_window3)); connection()->DestroyWindow({x11_window2}); } // Test that the minimized state is properly handled. TEST_F(X11TopmostWindowFinderTest, Minimized) { - std::unique_ptr<Widget> widget1( - CreateAndShowWidget(gfx::Rect(100, 100, 100, 100))); - aura::Window* window1 = widget1->GetNativeWindow(); - x11::Window x11_window1 = - static_cast<x11::Window>(window1->GetHost()->GetAcceleratedWidget()); + TestPlatformWindowDelegate delegate; + auto window1 = CreateAndShowX11Window(&delegate, {100, 100, 100, 100}); + auto x11_window1 = static_cast<x11::Window>(window1->GetWidget()); x11::Window x11_window2 = CreateAndShowXWindow(gfx::Rect(300, 100, 100, 100)); connection()->DispatchAll(); @@ -288,14 +377,15 @@ if (!ui::IsShapeExtensionAvailable()) return; - std::unique_ptr<Widget> widget1( - CreateAndShowWidget(gfx::Rect(100, 100, 100, 100))); - x11::Window window1 = static_cast<x11::Window>( - widget1->GetNativeWindow()->GetHost()->GetAcceleratedWidget()); - auto shape1 = std::make_unique<Widget::ShapeRects>(); + TestPlatformWindowDelegate delegate; + auto x11_window1 = CreateAndShowX11Window(&delegate, {100, 100, 100, 100}); + auto window1 = static_cast<x11::Window>(x11_window1->GetWidget()); + auto shape1 = std::make_unique<std::vector<gfx::Rect>>(); shape1->emplace_back(0, 10, 10, 90); shape1->emplace_back(10, 0, 90, 100); - widget1->SetShape(std::move(shape1)); + gfx::Transform transform; + transform.Scale(1.0f, 1.0f); + x11_window1->SetShape(std::move(shape1), transform); SkRegion skregion2; skregion2.op(SkIRect::MakeXYWH(0, 10, 10, 90), SkRegion::kUnion_Op); @@ -329,14 +419,15 @@ if (!ui::IsShapeExtensionAvailable()) return; - std::unique_ptr<Widget> widget1( - CreateAndShowWidget(gfx::Rect(100, 100, 100, 100))); - x11::Window window1 = static_cast<x11::Window>( - widget1->GetNativeWindow()->GetHost()->GetAcceleratedWidget()); - auto shape1 = std::make_unique<Widget::ShapeRects>(); + TestPlatformWindowDelegate delegate; + auto x11_window1 = CreateAndShowX11Window(&delegate, {100, 100, 100, 100}); + auto window1 = static_cast<x11::Window>(x11_window1->GetWidget()); + + auto shape1 = std::make_unique<std::vector<gfx::Rect>>(); shape1->emplace_back(); - // Widget takes ownership of |shape1|. - widget1->SetShape(std::move(shape1)); + gfx::Transform transform; + transform.Scale(1.0f, 1.0f); + x11_window1->SetShape(std::move(shape1), transform); connection()->DispatchAll(); @@ -354,16 +445,18 @@ if (!ui::IsShapeExtensionAvailable()) return; - std::unique_ptr<Widget> widget1( - CreateAndShowWidget(gfx::Rect(100, 100, 100, 100))); - x11::Window window1 = static_cast<x11::Window>( - widget1->GetNativeWindow()->GetHost()->GetAcceleratedWidget()); - auto shape1 = std::make_unique<Widget::ShapeRects>(); + TestPlatformWindowDelegate delegate; + auto x11_window1 = CreateAndShowX11Window(&delegate, {100, 100, 100, 100}); + auto window1 = static_cast<x11::Window>(x11_window1->GetWidget()); + + auto shape1 = std::make_unique<std::vector<gfx::Rect>>(); shape1->emplace_back(); - widget1->SetShape(std::move(shape1)); + gfx::Transform transform; + transform.Scale(1.0f, 1.0f); + x11_window1->SetShape(std::move(shape1), transform); // Remove the shape - this is now just a normal window. - widget1->SetShape(nullptr); + x11_window1->SetShape(nullptr, transform); connection()->DispatchAll();
diff --git a/ui/views/widget/widget_interactive_uitest.cc b/ui/views/widget/widget_interactive_uitest.cc index 11b3d36..4d799de 100644 --- a/ui/views/widget/widget_interactive_uitest.cc +++ b/ui/views/widget/widget_interactive_uitest.cc
@@ -21,6 +21,7 @@ #include "base/win/windows_version.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" +#include "build/os_buildflags.h" #include "ui/base/ime/input_method.h" #include "ui/base/ime/text_input_client.h" #include "ui/base/resource/resource_bundle.h" @@ -917,9 +918,8 @@ #if defined(USE_AURA) -#if BUILDFLAG(IS_CHROMEOS_ASH) || defined(USE_OZONE) +#if BUILDFLAG(IS_CHROMEOS) // TODO(crbug.com/916272): investigate fixing and enabling on Chrome OS. -// TODO(crbug.com/1200034): investigate fixing and enabling on Ozone/Wayland. #define MAYBE_TouchSelectionQuickMenuIsNotActivated \ DISABLED_TouchSelectionQuickMenuIsNotActivated #else