diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-06-27 11:18:24 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-07-03 09:38:30 +0000 |
commit | d94af01c90575348c4e81a418257f254b6f8d225 (patch) | |
tree | 77a26669b33eaa4d46b88b07e17dacc61eba6001 /chromium | |
parent | 5d87695f37678f96492b258bbab36486c59866b4 (diff) | |
download | qtwebengine-chromium-d94af01c90575348c4e81a418257f254b6f8d225.tar.gz |
BASELINE: Update Chromium to 75.0.3770.116
Change-Id: Ifcd5227841577e8ce81a1b7a54c56caba4d85e02
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
Diffstat (limited to 'chromium')
462 files changed, 5523 insertions, 2511 deletions
diff --git a/chromium/DEPS b/chromium/DEPS index e9f86604080..c03f74c29e1 100644 --- a/chromium/DEPS +++ b/chromium/DEPS @@ -38,7 +38,7 @@ gclient_gn_args = [ vars = { - "buildspec_platforms": "win, ios, linux64, chromeos, win64, android, mac64", + "buildspec_platforms": "android", # Variable that can be used to support multiple build scenarios, like having # Chromium specific targets in a client project's GN file or sync dependencies # conditionally etc. @@ -130,11 +130,11 @@ vars = { # 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': '72c68f6af98f5dd0a2a615719a4861d91574740e', + 'skia_revision': '6b86bdee08efdbc7d6c4fa37a118e8420624cbe4', # 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': 'f7380d154b2d2c57edd03a9b3e36e3bcccf44925', + 'v8_revision': '227247d5e5a09caddbe2a967bd2449c19c91e155', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling swarming_client # and whatever else without interference from each other. @@ -142,7 +142,7 @@ vars = { # 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': '1b6a9ca29c8a192ec907fa1a48c54eb20dc524b5', + 'angle_revision': 'b98a3d1c05e20a3ffcee8617b84f82f71cd58eee', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -181,7 +181,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling NaCl # and whatever else without interference from each other. - 'nacl_revision': '6abc006f6760ec49350cd45e8bccbff4809725ac', + 'nacl_revision': 'f8d9b46365a16f3ab0ba278139575e2c271964e9', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling freetype # and whatever else without interference from each other. @@ -979,7 +979,7 @@ deps = { Var('chromium_git') + '/chromium/deps/hunspell_dictionaries.git' + '@' + '3874188bd69fe67a825d07584c74451e45063e95', 'src/third_party/icu': - Var('chromium_git') + '/chromium/deps/icu.git' + '@' + 'ae4b77dc8966796f0bd93bb6342023276749e148', + Var('chromium_git') + '/chromium/deps/icu.git' + '@' + 'e3d32ff805c917e6a8a6ed1c6e1acb1f2e83c544', 'src/third_party/icu4j': { 'packages': [ @@ -1355,7 +1355,7 @@ deps = { Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '3f6583d3fee4ab71866ade794504a20eb6f63f88', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + 'd624d80698c9ebb54b10017a2a9d1db89202d39b', + Var('webrtc_git') + '/src.git' + '@' + '159c16f3ceea1d02d08d51fc83d843019d773ec6', 'src/third_party/xdg-utils': { 'url': Var('chromium_git') + '/chromium/deps/xdg-utils.git' + '@' + 'd80274d5869b17b8c9067a1022e4416ee7ed5e0d', @@ -1396,7 +1396,7 @@ deps = { Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@218cd462af968e86baf6d5f5d6d8984f912eb17d', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@6c4854e672a1319fabf55d2017d12ba91e3ba5ad', 'condition': 'checkout_src_internal', }, diff --git a/chromium/base/BUILD.gn b/chromium/base/BUILD.gn index cc7f1a8e5cf..7bc40d84e69 100644 --- a/chromium/base/BUILD.gn +++ b/chromium/base/BUILD.gn @@ -2403,6 +2403,7 @@ test("base_unittests") { "debug/alias_unittest.cc", "debug/crash_logging_unittest.cc", "debug/debugger_unittest.cc", + "debug/gdi_debug_util_win_unittest.cc", "debug/leak_tracker_unittest.cc", "debug/proc_maps_linux_unittest.cc", "debug/stack_trace_unittest.cc", diff --git a/chromium/base/debug/gdi_debug_util_win.cc b/chromium/base/debug/gdi_debug_util_win.cc index a2bb410c9d4..5f6294f87c8 100644 --- a/chromium/base/debug/gdi_debug_util_win.cc +++ b/chromium/base/debug/gdi_debug_util_win.cc @@ -6,17 +6,309 @@ #include <algorithm> #include <cmath> +#include <TlHelp32.h> #include <psapi.h> #include <stddef.h> -#include <TlHelp32.h> +#include <windows.h> +#include <winternl.h> #include "base/debug/alias.h" #include "base/logging.h" +#include "base/optional.h" +#include "base/process/process.h" #include "base/win/scoped_handle.h" #include "base/win/win_util.h" +#include "base/win/windows_version.h" namespace { +// A partial PEB up until GdiSharedHandleTable. +// Derived from the ntdll symbols (ntdll!_PEB). +template <typename PointerType> +struct PartialWinPeb { + unsigned char InheritedAddressSpace; + unsigned char ReadImageFileExecOptions; + unsigned char BeingDebugged; + unsigned char ImageUsesLargePages : 1; + unsigned char IsProtectedProcess : 1; + unsigned char IsLegacyProcess : 1; + unsigned char IsImageDynamicallyRelocated : 1; + unsigned char SkipPatchingUser32Forwarders : 1; + unsigned char IsAppContainer : 1; + unsigned char IsProtectedProcessLight : 1; + unsigned char IsLongPathAwareProcess : 1; + PointerType Mutant; + PointerType ImageBaseAddress; + PointerType Ldr; + PointerType ProcessParamters; + PointerType SubSystemData; + PointerType ProcessHeap; + PointerType FastPebLock; + PointerType AtlThunkSListPtr; + PointerType IFEOKey; + uint32_t ProcessInJob : 1; + uint32_t ProcessInitializing : 1; + uint32_t ProcessUsingVEH : 1; + uint32_t ProcessUsingVCH : 1; + uint32_t ProcessUsingFTH : 1; + uint32_t ProcessPreviouslyThrottled : 1; + uint32_t ProcessCurrentlyThrottled : 1; + uint32_t ProcessImagesHotPatched : 1; + PointerType KernelCallbackTable; + uint32_t SystemReserved; + uint32_t AtlThunkSListPtr32; + PointerType ApiSetMap; + uint32_t TlsExpansionCounter; + PointerType TlsBitmap; + uint32_t TlsBitmapBits[2]; + PointerType ReadOnlySharedMemoryBase; + PointerType HotpatchInformation; + PointerType ReadOnlyStaticServerData; + PointerType AnsiCodePageData; + PointerType OemCodePageData; + PointerType UnicodeCaseTableData; + uint32_t NumberOfProcessors; + uint32_t NtGlobalFlag; + uint64_t CriticalSectionTimeout; + PointerType HeapSegmentReserve; + PointerType HeapSegmentCommit; + PointerType HeapDeCommitTotalFreeThreshold; + PointerType HeapDeCommitFreeBlockThreshold; + uint32_t NumberOfHeaps; + uint32_t MaximumNumberOfHeaps; + PointerType ProcessHeaps; + PointerType GdiSharedHandleTable; +}; + +// Found from +// https://stackoverflow.com/questions/13905661/how-to-get-list-of-gdi-handles. +enum GdiHandleType : USHORT { + kDC = 1, + kRegion = 4, + kBitmap = 5, + kPalette = 8, + kFont = 10, + kBrush = 16, + kPen = 48, +}; + +// Adapted from GDICELL. +template <typename PointerType> +struct GdiTableEntry { + PointerType pKernelAddress; + USHORT wProcessId; + USHORT wCount; + USHORT wUpper; + GdiHandleType wType; + PointerType pUserAddress; +}; + +// Types and names used for regular processes. +struct RegularProcessTypes { + using QueryInformationProcessFunc = decltype(NtQueryInformationProcess); + static const char* query_information_process_name; + // PROCESS_BASIC_INFORMATION + struct ProcessBasicInformation { + PVOID Reserved1; + PVOID PebBaseAddress; + PVOID Reserved2[2]; + ULONG_PTR UniqueProcessId; + PVOID Reserved3; + }; + + using ReadVirtualMemoryFunc = NTSTATUS NTAPI(IN HANDLE ProcessHandle, + IN PVOID BaseAddress, + OUT PVOID Buffer, + IN SIZE_T Size, + OUT PSIZE_T NumberOfBytesRead); + static const char* read_virtual_memory_func_name; + using NativePointerType = PVOID; +}; + +// static +const char* RegularProcessTypes::query_information_process_name = + "NtQueryInformationProcess"; + +// static +const char* RegularProcessTypes::read_virtual_memory_func_name = + "NtReadVirtualMemory"; + +// Types and names used for WOW based processes. +struct WowProcessTypes { + // http://crbug.com/972185: Clang doesn't handle PVOID64 correctly, so we use + // uint64_t as a substitute. + + // NtWow64QueryInformationProcess64 and NtQueryInformationProcess share the + // same signature. + using QueryInformationProcessFunc = decltype(NtQueryInformationProcess); + static const char* query_information_process_name; + // PROCESS_BASIC_INFORMATION_WOW64 + struct ProcessBasicInformation { + PVOID Reserved1[2]; + uint64_t PebBaseAddress; + PVOID Reserved2[4]; + ULONG_PTR UniqueProcessId[2]; + PVOID Reserved3[2]; + }; + + using ReadVirtualMemoryFunc = NTSTATUS NTAPI(IN HANDLE ProcessHandle, + IN uint64_t BaseAddress, + OUT PVOID Buffer, + IN ULONG64 Size, + OUT PULONG64 NumberOfBytesRead); + static const char* read_virtual_memory_func_name; + using NativePointerType = uint64_t; +}; + +// static +const char* WowProcessTypes::query_information_process_name = + "NtWow64QueryInformationProcess64"; + +// static +const char* WowProcessTypes::read_virtual_memory_func_name = + "NtWow64ReadVirtualMemory64"; + +// To prevent from having to write a regular and WOW codepaths that do the same +// thing with different structures and functions, GetGdiTableEntries is +// templated to expect either RegularProcessTypes or WowProcessTypes. +template <typename ProcessType> +std::vector<GdiTableEntry<typename ProcessType::NativePointerType>> +GetGdiTableEntries(const base::Process& process) { + using GdiTableEntryVector = + std::vector<GdiTableEntry<typename ProcessType::NativePointerType>>; + HMODULE ntdll = GetModuleHandle(L"ntdll.dll"); + if (!ntdll) + return GdiTableEntryVector(); + + static auto query_information_process_func = + reinterpret_cast<typename ProcessType::QueryInformationProcessFunc*>( + GetProcAddress(ntdll, ProcessType::query_information_process_name)); + if (!query_information_process_func) { + LOG(ERROR) << ProcessType::query_information_process_name << " Missing"; + return GdiTableEntryVector(); + } + + typename ProcessType::ProcessBasicInformation basic_info; + NTSTATUS result = + query_information_process_func(process.Handle(), ProcessBasicInformation, + &basic_info, sizeof(basic_info), nullptr); + if (result != 0) { + LOG(ERROR) << ProcessType::query_information_process_name << " Failed " + << std::hex << result; + return GdiTableEntryVector(); + } + + static auto read_virtual_mem_func = + reinterpret_cast<typename ProcessType::ReadVirtualMemoryFunc*>( + GetProcAddress(ntdll, ProcessType::read_virtual_memory_func_name)); + if (!read_virtual_mem_func) { + LOG(ERROR) << ProcessType::read_virtual_memory_func_name << " Missing"; + return GdiTableEntryVector(); + } + + PartialWinPeb<typename ProcessType::NativePointerType> peb; + result = read_virtual_mem_func(process.Handle(), basic_info.PebBaseAddress, + &peb, sizeof(peb), nullptr); + if (result != 0) { + LOG(ERROR) << ProcessType::read_virtual_memory_func_name << " PEB Failed " + << std::hex << result; + return GdiTableEntryVector(); + } + + // Estimated size derived from address space allocation of the table: + // Windows 10 + // 32-bit Size: 1052672 bytes + // 64-bit Size: 1576960 bytes + // sizeof(GdiTableEntry) + // 32-bit: 16 bytes + // 64-bit: 24 bytes + // Entry Count + // 32-bit: 65792 + // 64-bit: 65706ish + // So we'll take a look at 65536 entries since that's the maximum handle count. + constexpr int kGdiTableEntryCount = 65536; + GdiTableEntryVector entries; + entries.resize(kGdiTableEntryCount); + result = read_virtual_mem_func( + process.Handle(), peb.GdiSharedHandleTable, &entries[0], + sizeof(typename GdiTableEntryVector::value_type) * entries.size(), + nullptr); + if (result != 0) { + LOG(ERROR) << ProcessType::read_virtual_memory_func_name + << " GDI Handle Table Failed " << std::hex << result; + return GdiTableEntryVector(); + } + + return entries; +} + +// Iterates through |gdi_table| and finds handles that belong to |pid|, +// incrementing the appropriate fields in |base::debug::GdiHandleCounts|. +template <typename PointerType> +base::debug::GdiHandleCounts CountHandleTypesFromTable( + DWORD pid, + const std::vector<GdiTableEntry<PointerType>>& gdi_table) { + base::debug::GdiHandleCounts counts{}; + for (const auto& entry : gdi_table) { + if (entry.wProcessId != pid) + continue; + + switch (entry.wType & 0x7F) { + case GdiHandleType::kDC: + ++counts.dcs; + break; + case GdiHandleType::kRegion: + ++counts.regions; + break; + case GdiHandleType::kBitmap: + ++counts.bitmaps; + break; + case GdiHandleType::kPalette: + ++counts.palettes; + break; + case GdiHandleType::kFont: + ++counts.fonts; + break; + case GdiHandleType::kBrush: + ++counts.brushes; + break; + case GdiHandleType::kPen: + ++counts.pens; + break; + default: + ++counts.unknown; + break; + } + } + counts.total_tracked = counts.dcs + counts.regions + counts.bitmaps + + counts.palettes + counts.fonts + counts.brushes + + counts.pens + counts.unknown; + return counts; +} + +template <typename ProcessType> +base::Optional<base::debug::GdiHandleCounts> CollectGdiHandleCountsImpl( + DWORD pid) { + base::Process process = base::Process::OpenWithExtraPrivileges(pid); + if (!process.IsValid()) + return base::nullopt; + + std::vector<GdiTableEntry<typename ProcessType::NativePointerType>> + gdi_entries = GetGdiTableEntries<ProcessType>(process); + return CountHandleTypesFromTable(pid, gdi_entries); +} + +// Returns the GDI Handle counts from the GDI Shared handle table. Empty on +// failure. +base::Optional<base::debug::GdiHandleCounts> CollectGdiHandleCounts(DWORD pid) { + if (base::win::OSInfo::GetInstance()->wow64_status() == + base::win::OSInfo::WOW64_ENABLED) { + return CollectGdiHandleCountsImpl<WowProcessTypes>(pid); + } + + return CollectGdiHandleCountsImpl<RegularProcessTypes>(pid); +} + constexpr size_t kLotsOfMemory = 1500 * 1024 * 1024; // 1.5GB HANDLE NOINLINE GetToolhelpSnapshot() { @@ -163,6 +455,32 @@ void CollectGDIUsageAndDie(BITMAPINFOHEADER* header, HANDLE shared_section) { base::debug::Alias(&num_gdi_handles); base::debug::Alias(&num_user_handles); + base::Optional<GdiHandleCounts> optional_handle_counts = + CollectGdiHandleCounts(GetCurrentProcessId()); + bool handle_counts_set = optional_handle_counts.has_value(); + GdiHandleCounts handle_counts = + optional_handle_counts.value_or(GdiHandleCounts()); + int tracked_dcs = handle_counts.dcs; + int tracked_regions = handle_counts.regions; + int tracked_bitmaps = handle_counts.bitmaps; + int tracked_palettes = handle_counts.palettes; + int tracked_fonts = handle_counts.fonts; + int tracked_brushes = handle_counts.brushes; + int tracked_pens = handle_counts.pens; + int tracked_unknown_handles = handle_counts.unknown; + int tracked_total = handle_counts.total_tracked; + + base::debug::Alias(&handle_counts_set); + base::debug::Alias(&tracked_dcs); + base::debug::Alias(&tracked_regions); + base::debug::Alias(&tracked_bitmaps); + base::debug::Alias(&tracked_palettes); + base::debug::Alias(&tracked_fonts); + base::debug::Alias(&tracked_brushes); + base::debug::Alias(&tracked_pens); + base::debug::Alias(&tracked_unknown_handles); + base::debug::Alias(&tracked_total); + CrashIfExcessiveHandles(num_gdi_handles); PROCESS_MEMORY_COUNTERS_EX pmc; @@ -180,5 +498,12 @@ void CollectGDIUsageAndDie(BITMAPINFOHEADER* header, HANDLE shared_section) { CollectChildGDIUsageAndDie(GetCurrentProcessId()); } +GdiHandleCounts GetGDIHandleCountsInCurrentProcessForTesting() { + base::Optional<GdiHandleCounts> handle_counts = + CollectGdiHandleCounts(GetCurrentProcessId()); + DCHECK(handle_counts.has_value()); + return handle_counts.value_or(GdiHandleCounts()); +} + } // namespace debug } // namespace base diff --git a/chromium/base/debug/gdi_debug_util_win.h b/chromium/base/debug/gdi_debug_util_win.h index 3383a4d522d..a72569570aa 100644 --- a/chromium/base/debug/gdi_debug_util_win.h +++ b/chromium/base/debug/gdi_debug_util_win.h @@ -12,13 +12,27 @@ namespace base { namespace debug { +struct BASE_EXPORT GdiHandleCounts { + int dcs = 0; + int regions = 0; + int bitmaps = 0; + int palettes = 0; + int fonts = 0; + int brushes = 0; + int pens = 0; + int unknown = 0; + int total_tracked = 0; +}; + // Crashes the process, using base::debug::Alias to leave valuable debugging // information in the crash dump. Pass values for |header| and |shared_section| // in the event of a bitmap allocation failure, to gather information about // those as well. -void BASE_EXPORT CollectGDIUsageAndDie(BITMAPINFOHEADER* header = nullptr, +BASE_EXPORT void CollectGDIUsageAndDie(BITMAPINFOHEADER* header = nullptr, HANDLE shared_section = nullptr); +BASE_EXPORT GdiHandleCounts GetGDIHandleCountsInCurrentProcessForTesting(); + } // namespace debug } // namespace base diff --git a/chromium/base/debug/gdi_debug_util_win_unittest.cc b/chromium/base/debug/gdi_debug_util_win_unittest.cc new file mode 100644 index 00000000000..c060768731d --- /dev/null +++ b/chromium/base/debug/gdi_debug_util_win_unittest.cc @@ -0,0 +1,28 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <windows.h> + +#include "base/debug/gdi_debug_util_win.h" +#include "base/win/scoped_hdc.h" +#include "testing/gtest/include/gtest/gtest.h" + +// GDI handles can occasionally come out of nowhere on the shared table, so +// when writing the tests below, make sure you do differential snapshots to +// count handles. + +TEST(GdiDebugUtilWin, GdiHandleCountsCreateDC) { + base::debug::GdiHandleCounts handle_counts_start = + base::debug::GetGDIHandleCountsInCurrentProcessForTesting(); + base::win::ScopedGetDC dc(nullptr); + ASSERT_TRUE(static_cast<HDC>(dc)); + base::debug::GdiHandleCounts handle_counts_now = + base::debug::GetGDIHandleCountsInCurrentProcessForTesting(); + EXPECT_EQ(1, handle_counts_now.dcs - handle_counts_start.dcs); + EXPECT_EQ( + 1, handle_counts_now.total_tracked - handle_counts_start.total_tracked); +} + +// TODO(robliao): Create tests for other types once we figure out how often GDI +// updates the handle table. diff --git a/chromium/build/util/LASTCHANGE b/chromium/build/util/LASTCHANGE index 803868098e1..03dc7ef702b 100644 --- a/chromium/build/util/LASTCHANGE +++ b/chromium/build/util/LASTCHANGE @@ -1 +1 @@ -LASTCHANGE=75fcf24dd8773d5959a7177f492969e627d83c01-refs/branch-heads/3770@{#819} +LASTCHANGE=eca637952e5dc4b02f1f7a70e68a7ab0094ccd1b-refs/branch-heads/3770@{#1088} diff --git a/chromium/build/util/LASTCHANGE.committime b/chromium/build/util/LASTCHANGE.committime index f3a9396894b..43b319067f9 100644 --- a/chromium/build/util/LASTCHANGE.committime +++ b/chromium/build/util/LASTCHANGE.committime @@ -1 +1 @@ -1558658817
\ No newline at end of file +1561608883
\ No newline at end of file diff --git a/chromium/cc/animation/animation_host.cc b/chromium/cc/animation/animation_host.cc index 8be2eef3d07..cbd6d8e5ad8 100644 --- a/chromium/cc/animation/animation_host.cc +++ b/chromium/cc/animation/animation_host.cc @@ -199,6 +199,8 @@ void AnimationHost::SetMutatorHostClient(MutatorHostClient* client) { return; mutator_host_client_ = client; + if (mutator_host_client_ && needs_push_properties_) + mutator_host_client_->SetMutatorsNeedCommit(); } void AnimationHost::SetNeedsCommit() { @@ -210,6 +212,8 @@ void AnimationHost::SetNeedsCommit() { void AnimationHost::SetNeedsPushProperties() { needs_push_properties_ = true; + if (mutator_host_client_) + mutator_host_client_->SetMutatorsNeedCommit(); } void AnimationHost::PushPropertiesTo(MutatorHost* mutator_host_impl) { diff --git a/chromium/cc/animation/animation_unittest.cc b/chromium/cc/animation/animation_unittest.cc index 273491d00ca..1ffadf9a9cf 100644 --- a/chromium/cc/animation/animation_unittest.cc +++ b/chromium/cc/animation/animation_unittest.cc @@ -444,7 +444,8 @@ TEST_F(AnimationTest, AddRemoveAnimationCausesSetNeedsCommit) { timeline_->AttachAnimation(animation_); animation_->AttachElementForKeyframeEffect(element_id_, keyframe_effect_id_); - EXPECT_FALSE(client_.mutators_need_commit()); + EXPECT_TRUE(client_.mutators_need_commit()); + client_.set_mutators_need_commit(false); const int keyframe_model_id = AddOpacityTransitionToAnimation( animation_.get(), 1., .7f, .3f, false, keyframe_effect_id_); diff --git a/chromium/cc/animation/worklet_animation.cc b/chromium/cc/animation/worklet_animation.cc index 32e078ca895..09f4de569cb 100644 --- a/chromium/cc/animation/worklet_animation.cc +++ b/chromium/cc/animation/worklet_animation.cc @@ -84,8 +84,8 @@ void WorkletAnimation::PushPropertiesTo(Animation* animation_impl) { } void WorkletAnimation::Tick(base::TimeTicks monotonic_time) { - // Do not tick worklet animations on main thread. This should be removed if we - // skip ticking all animations on main thread in http://crbug.com/762717. + // Do not tick worklet animations on main thread as we will tick them on the + // compositor and the tick is more expensive than regular animations. if (!is_impl_instance_) return; if (!local_time_.has_value()) diff --git a/chromium/cc/layers/layer_impl.cc b/chromium/cc/layers/layer_impl.cc index 36a262b3c93..580dd90ba22 100644 --- a/chromium/cc/layers/layer_impl.cc +++ b/chromium/cc/layers/layer_impl.cc @@ -183,6 +183,16 @@ bool LayerImpl::WillDraw(DrawMode draw_mode, return false; } + // Resourceless mode does not support non-default blend mode. If we draw, + // the result will be just like kSrcOver which is not too bad for blend modes + // other than kDstIn. For kDstIn mode, we should ignore the source because + // otherwise we would draw a bad black mask over the destination. + if (draw_mode == DRAW_MODE_RESOURCELESS_SOFTWARE) { + const auto* effect_node = GetEffectTree().Node(effect_tree_index()); + if (effect_node && effect_node->blend_mode == SkBlendMode::kDstIn) + return false; + } + current_draw_mode_ = draw_mode; return true; } diff --git a/chromium/cc/layers/layer_unittest.cc b/chromium/cc/layers/layer_unittest.cc index 9a6e33429b5..f969da4f3bb 100644 --- a/chromium/cc/layers/layer_unittest.cc +++ b/chromium/cc/layers/layer_unittest.cc @@ -1578,8 +1578,9 @@ TEST_F(LayerTest, SetLayerTreeHostNotUsingLayerListsManagesElementId) { ElementId element_id = ElementId(2); test_layer->SetElementId(element_id); - // Expect additional call due to has-animation check. - EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(2); + // Expect additional calls due to has-animation check and initialization + // of keyframes. + EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(7); scoped_refptr<AnimationTimeline> timeline = AnimationTimeline::Create(AnimationIdProvider::NextTimelineId()); animation_host_->AddAnimationTimeline(timeline); diff --git a/chromium/cc/trees/layer_tree_host.cc b/chromium/cc/trees/layer_tree_host.cc index 313f92f57e7..cf7a0bc85ef 100644 --- a/chromium/cc/trees/layer_tree_host.cc +++ b/chromium/cc/trees/layer_tree_host.cc @@ -615,6 +615,12 @@ void LayerTreeHost::SetAnimationEvents( std::unique_ptr<MutatorEvents> events) { DCHECK(task_runner_provider_->IsMainThread()); mutator_host_->SetAnimationEvents(std::move(events)); + + // Events are added to a queue to be dispatched but we need a main frame + // in order to dispatch the events. Also, finished animations require + // a commit in order to clean up their KeyframeModels but without a main + // frame we could indefinitely delay cleaning up the animation. + SetNeedsAnimate(); } void LayerTreeHost::SetDebugState( @@ -993,22 +999,21 @@ void LayerTreeHost::UpdateBrowserControlsState( } void LayerTreeHost::AnimateLayers(base::TimeTicks monotonic_time) { - // We do not need to animate on the main thread in this case because all - // relevant changes will be processed on the compositor thread, or proxy, - // and propagated back to the correct trees. - // TODO(majidvp): We should be able to eliminate this in the non- - // slimming path and will do so in a follow up. (762717) - if (IsUsingLayerLists()) - return; - std::unique_ptr<MutatorEvents> events = mutator_host_->CreateEvents(); if (mutator_host_->TickAnimations(monotonic_time, property_trees()->scroll_tree, true)) mutator_host_->UpdateAnimationState(true, events.get()); - if (!events->IsEmpty()) - property_trees_.needs_rebuild = true; + if (!events->IsEmpty()) { + // If not using layer lists, animation state changes will require + // rebuilding property trees to track them. + if (!IsUsingLayerLists()) + property_trees_.needs_rebuild = true; + + // A commit is required to push animation changes to the compositor. + SetNeedsCommit(); + } } int LayerTreeHost::ScheduleMicroBenchmark( diff --git a/chromium/cc/trees/layer_tree_host_impl.cc b/chromium/cc/trees/layer_tree_host_impl.cc index f9e0cb0c095..cb2dbe413f0 100644 --- a/chromium/cc/trees/layer_tree_host_impl.cc +++ b/chromium/cc/trees/layer_tree_host_impl.cc @@ -2522,16 +2522,25 @@ void LayerTreeHostImpl::UpdateViewportContainerSizes() { ClipNode* outer_clip_node = property_trees->clip_tree.Node( OuterViewportScrollLayer()->clip_tree_index()); - float container_height = - OuterViewportScrollNode()->container_bounds.height(); - - // TODO(bokan): The container bounds for the outer viewport are incorrectly - // computed pre-Blink-Gen-Property-Trees so we must apply the minimum page - // scale factor. https://crbug.com/901083 + float adjusted_container_height = + OuterViewportScrollNode()->container_bounds.height() + + scaled_bounds_delta.y(); + + // TODO(bokan): The clip node bounds for the outer viewport are incorrectly + // computed pre-Blink-Gen-Property-Trees: they assume the outer viewport is + // the same size as the inner viewport. In reality, the outer viewport is + // sized such that it equals the inner viewport when at minimum page scale. + // This happens on mobile when a page doesn't have a |width=device-width| + // viewport meta tag (e.g. legacy desktop page). Thus, we must scale + // the container height and its adjustment to match the incorrect space of + // the clip node. https://crbug.com/901083, https://crbug.com/961649. + // Note: we don't fix this in the property tree builder since that code + // path is going away and it's not clear whether it depends on ClipNode + // being in this coordinate space pre-BGPT. if (!settings().use_layer_lists) - container_height *= active_tree_->min_page_scale_factor(); + adjusted_container_height *= active_tree_->min_page_scale_factor(); - outer_clip_node->clip.set_height(container_height + bounds_delta.y()); + outer_clip_node->clip.set_height(adjusted_container_height); // Expand all clips between the outer viewport and the inner viewport. auto* outer_ancestor = property_trees->clip_tree.parent(outer_clip_node); diff --git a/chromium/cc/trees/layer_tree_host_impl_unittest.cc b/chromium/cc/trees/layer_tree_host_impl_unittest.cc index 470a819eefb..13a8b429571 100644 --- a/chromium/cc/trees/layer_tree_host_impl_unittest.cc +++ b/chromium/cc/trees/layer_tree_host_impl_unittest.cc @@ -5496,14 +5496,19 @@ class LayerTreeHostImplBrowserControlsTest : public LayerTreeHostImplTest { void SetupBrowserControlsAndScrollLayerWithVirtualViewport( const gfx::Size& inner_viewport_size, const gfx::Size& outer_viewport_size, - const gfx::Size& scroll_layer_size) { + const gfx::Size& scroll_layer_size, + base::OnceCallback<void(LayerTreeSettings*)> modify_settings = + base::DoNothing()) { settings_ = DefaultSettings(); + settings_.use_layer_lists = true; + std::move(modify_settings).Run(&settings_); CreateHostImpl(settings_, CreateLayerTreeFrameSink()); SetupBrowserControlsAndScrollLayerWithVirtualViewport( host_impl_->active_tree(), inner_viewport_size, outer_viewport_size, scroll_layer_size); } + protected: void SetupBrowserControlsAndScrollLayerWithVirtualViewport( LayerTreeImpl* tree_impl, const gfx::Size& inner_viewport_size, @@ -5514,7 +5519,6 @@ class LayerTreeHostImplBrowserControlsTest : public LayerTreeHostImplTest { outer_viewport_size, scroll_layer_size); } - protected: gfx::Size layer_size_; gfx::Size clip_size_; gfx::Size viewport_size_; @@ -5596,15 +5600,82 @@ TEST_F(LayerTreeHostImplBrowserControlsTest, host_impl_->ScrollEnd(EndState().get()); } +// Ensure that moving the browser controls (i.e. omnibox/url-bar on mobile) on +// pages with a non-1 minimum page scale factor (e.g. legacy desktop page) +// correctly scales the clipping adjustment performed to show the newly exposed +// region of the page. +TEST_F(LayerTreeHostImplBrowserControlsTest, + MovingBrowserControlsOuterClipDeltaScaled) { + gfx::Size inner_size = gfx::Size(100, 100); + gfx::Size outer_size = gfx::Size(100, 100); + gfx::Size content_size = gfx::Size(200, 1000); + SetupBrowserControlsAndScrollLayerWithVirtualViewport(inner_size, outer_size, + content_size); + + LayerTreeImpl* active_tree = host_impl_->active_tree(); + + // Create a content layer beneath the outer viewport scroll layer. + int id = host_impl_->OuterViewportScrollLayer()->id(); + host_impl_->OuterViewportScrollLayer()->test_properties()->AddChild( + LayerImpl::Create(host_impl_->active_tree(), id + 2)); + LayerImpl* content = + active_tree->OuterViewportScrollLayer()->test_properties()->children[0]; + content->SetBounds(gfx::Size(100, 100)); + host_impl_->active_tree()->PushPageScaleFromMainThread(0.5f, 0.5f, 4.f); + host_impl_->active_tree()->BuildPropertyTreesForTesting(); + + DrawFrame(); + + LayerImpl* inner_container = active_tree->InnerViewportContainerLayer(); + LayerImpl* outer_container = active_tree->OuterViewportContainerLayer(); + LayerImpl* outer_scroll = active_tree->OuterViewportScrollLayer(); + auto* property_trees = host_impl_->active_tree()->property_trees(); + ClipNode* outer_clip_node = + property_trees->clip_tree.Node(outer_scroll->clip_tree_index()); + + // The browser controls should start off showing so the viewport should be + // shrunk. + ASSERT_EQ(50, host_impl_->browser_controls_manager()->ContentTopOffset()); + ASSERT_EQ(gfx::Size(100, 100), inner_container->bounds()); + ASSERT_EQ(gfx::Size(100, 100), outer_container->bounds()); + ASSERT_EQ(gfx::SizeF(200, 1000), active_tree->ScrollableSize()); + ASSERT_EQ(gfx::SizeF(100, 100), outer_clip_node->clip.size()); + + ASSERT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, + host_impl_ + ->ScrollBegin(BeginState(gfx::Point()).get(), + InputHandler::TOUCHSCREEN) + .thread); + + // Hide the browser controls by 10px. The outer clip should expand by 20px as + // because the outer viewport is sized based on the minimum scale, in this + // case 0.5. Therefore, changes to the outer viewport need to be divided by + // the minimum scale as well. + { + host_impl_->ScrollBy( + UpdateState(gfx::Point(0, 0), gfx::Vector2dF(0.f, 10.f)).get()); + ASSERT_EQ(40, host_impl_->browser_controls_manager()->ContentTopOffset()); + EXPECT_EQ(gfx::SizeF(100, 120), outer_clip_node->clip.size()); + } + + host_impl_->ScrollEnd(EndState().get()); +} + +// This test is the same as above but ensures the behavior prior to +// BlinkGenPropertyTrees because the outer viewport's clip node size is +// inconsistent with the scroll node's content bounds. Pre-BGPT, the outer +// viewport clip node is always the same size as the inner viewport clip node, +// even if the outer viewport changes size as a result of a non-1 minimum page +// scale factor. +// TODO(bokan): This test can be safely removed post-BGPT. See crbug.com/901083. TEST_F(LayerTreeHostImplBrowserControlsTest, MovingBrowserControlsChangesViewportClip) { - // TODO(bokan): This test is checking pre-blink-gen-property-tree behavior - // and can be removed once that flag ships. See crbug.com/901083. - if (DefaultSettings().use_layer_lists) - return; + auto turn_off_layer_lists = base::BindOnce( + [](LayerTreeSettings* settings) { settings->use_layer_lists = false; }); SetupBrowserControlsAndScrollLayerWithVirtualViewport( - gfx::Size(50, 50), gfx::Size(25, 25), gfx::Size(100, 100)); + gfx::Size(50, 50), gfx::Size(25, 25), gfx::Size(100, 100), + std::move(turn_off_layer_lists)); LayerTreeImpl* active_tree = host_impl_->active_tree(); diff --git a/chromium/cc/trees/layer_tree_host_unittest_animation.cc b/chromium/cc/trees/layer_tree_host_unittest_animation.cc index ad615452fbb..6cd39fc0b0d 100644 --- a/chromium/cc/trees/layer_tree_host_unittest_animation.cc +++ b/chromium/cc/trees/layer_tree_host_unittest_animation.cc @@ -28,6 +28,7 @@ #include "cc/test/layer_tree_test.h" #include "cc/trees/effect_node.h" #include "cc/trees/layer_tree_impl.h" +#include "cc/trees/target_property.h" #include "cc/trees/transform_node.h" #include "components/viz/common/quads/compositor_frame.h" @@ -1207,6 +1208,109 @@ class LayerTreeHostAnimationTestScrollOffsetAnimationRemoval MULTI_THREAD_TEST_F(LayerTreeHostAnimationTestScrollOffsetAnimationRemoval); +// Verifies that the state of a scroll animation is tracked correctly on the +// main and compositor thread and that the KeyframeModel is removed when +// the scroll animation completes. This is a regression test for +// https://crbug.com/962346 and demonstrates the necessity of +// LayerTreeHost::AnimateLayers for https://crbug.com/762717. +class LayerTreeHostAnimationTestScrollOffsetAnimationCompletion + : public LayerTreeHostAnimationTest { + public: + LayerTreeHostAnimationTestScrollOffsetAnimationCompletion() + : final_position_(80.0, 180.0) {} + + void SetupTree() override { + LayerTreeHostAnimationTest::SetupTree(); + + scroll_layer_ = FakePictureLayer::Create(&client_); + scroll_layer_->SetScrollable(gfx::Size(100, 100)); + scroll_layer_->SetBounds(gfx::Size(10000, 10000)); + client_.set_bounds(scroll_layer_->bounds()); + scroll_layer_->SetScrollOffset(gfx::ScrollOffset(100.0, 200.0)); + layer_tree_host()->root_layer()->AddChild(scroll_layer_); + + std::unique_ptr<ScrollOffsetAnimationCurve> curve( + ScrollOffsetAnimationCurve::Create( + final_position_, + CubicBezierTimingFunction::CreatePreset( + CubicBezierTimingFunction::EaseType::EASE_IN_OUT))); + std::unique_ptr<KeyframeModel> keyframe_model(KeyframeModel::Create( + std::move(curve), 1, 0, TargetProperty::SCROLL_OFFSET)); + keyframe_model->set_needs_synchronized_start_time(true); + + AttachAnimationsToTimeline(); + animation_child_->AttachElement(scroll_layer_->element_id()); + animation_child_->AddKeyframeModel(std::move(keyframe_model)); + } + + void BeginTest() override { PostSetNeedsCommitToMainThread(); } + + void BeginMainFrame(const viz::BeginFrameArgs& args) override { + KeyframeModel* keyframe_model = + animation_child_->GetKeyframeModel(TargetProperty::SCROLL_OFFSET); + switch (layer_tree_host()->SourceFrameNumber()) { + case 0: + EXPECT_EQ(scroll_layer_->CurrentScrollOffset().x(), 100); + EXPECT_EQ(scroll_layer_->CurrentScrollOffset().y(), 200); + EXPECT_EQ(KeyframeModel::RunState::WAITING_FOR_TARGET_AVAILABILITY, + keyframe_model->run_state()); + break; + case 1: + EXPECT_EQ(KeyframeModel::RunState::RUNNING, + keyframe_model->run_state()); + break; + default: + break; + } + } + + void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { + if (host_impl->sync_tree()->source_frame_number() == 0) { + GetImplTimelineAndAnimationByID(*host_impl); + return; + } + KeyframeModel* keyframe_model = + animation_child_impl_->GetKeyframeModel(TargetProperty::SCROLL_OFFSET); + if (!keyframe_model || keyframe_model->run_state() == + KeyframeModel::RunState::WAITING_FOR_DELETION) + EndTest(); + } + + void DidFinishImplFrameOnThread(LayerTreeHostImpl* host_impl) override { + if (!animation_child_impl_) + return; + if (KeyframeModel* keyframe_model = animation_child_impl_->GetKeyframeModel( + TargetProperty::SCROLL_OFFSET)) { + if (keyframe_model->run_state() == KeyframeModel::RunState::RUNNING) { + ran_animation_ = true; + } + } + } + + void AfterTest() override { + // The animation should have run for some frames. + EXPECT_TRUE(ran_animation_); + + // The finished KeyframeModel should have been removed from both the + // main and impl side animations. + EXPECT_EQ(nullptr, animation_child_->GetKeyframeModel( + TargetProperty::SCROLL_OFFSET)); + EXPECT_EQ(nullptr, animation_child_impl_->GetKeyframeModel( + TargetProperty::SCROLL_OFFSET)); + + // The scroll should have been completed. + EXPECT_EQ(final_position_, scroll_layer_->CurrentScrollOffset()); + } + + private: + FakeContentLayerClient client_; + scoped_refptr<FakePictureLayer> scroll_layer_; + const gfx::ScrollOffset final_position_; + bool ran_animation_ = false; +}; + +MULTI_THREAD_TEST_F(LayerTreeHostAnimationTestScrollOffsetAnimationCompletion); + // When animations are simultaneously added to an existing layer and to a new // layer, they should start at the same time, even when there's already a // running animation on the existing layer. @@ -1695,6 +1799,8 @@ class LayerTreeHostAnimationTestIsAnimating case 2: KeyframeModel* keyframe_model = animation_->GetKeyframeModel(TargetProperty::TRANSFORM); + EXPECT_EQ(KeyframeModel::RunState::RUNNING, + keyframe_model->run_state()); animation_->RemoveKeyframeModel(keyframe_model->id()); break; } @@ -1713,6 +1819,36 @@ class LayerTreeHostAnimationTestIsAnimating case 2: // The animation is removed/stopped. EXPECT_FALSE(child->screen_space_transform_is_animating()); + break; + case 3: + break; + default: + NOTREACHED(); + } + } + + void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { + GetImplTimelineAndAnimationByID(*host_impl); + switch (host_impl->active_tree()->source_frame_number()) { + case 0: + // No animation yet. + break; + case 1: + // Animation is starting. + EXPECT_EQ(KeyframeModel::RunState::STARTING, + animation_impl_->GetKeyframeModel(TargetProperty::TRANSFORM) + ->run_state()); + break; + case 2: + // After activation, the KeyframeModel should be waiting for deletion. + EXPECT_EQ(KeyframeModel::RunState::WAITING_FOR_DELETION, + animation_impl_->GetKeyframeModel(TargetProperty::TRANSFORM) + ->run_state()); + break; + case 3: + // The animation KeyframeModel is cleaned up. + EXPECT_EQ(nullptr, + animation_impl_->GetKeyframeModel(TargetProperty::TRANSFORM)); EndTest(); break; default: @@ -1731,9 +1867,9 @@ class LayerTreeHostAnimationTestIsAnimating EXPECT_TRUE(child->screen_space_transform_is_animating()); break; case 2: + case 3: // The animation is removed/stopped. EXPECT_FALSE(child->screen_space_transform_is_animating()); - EndTest(); break; default: NOTREACHED(); @@ -2317,12 +2453,9 @@ class LayerTreeHostAnimationTestRebuildPropertyTreesOnAnimationSetNeedsCommit } void UpdateLayerTreeHost() override { - if (layer_tree_host()->SourceFrameNumber() == 1) { - EXPECT_FALSE(layer_tree_host()->property_trees()->needs_rebuild); + if (layer_tree_host()->SourceFrameNumber() == 1) AddAnimatedTransformToAnimation(animation_child_.get(), 1.0, 5, 5); - } - - EXPECT_TRUE(layer_tree_host()->property_trees()->needs_rebuild); + EXPECT_TRUE(layer_tree_host()->proxy()->CommitRequested()); } void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { diff --git a/chromium/cc/trees/proxy_main.cc b/chromium/cc/trees/proxy_main.cc index 3c4b947f371..8cb9c0516b2 100644 --- a/chromium/cc/trees/proxy_main.cc +++ b/chromium/cc/trees/proxy_main.cc @@ -215,8 +215,8 @@ void ProxyMain::BeginMainFrame( // what this does. layer_tree_host_->BeginMainFrame(begin_main_frame_state->begin_frame_args); - // Updates cc animations on the main-thread. This appears to be entirely - // duplicated by work done in LayerTreeHost::BeginMainFrame. crbug.com/762717. + // Updates cc animations on the main-thread. This is necessary in order + // to track animation states such that they are cleaned up properly. layer_tree_host_->AnimateLayers( begin_main_frame_state->begin_frame_args.frame_time); diff --git a/chromium/chrome/VERSION b/chromium/chrome/VERSION index c13a9764e65..331f08a17ef 100644 --- a/chromium/chrome/VERSION +++ b/chromium/chrome/VERSION @@ -1,4 +1,4 @@ MAJOR=75 MINOR=0 BUILD=3770 -PATCH=56 +PATCH=116 diff --git a/chromium/chrome/android/chrome_java_sources.gni b/chromium/chrome/android/chrome_java_sources.gni index fa2cf648a4e..e87a7279980 100644 --- a/chromium/chrome/android/chrome_java_sources.gni +++ b/chromium/chrome/android/chrome_java_sources.gni @@ -519,6 +519,7 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/dom_distiller/DomDistillerUIUtils.java", "java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java", "java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeTabInfo.java", + "java/src/org/chromium/chrome/browser/dom_distiller/TabDistillabilityProvider.java", "java/src/org/chromium/chrome/browser/download/ChromeDownloadDelegate.java", "java/src/org/chromium/chrome/browser/download/DirectoryOption.java", "java/src/org/chromium/chrome/browser/download/DownloadActivity.java", diff --git a/chromium/chrome/android/chrome_test_java_sources.gni b/chromium/chrome/android/chrome_test_java_sources.gni index 692a6b5999a..6fdec7ac6de 100644 --- a/chromium/chrome/android/chrome_test_java_sources.gni +++ b/chromium/chrome/android/chrome_test_java_sources.gni @@ -100,7 +100,6 @@ chrome_test_java_sources = [ "javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java", "javatests/src/org/chromium/chrome/browser/contextmenu/TabularContextMenuUiTest.java", "javatests/src/org/chromium/chrome/browser/contextual_suggestions/EmptyEnabledStateMonitor.java", - "javatests/src/org/chromium/chrome/browser/contextual_suggestions/EnabledStateMonitorTest.java", "javatests/src/org/chromium/chrome/browser/contextual_suggestions/FakeContextualSuggestionsSource.java", "javatests/src/org/chromium/chrome/browser/contextual_suggestions/FakeTracker.java", "javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchFakeServer.java", diff --git a/chromium/chrome/android/java/strings/android_chrome_strings.grd b/chromium/chrome/android/java/strings/android_chrome_strings.grd index 8b90acd256e..50a47e6dd11 100644 --- a/chromium/chrome/android/java/strings/android_chrome_strings.grd +++ b/chromium/chrome/android/java/strings/android_chrome_strings.grd @@ -2371,6 +2371,9 @@ To change this setting, <ph name="BEGIN_LINK"><resetlink></ph>reset sync<p <message name="IDS_MENU_ADD_TO_APPS" desc="Text to accompany icon that will navigate to a page showing a categorized view of different applications or sites"> Add to my apps </message> + <message name="IDS_ADDED_TO_APPS" desc="Text that confirms a site or app has been added to the apps screen."> + <ph name="APP_NAME">%1$s<ex>Zomato</ex></ph> added to my apps + </message> <!-- Page info popup --> <message name="IDS_PAGE_INFO_SITE_SETTINGS_BUTTON" desc="Text in the button that opens a website's Site Settings from the Page Info dialog."> diff --git a/chromium/chrome/android/touchless/java/strings/touchless_strings.grd b/chromium/chrome/android/touchless/java/strings/touchless_strings.grd index 6e25b9f1423..ffe63896349 100644 --- a/chromium/chrome/android/touchless/java/strings/touchless_strings.grd +++ b/chromium/chrome/android/touchless/java/strings/touchless_strings.grd @@ -116,17 +116,11 @@ </translations> <release seq="1"> <messages fallback_to_english="true"> - <message name="IDS_OPEN_LAST_TAB_PLACEHOLDER_FIRST_LAUNCH" desc="Message when user is first launching Chrome. [CHAR_LIMIT=NONE]"> - Welcome to Chrome - </message> - <message name="IDS_OPEN_LAST_TAB_PLACEHOLDER" desc="Message after user has cleared history. [CHAR_LIMIT=NONE]"> - Chrome - </message> <message name="IDS_OPEN_LAST_TAB_JUST_NOW" desc="The present time or moment (noun). Used instead of a timestamp when the site was visited less than a minute ago. [CHAR_LIMIT=12]"> Now </message> <message name="IDS_NTP_ALL_APPS" desc="Text to accompany icon that will navigate to a page showing a categorized view of different applications or sites"> - All apps + Explore apps </message> <message name="IDS_MORE_ARTICLES" desc="Message at the bottom of a list of news items prompting the user to load more."> More articles diff --git a/chromium/chrome/android/touchless/touchless_java_sources.gni b/chromium/chrome/android/touchless/touchless_java_sources.gni index dc1ead3276b..4335e81be40 100644 --- a/chromium/chrome/android/touchless/touchless_java_sources.gni +++ b/chromium/chrome/android/touchless/touchless_java_sources.gni @@ -3,6 +3,7 @@ # found in the LICENSE file. touchless_java_sources = [ + "touchless/java/src/org/chromium/chrome/browser/download/TouchlessDownloadActivity.java", "touchless/java/src/org/chromium/chrome/browser/touchless/AboveTheFoldViewHolder.java", "touchless/java/src/org/chromium/chrome/browser/touchless/ContentSuggestionsViewBinder.java", "touchless/java/src/org/chromium/chrome/browser/touchless/DinoActivity.java", @@ -56,6 +57,7 @@ touchless_java_sources = [ "touchless/java/src/org/chromium/chrome/browser/touchless/ui/iph/KeyFunctionsIPHProperties.java", "touchless/java/src/org/chromium/chrome/browser/touchless/ui/iph/KeyFunctionsIPHView.java", "touchless/java/src/org/chromium/chrome/browser/touchless/ui/iph/KeyFunctionsIPHViewBinder.java", + "touchless/java/src/org/chromium/chrome/browser/touchless/ui/progressbar/PillProgressBarView.java", "touchless/java/src/org/chromium/chrome/browser/touchless/ui/progressbar/ProgressBarCoordinator.java", "touchless/java/src/org/chromium/chrome/browser/touchless/ui/progressbar/ProgressBarMediator.java", "touchless/java/src/org/chromium/chrome/browser/touchless/ui/progressbar/ProgressBarProperties.java", @@ -70,9 +72,13 @@ touchless_test_java_sources = [ "touchless/javatests/src/org/chromium/chrome/browser/touchless/TouchlessNewTabPageMediatorTest.java", ] -touchless_junit_test_java_sources = [ "touchless/junit/src/org/chromium/chrome/browser/touchless/ScrollPositionInfoTest.java" ] +touchless_junit_test_java_sources = [ + "touchless/junit/src/org/chromium/chrome/browser/touchless/ScrollPositionInfoTest.java", + "touchless/junit/src/org/chromium/chrome/browser/touchless/TouchlessActionItemViewHolderTest.java", +] touchess_fallback_java_sources = [ + "touchless/fallback/java/src/org/chromium/chrome/browser/download/TouchlessDownloadActivity.java", "touchless/fallback/java/src/org/chromium/chrome/browser/touchless/TouchlessDelegate.java", "touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessModelCoordinator.java", "touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessUiCoordinator.java", diff --git a/chromium/chrome/app/resources/chromium_strings_bn.xtb b/chromium/chrome/app/resources/chromium_strings_bn.xtb index b584d1d413f..6d53c21899d 100644 --- a/chromium/chrome/app/resources/chromium_strings_bn.xtb +++ b/chromium/chrome/app/resources/chromium_strings_bn.xtb @@ -132,7 +132,7 @@ <translation id="5416696090975899932">বিল্ট-ইন পিডিএফ ভিউয়ার অনুপস্থিত থাকলে Chromium প্রিন্ট প্রিভিউ দেখাতে পারে না৷</translation> <translation id="5427571867875391349">Chromium-কে আপনার ডিফল্ট ব্রাউজার হিসাবে সেট করুন</translation> <translation id="5438241569118040789"><ph name="PAGE_TITLE" /> - Chromium বিটা</translation> -<translation id="5466153949126434691">Chromium স্বয়ংক্রিয়ভাবে আপডেট হয় তাই আপনার কাছে সর্বদা নবীনতম ভার্সনটি থাকে৷ এই ডাউনলোডটি সম্পূর্ণ হলে, Chromium পুনরায় চালু হবে এবং আপনি আবার আগের মতো Chrome ব্যবহার করতে পারবেন৷</translation> +<translation id="5466153949126434691">Chromium অটোমেটিক আপডেট হয় তাই আপনার কাছে সর্বদা নবীনতম ভার্সনটি থাকে৷ এই ডাউনলোডটি সম্পূর্ণ হলে, Chromium পুনরায় চালু হবে এবং আপনি আবার আগের মতো Chrome ব্যবহার করতে পারবেন৷</translation> <translation id="5479196819031988440">Chromium OS এই পৃষ্ঠাটি খুলতে পারবে না।</translation> <translation id="5480860683791598150">এই সাইটটির সাথে আপনার লোকেশন শেয়ার করার জন্য Chromium কে আপনার লোকেশনের তথ্যে অ্যাক্সেস দিতে হবে</translation> <translation id="549669000822060376">Chromium যখন সিস্টেম আপডেটগুলিকে ইনস্টল করে তখন দয়া করে অপেক্ষা করুন৷</translation> @@ -232,7 +232,7 @@ Chromium আপনার সেটিংস পুনরুদ্ধার ক <translation id="7867198900892795913">Chromium লেটেস্ট ভার্সনে আপডেট করা যাচ্ছে না, তাই আপনি নতুন বৈশিষ্ট্য এবং সুরক্ষা সমাধানগুলি পাচ্ছেন না।</translation> <translation id="7901117350626490574">Chromium-এর একটি নতুন আপডেট উপলভ্য আছে এবং আপনি আবার চালু করলে সেটি প্রয়োগ করা হবে।</translation> <translation id="7937630085815544518">আপনি <ph name="USER_EMAIL_ADDRESS" /> হিসাবে Chromium-এ প্রবেশ করেছেন৷ আবার সাইন-ইন করতে একই অ্যাকাউন্ট ব্যবহার করুন৷</translation> -<translation id="7962572577636132072">Chromium স্বয়ংক্রিয়ভাবে আপডেট হয় তাই আপনি সবসময় নবীনতম ভার্সনটি পান৷</translation> +<translation id="7962572577636132072">Chromium অটোমেটিক আপডেট হয় তাই আপনি সবসময় নবীনতম ভার্সনটি পান৷</translation> <translation id="7975919845073681630">এটা Chromium এর সেকেন্ডারি ইনস্টলেশন এবং একে আপনার ডিফল্ট ব্রাউজার করা যাবে না।</translation> <translation id="7979877361127045932">Chromium মেনুর মধ্যে লুকান</translation> <translation id="8013436988911883588">Chromium অ্যাক্সেস পেলেই, ওয়েবসাইটগুলি আপনাকে অ্যাক্সেসের অনুরোধ করতে পারবে।</translation> diff --git a/chromium/chrome/app/resources/chromium_strings_da.xtb b/chromium/chrome/app/resources/chromium_strings_da.xtb index feb6155a518..a2f89def7a1 100644 --- a/chromium/chrome/app/resources/chromium_strings_da.xtb +++ b/chromium/chrome/app/resources/chromium_strings_da.xtb @@ -24,7 +24,7 @@ <translation id="1779356040007214683">For at gøre Chromium sikrere har vi slået nogle udvidelser fra, som ikke er anført i <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> og muligvis er blevet tilføjet, uden at du vidste det.</translation> <translation id="1808667845054772817">Geninstaller Chromium</translation> <translation id="1869480248812203386">Du kan hjælpe med at gøre Chromium sikrere og nemmere at bruge ved automatisk at rapportere oplysninger om mulige sikkerhedshændelser til Google.</translation> -<translation id="1881322772814446296">Du er ved at logge ind med en administreret konto og give dens administrator kontrol over din profil i Chromium. Dine Chromium-data, f.eks. dine apps, bogmærker, historikdata, adgangskoder og andre indstillinger, knyttes permanent til <ph name="USER_NAME" />. Du kan slette disse data via betjeningspanelet for Google Konti, men du kan ikke knytte disse data til en anden konto. Du kan eventuelt oprette en ny profil for at holde dine Chromium-data adskilt. <ph name="LEARN_MORE" /></translation> +<translation id="1881322772814446296">Du er ved at logge ind med en mangerstyret konto og give dens administrator kontrol over din profil i Chromium. Dine Chromium-data, f.eks. dine apps, bogmærker, historikdata, adgangskoder og andre indstillinger, knyttes permanent til <ph name="USER_NAME" />. Du kan slette disse data via betjeningspanelet for Google Konti, men du kan ikke knytte disse data til en anden konto. Du kan eventuelt oprette en ny profil for at holde dine Chromium-data adskilt. <ph name="LEARN_MORE" /></translation> <translation id="1895626441344023878">{0,plural, =0{Der er en tilgængelig Chromium-opdatering}=1{Der er en tilgængelig Chromium-opdatering}one{En Chromium-opdatering har været tilgængelig i # dag}other{En Chromium-opdatering har været tilgængelig i # dage}}</translation> <translation id="1911763535808217981">Når du deaktiverer denne indstilling, kan du logge ind på Google-websites som f.eks. Gmail uden at logge ind i Chromium</translation> <translation id="1929939181775079593">Chromium svarer ikke. Vil du genstarte nu?</translation> @@ -125,7 +125,7 @@ <translation id="5116586539350239523">Chromium gemmer din personlige info på sikker vis, så du ikke behøver at angive den igen.</translation> <translation id="5181952534059945058">Denne side anvender for meget hukommelse, så Chromium har fjernet noget indhold.</translation> <translation id="5277894862589591112">Åbn Chromium igen for at anvende ændringerne</translation> -<translation id="5358375970380395591">Du er ved at logge ind med en administreret konto og giver dens administrator kontrol over din profil i Chromium. Dine Chromium-data, f.eks. dine apps, bogmærker, historikdata, adgangskoder og andre indstillinger, knyttes permanent til <ph name="USER_NAME" />. Du kan slette disse data via betjeningspanelet for Google Konti, men du kan ikke knytte disse data til en anden konto. <ph name="LEARN_MORE" /></translation> +<translation id="5358375970380395591">Du er ved at logge ind med en mangerstyret konto og giver dens administrator kontrol over din profil i Chromium. Dine Chromium-data, f.eks. dine apps, bogmærker, historikdata, adgangskoder og andre indstillinger, knyttes permanent til <ph name="USER_NAME" />. Du kan slette disse data via betjeningspanelet for Google Konti, men du kan ikke knytte disse data til en anden konto. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Opdaterer Chromium (<ph name="PROGRESS_PERCENT" />)</translation> <translation id="538767207339317086">Tillad login via Chromium</translation> <translation id="5398878173008909840">Der er en ny version af Chromium til rådighed.</translation> diff --git a/chromium/chrome/app/resources/chromium_strings_hi.xtb b/chromium/chrome/app/resources/chromium_strings_hi.xtb index 7075ab9da57..cfaed3847f9 100644 --- a/chromium/chrome/app/resources/chromium_strings_hi.xtb +++ b/chromium/chrome/app/resources/chromium_strings_hi.xtb @@ -109,7 +109,7 @@ <translation id="4567424176335768812">आपने <ph name="USER_EMAIL_ADDRESS" /> के रूप में साइन इन किया हुआ है. अब आप अपने सभी साइन इन किए हुए डिवाइस पर अपने बुकमार्क, इतिहास, और दूसरी सेटिंग को एक्सेस कर सकते हैं.</translation> <translation id="459535195905078186">क्रोमियम ऐप्स</translation> <translation id="4621240073146040695">करीब अप टू डेट हो गया है! अपडेट करना पूरा करने के लिए क्रोमियम फिर से लॉन्च करें.</translation> -<translation id="4677944499843243528">ऐसा लगता है कि प्रोफ़ाइल का उपयोग अन्य क्रोमियम प्रोसेस (<ph name="PROCESS_ID" />) द्वारा किसी अन्य कंप्यूटर (<ph name="HOST_NAME" />) पर किया जा रहा है. क्रोमियम ने प्रोफ़ाइल को लॉक कर दिया है ताकि वह दूषित न हो. अगर आप सुनिश्चित हैं कि कोई अन्य प्रोसेस इस प्रोफ़ाइल का उपयोग नहीं कर रही हैं, तो आप प्रोफ़ाइल को अनलॉक कर सकते हैं और क्रोमियम को फिर से लॉन्च कर सकते हैं.</translation> +<translation id="4677944499843243528">ऐसा लगता है कि प्रोफ़ाइल का उपयोग अन्य क्रोमियम प्रोसेस (<ph name="PROCESS_ID" />) द्वारा किसी अन्य कंप्यूटर (<ph name="HOST_NAME" />) पर किया जा रहा है. क्रोमियम ने प्रोफ़ाइल को लॉक कर दिया है ताकि वह दूषित न हो. अगर आप पक्का हैं कि कोई अन्य प्रोसेस इस प्रोफ़ाइल का उपयोग नहीं कर रही हैं, तो आप प्रोफ़ाइल को अनलॉक कर सकते हैं और क्रोमियम को फिर से लॉन्च कर सकते हैं.</translation> <translation id="469338717132742108">क्रोमियम OS के लिए सहायता प्राप्त करें</translation> <translation id="4708774505295300557">इस कंप्यूटर पर पहले किसी अन्य व्यक्ति ने <ph name="ACCOUNT_EMAIL_LAST" /> के रूप में Chromium में साइन इन किया. अपनी जानकारी अलग रखने के लिए कृपया नया Chromium उपयोगकर्ता बनाएं.</translation> <translation id="4714956846925717402">क्रोमियम पर तेज़ी से पहुंचें</translation> diff --git a/chromium/chrome/app/resources/chromium_strings_ko.xtb b/chromium/chrome/app/resources/chromium_strings_ko.xtb index 0e8204cf1ef..921b74c9c2e 100644 --- a/chromium/chrome/app/resources/chromium_strings_ko.xtb +++ b/chromium/chrome/app/resources/chromium_strings_ko.xtb @@ -71,7 +71,7 @@ <translation id="3190315855212034486">Chromium이 다운되었습니다. 다시 시작하시겠습니까?</translation> <translation id="3229526316128325841">Chromium에서 비밀번호를 내보내려고 합니다.</translation> <translation id="3256316712990552818">Chromium에 복사됨</translation> -<translation id="3258596308407688501">Chromium에서 데이터 디렉토리를 읽고 쓸 수 없습니다. +<translation id="3258596308407688501">Chromium에서 데이터 디렉터리를 읽고 쓸 수 없습니다. <ph name="USER_DATA_DIRECTORY" /></translation> <translation id="328888136576916638">Google API 키가 누락되었습니다. Chromium의 일부 기능이 사용 중지됩니다.</translation> @@ -184,7 +184,7 @@ <translation id="6676384891291319759">인터넷 연결</translation> <translation id="6717134281241384636">Chromium의 최신 버전을 사용하기 때문에 프로필을 사용할 수 없습니다. -일부 기능을 사용할 수 없습니다. 다른 프로필 디렉토리를 지정하거나 Chromium의 새로운 버전을 사용하시기 바랍니다.</translation> +일부 기능을 사용할 수 없습니다. 다른 프로필 디렉터리를 지정하거나 Chromium의 새로운 버전을 사용하시기 바랍니다.</translation> <translation id="6734080038664603509">Chromium 업데이트</translation> <translation id="6734291798041940871">모든 사용자가 사용할 수 있도록 컴퓨터에 Chromium이 이미 설치되어 있습니다.</translation> <translation id="6810143991807788455">현재 설정을 보고하여 Chromium 개선에 참여</translation> @@ -230,7 +230,7 @@ Chromium에서 설정을 복구할 수 없습니다.</translation> <translation id="7689606757190482937">모든 기기에서 Chromium을 동기화하고 맞춤설정하세요.</translation> <translation id="7729447699958282447">도메인에서 동기화를 사용할 수 없어 Chromium에서 데이터를 동기화하지 못했습니다.</translation> <translation id="7745317241717453663">인터넷 사용 기록이 기기에서 삭제됩니다. 나중에 데이터를 가져오려면 Chromium에 <ph name="USER_EMAIL" />(으)로 로그인하세요.</translation> -<translation id="7747138024166251722">설치 프로그램이 임시 디렉토리를 만들지 못했습니다. 디스크 공간 및 설치 권한을 확인해 보세요.</translation> +<translation id="7747138024166251722">설치 프로그램이 임시 디렉터리를 만들지 못했습니다. 디스크 공간 및 설치 권한을 확인해 보세요.</translation> <translation id="7773960292263897147">경고: Chromium은 확장 프로그램이 인터넷 방문 기록을 저장하지 못하도록 할 수 없습니다. 시크릿 모드에서 이 확장 프로그램을 사용 중지하려면 옵션을 선택 취소하세요.</translation> <translation id="7790626492778995050"><ph name="PAGE_TITLE" /> - Chromium Canary</translation> <translation id="7867198900892795913">Chromium을 최신 버전으로 업데이트하지 못했기 때문에 새로운 기능과 보안 수정 사항이 적용되지 않았습니다.</translation> diff --git a/chromium/chrome/app/resources/chromium_strings_ta.xtb b/chromium/chrome/app/resources/chromium_strings_ta.xtb index 1ac669fc613..821dd6b22ed 100644 --- a/chromium/chrome/app/resources/chromium_strings_ta.xtb +++ b/chromium/chrome/app/resources/chromium_strings_ta.xtb @@ -51,7 +51,7 @@ <translation id="2718390899429598676">கூடுதல் பாதுகாப்பிற்கு, Chromium உங்கள் தரவை என்க்ரிப்ட் செய்யும்.</translation> <translation id="2770231113462710648">இயல்புநிலை உலாவியாக இதை அமை:</translation> <translation id="2799223571221894425">மீண்டும் தொடங்கு</translation> -<translation id="2838154144102149890">புதுப்பிக்க இந்தக் கம்ப்யூட்டரில் Chrome இயங்குவதை நிறுத்த வேண்டியுள்ளது. இதனால் உள்நுழைந்துள்ள பிற பயனர்கள் தங்களின் சேமிக்கப்படாத மாற்றங்களை இழக்கக்கூடும்.</translation> +<translation id="2838154144102149890">புதுப்பிக்க இந்தக் கம்ப்யூட்டரில் Chromium இயங்குவதை நிறுத்த வேண்டும். இதனால் உள்நுழைந்துள்ள பிற பயனர்கள் தங்களின் சேமிக்கப்படாத மாற்றங்களை இழக்கக்கூடும்.</translation> <translation id="2847479871509788944">Chromium இலிருந்து அகற்று...</translation> <translation id="2886012850691518054">விருப்பத்தேர்வு: பயன்பாட்டு புள்ளிவிவரங்களையும், சிதைவு அறிக்கைகளையும் Google க்கு தானாகவே அனுப்புவதன் மூலம் Chromium ஐ இன்னும் சிறந்ததாக்க உதவுக.</translation> <translation id="2898082584336937987">உங்கள் மொபைலில் Chromiumமை நிறுவுங்கள். மொபைல் எண்ணுக்கு ஒரு மெசேஜை அனுப்புவோம்: <ph name="PHONE_NUMBER" /></translation> @@ -188,7 +188,7 @@ <translation id="6810143991807788455">நடப்பு அமைப்புகள் குறித்து தெரிவிப்பதன் மூலம் Chromiumஐச் சிறந்ததாக்க உதவவும்</translation> <translation id="6857782730669500492">Chromium - <ph name="PAGE_TITLE" /></translation> <translation id="6863361426438995919">Google Pay (Chromiumக்கு நகலெடுக்கப்பட்டது)</translation> -<translation id="6868056391275687737">Chromiumமின் வேறு நேர்வுகள் இயங்கிக் கொண்டிருக்கின்றன. புதுப்பிக்க அவற்றை மூடவும்.</translation> +<translation id="6868056391275687737">Chromiumமின் பிற நேர்வுகள் செயல்பாட்டில் உள்ளன. புதுப்பிக்க அவற்றை மூடவும்.</translation> <translation id="6893813176749746474">Chromium புதுப்பிக்கப்பட்டது. ஆனால், அதை நீங்கள் 30 நாட்களாக பயன்படுத்தவில்லை.</translation> <translation id="6964305034639999644">Chromium மறை&நிலை சாளரத்தில் இணைப்பைத் திற</translation> <translation id="6970811910055250180">உங்கள் சாதனம் புதுப்பிக்கப்படுகிறது...</translation> diff --git a/chromium/chrome/app/resources/generated_resources_am.xtb b/chromium/chrome/app/resources/generated_resources_am.xtb index a86953965c0..868688a4da9 100644 --- a/chromium/chrome/app/resources/generated_resources_am.xtb +++ b/chromium/chrome/app/resources/generated_resources_am.xtb @@ -487,7 +487,7 @@ <translation id="1744060673522309905">መሣሪያውን ከጎራው ጋር ማቀላቀል አልተቻለም። ማከል ከሚችሉት የመሣሪያዎች ብዛት አለመብለጥዎን ያረጋግጡ።</translation> <translation id="1744108098763830590">የጀርባ ገጽ</translation> <translation id="1745520510852184940">ሁልጊዜ ይህን አድርግ</translation> -<translation id="1746402432151920942">ጥበቃ የሚደረግለት የሚዲያ ለዪ</translation> +<translation id="1746402432151920942">የተጠበቀ ሚዲያ ለዪ</translation> <translation id="175196451752279553">የተ&ዘጋውን ትር ዳግም ክፈት</translation> <translation id="1753905327828125965">በይበልጥ የተጎበኙ</translation> <translation id="1756681705074952506">የግቤት ስልት</translation> diff --git a/chromium/chrome/app/resources/generated_resources_ar.xtb b/chromium/chrome/app/resources/generated_resources_ar.xtb index d497793a5e2..339870ef63f 100644 --- a/chromium/chrome/app/resources/generated_resources_ar.xtb +++ b/chromium/chrome/app/resources/generated_resources_ar.xtb @@ -545,7 +545,7 @@ <translation id="1830550083491357902">لم يتم تسجيل الدخول</translation> <translation id="1832511806131704864">تم تحديث تغيير الهاتف</translation> <translation id="1834503245783133039">تعذّر التنزيل: <ph name="FILE_NAME" /></translation> -<translation id="1834583737373831634">أجهزة MIDI (الواجهة الرقمية للآلات الموسيقية)</translation> +<translation id="1834583737373831634">أجهزة MIDI</translation> <translation id="1838374766361614909">محو البحث</translation> <translation id="1841545962859478868">قد يراقب مشرف الجهاز ما يلي:</translation> <translation id="1841616161104323629">سجِلّ الجهاز مفقود.</translation> @@ -788,7 +788,7 @@ <translation id="2220529011494928058">الإبلاغ عن مشكلة</translation> <translation id="2220572644011485463">رقم التعريف الشخصي أو كلمة المرور</translation> <translation id="2224444042887712269">ينتمي هذا الإعداد إلى <ph name="OWNER_EMAIL" />.</translation> -<translation id="2224471211857467033">أحداث سهولة الاستخدام</translation> +<translation id="2224471211857467033">أحداث إمكانية الوصول</translation> <translation id="2224551243087462610">تعديل اسم المجلد</translation> <translation id="2226449515541314767">تم حظر هذا الموقع من التحكم تحكمًا كاملاً في أجهزة MIDI.</translation> <translation id="2226720438730111184">أخبرنا بما يحدث</translation> diff --git a/chromium/chrome/app/resources/generated_resources_bn.xtb b/chromium/chrome/app/resources/generated_resources_bn.xtb index cd36be1a4cd..595e5648f63 100644 --- a/chromium/chrome/app/resources/generated_resources_bn.xtb +++ b/chromium/chrome/app/resources/generated_resources_bn.xtb @@ -486,7 +486,7 @@ <translation id="1744060673522309905">ডোমেনে ডিভাইসটি যোগ করা যাবে না। ভাল করে দেখে নিন যে আপনার ডিভাইস যোগ করার সর্বাধিক সংখ্যা যেন অতিক্রম না করে।</translation> <translation id="1744108098763830590">পৃষ্ঠভূমি পৃষ্ঠা</translation> <translation id="1745520510852184940">সর্বদা এটিই করুন</translation> -<translation id="1746402432151920942">প্রোটেক্টেড মিডিয়া আইডেন্টিফায়ার</translation> +<translation id="1746402432151920942">সুরক্ষিত মিডিয়া শনাক্তকারী</translation> <translation id="175196451752279553">বন্ধ ট্যাবটি পু&নঃরায় খুলুন</translation> <translation id="1753905327828125965">সর্বাধিক দেখা</translation> <translation id="1756681705074952506">ইনপুট পদ্ধতি</translation> @@ -1629,7 +1629,7 @@ <translation id="354602065659584722">ক্ষতিকর সফ্টওয়্যার সরানো হয়েছে</translation> <translation id="3547495624659668105">PRL ভার্সন</translation> <translation id="3547954654003013442">প্রক্সি সেটিংস</translation> -<translation id="3550915441744863158">Chrome স্বয়ংক্রিয়ভাবে আপডেট হয় তাই আপনি সবসময় নবীনতম ভার্সনটি পান</translation> +<translation id="3550915441744863158">Chrome অটোমেটিক আপডেট হয় তাই আপনি সবসময় নবীনতম ভার্সনটি পান</translation> <translation id="3551320343578183772">ট্যাব বন্ধ করুন</translation> <translation id="3552780134252864554">'বেরিয়ে আসুন' থেকে সাফ করা হয়েছে</translation> <translation id="3555812735919707620">এক্সটেনশন সরান</translation> @@ -3900,7 +3900,7 @@ <translation id="7098389117866926363">USB-C ডিভাইস (পিছনের বাঁ পোর্ট)</translation> <translation id="7098447629416471489">অন্যান্য সংরক্ষিত সার্চ ইঞ্জিন এখানে দেখা যাবে</translation> <translation id="7099337801055912064">বড় পিপিডি লোড করা যাবে না। সর্বাধিক সাইজ ২৫০ কেবি।</translation> -<translation id="7102687220333134671">স্বয়ংক্রিয় আপডেট চালু করা হয়েছে</translation> +<translation id="7102687220333134671">অটোমেটিক আপডেট চালু করা হয়েছে</translation> <translation id="7102832101143475489">অনুরোধের সময় শেষ হয়ে গেছে</translation> <translation id="7105390788077117391">ইউএসবি সংক্রান্ত পছন্দ</translation> <translation id="7108338896283013870">লুকান</translation> diff --git a/chromium/chrome/app/resources/generated_resources_ca.xtb b/chromium/chrome/app/resources/generated_resources_ca.xtb index b60a754ef3a..3e173a3327a 100644 --- a/chromium/chrome/app/resources/generated_resources_ca.xtb +++ b/chromium/chrome/app/resources/generated_resources_ca.xtb @@ -901,7 +901,7 @@ <translation id="2391762656119864333">Revoca</translation> <translation id="2392369802118427583">Activa</translation> <translation id="2394566832561516196">La configuració s'esborrarà en tornar a carregar.</translation> -<translation id="2395616325548404795">El teu dispositiu <ph name="DEVICE_TYPE" /> s'ha inscrit correctament a la gestió empresarial, però no ha pogut enviar la informació d'elements i d'ubicació. Introdueix aquesta informació manualment a la Consola d'administració del dispositiu.</translation> +<translation id="2395616325548404795">El teu dispositiu <ph name="DEVICE_TYPE" /> s'ha inscrit correctament a la gestió empresarial, però no ha pogut enviar la informació d'elements i d'ubicació. Introdueix aquesta informació manualment a la consola d'administració del dispositiu.</translation> <translation id="2396783860772170191">Introdueix un PIN de 4 dígits (0000-9999)</translation> <translation id="2408955596600435184">Introdueix el PIN</translation> <translation id="241082044617551207">Connector desconegut</translation> @@ -1720,7 +1720,7 @@ en almenys <ph name="INSTALL_SIZE" /> d'espai lliure. Per alliberar espai, supri <translation id="3681311097828166361">Gràcies pels teus suggeriments. Ara mateix no tens connexió, de manera que el teu informe s'enviarà més tard.</translation> <translation id="3682824389861648626">Llindar de moviment</translation> <translation id="3683023058278427253">Hem detectat diversos tipus de llicències per al teu domini. Tria'n un per continuar.</translation> -<translation id="3683524264665795342">Sol·licitud de <ph name="APP_NAME" /> per compartir la pantalla</translation> +<translation id="3683524264665795342">Sol·licitud de compartició de pantalla de <ph name="APP_NAME" /></translation> <translation id="368789413795732264">S'ha produït un error quan s'intentava escriure el fitxer: <ph name="ERROR_TEXT" /></translation> <translation id="3688507211863392146">Escriure en fitxers i carpetes que s'obrin a l'aplicació</translation> <translation id="3688526734140524629">Canvia el canal</translation> @@ -1874,7 +1874,7 @@ en almenys <ph name="INSTALL_SIZE" /> d'espai lliure. Per alliberar espai, supri <translation id="3888550877729210209">Escriu notes amb <ph name="LOCK_SCREEN_APP_NAME" /></translation> <translation id="3892414795099177503">Afegeix OpenVPN/L2TP…</translation> <translation id="3893536212201235195">Llegir i canviar la configuració d'accessibilitat</translation> -<translation id="3893630138897523026">ChromeVox (comentaris de veu)</translation> +<translation id="3893630138897523026">ChromeVox (avisos de veu)</translation> <translation id="3894123633473837029">Inclou l'historial recent de l'Assistent a través de Sherlog. Pot incloure informació sobre la teva identitat, la teva ubicació i dades de depuració. <ph name="BEGIN_LINK" />Més informació<ph name="END_LINK" /></translation> <translation id="3894427358181296146">Afegeix una carpeta</translation> <translation id="389589731200570180">Compartiu amb els convidats</translation> @@ -1895,7 +1895,7 @@ en almenys <ph name="INSTALL_SIZE" /> d'espai lliure. Per alliberar espai, supri <translation id="3918972485393593704">Informa dels detalls a Google</translation> <translation id="3919145445993746351">Per accedir a les extensions des de tots els ordinadors, activa la sincronització</translation> <translation id="3920504717067627103">Normes de certificats</translation> -<translation id="392089482157167418">Activa ChromeVox (comentaris de veu)</translation> +<translation id="392089482157167418">Activa ChromeVox (avisos de veu)</translation> <translation id="3924145049010392604">Meta</translation> <translation id="3925573269917483990">Càmera:</translation> <translation id="3925842537050977900">No el fixis al prestatge</translation> @@ -2241,7 +2241,7 @@ en almenys <ph name="INSTALL_SIZE" /> d'espai lliure. Per alliberar espai, supri <translation id="4508051413094283164">Obre-ho tot en una finestra d'incògnit</translation> <translation id="4508265954913339219">S'ha produït un error en l'activació.</translation> <translation id="4508765956121923607">Visualitza l'&origen</translation> -<translation id="451407183922382411">Amb tecnologia de: <ph name="COMPANY_NAME" /></translation> +<translation id="451407183922382411">Amb la tecnologia de: <ph name="COMPANY_NAME" /></translation> <translation id="4514542542275172126">Configura un usuari supervisat nou</translation> <translation id="4514610446763173167">Reprodueix o posa en pausa el vídeo</translation> <translation id="451515744433878153">Suprimeix</translation> @@ -3604,7 +3604,7 @@ Assegureu-vos que no es pugui accedir a informació sensible.</translation> <translation id="6639554308659482635">Memòria SQLite</translation> <translation id="6641138807883536517">La contrasenya del mòdul de seguretat generada aleatòriament no està disponible. Això és normal després d'executar la funció Powerwash.</translation> <translation id="6643016212128521049">Esborra</translation> -<translation id="6644512095122093795">Pregunta'm si vull desar les contrasenyes</translation> +<translation id="6644512095122093795">Ofereix desar contrasenyes</translation> <translation id="6644846457769259194">S'està actualitzant el dispositiu (<ph name="PROGRESS_PERCENT" />)</translation> <translation id="6645437135153136856">El dispositiu Google Cloud Print seleccionat ja no és compatible.<ph name="BR" />Prova de configurar la impressora a la configuració del sistema de l'ordinador.</translation> <translation id="6647228709620733774">URL de revocació de l'entitat emissora de certificats de Netscape</translation> @@ -4014,7 +4014,7 @@ Assegureu-vos que no es pugui accedir a informació sensible.</translation> <translation id="7270858098575133036">Pregunta'm quan un lloc vulgui utilitzar els missatges exclusius del sistema per accedir a dispositius MIDI</translation> <translation id="7272674038937250585">No s'ha proporcionat cap descripció</translation> <translation id="7273110280511444812">darrera connexió el <ph name="DATE" /></translation> -<translation id="727441411541283857"><ph name="PERCENTAGE" />% - Temps restant fins que es completi la càrrega: <ph name="TIME" /></translation> +<translation id="727441411541283857"><ph name="PERCENTAGE" />% - <ph name="TIME" /> per completar la càrrega</translation> <translation id="727952162645687754">Error de baixada</translation> <translation id="7279701417129455881">Gestiona el bloqueig de galetes...</translation> <translation id="7280041992884344566">S'ha produït un error mentre Chrome cercava programari nociu</translation> @@ -5301,7 +5301,7 @@ Deseu el fitxer de clau en una ubicació segura. El necessitareu per crear versi <translation id="987897973846887088">No hi ha cap imatge disponible</translation> <translation id="988978206646512040">No es permeten les frases de contrasenya buides</translation> <translation id="992032470292211616">Les extensions, les aplicacions i els temes poden malmetre el vostre dispositiu. Confirmeu que voleu continuar?</translation> -<translation id="992592832486024913">Desactiva ChromeVox (comentaris de veu)</translation> +<translation id="992592832486024913">Desactiva ChromeVox (avisos de veu)</translation> <translation id="993540765962421562">Instal·lació en curs</translation> <translation id="994289308992179865">&Bucle</translation> <translation id="995782501881226248">YouTube</translation> diff --git a/chromium/chrome/app/resources/generated_resources_cs.xtb b/chromium/chrome/app/resources/generated_resources_cs.xtb index 9d0d64b95ef..10985d0ccb0 100644 --- a/chromium/chrome/app/resources/generated_resources_cs.xtb +++ b/chromium/chrome/app/resources/generated_resources_cs.xtb @@ -3824,7 +3824,7 @@ Pokud nezměníte výchozí nastavení, uživatel <ph name="USER_DISPLAY_NAME" / <translation id="6992554835374084304">Zapnout vylepšenou kontrolu pravopisu</translation> <translation id="6997642619627518301"><ph name="NAME_PH" /> – protokol aktivit</translation> <translation id="6997707937646349884">Ve vašich zařízeních:</translation> -<translation id="6998793565256476099">Zaregistrovat zařízení pro videokonference</translation> +<translation id="6998793565256476099">Zaregistrovat zařízení pro videohovory</translation> <translation id="7000347579424117903">Zahrňte klávesu Ctrl, Alt, nebo Hledat</translation> <translation id="7001036685275644873">Zálohování aplikací a souborů systému Linux</translation> <translation id="7002055706763150362">Aby bylo možné funkci Smart Lock pro Chromebook nastavit, Google musí zkontrolovat, zda jste to opravdu vy. Chcete-li začít, zadejte heslo.</translation> diff --git a/chromium/chrome/app/resources/generated_resources_da.xtb b/chromium/chrome/app/resources/generated_resources_da.xtb index 9bbbe2e2ac2..9534c5d4e4f 100644 --- a/chromium/chrome/app/resources/generated_resources_da.xtb +++ b/chromium/chrome/app/resources/generated_resources_da.xtb @@ -517,7 +517,7 @@ <translation id="1799071797295057738">Udvidelsen "<ph name="EXTENSION_NAME" />" blev automatisk deaktiveret.</translation> <translation id="1802687198411089702">Siden svarer ikke. Du kan vente på den eller afslutte.</translation> <translation id="1802931390041703523">Flash blev blokeret på denne side</translation> -<translation id="1803545009660609783">Genindstil</translation> +<translation id="1803545009660609783">Genoplær</translation> <translation id="1805472176602625930">Tryk på knappen på sikkerhedsnøglen</translation> <translation id="1805738995123446102">En fane i baggrunden anvender din mikrofon</translation> <translation id="1805822111539868586">Se visninger</translation> @@ -531,7 +531,7 @@ <translation id="1817871734039893258">Microsoft-filgendannelse</translation> <translation id="1818007989243628752">Slet adgangskoden til <ph name="USERNAME" /></translation> <translation id="1818913467757368489">Upload af logfil er i gang.</translation> -<translation id="1819721979226826163">Tryk på Appunderretninger > Google Play-tjenester.</translation> +<translation id="1819721979226826163">Tryk på Appnotifikationer > Google Play-tjenester.</translation> <translation id="1820028137326691631">Angiv adgangskode fra administrator</translation> <translation id="1822140782238030981">Er du allerede Chrome-bruger? Log ind</translation> <translation id="1826516787628120939">Kontrollerer</translation> @@ -2030,7 +2030,7 @@ Vil du starte <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation> <translation id="4107048419833779140">Identificer og fjern lagerenheder</translation> <translation id="4109135793348361820">Flyt vindue til <ph name="USER_NAME" /> (<ph name="USER_EMAIL" />)</translation> <translation id="4110490973560452005">[=1]1 download er fuldført: <ph name="FILE_NAME" />. Tryk på Shift+F6 for at skifte til downloadlinjen.</translation> -<translation id="4110895898888439383">Brug internettet i tilstanden Stor kontrast</translation> +<translation id="4110895898888439383">Brug internettet i tilstanden Høj kontrast</translation> <translation id="4115002065223188701">Netværket er uden for rækkevidde</translation> <translation id="4115080753528843955">Nogle indholdstjenester anvender unikke id'er for at give adgang til beskyttet indhold</translation> <translation id="4118579674665737931">Genstart enheden, og prøv igen.</translation> @@ -4470,7 +4470,7 @@ slettes permanent, når den administrerede bruger fjernes. Besøgte websites og <translation id="7957615753207896812">Åbn enhedens tastaturindstillinger</translation> <translation id="7959074893852789871">Filen indeholdt flere certifikater, hvoraf nogle af dem ikke blev importeret:</translation> <translation id="7961015016161918242">Aldrig</translation> -<translation id="7963826112438303517">Assistenten bruger disse optagelser og dine indtalte anmodninger til at oprette og opdatere din stemmemodel, som kun gemmes på enheder, hvor du har aktiveret Voice Match. Se eller genoptræn taleaktivitet i indstillingerne for Google Assistent.</translation> +<translation id="7963826112438303517">Assistenten bruger disse optagelser og dine indtalte anmodninger til at oprette og opdatere din stemmemodel, som kun gemmes på enheder, hvor du har aktiveret Voice Match. Se eller genoplær taleaktivitet i indstillingerne for Google Assistent.</translation> <translation id="7966241909927244760">K&opiér billedets webadresse</translation> <translation id="7968742106503422125">Læse og ændre data, du kopierer og indsætter</translation> <translation id="7968833647796919681">Aktivér registrering af data om ydeevne</translation> diff --git a/chromium/chrome/app/resources/generated_resources_de.xtb b/chromium/chrome/app/resources/generated_resources_de.xtb index 81d8e276455..44f574e0850 100644 --- a/chromium/chrome/app/resources/generated_resources_de.xtb +++ b/chromium/chrome/app/resources/generated_resources_de.xtb @@ -215,7 +215,7 @@ <translation id="131461803491198646">Heimnetzwerk, kein Roaming</translation> <translation id="1316136264406804862">Suche läuft...</translation> <translation id="1316495628809031177">Synchronisierung pausiert</translation> -<translation id="1322046419516468189">Gespeicherte Passwörter in Ihrem <ph name="SAVED_PASSWORDS_STORE" /> aufrufen und verwalten</translation> +<translation id="1322046419516468189">Gespeicherte Passwörter in Ihrem <ph name="SAVED_PASSWORDS_STORE" /> ansehen und verwalten</translation> <translation id="1326317727527857210">Melden Sie sich in Chrome an, um Tabs von Ihren anderen Geräten abzurufen.</translation> <translation id="1327074568633507428">Google Cloud Print-Drucker</translation> <translation id="1327977588028644528">Gateway</translation> @@ -237,7 +237,7 @@ <translation id="1361655923249334273">Nicht verwendet</translation> <translation id="1361872463926621533">Ton beim Start abspielen</translation> <translation id="1364702626840264065">{NUM_TABS,plural, =1{Tab schließen}other{Tabs schließen}}</translation> -<translation id="1366177842110999534">Linux-Tools, -Editoren und -IDEs auf Ihrem <ph name="DEVICE_TYPE" /> ausführen. <a target="_blank" href="<ph name="URL" />">Weitere Informationen</a></translation> +<translation id="1366177842110999534">Sie können auf Ihrem <ph name="DEVICE_TYPE" /> Linux-Tools, -Editoren und -IDEs nutzen. <a target="_blank" href="<ph name="URL" />">Weitere Informationen</a></translation> <translation id="1367951781824006909">Datei auswählen</translation> <translation id="1371301976177520732">Von all Ihren Geräten auf Lesezeichen, Passwörter, den Verlauf und andere Funktionen zugreifen</translation> <translation id="1372841398847029212">Mit meinem Konto synchronisieren</translation> @@ -284,7 +284,7 @@ <translation id="1430915738399379752">Drucken</translation> <translation id="1432581352905426595">Suchmaschinen verwalten</translation> <translation id="1433811987160647649">Vor dem Zugriff nachfragen</translation> -<translation id="1434696352799406980">Mit dieser Funktion werden Ihre "Beim Start"-Seite, Ihre Suchmaschine, die "Neuer Tab"-Seite und angeheftete Tabs zurückgesetzt. Außerdem werden alle Erweiterungen deaktiviert und temporäre Daten wie Cookies gelöscht. Ihre Lesezeichen, der Verlauf und gespeicherte Passwörter werden nicht gelöscht.</translation> +<translation id="1434696352799406980">Mit dieser Funktion werden Ihre "Beim Start"-Seite, Ihre Suchmaschine, die "Neuer Tab"-Seite und angepinnte Tabs zurückgesetzt. Außerdem werden alle Erweiterungen deaktiviert und temporäre Daten wie Cookies gelöscht. Ihre Lesezeichen, der Verlauf und gespeicherte Passwörter werden nicht gelöscht.</translation> <translation id="1434886155212424586">Die "Neuer Tab"-Seite ist die Startseite.</translation> <translation id="1436671784520050284">Einrichtung fortsetzen</translation> <translation id="1436784010935106834">Entfernt</translation> @@ -785,7 +785,7 @@ <translation id="2220529011494928058">Problem melden</translation> <translation id="2220572644011485463">PIN oder Passwort</translation> <translation id="2224444042887712269">Inhaber dieser Einstellung ist <ph name="OWNER_EMAIL" />.</translation> -<translation id="2224471211857467033">Bedienungshilfeereignisse</translation> +<translation id="2224471211857467033">Bedienungshilfen</translation> <translation id="2224551243087462610">Ordnername bearbeiten</translation> <translation id="2226449515541314767">Dieser Website wurde keine vollständige Kontrolle über MIDI-Geräte gewährt.</translation> <translation id="2226720438730111184">Sagen Sie uns, was los ist</translation> @@ -1147,7 +1147,7 @@ <translation id="2771268254788431918">Mobile Daten aktiviert</translation> <translation id="2771816809568414714">Käse</translation> <translation id="2772936498786524345">Ninja</translation> -<translation id="2773288106548584039">Unterstützung für ältere Browser</translation> +<translation id="2773288106548584039">Unterstützung älterer Browser</translation> <translation id="2773802008104670137">Diese Art von Datei kann Schaden auf Ihrem Computer anrichten.</translation> <translation id="2775104091073479743">Fingerabdrücke bearbeiten</translation> <translation id="2776441542064982094">Im Netzwerk wurden keine Geräte zum Registrieren gefunden. Wenn Ihr Gerät eingeschaltet und mit dem Internet verbunden ist, registrieren Sie es entsprechend der Anleitung des zugehörigen Gerätehandbuchs.</translation> @@ -1208,7 +1208,7 @@ <translation id="2861301611394761800">Systemupdate abgeschlossen. Starten Sie das System jetzt neu.</translation> <translation id="2861941300086904918">Sicherheitsmanager für native Clients</translation> <translation id="2864601841139725659">Profilbild festlegen</translation> -<translation id="2867768963760577682">In angeheftetem Tab öffnen</translation> +<translation id="2867768963760577682">In angepinntem Tab öffnen</translation> <translation id="2868746137289129307">Diese Erweiterung ist veraltet und wurde aufgrund der Unternehmensrichtlinie deaktiviert. Die Erweiterung kann automatisch aktiviert werden, wenn eine neuere Version verfügbar ist.</translation> <translation id="2870560284913253234">Website</translation> <translation id="2870909136778269686">Wird aktualisiert…</translation> @@ -2005,7 +2005,7 @@ Möchten Sie <ph name="CONTROL_PANEL_APPLET_NAME" /> starten?</translation> <translation id="4087089424473531098">Die folgende Erweiterung wurde erstellt: <ph name="EXTENSION_FILE" /></translation> -<translation id="4087470595660267445">Installieren Sie Apps und Spiele aus Google Play auf Ihrem Chromebook. <a target="_blank" href="<ph name="URL" />">Weitere Informationen</a></translation> +<translation id="4087470595660267445">Hier finden Sie Apps und Spiele für Ihr Chromebook. <a target="_blank" href="<ph name="URL" />">Weitere Informationen</a></translation> <translation id="4088095054444612037">Für Gruppe akzeptieren</translation> <translation id="4089235344645910861">Einstellungen gespeichert. Synchronisation gestartet.</translation> <translation id="4090103403438682346">Bestätigten Zugriff aktivieren</translation> @@ -3290,7 +3290,7 @@ Möchten Sie <ph name="CONTROL_PANEL_APPLET_NAME" /> starten?</translation> <translation id="6137767437444130246">Nutzerzertifikat</translation> <translation id="6138680304137685902">X9.62-ECDSA-Signatur mit SHA-384</translation> <translation id="6141988275892716286">Download bestätigen</translation> -<translation id="6143186082490678276">Get Help</translation> +<translation id="6143186082490678276">Hilfe</translation> <translation id="6144938890088808325">Bei der Verbesserung von Chromebooks helfen</translation> <translation id="6147020289383635445">Druckvorschau fehlgeschlagen</translation> <translation id="614940544461990577">Versuchen Sie Folgendes:</translation> @@ -3769,7 +3769,7 @@ Möchten Sie <ph name="CONTROL_PANEL_APPLET_NAME" /> starten?</translation> <translation id="6911324888870229398">Die Netzwerkverbindung wurde unterbrochen. Bitte überprüfen Sie Ihre Verbindung oder stellen Sie eine Verbindung zu einem anderen WLAN her.</translation> <translation id="6911734910326569517">Speicherbedarf</translation> <translation id="6914783257214138813">Ihre Passwörter sind für jeden zugänglich, der die exportierte Passwortdatei aufrufen kann.</translation> -<translation id="6915804003454593391">Nutzer:</translation> +<translation id="6915804003454593391">Nutzer: </translation> <translation id="6916590542764765824">Erweiterungen verwalten</translation> <translation id="6920989436227028121">In normalem Tab öffnen</translation> <translation id="6921104647315081813">Aktivitäten löschen</translation> @@ -5049,7 +5049,7 @@ Andere Personen mit langsamen Verbindungen sehen Ihre Inhalte möglicherweise ni <translation id="8868626022555786497">Wird verwendet</translation> <translation id="8870318296973696995">Startseite</translation> <translation id="8870413625673593573">Kürzlich geschlossen</translation> -<translation id="8871551568777368300">Vom Administrator angeheftet</translation> +<translation id="8871551568777368300">Vom Administrator angepinnt</translation> <translation id="8871696467337989339">Sie verwenden ein nicht unterstütztes Befehlszeilen-Flag: <ph name="BAD_FLAG" />. Dadurch werden Stabilität und Sicherheit beeinträchtigt.</translation> <translation id="8871974300055371298">Inhaltseinstellungen</translation> <translation id="8872155268274985541">Ungültige Manifestdatei für externes Kiosk-Update gefunden. Die Kiosk-App konnte nicht aktualisiert werden. Bitte entfernen Sie den USB-Stick.</translation> @@ -5208,7 +5208,7 @@ Andere Personen mit langsamen Verbindungen sehen Ihre Inhalte möglicherweise ni <translation id="9115675100829699941">&Lesezeichen</translation> <translation id="9116465289595958864">Zuletzt geändert</translation> <translation id="9116799625073598554">Notizen-App</translation> -<translation id="9121814364785106365">In angeheftetem Tab öffnen</translation> +<translation id="9121814364785106365">In angepinntem Tab öffnen</translation> <translation id="9124003689441359348">Hier werden gespeicherte Passwörter angezeigt</translation> <translation id="9125466540846359910"><ph name="LICENSE_TYPE" /> (<ph name="LICENSE_COUNT" /> verbleibend)</translation> <translation id="9128870381267983090">Mit Netzwerk verbinden</translation> diff --git a/chromium/chrome/app/resources/generated_resources_es-419.xtb b/chromium/chrome/app/resources/generated_resources_es-419.xtb index e3296b4f52d..23a0931e6bd 100644 --- a/chromium/chrome/app/resources/generated_resources_es-419.xtb +++ b/chromium/chrome/app/resources/generated_resources_es-419.xtb @@ -101,7 +101,7 @@ <translation id="1140746652461896221">Bloquear contenido en cualquier página que visites</translation> <translation id="1143142264369994168">Firmante del certificado</translation> <translation id="1145292499998999162">Complemento bloqueado</translation> -<translation id="1145532888383813076">Busca en tu dispositivo, la Web y las apps.</translation> +<translation id="1145532888383813076">Busca en el dispositivo, la Web y las apps.</translation> <translation id="114721135501989771">Obtén las mejores funciones de Google en Chrome</translation> <translation id="1149401351239820326">Mes de vencimiento</translation> <translation id="1150565364351027703">Gafas de sol</translation> @@ -334,7 +334,7 @@ <translation id="1510785804673676069">Si utilizas un servidor proxy, comprueba la configuración de proxy o comunícate con el administrador de red para asegurarte de que el servidor proxy funcione. Si crees que no necesitas un servidor proxy, modifica la <ph name="LINK_START" />configuración de proxy<ph name="LINK_END" />.</translation> <translation id="1512210426710821809">La única forma de deshacer esta acción es volver a instalar <ph name="IDS_SHORT_PRODUCT_OS_NAME" /></translation> <translation id="151501797353681931">Importar de Safari</translation> -<translation id="1521442365706402292">Gestionar certificados</translation> +<translation id="1521442365706402292">Administrar certificados</translation> <translation id="152234381334907219">Nunca guardado</translation> <translation id="1524430321211440688">Teclado</translation> <translation id="1524563461097350801">No, gracias</translation> @@ -507,7 +507,7 @@ <translation id="1776883657531386793"><ph name="OID" />: <ph name="INFO" /></translation> <translation id="1779652936965200207">Ingresa esta clave de acceso en "<ph name="DEVICE_NAME" />":</translation> <translation id="1781291988450150470">PIN actual</translation> -<translation id="1781502536226964113">Abrir la página de Nueva pestaña</translation> +<translation id="1781502536226964113">Abrir una pestaña nueva</translation> <translation id="1781771911845953849">Cuentas y sincronización</translation> <translation id="1782196717298160133">Buscando el teléfono</translation> <translation id="1784849162047402014">El dispositivo tiene poco espacio en el disco</translation> @@ -2010,7 +2010,7 @@ <translation id="4087470595660267445">Instala apps y juegos de Google Play en tu Chromebook. <a target="_blank" href="<ph name="URL" />">Más información</a></translation> <translation id="4088095054444612037">Aceptar la invitación realizada al grupo</translation> <translation id="4089235344645910861">Se guardó la configuración y comenzó la sincronización.</translation> -<translation id="4090103403438682346">Habilita el acceso verificado.</translation> +<translation id="4090103403438682346">Habilitar el acceso verificado</translation> <translation id="4090947011087001172">¿Quieres restablecer los permisos del sitio <ph name="SITE" />?</translation> <translation id="4091434297613116013">hojas de papel</translation> <translation id="4093955363990068916">Archivo local:</translation> @@ -2070,7 +2070,7 @@ <translation id="4184885522552335684">Arrastrar para mover una pantalla</translation> <translation id="4194570336751258953">Habilitar el punteo para hacer clic</translation> <translation id="4195643157523330669">Abrir en una pestaña nueva</translation> -<translation id="4195814663415092787">Continúa desde donde abandonaste</translation> +<translation id="4195814663415092787">Continuar la sesión desde donde la dejaste</translation> <translation id="4198146608511578238">Mantén presionado el ícono de Launcher para hablar con el Asistente de Google.</translation> <translation id="4200689466366162458">Palabras personalizadas</translation> <translation id="4200983522494130825">Nueva pes&taña</translation> @@ -2416,7 +2416,7 @@ <translation id="4780321648949301421">Guardar página como...</translation> <translation id="4785719467058219317">Estás usando una llave de seguridad que no se registró con este sitio web</translation> <translation id="4788092183367008521">Comprueba la conexión de red y vuelve a intentarlo.</translation> -<translation id="4790972063719531840">Envía a Google datos de uso y diagnóstico automáticamente</translation> +<translation id="4790972063719531840">Enviar automáticamente datos de uso y diagnóstico a Google</translation> <translation id="4792711294155034829">Informar de un &problema...</translation> <translation id="4795022432560487924">Envía datos de uso y diagnóstico. Para ayudar a mejorar la experiencia de Android de tu hijo, envía a Google datos de diagnóstico y uso de dispositivos y apps de forma automática. Esta información no se usará para identificar a tu hijo y ayudará a lograr la estabilidad de las apps y el sistema, entre otras mejoras. Algunos datos agregados también ayudarán a las apps y los socios de Google, como los desarrolladores de Android. El propietario controla esta configuración. Es posible que el propietario decida enviar a Google datos de uso y diagnóstico de este dispositivo. Si habilitaste la "Actividad de web y de aplicaciones adicional" en la Cuenta de Google de tu hijo, es posible que se almacenen estos datos en esa cuenta. <ph name="BEGIN_LINK1" />Más información<ph name="END_LINK1" /></translation> <translation id="479536056609751218">Página web, HTML únicamente</translation> @@ -2732,7 +2732,7 @@ <translation id="5288678174502918605">Volv&er a abrir una pestaña cerrada</translation> <translation id="52912272896845572">Archivo de clave privada no válido</translation> <translation id="529175790091471945">Formatear este dispositivo</translation> -<translation id="5293170712604732402">Permite restaurar la configuración a los valores predeterminados originales</translation> +<translation id="5293170712604732402">Restaurar la configuración a los valores predeterminados originales</translation> <translation id="5297082477358294722">Se guardó la contraseña. Puedes ver y administrar las contraseñas guardadas en tu <ph name="SAVED_PASSWORDS_STORE" />.</translation> <translation id="5298219193514155779">Tema creado por</translation> <translation id="5299109548848736476">No realizar seguimiento</translation> @@ -3100,7 +3100,7 @@ <translation id="5857090052475505287">Nueva carpeta</translation> <translation id="5858490737742085133">Terminal</translation> <translation id="585979798156957858">Tecla externa Meta</translation> -<translation id="5860033963881614850">Desactivado</translation> +<translation id="5860033963881614850">No</translation> <translation id="5860491529813859533">Activar</translation> <translation id="5860494867054883682">Actualizando tu dispositivo al canal <ph name="CHANNEL_NAME" /> (<ph name="PROGRESS_PERCENT" />)</translation> <translation id="5862109781435984885">Mostrar herramientas de la pluma stylus en la biblioteca</translation> @@ -3139,7 +3139,7 @@ Exponente público (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bits): <ph name="EXPONENT_HEX_DUMP" /></translation> -<translation id="5916664084637901428">Activada</translation> +<translation id="5916664084637901428">Sí</translation> <translation id="59174027418879706">Activado</translation> <translation id="5920543303088087579">El administrador inhabilitó la conexión a esta red</translation> <translation id="5920835625712313205">Herramienta de escritura de imagen del Sistema operativo Chrome</translation> @@ -4221,7 +4221,7 @@ <translation id="7607002721634913082">Detenido</translation> <translation id="7607274158153386860">Solicitar sitio para tablet</translation> <translation id="7609148976235050828">Conéctate a Internet y vuelve a intentarlo.</translation> -<translation id="7611008212562900400">Busca tu dispositivo, apps, Web…</translation> +<translation id="7611008212562900400">Busca en el dispositivo, las apps, la Web…</translation> <translation id="7616214729753637086">Registrando dispositivo…</translation> <translation id="7617366389578322136">Conectando a "<ph name="DEVICE_NAME" />"</translation> <translation id="7621382409404463535">El sistema no pudo guardar la configuración del dispositivo.</translation> @@ -4309,7 +4309,7 @@ <translation id="7746457520633464754">Para detectar apps y sitios peligrosos, Chrome envía a Google URL de algunas páginas que visitas, información limitada sobre el sistema y contenido de algunas páginas</translation> <translation id="7750228210027921155">Pantalla en pantalla</translation> <translation id="7751260505918304024">Mostrar todo</translation> -<translation id="7754704193130578113">Pedir ubicación antes de la descarga</translation> +<translation id="7754704193130578113">Preguntar ubicación antes de descargar</translation> <translation id="7758143121000533418">Family Link</translation> <translation id="7758450972308449809">Ajusta los límites de la pantalla</translation> <translation id="7760004034676677601">¿Esta es la página de inicio que esperabas ver?</translation> diff --git a/chromium/chrome/app/resources/generated_resources_es.xtb b/chromium/chrome/app/resources/generated_resources_es.xtb index 4099eb47f6c..7928460b2b9 100644 --- a/chromium/chrome/app/resources/generated_resources_es.xtb +++ b/chromium/chrome/app/resources/generated_resources_es.xtb @@ -237,7 +237,7 @@ <translation id="1361655923249334273">Sin utilizar</translation> <translation id="1361872463926621533">Reproducir sonido al iniciar</translation> <translation id="1364702626840264065">{NUM_TABS,plural, =1{Cerrar pestaña}other{Cerrar pestañas}}</translation> -<translation id="1366177842110999534">Permite ejecutar herramientas, editores e IDEs de Linux en tu <ph name="DEVICE_TYPE" />. <a target="_blank" href="<ph name="URL" />">Más información</a></translation> +<translation id="1366177842110999534">Ejecuta herramientas, editores e IDEs de Linux en tu <ph name="DEVICE_TYPE" />. <a target="_blank" href="<ph name="URL" />">Más información</a></translation> <translation id="1367951781824006909">Selecciona un archivo</translation> <translation id="1371301976177520732">Tus marcadores, contraseñas, historial y mucho más en todos tus dispositivos</translation> <translation id="1372841398847029212">Sincronizar con tu cuenta</translation> @@ -646,7 +646,7 @@ <translation id="1994173015038366702">URL del sitio</translation> <translation id="1997484222658892567"><ph name="URL" /> quiere almacenar datos de gran tamaño de forma permanente en tu ordenador local</translation> <translation id="1997616988432401742">Tus certificados</translation> -<translation id="1999115740519098545">Al abrir el navegador...</translation> +<translation id="1999115740519098545">Al abrir</translation> <translation id="2000419248597011803">Envía algunas cookies y búsquedas de la barra de direcciones y del cuadro de búsqueda a tu buscador predeterminado</translation> <translation id="2002109485265116295">En tiempo real</translation> <translation id="2003130567827682533">Para activar los datos de "<ph name="NAME" />", conéctate a una red Wi‑Fi</translation> @@ -683,7 +683,7 @@ <translation id="2075474481720804517"><ph name="BATTERY_PERCENTAGE" />% de batería</translation> <translation id="2075959085554270910">Te permite habilitar o inhabilitar las funciones tocar para hacer clic y tocar y arrastrar</translation> <translation id="2076269580855484719">Ocultar este complemento</translation> -<translation id="2076672359661571384">Medio (recomendado)</translation> +<translation id="2076672359661571384">Mediano (recomendado)</translation> <translation id="2077129598763517140">Utilizar aceleración por hardware cuando esté disponible</translation> <translation id="2078019350989722914">Avisar antes de salir (<ph name="KEY_EQUIVALENT" />)</translation> <translation id="2079053412993822885">Si eliminas uno de tus propios certificados, ya no podrás utilizarlo para identificarte.</translation> @@ -1700,7 +1700,7 @@ Si no cambias la configuración predeterminada, <ph name="USER_DISPLAY_NAME" /> <translation id="3650952250015018111">Permitir que "<ph name="APP_NAME" />" acceda a:</translation> <translation id="3651488188562686558">Se desconectará de la red Wi-Fi</translation> <translation id="3652817283076144888">Inicializando</translation> -<translation id="3653160965917900914">Archivos compartidos en red</translation> +<translation id="3653160965917900914">Sistema de archivos compartidos en red</translation> <translation id="3653842108912548333">Accede al Asistente con Voice Match</translation> <translation id="3653999333232393305">Seguir permitiendo que <ph name="HOST" /> acceda al micrófono</translation> <translation id="3654045516529121250">Leer tu configuración de accesibilidad</translation> @@ -1807,7 +1807,7 @@ Si no cambias la configuración predeterminada, <ph name="USER_DISPLAY_NAME" /> <translation id="3792890930871100565">Desconectar impresoras</translation> <translation id="3792938779249970121">Seleccionar una cuenta</translation> <translation id="3796648294839530037">Redes favoritas:</translation> -<translation id="3797739167230984533">Tu <ph name="BEGIN_LINK" /><ph name="DEVICE_TYPE" /> lo administra<ph name="END_LINK" /> tu organización</translation> +<translation id="3797739167230984533">Tu organización <ph name="BEGIN_LINK" />administra este <ph name="DEVICE_TYPE" /><ph name="END_LINK" />.</translation> <translation id="3797900183766075808">&Buscar <ph name="SEARCH_TERMS" /> en <ph name="SEARCH_ENGINE" /></translation> <translation id="3798449238516105146">Versión</translation> <translation id="3799201711591988491">{COUNT,plural, =0{&Abrir todas}=1{&Abrir marcador}other{&Abrir (#)}}</translation> @@ -2300,7 +2300,7 @@ Si no cambias la configuración predeterminada, <ph name="USER_DISPLAY_NAME" /> <translation id="4593021220803146968">&Ir a <ph name="URL" /></translation> <translation id="4595560905247879544">Únicamente el administrador (<ph name="CUSTODIAN_NAME" />) puede modificar las aplicaciones y las extensiones.</translation> <translation id="4596295440756783523">Tienes certificados registrados que identifican a estos servidores</translation> -<translation id="4598556348158889687">Administración del almacenamiento</translation> +<translation id="4598556348158889687">Gestión del almacenamiento</translation> <translation id="4598776695426288251">Wi-Fi disponible a través de varios dispositivos</translation> <translation id="4602466770786743961">Permitir que <ph name="HOST" /> acceda siempre a la cámara y al micrófono</translation> <translation id="4608500690299898628">&Buscar...</translation> @@ -2905,7 +2905,7 @@ Si no cambias la configuración predeterminada, <ph name="USER_DISPLAY_NAME" /> <translation id="5554720593229208774">Entidad emisora de certificados de correo electrónico</translation> <translation id="5556206011531515970">Haz clic en Siguiente para seleccionar el navegador predeterminado.</translation> <translation id="5556459405103347317">Volver a cargar</translation> -<translation id="5557991081552967863">Usar Wi-Fi en suspensión</translation> +<translation id="5557991081552967863">Mantener Wi-Fi activado en suspensión</translation> <translation id="5558129378926964177">&Ampliar</translation> <translation id="55601339223879446">Ajusta los extremos de tu escritorio en la pantalla</translation> <translation id="5562781907504170924">Esta pestaña está conectada a un dispositivo Bluetooth.</translation> @@ -2938,7 +2938,7 @@ Si no cambias la configuración predeterminada, <ph name="USER_DISPLAY_NAME" /> <translation id="5600706100022181951">Para descargar la actualización se necesitan <ph name="UPDATE_SIZE_MB" /> MB de datos móviles. ¿Quieres continuar?</translation> <translation id="5601503069213153581">PIN</translation> <translation id="5602765853043467355">Borrar marcadores, historial, contraseñas, etc. de este dispositivo</translation> -<translation id="5605623530403479164">Otros motores de búsqueda</translation> +<translation id="5605623530403479164">Otros buscadores</translation> <translation id="5605758115928394442">Se ha enviado una notificación a tu teléfono para confirmar que eres tú.</translation> <translation id="5608580678041221894">Toca las siguientes teclas para ajustar o mover la zona para recortar</translation> <translation id="5609231933459083978">Parece que la aplicación no es válida.</translation> @@ -3010,7 +3010,7 @@ Si no cambias la configuración predeterminada, <ph name="USER_DISPLAY_NAME" /> <translation id="5709557627224531708">Establecer Google Chrome como navegador predeterminado</translation> <translation id="5711983031544731014">No se puede realizar el desbloqueo. Introduce tu contraseña.</translation> <translation id="5715711091495208045">Agente de complementos: <ph name="PLUGIN_NAME" /></translation> -<translation id="5719603411793408026">Motores de búsqueda predeterminados</translation> +<translation id="5719603411793408026">Buscadores predeterminados</translation> <translation id="5720705177508910913">Usuario actual</translation> <translation id="572155275267014074">Configuración de Android</translation> <translation id="5722930212736070253">¡Vaya! Zip Archiver ha detectado un error.</translation> @@ -3139,7 +3139,7 @@ Si no cambias la configuración predeterminada, <ph name="USER_DISPLAY_NAME" /> Exponente público (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bits): <ph name="EXPONENT_HEX_DUMP" /></translation> -<translation id="5916664084637901428">Activar</translation> +<translation id="5916664084637901428">Activado</translation> <translation id="59174027418879706">Habilitada</translation> <translation id="5920543303088087579">El administrador ha inhabilitado la conexión a esta red</translation> <translation id="5920835625712313205">Escritor de imágenes del sistema de Chrome OS</translation> @@ -3880,7 +3880,7 @@ Exponente público (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bits): <translation id="7072010813301522126">Nombre del acceso directo</translation> <translation id="707392107419594760">Selecciona el teclado:</translation> <translation id="7075513071073410194">PKCS #1 MD5 con cifrado RSA</translation> -<translation id="7075625805486468288">Administrar configuración y certificados HTTPS/SSL</translation> +<translation id="7075625805486468288">Administra la configuración y los certificados HTTPS/SSL</translation> <translation id="7076293881109082629">Iniciando sesión</translation> <translation id="7077829361966535409">No se ha podido cargar la página de inicio de sesión con la configuración de proxy actual. <ph name="GAIA_RELOAD_LINK_START" />Intenta iniciar sesión de nuevo<ph name="GAIA_RELOAD_LINK_END" /> o utiliza otra <ph name="PROXY_SETTINGS_LINK_START" />configuración de proxy<ph name="PROXY_SETTINGS_LINK_END" />.</translation> <translation id="7078120482318506217">Todas las redes</translation> @@ -4221,7 +4221,7 @@ Exponente público (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bits): <translation id="7607002721634913082">En pausa</translation> <translation id="7607274158153386860">Solicitar sitio para tablets</translation> <translation id="7609148976235050828">Conéctate a Internet y vuelve a intentarlo.</translation> -<translation id="7611008212562900400">Busca tu dispositivo, aplicaciones, páginas web…</translation> +<translation id="7611008212562900400">Busca en tu dispositivo, aplicaciones, páginas web…</translation> <translation id="7616214729753637086">Registrando dispositivo...</translation> <translation id="7617366389578322136">Se está estableciendo conexión con "<ph name="DEVICE_NAME" />"</translation> <translation id="7621382409404463535">El sistema no ha podido guardar la configuración del dispositivo.</translation> @@ -4493,7 +4493,7 @@ Exponente público (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bits): <translation id="7986295104073916105">Leer y cambiar la configuración de contraseñas guardadas</translation> <translation id="7987814697832569482">Conectar siempre a través de esta VPN</translation> <translation id="798835209536175951">Envía y recibe mensajes de texto con tu Chromebook. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation> -<translation id="7988355189918024273">Habilitar funciones de accesibilidad</translation> +<translation id="7988355189918024273">Habilita las funciones de accesibilidad</translation> <translation id="7994702968232966508">Método EAP</translation> <translation id="7997826902155442747">Prioridad del proceso</translation> <translation id="7999229196265990314">Se han creado los siguientes archivos: @@ -4808,7 +4808,7 @@ Guarda tu archivo de clave en un lugar seguro, ya que lo necesitarás para crear <translation id="8502536196501630039">Para utilizar aplicaciones de Google Play, antes debes restaurar tus aplicaciones. Es posible que se haya perdido información.</translation> <translation id="8503813439785031346">Nombre de usuario</translation> <translation id="850875081535031620">No se ha encontrado software dañino</translation> -<translation id="8509177919508253835">Restablecer las llaves de seguridad y crear los PIN</translation> +<translation id="8509177919508253835">Restablece las llaves de seguridad y crea los PIN</translation> <translation id="8509646642152301857">Se ha producido un error al descargar el diccionario del corrector ortográfico.</translation> <translation id="8512476990829870887">Finalizar proceso</translation> <translation id="851263357009351303">Permitir siempre que <ph name="HOST" /> muestre imágenes</translation> @@ -4835,7 +4835,7 @@ Guarda tu archivo de clave en un lugar seguro, ya que lo necesitarás para crear <translation id="85486688517848470">Mantén pulsada la tecla de búsqueda para cambiar el comportamiento de las teclas de la fila superior</translation> <translation id="8549457076611407730">{NUM_ITEMS,plural, =1{1 elemento}other{# elementos}}</translation> <translation id="8551388862522347954">Licencias</translation> -<translation id="8553342806078037065">Administrar otros usuarios</translation> +<translation id="8553342806078037065">Gestionar otros usuarios</translation> <translation id="8554899698005018844">Sin idioma</translation> <translation id="855773602626431402">Se ha evitado que un complemento no incluido en la zona de pruebas se ejecutara en esta página.</translation> <translation id="8557930019681227453">Archivo de manifiesto</translation> @@ -4901,7 +4901,7 @@ Guarda tu archivo de clave en un lugar seguro, ya que lo necesitarás para crear <translation id="8659875081143553823">Un segundo</translation> <translation id="8661290697478713397">Abrir enlace en una ventana de incó&gnito</translation> <translation id="8662671328352114214">Unirse a una red <ph name="TYPE" /></translation> -<translation id="8662795692588422978">Otros usuarios</translation> +<translation id="8662795692588422978">Usuarios</translation> <translation id="8662811608048051533">Cierra tu sesión en la mayoría de los sitios web.</translation> <translation id="8662911384982557515">Cambiar página de inicio por: <ph name="HOME_PAGE" /></translation> <translation id="8662978096466608964">Chrome no puede establecer el fondo de pantalla.</translation> @@ -5263,7 +5263,7 @@ Guarda tu archivo de clave en un lugar seguro, ya que lo necesitarás para crear <translation id="930268624053534560">Marcas de tiempo detalladas</translation> <translation id="932327136139879170">Página principal</translation> <translation id="932508678520956232">No se ha podido iniciar la impresión.</translation> -<translation id="93343527085570547">Accede a la <ph name="BEGIN_LINK1" />página Ayuda de Legal<ph name="END_LINK1" /> para solicitar cambios de contenido por motivos legales. Parte de la información del sistema y de la cuenta se enviará a Google, que la utilizará para solucionar problemas técnicos y mejorar sus servicios, de acuerdo con su <ph name="BEGIN_LINK2" />política de privacidad<ph name="END_LINK2" /> y <ph name="BEGIN_LINK3" />condiciones del servicio<ph name="END_LINK3" />.</translation> +<translation id="93343527085570547">Accede a la <ph name="BEGIN_LINK1" />página Ayuda de Legal<ph name="END_LINK1" /> para solicitar cambios de contenido por motivos legales. Parte de la información del sistema y de la cuenta se enviará a Google, que la utilizará para solucionar problemas técnicos y mejorar sus servicios, de acuerdo con su <ph name="BEGIN_LINK2" />Política de Privacidad<ph name="END_LINK2" /> y <ph name="BEGIN_LINK3" />Condiciones del Servicio<ph name="END_LINK3" />.</translation> <translation id="93393615658292258">Solo contraseña</translation> <translation id="934503638756687833">Si es necesario, también se eliminarán elementos que no se incluyan aquí. Consulta más información sobre la <a href="<ph name="URL" />">protección contra software no deseado</a> en el informe de privacidad de Chrome.</translation> <translation id="935490618240037774">Tus marcadores, historial, contraseñas y otros ajustes se sincronizarán con tu cuenta de Google para que puedas utilizarlos en todos tus dispositivos.</translation> diff --git a/chromium/chrome/app/resources/generated_resources_fa.xtb b/chromium/chrome/app/resources/generated_resources_fa.xtb index 7972f6bdf6d..894b9d47567 100644 --- a/chromium/chrome/app/resources/generated_resources_fa.xtb +++ b/chromium/chrome/app/resources/generated_resources_fa.xtb @@ -2721,7 +2721,7 @@ <translation id="5280174558369304332">افزونههایی که برداشته میشود:</translation> <translation id="5280426389926346830">میانبر ایجاد شود؟</translation> <translation id="528208740344463258">برای بارگیری و استفاده از برنامههای Android، ابتدا باید این بهروزرسانی الزامی را نصب کنید. وقتی <ph name="DEVICE_TYPE" /> شما درحال بهروزرسانی است، نمیتوانید از آن استفاده کنید. پس از تکمیل نصب، <ph name="DEVICE_TYPE" /> بازراهاندازی میشود.</translation> -<translation id="5282733140964383898">فعال کردن «ردیابی نشود» بدین معناست که درخواستی در ترافیک مرور شما لحاظ خواهد شد. هر گونه تأثیر به این بستگی دارد که وبسایت به درخواست پاسخ میدهد یا خیر و درخواست چگونه تفسیر میشود. بهعنوان مثال، ممکن است برخی از وبسایتها با نشان دادن آگهیهایی که براساس وبسایتهای دیگری که بازدید کردهاید، نیستند به این درخواست پاسخ دهند. بسیاری از وبسایتها همچنان دادههای مرور شما را جمعآوری و استفاده خواهند کرد، بهعنوان مثال برای بهبود ایمنی، برای ارائه محتوا، سرویسها، آگهیها و توصیههای مربوط به وبسایتهایشان و برای تولید آمار گزارش. <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation> +<translation id="5282733140964383898">فعال کردن «ردیابی نشود» به این معنی است که درخواستی به ترافیک مرور شما اضافه خواهد شد. نتیجه به این بستگی دارد که وبسایت به درخواست پاسخ بدهد یا نه و درخواست چگونه تفسیر شود. مثلاً ممکن است برخی از وبسایتها با نشان دادن آگهیهایی که براساس وبسایتهای دیگری نیستند که بازدید کردهاید به این درخواست پاسخ دهند. بسیاری از وبسایتها همچنان دادههای مرور شما را جمعآوری و استفاده خواهند کرد، مثلاً برای بهبود امنیت، برای ارائه محتوا، سرویسها، آگهیها و توصیههای مربوط به وبسایتهایشان و برای تولید آمار گزارش. <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation> <translation id="5283049351426079445">مطمئن هستید میخواهید<ph name="APP_NAME" /> را نصب کنید؟</translation> <translation id="5283677936944177147">متأسفیم! سیستم مدل دستگاه یا شماره سریال را تعیین نکرد.</translation> <translation id="5284445933715251131">ادامه بارگیری</translation> diff --git a/chromium/chrome/app/resources/generated_resources_fi.xtb b/chromium/chrome/app/resources/generated_resources_fi.xtb index 7a1de01bf40..fca35d630d7 100644 --- a/chromium/chrome/app/resources/generated_resources_fi.xtb +++ b/chromium/chrome/app/resources/generated_resources_fi.xtb @@ -1080,7 +1080,7 @@ <translation id="2663302507110284145">Kieli</translation> <translation id="2665394472441560184">Lisää uusi sana</translation> <translation id="2665717534925640469">Tämä sivu on nyt koko ruudun kokoinen ja on poistanut hiiren osoittimen käytöstä.</translation> -<translation id="2665919335226618153">Voi räkä! Alustuksen aikana tapahtui virhe.</translation> +<translation id="2665919335226618153">Harmin paikka! Alustuksen aikana tapahtui virhe.</translation> <translation id="2666990579225592931">Avaa vierasikkuna</translation> <translation id="2667463864537187133">Hallitse oikeinkirjoituksen tarkistusta</translation> <translation id="2670102641511624474"><ph name="APP_NAME" /> jakaa Chrome-välilehden.</translation> @@ -1407,7 +1407,7 @@ <translation id="3170072451822350649">Voit myös ohittaa sisäänkirjautumisen ja <ph name="LINK_START" />selata vierailijana<ph name="LINK_END" />.</translation> <translation id="3172045848207518317">Sivusto käyttää videotuloa</translation> <translation id="3177909033752230686">Sivun kieli:</translation> -<translation id="3181954750937456830">Selaussuoja (Suojaa sinua ja laitettasi vaarallisilta sivustoilta)</translation> +<translation id="3181954750937456830">Selaussuoja (suojaa sinua ja laitettasi vaarallisilta sivustoilta)</translation> <translation id="3182749001423093222">Oikeinkirjoituksen tarkistus</translation> <translation id="3183139917765991655">Profiilien tuoja</translation> <translation id="3188465121994729530">Liukuva keskiarvo</translation> @@ -2463,7 +2463,7 @@ <translation id="4863769717153320198">Näyttää olevan <ph name="WIDTH" /> x <ph name="HEIGHT" /> (oletus)</translation> <translation id="4864369630010738180">Kirjaudutaan...</translation> <translation id="486635084936119914">Avaa tietyn tyyppiset tiedostot automaattisesti latauksen jälkeen.</translation> -<translation id="4869142322204669043">Google voi räätälöidä palveluitaan (esimerkiksi <ph name="IDS_SHORT_PRODUCT_NAME" />, Kääntäjä, Haku ja mainokset) avaamiesi sivustojen sisällön sekä selaus- ja muun toimintasi perusteella. Voit muuttaa tätä koska tahansa asetuksista.</translation> +<translation id="4869142322204669043">Google voi personoida palveluitaan (esimerkiksi <ph name="IDS_SHORT_PRODUCT_NAME" />, Kääntäjä, Haku ja mainokset) avaamiesi sivustojen sisällön sekä selaus- ja muun toimintasi perusteella. Voit muuttaa tätä koska tahansa asetuksista.</translation> <translation id="48704129375571883">Lisää ominaisuuksia</translation> <translation id="4870758487381879312">Syötä ylläpitäjältä saatu salasana hakeaksesi kokoonpanotiedot</translation> <translation id="4870903493621965035">Ei laitepareja</translation> @@ -3014,7 +3014,7 @@ <translation id="5719603411793408026">Oletushakukoneet</translation> <translation id="5720705177508910913">Nykyinen käyttäjä</translation> <translation id="572155275267014074">Android-asetukset</translation> -<translation id="5722930212736070253">Voi räkä! Zip Archiver havaitsi virheen.</translation> +<translation id="5722930212736070253">Harmin paikka! Zip Archiver havaitsi virheen.</translation> <translation id="572328651809341494">Hiljattain suljetut välilehdet</translation> <translation id="5723508132121499792">Ei käynnissä olevia taustasovelluksia</translation> <translation id="5727728807527375859">Laajennukset, sovellukset ja teemat saattavat vahingoittaa tietokonettasi. Haluatko varmasti jatkaa?</translation> @@ -3389,7 +3389,7 @@ Julkinen eksponentti (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bittiä): <translation id="6285120108426285413"><ph name="FILE_NAME" /> on harvinainen ladattava tiedosto, ja se voi olla vaarallinen.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Verkossasi on uusi tulostin}other{Verkossasi on uusia tulostimia}}</translation> <translation id="6286708577777130801">Tallennettujen salasanojen tiedot</translation> -<translation id="6289452883081499048">Play ja muut räätälöidyt Google-palvelut</translation> +<translation id="6289452883081499048">Play ja muut personoidut Google-palvelut</translation> <translation id="6290556621549272952">Tämän ominaisuuden avulla voit katsella Chromiumin sisältöä television ja muiden laitteiden näytöltä.</translation> <translation id="6291949900244949761">Kysy aina, kun sivusto pyytää USB-laitteen käyttölupaa (suositus)</translation> <translation id="6291953229176937411">Näytä Finderi&ssä</translation> @@ -3736,7 +3736,7 @@ Julkinen eksponentti (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bittiä): <translation id="6841186874966388268">Virheet</translation> <translation id="6843423766595476978">Ok Google on valmiina</translation> <translation id="6845038076637626672">Avaa suuressa koossa</translation> -<translation id="6845325883481699275">Auttaa parantamaan Chromen suojausta.</translation> +<translation id="6845325883481699275">Auta parantamaan Chromen suojausta</translation> <translation id="6848388270925200958">Joitakin korttejasi voi juuri nyt käyttää vain tällä laitteella</translation> <translation id="6851497530878285708">Sovellus käytössä</translation> <translation id="6853388645642883916">Päivittäjä on lepotilassa</translation> diff --git a/chromium/chrome/app/resources/generated_resources_fil.xtb b/chromium/chrome/app/resources/generated_resources_fil.xtb index fce6529bd2d..390a0b88cdc 100644 --- a/chromium/chrome/app/resources/generated_resources_fil.xtb +++ b/chromium/chrome/app/resources/generated_resources_fil.xtb @@ -788,7 +788,7 @@ <translation id="2220529011494928058">Mag-ulat ng isyu</translation> <translation id="2220572644011485463">PIN o password</translation> <translation id="2224444042887712269">Ang setting na ito ay kay <ph name="OWNER_EMAIL" />.</translation> -<translation id="2224471211857467033">Mga Event sa Pagiging Accessible</translation> +<translation id="2224471211857467033">Mga Event sa Accessibility</translation> <translation id="2224551243087462610">I-edit ang pangalan ng folder</translation> <translation id="2226449515541314767">Na-block ang site na ito mula sa pagkakaroon ng buong kontrol sa mga MIDI device.</translation> <translation id="2226720438730111184">Sabihin sa Amin Kung Ano ang Nangyayari</translation> diff --git a/chromium/chrome/app/resources/generated_resources_fr.xtb b/chromium/chrome/app/resources/generated_resources_fr.xtb index 974411ea3aa..d62bff44943 100644 --- a/chromium/chrome/app/resources/generated_resources_fr.xtb +++ b/chromium/chrome/app/resources/generated_resources_fr.xtb @@ -1389,7 +1389,7 @@ <translation id="3150927491400159470">Actualisation forcée</translation> <translation id="315116470104423982">Données mobiles</translation> <translation id="3151539355209957474">Heure de début</translation> -<translation id="3151562827395986343">Effacer l'historique, les cookies, vider le cache, etc.</translation> +<translation id="3151562827395986343">Effacer l'historique, supprimer les cookies, vider le cache, etc.</translation> <translation id="3151786313568798007">Orientation</translation> <translation id="3153862085237805241">Enregistrer la carte</translation> <translation id="3154351730702813399">L'administrateur de cet appareil peut contrôler votre activité de navigation.</translation> @@ -1893,7 +1893,7 @@ <translation id="3909477809443608991"><ph name="URL" /> souhaite lire un contenu protégé. L'identité de votre appareil sera validée par Google et peut être accessible à ce site.</translation> <translation id="3909791450649380159">Cou&per</translation> <translation id="3911073280391218446"><ph name="USER_DISPLAY_NAME" /> (nom utilisé sur cet appareil)</translation> -<translation id="3911824782900911339">Page Nouvel onglet</translation> +<translation id="3911824782900911339">Page "Nouvel onglet"</translation> <translation id="3915280005470252504">Recherche vocale</translation> <translation id="3916445069167113093">Ce type de fichier risque d'endommager votre ordinateur. Voulez-vous vraiment enregistrer <ph name="FILE_NAME" /> ?</translation> <translation id="3918972485393593704">Envoyer les informations à Google</translation> @@ -3144,7 +3144,7 @@ Assurez-vous de ne pas dévoiler d'informations sensibles.</translation> Exposant public (<ph name="PUBLIC_EXPONENT_NUM_BITS" /> bits) : <ph name="EXPONENT_HEX_DUMP" /></translation> <translation id="5916664084637901428">Activé</translation> -<translation id="59174027418879706">Activée</translation> +<translation id="59174027418879706">Activé</translation> <translation id="5920543303088087579">Votre administrateur a désactivé la connexion à ce réseau</translation> <translation id="5920835625712313205">Écriture des images système Chrome OS</translation> <translation id="5924047253200400718">Obtenir de l'aide<ph name="SCANNING_STATUS" /></translation> @@ -3775,7 +3775,7 @@ Assurez-vous de ne pas dévoiler d'informations sensibles.</translation> <translation id="6911324888870229398">Connexion réseau perdue. Veuillez vérifier votre connexion ou essayer un autre réseau Wi-Fi.</translation> <translation id="6911734910326569517">Espace mémoire utilisé</translation> <translation id="6914783257214138813">Toute personne ayant accès au fichier exporté pourra voir ces mots de passe.</translation> -<translation id="6915804003454593391">Utilisateur :</translation> +<translation id="6915804003454593391">Utilisateur : </translation> <translation id="6916590542764765824">Gérer les extensions</translation> <translation id="6920989436227028121">Ouvrir dans un onglet standard</translation> <translation id="6921104647315081813">Effacer les activités</translation> @@ -4055,7 +4055,7 @@ Assurez-vous de ne pas dévoiler d'informations sensibles.</translation> <translation id="7329154610228416156">La connexion a échoué, car elle a été configurée pour utiliser une URL non sécurisée (<ph name="BLOCKED_URL" />). Veuillez contacter votre administrateur.</translation> <translation id="7334190995941642545">Smart Lock n'est pas disponible pour l'instant. Veuillez réessayer plus tard.</translation> <translation id="7334274148831027933">Activer la loupe ancrée</translation> -<translation id="7335974957018254119">Utiliser le correcteur orthographique pour</translation> +<translation id="7335974957018254119">Utiliser le correcteur orthographique</translation> <translation id="7338630283264858612">Le numéro de série de l'appareil n'est pas valide.</translation> <translation id="7339763383339757376">PKCS #7, certificat unique</translation> <translation id="7339785458027436441">Vérifier l'orthographe lors de la frappe</translation> @@ -4310,7 +4310,7 @@ Assurez-vous de ne pas dévoiler d'informations sensibles.</translation> <translation id="7732111077498238432">Le réseau est soumis à des règles</translation> <translation id="7737238973539693982">Effacer Linux (Bêta)</translation> <translation id="7740996059027112821">Standard</translation> -<translation id="7746457520633464754">Pour détecter les applications et les sites dangereux, Chrome envoie à Google les URL de certaines pages que vous consultez, ainsi que des informations système limitées et le contenu de certaines pages.</translation> +<translation id="7746457520633464754">Pour détecter les applications et sites dangereux, Chrome envoie à Google l'URL de certaines pages que vous consultez, ainsi que des informations système limitées et une partie du contenu de certaines pages.</translation> <translation id="7750228210027921155">Mode PIP (Picture-in-Picture)</translation> <translation id="7751260505918304024">Tout afficher</translation> <translation id="7754704193130578113">Toujours demander où enregistrer les fichiers</translation> @@ -5125,7 +5125,7 @@ Conservez votre fichier de clé en lieu sûr. Vous en aurez besoin lors de la cr <translation id="897414447285476047">Le fichier de destination est incomplet en raison d'un problème de connexion.</translation> <translation id="8976520271376534479">Flash a été bloqué sur cette page.</translation> <translation id="8977811652087512276">Mot de passe incorrect ou fichier corrompu</translation> -<translation id="8978154919215542464">Activé – Tout synchroniser</translation> +<translation id="8978154919215542464">Activée – Tout synchroniser</translation> <translation id="897939795688207351">Sur <ph name="ORIGIN" /></translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> – Plantage</translation> <translation id="8986362086234534611">Retirer</translation> diff --git a/chromium/chrome/app/resources/generated_resources_hi.xtb b/chromium/chrome/app/resources/generated_resources_hi.xtb index 2580fc38e56..910b51f3cd5 100644 --- a/chromium/chrome/app/resources/generated_resources_hi.xtb +++ b/chromium/chrome/app/resources/generated_resources_hi.xtb @@ -37,7 +37,7 @@ <translation id="1046635659603195359">ऐसा लगता है कि आपने पहले ही किसी दूसरे डिवाइस पर अपनी Google Assistant की मदद से Voice Match सेट अप कर लिया है. इस डिवाइस पर आवाज़ का नमूना बनाने के लिए इन पुरानी रिकॉर्डिंग का इस्तेमाल किया जा सकता है. इसमें एक मिनट से भी कम समय लगेगा.</translation> <translation id="1047431265488717055">लिंक ले&ख को कॉपी करें</translation> <translation id="1047726139967079566">इस पेज को बुकमार्क करें...</translation> -<translation id="1048286738600630630">प्रदर्शन</translation> +<translation id="1048286738600630630">डिसप्ले</translation> <translation id="1049743911850919806">गुप्त</translation> <translation id="1049795001945932310">&भाषा सेटिंग</translation> <translation id="1054153489933238809">मूल &चित्र को नए टैब में खोलें</translation> @@ -510,7 +510,7 @@ <translation id="1776883657531386793"><ph name="OID" />: <ph name="INFO" /></translation> <translation id="1779652936965200207">कृपया यह पासकुंजी "<ph name="DEVICE_NAME" />" पर दर्ज करें:</translation> <translation id="1781291988450150470">मौजूदा पिन</translation> -<translation id="1781502536226964113">नया टैब पेज खोलें</translation> +<translation id="1781502536226964113">'नया टैब' पेज खोलें</translation> <translation id="1781771911845953849">खाते और सिंक</translation> <translation id="1782196717298160133">आपका फ़ोन ढूंढा जा रहा है</translation> <translation id="1784849162047402014">डिवाइस पर डिस्क स्पेस कम है</translation> @@ -606,7 +606,7 @@ <translation id="1921584744613111023"><ph name="DPI" /> dpi</translation> <translation id="1924559387127953748"><ph name="IDS_SHORT_PRODUCT_NAME" /> में Google की स्मार्ट सुविधाएं पाएं</translation> <translation id="192494336144674234">इसके साथ खोलें</translation> -<translation id="1925021887439448749">कस्टम वेब पता डालें</translation> +<translation id="1925021887439448749">पसंद के मुताबिक वेब पता डालें</translation> <translation id="1926339101652878330">ये सेटिंग एंटरप्राइज़ नीति द्वारा नियंत्रित होती हैं. कृपया ज़्यादा जानकारी के लिए अपने नियंत्रक से संपर्क करें.</translation> <translation id="1927632033341042996">उंगली <ph name="NEW_FINGER_NUMBER" /></translation> <translation id="1928202201223835302">पुराना पिन डालें</translation> @@ -646,7 +646,7 @@ <translation id="1994173015038366702">साइट URL</translation> <translation id="1997484222658892567"><ph name="URL" /> आपके स्थानीय कंप्यूटर पर हमेशा के लिए बड़ी मात्रा में डेटा संग्रहित करना चाहता है</translation> <translation id="1997616988432401742">आपके प्रमाणपत्र</translation> -<translation id="1999115740519098545">प्रारंभ करने पर</translation> +<translation id="1999115740519098545">शुरुआत करने पर</translation> <translation id="2000419248597011803">'पता बार' और 'खोज बॉक्स' की कुछ कुकी और खोजों को आपके डिफ़ॉल्ट खोज इंजन पर भेजा जाता है</translation> <translation id="2002109485265116295">रीयल-टाइम</translation> <translation id="2003130567827682533">'<ph name="NAME" />' डेटा चालू करने के लिए, सबसे पहले किसी वाई-फ़ाई नेटवर्क से जुड़ें</translation> @@ -771,7 +771,7 @@ <translation id="2200356397587687044">जारी रखने के लिए Chrome को अनुमति चाहिए</translation> <translation id="220138918934036434">छुपाएं बटन</translation> <translation id="2202898655984161076">प्रिंटरों को सूचीबद्ध करने में कोई समस्या थी. आपके प्रिंटरों में से कुछ <ph name="CLOUD_PRINT_NAME" /> के साथ सफलतापूर्वक पंजीकृत नहीं हो सके हैं.</translation> -<translation id="2203682048752833055"><ph name="BEGIN_LINK" />पता बार<ph name="END_LINK" /> में उपयोग किया गया खोज इंजन</translation> +<translation id="2203682048752833055"><ph name="BEGIN_LINK" />पता बार<ph name="END_LINK" /> में इस्तेमाल किया गया सर्च इंजन</translation> <translation id="2204034823255629767">आप जो कुछ भी लिखते हैं उसे पढ़ें और बदलें</translation> <translation id="220792432208469595">इस्तेमाल और निदान से जुड़ा डेटा भेजें. यह डिवाइस फ़िलहाल Google को निदान, डिवाइस, और ऐप्लिकेशन के इस्तेमाल से जुड़ा डेटा अपने आप भेज रहा है. यह सिस्टम और ऐप्लिकेशन की स्थिरता और दूसरे सुधारों में मदद करेगा. कुछ एग्रीगेट डेटा Google ऐप्लिकेशन और पार्टनर, जैसे कि Android डेवलपरों की भी मदद करेगा. यह सेटिंग डिवाइस के मालिक ने लागू की है. अगर आपकी दूसरी 'वेब और ऐप्लिकेशन गतिविधि' सेटिंग चालू है, तो यह डेटा आपके Google खाते में सेव किया जा सकता है. <ph name="BEGIN_LINK1" />ज़्यादा जानें<ph name="END_LINK1" /></translation> <translation id="220858061631308971">कृपया इस पिन कोड को "<ph name="DEVICE_NAME" />" पर दर्ज करें:</translation> @@ -942,7 +942,7 @@ <translation id="2464089476039395325">HTTP प्रॉक्सी</translation> <translation id="2468205691404969808">आपकी पसंद याद रखने के लिए कुकी का इस्तेमाल करती है, भले ही आप उन पेजों पर नहीं जाते</translation> <translation id="2468402215065996499">तमागोची</translation> -<translation id="2469375675106140201">स्पेलिंग जाँचने वाली सुविधा पसंद के मुताबिक बनाएं</translation> +<translation id="2469375675106140201">वर्तनी जांचने की सुविधा को पसंद के मुताबिक बनाएं</translation> <translation id="247051149076336810">फ़ाइल शेयर यूआरएल</translation> <translation id="2470702053775288986">असमर्थित एक्सटेंशन अक्षम</translation> <translation id="2473195200299095979">इस पेज का अनुवाद करें</translation> @@ -1012,7 +1012,7 @@ <translation id="2558896001721082624">सिस्टम मेन्यू में सुलभता विकल्प हमेशा दिखाएं</translation> <translation id="2562743677925229011"><ph name="SHORT_PRODUCT_NAME" /> में प्रवेश नहीं है</translation> <translation id="2564520396658920462">AppleScript के ज़रिए JavaScript काम में लेने की सुविधा बंद है. उसे चालू करने के लिए, मेन्यू बार से, View > Developer > Allow JavaScript from Apple Events पर जाएं. ज़्यादा जानकारी के लिए: https://support.google.com/chrome/?p=applescript</translation> -<translation id="2564653188463346023">स्पेलिंग की बेहतर जांच</translation> +<translation id="2564653188463346023">वर्तनी की बेहतर जांच</translation> <translation id="2566124945717127842">अपने <ph name="IDS_SHORT_PRODUCT_NAME" /> डिवाइस को बिल्कुल नए जैसा रीसेट करने के लिए पावरवॉश करें.</translation> <translation id="2568774940984945469">जानकारी बार कंटेनर</translation> <translation id="257088987046510401">थीम</translation> @@ -1141,7 +1141,7 @@ <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> में साइन इन करें</translation> <translation id="2749881179542288782">वर्तनी के साथ व्याकरण की जाँच करें</translation> <translation id="2751739896257479635">EAP चरण 2 प्रमाणीकरण</translation> -<translation id="2755367719610958252">एक्सेस-योग्यता सुविधाएं प्रबंधित करें</translation> +<translation id="2755367719610958252">सुलभता सुविधाएं प्रबंधित करें</translation> <translation id="275662540872599901">स्क्रीन बंद है</translation> <translation id="2761898608071930085">किसी दूसरे खाते का इस्तेमाल करें</translation> <translation id="2762441749940182211">कैमरा ब्लॉक किया गया है</translation> @@ -1223,7 +1223,7 @@ <translation id="2874939134665556319">पिछला ट्रैक</translation> <translation id="2875698561019555027">(Chrome गड़बड़ी पृष्ठ)</translation> <translation id="2876336351874743617">उंगली दो</translation> -<translation id="2876369937070532032">आपकी सुरक्षा को ख़तरा होने पर उन पेज के यूआरएल भेजता है जिन पर आप Google के ज़रिए जाते हैं.</translation> +<translation id="2876369937070532032">आपकी सुरक्षा को खतरा होने पर उन पेज के यूआरएल भेजे जाते हैं जिन पर आप Google के ज़रिए जाते हैं.</translation> <translation id="288042212351694283">अपने यूनीवर्सल सेकंड फ़ैक्टर डिवाइस एक्सेस करें</translation> <translation id="2881076733170862447">जब आप एक्सटेंशन को क्लिक करते हैं</translation> <translation id="2881966438216424900">अंतिम बार पहुंच प्राप्त करने की तारीख:</translation> @@ -1691,7 +1691,7 @@ <translation id="3630132874740063857">आपका फ़ोन</translation> <translation id="3630995161997703415">इस साइट को अपनी अलमारी में जोड़ें ताकि आप किसी भी समय इसका उपयोग कर सकें</translation> <translation id="3636096452488277381">कैसे हैं, <ph name="USER_GIVEN_NAME" />.</translation> -<translation id="3636766455281737684"><ph name="PERCENTAGE" />% - <ph name="TIME" /> शेष</translation> +<translation id="3636766455281737684"><ph name="PERCENTAGE" />% - <ph name="TIME" /> बाकी</translation> <translation id="3637682276779847508">अगर आप सही पिन अनलॉक कुंजी नहीं डाल पाते हैं तो आपका SIM कार्ड हमेशा के लिए अक्षम कर दिया जाएगा.</translation> <translation id="3640214691812501263"><ph name="USER_NAME" /> के लिए "<ph name="EXTENSION_NAME" />" को जोड़ें?</translation> <translation id="3640613767643722554">अपनी Assistant को आपकी आवाज़ पहचानना सिखाएं</translation> @@ -2072,7 +2072,7 @@ <translation id="4184885522552335684">कोई डिसप्ले एक जगह से दूसरी जगह ले जाने लिए खींचें और छोड़ें</translation> <translation id="4194570336751258953">क्लिक-के-लिए-टैप करना चालू करें</translation> <translation id="4195643157523330669">नए टैब में खोलें</translation> -<translation id="4195814663415092787">वहीं से जारी रखें जहां आपने छोड़ा था</translation> +<translation id="4195814663415092787">वहीं से जारी रखें जहां मैंने छोड़ा था</translation> <translation id="4198146608511578238">अपनी Google Assistant से बात करने के लिए बस 'लॉन्चरआइकॉन' दबाए रखें.</translation> <translation id="4200689466366162458">कस्टम शब्द</translation> <translation id="4200983522494130825">नया &टैब</translation> @@ -2302,7 +2302,7 @@ <translation id="4593021220803146968"><ph name="URL" /> पर &जाएं</translation> <translation id="4595560905247879544">ऐप्स और एक्सटेंशन केवल प्रबंधक (<ph name="CUSTODIAN_NAME" />) के द्वारा बदले जा सकते हैं.</translation> <translation id="4596295440756783523">इन सर्वर की पहचान करने वाले प्रमाणपत्र आपके रिकॉर्ड में हैं</translation> -<translation id="4598556348158889687">जगह प्रबंधन</translation> +<translation id="4598556348158889687">डिवाइस की मेमोरी का प्रबंधन</translation> <translation id="4598776695426288251">एक से ज़्यादा डिवाइस के ज़रिए वाई-फ़ाई उपलब्ध है</translation> <translation id="4602466770786743961"><ph name="HOST" /> को अपना कैमरा और माइक्रोफ़ोन हमेशा एक्सेस करने दें</translation> <translation id="4608500690299898628">&ढूंढें...</translation> @@ -2418,7 +2418,7 @@ <translation id="4780321648949301421">पेज को इस रूप में सेव करें...</translation> <translation id="4785719467058219317">आप एक ऐसी 'सुरक्षा चाबी' इस्तेमाल कर रहे हैं जिसे इस वेबसाइट पर रजिस्टर नहीं किया गया है</translation> <translation id="4788092183367008521">कृपया अपना नेटवर्क कनेक्शन जाँच लें और फिर से कोशिश करें.</translation> -<translation id="4790972063719531840">Google को गड़बड़ी और उपयोग संबंधी डेटा अपने आप भेजें</translation> +<translation id="4790972063719531840">Google को गड़बड़ी और इस्तेमाल से जुड़ा डेटा अपने आप भेजें</translation> <translation id="4792711294155034829">किसी समस्या की &रिपोर्ट करें...</translation> <translation id="4795022432560487924">इस्तेमाल और निदान से जुड़ा डेटा भेजें. Google को निदान, डिवाइस, और ऐप्लिकेशन के इस्तेमाल से जुड़ा डेटा अपने आप भेजकर, अपने बच्चे के Android अनुभव को बेहतर बनाने में मदद करें. इसका इस्तेमाल आपके बच्चे की पहचान करने के लिए नहीं किया जाएगा. यह सिस्टम और ऐप्लिकेशन की स्थिरता और दूसरे सुधारों में मदद करेगा. कुछ एग्रीगेट डेटा Google ऐप्लिकेशन और पार्टनर, जैसे कि Android डेवलपरों की भी मदद करेगा. यह सेटिंग डिवाइस के मालिक ने लागू की है. डिवाइस का मालिक यह चुन सकता है कि निदान और इस डिवाइस के इस्तेमाल से जुड़ा डेटा Google को भेजना है. अगर आपके बच्चे के लिए दूसरी 'वेब और ऐप्लिकेशन गतिविधि' सेटिंग चालू है, तो यह डेटा उसके Google खाते में सेव किया जा सकता है. <ph name="BEGIN_LINK1" />ज़्यादा जानें<ph name="END_LINK1" /></translation> <translation id="479536056609751218">वेबपेज, केवल HTML</translation> @@ -2808,7 +2808,7 @@ <translation id="5420438158931847627">लेख और इमेज का पैनापन तय करता है</translation> <translation id="5422221874247253874">एक्सेस पॉइंट</translation> <translation id="5422781158178868512">क्षमा करें, आपके बाह्य मेमोरी डिवाइस की पहचान नहीं हो सकी.</translation> -<translation id="5423829801105537712">स्पेलिंग जाँचने वाली बुनियादी सुविधा</translation> +<translation id="5423829801105537712">वर्तनी जांचने वाली बुनियादी सुविधा</translation> <translation id="5423849171846380976">सक्रिय हुआ</translation> <translation id="5425042808445046667">डाउनलोड करना जारी रखें</translation> <translation id="5425722269016440406">Smart Lock बंद करने के लिए आपको ऑनलाइन होना होगा क्योंकि यह सेटिंग आपके फ़ोन और अन्य डिवाइस से समन्वयित की जाती है. कृपया पहले किसी नेटवर्क से कनेक्ट करें.</translation> @@ -2840,7 +2840,7 @@ <translation id="5454166040603940656"><ph name="PROVIDER" /> के साथ</translation> <translation id="5457113250005438886">अमान्य</translation> <translation id="5457459357461771897">अपने कंप्यूटर से फ़ोटो, संगीत और दूसरे मीडिया पढ़ें और मिटाएं</translation> -<translation id="5457599981699367932">अतिथि के रूप में ब्राउज़ करें</translation> +<translation id="5457599981699367932">मेहमान के रूप में ब्राउज़ करें</translation> <translation id="5458998536542739734">लॉक स्क्रीन नोट</translation> <translation id="5463275305984126951"><ph name="LOCATION" /> का इंडेक्स</translation> <translation id="5463856536939868464">मेन्यू में बुकमार्क छुपे हुए हैं</translation> @@ -2907,7 +2907,7 @@ <translation id="5554720593229208774">ईमेल प्रमाणन प्राधिकरण</translation> <translation id="5556206011531515970">अपना डिफ़ॉल्ट ब्राउज़र चुनने के लिए अगला क्लिक करें.</translation> <translation id="5556459405103347317">फिर लोड करें</translation> -<translation id="5557991081552967863">प्रयोग में नहीं रहने के दौरान वाई-फ़ाई चालू रखें</translation> +<translation id="5557991081552967863">स्लीप मोड में भी वाई-फ़ाई चालू रखें</translation> <translation id="5558129378926964177">ज़ूम &इन करें</translation> <translation id="55601339223879446">डिसप्ले के भीतर अपने डेस्कटॉप की सीमाएं समायोजित करें</translation> <translation id="5562781907504170924">यह टैब किसी ब्लूटूथ डिवाइस से कनेक्ट है.</translation> @@ -2928,7 +2928,7 @@ <ph name="BEGIN_PARAGRAPH3" />सेटिंग > बेहतर > Google को निदान और इस्तेमाल का डेटा अपने आप भेजें पर जाकर मालिक इस सुविधा को नियंत्रित कर सकता है.<ph name="END_PARAGRAPH3" /> <ph name="BEGIN_PARAGRAPH4" />अगर आपकी वेब और ऐप्लिकेशन की और भी गतिविधि सेटिंग चालू है, तो यह डेटा आपके Google खाते में सेव हो सकता है. आप account.google.com पर अपना डेटा देख सकते हैं, उसे मिटा सकते हैं और अपने खाते की सेटिंग बदल सकते हैं.<ph name="END_PARAGRAPH4" /></translation> <translation id="5585118885427931890">बुकमार्क फ़ोल्डर नहीं बना सका.</translation> -<translation id="558563010977877295">विशिष्ट पेज या पेजों का समूह खोलें</translation> +<translation id="558563010977877295">कोई खास पेज या पेजों का समूह खोलें</translation> <translation id="5585912436068747822">फ़ॉर्मेटिंग विफल रही</translation> <translation id="5588033542900357244">(<ph name="RATING_COUNT" />)</translation> <translation id="558918721941304263">ऐप्लिकेशन लोड हो रहे हैं...</translation> @@ -3013,7 +3013,7 @@ <translation id="5711983031544731014">अनलॉक करने में असमर्थ है. अपना पासवर्ड डालें.</translation> <translation id="5715711091495208045">प्लग इन ब्रोकर: <ph name="PLUGIN_NAME" /></translation> <translation id="5719603411793408026">डिफ़ॉल्ट सर्च इंजन</translation> -<translation id="5720705177508910913">वर्तमान उपयोगकर्ता</translation> +<translation id="5720705177508910913">मौजूदा उपयोगकर्ता</translation> <translation id="572155275267014074">Android सेटिंग</translation> <translation id="5722930212736070253">हे भगवान! ज़िप आर्काइवर में गड़बड़ी आ गई.</translation> <translation id="572328651809341494">हाल ही के टैब</translation> @@ -3294,7 +3294,7 @@ <translation id="6137767437444130246">उपयोगकर्ता प्रमाणपत्र</translation> <translation id="6138680304137685902">SHA-384 के साथ X9.62 ECDSA हस्ताक्षर</translation> <translation id="6141988275892716286">डाउनलोड की पुष्टि करें</translation> -<translation id="6143186082490678276">सहायता प्राप्त करें</translation> +<translation id="6143186082490678276">सहायता पाएं</translation> <translation id="6144938890088808325">Chromebook को बेहतर बनाने में हमारी सहायता करें</translation> <translation id="6147020289383635445">प्रिंट की झलक नहीं देखी जा सकी.</translation> <translation id="614940544461990577">यह आज़माकर देखें:</translation> @@ -3325,7 +3325,7 @@ <translation id="6185132558746749656">डिवाइस स्थान</translation> <translation id="6195693561221576702">यह डिवाइस ऑफ़लाइन डेमो मोड में सेट अप नहीं किया जा सकता.</translation> <translation id="6196640612572343990">तीसरे पक्ष की कुकी ब्लॉक करें</translation> -<translation id="6196854373336333322">एक्सटेंशन "<ph name="EXTENSION_NAME" />" ने आपकी प्रॉक्सी सेटिंग पर नियंत्रण कर लिया है, जिसका अर्थ है कि यह ऑनलाइन किए जाने वाले काम को बदल सकता है, रोक सकता है या उसे छिप कर सुन सकता है. अगर आप सुनिश्चित नहीं हैं कि यह बदलाव क्यों हुआ है, तो संभवत: आप उसे नहीं चाहते हैं.</translation> +<translation id="6196854373336333322">एक्सटेंशन "<ph name="EXTENSION_NAME" />" ने आपकी प्रॉक्सी सेटिंग पर नियंत्रण कर लिया है, जिसका अर्थ है कि यह ऑनलाइन किए जाने वाले काम को बदल सकता है, रोक सकता है या उसे छिप कर सुन सकता है. अगर आप पक्का नहीं हैं कि यह बदलाव क्यों हुआ है, तो संभवत: आप उसे नहीं चाहते हैं.</translation> <translation id="6198102561359457428">साइन आउट करें और फिर से साइन इन करें...</translation> <translation id="6198252989419008588">पिन बदलें</translation> <translation id="6201792273624501289">Linux ऐप्लिकेशन</translation> @@ -3533,7 +3533,7 @@ <translation id="6514010653036109809">उपलब्ध डिवाइस:</translation> <translation id="6514565641373682518">इस पेज ने आपका माउस कर्सर अक्षम कर दिया है.</translation> <translation id="6518014396551869914">इमेज को कॉपी करें</translation> -<translation id="6518133107902771759">सत्यापित करें</translation> +<translation id="6518133107902771759">पुष्टि करें</translation> <translation id="651942933739530207">क्या आप चाहते हैं कि <ph name="APP_NAME" /> आपकी स्क्रीन और ऑडियो आउटपुट शेयर करे?</translation> <translation id="6519437681804756269">[<ph name="TIMESTAMP" />] <ph name="FILE_INFO" /> @@ -3546,10 +3546,10 @@ <translation id="6532101170117367231">Google डिस्क में सेव करें</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />ध्यान दें:<ph name="END_BOLD" /> सिर्फ़ तभी चालू करें जब आपको पता हो कि आप क्या कर रहे हैं या अगर आप से ऐसा करने के लिए कहा गया हो, क्योंकि डेटा के संग्रह से परफ़ॉर्मेंस में कमी आ सकती है.</translation> <translation id="6541638731489116978">इस साइट को आपके हलचल पकड़ने वाले सेंसर एक्सेस करने से रोक दिया गया है.</translation> -<translation id="654233263479157500">मार्गदर्शक त्रुटियों के समाधान में सहायता के लिए किसी वेब सेवा का उपयोग करें</translation> +<translation id="654233263479157500">नेविगेशन की गड़बड़ियों को ठीक करने में मदद के लिए किसी वेब सेवा का इस्तेमाल करें</translation> <translation id="6544215763872433504">Google का वेब ब्राउज़र, आपके लिए</translation> <translation id="6545665334409411530">दोहराने की दर</translation> -<translation id="6545834809683560467">ऐप्लिकेशन चलाने के साधन के खोज बॉक्स या पता में लिखे गए URL और खोजों को पूरा करने में सहायता के लिए पूर्वानुमान सेवा का उपयोग करें</translation> +<translation id="6545834809683560467">सर्च के लिए शब्द या वाक्यांश और ऐप्लिकेशन लॉन्च करने वाले सर्च बॉक्स या पता बार में लिखे गए यूआरएल को पूरा करने में मदद करने के लिए पूर्वानुमान सेवा का इस्तेमाल करें</translation> <translation id="6545867563032584178">Mac सिस्टम प्राथमिकताओं में माइक्रोफ़ोन बंद किया गया है</translation> <translation id="6547316139431024316">इस एक्सटेंशन के लिए फिर से चेतावनी न दें</translation> <translation id="6547354035488017500">डिवाइस की मेमोरी से कम से कम 512 एमबी जगह खाली करें. ऐसा न करने पर आपका डिवाइस काम नहीं करेगा. जगह खाली करने के लिए, डिवाइस की मेमोरी से फ़ाइलें मिटाएं.</translation> @@ -3740,7 +3740,7 @@ <translation id="6851497530878285708">ऐप्लिकेशन चालू</translation> <translation id="6853388645642883916">अपडेटर निष्क्रिय</translation> <translation id="68541483639528434">अन्य टैब बंद करें</translation> -<translation id="6856623341093082836">अपनी टचस्क्रीन की सटीकता सेट करें और एडजस्ट करें</translation> +<translation id="6856623341093082836">अपनी टचस्क्रीन को सटीक सेट करें और एडजस्ट करें</translation> <translation id="6857699260879628349">कॉन्फ़िगरेशन की जानकारी पाएं</translation> <translation id="6860097299815761905">प्रॉक्सी सेटिंग...</translation> <translation id="6860427144121307915">टैब में खोलें</translation> @@ -3816,7 +3816,7 @@ <translation id="6979440798594660689">म्यूट करें (डिफ़ॉल्ट)</translation> <translation id="6979737339423435258">हमेशा</translation> <translation id="6980462514016882061">खोज, विज्ञापन और अन्य Google सेवाओं को मनमुताबिक बनाने के लिए Google आपके ब्राउज़िंग इतिहास का उपयोग कर सकता है</translation> -<translation id="6981982820502123353">पहुंच क्षमता</translation> +<translation id="6981982820502123353">सुलभता</translation> <translation id="6983783921975806247">पंजीकृत OID</translation> <translation id="6984299437918708277">साइन इन स्क्रीन पर अपने खाते के लिए दिखाई जाने वाली तस्वीर चुनें</translation> <translation id="6985235333261347343">Microsoft Key Recovery Agent</translation> @@ -4053,7 +4053,7 @@ <translation id="7329154610228416156">साइन इन नहीं हो पाया क्योंकि उसे गैर-सुरक्षित URL (<ph name="BLOCKED_URL" />) का इस्तेमाल करने के लिए कॉन्फ़िगर किया गया था. कृपया अपने एडमिन से संपर्क करें.</translation> <translation id="7334190995941642545">Smart Lock वर्तमान में अनुपलब्ध है. कृपया बाद में फिर से प्रयास करें.</translation> <translation id="7334274148831027933">सामग्री को बड़ा दिखाने की डॉक की गई सुविधा चालू करें</translation> -<translation id="7335974957018254119">इसके लिए स्पेलिंग जाँचने वाली सुविधा का इस्तेमाल करें</translation> +<translation id="7335974957018254119">इसके लिए वर्तनी जांचने वाली सुविधा का इस्तेमाल करें</translation> <translation id="7338630283264858612">डिवाइस क्रमांक गलत है.</translation> <translation id="7339763383339757376">PKCS #7, एकल प्रमाणपत्र</translation> <translation id="7339785458027436441">लिखते समय वर्तनी की जाँच करें</translation> @@ -4130,7 +4130,7 @@ <translation id="7453008956351770337">इस प्रिंटर को चुनकर, आप नीचे दिए गए एक्सटेंशन को अपने प्रिंटर के लिए एक्सेस करने की अनुमति दे रहे हैं:</translation> <translation id="7456142309650173560">डेव</translation> <translation id="7456847797759667638">स्थान खोलें...</translation> -<translation id="7458168200501453431">स्पेलिंग जाँचने वाली उसी सुविधा का इस्तेमाल करती है जिसका इस्तेमाल 'Google सर्च' में किया जाता है. आप ब्राउज़र में जो भी लेख लिखते हैं उसे Google को भेजा जाता है.</translation> +<translation id="7458168200501453431">वर्तनी जांचने के लिए उसी सुविधा का इस्तेमाल करती है जिसका इस्तेमाल 'Google सर्च' में किया जाता है. आप ब्राउज़र में जो कुछ भी लिखते हैं उसे Google को भेजा जाता है.</translation> <translation id="7461924472993315131">पिन करें</translation> <translation id="746216226901520237">अगली बार, आपका फ़ोन आपके <ph name="DEVICE_TYPE" /> को अनलॉक कर देगा. आप सेटिंग में जाकर Smart Lock को बंद कर सकते हैं</translation> <translation id="7463006580194749499">व्यक्ति जोड़ें</translation> @@ -4298,7 +4298,7 @@ <translation id="7716781361494605745">Netscape प्रमाणन प्राधिकरण नीति यूआरएल</translation> <translation id="7717014941119698257">डाउनलोड हो रहा है: <ph name="STATUS" /></translation> <translation id="7717845620320228976">देखें कि अपडेट उपलब्ध हैं या नहीं</translation> -<translation id="7719367874908701697">पृष्ठ ज़ूम</translation> +<translation id="7719367874908701697">पेज ज़ूम</translation> <translation id="7721179060400456005">विंडो को प्रदर्शन फैलाने दें</translation> <translation id="7722040605881499779">अपडेट करना ज़रूरी है: <ph name="NECESSARY_SPACE" /></translation> <translation id="7724603315864178912">काटें</translation> @@ -4308,7 +4308,7 @@ <translation id="7732111077498238432">नेटवर्क, नीति से नियंत्रित है</translation> <translation id="7737238973539693982">Linux (बीटा) मिटाएं</translation> <translation id="7740996059027112821">मानक</translation> -<translation id="7746457520633464754">खतरनाक ऐप्लिकेशन और साइट का पता लगाने के लिए Chrome ऐसे कुछ पेज का यूआरएल भेजता है जिन पर आप जाते हैं, सिस्टम की जानकारी की सीमा तय कर देता है. साथ ही, कुछ पेज सामग्री को Google को भेज देता है</translation> +<translation id="7746457520633464754">खतरनाक ऐप्लिकेशन और साइटों का पता लगाने के लिए, Chrome ऐसे कुछ पेज का यूआरएल Google को भेजता है जिन पर आप जाते हैं. साथ ही, वह सिस्टम की सीमित जानकारी और पेज की कुछ सामग्री भी Google को भेजता है</translation> <translation id="7750228210027921155">पिक्चर में पिक्चर</translation> <translation id="7751260505918304024">सभी दिखाएं</translation> <translation id="7754704193130578113">डाउनलोड करने से पहले, हर फ़ाइल को सेव करने की जगह के बारें में पूछें</translation> @@ -4318,7 +4318,7 @@ <translation id="7764225426217299476">पता जोड़ें</translation> <translation id="7764256770584298012"><ph name="DOWNLOAD_DOMAIN" /> से <ph name="DOWNLOAD_RECEIVED" /></translation> <translation id="7765158879357617694">ले जाएं</translation> -<translation id="7766807826975222231">भ्रमण करें</translation> +<translation id="7766807826975222231">एक झलक देखें</translation> <translation id="7766838926148951335">अनुमतियां स्वीकार करें</translation> <translation id="7769672763586021400">मॉडल आईडी</translation> <translation id="7771452384635174008">लेआउट</translation> @@ -4714,7 +4714,7 @@ <translation id="833986336429795709">यह लिंक खोलने के लिए कोई ऐप्लिकेशन चुनें</translation> <translation id="8342861492835240085">कोई संग्रह चुनें</translation> <translation id="8343956361364550006">सबसे बढ़िया वीडियो या ऐनिमेशन के लिए उच्च बैंडविड्थ का इस्तेमाल करें. हो सकता है कि धीमे कनेक्शन वाले अन्य लोगों को आपकी सामग्री दिखाई न दे.</translation> -<translation id="8351419472474436977">इस एक्सटेंशन ने आपकी प्रॉक्सी सेटिंग पर नियंत्रण कर लिया है, जिसका अर्थ है कि यह ऑनलाइन किए जाने वाले काम को बदल सकता है, खंडित कर सकता है या उसे छिप कर सुन सकता है. अगर आप सुनिश्चित नहीं हैं कि यह बदलाव क्यों हुआ है, तो संभवत: आप उसे नहीं चाहते हैं.</translation> +<translation id="8351419472474436977">इस एक्सटेंशन ने आपकी प्रॉक्सी सेटिंग पर नियंत्रण कर लिया है, जिसका अर्थ है कि यह ऑनलाइन किए जाने वाले काम को बदल सकता है, खंडित कर सकता है या उसे छिप कर सुन सकता है. अगर आप पक्का नहीं हैं कि यह बदलाव क्यों हुआ है, तो संभवत: आप उसे नहीं चाहते हैं.</translation> <translation id="835238322900896202">अनइंस्टॉल करते समय एक गड़बड़ी हुई. कृपया 'टर्मिनल' के ज़रिए अनइंस्टॉल करें.</translation> <translation id="8352772353338965963">एक से ज़्यादा साइन-इन के लिए कोई खाता जोड़ें. सभी साइन इन किए गए खातों को पासवर्ड के बिना एक्सेस किया जा सकता है, इसलिए इस सुविधा का इस्तेमाल सिर्फ़ विश्वसनीय खातों के साथ किया जाना चाहिए.</translation> <translation id="8353683614194668312">यह निम्न कर सकता है:</translation> @@ -5006,7 +5006,7 @@ <translation id="8795916974678578410">नई विंडो</translation> <translation id="8797459392481275117">इस साइट का कभी भी अनुवाद ना करें</translation> <translation id="8798099450830957504">सामान्य</translation> -<translation id="8798441408945964110">प्रदाता का नाम</translation> +<translation id="8798441408945964110">कंपनी का नाम</translation> <translation id="8800004011501252845">इसके लिए गंतव्य दिखा रहा है:</translation> <translation id="8803953437405899238">एक क्लिक में नया टैब खोलें</translation> <translation id="8804398419035066391">सहयोगी वेबसाइटों से डॉयलॉग करें</translation> diff --git a/chromium/chrome/app/resources/generated_resources_hr.xtb b/chromium/chrome/app/resources/generated_resources_hr.xtb index b8f6a0cd71e..dfd651fd39a 100644 --- a/chromium/chrome/app/resources/generated_resources_hr.xtb +++ b/chromium/chrome/app/resources/generated_resources_hr.xtb @@ -4645,7 +4645,7 @@ Mislim da ta web-lokacija ne bi trebala biti blokirana!</translation> <translation id="8217399928341212914">Nastavi blokirati automatska preuzimanja više datoteka</translation> <translation id="8225753906568652947">Iskoristite svoje ponude</translation> <translation id="8226222018808695353">Zabranjeno</translation> -<translation id="8226619461731305576">Red čekanja</translation> +<translation id="8226619461731305576">Redoslijed</translation> <translation id="8226742006292257240">Dolje je nasumice generirana zaporka modula pouzdane platforme dodijeljena vašem računalu:</translation> <translation id="8227119283605456246">Priloži datoteku</translation> <translation id="8230134520748321204">Želite li spremiti zaporku za <ph name="ORIGIN" />?</translation> diff --git a/chromium/chrome/app/resources/generated_resources_it.xtb b/chromium/chrome/app/resources/generated_resources_it.xtb index f9684d449fc..d23c365fab9 100644 --- a/chromium/chrome/app/resources/generated_resources_it.xtb +++ b/chromium/chrome/app/resources/generated_resources_it.xtb @@ -282,7 +282,7 @@ <translation id="1429300045468813835">Tutte le voci cancellate</translation> <translation id="143027896309062157">Lettura e modifica di tutti i dati sul computer e sui siti web visitati</translation> <translation id="1430915738399379752">Stampa</translation> -<translation id="1432581352905426595">Imposta motori di ricerca</translation> +<translation id="1432581352905426595">Gestisci motori di ricerca</translation> <translation id="1433811987160647649">Chiedi prima di accedere</translation> <translation id="1434696352799406980">L'operazione reimposterà la pagina iniziale, la pagina Nuova scheda, il motore di ricerca e le schede bloccate. Inoltre, disattiverà tutte le estensioni e rimuoverà i dati temporanei, come i cookie. La cronologia, le password salvate e i preferiti non saranno invece cancellati.</translation> <translation id="1434886155212424586">La pagina iniziale è la pagina Nuova scheda</translation> @@ -617,7 +617,7 @@ <translation id="1933809209549026293">Collega un mouse o una tastiera. Se utilizzi un dispositivo Bluetooth, assicurati che sia pronto per essere accoppiato.</translation> <translation id="1937774647013465102">Impossibile importare il tipo di architettura del contenitore <ph name="ARCHITECTURE_CONTAINER" /> con questo dispositivo che invece è <ph name="ARCHITECTURE_DEVICE" />. Puoi provare a ripristinare questo contenitore in un diverso dispositivo oppure puoi accedere ai file all'interno dell'immagine del contenitore aprendoli nell'app File.</translation> <translation id="1938351510777341717">Comando esterno</translation> -<translation id="1940546824932169984">Dispositivi collegati</translation> +<translation id="1940546824932169984">Dispositivi connessi</translation> <translation id="1944921356641260203">Aggiornamento trovato</translation> <translation id="1951012854035635156">Assistente</translation> <translation id="1954813140452229842">Errore durante il montaggio della condivisione. Verifica le tue credenziali e riprova.</translation> @@ -683,7 +683,7 @@ <translation id="2075474481720804517">Batteria al <ph name="BATTERY_PERCENTAGE" />%</translation> <translation id="2075959085554270910">Consente di attivare/disattivare il tocco per fare clic e il trascinamento al tocco</translation> <translation id="2076269580855484719">Nascondi questo plug-in</translation> -<translation id="2076672359661571384">Media (consigliata)</translation> +<translation id="2076672359661571384">Medie (consigliate)</translation> <translation id="2077129598763517140">Usa accelerazione hardware quando disponibile</translation> <translation id="2078019350989722914">Avvisa prima di uscire (<ph name="KEY_EQUIVALENT" />)</translation> <translation id="2079053412993822885">Se elimini uno dei tuoi certificati, non potrai più utilizzarlo per identificarti.</translation> @@ -1387,7 +1387,7 @@ <translation id="3150927491400159470">Ricaricamento manuale</translation> <translation id="315116470104423982">Dati mobili</translation> <translation id="3151539355209957474">Ora di inizio</translation> -<translation id="3151562827395986343">Cancella i cookie e la cronologia di navigazione, svuota la cache e molto altro.</translation> +<translation id="3151562827395986343">Cancella i cookie e la cronologia di navigazione, svuota la cache e altro</translation> <translation id="3151786313568798007">Orientamento</translation> <translation id="3153862085237805241">Salva carta</translation> <translation id="3154351730702813399">L'amministratore del dispositivo potrebbe monitorare l'attività di navigazione.</translation> @@ -2009,7 +2009,7 @@ Se non modifichi le impostazioni predefinite, <ph name="USER_DISPLAY_NAME" /> pu <translation id="4087470595660267445">Installa app e giochi di Google Play sul Chromebook. <a target="_blank" href="<ph name="URL" />">Ulteriori informazioni</a></translation> <translation id="4088095054444612037">Accetta per gruppo</translation> <translation id="4089235344645910861">Impostazioni salvate. Sincronizzazione avviata.</translation> -<translation id="4090103403438682346">Consente di attivare l'accesso verificato</translation> +<translation id="4090103403438682346">Attiva Accesso verificato</translation> <translation id="4090947011087001172">Reimpostare le autorizzazioni per il sito <ph name="SITE" />?</translation> <translation id="4091434297613116013">fogli</translation> <translation id="4093955363990068916">File locale:</translation> @@ -3301,7 +3301,7 @@ Se non modifichi le impostazioni predefinite, <ph name="USER_DISPLAY_NAME" /> pu <translation id="615436196126345398">Protocollo</translation> <translation id="6154697846084421647">Accesso eseguito</translation> <translation id="6155141482566063812">Una scheda in secondo piano sta condividendo il tuo schermo</translation> -<translation id="6156323911414505561">Mostra barra dei Preferiti.</translation> +<translation id="6156323911414505561">Mostra barra dei Preferiti</translation> <translation id="6156863943908443225">Cache script</translation> <translation id="6156960295318603523">Impostazioni lingua</translation> <translation id="6160625263637492097">Fornisci certificati per l'autenticazione</translation> @@ -4023,7 +4023,7 @@ Se non modifichi le impostazioni predefinite, <ph name="USER_DISPLAY_NAME" /> pu <translation id="7287143125007575591">Accesso negato.</translation> <translation id="7287411021188441799">Ripristina sfondo predefinito</translation> <translation id="7288676996127329262"><ph name="HORIZONTAL_DPI" /> x <ph name="VERTICAL_DPI" /> dpi</translation> -<translation id="7289225569524511578">Apri l'app wallpaper</translation> +<translation id="7289225569524511578">Apri l'app Sfondo</translation> <translation id="7290242001003353852">Questo servizio di accesso, ospitato da <ph name="SAML_DOMAIN" />, sta accedendo alla videocamera.</translation> <translation id="7290594223351252791">Conferma registrazione</translation> <translation id="7295614427631867477">Tieni presente che Android, Play e le app associate sono regolati dalle loro norme di raccolta e utilizzo dei dati.</translation> diff --git a/chromium/chrome/app/resources/generated_resources_ja.xtb b/chromium/chrome/app/resources/generated_resources_ja.xtb index 428905a71d0..61687be4943 100644 --- a/chromium/chrome/app/resources/generated_resources_ja.xtb +++ b/chromium/chrome/app/resources/generated_resources_ja.xtb @@ -1141,7 +1141,7 @@ <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> にログイン</translation> <translation id="2749881179542288782">スペルと一緒に文法をチェック</translation> <translation id="2751739896257479635">EAP フェーズ 2 認証</translation> -<translation id="2755367719610958252">ユーザー補助機能を管理</translation> +<translation id="2755367719610958252">ユーザー補助機能の管理</translation> <translation id="275662540872599901">画面オフ</translation> <translation id="2761898608071930085">別のアカウントを使用</translation> <translation id="2762441749940182211">カメラがブロックされています</translation> @@ -1223,7 +1223,7 @@ <translation id="2874939134665556319">前のトラック</translation> <translation id="2875698561019555027">(Chrome エラーページ)</translation> <translation id="2876336351874743617">指 2</translation> -<translation id="2876369937070532032">セキュリティ上のリスクがある場合に、アクセスした一部のページの URL を Google に送信します</translation> +<translation id="2876369937070532032">セキュリティ上のリスクがある場合に、アクセスした一部のページの URL が Google に送信されます</translation> <translation id="288042212351694283">U2F(Universal 2nd Factor)デバイスにアクセスできませんでした。</translation> <translation id="2881076733170862447">拡張機能をクリックしたとき</translation> <translation id="2881966438216424900">最終アクセス日:</translation> @@ -2013,7 +2013,7 @@ <translation id="4087470595660267445">Google Play のアプリとゲームを Chromebook にインストールします。<a target="_blank" href="<ph name="URL" />">詳細</a></translation> <translation id="4088095054444612037">グループとの共有を許可する</translation> <translation id="4089235344645910861">設定が保存され、同期が始まりました。</translation> -<translation id="4090103403438682346">確認済みのアクセスを有効にする</translation> +<translation id="4090103403438682346">確認済みアクセスを有効にする</translation> <translation id="4090947011087001172"><ph name="SITE" /> のサイト権限をリセットしますか?</translation> <translation id="4091434297613116013">枚</translation> <translation id="4093955363990068916">ローカル ファイル:</translation> @@ -3508,7 +3508,7 @@ <translation id="6472207088655375767">OTP</translation> <translation id="6472893788822429178">ホーム ボタンを表示する</translation> <translation id="6473842110411557830">Powerwash の説明図</translation> -<translation id="6474884162850599008">Google ドライブ アカウントを切断</translation> +<translation id="6474884162850599008">Google ドライブ アカウントを切断する</translation> <translation id="6475697075626596525"><ph name="APP_NAME" /> が画面コンテンツの共有をリクエストしています。共有する部分を選択してください。</translation> <translation id="6478248366783946499">危険なファイルを保存しますか?</translation> <translation id="6483485061007832714">ダウンロードしたファイルを開く</translation> @@ -4088,7 +4088,7 @@ がオンになっています。</translation> <translation id="7377451353532943397">センサーへのアクセスを引き続きブロックする</translation> <translation id="7378627244592794276">いいえ</translation> -<translation id="73786666777299047">Chrome ウェブストアを開く</translation> +<translation id="73786666777299047">Chrome ウェブストアを開きます</translation> <translation id="7378812711085314936">データ接続を行う</translation> <translation id="7380768571499464492">更新: <ph name="PRINTER_NAME" /></translation> <translation id="7384292194278095697">このデバイスはもうサポートされていません</translation> @@ -4497,7 +4497,7 @@ <translation id="7986295104073916105">保存されたパスワード設定の読み取りと変更</translation> <translation id="7987814697832569482">この VPN で常に接続する</translation> <translation id="798835209536175951">Chromebook でテキスト メッセージを送受信します。<ph name="LINK_BEGIN" />詳細<ph name="LINK_END" /></translation> -<translation id="7988355189918024273">ユーザー補助機能を有効にする</translation> +<translation id="7988355189918024273">ユーザー補助機能を有効にします</translation> <translation id="7994702968232966508">EAP 方式</translation> <translation id="7997826902155442747">プロセスの優先値</translation> <translation id="7999229196265990314">次のファイルを作成しました: diff --git a/chromium/chrome/app/resources/generated_resources_ko.xtb b/chromium/chrome/app/resources/generated_resources_ko.xtb index 588b2f6bd02..7d89e0805d8 100644 --- a/chromium/chrome/app/resources/generated_resources_ko.xtb +++ b/chromium/chrome/app/resources/generated_resources_ko.xtb @@ -359,7 +359,7 @@ <translation id="1549788673239553762"><ph name="APP_NAME" />에서 <ph name="VOLUME_NAME" />에 액세스하려고 합니다. 내 파일을 수정하거나 삭제할 수 있습니다.</translation> <translation id="1553538517812678578">무제한</translation> <translation id="1554390798506296774"><ph name="HOST" />에서 샌드박스 처리되지 않은 플러그인을 항상 허용</translation> -<translation id="1556537182262721003">확장 프로그램 디렉토리를 프로필로 이동하지 못했습니다.</translation> +<translation id="1556537182262721003">확장 프로그램 디렉터리를 프로필로 이동하지 못했습니다.</translation> <translation id="155865706765934889">터치패드</translation> <translation id="1564414980088536597">이 이미지는 사용할 수 없습니다. 다른 이미지를 선택하세요.</translation> <translation id="1566049601598938765">웹사이트</translation> @@ -771,7 +771,7 @@ <translation id="2200356397587687044">계속하려면 Chrome에 권한이 필요함</translation> <translation id="220138918934036434">버튼 숨기기</translation> <translation id="2202898655984161076">프린터를 나열하는 데 문제가 발생했습니다. <ph name="CLOUD_PRINT_NAME" />에 성공적으로 등록되지 못한 프린터가 있을 수 있습니다.</translation> -<translation id="2203682048752833055"><ph name="BEGIN_LINK" />주소 표시줄<ph name="END_LINK" />에서 사용되는 검색엔진입니다.</translation> +<translation id="2203682048752833055"><ph name="BEGIN_LINK" />주소 표시줄<ph name="END_LINK" />에서 사용되는 검색엔진</translation> <translation id="2204034823255629767">입력한 항목 조회 및 변경</translation> <translation id="220792432208469595">사용 및 진단 데이터를 보냅니다. 이 기기는 현재 진단, 기기 및 앱 사용 데이터를 Google에 자동으로 보내고 있습니다. 이 데이터는 시스템 및 앱 안정성 등을 개선하는 데 활용됩니다. 일부 수집 데이터는 Google 앱과 파트너(Android 개발자 등)에게도 도움을 줍니다. 이 설정은 소유자가 지정합니다. 추가 웹 및 앱 활동이 사용 설정되어 있다면 이 데이터가 Google 계정에 저장될 수 있습니다. <ph name="BEGIN_LINK1" />자세히 알아보기<ph name="END_LINK1" /></translation> <translation id="220858061631308971">'<ph name="DEVICE_NAME" />'의 PIN 코드를 입력하세요:</translation> @@ -840,7 +840,7 @@ <translation id="2294358108254308676"><ph name="PRODUCT_NAME" />을(를) 설치하시겠습니까?</translation> <translation id="2297705863329999812">프린터 검색</translation> <translation id="2300383962156589922"><ph name="APP_NAME" /> 맞춤설정 및 제어</translation> -<translation id="2301382460326681002">확장 프로그램 루트 디렉토리가 잘못되었습니다.</translation> +<translation id="2301382460326681002">확장 프로그램 루트 디렉터리가 잘못되었습니다.</translation> <translation id="23030561267973084">'<ph name="EXTENSION_NAME" />'이(가) 추가 승인을 요청했습니다.</translation> <translation id="2307462900900812319">네트워크 설정</translation> <translation id="230927227160767054">이 페이지에서 서비스 핸들러를 설치하려 합니다.</translation> @@ -890,7 +890,7 @@ <translation id="2377667304966270281">하드 결함</translation> <translation id="237828693408258535">이 페이지를 번역하시겠습니까?</translation> <translation id="2378346380592252785"><ph name="SHARE_PATH" /> 사용자 인증 정보 업데이트</translation> -<translation id="2378982052244864789">확장 프로그램 디렉토리를 선택합니다.</translation> +<translation id="2378982052244864789">확장 프로그램 디렉터리를 선택합니다.</translation> <translation id="2379232090534544565">사이트에서 오디오 및 동영상 입력을 공유하는 중입니다.</translation> <translation id="2379281330731083556">시스템 대화상자를 사용하여 인쇄... <ph name="SHORTCUT_KEY" /></translation> <translation id="2381756643783702095">보내기 전에 확인(권장)</translation> @@ -923,7 +923,7 @@ <translation id="2436707352762155834">최소</translation> <translation id="2439545803278355377">새 PIN을 입력하세요. PIN은 4자 이상이어야 하며 문자, 숫자, 기타 문자를 포함할 수 있습니다.</translation> <translation id="2440604414813129000">소스 보기(&O)</translation> -<translation id="2445081178310039857">확장 프로그램 루트 디렉토리가 필요합니다.</translation> +<translation id="2445081178310039857">확장 프로그램 루트 디렉터리가 필요합니다.</translation> <translation id="2445484935443597917">새 프로필 만들기</translation> <translation id="2446585455334014596"><ph name="APP_NAME" />에서 귀하의 신원을 확인하려고 합니다</translation> <translation id="2448312741937722512">유형</translation> @@ -1246,7 +1246,7 @@ <translation id="2907619724991574506">시작 URL</translation> <translation id="2907798539022650680">'<ph name="NAME" />'에 연결하지 못함: <ph name="DETAILS" /> 서버 메시지: <ph name="SERVER_MSG" /></translation> -<translation id="2908162660801918428">디렉토리별 미디어 갤러리 추가</translation> +<translation id="2908162660801918428">디렉터리별 미디어 갤러리 추가</translation> <translation id="2910318910161511225">네트워크에 연결하고 다시 시도해 주세요</translation> <translation id="2913331724188855103">사이트에서 쿠키 데이터를 저장하고 읽도록 허용(권장)</translation> <translation id="2915102088417824677">활동 로그 보기</translation> @@ -1365,7 +1365,7 @@ <translation id="3120430004221004537">기기(<ph name="DEVICE_NAME" />)에서 해당 작업에 필요한 암호화가 수행되지 않았습니다.</translation> <translation id="3121793941267913344"><ph name="IDS_SHORT_PRODUCT_NAME" /> 기기 재설정</translation> <translation id="3122464029669770682">CPU</translation> -<translation id="3122496702278727796">데이터 디렉토리 만들기 실패</translation> +<translation id="3122496702278727796">데이터 디렉터리 만들기 실패</translation> <translation id="3124111068741548686">사용자 핸들</translation> <translation id="3126026824346185272">Ctrl</translation> <translation id="3127156390846601284">기기에 저장된 데이터 중 표시된 모든 사이트의 데이터가 삭제됩니다. 계속하시겠습니까?</translation> @@ -1433,7 +1433,7 @@ <translation id="3232318083971127729">값:</translation> <translation id="3233271424239923319">Linux 앱 및 파일 백업</translation> <translation id="323803881985677942">확장 프로그램 옵션 열기</translation> -<translation id="3241680850019875542">압축할 확장 프로그램의 루트 디렉토리를 선택합니다. 확장 프로그램을 업데이트하려면 다시 사용할 비공개 키 파일도 선택합니다.</translation> +<translation id="3241680850019875542">압축할 확장 프로그램의 루트 디렉터리를 선택합니다. 확장 프로그램을 업데이트하려면 다시 사용할 비공개 키 파일도 선택합니다.</translation> <translation id="3244294424315804309">계속 음소거</translation> <translation id="324849028894344899"><ph name="WINDOW_TITLE" /> - 네트워크 오류</translation> <translation id="3249950116250264636"><ph name="APP_NAME" />(<ph name="APP_URL" />)</translation> @@ -3242,7 +3242,7 @@ <translation id="6059925163896151826">USB 기기</translation> <translation id="6061882183774845124">기기로 링크 전송</translation> <translation id="6064217302520318294">화면 잠금</translation> -<translation id="6065289257230303064">인증서 대상 디렉토리 속성</translation> +<translation id="6065289257230303064">인증서 대상 디렉터리 속성</translation> <translation id="6069671174561668781">배경화면 설정</translation> <translation id="6071181508177083058">비밀번호 확인</translation> <translation id="6071576563962215370">시스템에서 기기 설치 시간 속성 잠금을 설정하지 못했습니다.</translation> @@ -3506,7 +3506,7 @@ <translation id="6472207088655375767">OTP</translation> <translation id="6472893788822429178">홈 버튼 표시</translation> <translation id="6473842110411557830">파워워시 일러스트레이션</translation> -<translation id="6474884162850599008">Google 드라이브 계정을 연결 해제합니다.</translation> +<translation id="6474884162850599008">Google 드라이브 계정 연결 해제</translation> <translation id="6475697075626596525"><ph name="APP_NAME" />에서 내 화면의 콘텐츠를 공유하려고 합니다. 공유할 항목을 선택하세요.</translation> <translation id="6478248366783946499">위험한 파일을 보관하시겠습니까?</translation> <translation id="6483485061007832714">다운로드된 파일 열기</translation> @@ -4129,7 +4129,7 @@ <translation id="7453008956351770337">이 프린터를 선택하면 다음 확장 프로그램에 내 프린터에 액세스할 수 있는 권한을 부여하게 됩니다.</translation> <translation id="7456142309650173560">개발자</translation> <translation id="7456847797759667638">위치 열기...</translation> -<translation id="7458168200501453431">Google 검색에서 사용되는 것과 동일한 맞춤법 검사기를 사용하세요. 브라우저에 입력하는 텍스트는 Google에 보내집니다.</translation> +<translation id="7458168200501453431">Google 검색에서 사용되는 것과 동일한 맞춤법 검사기를 사용하세요. 브라우저에 입력하는 텍스트는 Google로 전송됩니다.</translation> <translation id="7461924472993315131">고정</translation> <translation id="746216226901520237">다음번에는 휴대전화를 통해 <ph name="DEVICE_TYPE" />이(가) 잠금 해제됩니다. 설정에서 Smart Lock을 사용 중지할 수 있습니다.</translation> <translation id="7463006580194749499">사용자 추가</translation> @@ -4984,7 +4984,7 @@ <translation id="8762886931014513155"><ph name="DEVICE_TYPE" /> 업데이트 필요</translation> <translation id="8763927697961133303">USB 기기</translation> <translation id="8767621466733104912">모든 사용자의 Chrome 자동 업데이트</translation> -<translation id="8770406935328356739">확장 프로그램 루트 디렉토리</translation> +<translation id="8770406935328356739">확장 프로그램 루트 디렉터리</translation> <translation id="8770507190024617908">사용자 관리</translation> <translation id="8771300903067484968">시작 페이지 배경화면이 기본 배경화면으로 재설정되었습니다.</translation> <translation id="8774934320277480003">상단 여백</translation> @@ -5058,7 +5058,7 @@ <translation id="8872155268274985541">잘못된 Kiosk 외부 업데이트 매니페스트 파일이 발견되었습니다. Kiosk 앱을 업데이트하지 못했습니다. USB 메모리를 제거하세요.</translation> <translation id="8874184842967597500">연결되지 않음</translation> <translation id="8876307312329369159">데모 세션에서는 이 설정을 변경할 수 없습니다.</translation> -<translation id="8877448029301136595">[상위 디렉토리]</translation> +<translation id="8877448029301136595">[상위 디렉터리]</translation> <translation id="8879284080359814990">탭으로 표시(&S)</translation> <translation id="8883847527783433352">다른 계정에 동기화</translation> <translation id="8884570509232205463">기기가 <ph name="UNLOCK_TIME" />에 잠깁니다.</translation> diff --git a/chromium/chrome/app/resources/generated_resources_ml.xtb b/chromium/chrome/app/resources/generated_resources_ml.xtb index 3ebaf48d753..25d2ca5a4bc 100644 --- a/chromium/chrome/app/resources/generated_resources_ml.xtb +++ b/chromium/chrome/app/resources/generated_resources_ml.xtb @@ -484,7 +484,7 @@ <translation id="1744060673522309905">ഉപകരണത്തെ ഡൊമെയ്നുമായി ബന്ധിപ്പിക്കാൻ കഴിയുന്നില്ല. നിങ്ങൾക്ക് ചേർക്കാനാവുന്ന ഉപകരണങ്ങളുടെ എണ്ണം കവിഞ്ഞിട്ടില്ലെന്ന് ഉറപ്പാക്കുക.</translation> <translation id="1744108098763830590">പശ്ചാത്തല പേജ്</translation> <translation id="1745520510852184940">എല്ലായ്പ്പോഴും ഇങ്ങനെ ചെയ്യുക</translation> -<translation id="1746402432151920942">പരിരക്ഷിത മീഡിയ ഐഡന്റിഫയർ</translation> +<translation id="1746402432151920942">പരിരക്ഷിത മീഡിയ ഐഡൻ്റിഫയർ</translation> <translation id="175196451752279553">അടച്ച ടാബ് വീ&ണ്ടും തുറക്കുക</translation> <translation id="1753905327828125965">കൂടുതൽ സന്ദര്ശിച്ചത്</translation> <translation id="1756681705074952506">ഇന്പുട്ട് രീതി</translation> @@ -785,7 +785,7 @@ <translation id="2220529011494928058">ഒരു പ്രശ്നം റിപ്പോർട്ടുചെയ്യുക</translation> <translation id="2220572644011485463">പിൻ അല്ലെങ്കിൽ പാസ്വേഡ്</translation> <translation id="2224444042887712269">ഈ ക്രമീകരണം <ph name="OWNER_EMAIL" />-ന്റേതാണ്.</translation> -<translation id="2224471211857467033">ഉപയോഗസഹായി ഇവന്റുകൾ</translation> +<translation id="2224471211857467033">ഉപയോഗസഹായി ഇവൻ്റുകൾ</translation> <translation id="2224551243087462610">ഫോള്ഡര് നാമം എഡിറ്റ് ചെയ്യുക</translation> <translation id="2226449515541314767">MIDI ഉപകരണങ്ങളിൽ പൂർണ്ണനിയന്ത്രണം നേടുന്നതിൽ നിന്ന് ഈ സൈറ്റിനെ തടഞ്ഞു.</translation> <translation id="2226720438730111184">എന്താണ് സംഭവിക്കുന്നതെന്ന് ഞങ്ങളെ അറിയിക്കുക</translation> diff --git a/chromium/chrome/app/resources/generated_resources_nl.xtb b/chromium/chrome/app/resources/generated_resources_nl.xtb index d4863565607..c7f46a61f54 100644 --- a/chromium/chrome/app/resources/generated_resources_nl.xtb +++ b/chromium/chrome/app/resources/generated_resources_nl.xtb @@ -788,7 +788,7 @@ <translation id="2220529011494928058">Een probleem melden</translation> <translation id="2220572644011485463">Pincode of wachtwoord</translation> <translation id="2224444042887712269">Deze instelling hoort bij <ph name="OWNER_EMAIL" />.</translation> -<translation id="2224471211857467033">Toegankelijkheidsgebeurtenissen</translation> +<translation id="2224471211857467033">Toegankelijkheidsfunctionaliteit</translation> <translation id="2224551243087462610">Mapnaam bewerken</translation> <translation id="2226449515541314767">Deze site is geblokkeerd voor volledig beheer van MIDI-apparaten.</translation> <translation id="2226720438730111184">Vertel ons wat er aan de hand is</translation> @@ -2403,7 +2403,7 @@ <translation id="4756388243121344051">Gesc&hiedenis</translation> <translation id="4759238208242260848">Downloads</translation> <translation id="4761104368405085019">Je microfoon gebruiken</translation> -<translation id="476166673298332917">De apparaatbeheerder kan je browseactiviteit controleren.</translation> +<translation id="476166673298332917">De apparaatbeheerder heeft toegang tot alle activiteit, inclusief wachtwoorden en communicatie.</translation> <translation id="4762718786438001384">Er is zeer weinig schijfruimte beschikbaar op het apparaat</translation> <translation id="4763408175235639573">De volgende cookies zijn opgeslagen toen je deze pagina bekeek</translation> <translation id="4763830802490665879">Cookies van meerdere sites worden gewist bij het afsluiten.</translation> @@ -3815,7 +3815,7 @@ <translation id="6977381486153291903">Firmwarerevisie</translation> <translation id="6978121630131642226">Zoekmachines</translation> <translation id="6979440798594660689">Dempen (standaard)</translation> -<translation id="6979737339423435258">Altijd</translation> +<translation id="6979737339423435258">Alles</translation> <translation id="6980462514016882061">Google kan je browsegeschiedenis gebruiken om Google Zoeken, advertenties en andere Google-services te personaliseren</translation> <translation id="6981982820502123353">Toegankelijkheid</translation> <translation id="6983783921975806247">Geregistreerde OID</translation> @@ -4245,7 +4245,7 @@ <translation id="7645176681409127223"><ph name="USER_NAME" /> (eigenaar)</translation> <translation id="7647403192093989392">Geen recente activiteiten</translation> <translation id="7648992873808071793">Bestanden op dit apparaat bewaren</translation> -<translation id="7649070708921625228">Help</translation> +<translation id="7649070708921625228">Hulp</translation> <translation id="7650511557061837441">'<ph name="TRIGGERING_EXTENSION_NAME" />' wil '<ph name="EXTENSION_NAME" />' verwijderen.</translation> <translation id="7652808307838961528">Persoon bewerken: <ph name="PROFILE_NAME" /></translation> <translation id="765293928828334535">Apps, extensies en gebruikersscripts kunnen niet worden toegevoegd vanaf deze website</translation> diff --git a/chromium/chrome/app/resources/generated_resources_no.xtb b/chromium/chrome/app/resources/generated_resources_no.xtb index 576fdd89e86..e04e365943c 100644 --- a/chromium/chrome/app/resources/generated_resources_no.xtb +++ b/chromium/chrome/app/resources/generated_resources_no.xtb @@ -1137,7 +1137,7 @@ <translation id="2749756011735116528">Logg på <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Kontroller·grammatikk·og·staving</translation> <translation id="2751739896257479635">Fase 2-autentisering av EAP</translation> -<translation id="2755367719610958252">Administrer tilgjengelighetsfunksjonene</translation> +<translation id="2755367719610958252">Administrer tilgjengelighetsfunksjoner</translation> <translation id="275662540872599901">skjerm av</translation> <translation id="2761898608071930085">Bruk en annen konto</translation> <translation id="2762441749940182211">Kameraet er blokkert</translation> @@ -2006,7 +2006,7 @@ <translation id="4087470595660267445">Installer apper og spill fra Google Play på Chromebooken din. <a target="_blank" href="<ph name="URL" />">Finn ut mer</a></translation> <translation id="4088095054444612037">Godta for gruppen</translation> <translation id="4089235344645910861">Innstillingene er lagret. Synkronisering er startet.</translation> -<translation id="4090103403438682346">Aktiver Bekreftet tilgang</translation> +<translation id="4090103403438682346">Slå på Bekreftet tilgang</translation> <translation id="4090947011087001172">Vil du tilbakestille nettstedstillatelser for <ph name="SITE" />?</translation> <translation id="4091434297613116013">ark</translation> <translation id="4093955363990068916">Lokal fil:</translation> @@ -3600,7 +3600,7 @@ <translation id="6639554308659482635">SQLite-minne</translation> <translation id="6641138807883536517">Det tilfeldig genererte sikker modul-passordet er ikke tilgjengelig. Dette er vanlig etter en Powerwash.</translation> <translation id="6643016212128521049">Tøm</translation> -<translation id="6644512095122093795">Tilbud om å lagre passord</translation> +<translation id="6644512095122093795">Tilby å lagre passord</translation> <translation id="6644846457769259194">Oppdaterer enheten din (<ph name="PROGRESS_PERCENT" />)</translation> <translation id="6645437135153136856">Den valgte Google Cloud Print-enheten støttes ikke lenger. <ph name="BR" /> Prøv å konfigurere skriveren i datamaskinens systeminnstillinger.</translation> <translation id="6647228709620733774">Nettadresse for tilbakekalling av Netscape-autoritetssertifikat</translation> diff --git a/chromium/chrome/app/resources/generated_resources_pt-BR.xtb b/chromium/chrome/app/resources/generated_resources_pt-BR.xtb index c4fb128449f..a8328ede250 100644 --- a/chromium/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chromium/chrome/app/resources/generated_resources_pt-BR.xtb @@ -510,7 +510,7 @@ <translation id="1776883657531386793"><ph name="OID" />: <ph name="INFO" /></translation> <translation id="1779652936965200207">Insira esta senha em "<ph name="DEVICE_NAME" />":</translation> <translation id="1781291988450150470">PIN atual</translation> -<translation id="1781502536226964113">Abrir a página Nova guia</translation> +<translation id="1781502536226964113">Abrir Nova guia</translation> <translation id="1781771911845953849">Contas e sincronização</translation> <translation id="1782196717298160133">Como encontrar seu smartphone</translation> <translation id="1784849162047402014">O dispositivo está com pouco espaço em disco</translation> @@ -1136,7 +1136,7 @@ <translation id="2739240477418971307">Modificar suas configurações de acessibilidade</translation> <translation id="2740393541869613458">analisar os websites que o usuário supervisionado visitou e</translation> <translation id="274290345632688601">Restaurando apps e arquivos do Linux</translation> -<translation id="2743387203779672305">Copiar para a área de trabalho</translation> +<translation id="2743387203779672305">Copiar para área de transferência</translation> <translation id="2745080116229976798">Subordinação qualificada da Microsoft</translation> <translation id="2749756011735116528">Fazer login no <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Verificar a gramática com a ortografia</translation> @@ -1534,7 +1534,7 @@ <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> hertz) - entrelaçado</translation> <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation> <translation id="3404065873681873169">Nenhuma senha salva para este site</translation> -<translation id="340485819826776184">Utilizar um serviço de previsão para ajudar a preencher pesquisas e URLs digitados na barra de endereço</translation> +<translation id="340485819826776184">Utilizar um serviço de previsão para completar pesquisas e URLs digitados na barra de endereço</translation> <translation id="3405664148539009465">Personalizar fontes</translation> <translation id="3405763860805964263">...</translation> <translation id="3406605057700382950">&Exibir barra de favoritos</translation> @@ -2013,7 +2013,7 @@ <translation id="4087470595660267445">Instalar apps e jogos do Google Play no Chromebook. <a target="_blank" href="<ph name="URL" />">Saber mais</a></translation> <translation id="4088095054444612037">Aceitar fazer parte do grupo</translation> <translation id="4089235344645910861">Configurações salvas. Sincronização iniciada.</translation> -<translation id="4090103403438682346">Ativa o acesso verificado</translation> +<translation id="4090103403438682346">Ativar o acesso verificado</translation> <translation id="4090947011087001172">Redefinir permissões de site para <ph name="SITE" />?</translation> <translation id="4091434297613116013">folhas de papel</translation> <translation id="4093955363990068916">Arquivo local:</translation> @@ -2908,7 +2908,7 @@ <translation id="5554720593229208774">Autoridade de certificação de e-mail</translation> <translation id="5556206011531515970">Clique ao lado para escolher o navegador padrão.</translation> <translation id="5556459405103347317">Recarregar</translation> -<translation id="5557991081552967863">Manter Wi-Fi ativado durante a suspensão.</translation> +<translation id="5557991081552967863">Manter Wi-Fi ativado no modo de espera</translation> <translation id="5558129378926964177">Aumentar z&oom</translation> <translation id="55601339223879446">Ajustar as fronteiras da sua área de trabalho dentro da tela</translation> <translation id="5562781907504170924">Esta guia está conectada a um dispositivo Bluetooth.</translation> @@ -3549,10 +3549,10 @@ permanentemente excluídos assim que esse usuário for removido. Os websites vis <translation id="6532101170117367231">Salvar no Google Drive</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />Observação:<ph name="END_BOLD" /> Ative somente se você souber o que está fazendo ou tiver sido solicitado(a) a fazê-lo, porque a coleta de dados pode reduzir o desempenho.</translation> <translation id="6541638731489116978">Este site foi impedido de acessar seus sensores de movimento.</translation> -<translation id="654233263479157500">Utilizar um serviço da web para ajudar a solucionar erros de navegação</translation> +<translation id="654233263479157500">Utilizar um serviço da Web para solucionar erros de navegação</translation> <translation id="6544215763872433504">O navegador da Web do Google para você</translation> <translation id="6545665334409411530">Taxa de repetição</translation> -<translation id="6545834809683560467">Utilizar o serviço de previsão para ajudar a completar pesquisas e URLs digitados na barra de endereço ou na caixa de pesquisa do Acesso rápido aos apps</translation> +<translation id="6545834809683560467">Utilizar o serviço de previsão para completar pesquisas e URLs digitados na barra de endereço ou na caixa de pesquisa do Acesso rápido aos apps</translation> <translation id="6545867563032584178">O microfone está desativado nas preferências do sistema do Mac</translation> <translation id="6547316139431024316">Não avisar novamente para esta extensão</translation> <translation id="6547354035488017500">Libere pelo menos 512 MB de espaço. Caso contrário, seu dispositivo deixará de responder. Para liberar espaço, exclua arquivos do armazenamento do dispositivo.</translation> @@ -4029,7 +4029,7 @@ permanentemente excluídos assim que esse usuário for removido. Os websites vis <translation id="7287143125007575591">Acesso negado.</translation> <translation id="7287411021188441799">Restaurar plano de fundo padrão</translation> <translation id="7288676996127329262"><ph name="HORIZONTAL_DPI" />x<ph name="VERTICAL_DPI" /> dpi</translation> -<translation id="7289225569524511578">Abra o app de papel de parede</translation> +<translation id="7289225569524511578">Ativa o app de planos de fundo</translation> <translation id="7290242001003353852">Este serviço de login, hospedado por <ph name="SAML_DOMAIN" />, está acessando sua câmara.</translation> <translation id="7290594223351252791">Confirmar registro</translation> <translation id="7295614427631867477">O Android, o Google Play e os apps associados são regidos pelas próprias políticas de uso e de coleta de dados.</translation> @@ -4136,7 +4136,7 @@ permanentemente excluídos assim que esse usuário for removido. Os websites vis <translation id="7458168200501453431">Usa o mesmo corretor ortográfico da Pesquisa Google. O texto que você digita no navegador é enviado para o Google.</translation> <translation id="7461924472993315131">Fixar</translation> <translation id="746216226901520237">Na próxima vez, o smartphone desbloqueará o <ph name="DEVICE_TYPE" />. É possível desativar o Smart Lock nas configurações.</translation> -<translation id="7463006580194749499">Adicionar pessoa</translation> +<translation id="7463006580194749499">Adicionar pessoas</translation> <translation id="7465778193084373987">URL da revogação do certificado do Netscape</translation> <translation id="7469894403370665791">Conectar automaticamente a esta rede</translation> <translation id="747114903913869239">Erro: Não foi possível decodificar a extensão</translation> @@ -4226,7 +4226,7 @@ permanentemente excluídos assim que esse usuário for removido. Os websites vis <translation id="7607002721634913082">Pausado</translation> <translation id="7607274158153386860">Solicitar site para tablet</translation> <translation id="7609148976235050828">Conecte-se à Internet e tente novamente.</translation> -<translation id="7611008212562900400">Pesquisar seu dispositivo, apps, Web...</translation> +<translation id="7611008212562900400">Pesquisar no dispositivo, nos apps, na Web...</translation> <translation id="7616214729753637086">Registrando dispositivo…</translation> <translation id="7617366389578322136">Conectando-se a "<ph name="DEVICE_NAME" />"</translation> <translation id="7621382409404463535">Falha do sistema ao salvar a configuração do dispositivo.</translation> @@ -4498,7 +4498,7 @@ permanentemente excluídos assim que esse usuário for removido. Os websites vis <translation id="7986295104073916105">Ler e alterar as configurações de senhas salvas</translation> <translation id="7987814697832569482">Sempre se conectar usando esta VPN</translation> <translation id="798835209536175951">Envie e receba mensagens de texto no seu Chromebook.<ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation> -<translation id="7988355189918024273">Permitir recursos de acessibilidade</translation> +<translation id="7988355189918024273">Ativa os recursos de acessibilidade</translation> <translation id="7994702968232966508">Método EAP</translation> <translation id="7997826902155442747">Prioridade de processo</translation> <translation id="7999229196265990314">Os seguintes arquivos foram criados: @@ -5039,7 +5039,7 @@ Pessoas com conexões mais lentas talvez não vejam seu conteúdo.</translation> <translation id="8831664945713891930">Abrir configurações de extensões</translation> <translation id="8834039744648160717">A configuração de rede é controlada por <ph name="USER_EMAIL" />.</translation> <translation id="8838770651474809439">Hambúrger</translation> -<translation id="883911313571074303">Fazer anotações na imagem</translation> +<translation id="883911313571074303">Nota na imagem</translation> <translation id="8845001906332463065">Ajuda</translation> <translation id="8845164297565101021">Insira sua chave de segurança e toque nela para criar ou alterar um PIN.</translation> <translation id="8846132060409673887">Ler as informações sobre o fabricante e modelo deste computador</translation> diff --git a/chromium/chrome/app/resources/generated_resources_ru.xtb b/chromium/chrome/app/resources/generated_resources_ru.xtb index e0963a398db..5b0acc8121e 100644 --- a/chromium/chrome/app/resources/generated_resources_ru.xtb +++ b/chromium/chrome/app/resources/generated_resources_ru.xtb @@ -3823,7 +3823,7 @@ <translation id="6985235333261347343">Агент восстановления ключей Microsoft</translation> <translation id="698524779381350301">Автоматически разрешать доступ к следующим сайтам</translation> <translation id="6985607387932385770">Принтеры</translation> -<translation id="6990778048354947307">Темная тема</translation> +<translation id="6990778048354947307">Тёмная тема</translation> <translation id="6991665348624301627">Выбор места назначения</translation> <translation id="6992554835374084304">Включите расширенную проверку правописания</translation> <translation id="6997642619627518301"><ph name="NAME_PH" /> – Журнал активности</translation> diff --git a/chromium/chrome/app/resources/generated_resources_sl.xtb b/chromium/chrome/app/resources/generated_resources_sl.xtb index e148a0061fd..054eee02039 100644 --- a/chromium/chrome/app/resources/generated_resources_sl.xtb +++ b/chromium/chrome/app/resources/generated_resources_sl.xtb @@ -4155,7 +4155,7 @@ Poskrbite, da ne boste razkrili morebitnih občutljivih podatkov.</translation> <translation id="749028671485790643">Oseba <ph name="VALUE" /></translation> <translation id="7490813197707563893">Naslov MAC</translation> <translation id="7493386493263658176">Razširitev <ph name="EXTENSION_NAME" /> bo morda lahko beležila vse besedilo, ki ga vnesete, vključno z osebnimi podatki, kot so gesla in številke kreditnih kartic. Ali jo želite uporabiti?</translation> -<translation id="7494065396242762445">Odpiranje nastavitev sistema Windows</translation> +<translation id="7494065396242762445">Odprite nastavitve sistema Windows</translation> <translation id="7494694779888133066"><ph name="WIDTH" /> x <ph name="HEIGHT" /></translation> <translation id="7495778526395737099">Ste pozabili staro geslo?</translation> <translation id="7496511874649569424"><ph name="LINUX_APP_NAME" /> in podatki, povezani s to aplikacijo, bodo odstranjeni iz te naprave.</translation> diff --git a/chromium/chrome/app/resources/generated_resources_sr.xtb b/chromium/chrome/app/resources/generated_resources_sr.xtb index 8a949f754a8..6d14c61e325 100644 --- a/chromium/chrome/app/resources/generated_resources_sr.xtb +++ b/chromium/chrome/app/resources/generated_resources_sr.xtb @@ -2044,7 +2044,7 @@ <translation id="4130750466177569591">Прихватам</translation> <translation id="413121957363593859">Компоненте</translation> <translation id="4131410914670010031">Црно-бело</translation> -<translation id="4136203100490971508">Ноћно светло се аутоматски укључује када сунце изађе</translation> +<translation id="4136203100490971508">Ноћно светло се аутоматски искључује када сунце изађе</translation> <translation id="4138267921960073861">Приказуј корисничка имена и слике на екрану за пријављивање</translation> <translation id="4144218403971135344">Пронађите видео садржај бољег квалитета и продужите трајање батерије. Видео ће се пуштати само на екрану који подржава Cast.</translation> <translation id="4145922204387553806">Дозволите Помоћнику да вам приказује информације на основу онога што је на екрану</translation> diff --git a/chromium/chrome/app/resources/generated_resources_ta.xtb b/chromium/chrome/app/resources/generated_resources_ta.xtb index 1477c107e42..7fef175262a 100644 --- a/chromium/chrome/app/resources/generated_resources_ta.xtb +++ b/chromium/chrome/app/resources/generated_resources_ta.xtb @@ -311,7 +311,7 @@ <translation id="1478340334823509079">விவரங்கள்: <ph name="FILE_NAME" /></translation> <translation id="1478607704480248626">நிறுவுதல் இயக்கப்படவில்லை</translation> <translation id="1483493594462132177">அனுப்பு</translation> -<translation id="1484979925941077974">தளமானது புளூடூத்தைப் பயன்படுத்துகிறது</translation> +<translation id="1484979925941077974">தளம் புளூடூத்தைப் பயன்படுத்துகிறது</translation> <translation id="1485015260175968628">இப்போது பயன்பாடு அணுகக்கூடியவை:</translation> <translation id="1485141095922496924">பதிப்பு <ph name="PRODUCT_VERSION" /> (<ph name="PRODUCT_CHANNEL" />) <ph name="PRODUCT_MODIFIER" /> <ph name="PRODUCT_VERSION_BITS" /></translation> <translation id="1486096554574027028">கடவுச்சொற்களைத் தேடு</translation> @@ -462,7 +462,7 @@ <translation id="1708338024780164500">(செயல்படா நிலையில்)</translation> <translation id="1708713382908678956"><ph name="NAME_PH" /> (ஐடி: <ph name="ID_PH" />)</translation> <translation id="1709106626015023981"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (நிலையானது)</translation> -<translation id="1711401317189798723">தற்போது <ph name="CONTAINER_ID" />க்கு காப்புப் பிரதி செயலில் உள்ளது</translation> +<translation id="1711401317189798723">தற்போது <ph name="CONTAINER_ID" /> காப்புப் பிரதி எடுக்கப்படுகிறது</translation> <translation id="1712349894969001173">இந்தக் கடவுச்சொல்லை உங்கள் iPhone இல் பெறுங்கள்</translation> <translation id="1712552549805331520">உங்கள் கம்ப்யூட்டரில் தரவை நிரந்தரமாகச் சேமிக்க <ph name="URL" /> விரும்புகிறது</translation> <translation id="1717218214683051432">மோஷன் சென்சார்கள்</translation> @@ -805,7 +805,7 @@ <translation id="2241053333139545397">பல இணையதளங்களில் உங்கள் தரவைப் படித்தல் மற்றும் திருத்துதல்</translation> <translation id="2241634353105152135">ஒருமுறை மட்டுமே</translation> <translation id="2242687258748107519">கோப்புத் தகவல்</translation> -<translation id="2246549592927364792">பட விளக்கங்களை Googleளில் இருந்து பெற வேண்டுமா?</translation> +<translation id="2246549592927364792">பட விவரங்களை Googleளிலிருந்து பெற வேண்டுமா?</translation> <translation id="224940702122312781">இந்தப் பக்கம் அதிகமான டேட்டாவைப் பயன்படுத்தும்.</translation> <translation id="2249605167705922988">எ.கா. 1-5, 8, 11-13</translation> <translation id="2251218783371366160">சிஸ்டம் வியூவருடன் திற</translation> @@ -902,7 +902,7 @@ <translation id="2392369802118427583">செயல்படுத்து</translation> <translation id="2394566832561516196">அடுத்த மறுஏற்றத்தில் அமைப்புகள் அழிக்கப்படும்.</translation> <translation id="2395616325548404795">உங்கள் <ph name="DEVICE_TYPE" /> சாதனம் நிறுவன மேலாண்மைக்குப் பதிவுசெய்யப்பட்டது, ஆனால் அதன் பண்பையும் இருப்பிடத் தகவலையும் அனுப்ப முடியவில்லை. இந்தச் சாதனத்திற்கான இந்தத் தகவலை உங்கள் Admin console இலிருந்து நீங்களாகவே உள்ளிடவும்.</translation> -<translation id="2396783860772170191">4 இலக்கப் பின்னை (0000-9999) உள்ளிடவும்</translation> +<translation id="2396783860772170191">4 இலக்கப் பின்னை உள்ளிடவும் (0000-9999)</translation> <translation id="2408955596600435184">பின்னை உள்ளிடவும்</translation> <translation id="241082044617551207">அறியப்படாத செருகுநிரல்</translation> <translation id="2413749388954403953">புக்மார்க்குகள் பயனர் இடைமுகத்தை மாற்றலாம்</translation> @@ -1127,7 +1127,7 @@ <translation id="2731392572903530958">மூடப்பட்ட சாளரத்தை மீ&ண்டும் திற</translation> <translation id="2731700343119398978">காத்திருக்கவும்...</translation> <translation id="2731710757838467317">உங்கள் மேற்பார்வையிடப்படும் பயனரை உருவாக்குகிறது. இதற்கு ஒரு சில நிமிடங்கள் ஆகலாம்.</translation> -<translation id="2731971182069536520">அடுத்த முறை உங்கள் சாதனத்தை ரீஸ்டார்ட் செய்யும் போது உங்கள் அகத் தரவை நீக்கும் ஒருமுறை செய்யக்கூடிய புதுப்பிப்பை உங்கள் நிர்வாகி மேற்கொள்வார்.</translation> +<translation id="2731971182069536520">அடுத்தமுறை சாதனத்தை ரீஸ்டார்ட் செய்யும்போது உங்களின் அகத் தரவை நீக்குவதற்கான 'ஒருமுறை செய்யும் புதுப்பிப்பை' நிர்வாகி மேற்கொள்வார்.</translation> <translation id="2734760316755174687"><ph name="SITE_GROUP_NAME" /> குழுவில் உள்ள எல்லா தளங்களும் மீட்டமைக்கப்படும்.</translation> <translation id="2735438478659026460">மவுஸ் கர்சர் நிற்கும் போது, தானாகக் கிளிக் செய்</translation> <translation id="2735712963799620190">திட்ட அட்டவணை</translation> @@ -1332,7 +1332,7 @@ <translation id="304747341537320566">பேச்சு என்ஜின்கள்</translation> <translation id="3047644958362961983">நீங்கள் எதிர்கொள்ளும் அசிஸ்டண்ட் சிக்கலை நாங்கள் புரிந்து கொள்ள இந்தத் தகவல் உதவும். இவை 90 நாட்கள் வரை சேமித்து வைக்கப்படும், சம்பந்தப்பட்ட தொழில்நுட்ப மற்றும் கருத்துக் குழுக்களுக்கு மட்டுமே இதற்கான அணுகல் வழங்கப்படும்.</translation> <translation id="3053013834507634016">சான்றிதழ் விசைப் பயன்பாடு</translation> -<translation id="3053273573829329829">பயனர் பின்னை இயக்கும்</translation> +<translation id="3053273573829329829">பயனர் பின்னை இயக்கு</translation> <translation id="3058498974290601450">அமைப்புகளில் ஒத்திசைவை எந்த நேரத்திலும் இயக்கலாம்</translation> <translation id="3060379269883947824">பேசும் திரையை இயக்கு</translation> <translation id="3061707000357573562">பேட்ச் சேவை</translation> @@ -1712,7 +1712,7 @@ <translation id="3664511988987167893">நீட்டிப்பு ஐகான்</translation> <translation id="3665589677786828986">மற்றொரு நிரலால் உங்கள் அமைப்புகளில் சில சிதைந்துள்ளதை Chrome கண்டறிந்ததுடன், அவற்றை அசல் இயல்புநிலைகளுக்கு மீட்டமைக்கிறது.</translation> <translation id="3668570675727296296">மொழி அமைப்புகள்</translation> -<translation id="366867565525278777">போதிய சேமிப்பிடம் இல்லாததால் பதிவிறக்கம் தோல்வியடைந்தது. குறைந்தபட்சம் <ph name="INSTALL_SIZE" /> தேவை. சேமிப்பிடத்தைக் காலியாக்க சாதனத்தின் சேமிப்பகத்தில் இருந்து கோப்புகளை நீக்கவும்.</translation> +<translation id="366867565525278777">போதிய சேமிப்பிடம் இல்லாததால் பதிவிறக்கம் தோல்வியடைந்தது. குறைந்தபட்சம் <ph name="INSTALL_SIZE" /> தேவை. இடத்தைக் காலியாக்க சாதன சேமிப்பகத்தில் இருந்து கோப்புகளை நீக்கவும்.</translation> <translation id="3668801437375206837">புளூடூத் சிக்கல்களை இன்னும் துல்லியமாகக் கண்டறிவதற்காக, Googlerகள் தங்களுடைய கருத்து அறிக்கைகளில் கூடுதல் புளூடூத் பதிவுகளைச் சேர்க்கலாம். இந்த விருப்பம் தேர்ந்தெடுக்கப்பட்டால், உங்கள் அறிக்கையில் உங்கள் நடப்பு அமர்விலிருந்து btsnoop மற்றும் HCI பதிவுகள் சேர்க்கப்படும், இது அவற்றிலுள்ள PIIஐ முடிந்தவரை அகற்றும். இந்தப் பதிவுகளை Listnrரிலுள்ள Chrome OS தயாரிப்புக் குழுவின் நிர்வாகிகள் மட்டுமே அணுக முடியும். 90 நாட்களுக்குப் பிறகு இந்தப் பதிவுகள் முற்றிலுமாக அகற்றப்படும்.</translation> <translation id="3668823961463113931">ஹேண்ட்லர்கள்</translation> <translation id="3670113805793654926">பிற உற்பத்தியாளர்களின் சாதனங்கள்</translation> @@ -1868,7 +1868,7 @@ <translation id="3869917919960562512">தவறான பொருளடக்கம்.</translation> <translation id="3870931306085184145"><ph name="DOMAIN" /> இணையதளத்திற்கான சேமிக்கப்பட்ட கடவுச்சொற்கள் எதுவுமில்லை</translation> <translation id="3871092408932389764">மிகக்குறைவானது</translation> -<translation id="3871350334636688135">24 மணிநேரத்திற்குப் பிறகு, உங்கள் சாதனத்தை ரீஸ்டார்ட் செய்யும் போது உங்கள் அகத் தரவை நீக்கும் ஒருமுறை செய்யக்கூடிய புதுப்பிப்பை உங்கள் நிர்வாகி மேற்கொள்வார். 24 மணிநேரத்திற்குள் உங்களுக்குத் தேவையான எல்லா அகத் தரவையும் கிளவுட் சேமிப்பகத்தில் சேமிக்கவும்.</translation> +<translation id="3871350334636688135">24 மணிநேரத்திற்குப் பிறகு உங்கள் சாதனத்தை ரீஸ்டார்ட் செய்யும்போது உங்கள் அகத் தரவை நீக்குவதற்கான 'ஒருமுறை செய்யும் புதுப்பிப்பை’ நிர்வாகி மேற்கொள்வார். 24 மணிநேரத்திற்குள் உங்களுக்குத் தேவையான அகத் தரவைக் கிளவுட் சேமிப்பகத்தில் சேமிக்கவும்.</translation> <translation id="3872220884670338524">கூடுதல் செயல்கள், <ph name="DOMAIN" /> இல் <ph name="USERNAME" />க்கான சேமித்த கணக்கு</translation> <translation id="3872991219937722530">சாதனத்தில் காலி இடத்தை உருவாக்கவும் அல்லது உங்கள் சாதனம் இயங்காது.</translation> <translation id="3873315167136380065">இதை இயக்குவதற்கு, <ph name="BEGIN_LINK" />ஒத்திசைவை மீட்டமைத்து<ph name="END_LINK" /> உங்கள் ஒத்திசைவுக் கடவுச்சொற்றொடரை அகற்றவும்.</translation> @@ -2026,7 +2026,7 @@ <translation id="4099060993766194518">இயல்பு தேடல் இன்ஜினை மீட்டமைக்கவா?</translation> <translation id="4099874310852108874">நெட்வொர்க் பிழை ஏற்பட்டது.</translation> <translation id="4100733287846229632">சாதனத்தில் இடம் மிகவும் குறைவாக உள்ளது</translation> -<translation id="4100853287411968461">சாதனத்தைப் பயன்படுத்துவதற்கான புதிய வரம்பு</translation> +<translation id="4100853287411968461">சாதனத்தைப் பயன்படுத்துவதற்கான புதிய நேர வரம்பு</translation> <translation id="4103091233824664032">திரைப் பூட்டை உள்ளமைத்து உள்நுழைய, கடவுச்சொல்லை உள்ளிடவும்</translation> <translation id="4104163789986725820">ஏற்று&மதி...</translation> <translation id="4107048419833779140">சேமிப்பகச் சாதனங்களைக் கண்டறிந்து, வெளியேற்றுதல்</translation> @@ -2184,7 +2184,7 @@ <translation id="438503109373656455">சரடோகா</translation> <translation id="4387004326333427325">அங்கீகரிப்புச் சான்றிதழ் தொலைநிலையில் நிராகரிக்கப்பட்டது</translation> <translation id="4389091756366370506">பயனர் <ph name="VALUE" /></translation> -<translation id="4390000551125140321">{0,plural, =1{மறைநிலை}other{# மறைநிலைச் சாளரங்களைத் திறக்கவும்}}</translation> +<translation id="4390000551125140321">{0,plural, =1{மறைநிலை}other{திறந்துள்ள மறைநிலை சாளரங்கள்: #}}</translation> <translation id="439266289085815679">புளூடூத் உள்ளமைவைக் கட்டுப்படுத்துபவர்: <ph name="USER_EMAIL" />.</translation> <translation id="4394049700291259645">முடக்கு</translation> <translation id="4400367121200150367">கடவுச்சொல்லை ஒருபோதும் சேமிக்க வேண்டாம் எனக் குறிக்கப்பட்ட தளங்கள் இங்கே தோன்றும்</translation> @@ -2258,6 +2258,7 @@ <translation id="4524832533047962394">வழங்கப்பட்ட பதிவுப் பயன்முறையை இந்த ஆப்ரேட்டிங் சிஸ்டத்தின் பதிப்பு ஆதரிக்கவில்லை. புதிய பதிப்பில் இயக்குவதை உறுதிசெய்யவும்.</translation> <translation id="4525382759303819021">Play Store ஆப்ஸ் குறித்த சமீபத்திய அறிவிப்புகளையும் பரிந்துரைகளையும் பெறுக</translation> <translation id="4530494379350999373">அசல்</translation> +<translation id="4532646538815530781">இந்தத் தளம் மோஷன் சென்சார்களைப் பயன்படுத்துகிறது.</translation> <translation id="4533846798469727141">இப்போது "Hey Google" எனக் கூறவும்</translation> <translation id="4533985347672295764">CPU நேரம்</translation> <translation id="4534661889221639075">மீண்டும் முயலவும்.</translation> @@ -2492,6 +2493,7 @@ <translation id="4892229439761351791">தளத்தால் புளூடூத்தைப் பயன்படுத்த முடியும்</translation> <translation id="4893336867552636863">இது, இந்தச் சாதனத்திலிருந்து உலாவல் தரவை நிரந்தரமாக நீக்கும்.</translation> <translation id="4893522937062257019">திரை பூட்டியிருக்கும்போது</translation> +<translation id="489454699928748701">மோஷன் சென்சார்களைப் பயன்படுத்த தளங்களை அனுமதிக்கும்</translation> <translation id="4898011734382862273">"<ph name="CERTIFICATE_NAME" />" என்ற சான்றிதழானது, சான்றளிக்கும் அங்கீகாரத்தைக் குறிக்கிறது</translation> <translation id="489985760463306091">தீங்கிழைக்கும் மென்பொருளை அகற்றியதை உறுதிசெய்ய, கம்ப்யூட்டரை மீண்டும் தொடங்கவும்</translation> <translation id="4900392736118574277">துவக்கப் பக்கம் <ph name="URL" />க்கு மாற்றப்பட்டது.</translation> @@ -2665,8 +2667,8 @@ <translation id="5187295959347858724">நீங்கள் இப்போது <ph name="SHORT_PRODUCT_NAME" /> இல் உள்நுழைந்துள்ளீர்கள். உங்களுடைய புக்மார்க்குகள், வரலாறு மற்றும் இதர அமைப்புகள் Google கணக்குடன் ஒத்திசைக்கப்படுகிறது.</translation> <translation id="5187826826541650604"><ph name="KEY_NAME" /> (<ph name="DEVICE" />)</translation> <translation id="51918995459521422"><ph name="ORIGIN" /> பல கோப்புகளைப் பதிவிறக்க விரும்புகிறது</translation> -<translation id="5192316339598592690">கணக்குகளை விரைவாக மாற்றி, ஆப்ஸிலும் இணையதளங்களிலும் ஒரே நேரத்தில் உள்நுழையலாம். - உங்களின் சில Google கணக்குத் தகவலைப் பயன்படுத்த ஆப்ஸும் தளங்களும் அனுமதி கேட்க முடியும். <ph name="LINK_BEGIN" />மேலும் அறிக<ph name="LINK_END" /></translation> +<translation id="5192316339598592690">கணக்குகளை விரைவாக மாற்றி ஆப்ஸிலும் இணையதளங்களிலும் ஒரே நேரத்தில் உள்நுழையலாம். + ஆப்ஸுக்கும் தளங்களுக்கும் உங்கள் Google கணக்கின் சில தகவலைப் பயன்படுத்துவதற்கான அனுமதி தேவைப்படக்கூடும். <ph name="LINK_BEGIN" />மேலும் அறிக<ph name="LINK_END" /></translation> <translation id="5204673965307125349">சாதனத்தைப் பவர்வாஷ் செய்து, மீண்டும் முயலவும்.</translation> <translation id="5204967432542742771">கடவுச்சொல்</translation> <translation id="5206215183583316675">"<ph name="CERTIFICATE_NAME" />"ஐ நீக்கவா?</translation> @@ -2956,6 +2958,7 @@ முக்கியமான தகவல் எதையும் வெளிப்படுத்தவில்லை என்பதை உறுதிப்படுத்திக் கொள்ளவும்.</translation> <translation id="5620612546311710611">பயன்பாட்டுப் புள்ளிவிவரங்கள்</translation> <translation id="5620655347161642930">கடவுச்சொற்களை ஏற்று...</translation> +<translation id="5623282979409330487">இந்தத் தளம் உங்கள் மோஷன் சென்சார்களைப் பயன்படுத்துகிறது.</translation> <translation id="5623842676595125836">பதிவு</translation> <translation id="5624120631404540903">கடவுச்சொற்களை நிர்வகி</translation> <translation id="5626134646977739690">பெயர்:</translation> @@ -3449,6 +3452,7 @@ <translation id="6390994422085833176">அமைவைத் தொடர்ந்து, ஒத்திசைவு மற்றும் தனிப்பயனாக்க அம்சங்களை மதிப்பாய்வு செய்</translation> <translation id="6393156038355142111">வலுவான கடவுச்சொல்லைப் பரிந்துரை</translation> <translation id="6395423953133416962"><ph name="BEGIN_LINK1" />கணினியின் தகவல்<ph name="END_LINK1" /> மற்றும் <ph name="BEGIN_LINK2" />அளவீடுகளை<ph name="END_LINK2" /> அனுப்பு</translation> +<translation id="6396988158856674517">தளங்கள் மோஷன் சென்சார்களைப் பயன்படுத்துவதைத் தடுக்கும்</translation> <translation id="6397094776139756010">ஒத்திசைவு மற்றும் தனிப்பயனாக்க விருப்பங்கள்</translation> <translation id="6398715114293939307">Google Play ஸ்டோரை அகற்று</translation> <translation id="6398765197997659313">முழுத்திரையிலிருந்து வெளியேறு</translation> @@ -3543,6 +3547,7 @@ <translation id="6531282281159901044">ஆபத்தான கோப்பை வைத்திரு</translation> <translation id="6532101170117367231">Google இயக்ககத்தில் சேமி</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />குறிப்பு:<ph name="END_BOLD" /> தரவைச் சேகரிப்பது செயல்திறனைக் குறைக்கும் என்பதால், நீங்கள் தெரிந்துதான் செய்கிறீர்கள் என்றால் அல்லது அவ்வாறு செய்ய வேண்டுமெனக் கேட்டுக்கொள்ளப்பட்டிருந்தால் மட்டும் இயக்கவும்.</translation> +<translation id="6541638731489116978">இந்தத் தளம் உங்கள் மோஷன் சென்சார்களை அணுகுவது தடுக்கப்பட்டுள்ளது.</translation> <translation id="654233263479157500">வழிசெலுத்தல் பிழைகளைச் சரிசெய்ய ஒரு வலை சேவையைப் பயன்படுத்துக</translation> <translation id="6544215763872433504">Google உங்களுக்காக வழங்கும் இணைய உலாவி</translation> <translation id="6545665334409411530">மீண்டும் இயக்குவதன் வீதம்</translation> @@ -3552,7 +3557,7 @@ <translation id="6547354035488017500">குறைந்தது 512 மெ.பை. இடத்தைக் காலியாக்கவும் அல்லது உங்கள் சாதனம் இயங்காது. இடத்தைக் காலியாக்க, சாதனத்தின் சேமிப்பகத்தில் இருந்து கோப்புகளை நீக்கவும்.</translation> <translation id="6550675742724504774">விருப்பத்தேர்வுகள்</translation> <translation id="6551508934388063976">ஆணைக் கிடைக்கவில்லை. புதிய சாளரத்தைத் திறக்க control-N ஐ அழுத்தவும்.</translation> -<translation id="6551612971599078809">தளமானது USBயைப் பயன்படுத்துகிறது</translation> +<translation id="6551612971599078809">தளம் USBயைப் பயன்படுத்துகிறது</translation> <translation id="655384502888039633"><ph name="USER_COUNT" /> பயனர்கள்</translation> <translation id="655483977608336153">மீண்டும் முயல்க</translation> <translation id="6555432686520421228">எல்லா பயனர் கணக்குகளையும் அகற்றிவிட்டு, புதியது போன்று உங்கள் <ph name="IDS_SHORT_PRODUCT_NAME" /> சாதனத்தை மீட்டமைக்கவும்.</translation> @@ -3777,7 +3782,7 @@ <translation id="692114467174262153"><ph name="ALTERNATIVE_BROWSER_NAME" /> உலாவியைத் திறக்க இயலவில்லை</translation> <translation id="6921709132208495314">இந்தப் பக்கத்தில் டேட்டா உபயோகத்தை நிறுத்து</translation> <translation id="6922128026973287222">Google தரவு சேமிப்பானைப் பயன்படுத்தி தரவைச் சேமிக்கலாம், வேகமாக உலாவலாம். மேலும் அறிய, கிளிக் செய்யவும்.</translation> -<translation id="6922745772873733498">அச்சிடுவதற்கு பின்னை உள்ளிடவும்</translation> +<translation id="6922745772873733498">அச்சிடுவதற்குப் பின்னை உள்ளிடவும்</translation> <translation id="6923132443355966645">உருட்டு / கிளிக் செய்</translation> <translation id="6923633482430812883">பகிர்வை ஏற்றுவதில் பிழை. நீங்கள் இணைக்கின்ற கோப்புச் சேவையகம் SMBv2 அல்லது அதற்குப் பிந்தைய பதிப்பை ஆதரிக்கிறதா எனச் சரிபார்க்கவும்.</translation> <translation id="6930036377490597025">இணைக்கக்கூடிய பாதுகாப்பு விசை அல்லது உள்ளமைந்த சென்சார்</translation> @@ -3874,7 +3879,7 @@ <translation id="706626672220389329">பகிர்வை ஏற்றுவதில் பிழை. குறிப்பிட்ட பகிர்வானது ஏற்கனவே ஏற்றப்பட்டுள்ளது.</translation> <translation id="7066944511817949584">"<ph name="DEVICE_NAME" />" க்கு இணைப்பதில் தோல்வி.</translation> <translation id="7067725467529581407">இதை ஒருபோதும் காட்டாதே.</translation> -<translation id="7069811530847688087">புதிய அல்லது வேறு விதமான பாதுகாப்பு விசை <ph name="WEBSITE" /> தளத்திற்குத் தேவைப்படக்கூடும்</translation> +<translation id="7069811530847688087">புதியதொரு வேறு விதமான பாதுகாப்பு விசை <ph name="WEBSITE" /> தளத்திற்குத் தேவைப்படக்கூடும்</translation> <translation id="7070484045139057854">இந்த நீட்டிப்பால் தளத் தரவைப் படிக்கவும் மாற்றவும் முடியும்</translation> <translation id="7072010813301522126">ஷார்ட்கட் பெயர்</translation> <translation id="707392107419594760">உங்கள் விசைப்பலகையைத் தேர்ந்தெடு:</translation> @@ -3955,7 +3960,7 @@ <translation id="7189234443051076392">சாதனத்தில் போதுமான சேமிப்பிடம் இருப்பதை உறுதிப்படுத்திக்கொள்ளவும்</translation> <translation id="7189965711416741966">கைரேகை சேர்க்கப்பட்டது.</translation> <translation id="7191159667348037">அறியப்படாத பிரிண்டர் (USB)</translation> -<translation id="7193051357671784796">இந்த ஆப்ஸ் உங்கள் நிறுவனத்தின் மூலம் சேர்க்கப்பட்டது. ஆப்ஸை நிறுவுவதை முடிக்க அதை மீண்டும் தொடங்கவும்.</translation> +<translation id="7193051357671784796">இந்த ஆப்ஸை உங்கள் நிறுவனம் சேர்த்துள்ளது. ஆப்ஸை நிறுவி முடிக்க அதை மீண்டும் தொடங்கவும்.</translation> <translation id="7193374945610105795"><ph name="ORIGIN" />க்குக் கடவுச்சொற்கள் எதுவும் சேமிக்கப்படவில்லை</translation> <translation id="7196913789568937443">Google இயக்ககத்திற்குக் காப்புப் பிரதி எடுக்கும். இதனால் உங்கள் தரவை எளிதாக மீட்டெடுக்கலாம் அல்லது எப்போது வேண்டுமானாலும் சாதனத்தை மாற்றலாம். உங்கள் காப்புப் பிரதியில் ஆப்ஸ் தரவும் உள்ளடங்கும். உங்கள் காப்புப் பிரதிகள் Googleளுக்குப் பதிவேற்றப்பட்டு, உங்கள் Google கணக்கின் கடவுச்சொல்லைப் பயன்படுத்தி என்க்ரிப்ட் செய்யப்படும். <ph name="BEGIN_LINK1" />மேலும் அறிக<ph name="END_LINK1" /></translation> <translation id="7197190419934240522">உலாவும் ஒவ்வொரு முறையும் Google தேடலையும் Google ஸ்மார்ட்ஸையும் பெறுங்கள்</translation> @@ -4282,6 +4287,7 @@ <translation id="7704628569466676326">இந்தச் சாதனத்துடன் உங்கள் பாதுகாப்பு விசையை இணைத்தால், உங்கள் கணக்கில் உள்நுழைய அதைப் பயன்படுத்தலாம்</translation> <translation id="7705276765467986571">புக்மார்க் மாதிரியை ஏற்ற முடியவில்லை.</translation> <translation id="7705524343798198388">VPN</translation> +<translation id="7707108266051544351">இந்தத் தளம் மோஷன் சென்சார்களைப் பயன்படுத்துவதிலிருந்து தடுக்கப்பட்டுள்ளது.</translation> <translation id="7707922173985738739">மொபைல் டேட்டாவைப் பயன்படுத்து</translation> <translation id="7709152031285164251">தோல்வி - <ph name="INTERRUPT_REASON" /></translation> <translation id="7710568461918838723">&அனுப்பு...</translation> @@ -4383,7 +4389,7 @@ <ph name="BR" /> <ph name="BEGIN_BOLD" />குறிப்பு:<ph name="END_BOLD" /> செயல்முறையின் போது சாதனம் மீண்டும் தொடங்கும்.</translation> <translation id="7829298379596169484">ஆடியோ உள்ளீட்டை அணுகுகிறது</translation> -<translation id="7830594666202422257">சாதனத்தை Linuxஸுடன் இணைத்துள்ளீர்கள்</translation> +<translation id="7830594666202422257">Linuxஸுடன் இணைக்கவும்</translation> <translation id="7831491651892296503">நெட்வொர்க்கை உள்ளமைப்பதில் பிழை</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> <translation id="7832084384634357321">முடிவு நேரம்</translation> @@ -4413,7 +4419,7 @@ <translation id="7877451762676714207">அறியாத சேவையகப் பிழை. மீண்டும் முயலவும் அல்லது சேவையக நிர்வாகியை தொடர்பு கொள்ளவும்.</translation> <translation id="7877680364634660272">உலா</translation> <translation id="7878562273885520351">உங்கள் கடவுச்சொல் திருடப்பட்டிருக்கலாம்</translation> -<translation id="7880823633812189969">நீங்கள் ரீஸ்டார்ட் செய்யும் போது அகத் தரவு நீக்கப்படும்</translation> +<translation id="7880823633812189969">ரீஸ்டார்ட் செய்யும்போது அகத் தரவு நீக்கப்படும்</translation> <translation id="7881483672146086348">கணக்கைப் பார்</translation> <translation id="7882358943899516840">வழங்குநர் வகை</translation> <translation id="7885253890047913815">சமீபத்திய இலக்குகள்</translation> @@ -4959,7 +4965,7 @@ <translation id="8732212173949624846">நீங்கள் உள்நுழைந்துள்ள எல்லா சாதனங்களிலிருக்கும் உலாவல் வரலாற்றைப் படிக்கலாம் மற்றும் மாற்றலாம்</translation> <translation id="8732844209475700754">தனியுரிமை, பாதுகாப்பு, தரவுச் சேகரிப்பு ஆகியவை தொடர்பான மேலும் அமைப்புகள்</translation> <translation id="8734073480934656039">இந்த அமைப்பை இயக்குவது, தொடக்கத்தில் கியோஸ்க் பயன்பாடுகள் தானாக தொடங்குவதை அனுமதிக்கும்.</translation> -<translation id="8734671092194994316">இது உங்கள் பாதுகாப்பு விசையில் <ph name="WEBSITE" /> தளத்தைப் பார்வையிட்டதைப் பதிவு செய்யும்.</translation> +<translation id="8734671092194994316"><ph name="WEBSITE" /> தளத்தைப் பார்வையிட்டதை இது உங்கள் பாதுகாப்பு விசையில் பதிவு செய்யும்.</translation> <translation id="873545264931343897"><ph name="PLUGIN_NAME" /> புதுப்பிக்கப்பட்டதும், அதைச் செயல்படுத்த பக்கத்தை மீண்டும் ஏற்றவும்</translation> <translation id="8736288397686080465">இந்தத் தளம் பின்புலத்தில் புதுப்பிக்கப்படும்.</translation> <translation id="8737685506611670901"><ph name="REPLACED_HANDLER_TITLE" />க்குப் பதிலாக <ph name="PROTOCOL" /> இணைப்புகளைத் திறக்கும்</translation> @@ -5060,7 +5066,7 @@ <translation id="8877448029301136595">[மூலக் கோப்பகம்]</translation> <translation id="8879284080359814990">தாவலாகக் &காண்பி</translation> <translation id="8883847527783433352">வேறொரு கணக்குடன் ஒத்திசை</translation> -<translation id="8884570509232205463">இப்போது உங்கள் சாதனம் <ph name="UNLOCK_TIME" /> மணிக்குப் பூட்டப்படும்.</translation> +<translation id="8884570509232205463">சாதனம் இனி <ph name="UNLOCK_TIME" />க்குப் பூட்டப்படும்.</translation> <translation id="8885197664446363138">Smart Lock இல்லை</translation> <translation id="8888253246822647887">மேம்படுத்தப்பட்டதும் உங்கள் ஆப்ஸ் திறக்கும். மேம்படுத்துவதற்குச் சில நிமிடங்கள் ஆகலாம்.</translation> <translation id="8888432776533519951">வண்ணம்:</translation> diff --git a/chromium/chrome/app/resources/generated_resources_te.xtb b/chromium/chrome/app/resources/generated_resources_te.xtb index f421a4f98c4..d7ba13d14f4 100644 --- a/chromium/chrome/app/resources/generated_resources_te.xtb +++ b/chromium/chrome/app/resources/generated_resources_te.xtb @@ -3467,7 +3467,7 @@ <translation id="6412931879992742813">కొత్త అజ్ఞాత విండో</translation> <translation id="6415900369006735853">మీ ఫోన్ ద్వారా ఇంటర్నెట్కు కనెక్ట్ అవ్వండి</translation> <translation id="6416743254476733475">మీ కంప్యూటర్లో అనుమతించండి లేదా బ్లాక్ చేయండి.</translation> -<translation id="6417265370957905582">Google సహాయకం</translation> +<translation id="6417265370957905582">Google అసిస్టెంట్</translation> <translation id="6418160186546245112">మునుపు ఇన్స్టాల్ చేసిన <ph name="IDS_SHORT_PRODUCT_NAME" /> వెర్షన్కు తిరిగి మారుస్తోంది</translation> <translation id="6418481728190846787">అన్ని యాప్ల కోసం యాక్సెస్ను శాశ్వతంగా తీసివేయి</translation> <translation id="6418511932144861495">కీలకమైన అప్డేట్ను ఇన్స్టాల్ చేయండి</translation> diff --git a/chromium/chrome/app/resources/generated_resources_zh-TW.xtb b/chromium/chrome/app/resources/generated_resources_zh-TW.xtb index 3937c0e6649..d467bdfd7ca 100644 --- a/chromium/chrome/app/resources/generated_resources_zh-TW.xtb +++ b/chromium/chrome/app/resources/generated_resources_zh-TW.xtb @@ -48,7 +48,7 @@ <translation id="1058262162121953039">PUK</translation> <translation id="1061904396131502319">快到休息時間了</translation> <translation id="1067048845568873861">建立時間</translation> -<translation id="1067291318998134776">Linux (測試版)</translation> +<translation id="1067291318998134776">Linux (Beta 版)</translation> <translation id="1067922213147265141">其他 Google 服務</translation> <translation id="1070066693520972135">WEP</translation> <translation id="1070377999570795893">電腦中的其他程式新增了一個擴充功能,可能會使 Chrome 的運作方式發生變更。 @@ -3532,7 +3532,7 @@ <translation id="6514010653036109809">可用的裝置:</translation> <translation id="6514565641373682518">這個網頁已停用滑鼠游標。</translation> <translation id="6518014396551869914">複製圖片(&Y)</translation> -<translation id="6518133107902771759">確認</translation> +<translation id="6518133107902771759">驗證</translation> <translation id="651942933739530207">你想讓 <ph name="APP_NAME" /> 共用你的畫面和音訊輸入嗎?</translation> <translation id="6519437681804756269">[<ph name="TIMESTAMP" />] <ph name="FILE_INFO" /> diff --git a/chromium/chrome/app/resources/google_chrome_strings_bn.xtb b/chromium/chrome/app/resources/google_chrome_strings_bn.xtb index cea54615899..e5cf1f561c1 100644 --- a/chromium/chrome/app/resources/google_chrome_strings_bn.xtb +++ b/chromium/chrome/app/resources/google_chrome_strings_bn.xtb @@ -12,7 +12,7 @@ <translation id="1142745911746664600">Chrome আপডেট করা যাচ্ছে না</translation> <translation id="1154147086299354128">&Chrome এ খুলুন</translation> <translation id="123620459398936149">Chrome OS আপনার ডেটা সিঙ্ক করতে পারেনি৷ দয়া করে আপনার সিঙ্ক পাসফ্রেজ আপডেট করুন৷</translation> -<translation id="127345590676626841">Chrome স্বয়ংক্রিয়ভাবে আপডেট হয় তাই আপনার কাছে সর্বদা নবীনতম ভার্সনটি থাকে৷ এই ডাউনলোডটি সম্পূর্ণ হলে, Chrome পুনরায় চালু হবে এবং আপনি আবার আগের মতো Chrome ব্যবহার করতে পারবেন৷</translation> +<translation id="127345590676626841">Chrome অটোমেটিক আপডেট হয় তাই আপনার কাছে সর্বদা নবীনতম ভার্সনটি থাকে৷ এই ডাউনলোডটি সম্পূর্ণ হলে, Chrome পুনরায় চালু হবে এবং আপনি আবার আগের মতো Chrome ব্যবহার করতে পারবেন৷</translation> <translation id="1302523850133262269">Chrome যখন সাম্প্রতিক সিস্টেম আপডেটগুলিকে ইনস্টল করে তখন দয়া করে অপেক্ষা করুন৷</translation> <translation id="1312676208694947750">{0,plural, =0{Chrome OS-এর আপডেট পাওয়া যাচ্ছে}=1{Chrome OS-এর আপডেট পাওয়া যাচ্ছে}one{# দিন আগে থেকে Chrome OS-এর আপডেট পাওয়া যাচ্ছে}other{# দিন আগে থেকে Chrome OS-এর আপডেট পাওয়া যাচ্ছে}}</translation> <translation id="137466361146087520">Google Chrome বিটা</translation> @@ -227,7 +227,7 @@ <translation id="7408085963519505752">Chrome OS শর্তাবলী</translation> <translation id="7419046106786626209">আপনার ডোমেনে সিঙ্ক উপলভ্য না থাকার কারণে Chrome OS আপনার ডেটা সিঙ্ক করতে পারেনি৷</translation> <translation id="7459554271817304652">ওয়েবে আপনার নিজের মতো করে ব্রাউজার ফিচার সেভ করতে এবং যেকোন কম্পিউটারে Google Chrome থেকে সাইন-ইন সিঙ্ক সেট-আপ করুন৷</translation> -<translation id="7473136999113284234">Chrome স্বয়ংক্রিয়ভাবে আপডেট হয় তাই আপনি সবসময় নবীনতম ভার্সনটি পান।</translation> +<translation id="7473136999113284234">Chrome অটোমেটিক আপডেট হয় তাই আপনি সবসময় নবীনতম ভার্সনটি পান।</translation> <translation id="7486227612705979895">অ্যাড্রেস বারে সাজেশন দেওয়ার জন্য Chrome আপনার ড্রাইভ অ্যাক্সেস করবে</translation> <translation id="748945194546522577">এই ফাইলটি বিপজ্জনক তাই Chrome এটিকে ব্লক করেছে। আপনি উন্নত সুরক্ষার দ্বারা সুরক্ষিত।</translation> <translation id="7531671357096394523">Chrome-এর সবকটি কপি বন্ধ করুন।</translation> diff --git a/chromium/chrome/app/resources/google_chrome_strings_da.xtb b/chromium/chrome/app/resources/google_chrome_strings_da.xtb index 14a456e1a4b..c04328799f9 100644 --- a/chromium/chrome/app/resources/google_chrome_strings_da.xtb +++ b/chromium/chrome/app/resources/google_chrome_strings_da.xtb @@ -122,7 +122,7 @@ Gå til din mail på <ph name="ACCOUNT_EMAIL" /> for at få yderligere vejlednin <translation id="4050175100176540509">Vigtige sikkerhedsforbedringer og nye funktioner er tilgængelige i den seneste version.</translation> <translation id="4053720452172726777">Tilpas Google Chrome</translation> <translation id="4143243756087420366">Chrome-navn og -billede</translation> -<translation id="4147555960264124640">Du er ved at logge ind med en administreret konto og give dens administrator kontrol over din profil i Google Chrome. Dine Chrome-data, f.eks. dine apps, bogmærker, historikdata, adgangskoder og andre indstillinger, knyttes permanent til <ph name="USER_NAME" />. Du kan slette disse data via betjeningspanelet for Google Konti, men du kan ikke knytte disse data til en anden konto. <ph name="LEARN_MORE" /></translation> +<translation id="4147555960264124640">Du er ved at logge ind med en mangerstyret konto og give dens administrator kontrol over din profil i Google Chrome. Dine Chrome-data, f.eks. dine apps, bogmærker, historikdata, adgangskoder og andre indstillinger, knyttes permanent til <ph name="USER_NAME" />. Du kan slette disse data via betjeningspanelet for Google Konti, men du kan ikke knytte disse data til en anden konto. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Installationsprogrammet kunne ikke pakke arkivet ud. Download Google Chrome igen.</translation> <translation id="424864128008805179">Vil du logge ud af Chrome?</translation> <translation id="4251615635259297716">Vil du linke dine Chrome-data til denne konto?</translation> @@ -214,7 +214,7 @@ Gå til din mail på <ph name="ACCOUNT_EMAIL" /> for at få yderligere vejlednin <translation id="7098166902387133879">Google Chrome bruger din mikrofon.</translation> <translation id="7106741999175697885">Jobliste – Google Chrome</translation> <translation id="7164397146364144019">Du kan hjælpe med at gøre Chrome sikrere og nemmere at bruge ved automatisk at rapportere oplysninger om mulige sikkerhedsproblemer til Google.</translation> -<translation id="7242029209006116544">Du er ved at logge ind med en administreret konto og give dens administrator kontrol over din profil i Google Chrome. Dine Chrome-data, f.eks. dine apps, bogmærker, historikdata, adgangskoder og andre indstillinger, knyttes permanent til <ph name="USER_NAME" />. Du kan slette disse data via betjeningspanelet for Google Konti, men du kan ikke knytte disse data til en anden konto. Du kan eventuelt oprette en ny profil for at holde dine eksisterende Chrome-data adskilt. <ph name="LEARN_MORE" /></translation> +<translation id="7242029209006116544">Du er ved at logge ind med en mangerstyret konto og give dens administrator kontrol over din profil i Google Chrome. Dine Chrome-data, f.eks. dine apps, bogmærker, historikdata, adgangskoder og andre indstillinger, knyttes permanent til <ph name="USER_NAME" />. Du kan slette disse data via betjeningspanelet for Google Konti, men du kan ikke knytte disse data til en anden konto. Du kan eventuelt oprette en ny profil for at holde dine eksisterende Chrome-data adskilt. <ph name="LEARN_MORE" /></translation> <translation id="7295052994004373688">Dette sprog bruges til at vise Google Chrome-brugerfladen</translation> <translation id="7296210096911315575">Vigtige oplysninger om brug og sikkerhed</translation> <translation id="7308322188646931570">Chrome skal have lageradgang for at downloade filer</translation> diff --git a/chromium/chrome/app/resources/google_chrome_strings_es.xtb b/chromium/chrome/app/resources/google_chrome_strings_es.xtb index 868c577f428..1ea4d4e1a17 100644 --- a/chromium/chrome/app/resources/google_chrome_strings_es.xtb +++ b/chromium/chrome/app/resources/google_chrome_strings_es.xtb @@ -285,7 +285,7 @@ Google Chrome no puede recuperar tu configuración.</translation> <translation id="8547799825197623713">Barra de aplicaciones de Google Chrome Canary</translation> <translation id="8556340503434111824">Hay una nueva versión de Google Chrome disponible que funciona a una velocidad sin precedentes.</translation> <translation id="8568392309447938879">Para usar las aplicaciones, debes iniciar sesión en Chrome. De ese modo, Chrome podrá sincronizar tus aplicaciones, tus marcadores, tu historial, tus contraseñas y otras opciones en distintos dispositivos.</translation> -<translation id="8606668294522778825">Google Chrome puede utilizar los servicios web para mejorar tu experiencia de navegación. Puedes habilitar o inhabilitar estos servicios. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation> +<translation id="8606668294522778825">Google Chrome puede utilizar servicios web para mejorar tu experiencia de navegación. Puedes habilitar o inhabilitar estos servicios. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation> <translation id="8614913330719544658">Google Chrome no responde. ¿Quieres reiniciarlo ahora?</translation> <translation id="8667808506758191620">El dispositivo <ph name="DEVICE_TYPE" /> está actualizado.</translation> <translation id="8669527147644353129">Ayudante de Google Chrome</translation> diff --git a/chromium/chrome/app/resources/google_chrome_strings_hi.xtb b/chromium/chrome/app/resources/google_chrome_strings_hi.xtb index 19bada9179c..ff702a4181b 100644 --- a/chromium/chrome/app/resources/google_chrome_strings_hi.xtb +++ b/chromium/chrome/app/resources/google_chrome_strings_hi.xtb @@ -244,7 +244,7 @@ Google Chrome आपकी सेटिंग बहाल नहीं कर <translation id="7761834446675418963">Chrome को खोलना और ब्राउज़ करना शुरू करने के लिए अपना नाम क्लिक करें.</translation> <translation id="7777080907402804672">अगर किसी इमेज के बारे में मददगार जानकारी मौजूद नहीं है, तो Chrome उसके बारे में जानकारी देने की कोशिश करेगा. जानकारी तैयार करने के लिए, इमेज Google को भेजी जाती हैं. आप किसी भी समय सेटिंग में जाकर इसे बंद कर सकते हैं.</translation> <translation id="7781002470561365167">Google Chrome का एक नया वर्शन उपलब्ध है.</translation> -<translation id="7787950393032327779">ऐसा लगता है कि प्रोफ़ाइल का उपयोग अन्य Google Chrome प्रोसेस (<ph name="PROCESS_ID" />) द्वारा किसी अन्य कंप्यूटर (<ph name="HOST_NAME" />) पर किया जा रहा है. Chrome ने प्रोफ़ाइल को लॉक कर दिया है ताकि वह दूषित न हो. अगर आप सुनिश्चित हैं कि अन्य प्रोसेस इस प्रोफ़ाइल का उपयोग नहीं कर रही हैं, तो आप प्रोफ़ाइल को अनलॉक कर सकते हैं और Chrome को फिर से लॉन्च कर सकते हैं.</translation> +<translation id="7787950393032327779">ऐसा लगता है कि प्रोफ़ाइल का उपयोग अन्य Google Chrome प्रोसेस (<ph name="PROCESS_ID" />) द्वारा किसी अन्य कंप्यूटर (<ph name="HOST_NAME" />) पर किया जा रहा है. Chrome ने प्रोफ़ाइल को लॉक कर दिया है ताकि वह दूषित न हो. अगर आप पक्का हैं कि अन्य प्रोसेस इस प्रोफ़ाइल का उपयोग नहीं कर रही हैं, तो आप प्रोफ़ाइल को अनलॉक कर सकते हैं और Chrome को फिर से लॉन्च कर सकते हैं.</translation> <translation id="7808348361785373670">Chrome से निकालें...</translation> <translation id="7825851276765848807">अनिर्दिष्ट गड़बड़ी के कारण डाउनलोड विफल हुआ. कृपया Google Chrome फिर से डाउनलोड करें.</translation> <translation id="7855730255114109580">Google Chrome अप टू डेट है</translation> @@ -281,7 +281,7 @@ Google Chrome आपकी सेटिंग बहाल नहीं कर <translation id="8547799825197623713">Chrome ऐप लॉन्चर Canary</translation> <translation id="8556340503434111824">Google Chrome का एक नया वर्शन उपलब्ध है, और यह अब तक का सबसे तेज़ है.</translation> <translation id="8568392309447938879">ऐप्स का उपयोग करने के लिए आपको Chrome में प्रवेश किए हुए रहना होगा. इससे Chrome को सभी डिवाइस में मौजूद आपके ऐप्स, बुकमार्क, इतिहास, पासवर्ड और अन्य सेटिंग समन्वयित करने की अनुमति मिल जाती है.</translation> -<translation id="8606668294522778825">आपके ब्राउज़िंग अनुभव को बेहतर बनाने के लिए Google Chrome, वेब सेवाओं का उपयोग कर सकता है. आप इन सेवाओं को वैकल्पिक रूप से बंद कर सकते हैं. <ph name="BEGIN_LINK" />और जानें<ph name="END_LINK" /></translation> +<translation id="8606668294522778825">आपके ब्राउज़िंग अनुभव को बेहतर बनाने के लिए Google Chrome, वेब सेवाओं का इस्तेमाल कर सकता है. आप चाहें तो इन सेवाओं को बंद करने का विकल्प चुन सकते हैं. <ph name="BEGIN_LINK" />ज़्यादा जानें<ph name="END_LINK" /></translation> <translation id="8614913330719544658">Google Chrome निष्क्रिय है. अभी फिर से लॉन्च करें?</translation> <translation id="8667808506758191620">आपका <ph name="DEVICE_TYPE" /> अद्यतित है.</translation> <translation id="8669527147644353129">Google Chrome सहायक</translation> diff --git a/chromium/chrome/app/resources/google_chrome_strings_ko.xtb b/chromium/chrome/app/resources/google_chrome_strings_ko.xtb index 487d667500f..c96967eaa2a 100644 --- a/chromium/chrome/app/resources/google_chrome_strings_ko.xtb +++ b/chromium/chrome/app/resources/google_chrome_strings_ko.xtb @@ -32,7 +32,7 @@ <translation id="1628000112320670027">Chrome 도움말 보기</translation> <translation id="1662639173275167396"><ph name="BEGIN_LINK_LINUX_OSS" />Linux(베타)<ph name="END_LINK_LINUX_OSS" />와 마찬가지로, Chrome OS는 추가 <ph name="BEGIN_LINK_CROS_OSS" />오픈소스 소프트웨어<ph name="END_LINK_CROS_OSS" />를 사용하여 개발되었습니다.</translation> <translation id="1674870198290878346">Chrome 시크릿 창에서 링크 열기(&G)</translation> -<translation id="1682634494516646069">Chrome에서 다음 데이터 디렉토리를 읽고 쓸 수 없습니다. +<translation id="1682634494516646069">Chrome에서 다음 데이터 디렉터리를 읽고 쓸 수 없습니다. <ph name="USER_DATA_DIRECTORY" /></translation> <translation id="1698376642261615901">Chrome은 웹페이지와 애플리케이션을 빠르게 실행하는 웹 브라우저입니다. 또한 빠르고 안정적이며 사용하기 쉽습니다. Chrome에 기본적으로 제공되는 악성코드 및 피싱 방지 기능으로 웹을 더 안전하게 탐색하세요.</translation> @@ -163,7 +163,7 @@ <translation id="5132929315877954718">Chrome에 사용할 유용한 애플리케이션, 게임, 확장 프로그램 및 테마를 찾아보세요.</translation> <translation id="5170938038195470297">최신 버전의 Chrome에서 가져온 사용자 프로필이기 때문에 사용할 수 없습니다. -일부 기능은 사용하지 못할 수 있습니다. 다른 프로필 디렉토리를 지정하거나 최신 버전의 Chrome을 사용하세요.</translation> +일부 기능은 사용하지 못할 수 있습니다. 다른 프로필 디렉터리를 지정하거나 최신 버전의 Chrome을 사용하세요.</translation> <translation id="5193136243808726294">Chrome OS에서 이 페이지를 열 수 없음</translation> <translation id="5204098752394657250">Chrome <ph name="TERMS_OF_SERVICE_LINK" />서비스 약관<ph name="END_TERMS_OF_SERVICE_LINK" /></translation> <translation id="5251420635869119124">게스트로 사용 기록을 남기지 않고 Chrome을 사용할 수 있습니다.</translation> @@ -244,7 +244,7 @@ Chrome에서 설정을 복구할 수 없습니다.</translation> <translation id="7636297873481318396">위험한 파일이므로 Chrome에서 차단했습니다. 사용자를 안전하게 보호하는 고급 보호 기능이 작동 중입니다.</translation> <translation id="7641148173327520642">시스템 관리자가 <ph name="TARGET_URL_HOSTNAME" /> 액세스를 위해 <ph name="ALTERNATIVE_BROWSER_NAME" />을(를) 열도록 Chrome을 구성했습니다.</translation> <translation id="7651907282515937834">Chrome Enterprise 로고</translation> -<translation id="7747138024166251722">설치 프로그램이 임시 디렉토리를 만들지 못했습니다. 디스크 공간 및 설치 권한을 확인해 보세요.</translation> +<translation id="7747138024166251722">설치 프로그램이 임시 디렉터리를 만들지 못했습니다. 디스크 공간 및 설치 권한을 확인해 보세요.</translation> <translation id="7761834446675418963">Chrome을 열고 탐색을 시작하려면 내 이름을 클릭하세요.</translation> <translation id="7777080907402804672">이미지에 유용한 설명이 없으면 Chrome에서 자동으로 설명을 제공하려고 시도합니다. 설명을 생성하기 위해 이미지가 Google로 전송됩니다. 이 기능은 언제든지 설정에서 사용 중지할 수 있습니다.</translation> <translation id="7781002470561365167">Chrome의 새 버전이 출시되었습니다.</translation> diff --git a/chromium/chrome/app/resources/google_chrome_strings_ta.xtb b/chromium/chrome/app/resources/google_chrome_strings_ta.xtb index 22eea5e67fb..20f5da0bab8 100644 --- a/chromium/chrome/app/resources/google_chrome_strings_ta.xtb +++ b/chromium/chrome/app/resources/google_chrome_strings_ta.xtb @@ -25,7 +25,7 @@ <translation id="1585657529869845941"><ph name="BEGIN_BOLD" />பரவாயில்லை, மாற்று<ph name="END_BOLD" /> எனும் பட்டன் தெரிந்தால், அதைக் கிளிக் செய்யவும்</translation> <translation id="1587223624401073077">Google Chrome உங்கள் கேமராவைப் பயன்படுத்துகிறது.</translation> <translation id="1587325591171447154"><ph name="FILE_NAME" /> ஆபத்தானது என்பதால் Chrome அதைத் தடுத்துள்ளது.</translation> -<translation id="1590588151039584890">புதுப்பிக்க இந்தக் கம்ப்யூட்டரில் Chrome இயக்கத்தை நிறுத்த வேண்டியுள்ளது. இதனால் உள்நுழைந்துள்ள பிற பயனர்கள் தங்களின் சேமிக்கப்படாத மாற்றங்களை இழக்கக்கூடும்.</translation> +<translation id="1590588151039584890">புதுப்பிப்பதற்கு இந்தக் கம்ப்யூட்டரில் Chrome இயங்குவதை நிறுத்த வேண்டும். இதனால் உள்நுழைந்துள்ள பிற பயனர்கள் தங்களின் சேமிக்கப்படாத மாற்றங்களை இழக்கக்கூடும்.</translation> <translation id="1619887657840448962">Chromeஐப் பாதுகாப்பானதாக்க, <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> இல் பட்டியலிடப்படாத பின்வரும் நீட்டிப்பை முடக்கியுள்ளோம், மேலும் அது உங்களுக்குத் தெரியாமல் சேர்க்கப்பட்டிருக்கலாம்.</translation> <translation id="1628000112320670027">Chrome தொடர்பான உதவி பெறுக</translation> <translation id="1662639173275167396">Chrome OS, <ph name="BEGIN_LINK_LINUX_OSS" />Linuxஸைப் (பீட்டா)<ph name="END_LINK_LINUX_OSS" /> போலவே கூடுதல் <ph name="BEGIN_LINK_CROS_OSS" />ஓப்பன் சோர்ஸ் மென்பொருளால்<ph name="END_LINK_CROS_OSS" /> உருவாக்கப்பட்டுள்ளது.</translation> @@ -165,7 +165,7 @@ <translation id="5386244825306882791">Chromeமைத் தொடங்கும்போது அல்லது சர்வபுலத்திலிருந்து தேடலை மேற்கொள்ளும்போது காண்பிக்கப்படும் பக்கத்தையும் இது கட்டுப்படுத்துகிறது.</translation> <translation id="5430073640787465221">உங்கள் விருப்பத்தேர்வுகளின் கோப்பு சிதைவடைந்துள்ளது அல்லது தவறானது. உங்கள் அமைப்புகளை Google Chrome ஆல் மீட்டெடுக்க முடியவில்லை.</translation> <translation id="5483595757826856374">{0,plural, =0{இப்போது Chrome மீண்டும் தொடங்கும்}=1{1 வினாடியில் Chrome மீண்டும் தொடங்கும்}other{# வினாடிகளில் Chrome மீண்டும் தொடங்கும்}}</translation> -<translation id="5543953544073077331">Chromeமின் வேறு நேர்வுகள் இயங்கிக் கொண்டிருக்கின்றன. புதுப்பிக்க அவற்றை மூடவும்.</translation> +<translation id="5543953544073077331">Chromeமின் பிற நேர்வுகள் செயல்பாட்டில் உள்ளன. புதுப்பிக்க அவற்றை மூடவும்.</translation> <translation id="556024056938947818">Google Chrome ஆனது கடவுச்சொற்களைக் காட்ட முயற்சிக்கிறது.</translation> <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation> <translation id="565744775970812598"><ph name="FILE_NAME" /> ஆபத்தானதாக இருக்கலாம் என்பதால் Chrome அதைத் தடுத்துள்ளது.</translation> diff --git a/chromium/chrome/browser/BUILD.gn b/chromium/chrome/browser/BUILD.gn index ed687fdfb15..600fe26a3f3 100644 --- a/chromium/chrome/browser/BUILD.gn +++ b/chromium/chrome/browser/BUILD.gn @@ -2743,6 +2743,7 @@ jumbo_split_static_library("browser") { "//services/proxy_resolver:lib", "//third_party/android_opengl/etc1", "//third_party/android_sdk:cpu_features", + "//third_party/crashpad/crashpad/client:client", "//third_party/libaddressinput:util", "//third_party/libphonenumber", "//third_party/smhasher:murmurhash2", diff --git a/chromium/chrome/browser/android/vr/BUILD.gn b/chromium/chrome/browser/android/vr/BUILD.gn index dcb6b173e88..9400d1cfafd 100644 --- a/chromium/chrome/browser/android/vr/BUILD.gn +++ b/chromium/chrome/browser/android/vr/BUILD.gn @@ -194,6 +194,7 @@ loadable_module("vr_ui_dummy_lib") { "ui_dummy.cc", "ui_dummy.h", ] + no_default_deps = true } android_library("ar_java") { diff --git a/chromium/chrome/browser/devtools/chrome_devtools_session.cc b/chromium/chrome/browser/devtools/chrome_devtools_session.cc index eff328b8b95..119f43f4283 100644 --- a/chromium/chrome/browser/devtools/chrome_devtools_session.cc +++ b/chromium/chrome/browser/devtools/chrome_devtools_session.cc @@ -54,9 +54,7 @@ void ChromeDevToolsSession::sendProtocolResponse( } static bool EnableInternalDevToolsBinaryProtocol() { - static bool disabled = base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kDisableInternalDevToolsBinaryProtocol); - return !disabled; + return false; } void ChromeDevToolsSession::HandleCommand( diff --git a/chromium/chrome/browser/extensions/api/management/management_apitest.cc b/chromium/chrome/browser/extensions/api/management/management_apitest.cc index 1616369c7ed..8c68561345b 100644 --- a/chromium/chrome/browser/extensions/api/management/management_apitest.cc +++ b/chromium/chrome/browser/extensions/api/management/management_apitest.cc @@ -24,6 +24,7 @@ #include "extensions/browser/extension_system.h" #include "extensions/browser/test_management_policy.h" #include "extensions/common/manifest.h" +#include "extensions/common/switches.h" #include "extensions/test/extension_test_message_listener.h" #include "extensions/test/result_catcher.h" #include "extensions/test/test_extension_dir.h" @@ -162,9 +163,17 @@ class InstallReplacementWebAppApiTest : public ExtensionManagementApiTest { ASSERT_TRUE(https_test_server_.Start()); } + void SetUpCommandLine(base::CommandLine* command_line) override { + ExtensionManagementApiTest::SetUpCommandLine(command_line); + command_line->AppendSwitchASCII( + extensions::switches::kWhitelistedExtensionID, + "odfeghegfpmohakomgihhcnoboeecemb"); + } + void RunTest(const char* web_app_path, const char* background_script, - bool from_webstore) { + bool from_webstore, + bool whitelisted) { static constexpr char kManifest[] = R"({ "name": "Management API Test", @@ -173,19 +182,56 @@ class InstallReplacementWebAppApiTest : public ExtensionManagementApiTest { "background": { "scripts": ["background.js"] }, "replacement_web_app": "%s" })"; + + static constexpr char kPem[] = + "-----BEGIN PRIVATE KEY-----" + "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCs5ycnzJEUSwlN" + "U7yAuywl8vro4dXew7Eijdd+gYwHAtaQyKxpeJHy09eusWKTfHEaOdqfqssqPMnl" + "XqoC+Tyt/24xM6rw6uSyAV78DRSAl7AxiyemxTh5P2rzaN4ytJayLpZDzwi38zeZ" + "QJC4TcSk04bclB2zfLFmMe8W53oxdE8vV6Xa2TPFigR6PV0FcRE40cCPHFhRTDwz" + "C04b/qW30Ceix2AeLPT4+qsGroq5kLt7zTgvaA+QToKeZNX41snk1w2u/IhOXG+J" + "0jyZnFU1lgnA9ScMW0laA+Ba2WXB5tLPgyRyyABRRaT5oiJCxRLQc+HFnMdUftGK" + "D4MKnf+/AgMBAAECggEADJ+/8x7zhMjJwBSaEcgYvBiWi0RZ6i7dkwlKL5lj0Os7" + "IU0VkYnVFiaze7TF3sDaPTD2Lmw48zeHAjE8NoVeEdIxiHQeSgLMedaxybNmyNDK" + "c4OWfI2vxuKDe4wvlQIscowGOqM2HsAqUg0tw9chwWsUUKyb0owLI8wHieOSv2OA" + "w8UlhflqkXLBUc4Mx3iqkIwAyrxQXT/vlA0M8/QvikK/zfeZYZ4f8tg23m3T0fV3" + "HC4k/Q09MFyUvURVYNpbPHrL83/ZbaHBniEjy+qBX4POO4xrKhow77tr/znB8bsA" + "T3mRwrEnYoIZmkwxlAdOMNxSYcAKZh4jPWOut0VQ0QKBgQDk341ysCaNzRq7nscR" + "RzDtpAA+UPcS2vcssXKDRjhsTp31qsUsVsYjTX+O/sv2uyb4HikYiFZOe3iPIfOl" + "ni7ZfhYFMMIZFjjP0cjQ7C/+ArxGb96DcTbRf7SNTDOLTtZy1jZSgIRek+2vvcr1" + "a/xPUMCxLEZdUPu+AVhKYHKHOQKBgQDBZVr04r4s5/BygRR3NhFgquI8ffdPHZzC" + "riEO1X/YOucTs+F+qwTvr25kRozpEjFsZJUibJTDngX9OziatAQdnjt5CtabOXd/" + "1rSgUadWEvRrcy/aaouCE1J+1unX6Kk5RHmIsK1YP3wC6JrHmqfnEVq9kaoUubTC" + "WHZfgjQGtwKBgF3B0nD8Bh8quVvIlGXYkwuWll7wzfYUaxMM8gsi1fRQVFcSCMm8" + "FljZ43pRmH5PdoxH1q/tEeX+oImJ8ASVgz2ncB/aNHkQaF+B4dDsIFDfD/+Ozkls" + "NHen5+/GGotj1WefpwsvCIqx8LmAd0cIYIihXP53U6/gf+/7Hw8A6YnJAoGAEbhs" + "xiWEkW7LLGLBck7k9ruRsUNFht1KwNfdtZNAfJqhE8AWuFmJQUEM12lTfgOpvanV" + "tGrIksgG+nYTsLEv81rNTkD8+wof9fnBYTM6Jvvjo3jReKzsjYWhuHeOw7bQ0quA" + "i1LM/1oJzeZsUD/OhLClZNtU/0Mo2enrJsMyay8CgYEApCQ8BDMYewQj2MCM92Vw" + "DWDzqQpfaGIG/eDAeEtdicbfdih3zUWfhEVOpnvf7s7nS8bMVpAo9pGW6sT/s8eX" + "POGiP9efxb2uHsX06pkAYZm9nddIliWnm0/eDBmSSXPymAZaNYFrex4wxMII20K/" + "ZX1nuseC+Lx0yzxa/c+iCWg=" + "-----END PRIVATE KEY-----"; + extensions::TestExtensionDir extension_dir; extension_dir.WriteManifest(base::StringPrintf( kManifest, https_test_server_.GetURL(web_app_path).spec().c_str())); extension_dir.WriteFile(FILE_PATH_LITERAL("background.js"), background_script); + + base::FilePath crx; + if (whitelisted) + crx = extension_dir.PackWithPem(kPem); + else + crx = extension_dir.Pack(); + extensions::ResultCatcher catcher; if (from_webstore) { // |expected_change| is the expected change in the number of installed // extensions. - ASSERT_TRUE(InstallExtensionFromWebstore(extension_dir.UnpackedPath(), - 1 /* expected_change */)); + ASSERT_TRUE(InstallExtensionFromWebstore(crx, 1 /* expected_change */)); } else { - ASSERT_TRUE(LoadExtension(extension_dir.UnpackedPath())); + ASSERT_TRUE(LoadExtension(crx)); } ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); @@ -194,6 +240,16 @@ class InstallReplacementWebAppApiTest : public ExtensionManagementApiTest { net::EmbeddedTestServer https_test_server_; }; +IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest, NotWhitelisted) { + static constexpr char kBackground[] = R"( + chrome.test.assertEq(undefined, chrome.management.installReplacementWebApp); + chrome.test.notifyPass(); + )"; + + RunTest("/management/install_replacement_web_app/good_web_app/index.html", + kBackground, true /* from_webstore */, false /* whitelisted */); +} + IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest, NotWebstore) { static constexpr char kBackground[] = R"( chrome.management.installReplacementWebApp(function() { @@ -203,7 +259,7 @@ IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest, NotWebstore) { });)"; RunTest("/management/install_replacement_web_app/good_web_app/index.html", - kBackground, false /* from_webstore */); + kBackground, false /* from_webstore */, true /* whitelisted */); } IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest, NoGesture) { @@ -215,7 +271,7 @@ IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest, NoGesture) { });)"; RunTest("/management/install_replacement_web_app/good_web_app/index.html", - kBackground, true /* from_webstore */); + kBackground, true /* from_webstore */, true /* whitelisted */); } IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest, NotInstallableWebApp) { @@ -229,7 +285,7 @@ IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest, NotInstallableWebApp) { });)"; RunTest("/management/install_replacement_web_app/bad_web_app/index.html", - kBackground, true /* from_webstore */); + kBackground, true /* from_webstore */, true /* whitelisted */); } IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest, InstallableWebApp) { @@ -261,7 +317,8 @@ IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest, InstallableWebApp) { EXPECT_FALSE(extensions::BookmarkOrHostedAppInstalled(browser()->profile(), good_web_app_url)); - RunTest(kGoodWebAppURL, kBackground, true /* from_webstore */); + RunTest(kGoodWebAppURL, kBackground, true /* from_webstore */, + true /* whitelisted */); EXPECT_TRUE(extensions::BookmarkOrHostedAppInstalled(browser()->profile(), good_web_app_url)); chrome::SetAutoAcceptPWAInstallConfirmationForTesting(false); diff --git a/chromium/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc b/chromium/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc index 0d620192ef6..524ae75a6b3 100644 --- a/chromium/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc +++ b/chromium/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc @@ -31,6 +31,10 @@ #include "chrome/browser/password_manager/password_manager_util_win.h" #elif defined(OS_MACOSX) #include "chrome/browser/password_manager/password_manager_util_mac.h" +#elif defined(OS_CHROMEOS) +#include "chrome/browser/chromeos/login/quick_unlock/auth_token.h" +#include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_factory.h" +#include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_storage.h" #endif namespace { @@ -41,6 +45,14 @@ const char kExportInProgress[] = "in-progress"; // The error message returned to the UI when the user fails to reauthenticate. const char kReauthenticationFailed[] = "reauth-failed"; +#if defined(OS_CHROMEOS) +constexpr static base::TimeDelta kShowPasswordAuthTokenLifetime = + base::TimeDelta::FromSeconds( + PasswordAccessAuthenticator::kAuthValidityPeriodSeconds); +constexpr static base::TimeDelta kExportPasswordsAuthTokenLifetime = + base::TimeDelta::FromSeconds(5); +#endif + // Map password_manager::ExportProgressStatus to // extensions::api::passwords_private::ExportProgressStatus. extensions::api::passwords_private::ExportProgressStatus ConvertStatus( @@ -204,6 +216,18 @@ bool PasswordsPrivateDelegateImpl::OsReauthCall( web_contents_->GetTopLevelNativeWindow(), purpose); #elif defined(OS_MACOSX) return password_manager_util_mac::AuthenticateUser(purpose); +#elif defined(OS_CHROMEOS) + chromeos::quick_unlock::QuickUnlockStorage* quick_unlock_storage = + chromeos::quick_unlock::QuickUnlockFactory::GetForProfile(profile_); + const chromeos::quick_unlock::AuthToken* auth_token = + quick_unlock_storage->GetAuthToken(); + if (!auth_token || !auth_token->GetAge()) + return false; + const base::TimeDelta auth_token_lifespan = + (purpose == password_manager::ReauthPurpose::EXPORT) + ? kExportPasswordsAuthTokenLifetime + : kShowPasswordAuthTokenLifetime; + return auth_token->GetAge() <= auth_token_lifespan; #else return true; #endif diff --git a/chromium/chrome/browser/extensions/api/tabs/tabs_util_chromeos.cc b/chromium/chrome/browser/extensions/api/tabs/tabs_util_chromeos.cc index d09e42c33d2..0d37fecd99d 100644 --- a/chromium/chrome/browser/extensions/api/tabs/tabs_util_chromeos.cc +++ b/chromium/chrome/browser/extensions/api/tabs/tabs_util_chromeos.cc @@ -7,6 +7,7 @@ #include "ash/public/cpp/window_properties.h" #include "ash/public/interfaces/window_pin_type.mojom.h" #include "base/metrics/histogram_macros.h" +#include "chrome/browser/chromeos/accessibility/accessibility_manager.h" #include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" #include "chrome/browser/ui/ash/chrome_screenshot_grabber.h" @@ -25,6 +26,14 @@ namespace tabs_util { void SetLockedFullscreenState(Browser* browser, bool locked) { UMA_HISTOGRAM_BOOLEAN("Extensions.LockedFullscreenStateRequest", locked); + // Disable ChromeVox before entering locked fullscreen. Quickfix for + // crbug.com/957950. + auto* const accessibility_manager = chromeos::AccessibilityManager::Get(); + if (locked && accessibility_manager && + accessibility_manager->IsSpokenFeedbackEnabled()) { + accessibility_manager->EnableSpokenFeedback(false); + } + aura::Window* window = browser->window()->GetNativeWindow(); // TRUSTED_PINNED is used here because that one locks the window fullscreen // without allowing the user to exit (as opposed to regular PINNED). diff --git a/chromium/chrome/browser/extensions/api/web_navigation/web_navigation_apitest.cc b/chromium/chrome/browser/extensions/api/web_navigation/web_navigation_apitest.cc index 183514c8fb5..6ab810e59fa 100644 --- a/chromium/chrome/browser/extensions/api/web_navigation/web_navigation_apitest.cc +++ b/chromium/chrome/browser/extensions/api/web_navigation/web_navigation_apitest.cc @@ -243,6 +243,11 @@ IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, ServerRedirect) { << message_; } +IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, FormSubmission) { + ASSERT_TRUE(StartEmbeddedTestServer()); + ASSERT_TRUE(RunExtensionTest("webnavigation/formSubmission")) << message_; +} + IN_PROC_BROWSER_TEST_F(WebNavigationApiTest, Download) { ASSERT_TRUE(StartEmbeddedTestServer()); content::DownloadManager* download_manager = diff --git a/chromium/chrome/browser/flag-metadata.json b/chromium/chrome/browser/flag-metadata.json index 680b312bcab..d03a24a94ac 100644 --- a/chromium/chrome/browser/flag-metadata.json +++ b/chromium/chrome/browser/flag-metadata.json @@ -2463,11 +2463,21 @@ "expiry_milestone": 76 }, { + "name": "omnibox-group-suggestions-by-search-vs-url", + "owners": [ "krb", "chrome-omnibox-team@google.com" ], + "expiry_milestone": 80 + }, + { "name": "omnibox-material-design-weather-icons", "owners": [ "manukh", "chromium-omnibox-team" ], "expiry_milestone": 76 }, { + "name": "omnibox-max-url-matches", + "owners": [ "krb", "chromium-omnibox-team" ], + "expiry_milestone": 80 + }, + { "name": "omnibox-new-answer-layout", "owners": [ "chrome-omnibox-team@google.com" ], "expiry_milestone": 76 diff --git a/chromium/chrome/browser/resources/management/management_browser_proxy.js b/chromium/chrome/browser/resources/management/management_browser_proxy.js index cdbda1f96f8..8d234df0008 100644 --- a/chromium/chrome/browser/resources/management/management_browser_proxy.js +++ b/chromium/chrome/browser/resources/management/management_browser_proxy.js @@ -30,18 +30,7 @@ management.BrowserReportingResponse; /** * @typedef {{ - * overview: string, - * setup: string, - * data: string, - * }} - */ -management.ManagedInfo; - -/** - * @typedef {{ - * accountManagedInfo: ?management.ManagedInfo, * browserManagementNotice: string, - * deviceManagedInfo: ?management.ManagedInfo, * extensionReportingTitle: string, * pageSubtitle: string, * managed: boolean, diff --git a/chromium/chrome/browser/resources/management/management_ui.html b/chromium/chrome/browser/resources/management/management_ui.html index a46ab2232a0..98ee40d924d 100644 --- a/chromium/chrome/browser/resources/management/management_ui.html +++ b/chromium/chrome/browser/resources/management/management_ui.html @@ -181,30 +181,12 @@ [[subtitle_]] </h2> </section> - <section class="overview-section"> + <section class="overview-section" hidden="[[!managementOverview_]]"> <if expr="not chromeos"> <div inner-h-t-m-l="[[managementNoticeHtml_]]"></div> </if> <if expr="chromeos"> <div>[[managementOverview_]]</div> - <div>[[deviceManagedInfo_.overview]]</div> - <ul class="overview-messages" - hidden="[[!deviceManagedInfo_]]"> - <li> - [[deviceManagedInfo_.setup]] - <a href="$i18nRaw{managementDeviceLearnMoreUrl}" - target="_blank">$i18n{learnMore}</a> - </li> - <li>[[deviceManagedInfo_.data]]</li> - </ul> - <div>[[accountManagedInfo_.overview]]</div> - <ul class="overview-messages" hidden="[[!accountManagedInfo_]]"> - <li>[[accountManagedInfo_.setup]] - <a href="$i18nRaw{managementAccountLearnMoreUrl}" - target="_blank">$i18n{learnMore}</a> - </li> - <li>[[accountManagedInfo_.data]]</li> - </ul> </if> </section> <if expr="chromeos"> diff --git a/chromium/chrome/browser/resources/management/management_ui.js b/chromium/chrome/browser/resources/management/management_ui.js index 13f177d9076..5b605220965 100644 --- a/chromium/chrome/browser/resources/management/management_ui.js +++ b/chromium/chrome/browser/resources/management/management_ui.js @@ -48,13 +48,8 @@ Polymer({ /** @private */ managementOverview_: String, - /** @private {?management.ManagedInfo} */ - deviceManagedInfo_: Object, // </if> - /** @private {?management.ManagedInfo} */ - accountManagedInfo_: Object, - /** @private */ subtitle_: String, @@ -249,10 +244,8 @@ Polymer({ this.managed_ = data.managed; this.extensionReportingSubtitle_ = data.extensionReportingTitle; this.subtitle_ = data.pageSubtitle; - this.accountManagedInfo_ = data.accountManagedInfo; // <if expr="chromeos"> this.managementOverview_ = data.overview; - this.deviceManagedInfo_ = data.deviceManagedInfo; // </if> // <if expr="not chromeos"> this.managementNoticeHtml_ = data.browserManagementNotice; diff --git a/chromium/chrome/browser/resources/settings/autofill_page/BUILD.gn b/chromium/chrome/browser/resources/settings/autofill_page/BUILD.gn index c40261fd353..84a9f949cac 100644 --- a/chromium/chrome/browser/resources/settings/autofill_page/BUILD.gn +++ b/chromium/chrome/browser/resources/settings/autofill_page/BUILD.gn @@ -9,6 +9,7 @@ js_type_check("closure_compile") { ":address_edit_dialog", ":autofill_page", ":autofill_section", + ":blocking_request_manager", ":credit_card_edit_dialog", ":credit_card_list", ":credit_card_list_entry", @@ -50,6 +51,9 @@ js_library("autofill_section") { externs_list = [ "$externs_path/autofill_private.js" ] } +js_library("blocking_request_manager") { +} + js_library("payments_section") { deps = [ ":credit_card_edit_dialog", @@ -134,5 +138,8 @@ js_library("password_edit_dialog") { } js_library("show_password_behavior") { + deps = [ + ":blocking_request_manager", + ] externs_list = [ "$externs_path/passwords_private.js" ] } diff --git a/chromium/chrome/browser/resources/settings/autofill_page/blocking_request_manager.html b/chromium/chrome/browser/resources/settings/autofill_page/blocking_request_manager.html new file mode 100644 index 00000000000..12f53887d68 --- /dev/null +++ b/chromium/chrome/browser/resources/settings/autofill_page/blocking_request_manager.html @@ -0,0 +1,2 @@ +<link rel="import" href="chrome://resources/html/cr.html"> +<script src="blocking_request_manager.js"></script> diff --git a/chromium/chrome/browser/resources/settings/autofill_page/blocking_request_manager.js b/chromium/chrome/browser/resources/settings/autofill_page/blocking_request_manager.js new file mode 100644 index 00000000000..69d4eb60818 --- /dev/null +++ b/chromium/chrome/browser/resources/settings/autofill_page/blocking_request_manager.js @@ -0,0 +1,40 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Helper class for making blocking requests that are resolved + * elsewhere in the DOM. + */ +cr.define('settings', function() { + class BlockingRequestManager { + /** @param {Function} makeRequest Function to initiate flow for request. */ + constructor(makeRequest) { + this.makeRequest_ = makeRequest; + /** + * @private {Function} callback Provided in requests and called when the + * request is resolved. + */ + this.callback_ = null; + } + + /** + * Make a blocking request. + * @param {Function} callback Function to be called if/when the request is + * successfully resolved. + */ + request(callback) { + this.callback_ = callback; + this.makeRequest_(); + } + + /** Called if/when request is resolved successfully. */ + resolve() { + this.callback_(); + } + } + + return { + BlockingRequestManager: BlockingRequestManager, + }; +}); diff --git a/chromium/chrome/browser/resources/settings/autofill_page/passwords_export_dialog.html b/chromium/chrome/browser/resources/settings/autofill_page/passwords_export_dialog.html index bc044b56f64..ab305896fc3 100644 --- a/chromium/chrome/browser/resources/settings/autofill_page/passwords_export_dialog.html +++ b/chromium/chrome/browser/resources/settings/autofill_page/passwords_export_dialog.html @@ -6,6 +6,9 @@ <link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-progress/paper-progress.html"> <link rel="import" href="../settings_shared_css.html"> +<if expr="chromeos"> +<link rel="import" href="blocking_request_manager.html"> +</if> <dom-module id="passwords-export-dialog"> <template> diff --git a/chromium/chrome/browser/resources/settings/autofill_page/passwords_export_dialog.js b/chromium/chrome/browser/resources/settings/autofill_page/passwords_export_dialog.js index 094f607d633..d57d44916c2 100644 --- a/chromium/chrome/browser/resources/settings/autofill_page/passwords_export_dialog.js +++ b/chromium/chrome/browser/resources/settings/autofill_page/passwords_export_dialog.js @@ -52,6 +52,11 @@ Polymer({ /** @private */ showErrorDialog_: Boolean, + + // <if expr="chromeos"> + /** @type settings.BlockingRequestManager */ + tokenRequestManager: Object + // </if> }, listeners: { @@ -177,11 +182,22 @@ Polymer({ this.async(() => this.fire('passwords-export-dialog-close')); }, + /** @private */ + onExportTap_: function() { + // <if expr="chromeos"> + this.tokenRequestManager.request(this.exportPasswords_.bind(this)); + // </if> + // <if expr="not chromeos"> + this.exportPasswords_(); + // </if> + }, + /** - * Fires an event that should trigger the password export process. + * Tells the PasswordsPrivate API to export saved passwords in a .csv pending + * security checks. * @private */ - onExportTap_: function() { + exportPasswords_: function() { this.passwordManager_.exportPasswords(() => { if (chrome.runtime.lastError && chrome.runtime.lastError.message == 'in-progress') { diff --git a/chromium/chrome/browser/resources/settings/autofill_page/passwords_section.html b/chromium/chrome/browser/resources/settings/autofill_page/passwords_section.html index 74cd237e755..2f65256cce8 100644 --- a/chromium/chrome/browser/resources/settings/autofill_page/passwords_section.html +++ b/chromium/chrome/browser/resources/settings/autofill_page/passwords_section.html @@ -23,6 +23,10 @@ <link rel="import" href="passwords_shared_css.html"> <link rel="import" href="password_list_item.html"> <link rel="import" href="password_manager_proxy.html"> +<if expr="chromeos"> +<link rel="import" href="../controls/password_prompt_dialog.html"> +<link rel="import" href="blocking_request_manager.html"> +</if> <dom-module id="passwords-section"> <template> @@ -106,6 +110,9 @@ scroll-target="[[subpageScrollTarget]]" risk-selection> <template> <password-list-item item="[[item]]" tabindex$="[[tabIndex]]" +<if expr="chromeos"> + token-request-manager="[[tokenRequestManager_]]" +</if> first$="[[!index]]" iron-list-tab-index="[[tabIndex]]" last-focused="{{lastFocused_}}" list-blurred="{{listBlurred_}}"> </password-list-item> @@ -134,14 +141,27 @@ </cr-action-menu> <template is="dom-if" if="[[showPasswordsExportDialog_]]" restamp> <passwords-export-dialog - on-passwords-export-dialog-close="onPasswordsExportDialogClosed_"> +<if expr="chromeos"> + token-request-manager="[[tokenRequestManager_]]" +</if> + on-passwords-export-dialog-close="onPasswordsExportDialogClosed_"> </passwords-export-dialog> </template> <template is="dom-if" if="[[showPasswordEditDialog_]]" restamp> <password-edit-dialog on-close="onPasswordEditDialogClosed_" +<if expr="chromeos"> + token-request-manager="[[tokenRequestManager_]]" +</if> item="[[activePassword.item]]"> </password-edit-dialog> </template> +<if expr="chromeos"> + <template is="dom-if" if="[[showPasswordPromptDialog_]]" restamp> + <settings-password-prompt-dialog auth-token="{{authToken_}}" + on-close="onPasswordPromptClosed_"> + </settings-password-prompt-dialog> + </template> +</if> <cr-toast id="undoToast" duration="[[toastDuration_]]"> <div id="undoLabel">$i18n{passwordDeleted}</div> <paper-button on-click="onUndoButtonTap_"> diff --git a/chromium/chrome/browser/resources/settings/autofill_page/passwords_section.js b/chromium/chrome/browser/resources/settings/autofill_page/passwords_section.js index 2dc5b59bacb..1603dc8b370 100644 --- a/chromium/chrome/browser/resources/settings/autofill_page/passwords_section.js +++ b/chromium/chrome/browser/resources/settings/autofill_page/passwords_section.js @@ -122,11 +122,28 @@ Polymer({ /** @private */ listBlurred_: Boolean, + + // <if expr="chromeos"> + /** + * Auth token for retrieving passwords if required by OS. + * @private + */ + authToken_: { + type: String, + value: '', + observer: 'onAuthTokenChanged_', + }, + + /** @private */ + showPasswordPromptDialog_: Boolean, + + /** @private {settings.BlockingRequestManager} */ + tokenRequestManager_: Object + // </if> }, listeners: { 'password-menu-tap': 'onPasswordMenuTap_', - 'export-passwords': 'onExportPasswords_', }, keyBindings: { @@ -184,6 +201,11 @@ Polymer({ // Set the manager. These can be overridden by tests. this.passwordManager_ = PasswordManagerImpl.getInstance(); + // <if expr="chromeos"> + this.tokenRequestManager_ = new settings.BlockingRequestManager( + () => this.showPasswordPromptDialog_ = true); + // </if> + // Request initial data. this.passwordManager_.getSavedPasswordList(setSavedPasswordsListener); this.passwordManager_.getExceptionList(setPasswordExceptionsListener); @@ -219,6 +241,33 @@ Polymer({ } }, + // <if expr="chromeos"> + /** + * When |authToken_| changes to a new non-empty value, it means that the + * password-prompt-dialog succeeded in creating a fresh token in the + * quickUnlockPrivate API. Because new tokens can only ever be created + * immediately following a GAIA password check, the passwordsPrivate API can + * now safely grant requests for secure data (i.e. saved passwords) for a + * limited time. This observer resolves the request, triggering a callback + * that requires a fresh auth token to succeed and that was provided to the + * BlockingRequestManager by another DOM element seeking secure data. + * + * @param {string} newToken The newly created auth token. Note that its + * precise value is not relevant here, only the facts that it changed and + * that it is non-empty (i.e. not expired). + * @private + */ + onAuthTokenChanged_: function(newToken) { + if (newToken) { + this.tokenRequestManager_.resolve(); + } + }, + + onPasswordPromptClosed_: function() { + this.showPasswordPromptDialog_ = false; + }, + // </if> + /** * Shows the edit password dialog. * @param {!Event} e diff --git a/chromium/chrome/browser/resources/settings/autofill_page/show_password_behavior.html b/chromium/chrome/browser/resources/settings/autofill_page/show_password_behavior.html index 73ee8c03754..f9787f2abb6 100644 --- a/chromium/chrome/browser/resources/settings/autofill_page/show_password_behavior.html +++ b/chromium/chrome/browser/resources/settings/autofill_page/show_password_behavior.html @@ -1,2 +1,6 @@ <link rel="import" href="chrome://resources/html/polymer.html"> +<if expr="chromeos"> +<link rel="import" href="blocking_request_manager.html"> +</if> + <script src="show_password_behavior.js"></script> diff --git a/chromium/chrome/browser/resources/settings/autofill_page/show_password_behavior.js b/chromium/chrome/browser/resources/settings/autofill_page/show_password_behavior.js index 097bdb2f0c6..4f73b4d1e1b 100644 --- a/chromium/chrome/browser/resources/settings/autofill_page/show_password_behavior.js +++ b/chromium/chrome/browser/resources/settings/autofill_page/show_password_behavior.js @@ -16,6 +16,11 @@ const ShowPasswordBehavior = { * @type {!ShowPasswordBehavior.UiEntryWithPassword} */ item: Object, + + // <if expr="chromeos"> + /** @type settings.BlockingRequestManager */ + tokenRequestManager: Object + // </if> }, /** @@ -69,13 +74,22 @@ const ShowPasswordBehavior = { onShowPasswordButtonTap_: function() { if (this.item.password) { this.set('item.password', ''); - } else { - PasswordManagerImpl.getInstance() - .getPlaintextPassword(this.item.entry.id) - .then(password => { - this.set('item.password', password); - }); + return; } + PasswordManagerImpl.getInstance() + .getPlaintextPassword(this.item.entry.id) + .then(password => { + if (password) { + this.set('item.password', password); + } + // <if expr="chromeos"> + if (!password) { + // If no password was found, refresh auth token and retry. + this.tokenRequestManager.request( + this.onShowPasswordButtonTap_.bind(this)); + } + // </if> + }); }, }; diff --git a/chromium/chrome/browser/resources/settings/internet_page/internet_config.js b/chromium/chrome/browser/resources/settings/internet_page/internet_config.js index 3110ed73c5a..59ab7f234e9 100644 --- a/chromium/chrome/browser/resources/settings/internet_page/internet_config.js +++ b/chromium/chrome/browser/resources/settings/internet_page/internet_config.js @@ -122,6 +122,12 @@ Polymer({ * @private */ getDialogTitle_: function() { + // If no properties are available yet, wait until they are set as part of + // open(). + if (!this.managedProperties_) { + return ''; + } + const name = /** @type {string} */ ( CrOnc.getActiveValue(this.managedProperties_.Name)); if (name) { diff --git a/chromium/chrome/browser/resources/settings/internet_page/internet_detail_page.html b/chromium/chrome/browser/resources/settings/internet_page/internet_detail_page.html index e178d57addd..480ec02a983 100644 --- a/chromium/chrome/browser/resources/settings/internet_page/internet_detail_page.html +++ b/chromium/chrome/browser/resources/settings/internet_page/internet_detail_page.html @@ -179,6 +179,7 @@ if="[[showAutoConnect_(networkProperties_, globalPolicy, managedNetworkAvailable)]]"> <settings-toggle-button + id="autoConnectToggle" pref="{{autoConnect_}}" label="[[getAutoConnectToggleLabel_(networkProperties_)]]"> </settings-toggle-button> diff --git a/chromium/chrome/browser/resources/settings/internet_page/internet_detail_page.js b/chromium/chrome/browser/resources/settings/internet_page/internet_detail_page.js index 40d882c4de9..3a2685ec7d5 100644 --- a/chromium/chrome/browser/resources/settings/internet_page/internet_detail_page.js +++ b/chromium/chrome/browser/resources/settings/internet_page/internet_detail_page.js @@ -90,7 +90,7 @@ Polymer({ globalPolicy: { type: Object, value: null, - observer: 'updateAutoConnectPref_' + observer: 'globalPolicyChanged_', }, /** @@ -278,6 +278,12 @@ Polymer({ }); }, + /** @param {!chrome.networkingPrivate.GlobalPolicy} globalPolicy */ + globalPolicyChanged_: function(globalPolicy) { + this.updateAutoConnectPref_( + !!(this.autoConnect_ && this.autoConnect_.value), globalPolicy); + }, + /** @private */ networkPropertiesChanged_: function() { if (!this.networkProperties_) { @@ -285,13 +291,8 @@ Polymer({ } // Update autoConnect if it has changed. Default value is false. - const autoConnect = CrOnc.getAutoConnect(this.networkProperties_); - if (this.autoConnect_ === undefined) { - this.updateAutoConnectPref_(); - } - if (autoConnect != this.autoConnect_.value) { - this.autoConnect_.value = autoConnect; - } + this.updateAutoConnectPref_( + CrOnc.getAutoConnect(this.networkProperties_), this.globalPolicy); // Update preferNetwork if it has changed. Default value is false. const priority = /** @type {number} */ ( @@ -340,18 +341,36 @@ Polymer({ this.setNetworkProperties_(onc); }, - /** @private */ - updateAutoConnectPref_: function() { + /** + * Updates auto-connect pref value. + * @param {boolean} value + * @param {!chrome.networkingPrivate.GlobalPolicy|undefined} globalPolicy + * @private + */ + updateAutoConnectPref_: function(value, globalPolicy) { + let enforcement; + let controlledBy; + + if (this.isAutoConnectEnforcedByPolicy( + this.networkProperties_, globalPolicy)) { + enforcement = chrome.settingsPrivate.Enforcement.ENFORCED; + controlledBy = chrome.settingsPrivate.ControlledBy.DEVICE_POLICY; + } + + if (this.autoConnect_ && this.autoConnect_.value == value && + enforcement == this.autoConnect_.enforcement && + controlledBy == this.autoConnect_.controlledBy) { + return; + } + const newPrefValue = { key: 'fakeAutoConnectPref', - value: !!this.autoConnect_ && !!this.autoConnect_.value, + value: value, type: chrome.settingsPrivate.PrefType.BOOLEAN, }; - if (this.isAutoConnectEnforcedByPolicy( - this.networkProperties_, this.globalPolicy)) { - newPrefValue.controlledBy = - chrome.settingsPrivate.ControlledBy.DEVICE_POLICY; - newPrefValue.enforcement = chrome.settingsPrivate.Enforcement.ENFORCED; + if (enforcement) { + newPrefValue.enforcement = enforcement; + newPrefValue.controlledBy = controlledBy; } this.autoConnect_ = newPrefValue; diff --git a/chromium/chrome/browser/resources/settings/os_settings_resources.grd b/chromium/chrome/browser/resources/settings/os_settings_resources.grd index 71961bb6878..954acb49036 100644 --- a/chromium/chrome/browser/resources/settings/os_settings_resources.grd +++ b/chromium/chrome/browser/resources/settings/os_settings_resources.grd @@ -665,12 +665,22 @@ <structure name="IDR_OS_SETTINGS_ADDRESS_EDIT_DIALOG_JS" file="autofill_page/address_edit_dialog.js" type="chrome_html" /> + <if expr="chromeos"> + <structure name="IDR_OS_SETTINGS_BLOCKING_REQUEST_MANAGER_HTML" + file="autofill_page/blocking_request_manager.html" + type="chrome_html" /> + <structure name="IDR_OS_SETTINGS_BLOCKING_REQUEST_MANAGER_JS" + file="autofill_page/blocking_request_manager.js" + type="chrome_html" /> + </if> <structure name="IDR_OS_SETTINGS_SHOW_PASSWORD_BEHAVIOR_HTML" file="autofill_page/show_password_behavior.html" - type="chrome_html" /> + type="chrome_html" + preprocess="true" /> <structure name="IDR_OS_SETTINGS_SHOW_PASSWORD_BEHAVIOR_JS" file="autofill_page/show_password_behavior.js" - type="chrome_html" /> + type="chrome_html" + preprocess="true" /> <structure name="IDR_OS_SETTINGS_PASSWORD_LIST_ITEM_HTML" file="autofill_page/password_list_item.html" type="chrome_html" @@ -686,7 +696,8 @@ type="chrome_html" /> <structure name="IDR_OS_SETTINGS_PASSWORDS_SECTION_HTML" file="autofill_page/passwords_section.html" - type="chrome_html" /> + type="chrome_html" + preprocess="true" /> <structure name="IDR_OS_SETTINGS_PASSWORDS_SECTION_JS" file="autofill_page/passwords_section.js" type="chrome_html" @@ -700,10 +711,12 @@ type="chrome_html" /> <structure name="IDR_OS_SETTINGS_PASSWORDS_EXPORT_DIALOG_HTML" file="autofill_page/passwords_export_dialog.html" - type="chrome_html" /> + type="chrome_html" + preprocess="true" /> <structure name="IDR_OS_SETTINGS_PASSWORDS_EXPORT_DIALOG_JS" file="autofill_page/passwords_export_dialog.js" - type="chrome_html" /> + type="chrome_html" + preprocess="true" /> <structure name="IDR_OS_SETTINGS_PAYMENTS_SECTION_HTML" file="autofill_page/payments_section.html" type="chrome_html" /> diff --git a/chromium/chrome/browser/resources/settings/settings_resources.grd b/chromium/chrome/browser/resources/settings/settings_resources.grd index fa4b6f251d1..15e671a49c7 100644 --- a/chromium/chrome/browser/resources/settings/settings_resources.grd +++ b/chromium/chrome/browser/resources/settings/settings_resources.grd @@ -736,12 +736,22 @@ <structure name="IDR_SETTINGS_ADDRESS_EDIT_DIALOG_JS" file="autofill_page/address_edit_dialog.js" type="chrome_html" /> + <if expr="chromeos"> + <structure name="IDR_SETTINGS_BLOCKING_REQUEST_MANAGER_HTML" + file="autofill_page/blocking_request_manager.html" + type="chrome_html" /> + <structure name="IDR_SETTINGS_BLOCKING_REQUEST_MANAGER_JS" + file="autofill_page/blocking_request_manager.js" + type="chrome_html" /> + </if> <structure name="IDR_SETTINGS_SHOW_PASSWORD_BEHAVIOR_HTML" file="autofill_page/show_password_behavior.html" - type="chrome_html" /> + type="chrome_html" + preprocess="true" /> <structure name="IDR_SETTINGS_SHOW_PASSWORD_BEHAVIOR_JS" file="autofill_page/show_password_behavior.js" - type="chrome_html" /> + type="chrome_html" + preprocess="true" /> <structure name="IDR_SETTINGS_PASSWORD_LIST_ITEM_HTML" file="autofill_page/password_list_item.html" type="chrome_html" @@ -757,7 +767,8 @@ type="chrome_html" /> <structure name="IDR_SETTINGS_PASSWORDS_SECTION_HTML" file="autofill_page/passwords_section.html" - type="chrome_html" /> + type="chrome_html" + preprocess="true" /> <structure name="IDR_SETTINGS_PASSWORDS_SECTION_JS" file="autofill_page/passwords_section.js" type="chrome_html" @@ -771,10 +782,12 @@ type="chrome_html" /> <structure name="IDR_SETTINGS_PASSWORDS_EXPORT_DIALOG_HTML" file="autofill_page/passwords_export_dialog.html" - type="chrome_html" /> + type="chrome_html" + preprocess="true" /> <structure name="IDR_SETTINGS_PASSWORDS_EXPORT_DIALOG_JS" file="autofill_page/passwords_export_dialog.js" - type="chrome_html" /> + type="chrome_html" + preprocess="true" /> <structure name="IDR_SETTINGS_PAYMENTS_SECTION_HTML" file="autofill_page/payments_section.html" type="chrome_html" /> diff --git a/chromium/chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_localized_strings_provider.cc b/chromium/chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_localized_strings_provider.cc index 7d3874c5928..7a95459f913 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_localized_strings_provider.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_localized_strings_provider.cc @@ -76,6 +76,9 @@ GetLocalizedStringsWithPlaceholders() { localized_strings([] { std::vector<LocalizedStringWithName> localized_strings; + // TODO(crbug.com/964547): Refactor so that any change to these strings + // will surface in both the OOBE and post-OOBE UIs without having to + // adjust both localization calls separately. localized_strings.emplace_back( "startSetupPageMessage", l10n_util::GetStringFUTF16( @@ -120,8 +123,26 @@ void AddLocalizedValuesToBuilder(::login::LocalizedValuesBuilder* builder) { for (const auto& entry : kLocalizedStringsWithoutPlaceholders) builder->Add(entry.name, entry.id); - for (const auto& entry : GetLocalizedStringsWithPlaceholders()) - builder->Add(entry.name, entry.localized_string); + // TODO(crbug.com/964547): Refactor so that any change to these strings will + // surface in both the OOBE and post-OOBE UIs without having to adjust both + // localization calls separately. + builder->AddF( + "startSetupPageMessage", IDS_MULTIDEVICE_SETUP_START_SETUP_PAGE_MESSAGE, + base::ASCIIToUTF16(kFootnoteMarker), + base::UTF8ToUTF16(chromeos::multidevice_setup:: + GetBoardSpecificBetterTogetherSuiteLearnMoreUrl() + .spec())); + + builder->AddF("startSetupPageFootnote", + IDS_MULTIDEVICE_SETUP_START_SETUP_PAGE_FOOTNOTE, + base::ASCIIToUTF16(kFootnoteMarker)); + + builder->AddF( + "startSetupPageFeatureListAwm", + IDS_MULTIDEVICE_SETUP_START_SETUP_PAGE_AWM_DESCRIPTION, + base::UTF8ToUTF16( + chromeos::multidevice_setup::GetBoardSpecificMessagesLearnMoreUrl() + .spec())); } } // namespace multidevice_setup diff --git a/chromium/chrome/browser/ui/webui/management_ui_browsertest.cc b/chromium/chrome/browser/ui/webui/management_ui_browsertest.cc index efc934ad8b1..9884bdd170c 100644 --- a/chromium/chrome/browser/ui/webui/management_ui_browsertest.cc +++ b/chromium/chrome/browser/ui/webui/management_ui_browsertest.cc @@ -83,9 +83,6 @@ IN_PROC_BROWSER_TEST_F(ManagementUITest, ManagementStateChange) { l10n_util::GetStringUTF16(IDS_MANAGEMENT_EXTENSIONS_INSTALLED)}, {"pageSubtitle", l10n_util::GetStringUTF16(IDS_MANAGEMENT_NOT_MANAGED_SUBTITLE)}, - {"accountManagedInfo.overview", base::string16()}, - {"accountManagedInfo.data", base::string16()}, - {"accountManagedInfo.setup", base::string16()}, }; VerifyTexts(unmanaged_value_ptr.get(), expected_unmanaged_values); @@ -116,13 +113,6 @@ IN_PROC_BROWSER_TEST_F(ManagementUITest, ManagementStateChange) { {"extensionReportingTitle", l10n_util::GetStringUTF16(IDS_MANAGEMENT_EXTENSIONS_INSTALLED)}, {"pageSubtitle", l10n_util::GetStringUTF16(IDS_MANAGEMENT_SUBTITLE)}, - {"accountManagedInfo.overview", - l10n_util::GetStringUTF16( - IDS_MANAGEMENT_ACCOUNT_MANAGED_CLARIFICATION_UNKNOWN_DOMAIN)}, - {"accountManagedInfo.data", - l10n_util::GetStringUTF16(IDS_MANAGEMENT_ACCOUNT_MANAGED_DATA)}, - {"accountManagedInfo.setup", - l10n_util::GetStringUTF16(IDS_MANAGEMENT_ACCOUNT_MANAGED_SETUP)}, }; VerifyTexts(managed_value_ptr.get(), expected_managed_values); diff --git a/chromium/chrome/browser/ui/webui/management_ui_handler.cc b/chromium/chrome/browser/ui/webui/management_ui_handler.cc index d276f4c01e7..8256ce760e8 100644 --- a/chromium/chrome/browser/ui/webui/management_ui_handler.cc +++ b/chromium/chrome/browser/ui/webui/management_ui_handler.cc @@ -117,13 +117,11 @@ const char kManagementReportNetworkInterfaces[] = "managementReportNetworkInterfaces"; const char kManagementReportUsers[] = "managementReportUsers"; const char kManagementPrinting[] = "managementPrinting"; +const char kOverview[] = "overview"; +const char kAccountManagedInfo[] = "accountManagedInfo"; const char kDeviceManagedInfo[] = "deviceManagedInfo"; #endif // defined(OS_CHROMEOS) -const char kOverview[] = "overview"; -const char kAccountManagedInfo[] = "accountManagedInfo"; -const char kSetup[] = "setup"; -const char kData[] = "data"; namespace { @@ -344,9 +342,10 @@ void ManagementUIHandler::InitializeInternal(content::WebUI* web_ui, auto handler = std::make_unique<ManagementUIHandler>(); #if defined(OS_CHROMEOS) - handler->managed_ = IsProfileManaged(profile) || IsDeviceManaged(); + handler->account_managed_ = IsProfileManaged(profile); + handler->device_managed_ = IsDeviceManaged(); #else - handler->managed_ = IsProfileManaged(profile) || IsBrowserManaged(); + handler->account_managed_ = IsProfileManaged(profile) || IsBrowserManaged(); #endif // defined(OS_CHROMEOS) web_ui->AddMessageHandler(std::move(handler)); @@ -484,19 +483,20 @@ void ManagementUIHandler::AddExtensionReportingInfo( } base::DictionaryValue ManagementUIHandler::GetContextualManagedData( - Profile* profile) const { + Profile* profile) { base::DictionaryValue response; - #if defined(OS_CHROMEOS) - policy::BrowserPolicyConnectorChromeOS* connector = - g_browser_process->platform_part()->browser_policy_connector_chromeos(); - std::string management_domain = connector->GetEnterpriseDisplayDomain(); - if (management_domain.empty()) - management_domain = connector->GetRealm(); + std::string management_domain = GetDeviceDomain(); if (management_domain.empty()) management_domain = GetAccountDomain(profile); #else std::string management_domain = GetAccountDomain(profile); + + response.SetString("browserManagementNotice", + l10n_util::GetStringFUTF16( + managed_() ? IDS_MANAGEMENT_BROWSER_NOTICE + : IDS_MANAGEMENT_NOT_MANAGED_NOTICE, + base::UTF8ToUTF16(chrome::kManagedUiLearnMoreUrl))); #endif if (management_domain.empty()) { @@ -505,24 +505,20 @@ base::DictionaryValue ManagementUIHandler::GetContextualManagedData( l10n_util::GetStringUTF16(IDS_MANAGEMENT_EXTENSIONS_INSTALLED)); #if !defined(OS_CHROMEOS) - response.SetString("browserManagementNotice", - l10n_util::GetStringFUTF16( - managed_ ? IDS_MANAGEMENT_BROWSER_NOTICE - : IDS_MANAGEMENT_NOT_MANAGED_NOTICE, - base::UTF8ToUTF16(chrome::kManagedUiLearnMoreUrl))); response.SetString("pageSubtitle", l10n_util::GetStringUTF16( - managed_ ? IDS_MANAGEMENT_SUBTITLE - : IDS_MANAGEMENT_NOT_MANAGED_SUBTITLE)); + managed_() ? IDS_MANAGEMENT_SUBTITLE + : IDS_MANAGEMENT_NOT_MANAGED_SUBTITLE)); #else const auto device_type = ui::GetChromeOSDeviceTypeResourceId(); - response.SetString("pageSubtitle", - managed_ ? l10n_util::GetStringFUTF16( - IDS_MANAGEMENT_SUBTITLE_MANAGED, - l10n_util::GetStringUTF16(device_type)) - : l10n_util::GetStringFUTF16( - IDS_MANAGEMENT_NOT_MANAGED_SUBTITLE, - l10n_util::GetStringUTF16(device_type))); + response.SetString( + "pageSubtitle", + managed_() + ? l10n_util::GetStringFUTF16(IDS_MANAGEMENT_SUBTITLE_MANAGED, + l10n_util::GetStringUTF16(device_type)) + : l10n_util::GetStringFUTF16( + IDS_MANAGEMENT_NOT_MANAGED_SUBTITLE, + l10n_util::GetStringUTF16(device_type))); #endif // !defined(OS_CHROMEOS) } else { @@ -533,33 +529,25 @@ base::DictionaryValue ManagementUIHandler::GetContextualManagedData( #if !defined(OS_CHROMEOS) response.SetString( - "browserManagementNotice", - managed_ ? l10n_util::GetStringFUTF16( - IDS_MANAGEMENT_MANAGEMENT_BY_NOTICE, - base::UTF8ToUTF16(management_domain), - base::UTF8ToUTF16(chrome::kManagedUiLearnMoreUrl)) - : l10n_util::GetStringFUTF16( - IDS_MANAGEMENT_NOT_MANAGED_NOTICE, - base::UTF8ToUTF16(chrome::kManagedUiLearnMoreUrl))); - response.SetString( "pageSubtitle", - managed_ + managed_() ? l10n_util::GetStringFUTF16(IDS_MANAGEMENT_SUBTITLE_MANAGED_BY, base::UTF8ToUTF16(management_domain)) : l10n_util::GetStringUTF16(IDS_MANAGEMENT_NOT_MANAGED_SUBTITLE)); #else const auto device_type = ui::GetChromeOSDeviceTypeResourceId(); - response.SetString("pageSubtitle", - managed_ ? l10n_util::GetStringFUTF16( - IDS_MANAGEMENT_SUBTITLE_MANAGED_BY, - l10n_util::GetStringUTF16(device_type), - base::UTF8ToUTF16(management_domain)) - : l10n_util::GetStringFUTF16( - IDS_MANAGEMENT_NOT_MANAGED_SUBTITLE, - l10n_util::GetStringUTF16(device_type))); + response.SetString( + "pageSubtitle", + managed_() + ? l10n_util::GetStringFUTF16(IDS_MANAGEMENT_SUBTITLE_MANAGED_BY, + l10n_util::GetStringUTF16(device_type), + base::UTF8ToUTF16(management_domain)) + : l10n_util::GetStringFUTF16( + IDS_MANAGEMENT_NOT_MANAGED_SUBTITLE, + l10n_util::GetStringUTF16(device_type))); #endif // !defined(OS_CHROMEOS) } - response.SetBoolean("managed", managed_); + response.SetBoolean("managed", managed_()); GetManagementStatus(profile, &response); return response; } @@ -578,170 +566,80 @@ const extensions::Extension* ManagementUIHandler::GetEnabledExtension( } #endif // BUILDFLAG(ENABLE_EXTENSIONS) -#if defined(OS_CHROMEOS) -void AddStatusDeviceManagedInfo(base::Value* status, - const std::string& device_domain) { - base::Value info(base::Value::Type::DICTIONARY); - info.SetKey(kOverview, base::Value(l10n_util::GetStringFUTF16( - IDS_MANAGEMENT_DEVICE_MANAGED_CLARIFICATION, - base::UTF8ToUTF16(device_domain)))); - info.SetKey(kSetup, base::Value(l10n_util::GetStringUTF16( - IDS_MANAGEMENT_DEVICE_MANAGED_SETUP))); - info.SetKey(kData, base::Value(l10n_util::GetStringUTF16( - IDS_MANAGEMENT_DEVICE_MANAGED_DATA))); - status->SetKey(kDeviceManagedInfo, std::move(info)); -} - -void AddStatusDeviceAndAccountManagedInfo( - base::Value* status, - const std::string& device_and_account_domain) { - base::Value info(base::Value::Type::DICTIONARY); - info.SetKey(kOverview, - base::Value(l10n_util::GetStringFUTF16( - IDS_MANAGEMENT_DEVICE_AND_ACCOUNT_MANAGED_CLARIFICATION, - base::UTF8ToUTF16(device_and_account_domain)))); - info.SetKey(kSetup, base::Value(l10n_util::GetStringUTF16( - IDS_MANAGEMENT_DEVICE_AND_ACCOUNT_MANAGED_SETUP))); - info.SetKey(kData, base::Value(l10n_util::GetStringUTF16( - IDS_MANAGEMENT_DEVICE_AND_ACCOUNT_MANAGED_DATA))); - status->SetKey(kDeviceManagedInfo, std::move(info)); -} -#endif // defined(OS_CHROMEOS) - -void AddStatusAccountManagedInfo(base::Value* status, - const std::string& account_domain) { - base::Value info(base::Value::Type::DICTIONARY); - if (account_domain.empty()) { - info.SetKey( - kOverview, - base::Value(l10n_util::GetStringUTF16( - IDS_MANAGEMENT_ACCOUNT_MANAGED_CLARIFICATION_UNKNOWN_DOMAIN))); - } else { - info.SetKey(kOverview, base::Value(l10n_util::GetStringFUTF16( - IDS_MANAGEMENT_ACCOUNT_MANAGED_CLARIFICATION, - base::UTF8ToUTF16(account_domain)))); - } - info.SetKey(kSetup, base::Value(l10n_util::GetStringUTF16( - IDS_MANAGEMENT_ACCOUNT_MANAGED_SETUP))); - info.SetKey(kData, base::Value(l10n_util::GetStringUTF16( - IDS_MANAGEMENT_ACCOUNT_MANAGED_DATA))); - status->SetKey(kAccountManagedInfo, std::move(info)); -} #if defined(OS_CHROMEOS) void AddStatusOverviewManagedDeviceAndAccount( base::Value* status, + bool device_managed, + bool account_managed, const std::string& device_domain, const std::string& account_domain) { - status->SetKey(kOverview, - base::Value(l10n_util::GetStringFUTF16( - IDS_MANAGEMENT_DEVICE_MANAGED_BY_ACCOUNT_MANAGED_BY, - base::UTF8ToUTF16(device_domain), - base::UTF8ToUTF16(account_domain)))); - AddStatusDeviceManagedInfo(status, device_domain); - AddStatusAccountManagedInfo(status, account_domain); -} + if (device_managed && account_managed && + (account_domain.empty() || account_domain == device_domain)) { + status->SetKey(kOverview, base::Value(l10n_util::GetStringFUTF16( + IDS_MANAGEMENT_DEVICE_AND_ACCOUNT_MANAGED_BY, + base::UTF8ToUTF16(device_domain)))); -void AddStatusOverviewManagedDeviceAndAccount( - base::Value* status, - const std::string& device_and_account_domain) { - status->SetKey(kOverview, base::Value(l10n_util::GetStringFUTF16( - IDS_MANAGEMENT_DEVICE_AND_ACCOUNT_MANAGED_BY, - base::UTF8ToUTF16(device_and_account_domain)))); - AddStatusDeviceAndAccountManagedInfo(status, device_and_account_domain); - status->SetKey(kAccountManagedInfo, base::Value()); -} - -void AddStatusOverviewManagedDevice(base::Value* status, - const std::string& device_domain) { - status->SetKey(kOverview, base::Value(l10n_util::GetStringFUTF16( - IDS_MANAGEMENT_DEVICE_MANAGED_BY, - base::UTF8ToUTF16(device_domain)))); - AddStatusDeviceManagedInfo(status, device_domain); - status->SetKey(kAccountManagedInfo, base::Value()); -} - -#endif // defined(OS_CHROMEOS) + return; + } -void AddStatusOverviewManagedAccount(base::Value* status, - const std::string& account_domain) { -#if defined(OS_CHROMEOS) - status->SetKey(kOverview, base::Value(l10n_util::GetStringFUTF16( - IDS_MANAGEMENT_ACCOUNT_MANAGED_BY, - base::UTF8ToUTF16(account_domain)))); - status->SetKey(kDeviceManagedInfo, base::Value()); -#endif // defined(OS_CHROMEOS) - AddStatusAccountManagedInfo(status, account_domain); -} + if (account_managed && !account_domain.empty()) { + status->SetKey(kOverview, base::Value(l10n_util::GetStringFUTF16( + IDS_MANAGEMENT_ACCOUNT_MANAGED_BY, + base::UTF8ToUTF16(account_domain)))); + } -#if defined(OS_CHROMEOS) -void AddStatusOverviewNotManaged(base::Value* status) { - status->SetKey(kOverview, base::Value(l10n_util::GetStringUTF16( - IDS_MANAGEMENT_DEVICE_NOT_MANAGED))); - status->SetKey(kAccountManagedInfo, base::Value()); - status->SetKey(kDeviceManagedInfo, base::Value()); + if (account_managed && device_managed && !account_domain.empty() && + account_domain != device_domain) { + status->SetKey(kOverview, + base::Value(l10n_util::GetStringFUTF16( + IDS_MANAGEMENT_DEVICE_MANAGED_BY_ACCOUNT_MANAGED_BY, + base::UTF8ToUTF16(device_domain), + base::UTF8ToUTF16(account_domain)))); + } } -#endif // defined(OS_CHROMEOS) - -void ManagementUIHandler::GetManagementStatus(Profile* profile, - base::Value* status) const { - const std::string account_domain = GetAccountDomain(profile); -#if defined(OS_CHROMEOS) - const bool account_managed = IsProfileManaged(profile); - const bool profile_associated_with_gaia_account = - chromeos::IsProfileAssociatedWithGaiaAccount(profile); +const std::string ManagementUIHandler::GetDeviceDomain() const { std::string device_domain; policy::BrowserPolicyConnectorChromeOS* connector = g_browser_process->platform_part()->browser_policy_connector_chromeos(); - const bool device_managed = connector->IsEnterpriseManaged(); - if (device_managed) + if (device_managed_) device_domain = connector->GetEnterpriseDisplayDomain(); if (device_domain.empty() && connector->IsActiveDirectoryManaged()) device_domain = connector->GetRealm(); + return device_domain; +} - bool primary_user_managed = false; - std::string primary_user_account_domain; - auto* primary_user = user_manager::UserManager::Get()->GetPrimaryUser(); - if (primary_user) { - auto* primary_profile = - chromeos::ProfileHelper::Get()->GetProfileByUser(primary_user); - if (primary_profile) { - primary_user_managed = IsProfileManaged(primary_profile); - primary_user_account_domain = GetAccountDomain(primary_profile); - } - } +#endif // defined(OS_CHROMEOS) - if (device_managed) { - DCHECK(!device_domain.empty()); - if (account_managed) { - if (device_domain == account_domain || - !profile_associated_with_gaia_account) { - AddStatusOverviewManagedDeviceAndAccount(status, device_domain); - return; - } - DCHECK(!account_domain.empty()); - AddStatusOverviewManagedDeviceAndAccount(status, device_domain, - account_domain); - return; - } - AddStatusOverviewManagedDevice(status, device_domain); +void ManagementUIHandler::GetManagementStatus(Profile* profile, + base::Value* status) const { +#if defined(OS_CHROMEOS) + status->SetKey(kDeviceManagedInfo, base::Value()); + status->SetKey(kAccountManagedInfo, base::Value()); + status->SetKey(kOverview, base::Value()); + if (!managed_()) { + status->SetKey(kOverview, base::Value(l10n_util::GetStringUTF16( + IDS_MANAGEMENT_DEVICE_NOT_MANAGED))); return; } + std::string account_domain = GetAccountDomain(profile); + auto* primary_user = user_manager::UserManager::Get()->GetPrimaryUser(); + auto* primary_profile = + primary_user + ? chromeos::ProfileHelper::Get()->GetProfileByUser(primary_user) + : nullptr; + const bool primary_user_managed = + primary_profile ? IsProfileManaged(primary_profile) : false; - if (primary_user_managed) { - AddStatusOverviewManagedAccount(status, primary_user_account_domain); - return; - } -#endif // defined(OS_CHROMEOS) + if (primary_user_managed) + account_domain = GetAccountDomain(primary_profile); - if (managed_) { - AddStatusOverviewManagedAccount(status, account_domain); - return; - } + std::string device_domain = GetDeviceDomain(); -#if defined(OS_CHROMEOS) - AddStatusOverviewNotManaged(status); + AddStatusOverviewManagedDeviceAndAccount( + status, device_managed_, account_managed_ || primary_user_managed, + device_domain, account_domain); #endif // defined(OS_CHROMEOS) } @@ -837,27 +735,29 @@ void ManagementUIHandler::OnExtensionUnloaded( } } -void ManagementUIHandler::OnManagedStateChanged() { +void ManagementUIHandler::UpdateManagedState() { auto* profile = Profile::FromWebUI(web_ui()); + bool managed_state_changed = false; #if defined(OS_CHROMEOS) - bool managed = IsProfileManaged(profile) || IsDeviceManaged(); + managed_state_changed |= account_managed_ != IsProfileManaged(profile); + managed_state_changed |= device_managed_ != IsDeviceManaged(); + account_managed_ = IsProfileManaged(profile); + device_managed_ = IsDeviceManaged(); #else - bool managed = IsProfileManaged(profile) || IsBrowserManaged(); + managed_state_changed |= + account_managed_ != (IsProfileManaged(profile) || IsBrowserManaged()); + account_managed_ = IsProfileManaged(profile) || IsBrowserManaged(); #endif // defined(OS_CHROMEOS) - if (managed == managed_) - return; - - managed_ = managed; - - FireWebUIListener("managed_state_changed"); + if (managed_state_changed) + FireWebUIListener("managed_data_changed"); } void ManagementUIHandler::OnPolicyUpdated( const policy::PolicyNamespace& /*ns*/, const policy::PolicyMap& /*previous*/, const policy::PolicyMap& /*current*/) { - OnManagedStateChanged(); + UpdateManagedState(); NotifyBrowserReportingInfoUpdated(); } @@ -878,7 +778,7 @@ void ManagementUIHandler::AddObservers() { pref_registrar_.Add( prefs::kSupervisedUserId, - base::BindRepeating(&ManagementUIHandler::OnManagedStateChanged, + base::BindRepeating(&ManagementUIHandler::UpdateManagedState, base::Unretained(this))); } diff --git a/chromium/chrome/browser/ui/webui/management_ui_handler.h b/chromium/chrome/browser/ui/webui/management_ui_handler.h index daca8ea6eb1..76bebbd81c9 100644 --- a/chromium/chrome/browser/ui/webui/management_ui_handler.h +++ b/chromium/chrome/browser/ui/webui/management_ui_handler.h @@ -98,7 +98,8 @@ class ManagementUIHandler : public content::WebUIMessageHandler { // content::WebUIMessageHandler implementation. void RegisterMessages() override; - void SetManagedForTesting(bool managed) { managed_ = managed; } + void SetAccountManagedForTesting(bool managed) { account_managed_ = managed; } + void SetDeviceManagedForTesting(bool managed) { device_managed_ = managed; } static std::string GetAccountDomain(Profile* profile); @@ -113,12 +114,16 @@ class ManagementUIHandler : public content::WebUIMessageHandler { Profile* profile); void AddExtensionReportingInfo(base::Value* report_sources); - base::DictionaryValue GetContextualManagedData(Profile* profile) const; + base::DictionaryValue GetContextualManagedData(Profile* profile); virtual policy::PolicyService* GetPolicyService() const; virtual const extensions::Extension* GetEnabledExtension( const std::string& extensionId) const; #endif // BUILDFLAG(ENABLE_EXTENSIONS) +#if defined(OS_CHROMEOS) + // Protected for testing. + virtual const std::string GetDeviceDomain() const; +#endif // defined(OS_CHROMEOS) private: void GetManagementStatus(Profile* profile, base::Value* status) const; @@ -145,7 +150,7 @@ class ManagementUIHandler : public content::WebUIMessageHandler { const extensions::Extension* extension, extensions::UnloadedExtensionReason reason) override; - void OnManagedStateChanged(); + void UpdateManagedState(); // policy::PolicyService::Observer void OnPolicyUpdated(const policy::PolicyNamespace& ns, @@ -155,10 +160,12 @@ class ManagementUIHandler : public content::WebUIMessageHandler { void AddObservers(); void RemoveObservers(); + bool managed_() const { return account_managed_ || device_managed_; } + bool account_managed_ = false; + bool device_managed_ = false; // To avoid double-removing the observers, which would cause a DCHECK() // failure. bool has_observers_ = false; - bool managed_ = false; std::string web_ui_data_source_name_; PrefChangeRegistrar pref_registrar_; diff --git a/chromium/chrome/browser/ui/webui/management_ui_handler_unittest.cc b/chromium/chrome/browser/ui/webui/management_ui_handler_unittest.cc index f081a564856..ea976960a7e 100644 --- a/chromium/chrome/browser/ui/webui/management_ui_handler_unittest.cc +++ b/chromium/chrome/browser/ui/webui/management_ui_handler_unittest.cc @@ -34,11 +34,12 @@ using testing::ReturnRef; struct ContextualManagementSourceUpdate { base::string16* extension_reporting_title; - base::string16* browser_management_notice; base::string16* subtitle; +#if defined(OS_CHROMEOS) base::string16* management_overview; - base::string16* management_overview_data_notice; - base::string16* management_overview_setup_notice; +#else + base::string16* browser_management_notice; +#endif // defined(OS_CHROMEOS) bool* managed; }; @@ -53,8 +54,7 @@ class TestManagementUIHandler : public ManagementUIHandler { cloud_reporting_extension_exists_ = enable; } - base::DictionaryValue GetContextualManagedDataForTesting( - Profile* profile) const { + base::DictionaryValue GetContextualManagedDataForTesting(Profile* profile) { return GetContextualManagedData(profile); } @@ -75,18 +75,27 @@ class TestManagementUIHandler : public ManagementUIHandler { return nullptr; } +#if defined(OS_CHROMEOS) + const std::string GetDeviceDomain() const override { return device_domain; } + void SetDeviceDomain(const std::string& domain) { device_domain = domain; } +#endif // defined(OS_CHROMEOS) + private: bool cloud_reporting_extension_exists_ = false; policy::PolicyService* policy_service_ = nullptr; + std::string device_domain = "devicedomain.com"; }; class ManagementUIHandlerTests : public testing::Test { public: - ManagementUIHandlerTests() : handler_(&policy_service_) { + ManagementUIHandlerTests() + : handler_(&policy_service_), + device_domain_(base::UTF8ToUTF16("devicedomain.com")) { ON_CALL(policy_service_, GetPolicies(_)) .WillByDefault(ReturnRef(empty_policy_map_)); } + base::string16 device_domain() { return device_domain_; } void EnablePolicy(const char* policy_key, policy::PolicyMap& policies) { policies.Set(policy_key, policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_MACHINE, policy::POLICY_SOURCE_CLOUD, @@ -98,15 +107,13 @@ class ManagementUIHandlerTests : public testing::Test { const ContextualManagementSourceUpdate& extracted) { data.GetString("extensionReportingTitle", extracted.extension_reporting_title); + data.GetString("pageSubtitle", extracted.subtitle); +#if defined(OS_CHROMEOS) + data.GetString("overview", extracted.management_overview); +#else data.GetString("browserManagementNotice", extracted.browser_management_notice); - data.GetString("pageSubtitle", extracted.subtitle); - data.GetString("accountManagedInfo.overview", - extracted.management_overview); - data.GetString("accountManagedInfo.data", - extracted.management_overview_data_notice); - data.GetString("accountManagedInfo.setup", - extracted.management_overview_setup_notice); +#endif // defined(OS_CHROMEOS) data.GetBoolean("managed", extracted.managed); } @@ -115,6 +122,7 @@ class ManagementUIHandlerTests : public testing::Test { content::TestBrowserThreadBundle thread_bundle_; policy::MockPolicyService policy_service_; policy::PolicyMap empty_policy_map_; + base::string16 device_domain_; }; #if !defined(OS_CHROMEOS) @@ -123,21 +131,14 @@ TEST_F(ManagementUIHandlerTests, auto profile = TestingProfile::Builder().Build(); base::string16 extension_reporting_title; - base::string16 browser_management_notice; base::string16 subtitle; - base::string16 management_overview; - base::string16 management_overview_data_notice; - base::string16 management_overview_setup_notice; + base::string16 browser_management_notice; bool managed; - ContextualManagementSourceUpdate extracted{&extension_reporting_title, - &browser_management_notice, - &subtitle, - &management_overview, - &management_overview_data_notice, - &management_overview_setup_notice, - &managed}; - - handler_.SetManagedForTesting(false); + ContextualManagementSourceUpdate extracted{ + &extension_reporting_title, &subtitle, &browser_management_notice, + &managed}; + + handler_.SetAccountManagedForTesting(false); auto data = handler_.GetContextualManagedDataForTesting(profile.get()); ExtractContextualSourceUpdate(data, extracted); @@ -150,9 +151,6 @@ TEST_F(ManagementUIHandlerTests, base::UTF8ToUTF16(chrome::kManagedUiLearnMoreUrl))); EXPECT_EQ(subtitle, l10n_util::GetStringUTF16(IDS_MANAGEMENT_NOT_MANAGED_SUBTITLE)); - EXPECT_EQ(management_overview, base::string16()); - EXPECT_EQ(management_overview_data_notice, base::string16()); - EXPECT_EQ(management_overview_setup_notice, base::string16()); } TEST_F(ManagementUIHandlerTests, @@ -160,25 +158,18 @@ TEST_F(ManagementUIHandlerTests, auto profile = TestingProfile::Builder().Build(); base::string16 extension_reporting_title; - base::string16 browser_management_notice; base::string16 subtitle; - base::string16 management_overview; - base::string16 management_overview_data_notice; - base::string16 management_overview_setup_notice; + base::string16 browser_management_notice; bool managed; - ContextualManagementSourceUpdate extracted{&extension_reporting_title, - &browser_management_notice, - &subtitle, - &management_overview, - &management_overview_data_notice, - &management_overview_setup_notice, - &managed}; - - handler_.SetManagedForTesting(true); + ContextualManagementSourceUpdate extracted{ + &extension_reporting_title, &subtitle, &browser_management_notice, + &managed}; + + handler_.SetAccountManagedForTesting(true); auto data = handler_.GetContextualManagedDataForTesting(profile.get()); ExtractContextualSourceUpdate(data, extracted); - EXPECT_EQ(data.DictSize(), 5u); + EXPECT_EQ(data.DictSize(), 4u); EXPECT_EQ(extension_reporting_title, l10n_util::GetStringUTF16(IDS_MANAGEMENT_EXTENSIONS_INSTALLED)); EXPECT_EQ(browser_management_notice, @@ -186,13 +177,6 @@ TEST_F(ManagementUIHandlerTests, IDS_MANAGEMENT_BROWSER_NOTICE, base::UTF8ToUTF16(chrome::kManagedUiLearnMoreUrl))); EXPECT_EQ(subtitle, l10n_util::GetStringUTF16(IDS_MANAGEMENT_SUBTITLE)); - EXPECT_EQ(management_overview, - l10n_util::GetStringUTF16( - IDS_MANAGEMENT_ACCOUNT_MANAGED_CLARIFICATION_UNKNOWN_DOMAIN)); - EXPECT_EQ(management_overview_data_notice, - l10n_util::GetStringUTF16(IDS_MANAGEMENT_ACCOUNT_MANAGED_DATA)); - EXPECT_EQ(management_overview_setup_notice, - l10n_util::GetStringUTF16(IDS_MANAGEMENT_ACCOUNT_MANAGED_SETUP)); EXPECT_TRUE(managed); } @@ -203,25 +187,17 @@ TEST_F(ManagementUIHandlerTests, auto profile = builder.Build(); base::string16 extensions_installed; - base::string16 browser_management_notice; base::string16 subtitle; - base::string16 management_overview; - base::string16 management_overview_data_notice; - base::string16 management_overview_setup_notice; + base::string16 browser_management_notice; bool managed; - ContextualManagementSourceUpdate extracted{&extensions_installed, - &browser_management_notice, - &subtitle, - &management_overview, - &management_overview_data_notice, - &management_overview_setup_notice, - &managed}; - - handler_.SetManagedForTesting(true); + ContextualManagementSourceUpdate extracted{ + &extensions_installed, &subtitle, &browser_management_notice, &managed}; + + handler_.SetAccountManagedForTesting(true); auto data = handler_.GetContextualManagedDataForTesting(profile.get()); ExtractContextualSourceUpdate(data, extracted); - EXPECT_EQ(data.DictSize(), 5u); + EXPECT_EQ(data.DictSize(), 4u); EXPECT_EQ(extensions_installed, l10n_util::GetStringUTF16(IDS_MANAGEMENT_EXTENSIONS_INSTALLED)); EXPECT_EQ(browser_management_notice, @@ -229,13 +205,6 @@ TEST_F(ManagementUIHandlerTests, IDS_MANAGEMENT_BROWSER_NOTICE, base::UTF8ToUTF16(chrome::kManagedUiLearnMoreUrl))); EXPECT_EQ(subtitle, l10n_util::GetStringUTF16(IDS_MANAGEMENT_SUBTITLE)); - EXPECT_EQ(management_overview, - l10n_util::GetStringUTF16( - IDS_MANAGEMENT_ACCOUNT_MANAGED_CLARIFICATION_UNKNOWN_DOMAIN)); - EXPECT_EQ(management_overview_data_notice, - l10n_util::GetStringUTF16(IDS_MANAGEMENT_ACCOUNT_MANAGED_DATA)); - EXPECT_EQ(management_overview_setup_notice, - l10n_util::GetStringUTF16(IDS_MANAGEMENT_ACCOUNT_MANAGED_SETUP)); EXPECT_TRUE(managed); } @@ -246,21 +215,14 @@ TEST_F(ManagementUIHandlerTests, auto profile = builder.Build(); base::string16 extension_reporting_title; - base::string16 browser_management_notice; base::string16 subtitle; - base::string16 management_overview; - base::string16 management_overview_data_notice; - base::string16 management_overview_setup_notice; + base::string16 browser_management_notice; bool managed; - ContextualManagementSourceUpdate extracted{&extension_reporting_title, - &browser_management_notice, - &subtitle, - &management_overview, - &management_overview_data_notice, - &management_overview_setup_notice, - &managed}; + ContextualManagementSourceUpdate extracted{ + &extension_reporting_title, &subtitle, &browser_management_notice, + &managed}; - handler_.SetManagedForTesting(false); + handler_.SetAccountManagedForTesting(false); auto data = handler_.GetContextualManagedDataForTesting(profile.get()); ExtractContextualSourceUpdate(data, extracted); @@ -275,9 +237,6 @@ TEST_F(ManagementUIHandlerTests, base::UTF8ToUTF16(chrome::kManagedUiLearnMoreUrl))); EXPECT_EQ(subtitle, l10n_util::GetStringUTF16(IDS_MANAGEMENT_NOT_MANAGED_SUBTITLE)); - EXPECT_EQ(management_overview, base::string16()); - EXPECT_EQ(management_overview_data_notice, base::string16()); - EXPECT_EQ(management_overview_setup_notice, base::string16()); EXPECT_FALSE(managed); } @@ -288,21 +247,14 @@ TEST_F(ManagementUIHandlerTests, auto profile = builder.Build(); base::string16 extension_reporting_title; - base::string16 browser_management_notice; base::string16 subtitle; - base::string16 management_overview; - base::string16 management_overview_data_notice; - base::string16 management_overview_setup_notice; + base::string16 browser_management_notice; bool managed; - ContextualManagementSourceUpdate extracted{&extension_reporting_title, - &browser_management_notice, - &subtitle, - &management_overview, - &management_overview_data_notice, - &management_overview_setup_notice, - &managed}; + ContextualManagementSourceUpdate extracted{ + &extension_reporting_title, &subtitle, &browser_management_notice, + &managed}; - handler_.SetManagedForTesting(false); + handler_.SetAccountManagedForTesting(false); auto data = handler_.GetContextualManagedDataForTesting(profile.get()); ExtractContextualSourceUpdate(data, extracted); @@ -316,9 +268,6 @@ TEST_F(ManagementUIHandlerTests, base::UTF8ToUTF16(chrome::kManagedUiLearnMoreUrl))); EXPECT_EQ(subtitle, l10n_util::GetStringUTF16(IDS_MANAGEMENT_NOT_MANAGED_SUBTITLE)); - EXPECT_EQ(management_overview, base::string16()); - EXPECT_EQ(management_overview_data_notice, base::string16()); - EXPECT_EQ(management_overview_setup_notice, base::string16()); EXPECT_FALSE(managed); } @@ -329,44 +278,29 @@ TEST_F(ManagementUIHandlerTests, auto profile = builder.Build(); base::string16 extension_reporting_title; - base::string16 browser_management_notice; base::string16 subtitle; - base::string16 management_overview; - base::string16 management_overview_data_notice; - base::string16 management_overview_setup_notice; + base::string16 browser_management_notice; bool managed; - ContextualManagementSourceUpdate extracted{&extension_reporting_title, - &browser_management_notice, - &subtitle, - &management_overview, - &management_overview_data_notice, - &management_overview_setup_notice, - &managed}; - - handler_.SetManagedForTesting(true); + ContextualManagementSourceUpdate extracted{ + &extension_reporting_title, &subtitle, &browser_management_notice, + &managed}; + + handler_.SetAccountManagedForTesting(true); + handler_.SetDeviceManagedForTesting(false); auto data = handler_.GetContextualManagedDataForTesting(profile.get()); ExtractContextualSourceUpdate(data, extracted); - EXPECT_EQ(data.DictSize(), 5u); + EXPECT_EQ(data.DictSize(), 4u); EXPECT_EQ(extension_reporting_title, l10n_util::GetStringFUTF16(IDS_MANAGEMENT_EXTENSIONS_INSTALLED_BY, base::UTF8ToUTF16("manager.com"))); - EXPECT_EQ( - browser_management_notice, - l10n_util::GetStringFUTF16( - IDS_MANAGEMENT_MANAGEMENT_BY_NOTICE, base::UTF8ToUTF16("manager.com"), - base::UTF8ToUTF16(chrome::kManagedUiLearnMoreUrl))); + EXPECT_EQ(browser_management_notice, + l10n_util::GetStringFUTF16( + IDS_MANAGEMENT_BROWSER_NOTICE, + base::UTF8ToUTF16(chrome::kManagedUiLearnMoreUrl))); EXPECT_EQ(subtitle, l10n_util::GetStringFUTF16(IDS_MANAGEMENT_SUBTITLE_MANAGED_BY, base::UTF8ToUTF16("manager.com"))); - EXPECT_EQ( - management_overview, - l10n_util::GetStringFUTF16(IDS_MANAGEMENT_ACCOUNT_MANAGED_CLARIFICATION, - base::UTF8ToUTF16("manager.com"))); - EXPECT_EQ(management_overview_data_notice, - l10n_util::GetStringUTF16(IDS_MANAGEMENT_ACCOUNT_MANAGED_DATA)); - EXPECT_EQ(management_overview_setup_notice, - l10n_util::GetStringUTF16(IDS_MANAGEMENT_ACCOUNT_MANAGED_SETUP)); EXPECT_TRUE(managed); } @@ -380,29 +314,152 @@ TEST_F(ManagementUIHandlerTests, auto profile = builder.Build(); const auto device_type = ui::GetChromeOSDeviceTypeResourceId(); - base::string16 extensions_installed; - base::string16 browser_management_notice; + base::string16 extension_reporting_title; base::string16 subtitle; base::string16 management_overview; - base::string16 management_overview_data_notice; - base::string16 management_overview_setup_notice; bool managed; - ContextualManagementSourceUpdate extracted{&extensions_installed, - &browser_management_notice, - &subtitle, - &management_overview, - &management_overview_data_notice, - &management_overview_setup_notice, - &managed}; - - handler_.SetManagedForTesting(true); + ContextualManagementSourceUpdate extracted{ + &extension_reporting_title, &subtitle, &management_overview, &managed}; + + handler_.SetAccountManagedForTesting(true); + handler_.SetDeviceManagedForTesting(false); + handler_.SetDeviceDomain(""); auto data = handler_.GetContextualManagedDataForTesting(profile.get()); ExtractContextualSourceUpdate(data, extracted); + EXPECT_EQ(extension_reporting_title, + l10n_util::GetStringFUTF16(IDS_MANAGEMENT_EXTENSIONS_INSTALLED_BY, + base::UTF8ToUTF16("manager.com"))); EXPECT_EQ(subtitle, l10n_util::GetStringFUTF16(IDS_MANAGEMENT_SUBTITLE_MANAGED_BY, l10n_util::GetStringUTF16(device_type), base::UTF8ToUTF16("manager.com"))); + EXPECT_EQ(management_overview, + l10n_util::GetStringFUTF16(IDS_MANAGEMENT_ACCOUNT_MANAGED_BY, + base::UTF8ToUTF16("manager.com"))); + EXPECT_TRUE(managed); +} + +TEST_F(ManagementUIHandlerTests, + ManagementContextualSourceUpdateManagedAccountUnknownDomain) { + TestingProfile::Builder builder; + auto profile = builder.Build(); + const auto device_type = ui::GetChromeOSDeviceTypeResourceId(); + + base::string16 extension_reporting_title; + base::string16 subtitle; + base::string16 management_overview; + bool managed; + ContextualManagementSourceUpdate extracted{ + &extension_reporting_title, &subtitle, &management_overview, &managed}; + + handler_.SetAccountManagedForTesting(true); + handler_.SetDeviceManagedForTesting(false); + handler_.SetDeviceDomain(""); + auto data = handler_.GetContextualManagedDataForTesting(profile.get()); + ExtractContextualSourceUpdate(data, extracted); + + EXPECT_EQ(extension_reporting_title, + l10n_util::GetStringUTF16(IDS_MANAGEMENT_EXTENSIONS_INSTALLED)); + EXPECT_EQ(subtitle, + l10n_util::GetStringFUTF16(IDS_MANAGEMENT_SUBTITLE_MANAGED, + l10n_util::GetStringUTF16(device_type))); + EXPECT_EQ(management_overview, base::string16()); + EXPECT_TRUE(managed); +} + +TEST_F(ManagementUIHandlerTests, + ManagementContextualSourceUpdateManagedDevice) { + TestingProfile::Builder builder; + builder.SetProfileName("managed@manager.com"); + auto profile = builder.Build(); + const auto device_type = ui::GetChromeOSDeviceTypeResourceId(); + + base::string16 extension_reporting_title; + base::string16 subtitle; + base::string16 management_overview; + bool managed; + ContextualManagementSourceUpdate extracted{ + &extension_reporting_title, &subtitle, &management_overview, &managed}; + + handler_.SetAccountManagedForTesting(false); + handler_.SetDeviceManagedForTesting(true); + auto data = handler_.GetContextualManagedDataForTesting(profile.get()); + ExtractContextualSourceUpdate(data, extracted); + + EXPECT_EQ(subtitle, + l10n_util::GetStringFUTF16(IDS_MANAGEMENT_SUBTITLE_MANAGED_BY, + l10n_util::GetStringUTF16(device_type), + device_domain())); + EXPECT_EQ(extension_reporting_title, + l10n_util::GetStringFUTF16(IDS_MANAGEMENT_EXTENSIONS_INSTALLED_BY, + device_domain())); + EXPECT_EQ(management_overview, base::string16()); + EXPECT_TRUE(managed); +} + +TEST_F(ManagementUIHandlerTests, + ManagementContextualSourceUpdateManagedDeviceAndAccount) { + TestingProfile::Builder builder; + builder.SetProfileName("managed@devicedomain.com"); + auto profile = builder.Build(); + const auto device_type = ui::GetChromeOSDeviceTypeResourceId(); + + base::string16 extension_reporting_title; + base::string16 subtitle; + base::string16 management_overview; + bool managed; + ContextualManagementSourceUpdate extracted{ + &extension_reporting_title, &subtitle, &management_overview, &managed}; + + handler_.SetAccountManagedForTesting(true); + handler_.SetDeviceManagedForTesting(true); + auto data = handler_.GetContextualManagedDataForTesting(profile.get()); + ExtractContextualSourceUpdate(data, extracted); + + EXPECT_EQ(subtitle, + l10n_util::GetStringFUTF16(IDS_MANAGEMENT_SUBTITLE_MANAGED_BY, + l10n_util::GetStringUTF16(device_type), + device_domain())); + EXPECT_EQ(extension_reporting_title, + l10n_util::GetStringFUTF16(IDS_MANAGEMENT_EXTENSIONS_INSTALLED_BY, + device_domain())); + EXPECT_EQ(management_overview, + l10n_util::GetStringFUTF16( + IDS_MANAGEMENT_DEVICE_AND_ACCOUNT_MANAGED_BY, device_domain())); + EXPECT_TRUE(managed); +} + +TEST_F(ManagementUIHandlerTests, + ManagementContextualSourceUpdateManagedDeviceAndAccountMultipleDomains) { + TestingProfile::Builder builder; + builder.SetProfileName("managed@manager.com"); + auto profile = builder.Build(); + const auto device_type = ui::GetChromeOSDeviceTypeResourceId(); + + base::string16 extension_reporting_title; + base::string16 subtitle; + base::string16 management_overview; + bool managed; + ContextualManagementSourceUpdate extracted{ + &extension_reporting_title, &subtitle, &management_overview, &managed}; + + handler_.SetAccountManagedForTesting(true); + handler_.SetDeviceManagedForTesting(true); + auto data = handler_.GetContextualManagedDataForTesting(profile.get()); + ExtractContextualSourceUpdate(data, extracted); + + EXPECT_EQ(subtitle, + l10n_util::GetStringFUTF16(IDS_MANAGEMENT_SUBTITLE_MANAGED_BY, + l10n_util::GetStringUTF16(device_type), + device_domain())); + EXPECT_EQ(extension_reporting_title, + l10n_util::GetStringFUTF16(IDS_MANAGEMENT_EXTENSIONS_INSTALLED_BY, + device_domain())); + EXPECT_EQ(management_overview, + l10n_util::GetStringFUTF16( + IDS_MANAGEMENT_DEVICE_MANAGED_BY_ACCOUNT_MANAGED_BY, + device_domain(), base::UTF8ToUTF16("manager.com"))); EXPECT_TRUE(managed); } @@ -411,26 +468,23 @@ TEST_F(ManagementUIHandlerTests, ManagementContextualSourceUpdateUnmanaged) { const auto device_type = ui::GetChromeOSDeviceTypeResourceId(); base::string16 extension_reporting_title; - base::string16 browser_management_notice; base::string16 subtitle; base::string16 management_overview; - base::string16 management_overview_data_notice; - base::string16 management_overview_setup_notice; bool managed; - ContextualManagementSourceUpdate extracted{&extension_reporting_title, - &browser_management_notice, - &subtitle, - &management_overview, - &management_overview_data_notice, - &management_overview_setup_notice, - &managed}; - - handler_.SetManagedForTesting(false); + ContextualManagementSourceUpdate extracted{ + &extension_reporting_title, &subtitle, &management_overview, &managed}; + + handler_.SetAccountManagedForTesting(false); + handler_.SetDeviceDomain(""); auto data = handler_.GetContextualManagedDataForTesting(profile.get()); ExtractContextualSourceUpdate(data, extracted); EXPECT_EQ(subtitle, l10n_util::GetStringFUTF16(IDS_MANAGEMENT_NOT_MANAGED_SUBTITLE, l10n_util::GetStringUTF16(device_type))); + EXPECT_EQ(extension_reporting_title, + l10n_util::GetStringUTF16(IDS_MANAGEMENT_EXTENSIONS_INSTALLED)); + EXPECT_EQ(management_overview, + l10n_util::GetStringUTF16(IDS_MANAGEMENT_DEVICE_NOT_MANAGED)); EXPECT_FALSE(managed); } #endif diff --git a/chromium/chrome/browser/ui/webui/ntp_tiles_internals_ui.cc b/chromium/chrome/browser/ui/webui/ntp_tiles_internals_ui.cc index 82ed17f9101..95eb3572e8b 100644 --- a/chromium/chrome/browser/ui/webui/ntp_tiles_internals_ui.cc +++ b/chromium/chrome/browser/ui/webui/ntp_tiles_internals_ui.cc @@ -87,6 +87,7 @@ bool ChromeNTPTilesInternalsMessageHandlerClient::DoesSourceExist( return false; #endif case ntp_tiles::TileSource::CUSTOM_LINKS: + case ntp_tiles::TileSource::SEARCH_PAGE: #if !defined(OS_ANDROID) return true; #else diff --git a/chromium/chrome/browser/ui/webui/settings/about_handler.cc b/chromium/chrome/browser/ui/webui/settings/about_handler.cc index 2ae0eb80edd..cbf766eaff5 100644 --- a/chromium/chrome/browser/ui/webui/settings/about_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/about_handler.cc @@ -96,11 +96,19 @@ struct RegulatoryLabel { const std::string image_url; }; -bool ShouldShowSafetyInfo() { +// Returns the link to the safety info for the device (if it exists). +std::string GetSafetyInfoLink() { const std::vector<std::string> board = base::SplitString(base::SysInfo::GetLsbReleaseBoard(), "-", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); - return board[0] == "nocturne"; + if (board[0] == "nocturne") { + return chrome::kChromeUISafetyPixelSlateURL; + } + if (board[0] == "eve" || board[0] == "atlas") { + return chrome::kChromeUISafetyPixelbookURL; + } + + return std::string(); } // Returns message that informs user that for update it's better to @@ -329,13 +337,14 @@ AboutHandler* AboutHandler::Create(content::WebUIDataSource* html_source, #endif #if defined(OS_CHROMEOS) - html_source->AddBoolean("shouldShowSafetyInfo", ShouldShowSafetyInfo()); + std::string safetyInfoLink = GetSafetyInfoLink(); + html_source->AddBoolean("shouldShowSafetyInfo", !safetyInfoLink.empty()); #if defined(GOOGLE_CHROME_BUILD) html_source->AddString( "aboutProductSafety", l10n_util::GetStringUTF16(IDS_ABOUT_SAFETY_INFORMATION)); html_source->AddString("aboutProductSafetyURL", - base::UTF8ToUTF16(chrome::kChromeUISafetyURL)); + base::UTF8ToUTF16(safetyInfoLink)); #endif base::string16 os_license = l10n_util::GetStringFUTF16( diff --git a/chromium/chrome/browser/ui/webui/sync_internals_browsertest.js b/chromium/chrome/browser/ui/webui/sync_internals_browsertest.js index ede567340a8..9a179ff2576 100644 --- a/chromium/chrome/browser/ui/webui/sync_internals_browsertest.js +++ b/chromium/chrome/browser/ui/webui/sync_internals_browsertest.js @@ -260,8 +260,9 @@ GEN('#else'); // set. TEST_F('SyncInternalsWebUITest', 'SyncDisabledByDefault', function() { expectTrue(this.hasInDetails(true, 'Transport State', 'Disabled')); - expectTrue( - this.hasInDetails(true, 'Disable Reasons', 'Not signed in, User choice')); + // TODO(crbug.com/906034,crbug.com/973770): Sort out the proper default value + // for IsSyncRequested() and possibly add the "User choice" disable reason. + expectTrue(this.hasInDetails(true, 'Disable Reasons', 'Not signed in')); expectTrue(this.hasInDetails(true, 'Username', '')); }); diff --git a/chromium/chrome/browser/ui/webui/welcome/nux_helper.cc b/chromium/chrome/browser/ui/webui/welcome/nux_helper.cc index a79c297bd7c..393671cfd3e 100644 --- a/chromium/chrome/browser/ui/webui/welcome/nux_helper.cc +++ b/chromium/chrome/browser/ui/webui/welcome/nux_helper.cc @@ -80,6 +80,20 @@ bool CanShowSigninModule(const policy::PolicyMap& policies) { policy::BrowserSigninMode::kDisabled; } +#if defined(GOOGLE_CHROME_BUILD) && defined(OS_WIN) +// These feature flags are used to tie our experiment to specific studies. +// go/navi-app-variation for details. +// TODO(hcarmona): find a solution that scales better. +const base::Feature kNaviControlEnabled = {"NaviControlEnabled", + base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kNaviAppVariationEnabled = { + "NaviAppVariationEnabled", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kNaviNTPVariationEnabled = { + "NaviNTPVariationEnabled", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kNaviShortcutVariationEnabled = { + "NaviShortcutVariationEnabled", base::FEATURE_DISABLED_BY_DEFAULT}; +#endif // defined(GOOGLE_CHROME_BUILD) && defined(OS_WIN) + // This feature flag is used to force the feature to be turned on for non-win // and non-branded builds, like with tests or development on other platforms. const base::Feature kNuxOnboardingForceEnabled = { @@ -164,6 +178,17 @@ bool IsNuxOnboardingEnabled(Profile* profile) { ChromeMetricsServiceAccessor::RegisterSyntheticFieldTrial( "NaviOnboardingSynthetic", onboard_group); + // Check for feature based on onboarding group. + // TODO(hcarmona): find a solution that scales better. + if (onboard_group.compare("ControlSynthetic-008") == 0) + base::FeatureList::IsEnabled(kNaviControlEnabled); + else if (onboard_group.compare("AppVariationSynthetic-008") == 0) + base::FeatureList::IsEnabled(kNaviAppVariationEnabled); + else if (onboard_group.compare("NTPVariationSynthetic-008") == 0) + base::FeatureList::IsEnabled(kNaviNTPVariationEnabled); + else if (onboard_group.compare("ShortcutVariationSynthetic-008") == 0) + base::FeatureList::IsEnabled(kNaviShortcutVariationEnabled); + if (base::FeatureList::IsEnabled(nux::kNuxOnboardingFeature)) { return true; } diff --git a/chromium/chrome/common/webui_url_constants.cc b/chromium/chrome/common/webui_url_constants.cc index 2a017d968eb..cc83e7769bc 100644 --- a/chromium/chrome/common/webui_url_constants.cc +++ b/chromium/chrome/common/webui_url_constants.cc @@ -121,7 +121,8 @@ const char kChromeUIResetPasswordHost[] = "reset-password"; const char kChromeUIResetPasswordURL[] = "chrome://reset-password/"; const char kChromeUIRestartHost[] = "restart"; const char kChromeUIRestartURL[] = "chrome://restart/"; -const char kChromeUISafetyURL[] = "https://g.co/PixelSlate/safety"; +const char kChromeUISafetyPixelbookURL[] = "https://g.co/Pixelbook/safety"; +const char kChromeUISafetyPixelSlateURL[] = "https://g.co/PixelSlate/safety"; const char kChromeUISettingsHost[] = "settings"; const char kChromeUISettingsURL[] = "chrome://settings/"; const char kChromeUISignInInternalsHost[] = "signin-internals"; diff --git a/chromium/chrome/common/webui_url_constants.h b/chromium/chrome/common/webui_url_constants.h index a3c406b3c45..c44c78e955c 100644 --- a/chromium/chrome/common/webui_url_constants.h +++ b/chromium/chrome/common/webui_url_constants.h @@ -125,7 +125,8 @@ extern const char kChromeUIResetPasswordHost[]; extern const char kChromeUIResetPasswordURL[]; extern const char kChromeUIRestartHost[]; extern const char kChromeUIRestartURL[]; -extern const char kChromeUISafetyURL[]; +extern const char kChromeUISafetyPixelbookURL[]; +extern const char kChromeUISafetyPixelSlateURL[]; extern const char kChromeUISettingsHost[]; extern const char kChromeUISettingsURL[]; extern const char kChromeUISignInInternalsHost[]; diff --git a/chromium/chrome/test/BUILD.gn b/chromium/chrome/test/BUILD.gn index 96d64adc628..63be9ca9369 100644 --- a/chromium/chrome/test/BUILD.gn +++ b/chromium/chrome/test/BUILD.gn @@ -3463,6 +3463,7 @@ test("unit_tests") { "../browser/ui/search/search_ipc_router_policy_unittest.cc", "../browser/ui/search/search_ipc_router_unittest.cc", "../browser/ui/search/search_tab_helper_unittest.cc", + "../browser/ui/serial/serial_chooser_controller_unittest.cc", "../browser/ui/tab_contents/tab_contents_iterator_unittest.cc", "../browser/ui/tabs/pinned_tab_codec_unittest.cc", "../browser/ui/tabs/pinned_tab_service_unittest.cc", @@ -3557,6 +3558,7 @@ test("unit_tests") { "//components/chrome_cleaner/test:test_name_helper", "//components/send_tab_to_self:test_support", "//components/signin/core/browser:signin_buildflags", + "//services/device/public/cpp/test:test_support", "//services/metrics/public/cpp:ukm_builders", "//third_party/libaddressinput", "//ui/native_theme:test_support", diff --git a/chromium/components/OWNERS b/chromium/components/OWNERS index cb6a8cfeb52..e68ddd8ce7e 100644 --- a/chromium/components/OWNERS +++ b/chromium/components/OWNERS @@ -13,6 +13,7 @@ per-file dom_distiller_strings.grdp=file://components/dom_distiller/OWNERS per-file error_page_strings.grdp=file://components/error_page/OWNERS per-file management_strings.grdp=file://docs/privacy/OWNERS per-file ntp_snippets_strings.grdp=file://components/ntp_snippets/OWNERS +per-file ntp_tiles_strings.grdp=file://components/ntp_tiles/OWNERS per-file omnibox_strings.grdp=file://components/omnibox/OWNERS per-file page_info_strings.grdp=file://chrome/browser/ui/page_info/OWNERS per-file password_manager_strings.grdp=file://components/password_manager/OWNERS diff --git a/chromium/components/autofill/core/browser/form_structure.cc b/chromium/components/autofill/core/browser/form_structure.cc index c2af03ad09d..d30d1c852b2 100644 --- a/chromium/components/autofill/core/browser/form_structure.cc +++ b/chromium/components/autofill/core/browser/form_structure.cc @@ -1735,9 +1735,14 @@ void FormStructure::RationalizeFieldTypePredictions() { RationalizeCreditCardFieldPredictions(); for (const auto& field : fields_) { if (base::FeatureList::IsEnabled(features::kAutofillOffNoServerData) && - !field->should_autocomplete && field->server_type() == NO_SERVER_DATA) { + !field->should_autocomplete && field->server_type() == NO_SERVER_DATA && + field->heuristic_type() != CREDIT_CARD_VERIFICATION_CODE) { // When the field has autocomplete off, and the server returned no // prediction, then assume Autofill is not useful for the current field. + // Special case for CVC (crbug.com/968036). We never send votes for CVC + // fields, but we still fill them when the user inputs them via the CVC + // prompt. Since Autofill doesn't trigger from a CVC field, we can keep + // the client-side predictions for this type. field->SetTypeTo(AutofillType(UNKNOWN_TYPE)); } else { field->SetTypeTo(field->Type()); diff --git a/chromium/components/autofill/core/browser/form_structure_unittest.cc b/chromium/components/autofill/core/browser/form_structure_unittest.cc index cff3806b32f..983f595fe16 100644 --- a/chromium/components/autofill/core/browser/form_structure_unittest.cc +++ b/chromium/components/autofill/core/browser/form_structure_unittest.cc @@ -6661,6 +6661,148 @@ TEST_P(ParameterizedFormStructureTest, EXPECT_EQ(ADDRESS_HOME_COUNTRY, forms[0]->field(3)->Type().GetStorableType()); } +// Tests that we never overwrite the CVC heuristic-predicted type, even if there +// is no server data (votes) for every CC fields. +TEST_P(ParameterizedFormStructureTest, NoServerDataCCFields_CVC_NoOverwrite) { + base::test::ScopedFeatureList scoped_features; + + bool flag_enabled = GetParam(); + scoped_features.InitWithFeatureState(features::kAutofillOffNoServerData, + flag_enabled); + + FormData form; + form.url = GURL("http://foo.com"); + FormFieldData field; + field.form_control_type = "text"; + field.max_length = 10000; + field.should_autocomplete = false; + + // All fields with autocomplete off and no server data. + field.label = ASCIIToUTF16("Cardholder Name"); + field.name = ASCIIToUTF16("fullName"); + form.fields.push_back(field); + + field.label = ASCIIToUTF16("Credit Card Number"); + field.name = ASCIIToUTF16("cc-number"); + form.fields.push_back(field); + + field.label = ASCIIToUTF16("Expiration Date"); + field.name = ASCIIToUTF16("exp-date"); + form.fields.push_back(field); + + field.label = ASCIIToUTF16("CVC"); + field.name = ASCIIToUTF16("cvc"); + form.fields.push_back(field); + + AutofillQueryResponseContents response; + response.add_field()->set_overall_type_prediction(NO_SERVER_DATA); + response.add_field()->set_overall_type_prediction(NO_SERVER_DATA); + response.add_field()->set_overall_type_prediction(NO_SERVER_DATA); + response.add_field()->set_overall_type_prediction(NO_SERVER_DATA); + + std::string response_string; + ASSERT_TRUE(response.SerializeToString(&response_string)); + + FormStructure form_structure(form); + + // Will identify the sections based on the heuristics types. + form_structure.DetermineHeuristicTypes(); + + std::vector<FormStructure*> forms; + forms.push_back(&form_structure); + + // Will call RationalizeFieldTypePredictions + FormStructure::ParseQueryResponse(response_string, forms, nullptr); + + ASSERT_EQ(1U, forms.size()); + ASSERT_EQ(4U, forms[0]->field_count()); + + // If flag is enabled, fields should have been overwritten to Unknown. + if (flag_enabled) { + EXPECT_EQ(UNKNOWN_TYPE, forms[0]->field(0)->Type().GetStorableType()); + EXPECT_EQ(UNKNOWN_TYPE, forms[0]->field(1)->Type().GetStorableType()); + EXPECT_EQ(UNKNOWN_TYPE, forms[0]->field(2)->Type().GetStorableType()); + } else { + EXPECT_EQ(CREDIT_CARD_NAME_FULL, + forms[0]->field(0)->Type().GetStorableType()); + EXPECT_EQ(CREDIT_CARD_NUMBER, forms[0]->field(1)->Type().GetStorableType()); + EXPECT_EQ(CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, + forms[0]->field(2)->Type().GetStorableType()); + } + + // Regardless of the flag, the CVC field should not have been overwritten. + EXPECT_EQ(CREDIT_CARD_VERIFICATION_CODE, + forms[0]->field(3)->Type().GetStorableType()); +} + +// Tests that we never overwrite the CVC heuristic-predicted type, even if there +// is server data (votes) for every other CC fields. +TEST_P(ParameterizedFormStructureTest, WithServerDataCCFields_CVC_NoOverwrite) { + base::test::ScopedFeatureList scoped_features; + + bool flag_enabled = GetParam(); + scoped_features.InitWithFeatureState(features::kAutofillOffNoServerData, + flag_enabled); + + FormData form; + form.url = GURL("http://foo.com"); + FormFieldData field; + field.form_control_type = "text"; + field.max_length = 10000; + field.should_autocomplete = false; + + // All fields with autocomplete off and no server data. + field.label = ASCIIToUTF16("Cardholder Name"); + field.name = ASCIIToUTF16("fullName"); + form.fields.push_back(field); + + field.label = ASCIIToUTF16("Credit Card Number"); + field.name = ASCIIToUTF16("cc-number"); + form.fields.push_back(field); + + field.label = ASCIIToUTF16("Expiration Date"); + field.name = ASCIIToUTF16("exp-date"); + form.fields.push_back(field); + + field.label = ASCIIToUTF16("CVC"); + field.name = ASCIIToUTF16("cvc"); + form.fields.push_back(field); + + AutofillQueryResponseContents response; + response.add_field()->set_overall_type_prediction(CREDIT_CARD_NAME_FULL); + response.add_field()->set_overall_type_prediction(CREDIT_CARD_NUMBER); + response.add_field()->set_overall_type_prediction( + CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR); + response.add_field()->set_overall_type_prediction(NO_SERVER_DATA); + + std::string response_string; + ASSERT_TRUE(response.SerializeToString(&response_string)); + + FormStructure form_structure(form); + + // Will identify the sections based on the heuristics types. + form_structure.DetermineHeuristicTypes(); + + std::vector<FormStructure*> forms; + forms.push_back(&form_structure); + + // Will call RationalizeFieldTypePredictions + FormStructure::ParseQueryResponse(response_string, forms, nullptr); + + ASSERT_EQ(1U, forms.size()); + ASSERT_EQ(4U, forms[0]->field_count()); + + // Regardless of the flag, the fields should not have been overwritten, + // including the CVC field. + EXPECT_EQ(CREDIT_CARD_NAME_FULL, + forms[0]->field(0)->Type().GetStorableType()); + EXPECT_EQ(CREDIT_CARD_NUMBER, forms[0]->field(1)->Type().GetStorableType()); + EXPECT_EQ(CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, + forms[0]->field(2)->Type().GetStorableType()); + EXPECT_EQ(CREDIT_CARD_VERIFICATION_CODE, + forms[0]->field(3)->Type().GetStorableType()); +} + struct RationalizationTypeRelationshipsTestParams { ServerFieldType server_type; ServerFieldType required_type; diff --git a/chromium/components/components_strings.grd b/chromium/components/components_strings.grd index 71e8f629c19..c5d3f5d6a46 100644 --- a/chromium/components/components_strings.grd +++ b/chromium/components/components_strings.grd @@ -208,6 +208,7 @@ <part file="login_dialog_strings.grdp" /> <part file="new_or_sad_tab_strings.grdp" /> <part file="ntp_snippets_strings.grdp" /> + <part file="ntp_tiles_strings.grdp" /> <part file="omnibox_strings.grdp" /> <part file="page_info_strings.grdp" /> <part file="password_manager_strings.grdp" /> diff --git a/chromium/components/crash/content/browser/child_exit_observer_android.cc b/chromium/components/crash/content/browser/child_exit_observer_android.cc index 595a5274487..e2a4eee58b0 100644 --- a/chromium/components/crash/content/browser/child_exit_observer_android.cc +++ b/chromium/components/crash/content/browser/child_exit_observer_android.cc @@ -40,6 +40,9 @@ void PopulateTerminationInfo( content_info.remaining_process_with_waived_binding; info->was_oom_protected_status = content_info.status == base::TERMINATION_STATUS_OOM_PROTECTED; + info->renderer_has_visible_clients = + content_info.renderer_has_visible_clients; + info->renderer_was_subframe = content_info.renderer_was_subframe; } } // namespace diff --git a/chromium/components/management_strings.grdp b/chromium/components/management_strings.grdp index d3dd19de52e..1aa2426d9d2 100644 --- a/chromium/components/management_strings.grdp +++ b/chromium/components/management_strings.grdp @@ -75,40 +75,7 @@ <message name="IDS_MANAGEMENT_ACCOUNT_MANAGED_BY" desc="Message indicating that the account is enterprise enrolled to be managed by an administrator"> Your account is managed by <ph name="ENROLLMENT_DOMAIN">$1<ex>example.com</ex></ph>. </message> - <!-- Device managed clarification --> - <message name="IDS_MANAGEMENT_DEVICE_MANAGED_CLARIFICATION" desc="First part of the sentence of the managed device clarification."> - As the manager of this device, <ph name="ENROLLMENT_DOMAIN">$1<ex>example.com</ex></ph>: - </message> - <message name="IDS_MANAGEMENT_DEVICE_MANAGED_SETUP" desc="Continuation of the managed device clarification sentence explaining device setup management."> - Can remotely change your device setup. - </message> - <message name="IDS_MANAGEMENT_DEVICE_MANAGED_DATA" desc="Continuation of the managed device clarification sentence explaining device user data management."> - Controls how your device data is handled. Google processes your device data exclusively under the direction of your device manager and solely for the purposes specified by your device manager. - </message> - <!-- Device and account managed clarification --> - <message name="IDS_MANAGEMENT_DEVICE_AND_ACCOUNT_MANAGED_CLARIFICATION" desc="First part of the sentence of the managed device and account clarification, when enrollment domain equals account domain."> - As the manager of your device and account, <ph name="ENROLLMENT_DOMAIN">$1<ex>example.com</ex></ph>: - </message> - <message name="IDS_MANAGEMENT_DEVICE_AND_ACCOUNT_MANAGED_SETUP" desc="Continuation of the managed device and account clarification sentence explaining device and account setup management."> - Can remotely change your device and account setup. - </message> - <message name="IDS_MANAGEMENT_DEVICE_AND_ACCOUNT_MANAGED_DATA" desc="Continuation of the managed device and account clarification sentence explaining device and account user data management."> - Controls how your device and account data is handled. Google processes your device and account data exclusively under the direction of your device and account manager and solely for the purposes specified by your device and account manager. - </message> </if> - <!-- Account managed clarification --> - <message name="IDS_MANAGEMENT_ACCOUNT_MANAGED_CLARIFICATION_UNKNOWN_DOMAIN" desc="First part of the sentence for managed account clarification. This is a header over a bullet point list."> - The company, school, or organization that manages this account: - </message> - <message name="IDS_MANAGEMENT_ACCOUNT_MANAGED_CLARIFICATION" desc="First part of the sentence for managed account clarification. This is a header over a bullet point list."> - As the manager of your account, <ph name="ACCOUNT_DOMAIN">$1<ex>example.com</ex></ph>: - </message> - <message name="IDS_MANAGEMENT_ACCOUNT_MANAGED_SETUP" desc="Continuation of the managed account clarification sentence explaining account setup management."> - Can remotely change your account setup. - </message> - <message name="IDS_MANAGEMENT_ACCOUNT_MANAGED_DATA" desc="Continuation of the managed account clarification sentence explaining account user data management."> - Controls how your account data is handled. Google processes your account data exclusively under the direction of your account manager and solely for the purposes specified by your account manager. - </message> <if expr="chromeos"> <!-- Strings related to Local trust roots section --> diff --git a/chromium/components/ntp_tiles/BUILD.gn b/chromium/components/ntp_tiles/BUILD.gn index ec5c26da5e8..33d2c608dba 100644 --- a/chromium/components/ntp_tiles/BUILD.gn +++ b/chromium/components/ntp_tiles/BUILD.gn @@ -17,6 +17,8 @@ static_library("ntp_tiles") { "custom_links_manager_impl.h", "custom_links_store.cc", "custom_links_store.h", + "features.cc", + "features.h", "icon_cacher.h", "icon_cacher_impl.cc", "icon_cacher_impl.h", @@ -61,6 +63,7 @@ static_library("ntp_tiles") { "//components/rappor/public", "//components/resources", "//components/search_engines", + "//components/strings", "//components/url_formatter", "//components/variations", "//components/variations/service", diff --git a/chromium/components/ntp_tiles/DEPS b/chromium/components/ntp_tiles/DEPS index e43f875d6d6..18f2f118b9b 100644 --- a/chromium/components/ntp_tiles/DEPS +++ b/chromium/components/ntp_tiles/DEPS @@ -11,6 +11,7 @@ include_rules = [ "+components/prefs", "+components/rappor", "+components/search_engines", + "+components/strings/grit/components_strings.h", "+components/suggestions", "+components/sync_preferences", "+components/url_formatter", diff --git a/chromium/components/ntp_tiles/features.cc b/chromium/components/ntp_tiles/features.cc new file mode 100644 index 00000000000..d1f3c33814c --- /dev/null +++ b/chromium/components/ntp_tiles/features.cc @@ -0,0 +1,15 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/ntp_tiles/features.h" + +#include "base/feature_list.h" +#include "ui/base/ui_base_features.h" + +namespace ntp_tiles { + +const base::Feature kDefaultSearchShortcut{"DefaultSearchShortcut", + base::FEATURE_DISABLED_BY_DEFAULT}; + +} // namespace ntp_tiles diff --git a/chromium/components/ntp_tiles/features.h b/chromium/components/ntp_tiles/features.h new file mode 100644 index 00000000000..0c60cfc0d7b --- /dev/null +++ b/chromium/components/ntp_tiles/features.h @@ -0,0 +1,19 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_NTP_TILES_FEATURES_H_ +#define COMPONENTS_NTP_TILES_FEATURES_H_ + +namespace base { +struct Feature; +} // namespace base + +namespace ntp_tiles { + +// If enabled, show a Google search shortcut on the NTP by default. +extern const base::Feature kDefaultSearchShortcut; + +} // namespace ntp_tiles + +#endif // COMPONENTS_NTP_TILES_FEATURES_H_ diff --git a/chromium/components/ntp_tiles/metrics.cc b/chromium/components/ntp_tiles/metrics.cc index f3df4427ada..9cc76163918 100644 --- a/chromium/components/ntp_tiles/metrics.cc +++ b/chromium/components/ntp_tiles/metrics.cc @@ -29,6 +29,7 @@ const char kHistogramBakedInName[] = "popular_baked_in"; const char kHistogramWhitelistName[] = "whitelist"; const char kHistogramHomepageName[] = "homepage"; const char kHistogramCustomLinksName[] = "custom_links"; +const char kHistogramSearchName[] = "search_page"; // Suffixes for the various icon types. const char kTileTypeSuffixIconColor[] = "IconsColor"; @@ -59,6 +60,8 @@ std::string GetSourceHistogramName(TileSource source) { return kHistogramHomepageName; case TileSource::CUSTOM_LINKS: return kHistogramCustomLinksName; + case TileSource::SEARCH_PAGE: + return kHistogramSearchName; } NOTREACHED(); return std::string(); diff --git a/chromium/components/ntp_tiles/most_visited_sites.cc b/chromium/components/ntp_tiles/most_visited_sites.cc index a22597935bc..e643df1701a 100644 --- a/chromium/components/ntp_tiles/most_visited_sites.cc +++ b/chromium/components/ntp_tiles/most_visited_sites.cc @@ -15,13 +15,18 @@ #include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" +#include "build/build_config.h" +#include "components/google/core/common/google_util.h" #include "components/history/core/browser/top_sites.h" #include "components/ntp_tiles/constants.h" +#include "components/ntp_tiles/features.h" #include "components/ntp_tiles/icon_cacher.h" #include "components/ntp_tiles/pref_names.h" #include "components/ntp_tiles/switches.h" #include "components/pref_registry/pref_registry_syncable.h" #include "components/prefs/pref_service.h" +#include "components/strings/grit/components_strings.h" +#include "ui/base/l10n/l10n_util.h" using history::TopSites; using suggestions::ChromeSuggestion; @@ -184,6 +189,12 @@ bool MostVisitedSites::DoesSourceExist(TileSource source) const { return supervisor_ != nullptr; case TileSource::CUSTOM_LINKS: return custom_links_ != nullptr; + case TileSource::SEARCH_PAGE: +#if !defined(OS_ANDROID) && !defined(OS_IOS) + return true; +#else + return false; +#endif } NOTREACHED(); return false; @@ -696,6 +707,51 @@ NTPTilesVector MostVisitedSites::InsertHomeTile( return new_tiles; } +NTPTilesVector MostVisitedSites::InsertSearchTile(NTPTilesVector tiles) const { + DCHECK_GT(max_num_sites_, 0u); + +#if defined(OS_ANDROID) + return tiles; +#else + NTPTilesVector new_tiles; + const GURL search_url(l10n_util::GetStringUTF16(IDS_NTP_DEFAULT_SEARCH_URL)); + bool search_tile_added = false; + + for (auto& tile : tiles) { + if (new_tiles.size() >= max_num_sites_) { + break; + } + + // If there's a tile has the same host name with the search page, insert + // the tile to the first position of the list. This is also a deduplication. + if (google_util::IsGoogleHomePageUrl(tile.url) && !search_tile_added) { + tile.source = TileSource::SEARCH_PAGE; + search_tile_added = true; + new_tiles.insert(new_tiles.begin(), std::move(tile)); + continue; + } + new_tiles.push_back(std::move(tile)); + } + + if (!search_tile_added) { + // Make room for the search tile. + if (new_tiles.size() >= max_num_sites_) { + new_tiles.pop_back(); + } + NTPTile search_tile; + search_tile.url = search_url; + search_tile.title = l10n_util::GetStringUTF16(IDS_NTP_DEFAULT_SEARCH_TITLE); + search_tile.source = TileSource::SEARCH_PAGE; + search_tile.title_source = TileTitleSource::TITLE_TAG; + + // Always insert |search_tile| to the front of |new_tiles| to ensure it's + // the first tile. + new_tiles.insert(new_tiles.begin(), std::move(search_tile)); + } + return new_tiles; +#endif +} + void MostVisitedSites::OnCustomLinksChanged() { DCHECK(custom_links_); if (!custom_links_enabled_) @@ -749,6 +805,9 @@ void MostVisitedSites::InitiateNotificationForNewTiles( // copy of new tiles. new_tiles = InsertHomeTile(std::move(new_tiles), base::string16()); } + if (base::FeatureList::IsEnabled(ntp_tiles::kDefaultSearchShortcut)) { + new_tiles = InsertSearchTile(std::move(new_tiles)); + } MergeMostVisitedTiles(std::move(new_tiles)); } diff --git a/chromium/components/ntp_tiles/most_visited_sites.h b/chromium/components/ntp_tiles/most_visited_sites.h index a5a9ed90b54..edcb280a039 100644 --- a/chromium/components/ntp_tiles/most_visited_sites.h +++ b/chromium/components/ntp_tiles/most_visited_sites.h @@ -309,6 +309,11 @@ class MostVisitedSites : public history::TopSitesObserver, NTPTilesVector InsertHomeTile(NTPTilesVector tiles, const base::string16& title) const; + // Adds the Google Search page as first tile to |tiles| and returns them as + // new vector. Drops existing tiles with the same host as the Google Search + // page and tiles that would exceed the maximum. + NTPTilesVector InsertSearchTile(NTPTilesVector tiles) const; + void OnHomepageTitleDetermined(NTPTilesVector tiles, const base::Optional<base::string16>& title); diff --git a/chromium/components/ntp_tiles/most_visited_sites_unittest.cc b/chromium/components/ntp_tiles/most_visited_sites_unittest.cc index 12ff2fb71e3..fe08f7a1442 100644 --- a/chromium/components/ntp_tiles/most_visited_sites_unittest.cc +++ b/chromium/components/ntp_tiles/most_visited_sites_unittest.cc @@ -29,6 +29,7 @@ #include "components/history/core/browser/top_sites_observer.h" #include "components/ntp_tiles/constants.h" #include "components/ntp_tiles/custom_links_manager.h" +#include "components/ntp_tiles/features.h" #include "components/ntp_tiles/icon_cacher.h" #include "components/ntp_tiles/json_unsafe_parser.h" #include "components/ntp_tiles/popular_sites_impl.h" @@ -91,6 +92,11 @@ std::string PrintTile(const std::string& title, testing::PrintToString(static_cast<int>(source)); } +MATCHER_P3(NotMatchesTile, title, url, source, PrintTile(title, url, source)) { + return arg.title != base::ASCIIToUTF16(title) && arg.url != GURL(url) && + arg.source != source; +} + MATCHER_P3(MatchesTile, title, url, source, PrintTile(title, url, source)) { return arg.title == base::ASCIIToUTF16(title) && arg.url == GURL(url) && arg.source == source; @@ -2111,4 +2117,95 @@ TEST(MostVisitedSitesMergeTest, ShouldMergeTilesFavoringPersonalOverPopular) { TileSource::POPULAR))); } +#if !defined(OS_ANDROID) && !defined(OS_IOS) + +TEST_P(MostVisitedSitesTest, ShouldIncludeTileForSearchPage) { + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitWithFeatures( + /*enabled=*/{ntp_tiles::kDefaultSearchShortcut}, /*disabled=*/{}); + DisableRemoteSuggestions(); + EXPECT_CALL(*mock_top_sites_, GetMostVisitedURLs(_)) + .WillRepeatedly(InvokeCallbackArgument<0>(MostVisitedURLList{})); + EXPECT_CALL(*mock_top_sites_, SyncWithHistory()); + EXPECT_CALL(*mock_top_sites_, + IsBlacklisted(Eq(GURL("https://www.google.com")))) + .Times(AnyNumber()) + .WillRepeatedly(Return(false)); + EXPECT_CALL(mock_observer_, OnURLsAvailable(FirstPersonalizedTileIs( + "Google", "https://www.google.com/", + TileSource::SEARCH_PAGE))); + most_visited_sites_->SetMostVisitedURLsObserver(&mock_observer_, + /*num_sites=*/3); + base::RunLoop().RunUntilIdle(); +} + +TEST_P(MostVisitedSitesTest, ShouldHaveSearchPageFirstInListWhenFull) { + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitWithFeatures( + /*enabled=*/{ntp_tiles::kDefaultSearchShortcut}, /*disabled=*/{}); + DisableRemoteSuggestions(); + EXPECT_CALL(*mock_top_sites_, GetMostVisitedURLs(_)) + .WillRepeatedly(InvokeCallbackArgument<0>((MostVisitedURLList{ + MakeMostVisitedURL("Site 1", "http://site1/"), + MakeMostVisitedURL("Site 2", "http://site2/"), + MakeMostVisitedURL("Site 3", "http://site3/"), + MakeMostVisitedURL("Site 4", "http://site4/"), + MakeMostVisitedURL("Site 5", "http://site5/"), + }))); + EXPECT_CALL(*mock_top_sites_, SyncWithHistory()); + EXPECT_CALL(*mock_top_sites_, + IsBlacklisted(Eq(GURL("https://www.gooogle.com/")))) + .Times(AnyNumber()) + .WillRepeatedly(Return(false)); + std::map<SectionType, NTPTilesVector> sections; + EXPECT_CALL(mock_observer_, OnURLsAvailable(_)) + .WillOnce(SaveArg<0>(§ions)); + most_visited_sites_->SetMostVisitedURLsObserver(&mock_observer_, + /*num_sites=*/4); + base::RunLoop().RunUntilIdle(); + ASSERT_THAT(sections, Contains(Key(SectionType::PERSONALIZED))); + NTPTilesVector tiles = sections.at(SectionType::PERSONALIZED); + ASSERT_THAT(tiles.size(), Ge(4ul)); + // Assert that the search page is appended as the first tile. + EXPECT_THAT(tiles[0], MatchesTile("Google", "https://www.google.com", + TileSource::SEARCH_PAGE)); +} + +TEST_P(MostVisitedSitesTest, DedupesSearchPage) { + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitWithFeatures( + /*enabled=*/{ntp_tiles::kDefaultSearchShortcut}, /*disabled=*/{}); + DisableRemoteSuggestions(); + EXPECT_CALL(*mock_top_sites_, GetMostVisitedURLs(_)) + .WillRepeatedly(InvokeCallbackArgument<0>((MostVisitedURLList{ + MakeMostVisitedURL("Site 1", "http://site1/"), + MakeMostVisitedURL("Google", "https://www.google.com"), + MakeMostVisitedURL("Site 3", "http://site3/"), + MakeMostVisitedURL("Site 4", "http://site4/"), + }))); + EXPECT_CALL(*mock_top_sites_, SyncWithHistory()); + EXPECT_CALL(*mock_top_sites_, + IsBlacklisted(Eq(GURL("https://www.gooogle.com/")))) + .Times(AnyNumber()) + .WillRepeatedly(Return(false)); + std::map<SectionType, NTPTilesVector> sections; + EXPECT_CALL(mock_observer_, OnURLsAvailable(_)) + .WillOnce(SaveArg<0>(§ions)); + most_visited_sites_->SetMostVisitedURLsObserver(&mock_observer_, + /*num_sites=*/4); + base::RunLoop().RunUntilIdle(); + ASSERT_THAT(sections, Contains(Key(SectionType::PERSONALIZED))); + NTPTilesVector tiles = sections.at(SectionType::PERSONALIZED); + ASSERT_THAT(tiles.size(), Ge(4ul)); + // Assert that the search page is appended as the first tile. + EXPECT_THAT(tiles[0], MatchesTile("Google", "https://www.google.com/", + TileSource::SEARCH_PAGE)); + for (auto i = 1u; i < tiles.size(); ++i) { + EXPECT_THAT(tiles[i], NotMatchesTile("Google", "https://www.google.com/", + TileSource::SEARCH_PAGE)); + } +} + +#endif + } // namespace ntp_tiles diff --git a/chromium/components/ntp_tiles/tile_source.h b/chromium/components/ntp_tiles/tile_source.h index 0d26c2a350e..689411b4302 100644 --- a/chromium/components/ntp_tiles/tile_source.h +++ b/chromium/components/ntp_tiles/tile_source.h @@ -26,8 +26,10 @@ enum class TileSource { WHITELIST, // Tile containing the user-set home page is replacing the home page button. HOMEPAGE, + // Tile containing the Google Search page. + SEARCH_PAGE, - LAST = HOMEPAGE + LAST = SEARCH_PAGE }; } // namespace ntp_tiles diff --git a/chromium/components/ntp_tiles_strings.grdp b/chromium/components/ntp_tiles_strings.grdp new file mode 100644 index 00000000000..6500dc8d6d3 --- /dev/null +++ b/chromium/components/ntp_tiles_strings.grdp @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<grit-part> + <if expr="not is_android"> + <!-- The title for the Google Search shortcut. --> + <message name="IDS_NTP_DEFAULT_SEARCH_TITLE" translateable="false" desc="The label for the default Search shortcut on the New Tab Page."> + Google + </message> + + <!-- The URL for the Google Search shortcut. --> + <message name="IDS_NTP_DEFAULT_SEARCH_URL" translateable="false"> + https://www.google.com + </message> + </if> +</grit-part> diff --git a/chromium/components/offline_pages/core/prefetch/get_operation_request.cc b/chromium/components/offline_pages/core/prefetch/get_operation_request.cc index df86e2416d9..426da24d85e 100644 --- a/chromium/components/offline_pages/core/prefetch/get_operation_request.cc +++ b/chromium/components/offline_pages/core/prefetch/get_operation_request.cc @@ -4,6 +4,8 @@ #include "components/offline_pages/core/prefetch/get_operation_request.h" +#include <utility> + #include "base/bind.h" #include "base/location.h" #include "base/logging.h" @@ -53,4 +55,8 @@ void GetOperationRequest::OnCompleted( assigned_operation_name, pages); } +PrefetchRequestFinishedCallback GetOperationRequest::GetCallbackForTesting() { + return std::move(callback_); +} + } // namespace offline_pages diff --git a/chromium/components/offline_pages/core/prefetch/get_operation_request.h b/chromium/components/offline_pages/core/prefetch/get_operation_request.h index 63b35d38745..47f1a395065 100644 --- a/chromium/components/offline_pages/core/prefetch/get_operation_request.h +++ b/chromium/components/offline_pages/core/prefetch/get_operation_request.h @@ -34,6 +34,10 @@ class GetOperationRequest { PrefetchRequestFinishedCallback callback); ~GetOperationRequest(); + // Returns the stored callback. Note that this moves the internal value + // making it null. + PrefetchRequestFinishedCallback GetCallbackForTesting(); + private: void OnCompleted(const std::string& operation_name, PrefetchRequestStatus status, diff --git a/chromium/components/offline_pages/core/prefetch/prefetch_dispatcher_impl.cc b/chromium/components/offline_pages/core/prefetch/prefetch_dispatcher_impl.cc index fad316fc43e..19e7340c94e 100644 --- a/chromium/components/offline_pages/core/prefetch/prefetch_dispatcher_impl.cc +++ b/chromium/components/offline_pages/core/prefetch/prefetch_dispatcher_impl.cc @@ -248,7 +248,7 @@ void PrefetchDispatcherImpl::QueueActionTasks() { std::unique_ptr<Task> get_operation_task = std::make_unique<GetOperationTask>( service_->GetPrefetchStore(), service_->GetPrefetchNetworkRequestFactory(), - base::BindOnce( + base::BindRepeating( &PrefetchDispatcherImpl::DidGenerateBundleOrGetOperationRequest, GetWeakPtr(), "GetOperationRequest")); task_queue_.AddTask(std::move(get_operation_task)); @@ -258,7 +258,7 @@ void PrefetchDispatcherImpl::QueueActionTasks() { this, service_->GetPrefetchStore(), service_->GetPrefetchGCMHandler(), service_->GetCachedGCMToken(), service_->GetPrefetchNetworkRequestFactory(), - base::BindOnce( + base::BindRepeating( &PrefetchDispatcherImpl::DidGenerateBundleOrGetOperationRequest, GetWeakPtr(), "GeneratePageBundleRequest")); task_queue_.AddTask(std::move(generate_page_bundle_task)); diff --git a/chromium/components/offline_pages/core/prefetch/prefetch_network_request_factory_impl.cc b/chromium/components/offline_pages/core/prefetch/prefetch_network_request_factory_impl.cc index f82e1f51847..91f4b59eb3f 100644 --- a/chromium/components/offline_pages/core/prefetch/prefetch_network_request_factory_impl.cc +++ b/chromium/components/offline_pages/core/prefetch/prefetch_network_request_factory_impl.cc @@ -4,6 +4,8 @@ #include "components/offline_pages/core/prefetch/prefetch_network_request_factory_impl.h" +#include <utility> + #include "base/bind.h" #include "base/metrics/histogram_macros.h" #include "components/offline_pages/core/offline_page_feature.h" @@ -64,6 +66,7 @@ void PrefetchNetworkRequestFactoryImpl::MakeGeneratePageBundleRequest( const std::vector<std::string>& url_strings, const std::string& gcm_registration_id, PrefetchRequestFinishedCallback callback) { + DCHECK(callback); if (!AddConcurrentRequest()) return; int max_bundle_size = prefetch_prefs::IsLimitlessPrefetchingEnabled(prefs_) @@ -94,6 +97,7 @@ PrefetchNetworkRequestFactoryImpl::GetAllUrlsRequested() const { void PrefetchNetworkRequestFactoryImpl::MakeGetOperationRequest( const std::string& operation_name, PrefetchRequestFinishedCallback callback) { + DCHECK(callback); if (!AddConcurrentRequest()) return; get_operation_requests_[operation_name] = @@ -157,7 +161,7 @@ PrefetchNetworkRequestFactoryImpl::GetAllOperationNamesRequested() const { } void PrefetchNetworkRequestFactoryImpl::ReleaseConcurrentRequest() { - DCHECK(concurrent_request_count_ > 0); + DCHECK_GT(concurrent_request_count_, 0U); --concurrent_request_count_; } diff --git a/chromium/components/offline_pages/core/prefetch/prefetch_network_request_factory_impl_unittest.cc b/chromium/components/offline_pages/core/prefetch/prefetch_network_request_factory_impl_unittest.cc index 6f8d73386fd..2fca71cfc9f 100644 --- a/chromium/components/offline_pages/core/prefetch/prefetch_network_request_factory_impl_unittest.cc +++ b/chromium/components/offline_pages/core/prefetch/prefetch_network_request_factory_impl_unittest.cc @@ -4,6 +4,7 @@ #include "components/offline_pages/core/prefetch/prefetch_network_request_factory_impl.h" +#include "base/bind_helpers.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/mock_callback.h" #include "base/test/test_simple_task_runner.h" @@ -61,8 +62,7 @@ TEST_F(PrefetchNetworkRequestFactoryTest, TestMakeGetOperationRequest) { EXPECT_TRUE(operation_names->empty()); // Then, make the request and ensure we can find it by name. - request_factory()->MakeGetOperationRequest(operation_name, - PrefetchRequestFinishedCallback()); + request_factory()->MakeGetOperationRequest(operation_name, base::DoNothing()); EXPECT_TRUE(request_factory()->HasOutstandingRequests()); request = request_factory()->FindGetOperationRequestByName(operation_name); EXPECT_NE(nullptr, request); @@ -81,7 +81,7 @@ TEST_F(PrefetchNetworkRequestFactoryTest, TestMakeGetOperationRequest) { // Then make the second request. request_factory()->MakeGetOperationRequest(operation_name_2, - PrefetchRequestFinishedCallback()); + base::DoNothing()); // Query for the second request, ensure it is different than the first // request, and ensure it didn't change the first request. @@ -94,8 +94,7 @@ TEST_F(PrefetchNetworkRequestFactoryTest, TestMakeGetOperationRequest) { // Then overwrite the first request with a new one, and make sure it's // different. - request_factory()->MakeGetOperationRequest(operation_name, - PrefetchRequestFinishedCallback()); + request_factory()->MakeGetOperationRequest(operation_name, base::DoNothing()); EXPECT_NE(request, request_factory()->FindGetOperationRequestByName(operation_name)); } @@ -106,8 +105,8 @@ TEST_F(PrefetchNetworkRequestFactoryTest, TestMakeGeneratePageBundleRequest) { EXPECT_FALSE(request_factory()->HasOutstandingRequests()); - request_factory()->MakeGeneratePageBundleRequest( - urls, reg_id, PrefetchRequestFinishedCallback()); + request_factory()->MakeGeneratePageBundleRequest(urls, reg_id, + base::DoNothing()); EXPECT_TRUE(request_factory()->HasOutstandingRequests()); @@ -116,8 +115,8 @@ TEST_F(PrefetchNetworkRequestFactoryTest, TestMakeGeneratePageBundleRequest) { EXPECT_THAT(*requested_urls, Contains(urls[1])); std::vector<std::string> urls2 = {"example.com/3"}; - request_factory()->MakeGeneratePageBundleRequest( - urls2, reg_id, PrefetchRequestFinishedCallback()); + request_factory()->MakeGeneratePageBundleRequest(urls2, reg_id, + base::DoNothing()); requested_urls = request_factory()->GetAllUrlsRequested(); EXPECT_THAT(*requested_urls, Contains(urls[0])); EXPECT_THAT(*requested_urls, Contains(urls[1])); @@ -130,14 +129,14 @@ TEST_F(PrefetchNetworkRequestFactoryTest, ManyGenerateBundleRequests) { const int kTooManyRequests = 20; for (int i = 0; i < kTooManyRequests; ++i) { - request_factory()->MakeGeneratePageBundleRequest( - urls1, reg_id, PrefetchRequestFinishedCallback()); + request_factory()->MakeGeneratePageBundleRequest(urls1, reg_id, + base::DoNothing()); } // Add one more request, over the maximum count of concurrent requests. std::vector<std::string> urls2 = {"example.com/2"}; - request_factory()->MakeGeneratePageBundleRequest( - urls2, reg_id, PrefetchRequestFinishedCallback()); + request_factory()->MakeGeneratePageBundleRequest(urls2, reg_id, + base::DoNothing()); auto requested_urls = request_factory()->GetAllUrlsRequested(); EXPECT_THAT(*requested_urls, Contains(urls1[0])); @@ -150,14 +149,14 @@ TEST_F(PrefetchNetworkRequestFactoryTest, ManyGetOperationRequests) { const int kTooManyRequests = 20; for (int i = 0; i < kTooManyRequests; ++i) { - request_factory()->MakeGetOperationRequest( - operation_name1, PrefetchRequestFinishedCallback()); + request_factory()->MakeGetOperationRequest(operation_name1, + base::DoNothing()); } // Add one more request, over the maximum count of concurrent requests. std::string operation_name2 = "an operation 2"; request_factory()->MakeGetOperationRequest(operation_name2, - PrefetchRequestFinishedCallback()); + base::DoNothing()); auto operation_names = request_factory()->GetAllOperationNamesRequested(); EXPECT_THAT(*operation_names, Contains(operation_name1)); @@ -176,14 +175,14 @@ TEST_F(PrefetchNetworkRequestFactoryTest, ManyRequestsMixedType) { const int kNotTooManyRequests = 6; for (int i = 0; i < kNotTooManyRequests; ++i) { - request_factory()->MakeGetOperationRequest( - operation_name1, PrefetchRequestFinishedCallback()); + request_factory()->MakeGetOperationRequest(operation_name1, + base::DoNothing()); } // Still possible to make more requests... std::string operation_name2 = "an operation 2"; request_factory()->MakeGetOperationRequest(operation_name2, - PrefetchRequestFinishedCallback()); + base::DoNothing()); auto operation_names = request_factory()->GetAllOperationNamesRequested(); EXPECT_THAT(*operation_names, Contains(operation_name1)); @@ -193,14 +192,14 @@ TEST_F(PrefetchNetworkRequestFactoryTest, ManyRequestsMixedType) { std::vector<std::string> urls1 = {"example.com/1"}; std::string reg_id = "a registration id"; for (int i = 0; i < kNotTooManyRequests; ++i) { - request_factory()->MakeGeneratePageBundleRequest( - urls1, reg_id, PrefetchRequestFinishedCallback()); + request_factory()->MakeGeneratePageBundleRequest(urls1, reg_id, + base::DoNothing()); } // Add one more request, over the maximum count of concurrent requests. std::string operation_name3 = "an operation 3"; request_factory()->MakeGetOperationRequest(operation_name3, - PrefetchRequestFinishedCallback()); + base::DoNothing()); operation_names = request_factory()->GetAllOperationNamesRequested(); EXPECT_THAT(*operation_names, Contains(operation_name1)); diff --git a/chromium/components/offline_pages/core/prefetch/tasks/get_operation_task.cc b/chromium/components/offline_pages/core/prefetch/tasks/get_operation_task.cc index a58428f9fc4..3831953e71e 100644 --- a/chromium/components/offline_pages/core/prefetch/tasks/get_operation_task.cc +++ b/chromium/components/offline_pages/core/prefetch/tasks/get_operation_task.cc @@ -81,7 +81,7 @@ GetOperationTask::OperationResultList SelectOperationsToFetch( GetOperationTask::GetOperationTask( PrefetchStore* store, PrefetchNetworkRequestFactory* request_factory, - PrefetchRequestFinishedCallback callback) + GetOperationFinishedCallback callback) : prefetch_store_(store), request_factory_(request_factory), callback_(std::move(callback)), @@ -101,8 +101,8 @@ void GetOperationTask::StartGetOperationRequests( OperationResultList operation_names) { if (operation_names) { for (std::string& operation : *operation_names) { - request_factory_->MakeGetOperationRequest(operation, - std::move(callback_)); + request_factory_->MakeGetOperationRequest( + operation, PrefetchRequestFinishedCallback(callback_)); } } diff --git a/chromium/components/offline_pages/core/prefetch/tasks/get_operation_task.h b/chromium/components/offline_pages/core/prefetch/tasks/get_operation_task.h index 58e554769bc..1344d84c52f 100644 --- a/chromium/components/offline_pages/core/prefetch/tasks/get_operation_task.h +++ b/chromium/components/offline_pages/core/prefetch/tasks/get_operation_task.h @@ -24,9 +24,16 @@ class GetOperationTask : public Task { public: using OperationResultList = std::unique_ptr<std::vector<std::string>>; + // This is a repeating version of PrefetchRequestFinishedCallback as it may be + // called more than once when multiple requests are placed. + using GetOperationFinishedCallback = + base::RepeatingCallback<void(PrefetchRequestStatus status, + const std::string& operation_name, + const std::vector<RenderPageInfo>& pages)>; + GetOperationTask(PrefetchStore* store, PrefetchNetworkRequestFactory* request_factory, - PrefetchRequestFinishedCallback callback); + GetOperationFinishedCallback callback); ~GetOperationTask() override; // Task implementation. @@ -37,7 +44,7 @@ class GetOperationTask : public Task { PrefetchStore* prefetch_store_; PrefetchNetworkRequestFactory* request_factory_; - PrefetchRequestFinishedCallback callback_; + GetOperationFinishedCallback callback_; base::WeakPtrFactory<GetOperationTask> weak_factory_; diff --git a/chromium/components/offline_pages/core/prefetch/tasks/get_operation_task_unittest.cc b/chromium/components/offline_pages/core/prefetch/tasks/get_operation_task_unittest.cc index b81609ff881..569e1c507ab 100644 --- a/chromium/components/offline_pages/core/prefetch/tasks/get_operation_task_unittest.cc +++ b/chromium/components/offline_pages/core/prefetch/tasks/get_operation_task_unittest.cc @@ -4,7 +4,9 @@ #include "components/offline_pages/core/prefetch/tasks/get_operation_task.h" +#include "base/bind_helpers.h" #include "base/test/mock_callback.h" +#include "components/offline_pages/core/prefetch/get_operation_request.h" #include "components/offline_pages/core/prefetch/prefetch_item.h" #include "components/offline_pages/core/prefetch/prefetch_types.h" #include "components/offline_pages/core/prefetch/tasks/prefetch_task_test_base.h" @@ -13,15 +15,13 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -using testing::DoAll; using testing::HasSubstr; -using testing::SaveArg; using testing::_; namespace offline_pages { namespace { const char kOperationName[] = "an_operation"; -const char kOtherOperationName[] = "an_operation"; +const char kOtherOperationName[] = "another_operation"; const char kOperationShouldNotBeRequested[] = "Operation Not Found"; } // namespace @@ -36,20 +36,18 @@ class GetOperationTaskTest : public PrefetchTaskTestBase { TEST_F(GetOperationTaskTest, StoreFailure) { store_util()->SimulateInitializationError(); - base::MockCallback<PrefetchRequestFinishedCallback> callback; RunTask(std::make_unique<GetOperationTask>( - store(), prefetch_request_factory(), callback.Get())); + store(), prefetch_request_factory(), base::DoNothing())); } TEST_F(GetOperationTaskTest, NormalOperationTask) { - base::MockCallback<PrefetchRequestFinishedCallback> callback; int64_t id = InsertPrefetchItemInStateWithOperation( kOperationName, PrefetchItemState::RECEIVED_GCM); ASSERT_NE(nullptr, store_util()->GetPrefetchItem(id)); RunTask(std::make_unique<GetOperationTask>( - store(), prefetch_request_factory(), callback.Get())); + store(), prefetch_request_factory(), base::DoNothing())); EXPECT_NE(nullptr, prefetch_request_factory()->FindGetOperationRequestByName( kOperationName)); @@ -61,7 +59,6 @@ TEST_F(GetOperationTaskTest, NormalOperationTask) { } TEST_F(GetOperationTaskTest, NotMatchingEntries) { - base::MockCallback<PrefetchRequestFinishedCallback> callback; // List all states that are not affected by the GetOperationTask. std::vector<PrefetchItemState> states = GetAllStatesExcept( {PrefetchItemState::SENT_GET_OPERATION, PrefetchItemState::RECEIVED_GCM}); @@ -72,7 +69,7 @@ TEST_F(GetOperationTaskTest, NotMatchingEntries) { } RunTask(std::make_unique<GetOperationTask>( - store(), prefetch_request_factory(), callback.Get())); + store(), prefetch_request_factory(), base::DoNothing())); EXPECT_EQ(nullptr, prefetch_request_factory()->FindGetOperationRequestByName( kOperationName)); @@ -85,7 +82,6 @@ TEST_F(GetOperationTaskTest, NotMatchingEntries) { } TEST_F(GetOperationTaskTest, TwoOperations) { - base::MockCallback<PrefetchRequestFinishedCallback> callback; int64_t item1 = InsertPrefetchItemInStateWithOperation( kOperationName, PrefetchItemState::RECEIVED_GCM); @@ -96,13 +92,26 @@ TEST_F(GetOperationTaskTest, TwoOperations) { int64_t unused_item = InsertPrefetchItemInStateWithOperation( kOperationShouldNotBeRequested, PrefetchItemState::SENT_GET_OPERATION); + base::MockCallback<GetOperationTask::GetOperationFinishedCallback> callback; + EXPECT_CALL(callback, Run(_, kOperationName, _)); + EXPECT_CALL(callback, Run(_, kOtherOperationName, _)); RunTask(std::make_unique<GetOperationTask>( store(), prefetch_request_factory(), callback.Get())); - EXPECT_NE(nullptr, prefetch_request_factory()->FindGetOperationRequestByName( + ASSERT_NE(nullptr, prefetch_request_factory()->FindGetOperationRequestByName( kOperationName)); - EXPECT_NE(nullptr, prefetch_request_factory()->FindGetOperationRequestByName( + prefetch_request_factory() + ->FindGetOperationRequestByName(kOperationName) + ->GetCallbackForTesting() + .Run(PrefetchRequestStatus::kSuccess, kOperationName, + std::vector<RenderPageInfo>()); + ASSERT_NE(nullptr, prefetch_request_factory()->FindGetOperationRequestByName( kOtherOperationName)); + prefetch_request_factory() + ->FindGetOperationRequestByName(kOtherOperationName) + ->GetCallbackForTesting() + .Run(PrefetchRequestStatus::kSuccess, kOtherOperationName, + std::vector<RenderPageInfo>()); EXPECT_EQ(1, store_util()->GetPrefetchItem(item1)->get_operation_attempts); EXPECT_EQ(1, store_util()->GetPrefetchItem(item2)->get_operation_attempts); diff --git a/chromium/components/password_manager/core/browser/new_password_form_manager.cc b/chromium/components/password_manager/core/browser/new_password_form_manager.cc index 6a164e2d3b2..094e18bca41 100644 --- a/chromium/components/password_manager/core/browser/new_password_form_manager.cc +++ b/chromium/components/password_manager/core/browser/new_password_form_manager.cc @@ -596,8 +596,9 @@ void NewPasswordFormManager::OnFetchCompleted() { } bool NewPasswordFormManager::ProvisionallySave( - const autofill::FormData& submitted_form, - const PasswordManagerDriver* driver) { + const FormData& submitted_form, + const PasswordManagerDriver* driver, + bool is_gaia_with_skip_save_password_form) { DCHECK(DoesManage(submitted_form, driver)); std::unique_ptr<PasswordForm> parsed_submitted_form = @@ -612,6 +613,8 @@ bool NewPasswordFormManager::ProvisionallySave( return is_submitted_; parsed_submitted_form_ = std::move(parsed_submitted_form); + parsed_submitted_form_->is_gaia_with_skip_save_password_form = + is_gaia_with_skip_save_password_form; submitted_form_ = submitted_form; is_submitted_ = true; CalculateFillingAssistanceMetric(submitted_form); diff --git a/chromium/components/password_manager/core/browser/new_password_form_manager.h b/chromium/components/password_manager/core/browser/new_password_form_manager.h index c5b7ba12087..fd1ef45b071 100644 --- a/chromium/components/password_manager/core/browser/new_password_form_manager.h +++ b/chromium/components/password_manager/core/browser/new_password_form_manager.h @@ -85,8 +85,11 @@ class NewPasswordFormManager : public PasswordFormManagerInterface, // |submitted_form| and |driver|) then saves |submitted_form| to // |submitted_form_| field, sets |is_submitted| = true and returns true. // Otherwise returns false. + // |is_gaia_with_skip_save_password_form| is true iff this is Gaia form which + // should be skipped on saving. bool ProvisionallySave(const autofill::FormData& submitted_form, - const PasswordManagerDriver* driver); + const PasswordManagerDriver* driver, + bool is_gaia_with_skip_save_password_form); // If |submitted_form| is managed by *this then saves |submitted_form| to // |submitted_form_| field, sets |is_submitted| = true and returns true. diff --git a/chromium/components/password_manager/core/browser/new_password_form_manager_unittest.cc b/chromium/components/password_manager/core/browser/new_password_form_manager_unittest.cc index 5eb74e73d98..78274bc1853 100644 --- a/chromium/components/password_manager/core/browser/new_password_form_manager_unittest.cc +++ b/chromium/components/password_manager/core/browser/new_password_form_manager_unittest.cc @@ -543,7 +543,8 @@ TEST_F(NewPasswordFormManagerTest, AutofillWithBlacklistedMatch) { TEST_F(NewPasswordFormManagerTest, SetSubmitted) { EXPECT_FALSE(form_manager_->is_submitted()); - EXPECT_TRUE(form_manager_->ProvisionallySave(submitted_form_, &driver_)); + EXPECT_TRUE( + form_manager_->ProvisionallySave(submitted_form_, &driver_, false)); EXPECT_TRUE(form_manager_->is_submitted()); FormData another_form = submitted_form_; @@ -551,13 +552,14 @@ TEST_F(NewPasswordFormManagerTest, SetSubmitted) { #if !defined(OS_IOS) // |another_form| is managed because the same |unique_renderer_id| as // |observed_form_|. - EXPECT_TRUE(form_manager_->ProvisionallySave(another_form, &driver_)); + EXPECT_TRUE(form_manager_->ProvisionallySave(another_form, &driver_, false)); EXPECT_TRUE(form_manager_->is_submitted()); #endif } TEST_F(NewPasswordFormManagerTest, SetSubmittedMultipleTimes) { - EXPECT_TRUE(form_manager_->ProvisionallySave(submitted_form_, &driver_)); + EXPECT_TRUE( + form_manager_->ProvisionallySave(submitted_form_, &driver_, false)); EXPECT_TRUE(form_manager_->is_submitted()); // Make the submitted form to be invalid password form. @@ -565,7 +567,8 @@ TEST_F(NewPasswordFormManagerTest, SetSubmittedMultipleTimes) { // Expect that |form_manager_| is still in submitted state because the first // time the submited form was valid. - EXPECT_TRUE(form_manager_->ProvisionallySave(submitted_form_, &driver_)); + EXPECT_TRUE( + form_manager_->ProvisionallySave(submitted_form_, &driver_, false)); EXPECT_TRUE(form_manager_->is_submitted()); EXPECT_TRUE(form_manager_->GetSubmittedForm()); } @@ -640,7 +643,8 @@ TEST_F(NewPasswordFormManagerTest, CreatePendingCredentialsEmptyStore) { TestMockTimeTaskRunner::ScopedContext scoped_context(task_runner_.get()); fetcher_->NotifyFetchCompleted(); - EXPECT_TRUE(form_manager_->ProvisionallySave(submitted_form_, &driver_)); + EXPECT_TRUE( + form_manager_->ProvisionallySave(submitted_form_, &driver_, false)); CheckPendingCredentials(parsed_submitted_form_, form_manager_->GetPendingCredentials()); EXPECT_EQ(UserAction::kOverrideUsernameAndPassword, @@ -653,7 +657,8 @@ TEST_F(NewPasswordFormManagerTest, CreatePendingCredentialsNewCredentials) { TestMockTimeTaskRunner::ScopedContext scoped_context(task_runner_.get()); SetNonFederatedAndNotifyFetchCompleted({&saved_match_}); - EXPECT_TRUE(form_manager_->ProvisionallySave(submitted_form_, &driver_)); + EXPECT_TRUE( + form_manager_->ProvisionallySave(submitted_form_, &driver_, false)); CheckPendingCredentials(parsed_submitted_form_, form_manager_->GetPendingCredentials()); EXPECT_EQ(UserAction::kOverrideUsernameAndPassword, @@ -677,7 +682,8 @@ TEST_F(NewPasswordFormManagerTest, CreatePendingCredentialsAlreadySaved) { for (bool is_incognito : {false, true}) { EXPECT_CALL(client_, IsIncognito).WillOnce(Return(is_incognito)); form_manager_->Fill(); - EXPECT_TRUE(form_manager_->ProvisionallySave(submitted_form_, &driver_)); + EXPECT_TRUE( + form_manager_->ProvisionallySave(submitted_form_, &driver_, false)); CheckPendingCredentials(/* expected */ saved_match_, form_manager_->GetPendingCredentials()); EXPECT_EQ(is_incognito ? UserAction::kChoose : UserAction::kNone, @@ -702,7 +708,8 @@ TEST_F(NewPasswordFormManagerTest, CreatePendingCredentialsPSLMatchSaved) { submitted_form_.fields[kPasswordFieldIndex].value = saved_match_.password_value; - EXPECT_TRUE(form_manager_->ProvisionallySave(submitted_form_, &driver_)); + EXPECT_TRUE( + form_manager_->ProvisionallySave(submitted_form_, &driver_, false)); CheckPendingCredentials(expected, form_manager_->GetPendingCredentials()); EXPECT_EQ(UserAction::kChoosePslMatch, form_manager_->GetMetricsRecorder()->GetUserAction()); @@ -720,7 +727,8 @@ TEST_F(NewPasswordFormManagerTest, CreatePendingCredentialsPasswordOverriden) { submitted_form_.fields[kUsernameFieldIndex].value = saved_match_.username_value; submitted_form_.fields[kPasswordFieldIndex].value = expected.password_value; - EXPECT_TRUE(form_manager_->ProvisionallySave(submitted_form_, &driver_)); + EXPECT_TRUE( + form_manager_->ProvisionallySave(submitted_form_, &driver_, false)); CheckPendingCredentials(expected, form_manager_->GetPendingCredentials()); EXPECT_EQ(UserAction::kOverridePassword, form_manager_->GetMetricsRecorder()->GetUserAction()); @@ -739,7 +747,8 @@ TEST_F(NewPasswordFormManagerTest, CreatePendingCredentialsUpdate) { PasswordForm expected = saved_match_; expected.password_value = ASCIIToUTF16("verystrongpassword"); - EXPECT_TRUE(form_manager_->ProvisionallySave(submitted_form, &driver_)); + EXPECT_TRUE( + form_manager_->ProvisionallySave(submitted_form, &driver_, false)); CheckPendingCredentials(expected, form_manager_->GetPendingCredentials()); EXPECT_EQ(UserAction::kOverridePassword, form_manager_->GetMetricsRecorder()->GetUserAction()); @@ -761,7 +770,8 @@ TEST_F(NewPasswordFormManagerTest, PasswordForm expected = saved_match_; expected.password_value = ASCIIToUTF16("verystrongpassword"); - EXPECT_TRUE(form_manager_->ProvisionallySave(submitted_form, &driver_)); + EXPECT_TRUE( + form_manager_->ProvisionallySave(submitted_form, &driver_, false)); CheckPendingCredentials(expected, form_manager_->GetPendingCredentials()); } @@ -780,7 +790,8 @@ TEST_F(NewPasswordFormManagerTest, CreatePendingCredentialsEmptyName) { form_manager_->ProcessServerPredictions(predictions); - EXPECT_TRUE(form_manager_->ProvisionallySave(anonymous_signup, &driver_)); + EXPECT_TRUE( + form_manager_->ProvisionallySave(anonymous_signup, &driver_, false)); EXPECT_EQ(ASCIIToUTF16("a password"), form_manager_->GetPendingCredentials().password_value); } @@ -800,7 +811,7 @@ TEST_F(NewPasswordFormManagerTest, NoCrashOnNonPasswordForm) { submitted_form.fields[kPasswordFieldIndex].value = ASCIIToUTF16("password"); // Expect no crash. - form_manager_->ProvisionallySave(submitted_form, &driver_); + form_manager_->ProvisionallySave(submitted_form, &driver_, false); } TEST_F(NewPasswordFormManagerTest, IsEqualToSubmittedForm) { @@ -816,7 +827,8 @@ TEST_F(NewPasswordFormManagerTest, IsEqualToSubmittedForm) { // No submitted form yet. EXPECT_FALSE(form_manager_->IsEqualToSubmittedForm(submitted_form)); - ASSERT_TRUE(form_manager_->ProvisionallySave(submitted_form, &driver_)); + ASSERT_TRUE( + form_manager_->ProvisionallySave(submitted_form, &driver_, false)); observed_form_.unique_renderer_id += 10; observed_form_.fields.clear(); @@ -840,7 +852,8 @@ TEST_F(NewPasswordFormManagerTest, SaveNewCredentials) { submitted_form.fields[kUsernameFieldIndex].value = new_username; submitted_form.fields[kPasswordFieldIndex].value = new_password; - EXPECT_TRUE(form_manager_->ProvisionallySave(submitted_form, &driver_)); + EXPECT_TRUE( + form_manager_->ProvisionallySave(submitted_form, &driver_, false)); EXPECT_TRUE(form_manager_->IsNewLogin()); MockFormSaver& form_saver = MockFormSaver::Get(form_manager_.get()); @@ -889,7 +902,8 @@ TEST_F(NewPasswordFormManagerTest, SavePSLToAlreadySaved) { submitted_form.fields[kPasswordFieldIndex].value = psl_saved_match_.password_value; - EXPECT_TRUE(form_manager_->ProvisionallySave(submitted_form, &driver_)); + EXPECT_TRUE( + form_manager_->ProvisionallySave(submitted_form, &driver_, false)); EXPECT_TRUE(form_manager_->IsNewLogin()); EXPECT_TRUE(form_manager_->IsPendingCredentialsPublicSuffixMatch()); @@ -925,7 +939,8 @@ TEST_F(NewPasswordFormManagerTest, OverridePassword) { submitted_form.fields[kUsernameFieldIndex].value = username; submitted_form.fields[kPasswordFieldIndex].value = new_password; - EXPECT_TRUE(form_manager_->ProvisionallySave(submitted_form, &driver_)); + EXPECT_TRUE( + form_manager_->ProvisionallySave(submitted_form, &driver_, false)); EXPECT_FALSE(form_manager_->IsNewLogin()); EXPECT_TRUE(form_manager_->IsPasswordOverridden()); @@ -966,7 +981,8 @@ TEST_F(NewPasswordFormManagerTest, UpdatePasswordOnChangePasswordForm) { base::string16 new_password = saved_match_.password_value + ASCIIToUTF16("1"); submitted_form.fields[1].value = new_password; - EXPECT_TRUE(form_manager_->ProvisionallySave(submitted_form, &driver_)); + EXPECT_TRUE( + form_manager_->ProvisionallySave(submitted_form, &driver_, false)); EXPECT_FALSE(form_manager_->IsNewLogin()); EXPECT_TRUE(form_manager_->IsPasswordOverridden()); EXPECT_TRUE(form_manager_->IsPasswordUpdate()); @@ -1013,7 +1029,8 @@ TEST_F(NewPasswordFormManagerTest, VotesUploadingOnPasswordUpdate) { auto new_password = saved_match_.password_value + ASCIIToUTF16("1"); submitted_form.fields[1].value = new_password; - EXPECT_TRUE(form_manager_->ProvisionallySave(submitted_form, &driver_)); + EXPECT_TRUE( + form_manager_->ProvisionallySave(submitted_form, &driver_, false)); std::map<base::string16, autofill::ServerFieldType> expected_types; expected_types[ASCIIToUTF16("password")] = autofill::PASSWORD; @@ -1043,7 +1060,7 @@ TEST_F(NewPasswordFormManagerTest, UpdateUsernameEmptyStore) { TestMockTimeTaskRunner::ScopedContext scoped_context(task_runner_.get()); fetcher_->NotifyFetchCompleted(); - form_manager_->ProvisionallySave(submitted_form_, &driver_); + form_manager_->ProvisionallySave(submitted_form_, &driver_, false); base::string16 new_username = parsed_submitted_form_.username_value + ASCIIToUTF16("1"); @@ -1066,7 +1083,7 @@ TEST_F(NewPasswordFormManagerTest, UpdateUsernameToAnotherFieldValue) { ASCIIToUTF16("automatically_chosen_username"); submitted_form_.fields[0].value = user_chosen_username; submitted_form_.fields[1].value = automatically_chosen_username; - form_manager_->ProvisionallySave(submitted_form_, &driver_); + form_manager_->ProvisionallySave(submitted_form_, &driver_, false); EXPECT_EQ(automatically_chosen_username, form_manager_->GetPendingCredentials().username_value); @@ -1095,7 +1112,7 @@ TEST_F(NewPasswordFormManagerTest, UpdateUsernameToAlreadyExisting) { TestMockTimeTaskRunner::ScopedContext scoped_context(task_runner_.get()); SetNonFederatedAndNotifyFetchCompleted({&saved_match_}); - form_manager_->ProvisionallySave(submitted_form_, &driver_); + form_manager_->ProvisionallySave(submitted_form_, &driver_, false); base::string16 new_username = saved_match_.username_value; base::string16 expected_password = parsed_submitted_form_.password_value; @@ -1113,7 +1130,7 @@ TEST_F(NewPasswordFormManagerTest, UpdatePasswordValueEmptyStore) { TestMockTimeTaskRunner::ScopedContext scoped_context(task_runner_.get()); fetcher_->NotifyFetchCompleted(); - form_manager_->ProvisionallySave(submitted_form_, &driver_); + form_manager_->ProvisionallySave(submitted_form_, &driver_, false); base::string16 new_password = parsed_submitted_form_.password_value + ASCIIToUTF16("1"); @@ -1141,7 +1158,7 @@ TEST_F(NewPasswordFormManagerTest, UpdatePasswordValueToAlreadyExisting) { // Emulate submitting form with known username and different password. submitted_form_.fields[kUsernameFieldIndex].value = saved_match_.username_value; - form_manager_->ProvisionallySave(submitted_form_, &driver_); + form_manager_->ProvisionallySave(submitted_form_, &driver_, false); // The user changes password to already saved one. base::string16 password = saved_match_.password_value; @@ -1162,7 +1179,7 @@ TEST_F(NewPasswordFormManagerTest, UpdatePasswordValueMultiplePasswordFields) { base::string16 pin = ASCIIToUTF16("pin"); form.fields[0].value = password; form.fields[1].value = pin; - form_manager_->ProvisionallySave(form, &driver_); + form_manager_->ProvisionallySave(form, &driver_, false); // Check that a second password field is chosen for saving. EXPECT_EQ(pin, form_manager_->GetPendingCredentials().password_value); @@ -1218,7 +1235,8 @@ TEST_F(NewPasswordFormManagerTest, Clone) { fetcher_->NotifyFetchCompleted(); // Provisionally save in order to create pending credentials. - ASSERT_TRUE(form_manager_->ProvisionallySave(submitted_form_, &driver_)); + ASSERT_TRUE( + form_manager_->ProvisionallySave(submitted_form_, &driver_, false)); std::unique_ptr<NewPasswordFormManager> cloned_manager = form_manager_->Clone(); @@ -1313,7 +1331,8 @@ TEST_F(NewPasswordFormManagerTest, RecordReadonlyWhenSaving) { ukm::TestAutoSetUkmRecorder test_ukm_recorder; SetNonFederatedAndNotifyFetchCompleted({&saved_match_}); - EXPECT_TRUE(form_manager_->ProvisionallySave(submitted_form_, &driver_)); + EXPECT_TRUE( + form_manager_->ProvisionallySave(submitted_form_, &driver_, false)); // Destroy the form manager to destroy the UKM recorder it owns. The recorder // only records metrics in its destructor. @@ -1337,7 +1356,8 @@ TEST_F(NewPasswordFormManagerTest, RecordReadonlyWhenSaving_ParsingFailed) { FormData malformed_form = submitted_form_; malformed_form.fields.clear(); - EXPECT_FALSE(form_manager_->ProvisionallySave(malformed_form, &driver_)); + EXPECT_FALSE( + form_manager_->ProvisionallySave(malformed_form, &driver_, false)); // Destroy the form manager to destroy the UKM recorder it owns. The recorder // only records metrics in its destructor. @@ -1478,7 +1498,8 @@ TEST_F(NewPasswordFormManagerTest, GeneratedPasswordWhichIsNotInFormData) { EXPECT_CALL(form_saver, Save(_, _, _)).WillOnce(SaveArg<0>(&saved_form)); EXPECT_CALL(client_, UpdateFormManagers()); - EXPECT_TRUE(form_manager_->ProvisionallySave(submitted_form_, &driver_)); + EXPECT_TRUE( + form_manager_->ProvisionallySave(submitted_form_, &driver_, false)); form_manager_->Save(); EXPECT_EQ(submitted_form_.fields[kUsernameFieldIndex].value, @@ -1712,7 +1733,8 @@ TEST_F(NewPasswordFormManagerTest, Update) { submitted_form.fields[kUsernameFieldIndex].value = username; submitted_form.fields[kPasswordFieldIndex].value = new_password; - EXPECT_TRUE(form_manager_->ProvisionallySave(submitted_form, &driver_)); + EXPECT_TRUE( + form_manager_->ProvisionallySave(submitted_form, &driver_, false)); MockFormSaver& form_saver = MockFormSaver::Get(form_manager_.get()); PasswordForm updated_form; @@ -1756,7 +1778,7 @@ TEST_F(NewPasswordFormManagerTest, MAYBE_FillingAssistanceMetric) { base::HistogramTester histogram_tester; // Simulate successful submission. - form_manager_->ProvisionallySave(submitted_form_, &driver_); + form_manager_->ProvisionallySave(submitted_form_, &driver_, false); form_manager_->GetMetricsRecorder()->LogSubmitPassed(); form_manager_.reset(); @@ -1773,7 +1795,8 @@ TEST_F(NewPasswordFormManagerTest, PasswordRevealedVote) { CreateFormManager(observed_form_); fetcher_->NotifyFetchCompleted(); - EXPECT_TRUE(form_manager_->ProvisionallySave(submitted_form_, &driver_)); + EXPECT_TRUE( + form_manager_->ProvisionallySave(submitted_form_, &driver_, false)); if (password_revealed) form_manager_->OnPasswordsRevealed(); @@ -1800,7 +1823,8 @@ TEST_F(NewPasswordFormManagerTest, GenerationUploadOnNoInteraction) { form_manager_->SetGenerationPopupWasShown( true /*generation_popup_was_shown*/, false /*is_manual_generation*/); } - EXPECT_TRUE(form_manager_->ProvisionallySave(submitted_form_, &driver_)); + EXPECT_TRUE( + form_manager_->ProvisionallySave(submitted_form_, &driver_, false)); EXPECT_CALL( mock_autofill_download_manager_, @@ -1825,7 +1849,8 @@ TEST_F(NewPasswordFormManagerTest, GenerationUploadOnNeverClicked) { form_manager_->SetGenerationPopupWasShown( true /*generation_popup_was_shown*/, false /*is_manual_generation*/); } - EXPECT_TRUE(form_manager_->ProvisionallySave(submitted_form_, &driver_)); + EXPECT_TRUE( + form_manager_->ProvisionallySave(submitted_form_, &driver_, false)); EXPECT_CALL( mock_autofill_download_manager_, diff --git a/chromium/components/password_manager/core/browser/password_manager.cc b/chromium/components/password_manager/core/browser/password_manager.cc index a77b739a3bf..440ac2bac59 100644 --- a/chromium/components/password_manager/core/browser/password_manager.cc +++ b/chromium/components/password_manager/core/browser/password_manager.cc @@ -645,7 +645,8 @@ void PasswordManager::OnPasswordFormSubmitted( password_manager::PasswordManagerDriver* driver, const PasswordForm& password_form) { if (IsNewFormParsingForSavingEnabled()) - ProvisionallySaveForm(password_form.form_data, driver); + ProvisionallySaveForm(password_form.form_data, driver, + password_form.is_gaia_with_skip_save_password_form); ProvisionallySavePassword(password_form, driver); } @@ -681,7 +682,8 @@ void PasswordManager::OnPasswordFormSubmittedNoChecks( } if (IsNewFormParsingForSavingEnabled()) - ProvisionallySaveForm(password_form.form_data, driver); + ProvisionallySaveForm(password_form.form_data, driver, + password_form.is_gaia_with_skip_save_password_form); ProvisionallySavePassword(password_form, driver); @@ -702,7 +704,8 @@ void PasswordManager::ShowManualFallbackForSaving( std::unique_ptr<PasswordFormManagerInterface> manager = nullptr; if (IsNewFormParsingForSavingEnabled()) { NewPasswordFormManager* matched_manager = - ProvisionallySaveForm(password_form.form_data, driver); + ProvisionallySaveForm(password_form.form_data, driver, + password_form.is_gaia_with_skip_save_password_form); manager = matched_manager ? matched_manager->Clone() : nullptr; } else { manager = FindAndCloneMatchedPasswordFormManager( @@ -913,7 +916,8 @@ NewPasswordFormManager* PasswordManager::CreateFormManager( NewPasswordFormManager* PasswordManager::ProvisionallySaveForm( const FormData& submitted_form, - PasswordManagerDriver* driver) { + PasswordManagerDriver* driver, + bool is_gaia_with_skip_save_password_form) { std::unique_ptr<BrowserSavePasswordProgressLogger> logger; if (password_manager_util::IsLoggingActive(client_)) { logger.reset( @@ -963,7 +967,8 @@ NewPasswordFormManager* PasswordManager::ProvisionallySaveForm( matched_manager = CreateFormManager(driver, submitted_form); } - if (!matched_manager->ProvisionallySave(submitted_form, driver)) + if (!matched_manager->ProvisionallySave(submitted_form, driver, + is_gaia_with_skip_save_password_form)) return nullptr; // Set all other form managers to no submission state. @@ -1153,8 +1158,14 @@ void PasswordManager::OnPasswordFormsRendered( visible_forms.begin(), visible_forms.end()); - if (!did_stop_loading) + if (!did_stop_loading && !submitted_manager->GetSubmittedForm() + ->is_gaia_with_skip_save_password_form) { + // |is_gaia_with_skip_save_password_form| = true means that this is a Chrome + // sign-in page. Chrome sign-in pages are redirected to an empty pages, and + // for some reasons |did_stop_loading| might be false. So |did_stop_loading| + // is ignored for them. return; + } // If we see the login form again, then the login failed. if (submitted_manager->GetPendingCredentials().scheme == diff --git a/chromium/components/password_manager/core/browser/password_manager.h b/chromium/components/password_manager/core/browser/password_manager.h index 5f224ba242a..9baadb441de 100644 --- a/chromium/components/password_manager/core/browser/password_manager.h +++ b/chromium/components/password_manager/core/browser/password_manager.h @@ -278,10 +278,16 @@ class PasswordManager : public LoginModel, public FormSubmissionObserver { // the match. If the function is called multiple times, only the form from the // last call is provisionally saved. Multiple calls is possible because it is // called on any user keystroke. If there is no NewPasswordFormManager that - // manages |form|, the new one is created. - // Returns manager which manages |form|. - NewPasswordFormManager* ProvisionallySaveForm(const autofill::FormData& form, - PasswordManagerDriver* driver); + // manages |form|, the new one is created. Returns manager which manages + // |form|. + // |is_gaia_with_skip_save_password_form| is true iff this is Gaia form which + // should be skipped on saving. + // TODO(https://crbug.com/949519): move |is_gaia_with_skip_save_password_form| + // from PasswordForm to FormData, and remove it from arguments. + NewPasswordFormManager* ProvisionallySaveForm( + const autofill::FormData& form, + PasswordManagerDriver* driver, + bool is_gaia_with_skip_save_password_form); // Passes |form| to NewPasswordFormManager that manages it for using it after // detecting submission success for saving. diff --git a/chromium/components/password_manager/core/browser/password_manager_unittest.cc b/chromium/components/password_manager/core/browser/password_manager_unittest.cc index a9b6663d2d5..c3fde14f3d0 100644 --- a/chromium/components/password_manager/core/browser/password_manager_unittest.cc +++ b/chromium/components/password_manager/core/browser/password_manager_unittest.cc @@ -320,6 +320,7 @@ class PasswordManagerTest : public testing::Test { PasswordForm MakeSimpleGAIAForm() { PasswordForm form = MakeSimpleForm(); form.origin = GURL("https://accounts.google.com"); + form.form_data.url = form.origin; form.signon_realm = form.origin.spec(); return form; } @@ -1263,31 +1264,53 @@ TEST_F(PasswordManagerTest, SyncCredentialsNotSaved) { #if defined(SYNC_PASSWORD_REUSE_DETECTION_ENABLED) TEST_F(PasswordManagerTest, HashSavedOnGaiaFormWithSkipSavePassword) { - std::vector<PasswordForm> observed; - PasswordForm form(MakeSimpleGAIAForm()); - // Simulate that this is Gaia form that should be ignored for saving/filling. - form.is_gaia_with_skip_save_password_form = true; - observed.push_back(form); - EXPECT_CALL(client_, IsSavingAndFillingEnabled(form.origin)) - .WillRepeatedly(Return(true)); - manager()->OnPasswordFormsParsed(&driver_, observed); - manager()->OnPasswordFormsRendered(&driver_, observed, true); + for (bool did_stop_loading : {false, true}) { + for (bool only_new_parser : {false, true}) { + SCOPED_TRACE(testing::Message("did_stop_loading = ") + << did_stop_loading + << testing::Message(" only_new_parser = ") + << only_new_parser); + base::test::ScopedFeatureList scoped_feature_list; + if (only_new_parser) { + TurnOnOnlyNewPassword(&scoped_feature_list); + EXPECT_CALL(*store_, GetLogins(_, _)) + .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); + } else { + TurnOnNewParsingForFilling(&scoped_feature_list, true); + } - ON_CALL(*client_.GetStoreResultFilter(), ShouldSaveGaiaPasswordHash(_)) - .WillByDefault(Return(true)); - ON_CALL(*client_.GetStoreResultFilter(), ShouldSave(_)) - .WillByDefault(Return(false)); - ON_CALL(*client_.GetStoreResultFilter(), IsSyncAccountEmail(_)) - .WillByDefault(Return(true)); + std::vector<PasswordForm> observed; + PasswordForm form(MakeSimpleGAIAForm()); + // Simulate that this is Gaia form that should be ignored for + // saving/filling. + form.is_gaia_with_skip_save_password_form = true; + observed.push_back(form); + EXPECT_CALL(client_, IsSavingAndFillingEnabled(form.origin)) + .WillRepeatedly(Return(true)); + manager()->OnPasswordFormsParsed(&driver_, observed); + manager()->OnPasswordFormsRendered(&driver_, observed, true); - EXPECT_CALL(*store_, - SaveGaiaPasswordHash( - "googleuser", form.password_value, - metrics_util::SyncPasswordHashChange::SAVED_IN_CONTENT_AREA)); + ON_CALL(*client_.GetStoreResultFilter(), ShouldSaveGaiaPasswordHash(_)) + .WillByDefault(Return(true)); + ON_CALL(*client_.GetStoreResultFilter(), ShouldSave(_)) + .WillByDefault(Return(false)); + ON_CALL(*client_.GetStoreResultFilter(), IsSyncAccountEmail(_)) + .WillByDefault(Return(true)); - OnPasswordFormSubmitted(form); - observed.clear(); - manager()->OnPasswordFormsRendered(&driver_, observed, true); + EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)).Times(0); + EXPECT_CALL( + *store_, + SaveGaiaPasswordHash( + "googleuser", form.password_value, + metrics_util::SyncPasswordHashChange::SAVED_IN_CONTENT_AREA)); + + OnPasswordFormSubmitted(form); + observed.clear(); + manager()->OnPasswordFormsRendered(&driver_, observed, did_stop_loading); + testing::Mock::VerifyAndClearExpectations(&client_); + testing::Mock::VerifyAndClearExpectations(&store_); + } + } } #endif diff --git a/chromium/components/signin/core/browser/consistency_cookie_manager_base.cc b/chromium/components/signin/core/browser/consistency_cookie_manager_base.cc index 502127b6ee8..c428f6e06c0 100644 --- a/chromium/components/signin/core/browser/consistency_cookie_manager_base.cc +++ b/chromium/components/signin/core/browser/consistency_cookie_manager_base.cc @@ -67,11 +67,10 @@ void ConsistencyCookieManagerBase::UpdateCookie() { base::Time now = base::Time::Now(); base::Time expiry = now + base::TimeDelta::FromDays(2 * 365); // Two years. net::CanonicalCookie cookie( - kCookieName, cookie_value, - "." + GaiaUrls::GetInstance()->gaia_url().host(), /*path=*/"/", - /*creation=*/now, /*expiration=*/expiry, /*last_access=*/now, - /*secure=*/true, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION, - net::COOKIE_PRIORITY_DEFAULT); + kCookieName, cookie_value, GaiaUrls::GetInstance()->gaia_url().host(), + /*path=*/"/", /*creation=*/now, /*expiration=*/expiry, + /*last_access=*/now, /*secure=*/true, /*httponly=*/false, + net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_DEFAULT); cookie_manager->SetCanonicalCookie( cookie, "https", net::CookieOptions(), network::mojom::CookieManager::SetCanonicalCookieCallback()); diff --git a/chromium/components/signin/core/browser/gaia_cookie_manager_service.cc b/chromium/components/signin/core/browser/gaia_cookie_manager_service.cc index ff0011bad89..7a576c1c6cb 100644 --- a/chromium/components/signin/core/browser/gaia_cookie_manager_service.cc +++ b/chromium/components/signin/core/browser/gaia_cookie_manager_service.cc @@ -261,9 +261,11 @@ GaiaCookieManagerService::ExternalCcResultFetcher::GetExternalCcResult() { return base::JoinString(results, ","); } -void GaiaCookieManagerService::ExternalCcResultFetcher::Start() { +void GaiaCookieManagerService::ExternalCcResultFetcher::Start( + base::OnceClosure callback) { DCHECK(!helper_->external_cc_result_fetched_); m_external_cc_result_start_time_ = base::Time::Now(); + callback_ = std::move(callback); CleanupTransientState(); results_.clear(); @@ -453,11 +455,7 @@ void GaiaCookieManagerService::ExternalCcResultFetcher:: time_to_check_connections); helper_->external_cc_result_fetched_ = true; - // Since the ExternalCCResultFetcher is only Started in place of calling - // StartFetchingMergeSession, we can assume we need to call - // StartFetchingMergeSession. If this assumption becomes invalid, a Callback - // will need to be passed to Start() and Run() here. - helper_->StartFetchingMergeSession(); + std::move(callback_).Run(); } GaiaCookieManagerService::GaiaCookieManagerService( @@ -808,7 +806,9 @@ void GaiaCookieManagerService::OnUbertokenFetchComplete( if (!external_cc_result_fetched_ && !external_cc_result_fetcher_.IsRunning()) { - external_cc_result_fetcher_.Start(); + external_cc_result_fetcher_.Start( + base::BindOnce(&GaiaCookieManagerService::StartFetchingMergeSession, + weak_ptr_factory_.GetWeakPtr())); return; } @@ -1064,6 +1064,15 @@ void GaiaCookieManagerService::StartFetchingAccessTokensForMultilogin() { DCHECK_EQ(SET_ACCOUNTS, requests_.front().request_type()); VLOG(1) << "GaiaCookieManagerService::StartFetchingAccessToken account_id =" << base::JoinString(requests_.front().account_ids(), " "); + + if (!external_cc_result_fetched_ && + !external_cc_result_fetcher_.IsRunning()) { + external_cc_result_fetcher_.Start(base::BindOnce( + &GaiaCookieManagerService::StartFetchingAccessTokensForMultilogin, + weak_ptr_factory_.GetWeakPtr())); + return; + } + token_requests_.clear(); access_tokens_.clear(); for (const std::string& account_id : requests_.front().account_ids()) { @@ -1091,10 +1100,12 @@ void GaiaCookieManagerService::StartFetchingUbertoken() { void GaiaCookieManagerService::StartFetchingMultiLogin( const std::vector<GaiaAuthFetcher::MultiloginTokenIDPair>& accounts) { + DCHECK(external_cc_result_fetched_); gaia_auth_fetcher_ = signin_client_->CreateGaiaAuthFetcher( this, requests_.front().source(), GetURLLoaderFactory()); - gaia_auth_fetcher_->StartOAuthMultilogin(accounts); + gaia_auth_fetcher_->StartOAuthMultilogin( + accounts, external_cc_result_fetcher_.GetExternalCcResult()); } void GaiaCookieManagerService::StartFetchingMergeSession() { @@ -1118,7 +1129,15 @@ void GaiaCookieManagerService::StartFetchingLogOut() { RecordLogoutRequestState(LogoutRequestState::kStarted); gaia_auth_fetcher_ = signin_client_->CreateGaiaAuthFetcher( this, requests_.front().source(), GetURLLoaderFactory()); - gaia_auth_fetcher_->StartLogOut(); + bool use_continue_url = false; +#if defined(OS_ANDROID) + use_continue_url = base::FeatureList::IsEnabled(signin::kMiceFeature); +#endif + if (use_continue_url) { + gaia_auth_fetcher_->StartLogOutWithBlankContinueURL(); + } else { + gaia_auth_fetcher_->StartLogOut(); + } } void GaiaCookieManagerService::StartFetchingListAccounts() { diff --git a/chromium/components/signin/core/browser/gaia_cookie_manager_service.h b/chromium/components/signin/core/browser/gaia_cookie_manager_service.h index 854d00a6413..8073b55d947 100644 --- a/chromium/components/signin/core/browser/gaia_cookie_manager_service.h +++ b/chromium/components/signin/core/browser/gaia_cookie_manager_service.h @@ -184,7 +184,7 @@ class GaiaCookieManagerService : public GaiaAuthConsumer, // Start fetching the external CC result. If a fetch is already in progress // it is canceled. - void Start(); + void Start(base::OnceClosure callback); // Are external URLs still being checked? bool IsRunning(); @@ -221,6 +221,7 @@ class GaiaCookieManagerService : public GaiaAuthConsumer, LoaderToToken loaders_; ResultMap results_; base::Time m_external_cc_result_start_time_; + base::OnceClosure callback_; DISALLOW_COPY_AND_ASSIGN(ExternalCcResultFetcher); }; diff --git a/chromium/components/signin/core/browser/gaia_cookie_manager_service_unittest.cc b/chromium/components/signin/core/browser/gaia_cookie_manager_service_unittest.cc index 04b96f426dc..2b71d6111db 100644 --- a/chromium/components/signin/core/browser/gaia_cookie_manager_service_unittest.cc +++ b/chromium/components/signin/core/browser/gaia_cookie_manager_service_unittest.cc @@ -1372,7 +1372,9 @@ TEST_F(GaiaCookieManagerServiceTest, ExternalCcResultFetcher) { InstrumentedGaiaCookieManagerService helper(token_service(), signin_client()); GaiaCookieManagerService::ExternalCcResultFetcher result_fetcher(&helper); EXPECT_CALL(helper, StartFetchingMergeSession()); - result_fetcher.Start(); + result_fetcher.Start(base::BindOnce( + &InstrumentedGaiaCookieManagerService::StartFetchingMergeSession, + base::Unretained(&helper))); // Simulate a successful completion of GetCheckConnctionInfo. SimulateGetCheckConnectionInfoSuccess( @@ -1397,7 +1399,9 @@ TEST_F(GaiaCookieManagerServiceTest, ExternalCcResultFetcherTimeout) { InstrumentedGaiaCookieManagerService helper(token_service(), signin_client()); GaiaCookieManagerService::ExternalCcResultFetcher result_fetcher(&helper); EXPECT_CALL(helper, StartFetchingMergeSession()); - result_fetcher.Start(); + result_fetcher.Start(base::BindOnce( + &InstrumentedGaiaCookieManagerService::StartFetchingMergeSession, + base::Unretained(&helper))); // Simulate a successful completion of GetCheckConnctionInfo. SimulateGetCheckConnectionInfoSuccess( @@ -1426,7 +1430,9 @@ TEST_F(GaiaCookieManagerServiceTest, ExternalCcResultFetcherTruncate) { InstrumentedGaiaCookieManagerService helper(token_service(), signin_client()); GaiaCookieManagerService::ExternalCcResultFetcher result_fetcher(&helper); EXPECT_CALL(helper, StartFetchingMergeSession()); - result_fetcher.Start(); + result_fetcher.Start(base::BindOnce( + &InstrumentedGaiaCookieManagerService::StartFetchingMergeSession, + base::Unretained(&helper))); // Simulate a successful completion of GetCheckConnctionInfo. SimulateGetCheckConnectionInfoSuccess( @@ -1468,7 +1474,9 @@ TEST_F(GaiaCookieManagerServiceTest, UbertokenSuccessFetchesExternalCC) { TEST_F(GaiaCookieManagerServiceTest, UbertokenSuccessFetchesExternalCCOnce) { InstrumentedGaiaCookieManagerService helper(token_service(), signin_client()); - helper.external_cc_result_fetcher_for_testing()->Start(); + helper.external_cc_result_fetcher_for_testing()->Start(base::BindOnce( + &InstrumentedGaiaCookieManagerService::StartFetchingMergeSession, + base::Unretained(&helper))); EXPECT_CALL(helper, StartFetchingUbertoken()); helper.AddAccountToCookie( diff --git a/chromium/components/strings/components_strings_am.xtb b/chromium/components/strings/components_strings_am.xtb index cfbbcdd31a1..f02f341b76e 100644 --- a/chromium/components/strings/components_strings_am.xtb +++ b/chromium/components/strings/components_strings_am.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="am"> -<translation id="1001338328714563407">የእርስዎ መሣሪያ እና መለያ አስተዳዳሪ እንደመሆንዎ መጠን <ph name="ENROLLMENT_DOMAIN" />፦</translation> <translation id="1008557486741366299">አሁን አይደለም</translation> <translation id="1010200102790553230">በኋላ ላይ ገጽ ጫን</translation> <translation id="1015730422737071372">ተጨማሪ ዝርዝሮችን ያቅርቡ</translation> @@ -367,7 +366,6 @@ <translation id="2948083400971632585">ከቅንብሮች ገጽ ሆነው ማናቸውንም ለግንኙነት የተዋቀሩ ተኪዎችን ማሰናከል ይችላሉ።</translation> <translation id="2955913368246107853">አግኝ አሞሌን ዝጋ</translation> <translation id="2969319727213777354">ደህንነቱ የተጠበቀ ግንኙነት ለመመስረት የእርስዎ ሰዓት በትክክል መዋቀር አለበት። ይሄ የሆነበት ምክንያት ድር ጣቢያዎች ራሳቸውን ለማሳወቅ የሚጠቀሙባቸው የእውቅና ማረጋገጫዎች የሚሰሩት ለተወሰኑ ጊዜዎች ብቻ ስለሆነ ነው። የእርስዎ መሣሪያ ሰዓት ትክክል እንዳለመሆኑ መጠን Google Chrome እነዚህን የእውቅና ማረጋገጫዎች ሊያረጋግጥ አይችልም።</translation> -<translation id="2970515157925768593">የእርስዎን መሣሪያ እና የመለያ ውቅረት በርቀት መቀየር ይችላሉ።</translation> <translation id="2972581237482394796">&ድገም</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />፣ አሁን ላይ ተመርጧል። <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">ውሂብን አጽዳ</translation> @@ -379,7 +377,6 @@ <translation id="3005723025932146533">የተቀመጠ ቅጂ አሳይ</translation> <translation id="3008447029300691911">የ<ph name="CREDIT_CARD" /> ሲቪሲ ያስገቡ። አንዴ ካረጋገጡ በኋላ የካርድ ዝርዝሮችዎ ለዚህ ጣቢያ ይጋራሉ።</translation> <translation id="3010559122411665027">የዝርዝር ግቤት «<ph name="ENTRY_INDEX" />»፦ <ph name="ERROR" /></translation> -<translation id="3014389611820813634">የዚህ መሣሪያ አስተዳዳሪ እንደመሆንዎ መጠን <ph name="ENROLLMENT_DOMAIN" />፦</translation> <translation id="301521992641321250">በራስ-ሰር ታግዷል</translation> <translation id="3023071826883856138">You4 (የደብዳቤ ፖስታ)</translation> <translation id="3024663005179499861">የተሳሳተ የመምሪያ አይነት</translation> @@ -424,7 +421,6 @@ <translation id="3287510313208355388">መስመር ላይ ሲሆኑ ያውርዱ</translation> <translation id="3293642807462928945">ስለ<ph name="POLICY_NAME" /> መመሪያው ተጨማሪ ይወቁ</translation> <translation id="3303855915957856445">ምንም የፍለጋ ውጤቶች አልተገኙም</translation> -<translation id="3311730110465560799">የመሣሪያ ውቅረትዎን በርቀት ማዋቀር ይችላል።</translation> <translation id="3320021301628644560">የመክፈያ አድራሻ አክል</translation> <translation id="3324983252691184275">ክሪምሶን</translation> <translation id="3338095232262050444">ደህንነቱ የተጠበቀ ነው</translation> @@ -519,7 +515,6 @@ <translation id="3761718714832595332">ሁኔታን ደብቅ</translation> <translation id="3765032636089507299">የSafe Browsing ገጽ በግንባታ ላይ ነው።</translation> <translation id="3778403066972421603">ይህን ካርድ በእርስዎ የGoogle መለያ እና በዚህ መሣሪያ ላይ ማስቀመጥ ይፈልጋሉ?</translation> -<translation id="3779973883630527594">ይህን መለያ የሚያስተዳድረው ኩባንያ፣ ትምህርት ቤት ወይም ድርጅት፦</translation> <translation id="3781428340399460090">ደመቅ ያለ ሮዝ</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">በ<ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /> ላይ የአገልግሎት ጊዜው ያበቃል</translation> @@ -719,7 +714,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> እንዲህ ይላል፦</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">ውጤቶች የሉም</translation> -<translation id="4945672369594656571">የእርስዎ የመሣሪያ እና የመለያ ውሂብ እንዴት እንደሚያዝ ቁጥጥር ይደረግበታል። Google የእርስዎን የመሣሪያ እና የመለያ ውሂብ በእርስዎ የመሣሪያ እና የመለያ አስተዳዳሪ አመራር ስር እና በእርስዎ መሣሪያ እና መለያ አስተዳዳሪ ለተገለጹት ዓላማዎች ብቻ ያስሄዳል።</translation> <translation id="4950898438188848926">የትር መቀየሪያ አዝራር፣ ወደ ክፍቱ ትር <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /> ለመቀየር Enterን ይጫኑ</translation> <translation id="495170559598752135">እርምጃዎች</translation> <translation id="4955242332710481440">A5-ተጨማሪ</translation> @@ -733,7 +727,6 @@ <translation id="5017554619425969104">እርስዎ የቀዱት ጽሑፍ</translation> <translation id="5018422839182700155">ይህን ገጽ መክፈት አልተቻለም</translation> <translation id="5019198164206649151">የመጠባበቂያ ማከማቻ በመጥፎ ሁኔታ ላይ</translation> -<translation id="5020154601324912079">የመሣሪያዎ ውሂብ እንዴት እንደሚያዝ ይቆጣጠራል። Google የመሣሪያዎን ውሂብ በመሣሪያዎ አስተዳዳሪ አመራር ስር እና በመሣሪያዎ አስተዳዳሪ ለተገለጹት ዓላማዎች ብቻ ያስሄዳል።</translation> <translation id="5023310440958281426">የአስተዳዳሪዎ መመሪያዎችን ያረጋግጡ</translation> <translation id="5029568752722684782">ቅጂን አጽዳ</translation> <translation id="503069730517007720">ለ«<ph name="SOFTWARE_NAME" />» ስር እውቅና ማረጋገጫ ያስፈልጋል፣ ነገር ግን አልተጫነም። የእርስዎ አይቲ አስተዳዳሪ ይህን ችግር ለመፍታት የ«<ph name="SOFTWARE_NAME" />» ውቅረት መመሪያዎችን መመልከት አለበት። <ph name="FURTHER_EXPLANATION" /></translation> @@ -891,7 +884,6 @@ <translation id="5838278095973806738">በአጥቂዎች ሊሰረቅ ስለሚችል በዚህ ጣቢያ ላይ ማናቸውም አደጋን ሊያስከትል የሚችል መረጃ (ለምሳሌ፦ የይለፍ ቃሎች ወይም የክሬዲት ካርዶች) ማስገባት የለብዎትም።</translation> <translation id="5860033963881614850">አጥፋ</translation> <translation id="5863847714970149516">ከፊት ያለው ገጽ እርስዎን ገንዘብ ለማስከፈል ሊሞክር ይችላል</translation> -<translation id="5865951947699094510">የመለያዎን ውቅረት በርቀት መቀየር ይችላሉ።</translation> <translation id="5866257070973731571">ስልክ ቁጥር ያክሉ</translation> <translation id="5869405914158311789">ይህ ጣቢያ ሊደረስበት አይችልም</translation> <translation id="5869522115854928033">የተቀመጡ የይለፍ ቃሎች</translation> @@ -1159,7 +1151,6 @@ <translation id="741007362987735528">ሰፊ-ቅርጸት</translation> <translation id="7416351320495623771">የይለፍ ቃላትን ያስተዳድሩ...</translation> <translation id="7419106976560586862">የመገለጫ ዱካ</translation> -<translation id="7424427397225027541">የመለያዎ ውሂብ እንዴት እንደሚያዝ ይቆጣጠራል። Google የእርስዎን የመለያ ውሂብ በእርስዎ የመለያ አስተዳዳሪ አመራር ስር እና በእርስዎ መለያ አስተዳዳሪ ለተገለጹት ዓላማዎች ብቻ ያስሄዳል።</translation> <translation id="7437289804838430631">የእውቂያ መረጃ አክል</translation> <translation id="7440140511386898319">ከመስመር ውጪ ሆነው ሳለ ያስሱ</translation> <translation id="7441627299479586546">የተሳሳተ የመምሪያ ርዕሰ ጉዳይ</translation> @@ -1245,7 +1236,6 @@ <translation id="780301667611848630">አይ፣ አመሰግናለሁ</translation> <translation id="7805768142964895445">ሁኔታ</translation> <translation id="7806344367022510803">በChrome ውስጥ የፍለጋ ፕሮግራም ቅንብሮችን ይቀይሩ</translation> -<translation id="7810209002420871817">የመለያዎ <ph name="ACCOUNT_DOMAIN" /> አስተዳዳሪ እንደመሆንዎ መጠን፦</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">የአስተያየት ጥቆማ ከChrome ይወገድ?</translation> <translation id="7815407501681723534">ለ«<ph name="SEARCH_STRING" />» <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> ተገኝተዋል።</translation> diff --git a/chromium/components/strings/components_strings_ar.xtb b/chromium/components/strings/components_strings_ar.xtb index 91daa275898..e787a904b22 100644 --- a/chromium/components/strings/components_strings_ar.xtb +++ b/chromium/components/strings/components_strings_ar.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ar"> -<translation id="1001338328714563407">يمكن لنطاق التسجيل <ph name="ENROLLMENT_DOMAIN" /> بصفته مدير هذا الجهاز والحساب:</translation> <translation id="1008557486741366299">ليس الآن</translation> <translation id="1010200102790553230">تحميل الصفحة لاحقًا</translation> <translation id="1015730422737071372">تقديم تفاصيل إضافية</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">يمكنك إيقاف أي خوادم وكيلة تمت تهيئتها لاتصال من صفحة الإعدادات.</translation> <translation id="2955913368246107853">إغلاق شريط البحث</translation> <translation id="2969319727213777354">لإنشاء اتصال آمن، فإنك بحاجة إلى ضبط ساعتك بشكل صحيح. وذلك لأن الشهادات التي تستخدمها مواقع الويب لتعريف نفسها تكون صالحة فقط لفترات محددة من الوقت. فإذا كانت ساعة جهازك غير صحيحة، فلن يتمكن Google Chrome من التحقق من هذه الشهادات.</translation> -<translation id="2970515157925768593">تغيير إعداد الجهاز والحساب عن بُعد.</translation> <translation id="2972581237482394796">إعا&دة</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />، تم تحديده حاليًا. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">محو البيانات</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">عرض نسخة محفوظة</translation> <translation id="3008447029300691911">أدخل رمز التحقق من البطاقة (CVC) لـ <ph name="CREDIT_CARD" />. بعد تأكيدك، ستتم مشاركة تفاصيل بطاقتك مع هذا الموقع.</translation> <translation id="3010559122411665027">إدخال القائمة "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">يمكن لنطاق التسجيل <ph name="ENROLLMENT_DOMAIN" /> بصفته مدير هذا الجهاز:</translation> <translation id="301521992641321250">تم الحظر تلقائيًا</translation> <translation id="3023071826883856138">You4 (مغلف)</translation> <translation id="3024663005179499861">نوع السياسة غير صحيح</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">التنزيل عند الاتصال بالإنترنت</translation> <translation id="3293642807462928945">مزيد من المعلومات عن سياسة <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">لم يتم العثور على أي نتائج بحث</translation> -<translation id="3311730110465560799">تغيير إعداد الجهاز عن بُعد.</translation> <translation id="3320021301628644560">إضافة عنوان إرسال الفواتير</translation> <translation id="3324983252691184275">قرمزي</translation> <translation id="3338095232262050444">آمن</translation> @@ -526,7 +522,6 @@ <translation id="3761718714832595332">إخفاء الحالة</translation> <translation id="3765032636089507299">صفحة التصفح الآمن تحت الإنشاء.</translation> <translation id="3778403066972421603">هل تريد حفظ هذه البطاقة في حسابك في Google وعلى هذا الجهاز؟</translation> -<translation id="3779973883630527594">الشركة أو المؤسسة التعليمية أو المؤسسة التي تدير هذا الحساب:</translation> <translation id="3781428340399460090">وردي برّاق</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">تنتهي في <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -726,7 +721,6 @@ <translation id="4926159001844873046">يعرض موقع <ph name="SITE" /></translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">لا نتائج</translation> -<translation id="4945672369594656571">التحكّم في كيفية التعامل مع الجهاز وبيانات الحساب. ستعالج Google بيانات جهازك وحسابك حصريًا تحت إدارة مدير الحساب والجهاز ولتلبية الأغراض التي يحدّدها فقط.</translation> <translation id="4950898438188848926">زر التبديل بين علامات التبويب، اضغط على Enter للتبديل إلى علامة التبويب المفتوحة هذه <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">إجراءات</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -740,7 +734,6 @@ <translation id="5017554619425969104">النص الذي نسخته</translation> <translation id="5018422839182700155">يتعذّر فتح هذه الصفحة</translation> <translation id="5019198164206649151">التخزين المساعد في حالة سيئة</translation> -<translation id="5020154601324912079">التحكّم في كيفية التعامل مع بيانات الجهاز. ستعالج Google بيانات جهازك حصريًا تحت إدارة مدير الجهاز ولتلبية الأغراض المُحدّدة فقط من قبل مدير الجهاز.</translation> <translation id="5023310440958281426">التحقق من سياسات المشرف</translation> <translation id="5029568752722684782">محو النسخة</translation> <translation id="503069730517007720">يلزم شهادة جذر لـ "<ph name="SOFTWARE_NAME" />" ولكن لم يتم تثبيتها. ينبغي على مشرف تقنية المعلومات أن يلقي نظرة على تعليمات التهيئة لـ "<ph name="SOFTWARE_NAME" />" لإصلاح تلك المشكلة. <ph name="FURTHER_EXPLANATION" /></translation> @@ -898,7 +891,6 @@ <translation id="5838278095973806738">يجب عدم إدخال معلومات حسّاسة على هذا الموقع (مثل كلمات المرور أو بطاقات الائتمان) لأنه قد تتم سرقتها من قِبل المهاجمين.</translation> <translation id="5860033963881614850">غير مفعّل</translation> <translation id="5863847714970149516">قد تحاول الصفحة التالية تحصيل رسوم منك</translation> -<translation id="5865951947699094510">يمكن تغيير إعداد الحساب عن بُعد.</translation> <translation id="5866257070973731571">إضافة رقم الهاتف</translation> <translation id="5869405914158311789">لا يمكن الوصول إلى موقع الويب هذا</translation> <translation id="5869522115854928033">كلمات المرور المحفوظة</translation> @@ -1169,7 +1161,6 @@ <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">إدارة كلمات المرور…</translation> <translation id="7419106976560586862">مسار الملف الشخصي</translation> -<translation id="7424427397225027541">التحكم في كيفية التعامل مع بيانات الحساب. ستعالج Google بيانات حسابك حصريًا تحت إدارة مدير الحساب ولتلبية الأغراض التي يحدّدها فقط.</translation> <translation id="7437289804838430631">إضافة معلومات الاتصال</translation> <translation id="7440140511386898319">الاستكشاف أثناء عدم الاتصال بالإنترنت</translation> <translation id="7441627299479586546">موضوع السياسة غير صحيح</translation> @@ -1255,7 +1246,6 @@ <translation id="780301667611848630">لا، شكرًا</translation> <translation id="7805768142964895445">الحالة</translation> <translation id="7806344367022510803">تغيير إعدادات محرّك البحث في Chrome</translation> -<translation id="7810209002420871817">يمكن لنطاق الحساب <ph name="ACCOUNT_DOMAIN" /> بصفته مدير الحساب:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">هل تريد إزالة اقتراح النموذج من Chrome؟</translation> <translation id="7815407501681723534">تم العثور على <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> لـ "<ph name="SEARCH_STRING" />"</translation> diff --git a/chromium/components/strings/components_strings_bg.xtb b/chromium/components/strings/components_strings_bg.xtb index 9fc6a8de5d3..956230975ef 100644 --- a/chromium/components/strings/components_strings_bg.xtb +++ b/chromium/components/strings/components_strings_bg.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="bg"> -<translation id="1001338328714563407">Като мениджър на устройството и профила ви <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Не сега</translation> <translation id="1010200102790553230">Зареждане на страницата по-късно</translation> <translation id="1015730422737071372">Въвеждане на допълнителни подробности</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">Можете да деактивирате всички конфигурирани за дадена връзка прокси сървъри от страницата „Настройки“.</translation> <translation id="2955913368246107853">Затваряне на лентата за търсене</translation> <translation id="2969319727213777354">За установяване на сигурна връзка е необходимо часовникът ви да е верен. Това е така, защото сертификатите, с които уебсайтовете се идентифицират, са валидни само за конкретни периоди от време. Тъй като часовникът на устройството ви не е верен, Google Chrome не може да потвърди тези сертификати.</translation> -<translation id="2970515157925768593">Може отдалечено да променя настройките на устройството и профила ви.</translation> <translation id="2972581237482394796">&Възстановяване</translation> <translation id="2977665033722899841">Понастоящем сте избрали реда „<ph name="ROW_NAME" />“. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Изчистване на данните</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">Показване на запазено копие</translation> <translation id="3008447029300691911">Въведете кода за проверка за <ph name="CREDIT_CARD" />. След като потвърдите картата си, данните за нея ще бъдат споделени с този сайт.</translation> <translation id="3010559122411665027">Списъчен запис „<ph name="ENTRY_INDEX" />“: <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Като мениджър на това устройство <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Автоматично блокирано</translation> <translation id="3023071826883856138">You4 (плик)</translation> <translation id="3024663005179499861">Грешен тип на правилото</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">Изтегляне, когато съм онлайн</translation> <translation id="3293642807462928945">Научете повече за правилото <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Няма намерени резултати от търсенето</translation> -<translation id="3311730110465560799">Може отдалечено да променя настройките на устройството ви.</translation> <translation id="3320021301628644560">Добавяне на адреса за фактуриране</translation> <translation id="3324983252691184275">пурпурно</translation> <translation id="3338095232262050444">Има защита</translation> @@ -526,7 +522,6 @@ <translation id="3761718714832595332">Скриване на състоянието</translation> <translation id="3765032636089507299">Страницата на Безопасно сърфиране е в процес на разработка.</translation> <translation id="3778403066972421603">Искате ли тази карта да се запази на устройството и в профила ви в Google?</translation> -<translation id="3779973883630527594">Фирмата, учебното заведение или организацията, които управляват този профил:</translation> <translation id="3781428340399460090">ярко розово</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Изтича на <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -726,7 +721,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> изпраща съобщение</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Няма резултати</translation> -<translation id="4945672369594656571">Контролира обработката на данните от устройството и от профила ви. Google обработва данните от устройството и от профила ви изключително според указанията на мениджъра на устройството и профила ви и единствено за целите, посочени от него.</translation> <translation id="4950898438188848926">Бутон за превключване между раздели. Натиснете Enter, за да преминете към отворения раздел – <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Действия</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -740,7 +734,6 @@ <translation id="5017554619425969104">Копиран от вас текст</translation> <translation id="5018422839182700155">Тази страница не може да се отвори</translation> <translation id="5019198164206649151">Допълнителното хранилище е в лошо състояние</translation> -<translation id="5020154601324912079">Контролира обработката на данните от устройството ви. Google обработва данните от устройството ви изключително според указанията на мениджъра на профила ви и единствено за целите, посочени от него.</translation> <translation id="5023310440958281426">Проверете правилата на администратора</translation> <translation id="5029568752722684782">Изчистване на копието</translation> <translation id="503069730517007720">За <ph name="SOFTWARE_NAME" /> се изисква основен сертификат, но такъв не е инсталиран. Системният ви администратор трябва да прегледа инструкциите за конфигуриране на <ph name="SOFTWARE_NAME" />, за да отстрани проблема. <ph name="FURTHER_EXPLANATION" /></translation> @@ -898,7 +891,6 @@ <translation id="5838278095973806738">Не ви препоръчваме да въвеждате поверителна информация в този сайт (например пароли или номера на кредитни карти), тъй като може да бъде открадната от извършители на атаки.</translation> <translation id="5860033963881614850">Изключено</translation> <translation id="5863847714970149516">На страницата, която искате да посетите, е възможно да ви бъдат удържани средства</translation> -<translation id="5865951947699094510">Може отдалечено да променя настройките на профила ви.</translation> <translation id="5866257070973731571">Добавяне на телефонен номер</translation> <translation id="5869405914158311789">Няма достъп до този сайт</translation> <translation id="5869522115854928033">Запазени пароли</translation> @@ -1169,7 +1161,6 @@ <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Управление на паролите…</translation> <translation id="7419106976560586862">Път на потребителския профил</translation> -<translation id="7424427397225027541">Контролира обработката на данните от профила ви. Google обработва данните от профила ви изключително според указанията на мениджъра на профила ви и единствено за целите, посочени от него.</translation> <translation id="7437289804838430631">Добавяне на информация за връзка</translation> <translation id="7440140511386898319">Разгледайте, докато сте офлайн</translation> <translation id="7441627299479586546">Грешен предмет на правилото</translation> @@ -1255,7 +1246,6 @@ <translation id="780301667611848630">Не, благодаря</translation> <translation id="7805768142964895445">Състояние</translation> <translation id="7806344367022510803">Променете настройките за търсещата машина в Chrome</translation> -<translation id="7810209002420871817">Като мениджър на профила ви <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Предложението за формуляри да се премахне ли от Chrome?</translation> <translation id="7815407501681723534"><ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> за „<ph name="SEARCH_STRING" />“</translation> diff --git a/chromium/components/strings/components_strings_bn.xtb b/chromium/components/strings/components_strings_bn.xtb index cc1cdcafb90..1576192c927 100644 --- a/chromium/components/strings/components_strings_bn.xtb +++ b/chromium/components/strings/components_strings_bn.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="bn"> -<translation id="1001338328714563407">আপনার ডিভাইস ও অ্যাকাউন্টের ম্যানেজার হিসেবে, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">এখনই নয়</translation> <translation id="1010200102790553230">পৃষ্ঠা পরে দেখার জন্য লোড করে রাখুন</translation> <translation id="1015730422737071372">অতিরিক্ত বিবরণ দিন</translation> @@ -374,7 +373,6 @@ <translation id="2948083400971632585">আপনি সেটিংস পৃষ্ঠা থেকে কানেকশনের জন্য কনফিগার করা যেকোনো প্রক্সি নিষ্ক্রিয় করতে পারেন৷</translation> <translation id="2955913368246107853">খোঁজ দণ্ড বন্ধ করুন</translation> <translation id="2969319727213777354">নিরাপদ নেটওয়ার্ক সংযোগ স্থাপন করতে আপনার ঘড়িকে সঠিকভাবে সেট করতে হবে। এমন হওয়ার কারণ হলো, নিরাপদ সংযোগ স্থাপন করার জন্য নিজেদের শনাক্ত করার জন্য ওয়েবসাইটগুলি যে শংসাপত্রগুলি ব্যবহার করে, সেগুলি শুধুমাত্র নির্দিষ্ট সময়ের জন্য বৈধ থাকে। যেহেতু আপনার ডিভাইসের ঘড়িটি ভুল, সেই জন্য Google Chrome সঠিকভাবে শংসাপত্রগুলি পরীক্ষা করতে পারছে না।</translation> -<translation id="2970515157925768593">অন্য জায়গা থেকে আপনার ডিভাইস ও অ্যাকাউন্টের সেট-আপ পরিবর্তন করতে পারে।</translation> <translation id="2972581237482394796">&পুনরায় করুন</translation> <translation id="2977665033722899841">এখন <ph name="ROW_NAME" /> বেছে নিয়েছেন। <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">ডেটা মুছুন</translation> @@ -386,7 +384,6 @@ <translation id="3005723025932146533">সেভ করা কপি দেখুন</translation> <translation id="3008447029300691911"><ph name="CREDIT_CARD" />-এর CVC লিখুন। আপনি নিশ্চিত করলে, আপনার কার্ডের বিবরণ এই সাইটের সাথে শেয়ার করা হবে।</translation> <translation id="3010559122411665027">তালিকার এন্ট্রি " <ph name="ENTRY_INDEX" /> ": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">এই ডিভাইসের ম্যানেজার হিসেবে, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">স্বয়ংক্রিয়ভাবে ব্লক করা হয়েছে</translation> <translation id="3023071826883856138">You4 (Envelope)</translation> <translation id="3024663005179499861">নীতির ভুল প্রকার</translation> @@ -432,7 +429,6 @@ <translation id="3287510313208355388">অনলাইন হয়ে ডাউনলোড করবেন</translation> <translation id="3293642807462928945"><ph name="POLICY_NAME" /> নীতি সম্পর্কে আরও জানুন</translation> <translation id="3303855915957856445">কোনো সার্চ ফলাফল পাওয়া যায়নি</translation> -<translation id="3311730110465560799">অন্য জায়গা থেকে আপনার ডিভাইসের সেট-আপ পরিবর্তন করতে পারে।</translation> <translation id="3320021301628644560">বিলিংয়ের ঠিকানা যোগ করুন</translation> <translation id="3324983252691184275">টকটকে লাল</translation> <translation id="3338095232262050444">সুরক্ষিত</translation> @@ -527,7 +523,6 @@ <translation id="3761718714832595332">স্ট্যাটাসটি লুকান</translation> <translation id="3765032636089507299">নিরাপদ ব্রাউজিং পৃষ্ঠা তৈরি করা হচ্ছে।</translation> <translation id="3778403066972421603">আপনি কি এই কার্ডটি আপনার Google অ্যাকাউন্টে ও এই ডিভাইসে সেভ করতে চান?</translation> -<translation id="3779973883630527594">যে কোম্পানি, স্কুল বা সংস্থা এই অ্যাকাউন্ট ম্যানেজ করে:</translation> <translation id="3781428340399460090">হট গোলাপী</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569"><ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /> এ মেয়াদ শেষ হবে</translation> @@ -727,7 +722,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> এ এটি দেখানো হচ্ছে</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">কোন ফলাফল নেই</translation> -<translation id="4945672369594656571">আপনার ডিভাইস ও অ্যাকাউন্টের ডেটা কীভাবে ব্যবহার করা হয় তা নিয়ন্ত্রণ করে। Google আপনার ডিভাইস ও অ্যাকাউন্টের ডেটা বিশেষভাবে ডিভাইস ও অ্যাকাউন্ট ম্যানেজারের নির্দেশ মেনে এবং শুধু তার উল্লেখ করা উদ্দেশ্যের জন্য প্রসেস করে।</translation> <translation id="4950898438188848926">একটি ট্যাব থেকে অন্য ট্যাবে যাওয়ার বোতাম, খোলা ট্যাবে যেতে এন্টার টিপুন, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">ক্রিয়াসমূহ</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -741,7 +735,6 @@ <translation id="5017554619425969104">আপনার কপি করা টেক্সট</translation> <translation id="5018422839182700155">এই পৃষ্ঠাটি খোলা যাচ্ছে না</translation> <translation id="5019198164206649151">ব্যাকিং স্টোরটি ত্রুটিপূর্ণ অবস্থায় আছে</translation> -<translation id="5020154601324912079">আপনার ডিভাইসের ডেটা কীভাবে ব্যবহার করা হয় তা নিয়ন্ত্রণ করে। Google আপনার ডিভাইসের ডেটা বিশেষভাবে ডিভাইস ম্যানেজারের নির্দেশ মেনে এবং শুধু তার উল্লেখ করা উদ্দেশ্যের জন্য প্রসেস করে।</translation> <translation id="5023310440958281426">আপনার প্রশাসকের নীতিগুলি দেখুন</translation> <translation id="5029568752722684782">কপি সাফ করুন</translation> <translation id="503069730517007720">"<ph name="SOFTWARE_NAME" />" এর জন্য একটি রুট সার্টিফিকেট প্রয়োজন কিন্তু সেটি ইনস্টল করা নেই। এই সমস্যাটি সমাধান করতে আপনার IT প্রশাসককে "<ph name="SOFTWARE_NAME" />" এর কনফিগারেশন নির্দেশ ভাল করে দেখে নিতে হবে। <ph name="FURTHER_EXPLANATION" /></translation> @@ -899,7 +892,6 @@ <translation id="5838278095973806738">এই সাইটে আপনার কোনো সংবেদনশীল তথ্য দেওয়া উচিত হবে না (উদাহরণস্বরূপ, পাসওয়ার্ড বা ক্রেডিট কার্ড) কারণ আক্রমণকারীরা এগুলি চুরি করতে পারে।</translation> <translation id="5860033963881614850">বন্ধ করুন</translation> <translation id="5863847714970149516">পরের পৃষ্ঠাতে আপনাকে চার্জ করা হতে পারে</translation> -<translation id="5865951947699094510">অন্য জায়গা থেকে আপনার অ্যাকাউন্টের সেট-আপ পরিবর্তন করতে পারে।</translation> <translation id="5866257070973731571">ফোন নম্বর যোগ করুন</translation> <translation id="5869405914158311789">এই সাইটটিতে পৌছানো যাচ্ছে না</translation> <translation id="5869522115854928033">সংরক্ষিত পাসওয়ার্ড</translation> @@ -1169,7 +1161,6 @@ <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">পাসওয়ার্ডগুলি পরিচালনা করুন…</translation> <translation id="7419106976560586862">প্রোফাইল পাথ</translation> -<translation id="7424427397225027541">আপনার অ্যাকাউন্টের ডেটা কীভাবে ব্যবহার করা হয় তা নিয়ন্ত্রণ করে। Google আপনার অ্যাকাউন্টের ডেটা বিশেষভাবে অ্যাকাউন্ট ম্যানেজারের নির্দেশ মেনে এবং শুধু তার উল্লেখ করা উদ্দেশ্যের জন্য প্রসেস করে।</translation> <translation id="7437289804838430631">পরিচিতির তথ্য যোগ করুন</translation> <translation id="7440140511386898319">অফলাইন থাকা অবস্থায় দেখুন</translation> <translation id="7441627299479586546">ভুল বিষয় বিশিষ্ট নীতি</translation> @@ -1255,7 +1246,6 @@ <translation id="780301667611848630">না থাক</translation> <translation id="7805768142964895445">স্থিতি</translation> <translation id="7806344367022510803">Chrome-এ সার্চ ইঞ্জিন সেটিংস পরিবর্তন করুন</translation> -<translation id="7810209002420871817">আপনার অ্যাকাউন্টের ম্যানেজার হিসেবে, <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Chrome থেকে ফর্ম প্রস্তাবনা সরাবেন?</translation> <translation id="7815407501681723534">'<ph name="SEARCH_STRING" />' এর জন্য <ph name="NUMBER_OF_RESULTS" />টি <ph name="SEARCH_RESULTS" /> খুঁজে পাওয়া গেছে</translation> diff --git a/chromium/components/strings/components_strings_ca.xtb b/chromium/components/strings/components_strings_ca.xtb index 1c46d5ce8a3..ac7d58defb8 100644 --- a/chromium/components/strings/components_strings_ca.xtb +++ b/chromium/components/strings/components_strings_ca.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ca"> -<translation id="1001338328714563407">Com a gestor del dispositiu i del compte, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Ara no</translation> <translation id="1010200102790553230">Carrega la pàgina més tard</translation> <translation id="1015730422737071372">Proporcioneu més informació</translation> @@ -365,7 +364,6 @@ <translation id="2948083400971632585">Podeu desactivar qualsevol servidor intermediari configurat per a una connexió des de la pàgina de configuració.</translation> <translation id="2955913368246107853">Tanca la barra de cerca</translation> <translation id="2969319727213777354">Per establir una connexió segura, heu de tenir el rellotge ben configurat, ja que els certificats que els llocs web fan servir per identificar-se només són vàlids durant períodes de temps concrets. Com que el rellotge del dispositiu no està ben configurat, Google Chrome no pot verificar aquests certificats.</translation> -<translation id="2970515157925768593">Pot canviar de manera remota la configuració del dispositiu i del compte.</translation> <translation id="2972581237482394796">&Refés</translation> <translation id="2977665033722899841">S'ha seleccionat <ph name="ROW_NAME" />. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Esborra les dades</translation> @@ -377,7 +375,6 @@ <translation id="3005723025932146533">Mostra la còpia desada</translation> <translation id="3008447029300691911">Introdueix el CVC de la targeta <ph name="CREDIT_CARD" />. Un cop confirmada, els detalls de la targeta es compartiran amb aquest lloc.</translation> <translation id="3010559122411665027">Entrada de llista "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Com a gestor d'aquest dispostiu, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Bloquejada automàticament</translation> <translation id="3023071826883856138">You4 (sobre)</translation> <translation id="3024663005179499861">Tipus de política incorrecte</translation> @@ -423,7 +420,6 @@ <translation id="3287510313208355388">Baixa quan estigui en línia</translation> <translation id="3293642807462928945">Més informació sobre la política <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">No s'ha trobat cap resultat de la cerca</translation> -<translation id="3311730110465560799">Pot canviar la configuració del dispositiu de manera remota.</translation> <translation id="3320021301628644560">Afegeix una adreça de facturació</translation> <translation id="3324983252691184275">Carmesí</translation> <translation id="3338095232262050444">Segur</translation> @@ -518,7 +514,6 @@ <translation id="3761718714832595332">Amaga l'estat</translation> <translation id="3765032636089507299">La pàgina Navegació segura està en construcció.</translation> <translation id="3778403066972421603">Vols desar aquesta targeta al teu compte de Google i en aquest dispositiu?</translation> -<translation id="3779973883630527594">L'empresa, el centre educatiu o l'organització que gestiona aquest compte:</translation> <translation id="3781428340399460090">Rosa fúcsia</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Data de caducitat: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -718,7 +713,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> diu</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">No hi ha resultats</translation> -<translation id="4945672369594656571">Controla com es gestionen les dades del compte i del dispositiu. Google processa les dades del compte i del dispositiu exclusivament segons la direcció del gestor del compte i del dispositiu i només amb la finalitat que aquest especifiqui.</translation> <translation id="4950898438188848926">Botó per canviar de pestanya; prem Retorn per canviar a la pestanya oberta, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Accions</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -732,7 +726,6 @@ <translation id="5017554619425969104">Text que has copiat</translation> <translation id="5018422839182700155">No es pot obrir aquesta pàgina</translation> <translation id="5019198164206649151">L'emmagatzematge de la còpia de seguretat està en mal estat</translation> -<translation id="5020154601324912079">Controla com es gestionen les dades del dispositiu. Google processa les dades del dispositiu exclusivament sota la direcció del gestor del dispositiu i només per a les finalitats que aquest especifiqui.</translation> <translation id="5023310440958281426">Consulteu les polítiques de l'administrador</translation> <translation id="5029568752722684782">Esborra la còpia</translation> <translation id="503069730517007720"><ph name="SOFTWARE_NAME" /> requereix un certificat arrel, però no està instal·lat. Per resoldre aquest problema, l'administrador de TI ha de consultar les instruccions per configurar <ph name="SOFTWARE_NAME" />. <ph name="FURTHER_EXPLANATION" /></translation> @@ -890,7 +883,6 @@ <translation id="5838278095973806738">No introdueixis informació sensible en aquest lloc web (com ara contrasenyes o targetes de crèdit), ja que alguns atacants podrien robar-la.</translation> <translation id="5860033963881614850">Desactivat</translation> <translation id="5863847714970149516">És possible que aquesta pàgina provi de fer-te algun càrrec</translation> -<translation id="5865951947699094510">Pot canviar de manera remota la configuració del compte.</translation> <translation id="5866257070973731571">Afegeix un número de telèfon</translation> <translation id="5869405914158311789">No es pot accedir a aquest lloc web</translation> <translation id="5869522115854928033">Contrasenyes desades</translation> @@ -1158,7 +1150,6 @@ Detalls addicionals: <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Gestiona les contrasenyes…</translation> <translation id="7419106976560586862">Camí del perfil</translation> -<translation id="7424427397225027541">Controla com es gestionen les dades del compte. Google processa les dades del compte exclusivament segons la direcció del gestor del compte i només amb la finalitat que aquest especifiqui.</translation> <translation id="7437289804838430631">Afegeix informació de contacte</translation> <translation id="7440140511386898319">Explora sense connexió</translation> <translation id="7441627299479586546">Usuari de la política incorrecte</translation> @@ -1244,7 +1235,6 @@ Detalls addicionals: <translation id="780301667611848630">No, gràcies</translation> <translation id="7805768142964895445">Estat</translation> <translation id="7806344367022510803">Canvia la configuració del motor de cerca a Chrome</translation> -<translation id="7810209002420871817">Com a gestor del compte, <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Voleu suprimir el suggeriment de formulari de Chrome?</translation> <translation id="7815407501681723534">S'han trobat <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> per a "<ph name="SEARCH_STRING" />"</translation> diff --git a/chromium/components/strings/components_strings_cs.xtb b/chromium/components/strings/components_strings_cs.xtb index 17899820c3e..668adbec0c6 100644 --- a/chromium/components/strings/components_strings_cs.xtb +++ b/chromium/components/strings/components_strings_cs.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="cs"> -<translation id="1001338328714563407">Organizace <ph name="ENROLLMENT_DOMAIN" /> jako správce vašeho zařízení a účtu:</translation> <translation id="1008557486741366299">Teď ne</translation> <translation id="1010200102790553230">Načíst stránku později</translation> <translation id="1015730422737071372">Zadejte další podrobnosti</translation> @@ -352,7 +351,7 @@ <translation id="2878424575911748999">A1</translation> <translation id="2881276955470682203">Uložit kartu?</translation> <translation id="2903493209154104877">Adresy</translation> -<translation id="290376772003165898">Není stránka v jazyce <ph name="LANGUAGE" />?</translation> +<translation id="290376772003165898">Stránka není v jazyce <ph name="LANGUAGE" />?</translation> <translation id="2909946352844186028">Byla zjištěna změna sítě.</translation> <translation id="2910133103376701357">Vaše zařízení a účet jsou spravovány doménou <ph name="ENROLLMENT_DOMAIN" />.</translation> <translation id="2916038427272391327">Zavřete ostatní programy</translation> @@ -365,7 +364,6 @@ <translation id="2948083400971632585">Libovolné servery proxy nakonfigurované pro připojení můžete zakázat na stránce Nastavení.</translation> <translation id="2955913368246107853">Zavřít vyhledávací lištu</translation> <translation id="2969319727213777354">Aby bylo možné navázat zabezpečené spojení, musejí být správně nastaveny hodiny. Důvodem je, že certifikáty, pomocí kterých se weby identifikují, platí pouze pro konkrétní období. Jelikož hodiny v zařízení nejsou nastaveny správně, Google Chrome tyto certifikáty nemůže ověřit.</translation> -<translation id="2970515157925768593">Může vzdáleně měnit nastavení vašeho zařízení a účtu.</translation> <translation id="2972581237482394796">&Opakovat</translation> <translation id="2977665033722899841">Aktuálně je vybrán řádek <ph name="ROW_NAME" />. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Vymazat data</translation> @@ -377,7 +375,6 @@ <translation id="3005723025932146533">Zobrazit uloženou kopii</translation> <translation id="3008447029300691911">Zadejte kód CVC karty <ph name="CREDIT_CARD" />. Po ověření budou údaje o kartě sdíleny s tímto webem.</translation> <translation id="3010559122411665027">Položka seznamu „<ph name="ENTRY_INDEX" />“: <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Organizace <ph name="ENROLLMENT_DOMAIN" /> jako správce tohoto zařízení:</translation> <translation id="301521992641321250">Automaticky blokováno</translation> <translation id="3023071826883856138">You4 (obálka)</translation> <translation id="3024663005179499861">Chybný typ zásady</translation> @@ -420,7 +417,6 @@ <translation id="3287510313208355388">Stáhnout, až bude zařízení online</translation> <translation id="3293642807462928945">Další informace o zásadě <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Nebyly nalezeny žádné výsledky</translation> -<translation id="3311730110465560799">Může vzdáleně změnit nastavení zařízení.</translation> <translation id="3320021301628644560">Přidání fakturační adresy</translation> <translation id="3324983252691184275">Karmínová</translation> <translation id="3338095232262050444">Zabezpečeno</translation> @@ -514,7 +510,6 @@ <translation id="3761718714832595332">Skrýt stav</translation> <translation id="3765032636089507299">Stránka Bezpečného procházení je ve výstavbě.</translation> <translation id="3778403066972421603">Chcete tuto kartu uložit do svého účtu Google a do tohoto zařízení?</translation> -<translation id="3779973883630527594">Společnost, škola nebo organizace, která spravuje tento účet:</translation> <translation id="3781428340399460090">Jasně růžová</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Platnost do: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -714,7 +709,6 @@ <translation id="4926159001844873046">Web <ph name="SITE" /> říká</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Žádné výsledky</translation> -<translation id="4945672369594656571">Určuje způsob zpracování dat z vašeho zařízení a účtu. Společnost Google data ze zařízení a účtu zpracovává výhradně podle pokynů správce zařízení a účtu a výhradně pro účely určené správcem zařízení a účtu.</translation> <translation id="4950898438188848926">Tlačítko přepínání karet. Stisknutím klávesy Enter přejdete na otevřenou kartu (<ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" />)</translation> <translation id="495170559598752135">Akce</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -728,7 +722,6 @@ <translation id="5017554619425969104">Zkopírovaný text</translation> <translation id="5018422839182700155">Tuto stránku nelze otevřít</translation> <translation id="5019198164206649151">Záložní úložiště je ve špatném stavu</translation> -<translation id="5020154601324912079">Určuje způsob zpracování dat z vašeho zařízení. Společnost Google data ze zařízení zpracovává výhradně podle pokynů správce zařízení a výhradně pro účely určené správcem zařízení.</translation> <translation id="5023310440958281426">Zkontrolujte zásady svého správce</translation> <translation id="5029568752722684782">Vymazat kopii</translation> <translation id="503069730517007720">Je vyžadován kořenový certifikát pro software <ph name="SOFTWARE_NAME" />, ale není nainstalován. Při řešení tohoto problému by si měl administrátor IT prostudovat pokyny ke konfiguraci softwaru <ph name="SOFTWARE_NAME" />. <ph name="FURTHER_EXPLANATION" /></translation> @@ -886,7 +879,6 @@ Kontaktujte administrátora systému.</translation> <translation id="5838278095973806738">Na tento web byste neměli zadávat citlivé údaje (například hesla nebo čísla platebních karet), protože by je mohli odcizit útočníci.</translation> <translation id="5860033963881614850">Vypnuto</translation> <translation id="5863847714970149516">Následující stránka se vám může pokusit naúčtovat poplatky</translation> -<translation id="5865951947699094510">Může vzdáleně změnit nastavení vašeho účtu.</translation> <translation id="5866257070973731571">Přidání telefonního čísla</translation> <translation id="5869405914158311789">Tento web není dostupný</translation> <translation id="5869522115854928033">Uložená hesla</translation> @@ -1152,7 +1144,6 @@ Kontaktujte administrátora systému.</translation> <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Spravovat hesla…</translation> <translation id="7419106976560586862">Cesta k profilu</translation> -<translation id="7424427397225027541">Určuje způsob zpracování dat z vašeho účtu. Společnost Google data z účtu zpracovává výhradně podle pokynů správce účtu a výhradně pro účely určené správcem účtu.</translation> <translation id="7437289804838430631">Přidat kontaktní údaje</translation> <translation id="7440140511386898319">Prozkoumávejte i offline</translation> <translation id="7441627299479586546">Chybný předmět zásady</translation> @@ -1238,7 +1229,6 @@ Kontaktujte administrátora systému.</translation> <translation id="780301667611848630">Ne, děkuji</translation> <translation id="7805768142964895445">Stav</translation> <translation id="7806344367022510803">Změnit nastavení vyhledávače v Chromu</translation> -<translation id="7810209002420871817">Doména <ph name="ACCOUNT_DOMAIN" /> jako správce vašeho účtu:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Odstranit návrh položky formuláře z Chromu?</translation> <translation id="7815407501681723534">Nalezené <ph name="SEARCH_RESULTS" /> pro dotaz „<ph name="SEARCH_STRING" />“: <ph name="NUMBER_OF_RESULTS" /></translation> diff --git a/chromium/components/strings/components_strings_da.xtb b/chromium/components/strings/components_strings_da.xtb index b973de926e4..67869cd9785 100644 --- a/chromium/components/strings/components_strings_da.xtb +++ b/chromium/components/strings/components_strings_da.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="da"> -<translation id="1001338328714563407">Som administrator for din enhed og konto <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Ikke nu</translation> <translation id="1010200102790553230">Indlæs side senere</translation> <translation id="1015730422737071372">Angiv yderligere oplysninger</translation> @@ -315,7 +314,7 @@ <translation id="2609632851001447353">Varianter</translation> <translation id="2618023639789766142">C10 (Envelope)</translation> <translation id="2625385379895617796">Dit ur er foran</translation> -<translation id="2634124572758952069">IP-adressen på serveren for <ph name="HOST_NAME" /> kunne ikke findes.</translation> +<translation id="2634124572758952069">IP-adressen på serveren for <ph name="HOST_NAME" /> blev ikke fundet.</translation> <translation id="2639739919103226564">Status:</translation> <translation id="2649204054376361687"><ph name="CITY" />, <ph name="COUNTRY" /></translation> <translation id="2650446666397867134">Der blev nægtet adgang til filen</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">Du kan deaktivere alle proxyer, der er konfigureret for en forbindelse, fra siden Indstillinger.</translation> <translation id="2955913368246107853">Luk søgefeltet</translation> <translation id="2969319727213777354">Uret på din enhed skal være indstillet korrekt, før du kan oprette en sikker forbindelse. Dette er vigtigt, da de certifikater, websites bruger til at identificere sig selv, kun er gyldige i bestemte perioder. Da uret på din enhed er indstillet forkert, kan Chrome ikke bekræfte disse certifikater.</translation> -<translation id="2970515157925768593">Din enheds- og kontokonfiguration kan ændres eksternt.</translation> <translation id="2972581237482394796">&Annuller fortryd</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" /> er i øjeblikket valgt. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Ryd data</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">Vis gemt kopi</translation> <translation id="3008447029300691911">Angiv kontrolkoden for <ph name="CREDIT_CARD" />. Når du bekræfter, deles dine kortoplysninger med dette website.</translation> <translation id="3010559122411665027">Angiv posten "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Som administrator for denne enhed <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Automatisk blokering</translation> <translation id="3023071826883856138">You4 (Envelope)</translation> <translation id="3024663005179499861">Forkert politiktype</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">Download, når du er online</translation> <translation id="3293642807462928945">Få flere oplysninger om politikken <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Der blev ikke fundet nogen søgeresultater</translation> -<translation id="3311730110465560799">Din enhedskonfiguration kan ændres eksternt.</translation> <translation id="3320021301628644560">Tilføj faktureringsadresse</translation> <translation id="3324983252691184275">Højrød</translation> <translation id="3338095232262050444">Sikker</translation> @@ -526,7 +522,6 @@ <translation id="3761718714832595332">Skjul status</translation> <translation id="3765032636089507299">Siden Beskyttet browsing er under opførelse.</translation> <translation id="3778403066972421603">Vil du gemme dette kort på din Google-konto og på denne enhed?</translation> -<translation id="3779973883630527594">Det selskab, den skole eller den organisation, som administrerer denne konto:</translation> <translation id="3781428340399460090">Varm lyserød</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Udløber <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -726,7 +721,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> siger</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Ingen resultater</translation> -<translation id="4945672369594656571">Styrer, hvordan dine enheds- og kontodata håndteres. Google behandler dine enheds- og kontodata efter eksklusiv anvisning fra din enheds- og kontoadministrator og kun med henblik på de formål, der er fastsat af enheds- og kontoadministratoren.</translation> <translation id="4950898438188848926">Knap til faneskift. Tryk på Enter for at skifte til den åbne fane, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Handlinger</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -740,7 +734,6 @@ <translation id="5017554619425969104">Tekst, du har kopieret</translation> <translation id="5018422839182700155">Denne side kan ikke åbnes</translation> <translation id="5019198164206649151">Sikkerhedskopien er fejlbehæftet</translation> -<translation id="5020154601324912079">Styrer, hvordan enhedens data håndteres. Google behandler enhedens data efter eksklusiv anvisning fra din enhedsadministrator og kun med henblik på de formål, der er fastsat af enhedsadministratoren.</translation> <translation id="5023310440958281426">Læs din administrators politikker</translation> <translation id="5029568752722684782">Slet kopi</translation> <translation id="503069730517007720">Et rodcertifikat for "<ph name="SOFTWARE_NAME" />" er påkrævet, men ikke installeret. Din IT-administrator bør kigge på konfigurationsvejledningen til "<ph name="SOFTWARE_NAME" />" for at løse dette problem. <ph name="FURTHER_EXPLANATION" /></translation> @@ -898,7 +891,6 @@ <translation id="5838278095973806738">Du bør ikke indtaste følsomme oplysninger på dette website (f.eks. adgangskoder eller kreditkortoplysninger), da de kan blive stjålet af hackere.</translation> <translation id="5860033963881614850">Fra</translation> <translation id="5863847714970149516">Siden forude kan forsøge at opkræve dig penge</translation> -<translation id="5865951947699094510">Din kontokonfiguration kan ændres eksternt.</translation> <translation id="5866257070973731571">Tilføj telefonnummer</translation> <translation id="5869405914158311789">Der kan ikke oprettes forbindelse til dette website</translation> <translation id="5869522115854928033">Gemte adgangskoder</translation> @@ -1169,7 +1161,6 @@ Yderligere oplysninger: <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Administrer adgangskoder…</translation> <translation id="7419106976560586862">Profilsti</translation> -<translation id="7424427397225027541">Styrer, hvordan dine kontodata håndteres. Google behandler dine kontodata efter eksklusiv anvisning fra din kontoadministrator og kun med henblik på de formål, der er fastsat af kontoadministratoren.</translation> <translation id="7437289804838430631">Tilføj kontaktoplysninger</translation> <translation id="7440140511386898319">Udforsk, mens du er offline</translation> <translation id="7441627299479586546">Forkert emne for politik</translation> @@ -1255,7 +1246,6 @@ Yderligere oplysninger: <translation id="780301667611848630">Nej tak</translation> <translation id="7805768142964895445">Status</translation> <translation id="7806344367022510803">Skift søgemaskineindstillinger i Chrome</translation> -<translation id="7810209002420871817">Som administrator for din konto <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Vil du fjerne formularforslaget fra Chrome?</translation> <translation id="7815407501681723534">Der blev fundet <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> for "<ph name="SEARCH_STRING" />"</translation> diff --git a/chromium/components/strings/components_strings_de.xtb b/chromium/components/strings/components_strings_de.xtb index 4d3fdcf8605..92508071257 100644 --- a/chromium/components/strings/components_strings_de.xtb +++ b/chromium/components/strings/components_strings_de.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="de"> -<translation id="1001338328714563407">Als Manager Ihres Geräts und Kontos kann <ph name="ENROLLMENT_DOMAIN" /> Folgendes tun:</translation> <translation id="1008557486741366299">Jetzt nicht</translation> <translation id="1010200102790553230">Seite später laden</translation> <translation id="1015730422737071372">Weitere Details angeben</translation> @@ -78,7 +77,7 @@ <ph name="LIST_ITEM" />Ihren Arbeitgeber oder Ihre Bildungseinrichtung <ph name="LIST_ITEM" />Ihren Internetanbieter <ph name="END_LIST" /></translation> -<translation id="1339601241726513588">Anmeldedomain:</translation> +<translation id="1339601241726513588">Anmeldedomain: </translation> <translation id="1340482604681802745">Abholadresse</translation> <translation id="1348198688976932919">Die Website, die Sie aufrufen möchten, enthält gefährliche Apps</translation> <translation id="1348779747280417563">Namen bestätigen</translation> @@ -104,7 +103,7 @@ <translation id="1472675084647422956">Mehr anzeigen</translation> <translation id="147358896496811705">2A0</translation> <translation id="1484290072879560759">Versandadresse auswählen</translation> -<translation id="1492194039220927094">Richtlinien übernehmen:</translation> +<translation id="1492194039220927094">Richtlinien übernehmen: </translation> <translation id="1501859676467574491">Zeigen Sie Karten von Ihrem Google-Konto</translation> <translation id="1507202001669085618"><p>Diese Fehlermeldung wird angezeigt, wenn Sie ein WLAN-Portal verwenden, bei dem eine Anmeldung erforderlich ist, bevor Sie online gehen können.</p> <p>Klicken Sie auf der Seite, die Sie öffnen möchten, auf <strong>Verbinden</strong>, um den Fehler zu beheben.</p></translation> @@ -141,7 +140,7 @@ <translation id="1645368109819982629">Nicht unterstütztes Protokoll</translation> <translation id="1655462015569774233">{1,plural, =1{Dieser Server konnte nicht beweisen, dass er <ph name="DOMAIN" /> ist. Sein Sicherheitszertifikat ist gestern abgelaufen. Mögliche Gründe sind eine fehlerhafte Konfiguration oder ein Angreifer, der Ihre Verbindung abfängt. Die Uhr Ihres Computers ist derzeit auf <ph name="CURRENT_DATE" /> eingestellt. Ist das korrekt? Falls nicht, stellen Sie die Uhr Ihres Systems richtig ein und aktualisieren Sie anschließend diese Seite.}other{Dieser Server konnte nicht beweisen, dass er <ph name="DOMAIN" /> ist. Sein Sicherheitszertifikat ist vor # Tagen abgelaufen. Mögliche Gründe sind eine fehlerhafte Konfiguration oder ein Angreifer, der Ihre Verbindung abfängt. Die Uhr Ihres Computers ist derzeit auf <ph name="CURRENT_DATE" /> eingestellt. Ist das korrekt? Falls nicht, stellen Sie die Uhr Ihres Systems richtig ein und aktualisieren Sie anschließend diese Seite.}}</translation> <translation id="1656489000284462475">Abholung</translation> -<translation id="1662550410081243962">Zahlungsmethode speichern und ausfüllen</translation> +<translation id="1662550410081243962">Zahlungsmethoden speichern und ausfüllen</translation> <translation id="1663943134801823270">Die Karten und Adressen stammen aus Chrome. Sie werden in den <ph name="BEGIN_LINK" />Einstellungen<ph name="END_LINK" /> verwaltet.</translation> <translation id="1671391448414634642">Seiten auf <ph name="SOURCE_LANGUAGE" /> werden ab jetzt auf <ph name="TARGET_LANGUAGE" /> übersetzt.</translation> <translation id="1676269943528358898"><ph name="SITE" /> schützt Ihre Daten in der Regel durch Verschlüsselung. Als Google Chrome dieses Mal versuchte, eine Verbindung zu <ph name="SITE" /> herzustellen, gab die Website ungewöhnliche und falsche Anmeldedaten zurück. Entweder versucht ein Angreifer, sich als <ph name="SITE" /> auszugeben, oder die Verbindung wurde durch eine WLAN-Anmeldeseite unterbrochen. Da Google Chrome die Verbindung vor dem Austausch von Daten unterbrochen hat, sind Ihre Informationen weiterhin sicher.</translation> @@ -301,14 +300,14 @@ <translation id="2556876185419854533">&Bearbeiten rückgängig machen</translation> <translation id="2586657967955657006">Zwischenablage</translation> <translation id="2587730715158995865">Von <ph name="ARTICLE_PUBLISHER" />. Diese Meldung und <ph name="OTHER_ARTICLE_COUNT" /> weitere Meldungen lesen.</translation> -<translation id="2587841377698384444">Directory API-ID:</translation> +<translation id="2587841377698384444">Directory API-ID: </translation> <translation id="2595719060046994702">Dieses Gerät und dieses Konto werden nicht von einem Unternehmen oder einer anderen Organisation verwaltet.</translation> <translation id="2597378329261239068">Dieses Dokument ist passwortgeschützt. Geben Sie ein Passwort ein.</translation> <translation id="2609632851001447353">Varianten</translation> <translation id="2618023639789766142">C10 (Umschlag)</translation> <translation id="2625385379895617796">Ihre Uhr geht vor</translation> <translation id="2634124572758952069">Die Server-IP-Adresse von <ph name="HOST_NAME" /> wurde nicht gefunden.</translation> -<translation id="2639739919103226564">Status:</translation> +<translation id="2639739919103226564">Status: </translation> <translation id="2649204054376361687"><ph name="CITY" />, <ph name="COUNTRY" /></translation> <translation id="2650446666397867134">Der Zugriff auf die Datei wurde verweigert.</translation> <translation id="2653659639078652383">Senden</translation> @@ -365,7 +364,6 @@ <translation id="2948083400971632585">Sie können alle für eine Verbindung konfigurierten Proxys auf der Seite "Einstellungen" deaktivieren.</translation> <translation id="2955913368246107853">Suchleiste schließen</translation> <translation id="2969319727213777354">Zum Herstellen einer sicheren Verbindung muss die Uhrzeit richtig eingestellt sein. Der Grund hierfür ist, dass Websites sich mithilfe von Zertifikaten identifizieren, die nur für einen bestimmten Zeitraum gelten. Da die Uhrzeit Ihres Geräts falsch ist, kann Google Chrome diese Zertifikate nicht bestätigen.</translation> -<translation id="2970515157925768593">Ihre Geräte- und Kontoeinrichtung remote ändern.</translation> <translation id="2972581237482394796">&Wiederholen</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, aktuell ausgewählt. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Daten löschen</translation> @@ -377,7 +375,6 @@ <translation id="3005723025932146533">Gespeicherte Kopie anzeigen</translation> <translation id="3008447029300691911">Geben Sie den CVC für <ph name="CREDIT_CARD" /> ein. Nach erfolgter Bestätigung werden die Kartendetails an diese Website weitergegeben.</translation> <translation id="3010559122411665027">Listeneintrag "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Als Manager dieses Geräts kann <ph name="ENROLLMENT_DOMAIN" /> Folgendes tun:</translation> <translation id="301521992641321250">Automatisch blockiert</translation> <translation id="3023071826883856138">You4 (Umschlag)</translation> <translation id="3024663005179499861">Falscher Richtlinientyp</translation> @@ -388,7 +385,7 @@ <translation id="3083099961703215236">{COUNT,plural, =0{Keine}=1{1 Passwort}other{# Passwörter}}</translation> <translation id="3095940652251934233">Statement</translation> <translation id="3096100844101284527">Abholadresse hinzufügen</translation> -<translation id="3105172416063519923">Geräte-ID:</translation> +<translation id="3105172416063519923">Geräte-ID: </translation> <translation id="3109728660330352905">Sie sind nicht zum Aufrufen dieser Seite autorisiert.</translation> <translation id="3120730422813725195">Elo</translation> <translation id="31207688938192855"><ph name="BEGIN_LINK" />Versuchen Sie, die Verbindungsdiagnose auszuführen.<ph name="END_LINK" /></translation> @@ -423,7 +420,6 @@ <translation id="3287510313208355388">Herunterladen, sobald eine Internetverbindung besteht</translation> <translation id="3293642807462928945">Weitere Informationen zur "<ph name="POLICY_NAME" />"-Richtlinie</translation> <translation id="3303855915957856445">Keine Suchergebnisse gefunden</translation> -<translation id="3311730110465560799">Ihre Geräteeinrichtung remote ändern.</translation> <translation id="3320021301628644560">Rechnungsadresse hinzufügen</translation> <translation id="3324983252691184275">Purpur</translation> <translation id="3338095232262050444">Sicher</translation> @@ -441,7 +437,7 @@ <translation id="337363190475750230">Bereitstellung aufgehoben</translation> <translation id="3377188786107721145">Fehler beim Parsen der Richtlinie</translation> <translation id="3380365263193509176">Unbekannter Fehler</translation> -<translation id="3380864720620200369">Client-ID:</translation> +<translation id="3380864720620200369">Client-ID: </translation> <translation id="3387261909427947069">Zahlungsmethoden</translation> <translation id="3391030046425686457">Lieferadresse</translation> <translation id="3395827396354264108">Abholoption</translation> @@ -455,7 +451,7 @@ <translation id="3443726618221119081">Juuro-Ku-Kai</translation> <translation id="3447661539832366887">Der Eigentümer dieses Geräts hat das Dinosaurier-Spiel deaktiviert.</translation> <translation id="3447884698081792621">Zertifikat anzeigen (ausgestellt von <ph name="ISSUER" />)</translation> -<translation id="3452404311384756672">Abrufintervall:</translation> +<translation id="3452404311384756672">Abrufintervall: </translation> <translation id="3456231139987291353">Number-11 (Umschlag)</translation> <translation id="3461824795358126837">Textmarker</translation> <translation id="3462200631372590220">Erweiterte Informationen ausblenden</translation> @@ -516,7 +512,6 @@ <translation id="3761718714832595332">Status ausblenden</translation> <translation id="3765032636089507299">Die Seite "Safe Browsing" wird überarbeitet.</translation> <translation id="3778403066972421603">Möchten Sie diese Karte in Ihrem Google-Konto und auf diesem Gerät speichern?</translation> -<translation id="3779973883630527594">Das Unternehmen, die Bildungseinrichtung oder Organisation, von der dieses Konto verwaltet wird, kann Folgendes tun:</translation> <translation id="3781428340399460090">Dunkelrosa</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Ablaufdatum: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -716,7 +711,6 @@ <translation id="4926159001844873046">Auf <ph name="SITE" /> wird Folgendes angezeigt:</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Keine Ergebnisse</translation> -<translation id="4945672369594656571">Festlegen, wie mit Ihren Geräte- und Kontodaten verfahren wird. Google verarbeitet Ihre Geräte- und Kontodaten ausschließlich nach Vorgabe durch Ihren Geräte- und Kontomanager und allein zu dem von Ihrem Geräte- und Kontomanager festgelegten Zweck.</translation> <translation id="4950898438188848926">Schaltfläche zum Wechseln von Tabs, Eingabetaste drücken, um zum offenen Tab "<ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" />" zu wechseln</translation> <translation id="495170559598752135">Aktionen</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -730,7 +724,6 @@ <translation id="5017554619425969104">Von Ihnen kopierter Text</translation> <translation id="5018422839182700155">Diese Seite kann nicht geöffnet werden</translation> <translation id="5019198164206649151">Sicherungsspeicher ist fehlerhaft.</translation> -<translation id="5020154601324912079">Festlegen, wie mit Ihren Gerätedaten verfahren wird. Google verarbeitet Ihre Gerätedaten ausschließlich nach Vorgabe durch Ihren Gerätemanager und allein zu dem von Ihrem Gerätemanager festgelegten Zweck.</translation> <translation id="5023310440958281426">Informieren Sie sich über die von Ihrem Administrator festgelegten Richtlinien.</translation> <translation id="5029568752722684782">Kopie löschen</translation> <translation id="503069730517007720">Für "<ph name="SOFTWARE_NAME" />" ist ein Stammzertifikat erforderlich, das nicht installiert ist. Ihr IT-Administrator sollte die Konfigurationsanweisungen für "<ph name="SOFTWARE_NAME" />" lesen, um das Problem zu beheben. <ph name="FURTHER_EXPLANATION" /></translation> @@ -888,7 +881,6 @@ <translation id="5838278095973806738">Sie sollten keine vertraulichen Informationen wie Passwörter oder Kreditkartennummern auf dieser Website eingeben, da sie von Angreifern gestohlen werden könnten.</translation> <translation id="5860033963881614850">Aus</translation> <translation id="5863847714970149516">Auf der nächsten Seite wird möglicherweise versucht, Ihnen etwas in Rechnung zu stellen</translation> -<translation id="5865951947699094510">Ihre Kontoeinrichtung remote ändern.</translation> <translation id="5866257070973731571">Telefonnummer hinzufügen</translation> <translation id="5869405914158311789">Die Website ist nicht erreichbar</translation> <translation id="5869522115854928033">Gespeicherte Passwörter</translation> @@ -1052,7 +1044,7 @@ <translation id="6895330447102777224">Ihre Karte wurde bestätigt</translation> <translation id="6897140037006041989">User-Agent</translation> <translation id="6903319715792422884">Sie können uns dabei helfen, Safe Browsing weiter zu verbessern, indem Sie einige <ph name="BEGIN_WHITEPAPER_LINK" />Systeminformationen und Seiteninhalte<ph name="END_WHITEPAPER_LINK" /> an Google senden. <ph name="PRIVACY_PAGE_LINK" /></translation> -<translation id="6915804003454593391">Nutzer:</translation> +<translation id="6915804003454593391">Nutzer: </translation> <translation id="6934672428414710184">Dieser Name stammt aus Ihrem Google-Konto</translation> <translation id="6944692733090228304">Sie haben Ihr Passwort auf einer Website eingegeben, die nicht von <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> verwaltet wird. Zum Schutz Ihres Kontos sollten Sie das Passwort nicht für andere Apps und Websites verwenden.</translation> <translation id="6945221475159498467">Auswählen</translation> @@ -1097,7 +1089,7 @@ <translation id="7152423860607593928">Number-14 (Umschlag)</translation> <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> und <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> weitere}other{<ph name="PAYMENT_METHOD_PREVIEW" /> und <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> weitere}}</translation> <translation id="7153618581592392745">Lavendel</translation> -<translation id="717330890047184534">GAIA-ID:</translation> +<translation id="717330890047184534">GAIA-ID: </translation> <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> und <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> weitere}other{<ph name="SHIPPING_OPTION_PREVIEW" /> und <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> weitere}}</translation> <translation id="7177397715882417099">Der Server <ph name="ORIGIN" />, zu dem Sie gehen, verlangt, dass auf alle an ihn gerichteten Anfragen eine Sicherheitsrichtlinie angewendet wird. Aber statt eine Richtlinie bereitzustellen, hat er den Browser weitergeleitet, was den Browser daran hindert, Ihre Anfrage für <ph name="SITE" /> auszuführen.</translation> <translation id="7179323680825933600">Zahlungsmethoden speichern und ausfüllen</translation> @@ -1156,7 +1148,6 @@ Weitere Details: <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Passwörter verwalten…</translation> <translation id="7419106976560586862">Profilpfad</translation> -<translation id="7424427397225027541">Festlegen, wie mit Ihren Kontodaten verfahren wird. Google verarbeitet Ihre Kontodaten ausschließlich nach Vorgabe durch Ihren Kontomanager und allein zu dem von Ihrem Kontomanager festgelegten Zweck.</translation> <translation id="7437289804838430631">Kontaktdaten hinzufügen</translation> <translation id="7440140511386898319">Verfügbare Offline-Inhalte</translation> <translation id="7441627299479586546">Falsche(r) Nutzername/Domain der Richtlinie</translation> @@ -1230,7 +1221,7 @@ Weitere Details: <translation id="7755287808199759310">Deine Eltern können die Blockierung aufheben</translation> <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Möglicherweise wurde die Verbindung von einer Firewall oder Antivirensoftware blockiert.</translation> -<translation id="7759163816903619567">Anzeigebereich</translation> +<translation id="7759163816903619567">Anzeigebereich: </translation> <translation id="7761701407923456692">Das Serverzertifikat stimmt nicht mit der URL überein.</translation> <translation id="7763386264682878361">Zahlungsmanifest-Parser</translation> <translation id="7764225426217299476">Adresse hinzufügen</translation> @@ -1242,7 +1233,6 @@ Weitere Details: <translation id="780301667611848630">Kein Interesse</translation> <translation id="7805768142964895445">Status</translation> <translation id="7806344367022510803">Suchmaschinen-Einstellungen in Chrome ändern</translation> -<translation id="7810209002420871817">Als Manager Ihres Kontos kann <ph name="ACCOUNT_DOMAIN" /> Folgendes tun:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Vorschlag für das Formular aus Chrome entfernen?</translation> <translation id="7815407501681723534"><ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> für "<ph name="SEARCH_STRING" />" gefunden</translation> @@ -1310,7 +1300,7 @@ Weitere Details: <translation id="8202370299023114387">Konflikt</translation> <translation id="8206978196348664717">Prc4 (Umschlag)</translation> <translation id="8211406090763984747">Verbindung ist sicher</translation> -<translation id="8218327578424803826">Zugewiesener Standort:</translation> +<translation id="8218327578424803826">Zugewiesener Standort: </translation> <translation id="8220146938470311105">C7/C6 (Umschlag)</translation> <translation id="8225771182978767009">Die Person, die diesen Computer eingerichtet hat, hat diese Website gesperrt.</translation> <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation> @@ -1318,7 +1308,7 @@ Weitere Details: <translation id="8241707690549784388">Die gesuchte Seite hat die von Ihnen eingegebenen Informationen verwendet bzw. verarbeitet. Wenn Sie zu dieser Seite zurückgehen, wird eventuell eine schon ausgeführte Aktion wiederholt. Möchten Sie fortfahren?</translation> <translation id="8241712895048303527">Auf dieser Website blockieren</translation> <translation id="8242426110754782860">Fortfahren</translation> -<translation id="8249320324621329438">Letzter Abruf:</translation> +<translation id="8249320324621329438">Letzter Abruf: </translation> <translation id="8253091569723639551">Rechnungsadresse ist erforderlich</translation> <translation id="825929999321470778">Alle gespeicherten Passwörter anzeigen</translation> <translation id="8261506727792406068">Löschen</translation> diff --git a/chromium/components/strings/components_strings_el.xtb b/chromium/components/strings/components_strings_el.xtb index 2c79c6bb8ca..f879a551f8d 100644 --- a/chromium/components/strings/components_strings_el.xtb +++ b/chromium/components/strings/components_strings_el.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="el"> -<translation id="1001338328714563407">Ως διαχειριστής της συσκευής και του λογαριασμού σας από τον τομέα <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Όχι τώρα</translation> <translation id="1010200102790553230">Φόρτωση σελίδας αργότερα</translation> <translation id="1015730422737071372">Καταχωρίστε επιπλέον λεπτομέρειες</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">Μπορείτε να απενεργοποιήσετε τυχόν διακομιστές μεσολάβησης που έχουν διαμορφωθεί για μια σύνδεση από τη σελίδα ρυθμίσεων.</translation> <translation id="2955913368246107853">Κλείσιμο γραμμής εύρεσης</translation> <translation id="2969319727213777354">Για την επίτευξη μιας ασφαλούς σύνδεσης, θα πρέπει να γίνει σωστή ρύθμιση του ρολογιού σας. Αυτό οφείλεται στο γεγονός ότι τα πιστοποιητικά που χρησιμοποιούν οι ιστότοποι για την ταυτοποίησή τους είναι έγκυρα μόνο για συγκεκριμένες χρονικές περιόδους. Εφόσον το ρολόι της συσκευής σας δεν είναι σωστά ρυθμισμένο, το Google Chrome δεν μπορεί να επαληθεύσει αυτά τα πιστοποιητικά.</translation> -<translation id="2970515157925768593">Μπορεί να αλλάξει από απόσταση τη ρύθμιση της συσκευής και του λογαριασμού σας.</translation> <translation id="2972581237482394796">&Επανάληψη ενέργειας</translation> <translation id="2977665033722899841">Έχει επιλεγεί ο λογαριασμός <ph name="ROW_NAME" />. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Διαγραφή δεδομένων</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">Εμφάνιση αποθηκευμένου αντιγράφου</translation> <translation id="3008447029300691911">Εισαγάγετε τον κωδικό CVC για την πιστωτική κάρτα <ph name="CREDIT_CARD" />. Μετά την επιβεβαίωση, θα κοινοποιηθούν τα στοιχεία της κάρτας σας με αυτόν τον ιστότοπο.</translation> <translation id="3010559122411665027">Καταχώριση λίστας "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Ως διαχειριστής αυτής της συσκευής από τον τομέα <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Αποκλείστηκε αυτόματα</translation> <translation id="3023071826883856138">You4 (Φάκελος)</translation> <translation id="3024663005179499861">Λανθασμένος τύπος πολιτικής</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">Να γίνει λήψη όταν πραγματοποιηθεί σύνδεση</translation> <translation id="3293642807462928945">Μάθετε περισσότερα σχετικά με την πολιτική <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Δεν βρέθηκαν αποτελέσματα αναζήτησης</translation> -<translation id="3311730110465560799">Μπορεί να αλλάξει από απόσταση τη ρύθμιση της συσκευής σας.</translation> <translation id="3320021301628644560">Προσθήκη διεύθυνσης χρέωσης</translation> <translation id="3324983252691184275">Βαθύ κόκκινο</translation> <translation id="3338095232262050444">Ασφαλές</translation> @@ -526,7 +522,6 @@ <translation id="3761718714832595332">Απόκρυψη κατάστασης</translation> <translation id="3765032636089507299">Η σελίδα Ασφαλούς περιήγησης είναι υπό κατασκευή.</translation> <translation id="3778403066972421603">Θέλετε να αποθηκεύσετε αυτήν την κάρτα στον Λογαριασμό σας Google και σε αυτήν τη συσκευή;</translation> -<translation id="3779973883630527594">Η εταιρεία, το εκπαιδευτικό ίδρυμα ή ο οργανισμός που διαχειρίζεται αυτόν τον λογαριασμό:</translation> <translation id="3781428340399460090">Έντονο ροζ</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Λήγει <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -727,7 +722,6 @@ <translation id="4926159001844873046">Ο ιστότοπος <ph name="SITE" /> λέει</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Δεν υπάρχουν αποτελέσματα</translation> -<translation id="4945672369594656571">Ελέγχει τον τρόπο χειρισμού των δεδομένων της συσκευής και του λογαριασμού σας. To Google επεξεργάζεται τα δεδομένα της συσκευής και του λογαριασμού σας σύμφωνα με την καθοδήγηση του διαχειριστή της συσκευής και του λογαριασμού σας και μόνο για τους σκοπούς που ορίζονται από τον διαχειριστή της συσκευής και του λογαριασμού σας.</translation> <translation id="4950898438188848926">Κουμπί εναλλαγής καρτέλας, πατήστε Enter για μετάβαση στην ανοιχτή καρτέλα, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Ενέργειες</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -741,7 +735,6 @@ <translation id="5017554619425969104">Κείμενο που αντιγράψατε</translation> <translation id="5018422839182700155">Δεν είναι δυνατό το άνοιγμα αυτής της σελίδας</translation> <translation id="5019198164206649151">Η αποθήκευση αντιγράφων ασφαλείας είναι σε κακή κατάσταση</translation> -<translation id="5020154601324912079">Ελέγχει τον τρόπο χειρισμού των δεδομένων της συσκευής σας. To Google επεξεργάζεται τα δεδομένα της συσκευής σας αποκλειστικά σύμφωνα με την καθοδήγηση του διαχειριστή της συσκευής σας και μόνο για τους σκοπούς που ορίζονται από τον διαχειριστή της συσκευής σας.</translation> <translation id="5023310440958281426">Ελέγξτε τις πολιτικές του διαχειριστή</translation> <translation id="5029568752722684782">Διαγραφή αντιγράφου</translation> <translation id="503069730517007720">Απαιτείται πιστοποιητικό ρίζας για το λογισμικό "<ph name="SOFTWARE_NAME" />" αλλά δεν έχει εγκατασταθεί. Ο διαχειριστής IT πρέπει να εξετάσει τις οδηγίες διαμόρφωσης για το λογισμικό "<ph name="SOFTWARE_NAME" />", προκειμένου να διορθώσει αυτό το πρόβλημα. <ph name="FURTHER_EXPLANATION" /></translation> @@ -899,7 +892,6 @@ <translation id="5838278095973806738">Δεν θα πρέπει να εισαγάγετε ευαίσθητες πληροφορίες σε αυτόν τον ιστότοπο (για παράδειγμα, κωδικούς πρόσβασης ή πιστωτικές κάρτες), επειδή ενδέχεται να υποκλαπούν από εισβολείς.</translation> <translation id="5860033963881614850">Απενεργοποιημένη</translation> <translation id="5863847714970149516">Η σελίδα που ακολουθεί μπορεί να προσπαθήσει να σας χρεώσει</translation> -<translation id="5865951947699094510">Μπορεί να αλλάξει από απόσταση τη ρύθμιση του λογαριασμού σας.</translation> <translation id="5866257070973731571">Προσθήκη αριθμού τηλεφώνου</translation> <translation id="5869405914158311789">Δεν είναι δυνατή η πρόσβαση σε αυτόν τον ιστότοπο</translation> <translation id="5869522115854928033">Αποθηκευμένοι κωδικοί πρόσβασης</translation> @@ -1170,7 +1162,6 @@ <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Διαχείριση κωδικών πρόσβασης…</translation> <translation id="7419106976560586862">Διαδρομή προφίλ</translation> -<translation id="7424427397225027541">Ελέγχει τον τρόπο χειρισμού των δεδομένων του λογαριασμού σας. To Google επεξεργάζεται τα δεδομένα του λογαριασμού σας αποκλειστικά σύμφωνα με την καθοδήγηση του διαχειριστή του λογαριασμού σας και μόνο για τους σκοπούς που ορίζονται από τον διαχειριστή του λογαριασμού σας.</translation> <translation id="7437289804838430631">Προσθήκη στοιχείων επικοινωνίας</translation> <translation id="7440140511386898319">Αναζήτηση εκτός σύνδεσης</translation> <translation id="7441627299479586546">Εσφαλμένο θέμα πολιτικής</translation> @@ -1256,7 +1247,6 @@ <translation id="780301667611848630">Όχι, ευχαριστώ</translation> <translation id="7805768142964895445">Κατάσταση</translation> <translation id="7806344367022510803">Αλλάξτε τις ρυθμίσεις της μηχανής αναζήτησης στο Chrome</translation> -<translation id="7810209002420871817">Ως διαχειριστής του λογαριασμού σας από τον τομέα, <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Κατάργηση πρότασης φόρμας από το Chrome;</translation> <translation id="7815407501681723534">Βρέθηκαν <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> για τον όρο αναζήτησης "<ph name="SEARCH_STRING" />"</translation> diff --git a/chromium/components/strings/components_strings_en-GB.xtb b/chromium/components/strings/components_strings_en-GB.xtb index cc05ab2f36d..0293940f1eb 100644 --- a/chromium/components/strings/components_strings_en-GB.xtb +++ b/chromium/components/strings/components_strings_en-GB.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="en-GB"> -<translation id="1001338328714563407">As the manager of your device and account, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Not Now</translation> <translation id="1010200102790553230">Load page later</translation> <translation id="1015730422737071372">Provide additional details.</translation> @@ -365,7 +364,6 @@ <translation id="2948083400971632585">You can disable any proxies configured for a connection from the settings page.</translation> <translation id="2955913368246107853">Close find bar</translation> <translation id="2969319727213777354">To establish a secure connection, your clock needs to be set correctly. This is because the certificates that websites use to identify themselves are only valid for specific periods of time. Since your device's clock is incorrect, Google Chrome cannot verify these certificates.</translation> -<translation id="2970515157925768593">Can remotely change your device and account setup.</translation> <translation id="2972581237482394796">&Redo</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, currently selected. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Clear Data</translation> @@ -377,7 +375,6 @@ <translation id="3005723025932146533">Show saved copy</translation> <translation id="3008447029300691911">Enter the CVC for <ph name="CREDIT_CARD" />. Once you confirm, your card details will be shared with this site.</translation> <translation id="3010559122411665027">List entry "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">As the manager of this device, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Automatically blocked</translation> <translation id="3023071826883856138">You4 (Envelope)</translation> <translation id="3024663005179499861">Wrong policy type</translation> @@ -423,7 +420,6 @@ <translation id="3287510313208355388">Download when online</translation> <translation id="3293642807462928945">Learn more about <ph name="POLICY_NAME" /> policy</translation> <translation id="3303855915957856445">No search results found</translation> -<translation id="3311730110465560799">Can remotely change your device setup.</translation> <translation id="3320021301628644560">Add billing address</translation> <translation id="3324983252691184275">Crimson</translation> <translation id="3338095232262050444">Secure</translation> @@ -518,7 +514,6 @@ <translation id="3761718714832595332">Hide status</translation> <translation id="3765032636089507299">The Safe Browsing page is under construction.</translation> <translation id="3778403066972421603">Do you want to save this card to your Google Account and on this device?</translation> -<translation id="3779973883630527594">The company, school or organisation that manages this account:</translation> <translation id="3781428340399460090">Hot pink</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Expires <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -718,7 +713,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> says</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">No results</translation> -<translation id="4945672369594656571">Controls how your device and account data is handled. Google processes your device and account data exclusively under the direction of your device and account manager and solely for the purposes specified by your device and account manager.</translation> <translation id="4950898438188848926">Tab switch button, press Enter to switch to the open tab, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Actions</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -732,7 +726,6 @@ <translation id="5017554619425969104">Text that you copied</translation> <translation id="5018422839182700155">Can't open this page</translation> <translation id="5019198164206649151">Backing store in bad state</translation> -<translation id="5020154601324912079">Controls how your device data is handled. Google processes your device data exclusively under the direction of your device manager and solely for the purposes specified by your device manager.</translation> <translation id="5023310440958281426">Check your administrator's policies</translation> <translation id="5029568752722684782">Clear copy</translation> <translation id="503069730517007720">A root certificate for '<ph name="SOFTWARE_NAME" />' is required but isn’t installed. Your IT administrator should look at configuration instructions for '<ph name="SOFTWARE_NAME" />' to fix this problem. <ph name="FURTHER_EXPLANATION" /></translation> @@ -890,7 +883,6 @@ <translation id="5838278095973806738">You should not enter any sensitive information on this site (for example, passwords or credit cards) because it could be stolen by attackers.</translation> <translation id="5860033963881614850">Off</translation> <translation id="5863847714970149516">The page ahead may try to charge you money</translation> -<translation id="5865951947699094510">Can remotely change your account setup.</translation> <translation id="5866257070973731571">Add Phone Number</translation> <translation id="5869405914158311789">This site can’t be reached</translation> <translation id="5869522115854928033">Saved passwords</translation> @@ -1158,7 +1150,6 @@ Additional details: <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Manage passwords...</translation> <translation id="7419106976560586862">Profile Path</translation> -<translation id="7424427397225027541">Controls how your account data is handled. Google processes your account data exclusively under the direction of your account manager and solely for the purposes specified by your account manager.</translation> <translation id="7437289804838430631">Add contact info</translation> <translation id="7440140511386898319">Explore while offline</translation> <translation id="7441627299479586546">Wrong policy subject</translation> @@ -1244,7 +1235,6 @@ Additional details: <translation id="780301667611848630">No, thanks</translation> <translation id="7805768142964895445">Status</translation> <translation id="7806344367022510803">Change search engine settings in Chrome</translation> -<translation id="7810209002420871817">As the manager of your account, <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Remove form suggestion from Chrome?</translation> <translation id="7815407501681723534">Found <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> for '<ph name="SEARCH_STRING" />'</translation> diff --git a/chromium/components/strings/components_strings_es-419.xtb b/chromium/components/strings/components_strings_es-419.xtb index 16a4263b6f5..356c250f2c2 100644 --- a/chromium/components/strings/components_strings_es-419.xtb +++ b/chromium/components/strings/components_strings_es-419.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="es-419"> -<translation id="1001338328714563407">Como administrador de tu cuenta y dispositivo, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Ahora no</translation> <translation id="1010200102790553230">Cargar la página más tarde</translation> <translation id="1015730422737071372">Proporciona más detalles</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">Puedes inhabilitar los servidores proxy configurados para una conexión desde la página de configuración.</translation> <translation id="2955913368246107853">Cerrar la barra de búsqueda</translation> <translation id="2969319727213777354">Para establecer una conexión segura, el reloj se debe configurar correctamente. Esto se debe a que los certificados que usan los sitios web para su identificación solo son válidos por períodos de tiempo específicos. Debido a que la configuración del reloj del dispositivo es incorrecta, Google Chrome no puede verificar estos certificados.</translation> -<translation id="2970515157925768593">Puedes cambiar la configuración de tu cuenta y dispositivo de forma remota.</translation> <translation id="2972581237482394796">&Rehacer</translation> <translation id="2977665033722899841">Fila <ph name="ROW_NAME" /> seleccionada. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Borrar datos</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">Mostrar copia guardada</translation> <translation id="3008447029300691911">Ingresa el CVC de la tarjeta <ph name="CREDIT_CARD" />. Después de confirmarla, los datos de tu tarjeta se compartirán con este sitio.</translation> <translation id="3010559122411665027">Entrada de lista "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Como administrador de este dispositivo, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Bloqueado de forma automática</translation> <translation id="3023071826883856138">You4 (Envelope)</translation> <translation id="3024663005179499861">Tipo de política incorrecto</translation> @@ -432,7 +429,6 @@ <translation id="3287510313208355388">Descargar cuando haya conexión</translation> <translation id="3293642807462928945">Más información sobre la política <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">No se encontraron resultados en la búsqueda</translation> -<translation id="3311730110465560799">Puedes cambiar la configuración de tu dispositivo de forma remota.</translation> <translation id="3320021301628644560">Agregar dirección de facturación</translation> <translation id="3324983252691184275">Carmesí</translation> <translation id="3338095232262050444">Seguro</translation> @@ -527,7 +523,6 @@ <translation id="3761718714832595332">Ocultar estado</translation> <translation id="3765032636089507299">La página de Navegación segura está en construcción.</translation> <translation id="3778403066972421603">¿Deseas guardar esta tarjeta en tu cuenta de Google y en este dispositivo?</translation> -<translation id="3779973883630527594">La empresa, organización o institución educativa que administra esta cuenta:</translation> <translation id="3781428340399460090">Fucsia</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Vencimiento: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -727,7 +722,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> dice</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Sin resultados</translation> -<translation id="4945672369594656571">Controla la forma en que se administran los datos de tu cuenta y dispositivo. Google procesa estos datos exclusivamente según las indicaciones del administrador de tu cuenta y dispositivo, y solo para los fines que se indiquen.</translation> <translation id="4950898438188848926">Botón para cambiar de pestaña; presiona Intro para cambiar a la pestaña abierta <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Acciones</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -741,7 +735,6 @@ <translation id="5017554619425969104">Texto que copiaste</translation> <translation id="5018422839182700155">No se puede abrir esta página</translation> <translation id="5019198164206649151">La memoria auxiliar se encuentra en mal estado.</translation> -<translation id="5020154601324912079">Controla la forma en que se administran los datos de tu dispositivo. Google procesa estos datos exclusivamente según las indicaciones del administrador de tu dispositivo y solo para los fines que se indiquen.</translation> <translation id="5023310440958281426">Revisa las políticas del administrador.</translation> <translation id="5029568752722684782">Borrar la copia</translation> <translation id="503069730517007720">Se requiere un certificado raíz para "<ph name="SOFTWARE_NAME" />", pero no está instalado. Tu administrador de IT debe analizar las instrucciones de configuración de "<ph name="SOFTWARE_NAME" />" para corregir este problema. <ph name="FURTHER_EXPLANATION" /></translation> @@ -897,9 +890,8 @@ <translation id="5810442152076338065">Tu conexión a <ph name="DOMAIN" /> está encriptada con un conjunto de cifrado obsoleto.</translation> <translation id="5813119285467412249">&Rehacer Agregar</translation> <translation id="5838278095973806738">No debes ingresar información confidencial en este sitio (p. ej., contraseñas o tarjetas de crédito), ya que los atacantes podrían robarla.</translation> -<translation id="5860033963881614850">Desactivado</translation> +<translation id="5860033963881614850">No</translation> <translation id="5863847714970149516">Es posible que la página siguiente intente cobrarte dinero</translation> -<translation id="5865951947699094510">Puedes cambiar la configuración de tu cuenta de forma remota.</translation> <translation id="5866257070973731571">Agregar número de teléfono</translation> <translation id="5869405914158311789">No se puede acceder a este sitio</translation> <translation id="5869522115854928033">Contraseñas almacenadas</translation> @@ -907,7 +899,7 @@ <translation id="5893752035575986141">Se aceptan tarjetas de crédito.</translation> <translation id="5901630391730855834">Amarillo</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (sincronizado)</translation> -<translation id="5916664084637901428">Activada</translation> +<translation id="5916664084637901428">Sí</translation> <translation id="5919090499915321845">B10</translation> <translation id="5921639886840618607">¿Quieres guardar la tarjeta en la Cuenta de Google?</translation> <translation id="5922853866070715753">Ya casi</translation> @@ -1170,7 +1162,6 @@ Detalles adicionales: <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Administrar contraseñas…</translation> <translation id="7419106976560586862">Ruta del perfil</translation> -<translation id="7424427397225027541">Controla la forma en que administran los datos de tu cuenta. Google procesa estos datos exclusivamente según las indicaciones del administrador de tu cuenta y solo para los fines que se indiquen.</translation> <translation id="7437289804838430631">Agregar información de contacto</translation> <translation id="7440140511386898319">Explorar sin conexión</translation> <translation id="7441627299479586546">Nombre de usuario o dominio de política incorrecto</translation> @@ -1256,7 +1247,6 @@ Detalles adicionales: <translation id="780301667611848630">No, gracias</translation> <translation id="7805768142964895445">Estado</translation> <translation id="7806344367022510803">Cambia la configuración del motor de búsqueda en Chrome</translation> -<translation id="7810209002420871817">Como administrador de tu cuenta, <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">¿Confirmas que quieres quitar la sugerencia de formulario de Chrome?</translation> <translation id="7815407501681723534">Se encontraron <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> para "<ph name="SEARCH_STRING" />"</translation> diff --git a/chromium/components/strings/components_strings_es.xtb b/chromium/components/strings/components_strings_es.xtb index d1cd835d597..0b92e459700 100644 --- a/chromium/components/strings/components_strings_es.xtb +++ b/chromium/components/strings/components_strings_es.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="es"> -<translation id="1001338328714563407">Como administrador de tu dispositivo y de tu cuenta, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Ahora no</translation> <translation id="1010200102790553230">Cargar la página más tarde</translation> <translation id="1015730422737071372">Proporciónanos más detalles</translation> @@ -365,7 +364,6 @@ <translation id="2948083400971632585">Puedes inhabilitar los servidores proxy configurados para una conexión en la página de configuración.</translation> <translation id="2955913368246107853">Cerrar la barra de búsqueda</translation> <translation id="2969319727213777354">Para establecer una conexión segura, el reloj debe estar configurado correctamente. Esto se debe a que los certificados que utilizan los sitios web para identificarse solo son válidos para períodos de tiempo específicos. Como el reloj de tu dispositivo no está configurado correctamente, Google Chrome no puede verificar estos certificados.</translation> -<translation id="2970515157925768593">Puede cambiar la configuración de tu dispositivo y de tu cuenta de forma remota.</translation> <translation id="2972581237482394796">&Rehacer</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, opción seleccionada actualmente. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Borrar datos</translation> @@ -377,7 +375,6 @@ <translation id="3005723025932146533">Mostrar copia guardada</translation> <translation id="3008447029300691911">Introduce el código CVC de la tarjeta <ph name="CREDIT_CARD" />. Cuando la confirmes, su información se compartirá con este sitio web.</translation> <translation id="3010559122411665027">Entrada de lista "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Como administrador de este dispositivo, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Bloqueado automáticamente</translation> <translation id="3023071826883856138">You4 (sobre)</translation> <translation id="3024663005179499861">Tipo de política incorrecto</translation> @@ -423,7 +420,6 @@ <translation id="3287510313208355388">Descargar cuando haya conexión</translation> <translation id="3293642807462928945">Más información sobre la política <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">No se han encontrado resultados de búsqueda</translation> -<translation id="3311730110465560799">Puede cambiar la configuración de tu dispositivo de forma remota.</translation> <translation id="3320021301628644560">Añadir dirección de facturación</translation> <translation id="3324983252691184275">Carmesí</translation> <translation id="3338095232262050444">Es seguro</translation> @@ -483,7 +479,7 @@ <translation id="3592413004129370115">Italian (sobre)</translation> <translation id="3600246354004376029"><ph name="TITLE" />, <ph name="DOMAIN" />, <ph name="TIME" /></translation> <translation id="3614103345592970299">Tamaño 2</translation> -<translation id="361438452008624280">Entrada de lista "<ph name="LANGUAGE_ID" />": idioma no admitido o desconocido.</translation> +<translation id="361438452008624280">Entrada de lista "<ph name="LANGUAGE_ID" />": idioma no disponible o desconocido.</translation> <translation id="3615877443314183785">Introduce una fecha de vencimiento válida</translation> <translation id="36224234498066874">Borrar datos de navegación...</translation> <translation id="362276910939193118">Mostrar historial completo</translation> @@ -518,7 +514,6 @@ <translation id="3761718714832595332">Ocultar estado</translation> <translation id="3765032636089507299">La página Navegación Segura está en construcción.</translation> <translation id="3778403066972421603">¿Quieres guardar esta tarjeta en tu cuenta de Google y en este dispositivo?</translation> -<translation id="3779973883630527594">La empresa, el centro educativo o la organización que gestiona esta cuenta:</translation> <translation id="3781428340399460090">Rosa fucsia</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Vencimiento: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -718,7 +713,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> dice</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Sin resultados</translation> -<translation id="4945672369594656571">Controla cómo se gestionan los datos de tu dispositivo y de tu cuenta. Google trata los datos de tu dispositivo y de tu cuenta exclusivamente bajo la dirección del administrador de tu dispositivo y de tu cuenta, y solo para los fines especificados por el administrador de tu dispositivo y de tu cuenta.</translation> <translation id="4950898438188848926">Botón de cambio de pestaña; pulsa Intro para cambiar a la pestaña abierta, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Acciones</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -732,7 +726,6 @@ <translation id="5017554619425969104">Texto copiado</translation> <translation id="5018422839182700155">No se puede abrir esta página</translation> <translation id="5019198164206649151">El almacén secundario está en mal estado.</translation> -<translation id="5020154601324912079">Controla cómo se gestionan los datos de tu dispositivo. Google trata los datos de tu dispositivo exclusivamente bajo la dirección del administrador de tu dispositivo y solo para los fines especificados por el administrador de tu dispositivo.</translation> <translation id="5023310440958281426">Consulta las políticas del administrador</translation> <translation id="5029568752722684782">Borrar copia</translation> <translation id="503069730517007720">Se necesita un certificado raíz para "<ph name="SOFTWARE_NAME" />", pero no está instalado. El administrador de TI debe comprobar las instrucciones de configuración de "<ph name="SOFTWARE_NAME" />" para solucionar este problema. <ph name="FURTHER_EXPLANATION" /></translation> @@ -890,7 +883,6 @@ <translation id="5838278095973806738">No deberías introducir información confidencial en este sitio web (por ejemplo, contraseñas o tarjetas de crédito) porque los atacantes podrían robarla.</translation> <translation id="5860033963881614850">No</translation> <translation id="5863847714970149516">Es posible que la página a la que vas a acceder intente aplicar algún cargo</translation> -<translation id="5865951947699094510">Puede cambiar la configuración de tu cuenta de forma remota.</translation> <translation id="5866257070973731571">Añade un número de teléfono</translation> <translation id="5869405914158311789">No se puede acceder a este sitio web</translation> <translation id="5869522115854928033">Contraseñas guardadas</translation> @@ -898,7 +890,7 @@ <translation id="5893752035575986141">Se aceptan tarjetas de crédito.</translation> <translation id="5901630391730855834">Amarillo</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (sincronizado)</translation> -<translation id="5916664084637901428">Activar</translation> +<translation id="5916664084637901428">Activado</translation> <translation id="5919090499915321845">B10</translation> <translation id="5921639886840618607">¿Quieres guardar la tarjeta en tu cuenta de Google?</translation> <translation id="5922853866070715753">Casi hemos acabado</translation> @@ -1158,7 +1150,6 @@ Más información: <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Gestionar contraseñas…</translation> <translation id="7419106976560586862">Ruta del perfil</translation> -<translation id="7424427397225027541">Controla cómo se gestionan los datos de tu cuenta. Google trata los datos de tu cuenta exclusivamente bajo la dirección del administrador de tu cuenta y solo para los fines especificados por el administrador de tu cuenta.</translation> <translation id="7437289804838430631">Añade la información de contacto</translation> <translation id="7440140511386898319">Contenido sin conexión</translation> <translation id="7441627299479586546">Asunto de política incorrecto</translation> @@ -1244,7 +1235,6 @@ Más información: <translation id="780301667611848630">No, gracias</translation> <translation id="7805768142964895445">Estado</translation> <translation id="7806344367022510803">Cambia la configuración del motor de búsqueda en Chrome</translation> -<translation id="7810209002420871817">Como administrador de tu cuenta, <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">¿Eliminar sugerencia de formulario de Chrome?</translation> <translation id="7815407501681723534">Se han encontrado <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> de <ph name="SEARCH_STRING" /></translation> diff --git a/chromium/components/strings/components_strings_et.xtb b/chromium/components/strings/components_strings_et.xtb index abdcc6ec0f5..be7f1de2961 100644 --- a/chromium/components/strings/components_strings_et.xtb +++ b/chromium/components/strings/components_strings_et.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="et"> -<translation id="1001338328714563407">Teie seadme ja konto haldurina, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Mitte praegu</translation> <translation id="1010200102790553230">Laadi leht hiljem</translation> <translation id="1015730422737071372">Esitage lisateavet</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">Seadete lehel saate keelata kõik ühenduse jaoks konfigureeritud puhverserverid.</translation> <translation id="2955913368246107853">Sule leiuriba</translation> <translation id="2969319727213777354">Turvalise ühenduse loomiseks peab kell olema õigesti seadistatud, kuna sertifikaadid, mida veebisaidid kasutavad enda tuvastamiseks, kehtivad ainult teatud perioodi jooksul. Kuna teie seadme kell on vale, ei saa Chrome neid sertifikaate kinnitada.</translation> -<translation id="2970515157925768593">Saab kaugühenduse kaudu teie seadme ja konto seadistust muuta.</translation> <translation id="2972581237482394796">&Tee uuesti</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, praegu valitud. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Kustuta andmed</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">Kuva salvestatud koopia</translation> <translation id="3008447029300691911">Sisestage krediitkaardi <ph name="CREDIT_CARD" /> CVC. Kui selle kinnitate, jagatakse teie kaardi üksikasju selle saidiga.</translation> <translation id="3010559122411665027">Loendi kirje „<ph name="ENTRY_INDEX" />”: <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Selle seadme haldurina, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Automaatselt blokeeritud</translation> <translation id="3023071826883856138">You4 (ümbrik)</translation> <translation id="3024663005179499861">Reegli tüüp on vale</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">Laadi alla, kui ühendus on saadaval</translation> <translation id="3293642807462928945">Lisateave reegli <ph name="POLICY_NAME" /> kohta</translation> <translation id="3303855915957856445">Otsingutulemusi ei leitud</translation> -<translation id="3311730110465560799">Saab teie seadme seadistust kaugühenduse kaudu muuta.</translation> <translation id="3320021301628644560">Arveldusaadressi lisamine</translation> <translation id="3324983252691184275">Tulipunane</translation> <translation id="3338095232262050444">Turvaline</translation> @@ -526,7 +522,6 @@ <translation id="3761718714832595332">Peida olek</translation> <translation id="3765032636089507299">Google'i ohutu sirvimise leht on loomisel.</translation> <translation id="3778403066972421603">Kas soovite selle kaardi salvestada oma Google'i kontole ja sellesse seadmesse?</translation> -<translation id="3779973883630527594">Seda kontot haldav ettevõte, kool või organisatsioon:</translation> <translation id="3781428340399460090">Erkroosa</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Aegub: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -726,7 +721,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> ütleb</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Tulemusi pole</translation> -<translation id="4945672369594656571">Määrab, kuidas teie seadme ja konto andmeid hallatakse. Google töötleb teie seadme ja konto andmeid ainult seadme- ja kontohalduri juhiste järgi ja tema määratud eesmärkidel.</translation> <translation id="4950898438188848926">Vahelehe vahetamise nupp, vajutage sisestusklahvi avatud vahelehe aktiveerimiseks, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Toimingud</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -740,7 +734,6 @@ <translation id="5017554619425969104">Teie kopeeritud tekst</translation> <translation id="5018422839182700155">Seda lehte ei saa avada</translation> <translation id="5019198164206649151">Varusalves esineb probleeme</translation> -<translation id="5020154601324912079">Määrab, kuidas seadme andmeid hallatakse. Google töötleb teie seadme andmeid ainult kontohalduri juhiste järgi ja tema määratud eesmärkidel.</translation> <translation id="5023310440958281426">Tutvuge administraatori reeglitega</translation> <translation id="5029568752722684782">Kustuta koopia</translation> <translation id="503069730517007720">Vaja on tarkvara „<ph name="SOFTWARE_NAME" />” juursertifikaati, kuid see pole installitud. Teie IT-administraator peaks probleemi lahendamiseks tarkvara „<ph name="SOFTWARE_NAME" />” seadistamisjuhised üle vaatama. <ph name="FURTHER_EXPLANATION" /></translation> @@ -898,7 +891,6 @@ <translation id="5838278095973806738">Te ei tohiks sellele saidile sisestada tundlikku teavet (nt paroolid või krediitkaardid), kuna ründajad võivad selle varastada.</translation> <translation id="5860033963881614850">Väljas</translation> <translation id="5863847714970149516">Järgmisel lehel võidakse teilt üritada tasu võtta</translation> -<translation id="5865951947699094510">Saab teie konto seadistust kaugühenduse kaudu muuta.</translation> <translation id="5866257070973731571">Telefoninumbri lisamine</translation> <translation id="5869405914158311789">Selle saidiga ei saa ühendust</translation> <translation id="5869522115854928033">Salvestatud paroolid</translation> @@ -1169,7 +1161,6 @@ Lisateave: <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Halda paroole …</translation> <translation id="7419106976560586862">Profiili tee</translation> -<translation id="7424427397225027541">Juhib teie konto andmete haldamist. Google töötleb teie konto andmeid ainult kontohalduri juhiste järgi ja tema määratud eesmärkidel.</translation> <translation id="7437289804838430631">Lisa kontaktteave</translation> <translation id="7440140511386898319">Uurige võrguühenduseta sisu</translation> <translation id="7441627299479586546">Reegli objekt on vale</translation> @@ -1255,7 +1246,6 @@ Lisateave: <translation id="780301667611848630">Ei, aitäh</translation> <translation id="7805768142964895445">Olek</translation> <translation id="7806344367022510803">Muutke otsingumootori seadeid Chrome'is</translation> -<translation id="7810209002420871817">Teie konto <ph name="ACCOUNT_DOMAIN" /> haldurina:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Kas eemaldada Chrome'ist vormi soovitus?</translation> <translation id="7815407501681723534">Otsingule „<ph name="SEARCH_STRING" />” leiti <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" />.</translation> diff --git a/chromium/components/strings/components_strings_fa.xtb b/chromium/components/strings/components_strings_fa.xtb index 5550731b743..7172e33197e 100644 --- a/chromium/components/strings/components_strings_fa.xtb +++ b/chromium/components/strings/components_strings_fa.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="fa"> -<translation id="1001338328714563407">بهعنوان مدیر دستگاه و حسابتان، <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">اکنون نه</translation> <translation id="1010200102790553230">بار کردن صفحه در فرصتی دیگر</translation> <translation id="1015730422737071372">جزئیات بیشتری ارائه دهید</translation> @@ -148,7 +147,7 @@ <translation id="1671391448414634642">از این به بعد، صفحههای <ph name="SOURCE_LANGUAGE" />، به <ph name="TARGET_LANGUAGE" /> ترجمه خواهند شد.</translation> <translation id="1676269943528358898"><ph name="SITE" /> معمولاً برای محافظت از اطلاعات شما از رمزگذاری استفاده میکند. اما این بار که Chrome تلاش کرد به <ph name="SITE" /> متصل شود، وبسایت اعتبارنامهای نامعمول و نادرست را برگرداند. ممکن است مهاجمی در تلاش باشد خود را بهجای <ph name="SITE" /> معرفی کند یا یک صفحه ورود به سیستم Wi-Fi در ارتباط اختلال ایجاد کرده باشد. اطلاعات شما همچنان ایمن است، زیرا Google Chrome قبل از هرگونه تبادل داده، اتصال را متوقف کرد.</translation> <translation id="168841957122794586">گواهینامه سرور دارای یک کلید رمزنگاری ضعیف است.</translation> -<translation id="1697532407822776718">آمادهاید!</translation> +<translation id="1697532407822776718">همه چیز مرتب است.</translation> <translation id="1703835215927279855">Letter</translation> <translation id="1706954506755087368">{1,plural, =1{این سرور نتوانست ثابت کند این <ph name="DOMAIN" /> است؛ اعتبار گواهی امنیتی آن ظاهراً فردا شروع میشود. ممکن است علت این موضوع پیکربندی اشتباه باشد یا مهاجمی اتصالتان را قطع میکند.}one{این سرور نتوانست ثابت کند این <ph name="DOMAIN" /> است؛ اعتبار گواهی امنیتی آن ظاهراً # روز دیگر شروع میشود. ممکن است علت این موضوع پیکربندی اشتباه باشد یا مهاجمی اتصالتان را قطع میکند.}other{این سرور نتوانست ثابت کند این <ph name="DOMAIN" /> است؛ اعتبار گواهی امنیتی آن ظاهراً # روز دیگر شروع میشود. ممکن است علت این موضوع پیکربندی اشتباه باشد یا مهاجمی اتصالتان را قطع میکند.}}</translation> <translation id="1710259589646384581">OS</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">در صفحه تنظیمات میتوانید همه پراکسیهای پیکربندی شده برای هر اتصال را از کار بیاندازید.</translation> <translation id="2955913368246107853">بستن نوار یافتن</translation> <translation id="2969319727213777354">برای برقراری یک اتصال امن، لازم است ساعت شما درست تنظیم شده باشد. زیرا گواهیهایی که وبسایتها برای شناسایی خودشان استفاده میکنند، تنها برای دورههای زمانی خاصی معتبرند. از آنجا که ساعت دستگاه شما نادرست است، Google Chrome نمیتواند این گواهیها را تأیید کند.</translation> -<translation id="2970515157925768593">میتواند تنظیم دستگاه و حسابتان را ازراهدور تغییر دهد.</translation> <translation id="2972581237482394796">انجام مجدد</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />، درحالحاضر انتخاب شده است. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">پاک کردن دادهها</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">نمایش کپی ذخیره شده</translation> <translation id="3008447029300691911">CVC کارت <ph name="CREDIT_CARD" /> را وارد کنید. بعد از تأیید، جزئیات کارت شما با این سایت به اشتراک گذاشته میشود.</translation> <translation id="3010559122411665027">ورودی فهرست "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">بهعنوان مدیر این دستگاه، <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">مسدودشده بهطور خودکار</translation> <translation id="3023071826883856138">You4 (Envelope)</translation> <translation id="3024663005179499861">نوع خطمشی اشتباه است</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">بارگیری بعد از آنلاین شدن</translation> <translation id="3293642807462928945">درباره خطمشی <ph name="POLICY_NAME" /> بیشتر بدانید</translation> <translation id="3303855915957856445">هیچ نتیجهای برای جستجو یافت نشد</translation> -<translation id="3311730110465560799">میتواند تنظیم دستگاهتان را ازراهدور تغییر دهد.</translation> <translation id="3320021301628644560">افزودن نشانی صورتحساب</translation> <translation id="3324983252691184275">زرشکی</translation> <translation id="3338095232262050444">ایمن</translation> @@ -526,7 +522,6 @@ <translation id="3761718714832595332">پنهان کردن وضعیت</translation> <translation id="3765032636089507299">صفحه «مرور ایمن» در دست ساخت است.</translation> <translation id="3778403066972421603">آیا میخواهید این کارت در حساب Google شما و این دستگاه ذخیره شود؟</translation> -<translation id="3779973883630527594">شرکت، مدرسه، یا سازمانی که این حساب را مدیریت میکند:</translation> <translation id="3781428340399460090">صورتی پررنگ</translation> <translation id="3783418713923659662">مسترکارت</translation> <translation id="3787705759683870569">تاریخ انقضا <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -726,7 +721,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> میگوید</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">نتیجهای پیدا نشد</translation> -<translation id="4945672369594656571">نحوه مدیریت دادههای دستگاه و حسابتان را کنترل میکند. Google دادههای دستگاه و حسابتان را منحصراً تحت هدایت مدیر دستگاه و حسابتان و صرفاً برای اهداف مشخصشده توسط مدیر دستگاه و حساب پردازش میکند.</translation> <translation id="4950898438188848926">دکمه جابهجایی برگه، برای جابهجایی به برگه باز، کلید Enter را فشار دهید، <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">کنشها</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -740,7 +734,6 @@ <translation id="5017554619425969104">نوشتاری که کپی کردهاید</translation> <translation id="5018422839182700155">این صفحه نمیتواند باز شود</translation> <translation id="5019198164206649151">پشتیبانگیری ذخیره در وضعیت نادرست است</translation> -<translation id="5020154601324912079">نحوه پردازش دادههای دستگاهتان را کنترل میکند. Google دادههای دستگاهتان را منحصراً تحت هدایت مدیر دستگاه و صرفاً برای اهداف مشخصشده توسط مدیر دستگاه پردازش میکند.</translation> <translation id="5023310440958281426">خطمشیهای سرپرست سیستمتان را بررسی کنید</translation> <translation id="5029568752722684782">پاک کردن نسخه کپی</translation> <translation id="503069730517007720">برای «<ph name="SOFTWARE_NAME" />» گواهینامه ریشه لازم است اما نصب نشده است. برای رفع این مشکل، سرپرست فناوری اطلاعات شما باید دستورالعملهای پیکربندی مربوط به «<ph name="SOFTWARE_NAME" />» را بررسی کند. <ph name="FURTHER_EXPLANATION" /></translation> @@ -898,7 +891,6 @@ <translation id="5838278095973806738">نباید هیچ اطلاعات حساسی (مثل گذرواژه یا کارت اعتباری) را در این سایت وارد کنید، زیرا ممکن است مهاجمین آنها را سرقت کنند.</translation> <translation id="5860033963881614850">خاموش</translation> <translation id="5863847714970149516">صفحه پیشرو ممکن است تلاش کند از شما پول دریافت کند</translation> -<translation id="5865951947699094510">میتواند تنظیم حسابتان را ازراهدور تغییر دهد.</translation> <translation id="5866257070973731571">افزودن شماره تلفن</translation> <translation id="5869405914158311789">دسترسی به این سایت امکانپذیر نیست</translation> <translation id="5869522115854928033">گذرواژههای ذخیرهشده</translation> @@ -1169,7 +1161,6 @@ <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">مدیریت گذرواژهها…</translation> <translation id="7419106976560586862">مسیر نمایه</translation> -<translation id="7424427397225027541">نحوه پردازش دادههای حسابتان را کنترل میکند. Google دادههای حسابتان را منحصراً تحت هدایت مدیر حسابتان و صرفاً برای اهداف مشخصشده توسط مدیر حساب پردازش میکند.</translation> <translation id="7437289804838430631">افرودن اطلاعات تماس</translation> <translation id="7440140511386898319">کاوش درحالت آفلاین</translation> <translation id="7441627299479586546">موضوع خطمشی اشتباه است</translation> @@ -1255,7 +1246,6 @@ <translation id="780301667611848630">نه متشکرم</translation> <translation id="7805768142964895445">وضعیت</translation> <translation id="7806344367022510803">تنظیمات «موتور جستجو» را در Chrome تغییر دهید</translation> -<translation id="7810209002420871817">بهعنوان مدیر حسابتان، <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">پیشنهاد فرم از Chrome پاک شود؟</translation> <translation id="7815407501681723534"><ph name="NUMBER_OF_RESULTS" /><ph name="SEARCH_RESULTS" /> برای «<ph name="SEARCH_STRING" />» پیدا شد</translation> diff --git a/chromium/components/strings/components_strings_fi.xtb b/chromium/components/strings/components_strings_fi.xtb index 17de3e91b97..a680e76f41d 100644 --- a/chromium/components/strings/components_strings_fi.xtb +++ b/chromium/components/strings/components_strings_fi.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="fi"> -<translation id="1001338328714563407">Laitteesi ja tilisi ylläpitäjänä <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Ei nyt</translation> <translation id="1010200102790553230">Lataa sivu myöhemmin</translation> <translation id="1015730422737071372">Lisätietoja</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">Voit poistaa yhteydelle määritetyt välityspalvelimet käytöstä asetussivulla.</translation> <translation id="2955913368246107853">Sulje hakupalkki</translation> <translation id="2969319727213777354">Kellosi täytyy asettaa oikeaan aikaan, jotta salattu yhteys voidaan muodostaa. Tämä johtuu siitä, että verkkosivustojen tunnistamisessa käytettävät varmenteet ovat voimassa vain tiettyinä aikoina. Chrome ei voi vahvistaa varmenteita, koska laitteesi kello on väärässä ajassa.</translation> -<translation id="2970515157925768593">Voi muuttaa laitteesi ja tilisi kokoonpanoa etänä.</translation> <translation id="2972581237482394796">&Tee uudelleen</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, tällä hetkellä valittuna. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Tyhjennä tiedot</translation> @@ -385,11 +383,10 @@ <translation id="3005723025932146533">Näytä tallennettu kopio</translation> <translation id="3008447029300691911">Anna kortin <ph name="CREDIT_CARD" /> CVC. Vahvistamisen jälkeen korttisi tiedot jaetaan sivuston kanssa.</translation> <translation id="3010559122411665027">Luettelokohde "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Tämän laitteen ylläpitäjänä <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Estetty automaattisesti</translation> <translation id="3023071826883856138">You4 (kirjekuori)</translation> <translation id="3024663005179499861">Väärä käytäntötyyppi</translation> -<translation id="3037605927509011580">Voi räkä!</translation> +<translation id="3037605927509011580">Harmin paikka!</translation> <translation id="3041612393474885105">Varmenteen tiedot</translation> <translation id="3060227939791841287">C9 (kirjekuori)</translation> <translation id="3064966200440839136">Incognito-tilasta poistutaan ulkoisessa sovelluksessa maksamisen vuoksi. Haluatko jatkaa?</translation> @@ -432,7 +429,6 @@ <translation id="3287510313208355388">Lataa, kun verkkoyhteys on muodostettu</translation> <translation id="3293642807462928945">Lisätietoja käytännöstä: <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Ei hakutuloksia</translation> -<translation id="3311730110465560799">Voi muuttaa laitteesi määrityksiä etänä.</translation> <translation id="3320021301628644560">Lisää laskutusosoite</translation> <translation id="3324983252691184275">Karmiininpunainen</translation> <translation id="3338095232262050444">Turvallinen</translation> @@ -527,7 +523,6 @@ <translation id="3761718714832595332">Piilota tila</translation> <translation id="3765032636089507299">Selaussuojasivu on työn alla.</translation> <translation id="3778403066972421603">Haluatko tallentaa tämän kortin Google-tilille ja tälle laitteelle?</translation> -<translation id="3779973883630527594">Tätä tiliä ylläpitävä yritys, oppilaitos tai organisaatio:</translation> <translation id="3781428340399460090">Pinkki</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Vanhenee <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -727,7 +722,6 @@ <translation id="4926159001844873046">Viesti osoitteesta <ph name="SITE" /></translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Ei tuloksia</translation> -<translation id="4945672369594656571">Määrittää, kuinka laite- ja tilidataasi käsitellään. Google käsittelee laite- ja tilidataa ainoastaan laitteen ylläpitäjän ohjeiden mukaisesti ja hänen sekä laitteesi määrittämiin tarkoituksiin.</translation> <translation id="4950898438188848926">Välilehden vaihtopainike, siirry avoimelle välilehdelle painamalla Enter, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Toiminnot</translation> <translation id="4955242332710481440">A5-ekstra</translation> @@ -741,7 +735,6 @@ <translation id="5017554619425969104">Kopioimasi teksti</translation> <translation id="5018422839182700155">Sivun avaaminen epäonnistui</translation> <translation id="5019198164206649151">Tallennustila on virheellisessä tilassa</translation> -<translation id="5020154601324912079">Määrittää, kuinka dataasi käsitellään. Google käsittelee laitteesi dataa ainoastaan laitteen ylläpitäjän ohjeiden mukaisesti ja hänen määrittämiinsä tarkoituksiin.</translation> <translation id="5023310440958281426">Tarkista järjestelmänvalvojan käytännöt</translation> <translation id="5029568752722684782">Poista kopio</translation> <translation id="503069730517007720">Ohjelmiston <ph name="SOFTWARE_NAME" /> juurivarmennetta edellytetään, mutta sitä ei ole asennettu. IT-järjestelmänvalvojan on tutustuttava ohjelmiston <ph name="SOFTWARE_NAME" /> määritysohjeisiin, jotta hän voi korjata tämän ongelman. <ph name="FURTHER_EXPLANATION" /></translation> @@ -899,7 +892,6 @@ <translation id="5838278095973806738">Älä anna tälle sivustolle salasanoja, luottokorttinumeroita tai muita arkaluonteisia tietoja, sillä hyökkääjät saattavat varastaa ne.</translation> <translation id="5860033963881614850">Pois käytöstä</translation> <translation id="5863847714970149516">Avaamasi sivu voi yrittää veloittaa sinulta rahaa</translation> -<translation id="5865951947699094510">Voi muuttaa tilisi kokoonpanoa etänä.</translation> <translation id="5866257070973731571">Lisää puhelinnumero</translation> <translation id="5869405914158311789">Sivustoon ei saada yhteyttä</translation> <translation id="5869522115854928033">Tallennetut salasanat</translation> @@ -1170,7 +1162,6 @@ Lisätietoja: <translation id="741007362987735528">Leveä</translation> <translation id="7416351320495623771">Ylläpidä salasanoja…</translation> <translation id="7419106976560586862">Profiilin polku</translation> -<translation id="7424427397225027541">Määrittää, kuinka tilidataasi käsitellään. Google käsittelee tilidataasi ainoastaan tilin ylläpitäjän ohjeiden mukaisesti ja hänen määrittämiinsä tarkoituksiin.</translation> <translation id="7437289804838430631">Lisää yhteystieto</translation> <translation id="7440140511386898319">Tutki offline-tilassa</translation> <translation id="7441627299479586546">Väärä käytännön aihe</translation> @@ -1256,7 +1247,6 @@ Lisätietoja: <translation id="780301667611848630">Ei kiitos</translation> <translation id="7805768142964895445">Tila</translation> <translation id="7806344367022510803">Muuta hakukoneasetuksia Chromessa</translation> -<translation id="7810209002420871817">Tilisi ylläpitäjänä <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Poistetaanko lomake-ehdotus Chromen tiedoista?</translation> <translation id="7815407501681723534">Haku <ph name="SEARCH_STRING" /> tuotti <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" />.</translation> diff --git a/chromium/components/strings/components_strings_fil.xtb b/chromium/components/strings/components_strings_fil.xtb index cdb1c7bb43d..e13609756c9 100644 --- a/chromium/components/strings/components_strings_fil.xtb +++ b/chromium/components/strings/components_strings_fil.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="fil"> -<translation id="1001338328714563407">Bilang manager ng iyong device at account, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Hindi Ngayon</translation> <translation id="1010200102790553230">I-load ang page sa ibang pagkakataon</translation> <translation id="1015730422737071372">Magbigay ng mga karagdagang detalye</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">Maaari mong i-disable ang anumang mga proxy na naka-configure para sa isang koneksyon mula sa pahina ng mga setting.</translation> <translation id="2955913368246107853">Isara ang bar sa paghahanap</translation> <translation id="2969319727213777354">Upang makapagtatag ng secure na koneksyon, kailangang itakda nang tama ang iyong orasan. Ito ay dahil sa may-bisa lang ang mga certificate na ginagamit ng mga website upang tukuyin ang mga sarili ng mga ito sa loob ng mga partikular na tagal ng panahon. Dahil mali ang orasan ng iyong device, hindi ma-verify ng Google Chrome ang mga certificate na ito.</translation> -<translation id="2970515157925768593">Puwedeng baguhin ang pag-set up ng iyong device at account nang malayuan.</translation> <translation id="2972581237482394796">&I-redo</translation> <translation id="2977665033722899841">Kasalukuyang napili ang <ph name="ROW_NAME" />. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">I-clear ang Data</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">Ipakita ang naka-save na kopya</translation> <translation id="3008447029300691911">Ilagay ang CVC para sa <ph name="CREDIT_CARD" />. Kapag nagkumpirma ka na, ibabahagi ang mga detalye ng iyong card sa site na ito.</translation> <translation id="3010559122411665027">Listahan ng entry na "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Bilang manager ng device na ito, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Awtomatikong na-block</translation> <translation id="3023071826883856138">You4 (Envelope)</translation> <translation id="3024663005179499861">Maling uri ng patakaran</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">I-download kapag online</translation> <translation id="3293642807462928945">Matuto pa tungkol sa patakarang <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Walang nakitang resulta ng paghahanap</translation> -<translation id="3311730110465560799">Puwedeng malayuang baguhin ang pag-set up ng iyong device.</translation> <translation id="3320021301628644560">Magdagdag ng billing address</translation> <translation id="3324983252691184275">Crimson</translation> <translation id="3338095232262050444">Secure</translation> @@ -526,7 +522,6 @@ <translation id="3761718714832595332">Itago ang status</translation> <translation id="3765032636089507299">Kasalukuyang ginagawa ang Ligtas na Pag-browse.</translation> <translation id="3778403066972421603">Gusto mo bang i-save ang card na ito sa iyong Google Account at sa device na ito?</translation> -<translation id="3779973883630527594">Ang kumpanya, paaralan, o organisasyong namamahala sa account na ito:</translation> <translation id="3781428340399460090">Hot Pink</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Mag-e-expire sa <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -726,7 +721,6 @@ <translation id="4926159001844873046">Isinasaad ng <ph name="SITE" /> na</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Walang mga resulta</translation> -<translation id="4945672369594656571">Kinokontrol kung paano pinapamahalaan ang data ng iyong device at account. Pinoproseso ng Google ang data ng iyong device at account nang eksklusibo sa ilalim ng direksyon ng device at account manager mo at para lang sa mga layuning tinukoy ng iyong device at account manager.</translation> <translation id="4950898438188848926">Button sa paglipat ng tab, pindutin ang Enter para lumipat sa nakabukas na tab, na <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Mga Pagkilos</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -740,7 +734,6 @@ <translation id="5017554619425969104">Text na kinopya mo</translation> <translation id="5018422839182700155">Hindi mabuksan ang page na ito</translation> <translation id="5019198164206649151">Hindi maganda ang katayuan ng backing store</translation> -<translation id="5020154601324912079">Kinokontrol kung paano pinapangasiwaan ang data ng iyong device. Pinoproseso ng Google ang data ng iyong device nang eksklusibo sa ilalim ng direksyon ng device manager mo at para lang sa mga layuning tinukoy ng iyong device manager.</translation> <translation id="5023310440958281426">Suriin ang mga patakaran ng iyong administrator</translation> <translation id="5029568752722684782">I-clear ang kopya</translation> <translation id="503069730517007720">Kinakailangan ang root certificate para sa "<ph name="SOFTWARE_NAME" />" ngunit hindi ito naka-install. Dapat tingnan ng IT administrator ang mga tagubilin sa pag-configure para sa "<ph name="SOFTWARE_NAME" />" upang maayos ang problemang ito. <ph name="FURTHER_EXPLANATION" /></translation> @@ -898,7 +891,6 @@ <translation id="5838278095973806738">Hindi ka dapat maglagay ng anumang sensitibong impormasyon sa site na ito (halimbawa, mga password o credit card), dahil maaari itong nakawin ng mga umaatake.</translation> <translation id="5860033963881614850">Naka-off</translation> <translation id="5863847714970149516">Maaari kang singilin sa susunod na page</translation> -<translation id="5865951947699094510">Puwedeng baguhin nang malayuan ang pag-set up ng iyong account.</translation> <translation id="5866257070973731571">Magdagdag ng Numero ng Telepono</translation> <translation id="5869405914158311789">Hindi makakonekta sa site na ito</translation> <translation id="5869522115854928033">Mga naka-save na password</translation> @@ -1169,7 +1161,6 @@ Mga karagdagang detalye: <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Pamahalaan ang Mga Password...</translation> <translation id="7419106976560586862">Path ng Profile</translation> -<translation id="7424427397225027541">Kinokontrol kung paano pinapangasiwaan ang data ng iyong account. Pinoproseso ng Google ang data ng iyong account nang eksklusibo sa ilalim ng direksyon ng account manager mo at para lang sa mga layuning tinukoy ng iyong account manager.</translation> <translation id="7437289804838430631">Magdagdag ng Impormasyon ng Contact</translation> <translation id="7440140511386898319">Mag-explore habang offline</translation> <translation id="7441627299479586546">Maling paksa ng patakaran</translation> @@ -1255,7 +1246,6 @@ Mga karagdagang detalye: <translation id="780301667611848630">Hindi salamat</translation> <translation id="7805768142964895445">Katayuan</translation> <translation id="7806344367022510803">Baguhin ang mga setting ng Search Engine sa Chrome</translation> -<translation id="7810209002420871817">Bilang manager ng iyong account, <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Alisin ang suhestyon sa Chrome?</translation> <translation id="7815407501681723534">Nakakita ng <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> para sa '<ph name="SEARCH_STRING" />'</translation> diff --git a/chromium/components/strings/components_strings_fr.xtb b/chromium/components/strings/components_strings_fr.xtb index b7458d763b5..19f7185e0b7 100644 --- a/chromium/components/strings/components_strings_fr.xtb +++ b/chromium/components/strings/components_strings_fr.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="fr"> -<translation id="1001338328714563407">En tant que responsable de votre appareil et de votre compte, <ph name="ENROLLMENT_DOMAIN" /> :</translation> <translation id="1008557486741366299">Pas maintenant</translation> <translation id="1010200102790553230">Charger la page plus tard</translation> <translation id="1015730422737071372">Fournir des informations supplémentaires</translation> @@ -78,7 +77,7 @@ <ph name="LIST_ITEM" />Votre employeur ou votre établissement scolaire <ph name="LIST_ITEM" />Votre fournisseur d'accès à Internet <ph name="END_LIST" /></translation> -<translation id="1339601241726513588">Domaine d'enregistrement :</translation> +<translation id="1339601241726513588">Domaine d'enregistrement : </translation> <translation id="1340482604681802745">Adresse d'enlèvement</translation> <translation id="1348198688976932919">Ce site contient des applications dangereuses</translation> <translation id="1348779747280417563">Confirmer le nom</translation> @@ -104,7 +103,7 @@ <translation id="1472675084647422956">Plus</translation> <translation id="147358896496811705">2A0</translation> <translation id="1484290072879560759">Sélectionner l'adresse de livraison</translation> -<translation id="1492194039220927094">Diffusion push des règles :</translation> +<translation id="1492194039220927094">Diffusion push des règles : </translation> <translation id="1501859676467574491">Afficher les cartes de votre compte Google</translation> <translation id="1507202001669085618"><p>Ce message s'affiche si vous utilisez un portail Wi-Fi auquel vous devez vous connecter pour accéder à Internet.</p> <p>Pour corriger cette erreur, cliquez sur <strong>Se connecter</strong> sur la page que vous essayez d'ouvrir.</p></translation> @@ -301,14 +300,14 @@ <translation id="2556876185419854533">&Annuler la modification</translation> <translation id="2586657967955657006">Presse-papiers</translation> <translation id="2587730715158995865">Proposé par <ph name="ARTICLE_PUBLISHER" />. Lisez cet article et <ph name="OTHER_ARTICLE_COUNT" /> autres.</translation> -<translation id="2587841377698384444">ID de l'API d'annuaire :</translation> +<translation id="2587841377698384444">ID de l'API d'annuaire : </translation> <translation id="2595719060046994702">Cet appareil et ce compte ne sont pas gérés par une entreprise ni par une autre organisation.</translation> <translation id="2597378329261239068">Ce document est protégé par mot de passe. Veuillez saisir ce dernier.</translation> <translation id="2609632851001447353">Variantes</translation> <translation id="2618023639789766142">C10 (enveloppe)</translation> <translation id="2625385379895617796">Votre horloge est en avance.</translation> <translation id="2634124572758952069">Impossible de trouver l'adresse IP du serveur de <ph name="HOST_NAME" />.</translation> -<translation id="2639739919103226564">État :</translation> +<translation id="2639739919103226564">État : </translation> <translation id="2649204054376361687"><ph name="CITY" />, <ph name="COUNTRY" /></translation> <translation id="2650446666397867134">Accès au fichier refusé</translation> <translation id="2653659639078652383">Valider</translation> @@ -365,7 +364,6 @@ <translation id="2948083400971632585">Vous pouvez désactiver tout proxy configuré pour une connexion à partir de la page des paramètres.</translation> <translation id="2955913368246107853">Fermer la barre de recherche</translation> <translation id="2969319727213777354">Afin d'établir une connexion sécurisée, votre horloge doit être réglée correctement. Les certificats permettant aux sites Web de s'identifier sont en effet valides pendant une période précise. Comme l'horloge de votre appareil est incorrecte, Google Chrome n'est pas en mesure de vérifier la validité des certificats.</translation> -<translation id="2970515157925768593">Peut modifier à distance la configuration de votre appareil et de votre compte.</translation> <translation id="2972581237482394796">&Rétablir</translation> <translation id="2977665033722899841">La ligne "<ph name="ROW_NAME" />" est sélectionnée. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Effacer les données</translation> @@ -377,7 +375,6 @@ <translation id="3005723025932146533">Afficher la copie enregistrée</translation> <translation id="3008447029300691911">Saisissez le code CVC de la carte <ph name="CREDIT_CARD" />. Une fois la validation terminée, les informations relatives à la carte seront partagées avec ce site.</translation> <translation id="3010559122411665027">Entrée de la liste "<ph name="ENTRY_INDEX" />" : <ph name="ERROR" /></translation> -<translation id="3014389611820813634">En tant que responsable de cet appareil, <ph name="ENROLLMENT_DOMAIN" /> :</translation> <translation id="301521992641321250">Bloquée automatiquement</translation> <translation id="3023071826883856138">You4 (enveloppe)</translation> <translation id="3024663005179499861">Type de règle incorrect.</translation> @@ -388,7 +385,7 @@ <translation id="3083099961703215236">{COUNT,plural, =0{Aucun}=1{1 mot de passe}one{# mot de passe}other{# mots de passe}}</translation> <translation id="3095940652251934233">Statement</translation> <translation id="3096100844101284527">Ajouter une adresse d'enlèvement</translation> -<translation id="3105172416063519923">ID d'élément :</translation> +<translation id="3105172416063519923">ID d'élément : </translation> <translation id="3109728660330352905">Vous n'êtes pas autorisé à consulter cette page.</translation> <translation id="3120730422813725195">Elo</translation> <translation id="31207688938192855"><ph name="BEGIN_LINK" />Essayez d'exécuter les diagnostics de connectivité<ph name="END_LINK" />.</translation> @@ -423,7 +420,6 @@ <translation id="3287510313208355388">Télécharger une fois connecté</translation> <translation id="3293642807462928945">En savoir plus sur les règles <ph name="POLICY_NAME" />.</translation> <translation id="3303855915957856445">Aucun résultat de recherche n'a été trouvé.</translation> -<translation id="3311730110465560799">Peut modifier à distance la configuration de votre appareil.</translation> <translation id="3320021301628644560">Ajouter une adresse de facturation</translation> <translation id="3324983252691184275">Pourpre</translation> <translation id="3338095232262050444">Sécurisé</translation> @@ -441,7 +437,7 @@ <translation id="337363190475750230">Révoqué</translation> <translation id="3377188786107721145">Erreur d'analyse de la règle.</translation> <translation id="3380365263193509176">Erreur inconnue.</translation> -<translation id="3380864720620200369">ID client :</translation> +<translation id="3380864720620200369">ID client : </translation> <translation id="3387261909427947069">Modes de paiement</translation> <translation id="3391030046425686457">Adresse de livraison</translation> <translation id="3395827396354264108">Mode d'enlèvement</translation> @@ -455,7 +451,7 @@ <translation id="3443726618221119081">Juuro-Ku-Kai</translation> <translation id="3447661539832366887">Le propriétaire de cet appareil a désactivé le jeu avec le dinosaure.</translation> <translation id="3447884698081792621">Afficher le certificat (émis par <ph name="ISSUER" />)</translation> -<translation id="3452404311384756672">Intervalle de récupération :</translation> +<translation id="3452404311384756672">Intervalle de récupération : </translation> <translation id="3456231139987291353">Number-11 (enveloppe)</translation> <translation id="3461824795358126837">Surligneur</translation> <translation id="3462200631372590220">Masquer les paramètres avancés</translation> @@ -518,7 +514,6 @@ <translation id="3761718714832595332">Masquer l'état</translation> <translation id="3765032636089507299">La page de navigation sécurisée est en cours de création.</translation> <translation id="3778403066972421603">Voulez-vous enregistrer cette carte dans votre compte Google et sur cet appareil ?</translation> -<translation id="3779973883630527594">L'entreprise, l'établissement ou l'organisation qui gère ce compte :</translation> <translation id="3781428340399460090">Rose foncé</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Expire en <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -718,7 +713,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> indique</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Aucun résultat</translation> -<translation id="4945672369594656571">Contrôle la manière dont les données de votre appareil et de votre compte sont traitées. Google traite ces données exclusivement sous la direction du responsable de votre appareil et de votre compte, et uniquement aux fins spécifiées par ce dernier.</translation> <translation id="4950898438188848926">Bouton pour changer d'onglet (appuyez sur Entrée pour passer à l'onglet ouvert, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" />)</translation> <translation id="495170559598752135">Actions</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -732,7 +726,6 @@ <translation id="5017554619425969104">Texte copié</translation> <translation id="5018422839182700155">Impossible d'ouvrir cette page</translation> <translation id="5019198164206649151">L'espace de stockage destiné à la sauvegarde est en mauvais état.</translation> -<translation id="5020154601324912079">Contrôle la manière dont les données de votre appareil sont traitées. Google traite ces données exclusivement sous la direction du responsable de votre appareil et uniquement aux fins spécifiées par ce dernier.</translation> <translation id="5023310440958281426">Vérifiez les règles définies par votre administrateur</translation> <translation id="5029568752722684782">Effacer la copie</translation> <translation id="503069730517007720">Veuillez installer un certificat racine pour "<ph name="SOFTWARE_NAME" />". Nous recommandons à votre administrateur informatique de lire les instructions de configuration du logiciel "<ph name="SOFTWARE_NAME" />" afin de remédier à la situation. <ph name="FURTHER_EXPLANATION" /></translation> @@ -890,7 +883,6 @@ <translation id="5838278095973806738">Vous ne devriez pas saisir d'informations sensibles sur ce site (par exemple, vos mots de passe ou les informations de votre carte de paiement), car elles risquent d'être dérobées par des pirates informatiques.</translation> <translation id="5860033963881614850">Désactivé</translation> <translation id="5863847714970149516">Il se peut que l'accès à la page suivante engendre des frais</translation> -<translation id="5865951947699094510">Peut modifier à distance la configuration de votre compte.</translation> <translation id="5866257070973731571">Ajouter un numéro de téléphone</translation> <translation id="5869405914158311789">Ce site est inaccessible</translation> <translation id="5869522115854928033">Mots de passe enregistrés</translation> @@ -1054,7 +1046,7 @@ <translation id="6895330447102777224">Carte validée</translation> <translation id="6897140037006041989">Agent utilisateur</translation> <translation id="6903319715792422884">Aidez-nous à améliorer la navigation sécurisée en nous envoyant <ph name="BEGIN_WHITEPAPER_LINK" />des informations système et du contenu de pages<ph name="END_WHITEPAPER_LINK" />. <ph name="PRIVACY_PAGE_LINK" /></translation> -<translation id="6915804003454593391">Utilisateur :</translation> +<translation id="6915804003454593391">Utilisateur : </translation> <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> @@ -1099,7 +1091,7 @@ <translation id="7152423860607593928">Number-14 (enveloppe)</translation> <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> et <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> autre}one{<ph name="PAYMENT_METHOD_PREVIEW" /> et <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> autre}other{<ph name="PAYMENT_METHOD_PREVIEW" /> et <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> autres}}</translation> <translation id="7153618581592392745">Lavande</translation> -<translation id="717330890047184534">Identifiant GAIA :</translation> +<translation id="717330890047184534">Identifiant GAIA : </translation> <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> et <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> autre}one{<ph name="SHIPPING_OPTION_PREVIEW" /> et <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> autre}other{<ph name="SHIPPING_OPTION_PREVIEW" /> et <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> autres}}</translation> <translation id="7177397715882417099">Le serveur auquel vous accédez, <ph name="ORIGIN" />, a exigé qu'une règle de sécurité soit appliquée à toutes les demandes qu'il reçoit. Cependant, au lieu d'émettre une règle, il a redirigé le navigateur vers une autre destination, ce qui empêche ce dernier de répondre à votre demande pour <ph name="SITE" />.</translation> <translation id="7179323680825933600">Enregistrer et renseigner les modes de paiement</translation> @@ -1158,7 +1150,6 @@ Informations supplémentaires : <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Gérer les mots de passe…</translation> <translation id="7419106976560586862">Chemin d'accès au profil</translation> -<translation id="7424427397225027541">Contrôle la manière dont les données de votre compte sont traitées. Google traite ces données exclusivement sous la direction du responsable de votre compte et uniquement aux fins spécifiées par ce dernier.</translation> <translation id="7437289804838430631">Ajouter des coordonnées</translation> <translation id="7440140511386898319">Parcourir hors connexion</translation> <translation id="7441627299479586546">Objet de la règle incorrect.</translation> @@ -1232,7 +1223,7 @@ Informations supplémentaires : <translation id="7755287808199759310">Ton parent peut te le débloquer</translation> <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Il est possible qu'un pare-feu ou un logiciel antivirus ait bloqué la connexion.</translation> -<translation id="7759163816903619567">Domaine d'affichage :</translation> +<translation id="7759163816903619567">Domaine d'affichage : </translation> <translation id="7761701407923456692">Le certificat du serveur ne correspond pas à l'URL.</translation> <translation id="7763386264682878361">Analyseur du fichier manifeste du paiement</translation> <translation id="7764225426217299476">Ajouter une adresse</translation> @@ -1244,7 +1235,6 @@ Informations supplémentaires : <translation id="780301667611848630">Non merci</translation> <translation id="7805768142964895445">État</translation> <translation id="7806344367022510803">Modifier les paramètres de moteur de recherche dans Chrome</translation> -<translation id="7810209002420871817">En tant que responsable de votre compte, <ph name="ACCOUNT_DOMAIN" /> :</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Supprimer la suggestion de saisie de formulaire de Chrome ?</translation> <translation id="7815407501681723534"><ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> trouvé(s) pour "<ph name="SEARCH_STRING" />"</translation> @@ -1312,7 +1302,7 @@ Informations supplémentaires : <translation id="8202370299023114387">Conflit</translation> <translation id="8206978196348664717">Prc4 (enveloppe)</translation> <translation id="8211406090763984747">La connexion est sécurisée</translation> -<translation id="8218327578424803826">Position attribuée :</translation> +<translation id="8218327578424803826">Position attribuée : </translation> <translation id="8220146938470311105">C7/C6 (enveloppe)</translation> <translation id="8225771182978767009">La personne qui a configuré cet ordinateur a choisi de bloquer ce site.</translation> <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation> @@ -1320,7 +1310,7 @@ Informations supplémentaires : <translation id="8241707690549784388">La page que vous recherchez a utilisé des informations que vous avez envoyées. Si vous revenez sur cette page, chaque action précédemment effectuée sera répétée. Souhaitez-vous continuer ?</translation> <translation id="8241712895048303527">Bloquer sur ce site</translation> <translation id="8242426110754782860">Continuer</translation> -<translation id="8249320324621329438">Dernière récupération :</translation> +<translation id="8249320324621329438">Dernière récupération : </translation> <translation id="8253091569723639551">Adresse de facturation obligatoire</translation> <translation id="825929999321470778">Afficher tous les mots de passe enregistrés</translation> <translation id="8261506727792406068">Supprimer</translation> @@ -1464,7 +1454,7 @@ Informations supplémentaires : <translation id="9154194610265714752">Mis à jour</translation> <translation id="9157595877708044936">Configuration en cours...</translation> <translation id="9158625974267017556">C6 (enveloppe)</translation> -<translation id="9168814207360376865">Autorise les sites à vérifier si vous avez enregistré des modes de paiement</translation> +<translation id="9168814207360376865">Autoriser les sites à vérifier si vous avez enregistré des modes de paiement</translation> <translation id="9169664750068251925">Toujours bloquer sur ce site</translation> <translation id="9170848237812810038">Ann&uler</translation> <translation id="9171296965991013597">Quitter l'application ?</translation> diff --git a/chromium/components/strings/components_strings_gu.xtb b/chromium/components/strings/components_strings_gu.xtb index 823d3154e27..53ba9e50b56 100644 --- a/chromium/components/strings/components_strings_gu.xtb +++ b/chromium/components/strings/components_strings_gu.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="gu"> -<translation id="1001338328714563407">તમારા ડિવાઇસ અને એકાઉન્ટના મેનેજર તરીકે, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">હમણાં નહીં</translation> <translation id="1010200102790553230">પેજ પછીથી લોડ કરો</translation> <translation id="1015730422737071372">અતિરિક્ત વિગતો પ્રદાન કરો</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">તમે સેટિંગ પેજમાંથી કનેક્શન માટે ગોઠવવામાં આવેલ કોઈપણ પ્રોક્સીઓ બંધ કરી શકો છો.</translation> <translation id="2955913368246107853">શોધ બાર બંધ કરો</translation> <translation id="2969319727213777354">એક સુરક્ષિત કનેક્શન સ્થાપિત કરવા માટે, તમારી ઘડિયાળ યોગ્ય રીતે સેટ હોવી જરૂરી છે. આનું કારણ એ કે વેબસાઇટ્સ તેઓને ઓળખવા માટે જે પ્રમાણપત્રોનો ઉપયોગ કરે છે તે ચોક્કસ સમય અવધિ માટે જ માન્ય હોય છે. તમારા ઉપકરણની ઘડિયાળ ખોટી હોવાને લીધે, Google Chrome આ પ્રમાણપત્રોને ચકાસી શકતું નથી.</translation> -<translation id="2970515157925768593">તમારા ડિવાઇસનું અને એકાઉન્ટનું સેટઅપ રિમોટલી બદલી શકે છે.</translation> <translation id="2972581237482394796">&ફરી કરો</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, વર્તમાનમાં પસંદ કરેલ. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">ડેટા સાફ કરો</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">સાચવેલી કૉપિ બતાવો</translation> <translation id="3008447029300691911"><ph name="CREDIT_CARD" /> માટે CVC દાખલ કરો. એકવાર તમે ખાતરી કરી લો, તે પછી આ સાઇટ સાથે તમારા કાર્ડની વિગતો શેર કરવામાં આવશે.</translation> <translation id="3010559122411665027">"<ph name="ENTRY_INDEX" />" એન્ટ્રીને સૂચિબદ્ધ કરો: <ph name="ERROR" /></translation> -<translation id="3014389611820813634">આ ડિવાઇસના મેનેજર તરીકે, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">આપમેળે અવરોધિત</translation> <translation id="3023071826883856138">You4 (એન્વલપ)</translation> <translation id="3024663005179499861">ખોટો નીતિ પ્રકાર</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">ઑનલાઇન હોય ત્યારે ડાઉનલોડ કરો</translation> <translation id="3293642807462928945"><ph name="POLICY_NAME" /> નીતિ વિશે વધુ જાણો</translation> <translation id="3303855915957856445">કોઈ શોધ પરિણામો મળ્યાં નથી</translation> -<translation id="3311730110465560799">તમારા ડિવાઇસનું સેટઅપ રિમોટલી બદલી શકે છે.</translation> <translation id="3320021301628644560">બિલિંગ સરનામું ઉમેરો</translation> <translation id="3324983252691184275">કિરમજી</translation> <translation id="3338095232262050444">સુરક્ષિત</translation> @@ -525,7 +521,6 @@ <translation id="3761718714832595332">સ્ટેટસ છુપાવો</translation> <translation id="3765032636089507299">Safe Browsing પેજ રચના હેઠળ છે.</translation> <translation id="3778403066972421603">શું તમે આ કાર્ડને તમારા Google એકાઉન્ટ અને આ ડિવાઇસ પર સાચવવા માગો છો?</translation> -<translation id="3779973883630527594">આ એકાઉન્ટને મેનેજ કરનાર કંપની, શાળા અથવા સંસ્થા:</translation> <translation id="3781428340399460090">ચળકતો ગુલાબી</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569"><ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /> માં સમાપ્ત થાય છે</translation> @@ -725,7 +720,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> કહે છે કે</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">પરિણામો નથી</translation> -<translation id="4945672369594656571">તમારા ડિવાઇસના અને એકાઉન્ટના ડેટાના કારભારની રીતનું નિયંત્રણ કરે છે. Google તમારા ડિવાઇસના અને એકાઉન્ટના ડેટાની પ્રક્રિયા એકમાત્ર તમારા ડિવાઇસના અને એકાઉન્ટ મેનેજરના નિર્દેશ અનુસાર અને સંપૂર્ણપણે તમારા ડિવાઇસ અને એકાઉન્ટ મેનેજર દ્વારા ઉલ્લેખિત હેતુઓ માટે કરે છે.</translation> <translation id="4950898438188848926">ટૅબ, સ્વિચ બટન, ખુલ્લા ટૅબ, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /> પર સ્વિચ કરવા માટે Enter દબાવો</translation> <translation id="495170559598752135">ક્રિયાઓ</translation> <translation id="4955242332710481440">A5-અતિરિક્ત</translation> @@ -739,7 +733,6 @@ <translation id="5017554619425969104">તમે કૉપિ કરેલી ટેક્સ્ટ</translation> <translation id="5018422839182700155">આ પૃષ્ઠ ખોલી શકતાં નથી</translation> <translation id="5019198164206649151">બેકઅપ સ્ટોર કરવું ખરાબ સ્થિતિમાં છે</translation> -<translation id="5020154601324912079">તમારા ડિવાઇસના ડેટાના કારભારની રીતનું નિયંત્રણ કરે છે. Google તમારા ડિવાઇસના ડેટાની પ્રક્રિયા એકમાત્ર તમારા ડિવાઇસ મેનેજરના નિર્દેશ અનુસાર અને સંપૂર્ણપણે તમારા ડિવાઇસ મેનેજર દ્વારા ઉલ્લેખિત હેતુઓ માટે કરે છે.</translation> <translation id="5023310440958281426">તમારા વ્યવસ્થાપકની નીતિઓ તપાસો</translation> <translation id="5029568752722684782">કૉપિ સાફ કરો</translation> <translation id="503069730517007720">"<ph name="SOFTWARE_NAME" />" માટેનું રૂટ પ્રમાણપત્ર આવશ્યક છે પરંતુ તે ઇન્સ્ટૉલ કરેલું નથી. આ સમસ્યાના નિવારણ માટે તમારા IT વ્યવસ્થાપકે "<ph name="SOFTWARE_NAME" />" ની ગોઠવણી માટેની સૂચના જોવી જરૂરી છે. <ph name="FURTHER_EXPLANATION" /></translation> @@ -897,7 +890,6 @@ <translation id="5838278095973806738">તમારે આ સાઇટ પર કોઈપણ સંવેદનશીલ માહિતી (ઉદાહરણ તરીકે, પાસવર્ડ્સ અથવા ક્રેડિટ કાર્ડ્સ) દાખલ કરવી જોઈએ નહીં, કારણ કે તે હુમલાખોર દ્વારા ચોરવામાં આવી શકે છે.</translation> <translation id="5860033963881614850">બંધ</translation> <translation id="5863847714970149516">આગળનું પેજ તમને શુલ્ક લાગુ કરી શકે છે</translation> -<translation id="5865951947699094510">તમારા એકાઉન્ટનું સેટઅપ રિમોટલી બદલી શકે છે.</translation> <translation id="5866257070973731571">ફોન નંબર ઉમેરો</translation> <translation id="5869405914158311789">આ સાઇટ પર પહોંચી શકાતું નથી</translation> <translation id="5869522115854928033">સાચવેલા પાસવર્ડ્સ</translation> @@ -1168,7 +1160,6 @@ <translation id="741007362987735528">પહોળાઈ-ફૉર્મેટ</translation> <translation id="7416351320495623771">પાસવર્ડ મેનેજ કરો…</translation> <translation id="7419106976560586862">પ્રોફાઇલ પાથ</translation> -<translation id="7424427397225027541">તમારા એકાઉન્ટના ડેટાના કારભારની રીતનું નિયંત્રણ કરે છે. Google તમારા એકાઉન્ટના ડેટાની પ્રક્રિયા એકમાત્ર તમારા એકાઉન્ટ મેનેજરના નિર્દેશ અનુસાર અને સંપૂર્ણપણે તમારા એકાઉન્ટ મેનેજર દ્વારા ઉલ્લેખિત હેતુઓ માટે કરે છે.</translation> <translation id="7437289804838430631">સંપર્ક માહિતી ઉમેરો</translation> <translation id="7440140511386898319">ઑફલાઇન હો તે સમયે જાણકારી મેળવો</translation> <translation id="7441627299479586546">ખોટો નીતિ વિષય</translation> @@ -1254,7 +1245,6 @@ <translation id="780301667611848630">નહીં, આભાર</translation> <translation id="7805768142964895445">સ્થિતિ</translation> <translation id="7806344367022510803">Chromeમાં સર્ચ એંજિનની સેટિંગ બદલો</translation> -<translation id="7810209002420871817">તમારા <ph name="ACCOUNT_DOMAIN" /> એકાઉન્ટના મેનેજર તરીકે:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Chrome માંથી ફોર્મ સૂચનો દૂર કરીએ?</translation> <translation id="7815407501681723534">'<ph name="SEARCH_STRING" />' માટે <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> મળ્યાં</translation> diff --git a/chromium/components/strings/components_strings_hi.xtb b/chromium/components/strings/components_strings_hi.xtb index dfc31ef0ca2..2a54bd6fde2 100644 --- a/chromium/components/strings/components_strings_hi.xtb +++ b/chromium/components/strings/components_strings_hi.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="hi"> -<translation id="1001338328714563407">आपके डिवाइस और खाते का प्रबंधक होने के नाते, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">अभी नहीं</translation> <translation id="1010200102790553230">पेज को बाद में लोड करें</translation> <translation id="1015730422737071372">अतिरिक्त विवरण प्रदान करें</translation> @@ -270,7 +269,7 @@ <translation id="2380886658946992094">कानूनी</translation> <translation id="2384307209577226199">एंटरप्राइज़ डिफ़ॉल्ट</translation> <translation id="2386255080630008482">सर्वर का प्रमाणपत्र निरस्त कर दिया गया है.</translation> -<translation id="2392959068659972793">कोई भी मान सेट नहीं की गई नीतियां दिखाएं</translation> +<translation id="2392959068659972793">ऐसी नीतियां दिखाएं जिनके लिए कोई मान सेट नहीं किया गया है</translation> <translation id="239429038616798445">शिपिंग का यह तरीका उपलब्ध नहीं है. कोई दूसरा तरीका आज़माएं.</translation> <translation id="2396249848217231973">मिटाना &पहले जैसा करें</translation> <translation id="2410754574180102685">सरकारी-कानूनी</translation> @@ -372,7 +371,6 @@ <translation id="2948083400971632585">आप किसी कनेक्शन के लिए कॉन्फ़िगर की गई किसी भी प्रॉक्सी को सेटिंग पेज से बंद कर सकते हैं.</translation> <translation id="2955913368246107853">खोज बार बंद करें</translation> <translation id="2969319727213777354">सुरक्षित कनेक्शन स्थापित करने के लिए, आपकी घड़ी को सही तरीके से सेट किए जाने की आवश्यकता है. ऐसा इसलिए क्योंकि वेबसाइटों द्वारा स्वयं की पहचान करने के लिए उपयोग किए जाने वाले प्रमाणपत्र केवल विशिष्ट समयावधियों के लिए ही मान्य होते हैं. चूंकि आपके डिवाइस की घड़ी गलत है, इसलिए Google Chrome इन प्रमाणपत्रों का सत्यापन नहीं कर सकता.</translation> -<translation id="2970515157925768593">आपके डिवाइस और खाता सेटअप में दूर से बदलाव कर सकती है.</translation> <translation id="2972581237482394796">&फिर से करें</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, इस समय चुना गया है. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">डेटा हटाएं</translation> @@ -384,7 +382,6 @@ <translation id="3005723025932146533">सहेजी गई कॉपी दिखाएं</translation> <translation id="3008447029300691911"><ph name="CREDIT_CARD" /> का CVC डालें. आपकी तरफ से पुष्टि हो जाने पर, आपके कार्ड के विवरण इस साइट के साथ शेयर किए जाएंगे.</translation> <translation id="3010559122411665027">सूची प्रविष्टि "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">इस डिवाइस का प्रबंधक होने के नाते, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">ऑटोमैटिक रूप से ब्लॉक है</translation> <translation id="3023071826883856138">यू4 (एन्वेलप)</translation> <translation id="3024663005179499861">गलत नीति प्रकार</translation> @@ -429,7 +426,6 @@ <translation id="3287510313208355388">ऑनलाइन होने पर डाउनलोड करें</translation> <translation id="3293642807462928945"><ph name="POLICY_NAME" /> नीति के बारे में ज़्यादा जानें</translation> <translation id="3303855915957856445">कोई खोज नतीजे नहीं मिले</translation> -<translation id="3311730110465560799">आपके डिवाइस का सेटअप दूर से बदल सकती है.</translation> <translation id="3320021301628644560">बिलिंग पता जोड़ें</translation> <translation id="3324983252691184275">गहरा लाल</translation> <translation id="3338095232262050444">सुरक्षित</translation> @@ -461,7 +457,7 @@ <translation id="3443726618221119081">जूरो-कु-काई</translation> <translation id="3447661539832366887">इस डिवाइस के मालिक ने डायनासोर गेम को बंद कर दिया है.</translation> <translation id="3447884698081792621">प्रमाणपत्र (<ph name="ISSUER" /> की ओर से जारी किया गया) दिखाएं</translation> -<translation id="3452404311384756672">प्राप्ति अंतराल:</translation> +<translation id="3452404311384756672">दो रीफ़्रेश के बीच का अंतराल:</translation> <translation id="3456231139987291353">संख्या-11 (एन्वेलप)</translation> <translation id="3461824795358126837">हाइलाइटर</translation> <translation id="3462200631372590220">बेहतर को छिपाएं</translation> @@ -518,13 +514,12 @@ <translation id="3736520371357197498">अगर आप अपनी सुरक्षा संबंधी जोखिमों को समझते हैं तो, खतरनाक प्रोग्राम हटाए जाने से पहले आप <ph name="BEGIN_LINK" />इस असुरक्षित साइट पर विज़िट<ph name="END_LINK" /> कर सकते हैं.</translation> <translation id="3744899669254331632">आप इस समय <ph name="SITE" /> पर नहीं जा सकते क्योंकि वेबसाइट ने ऐसे अव्यवस्थित क्रेडेंशियल भेजे थे जिन्हें क्रोमियम प्रोसेस नहीं कर सकता. नेटवर्क की गड़बड़ी और हमले आमतौर पर कुछ समय के लिए होते हैं, इसलिए हो सकता है कि यह पेज बाद में काम करेगा.</translation> <translation id="3745099705178523657">आपके पुष्टि करने के बाद, आपके Google खाते के कार्ड का ब्यौरा इस साइट से शेयर किया जाएगा.</translation> -<translation id="3748148204939282805"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> पर मौजूद हमलावर आपको सॉफ़्टवेयर इंस्टॉल करने या अपनी व्यक्तिगत जानकारी (उदाहरण के लिए, पासवर्ड, फ़ोन नंबर या क्रेडिट कार्ड) का खुलासा करने जैसा खतरनाक काम करने के लिए फंसा सकते हैं. <ph name="BEGIN_LEARN_MORE_LINK" />ज़्यादा जानें<ph name="END_LEARN_MORE_LINK" /></translation> +<translation id="3748148204939282805"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> पर मौजूद हमलावर आपको सॉफ़्टवेयर इंस्टॉल करने या आपकी व्यक्तिगत जानकारी (उदाहरण के लिए, पासवर्ड, फ़ोन नंबर या क्रेडिट कार्ड) हासिल करने जैसा खतरनाक काम करने के लिए फंसा सकते हैं. <ph name="BEGIN_LEARN_MORE_LINK" />ज़्यादा जानें<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="375403751935624634">सर्वर गड़बड़ी के कारण अनुवाद विफल.</translation> <translation id="3759461132968374835">आपने हाल में खराबी की कोई रिपोर्ट नहीं की है. खराबी रिपोर्ट बंद होने पर होने वाली खराबी यहां दिखाई नहीं देगी.</translation> <translation id="3761718714832595332">स्थिति छिपाएं</translation> <translation id="3765032636089507299">सुरक्षित ब्राउज़िंग पेज अभी बन रहा है.</translation> <translation id="3778403066972421603">क्या आप इस कार्ड को अपने Google खाते में और इस डिवाइस में सेव करना चाहते हैं?</translation> -<translation id="3779973883630527594">वह कंपनी, स्कूल या संगठन जो इस खाते का प्रबंधन करता है:</translation> <translation id="3781428340399460090">चमकीला गुलाबी</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569"><ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /> में खत्म होगा</translation> @@ -724,7 +719,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> का कहना है कि</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">कोई परिणाम नहीं</translation> -<translation id="4945672369594656571">यह नीति नियंत्रित करती है कि आपके डिवाइस और खाते का डेटा किस तरह प्रबंधित किया जाता है. आपके डिवाइस और खाता प्रबंधक के निर्देश के मुताबिक और सिर्फ़ इन दोनों के बताए हुए मकसदों के लिए, Google खास तौर से आपके डिवाइस और खाते का डेटा प्रोसेस करता है.</translation> <translation id="4950898438188848926">'टैब' बदलने का बटन, नए टैब पर जाने के लिए Enter दबाएं, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">क्रियाएं</translation> <translation id="4955242332710481440">ए5-एक्स्ट्रा</translation> @@ -738,7 +732,6 @@ <translation id="5017554619425969104">आपका कॉपी किया हुआ टेक्स्ट</translation> <translation id="5018422839182700155">यह पेज खुल नहीं पा रहा है</translation> <translation id="5019198164206649151">बैकिंग संग्रह खराब स्थिति में है</translation> -<translation id="5020154601324912079">यह नीति नियंत्रित करती है कि आपका डिवाइस डेटा किस तरह प्रबंधित किया जाता है. Google खास तौर पर आपके डिवाइस प्रबंधक के निर्देश के मुताबिक और सिर्फ़ उनके बताए हुए मकसदों के लिए, आपका डिवाइस डेटा प्रोसेस करता है.</translation> <translation id="5023310440958281426">अपने एडमिन की नीतियां देखें</translation> <translation id="5029568752722684782">स्पष्ट कॉपी</translation> <translation id="503069730517007720">"<ph name="SOFTWARE_NAME" />" के रूट प्रमाणपत्र की ज़रूरत है लेकिन वह इंस्टॉल नहीं है. यह समस्या ठीक करने के लिए आपके आईटी व्यवस्थापक को "<ph name="SOFTWARE_NAME" />" के कॉन्फ़िगरेशन से जुड़े निर्देशों पर नज़र डालनी चाहिए. <ph name="FURTHER_EXPLANATION" /></translation> @@ -868,13 +861,13 @@ <translation id="5675650730144413517">यह पेज काम नहीं कर रहा है</translation> <translation id="5684874026226664614">ओह. इस पेज का अनुवाद नहीं किया जा सका.</translation> <translation id="5685654322157854305">शिपिंग पता जोड़ें</translation> -<translation id="5689199277474810259">JSON में निर्यात करें</translation> +<translation id="5689199277474810259">JSON में एक्सपोर्ट करें</translation> <translation id="5689516760719285838">स्थान</translation> <translation id="570530837424789914">प्रबंधित करें...</translation> <translation id="57094364128775171">मज़बूत पासवर्ड सुझाएं…</translation> <translation id="5710435578057952990">इस वेबसाइट की पहचान सत्यापित नहीं की गई है.</translation> <translation id="5719499550583120431">प्रीपेड कार्ड स्वीकार किए जाते हैं.</translation> -<translation id="5720705177508910913">वर्तमान उपयोगकर्ता</translation> +<translation id="5720705177508910913">मौजूदा उपयोगकर्ता</translation> <translation id="5728056243719941842">सी5 (एन्वेलॉप)</translation> <translation id="5730040223043577876">अगर आपने अपने पासवर्ड का दूसरी साइटों पर दोबारा इस्तेमाल किया है, तो Chrome आपको उसे रीसेट करने का सुझाव देता है.</translation> <translation id="5732392974455271431">आपके अभिभावक इसे आपके लिए अनवरोधित कर सकते हैं</translation> @@ -896,7 +889,6 @@ <translation id="5838278095973806738">आपको इस साइट पर कोई भी संवेदनशील जानकारी (उदाहरण के लिए, पासवर्ड या क्रेडिट कार्ड) नहीं डालनी चाहिए, क्योंकि उसे हमलावर चुरा सकते हैं.</translation> <translation id="5860033963881614850">बंद</translation> <translation id="5863847714970149516">आगे आने वाला पेज आपसे शुल्क लेने की कोशिश कर सकता है</translation> -<translation id="5865951947699094510">आपके खाता सेटअप में दूर से बदलाव कर सकती है.</translation> <translation id="5866257070973731571">फ़ोन नंबर जोड़ें</translation> <translation id="5869405914158311789">इस साइट तक नहीं पहुंचा जा सकता</translation> <translation id="5869522115854928033">सेव किए गए पासवर्ड</translation> @@ -933,7 +925,7 @@ <translation id="6040143037577758943">बंद करें</translation> <translation id="6044573915096792553">आकार 12</translation> <translation id="6047233362582046994">अगर आप अपनी सुरक्षा को होने वाले खतरों के बारे में जानते हैं तो, खतरनाक ऐप्लिकेशन हटाए जाने से पहले आप <ph name="BEGIN_LINK" />इस साइट पर जा<ph name="END_LINK" /> सकते हैं.</translation> -<translation id="6047927260846328439">यह सामग्री आपसे धोखे से सॉफ़्टवेयर इंस्टॉल करवाने या व्यक्तिगत जानकारी का खुलासा करवाने की कोशिश कर सकती है. <ph name="BEGIN_LINK" />फिर भी दिखाएं<ph name="END_LINK" /></translation> +<translation id="6047927260846328439">यह सामग्री आपसे धोखे से सॉफ़्टवेयर इंस्टॉल करवाने या व्यक्तिगत जानकारी मुहैया करवाने की कोशिश कर सकती है. <ph name="BEGIN_LINK" />फिर भी दिखाएं<ph name="END_LINK" /></translation> <translation id="6051221802930200923">आप इस समय <ph name="SITE" /> पर नहीं जा सकते क्योंकि वेबसाइट, प्रमाणपत्र पिनिंग का उपयोग करती है. नेटवर्क की गड़बड़ियां और हमले आमतौर पर कुछ समय के लिए होते हैं इसलिए यह पेज शायद बाद में ठीक से काम करेगा.</translation> <translation id="6052284303005792909">•</translation> <translation id="6058977677006700226">क्या आप अपने कार्ड का इस्तेमाल सभी डिवाइस पर करना चाहते हैं?</translation> @@ -1167,7 +1159,6 @@ <translation id="741007362987735528">चौड़े पेज वाला फ़ॉर्मैट</translation> <translation id="7416351320495623771">पासवर्ड प्रबंधित करें…</translation> <translation id="7419106976560586862">प्रोफ़ाइल पाथ</translation> -<translation id="7424427397225027541">यह नीति नियंत्रित करती है कि आपके खाते का डेटा किस तरह प्रबंधित किया जाता है. आपके खाता प्रबंधक के निर्देश के मुताबिक और सिर्फ़ उनके हुए मकसदों के लिए, Google खास तौर से आपके खाते का डेटा प्रोसेस करता है.</translation> <translation id="7437289804838430631">संपर्क जानकारी जोड़ें</translation> <translation id="7440140511386898319">ऑफ़लाइन होने पर खोजें</translation> <translation id="7441627299479586546">गलत नीति विषय</translation> @@ -1190,7 +1181,7 @@ <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">इस साइट से आपका कनेक्शन निजी नहीं है</translation> <translation id="7535087603100972091">मान</translation> -<translation id="7537536606612762813">आवश्यक</translation> +<translation id="7537536606612762813">ज़रूरी है</translation> <translation id="7538364083937897561">ए2 (एन्वेलप)</translation> <translation id="7542403920425041731">आपकी तरफ से पुष्टि हो जाने पर, आपके कार्ड के विवरण इस साइट के साथ शेयर किए जाएंगे.</translation> <translation id="7542995811387359312">अपने आप क्रेडिट कार्ड भरना अक्षम किया गया है क्योंकि यह फ़ॉर्म किसी सुरक्षित कनेक्शन का उपयोग नहीं करता है.</translation> @@ -1253,7 +1244,6 @@ <translation id="780301667611848630">नहीं, रहने दें</translation> <translation id="7805768142964895445">स्थिति</translation> <translation id="7806344367022510803">Chrome में जाकर 'सर्च इंजन' सेटिंग बदलें</translation> -<translation id="7810209002420871817">अपने खाते <ph name="ACCOUNT_DOMAIN" /> का प्रबंधक होने के नाते:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Chrome से फ़ॉर्म सुझाव को निकालें?</translation> <translation id="7815407501681723534">'<ph name="SEARCH_STRING" />' के लिए <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> मिले</translation> @@ -1278,7 +1268,7 @@ <translation id="7956713633345437162">मोबाइल बुकमार्क</translation> <translation id="7961015016161918242">कभी नहीं</translation> <translation id="7977894662897852582">ईडीपी</translation> -<translation id="7995512525968007366">निर्दिष्ट नहीं किया गया</translation> +<translation id="7995512525968007366">बताया नहीं गया है</translation> <translation id="800218591365569300">जगह खाली करने के लिए दूसरे टैब या प्रोग्राम बंद करके देखें.</translation> <translation id="8004582292198964060">ब्राउज़र</translation> <translation id="8009225694047762179">पासवर्ड संभालें</translation> @@ -1329,7 +1319,7 @@ <translation id="8241707690549784388">आप जिस पेज को ढूंढ रहे हैं उसने आपकी डाली गई जानकारी का इस्तेमाल किया है. उस पेज पर वापस लौटने से आपकी कोई कार्रवाई दोहराई जा सकती है. क्या आप जारी रखना चाहते हैं?</translation> <translation id="8241712895048303527">इस साइट पर ब्लॉक करें</translation> <translation id="8242426110754782860">आगे बढ़ें</translation> -<translation id="8249320324621329438">पिछली बार प्राप्त किया गया:</translation> +<translation id="8249320324621329438">इससे पहले कब रीफ़्रेश हुआ था:</translation> <translation id="8253091569723639551">बिलिंग पता आवश्यक</translation> <translation id="825929999321470778">सेव किए गए सभी पासवर्ड दिखाएं</translation> <translation id="8261506727792406068">मिटाएं</translation> @@ -1338,7 +1328,7 @@ <translation id="8281084378435768645">बड़े आकार वाली फ़ोटो</translation> <translation id="8286036467436129157">साइन इन करें</translation> <translation id="8288807391153049143">प्रमाणपत्र दिखाएं</translation> -<translation id="8289355894181816810">अगर आप सुनिश्चित नहीं हैं कि इसका क्या मतलब है, तो अपने नेटवर्क व्यवस्थापक से संपर्क करें.</translation> +<translation id="8289355894181816810">अगर आप पक्का नहीं हैं कि इसका क्या मतलब है, तो अपने नेटवर्क व्यवस्थापक से संपर्क करें.</translation> <translation id="8293206222192510085">बुकमार्क जोड़ें</translation> <translation id="8294431847097064396">स्रोत</translation> <translation id="8298115750975731693">आप जिस वाई-फ़ाई का उपयोग कर रहे हैं (<ph name="WIFI_NAME" />) उसके लिए आपको <ph name="BEGIN_BOLD" /><ph name="LOGIN_URL" /><ph name="END_BOLD" /> पर जाने की ज़रूरत हो सकती है.</translation> @@ -1439,7 +1429,7 @@ <translation id="8987927404178983737">माह</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">साइट में आगे हानिकारक प्रोग्राम हैं</translation> -<translation id="8997023839087525404">सर्वर ने एक प्रमाणपत्र प्रस्तुत किया है, जिसे प्रमाणपत्र पारदर्शिता पॉलिसी का उपयोग करके सार्वजनिक रूप से प्रकट नहीं किया गया था. कुछ प्रमाणपत्रों के लिए यह सुनिश्चित करना आवश्यक है कि वे विश्वसनीय हैं और आक्रमणकर्ताओं से रक्षा करते हैं.</translation> +<translation id="8997023839087525404">सर्वर ने एक प्रमाणपत्र प्रस्तुत किया है, जिसे प्रमाणपत्र पारदर्शिता पॉलिसी का उपयोग करके सार्वजनिक रूप से प्रकट नहीं किया गया था. कुछ प्रमाणपत्रों के लिए यह पक्का करना आवश्यक है कि वे विश्वसनीय हैं और आक्रमणकर्ताओं से रक्षा करते हैं.</translation> <translation id="9001074447101275817">प्रॉक्सी <ph name="DOMAIN" /> के लिए उपयोगकर्ता नाम और पासवर्ड की आवश्यकता है.</translation> <translation id="9004367719664099443">वीआर सेशन चल रहा है</translation> <translation id="9005998258318286617">PDF दस्तावेज़ लोड नहीं किया जा सका.</translation> diff --git a/chromium/components/strings/components_strings_hr.xtb b/chromium/components/strings/components_strings_hr.xtb index f8b957d270a..7c5d38901d5 100644 --- a/chromium/components/strings/components_strings_hr.xtb +++ b/chromium/components/strings/components_strings_hr.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="hr"> -<translation id="1001338328714563407">Kao upravitelj vašeg uređaja i računa <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Ne sada</translation> <translation id="1010200102790553230">Učitaj stranicu kasnije</translation> <translation id="1015730422737071372">Navedite dodatne pojedinosti</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">Možete onemogućiti sve proxyje konfigurirane za vezu sa stranice postavki.</translation> <translation id="2955913368246107853">Zatvori traku za traženje</translation> <translation id="2969319727213777354">Za uspostavu sigurne veze sat mora biti točno postavljen jer certifikati pomoću kojih se web-lokacije međusobno identificiraju vrijede samo određeno vrijeme. Budući da vaš sat nije točan, Chrome ne može potvrditi te certifikate.</translation> -<translation id="2970515157925768593">može daljinski promijeniti postavke uređaja i računa.</translation> <translation id="2972581237482394796">&Vrati poništeno</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, trenutačno odabrano. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Izbriši podatke</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">Prikaži spremljenu kopiju</translation> <translation id="3008447029300691911">Unesite CVC za karticu <ph name="CREDIT_CARD" />. Nakon što ih potvrdite, podaci o kartici dijelit će se s ovom web-lokacijom.</translation> <translation id="3010559122411665027">Unos popisa "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Kao upravitelj ovog uređaja <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Automatski blokirano</translation> <translation id="3023071826883856138">You4 (omotnica)</translation> <translation id="3024663005179499861">Pogrešna vrsta pravila</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">Preuzmi online</translation> <translation id="3293642807462928945">Saznajte više o pravilu <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Nisu pronađeni rezultati pretraživanja</translation> -<translation id="3311730110465560799">može daljinski promijeniti postavke uređaja.</translation> <translation id="3320021301628644560">Dodajte adresu za naplatu</translation> <translation id="3324983252691184275">Grimizna</translation> <translation id="3338095232262050444">Sigurno</translation> @@ -525,7 +521,6 @@ <translation id="3761718714832595332">Sakrij status</translation> <translation id="3765032636089507299">Stranica Sigurno pregledavanje trenutačno je u izradi.</translation> <translation id="3778403066972421603">Želite li spremiti ovu karticu na svoj Google račun i na ovaj uređaj?</translation> -<translation id="3779973883630527594">Tvrtka, škola ili organizacija koja upravlja tim računom:</translation> <translation id="3781428340399460090">Jarko ružičasta</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Istječe <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -725,7 +720,6 @@ <translation id="4926159001844873046">Na web-lokaciji <ph name="SITE" /> navodi se sljedeće</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Nema rezultata</translation> -<translation id="4945672369594656571">određuje način rukovanja podacima uređaja i računa. Google obrađuje podatke uređaja i računa isključivo prema uputama upravitelja uređaja i računa te jedino u svrhe koje odredi upravitelj uređaja i računa.</translation> <translation id="4950898438188848926">Gumb za promjenu kartice, pritisnite Enter za prebacivanje na otvorenu karticu, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Radnje</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -739,7 +733,6 @@ <translation id="5017554619425969104">Tekst koji ste kopirali</translation> <translation id="5018422839182700155">Stranica se ne može otvoriti</translation> <translation id="5019198164206649151">Sigurnosno pohranjivanje u neispravnom je stanju</translation> -<translation id="5020154601324912079">određuje način rukovanja podacima uređaja. Google obrađuje podatke uređaja isključivo prema uputama upravitelja uređaja i jedino u svrhe koje odredi upravitelj uređaja.</translation> <translation id="5023310440958281426">Provjerite pravila svojeg administratora</translation> <translation id="5029568752722684782">Izbriši kopiju</translation> <translation id="503069730517007720">Potreban je korijenski certifikat za "<ph name="SOFTWARE_NAME" />", ali nije instaliran. Vaš IT administrator trebao bi pogledati upute za konfiguraciju softvera "<ph name="SOFTWARE_NAME" />" kako bi riješio taj problem. <ph name="FURTHER_EXPLANATION" /></translation> @@ -897,7 +890,6 @@ <translation id="5838278095973806738">Na ovu web-lokaciju nemojte unositi osjetljive podatke (na primjer, zaporke ili kreditne kartice) jer su je možda ukrali napadači.</translation> <translation id="5860033963881614850">Isključeno</translation> <translation id="5863847714970149516">Stranica koja će se otvoriti može vam pokušati nešto naplatiti</translation> -<translation id="5865951947699094510">može daljinski promijeniti postavke računa.</translation> <translation id="5866257070973731571">Dodajte telefonski broj</translation> <translation id="5869405914158311789">Web-lokacija ne može se dohvatiti</translation> <translation id="5869522115854928033">Spremljene zaporke</translation> @@ -1168,7 +1160,6 @@ Dodatne pojedinosti: <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Upravljaj zaporkama…</translation> <translation id="7419106976560586862">Putanja profila</translation> -<translation id="7424427397225027541">određuje način rukovanja podacima računa. Google obrađuje podatke računa isključivo prema uputama upravitelja računa i jedino u svrhe koje odredi upravitelj računa.</translation> <translation id="7437289804838430631">Dodajte podatke za kontakt</translation> <translation id="7440140511386898319">Istraživanje dok ste offline</translation> <translation id="7441627299479586546">Pogrešan predmet pravila</translation> @@ -1254,7 +1245,6 @@ Dodatne pojedinosti: <translation id="780301667611848630">Ne, hvala</translation> <translation id="7805768142964895445">Status</translation> <translation id="7806344367022510803">Promijenite postavke tražilice u Chromeu</translation> -<translation id="7810209002420871817">Kao upravitelj vašeg računa <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Želite li s Chromea ukloniti prijedlog za obrasce?</translation> <translation id="7815407501681723534">Pronađeno <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> za "<ph name="SEARCH_STRING" />"</translation> diff --git a/chromium/components/strings/components_strings_hu.xtb b/chromium/components/strings/components_strings_hu.xtb index 7c693c27c4f..7c0b2193cee 100644 --- a/chromium/components/strings/components_strings_hu.xtb +++ b/chromium/components/strings/components_strings_hu.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="hu"> -<translation id="1001338328714563407">Eszköze és fiókja kezelőjeként a(z) <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Ne most</translation> <translation id="1010200102790553230">Oldal betöltése később</translation> <translation id="1015730422737071372">További részletek megadása</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">Bármelyik kapcsolatlétesítésre használt proxyt letilthatja a beállítások oldalon.</translation> <translation id="2955913368246107853">Keresősáv bezárása</translation> <translation id="2969319727213777354">Biztonságos kapcsolat létrehozásához az órát pontosan be kell állítani. Ez azért szükséges, mert a webhelyek által az azonosításukra használt tanúsítványok csak adott ideig érvényesek. Mivel az eszköz órája nem pontos, a Google Chrome nem tudja ellenőrizni ezeket a tanúsítványokat.</translation> -<translation id="2970515157925768593">Módosíthatja távolról az eszköz és a fiók beállítását.</translation> <translation id="2972581237482394796">&Újra</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" /> van jelenleg kiválasztva. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Adatok törlése</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">Mentett másolat megjelenítése</translation> <translation id="3008447029300691911">Adja meg a(z) <ph name="CREDIT_CARD" /> kártya CVC-kódját. Az ellenőrzést követően a böngésző megosztja kártyaadatait ezzel a webhellyel.</translation> <translation id="3010559122411665027">"<ph name="ENTRY_INDEX" />." listabejegyzés: <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Eszköze kezelőjeként a(z) <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Automatikusan letiltva</translation> <translation id="3023071826883856138">You4 (boríték)</translation> <translation id="3024663005179499861">Nem megfelelő irányelvtípus</translation> @@ -429,7 +426,6 @@ <translation id="3287510313208355388">Letöltés online állapotban</translation> <translation id="3293642807462928945">További információ a(z) <ph name="POLICY_NAME" /> házirendről</translation> <translation id="3303855915957856445">Nincs találat</translation> -<translation id="3311730110465560799">Módosíthatja távolról az eszköz beállítását.</translation> <translation id="3320021301628644560">Számlázási cím hozzáadása</translation> <translation id="3324983252691184275">Karmazsinvörös</translation> <translation id="3338095232262050444">Biztonságos</translation> @@ -524,7 +520,6 @@ <translation id="3761718714832595332">Állapot elrejtése</translation> <translation id="3765032636089507299">A Biztonságos Böngészés oldal fejlesztés alatt áll</translation> <translation id="3778403066972421603">Szeretné menteni a kártyát Google-fiókjába és az eszközre?</translation> -<translation id="3779973883630527594">Az ezt a fiókot kezelő cég, iskola vagy szervezet:</translation> <translation id="3781428340399460090">Élénk rózsaszín</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Lejárat dátuma: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -724,7 +719,6 @@ <translation id="4926159001844873046">A(z) <ph name="SITE" /> közlendője</translation> <translation id="4926340098269537727"><ph name="TOTAL_MATCHCOUNT" />/<ph name="ACTIVE_MATCH" /></translation> <translation id="4943872375798546930">Nincs találat</translation> -<translation id="4945672369594656571">Az eszköz- és fiókadatok kezelésének módját szabályozza. A Google az eszköz és a fiók adatait kizárólag az eszköz- és a fiókkezelő útmutatásával és kizárólag az eszköz- és a fiókkezelő által megadott célokra használja fel.</translation> <translation id="4950898438188848926">Lapváltó gomb. Nyomja meg az Entert a következő megnyitott lapra való váltáshoz: <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Műveletek</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -738,7 +732,6 @@ <translation id="5017554619425969104">Vágólapra másolt szöveg</translation> <translation id="5018422839182700155">Nem lehet megnyitni az oldalt</translation> <translation id="5019198164206649151">A háttértároló állapota nem megfelelő</translation> -<translation id="5020154601324912079">Az eszközadatok kezelését szabályozza. A Google az eszköz adatait kizárólag az eszközkezelő útmutatásával és kizárólag az eszközkezelő által megadott célokra használja fel.</translation> <translation id="5023310440958281426">Ellenőrizze rendszergazdai házirendjeit</translation> <translation id="5029568752722684782">Példány törlése</translation> <translation id="503069730517007720">A(z) „<ph name="SOFTWARE_NAME" />” szoftverhez főtanúsítványra van szükség, amely azonban nincs telepítve. A rendszergazda a(z) „<ph name="SOFTWARE_NAME" />” beállítási útmutatójában találhat segítséget a probléma megoldásához. <ph name="FURTHER_EXPLANATION" /></translation> @@ -896,7 +889,6 @@ <translation id="5838278095973806738">Ne írjon be semmilyen bizalmas adatot (például jelszót vagy hitelkártyaadatot) a webhelyen, mivel a támadók ellophatják.</translation> <translation id="5860033963881614850">Kikapcsolva</translation> <translation id="5863847714970149516">Előfordulhat, hogy a következő oldal megpróbál pénzt felszámolni Önnek</translation> -<translation id="5865951947699094510">Módosíthatja távolról a fiók beállítását.</translation> <translation id="5866257070973731571">Telefonszám hozzáadása</translation> <translation id="5869405914158311789">A webhely nem érhető el</translation> <translation id="5869522115854928033">Mentett jelszavak</translation> @@ -1167,7 +1159,6 @@ További részletek: <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Jelszavak kezelése…</translation> <translation id="7419106976560586862">Profil elérési útja</translation> -<translation id="7424427397225027541">A fiókadatok kezelését szabályozza. A Google a fiók adatait kizárólag a fiókkezelő útmutatásával és kizárólag a fiókkezelő által megadott célokra használja fel.</translation> <translation id="7437289804838430631">Kapcsolatfelvételi adatok hozzáadása</translation> <translation id="7440140511386898319">Felfedezés offline állapotban</translation> <translation id="7441627299479586546">Az irányelv tárgya nem megfelelő</translation> @@ -1253,7 +1244,6 @@ További részletek: <translation id="780301667611848630">Köszönöm, nem</translation> <translation id="7805768142964895445">Állapot</translation> <translation id="7806344367022510803">A keresőmotor beállításainak módosítása a Chrome-ban</translation> -<translation id="7810209002420871817">Fiókja kezelőjeként a(z) <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Eltávolítja a javaslatot a Chrome-ból?</translation> <translation id="7815407501681723534"><ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> található a(z) „<ph name="SEARCH_STRING" />” kifejezésre</translation> diff --git a/chromium/components/strings/components_strings_id.xtb b/chromium/components/strings/components_strings_id.xtb index d5ef0802dfb..5e1ddd04b95 100644 --- a/chromium/components/strings/components_strings_id.xtb +++ b/chromium/components/strings/components_strings_id.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="id"> -<translation id="1001338328714563407">Sebagai pengelola perangkat dan akun Anda, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Jangan Sekarang</translation> <translation id="1010200102790553230">Muat halaman nanti</translation> <translation id="1015730422737071372">Berikan detail tambahan</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">Anda dapat menonaktifkan proxy apa pun yang dikonfigurasi untuk sambungan dari halaman setelan.</translation> <translation id="2955913368246107853">Tutup bilah cari</translation> <translation id="2969319727213777354">Untuk membuat sambungan aman, jam perlu disetel dengan benar. Itu karena sertifikat yang digunakan situs web untuk mengidentifikasi situs web tersebut hanya valid untuk jangka waktu tertentu. Karena jam perangkat tidak benar, Google Chrome tidak dapat memverifikasi sertifikat ini.</translation> -<translation id="2970515157925768593">Dapat mengubah penyiapan perangkat dan akun dari jauh.</translation> <translation id="2972581237482394796">&Ulang</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, saat ini yang dipilih. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Hapus Data</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">Tampilkan salinan yang disimpan</translation> <translation id="3008447029300691911">Masukkan CVC untuk <ph name="CREDIT_CARD" />. Setelah mengonfirmasi, detail kartu Anda akan dibagikan dengan situs ini.</translation> <translation id="3010559122411665027">Entri daftar "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Sebagai pengelola perangkat ini, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Diblokir secara otomatis</translation> <translation id="3023071826883856138">You4 (Envelope)</translation> <translation id="3024663005179499861">Jenis kebijakan salah</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">Download saat online</translation> <translation id="3293642807462928945">Pelajari lebih lanjut tentang kebijakan <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Hasil penelusuran tidak ditemukan</translation> -<translation id="3311730110465560799">Dapat mengubah penyiapan perangkat dari jauh.</translation> <translation id="3320021301628644560">Tambahkan alamat penagihan</translation> <translation id="3324983252691184275">Merah Lembayung</translation> <translation id="3338095232262050444">Aman</translation> @@ -525,7 +521,6 @@ <translation id="3761718714832595332">Sembunyikan status</translation> <translation id="3765032636089507299">Halaman Safe Browsing sedang diperbaiki.</translation> <translation id="3778403066972421603">Ingin menyimpan kartu ini di Akun Google dan perangkat ini?</translation> -<translation id="3779973883630527594">Perusahaan, sekolah, atau organisasi yang mengelola akun ini:</translation> <translation id="3781428340399460090">Merah Muda Terang</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Masa berlaku <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -725,7 +720,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> menyatakan</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Tidak ada hasil</translation> -<translation id="4945672369594656571">Mengontrol penanganan data perangkat dan akun Anda. Google memproses data perangkat dan akun Anda secara eksklusif sesuai arahan pengelola perangkat dan akun Anda dan semata-mata untuk keperluan yang ditetapkan oleh pengelola perangkat dan akun Anda.</translation> <translation id="4950898438188848926">Tombol beralih tab, tekan Enter untuk beralih ke tab yang terbuka, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Tindakan</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -739,7 +733,6 @@ <translation id="5017554619425969104">Teks yang Anda salin</translation> <translation id="5018422839182700155">Tidak dapat membuka halaman ini</translation> <translation id="5019198164206649151">Penyimpanan cadangan dalam kondisi buruk</translation> -<translation id="5020154601324912079">Mengontrol penanganan data perangkat Anda. Google memproses data perangkat Anda secara eksklusif sesuai arahan pengelola perangkat dan semata-mata untuk keperluan yang ditentukan oleh pengelola perangkat Anda.</translation> <translation id="5023310440958281426">Periksa kebijakan administrator Anda</translation> <translation id="5029568752722684782">Hapus salinan</translation> <translation id="503069730517007720">Sertifikat root wajib untuk "<ph name="SOFTWARE_NAME" />" tidak diinstal. Administrator IT Anda harus melihat petunjuk konfigurasi untuk "<ph name="SOFTWARE_NAME" />" agar dapat menyelesaikan masalah ini. <ph name="FURTHER_EXPLANATION" /></translation> @@ -897,7 +890,6 @@ <translation id="5838278095973806738">Jangan masukkan informasi sensitif apa pun di situs ini (misalnya, sandi atau kartu kredit), karena penyerang dapat mencurinya.</translation> <translation id="5860033963881614850">Nonaktif</translation> <translation id="5863847714970149516">Halaman berikutnya mungkin mencoba menagih Anda.</translation> -<translation id="5865951947699094510">Dapat mengubah penyiapan akun Anda dari jauh.</translation> <translation id="5866257070973731571">Tambahkan Nomor Telepon</translation> <translation id="5869405914158311789">Situs ini tidak dapat dijangkau</translation> <translation id="5869522115854928033">Sandi tersimpan</translation> @@ -1166,7 +1158,6 @@ <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Kelola Sandi...</translation> <translation id="7419106976560586862">Jalur Profil</translation> -<translation id="7424427397225027541">Mengontrol penanganan data akun Anda. Google memproses data akun Anda secara eksklusif sesuai arahan pengelola akun Anda dan semata-mata untuk keperluan yang ditetapkan oleh pengelola akun Anda.</translation> <translation id="7437289804838430631">Tambahkan Info Kontak</translation> <translation id="7440140511386898319">Jelajahi saat offline</translation> <translation id="7441627299479586546">Subjek kebijakan salah</translation> @@ -1252,7 +1243,6 @@ <translation id="780301667611848630">Lain kali</translation> <translation id="7805768142964895445">Status</translation> <translation id="7806344367022510803">Ubah setelan Mesin Telusur di Chrome</translation> -<translation id="7810209002420871817">Sebagai pengelola akun Anda, <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Hapus sebagai saran dari Chrome?</translation> <translation id="7815407501681723534">Ditemukan <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> hasil untuk '<ph name="SEARCH_STRING" />'</translation> diff --git a/chromium/components/strings/components_strings_it.xtb b/chromium/components/strings/components_strings_it.xtb index 499aad0588a..60dc7af8b4e 100644 --- a/chromium/components/strings/components_strings_it.xtb +++ b/chromium/components/strings/components_strings_it.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="it"> -<translation id="1001338328714563407">In qualità di gestore del tuo dispositivo e del tuo account, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Non adesso</translation> <translation id="1010200102790553230">Carica la pagina più tardi</translation> <translation id="1015730422737071372">Fornisci ulteriori dettagli</translation> @@ -106,7 +105,7 @@ <translation id="1472675084647422956">Mostra altro</translation> <translation id="147358896496811705">2A0</translation> <translation id="1484290072879560759">Scegli l'indirizzo di spedizione</translation> -<translation id="1492194039220927094">Push delle norme:</translation> +<translation id="1492194039220927094">Push dei criteri:</translation> <translation id="1501859676467574491">Mostra le carte dall'Account Google</translation> <translation id="1507202001669085618"><p>Vedrai questo errore se stai utilizzando un portale Wi-Fi che richiede l'accesso per poterti connettere a Internet.</p> <p>Per risolvere il problema, fai clic su <strong>Connetti</strong> nella pagina che stai cercando di aprire.</p></translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">Puoi disattivare tutti i proxy configurati per una connessione dalla pagina delle impostazioni.</translation> <translation id="2955913368246107853">Chiudi la barra di ricerca</translation> <translation id="2969319727213777354">Per poter stabilire una connessione protetta, l'orologio deve essere impostato correttamente perché i certificati utilizzati dai siti web per identificarsi sono validi soltanto per determinati periodi di tempo. L'orologio del dispositivo non è impostato sull'orario corretto, pertanto Chrome non può verificare i certificati.</translation> -<translation id="2970515157925768593">Può modificare da remoto la configurazione del tuo dispositivo e del tuo account.</translation> <translation id="2972581237482394796">&Ripeti</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, attualmente selezionata. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Cancella dati</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">Mostra copia salvata</translation> <translation id="3008447029300691911">Inserisci il codice CVC della carta <ph name="CREDIT_CARD" />. Dopo essere stati confermati, i dettagli della carta saranno condivisi con questo sito.</translation> <translation id="3010559122411665027">Voce "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">In qualità di gestore di questo dispositivo, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Bloccata automaticamente</translation> <translation id="3023071826883856138">You4 (Envelope)</translation> <translation id="3024663005179499861">Tipo di criterio errato</translation> @@ -428,7 +425,6 @@ <translation id="3287510313208355388">Scarica quando è online</translation> <translation id="3293642807462928945">Scopri di più sulla norma <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Nessun risultato di ricerca trovato</translation> -<translation id="3311730110465560799">Può modificare da remoto la configurazione del tuo dispositivo.</translation> <translation id="3320021301628644560">Aggiungi l'indirizzo di fatturazione</translation> <translation id="3324983252691184275">Cremisi</translation> <translation id="3338095232262050444">Sicuro</translation> @@ -523,7 +519,6 @@ <translation id="3761718714832595332">Nascondi stato</translation> <translation id="3765032636089507299">La pagina Navigazione sicura è in fase di realizzazione.</translation> <translation id="3778403066972421603">Vuoi salvare questa carta nel tuo Account Google e su questo dispositivo?</translation> -<translation id="3779973883630527594">La società, scuola o organizzazione che gestisce questo account:</translation> <translation id="3781428340399460090">Fucsia</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Data di scadenza: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -723,7 +718,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> dice</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Nessun risultato</translation> -<translation id="4945672369594656571">Controlla in che modo vengono gestiti i dati del tuo dispositivo e del tuo account. Google elabora i dati del tuo dispositivo e del tuo account esclusivamente sotto la direzione del gestore dei tuoi dispositivi e account e unicamente per le finalità specificate dal gestore dei tuoi dispositivi e account.</translation> <translation id="4950898438188848926">Pulsante per cambiare scheda, premi INVIO per passare alla scheda aperta, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Azioni</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -737,7 +731,6 @@ <translation id="5017554619425969104">Testo copiato</translation> <translation id="5018422839182700155">Impossibile aprire questa pagina</translation> <translation id="5019198164206649151">Archivio di backup in stato non valido</translation> -<translation id="5020154601324912079">Controlla in che modo vengono gestiti i dati del tuo dispositivo. Google elabora i dati del tuo dispositivo esclusivamente sotto la direzione del gestore dei tuoi dispositivi e unicamente per le finalità specificate dal gestore dei tuoi dispositivi.</translation> <translation id="5023310440958281426">Consulta le norme dell'amministratore</translation> <translation id="5029568752722684782">Cancella copia</translation> <translation id="503069730517007720">Per "<ph name="SOFTWARE_NAME" />" è richiesto un certificato radice che non è installato. L'amministratore IT deve consultare le istruzioni di configurazione relative a "<ph name="SOFTWARE_NAME" />" per risolvere il problema. <ph name="FURTHER_EXPLANATION" /></translation> @@ -833,7 +826,7 @@ <translation id="5509762909502811065">B0</translation> <translation id="5509780412636533143">Preferiti gestiti</translation> <translation id="5510766032865166053">Potrebbe essere stato spostato o eliminato.</translation> -<translation id="5523118979700054094">Nome norma</translation> +<translation id="5523118979700054094">Nome criterio</translation> <translation id="552553974213252141">Il testo è stato estratto correttamente?</translation> <translation id="553484882784876924">Prc6 (Envelope)</translation> <translation id="5540224163453853">Impossibile trovare l'articolo richiesto.</translation> @@ -895,7 +888,6 @@ <translation id="5838278095973806738">Non dovresti inserire dati sensibili in questo sito (ad esempio password o carte di credito) perché potrebbero essere intercettati da utenti malintenzionati.</translation> <translation id="5860033963881614850">Off</translation> <translation id="5863847714970149516">La pagina che segue potrebbe tentare di addebitarti dei costi</translation> -<translation id="5865951947699094510">Può modificare da remoto la configurazione del tuo account.</translation> <translation id="5866257070973731571">Aggiungi numero di telefono</translation> <translation id="5869405914158311789">Impossibile raggiungere il sito</translation> <translation id="5869522115854928033">Password salvate</translation> @@ -995,7 +987,7 @@ <translation id="6447842834002726250">Cookie</translation> <translation id="6451458296329894277">Conferma reinvio modulo</translation> <translation id="6465306955648956876">Gestisci password…</translation> -<translation id="647261751007945333">Norme dispositivo</translation> +<translation id="647261751007945333">Criteri dispositivo</translation> <translation id="6477321094435799029">Chrome ha rilevato un codice insolito su questa pagina e l'ha bloccata per proteggere le tue informazioni personali (ad esempio password, numeri di telefono e carte di credito).</translation> <translation id="6489534406876378309">Avvia caricamento arresti anomali</translation> <translation id="6499038740797743453">Reimpostare la password?</translation> @@ -1034,7 +1026,7 @@ <translation id="6738516213925468394">I tuoi dati sono stati criptati con la tua <ph name="BEGIN_LINK" />passphrase di sincronizzazione<ph name="END_LINK" /> in data <ph name="TIME" />. Inseriscila per avviare la sincronizzazione.</translation> <translation id="674375294223700098">Errore sconosciuto del certificato del server.</translation> <translation id="6744009308914054259">In attesa di una connessione, puoi visitare la pagina Download per leggere gli articoli offline.</translation> -<translation id="6753269504797312559">Valore norma</translation> +<translation id="6753269504797312559">Valore criterio</translation> <translation id="6757797048963528358">Il dispositivo è entrato in modalità sospensione.</translation> <translation id="6768213884286397650">Hagaki (Postcard)</translation> <translation id="6778737459546443941">Il tuo genitore non ha ancora approvato la richiesta</translation> @@ -1165,7 +1157,6 @@ Ulteriori dettagli: <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Gestisci password…</translation> <translation id="7419106976560586862">Percorso profilo</translation> -<translation id="7424427397225027541">Controlla in che modo vengono gestiti i dati del tuo account. Google elabora i dati del tuo account esclusivamente sotto la direzione del gestore del tuo account e unicamente per le finalità specificate dal gestore del tuo account.</translation> <translation id="7437289804838430631">Aggiungi informazioni di contatto</translation> <translation id="7440140511386898319">Esplora offline</translation> <translation id="7441627299479586546">Oggetto del criterio errato</translation> @@ -1188,7 +1179,7 @@ Ulteriori dettagli: <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">La connessione a questo sito non è privata</translation> <translation id="7535087603100972091">Valore</translation> -<translation id="7537536606612762813">Obbligatoria</translation> +<translation id="7537536606612762813">Obbligatorio</translation> <translation id="7538364083937897561">A2 (Envelope)</translation> <translation id="7542403920425041731">Dopo essere stati confermati, i dati della carta saranno condivisi con questo sito.</translation> <translation id="7542995811387359312">La compilazione automatica della carta di credito è disattivata perché questo modulo non utilizza una connessione sicura.</translation> @@ -1239,7 +1230,7 @@ Ulteriori dettagli: <translation id="7755287808199759310">Il tuo genitore può sbloccarlo per te</translation> <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Il software antivirus o il firewall potrebbe avere bloccato la connessione.</translation> -<translation id="7759163816903619567">Visualizza dominio:</translation> +<translation id="7759163816903619567">Dominio visualizzato:</translation> <translation id="7761701407923456692">Il certificato del server non corrisponde all'URL.</translation> <translation id="7763386264682878361">Analizzatore sintattico dei file manifest dei pagamenti</translation> <translation id="7764225426217299476">Aggiungi indirizzo</translation> @@ -1251,7 +1242,6 @@ Ulteriori dettagli: <translation id="780301667611848630">No grazie</translation> <translation id="7805768142964895445">Stato</translation> <translation id="7806344367022510803">Cambia le impostazioni del motore di ricerca in Chrome</translation> -<translation id="7810209002420871817">In qualità di gestore del tuo account, <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Rimuovere il suggerimento per i moduli da Chrome?</translation> <translation id="7815407501681723534"><ph name="SEARCH_RESULTS" /> per "<ph name="SEARCH_STRING" />": <ph name="NUMBER_OF_RESULTS" /></translation> diff --git a/chromium/components/strings/components_strings_iw.xtb b/chromium/components/strings/components_strings_iw.xtb index 158badbcba8..9a1ec3824d5 100644 --- a/chromium/components/strings/components_strings_iw.xtb +++ b/chromium/components/strings/components_strings_iw.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="iw"> -<translation id="1001338328714563407">בתור מנהל המכשיר והחשבון שלך, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">לא עכשיו</translation> <translation id="1010200102790553230">לטעינת הדף מאוחר יותר</translation> <translation id="1015730422737071372">ספק פרטים נוספים</translation> @@ -365,7 +364,6 @@ <translation id="2948083400971632585">ניתן להשבית כל שרת proxy המוגדר לחיבור מדף ההגדרות.</translation> <translation id="2955913368246107853">סגור את חלונית החיפוש</translation> <translation id="2969319727213777354">כדי ליצור חיבור מאובטח, השעון צריך להיות מוגדר כהלכה. הסיבה לכך היא שהאישורים שבאמצעותם אתרים מזהים את עצמם תקפים רק למשך פרקי זמן מסוימים. מאחר שהשעון במכשיר שלך שגוי, Google Chrome לא יכול לאמת את האישורים האלה.</translation> -<translation id="2970515157925768593">יכול לשנות מרחוק את הגדרות המכשיר והחשבון שלך.</translation> <translation id="2972581237482394796">&בצע שנית</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, בחירה נוכחית. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">ניקוי נתונים</translation> @@ -377,7 +375,6 @@ <translation id="3005723025932146533">הצג עותק שמור</translation> <translation id="3008447029300691911">הזן את קוד האימות של הכרטיס <ph name="CREDIT_CARD" />. ברגע שתאשר, פרטי הכרטיס שלך ישותפו עם האתר הזה.</translation> <translation id="3010559122411665027">רשומה ברשימה "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">בתור מנהל המכשיר, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">נחסמה אוטומטית</translation> <translation id="3023071826883856138">You4 (Envelope)</translation> <translation id="3024663005179499861">סוג המדיניות שגוי</translation> @@ -423,7 +420,6 @@ <translation id="3287510313208355388">להורדה אחרי התחברות לרשת</translation> <translation id="3293642807462928945">מידע נוסף על המדיניות <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">לא נמצאו תוצאות חיפוש</translation> -<translation id="3311730110465560799">יכול לשנות את הגדרות המכשיר שלך מרחוק.</translation> <translation id="3320021301628644560">הוספה של כתובת לחיוב</translation> <translation id="3324983252691184275">ארגמן</translation> <translation id="3338095232262050444">מאובטח</translation> @@ -518,7 +514,6 @@ <translation id="3761718714832595332">הסתרת הסטטוס</translation> <translation id="3765032636089507299">הדף 'גלישה בטוחה' נמצא כרגע בבנייה.</translation> <translation id="3778403066972421603">האם ברצונך לשמור את הכרטיס בחשבון Google שלך ובמכשיר הזה?</translation> -<translation id="3779973883630527594">החברה, בית הספר או הארגון שמנהלים את החשבון הזה:</translation> <translation id="3781428340399460090">ורוד בוהק</translation> <translation id="3783418713923659662">מאסטרקארד</translation> <translation id="3787705759683870569">תאריך תפוגה: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -722,7 +717,6 @@ Del</translation> <translation id="4926159001844873046">האתר <ph name="SITE" /> אומר</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">אין תוצאות</translation> -<translation id="4945672369594656571">קובעת את אופן הטיפול בנתוני המכשיר והחשבון שלך. Google מעבדת את נתוני המכשיר והחשבון אך ורק בהתאם להנחיות של מנהל המכשיר והחשבון ורק לצרכים שציין מנהל המכשיר והחשבון.</translation> <translation id="4950898438188848926">לחצן החלפת כרטיסיות, יש להקיש על Enter כדי לעבור לכרטיסייה הפתוחה, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">פעולות</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -736,7 +730,6 @@ Del</translation> <translation id="5017554619425969104">טקסט שהעתקת</translation> <translation id="5018422839182700155">לא ניתן לפתוח את הדף</translation> <translation id="5019198164206649151">האחסון המשמש כגיבוי אינו תקין</translation> -<translation id="5020154601324912079">קובעת את אופן הטיפול בנתוני המכשיר. Google מעבדת את נתוני המכשיר אך ורק בהתאם להנחיות של מנהל המכשיר ורק לצרכים שציין מנהל המכשיר.</translation> <translation id="5023310440958281426">בדוק את תקנון מנהל המערכת שלך</translation> <translation id="5029568752722684782">מחיקת העותק</translation> <translation id="503069730517007720">יש צורך באישור שורש בשביל "<ph name="SOFTWARE_NAME" />", אבל לא מותקן אישור כזה. על מנהל ה-IT לבדוק את הוראות התצורה של "<ph name="SOFTWARE_NAME" />" כדי לפתור את הבעיה. <ph name="FURTHER_EXPLANATION" /></translation> @@ -895,7 +888,6 @@ Del</translation> <translation id="5838278095973806738">אין להזין מידע רגיש באתר הזה (כמו סיסמאות או מספרי כרטיסי אשראי), מאחר שתוקפים עלולים לקבל אליו גישה.</translation> <translation id="5860033963881614850">כבוי</translation> <translation id="5863847714970149516">בדף הבא עשויה להיות דרישה לתשלום</translation> -<translation id="5865951947699094510">יכול לשנות מרחוק את הגדרות החשבון.</translation> <translation id="5866257070973731571">הוספת מספר טלפון</translation> <translation id="5869405914158311789">לא ניתן לגשת לאתר הזה</translation> <translation id="5869522115854928033">סיסמאות שמורות</translation> @@ -1163,7 +1155,6 @@ Del</translation> <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">ניהול סיסמאות…</translation> <translation id="7419106976560586862">נתיב פרופיל</translation> -<translation id="7424427397225027541">קובע את אופן הטיפול בנתוני החשבון. Google מעבדת את נתוני החשבון אך ורק בהתאם להנחיות של מנהל החשבון ורק לצרכים שציין מנהל החשבון.</translation> <translation id="7437289804838430631">הוספת פרטים ליצירת קשר</translation> <translation id="7440140511386898319">עיון במצב לא מקוון</translation> <translation id="7441627299479586546">נושא המדיניות שגוי</translation> @@ -1249,7 +1240,6 @@ Del</translation> <translation id="780301667611848630">לא תודה</translation> <translation id="7805768142964895445">סטטוס</translation> <translation id="7806344367022510803">שינוי הגדרות מנוע החיפוש ב-Chrome</translation> -<translation id="7810209002420871817">בתור המנהל של החשבון שלך, <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">האם להסיר מ-Chrome הצעות בשביל טפסים?</translation> <translation id="7815407501681723534">נמצאו <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> בנושא '<ph name="SEARCH_STRING" />'</translation> diff --git a/chromium/components/strings/components_strings_ja.xtb b/chromium/components/strings/components_strings_ja.xtb index edef8d90a55..0002ef26f1d 100644 --- a/chromium/components/strings/components_strings_ja.xtb +++ b/chromium/components/strings/components_strings_ja.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ja"> -<translation id="1001338328714563407">デバイスおよびアカウントの管理者である <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">後で</translation> <translation id="1010200102790553230">後でページを読み込む</translation> <translation id="1015730422737071372">詳細を報告する</translation> @@ -365,7 +364,6 @@ <translation id="2948083400971632585">接続用に設定されたプロキシは、設定ページで無効にできます。</translation> <translation id="2955913368246107853">検索バーを閉じる</translation> <translation id="2969319727213777354">安全な接続を確立するには、時計が正しく設定されている必要があります。これは、ウェブサイトが自身を証明するために使用する証明書には有効期限があるためです。デバイスの時計が正しくないため、Google Chrome でこれらの証明書を確認することができません。</translation> -<translation id="2970515157925768593">デバイスとアカウントの設定をリモートで変更できます。</translation> <translation id="2972581237482394796">やり直し(&R)</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />が現在選択されています。<ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">データを削除</translation> @@ -377,7 +375,6 @@ <translation id="3005723025932146533">保存済みのコピーを表示</translation> <translation id="3008447029300691911"><ph name="CREDIT_CARD" /> の CVC を入力します。確認を行うと、カードの詳細がこのサイトと共有されます。</translation> <translation id="3010559122411665027">リスト エントリ「<ph name="ENTRY_INDEX" />」: <ph name="ERROR" /></translation> -<translation id="3014389611820813634">このデバイスの管理者である <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">自動ブロックされました</translation> <translation id="3023071826883856138">洋4(封筒)</translation> <translation id="3024663005179499861">ポリシー タイプが間違っています</translation> @@ -423,7 +420,6 @@ <translation id="3287510313208355388">オンライン時にダウンロード</translation> <translation id="3293642807462928945"><ph name="POLICY_NAME" /> ポリシーの詳細</translation> <translation id="3303855915957856445">一致する結果は見つかりませんでした</translation> -<translation id="3311730110465560799">デバイスの設定をリモートで変更できます。</translation> <translation id="3320021301628644560">請求先住所を追加</translation> <translation id="3324983252691184275">クリムゾン</translation> <translation id="3338095232262050444">保護された通信</translation> @@ -518,7 +514,6 @@ <translation id="3761718714832595332">ステータスを表示しない</translation> <translation id="3765032636089507299">セーフ ブラウジング ページは準備中です。</translation> <translation id="3778403066972421603">このカードを Google アカウントとこのデバイスに保存しますか?</translation> -<translation id="3779973883630527594">このアカウントを管理する会社、学校、または組織:</translation> <translation id="3781428340399460090">ホットピンク</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">有効期限: <ph name="EXPIRATION_MONTH" /> / <ph name="EXPIRATION_YEAR" /></translation> @@ -718,7 +713,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> の内容</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" /> / <ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">結果はありません</translation> -<translation id="4945672369594656571">デバイスとアカウントのデータの処理方法を管理します。Google では、デバイスおよびアカウント管理者の指示と指定した目的のみに基づいてデバイスとアカウントのデータを処理します。</translation> <translation id="4950898438188848926">タブの切り替えボタンです。Enter キーを押すと開いているタブ「<ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" />」に切り替わります</translation> <translation id="495170559598752135">操作</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -732,7 +726,6 @@ <translation id="5017554619425969104">コピーしたテキスト</translation> <translation id="5018422839182700155">このページを開けません</translation> <translation id="5019198164206649151">代替ストアの状態が不適切です</translation> -<translation id="5020154601324912079">デバイスデータの処理方法を管理します。Google では、デバイス管理者の指示と指定した目的のみに基づいてデバイスデータを処理します。</translation> <translation id="5023310440958281426">管理者のポリシーを確認してください</translation> <translation id="5029568752722684782">コピーを消去</translation> <translation id="503069730517007720">「<ph name="SOFTWARE_NAME" />」のルート証明書が必要ですが、インストールされていません。IT 管理者に、「<ph name="SOFTWARE_NAME" />」の設定手順を確認したうえでこの問題を修正するよう依頼してください。<ph name="FURTHER_EXPLANATION" /></translation> @@ -890,7 +883,6 @@ <translation id="5838278095973806738">このサイトでは機密情報(パスワード、クレジット カードなど)を入力しないでください。悪意のあるユーザーに情報が盗まれる恐れがあります。</translation> <translation id="5860033963881614850">オフ</translation> <translation id="5863847714970149516">表示しようとしているページでは課金される恐れがあります</translation> -<translation id="5865951947699094510">アカウントの設定をリモートで変更できます。</translation> <translation id="5866257070973731571">電話番号の追加</translation> <translation id="5869405914158311789">このサイトにアクセスできません</translation> <translation id="5869522115854928033">保存したパスワード</translation> @@ -1158,7 +1150,6 @@ <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">パスワードを管理…</translation> <translation id="7419106976560586862">プロフィール パス</translation> -<translation id="7424427397225027541">アカウント データの処理方法を管理します。Google では、アカウント管理者の指示と指定した目的のみに基づいてアカウント データを処理します。</translation> <translation id="7437289804838430631">連絡先情報を追加</translation> <translation id="7440140511386898319">オフラインで利用できるコンテンツ</translation> <translation id="7441627299479586546">ポリシーの対象が間違っています</translation> @@ -1244,7 +1235,6 @@ <translation id="780301667611848630">いいえ</translation> <translation id="7805768142964895445">ステータス</translation> <translation id="7806344367022510803">Chrome で検索エンジンの設定を変更します</translation> -<translation id="7810209002420871817">アカウントの管理者である <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Chrome から候補を削除してもよろしいですか?</translation> <translation id="7815407501681723534">「<ph name="SEARCH_STRING" />」に対し <ph name="NUMBER_OF_RESULTS" /> 件の <ph name="SEARCH_RESULTS" />が見つかりました</translation> @@ -1465,7 +1455,7 @@ <translation id="9154194610265714752">更新完了</translation> <translation id="9157595877708044936">セットアップ中...</translation> <translation id="9158625974267017556">C6(封筒)</translation> -<translation id="9168814207360376865">お支払い方法を保存しているかどうかの確認をサイトに許可します</translation> +<translation id="9168814207360376865">お支払い方法を保存しているかどうかの確認をサイトに許可する</translation> <translation id="9169664750068251925">このサイトでは常にブロック</translation> <translation id="9170848237812810038">取消(&U)</translation> <translation id="9171296965991013597">アプリを終了しますか?</translation> diff --git a/chromium/components/strings/components_strings_kn.xtb b/chromium/components/strings/components_strings_kn.xtb index 0a41aec2dfc..de9e7b5b523 100644 --- a/chromium/components/strings/components_strings_kn.xtb +++ b/chromium/components/strings/components_strings_kn.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="kn"> -<translation id="1001338328714563407">ನಿಮ್ಮ ಸಾಧನ ಮತ್ತು ಖಾತೆಯ ನಿರ್ವಾಹಕರಾಗಿ, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">ಈಗಲೇ ಅಲ್ಲ</translation> <translation id="1010200102790553230">ಪುಟವನ್ನು ನಂತರ ಲೋಡ್ ಮಾಡಿ</translation> <translation id="1015730422737071372">ಹೆಚ್ಚುವರಿ ವಿವರಗಳನ್ನು ಒದಗಿಸಿ</translation> @@ -371,7 +370,6 @@ <translation id="2948083400971632585">ಸಂಪರ್ಕಕ್ಕಾಗಿ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿರುವ ಯಾವುದೇ ಪ್ರಾಕ್ಸಿಗಳನ್ನು ನೀವು ಸೆಟ್ಟಿಂಗ್ಗಳ ಪುಟದಿಂದ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬಹುದು.</translation> <translation id="2955913368246107853">ಹುಡುಕಿ ಬಾರ್ ಅನ್ನು ಮುಚ್ಚಿ</translation> <translation id="2969319727213777354">ಸುರಕ್ಷಿತ ಸಂಪರ್ಕವನ್ನು ಸ್ಥಾಪಿಸಲು, ನಿಮ್ಮ ಗಡಿಯಾರವನ್ನು ಸರಿಯಾಗಿ ಹೊಂದಿಸಬೇಕಾದ ಅಗತ್ಯವಿದೆ. ವೆಬ್ಸೈಟ್ಗಳು ತಮ್ಮನ್ನು ಗುರುತಿಸಲು ಬಳಸುವ ಪ್ರಮಾಣಪತ್ರಗಳು ನಿರ್ದಿಷ್ಟ ಅವಧಿಗಳಲ್ಲಿ ಮಾತ್ರ ಮಾನ್ಯವಾಗಿರುವ ಕಾರಣ ಹೀಗಾಗುತ್ತದೆ. ನಿಮ್ಮ ಸಾಧನದ ಗಡಿಯಾರವು ತಪ್ಪಾಗಿರುವ ಕಾರಣ, Google Chrome ಗೆ ಈ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.</translation> -<translation id="2970515157925768593">ನಿಮ್ಮ ಸಾಧನ ಮತ್ತು ಖಾತೆಯ ಸೆಟಪ್ ಅನ್ನು ದೂರದಿಂದಲೇ ಬದಲಾಯಿಸಬಹುದು.</translation> <translation id="2972581237482394796">&ಮತ್ತೆಮಾಡು</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, ಪ್ರಸ್ತುತವಾಗಿ ಆಯ್ಕೆ ಮಾಡಿರುವುದು. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">ಡೇಟಾ ತೆರವುಗೊಳಿಸಿ</translation> @@ -383,7 +381,6 @@ <translation id="3005723025932146533">ಉಳಿಸಲಾದ ನಕಲನ್ನು ತೋರಿಸು</translation> <translation id="3008447029300691911"><ph name="CREDIT_CARD" /> ಗೆ CVC ಅನ್ನು ನಮೂದಿಸಿ. ನೀವು ಒಮ್ಮೆ ಖಚಿತಪಡಿಸಿದರೆ, ನಿಮ್ಮ ಕಾರ್ಡ್ ವಿವರಗಳನ್ನು ಈ ಸೈಟ್ ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳಲಾಗುತ್ತದೆ.</translation> <translation id="3010559122411665027">ಪಟ್ಟಿ ನಮೂದು "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">ಈ ಸಾಧನದ ನಿರ್ವಾಹಕರಾಗಿ, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation> <translation id="3023071826883856138">You4 (Envelope)</translation> <translation id="3024663005179499861">ತಪ್ಪಾದ ನೀತಿಯ ಪ್ರಕಾರ</translation> @@ -427,7 +424,6 @@ <translation id="3287510313208355388">ಆನ್ಲೈನ್ನಲ್ಲಿರುವಾಗ ಡೌನ್ಲೋಡ್ ಮಾಡಿ</translation> <translation id="3293642807462928945"><ph name="POLICY_NAME" /> ಕಾರ್ಯನೀತಿಯ ಕುರಿತು ಇನ್ನಷ್ಟು ತಿಳಿದುಕೊಳ್ಳಿ</translation> <translation id="3303855915957856445">ಯಾವುದೇ ಹುಡುಕಾಟ ಫಲಿತಾಂಶಗಳು ಕಂಡುಬಂದಿಲ್ಲ</translation> -<translation id="3311730110465560799">ನಿಮ್ಮ ಸಾಧನದ ಸೆಟಪ್ ಅನ್ನು ದೂರದಿಂದಲೇ ಬದಲಾಯಿಸಬಹುದು.</translation> <translation id="3320021301628644560">ಬಿಲ್ಲಿಂಗ್ ವಿಳಾಸವನ್ನು ಸೇರಿಸಿ</translation> <translation id="3324983252691184275">ಕಡುಗೆಂಪು</translation> <translation id="3338095232262050444">ಸುರಕ್ಷಿತ</translation> @@ -521,7 +517,6 @@ <translation id="3761718714832595332">ಸ್ಥಿತಿಯನ್ನು ಮರೆಮಾಡಿ</translation> <translation id="3765032636089507299">ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್ ಪುಟವು ನಿರ್ಮಾಣ ಹಂತದಲ್ಲಿದೆ.</translation> <translation id="3778403066972421603">ಈ ಕಾರ್ಡ್ ಅನ್ನು ನಿಮ್ಮ Google ಖಾತೆ ಮತ್ತು ಈ ಸಾಧನದಲ್ಲಿ ಉಳಿಸಲು ಬಯಸುವಿರಾ?</translation> -<translation id="3779973883630527594">ಈ ಖಾತೆಯನ್ನು ನಿರ್ವಹಿಸುವಂತಹ ಕಂಪನಿ, ಶಾಲೆ ಅಥವಾ ಸಂಸ್ಥೆ:</translation> <translation id="3781428340399460090">ಗಾಢ ಗುಲಾಬಿ</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">ಅವಧಿ-ಮುಕ್ತಾಯ <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -721,7 +716,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> ಹೀಗೆ ಹೇಳುತ್ತದೆ</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">ಯಾವುದೇ ಫಲಿತಾಂಶಗಳಿಲ್ಲ</translation> -<translation id="4945672369594656571">ನಿಮ್ಮ ಸಾಧನ ಮತ್ತು ಖಾತೆಯ ಡೇಟಾವನ್ನು ಹೇಗೆ ನಿರ್ವಹಿಸಲಾಗುತ್ತಿದೆ ಎಂಬುದನ್ನು ನಿಯಂತ್ರಿಸುತ್ತದೆ. Google, ನಿಮ್ಮ ಸಾಧನ ಮತ್ತು ಖಾತೆ ನಿರ್ವಾಹಕರ ನಿರ್ದೇಶನದ ಪ್ರಕಾರವಾಗಿ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನ ಮತ್ತು ಖಾತೆ ನಿರ್ವಾಹಕರು ಸೂಚಿಸಿರುವ ಉದ್ದೇಶಗಳಿಗಾಗಿ ಮಾತ್ರವೇ ನಿಮ್ಮ ಸಾಧನ ಮತ್ತು ಖಾತೆಯ ಡೇಟಾವನ್ನು ವಿಶೇಷವಾಗಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತದೆ.</translation> <translation id="4950898438188848926">ಟ್ಯಾಬ್ ಬದಲಿಸುವ ಬಟನ್, ತೆರೆದಿರುವ ಟ್ಯಾಬ್, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /> ಗೆ ಬದಲಾಯಿಸಲು Enter ಒತ್ತಿರಿ</translation> <translation id="495170559598752135">ಕ್ರಿಯೆಗಳು</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -735,7 +729,6 @@ <translation id="5017554619425969104">ನೀವು ನಕಲಿಸಿದ ಪಠ್ಯ</translation> <translation id="5018422839182700155">ಈ ಪುಟವನ್ನು ತೆರೆಯಲು ಸಾಧ್ಯವಿಲ್ಲ</translation> <translation id="5019198164206649151">ಕಳಪೆ ಸ್ಥಿತಿಯಲ್ಲಿ ಸಂಗ್ರಹಣೆಯನ್ನು ಹಿಂತಿರುಗಿಸಲಾಗಿದೆ</translation> -<translation id="5020154601324912079">ನಿಮ್ಮ ಸಾಧನದ ಡೇಟಾವನ್ನು ಹೇಗೆ ನಿರ್ವಹಿಸಲಾಗಿದೆ ಎಂಬುದನ್ನು ನಿಯಂತ್ರಿಸುತ್ತದೆ. Google, ನಿಮ್ಮ ಸಾಧನ ನಿರ್ವಾಹಕರ ನಿರ್ದೇಶನದ ಪ್ರಕಾರವಾಗಿ, ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದ ನಿರ್ವಾಹಕರು ಸೂಚಿಸಿರುವ ಉದ್ದೇಶಗಳಿಗಾಗಿ ಮಾತ್ರವೇ ನಿಮ್ಮ ಸಾಧನದ ಡೇಟಾವನ್ನು ವಿಶೇಷವಾಗಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತದೆ.</translation> <translation id="5023310440958281426">ನಿಮ್ಮ ನಿರ್ವಾಹಕ ನೀತಿಗಳನ್ನು ಪರಿಶೀಲಿಸಿ</translation> <translation id="5029568752722684782">ನಕಲು ತೆರವುಗೊಳಿಸು</translation> <translation id="503069730517007720">"<ph name="SOFTWARE_NAME" />" ಗೆ ರೂಟ್ ಪ್ರಮಾಣಪತ್ರದ ಅಗತ್ಯವಿದೆ ಆದರೆ ಇನ್ಸ್ಟಾಲ್ ಮಾಡಲಾಗಿಲ್ಲ. ಈ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲು ನಿಮ್ಮ IT ನಿರ್ವಾಹಕರು "<ph name="SOFTWARE_NAME" />" ಗಾಗಿ ಕಾನ್ಫಿಗರೇಶನ್ ಸೂಚನೆಗಳ ಕಡೆ ಗಮನವಿಡಬೇಕು. <ph name="FURTHER_EXPLANATION" /></translation> @@ -893,7 +886,6 @@ <translation id="5838278095973806738">ಈ ಸೈಟ್ನಲ್ಲಿ ನೀವು ಯಾವುದೇ ಸೂಕ್ಷ್ಮ ಮಾಹಿತಿಯನ್ನು (ಉದಾಹರಣೆಗೆ, ಪಾಸ್ವರ್ಡ್ಗಳು ಅಥವಾ ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ಗಳು) ನಮೂದಿಸಬಾರದು, ಏಕೆಂದರೆ ಅದು ದಾಳಿಕೋರರ ಮೂಲಕ ಕಳುವಾಗಬಹುದು.</translation> <translation id="5860033963881614850">ಆಫ್</translation> <translation id="5863847714970149516">ಮುಂದಿನ ಪುಟವು ನಿಮಗೆ ಶುಲ್ಕ ವಿಧಿಸಲು ಪ್ರಯತ್ನಿಸಬಹುದು</translation> -<translation id="5865951947699094510">ನಿಮ್ಮ ಖಾತೆಯ ಸೆಟಪ್ ಅನ್ನು ದೂರದಿಂದಲೇ ಬದಲಾಯಿಸಬಹುದು.</translation> <translation id="5866257070973731571">ಫೋನ್ ಸಂಖ್ಯೆಯನ್ನು ಸೇರಿಸಿ</translation> <translation id="5869405914158311789">ಈ ಸೈಟ್ ತಲುಪಲಾಗುವುದಿಲ್ಲ</translation> <translation id="5869522115854928033">ಉಳಿಸಲಾದ ಪಾಸ್ವರ್ಡ್ಗಳು</translation> @@ -1162,7 +1154,6 @@ <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ನಿರ್ವಹಿಸಿ…</translation> <translation id="7419106976560586862">ಪ್ರೊಫೈಲ್ ಹಾದಿ</translation> -<translation id="7424427397225027541">ನಿಮ್ಮ ಖಾತೆಯ ಡೇಟಾವನ್ನು ಹೇಗೆ ನಿರ್ವಹಿಸಲಾಗಿದೆ ಎಂಬುದನ್ನು ನಿಯಂತ್ರಿಸುತ್ತದೆ. Google, ನಿಮ್ಮ ಖಾತೆ ನಿರ್ವಾಹಕರ ನಿರ್ದೇಶನದ ಪ್ರಕಾರವಾಗಿ, ಮತ್ತು ನಿಮ್ಮ ಖಾತೆ ನಿರ್ವಾಹಕರು ಸೂಚಿಸಿರುವ ಉದ್ದೇಶಗಳಿಗಾಗಿ ಮಾತ್ರವೇ ನಿಮ್ಮ ಖಾತೆಯ ಡೇಟಾವನ್ನು ವಿಶೇಷವಾಗಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತದೆ.</translation> <translation id="7437289804838430631">ಸಂಪರ್ಕ ಮಾಹಿತಿಯನ್ನು ಸೇರಿಸು</translation> <translation id="7440140511386898319">ಆಫ್ಲೈನ್ನಲ್ಲಿರುವಾಗ ಎಕ್ಸ್ಪ್ಲೋರ್ ಮಾಡಿ</translation> <translation id="7441627299479586546">ತಪ್ಪಾದ ನೀತಿಯ ವಿಷಯ</translation> @@ -1248,7 +1239,6 @@ <translation id="780301667611848630">ಬೇಡ, ಧನ್ಯವಾದಗಳು</translation> <translation id="7805768142964895445">ಸ್ಥಿತಿ</translation> <translation id="7806344367022510803">ಹುಡುಕಾಟ ಎಂಜಿನ್ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು Chrome ನಲ್ಲಿ ಬದಲಾಯಿಸಿ</translation> -<translation id="7810209002420871817">ನಿಮ್ಮ ಖಾತೆಯ ನಿರ್ವಾಹಕರಾಗಿ, <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Chrome ನಿಂದ ಫಾರ್ಮ್ ಸಲಹೆಯನ್ನು ತೆಗೆದುಹಾಕುವುದೇ?</translation> <translation id="7815407501681723534"><ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> ಗೆ '<ph name="SEARCH_STRING" />' ಕಂಡುಬಂದಿದೆ</translation> diff --git a/chromium/components/strings/components_strings_ko.xtb b/chromium/components/strings/components_strings_ko.xtb index 464fa3eb781..6404dc6917e 100644 --- a/chromium/components/strings/components_strings_ko.xtb +++ b/chromium/components/strings/components_strings_ko.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ko"> -<translation id="1001338328714563407">기기 및 계정의 관리자로서 <ph name="ENROLLMENT_DOMAIN" />은(는) 다음을 할 수 있습니다.</translation> <translation id="1008557486741366299">나중에 하기</translation> <translation id="1010200102790553230">페이지 나중에 로드하기</translation> <translation id="1015730422737071372">추가 세부정보 제공</translation> @@ -123,7 +122,7 @@ <translation id="1549470594296187301">이 기능을 이용하려면 자바스크립트를 사용하도록 설정해야 합니다.</translation> <translation id="155039086686388498">Engineering-D</translation> <translation id="1555130319947370107">파란색</translation> -<translation id="1559528461873125649">해당 파일이나 디렉토리가 없습니다.</translation> +<translation id="1559528461873125649">해당 파일이나 디렉터리가 없습니다.</translation> <translation id="1559572115229829303"><p>기기의 날짜와 시간(<ph name="DATE_AND_TIME" />)이 잘못되어 <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />에 비공개로 연결할 수 없습니다.</p> <p><strong>설정</strong> 앱의 <strong>일반</strong> 섹션에서 날짜와 시간을 맞추세요.</p></translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">설정 페이지의 연결을 구성하는 프록시를 사용 중지할 수 있습니다.</translation> <translation id="2955913368246107853">검색 바 닫기</translation> <translation id="2969319727213777354">보안 연결을 설정하려면 시계가 올바로 설정되어 있어야 합니다. 웹사이트가 자신을 식별하는 데 사용하는 인증서는 특정 기간에만 유효하기 때문입니다. 기기의 시계가 잘못 설정되어 Chrome에서 이 인증서를 확인할 수 없습니다.</translation> -<translation id="2970515157925768593">기기 및 계정 설정을 원격으로 변경할 수 있습니다.</translation> <translation id="2972581237482394796">다시 실행(&R)</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />이(가) 현재 선택되어 있습니다. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">데이터 삭제</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">저장된 사본 표시</translation> <translation id="3008447029300691911"><ph name="CREDIT_CARD" /> 카드의 CVC를 입력하세요. 카드를 확인하면 카드 세부정보가 이 사이트와 공유됩니다.</translation> <translation id="3010559122411665027">목록 항목 '<ph name="ENTRY_INDEX" />': <ph name="ERROR" /></translation> -<translation id="3014389611820813634">기기의 관리자로서 <ph name="ENROLLMENT_DOMAIN" />은(는) 다음을 할 수 있습니다.</translation> <translation id="301521992641321250">자동으로 차단됨</translation> <translation id="3023071826883856138">You4(봉투)</translation> <translation id="3024663005179499861">잘못된 정책 유형</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">온라인 상태일 때 다운로드</translation> <translation id="3293642807462928945"><ph name="POLICY_NAME" /> 정책에 관해 자세히 알아보기</translation> <translation id="3303855915957856445">검색결과 없음</translation> -<translation id="3311730110465560799">기기 설정을 원격으로 변경할 수 있습니다.</translation> <translation id="3320021301628644560">청구지 주소 추가</translation> <translation id="3324983252691184275">진홍색</translation> <translation id="3338095232262050444">보안 연결</translation> @@ -526,7 +522,6 @@ <translation id="3761718714832595332">상태 숨기기</translation> <translation id="3765032636089507299">세이프 브라우징 페이지는 현재 준비 중입니다.</translation> <translation id="3778403066972421603">이 카드를 Google 계정과 이 기기에 저장하시겠습니까?</translation> -<translation id="3779973883630527594">이 계정을 관리하는 회사, 학교 또는 조직:</translation> <translation id="3781428340399460090">진한 분홍색</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">만료: <ph name="EXPIRATION_YEAR" />년 <ph name="EXPIRATION_MONTH" />월</translation> @@ -726,7 +721,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> 내용:</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">검색결과가 없습니다.</translation> -<translation id="4945672369594656571">기기 및 계정 데이터 처리 방식을 관리합니다. Google에서는 기기 및 계정 관리자가 지정한 목적만을 위해 기기 및 계정 관리자의 지시만을 따라 기기 및 계정 데이터를 처리합니다.</translation> <translation id="4950898438188848926">탭 전환 버튼, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /> 열린 탭으로 전환하려면 Enter를 누르세요</translation> <translation id="495170559598752135">작업</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -740,7 +734,6 @@ <translation id="5017554619425969104">복사한 텍스트</translation> <translation id="5018422839182700155">이 페이지를 열 수 없음</translation> <translation id="5019198164206649151">보조 기억 장치 상태가 잘못됨</translation> -<translation id="5020154601324912079">기기 데이터 처리 방식을 관리합니다. Google에서는 기기 관리자가 지정한 목적만을 위해 기기 관리자의 지시만을 따라 기기 데이터를 처리합니다.</translation> <translation id="5023310440958281426">관리자 정책을 확인하세요.</translation> <translation id="5029568752722684782">사본 지우기</translation> <translation id="503069730517007720">'<ph name="SOFTWARE_NAME" />'의 루트 인증서가 필요하지만 설치되어 있지 않습니다. IT 관리자가 '<ph name="SOFTWARE_NAME" />'의 설정 안내에 따라 이 문제를 해결해야 합니다. <ph name="FURTHER_EXPLANATION" /></translation> @@ -898,7 +891,6 @@ <translation id="5838278095973806738">이 사이트에 입력하는 비밀번호나 신용카드 번호 등의 정보가 공격자에 의해 도용될 수 있습니다.</translation> <translation id="5860033963881614850">사용 안함</translation> <translation id="5863847714970149516">방문하려는 페이지에서 금액을 청구할 수 있습니다.</translation> -<translation id="5865951947699094510">계정 설정을 원격으로 변경할 수 있습니다.</translation> <translation id="5866257070973731571">전화번호 추가</translation> <translation id="5869405914158311789">사이트에 연결할 수 없음</translation> <translation id="5869522115854928033">저장된 비밀번호</translation> @@ -1168,7 +1160,6 @@ <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">비밀번호 관리...</translation> <translation id="7419106976560586862">프로필 경로</translation> -<translation id="7424427397225027541">계정 데이터 처리 방식을 관리합니다. Google에서는 계정 관리자가 지정한 목적만을 위해 계정 관리자의 지시만을 따라 계정 데이터를 처리합니다.</translation> <translation id="7437289804838430631">연락처 정보 추가</translation> <translation id="7440140511386898319">오프라인 상태일 때 탐색</translation> <translation id="7441627299479586546">잘못된 정책 주체</translation> @@ -1254,7 +1245,6 @@ <translation id="780301667611848630">아니요, 괜찮습니다.</translation> <translation id="7805768142964895445">상태</translation> <translation id="7806344367022510803">Chrome에서 검색엔진 설정을 변경하세요.</translation> -<translation id="7810209002420871817">계정의 관리자로서 <ph name="ACCOUNT_DOMAIN" />은(는) 다음을 할 수 있습니다.</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Chrome에서 추천검색어를 삭제하시겠습니까?</translation> <translation id="7815407501681723534">'<ph name="SEARCH_STRING" />'에 대해 <ph name="SEARCH_RESULTS" /> <ph name="NUMBER_OF_RESULTS" />개의 검색 결과를 찾았습니다.</translation> diff --git a/chromium/components/strings/components_strings_lt.xtb b/chromium/components/strings/components_strings_lt.xtb index 8715f1aa5de..b8979546ce1 100644 --- a/chromium/components/strings/components_strings_lt.xtb +++ b/chromium/components/strings/components_strings_lt.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="lt"> -<translation id="1001338328714563407">Kaip jūsų įrenginio ir paskyros valdytojas (<ph name="ENROLLMENT_DOMAIN" />):</translation> <translation id="1008557486741366299">Ne dabar</translation> <translation id="1010200102790553230">Įkelti puslapį vėliau</translation> <translation id="1015730422737071372">Pateikti papildomos išsamios informacijos</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">Galite neleisti visų tarpinių serverių, jungimasis prie kurių sukonfigūruotas nustatymų puslapyje.</translation> <translation id="2955913368246107853">Uždaryti paieškos juostą</translation> <translation id="2969319727213777354">Kad užmegztumėte saugų ryšį, turėsite tinkamai nustatyti laikrodį. To reikia, nes svetainių tapatybei įrodyti naudojami sertifikatai galioja tik tam tikru laikotarpiu. Įrenginio laikrodis nustatytas netinkamai, todėl „Google Chrome“ negali patvirtinti šių sertifikatų.</translation> -<translation id="2970515157925768593">Galima nuotoliniu būdu keisti įrenginio nustatymo ir paskyros kūrimo procesą.</translation> <translation id="2972581237482394796">&Atlikti iš naujo</translation> <translation id="2977665033722899841">„<ph name="ROW_NAME" />“, šiuo metu pasirinkta. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Išvalyti duomenis</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">Rodyti išsaugotą kopiją</translation> <translation id="3008447029300691911">Įveskite „<ph name="CREDIT_CARD" />“ kortelės saugos kodą (CVC). Kai patvirtinsite, išsami kortelės informacija bus bendrinama su šia svetaine.</translation> <translation id="3010559122411665027">Sąrašo įrašas „<ph name="ENTRY_INDEX" />“: <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Kaip šio įrenginio valdytojas (<ph name="ENROLLMENT_DOMAIN" />):</translation> <translation id="301521992641321250">Automatiškai užblokuota</translation> <translation id="3023071826883856138">„You4“ (vokas)</translation> <translation id="3024663005179499861">Netinkamas politikos tipas</translation> @@ -432,7 +429,6 @@ <translation id="3287510313208355388">Atsisiųsti prisijungus</translation> <translation id="3293642807462928945">Sužinokite daugiau apie „<ph name="POLICY_NAME" />“ politiką</translation> <translation id="3303855915957856445">Nerasta jokių paieškos rezultatų</translation> -<translation id="3311730110465560799">Galima nuotoliniu būdu keisti įrenginio nustatymo procesą.</translation> <translation id="3320021301628644560">Atsiskaitymo adreso pridėjimas</translation> <translation id="3324983252691184275">Tamsiai raudona</translation> <translation id="3338095232262050444">Saugi</translation> @@ -527,7 +523,6 @@ <translation id="3761718714832595332">Slėpti būseną</translation> <translation id="3765032636089507299">Saugaus naršymo puslapis kuriamas.</translation> <translation id="3778403066972421603">Ar norite išsaugoti šią kortelę „Google“ paskyroje ir šiame įrenginyje?</translation> -<translation id="3779973883630527594">Šią paskyrą valdanti įmonė, mokykla arba organizacija:</translation> <translation id="3781428340399460090">Ryškiai rausva</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Galiojimo laikas baigiasi <ph name="EXPIRATION_MONTH" /> / <ph name="EXPIRATION_YEAR" /></translation> @@ -727,7 +722,6 @@ <translation id="4926159001844873046">Svetainėje <ph name="SITE" /> nurodyta:</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" /> / <ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Rezultatų nėra</translation> -<translation id="4945672369594656571">Valdoma, kaip apdorojami jūsų įrenginio ir paskyros duomenys. „Google“ apdoroja įrenginio ir paskyros duomenis tik pagal įrenginio ir paskyros valdytojo nurodymus ir tik įrenginio bei paskyros valdytojo nurodytais tikslais.</translation> <translation id="4950898438188848926">Skirtuko perjungimo mygtukas. Paspauskite „Enter“, kad perjungtumėte į atidarytą skirtuką „<ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" />“</translation> <translation id="495170559598752135">Veiksmai</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -741,7 +735,6 @@ <translation id="5017554619425969104">Nukopijuotas tekstas</translation> <translation id="5018422839182700155">Negalima atidaryti šio puslapio</translation> <translation id="5019198164206649151">Bloga atsarginio atminties įrenginio būsena</translation> -<translation id="5020154601324912079">Valdoma, kaip apdorojami jūsų įrenginio duomenys. „Google“ apdoroja įrenginio duomenis tik pagal įrenginio valdytojo nurodymus ir tik įrenginio valdytojo nurodytais tikslais.</translation> <translation id="5023310440958281426">Patikrinkite savo administratoriaus politiką</translation> <translation id="5029568752722684782">Išvalyti kopiją</translation> <translation id="503069730517007720">Reikalingas „<ph name="SOFTWARE_NAME" />“ šakninis sertifikatas, bet jis nėra įdiegtas. Jūsų IT administratorius turėtų peržiūrėti „<ph name="SOFTWARE_NAME" />“ konfigūravimo instrukcijas, kad išspręstų šią problemą. <ph name="FURTHER_EXPLANATION" /></translation> @@ -899,7 +892,6 @@ <translation id="5838278095973806738">Šioje svetainėje neturėtumėte pateikti neskelbtinos informacijos (pvz., slaptažodžių ar kredito kortelių numerių), nes ją gali pavogti užpuolikai.</translation> <translation id="5860033963881614850">Išjungta</translation> <translation id="5863847714970149516">Toliau pateiktame puslapyje gali būti bandoma jus apmokestinti</translation> -<translation id="5865951947699094510">Galima nuotoliniu būdu keisti paskyros kūrimo procesą.</translation> <translation id="5866257070973731571">Telefono numerio pridėjimas</translation> <translation id="5869405914158311789">Nepavyksta pasiekti šios svetainės</translation> <translation id="5869522115854928033">Išsaugoti slaptažodžiai</translation> @@ -1170,7 +1162,6 @@ Papildoma išsami informacija: <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Tvarkyti slaptažodžius…</translation> <translation id="7419106976560586862">Profilio kelias</translation> -<translation id="7424427397225027541">Valdoma, kaip apdorojami jūsų paskyros duomenys. „Google“ apdoroja paskyros duomenis tik pagal paskyros valdytojo nurodymus ir tik paskyros valdytojo nurodytais tikslais.</translation> <translation id="7437289804838430631">Pridėti kontaktinę informaciją</translation> <translation id="7440140511386898319">Naršymas neprisijungus</translation> <translation id="7441627299479586546">Netinkamas politikos objektas</translation> @@ -1256,7 +1247,6 @@ Papildoma išsami informacija: <translation id="780301667611848630">Ačiū, ne</translation> <translation id="7805768142964895445">Būsena</translation> <translation id="7806344367022510803">Keisti paieškos variklio nustatymus sistemoje „Chrome“</translation> -<translation id="7810209002420871817">Kaip jūsų paskyros valdytojas (<ph name="ACCOUNT_DOMAIN" />):</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Pašalinti formos pasiūlymą iš „Chrome“?</translation> <translation id="7815407501681723534">Pagal terminą „<ph name="SEARCH_STRING" />“ surasta tiek <ph name="SEARCH_RESULTS" />: <ph name="NUMBER_OF_RESULTS" /></translation> diff --git a/chromium/components/strings/components_strings_lv.xtb b/chromium/components/strings/components_strings_lv.xtb index 8279ef6b64e..6fc96ecd0be 100644 --- a/chromium/components/strings/components_strings_lv.xtb +++ b/chromium/components/strings/components_strings_lv.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="lv"> -<translation id="1001338328714563407">Jūsu ierīces un konta pārvaldnieks <ph name="ENROLLMENT_DOMAIN" /> var veikt tālāk norādītās darbības.</translation> <translation id="1008557486741366299">Vēlāk</translation> <translation id="1010200102790553230">Ielādēt lapu vēlāk</translation> <translation id="1015730422737071372">Sniegt papildu informāciju</translation> @@ -366,7 +365,6 @@ <translation id="2948083400971632585">Iestatījumu lapā varat atspējot jebkurus starpniekserverus, kas konfigurēti savienojuma izveidei.</translation> <translation id="2955913368246107853">Aizvērt atrašanas joslu</translation> <translation id="2969319727213777354">Lai izveidotu drošu savienojumu, ir jāiestata pareizs pulksteņa laiks. Tas ir nepieciešams, jo sertifikāti, kurus vietnes izmanto, lai tiktu identificētas, ir derīgi tikai noteiktos laika periodos. Tā kā jūsu ierīces pulkstenis nav pareizs, Google Chrome nevar verificēt šos sertifikātus.</translation> -<translation id="2970515157925768593">Var attālināti mainīt jūsu ierīces un konta iestatījumus.</translation> <translation id="2972581237482394796">&Pāratsaukt</translation> <translation id="2977665033722899841">Pašlaik ir atlasīta rinda “<ph name="ROW_NAME" />”. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Notīrīt datus</translation> @@ -378,7 +376,6 @@ <translation id="3005723025932146533">Rādīt saglabāto versiju</translation> <translation id="3008447029300691911">Ievadiet kredītkartes <ph name="CREDIT_CARD" /> CVC. Pēc apstiprināšanas kartes informācija tiks kopīgota ar šo vietni.</translation> <translation id="3010559122411665027">Saraksta ieraksts “<ph name="ENTRY_INDEX" />”: <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Šīs ierīces pārvaldnieks <ph name="ENROLLMENT_DOMAIN" /> var veikt tālāk norādītās darbības.</translation> <translation id="301521992641321250">Automātiski bloķēta</translation> <translation id="3023071826883856138">You4 (aploksne)</translation> <translation id="3024663005179499861">Politikas tips nav pareizs.</translation> @@ -424,7 +421,6 @@ <translation id="3287510313208355388">Lejupielādēt, kad pieejama tiešsaiste</translation> <translation id="3293642807462928945">Uzzināt vairāk par politiku <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Netika atrasts neviens meklēšanas rezultāts.</translation> -<translation id="3311730110465560799">Var attālināti mainīt jūsu ierīces iestatījumu.</translation> <translation id="3320021301628644560">Norēķinu adreses pievienošana</translation> <translation id="3324983252691184275">Tumši sarkana</translation> <translation id="3338095232262050444">Droši</translation> @@ -518,7 +514,6 @@ <translation id="3761718714832595332">Slēpt statusu</translation> <translation id="3765032636089507299">Drošās pārlūkošanas lapa pašlaik nav pieejama</translation> <translation id="3778403066972421603">Vai vēlaties saglabāt šo karti savā Google kontā un šajā ierīcē?</translation> -<translation id="3779973883630527594">Uzņēmums, mācību iestāde vai organizācija, kas pārvalda šo kontu:</translation> <translation id="3781428340399460090">Spilgti rozā</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Derīguma termiņš: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -718,7 +713,6 @@ <translation id="4926159001844873046">Vietnē <ph name="SITE" /> ir rakstīts</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Nav rezultātu</translation> -<translation id="4945672369594656571">Kontrolē jūsu ierīces un konta datu apstrādi. Google apstrādā jūsu ierīces un konta datus tikai jūsu ierīces un konta pārvaldnieka vadībā un tikai ierīces un konta pārvaldnieka norādītajiem mērķiem.</translation> <translation id="4950898438188848926">Ciļņu pārslēgšanas poga. Nospiediet ievadīšanas taustiņu, lai pārslēgtos uz atvērto cilni, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" />.</translation> <translation id="495170559598752135">Darbības</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -732,7 +726,6 @@ <translation id="5017554619425969104">Kopētais teksts</translation> <translation id="5018422839182700155">Nevar atvērt šo lapu</translation> <translation id="5019198164206649151">Dublējumu krātuve nav labā stāvoklī.</translation> -<translation id="5020154601324912079">Kontrolē ierīces datu apstrādi. Google apstrādā jūsu ierīces datus tikai jūsu ierīces pārvaldnieka vadībā un tikai ierīces pārvaldnieka norādītajiem mērķiem.</translation> <translation id="5023310440958281426">Administratora politiku pārbaude</translation> <translation id="5029568752722684782">Dzēst kopiju</translation> <translation id="503069730517007720">Programmatūrai <ph name="SOFTWARE_NAME" /> ir nepieciešams saknes sertifikāts, taču tas nav instalēts. Lai novērstu šo problēmu, tīkla administratoram ir jāapskata <ph name="SOFTWARE_NAME" /> konfigurācijas norādījumi. <ph name="FURTHER_EXPLANATION" /></translation> @@ -890,7 +883,6 @@ <translation id="5838278095973806738">Neievadiet šajā vietnē sensitīvu informāciju (piemēram, paroles vai kredītkartes), jo to var nozagt uzbrucēji.</translation> <translation id="5860033963881614850">Izsl.</translation> <translation id="5863847714970149516">Nākamajā lapā var tikt mēģināts pieprasīt naudu</translation> -<translation id="5865951947699094510">Var attālināti mainīt jūsu konta iestatījumus.</translation> <translation id="5866257070973731571">Tālruņa numura pievienošana</translation> <translation id="5869405914158311789">Šī vietne nav sasniedzama</translation> <translation id="5869522115854928033">Saglabātās paroles</translation> @@ -1158,7 +1150,6 @@ Papildu informācija: <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Pārvaldīt paroles…</translation> <translation id="7419106976560586862">Profila ceļš</translation> -<translation id="7424427397225027541">Kontrolē konta datu apstrādi. Google apstrādā jūsu konta datus tikai jūsu konta pārvaldnieka vadībā un tikai konta pārvaldnieka norādītajiem mērķiem.</translation> <translation id="7437289804838430631">Pievienot kontaktinformāciju</translation> <translation id="7440140511386898319">Pārlūkošana bezsaistē</translation> <translation id="7441627299479586546">Politikas subjekts nav pareizs.</translation> @@ -1244,7 +1235,6 @@ Papildu informācija: <translation id="780301667611848630">Nē, paldies</translation> <translation id="7805768142964895445">Statuss</translation> <translation id="7806344367022510803">Mainīt meklētājprogrammas iestatījumus pārlūkā Chrome</translation> -<translation id="7810209002420871817">Kā jūsu konta <ph name="ACCOUNT_DOMAIN" />pārvaldnieks.</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Vai noņemt veidlapas ieteikumu no pārlūka Chrome?</translation> <translation id="7815407501681723534">Meklējot pēc virknes “<ph name="SEARCH_STRING" />”, tika atrasti <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /></translation> diff --git a/chromium/components/strings/components_strings_ml.xtb b/chromium/components/strings/components_strings_ml.xtb index 9d29b166df3..d81285633db 100644 --- a/chromium/components/strings/components_strings_ml.xtb +++ b/chromium/components/strings/components_strings_ml.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ml"> -<translation id="1001338328714563407">നിങ്ങളുടെ ഉപകരണത്തിൻ്റെയും അക്കൗണ്ടിൻ്റെയും മാനേജരെന്ന നിലയിൽ, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">ഇപ്പോഴല്ല</translation> <translation id="1010200102790553230">പേജ് പിന്നീട് ലോഡ് ചെയ്യുക</translation> <translation id="1015730422737071372">കൂടുതൽ വിശദാംശങ്ങൾ നൽകുക</translation> @@ -365,7 +364,6 @@ <translation id="2948083400971632585">കണക്ഷനായി കോൺഫിഗർ ചെയ്ത ഏതൊരു പ്രോക്സികളും ക്രമീകരണങ്ങൾ പേജിൽ നിന്ന് നിങ്ങൾക്ക് പ്രവർത്തനരഹിതമാക്കാനാകും.</translation> <translation id="2955913368246107853">ഫൈന്ഡ് ബാര് അടയ്ക്കുക</translation> <translation id="2969319727213777354">ഒരു സുരക്ഷിത കണക്ഷൻ സ്ഥാപിക്കുന്നതിന്, നിങ്ങളുടെ ക്ലോക്ക് ശരിയായി സജ്ജീകരിക്കേണ്ടതുണ്ട്. വെബ്സൈറ്റുകൾ സ്വയം തിരിച്ചറിയുന്നതിന് ഉപയോഗിക്കുന്ന സർട്ടിഫിക്കറ്റുകൾ, നിർദ്ദിഷ്ട സമയ പരിധിയിൽ മാത്രം സാധുതയുള്ളതിനാലാണിത്. നിങ്ങളുടെ ഉപകരണത്തിന്റെ ക്ലോക്ക് തെറ്റായിരിക്കുന്നതിനാൽ, Google Chrome-ന് ഈ സർട്ടിഫിക്കറ്റുകൾ പരിശോധിച്ചുറപ്പിക്കാനാവില്ല.</translation> -<translation id="2970515157925768593">നിങ്ങളുടെ ഉപകരണ, അക്കൗണ്ട് സജ്ജീകരണം റിമോട്ടായി മാറ്റാനാവും.</translation> <translation id="2972581237482394796">&വീണ്ടും ചെയ്യുക</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, നിലവിൽ തിരഞ്ഞെടുത്തു. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">ഡാറ്റ മായ്ക്കുക</translation> @@ -377,7 +375,6 @@ <translation id="3005723025932146533">സംരക്ഷിച്ച പകർപ്പ് കാണിക്കുക</translation> <translation id="3008447029300691911"><ph name="CREDIT_CARD" />-ന്റെ CVC നൽകുക. സ്ഥിരീകരിച്ച് കഴിഞ്ഞാൽ, നിങ്ങളുടെ കാർഡ് വിശദാംശങ്ങൾ ഈ സൈറ്റുമായി പങ്കിടും.</translation> <translation id="3010559122411665027">ലിസ്റ്റ് എൻട്രി "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">ഈ ഉപകരണത്തിൻ്റെ മാനേജരെന്ന നിലയിൽ, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">സ്വയമേവ ബ്ലോക്കുചെയ്തു</translation> <translation id="3023071826883856138">You4 (എൻവലപ്പ്)</translation> <translation id="3024663005179499861">തെറ്റായ നയ തരം</translation> @@ -422,7 +419,6 @@ <translation id="3287510313208355388">ഓൺലൈൻ ആയിരിക്കുന്ന സമയത്ത് ഡൗൺലോഡ് ചെയ്യുക</translation> <translation id="3293642807462928945"><ph name="POLICY_NAME" /> നയത്തെ കുറിച്ച് കൂടുതലറിയുക</translation> <translation id="3303855915957856445">തിരയൽ ഫലങ്ങളൊന്നും കണ്ടെത്തിയില്ല</translation> -<translation id="3311730110465560799">നിങ്ങളുടെ ഉപകരണ സജ്ജീകരണം റിമോട്ട് ആയി മാറ്റാം.</translation> <translation id="3320021301628644560">ബില്ലിംഗ് വിലാസം ചേർക്കുക</translation> <translation id="3324983252691184275">ക്രിംസൺ</translation> <translation id="3338095232262050444">സുരക്ഷിതം</translation> @@ -517,7 +513,6 @@ <translation id="3761718714832595332">സ്റ്റാറ്റസ് മറയ്ക്കുക</translation> <translation id="3765032636089507299">സുരക്ഷിത ബ്രൗസിംഗ് പേജ് നിർമ്മാണത്തിലാണ്.</translation> <translation id="3778403066972421603">ഈ കാർഡ് നിങ്ങളുടെ Google അക്കൗണ്ടിലും ഈ ഉപകരണത്തിലും സംരക്ഷിക്കണോ?</translation> -<translation id="3779973883630527594">ഈ അക്കൗണ്ട് മാനേജ് ചെയ്യുന്ന കമ്പനി, സ്കൂൾ അല്ലെങ്കിൽ സ്ഥാപനം:</translation> <translation id="3781428340399460090">ഹോട്ട് പിങ്ക്</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569"><ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" />-ൽ അവസാനിക്കുന്നു</translation> @@ -717,7 +712,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> പറയുന്നത്:</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">ഫലങ്ങളൊന്നുമില്ല</translation> -<translation id="4945672369594656571">നിങ്ങളുടെ ഉപകരണ, അക്കൗണ്ട് ഡാറ്റ എങ്ങനെ കൈകാര്യം ചെയ്യുന്നു എന്നതിനെ നിയന്ത്രിക്കുന്നു. നിങ്ങളുടെ ഉപകരണ, അക്കൗണ്ട് മാനേജർ നൽകുന്ന നിർദ്ദേശങ്ങളുടെ മാത്രം അടിസ്ഥാനത്തിലും ഉപകരണ, അക്കൗണ്ട് മാനേജർ വ്യക്തമാക്കിയ ഉദ്ദേശ്യത്തിന് വേണ്ടി മാത്രവും Google നിങ്ങളുടെ ഉപകരണ ഡാറ്റ പ്രോസസ് ചെയ്യുന്നു.</translation> <translation id="4950898438188848926">ടാബ് മാറാനുള്ള ബട്ടൺ, തുറന്നിരിക്കുന്ന ടാബായ <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /> എന്നതിലേക്ക് മാറാൻ എൻ്റർ അമർത്തുക</translation> <translation id="495170559598752135">പ്രവര്ത്തനങ്ങള്</translation> <translation id="4955242332710481440">A5-അധികം</translation> @@ -731,7 +725,6 @@ <translation id="5017554619425969104">നിങ്ങൾ പകർത്തിയ ടെക്സ്റ്റ്</translation> <translation id="5018422839182700155">ഈ പേജ് തുറക്കാനായില്ല</translation> <translation id="5019198164206649151">ബാക്കിംഗ് സംഭരണം മോശം അവസ്ഥയിലാണ്</translation> -<translation id="5020154601324912079">നിങ്ങളുടെ ഉപകരണ ഡാറ്റ എങ്ങനെ കൈകാര്യം ചെയ്യുന്നു എന്നതിനെ നിയന്ത്രിക്കുന്നു. നിങ്ങളുടെ ഉപകരണ മാനേജർ നൽകിയ നിർദ്ദേശങ്ങളുടെ മാത്രം അടിസ്ഥാനത്തിലും ഉപകരണ മാനേജർ വ്യക്തമാക്കിയ ഉദ്ദേശ്യത്തിന് വേണ്ടി മാത്രവും Google നിങ്ങളുടെ ഉപകരണ ഡാറ്റ പ്രോസസ് ചെയ്യുന്നു.</translation> <translation id="5023310440958281426">നിങ്ങളുടെ അഡ്മിനിസ്ട്രേറ്ററുടെ നയങ്ങൾ പരിശോധിക്കുക.</translation> <translation id="5029568752722684782">പകർപ്പ് മായ്ക്കുക</translation> <translation id="503069730517007720">"<ph name="SOFTWARE_NAME" />" സോഫ്റ്റ്വെയറിന് ഒരു റൂട്ട് സർട്ടിഫിക്കറ്റ് ആവശ്യമാണ്, എന്നാൽ അത് ഇൻസ്റ്റാൾ ചെയ്തിട്ടില്ല. ഈ പ്രശ്നം പരിഹരിക്കാൻ, "<ph name="SOFTWARE_NAME" />" സോഫ്റ്റ്വെയറിനുള്ള കോൺഫിഗറേഷൻ നിർദ്ദേശങ്ങൾ ഐടി അഡ്മിനിസ്ട്രേറ്റർ പരിശോധിക്കേണ്ടതുണ്ട്. <ph name="FURTHER_EXPLANATION" /></translation> @@ -889,7 +882,6 @@ <translation id="5838278095973806738">അക്രമകാരികൾ മോഷ്ടിക്കാൻ സാധ്യതയുള്ളതിനാൽ ഈ സൈറ്റിൽ നിങ്ങളുടെ രഹസ്യ വിവരങ്ങളൊന്നും (ഉദാഹരണത്തിന്, പാസ്വേഡുകളോ ക്രെഡിറ്റ് കാർഡുകളോ പോലുള്ളവ) നൽകരുത്.</translation> <translation id="5860033963881614850">ഓഫാക്കുക</translation> <translation id="5863847714970149516">മുമ്പോട്ടുള്ള പേജ് നിങ്ങളിൽ നിന്ന് പണമീടാക്കാൻ ശ്രമിച്ചേക്കാം</translation> -<translation id="5865951947699094510">നിങ്ങളുടെ അക്കൗണ്ട് സജ്ജീകരണം റിമോട്ട് ആയി മാറ്റാം.</translation> <translation id="5866257070973731571">ഫോണ് നമ്പര് ചേര്ക്കുക</translation> <translation id="5869405914158311789">ഈ സൈറ്റ് ലഭ്യമാക്കാനാകുന്നില്ല</translation> <translation id="5869522115854928033">സംരക്ഷിച്ച പാസ്വേഡുകള്</translation> @@ -1155,7 +1147,6 @@ <translation id="741007362987735528">വിസ്തൃത-ഫോർമാറ്റ്</translation> <translation id="7416351320495623771">പാസ്വേഡുകൾ മാനേജ് ചെയ്യുക…</translation> <translation id="7419106976560586862">പ്രൊഫൈൽ പാത</translation> -<translation id="7424427397225027541">നിങ്ങളുടെ അക്കൗണ്ട് ഡാറ്റ കൈകാര്യം ചെയ്യുന്നത് എങ്ങനെയെന്നത് നിയന്ത്രിക്കുന്നു. നിങ്ങളുടെ അക്കൗണ്ട് മാനേജർ നൽകുന്ന നിർദ്ദേശങ്ങളുടെ മാത്രം അടിസ്ഥാനത്തിലും അക്കൗണ്ട് മാനേജർ വ്യക്തമാക്കിയ ഉദ്ദേശ്യത്തിന് വേണ്ടി മാത്രവും Google നിങ്ങളുടെ ഉപകരണ ഡാറ്റ പ്രോസസ് ചെയ്യുന്നു.</translation> <translation id="7437289804838430631">ബന്ധപ്പെടാനുള്ള വിവരങ്ങൾ ചേർക്കുക</translation> <translation id="7440140511386898319">ഓഫ്ലൈനായിരിക്കുമ്പോൾ ഉള്ളടക്കം അടുത്തറിയുക</translation> <translation id="7441627299479586546">തെറ്റായ നയ വിഷയം</translation> @@ -1241,7 +1232,6 @@ <translation id="780301667611848630">വേണ്ട നന്ദി</translation> <translation id="7805768142964895445">നില</translation> <translation id="7806344367022510803">Chrome-ൽ തിരയല് യന്ത്ര ക്രമീകരണം മാറ്റുക</translation> -<translation id="7810209002420871817">നിങ്ങളുടെ അക്കൗണ്ടിൻ്റെ മാനേജരെന്ന നിലയിൽ, <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Chrome-ൽ നിന്നുള്ള നിർദ്ദേശം നീക്കംചെയ്യണോ?</translation> <translation id="7815407501681723534">'<ph name="SEARCH_STRING" />' എന്നതിന്റെ <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> കണ്ടു</translation> diff --git a/chromium/components/strings/components_strings_mr.xtb b/chromium/components/strings/components_strings_mr.xtb index a75f0e29791..71ec5f7b953 100644 --- a/chromium/components/strings/components_strings_mr.xtb +++ b/chromium/components/strings/components_strings_mr.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="mr"> -<translation id="1001338328714563407">तुमच्या डिव्हाइस आणि खात्याचे, <ph name="ENROLLMENT_DOMAIN" /> व्यवस्थापक म्हणून:</translation> <translation id="1008557486741366299">सध्या नाही</translation> <translation id="1010200102790553230">पेज नंतर लोड करा</translation> <translation id="1015730422737071372">अतिरिक्त तपशील प्रदान करा</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">तुम्हे सेटिंग्ज पेजवरून एका कनेक्शनसाठी कॉन्फिगर केलेले कोणत्याही प्रॉक्सी अक्षम करू शकता.</translation> <translation id="2955913368246107853">शोध बार बंद करा</translation> <translation id="2969319727213777354">एक सुरक्षित कनेक्शन स्थापित करण्यापूर्वी, तुमचे घड्याळ योग्यरित्या सेट केले असणे आवश्यक आहे. वेबसाइट त्यांना स्वत:ला ओळखण्यासाठी वापरलेली ती सर्टिफिकेटे केवळ नमूद केलेल्या कालावधीसाठी वैध असल्याने हे असू शकते. तुमच्या डिव्हाइसचे घड्याळ चुकीचे असल्यामुळे, Google Chrome ला सर्टिफिकेट पडताळणी करता आली नाही.</translation> -<translation id="2970515157925768593">तुमच्या डिव्हाइसचे आणि खात्याचे सेटअप रिमोट पद्धतीने बदलू शकता.</translation> <translation id="2972581237482394796">&पुन्हा करा</translation> <translation id="2977665033722899841">सध्या निवडलेली <ph name="ROW_NAME" />. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">डेटा साफ करा</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">सेव्ह केलेली प्रत दर्शवा</translation> <translation id="3008447029300691911"><ph name="CREDIT_CARD" /> साठी CVC प्रविष्ट करा. तुम्ही पुष्टी केल्यावर, तुमचे कार्ड तपशील या साइटसह शेअर केले जातील.</translation> <translation id="3010559122411665027">सूची प्रविष्टी "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">डिव्हाइसचे व्यवस्थापक म्हणून <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">आपोआप ब्लॉक केलेले</translation> <translation id="3023071826883856138">You4 (Envelope)</translation> <translation id="3024663005179499861">चुकीचा धोरण प्रकार</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">ऑनलाइन असताना डाउनलोड करा</translation> <translation id="3293642807462928945"><ph name="POLICY_NAME" /> धोरणांबद्दल अधिक जाणून घ्या</translation> <translation id="3303855915957856445">कोणतेही शोध परिणाम आढळले नाहीत</translation> -<translation id="3311730110465560799">तुमच्या डिव्हाइसचे सेटअप रिमोट पद्धतीने बदलू शकता.</translation> <translation id="3320021301628644560">बिलिंग पत्ता जोडा</translation> <translation id="3324983252691184275">किरमिजी</translation> <translation id="3338095232262050444">सुरक्षित</translation> @@ -525,7 +521,6 @@ <translation id="3761718714832595332">स्थिती लपवा</translation> <translation id="3765032636089507299">सुरक्षित ब्राउझिंग पेज तयार होत आहे.</translation> <translation id="3778403066972421603">तुम्हाला हे कार्ड तुमच्या Google खात्यामध्ये आणि या डिव्हाइसवर सेव्ह करायचे आहे का?</translation> -<translation id="3779973883630527594">या खात्याचे व्यवस्थापन करणारी कंपनी, शाळा किंवा संस्था:</translation> <translation id="3781428340399460090">गडद गुलाबी</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">समाप्त होते: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -725,7 +720,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> चे म्हणणे हे आहे की</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">परिणाम नाहीत</translation> -<translation id="4945672369594656571">तुमचे डिव्हाइस आणि खाते डेटा कसा हाताळला जातो यावर नियंत्रण ठेवा. Google विशेषत: तुमच्या डिव्हाइस आणि खाते व्यवस्थापकाच्या निर्देशानुसार आणि तुमच्या डिव्हाइस आणि खाते व्यवस्थापकाने नमूद केलेल्या उद्देशांतर्गत तुमच्या डिव्हाइस आणि खाते डेटाची प्रक्रिया करते.</translation> <translation id="4950898438188848926">टॅब स्विच बटण, उघड्या टॅबवर स्विच करण्यासाठी एंटर दाबा, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">क्रिया</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -739,7 +733,6 @@ <translation id="5017554619425969104">तुम्ही कॉपी केलेला मजकूर</translation> <translation id="5018422839182700155">हे पृष्ठ उघडू शकत नाही</translation> <translation id="5019198164206649151">समर्थन संचयन खराब स्थितीत</translation> -<translation id="5020154601324912079">तुमच्या डिव्हाइसचा डेटा कसा हाताळला जातो ते नियंत्रित करा. Google विशेषत: तुमच्या डिव्हाइस व्यवस्थापकाच्या निर्देशानुसार आणि तुमच्या डिव्हाइस व्यवस्थापकाने नमूद केलेल्या उद्देशांतर्गत तुमच्या डिव्हाइस डेटाची प्रक्रिया करते.</translation> <translation id="5023310440958281426">तुमच्या अॅडमिनिस्ट्रेटरची धोरणे तपासा</translation> <translation id="5029568752722684782">कॉपी साफ करा</translation> <translation id="503069730517007720">"<ph name="SOFTWARE_NAME" />" साठी मूळ सर्टिफिकेट आवश्यक आहे परंतु ते इंस्टॉल केलेले नाही. तुमच्या IT अॅडमिनिस्ट्रेटरने ही समस्या सोडण्यासाठी "<ph name="SOFTWARE_NAME" />" साठीच्या कॉन्फिगरेशन सूचना पहाव्यात. <ph name="FURTHER_EXPLANATION" /></translation> @@ -897,7 +890,6 @@ <translation id="5838278095973806738">या साइटवर कोणतीही संवेदनशील माहिती (उदाहरणार्थ, पासवर्ड किंवा क्रेडिट कार्ड) एंटर करू नका, कारण आक्रमणकर्ते ती चोरू शकतात.</translation> <translation id="5860033963881614850">बंद</translation> <translation id="5863847714970149516">पुढील पेजवर तुमच्याकडून शुल्क आकारले जाऊ शकते</translation> -<translation id="5865951947699094510">तुमच्या खात्याचे सेटअप रिमोट पद्धतीने बदलू शकता.</translation> <translation id="5866257070973731571">फोन नंबर जोडा</translation> <translation id="5869405914158311789">या साइटवर पोहचणे शक्य नाही</translation> <translation id="5869522115854928033">सेव्ह केलेले पासवर्ड</translation> @@ -1169,7 +1161,6 @@ <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">पासवर्ड व्यवस्थापित करा…</translation> <translation id="7419106976560586862">प्रोफाइल पथ</translation> -<translation id="7424427397225027541">तुमच्या खात्याचा डेटा कसा हाताळला जातो ते नियंत्रित करा. Google विशेषत: तुमच्या खाते व्यवस्थापकाच्या निर्देशानुसार आणि तुमच्या खाते व्यवस्थापकाने नमूद केलेल्या उद्देशांतर्गत तुमच्या खाते डेटाची प्रक्रिया करते.</translation> <translation id="7437289804838430631">संपर्क माहिती जोडा</translation> <translation id="7440140511386898319">ऑफलाइन असताना एक्सप्लोर करा</translation> <translation id="7441627299479586546">चुकीचे धोरण विषय</translation> @@ -1255,7 +1246,6 @@ <translation id="780301667611848630">नाही, नको</translation> <translation id="7805768142964895445">स्थिती</translation> <translation id="7806344367022510803">Chrome मध्ये शोध इंजिन सेटिंग्ज बदला</translation> -<translation id="7810209002420871817">तुमचा <ph name="ACCOUNT_DOMAIN" />खाते व्यवस्थापक म्हणून:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Chrome मधून सूचना फॉर्म काढून टाकायचा?</translation> <translation id="7815407501681723534">'<ph name="SEARCH_STRING" />' साठी <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> सापडले</translation> diff --git a/chromium/components/strings/components_strings_ms.xtb b/chromium/components/strings/components_strings_ms.xtb index 694f6c6384a..0be3f775cb3 100644 --- a/chromium/components/strings/components_strings_ms.xtb +++ b/chromium/components/strings/components_strings_ms.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ms"> -<translation id="1001338328714563407">Sebagai pengurus peranti dan akaun anda, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Bukan Sekarang</translation> <translation id="1010200102790553230">Muatkan halaman kemudian</translation> <translation id="1015730422737071372">Berikan butiran tambahan</translation> @@ -366,7 +365,6 @@ <translation id="2948083400971632585">Anda boleh melumpuhkan sebarang proksi yang dikonfigurasi untuk sambungan dari halaman tetapan.</translation> <translation id="2955913368246107853">Tutup bar cari</translation> <translation id="2969319727213777354">Untuk mewujudkan sambungan yang selamat, jam anda perlu ditetapkan dengan betul. Perkara ini perlu dilakukan kerana sijil yang digunakan laman web untuk mengenal pastinya hanya sah untuk tempoh masa yang tertentu. Memandangkan jam peranti anda tidak betul, Google Chrome tidak boleh mengesahkan sijil ini.</translation> -<translation id="2970515157925768593">Boleh menukar penyediaan peranti dan akaun anda dari jauh.</translation> <translation id="2972581237482394796">&Buat Semula</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, dipilih pada masa ini. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Kosongkan Data</translation> @@ -378,7 +376,6 @@ <translation id="3005723025932146533">Paparkan salinan disimpan</translation> <translation id="3008447029300691911">Masukkan CVC untuk <ph name="CREDIT_CARD" />. Setelah anda mengesahkan, butiran kad anda akan dikongsi dengan tapak ini.</translation> <translation id="3010559122411665027">Masukan senarai "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Sebagai pengurus peranti ini, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Disekat secara automatik</translation> <translation id="3023071826883856138">You4 (Sampul Surat)</translation> <translation id="3024663005179499861">Jenis dasar salah</translation> @@ -424,7 +421,6 @@ <translation id="3287510313208355388">Muat turun semasa dalam talian</translation> <translation id="3293642807462928945">Ketahui lebih lanjut tentang dasar <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Tiada hasil carian ditemui</translation> -<translation id="3311730110465560799">Boleh menukar penyediaan peranti anda dari jauh.</translation> <translation id="3320021301628644560">Tambahkan alamat pengebilan</translation> <translation id="3324983252691184275">Merah lembayung</translation> <translation id="3338095232262050444">Selamat</translation> @@ -520,7 +516,6 @@ <translation id="3761718714832595332">Sembunyikan status</translation> <translation id="3765032636089507299">Halaman Penyemakan Imbas Selamat sedang dalam pembinaan.</translation> <translation id="3778403066972421603">Adakah anda ingin menyimpan maklumat kad ini ke Akaun Google anda dan pada peranti ini?</translation> -<translation id="3779973883630527594">Syarikat, institusi pengajian atau organisasi yang mengurus akaun ini:</translation> <translation id="3781428340399460090">Merah Jambu Hangat</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Tamat tempoh pada <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -720,7 +715,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> menyatakan</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Tiada hasil carian</translation> -<translation id="4945672369594656571">Mengawal cara data peranti dan akaun anda dikendalikan. Google memproses data peranti dan akaun anda secara eksklusif di bawah arahan pengurus peranti serta akaun anda dan semata-mata untuk tujuan yang dinyatakan oleh pengurus peranti dan akaun anda.</translation> <translation id="4950898438188848926">Butang peralihan tab, tekan Enter untuk beralih ke tab yang terbuka, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Tindakan</translation> <translation id="4955242332710481440">A5-Ekstra</translation> @@ -734,7 +728,6 @@ <translation id="5017554619425969104">Teks yang anda salin</translation> <translation id="5018422839182700155">Tidak dapat membuka halaman ini</translation> <translation id="5019198164206649151">Simpanan penyandaran dalam keadaan buruk</translation> -<translation id="5020154601324912079">Mengawal cara data peranti anda dikendalikan. Google memproses data peranti anda secara eksklusif di bawah arahan pengurus peranti anda dan semata-mata untuk tujuan yang dinyatakan oleh pengurus peranti anda.</translation> <translation id="5023310440958281426">Semak dasar pentadbir anda</translation> <translation id="5029568752722684782">Hapuskan salinan</translation> <translation id="503069730517007720">Sijil akar bagi "<ph name="SOFTWARE_NAME" />" diperlukan tetapi tidak dipasang. Pentadbir IT anda harus melihat arahan konfigurasi "<ph name="SOFTWARE_NAME" />" untuk menyelesaikan masalah ini. <ph name="FURTHER_EXPLANATION" /></translation> @@ -892,7 +885,6 @@ <translation id="5838278095973806738">Anda tidak seharusnya memasukkan sebarang maklumat sensitif pada tapak ini (contohnya, kata laluan atau maklumat kad kredit) kerana maklumat ini boleh dicuri oleh penyerang.</translation> <translation id="5860033963881614850">Dimatikan</translation> <translation id="5863847714970149516">Halaman yang seterusnya mungkin cuba mengenakan bayaran kepada anda</translation> -<translation id="5865951947699094510">Boleh menukar persediaan akaun anda dari jauh.</translation> <translation id="5866257070973731571">Tambahkan Nombor Telefon</translation> <translation id="5869405914158311789">Tapak ini tidak dapat dicapai</translation> <translation id="5869522115854928033">Kata laluan disimpan</translation> @@ -1160,7 +1152,6 @@ Butiran tambahan: <translation id="741007362987735528">Format-Lebar</translation> <translation id="7416351320495623771">Urus Kata Laluan…</translation> <translation id="7419106976560586862">Laluan Profil</translation> -<translation id="7424427397225027541">Mengawal cara data akaun anda dikendalikan. Google memproses data akaun anda secara eksklusif di bawah arahan pengurus akaun anda dan semata-mata untuk tujuan yang dinyatakan oleh pengurus akaun anda.</translation> <translation id="7437289804838430631">Tambahkan Maklumat Hubungan</translation> <translation id="7440140511386898319">Teroka semasa di luar talian</translation> <translation id="7441627299479586546">Subjek dasar salah</translation> @@ -1246,7 +1237,6 @@ Butiran tambahan: <translation id="780301667611848630">Tidak, terima kasih</translation> <translation id="7805768142964895445">Status</translation> <translation id="7806344367022510803">Tukar tetapan Enjin Carian dalam Chrome</translation> -<translation id="7810209002420871817">Sebagai pengurus akaun anda, <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Alih keluar cadangan borang daripada Chrome?</translation> <translation id="7815407501681723534">Menemui <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> untuk '<ph name="SEARCH_STRING" />'</translation> diff --git a/chromium/components/strings/components_strings_nl.xtb b/chromium/components/strings/components_strings_nl.xtb index 422c2cf5c8f..a742f7a719b 100644 --- a/chromium/components/strings/components_strings_nl.xtb +++ b/chromium/components/strings/components_strings_nl.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="nl"> -<translation id="1001338328714563407">Als beheerder van je apparaat en account kan <ph name="ENROLLMENT_DOMAIN" /> het volgende:</translation> <translation id="1008557486741366299">Niet nu</translation> <translation id="1010200102790553230">Pagina later laden</translation> <translation id="1015730422737071372">Aanvullende gegevens verzenden</translation> @@ -266,7 +265,7 @@ <translation id="2380886658946992094">Legal</translation> <translation id="2384307209577226199">Zakelijk standaard</translation> <translation id="2386255080630008482">Het servercertificaat is ingetrokken.</translation> -<translation id="2392959068659972793">Beleid weergeven zonder waarde ingesteld</translation> +<translation id="2392959068659972793">Beleid zonder ingestelde waarde weergeven</translation> <translation id="239429038616798445">Deze verzendmethode is niet beschikbaar. Kies een andere methode.</translation> <translation id="2396249848217231973">&Verwijderen ongedaan maken</translation> <translation id="2410754574180102685">Government-Legal</translation> @@ -365,7 +364,6 @@ <translation id="2948083400971632585">Via de instellingenpagina kun je proxyservers uitschakelen die voor een verbinding zijn geconfigureerd.</translation> <translation id="2955913368246107853">Zoekbalk sluiten</translation> <translation id="2969319727213777354">Als je een beveiligde verbinding tot stand wilt brengen, moet je klok correct zijn ingesteld. Dit moet omdat de certificaten die deze websites gebruiken om zichzelf te identificeren, slechts gedurende bepaalde perioden geldig zijn. Aangezien de klok van je apparaat niet goed is ingesteld, kan Chrome deze certificaten niet verifiëren.</translation> -<translation id="2970515157925768593">Op afstand je apparaat- en accountinstellingen wijzigen.</translation> <translation id="2972581237482394796">&Opnieuw</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, momenteel geselecteerd. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Gegevens wissen</translation> @@ -377,7 +375,6 @@ <translation id="3005723025932146533">Opgeslagen kopie weergeven</translation> <translation id="3008447029300691911">Geef de CVC-code voor <ph name="CREDIT_CARD" /> op. Zodra je bevestigt, worden je creditcardgegevens gedeeld met deze site.</translation> <translation id="3010559122411665027">Lijstitem '<ph name="ENTRY_INDEX" />': <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Als beheerder van dit apparaat kan <ph name="ENROLLMENT_DOMAIN" /> het volgende:</translation> <translation id="301521992641321250">Automatisch geblokkeerd</translation> <translation id="3023071826883856138">You4 (envelop)</translation> <translation id="3024663005179499861">Onjuist beleidstype</translation> @@ -420,7 +417,6 @@ <translation id="3287510313208355388">Downloaden wanneer online</translation> <translation id="3293642807462928945">Meer informatie over het beleid <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Geen zoekresultaten gevonden</translation> -<translation id="3311730110465560799">Op afstand je apparaatinstellingen wijzigen.</translation> <translation id="3320021301628644560">Factuuradres toevoegen</translation> <translation id="3324983252691184275">Karmozijnrood</translation> <translation id="3338095232262050444">Beveiligd</translation> @@ -513,7 +509,6 @@ <translation id="3761718714832595332">Status verbergen</translation> <translation id="3765032636089507299">De Safe Browsing-pagina is in aanbouw.</translation> <translation id="3778403066972421603">Wil je deze pas opslaan in je Google-account en op dit apparaat?</translation> -<translation id="3779973883630527594">Het bedrijf, de school of de organisatie waardoor dit account wordt beheerd, kan het volgende:</translation> <translation id="3781428340399460090">Felroze</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Verloopt: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -713,7 +708,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> meldt het volgende</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Geen resultaten</translation> -<translation id="4945672369594656571">Bepalen hoe je apparaat- en accountgegevens worden verwerkt. Google verwerkt je apparaat- en accountgegevens uitsluitend op aanwijzing van je apparaat- en accountbeheerder en alleen voor de doeleinden die zijn opgegeven door je apparaat- en accountbeheerder.</translation> <translation id="4950898438188848926">Schakelknop voor tabbladen, druk op Enter om naar het geopende tabblad, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, te schakelen</translation> <translation id="495170559598752135">Acties</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -727,7 +721,6 @@ <translation id="5017554619425969104">Tekst die je hebt gekopieerd</translation> <translation id="5018422839182700155">Kan deze pagina niet openen</translation> <translation id="5019198164206649151">Backend-opslag in slechte staat</translation> -<translation id="5020154601324912079">Bepalen hoe je apparaatgegevens worden verwerkt. Google verwerkt je apparaatgegevens uitsluitend op aanwijzing van je apparaatbeheerder en alleen voor de doeleinden die zijn opgegeven door je apparaatbeheerder.</translation> <translation id="5023310440958281426">Neem het beleid van je beheerder door</translation> <translation id="5029568752722684782">Kopie wissen</translation> <translation id="503069730517007720">Er is een rootcertificaat voor '<ph name="SOFTWARE_NAME" />' vereist, maar niet geïnstalleerd. Je IT-beheerder moet de configuratie-instructies voor '<ph name="SOFTWARE_NAME" />' raadplegen om dit probleem op te lossen. <ph name="FURTHER_EXPLANATION" /></translation> @@ -885,7 +878,6 @@ <translation id="5838278095973806738">Geef geen gevoelige gegevens op op deze site (zoals wachtwoorden of creditcards), want deze kunnen worden gestolen door cybercriminelen.</translation> <translation id="5860033963881614850">Uit</translation> <translation id="5863847714970149516">De komende pagina probeert misschien kosten in rekening te brengen</translation> -<translation id="5865951947699094510">Op afstand je accountinstellingen wijzigen.</translation> <translation id="5866257070973731571">Telefoonnummer toevoegen</translation> <translation id="5869405914158311789">Deze site is niet bereikbaar</translation> <translation id="5869522115854928033">Opgeslagen wachtwoorden</translation> @@ -1152,7 +1144,6 @@ Aanvullende informatie: <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Wachtwoorden beheren…</translation> <translation id="7419106976560586862">Profielpad</translation> -<translation id="7424427397225027541">Bepalen hoe je accountgegevens worden verwerkt. Google verwerkt je accountgegevens uitsluitend op aanwijzing van je accountbeheerder en alleen voor de doeleinden die zijn opgegeven door je accountbeheerder.</translation> <translation id="7437289804838430631">Contactgegevens toevoegen</translation> <translation id="7440140511386898319">Content bekijken wanneer je offline bent</translation> <translation id="7441627299479586546">Onjuist beleidsonderwerp</translation> @@ -1238,7 +1229,6 @@ Aanvullende informatie: <translation id="780301667611848630">Nee, bedankt</translation> <translation id="7805768142964895445">Status</translation> <translation id="7806344367022510803">De zoekmachine-instellingen wijzigen in Chrome</translation> -<translation id="7810209002420871817">Als beheerder van je account kan <ph name="ACCOUNT_DOMAIN" /> het volgende:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Formuliersuggestie verwijderen uit Chrome?</translation> <translation id="7815407501681723534"><ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> gevonden voor '<ph name="SEARCH_STRING" />'</translation> diff --git a/chromium/components/strings/components_strings_no.xtb b/chromium/components/strings/components_strings_no.xtb index 97ff8a1a0a0..fd13f2a69f2 100644 --- a/chromium/components/strings/components_strings_no.xtb +++ b/chromium/components/strings/components_strings_no.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="no"> -<translation id="1001338328714563407">Som administrator for enheten og kontoen din kan <ph name="ENROLLMENT_DOMAIN" /></translation> <translation id="1008557486741366299">Ikke nå</translation> <translation id="1010200102790553230">Last inn siden senere</translation> <translation id="1015730422737071372">Oppgi flere detaljer</translation> @@ -129,7 +128,7 @@ <p>Juster datoen og klokkeslettet under <strong>Generelt</strong> i <strong>Innstillinger</strong>-appen.</p></translation> <translation id="1569487616857761740">Oppgi utløpsdato</translation> <translation id="1581080074034554886">CVC</translation> -<translation id="1583429793053364125">Noe gikk galt under åpningen av denne nettsiden.</translation> +<translation id="1583429793053364125">Noe gikk galt da denne nettsiden skulle åpnes.</translation> <translation id="1592005682883173041">Tilgang til lokale data</translation> <translation id="1594030484168838125">Velg</translation> <translation id="161042844686301425">Cyan</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">På innstillingssiden kan du deaktivere eventuelle mellomtjenere for tilkoblinger.</translation> <translation id="2955913368246107853">Lukk søkefelt</translation> <translation id="2969319727213777354">Klokken må være riktig stilt før du kan opprette sikre tilkoblinger. Grunnen til dette er at sertifikatene nettsteder identifiserer seg med, bare er gyldige i visse tidsperioder. Ettersom klokken på enheten din er feil, kan ikke Google Chrome bekrefte disse sertifikatene.</translation> -<translation id="2970515157925768593">endre enhets- og kontooppsettet eksternt</translation> <translation id="2972581237482394796">Gjø&r om</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, for øyeblikket valgt. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Fjern data</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">Vis lagret kopi</translation> <translation id="3008447029300691911">Skriv inn verifiseringskoden for <ph name="CREDIT_CARD" />. Når du bekrefter, deles kortinformasjonen din med dette nettstedet.</translation> <translation id="3010559122411665027">Listeoppføring «<ph name="ENTRY_INDEX" />»: <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Som administrator for denne enheten kan <ph name="ENROLLMENT_DOMAIN" /></translation> <translation id="301521992641321250">Automatisk blokkert</translation> <translation id="3023071826883856138">You4 (konvolutt)</translation> <translation id="3024663005179499861">Feil type enhetsinnstillinger</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">Last ned når du er koblet til Internett</translation> <translation id="3293642807462928945">Finn ut mer om regelen <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Søket ga ingen treff</translation> -<translation id="3311730110465560799">endre enhetsoppsettet eksternt</translation> <translation id="3320021301628644560">Legg til faktureringsadresse</translation> <translation id="3324983252691184275">Karmosinrød</translation> <translation id="3338095232262050444">Sikker</translation> @@ -526,7 +522,6 @@ <translation id="3761718714832595332">Skjul statusen</translation> <translation id="3765032636089507299">Safe Browsing-siden er under utvikling.</translation> <translation id="3778403066972421603">Vil du lagre dette kortet i Google-kontoen din og på denne enheten?</translation> -<translation id="3779973883630527594">Selskapet, skolen eller organisasjonen som administrerer denne kontoen, kan</translation> <translation id="3781428340399460090">Knallrosa</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Utløper <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -726,7 +721,6 @@ <translation id="4926159001844873046">På <ph name="SITE" /> står det</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Ingen resultater</translation> -<translation id="4945672369594656571">styre hvordan enhets- og kontodataene dine håndteres Google behandler enhets- og kontodataene dine utelukkende etter anvisning fra enhets- og kontoadministratoren og kun for de formålene som enhets- og kontoadministratoren har angitt.</translation> <translation id="4950898438188848926">Knappen for å bytte fane – trykk på Enter for å bytte til den åpne fanen, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Handlinger</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -740,7 +734,6 @@ <translation id="5017554619425969104">Teksten du kopierte</translation> <translation id="5018422839182700155">Kan ikke åpne denne siden</translation> <translation id="5019198164206649151">Ugyldig funksjonalitet for sikkerhetskopiering</translation> -<translation id="5020154601324912079">styre hvordan enhetsdataene dine håndteres Google behandler enhetsdataene dine utelukkende etter anvisning fra enhetsadministratoren og kun for de formålene som enhetsadministratoren har angitt.</translation> <translation id="5023310440958281426">Kontrollér retningslinjene til administratoren din</translation> <translation id="5029568752722684782">Slett kopi</translation> <translation id="503069730517007720">Et rotsertifikat for «<ph name="SOFTWARE_NAME" />» kreves, men er ikke installert. IT-administratoren din bør se på konfigurasjonsveiledningen for «<ph name="SOFTWARE_NAME" />» for å løse dette problemet. <ph name="FURTHER_EXPLANATION" /></translation> @@ -898,7 +891,6 @@ <translation id="5838278095973806738">Du bør ikke oppgi sensitiv informasjon på dette nettstedet (for eksempel passord eller kredittkort) fordi den kan bli stjålet av angripere.</translation> <translation id="5860033963881614850">Av</translation> <translation id="5863847714970149516">Den neste siden kan prøve å belaste deg for penger</translation> -<translation id="5865951947699094510">endre kontooppsettet eksternt</translation> <translation id="5866257070973731571">Legg til telefonnummer</translation> <translation id="5869405914158311789">Dette nettstedet er ikke tilgjengelig</translation> <translation id="5869522115854928033">Lagrede passord</translation> @@ -1168,7 +1160,6 @@ <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Administrer passord…</translation> <translation id="7419106976560586862">Profilbane</translation> -<translation id="7424427397225027541">styre hvordan kontodataene dine håndteres Google behandler kontodataene dine utelukkende etter anvisning fra kontoadministratoren og kun for de formålene som kontoadministratoren har angitt.</translation> <translation id="7437289804838430631">Legg til kontaktinformasjon</translation> <translation id="7440140511386898319">Utforsk uten nett</translation> <translation id="7441627299479586546">Feil emne for innstillinger</translation> @@ -1254,7 +1245,6 @@ <translation id="780301667611848630">Nei takk</translation> <translation id="7805768142964895445">Status</translation> <translation id="7806344367022510803">Endre innstillingene for søkemotor i Chrome</translation> -<translation id="7810209002420871817">Som administrator for kontoen din kan <ph name="ACCOUNT_DOMAIN" /></translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Vil du fjerne skjemaforslaget fra Chrome?</translation> <translation id="7815407501681723534">Fant <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> for «<ph name="SEARCH_STRING" />»</translation> diff --git a/chromium/components/strings/components_strings_pl.xtb b/chromium/components/strings/components_strings_pl.xtb index e3acead3f09..a6c2f19b382 100644 --- a/chromium/components/strings/components_strings_pl.xtb +++ b/chromium/components/strings/components_strings_pl.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="pl"> -<translation id="1001338328714563407">Zarządzająca Twoim urządzeniem i kontem domena <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Nie teraz</translation> <translation id="1010200102790553230">Wczytaj stronę później</translation> <translation id="1015730422737071372">Podaj dodatkowe informacje</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">Możesz wyłączyć dowolne serwery proxy skonfigurowane dla połączenia na stronie ustawień.</translation> <translation id="2955913368246107853">Zamknij pasek wyszukiwania</translation> <translation id="2969319727213777354">Aby urządzenie nawiązało bezpieczne połączenie, jego zegar musi wskazywać prawidłową godzinę. Jest to wymagane, bo certyfikaty używane do identyfikacji stron internetowych są ważne tylko przez określony czas. Zegar urządzenia jest ustawiony nieprawidłowo, więc Google Chrome nie może zweryfikować tych certyfikatów.</translation> -<translation id="2970515157925768593">Może zdalnie zmienić konfigurację Twojego urządzenia i konta.</translation> <translation id="2972581237482394796">&Ponów</translation> <translation id="2977665033722899841">Obecnie wybrany wiersz to <ph name="ROW_NAME" />. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Wyczyść dane</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">Pokaż zapisaną kopię</translation> <translation id="3008447029300691911">Wpisz kod CVC karty <ph name="CREDIT_CARD" />. Po potwierdzeniu szczegółowe dane karty zostaną udostępnione tej stronie.</translation> <translation id="3010559122411665027">Pozycja listy „<ph name="ENTRY_INDEX" />”: <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Zarządzająca tym urządzeniem domena <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Automatycznie zablokowane</translation> <translation id="3023071826883856138">You4 (koperta)</translation> <translation id="3024663005179499861">Nieprawidłowy typ zasady</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">Pobierz, gdy będę online</translation> <translation id="3293642807462928945">Więcej informacji o zasadzie <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Brak wyników wyszukiwania</translation> -<translation id="3311730110465560799">Może zdalnie zmieniać konfigurację urządzenia.</translation> <translation id="3320021301628644560">Dodaj adres rozliczeniowy</translation> <translation id="3324983252691184275">Karmazynowy</translation> <translation id="3338095232262050444">Bezpieczna</translation> @@ -526,7 +522,6 @@ <translation id="3761718714832595332">Ukryj stan</translation> <translation id="3765032636089507299">Strona funkcji Bezpieczne przeglądanie jest w budowie.</translation> <translation id="3778403066972421603">Czy chcesz zapisać tę kartę na swoim koncie Google i na tym urządzeniu?</translation> -<translation id="3779973883630527594">Firma, szkoła lub organizacja zarządzająca tym kontem:</translation> <translation id="3781428340399460090">Ciepłoróżowy</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Wygasa: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -726,7 +721,6 @@ <translation id="4926159001844873046">Komunikat ze strony <ph name="SITE" /></translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Brak wyników</translation> -<translation id="4945672369594656571">Kontroluje sposób przetwarzania danych z Twojego urządzenia i konta. Google przetwarza dane z Twojego urządzenia i konta tylko za zgodą menedżera Twojego urządzenia i konta i tylko w celach określonych przez menedżera urządzenia i konta.</translation> <translation id="4950898438188848926">Przycisk przełączania kart. Naciśnij Enter, by przełączyć się na otwartą kartę, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Czynności</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -740,7 +734,6 @@ <translation id="5017554619425969104">Skopiowany tekst</translation> <translation id="5018422839182700155">Nie można otworzyć tej strony</translation> <translation id="5019198164206649151">Nieprawidłowy stan magazynu wspomagającego</translation> -<translation id="5020154601324912079">Kontroluje sposób przetwarzania danych z Twojego urządzenia. Google przetwarza dane z Twojego urządzenia tylko za zgodą menedżera urządzenia i tylko w określonych przez niego celach.</translation> <translation id="5023310440958281426">Sprawdź zasady administratora</translation> <translation id="5029568752722684782">Usuń kopię</translation> <translation id="503069730517007720">Certyfikat główny oprogramowania „<ph name="SOFTWARE_NAME" />” jest wymagany, ale nie został zainstalowany. Aby rozwiązać ten problem, administrator powinien przeczytać instrukcje dotyczące konfiguracji oprogramowania „<ph name="SOFTWARE_NAME" />”. <ph name="FURTHER_EXPLANATION" /></translation> @@ -898,7 +891,6 @@ <translation id="5838278095973806738">Nie podawaj żadnych informacji poufnych (takich jak hasła czy dane kart kredytowych) w tej witrynie, bo osoby atakujące będą mogły je wykraść.</translation> <translation id="5860033963881614850">Wyłączone</translation> <translation id="5863847714970149516">Otwierana strona może próbować obciążyć Cię płatnością</translation> -<translation id="5865951947699094510">Może zdalnie zmienić konfigurację Twojego konta.</translation> <translation id="5866257070973731571">Dodaj numer telefonu</translation> <translation id="5869405914158311789">Ta witryna jest nieosiągalna</translation> <translation id="5869522115854928033">Zapisane hasła</translation> @@ -1169,7 +1161,6 @@ Dodatkowe informacje: <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Zarządzaj hasłami…</translation> <translation id="7419106976560586862">Ścieżka profilu</translation> -<translation id="7424427397225027541">Kontroluje sposób przetwarzania danych z Twojego konta. Google przetwarza dane z Twojego konta tylko za zgodą menedżera konta i tylko w określonych przez niego celach.</translation> <translation id="7437289804838430631">Dodaj dane kontaktowe</translation> <translation id="7440140511386898319">Przeglądaj offline</translation> <translation id="7441627299479586546">Nieprawidłowy podmiot zasady</translation> @@ -1255,7 +1246,6 @@ Dodatkowe informacje: <translation id="780301667611848630">Nie, dziękuję</translation> <translation id="7805768142964895445">Stan</translation> <translation id="7806344367022510803">Wyszukiwarkę możesz zmienić w ustawieniach Chrome</translation> -<translation id="7810209002420871817">Zarządzająca Twoim kontem domena <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Usunąć tę podpowiedź do formularza z Chrome?</translation> <translation id="7815407501681723534">Znalezione <ph name="SEARCH_RESULTS" /> dla zapytania „<ph name="SEARCH_STRING" />”: <ph name="NUMBER_OF_RESULTS" /></translation> diff --git a/chromium/components/strings/components_strings_pt-BR.xtb b/chromium/components/strings/components_strings_pt-BR.xtb index c028932f8c2..103e6aadbd0 100644 --- a/chromium/components/strings/components_strings_pt-BR.xtb +++ b/chromium/components/strings/components_strings_pt-BR.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="pt-BR"> -<translation id="1001338328714563407">Como administrador do dispositivo e da conta, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Não agora</translation> <translation id="1010200102790553230">Carregar página mais tarde</translation> <translation id="1015730422737071372">Forneça detalhes adicionais</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">Na página "Configurações", você pode desativar quaisquer proxies configurados para uma conexão.</translation> <translation id="2955913368246107853">Fechar barra de localização</translation> <translation id="2969319727213777354">Para estabelecer uma conexão segura, o relógio precisa estar configurado corretamente. Isso ocorre porque os certificados que os websites usam para se identificar são válidos apenas por períodos específicos. Como o relógio do seu dispositivo está incorreto, o Google Chrome não consegue verificar esses certificados.</translation> -<translation id="2970515157925768593">Pode alterar remotamente a configuração do dispositivo e da conta.</translation> <translation id="2972581237482394796">&Refazer</translation> <translation id="2977665033722899841">Selecionado no momento: <ph name="ROW_NAME" />. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Limpar dados</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">Mostrar cópia salva</translation> <translation id="3008447029300691911">Digite o CVC do <ph name="CREDIT_CARD" />. Depois da confirmação, os detalhes do seu cartão serão compartilhados com esse site.</translation> <translation id="3010559122411665027">Entrada de lista "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Como o administrador deste dispositivo, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Bloqueada automaticamente</translation> <translation id="3023071826883856138">You4 (Envelope)</translation> <translation id="3024663005179499861">Tipo de política incorreto</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">Download quando estiver on-line</translation> <translation id="3293642807462928945">Saiba mais sobre a política <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Nenhum resultado de pesquisa encontrado</translation> -<translation id="3311730110465560799">Pode alterar remotamente a configuração do seu dispositivo.</translation> <translation id="3320021301628644560">Adicionar endereço de faturamento</translation> <translation id="3324983252691184275">Carmim</translation> <translation id="3338095232262050444">Seguro</translation> @@ -526,7 +522,6 @@ <translation id="3761718714832595332">Ocultar status</translation> <translation id="3765032636089507299">A página de navegação segura está em construção.</translation> <translation id="3778403066972421603">Quer salvar este cartão na sua Conta do Google e neste dispositivo?</translation> -<translation id="3779973883630527594">A empresa, escola ou organização que gerencia esta conta:</translation> <translation id="3781428340399460090">Rosa-escuro</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Validade: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -726,7 +721,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> diz</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Nenhum resultado</translation> -<translation id="4945672369594656571">Controla como os dados do dispositivo e da conta são tratados. O Google processa esses dados exclusivamente sob o comando do administrador da conta e do dispositivo e unicamente para os fins especificados por ele.</translation> <translation id="4950898438188848926">Botão de alternância de guia. Pressione Enter para alternar para a guia aberta, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Ações</translation> <translation id="4955242332710481440">A5 Extra</translation> @@ -740,7 +734,6 @@ <translation id="5017554619425969104">Texto que você copiou</translation> <translation id="5018422839182700155">Não é possível abrir essa página</translation> <translation id="5019198164206649151">Armazenamento de backup em estado inválido</translation> -<translation id="5020154601324912079">Controla como os dados do dispositivo são tratados. O Google processa esses dados exclusivamente sob o comando do administrador do dispositivo e unicamente para os fins especificados por ele.</translation> <translation id="5023310440958281426">Verifique as políticas do administrador</translation> <translation id="5029568752722684782">Limpar cópia</translation> <translation id="503069730517007720">Um certificado raiz para "<ph name="SOFTWARE_NAME" />" é necessário, mas não está instalado. O administrador de TI deve revisar as instruções de configuração do "<ph name="SOFTWARE_NAME" />" para corrigir esse problema. <ph name="FURTHER_EXPLANATION" /></translation> @@ -898,7 +891,6 @@ <translation id="5838278095973806738">É recomendado não fornecer informações confidencial a esse site (por exemplo, senhas ou cartões de crédito), porque elas podem ser roubadas por invasores.</translation> <translation id="5860033963881614850">Desativado</translation> <translation id="5863847714970149516">A página que você está prestes a acessar pode tentar cobrar pagamentos</translation> -<translation id="5865951947699094510">Pode alterar remotamente a configuração da sua conta.</translation> <translation id="5866257070973731571">Adicione um Número de Telefone</translation> <translation id="5869405914158311789">Não é possível acessar esse site</translation> <translation id="5869522115854928033">Senhas salvas</translation> @@ -1169,7 +1161,6 @@ Mais detalhes: <translation id="741007362987735528">Formato largo</translation> <translation id="7416351320495623771">Gerenciar senhas…</translation> <translation id="7419106976560586862">Caminho de perfil</translation> -<translation id="7424427397225027541">Controla como os dados da sua conta são tratados. O Google processa esses dados exclusivamente sob o comando do administrador da conta e unicamente para os fins especificados por ele.</translation> <translation id="7437289804838430631">Adicionar Informações de Contato</translation> <translation id="7440140511386898319">Ver conteúdo enquanto estiver off-line</translation> <translation id="7441627299479586546">Assunto da política incorreto</translation> @@ -1255,7 +1246,6 @@ Mais detalhes: <translation id="780301667611848630">Não</translation> <translation id="7805768142964895445">Status</translation> <translation id="7806344367022510803">Altere as configurações de mecanismo de pesquisa no Chrome</translation> -<translation id="7810209002420871817">Como administrador da sua conta, <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Remover sugestão de formulário do Chrome?</translation> <translation id="7815407501681723534">Localizados <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> para "<ph name="SEARCH_STRING" />"</translation> @@ -1477,7 +1467,7 @@ incomuns e incorretas. Isso pode acontecer quando um invasor está fingindo ser <translation id="9154194610265714752">Atualizado</translation> <translation id="9157595877708044936">Configurando...</translation> <translation id="9158625974267017556">C6 (Envelope)</translation> -<translation id="9168814207360376865">Permite que os sites verifiquem se você tem formas de pagamento salvas</translation> +<translation id="9168814207360376865">Permitir que os sites verifiquem se você tem formas de pagamento salvas</translation> <translation id="9169664750068251925">Sempre bloquear neste site</translation> <translation id="9170848237812810038">&Desfazer</translation> <translation id="9171296965991013597">Sair do app?</translation> diff --git a/chromium/components/strings/components_strings_pt-PT.xtb b/chromium/components/strings/components_strings_pt-PT.xtb index 34a3b91e601..4b4c3bfb229 100644 --- a/chromium/components/strings/components_strings_pt-PT.xtb +++ b/chromium/components/strings/components_strings_pt-PT.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="pt-PT"> -<translation id="1001338328714563407">Enquanto gestor do seu dispositivo e da sua conta, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Agora não</translation> <translation id="1010200102790553230">Carregar a página mais tarde</translation> <translation id="1015730422737071372">Forneça mais detalhes</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">Pode desativar qualquer proxy configurado para uma ligação a partir da página de definições.</translation> <translation id="2955913368246107853">Fechar barra de localização</translation> <translation id="2969319727213777354">Para estabelecer uma ligação segura, o relógio tem de ser definido corretamente. Isto deve-se ao facto de os certificados que os Sites utilizam para se identificarem serem apenas válidos para períodos de tempo específicos. Uma vez que o relógio do seu dispositivo está incorreto, o Google Chrome não consegue validar estes certificados.</translation> -<translation id="2970515157925768593">Pode alterar remotamente a configuração do seu dispositivo e da sua conta.</translation> <translation id="2972581237482394796">&Repetir</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" /> selecionado atualmente. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Limpar dados</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">Mostrar cópia guardada</translation> <translation id="3008447029300691911">Introduza o Código de Segurança/CVC de <ph name="CREDIT_CARD" />. Ao confirmar, os detalhes do cartão são partilhados com este site.</translation> <translation id="3010559122411665027">Entrada da lista "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Enquanto gestor deste dispositivo, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Bloqueada automaticamente</translation> <translation id="3023071826883856138">You4 (Envelope)</translation> <translation id="3024663005179499861">Tipo de política incorreto</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">Transferir quando estiver online</translation> <translation id="3293642807462928945">Saiba mais acerca da política <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Não foram encontrados resultados da pesquisa</translation> -<translation id="3311730110465560799">Pode alterar remotamente a configuração do seu dispositivo.</translation> <translation id="3320021301628644560">Adicionar endereço de faturação</translation> <translation id="3324983252691184275">Carmesim</translation> <translation id="3338095232262050444">Seguro</translation> @@ -526,7 +522,6 @@ <translation id="3761718714832595332">Ocultar estado</translation> <translation id="3765032636089507299">A página de Navegação segura está em construção.</translation> <translation id="3778403066972421603">Pretende guardar este cartão na sua Conta Google e neste dispositivo?</translation> -<translation id="3779973883630527594">A empresa, escola ou organização que gere esta conta:</translation> <translation id="3781428340399460090">Rosa choque</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Expira a <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -726,7 +721,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> diz</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Nenhum resultado</translation> -<translation id="4945672369594656571">Controla de que forma são processados os dados do seu dispositivo e da sua conta. A Google processa os dados do seu dispositivo e da sua conta exclusivamente de acordo com as orientações do gestor do dispositivo e da conta e apenas para os fins especificados pelo mesmo.</translation> <translation id="4950898438188848926">Botão de mudança de separador: prima Enter para mudar para o separador aberto, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Ações</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -740,7 +734,6 @@ <translation id="5017554619425969104">Texto que copiou</translation> <translation id="5018422839182700155">Não é possível abrir esta página</translation> <translation id="5019198164206649151">Armazenamento de segurança em mau estado</translation> -<translation id="5020154601324912079">Controla de que forma são processados os dados do seu dispositivo. A Google processa os dados do seu dispositivo exclusivamente de acordo com as orientações do gestor do dispositivo e apenas para os fins especificados pelo mesmo.</translation> <translation id="5023310440958281426">Verificar as políticas do gestor</translation> <translation id="5029568752722684782">Limpar cópia</translation> <translation id="503069730517007720">É necessário um certificado de raiz para o "<ph name="SOFTWARE_NAME" />", que não está instalado. O gestor de TI deve consultar as instruções de configuração do "<ph name="SOFTWARE_NAME" />" para corrigir este problema. <ph name="FURTHER_EXPLANATION" /></translation> @@ -898,7 +891,6 @@ <translation id="5838278095973806738">Não deve introduzir informações confidenciais neste site (por exemplo, palavras-passe ou números de cartões de crédito), porque podem ser roubadas por atacantes.</translation> <translation id="5860033963881614850">Desativado</translation> <translation id="5863847714970149516">A próxima página pode tentar cobrar-lhe dinheiro</translation> -<translation id="5865951947699094510">Pode alterar remotamente a configuração da sua conta.</translation> <translation id="5866257070973731571">Adicionar número de telefone</translation> <translation id="5869405914158311789">Não é possível aceder a este site</translation> <translation id="5869522115854928033">Palavras-passe guardadas</translation> @@ -1168,7 +1160,6 @@ Detalhes adicionais: <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Gerir palavras-passe…</translation> <translation id="7419106976560586862">Caminho do Perfil</translation> -<translation id="7424427397225027541">Controla de que forma são processados os dados da sua conta. A Google processa os dados da sua conta exclusivamente de acordo com as orientações do gestor da conta e apenas para os fins especificados pelo mesmo.</translation> <translation id="7437289804838430631">Adicionar informações de contacto</translation> <translation id="7440140511386898319">Explorar offline</translation> <translation id="7441627299479586546">Assunto da política incorreto</translation> @@ -1254,7 +1245,6 @@ Detalhes adicionais: <translation id="780301667611848630">Não, obrigado</translation> <translation id="7805768142964895445">Estado</translation> <translation id="7806344367022510803">Alterar definições do motor de pesquisa no Chrome</translation> -<translation id="7810209002420871817">Enquanto gestor da sua conta, <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Pretende remover a sugestão do formulário do Chrome?</translation> <translation id="7815407501681723534">Encontrados <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> para "<ph name="SEARCH_STRING" />"</translation> diff --git a/chromium/components/strings/components_strings_ro.xtb b/chromium/components/strings/components_strings_ro.xtb index d9a66b1629b..995a8dc1331 100644 --- a/chromium/components/strings/components_strings_ro.xtb +++ b/chromium/components/strings/components_strings_ro.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ro"> -<translation id="1001338328714563407">Fiind managerul dispozitivului și contului, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Nu acum</translation> <translation id="1010200102790553230">Încarcă pagina mai târziu</translation> <translation id="1015730422737071372">Specifică detalii suplimentare</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">Puteți să dezactivați serverele proxy configurate pentru o conexiune din pagina de setări.</translation> <translation id="2955913368246107853">Închide Bara de căutare</translation> <translation id="2969319727213777354">Pentru a stabili o conexiune securizată, ceasul trebuie să fie setat corect, deoarece certificatele pe care site-urile le folosesc pentru a se identifica sunt valabile numai pentru anumite intervale de timp. Din moment ce ora de pe dispozitiv este incorectă, Google Chrome nu poate verifica aceste certificate.</translation> -<translation id="2970515157925768593">Poate să modifice de la distanță configurarea dispozitivului și a contului.</translation> <translation id="2972581237482394796">&Repetă</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" /> selectat(ă). <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Șterge datele</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">Afișați o copie salvată</translation> <translation id="3008447029300691911">Introdu codul CVC pentru <ph name="CREDIT_CARD" />. După ce confirmi, acest site va avea acces la detaliile cardului tău.</translation> <translation id="3010559122411665027">Intrarea din listă „<ph name="ENTRY_INDEX" />”: <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Fiind managerul dispozitivului, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Blocată automat</translation> <translation id="3023071826883856138">You4 (Plic)</translation> <translation id="3024663005179499861">Tip de politică greșit</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">Descarcă când ești online</translation> <translation id="3293642807462928945">Află mai multe despre politica <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Nu s-au găsit rezultate de căutare</translation> -<translation id="3311730110465560799">Poate modifica de la distanță configurarea dispozitivului.</translation> <translation id="3320021301628644560">Adaugă o adresă de facturare</translation> <translation id="3324983252691184275">Roșu aprins</translation> <translation id="3338095232262050444">Securizat</translation> @@ -526,7 +522,6 @@ <translation id="3761718714832595332">Ascunde starea</translation> <translation id="3765032636089507299">Pagina Navigare sigură este în construcție.</translation> <translation id="3778403066972421603">Dorești să salvezi acest card în Contul Google și pe acest dispozitiv?</translation> -<translation id="3779973883630527594">Compania, școala sau organizația care gestionează acest cont:</translation> <translation id="3781428340399460090">Roz aprins</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Expiră în <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -726,7 +721,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> afișează mesajul</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Nu există rezultate</translation> -<translation id="4945672369594656571">Stabilește modul în care sunt gestionate datele dispozitivului și ale contului. Google prelucrează datele dispozitivului și ale contului numai sub îndrumarea managerului de dispozitiv și de cont și numai în scopurile indicate de managerul de dispozitiv și de cont.</translation> <translation id="4950898438188848926">Butonul Comută între file, apasă pe Enter pentru a comuta la fila deschisă, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Acțiuni</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -740,7 +734,6 @@ <translation id="5017554619425969104">Textul copiat de tine</translation> <translation id="5018422839182700155">Pagina nu poate fi deschisă</translation> <translation id="5019198164206649151">Depozit de fundal în stare nevalidă</translation> -<translation id="5020154601324912079">Stabilește cum sunt gestionate datele dispozitivului. Google prelucrează datele dispozitivului numai sub îndrumarea managerului de dispozitiv și numai în scopurile indicate de acesta.</translation> <translation id="5023310440958281426">Consultați politicile administratorului</translation> <translation id="5029568752722684782">Șterge copia</translation> <translation id="503069730517007720">Un certificat rădăcină pentru „<ph name="SOFTWARE_NAME" />” este necesar, dar nu este instalat. Administratorul IT trebuie să verifice instrucțiunile de configurare pentru „<ph name="SOFTWARE_NAME" />” ca să remedieze problema. <ph name="FURTHER_EXPLANATION" /></translation> @@ -898,7 +891,6 @@ <translation id="5838278095973806738">Nu ar trebui să introduci informații sensibile pe acest site (de exemplu, parole sau carduri de credit), deoarece ar putea fi furate de atacatori.</translation> <translation id="5860033963881614850">Dezactivat</translation> <translation id="5863847714970149516">Următoarea pagină poate să genereze costuri</translation> -<translation id="5865951947699094510">Poate să modifice de la distanță crearea contului.</translation> <translation id="5866257070973731571">Adaugă un număr de telefon</translation> <translation id="5869405914158311789">Acest site nu poate fi accesat</translation> <translation id="5869522115854928033">Parole salvate</translation> @@ -1169,7 +1161,6 @@ Detalii suplimentare: <translation id="741007362987735528">Format-Larg</translation> <translation id="7416351320495623771">Gestionează parolele…</translation> <translation id="7419106976560586862">Calea profilului</translation> -<translation id="7424427397225027541">Stabilește cum sunt gestionate datele contului. Google prelucrează datele contului numai sub îndrumarea managerului contului și numai în scopurile indicate de acesta.</translation> <translation id="7437289804838430631">Adaugă informații de contact</translation> <translation id="7440140511386898319">Explorează în timp ce ești offline</translation> <translation id="7441627299479586546">Subiectul politicii este greșit</translation> @@ -1255,7 +1246,6 @@ Detalii suplimentare: <translation id="780301667611848630">Nu, mulțumesc</translation> <translation id="7805768142964895445">Stare</translation> <translation id="7806344367022510803">Modifică setările motorului de căutare în Chrome</translation> -<translation id="7810209002420871817">Fiind managerul contului tău, <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Elimini sugestia pentru formular din Chrome?</translation> <translation id="7815407501681723534">S-au găsit <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> pentru „<ph name="SEARCH_STRING" />”</translation> diff --git a/chromium/components/strings/components_strings_ru.xtb b/chromium/components/strings/components_strings_ru.xtb index 3330f4cd56f..0fa57a54363 100644 --- a/chromium/components/strings/components_strings_ru.xtb +++ b/chromium/components/strings/components_strings_ru.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ru"> -<translation id="1001338328714563407">Как администратор вашего устройства и аккаунта домен <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Не сейчас</translation> <translation id="1010200102790553230">Загрузить страницу позже</translation> <translation id="1015730422737071372">Сообщить дополнительную информацию</translation> @@ -365,7 +364,6 @@ <translation id="2948083400971632585">Прокси-серверы, используемые для соединения, можно отключить на странице настроек.</translation> <translation id="2955913368246107853">Закрыть панель поиска</translation> <translation id="2969319727213777354">Для создания безопасного подключения необходимо, чтобы показания системных часов были верны. Причина в том, что сертификаты для идентификации сайтов имеют ограниченный срок действия. Если часы на устройстве неточны, Chrome не может проверить актуальность этих сертификатов.</translation> -<translation id="2970515157925768593">может удаленно менять конфигурацию устройства и аккаунта;</translation> <translation id="2972581237482394796">&Повторить</translation> <translation id="2977665033722899841">Сейчас выбрано – <ph name="ROW_NAME" />. <ph name="ROW_CONTENT" />.</translation> <translation id="2982481275546140226">Удалить данные</translation> @@ -377,7 +375,6 @@ <translation id="3005723025932146533">Открыть сохраненную копию</translation> <translation id="3008447029300691911">Введите CVC-код карты <ph name="CREDIT_CARD" />. После этого ее данные будут переданы сайту.</translation> <translation id="3010559122411665027">Элемент списка "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Как администратор этого устройства домен <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Заблокировано автоматически</translation> <translation id="3023071826883856138">You4 (конверт)</translation> <translation id="3024663005179499861">Неверный тип политики</translation> @@ -422,7 +419,6 @@ <translation id="3287510313208355388">Скачать при подключении к Интернету</translation> <translation id="3293642807462928945">Подробнее о политике <ph name="POLICY_NAME" />…</translation> <translation id="3303855915957856445">Ничего не найдено</translation> -<translation id="3311730110465560799">Может удаленно менять конфигурацию устройства.</translation> <translation id="3320021301628644560">Добавьте платежный адрес</translation> <translation id="3324983252691184275">Малиновый</translation> <translation id="3338095232262050444">Защищено</translation> @@ -517,7 +513,6 @@ <translation id="3761718714832595332">Скрыть статус</translation> <translation id="3765032636089507299">Страница безопасного просмотра находится в разработке.</translation> <translation id="3778403066972421603">Хотите сохранить карту в аккаунте Google и на этом устройстве?</translation> -<translation id="3779973883630527594">Компания, учебное заведение или другая организация, которая управляет этим аккаунтом:</translation> <translation id="3781428340399460090">Ярко-розовый</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Срок действия: до <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -717,7 +712,6 @@ <translation id="4926159001844873046">Подтвердите действие на странице <ph name="SITE" /></translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Нет результатов</translation> -<translation id="4945672369594656571">определяет, как обрабатываются данные вашего аккаунта и устройства (Google обрабатывает данные вашего аккаунта и устройства только под руководством управляющего ими администратора и только в указанных им целях);</translation> <translation id="4950898438188848926">Кнопка переключения между вкладками. Чтобы переключиться на открытую вкладку (<ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" />), нажмите клавишу "Ввод".</translation> <translation id="495170559598752135">Действия</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -731,7 +725,6 @@ <translation id="5017554619425969104">Скопированный текст</translation> <translation id="5018422839182700155">Не удалось открыть страницу</translation> <translation id="5019198164206649151">Данные в хранилище повреждены</translation> -<translation id="5020154601324912079">определяет, как обрабатываются данные вашего устройства (Google обрабатывает данные вашего устройства только под руководством администратора и только в указанных им целях);</translation> <translation id="5023310440958281426">Проверьте правила, установленные администратором</translation> <translation id="5029568752722684782">Удалить данные</translation> <translation id="503069730517007720">Необходимый корневой сертификат для программы "<ph name="SOFTWARE_NAME" />" не установлен. Чтобы устранить проблему, попросите системного администратора ознакомиться с инструкциями по настройке программы "<ph name="SOFTWARE_NAME" />". <ph name="FURTHER_EXPLANATION" /></translation> @@ -889,7 +882,6 @@ <translation id="5838278095973806738">Не сообщайте этому сайту конфиденциальную информацию (например, пароли и номера банковских карт). К ней могут получить доступ злоумышленники.</translation> <translation id="5860033963881614850">ВЫКЛ</translation> <translation id="5863847714970149516">При открытии этой страницы с вашего счета могут быть списаны средства</translation> -<translation id="5865951947699094510">может удаленно менять конфигурацию вашего аккаунта;</translation> <translation id="5866257070973731571">Добавьте номер телефона</translation> <translation id="5869405914158311789">Не удается получить доступ к сайту</translation> <translation id="5869522115854928033">Сайты с сохраненными паролями</translation> @@ -1157,7 +1149,6 @@ <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Управление паролями</translation> <translation id="7419106976560586862">Путь к профилю</translation> -<translation id="7424427397225027541">определяет, как обрабатываются данные вашего аккаунта (Google обрабатывает данные вашего аккаунта только под руководством администратора аккаунта и только в указанных им целях);</translation> <translation id="7437289804838430631">Добавить контактные данные</translation> <translation id="7440140511386898319">Почитать офлайн</translation> <translation id="7441627299479586546">Неверный субъект политики</translation> @@ -1243,7 +1234,6 @@ <translation id="780301667611848630">Спасибо, не надо</translation> <translation id="7805768142964895445">Состояние</translation> <translation id="7806344367022510803">Изменить настройки поисковой системы в Chrome</translation> -<translation id="7810209002420871817">Как администратор вашего аккаунта домен <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Мир</translation> <translation id="7813600968533626083">Удалить подсказку из Chrome?</translation> <translation id="7815407501681723534"><ph name="SEARCH_RESULTS" /> по запросу "<ph name="SEARCH_STRING" />" (<ph name="NUMBER_OF_RESULTS" />)</translation> diff --git a/chromium/components/strings/components_strings_sk.xtb b/chromium/components/strings/components_strings_sk.xtb index 79c15f981de..5432f65068a 100644 --- a/chromium/components/strings/components_strings_sk.xtb +++ b/chromium/components/strings/components_strings_sk.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="sk"> -<translation id="1001338328714563407">Ako správca zariadenia a účtu, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Teraz nie</translation> <translation id="1010200102790553230">Načítať stránku neskôr</translation> <translation id="1015730422737071372">Poskytnite ďalšie podrobnosti</translation> @@ -365,7 +364,6 @@ <translation id="2948083400971632585">Môžete zakázať ktorékoľvek servery proxy nakonfigurované na pripojenie na stránke nastavení.</translation> <translation id="2955913368246107853">Zatvoriť panel pre vyhľadávanie</translation> <translation id="2969319727213777354">Ak chcete nadviazať zabezpečené pripojenie, vaše hodiny musia byť nastavené správne. Je to preto, že certifikáty, ktoré webové stránky používajú na vlastnú identifikáciu, sú platné iba určitý čas. Keďže nie sú hodiny vášho zariadenia nastavené správne, Chrome nemôže tieto certifikáty overiť.</translation> -<translation id="2970515157925768593">Môže vzdialene zmeniť nastavenie zariadenia a účtu.</translation> <translation id="2972581237482394796">&Dopredu</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, aktuálne vybraté. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Vymazať dáta</translation> @@ -377,7 +375,6 @@ <translation id="3005723025932146533">Zobraziť uloženú kópiu</translation> <translation id="3008447029300691911">Zadajte kód CVC karty <ph name="CREDIT_CARD" />. Po potvrdení budú podrobnosti o karte zdieľané s týmto webom.</translation> <translation id="3010559122411665027">Položka zoznamu „<ph name="ENTRY_INDEX" />“: <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Ako správca tohto zariadenia, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Automaticky blokované</translation> <translation id="3023071826883856138">You4 (obálka)</translation> <translation id="3024663005179499861">Chybný typ pravidla</translation> @@ -420,7 +417,6 @@ <translation id="3287510313208355388">Stiahnuť po obnovení pripojenia</translation> <translation id="3293642807462928945">Ďalšie informácie o pravidle <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Nič sa nenašlo</translation> -<translation id="3311730110465560799">Môže vzdialene zmeniť nastavenie zaradenia.</translation> <translation id="3320021301628644560">Pridanie fakturačnej adresy</translation> <translation id="3324983252691184275">Karmínová</translation> <translation id="3338095232262050444">Zabezpečené</translation> @@ -514,7 +510,6 @@ <translation id="3761718714832595332">Skryť stav</translation> <translation id="3765032636089507299">Stránka Bezpečného prehliadania sa pripravuje.</translation> <translation id="3778403066972421603">Chcete uložiť túto kartu do svojho účtu Google a tohto zariadenia?</translation> -<translation id="3779973883630527594">Spoločnosť, škola alebo organizácia, ktorá spravuje tento účet:</translation> <translation id="3781428340399460090">Jasnoružová</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Platnosť vyprší <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -714,7 +709,6 @@ <translation id="4926159001844873046">Správa z webu <ph name="SITE" /></translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Žiadne výsledky</translation> -<translation id="4945672369594656571">Ovláda spôsob spracovania údajov zariadenia a účtu. Google spracováva údaje zariadenia a účtu výlučne podľa pokynov správcu zariadenia a účtu a výhradne na účely špecifikované správcom.</translation> <translation id="4950898438188848926">Tlačidlo na prepnutie karty, stlačením klávesa Enter prepnete na otvorenú kartu, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Akcie</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -728,7 +722,6 @@ <translation id="5017554619425969104">Skopírovaný text</translation> <translation id="5018422839182700155">Táto stránka sa nedá otvoriť</translation> <translation id="5019198164206649151">Zlý stav záložného ukladacieho priestoru</translation> -<translation id="5020154601324912079">Ovláda spôsob spracovania údajov zariadenia. Google spracováva údaje zariadenia výlučne podľa pokynov správcu zariadenia a výhradne na účely špecifikované správcom.</translation> <translation id="5023310440958281426">Skontrolujte pravidlá správcu</translation> <translation id="5029568752722684782">Vymazať kópiu</translation> <translation id="503069730517007720">Vyžaduje sa koreňový certifikát softvéru <ph name="SOFTWARE_NAME" />, ale nie je nainštalovaný. Váš správca IT by si mal prezrieť pokyny na konfiguráciu softvéru <ph name="SOFTWARE_NAME" /> a tento problém vyriešiť. <ph name="FURTHER_EXPLANATION" /></translation> @@ -886,7 +879,6 @@ <translation id="5838278095973806738">Na tomto webe by ste nemali zadávať citlivé údaje, napríklad heslá alebo kreditné karty, pretože by ich mohli ukradnúť útočníci.</translation> <translation id="5860033963881614850">Vypnuté</translation> <translation id="5863847714970149516">Stránka, na ktorú sa chystáte prejsť, vám môže účtovať poplatky</translation> -<translation id="5865951947699094510">Môže vzdialene zmeniť nastavenie účtu.</translation> <translation id="5866257070973731571">Pridanie telefónneho čísla</translation> <translation id="5869405914158311789">Tento web je nedostupný</translation> <translation id="5869522115854928033">Uložené heslá</translation> @@ -1153,7 +1145,6 @@ <translation id="741007362987735528">Široký formát</translation> <translation id="7416351320495623771">Spravovať heslá…</translation> <translation id="7419106976560586862">Cesta profilu</translation> -<translation id="7424427397225027541">Ovláda spôsob spracovania údajov účtu. Google spracováva údaje účtu výlučne podľa pokynov správcu účtu a výhradne na účely špecifikované správcom.</translation> <translation id="7437289804838430631">Pridať kontaktné informácie</translation> <translation id="7440140511386898319">Prieskum v režime offline</translation> <translation id="7441627299479586546">Chybný predmet pravidla</translation> @@ -1239,7 +1230,6 @@ <translation id="780301667611848630">Nie, ďakujem</translation> <translation id="7805768142964895445">Stav</translation> <translation id="7806344367022510803">Zmeňte nastavenia vyhľadávača v Chrome</translation> -<translation id="7810209002420871817">Ako správca účtu <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Chcete návrh odstrániť z prehliadača Chrome?</translation> <translation id="7815407501681723534">Nájdené výsledky (počet: <ph name="NUMBER_OF_RESULTS" />) pre dopyt „<ph name="SEARCH_STRING" />“: <ph name="SEARCH_RESULTS" /></translation> diff --git a/chromium/components/strings/components_strings_sl.xtb b/chromium/components/strings/components_strings_sl.xtb index aa088dacaca..0eeeebee996 100644 --- a/chromium/components/strings/components_strings_sl.xtb +++ b/chromium/components/strings/components_strings_sl.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="sl"> -<translation id="1001338328714563407">Kot skrbnik naprave in računa, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Ne zdaj</translation> <translation id="1010200102790553230">Naloži stran pozneje</translation> <translation id="1015730422737071372">Navedite dodatne podrobnosti</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">Namestniške strežnike, konfigurirane za povezavo, lahko onemogočite na strani z nastavitvami.</translation> <translation id="2955913368246107853">Zapri vrstico za iskanje</translation> <translation id="2969319727213777354">Če želite vzpostaviti varno povezavo, mora biti ura pravilno nastavljena. Potrdila, ki jih uporabljajo spletna mesta za prepoznavanje, namreč veljajo samo določen čas. Ker je ura naprave nepravilna, Google Chrome teh potrdil ne more preveriti.</translation> -<translation id="2970515157925768593">Lahko na daljavo spremeni nastavitev naprave in računa.</translation> <translation id="2972581237482394796">&Uveljavi</translation> <translation id="2977665033722899841">Trenutno izbrano: <ph name="ROW_NAME" />. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Izbriši podatke</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">Pokaži shranjeno kopijo</translation> <translation id="3008447029300691911">Vnesite CVC za <ph name="CREDIT_CARD" />. Ko potrdite, bodo temu spletnemu mestu razkriti podatki o vaši kartici.</translation> <translation id="3010559122411665027">Vnos na sznamu »<ph name="ENTRY_INDEX" />«: <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Kot skrbnik te naprave, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Samodejno blokirano</translation> <translation id="3023071826883856138">You4 (Envelope)</translation> <translation id="3024663005179499861">Napačna vrsta pravilnika</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">Prenesi, ko je povezava</translation> <translation id="3293642807462928945">Preberite več o pravilniku <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Ni rezultatov iskanja</translation> -<translation id="3311730110465560799">Lahko spremeni nastavitev naprave na daljavo.</translation> <translation id="3320021301628644560">Dodajanje naslova za izstavitev računa</translation> <translation id="3324983252691184275">Škrlatna</translation> <translation id="3338095232262050444">Varno</translation> @@ -526,7 +522,6 @@ <translation id="3761718714832595332">Skrivanje stanja</translation> <translation id="3765032636089507299">Stran varnega brskanja je v izdelavi.</translation> <translation id="3778403066972421603">Ali želite shraniti to kartico v Google Račun in v tej napravi?</translation> -<translation id="3779973883630527594">Podjetje, šola ali organizacija, ki upravlja ta račun:</translation> <translation id="3781428340399460090">Živo rožnata</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Poteče: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -726,7 +721,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> sporoča:</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Ni rezultatov</translation> -<translation id="4945672369594656571">Nadzira obravnavo podatkov v napravi in računu. Google obdeluje podatke v napravi in računu izključno v skladu z usmeritvijo skrbnika naprave in računa ter zgolj za namene, ki jih določi skrbnik naprave in računa.</translation> <translation id="4950898438188848926">Gumb za preklop zavihkov, pritisnite Enter, če želite preklopiti na odprti zavihek, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Dejanja</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -740,7 +734,6 @@ <translation id="5017554619425969104">Besedilo, ki ste ga kopirali</translation> <translation id="5018422839182700155">Te strani ni mogoče odpreti</translation> <translation id="5019198164206649151">Neprimerno stanje rezervne shrambe</translation> -<translation id="5020154601324912079">Nadzira obravnavo podatkov v napravi. Google obdeluje podatke v napravi izključno v skladu z usmeritvijo skrbnika naprave in zgolj za namene, ki jih določi skrbnik naprave.</translation> <translation id="5023310440958281426">Preverite skrbnikove pravilnike</translation> <translation id="5029568752722684782">Počisti kopijo</translation> <translation id="503069730517007720">Korensko potrdilo za programsko opremo »<ph name="SOFTWARE_NAME" />« je obvezno, vendar ni nameščeno. Skrbnik za IT lahko za odpravo te težave upošteva navodila za konfiguracijo za programsko opremo »<ph name="SOFTWARE_NAME" />«. <ph name="FURTHER_EXPLANATION" /></translation> @@ -898,7 +891,6 @@ <translation id="5838278095973806738">Na tem spletnem mestu ne vnašajte občutljivih informacij (npr. gesel ali številk kreditnih kartic), ker jih lahko ukradejo napadalci.</translation> <translation id="5860033963881614850">Izklopljeno</translation> <translation id="5863847714970149516">Stran, ki se bo odprla, vam bo morda poskusila kaj zaračunati</translation> -<translation id="5865951947699094510">Lahko na daljavo spremeni nastavitev računa.</translation> <translation id="5866257070973731571">Dodajanje telefonske številke</translation> <translation id="5869405914158311789">Tega spletnega mesta ni mogoče doseči</translation> <translation id="5869522115854928033">Shranjena gesla</translation> @@ -1169,7 +1161,6 @@ Dodatne podrobnosti: <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Upravljaj gesla …</translation> <translation id="7419106976560586862">Pot profila</translation> -<translation id="7424427397225027541">Nadzira obravnavo podatkov v računu. Google obdeluje podatke v računu izključno v skladu z usmeritvijo skrbnika računa in zgolj za namene, ki jih določi skrbnik računa.</translation> <translation id="7437289804838430631">Dodaj podatke o stiku</translation> <translation id="7440140511386898319">Raziskujte, ko ni povezave</translation> <translation id="7441627299479586546">Napačen subjekt pravilnika</translation> @@ -1255,7 +1246,6 @@ Dodatne podrobnosti: <translation id="780301667611848630">Ne, hvala</translation> <translation id="7805768142964895445">Stanje</translation> <translation id="7806344367022510803">Spremenite nastavitve iskalnika v Chromu</translation> -<translation id="7810209002420871817">Kot skrbnik računa <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Želite odstraniti predlog obrazca iz Chroma?</translation> <translation id="7815407501681723534">Za »<ph name="SEARCH_STRING" />« je bilo najdenih toliko <ph name="SEARCH_RESULTS" />: <ph name="NUMBER_OF_RESULTS" />.</translation> diff --git a/chromium/components/strings/components_strings_sr.xtb b/chromium/components/strings/components_strings_sr.xtb index c23f03331a5..d1c0cadf7fa 100644 --- a/chromium/components/strings/components_strings_sr.xtb +++ b/chromium/components/strings/components_strings_sr.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="sr"> -<translation id="1001338328714563407">Као менаџер вашег уређаја и налога, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Не сада</translation> <translation id="1010200102790553230">Касније учитај страницу</translation> <translation id="1015730422737071372">Наведите додатне детаље</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">На страници Подешавања можете да онемогућите све проксије конфигурисане за везу.</translation> <translation id="2955913368246107853">Затворите траку за проналажење</translation> <translation id="2969319727213777354">Да бисте успоставили безбедну везу, сат на уређају мора да буде тачан. То је зато што сертификати које веб-сајтови користе за идентификацију важе само за одређене временске периоде. Пошто сат на вашем уређају није тачан, Google Chrome не може да верификује те сертификате.</translation> -<translation id="2970515157925768593">Може даљински да промени подешавање уређаја и налога.</translation> <translation id="2972581237482394796">&Понови радњу</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, тренутно изабрано. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Обриши податке</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">Прикажи сачувану копију</translation> <translation id="3008447029300691911">Унесите CVC за картицу <ph name="CREDIT_CARD" />. Када будете потврдили, подаци о картици ће бити послати овом сајту.</translation> <translation id="3010559122411665027">Унос на листи „<ph name="ENTRY_INDEX" />“: <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Као менаџер овог уређаја, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Аутоматски је блокирано</translation> <translation id="3023071826883856138">You4 (коверат)</translation> <translation id="3024663005179499861">Погрешан тип смерница</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">Преузми када сам онлајн</translation> <translation id="3293642807462928945">Сазнајте више о смерницама <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Нису пронађени резултати претраге</translation> -<translation id="3311730110465560799">Може даљински да мења подешавање уређаја.</translation> <translation id="3320021301628644560">Додајте адресу за обрачун</translation> <translation id="3324983252691184275">Јаркоцрвена</translation> <translation id="3338095232262050444">Безбедан</translation> @@ -526,7 +522,6 @@ <translation id="3761718714832595332">Сакриј статус</translation> <translation id="3765032636089507299">Радови на страници Безбедно прегледање су у току.</translation> <translation id="3778403066972421603">Да ли желите да сачувате ову картицу на Google налогу и на овом уређају?</translation> -<translation id="3779973883630527594">Компанија, школа или организација која управља овим налогом:</translation> <translation id="3781428340399460090">Јаркорозе</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Истиче <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -726,7 +721,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> наводи:</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Нема резултата</translation> -<translation id="4945672369594656571">Контролише како се рукује подацима са уређаја и налога. Google обрађује податке са уређаја и налога искључиво по упутству менаџера уређаја и налога и само у сврхе које он наведе.</translation> <translation id="4950898438188848926">Дугме за промену картице, притисните Enter да бисте прешли на отворену картицу, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Радње</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -740,7 +734,6 @@ <translation id="5017554619425969104">Текст који сте копирали</translation> <translation id="5018422839182700155">Не можемо да отворимо ову страницу</translation> <translation id="5019198164206649151">Складиште тока података је у лошем стању</translation> -<translation id="5020154601324912079">Контролише како се рукује подацима са уређаја. Google обрађује податке са уређаја искључиво по упутству менаџера уређаја и само у сврхе које он наведе.</translation> <translation id="5023310440958281426">Проверите смернице администратора</translation> <translation id="5029568752722684782">Обриши копију</translation> <translation id="503069730517007720">Основни сертификат за софтвер „<ph name="SOFTWARE_NAME" />“ је обавезан, али није инсталиран. ИТ администратор треба да прегледа упутства за конфигурацију софтвера „<ph name="SOFTWARE_NAME" />“ да би решио овај проблем. <ph name="FURTHER_EXPLANATION" /></translation> @@ -898,7 +891,6 @@ <translation id="5838278095973806738">Немојте да уносите осетљиве информације на овом сајту (на пример, лозинке или кредитне картице) јер нападачи могу да их украду.</translation> <translation id="5860033963881614850">Искључено</translation> <translation id="5863847714970149516">Следећа страница може да покуша да вам нешто наплати</translation> -<translation id="5865951947699094510">Може даљински да мења подешавање налога.</translation> <translation id="5866257070973731571">Додајте број телефона</translation> <translation id="5869405914158311789">Овај сајт није доступан</translation> <translation id="5869522115854928033">Сачуване лозинке</translation> @@ -1168,7 +1160,6 @@ <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Управљај лозинкама...</translation> <translation id="7419106976560586862">Путања профила</translation> -<translation id="7424427397225027541">Контролише како се рукује подацима са налога. Google обрађује податке са налога искључиво по упутству менаџера налога и само у сврхе које он наведе.</translation> <translation id="7437289804838430631">Додај контакт информације</translation> <translation id="7440140511386898319">Истражујте док сте офлајн</translation> <translation id="7441627299479586546">Погрешан субјекат смерница</translation> @@ -1254,7 +1245,6 @@ <translation id="780301667611848630">Не, хвала</translation> <translation id="7805768142964895445">Статус</translation> <translation id="7806344367022510803">Промените подешавања претраживача у Chrome-у</translation> -<translation id="7810209002420871817">Као менаџер вашег налога, <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Желите ли да уклоните предлог из Chrome-а?</translation> <translation id="7815407501681723534">Пронашли смо <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> за „<ph name="SEARCH_STRING" />“</translation> diff --git a/chromium/components/strings/components_strings_sv.xtb b/chromium/components/strings/components_strings_sv.xtb index 1ba85aa1808..0d22f9c7c27 100644 --- a/chromium/components/strings/components_strings_sv.xtb +++ b/chromium/components/strings/components_strings_sv.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="sv"> -<translation id="1001338328714563407">Som ansvarig för enheten och kontot, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Inte nu</translation> <translation id="1010200102790553230">Läs in sidan senare</translation> <translation id="1015730422737071372">Ange ytterligare information</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">Du kan inaktivera alla proxyservrar som har konfigurerats för en anslutning från sidan Inställningar.</translation> <translation id="2955913368246107853">Stäng sökfältet</translation> <translation id="2969319727213777354">Om du vill upprätta en säker anslutning måste klockan vara rätt inställd. Det beror på att certifikaten som webbplatserna använder för att identifiera sig har en bestämd giltighetstid. Google Chrome kan inte verifiera certifikaten eftersom klockan på enheten inte går rätt.</translation> -<translation id="2970515157925768593">Kan ändra enhets- och kontokonfigurationen via fjärranslutning.</translation> <translation id="2972581237482394796">&Upprepa</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" /> är markerad just nu. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Rensa data</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">Visa sparad kopia</translation> <translation id="3008447029300691911">Ange CVC-koden för <ph name="CREDIT_CARD" />. När du bekräftar delas kortinformationen med den här webbplatsen.</translation> <translation id="3010559122411665027">Listposten <ph name="ENTRY_INDEX" />: <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Som ansvarig för enheten, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Blockerades automatiskt</translation> <translation id="3023071826883856138">You4 (kuvert)</translation> <translation id="3024663005179499861">Felaktig policytyp</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">Ladda ned när du är online</translation> <translation id="3293642807462928945">Läs mer om principen <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Inga sökresultat hittades</translation> -<translation id="3311730110465560799">Kan ändra enhetskonfigureringen via fjärranslutning.</translation> <translation id="3320021301628644560">Lägg till faktureringsadress</translation> <translation id="3324983252691184275">Karmosinröd</translation> <translation id="3338095232262050444">Säker</translation> @@ -526,7 +522,6 @@ <translation id="3761718714832595332">Dölj status</translation> <translation id="3765032636089507299">Sidan Säker webbsökning är under utveckling</translation> <translation id="3778403066972421603">Vill du spara det här kortet i Google-kontot och på den här enheten?</translation> -<translation id="3779973883630527594">Företaget, skolan eller organisationen som hanterar kontot:</translation> <translation id="3781428340399460090">Cerise</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Utgångsdatum: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -726,7 +721,6 @@ <translation id="4926159001844873046">Från <ph name="SITE" />:</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Inga resultat</translation> -<translation id="4945672369594656571">Styr hur enhets- och kontodata hanteras. Google behandlar endast enhetens och kontots data i enlighet med anvisningarna från den ansvariga för enheten och kontot och endast i de syften som anges av den ansvariga för enheten och kontot.</translation> <translation id="4950898438188848926">Knapp för flikbyte. Tryck på retur för att byta till den öppna fliken <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Åtgärder</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -740,7 +734,6 @@ <translation id="5017554619425969104">Texten som du kopierade</translation> <translation id="5018422839182700155">Det går inte att öppna den här sidan</translation> <translation id="5019198164206649151">Säkerhetskopian har dålig status</translation> -<translation id="5020154601324912079">Styr hur enhetens data hanteras. Google behandlar endast enhetens data i enlighet med enhetshanterarens anvisningar och endast i de syften som anges av enhetshanteraren.</translation> <translation id="5023310440958281426">Kontrollera administratörsprinciperna</translation> <translation id="5029568752722684782">Ta bort kopia</translation> <translation id="503069730517007720">Ett rotcertifikat för <ph name="SOFTWARE_NAME" /> krävs men har inte installerats. IT-administratören bör granska konfigurationsanvisningarna för <ph name="SOFTWARE_NAME" /> och åtgärda problemet. <ph name="FURTHER_EXPLANATION" /></translation> @@ -898,7 +891,6 @@ <translation id="5838278095973806738">Du bör inte ange några känsliga uppgifter på den här webbplatsen (till exempel lösenord eller kreditkortsuppgifter) eftersom hackare kan stjäla dem.</translation> <translation id="5860033963881614850">Av</translation> <translation id="5863847714970149516">Sidan du är på väg till kan försöka debitera dig</translation> -<translation id="5865951947699094510">Kan ändra kontokonfigureringen via fjärranslutning.</translation> <translation id="5866257070973731571">Ange telefonnummer</translation> <translation id="5869405914158311789">Webbplatsen kan inte nås</translation> <translation id="5869522115854928033">Sparade lösenord</translation> @@ -1169,7 +1161,6 @@ Mer information. <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Hantera lösenord …</translation> <translation id="7419106976560586862">Profilsökväg</translation> -<translation id="7424427397225027541">Styr hur kontots data hanteras. Google behandlar endast kontots data i enlighet med den kontoansvarigas anvisningar och endast i de syften som anges av den kontoansvariga.</translation> <translation id="7437289804838430631">Lägg till kontaktuppgifter</translation> <translation id="7440140511386898319">Utforska medan du är offline</translation> <translation id="7441627299479586546">Felaktigt policyämne</translation> @@ -1255,7 +1246,6 @@ Mer information. <translation id="780301667611848630">Nej tack</translation> <translation id="7805768142964895445">Status</translation> <translation id="7806344367022510803">Inställningar för att ändra sökmotor i Chrome</translation> -<translation id="7810209002420871817">Som ansvarig för kontot, <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Vill du ta bort formulärförslaget från Chrome?</translation> <translation id="7815407501681723534">Hittade <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> för <ph name="SEARCH_STRING" /></translation> diff --git a/chromium/components/strings/components_strings_sw.xtb b/chromium/components/strings/components_strings_sw.xtb index 0d65d4685d8..ef6fb4c392d 100644 --- a/chromium/components/strings/components_strings_sw.xtb +++ b/chromium/components/strings/components_strings_sw.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="sw"> -<translation id="1001338328714563407">Ukiwa msimamizi wa kifaa na akaunti yako, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Sio Sasa</translation> <translation id="1010200102790553230">Pakia ukurasa baadaye</translation> <translation id="1015730422737071372">Toa maelezo ya ziada</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">Unaweza kuzima proksi zozote zilizosanidiwa kwa muunganisho kutoka kwenye ukurasa wa mipangilio.</translation> <translation id="2955913368246107853">Funga upau wa kupata</translation> <translation id="2969319727213777354">Ili kutambua muunganisho salama, saa yako inahitaji kusahihishwa. Hii ni kwa sababu vyeti ambavyo tovuti hutumia kujitambua ni sahihi kwa vipindi mahususi pekee. Kwa kuwa saa ya kifaa chako si sahihi, Google Chrome haiwezi kuthibitisha vyeti hivi.</translation> -<translation id="2970515157925768593">Inaweza kubadilisha mipangilio ya akaunti na kifaa chako kwa mbali.</translation> <translation id="2972581237482394796">&Rudia</translation> <translation id="2977665033722899841">Umechagua <ph name="ROW_NAME" /> wakati huu. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Futa Data</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">Onyesha nakala iliyohifadhiwa</translation> <translation id="3008447029300691911">Weka CVC ya <ph name="CREDIT_CARD" />. Baada ya kuthibitisha, maelezo ya kadi yako yatashirikiwa na tovuti hii.</translation> <translation id="3010559122411665027">Ingizo orodha "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Ukiwa msimamizi wa kifaa hiki, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Imezuiwa kiotomatiki</translation> <translation id="3023071826883856138">You4 (Bahasha)</translation> <translation id="3024663005179499861">Aina mbaya ya sera</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">Pakua ukiwa mtandaoni</translation> <translation id="3293642807462928945">Pata maelezo zaidi kuhusu sera ya <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Hakuna matokeo ya utafutaji yaliyopatikana</translation> -<translation id="3311730110465560799">Inaweza kubadilisha mipangilio ya kifaa chako kutoka mbali.</translation> <translation id="3320021301628644560">Ongeza anwani ya kutuma bili</translation> <translation id="3324983252691184275">Nyekundu Iliyoiva</translation> <translation id="3338095232262050444">Salama</translation> @@ -526,7 +522,6 @@ <translation id="3761718714832595332">Ficha hali</translation> <translation id="3765032636089507299">Ukurasa wa Kuvinjari Salama unaboreshwa.</translation> <translation id="3778403066972421603">Je, ungependa kuhifadhi kadi hii kwenye Akaunti yako ya Google na kwenye kifaa hiki?</translation> -<translation id="3779973883630527594">Kampuni, shule au shirika ambalo linadhibiti akaunti hii:</translation> <translation id="3781428340399460090">Waridi Inayong'aa</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Muda wa matumizi utakwisha <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -726,7 +721,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> inasema</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Hakuna matokeo yoyote yaliyopatikana</translation> -<translation id="4945672369594656571">Hudhibiti jinsi data ya kifaa na akaunti yako hushughulikiwa. Google huchakata data ya kifaa chako chini ya mwongozo wa msimamizi wa kifaa chako na kwa madhumuni yaliyobainishwa na msimamizi wa kifaa chako pekee.</translation> <translation id="4950898438188848926">Kitufe cha kubadilisha kichupo, bonyeza Enter ili uende kwenye kichupo cha kufungua, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Vitendo</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -740,7 +734,6 @@ <translation id="5017554619425969104">Maandishi uliyonakili</translation> <translation id="5018422839182700155">Ukurasa huu haufunguki</translation> <translation id="5019198164206649151">Hifadhi la kucheleza liko katika hali mbaya</translation> -<translation id="5020154601324912079">Hudhibiti jinsi data ya kifaa inashughulikiwa. Google huchakata tu data ya kifaa chako chini ya mwongozo wa msimamizi wa kifaa chako na kwa madhumuni yaliyobainishwa na msimamizi wa kifaa chako pekee.</translation> <translation id="5023310440958281426">Angalia sera za msimamizi wako</translation> <translation id="5029568752722684782">Futa nakala</translation> <translation id="503069730517007720">Cheti cha msingi cha "<ph name="SOFTWARE_NAME" />" kinahitajika lakini hakijasakinishwa. Ni lazima msimamizi wako wa TEHAMA asome mipangilio ya "<ph name="SOFTWARE_NAME" />" ili atatue tatizo hili. <ph name="FURTHER_EXPLANATION" /></translation> @@ -898,7 +891,6 @@ <translation id="5838278095973806738">Hupaswi kuweka maelezo nyeti kwenye tovuti hii (kwa mfano, manenosiri au kadi za mikopo), kwa sababu wavamizi wanaweza kuyaiba.</translation> <translation id="5860033963881614850">Kimezimwa</translation> <translation id="5863847714970149516">Huenda ukurasa unaofuata ukajaribu kukutoza pesa</translation> -<translation id="5865951947699094510">Inaweza kubadilisha mipangilio ya akaunti yako kutoka mbali.</translation> <translation id="5866257070973731571">Ongeza Nambari ya Simu</translation> <translation id="5869405914158311789">Imeshindwa kufungua tovuti hii</translation> <translation id="5869522115854928033">Manenosiri yaliyohifadhiwa</translation> @@ -1167,7 +1159,6 @@ <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Dhibiti Manenosiri…</translation> <translation id="7419106976560586862">Kijia cha Maelezo mafupi</translation> -<translation id="7424427397225027541">Hudhibiti jinsi data ya akaunti yako inashughulikiwa. Google huchakata tu data ya akaunti yako chini ya mwongozo wa msimamizi wa akaunti yako na kwa madhumuni yaliyobainishwa na msimamizi wa akaunti yako pekee.</translation> <translation id="7437289804838430631">Ongeza Maelezo ya Mawasiliano</translation> <translation id="7440140511386898319">Gundua ukiwa nje ya mtandao</translation> <translation id="7441627299479586546">Kichwa cha sera kisichofaa</translation> @@ -1253,7 +1244,6 @@ <translation id="780301667611848630">La, asante</translation> <translation id="7805768142964895445">Hali</translation> <translation id="7806344367022510803">Badilisha mipangilio ya Mtambo wa Kutafuta katika Chrome</translation> -<translation id="7810209002420871817">Ukiwa msimamizi wa akaunti yako, <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Ungependa kuondoa pendekezo la fomu kutoka kwenye Chrome?</translation> <translation id="7815407501681723534">Imepata matokeo <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> ya '<ph name="SEARCH_STRING" />'</translation> diff --git a/chromium/components/strings/components_strings_ta.xtb b/chromium/components/strings/components_strings_ta.xtb index 136a3cddb49..7908509f490 100644 --- a/chromium/components/strings/components_strings_ta.xtb +++ b/chromium/components/strings/components_strings_ta.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ta"> -<translation id="1001338328714563407">உங்கள் சாதனம் மற்றும் கணக்கின் நிர்வாகியாக, <ph name="ENROLLMENT_DOMAIN" /> இவற்றைச் செய்யலாம்:</translation> <translation id="1008557486741366299">இப்போது இல்லை </translation> <translation id="1010200102790553230">பக்கத்தைப் பின்னர் ஏற்று</translation> <translation id="1015730422737071372">கூடுதல் விவரங்களை வழங்கவும்</translation> @@ -222,6 +221,7 @@ <translation id="2111256659903765347">Super-A</translation> <translation id="2113977810652731515">கார்டு</translation> <translation id="2114841414352855701"><ph name="POLICY_NAME" /> ஆல் கொள்கை மேலெழுதப்பட்டுள்ளதால் புறக்கணிக்கப்பட்டது.</translation> +<translation id="2129079103035905234">மோஷன் சென்சார்கள்</translation> <translation id="213826338245044447">மொபைல் புக்மார்க்குகள்</translation> <translation id="214556005048008348">பேமண்ட்டை ரத்துசெய்</translation> <translation id="2147827593068025794">பின்புல ஒத்திசைவு</translation> @@ -310,7 +310,7 @@ <translation id="2586657967955657006">கிளிப்போர்டு</translation> <translation id="2587730715158995865">வெளியீட்டாளர்: <ph name="ARTICLE_PUBLISHER" />. இதையும் பிற வெளியீட்டாளர்கள் வழங்கும் <ph name="OTHER_ARTICLE_COUNT" /> கட்டுரைகளையும் படிக்கவும்.</translation> <translation id="2587841377698384444">கோப்பக API ஐடி:</translation> -<translation id="2595719060046994702">இந்தச் சாதனமும் கணக்கும் ஒரு நிறுவனம் அல்லது பிற அமைப்பின் மூலம் நிர்வகிக்கப்படவில்லை.</translation> +<translation id="2595719060046994702">இந்தச் சாதனமும் கணக்கும் ஒரு நிறுவனத்தின் மூலமோ பிற அமைப்பின் மூலமோ நிர்வகிக்கப்படவில்லை.</translation> <translation id="2597378329261239068">இந்த ஆவணம் கடவுச்சொல் பாதுகாக்கப்பட்ட ஒன்று. தயவுசெய்து ஒரு கடவுச்சொல்லை உள்ளிடுக.</translation> <translation id="2609632851001447353">வேறுபாடுகள்</translation> <translation id="2618023639789766142">C10 (என்வலப்)</translation> @@ -345,7 +345,7 @@ <translation id="2781692009645368755">Google Pay</translation> <translation id="2784949926578158345">இணைப்பு மீட்டமைக்கப்பட்டது.</translation> <translation id="2788784517760473862">ஏற்கப்படும் கிரெடிட் கார்டுகள்</translation> -<translation id="2792012897584536778">இந்தச் சாதனத்தின் நிர்வாகிகளிடம் அமைவுப் பாதுகாப்புச் சான்றிதழ்கள் உள்ளன. இவற்றின் மூலம் நீங்கள் சென்ற இணையதளங்களின் உள்ளடக்கத்தை அவர்கள் பார்க்கக்கூடும்.</translation> +<translation id="2792012897584536778">இந்தச் சாதனத்தின் நிர்வாகிகள் பாதுகாப்புச் சான்றிதழ்களை அமைத்துள்ளனர். இவற்றின் மூலம் நீங்கள் சென்ற இணையதளங்களின் உள்ளடக்கத்தை அவர்கள் பார்க்கக்கூடும்.</translation> <translation id="2794233252405721443">தளம் தடுக்கப்பட்டது</translation> <translation id="2799020568854403057">தளத்தில் தீங்கிழைக்கும் பயன்பாடுகள் உள்ளன</translation> <translation id="2799223571221894425">மீண்டும் தொடங்கு</translation> @@ -362,7 +362,7 @@ <translation id="2903493209154104877">முகவரிகள்</translation> <translation id="290376772003165898"><ph name="LANGUAGE" /> மொழியில் பக்கம் இல்லையா?</translation> <translation id="2909946352844186028">நெட்வொர்க் மாற்றம் கண்டறியப்பட்டது.</translation> -<translation id="2910133103376701357">உங்கள் சாதனமும் கணக்கும் <ph name="ENROLLMENT_DOMAIN" /> மூலம் நிர்வகிக்கப்படுகின்றன.</translation> +<translation id="2910133103376701357">உங்கள் சாதனத்தையும் கணக்கையும் நிர்வகிப்பது: <ph name="ENROLLMENT_DOMAIN" />.</translation> <translation id="2916038427272391327">பிற நிரல்களை மூடவும்</translation> <translation id="2922350208395188000">சேவையகச் சான்றிதழை சோதிக்க முடியவில்லை.</translation> <translation id="2925673989565098301">டெலிவரி முறை</translation> @@ -373,7 +373,6 @@ <translation id="2948083400971632585">இணைப்பிற்காக உள்ளமைத்த எந்த பிராக்சிகளையும் நீங்கள் அமைப்புகள் பக்கத்திலிருந்து முடக்கலாம்.</translation> <translation id="2955913368246107853">தேடல் பெட்டியை மூடுக</translation> <translation id="2969319727213777354">பாதுகாப்பான இணைப்பை ஏற்படுத்த, கடிகாரம் சரியாக அமைக்கப்பட வேண்டும். இணையதளங்கள் தங்களைத் தாமே அடையாளப்படுத்தப் பயன்படுத்தப்படும் சான்றிதழ்கள் குறிப்பிட்ட காலத்திற்கு மட்டும் செல்லுபடியாவதால், இது செய்யப்பட வேண்டும். உங்கள் சாதனத்தின் கடிகாரம் தவறாக இருப்பதால், இந்தச் சான்றிதழ்களை Google Chrome ஆல் சரிபார்க்க முடியவில்லை.</translation> -<translation id="2970515157925768593">இதனால் உங்கள் சாதன மற்றும் கணக்கின் அமைவை தொலைநிலையிலிருந்து மாற்ற இயலும்.</translation> <translation id="2972581237482394796">&மீண்டும் செய்</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, தற்போது தேர்ந்தெடுக்கப்பட்டது. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">தரவை அழி</translation> @@ -385,7 +384,6 @@ <translation id="3005723025932146533">சேமித்த நகலைக் காட்டு</translation> <translation id="3008447029300691911"><ph name="CREDIT_CARD" /> இன் CVC எண்ணை உள்ளிடவும். உறுதிசெய்த பின்னர், உங்கள் கார்டு விவரங்கள் இந்தத் தளத்திற்குப் பகிரப்படும்.</translation> <translation id="3010559122411665027">பட்டியல் உள்ளீடு "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">இந்தச் சாதனத்தின் நிர்வாகியாக, <ph name="ENROLLMENT_DOMAIN" /> இவற்றைச் செய்யலாம்:</translation> <translation id="301521992641321250">தானாகத் தடுக்கப்பட்டது</translation> <translation id="3023071826883856138">You4 (என்வலப்)</translation> <translation id="3024663005179499861">தவறான கொள்கை வகை</translation> @@ -428,7 +426,6 @@ <translation id="3287510313208355388">ஆன்லைனில் இருக்கும் போது பதிவிறக்கு</translation> <translation id="3293642807462928945"><ph name="POLICY_NAME" /> கொள்கை குறித்து மேலும் அறிக</translation> <translation id="3303855915957856445">தேடல் முடிவுகள் எதுவுமில்லை</translation> -<translation id="3311730110465560799">தொலைநிலையில் உங்கள் சாதன அமைவை மாற்றலாம்.</translation> <translation id="3320021301628644560">பில்லிங் முகவரியைச் சேர்க்கவும்</translation> <translation id="3324983252691184275">அடர்சிவப்பு</translation> <translation id="3338095232262050444">பாதுகாப்பானது</translation> @@ -522,7 +519,6 @@ <translation id="3761718714832595332">நிலையை மறை</translation> <translation id="3765032636089507299">பாதுகாப்பு உலாவல் பக்கம் உருவாக்கப்படுகிறது.</translation> <translation id="3778403066972421603">கார்டை உங்கள் Google கணக்கிலும் இந்தச் சாதனத்திலும் சேமிக்க விரும்புகிறீர்களா?</translation> -<translation id="3779973883630527594">இந்தக் கணக்கை நிர்வகிக்கும் நிறுவனம், பள்ளி அல்லது பிற அமைப்புகள்:</translation> <translation id="3781428340399460090">ஹாட் பிங்க்</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">காலாவதி: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -615,7 +611,7 @@ <translation id="4265872034478892965">உங்கள் நிர்வாகி அனுமதித்தார்</translation> <translation id="4275830172053184480">உங்கள் சாதனத்தை மீண்டும் தொடங்கவும்</translation> <translation id="4277028893293644418">கடவுச்சொல்லை மீட்டமை</translation> -<translation id="4279811152705618813"><ph name="ENROLLMENT_DOMAIN" /> டொமைனால் உங்கள் <ph name="DEVICE_TYPE" /> நிர்வகிக்கப்படுகிறது</translation> +<translation id="4279811152705618813"><ph name="DEVICE_TYPE" />ஐ நிர்வகிப்பது: <ph name="ENROLLMENT_DOMAIN" /></translation> <translation id="4280429058323657511">, காலாவதித் தேதி: <ph name="EXPIRATION_DATE_ABBR" /></translation> <translation id="428639260510061158">{NUM_CARDS,plural, =1{இந்தக் கார்டு உங்கள் Google கணக்கில் சேமிக்கப்பட்டது}other{இந்தக் கார்டுகள் உங்கள் Google கணக்கில் சேமிக்கப்பட்டன}}</translation> <translation id="42981349822642051">விரி</translation> @@ -697,7 +693,7 @@ <translation id="4759118997339041434">கட்டணத்தைத் தானாக நிரப்புவது முடக்கப்பட்டுள்ளது</translation> <translation id="4764776831041365478"><ph name="URL" /> இல் உள்ள வலைப்பக்கமானது தற்காலிகமாக இயங்காமல் இருக்கலாம் அல்லது அது ஒரு புதிய வலை முகவரிக்கு நிரந்தரமாக நகர்த்தப்பட்டிருக்கலாம்.</translation> <translation id="4771973620359291008">அறியப்படாத பிழை ஏற்பட்டுள்ளது.</translation> -<translation id="4780900888022378816">உங்கள் சாதனம் <ph name="ENROLLMENT_DOMAIN" /> மூலமும் உங்கள் கணக்கு <ph name="ACCOUNT_DOMAIN" /> மூலமும் நிர்வகிக்கப்படுகிறது.</translation> +<translation id="4780900888022378816">உங்கள் சாதனத்தை நிர்வகிப்பது: <ph name="ENROLLMENT_DOMAIN" />, கணக்கை நிர்வகிப்பது: <ph name="ACCOUNT_DOMAIN" />.</translation> <translation id="4785689107224900852">இந்தத் தாவலுக்கு மாற்றும்</translation> <translation id="4798078619018708837">கார்டு விவரங்களைப் புதுப்பிக்க, <ph name="CREDIT_CARD" /> இன் காலாவதித் தேதியையும் CVC எண்ணையும் உள்ளிடவும். நீங்கள் உறுதிப்படுத்திய பின்னர், உங்கள் Google கணக்கிலிருக்கும் கார்டு விவரங்கள் இந்தத் தளத்துடன் பகிரப்படும்.</translation> <translation id="4800132727771399293">காலாவதியாகும் நேரத்தையும், CVCஐயும் சரிபார்த்து, மீண்டும் முயற்சிக்கவும்</translation> @@ -722,7 +718,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> தெரிவிப்பது:</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">முடிவுகள் இல்லை</translation> -<translation id="4945672369594656571">உங்கள் சாதன மற்றும் கணக்குத் தரவு எவ்வாறு கையாளப்படுகிறது என்பதைக் கட்டுப்படுத்தும். Google உங்கள் சாதன மற்றும் கணக்குத் தரவைப் பிரத்தியேகமாக உங்கள் சாதன மற்றும் கணக்கு நிர்வாகியின் வழிகாட்டுதலின் கீழ், அவர் குறிப்பிடும் நோக்கங்களுக்காக மட்டுமே செயலாக்கும்.</translation> <translation id="4950898438188848926"><ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /> தாவலைத் திறக்க, ‘தாவல்’ மாற்ற பட்டனைத் தட்டி, ‘எண்டர்’ பட்டனை அழுத்தவும்</translation> <translation id="495170559598752135">செயல்கள்</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -736,7 +731,6 @@ <translation id="5017554619425969104">நீங்கள் நகலெடுத்த உரை</translation> <translation id="5018422839182700155">பக்கத்தைத் திறக்க முடியவில்லை</translation> <translation id="5019198164206649151">தவறான நிலையில் மீட்பு சேமிப்பு உள்ளது</translation> -<translation id="5020154601324912079">உங்கள் சாதனத் தரவு எவ்வாறு கையாளப்படுகிறது என்பதைக் கட்டுப்படுத்தும். Google உங்கள் சாதனத் தரவை பிரத்தியேகமாக உங்கள் சாதன நிர்வாகியின் வழிகாட்டுதலின் கீழ், அவர் குறிப்பிடும் நோக்கங்களுக்காக மட்டுமே செயலாக்கும்.</translation> <translation id="5023310440958281426">உங்கள் நிர்வாகியின் கொள்கைகளைச் சரிபார்க்கவும்</translation> <translation id="5029568752722684782">நகலை அழி</translation> <translation id="503069730517007720">"<ph name="SOFTWARE_NAME" />" மென்பொருளுக்கு மூலச் சான்றிதழ் தேவை, ஆனால் நிறுவப்படவில்லை. இந்தச் சிக்கலைச் சரிசெய்ய, "<ph name="SOFTWARE_NAME" />" மென்பொருளின் உள்ளமைவு வழிமுறைகளை ஐடி நிர்வாகி பின்பற்ற வேண்டும். <ph name="FURTHER_EXPLANATION" /></translation> @@ -894,7 +888,6 @@ <translation id="5838278095973806738">தீங்கிழைப்பவர்கள் திருடிவிடலாம் என்பதால், இந்தத் தளத்தில் முக்கியத் தகவலை (எடுத்துக்காட்டு: கடவுச்சொற்கள் அல்லது கிரெடிட் கார்டுகள்) உள்ளிட வேண்டாம்.</translation> <translation id="5860033963881614850">ஆஃப்</translation> <translation id="5863847714970149516">அடுத்த பக்கத்தில் உங்களிடமிருந்து கட்டணம் வசூலிக்கப்படலாம்</translation> -<translation id="5865951947699094510">இதனால் உங்கள் கணக்கின் அமைவை தொலைநிலையிலிருந்து மாற்ற இயலும்.</translation> <translation id="5866257070973731571">மொபைல் எண்ணைச் சேர்க்கவும்</translation> <translation id="5869405914158311789">இந்தத் தளத்தை அணுக முடியவில்லை</translation> <translation id="5869522115854928033">சேமிக்கப்பட்ட கடவுச்சொற்கள்</translation> @@ -915,7 +908,7 @@ <translation id="5977976211062815271">இந்தச் சாதனத்தில்</translation> <translation id="5980920751713728343">Index-3x5</translation> <translation id="598637245381783098">பேமெண்ட் பயன்பாட்டைத் திறக்க முடியவில்லை</translation> -<translation id="5988826871883769516">உங்கள் சாதனம் <ph name="ENROLLMENT_DOMAIN" /> மூலம் நிர்வகிக்கப்படுகிறது.</translation> +<translation id="5988826871883769516">உங்கள் சாதனத்தை நிர்வகிப்பது: <ph name="ENROLLMENT_DOMAIN" />.</translation> <translation id="5989320800837274978">ப்ராக்ஸி சேவையகம் சரிசெய்யப்படவும் இல்லை .pac ஸ்கிரிப்ட் URL குறிப்பிடப்படவுமில்லை.</translation> <translation id="5990559369517809815">சேவையகத்திற்கான கோரிக்கைகள் நீட்டிப்பினால் தடுக்கப்பட்டது.</translation> <translation id="6008256403891681546">JCB</translation> @@ -1002,7 +995,7 @@ <translation id="6508722015517270189">Chromeஐ மீண்டும் தொடங்கவும்</translation> <translation id="6529602333819889595">&நீக்குதலை மீண்டும் செய்</translation> <translation id="6534179046333460208">இயல்நிலை இணையப் பரிந்துரைகள்</translation> -<translation id="6554795675067793129">உங்கள் கணக்கு <ph name="ENROLLMENT_DOMAIN" /> மூலம் நிர்வகிக்கப்படுகிறது.</translation> +<translation id="6554795675067793129">உங்கள் கணக்கை நிர்வகிப்பது: <ph name="ENROLLMENT_DOMAIN" />.</translation> <translation id="6556866813142980365">மீண்டும் செய்</translation> <translation id="6563469144985748109">இன்னும் உங்கள் நிர்வாகி அனுமதிக்கவில்லை</translation> <translation id="6569060085658103619">நீட்டிப்புப் பக்கத்தைப் பார்க்கிறீர்கள்</translation> @@ -1087,7 +1080,7 @@ <translation id="7062635574500127092">பசும் நீலம்</translation> <translation id="7064851114919012435">தொடர்புத் தகவல்</translation> <translation id="7079718277001814089">இந்தத் தளத்தில் தீம்பொருள் உள்ளது</translation> -<translation id="7081564429925484109">எச்சரிக்கை: இந்தக் கொள்கையில் பட்டியல் மதிப்பு இல்லை என்பதால் PolicyListMultipleSourceMergeList கொள்கையில் குறிப்பிட்டுள்ளபடி ஒன்றிணைக்கப்படவில்லை.</translation> +<translation id="7081564429925484109">எச்சரிக்கை: இது ஒரு பட்டியல் இல்லை என்பதால் PolicyListMultipleSourceMergeList கொள்கையில் குறிப்பிட்டுள்ளபடி இக்கொள்கை ஒன்றிணைக்கப்படவில்லை.</translation> <translation id="7087282848513945231">மாகாணம்</translation> <translation id="7090678807593890770">Googleளில் <ph name="LINK" />ஐத் தேடவும்</translation> <translation id="7108338896283013870">மறை</translation> @@ -1164,7 +1157,6 @@ <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">கடவுச்சொற்களை நிர்வகி…</translation> <translation id="7419106976560586862">சுயவிவரப் பாதை</translation> -<translation id="7424427397225027541">உங்கள் கணக்குத் தரவு எவ்வாறு கையாளப்படுகிறது என்பதைக் கட்டுப்படுத்தும். Google உங்கள் கணக்குத் தரவைப் பிரத்தியேகமாக உங்கள் கணக்கு நிர்வாகியின் வழிகாட்டுதலின் கீழ், அவர் குறிப்பிடும் நோக்கங்களுக்காக மட்டுமே செயலாக்கும்.</translation> <translation id="7437289804838430631">தொடர்புத் தகவலைச் சேர்</translation> <translation id="7440140511386898319">ஆஃப்லைன் உள்ளடக்கப் பட்டியல்</translation> <translation id="7441627299479586546">தவறான கொள்கைத் தலைப்பு</translation> @@ -1250,7 +1242,6 @@ <translation id="780301667611848630">தேவையில்லை</translation> <translation id="7805768142964895445">நிலை</translation> <translation id="7806344367022510803">Chromeமில் தேடல் இன்ஜின் அமைப்புகளை மாற்றவும்</translation> -<translation id="7810209002420871817">உங்கள் கணக்கின் நிர்வாகியாக, <ph name="ACCOUNT_DOMAIN" /> இவற்றைச் செய்யலாம்:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Chrome இலிருந்து படிவப் பரிந்துரையை அகற்றவா?</translation> <translation id="7815407501681723534">'<ph name="SEARCH_STRING" />'க்கு <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> உள்ளன</translation> diff --git a/chromium/components/strings/components_strings_te.xtb b/chromium/components/strings/components_strings_te.xtb index 542e7bf984f..9fbf8a1db1b 100644 --- a/chromium/components/strings/components_strings_te.xtb +++ b/chromium/components/strings/components_strings_te.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="te"> -<translation id="1001338328714563407">మీ పరికరం మరియు ఖాతా మేనేజర్గా, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">ఇప్పుడు కాదు</translation> <translation id="1010200102790553230">పేజీని తర్వాత లోడ్ చేయి</translation> <translation id="1015730422737071372">అదనపు వివరాలను అందించండి</translation> @@ -367,7 +366,6 @@ <translation id="2948083400971632585">మీరు సెట్టింగ్ల పేజీ నుండి కనెక్షన్ కోసం కాన్ఫిగర్ చేయబడిన ఏ ప్రాక్సీలను అయినా నిలిపివేయవచ్చు.</translation> <translation id="2955913368246107853">కనుగొను పట్టీని మూసివేయి</translation> <translation id="2969319727213777354">సురక్షిత కనెక్షన్ను ఏర్పాటు చేయడానికి, మీ గడియారాన్ని సరైన సమయానికి సెట్ చేయాలి. ఎందుకంటే వెబ్సైట్లు వాటిని గుర్తించడానికి ఉపయోగించే సర్టిఫికెట్లు నిర్దిష్ట కాలవ్యవధుల్లో మాత్రమే చెల్లుబాటు అవుతాయి. మీ పరికరం గడియారం సమయం తప్పుగా ఉన్నందున, Google Chrome ఈ సర్టిఫికెట్లను ధృవీకరించలేదు.</translation> -<translation id="2970515157925768593">మీ పరికరం మరియు ఖాతా సెటప్ను రిమోట్లో మార్చవచ్చు.</translation> <translation id="2972581237482394796">&పునరావృతం</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, ప్రస్తుతం ఎంచుకోబడింది. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">డేటాను తీసివేయి</translation> @@ -379,7 +377,6 @@ <translation id="3005723025932146533">సేవ్ చేయబడిన కాపీని చూపు</translation> <translation id="3008447029300691911"><ph name="CREDIT_CARD" /> కార్డ్ CVCని నమోదు చేయండి. మీరు నిర్ధారించిన తర్వాత, మీ కార్డ్ వివరాలు ఈ సైట్తో షేర్ చేయబడతాయి.</translation> <translation id="3010559122411665027">జాబితా నమోదు "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">ఈ పరికర మేనేజర్గా, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">స్వయంచాలకంగా బ్లాక్ చేయబడింది</translation> <translation id="3023071826883856138">You4 (ఎన్వలప్)</translation> <translation id="3024663005179499861">చెల్లని విధాన రకం</translation> @@ -425,7 +422,6 @@ <translation id="3287510313208355388">ఆన్లైన్లో ఉన్నప్పుడు డౌన్లోడ్ చేయి</translation> <translation id="3293642807462928945"><ph name="POLICY_NAME" /> విధానం గురించి మరింత తెలుసుకోండి</translation> <translation id="3303855915957856445">శోధన ఫలితాలు ఏవీ కనుగొనబడలేదు</translation> -<translation id="3311730110465560799">మీ పరికర సెటప్ను రిమోట్లో మార్చవచ్చు.</translation> <translation id="3320021301628644560">బిల్లింగ్ చిరునామాను జోడించండి</translation> <translation id="3324983252691184275">ముదురు ఎరుపు రంగు</translation> <translation id="3338095232262050444">సురక్షితం</translation> @@ -520,7 +516,6 @@ <translation id="3761718714832595332">స్థితిని దాచు</translation> <translation id="3765032636089507299">సురక్షిత బ్రౌజింగ్ పేజీ నిర్మాణంలో ఉంది.</translation> <translation id="3778403066972421603">ఈ కార్డ్ను మీ Google ఖాతాకు మరియు ఈ పరికరంలో సేవ్ చేయాలని అనుకుంటున్నారా?</translation> -<translation id="3779973883630527594">ఈ ఖాతాను నిర్వహిస్తున్న కంపెనీ, పాఠశాల లేదా సంస్థ:</translation> <translation id="3781428340399460090">ముదురు గులాబి రంగు</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">గడువు ముగింపు <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -720,7 +715,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> ఇలా చెబుతోంది</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">ఫలితాలు ఏవీ లేవు</translation> -<translation id="4945672369594656571">మీ పరికరం మరియు ఖాతా డేటా నిర్వహణను నియంత్రిస్తుంది. మీ పరికరం మరియు ఖాతా మేనేజర్ ఆదేశానుసారంగా Google మీ పరికరం మరియు ఖాతా డేటాను ప్రత్యేక పద్ధతిలో మీ పరికరం మరియు ఖాతా మేనేజర్ పేర్కొన్న ప్రయోజనాల కోసం మాత్రమే ప్రాసెస్ చేస్తుంది.</translation> <translation id="4950898438188848926">ట్యాబ్ మార్పు బటన్, తెరిచియున్న ట్యాబ్ <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" />కు మారడానికి ఎంటర్ నొక్కండి</translation> <translation id="495170559598752135">చర్యలు</translation> <translation id="4955242332710481440">A5-అదనం</translation> @@ -734,7 +728,6 @@ <translation id="5017554619425969104">మీరు కాపీ చేసిన వచనం</translation> <translation id="5018422839182700155">ఈ పేజీని తెరవడం సాధ్యపడదు</translation> <translation id="5019198164206649151">బ్యాకింగ్ నిల్వ చెల్లని స్థితిలో ఉంది</translation> -<translation id="5020154601324912079">మీ పరికర డేటా నిర్వహణను నియంత్రిస్తుంది. మీ పరికర మేనేజర్ ఆదేశానుసారంగా Google మీ పరికర డేటాను ప్రత్యేక పద్ధతిలో మీ పరికర మేనేజర్ పేర్కొన్న ప్రయోజనాల కోసం మాత్రమే ప్రాసెస్ చేస్తుంది.</translation> <translation id="5023310440958281426">మీ నిర్వాహకుని విధానాలను చూడండి</translation> <translation id="5029568752722684782">కాపీని తీసివేయి</translation> <translation id="503069730517007720">"<ph name="SOFTWARE_NAME" />" యొక్క రూట్ సర్టిఫికేట్ అవసరం, కానీ అది ఇన్స్టాల్ చేయబడలేదు. ఈ సమస్యను పరిష్కరించాలంటే, మీ IT నిర్వాహకులు "<ph name="SOFTWARE_NAME" />" యొక్క కాన్ఫిగరేషన్ సూచనలను పరిశీలించాలి. <ph name="FURTHER_EXPLANATION" /></translation> @@ -892,7 +885,6 @@ <translation id="5838278095973806738">మీరు ఈ సైట్లో ఎలాంటి గోప్యమైన సమాచారాన్ని నమోదు చేయకూడదు (ఉదాహరణకు, పాస్వర్డ్లు లేదా క్రెడిట్ కార్డ్లు), దాడికి పాల్పడేవారు ఆ సమాచారం దొంగిలించే అవకాశం ఉంటుంది.</translation> <translation id="5860033963881614850">ఆఫ్ అయ్యింది</translation> <translation id="5863847714970149516">మీరు చూడబోతున్న పేజీ మీకు డబ్బు ఛార్జ్ చేయడానికి ప్రయత్నించవచ్చు</translation> -<translation id="5865951947699094510">మీ ఖాతా సెటప్ను రిమోట్ విధానంలో మార్చవచ్చు.</translation> <translation id="5866257070973731571">ఫోన్ నంబర్ను జోడించండి</translation> <translation id="5869405914158311789">ఈ సైట్ను చేరుకోలేకపోయాము</translation> <translation id="5869522115854928033">సేవ్ చేసిన పాస్వర్డ్లు</translation> @@ -1160,7 +1152,6 @@ <translation id="741007362987735528">వెడల్పైన-ఫార్మాట్</translation> <translation id="7416351320495623771">పాస్వర్డ్లను నిర్వహించండి…</translation> <translation id="7419106976560586862">ప్రొఫైల్ మార్గం</translation> -<translation id="7424427397225027541">మీ ఖాతా డేటా నిర్వహణను నియంత్రిస్తుంది. మీ ఖాతా మేనేజర్ ఆదేశానుసారంగా Google మీ ఖాతా డేటాను ప్రత్యేక పద్ధతిలో మీ ఖాతా మేనేజర్ పేర్కొన్న ప్రయోజనాల కోసం మాత్రమే ప్రాసెస్ చేస్తుంది.</translation> <translation id="7437289804838430631">సంప్రదింపు సమాచారాన్ని జోడించు</translation> <translation id="7440140511386898319">ఆఫ్లైన్లో ఉన్నప్పుడు అన్వేషించండి</translation> <translation id="7441627299479586546">చెల్లని విధాన విషయం</translation> @@ -1246,7 +1237,6 @@ <translation id="780301667611848630">వద్దు , ధన్యవాదాలు</translation> <translation id="7805768142964895445">స్థితి</translation> <translation id="7806344367022510803">Chromeలో శోధన ఇంజిన్ సెట్టింగ్లను మార్చండి</translation> -<translation id="7810209002420871817">మీ <ph name="ACCOUNT_DOMAIN" /> ఖాతా మేనేజర్గా, వీటిని చేయవచ్చు:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Chrome నుండి ఫారమ్ సూచనను తీసివేయాలా?</translation> <translation id="7815407501681723534">'<ph name="SEARCH_STRING" />' కోసం <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> కనుగొనబడ్డాయి</translation> diff --git a/chromium/components/strings/components_strings_th.xtb b/chromium/components/strings/components_strings_th.xtb index b02bcb60899..cf7922f9686 100644 --- a/chromium/components/strings/components_strings_th.xtb +++ b/chromium/components/strings/components_strings_th.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="th"> -<translation id="1001338328714563407">ในฐานะผู้จัดการอุปกรณ์และบัญชีของคุณ <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">ไม่ใช่ตอนนี้</translation> <translation id="1010200102790553230">โหลดหน้าภายหลัง</translation> <translation id="1015730422737071372">ให้รายละเอียดเพิ่มเติม</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">คุณสามารถปิดใช้งานพร็อกซีที่กำหนดค่าสำหรับการเชื่อมต่อจากหน้าการตั้งค่าได้</translation> <translation id="2955913368246107853">ปิดแถบค้นหา</translation> <translation id="2969319727213777354">หากต้องการสร้างการเชื่อมต่อที่ปลอดภัย คุณต้องตั้งค่านาฬิกาให้ถูกต้องเนื่องจากใบรับรองที่เว็บไซต์ใช้เพื่อระบุตัวตนจะใช้ได้ในช่วงเวลาที่เจาะจงเท่านั้น แต่เนื่องจากนาฬิกาของอุปกรณ์ไม่ถูกต้อง Google Chrome จึงไม่สามารถยืนยันใบรับรองเหล่านี้</translation> -<translation id="2970515157925768593">เปลี่ยนการตั้งค่าอุปกรณ์และบัญชีจากระยะไกลได้</translation> <translation id="2972581237482394796">&ทำซ้ำ</translation> <translation id="2977665033722899841">เลือก <ph name="ROW_NAME" /> อยู่ตอนนี้ <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">ล้างข้อมูล</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">แสดงสำเนาที่บันทึกไว้</translation> <translation id="3008447029300691911">ป้อน CVC สำหรับ <ph name="CREDIT_CARD" /> เมื่อยืนยันแล้ว รายละเอียดบัตรของคุณจะแชร์กับเว็บไซต์นี้</translation> <translation id="3010559122411665027">รายการที่เข้ามา "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">ในฐานะผู้จัดการของอุปกรณ์นี้ <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">ถูกบล็อกโดยอัตโนมัติ</translation> <translation id="3023071826883856138">You4 (ซองจดหมาย)</translation> <translation id="3024663005179499861">ประเภทนโยบายไม่ถูกต้อง</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">ดาวน์โหลดเมื่อออนไลน์</translation> <translation id="3293642807462928945">ดูข้อมูลเพิ่มเติมเกี่ยวกับนโยบาย <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">ไม่พบผลการค้นหา</translation> -<translation id="3311730110465560799">เปลี่ยนการตั้งค่าอุปกรณ์จากระยะไกลได้</translation> <translation id="3320021301628644560">เพิ่มที่อยู่สำหรับการเรียกเก็บเงิน</translation> <translation id="3324983252691184275">แดงเข้ม</translation> <translation id="3338095232262050444">ปลอดภัย</translation> @@ -525,7 +521,6 @@ <translation id="3761718714832595332">ซ่อนสถานะ</translation> <translation id="3765032636089507299">หน้า Google Safe Browsing อยู่ในระหว่างการปรับปรุง</translation> <translation id="3778403066972421603">คุณต้องการบันทึกบัตรนี้ลงในบัญชี Google และในอุปกรณ์นี้ไหม</translation> -<translation id="3779973883630527594">บริษัท สถานศึกษา หรือองค์กรที่จัดการบัญชีนี้</translation> <translation id="3781428340399460090">ชมพูเจิดจ้า</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">หมดอายุ <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -725,7 +720,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> บอกว่า</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">ไม่มีผลการค้นหา</translation> -<translation id="4945672369594656571">ควบคุมวิธีจัดการข้อมูลอุปกรณ์และบัญชีของคุณ Google ประมวลผลข้อมูลอุปกรณ์และบัญชีของคุณภายใต้คำแนะนำของผู้จัดการฝ่ายดูแลลูกค้าและอุปกรณ์ของคุณโดยเฉพาะและตามวัตถุประสงค์ที่ผู้จัดการฝ่ายดูแลลูกค้าและอุปกรณ์ระบุไว้เท่านั้น</translation> <translation id="4950898438188848926">ปุ่มเปลี่ยนแท็บ โปรดกด Enter เพื่อเปลี่ยนไปยังแท็บที่เปิดอยู่ <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">การทำงาน</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -739,7 +733,6 @@ <translation id="5017554619425969104">ข้อความที่คุณคัดลอก</translation> <translation id="5018422839182700155">ไม่สามารถเปิดหน้านี้</translation> <translation id="5019198164206649151">ไม่สามารถจัดเก็บเนื่องจากระบบแบ็คเอนด์อยู่ในสถานะไม่ดี</translation> -<translation id="5020154601324912079">ควบคุมวิธีจัดการข้อมูลอุปกรณ์ของคุณ Google ประมวลผลข้อมูลอุปกรณ์ภายใต้คำแนะนำของผู้จัดการอุปกรณ์ของคุณโดยเฉพาะและตามวัตถุประสงค์ที่ผู้จัดการอุปกรณ์ระบุไว้เท่านั้น</translation> <translation id="5023310440958281426">ตรวจสอบนโยบายของผู้ดูแลระบบของคุณ</translation> <translation id="5029568752722684782">ล้างสำเนา</translation> <translation id="503069730517007720">ไม่ได้ติดตั้งใบรับรองรากที่จำเป็นของ "<ph name="SOFTWARE_NAME" />" ผู้ดูแลระบบ IT ควรดูวิธีการกำหนดค่าของ "<ph name="SOFTWARE_NAME" />" เพื่อแก้ไขปัญหานี้ <ph name="FURTHER_EXPLANATION" /></translation> @@ -897,7 +890,6 @@ <translation id="5838278095973806738">คุณไม่ควรป้อนข้อมูลที่ละเอียดอ่อนบนเว็บไซต์นี้ (ตัวอย่างเช่น รหัสผ่านหรือบัตรเครดิต) เนื่องจากผู้โจมตีอาจขโมยข้อมูลดังกล่าวไปได้</translation> <translation id="5860033963881614850">ปิด</translation> <translation id="5863847714970149516">ระบบอาจพยายามเรียกเก็บเงินจากคุณในหน้าถัดไป</translation> -<translation id="5865951947699094510">เปลี่ยนการตั้งค่าบัญชีจากระยะไกลได้</translation> <translation id="5866257070973731571">เพิ่มหมายเลขโทรศัพท์</translation> <translation id="5869405914158311789">ไม่สามารถเข้าถึงเว็บไซต์นี้</translation> <translation id="5869522115854928033">รหัสผ่านที่บันทึกไว้</translation> @@ -1168,7 +1160,6 @@ <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">จัดการรหัสผ่าน…</translation> <translation id="7419106976560586862">เส้นทางโปรไฟล์</translation> -<translation id="7424427397225027541">ควบคุมวิธีจัดการข้อมูลบัญชีของคุณ Google ประมวลผลข้อมูลบัญชีภายใต้คำแนะนำของผู้จัดการฝ่ายดูแลลูกค้าของคุณโดยเฉพาะและตามวัตถุประสงค์ที่ผู้จัดการฝ่ายดูแลลูกค้าระบุไว้เท่านั้น</translation> <translation id="7437289804838430631">เพิ่มข้อมูลติดต่อ</translation> <translation id="7440140511386898319">สำรวจขณะที่ออฟไลน์</translation> <translation id="7441627299479586546">หัวเรื่องนโยบายไม่ถูกต้อง</translation> @@ -1254,7 +1245,6 @@ <translation id="780301667611848630">ไม่ ขอบคุณ</translation> <translation id="7805768142964895445">สถานะ</translation> <translation id="7806344367022510803">เปลี่ยนการตั้งค่าเครื่องมือค้นหาใน Chrome</translation> -<translation id="7810209002420871817">ในฐานะผู้จัดการบัญชีของคุณ <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">นำคำแนะนำสำหรับแบบฟอร์มออกจาก Chrome ไหม</translation> <translation id="7815407501681723534">พบ<ph name="SEARCH_RESULTS" /> <ph name="NUMBER_OF_RESULTS" /> รายการสำหรับ "<ph name="SEARCH_STRING" />"</translation> diff --git a/chromium/components/strings/components_strings_tr.xtb b/chromium/components/strings/components_strings_tr.xtb index 19d62f557f0..196f132e043 100644 --- a/chromium/components/strings/components_strings_tr.xtb +++ b/chromium/components/strings/components_strings_tr.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="tr"> -<translation id="1001338328714563407">Cihazınızın ve hesabınızın yöneticisi olarak, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Şimdi Değil</translation> <translation id="1010200102790553230">Sayfayı daha sonra yükle</translation> <translation id="1015730422737071372">Diğer ayrıntıları sağlayın</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">Ayarlar sayfasından, bir bağlantı için yapılandırılmış proxy'leri devre dışı bırakabilirsiniz.</translation> <translation id="2955913368246107853">Bulma çubuğunu kapat</translation> <translation id="2969319727213777354">Güvenli bir bağlantı kurmak için saatinizin doğru ayarlanmış olması gerekir. Bunun sebebi, web sitelerinin kendilerini tanımlamak için kullandıkları sertifikaların sadece belli süreler için geçerli olmasıdır. Cihazınızın saati yanlış olduğundan, Google Chrome bu sertifikaları doğrulayamıyor.</translation> -<translation id="2970515157925768593">Cihaz ve hesap kurulumunuzu uzaktan değiştirebilir.</translation> <translation id="2972581237482394796">&Yinele</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, şu anda seçili. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Verileri Temizle</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">Kaydedilen kopyayı göster</translation> <translation id="3008447029300691911"><ph name="CREDIT_CARD" /> numaralı kartın CVC kodunu girin. Onayladığınızda kart ayrıntılarınız bu siteyle paylaşılacaktır.</translation> <translation id="3010559122411665027">Liste girişi "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Bu cihazın yöneticisi olarak, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Otomatik olarak engellendi</translation> <translation id="3023071826883856138">You4 (Zarf)</translation> <translation id="3024663005179499861">Yanlış politika türü</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">Çevrimiçi olduğunda indir</translation> <translation id="3293642807462928945"><ph name="POLICY_NAME" /> politikası ile ilgili daha fazla bilgi edinin</translation> <translation id="3303855915957856445">Arama sonucu bulunamadı</translation> -<translation id="3311730110465560799">Cihaz kurulumunuzu uzaktan değiştirebilir.</translation> <translation id="3320021301628644560">Fatura adresi ekle</translation> <translation id="3324983252691184275">Kızıl</translation> <translation id="3338095232262050444">Güvenli</translation> @@ -526,7 +522,6 @@ <translation id="3761718714832595332">Durumu gizle</translation> <translation id="3765032636089507299">Güvenli Tarama sayfası yapım aşamasında.</translation> <translation id="3778403066972421603">Bu kartı Google Hesabınıza ve bu cihaza kaydetmek istiyor musunuz?</translation> -<translation id="3779973883630527594">Bu hesabı yöneten şirket, okul veya kuruluş:</translation> <translation id="3781428340399460090">Canlı Pembe</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Son kullanma tarihi: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -726,7 +721,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> web sitesinin mesajı</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Sonuç yok</translation> -<translation id="4945672369594656571">Cihaz ve hesap verilerinizin nasıl kullanılacağını denetler. Google, cihaz ve hesap verilerinizi özel olarak cihazınızın ve hesabınızın yöneticisinin talimatlarına göre ve sadece cihaz ve hesap yöneticinizin belirttiği amaçlarla işler.</translation> <translation id="4950898438188848926">Sekme değiştirme düğmesi, açık sekmeye geçmek için enter tuşuna basın, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">İşlemler</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -740,7 +734,6 @@ <translation id="5017554619425969104">Kopyalanan metin</translation> <translation id="5018422839182700155">Bu sayfa açılamıyor</translation> <translation id="5019198164206649151">Yedekleme deposu kötü durumda</translation> -<translation id="5020154601324912079">Cihaz verilerinizin nasıl kullanılacağını denetler. Google, cihaz verilerinizi özel olarak cihaz yöneticinizin talimatları doğrultusunda ve sadece cihaz yöneticinizin belirttiği amaçlarla işler.</translation> <translation id="5023310440958281426">Yöneticinizin politikalarını inceleyin.</translation> <translation id="5029568752722684782">Kopyayı temizle</translation> <translation id="503069730517007720">"<ph name="SOFTWARE_NAME" />" için bir kök sertifika gerekli, ancak yüklenmemiş. BT yöneticiniz bu sorunu çözmek için "<ph name="SOFTWARE_NAME" />" ile ilgili yapılandırma talimatlarına bakmalıdır. <ph name="FURTHER_EXPLANATION" /></translation> @@ -898,7 +891,6 @@ <translation id="5838278095973806738">Bu sitede hiçbir hassas bilginizi (örneğin şifrelerinizi veya kredi kartı bilgilerinizi) girmemelisiniz. Aksi takdirde bu bilgiler saldırganlar tarafından çalınabilir.</translation> <translation id="5860033963881614850">Kapalı</translation> <translation id="5863847714970149516">Gireceğiniz sayfa sizden para almaya çalışabilir</translation> -<translation id="5865951947699094510">Hesap kurulumunuzu uzaktan değiştirebilir.</translation> <translation id="5866257070973731571">Telefon Numarası Ekleyin</translation> <translation id="5869405914158311789">Bu siteye ulaşılamıyor</translation> <translation id="5869522115854928033">Kayıtlı şifreler</translation> @@ -1169,7 +1161,6 @@ Ek ayrıntılar: <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Şifreleri Yönet…</translation> <translation id="7419106976560586862">Profil Yolu</translation> -<translation id="7424427397225027541">Hesap verilerinizin nasıl kullanılacağını denetler. Google, hesap verilerinizi özel olarak hesap yöneticinizin talimatları doğrultusunda ve sadece hesap yöneticinizin belirttiği amaçlarla işler.</translation> <translation id="7437289804838430631">İletişim Bilgisi Ekle</translation> <translation id="7440140511386898319">Çevrimdışıyken keşfetme</translation> <translation id="7441627299479586546">Politika konusu yanlış</translation> @@ -1255,7 +1246,6 @@ Ek ayrıntılar: <translation id="780301667611848630">Hayır, teşekkürler</translation> <translation id="7805768142964895445">Durum</translation> <translation id="7806344367022510803">Chrome'da Arama Motoru ayarlarını değiştirin</translation> -<translation id="7810209002420871817"><ph name="ACCOUNT_DOMAIN" /> hesabınızın yöneticisi olarak:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Form önerisi Chrome'dan kaldırılsın mı?</translation> <translation id="7815407501681723534">"<ph name="SEARCH_STRING" />" için <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> bulundu.</translation> diff --git a/chromium/components/strings/components_strings_uk.xtb b/chromium/components/strings/components_strings_uk.xtb index f3dafebdc00..c838abf9383 100644 --- a/chromium/components/strings/components_strings_uk.xtb +++ b/chromium/components/strings/components_strings_uk.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="uk"> -<translation id="1001338328714563407">Як адміністратор пристрою й облікового запису, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Не зараз</translation> <translation id="1010200102790553230">Завантажити сторінку пізніше</translation> <translation id="1015730422737071372">Надати додаткову інформацію</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">Усі проксі-сервери, налаштовані для з’єднання, можна вимкнути на сторінці налаштувань.</translation> <translation id="2955913368246107853">Закрити панель пошуку</translation> <translation id="2969319727213777354">Щоб установити безпечне з’єднання, потрібно правильно налаштувати час, оскільки сертифікати, які підтверджують справжність веб-сайтів, дійсні лише протягом певного періоду. На вашому пристрої неправильно налаштовано час, тому Chrome не може перевірити сертифікати.</translation> -<translation id="2970515157925768593">може віддалено змінювати налаштування пристрою й облікового запису</translation> <translation id="2972581237482394796">&Повторити</translation> <translation id="2977665033722899841">Зараз вибрано: <ph name="ROW_NAME" /> (<ph name="ROW_CONTENT" />)</translation> <translation id="2982481275546140226">Очистити дані</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">Показати збережену копію</translation> <translation id="3008447029300691911">Введіть код CVC картки <ph name="CREDIT_CARD" />. Щойно ви підтвердите дані картки, цей сайт отримає доступ до них.</translation> <translation id="3010559122411665027">Елемент списку "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Як адміністратор цього пристрою, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Блокується автоматично</translation> <translation id="3023071826883856138">You4 (конверт)</translation> <translation id="3024663005179499861">Неправильний тип правила</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">Завантажити після відновлення інтернет-з’єднання</translation> <translation id="3293642807462928945">Докладніше про правило <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Немає результатів</translation> -<translation id="3311730110465560799">може віддалено змінювати налаштування пристрою.</translation> <translation id="3320021301628644560">Додати платіжну адресу</translation> <translation id="3324983252691184275">Малиновий</translation> <translation id="3338095232262050444">Надійне</translation> @@ -526,7 +522,6 @@ <translation id="3761718714832595332">Сховати статус</translation> <translation id="3765032636089507299">Сторінка "Безпечний перегляд" розробляється.</translation> <translation id="3778403066972421603">Зберегти дані картки у вашому обліковому записі Google і на цьому пристрої?</translation> -<translation id="3779973883630527594">Компанія, навчальний заклад або організація, що керує цим обліковим записом:</translation> <translation id="3781428340399460090">Яскраво-рожевий</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Діє до <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -726,7 +721,6 @@ <translation id="4926159001844873046">Повідомлення із сайту <ph name="SITE" /></translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" /> з <ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Не знайдено жодного результату</translation> -<translation id="4945672369594656571">Керує обробкою даних пристрою й облікового запису. Google обробляє дані пристрою й облікового запису виключно під керівництвом їх адміністратора та лише для вказаних ним цілей.</translation> <translation id="4950898438188848926">Кнопка перемикання вкладки: натисніть Enter, щоб перейти на відкриту вкладку, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Дії</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -740,7 +734,6 @@ <translation id="5017554619425969104">Скопійований текст</translation> <translation id="5018422839182700155">Не вдається відкрити цю сторінку</translation> <translation id="5019198164206649151">Резервний носій пошкоджено</translation> -<translation id="5020154601324912079">Керує обробкою даних пристрою. Google обробляє дані пристрою виключно під керівництвом його адміністратора та лише для вказаних ним цілей.</translation> <translation id="5023310440958281426">Перегляньте правила свого адміністратора</translation> <translation id="5029568752722684782">Видалити копію</translation> <translation id="503069730517007720">Для програмного забезпечення <ph name="SOFTWARE_NAME" /> потрібен кореневий сертифікат, однак його не встановлено. Вашому IT-адміністратору потрібно переглянути вказівки з налаштування <ph name="SOFTWARE_NAME" />, щоб вирішити цю проблему. <ph name="FURTHER_EXPLANATION" /></translation> @@ -898,7 +891,6 @@ <translation id="5838278095973806738">Не вводьте конфіденційну інформацію на цьому сайті (як-от паролі й дані кредитних карток). Зловмисники можуть викрасти її.</translation> <translation id="5860033963881614850">Вимк.</translation> <translation id="5863847714970149516">Наступна сторінка може спробувати стягнути плату</translation> -<translation id="5865951947699094510">може віддалено змінювати налаштування облікового запису</translation> <translation id="5866257070973731571">Додайте номер телефону</translation> <translation id="5869405914158311789">Немає зв’язку із сайтом</translation> <translation id="5869522115854928033">Збережені паролі</translation> @@ -1169,7 +1161,6 @@ <translation id="741007362987735528">Широкий формат</translation> <translation id="7416351320495623771">Керувати паролями…</translation> <translation id="7419106976560586862">Шлях до профілю</translation> -<translation id="7424427397225027541">Керує обробкою даних облікового запису. Google обробляє дані облікового запису виключно під керівництвом його адміністратора та лише для вказаних ним цілей.</translation> <translation id="7437289804838430631">Додати контактну інформацію</translation> <translation id="7440140511386898319">Перегляд у режимі офлайн</translation> <translation id="7441627299479586546">Неправильна тема правила</translation> @@ -1255,7 +1246,6 @@ <translation id="780301667611848630">Ні, дякую</translation> <translation id="7805768142964895445">Статус</translation> <translation id="7806344367022510803">Змініть налаштування пошукової системи в Chrome</translation> -<translation id="7810209002420871817">Як адміністратор облікового запису, <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Видалити дані для автозаповнення форм із Chrome?</translation> <translation id="7815407501681723534">Знайдено результатів за запитом "<ph name="SEARCH_STRING" />": <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /></translation> diff --git a/chromium/components/strings/components_strings_vi.xtb b/chromium/components/strings/components_strings_vi.xtb index 9bc837655c9..efac20d968a 100644 --- a/chromium/components/strings/components_strings_vi.xtb +++ b/chromium/components/strings/components_strings_vi.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="vi"> -<translation id="1001338328714563407">Với tư cách là người quản lý thiết bị và tài khoản của bạn, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">Không phải Bây giờ</translation> <translation id="1010200102790553230">Tải trang vào lúc khác</translation> <translation id="1015730422737071372">Cung cấp chi tiết bổ sung</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">Bạn có thể tắt mọi proxy được định cấu hình cho kết nối từ trang cài đặt.</translation> <translation id="2955913368246107853">Đóng thanh tìm</translation> <translation id="2969319727213777354">Để thiết lập kết nối an toàn, bạn cần đặt thời gian đúng cho đồng hồ. Nguyên nhân là do chứng chỉ mà các trang web dùng để tự nhận dạng chỉ có hiệu lực trong khoảng thời gian cụ thể. Vì đồng hồ trên thiết bị của bạn không đúng nên Chrome không thể xác minh các chứng chỉ này.</translation> -<translation id="2970515157925768593">Có thể thay đổi từ xa quá trình thiết lập tài khoản và thiết bị của bạn.</translation> <translation id="2972581237482394796">&Làm lại</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, hiện đã chọn. <ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">Xóa dữ liệu</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">Hiển thị bản sao đã lưu</translation> <translation id="3008447029300691911">Nhập CVC cho <ph name="CREDIT_CARD" />. Sau khi bạn xác nhận, chi tiết thẻ của bạn sẽ được chia sẻ với trang web này.</translation> <translation id="3010559122411665027">Mục nhập danh sách "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> -<translation id="3014389611820813634">Với tư cách là người quản lý thiết bị này, <ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">Tự động bị chặn</translation> <translation id="3023071826883856138">You4 (Phong bì)</translation> <translation id="3024663005179499861">Loại chính sách sai</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">Tải xuống khi trực tuyến</translation> <translation id="3293642807462928945">Hãy tìm hiểu thêm về chính sách <ph name="POLICY_NAME" /></translation> <translation id="3303855915957856445">Không tìm thấy kết quả tìm kiếm nào</translation> -<translation id="3311730110465560799">Có thể thay đổi từ xa quá trình thiết lập thiết bị.</translation> <translation id="3320021301628644560">Thêm địa chỉ thanh toán</translation> <translation id="3324983252691184275">Đỏ thẫm</translation> <translation id="3338095232262050444">Bảo mật</translation> @@ -526,7 +522,6 @@ <translation id="3761718714832595332">Ẩn trạng thái</translation> <translation id="3765032636089507299">Trang Duyệt web an toàn đang được xây dựng.</translation> <translation id="3778403066972421603">Bạn có muốn lưu thẻ này vào Tài khoản Google của bạn và trên thiết bị này không?</translation> -<translation id="3779973883630527594">Công ty, trường học hoặc tổ chức quản lý tài khoản này:</translation> <translation id="3781428340399460090">Hồng đậm</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">Ngày hết hạn <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -726,7 +721,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> cho biết</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">Không tìm thấy kết quả nào</translation> -<translation id="4945672369594656571">Kiểm soát cách Google xử lý dữ liệu tài khoản và thiết bị của bạn. Google xử lý dữ liệu tài khoản và thiết bị của bạn hoàn toàn theo chỉ dẫn của người quản lý tài khoản và thiết bị của bạn, và chỉ cho các mục đích mà người quản lý tài khoản và thiết bị của bạn chỉ định.</translation> <translation id="4950898438188848926">Nút chuyển đổi tab, nhấn phím Enter để chuyển sang tab đang mở, <ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">Tác vụ</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -740,7 +734,6 @@ <translation id="5017554619425969104">Văn bản bạn đã sao chép</translation> <translation id="5018422839182700155">Không thể mở trang này</translation> <translation id="5019198164206649151">Không thể lưu trữ do chương trình phụ trợ ở trạng thái xấu</translation> -<translation id="5020154601324912079">Kiểm soát cách Google xử lý dữ liệu thiết bị của bạn. Google xử lý dữ liệu thiết bị của bạn hoàn toàn theo chỉ dẫn của người quản lý thiết bị và chỉ cho các mục đích mà người quản lý thiết bị chỉ định.</translation> <translation id="5023310440958281426">Kiểm tra chính sách của quản trị viên của bạn</translation> <translation id="5029568752722684782">Xóa bản sao</translation> <translation id="503069730517007720">Cần có chứng chỉ gốc cho "<ph name="SOFTWARE_NAME" />" nhưng chứng chỉ này chưa được cài đặt. Hãy yêu cầu quản trị viên CNTT của bạn xem hướng dẫn cấu hình cho "<ph name="SOFTWARE_NAME" />" để khắc phục sự cố này. <ph name="FURTHER_EXPLANATION" /></translation> @@ -898,7 +891,6 @@ <translation id="5838278095973806738">Bạn không nên nhập bất kỳ thông tin nhạy cảm nào trên trang web này (ví dụ: mật khẩu hoặc thẻ tín dụng), vì những kẻ tấn công có thể đánh cắp thông tin đó.</translation> <translation id="5860033963881614850">Tắt</translation> <translation id="5863847714970149516">Trang phía trước có thể tìm cách tính phí bạn</translation> -<translation id="5865951947699094510">Có thể thay đổi từ xa quá trình thiết lập tài khoản của bạn.</translation> <translation id="5866257070973731571">Thêm số điện thoại</translation> <translation id="5869405914158311789">Không thể truy cập trang web này</translation> <translation id="5869522115854928033">Mật khẩu đã lưu</translation> @@ -1169,7 +1161,6 @@ Thông tin chi tiết bổ sung: <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">Quản lý mật khẩu…</translation> <translation id="7419106976560586862">Đường dẫn cấu hình</translation> -<translation id="7424427397225027541">Kiểm soát cách Google xử lý dữ liệu tài khoản của bạn. Google xử lý dữ liệu tài khoản của bạn hoàn toàn theo chỉ dẫn của người quản lý tài khoản của bạn và chỉ cho các mục đích mà người quản lý tài khoản của bạn chỉ định.</translation> <translation id="7437289804838430631">Thêm thông tin liên hệ</translation> <translation id="7440140511386898319">Khám phá khi không có mạng</translation> <translation id="7441627299479586546">Chủ đề chính sách sai</translation> @@ -1255,7 +1246,6 @@ Thông tin chi tiết bổ sung: <translation id="780301667611848630">Không, cảm ơn</translation> <translation id="7805768142964895445">Trạng thái</translation> <translation id="7806344367022510803">Thay đổi tùy chọn cài đặt công cụ tìm kiếm trong Chrome</translation> -<translation id="7810209002420871817">Với tư cách là người quản lý tài khoản của bạn, <ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">Xóa đề xuất biểu mẫu khỏi Chrome?</translation> <translation id="7815407501681723534">Đã tìm thấy <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> cho '<ph name="SEARCH_STRING" />'</translation> diff --git a/chromium/components/strings/components_strings_zh-CN.xtb b/chromium/components/strings/components_strings_zh-CN.xtb index 033ca88d348..305f899de17 100644 --- a/chromium/components/strings/components_strings_zh-CN.xtb +++ b/chromium/components/strings/components_strings_zh-CN.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="zh-CN"> -<translation id="1001338328714563407">作为您的设备和帐号的管理器,<ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="1008557486741366299">以后再说</translation> <translation id="1010200102790553230">保存网页以供日后加载</translation> <translation id="1015730422737071372">提供其他详细信息</translation> @@ -365,7 +364,6 @@ <translation id="2948083400971632585">您可以在设置页面中停用任何针对某个连接配置的代理。</translation> <translation id="2955913368246107853">关闭查找栏</translation> <translation id="2969319727213777354">要建立安全连接,您的时钟设置必须正确。这是因为,网站用于证明身份的证书仅在特定时间段有效。由于您设备的时钟不正确,因此 Google Chrome 无法验证这些证书。</translation> -<translation id="2970515157925768593">可以远程更改您的设备和帐号设置。</translation> <translation id="2972581237482394796">重做(&R)</translation> <translation id="2977665033722899841">目前已选择“<ph name="ROW_NAME" />”。<ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">清除数据</translation> @@ -377,7 +375,6 @@ <translation id="3005723025932146533">显示已保存的版本</translation> <translation id="3008447029300691911">输入“<ph name="CREDIT_CARD" />”的银行卡验证码 (CVC)。在您确认后,您的信用卡详情将与此网站共享。</translation> <translation id="3010559122411665027">列表条目“<ph name="ENTRY_INDEX" />”:<ph name="ERROR" /></translation> -<translation id="3014389611820813634">作为此设备的管理器,<ph name="ENROLLMENT_DOMAIN" />:</translation> <translation id="301521992641321250">已被自动禁止</translation> <translation id="3023071826883856138">You4 (Envelope)</translation> <translation id="3024663005179499861">策略类型有误</translation> @@ -421,7 +418,6 @@ <translation id="3287510313208355388">联网时下载</translation> <translation id="3293642807462928945">详细了解“<ph name="POLICY_NAME" />”政策</translation> <translation id="3303855915957856445">未找到任何搜索结果</translation> -<translation id="3311730110465560799">可以远程更改您的设备设置。</translation> <translation id="3320021301628644560">添加账单邮寄地址</translation> <translation id="3324983252691184275">深红色</translation> <translation id="3338095232262050444">安全</translation> @@ -514,7 +510,6 @@ <translation id="3761718714832595332">隐藏状态</translation> <translation id="3765032636089507299">安全浏览页面正在构建中。</translation> <translation id="3778403066972421603">要将此卡的信息保存到您的 Google 帐号中和此设备上吗?</translation> -<translation id="3779973883630527594">管理此帐号的公司、学校或组织:</translation> <translation id="3781428340399460090">艳粉色</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">失效日期:<ph name="EXPIRATION_YEAR" /> 年 <ph name="EXPIRATION_MONTH" /> 月</translation> @@ -714,7 +709,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> 显示</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">找不到结果</translation> -<translation id="4945672369594656571">控制设备数据和帐号数据的处理方式。Google 仅会遵照设备管理器和帐号管理器的指示处理设备数据和帐号数据,并且仅会将这些数据用于设备管理器和帐号管理器指定的用途。</translation> <translation id="4950898438188848926">标签页切换按钮,按 Enter 键可切换到打开的标签页,<ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">操作</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -728,7 +722,6 @@ <translation id="5017554619425969104">您复制的文字</translation> <translation id="5018422839182700155">无法打开此网页</translation> <translation id="5019198164206649151">后备存储状态不佳</translation> -<translation id="5020154601324912079">控制设备数据的处理方式。Google 仅会遵照设备管理器的指示处理设备数据,并且仅会将这些数据用于设备管理器指定的用途。</translation> <translation id="5023310440958281426">请查看管理员制定的政策</translation> <translation id="5029568752722684782">清除副本</translation> <translation id="503069730517007720">必须为“<ph name="SOFTWARE_NAME" />”安装根证书,但您尚未安装该证书。您的 IT 管理员应仔细查看“<ph name="SOFTWARE_NAME" />”的配置说明,以解决此问题。<ph name="FURTHER_EXPLANATION" /></translation> @@ -886,7 +879,6 @@ <translation id="5838278095973806738">请勿在此网站上输入任何敏感信息(例如密码或信用卡信息),因为攻击者可能会盗取这些信息。</translation> <translation id="5860033963881614850">关闭</translation> <translation id="5863847714970149516">即将进入的页面可能会向您收取费用</translation> -<translation id="5865951947699094510">可以远程更改您的帐号设置。</translation> <translation id="5866257070973731571">添加电话号码</translation> <translation id="5869405914158311789">无法访问此网站</translation> <translation id="5869522115854928033">已保存的密码</translation> @@ -1153,7 +1145,6 @@ <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">管理密码…</translation> <translation id="7419106976560586862">个人资料路径</translation> -<translation id="7424427397225027541">控制帐号数据的处理方式。Google 仅会遵照帐号管理器的指示处理帐号数据,并且仅会将这些数据用于帐号管理器指定的用途。</translation> <translation id="7437289804838430631">添加联系信息</translation> <translation id="7440140511386898319">离线浏览</translation> <translation id="7441627299479586546">策略主题有误</translation> @@ -1239,7 +1230,6 @@ <translation id="780301667611848630">不用了,谢谢</translation> <translation id="7805768142964895445">状态</translation> <translation id="7806344367022510803">在 Chrome 中更改搜索引擎设置</translation> -<translation id="7810209002420871817">作为您帐号的管理员,<ph name="ACCOUNT_DOMAIN" />:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">从 Chrome 中移除表单建议?</translation> <translation id="7815407501681723534">找到了 <ph name="NUMBER_OF_RESULTS" /> 个与“<ph name="SEARCH_STRING" />”相符的<ph name="SEARCH_RESULTS" /></translation> diff --git a/chromium/components/strings/components_strings_zh-TW.xtb b/chromium/components/strings/components_strings_zh-TW.xtb index 82f0354d2ff..dd72dd3ab01 100644 --- a/chromium/components/strings/components_strings_zh-TW.xtb +++ b/chromium/components/strings/components_strings_zh-TW.xtb @@ -1,7 +1,6 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="zh-TW"> -<translation id="1001338328714563407">你的裝置和帳戶管理員 <ph name="ENROLLMENT_DOMAIN" /> 可執行下列操作:</translation> <translation id="1008557486741366299">現在不要</translation> <translation id="1010200102790553230">稍後再載入頁面</translation> <translation id="1015730422737071372">提供其他詳細資訊</translation> @@ -373,7 +372,6 @@ <translation id="2948083400971632585">你可以在設定頁面停用任何為連線設置的 Proxy。</translation> <translation id="2955913368246107853">關閉搜尋列</translation> <translation id="2969319727213777354">您必須正確設定時鐘,才能建立安全連線。這是因為網站驗證身分時所使用的憑證僅於特定一段時間內有效。由於您裝置的時鐘不正確,因此 Google Chrome 無法驗證這些憑證。</translation> -<translation id="2970515157925768593">可以在遠端變更你的裝置和帳戶設定。</translation> <translation id="2972581237482394796">重做(&R)</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />,目前已選取。<ph name="ROW_CONTENT" /></translation> <translation id="2982481275546140226">清除資料</translation> @@ -385,7 +383,6 @@ <translation id="3005723025932146533">顯示儲存的複本</translation> <translation id="3008447029300691911">請輸入 <ph name="CREDIT_CARD" /> 的信用卡安全碼。完成驗證後,這個網站就會取得您的信用卡詳細資訊。</translation> <translation id="3010559122411665027">清單項目「<ph name="ENTRY_INDEX" />」:<ph name="ERROR" /></translation> -<translation id="3014389611820813634">這個裝置的管理員 <ph name="ENROLLMENT_DOMAIN" /> 可執行下列操作:</translation> <translation id="301521992641321250">已自動封鎖</translation> <translation id="3023071826883856138">You4 (信封)</translation> <translation id="3024663005179499861">政策類型有誤</translation> @@ -431,7 +428,6 @@ <translation id="3287510313208355388">等到可連線時再下載網頁內容</translation> <translation id="3293642807462928945">進一步瞭解 <ph name="POLICY_NAME" /> 政策</translation> <translation id="3303855915957856445">找不到相符的搜尋結果</translation> -<translation id="3311730110465560799">你可以遠端變更裝置設定。</translation> <translation id="3320021301628644560">新增帳單地址</translation> <translation id="3324983252691184275">深紅色</translation> <translation id="3338095232262050444">安全</translation> @@ -526,7 +522,6 @@ <translation id="3761718714832595332">隱藏狀態</translation> <translation id="3765032636089507299">安全瀏覽網頁正在建構中。</translation> <translation id="3778403066972421603">你要將這張信用卡的資訊儲存到你在這個裝置上的 Google 帳戶嗎?</translation> -<translation id="3779973883630527594">管理這個帳戶的公司、學校或機構:</translation> <translation id="3781428340399460090">亮粉色</translation> <translation id="3783418713923659662">Mastercard</translation> <translation id="3787705759683870569">到期日:<ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> @@ -726,7 +721,6 @@ <translation id="4926159001844873046"><ph name="SITE" /> 顯示</translation> <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4943872375798546930">沒有結果</translation> -<translation id="4945672369594656571">控管 Google 處理你裝置和帳戶資料的方式。Google 只會依照裝置和帳戶管理員的指示處理你的裝置和帳戶資料,且只會用於裝置和帳戶管理員指定的用途。</translation> <translation id="4950898438188848926">分頁切換按鈕,按下 Enter 鍵即可切換至開啟的分頁:<ph name="TAB_SWITCH_FOCUSED_FRIENDLY_MATCH_TEXT" /></translation> <translation id="495170559598752135">動作</translation> <translation id="4955242332710481440">A5-Extra</translation> @@ -740,7 +734,6 @@ <translation id="5017554619425969104">你複製的文字</translation> <translation id="5018422839182700155">無法開啟這個網頁</translation> <translation id="5019198164206649151">備份儲存狀態不佳</translation> -<translation id="5020154601324912079">控管 Google 如何處理你的裝置資料。Google 只會依照裝置管理員的指示處理你的裝置資料,且只會用於裝置管理員指定的用途。</translation> <translation id="5023310440958281426">請查看你的管理員政策</translation> <translation id="5029568752722684782">清除複本</translation> <translation id="503069730517007720">未安裝必要的「<ph name="SOFTWARE_NAME" />」根憑證。IT 管理員必須按照「<ph name="SOFTWARE_NAME" />」的設定說明修正這個問題。<ph name="FURTHER_EXPLANATION" /></translation> @@ -898,7 +891,6 @@ <translation id="5838278095973806738">請勿在這個網站上輸入任何機密資訊 (例如密碼或信用卡號碼),以免遭到攻擊者竊取。</translation> <translation id="5860033963881614850">關閉</translation> <translation id="5863847714970149516">你要瀏覽的網頁可能會向你收取費用</translation> -<translation id="5865951947699094510">可以在遠端變更你的帳戶設定。</translation> <translation id="5866257070973731571">新增電話號碼</translation> <translation id="5869405914158311789">無法連上這個網站</translation> <translation id="5869522115854928033">已儲存的密碼</translation> @@ -1169,7 +1161,6 @@ <translation id="741007362987735528">Wide-Format</translation> <translation id="7416351320495623771">管理密碼…</translation> <translation id="7419106976560586862">設定檔路徑</translation> -<translation id="7424427397225027541">控管 Google 處理你帳戶資料的方式。Google 只會依照帳戶管理員的指示處理你的帳戶資料,且只會用於帳戶管理員指定的用途。</translation> <translation id="7437289804838430631">新增聯絡資訊</translation> <translation id="7440140511386898319">探索可供離線檢視的內容</translation> <translation id="7441627299479586546">政策主體有誤</translation> @@ -1255,7 +1246,6 @@ <translation id="780301667611848630">不用了,謝謝</translation> <translation id="7805768142964895445">狀態</translation> <translation id="7806344367022510803">在 Chrome 中變更搜尋引擎設定</translation> -<translation id="7810209002420871817">你的帳戶管理員 <ph name="ACCOUNT_DOMAIN" /> 可進行下列動作:</translation> <translation id="7812922009395017822">Mir</translation> <translation id="7813600968533626083">要從 Chrome 中移除建議嗎?</translation> <translation id="7815407501681723534">找到 <ph name="NUMBER_OF_RESULTS" /> 個與「<ph name="SEARCH_STRING" />」相符的<ph name="SEARCH_RESULTS" /></translation> diff --git a/chromium/components/viz/service/display/overlay_strategy_single_on_top.cc b/chromium/components/viz/service/display/overlay_strategy_single_on_top.cc index 937350aa3dd..03e711880c0 100644 --- a/chromium/components/viz/service/display/overlay_strategy_single_on_top.cc +++ b/chromium/components/viz/service/display/overlay_strategy_single_on_top.cc @@ -35,15 +35,6 @@ bool OverlayStrategySingleOnTop::Attempt( if (OverlayCandidate::FromDrawQuad(resource_provider, output_color_matrix, *it, &candidate) && !OverlayCandidate::IsOccluded(candidate, quad_list->cbegin(), it)) { - // If the candidate has been promoted previously and has not changed - // (resource ID is the same) for 3 frames, do not use it as Overlay as - // flattening it to the main fb will be more power efficient when the - // contents don't change. - if (candidate.resource_id == previous_frame_resource_id_ && - ++same_resource_id_frames_count_ > - kMaxFrameCandidateWithSameResourceId) { - continue; - } if (candidate.display_rect.size().GetArea() > best_candidate.display_rect.size().GetArea()) { best_candidate = candidate; @@ -54,17 +45,10 @@ bool OverlayStrategySingleOnTop::Attempt( if (best_quad_it == quad_list->end()) return false; - if (TryOverlay(quad_list, candidate_list, best_candidate, best_quad_it)) { - if (previous_frame_resource_id_ != best_candidate.resource_id) { - previous_frame_resource_id_ = best_candidate.resource_id; - same_resource_id_frames_count_ = 1; - } + if (TryOverlay(quad_list, candidate_list, best_candidate, best_quad_it)) return true; - } else { - previous_frame_resource_id_ = kInvalidResourceId; - same_resource_id_frames_count_ = 0; - return false; - } + + return false; } bool OverlayStrategySingleOnTop::TryOverlay( diff --git a/chromium/components/viz/service/display/overlay_strategy_single_on_top.h b/chromium/components/viz/service/display/overlay_strategy_single_on_top.h index a7ad251e4d1..dd9f28e12d3 100644 --- a/chromium/components/viz/service/display/overlay_strategy_single_on_top.h +++ b/chromium/components/viz/service/display/overlay_strategy_single_on_top.h @@ -31,8 +31,6 @@ class VIZ_SERVICE_EXPORT OverlayStrategySingleOnTop OverlayStrategy GetUMAEnum() const override; private: - static constexpr size_t kMaxFrameCandidateWithSameResourceId = 3; - bool TryOverlay(QuadList* quad_list, OverlayCandidateList* candidate_list, const OverlayCandidate& candidate, @@ -40,9 +38,6 @@ class VIZ_SERVICE_EXPORT OverlayStrategySingleOnTop OverlayCandidateValidator* capability_checker_; // Weak. - ResourceId previous_frame_resource_id_ = kInvalidResourceId; - size_t same_resource_id_frames_count_ = 0; - DISALLOW_COPY_AND_ASSIGN(OverlayStrategySingleOnTop); }; diff --git a/chromium/components/viz/service/display/overlay_unittest.cc b/chromium/components/viz/service/display/overlay_unittest.cc index dbdd22a7647..5d307e68a5a 100644 --- a/chromium/components/viz/service/display/overlay_unittest.cc +++ b/chromium/components/viz/service/display/overlay_unittest.cc @@ -1564,70 +1564,6 @@ TEST_F(SingleOverlayOnTopTest, RejectTransparentColorOnTopWithoutBlending) { EXPECT_EQ(0U, candidate_list.size()); } -TEST_F(SingleOverlayOnTopTest, DoNotPromoteIfContentsDontChange) { - // Resource ID for the repeated quads. Value should be equivalent to - // OverlayStrategySingleOnTop::kMaxFrameCandidateWithSameResourceId. - constexpr size_t kFramesSkippedBeforeNotPromoting = 3; - ResourceId previous_resource_id; - - for (size_t i = 0; i < 3 + kFramesSkippedBeforeNotPromoting; ++i) { - std::unique_ptr<RenderPass> pass = CreateRenderPass(); - RenderPass* main_pass = pass.get(); - - ResourceId resource_id; - if (i == 0 || i == 1) { - // Create a unique resource only for the first 2 frames. - resource_id = CreateResource( - resource_provider_.get(), child_resource_provider_.get(), - child_provider_.get(), pass->output_rect.size(), - true /*is_overlay_candidate*/); - previous_resource_id = resource_id; - } else { - // Starting the 3rd frame, they should have the same resource ID. - resource_id = previous_resource_id; - } - - // Create a quad with the resource ID selected above. - TextureDrawQuad* original_quad = - main_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); - float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; - original_quad->SetNew( - pass->shared_quad_state_list.back(), pass->output_rect, - pass->output_rect, false /*needs_blending*/, resource_id, - false /*premultiplied_alpha*/, kUVTopLeft, kUVBottomRight, - SK_ColorTRANSPARENT, vertex_opacity, false /*flipped*/, - false /*nearest_neighbor*/, false /*secure_output_only*/, - ui::ProtectedVideoType::kClear); - original_quad->set_resource_size_in_pixels(pass->output_rect.size()); - - // Add something behind it. - CreateFullscreenOpaqueQuad(resource_provider_.get(), - pass->shared_quad_state_list.back(), main_pass); - - // Check for potential candidates. - OverlayCandidateList candidate_list; - OverlayProcessor::FilterOperationsMap render_pass_filters; - OverlayProcessor::FilterOperationsMap render_pass_backdrop_filters; - RenderPassList pass_list; - pass_list.push_back(std::move(pass)); - overlay_processor_->ProcessForOverlays( - resource_provider_.get(), &pass_list, GetIdentityColorMatrix(), - render_pass_filters, render_pass_backdrop_filters, &candidate_list, - nullptr, nullptr, &damage_rect_, &content_bounds_); - - if (i <= kFramesSkippedBeforeNotPromoting) { - EXPECT_EQ(1U, candidate_list.size()); - // Check that the right resource id got extracted. - EXPECT_EQ(resource_id, candidate_list.back().resource_id); - // Check that the quad is gone. - EXPECT_EQ(1U, main_pass->quad_list.size()); - } else { - // Check nothing has been promoted. - EXPECT_EQ(2U, main_pass->quad_list.size()); - } - } -} - TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { output_surface_->GetOverlayCandidateValidator()->AddExpectedRect( gfx::RectF(kOverlayBottomRightRect)); diff --git a/chromium/content/app/strings/content_strings.grd b/chromium/content/app/strings/content_strings.grd index 36c2864a7cb..438d92fd0b1 100644 --- a/chromium/content/app/strings/content_strings.grd +++ b/chromium/content/app/strings/content_strings.grd @@ -765,6 +765,14 @@ below: more options </message> + <message name="IDS_AX_MEDIA_TOUCHLESS_SEEK_ACTION" desc="Accessibility help description for seek action on touchless device using DPAD."> + left and right to seek + </message> + + <message name="IDS_AX_MEDIA_TOUCHLESS_VOLUME_ACTION" desc="Accessibility help description for volume change action on touchless device using DPAD."> + up and down to change volume + </message> + <message name="IDS_AX_MILLISECOND_FIELD_TEXT" desc="Accessible description of the millisecond field in a date/time control"> Milliseconds </message> diff --git a/chromium/content/app/strings/translations/content_strings_am.xtb b/chromium/content/app/strings/translations/content_strings_am.xtb index 8f94face1da..725bb66c9e0 100644 --- a/chromium/content/app/strings/translations/content_strings_am.xtb +++ b/chromium/content/app/strings/translations/content_strings_am.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">ማህደረ መረጃን አውርድ</translation> <translation id="6981594929165378967">ማስገባት</translation> <translation id="6989848892321993519">እባክዎ ይህን ጽሑፍ ወደ <ph name="MIN_CHARACTERS" /> ወይም ከዚያ በላይ ቁምፊዎች ያራዝሙት (አሁን እየተጠቀሙ ያሉት 1 ቁምፊ ነው)።</translation> +<translation id="7033340931668032222">ድምጽ ለመቀየር ወደ ላይ እና ታች</translation> <translation id="709897737746224366">እባክዎ የተጠየቀውን ቅርጸት ያዛምዱ።</translation> <translation id="7118469954320184356">ምንም መግለጫ የለም።</translation> <translation id="7139483182332611405">መቅድም</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">ሥዕላዊ ምልክት</translation> <translation id="8583702881314752957">የብየና ዝርዝር</translation> <translation id="8597182159515967513">ርዕስ</translation> +<translation id="8603553056539299761">ለመፈለግ ወደ ግራ እና ቀኝ</translation> <translation id="860475260694818407">ማውጫ</translation> <translation id="8613126697340063924">በርቀት መልሶ ማጫወትን ተቆጣጠር</translation> <translation id="862370744433916922">የግርጌ ጽሑፍ</translation> diff --git a/chromium/content/app/strings/translations/content_strings_ar.xtb b/chromium/content/app/strings/translations/content_strings_ar.xtb index 537359c19bd..06de53d2e37 100644 --- a/chromium/content/app/strings/translations/content_strings_ar.xtb +++ b/chromium/content/app/strings/translations/content_strings_ar.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">تنزيل وسائط</translation> <translation id="6981594929165378967">إدراج</translation> <translation id="6989848892321993519">يُرجى إطالة هذا النص إلى <ph name="MIN_CHARACTERS" /> من الحروف أو أكثر (أنت الآن تستخدم حرفًا واحدًا).</translation> +<translation id="7033340931668032222">الضغط على السهم المتجه إلى الأعلى والآخر المتجه إلى الأسفل لتغيير مستوى الصوت</translation> <translation id="709897737746224366">يُرجى مطابقة التنسيق المطلوب.</translation> <translation id="7118469954320184356">لا يتوفر أي وصف.</translation> <translation id="7139483182332611405">تمهيد</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">رمز رسومي</translation> <translation id="8583702881314752957">قائمة تعريف</translation> <translation id="8597182159515967513">العنوان</translation> +<translation id="8603553056539299761">الضغط على السهم الأيمن والأيسر لتنفيذ الإجراء</translation> <translation id="860475260694818407">جدول المحتويات</translation> <translation id="8613126697340063924">التحكم في التشغيل عن بعد</translation> <translation id="862370744433916922">ترجمة مصاحِبة</translation> diff --git a/chromium/content/app/strings/translations/content_strings_bg.xtb b/chromium/content/app/strings/translations/content_strings_bg.xtb index 08b66efa071..a8cdc622ec9 100644 --- a/chromium/content/app/strings/translations/content_strings_bg.xtb +++ b/chromium/content/app/strings/translations/content_strings_bg.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">изтегляне на мултимедията</translation> <translation id="6981594929165378967">вмъкване</translation> <translation id="6989848892321993519">Моля, удължете този текст до поне <ph name="MIN_CHARACTERS" /> знака (понастоящем използвате 1 знак).</translation> +<translation id="7033340931668032222">нагоре и надолу за промяна на силата на звука</translation> <translation id="709897737746224366">Моля, спазвайте изисквания формат.</translation> <translation id="7118469954320184356">Няма описание.</translation> <translation id="7139483182332611405">предисловие</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">графичен символ</translation> <translation id="8583702881314752957">списък с дефиниции</translation> <translation id="8597182159515967513">заглавие</translation> +<translation id="8603553056539299761">наляво и надясно за придвижване</translation> <translation id="860475260694818407">съдържание</translation> <translation id="8613126697340063924">управление на отдалеченото възпроизвеждане</translation> <translation id="862370744433916922">подзаглавие</translation> diff --git a/chromium/content/app/strings/translations/content_strings_bn.xtb b/chromium/content/app/strings/translations/content_strings_bn.xtb index 7746b82ea65..46b6e143138 100644 --- a/chromium/content/app/strings/translations/content_strings_bn.xtb +++ b/chromium/content/app/strings/translations/content_strings_bn.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">মিডিয়া ডাউনলোড করুন</translation> <translation id="6981594929165378967">যোগ করা হচ্ছে</translation> <translation id="6989848892321993519">দয়া করে এই পাঠ্যকে ন্যূনতম <ph name="MIN_CHARACTERS" /> অক্ষরের বা তার বেশি দৈর্ঘ্যের করুন (আপনি বর্তমানে ১টি অক্ষর ব্যবহার করেছেন)।</translation> +<translation id="7033340931668032222">ভলিউম পরিবর্তন করতে উপরে এবং নিচে</translation> <translation id="709897737746224366">দয়া করে অনুরোধ হওয়া বিন্যাসটি মেলান৷</translation> <translation id="7118469954320184356">কোনও বিবরণ নেই।</translation> <translation id="7139483182332611405">মুখবন্ধ</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">গ্রাফিক্স চিহ্ন</translation> <translation id="8583702881314752957">সংজ্ঞার তালিকা</translation> <translation id="8597182159515967513">শিরোনাম</translation> +<translation id="8603553056539299761">খুঁজে পেতে ডানদিকে এবং বাঁদিকে</translation> <translation id="860475260694818407">সূচিপত্র</translation> <translation id="8613126697340063924">রিমোট প্লেব্যাক নিয়ন্ত্রণ করুন</translation> <translation id="862370744433916922">সাবটাইটেল</translation> diff --git a/chromium/content/app/strings/translations/content_strings_ca.xtb b/chromium/content/app/strings/translations/content_strings_ca.xtb index e7f689336bf..e5dd528c318 100644 --- a/chromium/content/app/strings/translations/content_strings_ca.xtb +++ b/chromium/content/app/strings/translations/content_strings_ca.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">baixa els fitxers multimèdia</translation> <translation id="6981594929165378967">inserció</translation> <translation id="6989848892321993519">Allarga aquest text fins a <ph name="MIN_CHARACTERS" /> caràcters o més (ara n'utilitzes 1).</translation> +<translation id="7033340931668032222">amunt i avall per canviar el volum</translation> <translation id="709897737746224366">Feu servir el format sol·licitat.</translation> <translation id="7118469954320184356">No hi ha cap descripció disponible.</translation> <translation id="7139483182332611405">prefaci</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">símbol gràfic</translation> <translation id="8583702881314752957">llista de definicions</translation> <translation id="8597182159515967513">Encapçalament</translation> +<translation id="8603553056539299761">dreta i esquerra per avançar i retrocedir</translation> <translation id="860475260694818407">taula de continguts</translation> <translation id="8613126697340063924">reproducció amb comandament</translation> <translation id="862370744433916922">subtítol</translation> diff --git a/chromium/content/app/strings/translations/content_strings_cs.xtb b/chromium/content/app/strings/translations/content_strings_cs.xtb index 570b6d8b5b0..1f7bba3ec14 100644 --- a/chromium/content/app/strings/translations/content_strings_cs.xtb +++ b/chromium/content/app/strings/translations/content_strings_cs.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">stáhnout média</translation> <translation id="6981594929165378967">vložení</translation> <translation id="6989848892321993519">Prodlužte prosím tento text na <ph name="MIN_CHARACTERS" /> či více znaků. (Aktuálně má 1 znak.)</translation> +<translation id="7033340931668032222">směr nahoru a dolů slouží ke změně hlasitosti</translation> <translation id="709897737746224366">Zadejte hodnotu, která odpovídá požadovanému formátu.</translation> <translation id="7118469954320184356">Popis není k dispozici.</translation> <translation id="7139483182332611405">předmluva</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">grafický symbol</translation> <translation id="8583702881314752957">seznam definic</translation> <translation id="8597182159515967513">záhlaví</translation> +<translation id="8603553056539299761">směr vlevo a vpravo slouží k vyhledávání</translation> <translation id="860475260694818407">obsah</translation> <translation id="8613126697340063924">ovládání vzdáleného přehrávání</translation> <translation id="862370744433916922">titulek</translation> diff --git a/chromium/content/app/strings/translations/content_strings_da.xtb b/chromium/content/app/strings/translations/content_strings_da.xtb index 476afb52b26..899799c349a 100644 --- a/chromium/content/app/strings/translations/content_strings_da.xtb +++ b/chromium/content/app/strings/translations/content_strings_da.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">download medier</translation> <translation id="6981594929165378967">indsættelse</translation> <translation id="6989848892321993519">Forlæng denne tekst til <ph name="MIN_CHARACTERS" /> eller flere tegn (du bruger i øjeblikket ét tegn).</translation> +<translation id="7033340931668032222">op og ned for at justere lydstyrken</translation> <translation id="709897737746224366">Find et match til det anmodede format.</translation> <translation id="7118469954320184356">Der er ingen beskrivelse.</translation> <translation id="7139483182332611405">forord</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">grafiksymbol</translation> <translation id="8583702881314752957">liste over definitioner</translation> <translation id="8597182159515967513">overskrift</translation> +<translation id="8603553056539299761">venstre og højre for at søge</translation> <translation id="860475260694818407">indholdsfortegnelse</translation> <translation id="8613126697340063924">kontrollér afspilning via fjernadgang</translation> <translation id="862370744433916922">undertitel</translation> diff --git a/chromium/content/app/strings/translations/content_strings_de.xtb b/chromium/content/app/strings/translations/content_strings_de.xtb index 5b4d243f075..a4eefe2fd23 100644 --- a/chromium/content/app/strings/translations/content_strings_de.xtb +++ b/chromium/content/app/strings/translations/content_strings_de.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">Medien herunterladen</translation> <translation id="6981594929165378967">Einfügen</translation> <translation id="6989848892321993519">Verlängern Sie diesen Text auf mindestens <ph name="MIN_CHARACTERS" /> Zeichen. Derzeit verwenden Sie 1 Zeichen.</translation> +<translation id="7033340931668032222">oben und unten zum Ändern der Lautstärke</translation> <translation id="709897737746224366">Ihre Eingabe muss mit dem geforderten Format übereinstimmen.</translation> <translation id="7118469954320184356">Keine Beschreibung verfügbar.</translation> <translation id="7139483182332611405">Vorbemerkung</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">Grafiksymbol</translation> <translation id="8583702881314752957">Definitionsliste</translation> <translation id="8597182159515967513">Kopfzeile</translation> +<translation id="8603553056539299761">links und rechts zum Suchen</translation> <translation id="860475260694818407">Inhaltsverzeichnis</translation> <translation id="8613126697340063924">Remote-Wiedergabe steuern</translation> <translation id="862370744433916922">Untertitel</translation> diff --git a/chromium/content/app/strings/translations/content_strings_el.xtb b/chromium/content/app/strings/translations/content_strings_el.xtb index 7a9ba589d1e..b31d720d990 100644 --- a/chromium/content/app/strings/translations/content_strings_el.xtb +++ b/chromium/content/app/strings/translations/content_strings_el.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">λήψη μέσων</translation> <translation id="6981594929165378967">εισαγωγή</translation> <translation id="6989848892321993519">Αυξήστε την έκταση αυτού του κειμένου στους <ph name="MIN_CHARACTERS" /> χαρακτήρες ή περισσότερο (αυτήν τη στιγμή χρησιμοποιείτε 1 χαρακτήρα).</translation> +<translation id="7033340931668032222">επάνω και κάτω για αλλαγή της έντασης ήχου</translation> <translation id="709897737746224366">Αντιστοιχίστε τη ζητούμενη μορφή.</translation> <translation id="7118469954320184356">Δεν υπάρχει διαθέσιμη περιγραφή.</translation> <translation id="7139483182332611405">πρόλογος</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">σύμβολο γραφικών</translation> <translation id="8583702881314752957">λίστα ορισμών</translation> <translation id="8597182159515967513">επικεφαλίδα</translation> +<translation id="8603553056539299761">αριστερά και δεξιά για αναζήτηση</translation> <translation id="860475260694818407">πίνακας περιεχομένων</translation> <translation id="8613126697340063924">έλεγχος απομακρυσμένης αναπαραγωγής</translation> <translation id="862370744433916922">υπότιτλος</translation> diff --git a/chromium/content/app/strings/translations/content_strings_en-GB.xtb b/chromium/content/app/strings/translations/content_strings_en-GB.xtb index 3333d5ce733..3d77600b7e8 100644 --- a/chromium/content/app/strings/translations/content_strings_en-GB.xtb +++ b/chromium/content/app/strings/translations/content_strings_en-GB.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">download media</translation> <translation id="6981594929165378967">insertion</translation> <translation id="6989848892321993519">Please lengthen this text to <ph name="MIN_CHARACTERS" /> characters or more (you are currently using 1 character).</translation> +<translation id="7033340931668032222">up and down to change volume</translation> <translation id="709897737746224366">Please match the format requested.</translation> <translation id="7118469954320184356">No description available.</translation> <translation id="7139483182332611405">preface</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">graphics symbol</translation> <translation id="8583702881314752957">definition list</translation> <translation id="8597182159515967513">heading</translation> +<translation id="8603553056539299761">left and right to seek</translation> <translation id="860475260694818407">table of contents</translation> <translation id="8613126697340063924">control remote playback</translation> <translation id="862370744433916922">subtitle</translation> diff --git a/chromium/content/app/strings/translations/content_strings_es-419.xtb b/chromium/content/app/strings/translations/content_strings_es-419.xtb index b2e4514f8fe..e5d563eff02 100644 --- a/chromium/content/app/strings/translations/content_strings_es-419.xtb +++ b/chromium/content/app/strings/translations/content_strings_es-419.xtb @@ -136,7 +136,7 @@ <translation id="5677946354068040947">más opciones</translation> <translation id="576709008726043716">introducción</translation> <translation id="57838592816432529">Silenciar</translation> -<translation id="5860033963881614850">Desactivado</translation> +<translation id="5860033963881614850">No</translation> <translation id="588258955323874662">Pantalla completa</translation> <translation id="5888666972993069672">Transmitiendo ahora a <ph name="DEVICE_FRIENDLY_NAME" /></translation> <translation id="5939518447894949180">Restablecer</translation> @@ -176,6 +176,7 @@ <translation id="6941933287844615239">descargar medios</translation> <translation id="6981594929165378967">contenido agregado</translation> <translation id="6989848892321993519">Extiende este texto para que tenga <ph name="MIN_CHARACTERS" /> caracteres o más (actualmente usas 1 carácter).</translation> +<translation id="7033340931668032222">arriba y abajo para cambiar el volumen</translation> <translation id="709897737746224366">Haz coincidir el formato solicitado.</translation> <translation id="7118469954320184356">No hay una descripción disponible.</translation> <translation id="7139483182332611405">prefacio</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">símbolo gráfico</translation> <translation id="8583702881314752957">lista de definiciones</translation> <translation id="8597182159515967513">cabecera</translation> +<translation id="8603553056539299761">izquierda y derecha para buscar</translation> <translation id="860475260694818407">índice</translation> <translation id="8613126697340063924">controlar la reproducción remota</translation> <translation id="862370744433916922">subtítulo</translation> diff --git a/chromium/content/app/strings/translations/content_strings_es.xtb b/chromium/content/app/strings/translations/content_strings_es.xtb index 53ebbe2ddd3..6908e9bf0e5 100644 --- a/chromium/content/app/strings/translations/content_strings_es.xtb +++ b/chromium/content/app/strings/translations/content_strings_es.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">descargar archivos multimedia</translation> <translation id="6981594929165378967">inserción</translation> <translation id="6989848892321993519">Aumenta la longitud de este texto a <ph name="MIN_CHARACTERS" /> caracteres o más (actualmente, el texto tiene 1 carácter).</translation> +<translation id="7033340931668032222">arriba o abajo para subir o bajar el volumen</translation> <translation id="709897737746224366">Utiliza un formato que coincida con el solicitado</translation> <translation id="7118469954320184356">No hay ninguna descripción disponible.</translation> <translation id="7139483182332611405">prefacio</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">símbolo gráfico</translation> <translation id="8583702881314752957">lista de definiciones</translation> <translation id="8597182159515967513">cabecera</translation> +<translation id="8603553056539299761">izquierda o derecha para ir hacia delante o hacia atrás</translation> <translation id="860475260694818407">índice</translation> <translation id="8613126697340063924">reproducción de control remoto</translation> <translation id="862370744433916922">subtítulo</translation> diff --git a/chromium/content/app/strings/translations/content_strings_et.xtb b/chromium/content/app/strings/translations/content_strings_et.xtb index 142bc3b9fd9..dbc55f637f1 100644 --- a/chromium/content/app/strings/translations/content_strings_et.xtb +++ b/chromium/content/app/strings/translations/content_strings_et.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">laadi meedia alla</translation> <translation id="6981594929165378967">lisamine</translation> <translation id="6989848892321993519">Pikendage teksti vähemalt <ph name="MIN_CHARACTERS" /> tähemärgini (kasutate praegu ühte tähemärki).</translation> +<translation id="7033340931668032222">hääletugevuse muutmiseks üles- ja allanoole klahvi</translation> <translation id="709897737746224366">Vastendage nõutav vorming.</translation> <translation id="7118469954320184356">Kirjeldust pole.</translation> <translation id="7139483182332611405">eessõna</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">graafika sümbol</translation> <translation id="8583702881314752957">definitsioonide loend</translation> <translation id="8597182159515967513">pealkiri</translation> +<translation id="8603553056539299761">otsimiseks vasakut ja paremat klahvi</translation> <translation id="860475260694818407">sisukord</translation> <translation id="8613126697340063924">kaugesituse juhtimine</translation> <translation id="862370744433916922">alapealkiri</translation> diff --git a/chromium/content/app/strings/translations/content_strings_fa.xtb b/chromium/content/app/strings/translations/content_strings_fa.xtb index 61b1544df58..10fad531f33 100644 --- a/chromium/content/app/strings/translations/content_strings_fa.xtb +++ b/chromium/content/app/strings/translations/content_strings_fa.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">بارگیری رسانه</translation> <translation id="6981594929165378967">درج</translation> <translation id="6989848892321993519">لطفاً این نوشتار را به <ph name="MIN_CHARACTERS" /> نویسه یا بیشتر افزایش دهید (درحالحاضر از ۱ نویسه استفاده میکنید).</translation> +<translation id="7033340931668032222">برای تغییر میزان صدا، به بالا و پایین بروید</translation> <translation id="709897737746224366">لطفاً با قالب درخواستی مطابقت دهید.</translation> <translation id="7118469954320184356">توضیحی دردسترس نیست.</translation> <translation id="7139483182332611405">پیشگفتار</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">نماد گرافیکی</translation> <translation id="8583702881314752957">فهرست معنیها</translation> <translation id="8597182159515967513">عنوان</translation> +<translation id="8603553056539299761">برای جستجو، به چپ و راست بروید</translation> <translation id="860475260694818407">فهرست مطالب</translation> <translation id="8613126697340063924">کنترل بازپخش راه دور</translation> <translation id="862370744433916922">زیرنویس</translation> diff --git a/chromium/content/app/strings/translations/content_strings_fi.xtb b/chromium/content/app/strings/translations/content_strings_fi.xtb index ba7a3183271..b9788ae5407 100644 --- a/chromium/content/app/strings/translations/content_strings_fi.xtb +++ b/chromium/content/app/strings/translations/content_strings_fi.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">lataa media</translation> <translation id="6981594929165378967">lisäys</translation> <translation id="6989848892321993519">Pidennä tämä teksti vähintään <ph name="MIN_CHARACTERS" /> merkkiin (tällä hetkellä käytössä 1 merkki).</translation> +<translation id="7033340931668032222">ylös ja alas, niin voit muuttaa äänenvoimakkuutta</translation> <translation id="709897737746224366">Käytä pyydettyä muotoilua.</translation> <translation id="7118469954320184356">Ei kuvausta saatavilla</translation> <translation id="7139483182332611405">johdanto</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">grafiikkasymboli</translation> <translation id="8583702881314752957">määritelmäluettelo</translation> <translation id="8597182159515967513">otsikko</translation> +<translation id="8603553056539299761">vasemmalle ja oikealle, niin voit hakea</translation> <translation id="860475260694818407">sisällysluettelo</translation> <translation id="8613126697340063924">hallinnoi etätoistoa</translation> <translation id="862370744433916922">alaotsikko</translation> diff --git a/chromium/content/app/strings/translations/content_strings_fil.xtb b/chromium/content/app/strings/translations/content_strings_fil.xtb index 4221e6c6762..5426ac4dde8 100644 --- a/chromium/content/app/strings/translations/content_strings_fil.xtb +++ b/chromium/content/app/strings/translations/content_strings_fil.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">i-download ang media</translation> <translation id="6981594929165378967">paglagay</translation> <translation id="6989848892321993519">Pakidagdagan ang text na ito nang hanggang <ph name="MIN_CHARACTERS" /> (na) character o higit pa (kasalukuyan kang gumagamit ng 1 character).</translation> +<translation id="7033340931668032222">pataas at pababa para baguhin ang volume</translation> <translation id="709897737746224366">Pakitugma ang hiniling na format.</translation> <translation id="7118469954320184356">Walang available na paglalarawan.</translation> <translation id="7139483182332611405">preface</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">simbolo ng graphics</translation> <translation id="8583702881314752957">listahan ng kahulugan</translation> <translation id="8597182159515967513">heading</translation> +<translation id="8603553056539299761">pakaliwa at pakanan para mag-seek</translation> <translation id="860475260694818407">talaan ng nilalaman</translation> <translation id="8613126697340063924">kontrolin ang malayuang pag-playback</translation> <translation id="862370744433916922">subtitle</translation> diff --git a/chromium/content/app/strings/translations/content_strings_fr.xtb b/chromium/content/app/strings/translations/content_strings_fr.xtb index 686f4dfc3df..af33fcbc641 100644 --- a/chromium/content/app/strings/translations/content_strings_fr.xtb +++ b/chromium/content/app/strings/translations/content_strings_fr.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">télécharger des contenus multimédias</translation> <translation id="6981594929165378967">insertion</translation> <translation id="6989848892321993519">Veuillez allonger ce texte pour qu'il comporte au moins <ph name="MIN_CHARACTERS" /> caractères. Il en compte actuellement un seul.</translation> +<translation id="7033340931668032222">haut et bas pour modifier le volume</translation> <translation id="709897737746224366">Veuillez respecter le format requis.</translation> <translation id="7118469954320184356">Aucune description disponible.</translation> <translation id="7139483182332611405">préface</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">symbole graphique</translation> <translation id="8583702881314752957">liste de définitions</translation> <translation id="8597182159515967513">en-tête</translation> +<translation id="8603553056539299761">gauche et droite pour chercher</translation> <translation id="860475260694818407">sommaire</translation> <translation id="8613126697340063924">contrôler la lecture à distance</translation> <translation id="862370744433916922">sous-titre</translation> diff --git a/chromium/content/app/strings/translations/content_strings_gu.xtb b/chromium/content/app/strings/translations/content_strings_gu.xtb index f85240d7b19..f4b6b3e383a 100644 --- a/chromium/content/app/strings/translations/content_strings_gu.xtb +++ b/chromium/content/app/strings/translations/content_strings_gu.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">મીડિયા ડાઉનલોડ કરો</translation> <translation id="6981594929165378967">ઉમેરો</translation> <translation id="6989848892321993519">કૃપા કરીને આ ટેક્સ્ટને <ph name="MIN_CHARACTERS" /> અથવા તેથી વધુ અક્ષર સુધી લંબાવો (તમે હાલમાં 1 અક્ષરનો ઉપયોગ કરી રહ્યાં છો).</translation> +<translation id="7033340931668032222">વૉલ્યૂમમાં ફેરફાર કરવા માટે up અને down</translation> <translation id="709897737746224366">કૃપા કરીને વિનંતી કરેલા ફોર્મેટ સાથે મેળ કરો.</translation> <translation id="7118469954320184356">કોઈ વર્ણન ઉપલબ્ધ નથી.</translation> <translation id="7139483182332611405">પ્રસ્તાવના</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">ગ્રાફિક્સ પ્રતીક</translation> <translation id="8583702881314752957">વિવરણ સૂચિ</translation> <translation id="8597182159515967513">મથાળું</translation> +<translation id="8603553056539299761">શોધવા માટે left અને right</translation> <translation id="860475260694818407">અનુક્રમણિકા</translation> <translation id="8613126697340063924">રિમોટ પ્લેબેકનું નિયંત્રણ કરો</translation> <translation id="862370744433916922">(સબટાઇટલ)</translation> diff --git a/chromium/content/app/strings/translations/content_strings_hi.xtb b/chromium/content/app/strings/translations/content_strings_hi.xtb index cec4049ae93..0506b102e65 100644 --- a/chromium/content/app/strings/translations/content_strings_hi.xtb +++ b/chromium/content/app/strings/translations/content_strings_hi.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">मीडिया डाउनलोड करें</translation> <translation id="6981594929165378967">डालना</translation> <translation id="6989848892321993519">कृपया इस लेख को <ph name="MIN_CHARACTERS" /> या उससे ज़्यादा वर्णों तक बढ़ाएं (आप इस समय 1 वर्ण का उपयोग कर रहे हैं).</translation> +<translation id="7033340931668032222">आवाज़ कम-ज़्यादा करने के लिए ऊपर और नीचे वाले बटन का इस्तेमाल करें</translation> <translation id="709897737746224366">कृपया अनुरोधित प्रारूप का मिलान करें.</translation> <translation id="7118469954320184356">कोई जानकारी मौजूद नहीं है.</translation> <translation id="7139483182332611405">आमुख</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">ग्राफ़िक्स चिह्न</translation> <translation id="8583702881314752957">परिभाषा सूची</translation> <translation id="8597182159515967513">हेडिंग</translation> +<translation id="8603553056539299761">कार्रवाई के लिए बाएं और दाएं बटन का इस्तेमाल करें</translation> <translation id="860475260694818407">विषय सूची</translation> <translation id="8613126697340063924">दूरस्थ प्लेबैक नियंत्रित करें</translation> <translation id="862370744433916922">सबटाइटल</translation> diff --git a/chromium/content/app/strings/translations/content_strings_hr.xtb b/chromium/content/app/strings/translations/content_strings_hr.xtb index 56f67e9404b..2dcf9a18501 100644 --- a/chromium/content/app/strings/translations/content_strings_hr.xtb +++ b/chromium/content/app/strings/translations/content_strings_hr.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">preuzmi medij</translation> <translation id="6981594929165378967">umetanje</translation> <translation id="6989848892321993519">Produljite broj znakova u tekstu na minimalno <ph name="MIN_CHARACTERS" /> (trenutačno imate 1 znak).</translation> +<translation id="7033340931668032222">gore i dolje za regulaciju glasnoće</translation> <translation id="709897737746224366">Udovoljite zadanom formatu.</translation> <translation id="7118469954320184356">Opis nije dostupan.</translation> <translation id="7139483182332611405">predgovor</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">grafički simbol</translation> <translation id="8583702881314752957">popis definicija</translation> <translation id="8597182159515967513">naslov</translation> +<translation id="8603553056539299761">lijevo i desno za preskakanje</translation> <translation id="860475260694818407">sadržaj</translation> <translation id="8613126697340063924">upravljaj daljinskom reprodukcijom</translation> <translation id="862370744433916922">titl</translation> diff --git a/chromium/content/app/strings/translations/content_strings_hu.xtb b/chromium/content/app/strings/translations/content_strings_hu.xtb index 1bd932423a6..d495dce010c 100644 --- a/chromium/content/app/strings/translations/content_strings_hu.xtb +++ b/chromium/content/app/strings/translations/content_strings_hu.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">médiafájlok letöltése</translation> <translation id="6981594929165378967">beszúrás</translation> <translation id="6989848892321993519">Legalább <ph name="MIN_CHARACTERS" /> karakter hosszú szöveget adjon meg (jelenleg 1 karaktert használ).</translation> +<translation id="7033340931668032222">fel és le a hangerő módosításához</translation> <translation id="709897737746224366">Kérjük, tartsa magát a kívánt formátumhoz.</translation> <translation id="7118469954320184356">Nincs leírás.</translation> <translation id="7139483182332611405">bevezető</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">grafikus szimbólum</translation> <translation id="8583702881314752957">definíciós lista</translation> <translation id="8597182159515967513">fejléc</translation> +<translation id="8603553056539299761">balra és jobbra az ugráshoz</translation> <translation id="860475260694818407">tartalomjegyzék</translation> <translation id="8613126697340063924">távoli lejátszás kezelése</translation> <translation id="862370744433916922">felirat</translation> diff --git a/chromium/content/app/strings/translations/content_strings_id.xtb b/chromium/content/app/strings/translations/content_strings_id.xtb index f093d82578c..5455029d973 100644 --- a/chromium/content/app/strings/translations/content_strings_id.xtb +++ b/chromium/content/app/strings/translations/content_strings_id.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">download media</translation> <translation id="6981594929165378967">penyisipan</translation> <translation id="6989848892321993519">Perpanjang teks ini menjadi <ph name="MIN_CHARACTERS" /> karakter atau lebih (saat ini Anda menggunakan 1 karakter).</translation> +<translation id="7033340931668032222">ke atas dan ke bawah untuk mengubah volume</translation> <translation id="709897737746224366">Sesuaikan dengan format yang diminta.</translation> <translation id="7118469954320184356">Deskripsi tidak tersedia.</translation> <translation id="7139483182332611405">kata pengantar</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">simbol grafis</translation> <translation id="8583702881314752957">daftar definisi</translation> <translation id="8597182159515967513">kepala</translation> +<translation id="8603553056539299761">ke kiri dan ke kanan untuk mencari</translation> <translation id="860475260694818407">daftar isi</translation> <translation id="8613126697340063924">kontrol pemutaran jarak jauh</translation> <translation id="862370744433916922">subjudul</translation> diff --git a/chromium/content/app/strings/translations/content_strings_it.xtb b/chromium/content/app/strings/translations/content_strings_it.xtb index 10a39e36c6c..604a1117815 100644 --- a/chromium/content/app/strings/translations/content_strings_it.xtb +++ b/chromium/content/app/strings/translations/content_strings_it.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">scarica contenuti multimediali</translation> <translation id="6981594929165378967">inserimento</translation> <translation id="6989848892321993519">Prolunga questo testo a <ph name="MIN_CHARACTERS" /> o più caratteri (al momento stai utilizzando 1 carattere).</translation> +<translation id="7033340931668032222">verso l'alto e verso il basso per regolare il volume</translation> <translation id="709897737746224366">Rispetta il formato richiesto.</translation> <translation id="7118469954320184356">Descrizione non disponibile.</translation> <translation id="7139483182332611405">prefazione</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">simbolo grafico</translation> <translation id="8583702881314752957">elenco di definizioni</translation> <translation id="8597182159515967513">intestazione</translation> +<translation id="8603553056539299761">sinistra e destra per cercare</translation> <translation id="860475260694818407">sommario</translation> <translation id="8613126697340063924">gestisci riproduzione remota</translation> <translation id="862370744433916922">sottotitolo</translation> diff --git a/chromium/content/app/strings/translations/content_strings_iw.xtb b/chromium/content/app/strings/translations/content_strings_iw.xtb index f2c60942ead..7badfe1f4bb 100644 --- a/chromium/content/app/strings/translations/content_strings_iw.xtb +++ b/chromium/content/app/strings/translations/content_strings_iw.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">הורד מדיה</translation> <translation id="6981594929165378967">הוספה</translation> <translation id="6989848892321993519">עליך להאריך את הטקסט ל-<ph name="MIN_CHARACTERS" /> תווים או יותר (אתה משתמש כרגע בתו אחד).</translation> +<translation id="7033340931668032222">מעלה ומטה כדי לשנות את עוצמת הקול</translation> <translation id="709897737746224366">התאם את הפורמט המבוקש.</translation> <translation id="7118469954320184356">אין תיאור זמין.</translation> <translation id="7139483182332611405">הקדמה</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">סמל גרפי</translation> <translation id="8583702881314752957">רשימת הגדרות</translation> <translation id="8597182159515967513">כותרת</translation> +<translation id="8603553056539299761">שמאלה וימינה כדי להריץ</translation> <translation id="860475260694818407">תוכן העניינים</translation> <translation id="8613126697340063924">שליטה בהפעלה מרחוק</translation> <translation id="862370744433916922">כותרת משנה</translation> diff --git a/chromium/content/app/strings/translations/content_strings_ja.xtb b/chromium/content/app/strings/translations/content_strings_ja.xtb index 39c8a1bd600..f846b79da14 100644 --- a/chromium/content/app/strings/translations/content_strings_ja.xtb +++ b/chromium/content/app/strings/translations/content_strings_ja.xtb @@ -88,7 +88,7 @@ <translation id="4151657705144244502">グラフィック</translation> <translation id="4193965531860883258">前書き</translation> <translation id="4201051445878709314">前の月を表示</translation> -<translation id="421884353938374759">色の選択</translation> +<translation id="421884353938374759">カラー選択ツール</translation> <translation id="4248100235867064564">メニューバー</translation> <translation id="4254339807215791271">コンテンツ情報</translation> <translation id="4360991593054037559">有効な値を入力してください。有効な値として最も近いのは <ph name="VALID_VALUE_LOW" /> と <ph name="VALID_VALUE_HIGHER" /> です。</translation> @@ -176,6 +176,7 @@ <translation id="6941933287844615239">メディアをダウンロード</translation> <translation id="6981594929165378967">挿入</translation> <translation id="6989848892321993519">このテキストは <ph name="MIN_CHARACTERS" /> 文字以上で指定してください(現在 1 文字で指定されています)。</translation> +<translation id="7033340931668032222">音量を変更するには上か下を押します</translation> <translation id="709897737746224366">指定されている形式で入力してください。</translation> <translation id="7118469954320184356">説明はありません。</translation> <translation id="7139483182332611405">序文</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">図形記号</translation> <translation id="8583702881314752957">定義リスト</translation> <translation id="8597182159515967513">見出し</translation> +<translation id="8603553056539299761">再生位置を移動するには左か右を押します</translation> <translation id="860475260694818407">目次</translation> <translation id="8613126697340063924">リモート再生をコントロール</translation> <translation id="862370744433916922">副題</translation> diff --git a/chromium/content/app/strings/translations/content_strings_kn.xtb b/chromium/content/app/strings/translations/content_strings_kn.xtb index 1fa7407bf4b..3cb3e160960 100644 --- a/chromium/content/app/strings/translations/content_strings_kn.xtb +++ b/chromium/content/app/strings/translations/content_strings_kn.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">ಮಾಧ್ಯಮ ಡೌನ್ಲೋಡ್</translation> <translation id="6981594929165378967">ಅಳವಡಿಕೆ</translation> <translation id="6989848892321993519">ಈ ಪಠ್ಯವನ್ನು <ph name="MIN_CHARACTERS" /> ಅಥವಾ ಇದಕ್ಕಿಂತಲೂ ಹೆಚ್ಚಿನ ಅಕ್ಷರಗಳಿಗೆ ಉದ್ದಗೊಳಿಸಿ (ನೀವು ಪ್ರಸ್ತುತ 1 ಅಕ್ಷರಗಳನ್ನು ಬಳಸುತ್ತಿರುವಿರಿ).</translation> +<translation id="7033340931668032222">ವಾಲ್ಯೂಮ್ ಬದಲಾಯಿಸಲು ಮೇಲಕ್ಕೆ ಮತ್ತು ಕೆಳಕ್ಕೆ ಬಟನ್ ಒತ್ತಿರಿ</translation> <translation id="709897737746224366">ದಯವಿಟ್ಟು ವಿನಂತಿಸಿದ ಸ್ವರೂಪವನ್ನು ಹೊಂದಿಸಿ.</translation> <translation id="7118469954320184356">ಯಾವುದೇ ವಿವರಣೆ ಲಭ್ಯವಿಲ್ಲ.</translation> <translation id="7139483182332611405">ಮುನ್ನುಡಿ</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">ಗ್ರಾಫಿಕ್ಸ್ ಚಿಹ್ನೆ</translation> <translation id="8583702881314752957">ವಿವರಣೆ ಪಟ್ಟಿ</translation> <translation id="8597182159515967513">ಶೀರ್ಷಿಕೆ</translation> +<translation id="8603553056539299761">ಸೀಕ್ಗಾಗಿ ಎಡ ಮತ್ತು ಬಲ ಬಟನ್ ಒತ್ತಿರಿ</translation> <translation id="860475260694818407">ಪರಿವಿಡಿ</translation> <translation id="8613126697340063924">ರಿಮೋಟ್ ಪ್ಲೇಬ್ಯಾಕ್ ನಿಯಂತ್ರಿಸಿ</translation> <translation id="862370744433916922">ಉಪಶೀರ್ಷಿಕೆ</translation> diff --git a/chromium/content/app/strings/translations/content_strings_ko.xtb b/chromium/content/app/strings/translations/content_strings_ko.xtb index 0f5d9611b0c..6c5c16ca6e8 100644 --- a/chromium/content/app/strings/translations/content_strings_ko.xtb +++ b/chromium/content/app/strings/translations/content_strings_ko.xtb @@ -170,12 +170,13 @@ <translation id="6820355525329141109">플러그인을 로드할 수 없습니다.</translation> <translation id="6820615603175220800">참고문헌 참조</translation> <translation id="6843725295806269523">음소거</translation> -<translation id="6885760532393684712">디렉토리</translation> +<translation id="6885760532393684712">디렉터리</translation> <translation id="689129560213475294">출판사 이름</translation> <translation id="6934078000481955284">인용구</translation> <translation id="6941933287844615239">미디어 다운로드</translation> <translation id="6981594929165378967">삽입</translation> <translation id="6989848892321993519">이 텍스트를 <ph name="MIN_CHARACTERS" />자 이상으로 늘리세요(현재 1자 사용 중).</translation> +<translation id="7033340931668032222">위아래로 볼륨 조정</translation> <translation id="709897737746224366">요청한 형식과 일치시키세요.</translation> <translation id="7118469954320184356">설명이 없습니다.</translation> <translation id="7139483182332611405">머리말</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">그래픽 기호</translation> <translation id="8583702881314752957">정의 목록</translation> <translation id="8597182159515967513">항목</translation> +<translation id="8603553056539299761">좌우로 검색</translation> <translation id="860475260694818407">목차</translation> <translation id="8613126697340063924">원격 재생 제어</translation> <translation id="862370744433916922">부제</translation> diff --git a/chromium/content/app/strings/translations/content_strings_lt.xtb b/chromium/content/app/strings/translations/content_strings_lt.xtb index e5d93d752cb..6347a8a7ffd 100644 --- a/chromium/content/app/strings/translations/content_strings_lt.xtb +++ b/chromium/content/app/strings/translations/content_strings_lt.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">atsisiųsti mediją</translation> <translation id="6981594929165378967">įterpimas</translation> <translation id="6989848892321993519">Pailginkite šį tekstą iki <ph name="MIN_CHARACTERS" /> simb. ar daugiau (šiuo metu naudojate 1 simbolį).</translation> +<translation id="7033340931668032222">aukštyn ir žemyn – pakeisti garsumą</translation> <translation id="709897737746224366">Priderinkite reikalaujamą formatą.</translation> <translation id="7118469954320184356">Nepasiekiamas joks aprašas.</translation> <translation id="7139483182332611405">įvadas</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">grafikos simbolis</translation> <translation id="8583702881314752957">apibrėžimų sąrašas</translation> <translation id="8597182159515967513">antraštė</translation> +<translation id="8603553056539299761">kairėn ir dešinėn – ieškoti</translation> <translation id="860475260694818407">turinys</translation> <translation id="8613126697340063924">valdyti nuotolinį atkūrimą</translation> <translation id="862370744433916922">paantraštė</translation> diff --git a/chromium/content/app/strings/translations/content_strings_lv.xtb b/chromium/content/app/strings/translations/content_strings_lv.xtb index 3b48fe76940..374f99a5aaf 100644 --- a/chromium/content/app/strings/translations/content_strings_lv.xtb +++ b/chromium/content/app/strings/translations/content_strings_lv.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">lejupielādēt multivides failus</translation> <translation id="6981594929165378967">ievietošana</translation> <translation id="6989848892321993519">Lūdzu, papildiniet šo tekstu līdz vismaz <ph name="MIN_CHARACTERS" /> rakstzīmēm (pašlaik tas ietver 1 rakstzīmi).</translation> +<translation id="7033340931668032222">augšup un lejup, lai mainītu skaļumu</translation> <translation id="709897737746224366">Pieskaņojiet vērtību prasītajam formātam.</translation> <translation id="7118469954320184356">Nav apraksta.</translation> <translation id="7139483182332611405">ievadraksts</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">grafiskais simbols</translation> <translation id="8583702881314752957">definīciju saraksts</translation> <translation id="8597182159515967513">Virsraksts</translation> +<translation id="8603553056539299761">pa kreisi un pa labi, lai meklētu</translation> <translation id="860475260694818407">satura rādītājs</translation> <translation id="8613126697340063924">kontrolēt attālināto atskaņošanu</translation> <translation id="862370744433916922">apakšvirsraksts</translation> diff --git a/chromium/content/app/strings/translations/content_strings_ml.xtb b/chromium/content/app/strings/translations/content_strings_ml.xtb index 875eeb43e93..7b80031f7c4 100644 --- a/chromium/content/app/strings/translations/content_strings_ml.xtb +++ b/chromium/content/app/strings/translations/content_strings_ml.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">മീഡിയ ഡൗൺലോഡ് ചെയ്യുക</translation> <translation id="6981594929165378967">ചേർക്കൽ</translation> <translation id="6989848892321993519">ഈ ടെക്സ്റ്റിന്റെ ദൈർഘ്യം <ph name="MIN_CHARACTERS" /> പ്രതീകങ്ങളോ അതിൽ കൂടുതലോ ആയി വർദ്ധിപ്പിക്കുക (നിങ്ങൾ നിലവിൽ ഒരു പ്രതീകം മാത്രമേ ഉപയോഗിക്കുന്നുള്ളൂ).</translation> +<translation id="7033340931668032222">ശബ്ദം മാറ്റാൻ മുകളിലും താഴെയുമുള്ള ബട്ടണുകളിൽ അമർത്തുക</translation> <translation id="709897737746224366">അഭ്യര്ത്ഥി ച്ചഫോര്മാറ്റ് ദയവായി പൊരുത്തപ്പെടുത്തുക.</translation> <translation id="7118469954320184356">വിവരണം ലഭ്യമല്ല.</translation> <translation id="7139483182332611405">പീഠിക</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">ഗ്രാഫിക്സ് ചിഹ്നം</translation> <translation id="8583702881314752957">നിർവചന ലിസ്റ്റ്</translation> <translation id="8597182159515967513">തലക്കെട്ട്</translation> +<translation id="8603553056539299761">നീക്കാൻ ഇടത്തും വലത്തുമുള്ള ബട്ടണുകളിൽ അമർത്തുക</translation> <translation id="860475260694818407">ഉള്ളടക്ക പട്ടിക</translation> <translation id="8613126697340063924">വിദൂര പ്ലേബാക്ക് നിയന്ത്രിക്കുക</translation> <translation id="862370744433916922">ഉപശീർഷകം</translation> diff --git a/chromium/content/app/strings/translations/content_strings_mr.xtb b/chromium/content/app/strings/translations/content_strings_mr.xtb index 57a63808bca..5afa1d4f006 100644 --- a/chromium/content/app/strings/translations/content_strings_mr.xtb +++ b/chromium/content/app/strings/translations/content_strings_mr.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">मीडिया डाउनलोड करा</translation> <translation id="6981594929165378967">घालणे</translation> <translation id="6989848892321993519">कृपया हा मजकूर <ph name="MIN_CHARACTERS" /> वर्ण किंवा त्यापेक्षा अधिक मोठा करा (तुम्ही सध्या 1 वर्ण वापरत आहात).</translation> +<translation id="7033340931668032222">व्हॉल्यूम बदलण्यासाठी अप आणि डाउन बटण</translation> <translation id="709897737746224366">कृपया विनंती केलेले स्वरूपन जुळवा.</translation> <translation id="7118469954320184356">कोणतेही वर्णन उपलब्ध नाही.</translation> <translation id="7139483182332611405">प्रस्तावना</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">ग्राफिक्स चिन्ह</translation> <translation id="8583702881314752957">परिभाषा सूची</translation> <translation id="8597182159515967513">शीर्षलेख</translation> +<translation id="8603553056539299761">मिळवण्यासाठी डावे आणि उजवे बटण</translation> <translation id="860475260694818407">अनुक्रमणिका</translation> <translation id="8613126697340063924">दूरस्थ प्लेबॅक नियंत्रित करा</translation> <translation id="862370744433916922">उपशीर्षक</translation> diff --git a/chromium/content/app/strings/translations/content_strings_ms.xtb b/chromium/content/app/strings/translations/content_strings_ms.xtb index eb8600bdad8..a5383d6b0d1 100644 --- a/chromium/content/app/strings/translations/content_strings_ms.xtb +++ b/chromium/content/app/strings/translations/content_strings_ms.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">muat turun media</translation> <translation id="6981594929165378967">penyisipan</translation> <translation id="6989848892321993519">Sila panjangkan teks ini kepada <ph name="MIN_CHARACTERS" /> aksara atau lebih (anda sedang menggunakan 1 aksara).</translation> +<translation id="7033340931668032222">atas dan bawah untuk mengubah kelantangan</translation> <translation id="709897737746224366">Sila padankan dengan format yang diminta.</translation> <translation id="7118469954320184356">Perihalan tidak tersedia.</translation> <translation id="7139483182332611405">kata penghantar</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">simbol grafik</translation> <translation id="8583702881314752957">senarai takrif</translation> <translation id="8597182159515967513">tajuk</translation> +<translation id="8603553056539299761">kiri dan kanan untuk mencari</translation> <translation id="860475260694818407">isi kandungan</translation> <translation id="8613126697340063924">kawal main balik jauh</translation> <translation id="862370744433916922">sari kata</translation> diff --git a/chromium/content/app/strings/translations/content_strings_nl.xtb b/chromium/content/app/strings/translations/content_strings_nl.xtb index d4ce6bd0b03..ea67aa8ba0d 100644 --- a/chromium/content/app/strings/translations/content_strings_nl.xtb +++ b/chromium/content/app/strings/translations/content_strings_nl.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">media downloaden</translation> <translation id="6981594929165378967">invoeging</translation> <translation id="6989848892321993519">Breid deze tekst uit tot <ph name="MIN_CHARACTERS" /> tekens of meer (je gebruikt momenteel één teken).</translation> +<translation id="7033340931668032222">omhoog en omlaag om het volume te wijzigen</translation> <translation id="709897737746224366">Zorg dat de indeling voldoet aan de gevraagde indeling.</translation> <translation id="7118469954320184356">Geen beschrijving beschikbaar.</translation> <translation id="7139483182332611405">voorwoord</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">grafisch symbool</translation> <translation id="8583702881314752957">definitielijst</translation> <translation id="8597182159515967513">kop</translation> +<translation id="8603553056539299761">naar links en rechts om te zoeken</translation> <translation id="860475260694818407">inhoudsopgave</translation> <translation id="8613126697340063924">afspelen bedienen op afstand</translation> <translation id="862370744433916922">ondertitel</translation> diff --git a/chromium/content/app/strings/translations/content_strings_no.xtb b/chromium/content/app/strings/translations/content_strings_no.xtb index dd7f1fda81b..c88080407a0 100644 --- a/chromium/content/app/strings/translations/content_strings_no.xtb +++ b/chromium/content/app/strings/translations/content_strings_no.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">last ned medier</translation> <translation id="6981594929165378967">innsetting</translation> <translation id="6989848892321993519">Øk lengden på denne teksten med minst <ph name="MIN_CHARACTERS" /> tegn (du bruker for øyeblikket 1 tegn).</translation> +<translation id="7033340931668032222">opp og ned for å endre volum</translation> <translation id="709897737746224366">Sørg for samsvar med det forespurte formatet.</translation> <translation id="7118469954320184356">Ingen beskrivelse er tilgjengelig.</translation> <translation id="7139483182332611405">forord</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">grafikksymbol</translation> <translation id="8583702881314752957">definisjonsliste</translation> <translation id="8597182159515967513">overskrift</translation> +<translation id="8603553056539299761">venstre og høyre for å hoppe</translation> <translation id="860475260694818407">innholdsfortegnelse</translation> <translation id="8613126697340063924">kontrollér ekstern avspilling</translation> <translation id="862370744433916922">undertittel</translation> diff --git a/chromium/content/app/strings/translations/content_strings_pl.xtb b/chromium/content/app/strings/translations/content_strings_pl.xtb index 2470f8d3486..5aa0f5ca0aa 100644 --- a/chromium/content/app/strings/translations/content_strings_pl.xtb +++ b/chromium/content/app/strings/translations/content_strings_pl.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">pobierz multimedia</translation> <translation id="6981594929165378967">wstawienie</translation> <translation id="6989848892321993519">Wydłuż ten tekst co najmniej do <ph name="MIN_CHARACTERS" /> znaków (teraz używasz jednego znaku).</translation> +<translation id="7033340931668032222">klawisze w górę i w dół – zmiana głośności</translation> <translation id="709897737746224366">Podaj wartość w wymaganym formacie.</translation> <translation id="7118469954320184356">Brak opisu.</translation> <translation id="7139483182332611405">wstęp</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">symbol graficzny</translation> <translation id="8583702881314752957">lista definicji</translation> <translation id="8597182159515967513">nagłówek</translation> +<translation id="8603553056539299761">klawisze w lewo i w prawo – przewijanie</translation> <translation id="860475260694818407">spis treści</translation> <translation id="8613126697340063924">sterowanie zdalnym odtwarzaniem</translation> <translation id="862370744433916922">podtytuł</translation> diff --git a/chromium/content/app/strings/translations/content_strings_pt-BR.xtb b/chromium/content/app/strings/translations/content_strings_pt-BR.xtb index 6f77b8c36c3..243e041c8ee 100644 --- a/chromium/content/app/strings/translations/content_strings_pt-BR.xtb +++ b/chromium/content/app/strings/translations/content_strings_pt-BR.xtb @@ -67,7 +67,7 @@ <translation id="3078740164268491126">tabela</translation> <translation id="3086746722712840547">note</translation> <translation id="310520048233152454">Insira um URL.</translation> -<translation id="3175736971608411871">temporizador</translation> +<translation id="3175736971608411871">timer</translation> <translation id="3199563858620722075">caixa de combinação</translation> <translation id="3450233048674729344">O valor deve ser menor ou igual a <ph name="MAXIMUM" />.</translation> <translation id="3486220673238053218">definição</translation> @@ -176,6 +176,7 @@ <translation id="6941933287844615239">fazer o download da mídia</translation> <translation id="6981594929165378967">inserção</translation> <translation id="6989848892321993519">Aumente esse texto para <ph name="MIN_CHARACTERS" /> caracteres ou mais. No momento, você está usando 1 caractere.</translation> +<translation id="7033340931668032222">para cima e para baixo para controlar o volume</translation> <translation id="709897737746224366">É preciso que o formato corresponda ao exigido.</translation> <translation id="7118469954320184356">Nenhuma descrição disponível.</translation> <translation id="7139483182332611405">prefácio</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">símbolo gráfico</translation> <translation id="8583702881314752957">lista de definições</translation> <translation id="8597182159515967513">cabeçalho</translation> +<translation id="8603553056539299761">direita e esquerda para procurar</translation> <translation id="860475260694818407">sumário</translation> <translation id="8613126697340063924">controlar reprodução remota</translation> <translation id="862370744433916922">subtítulo</translation> diff --git a/chromium/content/app/strings/translations/content_strings_pt-PT.xtb b/chromium/content/app/strings/translations/content_strings_pt-PT.xtb index aef47eda7f7..51e7d9db844 100644 --- a/chromium/content/app/strings/translations/content_strings_pt-PT.xtb +++ b/chromium/content/app/strings/translations/content_strings_pt-PT.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">transferir multimédia</translation> <translation id="6981594929165378967">inserção</translation> <translation id="6989848892321993519">Aumente este texto para <ph name="MIN_CHARACTERS" /> ou mais carateres (atualmente, está a utilizar 1 caráter).</translation> +<translation id="7033340931668032222">para cima e para baixo para alterar o volume</translation> <translation id="709897737746224366">Faça corresponder o formato pedido.</translation> <translation id="7118469954320184356">Nenhuma descrição disponível.</translation> <translation id="7139483182332611405">prefácio</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">símbolo de gráficos</translation> <translation id="8583702881314752957">lista de definições</translation> <translation id="8597182159515967513">cabeçalho</translation> +<translation id="8603553056539299761">para a esquerda e para a direita para procurar</translation> <translation id="860475260694818407">índice</translation> <translation id="8613126697340063924">controlar a reprodução remota</translation> <translation id="862370744433916922">legenda</translation> diff --git a/chromium/content/app/strings/translations/content_strings_ro.xtb b/chromium/content/app/strings/translations/content_strings_ro.xtb index 7eb038249f7..27ee4ee1802 100644 --- a/chromium/content/app/strings/translations/content_strings_ro.xtb +++ b/chromium/content/app/strings/translations/content_strings_ro.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">descarcă conținut media</translation> <translation id="6981594929165378967">inserare</translation> <translation id="6989848892321993519">Mărește acest text la cel puțin <ph name="MIN_CHARACTERS" /> caractere (în prezent folosești 1 caracter).</translation> +<translation id="7033340931668032222">în sus și în jos pentru a modifica volumul</translation> <translation id="709897737746224366">Respectă formatul solicitat.</translation> <translation id="7118469954320184356">Nu există nicio descriere disponibilă.</translation> <translation id="7139483182332611405">prefață</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">simbol grafic</translation> <translation id="8583702881314752957">listă de definiții</translation> <translation id="8597182159515967513">antet</translation> +<translation id="8603553056539299761">în stânga și în dreapta pentru a derula</translation> <translation id="860475260694818407">cuprins</translation> <translation id="8613126697340063924">controlează redarea la distanță</translation> <translation id="862370744433916922">subtitlu</translation> diff --git a/chromium/content/app/strings/translations/content_strings_ru.xtb b/chromium/content/app/strings/translations/content_strings_ru.xtb index 492881d7235..bed31bb2089 100644 --- a/chromium/content/app/strings/translations/content_strings_ru.xtb +++ b/chromium/content/app/strings/translations/content_strings_ru.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">скачать файл</translation> <translation id="6981594929165378967">вставка</translation> <translation id="6989848892321993519">Текст должен быть не короче <ph name="MIN_CHARACTERS" /> симв. Длина текста сейчас: 1 символ.</translation> +<translation id="7033340931668032222">вверх и вниз для регулировки громкости</translation> <translation id="709897737746224366">Введите данные в указанном формате.</translation> <translation id="7118469954320184356">Нет описания.</translation> <translation id="7139483182332611405">вступление</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">графический символ</translation> <translation id="8583702881314752957">список описаний</translation> <translation id="8597182159515967513">заголовок</translation> +<translation id="8603553056539299761">вправо и влево для поиска</translation> <translation id="860475260694818407">оглавление</translation> <translation id="8613126697340063924">управлять воспроизведением на удаленных устройствах</translation> <translation id="862370744433916922">подзаголовок</translation> diff --git a/chromium/content/app/strings/translations/content_strings_sk.xtb b/chromium/content/app/strings/translations/content_strings_sk.xtb index f607fc9bc0f..8a3993f4e0a 100644 --- a/chromium/content/app/strings/translations/content_strings_sk.xtb +++ b/chromium/content/app/strings/translations/content_strings_sk.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">stiahnuť médiá</translation> <translation id="6981594929165378967">vloženie</translation> <translation id="6989848892321993519">Predĺžte tento text aspoň na <ph name="MIN_CHARACTERS" /> alebo viac znakov (momentálne používate jeden znak).</translation> +<translation id="7033340931668032222">smery nahor a nadol slúžia na zmenu hlasitosti</translation> <translation id="709897737746224366">Zadajte hodnotu zodpovedajúcu požadovanému formátu.</translation> <translation id="7118469954320184356">Nie je k dispozícii žiadny popis.</translation> <translation id="7139483182332611405">predslov</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">grafický symbol</translation> <translation id="8583702881314752957">zoznam definícií</translation> <translation id="8597182159515967513">nadpis</translation> +<translation id="8603553056539299761">smery vľavo a vpravo slúžia na hľadanie</translation> <translation id="860475260694818407">obsah</translation> <translation id="8613126697340063924">ovládať vzdialené prehrávanie</translation> <translation id="862370744433916922">podnadpis</translation> diff --git a/chromium/content/app/strings/translations/content_strings_sl.xtb b/chromium/content/app/strings/translations/content_strings_sl.xtb index 17a318c1bd7..e3cb0b8f192 100644 --- a/chromium/content/app/strings/translations/content_strings_sl.xtb +++ b/chromium/content/app/strings/translations/content_strings_sl.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">prenos predstavnosti</translation> <translation id="6981594929165378967">vstavljanje</translation> <translation id="6989848892321993519">Podaljšajte to besedilo na toliko znakov ali več: <ph name="MIN_CHARACTERS" /> (trenutno uporabljate en znak).</translation> +<translation id="7033340931668032222">navzgor in navzdol za spreminjanje glasnosti</translation> <translation id="709897737746224366">Poskrbite za ujemanje z zahtevano obliko.</translation> <translation id="7118469954320184356">Ni opisa.</translation> <translation id="7139483182332611405">predgovor</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">grafični simbol</translation> <translation id="8583702881314752957">seznam opredelitev</translation> <translation id="8597182159515967513">naslov</translation> +<translation id="8603553056539299761">levo in desno za iskanje</translation> <translation id="860475260694818407">kazalo</translation> <translation id="8613126697340063924">upravljanje oddaljenega predvajanja</translation> <translation id="862370744433916922">podnaslov</translation> diff --git a/chromium/content/app/strings/translations/content_strings_sr.xtb b/chromium/content/app/strings/translations/content_strings_sr.xtb index 25dc6841005..373eb0a128a 100644 --- a/chromium/content/app/strings/translations/content_strings_sr.xtb +++ b/chromium/content/app/strings/translations/content_strings_sr.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">преузми медије</translation> <translation id="6981594929165378967">уметање</translation> <translation id="6989848892321993519">Продужите овај текст на бар <ph name="MIN_CHARACTERS" /> знак(ов)а (тренутно користите 1 знак).</translation> +<translation id="7033340931668032222">горе и доле да бисте променили јачину звука</translation> <translation id="709897737746224366">Изаберите захтевани формат.</translation> <translation id="7118469954320184356">Опис није доступан.</translation> <translation id="7139483182332611405">предговор</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">графички симбол</translation> <translation id="8583702881314752957">листа дефиниција</translation> <translation id="8597182159515967513">наслов</translation> +<translation id="8603553056539299761">улево и удесно да бисте премотали</translation> <translation id="860475260694818407">садржај</translation> <translation id="8613126697340063924">контролишите репродукцију на удаљеном уређају</translation> <translation id="862370744433916922">титл</translation> diff --git a/chromium/content/app/strings/translations/content_strings_sv.xtb b/chromium/content/app/strings/translations/content_strings_sv.xtb index 70984bce970..c9130d10896 100644 --- a/chromium/content/app/strings/translations/content_strings_sv.xtb +++ b/chromium/content/app/strings/translations/content_strings_sv.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">ladda ned media</translation> <translation id="6981594929165378967">infogning</translation> <translation id="6989848892321993519">Lägg till minst <ph name="MIN_CHARACTERS" /> tecken (för närvarande har du angett 1 tecken).</translation> +<translation id="7033340931668032222">ändra volym med uppåt och nedåt</translation> <translation id="709897737746224366">Matcha det format som anges.</translation> <translation id="7118469954320184356">Det finns ingen tillgänglig beskrivning.</translation> <translation id="7139483182332611405">företal</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">grafisk symbol</translation> <translation id="8583702881314752957">definitionslista</translation> <translation id="8597182159515967513">rubrik</translation> +<translation id="8603553056539299761">sök med vänster och höger</translation> <translation id="860475260694818407">innehållsförteckning</translation> <translation id="8613126697340063924">styra fjärruppspelning</translation> <translation id="862370744433916922">undertext</translation> diff --git a/chromium/content/app/strings/translations/content_strings_sw.xtb b/chromium/content/app/strings/translations/content_strings_sw.xtb index 543769600d6..1ec88570f4c 100644 --- a/chromium/content/app/strings/translations/content_strings_sw.xtb +++ b/chromium/content/app/strings/translations/content_strings_sw.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">pakua maudhui</translation> <translation id="6981594929165378967">uwekaji</translation> <translation id="6989848892321993519">Tafadhali refusha maandishi haya hadi herufi <ph name="MIN_CHARACTERS" /> au zaidi (kwa sasa unatumia herufi 1).</translation> +<translation id="7033340931668032222">juu na chini ili kubadilisha sauti</translation> <translation id="709897737746224366">Tafadhali linganisha umbizo lililoombwa.</translation> <translation id="7118469954320184356">Hakuna maelezo yanayopatikana.</translation> <translation id="7139483182332611405">dibaji</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">ishara ya picha</translation> <translation id="8583702881314752957">orodha ya ufafanuzi</translation> <translation id="8597182159515967513">kichwa</translation> +<translation id="8603553056539299761">kushoto na kulia ili kusogeza</translation> <translation id="860475260694818407">jedwali la yaliyomo</translation> <translation id="8613126697340063924">dhibiti kucheza kwa mbali</translation> <translation id="862370744433916922">kichwa kidogo</translation> diff --git a/chromium/content/app/strings/translations/content_strings_ta.xtb b/chromium/content/app/strings/translations/content_strings_ta.xtb index 27d846fecb6..014379f437d 100644 --- a/chromium/content/app/strings/translations/content_strings_ta.xtb +++ b/chromium/content/app/strings/translations/content_strings_ta.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">மீடியாவைப் பதிவிறக்கு</translation> <translation id="6981594929165378967">செருகும்</translation> <translation id="6989848892321993519">இந்த உரையில் <ph name="MIN_CHARACTERS" /> அல்லது அதற்கு மேற்பட்ட எழுத்துக்குறிகளைப் பயன்படுத்தவும் (தற்போது 1 எழுத்துக்குறியைப் பயன்படுத்துகிறீர்கள்).</translation> +<translation id="7033340931668032222">ஒலியளவை மாற்ற மேலும் கீழும் அசைக்கவும்</translation> <translation id="709897737746224366">கோரிய வடிவமைப்பில் தருக.</translation> <translation id="7118469954320184356">விவரம் எதுவுமில்லை.</translation> <translation id="7139483182332611405">முன்னுரை</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">கிராஃபிக்ஸ் சின்னம்</translation> <translation id="8583702881314752957">விளக்கப் பட்டியல்</translation> <translation id="8597182159515967513">தலைப்பு</translation> +<translation id="8603553056539299761">நகர்த்த இடது புறமும் வலது புறமும் அசைக்கவும்</translation> <translation id="860475260694818407">உள்ளடக்க அட்டவணை</translation> <translation id="8613126697340063924">தொலைநிலை இயக்கத்தைக் கட்டுப்படுத்தவும்</translation> <translation id="862370744433916922">துணை தலைப்பு</translation> diff --git a/chromium/content/app/strings/translations/content_strings_te.xtb b/chromium/content/app/strings/translations/content_strings_te.xtb index cbbb3642c59..18201342a1b 100644 --- a/chromium/content/app/strings/translations/content_strings_te.xtb +++ b/chromium/content/app/strings/translations/content_strings_te.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">మీడియా అంశం డౌన్లోడ్ చేయి</translation> <translation id="6981594929165378967">చొప్పించడం</translation> <translation id="6989848892321993519">దయచేసి ఈ వచనాన్ని <ph name="MIN_CHARACTERS" /> లేదా అంతకంటే ఎక్కువ అక్షరాలకు పొడిగించండి (ప్రస్తుతం మీరు 1 అక్షరాన్ని ఉపయోగిస్తున్నారు).</translation> +<translation id="7033340931668032222">వాల్యూమ్ మార్చడానికి కిందకు లేదా పైకి బటన్ను ఉపయోగించండి</translation> <translation id="709897737746224366">దయచేసి అభ్యర్థించిన ఆకృతీకరణను సరిపోల్చండి.</translation> <translation id="7118469954320184356">వివరణ అందుబాటులో లేదు.</translation> <translation id="7139483182332611405">ముందుమాట</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">గ్రాఫిక్స్ చిహ్నం</translation> <translation id="8583702881314752957">నిర్వచన జాబితా</translation> <translation id="8597182159515967513">శీర్షిక</translation> +<translation id="8603553056539299761">దాటవేయడానికి ఎడమ లేదా కుడి బటన్ను ఉపయోగించండి</translation> <translation id="860475260694818407">కంటెంట్ల పట్టిక</translation> <translation id="8613126697340063924">రిమోట్ ప్లేబ్యాక్ను నియంత్రిస్తుంది</translation> <translation id="862370744433916922">ఉపశీర్షిక</translation> diff --git a/chromium/content/app/strings/translations/content_strings_th.xtb b/chromium/content/app/strings/translations/content_strings_th.xtb index 23a9c518204..e4c09f42ca1 100644 --- a/chromium/content/app/strings/translations/content_strings_th.xtb +++ b/chromium/content/app/strings/translations/content_strings_th.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">ดาวน์โหลดสื่อ</translation> <translation id="6981594929165378967">การแทรก</translation> <translation id="6989848892321993519">โปรดกรอกข้อความนี้ให้มีอักขระอย่างน้อย <ph name="MIN_CHARACTERS" /> ตัว (ตอนนี้คุณมี 1 ตัว)</translation> +<translation id="7033340931668032222">ขึ้นและลงเพื่อเปลี่ยนระดับเสียง</translation> <translation id="709897737746224366">โปรดจับคู่รูปแบบที่ร้องขอ</translation> <translation id="7118469954320184356">ไม่มีคำอธิบาย</translation> <translation id="7139483182332611405">ส่วนนำ</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">สัญลักษณ์กราฟิก</translation> <translation id="8583702881314752957">รายการคำจำกัดความ</translation> <translation id="8597182159515967513">ส่วนหัว</translation> +<translation id="8603553056539299761">ซ้ายและขวาเพื่อกรอ</translation> <translation id="860475260694818407">สารบัญ</translation> <translation id="8613126697340063924">ควบคุมการเล่นระยะไกล</translation> <translation id="862370744433916922">คำบรรยาย</translation> diff --git a/chromium/content/app/strings/translations/content_strings_tr.xtb b/chromium/content/app/strings/translations/content_strings_tr.xtb index d965bc1f19e..7e8e4b9ef5d 100644 --- a/chromium/content/app/strings/translations/content_strings_tr.xtb +++ b/chromium/content/app/strings/translations/content_strings_tr.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">medyayı indir</translation> <translation id="6981594929165378967">ekleme</translation> <translation id="6989848892321993519">Lütfen bu metni <ph name="MIN_CHARACTERS" /> karakter veya daha fazla olacak şekilde uzatın (şu anda 1 karakter kullanıyorsunuz).</translation> +<translation id="7033340931668032222">sesi değiştirmek için yukarı ve aşağı</translation> <translation id="709897737746224366">Lütfen istenen biçimi eşleştirin.</translation> <translation id="7118469954320184356">Açıklama yok.</translation> <translation id="7139483182332611405">önsöz</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">grafik sembolü</translation> <translation id="8583702881314752957">tanım listesi</translation> <translation id="8597182159515967513">başlık</translation> +<translation id="8603553056539299761">belirli bir yere gitmek için sol ve sağ</translation> <translation id="860475260694818407">içindekiler</translation> <translation id="8613126697340063924">uzaktan oynatmayı kontrol et</translation> <translation id="862370744433916922">alt başlık</translation> diff --git a/chromium/content/app/strings/translations/content_strings_uk.xtb b/chromium/content/app/strings/translations/content_strings_uk.xtb index 54d3f71e7f3..29d136d694e 100644 --- a/chromium/content/app/strings/translations/content_strings_uk.xtb +++ b/chromium/content/app/strings/translations/content_strings_uk.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">завантажити медіафайл</translation> <translation id="6981594929165378967">вставлення</translation> <translation id="6989848892321993519">У тексті має бути не менше стількох символів: <ph name="MIN_CHARACTERS" />. Наразі ви ввели 1 символ.</translation> +<translation id="7033340931668032222">угору та вниз, щоб змінити гучність</translation> <translation id="709897737746224366">Виберіть потрібний формат.</translation> <translation id="7118469954320184356">Немає опису.</translation> <translation id="7139483182332611405">передмова</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">графічний символ</translation> <translation id="8583702881314752957">список визначень</translation> <translation id="8597182159515967513">заголовок</translation> +<translation id="8603553056539299761">уліво та вправо, щоб шукати</translation> <translation id="860475260694818407">зміст</translation> <translation id="8613126697340063924">керувати віддаленим відтворенням</translation> <translation id="862370744433916922">підзаголовок</translation> diff --git a/chromium/content/app/strings/translations/content_strings_vi.xtb b/chromium/content/app/strings/translations/content_strings_vi.xtb index 3e89109d1fa..a95f7500286 100644 --- a/chromium/content/app/strings/translations/content_strings_vi.xtb +++ b/chromium/content/app/strings/translations/content_strings_vi.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">tải xuống phương tiện</translation> <translation id="6981594929165378967">chèn</translation> <translation id="6989848892321993519">Vui lòng kéo dài văn bản này thành <ph name="MIN_CHARACTERS" /> ký tự trở lên (bạn hiện đang sử dụng 1 ký tự).</translation> +<translation id="7033340931668032222">lên và xuống để thay đổi âm lượng</translation> <translation id="709897737746224366">Vui lòng khớp với định dạng được yêu cầu.</translation> <translation id="7118469954320184356">Không có nội dung mô tả.</translation> <translation id="7139483182332611405">lời nói đầu</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">biểu tượng đồ họa</translation> <translation id="8583702881314752957">danh sách định nghĩa</translation> <translation id="8597182159515967513">đầu đề</translation> +<translation id="8603553056539299761">trái và phải để tìm kiếm</translation> <translation id="860475260694818407">mục lục</translation> <translation id="8613126697340063924">điều khiển phát lại từ xa</translation> <translation id="862370744433916922">phụ đề</translation> diff --git a/chromium/content/app/strings/translations/content_strings_zh-CN.xtb b/chromium/content/app/strings/translations/content_strings_zh-CN.xtb index 0460dc9eef2..61f983db18c 100644 --- a/chromium/content/app/strings/translations/content_strings_zh-CN.xtb +++ b/chromium/content/app/strings/translations/content_strings_zh-CN.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">下载媒体</translation> <translation id="6981594929165378967">插入</translation> <translation id="6989848892321993519">请将该内容增加到 <ph name="MIN_CHARACTERS" /> 个或更多字符(目前您使用了 1 个字符)。</translation> +<translation id="7033340931668032222">上下键用于更改音量</translation> <translation id="709897737746224366">请与所请求的格式保持一致。</translation> <translation id="7118469954320184356">尚无说明。</translation> <translation id="7139483182332611405">序言</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">图形符号</translation> <translation id="8583702881314752957">定义列表</translation> <translation id="8597182159515967513">标题</translation> +<translation id="8603553056539299761">左右键用于快进/快退</translation> <translation id="860475260694818407">目录</translation> <translation id="8613126697340063924">控制远程播放</translation> <translation id="862370744433916922">副标题</translation> diff --git a/chromium/content/app/strings/translations/content_strings_zh-TW.xtb b/chromium/content/app/strings/translations/content_strings_zh-TW.xtb index bbd73f82bd3..c67b2e8af19 100644 --- a/chromium/content/app/strings/translations/content_strings_zh-TW.xtb +++ b/chromium/content/app/strings/translations/content_strings_zh-TW.xtb @@ -176,6 +176,7 @@ <translation id="6941933287844615239">下載媒體</translation> <translation id="6981594929165378967">插入</translation> <translation id="6989848892321993519">請將這段文字加長到 <ph name="MIN_CHARACTERS" /> 個字元以上 (目前已有 1 個字元)。</translation> +<translation id="7033340931668032222">上下鍵可調整音量</translation> <translation id="709897737746224366">請符合要求的格式。</translation> <translation id="7118469954320184356">目前沒有說明。</translation> <translation id="7139483182332611405">前言</translation> @@ -227,6 +228,7 @@ <translation id="8550857728288566671">圖形符號</translation> <translation id="8583702881314752957">定義清單</translation> <translation id="8597182159515967513">標題</translation> +<translation id="8603553056539299761">左右鍵可調整播放進度</translation> <translation id="860475260694818407">目錄</translation> <translation id="8613126697340063924">控制遠端播放</translation> <translation id="862370744433916922">副標題</translation> diff --git a/chromium/content/browser/BUILD.gn b/chromium/content/browser/BUILD.gn index 38b6a3185b1..78e8ed893a2 100644 --- a/chromium/content/browser/BUILD.gn +++ b/chromium/content/browser/BUILD.gn @@ -59,6 +59,7 @@ jumbo_source_set("browser") { "//components/network_session_configurator/browser", "//components/offline_pages/buildflags", "//components/offline_pages/core/request_header", + "//components/os_crypt", "//components/rappor", "//components/services/filesystem:lib", "//components/services/leveldb:lib", diff --git a/chromium/content/browser/DEPS b/chromium/content/browser/DEPS index 0bc0b902738..edc485a8651 100644 --- a/chromium/content/browser/DEPS +++ b/chromium/content/browser/DEPS @@ -28,6 +28,7 @@ include_rules = [ "+components/variations/net/variations_http_headers.h", "+components/viz", "+components/cbor", + "+components/os_crypt/os_crypt_switches.h", "+content/public/app", "+content/public/browser", diff --git a/chromium/content/browser/appcache/appcache_browsertest.cc b/chromium/content/browser/appcache/appcache_browsertest.cc index 4a369037f37..b98ee28e771 100644 --- a/chromium/content/browser/appcache/appcache_browsertest.cc +++ b/chromium/content/browser/appcache/appcache_browsertest.cc @@ -4,10 +4,19 @@ #include <stdint.h> #include "base/bind.h" +#include "base/run_loop.h" +#include "base/strings/strcat.h" #include "base/strings/utf_string_conversions.h" +#include "base/test/bind_test_util.h" #include "base/test/scoped_feature_list.h" #include "build/build_config.h" #include "content/browser/appcache/appcache_subresource_url_factory.h" +#include "content/public/browser/navigation_entry.h" +#include "content/public/browser/render_frame_host.h" +#include "content/public/browser/render_process_host.h" +#include "content/public/browser/ssl_status.h" +#include "content/public/browser/storage_partition.h" +#include "content/public/browser/web_contents.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/content_browser_test.h" #include "content/public/test/content_browser_test_utils.h" @@ -19,6 +28,8 @@ #include "net/test/embedded_test_server/http_request.h" #include "net/test/embedded_test_server/http_response.h" #include "services/network/public/cpp/features.h" +#include "services/network/public/mojom/network_context.mojom.h" + namespace content { // This class currently enables the network service feature, which allows us to @@ -105,4 +116,71 @@ IN_PROC_BROWSER_TEST_F(AppCacheNetworkServiceBrowserTest, } #endif +// Regression test for crbug.com/968179. +IN_PROC_BROWSER_TEST_F(AppCacheNetworkServiceBrowserTest, + CacheableResourcesReuse) { + net::EmbeddedTestServer embedded_test_server; + + std::string manifest_nonce = "# Version 1"; + int resource_request_count = 0; + embedded_test_server.RegisterRequestHandler(base::BindLambdaForTesting( + [&](const net::test_server::HttpRequest& request) + -> std::unique_ptr<net::test_server::HttpResponse> { + if (request.GetURL().path() != "/appcache/cache_reuse.manifest") { + ++resource_request_count; + return nullptr; + } + + // Return a dynamically generated manifest, to trigger AppCache updates. + auto http_response = + std::make_unique<net::test_server::BasicHttpResponse>(); + http_response->set_content_type("text/cache-manifest"); + http_response->set_content(base::StrCat({ + "CACHE MANIFEST\n", + manifest_nonce, + "\n/appcache/cache_reuse.html\n", + })); + return http_response; + })); + + embedded_test_server.SetSSLConfig(net::EmbeddedTestServer::CERT_OK, + net::SSLServerConfig()); + embedded_test_server.ServeFilesFromSourceDirectory(GetTestDataFilePath()); + ASSERT_TRUE(embedded_test_server.Start()); + + GURL main_url = embedded_test_server.GetURL("/appcache/cache_reuse.html"); + + // First navigation populates AppCache. + { + EXPECT_TRUE(NavigateToURL(shell(), main_url)); + base::string16 expected_title = base::ASCIIToUTF16("AppCache primed"); + TitleWatcher title_watcher(shell()->web_contents(), expected_title); + EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); + } + + // Flush the HTTP cache so cache_reuse.html won't be served from there. + base::RunLoop run_loop; + content::StoragePartition* storage_partition = shell() + ->web_contents() + ->GetMainFrame() + ->GetProcess() + ->GetStoragePartition(); + storage_partition->GetNetworkContext()->ClearHttpCache( + base::Time(), base::Time::Max(), nullptr, run_loop.QuitClosure()); + run_loop.Run(); + + // Second navigation triggers an AppCache update. + resource_request_count = 0; + manifest_nonce = "# Version 2"; + { + EXPECT_TRUE(NavigateToURL(shell(), main_url)); + base::string16 expected_title = base::ASCIIToUTF16("AppCache updated"); + TitleWatcher title_watcher(shell()->web_contents(), expected_title); + EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); + } + + // The AppCache update should only reload the manifest. + EXPECT_EQ(0, resource_request_count); +} + } // namespace content diff --git a/chromium/content/browser/appcache/appcache_update_job.cc b/chromium/content/browser/appcache/appcache_update_job.cc index afeb14b9751..229b2affbae 100644 --- a/chromium/content/browser/appcache/appcache_update_job.cc +++ b/chromium/content/browser/appcache/appcache_update_job.cc @@ -70,10 +70,72 @@ bool IsEvictableError(AppCacheUpdateJob::ResultType result, } bool CanUseExistingResource(const net::HttpResponseInfo* http_info) { + if (!http_info->headers) + return false; + + base::Time request_time = http_info->request_time; + base::Time response_time = http_info->response_time; + + // The logic below works around the following confluence of problems. + // + // 1) If a cached response contains a Last-Modified header, + // AppCacheUpdateJob::URLFetcher::AddConditionalHeaders() adds an + // If-Modified-Since header, so the server may return an HTTP 304 Not Modified + // response. AppCacheUpdateJob::HandleUrlFetchCompleted() reuses the existing + // cache entry when a 304 is received, even though the HTTP specification + // mandates updating the cached headers with the headers in the 304 response. + // + // This deviation from the HTTP specification is Web-observable when AppCache + // resources are served with Last-Modified and Cache-Control: max-age headers. + // Specifically, if a server returns a 304 with a Cache-Control: max-age + // header, the response stored in AppCache should be updated to reflect the + // new cache expiration time. Instead, Chrome ignores all the headers in the + // 304 response, so the Cache-Control: max-age directive is discarded. + // + // In other words, once a cached resource's lifetime expires, 304 responses + // won't refresh its lifetime. Chrome gets stuck in a cycle where it sends + // If-Modified-Since requests, the server responds with 304, and the response + // headers are discarded. + // + // 2) The implementation of + // AppCacheUpdateJob::UpdateURLLoaderRequest::OnReceiveResponse() introduced + // in https://crrev.com/c/599359 did not populate |request_time| and + // |response_time|. When the Network Service was enabled, caches got populated + // with the default value of base::Time, which is the Windows epoch. So, + // cached entries with max-age values below ~40 years will require + // re-validation. https://crrev.com/c/1636266 fixed the cache population bug, + // but did not address the incorrect times that have already been written to + // users' disks. + // + // The 1st problem, on its own, hasn't had a large impact. This is likely + // because we have been advising sites to set max-age=31536000 (~1 year) for + // immutable resources, and most AppCache caches have been getting evicted + // before the entries' max-age expired. However, the 2nd problem caused us to + // create a large number of expired cache entries, and the unnecessary + // If-Modified-Since requests are causing noticeable levels of traffic. + // + // The logic below is a workaround while a longer-term fix gets developed and + // deployed. We'll consider all cache entries with invalid times to have been + // created on Tue, Jan 29 2019. This is the day when M72 was released to + // Chrome's Stable channel, and was chosen because M72 had the first large + // Network Service deployment. + static constexpr base::Time::Exploded kInvalidTimePlaceholderExploded = { + 2019, 1, 2, 29, 0, 0, 0, 0}; + constexpr base::Time default_initialized_time; + if (request_time == default_initialized_time) { + bool conversion_succeeded = base::Time::FromUTCExploded( + kInvalidTimePlaceholderExploded, &request_time); + DCHECK(conversion_succeeded); + } + if (response_time == default_initialized_time) { + bool conversion_succeeded = base::Time::FromUTCExploded( + kInvalidTimePlaceholderExploded, &response_time); + DCHECK(conversion_succeeded); + } + // Check HTTP caching semantics based on max-age and expiration headers. - if (!http_info->headers || http_info->headers->RequiresValidation( - http_info->request_time, - http_info->response_time, base::Time::Now())) { + if (http_info->headers->RequiresValidation(request_time, response_time, + base::Time::Now())) { return false; } diff --git a/chromium/content/browser/appcache/appcache_update_url_loader_request.cc b/chromium/content/browser/appcache/appcache_update_url_loader_request.cc index dd51fd382ee..eebe377910b 100644 --- a/chromium/content/browser/appcache/appcache_update_url_loader_request.cc +++ b/chromium/content/browser/appcache/appcache_update_url_loader_request.cc @@ -137,7 +137,7 @@ void AppCacheUpdateJob::UpdateURLLoaderRequest::OnReceiveResponse( // Populate other fields in the HttpResponseInfo class. It would be good to // have a helper function which populates the HttpResponseInfo structure from // the ResourceResponseHead structure. - http_response_info_.reset(new net::HttpResponseInfo()); + http_response_info_ = std::make_unique<net::HttpResponseInfo>(); if (response_head.ssl_info.has_value()) http_response_info_->ssl_info = *response_head.ssl_info; http_response_info_->headers = response_head.headers; @@ -148,6 +148,8 @@ void AppCacheUpdateJob::UpdateURLLoaderRequest::OnReceiveResponse( response_head.alpn_negotiated_protocol; http_response_info_->connection_info = response_head.connection_info; http_response_info_->remote_endpoint = response_head.remote_endpoint; + http_response_info_->request_time = response_head.request_time; + http_response_info_->response_time = response_head.response_time; fetcher_->OnResponseStarted(net::OK); } diff --git a/chromium/content/browser/browser_main_runner_impl.cc b/chromium/content/browser/browser_main_runner_impl.cc index 28e6d582c17..11845c22119 100644 --- a/chromium/content/browser/browser_main_runner_impl.cc +++ b/chromium/content/browser/browser_main_runner_impl.cc @@ -181,7 +181,8 @@ void BrowserMainRunnerImpl::Shutdown() { main_loop_->PreShutdown(); // Finalize the startup tracing session if it is still active. - TracingControllerImpl::GetInstance()->FinalizeStartupTracingIfNeeded(); + if (TracingControllerImpl::GetInstance()) + TracingControllerImpl::GetInstance()->FinalizeStartupTracingIfNeeded(); { // The trace event has to stay between profiler creation and destruction. diff --git a/chromium/content/browser/devtools/devtools_session_encoding.cc b/chromium/content/browser/devtools/devtools_session_encoding.cc index c15d06271cc..e80f003e251 100644 --- a/chromium/content/browser/devtools/devtools_session_encoding.cc +++ b/chromium/content/browser/devtools/devtools_session_encoding.cc @@ -37,9 +37,7 @@ class ContentShellPlatform : public Platform { }; } // namespace bool EnableInternalDevToolsBinaryProtocol() { - static bool disabled = base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kDisableInternalDevToolsBinaryProtocol); - return !disabled; + return false; } // TODO(johannes): Push error handling to client code after devtools_session.cc diff --git a/chromium/content/browser/frame_host/frame_tree_node.cc b/chromium/content/browser/frame_host/frame_tree_node.cc index f0a1ad891d3..fff13c33952 100644 --- a/chromium/content/browser/frame_host/frame_tree_node.cc +++ b/chromium/content/browser/frame_host/frame_tree_node.cc @@ -164,17 +164,42 @@ FrameTreeNode::~FrameTreeNode() { g_frame_tree_node_id_map.Get().erase(frame_tree_node_id_); + bool did_stop_loading = false; + if (navigation_request_) { + navigation_request_.reset(); // PlzNavigate: if a frame with a pending navigation is detached, make sure // the WebContents (and its observers) update their loading state. - navigation_request_.reset(); - DidStopLoading(); + did_stop_loading = true; } - // ~SiteProcessCountTracker DCHECKs in some tests if CleanUpNavigation is not - // called last. Ideally this would be closer to (possible before) the - // ResetLoadingState() call above. - render_manager_.CleanUpNavigation(); + // ~SiteProcessCountTracker DCHECKs in some tests if the speculative + // RenderFrameHostImpl is not destroyed last. Ideally this would be closer to + // (possible before) the ResetLoadingState() call above. + // + // There is an inherent race condition causing bugs 838348/915179/et al, where + // the renderer may have committed the speculative main frame and the browser + // has not heard about it yet. If this is a main frame, then in that case the + // speculative RenderFrame was unable to be deleted (it is owned by the + // renderer) and we should not be able to cancel the navigation at this point. + // CleanUpNavigation() would normally be called here but it will try to undo + // the navigation and expose the race condition. When it replaces the main + // frame with a RenderFrameProxy, that leaks the committed main frame, leaving + // the frame and its friend group with pointers that will become invalid + // shortly as we are shutting everything down and deleting the RenderView etc. + // We avoid this problematic situation by not calling CleanUpNavigation() or + // DiscardUnusedFrame() here. The speculative RenderFrameHost is simply + // returned and deleted immediately. This satisfies the requirement that the + // speculative RenderFrameHost is removed from the RenderFrameHostManager + // before it is destroyed. + if (render_manager_.speculative_frame_host()) { + did_stop_loading |= render_manager_.speculative_frame_host()->is_loading(); + render_manager_.UnsetSpeculativeRenderFrameHost(); + } + + if (did_stop_loading) + DidStopLoading(); + DCHECK(!IsLoading()); } diff --git a/chromium/content/browser/frame_host/navigation_controller_delegate.h b/chromium/content/browser/frame_host/navigation_controller_delegate.h index 3a1e77dca06..2615790454e 100644 --- a/chromium/content/browser/frame_host/navigation_controller_delegate.h +++ b/chromium/content/browser/frame_host/navigation_controller_delegate.h @@ -56,6 +56,10 @@ class NavigationControllerDelegate { virtual void ActivateAndShowRepostFormWarningDialog() = 0; virtual bool HasAccessedInitialDocument() = 0; + // TODO(crbug.com/934637): Remove when pdf and any inner web contents user + // gesture is properly propagated. + virtual bool HadInnerWebContents() = 0; + // This method is needed, since we are no longer guaranteed that the // embedder for NavigationController will be a WebContents object. virtual WebContents* GetWebContents() = 0; diff --git a/chromium/content/browser/frame_host/navigation_controller_impl.cc b/chromium/content/browser/frame_host/navigation_controller_impl.cc index d47e3fba4fb..25f8796f96b 100644 --- a/chromium/content/browser/frame_host/navigation_controller_impl.cc +++ b/chromium/content/browser/frame_host/navigation_controller_impl.cc @@ -3410,8 +3410,12 @@ void NavigationControllerImpl::SetShouldSkipOnBackForwardUIIfNeeded( // Note that for a subframe, previous_document_was_activated is true if the // gesture happened in any subframe (propagated to main frame) or in the main // frame itself. + // TODO(crbug.com/934637): Remove the check for HadInnerWebContents() when + // pdf and any inner web contents user gesture is properly propagated. This is + // a temporary fix for history intervention to be disabled for pdfs + // (crbug.com/965434). if (replace_entry || previous_document_was_activated || - !is_renderer_initiated) { + !is_renderer_initiated || delegate_->HadInnerWebContents()) { if (last_committed_entry_index_ != -1) { UMA_HISTOGRAM_BOOLEAN( "Navigation.BackForward.SetShouldSkipOnBackForwardUI", false); diff --git a/chromium/content/browser/frame_host/render_frame_host_impl.cc b/chromium/content/browser/frame_host/render_frame_host_impl.cc index 64bd8abb107..fdac7116419 100644 --- a/chromium/content/browser/frame_host/render_frame_host_impl.cc +++ b/chromium/content/browser/frame_host/render_frame_host_impl.cc @@ -1239,7 +1239,8 @@ void RenderFrameHostImpl::ExecuteJavaScript(const base::string16& javascript, DCHECK_CURRENTLY_ON(BrowserThread::UI); CHECK(CanExecuteJavaScript()); - GetNavigationControl()->JavaScriptExecuteRequest(javascript, + const bool wants_result = !callback.is_null(); + GetNavigationControl()->JavaScriptExecuteRequest(javascript, wants_result, std::move(callback)); } @@ -1251,8 +1252,9 @@ void RenderFrameHostImpl::ExecuteJavaScriptInIsolatedWorld( DCHECK_GT(world_id, ISOLATED_WORLD_ID_GLOBAL); DCHECK_LE(world_id, ISOLATED_WORLD_ID_MAX); + const bool wants_result = !callback.is_null(); GetNavigationControl()->JavaScriptExecuteRequestInIsolatedWorld( - javascript, world_id, std::move(callback)); + javascript, wants_result, world_id, std::move(callback)); } void RenderFrameHostImpl::ExecuteJavaScriptForTests( @@ -1261,8 +1263,9 @@ void RenderFrameHostImpl::ExecuteJavaScriptForTests( DCHECK_CURRENTLY_ON(BrowserThread::UI); const bool has_user_gesture = false; + const bool wants_result = !callback.is_null(); GetNavigationControl()->JavaScriptExecuteRequestForTests( - javascript, has_user_gesture, std::move(callback)); + javascript, wants_result, has_user_gesture, std::move(callback)); } void RenderFrameHostImpl::ExecuteJavaScriptWithUserGestureForTests( @@ -1271,7 +1274,7 @@ void RenderFrameHostImpl::ExecuteJavaScriptWithUserGestureForTests( const bool has_user_gesture = true; GetNavigationControl()->JavaScriptExecuteRequestForTests( - javascript, has_user_gesture, base::NullCallback()); + javascript, false, has_user_gesture, base::NullCallback()); } void RenderFrameHostImpl::CopyImageAt(int x, int y) { @@ -1741,12 +1744,12 @@ bool RenderFrameHostImpl::CreateRenderFrame(int previous_routing_id, return true; } -void RenderFrameHostImpl::DeleteRenderFrame() { +void RenderFrameHostImpl::DeleteRenderFrame(FrameDeleteIntention intent) { if (!is_active()) return; if (render_frame_created_) { - Send(new FrameMsg_Delete(routing_id_)); + Send(new FrameMsg_Delete(routing_id_, intent)); // If this subframe has an unload handler (and isn't speculative), ensure // that it has a chance to execute by delaying process cleanup. This will @@ -2014,7 +2017,8 @@ void RenderFrameHostImpl::RemoveChild(FrameTreeNode* child) { // observers are notified of its deletion. std::unique_ptr<FrameTreeNode> node_to_delete(std::move(*iter)); children_.erase(iter); - node_to_delete->current_frame_host()->DeleteRenderFrame(); + node_to_delete->current_frame_host()->DeleteRenderFrame( + FrameDeleteIntention::kNotMainFrame); // Speculative RenderFrameHosts are deleted by the FrameTreeNode's // RenderFrameHostManager's destructor. RenderFrameProxyHosts send // FrameMsg_Delete automatically in the destructor. @@ -2037,7 +2041,8 @@ void RenderFrameHostImpl::ResetChildren() { // this RenderFrameHostImpl to detach the current frame's children, rather // than messaging each child's current frame host... for (auto& child : children) - child->current_frame_host()->DeleteRenderFrame(); + child->current_frame_host()->DeleteRenderFrame( + FrameDeleteIntention::kNotMainFrame); } void RenderFrameHostImpl::SetLastCommittedUrl(const GURL& url) { @@ -2364,7 +2369,7 @@ void RenderFrameHostImpl::DetachFromProxy() { return; // Start pending deletion on this frame and its children. - DeleteRenderFrame(); + DeleteRenderFrame(FrameDeleteIntention::kNotMainFrame); StartPendingDeletionOnSubtree(); // Some children with no unload handler may be eligible for immediate // deletion. Cut the dead branches now. This is a performance optimization. @@ -4461,7 +4466,7 @@ void RenderFrameHostImpl::StartPendingDeletionOnSubtree() { local_ancestor = rfh; } - local_ancestor->DeleteRenderFrame(); + local_ancestor->DeleteRenderFrame(FrameDeleteIntention::kNotMainFrame); if (local_ancestor != child) { child->unload_state_ = child->GetSuddenTerminationDisablerState(blink::kUnloadHandler) diff --git a/chromium/content/browser/frame_host/render_frame_host_impl.h b/chromium/content/browser/frame_host/render_frame_host_impl.h index 3186e56cfa2..1da0a57d6bc 100644 --- a/chromium/content/browser/frame_host/render_frame_host_impl.h +++ b/chromium/content/browser/frame_host/render_frame_host_impl.h @@ -41,6 +41,7 @@ #include "content/common/content_export.h" #include "content/common/content_security_policy/csp_context.h" #include "content/common/frame.mojom.h" +#include "content/common/frame_delete_intention.h" #include "content/common/frame_message_enums.h" #include "content/common/frame_replication_state.h" #include "content/common/image_downloader/image_downloader.mojom.h" @@ -328,7 +329,7 @@ class CONTENT_EXPORT RenderFrameHostImpl // Deletes the RenderFrame in the renderer process. // Postcondition: |is_active()| will return false. - void DeleteRenderFrame(); + void DeleteRenderFrame(FrameDeleteIntention intent); // Tracks whether the RenderFrame for this RenderFrameHost has been created in // the renderer process. This is currently only used for subframes. diff --git a/chromium/content/browser/frame_host/render_frame_host_manager.cc b/chromium/content/browser/frame_host/render_frame_host_manager.cc index 56aa5739aa3..8424a63b37a 100644 --- a/chromium/content/browser/frame_host/render_frame_host_manager.cc +++ b/chromium/content/browser/frame_host/render_frame_host_manager.cc @@ -786,7 +786,10 @@ void RenderFrameHostManager::CleanUpNavigation() { std::unique_ptr<RenderFrameHostImpl> RenderFrameHostManager::UnsetSpeculativeRenderFrameHost() { speculative_render_frame_host_->GetProcess()->RemovePendingView(); - speculative_render_frame_host_->DeleteRenderFrame(); + speculative_render_frame_host_->DeleteRenderFrame( + frame_tree_node_->parent() + ? FrameDeleteIntention::kNotMainFrame + : FrameDeleteIntention::kSpeculativeMainFrameForNavigationCancelled); return std::move(speculative_render_frame_host_); } @@ -2128,7 +2131,6 @@ RenderFrameHostManager::GetSiteInstanceForNavigationRequest( // mode, it is possible for renderer-intiated navigations to be allowed to // go cross-process. Check it first. bool can_renderer_initiate_transfer = - render_frame_host_->IsRenderFrameLive() && IsURLHandledByNetworkStack(request.common_params().url) && IsRendererTransferNeededForNavigation(render_frame_host_.get(), request.common_params().url); diff --git a/chromium/content/browser/renderer_host/input/input_router_impl.cc b/chromium/content/browser/renderer_host/input/input_router_impl.cc index 0e28047efd6..0eaa9ded4b3 100644 --- a/chromium/content/browser/renderer_host/input/input_router_impl.cc +++ b/chromium/content/browser/renderer_host/input/input_router_impl.cc @@ -621,10 +621,8 @@ void InputRouterImpl::TouchEventHandled( } } - bool should_stop_timeout_monitor = - !compositor_touch_action_enabled_ || - (compositor_touch_action_enabled_ && - touch_action_filter_.allowed_touch_action().has_value()); + // TODO(crbug.com/953547): find a proper way to stop the timeout monitor. + bool should_stop_timeout_monitor = true; // |touch_event_queue_| will forward to OnTouchEventAck when appropriate. touch_event_queue_.ProcessTouchAck(source, state, latency, touch_event.event.unique_touch_event_id, diff --git a/chromium/content/browser/renderer_host/input/input_router_impl_unittest.cc b/chromium/content/browser/renderer_host/input/input_router_impl_unittest.cc index b1ecd6ec5c4..f19d1ed21e8 100644 --- a/chromium/content/browser/renderer_host/input/input_router_impl_unittest.cc +++ b/chromium/content/browser/renderer_host/input/input_router_impl_unittest.cc @@ -2126,6 +2126,9 @@ TEST_P(InputRouterImplTest, TouchActionInCallback) { } TEST_P(InputRouterImplTest, TimeoutMonitorStopWithMainThreadTouchAction) { + // TODO(crbug.com/953547): enable this when the bug is fixed. + if (compositor_touch_action_enabled_) + return; SetUpForTouchAckTimeoutTest(1, 1); OnHasTouchEventHandlers(true); diff --git a/chromium/content/browser/renderer_host/render_process_host_impl.cc b/chromium/content/browser/renderer_host/render_process_host_impl.cc index f3a90e61f2b..0866af8555c 100644 --- a/chromium/content/browser/renderer_host/render_process_host_impl.cc +++ b/chromium/content/browser/renderer_host/render_process_host_impl.cc @@ -3451,6 +3451,7 @@ void RenderProcessHostImpl::Cleanup() { false /* already_dead */); info.status = base::TERMINATION_STATUS_NORMAL_TERMINATION; info.exit_code = 0; + PopulateTerminationInfoRendererFields(&info); for (auto& observer : observers_) { observer.RenderProcessExited(this, info); } @@ -3508,6 +3509,12 @@ void RenderProcessHostImpl::Cleanup() { std::make_unique<base::WeakPtrFactory<RenderProcessHostImpl>>(this); } +void RenderProcessHostImpl::PopulateTerminationInfoRendererFields( + ChildProcessTerminationInfo* info) { + info->renderer_has_visible_clients = VisibleClientCount() > 0; + info->renderer_was_subframe = GetFrameDepth() > 0; +} + void RenderProcessHostImpl::AddPendingView() { const bool had_pending_views = pending_views_++; if (!had_pending_views) @@ -4135,6 +4142,7 @@ void RenderProcessHostImpl::ProcessDied( #endif } } + PopulateTerminationInfoRendererFields(&info); child_process_launcher_.reset(); is_dead_ = true; @@ -4501,6 +4509,7 @@ void RenderProcessHostImpl::OnProcessLaunchFailed(int error_code) { ChildProcessTerminationInfo info; info.status = base::TERMINATION_STATUS_LAUNCH_FAILED; info.exit_code = error_code; + PopulateTerminationInfoRendererFields(&info); ProcessDied(true, &info); } diff --git a/chromium/content/browser/renderer_host/render_process_host_impl.h b/chromium/content/browser/renderer_host/render_process_host_impl.h index b001c2b104c..8ee98dfed01 100644 --- a/chromium/content/browser/renderer_host/render_process_host_impl.h +++ b/chromium/content/browser/renderer_host/render_process_host_impl.h @@ -647,6 +647,7 @@ class CONTENT_EXPORT RenderProcessHostImpl base::FilePath GetAecDumpFilePathWithExtensions(const base::FilePath& file); base::SequencedTaskRunner& GetAecDumpFileTaskRunner(); void NotifyRendererIfLockedToSite(); + void PopulateTerminationInfoRendererFields(ChildProcessTerminationInfo* info); static void OnMojoError(int render_process_id, const std::string& error); diff --git a/chromium/content/browser/renderer_host/render_view_host_delegate.cc b/chromium/content/browser/renderer_host/render_view_host_delegate.cc index 89feeaf9132..f8c11d0dac5 100644 --- a/chromium/content/browser/renderer_host/render_view_host_delegate.cc +++ b/chromium/content/browser/renderer_host/render_view_host_delegate.cc @@ -61,6 +61,10 @@ bool RenderViewHostDelegate::HasPersistentVideo() const { return false; } +bool RenderViewHostDelegate::IsSpatialNavigationDisabled() const { + return false; +} + RenderFrameHost* RenderViewHostDelegate::GetPendingMainFrame() { return nullptr; } diff --git a/chromium/content/browser/renderer_host/render_view_host_delegate.h b/chromium/content/browser/renderer_host/render_view_host_delegate.h index 3d15672209a..7ecbec7dab3 100644 --- a/chromium/content/browser/renderer_host/render_view_host_delegate.h +++ b/chromium/content/browser/renderer_host/render_view_host_delegate.h @@ -184,6 +184,9 @@ class CONTENT_EXPORT RenderViewHostDelegate { // Whether the WebContents as a persistent video. virtual bool HasPersistentVideo() const; + // Whether spatial navigation is permitted. + virtual bool IsSpatialNavigationDisabled() const; + // Returns the RenderFrameHost for a pending or speculative main frame // navigation for the page. Returns nullptr if there is no such navigation. virtual RenderFrameHost* GetPendingMainFrame(); diff --git a/chromium/content/browser/renderer_host/render_view_host_impl.cc b/chromium/content/browser/renderer_host/render_view_host_impl.cc index 5c17f54eaa2..2c4182e518c 100644 --- a/chromium/content/browser/renderer_host/render_view_host_impl.cc +++ b/chromium/content/browser/renderer_host/render_view_host_impl.cc @@ -566,6 +566,9 @@ const WebPreferences RenderViewHostImpl::ComputeWebPreferences() { prefs.spatial_navigation_enabled = command_line.HasSwitch( switches::kEnableSpatialNavigation); + if (delegate_ && delegate_->IsSpatialNavigationDisabled()) + prefs.spatial_navigation_enabled = false; + prefs.disable_reading_from_canvas = command_line.HasSwitch( switches::kDisableReadingFromCanvas); diff --git a/chromium/content/browser/site_per_process_browsertest.cc b/chromium/content/browser/site_per_process_browsertest.cc index 4b1e01a419f..eec2a9b2482 100644 --- a/chromium/content/browser/site_per_process_browsertest.cc +++ b/chromium/content/browser/site_per_process_browsertest.cc @@ -14467,6 +14467,42 @@ IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, actual_scroll_delta); } +// Check that if a frame starts a navigation, and the frame's current process +// dies before the response for the navigation comes back, the response will +// not trigger a process kill and will be allowed to commit in a new process. +// See https://crbug.com/968259. +IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, + ProcessDiesBeforeCrossSiteNavigationCompletes) { + GURL first_url(embedded_test_server()->GetURL("a.com", "/title1.html")); + EXPECT_TRUE(NavigateToURL(shell(), first_url)); + scoped_refptr<SiteInstanceImpl> first_site_instance( + web_contents()->GetMainFrame()->GetSiteInstance()); + + // Start a cross-site navigation and proceed only up to the request start. + GURL second_url(embedded_test_server()->GetURL("b.com", "/title1.html")); + TestNavigationManager delayer(web_contents(), second_url); + EXPECT_TRUE(ExecuteScript(shell(), JsReplace("location = $1", second_url))); + EXPECT_TRUE(delayer.WaitForRequestStart()); + + // Terminate the current a.com process. + RenderProcessHost* first_process = + web_contents()->GetMainFrame()->GetProcess(); + RenderProcessHostWatcher crash_observer( + first_process, RenderProcessHostWatcher::WATCH_FOR_PROCESS_EXIT); + EXPECT_TRUE(first_process->Shutdown(0)); + crash_observer.Wait(); + EXPECT_FALSE(web_contents()->GetMainFrame()->IsRenderFrameLive()); + + // Resume the cross-site navigation and ensure it commits in a new + // SiteInstance and process. + delayer.WaitForNavigationFinished(); + EXPECT_TRUE(web_contents()->GetMainFrame()->IsRenderFrameLive()); + EXPECT_NE(web_contents()->GetMainFrame()->GetProcess(), first_process); + EXPECT_NE(web_contents()->GetMainFrame()->GetSiteInstance(), + first_site_instance); + EXPECT_EQ(second_url, web_contents()->GetMainFrame()->GetLastCommittedURL()); +} + class FeaturePolicyPropagationToAuxiliaryBrowsingContextTest : public SitePerProcessFeaturePolicyJavaScriptBrowserTest, public testing::WithParamInterface<std::tuple< diff --git a/chromium/content/browser/utility_process_host.cc b/chromium/content/browser/utility_process_host.cc index 51f72c8ac9e..56f8ef5d1f3 100644 --- a/chromium/content/browser/utility_process_host.cc +++ b/chromium/content/browser/utility_process_host.cc @@ -45,6 +45,10 @@ #include "ui/base/ui_base_switches.h" #include "ui/gl/gl_switches.h" +#if defined(OS_MACOSX) +#include "components/os_crypt/os_crypt_switches.h" +#endif + #if defined(OS_WIN) #include "sandbox/win/src/sandbox_policy.h" #include "sandbox/win/src/sandbox_types.h" @@ -377,6 +381,7 @@ bool UtilityProcessHost::StartProcess() { service_manager::switches::kNoSandbox, #if defined(OS_MACOSX) service_manager::switches::kEnableSandboxLogging, + os_crypt::switches::kUseMockKeychain, #endif switches::kDisableTestCerts, switches::kEnableLogging, diff --git a/chromium/content/browser/web_contents/web_contents_android.cc b/chromium/content/browser/web_contents/web_contents_android.cc index 7543b5ffdb7..d48a6cc2b96 100644 --- a/chromium/content/browser/web_contents/web_contents_android.cc +++ b/chromium/content/browser/web_contents/web_contents_android.cc @@ -666,6 +666,13 @@ void WebContentsAndroid::SetOverscrollRefreshHandler( overscroll_refresh_handler)); } +void WebContentsAndroid::SetSpatialNavigationDisabled( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& obj, + bool disabled) { + web_contents_->SetSpatialNavigationDisabled(disabled); +} + void WebContentsAndroid::WriteContentBitmapToDisk( JNIEnv* env, const JavaParamRef<jobject>& obj, diff --git a/chromium/content/browser/web_contents/web_contents_android.h b/chromium/content/browser/web_contents/web_contents_android.h index 2f818533244..d9d1a37b79d 100644 --- a/chromium/content/browser/web_contents/web_contents_android.h +++ b/chromium/content/browser/web_contents/web_contents_android.h @@ -181,6 +181,11 @@ class CONTENT_EXPORT WebContentsAndroid const base::android::JavaParamRef<jobject>& obj, const base::android::JavaParamRef<jobject>& overscroll_refresh_handler); + void SetSpatialNavigationDisabled( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& obj, + bool disabled); + // Relay the access from Java layer to RWHV::CopyFromSurface() through JNI. void WriteContentBitmapToDisk( JNIEnv* env, diff --git a/chromium/content/browser/web_contents/web_contents_impl.cc b/chromium/content/browser/web_contents/web_contents_impl.cc index 1491bf580c5..afb23ccce9d 100644 --- a/chromium/content/browser/web_contents/web_contents_impl.cc +++ b/chromium/content/browser/web_contents/web_contents_impl.cc @@ -592,6 +592,7 @@ WebContentsImpl::WebContentsImpl(BrowserContext* browser_context) #endif // !defined(OS_ANDROID) is_overlay_content_(false), showing_context_menu_(false), + had_inner_webcontents_(false), loading_weak_factory_(this), weak_factory_(this) { frame_tree_.SetFrameRemoveListener( @@ -687,7 +688,8 @@ WebContentsImpl::~WebContentsImpl() { // Do not update state as the WebContents is being destroyed. frame_tree_.root()->ResetNavigationRequest(true, true); if (root->speculative_frame_host()) { - root->speculative_frame_host()->DeleteRenderFrame(); + root->speculative_frame_host()->DeleteRenderFrame( + FrameDeleteIntention::kSpeculativeMainFrameForShutdown); root->speculative_frame_host()->SetRenderFrameCreated(false); root->speculative_frame_host()->ResetNavigationRequests(); } @@ -3513,6 +3515,10 @@ void WebContentsImpl::DidProceedOnInterstitial() { LoadingStateChanged(true, true, nullptr); } +bool WebContentsImpl::HadInnerWebContents() { + return had_inner_webcontents_; +} + void WebContentsImpl::DetachInterstitialPage(bool has_focus) { bool interstitial_pausing_throbber = ShowingInterstitialPage() && interstitial_page_->pause_throbber(); @@ -4423,6 +4429,9 @@ void WebContentsImpl::DidNavigateMainFramePostCommit( if (delegate_) delegate_->DidNavigateMainFramePostCommit(this); view_->SetOverscrollControllerEnabled(CanOverscrollContent()); + + if (!details.is_same_document && GetInnerWebContents().empty()) + had_inner_webcontents_ = false; } void WebContentsImpl::DidNavigateAnyFramePostCommit( @@ -5490,6 +5499,10 @@ bool WebContentsImpl::HasPersistentVideo() const { return has_persistent_video_; } +bool WebContentsImpl::IsSpatialNavigationDisabled() const { + return is_spatial_navigation_disabled_; +} + RenderFrameHost* WebContentsImpl::GetPendingMainFrame() { return GetRenderManager()->speculative_frame_host(); } @@ -5626,6 +5639,7 @@ void WebContentsImpl::FocusOuterAttachmentFrameChain() { } void WebContentsImpl::InnerWebContentsCreated(WebContents* inner_web_contents) { + had_inner_webcontents_ = true; for (auto& observer : observers_) observer.InnerWebContentsCreated(inner_web_contents); } @@ -6750,6 +6764,14 @@ void WebContentsImpl::SetHasPersistentVideo(bool has_persistent_video) { media_web_contents_observer()->RequestPersistentVideo(has_persistent_video); } +void WebContentsImpl::SetSpatialNavigationDisabled(bool disabled) { + if (is_spatial_navigation_disabled_ == disabled) + return; + + is_spatial_navigation_disabled_ = disabled; + NotifyPreferencesChanged(); +} + void WebContentsImpl::BrowserPluginGuestWillDetach() { WebContentsImpl* outermost = GetOutermostWebContents(); if (this != outermost && ContainsOrIsFocusedWebContents()) diff --git a/chromium/content/browser/web_contents/web_contents_impl.h b/chromium/content/browser/web_contents/web_contents_impl.h index d2c789a3480..9be280b6e06 100644 --- a/chromium/content/browser/web_contents/web_contents_impl.h +++ b/chromium/content/browser/web_contents/web_contents_impl.h @@ -664,6 +664,7 @@ class CONTENT_EXPORT WebContentsImpl : public WebContents, bool ShouldIgnoreUnresponsiveRenderer() override; bool HideDownloadUI() const override; bool HasPersistentVideo() const override; + bool IsSpatialNavigationDisabled() const override; RenderFrameHost* GetPendingMainFrame() override; void DidFirstVisuallyNonEmptyPaint(RenderViewHostImpl* source) override; void DidCommitAndDrawCompositorFrame(RenderViewHostImpl* source) override; @@ -885,6 +886,8 @@ class CONTENT_EXPORT WebContentsImpl : public WebContents, // Unpause the throbber if it was paused. void DidProceedOnInterstitial() override; + bool HadInnerWebContents() override; + // Forces overscroll to be disabled (used by touch emulation). void SetForceDisableOverscrollContent(bool force_disable); @@ -987,6 +990,9 @@ class CONTENT_EXPORT WebContentsImpl : public WebContents, // a video currently in Picture-in-Picture mode. void SetHasPictureInPictureVideo(bool has_picture_in_picture_video); + // Sets the spatial navigation state. + void SetSpatialNavigationDisabled(bool disabled); + #if defined(OS_ANDROID) // Called by FindRequestManager when all of the find match rects are in. void NotifyFindMatchRectsReply(int version, @@ -1825,6 +1831,8 @@ class CONTENT_EXPORT WebContentsImpl : public WebContents, bool has_persistent_video_ = false; + bool is_spatial_navigation_disabled_ = false; + bool is_currently_audible_ = false; bool was_ever_audible_ = false; @@ -1854,6 +1862,11 @@ class CONTENT_EXPORT WebContentsImpl : public WebContents, // WebContents can be found by using GetOuterWebContents(). Portal* portal_ = nullptr; + // TODO(crbug.com/934637): Remove this field when pdf/any inner web contents + // user gesture is properly propagated. This is a temporary fix for history + // intervention to be disabled for pdfs (crbug.com/965434). + bool had_inner_webcontents_; + base::WeakPtrFactory<WebContentsImpl> loading_weak_factory_; base::WeakPtrFactory<WebContentsImpl> weak_factory_; diff --git a/chromium/content/child/blink_platform_impl.cc b/chromium/content/child/blink_platform_impl.cc index e65e3629a22..3ce31a5ea07 100644 --- a/chromium/content/child/blink_platform_impl.cc +++ b/chromium/content/child/blink_platform_impl.cc @@ -137,6 +137,10 @@ static int ToMessageID(WebLocalizedString::Name name) { return IDS_AX_MEDIA_TIME_REMAINING_DISPLAY_HELP; case WebLocalizedString::kAXMediaOverflowButtonHelp: return IDS_AX_MEDIA_OVERFLOW_BUTTON_HELP; + case WebLocalizedString::kAXMediaTouchLessSeekAction: + return IDS_AX_MEDIA_TOUCHLESS_SEEK_ACTION; + case WebLocalizedString::kAXMediaTouchLessVolumeAction: + return IDS_AX_MEDIA_TOUCHLESS_VOLUME_ACTION; case WebLocalizedString::kAXMillisecondFieldText: return IDS_AX_MILLISECOND_FIELD_TEXT; case WebLocalizedString::kAXMinuteFieldText: diff --git a/chromium/content/common/BUILD.gn b/chromium/content/common/BUILD.gn index 080d08c52d8..775996a26f5 100644 --- a/chromium/content/common/BUILD.gn +++ b/chromium/content/common/BUILD.gn @@ -111,6 +111,7 @@ source_set("common") { "font_list_fontconfig.cc", "font_list_mac.mm", "font_list_win.cc", + "frame_delete_intention.h", "frame_message_enums.h", "frame_message_structs.cc", "frame_message_structs.h", diff --git a/chromium/content/common/cursors/webcursor.cc b/chromium/content/common/cursors/webcursor.cc index ba08cf18ccd..1ac3bb9b9d3 100644 --- a/chromium/content/common/cursors/webcursor.cc +++ b/chromium/content/common/cursors/webcursor.cc @@ -40,8 +40,14 @@ WebCursor::WebCursor(const CursorInfo& info) : info_(info) { ClampHotspot(); } -WebCursor::WebCursor(const WebCursor& other) : info_(other.info_) { - CopyPlatformData(other); +WebCursor::WebCursor(const WebCursor& other) { + CopyAllData(other); +} + +WebCursor& WebCursor::operator=(const WebCursor& other) { + CleanupPlatformData(); + CopyAllData(other); + return *this; } bool WebCursor::Deserialize(const base::Pickle* m, base::PickleIterator* iter) { @@ -98,6 +104,11 @@ bool WebCursor::operator!=(const WebCursor& other) const { return !(*this == other); } +void WebCursor::CopyAllData(const WebCursor& other) { + info_ = other.info_; + CopyPlatformData(other); +} + void WebCursor::ClampHotspot() { if (info_.type != WebCursorInfo::kTypeCustom) return; diff --git a/chromium/content/common/cursors/webcursor.h b/chromium/content/common/cursors/webcursor.h index 3a740af2e66..88b9cb2ba4f 100644 --- a/chromium/content/common/cursors/webcursor.h +++ b/chromium/content/common/cursors/webcursor.h @@ -35,6 +35,7 @@ class CONTENT_EXPORT WebCursor { WebCursor() = default; explicit WebCursor(const CursorInfo& info); explicit WebCursor(const WebCursor& other); + WebCursor& operator=(const WebCursor& other); ~WebCursor(); const CursorInfo& info() const { return info_; } @@ -67,6 +68,9 @@ class CONTENT_EXPORT WebCursor { // Returns true if this cursor's platform data matches that of |other|. bool IsPlatformDataEqual(const WebCursor& other) const; + // Copies all data from |other| to this object. + void CopyAllData(const WebCursor& other); + // Copies platform specific data from the WebCursor instance passed in. void CopyPlatformData(const WebCursor& other); diff --git a/chromium/content/common/frame.mojom b/chromium/content/common/frame.mojom index 7deab3ea78f..1b1f8704d3f 100644 --- a/chromium/content/common/frame.mojom +++ b/chromium/content/common/frame.mojom @@ -182,16 +182,22 @@ interface FrameNavigationControl { // |javascript| is the string containing the JavaScript to be executed in the // target frame's context. // + // |wants_result| is true if the result of this execution is required by the + // caller. If it is false, a reply is still required by Mojo, but a null value + // should be returned to avoid issues serializing a large, unwanted reply. + // // TODO(hajimehoshi): This requires navigate association to keep the message // order with other navigation-related messages. Fix this and move this to a // non-navigate-related interface if possible. JavaScriptExecuteRequest( - mojo_base.mojom.String16 javascript) => (mojo_base.mojom.Value result); + mojo_base.mojom.String16 javascript, + bool wants_result) => (mojo_base.mojom.Value result); // ONLY FOR TESTS: Same as above but adds a fake UserGestureIndicator around // execution. (crbug.com/408426) JavaScriptExecuteRequestForTests( mojo_base.mojom.String16 javascript, + bool wants_result, bool has_user_gesture) => (mojo_base.mojom.Value result); @@ -199,6 +205,7 @@ interface FrameNavigationControl { // isolated world specified by the fourth parameter. JavaScriptExecuteRequestInIsolatedWorld( mojo_base.mojom.String16 javascript, + bool wants_result, int32 world_id) => (mojo_base.mojom.Value result); // Posts a message from a frame in another process to the current renderer. diff --git a/chromium/content/common/frame_delete_intention.h b/chromium/content/common/frame_delete_intention.h new file mode 100644 index 00000000000..f30103c3656 --- /dev/null +++ b/chromium/content/common/frame_delete_intention.h @@ -0,0 +1,27 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CONTENT_COMMON_FRAME_DELETE_INTENTION_H_ +#define CONTENT_COMMON_FRAME_DELETE_INTENTION_H_ + +namespace content { + +enum class FrameDeleteIntention { + // The frame being deleted isn't a (speculative) main frame. + kNotMainFrame, + // The frame being deleted is a speculative main frame, and it is being + // deleted as part of the shutdown for that WebContents. The entire RenderView + // etc will be destroyed by a separate IPC sent later. + kSpeculativeMainFrameForShutdown, + // The frame being deleted is a speculative main frame, and it is being + // deleted because the speculative navigation was cancelled. This is not part + // of shutdown. + kSpeculativeMainFrameForNavigationCancelled, + + kMaxValue = kSpeculativeMainFrameForNavigationCancelled +}; + +} // namespace content + +#endif // CONTENT_COMMON_FRAME_DELETE_INTENTION_H_ diff --git a/chromium/content/common/frame_messages.h b/chromium/content/common/frame_messages.h index 8673d65844e..91e10a61934 100644 --- a/chromium/content/common/frame_messages.h +++ b/chromium/content/common/frame_messages.h @@ -26,6 +26,7 @@ #include "content/common/content_param_traits.h" #include "content/common/content_security_policy/csp_context.h" #include "content/common/content_security_policy_header.h" +#include "content/common/frame_delete_intention.h" #include "content/common/frame_message_enums.h" #include "content/common/frame_message_structs.h" #include "content/common/frame_owner_properties.h" @@ -101,6 +102,8 @@ using FrameMsg_GetSerializedHtmlWithLocalLinks_FrameRoutingIdMap = #define IPC_MESSAGE_EXPORT CONTENT_EXPORT #define IPC_MESSAGE_START FrameMsgStart +IPC_ENUM_TRAITS_MAX_VALUE(content::FrameDeleteIntention, + content::FrameDeleteIntention::kMaxValue) IPC_ENUM_TRAITS_MAX_VALUE(blink::FrameOwnerElementType, blink::FrameOwnerElementType::kMaxValue) IPC_ENUM_TRAITS_MAX_VALUE( @@ -804,7 +807,7 @@ IPC_MESSAGE_ROUTED1(FrameMsg_UpdateOpener, int /* opener_routing_id */) IPC_MESSAGE_ROUTED1(FrameMsg_VisualStateRequest, uint64_t /* id */) // Instructs the renderer to delete the RenderFrame. -IPC_MESSAGE_ROUTED0(FrameMsg_Delete) +IPC_MESSAGE_ROUTED1(FrameMsg_Delete, content::FrameDeleteIntention) // Instructs the renderer to invoke the frame's beforeunload event handler. // Expects the result to be returned via FrameHostMsg_BeforeUnload_ACK. diff --git a/chromium/content/public/browser/BUILD.gn b/chromium/content/public/browser/BUILD.gn index dc2f2f24869..ae744eda8ae 100644 --- a/chromium/content/public/browser/BUILD.gn +++ b/chromium/content/public/browser/BUILD.gn @@ -99,6 +99,7 @@ jumbo_source_set("browser_sources") { "child_process_data.h", "child_process_launcher_utils.h", "child_process_security_policy.h", + "child_process_termination_info.cc", "child_process_termination_info.h", "clear_site_data_utils.h", "client_certificate_delegate.h", diff --git a/chromium/content/public/browser/child_process_termination_info.cc b/chromium/content/public/browser/child_process_termination_info.cc new file mode 100644 index 00000000000..753880c1b38 --- /dev/null +++ b/chromium/content/public/browser/child_process_termination_info.cc @@ -0,0 +1,14 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "content/public/browser/child_process_termination_info.h" + +namespace content { + +ChildProcessTerminationInfo::ChildProcessTerminationInfo() = default; +ChildProcessTerminationInfo::ChildProcessTerminationInfo( + const ChildProcessTerminationInfo& other) = default; +ChildProcessTerminationInfo::~ChildProcessTerminationInfo() = default; + +} // namespace content diff --git a/chromium/content/public/browser/child_process_termination_info.h b/chromium/content/public/browser/child_process_termination_info.h index 0331f00b95d..633ac786fa6 100644 --- a/chromium/content/public/browser/child_process_termination_info.h +++ b/chromium/content/public/browser/child_process_termination_info.h @@ -8,6 +8,7 @@ #include "base/process/kill.h" #include "base/time/time.h" #include "build/build_config.h" +#include "content/common/content_export.h" #include "content/public/common/result_codes.h" #if defined(OS_ANDROID) @@ -16,7 +17,11 @@ namespace content { -struct ChildProcessTerminationInfo { +struct CONTENT_EXPORT ChildProcessTerminationInfo { + ChildProcessTerminationInfo(); + ChildProcessTerminationInfo(const ChildProcessTerminationInfo& other); + ~ChildProcessTerminationInfo(); + base::TerminationStatus status = base::TERMINATION_STATUS_NORMAL_TERMINATION; // If |status| is TERMINATION_STATUS_LAUNCH_FAILED then |exit_code| will @@ -29,6 +34,15 @@ struct ChildProcessTerminationInfo { // ChildProcessTerminationInfo is computed. base::TimeDelta uptime = base::TimeDelta::Max(); + // Populated only for renderer process. True if there are any visible + // clients at the time of process death. + bool renderer_has_visible_clients = false; + + // Populated only for renderer process. True if + // RenderProcessHost::GetFrameDepth is bigger than 0. Note this is not exactly + // the same as not having main frames. + bool renderer_was_subframe = false; + #if defined(OS_ANDROID) // True if child service has strong or moderate binding at time of death. base::android::ChildBindingState binding_state = diff --git a/chromium/content/renderer/render_frame_impl.cc b/chromium/content/renderer/render_frame_impl.cc index c75b6177f06..dc3c7420d89 100644 --- a/chromium/content/renderer/render_frame_impl.cc +++ b/chromium/content/renderer/render_frame_impl.cc @@ -2427,7 +2427,46 @@ void RenderFrameImpl::OnSwapIn() { SwapIn(); } -void RenderFrameImpl::OnDeleteFrame() { +void RenderFrameImpl::OnDeleteFrame(FrameDeleteIntention intent) { + // The main frame (when not provisional) is owned by the renderer's frame tree + // via WebViewImpl. When a provisional main frame is swapped in, the ownership + // moves from the browser to the renderer, but this happens in the renderer + // process and is then the browser is informed. + // If the provisional main frame is swapped in while the browser is destroying + // it, the browser may request to delete |this|, thinking it has ownership + // of it, but the renderer has already taken ownership via SwapIn(). + switch (intent) { + case FrameDeleteIntention::kNotMainFrame: + // The frame was not a main frame, so the browser should always have + // ownership of it and we can just proceed with deleting it on + // request. + DCHECK(!is_main_frame_); + break; + case FrameDeleteIntention::kSpeculativeMainFrameForShutdown: + // In this case the renderer has taken ownership of the provisional main + // frame but the browser did not know yet and is shutting down. We can + // ignore this request as the frame will be destroyed when the RenderView + // is. This handles the shutdown case of https://crbug.com/957858. + DCHECK(is_main_frame_); + if (in_frame_tree_) + return; + break; + case FrameDeleteIntention::kSpeculativeMainFrameForNavigationCancelled: + // In this case the browser was navigating and cancelled the speculative + // navigation. The renderer *should* undo the SwapIn() but the old state + // has already been destroyed. Both ignoring the message or handling it + // would leave the renderer in an inconsistent state now. If we ignore it + // then the browser thinks the RenderView has a remote main frame, but it + // is incorrect. If we handle it, then we are deleting a local main frame + // out from under the RenderView and we will have bad pointers in the + // renderer. So all we can do is crash. We should instead prevent this + // scenario by blocking the browser from dropping the speculative main + // frame when a commit (and ownership transfer) is imminent. + // TODO(dcheng): This is the case of https://crbug.com/838348. + DCHECK(is_main_frame_); + break; + } + // This will result in a call to RenderFrameImpl::FrameDetached, which // deletes the object. Do not access |this| after detach. frame_->Detach(); @@ -2508,6 +2547,7 @@ void RenderFrameImpl::OnAddMessageToConsole( void RenderFrameImpl::JavaScriptExecuteRequest( const base::string16& javascript, + bool wants_result, JavaScriptExecuteRequestCallback callback) { TRACE_EVENT_INSTANT0("test_tracing", "JavaScriptExecuteRequest", TRACE_EVENT_SCOPE_THREAD); @@ -2522,11 +2562,15 @@ void RenderFrameImpl::JavaScriptExecuteRequest( if (!weak_this) return; - std::move(callback).Run(GetJavaScriptExecutionResult(result)); + if (wants_result) + std::move(callback).Run(GetJavaScriptExecutionResult(result)); + else + std::move(callback).Run({}); } void RenderFrameImpl::JavaScriptExecuteRequestForTests( const base::string16& javascript, + bool wants_result, bool has_user_gesture, JavaScriptExecuteRequestForTestsCallback callback) { TRACE_EVENT_INSTANT0("test_tracing", "JavaScriptExecuteRequestForTests", @@ -2548,11 +2592,15 @@ void RenderFrameImpl::JavaScriptExecuteRequestForTests( if (!weak_this) return; - std::move(callback).Run(GetJavaScriptExecutionResult(result)); + if (wants_result) + std::move(callback).Run(GetJavaScriptExecutionResult(result)); + else + std::move(callback).Run({}); } void RenderFrameImpl::JavaScriptExecuteRequestInIsolatedWorld( const base::string16& javascript, + bool wants_result, int32_t world_id, JavaScriptExecuteRequestInIsolatedWorldCallback callback) { TRACE_EVENT_INSTANT0("test_tracing", @@ -2571,15 +2619,18 @@ void RenderFrameImpl::JavaScriptExecuteRequestInIsolatedWorld( v8::HandleScope handle_scope(v8::Isolate::GetCurrent()); WebScriptSource script = WebScriptSource(WebString::FromUTF16(javascript)); JavaScriptIsolatedWorldRequest* request = new JavaScriptIsolatedWorldRequest( - weak_factory_.GetWeakPtr(), std::move(callback)); + weak_factory_.GetWeakPtr(), wants_result, std::move(callback)); frame_->RequestExecuteScriptInIsolatedWorld( world_id, &script, 1, false, WebLocalFrame::kSynchronous, request); } RenderFrameImpl::JavaScriptIsolatedWorldRequest::JavaScriptIsolatedWorldRequest( base::WeakPtr<RenderFrameImpl> render_frame_impl, + bool wants_result, JavaScriptExecuteRequestInIsolatedWorldCallback callback) - : render_frame_impl_(render_frame_impl), callback_(std::move(callback)) {} + : render_frame_impl_(render_frame_impl), + wants_result_(wants_result), + callback_(std::move(callback)) {} RenderFrameImpl::JavaScriptIsolatedWorldRequest:: ~JavaScriptIsolatedWorldRequest() { @@ -2594,7 +2645,7 @@ void RenderFrameImpl::JavaScriptIsolatedWorldRequest::Completed( } base::Value value; - if (!result.empty()) { + if (!result.empty() && wants_result_) { // It's safe to always use the main world context when converting // here. V8ValueConverterImpl shouldn't actually care about the // context scope, and it switches to v8::Object's creation context @@ -3101,7 +3152,7 @@ void RenderFrameImpl::LoadErrorPage(int reason) { } void RenderFrameImpl::ExecuteJavaScript(const base::string16& javascript) { - JavaScriptExecuteRequest(javascript, base::DoNothing()); + JavaScriptExecuteRequest(javascript, false, base::DoNothing()); } void RenderFrameImpl::BindLocalInterface( diff --git a/chromium/content/renderer/render_frame_impl.h b/chromium/content/renderer/render_frame_impl.h index 4613ce47c11..d35cfb8dd67 100644 --- a/chromium/content/renderer/render_frame_impl.h +++ b/chromium/content/renderer/render_frame_impl.h @@ -34,6 +34,7 @@ #include "content/common/buildflags.h" #include "content/common/download/mhtml_file_writer.mojom.h" #include "content/common/frame.mojom.h" +#include "content/common/frame_delete_intention.h" #include "content/common/frame_message_enums.h" #include "content/common/host_zoom.mojom.h" #include "content/common/media/renderer_audio_input_stream_factory.mojom.h" @@ -637,13 +638,16 @@ class CONTENT_EXPORT RenderFrameImpl void JavaScriptExecuteRequest( const base::string16& javascript, + bool wants_result, JavaScriptExecuteRequestCallback callback) override; void JavaScriptExecuteRequestForTests( const base::string16& javascript, + bool wants_result, bool has_user_gesture, JavaScriptExecuteRequestForTestsCallback callback) override; void JavaScriptExecuteRequestInIsolatedWorld( const base::string16& javascript, + bool wants_result, int32_t world_id, JavaScriptExecuteRequestInIsolatedWorldCallback callback) override; void OnPortalActivated(const base::UnguessableToken& portal_token, @@ -1029,6 +1033,7 @@ class CONTENT_EXPORT RenderFrameImpl public: JavaScriptIsolatedWorldRequest( base::WeakPtr<RenderFrameImpl> render_frame_impl, + bool wants_result, JavaScriptExecuteRequestInIsolatedWorldCallback callback); void Completed( const blink::WebVector<v8::Local<v8::Value>>& result) override; @@ -1037,6 +1042,7 @@ class CONTENT_EXPORT RenderFrameImpl ~JavaScriptIsolatedWorldRequest() override; base::WeakPtr<RenderFrameImpl> render_frame_impl_; + bool wants_result_; JavaScriptExecuteRequestInIsolatedWorldCallback callback_; DISALLOW_COPY_AND_ASSIGN(JavaScriptIsolatedWorldRequest); @@ -1111,7 +1117,7 @@ class CONTENT_EXPORT RenderFrameImpl void OnSwapOut(int proxy_routing_id, bool is_loading, const FrameReplicationState& replicated_frame_state); - void OnDeleteFrame(); + void OnDeleteFrame(FrameDeleteIntention intent); void OnStop(); void OnCollapse(bool collapse); void OnShowContextMenu(const gfx::Point& location); diff --git a/chromium/content/renderer/render_frame_impl_browsertest.cc b/chromium/content/renderer/render_frame_impl_browsertest.cc index 6772deaa8a0..c994c84d377 100644 --- a/chromium/content/renderer/render_frame_impl_browsertest.cc +++ b/chromium/content/renderer/render_frame_impl_browsertest.cc @@ -497,7 +497,7 @@ TEST_F(RenderFrameImplTest, NoCrashWhenDeletingFrameDuringFind) { 1, "foo", true /* match_case */, true /* forward */, false /* find_next */, true /* force */, false /* wrap_within_frame */); - FrameMsg_Delete delete_message(0); + FrameMsg_Delete delete_message(0, FrameDeleteIntention::kNotMainFrame); frame()->OnMessageReceived(delete_message); } diff --git a/chromium/content/renderer/render_widget.cc b/chromium/content/renderer/render_widget.cc index 970bdf426ed..24449d77790 100644 --- a/chromium/content/renderer/render_widget.cc +++ b/chromium/content/renderer/render_widget.cc @@ -184,6 +184,18 @@ static const int kInvalidNextPreviousFlagsValue = -1; static const char* kOOPIF = "OOPIF"; static const char* kRenderer = "Renderer"; +#if defined(OS_ANDROID) +// With 32 bit pixels, this would mean less than 400kb per buffer. Much less +// than required for, say, nHD. +static const int kSmallScreenPixelThreshold = 1e5; +bool IsSmallScreen(const gfx::Size& size) { + int area = 0; + if (!size.GetCheckedArea().AssignIfValid(&area)) + return false; + return area < kSmallScreenPixelThreshold; +} +#endif + class WebWidgetLockTarget : public content::MouseLockDispatcher::LockTarget { public: explicit WebWidgetLockTarget(blink::WebWidget* webwidget) @@ -3013,7 +3025,8 @@ cc::LayerTreeSettings RenderWidget::GenerateLayerTreeSettings( #if defined(OS_ANDROID) bool using_synchronous_compositor = compositor_deps->UsingSynchronousCompositing(); - bool using_low_memory_policy = base::SysInfo::IsLowEndDevice(); + bool using_low_memory_policy = + base::SysInfo::IsLowEndDevice() && !IsSmallScreen(screen_size); settings.use_stream_video_draw_quad = true; settings.using_synchronous_renderer_compositor = using_synchronous_compositor; diff --git a/chromium/device/bluetooth/bluetooth_gatt_discoverer_winrt.cc b/chromium/device/bluetooth/bluetooth_gatt_discoverer_winrt.cc index a53422c2d60..14fd46a67d0 100644 --- a/chromium/device/bluetooth/bluetooth_gatt_discoverer_winrt.cc +++ b/chromium/device/bluetooth/bluetooth_gatt_discoverer_winrt.cc @@ -37,6 +37,15 @@ using ABI::Windows::Devices::Bluetooth::GenericAttributeProfile:: GattDeviceService; using ABI::Windows::Devices::Bluetooth::GenericAttributeProfile:: GattDeviceServicesResult; +using ABI::Windows::Devices::Bluetooth::GenericAttributeProfile::GattOpenStatus; +using ABI::Windows::Devices::Bluetooth::GenericAttributeProfile:: + GattOpenStatus_AlreadyOpened; +using ABI::Windows::Devices::Bluetooth::GenericAttributeProfile:: + GattOpenStatus_Success; +using ABI::Windows::Devices::Bluetooth::GenericAttributeProfile:: + GattSharingMode; +using ABI::Windows::Devices::Bluetooth::GenericAttributeProfile:: + GattSharingMode_SharedReadAndWrite; using ABI::Windows::Devices::Bluetooth::GenericAttributeProfile:: IGattCharacteristic3; using ABI::Windows::Devices::Bluetooth::GenericAttributeProfile:: @@ -44,6 +53,8 @@ using ABI::Windows::Devices::Bluetooth::GenericAttributeProfile:: using ABI::Windows::Devices::Bluetooth::GenericAttributeProfile:: IGattDescriptorsResult; using ABI::Windows::Devices::Bluetooth::GenericAttributeProfile:: + IGattDeviceService; +using ABI::Windows::Devices::Bluetooth::GenericAttributeProfile:: IGattDeviceService3; using ABI::Windows::Devices::Bluetooth::GenericAttributeProfile:: IGattDeviceServicesResult; @@ -196,15 +207,6 @@ void BluetoothGattDiscovererWinrt::OnGetGattServices( num_services_ = gatt_services_.size(); for (const auto& gatt_service : gatt_services_) { - uint16_t service_attribute_handle; - hr = gatt_service->get_AttributeHandle(&service_attribute_handle); - if (FAILED(hr)) { - VLOG(2) << "Getting AttributeHandle failed: " - << logging::SystemErrorCodeToString(hr); - std::move(callback_).Run(false); - return; - } - ComPtr<IGattDeviceService3> gatt_service_3; hr = gatt_service.As(&gatt_service_3); if (FAILED(hr)) { @@ -214,31 +216,74 @@ void BluetoothGattDiscovererWinrt::OnGetGattServices( return; } - ComPtr<IAsyncOperation<GattCharacteristicsResult*>> get_characteristics_op; - hr = gatt_service_3->GetCharacteristicsAsync(&get_characteristics_op); + ComPtr<IAsyncOperation<GattOpenStatus>> open_op; + hr = + gatt_service_3->OpenAsync(GattSharingMode_SharedReadAndWrite, &open_op); if (FAILED(hr)) { - VLOG(2) << "GattDeviceService::GetCharacteristicsAsync() failed: " + VLOG(2) << "GattDeviceService::OpenAsync() failed: " << logging::SystemErrorCodeToString(hr); std::move(callback_).Run(false); - return; } hr = base::win::PostAsyncResults( - std::move(get_characteristics_op), - base::BindOnce(&BluetoothGattDiscovererWinrt::OnGetCharacteristics, + std::move(open_op), + base::BindOnce(&BluetoothGattDiscovererWinrt::OnServiceOpen, weak_ptr_factory_.GetWeakPtr(), - service_attribute_handle)); - - if (FAILED(hr)) { - VLOG(2) << "PostAsyncResults failed: " - << logging::SystemErrorCodeToString(hr); - std::move(callback_).Run(false); - } + std::move(gatt_service))); } RunCallbackIfDone(); } +void BluetoothGattDiscovererWinrt::OnServiceOpen( + ComPtr<IGattDeviceService> gatt_service, + GattOpenStatus status) { + if (status != GattOpenStatus_Success && + status != GattOpenStatus_AlreadyOpened) { + VLOG(2) << "Failed to open GATT service: " << status; + std::move(callback_).Run(false); + return; + } + + uint16_t service_attribute_handle; + HRESULT hr = gatt_service->get_AttributeHandle(&service_attribute_handle); + if (FAILED(hr)) { + VLOG(2) << "Getting AttributeHandle failed: " + << logging::SystemErrorCodeToString(hr); + std::move(callback_).Run(false); + return; + } + + ComPtr<IGattDeviceService3> gatt_service_3; + hr = gatt_service.As(&gatt_service_3); + if (FAILED(hr)) { + VLOG(2) << "Obtaining IGattDeviceService3 failed: " + << logging::SystemErrorCodeToString(hr); + std::move(callback_).Run(false); + return; + } + + ComPtr<IAsyncOperation<GattCharacteristicsResult*>> get_characteristics_op; + hr = gatt_service_3->GetCharacteristicsAsync(&get_characteristics_op); + if (FAILED(hr)) { + VLOG(2) << "GattDeviceService::GetCharacteristicsAsync() failed: " + << logging::SystemErrorCodeToString(hr); + std::move(callback_).Run(false); + return; + } + + hr = base::win::PostAsyncResults( + std::move(get_characteristics_op), + base::BindOnce(&BluetoothGattDiscovererWinrt::OnGetCharacteristics, + weak_ptr_factory_.GetWeakPtr(), service_attribute_handle)); + + if (FAILED(hr)) { + VLOG(2) << "PostAsyncResults failed: " + << logging::SystemErrorCodeToString(hr); + std::move(callback_).Run(false); + } +} + void BluetoothGattDiscovererWinrt::OnGetCharacteristics( uint16_t service_attribute_handle, ComPtr<IGattCharacteristicsResult> characteristics_result) { diff --git a/chromium/device/bluetooth/bluetooth_gatt_discoverer_winrt.h b/chromium/device/bluetooth/bluetooth_gatt_discoverer_winrt.h index 39392baaae7..d174d232ecf 100644 --- a/chromium/device/bluetooth/bluetooth_gatt_discoverer_winrt.h +++ b/chromium/device/bluetooth/bluetooth_gatt_discoverer_winrt.h @@ -63,6 +63,13 @@ class DEVICE_BLUETOOTH_EXPORT BluetoothGattDiscovererWinrt { ABI::Windows::Devices::Bluetooth::GenericAttributeProfile:: IGattDeviceServicesResult> services_result); + void OnServiceOpen( + Microsoft::WRL::ComPtr<ABI::Windows::Devices::Bluetooth:: + GenericAttributeProfile::IGattDeviceService> + gatt_service, + ABI::Windows::Devices::Bluetooth::GenericAttributeProfile::GattOpenStatus + status); + void OnGetCharacteristics( uint16_t service_attribute_handle, Microsoft::WRL::ComPtr< diff --git a/chromium/extensions/browser/api/usb/usb_apitest.cc b/chromium/extensions/browser/api/usb/usb_apitest.cc index 301a42aaa89..284718f5001 100644 --- a/chromium/extensions/browser/api/usb/usb_apitest.cc +++ b/chromium/extensions/browser/api/usb/usb_apitest.cc @@ -290,6 +290,21 @@ IN_PROC_BROWSER_TEST_F(UsbApiTest, InvalidTimeout) { ASSERT_TRUE(RunAppTest("api_test/usb/invalid_timeout")); } +IN_PROC_BROWSER_TEST_F(UsbApiTest, CallsAfterDisconnect) { + ExtensionTestMessageListener ready_listener("ready", false); + ExtensionTestMessageListener result_listener("success", false); + result_listener.set_failure_message("failure"); + + EXPECT_CALL(mock_device_, OpenInternal(_)) + .WillOnce(InvokeCallback<0>(UsbOpenDeviceError::OK)); + + ASSERT_TRUE(LoadApp("api_test/usb/calls_after_disconnect")); + ASSERT_TRUE(ready_listener.WaitUntilSatisfied()); + + fake_usb_manager_.RemoveDevice(fake_device_); + ASSERT_TRUE(result_listener.WaitUntilSatisfied()); +} + IN_PROC_BROWSER_TEST_F(UsbApiTest, OnDeviceAdded) { ExtensionTestMessageListener load_listener("loaded", false); ExtensionTestMessageListener result_listener("success", false); diff --git a/chromium/extensions/browser/api/usb/usb_device_resource.cc b/chromium/extensions/browser/api/usb/usb_device_resource.cc index 3b8f92b8f36..fd6d6227f63 100644 --- a/chromium/extensions/browser/api/usb/usb_device_resource.cc +++ b/chromium/extensions/browser/api/usb/usb_device_resource.cc @@ -34,9 +34,10 @@ ApiResourceManager<UsbDeviceResource>::GetFactoryInstance() { UsbDeviceResource::UsbDeviceResource(const std::string& owner_extension_id, const std::string& guid, device::mojom::UsbDevicePtr device) - : ApiResource(owner_extension_id), - guid_(guid), - device_(std::move(device)) {} + : ApiResource(owner_extension_id), guid_(guid), device_(std::move(device)) { + device_.set_connection_error_handler(base::BindOnce( + &UsbDeviceResource::OnConnectionError, base::Unretained(this))); +} UsbDeviceResource::~UsbDeviceResource() {} @@ -44,4 +45,8 @@ bool UsbDeviceResource::IsPersistent() const { return false; } +void UsbDeviceResource::OnConnectionError() { + device_.reset(); +} + } // namespace extensions diff --git a/chromium/extensions/browser/api/usb/usb_device_resource.h b/chromium/extensions/browser/api/usb/usb_device_resource.h index 5dd5dd1ebc3..d46dc2ea226 100644 --- a/chromium/extensions/browser/api/usb/usb_device_resource.h +++ b/chromium/extensions/browser/api/usb/usb_device_resource.h @@ -38,6 +38,8 @@ class UsbDeviceResource : public ApiResource { friend class ApiResourceManager<UsbDeviceResource>; static const char* service_name() { return "UsbDeviceResourceManager"; } + void OnConnectionError(); + const std::string guid_; device::mojom::UsbDevicePtr device_; diff --git a/chromium/extensions/common/api/_api_features.json b/chromium/extensions/common/api/_api_features.json index bc6490f28a9..73832cb6d5e 100644 --- a/chromium/extensions/common/api/_api_features.json +++ b/chromium/extensions/common/api/_api_features.json @@ -288,7 +288,16 @@ "management.installReplacementWebApp": { "dependencies": ["manifest:replacement_web_app"], "channel": "stable", - "extension_types": ["extension"] + "extension_types": ["extension"], + "whitelist": [ + "E7E2461CE072DF036CF9592740196159E2D7C089", // https://crbug.com/968407 + "A74A4D44C7CFCD8844830E6140C8D763E12DD8F3", // https://crbug.com/968407 + "312745D9BF916161191143F6490085EEA0434997", // https://crbug.com/968407 + "53041A2FA309EECED01FFC751E7399186E860B2C", // https://crbug.com/968407 + "A07A5B743CD82A1C2579DB77D353C98A23201EEF", // https://crbug.com/968407 + "2D22CDB6583FD0A13758AEBE8B15E45208B4E9A7", // https://crbug.com/968407 + "0F42756099D914A026DADFA182871C015735DD95" // https://crbug.com/968407 + ] }, "management.uninstallSelf": { "dependencies": [], diff --git a/chromium/extensions/strings/extensions_strings_ko.xtb b/chromium/extensions/strings/extensions_strings_ko.xtb index 8edcb30eb27..4142c91f910 100644 --- a/chromium/extensions/strings/extensions_strings_ko.xtb +++ b/chromium/extensions/strings/extensions_strings_ko.xtb @@ -20,7 +20,7 @@ <translation id="3144135466825225871">crx 파일을 대체하지 못했습니다. 파일을 사용 중인지 확인하세요.</translation> <translation id="3163201441334626963">공급업체 <ph name="VENDOR_ID" />의 알 수 없는 제품 <ph name="PRODUCT_ID" /></translation> <translation id="3302709122321372472">콘텐츠 스크립트의 css('<ph name="RELATIVE_PATH" />')를 로드하지 못했습니다.</translation> -<translation id="3369521687965833290">확장 프로그램을 압축해제할 수 없습니다. 확장 프로그램을 안전하게 압축해제하려면 드라이브 문자로 시작되고 정션(junction), 마운트 포인트(mount point) 또는 심볼릭 링크가 포함되지 않은 프로필 디렉토리 경로가 있어야 합니다. 프로필에 해당 경로가 없습니다.</translation> +<translation id="3369521687965833290">확장 프로그램을 압축해제할 수 없습니다. 확장 프로그램을 안전하게 압축해제하려면 드라이브 문자로 시작되고 정션(junction), 마운트 포인트(mount point) 또는 심볼릭 링크가 포함되지 않은 프로필 디렉터리 경로가 있어야 합니다. 프로필에 해당 경로가 없습니다.</translation> <translation id="3393440416772303020"><ph name="PRODUCT_NAME" />(일련번호 <ph name="SERIAL_NUMBER" />)</translation> <translation id="3466070586188012397">공급업체 <ph name="VENDOR_ID" />의 <ph name="PRODUCT_NAME" />(일련번호 <ph name="SERIAL_NUMBER" />)</translation> <translation id="3561217442734750519">비공개 키 입력 값은 유효한 경로여야 합니다.</translation> @@ -33,7 +33,7 @@ <translation id="4811956658694082538">유틸리티 프로세스가 충돌하여 패키지를 설정하지 못했습니다. Chrome을 다시 시작하고 다시 설치해 보세요.</translation> <translation id="4988792151665380515">공개 키를 내보내지 못했습니다.</translation> <translation id="5026754133087629784">Webview: <ph name="WEBVIEW_TAG_NAME" /></translation> -<translation id="5098647635849512368">패키지할 디렉토리에 대한 절대 경로를 찾을 수 없습니다.</translation> +<translation id="5098647635849512368">패키지할 디렉터리에 대한 절대 경로를 찾을 수 없습니다.</translation> <translation id="5356315618422219272">Appview: <ph name="APPVIEW_TAG_NAME" /></translation> <translation id="5436430103864390185">창 모양은 지원되지 않습니다.</translation> <translation id="5456409301717116725">이 확장 프로그램은 키 파일 '<ph name="KEY_PATH" />'을(를) 포함합니다. 사용하지 않는 것이 좋습니다.</translation> @@ -43,15 +43,15 @@ <translation id="5972529113578162692">이 시스템의 관리자가 <ph name="EXTENSION_NAME" />의 설치를 요구합니다. 이 확장 프로그램은 제거할 수 없습니다.</translation> <translation id="6027032947578871493"><ph name="VENDOR_NAME" />의 알 수 없는 제품 <ph name="PRODUCT_ID" />(일련번호 <ph name="SERIAL_NUMBER" />)</translation> <translation id="6068932090455285721">공급업체 <ph name="VENDOR_ID" />의 <ph name="PRODUCT_NAME" /></translation> -<translation id="6143635259298204954">확장 프로그램을 압축해제할 수 없습니다. 확장 프로그램을 안전하게 압축해제하려면 심볼릭 링크가 포함되지 않은 프로필 디렉토리 경로가 있어야 합니다. 프로필에 해당 경로가 없습니다.</translation> +<translation id="6143635259298204954">확장 프로그램을 압축해제할 수 없습니다. 확장 프로그램을 안전하게 압축해제하려면 심볼릭 링크가 포함되지 않은 프로필 디렉터리 경로가 있어야 합니다. 프로필에 해당 경로가 없습니다.</translation> <translation id="6322279351188361895">비공개 키를 읽지 못했습니다.</translation> -<translation id="6391538222494443604">입력 디렉토리가 있어야 합니다.</translation> +<translation id="6391538222494443604">입력 디렉터리가 있어야 합니다.</translation> <translation id="641087317769093025">확장 프로그램의 압축을 해제하지 못했습니다.</translation> <translation id="6413453408918378296">'<ph name="ICON" />' 아이콘이 충분히 표시되지 않습니다.</translation> <translation id="6542618148162044354">'<ph name="APP_NAME" />'이(가) 사용자의 기기 하나 이상에 액세스 권한을 요청하고 있습니다.</translation> <translation id="657064425229075395">백그라운드 스크립트('<ph name="BACKGROUND_SCRIPT" />')를 로드하지 못했습니다.</translation> <translation id="6580950983454333167"><ph name="VENDOR_NAME" />의 제품 <ph name="PRODUCT_NAME" />(일련 번호 <ph name="SERIAL_NUMBER" />)</translation> -<translation id="6731255991101203740">'<ph name="DIRECTORY_PATH" />'의 압축을 해제하기 위한 디렉토리를 만들지 못했습니다.</translation> +<translation id="6731255991101203740">'<ph name="DIRECTORY_PATH" />'의 압축을 해제하기 위한 디렉터리를 만들지 못했습니다.</translation> <translation id="677806580227005219">Mimehandler: <ph name="MIMEHANDLERVIEW_TAG_NAME" /></translation> <translation id="6840444547062817500">확장 프로그램이 너무 자주 새로고침됩니다.</translation> <translation id="7003844668372540529"><ph name="VENDOR_NAME" />의 알 수 없는 제품 <ph name="PRODUCT_ID" /></translation> diff --git a/chromium/google_apis/gaia/gaia_auth_fetcher.cc b/chromium/google_apis/gaia/gaia_auth_fetcher.cc index 52da1db80bd..1f943fb4f39 100644 --- a/chromium/google_apis/gaia/gaia_auth_fetcher.cc +++ b/chromium/google_apis/gaia/gaia_auth_fetcher.cc @@ -228,6 +228,8 @@ GaiaAuthFetcher::GaiaAuthFetcher( list_accounts_gurl_( GaiaUrls::GetInstance()->ListAccountsURLWithSource(source_)), logout_gurl_(GaiaUrls::GetInstance()->LogOutURLWithSource(source_)), + logout_with_continue_gurl_( + GaiaUrls::GetInstance()->LogOutURLWithSourceAndContinueURL(source_)), get_check_connection_info_url_( GaiaUrls::GetInstance()->GetCheckConnectionInfoURLWithSource( source_)) {} @@ -751,7 +753,8 @@ void GaiaAuthFetcher::StartListAccounts() { } void GaiaAuthFetcher::StartOAuthMultilogin( - const std::vector<MultiloginTokenIDPair>& accounts) { + const std::vector<MultiloginTokenIDPair>& accounts, + const std::string& external_cc_result) { DCHECK(!fetch_pending_) << "Tried to fetch two things at once!"; UMA_HISTOGRAM_COUNTS_100("Signin.Multilogin.NumberOfAccounts", @@ -767,8 +770,13 @@ void GaiaAuthFetcher::StartOAuthMultilogin( kOAuthMultiBearerHeaderFormat, base::JoinString(authorization_header_parts, ",").c_str()); - std::string parameters = base::StringPrintf( - "?source=%s", net::EscapeUrlEncodedData(source_, true).c_str()); + std::string source_string = net::EscapeUrlEncodedData(source_, true); + std::string parameters = + external_cc_result.empty() + ? base::StringPrintf("?source=%s", source_string.c_str()) + : base::StringPrintf( + "?source=%s&externalCcResult=%s", source_string.c_str(), + net::EscapeUrlEncodedData(external_cc_result, true).c_str()); net::NetworkTrafficAnnotationTag traffic_annotation = net::DefineNetworkTrafficAnnotation("gaia_auth_multilogin", R"( @@ -805,6 +813,14 @@ void GaiaAuthFetcher::StartOAuthMultilogin( } void GaiaAuthFetcher::StartLogOut() { + StartLogOutInternal(logout_gurl_); +} + +void GaiaAuthFetcher::StartLogOutWithBlankContinueURL() { + StartLogOutInternal(logout_with_continue_gurl_); +} + +void GaiaAuthFetcher::StartLogOutInternal(const GURL& logout_gurl) { DCHECK(!fetch_pending_) << "Tried to fetch two things at once!"; net::NetworkTrafficAnnotationTag traffic_annotation = @@ -834,7 +850,7 @@ void GaiaAuthFetcher::StartLogOut() { } } })"); - CreateAndStartGaiaFetcher(std::string(), std::string(), logout_gurl_, + CreateAndStartGaiaFetcher(std::string(), std::string(), logout_gurl, net::LOAD_NORMAL, traffic_annotation); } @@ -1138,7 +1154,7 @@ void GaiaAuthFetcher::DispatchFetchedRequest( OnOAuth2RevokeTokenFetched(data, net_error, response_code); } else if (url == list_accounts_gurl_) { OnListAccountsFetched(data, net_error, response_code); - } else if (url == logout_gurl_) { + } else if (url == logout_gurl_ || url == logout_with_continue_gurl_) { OnLogOutFetched(data, net_error, response_code); } else if (url == get_check_connection_info_url_) { OnGetCheckConnectionInfoFetched(data, net_error, response_code); diff --git a/chromium/google_apis/gaia/gaia_auth_fetcher.h b/chromium/google_apis/gaia/gaia_auth_fetcher.h index a5d2bd63673..474d7325914 100644 --- a/chromium/google_apis/gaia/gaia_auth_fetcher.h +++ b/chromium/google_apis/gaia/gaia_auth_fetcher.h @@ -159,7 +159,8 @@ class GaiaAuthFetcher { const std::string& service); // Starts a request to get the cookie for list of accounts. - void StartOAuthMultilogin(const std::vector<MultiloginTokenIDPair>& accounts); + void StartOAuthMultilogin(const std::vector<MultiloginTokenIDPair>& accounts, + const std::string& external_cc_result); // Starts a request to list the accounts in the GAIA cookie. void StartListAccounts(); @@ -167,6 +168,10 @@ class GaiaAuthFetcher { // Starts a request to log out the accounts in the GAIA cookie. void StartLogOut(); + // Starts a request to log out the accounts in the GAIA cookie. Uses Logout + // endpoint with continue URL. + void StartLogOutWithBlankContinueURL(); + // Starts a request to get the list of URLs to check for connection info. // Returns token/URL pairs to check, and the resulting status can be given to // /MergeSession requests. @@ -268,6 +273,9 @@ class GaiaAuthFetcher { static const char kOAuth2BearerHeaderFormat[]; static const char kOAuthMultiBearerHeaderFormat[]; + // Starts logout flow with an explicit GURL. + void StartLogOutInternal(const GURL& logout_gurl); + void OnURLLoadComplete(std::unique_ptr<std::string> response_body); void OnOAuth2TokenPairFetched(const std::string& data, @@ -374,6 +382,7 @@ class GaiaAuthFetcher { const GURL oauth_multilogin_gurl_; const GURL list_accounts_gurl_; const GURL logout_gurl_; + const GURL logout_with_continue_gurl_; const GURL get_check_connection_info_url_; // While a fetch is going on: diff --git a/chromium/google_apis/gaia/gaia_auth_fetcher_unittest.cc b/chromium/google_apis/gaia/gaia_auth_fetcher_unittest.cc index eb0d4c93d9c..a73e9e62fa0 100644 --- a/chromium/google_apis/gaia/gaia_auth_fetcher_unittest.cc +++ b/chromium/google_apis/gaia/gaia_auth_fetcher_unittest.cc @@ -394,7 +394,7 @@ TEST_F(GaiaAuthFetcherTest, MultiloginSuccess) { TestGaiaAuthFetcher auth(&consumer, GetURLLoaderFactory()); auth.StartOAuthMultilogin( - std::vector<GaiaAuthFetcher::MultiloginTokenIDPair>()); + std::vector<GaiaAuthFetcher::MultiloginTokenIDPair>(), std::string()); EXPECT_TRUE(auth.HasPendingFetch()); auth.TestOnURLLoadCompleteInternal(net::OK, net::HTTP_OK, {}, @@ -429,7 +429,7 @@ TEST_F(GaiaAuthFetcherTest, MultiloginFailureNetError) { TestGaiaAuthFetcher auth(&consumer, GetURLLoaderFactory()); auth.StartOAuthMultilogin( - std::vector<GaiaAuthFetcher::MultiloginTokenIDPair>()); + std::vector<GaiaAuthFetcher::MultiloginTokenIDPair>(), std::string()); EXPECT_TRUE(auth.HasPendingFetch()); auth.TestOnURLLoadCompleteInternal(net::ERR_ABORTED, net::HTTP_OK, {}, @@ -464,7 +464,7 @@ TEST_F(GaiaAuthFetcherTest, MultiloginFailureServerError) { TestGaiaAuthFetcher auth(&consumer, GetURLLoaderFactory()); auth.StartOAuthMultilogin( - std::vector<GaiaAuthFetcher::MultiloginTokenIDPair>()); + std::vector<GaiaAuthFetcher::MultiloginTokenIDPair>(), std::string()); EXPECT_TRUE(auth.HasPendingFetch()); auth.TestOnURLLoadCompleteInternal(net::OK, net::HTTP_OK, {}, diff --git a/chromium/google_apis/gaia/gaia_urls.cc b/chromium/google_apis/gaia/gaia_urls.cc index 75942b5667a..939bed86a69 100644 --- a/chromium/google_apis/gaia/gaia_urls.cc +++ b/chromium/google_apis/gaia/gaia_urls.cc @@ -31,6 +31,7 @@ const char kEmbeddedSetupWindowsUrlSuffix[] = "embedded/setup/windows"; const char kSigninChromeSyncDice[] = "signin/chrome/sync?ssp=1"; const char kServiceLoginAuthUrlSuffix[] = "ServiceLoginAuth"; const char kServiceLogoutUrlSuffix[] = "Logout"; +const char kContinueUrlForLogoutSuffix[] = "chrome/blank.html"; const char kGetUserInfoUrlSuffix[] = "GetUserInfo"; const char kTokenAuthUrlSuffix[] = "TokenAuth"; const char kMergeSessionUrlSuffix[] = "MergeSession"; @@ -117,6 +118,7 @@ GaiaUrls::GaiaUrls() { signin_chrome_sync_dice_ = gaia_url_.Resolve(kSigninChromeSyncDice); service_login_auth_url_ = gaia_url_.Resolve(kServiceLoginAuthUrlSuffix); service_logout_url_ = gaia_url_.Resolve(kServiceLogoutUrlSuffix); + continue_url_for_logout_ = gaia_url_.Resolve(kContinueUrlForLogoutSuffix); get_user_info_url_ = gaia_url_.Resolve(kGetUserInfoUrlSuffix); token_auth_url_ = gaia_url_.Resolve(kTokenAuthUrlSuffix); merge_session_url_ = gaia_url_.Resolve(kMergeSessionUrlSuffix); @@ -297,6 +299,16 @@ GURL GaiaUrls::LogOutURLWithSource(const std::string& source) { base::StringPrintf("?source=%s", source.c_str())); } +GURL GaiaUrls::LogOutURLWithSourceAndContinueURL(const std::string& source) { + std::string params = + source.empty() + ? base::StringPrintf("?continue=%s", + continue_url_for_logout_.spec().c_str()) + : base::StringPrintf("?source=%s&continue=%s", source.c_str(), + continue_url_for_logout_.spec().c_str()); + return service_logout_url_.Resolve(params); +} + GURL GaiaUrls::GetCheckConnectionInfoURLWithSource(const std::string& source) { return source.empty() ? get_check_connection_info_url_ diff --git a/chromium/google_apis/gaia/gaia_urls.h b/chromium/google_apis/gaia/gaia_urls.h index 13a9f544499..9966091d374 100644 --- a/chromium/google_apis/gaia/gaia_urls.h +++ b/chromium/google_apis/gaia/gaia_urls.h @@ -52,6 +52,7 @@ class GaiaUrls { GURL ListAccountsURLWithSource(const std::string& source); GURL LogOutURLWithSource(const std::string& source); + GURL LogOutURLWithSourceAndContinueURL(const std::string& source); GURL GetCheckConnectionInfoURLWithSource(const std::string& source); // Continue URL used to signal the completion of the signin flow. @@ -75,6 +76,7 @@ class GaiaUrls { GURL signin_chrome_sync_dice_; GURL service_login_auth_url_; GURL service_logout_url_; + GURL continue_url_for_logout_; GURL get_user_info_url_; GURL token_auth_url_; GURL merge_session_url_; diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_apply_framebuffer_attachment_cmaa_intel.cc b/chromium/gpu/command_buffer/service/gles2_cmd_apply_framebuffer_attachment_cmaa_intel.cc index d8ee25df17c..cceecc6d6a6 100644 --- a/chromium/gpu/command_buffer/service/gles2_cmd_apply_framebuffer_attachment_cmaa_intel.cc +++ b/chromium/gpu/command_buffer/service/gles2_cmd_apply_framebuffer_attachment_cmaa_intel.cc @@ -476,6 +476,9 @@ void ApplyFramebufferAttachmentCMAAINTELResourceManager::ApplyCMAAEffectTexture( } glBindImageTextureEXT(1, dest_texture, 0, GL_FALSE, 0, GL_WRITE_ONLY, GL_RGBA8); + // TODO(samans): Investigate why there is an error. https://crbug.com/938597 + GLenum error = glGetError(); + DLOG_IF(ERROR, error != GL_NO_ERROR) << "GL ERROR: " << error; glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, working_color_texture_); diff --git a/chromium/gpu/config/gpu_driver_bug_list.json b/chromium/gpu/config/gpu_driver_bug_list.json index ef98bd00ed3..c54a3811cce 100644 --- a/chromium/gpu/config/gpu_driver_bug_list.json +++ b/chromium/gpu/config/gpu_driver_bug_list.json @@ -682,8 +682,8 @@ }, "vendor_id": "0x8086", "driver_version": { - "op": "<", - "value": "8.16" + "op": "<=", + "value": "9.18" }, "features": [ "disable_d3d11" diff --git a/chromium/gpu/config/gpu_lists_version.h b/chromium/gpu/config/gpu_lists_version.h index f425d5b6dd5..ee09ad0f264 100644 --- a/chromium/gpu/config/gpu_lists_version.h +++ b/chromium/gpu/config/gpu_lists_version.h @@ -3,6 +3,6 @@ #ifndef GPU_CONFIG_GPU_LISTS_VERSION_H_ #define GPU_CONFIG_GPU_LISTS_VERSION_H_ -#define GPU_LISTS_VERSION "75fcf24dd8773d5959a7177f492969e627d83c01" +#define GPU_LISTS_VERSION "eca637952e5dc4b02f1f7a70e68a7ab0094ccd1b" #endif // GPU_CONFIG_GPU_LISTS_VERSION_H_ diff --git a/chromium/headless/lib/browser/protocol/headless_devtools_session.cc b/chromium/headless/lib/browser/protocol/headless_devtools_session.cc index 4ec24302ef2..2e77c10bc7f 100644 --- a/chromium/headless/lib/browser/protocol/headless_devtools_session.cc +++ b/chromium/headless/lib/browser/protocol/headless_devtools_session.cc @@ -16,9 +16,7 @@ namespace headless { namespace protocol { static bool EnableInternalDevToolsBinaryProtocol() { - static bool disabled = base::CommandLine::ForCurrentProcess()->HasSwitch( - ::switches::kDisableInternalDevToolsBinaryProtocol); - return !disabled; + return false; } HeadlessDevToolsSession::HeadlessDevToolsSession( diff --git a/chromium/media/gpu/v4l2/BUILD.gn b/chromium/media/gpu/v4l2/BUILD.gn index 25b5c0dff8d..1ba24ce5e5d 100644 --- a/chromium/media/gpu/v4l2/BUILD.gn +++ b/chromium/media/gpu/v4l2/BUILD.gn @@ -43,6 +43,8 @@ source_set("v4l2") { "v4l2_mjpeg_decode_accelerator.h", "v4l2_slice_video_decode_accelerator.cc", "v4l2_slice_video_decode_accelerator.h", + "v4l2_stateful_workaround.cc", + "v4l2_stateful_workaround.h", "v4l2_video_decode_accelerator.cc", "v4l2_video_decode_accelerator.h", "v4l2_video_encode_accelerator.cc", diff --git a/chromium/media/gpu/v4l2/v4l2_stateful_workaround.cc b/chromium/media/gpu/v4l2/v4l2_stateful_workaround.cc new file mode 100644 index 00000000000..7f504a41797 --- /dev/null +++ b/chromium/media/gpu/v4l2/v4l2_stateful_workaround.cc @@ -0,0 +1,133 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "media/gpu/v4l2/v4l2_stateful_workaround.h" + +#include <string.h> + +#include <linux/videodev2.h> + +#include "base/containers/small_map.h" +#include "base/memory/ptr_util.h" +#include "media/gpu/macros.h" +#include "media/filters/vp8_parser.h" +#include "media/video/video_decode_accelerator.h" + +namespace media { + +// If the given resolution is not supported by the driver, some IOCTL must +// return some error code (e.g. EIO). However, there is a driver that doesn't +// follow this specification, for example go2001. This will be called before +// a bitstream to the driver in the driver. This parses the bitstream, gets +// its resolution and compares with the supported resolution. +// Returns true if the resolution is supported or this workaround is +// unnecessary. Otherwise return false. +// This class is currently created only on guado when codec is VP8. +// TODO(crbug.com/968945): Check this workaround is necessary for other codecs +// and other devices. +class SupportResolutionChecker : public V4L2StatefulWorkaround { + public: + static std::unique_ptr<V4L2StatefulWorkaround> CreateIfNeeded( + V4L2Device::Type device_type, + VideoCodecProfile profile); + ~SupportResolutionChecker() override = default; + + Result Apply(const uint8_t* data, size_t size, size_t* endpos) override; + + private: + using SupportedProfileMap = base::small_map< + std::map<VideoCodecProfile, VideoDecodeAccelerator::SupportedProfile>>; + + SupportResolutionChecker(SupportedProfileMap supported_profile_map) + : supported_profile_map_(std::move(supported_profile_map)), + vp8_parser_(std::make_unique<Vp8Parser>()) {} + + SupportedProfileMap supported_profile_map_; + const std::unique_ptr<Vp8Parser> vp8_parser_; +}; + +std::unique_ptr<V4L2StatefulWorkaround> +SupportResolutionChecker::CreateIfNeeded(V4L2Device::Type device_type, + VideoCodecProfile profile) { + if (device_type != V4L2Device::Type::kDecoder || profile < VP8PROFILE_MIN || + profile > VP8PROFILE_MAX) { + return nullptr; + } + + scoped_refptr<V4L2Device> device = V4L2Device::Create(); + if (!device->Open(V4L2Device::Type::kDecoder, V4L2_PIX_FMT_VP8)) { + VPLOGF(1) << "Failed to open device for profile: " << profile + << " fourcc: " << FourccToString(V4L2_PIX_FMT_VP8); + return nullptr; + } + + // Get the driver name. + struct v4l2_capability caps; + if (device->Ioctl(VIDIOC_QUERYCAP, &caps) != 0) { + VPLOGF(1) << "ioctl() failed: VIDIOC_QUERYCAP" + << ", caps check failed: 0x" << std::hex << caps.capabilities; + return nullptr; + } + constexpr char go2001[] = "go2001"; + if (strcmp(reinterpret_cast<const char*>(caps.driver), go2001)) + return nullptr; + + constexpr uint32_t supported_input_fourccs[] = { + V4L2_PIX_FMT_VP8, + }; + auto supported_profiles = device->GetSupportedDecodeProfiles( + base::size(supported_input_fourccs), supported_input_fourccs); + SupportedProfileMap supported_profile_map; + for (const auto& profile : supported_profiles) + supported_profile_map[profile.profile] = profile; + + VLOGF(2) << "Create SupportResolutionChecker workaround"; + return base::WrapUnique( + new SupportResolutionChecker(std::move(supported_profile_map))); +} + +V4L2StatefulWorkaround::Result SupportResolutionChecker::Apply( + const uint8_t* data, + size_t size, + size_t* endpos) { + Vp8FrameHeader fhdr; + vp8_parser_->ParseFrame(data, size, &fhdr); + if (fhdr.IsKeyframe()) { + DCHECK(supported_profile_map_.find(VP8PROFILE_ANY) != + supported_profile_map_.end()); + const auto& supported_profile = supported_profile_map_[VP8PROFILE_ANY]; + const auto& min_resolution = supported_profile.min_resolution; + const auto& max_resolution = supported_profile.max_resolution; + const gfx::Rect current_resolution(fhdr.width, fhdr.height); + if (!gfx::Rect(max_resolution).Contains(current_resolution) || + !(current_resolution).Contains(gfx::Rect(min_resolution))) { + VLOGF(1) << "Resolution is unsupported: " + << current_resolution.size().ToString() + << ", min supported resolution: " << min_resolution.ToString() + << ", max supported resolution: " << max_resolution.ToString(); + return Result::NotifyError; + } + } + return Result::Success; +} + +std::vector<std::unique_ptr<V4L2StatefulWorkaround>> +CreateV4L2StatefulWorkarounds(V4L2Device::Type device_type, + VideoCodecProfile profile) { + using CreateWorkaroundFuncType = std::unique_ptr<V4L2StatefulWorkaround> (*)( + V4L2Device::Type device_type, VideoCodecProfile profile); + const CreateWorkaroundFuncType kWorkaroundFactoryFunction[] = { + &SupportResolutionChecker::CreateIfNeeded, + }; + + std::vector<std::unique_ptr<V4L2StatefulWorkaround>> workarounds; + for (const auto func : kWorkaroundFactoryFunction) { + auto vw = func(device_type, profile); + if (vw) + workarounds.push_back(std::move(vw)); + } + return workarounds; +} + +} // namespace media diff --git a/chromium/media/gpu/v4l2/v4l2_stateful_workaround.h b/chromium/media/gpu/v4l2/v4l2_stateful_workaround.h new file mode 100644 index 00000000000..c0a746a8704 --- /dev/null +++ b/chromium/media/gpu/v4l2/v4l2_stateful_workaround.h @@ -0,0 +1,42 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MEDIA_GPU_V4L2_V4L2_STATEFUL_WORKAROUND_H_ +#define MEDIA_GPU_V4L2_V4L2_STATEFUL_WORKAROUND_H_ + +#include <memory> +#include <vector> + +#include "media/base/video_types.h" +#include "media/gpu/v4l2/v4l2_device.h" + +namespace media { + +class V4L2StatefulWorkaround { + public: + enum class Result { + Success, // The workaround is successfully applied. + NotifyError, // The caller must notify an error for Chrome. For example, + // VDA will call NotifyError() if this is returned. + }; + + virtual ~V4L2StatefulWorkaround() = default; + + // Apply the workaround. + virtual Result Apply(const uint8_t* data, size_t size, size_t* endpos) = 0; + + protected: + V4L2StatefulWorkaround() = default; + + DISALLOW_COPY_AND_ASSIGN(V4L2StatefulWorkaround); +}; + +// Create necessary workarounds on the device for |device_type| and |profile|. +std::vector<std::unique_ptr<V4L2StatefulWorkaround>> +CreateV4L2StatefulWorkarounds(V4L2Device::Type device_type, + VideoCodecProfile profile); + +} // namespace media + +#endif // MEDIA_GPU_V4L2_V4L2_STATEFUL_WORKAROUND_H_ diff --git a/chromium/media/gpu/v4l2/v4l2_video_decode_accelerator.cc b/chromium/media/gpu/v4l2/v4l2_video_decode_accelerator.cc index bcaca34dd4a..614b4c7a3e2 100644 --- a/chromium/media/gpu/v4l2/v4l2_video_decode_accelerator.cc +++ b/chromium/media/gpu/v4l2/v4l2_video_decode_accelerator.cc @@ -34,6 +34,7 @@ #include "media/gpu/image_processor_factory.h" #include "media/gpu/macros.h" #include "media/gpu/v4l2/v4l2_image_processor.h" +#include "media/gpu/v4l2/v4l2_stateful_workaround.h" #include "media/video/h264_parser.h" #include "ui/gfx/geometry/rect.h" #include "ui/gl/gl_context.h" @@ -317,6 +318,9 @@ bool V4L2VideoDecodeAccelerator::CheckConfig(const Config& config) { return false; } + workarounds_ = + CreateV4L2StatefulWorkarounds(V4L2Device::Type::kDecoder, config.profile); + output_mode_ = config.output_mode; input_queue_ = device_->GetQueue(V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE); @@ -982,6 +986,14 @@ bool V4L2VideoDecodeAccelerator::AdvanceFrameFragment(const uint8_t* data, size_t* endpos) { DCHECK(decoder_thread_.task_runner()->BelongsToCurrentThread()); + for (auto& workaround : workarounds_) { + auto result = workaround->Apply(data, size, endpos); + if (result == V4L2StatefulWorkaround::Result::NotifyError) { + NOTIFY_ERROR(PLATFORM_FAILURE); + return false; + } + } + if (video_profile_ >= H264PROFILE_MIN && video_profile_ <= H264PROFILE_MAX) { // For H264, we need to feed HW one frame at a time. This is going to take // some parsing of our input stream. @@ -1931,6 +1943,7 @@ void V4L2VideoDecodeAccelerator::DestroyTask() { output_queue_ = nullptr; decoder_h264_parser_ = nullptr; + workarounds_.clear(); base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( this); diff --git a/chromium/media/gpu/v4l2/v4l2_video_decode_accelerator.h b/chromium/media/gpu/v4l2/v4l2_video_decode_accelerator.h index 8d0c277e081..ffa9c2a2358 100644 --- a/chromium/media/gpu/v4l2/v4l2_video_decode_accelerator.h +++ b/chromium/media/gpu/v4l2/v4l2_video_decode_accelerator.h @@ -47,6 +47,7 @@ class GLFenceEGL; namespace media { class H264Parser; +class V4L2StatefulWorkaround; // This class handles video accelerators directly through a V4L2 device exported // by the hardware blocks. @@ -507,6 +508,11 @@ class MEDIA_GPU_EXPORT V4L2VideoDecodeAccelerator // For H264 decode, hardware requires that we send it frame-sized chunks. // We'll need to parse the stream. std::unique_ptr<H264Parser> decoder_h264_parser_; + + // Workaround for V4L2VideoDecodeAccelerator. This is created only if some + // workaround is necessary for the V4L2VideoDecodeAccelerator. + std::vector<std::unique_ptr<V4L2StatefulWorkaround>> workarounds_; + // Set if the decoder has a pending incomplete frame in an input buffer. bool decoder_partial_frame_pending_; diff --git a/chromium/media/gpu/vaapi/vaapi_jpeg_decoder_unittest.cc b/chromium/media/gpu/vaapi/vaapi_jpeg_decoder_unittest.cc index b6c5098b0c6..5bd8da28988 100644 --- a/chromium/media/gpu/vaapi/vaapi_jpeg_decoder_unittest.cc +++ b/chromium/media/gpu/vaapi/vaapi_jpeg_decoder_unittest.cc @@ -414,19 +414,29 @@ std::unique_ptr<ScopedVAImage> VaapiJpegDecoderTest::Decode( return Decode(encoded_image, VA_FOURCC_I420, status); } +// The intention of this test is to ensure that the workarounds added in +// VaapiWrapper::GetJpegDecodeSuitableImageFourCC() don't result in an +// unsupported image format. TEST_F(VaapiJpegDecoderTest, MinimalImageFormatSupport) { // All drivers should support at least I420. - ASSERT_TRUE(VaapiWrapper::IsImageFormatSupported({.fourcc = VA_FOURCC_I420})); + VAImageFormat i420_format{}; + i420_format.fourcc = VA_FOURCC_I420; + ASSERT_TRUE(VaapiWrapper::IsImageFormatSupported(i420_format)); // Additionally, the mesa VAAPI driver should support YV12, NV12 and YUYV. if (base::StartsWith(VaapiWrapper::GetVendorStringForTesting(), "Mesa Gallium driver", base::CompareCase::SENSITIVE)) { - ASSERT_TRUE( - VaapiWrapper::IsImageFormatSupported({.fourcc = VA_FOURCC_YV12})); - ASSERT_TRUE( - VaapiWrapper::IsImageFormatSupported({.fourcc = VA_FOURCC_NV12})); - ASSERT_TRUE(VaapiWrapper::IsImageFormatSupported( - {.fourcc = VA_FOURCC('Y', 'U', 'Y', 'V')})); + VAImageFormat yv12_format{}; + yv12_format.fourcc = VA_FOURCC_YV12; + ASSERT_TRUE(VaapiWrapper::IsImageFormatSupported(yv12_format)); + + VAImageFormat nv12_format{}; + nv12_format.fourcc = VA_FOURCC_NV12; + ASSERT_TRUE(VaapiWrapper::IsImageFormatSupported(nv12_format)); + + VAImageFormat yuyv_format{}; + yuyv_format.fourcc = VA_FOURCC('Y', 'U', 'Y', 'V'); + ASSERT_TRUE(VaapiWrapper::IsImageFormatSupported(yuyv_format)); } } @@ -462,9 +472,21 @@ TEST_P(VaapiJpegDecoderTest, DecodeSucceeds) { // // 2) The FOURCC returned by VaapiWrapper::GetJpegDecodeSuitableImageFourCC() // corresponds to a supported image format. + // + // Note that we expect VA_FOURCC_I420 and VA_FOURCC_NV12 support in all + // drivers. const std::vector<VAImageFormat>& supported_image_formats = VaapiWrapper::GetSupportedImageFormatsForTesting(); - ASSERT_GE(supported_image_formats.size(), 1u); + EXPECT_GE(supported_image_formats.size(), 2u); + + VAImageFormat i420_format{}; + i420_format.fourcc = VA_FOURCC_I420; + EXPECT_TRUE(VaapiWrapper::IsImageFormatSupported(i420_format)); + + VAImageFormat nv12_format{}; + nv12_format.fourcc = VA_FOURCC_NV12; + EXPECT_TRUE(VaapiWrapper::IsImageFormatSupported(nv12_format)); + for (const auto& image_format : supported_image_formats) { std::unique_ptr<ScopedVAImage> scoped_image = Decode(encoded_image, image_format.fourcc); diff --git a/chromium/media/gpu/vaapi/vaapi_video_decode_accelerator.cc b/chromium/media/gpu/vaapi/vaapi_video_decode_accelerator.cc index 413a9942f20..3c1316dca64 100644 --- a/chromium/media/gpu/vaapi/vaapi_video_decode_accelerator.cc +++ b/chromium/media/gpu/vaapi/vaapi_video_decode_accelerator.cc @@ -280,10 +280,12 @@ void VaapiVideoDecodeAccelerator::OutputPicture( if (!client_) return; + Picture client_picture(output_id, input_id, visible_rect, + picture_color_space.ToGfxColorSpace(), + picture->AllowOverlay()); + client_picture.set_read_lock_fences_enabled(true); // Notify the |client_| a picture is ready to be consumed. - client_->PictureReady(Picture(output_id, input_id, visible_rect, - picture_color_space.ToGfxColorSpace(), - picture->AllowOverlay())); + client_->PictureReady(client_picture); } void VaapiVideoDecodeAccelerator::TryOutputPicture() { diff --git a/chromium/media/gpu/vaapi/vaapi_wrapper.cc b/chromium/media/gpu/vaapi/vaapi_wrapper.cc index bf80a642a33..f6008d28861 100644 --- a/chromium/media/gpu/vaapi/vaapi_wrapper.cc +++ b/chromium/media/gpu/vaapi/vaapi_wrapper.cc @@ -155,6 +155,7 @@ static const struct { constexpr const char* kMesaGalliumDriverPrefix = "Mesa Gallium driver"; constexpr const char* kIntelI965DriverPrefix = "Intel i965 driver"; +constexpr const char* kIntelIHDDriverPrefix = "Intel iHD driver"; static const struct { std::string va_driver; @@ -962,11 +963,26 @@ bool VASupportedImageFormats::InitSupportedImageFormats_Locked() { // reported. See https://gitlab.freedesktop.org/mesa/mesa/commit/b0a44f10. // Remove this workaround once b/128340287 is resolved. if (std::find_if(supported_formats_.cbegin(), supported_formats_.cend(), - [](const VAImageFormat format) { + [](const VAImageFormat& format) { return format.fourcc == VA_FOURCC_I420; }) == supported_formats_.cend()) { - supported_formats_.push_back(VAImageFormat{.fourcc = VA_FOURCC_I420}); + VAImageFormat i420_format{}; + i420_format.fourcc = VA_FOURCC_I420; + supported_formats_.push_back(i420_format); } + } else if (base::StartsWith(VADisplayState::Get()->va_vendor_string(), + kIntelIHDDriverPrefix, + base::CompareCase::SENSITIVE)) { + // TODO(andrescj): for Intel's media driver, remove everything that's not + // I420 or NV12 since it is 'over-advertising' the supported formats. Remove + // this workaround once https://crbug.com/955284 is fixed. + supported_formats_.erase( + std::remove_if(supported_formats_.begin(), supported_formats_.end(), + [](const VAImageFormat& format) { + return format.fourcc != VA_FOURCC_I420 && + format.fourcc != VA_FOURCC_NV12; + }), + supported_formats_.end()); } return true; } @@ -1118,7 +1134,9 @@ bool VaapiWrapper::GetJpegDecodeSuitableImageFourCC(unsigned int rt_format, if (!IsJpegDecodingSupportedForInternalFormat(rt_format)) return false; - // Work around some driver-specific conversion issues. + // Work around some driver-specific conversion issues. If you add a workaround + // here, please update the VaapiJpegDecoderTest.MinimalImageFormatSupport + // test. if (base::StartsWith(VADisplayState::Get()->va_vendor_string(), kMesaGalliumDriverPrefix, base::CompareCase::SENSITIVE)) { diff --git a/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc b/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc index f33aa90c1b0..479d1ed55a3 100644 --- a/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc +++ b/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc @@ -162,6 +162,15 @@ ResultExpr EvaluateSyscallImpl(int fs_denied_errno, } #endif +#if defined(__NR_vfork) + // vfork() is almost never used as a system call, but some libc versions (e.g. + // older versions of bionic) might use it in a posix_spawn() implementation, + // which is used by system(); + if (sysno == __NR_vfork) { + return Error(EPERM); + } +#endif + if (sysno == __NR_futex) return RestrictFutex(); diff --git a/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy_unittest.cc b/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy_unittest.cc index cdeb210ccb2..40fcebf9336 100644 --- a/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy_unittest.cc +++ b/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy_unittest.cc @@ -10,7 +10,9 @@ #include <sched.h> #include <signal.h> #include <stddef.h> +#include <stdlib.h> #include <string.h> +#include <sys/mman.h> #include <sys/prctl.h> #include <sys/resource.h> #include <sys/socket.h> @@ -130,6 +132,33 @@ BPF_TEST_C(BaselinePolicy, ForkArmEperm, BaselinePolicy) { BPF_ASSERT_EQ(EPERM, fork_errno); } +BPF_TEST_C(BaselinePolicy, SystemEperm, BaselinePolicy) { + errno = 0; + int ret_val = system("echo SHOULD NEVER RUN"); + BPF_ASSERT_EQ(-1, ret_val); + BPF_ASSERT_EQ(EPERM, errno); +} + +BPF_TEST_C(BaselinePolicy, CloneVforkEperm, BaselinePolicy) { + errno = 0; + // Allocate a couple pages for the child's stack even though the child should + // never start. + constexpr size_t kStackSize = 4096 * 4; + void* child_stack = mmap(nullptr, kStackSize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0); + BPF_ASSERT_NE(child_stack, nullptr); + pid_t pid = syscall(__NR_clone, CLONE_VM | CLONE_VFORK | SIGCHLD, + static_cast<char*>(child_stack) + kStackSize, nullptr, + nullptr, nullptr); + const int clone_errno = errno; + TestUtils::HandlePostForkReturn(pid); + + munmap(child_stack, kStackSize); + + BPF_ASSERT_EQ(-1, pid); + BPF_ASSERT_EQ(EPERM, clone_errno); +} + BPF_TEST_C(BaselinePolicy, CreateThread, BaselinePolicy) { base::Thread thread("sandbox_tests"); BPF_ASSERT(thread.Start()); diff --git a/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc b/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc index 100afe50e3f..348ab6e8c5e 100644 --- a/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc +++ b/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc @@ -135,7 +135,8 @@ namespace sandbox { #if !defined(OS_NACL_NONSFI) // Allow Glibc's and Android pthread creation flags, crash on any other // thread creation attempts and EPERM attempts to use neither -// CLONE_VM, nor CLONE_THREAD, which includes all fork() implementations. +// CLONE_VM nor CLONE_THREAD (all fork implementations), unless CLONE_VFORK is +// present (as in newer versions of posix_spawn). ResultExpr RestrictCloneToThreadsAndEPERMFork() { const Arg<unsigned long> flags(0); @@ -154,8 +155,16 @@ ResultExpr RestrictCloneToThreadsAndEPERMFork() { AnyOf(flags == kAndroidCloneMask, flags == kObsoleteAndroidCloneMask, flags == kGlibcPthreadFlags); + // The following two flags are the two important flags in any vfork-emulating + // clone call. EPERM any clone call that contains both of them. + const uint64_t kImportantCloneVforkFlags = CLONE_VFORK | CLONE_VM; + + const BoolExpr is_fork_or_clone_vfork = + AnyOf((flags & (CLONE_VM | CLONE_THREAD)) == 0, + (flags & kImportantCloneVforkFlags) == kImportantCloneVforkFlags); + return If(IsAndroid() ? android_test : glibc_test, Allow()) - .ElseIf((flags & (CLONE_VM | CLONE_THREAD)) == 0, Error(EPERM)) + .ElseIf(is_fork_or_clone_vfork, Error(EPERM)) .Else(CrashSIGSYSClone()); } diff --git a/chromium/services/network/mdns_responder.cc b/chromium/services/network/mdns_responder.cc index 2b6b3944a0c..a4e009bdfc2 100644 --- a/chromium/services/network/mdns_responder.cc +++ b/chromium/services/network/mdns_responder.cc @@ -4,6 +4,7 @@ #include <algorithm> #include <numeric> +#include <queue> #include <utility> #include "services/network/mdns_responder.h" @@ -19,6 +20,7 @@ #include "base/sys_byteorder.h" #include "base/threading/sequenced_task_runner_handle.h" #include "base/time/default_tick_clock.h" +#include "base/timer/timer.h" #include "net/base/address_family.h" #include "net/base/io_buffer.h" #include "net/base/ip_address.h" @@ -45,9 +47,11 @@ // // 3) Support parsing the authority section of a query in the wire format to // correctly implement the detection of probe queries. +namespace network { + namespace { -using MdnsResponderServiceError = network::MdnsResponderManager::ServiceError; +using MdnsResponderServiceError = MdnsResponderManager::ServiceError; // RFC 6762, Section 6. // @@ -74,6 +78,8 @@ const uint16_t kFlagCacheFlush = 0x8000; // Maximum number of retries for the same response due to send failure. const uint8_t kMaxMdnsResponseRetries = 2; +// The capacity of the send queue for packets blocked by an incomplete send. +const uint8_t kSendQueueCapacity = 100; // Maximum delay allowed for per-response rate-limited responses. const base::TimeDelta kMaxScheduledDelay = base::TimeDelta::FromSeconds(10); @@ -198,9 +204,25 @@ void ReportServiceError(MdnsResponderServiceError error) { UMA_HISTOGRAM_ENUMERATION("NetworkService.MdnsResponder.ServiceError", error); } +struct PendingPacket { + PendingPacket(scoped_refptr<net::IOBufferWithSize> buf, + scoped_refptr<MdnsResponseSendOption> option, + const base::TimeTicks& send_ready_time) + : buf(std::move(buf)), + option(std::move(option)), + send_ready_time(send_ready_time) {} + + bool operator<(const PendingPacket& other) const { + return send_ready_time > other.send_ready_time; + } + + scoped_refptr<net::IOBufferWithSize> buf; + scoped_refptr<MdnsResponseSendOption> option; + base::TimeTicks send_ready_time; +}; + } // namespace -namespace network { namespace mdns_helper { @@ -293,8 +315,8 @@ class MdnsResponderManager::SocketHandler { bool Send(scoped_refptr<net::IOBufferWithSize> buf, scoped_refptr<MdnsResponseSendOption> option); - void DoSend(scoped_refptr<net::IOBufferWithSize> buf, - scoped_refptr<MdnsResponseSendOption> option); + // Returns a net error code, or ERR_IO_PENDING if the IO is in progress. + int DoSend(PendingPacket pending_packet); uint16_t id() const { return id_; } @@ -392,11 +414,11 @@ class MdnsResponderManager::SocketHandler::ResponseScheduler { explicit ResponseScheduler(MdnsResponderManager::SocketHandler* handler) : handler_(handler), - task_runner_(base::SequencedTaskRunnerHandle::Get()), tick_clock_(base::DefaultTickClock::GetInstance()), + dispatch_timer_(std::make_unique<base::OneShotTimer>(tick_clock_)), next_available_time_per_resp_sched_(tick_clock_->NowTicks()), weak_factory_(this) {} - ~ResponseScheduler() = default; + ~ResponseScheduler() { dispatch_timer_->Stop(); } // Implements the rate limit scheme on the underlying interface managed by // |handler_|. Returns true if the send is scheduled on this interface. @@ -404,25 +426,28 @@ class MdnsResponderManager::SocketHandler::ResponseScheduler { // Pending sends scheduled are cancelled after |handler_| becomes invalid; bool ScheduleNextSend(scoped_refptr<net::IOBufferWithSize> buf, scoped_refptr<MdnsResponseSendOption> option); - void OnResponseSent(scoped_refptr<net::IOBufferWithSize> buf, - scoped_refptr<MdnsResponseSendOption> option, - int result) { + void OnResponseSent(PendingPacket pending_packet, int result) { + DCHECK(send_pending_); + send_pending_ = false; + scoped_refptr<MdnsResponseSendOption>& option = pending_packet.option; if (result < 0) { VLOG(1) << "Socket send error, socket=" << handler_->id() << ", error=" << result; if (CanBeRetriedAfterSendFailure(*option)) { ++option->num_send_retries_done; - handler_->DoSend(std::move(buf), std::move(option)); + send_queue_.push(std::move(pending_packet)); } else { VLOG(1) << "Response cannot be sent after " << kMaxMdnsResponseRetries << " retries."; } } + DispatchPendingPackets(); } // Also resets the scheduler. void SetTickClockForTesting(const base::TickClock* tick_clock) { tick_clock_ = tick_clock; + dispatch_timer_ = std::make_unique<base::OneShotTimer>(tick_clock_); next_available_time_per_resp_sched_ = tick_clock_->NowTicks(); next_available_time_for_name_.clear(); } @@ -454,6 +479,10 @@ class MdnsResponderManager::SocketHandler::ResponseScheduler { ComputeResponseDelayAndUpdateNextAvailableTime( RateLimitScheme rate_limit_scheme, const MdnsResponseSendOption& option); + + // Dispatches packets in the send queue serially with retries. + void DispatchPendingPackets(); + // Determines if a response can be retried after send failure. bool CanBeRetriedAfterSendFailure(const MdnsResponseSendOption& option) { if (option.num_send_retries_done >= kMaxMdnsResponseRetries) @@ -472,10 +501,13 @@ class MdnsResponderManager::SocketHandler::ResponseScheduler { // reference should be used to access the handler when there is no such // guarantee in an operation. MdnsResponderManager::SocketHandler* const handler_; - scoped_refptr<base::SequencedTaskRunner> task_runner_; const base::TickClock* tick_clock_; + std::unique_ptr<base::OneShotTimer> dispatch_timer_; std::map<std::string, base::TimeTicks> next_available_time_for_name_; base::TimeTicks next_available_time_per_resp_sched_; + bool send_pending_ = false; + // Packets with earlier ready time have higher priorities. + std::priority_queue<PendingPacket> send_queue_; base::WeakPtrFactory<ResponseScheduler> weak_factory_; @@ -488,15 +520,13 @@ bool MdnsResponderManager::SocketHandler::Send( return scheduler_->ScheduleNextSend(std::move(buf), std::move(option)); } -void MdnsResponderManager::SocketHandler::DoSend( - scoped_refptr<net::IOBufferWithSize> buf, - scoped_refptr<MdnsResponseSendOption> option) { - auto* buf_data = buf.get(); - size_t buf_size = buf->size(); - socket_->SendTo(buf_data, buf_size, multicast_addr_, - base::BindOnce(&ResponseScheduler::OnResponseSent, - scheduler_->GetWeakPtr(), std::move(buf), - std::move(option))); +int MdnsResponderManager::SocketHandler::DoSend(PendingPacket pending_packet) { + auto* buf_data = pending_packet.buf.get(); + size_t buf_size = pending_packet.buf->size(); + return socket_->SendTo( + buf_data, buf_size, multicast_addr_, + base::BindOnce(&ResponseScheduler::OnResponseSent, + scheduler_->GetWeakPtr(), std::move(pending_packet))); } void MdnsResponderManager::SocketHandler::SetTickClockForTesting( @@ -507,31 +537,35 @@ void MdnsResponderManager::SocketHandler::SetTickClockForTesting( bool MdnsResponderManager::SocketHandler::ResponseScheduler::ScheduleNextSend( scoped_refptr<net::IOBufferWithSize> buf, scoped_refptr<MdnsResponseSendOption> option) { + if (send_queue_.size() >= kSendQueueCapacity) { + VLOG(1) + << "mDNS packet discarded after reaching the capacity of send queue."; + return false; + } + auto rate_limit_scheme = GetRateLimitSchemeForClass(option->klass); + base::Optional<base::TimeDelta> delay; if (rate_limit_scheme == RateLimitScheme::NO_LIMIT) { // Skip the scheduling for this response. Currently the zero delay is only // used for negative responses generated by the responder itself. Responses // with positive name resolution generated by the responder and also those // triggered via the Mojo connection (i.e. announcements and goodbye // packets) are rate limited via the scheduled delay below. - handler_->DoSend(std::move(buf), std::move(option)); - return true; + delay = base::TimeDelta(); + } else { + // TODO(qingsi): The computation of the delay is done statically below at + // schedule-time. Change it to computing dynamically so that the delay is + // based on the time of the last send completion. + delay = ComputeResponseDelayAndUpdateNextAvailableTime(rate_limit_scheme, + *option); } - const base::Optional<base::TimeDelta> delay = - ComputeResponseDelayAndUpdateNextAvailableTime(rate_limit_scheme, - *option); if (!delay) return false; - // Note that the owning handler of this scheduler may be removed if it - // encounters read error as we process in OnSocketHandlerReadError. We should - // guarantee any posted task can be cancelled if the handler goes away, which - // we do via the weak pointer. - task_runner_->PostDelayedTask( - FROM_HERE, - base::BindOnce(&MdnsResponderManager::SocketHandler::DoSend, - handler_->GetWeakPtr(), std::move(buf), std::move(option)), - delay.value()); + PendingPacket pending_packet(std::move(buf), std::move(option), + tick_clock_->NowTicks() + delay.value()); + send_queue_.push(std::move(pending_packet)); + DispatchPendingPackets(); return true; } @@ -598,6 +632,39 @@ base::Optional<base::TimeDelta> MdnsResponderManager::SocketHandler:: return delay; } +void MdnsResponderManager::SocketHandler::ResponseScheduler:: + DispatchPendingPackets() { + while (!send_pending_ && !send_queue_.empty()) { + const auto now = tick_clock_->NowTicks(); + const auto next_send_ready_time = send_queue_.top().send_ready_time; + if (now >= next_send_ready_time) { + auto pending_packet = std::move(send_queue_.top()); + send_queue_.pop(); + int rv = handler_->DoSend(std::move(pending_packet)); + if (rv == net::ERR_IO_PENDING) { + send_pending_ = true; + } else if (rv < net::OK) { + VLOG(1) << "mDNS packet discarded due to socket send error, socket=" + << handler_->id() << ", error=" << rv; + } + } else { + // We have no packet due; post a task to flush the send queue later. + // + // Note that the owning handler of this scheduler may be removed if it + // encounters read error as we process in OnSocketHandlerReadError. We + // should guarantee any posted task can be cancelled if the scheduler goes + // away, which we do via the weak pointer. + const base::TimeDelta time_to_next_packet = next_send_ready_time - now; + dispatch_timer_->Start( + FROM_HERE, time_to_next_packet, + base::BindOnce(&MdnsResponderManager::SocketHandler:: + ResponseScheduler::DispatchPendingPackets, + GetWeakPtr())); + return; + } + } +} + MdnsResponseSendOption::MdnsResponseSendOption() = default; MdnsResponseSendOption::~MdnsResponseSendOption() = default; @@ -744,14 +811,17 @@ void MdnsResponderManager::OnMdnsQueryReceived( void MdnsResponderManager::OnSocketHandlerReadError(uint16_t socket_handler_id, int result) { + VLOG(1) << "Socket read error, socket=" << socket_handler_id + << ", error=" << result; + if (IsNonFatalError(result)) + return; + auto it = socket_handler_by_id_.find(socket_handler_id); DCHECK(it != socket_handler_by_id_.end()); // It is safe to remove the handler in error since this error handler is // invoked by the callback after the asynchronous return of RecvFrom, when the // handler has exited the read loop. socket_handler_by_id_.erase(it); - VLOG(1) << "Socket read error, socket=" << socket_handler_id - << ", error=" << result; if (socket_handler_by_id_.empty()) { LOG(ERROR) << "All socket handlers failed. Restarting the mDNS responder manager."; @@ -761,6 +831,14 @@ void MdnsResponderManager::OnSocketHandlerReadError(uint16_t socket_handler_id, } } +bool MdnsResponderManager::IsNonFatalError(int result) { + DCHECK(result < net::OK); + if (result == net::ERR_MSG_TOO_BIG) + return true; + + return false; +} + void MdnsResponderManager::SocketHandler::HandlePacket(int result) { if (result <= 0) return; diff --git a/chromium/services/network/mdns_responder.h b/chromium/services/network/mdns_responder.h index c1b5f4477b6..69a92c22d43 100644 --- a/chromium/services/network/mdns_responder.h +++ b/chromium/services/network/mdns_responder.h @@ -198,6 +198,7 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) MdnsResponderManager { void OnMdnsQueryReceived(const net::DnsQuery& query, uint16_t recv_socket_handler_id); void OnSocketHandlerReadError(uint16_t socket_handler_id, int result); + bool IsNonFatalError(int result); std::unique_ptr<net::MDnsSocketFactory> owned_socket_factory_; net::MDnsSocketFactory* socket_factory_; diff --git a/chromium/services/network/mdns_responder_unittest.cc b/chromium/services/network/mdns_responder_unittest.cc index 94d3d9db5f0..16f10eb8494 100644 --- a/chromium/services/network/mdns_responder_unittest.cc +++ b/chromium/services/network/mdns_responder_unittest.cc @@ -31,10 +31,11 @@ namespace network { namespace { +using ::testing::_; +using ::testing::AnyNumber; using ::testing::Invoke; using ::testing::NiceMock; using ::testing::Return; -using ::testing::_; using ServiceError = MdnsResponderManager::ServiceError; const net::IPAddress kPublicAddrs[2] = {net::IPAddress(11, 11, 11, 11), @@ -107,6 +108,37 @@ class MockFailingMdnsSocketFactory : public net::MDnsSocketFactory { return -1; } + // Emulates IO blocking in sending packets if |BlockSend()| is called, in + // which case the completion callback is not invoked until |ResumeSend()| is + // called. + int MaybeBlockSend(const std::string& packet, + const std::string& address, + net::CompletionRepeatingCallback callback) { + OnSendTo(packet); + if (block_send_) { + blocked_packet_size_ = packet.size(); + blocked_send_callback_ = std::move(callback); + } else { + task_runner_->PostTask( + FROM_HERE, + base::BindOnce([](net::CompletionRepeatingCallback callback, + size_t packet_size) { callback.Run(packet_size); }, + callback, packet.size())); + } + return -1; + } + + void BlockSend() { + DCHECK(!block_send_); + block_send_ = true; + } + + void ResumeSend() { + DCHECK(block_send_); + block_send_ = false; + blocked_send_callback_.Run(blocked_packet_size_); + } + // Emulates the asynchronous contract of invoking |callback| in the RecvFrom // primitive but failed receiving; int FailToRecv(net::IOBuffer* buffer, @@ -122,6 +154,9 @@ class MockFailingMdnsSocketFactory : public net::MDnsSocketFactory { } private: + bool block_send_ = false; + size_t blocked_packet_size_ = 0; + net::CompletionRepeatingCallback blocked_send_callback_; scoped_refptr<base::SingleThreadTaskRunner> task_runner_; }; @@ -283,6 +318,14 @@ class MdnsResponderTest : public testing::Test { Reset(); } + ~MdnsResponderTest() { + // Goodbye messages are scheduled when the responder service |host_manager_| + // is destroyed and can be synchronously sent if the rate limiting permits. + // See ResponseScheduler::DispatchPendingPackets(). + EXPECT_CALL(socket_factory_, OnSendTo(_)).Times(AnyNumber()); + EXPECT_CALL(failing_socket_factory_, OnSendTo(_)).Times(AnyNumber()); + } + void Reset(bool use_failing_socket_factory = false) { client_[0].reset(); client_[1].reset(); @@ -365,12 +408,12 @@ class MdnsResponderTest : public testing::Test { base::test::ScopedTaskEnvironment scoped_task_environment_{ base::test::ScopedTaskEnvironment::MainThreadType::MOCK_TIME}; - mojom::MdnsResponderPtr client_[2]; - std::unique_ptr<MdnsResponderManager> host_manager_; // Overrides the current thread task runner, so we can simulate the passage // of time and avoid any actual sleeps. NiceMock<net::MockMDnsSocketFactory> socket_factory_; NiceMock<MockFailingMdnsSocketFactory> failing_socket_factory_; + mojom::MdnsResponderPtr client_[2]; + std::unique_ptr<MdnsResponderManager> host_manager_; std::string last_name_created_; }; @@ -1013,4 +1056,58 @@ TEST_F(MdnsResponderTest, ManagerCanRestartAfterAllSocketHandlersFailToRead) { tester.ExpectTotalCount(kServiceErrorHistogram, 2); } +// Test that sending packets on an interface can be blocked by an incomplete +// send on the same interface. Blocked packets are later flushed when sending is +// unblocked. +TEST_F(MdnsResponderTest, IncompleteSendBlocksFollowingSends) { + auto create_send_blocking_socket = + [this](std::vector<std::unique_ptr<net::DatagramServerSocket>>* sockets) { + auto socket = + std::make_unique<NiceMock<net::MockMDnsDatagramServerSocket>>( + net::ADDRESS_FAMILY_IPV4); + + ON_CALL(*socket, SendToInternal(_, _, _)) + .WillByDefault( + Invoke(&failing_socket_factory_, + &MockFailingMdnsSocketFactory::MaybeBlockSend)); + ON_CALL(*socket, RecvFromInternal(_, _, _, _)) + .WillByDefault(Return(-1)); + + sockets->push_back(std::move(socket)); + }; + EXPECT_CALL(failing_socket_factory_, CreateSockets(_)) + .WillOnce(Invoke(create_send_blocking_socket)); + Reset(true /* use_failing_socket_factory */); + + const auto& addr1 = kPublicAddrs[0]; + std::string expected_announcement1 = + CreateResolutionResponse(kDefaultTtl, {{"0.local", addr1}}); + // Mocked CreateSockets above only creates one socket. + // We schedule to send the announcement for |kNumAnnouncementsPerInterface| + // times but the second announcement is blocked by the first one in this case. + EXPECT_CALL(failing_socket_factory_, OnSendTo(expected_announcement1)) + .Times(1); + failing_socket_factory_.BlockSend(); + const auto name1 = CreateNameForAddress(0, addr1); + RunUntilNoTasksRemain(); + + const auto& addr2 = kPublicAddrs[1]; + std::string expected_announcement2 = + CreateResolutionResponse(kDefaultTtl, {{"1.local", addr2}}); + // The announcement for the following name should also be blocked. + const auto name2 = CreateNameForAddress(0, addr2); + EXPECT_CALL(failing_socket_factory_, OnSendTo(expected_announcement2)) + .Times(0); + RunUntilNoTasksRemain(); + + // We later unblock sending packets. Previously scheduled announcements should + // be flushed. + EXPECT_CALL(failing_socket_factory_, OnSendTo(expected_announcement1)) + .Times(kNumAnnouncementsPerInterface - 1); + EXPECT_CALL(failing_socket_factory_, OnSendTo(expected_announcement2)) + .Times(kNumAnnouncementsPerInterface); + failing_socket_factory_.ResumeSend(); + RunUntilNoTasksRemain(); +} + } // namespace network diff --git a/chromium/services/tracing/public/cpp/perfetto/trace_event_data_source.cc b/chromium/services/tracing/public/cpp/perfetto/trace_event_data_source.cc index 32a58a481c9..e388ed6d321 100644 --- a/chromium/services/tracing/public/cpp/perfetto/trace_event_data_source.cc +++ b/chromium/services/tracing/public/cpp/perfetto/trace_event_data_source.cc @@ -251,6 +251,7 @@ void TraceEventDataSource::StartTracing( target_buffer_ = data_source_config.target_buffer(); // Reduce lock contention by binding the registry without holding the lock. unbound_writer_registry = std::move(startup_writer_registry_); + trace_writers_from_registry_.clear(); } session_id_.fetch_add(1u, std::memory_order_relaxed); @@ -398,6 +399,7 @@ ThreadLocalEventSink* TraceEventDataSource::CreateThreadLocalEventSink( uint32_t session_id = session_id_.load(std::memory_order_relaxed); if (startup_writer_registry_) { trace_writer = startup_writer_registry_->CreateUnboundTraceWriter(); + trace_writers_from_registry_.insert(trace_writer.get()); } else if (producer_client_) { trace_writer = std::make_unique<perfetto::StartupTraceWriter>( producer_client_->CreateTraceWriter(target_buffer_)); @@ -517,10 +519,17 @@ void TraceEventDataSource::FlushCurrentThread() { void TraceEventDataSource::ReturnTraceWriter( std::unique_ptr<perfetto::StartupTraceWriter> trace_writer) { base::AutoLock lock(lock_); - if (startup_writer_registry_) { + // It's possible that the returned trace writer was created by a former + // StartupTraceWriterRegistry. In this case, we should not attempt to return + // it to the current registry, so we need to verify first that it was indeed + // created by the current registry. + if (startup_writer_registry_ && + trace_writers_from_registry_.find(trace_writer.get()) != + trace_writers_from_registry_.end()) { // If the writer is still unbound, the registry will keep it alive until it // was bound and its buffered data was copied. This ensures that we don't // lose data from threads that are shut down during startup. + trace_writers_from_registry_.erase(trace_writer.get()); startup_writer_registry_->ReturnUnboundTraceWriter(std::move(trace_writer)); } else { // Delete the TraceWriter on the sequence that Perfetto runs on, needed diff --git a/chromium/services/tracing/public/cpp/perfetto/trace_event_data_source.h b/chromium/services/tracing/public/cpp/perfetto/trace_event_data_source.h index 0d9a9a02493..4550cb0283c 100644 --- a/chromium/services/tracing/public/cpp/perfetto/trace_event_data_source.h +++ b/chromium/services/tracing/public/cpp/perfetto/trace_event_data_source.h @@ -149,6 +149,10 @@ class COMPONENT_EXPORT(TRACING_CPP) TraceEventDataSource // SetupStartupTracing() is called. std::unique_ptr<perfetto::StartupTraceWriterRegistry> startup_writer_registry_; + // Unbound writers created by the current |startup_writer_registry_|. We track + // these writers to ensure that we only return the correct ones back to the + // registry. + std::set<perfetto::StartupTraceWriter*> trace_writers_from_registry_; std::vector<std::string> histograms_; DISALLOW_COPY_AND_ASSIGN(TraceEventDataSource); diff --git a/chromium/skia/ext/skia_commit_hash.h b/chromium/skia/ext/skia_commit_hash.h index a18d3d1d0d2..24ab4fbe776 100644 --- a/chromium/skia/ext/skia_commit_hash.h +++ b/chromium/skia/ext/skia_commit_hash.h @@ -3,6 +3,6 @@ #ifndef SKIA_EXT_SKIA_COMMIT_HASH_H_ #define SKIA_EXT_SKIA_COMMIT_HASH_H_ -#define SKIA_COMMIT_HASH "72c68f6af98f5dd0a2a615719a4861d91574740e" +#define SKIA_COMMIT_HASH "6b86bdee08efdbc7d6c4fa37a118e8420624cbe4" #endif // SKIA_EXT_SKIA_COMMIT_HASH_H_ diff --git a/chromium/third_party/angle/src/compiler/preprocessor/DiagnosticsBase.cpp b/chromium/third_party/angle/src/compiler/preprocessor/DiagnosticsBase.cpp index 575b151432d..c4832c66d3a 100644 --- a/chromium/third_party/angle/src/compiler/preprocessor/DiagnosticsBase.cpp +++ b/chromium/third_party/angle/src/compiler/preprocessor/DiagnosticsBase.cpp @@ -115,6 +115,8 @@ const char *Diagnostics::message(ID id) return "invalid file number"; case PP_INVALID_LINE_DIRECTIVE: return "invalid line directive"; + case PP_NON_PP_TOKEN_BEFORE_EXTENSION_ESSL1: + return "extension directive must occur before any non-preprocessor tokens in ESSL1"; case PP_NON_PP_TOKEN_BEFORE_EXTENSION_ESSL3: return "extension directive must occur before any non-preprocessor tokens in ESSL3"; case PP_UNDEFINED_SHIFT: @@ -129,7 +131,7 @@ const char *Diagnostics::message(ID id) return "unexpected token after conditional expression"; case PP_UNRECOGNIZED_PRAGMA: return "unrecognized pragma"; - case PP_NON_PP_TOKEN_BEFORE_EXTENSION_ESSL1: + case PP_NON_PP_TOKEN_BEFORE_EXTENSION_WEBGL: return "extension directive should occur before any non-preprocessor tokens"; case PP_WARNING_MACRO_NAME_RESERVED: return "macro name with a double underscore is reserved - unintented behavior is " diff --git a/chromium/third_party/angle/src/compiler/preprocessor/DiagnosticsBase.h b/chromium/third_party/angle/src/compiler/preprocessor/DiagnosticsBase.h index bb90bf08292..6be5c72ddec 100644 --- a/chromium/third_party/angle/src/compiler/preprocessor/DiagnosticsBase.h +++ b/chromium/third_party/angle/src/compiler/preprocessor/DiagnosticsBase.h @@ -73,6 +73,7 @@ class Diagnostics PP_WARNING_BEGIN, PP_EOF_IN_DIRECTIVE, PP_UNRECOGNIZED_PRAGMA, + PP_NON_PP_TOKEN_BEFORE_EXTENSION_WEBGL, PP_WARNING_MACRO_NAME_RESERVED, PP_WARNING_END }; diff --git a/chromium/third_party/angle/src/compiler/preprocessor/DirectiveParser.cpp b/chromium/third_party/angle/src/compiler/preprocessor/DirectiveParser.cpp index e99d843b2d3..b7f8d91ecf5 100644 --- a/chromium/third_party/angle/src/compiler/preprocessor/DirectiveParser.cpp +++ b/chromium/third_party/angle/src/compiler/preprocessor/DirectiveParser.cpp @@ -676,8 +676,16 @@ void DirectiveParser::parseExtension(Token *token) } else { - mDiagnostics->report(Diagnostics::PP_NON_PP_TOKEN_BEFORE_EXTENSION_ESSL1, - token->location, token->text); + if (mSettings.shaderSpec == SH_WEBGL_SPEC) + { + mDiagnostics->report(Diagnostics::PP_NON_PP_TOKEN_BEFORE_EXTENSION_WEBGL, + token->location, token->text); + } + else + { + mDiagnostics->report(Diagnostics::PP_NON_PP_TOKEN_BEFORE_EXTENSION_ESSL1, + token->location, token->text); + } } } if (valid) diff --git a/chromium/third_party/blink/common/features.cc b/chromium/third_party/blink/common/features.cc index f5bf253f4a6..6db2247d620 100644 --- a/chromium/third_party/blink/common/features.cc +++ b/chromium/third_party/blink/common/features.cc @@ -132,8 +132,16 @@ const base::Feature kPurgeRendererMemoryWhenBackgrounded { }; // Enable Implicit Root Scroller. https://crbug.com/903260. -const base::Feature kImplicitRootScroller{"ImplicitRootScroller", - base::FEATURE_ENABLED_BY_DEFAULT}; +// TODO(bokan): Temporarily disabled on desktop platforms to address issues +// with non-overlay scrollbars. https://crbug.com/948059. +const base::Feature kImplicitRootScroller { + "ImplicitRootScroller", +#if defined(OS_ANDROID) + base::FEATURE_ENABLED_BY_DEFAULT +#else + base::FEATURE_DISABLED_BY_DEFAULT +#endif +}; // Enables usage of getDisplayMedia() that allows capture of web content, see // https://crbug.com/865060. diff --git a/chromium/third_party/blink/public/common/scheduler/web_scheduler_tracked_feature.h b/chromium/third_party/blink/public/common/scheduler/web_scheduler_tracked_feature.h index c88a10c9cd0..25858141012 100644 --- a/chromium/third_party/blink/public/common/scheduler/web_scheduler_tracked_feature.h +++ b/chromium/third_party/blink/public/common/scheduler/web_scheduler_tracked_feature.h @@ -44,7 +44,24 @@ enum class WebSchedulerTrackedFeature { // Recorded only for the main frame. kHasScriptableFramesInMultipleTabs = 18, - kMaxValue = kHasScriptableFramesInMultipleTabs + // Whether the page tried to request a permission regardless of the outcome. + // TODO(altimin): Track this more accurately depending on the data. + // See permission.mojom for more details. + kRequestedGeolocationPermission = 19, + kRequestedNotificationsPermission = 20, + kRequestedMIDIPermission = 21, + kRequestedAudioCapturePermission = 22, + kRequestedVideoCapturePermission = 23, + kRequestedSensorsPermission = 24, + // This covers all background-related permissions, including background sync, + // background fetch and others. + kRequestedBackgroundWorkPermission = 26, + + kBroadcastChannel = 27, + + kIndexedDBConnection = 28, + + kMaxValue = kIndexedDBConnection }; } // namespace scheduler diff --git a/chromium/third_party/blink/public/mojom/page/spatial_navigation.mojom b/chromium/third_party/blink/public/mojom/page/spatial_navigation.mojom index 51538fcc766..8358e7ebc0d 100644 --- a/chromium/third_party/blink/public/mojom/page/spatial_navigation.mojom +++ b/chromium/third_party/blink/public/mojom/page/spatial_navigation.mojom @@ -11,6 +11,8 @@ struct SpatialNavigationState { bool can_exit_focus; // True if Spatial Navigation has a target that can be selected. bool can_select_element; + // True if the currently focused element is a form element. + bool is_form_focused; // True if the currently focused element is a form element, and there is a // next form element available to move to. bool has_next_form_element; diff --git a/chromium/third_party/blink/public/platform/web_localized_string.h b/chromium/third_party/blink/public/platform/web_localized_string.h index 7ba33a0c714..51c9a3cdb8b 100644 --- a/chromium/third_party/blink/public/platform/web_localized_string.h +++ b/chromium/third_party/blink/public/platform/web_localized_string.h @@ -73,6 +73,8 @@ struct WebLocalizedString { kAXMediaVolumeSliderHelp, kAXMediaEnterPictureInPictureButton, kAXMediaExitPictureInPictureButton, + kAXMediaTouchLessSeekAction, + kAXMediaTouchLessVolumeAction, kAXMillisecondFieldText, kAXMinuteFieldText, kAXMonthFieldText, diff --git a/chromium/third_party/blink/renderer/bindings/templates/callback_invoke.cc.tmpl b/chromium/third_party/blink/renderer/bindings/templates/callback_invoke.cc.tmpl index a72ca09048d..2598235ff3c 100644 --- a/chromium/third_party/blink/renderer/bindings/templates/callback_invoke.cc.tmpl +++ b/chromium/third_party/blink/renderer/bindings/templates/callback_invoke.cc.tmpl @@ -56,6 +56,11 @@ v8::Context::BackupIncumbentScope backup_incumbent_scope( IncumbentScriptState()->GetContext()); + if (UNLIKELY(ScriptForbiddenScope::IsScriptForbidden())) { + ScriptForbiddenScope::ThrowScriptForbiddenException(GetIsolate()); + return v8::Nothing<{{return_cpp_type}}>(); + } + {% if invoke_or_construct == 'construct' %} // step 3. If ! IsConstructor(F) is false, throw a TypeError exception. // diff --git a/chromium/third_party/blink/renderer/core/dom/element.cc b/chromium/third_party/blink/renderer/core/dom/element.cc index d86329b115a..e5df6bbfc6a 100644 --- a/chromium/third_party/blink/renderer/core/dom/element.cc +++ b/chromium/third_party/blink/renderer/core/dom/element.cc @@ -3491,11 +3491,26 @@ bool Element::SupportsSpatialNavigationFocus() const { // events). if (!IsSpatialNavigationEnabled(GetDocument().GetFrame())) return false; + + if (!GetLayoutObject()) + return false; + if (HasEventListeners(event_type_names::kClick) || HasEventListeners(event_type_names::kKeydown) || HasEventListeners(event_type_names::kKeypress) || HasEventListeners(event_type_names::kKeyup)) return true; + + // Some web apps use click-handlers to react on clicks within rects that are + // styled with {cursor: pointer}. Such rects *look* clickable so they probably + // are. Here we make Hand-trees' tip, the first (biggest) node with {cursor: + // pointer}, navigable because users shouldn't need to navigate through every + // sub element that inherit this CSS. + if (GetComputedStyle()->Cursor() == ECursor::kPointer && + ParentComputedStyle()->Cursor() != ECursor::kPointer) { + return true; + } + if (!IsSVGElement()) return false; return (HasEventListeners(event_type_names::kFocus) || diff --git a/chromium/third_party/blink/renderer/core/dom/events/event_dispatcher.cc b/chromium/third_party/blink/renderer/core/dom/events/event_dispatcher.cc index 3b6dab593bd..8f3eaf84d00 100644 --- a/chromium/third_party/blink/renderer/core/dom/events/event_dispatcher.cc +++ b/chromium/third_party/blink/renderer/core/dom/events/event_dispatcher.cc @@ -36,6 +36,7 @@ #include "third_party/blink/renderer/core/dom/events/event_path.h" #include "third_party/blink/renderer/core/dom/events/scoped_event_queue.h" #include "third_party/blink/renderer/core/dom/events/window_event_context.h" +#include "third_party/blink/renderer/core/events/keyboard_event.h" #include "third_party/blink/renderer/core/events/mouse_event.h" #include "third_party/blink/renderer/core/frame/ad_tracker.h" #include "third_party/blink/renderer/core/frame/deprecation.h" @@ -45,6 +46,8 @@ #include "third_party/blink/renderer/core/frame/use_counter.h" #include "third_party/blink/renderer/core/html/html_element.h" #include "third_party/blink/renderer/core/inspector/inspector_trace_events.h" +#include "third_party/blink/renderer/core/page/page.h" +#include "third_party/blink/renderer/core/page/spatial_navigation_controller.h" #include "third_party/blink/renderer/core/timing/event_timing.h" #include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h" @@ -370,6 +373,15 @@ inline void EventDispatcher::DispatchEventPostProcess( } } + if (Page* page = node_->GetDocument().GetPage()) { + if (page->GetSettings().GetSpatialNavigationEnabled() && + is_trusted_or_click && event_->IsKeyboardEvent() && + ToKeyboardEvent(*event_).key() == "Enter" && + event_->type() == event_type_names::kKeyup) { + page->GetSpatialNavigationController().ResetEnterKeyState(); + } + } + // Track the usage of sending a mousedown event to a select element to force // it to open. This measures a possible breakage of not allowing untrusted // events to open select boxes. diff --git a/chromium/third_party/blink/renderer/core/editing/frame_selection.h b/chromium/third_party/blink/renderer/core/editing/frame_selection.h index 6dc0e1cf974..1da4b7aad96 100644 --- a/chromium/third_party/blink/renderer/core/editing/frame_selection.h +++ b/chromium/third_party/blink/renderer/core/editing/frame_selection.h @@ -201,6 +201,10 @@ class CORE_EXPORT FrameSelection final // Note: this updates styles and layout, use cautiously. bool ComputeAbsoluteBounds(IntRect& anchor, IntRect& focus) const; + // Computes the rect we should use when scrolling/zooming a selection into + // view. + IntRect ComputeRectToScroll(RevealExtentOption); + void DidChangeFocus(); SelectionInDOMTree GetSelectionInDOMTree() const; @@ -299,8 +303,6 @@ class CORE_EXPORT FrameSelection final GranularityStrategy* GetGranularityStrategy(); - IntRect ComputeRectToScroll(RevealExtentOption); - void MoveRangeSelectionInternal(const SelectionInDOMTree&, TextGranularity); // Implementation of |SynchronousMutationObserver| member functions. diff --git a/chromium/third_party/blink/renderer/core/exported/web_frame_test.cc b/chromium/third_party/blink/renderer/core/exported/web_frame_test.cc index a6969cca501..c45adc0ced8 100644 --- a/chromium/third_party/blink/renderer/core/exported/web_frame_test.cc +++ b/chromium/third_party/blink/renderer/core/exported/web_frame_test.cc @@ -122,6 +122,7 @@ #include "third_party/blink/renderer/core/fullscreen/fullscreen.h" #include "third_party/blink/renderer/core/geometry/dom_rect.h" #include "third_party/blink/renderer/core/html/forms/html_form_element.h" +#include "third_party/blink/renderer/core/html/forms/html_input_element.h" #include "third_party/blink/renderer/core/html/html_body_element.h" #include "third_party/blink/renderer/core/html/html_iframe_element.h" #include "third_party/blink/renderer/core/html/image_document.h" @@ -3390,6 +3391,46 @@ TEST_F(WebFrameTest, CanOverrideScaleLimits) { EXPECT_EQ(2.0f, web_view_helper.GetWebView()->MaximumPageScaleFactor()); } +// Test that setting the "ignore viewport tag scale limits" override remembers +// the current defaults and restores them when the override is removed. +TEST_F(WebFrameTest, RestoreOriginalDefaultScaleLimits) { + RegisterMockedHttpURLLoad("simple_div.html"); + + FixedLayoutTestWebViewClient client; + client.screen_info_.device_scale_factor = 1; + int viewport_width = 640; + int viewport_height = 480; + + frame_test_helpers::WebViewHelper web_view_helper; + web_view_helper.InitializeAndLoad(base_url_ + "simple_div.html", nullptr, + &client, nullptr, ConfigureAndroid); + web_view_helper.Resize(WebSize(viewport_width, viewport_height)); + web_view_helper.GetWebView()->SetDefaultPageScaleLimits(0.25f, 5); + + const float minimum_scale_factor = + web_view_helper.GetWebView()->MinimumPageScaleFactor(); + + web_view_helper.GetWebView()->SetInitialPageScaleOverride(2.0f); + + // Removing the override when none is set shouldn't change the initial scale. + web_view_helper.GetWebView()->SetIgnoreViewportTagScaleLimits(false); + UpdateAllLifecyclePhases(web_view_helper.GetWebView()); + EXPECT_EQ(2.0f, web_view_helper.GetWebView()->PageScaleFactor()); + + // Setting the override when will change the initial scale. + web_view_helper.GetWebView()->SetIgnoreViewportTagScaleLimits(true); + web_view_helper.GetWebView()->ResetScaleStateImmediately(); + UpdateAllLifecyclePhases(web_view_helper.GetWebView()); + EXPECT_EQ(minimum_scale_factor, + web_view_helper.GetWebView()->PageScaleFactor()); + + // Disable the override, we should now use the minimum scale factor + web_view_helper.GetWebView()->SetIgnoreViewportTagScaleLimits(false); + web_view_helper.GetWebView()->ResetScaleStateImmediately(); + UpdateAllLifecyclePhases(web_view_helper.GetWebView()); + EXPECT_EQ(2.0f, web_view_helper.GetWebView()->PageScaleFactor()); +} + // Android doesn't have scrollbars on the main LocalFrameView #if defined(OS_ANDROID) TEST_F(WebFrameTest, DISABLED_updateOverlayScrollbarLayers) @@ -11419,6 +11460,40 @@ class WebFrameSimTest : public SimTest { } }; +// This test ensures that setting the "Force Ignore Zoom" accessibility setting +// also causes us to override the initial scale set by the page so that we load +// fully zoomed out. Since we're overriding the minimum-scale, we're making the +// layout viewport larger. Since |position: fixed| elements are sized based on +// the layout viewport size, they may be cut off when the page first loads. +TEST_F(WebFrameSimTest, ForceIgnoreZoomShouldOverrideInitialScale) { + UseAndroidSettings(); + WebView().MainFrameWidget()->Resize(WebSize(500, 300)); + WebView().SetIgnoreViewportTagScaleLimits(true); + + SimRequest r("https://example.com/test.html", "text/html"); + LoadURL("https://example.com/test.html"); + r.Complete(R"HTML( + <!DOCTYPE html> + <meta name="viewport" content="width=device-width, minimum-scale=1, initial-scale=1"> + <style> + body, html { + width: 100%; + height: 100%; + margin: 0; + } + #wide { + width: 1000px; + height: 10px; + } + </style> + <div id="wide"></div> + )HTML"); + + Compositor().BeginFrame(); + + EXPECT_EQ(0.5f, WebView().PageScaleFactor()); +} + TEST_F(WebFrameSimTest, HitTestWithIgnoreClippingAtNegativeOffset) { WebView().MainFrameWidget()->Resize(WebSize(500, 300)); WebView().GetPage()->GetSettings().SetTextAutosizingEnabled(false); @@ -11939,6 +12014,58 @@ TEST_F(WebFrameSimTest, ScrollFocusedIntoViewClipped) { EXPECT_GT(clip->scrollTop(), 0); } +// This test ensures that we scroll to the correct scale when the focused +// element has a selection rather than a carret. +TEST_F(WebFrameSimTest, ScrollFocusedSelectionIntoView) { + UseAndroidSettings(); + WebView().MainFrameWidget()->Resize(WebSize(400, 600)); + WebView().EnableFakePageScaleAnimationForTesting(true); + WebView().GetPage()->GetSettings().SetTextAutosizingEnabled(false); + + SimRequest request("https://example.com/test.html", "text/html"); + LoadURL("https://example.com/test.html"); + request.Complete(R"HTML( + <!DOCTYPE html> + <style> + ::-webkit-scrollbar { + width: 0px; + height: 0px; + } + body, html { + margin: 0px; + width: 100%; + height: 100%; + } + input { + padding: 0; + width: 100px; + height: 20px; + } + </style> + <input type="text" id="target" value="test"> + )HTML"); + + Compositor().BeginFrame(); + WebView().AdvanceFocus(false); + + HTMLInputElement* input = + ToHTMLInputElement(GetDocument().getElementById("target")); + input->select(); + + // Simulate the keyboard being shown and resizing the widget. Cause a scroll + // into view after. + ASSERT_EQ(WebView().FakePageScaleAnimationPageScaleForTesting(), 0.f); + WebFrameWidget* widget = WebView().MainFrameImpl()->FrameWidgetImpl(); + widget->ScrollFocusedEditableElementIntoView(); + + // Make sure zoomed in but only up to a legible scale. The bounds are + // arbitrary and fuzzy since we don't specifically care to constrain the + // amount of zooming (that should be tested elsewhere), we just care that it + // zooms but not off to infinity. + EXPECT_GT(WebView().FakePageScaleAnimationPageScaleForTesting(), .75f); + EXPECT_LT(WebView().FakePageScaleAnimationPageScaleForTesting(), 2.f); +} + TEST_F(WebFrameSimTest, DoubleTapZoomWhileScrolled) { UseAndroidSettings(); WebView().MainFrameWidget()->Resize(WebSize(490, 500)); diff --git a/chromium/third_party/blink/renderer/core/exported/web_view_impl.cc b/chromium/third_party/blink/renderer/core/exported/web_view_impl.cc index fa2150289b4..41e11e56e95 100644 --- a/chromium/third_party/blink/renderer/core/exported/web_view_impl.cc +++ b/chromium/third_party/blink/renderer/core/exported/web_view_impl.cc @@ -2156,7 +2156,7 @@ bool WebViewImpl::ScrollFocusedEditableElementIntoView() { element->GetDocument() .GetFrame() ->Selection() - .AbsoluteCaretBounds())), + .ComputeRectToScroll(kDoNotRevealExtent))), ShouldZoomToLegibleScale(*element)); return true; @@ -2514,16 +2514,26 @@ void WebViewImpl::SetMaximumLegibleScale(float maximum_legible_scale) { } void WebViewImpl::SetIgnoreViewportTagScaleLimits(bool ignore) { + // This method should be idempotent. + if (ignore == pre_override_default_constraints_.has_value()) + return; + PageScaleConstraints constraints = GetPageScaleConstraintsSet().UserAgentConstraints(); if (ignore) { + DCHECK(!pre_override_default_constraints_); + pre_override_default_constraints_.emplace(constraints); + constraints.minimum_scale = GetPageScaleConstraintsSet().DefaultConstraints().minimum_scale; constraints.maximum_scale = GetPageScaleConstraintsSet().DefaultConstraints().maximum_scale; + constraints.initial_scale = + GetPageScaleConstraintsSet().DefaultConstraints().minimum_scale; } else { - constraints.minimum_scale = -1; - constraints.maximum_scale = -1; + DCHECK(pre_override_default_constraints_); + constraints = pre_override_default_constraints_.value(); + pre_override_default_constraints_.reset(); } GetPage()->SetUserAgentPageScaleConstraints(constraints); } diff --git a/chromium/third_party/blink/renderer/core/exported/web_view_impl.h b/chromium/third_party/blink/renderer/core/exported/web_view_impl.h index aaa17462ee6..64a22db62db 100644 --- a/chromium/third_party/blink/renderer/core/exported/web_view_impl.h +++ b/chromium/third_party/blink/renderer/core/exported/web_view_impl.h @@ -691,6 +691,10 @@ class CORE_EXPORT WebViewImpl final : public WebView, FloatSize elastic_overscroll_; + // When overriding the default page scale constraints, store the original so + // we can revert to them when the override is removed. + base::Optional<PageScaleConstraints> pre_override_default_constraints_; + Persistent<EventListener> popup_mouse_wheel_event_listener_; // The local root whose document has |popup_mouse_wheel_event_listener_| diff --git a/chromium/third_party/blink/renderer/core/frame/local_frame.cc b/chromium/third_party/blink/renderer/core/frame/local_frame.cc index dd0e2f0df7b..c1f7d53655b 100644 --- a/chromium/third_party/blink/renderer/core/frame/local_frame.cc +++ b/chromium/third_party/blink/renderer/core/frame/local_frame.cc @@ -339,7 +339,7 @@ void LocalFrame::Navigate(const FrameLoadRequest& request, WebFrameLoadType frame_load_type) { if (!navigation_rate_limiter().CanProceed()) return; - if (request.ClientRedirect() == ClientRedirectPolicy::kClientRedirect) { + if (request.ClientRedirectReason() != ClientNavigationReason::kNone) { probe::FrameScheduledNavigation(this, request.GetResourceRequest().Url(), 0.0, request.ClientRedirectReason()); if (NavigationScheduler::MustReplaceCurrentItem(this)) @@ -347,7 +347,7 @@ void LocalFrame::Navigate(const FrameLoadRequest& request, } loader_.StartNavigation(request, frame_load_type); - if (request.ClientRedirect() == ClientRedirectPolicy::kClientRedirect) + if (request.ClientRedirectReason() != ClientNavigationReason::kNone) probe::FrameClearedScheduledNavigation(this); } diff --git a/chromium/third_party/blink/renderer/core/frame/remote_frame.cc b/chromium/third_party/blink/renderer/core/frame/remote_frame.cc index 9de006e1b8e..fce85b75bcd 100644 --- a/chromium/third_party/blink/renderer/core/frame/remote_frame.cc +++ b/chromium/third_party/blink/renderer/core/frame/remote_frame.cc @@ -111,8 +111,8 @@ void RemoteFrame::Navigate(const FrameLoadRequest& passed_request, frame->GetSecurityContext() && frame->GetSecurityContext()->IsSandboxed(WebSandboxFlags::kDownloads); initiator_frame_is_ad = frame->IsAdSubframe(); - if (passed_request.ClientRedirect() == - ClientRedirectPolicy::kClientRedirect) { + if (passed_request.ClientRedirectReason() != + ClientNavigationReason::kNone) { probe::FrameRequestedNavigation(frame, this, url, passed_request.ClientRedirectReason()); } diff --git a/chromium/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc b/chromium/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc index 98176198d5c..334198dff21 100644 --- a/chromium/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc +++ b/chromium/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc @@ -147,8 +147,6 @@ intptr_t HTMLCanvasElement::global_gpu_memory_usage_ = 0; unsigned HTMLCanvasElement::global_accelerated_context_count_ = 0; HTMLCanvasElement::~HTMLCanvasElement() { - if (surface_layer_bridge_ && surface_layer_bridge_->GetCcLayer()) - GraphicsLayer::UnregisterContentsLayer(surface_layer_bridge_->GetCcLayer()); v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory( -externally_allocated_memory_); } @@ -177,6 +175,19 @@ void HTMLCanvasElement::Dispose() { global_accelerated_context_count_--; } global_gpu_memory_usage_ -= gpu_memory_usage_; + + if (surface_layer_bridge_) { + if (surface_layer_bridge_->GetCcLayer()) { + GraphicsLayer::UnregisterContentsLayer( + surface_layer_bridge_->GetCcLayer()); + } + // Observer has to be cleared out at this point. Otherwise the + // SurfaceLayerBridge may call back into the observer which is undefined + // behavior. In the worst case, the dead canvas element re-adds itself into + // a data structure which may crash at a later point in time. See + // https://crbug.com/976577. + surface_layer_bridge_->ClearObserver(); + } } void HTMLCanvasElement::ParseAttribute( diff --git a/chromium/third_party/blink/renderer/core/html/forms/radio_input_type.cc b/chromium/third_party/blink/renderer/core/html/forms/radio_input_type.cc index 390b142468a..ac8f7326720 100644 --- a/chromium/third_party/blink/renderer/core/html/forms/radio_input_type.cc +++ b/chromium/third_party/blink/renderer/core/html/forms/radio_input_type.cc @@ -155,8 +155,6 @@ void RadioInputType::HandleKeyupEvent(KeyboardEvent& event) { event.key() == "Enter")) { DispatchSimulatedClickIfActive(event); } - - DispatchSimulatedClickIfActive(event); } bool RadioInputType::IsKeyboardFocusable() const { diff --git a/chromium/third_party/blink/renderer/core/html/html_anchor_element.cc b/chromium/third_party/blink/renderer/core/html/html_anchor_element.cc index 94733fedf25..786167ccc30 100644 --- a/chromium/third_party/blink/renderer/core/html/html_anchor_element.cc +++ b/chromium/third_party/blink/renderer/core/html/html_anchor_element.cc @@ -429,8 +429,10 @@ void HTMLAnchorElement::HandleClick(Event& event) { } request.SetRequestContext(mojom::RequestContextType::HYPERLINK); - FrameLoadRequest frame_request(&GetDocument(), request, - getAttribute(kTargetAttr)); + const AtomicString& target = getAttribute(kTargetAttr); + FrameLoadRequest frame_request( + &GetDocument(), request, + target.IsEmpty() ? GetDocument().BaseTarget() : target); frame_request.SetNavigationPolicy(NavigationPolicyFromEvent(&event)); if (HasRel(kRelationNoReferrer)) { frame_request.SetShouldSendReferrer(kNeverSendReferrer); diff --git a/chromium/third_party/blink/renderer/core/html/html_element.cc b/chromium/third_party/blink/renderer/core/html/html_element.cc index 8803bea1c77..8a830c69504 100644 --- a/chromium/third_party/blink/renderer/core/html/html_element.cc +++ b/chromium/third_party/blink/renderer/core/html/html_element.cc @@ -1332,6 +1332,8 @@ bool HTMLElement::MatchesReadWritePseudoClass() const { void HTMLElement::HandleKeypressEvent(KeyboardEvent& event) { if (!IsSpatialNavigationEnabled(GetDocument().GetFrame()) || !SupportsFocus()) return; + if (RuntimeEnabledFeatures::FocuslessSpatialNavigationEnabled()) + return; GetDocument().UpdateStyleAndLayoutTree(); // if the element is a text form control (like <input type=text> or // <textarea>) or has contentEditable attribute on, we should enter a space or diff --git a/chromium/third_party/blink/renderer/core/html/html_frame_owner_element.cc b/chromium/third_party/blink/renderer/core/html/html_frame_owner_element.cc index bfc6b9530d1..9501d2dd946 100644 --- a/chromium/third_party/blink/renderer/core/html/html_frame_owner_element.cc +++ b/chromium/third_party/blink/renderer/core/html/html_frame_owner_element.cc @@ -25,6 +25,7 @@ #include "third_party/blink/renderer/core/css/style_change_reason.h" #include "third_party/blink/renderer/core/dom/events/event.h" #include "third_party/blink/renderer/core/dom/node_computed_style.h" +#include "third_party/blink/renderer/core/events/current_input_event.h" #include "third_party/blink/renderer/core/exported/web_plugin_container_impl.h" #include "third_party/blink/renderer/core/frame/csp/content_security_policy.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h" @@ -403,13 +404,12 @@ bool HTMLFrameOwnerElement::LoadOrRedirectSubframe( KURL url_to_request = url.IsNull() ? BlankURL() : url; if (ContentFrame()) { // TODO(sclittle): Support lazily loading frame navigations. + FrameLoadRequest request(&GetDocument(), ResourceRequest(url_to_request)); + request.SetClientRedirectReason(ClientNavigationReason::kFrameNavigation); WebFrameLoadType frame_load_type = WebFrameLoadType::kStandard; if (replace_current_item) frame_load_type = WebFrameLoadType::kReplaceCurrentItem; - - ContentFrame()->ScheduleNavigation(GetDocument(), url_to_request, - frame_load_type, - UserGestureStatus::kNone); + ContentFrame()->Navigate(request, frame_load_type); return true; } diff --git a/chromium/third_party/blink/renderer/core/html/media/html_video_element.cc b/chromium/third_party/blink/renderer/core/html/media/html_video_element.cc index 07f6c2998fa..723c7faf25b 100644 --- a/chromium/third_party/blink/renderer/core/html/media/html_video_element.cc +++ b/chromium/third_party/blink/renderer/core/html/media/html_video_element.cc @@ -402,6 +402,8 @@ void HTMLVideoElement::OnPlay() { return; } + std::unique_ptr<UserGestureIndicator> gesture = + LocalFrame::NotifyUserActivation(GetDocument().GetFrame()); webkitEnterFullscreen(); } diff --git a/chromium/third_party/blink/renderer/core/html/media/video_auto_fullscreen_test.cc b/chromium/third_party/blink/renderer/core/html/media/video_auto_fullscreen_test.cc index c1a36918ec0..749e6a68982 100644 --- a/chromium/third_party/blink/renderer/core/html/media/video_auto_fullscreen_test.cc +++ b/chromium/third_party/blink/renderer/core/html/media/video_auto_fullscreen_test.cc @@ -157,4 +157,30 @@ TEST_F(VideoAutoFullscreen, ExitFullscreenDoesNotPauseWithPlaysInline) { EXPECT_FALSE(Video()->paused()); } +TEST_F(VideoAutoFullscreen, OnPlayTriggersFullscreenWithoutGesture) { + Video()->SetSrc("http://example.com/foo.mp4"); + { + std::unique_ptr<UserGestureIndicator> user_gesture_scope = + LocalFrame::NotifyUserActivation(GetFrame(), + UserGestureToken::kNewGesture); + Video()->Play(); + } + MakeGarbageCollected<WaitForEvent>(Video(), event_type_names::kPlay); + test::RunPendingTasks(); + + EXPECT_TRUE(Video()->IsFullscreen()); + + GetWebView()->ExitFullscreen(*GetFrame()); + test::RunPendingTasks(); + + EXPECT_TRUE(Video()->paused()); + EXPECT_FALSE(Video()->IsFullscreen()); + + Video()->Play(); + test::RunPendingTasks(); + + EXPECT_FALSE(Video()->paused()); + EXPECT_TRUE(Video()->IsFullscreen()); +} + } // namespace blink diff --git a/chromium/third_party/blink/renderer/core/input/event_handler_test.cc b/chromium/third_party/blink/renderer/core/input/event_handler_test.cc index 0cff945a90f..33b3969cbc4 100644 --- a/chromium/third_party/blink/renderer/core/input/event_handler_test.cc +++ b/chromium/third_party/blink/renderer/core/input/event_handler_test.cc @@ -33,6 +33,8 @@ #include "third_party/blink/renderer/core/testing/sim/sim_test.h" #include "third_party/blink/renderer/platform/keyboard_codes.h" #include "third_party/blink/renderer/platform/testing/unit_test_helpers.h" +#include "ui/events/keycodes/dom/dom_code.h" +#include "ui/events/keycodes/dom/dom_key.h" namespace blink { @@ -592,6 +594,22 @@ TEST_F(EventHandlerTest, EditableAnchorTextCanStartSelection) { Cursor::Type::kIBeam); // An I-beam signals editability. } +TEST_F(EventHandlerTest, implicitSend) { + SetHtmlInnerHTML("<button>abc</button>"); + GetDocument().GetSettings()->SetSpatialNavigationEnabled(true); + + WebKeyboardEvent e{WebInputEvent::kRawKeyDown, WebInputEvent::kNoModifiers, + WebInputEvent::GetStaticTimeStampForTests()}; + e.dom_code = static_cast<int>(ui::DomCode::ARROW_DOWN); + e.dom_key = ui::DomKey::ARROW_DOWN; + GetDocument().GetFrame()->GetEventHandler().KeyEvent(e); + + // TODO(crbug.com/949766) Should cleanup these magic numbers. + e.dom_code = 0; + e.dom_key = 0x00200310; + GetDocument().GetFrame()->GetEventHandler().KeyEvent(e); +} + // Regression test for http://crbug.com/641403 to verify we use up-to-date // layout tree for dispatching "contextmenu" event. TEST_F(EventHandlerTest, sendContextMenuEventWithHover) { diff --git a/chromium/third_party/blink/renderer/core/input/keyboard_event_manager.cc b/chromium/third_party/blink/renderer/core/input/keyboard_event_manager.cc index aefdaab5a13..d6b65860898 100644 --- a/chromium/third_party/blink/renderer/core/input/keyboard_event_manager.cc +++ b/chromium/third_party/blink/renderer/core/input/keyboard_event_manager.cc @@ -339,6 +339,9 @@ void KeyboardEventManager::DefaultKeyboardEventHandler( DefaultEscapeEventHandler(event); } else if (event->key() == "Enter") { DefaultEnterEventHandler(event); + } else if (static_cast<int>(event->KeyEvent()->dom_key) == 0x00200310) { + // TODO(bokan): Cleanup magic numbers once https://crbug.com/949766 lands. + DefaultImeSubmitHandler(event); } else { // TODO(bokan): Seems odd to call the default _arrow_ event handler on // events that aren't necessarily arrow keys. @@ -348,16 +351,19 @@ void KeyboardEventManager::DefaultKeyboardEventHandler( frame_->GetEditor().HandleKeyboardEvent(event); if (event->DefaultHandled()) return; - if (event->charCode() == ' ') + if (event->key() == "Enter") { + DefaultEnterEventHandler(event); + } else if (event->charCode() == ' ') { DefaultSpaceEventHandler(event, possible_focused_node); + } } else if (event->type() == event_type_names::kKeyup) { + if (event->DefaultHandled()) + return; if (event->key() == "Enter") { DefaultEnterEventHandler(event); - return; - } - - if (event->keyCode() == kVKeySpatNavBack) + } else if (event->keyCode() == kVKeySpatNavBack) { DefaultSpatNavBackEventHandler(event); + } } } @@ -509,6 +515,17 @@ void KeyboardEventManager::DefaultEnterEventHandler(KeyboardEvent* event) { } } +void KeyboardEventManager::DefaultImeSubmitHandler(KeyboardEvent* event) { + Page* page = frame_->GetPage(); + if (!page) + return; + + if (IsSpatialNavigationEnabled(frame_) && + !frame_->GetDocument()->InDesignMode()) { + page->GetSpatialNavigationController().HandleImeSubmitKeyboardEvent(event); + } +} + static OverrideCapsLockState g_override_caps_lock_state; void KeyboardEventManager::SetCurrentCapsLockState( diff --git a/chromium/third_party/blink/renderer/core/input/keyboard_event_manager.h b/chromium/third_party/blink/renderer/core/input/keyboard_event_manager.h index 3d9afb6f6fe..3f1b4c4de8d 100644 --- a/chromium/third_party/blink/renderer/core/input/keyboard_event_manager.h +++ b/chromium/third_party/blink/renderer/core/input/keyboard_event_manager.h @@ -56,6 +56,7 @@ class CORE_EXPORT KeyboardEventManager void DefaultTabEventHandler(KeyboardEvent*); void DefaultEscapeEventHandler(KeyboardEvent*); void DefaultEnterEventHandler(KeyboardEvent*); + void DefaultImeSubmitHandler(KeyboardEvent*); void DefaultArrowEventHandler(KeyboardEvent*, Node*); bool DefaultSpatNavBackEventHandler(KeyboardEvent*); diff --git a/chromium/third_party/blink/renderer/core/layout/layout_block.cc b/chromium/third_party/blink/renderer/core/layout/layout_block.cc index 481a0be7dc1..cbbd9281df3 100644 --- a/chromium/third_party/blink/renderer/core/layout/layout_block.cc +++ b/chromium/third_party/blink/renderer/core/layout/layout_block.cc @@ -1128,6 +1128,15 @@ void LayoutBlock::RemovePositionedObjects( } void LayoutBlock::AddPercentHeightDescendant(LayoutBox* descendant) { + // A replaced object is incapable of properly acting as a containing block for + // its children (this is an issue with VIDEO elements, for instance, which + // inserts some percentage height flexbox children). Assert that the + // descendant hasn't escaped from within a replaced object. Registering the + // percentage height descendant further up in the tree is only going to cause + // trouble, especially if the replaced object is out-of-flow positioned (and + // we failed to notice). + DCHECK(!descendant->Container()->IsLayoutReplaced()); + if (descendant->PercentHeightContainer()) { if (descendant->PercentHeightContainer() == this) { DCHECK(HasPercentHeightDescendant(descendant)); diff --git a/chromium/third_party/blink/renderer/core/layout/layout_box.cc b/chromium/third_party/blink/renderer/core/layout/layout_box.cc index 5313c3963a3..a28f0ae2be2 100644 --- a/chromium/third_party/blink/renderer/core/layout/layout_box.cc +++ b/chromium/third_party/blink/renderer/core/layout/layout_box.cc @@ -3743,7 +3743,13 @@ LayoutUnit LayoutBox::ComputePercentageLogicalHeight( &cb, &skipped_auto_height_containing_block); DCHECK(cb); - cb->AddPercentHeightDescendant(const_cast<LayoutBox*>(this)); + + // If the container of the descendant is a replaced element (a VIDEO, for + // instance), |cb| (which uses ContainingBlock()) may actually not be in the + // containing block chain for the descendant. + const LayoutObject* container = Container(); + if (!container->IsLayoutReplaced()) + cb->AddPercentHeightDescendant(const_cast<LayoutBox*>(this)); if (available_height == -1) return available_height; diff --git a/chromium/third_party/blink/renderer/core/layout/layout_flexible_box.cc b/chromium/third_party/blink/renderer/core/layout/layout_flexible_box.cc index 230c3830fbc..4cfaf04e392 100644 --- a/chromium/third_party/blink/renderer/core/layout/layout_flexible_box.cc +++ b/chromium/third_party/blink/renderer/core/layout/layout_flexible_box.cc @@ -1393,7 +1393,8 @@ bool LayoutFlexibleBox::ChildHasIntrinsicMainAxisSize( const FlexLayoutAlgorithm& algorithm, const LayoutBox& child) const { bool result = false; - if (!MainAxisIsInlineAxis(child) && !child.ShouldApplySizeContainment()) { + bool main_axis_is_inline = MainAxisIsInlineAxis(child); + if (!main_axis_is_inline && !child.ShouldApplySizeContainment()) { Length child_flex_basis = FlexBasisForChild(child); const Length& child_min_size = IsHorizontalFlow() ? child.StyleRef().MinWidth() @@ -1407,6 +1408,11 @@ bool LayoutFlexibleBox::ChildHasIntrinsicMainAxisSize( } else if (algorithm.ShouldApplyMinSizeAutoForChild(child)) { result = true; } + } else if (main_axis_is_inline && + child.StyleRef().OverflowInlineDirection() == EOverflow::kAuto) { + // Because scrollbars depend on layout, we need to layout before running + // the algorithm to get an up-to-date size. + result = true; } return result; } diff --git a/chromium/third_party/blink/renderer/core/loader/form_submission.cc b/chromium/third_party/blink/renderer/core/loader/form_submission.cc index 020052ff693..1ad45a7cc58 100644 --- a/chromium/third_party/blink/renderer/core/loader/form_submission.cc +++ b/chromium/third_party/blink/renderer/core/loader/form_submission.cc @@ -288,6 +288,8 @@ FrameLoadRequest FormSubmission::CreateFrameLoadRequest( if (!target_.IsEmpty()) frame_request.SetFrameName(target_); + else + frame_request.SetFrameName(origin_document->BaseTarget()); ClientNavigationReason reason = ClientNavigationReason::kFormSubmissionGet; if (method_ == FormSubmission::kPostMethod) { diff --git a/chromium/third_party/blink/renderer/core/loader/frame_load_request.cc b/chromium/third_party/blink/renderer/core/loader/frame_load_request.cc index 78c15ae6085..1bfa77c670a 100644 --- a/chromium/third_party/blink/renderer/core/loader/frame_load_request.cc +++ b/chromium/third_party/blink/renderer/core/loader/frame_load_request.cc @@ -8,6 +8,7 @@ #include "third_party/blink/public/platform/web_url_request.h" #include "third_party/blink/renderer/core/events/current_input_event.h" #include "third_party/blink/renderer/core/fileapi/public_url_manager.h" +#include "third_party/blink/renderer/core/frame/csp/content_security_policy.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_request.h" #include "third_party/blink/renderer/platform/wtf/text/atomic_string.h" @@ -37,7 +38,6 @@ FrameLoadRequest::FrameLoadRequest( : origin_document_(origin_document), resource_request_(resource_request), frame_name_(frame_name), - client_redirect_(ClientRedirectPolicy::kNotClientRedirect), should_send_referrer_(kMaybeSendReferrer), should_check_main_world_content_security_policy_( should_check_main_world_content_security_policy) { @@ -63,7 +63,22 @@ FrameLoadRequest::FrameLoadRequest( origin_document->GetPublicURLManager().Resolve( resource_request.Url(), MakeRequest(&blob_url_token_->data)); } + + if (ContentSecurityPolicy::ShouldBypassMainWorld(origin_document)) { + should_check_main_world_content_security_policy_ = + kDoNotCheckContentSecurityPolicy; + } } } +ClientRedirectPolicy FrameLoadRequest::ClientRedirect() const { + // Form submissions have not historically been reported to the extensions API + // as client redirects. + if (client_navigation_reason_ == ClientNavigationReason::kNone || + client_navigation_reason_ == ClientNavigationReason::kFormSubmissionGet || + client_navigation_reason_ == ClientNavigationReason::kFormSubmissionPost) + return ClientRedirectPolicy::kNotClientRedirect; + return ClientRedirectPolicy::kClientRedirect; +} + } // namespace blink diff --git a/chromium/third_party/blink/renderer/core/loader/frame_load_request.h b/chromium/third_party/blink/renderer/core/loader/frame_load_request.h index 3c4e77dec96..a35c92f0ca9 100644 --- a/chromium/third_party/blink/renderer/core/loader/frame_load_request.h +++ b/chromium/third_party/blink/renderer/core/loader/frame_load_request.h @@ -74,15 +74,15 @@ struct CORE_EXPORT FrameLoadRequest { frame_name_ = frame_name; } - ClientRedirectPolicy ClientRedirect() const { return client_redirect_; } + // TODO(japhet): This is only used from frame_loader.cc, and can probably be + // an implementation detail there. + ClientRedirectPolicy ClientRedirect() const; void SetClientRedirectReason(ClientNavigationReason reason) { - client_redirect_ = ClientRedirectPolicy::kClientRedirect; client_navigation_reason_ = reason; } ClientNavigationReason ClientRedirectReason() const { - DCHECK_EQ(ClientRedirectPolicy::kClientRedirect, client_redirect_); return client_navigation_reason_; } @@ -165,11 +165,8 @@ struct CORE_EXPORT FrameLoadRequest { ResourceRequest resource_request_; AtomicString frame_name_; AtomicString href_translate_; - // TODO(caseq): merge ClientRedirectPolicy and ClientNavigationReason. - // Currently, client_navigation_reason_ is set iff ClientRedirectPolicy - // is set to kClientRedirect. - ClientRedirectPolicy client_redirect_; - ClientNavigationReason client_navigation_reason_; + ClientNavigationReason client_navigation_reason_ = + ClientNavigationReason::kNone; NavigationPolicy navigation_policy_ = kNavigationPolicyCurrentTab; WebTriggeringEventInfo triggering_event_info_ = WebTriggeringEventInfo::kNotFromEvent; diff --git a/chromium/third_party/blink/renderer/core/loader/frame_loader.cc b/chromium/third_party/blink/renderer/core/loader/frame_loader.cc index ebc44803f9a..3f2dad0e9a2 100644 --- a/chromium/third_party/blink/renderer/core/loader/frame_loader.cc +++ b/chromium/third_party/blink/renderer/core/loader/frame_loader.cc @@ -444,7 +444,7 @@ void FrameLoader::DidFinishNavigation() { // progress. DCHECK((document_loader_ && document_loader_->SentDidFinishLoad()) || !HasProvisionalNavigation()); - if (!document_loader_ || !document_loader_->SentDidFinishLoad() || + if ((document_loader_ && !document_loader_->SentDidFinishLoad()) || HasProvisionalNavigation()) { return; } @@ -730,9 +730,6 @@ bool FrameLoader::PrepareRequestForThisFrame(FrameLoadRequest& request) { "Not allowed to load local resource: " + url.ElidedString())); return false; } - - if (request.FrameName().IsEmpty()) - request.SetFrameName(frame_->GetDocument()->BaseTarget()); return true; } @@ -948,7 +945,7 @@ void FrameLoader::StartNavigation(const FrameLoadRequest& passed_request, } } - if (request.ClientRedirect() == ClientRedirectPolicy::kClientRedirect) { + if (request.ClientRedirectReason() != ClientNavigationReason::kNone) { probe::FrameRequestedNavigation(frame_, frame_, url, request.ClientRedirectReason()); } diff --git a/chromium/third_party/blink/renderer/core/loader/frame_loader_types.h b/chromium/third_party/blink/renderer/core/loader/frame_loader_types.h index 4df8bae808c..fa84bd0dfed 100644 --- a/chromium/third_party/blink/renderer/core/loader/frame_loader_types.h +++ b/chromium/third_party/blink/renderer/core/loader/frame_loader_types.h @@ -79,6 +79,7 @@ enum class ClientNavigationReason { kMetaTagRefresh, kPageBlock, kReload, + kNone }; } // namespace blink diff --git a/chromium/third_party/blink/renderer/core/loader/resource/script_resource.cc b/chromium/third_party/blink/renderer/core/loader/resource/script_resource.cc index e60593d480f..c9db8b3291c 100644 --- a/chromium/third_party/blink/renderer/core/loader/resource/script_resource.cc +++ b/chromium/third_party/blink/renderer/core/loader/resource/script_resource.cc @@ -290,6 +290,7 @@ void ScriptResource::OnDataPipeReadable(MojoResult result, // This means the producer finished and streamed to completion. watcher_.reset(); response_body_loader_client_->DidFinishLoadingBody(); + response_body_loader_client_ = nullptr; return; case MOJO_RESULT_SHOULD_WAIT: @@ -300,6 +301,7 @@ void ScriptResource::OnDataPipeReadable(MojoResult result, // Some other error occurred. watcher_.reset(); response_body_loader_client_->DidFailLoadingBody(); + response_body_loader_client_ = nullptr; return; } CHECK(state.readable()); @@ -358,6 +360,7 @@ void ScriptResource::NotifyFinished() { case StreamingState::kStreamingNotAllowed: watcher_.reset(); data_pipe_.reset(); + response_body_loader_client_ = nullptr; AdvanceStreamingState(StreamingState::kFinishedNotificationSent); TextResource::NotifyFinished(); break; @@ -382,6 +385,7 @@ void ScriptResource::StreamingFinished() { // small) and b) an external error triggered the finished notification. watcher_.reset(); data_pipe_.reset(); + response_body_loader_client_ = nullptr; AdvanceStreamingState(StreamingState::kFinishedNotificationSent); TextResource::NotifyFinished(); } @@ -463,6 +467,7 @@ void ScriptResource::SetClientIsWaitingForFinished() { if (IsLoaded()) { watcher_.reset(); data_pipe_.reset(); + response_body_loader_client_ = nullptr; AdvanceStreamingState(StreamingState::kFinishedNotificationSent); TextResource::NotifyFinished(); } @@ -536,6 +541,7 @@ void ScriptResource::CheckStreamingState() const { CHECK(!streamer_ || streamer_->IsFinished()); CHECK(!watcher_ || !watcher_->IsWatching()); CHECK(!data_pipe_); + CHECK(!response_body_loader_client_); CHECK(IsLoaded()); break; } diff --git a/chromium/third_party/blink/renderer/core/page/focus_controller.cc b/chromium/third_party/blink/renderer/core/page/focus_controller.cc index 8e8348de9a5..041804d5ec7 100644 --- a/chromium/third_party/blink/renderer/core/page/focus_controller.cc +++ b/chromium/third_party/blink/renderer/core/page/focus_controller.cc @@ -1158,9 +1158,12 @@ Element* FocusController::NextFocusableElementInForm(Element* element, if (form_element->formOwner() != form_owner || form_element->IsDisabledOrReadOnly()) continue; - // Focusless spatial navigation supports all form types. + // Focusless spatial navigation supports all form types. However, submit + // buttons are explicitly excluded as moving to them isn't necessary - the + // IME should just submit instead. if (RuntimeEnabledFeatures::FocuslessSpatialNavigationEnabled() && - page_->GetSettings().GetSpatialNavigationEnabled()) { + page_->GetSettings().GetSpatialNavigationEnabled() && + !form_element->CanBeSuccessfulSubmitButton()) { return next_element; } LayoutObject* layout = next_element->GetLayoutObject(); diff --git a/chromium/third_party/blink/renderer/core/page/page.cc b/chromium/third_party/blink/renderer/core/page/page.cc index 1c2e3dbbb01..6cc6c5a6f38 100644 --- a/chromium/third_party/blink/renderer/core/page/page.cc +++ b/chromium/third_party/blink/renderer/core/page/page.cc @@ -307,8 +307,6 @@ void Page::DocumentDetached(Document* document) { if (validation_message_client_) validation_message_client_->DocumentDetached(*document); hosts_using_features_.DocumentDetached(*document); - if (spatial_navigation_controller_ && document->GetFrame()->IsMainFrame()) - spatial_navigation_controller_->ResetMojoBindings(); } bool Page::OpenedByDOM() const { diff --git a/chromium/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.cc b/chromium/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.cc index b443a2d9f4a..b95b34b5118 100644 --- a/chromium/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.cc +++ b/chromium/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.cc @@ -827,6 +827,10 @@ bool ScrollsWithRootFrame(LayoutObject* object) { DCHECK(object); DCHECK(object->GetFrame()); + // TODO(bokan): Speculative fix for https://crbug.com/964293. + if (!object || !object->GetNode()) + return true; + const LocalFrame& frame = *object->GetFrame(); // If we're in an iframe document, we need to determine if the containing diff --git a/chromium/third_party/blink/renderer/core/page/spatial_navigation.cc b/chromium/third_party/blink/renderer/core/page/spatial_navigation.cc index 04c10fd3910..56a992c588c 100644 --- a/chromium/third_party/blink/renderer/core/page/spatial_navigation.cc +++ b/chromium/third_party/blink/renderer/core/page/spatial_navigation.cc @@ -37,6 +37,7 @@ #include "third_party/blink/renderer/core/html/html_frame_owner_element.h" #include "third_party/blink/renderer/core/html/html_image_element.h" #include "third_party/blink/renderer/core/html_names.h" +#include "third_party/blink/renderer/core/input/event_handler.h" #include "third_party/blink/renderer/core/layout/layout_box.h" #include "third_party/blink/renderer/core/layout/layout_inline.h" #include "third_party/blink/renderer/core/layout/layout_view.h" @@ -47,6 +48,14 @@ namespace blink { +// A small integer that easily fits into a double with a good margin for +// arithmetic. In particular, we don't want to use +// std::numeric_limits<double>::lowest() because, if subtracted, it becomes +// NaN which will make all following arithmetic NaN too (an unusable number). +constexpr double kMinDistance = std::numeric_limits<int>::lowest(); + +constexpr int kFudgeFactor = 2; + static void DeflateIfOverlapped(LayoutRect&, LayoutRect&); FocusCandidate::FocusCandidate(Node* node, SpatialNavigationDirection direction) @@ -185,6 +194,49 @@ ScrollableArea* ScrollableAreaFor(const Node* node) { return ToLayoutBox(object)->GetScrollableArea(); } +bool IsUnobscured(const FocusCandidate& candidate) { + DCHECK(candidate.visible_node); + + const LocalFrame* local_main_frame = DynamicTo<LocalFrame>( + candidate.visible_node->GetDocument().GetPage()->MainFrame()); + if (!local_main_frame) + return false; + + // TODO(crbug.com/955952): We cannot evaluate visibility for media element + // using hit test since attached media controls cover media element. + if (candidate.visible_node->IsMediaElement()) + return true; + + LayoutRect viewport_rect = LayoutRect( + local_main_frame->GetPage()->GetVisualViewport().VisibleContentRect()); + LayoutRect interesting_rect = + Intersection(candidate.rect_in_root_frame, viewport_rect); + + if (interesting_rect.IsEmpty()) + return false; + + HitTestLocation location(interesting_rect); + HitTestResult result = + local_main_frame->GetEventHandler().HitTestResultAtLocation( + location, HitTestRequest::kReadOnly | HitTestRequest::kListBased | + HitTestRequest::kIgnoreZeroOpacityObjects | + HitTestRequest::kAllowChildFrameContent); + + const HitTestResult::NodeSet& nodes = result.ListBasedTestResult(); + for (auto hit_node = nodes.rbegin(); hit_node != nodes.rend(); ++hit_node) { + if (candidate.visible_node->ContainsIncludingHostElements(**hit_node)) + return true; + + if (FrameOwnerElement(candidate) && + FrameOwnerElement(candidate) + ->contentDocument() + ->ContainsIncludingHostElements(**hit_node)) + return true; + } + + return false; +} + bool HasRemoteFrame(const Node* node) { auto* frame_owner_element = DynamicTo<HTMLFrameOwnerElement>(node); if (!frame_owner_element) @@ -237,7 +289,9 @@ bool ScrollInDirection(Node* container, SpatialNavigationDirection direction) { // CanScrollInDirection(). Regular arrow-key scrolling (without // --enable-spatial-navigation) already uses smooth scrolling by default. ScrollableArea* scroller = ScrollableAreaFor(container); - DCHECK(scroller); + if (!scroller) + return false; + scroller->ScrollBy(ScrollOffset(dx, dy), kUserScroll); return true; } @@ -246,7 +300,7 @@ static void DeflateIfOverlapped(LayoutRect& a, LayoutRect& b) { if (!a.Intersects(b) || a.Contains(b) || b.Contains(a)) return; - LayoutUnit deflate_factor = LayoutUnit(-FudgeFactor()); + LayoutUnit deflate_factor = LayoutUnit(-kFudgeFactor); // Avoid negative width or height values. if ((a.Width() + 2 * deflate_factor > 0) && @@ -481,55 +535,42 @@ void EntryAndExitPointsForDirection(SpatialNavigationDirection direction, } } -bool AreElementsOnSameLine(const FocusCandidate& first_candidate, - const FocusCandidate& second_candidate) { - if (first_candidate.IsNull() || second_candidate.IsNull()) - return false; - - if (!first_candidate.visible_node->GetLayoutObject() || - !second_candidate.visible_node->GetLayoutObject()) - return false; - - if (!first_candidate.rect_in_root_frame.Intersects( - second_candidate.rect_in_root_frame)) - return false; - - if (IsHTMLAreaElement(*first_candidate.focusable_node) || - IsHTMLAreaElement(*second_candidate.focusable_node)) - return false; - - if (!first_candidate.visible_node->GetLayoutObject()->IsLayoutInline() || - !second_candidate.visible_node->GetLayoutObject()->IsLayoutInline()) - return false; - - if (first_candidate.visible_node->GetLayoutObject()->ContainingBlock() != - second_candidate.visible_node->GetLayoutObject()->ContainingBlock()) - return false; - - return true; -} - double ComputeDistanceDataForNode(SpatialNavigationDirection direction, const FocusCandidate& current_interest, const FocusCandidate& candidate) { - if (!IsRectInDirection(direction, current_interest.rect_in_root_frame, - candidate.rect_in_root_frame)) - return MaxDistance(); - - if (AreElementsOnSameLine(current_interest, candidate)) { - if ((direction == SpatialNavigationDirection::kUp && - current_interest.rect_in_root_frame.Y() > - candidate.rect_in_root_frame.Y()) || - (direction == SpatialNavigationDirection::kDown && - candidate.rect_in_root_frame.Y() > - current_interest.rect_in_root_frame.Y())) { - return 0.0; - } - } - + double distance = 0.0; + double overlap = 0.0; LayoutRect node_rect = candidate.rect_in_root_frame; LayoutRect current_rect = current_interest.rect_in_root_frame; - DeflateIfOverlapped(current_rect, node_rect); + if (node_rect.Contains(current_rect)) { + // When leaving an "insider", don't focus its underlaying container box. + // Go directly to the outside world. This avoids focus from being trapped + // inside a container. + return kMaxDistance; + } + + if (current_rect.Contains(node_rect)) { + // We give priority to "insiders", candidates that are completely inside the + // current focus rect, by giving them a negative, < 0, distance number. + distance = kMinDistance; + + // For insiders we cannot meassure the distance from the outer box. Instead, + // we meassure distance _from_ the focused container's rect's "opposite + // edge" in the navigated direction, just like we do when we look for + // candidates inside a focused scroll container. + current_rect = OppositeEdge(direction, current_rect); + + // This candidate fully overlaps the current focus rect so we can omit the + // overlap term of the equation. An "insider" will always win against an + // "outsider". + } else if (!IsRectInDirection(direction, current_rect, node_rect)) { + return kMaxDistance; + } else { + DeflateIfOverlapped(current_rect, node_rect); + LayoutRect intersection_rect = Intersection(current_rect, node_rect); + overlap = + (intersection_rect.Width() * intersection_rect.Height()).ToDouble(); + } LayoutPoint exit_point; LayoutPoint entry_point; @@ -538,6 +579,9 @@ double ComputeDistanceDataForNode(SpatialNavigationDirection direction, LayoutUnit x_axis = (exit_point.X() - entry_point.X()).Abs(); LayoutUnit y_axis = (exit_point.Y() - entry_point.Y()).Abs(); + double euclidian_distance = + sqrt((x_axis * x_axis + y_axis * y_axis).ToDouble()); + distance += euclidian_distance; LayoutUnit navigation_axis_distance; LayoutUnit weighted_orthogonal_axis_distance; @@ -572,21 +616,17 @@ double ComputeDistanceDataForNode(SpatialNavigationDirection direction, break; default: NOTREACHED(); - return MaxDistance(); + return kMaxDistance; } - double euclidian_distance_pow2 = - (x_axis * x_axis + y_axis * y_axis).ToDouble(); - LayoutRect intersection_rect = Intersection(current_rect, node_rect); - double overlap = - (intersection_rect.Width() * intersection_rect.Height()).ToDouble(); - // Distance calculation is based on http://www.w3.org/TR/WICD/#focus-handling - return sqrt(euclidian_distance_pow2) + navigation_axis_distance + + return distance + navigation_axis_distance + weighted_orthogonal_axis_distance - sqrt(overlap); } -// Returns a thin rectangle that represents one of box's sides. +// Returns a thin rectangle that represents one of |box|'s edges. +// To not intersect elements that are positioned inside |box|, we add one +// LayoutUnit of margin that puts the returned slice "just outside" |box|. LayoutRect OppositeEdge(SpatialNavigationDirection side, const LayoutRect& box, LayoutUnit thickness) { @@ -595,16 +635,20 @@ LayoutRect OppositeEdge(SpatialNavigationDirection side, case SpatialNavigationDirection::kLeft: thin_rect.SetX(thin_rect.MaxX() - thickness); thin_rect.SetWidth(thickness); + thin_rect.Move(1, 0); break; case SpatialNavigationDirection::kRight: thin_rect.SetWidth(thickness); + thin_rect.Move(-1, 0); break; case SpatialNavigationDirection::kDown: thin_rect.SetHeight(thickness); + thin_rect.Move(0, -1); break; case SpatialNavigationDirection::kUp: thin_rect.SetY(thin_rect.MaxY() - thickness); thin_rect.SetHeight(thickness); + thin_rect.Move(0, 1); break; default: NOTREACHED(); @@ -623,7 +667,7 @@ LayoutRect StartEdgeForAreaElement(const HTMLAreaElement& area, direction, area.GetDocument().GetFrame()->View()->ConvertToRootFrame( area.ComputeAbsoluteRect(area.ImageElement()->GetLayoutObject())), - LayoutUnit(1) /* snav-imagemap-overlapped-areas.html */); + LayoutUnit(kFudgeFactor) /* snav-imagemap-overlapped-areas.html */); return rect; } diff --git a/chromium/third_party/blink/renderer/core/page/spatial_navigation.h b/chromium/third_party/blink/renderer/core/page/spatial_navigation.h index 5a6e2725239..7112a4d3bed 100644 --- a/chromium/third_party/blink/renderer/core/page/spatial_navigation.h +++ b/chromium/third_party/blink/renderer/core/page/spatial_navigation.h @@ -36,13 +36,7 @@ class HTMLFrameOwnerElement; enum class SpatialNavigationDirection { kNone, kUp, kRight, kDown, kLeft }; -inline double MaxDistance() { - return std::numeric_limits<double>::max(); -} - -inline int FudgeFactor() { - return 2; -} +constexpr double kMaxDistance = std::numeric_limits<double>::max(); CORE_EXPORT bool IsSpatialNavigationEnabled(const LocalFrame*); @@ -73,14 +67,13 @@ struct FocusCandidate { CORE_EXPORT bool HasRemoteFrame(const Node*); CORE_EXPORT FloatRect RectInViewport(const Node&); CORE_EXPORT bool IsOffscreen(const Node*); +CORE_EXPORT bool IsUnobscured(const FocusCandidate&); bool ScrollInDirection(Node* container, SpatialNavigationDirection); CORE_EXPORT bool IsScrollableNode(const Node* node); CORE_EXPORT bool IsScrollableAreaOrDocument(const Node*); CORE_EXPORT Node* ScrollableAreaOrDocumentOf(Node*); bool CanScrollInDirection(const Node* container, SpatialNavigationDirection); bool CanScrollInDirection(const LocalFrame*, SpatialNavigationDirection); -bool AreElementsOnSameLine(const FocusCandidate& first_candidate, - const FocusCandidate& second_candidate); double ComputeDistanceDataForNode(SpatialNavigationDirection, const FocusCandidate& current_interest, diff --git a/chromium/third_party/blink/renderer/core/page/spatial_navigation_controller.cc b/chromium/third_party/blink/renderer/core/page/spatial_navigation_controller.cc index d15a56d90e2..8ba2f2a154f 100644 --- a/chromium/third_party/blink/renderer/core/page/spatial_navigation_controller.cc +++ b/chromium/third_party/blink/renderer/core/page/spatial_navigation_controller.cc @@ -17,6 +17,8 @@ #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/frame/settings.h" #include "third_party/blink/renderer/core/frame/visual_viewport.h" +#include "third_party/blink/renderer/core/html/forms/html_form_control_element.h" +#include "third_party/blink/renderer/core/html/forms/html_form_element.h" #include "third_party/blink/renderer/core/html/html_frame_owner_element.h" #include "third_party/blink/renderer/core/html/media/html_video_element.h" #include "third_party/blink/renderer/core/input/event_handler.h" @@ -90,47 +92,11 @@ static void ConsiderForBestCandidate(SpatialNavigationDirection direction, double distance = ComputeDistanceDataForNode(direction, current_interest, candidate); - if (distance == MaxDistance()) + if (distance == kMaxDistance) return; - if (best_candidate->IsNull()) { - *best_candidate = candidate; - *best_distance = distance; - return; - } - LayoutRect intersection_rect = Intersection( - candidate.rect_in_root_frame, best_candidate->rect_in_root_frame); - if (!intersection_rect.IsEmpty() && - !AreElementsOnSameLine(*best_candidate, candidate) && - intersection_rect == candidate.rect_in_root_frame) { - // If 2 nodes are intersecting, do hit test to find which node in on top. - LayoutUnit x = intersection_rect.X() + intersection_rect.Width() / 2; - LayoutUnit y = intersection_rect.Y() + intersection_rect.Height() / 2; - if (!IsA<LocalFrame>( - candidate.visible_node->GetDocument().GetPage()->MainFrame())) - return; - HitTestLocation location(IntPoint(x.ToInt(), y.ToInt())); - HitTestResult result = - candidate.visible_node->GetDocument() - .GetPage() - ->DeprecatedLocalMainFrame() - ->GetEventHandler() - .HitTestResultAtLocation( - location, HitTestRequest::kReadOnly | HitTestRequest::kActive | - HitTestRequest::kIgnoreClipping); - if (candidate.visible_node->ContainsIncludingHostElements( - *result.InnerNode())) { - *best_candidate = candidate; - *best_distance = distance; - return; - } - if (best_candidate->visible_node->ContainsIncludingHostElements( - *result.InnerNode())) - return; - } - - if (distance < *best_distance) { + if (distance < *best_distance && IsUnobscured(candidate)) { *best_candidate = candidate; *best_distance = distance; } @@ -196,10 +162,18 @@ bool SpatialNavigationController::HandleEnterKeyboardEvent( return false; if (event->type() == event_type_names::kKeydown) { + enter_key_down_seen_ = true; interest_element->SetActive(true); + } else if (event->type() == event_type_names::kKeypress) { + enter_key_press_seen_ = true; } else if (event->type() == event_type_names::kKeyup) { interest_element->SetActive(false); - if (RuntimeEnabledFeatures::FocuslessSpatialNavigationEnabled()) { + + // Ensure that the enter key has not already been handled by something else, + // or we can end up clicking elements multiple times. Some elements already + // convert the Enter key into click on down and press (and up) events. + if (RuntimeEnabledFeatures::FocuslessSpatialNavigationEnabled() && + enter_key_down_seen_ && enter_key_press_seen_) { interest_element->focus(FocusParams(SelectionBehaviorOnFocus::kReset, kWebFocusTypeSpatialNavigation, nullptr)); @@ -212,6 +186,28 @@ bool SpatialNavigationController::HandleEnterKeyboardEvent( return true; } +void SpatialNavigationController::ResetEnterKeyState() { + enter_key_down_seen_ = false; + enter_key_press_seen_ = false; +} + +bool SpatialNavigationController::HandleImeSubmitKeyboardEvent( + KeyboardEvent* event) { + DCHECK(page_->GetSettings().GetSpatialNavigationEnabled()); + + if (!IsHTMLFormControlElement(GetFocusedElement())) + return false; + + HTMLFormControlElement* element = + ToHTMLFormControlElement(GetFocusedElement()); + + if (!element->formOwner()) + return false; + + element->formOwner()->SubmitImplicitly(*event, true); + return true; +} + bool SpatialNavigationController::HandleEscapeKeyboardEvent( KeyboardEvent* event) { DCHECK(page_->GetSettings().GetSpatialNavigationEnabled()); @@ -248,6 +244,8 @@ void SpatialNavigationController::DidDetachFrameView() { // etc.) then reset navigation. if (interest_element_ && !interest_element_->GetDocument().View()) interest_element_ = nullptr; + // TODO(crbug.com/956209): should be checked via an integration test. + ResetMojoBindings(); } void SpatialNavigationController::Trace(blink::Visitor* visitor) { @@ -317,7 +315,7 @@ FocusCandidate SpatialNavigationController::FindNextCandidateInContainer( current_interest.visible_node = interest_child_in_container; FocusCandidate best_candidate; - double best_distance = MaxDistance(); + double best_distance = kMaxDistance; for (; element; element = IsScrollableAreaOrDocument(element) @@ -550,6 +548,7 @@ void SpatialNavigationController::UpdateSpatialNavigationState( bool change = false; change |= UpdateCanExitFocus(element); change |= UpdateCanSelectInterestedElement(element); + change |= UpdateIsFormFocused(element); change |= UpdateHasNextFormElement(element); change |= UpdateHasDefaultVideoControls(element); if (change) @@ -564,7 +563,7 @@ void SpatialNavigationController::OnSpatialNavigationStateChanged() { } bool SpatialNavigationController::UpdateCanExitFocus(Element* element) { - bool can_exit_focus = IsFocused(element); + bool can_exit_focus = IsFocused(element) && !IsHTMLBodyElement(element); if (can_exit_focus == spatial_navigation_state_->can_exit_focus) return false; spatial_navigation_state_->can_exit_focus = can_exit_focus; @@ -594,6 +593,15 @@ bool SpatialNavigationController::UpdateHasNextFormElement(Element* element) { return true; } +bool SpatialNavigationController::UpdateIsFormFocused(Element* element) { + bool is_form_focused = IsFocused(element) && element->IsFormControlElement(); + + if (is_form_focused == spatial_navigation_state_->is_form_focused) + return false; + spatial_navigation_state_->is_form_focused = is_form_focused; + return true; +} + bool SpatialNavigationController::UpdateHasDefaultVideoControls( Element* element) { bool has_default_video_controls = diff --git a/chromium/third_party/blink/renderer/core/page/spatial_navigation_controller.h b/chromium/third_party/blink/renderer/core/page/spatial_navigation_controller.h index 05ee39d5615..98b709da93c 100644 --- a/chromium/third_party/blink/renderer/core/page/spatial_navigation_controller.h +++ b/chromium/third_party/blink/renderer/core/page/spatial_navigation_controller.h @@ -30,6 +30,11 @@ class CORE_EXPORT SpatialNavigationController bool HandleArrowKeyboardEvent(KeyboardEvent* event); bool HandleEnterKeyboardEvent(KeyboardEvent* event); bool HandleEscapeKeyboardEvent(KeyboardEvent* event); + bool HandleImeSubmitKeyboardEvent(KeyboardEvent* event); + + // Called when the enter key is released to clear local state because we don't + // get a consistent event stream when the Enter key is partially handled. + void ResetEnterKeyState(); // Returns the element that's currently interested. i.e. the Element that's // currently indicated to the user. @@ -40,8 +45,6 @@ class CORE_EXPORT SpatialNavigationController void OnSpatialNavigationSettingChanged(); void FocusedNodeChanged(Document*); - void ResetMojoBindings(); - void Trace(blink::Visitor*); private: @@ -97,15 +100,22 @@ class CORE_EXPORT SpatialNavigationController bool UpdateCanExitFocus(Element* element); bool UpdateCanSelectInterestedElement(Element* element); bool UpdateHasNextFormElement(Element* element); + bool UpdateIsFormFocused(Element* element); bool UpdateHasDefaultVideoControls(Element* element); const mojom::blink::SpatialNavigationHostPtr& GetSpatialNavigationHost(); + void ResetMojoBindings(); // The currently indicated element or nullptr if no node is indicated by // spatial navigation. WeakMember<Element> interest_element_; Member<Page> page_; + // We need to track whether the enter key has been handled in down or press to + // know whether to generate a click on the up. + bool enter_key_down_seen_ = false; + bool enter_key_press_seen_ = false; + mojom::blink::SpatialNavigationStatePtr spatial_navigation_state_; mojom::blink::SpatialNavigationHostPtr spatial_navigation_host_; }; diff --git a/chromium/third_party/blink/renderer/core/page/spatial_navigation_test.cc b/chromium/third_party/blink/renderer/core/page/spatial_navigation_test.cc index e0716b124bf..a7416224660 100644 --- a/chromium/third_party/blink/renderer/core/page/spatial_navigation_test.cc +++ b/chromium/third_party/blink/renderer/core/page/spatial_navigation_test.cc @@ -26,26 +26,28 @@ class SpatialNavigationTest : public RenderingTest { LayoutRect TopOfVisualViewport() { LayoutRect visual_viewport = RootViewport(&GetFrame()); + visual_viewport.SetY(visual_viewport.Y() - 1); visual_viewport.SetHeight(LayoutUnit(0)); return visual_viewport; } LayoutRect BottomOfVisualViewport() { LayoutRect visual_viewport = RootViewport(&GetFrame()); - visual_viewport.SetY(visual_viewport.MaxY()); + visual_viewport.SetY(visual_viewport.MaxY() + 1); visual_viewport.SetHeight(LayoutUnit(0)); return visual_viewport; } LayoutRect LeftSideOfVisualViewport() { LayoutRect visual_viewport = RootViewport(&GetFrame()); + visual_viewport.SetX(visual_viewport.X() - 1); visual_viewport.SetWidth(LayoutUnit(0)); return visual_viewport; } LayoutRect RightSideOfVisualViewport() { LayoutRect visual_viewport = RootViewport(&GetFrame()); - visual_viewport.SetX(visual_viewport.MaxX()); + visual_viewport.SetX(visual_viewport.MaxX() + 1); visual_viewport.SetWidth(LayoutUnit(0)); return visual_viewport; } @@ -245,7 +247,7 @@ TEST_F(SpatialNavigationTest, StartAtVisibleFocusedIframe) { } TEST_F(SpatialNavigationTest, StartAtTopWhenGoingDownwardsWithoutFocus) { - EXPECT_EQ(LayoutRect(0, 0, 111, 0), + EXPECT_EQ(LayoutRect(0, -1, 111, 0), SearchOrigin({0, 0, 111, 222}, nullptr, SpatialNavigationDirection::kDown)); @@ -256,7 +258,7 @@ TEST_F(SpatialNavigationTest, StartAtTopWhenGoingDownwardsWithoutFocus) { TEST_F(SpatialNavigationTest, StartAtBottomWhenGoingUpwardsWithoutFocus) { EXPECT_EQ( - LayoutRect(0, 222, 111, 0), + LayoutRect(0, 222 + 1, 111, 0), SearchOrigin({0, 0, 111, 222}, nullptr, SpatialNavigationDirection::kUp)); EXPECT_EQ(SearchOrigin(RootViewport(&GetFrame()), nullptr, @@ -265,7 +267,7 @@ TEST_F(SpatialNavigationTest, StartAtBottomWhenGoingUpwardsWithoutFocus) { } TEST_F(SpatialNavigationTest, StartAtLeftSideWhenGoingEastWithoutFocus) { - EXPECT_EQ(LayoutRect(0, 0, 0, 222), + EXPECT_EQ(LayoutRect(-1, 0, 0, 222), SearchOrigin({0, 0, 111, 222}, nullptr, SpatialNavigationDirection::kRight)); @@ -275,7 +277,7 @@ TEST_F(SpatialNavigationTest, StartAtLeftSideWhenGoingEastWithoutFocus) { } TEST_F(SpatialNavigationTest, StartAtRightSideWhenGoingWestWithoutFocus) { - EXPECT_EQ(LayoutRect(111, 0, 0, 222), + EXPECT_EQ(LayoutRect(111 + 1, 0, 0, 222), SearchOrigin({0, 0, 111, 222}, nullptr, SpatialNavigationDirection::kLeft)); @@ -330,14 +332,15 @@ TEST_F(SpatialNavigationTest, StartAtContainersEdge) { // Go down. LayoutRect container_top_edge = container_box; container_top_edge.SetHeight(LayoutUnit(0)); + container_top_edge.SetY(container_top_edge.Y() - 1); EXPECT_EQ(SearchOrigin(RootViewport(&GetFrame()), b, SpatialNavigationDirection::kDown), container_top_edge); // Go up. LayoutRect container_bottom_edge = container_box; - container_bottom_edge.SetY(container_bottom_edge.MaxX()); container_bottom_edge.SetHeight(LayoutUnit(0)); + container_bottom_edge.SetY(container_bottom_edge.MaxX() + 1); EXPECT_EQ(SearchOrigin(RootViewport(&GetFrame()), b, SpatialNavigationDirection::kUp), container_bottom_edge); @@ -345,13 +348,14 @@ TEST_F(SpatialNavigationTest, StartAtContainersEdge) { // Go right. LayoutRect container_leftmost_edge = container_box; container_leftmost_edge.SetWidth(LayoutUnit(0)); + container_leftmost_edge.SetX(container_leftmost_edge.X() - 1); EXPECT_EQ(SearchOrigin(RootViewport(&GetFrame()), b, SpatialNavigationDirection::kRight), container_leftmost_edge); // Go left. LayoutRect container_rightmost_edge = container_box; - container_rightmost_edge.SetX(container_bottom_edge.MaxX()); + container_rightmost_edge.SetX(container_bottom_edge.MaxX() + 1); container_rightmost_edge.SetWidth(LayoutUnit(0)); EXPECT_EQ(SearchOrigin(RootViewport(&GetFrame()), b, SpatialNavigationDirection::kLeft), @@ -596,7 +600,7 @@ TEST_F(SpatialNavigationTest, BottomOfPinchedViewport) { EXPECT_EQ(origin.Height(), 0); EXPECT_EQ(origin.Width(), GetFrame().View()->Width()); EXPECT_EQ(origin.X(), 0); - EXPECT_EQ(origin.Y(), GetFrame().View()->Height()); + EXPECT_EQ(origin.Y(), GetFrame().View()->Height() + 1); EXPECT_EQ(origin, BottomOfVisualViewport()); // Now, test SearchOrigin with a pinched viewport. @@ -608,7 +612,7 @@ TEST_F(SpatialNavigationTest, BottomOfPinchedViewport) { EXPECT_EQ(origin.Height(), 0); EXPECT_LT(origin.Width(), GetFrame().View()->Width()); EXPECT_GT(origin.X(), 0); - EXPECT_LT(origin.Y(), GetFrame().View()->Height()); + EXPECT_LT(origin.Y(), GetFrame().View()->Height() + 1); EXPECT_EQ(origin, BottomOfVisualViewport()); } @@ -618,7 +622,7 @@ TEST_F(SpatialNavigationTest, TopOfPinchedViewport) { EXPECT_EQ(origin.Height(), 0); EXPECT_EQ(origin.Width(), GetFrame().View()->Width()); EXPECT_EQ(origin.X(), 0); - EXPECT_EQ(origin.Y(), 0); + EXPECT_EQ(origin.Y(), -1); EXPECT_EQ(origin, TopOfVisualViewport()); // Now, test SearchOrigin with a pinched viewport. @@ -630,7 +634,7 @@ TEST_F(SpatialNavigationTest, TopOfPinchedViewport) { EXPECT_EQ(origin.Height(), 0); EXPECT_LT(origin.Width(), GetFrame().View()->Width()); EXPECT_GT(origin.X(), 0); - EXPECT_GT(origin.Y(), 0); + EXPECT_GT(origin.Y(), -1); EXPECT_EQ(origin, TopOfVisualViewport()); } diff --git a/chromium/third_party/blink/renderer/core/paint/compositing/compositing_layer_property_updater.cc b/chromium/third_party/blink/renderer/core/paint/compositing/compositing_layer_property_updater.cc index aff08d420fe..50e185b0966 100644 --- a/chromium/third_party/blink/renderer/core/paint/compositing/compositing_layer_property_updater.cc +++ b/chromium/third_party/blink/renderer/core/paint/compositing/compositing_layer_property_updater.cc @@ -172,8 +172,16 @@ void CompositingLayerPropertyUpdater::Update(const LayoutObject& object) { auto* main_graphics_layer = mapping->MainGraphicsLayer(); if (main_graphics_layer->ContentsLayer()) { - main_graphics_layer->SetContentsPropertyTreeState( - fragment_data.ContentsProperties()); + IntPoint offset; + // The offset should be zero when the layer has ReplacedContentTransform, + // because the offset has been baked into ReplacedContentTransform. + if (!fragment_data.PaintProperties() || + !fragment_data.PaintProperties()->ReplacedContentTransform()) { + offset = main_graphics_layer->ContentsRect().Location() + + main_graphics_layer->GetOffsetFromTransformNode(); + } + main_graphics_layer->SetContentsLayerState( + fragment_data.ContentsProperties(), offset); } if (auto* squashing_layer = mapping->SquashingLayer()) { diff --git a/chromium/third_party/blink/renderer/core/paint/link_highlight_impl.cc b/chromium/third_party/blink/renderer/core/paint/link_highlight_impl.cc index 2e93937014a..5a6dee4b34c 100644 --- a/chromium/third_party/blink/renderer/core/paint/link_highlight_impl.cc +++ b/chromium/third_party/blink/renderer/core/paint/link_highlight_impl.cc @@ -69,6 +69,15 @@ namespace blink { static constexpr float kStartOpacity = 1; +namespace { + +float HighlightTargetOpacity() { + // For web tests we don't fade out. + return WebTestSupport::IsRunningWebTest() ? kStartOpacity : 0; +} + +} // namespace + static CompositorElementId NewElementId() { if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled() || RuntimeEnabledFeatures::BlinkGenPropertyTreesEnabled()) { @@ -103,7 +112,7 @@ LinkHighlightImpl::LinkHighlightImpl(Node* node) geometry_needs_update_ = true; EffectPaintPropertyNode::State state; - state.opacity = kStartOpacity; + state.opacity = HighlightTargetOpacity(); state.local_transform_space = &TransformPaintPropertyNode::Root(); state.compositor_element_id = element_id_; state.direct_compositing_reasons = CompositingReason::kActiveOpacityAnimation; @@ -354,10 +363,9 @@ void LinkHighlightImpl::StartHighlightAnimationIfNeeded() { curve->AddKeyframe(CompositorFloatKeyframe( extra_duration_required.InSecondsF(), kStartOpacity, timing_function)); } - // For web tests we don't fade out. curve->AddKeyframe(CompositorFloatKeyframe( (kFadeDuration + extra_duration_required).InSecondsF(), - WebTestSupport::IsRunningWebTest() ? kStartOpacity : 0, timing_function)); + HighlightTargetOpacity(), timing_function)); auto keyframe_model = std::make_unique<CompositorKeyframeModel>( *curve, compositor_target_property::OPACITY, 0, 0); diff --git a/chromium/third_party/blink/renderer/core/xml/xpath_grammar.y b/chromium/third_party/blink/renderer/core/xml/xpath_grammar.y index 17d0b89685d..cf0208370a0 100644 --- a/chromium/third_party/blink/renderer/core/xml/xpath_grammar.y +++ b/chromium/third_party/blink/renderer/core/xml/xpath_grammar.y @@ -34,15 +34,14 @@ #include "third_party/blink/renderer/core/xml/xpath_predicate.h" #include "third_party/blink/renderer/core/xml/xpath_step.h" #include "third_party/blink/renderer/core/xml/xpath_variable_reference.h" -#include "third_party/blink/renderer/platform/wtf/allocator/partitions.h" -void* YyFastMalloc(size_t size) -{ - return WTF::Partitions::FastMalloc(size, nullptr); -} - -#define YYMALLOC YyFastMalloc -#define YYFREE WTF::Partitions::FastFree +// The union below must be located on the stack because it contains raw +// pointers to Oilpan objects. crbug.com/961413 +#define YYSTACK_USE_ALLOCA 1 +// Bison's bug? YYSTACK_ALLOC is not defined if _MSC_VER. +#if defined(_MSC_VER) +#define YYSTACK_ALLOC _alloca +#endif #define YYENABLE_NLS 0 #define YYLTYPE_IS_TRIVIAL 1 diff --git a/chromium/third_party/blink/renderer/modules/BUILD.gn b/chromium/third_party/blink/renderer/modules/BUILD.gn index eb6f43aa81f..97a35617a9f 100644 --- a/chromium/third_party/blink/renderer/modules/BUILD.gn +++ b/chromium/third_party/blink/renderer/modules/BUILD.gn @@ -393,8 +393,11 @@ jumbo_source_set("unit_tests") { ] if (is_android && notouch_build) { - sources += - [ "media_controls/touchless/media_controls_touchless_impl_test.cc" ] + sources += [ + "media_controls/touchless/media_controls_touchless_impl_test.cc", + "media_controls/touchless/test_media_controls_menu_host.cc", + "media_controls/touchless/test_media_controls_menu_host.h", + ] } configs += [ diff --git a/chromium/third_party/blink/renderer/modules/broadcastchannel/broadcast_channel.cc b/chromium/third_party/blink/renderer/modules/broadcastchannel/broadcast_channel.cc index 582a091f27b..9d1a1bb6080 100644 --- a/chromium/third_party/blink/renderer/modules/broadcastchannel/broadcast_channel.cc +++ b/chromium/third_party/blink/renderer/modules/broadcastchannel/broadcast_channel.cc @@ -75,6 +75,7 @@ void BroadcastChannel::close() { remote_client_.reset(); if (binding_.is_bound()) binding_.Close(); + feature_handle_for_scheduler_.reset(); } const AtomicString& BroadcastChannel::InterfaceName() const { @@ -119,7 +120,11 @@ BroadcastChannel::BroadcastChannel(ExecutionContext* execution_context, : ContextLifecycleObserver(execution_context), origin_(execution_context->GetSecurityOrigin()), name_(name), - binding_(this) { + binding_(this), + feature_handle_for_scheduler_( + execution_context->GetScheduler()->RegisterFeature( + SchedulingPolicy::Feature::kBroadcastChannel, + {SchedulingPolicy::RecordMetricsForBackForwardCache()})) { mojom::blink::BroadcastChannelProviderPtr& provider = GetThreadSpecificProvider(); diff --git a/chromium/third_party/blink/renderer/modules/broadcastchannel/broadcast_channel.h b/chromium/third_party/blink/renderer/modules/broadcastchannel/broadcast_channel.h index 62e35c9fc05..6db0dfabbbb 100644 --- a/chromium/third_party/blink/renderer/modules/broadcastchannel/broadcast_channel.h +++ b/chromium/third_party/blink/renderer/modules/broadcastchannel/broadcast_channel.h @@ -11,6 +11,7 @@ #include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h" #include "third_party/blink/renderer/core/dom/events/event_target.h" #include "third_party/blink/renderer/core/execution_context/context_lifecycle_observer.h" +#include "third_party/blink/renderer/platform/scheduler/public/frame_or_worker_scheduler.h" #include "third_party/blink/renderer/platform/weborigin/security_origin.h" namespace blink { @@ -68,6 +69,10 @@ class BroadcastChannel final : public EventTargetWithInlineData, mojo::AssociatedBinding<mojom::blink::BroadcastChannelClient> binding_; mojom::blink::BroadcastChannelClientAssociatedPtr remote_client_; + // Notifies the scheduler that a broadcast channel is active. + FrameOrWorkerScheduler::SchedulingAffectingFeatureHandle + feature_handle_for_scheduler_; + DISALLOW_COPY_AND_ASSIGN(BroadcastChannel); }; diff --git a/chromium/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc b/chromium/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc index 06fde4ec2da..16156713451 100644 --- a/chromium/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc +++ b/chromium/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc @@ -35,7 +35,7 @@ OffscreenCanvasRenderingContext2D::OffscreenCanvasRenderingContext2D( ExecutionContext* execution_context = canvas->GetTopExecutionContext(); if (auto* document = DynamicTo<Document>(execution_context)) { Settings* settings = document->GetSettings(); - if (settings->GetDisableReadingFromCanvas()) + if (settings && settings->GetDisableReadingFromCanvas()) canvas->SetDisableReadingFromCanvasTrue(); return; } diff --git a/chromium/third_party/blink/renderer/modules/indexeddb/idb_database.cc b/chromium/third_party/blink/renderer/modules/indexeddb/idb_database.cc index 3fad0b87279..4f52673d682 100644 --- a/chromium/third_party/blink/renderer/modules/indexeddb/idb_database.cc +++ b/chromium/third_party/blink/renderer/modules/indexeddb/idb_database.cc @@ -101,7 +101,13 @@ IDBDatabase::IDBDatabase(ExecutionContext* context, event_queue_( MakeGarbageCollected<EventQueue>(context, TaskType::kDatabaseAccess)), database_callbacks_(callbacks), - isolate_(isolate) { + isolate_(isolate), + feature_handle_for_scheduler_( + context + ? context->GetScheduler()->RegisterFeature( + SchedulingPolicy::Feature::kIndexedDBConnection, + {SchedulingPolicy::RecordMetricsForBackForwardCache()}) + : FrameOrWorkerScheduler::SchedulingAffectingFeatureHandle()) { database_callbacks_->Connect(this); } @@ -436,6 +442,7 @@ void IDBDatabase::close() { return; close_pending_ = true; + feature_handle_for_scheduler_.reset(); if (transactions_.IsEmpty()) CloseConnection(); diff --git a/chromium/third_party/blink/renderer/modules/indexeddb/idb_database.h b/chromium/third_party/blink/renderer/modules/indexeddb/idb_database.h index 202056519af..66bcfa78fe5 100644 --- a/chromium/third_party/blink/renderer/modules/indexeddb/idb_database.h +++ b/chromium/third_party/blink/renderer/modules/indexeddb/idb_database.h @@ -46,6 +46,7 @@ #include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/platform/bindings/script_state.h" #include "third_party/blink/renderer/platform/heap/handle.h" +#include "third_party/blink/renderer/platform/scheduler/public/frame_or_worker_scheduler.h" namespace blink { @@ -194,6 +195,9 @@ class MODULES_EXPORT IDBDatabase final // Maintain the isolate so that all externally allocated memory can be // registered against it. v8::Isolate* isolate_; + + FrameOrWorkerScheduler::SchedulingAffectingFeatureHandle + feature_handle_for_scheduler_; }; } // namespace blink diff --git a/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_panel_element.cc b/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_panel_element.cc index 1f863f883ec..a6b4645ea31 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_panel_element.cc +++ b/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_panel_element.cc @@ -6,7 +6,6 @@ #include "third_party/blink/public/platform/task_type.h" #include "third_party/blink/renderer/core/dom/events/event.h" -#include "third_party/blink/renderer/core/dom/events/native_event_listener.h" #include "third_party/blink/renderer/core/html/media/html_media_element.h" #include "third_party/blink/renderer/modules/media_controls/elements/media_control_elements_helper.h" #include "third_party/blink/renderer/modules/media_controls/media_controls_impl.h" @@ -21,61 +20,6 @@ const char kTransparentClassName[] = "transparent"; } // anonymous namespace -// Listens for the 'transitionend' event. -class MediaControlPanelElement::TransitionEventListener final - : public NativeEventListener { - public: - using Callback = base::RepeatingCallback<void()>; - - // |element| is the element to listen for the 'transitionend' event on. - // |callback| is the callback to call when the event is handled. - explicit TransitionEventListener(Element* element, Callback callback) - : callback_(callback), element_(element) { - DCHECK(callback_); - DCHECK(element_); - } - - void Attach() { - DCHECK(!attached_); - attached_ = true; - - element_->addEventListener(event_type_names::kTransitionend, this, false); - } - - void Detach() { - DCHECK(attached_); - attached_ = false; - - element_->removeEventListener(event_type_names::kTransitionend, this, - false); - } - - bool IsAttached() const { return attached_; } - - void Invoke(ExecutionContext* context, Event* event) override { - if (event->target() != element_) - return; - - if (event->type() == event_type_names::kTransitionend) { - callback_.Run(); - return; - } - - NOTREACHED(); - } - - void Trace(blink::Visitor* visitor) override { - NativeEventListener::Trace(visitor); - visitor->Trace(element_); - } - - private: - bool attached_ = false; - - Callback callback_; - Member<Element> element_; -}; - MediaControlPanelElement::MediaControlPanelElement( MediaControlsImpl& media_controls) : MediaControlDivElement(media_controls), event_listener_(nullptr) { @@ -148,11 +92,11 @@ bool MediaControlPanelElement::EventListenerIsAttachedForTest() const { void MediaControlPanelElement::EnsureTransitionEventListener() { // Create the event listener if it doesn't exist. if (!event_listener_) { - event_listener_ = - MakeGarbageCollected<MediaControlPanelElement::TransitionEventListener>( - this, WTF::BindRepeating( - &MediaControlPanelElement::HandleTransitionEndEvent, - WrapWeakPersistent(this))); + event_listener_ = MakeGarbageCollected< + MediaControlsSharedHelpers::TransitionEventListener>( + this, + WTF::BindRepeating(&MediaControlPanelElement::HandleTransitionEndEvent, + WrapWeakPersistent(this))); } // Attach the event listener if we are not attached. diff --git a/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_panel_element.h b/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_panel_element.h index ccb43bbb8fa..a010ba1d627 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_panel_element.h +++ b/chromium/third_party/blink/renderer/modules/media_controls/elements/media_control_panel_element.h @@ -6,6 +6,7 @@ #define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CONTROLS_ELEMENTS_MEDIA_CONTROL_PANEL_ELEMENT_H_ #include "third_party/blink/renderer/modules/media_controls/elements/media_control_div_element.h" +#include "third_party/blink/renderer/modules/media_controls/media_controls_shared_helper.h" #include "third_party/blink/renderer/modules/modules_export.h" namespace blink { @@ -40,8 +41,6 @@ class MODULES_EXPORT MediaControlPanelElement final bool EventListenerIsAttachedForTest() const; private: - class TransitionEventListener; - void EnsureTransitionEventListener(); void DetachTransitionEventListener(); @@ -55,7 +54,7 @@ class MODULES_EXPORT MediaControlPanelElement final bool opaque_ = true; bool keep_displayed_for_accessibility_ = false; - Member<TransitionEventListener> event_listener_; + Member<MediaControlsSharedHelpers::TransitionEventListener> event_listener_; }; } // namespace blink diff --git a/chromium/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc b/chromium/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc index 0d3796f252d..00b9f48e9c9 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc +++ b/chromium/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc @@ -87,6 +87,7 @@ #include "third_party/blink/renderer/modules/media_controls/media_controls_orientation_lock_delegate.h" #include "third_party/blink/renderer/modules/media_controls/media_controls_resource_loader.h" #include "third_party/blink/renderer/modules/media_controls/media_controls_rotate_to_fullscreen_delegate.h" +#include "third_party/blink/renderer/modules/media_controls/media_controls_shared_helper.h" #include "third_party/blink/renderer/modules/media_controls/media_controls_text_track_manager.h" #include "third_party/blink/renderer/modules/remoteplayback/remote_playback.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" @@ -154,33 +155,6 @@ constexpr WTF::TimeDelta kTimeToShowVolumeSliderTest = // The number of seconds to jump when double tapping. constexpr int kNumberOfSecondsToJump = 10; -bool ShouldShowFullscreenButton(const HTMLMediaElement& media_element) { - // Unconditionally allow the user to exit fullscreen if we are in it - // now. Especially on android, when we might not yet know if - // fullscreen is supported, we sometimes guess incorrectly and show - // the button earlier, and we don't want to remove it here if the - // user chose to enter fullscreen. crbug.com/500732 . - if (media_element.IsFullscreen()) - return true; - - if (!media_element.IsHTMLVideoElement()) - return false; - - if (!media_element.HasVideo()) - return false; - - if (!Fullscreen::FullscreenEnabled(media_element.GetDocument())) - return false; - - if (media_element.ControlsListInternal()->ShouldHideFullscreen()) { - UseCounter::Count(media_element.GetDocument(), - WebFeature::kHTMLMediaElementControlsListNoFullscreen); - return false; - } - - return true; -} - void MaybeParserAppendChild(Element* parent, Element* child) { DCHECK(parent); if (child) @@ -967,12 +941,14 @@ void MediaControlsImpl::OnControlsListUpdated() { if (IsModern() && ShouldShowVideoControls()) { fullscreen_button_->SetIsWanted(true); - fullscreen_button_->setAttribute(html_names::kDisabledAttr, - ShouldShowFullscreenButton(MediaElement()) - ? AtomicString() - : AtomicString("")); + fullscreen_button_->setAttribute( + html_names::kDisabledAttr, + MediaControlsSharedHelpers::ShouldShowFullscreenButton(MediaElement()) + ? AtomicString() + : AtomicString("")); } else { - fullscreen_button_->SetIsWanted(ShouldShowFullscreenButton(MediaElement())); + fullscreen_button_->SetIsWanted( + MediaControlsSharedHelpers::ShouldShowFullscreenButton(MediaElement())); fullscreen_button_->removeAttribute(html_names::kDisabledAttr); } diff --git a/chromium/third_party/blink/renderer/modules/media_controls/media_controls_shared_helper.cc b/chromium/third_party/blink/renderer/modules/media_controls/media_controls_shared_helper.cc index 33b76717e28..92cc944b9d3 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/media_controls_shared_helper.cc +++ b/chromium/third_party/blink/renderer/modules/media_controls/media_controls_shared_helper.cc @@ -5,7 +5,12 @@ #include "third_party/blink/renderer/modules/media_controls/media_controls_shared_helper.h" #include <cmath> +#include "third_party/blink/public/mojom/web_feature/web_feature.mojom-shared.h" +#include "third_party/blink/renderer/core/dom/events/event.h" +#include "third_party/blink/renderer/core/frame/use_counter.h" +#include "third_party/blink/renderer/core/fullscreen/fullscreen.h" #include "third_party/blink/renderer/core/html/media/html_media_element.h" +#include "third_party/blink/renderer/core/html/media/html_media_element_controls_list.h" #include "third_party/blink/renderer/core/html/time_ranges.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" @@ -17,6 +22,54 @@ const double kCurrentTimeBufferedDelta = 1.0; namespace blink { +// |element| is the element to listen for the 'transitionend' event on. +// |callback| is the callback to call when the event is handled. +MediaControlsSharedHelpers::TransitionEventListener::TransitionEventListener( + Element* element, + Callback callback) + : callback_(callback), element_(element) { + DCHECK(callback_); + DCHECK(element_); +} + +void MediaControlsSharedHelpers::TransitionEventListener::Attach() { + DCHECK(!attached_); + attached_ = true; + + element_->addEventListener(event_type_names::kTransitionend, this, false); +} + +void MediaControlsSharedHelpers::TransitionEventListener::Detach() { + DCHECK(attached_); + attached_ = false; + + element_->removeEventListener(event_type_names::kTransitionend, this, false); +} + +bool MediaControlsSharedHelpers::TransitionEventListener::IsAttached() const { + return attached_; +} + +void MediaControlsSharedHelpers::TransitionEventListener::Invoke( + ExecutionContext* context, + Event* event) { + if (event->target() != element_) + return; + + if (event->type() == event_type_names::kTransitionend) { + callback_.Run(); + return; + } + + NOTREACHED(); +} + +void MediaControlsSharedHelpers::TransitionEventListener::Trace( + blink::Visitor* visitor) { + NativeEventListener::Trace(visitor); + visitor->Trace(element_); +} + base::Optional<unsigned> MediaControlsSharedHelpers::GetCurrentBufferedTimeRange( HTMLMediaElement& media_element) { @@ -80,4 +133,32 @@ String MediaControlsSharedHelpers::FormatTime(double time) { return String::Format("%s%d:%02d", negative_sign, minutes, seconds); } +bool MediaControlsSharedHelpers::ShouldShowFullscreenButton( + const HTMLMediaElement& media_element) { + // Unconditionally allow the user to exit fullscreen if we are in it + // now. Especially on android, when we might not yet know if + // fullscreen is supported, we sometimes guess incorrectly and show + // the button earlier, and we don't want to remove it here if the + // user chose to enter fullscreen. crbug.com/500732 . + if (media_element.IsFullscreen()) + return true; + + if (!media_element.IsHTMLVideoElement()) + return false; + + if (!media_element.HasVideo()) + return false; + + if (!Fullscreen::FullscreenEnabled(media_element.GetDocument())) + return false; + + if (media_element.ControlsListInternal()->ShouldHideFullscreen()) { + UseCounter::Count(media_element.GetDocument(), + WebFeature::kHTMLMediaElementControlsListNoFullscreen); + return false; + } + + return true; +} + } // namespace blink diff --git a/chromium/third_party/blink/renderer/modules/media_controls/media_controls_shared_helper.h b/chromium/third_party/blink/renderer/modules/media_controls/media_controls_shared_helper.h index daf14b42ec2..4920feffe5c 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/media_controls_shared_helper.h +++ b/chromium/third_party/blink/renderer/modules/media_controls/media_controls_shared_helper.h @@ -5,22 +5,43 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CONTROLS_MEDIA_CONTROLS_SHARED_HELPER_H_ #define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CONTROLS_MEDIA_CONTROLS_SHARED_HELPER_H_ +#include "base/callback.h" #include "base/optional.h" +#include "third_party/blink/renderer/core/dom/events/native_event_listener.h" #include "third_party/blink/renderer/platform/wtf/allocator.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" namespace blink { class HTMLMediaElement; +class Element; class MediaControlsSharedHelpers final { STATIC_ONLY(MediaControlsSharedHelpers); public: + class TransitionEventListener final : public NativeEventListener { + public: + using Callback = base::RepeatingCallback<void()>; + + explicit TransitionEventListener(Element* element, Callback callback); + void Attach(); + void Detach(); + bool IsAttached() const; + void Invoke(ExecutionContext* context, Event* event) override; + void Trace(blink::Visitor* visitor) override; + + private: + bool attached_ = false; + Callback callback_; + Member<Element> element_; + }; + static base::Optional<unsigned> GetCurrentBufferedTimeRange( HTMLMediaElement& media_element); static String FormatTime(double time); + static bool ShouldShowFullscreenButton(const HTMLMediaElement& media_element); }; } // namespace blink diff --git a/chromium/third_party/blink/renderer/modules/media_controls/resources/legacyMediaControls.css b/chromium/third_party/blink/renderer/modules/media_controls/resources/legacyMediaControls.css index 47780421809..a6ace7d559d 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/resources/legacyMediaControls.css +++ b/chromium/third_party/blink/renderer/modules/media_controls/resources/legacyMediaControls.css @@ -638,6 +638,7 @@ video::cue { display: inline; background-color: rgba(0, 0, 0, 0.8); + padding: 2px 2px; } video::-webkit-media-text-track-region { diff --git a/chromium/third_party/blink/renderer/modules/media_controls/resources/modernMediaControls.css b/chromium/third_party/blink/renderer/modules/media_controls/resources/modernMediaControls.css index 037d667364d..cf64ba3f173 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/resources/modernMediaControls.css +++ b/chromium/third_party/blink/renderer/modules/media_controls/resources/modernMediaControls.css @@ -1169,6 +1169,7 @@ video::cue { display: inline; background-color: rgba(0, 0, 0, 0.8); + padding: 2px 2px; } video::-webkit-media-text-track-region { diff --git a/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_bottom_container_element.cc b/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_bottom_container_element.cc index 4542382a807..d70899258eb 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_bottom_container_element.cc +++ b/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_bottom_container_element.cc @@ -4,8 +4,10 @@ #include "third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_bottom_container_element.h" +#include "third_party/blink/renderer/core/html/media/html_media_element.h" #include "third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_time_display_element.h" #include "third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_timeline_element.h" +#include "third_party/blink/renderer/platform/wtf/functional.h" namespace blink { @@ -25,6 +27,14 @@ MediaControlsTouchlessBottomContainerElement:: ParserAppendChild(time_display_element_); ParserAppendChild(timeline_element_); + + event_listener_ = + MakeGarbageCollected<MediaControlsSharedHelpers::TransitionEventListener>( + this, + WTF::BindRepeating(&MediaControlsTouchlessBottomContainerElement:: + HandleTransitionEndEvent, + WrapWeakPersistent(this))); + event_listener_->Attach(); } LayoutObject* @@ -37,10 +47,30 @@ MediaControlsTouchlessBottomContainerElement::TimeDisplayLayoutObject() { return time_display_element_->GetLayoutObject(); } +void MediaControlsTouchlessBottomContainerElement::MakeOpaque( + bool should_hide) { + SetDisplayed(true); + MediaElement().MediaControlsDidBecomeVisible(); + MediaControlsTouchlessElement::MakeOpaque(should_hide); +} + +void MediaControlsTouchlessBottomContainerElement::HandleTransitionEndEvent() { + SetDisplayed(false); +} + +void MediaControlsTouchlessBottomContainerElement::SetDisplayed( + bool displayed) { + if (displayed) + RemoveInlineStyleProperty(CSSPropertyID::kDisplay); + else + SetInlineStyleProperty(CSSPropertyID::kDisplay, CSSValueID::kNone); +} + void MediaControlsTouchlessBottomContainerElement::Trace( blink::Visitor* visitor) { visitor->Trace(timeline_element_); visitor->Trace(time_display_element_); + visitor->Trace(event_listener_); MediaControlsTouchlessElement::Trace(visitor); } diff --git a/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_bottom_container_element.h b/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_bottom_container_element.h index 34d04de3191..e23acc51a24 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_bottom_container_element.h +++ b/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_bottom_container_element.h @@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CONTROLS_TOUCHLESS_ELEMENTS_MEDIA_CONTROLS_TOUCHLESS_BOTTOM_CONTAINER_ELEMENT_H_ #define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CONTROLS_TOUCHLESS_ELEMENTS_MEDIA_CONTROLS_TOUCHLESS_BOTTOM_CONTAINER_ELEMENT_H_ +#include "third_party/blink/renderer/modules/media_controls/media_controls_shared_helper.h" #include "third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_element.h" namespace blink { @@ -20,11 +21,17 @@ class MediaControlsTouchlessBottomContainerElement MediaControlsTouchlessBottomContainerElement(MediaControlsTouchlessImpl&); LayoutObject* TimelineLayoutObject(); LayoutObject* TimeDisplayLayoutObject(); + + void MakeOpaque(bool); void Trace(blink::Visitor*) override; private: + void HandleTransitionEndEvent(); + void SetDisplayed(bool); + Member<MediaControlsTouchlessTimelineElement> timeline_element_; Member<MediaControlsTouchlessTimeDisplayElement> time_display_element_; + Member<MediaControlsSharedHelpers::TransitionEventListener> event_listener_; }; } // namespace blink diff --git a/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_element.cc b/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_element.cc index cbbac960438..4c2c2137a2d 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_element.cc +++ b/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_element.cc @@ -17,6 +17,7 @@ namespace { constexpr WTF::TimeDelta kTimeToHideControl = TimeDelta::FromMilliseconds(3000); const char kTransparentCSSClass[] = "transparent"; +const char kTransparentImmediateCSSClass[] = "transparent-immediate"; } // namespace @@ -34,7 +35,7 @@ HTMLMediaElement& MediaControlsTouchlessElement::MediaElement() const { void MediaControlsTouchlessElement::MakeOpaque(bool should_hide) { EnsureHideControlTimer(); - classList().Remove(kTransparentCSSClass); + removeAttribute("class"); if (hide_control_timer_->IsActive()) StopHideControlTimer(); @@ -43,8 +44,9 @@ void MediaControlsTouchlessElement::MakeOpaque(bool should_hide) { StartHideControlTimer(); } -void MediaControlsTouchlessElement::MakeTransparent() { - classList().Add(kTransparentCSSClass); +void MediaControlsTouchlessElement::MakeTransparent(bool hide_immediate) { + classList().Add(hide_immediate ? kTransparentImmediateCSSClass + : kTransparentCSSClass); } void MediaControlsTouchlessElement::EnsureHideControlTimer() { diff --git a/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_element.h b/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_element.h index b43c44d21db..f5463bbf466 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_element.h +++ b/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_element.h @@ -27,12 +27,13 @@ class MediaControlsTouchlessElement void Trace(blink::Visitor* visitor) override; void MakeOpaque(bool /** True if control should hide after timer fired */); - void MakeTransparent(); + void MakeTransparent(bool = false /** True if hide immediately */); // Non-touch media event listener observer implementation. void OnFocusIn() override {} void OnTimeUpdate() override {} void OnDurationChange() override {} + void OnSeeking() override {} void OnLoadingProgress() override {} void OnPlay() override {} void OnPause() override {} diff --git a/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_overlay_element.cc b/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_overlay_element.cc index 5e008b0b004..7ac1f447124 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_overlay_element.cc +++ b/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_overlay_element.cc @@ -8,6 +8,8 @@ #include "third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_seek_button_element.h" #include "third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_volume_button_element.h" #include "third_party/blink/renderer/modules/media_controls/touchless/media_controls_touchless_impl.h" +#include "third_party/blink/renderer/platform/text/platform_locale.h" +#include "third_party/blink/renderer/platform/wtf/text/string_builder.h" namespace blink { @@ -39,6 +41,14 @@ MediaControlsTouchlessOverlayElement::MediaControlsTouchlessOverlayElement( ParserAppendChild(play_button); ParserAppendChild(seek_forward_button); ParserAppendChild(volume_down_button); + + StringBuilder aria_label; + aria_label.Append( + GetLocale().QueryString(WebLocalizedString::kAXMediaTouchLessSeekAction)); + aria_label.Append(" "); + aria_label.Append(GetLocale().QueryString( + WebLocalizedString::kAXMediaTouchLessVolumeAction)); + setAttribute(html_names::kAriaLabelAttr, aria_label.ToAtomicString()); } void MediaControlsTouchlessOverlayElement::Trace(blink::Visitor* visitor) { diff --git a/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_time_display_element.cc b/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_time_display_element.cc index 261f52bb2d8..5c6db6bfa01 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_time_display_element.cc +++ b/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_time_display_element.cc @@ -7,6 +7,7 @@ #include "third_party/blink/renderer/core/html/media/html_media_element.h" #include "third_party/blink/renderer/modules/media_controls/media_controls_shared_helper.h" #include "third_party/blink/renderer/modules/media_controls/touchless/media_controls_touchless_impl.h" +#include "third_party/blink/renderer/platform/text/platform_locale.h" #include "third_party/blink/renderer/platform/wtf/text/string_builder.h" namespace blink { @@ -27,6 +28,11 @@ void MediaControlsTouchlessTimeDisplayElement::OnTimeUpdate() { UpdateTimeDisplay(); } +void MediaControlsTouchlessTimeDisplayElement::OnSeeking() { + current_time_ = MediaElement().currentTime(); + UpdateTimeDisplay(); +} + void MediaControlsTouchlessTimeDisplayElement::OnDurationChange() { duration_ = MediaElement().duration(); UpdateTimeDisplay(); @@ -42,6 +48,16 @@ void MediaControlsTouchlessTimeDisplayElement::UpdateTimeDisplay() { builder.Append(" / "); builder.Append(MediaControlsSharedHelpers::FormatTime(duration_)); setInnerText(builder.ToAtomicString(), ASSERT_NO_EXCEPTION); + + StringBuilder aria_label; + aria_label.Append(GetLocale().QueryString( + WebLocalizedString::kAXMediaCurrentTimeDisplay, + MediaControlsSharedHelpers::FormatTime(current_time_))); + aria_label.Append(" "); + aria_label.Append(GetLocale().QueryString( + WebLocalizedString::kAXMediaTimeRemainingDisplay, + MediaControlsSharedHelpers::FormatTime(duration_))); + setAttribute(html_names::kAriaLabelAttr, aria_label.ToAtomicString()); } } // namespace blink diff --git a/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_time_display_element.h b/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_time_display_element.h index 6a8455a559e..0134b091c4c 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_time_display_element.h +++ b/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_time_display_element.h @@ -18,6 +18,7 @@ class MediaControlsTouchlessTimeDisplayElement // MediaControlsTouchlessMediaEventListenerObserver overrides void OnTimeUpdate() override; + void OnSeeking() override; void OnDurationChange() override; void Trace(blink::Visitor* visitor) override; diff --git a/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_timeline_element.cc b/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_timeline_element.cc index 57bd4a639c8..413ae227057 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_timeline_element.cc +++ b/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_timeline_element.cc @@ -34,6 +34,11 @@ void MediaControlsTouchlessTimelineElement::OnTimeUpdate() { UpdateBars(); } +void MediaControlsTouchlessTimelineElement::OnSeeking() { + current_time_ = MediaElement().currentTime(); + UpdateBars(); +} + void MediaControlsTouchlessTimelineElement::OnDurationChange() { duration_ = MediaElement().duration(); UpdateBars(); diff --git a/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_timeline_element.h b/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_timeline_element.h index b1416ce9ae2..c8a17e7ac55 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_timeline_element.h +++ b/chromium/third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_timeline_element.h @@ -17,6 +17,7 @@ class MediaControlsTouchlessTimelineElement // MediaControlsTouchlessMediaEventListenerObserver overrides void OnTimeUpdate() override; + void OnSeeking() override; void OnDurationChange() override; void OnLoadingProgress() override; diff --git a/chromium/third_party/blink/renderer/modules/media_controls/touchless/media_controls_touchless_impl.cc b/chromium/third_party/blink/renderer/modules/media_controls/touchless/media_controls_touchless_impl.cc index 7a2c2a8c129..fd6b6b7719a 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/touchless/media_controls_touchless_impl.cc +++ b/chromium/third_party/blink/renderer/modules/media_controls/touchless/media_controls_touchless_impl.cc @@ -23,6 +23,7 @@ #include "third_party/blink/renderer/core/page/chrome_client.h" #include "third_party/blink/renderer/modules/media_controls/elements/media_control_elements_helper.h" #include "third_party/blink/renderer/modules/media_controls/media_controls_orientation_lock_delegate.h" +#include "third_party/blink/renderer/modules/media_controls/media_controls_shared_helper.h" #include "third_party/blink/renderer/modules/media_controls/media_controls_text_track_manager.h" #include "third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_bottom_container_element.h" #include "third_party/blink/renderer/modules/media_controls/touchless/elements/media_controls_touchless_overlay_element.h" @@ -77,24 +78,24 @@ MediaControlsTouchlessImpl* MediaControlsTouchlessImpl::Create( ShadowRoot& shadow_root) { MediaControlsTouchlessImpl* controls = MakeGarbageCollected<MediaControlsTouchlessImpl>(media_element); - controls->overlay_ = - MakeGarbageCollected<MediaControlsTouchlessOverlayElement>(*controls); controls->bottom_container_ = MakeGarbageCollected<MediaControlsTouchlessBottomContainerElement>( *controls); + controls->overlay_ = + MakeGarbageCollected<MediaControlsTouchlessOverlayElement>(*controls); controls->volume_container_ = MakeGarbageCollected<MediaControlsTouchlessVolumeContainerElement>( *controls); - controls->ParserAppendChild(controls->overlay_); controls->ParserAppendChild(controls->bottom_container_); + controls->ParserAppendChild(controls->overlay_); controls->ParserAppendChild(controls->volume_container_); // Controls start hidden. - controls->overlay_->MakeTransparent(); - controls->volume_container_->MakeTransparent(); if (!media_element.paused()) controls->bottom_container_->MakeTransparent(); + controls->overlay_->MakeTransparent(); + controls->volume_container_->MakeTransparent(); if (RuntimeEnabledFeatures::VideoFullscreenOrientationLockEnabled() && media_element.IsHTMLVideoElement()) { @@ -166,8 +167,8 @@ MediaControlsTouchlessImpl::MediaEventListener() const { void MediaControlsTouchlessImpl::OnFocusIn() { if (MediaElement().ShouldShowControls()) { - overlay_->MakeOpaque(true); bottom_container_->MakeOpaque(!MediaElement().paused()); + overlay_->MakeOpaque(true); } } @@ -191,7 +192,7 @@ void MediaControlsTouchlessImpl::OnKeyDown(KeyboardEvent* event) { bool handled = true; switch (event->keyCode()) { case VKEY_RETURN: - volume_container_->MakeTransparent(); + volume_container_->MakeTransparent(true); overlay_->MakeOpaque(true); MediaElement().TogglePlayState(); break; @@ -270,9 +271,8 @@ void MediaControlsTouchlessImpl::ShowContextMenu() { WTF::Vector<mojom::blink::MenuItem> menu_items; - // TODO(jazzhsu, https://crbug.com/942577): Populate fullscreen list entry - // properly. - menu_items.push_back(mojom::blink::MenuItem::FULLSCREEN); + if (MediaControlsSharedHelpers::ShouldShowFullscreenButton(MediaElement())) + menu_items.push_back(mojom::blink::MenuItem::FULLSCREEN); if (MediaElement().HasAudio()) menu_items.push_back(mojom::blink::MenuItem::MUTE); @@ -402,14 +402,14 @@ WebScreenOrientationType MediaControlsTouchlessImpl::GetOrientation() { void MediaControlsTouchlessImpl::HandleTopButtonPress() { MaybeChangeVolume(kVolumeToChangeForTouchless); volume_container_->UpdateVolume(); - overlay_->MakeTransparent(); + overlay_->MakeTransparent(true); volume_container_->MakeOpaque(true); } void MediaControlsTouchlessImpl::HandleBottomButtonPress() { MaybeChangeVolume(kVolumeToChangeForTouchless * -1); volume_container_->UpdateVolume(); - overlay_->MakeTransparent(); + overlay_->MakeTransparent(true); volume_container_->MakeOpaque(true); } @@ -448,9 +448,13 @@ void MediaControlsTouchlessImpl::Trace(blink::Visitor* visitor) { HTMLDivElement::Trace(visitor); } -void MediaControlsTouchlessImpl::OnMediaMenuResultForTest( - mojom::blink::MenuResponsePtr response) { - OnMediaMenuResult(std::move(response)); +void MediaControlsTouchlessImpl::SetMediaControlsMenuHostForTesting( + mojom::blink::MediaControlsMenuHostPtr menu_host) { + media_controls_host_ = std::move(menu_host); +} + +void MediaControlsTouchlessImpl::MenuHostFlushForTesting() { + media_controls_host_.FlushForTesting(); } } // namespace blink diff --git a/chromium/third_party/blink/renderer/modules/media_controls/touchless/media_controls_touchless_impl.h b/chromium/third_party/blink/renderer/modules/media_controls/touchless/media_controls_touchless_impl.h index 14fc333e7fa..b3d86bd5102 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/touchless/media_controls_touchless_impl.h +++ b/chromium/third_party/blink/renderer/modules/media_controls/touchless/media_controls_touchless_impl.h @@ -56,6 +56,7 @@ class MODULES_EXPORT MediaControlsTouchlessImpl final void OnFocusIn() override; void OnTimeUpdate() override {} void OnDurationChange() override {} + void OnSeeking() override {} void OnLoadingProgress() override {} void OnPlay() override; void OnPause() override; @@ -70,7 +71,9 @@ class MODULES_EXPORT MediaControlsTouchlessImpl final MediaControlsTouchlessMediaEventListener& MediaEventListener() const; // Test functions - void OnMediaMenuResultForTest(mojom::blink::MenuResponsePtr); + void SetMediaControlsMenuHostForTesting( + mojom::blink::MediaControlsMenuHostPtr); + void MenuHostFlushForTesting(); void Trace(blink::Visitor*) override; diff --git a/chromium/third_party/blink/renderer/modules/media_controls/touchless/media_controls_touchless_impl_test.cc b/chromium/third_party/blink/renderer/modules/media_controls/touchless/media_controls_touchless_impl_test.cc index 9215321dace..01576a0d722 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/touchless/media_controls_touchless_impl_test.cc +++ b/chromium/third_party/blink/renderer/modules/media_controls/touchless/media_controls_touchless_impl_test.cc @@ -8,21 +8,26 @@ #include "build/build_config.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/blink/public/mojom/media_controls/touchless/media_controls.mojom-blink.h" #include "third_party/blink/renderer/core/css/css_property_value_set.h" #include "third_party/blink/renderer/core/dom/dom_token_list.h" #include "third_party/blink/renderer/core/dom/element.h" #include "third_party/blink/renderer/core/dom/element_traversal.h" #include "third_party/blink/renderer/core/events/keyboard_event.h" #include "third_party/blink/renderer/core/frame/settings.h" +#include "third_party/blink/renderer/core/fullscreen/fullscreen.h" #include "third_party/blink/renderer/core/geometry/dom_rect.h" #include "third_party/blink/renderer/core/html/media/html_media_element.h" +#include "third_party/blink/renderer/core/html/media/html_media_element_controls_list.h" #include "third_party/blink/renderer/core/html/media/html_media_test_helper.h" #include "third_party/blink/renderer/core/html/media/html_video_element.h" #include "third_party/blink/renderer/core/html/time_ranges.h" #include "third_party/blink/renderer/core/html/track/text_track.h" #include "third_party/blink/renderer/core/html/track/text_track_list.h" +#include "third_party/blink/renderer/core/layout/layout_object.h" #include "third_party/blink/renderer/core/loader/empty_clients.h" #include "third_party/blink/renderer/core/testing/page_test_base.h" +#include "third_party/blink/renderer/modules/media_controls/touchless/test_media_controls_menu_host.h" #include "third_party/blink/renderer/platform/keyboard_codes.h" #include "third_party/blink/renderer/platform/testing/empty_web_media_player.h" #include "third_party/blink/renderer/platform/testing/unit_test_helpers.h" @@ -31,14 +36,27 @@ namespace blink { namespace { +const char kTextTracksOffString[] = "Off"; + +class LocalePlatformSupport : public TestingPlatformSupport { + public: + WebString QueryLocalizedString(WebLocalizedString::Name name) override { + if (name == WebLocalizedString::kTextTracksOff) + return kTextTracksOffString; + return TestingPlatformSupport::QueryLocalizedString(name); + } +}; + class MockWebMediaPlayerForTouchlessImpl : public EmptyWebMediaPlayer { public: WebTimeRanges Seekable() const override { return seekable_; } bool HasVideo() const override { return true; } + bool HasAudio() const override { return has_audio_; } WebTimeRanges Buffered() const override { return buffered_; } WebTimeRanges buffered_; WebTimeRanges seekable_; + bool has_audio_ = false; }; class MockChromeClientForTouchlessImpl : public EmptyChromeClient { @@ -52,6 +70,14 @@ class MockChromeClientForTouchlessImpl : public EmptyChromeClient { return screen_info; } + void EnterFullscreen(LocalFrame& frame, const FullscreenOptions*) final { + Fullscreen::DidEnterFullscreen(*frame.GetDocument()); + } + + void ExitFullscreen(LocalFrame& frame) final { + Fullscreen::DidExitFullscreen(*frame.GetDocument()); + } + void SetOrientation(WebScreenOrientationType orientation_type) { orientation_ = orientation_type; } @@ -66,6 +92,7 @@ class MediaControlsTouchlessImplTest : public PageTestBase { void InitializePage() { Page::PageClients clients; + FillWithEmptyClients(clients); chrome_client_ = MakeGarbageCollected<MockChromeClientForTouchlessImpl>(); clients.chrome_client = chrome_client_; @@ -78,6 +105,11 @@ class MediaControlsTouchlessImplTest : public PageTestBase { ToHTMLVideoElement(*GetDocument().QuerySelector("video")); media_controls_ = static_cast<MediaControlsTouchlessImpl*>(video.GetMediaControls()); + + test_media_controls_host_ = std::make_unique<TestMediaControlsMenuHost>(); + + media_controls_->SetMediaControlsMenuHostForTesting( + test_media_controls_host_->CreateMediaControlsMenuHostPtr()); } MediaControlsTouchlessImpl& MediaControls() { return *media_controls_; } @@ -88,6 +120,10 @@ class MediaControlsTouchlessImplTest : public PageTestBase { MediaElement().GetWebMediaPlayer()); } + TestMenuHostArgList& GetMenuHostArgList() { + return test_media_controls_host_->GetMenuHostArgList(); + } + void SimulateKeydownEvent(Element& element, int key_code) { KeyboardEventInit* keyboard_event_init = KeyboardEventInit::Create(); keyboard_event_init->setKeyCode(key_code); @@ -111,9 +147,20 @@ class MediaControlsTouchlessImplTest : public PageTestBase { } bool IsControlsVisible(Element* element) { - return !element->classList().contains("transparent"); + return !element->classList().contains("transparent") && + !element->classList().contains("transparent-immediate"); } + bool IsElementDisplayed(Element* element) { + if (!element->InlineStyle()) + return true; + + return element->InlineStyle()->GetPropertyValue(CSSPropertyID::kDisplay) != + "none"; + } + + void SetHasAudio(bool has_audio) { WebMediaPlayer()->has_audio_ = has_audio; } + Element* GetControlByShadowPseudoId(const char* shadow_pseudo_id) { for (Element& element : ElementTraversal::DescendantsOf(MediaControls())) { if (element.ShadowPseudoId() == shadow_pseudo_id) @@ -126,12 +173,15 @@ class MediaControlsTouchlessImplTest : public PageTestBase { chrome_client_->SetOrientation(orientation_type); } - void SimulateClickOnMenuItem(mojom::blink::MenuItem menu_item, - int track_index) { - mojom::blink::MenuResponsePtr response(mojom::blink::MenuResponse::New()); - response->clicked = menu_item; - response->track_index = track_index; - media_controls_->OnMediaMenuResultForTest(std::move(response)); + void SetMenuResponse(mojom::blink::MenuItem menu_item, int track_index = -1) { + test_media_controls_host_->SetMenuResponse(menu_item, track_index); + } + + void SetMenuResponseAndShowMenu(mojom::blink::MenuItem menu_item, + int track_index = -1) { + SetMenuResponse(menu_item, track_index); + MediaControls().ShowContextMenu(); + MediaControls().MenuHostFlushForTesting(); } void CheckControlKeys(int seek_forward_key, @@ -161,6 +211,7 @@ class MediaControlsTouchlessImplTest : public PageTestBase { private: Persistent<MediaControlsTouchlessImpl> media_controls_; Persistent<MockChromeClientForTouchlessImpl> chrome_client_; + std::unique_ptr<TestMediaControlsMenuHost> test_media_controls_host_; }; class MediaControlsTouchlessImplTestWithMockScheduler @@ -283,6 +334,14 @@ TEST_F(MediaControlsTouchlessImplTest, ProgressBar) { EXPECT_DOUBLE_EQ(buffered / duration, loaded_bar_width / timeline_width); EXPECT_DOUBLE_EQ(current_time / buffered, progress_bar_width / loaded_bar_width); + + // Seek event should trigger a UI update as well. + SetBufferedRange(0); + MediaElement().setCurrentTime(0); + MediaElement().DispatchEvent(*Event::Create(event_type_names::kSeeking)); + + EXPECT_DOUBLE_EQ(progress_bar->getBoundingClientRect()->width(), 0); + EXPECT_DOUBLE_EQ(loaded_bar->getBoundingClientRect()->width(), 0); } TEST_F(MediaControlsTouchlessImplTest, TimeDisplay) { @@ -325,47 +384,70 @@ TEST_F(MediaControlsTouchlessImplTest, VolumeDisplayTest) { volume_bar_height / volume_bar_background_height, error); } -/** (jazzhsu@) TODO: Add mojom binding test and fix the following test. -TEST_F(MediaControlsTouchlessImplTest, ContextMenuTest) { - // Fullscreen buttom test. - EXPECT_FALSE(MediaElement().IsFullscreen()); - SimulateClickOnMenuItem(mojom::blink::MenuItem::FULLSCREEN, -1); +TEST_F(MediaControlsTouchlessImplTest, ContextMenuMojomTest) { + ScopedTestingPlatformSupport<LocalePlatformSupport> support; + + MediaControls().MediaElement().SetSrc("https://example.com/foo.mp4"); + std::unique_ptr<UserGestureIndicator> user_gesture_scope = + LocalFrame::NotifyUserActivation(GetDocument().GetFrame(), + UserGestureToken::kNewGesture); test::RunPendingTasks(); + + KeyboardEventInit* keyboard_event_init = KeyboardEventInit::Create(); + keyboard_event_init->setKey("SoftRight"); + Event* keyboard_event = + MakeGarbageCollected<KeyboardEvent>("keydown", keyboard_event_init); + + // Test fullscreen function. + SetMenuResponse(mojom::blink::MenuItem::FULLSCREEN); + MediaElement().DispatchEvent(*keyboard_event); + MediaControls().MenuHostFlushForTesting(); + test::RunPendingTasks(); + + TestMenuHostArgList& arg_list = GetMenuHostArgList(); + EXPECT_EQ((int)arg_list.menu_items.size(), 2); + EXPECT_EQ(arg_list.menu_items[0], mojom::blink::MenuItem::FULLSCREEN); + EXPECT_EQ(arg_list.menu_items[1], mojom::blink::MenuItem::DOWNLOAD); + EXPECT_FALSE(arg_list.video_state->is_fullscreen); EXPECT_TRUE(MediaElement().IsFullscreen()); - SimulateClickOnMenuItem(mojom::blink::MenuItem::FULLSCREEN, -1); + + SetMenuResponseAndShowMenu(mojom::blink::MenuItem::FULLSCREEN); test::RunPendingTasks(); + + EXPECT_TRUE(arg_list.video_state->is_fullscreen); EXPECT_FALSE(MediaElement().IsFullscreen()); - // Mute buttom test. - EXPECT_FALSE(MediaElement().muted()); - SimulateClickOnMenuItem(mojom::blink::MenuItem::MUTE, -1); + // Disable download and fullscreen, and show mute option. + MediaElement().ControlsListInternal()->Add("nofullscreen"); + MediaElement().GetDocument().GetSettings()->SetHideDownloadUI(true); + SetHasAudio(true); + + SetMenuResponseAndShowMenu(mojom::blink::MenuItem::MUTE); + + EXPECT_EQ((int)arg_list.menu_items.size(), 1); + EXPECT_EQ(arg_list.menu_items[0], mojom::blink::MenuItem::MUTE); + EXPECT_FALSE(arg_list.video_state->is_muted); EXPECT_TRUE(MediaElement().muted()); - SimulateClickOnMenuItem(mojom::blink::MenuItem::MUTE, -1); + + SetMenuResponseAndShowMenu(mojom::blink::MenuItem::MUTE); + + EXPECT_TRUE(arg_list.video_state->is_muted); EXPECT_FALSE(MediaElement().muted()); - // Text track test. - TextTrack* track1 = MediaElement().addTextTrack("subtitle", "english", - "en", NASSERT_NO_EXCEPTION); - TextTrack* track2 = MediaElement().addTextTrack("subtitle", "english2", - "en", ASSERT_NO_EXCEPTION); - EXPECT_NE(track1->mode(), TextTrack::ShowingKeyword()); - EXPECT_NE(track2->mode(), TextTrack::ShowingKeyword()); - - // Select first track. - SimulateClickOnMenuItem(mojom::blink::MenuItem::CAPTIONS, 0); - EXPECT_EQ(track1->mode(), TextTrack::ShowingKeyword()); - - // Select second track. - SimulateClickOnMenuItem(mojom::blink::MenuItem::CAPTIONS, 1); - EXPECT_NE(track1->mode(), TextTrack::ShowingKeyword()); - EXPECT_EQ(track2->mode(), TextTrack::ShowingKeyword()); - - // Turn all tracks off. - SimulateClickOnMenuItem(mojom::blink::MenuItem::CAPTIONS, -1); - EXPECT_NE(track1->mode(), TextTrack::ShowingKeyword()); - EXPECT_NE(track2->mode(), TextTrack::ShowingKeyword()); + // Disable mute option and show text track option. + SetHasAudio(false); + TextTrack* track = MediaElement().addTextTrack("subtitles", "english", "en", + ASSERT_NO_EXCEPTION); + SetMenuResponseAndShowMenu(mojom::blink::MenuItem::CAPTIONS, 0); + + EXPECT_EQ((int)arg_list.menu_items.size(), 1); + EXPECT_EQ(arg_list.menu_items[0], mojom::blink::MenuItem::CAPTIONS); + EXPECT_EQ(arg_list.text_tracks[1]->label, "english"); + EXPECT_EQ(track->mode(), TextTrack::ShowingKeyword()); + + SetMenuResponseAndShowMenu(mojom::blink::MenuItem::CAPTIONS, -1); + EXPECT_NE(track->mode(), TextTrack::ShowingKeyword()); } -*/ TEST_F(MediaControlsTouchlessImplTestWithMockScheduler, MidOverlayHideTimerTest) { @@ -408,6 +490,7 @@ TEST_F(MediaControlsTouchlessImplTestWithMockScheduler, // Bottom container starts opaque since video is paused. EXPECT_TRUE(IsControlsVisible(bottom_container)); + EXPECT_TRUE(IsElementDisplayed(bottom_container)); MediaElement().Play(); platform()->RunForPeriodSeconds(3); @@ -434,6 +517,11 @@ TEST_F(MediaControlsTouchlessImplTestWithMockScheduler, platform()->RunForPeriodSeconds(3); EXPECT_FALSE(IsControlsVisible(bottom_container)); + // Display should be none after hide transition ends. + bottom_container->DispatchEvent( + *Event::Create(event_type_names::kTransitionend)); + EXPECT_FALSE(IsElementDisplayed(bottom_container)); + // Bottom container should show after pressing right/left arrow. SimulateKeydownEvent(MediaElement(), VK_RIGHT); EXPECT_TRUE(IsControlsVisible(bottom_container)); diff --git a/chromium/third_party/blink/renderer/modules/media_controls/touchless/media_controls_touchless_media_event_listener.cc b/chromium/third_party/blink/renderer/modules/media_controls/touchless/media_controls_touchless_media_event_listener.cc index 315164554be..17fc5f17796 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/touchless/media_controls_touchless_media_event_listener.cc +++ b/chromium/third_party/blink/renderer/modules/media_controls/touchless/media_controls_touchless_media_event_listener.cc @@ -35,6 +35,7 @@ void MediaControlsTouchlessMediaEventListener::Attach() { media_element_->addEventListener(event_type_names::kTimeupdate, this, false); media_element_->addEventListener(event_type_names::kDurationchange, this, false); + media_element_->addEventListener(event_type_names::kSeeking, this, false); media_element_->addEventListener(event_type_names::kProgress, this, false); media_element_->addEventListener(event_type_names::kPlay, this, false); @@ -76,6 +77,11 @@ void MediaControlsTouchlessMediaEventListener::Invoke( observer->OnDurationChange(); return; } + if (event->type() == event_type_names::kSeeking) { + for (auto& observer : observers_) + observer->OnSeeking(); + return; + } if (event->type() == event_type_names::kProgress) { for (auto& observer : observers_) observer->OnLoadingProgress(); diff --git a/chromium/third_party/blink/renderer/modules/media_controls/touchless/media_controls_touchless_media_event_listener_observer.h b/chromium/third_party/blink/renderer/modules/media_controls/touchless/media_controls_touchless_media_event_listener_observer.h index 1c297a9e47c..cf07510f775 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/touchless/media_controls_touchless_media_event_listener_observer.h +++ b/chromium/third_party/blink/renderer/modules/media_controls/touchless/media_controls_touchless_media_event_listener_observer.h @@ -17,6 +17,7 @@ class MediaControlsTouchlessMediaEventListenerObserver virtual void OnFocusIn() = 0; virtual void OnTimeUpdate() = 0; virtual void OnDurationChange() = 0; + virtual void OnSeeking() = 0; virtual void OnLoadingProgress() = 0; virtual void OnPlay() = 0; virtual void OnPause() = 0; diff --git a/chromium/third_party/blink/renderer/modules/media_controls/touchless/resources/mediaControlsTouchless.css b/chromium/third_party/blink/renderer/modules/media_controls/touchless/resources/mediaControlsTouchless.css index 1ef89f2a909..98516f3aa39 100644 --- a/chromium/third_party/blink/renderer/modules/media_controls/touchless/resources/mediaControlsTouchless.css +++ b/chromium/third_party/blink/renderer/modules/media_controls/touchless/resources/mediaControlsTouchless.css @@ -40,6 +40,10 @@ video::-internal-media-controls-touchless-overlay.transparent { transition: opacity .5s; } +video::-internal-media-controls-touchless-overlay.transparent-immediate { + opacity: 0; +} + video::-internal-media-controls-touchless-volume-up-button { width: 30px; height: 30px; @@ -175,6 +179,10 @@ video::-internal-media-controls-touchless-volume-container.transparent { transition: opacity .5s; } +video::-internal-media-controls-touchless-volume-container.transparent-immediate { + opacity: 0; +} + video::-internal-media-controls-touchless-volume-bar-background { width: 4px; margin-left: 20px; diff --git a/chromium/third_party/blink/renderer/modules/media_controls/touchless/test_media_controls_menu_host.cc b/chromium/third_party/blink/renderer/modules/media_controls/touchless/test_media_controls_menu_host.cc new file mode 100644 index 00000000000..d8780771ab3 --- /dev/null +++ b/chromium/third_party/blink/renderer/modules/media_controls/touchless/test_media_controls_menu_host.cc @@ -0,0 +1,47 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/renderer/modules/media_controls/touchless/test_media_controls_menu_host.h" + +namespace blink { + +mojom::blink::MediaControlsMenuHostPtr +TestMediaControlsMenuHost::CreateMediaControlsMenuHostPtr() { + mojom::blink::MediaControlsMenuHostPtr ptr; + binding_.Bind(mojo::MakeRequest(&ptr)); + return ptr; +} + +void TestMediaControlsMenuHost::ShowMediaMenu( + const WTF::Vector<mojom::MenuItem>& menu_items, + mojom::blink::VideoStatePtr video_state, + base::Optional<WTF::Vector<mojom::blink::TextTrackMetadataPtr>> text_tracks, + ShowMediaMenuCallback callback) { + arg_list_.menu_items = WTF::Vector<mojom::MenuItem>(menu_items); + + arg_list_.video_state = mojom::blink::VideoState::New(); + arg_list_.video_state->is_fullscreen = video_state->is_fullscreen; + arg_list_.video_state->is_muted = video_state->is_muted; + + arg_list_.text_tracks = WTF::Vector<mojom::blink::TextTrackMetadataPtr>( + std::move(text_tracks.value())); + + std::move(callback).Run(std::move(response_)); +} + +TestMenuHostArgList& TestMediaControlsMenuHost::GetMenuHostArgList() { + return arg_list_; +} + +void TestMediaControlsMenuHost::SetMenuResponse( + mojom::blink::MenuItem menu_item, + int track_index) { + if (response_.is_null()) + response_ = mojom::blink::MenuResponse::New(); + + response_->clicked = menu_item; + response_->track_index = track_index; +} + +} // namespace blink diff --git a/chromium/third_party/blink/renderer/modules/media_controls/touchless/test_media_controls_menu_host.h b/chromium/third_party/blink/renderer/modules/media_controls/touchless/test_media_controls_menu_host.h new file mode 100644 index 00000000000..4378945032f --- /dev/null +++ b/chromium/third_party/blink/renderer/modules/media_controls/touchless/test_media_controls_menu_host.h @@ -0,0 +1,40 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CONTROLS_TOUCHLESS_TEST_MEDIA_CONTROLS_MENU_HOST_H_ +#define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CONTROLS_TOUCHLESS_TEST_MEDIA_CONTROLS_MENU_HOST_H_ + +#include "mojo/public/cpp/bindings/binding.h" +#include "third_party/blink/public/mojom/media_controls/touchless/media_controls.mojom-blink.h" + +namespace blink { + +struct TestMenuHostArgList { + WTF::Vector<mojom::MenuItem> menu_items; + mojom::blink::VideoStatePtr video_state; + WTF::Vector<mojom::blink::TextTrackMetadataPtr> text_tracks; +}; + +class TestMediaControlsMenuHost : public mojom::blink::MediaControlsMenuHost { + public: + mojom::blink::MediaControlsMenuHostPtr CreateMediaControlsMenuHostPtr(); + void ShowMediaMenu( + const WTF::Vector<mojom::MenuItem>& menu_items, + mojom::blink::VideoStatePtr video_state, + base::Optional<WTF::Vector<mojom::blink::TextTrackMetadataPtr>> + text_tracks, + ShowMediaMenuCallback callback) override; + + TestMenuHostArgList& GetMenuHostArgList(); + void SetMenuResponse(mojom::blink::MenuItem menu_item, int track_index); + + private: + mojo::Binding<mojom::blink::MediaControlsMenuHost> binding_{this}; + TestMenuHostArgList arg_list_; + mojom::blink::MenuResponsePtr response_; +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CONTROLS_TOUCHLESS_TEST_MEDIA_CONTROLS_MENU_HOST_H_ diff --git a/chromium/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc b/chromium/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc index a84a1980eaa..9f3885137c6 100644 --- a/chromium/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc +++ b/chromium/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc @@ -2883,6 +2883,15 @@ void RTCPeerConnection::DidModifyTransceivers( transceiver->receiver()->track()->Component()->Source()->SetReadyState( MediaStreamSource::kReadyStateLive); } + + // Transceiver modifications can cause changes in the set of ICE + // transports, which may affect ICE transport state. + // Note - this must be done every time the set of ICE transports happens. + // At the moment this only happens in SLD/SRD, and this function is called + // whenever these functions complete. + if (sdp_semantics_ == webrtc::SdpSemantics::kUnifiedPlan) { + UpdateIceConnectionState(); + } } void RTCPeerConnection::SetAssociatedMediaStreams( diff --git a/chromium/third_party/blink/renderer/modules/permissions/permissions.cc b/chromium/third_party/blink/renderer/modules/permissions/permissions.cc index 461d120524d..bee801ccead 100644 --- a/chromium/third_party/blink/renderer/modules/permissions/permissions.cc +++ b/chromium/third_party/blink/renderer/modules/permissions/permissions.cc @@ -25,6 +25,7 @@ #include "third_party/blink/renderer/modules/permissions/permission_status.h" #include "third_party/blink/renderer/modules/permissions/permission_utils.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h" +#include "third_party/blink/renderer/platform/scheduler/public/frame_scheduler.h" #include "third_party/blink/renderer/platform/wtf/functional.h" #include "third_party/blink/renderer/platform/wtf/vector.h" #include "third_party/blink/renderer/platform/wtf/wtf_size_t.h" @@ -148,6 +149,44 @@ PermissionDescriptorPtr ParsePermission(ScriptState* script_state, return nullptr; } +base::Optional<SchedulingPolicy::Feature> PermissionToSchedulingFeature( + PermissionName permission) { + switch (permission) { + case PermissionName::GEOLOCATION: + return SchedulingPolicy::Feature::kRequestedGeolocationPermission; + case PermissionName::NOTIFICATIONS: + return SchedulingPolicy::Feature::kRequestedNotificationsPermission; + case PermissionName::MIDI: + return SchedulingPolicy::Feature::kRequestedMIDIPermission; + case PermissionName::AUDIO_CAPTURE: + return SchedulingPolicy::Feature::kRequestedAudioCapturePermission; + case PermissionName::VIDEO_CAPTURE: + return SchedulingPolicy::Feature::kRequestedVideoCapturePermission; + case PermissionName::SENSORS: + return SchedulingPolicy::Feature::kRequestedSensorsPermission; + case PermissionName::BACKGROUND_SYNC: + case PermissionName::BACKGROUND_FETCH: + return SchedulingPolicy::Feature::kRequestedBackgroundWorkPermission; + default: + return base::nullopt; + } +} + +void NotifySchedulerAboutPermissionRequest(ExecutionContext* context, + PermissionName permission) { + if (!context) + return; + + base::Optional<SchedulingPolicy::Feature> feature = + PermissionToSchedulingFeature(permission); + + if (!feature) + return; + + context->GetScheduler()->RegisterStickyFeature( + feature.value(), {SchedulingPolicy::RecordMetricsForBackForwardCache()}); +} + } // anonymous namespace ScriptPromise Permissions::query(ScriptState* script_state, @@ -184,6 +223,8 @@ ScriptPromise Permissions::request(ScriptState* script_state, ExecutionContext* context = ExecutionContext::From(script_state); + NotifySchedulerAboutPermissionRequest(context, descriptor->name); + auto* resolver = MakeGarbageCollected<ScriptPromiseResolver>(script_state); ScriptPromise promise = resolver->Promise(); @@ -229,6 +270,9 @@ ScriptPromise Permissions::requestAll( Vector<PermissionDescriptorPtr> internal_permissions; Vector<int> caller_index_to_internal_index; caller_index_to_internal_index.resize(raw_permissions.size()); + + ExecutionContext* context = ExecutionContext::From(script_state); + for (wtf_size_t i = 0; i < raw_permissions.size(); ++i) { const ScriptValue& raw_permission = raw_permissions[i]; @@ -237,6 +281,8 @@ ScriptPromise Permissions::requestAll( if (exception_state.HadException()) return ScriptPromise(); + NotifySchedulerAboutPermissionRequest(context, descriptor->name); + // Only append permissions types that are not already present in the vector. wtf_size_t internal_index = kNotFound; for (wtf_size_t j = 0; j < internal_permissions.size(); ++j) { @@ -252,8 +298,6 @@ ScriptPromise Permissions::requestAll( caller_index_to_internal_index[i] = internal_index; } - ExecutionContext* context = ExecutionContext::From(script_state); - auto* resolver = MakeGarbageCollected<ScriptPromiseResolver>(script_state); ScriptPromise promise = resolver->Promise(); diff --git a/chromium/third_party/blink/renderer/platform/bindings/script_forbidden_scope.h b/chromium/third_party/blink/renderer/platform/bindings/script_forbidden_scope.h index 656083c7377..ae44c6d23d8 100644 --- a/chromium/third_party/blink/renderer/platform/bindings/script_forbidden_scope.h +++ b/chromium/third_party/blink/renderer/platform/bindings/script_forbidden_scope.h @@ -7,6 +7,7 @@ #include "base/auto_reset.h" #include "base/macros.h" +#include "third_party/blink/renderer/platform/bindings/v8_throw_exception.h" #include "third_party/blink/renderer/platform/platform_export.h" #include "third_party/blink/renderer/platform/wtf/allocator.h" #include "third_party/blink/renderer/platform/wtf/stack_util.h" @@ -41,7 +42,11 @@ class PLATFORM_EXPORT ScriptForbiddenScope final { return GetMutableCounter() > 0; } - // DO NOT USE THESE FUNCTIONS FROM OUTSIDE OF THIS CLASS. + static void ThrowScriptForbiddenException(v8::Isolate* isolate) { + V8ThrowException::ThrowError(isolate, "Script execution is forbidden."); + } + + private: static void Enter() { if (LIKELY(!WTF::MayNotBeMainThread())) { ++g_main_thread_counter_; @@ -58,9 +63,11 @@ class PLATFORM_EXPORT ScriptForbiddenScope final { } } - private: static unsigned& GetMutableCounter(); static unsigned g_main_thread_counter_; + + // V8GCController is exceptionally allowed to call Enter/Exit. + friend class V8GCController; }; } // namespace blink diff --git a/chromium/third_party/blink/renderer/platform/graphics/graphics_layer.cc b/chromium/third_party/blink/renderer/platform/graphics/graphics_layer.cc index 48cf52efb0f..e4a7c0c96d1 100644 --- a/chromium/third_party/blink/renderer/platform/graphics/graphics_layer.cc +++ b/chromium/third_party/blink/renderer/platform/graphics/graphics_layer.cc @@ -1058,16 +1058,23 @@ void GraphicsLayer::SetLayerState(const PropertyTreeState& layer_state, SetPaintArtifactCompositorNeedsUpdate(); } -void GraphicsLayer::SetContentsPropertyTreeState( - const PropertyTreeState& layer_state) { +void GraphicsLayer::SetContentsLayerState(const PropertyTreeState& layer_state, + const IntPoint& layer_offset) { DCHECK(ContentsLayer()); - if (contents_property_tree_state_) { - *contents_property_tree_state_ = layer_state; + if (contents_layer_state_) { + if (contents_layer_state_->state == layer_state && + contents_layer_state_->offset == layer_offset) + return; + contents_layer_state_->state = layer_state; + contents_layer_state_->offset = layer_offset; } else { - contents_property_tree_state_ = - std::make_unique<PropertyTreeState>(layer_state); + contents_layer_state_ = + std::make_unique<LayerState>(LayerState{layer_state, layer_offset}); } + + if (RuntimeEnabledFeatures::BlinkGenPropertyTreesEnabled()) + SetPaintArtifactCompositorNeedsUpdate(); } scoped_refptr<cc::DisplayItemList> GraphicsLayer::PaintContentsToDisplayList( diff --git a/chromium/third_party/blink/renderer/platform/graphics/graphics_layer.h b/chromium/third_party/blink/renderer/platform/graphics/graphics_layer.h index ced1a78d816..1c7f75af559 100644 --- a/chromium/third_party/blink/renderer/platform/graphics/graphics_layer.h +++ b/chromium/third_party/blink/renderer/platform/graphics/graphics_layer.h @@ -232,6 +232,8 @@ class PLATFORM_EXPORT GraphicsLayer : public cc::LayerClient, return const_cast<GraphicsLayer*>(this)->ContentsLayerIfRegistered(); } + const IntRect& ContentsRect() const { return contents_rect_; } + // For hosting this GraphicsLayer in a native layer hierarchy. cc::PictureLayer* CcLayer() const; @@ -294,16 +296,15 @@ class PLATFORM_EXPORT GraphicsLayer : public cc::LayerClient, } IntPoint GetOffsetFromTransformNode() const { return layer_state_->offset; } - void SetContentsPropertyTreeState(const PropertyTreeState&); + void SetContentsLayerState(const PropertyTreeState&, + const IntPoint& layer_offset); const PropertyTreeState& GetContentsPropertyTreeState() const { - return contents_property_tree_state_ ? *contents_property_tree_state_ - : GetPropertyTreeState(); + return contents_layer_state_ ? contents_layer_state_->state + : GetPropertyTreeState(); } IntPoint GetContentsOffsetFromTransformNode() const { - auto offset = contents_rect_.Location(); - if (layer_state_) - offset = offset + GetOffsetFromTransformNode(); - return offset; + return contents_layer_state_ ? contents_layer_state_->offset + : GetOffsetFromTransformNode(); } // Capture the last painted result into a PaintRecord. This GraphicsLayer @@ -423,7 +424,7 @@ class PLATFORM_EXPORT GraphicsLayer : public cc::LayerClient, IntPoint offset; }; std::unique_ptr<LayerState> layer_state_; - std::unique_ptr<PropertyTreeState> contents_property_tree_state_; + std::unique_ptr<LayerState> contents_layer_state_; std::unique_ptr<RasterInvalidator> raster_invalidator_; diff --git a/chromium/third_party/blink/renderer/platform/scheduler/common/scheduling_policy.cc b/chromium/third_party/blink/renderer/platform/scheduler/common/scheduling_policy.cc index 17c24ba6149..c3d0a529526 100644 --- a/chromium/third_party/blink/renderer/platform/scheduler/common/scheduling_policy.cc +++ b/chromium/third_party/blink/renderer/platform/scheduler/common/scheduling_policy.cc @@ -16,6 +16,8 @@ bool SchedulingPolicy::IsFeatureSticky(SchedulingPolicy::Feature feature) { case Feature::kOutstandingNetworkRequest: case Feature::kOutstandingIndexedDBTransaction: case Feature::kHasScriptableFramesInMultipleTabs: + case Feature::kBroadcastChannel: + case Feature::kIndexedDBConnection: return false; case Feature::kMainResourceHasCacheControlNoStore: case Feature::kMainResourceHasCacheControlNoCache: @@ -30,6 +32,13 @@ bool SchedulingPolicy::IsFeatureSticky(SchedulingPolicy::Feature feature) { case Feature::kContainsPlugins: case Feature::kDocumentLoaded: case Feature::kServiceWorkerControlledPage: + case Feature::kRequestedGeolocationPermission: + case Feature::kRequestedNotificationsPermission: + case Feature::kRequestedMIDIPermission: + case Feature::kRequestedAudioCapturePermission: + case Feature::kRequestedVideoCapturePermission: + case Feature::kRequestedSensorsPermission: + case Feature::kRequestedBackgroundWorkPermission: return true; } } diff --git a/chromium/third_party/icu/README.chromium b/chromium/third_party/icu/README.chromium index 4c8e9b0fb58..c75f49a1ed5 100644 --- a/chromium/third_party/icu/README.chromium +++ b/chromium/third_party/icu/README.chromium @@ -205,7 +205,7 @@ D. Local Modifications windowsZones.txt zoneinfo64.txt - As of Dec 31, 2018, the latest version is 2018i and the above files + As of May 7, 2019, the latest version is 2019a and the above files are available at the ICU github repos. 4. Build-related changes @@ -258,3 +258,10 @@ D. Local Modifications https://unicode-org.atlassian.net/browse/ICU-20391 - upstream PR: https://github.com/unicode-org/icu/pull/628 + +9. Timezone breakage patch + - patches/timezone.patch + - upstream bug: + https://unicode-org.atlassian.net/browse/ICU-20595 + - upstream PR: + https://github.com/unicode-org/icu/pull/649 diff --git a/chromium/third_party/icu/cast/icudtl.dat b/chromium/third_party/icu/cast/icudtl.dat Binary files differindex 6b72db42cc1..7d493f69cad 100644 --- a/chromium/third_party/icu/cast/icudtl.dat +++ b/chromium/third_party/icu/cast/icudtl.dat diff --git a/chromium/third_party/icu/chromeos/icudtl.dat b/chromium/third_party/icu/chromeos/icudtl.dat Binary files differindex 20d9a305662..f0d4aca98c9 100644 --- a/chromium/third_party/icu/chromeos/icudtl.dat +++ b/chromium/third_party/icu/chromeos/icudtl.dat diff --git a/chromium/third_party/icu/common/icudtb.dat b/chromium/third_party/icu/common/icudtb.dat Binary files differindex 00aab097946..9429366ec85 100644 --- a/chromium/third_party/icu/common/icudtb.dat +++ b/chromium/third_party/icu/common/icudtb.dat diff --git a/chromium/third_party/icu/common/icudtl.dat b/chromium/third_party/icu/common/icudtl.dat Binary files differindex 195f6f8ed7f..0a6596ae65c 100644 --- a/chromium/third_party/icu/common/icudtl.dat +++ b/chromium/third_party/icu/common/icudtl.dat diff --git a/chromium/third_party/icu/filters/android.json b/chromium/third_party/icu/filters/android.json index 1ee8f13242f..38be85f6393 100644 --- a/chromium/third_party/icu/filters/android.json +++ b/chromium/third_party/icu/filters/android.json @@ -756,11 +756,6 @@ // https://cs.chromium.org/chromium/src/third_party/icu/patches/data.build.patch?rcl=797b7c "unames": { "filterType": "exclude" - }, -// Based on the --disable-layout mentioned in -// https://cs.chromium.org/chromium/src/third_party/icu/README.chromium?rcl=797b7c - "ulayout": { - "filterType": "exclude" } }, // Based on the ICU63 version of diff --git a/chromium/third_party/icu/filters/android_small.json b/chromium/third_party/icu/filters/android_small.json index 68a19c8df8d..e002a075575 100644 --- a/chromium/third_party/icu/filters/android_small.json +++ b/chromium/third_party/icu/filters/android_small.json @@ -739,11 +739,6 @@ // https://cs.chromium.org/chromium/src/third_party/icu/patches/data.build.patch?rcl=797b7c "unames": { "filterType": "exclude" - }, -// Based on the --disable-layout mentioned in -// https://cs.chromium.org/chromium/src/third_party/icu/README.chromium?rcl=797b7c - "ulayout": { - "filterType": "exclude" } }, // Based on the ICU63 version of diff --git a/chromium/third_party/icu/filters/cast.json b/chromium/third_party/icu/filters/cast.json index a1709eab4d1..7a1e8251811 100644 --- a/chromium/third_party/icu/filters/cast.json +++ b/chromium/third_party/icu/filters/cast.json @@ -796,11 +796,6 @@ // https://cs.chromium.org/chromium/src/third_party/icu/patches/data.build.patch?rcl=797b7c "unames": { "filterType": "exclude" - }, -// Based on the --disable-layout mentioned in -// https://cs.chromium.org/chromium/src/third_party/icu/README.chromium?rcl=797b7c - "ulayout": { - "filterType": "exclude" } }, // Based on the ICU63 version of diff --git a/chromium/third_party/icu/filters/chromeos.json b/chromium/third_party/icu/filters/chromeos.json index 5e28c076f83..d3de23c5bbc 100644 --- a/chromium/third_party/icu/filters/chromeos.json +++ b/chromium/third_party/icu/filters/chromeos.json @@ -784,11 +784,6 @@ // https://cs.chromium.org/chromium/src/third_party/icu/patches/data.build.patch?rcl=797b7c "unames": { "filterType": "exclude" - }, -// Based on the --disable-layout mentioned in -// https://cs.chromium.org/chromium/src/third_party/icu/README.chromium?rcl=797b7c - "ulayout": { - "filterType": "exclude" } }, // Based on the ICU63 version of diff --git a/chromium/third_party/icu/filters/common.json b/chromium/third_party/icu/filters/common.json index 3219e8ad064..9750dcf2be8 100644 --- a/chromium/third_party/icu/filters/common.json +++ b/chromium/third_party/icu/filters/common.json @@ -784,11 +784,6 @@ // https://cs.chromium.org/chromium/src/third_party/icu/patches/data.build.patch?rcl=797b7c "unames": { "filterType": "exclude" - }, -// Based on the --disable-layout mentioned in -// https://cs.chromium.org/chromium/src/third_party/icu/README.chromium?rcl=797b7c - "ulayout": { - "filterType": "exclude" } }, // Based on the ICU63 version of diff --git a/chromium/third_party/icu/filters/flutter.json b/chromium/third_party/icu/filters/flutter.json index bda4b98bbee..91ea4fde4a9 100644 --- a/chromium/third_party/icu/filters/flutter.json +++ b/chromium/third_party/icu/filters/flutter.json @@ -722,11 +722,6 @@ // https://cs.chromium.org/chromium/src/third_party/icu/patches/data.build.patch?rcl=797b7c "unames": { "filterType": "exclude" - }, -// Based on the --disable-layout mentioned in -// https://cs.chromium.org/chromium/src/third_party/icu/README.chromium?rcl=797b7c - "ulayout": { - "filterType": "exclude" } }, // Based on the ICU63 version of diff --git a/chromium/third_party/icu/flutter/icudtl.dat b/chromium/third_party/icu/flutter/icudtl.dat Binary files differindex c501eb4fc86..3606735a793 100644 --- a/chromium/third_party/icu/flutter/icudtl.dat +++ b/chromium/third_party/icu/flutter/icudtl.dat diff --git a/chromium/third_party/icu/patches/timezone.patch b/chromium/third_party/icu/patches/timezone.patch new file mode 100644 index 00000000000..bf7e1729aef --- /dev/null +++ b/chromium/third_party/icu/patches/timezone.patch @@ -0,0 +1,52 @@ +diff --git a/source/i18n/timezone.cpp b/source/i18n/timezone.cpp +index f129d8b6..32214d72 100644 +--- a/source/i18n/timezone.cpp ++++ b/source/i18n/timezone.cpp +@@ -527,6 +527,11 @@ TimeZone::detectHostTimeZone() + + // ------------------------------------- + ++static UMutex *gDefaultZoneMutex() { ++ static UMutex* m = new UMutex(); ++ return m; ++} ++ + /** + * Initialize DEFAULT_ZONE from the system default time zone. + * Upon return, DEFAULT_ZONE will not be NULL, unless operator new() +@@ -536,6 +541,7 @@ static void U_CALLCONV initDefault() + { + ucln_i18n_registerCleanup(UCLN_I18N_TIMEZONE, timeZone_cleanup); + ++ Mutex lock(gDefaultZoneMutex()); + // If setDefault() has already been called we can skip getting the + // default zone information from the system. + if (DEFAULT_ZONE != NULL) { +@@ -571,7 +577,10 @@ TimeZone* U_EXPORT2 + TimeZone::createDefault() + { + umtx_initOnce(gDefaultZoneInitOnce, initDefault); +- return (DEFAULT_ZONE != NULL) ? DEFAULT_ZONE->clone() : NULL; ++ { ++ Mutex lock(gDefaultZoneMutex()); ++ return (DEFAULT_ZONE != NULL) ? DEFAULT_ZONE->clone() : NULL; ++ } + } + + // ------------------------------------- +@@ -581,9 +590,12 @@ TimeZone::adoptDefault(TimeZone* zone) + { + if (zone != NULL) + { +- TimeZone *old = DEFAULT_ZONE; +- DEFAULT_ZONE = zone; +- delete old; ++ { ++ Mutex lock(gDefaultZoneMutex()); ++ TimeZone *old = DEFAULT_ZONE; ++ DEFAULT_ZONE = zone; ++ delete old; ++ } + ucln_i18n_registerCleanup(UCLN_I18N_TIMEZONE, timeZone_cleanup); + } + } diff --git a/chromium/third_party/icu/scripts/copy_data.sh b/chromium/third_party/icu/scripts/copy_data.sh index edc16771c42..16820e4a7b9 100755 --- a/chromium/third_party/icu/scripts/copy_data.sh +++ b/chromium/third_party/icu/scripts/copy_data.sh @@ -19,6 +19,7 @@ source "${TOPSRC}/scripts/data_common.sh" function copy_common { DATA_PREFIX="data/out/tmp/icudt${VERSION}" + TZRES_PREFIX="data/out/build/icudt${VERSION}l" echo "Generating the big endian data bundle" LD_LIBRARY_PATH=lib bin/icupkg -tb "${DATA_PREFIX}l.dat" "${DATA_PREFIX}b.dat" @@ -29,6 +30,12 @@ function copy_common { cp "${DATA_PREFIX}${endian}.dat" "${TOPSRC}/common/icudt${endian}.dat" done + echo "Copying metaZones.res, timezoneTypes.res, zoneinfo64.res" + for tzfile in metaZones timezoneTypes zoneinfo64 + do + cp "${TZRES_PREFIX}/${tzfile}.res" "${TOPSRC}/tzres/${tzfile}.res" + done + echo "Done with copying pre-built ICU data files." } diff --git a/chromium/third_party/icu/source/i18n/timezone.cpp b/chromium/third_party/icu/source/i18n/timezone.cpp index f129d8b6076..129e6a5f27d 100644 --- a/chromium/third_party/icu/source/i18n/timezone.cpp +++ b/chromium/third_party/icu/source/i18n/timezone.cpp @@ -527,6 +527,11 @@ TimeZone::detectHostTimeZone() // ------------------------------------- +static UMutex *gDefaultZoneMutex() { + static UMutex* m = new UMutex(); + return m; +} + /** * Initialize DEFAULT_ZONE from the system default time zone. * Upon return, DEFAULT_ZONE will not be NULL, unless operator new() @@ -536,6 +541,7 @@ static void U_CALLCONV initDefault() { ucln_i18n_registerCleanup(UCLN_I18N_TIMEZONE, timeZone_cleanup); + Mutex lock(gDefaultZoneMutex()); // If setDefault() has already been called we can skip getting the // default zone information from the system. if (DEFAULT_ZONE != NULL) { @@ -571,7 +577,10 @@ TimeZone* U_EXPORT2 TimeZone::createDefault() { umtx_initOnce(gDefaultZoneInitOnce, initDefault); - return (DEFAULT_ZONE != NULL) ? DEFAULT_ZONE->clone() : NULL; + { + Mutex lock(gDefaultZoneMutex()); + return (DEFAULT_ZONE != NULL) ? DEFAULT_ZONE->clone() : NULL; + } } // ------------------------------------- @@ -581,9 +590,12 @@ TimeZone::adoptDefault(TimeZone* zone) { if (zone != NULL) { - TimeZone *old = DEFAULT_ZONE; - DEFAULT_ZONE = zone; - delete old; + { + Mutex lock(gDefaultZoneMutex()); + TimeZone *old = DEFAULT_ZONE; + DEFAULT_ZONE = zone; + delete old; + } ucln_i18n_registerCleanup(UCLN_I18N_TIMEZONE, timeZone_cleanup); } } diff --git a/chromium/third_party/icu/tzres/metaZones.res b/chromium/third_party/icu/tzres/metaZones.res Binary files differnew file mode 100644 index 00000000000..a39c3ff8e2f --- /dev/null +++ b/chromium/third_party/icu/tzres/metaZones.res diff --git a/chromium/third_party/icu/tzres/timezoneTypes.res b/chromium/third_party/icu/tzres/timezoneTypes.res Binary files differnew file mode 100644 index 00000000000..68cc6204260 --- /dev/null +++ b/chromium/third_party/icu/tzres/timezoneTypes.res diff --git a/chromium/third_party/icu/tzres/zoneinfo64.res b/chromium/third_party/icu/tzres/zoneinfo64.res Binary files differnew file mode 100644 index 00000000000..7e0afd40558 --- /dev/null +++ b/chromium/third_party/icu/tzres/zoneinfo64.res diff --git a/chromium/third_party/skia/src/core/SkRemoteGlyphCache.cpp b/chromium/third_party/skia/src/core/SkRemoteGlyphCache.cpp index 7bcb29a35e9..b12e52058a2 100644 --- a/chromium/third_party/skia/src/core/SkRemoteGlyphCache.cpp +++ b/chromium/third_party/skia/src/core/SkRemoteGlyphCache.cpp @@ -169,7 +169,10 @@ bool read_path(Deserializer* deserializer, SkGlyph* glyph, SkStrike* cache) { uint64_t pathSize = 0u; if (!deserializer->read<uint64_t>(&pathSize)) return false; - if (pathSize == 0u) return true; + if (pathSize == 0u) { + cache->initializePath(glyph, nullptr, 0u); + return true; + } auto* path = deserializer->read(pathSize, kPathAlignment); if (!path) return false; @@ -605,16 +608,14 @@ void SkStrikeServer::SkGlyphCacheState::writeGlyphPath(const SkPackedGlyphID& gl } -// This version of glyphMetrics only adds entries to result if their data need to be sent to the -// GPU process. As a result, empty glyphs will be sent so that the GPU code can lookup the glyph -// and detect that it is empty. +// Be sure to read and understand the comment for prepareForDrawing in SkStrikeInterface.h before +// working on this code. SkSpan<const SkGlyphPos> SkStrikeServer::SkGlyphCacheState::prepareForDrawing( const SkGlyphID glyphIDs[], const SkPoint positions[], size_t n, int maxDimension, SkGlyphPos results[]) { - size_t glyphsToSendCount = 0; for (size_t i = 0; i < n; i++) { SkPoint glyphPos = positions[i]; SkGlyphID glyphID = glyphIDs[i]; @@ -635,10 +636,7 @@ SkSpan<const SkGlyphPos> SkStrikeServer::SkGlyphCacheState::prepareForDrawing( fContext->getMetrics(glyphPtr); if (glyphPtr->maxDimension() <= maxDimension) { - // The mask/SDF will fit in the cache. - // TODO: no need to do this once code base converted over to bulk. - results[glyphsToSendCount++] = {i, glyphPtr, glyphPos}; } else if (glyphPtr->fMaskFormat != SkMask::kARGB32_Format) { // The glyph is too big for the atlas, but it is not color, so it is handled with a @@ -646,13 +644,12 @@ SkSpan<const SkGlyphPos> SkStrikeServer::SkGlyphCacheState::prepareForDrawing( if (glyphPtr->fPathData == nullptr) { // Never checked for a path before. Add the path now. - auto path = const_cast<SkGlyph&>(*glyphPtr).addPath(fContext.get(), &fAlloc); - if (path != nullptr) { + const_cast<SkGlyph&>(*glyphPtr).addPath(fContext.get(), &fAlloc); - // A path was added make sure to send it to the GPU. - fCachedGlyphPaths.add(glyphPtr->getPackedID()); - fPendingGlyphPaths.push_back(glyphPtr->getPackedID()); - } + // Always send the path data, even if its not available, to make sure empty + // paths are not incorrectly assumed to be cache misses. + fCachedGlyphPaths.add(glyphPtr->getPackedID()); + fPendingGlyphPaths.push_back(glyphPtr->getPackedID()); } } else { @@ -666,8 +663,13 @@ SkSpan<const SkGlyphPos> SkStrikeServer::SkGlyphCacheState::prepareForDrawing( fPendingGlyphImages.push_back(packedGlyphID); } + // Each glyph needs to be added as per the contract for prepareForDrawing. + // TODO(herb): check if the empty glyphs need to be added here. They certainly need to be + // sent, but do the need to be processed by the painter? + results[i] = {i, glyphPtr, glyphPos}; } - return SkSpan<const SkGlyphPos>(results, glyphsToSendCount); + + return SkSpan<const SkGlyphPos>{results, n}; } // SkStrikeClient ----------------------------------------- @@ -694,10 +696,10 @@ SkStrikeClient::SkStrikeClient(sk_sp<DiscardableHandleManager> discardableManage SkStrikeClient::~SkStrikeClient() = default; -#define READ_FAILURE \ - { \ - SkDebugf("Bad font data serialization"); \ - return false; \ +#define READ_FAILURE \ + { \ + SkDebugf("Bad font data serialization line: %d", __LINE__); \ + return false; \ } static bool readGlyph(SkTLazy<SkGlyph>& glyph, Deserializer* deserializer) { diff --git a/chromium/third_party/skia/src/core/SkStrike.cpp b/chromium/third_party/skia/src/core/SkStrike.cpp index e248e6f52c7..09ab883dedd 100644 --- a/chromium/third_party/skia/src/core/SkStrike.cpp +++ b/chromium/third_party/skia/src/core/SkStrike.cpp @@ -183,6 +183,8 @@ bool SkStrike::initializePath(SkGlyph* glyph, const volatile void* data, size_t if (glyph->fWidth) { SkGlyph::PathData* pathData = fAlloc.make<SkGlyph::PathData>(); glyph->fPathData = pathData; + if (size == 0u) return true; + auto path = skstd::make_unique<SkPath>(); if (!pathData->fPath.readFromMemory(const_cast<const void*>(data), size)) { return false; @@ -254,7 +256,6 @@ SkSpan<const SkGlyphPos> SkStrike::prepareForDrawing(const SkGlyphID glyphIDs[], // The out of atlas glyph is not color so we can draw it using paths. this->findPath(glyph); } else { - // This will be handled by the fallback strike. SkASSERT(glyph.maxDimension() > maxDimension && glyph.fMaskFormat == SkMask::kARGB32_Format); diff --git a/chromium/third_party/webrtc/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc b/chromium/third_party/webrtc/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc index 95ba2660a14..5f2f15aa385 100644 --- a/chromium/third_party/webrtc/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc +++ b/chromium/third_party/webrtc/modules/video_coding/codecs/vp9/test/vp9_impl_unittest.cc @@ -804,7 +804,7 @@ TEST_F(TestVp9Impl, EnablingNewLayerIsDelayedInScreenshareAndAddsSsInfo) { codec_settings_.maxFramerate = 30; ConfigureSvc(num_spatial_layers); codec_settings_.spatialLayers[0].maxFramerate = 5.0; - // use 30 for the SL 1 instead of 5, so even if SL 0 frame is dropped due to + // use 30 for the SL 1 instead of 10, so even if SL 0 frame is dropped due to // framerate capping we would still get back at least a middle layer. It // simplifies the test. codec_settings_.spatialLayers[1].maxFramerate = 30.0; @@ -868,6 +868,93 @@ TEST_F(TestVp9Impl, EnablingNewLayerIsDelayedInScreenshareAndAddsSsInfo) { EXPECT_TRUE(codec_specific_info[0].codecSpecific.VP9.ss_data_available); } +TEST_F(TestVp9Impl, ScreenshareFrameDropping) { + const int num_spatial_layers = 3; + const int num_frames_to_detect_drops = 2; + + codec_settings_.maxFramerate = 30; + ConfigureSvc(num_spatial_layers); + // use 30 for the SL0 and SL1 because it simplifies the test. + codec_settings_.spatialLayers[0].maxFramerate = 30.0; + codec_settings_.spatialLayers[1].maxFramerate = 30.0; + codec_settings_.spatialLayers[2].maxFramerate = 30.0; + codec_settings_.VP9()->frameDroppingOn = true; + codec_settings_.mode = VideoCodecMode::kScreensharing; + codec_settings_.VP9()->interLayerPred = InterLayerPredMode::kOn; + codec_settings_.VP9()->flexibleMode = true; + EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, + encoder_->InitEncode(&codec_settings_, 1 /* number of cores */, + 0 /* max payload size (unused) */)); + + // Enable all but the last layer. + VideoBitrateAllocation bitrate_allocation; + // Very low bitrate for the lowest spatial layer to ensure rate-control drops. + bitrate_allocation.SetBitrate(0, 0, 1000); + bitrate_allocation.SetBitrate( + 1, 0, codec_settings_.spatialLayers[1].targetBitrate * 1000); + // Disable highest layer. + bitrate_allocation.SetBitrate(2, 0, 0); + + encoder_->SetRates(VideoEncoder::RateControlParameters( + bitrate_allocation, codec_settings_.maxFramerate)); + + bool frame_dropped = false; + // Encode enough frames to force drop due to rate-control. + for (size_t frame_num = 0; frame_num < num_frames_to_detect_drops; + ++frame_num) { + SetWaitForEncodedFramesThreshold(1); + EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, + encoder_->Encode(*NextInputFrame(), nullptr)); + std::vector<EncodedImage> encoded_frames; + std::vector<CodecSpecificInfo> codec_specific_info; + ASSERT_TRUE(WaitForEncodedFrames(&encoded_frames, &codec_specific_info)); + EXPECT_LE(encoded_frames.size(), 2u); + EXPECT_GE(encoded_frames.size(), 1u); + if (encoded_frames.size() == 1) { + frame_dropped = true; + // Dropped frame is on the SL0. + EXPECT_EQ(encoded_frames[0].SpatialIndex(), 1); + } + } + EXPECT_TRUE(frame_dropped); + + // Enable the last layer. + bitrate_allocation.SetBitrate( + 2, 0, codec_settings_.spatialLayers[2].targetBitrate * 1000); + encoder_->SetRates(VideoEncoder::RateControlParameters( + bitrate_allocation, codec_settings_.maxFramerate)); + SetWaitForEncodedFramesThreshold(1); + EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, + encoder_->Encode(*NextInputFrame(), nullptr)); + std::vector<EncodedImage> encoded_frames; + std::vector<CodecSpecificInfo> codec_specific_info; + ASSERT_TRUE(WaitForEncodedFrames(&encoded_frames, &codec_specific_info)); + // No drop allowed. + EXPECT_EQ(encoded_frames.size(), 3u); + + // Verify that frame-dropping is re-enabled back. + frame_dropped = false; + // Encode enough frames to force drop due to rate-control. + for (size_t frame_num = 0; frame_num < num_frames_to_detect_drops; + ++frame_num) { + SetWaitForEncodedFramesThreshold(1); + EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, + encoder_->Encode(*NextInputFrame(), nullptr)); + std::vector<EncodedImage> encoded_frames; + std::vector<CodecSpecificInfo> codec_specific_info; + ASSERT_TRUE(WaitForEncodedFrames(&encoded_frames, &codec_specific_info)); + EXPECT_LE(encoded_frames.size(), 3u); + EXPECT_GE(encoded_frames.size(), 2u); + if (encoded_frames.size() == 2) { + frame_dropped = true; + // Dropped frame is on the SL0. + EXPECT_EQ(encoded_frames[0].SpatialIndex(), 1); + EXPECT_EQ(encoded_frames[1].SpatialIndex(), 2); + } + } + EXPECT_TRUE(frame_dropped); +} + TEST_F(TestVp9Impl, RemovingLayerIsNotDelayedInScreenshareAndAddsSsInfo) { const size_t num_spatial_layers = 3; // Chosen by hand, the 2nd frame is dropped with configured per-layer max @@ -1341,47 +1428,6 @@ TEST_F(TestVp9ImplFrameDropping, DifferentFrameratePerSpatialLayer) { } } -TEST_F(TestVp9ImplFrameDropping, LayerMaxFramerateIsCappedByCodecMaxFramerate) { - const float input_framerate_fps = 30.0; - const float layer_max_framerate_fps = 30.0; - const uint32_t codec_max_framerate_fps = layer_max_framerate_fps / 3; - const size_t video_duration_secs = 3; - const size_t num_input_frames = video_duration_secs * input_framerate_fps; - - VideoBitrateAllocation bitrate_allocation; - codec_settings_.spatialLayers[0].width = codec_settings_.width; - codec_settings_.spatialLayers[0].height = codec_settings_.height; - codec_settings_.spatialLayers[0].maxFramerate = layer_max_framerate_fps; - codec_settings_.spatialLayers[0].minBitrate = codec_settings_.startBitrate; - codec_settings_.spatialLayers[0].maxBitrate = codec_settings_.startBitrate; - codec_settings_.spatialLayers[0].targetBitrate = codec_settings_.startBitrate; - codec_settings_.spatialLayers[0].active = true; - - bitrate_allocation.SetBitrate( - 0, 0, codec_settings_.spatialLayers[0].targetBitrate * 1000); - - EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, - encoder_->InitEncode(&codec_settings_, 1 /* number of cores */, - 0 /* max payload size (unused) */)); - - encoder_->SetRates(VideoEncoder::RateControlParameters( - bitrate_allocation, codec_max_framerate_fps)); - - VideoFrame* input_frame = NextInputFrame(); - for (size_t frame_num = 0; frame_num < num_input_frames; ++frame_num) { - EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, encoder_->Encode(*input_frame, nullptr)); - const size_t timestamp = input_frame->timestamp() + - kVideoPayloadTypeFrequency / input_framerate_fps; - input_frame->set_timestamp(static_cast<uint32_t>(timestamp)); - } - - const size_t num_encoded_frames = GetNumEncodedFrames(); - const float encoded_framerate_fps = num_encoded_frames / video_duration_secs; - const float max_framerate_error_fps = codec_max_framerate_fps * 0.1f; - EXPECT_NEAR(encoded_framerate_fps, codec_max_framerate_fps, - max_framerate_error_fps); -} - class TestVp9ImplProfile2 : public TestVp9Impl { protected: void SetUp() override { diff --git a/chromium/third_party/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc b/chromium/third_party/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc index abb54b6b932..a09a7d944b3 100644 --- a/chromium/third_party/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc +++ b/chromium/third_party/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc @@ -54,7 +54,7 @@ constexpr double kLowRateFactor = 1.0; constexpr double kHighRateFactor = 2.0; // These settings correspond to the settings in vpx_codec_enc_cfg. -struct Vp8RateSettings { +struct Vp9RateSettings { uint32_t rc_undershoot_pct; uint32_t rc_overshoot_pct; uint32_t rc_buf_sz; @@ -161,9 +161,9 @@ uint32_t Interpolate(uint32_t low, return static_cast<uint32_t>(((1.0 - factor) * low) + (factor * high) + 0.5); } -Vp8RateSettings GetRateSettings(double bandwidth_headroom_factor) { - static const Vp8RateSettings low_settings{1000u, 0u, 100u, 30u, 40u}; - static const Vp8RateSettings high_settings{100u, 15u, 1000u, 600u, 5u}; +Vp9RateSettings GetRateSettings(double bandwidth_headroom_factor) { + static const Vp9RateSettings low_settings{100u, 0u, 100u, 33u, 40u}; + static const Vp9RateSettings high_settings{50u, 50u, 1000u, 700u, 5u}; if (bandwidth_headroom_factor <= kLowRateFactor) { return low_settings; @@ -171,7 +171,7 @@ Vp8RateSettings GetRateSettings(double bandwidth_headroom_factor) { return high_settings; } - Vp8RateSettings settings; + Vp9RateSettings settings; settings.rc_undershoot_pct = Interpolate(low_settings.rc_undershoot_pct, high_settings.rc_undershoot_pct, bandwidth_headroom_factor); @@ -191,7 +191,7 @@ Vp8RateSettings GetRateSettings(double bandwidth_headroom_factor) { } void UpdateRateSettings(vpx_codec_enc_cfg_t* config, - const Vp8RateSettings& new_settings) { + const Vp9RateSettings& new_settings) { config->rc_undershoot_pct = new_settings.rc_undershoot_pct; config->rc_overshoot_pct = new_settings.rc_overshoot_pct; config->rc_buf_sz = new_settings.rc_buf_sz; @@ -316,8 +316,7 @@ bool VP9EncoderImpl::SetSvcRates( } framerate_controller_[sl_idx].SetTargetRate( - std::min(static_cast<float>(codec_.maxFramerate), - codec_.spatialLayers[sl_idx].maxFramerate)); + codec_.spatialLayers[sl_idx].maxFramerate); } } else { float rate_ratio[VPX_MAX_LAYERS] = {0}; @@ -535,24 +534,18 @@ int VP9EncoderImpl::InitEncode(const VideoCodec* inst, inter_layer_pred_ = inst->VP9().interLayerPred; - different_framerates_used_ = false; - for (size_t sl_idx = 1; sl_idx < num_spatial_layers_; ++sl_idx) { - if (std::abs(codec_.spatialLayers[sl_idx].maxFramerate - - codec_.spatialLayers[0].maxFramerate) > 1e-9) { - different_framerates_used_ = true; - } - } - - if (different_framerates_used_ && !is_flexible_mode_) { - RTC_LOG(LS_ERROR) << "Flexible mode required for different framerates on " - "different spatial layers"; + if (num_spatial_layers_ > 1 && + codec_.mode == VideoCodecMode::kScreensharing && !is_flexible_mode_) { + RTC_LOG(LS_ERROR) << "Flexible mode is required for screenshare with " + "several spatial layers"; return WEBRTC_VIDEO_CODEC_ERR_PARAMETER; } // External reference control is required for different frame rate on spatial // layers because libvpx generates rtp incompatible references in this case. external_ref_control_ = field_trial::IsEnabled("WebRTC-Vp9ExternalRefCtrl") || - different_framerates_used_ || + (num_spatial_layers_ > 1 && + codec_.mode == VideoCodecMode::kScreensharing) || inter_layer_pred_ == InterLayerPredMode::kOn; if (num_temporal_layers_ == 1) { @@ -589,7 +582,8 @@ int VP9EncoderImpl::InitEncode(const VideoCodec* inst, if (external_ref_control_) { config_->temporal_layering_mode = VP9E_TEMPORAL_LAYERING_MODE_BYPASS; - if (num_temporal_layers_ > 1 && different_framerates_used_) { + if (num_temporal_layers_ > 1 && num_spatial_layers_ > 1 && + codec_.mode == VideoCodecMode::kScreensharing) { // External reference control for several temporal layers with different // frame rates on spatial layers is not implemented yet. return WEBRTC_VIDEO_CODEC_ERR_PARAMETER; @@ -717,18 +711,35 @@ int VP9EncoderImpl::InitAndSetControlSettings(const VideoCodec* inst) { RTC_NOTREACHED(); } - // Configure encoder to drop entire superframe whenever it needs to drop - // a layer. This mode is prefered over per-layer dropping which causes - // quality flickering and is not compatible with RTP non-flexible mode. - vpx_svc_frame_drop_t svc_drop_frame; - memset(&svc_drop_frame, 0, sizeof(svc_drop_frame)); - svc_drop_frame.framedrop_mode = - full_superframe_drop_ ? FULL_SUPERFRAME_DROP : CONSTRAINED_LAYER_DROP; - svc_drop_frame.max_consec_drop = std::numeric_limits<int>::max(); - for (size_t i = 0; i < num_spatial_layers_; ++i) { - svc_drop_frame.framedrop_thresh[i] = config_->rc_dropframe_thresh; + memset(&svc_drop_frame_, 0, sizeof(svc_drop_frame_)); + dropping_only_base_layer_ = inter_layer_pred_ == InterLayerPredMode::kOn && + codec_.mode == VideoCodecMode::kScreensharing && + num_spatial_layers_ > 1; + if (dropping_only_base_layer_) { + // Screenshare dropping mode: only the base spatial layer + // can be dropped and it doesn't affect other spatial layers. + // This mode is preferable because base layer has low bitrate targets + // and more likely to drop frames. It shouldn't reduce framerate on other + // layers. + svc_drop_frame_.framedrop_mode = LAYER_DROP; + svc_drop_frame_.max_consec_drop = 5; + svc_drop_frame_.framedrop_thresh[0] = config_->rc_dropframe_thresh; + for (size_t i = 1; i < num_spatial_layers_; ++i) { + svc_drop_frame_.framedrop_thresh[i] = 0; + } + } else { + // Configure encoder to drop entire superframe whenever it needs to drop + // a layer. This mode is preferred over per-layer dropping which causes + // quality flickering and is not compatible with RTP non-flexible mode. + svc_drop_frame_.framedrop_mode = + full_superframe_drop_ ? FULL_SUPERFRAME_DROP : CONSTRAINED_LAYER_DROP; + svc_drop_frame_.max_consec_drop = std::numeric_limits<int>::max(); + for (size_t i = 0; i < num_spatial_layers_; ++i) { + svc_drop_frame_.framedrop_thresh[i] = config_->rc_dropframe_thresh; + } } - vpx_codec_control(encoder_, VP9E_SET_SVC_FRAME_DROP_LAYER, &svc_drop_frame); + vpx_codec_control(encoder_, VP9E_SET_SVC_FRAME_DROP_LAYER, + &svc_drop_frame_); } // Register callback for getting each spatial layer. @@ -894,9 +905,22 @@ int VP9EncoderImpl::Encode(const VideoFrame& input_image, if (less_layers_requested || more_layers_requested) { ss_info_needed_ = true; } + if (more_layers_requested && !force_key_frame_) { + // Prohibit drop of all layers for the next frame, so newly enabled + // layer would have a valid spatial reference. + for (size_t i = 0; i < num_spatial_layers_; ++i) { + svc_drop_frame_.framedrop_thresh[i] = 0; + } + } } } + if (num_spatial_layers_ > 1) { + // Update frame dropping settings as they may change on per-frame basis. + vpx_codec_control(encoder_, VP9E_SET_SVC_FRAME_DROP_LAYER, + &svc_drop_frame_); + } + if (vpx_codec_enc_config_set(encoder_, config_)) { return WEBRTC_VIDEO_CODEC_ERROR; } @@ -964,7 +988,8 @@ int VP9EncoderImpl::Encode(const VideoFrame& input_image, if (VideoCodecMode::kScreensharing == codec_.mode) { for (uint8_t sl_idx = 0; sl_idx < num_active_spatial_layers_; ++sl_idx) { ref_config.duration[sl_idx] = static_cast<int64_t>( - 90000 / framerate_controller_[sl_idx].GetTargetRate()); + 90000 / (std::min(static_cast<float>(codec_.maxFramerate), + framerate_controller_[sl_idx].GetTargetRate()))); } } @@ -983,8 +1008,9 @@ int VP9EncoderImpl::Encode(const VideoFrame& input_image, RTC_DCHECK_GE(framerate_controller_.size(), num_active_spatial_layers_); float target_framerate_fps = (codec_.mode == VideoCodecMode::kScreensharing) - ? framerate_controller_[num_active_spatial_layers_ - 1] - .GetTargetRate() + ? std::min(static_cast<float>(codec_.maxFramerate), + framerate_controller_[num_active_spatial_layers_ - 1] + .GetTargetRate()) : codec_.maxFramerate; uint32_t duration = static_cast<uint32_t>(90000 / target_framerate_fps); const vpx_codec_err_t rv = vpx_codec_encode(encoder_, raw_, timestamp_, @@ -1199,6 +1225,8 @@ void VP9EncoderImpl::FillReferenceIndices(const vpx_codec_cx_pkt& pkt, // It is safe to ignore this requirement if inter-layer prediction is // enabled for all frames when all base frames are relayed to receiver. RTC_DCHECK_EQ(ref_buf.spatial_layer_id, layer_id.spatial_layer_id); + } else { + RTC_DCHECK_LE(ref_buf.spatial_layer_id, layer_id.spatial_layer_id); } RTC_DCHECK_LE(ref_buf.temporal_layer_id, layer_id.temporal_layer_id); @@ -1318,7 +1346,7 @@ vpx_svc_ref_frame_config_t VP9EncoderImpl::SetReferences( const bool same_spatial_layer = ref_buf_[buf_idx].spatial_layer_id == sl_idx; bool correct_pid = false; - if (different_framerates_used_) { + if (is_flexible_mode_) { correct_pid = pid_diff < kMaxAllowedPidDIff; } else { // Below code assumes single temporal referecence. @@ -1442,6 +1470,16 @@ int VP9EncoderImpl::GetEncodedLayerFrame(const vpx_codec_cx_pkt* pkt) { void VP9EncoderImpl::DeliverBufferedFrame(bool end_of_picture) { if (encoded_image_.size() > 0) { + if (num_spatial_layers_ > 1) { + // Restore frame dropping settings, as dropping may be temporary forbidden + // due to dynamically enabled layers. + svc_drop_frame_.framedrop_thresh[0] = config_->rc_dropframe_thresh; + for (size_t i = 1; i < num_spatial_layers_; ++i) { + svc_drop_frame_.framedrop_thresh[i] = + dropping_only_base_layer_ ? 0 : config_->rc_dropframe_thresh; + } + } + codec_specific_.codecSpecific.VP9.end_of_picture = end_of_picture; // No data partitioning in VP9, so 1 partition only. @@ -1519,7 +1557,8 @@ size_t VP9EncoderImpl::SteadyStateSize(int sid, int tid) { const size_t bitrate_bps = current_bitrate_allocation_.GetBitrate( sid, tid == kNoTemporalIdx ? 0 : tid); const float fps = (codec_.mode == VideoCodecMode::kScreensharing) - ? framerate_controller_[sid].GetTargetRate() + ? std::min(static_cast<float>(codec_.maxFramerate), + framerate_controller_[sid].GetTargetRate()) : codec_.maxFramerate; return static_cast<size_t>( bitrate_bps / (8 * fps) * diff --git a/chromium/third_party/webrtc/modules/video_coding/codecs/vp9/vp9_impl.h b/chromium/third_party/webrtc/modules/video_coding/codecs/vp9/vp9_impl.h index acc03bff5c9..fb195a7c001 100644 --- a/chromium/third_party/webrtc/modules/video_coding/codecs/vp9/vp9_impl.h +++ b/chromium/third_party/webrtc/modules/video_coding/codecs/vp9/vp9_impl.h @@ -113,7 +113,6 @@ class VP9EncoderImpl : public VP9Encoder { GofInfoVP9 gof_; // Contains each frame's temporal information for // non-flexible mode. bool force_key_frame_; - bool different_framerates_used_; size_t pics_since_key_; uint8_t num_temporal_layers_; uint8_t num_spatial_layers_; // Number of configured SLs @@ -125,6 +124,8 @@ class VP9EncoderImpl : public VP9Encoder { const bool trusted_rate_controller_; const bool dynamic_rate_settings_; const bool full_superframe_drop_; + bool dropping_only_base_layer_; + vpx_svc_frame_drop_t svc_drop_frame_; bool first_frame_in_picture_; VideoBitrateAllocation current_bitrate_allocation_; absl::optional<RateControlParameters> requested_rate_settings_; diff --git a/chromium/third_party/webrtc/pc/jsep_session_description.cc b/chromium/third_party/webrtc/pc/jsep_session_description.cc index 90b12a4125b..d9c1fad94d1 100644 --- a/chromium/third_party/webrtc/pc/jsep_session_description.cc +++ b/chromium/third_party/webrtc/pc/jsep_session_description.cc @@ -207,7 +207,7 @@ bool JsepSessionDescription::Initialize( bool JsepSessionDescription::AddCandidate( const IceCandidateInterface* candidate) { - if (!candidate || candidate->sdp_mline_index() < 0) + if (!candidate) return false; size_t mediasection_index = 0; if (!GetMediasectionIndex(candidate, &mediasection_index)) { @@ -291,7 +291,18 @@ bool JsepSessionDescription::GetMediasectionIndex( if (!candidate || !index) { return false; } - *index = static_cast<size_t>(candidate->sdp_mline_index()); + + // If the candidate has no valid mline index or sdp_mid, it is impossible + // to find a match. + if (candidate->sdp_mid().empty() && + (candidate->sdp_mline_index() < 0 || + static_cast<size_t>(candidate->sdp_mline_index()) >= + description_->contents().size())) { + return false; + } + + if (candidate->sdp_mline_index() >= 0) + *index = static_cast<size_t>(candidate->sdp_mline_index()); if (description_ && !candidate->sdp_mid().empty()) { bool found = false; // Try to match the sdp_mid with content name. diff --git a/chromium/third_party/webrtc/pc/peer_connection.cc b/chromium/third_party/webrtc/pc/peer_connection.cc index 30fbf5c11ca..81034b91fc3 100644 --- a/chromium/third_party/webrtc/pc/peer_connection.cc +++ b/chromium/third_party/webrtc/pc/peer_connection.cc @@ -6185,21 +6185,18 @@ bool PeerConnection::UseCandidatesInSessionDescription( } bool PeerConnection::UseCandidate(const IceCandidateInterface* candidate) { - size_t mediacontent_index = static_cast<size_t>(candidate->sdp_mline_index()); - size_t remote_content_size = - remote_description()->description()->contents().size(); - if (mediacontent_index >= remote_content_size) { - RTC_LOG(LS_ERROR) << "UseCandidate: Invalid candidate media index."; + RTCErrorOr<const cricket::ContentInfo*> result = + FindContentInfo(remote_description(), candidate); + if (!result.ok()) { + RTC_LOG(LS_ERROR) << "UseCandidate: Invalid candidate. " + << result.error().message(); return false; } - - cricket::ContentInfo content = - remote_description()->description()->contents()[mediacontent_index]; std::vector<cricket::Candidate> candidates; candidates.push_back(candidate->candidate()); // Invoking BaseSession method to handle remote candidates. - RTCError error = - transport_controller_->AddRemoteCandidates(content.name, candidates); + RTCError error = transport_controller_->AddRemoteCandidates( + result.value()->name, candidates); if (error.ok()) { // Candidates successfully submitted for checking. if (ice_connection_state_ == PeerConnectionInterface::kIceConnectionNew || @@ -6222,6 +6219,42 @@ bool PeerConnection::UseCandidate(const IceCandidateInterface* candidate) { return true; } +RTCErrorOr<const cricket::ContentInfo*> PeerConnection::FindContentInfo( + const SessionDescriptionInterface* description, + const IceCandidateInterface* candidate) { + if (candidate->sdp_mline_index() >= 0) { + size_t mediacontent_index = + static_cast<size_t>(candidate->sdp_mline_index()); + size_t content_size = description->description()->contents().size(); + if (mediacontent_index < content_size) { + return &description->description()->contents()[mediacontent_index]; + } else { + return RTCError(RTCErrorType::INVALID_RANGE, + "Media line index (" + + rtc::ToString(candidate->sdp_mline_index()) + + ") out of range (number of mlines: " + + rtc::ToString(content_size) + ")."); + } + } else if (!candidate->sdp_mid().empty()) { + auto& contents = description->description()->contents(); + auto it = absl::c_find_if( + contents, [candidate](const cricket::ContentInfo& content_info) { + return content_info.mid() == candidate->sdp_mid(); + }); + if (it == contents.end()) { + return RTCError( + RTCErrorType::INVALID_PARAMETER, + "Mid " + candidate->sdp_mid() + + " specified but no media section with that mid found."); + } else { + return &*it; + } + } + + return RTCError(RTCErrorType::INVALID_PARAMETER, + "Neither sdp_mline_index nor sdp_mid specified."); +} + void PeerConnection::RemoveUnusedChannels(const SessionDescription* desc) { // Destroy video channel first since it may have a pointer to the // voice channel. @@ -6850,26 +6883,18 @@ bool PeerConnection::ReadyToUseRemoteCandidate( return false; } - size_t mediacontent_index = static_cast<size_t>(candidate->sdp_mline_index()); - size_t remote_content_size = - current_remote_desc->description()->contents().size(); - if (mediacontent_index >= remote_content_size) { - RTC_LOG(LS_ERROR) - << "ReadyToUseRemoteCandidate: Invalid candidate media index " - << mediacontent_index; + RTCErrorOr<const cricket::ContentInfo*> result = + FindContentInfo(current_remote_desc, candidate); + if (!result.ok()) { + RTC_LOG(LS_ERROR) << "ReadyToUseRemoteCandidate: Invalid candidate. " + << result.error().message(); *valid = false; return false; } - cricket::ContentInfo content = - current_remote_desc->description()->contents()[mediacontent_index]; - - const std::string transport_name = GetTransportName(content.name); - if (transport_name.empty()) { - return false; - } - return true; + std::string transport_name = GetTransportName(result.value()->name); + return !transport_name.empty(); } bool PeerConnection::SrtpRequired() const { diff --git a/chromium/third_party/webrtc/pc/peer_connection.h b/chromium/third_party/webrtc/pc/peer_connection.h index 39cb8674061..79408d4c0fd 100644 --- a/chromium/third_party/webrtc/pc/peer_connection.h +++ b/chromium/third_party/webrtc/pc/peer_connection.h @@ -911,6 +911,9 @@ class PeerConnection : public PeerConnectionInternal, // Uses |candidate| in this session. bool UseCandidate(const IceCandidateInterface* candidate) RTC_RUN_ON(signaling_thread()); + RTCErrorOr<const cricket::ContentInfo*> FindContentInfo( + const SessionDescriptionInterface* description, + const IceCandidateInterface* candidate) RTC_RUN_ON(signaling_thread()); // Deletes the corresponding channel of contents that don't exist in |desc|. // |desc| can be null. This means that all channels are deleted. void RemoveUnusedChannels(const cricket::SessionDescription* desc) diff --git a/chromium/third_party/webrtc/pc/peer_connection_ice_unittest.cc b/chromium/third_party/webrtc/pc/peer_connection_ice_unittest.cc index 03c11283bbc..afc859434f1 100644 --- a/chromium/third_party/webrtc/pc/peer_connection_ice_unittest.cc +++ b/chromium/third_party/webrtc/pc/peer_connection_ice_unittest.cc @@ -58,7 +58,7 @@ class PeerConnectionWrapperForIceTest : public PeerConnectionWrapper { const auto& first_content = desc->contents()[0]; candidate->set_transport_name(first_content.name); std::unique_ptr<IceCandidateInterface> jsep_candidate = - CreateIceCandidate(first_content.name, 0, *candidate); + CreateIceCandidate(first_content.name, -1, *candidate); return pc()->AddIceCandidate(jsep_candidate.get()); } diff --git a/chromium/third_party/webrtc/video/video_quality_test.cc b/chromium/third_party/webrtc/video/video_quality_test.cc index 10f96996011..00a1ff3e4cf 100644 --- a/chromium/third_party/webrtc/video/video_quality_test.cc +++ b/chromium/third_party/webrtc/video/video_quality_test.cc @@ -822,7 +822,7 @@ void VideoQualityTest::SetupVideo(Transport* send_transport, params_.ss[video_idx].num_spatial_layers); vp9_settings.interLayerPred = params_.ss[video_idx].inter_layer_pred; // High FPS vp9 screenshare requires flexible mode. - if (params_.video[video_idx].fps > 5) { + if (params_.ss[video_idx].num_spatial_layers > 1) { vp9_settings.flexibleMode = true; } video_encoder_configs_[video_idx].encoder_specific_settings = diff --git a/chromium/tools/metrics/histograms/enums.xml b/chromium/tools/metrics/histograms/enums.xml index 691ce4072ca..e6ecb2ff8ef 100644 --- a/chromium/tools/metrics/histograms/enums.xml +++ b/chromium/tools/metrics/histograms/enums.xml @@ -1746,6 +1746,19 @@ Unknown properties are collapsed to zero. --> </int> </enum> +<enum name="AndroidWebViewSslErrorType"> + <int value="0" label="SSL_NOTYETVALID">The certificate is not yet valid.</int> + <int value="1" label="SSL_EXPIRED">The certificate has expired.</int> + <int value="2" label="SSL_IDMISMATCH">Hostname mismatch.</int> + <int value="3" label="SSL_UNTRUSTED"> + The certificate authority is not trusted. + </int> + <int value="4" label="SSL_DATE_INVALID"> + The date of the certificate is invalid. + </int> + <int value="5" label="SSL_INVALID">A generic error occurred.</int> +</enum> + <enum name="AndroidWebViewVariationsEnableState"> <int value="0" label="DEFAULT_ENABLED"/> <int value="1" label="CONTROL_DISABLED"/> @@ -32277,6 +32290,7 @@ Called by update_gpu_driver_bug_workaround_entries.py.--> </enum> <enum name="LoginCustomFlags"> + <int value="-2146979021" label="OmniboxMaxURLMatches:enabled"/> <int value="-2146832142" label="SyncPseudoUSSSearchEngines:enabled"/> <int value="-2146613579" label="V8Future:disabled"/> <int value="-2145472146" label="OfflinePagesResourceBasedSnapshot:disabled"/> @@ -32395,6 +32409,8 @@ Called by update_gpu_driver_bug_workaround_entries.py.--> <int value="-1999892428" label="force-ui-direction"/> <int value="-1999617045" label="PDFAnnotations:disabled"/> <int value="-1998927516" label="enable-md-settings"/> + <int value="-1996233283" + label="OmniboxGroupSuggestionsBySearchVsUrl:enabled"/> <int value="-1992319691" label="AvoidFlashBetweenNavigation:enabled"/> <int value="-1989747818" label="TabStripKeyboardFocus:disabled"/> <int value="-1985239289" label="AutofillRichMetadataQueries:enabled"/> @@ -33386,7 +33402,8 @@ from previous Chrome versions. <int value="-506366023" label="VizHitTest:enabled"/> <int value="-505679399" label="FontCacheScaling:enabled"/> <int value="-503430431" label="XRSandbox:enabled"/> - - + <int value="-499186481" + label="OmniboxGroupSuggestionsBySearchVsUrl:disabled"/> <int value="-498740735" label="ArcUsbHost:disabled"/> <int value="-498463128" label="MacSystemShareMenu:enabled"/> <int value="-496119023" label="WebXR:enabled"/> @@ -34927,6 +34944,7 @@ from previous Chrome versions. <int value="1949908940" label="disable-zip-archiver-unpacker"/> <int value="1951466218" label="enable-data-reduction-proxy-lite-page"/> <int value="1951645673" label="PasswordsKeyboardAccessory:disabled"/> + <int value="1955238689" label="OmniboxMaxURLMatches:disabled"/> <int value="1957273171" label="PageAlmostIdle:disabled"/> <int value="1957358530" label="ContextualSearchSecondTap:enabled"/> <int value="1957472162" diff --git a/chromium/tools/metrics/histograms/histograms.xml b/chromium/tools/metrics/histograms/histograms.xml index f1dfc9a49bd..ef59ee61763 100644 --- a/chromium/tools/metrics/histograms/histograms.xml +++ b/chromium/tools/metrics/histograms/histograms.xml @@ -3298,6 +3298,15 @@ uploading your change for review. </summary> </histogram> +<histogram name="Android.WebView.onReceivedSslError.ErrorCode" + enum="AndroidWebViewSslErrorType" expires_after="2020-05-08"> + <owner>laisminchillo@chromium.org</owner> + <owner>timvolodine@chromium.org</owner> + <summary> + The WebViewClient SSL error code as received by onReceivedSslError. + </summary> +</histogram> + <histogram name="Android.WebView.onSafeBrowsingHit.ThreatType" enum="AndroidWebViewClientSafeBrowsingThreatType" expires_after="2020-04-24"> @@ -150415,6 +150424,7 @@ should be kept until we use this API. --> <suffix name="popular_baked_in" label="Baked-in, popular suggestions."/> <suffix name="popular_fetched" label="Non-personalized, popular suggestions (fetched from the server)."/> + <suffix name="search_page" label="Google Search page"/> <suffix name="server" label="Suggestions coming from the server."/> <suffix name="server0"> <obsolete> diff --git a/chromium/ui/accessibility/ax_position.h b/chromium/ui/accessibility/ax_position.h index 10b0795a6e6..02d5824a260 100644 --- a/chromium/ui/accessibility/ax_position.h +++ b/chromium/ui/accessibility/ax_position.h @@ -639,6 +639,19 @@ class AXPosition { AXPositionInstance parent_position = CreateTextPosition( tree_id, parent_id, parent_offset, parent_affinity); + if (parent_position->IsNullPosition()) { + // Workaround: When the autofill feature populates a text field, it + // doesn't immediately update its value, which causes the text inside + // the user-agent shadow DOM to be different than the text in the text + // field itself. As a result, the parent_offset calculated above might + // appear to be temporarily invalid. + // TODO(nektar): Fix this better by ensuring that the text field's + // hypertext is always kept up to date. + parent_position = + CreateTextPosition(tree_id, parent_id, 0 /* text_offset */, + ax::mojom::TextAffinity::kDownstream); + } + // We check if the parent position has introduced ambiguity as to // whether it refers to the end of the current or the start of the next // line. We do this check by creating the parent position and testing if diff --git a/chromium/ui/base/ime/init/input_method_factory.cc b/chromium/ui/base/ime/init/input_method_factory.cc index 51d7f7ff545..15147aa7045 100644 --- a/chromium/ui/base/ime/init/input_method_factory.cc +++ b/chromium/ui/base/ime/init/input_method_factory.cc @@ -61,7 +61,7 @@ std::unique_ptr<InputMethod> CreateInputMethod( return std::make_unique<InputMethodChromeOS>(delegate); #elif defined(OS_WIN) if (base::FeatureList::IsEnabled(features::kTSFImeSupport) && - base::win::GetVersion() > base::win::VERSION_WIN7) { + base::win::GetVersion() >= base::win::VERSION_WIN10_RS2) { return std::make_unique<InputMethodWinTSF>(delegate, widget); } return std::make_unique<InputMethodWinImm32>(delegate, widget); diff --git a/chromium/ui/base/ime/win/input_method_win_tsf.cc b/chromium/ui/base/ime/win/input_method_win_tsf.cc index 5eff60756ee..972945e6b00 100644 --- a/chromium/ui/base/ime/win/input_method_win_tsf.cc +++ b/chromium/ui/base/ime/win/input_method_win_tsf.cc @@ -129,6 +129,14 @@ void InputMethodWinTSF::DetachTextInputClient(TextInputClient* client) { ui::TSFBridge::GetInstance()->RemoveFocusedClient(client); } +bool InputMethodWinTSF::IsInputLocaleCJK() const { + if (!ui::TSFBridge::GetInstance()) { + return false; + } + + return ui::TSFBridge::GetInstance()->IsInputLanguageCJK(); +} + bool InputMethodWinTSF::IsCandidatePopupOpen() const { return tsf_event_observer_->IsCandidatePopupOpen(); } diff --git a/chromium/ui/base/ime/win/input_method_win_tsf.h b/chromium/ui/base/ime/win/input_method_win_tsf.h index b04867d627b..9fcf170142b 100644 --- a/chromium/ui/base/ime/win/input_method_win_tsf.h +++ b/chromium/ui/base/ime/win/input_method_win_tsf.h @@ -33,6 +33,7 @@ class COMPONENT_EXPORT(UI_BASE_IME_WIN) InputMethodWinTSF void OnCaretBoundsChanged(const TextInputClient* client) override; void CancelComposition(const TextInputClient* client) override; void DetachTextInputClient(TextInputClient* client) override; + bool IsInputLocaleCJK() const override; bool IsCandidatePopupOpen() const override; // Overridden from InputMethodBase: diff --git a/chromium/ui/base/ime/win/tsf_bridge.cc b/chromium/ui/base/ime/win/tsf_bridge.cc index fa78d5c973a..e70f1b91517 100644 --- a/chromium/ui/base/ime/win/tsf_bridge.cc +++ b/chromium/ui/base/ime/win/tsf_bridge.cc @@ -42,6 +42,7 @@ class TSFBridgeImpl : public TSFBridge { void RemoveFocusedClient(TextInputClient* client) override; void SetInputMethodDelegate(internal::InputMethodDelegate* delegate) override; void RemoveInputMethodDelegate() override; + bool IsInputLanguageCJK() override; Microsoft::WRL::ComPtr<ITfThreadMgr> GetThreadManager() override; TextInputClient* GetFocusedTextInputClient() const override; @@ -109,6 +110,10 @@ class TSFBridgeImpl : public TSFBridge { // An ITfThreadMgr object to be used in focus and document management. Microsoft::WRL::ComPtr<ITfThreadMgr> thread_manager_; + // An ITfInputProcessorProfiles object to be used to get current language + // locale profile. + Microsoft::WRL::ComPtr<ITfInputProcessorProfiles> input_processor_profiles_; + // A map from TextInputType to an editable document for TSF. We use multiple // TSF documents that have different InputScopes and TSF attributes based on // the TextInputType associated with the target document. For a TextInputType @@ -172,6 +177,13 @@ bool TSFBridgeImpl::Initialize() { return false; } + if (FAILED(::CoCreateInstance(CLSID_TF_InputProcessorProfiles, nullptr, + CLSCTX_ALL, + IID_PPV_ARGS(&input_processor_profiles_)))) { + DVLOG(1) << "Failed to create InputProcessorProfiles instance."; + return false; + } + if (FAILED(::CoCreateInstance(CLSID_TF_ThreadMgr, nullptr, CLSCTX_ALL, IID_PPV_ARGS(&thread_manager_)))) { DVLOG(1) << "Failed to create ThreadManager instance."; @@ -332,6 +344,17 @@ void TSFBridgeImpl::RemoveInputMethodDelegate() { } } +bool TSFBridgeImpl::IsInputLanguageCJK() { + LANGID lang_locale; + if (SUCCEEDED(input_processor_profiles_->GetCurrentLanguage(&lang_locale))) { + lang_locale = PRIMARYLANGID(lang_locale); + return lang_locale == LANG_CHINESE || lang_locale == LANG_JAPANESE || + lang_locale == LANG_KOREAN; + } else { + return false; + } +} + TextInputClient* TSFBridgeImpl::GetFocusedTextInputClient() const { return client_; } @@ -429,6 +452,8 @@ bool TSFBridgeImpl::InitializeDocumentMapInternal() { tsf_document_map_[input_type].text_store = text_store; tsf_document_map_[input_type].document_manager = document_manager; tsf_document_map_[input_type].cookie = cookie; + if (text_store) + text_store->OnContextInitialized(context.Get()); } return true; } diff --git a/chromium/ui/base/ime/win/tsf_bridge.h b/chromium/ui/base/ime/win/tsf_bridge.h index 2fbc7bf5fcc..0082f521f1b 100644 --- a/chromium/ui/base/ime/win/tsf_bridge.h +++ b/chromium/ui/base/ime/win/tsf_bridge.h @@ -82,6 +82,9 @@ class COMPONENT_EXPORT(UI_BASE_IME_WIN) TSFBridge { // Remove InputMethodDelegate instance from TSFTextStore when not in focus. virtual void RemoveInputMethodDelegate() = 0; + // Returns whether the system's input language is CJK. + virtual bool IsInputLanguageCJK() = 0; + // Obtains current thread manager. virtual Microsoft::WRL::ComPtr<ITfThreadMgr> GetThreadManager() = 0; diff --git a/chromium/ui/base/ime/win/tsf_text_store.cc b/chromium/ui/base/ime/win/tsf_text_store.cc index 5e846168ab2..b82b3e2e93c 100644 --- a/chromium/ui/base/ime/win/tsf_text_store.cc +++ b/chromium/ui/base/ime/win/tsf_text_store.cc @@ -849,6 +849,7 @@ STDMETHODIMP TSFTextStore::OnEndEdit(ITfContext* context, if (SUCCEEDED( context_composition->EnumCompositions(&enum_composition_view))) { Microsoft::WRL::ComPtr<ITfCompositionView> composition_view; + bool has_composition = false; if (enum_composition_view->Next(1, &composition_view, nullptr) == S_OK) { Microsoft::WRL::ComPtr<ITfRange> range; if (SUCCEEDED(composition_view->GetRange(&range))) { @@ -857,14 +858,21 @@ STDMETHODIMP TSFTextStore::OnEndEdit(ITfContext* context, LONG start = 0; LONG length = 0; if (SUCCEEDED(range_acp->GetExtent(&start, &length))) { - composition_start_ = start; - has_composition_range_ = true; - composition_range_.set_start(start); - composition_range_.set_end(start + length); + // We should only consider it as a valid composition if the + // composition range is not collapsed (length > 0). + if (length > 0) { + has_composition = true; + composition_start_ = start; + has_composition_range_ = true; + composition_range_.set_start(start); + composition_range_.set_end(start + length); + } } } } - } else { + } + + if (!has_composition) { composition_start_ = selection_.start(); if (has_composition_range_) { has_composition_range_ = false; @@ -986,6 +994,19 @@ bool TSFTextStore::GetCompositionStatus( return true; } +bool TSFTextStore::TerminateComposition() { + if (context_ && has_composition_range_) { + Microsoft::WRL::ComPtr<ITfContextOwnerCompositionServices> service; + + if (SUCCEEDED(context_->QueryInterface(IID_PPV_ARGS(&service)))) { + service->TerminateComposition(nullptr); + return true; + } + } + + return false; +} + void TSFTextStore::CalculateTextandSelectionDiffAndNotifyIfNeeded() { if (!text_input_client_) return; @@ -1094,6 +1115,10 @@ void TSFTextStore::CalculateTextandSelectionDiffAndNotifyIfNeeded() { } } +void TSFTextStore::OnContextInitialized(ITfContext* context) { + context_ = context; +} + void TSFTextStore::SetFocusedTextInputClient( HWND focused_window, TextInputClient* text_input_client) { @@ -1119,39 +1144,17 @@ void TSFTextStore::RemoveInputMethodDelegate() { } bool TSFTextStore::CancelComposition() { - // If there is an on-going document lock, we must not edit the text. - if (edit_flag_) - return false; - - if (string_pending_insertion_.empty()) - return true; - - // Unlike ImmNotifyIME(NI_COMPOSITIONSTR, CPS_CANCEL, 0) in IMM32, TSF does - // not have a dedicated method to cancel composition. However, CUAS actually - // has a protocol conversion from CPS_CANCEL into TSF operations. According - // to the observations on Windows 7, TIPs are expected to cancel composition - // when an on-going composition text is replaced with an empty string. So - // we use the same operation to cancel composition here to minimize the risk - // of potential compatibility issues. - - previous_composition_string_.clear(); - previous_composition_start_ = 0; - previous_composition_selection_range_ = gfx::Range::InvalidRange(); - const size_t previous_buffer_size = string_buffer_document_.size(); - string_pending_insertion_.clear(); - composition_start_ = selection_.start(); - if (text_store_acp_sink_mask_ & TS_AS_SEL_CHANGE) - text_store_acp_sink_->OnSelectionChange(); - if (text_store_acp_sink_mask_ & TS_AS_LAYOUT_CHANGE) - text_store_acp_sink_->OnLayoutChange(TS_LC_CHANGE, 0); - if (text_store_acp_sink_mask_ & TS_AS_TEXT_CHANGE) { - TS_TEXTCHANGE textChange = {}; - textChange.acpStart = 0; - textChange.acpOldEnd = previous_buffer_size; - textChange.acpNewEnd = 0; - text_store_acp_sink_->OnTextChange(0, &textChange); - } - return true; + // This method should correspond to + // ImmNotifyIME(NI_COMPOSITIONSTR, CPS_CANCEL, 0) + // in IMM32 hence calling falling back to |ConfirmComposition()| is not + // technically correct, because |ConfirmComposition()| corresponds to + // |CPS_COMPLETE| rather than |CPS_CANCEL|. + // However in Chromium it seems that |InputMethod::CancelComposition()| + // might have already committed composing text despite its name. + // TODO(IME): Check other platforms to see if |CancelComposition()| is + // actually working or not. + + return ConfirmComposition(); } bool TSFTextStore::ConfirmComposition() { @@ -1165,28 +1168,13 @@ bool TSFTextStore::ConfirmComposition() { if (!text_input_client_) return false; - // See the comment in TSFTextStore::CancelComposition. - // This logic is based on the observation about how to emulate - // ImmNotifyIME(NI_COMPOSITIONSTR, CPS_COMPLETE, 0) by CUAS. - previous_composition_string_.clear(); previous_composition_start_ = 0; previous_composition_selection_range_ = gfx::Range::InvalidRange(); - const size_t previous_buffer_size = string_buffer_document_.size(); string_pending_insertion_.clear(); - composition_start_ = selection_.start(); - if (text_store_acp_sink_mask_ & TS_AS_SEL_CHANGE) - text_store_acp_sink_->OnSelectionChange(); - if (text_store_acp_sink_mask_ & TS_AS_LAYOUT_CHANGE) - text_store_acp_sink_->OnLayoutChange(TS_LC_CHANGE, 0); - if (text_store_acp_sink_mask_ & TS_AS_TEXT_CHANGE) { - TS_TEXTCHANGE textChange = {}; - textChange.acpStart = 0; - textChange.acpOldEnd = previous_buffer_size; - textChange.acpNewEnd = 0; - text_store_acp_sink_->OnTextChange(0, &textChange); - } - return true; + composition_start_ = selection_.end(); + + return TerminateComposition(); } void TSFTextStore::SendOnLayoutChange() { diff --git a/chromium/ui/base/ime/win/tsf_text_store.h b/chromium/ui/base/ime/win/tsf_text_store.h index 2605a96a462..4eed8c08e81 100644 --- a/chromium/ui/base/ime/win/tsf_text_store.h +++ b/chromium/ui/base/ime/win/tsf_text_store.h @@ -234,6 +234,10 @@ class COMPONENT_EXPORT(UI_BASE_IME_WIN) TSFTextStore STDMETHOD(OnKeyTraceUp) (WPARAM wParam, LPARAM lParam) override; + // Called after |TSFBridgeImpl::CreateDocumentManager| to tell that the + // text-store is successfully associated with a Context. + void OnContextInitialized(ITfContext* context); + // Sets currently focused TextInputClient. void SetFocusedTextInputClient(HWND focused_window, TextInputClient* text_input_client); @@ -259,6 +263,9 @@ class COMPONENT_EXPORT(UI_BASE_IME_WIN) TSFTextStore friend class TSFTextStoreTest; friend class TSFTextStoreTestCallback; + // Terminate an active composition for this text store. + bool TerminateComposition(); + // Compare our cached text buffer and selection with the up-to-date // text buffer and selection from TextInputClient. We also update // cached text buffer and selection with the new version. Then notify @@ -413,6 +420,7 @@ class COMPONENT_EXPORT(UI_BASE_IME_WIN) TSFTextStore // attributes of the composition string. Microsoft::WRL::ComPtr<ITfCategoryMgr> category_manager_; Microsoft::WRL::ComPtr<ITfDisplayAttributeMgr> display_attribute_manager_; + Microsoft::WRL::ComPtr<ITfContext> context_; DISALLOW_COPY_AND_ASSIGN(TSFTextStore); }; diff --git a/chromium/ui/gl/gl_surface_egl.cc b/chromium/ui/gl/gl_surface_egl.cc index 3322a274fdd..c73f28ae479 100644 --- a/chromium/ui/gl/gl_surface_egl.cc +++ b/chromium/ui/gl/gl_surface_egl.cc @@ -1475,6 +1475,15 @@ bool NativeViewGLSurfaceEGL::GetFrameTimestampInfoIfAvailable( // reporting purpose. std::vector<EGLnsecsANDROID> egl_timestamps(supported_egl_timestamps_.size(), EGL_TIMESTAMP_INVALID_ANDROID); + + // TODO(vikassoni): File a driver bug for eglGetFrameTimestampsANDROID(). + // See https://bugs.chromium.org/p/chromium/issues/detail?id=966638. + // As per the spec, the driver is expected to return a valid timestamp from + // the call eglGetFrameTimestampsANDROID() when its not + // EGL_TIMESTAMP_PENDING_ANDROID or EGL_TIMESTAMP_INVALID_ANDROID. But + // currently some buggy drivers an invalid timestamp 0. + // This is currentlt handled in chrome for by setting the presentation time to + // TimeTicks::Now() (snapped to the next vsync) instead of 0. if ((frame_id < 0) || !eglGetFrameTimestampsANDROID( GetDisplay(), surface_, frame_id, @@ -1502,7 +1511,6 @@ bool NativeViewGLSurfaceEGL::GetFrameTimestampInfoIfAvailable( base::TimeDelta::FromNanoseconds(presentation_time_ns); *presentation_flags = presentation_flags_; } - DCHECK(!presentation_time->is_null()); return true; } diff --git a/chromium/ui/gl/gl_surface_presentation_helper.cc b/chromium/ui/gl/gl_surface_presentation_helper.cc index e7bcd1a5b79..f7e6ae113b2 100644 --- a/chromium/ui/gl/gl_surface_presentation_helper.cc +++ b/chromium/ui/gl/gl_surface_presentation_helper.cc @@ -70,8 +70,24 @@ bool GLSurfacePresentationHelper::GetFrameTimestampInfoIfAvailable( DCHECK(frame.timer || frame.fence || egl_timestamp_client_); if (egl_timestamp_client_) { - return egl_timestamp_client_->GetFrameTimestampInfoIfAvailable( + bool result = egl_timestamp_client_->GetFrameTimestampInfoIfAvailable( timestamp, interval, flags, frame.frame_id); + + // Workaround null timestamp by setting it to TimeTicks::Now() snapped to + // the next vsync interval. See + // https://bugs.chromium.org/p/chromium/issues/detail?id=966638 for more + // details. + if (result && timestamp->is_null()) { + *timestamp = base::TimeTicks::Now(); + *interval = vsync_interval_; + *flags = 0; + if (!vsync_interval_.is_zero()) { + *timestamp = + timestamp->SnappedToNextTick(vsync_timebase_, vsync_interval_); + *flags = gfx::PresentationFeedback::kVSync; + } + } + return result; } else if (frame.timer) { if (!frame.timer->IsAvailable()) return false; diff --git a/chromium/ui/message_center/views/message_popup_view.cc b/chromium/ui/message_center/views/message_popup_view.cc index dc37ecaee14..a4e333c54c4 100644 --- a/chromium/ui/message_center/views/message_popup_view.cc +++ b/chromium/ui/message_center/views/message_popup_view.cc @@ -113,11 +113,11 @@ void MessagePopupView::AutoCollapse() { void MessagePopupView::Show() { views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP); + params.keep_on_top = true; +#if defined(OS_LINUX) && !defined(OS_CHROMEOS) // Make the widget explicitly activatable as TYPE_POPUP is not activatable by // default but we need focus for the inline reply textarea. params.activatable = views::Widget::InitParams::ACTIVATABLE_YES; - params.keep_on_top = true; -#if defined(OS_LINUX) && !defined(OS_CHROMEOS) params.opacity = views::Widget::InitParams::OPAQUE_WINDOW; #else params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; diff --git a/chromium/ui/message_center/views/notification_view_md.cc b/chromium/ui/message_center/views/notification_view_md.cc index a81e70dd50e..5349bc34e5b 100644 --- a/chromium/ui/message_center/views/notification_view_md.cc +++ b/chromium/ui/message_center/views/notification_view_md.cc @@ -715,7 +715,12 @@ void NotificationViewMD::ButtonPressed(views::Button* sender, if (sender == header_row_) { if (IsExpandable() && content_row_->visible()) { SetManuallyExpandedOrCollapsed(true); + auto weak_ptr = weak_ptr_factory_.GetWeakPtr(); ToggleExpanded(); + // Check |this| is valid before continuing, because ToggleExpanded() might + // cause |this| to be deleted. + if (!weak_ptr) + return; Layout(); SchedulePaint(); } @@ -1216,6 +1221,8 @@ void NotificationViewMD::UpdateViewForExpandedState(bool expanded) { } void NotificationViewMD::ToggleInlineSettings(const ui::Event& event) { + if (!settings_row_) + return; bool inline_settings_visible = !settings_row_->visible(); bool disable_notification = settings_row_->visible() && block_all_button_->checked(); @@ -1229,7 +1236,16 @@ void NotificationViewMD::ToggleInlineSettings(const ui::Event& event) { dont_block_button_->SetChecked(true); SetSettingMode(inline_settings_visible); - SetExpanded(!inline_settings_visible); + + // Grab a weak pointer before calling SetExpanded() as it might cause |this| + // to be deleted. + { + auto weak_ptr = weak_ptr_factory_.GetWeakPtr(); + SetExpanded(!inline_settings_visible); + if (!weak_ptr) + return; + } + PreferredSizeChanged(); if (inline_settings_visible) diff --git a/chromium/ui/message_center/views/notification_view_md.h b/chromium/ui/message_center/views/notification_view_md.h index cc16a88d3b6..ef732236360 100644 --- a/chromium/ui/message_center/views/notification_view_md.h +++ b/chromium/ui/message_center/views/notification_view_md.h @@ -325,6 +325,8 @@ class MESSAGE_CENTER_EXPORT NotificationViewMD base::TimeTicks last_mouse_pressed_timestamp_; + base::WeakPtrFactory<NotificationViewMD> weak_ptr_factory_{this}; + DISALLOW_COPY_AND_ASSIGN(NotificationViewMD); }; diff --git a/chromium/ui/message_center/views/notification_view_md_unittest.cc b/chromium/ui/message_center/views/notification_view_md_unittest.cc index 248c85270b9..37baaff9219 100644 --- a/chromium/ui/message_center/views/notification_view_md_unittest.cc +++ b/chromium/ui/message_center/views/notification_view_md_unittest.cc @@ -139,6 +139,11 @@ class NotificationViewMDTest void InkDropAnimationStarted() override; void InkDropRippleAnimationEnded(views::InkDropState ink_drop_state) override; + void set_delete_on_preferred_size_changed( + bool delete_on_preferred_size_changed) { + delete_on_preferred_size_changed_ = delete_on_preferred_size_changed; + } + void set_delete_on_notification_removed(bool delete_on_notification_removed) { delete_on_notification_removed_ = delete_on_notification_removed; } @@ -165,6 +170,7 @@ class NotificationViewMDTest views::View* GetCloseButton(); bool ink_drop_stopped_ = false; + bool delete_on_preferred_size_changed_ = false; bool delete_on_notification_removed_ = false; std::set<std::string> removed_ids_; scoped_refptr<NotificationTestDelegate> delegate_; @@ -211,7 +217,8 @@ void NotificationViewMDTest::SetUp() { void NotificationViewMDTest::TearDown() { MessageCenter::Get()->RemoveObserver(this); - DCHECK(notification_view_ || delete_on_notification_removed_); + DCHECK(notification_view_ || delete_on_preferred_size_changed_ || + delete_on_notification_removed_); if (notification_view_) { notification_view_->SetInkDropMode(MessageView::InkDropMode::OFF); notification_view_->RemoveObserver(this); @@ -225,6 +232,11 @@ void NotificationViewMDTest::TearDown() { void NotificationViewMDTest::OnViewPreferredSizeChanged( views::View* observed_view) { EXPECT_EQ(observed_view, notification_view()); + if (delete_on_preferred_size_changed_) { + widget()->CloseNow(); + notification_view_.reset(); + return; + } widget()->SetSize(notification_view()->GetPreferredSize()); } @@ -1198,6 +1210,23 @@ TEST_F(NotificationViewMDTest, TestClickExpanded) { EXPECT_TRUE(delegate_->clicked()); } +TEST_F(NotificationViewMDTest, TestDeleteOnToggleExpanded) { + std::unique_ptr<Notification> notification = CreateSimpleNotification(); + notification->set_type(NotificationType::NOTIFICATION_TYPE_SIMPLE); + notification->set_title(base::string16()); + notification->set_message(base::ASCIIToUTF16( + "consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore " + "et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud " + "exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.")); + UpdateNotificationViews(*notification); + EXPECT_FALSE(notification_view()->expanded_); + + // The view can be deleted by PreferredSizeChanged(). https://crbug.com/918933 + set_delete_on_preferred_size_changed(true); + notification_view()->ButtonPressed(notification_view()->header_row_, + DummyEvent()); +} + TEST_F(NotificationViewMDTest, TestDeleteOnDisableNotification) { std::unique_ptr<Notification> notification = CreateSimpleNotification(); notification->set_type(NOTIFICATION_TYPE_SIMPLE); diff --git a/chromium/ui/strings/translations/ui_strings_pt-BR.xtb b/chromium/ui/strings/translations/ui_strings_pt-BR.xtb index 86f757e9ce2..359508adff5 100644 --- a/chromium/ui/strings/translations/ui_strings_pt-BR.xtb +++ b/chromium/ui/strings/translations/ui_strings_pt-BR.xtb @@ -57,7 +57,7 @@ <translation id="2583543531130364912">Calibrar a touchscreen</translation> <translation id="2666092431469916601">Parte superior</translation> <translation id="2701330563083355633">Compartilhada por <ph name="DEVICE_NAME" /></translation> -<translation id="2743387203779672305">Copiar para a área de trabalho</translation> +<translation id="2743387203779672305">Copiar para área de transferência</translation> <translation id="2803313416453193357">Abrir pasta</translation> <translation id="2824719307700604149">{YEARS,plural, =1{1 ano atrás}one{# ano atrás}other{# anos atrás}}</translation> <translation id="2907671656515444832">{DAYS,plural, =1{em 1 d}one{em # d}other{em # d}}</translation> @@ -205,7 +205,7 @@ <translation id="8772073294905169192">{HOURS,plural, =1{1 h}one{# h}other{# h}}</translation> <translation id="8798099450830957504">Padrão</translation> <translation id="8806053966018712535">Pasta <ph name="FOLDER_NAME" /></translation> -<translation id="883911313571074303">Fazer anotações na imagem</translation> +<translation id="883911313571074303">Nota na imagem</translation> <translation id="8841375032071747811">Botão "Voltar"</translation> <translation id="8876215549894133151">Formato:</translation> <translation id="8901569739625249689"><ph name="QUANTITY" /> KB</translation> diff --git a/chromium/ui/strings/translations/ui_strings_ta.xtb b/chromium/ui/strings/translations/ui_strings_ta.xtb index 7635aa901dd..40df691828e 100644 --- a/chromium/ui/strings/translations/ui_strings_ta.xtb +++ b/chromium/ui/strings/translations/ui_strings_ta.xtb @@ -72,7 +72,7 @@ <translation id="3234408098842461169">கீழ்நோக்கிய அம்பு</translation> <translation id="3291688615589870984">{DAYS,plural, =1{1 நாள்}other{# நாட்கள்}}</translation> <translation id="335581015389089642">பேச்சு</translation> -<translation id="3443810440409579745">பகிர்ந்த தாவல் பெறப்பட்டது.</translation> +<translation id="3443810440409579745">தாவல் பகிரப்பட்டுள்ளது.</translation> <translation id="3479552764303398839">இப்பொழுது இல்லை</translation> <translation id="348799646910989694">ஷெல்ஃப் தானாகவே மறைக்கப்படும்</translation> <translation id="3600566671520689681">{DAYS,plural, =1{1 நாள் உள்ளது}other{# நாட்கள் உள்ளன}}</translation> diff --git a/chromium/ui/views/win/hwnd_message_handler.cc b/chromium/ui/views/win/hwnd_message_handler.cc index fb8e820175a..443003518ef 100644 --- a/chromium/ui/views/win/hwnd_message_handler.cc +++ b/chromium/ui/views/win/hwnd_message_handler.cc @@ -3023,15 +3023,17 @@ LRESULT HWNDMessageHandler::HandlePointerEventTypeTouch(UINT message, event.latency()->AddLatencyNumberWithTimestamp( ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, event_time, 1); - if (event_type == ui::ET_TOUCH_RELEASED) - id_generator_.ReleaseNumber(pointer_id); - // There are cases where the code handling the message destroys the // window, so use the weak ptr to check if destruction occurred or not. base::WeakPtr<HWNDMessageHandler> ref(msg_handler_weak_factory_.GetWeakPtr()); delegate_->HandleTouchEvent(&event); if (ref) { + // Release the pointer id only when |HWNDMessageHandler| and |id_generator_| + // are not destroyed. + if (event_type == ui::ET_TOUCH_RELEASED) + id_generator_.ReleaseNumber(pointer_id); + // Mark touch released events handled. These will usually turn into tap // gestures, and doing this avoids propagating the event to other windows. if (delegate_->GetFrameMode() == FrameMode::SYSTEM_DRAWN) { diff --git a/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/multidevice_setup.html b/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/multidevice_setup.html index 8cce94f0cb6..78c43b68ce7 100644 --- a/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/multidevice_setup.html +++ b/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/multidevice_setup.html @@ -31,12 +31,14 @@ padding: 0 32px; } </style> - <iron-pages attr-for-selected="is" + <iron-pages id="ironPages" + attr-for-selected="is" selected="[[visiblePageName]]" selected-item="{{visiblePage_}}"> <template is="dom-if" if="[[shouldPasswordPageBeIncluded_(delegate)]]" restamp> - <password-page auth-token="{{authToken_}}" + <password-page class="ui-page" + auth-token="{{authToken_}}" forward-button-disabled="{{passwordPageForwardButtonDisabled_}}" password-field-valid="{{passwordFieldValid}}" on-user-submitted-password="onUserSubmittedPassword_"> @@ -44,17 +46,18 @@ </template> <template is="dom-if" if="[[shouldSetupSucceededPageBeIncluded_(delegate)]]" restamp> - <setup-succeeded-page></setup-succeeded-page> + <setup-succeeded-page class="ui-page"></setup-succeeded-page> </template> - <start-setup-page devices="[[devices_]]" + <start-setup-page class="ui-page" + devices="[[devices_]]" selected-device-id="{{selectedDeviceId_}}" delegate="[[delegate]]"> </start-setup-page> </iron-pages> <div class="flex"></div> - <button-bar forward-button-hidden="[[!forwardButtonText]]" - backward-button-hidden="[[!backwardButtonText]]" - cancel-button-hidden="[[!cancelButtonText]]"> + <button-bar forward-button-hidden="[[!forwardButtonTextId]]" + backward-button-hidden="[[!backwardButtonTextId]]" + cancel-button-hidden="[[!cancelButtonTextId]]"> <slot name="backward-button" slot="backward-button"></slot> <slot name="cancel-button" slot="cancel-button"></slot> <slot name="forward-button" slot="forward-button"></slot> diff --git a/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/multidevice_setup.js b/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/multidevice_setup.js index e97849f453a..8545122a83a 100644 --- a/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/multidevice_setup.js +++ b/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/multidevice_setup.js @@ -27,12 +27,12 @@ cr.define('multidevice_setup', function() { delegate: Object, /** - * Text to be shown on the forward navigation button. + * ID of loadTimeData string to be shown on the forward navigation button. * @type {string|undefined} */ - forwardButtonText: { + forwardButtonTextId: { type: String, - computed: 'getForwardButtonText_(visiblePage_)', + computed: 'getForwardButtonTextId_(visiblePage_)', notify: true, }, @@ -45,22 +45,23 @@ cr.define('multidevice_setup', function() { }, /** - * Text to be shown on the cancel button. + * ID of loadTimeData string to be shown on the cancel button. * @type {string|undefined} */ - cancelButtonText: { + cancelButtonTextId: { type: String, - computed: 'getCancelButtonText_(visiblePage_)', + computed: 'getCancelButtonTextId_(visiblePage_)', notify: true, }, /** - * Text to be shown on the backward navigation button. + * ID of loadTimeData string to be shown on the backward navigation + * button. * @type {string|undefined} */ - backwardButtonText: { + backwardButtonTextId: { type: String, - computed: 'getBackwardButtonText_(visiblePage_)', + computed: 'getBackwardButtonTextId_(visiblePage_)', notify: true, }, @@ -142,6 +143,11 @@ cr.define('multidevice_setup', function() { this.initializeSetupFlow.bind(this)); }, + updateLocalizedContent: function() { + this.$.ironPages.querySelectorAll('.ui-page') + .forEach(page => page.i18nUpdateLocale()); + }, + initializeSetupFlow: function() { this.mojoInterfaceProvider_.getMojoServiceProxy() .getEligibleHostDevices() @@ -240,15 +246,16 @@ cr.define('multidevice_setup', function() { }, /** - * @return {string|undefined} The forward button text, which is undefined - * if no button should be displayed. + * @return {string|undefined} The ID of loadTimeData string for the + * forward button text, which is undefined if no button should be + * displayed. * @private */ - getForwardButtonText_: function() { + getForwardButtonTextId_: function() { if (!this.visiblePage_) { return undefined; } - return this.visiblePage_.forwardButtonText; + return this.visiblePage_.forwardButtonTextId; }, /** @@ -261,27 +268,29 @@ cr.define('multidevice_setup', function() { }, /** - * @return {string|undefined} The cancel button text, which is undefined - * if no button should be displayed. + * @return {string|undefined} The ID of loadTimeData string for the + * cancel button text, which is undefined if no button should be + * displayed. * @private */ - getCancelButtonText_: function() { + getCancelButtonTextId_: function() { if (!this.visiblePage_) { return undefined; } - return this.visiblePage_.cancelButtonText; + return this.visiblePage_.cancelButtonTextId; }, /** - * @return {string|undefined} The backward button text, which is undefined - * if no button should be displayed. + * @return {string|undefined} The ID of loadTimeData string for the + * backward button text, which is undefined if no button should be + * displayed. * @private */ - getBackwardButtonText_: function() { + getBackwardButtonTextId_: function() { if (!this.visiblePage_) { return undefined; } - return this.visiblePage_.backwardButtonText; + return this.visiblePage_.backwardButtonTextId; }, /** diff --git a/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/password_page.html b/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/password_page.html index b5c52c0f573..a12f238a09f 100644 --- a/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/password_page.html +++ b/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/password_page.html @@ -18,7 +18,7 @@ #profile-photo { border-radius: 50%; height: 20px; - margin-right: 8px; + margin-inline-end: 8px; width: 20px; } @@ -28,16 +28,17 @@ width: 560px; } </style> - <ui-page header-text="[[headerText]]" icon-name="google-g"> + <ui-page header-text="[[i18nDynamic(locale, 'passwordPageHeader')]]" + icon-name="google-g"> <div id="content-container" slot="additional-content"> <div id="user-info-container"> <img id="profile-photo" src="[[profilePhotoUrl_]]"></img> <span id="email">[[email_]]</span> </div> <cr-input id="passwordInput" type="password" - placeholder="[[i18n('enterPassword')]]" + placeholder="[[i18nDynamic(locale, 'enterPassword')]]" invalid="[[passwordInvalid_]]" - error-message="[[i18n('wrongPassword')]]" + error-message="[[i18nDynamic(locale, 'wrongPassword')]]" value="{{inputValue_}}" aria-disabled="false" on-keypress="onInputKeypress_" diff --git a/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/password_page.js b/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/password_page.js index 80b4f756870..8f73387796a 100644 --- a/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/password_page.js +++ b/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/password_page.js @@ -41,12 +41,6 @@ Polymer({ value: 'back', }, - /** Overridden from UiPageContainerBehavior. */ - headerId: { - type: String, - value: 'passwordPageHeader', - }, - /** * Authentication token; retrieved using the quickUnlockPrivate API. * @type {string} diff --git a/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/setup_succeeded_page.html b/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/setup_succeeded_page.html index a899610a5d0..0606e528b0c 100644 --- a/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/setup_succeeded_page.html +++ b/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/setup_succeeded_page.html @@ -23,8 +23,9 @@ width: 416px; } </style> - <ui-page header-text="[[headerText]]" icon-name="google-g"> - <span slot="message" inner-h-t-m-l="[[messageHtml]]"></span> + <ui-page header-text="[[i18nDynamic(locale, 'setupSucceededPageHeader')]]" + icon-name="google-g"> + <span slot="message" inner-h-t-m-l="[[getMessageHtml_()]]"></span> <div id="page-icon-container" slot="additional-content"> <div id="page-icon"></div> </div> diff --git a/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/setup_succeeded_page.js b/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/setup_succeeded_page.js index e9c4eac1bc1..a679e6d30e4 100644 --- a/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/setup_succeeded_page.js +++ b/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/setup_succeeded_page.js @@ -13,23 +13,9 @@ Polymer({ type: String, value: 'done', }, - - /** Overridden from UiPageContainerBehavior. */ - headerId: { - type: String, - value: 'setupSucceededPageHeader', - }, - - /** Overridden from UiPageContainerBehavior. */ - messageId: { - type: String, - value: 'setupSucceededPageMessage', - }, }, - behaviors: [ - UiPageContainerBehavior, - ], + behaviors: [UiPageContainerBehavior], /** @private {?multidevice_setup.BrowserProxy} */ browserProxy_: null, @@ -50,9 +36,17 @@ Polymer({ this.fire('setup-exited'); }, + /** @private */ + getMessageHtml_: function() { + const validNodeFn = (node, value) => node.tagName == 'A'; + return this.i18nAdvanced( + 'setupSucceededPageMessage', + {attrs: {'id': validNodeFn, 'href': validNodeFn}}); + }, + /** @override */ ready: function() { - let linkElement = this.$$('#settings-link'); + const linkElement = this.$$('#settings-link'); linkElement.setAttribute('href', '#'); linkElement.addEventListener('click', () => this.onSettingsLinkClicked_()); }, diff --git a/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/start_setup_page.html b/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/start_setup_page.html index a410816bbf7..be220226a6a 100644 --- a/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/start_setup_page.html +++ b/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/start_setup_page.html @@ -5,7 +5,6 @@ <link rel="import" href="chrome://resources/cr_components/chromeos/multidevice_setup/ui_page.html"> <link rel="import" href="chrome://resources/cr_components/chromeos/multidevice_setup/ui_page_container_behavior.html"> <link rel="import" href="chrome://resources/html/cr.html"> -<link rel="import" href="chrome://resources/html/i18n_behavior.html"> <link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html"> <link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html"> @@ -47,8 +46,8 @@ #feature-details-container { @apply --layout-vertical; @apply --layout-center-justified; - border-left: 1px solid rgb(218, 220, 224); - padding-left: 24px; + border-inline-start: 1px solid rgb(218, 220, 224); + padding-inline-start: 24px; } #feature-details-container-header { @@ -70,17 +69,24 @@ } .feature-detail span { - margin-left: 8px; + margin-inline-start: 8px; } #footnote { color: var(--paper-grey-600); margin-top: 12px; } + + #multidevice-summary-message a { + display: inline-block; + } </style> - <ui-page header-text="[[headerText]]" icon-name="google-g"> - <span slot="message" id="multidevice-summary-message" inner-h-t-m-l="[[messageHtml]]"></span> + <ui-page header-text="[[i18nDynamic(locale, 'startSetupPageHeader')]]" + icon-name="google-g"> + <span slot="message" id="multidevice-summary-message" inner-h-t-m-l= + "[[i18nAdvancedDynamic_(locale, 'startSetupPageMessage')]]"> + </span> <div slot="additional-content"> <div id="selector-and-details-container"> <div id="deviceSelectionContainer" class="flex"> @@ -107,26 +113,33 @@ </div> <div id="feature-details-container" class="flex"> <div id="feature-details-container-header"> - [[i18n('startSetupPageFeatureListHeader')]] + [[i18nDynamic(locale, 'startSetupPageFeatureListHeader')]] </div> <div class="feature-detail"> <iron-icon icon="multidevice-setup-icons-20:messages"></iron-icon> <span id="awm-summary-message" inner-h-t-m-l=" - [[i18nAdvanced('startSetupPageFeatureListAwm')]]"> + [[i18nAdvancedDynamic_( + locale, 'startSetupPageFeatureListAwm')]]"> </span> </div> <div class="feature-detail"> <iron-icon icon="multidevice-setup-icons-20:downloads"> </iron-icon> - <span>[[i18n('startSetupPageFeatureListInstallApps')]]</span> + <span> + [[i18nDynamic(locale, 'startSetupPageFeatureListInstallApps')]] + </span> </div> <div class="feature-detail"> <iron-icon icon="multidevice-setup-icons-20:features"></iron-icon> - <span>[[i18n('startSetupPageFeatureListAddFeatures')]]</span> + <span> + [[i18nDynamic(locale, 'startSetupPageFeatureListAddFeatures')]] + </span> </div> </div> </div> - <div id="footnote">[[i18n('startSetupPageFootnote')]]</div> + <div id="footnote"> + [[i18nAdvancedDynamic_(locale, 'startSetupPageFootnote')]] + </div> </div> </ui-page> </template> diff --git a/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/start_setup_page.js b/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/start_setup_page.js index f5445d942e0..b85f3724ecc 100644 --- a/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/start_setup_page.js +++ b/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/start_setup_page.js @@ -18,18 +18,6 @@ Polymer({ computed: 'getCancelButtonTextId_(delegate)', }, - /** Overridden from UiPageContainerBehavior. */ - headerId: { - type: String, - value: 'startSetupPageHeader', - }, - - /** Overridden from UiPageContainerBehavior. */ - messageId: { - type: String, - value: 'startSetupPageMessage', - }, - /** * Array of objects representing all potential MultiDevice hosts. * @@ -63,7 +51,6 @@ Polymer({ behaviors: [ UiPageContainerBehavior, - I18nBehavior, WebUIListenerBehavior, ], @@ -79,7 +66,7 @@ Polymer({ // The "Learn More" links are inside a grdp string, so we cannot actually // add an onclick handler directly to the html. Instead, grab the two and // manaully add onclick handlers. - let helpArticleLinks = [ + const helpArticleLinks = [ this.$$('#multidevice-summary-message a'), this.$$('#awm-summary-message a') ]; @@ -153,4 +140,17 @@ Polymer({ onDeviceDropdownSelectionChanged_: function() { this.selectedDeviceId = this.$.deviceDropdown.value; }, + + /** + * Wrapper for i18nAdvanced for binding to location updates in OOBE. + * @param {string} locale The language code (e.g. en, es) for the current + * display language for CrOS. As with I18nBehavior.i18nDynamic(), the + * parameter is not used directly but is provided to allow HTML binding + * without passing an unexpected argument to I18nBehavior.i18nAdvanced(). + * @param {string} textId The loadTimeData ID of the string to be translated. + * @private + */ + i18nAdvancedDynamic_: function(locale, textId) { + return this.i18nAdvanced(textId); + }, }); diff --git a/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/ui_page_container_behavior.js b/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/ui_page_container_behavior.js index cb31b5170dc..35a578ca0e4 100644 --- a/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/ui_page_container_behavior.js +++ b/chromium/ui/webui/resources/cr_components/chromeos/multidevice_setup/ui_page_container_behavior.js @@ -6,102 +6,28 @@ const UiPageContainerBehaviorImpl = { properties: { /** - * ID for forward button label, which must be translated for display. - * - * Undefined if the visible page has no forward-navigation button. - * + * ID of loadTimeData string for forward button label, which must be + * translated for display. Undefined if the visible page has no + * forward-navigation button. * @type {string|undefined} */ forwardButtonTextId: String, /** - * ID for cancel button label, which must be translated for display. - * - * Undefined if the visible page has no cancel button. - * + * ID of loadTimeData string for cancel button label, which must be + * translated for display. Undefined if the visible page has no + * cancel button. * @type {string|undefined} */ cancelButtonTextId: String, /** - * ID for backward button label, which must be translated for display. - * - * Undefined if the visible page has no backward-navigation button. - * + * ID of loadTimeData string for backward button label, which must be + * translated for display. Undefined if the visible page has no + * backward-navigation button. * @type {string|undefined} */ backwardButtonTextId: String, - - /** - * ID for text of main UI Page heading. - * - * @type {string} - */ - headerId: String, - - /** - * ID for text of main UI Page message body. - * - * @type {string} - */ - messageId: String, - - /** - * Translated text to display on the forward-naviation button. - * - * Undefined if the visible page has no forward-navigation button. - * - * @type {string|undefined} - */ - forwardButtonText: { - type: String, - computed: 'computeLocalizedText_(forwardButtonTextId)', - }, - - /** - * Translated text to display on the cancel button. - * - * Undefined if the visible page has no cancel button. - * - * @type {string|undefined} - */ - cancelButtonText: { - type: String, - computed: 'computeLocalizedText_(cancelButtonTextId)', - }, - - /** - * Translated text to display on the backward-naviation button. - * - * Undefined if the visible page has no backward-navigation button. - * - * @type {string|undefined} - */ - backwardButtonText: { - type: String, - computed: 'computeLocalizedText_(backwardButtonTextId)', - }, - - /** - * Translated text of main UI Page heading. - * - * @type {string|undefined} - */ - headerText: { - type: String, - computed: 'computeLocalizedText_(headerId)', - }, - - /** - * Translated text of main UI Page heading. In general this can include - * some markup. - * - * @type {string|undefined} - */ - messageHtml: { - type: String, - computed: 'computeLocalizedText_(messageId)', - }, }, /** @@ -116,23 +42,6 @@ const UiPageContainerBehaviorImpl = { resolve(true /* canNavigate */); }); }, - - /** - * @param {string} textId Key for the localized string to appear on a - * button. - * @return {string|undefined} The localized string corresponding to the key - * textId. Return value is undefined if textId is not a key - * for any localized string. Note: this includes the case in which - * textId is undefined. - * @private - */ - computeLocalizedText_: function(textId) { - if (!this.i18nExists(textId)) { - return; - } - - return loadTimeData.getString(textId); - }, }; /** @polymerBehavior */ diff --git a/chromium/v8/include/v8-version.h b/chromium/v8/include/v8-version.h index dfcd5b467db..0479eba200f 100644 --- a/chromium/v8/include/v8-version.h +++ b/chromium/v8/include/v8-version.h @@ -11,7 +11,7 @@ #define V8_MAJOR_VERSION 7 #define V8_MINOR_VERSION 5 #define V8_BUILD_NUMBER 288 -#define V8_PATCH_LEVEL 22 +#define V8_PATCH_LEVEL 27 // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.) diff --git a/chromium/v8/src/builtins/builtins-handler-gen.cc b/chromium/v8/src/builtins/builtins-handler-gen.cc index a722a6180b3..538886833ad 100644 --- a/chromium/v8/src/builtins/builtins-handler-gen.cc +++ b/chromium/v8/src/builtins/builtins-handler-gen.cc @@ -302,11 +302,17 @@ void HandlerBuiltinsAssembler::DispatchByElementsKind( Switch(elements_kind, &if_unknown_type, elements_kinds, elements_kind_labels, arraysize(elements_kinds)); -#define ELEMENTS_KINDS_CASE(KIND) \ - BIND(&if_##KIND); \ - { \ - case_function(KIND); \ - Goto(&next); \ +#define ELEMENTS_KINDS_CASE(KIND) \ + BIND(&if_##KIND); \ + { \ + if (!FLAG_enable_sealed_frozen_elements_kind && \ + IsFrozenOrSealedElementsKindUnchecked(KIND)) { \ + /* Disable support for frozen or sealed elements kinds. */ \ + Unreachable(); \ + } else { \ + case_function(KIND); \ + Goto(&next); \ + } \ } ELEMENTS_KINDS(ELEMENTS_KINDS_CASE) #undef ELEMENTS_KINDS_CASE diff --git a/chromium/v8/src/d8.cc b/chromium/v8/src/d8.cc index be90dd08597..a6f247201cd 100644 --- a/chromium/v8/src/d8.cc +++ b/chromium/v8/src/d8.cc @@ -47,6 +47,10 @@ #include "src/vm-state-inl.h" #include "src/wasm/wasm-engine.h" +#ifdef V8_INTL_SUPPORT +#include "unicode/locid.h" +#endif // V8_INTL_SUPPORT + #if !defined(_WIN32) && !defined(_WIN64) #include <unistd.h> // NOLINT #else @@ -2876,6 +2880,9 @@ bool Shell::SetOptions(int argc, char* argv[]) { } else if (strncmp(argv[i], "--icu-data-file=", 16) == 0) { options.icu_data_file = argv[i] + 16; argv[i] = nullptr; + } else if (strncmp(argv[i], "--icu-locale=", 13) == 0) { + options.icu_locale = argv[i] + 13; + argv[i] = nullptr; #ifdef V8_USE_EXTERNAL_STARTUP_DATA } else if (strncmp(argv[i], "--natives_blob=", 15) == 0) { options.natives_blob = argv[i] + 15; @@ -3378,8 +3385,17 @@ int Shell::Main(int argc, char* argv[]) { std::ofstream trace_file; v8::base::EnsureConsoleOutput(); if (!SetOptions(argc, argv)) return 1; + v8::V8::InitializeICUDefaultLocation(argv[0], options.icu_data_file); +#ifdef V8_INTL_SUPPORT + if (options.icu_locale != nullptr) { + icu::Locale locale(options.icu_locale); + UErrorCode error_code = U_ZERO_ERROR; + icu::Locale::setDefault(locale, error_code); + } +#endif // V8_INTL_SUPPORT + v8::platform::InProcessStackDumping in_process_stack_dumping = options.disable_in_process_stack_traces ? v8::platform::InProcessStackDumping::kDisabled diff --git a/chromium/v8/src/d8.h b/chromium/v8/src/d8.h index 3223b12fdeb..ddbe311739a 100644 --- a/chromium/v8/src/d8.h +++ b/chromium/v8/src/d8.h @@ -330,6 +330,7 @@ class ShellOptions { code_cache_options(CodeCacheOptions::kNoProduceCache), isolate_sources(nullptr), icu_data_file(nullptr), + icu_locale(nullptr), natives_blob(nullptr), snapshot_blob(nullptr), trace_enabled(false), @@ -362,6 +363,7 @@ class ShellOptions { CodeCacheOptions code_cache_options; SourceGroup* isolate_sources; const char* icu_data_file; + const char* icu_locale; const char* natives_blob; const char* snapshot_blob; bool trace_enabled; diff --git a/chromium/v8/src/elements-kind.h b/chromium/v8/src/elements-kind.h index 511bb0b0f4b..e4e9077604d 100644 --- a/chromium/v8/src/elements-kind.h +++ b/chromium/v8/src/elements-kind.h @@ -154,6 +154,11 @@ inline bool IsDoubleOrFloatElementsKind(ElementsKind kind) { return IsDoubleElementsKind(kind) || IsFixedFloatElementsKind(kind); } +// This predicate is used for disabling respective functionality in builtins. +inline bool IsFrozenOrSealedElementsKindUnchecked(ElementsKind kind) { + return IsInRange(kind, PACKED_SEALED_ELEMENTS, PACKED_FROZEN_ELEMENTS); +} + inline bool IsPackedFrozenOrSealedElementsKind(ElementsKind kind) { DCHECK_IMPLIES( IsInRange(kind, PACKED_SEALED_ELEMENTS, PACKED_FROZEN_ELEMENTS), diff --git a/chromium/v8/src/flag-definitions.h b/chromium/v8/src/flag-definitions.h index da33cd170d5..dae18d9c359 100644 --- a/chromium/v8/src/flag-definitions.h +++ b/chromium/v8/src/flag-definitions.h @@ -355,8 +355,8 @@ DEFINE_BOOL(enable_one_shot_optimization, true, "only be executed once") // Flag for sealed, frozen elements kind instead of dictionary elements kind -DEFINE_BOOL(enable_sealed_frozen_elements_kind, true, - "Enable sealed, frozen elements kind") +DEFINE_BOOL_READONLY(enable_sealed_frozen_elements_kind, false, + "Enable sealed, frozen elements kind") // Flags for data representation optimizations DEFINE_BOOL(unbox_double_arrays, true, "automatically unbox arrays of doubles") diff --git a/chromium/v8/src/regexp/jsregexp.cc b/chromium/v8/src/regexp/jsregexp.cc index 79955052262..9525f0c61b7 100644 --- a/chromium/v8/src/regexp/jsregexp.cc +++ b/chromium/v8/src/regexp/jsregexp.cc @@ -32,6 +32,7 @@ #include "src/zone/zone-list-inl.h" #ifdef V8_INTL_SUPPORT +#include "unicode/locid.h" #include "unicode/uniset.h" #include "unicode/utypes.h" #endif // V8_INTL_SUPPORT @@ -5950,9 +5951,10 @@ void CharacterRange::AddCaseEquivalents(Isolate* isolate, Zone* zone, if (top > String::kMaxOneByteCharCode) top = String::kMaxOneByteCharCode; } already_added.add(bottom, top); + icu::Locale locale = icu::Locale::getRoot(); while (bottom <= top) { icu::UnicodeString upper(bottom); - upper.toUpper(); + upper.toUpper(locale); icu::UnicodeSet expanded(bottom, bottom); expanded.closeOver(USET_CASE_INSENSITIVE); for (int32_t i = 0; i < expanded.getRangeCount(); i++) { @@ -5960,10 +5962,18 @@ void CharacterRange::AddCaseEquivalents(Isolate* isolate, Zone* zone, UChar32 end = expanded.getRangeEnd(i); while (start <= end) { icu::UnicodeString upper2(start); - upper2.toUpper(); + upper2.toUpper(locale); // Only add if the upper case are the same. if (upper[0] == upper2[0]) { - others.add(start); + // #sec-runtime-semantics-canonicalize-ch + // 3.g. If the numeric value of ch ≥ 128 and the numeric value of + // cu < 128, return ch. + if (bottom >= 128 && start < 128) { + others.add(bottom); + } else { + // 3.h. 3.h. 3.h. Return cu. + others.add(start); + } } start++; } diff --git a/chromium/v8/src/snapshot/code-serializer.cc b/chromium/v8/src/snapshot/code-serializer.cc index 4743138ae5f..8ee5a11a6cc 100644 --- a/chromium/v8/src/snapshot/code-serializer.cc +++ b/chromium/v8/src/snapshot/code-serializer.cc @@ -303,7 +303,7 @@ MaybeHandle<SharedFunctionInfo> CodeSerializer::Deserialize( PrintF("[Deserializing from %d bytes took %0.3f ms]\n", length, ms); } - bool log_code_creation = + const bool log_code_creation = isolate->logger()->is_listening_to_code_events() || isolate->is_profiling() || isolate->code_event_dispatcher()->IsListeningToCodeEvents(); @@ -315,27 +315,30 @@ MaybeHandle<SharedFunctionInfo> CodeSerializer::Deserialize( #endif // V8_TARGET_ARCH_ARM if (log_code_creation || FLAG_log_function_events) { - String name = ReadOnlyRoots(isolate).empty_string(); - Script script = Script::cast(result->script()); - Handle<Script> script_handle(script, isolate); - if (script->name()->IsString()) name = String::cast(script->name()); + Handle<Script> script(Script::cast(result->script()), isolate); + Handle<String> name(script->name().IsString() + ? String::cast(script->name()) + : ReadOnlyRoots(isolate).empty_string(), + isolate); + if (FLAG_log_function_events) { LOG(isolate, FunctionEvent("deserialize", script->id(), timer.Elapsed().InMillisecondsF(), - result->StartPosition(), result->EndPosition(), name)); + result->StartPosition(), result->EndPosition(), *name)); } if (log_code_creation) { - Script::InitLineEnds(Handle<Script>(script, isolate)); + Script::InitLineEnds(script); + DisallowHeapAllocation no_gc; - SharedFunctionInfo::ScriptIterator iter(isolate, script); + SharedFunctionInfo::ScriptIterator iter(isolate, *script); for (i::SharedFunctionInfo info = iter.Next(); !info.is_null(); info = iter.Next()) { - if (info->is_compiled()) { - int line_num = script->GetLineNumber(info->StartPosition()) + 1; - int column_num = script->GetColumnNumber(info->StartPosition()) + 1; + if (info.is_compiled()) { + int line_num = script->GetLineNumber(info.StartPosition()) + 1; + int column_num = script->GetColumnNumber(info.StartPosition()) + 1; PROFILE(isolate, CodeCreateEvent(CodeEventListener::SCRIPT_TAG, - info->abstract_code(), info, name, + info.abstract_code(), info, *name, line_num, column_num)); } } diff --git a/chromium/v8/src/wasm/wasm-memory.cc b/chromium/v8/src/wasm/wasm-memory.cc index 914b61244dc..94ec964e19b 100644 --- a/chromium/v8/src/wasm/wasm-memory.cc +++ b/chromium/v8/src/wasm/wasm-memory.cc @@ -280,6 +280,8 @@ bool WasmMemoryTracker::FreeMemoryIfIsWasmMemory(Isolate* isolate, void WasmMemoryTracker::RegisterWasmMemoryAsShared( Handle<WasmMemoryObject> object, Isolate* isolate) { + // Only register with the tracker if shared grow is enabled. + if (!FLAG_wasm_grow_shared_memory) return; const void* backing_store = object->array_buffer()->backing_store(); // TODO(V8:8810): This should be a DCHECK, currently some tests do not // use a full WebAssembly.Memory, and fail on registering so return early. diff --git a/chromium/v8/tools/whitespace.txt b/chromium/v8/tools/whitespace.txt index 1747d020227..557d60cf51c 100644 --- a/chromium/v8/tools/whitespace.txt +++ b/chromium/v8/tools/whitespace.txt @@ -7,4 +7,4 @@ A Smi balks into a war and says: The doubles heard this and started to unbox. The Smi looked at them when a crazy v8-autoroll account showed up... The autoroller bought a round of Himbeerbrause. Suddenly..... -The bartender starts to shake the bottles.................................... +The bartender starts to shake the bottles..................................... |