diff --git a/.gn b/.gn index cc966cd..dbcf136 100644 --- a/.gn +++ b/.gn
@@ -63,7 +63,6 @@ # their includes checked for proper dependencies when you run either # "gn check" or "gn gen --check". no_check_targets = [ - "//chrome/test:interactive_ui_tests", "//chrome/test:unit_tests", "//chrome/test:unit_tests__library", "//extensions/browser:*", # 20 errors
diff --git a/DEPS b/DEPS index abefdaa7..20b65ff4 100644 --- a/DEPS +++ b/DEPS
@@ -209,11 +209,11 @@ # 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': 'fe9b4316d8de469749812376684957347b0709cd', + 'skia_revision': '491f412c944fe78611e5591c97c3270816e19b8c', # 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': 'fe7a5763a6a008e2c6744390db949308acd5602f', + 'v8_revision': '808bb34a575274543a9cf6a9fba9dc275dbb5721', # 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. @@ -221,7 +221,7 @@ # 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': 'a44b16d39075af2ba64ac48457bd6f8f3b3aafeb', + 'angle_revision': '6c328417207e7081af29536c1286e95bd5b108b0', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -288,7 +288,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling devtools-frontend # and whatever else without interference from each other. - 'devtools_frontend_revision': 'c13c29dc98e39bc5c96f6b58be4856b8eda4fee6', + 'devtools_frontend_revision': 'cb880dd6f2dc2baf34d1d9a96b34aab95276add4', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libprotobuf-mutator # and whatever else without interference from each other. @@ -643,7 +643,7 @@ 'packages': [ { 'package': 'chromium/rts/model/linux-amd64', - 'version': 'riSig3JqaTPXRJyArMbQCNmMd2MM4C5qAkr7enZF5f8C', + 'version': 'oALhDKVkeAzkGeq7XrFKM1mUTH2TaYJGQkXwM7RytDYC', }, ], 'dep_type': 'cipd', @@ -654,7 +654,7 @@ 'packages': [ { 'package': 'chromium/rts/model/mac-amd64', - 'version': 'D1etRzwhVwI7QGbv0PFp2QrQ73HzOVZjex_mrRU2obsC', + 'version': 'qgWjqhDC-d3maWRs-3dh4uTjXicdxi88EYI4HoaVGcgC', }, ], 'dep_type': 'cipd', @@ -665,7 +665,7 @@ 'packages': [ { 'package': 'chromium/rts/model/windows-amd64', - 'version': 'KEqicFtFOQ7QG3MH4ZNilLLBf6T_i6PHqx4O0j-ADVYC', + 'version': 'M668EbK0TLr4XWelPNWUCwz-8fDE1RMeO0xvXR4Y4rsC', }, ], 'dep_type': 'cipd', @@ -946,7 +946,7 @@ # Tools used when building Chrome for Chrome OS. This affects both the Simple # Chrome workflow, as well as the chromeos-chrome ebuild. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '51b5c4ef069e8c97c0365ace0ed84447dc237b1d', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'ab07c941767bbaf2afc88c7547b085048001fb2e', 'condition': 'checkout_chromeos', }, @@ -966,7 +966,7 @@ }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '0694fa65f82be85b362516e7d97c5100bf27ca87', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '424504a1b2e7c201af9b9dd1084537add80b8a2a', 'src/third_party/devtools-frontend/src': Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), @@ -1349,7 +1349,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + 'b3f455e9edced2a776ddcb5a2cdf5ddcefa8776f', + Var('android_git') + '/platform/external/perfetto.git' + '@' + '0d6614b33d5318efd97120182405c700a25cb5ae', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1547,7 +1547,7 @@ 'src/third_party/usrsctp/usrsctplib': Var('chromium_git') + '/external/github.com/sctplab/usrsctp' + '@' + '22ba62ffe79c3881581ab430368bf3764d9533eb', - 'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@7d19f5261090fbb07bd30679184538c36bee229c', + 'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@3f59a9b275fbae45d3388732b2345c112a1e0a45', 'src/third_party/vulkan_memory_allocator': Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git' + '@' + '732a76d9d3c70d6aa487216495eeb28518349c3a', @@ -1635,7 +1635,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@cba0315f729acb461704dfcad21f43bbbfe2961d', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@d5fd0064dc78163ea8405b0b95589a5dd65d440e', 'condition': 'checkout_src_internal', },
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index 2d8512a..7f7e9678 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -2636,6 +2636,7 @@ "//chrome/test:browser_tests", "//chrome/test:browser_tests_runner", "//chrome/test:captured_sites_interactive_tests", + "//chrome/test:interactive_ui_tests", "//chrome/test:test_support", "//chrome/test:test_support_ui", "//chrome/test:test_support_unit",
diff --git a/ash/login/ui/animated_rounded_image_view.cc b/ash/login/ui/animated_rounded_image_view.cc index 1354083..bfb4f03 100644 --- a/ash/login/ui/animated_rounded_image_view.cc +++ b/ash/login/ui/animated_rounded_image_view.cc
@@ -21,7 +21,8 @@ class SingleFrameImageDecoder : public AnimatedRoundedImageView::AnimationDecoder { public: - SingleFrameImageDecoder(const gfx::ImageSkia& image) : image_(image) {} + explicit SingleFrameImageDecoder(const gfx::ImageSkia& image) + : image_(image) {} ~SingleFrameImageDecoder() override = default; // AnimatedRoundedImageView::AnimationDecoder:
diff --git a/ash/login/ui/bottom_status_indicator.h b/ash/login/ui/bottom_status_indicator.h index c0487e0..e5ac791 100644 --- a/ash/login/ui/bottom_status_indicator.h +++ b/ash/login/ui/bottom_status_indicator.h
@@ -20,7 +20,7 @@ public: using TappedCallback = base::RepeatingClosure; - BottomStatusIndicator(TappedCallback on_tapped_callback); + explicit BottomStatusIndicator(TappedCallback on_tapped_callback); BottomStatusIndicator(const BottomStatusIndicator&) = delete; BottomStatusIndicator& operator=(const BottomStatusIndicator&) = delete; ~BottomStatusIndicator() override;
diff --git a/ash/login/ui/login_base_bubble_view.cc b/ash/login/ui/login_base_bubble_view.cc index e64deee..d2776a7 100644 --- a/ash/login/ui/login_base_bubble_view.cc +++ b/ash/login/ui/login_base_bubble_view.cc
@@ -47,7 +47,7 @@ // associated bubble in response. class LoginBubbleHandler : public ui::EventHandler { public: - LoginBubbleHandler(LoginBaseBubbleView* bubble) : bubble_(bubble) { + explicit LoginBubbleHandler(LoginBaseBubbleView* bubble) : bubble_(bubble) { Shell::Get()->AddPreTargetHandler(this); }
diff --git a/ash/login/ui/login_user_view.cc b/ash/login/ui/login_user_view.cc index e9504de..df220e66 100644 --- a/ash/login/ui/login_user_view.cc +++ b/ash/login/ui/login_user_view.cc
@@ -88,7 +88,7 @@ class PassthroughAnimationDecoder : public AnimatedRoundedImageView::AnimationDecoder { public: - PassthroughAnimationDecoder(const AnimationFrames& frames) + explicit PassthroughAnimationDecoder(const AnimationFrames& frames) : frames_(frames) {} ~PassthroughAnimationDecoder() override = default; @@ -102,7 +102,7 @@ class IconRoundedView : public views::View { public: - IconRoundedView(int size) : size_(size) {} + explicit IconRoundedView(int size) : size_(size) {} ~IconRoundedView() override = default; IconRoundedView(const IconRoundedView&) = delete; @@ -166,7 +166,7 @@ LoginUserView::UserImage* const view_; }; - UserImage(LoginDisplayStyle style) + explicit UserImage(LoginDisplayStyle style) : NonAccessibleView(kLoginUserImageClassName) { SetLayoutManager(std::make_unique<views::FillLayout>());
diff --git a/ash/login/ui/public_account_warning_dialog.h b/ash/login/ui/public_account_warning_dialog.h index 189d3461..b1042cb 100644 --- a/ash/login/ui/public_account_warning_dialog.h +++ b/ash/login/ui/public_account_warning_dialog.h
@@ -17,7 +17,7 @@ // clicks on the learn more link on the pubic account expanded view. class ASH_EXPORT PublicAccountWarningDialog : public views::DialogDelegateView { public: - PublicAccountWarningDialog( + explicit PublicAccountWarningDialog( base::WeakPtr<LoginExpandedPublicAccountView> controller); ~PublicAccountWarningDialog() override;
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb index 7d6a697..8839d8b 100644 --- a/ash/strings/ash_strings_bn.xtb +++ b/ash/strings/ash_strings_bn.xtb
@@ -280,6 +280,7 @@ <translation id="3207953481422525583">ব্যবহারকারী সংক্রান্ত সেটিংস</translation> <translation id="3217205077783620295">ভলিউম চালু আছে, টগল করলে অডিও মিউট হয়ে যাবে।</translation> <translation id="3226991577105957773">+ আরও <ph name="COUNT" />টি</translation> +<translation id="324366796737464147">অপ্রয়োজনীয় আওয়াজের বাতিলকরণ</translation> <translation id="3249513730522716925">Window <ph name="WINDOW_TITLE" /> ডেস্ক <ph name="ACTIVE_DESK" /> থেকে ডেস্ক <ph name="TARGET_DESK" />-এ সরানো হয়েছে</translation> <translation id="3255483164551725916">আপনি কি করতে পারেন?</translation> <translation id="3269597722229482060">ডানদিকের বোতামে ক্লিক করুন</translation>
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb index 422bd1c..ef6290a 100644 --- a/ash/strings/ash_strings_gu.xtb +++ b/ash/strings/ash_strings_gu.xtb
@@ -280,6 +280,7 @@ <translation id="3207953481422525583">વપરાશકર્તા સેટિંગ</translation> <translation id="3217205077783620295">વૉલ્યૂમ ચાલુ છે, ટૉગલ કરવાથી ઑડિયો મ્યૂટ થશે.</translation> <translation id="3226991577105957773">+ વધુ <ph name="COUNT" /></translation> +<translation id="324366796737464147">અવાજ રદ્દીકરણ</translation> <translation id="3249513730522716925">વિડો <ph name="WINDOW_TITLE" />ને ડેસ્ક <ph name="ACTIVE_DESK" />માંથી ડેસ્ક <ph name="TARGET_DESK" />માં ખસેડી</translation> <translation id="3255483164551725916">તમે શું કરી શકો?</translation> <translation id="3269597722229482060">રાઇટ ક્લિક કરો</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb index 9ac98969..93ce526 100644 --- a/ash/strings/ash_strings_kn.xtb +++ b/ash/strings/ash_strings_kn.xtb
@@ -280,6 +280,7 @@ <translation id="3207953481422525583">ಬಳಕೆದಾರರ ಸೆಟ್ಟಿಂಗ್ಗಳು</translation> <translation id="3217205077783620295">ವಾಲ್ಯೂಮ್ ಆನ್ ಆಗಿದೆ, ಟಾಗಲ್ ಮಾಡುವುದರಿಂದ ಆಡಿಯೊ ಮ್ಯೂಟ್ ಆಗುತ್ತದೆ.</translation> <translation id="3226991577105957773">+<ph name="COUNT" /> ಹೆಚ್ಚು</translation> +<translation id="324366796737464147">ಗದ್ದಲ ನಿವಾರಣೆ</translation> <translation id="3249513730522716925"><ph name="WINDOW_TITLE" /> ವಿಂಡೋವನ್ನು <ph name="ACTIVE_DESK" /> ಡೆಸ್ಕ್ನಿಂದ<ph name="TARGET_DESK" /> ಡೆಸ್ಕ್ಗೆ ಸರಿಸಲಾಗಿದೆ</translation> <translation id="3255483164551725916">ನೀವೇನು ಮಾಡಬಲ್ಲಿರಿ?</translation> <translation id="3269597722229482060">ಬಲ-ಕ್ಲಿಕ್</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb index e9a660c..b5da30e 100644 --- a/ash/strings/ash_strings_mr.xtb +++ b/ash/strings/ash_strings_mr.xtb
@@ -280,6 +280,7 @@ <translation id="3207953481422525583">वापरकर्ता सेटिंग्ज</translation> <translation id="3217205077783620295">व्हॉल्यूम सुरू आहे, टॉगल केल्याने ऑडिओ म्यूट होईल.</translation> <translation id="3226991577105957773">आणखी +<ph name="COUNT" /></translation> +<translation id="324366796737464147">नॉइझ कॅंसलेशन</translation> <translation id="3249513730522716925">विंडो <ph name="WINDOW_TITLE" /> डेस्क <ph name="ACTIVE_DESK" /> वरून डेस्क <ph name="TARGET_DESK" /> वर हलवली</translation> <translation id="3255483164551725916">तुला काय करता येते?</translation> <translation id="3269597722229482060">राइट क्लिक</translation>
diff --git a/ash/strings/ash_strings_ne.xtb b/ash/strings/ash_strings_ne.xtb index ea166eb2..f88f7623 100644 --- a/ash/strings/ash_strings_ne.xtb +++ b/ash/strings/ash_strings_ne.xtb
@@ -274,6 +274,7 @@ <translation id="3207953481422525583">प्रयोगकर्ताका सेटिङहरू</translation> <translation id="3217205077783620295">भोल्युम सक्रिय छ, टगल गर्नुले अडियो म्युट गर्ने छ।</translation> <translation id="3226991577105957773">+<ph name="COUNT" /> थप</translation> +<translation id="324366796737464147">ध्वनि खारेजी</translation> <translation id="3249513730522716925">विन्डो सारेर <ph name="WINDOW_TITLE" /> डेस्क <ph name="ACTIVE_DESK" /> बाट <ph name="TARGET_DESK" /> डेस्कमा पुर्याइयो</translation> <translation id="3255483164551725916">तपाईं के गर्न सक्नुहुन्छ?</translation> <translation id="3269597722229482060">दायाँ क्लिक गर्नुहोस्</translation>
diff --git a/ash/strings/ash_strings_ur.xtb b/ash/strings/ash_strings_ur.xtb index a3c92d8..59bee13 100644 --- a/ash/strings/ash_strings_ur.xtb +++ b/ash/strings/ash_strings_ur.xtb
@@ -280,6 +280,7 @@ <translation id="3207953481422525583">صارف کی ترتیبات</translation> <translation id="3217205077783620295">والیوم آن ہے۔ ٹوگل کرنے سے آڈیو خاموش ہو جائے گی۔</translation> <translation id="3226991577105957773"><ph name="COUNT" />+ مزید</translation> +<translation id="324366796737464147">شور کو کم کرنا</translation> <translation id="3249513730522716925"><ph name="WINDOW_TITLE" /> ونڈو کو <ph name="ACTIVE_DESK" /> ڈیسک سے <ph name="TARGET_DESK" /> ڈیسک میں منتقل کر دیا گیا ہے</translation> <translation id="3255483164551725916">آپ کیا کر سکتی ہیں؟</translation> <translation id="3269597722229482060">دائیں طرف کلک کریں</translation>
diff --git a/base/allocator/partition_allocator/thread_cache.cc b/base/allocator/partition_allocator/thread_cache.cc index df069a8..fe5a302 100644 --- a/base/allocator/partition_allocator/thread_cache.cc +++ b/base/allocator/partition_allocator/thread_cache.cc
@@ -29,6 +29,9 @@ } BASE_EXPORT PartitionTlsKey g_thread_cache_key; +#if defined(PA_THREAD_CACHE_FAST_TLS) +BASE_EXPORT thread_local ThreadCache* g_thread_cache; +#endif namespace { // Since |g_thread_cache_key| is shared, make sure that no more than one @@ -384,6 +387,18 @@ // This may allocate. PartitionTlsSet(g_thread_cache_key, tcache); +#if defined(PA_THREAD_CACHE_FAST_TLS) + // |thread_local| variables with destructors cause issues on some platforms. + // Since we need a destructor (to empty the thread cache), we cannot use it + // directly. However, TLS accesses with |thread_local| are typically faster, + // as it can turn into a fixed offset load from a register (GS/FS on Linux + // x86, for instance). On Windows, saving/restoring the last error increases + // cost as well. + // + // To still get good performance, use |thread_local| to store a raw pointer, + // and rely on the platform TLS to call the destructor. + g_thread_cache = tcache; +#endif // defined(PA_THREAD_CACHE_FAST_TLS) return tcache; } @@ -426,6 +441,10 @@ // static void ThreadCache::Delete(void* tcache_ptr) { auto* tcache = reinterpret_cast<ThreadCache*>(tcache_ptr); +#if defined(PA_THREAD_CACHE_FAST_TLS) + g_thread_cache = nullptr; +#endif + auto* root = tcache->root_; reinterpret_cast<ThreadCache*>(tcache_ptr)->~ThreadCache(); root->RawFree(tcache_ptr); @@ -436,7 +455,11 @@ // // TODO(lizeb): Investigate whether this is needed on POSIX as well. PartitionTlsSet(g_thread_cache_key, reinterpret_cast<void*>(kTombstone)); +#if defined(PA_THREAD_CACHE_FAST_TLS) + g_thread_cache = reinterpret_cast<ThreadCache*>(kTombstone); #endif + +#endif // defined(OS_WIN) } ThreadCache::Bucket::Bucket() {
diff --git a/base/allocator/partition_allocator/thread_cache.h b/base/allocator/partition_allocator/thread_cache.h index 00e2515f..ed4d7a8f 100644 --- a/base/allocator/partition_allocator/thread_cache.h +++ b/base/allocator/partition_allocator/thread_cache.h
@@ -19,6 +19,7 @@ #include "base/dcheck_is_on.h" #include "base/gtest_prod_util.h" #include "base/no_destructor.h" +#include "build/build_config.h" namespace base { @@ -27,6 +28,20 @@ class ThreadCache; extern BASE_EXPORT PartitionTlsKey g_thread_cache_key; +// On Windows, |thread_local| variables cannot be marked "dllexport", see +// compiler error C2492 at +// https://docs.microsoft.com/en-us/cpp/error-messages/compiler-errors-1/compiler-error-c2492?view=msvc-160. +// Don't use it there. +// +// On Android, we have to go through emutls, since this is always a shared +// library, so don't bother. +#if !(defined(OS_WIN) && defined(COMPONENT_BUILD)) && !defined(OS_ANDROID) +#define PA_THREAD_CACHE_FAST_TLS +#endif + +#if defined(PA_THREAD_CACHE_FAST_TLS) +extern BASE_EXPORT thread_local ThreadCache* g_thread_cache; +#endif // Global registry of all ThreadCache instances. // @@ -159,7 +174,11 @@ static void EnsureThreadSpecificDataInitialized(); static ThreadCache* Get() { +#if defined(PA_THREAD_CACHE_FAST_TLS) + return g_thread_cache; +#else return reinterpret_cast<ThreadCache*>(PartitionTlsGet(g_thread_cache_key)); +#endif } static bool IsValid(ThreadCache* tcache) {
diff --git a/build/config/c++/c++.gni b/build/config/c++/c++.gni index a7448f3a..8a29ede 100644 --- a/build/config/c++/c++.gni +++ b/build/config/c++/c++.gni
@@ -11,11 +11,12 @@ # standard library support. # Don't check in changes that set this to false for more platforms; doing so # is not supported. - use_custom_libcxx = is_fuchsia || is_android || is_mac || - (is_ios && !use_xcode_clang) || (is_win && is_clang) || - ((is_linux || is_chromeos) && - (!is_chromeos_ash || - default_toolchain != "//build/toolchain/cros:target")) + # We always use system installed libc++ on building chrome (incl. both Ash + # and Lacros Chrome) running on Chrome OS devices with cros-toolchain. + use_custom_libcxx = + is_fuchsia || is_android || is_mac || is_linux || + (is_ios && !use_xcode_clang) || (is_win && is_clang) || + (is_chromeos && default_toolchain != "//build/toolchain/cros:target") # Use libc++ instead of stdlibc++ when using the host_cpu toolchain, even if # use_custom_libcxx is false. This is useful for cross-compiles where a custom
diff --git a/build/config/nacl/rules.gni b/build/config/nacl/rules.gni index c08357c..834c461 100644 --- a/build/config/nacl/rules.gni +++ b/build/config/nacl/rules.gni
@@ -3,7 +3,6 @@ # found in the LICENSE file. import("//build/config/nacl/config.gni") -import("//build/config/python.gni") # Generate a nmf file # @@ -20,8 +19,7 @@ assert(defined(invoker.executables), "Must define executables") assert(defined(invoker.nmf), "Must define nmf") - # TODO(crbug.com/1112471): Get this to run cleanly under Python 3. - python2_action(target_name) { + action(target_name) { forward_variables_from(invoker, [ "deps",
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index 00ff4fa..711d5401 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -4.20210531.3.1 +4.20210601.1.1
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index 00ff4fa..711d5401 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -4.20210531.3.1 +4.20210601.1.1
diff --git a/buildtools/reclient_cfgs/win-cross-experiments/rewrapper_windows.cfg b/buildtools/reclient_cfgs/win-cross-experiments/rewrapper_windows.cfg new file mode 100644 index 0000000..95d0386 --- /dev/null +++ b/buildtools/reclient_cfgs/win-cross-experiments/rewrapper_windows.cfg
@@ -0,0 +1,6 @@ +platform=container-image=docker://gcr.io/goma-foundry-experiments/re-client/chromium-win-cross@sha256:962da618112151bdf80418e55914a1e16ab64cea3846d23642c8fd191740d428,OSFamily=Linux +server_address=pipe://reproxy.pipe +labels=type=compile,compiler=clang-cl,lang=cpp +exec_strategy=remote_local_fallback +windows_cross=true +remote_wrapper=/chromium-browser-clang/run.sh
diff --git a/buildtools/reclient_cfgs/win-cross-experiments/rewrapper_windows_nacl.cfg b/buildtools/reclient_cfgs/win-cross-experiments/rewrapper_windows_nacl.cfg new file mode 100644 index 0000000..dbaaf3e --- /dev/null +++ b/buildtools/reclient_cfgs/win-cross-experiments/rewrapper_windows_nacl.cfg
@@ -0,0 +1,7 @@ +platform=container-image=docker://gcr.io/goma-foundry-experiments/re-client/chromium-win-nacl-cross@sha256:54b6b74aaaa023083112f37d32891800d0731984b2bcc63fcb35fb0b8c2b3f65,OSFamily=Linux +server_address=pipe://reproxy.pipe +labels=type=compile,compiler=nacl,lang=cpp +exec_strategy=remote_local_fallback +inputs=native_client/toolchain/win_x86/pnacl_newlib +windows_cross=true +remote_wrapper=/native_client/run.sh
diff --git a/cc/paint/oop_pixeltest.cc b/cc/paint/oop_pixeltest.cc index 272dede..811a994a 100644 --- a/cc/paint/oop_pixeltest.cc +++ b/cc/paint/oop_pixeltest.cc
@@ -1995,7 +1995,12 @@ }; TEST_P(OopTextBlobPixelTest, Config) { +#if defined(OS_ANDROID) && defined(ARCH_CPU_X86_FAMILY) + // Broken on emulators: https://crbug.com/1189284 + GTEST_SKIP(); +#else RunTest(); +#endif } INSTANTIATE_TEST_SUITE_P(
diff --git a/cc/trees/layer_tree_host_pixeltest_masks.cc b/cc/trees/layer_tree_host_pixeltest_masks.cc index d858c5ba..26d6d288 100644 --- a/cc/trees/layer_tree_host_pixeltest_masks.cc +++ b/cc/trees/layer_tree_host_pixeltest_masks.cc
@@ -308,7 +308,8 @@ .InsertBeforeExtensionASCII(GetRendererSuffix())); } -TEST_P(LayerTreeHostMaskPixelTestWithLayerList, MaskWithEffectDifferentSize) { +TEST_P(LayerTreeHostMaskPixelTestWithLayerList, + DISABLED_MaskWithEffectDifferentSize) { mask_bounds_ = gfx::Size(25, 25); MaskContentLayerClient client(mask_bounds_); mask_layer_ = PictureLayer::Create(&client);
diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni index db11585e..5b5ed48 100644 --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni
@@ -852,6 +852,7 @@ "java/res/layout/url_action_container.xml", "java/res/layout/url_bar.xml", "java/res/layout/webapk_icon_name_update_dialog.xml", + "java/res/layout/webapk_update_report_abuse_custom_view.xml", "java/res/menu/bookmark_action_bar_menu.xml", "java/res/menu/custom_tabs_menu.xml", "java/res/menu/history_manager_menu.xml",
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni index f9c8d98..97a4f17f 100644 --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni
@@ -1375,6 +1375,7 @@ "java/src/org/chromium/chrome/browser/webapps/WebApkUkmRecorder.java", "java/src/org/chromium/chrome/browser/webapps/WebApkUpdateDataFetcher.java", "java/src/org/chromium/chrome/browser/webapps/WebApkUpdateManager.java", + "java/src/org/chromium/chrome/browser/webapps/WebApkUpdateReportAbuseDialog.java", "java/src/org/chromium/chrome/browser/webapps/WebApkUpdateTask.java", "java/src/org/chromium/chrome/browser/webapps/WebApkVersionManager.java", "java/src/org/chromium/chrome/browser/webapps/WebappActionsNotificationManager.java",
diff --git a/chrome/android/features/autofill_assistant/java/res/layout/autofill_assistant_address_full.xml b/chrome/android/features/autofill_assistant/java/res/layout/autofill_assistant_address_full.xml index 7a0febd..21fed24 100644 --- a/chrome/android/features/autofill_assistant/java/res/layout/autofill_assistant_address_full.xml +++ b/chrome/android/features/autofill_assistant/java/res/layout/autofill_assistant_address_full.xml
@@ -24,9 +24,6 @@ android:id="@+id/incomplete_error" android:layout_width="match_parent" android:layout_height="wrap_content" - android:ellipsize="end" - android:maxLines="1" - android:text="@string/autofill_assistant_payment_information_missing" android:textAppearance="@style/TextAppearance.ErrorCaption" android:visibility="gone"/> </LinearLayout> \ No newline at end of file
diff --git a/chrome/android/features/autofill_assistant/java/res/layout/autofill_assistant_contact_full.xml b/chrome/android/features/autofill_assistant/java/res/layout/autofill_assistant_contact_full.xml index 18973b4..910f723 100644 --- a/chrome/android/features/autofill_assistant/java/res/layout/autofill_assistant_contact_full.xml +++ b/chrome/android/features/autofill_assistant/java/res/layout/autofill_assistant_contact_full.xml
@@ -18,7 +18,6 @@ android:id="@+id/incomplete_error" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="@string/autofill_assistant_payment_information_missing" android:textAppearance="@style/TextAppearance.ErrorCaption" android:visibility="gone"/> </LinearLayout> \ No newline at end of file
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataBinder.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataBinder.java index 4dc22f94..d22b7fc 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataBinder.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataBinder.java
@@ -15,10 +15,10 @@ import org.chromium.chrome.browser.autofill.settings.AddressEditor; import org.chromium.chrome.browser.autofill.settings.CardEditor; import org.chromium.chrome.browser.autofill_assistant.generic_ui.AssistantValue; +import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantCollectUserDataModel.AddressModel; import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantCollectUserDataModel.ContactModel; import org.chromium.chrome.browser.autofill_assistant.user_data.additional_sections.AssistantAdditionalSection.Delegate; import org.chromium.chrome.browser.autofill_assistant.user_data.additional_sections.AssistantAdditionalSectionContainer; -import org.chromium.chrome.browser.payments.AutofillAddress; import org.chromium.chrome.browser.payments.AutofillPaymentInstrument; import org.chromium.chrome.browser.payments.ContactEditor; import org.chromium.chrome.browser.profiles.Profile; @@ -180,12 +180,9 @@ view.mPaymentMethodSection.setCompletenessDelegate(collectUserDataDelegate != null ? collectUserDataDelegate::isPaymentInstrumentComplete : null); - view.mShippingAddressSection.setListener(collectUserDataDelegate != null - ? collectUserDataDelegate::onShippingAddressChanged - : null); - view.mShippingAddressSection.setCompletenessDelegate(collectUserDataDelegate != null - ? collectUserDataDelegate::isShippingAddressComplete - : null); + view.mShippingAddressSection.setListener(collectUserDataDelegate == null + ? null + : m -> collectUserDataDelegate.onShippingAddressChanged(m.mOption)); view.mLoginSection.setListener(collectUserDataDelegate != null ? collectUserDataDelegate::onLoginChoiceChanged : null); @@ -478,7 +475,7 @@ // This prevents creating a loop. if (propertyKey == AssistantCollectUserDataModel.SELECTED_SHIPPING_ADDRESS) { if (model.get(AssistantCollectUserDataModel.REQUEST_SHIPPING_ADDRESS)) { - AutofillAddress shippingAddress = + AddressModel shippingAddress = model.get(AssistantCollectUserDataModel.SELECTED_SHIPPING_ADDRESS); if (shippingAddress != null) { view.mShippingAddressSection.addOrUpdateItem(
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataDelegate.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataDelegate.java index 97b6741..ea8f37c3 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataDelegate.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataDelegate.java
@@ -55,12 +55,6 @@ void onInputTextFocusChanged(boolean isFocused); /** - * Returns true if the shipping address is complete. - * TODO(b/154068342): Remove this method and send the error message from |Controller|. - */ - boolean isShippingAddressComplete(@Nullable AutofillAddress address); - - /** * Returns true if the payment instrument is complete. * TODO(b/154068342): Remove this method and send the error message from |Controller|. */
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataModel.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataModel.java index c6b8069b..cf2b693 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataModel.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataModel.java
@@ -90,6 +90,17 @@ } } + /** Model wrapper for an {@code AutofillAddress}. */ + public static class AddressModel extends OptionModel<AutofillAddress> { + public AddressModel(AutofillAddress address, List<String> errors) { + super(address, errors); + } + + public AddressModel(AutofillAddress address) { + super(address); + } + } + public static final WritableObjectPropertyKey<AssistantCollectUserDataDelegate> DELEGATE = new WritableObjectPropertyKey<>(); @@ -100,7 +111,7 @@ public static final WritableBooleanPropertyKey VISIBLE = new WritableBooleanPropertyKey(); /** The chosen shipping address. */ - public static final WritableObjectPropertyKey<AutofillAddress> SELECTED_SHIPPING_ADDRESS = + public static final WritableObjectPropertyKey<AddressModel> SELECTED_SHIPPING_ADDRESS = new WritableObjectPropertyKey<>(); /** The chosen payment method (including billing address). */ @@ -150,8 +161,8 @@ public static final WritableObjectPropertyKey<List<ContactModel>> AVAILABLE_CONTACTS = new WritableObjectPropertyKey<>(); - public static final WritableObjectPropertyKey<List<AutofillAddress>> - AVAILABLE_SHIPPING_ADDRESSES = new WritableObjectPropertyKey<>(); + public static final WritableObjectPropertyKey<List<AddressModel>> AVAILABLE_SHIPPING_ADDRESSES = + new WritableObjectPropertyKey<>(); public static final WritableObjectPropertyKey<List<AutofillPaymentInstrument>> AVAILABLE_PAYMENT_INSTRUMENTS = new WritableObjectPropertyKey<>(); @@ -388,8 +399,11 @@ } @CalledByNative - private void setSelectedShippingAddress(@Nullable AutofillAddress shippingAddress) { - set(SELECTED_SHIPPING_ADDRESS, shippingAddress); + private void setSelectedShippingAddress( + @Nullable AutofillAddress shippingAddress, String[] errors) { + set(SELECTED_SHIPPING_ADDRESS, + shippingAddress == null ? null + : new AddressModel(shippingAddress, Arrays.asList(errors))); } @CalledByNative @@ -621,14 +635,14 @@ } @CalledByNative - private static List<AutofillAddress> createAutofillAddressList() { + private static List<AddressModel> createShippingAddressList() { return new ArrayList<>(); } @CalledByNative - private static void addAutofillAddress( - List<AutofillAddress> addresses, AutofillAddress address) { - addresses.add(address); + private static void addShippingAddress( + List<AddressModel> addresses, AutofillAddress address, String[] errors) { + addresses.add(new AddressModel(address, Arrays.asList(errors))); } @VisibleForTesting @@ -643,11 +657,22 @@ } @CalledByNative - private void setAvailableShippingAddresses(List<AutofillAddress> addresses) { + private void setAvailableShippingAddresses(List<AddressModel> addresses) { set(AVAILABLE_SHIPPING_ADDRESSES, addresses); } @CalledByNative + private static List<AutofillAddress> createBillingAddressList() { + return new ArrayList<>(); + } + + @CalledByNative + private static void addBillingAddress( + List<AutofillAddress> addresses, AutofillAddress address) { + addresses.add(address); + } + + @CalledByNative private void setAvailableBillingAddresses(List<AutofillAddress> addresses) { set(AVAILABLE_BILLING_ADDRESSES, addresses); }
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataNativeDelegate.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataNativeDelegate.java index 082c92b..9495afc 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataNativeDelegate.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataNativeDelegate.java
@@ -170,18 +170,6 @@ } @Override - public boolean isShippingAddressComplete(@Nullable AutofillAddress address) { - if (mNativeAssistantCollectUserDataDelegate != 0) { - return AssistantCollectUserDataNativeDelegateJni.get().isShippingAddressComplete( - mNativeAssistantCollectUserDataDelegate, - AssistantCollectUserDataNativeDelegate.this, - address != null ? address.getProfile() : null); - } - - return false; - } - - @Override public boolean isPaymentInstrumentComplete( @Nullable AutofillPaymentInstrument paymentInstrument) { if (mNativeAssistantCollectUserDataDelegate != 0) { @@ -238,9 +226,6 @@ AssistantCollectUserDataNativeDelegate caller, String key, AssistantValue value); void onInputTextFocusChanged(long nativeAssistantCollectUserDataDelegate, AssistantCollectUserDataNativeDelegate caller, boolean isFocused); - boolean isShippingAddressComplete(long nativeAssistantCollectUserDataDelegate, - AssistantCollectUserDataNativeDelegate caller, - @Nullable PersonalDataManager.AutofillProfile address); boolean isPaymentInstrumentComplete(long nativeAssistantCollectUserDataDelegate, AssistantCollectUserDataNativeDelegate caller, @Nullable PersonalDataManager.CreditCard card,
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantShippingAddressSection.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantShippingAddressSection.java index 199d565..c1e51c92 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantShippingAddressSection.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantShippingAddressSection.java
@@ -16,15 +16,15 @@ import org.chromium.chrome.autofill_assistant.R; import org.chromium.chrome.browser.autofill.PersonalDataManager; import org.chromium.chrome.browser.autofill.settings.AddressEditor; +import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantCollectUserDataModel.AddressModel; import org.chromium.chrome.browser.payments.AutofillAddress; import java.util.List; /** - * The payment method section of the Autofill Assistant payment request. + * The shipping address section of the Autofill Assistant payment request. */ -public class AssistantShippingAddressSection - extends AssistantCollectUserDataSection<AutofillAddress> { +public class AssistantShippingAddressSection extends AssistantCollectUserDataSection<AddressModel> { private AddressEditor mEditor; private boolean mIgnoreProfileChangeNotifications; @@ -42,76 +42,84 @@ } @Override - protected void createOrEditItem(@Nullable AutofillAddress oldItem) { + protected void createOrEditItem(@Nullable AddressModel oldItem) { if (mEditor == null) { return; } - mEditor.edit(oldItem, newItem -> { - assert (newItem != null && newItem.isComplete()); + mEditor.edit(oldItem == null ? null : oldItem.mOption, address -> { + assert (address != null && address.isComplete()); mIgnoreProfileChangeNotifications = true; - addOrUpdateItem(newItem, /* select= */ true, /* notify= */ true); + addOrUpdateItem(new AddressModel(address), /* select= */ true, /* notify= */ true); mIgnoreProfileChangeNotifications = false; }, cancel -> {}); } @Override - protected void updateFullView(View fullView, AutofillAddress address) { - if (address == null) { + protected void updateFullView(View fullView, @Nullable AddressModel model) { + if (model == null) { return; } TextView fullNameView = fullView.findViewById(R.id.full_name); - fullNameView.setText(address.getProfile().getFullName()); + fullNameView.setText(model.mOption.getProfile().getFullName()); hideIfEmpty(fullNameView); TextView fullAddressView = fullView.findViewById(R.id.full_address); - fullAddressView.setText( - PersonalDataManager.getInstance() - .getShippingAddressLabelWithCountryForPaymentRequest(address.getProfile())); + fullAddressView.setText(PersonalDataManager.getInstance() + .getShippingAddressLabelWithCountryForPaymentRequest( + model.mOption.getProfile())); hideIfEmpty(fullAddressView); - TextView methodIncompleteView = fullView.findViewById(R.id.incomplete_error); - methodIncompleteView.setVisibility(isComplete(address) ? View.GONE : View.VISIBLE); + TextView errorView = fullView.findViewById(R.id.incomplete_error); + if (model.mErrors.isEmpty()) { + errorView.setText(""); + errorView.setVisibility(View.GONE); + } else { + errorView.setText(TextUtils.join("\n", model.mErrors)); + errorView.setVisibility(View.VISIBLE); + } } @Override - protected void updateSummaryView(View summaryView, AutofillAddress address) { - if (address == null) { + protected void updateSummaryView(View summaryView, @Nullable AddressModel model) { + if (model == null) { return; } TextView fullNameView = summaryView.findViewById(R.id.full_name); - fullNameView.setText(address.getProfile().getFullName()); + fullNameView.setText(model.mOption.getProfile().getFullName()); hideIfEmpty(fullNameView); TextView shortAddressView = summaryView.findViewById(R.id.short_address); shortAddressView.setText(PersonalDataManager.getInstance() .getShippingAddressLabelWithoutCountryForPaymentRequest( - address.getProfile())); + model.mOption.getProfile())); hideIfEmpty(shortAddressView); - TextView methodIncompleteView = summaryView.findViewById(R.id.incomplete_error); - methodIncompleteView.setVisibility(isComplete(address) ? View.GONE : View.VISIBLE); + TextView errorView = summaryView.findViewById(R.id.incomplete_error); + errorView.setVisibility(model.mErrors.isEmpty() ? View.GONE : View.VISIBLE); } @Override - protected boolean canEditOption(AutofillAddress address) { + protected boolean canEditOption(AddressModel model) { return true; } @Override - protected @DrawableRes int getEditButtonDrawable(AutofillAddress address) { + protected @DrawableRes int getEditButtonDrawable(AddressModel model) { return R.drawable.ic_edit_24dp; } @Override - protected String getEditButtonContentDescription(AutofillAddress address) { + protected String getEditButtonContentDescription(AddressModel model) { return mContext.getString(R.string.payments_edit_address); } @Override - protected boolean areEqual(AutofillAddress optionA, AutofillAddress optionB) { - if (optionA == null || optionB == null) { - return optionA == optionB; + protected boolean areEqual(AddressModel modelA, AddressModel modelB) { + if (modelA == null || modelB == null) { + return modelA == modelB; } + AutofillAddress optionA = modelA.mOption; + AutofillAddress optionB = modelB.mOption; if (TextUtils.equals(optionA.getIdentifier(), optionB.getIdentifier())) { return true; } @@ -127,7 +135,7 @@ * The Chrome profiles have changed externally. This will rebuild the UI with the new/changed * set of addresses derived from the profiles, while keeping the selected item if possible. */ - void onAddressesChanged(List<AutofillAddress> addresses) { + void onAddressesChanged(List<AddressModel> addresses) { if (mIgnoreProfileChangeNotifications) { return; } @@ -147,13 +155,13 @@ } @Override - protected void addOrUpdateItem(AutofillAddress address, boolean select, boolean notify) { - super.addOrUpdateItem(address, select, notify); + protected void addOrUpdateItem(AddressModel model, boolean select, boolean notify) { + super.addOrUpdateItem(model, select, notify); // Update autocomplete information in the editor. if (mEditor == null) { return; } - mEditor.addPhoneNumberIfValid(address.getProfile().getPhoneNumber()); + mEditor.addPhoneNumberIfValid(model.mOption.getProfile().getPhoneNumber()); } } \ No newline at end of file
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataTestHelper.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataTestHelper.java index f63b9478..a9eb47e 100644 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataTestHelper.java +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataTestHelper.java
@@ -180,11 +180,6 @@ public void onInputTextFocusChanged(boolean isFocused) {} @Override - public boolean isShippingAddressComplete(@Nullable AutofillAddress address) { - return address != null && address.isComplete(); - } - - @Override public boolean isPaymentInstrumentComplete( @Nullable AutofillPaymentInstrument paymentInstrument) { return paymentInstrument != null && paymentInstrument.isComplete();
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataUiTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataUiTest.java index 79ba7e7..7e19251 100644 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataUiTest.java +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataUiTest.java
@@ -59,6 +59,7 @@ import org.chromium.chrome.browser.autofill_assistant.generic_ui.AssistantValue; import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantCollectUserDataCoordinator; import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantCollectUserDataModel; +import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantCollectUserDataModel.AddressModel; import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantCollectUserDataModel.ContactModel; import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantContactField; import org.chromium.chrome.browser.autofill_assistant.user_data.AssistantDateChoiceOptions; @@ -661,8 +662,9 @@ AutofillAddress address = AssistantCollectUserDataModel.createAutofillAddress( mTestRule.getActivity(), profile); model.set(AssistantCollectUserDataModel.AVAILABLE_SHIPPING_ADDRESSES, - Collections.singletonList(address)); - model.set(AssistantCollectUserDataModel.SELECTED_SHIPPING_ADDRESS, address); + Collections.singletonList(new AddressModel(address))); + model.set(AssistantCollectUserDataModel.SELECTED_SHIPPING_ADDRESS, + new AddressModel(address)); AutofillPaymentInstrument paymentInstrument = AssistantCollectUserDataModel.createAutofillPaymentInstrument( mTestRule.getWebContents(), creditCard, profile); @@ -744,7 +746,7 @@ AutofillAddress address = AssistantCollectUserDataModel.createAutofillAddress( mTestRule.getActivity(), profile); model.set(AssistantCollectUserDataModel.AVAILABLE_SHIPPING_ADDRESSES, - Collections.singletonList(address)); + Collections.singletonList(new AddressModel(address))); AutofillPaymentInstrument paymentInstrument = AssistantCollectUserDataModel.createAutofillPaymentInstrument( mTestRule.getWebContents(), creditCard, profile);
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantInputActionIntegrationTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantInputActionIntegrationTest.java index 97b511f0..d745c53 100644 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantInputActionIntegrationTest.java +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantInputActionIntegrationTest.java
@@ -34,12 +34,10 @@ import org.chromium.chrome.browser.autofill_assistant.proto.CheckElementIsOnTopProto; import org.chromium.chrome.browser.autofill_assistant.proto.ChipProto; import org.chromium.chrome.browser.autofill_assistant.proto.ChipType; -import org.chromium.chrome.browser.autofill_assistant.proto.ClickProto; -import org.chromium.chrome.browser.autofill_assistant.proto.ClickType; import org.chromium.chrome.browser.autofill_assistant.proto.ClientIdProto; import org.chromium.chrome.browser.autofill_assistant.proto.ElementConditionProto; +import org.chromium.chrome.browser.autofill_assistant.proto.JsClickProto; import org.chromium.chrome.browser.autofill_assistant.proto.KeyboardValueFillStrategy; -import org.chromium.chrome.browser.autofill_assistant.proto.OptionalStep; import org.chromium.chrome.browser.autofill_assistant.proto.ProcessedActionProto; import org.chromium.chrome.browser.autofill_assistant.proto.ProcessedActionStatusProto; import org.chromium.chrome.browser.autofill_assistant.proto.PromptProto; @@ -53,6 +51,7 @@ import org.chromium.chrome.browser.autofill_assistant.proto.SendChangeEventProto; import org.chromium.chrome.browser.autofill_assistant.proto.SendClickEventProto; import org.chromium.chrome.browser.autofill_assistant.proto.SendKeystrokeEventsProto; +import org.chromium.chrome.browser.autofill_assistant.proto.SendTapEventProto; import org.chromium.chrome.browser.autofill_assistant.proto.SetElementAttributeProto; import org.chromium.chrome.browser.autofill_assistant.proto.SetFormFieldValueProto; import org.chromium.chrome.browser.autofill_assistant.proto.SetFormFieldValueProto.KeyPress; @@ -430,17 +429,26 @@ @MediumTest public void clickingOnElementToHide() throws Exception { ArrayList<ActionProto> list = new ArrayList<>(); + ClientIdProto clientId = ClientIdProto.newBuilder().setIdentifier("e").build(); SelectorProto element_click = - (SelectorProto) SelectorProto.newBuilder() + SelectorProto.newBuilder() .addFilters(Filter.newBuilder().setCssSelector("#touch_area_one")) .build(); - list.add((ActionProto) ActionProto.newBuilder() - .setClick(ClickProto.newBuilder() - .setElementToClick(element_click) - .setClickType(ClickType.CLICK)) + list.add(ActionProto.newBuilder() + .setWaitForDom( + WaitForDomProto.newBuilder().setTimeoutMs(1000).setWaitCondition( + ElementConditionProto.newBuilder() + .setMatch(element_click) + .setClientId(clientId))) .build()); - list.add((ActionProto) ActionProto.newBuilder() + list.add(ActionProto.newBuilder() + .setScrollIntoView(ScrollIntoViewProto.newBuilder().setClientId(clientId)) + .build()); + list.add(ActionProto.newBuilder() + .setSendClickEvent(SendClickEventProto.newBuilder().setClientId(clientId)) + .build()); + list.add(ActionProto.newBuilder() .setPrompt(PromptProto.newBuilder().setMessage("Click").addChoices( Choice.newBuilder().setChip( ChipProto.newBuilder() @@ -448,15 +456,23 @@ .setText("Continue")))) .build()); SelectorProto element_tap = - (SelectorProto) SelectorProto.newBuilder() + SelectorProto.newBuilder() .addFilters(Filter.newBuilder().setCssSelector("#touch_area_five")) .build(); - list.add((ActionProto) ActionProto.newBuilder() - .setClick(ClickProto.newBuilder() - .setElementToClick(element_tap) - .setClickType(ClickType.TAP)) + list.add(ActionProto.newBuilder() + .setWaitForDom( + WaitForDomProto.newBuilder().setTimeoutMs(1000).setWaitCondition( + ElementConditionProto.newBuilder() + .setMatch(element_tap) + .setClientId(clientId))) .build()); - list.add((ActionProto) ActionProto.newBuilder() + list.add(ActionProto.newBuilder() + .setScrollIntoView(ScrollIntoViewProto.newBuilder().setClientId(clientId)) + .build()); + list.add(ActionProto.newBuilder() + .setSendTapEvent(SendTapEventProto.newBuilder().setClientId(clientId)) + .build()); + list.add(ActionProto.newBuilder() .setPrompt(PromptProto.newBuilder().setMessage("Tap").addChoices( Choice.newBuilder().setChip( ChipProto.newBuilder() @@ -464,15 +480,23 @@ .setText("Continue")))) .build()); SelectorProto element_js = - (SelectorProto) SelectorProto.newBuilder() + SelectorProto.newBuilder() .addFilters(Filter.newBuilder().setCssSelector("#touch_area_six")) .build(); - list.add((ActionProto) ActionProto.newBuilder() - .setClick(ClickProto.newBuilder() - .setElementToClick(element_js) - .setClickType(ClickType.JAVASCRIPT)) + list.add(ActionProto.newBuilder() + .setWaitForDom( + WaitForDomProto.newBuilder().setTimeoutMs(1000).setWaitCondition( + ElementConditionProto.newBuilder() + .setMatch(element_js) + .setClientId(clientId))) .build()); - list.add((ActionProto) ActionProto.newBuilder() + list.add(ActionProto.newBuilder() + .setScrollIntoView(ScrollIntoViewProto.newBuilder().setClientId(clientId)) + .build()); + list.add(ActionProto.newBuilder() + .setJsClick(JsClickProto.newBuilder().setClientId(clientId)) + .build()); + list.add(ActionProto.newBuilder() .setPrompt(PromptProto.newBuilder().setMessage("JS").addChoices( Choice.newBuilder())) .build()); @@ -507,22 +531,37 @@ checkElementExists(mTestRule.getWebContents(), "overlay"); showOverlay(); - // This script attempts to click 3 times on #button: - // 1. the first click action clicks without checking for overlays - // 2. the second click action checks, finds an overlay, but clicks anyway - // 3. the third click action finds an overlay and fails + // This script attempts to click 2 times on #button: + // 1. the first click chain clicks without checking for overlays + // 2. the second click chain finds an overlay and fails SelectorProto.Builder button = SelectorProto.newBuilder().addFilters( Filter.newBuilder().setCssSelector("#button")); - ClickProto.Builder click = ClickProto.newBuilder().setElementToClick(button); + ClientIdProto clientId = ClientIdProto.newBuilder().setIdentifier("e").build(); ArrayList<ActionProto> actions = new ArrayList<>(); actions.add( - ActionProto.newBuilder().setClick(click.setOnTop(OptionalStep.SKIP_STEP)).build()); + ActionProto.newBuilder() + .setWaitForDom( + WaitForDomProto.newBuilder().setTimeoutMs(1000).setWaitCondition( + ElementConditionProto.newBuilder() + .setMatch(button) + .setClientId(clientId))) + .build()); + actions.add( + ActionProto.newBuilder() + .setScrollIntoView(ScrollIntoViewProto.newBuilder().setClientId(clientId)) + .build()); + actions.add( + ActionProto.newBuilder() + .setSendClickEvent(SendClickEventProto.newBuilder().setClientId(clientId)) + .build()); actions.add(ActionProto.newBuilder() - .setClick(click.setOnTop(OptionalStep.REPORT_STEP_RESULT)) + .setCheckElementIsOnTop( + CheckElementIsOnTopProto.newBuilder().setClientId(clientId)) .build()); - actions.add(ActionProto.newBuilder() - .setClick(click.setOnTop(OptionalStep.REQUIRE_STEP_SUCCESS)) - .build()); + actions.add( + ActionProto.newBuilder() + .setSendClickEvent(SendClickEventProto.newBuilder().setClientId(clientId)) + .build()); AutofillAssistantTestService testService = new AutofillAssistantTestService( Collections.singletonList(new AutofillAssistantTestScript(TEST_SCRIPT, actions))); @@ -530,12 +569,9 @@ testService.waitUntilGetNextActions(1); List<ProcessedActionProto> processed = testService.getProcessedActions(); - assertThat(processed, hasSize(3)); + assertThat(processed, hasSize(2)); assertThat(processed.get(0).getStatus(), is(ProcessedActionStatusProto.ACTION_APPLIED)); - assertThat(processed.get(1).getStatus(), is(ProcessedActionStatusProto.ACTION_APPLIED)); - assertThat(processed.get(1).getStatusDetails().getOriginalStatus(), - is(ProcessedActionStatusProto.ELEMENT_NOT_ON_TOP)); - assertThat(processed.get(2).getStatus(), is(ProcessedActionStatusProto.ELEMENT_NOT_ON_TOP)); + assertThat(processed.get(1).getStatus(), is(ProcessedActionStatusProto.ELEMENT_NOT_ON_TOP)); } @Test
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantInterruptIntegrationTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantInterruptIntegrationTest.java index d229c526..29b94bd 100644 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantInterruptIntegrationTest.java +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantInterruptIntegrationTest.java
@@ -37,8 +37,7 @@ import org.chromium.chrome.browser.autofill_assistant.proto.CallbackProto; import org.chromium.chrome.browser.autofill_assistant.proto.ChipProto; import org.chromium.chrome.browser.autofill_assistant.proto.ChipType; -import org.chromium.chrome.browser.autofill_assistant.proto.ClickProto; -import org.chromium.chrome.browser.autofill_assistant.proto.ClickType; +import org.chromium.chrome.browser.autofill_assistant.proto.ClientIdProto; import org.chromium.chrome.browser.autofill_assistant.proto.ComputeValueProto; import org.chromium.chrome.browser.autofill_assistant.proto.ConfigureUiStateProto; import org.chromium.chrome.browser.autofill_assistant.proto.ConfigureUiStateProto.OverlayBehavior; @@ -56,7 +55,9 @@ import org.chromium.chrome.browser.autofill_assistant.proto.ProcessedActionStatusProto; import org.chromium.chrome.browser.autofill_assistant.proto.PromptProto; import org.chromium.chrome.browser.autofill_assistant.proto.ScriptPreconditionProto; +import org.chromium.chrome.browser.autofill_assistant.proto.ScrollIntoViewProto; import org.chromium.chrome.browser.autofill_assistant.proto.SelectorProto; +import org.chromium.chrome.browser.autofill_assistant.proto.SendClickEventProto; import org.chromium.chrome.browser.autofill_assistant.proto.SetUserActionsProto; import org.chromium.chrome.browser.autofill_assistant.proto.ShowGenericUiProto; import org.chromium.chrome.browser.autofill_assistant.proto.StringList; @@ -71,6 +72,7 @@ import org.chromium.chrome.browser.autofill_assistant.proto.ValueProto; import org.chromium.chrome.browser.autofill_assistant.proto.ValueReferenceProto; import org.chromium.chrome.browser.autofill_assistant.proto.ViewProto; +import org.chromium.chrome.browser.autofill_assistant.proto.WaitForDomProto; import org.chromium.chrome.browser.customtabs.CustomTabActivityTestRule; import org.chromium.chrome.browser.customtabs.CustomTabsTestUtils; import org.chromium.chrome.browser.flags.ChromeSwitches; @@ -115,30 +117,30 @@ public void testInterruptClicksElementDuringPrompt() throws Exception { ArrayList<AutofillAssistantTestScript> scripts = new ArrayList<>(); SelectorProto touch_area_one = - (SelectorProto) SelectorProto.newBuilder() + SelectorProto.newBuilder() .addFilters( SelectorProto.Filter.newBuilder().setCssSelector("#touch_area_one")) .build(); SelectorProto touch_area_four = - (SelectorProto) SelectorProto.newBuilder() + SelectorProto.newBuilder() .addFilters(SelectorProto.Filter.newBuilder().setCssSelector( "#touch_area_four")) .build(); ArrayList<ActionProto> list = new ArrayList<>(); - list.add((ActionProto) ActionProto.newBuilder() + list.add(ActionProto.newBuilder() .setConfigureUiState(ConfigureUiStateProto.newBuilder().setOverlayBehavior( OverlayBehavior.HIDDEN)) .build()); - list.add((ActionProto) ActionProto.newBuilder() + list.add(ActionProto.newBuilder() .setPrompt(PromptProto.newBuilder().setAllowInterrupt(true).addChoices( PromptProto.Choice.newBuilder().setChip( ChipProto.newBuilder().setText("Prompt")))) .build()); AutofillAssistantTestScript script = new AutofillAssistantTestScript( - (SupportedScriptProto) SupportedScriptProto.newBuilder() + SupportedScriptProto.newBuilder() .setPath(MAIN_SCRIPT_PATH) .setPresentation(PresentationProto.newBuilder().setAutostart(true).setChip( ChipProto.newBuilder().setText("Done"))) @@ -147,11 +149,23 @@ scripts.add(script); ArrayList<ActionProto> interruptActionList = new ArrayList<>(); - interruptActionList.add((ActionProto) ActionProto.newBuilder() - .setClick(ClickProto.newBuilder() - .setElementToClick(touch_area_one) - .setClickType(ClickType.CLICK)) - .build()); + ClientIdProto clientId = ClientIdProto.newBuilder().setIdentifier("e").build(); + interruptActionList.add( + ActionProto.newBuilder() + .setWaitForDom( + WaitForDomProto.newBuilder().setTimeoutMs(1000).setWaitCondition( + ElementConditionProto.newBuilder() + .setMatch(touch_area_one) + .setClientId(clientId))) + .build()); + interruptActionList.add( + ActionProto.newBuilder() + .setScrollIntoView(ScrollIntoViewProto.newBuilder().setClientId(clientId)) + .build()); + interruptActionList.add( + ActionProto.newBuilder() + .setSendClickEvent(SendClickEventProto.newBuilder().setClientId(clientId)) + .build()); // The interrupt triggers when touch_area_one is present but touch_area_four is gone, so // that we can trigger it manually. @@ -168,7 +182,7 @@ .build(); AutofillAssistantTestScript interruptScript = new AutofillAssistantTestScript( - (SupportedScriptProto) SupportedScriptProto.newBuilder() + SupportedScriptProto.newBuilder() .setPath(INTERRUPT_SCRIPT_PATH) .setPresentation(PresentationProto.newBuilder() .setChip(ChipProto.newBuilder().setText("Done")) @@ -200,25 +214,25 @@ public void testInterruptCicksElementDuringShowGenericUi() throws Exception { ArrayList<AutofillAssistantTestScript> scripts = new ArrayList<>(); SelectorProto touch_area_one = - (SelectorProto) SelectorProto.newBuilder() + SelectorProto.newBuilder() .addFilters( SelectorProto.Filter.newBuilder().setCssSelector("#touch_area_one")) .build(); SelectorProto touch_area_four = - (SelectorProto) SelectorProto.newBuilder() + SelectorProto.newBuilder() .addFilters(SelectorProto.Filter.newBuilder().setCssSelector( "#touch_area_four")) .build(); ArrayList<ActionProto> list = new ArrayList<>(); - list.add((ActionProto) ActionProto.newBuilder() + list.add(ActionProto.newBuilder() .setConfigureUiState(ConfigureUiStateProto.newBuilder().setOverlayBehavior( OverlayBehavior.HIDDEN)) .build()); List<InteractionProto> interactions = new ArrayList<>(); interactions.add( - (InteractionProto) InteractionProto.newBuilder() + InteractionProto.newBuilder() .addTriggerEvent(EventProto.newBuilder().setOnValueChanged( OnModelValueChangedEventProto.newBuilder().setModelIdentifier( "chips"))) @@ -227,7 +241,7 @@ ValueReferenceProto.newBuilder().setModelIdentifier( "chips")))) .build()); - interactions.add((InteractionProto) InteractionProto.newBuilder() + interactions.add(InteractionProto.newBuilder() .addTriggerEvent(EventProto.newBuilder().setOnUserActionCalled( OnUserActionCalled.newBuilder().setUserActionIdentifier( "done_chip"))) @@ -238,7 +252,7 @@ List<ModelProto.ModelValue> modelValues = new ArrayList<>(); modelValues.add( - (ModelProto.ModelValue) ModelProto.ModelValue.newBuilder() + ModelProto.ModelValue.newBuilder() .setIdentifier("chips") .setValue(ValueProto.newBuilder().setUserActions( UserActionList.newBuilder().addValues( @@ -250,7 +264,7 @@ .build()); GenericUserInterfaceProto genericUserInterface = - (GenericUserInterfaceProto) GenericUserInterfaceProto.newBuilder() + GenericUserInterfaceProto.newBuilder() .setRootView( ViewProto.newBuilder() .setTextView(TextViewProto.newBuilder().setText("Text")) @@ -259,14 +273,14 @@ InteractionsProto.newBuilder().addAllInteractions(interactions)) .setModel(ModelProto.newBuilder().addAllValues(modelValues)) .build(); - list.add((ActionProto) ActionProto.newBuilder() + list.add(ActionProto.newBuilder() .setShowGenericUi(ShowGenericUiProto.newBuilder() .setAllowInterrupt(true) .setGenericUserInterface(genericUserInterface)) .build()); AutofillAssistantTestScript script = new AutofillAssistantTestScript( - (SupportedScriptProto) SupportedScriptProto.newBuilder() + SupportedScriptProto.newBuilder() .setPath(MAIN_SCRIPT_PATH) .setPresentation(PresentationProto.newBuilder().setAutostart(true).setChip( ChipProto.newBuilder().setText("Done"))) @@ -275,11 +289,23 @@ scripts.add(script); ArrayList<ActionProto> interruptActionList = new ArrayList<>(); - interruptActionList.add((ActionProto) ActionProto.newBuilder() - .setClick(ClickProto.newBuilder() - .setElementToClick(touch_area_one) - .setClickType(ClickType.CLICK)) - .build()); + ClientIdProto clientId = ClientIdProto.newBuilder().setIdentifier("e").build(); + interruptActionList.add( + ActionProto.newBuilder() + .setWaitForDom( + WaitForDomProto.newBuilder().setTimeoutMs(1000).setWaitCondition( + ElementConditionProto.newBuilder() + .setMatch(touch_area_one) + .setClientId(clientId))) + .build()); + interruptActionList.add( + ActionProto.newBuilder() + .setScrollIntoView(ScrollIntoViewProto.newBuilder().setClientId(clientId)) + .build()); + interruptActionList.add( + ActionProto.newBuilder() + .setSendClickEvent(SendClickEventProto.newBuilder().setClientId(clientId)) + .build()); // The interrupt triggers when touch_area_one is present but touch_area_four is gone, so // that we can trigger it manually. @@ -296,7 +322,7 @@ .build(); AutofillAssistantTestScript interruptScript = new AutofillAssistantTestScript( - (SupportedScriptProto) SupportedScriptProto.newBuilder() + SupportedScriptProto.newBuilder() .setPath(INTERRUPT_SCRIPT_PATH) .setPresentation(PresentationProto.newBuilder() .setChip(ChipProto.newBuilder().setText("Done"))
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantKeyboardIntegrationTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantKeyboardIntegrationTest.java index 380d931..f1e45ed 100644 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantKeyboardIntegrationTest.java +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantKeyboardIntegrationTest.java
@@ -35,20 +35,22 @@ import org.chromium.chrome.browser.autofill_assistant.proto.ActionProto; import org.chromium.chrome.browser.autofill_assistant.proto.ChipProto; import org.chromium.chrome.browser.autofill_assistant.proto.ChipType; -import org.chromium.chrome.browser.autofill_assistant.proto.ClickProto; -import org.chromium.chrome.browser.autofill_assistant.proto.ClickType; +import org.chromium.chrome.browser.autofill_assistant.proto.ClientIdProto; import org.chromium.chrome.browser.autofill_assistant.proto.ElementAreaProto; import org.chromium.chrome.browser.autofill_assistant.proto.ElementAreaProto.Rectangle; import org.chromium.chrome.browser.autofill_assistant.proto.ElementConditionProto; import org.chromium.chrome.browser.autofill_assistant.proto.KeyboardValueFillStrategy; import org.chromium.chrome.browser.autofill_assistant.proto.PromptProto; import org.chromium.chrome.browser.autofill_assistant.proto.PromptProto.Choice; +import org.chromium.chrome.browser.autofill_assistant.proto.ScrollIntoViewProto; import org.chromium.chrome.browser.autofill_assistant.proto.SelectorProto; +import org.chromium.chrome.browser.autofill_assistant.proto.SendClickEventProto; import org.chromium.chrome.browser.autofill_assistant.proto.SetFormFieldValueProto; import org.chromium.chrome.browser.autofill_assistant.proto.SetFormFieldValueProto.KeyPress; import org.chromium.chrome.browser.autofill_assistant.proto.ShowCastProto; import org.chromium.chrome.browser.autofill_assistant.proto.SupportedScriptProto; import org.chromium.chrome.browser.autofill_assistant.proto.SupportedScriptProto.PresentationProto; +import org.chromium.chrome.browser.autofill_assistant.proto.WaitForDomProto; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; @@ -103,25 +105,34 @@ @MediumTest public void keyboardDoesNotShowOnElementClick() throws Exception { SelectorProto element = - (SelectorProto) SelectorProto.newBuilder() + SelectorProto.newBuilder() .addFilters( SelectorProto.Filter.newBuilder().setCssSelector("#profile_name")) .build(); + ClientIdProto clientId = ClientIdProto.newBuilder().setIdentifier("e").build(); ArrayList<ActionProto> list = new ArrayList<>(); - list.add((ActionProto) ActionProto.newBuilder() - .setClick(ClickProto.newBuilder() - .setClickType(ClickType.CLICK) - .setElementToClick(element)) + list.add(ActionProto.newBuilder() + .setWaitForDom( + WaitForDomProto.newBuilder().setTimeoutMs(1000).setWaitCondition( + ElementConditionProto.newBuilder() + .setMatch(element) + .setClientId(clientId))) .build()); - list.add((ActionProto) ActionProto.newBuilder() + list.add(ActionProto.newBuilder() + .setScrollIntoView(ScrollIntoViewProto.newBuilder().setClientId(clientId)) + .build()); + list.add(ActionProto.newBuilder() + .setSendClickEvent(SendClickEventProto.newBuilder().setClientId(clientId)) + .build()); + list.add(ActionProto.newBuilder() .setPrompt(PromptProto.newBuilder().setMessage("Clicked").addChoices( Choice.newBuilder().setChip( ChipProto.newBuilder() .setType(ChipType.HIGHLIGHTED_ACTION) .setText("Continue")))) .build()); - list.add((ActionProto) ActionProto.newBuilder() + list.add(ActionProto.newBuilder() .setShowCast(ShowCastProto.newBuilder() .setElementToPresent(element) .setTouchableElementArea( @@ -129,14 +140,14 @@ Rectangle.newBuilder().addElements( element)))) .build()); - list.add((ActionProto) ActionProto.newBuilder() + list.add(ActionProto.newBuilder() .setPrompt(PromptProto.newBuilder() .setMessage("Highlighted") .addChoices(Choice.newBuilder())) .build()); AutofillAssistantTestScript script = new AutofillAssistantTestScript( - (SupportedScriptProto) SupportedScriptProto.newBuilder() + SupportedScriptProto.newBuilder() .setPath(TEST_PAGE) .setPresentation(PresentationProto.newBuilder().setAutostart(true).setChip( ChipProto.newBuilder().setText("Done"))) @@ -243,7 +254,7 @@ @MediumTest public void keyboardDoesNotShowOnElementClickInIFrame() throws Exception { SelectorProto element = - (SelectorProto) SelectorProto.newBuilder() + SelectorProto.newBuilder() .addFilters(SelectorProto.Filter.newBuilder().setCssSelector("#iframe")) .addFilters(SelectorProto.Filter.newBuilder().setNthMatch( SelectorProto.NthMatchFilter.newBuilder().setIndex(0))) @@ -251,21 +262,30 @@ SelectorProto.EmptyFilter.getDefaultInstance())) .addFilters(SelectorProto.Filter.newBuilder().setCssSelector("#name")) .build(); + ClientIdProto clientId = ClientIdProto.newBuilder().setIdentifier("e").build(); ArrayList<ActionProto> list = new ArrayList<>(); - list.add((ActionProto) ActionProto.newBuilder() - .setClick(ClickProto.newBuilder() - .setClickType(ClickType.CLICK) - .setElementToClick(element)) + list.add(ActionProto.newBuilder() + .setWaitForDom( + WaitForDomProto.newBuilder().setTimeoutMs(1000).setWaitCondition( + ElementConditionProto.newBuilder() + .setMatch(element) + .setClientId(clientId))) .build()); - list.add((ActionProto) ActionProto.newBuilder() + list.add(ActionProto.newBuilder() + .setScrollIntoView(ScrollIntoViewProto.newBuilder().setClientId(clientId)) + .build()); + list.add(ActionProto.newBuilder() + .setSendClickEvent(SendClickEventProto.newBuilder().setClientId(clientId)) + .build()); + list.add(ActionProto.newBuilder() .setPrompt(PromptProto.newBuilder().setMessage("Clicked").addChoices( Choice.newBuilder().setChip( ChipProto.newBuilder() .setType(ChipType.HIGHLIGHTED_ACTION) .setText("Continue")))) .build()); - list.add((ActionProto) ActionProto.newBuilder() + list.add(ActionProto.newBuilder() .setShowCast(ShowCastProto.newBuilder() .setElementToPresent(element) .setTouchableElementArea( @@ -273,14 +293,14 @@ Rectangle.newBuilder().addElements( element)))) .build()); - list.add((ActionProto) ActionProto.newBuilder() + list.add(ActionProto.newBuilder() .setPrompt(PromptProto.newBuilder() .setMessage("Highlighted") .addChoices(Choice.newBuilder())) .build()); AutofillAssistantTestScript script = new AutofillAssistantTestScript( - (SupportedScriptProto) SupportedScriptProto.newBuilder() + SupportedScriptProto.newBuilder() .setPath(TEST_PAGE) .setPresentation(PresentationProto.newBuilder().setAutostart(true).setChip( ChipProto.newBuilder().setText("Done")))
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantNavigationIntegrationTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantNavigationIntegrationTest.java index 3ace23b..05872a4 100644 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantNavigationIntegrationTest.java +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantNavigationIntegrationTest.java
@@ -35,15 +35,19 @@ import org.chromium.chrome.autofill_assistant.R; import org.chromium.chrome.browser.autofill_assistant.proto.ActionProto; import org.chromium.chrome.browser.autofill_assistant.proto.ChipProto; -import org.chromium.chrome.browser.autofill_assistant.proto.ClickProto; +import org.chromium.chrome.browser.autofill_assistant.proto.ClientIdProto; +import org.chromium.chrome.browser.autofill_assistant.proto.ElementConditionProto; import org.chromium.chrome.browser.autofill_assistant.proto.NavigateProto; import org.chromium.chrome.browser.autofill_assistant.proto.PromptProto; import org.chromium.chrome.browser.autofill_assistant.proto.PromptProto.Choice; +import org.chromium.chrome.browser.autofill_assistant.proto.ScrollIntoViewProto; import org.chromium.chrome.browser.autofill_assistant.proto.SelectorProto; +import org.chromium.chrome.browser.autofill_assistant.proto.SendTapEventProto; import org.chromium.chrome.browser.autofill_assistant.proto.StopProto; import org.chromium.chrome.browser.autofill_assistant.proto.SupportedScriptProto; import org.chromium.chrome.browser.autofill_assistant.proto.SupportedScriptProto.PresentationProto; import org.chromium.chrome.browser.autofill_assistant.proto.TellProto; +import org.chromium.chrome.browser.autofill_assistant.proto.WaitForDomProto; import org.chromium.chrome.browser.autofill_assistant.proto.WaitForNavigationProto; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; @@ -127,22 +131,33 @@ @MediumTest public void clickingLinkDoesNotCauseError() { SelectorProto linkElement = - (SelectorProto) SelectorProto.newBuilder() + SelectorProto.newBuilder() .addFilters(SelectorProto.Filter.newBuilder().setCssSelector( "#form_target_website_link")) .build(); + ClientIdProto clientId = ClientIdProto.newBuilder().setIdentifier("e").build(); ArrayList<ActionProto> list = new ArrayList<>(); - list.add((ActionProto) ActionProto.newBuilder() - .setClick(ClickProto.newBuilder().setElementToClick(linkElement)) + list.add(ActionProto.newBuilder() + .setWaitForDom( + WaitForDomProto.newBuilder().setTimeoutMs(1000).setWaitCondition( + ElementConditionProto.newBuilder() + .setMatch(linkElement) + .setClientId(clientId))) .build()); - list.add((ActionProto) ActionProto.newBuilder() + list.add(ActionProto.newBuilder() + .setScrollIntoView(ScrollIntoViewProto.newBuilder().setClientId(clientId)) + .build()); + list.add(ActionProto.newBuilder() + .setSendTapEvent(SendTapEventProto.newBuilder().setClientId(clientId)) + .build()); + list.add(ActionProto.newBuilder() .setPrompt(PromptProto.newBuilder().setMessage("Prompt").addChoices( PromptProto.Choice.newBuilder())) .build()); AutofillAssistantTestScript script = new AutofillAssistantTestScript( - (SupportedScriptProto) SupportedScriptProto.newBuilder() + SupportedScriptProto.newBuilder() .setPath(TEST_PAGE_A) .setPresentation(PresentationProto.newBuilder().setAutostart(true).setChip( ChipProto.newBuilder().setText("Done"))) @@ -162,23 +177,33 @@ @MediumTest public void javaScriptNavigationDoesNotCauseError() { SelectorProto navigationActionElement = - (SelectorProto) SelectorProto.newBuilder() + SelectorProto.newBuilder() .addFilters(SelectorProto.Filter.newBuilder().setCssSelector( "#form_target_navigation_action")) .build(); + ClientIdProto clientId = ClientIdProto.newBuilder().setIdentifier("e").build(); ArrayList<ActionProto> list = new ArrayList<>(); - list.add((ActionProto) ActionProto.newBuilder() - .setClick( - ClickProto.newBuilder().setElementToClick(navigationActionElement)) + list.add(ActionProto.newBuilder() + .setWaitForDom( + WaitForDomProto.newBuilder().setTimeoutMs(1000).setWaitCondition( + ElementConditionProto.newBuilder() + .setMatch(navigationActionElement) + .setClientId(clientId))) .build()); - list.add((ActionProto) ActionProto.newBuilder() + list.add(ActionProto.newBuilder() + .setScrollIntoView(ScrollIntoViewProto.newBuilder().setClientId(clientId)) + .build()); + list.add(ActionProto.newBuilder() + .setSendTapEvent(SendTapEventProto.newBuilder().setClientId(clientId)) + .build()); + list.add(ActionProto.newBuilder() .setPrompt(PromptProto.newBuilder().setMessage("Prompt").addChoices( PromptProto.Choice.newBuilder())) .build()); AutofillAssistantTestScript script = new AutofillAssistantTestScript( - (SupportedScriptProto) SupportedScriptProto.newBuilder() + SupportedScriptProto.newBuilder() .setPath(TEST_PAGE_A) .setPresentation(PresentationProto.newBuilder().setAutostart(true).setChip( ChipProto.newBuilder().setText("Done")))
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPersonalDataManagerTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPersonalDataManagerTest.java index 45f28c0..abca658 100644 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPersonalDataManagerTest.java +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPersonalDataManagerTest.java
@@ -986,12 +986,15 @@ */ @Test @MediumTest - public void testCreateAndEnterAddress() throws Exception { + public void testCreateAndEnterShippingAddress() throws Exception { ArrayList<ActionProto> list = new ArrayList<>(); list.add((ActionProto) ActionProto.newBuilder() - .setCollectUserData(CollectUserDataProto.newBuilder() - .setShippingAddressName("shipping") - .setRequestTermsAndConditions(false)) + .setCollectUserData( + CollectUserDataProto.newBuilder() + .setShippingAddressName("shipping") + .addRequiredShippingAddressDataPiece( + buildRequiredDataPiece("Requires valid state", 34)) + .setRequestTermsAndConditions(false)) .build()); list.add((ActionProto) ActionProto.newBuilder() .setUseAddress( @@ -1026,17 +1029,39 @@ onView(withContentDescription("Street address*")) .perform(scrollTo(), typeText("123 Main St")); onView(withContentDescription("City*")).perform(scrollTo(), typeText("Mountain View")); - onView(withContentDescription("State*")).perform(scrollTo(), typeText("California")); + onView(withContentDescription("State*")).perform(scrollTo(), typeText("Invalid")); onView(withContentDescription("ZIP code*")).perform(scrollTo(), typeText("1234")); onView(withContentDescription("Phone*")).perform(scrollTo(), typeText("8008080808")); Espresso.closeSoftKeyboard(); onView(withId(org.chromium.chrome.R.id.editor_dialog_done_button)) .perform(scrollTo(), click()); - waitUntilViewMatchesCondition(withContentDescription("Continue"), isEnabled()); + // First round: Invalid state. waitUntilViewMatchesCondition( - allOf(withParent(withId(R.id.address_summary)), withId(R.id.full_name)), + withContentDescription("Continue"), allOf(isDisplayed(), not(isEnabled()))); + onView(allOf(withParent(withId(R.id.address_summary)), withId(R.id.incomplete_error))) + .check(matches( + allOf(withText(mTestRule.getActivity().getString( + R.string.autofill_assistant_payment_information_missing)), + isDisplayed()))); + onView(withText("Shipping address")).perform(click()); + waitUntilViewMatchesCondition(withId(R.id.address_full), isDisplayed()); + onView(allOf(withParent(withId(R.id.address_full)), withId(R.id.incomplete_error))) + .check(matches(allOf(withText("Requires valid state"), isDisplayed()))); + onView(withContentDescription("Edit address")).perform(click()); + waitUntilViewMatchesCondition( + withContentDescription("Name*"), allOf(isDisplayed(), isEnabled())); + onView(withContentDescription("State*")) + .perform(scrollTo(), clearText(), typeText("California")); + Espresso.closeSoftKeyboard(); + onView(withId(org.chromium.chrome.R.id.editor_dialog_done_button)) + .perform(scrollTo(), click()); + // Second round: Complete. + waitUntilViewMatchesCondition( + withContentDescription("Continue"), allOf(isDisplayed(), isEnabled())); + waitUntilViewMatchesCondition( + allOf(withParent(withId(R.id.address_full)), withId(R.id.full_name)), allOf(withText("John Doe"), isCompletelyDisplayed())); - onView(withText("Continue")).perform(click()); + onView(withContentDescription("Continue")).perform(click()); waitUntilViewMatchesCondition(withText("Prompt"), isCompletelyDisplayed()); assertThat(getElementValue(getWebContents(), "address_name"), is("John Doe")); assertThat(getElementValue(getWebContents(), "street"), is("123 Main St"));
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_te.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_te.xtb index b33bea19..e1dae06 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_te.xtb +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_te.xtb
@@ -7,7 +7,7 @@ <translation id="207576718733492531">'టచ్ చేసి నింపాల్సిన ఆధారాల జాబితా' మూసివేయబడింది.</translation> <translation id="2610239185026711824">పాస్వర్డ్ని సూచించు</translation> <translation id="2803478378562657435">సేవ్ చేసిన పాస్వర్డ్లు మరియు పాస్వర్డ్ ఎంపికలను చూపిస్తోంది</translation> -<translation id="2903493209154104877">చిరునామాలు</translation> +<translation id="2903493209154104877">అడ్రస్లు</translation> <translation id="3399357656427473483">'టచ్ చేసి నింపాల్సిన ఆధారాల జాబితా'.</translation> <translation id="4660011489602794167">కీబోర్డ్ను చూపు</translation> <translation id="4694050069269396220">మీకు <ph name="ORIGIN" /> మీద నమ్మకం ఉంటే, ఇదివరకే సేవ్ చేసిన మీ పాస్వర్డ్ను మీరు మరొక సైట్కు ఉపయోగించవచ్చు.</translation>
diff --git a/chrome/android/java/res/drawable/incognito_history_placeholder_image.xml b/chrome/android/java/res/drawable/incognito_history_placeholder_image.xml index f71ec17..cad32c8 100644 --- a/chrome/android/java/res/drawable/incognito_history_placeholder_image.xml +++ b/chrome/android/java/res/drawable/incognito_history_placeholder_image.xml
@@ -23,11 +23,11 @@ <path android:pathData="M115.319,81.951L88.681,97.331C86.472,98.606 83.685,97.918 82.457,95.791L46.903,34.209C45.675,32.083 46.472,29.324 48.681,28.049L75.319,12.669C77.529,11.394 80.316,12.083 81.544,14.209L117.098,75.791C118.326,77.918 117.53,80.675 115.319,81.951Z" android:strokeWidth="2" - android:fillColor="@color/modern_grey_800" + android:fillColor="@color/modern_grey_900" android:strokeColor="@color/incognito_history_placeholder_stroke_color"/> <path android:pathData="M50.68,40.751L85.321,20.751L81.631,14.36C80.355,12.151 77.529,11.394 75.319,12.669L48.681,28.049C46.472,29.324 45.714,32.151 46.99,34.36L50.68,40.751ZM52.809,31.439C51.613,32.129 51.203,33.658 51.894,34.854C52.584,36.05 54.113,36.459 55.309,35.769L78.691,22.269C79.887,21.579 80.297,20.05 79.607,18.854C78.916,17.658 77.387,17.249 76.191,17.939L52.809,31.439Z" - android:fillColor="@color/modern_grey_700" + android:fillColor="@color/incognito_history_placeholder_stroke_color" android:fillType="evenOdd"/> <group> <clip-path
diff --git a/chrome/android/java/res/layout/webapk_update_report_abuse_custom_view.xml b/chrome/android/java/res/layout/webapk_update_report_abuse_custom_view.xml new file mode 100644 index 0000000..7b2d6b0 --- /dev/null +++ b/chrome/android/java/res/layout/webapk_update_report_abuse_custom_view.xml
@@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2021 The Chromium Authors. All rights reserved. + Use of this source code is governed by a BSD-style license that can be + found in the LICENSE file. --> +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <CheckBox + android:id="@+id/report_abuse" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:layout_marginStart="16dp" + android:layout_marginEnd="16dp" + android:text="@string/webapk_report_abuse_checkbox" + android:textAppearance="@style/TextAppearance.TextMedium.Primary" /> + +</LinearLayout>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadItem.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadItem.java index 646c5d85..42f2f11 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadItem.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadItem.java
@@ -164,7 +164,7 @@ offlineItem.totalSizeBytes = downloadInfo.getBytesTotalSize(); offlineItem.receivedBytes = downloadInfo.getBytesReceived(); offlineItem.isResumable = downloadInfo.isResumable(); - offlineItem.pageUrl = downloadInfo.getUrl(); + offlineItem.url = downloadInfo.getUrl(); offlineItem.originalUrl = downloadInfo.getOriginalUrl(); offlineItem.isOffTheRecord = downloadInfo.isOffTheRecord(); offlineItem.otrProfileId = OTRProfileID.serialize(downloadInfo.getOTRProfileId());
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java index bea77f2..776d7492 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java
@@ -41,6 +41,7 @@ import org.chromium.chrome.browser.settings.ChromeManagedPreferenceDelegate; import org.chromium.chrome.browser.settings.SettingsLauncherImpl; import org.chromium.chrome.browser.sync.ProfileSyncService; +import org.chromium.chrome.browser.sync.settings.SyncSettingsUtils; import org.chromium.chrome.browser.webauthn.CableAuthenticatorModuleProvider; import org.chromium.components.browser_ui.settings.ChromeBasePreference; import org.chromium.components.browser_ui.settings.ChromeSwitchPreference; @@ -48,6 +49,7 @@ import org.chromium.components.browser_ui.settings.SettingsLauncher; import org.chromium.components.browser_ui.settings.TextMessagePreference; import org.chromium.components.prefs.PrefService; +import org.chromium.components.signin.base.CoreAccountInfo; import org.chromium.components.user_prefs.UserPrefs; import org.chromium.ui.text.SpanApplier; @@ -98,6 +100,10 @@ private static final int ORDER_EXCEPTIONS = 7; private static final int ORDER_SAVED_PASSWORDS_NO_TEXT = 8; + // This request code is not actually consumed today in onActivityResult() but is defined here to + // avoid bugs in the future if the request code is reused. + private static final int REQUEST_CODE_TRUSTED_VAULT_OPT_IN = 1; + private boolean mNoPasswords; private boolean mNoPasswordExceptions; private boolean mShouldShowTrustedVaultOptIn; @@ -564,7 +570,11 @@ mTrustedVaultOptIn.setIcon(android.R.drawable.ic_lock_lock); mTrustedVaultOptIn.setSummary(R.string.android_trusted_vault_opt_in_sub_label); mTrustedVaultOptIn.setOnPreferenceClickListener(preference -> { - // TODO(crbug.com/1202088): Implement reaction to click. + assert ProfileSyncService.get() != null; + CoreAccountInfo accountInfo = ProfileSyncService.get().getAuthenticatedAccountInfo(); + assert accountInfo != null; + SyncSettingsUtils.openTrustedVaultOptInDialog( + this, accountInfo, REQUEST_CODE_TRUSTED_VAULT_OPT_IN); // Return true to notify the click was handled. return true; });
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentRequestService.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentRequestService.java index ac185889..5ea8b15 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentRequestService.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentRequestService.java
@@ -236,7 +236,6 @@ mPaymentUiService = mDelegate.createPaymentUiService(/*delegate=*/this, /*params=*/paymentRequestService, mWebContents, paymentRequestService.isOffTheRecord(), mJourneyLogger, topLevelOrigin); - mPaymentRequestService = paymentRequestService; if (PaymentRequestService.getNativeObserverForTest() != null) { PaymentRequestService.getNativeObserverForTest().onPaymentUiServiceCreated( mPaymentUiService);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java index b60301a2..2a823ad 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java
@@ -317,11 +317,7 @@ @Override public void signinAndEnableSync(@SigninAccessPoint int accessPoint, Account account, @Nullable SignInCallback callback) { - mAccountTrackerService.seedAccountsIfNeeded(() -> { - final CoreAccountInfo accountInfo = - mIdentityManager - .findExtendedAccountInfoForAccountWithRefreshTokenByEmailAddress( - account.name); + AccountInfoService.get().getAccountInfoByEmail(account.name).then(accountInfo -> { signinInternal( SignInState.createForSigninAndEnableSync(accessPoint, accountInfo, callback)); });
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SyncConsentFragmentBase.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SyncConsentFragmentBase.java index b071c84e..bbde105 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SyncConsentFragmentBase.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SyncConsentFragmentBase.java
@@ -405,16 +405,14 @@ } private void seedAccountsAndSignin(boolean settingsClicked, View confirmationView) { - AccountInfoService.get() - .getAccountInfoByEmailAsync(mSelectedAccountName) - .then(accountInfo -> { - assert accountInfo != null : "The seeded CoreAccountInfo shouldn't be null"; - mConsentTextTracker.recordConsent(accountInfo.getId(), - ConsentAuditorFeature.CHROME_SYNC, (TextView) confirmationView, mView); - if (isResumed()) { - runStateMachineAndSignin(settingsClicked); - } - }); + AccountInfoService.get().getAccountInfoByEmail(mSelectedAccountName).then(accountInfo -> { + assert accountInfo != null : "The seeded CoreAccountInfo shouldn't be null"; + mConsentTextTracker.recordConsent(accountInfo.getId(), + ConsentAuditorFeature.CHROME_SYNC, (TextView) confirmationView, mView); + if (isResumed()) { + runStateMachineAndSignin(settingsClicked); + } + }); } private void runStateMachineAndSignin(boolean settingsClicked) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/TrustedVaultClient.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/TrustedVaultClient.java index 61df25c..9b8ee2c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/TrustedVaultClient.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/TrustedVaultClient.java
@@ -82,6 +82,18 @@ CoreAccountInfo accountInfo) { return Promise.rejected(); } + + /** + * Gets a PendingIntent that can be used to display a UI that allows the user to opt into + * trusted vault encryption. + * + * @param accountInfo Account representing the user. + * @return a promise for a PendingIntent object. + */ + // TODO(crbug.com/1100279): Switch to non-default method once all implementations are ready. + default Promise<PendingIntent> createOptInIntent(CoreAccountInfo accountInfo) { + return Promise.rejected(); + } } /** @@ -166,6 +178,16 @@ } /** + * Creates an intent that launches an activity that triggers the opt in flow for trusted vault. + * + * @param accountInfo Account representing the user. + * @return a promise with the intent for opening the opt-in activity. + */ + public Promise<PendingIntent> createOptInIntent(CoreAccountInfo accountInfo) { + return mBackend.createOptInIntent(accountInfo); + } + + /** * Registers a C++ client, which is a prerequisite before interacting with Java. */ @VisibleForTesting
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/AccountManagementFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/AccountManagementFragment.java index f02beac..28c73ee 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/AccountManagementFragment.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/AccountManagementFragment.java
@@ -175,7 +175,7 @@ configureSignOutSwitch(); configureChildAccountPreferences(); - updateAccountsList(); + AccountManagerFacadeProvider.getInstance().tryGetGoogleAccounts(this::updateAccountsList); } private boolean canAddAccounts() { @@ -271,7 +271,7 @@ } } - private void updateAccountsList() { + private void updateAccountsList(List<Account> accounts) { PreferenceCategory accountsCategory = (PreferenceCategory) findPreference(PREF_ACCOUNTS_CATEGORY); if (accountsCategory == null) return; @@ -285,7 +285,6 @@ accountsCategory.addPreference(createManageYourGoogleAccountPreference()); accountsCategory.addPreference(createDividerPreference(R.layout.divider_preference)); - List<Account> accounts = AccountManagerFacadeProvider.getInstance().tryGetGoogleAccounts(); for (Account account : accounts) { if (!mSignedInAccountName.equals(account.name)) { accountsCategory.addPreference(createAccountPreference(account)); @@ -372,7 +371,7 @@ // ProfileDataCache.Observer implementation: @Override public void onProfileDataUpdated(String accountEmail) { - updateAccountsList(); + AccountManagerFacadeProvider.getInstance().tryGetGoogleAccounts(this::updateAccountsList); } // SignOutDialogListener implementation:
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncSettingsUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncSettingsUtils.java index 0cc98fff..40d1147 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncSettingsUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncSettingsUtils.java
@@ -451,6 +451,20 @@ } /** + * Displays a UI that allows the user to opt in into the trusted vault passphrase type. + * + * @param fragment Fragment to use when starting the dialog. + * @param accountInfo Account representing the user. + * @param requestCode Arbitrary request code that upon completion will be passed back via + * Fragment.onActivityResult(). + */ + public static void openTrustedVaultOptInDialog( + Fragment fragment, CoreAccountInfo accountInfo, int requestCode) { + openTrustedVaultDialogForPendingIntent(fragment, accountInfo, requestCode, + TrustedVaultClient.get().createOptInIntent(accountInfo)); + } + + /** * Shows a toast indicating that sync is disabled for the account by the system administrator. * * @param context The context where the toast will be shown.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkIconNameUpdateDialog.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkIconNameUpdateDialog.java index 1a057977..45e2b38 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkIconNameUpdateDialog.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkIconNameUpdateDialog.java
@@ -29,6 +29,12 @@ // The modal dialog manager to use. private ModalDialogManager mModalDialogManager; + // The property model for the dialog. + private PropertyModel mDialogModel; + + // The short name of the app before update. + private String mOldAppShortName; + // The callback to run when the user has made a decision. private Callback<Integer> mDialogResultCallback; @@ -46,8 +52,8 @@ * @param newAppName The proposed name for the updated app. * @param oldIcon The icon of the currently installed app. * @param newIcon The proposed new icon for the updated app. - * @param oldIconAdaptive Wheter the current icon is adaptive. - * @param newIconAdaptive Wheter the updated icon is adaptive. + * @param oldIconAdaptive Whether the current icon is adaptive. + * @param newIconAdaptive Whether the updated icon is adaptive. * @param callback The callback to use to communicate the results. */ public void show(ModalDialogManager manager, boolean iconChanging, boolean shortNameChanging, @@ -56,6 +62,7 @@ boolean oldIconAdaptive, boolean newIconAdaptive, Callback<Integer> callback) { Context context = ContextUtils.getApplicationContext(); Resources resources = context.getResources(); + mOldAppShortName = oldAppShortName; mDialogResultCallback = callback; int titleId = 0; @@ -88,22 +95,21 @@ dialogCustomView.configureShortNames(oldAppShortName, newAppShortName); } - PropertyModel dialogModel = - new PropertyModel.Builder(ModalDialogProperties.ALL_KEYS) - .with(ModalDialogProperties.CONTROLLER, this) - .with(ModalDialogProperties.TITLE, resources, titleId) - .with(ModalDialogProperties.MESSAGE, resources, explanationId) - .with(ModalDialogProperties.CUSTOM_VIEW, dialogCustomView) - .with(ModalDialogProperties.PRIMARY_BUTTON_FILLED, true) - .with(ModalDialogProperties.POSITIVE_BUTTON_TEXT, resources, - R.string.webapk_update_button_update) - .with(ModalDialogProperties.NEGATIVE_BUTTON_TEXT, resources, - R.string.webapk_update_button_close) - .with(ModalDialogProperties.TITLE_SCROLLABLE, true) - .build(); + mDialogModel = new PropertyModel.Builder(ModalDialogProperties.ALL_KEYS) + .with(ModalDialogProperties.CONTROLLER, this) + .with(ModalDialogProperties.TITLE, resources, titleId) + .with(ModalDialogProperties.MESSAGE, resources, explanationId) + .with(ModalDialogProperties.CUSTOM_VIEW, dialogCustomView) + .with(ModalDialogProperties.PRIMARY_BUTTON_FILLED, true) + .with(ModalDialogProperties.POSITIVE_BUTTON_TEXT, resources, + R.string.webapk_update_button_update) + .with(ModalDialogProperties.NEGATIVE_BUTTON_TEXT, resources, + R.string.webapk_update_button_close) + .with(ModalDialogProperties.TITLE_SCROLLABLE, true) + .build(); mModalDialogManager = manager; - mModalDialogManager.showDialog(dialogModel, ModalDialogManager.ModalDialogType.APP); + mModalDialogManager.showDialog(mDialogModel, ModalDialogManager.ModalDialogType.TAB); } @Override @@ -114,8 +120,9 @@ model, DialogDismissalCause.POSITIVE_BUTTON_CLICKED); break; case ModalDialogProperties.ButtonType.NEGATIVE: - mModalDialogManager.dismissDialog( - model, DialogDismissalCause.NEGATIVE_BUTTON_CLICKED); + WebApkUpdateReportAbuseDialog reportAbuseDialog = new WebApkUpdateReportAbuseDialog( + mModalDialogManager, mOldAppShortName, this::onUninstall); + reportAbuseDialog.show(); break; default: Log.i(TAG, "Unexpected button pressed in dialog: " + buttonType); @@ -125,6 +132,13 @@ @Override public void onDismiss(PropertyModel model, @DialogDismissalCause int dismissalCause) { mDialogResultCallback.onResult(dismissalCause); - mModalDialogManager = null; + } + + /** + * Dismisses us. Called when the child dialog on top of this dialog requests dismissal, because + * the user has confirmed the uninstall of the app. + */ + private void onUninstall() { + mModalDialogManager.dismissDialog(mDialogModel, DialogDismissalCause.ACTION_ON_CONTENT); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateManager.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateManager.java index 5df6cf94..58fd7aa 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateManager.java
@@ -213,7 +213,11 @@ // {@link onBuiltWebApk} being called. recordUpdate(mStorage, WebApkInstallResult.FAILURE, false /* relaxUpdates*/); - if (dismissalCause != DialogDismissalCause.POSITIVE_BUTTON_CLICKED) { + // Continue if the user explicitly allows the update using the button, or isn't interested + // in the update dialog warning (presses Back). Otherwise, they can be left in a state where + // they always press Back and are stuck on an old version of the app forever. + if (dismissalCause != DialogDismissalCause.POSITIVE_BUTTON_CLICKED + && dismissalCause != DialogDismissalCause.NAVIGATE_BACK_OR_TOUCH_OUTSIDE) { return; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateReportAbuseDialog.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateReportAbuseDialog.java new file mode 100644 index 0000000..41256b69 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateReportAbuseDialog.java
@@ -0,0 +1,112 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.webapps; + +import android.content.Context; +import android.content.res.Resources; +import android.view.View; +import android.widget.CheckBox; + +import org.chromium.base.ContextUtils; +import org.chromium.base.Log; +import org.chromium.ui.LayoutInflaterUtils; +import org.chromium.ui.modaldialog.DialogDismissalCause; +import org.chromium.ui.modaldialog.ModalDialogManager; +import org.chromium.ui.modaldialog.ModalDialogProperties; +import org.chromium.ui.modelutil.PropertyModel; + +/** + * The uninstall confirmation dialog, which allows the user to confirm that they + * want to uninstall and report the app as abusive. + */ +public class WebApkUpdateReportAbuseDialog implements ModalDialogProperties.Controller { + /** Interface for receiving notifications of user actions. */ + public interface Callback { + /** + * Called when the user has selected to uninstall the app. + */ + public void onUninstall(); + } + + private static final String TAG = "UpdateReportAbuseDlg"; + + // The modal dialog manager to use. + private ModalDialogManager mModalDialogManager; + + // The short name of the app the user is uninstalling. + private String mAppShortName; + + // When checked, the app will not just be uninstalled, but also reported for abuse. + private CheckBox mReportAbuseCheckBox; + + // Notifies the parent (dialog beneath us) that uninstalling was the action taken by the user. + private Callback mOnUninstallCallback; + + public WebApkUpdateReportAbuseDialog( + ModalDialogManager manager, String appShortName, Callback callback) { + mModalDialogManager = manager; + mAppShortName = appShortName; + mOnUninstallCallback = callback; + } + + /** + * Shows the dialog. + */ + public void show() { + Context context = ContextUtils.getApplicationContext(); + Resources resources = context.getResources(); + + View dialogCustomView = LayoutInflaterUtils.inflate( + context, R.layout.webapk_update_report_abuse_custom_view, null); + mReportAbuseCheckBox = dialogCustomView.findViewById(R.id.report_abuse); + + String title = + resources.getString(R.string.webapk_report_abuse_dialog_title, mAppShortName); + PropertyModel dialogModel = + new PropertyModel.Builder(ModalDialogProperties.ALL_KEYS) + .with(ModalDialogProperties.CONTROLLER, this) + .with(ModalDialogProperties.TITLE, title) + .with(ModalDialogProperties.CUSTOM_VIEW, dialogCustomView) + .with(ModalDialogProperties.PRIMARY_BUTTON_FILLED, true) + .with(ModalDialogProperties.POSITIVE_BUTTON_TEXT, resources, + R.string.webapk_report_abuse_confirm) + .with(ModalDialogProperties.NEGATIVE_BUTTON_TEXT, resources, + R.string.webapk_report_abuse_cancel) + .build(); + + mModalDialogManager.showDialog(dialogModel, ModalDialogManager.ModalDialogType.APP); + } + + @Override + public void onClick(PropertyModel model, int buttonType) { + switch (buttonType) { + case ModalDialogProperties.ButtonType.POSITIVE: + mModalDialogManager.dismissDialog( + model, DialogDismissalCause.POSITIVE_BUTTON_CLICKED); + break; + case ModalDialogProperties.ButtonType.NEGATIVE: + mModalDialogManager.dismissDialog( + model, DialogDismissalCause.NEGATIVE_BUTTON_CLICKED); + break; + default: + Log.i(TAG, "Unexpected button pressed in dialog: " + buttonType); + } + } + + @Override + public void onDismiss(PropertyModel model, @DialogDismissalCause int dismissalCause) { + if (dismissalCause == DialogDismissalCause.POSITIVE_BUTTON_CLICKED) { + mOnUninstallCallback.onUninstall(); + + if (mReportAbuseCheckBox.isChecked()) { + // TODO(finnur): Implement sending info to the SafeBrowsing team. + Log.i(TAG, "Uninstall and report abuse"); + } else { + // TODO(finnur): Implement opening the uninstall screen. + Log.i(TAG, "Uninstall without reporting abuse"); + } + } + } +}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkIconNameUpdateDialogTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkIconNameUpdateDialogTest.java index ccf400d..b680131 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkIconNameUpdateDialogTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkIconNameUpdateDialogTest.java
@@ -40,10 +40,10 @@ @RunWith(BaseJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) public class WebApkIconNameUpdateDialogTest { - // A callback that fires when an action is taken in the dialog. + // A callback that fires when an action is taken in a dialog. public final CallbackHelper mOnActionCallback = new CallbackHelper(); - private boolean mLastSeenActionWasAccept; + private Integer mLastDismissalCause; @Rule public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); @@ -100,33 +100,44 @@ return bitmap; } - private View getUpdateDialogCustomView() { + private View getDialogCustomView() { return mActivityTestRule.getActivity() .getModalDialogManager() .getCurrentDialogForTest() .get(ModalDialogProperties.CUSTOM_VIEW); } + private String getDialogTitle() { + return mActivityTestRule.getActivity() + .getModalDialogManager() + .getCurrentDialogForTest() + .get(ModalDialogProperties.TITLE) + .toString(); + } + private Bitmap getUpdateDialogBitmap(int resId) { - ImageView imageView = getUpdateDialogCustomView().findViewById(resId); + ImageView imageView = getDialogCustomView().findViewById(resId); if (imageView.getVisibility() != View.VISIBLE) return null; return ((BitmapDrawable) imageView.getDrawable()).getBitmap(); } private String getUpdateDialogAppNameLabel(int resId) { - TextView textView = getUpdateDialogCustomView().findViewById(resId); + TextView textView = getDialogCustomView().findViewById(resId); if (textView.getVisibility() != View.VISIBLE) return null; return textView.getText().toString(); } - private void onResult(Integer dialogDismissalCause) { - mLastSeenActionWasAccept = - dialogDismissalCause == DialogDismissalCause.POSITIVE_BUTTON_CLICKED; + private void onUpdateDialogResult(Integer dialogDismissalCause) { + mLastDismissalCause = dialogDismissalCause; mOnActionCallback.notifyCalled(); } - public void verifyValues(Boolean expectAccept, DialogParams dialogParams) throws Exception { + private void onAbuseDialogResult() { + mOnActionCallback.notifyCalled(); + } + + public void verifyValues(boolean clickAccept, DialogParams dialogParams) throws Exception { TestThreadUtils.runOnUiThreadBlocking(() -> { int callCount = mOnActionCallback.getCallCount(); ModalDialogManager modalDialogManager = @@ -138,7 +149,7 @@ dialogParams.nameChanged, dialogParams.shortNameBefore, dialogParams.shortNameAfter, dialogParams.nameBefore, dialogParams.nameAfter, dialogParams.bitmapBefore, dialogParams.bitmapAfter, false, false, - this::onResult); + this::onUpdateDialogResult); Assert.assertEquals( dialogParams.shortNameChanged || dialogParams.expectShortNameShownAnyway @@ -163,13 +174,38 @@ : null, getUpdateDialogBitmap(R.id.app_icon_new)); - modalDialogManager.getCurrentPresenterForTest().dismissCurrentDialog(expectAccept + modalDialogManager.getCurrentPresenterForTest().dismissCurrentDialog(clickAccept ? DialogDismissalCause.POSITIVE_BUTTON_CLICKED : DialogDismissalCause.NEGATIVE_BUTTON_CLICKED); Assert.assertEquals(callCount + 1, mOnActionCallback.getCallCount()); }); - Assert.assertEquals(expectAccept, mLastSeenActionWasAccept); + Assert.assertEquals(clickAccept ? (Integer) DialogDismissalCause.POSITIVE_BUTTON_CLICKED + : (Integer) DialogDismissalCause.NEGATIVE_BUTTON_CLICKED, + mLastDismissalCause); + } + + public void verifyReportAbuseValues( + boolean clickAccept, String shortAppName, String expectedTitle) throws Exception { + TestThreadUtils.runOnUiThreadBlocking(() -> { + int callCount = mOnActionCallback.getCallCount(); + ModalDialogManager modalDialogManager = + mActivityTestRule.getActivity().getModalDialogManager(); + + WebApkUpdateReportAbuseDialog dialog = new WebApkUpdateReportAbuseDialog( + modalDialogManager, shortAppName, this::onAbuseDialogResult); + dialog.show(); + + Assert.assertEquals(expectedTitle, getDialogTitle()); + + modalDialogManager.getCurrentPresenterForTest().dismissCurrentDialog(clickAccept + ? DialogDismissalCause.POSITIVE_BUTTON_CLICKED + : DialogDismissalCause.NEGATIVE_BUTTON_CLICKED); + // Pressing Cancel on the Abuse dialog does not activate the dismiss-parent callback + // (because the parent dialog is not supposed to dismiss). + Assert.assertEquals( + callCount + (clickAccept ? 1 : 0), mOnActionCallback.getCallCount()); + }); } @Test @@ -184,18 +220,18 @@ dialogParams.iconChanged = true; dialogParams.bitmapBefore = blue; dialogParams.bitmapAfter = red; - // Short name is force-shown when icon changes. + // When only the icon changes, the short name is shown (as unchanged) to provide context. dialogParams.expectShortNameShownAnyway = true; - verifyValues(/* expectAccept= */ true, dialogParams); + verifyValues(/* clickAccept= */ true, dialogParams); // Test only short name changing. dialogParams = DialogParams.createDefault(); dialogParams.shortNameChanged = true; dialogParams.shortNameBefore = "short1"; dialogParams.shortNameAfter = "short2"; - // Icons always show, even if unchanged. + // When only the short name changes, the icon is shown (as unchanged) to provide context. dialogParams.expectIconShownAnyway = true; - verifyValues(/* expectAccept= */ true, dialogParams); + verifyValues(/* clickAccept= */ true, dialogParams); // Test only long name changing. dialogParams = DialogParams.createDefault(); @@ -204,7 +240,7 @@ dialogParams.nameAfter = "name2"; // Icons always show, even if unchanged. dialogParams.expectIconShownAnyway = true; - verifyValues(/* expectAccept= */ true, dialogParams); + verifyValues(/* clickAccept= */ true, dialogParams); // Test only short name and icon changing. dialogParams = DialogParams.createDefault(); @@ -214,7 +250,7 @@ dialogParams.shortNameChanged = true; dialogParams.shortNameBefore = "short1"; dialogParams.shortNameAfter = "short2"; - verifyValues(/* expectAccept= */ true, dialogParams); + verifyValues(/* clickAccept= */ true, dialogParams); // Test only name and icon changing. dialogParams = DialogParams.createDefault(); @@ -224,7 +260,7 @@ dialogParams.nameChanged = true; dialogParams.nameBefore = "name1"; dialogParams.nameAfter = "name2"; - verifyValues(/* expectAccept= */ true, dialogParams); + verifyValues(/* clickAccept= */ true, dialogParams); // Test all values changing. dialogParams = DialogParams.createDefault(); @@ -237,7 +273,7 @@ dialogParams.nameChanged = true; dialogParams.nameBefore = "name1"; dialogParams.nameAfter = "name2"; - verifyValues(/* expectAccept= */ true, dialogParams); + verifyValues(/* clickAccept= */ true, dialogParams); // Test all values changing, but dialog gets canceled. dialogParams = DialogParams.createDefault(); @@ -250,6 +286,17 @@ dialogParams.nameChanged = true; dialogParams.nameBefore = "name1"; dialogParams.nameAfter = "name2"; - verifyValues(/* expectAccept= */ false, dialogParams); + verifyValues(/* clickAccept= */ false, dialogParams); + } + + @Test + @SmallTest + @Feature({"Webapps"}) + public void testReportAbuse() throws Throwable { + // Make sure the dialog shows the right values. + verifyReportAbuseValues(/* clickAccept= */ true, "short", "Uninstall 'short'?"); + + // Make sure Canceling the dialog does the right thing. + verifyReportAbuseValues(/* clickAccept= */ false, "short", "Uninstall 'short'?"); } }
diff --git a/chrome/android/profiles/newest.txt b/chrome/android/profiles/newest.txt index b92c448..0d8c069 100644 --- a/chrome/android/profiles/newest.txt +++ b/chrome/android/profiles/newest.txt
@@ -1 +1 @@ -chromeos-chrome-amd64-92.0.4515.32_rc-r1-merged.afdo.bz2 +chromeos-chrome-amd64-93.0.4522.0_rc-r1-merged.afdo.bz2
diff --git a/chrome/app/resources/chromium_strings_is.xtb b/chrome/app/resources/chromium_strings_is.xtb index d4a6286..953b423 100644 --- a/chrome/app/resources/chromium_strings_is.xtb +++ b/chrome/app/resources/chromium_strings_is.xtb
@@ -270,7 +270,7 @@ <translation id="8907580949721785412">Chromium er að reyna að sýna aðgangsorð. Sláðu inn Windows-aðgangsorðið þitt til að heimila þetta.</translation> <translation id="8941642502866065432">Ekki var hægt að uppfæra Chromium</translation> <translation id="8974095189086268230">Chromium OS á tilvist sína að þakka öðrum <ph name="BEGIN_LINK_CROS_OSS" />opnum hugbúnaði<ph name="END_LINK_CROS_OSS" />.</translation> -<translation id="8986207147630327271">Þú ert að bæta vinnuprófíl við þennan vafra og veita stjórnanda þínum leyfi til að stjórna vinnuprófílnum eingöngu.</translation> +<translation id="8986207147630327271">Þú ert að bæta vinnusniði við þennan vafra og veita stjórnanda þínum leyfi til að stjórna vinnusniðinu eingöngu.</translation> <translation id="9019929317751753759">Til að gera Chromium öruggara höfum við slökkt á eftirfarandi viðbót sem ekki er á skrá hjá <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> og kann að hafa verið bætt við án þinnar vitneskju.</translation> <translation id="9047197236183657400">Flytja reikning á nýjan Chromium prófíl?</translation> <translation id="9089354809943900324">Chromium er úrelt</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb index 6e6c622..1105d60 100644 --- a/chrome/app/resources/generated_resources_be.xtb +++ b/chrome/app/resources/generated_resources_be.xtb
@@ -1028,7 +1028,7 @@ <translation id="2082187087049518845">Дадаць укладку ў групу</translation> <translation id="2082510809738716738">Выберыце колер тэмы</translation> <translation id="208586643495776849">Паўтарыце спробу</translation> -<translation id="208634871997892083">Заўсёды ўключаны VPN</translation> +<translation id="208634871997892083">Заўсёды ўключаная VPN</translation> <translation id="2087822576218954668">Друк: <ph name="PRINT_NAME" /></translation> <translation id="2088690981887365033">Сетка VPN</translation> <translation id="208928984520943006">Каб у любы момант перайсці на галоўны экран, правядзіце знізу ўверх.</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index e883446..47f43951b 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -2582,6 +2582,7 @@ <translation id="3742666961763734085">এই নামের কোনও প্রতিষ্ঠানের ইউনিট খুঁজে পাওয়া যাচ্ছে না। অনুগ্রহ করে আবার চেষ্টা করুন।</translation> <translation id="3744111561329211289">পটভূমি সিঙ্ক</translation> <translation id="3747077776423672805">অ্যাপগুলি সরাতে, সেটিংস > Google Play স্টোর > Android অভিরুচি ম্যানেজ করুন > অ্যাপ বা অ্যাপ্লিকেশন ম্যানেজার বিকল্পে যান। এরপর যে অ্যাপটিকে আনইনস্টল করতে চান তাতে ট্যাপ করুন (অ্যাপটি খোঁজার জন্য আপনাকে ডানদিক বা বাঁদিকে সোয়াইপ করতে হতে পারে)। এরপর আনইনস্টল করুন বা বন্ধ করুন বিকল্পে ট্যাপ করুন।</translation> +<translation id="3747220812138541072">টাইপ করার সাথে সাথে প্রদর্শিত হবে এমন ইনলাইন লেখার সাজেশন দেখানো হবে</translation> <translation id="3748706263662799310">একটি বাগ রিপোর্ট করুন</translation> <translation id="3752582316358263300">ঠিক আছে...</translation> <translation id="3753033997400164841">একবার সেভ করুন। সব জায়গায় ব্যবহার করুন</translation> @@ -3270,6 +3271,7 @@ <translation id="4510614391273086606">Linux ফাইল ও অ্যাপগুলিকে, ব্যাক-আপ করার সমকালীন অবস্থায় ফিরিয়ে নিয়ে যাওয়া হচ্ছে।</translation> <translation id="451102079304155829">কার্ট</translation> <translation id="4513275008300099962">'উইন্ডো কন্ট্রোলস ওভারলে' বন্ধ করুন</translation> +<translation id="4513872120116766993">লেখার সাজেশন</translation> <translation id="4513946894732546136">প্রতিক্রিয়া</translation> <translation id="451407183922382411"><ph name="COMPANY_NAME" /> এর দ্বারা চালিত</translation> <translation id="4514610446763173167">ভিডিও চালাতে বা থামানোর জন্য টগল করুন</translation> @@ -4434,6 +4436,7 @@ <translation id="5826395379250998812"><ph name="DEVICE_TYPE" />-কে আপনার ফোনের সাথে কানেক্ট করুন। <ph name="LINK_BEGIN" />আরও জানুন<ph name="LINK_END" /></translation> <translation id="5826993284769733527">অর্ধ-স্বচ্ছ</translation> <translation id="5827266244928330802">Safari</translation> +<translation id="5827733057563115968">পরবর্তী শব্দ সনাক্তকরণ</translation> <translation id="5828545842856466741">প্রোফাইল যোগ করুন...</translation> <translation id="5828633471261496623">মুদ্রন হচ্ছে...</translation> <translation id="5830720307094128296">&পৃষ্ঠা সেভ করুন...</translation> @@ -6303,6 +6306,7 @@ <translation id="78526636422538552">আরও Google অ্যাকাউন্ট যোগ করার সুবিধা এখন উপলভ্য নেই</translation> <translation id="7853747251428735">আরও সর&ঞ্জাম</translation> <translation id="7855678561139483478">ট্যাবটি নতুন উইন্ডোতে খুলুন</translation> +<translation id="7857093393627376423">টেক্সট সংক্রান্ত সাজেশন</translation> <translation id="7857117644404132472">ব্যতিক্রম যোগ করুন</translation> <translation id="7857949311770343000">আপনি কি এই পৃষ্ঠাটিকে নতুন ট্যাব পৃষ্ঠা হিসাবে আশা করছিলেন?</translation> <translation id="7858328180167661092"><ph name="APP_NAME" /> (Windows)</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index f90a014..f32374af 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb
@@ -200,7 +200,7 @@ <translation id="1203942045716040624">SharedWorker: <ph name="SCRIPT_URL" /></translation> <translation id="1209796539517632982">Servidores de nombres automáticos</translation> <translation id="1211769675100312947">Tú gestionas los accesos directos</translation> -<translation id="1213254615020057352">Envía datos de uso y diagnóstico. Contribuye a mejorar la experiencia de Android de tu hijo enviando automáticamente a Google datos de diagnóstico, del dispositivo y del uso de las aplicaciones. Los datos no se usarán para identificar a tu hijo, sino para aumentar la estabilidad de las aplicaciones y del sistema, y realizar otras mejoras. Parte de los datos agregados también ayudarán a las aplicaciones y los partners de Google, como los desarrolladores de Android. El propietario ha aplicado este ajuste. El propietario puede elegir si se envían a Google datos de uso y diagnóstico de este dispositivo. Si la opción Actividad en la Web y en Aplicaciones Adicional está activada, es posible que estos datos se guarden en la cuenta de Google de tu hijo.</translation> +<translation id="1213254615020057352">Envía datos de uso y diagnóstico. Contribuye a mejorar la experiencia de Android de tu hijo enviando automáticamente a Google datos de diagnóstico, del dispositivo y del uso de las aplicaciones. Los datos no se usarán para identificar a tu hijo, sino para aumentar la estabilidad de las aplicaciones y del sistema, y realizar otras mejoras. Parte de los datos agregados también ayudarán a las aplicaciones y a los partners de Google, como los desarrolladores de Android. El propietario ha aplicado este ajuste. El propietario puede elegir si se envían a Google datos de uso y diagnóstico de este dispositivo. Si la opción Actividad en la Web y en Aplicaciones Adicional está activada, es posible que estos datos se guarden en la cuenta de Google de tu hijo.</translation> <translation id="121384500095351701">Este archivo no se puede descargar de forma segura</translation> <translation id="1215411991991485844">Nueva aplicación en segundo plano añadida</translation> <translation id="1216542092748365687">Quitar huella digital</translation> @@ -3712,7 +3712,7 @@ <translation id="5017643436812738274">Puedes desplazarte por las páginas con un cursor de texto. Pulsa Ctrl + tecla de búsqueda + 7 para desactivar esta función.</translation> <translation id="5017828934289857214">Recordar más tarde</translation> <translation id="5018207570537526145">Abrir sitio web de la extensión</translation> -<translation id="5018526990965779848">Envía datos de uso y diagnóstico. Contribuye a mejorar tu experiencia de Android enviando automáticamente a Google datos de diagnóstico, del dispositivo y del uso de las aplicaciones. Los datos servirán para aumentar la estabilidad de las aplicaciones y del sistema y realizar otras mejoras. Parte de los datos agregados también ayudarán a las aplicaciones y los partners de Google, como los desarrolladores de Android. Si la opción Actividad en la Web y en Aplicaciones Adicional está activada, es posible que estos datos se guarden en tu cuenta de Google.</translation> +<translation id="5018526990965779848">Envía datos de uso y diagnóstico. Contribuye a mejorar tu experiencia de Android enviando automáticamente a Google datos de diagnóstico, del dispositivo y del uso de las aplicaciones. Los datos servirán para aumentar la estabilidad de las aplicaciones y del sistema y realizar otras mejoras. Parte de los datos agregados también ayudarán a las aplicaciones y a los partners de Google, como los desarrolladores de Android. Si la opción Actividad en la Web y en Aplicaciones Adicional está activada, es posible que estos datos se guarden en tu cuenta de Google.</translation> <translation id="5021750053540820849">Aún no se ha actualizado</translation> <translation id="5026492829171796515">Inicia sesión para añadir una cuenta de Google</translation> <translation id="5026806129670917316">Activar Wi‑Fi</translation> @@ -3865,7 +3865,7 @@ <translation id="5192062846343383368">Abre la aplicación Family Link para ver la configuración de supervisión</translation> <translation id="5193988420012215838">Se ha copiado al portapapeles</translation> <translation id="5197255632782567636">Internet</translation> -<translation id="5198430103906431024">Envía datos de uso y diagnóstico. Este dispositivo envía automáticamente a Google datos de diagnóstico, del dispositivo y del uso de las aplicaciones. Los datos servirán para aumentar la estabilidad de las aplicaciones y del sistema y realizar otras mejoras. Parte de los datos agregados también ayudarán a las aplicaciones y los partners de Google, como los desarrolladores de Android. Si la opción Actividad en la Web y en Aplicaciones Adicional está activada, es posible que estos datos se guarden en tu cuenta de Google.</translation> +<translation id="5198430103906431024">Envía datos de uso y diagnóstico. Este dispositivo envía automáticamente a Google datos de diagnóstico, del dispositivo y del uso de las aplicaciones. Los datos servirán para aumentar la estabilidad de las aplicaciones y del sistema y realizar otras mejoras. Parte de los datos agregados también ayudarán a las aplicaciones y a los partners de Google, como los desarrolladores de Android. Si la opción Actividad en la Web y en Aplicaciones Adicional está activada, es posible que estos datos se guarden en tu cuenta de Google.</translation> <translation id="5199729219167945352">Experimentos</translation> <translation id="5203920255089865054">{NUM_EXTENSIONS,plural, =1{Haz clic para ver la extensión}other{Haz clic para ver las extensiones}}</translation> <translation id="5204673965307125349">Realiza un powerwash e inténtalo de nuevo.</translation> @@ -4210,7 +4210,7 @@ <translation id="5583640892426849032">Tecla de retroceso</translation> <translation id="5584088138253955452">¿Quieres guardar el nombre de usuario?</translation> <translation id="5584091888252706332">Al inicio</translation> -<translation id="5584915726528712820"><ph name="BEGIN_PARAGRAPH1" />Estos datos son información general sobre tu dispositivo y cómo lo usas (como el nivel de batería, la actividad de las aplicaciones y del sistema, y los errores). Sirven para mejorar Android, y parte de los datos recogidos también ayudan a las aplicaciones y partners de Google, como los desarrolladores de Android, a mejorar sus productos y aplicaciones.<ph name="END_PARAGRAPH1" /> +<translation id="5584915726528712820"><ph name="BEGIN_PARAGRAPH1" />Estos datos incluyen información general sobre tu dispositivo y sobre cómo lo usas (como el nivel de batería, la actividad de las aplicaciones y del sistema, y los errores). Sirven para mejorar Android, y parte de los datos recogidos también ayudan a las aplicaciones y partners de Google, como los desarrolladores de Android, a mejorar sus productos y aplicaciones.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Si la opción se desactiva, esto no afectará a la capacidad del dispositivo de enviar la información necesaria para recibir servicios esenciales, como actualizaciones del sistema y funciones de seguridad.<ph name="END_PARAGRAPH2" /> <ph name="BEGIN_PARAGRAPH3" />El propietario puede controlar esta función en Ajustes > Configuración avanzada > Enviar automáticamente los datos de uso y diagnóstico a Google.<ph name="END_PARAGRAPH3" /> <ph name="BEGIN_PARAGRAPH4" />Si has activado la opción Actividad en la Web y en Aplicaciones, es posible que estos datos se guarden en tu cuenta de Google. Puedes consultar tus datos, eliminarlos y cambiar la configuración de tu cuenta en la página account.google.com.<ph name="END_PARAGRAPH4" /></translation> @@ -5351,7 +5351,7 @@ <translation id="6847125920277401289">Libera espacio para continuar</translation> <translation id="6848388270925200958">Tienes algunas tarjetas que solo se pueden utilizar en este dispositivo</translation> <translation id="6850286078059909152">Color del texto</translation> -<translation id="6851181413209322061">Envía datos de uso y diagnóstico. Este dispositivo envía automáticamente a Google datos de diagnóstico, del dispositivo y del uso de las aplicaciones. Los datos no se usarán para identificar a tu hijo, sino para aumentar la estabilidad de las aplicaciones y del sistema y realizar otras mejoras. Parte de los datos agregados también ayudarán a las aplicaciones y los partners de Google, como los desarrolladores de Android. El propietario ha aplicado este ajuste. Si la opción Actividad en la Web y en Aplicaciones Adicional está activada, es posible que estos datos se guarden en la cuenta de Google de tu hijo.</translation> +<translation id="6851181413209322061">Envía datos de uso y diagnóstico. Este dispositivo envía automáticamente a Google datos de diagnóstico, del dispositivo y del uso de las aplicaciones. Los datos no se usarán para identificar a tu hijo, sino para aumentar la estabilidad de las aplicaciones y del sistema y realizar otras mejoras. Parte de los datos agregados también ayudarán a las aplicaciones y a los partners de Google, como los desarrolladores de Android. El propietario ha aplicado este ajuste. Si la opción Actividad en la Web y en Aplicaciones Adicional está activada, es posible que estos datos se guarden en la cuenta de Google de tu hijo.</translation> <translation id="6851497530878285708">Aplicación habilitada</translation> <translation id="6853142139292753691">¿Restaurar aplicaciones y páginas de forma predeterminada?</translation> <translation id="6853388645642883916">Herramienta de actualización no disponible</translation> @@ -5672,7 +5672,7 @@ <translation id="7203150201908454328">Ampliado</translation> <translation id="7206693748120342859">Descargando <ph name="PLUGIN_NAME" />...</translation> <translation id="720715819012336933">{NUM_PAGES,plural, =1{Salir de la página}other{Salir de las páginas}}</translation> -<translation id="7207457272187520234">Envía datos de uso y diagnóstico. Este dispositivo envía automáticamente a Google datos de diagnóstico, del dispositivo y del uso de las aplicaciones. Los datos servirán para aumentar la estabilidad de las aplicaciones y del sistema y realizar otras mejoras. Parte de los datos agregados también ayudarán a las aplicaciones y los partners de Google, como los desarrolladores de Android. El propietario ha aplicado este ajuste. Si la opción Actividad en la Web y en Aplicaciones Adicional está activada, es posible que estos datos se guarden en tu cuenta de Google.</translation> +<translation id="7207457272187520234">Envía datos de uso y diagnóstico. Este dispositivo envía automáticamente a Google datos de diagnóstico, del dispositivo y del uso de las aplicaciones. Los datos servirán para aumentar la estabilidad de las aplicaciones y del sistema y realizar otras mejoras. Parte de los datos agregados también ayudarán a las aplicaciones y a los partners de Google, como los desarrolladores de Android. El propietario ha aplicado este ajuste. Si la opción Actividad en la Web y en Aplicaciones Adicional está activada, es posible que estos datos se guarden en tu cuenta de Google.</translation> <translation id="7207631048330366454">Buscar aplicaciones</translation> <translation id="7210499381659830293">Impresoras de extensiones</translation> <translation id="7211769023302873228">Pulsa "<ph name="CURRENTKEY" />" otra vez para confirmar la asignación y salir.</translation> @@ -6680,7 +6680,7 @@ <translation id="826511437356419340">Se ha cambiado al modo de vista general de ventanas. Desliza el dedo para desplazarte o pulsa el tabulador si estás utilizando un teclado.</translation> <translation id="8266947622852630193">Todos los métodos de introducción de texto</translation> <translation id="8267539814046467575">Añadir impresora</translation> -<translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />Estos datos son información general sobre tu dispositivo y cómo lo usas (como el nivel de batería, la actividad de las aplicaciones y del sistema, y los errores). Sirven para mejorar Android, y parte de los datos recogidos también ayudan a las aplicaciones y partners de Google, como los desarrolladores de Android, a mejorar sus productos y aplicaciones.<ph name="END_PARAGRAPH1" /> +<translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />Estos datos incluyen información general sobre tu dispositivo y sobre cómo lo usas (como el nivel de batería, la actividad de las aplicaciones y del sistema, y los errores). Sirven para mejorar Android, y parte de los datos recogidos también ayudan a las aplicaciones y partners de Google, como los desarrolladores de Android, a mejorar sus productos y aplicaciones.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Si la opción se desactiva, esto no afectará a la capacidad del dispositivo de enviar la información necesaria para recibir servicios esenciales, como actualizaciones del sistema y funciones de seguridad.<ph name="END_PARAGRAPH2" /> <ph name="BEGIN_PARAGRAPH3" />El propietario puede controlar esta función en Ajustes > Configuración avanzada > Enviar automáticamente los datos de uso y diagnóstico a Google.<ph name="END_PARAGRAPH3" /> <ph name="BEGIN_PARAGRAPH4" />Si has activado la opción Actividad en la Web y en Aplicaciones, es posible que estos datos se guarden en la cuenta de Google de tu hijo. Consulta más información sobre estos ajustes y sobre cómo configurarlos en families.google.com.<ph name="END_PARAGRAPH4" /></translation> @@ -6983,7 +6983,7 @@ <translation id="863903787380594467">PIN incorrecto. Te quedan <ph name="RETRIES" /> intentos.</translation> <translation id="8639047128869322042">Buscando software dañino...</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> (puerto)</translation> -<translation id="8639635302972078117">Envía datos de uso y diagnóstico. Este dispositivo envía automáticamente a Google datos de diagnóstico, del dispositivo y del uso de las aplicaciones. Los datos no se usarán para identificar a tu hijo, sino para aumentar la estabilidad de las aplicaciones y del sistema, y realizar otras mejoras. Parte de los datos agregados también ayudarán a las aplicaciones y los partners de Google, como los desarrolladores de Android. Si la opción Actividad en la Web y en Aplicaciones Adicional está activada, es posible que estos datos se guarden en la cuenta de Google de tu hijo.</translation> +<translation id="8639635302972078117">Envía datos de uso y diagnóstico. Este dispositivo envía automáticamente a Google datos de diagnóstico, del dispositivo y del uso de las aplicaciones. Los datos no se usarán para identificar a tu hijo, sino para aumentar la estabilidad de las aplicaciones y del sistema, y realizar otras mejoras. Parte de los datos agregados también ayudarán a las aplicaciones y a los partners de Google, como los desarrolladores de Android. Si la opción Actividad en la Web y en Aplicaciones Adicional está activada, es posible que estos datos se guarden en la cuenta de Google de tu hijo.</translation> <translation id="8642900771896232685">2 segundos</translation> <translation id="8642947597466641025">Ampliar el tamaño del texto</translation> <translation id="8643443571868262066"><ph name="FILE_NAME" /> podría ser peligroso. ¿Quieres enviarlo a Protección Avanzada de Google para que lo analice?</translation> @@ -7276,7 +7276,7 @@ <translation id="8929696694736010839">Solo a la sesión de incógnito actual</translation> <translation id="8930351635855238750">La nueva configuración de cookies se aplicará al volver a cargar la página</translation> <translation id="8930622219860340959">Conexión inalámbrica</translation> -<translation id="8931076093143205651">Envía datos de uso y diagnóstico. Contribuye a mejorar tu experiencia de Android enviando automáticamente a Google datos de diagnóstico, del dispositivo y del uso de las aplicaciones. Los datos servirán para aumentar la estabilidad de las aplicaciones y del sistema y realizar otras mejoras. Parte de los datos agregados también ayudarán a las aplicaciones y los partners de Google, como los desarrolladores de Android. El propietario ha aplicado este ajuste. El propietario puede elegir si se envían a Google datos de uso y diagnóstico de este dispositivo. Si la opción Actividad en la Web y en Aplicaciones Adicional está activada, es posible que estos datos se guarden en tu cuenta de Google.</translation> +<translation id="8931076093143205651">Envía datos de uso y diagnóstico. Contribuye a mejorar tu experiencia de Android enviando automáticamente a Google datos de diagnóstico, del dispositivo y del uso de las aplicaciones. Los datos servirán para aumentar la estabilidad de las aplicaciones y del sistema y realizar otras mejoras. Parte de los datos agregados también ayudarán a las aplicaciones y a los partners de Google, como los desarrolladores de Android. El propietario ha aplicado este ajuste. El propietario puede elegir si se envían a Google datos de uso y diagnóstico de este dispositivo. Si la opción Actividad en la Web y en Aplicaciones Adicional está activada, es posible que estos datos se guarden en tu cuenta de Google.</translation> <translation id="8931475688782629595">Gestionar qué sincronizas</translation> <translation id="8932654652795262306">Detalles de la conexión compartida instantánea</translation> <translation id="8932894639908691771">Opciones de accesibilidad con interruptores</translation> @@ -7510,7 +7510,7 @@ <translation id="9170848237812810038">&Deshacer</translation> <translation id="9170884462774788842">Otro programa de tu ordenador ha añadido un tema que puede cambiar el funcionamiento de Chrome.</translation> <translation id="917350715406657904">Has llegado al límite de tiempo de uso de <ph name="APP_NAME" /> que ha establecido tu padre o madre. Podrás usar esta aplicación mañana durante <ph name="TIME_LIMIT" />.</translation> -<translation id="9174401638287877180">Envía datos de uso y diagnóstico. Contribuye a mejorar la experiencia de Android de tu hijo enviando automáticamente a Google datos de diagnóstico, del dispositivo y del uso de las aplicaciones. Los datos no se usarán para identificar a tu hijo, sino para aumentar la estabilidad de las aplicaciones y del sistema, y realizar otras mejoras. Parte de los datos agregados también ayudarán a las aplicaciones y los partners de Google, como los desarrolladores de Android. Si la opción Actividad en la Web y en Aplicaciones Adicional está activada, es posible que estos datos se guarden en la cuenta de Google de tu hijo.</translation> +<translation id="9174401638287877180">Envía datos de uso y diagnóstico. Contribuye a mejorar la experiencia de Android de tu hijo enviando automáticamente a Google datos de diagnóstico, del dispositivo y del uso de las aplicaciones. Los datos no se usarán para identificar a tu hijo, sino para aumentar la estabilidad de las aplicaciones y del sistema, y realizar otras mejoras. Parte de los datos agregados también ayudarán a las aplicaciones y a los partners de Google, como los desarrolladores de Android. Si la opción Actividad en la Web y en Aplicaciones Adicional está activada, es posible que estos datos se guarden en la cuenta de Google de tu hijo.</translation> <translation id="917510707618656279">Preguntar cuando un sitio web quiera acceder a los dispositivos Bluetooth</translation> <translation id="9176476835295860688">Enviar datos de uso y diagnóstico. Este dispositivo envía automáticamente a Google datos de diagnóstico, del dispositivo y del uso de las aplicaciones. Los datos servirán para aumentar la estabilidad de las aplicaciones y del sistema y realizar otras mejoras. Parte de los datos recogidos también ayudarán a las aplicaciones y los colaboradores de Google, como los desarrolladores de Android. El propietario ha aplicado este <ph name="BEGIN_LINK1" />ajuste<ph name="END_LINK1" />. Si la opción Actividad en la Web y en Aplicaciones Adicional está activada, es posible que estos datos se guarden en tu cuenta de Google. <ph name="BEGIN_LINK2" />Más información<ph name="END_LINK2" /></translation> <translation id="9176611096776448349"><ph name="WINDOW_TITLE" />: dispositivo Bluetooth conectado</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb index 89569e6..3ce1c92 100644 --- a/chrome/app/resources/generated_resources_eu.xtb +++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -4385,7 +4385,7 @@ <translation id="5781865261247219930">Bidali aginduak <ph name="EXTENSION_NAME" /> luzapenari</translation> <translation id="5782227691023083829">Itzultzen…</translation> <translation id="57838592816432529">Desaktibatu audioa</translation> -<translation id="5785583009707899920">Chrome-ren fitxategietarako tresnak</translation> +<translation id="5785583009707899920">Chrome-ren fitxategietarako zerbitzu-aplikazioak</translation> <translation id="5787146423283493983">Gakoei buruzko akordioa</translation> <translation id="5787420647064736989">Gailuaren izena</translation> <translation id="5788367137662787332">Ezin izan da muntatu <ph name="DEVICE_LABEL" /> gailuaren partizio bat edo gehiago.</translation> @@ -6331,7 +6331,7 @@ <translation id="7903345046358933331">Orri honek ez du erantzuten. Itxaron orriak erantzun arte, edo itxi ezazu.</translation> <translation id="7903742244674067440">Ziurtagiri-emaile hauek identifikatzen dituzten ziurtagiriak dituzu erregistratuta</translation> <translation id="7903859912536385558">egonkorra (probatzaile fidagarria)</translation> -<translation id="7903925330883316394">Zerbitzua: <ph name="UTILITY_TYPE" /></translation> +<translation id="7903925330883316394">Zerbitzu-aplikazioaren prozesua: <ph name="UTILITY_TYPE" /></translation> <translation id="7904094684485781019">Kontu honen administratzaileak saio-hasiera anitzerako baimenak kendu ditu.</translation> <translation id="7904526211178107182">Ezarri Linux-eko atakak sareko beste gailu batzuentzat erabilgarri.</translation> <translation id="7907837847548254634">Erakutsi puntu argi bizkor bat fokuratutako objektuan</translation> @@ -6864,7 +6864,7 @@ <translation id="8492972329130824181">Ez dago erabilgarri etxeko sarea. Datu-ibiltaritzak gaituta egon behar du konektatu ahal izateko.</translation> <translation id="8493236660459102203">Mikrofonoa:</translation> <translation id="8496717697661868878">Abiarazi plugin hau</translation> -<translation id="8497219075884839166">Windows-en tresnak</translation> +<translation id="8497219075884839166">Windows-en zerbitzu-aplikazioak</translation> <translation id="8498214519255567734">Ez zaizu egingo horren nekagarria argi gutxiko inguruetan pantailari begira egotea</translation> <translation id="8498395510292172881">Jarraitu irakurtzen Chrome-n</translation> <translation id="8499083585497694743">Aktibatu mikrofonoa</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb index f2124c3..d0631b7 100644 --- a/chrome/app/resources/generated_resources_gu.xtb +++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -2565,6 +2565,7 @@ <translation id="3742666961763734085">તે નામવાળો કોઈ સંસ્થાકીય એકમ શોધી શકાયો નથી. કૃપા કરીને ફરી પ્રયત્ન કરો.</translation> <translation id="3744111561329211289">પૃષ્ઠભૂમિ સમન્વયન</translation> <translation id="3747077776423672805">ઍપને કાઢી નાખવા માટે, સેટિંગ > Google Play સ્ટોર > Android પસંદગીઓ મેનેજ કરો > ઍપ અથવા ઍપ્લિકેશન મેનેજર પર જાઓ. પછી તમે અનઇન્સ્ટૉલ કરવા માગો છો તે ઍપ પર ટૅપ કરો (ઍપ શોધવા માટે તમારે જમણે અથવા ડાબે સ્વાઇપ કરવું જરૂરી હોય શકે છે). પછી અનઇન્સ્ટૉલ કરો અથવા બંધ કરો પર ટૅપ કરો.</translation> +<translation id="3747220812138541072">તમે ટાઇપ કરી રહ્યાં હો ત્યારે દેખાતા ઇનલાઇન લખવાના સૂચનો બતાવો</translation> <translation id="3748706263662799310">બગની જાણ કરો</translation> <translation id="3752582316358263300">બરાબર, સમજાઇ ગયું...</translation> <translation id="3753033997400164841">એકવાર સ્ટોર કરો. ગમે ત્યાં ઉપયોગ કરો</translation> @@ -3253,6 +3254,7 @@ <translation id="4510614391273086606">Linux ફાઇલો અને ઍપને તેની બૅકઅપ લીધેલી સ્થિતિમાં રિસ્ટોર કરવામાં આવી રહ્યાં છે.</translation> <translation id="451102079304155829">કાર્ટ</translation> <translation id="4513275008300099962">વિન્ડો નિયંત્રણોનું ઓવરલે બંધ કરો</translation> +<translation id="4513872120116766993">પૂર્વાનુમાનિત લેખન</translation> <translation id="4513946894732546136">Feedback</translation> <translation id="451407183922382411"><ph name="COMPANY_NAME" /> દ્વારા સંચાલિત</translation> <translation id="4514610446763173167">વીડિઓ ચલાવવા અથવા થોભાવવા માટે તેને ટૉગલ કરો</translation> @@ -4417,6 +4419,7 @@ <translation id="5826395379250998812">તમારા <ph name="DEVICE_TYPE" />ને તમારા ફોન સાથે કનેક્ટ કરો. <ph name="LINK_BEGIN" />વધુ જાણો<ph name="LINK_END" /></translation> <translation id="5826993284769733527">અર્ધ-પારદર્શક</translation> <translation id="5827266244928330802">Safari</translation> +<translation id="5827733057563115968">આગલા શબ્દનું પૂર્વાનુમાન</translation> <translation id="5828545842856466741">પ્રોફાઇલ ઉમેરો...</translation> <translation id="5828633471261496623">છાપકામ...</translation> <translation id="5830720307094128296">પેજ આ &રીતે સાચવો...</translation> @@ -6287,6 +6290,7 @@ <translation id="78526636422538552">Googleના વધુ એકાઉન્ટ ઉમેરી શકાશે નહીં</translation> <translation id="7853747251428735">વધુ સા&ધનો</translation> <translation id="7855678561139483478">ટૅબને નવી વિંડોમાં ખસેડો</translation> +<translation id="7857093393627376423">ટેક્સ્ટ સૂચનો</translation> <translation id="7857117644404132472">અપવાદ ઉમેરો</translation> <translation id="7857949311770343000">શું આ તમારી અપેક્ષા મુજબનું નવું ટેબ પૃષ્ઠ છે?</translation> <translation id="7858328180167661092"><ph name="APP_NAME" /> (Windows)</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb index d9268c2..651bffc 100644 --- a/chrome/app/resources/generated_resources_is.xtb +++ b/chrome/app/resources/generated_resources_is.xtb
@@ -2317,7 +2317,7 @@ <translation id="3462311546193741693">Skráir þig út af flestum vefsvæðum. Þú verður áfram skráð(ur) inn á Google reikninginn þinn svo hægt sé að hreinsa samstillt gögn.</translation> <translation id="3462413494201477527">Hætta við uppsetningu reiknings?</translation> <translation id="346298925039590474">Allir notendur þessa tækis hafa aðgang að þessu farsímakerfi</translation> -<translation id="3464145797867108663">Bæta við vinnuprófíl</translation> +<translation id="3464145797867108663">Bæta við vinnusniði</translation> <translation id="346431825526753">Þetta er reikningur fyrir börn sem <ph name="CUSTODIAN_EMAIL" /> stjórnar.</translation> <translation id="3468298837301810372">Merki</translation> <translation id="3468999815377931311">Android sími</translation> @@ -5243,7 +5243,7 @@ <translation id="6709133671862442373">Fréttir</translation> <translation id="6709357832553498500">Tengjast með <ph name="EXTENSIONNAME" /></translation> <translation id="6710213216561001401">Til baka</translation> -<translation id="6713233729292711163">Bæta við vinnuprófíl</translation> +<translation id="6713233729292711163">Bæta við vinnusniði</translation> <translation id="6715803357256707211">Villa kom upp við uppsetningu Linux-forritsins. Smelltu á tilkynninguna til að fá nánari upplýsingar.</translation> <translation id="671619610707606484">Þetta hreinsar <ph name="TOTAL_USAGE" /> af gögnum sem vefsvæði geyma</translation> <translation id="671928215901716392">Læsa skjánum</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb index 1fe0489e..551f052 100644 --- a/chrome/app/resources/generated_resources_kn.xtb +++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -2575,6 +2575,7 @@ <translation id="3742666961763734085">ಆ ಹೆಸರಿನ ಸಾಂಸ್ಥಿಕ ಘಟಕವನ್ನು ಕಂಡುಹಿಡಿಯಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="3744111561329211289">ಹಿನ್ನೆಲೆ ಸಿಂಕ್</translation> <translation id="3747077776423672805">ಆ್ಯಪ್ಗಳನ್ನು ತೆಗೆದುಹಾಕಲು, ಸೆಟ್ಟಿಂಗ್ಗಳು > Google Play ಸ್ಟೋರ್ > Android ಆದ್ಯತೆಗಳನ್ನು ನಿರ್ವಹಿಸಿ> ಆ್ಯಪ್ಗಳು ಅಥವಾ ಆ್ಯಪ್ ನಿರ್ವಾಹಕಕ್ಕೆ ಹೋಗಿ ನಂತರ ನೀವು ಅನ್ಇನ್ಸ್ಟಾಲ್ ಮಾಡಲು ಬಯಸುವ ಆ್ಯಪ್ ಅನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ (ಆ್ಯಪ್ ಹುಡುಕಲು ನಿಮಗೆ ಎಡಕ್ಕೆ ಅಥವಾ ಬಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡುವ ಅಗತ್ಯವಿರಬಹುದು). ನಂತರ ಅನ್ಇನ್ಸ್ಟಾಲ್ ಅಥವಾ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ ಅನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ.</translation> +<translation id="3747220812138541072">ನೀವು ಟೈಪ್ ಮಾಡುವಾಗ ಗೋಚರಿಸುವ ಇನ್ಲೈನ್ ಬರವಣಿಗೆಯ ಸಲಹೆಗಳನ್ನು ತೋರಿಸಿ</translation> <translation id="3748706263662799310">ಬಗ್ ವರದಿ ಮಾಡಿ</translation> <translation id="3752582316358263300">ಸರಿ...</translation> <translation id="3753033997400164841">ಒಮ್ಮೆ ಸಂಗ್ರಹಿಸಿ. ಎಲ್ಲೆಡೆ ಬಳಸಿ</translation> @@ -3263,6 +3264,7 @@ <translation id="4510614391273086606">Linux ಫೈಲ್ಗಳು ಮತ್ತು ಆ್ಯಪ್ಗಳನ್ನು, ಅವುಗಳ ಬ್ಯಾಕಪ್ ಮಾಡಲಾದ ಸ್ಥಿತಿಗೆ ಮರುಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ.</translation> <translation id="451102079304155829">ಕಾರ್ಟ್ಗಳು</translation> <translation id="4513275008300099962">ವಿಂಡೋ ನಿಯಂತ್ರಣಗಳ ಓವರ್ಲೇಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ</translation> +<translation id="4513872120116766993">ಮುನ್ಸೂಚಕ ಬರವಣಿಗೆ</translation> <translation id="4513946894732546136">Feedback</translation> <translation id="451407183922382411"><ph name="COMPANY_NAME" /> ಮೂಲಕ ಸಂಚಾಲಿತಗೊಂಡಿದೆ</translation> <translation id="4514610446763173167">ಪ್ಲೇ ಮಾಡಲು ಅಥವಾ ವಿರಾಮಗೊಳಿಸಲು ವೀಡಿಯೊವನ್ನು ಟಾಗಲ್ ಮಾಡಿ</translation> @@ -4428,6 +4430,7 @@ <translation id="5826395379250998812">ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಅನ್ನು, ನಿಮ್ಮ ಫೋನ್ಗೆ ಸಂಪರ್ಕಿಸಿ. <ph name="LINK_BEGIN" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="LINK_END" /></translation> <translation id="5826993284769733527">ಸೆಮಿ-ಟ್ರಾನ್ಸ್ಪರೆಂಟ್</translation> <translation id="5827266244928330802">Safari</translation> +<translation id="5827733057563115968">ಮುಂದಿನ ಪದದ ಮುನ್ನೋಟಗಳು</translation> <translation id="5828545842856466741">ಪ್ರೊಫೈಲ್ ಸೇರಿಸಿ...</translation> <translation id="5828633471261496623">ಮುದ್ರಿಸಲಾಗುತ್ತಿದೆ...</translation> <translation id="5830720307094128296">&ಇದರಂತೆ ಪುಟವನ್ನು ಉಳಿಸಿ...</translation> @@ -6298,6 +6301,7 @@ <translation id="78526636422538552">ಹೆಚ್ಚಿನ Google ಖಾತೆಗಳ ಸೇರಿಸುವಿಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</translation> <translation id="7853747251428735">ಇನ್ನಷ್ಟು ಪರಿಕರ&ಗಳು</translation> <translation id="7855678561139483478">ಟ್ಯಾಬ್ ಅನ್ನು ಹೊಸ ವಿಂಡೋಗೆ ಸರಿಸಿ</translation> +<translation id="7857093393627376423">ಪಠ್ಯ ಸಲಹೆಗಳು</translation> <translation id="7857117644404132472">ವಿನಾಯಿತಿ ಸೇರಿಸು</translation> <translation id="7857949311770343000">ನೀವು ನಿರೀಕ್ಷಿಸುತ್ತಿರುವುದು ಈ ಹೊಸ ಟ್ಯಾಬ್ ಪುಟವೇ?</translation> <translation id="7858328180167661092"><ph name="APP_NAME" /> (Windows)</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb index 796928e9..a01e52a 100644 --- a/chrome/app/resources/generated_resources_ky.xtb +++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -1479,7 +1479,7 @@ <translation id="2537927931785713436">Виртуалдык машинанын сүрөтү текшерилүүдө</translation> <translation id="2538084450874617176"><ph name="DEVICE_TYPE" /> түзмөгүн ким колдонуп жатат?</translation> <translation id="2538361623464451692">Шайкештирүү өчүрүлгөн</translation> -<translation id="2540449034743108469">Кеңейтүүнүн аракеттерин угуу үчүн, "Баштоо" баскычын басыңыз</translation> +<translation id="2540449034743108469">Кеңейтүүнүн аракеттерин угуу үчүн "Баштоо" баскычын басыңыз</translation> <translation id="2540651571961486573">Бир жерден ката кетти. Ката коду: <ph name="ERROR_CODE" />.</translation> <translation id="2541002089857695151">Толук экран режиминде трансляциялоо оптималдаштырылсынбы?</translation> <translation id="2541706104884128042">Жаңы уктоочу убакыт коюлду</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb index 3b188695..e975349 100644 --- a/chrome/app/resources/generated_resources_mr.xtb +++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -2581,6 +2581,7 @@ <translation id="3742666961763734085">त्या नावाचे संस्थात्मक एकक शोधू शकत नाही. कृपया पुन्हा प्रयत्न करा.</translation> <translation id="3744111561329211289">पार्श्वभूमी सिंक</translation> <translation id="3747077776423672805">ॲप्स काढून टाकण्यासाठी, सेटिंग्ज > Google Play स्टोअर > Android प्राधान्ये व्यवस्थापित करा > ॲप्स किंवा अॅप्लिकेशन व्यवस्थापक वर जा. नंतर तुम्हाला अनइंस्टॉल करायच्या असलेल्या ॲपवर टॅप करा (ॲप शोधण्यासाठी तुम्हाला कदाचित उजवीकडे किंवा डावीकडे स्वाइप करावे लागेल). यानंतर अनइंस्टॉल करा किंंवा बंद करा वर टॅप करा.</translation> +<translation id="3747220812138541072">तुम्ही टाइप करत असताना दिसणाऱ्या लिखाणाच्या इनलाइन सूचना दाखवा</translation> <translation id="3748706263662799310">एक दोष नोंदवा</translation> <translation id="3752582316358263300">ठीक आहे...</translation> <translation id="3753033997400164841">एकदा स्टोअर करा. कुठेही वापरा</translation> @@ -3268,6 +3269,7 @@ <translation id="4510614391273086606">Linux फाइल आणि ॲप्स या गोष्टी बॅकअप घेतला होता त्या स्थितीमध्ये रीस्टोअर केल्या जात आहेत.</translation> <translation id="451102079304155829">कार्ट</translation> <translation id="4513275008300099962">विंडो नियंत्रणे ओव्हरले बंद करा</translation> +<translation id="4513872120116766993">अंदाजानुसार लिखाण</translation> <translation id="4513946894732546136">Feedback</translation> <translation id="451407183922382411"><ph name="COMPANY_NAME" />ने समर्थित करा</translation> <translation id="4514610446763173167">प्ले करण्यासाठी किंवा थांबवण्यासाठी व्हिडिओ टॉगल करा</translation> @@ -4431,6 +4433,7 @@ <translation id="5826395379250998812">तुमचे <ph name="DEVICE_TYPE" /> तुमच्या फोनसह कनेक्ट करा. <ph name="LINK_BEGIN" />अधिक जाणून घ्या<ph name="LINK_END" /></translation> <translation id="5826993284769733527">अर्धपारदर्शक</translation> <translation id="5827266244928330802">Safari</translation> +<translation id="5827733057563115968">पुढील शब्दांचा अंदाज</translation> <translation id="5828545842856466741">प्रोफाइल जोडा…</translation> <translation id="5828633471261496623">प्रिंट करत आहे...</translation> <translation id="5830720307094128296">पेज या फॉरमॅटमध्ये सेव्ह करा...</translation> @@ -6300,6 +6303,7 @@ <translation id="78526636422538552">आणखी Google खाती जोडणे बंद केले आहे</translation> <translation id="7853747251428735">अधिक साध&ने</translation> <translation id="7855678561139483478">टॅब नवीन विंडोवर हलवा</translation> +<translation id="7857093393627376423">मजकुराबाबत सूचना</translation> <translation id="7857117644404132472">एक्सेप्शन जोडा</translation> <translation id="7857949311770343000">तुम्ही अपेक्षा करत होता ते हे नवीन पृष्ठ आहे?</translation> <translation id="7858328180167661092"><ph name="APP_NAME" /> (Windows)</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb index deae6320..c71a893 100644 --- a/chrome/app/resources/generated_resources_ne.xtb +++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -2559,6 +2559,7 @@ <translation id="3742666961763734085">त्यो नाम भएको सङ्गठनात्मक एकाइ फेला पार्न सकिएन। कृपया फेरि प्रयास गर्नुहोस्।</translation> <translation id="3744111561329211289">पृष्ठभूमिमा सिंक गर्ने सुविधा</translation> <translation id="3747077776423672805">एप हटाउन, सेटिङहरू > Google Play स्टोर > Android का प्राथमिकताहरू व्यवस्थापन गर्नुहोस् > एपहरू वा एप प्रबन्धक नामक विकल्पमा जानुहोस्। त्यसपछि आफूले स्थापना रद्द गर्न चाहेको एपमा ट्याप गर्नुहोस् (उक्त एप फेला पार्न तपाईंले दायाँ वा बायाँतिर स्वाइप गर्नु पर्ने हुन सक्छ)। त्यसपछि स्थापना रद्द गर्नुहोस् वा असक्षम पार्नुहोस् नामक बटनमा ट्याप गर्नुहोस्।</translation> +<translation id="3747220812138541072">मैले टाइप गर्दै जाँदा लेखनसम्बन्धी इनलाइन सुझावहरू देखाइयोस्</translation> <translation id="3748706263662799310">बगका बारेमा रिपोर्ट गर्नुहोस्</translation> <translation id="3752582316358263300">ठिक छ...</translation> <translation id="3753033997400164841">एक पटक भण्डारण गर्नुहोस्। सबैतिर प्रयोग गर्नुहोस्</translation> @@ -3245,6 +3246,7 @@ <translation id="4510614391273086606">Linux का फाइल र एपहरू पुनर्स्थापना गरी तिनको ब्याकअप स्थितिमा लगिँदै छ।</translation> <translation id="451102079304155829">कार्टहरू</translation> <translation id="4513275008300099962">विन्डो कन्ट्रोल ओभरले असक्षम पार्नुहोस्</translation> +<translation id="4513872120116766993">पूर्वानुमानयुक्त लेखन</translation> <translation id="4513946894732546136">पृष्ठपोषण</translation> <translation id="451407183922382411"><ph name="COMPANY_NAME" /> द्वारा संचालित</translation> <translation id="4514610446763173167">भिडियो प्ले वा पज गर्न टगल गर्नुहोस्</translation> @@ -4195,7 +4197,7 @@ <translation id="5583640892426849032">ब्याकस्पेस</translation> <translation id="5584088138253955452">युजरनेम सुरक्षित गर्ने हो?</translation> <translation id="5584091888252706332">सुरुवातमा</translation> -<translation id="5584915726528712820"><ph name="BEGIN_PARAGRAPH1" />यो तपाईंको डिभाइस र तपाईंले गर्ने त्यसको प्रयोग (जस्तै ब्याट्रीको स्तर, प्रणाली तथा एपका क्रियाकलाप र त्रुटिहरू) सम्बन्धी सामान्य जानकारी हो। यो डेटालाई Android मा सुधार गर्ने प्रयोजनका लागि प्रयोग गरिने छ र केही एकत्रित जानकारीले Google का एप तथा Android का विकासकर्ता जस्ता साझेदारहरूलाई तिनका एप र उत्पादनहरू अझ राम्रो बनाउन पनि मद्दत गर्ने छ।<ph name="END_PARAGRAPH1" /> +<translation id="5584915726528712820"><ph name="BEGIN_PARAGRAPH1" />यो तपाईंको डिभाइस र त्यसको प्रयोग (जस्तै ब्याट्रीको स्तर, प्रणाली तथा एपका क्रियाकलाप र त्रुटिहरू) सम्बन्धी सामान्य जानकारी हो। यो डेटालाई Android मा सुधार गर्ने प्रयोजनका लागि प्रयोग गरिने छ र केही एकत्रित जानकारीले Google का एप तथा Android का विकासकर्ता जस्ता साझेदारहरूलाई तिनका एप र उत्पादनहरू अझ राम्रो बनाउन पनि मद्दत गर्ने छ।<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />यो सुविधा निष्क्रिय पार्नुले प्रणालीका अद्यावधिक र सुरक्षा जस्ता अत्यावश्यक सेवाहरूलाई आवश्यक पर्ने जानकारी पठाउने तपाईंको डिभाइसको क्षमतामा भने कुनै असर पर्दैन।<ph name="END_PARAGRAPH2" /> <ph name="BEGIN_PARAGRAPH3" />यस डिभाइसका मालिक सेटिङहरू > उन्नत > निदान तथा प्रयोगसम्बन्धी डेटा Google मा स्वतः पठाउनुहोस् नामक विकल्पमा गई यो सुविधा नियन्त्रण गर्न सक्नुहुन्छ।<ph name="END_PARAGRAPH3" /> <ph name="BEGIN_PARAGRAPH4" />तपाईंको वेब तथा एपसम्बन्धी अतिरिक्त क्रियाकलापको सेटिङ सक्रिय गरिएको छ भने यो डेटा तपाईंको Google खातामा सुरक्षित गरिन सक्छ। तपाईं account.google.com मा गई आफ्नो डेटा हेर्न, मेटाउन र परिवर्तन गर्न सक्नुहुन्छ।<ph name="END_PARAGRAPH4" /></translation> @@ -4404,6 +4406,7 @@ <translation id="5826395379250998812">आफ्नो <ph name="DEVICE_TYPE" /> आफ्नो फोनमा जोड्नुहोस्। <ph name="LINK_BEGIN" />थप जान्नुहोस्<ph name="LINK_END" /></translation> <translation id="5826993284769733527">अर्धपारदर्शी</translation> <translation id="5827266244928330802">सफारी</translation> +<translation id="5827733057563115968">आउँदो शब्दको पूर्वानुमान</translation> <translation id="5828545842856466741">प्रोफाइल हाल्नुहोस्...</translation> <translation id="5828633471261496623">प्रिन्ट गर्दै...</translation> <translation id="5830720307094128296">पृष्ठलाई यसको &रूपमा बचत गर्नुहोस्...</translation> @@ -6270,6 +6273,7 @@ <translation id="78526636422538552">योभन्दा बढी Google खाताहरू थप्ने सुविधा असक्षम पारिएको छ</translation> <translation id="7853747251428735">थप उपकरणहरू</translation> <translation id="7855678561139483478">ट्याब नयाँ विन्डोमा सार्नुहोस्</translation> +<translation id="7857093393627376423">पाठसम्बन्धी सुझावहरू</translation> <translation id="7857117644404132472">अपवाद थप्नुहोस्</translation> <translation id="7857949311770343000">के यो नै तपाईंले अपेक्षा गर्नुभएको नयाँ ट्याब पृष्ठ हो?</translation> <translation id="7858328180167661092"><ph name="APP_NAME" /> (Windows)</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb index 4c46f63..d1ce480 100644 --- a/chrome/app/resources/generated_resources_sr-Latn.xtb +++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -2661,7 +2661,7 @@ <translation id="3834775135533257713">Dodavanje aplikacije „<ph name="TO_INSTALL_APP_NAME" />“ nije uspelo zbog konflikta sa aplikacijom „<ph name="INSTALLED_APP_NAME" />“.</translation> <translation id="3835233591525155343">Korišćenje uređaja</translation> <translation id="3835522725882634757">O, ne! Ovaj server šalje podatke koje <ph name="PRODUCT_NAME" /> ne razume. <ph name="BEGIN_LINK" />Prijavite grešku<ph name="END_LINK" /> i uz nju pošaljite <ph name="BEGIN2_LINK" />osnovnu listu<ph name="END2_LINK" />.</translation> -<translation id="383669374481694771">Ovo su opšte informacije o ovom uređaju i načinu na koji se koristi (poput nivoa napunjenosti baterije, aktivnosti sistema i aplikacija i grešaka). Podaci će se koristiti za poboljšanje Android-a, a neke objedinjene informacije će pomoći i Google aplikacijama i partnerima, kao što su Android programeri, da poboljšaju svoje aplikacije i proizvode.</translation> +<translation id="383669374481694771">Ovo su opšte informacije o ovom uređaju i načinu na koji se koristi (poput nivoa napunjenosti baterije, aktivnosti sistema i aplikacija, i grešaka). Podaci će se koristiti za poboljšanje Android-a, a neke objedinjene informacije će pomoći i Google aplikacijama i partnerima, kao što su Android programeri, da poboljšaju svoje aplikacije i proizvode.</translation> <translation id="3838085852053358637">Učitavanje dodatka nije uspelo</translation> <translation id="3838486795898716504">Još stranica <ph name="PAGE_TITLE" /></translation> <translation id="383891835335927981">Nijedan sajt nije uvećan ni umanjen</translation> @@ -4210,7 +4210,7 @@ <translation id="5583640892426849032">Backspace</translation> <translation id="5584088138253955452">Želite li da sačuvate korisničko ime?</translation> <translation id="5584091888252706332">Pri pokretanju</translation> -<translation id="5584915726528712820"><ph name="BEGIN_PARAGRAPH1" />Ovo su uopštene informacije o uređaju i načinu na koji se koristi (poput nivoa baterije, aktivnosti sistema i aplikacija i grešaka). Podaci će se koristiti za poboljšavanje Android-a, a neke objedinjene informacije će pomoći i Google aplikacijama i partnerima, kao što su Android programeri, da poboljšaju svoje aplikacije i proizvode.<ph name="END_PARAGRAPH1" /> +<translation id="5584915726528712820"><ph name="BEGIN_PARAGRAPH1" />Ovo su uopštene informacije o uređaju i načinu na koji se koristi (poput nivoa baterije, aktivnosti sistema i aplikacija, i grešaka). Podaci će se koristiti za poboljšavanje Android-a, a neke objedinjene informacije će pomoći i Google aplikacijama i partnerima, kao što su Android programeri, da poboljšaju svoje aplikacije i proizvode.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Isključivanje ove funkcije neće uticati na mogućnost uređaja da šalje informacije potrebne za neophodne usluge, poput ažuriranja sistema i bezbednosnih funkcija.<ph name="END_PARAGRAPH2" /> <ph name="BEGIN_PARAGRAPH3" />Vlasnik može da upravlja ovom funkcijom u odeljku Podešavanja > Napredno > Automatski šalji dijagnostiku i podatke o korišćenju Google-u.<ph name="END_PARAGRAPH3" /> <ph name="BEGIN_PARAGRAPH4" />Ako je uključeno dodatno podešavanje za Aktivnosti na vebu i u aplikacijama, ovi podaci će se možda čuvati na Google nalogu. Možete da pregledate i brišete podatke i da menjate podešavanja naloga na account.google.com.<ph name="END_PARAGRAPH4" /></translation> @@ -6677,7 +6677,7 @@ <translation id="826511437356419340">Ušli ste u režim pregleda prozora. Prevucite da biste se kretali ili pritisnite Tab ako koristite tastaturu.</translation> <translation id="8266947622852630193">Sve metode unosa</translation> <translation id="8267539814046467575">Dodajte štampač</translation> -<translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />Ovo su uopštene informacije o ovom uređaju i načinu na koji se koristi (poput nivoa baterije, aktivnosti sistema i aplikacija i grešaka). Podaci će se koristiti za poboljšavanje Android-a, a neke objedinjene informacije će pomoći i Google aplikacijama i partnerima, kao što su Android programeri, da poboljšaju svoje aplikacije i proizvode.<ph name="END_PARAGRAPH1" /> +<translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />Ovo su uopštene informacije o ovom uređaju i načinu na koji se koristi (poput nivoa baterije, aktivnosti sistema i aplikacija, i grešaka). Podaci će se koristiti za poboljšavanje Android-a, a neke objedinjene informacije će pomoći i Google aplikacijama i partnerima, kao što su Android programeri, da poboljšaju svoje aplikacije i proizvode.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Isključivanje ove funkcije neće uticati na mogućnost ovog uređaja da šalje informacije potrebne za neophodne usluge, poput ažuriranja sistema i bezbednosnih funkcija.<ph name="END_PARAGRAPH2" /> <ph name="BEGIN_PARAGRAPH3" />Vlasnik može da upravlja ovom funkcijom u odeljku Podešavanja > Napredno > Automatski šalji dijagnostiku i podatke o korišćenju Google-u.<ph name="END_PARAGRAPH3" /> <ph name="BEGIN_PARAGRAPH4" />Ako za dete uključite dodatne Aktivnosti na vebu i u aplikacijama, ti podaci će se možda čuvati na Google nalogu deteta. Saznajte više o ovim podešavanjima i o tome kako da ih prilagodite na families.google.com.<ph name="END_PARAGRAPH4" /></translation> @@ -6936,7 +6936,7 @@ <translation id="8590375307970699841">Podesi automatska ažuriranja</translation> <translation id="8590506940709493916">,</translation> <translation id="8591783563402255548">1 sekunda</translation> -<translation id="8592141010104017453">Ne prikazuj nikakva obaveštenja</translation> +<translation id="8592141010104017453">Ne prikazuj uopšte obaveštenja</translation> <translation id="859246725979739260">Ovom sajtu je zabranjeno da pristupa lokaciji.</translation> <translation id="8593121833493516339">Šaljite podatke o korišćenju i dijagnostičke podatke. Pomozite nam da poboljšamo Android doživljaj za dete tako što ćete automatski slati Google-u podatke o dijagnostici i korišćenju uređaja i aplikacija. Te informacije se neće koristiti za identifikaciju deteta i pomoći će u održavanju stabilnosti sistema i aplikacije i drugim podešavanjima. Neki objedinjeni podaci će takođe pomoći Google aplikacijama i partnerima, poput Android programera. Ako za dete uključite dodatne aktivnosti na vebu i u aplikacijama, ti podaci će se možda čuvati na Google nalogu deteta. <ph name="BEGIN_LINK1" />Saznajte više<ph name="END_LINK1" /></translation> <translation id="8594908476761052472">Snimi video</translation> @@ -7087,7 +7087,7 @@ <translation id="8737914367566358838">Odaberite jezik na koji želite da prevedete stranicu</translation> <translation id="8740247629089392745">Možete da predate ovaj Chromebook korisniku <ph name="SUPERVISED_USER_NAME" />. Podešavanje je skoro gotove, pa dolazi vreme za istraživanje.</translation> <translation id="8741944563400125534">Vodič za podešavanje pristupa pomoću prekidača</translation> -<translation id="8742998548129056176">Ovo su opšte informacije o uređaju i načinu na koji ga koristite (poput nivoa napunjenosti baterije, aktivnosti sistema i aplikacija i grešaka). Podaci će se koristiti za poboljšanje Android-a, a neke objedinjene informacije će pomoći i Google aplikacijama i partnerima, kao što su Android programeri, da poboljšaju svoje aplikacije i proizvode.</translation> +<translation id="8742998548129056176">Ovo su opšte informacije o uređaju i načinu na koji ga koristite (poput nivoa napunjenosti baterije, aktivnosti sistema i aplikacija, i grešaka). Podaci će se koristiti za poboljšanje Android-a, a neke objedinjene informacije će pomoći i Google aplikacijama i partnerima, kao što su Android programeri, da poboljšaju svoje aplikacije i proizvode.</translation> <translation id="8743164338060742337"><ph name="NETWORK_INDEX" />. mreža od <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" />, jačina signala <ph name="SIGNAL_STRENGTH" />%, upravlja administrator, povežite</translation> <translation id="8746654918629346731">Već ste tražili „<ph name="EXTENSION_NAME" />“</translation> <translation id="874689135111202667">{0,plural, =1{Želite li da otpremite jednu datoteku na ovaj sajt?}one{Želite li da otpremite # datoteku na ovaj sajt?}few{Želite li da otpremite # datoteke na ovaj sajt?}other{Želite li da otpremite # datoteka na ovaj sajt?}}</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index 6ea92e34..97766cc 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -2661,7 +2661,7 @@ <translation id="3834775135533257713">Додавање апликације „<ph name="TO_INSTALL_APP_NAME" />“ није успело због конфликта са апликацијом „<ph name="INSTALLED_APP_NAME" />“.</translation> <translation id="3835233591525155343">Коришћење уређаја</translation> <translation id="3835522725882634757">О, не! Овај сервер шаље податке које <ph name="PRODUCT_NAME" /> не разуме. <ph name="BEGIN_LINK" />Пријавите грешку<ph name="END_LINK" /> и уз њу пошаљите <ph name="BEGIN2_LINK" />основну листу<ph name="END2_LINK" />.</translation> -<translation id="383669374481694771">Ово су опште информације о овом уређају и начину на који се користи (попут нивоа напуњености батерије, активности система и апликација и грешака). Подаци ће се користити за побољшање Android-а, а неке обједињене информације ће помоћи и Google апликацијама и партнерима, као што су Android програмери, да побољшају своје апликације и производе.</translation> +<translation id="383669374481694771">Ово су опште информације о овом уређају и начину на који се користи (попут нивоа напуњености батерије, активности система и апликација, и грешака). Подаци ће се користити за побољшање Android-а, а неке обједињене информације ће помоћи и Google апликацијама и партнерима, као што су Android програмери, да побољшају своје апликације и производе.</translation> <translation id="3838085852053358637">Учитавање додатка није успело</translation> <translation id="3838486795898716504">Још страница <ph name="PAGE_TITLE" /></translation> <translation id="383891835335927981">Ниједан сајт није увећан ни умањен</translation> @@ -4210,7 +4210,7 @@ <translation id="5583640892426849032">Backspace</translation> <translation id="5584088138253955452">Желите ли да сачувате корисничко име?</translation> <translation id="5584091888252706332">При покретању</translation> -<translation id="5584915726528712820"><ph name="BEGIN_PARAGRAPH1" />Ово су уопштене информације о уређају и начину на који се користи (попут нивоа батерије, активности система и апликација и грешака). Подаци ће се користити за побољшавање Android-а, а неке обједињене информације ће помоћи и Google апликацијама и партнерима, као што су Android програмери, да побољшају своје апликације и производе.<ph name="END_PARAGRAPH1" /> +<translation id="5584915726528712820"><ph name="BEGIN_PARAGRAPH1" />Ово су уопштене информације о уређају и начину на који се користи (попут нивоа батерије, активности система и апликација, и грешака). Подаци ће се користити за побољшавање Android-а, а неке обједињене информације ће помоћи и Google апликацијама и партнерима, као што су Android програмери, да побољшају своје апликације и производе.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Искључивање ове функције неће утицати на могућност уређаја да шаље информације потребне за неопходне услуге, попут ажурирања система и безбедносних функција.<ph name="END_PARAGRAPH2" /> <ph name="BEGIN_PARAGRAPH3" />Власник може да управља овом функцијом у одељку Подешавања > Напредно > Аутоматски шаљи дијагностику и податке о коришћењу Google-у.<ph name="END_PARAGRAPH3" /> <ph name="BEGIN_PARAGRAPH4" />Ако је укључено додатно подешавање за Активности на вебу и у апликацијама, ови подаци ће се можда чувати на Google налогу. Можете да прегледате и бришете податке и да мењате подешавања налога на account.google.com.<ph name="END_PARAGRAPH4" /></translation> @@ -6677,7 +6677,7 @@ <translation id="826511437356419340">Ушли сте у режим прегледа прозора. Превуците да бисте се кретали или притисните Tab ако користите тастатуру.</translation> <translation id="8266947622852630193">Све методе уноса</translation> <translation id="8267539814046467575">Додајте штампач</translation> -<translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />Ово су уопштене информације о овом уређају и начину на који се користи (попут нивоа батерије, активности система и апликација и грешака). Подаци ће се користити за побољшавање Android-а, а неке обједињене информације ће помоћи и Google апликацијама и партнерима, као што су Android програмери, да побољшају своје апликације и производе.<ph name="END_PARAGRAPH1" /> +<translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />Ово су уопштене информације о овом уређају и начину на који се користи (попут нивоа батерије, активности система и апликација, и грешака). Подаци ће се користити за побољшавање Android-а, а неке обједињене информације ће помоћи и Google апликацијама и партнерима, као што су Android програмери, да побољшају своје апликације и производе.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />Искључивање ове функције неће утицати на могућност овог уређаја да шаље информације потребне за неопходне услуге, попут ажурирања система и безбедносних функција.<ph name="END_PARAGRAPH2" /> <ph name="BEGIN_PARAGRAPH3" />Власник може да управља овом функцијом у одељку Подешавања > Напредно > Аутоматски шаљи дијагностику и податке о коришћењу Google-у.<ph name="END_PARAGRAPH3" /> <ph name="BEGIN_PARAGRAPH4" />Ако за дете укључите додатне Активности на вебу и у апликацијама, ти подаци ће се можда чувати на Google налогу детета. Сазнајте више о овим подешавањима и о томе како да их прилагодите на families.google.com.<ph name="END_PARAGRAPH4" /></translation> @@ -6936,7 +6936,7 @@ <translation id="8590375307970699841">Подеси аутоматска ажурирања</translation> <translation id="8590506940709493916">,</translation> <translation id="8591783563402255548">1 секунда</translation> -<translation id="8592141010104017453">Не приказуј никаква обавештења</translation> +<translation id="8592141010104017453">Не приказуј уопште обавештења</translation> <translation id="859246725979739260">Овом сајту је забрањено да приступа локацији.</translation> <translation id="8593121833493516339">Шаљите податке о коришћењу и дијагностичке податке. Помозите нам да побољшамо Android доживљај за дете тако што ћете аутоматски слати Google-у податке о дијагностици и коришћењу уређаја и апликација. Те информације се неће користити за идентификацију детета и помоћи ће у одржавању стабилности система и апликације и другим подешавањима. Неки обједињени подаци ће такође помоћи Google апликацијама и партнерима, попут Android програмера. Ако за дете укључите додатне активности на вебу и у апликацијама, ти подаци ће се можда чувати на Google налогу детета. <ph name="BEGIN_LINK1" />Сазнајте више<ph name="END_LINK1" /></translation> <translation id="8594908476761052472">Сними видео</translation> @@ -7087,7 +7087,7 @@ <translation id="8737914367566358838">Одаберите језик на који желите да преведете страницу</translation> <translation id="8740247629089392745">Можете да предате овај Chromebook кориснику <ph name="SUPERVISED_USER_NAME" />. Подешавање је скоро готове, па долази време за истраживање.</translation> <translation id="8741944563400125534">Водич за подешавање приступа помоћу прекидача</translation> -<translation id="8742998548129056176">Ово су опште информације о уређају и начину на који га користите (попут нивоа напуњености батерије, активности система и апликација и грешака). Подаци ће се користити за побољшање Android-а, а неке обједињене информације ће помоћи и Google апликацијама и партнерима, као што су Android програмери, да побољшају своје апликације и производе.</translation> +<translation id="8742998548129056176">Ово су опште информације о уређају и начину на који га користите (попут нивоа напуњености батерије, активности система и апликација, и грешака). Подаци ће се користити за побољшање Android-а, а неке обједињене информације ће помоћи и Google апликацијама и партнерима, као што су Android програмери, да побољшају своје апликације и производе.</translation> <translation id="8743164338060742337"><ph name="NETWORK_INDEX" />. мрежа од <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" />, јачина сигнала <ph name="SIGNAL_STRENGTH" />%, управља администратор, повежите</translation> <translation id="8746654918629346731">Већ сте тражили „<ph name="EXTENSION_NAME" />“</translation> <translation id="874689135111202667">{0,plural, =1{Желите ли да отпремите једну датотеку на овај сајт?}one{Желите ли да отпремите # датотеку на овај сајт?}few{Желите ли да отпремите # датотеке на овај сајт?}other{Желите ли да отпремите # датотека на овај сајт?}}</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index 243a5db..78f927d 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -4051,7 +4051,7 @@ <translation id="538822246583124912">நிறுவனத்தின் கொள்கை மாறியுள்ளது. கருவிப்பட்டியில் ’பரிசோதனைகள்’ பட்டன் சேர்க்கப்பட்டது. பரிசோதனைகளை இயக்குவதற்கான உரையாடலைத் திறக்க, இந்த பட்டனைக் கிளிக் செய்யவும்.</translation> <translation id="5388885445722491159">சேர்க்கப்பட்டவை</translation> <translation id="5390100381392048184">ஒலியை இயக்க, தளங்களை அனுமதி</translation> -<translation id="5390112241331447203">கருத்து அறிக்கைகளில் அனுப்பிய system_logs.txt கோப்பினைச் சேர்க்கும்.</translation> +<translation id="5390112241331447203">கருத்து அறிக்கைகளில் அனுப்பிய system_logs.txt ஃபைலைச் சேர்க்கும்.</translation> <translation id="5390677308841849479">அடர் சிவப்பு & ஆரஞ்சு</translation> <translation id="5390743329570580756">இதற்காக அனுப்பு:</translation> <translation id="5392192690789334093">அறிவிப்புகளை அனுப்ப அனுமதிக்கப்பட்டவை</translation> @@ -4896,7 +4896,7 @@ <translation id="6317318380444133405">இனி ஆதரிக்கப்படாது.</translation> <translation id="6317369057005134371">ஆப்ஸ் சாளரத்திற்காகக் காத்திருக்கிறது...</translation> <translation id="6317608858038767920">பிரத்தியேகப் பெயர்மாற்றி <ph name="INPUT_INDEX" /></translation> -<translation id="6318125393809743217">கொள்கை உள்ளமைவுகளுடன் policies.json கோப்பினைச் சேர்.</translation> +<translation id="6318125393809743217">கொள்கை உள்ளமைவுகளுடன் policies.json ஃபைலைச் சேர்.</translation> <translation id="6318407754858604988">பதிவிறக்கம் தொடங்கியது</translation> <translation id="6318944945640833942">பிரிண்டரைக் கண்டறிய இயலவில்லை. பிரிண்டர் முகரியை மீண்டும் உள்ளிடுக.</translation> <translation id="6321407676395378991">ஸ்கிரீன் சேவரை இயக்குதல்</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb index a1d7917..2195a3d 100644 --- a/chrome/app/resources/generated_resources_tr.xtb +++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -1804,7 +1804,7 @@ <translation id="2910318910161511225">Bir ağa bağlanın ve tekrar deneyin</translation> <translation id="291056154577034373">OKUNMAYANLAR</translation> <translation id="2910718431259223434">Bir hata oluştu. Lütfen tekrar deneyin veya cihaz sahibi ya da yöneticisiyle iletişime geçin. Hata kodu: <ph name="ERROR_CODE" />.</translation> -<translation id="2911433807131383493">ChromeVox eğiticiyi aç</translation> +<translation id="2911433807131383493">ChromeVox eğitimini aç</translation> <translation id="2913331724188855103">Sitelerin, çerez verilerini kaydetmelerine ve okumalarına izin ver (önerilir)</translation> <translation id="2915102088417824677">Etkinlik günlüğünü göster</translation> <translation id="2915873080513663243">Otomatik tarama</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb index 28a61a2..a7d0ff0 100644 --- a/chrome/app/resources/generated_resources_ur.xtb +++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -2567,6 +2567,7 @@ <translation id="3742666961763734085">اس نام کا تنظیمی یونٹ تلاش نہیں کیا جا سکا۔ براہ کرم دوبارہ کوشش کریں۔</translation> <translation id="3744111561329211289">پس منظر کی مطابقت پذیری</translation> <translation id="3747077776423672805">ایپس ہٹانے کے لیے، ترتیبات > Google Play اسٹور > Android کی ترجیحات کا نظم کریں > ایپس یا ایپلیکیشن مینیجر پر جائیں۔ پھر اس ایپ پر تھپتھپائیں جسے آپ اَن انسٹال کرنا چاہتے ہیں (ممکن ہے کہ ایپ تلاش کرنے کے لیے آپ کو دائیں یا بائیں سوائپ کرنا پڑے)۔ پھر 'اَن انسٹال کریں' یا 'غیر فعال کریں' پر تھپتھپائیں۔</translation> +<translation id="3747220812138541072">ان لائن لکھنے کی تجاویز دکھائیں جو آپ کے ٹائپ کرتے ہی ظاہر ہوتے ہیں</translation> <translation id="3748706263662799310">بگ کی اطلاع دیں</translation> <translation id="3752582316358263300">ٹھیک ہے…</translation> <translation id="3753033997400164841">ایک بار اسٹور کریں۔ ہر جگہ استعمال کریں</translation> @@ -3255,6 +3256,7 @@ <translation id="4510614391273086606">Linux فائلز اور ایپس کو ان کی بیک اپ حالت میں بحال کیا جا رہا ہے۔</translation> <translation id="451102079304155829">کارٹس</translation> <translation id="4513275008300099962">ونڈو کنٹرولز اوورلے کو غیر فعال کریں</translation> +<translation id="4513872120116766993">لکھنے میں لفظ کی پیشین گوئی</translation> <translation id="4513946894732546136">تاثرات</translation> <translation id="451407183922382411"><ph name="COMPANY_NAME" /> کی جانب سے تقویت یافتہ</translation> <translation id="4514610446763173167">چلانے یا روکنے کیلئے ویڈیو ٹوگل کریں</translation> @@ -4418,6 +4420,7 @@ <translation id="5826395379250998812">اپنے <ph name="DEVICE_TYPE" /> کو اپنے فون سے منسلک کریں۔ <ph name="LINK_BEGIN" />مزید جانیں<ph name="LINK_END" /></translation> <translation id="5826993284769733527">نیم شفاف</translation> <translation id="5827266244928330802">Safari</translation> +<translation id="5827733057563115968">اگلے لفظ کی پیشن گوئی</translation> <translation id="5828545842856466741">پروفائل شامل کریں...</translation> <translation id="5828633471261496623">پرنٹ کیا جا رہا ہے…</translation> <translation id="5830720307094128296">صفحہ محفوظ کریں &بطور…</translation> @@ -6289,6 +6292,7 @@ <translation id="78526636422538552">مزید Google اکاؤنٹس شامل کرنے کا عمل غیر فعال ہے</translation> <translation id="7853747251428735">مزید ٹولز</translation> <translation id="7855678561139483478">ٹیب کو نئی ونڈو میں منتقل کریں</translation> +<translation id="7857093393627376423">متنی تجاویز</translation> <translation id="7857117644404132472">استثناء شامل کریں</translation> <translation id="7857949311770343000">کیا یہی وہ نیا ٹیب صفحہ ہے جس کی آپ توقع کر رہے تھے؟</translation> <translation id="7858328180167661092"><ph name="APP_NAME" /> (Windows)</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index bb97901..2d5e324 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -3134,7 +3134,7 @@ <translation id="4363771538994847871">Không tìm thấy đích Truyền nào. Bạn cần trợ giúp?</translation> <translation id="4364327530094270451">Quả dưa</translation> <translation id="4364567974334641491"><ph name="APP_NAME" /> đang chia sẻ một cửa sổ.</translation> -<translation id="4364830672918311045">Hiển thị thông báo</translation> +<translation id="4364830672918311045">Hiện thông báo</translation> <translation id="4366138410738374926">Đã bắt đầu in</translation> <translation id="4370975561335139969">Email và mật khẩu bạn nhập không khớp</translation> <translation id="4373966964907728675">Đang truyền màn hình</translation>
diff --git a/chrome/app/resources/google_chrome_strings_is.xtb b/chrome/app/resources/google_chrome_strings_is.xtb index d65a307..493332b 100644 --- a/chrome/app/resources/google_chrome_strings_is.xtb +++ b/chrome/app/resources/google_chrome_strings_is.xtb
@@ -291,7 +291,7 @@ <translation id="8862326446509486874">Þú hefur ekki tilskilin réttindi til uppsetningar fyrir kerfið allt. Prófaðu að keyra uppsetningarforritið aftur sem stjórnandi.</translation> <translation id="8914504000324227558">Endurræsa Chrome</translation> <translation id="8922193594870374009">Til að senda númer úr <ph name="ORIGIN" /> í Android símann þinn skaltu skrá þig inn á Chrome í báðum tækjunum.</translation> -<translation id="8986207147630327271">Þú ert að bæta vinnuprófíl við þennan vafra og veita stjórnanda þínum leyfi til að stjórna vinnuprófílnum eingöngu.</translation> +<translation id="8986207147630327271">Þú ert að bæta vinnusniði við þennan vafra og veita stjórnanda þínum leyfi til að stjórna vinnusniðinu eingöngu.</translation> <translation id="8999208279178790196">{0,plural, =0{Uppfærsla er í boði fyrir Chrome}=1{Uppfærsla er í boði fyrir Chrome}one{Uppfærsla hefur verið í boði fyrir Chrome í # dag}other{Uppfærsla hefur verið í boði fyrir Chrome í # daga}}</translation> <translation id="9026991721384951619">Chrome OS gat ekki samstillt gögnin þín vegna þess að innskráningarupplýsingar reikningsins eru úreltar.</translation> <translation id="9067395829937117663">Google Chrome krefst Windows 7 eða nýrri útgáfu.</translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 1994072..43fffa4 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -536,8 +536,6 @@ "gcm/gcm_profile_service_factory.h", "gcm/instance_id/instance_id_profile_service_factory.cc", "gcm/instance_id/instance_id_profile_service_factory.h", - "generic_sensor/sensor_permission_context.cc", - "generic_sensor/sensor_permission_context.h", "geolocation/geolocation_permission_context_delegate.cc", "geolocation/geolocation_permission_context_delegate.h", "geolocation/geolocation_permission_context_extensions.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 9dc3f2de..18240ea 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -6412,10 +6412,6 @@ flag_descriptions::kClientStorageAccessContextAuditingDescription, kOsAll, FEATURE_VALUE_TYPE(features::kClientStorageAccessContextAuditing)}, - {"clipboard-filenames", flag_descriptions::kClipboardFilenamesName, - flag_descriptions::kClipboardFilenamesDescription, kOsAll, - FEATURE_VALUE_TYPE(features::kClipboardFilenames)}, - #if defined(OS_WIN) {"safety-check-chrome-cleaner-child", flag_descriptions::kSafetyCheckChromeCleanerChildName,
diff --git a/chrome/browser/android/autofill_assistant/assistant_collect_user_data_delegate.cc b/chrome/browser/android/autofill_assistant/assistant_collect_user_data_delegate.cc index 1ef62c7..d2c11b45 100644 --- a/chrome/browser/android/autofill_assistant/assistant_collect_user_data_delegate.cc +++ b/chrome/browser/android/autofill_assistant/assistant_collect_user_data_delegate.cc
@@ -192,21 +192,6 @@ return java_assistant_collect_user_data_delegate_; } -bool AssistantCollectUserDataDelegate::IsShippingAddressComplete( - JNIEnv* env, - const base::android::JavaParamRef<jobject>& jcaller, - const base::android::JavaParamRef<jobject>& jaddress) { - if (!jaddress) { - return ui_controller_->IsShippingAddressComplete(nullptr); - } - - autofill::AutofillProfile address; - autofill::PersonalDataManagerAndroid::PopulateNativeProfileFromJava( - jaddress, env, &address); - - return ui_controller_->IsShippingAddressComplete(&address); -} - bool AssistantCollectUserDataDelegate::IsPaymentInstrumentComplete( JNIEnv* env, const base::android::JavaParamRef<jobject>& jcaller,
diff --git a/chrome/browser/android/autofill_assistant/assistant_collect_user_data_delegate.h b/chrome/browser/android/autofill_assistant/assistant_collect_user_data_delegate.h index 522b5de..2a92a2a 100644 --- a/chrome/browser/android/autofill_assistant/assistant_collect_user_data_delegate.h +++ b/chrome/browser/android/autofill_assistant/assistant_collect_user_data_delegate.h
@@ -95,11 +95,6 @@ const base::android::JavaParamRef<jobject>& jcaller, jboolean jis_focused); - bool IsShippingAddressComplete( - JNIEnv* env, - const base::android::JavaParamRef<jobject>& jcaller, - const base::android::JavaParamRef<jobject>& jaddress); - bool IsPaymentInstrumentComplete( JNIEnv* env, const base::android::JavaParamRef<jobject>& jcaller,
diff --git a/chrome/browser/android/autofill_assistant/ui_controller_android.cc b/chrome/browser/android/autofill_assistant/ui_controller_android.cc index efa4840b..a8ec539e 100644 --- a/chrome/browser/android/autofill_assistant/ui_controller_android.cc +++ b/chrome/browser/android/autofill_assistant/ui_controller_android.cc
@@ -1199,15 +1199,6 @@ base::TimeDelta::FromMilliseconds(50)); } -bool UiControllerAndroid::IsShippingAddressComplete( - autofill::AutofillProfile* address) { - auto* options = ui_delegate_->GetCollectUserDataOptions(); - if (options == nullptr) { - return false; - } - return IsCompleteShippingAddress(address, *options); -} - bool UiControllerAndroid::IsPaymentInstrumentComplete( autofill::CreditCard* card, autofill::AutofillProfile* address) { @@ -1437,6 +1428,20 @@ const auto& selected_contact_errors = user_data::GetContactValidationErrors( selected_contact_profile, *collect_user_data_options); + const autofill::AutofillProfile* selected_shipping_address = + state->selected_address(collect_user_data_options->shipping_address_name); + auto jselected_shipping_address = + selected_shipping_address == nullptr + ? nullptr + : Java_AssistantCollectUserDataModel_createAutofillAddress( + env, jcontext, + autofill::PersonalDataManagerAndroid:: + CreateJavaProfileFromNative(env, + *selected_shipping_address)); + const auto& selected_shipping_address_errors = + user_data::GetShippingAddressValidationErrors(selected_shipping_address, + *collect_user_data_options); + if (field_change == UserData::FieldChange::ALL || field_change == UserData::FieldChange::AVAILABLE_PROFILES) { // Contact profiles. @@ -1467,26 +1472,26 @@ env, jmodel, jselected_contact, base::android::ToJavaArrayOfStrings(env, selected_contact_errors)); - // Billing addresses profiles. + // Billing address profiles. auto jbillinglist = - Java_AssistantCollectUserDataModel_createAutofillAddressList(env); + Java_AssistantCollectUserDataModel_createBillingAddressList(env); for (const auto& profile : state->available_profiles_) { auto jaddress = Java_AssistantCollectUserDataModel_createAutofillAddress( env, jcontext, autofill::PersonalDataManagerAndroid::CreateJavaProfileFromNative( env, *profile)); if (jaddress) { - Java_AssistantCollectUserDataModel_addAutofillAddress(env, jbillinglist, - jaddress); + Java_AssistantCollectUserDataModel_addBillingAddress(env, jbillinglist, + jaddress); } } Java_AssistantCollectUserDataModel_setAvailableBillingAddresses( env, jmodel, jbillinglist); - // Address profiles. + // Shipping address profiles. auto jshippinglist = - Java_AssistantCollectUserDataModel_createAutofillAddressList(env); - auto address_indices = SortAddressesByCompleteness( + Java_AssistantCollectUserDataModel_createShippingAddressList(env); + auto address_indices = user_data::SortShippingAddressesByCompleteness( *collect_user_data_options, state->available_profiles_); for (int index : address_indices) { auto jaddress = Java_AssistantCollectUserDataModel_createAutofillAddress( @@ -1494,25 +1499,20 @@ autofill::PersonalDataManagerAndroid::CreateJavaProfileFromNative( env, *state->available_profiles_[index])); if (jaddress) { - Java_AssistantCollectUserDataModel_addAutofillAddress( - env, jshippinglist, jaddress); + const auto& errors = user_data::GetShippingAddressValidationErrors( + state->available_profiles_[index].get(), + *collect_user_data_options); + Java_AssistantCollectUserDataModel_addShippingAddress( + env, jshippinglist, jaddress, + base::android::ToJavaArrayOfStrings(env, errors)); } } Java_AssistantCollectUserDataModel_setAvailableShippingAddresses( env, jmodel, jshippinglist); - - // Ignore changes to FieldChange::SHIPPING_ADDRESS, this is already coming - // from the view. - const autofill::AutofillProfile* shipping_address = state->selected_address( - collect_user_data_options->shipping_address_name); Java_AssistantCollectUserDataModel_setSelectedShippingAddress( - env, jmodel, - shipping_address == nullptr - ? nullptr - : Java_AssistantCollectUserDataModel_createAutofillAddress( - env, jcontext, - autofill::PersonalDataManagerAndroid:: - CreateJavaProfileFromNative(env, *shipping_address))); + env, jmodel, jselected_shipping_address, + base::android::ToJavaArrayOfStrings(env, + selected_shipping_address_errors)); } if (field_change == UserData::FieldChange::CONTACT_PROFILE) { // The selection is already known in Java, but it has no errors. The PDM @@ -1521,6 +1521,14 @@ env, jmodel, jselected_contact, base::android::ToJavaArrayOfStrings(env, selected_contact_errors)); } + if (field_change == UserData::FieldChange::SHIPPING_ADDRESS) { + // The selection is already known in Java, but it has no errors. The PDM + // off case does not set updated shipping addresses. + Java_AssistantCollectUserDataModel_setSelectedShippingAddress( + env, jmodel, jselected_shipping_address, + base::android::ToJavaArrayOfStrings(env, + selected_shipping_address_errors)); + } if (field_change == UserData::FieldChange::ALL || field_change == UserData::FieldChange::AVAILABLE_PAYMENT_INSTRUMENTS) {
diff --git a/chrome/browser/android/autofill_assistant/ui_controller_android.h b/chrome/browser/android/autofill_assistant/ui_controller_android.h index afaed9d..3eda3ee 100644 --- a/chrome/browser/android/autofill_assistant/ui_controller_android.h +++ b/chrome/browser/android/autofill_assistant/ui_controller_android.h
@@ -162,7 +162,6 @@ void OnDateTimeRangeEndTimeSlotCleared(); void OnKeyValueChanged(const std::string& key, const ValueProto& value); void OnInputTextFocusChanged(bool is_text_focused); - bool IsShippingAddressComplete(autofill::AutofillProfile* address); bool IsPaymentInstrumentComplete(autofill::CreditCard* card, autofill::AutofillProfile* address);
diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm index eaa8fdc..fb4b2adc 100644 --- a/chrome/browser/app_controller_mac.mm +++ b/chrome/browser/app_controller_mac.mm
@@ -92,6 +92,7 @@ #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_shortcut_mac.h" +#include "chrome/common/chrome_features.h" #include "chrome/common/chrome_paths_internal.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/extensions/extension_constants.h" @@ -748,7 +749,14 @@ _tabMenuBridge.reset(); } - [self windowChangedToProfile:browser->profile()]; + Profile* profile = browser->profile(); + // If kUpdateHistoryEntryPointsInIncognito is not enabled, always pass + // original profile. + if (!base::FeatureList::IsEnabled( + features::kUpdateHistoryEntryPointsInIncognito)) { + profile = profile->GetOriginalProfile(); + } + [self windowChangedToProfile:profile]; } - (void)windowDidResignMain:(NSNotification*)notify { @@ -1772,6 +1780,10 @@ if (_historyMenuBridge) _historyMenuBridge->ResetMenu(); + // Clear the profile pref registrar before tearing down. + if (_profilePrefRegistrar) + _profilePrefRegistrar->RemoveAll(); + // Rebuild the menus with the new profile. The bookmarks submenu is cached to // avoid slowdowns when switching between profiles with large numbers of // bookmarks. Before caching, store whether it is hidden, make the menu item
diff --git a/chrome/browser/ash/attestation/enrollment_certificate_uploader_impl.cc b/chrome/browser/ash/attestation/enrollment_certificate_uploader_impl.cc index 837b829f..d91bb7e 100644 --- a/chrome/browser/ash/attestation/enrollment_certificate_uploader_impl.cc +++ b/chrome/browser/ash/attestation/enrollment_certificate_uploader_impl.cc
@@ -12,6 +12,7 @@ #include "base/time/time.h" #include "chrome/browser/ash/attestation/attestation_ca_client.h" #include "chromeos/attestation/attestation_flow.h" +#include "chromeos/attestation/attestation_flow_adaptive.h" #include "chromeos/cryptohome/cryptohome_parameters.h" #include "chromeos/dbus/dbus_method_call_status.h" #include "components/account_id/account_id.h" @@ -95,8 +96,8 @@ if (!attestation_flow_) { std::unique_ptr<ServerProxy> attestation_ca_client( new AttestationCAClient()); - default_attestation_flow_ = - std::make_unique<AttestationFlow>(std::move(attestation_ca_client)); + default_attestation_flow_ = std::make_unique<AttestationFlowAdaptive>( + std::move(attestation_ca_client)); attestation_flow_ = default_attestation_flow_.get(); }
diff --git a/chrome/browser/ash/attestation/machine_certificate_uploader_impl.cc b/chrome/browser/ash/attestation/machine_certificate_uploader_impl.cc index c8a728d..67ee72b0 100644 --- a/chrome/browser/ash/attestation/machine_certificate_uploader_impl.cc +++ b/chrome/browser/ash/attestation/machine_certificate_uploader_impl.cc
@@ -16,6 +16,7 @@ #include "chrome/browser/ash/attestation/attestation_ca_client.h" #include "chrome/browser/ash/attestation/attestation_key_payload.pb.h" #include "chromeos/attestation/attestation_flow.h" +#include "chromeos/attestation/attestation_flow_adaptive.h" #include "chromeos/cryptohome/cryptohome_parameters.h" #include "chromeos/dbus/attestation/attestation_client.h" #include "chromeos/dbus/attestation/interface.pb.h" @@ -116,8 +117,8 @@ if (!attestation_flow_) { std::unique_ptr<ServerProxy> attestation_ca_client( new AttestationCAClient()); - default_attestation_flow_ = - std::make_unique<AttestationFlow>(std::move(attestation_ca_client)); + default_attestation_flow_ = std::make_unique<AttestationFlowAdaptive>( + std::move(attestation_ca_client)); attestation_flow_ = default_attestation_flow_.get(); }
diff --git a/chrome/browser/ash/attestation/platform_verification_flow.cc b/chrome/browser/ash/attestation/platform_verification_flow.cc index 1d384a5..e972cf2a 100644 --- a/chrome/browser/ash/attestation/platform_verification_flow.cc +++ b/chrome/browser/ash/attestation/platform_verification_flow.cc
@@ -21,6 +21,7 @@ #include "chrome/browser/permissions/permission_manager_factory.h" #include "chrome/browser/profiles/profile.h" #include "chromeos/attestation/attestation_flow.h" +#include "chromeos/attestation/attestation_flow_adaptive.h" #include "chromeos/cryptohome/cryptohome_parameters.h" #include "chromeos/dbus/attestation/attestation.pb.h" #include "chromeos/dbus/attestation/attestation_client.h" @@ -141,8 +142,8 @@ timeout_delay_(base::TimeDelta::FromSeconds(kTimeoutInSeconds)) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); std::unique_ptr<ServerProxy> attestation_ca_client(new AttestationCAClient()); - default_attestation_flow_ = - std::make_unique<AttestationFlow>(std::move(attestation_ca_client)); + default_attestation_flow_ = std::make_unique<AttestationFlowAdaptive>( + std::move(attestation_ca_client)); attestation_flow_ = default_attestation_flow_.get(); default_delegate_ = std::make_unique<DefaultDelegate>(); delegate_ = default_delegate_.get();
diff --git a/chrome/browser/ash/attestation/tpm_challenge_key_subtle.cc b/chrome/browser/ash/attestation/tpm_challenge_key_subtle.cc index acbcce2..81f0e20 100644 --- a/chrome/browser/ash/attestation/tpm_challenge_key_subtle.cc +++ b/chrome/browser/ash/attestation/tpm_challenge_key_subtle.cc
@@ -23,6 +23,7 @@ #include "chrome/browser/extensions/chrome_extension_function_details.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/pref_names.h" +#include "chromeos/attestation/attestation_flow_adaptive.h" #include "chromeos/cryptohome/cryptohome_parameters.h" #include "chromeos/dbus/attestation/attestation_client.h" #include "chromeos/dbus/attestation/interface.pb.h" @@ -124,7 +125,7 @@ } // namespace TpmChallengeKeySubtleImpl::TpmChallengeKeySubtleImpl() - : default_attestation_flow_(std::make_unique<AttestationFlow>( + : default_attestation_flow_(std::make_unique<AttestationFlowAdaptive>( std::make_unique<AttestationCAClient>())), attestation_flow_(default_attestation_flow_.get()) { policy::DeviceCloudPolicyManagerChromeOS* manager =
diff --git a/chrome/browser/ash/login/app_mode/kiosk_browsertest.cc b/chrome/browser/ash/login/app_mode/kiosk_browsertest.cc index e01015a8..180473c 100644 --- a/chrome/browser/ash/login/app_mode/kiosk_browsertest.cc +++ b/chrome/browser/ash/login/app_mode/kiosk_browsertest.cc
@@ -432,7 +432,7 @@ // Replaces settings urls for KioskSettingsNavigationThrottle. class ScopedSettingsPages { public: - ScopedSettingsPages( + explicit ScopedSettingsPages( std::vector<KioskSettingsNavigationThrottle::SettingsPage>* pages) { KioskSettingsNavigationThrottle::SetSettingPagesForTesting(pages); }
diff --git a/chrome/browser/ash/login/marketing_backend_connector.h b/chrome/browser/ash/login/marketing_backend_connector.h index bc73248..beccfff1 100644 --- a/chrome/browser/ash/login/marketing_backend_connector.h +++ b/chrome/browser/ash/login/marketing_backend_connector.h
@@ -95,7 +95,7 @@ // Scoped callback setter for the MarketingBackendConnector class ScopedRequestCallbackSetter { public: - ScopedRequestCallbackSetter( + explicit ScopedRequestCallbackSetter( std::unique_ptr<base::RepeatingCallback<void(std::string)>> callback); ~ScopedRequestCallbackSetter();
diff --git a/chrome/browser/ash/login/oobe_interactive_ui_test.cc b/chrome/browser/ash/login/oobe_interactive_ui_test.cc index be81a880f..77ebb270 100644 --- a/chrome/browser/ash/login/oobe_interactive_ui_test.cc +++ b/chrome/browser/ash/login/oobe_interactive_ui_test.cc
@@ -477,7 +477,7 @@ class NativeWindowVisibilityBrowserMainExtraParts : public ChromeBrowserMainExtraParts { public: - NativeWindowVisibilityBrowserMainExtraParts( + explicit NativeWindowVisibilityBrowserMainExtraParts( NativeWindowVisibilityObserver* observer) : observer_(observer) {} ~NativeWindowVisibilityBrowserMainExtraParts() override = default;
diff --git a/chrome/browser/ash/login/saml/in_session_password_sync_manager_unittest.cc b/chrome/browser/ash/login/saml/in_session_password_sync_manager_unittest.cc index 85d9396..b2731e8 100644 --- a/chrome/browser/ash/login/saml/in_session_password_sync_manager_unittest.cc +++ b/chrome/browser/ash/login/saml/in_session_password_sync_manager_unittest.cc
@@ -89,6 +89,7 @@ std::unique_ptr<MockLockHandler> lock_handler_; std::unique_ptr<InSessionPasswordSyncManager> manager_; base::test::ScopedFeatureList feature_list_; + std::unique_ptr<user_manager::KnownUser> known_user_; }; InSessionPasswordSyncManagerTest::InSessionPasswordSyncManagerTest() @@ -103,6 +104,8 @@ user_manager_ = static_cast<FakeChromeUserManager*>(user_manager::UserManager::Get()); + known_user_ = + std::make_unique<user_manager::KnownUser>(user_manager_->GetLocalState()); } InSessionPasswordSyncManagerTest::~InSessionPasswordSyncManagerTest() { @@ -235,9 +238,9 @@ TEST_F(InSessionPasswordSyncManagerTest, AuthenticateWithCorrectUser) { base::Time now = test_environment_.GetMockClock()->Now(); - user_manager::known_user::SetLastOnlineSignin(saml_login_account_id1_, now); - user_manager::known_user::SetOfflineSigninLimit(saml_login_account_id1_, - kSamlOnlineShortDelay); + known_user_->SetLastOnlineSignin(saml_login_account_id1_, now); + known_user_->SetOfflineSigninLimit(saml_login_account_id1_, + kSamlOnlineShortDelay); base::Time expected_signin_time = now + kSamlOnlineShortDelay; primary_profile_->GetPrefs()->SetBoolean( @@ -261,7 +264,7 @@ manager_->OnAuthSuccess(user_context); EXPECT_EQ(InSessionReauthReason(), InSessionPasswordSyncManager::ReauthenticationReason::kNone); - now = user_manager::known_user::GetLastOnlineSignin(saml_login_account_id1_); + now = known_user_->GetLastOnlineSignin(saml_login_account_id1_); EXPECT_EQ(now, expected_signin_time); } @@ -292,7 +295,7 @@ InSessionPasswordSyncManager::ReauthenticationReason::kNone); EXPECT_FALSE(IsTokenFetcherCreated()); std::string sync_token = - user_manager::known_user::GetPasswordSyncToken(saml_login_account_id1_); + known_user_->GetPasswordSyncToken(saml_login_account_id1_); EXPECT_EQ(kFakeToken, sync_token); }
diff --git a/chrome/browser/ash/login/saml/password_sync_token_verifier_unittest.cc b/chrome/browser/ash/login/saml/password_sync_token_verifier_unittest.cc index 1b90690..4874cc4 100644 --- a/chrome/browser/ash/login/saml/password_sync_token_verifier_unittest.cc +++ b/chrome/browser/ash/login/saml/password_sync_token_verifier_unittest.cc
@@ -77,6 +77,7 @@ FakeChromeUserManager* user_manager_ = nullptr; std::unique_ptr<user_manager::ScopedUserManager> scoped_user_manager_; std::unique_ptr<PasswordSyncTokenVerifier> verifier_; + std::unique_ptr<user_manager::KnownUser> known_user_; }; PasswordSyncTokenVerifierTest::PasswordSyncTokenVerifierTest() { @@ -87,6 +88,8 @@ user_manager_ = static_cast<FakeChromeUserManager*>(user_manager::UserManager::Get()); + known_user_ = + std::make_unique<user_manager::KnownUser>(user_manager_->GetLocalState()); } PasswordSyncTokenVerifierTest::~PasswordSyncTokenVerifierTest() { @@ -132,8 +135,7 @@ } TEST_F(PasswordSyncTokenVerifierTest, SyncTokenValidationPassed) { - user_manager::known_user::SetPasswordSyncToken(saml_login_account_id_, - kSyncToken); + known_user_->SetPasswordSyncToken(saml_login_account_id_, kSyncToken); CreatePasswordSyncTokenVerifier(); verifier_->CheckForPasswordNotInSync(); OnTokenVerified(true); @@ -141,8 +143,7 @@ } TEST_F(PasswordSyncTokenVerifierTest, SyncTokenValidationFailed) { - user_manager::known_user::SetPasswordSyncToken(saml_login_account_id_, - kSyncToken); + known_user_->SetPasswordSyncToken(saml_login_account_id_, kSyncToken); CreatePasswordSyncTokenVerifier(); verifier_->CheckForPasswordNotInSync(); OnTokenVerified(false); @@ -150,8 +151,7 @@ } TEST_F(PasswordSyncTokenVerifierTest, SyncTokenValidationAfterDelay) { - user_manager::known_user::SetPasswordSyncToken(saml_login_account_id_, - kSyncToken); + known_user_->SetPasswordSyncToken(saml_login_account_id_, kSyncToken); CreatePasswordSyncTokenVerifier(); verifier_->CheckForPasswordNotInSync(); OnTokenVerified(true); @@ -162,14 +162,12 @@ } TEST_F(PasswordSyncTokenVerifierTest, SyncTokenNoRecheckExecuted) { - user_manager::known_user::SetPasswordSyncToken(saml_login_account_id_, - kSyncToken); + known_user_->SetPasswordSyncToken(saml_login_account_id_, kSyncToken); CreatePasswordSyncTokenVerifier(); verifier_->CheckForPasswordNotInSync(); OnTokenVerified(true); EXPECT_FALSE(user_manager_->GetActiveUser()->force_online_signin()); - user_manager::known_user::SetPasswordSyncToken(saml_login_account_id_, - std::string()); + known_user_->SetPasswordSyncToken(saml_login_account_id_, std::string()); test_environment_.FastForwardBy(kSyncTokenCheckBelowInterval); EXPECT_FALSE(user_manager_->GetActiveUser()->force_online_signin()); } @@ -177,13 +175,11 @@ TEST_F(PasswordSyncTokenVerifierTest, PasswordChangePolicyNotSet) { primary_profile_->GetPrefs()->SetBoolean( prefs::kSamlInSessionPasswordChangeEnabled, false); - user_manager::known_user::SetPasswordSyncToken(saml_login_account_id_, - kSyncToken); + known_user_->SetPasswordSyncToken(saml_login_account_id_, kSyncToken); CreatePasswordSyncTokenVerifier(); verifier_->CheckForPasswordNotInSync(); OnTokenVerified(true); - user_manager::known_user::SetPasswordSyncToken(saml_login_account_id_, - std::string()); + known_user_->SetPasswordSyncToken(saml_login_account_id_, std::string()); test_environment_.FastForwardBy(kSyncTokenCheckInterval); EXPECT_FALSE(user_manager_->GetActiveUser()->force_online_signin()); } @@ -192,9 +188,8 @@ CreatePasswordSyncTokenVerifier(); verifier_->FetchSyncTokenOnReauth(); verifier_->OnTokenFetched(kSyncToken); - EXPECT_EQ( - user_manager::known_user::GetPasswordSyncToken(saml_login_account_id_), - kSyncToken); + EXPECT_EQ(known_user_->GetPasswordSyncToken(saml_login_account_id_), + kSyncToken); EXPECT_EQ( primary_profile_->GetPrefs()->GetString(prefs::kSamlPasswordSyncToken), kSyncToken); @@ -205,9 +200,8 @@ verifier_->FetchSyncTokenOnReauth(); verifier_->OnApiCallFailed(PasswordSyncTokenFetcher::ErrorType::kGetNoList); verifier_->OnTokenCreated(kSyncToken); - EXPECT_EQ( - user_manager::known_user::GetPasswordSyncToken(saml_login_account_id_), - kSyncToken); + EXPECT_EQ(known_user_->GetPasswordSyncToken(saml_login_account_id_), + kSyncToken); EXPECT_EQ( primary_profile_->GetPrefs()->GetString(prefs::kSamlPasswordSyncToken), kSyncToken); @@ -219,9 +213,8 @@ // Token API not initilized for the user - request token creation. verifier_->OnTokenFetched(std::string()); verifier_->OnTokenCreated(kSyncToken); - EXPECT_EQ( - user_manager::known_user::GetPasswordSyncToken(saml_login_account_id_), - kSyncToken); + EXPECT_EQ(known_user_->GetPasswordSyncToken(saml_login_account_id_), + kSyncToken); EXPECT_EQ( primary_profile_->GetPrefs()->GetString(prefs::kSamlPasswordSyncToken), kSyncToken);
diff --git a/chrome/browser/ash/login/saml/saml_browsertest.cc b/chrome/browser/ash/login/saml/saml_browsertest.cc index e5d75eb..4bec55b 100644 --- a/chrome/browser/ash/login/saml/saml_browsertest.cc +++ b/chrome/browser/ash/login/saml/saml_browsertest.cc
@@ -459,10 +459,11 @@ FakeCryptohomeMiscClient::GetStubSystemSalt())); EXPECT_EQ(key.GetSecret(), cryptohome_client_->salted_hashed_secret()); - EXPECT_TRUE(user_manager::known_user::GetIsUsingSAMLPrincipalsAPI( - AccountId::FromUserEmailGaiaId( - saml_test_users::kFirstUserCorpExampleComEmail, - kFirstSAMLUserGaiaId))); + EXPECT_TRUE( + user_manager::KnownUser(user_manager::UserManager::Get()->GetLocalState()) + .GetIsUsingSAMLPrincipalsAPI(AccountId::FromUserEmailGaiaId( + saml_test_users::kFirstUserCorpExampleComEmail, + kFirstSAMLUserGaiaId))); histogram_tester.ExpectUniqueSample("ChromeOS.SAML.APILogin", 1, 1); histogram_tester.ExpectUniqueSample("ChromeOS.SAML.Provider", 1, 1); @@ -496,10 +497,11 @@ FakeCryptohomeMiscClient::GetStubSystemSalt())); EXPECT_EQ(key.GetSecret(), cryptohome_client_->salted_hashed_secret()); - EXPECT_TRUE(user_manager::known_user::GetIsUsingSAMLPrincipalsAPI( - AccountId::FromUserEmailGaiaId( - saml_test_users::kFirstUserCorpExampleComEmail, - kFirstSAMLUserGaiaId))); + EXPECT_TRUE( + user_manager::KnownUser(user_manager::UserManager::Get()->GetLocalState()) + .GetIsUsingSAMLPrincipalsAPI(AccountId::FromUserEmailGaiaId( + saml_test_users::kFirstUserCorpExampleComEmail, + kFirstSAMLUserGaiaId))); histogram_tester.ExpectUniqueSample("ChromeOS.SAML.APILogin", 1, 1); histogram_tester.ExpectUniqueSample("ChromeOS.SAML.Provider", 1, 1); @@ -536,10 +538,11 @@ test::WaitForPrimaryUserSessionStart(); - EXPECT_FALSE(user_manager::known_user::GetIsUsingSAMLPrincipalsAPI( - AccountId::FromUserEmailGaiaId( - saml_test_users::kFirstUserCorpExampleComEmail, - kFirstSAMLUserGaiaId))); + EXPECT_FALSE( + user_manager::KnownUser(user_manager::UserManager::Get()->GetLocalState()) + .GetIsUsingSAMLPrincipalsAPI(AccountId::FromUserEmailGaiaId( + saml_test_users::kFirstUserCorpExampleComEmail, + kFirstSAMLUserGaiaId))); histogram_tester.ExpectUniqueSample("ChromeOS.SAML.APILogin", 2, 1); histogram_tester.ExpectUniqueSample("ChromeOS.SAML.Scraping.PasswordCountAll", @@ -570,10 +573,11 @@ SigninFrameJS().TapOn("Submit"); test::WaitForPrimaryUserSessionStart(); - EXPECT_FALSE(user_manager::known_user::GetIsUsingSAMLPrincipalsAPI( - AccountId::FromUserEmailGaiaId( - saml_test_users::kFirstUserCorpExampleComEmail, - kFirstSAMLUserGaiaId))); + EXPECT_FALSE( + user_manager::KnownUser(user_manager::UserManager::Get()->GetLocalState()) + .GetIsUsingSAMLPrincipalsAPI(AccountId::FromUserEmailGaiaId( + saml_test_users::kFirstUserCorpExampleComEmail, + kFirstSAMLUserGaiaId))); } // Tests the multiple password scraped flow. @@ -599,10 +603,11 @@ SendConfirmPassword("password1"); test::WaitForPrimaryUserSessionStart(); - EXPECT_FALSE(user_manager::known_user::GetIsUsingSAMLPrincipalsAPI( - AccountId::FromUserEmailGaiaId( - saml_test_users::kFirstUserCorpExampleComEmail, - kFirstSAMLUserGaiaId))); + EXPECT_FALSE( + user_manager::KnownUser(user_manager::UserManager::Get()->GetLocalState()) + .GetIsUsingSAMLPrincipalsAPI(AccountId::FromUserEmailGaiaId( + saml_test_users::kFirstUserCorpExampleComEmail, + kFirstSAMLUserGaiaId))); histogram_tester.ExpectUniqueSample("ChromeOS.SAML.APILogin", 2, 1); histogram_tester.ExpectUniqueSample("ChromeOS.SAML.Scraping.PasswordCountAll", @@ -634,10 +639,11 @@ SetManualPasswords("Test1", "Test1"); test::WaitForPrimaryUserSessionStart(); - EXPECT_FALSE(user_manager::known_user::GetIsUsingSAMLPrincipalsAPI( - AccountId::FromUserEmailGaiaId( - saml_test_users::kFirstUserCorpExampleComEmail, - kFirstSAMLUserGaiaId))); + EXPECT_FALSE( + user_manager::KnownUser(user_manager::UserManager::Get()->GetLocalState()) + .GetIsUsingSAMLPrincipalsAPI(AccountId::FromUserEmailGaiaId( + saml_test_users::kFirstUserCorpExampleComEmail, + kFirstSAMLUserGaiaId))); histogram_tester.ExpectUniqueSample("ChromeOS.SAML.APILogin", 2, 1); histogram_tester.ExpectUniqueSample("ChromeOS.SAML.Scraping.PasswordCountAll",
diff --git a/chrome/browser/background_fetch/background_fetch_browsertest.cc b/chrome/browser/background_fetch/background_fetch_browsertest.cc index 79946561..abff5ca 100644 --- a/chrome/browser/background_fetch/background_fetch_browsertest.cc +++ b/chrome/browser/background_fetch/background_fetch_browsertest.cc
@@ -572,7 +572,7 @@ // Change-detector tests for values we might want to provide or change. EXPECT_TRUE(offline_item.description.empty()); - EXPECT_TRUE(offline_item.page_url.is_empty()); + EXPECT_TRUE(offline_item.url.is_empty()); EXPECT_FALSE(offline_item.is_off_the_record); }
diff --git a/chrome/browser/cart/cart_service_unittest.cc b/chrome/browser/cart/cart_service_unittest.cc index b3c2387..b7a14cbab 100644 --- a/chrome/browser/cart/cart_service_unittest.cc +++ b/chrome/browser/cart/cart_service_unittest.cc
@@ -1341,26 +1341,41 @@ // Tests CartService returning fetched discount URL. TEST_F(CartServiceDiscountTest, TestReturnDiscountURL) { - base::RunLoop run_loop[2]; + base::RunLoop run_loop[4]; const double timestamp = 1; GURL discount_url("https://www.discount.com"); SetCartDiscountURLForTesting(discount_url, true); + EXPECT_FALSE(service_->IsDiscountUsed(kMockMerchantADiscountRuleId)); cart_db::ChromeCartContentProto cart_proto = AddDiscountToProto( BuildProto(kMockMerchantA, kMockMerchantURLA), timestamp, kMockMerchantADiscountRuleId, kMockMerchantADiscountsPercentOff, kMockMerchantADiscountsRawMerchantOfferId); + const ShoppingCarts has_discount_cart = {{kMockMerchantA, cart_proto}}; service_->GetDB()->AddCart( kMockMerchantA, cart_proto, base::BindOnce(&CartServiceTest::OperationEvaluation, base::Unretained(this), run_loop[0].QuitClosure(), true)); run_loop[0].Run(); + service_->LoadCart( + kMockMerchantA, + base::BindOnce(&CartServiceTest::GetEvaluationDiscount, + base::Unretained(this), run_loop[1].QuitClosure(), + has_discount_cart)); + run_loop[1].Run(); service_->GetDiscountURL( GURL(kMockMerchantURLA), base::BindOnce(&CartServiceTest::GetEvaluationDiscountURL, - base::Unretained(this), run_loop[1].QuitClosure(), + base::Unretained(this), run_loop[2].QuitClosure(), discount_url)); - run_loop[1].Run(); + run_loop[2].Run(); + + EXPECT_TRUE(service_->IsDiscountUsed(kMockMerchantADiscountRuleId)); + service_->LoadCart( + kMockMerchantA, + base::BindOnce(&CartServiceTest::GetEvaluationEmptyDiscount, + base::Unretained(this), run_loop[3].QuitClosure())); + run_loop[3].Run(); } // Tests CartService returning original cart URL as a fallback if the fetch
diff --git a/chrome/browser/chromeos/exo/chrome_data_exchange_delegate.cc b/chrome/browser/chromeos/exo/chrome_data_exchange_delegate.cc index c209b94..ea10e4d 100644 --- a/chrome/browser/chromeos/exo/chrome_data_exchange_delegate.cc +++ b/chrome/browser/chromeos/exo/chrome_data_exchange_delegate.cc
@@ -53,10 +53,7 @@ constexpr char kVmFileScheme[] = "vmfile"; // Mime types used in FilesApp to copy/paste files to clipboard. -constexpr char16_t kFilesAppMimeTag[] = u"fs/tag"; -constexpr char16_t kFilesAppTagExo[] = u"exo"; constexpr char16_t kFilesAppMimeSources[] = u"fs/sources"; -constexpr char kFilesAppSeparator[] = "\n"; constexpr char16_t kFilesAppSeparator16[] = u"\n"; storage::FileSystemContext* GetFileSystemContext() { @@ -411,26 +408,6 @@ base::BindOnce(&SendAfterShare, target, std::move(callback))); } -base::Pickle ChromeDataExchangeDelegate::CreateClipboardFilenamesPickle( - ui::EndpointType source, - const std::vector<uint8_t>& data) const { - std::vector<std::string> filenames; - std::vector<FileInfo> file_info = TranslateVMToHost( - source, ui::URIListToFileInfos(std::string(data.begin(), data.end()))); - for (const auto& info : file_info) { - if (info.url.is_valid()) - filenames.push_back(info.url.ToGURL().spec()); - } - base::Pickle pickle; - ui::WriteCustomDataToPickle( - std::unordered_map<std::u16string, std::u16string>( - {{kFilesAppMimeTag, kFilesAppTagExo}, - {kFilesAppMimeSources, base::UTF8ToUTF16(base::JoinString( - filenames, kFilesAppSeparator))}}), - &pickle); - return pickle; -} - std::vector<ui::FileInfo> ChromeDataExchangeDelegate::ParseFileSystemSources( const ui::DataTransferEndpoint* source, const base::Pickle& pickle) const {
diff --git a/chrome/browser/chromeos/exo/chrome_data_exchange_delegate.h b/chrome/browser/chromeos/exo/chrome_data_exchange_delegate.h index 8c320f94..44dbf68 100644 --- a/chrome/browser/chromeos/exo/chrome_data_exchange_delegate.h +++ b/chrome/browser/chromeos/exo/chrome_data_exchange_delegate.h
@@ -47,9 +47,6 @@ void SendPickle(ui::EndpointType target, const base::Pickle& pickle, SendDataCallback callback) override; - base::Pickle CreateClipboardFilenamesPickle( - ui::EndpointType source, - const std::vector<uint8_t>& data) const override; std::vector<ui::FileInfo> ParseFileSystemSources( const ui::DataTransferEndpoint* source, const base::Pickle& pickle) const override;
diff --git a/chrome/browser/chromeos/exo/chrome_data_exchange_delegate_unittest.cc b/chrome/browser/chromeos/exo/chrome_data_exchange_delegate_unittest.cc index 8e910ab8..58a3054 100644 --- a/chrome/browser/chromeos/exo/chrome_data_exchange_delegate_unittest.cc +++ b/chrome/browser/chromeos/exo/chrome_data_exchange_delegate_unittest.cc
@@ -452,21 +452,16 @@ guest_os::GuestOsSharePath::GetForProfile(profile()); guest_os_share_path->RegisterSharedPath(crostini::kCrostiniDefaultVmName, shared_path); - base::Pickle pickle = data_exchange_delegate.CreateClipboardFilenamesPickle( - ui::EndpointType::kCrostini, - Data("file:///mnt/chromeos/MyFiles/shared/file1\n" - "file:///mnt/chromeos/MyFiles/shared/file2")); - - std::unordered_map<std::u16string, std::u16string> m; - ui::ReadCustomDataIntoMap(pickle.data(), pickle.size(), &m); - EXPECT_EQ(2, m.size()); - EXPECT_EQ("exo", base::UTF16ToUTF8(m[u"fs/tag"])); - EXPECT_EQ( - "filesystem:chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/external/" - "Downloads-test%2540example.com-hash/shared/file1\n" - "filesystem:chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/external/" - "Downloads-test%2540example.com-hash/shared/file2", - base::UTF16ToUTF8(m[u"fs/sources"])); + std::u16string urls = + u"filesystem:chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/" + "external/Downloads-test%2540example.com-hash/shared/file1\n" + "filesystem:chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/" + "external/Downloads-test%2540example.com-hash/shared/file2"; + base::Pickle pickle; + ui::WriteCustomDataToPickle( + std::unordered_map<std::u16string, std::u16string>( + {{u"fs/tag", u"exo"}, {u"fs/sources", urls}}), + &pickle); ui::DataTransferEndpoint files_app(url::Origin::Create( GURL("chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj")));
diff --git a/chrome/browser/chromeos/policy/browser_policy_connector_chromeos.cc b/chrome/browser/chromeos/policy/browser_policy_connector_chromeos.cc index 3764c00..0321848 100644 --- a/chrome/browser/chromeos/policy/browser_policy_connector_chromeos.cc +++ b/chrome/browser/chromeos/policy/browser_policy_connector_chromeos.cc
@@ -63,7 +63,7 @@ #include "chrome/browser/policy/device_management_service_configuration.h" #include "chrome/common/chrome_features.h" #include "chrome/common/pref_names.h" -#include "chromeos/attestation/attestation_flow.h" +#include "chromeos/attestation/attestation_flow_adaptive.h" #include "chromeos/cryptohome/system_salt_getter.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/session_manager/session_manager_client.h" @@ -565,7 +565,7 @@ std::unique_ptr<chromeos::attestation::AttestationFlow> BrowserPolicyConnectorChromeOS::CreateAttestationFlow() { - return std::make_unique<chromeos::attestation::AttestationFlow>( + return std::make_unique<chromeos::attestation::AttestationFlowAdaptive>( std::make_unique<ash::attestation::AttestationCAClient>()); }
diff --git a/chrome/browser/chromeos/policy/external_data_handlers/device_print_servers_external_data_handler.h b/chrome/browser/chromeos/policy/external_data_handlers/device_print_servers_external_data_handler.h index d27e2df..d2dfe0b1 100644 --- a/chrome/browser/chromeos/policy/external_data_handlers/device_print_servers_external_data_handler.h +++ b/chrome/browser/chromeos/policy/external_data_handlers/device_print_servers_external_data_handler.h
@@ -20,7 +20,7 @@ class DevicePrintServersExternalDataHandler : public DeviceCloudExternalDataPolicyHandler { public: - DevicePrintServersExternalDataHandler(PolicyService* policy_service); + explicit DevicePrintServersExternalDataHandler(PolicyService* policy_service); DevicePrintServersExternalDataHandler( const DevicePrintServersExternalDataHandler&) = delete; DevicePrintServersExternalDataHandler& operator=(
diff --git a/chrome/browser/chromeos/policy/fake_auto_enrollment_client.h b/chrome/browser/chromeos/policy/fake_auto_enrollment_client.h index 9fe6b00b..4c4995a 100644 --- a/chrome/browser/chromeos/policy/fake_auto_enrollment_client.h +++ b/chrome/browser/chromeos/policy/fake_auto_enrollment_client.h
@@ -26,8 +26,9 @@ public: // The factory will notify |fake_client_created_callback| when a // |AutoEnrollmentClient| has been created through one of its methods. - FactoryImpl(const base::RepeatingCallback<void(FakeAutoEnrollmentClient*)>& - fake_client_created_callback); + explicit FactoryImpl( + const base::RepeatingCallback<void(FakeAutoEnrollmentClient*)>& + fake_client_created_callback); ~FactoryImpl() override; std::unique_ptr<AutoEnrollmentClient> CreateForFRE(
diff --git a/chrome/browser/chromeos/policy/scheduled_update_checker/os_and_policies_update_checker.h b/chrome/browser/chromeos/policy/scheduled_update_checker/os_and_policies_update_checker.h index 8f0c7132a..6996e3c 100644 --- a/chrome/browser/chromeos/policy/scheduled_update_checker/os_and_policies_update_checker.h +++ b/chrome/browser/chromeos/policy/scheduled_update_checker/os_and_policies_update_checker.h
@@ -42,7 +42,7 @@ : public chromeos::UpdateEngineClient::Observer, public chromeos::NetworkStateHandlerObserver { public: - OsAndPoliciesUpdateChecker( + explicit OsAndPoliciesUpdateChecker( chromeos::NetworkStateHandler* network_state_handler); ~OsAndPoliciesUpdateChecker() override;
diff --git a/chrome/browser/chromeos/policy/server_backed_state_keys_broker.h b/chrome/browser/chromeos/policy/server_backed_state_keys_broker.h index 69635e7..d7d4d76 100644 --- a/chrome/browser/chromeos/policy/server_backed_state_keys_broker.h +++ b/chrome/browser/chromeos/policy/server_backed_state_keys_broker.h
@@ -31,7 +31,7 @@ base::OnceCallbackList<void(const std::vector<std::string>&)>; using StateKeysCallback = StateKeysCallbackList::CallbackType; - ServerBackedStateKeysBroker( + explicit ServerBackedStateKeysBroker( chromeos::SessionManagerClient* session_manager_client); ~ServerBackedStateKeysBroker();
diff --git a/chrome/browser/chromeos/policy/system_proxy_handler.h b/chrome/browser/chromeos/policy/system_proxy_handler.h index a641777d..e54b0b1 100644 --- a/chrome/browser/chromeos/policy/system_proxy_handler.h +++ b/chrome/browser/chromeos/policy/system_proxy_handler.h
@@ -19,7 +19,7 @@ // proxy credentials for system services connecting through System-proxy. class SystemProxyHandler { public: - SystemProxyHandler(chromeos::CrosSettings* cros_settings); + explicit SystemProxyHandler(chromeos::CrosSettings* cros_settings); SystemProxyHandler(const SystemProxyHandler&) = delete; SystemProxyHandler& operator=(const SystemProxyHandler&) = delete;
diff --git a/chrome/browser/content_index/content_index_provider_impl.cc b/chrome/browser/content_index/content_index_provider_impl.cc index d1666691f..8c19749f 100644 --- a/chrome/browser/content_index/content_index_provider_impl.cc +++ b/chrome/browser/content_index/content_index_provider_impl.cc
@@ -359,7 +359,7 @@ item.state = offline_items_collection::OfflineItemState::COMPLETE; item.is_resumable = false; item.can_rename = false; - item.page_url = entry.launch_url; + item.url = entry.launch_url; if (site_engagement_service_) { item.content_quality_score =
diff --git a/chrome/browser/content_index/content_index_provider_unittest.cc b/chrome/browser/content_index/content_index_provider_unittest.cc index 76efea3..22351ea7 100644 --- a/chrome/browser/content_index/content_index_provider_unittest.cc +++ b/chrome/browser/content_index/content_index_provider_unittest.cc
@@ -130,7 +130,7 @@ EXPECT_FALSE(item.is_transient); EXPECT_TRUE(item.is_suggested); EXPECT_TRUE(item.is_openable); - EXPECT_EQ(item.page_url, GURL(kLaunchUrl)); + EXPECT_EQ(item.url, GURL(kLaunchUrl)); EXPECT_EQ(item.content_quality_score, kEngagementScore / 100.0); }
diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/DownloadInfo.java b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/DownloadInfo.java index 67cf1daa..b18b3424 100644 --- a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/DownloadInfo.java +++ b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/DownloadInfo.java
@@ -295,7 +295,7 @@ .setLastAccessTime(item.lastAccessedTimeMs) .setIsOpenable(item.isOpenable) .setMimeType(item.mimeType) - .setUrl(item.pageUrl) + .setUrl(item.url) .setOriginalUrl(item.originalUrl) .setOTRProfileId(OTRProfileID.deserialize(item.otrProfileId)) .setState(state)
diff --git a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/StubbedProvider.java b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/StubbedProvider.java index b69cb57..4d48fcb 100644 --- a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/StubbedProvider.java +++ b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/StubbedProvider.java
@@ -146,7 +146,7 @@ long totalSize, int filter) { OfflineItem offlineItem = new OfflineItem(); offlineItem.id = new ContentId(LegacyHelpers.LEGACY_OFFLINE_PAGE_NAMESPACE, guid); - offlineItem.pageUrl = url; + offlineItem.url = url; offlineItem.state = state; offlineItem.receivedBytes = downloadProgressBytes; offlineItem.title = title;
diff --git a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/DateOrderedListMutatorTest.java b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/DateOrderedListMutatorTest.java index 0b864bc7..d5cd6821 100644 --- a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/DateOrderedListMutatorTest.java +++ b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/DateOrderedListMutatorTest.java
@@ -1192,7 +1192,7 @@ item.isSuggested = true; item.creationTimeMs = calendar.getTimeInMillis(); item.filter = filter; - item.pageUrl = "http://example.com/xyz"; + item.url = "http://example.com/xyz"; return item; }
diff --git a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/ShareUtils.java b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/ShareUtils.java index 955ecd071..fb6ac99 100644 --- a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/ShareUtils.java +++ b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/ShareUtils.java
@@ -49,14 +49,14 @@ Uri uri = item.second == null ? null : item.second.uri; if (uri != null && uri.compareTo(Uri.EMPTY) != 0) { uris.add(uri); - } else if (!TextUtils.isEmpty(item.first.pageUrl)) { + } else if (!TextUtils.isEmpty(item.first.url)) { if (urls.length() > 0) urls.append("\n"); - urls.append(item.first.pageUrl); + urls.append(item.first.url); } } // If we have nothing to share, don't create the intent. We should theoretically always - // have the pageURL, but this is a safety precaution. In the future we could just use the + // have the url, but this is a safety precaution. In the future we could just use the // title instead of the URL if the URL doesn't exist. if (uris.isEmpty() && urls.length() == 0) return null;
diff --git a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/ShareUtilsTest.java b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/ShareUtilsTest.java index 55299f4b..a8f1b42 100644 --- a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/ShareUtilsTest.java +++ b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/ShareUtilsTest.java
@@ -165,9 +165,9 @@ } private static Pair<OfflineItem, OfflineItemShareInfo> createItem( - String pageUrl, String mimeType, String title, String uri) { + String url, String mimeType, String title, String uri) { OfflineItem item = new OfflineItem(); - item.pageUrl = pageUrl; + item.url = url; item.mimeType = mimeType; item.title = title;
diff --git a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/UiUtils.java b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/UiUtils.java index b052f28..0e3aa52 100644 --- a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/UiUtils.java +++ b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/UiUtils.java
@@ -105,7 +105,7 @@ Context context = ContextUtils.getApplicationContext(); String displaySize = Formatter.formatFileSize(context, item.totalSizeBytes); String displayUrl = UrlFormatter.formatUrlForSecurityDisplay( - item.originalUrl, SchemeDisplay.OMIT_HTTP_AND_HTTPS); + item.url, SchemeDisplay.OMIT_HTTP_AND_HTTPS); return context.getString( R.string.download_manager_prefetch_caption, displayUrl, displaySize); } @@ -118,7 +118,7 @@ public static CharSequence generateGenericCaption(OfflineItem item) { Context context = ContextUtils.getApplicationContext(); String displayUrl = UrlFormatter.formatUrlForSecurityDisplay( - item.originalUrl, SchemeDisplay.OMIT_HTTP_AND_HTTPS); + item.url, SchemeDisplay.OMIT_HTTP_AND_HTTPS); if (item.totalSizeBytes == 0) { return context.getString( @@ -358,7 +358,7 @@ /** @return The domain associated with the given {@link OfflineItem}. */ public static String getDomainForItem(OfflineItem offlineItem) { String formattedUrl = UrlFormatter.formatUrlForSecurityDisplay( - offlineItem.pageUrl, SchemeDisplay.OMIT_HTTP_AND_HTTPS); + offlineItem.url, SchemeDisplay.OMIT_HTTP_AND_HTTPS); return formattedUrl; } }
diff --git a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/mutator/GroupCardLabelAdder.java b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/mutator/GroupCardLabelAdder.java index 8be480c..c8d89d8 100644 --- a/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/mutator/GroupCardLabelAdder.java +++ b/chrome/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/home/list/mutator/GroupCardLabelAdder.java
@@ -102,7 +102,7 @@ } Pair<Date, String> dateAndDomain = getDateAndDomainForItem(candidateCardItems.get(0)); - String url = ((ListItem.OfflineItemListItem) candidateCardItems.get(0)).item.pageUrl; + String url = ((ListItem.OfflineItemListItem) candidateCardItems.get(0)).item.url; mCardPaginator.initializeEntry(dateAndDomain); // Add the card header, and the divider above it.
diff --git a/chrome/browser/download/offline_item_model.cc b/chrome/browser/download/offline_item_model.cc index a7fa508..b7b6866 100644 --- a/chrome/browser/download/offline_item_model.cc +++ b/chrome/browser/download/offline_item_model.cc
@@ -210,7 +210,7 @@ } GURL OfflineItemModel::GetURL() const { - return offline_item_ ? offline_item_->page_url : GURL(); + return offline_item_ ? offline_item_->url : GURL(); } bool OfflineItemModel::ShouldRemoveFromShelfWhenComplete() const {
diff --git a/chrome/browser/download/offline_item_utils.cc b/chrome/browser/download/offline_item_utils.cc index fdbf1a1..9bd2089 100644 --- a/chrome/browser/download/offline_item_utils.cc +++ b/chrome/browser/download/offline_item_utils.cc
@@ -122,7 +122,7 @@ } #endif - item.page_url = download_item->GetTabUrl(); + item.url = download_item->GetURL(); item.original_url = download_item->GetOriginalUrl(); item.is_off_the_record = off_the_record;
diff --git a/chrome/browser/download/offline_item_utils_unittest.cc b/chrome/browser/download/offline_item_utils_unittest.cc index d026826..27d7915 100644 --- a/chrome/browser/download/offline_item_utils_unittest.cc +++ b/chrome/browser/download/offline_item_utils_unittest.cc
@@ -189,7 +189,7 @@ EXPECT_EQ(file_path, offline_item.file_path); EXPECT_EQ(mime_type, offline_item.mime_type); - EXPECT_EQ(GURL(kTestUrl), offline_item.page_url); + EXPECT_EQ(GURL(kTestUrl), offline_item.url); EXPECT_EQ(GURL(kTestOriginalUrl), offline_item.original_url); EXPECT_FALSE(offline_item.is_off_the_record); EXPECT_EQ("", offline_item.attribution);
diff --git a/chrome/browser/enterprise/signals/device_info_fetcher.cc b/chrome/browser/enterprise/signals/device_info_fetcher.cc index 3f6026af..3e53fa88 100644 --- a/chrome/browser/enterprise/signals/device_info_fetcher.cc +++ b/chrome/browser/enterprise/signals/device_info_fetcher.cc
@@ -51,6 +51,7 @@ DeviceInfoFetcher::DeviceInfoFetcher() = default; DeviceInfoFetcher::~DeviceInfoFetcher() = default; +// static std::unique_ptr<DeviceInfoFetcher> DeviceInfoFetcher::CreateInstance() { // TODO(pastarmovj): Instead of the if-defs implement the CreateInstance // function in the platform specific classes. @@ -65,4 +66,10 @@ #endif } +// static +std::unique_ptr<DeviceInfoFetcher> +DeviceInfoFetcher::CreateStubInstanceForTesting() { + return std::make_unique<StubDeviceFetcher>(); +} + } // namespace enterprise_signals
diff --git a/chrome/browser/enterprise/signals/device_info_fetcher.h b/chrome/browser/enterprise/signals/device_info_fetcher.h index 66f59bc..751b992 100644 --- a/chrome/browser/enterprise/signals/device_info_fetcher.h +++ b/chrome/browser/enterprise/signals/device_info_fetcher.h
@@ -49,6 +49,10 @@ // Returns a platform specific instance of DeviceInfoFetcher. static std::unique_ptr<DeviceInfoFetcher> CreateInstance(); + // Returns a stub instance so tests can validate attributes independently of + // the platform. + static std::unique_ptr<DeviceInfoFetcher> CreateStubInstanceForTesting(); + // Fetches the device information for the current platform. virtual DeviceInfo Fetch() = 0; };
diff --git a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_api.cc b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_api.cc index dcfbd58a9..544073d 100644 --- a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_api.cc +++ b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_api.cc
@@ -43,23 +43,6 @@ return api::enterprise_reporting_private::SETTING_VALUE_ENABLED; } } - -api::enterprise_reporting_private::DeviceInfo ToDeviceInfo( - const enterprise_signals::DeviceInfo& device_signals) { - api::enterprise_reporting_private::DeviceInfo device_info; - - device_info.os_name = device_signals.os_name; - device_info.os_version = device_signals.os_version; - device_info.device_host_name = device_signals.device_host_name; - device_info.device_model = device_signals.device_model; - device_info.serial_number = device_signals.serial_number; - device_info.screen_lock_secured = - ToInfoSettingValue(device_signals.screen_lock_secured); - device_info.disk_encrypted = - ToInfoSettingValue(device_signals.disk_encrypted); - - return device_info; -} #endif // !defined(OS_CHROMEOS) api::enterprise_reporting_private::ContextInfo ToContextInfo( @@ -285,6 +268,26 @@ EnterpriseReportingPrivateGetDeviceInfoFunction:: ~EnterpriseReportingPrivateGetDeviceInfoFunction() = default; +// static +api::enterprise_reporting_private::DeviceInfo +EnterpriseReportingPrivateGetDeviceInfoFunction::ToDeviceInfo( + enterprise_signals::DeviceInfo device_signals) { + api::enterprise_reporting_private::DeviceInfo device_info; + + device_info.os_name = device_signals.os_name; + device_info.os_version = device_signals.os_version; + device_info.device_host_name = device_signals.device_host_name; + device_info.device_model = device_signals.device_model; + device_info.serial_number = device_signals.serial_number; + device_info.screen_lock_secured = + ToInfoSettingValue(device_signals.screen_lock_secured); + device_info.disk_encrypted = + ToInfoSettingValue(device_signals.disk_encrypted); + device_info.mac_addresses = device_signals.mac_addresses; + + return device_info; +} + ExtensionFunction::ResponseAction EnterpriseReportingPrivateGetDeviceInfoFunction::Run() { #if defined(OS_WIN) @@ -309,9 +312,9 @@ } void EnterpriseReportingPrivateGetDeviceInfoFunction::OnDeviceInfoRetrieved( - const enterprise_signals::DeviceInfo& device_signals) { - Respond(OneArgument( - base::Value::FromUniquePtrValue(ToDeviceInfo(device_signals).ToValue()))); + enterprise_signals::DeviceInfo device_signals) { + Respond(OneArgument(base::Value::FromUniquePtrValue( + ToDeviceInfo(std::move(device_signals)).ToValue()))); } #endif // !defined(OS_CHROMEOS)
diff --git a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_api.h b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_api.h index 51a32f4..fd4bef8d 100644 --- a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_api.h +++ b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_api.h
@@ -130,6 +130,10 @@ EnterpriseReportingPrivateGetDeviceInfoFunction& operator=( const EnterpriseReportingPrivateGetDeviceInfoFunction&) = delete; + // Conversion function for this class to use a DeviceInfoFetcher result. + static api::enterprise_reporting_private::DeviceInfo ToDeviceInfo( + enterprise_signals::DeviceInfo device_signals); + private: ~EnterpriseReportingPrivateGetDeviceInfoFunction() override; @@ -137,8 +141,7 @@ ExtensionFunction::ResponseAction Run() override; // Callback once the data was retrieved. - void OnDeviceInfoRetrieved( - const ::enterprise_signals::DeviceInfo& device_info); + void OnDeviceInfoRetrieved(::enterprise_signals::DeviceInfo device_info); }; #endif // !defined(OS_CHROMEOS)
diff --git a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_unittest.cc b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_unittest.cc index 8ba9a59e..29fccd9 100644 --- a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_unittest.cc +++ b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_unittest.cc
@@ -4,6 +4,7 @@ #include <tuple> +#include "chrome/browser/enterprise/signals/device_info_fetcher.h" #include "chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_api.h" #include "base/command_line.h" @@ -312,11 +313,33 @@ info.screen_lock_secured); EXPECT_EQ(enterprise_reporting_private::SETTING_VALUE_DISABLED, info.disk_encrypted); - ASSERT_EQ(1, info.mac_addresses.size()); + ASSERT_EQ(1u, info.mac_addresses.size()); EXPECT_EQ("00:00:00:00:00:00", info.mac_addresses[0]); #endif } +TEST_F(EnterpriseReportingPrivateGetDeviceInfoTest, GetDeviceInfoConversion) { + // Verify that the conversion from a DeviceInfoFetcher result works, + // regardless of platform. + auto device_info_fetcher = + enterprise_signals::DeviceInfoFetcher::CreateStubInstanceForTesting(); + + enterprise_reporting_private::DeviceInfo info = + EnterpriseReportingPrivateGetDeviceInfoFunction::ToDeviceInfo( + device_info_fetcher->Fetch()); + EXPECT_EQ("stubOS", info.os_name); + EXPECT_EQ("0.0.0.0", info.os_version); + EXPECT_EQ("midnightshift", info.device_host_name); + EXPECT_EQ("topshot", info.device_model); + EXPECT_EQ("twirlchange", info.serial_number); + EXPECT_EQ(enterprise_reporting_private::SETTING_VALUE_ENABLED, + info.screen_lock_secured); + EXPECT_EQ(enterprise_reporting_private::SETTING_VALUE_DISABLED, + info.disk_encrypted); + ASSERT_EQ(1u, info.mac_addresses.size()); + EXPECT_EQ("00:00:00:00:00:00", info.mac_addresses[0]); +} + #endif // !defined(OS_CHROMEOS) class EnterpriseReportingPrivateGetContextInfoTest
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 2601a2bf..2f18f7e 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -602,11 +602,6 @@ "expiry_milestone": 92 }, { - "name": "clipboard-filenames", - "owners": [ "joelhockey" ], - "expiry_milestone": 96 - }, - { "name": "collections-card-presentation-style", "owners": [ "sczs", "bling-flags@google.com" ], "expiry_milestone": 80
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index fd13fbc1..58c636d 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -432,10 +432,6 @@ const char kClientStorageAccessContextAuditingDescription[] = "Record the first-party contexts in which client-side storage was accessed"; -const char kClipboardFilenamesName[] = "Clipboard filenames"; -const char kClipboardFilenamesDescription[] = - "Support reading files in clipboard DataTransfer"; - const char kClearCrossSiteCrossBrowsingContextGroupWindowNameName[] = "Clear window name in top-level cross-site cross-browsing-context-group " "navigation"; @@ -1375,7 +1371,7 @@ "which upon clicking would show a dialog to close all Incognito windows."; const char kUpdateHistoryEntryPointsInIncognitoName[] = - "Update history entry points in Incongito."; + "Update history entry points in Incognito."; const char kUpdateHistoryEntryPointsInIncognitoDescription[] = "When enabled, the entry points to history UI from Incognito mode will be " "removed for iOS and Desktop. An educative placeholder will be shown for "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index fb8b879d..6048eec0 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -254,9 +254,6 @@ extern const char kClientStorageAccessContextAuditingName[]; extern const char kClientStorageAccessContextAuditingDescription[]; -extern const char kClipboardFilenamesName[]; -extern const char kClipboardFilenamesDescription[]; - extern const char kConditionalTabStripAndroidName[]; extern const char kConditionalTabStripAndroidDescription[];
diff --git a/chrome/browser/generic_sensor/DIR_METADATA b/chrome/browser/generic_sensor/DIR_METADATA deleted file mode 100644 index fd9a348..0000000 --- a/chrome/browser/generic_sensor/DIR_METADATA +++ /dev/null
@@ -1,4 +0,0 @@ -monorail: { - component: "Blink>Sensor" -} -team_email: "device-dev@chromium.org"
diff --git a/chrome/browser/generic_sensor/OWNERS b/chrome/browser/generic_sensor/OWNERS deleted file mode 100644 index f301975f..0000000 --- a/chrome/browser/generic_sensor/OWNERS +++ /dev/null
@@ -1,3 +0,0 @@ -file://services/device/generic_sensor/OWNERS - -per-file *permission_context*=file://components/permissions/PERMISSIONS_OWNERS
diff --git a/chrome/browser/generic_sensor/sensor_permission_context.h b/chrome/browser/generic_sensor/sensor_permission_context.h deleted file mode 100644 index 9ff55cc..0000000 --- a/chrome/browser/generic_sensor/sensor_permission_context.h +++ /dev/null
@@ -1,27 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_GENERIC_SENSOR_SENSOR_PERMISSION_CONTEXT_H_ -#define CHROME_BROWSER_GENERIC_SENSOR_SENSOR_PERMISSION_CONTEXT_H_ - -#include "base/macros.h" -#include "components/permissions/permission_context_base.h" - -class SensorPermissionContext : public permissions::PermissionContextBase { - public: - explicit SensorPermissionContext(content::BrowserContext* browser_context); - - ~SensorPermissionContext() override; - - private: - // PermissionContextBase: - void UpdateTabContext(const permissions::PermissionRequestID& id, - const GURL& requesting_frame, - bool allowed) override; - bool IsRestrictedToSecureOrigins() const override; - - DISALLOW_COPY_AND_ASSIGN(SensorPermissionContext); -}; - -#endif // CHROME_BROWSER_GENERIC_SENSOR_SENSOR_PERMISSION_CONTEXT_H_
diff --git a/chrome/browser/net/secure_dns_util.cc b/chrome/browser/net/secure_dns_util.cc index d232938..a0d32ebb 100644 --- a/chrome/browser/net/secure_dns_util.cc +++ b/chrome/browser/net/secure_dns_util.cc
@@ -69,23 +69,14 @@ } void MigrateProbesSettingToOrFromBackup(PrefService* prefs) { -// TODO(crbug.com/1177778): Allow this to run on Android when there is a flag -// controlling a settings ui redesign for Android as was done on Desktop. A -// model for this new flag has been left commented in the code, in the interim -// this code will continue to migrate any Desktop users who have not yet been -// migrated. -#if !defined(OS_ANDROID) - // If the "android settings redesign" is enabled and the user value of the - // preference hasn't been backed up yet, back it up, and clear it. That way, - // the preference will revert to using the hardcoded default value (unless - // it's managed by a policy or an extension). This is necessary, as the - // "android settings redesign" removed the user-facing toggle, and so the - // user value of the preference is no longer modifiable. - if (!prefs->HasPrefPath(kAlternateErrorPagesBackup)) { +// TODO(crbug.com/1177778): remove this code around M97 to make sure the vast +// majority of the clients are migrated. #if defined(OS_ANDROID) -// if(base::FeatureList::IsEnabled("kAndroidSettingsRedesign")) { + if (!prefs->HasPrefPath(kAlternateErrorPagesBackup) && + base::FeatureList::IsEnabled(features::kLinkDoctorDeprecationAndroid)) { +#else + if (!prefs->HasPrefPath(kAlternateErrorPagesBackup)) { #endif // defined(OS_ANDROID) - // If the user never changed the value of the preference and still uses // the hardcoded default value, we'll consider it to be the user value for // the purposes of this migration. @@ -100,24 +91,20 @@ DCHECK(user_value->is_bool()); prefs->SetBoolean(kAlternateErrorPagesBackup, user_value->GetBool()); prefs->ClearPref(embedder_support::kAlternateErrorPagesEnabled); -#if defined(OS_ANDROID) -// } -#endif // defined(OS_ANDROID) } -// The reverse migration should only occur on Android, so this guard should -// remain after the "android settings redesign" begins. +// The reverse migration should only occur on Android at the time of rollout. +// TODO(crbug.com/1177778): remove this part once the rollout is complete. #if defined(OS_ANDROID) - // If the "android settings redesign" is rolled back and there is a backed up + // If the Link Doctor deprecation is rolled back and there is a backed up // value of the preference, restore it to the original preference, and clear // the backup. - if (prefs->HasPrefPath(kAlternateErrorPagesBackup) - /* && !base::FeatureList::IsEnabled("kAndroidSettingsRedesign") */) { + if (prefs->HasPrefPath(kAlternateErrorPagesBackup) && + !base::FeatureList::IsEnabled(features::kLinkDoctorDeprecationAndroid)) { prefs->SetBoolean(embedder_support::kAlternateErrorPagesEnabled, prefs->GetBoolean(kAlternateErrorPagesBackup)); prefs->ClearPref(kAlternateErrorPagesBackup); } #endif // defined(OS_ANDROID) -#endif // !defined(OS_ANDROID) } net::DohProviderEntry::List ProvidersForCountry(
diff --git a/chrome/browser/net/secure_dns_util_unittest.cc b/chrome/browser/net/secure_dns_util_unittest.cc index 2eb74ca..5e881e8 100644 --- a/chrome/browser/net/secure_dns_util_unittest.cc +++ b/chrome/browser/net/secure_dns_util_unittest.cc
@@ -27,8 +27,11 @@ class SecureDnsUtilTest : public testing::Test {}; -#if !defined(OS_ANDROID) -TEST_F(SecureDnsUtilTest, MigrateProbesPref) { +TEST_F(SecureDnsUtilTest, MigrateProbesPrefForwardDefault) { +#if defined(OS_ANDROID) + base::test::ScopedFeatureList scoped_features; + scoped_features.InitAndEnableFeature(features::kLinkDoctorDeprecationAndroid); +#endif // defined(OS_ANDROID) const char kAlternateErrorPagesBackup[] = "alternate_error_pages.backup"; TestingPrefServiceSimple prefs; prefs.registry()->RegisterBooleanPref( @@ -40,12 +43,103 @@ const PrefService::Preference* backup_pref = prefs.FindPreference(kAlternateErrorPagesBackup); + EXPECT_FALSE(current_pref->HasUserSetting()); + EXPECT_FALSE(backup_pref->HasUserSetting()); + MigrateProbesSettingToOrFromBackup(&prefs); EXPECT_FALSE(current_pref->HasUserSetting()); EXPECT_TRUE(backup_pref->HasUserSetting()); EXPECT_TRUE(prefs.GetBoolean(kAlternateErrorPagesBackup)); } -#endif // !defined(OS_ANDROID) + +// The following test verifies the lack of forward migration when the flag is +// disabled, which can only happen on Android. +// TODO(crbug.com/1177778): remove once the migration is fully rolled out. +#if defined(OS_ANDROID) +TEST_F(SecureDnsUtilTest, MigrateProbesPrefForwardNoMigration) { + base::test::ScopedFeatureList scoped_features; + scoped_features.InitAndDisableFeature( + features::kLinkDoctorDeprecationAndroid); + const char kAlternateErrorPagesBackup[] = "alternate_error_pages.backup"; + TestingPrefServiceSimple prefs; + prefs.registry()->RegisterBooleanPref( + embedder_support::kAlternateErrorPagesEnabled, true); + prefs.registry()->RegisterBooleanPref(kAlternateErrorPagesBackup, true); + + prefs.SetBoolean(embedder_support::kAlternateErrorPagesEnabled, true); + + const PrefService::Preference* current_pref = + prefs.FindPreference(embedder_support::kAlternateErrorPagesEnabled); + const PrefService::Preference* backup_pref = + prefs.FindPreference(kAlternateErrorPagesBackup); + + EXPECT_TRUE(current_pref->HasUserSetting()); + EXPECT_FALSE(backup_pref->HasUserSetting()); + + MigrateProbesSettingToOrFromBackup(&prefs); + EXPECT_TRUE(current_pref->HasUserSetting()); + EXPECT_FALSE(backup_pref->HasUserSetting()); + EXPECT_TRUE(prefs.GetBoolean(embedder_support::kAlternateErrorPagesEnabled)); +} +#endif // defined(OS_ANDROID) + +TEST_F(SecureDnsUtilTest, MigrateProbesPrefForwardCustomDisabled) { +#if defined(OS_ANDROID) + base::test::ScopedFeatureList scoped_features; + scoped_features.InitAndEnableFeature(features::kLinkDoctorDeprecationAndroid); +#endif // defined(OS_ANDROID) + const char kAlternateErrorPagesBackup[] = "alternate_error_pages.backup"; + TestingPrefServiceSimple prefs; + prefs.registry()->RegisterBooleanPref( + embedder_support::kAlternateErrorPagesEnabled, true); + prefs.registry()->RegisterBooleanPref(kAlternateErrorPagesBackup, true); + + prefs.SetBoolean(embedder_support::kAlternateErrorPagesEnabled, false); + + const PrefService::Preference* current_pref = + prefs.FindPreference(embedder_support::kAlternateErrorPagesEnabled); + const PrefService::Preference* backup_pref = + prefs.FindPreference(kAlternateErrorPagesBackup); + + EXPECT_TRUE(current_pref->HasUserSetting()); + EXPECT_FALSE(backup_pref->HasUserSetting()); + + MigrateProbesSettingToOrFromBackup(&prefs); + EXPECT_FALSE(current_pref->HasUserSetting()); + EXPECT_TRUE(backup_pref->HasUserSetting()); + EXPECT_FALSE(prefs.GetBoolean(kAlternateErrorPagesBackup)); +} + +// The following test verifies the backward migration, which can only happen on +// Android. +// TODO(crbug.com/1177778): remove once the migration is fully rolled out. +#if defined(OS_ANDROID) +TEST_F(SecureDnsUtilTest, MigrateProbesPrefBackward) { + base::test::ScopedFeatureList scoped_features; + scoped_features.InitAndDisableFeature( + features::kLinkDoctorDeprecationAndroid); + const char kAlternateErrorPagesBackup[] = "alternate_error_pages.backup"; + TestingPrefServiceSimple prefs; + prefs.registry()->RegisterBooleanPref( + embedder_support::kAlternateErrorPagesEnabled, true); + prefs.registry()->RegisterBooleanPref(kAlternateErrorPagesBackup, true); + + prefs.SetBoolean(kAlternateErrorPagesBackup, true); + + const PrefService::Preference* current_pref = + prefs.FindPreference(embedder_support::kAlternateErrorPagesEnabled); + const PrefService::Preference* backup_pref = + prefs.FindPreference(kAlternateErrorPagesBackup); + + EXPECT_FALSE(current_pref->HasUserSetting()); + EXPECT_TRUE(backup_pref->HasUserSetting()); + + MigrateProbesSettingToOrFromBackup(&prefs); + EXPECT_TRUE(current_pref->HasUserSetting()); + EXPECT_FALSE(backup_pref->HasUserSetting()); + EXPECT_TRUE(prefs.GetBoolean(embedder_support::kAlternateErrorPagesEnabled)); +} +#endif // defined(OS_ANDROID) TEST(SecureDnsUtil, SplitGroup) { EXPECT_THAT(SplitGroup("a"), ElementsAre("a"));
diff --git a/chrome/browser/offline_pages/android/downloads/offline_page_download_bridge.cc b/chrome/browser/offline_pages/android/downloads/offline_page_download_bridge.cc index 3810b2a..210b971 100644 --- a/chrome/browser/offline_pages/android/downloads/offline_page_download_bridge.cc +++ b/chrome/browser/offline_pages/android/downloads/offline_page_download_bridge.cc
@@ -123,7 +123,7 @@ const offline_items_collection::OpenParams& open_params) { JNIEnv* env = AttachCurrentThread(); Java_OfflinePageDownloadBridge_openItem( - env, ConvertUTF8ToJavaString(env, item.page_url.spec()), offline_id, + env, ConvertUTF8ToJavaString(env, item.url.spec()), offline_id, static_cast<int>(open_params.launch_location), open_params.open_in_incognito, offline_pages::ShouldOfflinePagesInDownloadHomeOpenInCct());
diff --git a/chrome/browser/password_entry_edit/android/internal/java/src/org/chromium/chrome/browser/password_entry_edit/CredentialEditCoordinator.java b/chrome/browser/password_entry_edit/android/internal/java/src/org/chromium/chrome/browser/password_entry_edit/CredentialEditCoordinator.java index cbd234c..b55928d 100644 --- a/chrome/browser/password_entry_edit/android/internal/java/src/org/chromium/chrome/browser/password_entry_edit/CredentialEditCoordinator.java +++ b/chrome/browser/password_entry_edit/android/internal/java/src/org/chromium/chrome/browser/password_entry_edit/CredentialEditCoordinator.java
@@ -68,7 +68,6 @@ void setCredential(String displayUrlOrAppName, String username, String password, String displayFederationOrigin, boolean isInsecureCredential) { mModel = new PropertyModel.Builder(ALL_KEYS) - .with(UI_ACTION_HANDLER, mMediator) .with(URL_OR_APP, displayUrlOrAppName) .with(FEDERATION_ORIGIN, displayFederationOrigin) .build(); @@ -93,6 +92,7 @@ @Override public void onStartFragment() { CredentialEditCoordinator.setupModelChangeProcessor(mModel, mFragmentView); + mModel.set(UI_ACTION_HANDLER, mMediator); } @Override
diff --git a/chrome/browser/password_entry_edit/android/internal/java/src/org/chromium/chrome/browser/password_entry_edit/CredentialEditProperties.java b/chrome/browser/password_entry_edit/android/internal/java/src/org/chromium/chrome/browser/password_entry_edit/CredentialEditProperties.java index 9d60a72..1f1e7f6 100644 --- a/chrome/browser/password_entry_edit/android/internal/java/src/org/chromium/chrome/browser/password_entry_edit/CredentialEditProperties.java +++ b/chrome/browser/password_entry_edit/android/internal/java/src/org/chromium/chrome/browser/password_entry_edit/CredentialEditProperties.java
@@ -12,8 +12,8 @@ * Properties defined here reflect the visible state of the credential edit UI. */ class CredentialEditProperties { - static final PropertyModel.ReadableObjectPropertyKey<UiActionHandler> UI_ACTION_HANDLER = - new PropertyModel.ReadableObjectPropertyKey<>("ui action handler"); + static final PropertyModel.WritableObjectPropertyKey<UiActionHandler> UI_ACTION_HANDLER = + new PropertyModel.WritableObjectPropertyKey<>("ui action handler"); static final PropertyModel.ReadableObjectPropertyKey<String> URL_OR_APP = new PropertyModel.ReadableObjectPropertyKey<>("url or app"); static final PropertyModel.WritableObjectPropertyKey<String> USERNAME =
diff --git a/chrome/browser/password_manager/android/password_ui_view_android.cc b/chrome/browser/password_manager/android/password_ui_view_android.cc index a63fcea..35c1e40 100644 --- a/chrome/browser/password_manager/android/password_ui_view_android.cc +++ b/chrome/browser/password_manager/android/password_ui_view_android.cc
@@ -235,8 +235,7 @@ password_manager_presenter_.GetPasswordException(index); if (form && !credential_edit_bridge_) { credential_edit_bridge_ = CredentialEditBridge::MaybeCreate( - *form, IsInsecureCredential(false), - password_manager_presenter_.GetUsernamesForRealm(index), + *form, IsInsecureCredential(false), std::vector<std::u16string>(), &saved_passwords_presenter_, &password_manager_presenter_, base::BindOnce(&PasswordUIViewAndroid::OnEditUIDismissed, base::Unretained(this)),
diff --git a/chrome/browser/permissions/permission_manager_factory.cc b/chrome/browser/permissions/permission_manager_factory.cc index 3811b0d..8000877 100644 --- a/chrome/browser/permissions/permission_manager_factory.cc +++ b/chrome/browser/permissions/permission_manager_factory.cc
@@ -11,7 +11,6 @@ #include "chrome/browser/background_sync/periodic_background_sync_permission_context.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" #include "chrome/browser/display_capture/display_capture_permission_context.h" -#include "chrome/browser/generic_sensor/sensor_permission_context.h" #include "chrome/browser/idle/idle_detection_permission_context.h" #include "chrome/browser/media/webrtc/camera_pan_tilt_zoom_permission_context.h" #include "chrome/browser/media/webrtc/media_stream_device_permission_context.h" @@ -36,6 +35,7 @@ #include "components/permissions/contexts/midi_permission_context.h" #include "components/permissions/contexts/midi_sysex_permission_context.h" #include "components/permissions/contexts/payment_handler_permission_context.h" +#include "components/permissions/contexts/sensor_permission_context.h" #include "components/permissions/contexts/webxr_permission_context.h" #include "components/permissions/permission_manager.h" #include "ppapi/buildflags/buildflags.h" @@ -92,7 +92,7 @@ permission_contexts[ContentSettingsType::BACKGROUND_SYNC] = std::make_unique<BackgroundSyncPermissionContext>(profile); permission_contexts[ContentSettingsType::SENSORS] = - std::make_unique<SensorPermissionContext>(profile); + std::make_unique<permissions::SensorPermissionContext>(profile); permission_contexts[ContentSettingsType::ACCESSIBILITY_EVENTS] = std::make_unique<AccessibilityPermissionContext>(profile); permission_contexts[ContentSettingsType::CLIPBOARD_READ_WRITE] =
diff --git a/chrome/browser/privacy_sandbox/privacy_sandbox_settings.cc b/chrome/browser/privacy_sandbox/privacy_sandbox_settings.cc index 228f003..d74baab 100644 --- a/chrome/browser/privacy_sandbox/privacy_sandbox_settings.cc +++ b/chrome/browser/privacy_sandbox/privacy_sandbox_settings.cc
@@ -370,8 +370,8 @@ // Third party cookies must also be available for this context. An empty site // for cookies is provided so the context is always treated as a third party. - return cookie_settings_->IsCookieAccessAllowed(auction_party, GURL(), - top_frame_origin); + return cookie_settings_->IsFullCookieAccessAllowed(auction_party, GURL(), + top_frame_origin); } std::vector<GURL> PrivacySandboxSettings::FilterFledgeAllowedParties( @@ -385,8 +385,8 @@ std::vector<GURL> allowed_parties; for (const auto& party : auction_parties) { - if (cookie_settings_->IsCookieAccessAllowed(party, GURL(), - top_frame_origin)) { + if (cookie_settings_->IsFullCookieAccessAllowed(party, GURL(), + top_frame_origin)) { allowed_parties.push_back(party); } } @@ -473,8 +473,8 @@ if (!base::FeatureList::IsEnabled(features::kPrivacySandboxSettings)) { // Simply respect cookie settings if the UI is not available. An empty site // for cookies is provided so the context is always as a third party. - return cookie_settings_->IsCookieAccessAllowed(url, GURL(), - top_frame_origin); + return cookie_settings_->IsFullCookieAccessAllowed(url, GURL(), + top_frame_origin); } if (!pref_service_->GetBoolean(prefs::kPrivacySandboxApisEnabled))
diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc index eb8d9af..75e3b52 100644 --- a/chrome/browser/profiles/profile_manager.cc +++ b/chrome/browser/profiles/profile_manager.cc
@@ -365,7 +365,7 @@ void ProfileCleanedUp(base::Value profile_path_value) { ListPrefUpdate deleted_profiles(g_browser_process->local_state(), prefs::kProfilesDeleted); - deleted_profiles->Remove(profile_path_value, nullptr); + deleted_profiles->EraseListValue(profile_path_value); } #if BUILDFLAG(ENABLE_EXTENSIONS)
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_tr.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_tr.xtb index 4add9f9..2225a31 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_tr.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_tr.xtb
@@ -6,7 +6,7 @@ <translation id="1012173283529841972">Liste öğesi</translation> <translation id="1013742170491673792">srched</translation> <translation id="1014370462248694370">İki parmağınızı sağa kaydırın</translation> -<translation id="1022586497894531524">ChromeVox sözlü geri bildirimini ilk kez mi kullanıyorsunuz? Bu hızlı eğiticide, ChromeVox'ı kullanmaya başlamak için gereken temel bilgiler açıklanmaktadır.</translation> +<translation id="1022586497894531524">ChromeVox sözlü geri bildirimini ilk kez mi kullanıyorsunuz? Bu hızlı eğitimde, ChromeVox'ı kullanmaya başlamak için gereken temel bilgiler açıklanmaktadır.</translation> <translation id="1025074108959230262">Sabit mod devre dışı bırakıldı</translation> <translation id="1031961866430398710">sonra</translation> <translation id="1038643060055067718">Satır sayısı:</translation> @@ -121,7 +121,7 @@ <translation id="1717267964664691695">Dokunarak kullanma eğitimi tamamlandı</translation> <translation id="1722567105086139392">Bağlantı</translation> <translation id="1727806147743597030">ftr</translation> -<translation id="1730447754326314349">ChromeVox eğiticisine hoş geldiniz. İstediğiniz zaman bu eğiticiden çıkmak için klavyenin sol üst köşesindeki Escape tuşuna basın. ChromeVox'u kapatmak için Control ve Alt tuşlarını basılı tutarken Z tuşuna basın. Hazır olduğunuzda bir sonraki derse geçmek için boşluk tuşunu kullanın.</translation> +<translation id="1730447754326314349">ChromeVox eğitimine hoş geldiniz. İstediğiniz zaman bu eğitimden çıkmak için klavyenin sol üst köşesindeki Escape tuşuna basın. ChromeVox'u kapatmak için Control ve Alt tuşlarını basılı tutarken Z tuşuna basın. Hazır olduğunuzda bir sonraki derse geçmek için boşluk tuşunu kullanın.</translation> <translation id="174268867904053074">Sonraki grafik</translation> <translation id="1756785467854861272">Koyu Macenta</translation> <translation id="1758693804775271377">Bu konuyla ilgili derslere göz atmak için tek parmağınızla ekranı sola veya sağa kaydırın</translation> @@ -216,7 +216,7 @@ <translation id="2490721194269245365">Pembemsi Kahverengi</translation> <translation id="249330843868392562">Metin okuma ayarlarını aç</translation> <translation id="2497706219848005458">Yeşile Dönük Sarı</translation> -<translation id="2523609930580546572">ChromeVox Eğiticisi</translation> +<translation id="2523609930580546572">ChromeVox Eğitimi</translation> <translation id="2525706221823668172">Chromebook klavye kısayolları</translation> <translation id="2553108862507765288">grammatical mistake</translation> <translation id="2556326187583116255">Devam etmekte olan bir konuşmayı durdurmak için 2 parmağınızla dokunun</translation> @@ -239,7 +239,7 @@ <translation id="2673280813984708147">düzenleniyor</translation> <translation id="267442004702508783">yenile</translation> <translation id="2675533876313964202">Açık Yeşil</translation> -<translation id="2684412629217766642">ChromeVox Eğiticisi'ni kapat</translation> +<translation id="2684412629217766642">ChromeVox Eğitimini kapat</translation> <translation id="2697408785920771974">autoinl</translation> <translation id="2697786971245905543">Metin dönüşüm adayı</translation> <translation id="2704429362613743330">{COUNT,plural, =1{aç parantez}other{# aç parantez}}</translation> @@ -277,7 +277,7 @@ <translation id="2894654529758326923">Bilgiler</translation> <translation id="2899328121302785497">{COUNT,plural, =1{sol küme parantezi}other{# sol küme parantezi}}</translation> <translation id="2909584066358367921">Sonraki düğme yok</translation> -<translation id="2911433807131383493">ChromeVox eğiticiyi aç</translation> +<translation id="2911433807131383493">ChromeVox eğitimini aç</translation> <translation id="2912405967290226587">Üç parmağınızı sağa kaydırın</translation> <translation id="2937799153569150791">Sonraki 3. düzey başlık yok</translation> <translation id="2942710183375260152">Koyu Kurşun Mavisi</translation> @@ -288,7 +288,7 @@ <translation id="2972205263822847197">İpucu</translation> <translation id="2976476721782829799">Bir parmağınızı sürükleyerek de ekranda gezinebilirsiniz. Buna, dokunarak keşfetme denir. Bu dersin geri kalanını okumak için parmağınızı ekranda sürüklemeyi deneyin.</translation> <translation id="297825089465017871">İki parmağınızı sola kaydırın</translation> -<translation id="2988364959384217951">İpucu: Bu eğiticiden çıkmak istiyorsanız iki parmağınızla sağdan sola kaydırın.</translation> +<translation id="2988364959384217951">İpucu: Bu eğitimden çıkmak istiyorsanız iki parmağınızla sağdan sola kaydırın.</translation> <translation id="2998131015536248178">Önceki Karakter</translation> <translation id="2999559350546931576">Sesi kalınlaştır</translation> <translation id="3009352964623081324">Ara + O, ardından S. Sesleri yüklemek, yönetmek ve özelleştirmek için kullanın.</translation> @@ -331,7 +331,7 @@ <translation id="3172700825913348768">{COUNT,plural, =1{boşluk}other{# boşluk}}</translation> <translation id="3179119189286472195">Bağlantı verilmemiş</translation> <translation id="320041337977930740">Görüntüleme stilini üst üste (interleave) olarak değiştir</translation> -<translation id="3206698050650195442">Eğiticiden çık</translation> +<translation id="3206698050650195442">Eğitimden çık</translation> <translation id="3208346789712025453">Sonraki denetim yok</translation> <translation id="321072937702597574">Orkide</translation> <translation id="3218691001991391708"><ph name="TEXT" />metnini yapıştır.</translation> @@ -361,7 +361,7 @@ <translation id="3356951775008366684">Kelimenin fonetik telaffuzunu söyler</translation> <translation id="3359142382821736686">seprtr</translation> <translation id="3363015957057974366">Ekranda bir sonraki etkileşimli öğeye geçmek için Sekme tuşunu da kullanabilirsiniz. Arama tuşunun hemen üzerindeki Sekme tuşunu bulun. Devam etmek için Sekme tuşuna basın.</translation> -<translation id="3366946046494222386"><ph name="TOPIC" /> Eğiticisi, <ph name="LESSONS" /> Ders</translation> +<translation id="3366946046494222386"><ph name="TOPIC" /> Eğitimi, <ph name="LESSONS" /> Ders</translation> <translation id="3374537878095184207">{COUNT,plural, =1{artı işareti}other{# artı işareti}}</translation> <translation id="338583716107319301">Ayırıcı</translation> <translation id="3389259863310851658">Önceki form alanı</translation> @@ -401,7 +401,7 @@ <translation id="3650317109285159359">chkmnuitm</translation> <translation id="3655855170848725876">{COUNT,plural, =1{dolar işareti}other{# dolar işareti}}</translation> <translation id="3659787053479271466">alrt</translation> -<translation id="366419593095697301">İpucu: Bu eğiticiden çıkmak isterseniz Escape tuşuna basın.</translation> +<translation id="366419593095697301">İpucu: Bu eğitimden çıkmak isterseniz Escape tuşuna basın.</translation> <translation id="3676062394766691318">Cihazınızı kurduktan sonra geri dönüp Arama + O tuşlarına, sonra da T tuşuna basarak diğer eğiticileri görüntüleyebilirsiniz.</translation> <translation id="3681531118904532409">Papaya Rengi</translation> <translation id="3692274950075847560">A:<ph name="RESULT" /></translation> @@ -693,7 +693,7 @@ <translation id="5851548754964597211">Sekme listesi</translation> <translation id="5866042630553435010">Kısmen işaretli</translation> <translation id="5866210856231860256">Bu konuyla ilgili derslere göz atmak için Arama + Sağ Ok veya Arama + Sol Ok tuşlarına basın</translation> -<translation id="5867591286054666064">Bu eğitici sırasında herhangi bir tuşun adını duymak için ilgili tuşa basın.</translation> +<translation id="5867591286054666064">Bu eğitim sırasında herhangi bir tuşun adını duymak için ilgili tuşa basın.</translation> <translation id="5869546221129391014">Tablo</translation> <translation id="5876817486144482042">Konuşma ses düzeyini düşür</translation> <translation id="5878206664863390311">Konulara göz atmak için Arama + Sağ Ok veya Arama + Sol Ok tuşlarına basın</translation> @@ -934,7 +934,7 @@ <translation id="7701196182766842984">autolst</translation> <translation id="7714340021005120797">Sonraki birleşik giriş kutusu yok</translation> <translation id="772146615414628379">Tebrikler! ChromeVox kullanımıyla ilgili temel bilgileri başarıyla öğrendiniz. ChromeVox komut menüsünü Arama+Nokta tuşlarına basarak istediğiniz zaman açabileceğinizi unutmayın. ChromeVox ve Chrome OS hakkında daha da fazla bilgi edinmek için aşağıdaki makaleleri inceleyin. - Eğiticiyle işiniz bittiğinde, ChromeVox'ı kullanarak Kapat düğmesine gidip düğmeyi tıklayın.</translation> + Eğitimle işiniz bittiğinde, ChromeVox'ı kullanarak Kapat düğmesine gidip düğmeyi tıklayın.</translation> <translation id="7724603315864178912">Kes</translation> <translation id="7731785449856576010">Sonraki medya widget'ı yok</translation> <translation id="7735498529470878067">Dokunarak keşfetmek, ekranda neler olduğunu kısa sürede algılamanıza yardımcı olabilir.</translation> @@ -1052,7 +1052,7 @@ <translation id="8603071050456974042">ChromeVox Paneli</translation> <translation id="8606621670302093223">Tarih denetimi</translation> <translation id="8613709718990529335">Beyaz Porselen</translation> -<translation id="8614129468475308349">Tebrikler! ChromeVox ile ilgili temel bilgileri öğrendiniz. Tekrar eğiticinin üzerinden geçebilir veya aşağıdaki düğmelerden birini bulup tıklayarak bu eğiticiden çıkabilirsiniz.</translation> +<translation id="8614129468475308349">Tebrikler! ChromeVox ile ilgili temel bilgileri öğrendiniz. Tekrar eğitimin üzerinden geçebilir veya aşağıdaki düğmelerden birini bulup tıklayarak bu eğitimden çıkabilirsiniz.</translation> <translation id="8625173877182443267">Sonraki 6. düzey başlık yok</translation> <translation id="8628186274519446680">Domates</translation> <translation id="8638532244051952400">Geçerli hücre koordinatlarını söyle</translation> @@ -1097,7 +1097,7 @@ <translation id="8986362086234534611">Unut</translation> <translation id="8989104346085848538">Devam etmekte olan bir ChromeVox konuşmasını durdurmak için Control tuşuna basın.</translation> <translation id="8993737615451556423">Okuma sesini hızlandırma, yavaşlatma ve duraklatma kontrollerini sağlar</translation> -<translation id="9014206344398081366">ChromeVox eğiticisi</translation> +<translation id="9014206344398081366">ChromeVox eğitimi</translation> <translation id="9040132695316389094">Başlık 1</translation> <translation id="9061884144798498064">8 noktalı bir braille tablosu seçin:</translation> <translation id="9065283790526219006">+popup</translation>
diff --git a/chrome/browser/resources/download_shelf/download_item.html b/chrome/browser/resources/download_shelf/download_item.html index 770aa0c..c615b9cb 100644 --- a/chrome/browser/resources/download_shelf/download_item.html +++ b/chrome/browser/resources/download_shelf/download_item.html
@@ -246,7 +246,7 @@ <cr-button id="keep-button"> <!-- Text depends on file type so fill it in programmatically. --> </cr-button> - <cr-button id="discard-button">$i18n{discardButtonText}</cr-button> + <cr-button id="discard-button"></cr-button> <button id="dropdown-button"> <svg id="dropdown-icon" viewBox="0 0 16 16"> <g>
diff --git a/chrome/browser/resources/download_shelf/download_item.js b/chrome/browser/resources/download_shelf/download_item.js index 5aa170cb..9849787 100644 --- a/chrome/browser/resources/download_shelf/download_item.js +++ b/chrome/browser/resources/download_shelf/download_item.js
@@ -51,8 +51,9 @@ .addEventListener('click', e => this.onOpenButtonClick_(e)); this.$('#dropdown-button') .addEventListener('click', e => this.onDropdownButtonClick_(e)); - this.$('#discard-button') - .addEventListener('click', e => this.onDiscardButtonClick_(e)); + const discardButton = this.$('#discard-button'); + discardButton.innerText = loadTimeData.getString('discardButtonText'); + discardButton.addEventListener('click', e => this.onDiscardButtonClick_(e)); this.$('#keep-button') .addEventListener('click', e => this.onKeepButtonClick_(e)); this.addEventListener('contextmenu', e => this.onContextMenu_(e)); @@ -73,8 +74,8 @@ } /** - * @private * @return {string} + * @private */ get clampedWarningText_() { // Views uses ui/gfx/text_elider.cc to elide text given a maximum width.
diff --git a/chrome/browser/resources/download_shelf/download_list.js b/chrome/browser/resources/download_shelf/download_list.js index 2d4635c..b23b58c 100644 --- a/chrome/browser/resources/download_shelf/download_list.js +++ b/chrome/browser/resources/download_shelf/download_list.js
@@ -129,6 +129,7 @@ }); } + /** @private */ clear_() { while (this.listenerIds_.length) { this.apiProxy_.getCallbackRouter().removeListener(
diff --git a/chrome/browser/resources/settings/chromeos/os_people_page/lock_screen.js b/chrome/browser/resources/settings/chromeos/os_people_page/lock_screen.js index b851b72..bf1f725 100644 --- a/chrome/browser/resources/settings/chromeos/os_people_page/lock_screen.js +++ b/chrome/browser/resources/settings/chromeos/os_people_page/lock_screen.js
@@ -263,15 +263,15 @@ // |hasPin| to true. This prevents setupPinButton UI delays, except in the // small chance that CrOS fails to remove the quick unlock capability. See // https://crbug.com/1054327 for details. - if (!this.hasPin) { - return; - } this.hasPin = false; this.setModes.call(null, [], [], (result) => { - assert(result, 'Failed to clear quick unlock modes'); // Revert |hasPin| to true in the event setModes fails to set lock state // to PASSWORD only. - this.hasPin = true; + if (!result) { + this.hasPin = true; + } + + assert(result, 'Failed to clear quick unlock modes'); }); } },
diff --git a/chrome/browser/signin/services/android/java/src/org/chromium/chrome/browser/signin/services/ProfileDataCache.java b/chrome/browser/signin/services/android/java/src/org/chromium/chrome/browser/signin/services/ProfileDataCache.java index b948167..45765f0 100644 --- a/chrome/browser/signin/services/android/java/src/org/chromium/chrome/browser/signin/services/ProfileDataCache.java +++ b/chrome/browser/signin/services/android/java/src/org/chromium/chrome/browser/signin/services/ProfileDataCache.java
@@ -203,7 +203,7 @@ Bitmap avatar = profileData.getAvatar(); if (avatar == null) { // If the avatar is null, try to fetch the monogram from IdentityManager - mAccountInfoService.getAccountInfoByEmailAsync(email).then(accountInfo -> { + mAccountInfoService.getAccountInfoByEmail(email).then(accountInfo -> { updateCacheAndNotifyObservers(email, accountInfo != null ? accountInfo.getAccountImage() : null, profileData.getFullName(), profileData.getGivenName()); @@ -233,7 +233,7 @@ private void populateCache() { AccountManagerFacadeProvider.getInstance().tryGetGoogleAccounts(accounts -> { for (Account account : accounts) { - mAccountInfoService.getAccountInfoByEmailAsync(account.name) + mAccountInfoService.getAccountInfoByEmail(account.name) .then(this::onAccountInfoUpdated); } });
diff --git a/chrome/browser/speech/extension_api/tts_engine_extension_api_chromeos.cc b/chrome/browser/speech/extension_api/tts_engine_extension_api_chromeos.cc index c9a8d03b..b6a5cd8 100644 --- a/chrome/browser/speech/extension_api/tts_engine_extension_api_chromeos.cc +++ b/chrome/browser/speech/extension_api/tts_engine_extension_api_chromeos.cc
@@ -11,6 +11,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/speech/extension_api/tts_engine_extension_observer_chromeos.h" #include "chrome/browser/speech/extension_api/tts_extension_api_constants.h" +#include "chrome/common/extensions/api/speech/tts_engine_manifest_handler.h" #include "chrome/common/extensions/extension_constants.h" #include "extensions/browser/extension_system.h" #include "extensions/common/extension.h" @@ -58,7 +59,8 @@ } std::unique_ptr<base::ListValue> args = BuildSpeakArgs(utterance, voice); - if (playback_tts_stream_) { + if (!RefreshAudioStreamOptionsForExtension(engine_id, profile) && + playback_tts_stream_) { Play(event_router, std::move(args), engine_id, profile); return; } @@ -66,15 +68,17 @@ TtsEngineExtensionObserverChromeOS::GetInstance(profile) ->BindPlaybackTtsStream( playback_tts_stream_.BindNewPipeAndPassReceiver(), + audio_parameters_.Clone(), base::BindOnce( [](extensions::EventRouter* event_router, std::unique_ptr<base::ListValue> args, const std::string& engine_id, Profile* profile, - TtsExtensionEngineChromeOS* owner, int32_t sample_rate, - int32_t buffer_size) { + TtsExtensionEngineChromeOS* owner, + chromeos::tts::mojom::AudioParametersPtr audio_parameters) { // |owner| is always valid because TtsExtensionEngine is a // singleton. - owner->UpdateAudioStreamOptions(sample_rate, buffer_size); + DCHECK(audio_parameters); + owner->UpdateAudioStreamOptions(std::move(audio_parameters)); owner->Play(event_router, std::move(args), engine_id, profile); }, event_router, std::move(args), engine_id, profile, this)); @@ -165,10 +169,44 @@ current_utterance_profile_observer_.Reset(); } -void TtsExtensionEngineChromeOS::UpdateAudioStreamOptions(int sample_rate, - int buffer_size) { - sample_rate_ = sample_rate; - buffer_size_ = buffer_size; +void TtsExtensionEngineChromeOS::UpdateAudioStreamOptions( + chromeos::tts::mojom::AudioParametersPtr audio_parameters) { + audio_parameters_ = std::move(audio_parameters); +} + +bool TtsExtensionEngineChromeOS::RefreshAudioStreamOptionsForExtension( + const std::string& engine_id, + Profile* profile) { + if (current_playback_engine_ == engine_id) + return false; + + extensions::ExtensionRegistry* registry = + extensions::ExtensionRegistry::Get(profile); + DCHECK(registry); + const extensions::Extension* extension = + registry->enabled_extensions().GetByID(engine_id); + if (!extension) + return false; + + current_playback_engine_ = engine_id; + auto* info = extensions::TtsVoices::GetTtsEngineInfo(extension); + if (!info || !info->sample_rate || !info->buffer_size) { + bool had_params = !!audio_parameters_; + audio_parameters_.reset(); + return had_params; + } + + if (!audio_parameters_) + audio_parameters_ = chromeos::tts::mojom::AudioParameters::New(); + + if (audio_parameters_->sample_rate == *info->sample_rate && + audio_parameters_->buffer_size == *info->buffer_size) { + return false; + } + + audio_parameters_->sample_rate = *info->sample_rate; + audio_parameters_->buffer_size = *info->buffer_size; + return true; } void TtsExtensionEngineChromeOS::Play(extensions::EventRouter* event_router, @@ -182,11 +220,12 @@ return; // Add audio stream options. + DCHECK(audio_parameters_); auto audio_stream_options = std::make_unique<base::DictionaryValue>(); audio_stream_options->SetInteger(tts_extension_api_constants::kSampleRateKey, - sample_rate_); + audio_parameters_->sample_rate); audio_stream_options->SetInteger(tts_extension_api_constants::kBufferSizeKey, - buffer_size_); + audio_parameters_->buffer_size); args->Append(std::move(audio_stream_options)); // Disconnect any previous receivers.
diff --git a/chrome/browser/speech/extension_api/tts_engine_extension_api_chromeos.h b/chrome/browser/speech/extension_api/tts_engine_extension_api_chromeos.h index 3d0379802..466d0918 100644 --- a/chrome/browser/speech/extension_api/tts_engine_extension_api_chromeos.h +++ b/chrome/browser/speech/extension_api/tts_engine_extension_api_chromeos.h
@@ -57,7 +57,16 @@ void OnProfileWillBeDestroyed(Profile* profile) override; private: - void UpdateAudioStreamOptions(int sample_rate, int buffer_size); + // Unconditionally updates audio stream options. + void UpdateAudioStreamOptions( + chromeos::tts::mojom::AudioParametersPtr audio_parameters); + + // Refresh audio stream options from an extension's manifest. Returns true if + // parameters were updated. + bool RefreshAudioStreamOptionsForExtension(const std::string& engine_id, + Profile* profile); + + // Helper to start audio playback. void Play(extensions::EventRouter* event_router, std::unique_ptr<base::ListValue> args, const std::string& engine_id, @@ -73,8 +82,8 @@ base::ScopedObservation<Profile, ProfileObserver> current_utterance_profile_observer_{this}; - int sample_rate_ = 0; - int buffer_size_ = 0; + chromeos::tts::mojom::AudioParametersPtr audio_parameters_; + extensions::ExtensionId current_playback_engine_; }; #endif // CHROME_BROWSER_SPEECH_EXTENSION_API_TTS_ENGINE_EXTENSION_API_CHROMEOS_H_
diff --git a/chrome/browser/speech/extension_api/tts_engine_extension_observer_chromeos.cc b/chrome/browser/speech/extension_api/tts_engine_extension_observer_chromeos.cc index c8c2a18..4427a3f 100644 --- a/chrome/browser/speech/extension_api/tts_engine_extension_observer_chromeos.cc +++ b/chrome/browser/speech/extension_api/tts_engine_extension_observer_chromeos.cc
@@ -169,6 +169,7 @@ void TtsEngineExtensionObserverChromeOS::BindPlaybackTtsStream( mojo::PendingReceiver<chromeos::tts::mojom::PlaybackTtsStream> receiver, + chromeos::tts::mojom::AudioParametersPtr audio_parameters, chromeos::tts::mojom::TtsService::BindPlaybackTtsStreamCallback callback) { CreateTtsServiceIfNeeded(); @@ -179,7 +180,8 @@ auto factory_receiver = factory_remote.InitWithNewPipeAndPassReceiver(); content::GetAudioService().BindStreamFactory(std::move(factory_receiver)); tts_service_->BindPlaybackTtsStream( - std::move(receiver), std::move(factory_remote), std::move(callback)); + std::move(receiver), std::move(factory_remote), + std::move(audio_parameters), std::move(callback)); } void TtsEngineExtensionObserverChromeOS::Shutdown() {
diff --git a/chrome/browser/speech/extension_api/tts_engine_extension_observer_chromeos.h b/chrome/browser/speech/extension_api/tts_engine_extension_observer_chromeos.h index 7269370..bc94efe 100644 --- a/chrome/browser/speech/extension_api/tts_engine_extension_observer_chromeos.h +++ b/chrome/browser/speech/extension_api/tts_engine_extension_observer_chromeos.h
@@ -37,6 +37,7 @@ mojo::PendingReceiver<chromeos::tts::mojom::GoogleTtsStream> receiver); void BindPlaybackTtsStream( mojo::PendingReceiver<chromeos::tts::mojom::PlaybackTtsStream> receiver, + chromeos::tts::mojom::AudioParametersPtr audio_parameters, chromeos::tts::mojom::TtsService::BindPlaybackTtsStreamCallback callback); // Implementation of KeyedService.
diff --git a/chrome/browser/speech/extension_api/tts_extension_apitest.cc b/chrome/browser/speech/extension_api/tts_extension_apitest.cc index e26c2cc5..b7b6c4b 100644 --- a/chrome/browser/speech/extension_api/tts_extension_apitest.cc +++ b/chrome/browser/speech/extension_api/tts_extension_apitest.cc
@@ -598,6 +598,23 @@ ASSERT_TRUE(RunExtensionTest("tts_engine/on_speak_with_audio_stream")) << message_; } + +IN_PROC_BROWSER_TEST_F(TtsApiTest, OnSpeakWithAudioStreamAudioOptions) { + TtsExtensionEngine::GetInstance()->DisableBuiltInTTSEngineForTesting(); + TtsEngineExtensionObserverChromeOS* engine_observer = + TtsEngineExtensionObserverChromeOS::GetInstance(profile()); + mojo::Remote<chromeos::tts::mojom::TtsService>* tts_service_remote = + engine_observer->tts_service_for_testing(); + chromeos::tts::TtsService tts_service( + tts_service_remote->BindNewPipeAndPassReceiver()); + + EXPECT_CALL(mock_platform_impl_, IsSpeaking()).Times(AnyNumber()); + EXPECT_CALL(mock_platform_impl_, StopSpeaking()).WillRepeatedly(Return(true)); + + ASSERT_TRUE(RunExtensionTest( + "tts_engine/on_speak_with_audio_stream_using_audio_options")) + << message_; +} #endif // IS_CHROMEOS_ASH } // namespace extensions
diff --git a/chrome/browser/spellchecker/spellcheck_service_unittest.cc b/chrome/browser/spellchecker/spellcheck_service_unittest.cc index 541d3678..c9f808b 100644 --- a/chrome/browser/spellchecker/spellcheck_service_unittest.cc +++ b/chrome/browser/spellchecker/spellcheck_service_unittest.cc
@@ -223,7 +223,9 @@ prefs()->SetString(language::prefs::kAcceptLanguages, accept_languages); base::ListValue spellcheck_dictionaries_list; - spellcheck_dictionaries_list.AppendStrings(spellcheck_dictionaries); + for (std::string dict : spellcheck_dictionaries) { + spellcheck_dictionaries_list.Append(dict); + } prefs()->Set(spellcheck::prefs::kSpellCheckDictionaries, spellcheck_dictionaries_list);
diff --git a/chrome/browser/storage/durable_storage_permission_context.cc b/chrome/browser/storage/durable_storage_permission_context.cc index 6ba2436..6862553 100644 --- a/chrome/browser/storage/durable_storage_permission_context.cc +++ b/chrome/browser/storage/durable_storage_permission_context.cc
@@ -67,8 +67,8 @@ // Don't grant durable for session-only storage, since it won't be persisted // anyway. Don't grant durable if we can't write cookies. if (cookie_settings->IsCookieSessionOnly(requesting_origin) || - !cookie_settings->IsCookieAccessAllowed(requesting_origin, - requesting_origin)) { + !cookie_settings->IsFullCookieAccessAllowed(requesting_origin, + requesting_origin)) { NotifyPermissionSet(id, requesting_origin, embedding_origin, std::move(callback), /*persist=*/false, CONTENT_SETTING_DEFAULT, /*is_one_time=*/false);
diff --git a/chrome/browser/tracing/background_tracing_field_trial.cc b/chrome/browser/tracing/background_tracing_field_trial.cc index 31a72d5d..b6040680 100644 --- a/chrome/browser/tracing/background_tracing_field_trial.cc +++ b/chrome/browser/tracing/background_tracing_field_trial.cc
@@ -77,22 +77,32 @@ if (upload_url.empty() || !base::ReadFileToString(config_file, &config_text) || config_text.empty()) { + LOG(ERROR) << "Failed to read background tracing config file " + << config_file.value(); return; } - std::unique_ptr<base::Value> value = - base::JSONReader::ReadDeprecated(config_text); - if (!value) { - LOG(ERROR) << "Background tracing has incorrect config: " << config_text; + base::JSONReader::ValueWithError value_with_error = + base::JSONReader::ReadAndReturnValueWithError( + config_text, base::JSON_ALLOW_TRAILING_COMMAS); + if (!value_with_error.value) { + LOG(ERROR) << "Background tracing has incorrect config: " + << value_with_error.error_message; return; } const base::DictionaryValue* dict = nullptr; - if (!value->GetAsDictionary(&dict)) + if (!value_with_error.value->GetAsDictionary(&dict)) { + LOG(ERROR) << "Background tracing config is not a dict"; return; + } std::unique_ptr<content::BackgroundTracingConfig> config = content::BackgroundTracingConfig::FromDict(dict); + if (!config) { + LOG(ERROR) << "Background tracing config dict has invalid contents"; + return; + } content::BackgroundTracingManager::GetInstance()->SetActiveScenario( std::move(config), base::BindRepeating(&BackgroundTracingUploadCallback, upload_url),
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb index 9085087..560133e 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">ውርድዎን በማፍጠን ላይ።</translation> <translation id="5454166040603940656">ከ<ph name="PROVIDER" /> ጋር</translation> <translation id="5456381639095306749">ገጽ አውርድ</translation> +<translation id="5458366071038729214">የሚከተሏቸውን ጣቢያዎች እዚህ ያገኛሉ</translation> <translation id="548278423535722844">በካርታዎች መተግበሪያ ውስጥ ይክፈቱ</translation> <translation id="5483197086164197190">Chromeን ያስሱ</translation> <translation id="5487521232677179737">ውሂብን አጽዳ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb index ac173ec2f..09d0c2f 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">جارٍ تسريع التنزيل.</translation> <translation id="5454166040603940656">مع <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">تنزيل الصفحة</translation> +<translation id="5458366071038729214">تظهر هنا المواقع الإلكترونية التي تتابعها.</translation> <translation id="548278423535722844">فتح في تطبيق الخرائط</translation> <translation id="5483197086164197190">التنقُّل في Chrome</translation> <translation id="5487521232677179737">محو البيانات</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb index c42cb43..925ffc2f 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">আপোনাৰ ডাউনল’ড আৰু খৰতকীয়া কৰি থকা হৈছে।</translation> <translation id="5454166040603940656"><ph name="PROVIDER" />ৰ সৈতে</translation> <translation id="5456381639095306749">পৃষ্ঠাটো ডাউনল'ড কৰক</translation> +<translation id="5458366071038729214">আপুনি নিজে ফ'ল' কৰা ছাইটসমূহ ইয়াত বিচাৰি পাব</translation> <translation id="548278423535722844">maps এপত খোলক</translation> <translation id="5483197086164197190">Chromeত নেভিগে’ট কৰা</translation> <translation id="5487521232677179737">ডেটা মচক</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb index c473540..f61c2a0 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Endirmənizi sürətləndirin.</translation> <translation id="5454166040603940656"><ph name="PROVIDER" /> ilə</translation> <translation id="5456381639095306749">Endirmə səhifəsi</translation> +<translation id="5458366071038729214">İzlədiyiniz saytları burada tapa bilərsiniz</translation> <translation id="548278423535722844">Xəritə tətbiqində açın</translation> <translation id="5483197086164197190">Chrome'u araşdırın</translation> <translation id="5487521232677179737">Datanı silin</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb index bd227b40..a72c5a5 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Спампоўка паскараецца.</translation> <translation id="5454166040603940656">крыніца: <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Спампаваць старонку</translation> +<translation id="5458366071038729214">Тут будуць паказвацца сайты, на якія вы падпішацеся</translation> <translation id="548278423535722844">Адкрыць у праграме карт</translation> <translation id="5483197086164197190">Навігацыя ў Chrome</translation> <translation id="5487521232677179737">Ачысціць даныя</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb index afd0022..dceab66 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Изтеглянето се ускорява.</translation> <translation id="5454166040603940656">с/ъс <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Изтегляне на страницата</translation> +<translation id="5458366071038729214">Тук ще виждате сайтовете, които следите</translation> <translation id="548278423535722844">Отваряне в приложение за карти</translation> <translation id="5483197086164197190">Навигиране в Chrome</translation> <translation id="5487521232677179737">Изчиств. на данните</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb index b33b887..005ef02 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Ubrzavanje preuzimanja.</translation> <translation id="5454166040603940656">s pružaocem usluge <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Preuzmi stranicu</translation> +<translation id="5458366071038729214">Ovdje ćete pronaći lokacije koje pratite</translation> <translation id="548278423535722844">Otvori u aplikacijama za mape</translation> <translation id="5483197086164197190">Navigirajte Chromeom</translation> <translation id="5487521232677179737">Obriši podatke</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb index 901fbe0..adb9d790 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
@@ -311,7 +311,7 @@ <translation id="2956410042958133412"><ph name="PARENT_NAME_1" /> i <ph name="PARENT_NAME_2" /> gestionen aquest compte.</translation> <translation id="2961208450284224863">{READING_LIST_UNREAD_PAGE_COUNT,plural, =1{<ph name="READING_LIST_UNREAD_PAGE_COUNT_ONE" /> pàgina no llegida}other{<ph name="READING_LIST_UNREAD_PAGE_COUNT_MANY" /> pàgines no llegides}}</translation> <translation id="2979025552038692506">Pestanya d'incògnit seleccionada</translation> -<translation id="2979448359891869301">No es pot ampliar la captura de pantalla. Torna-ho a provar quan el telèfon no estigui ocupat.</translation> +<translation id="2979448359891869301">No es pot ampliar la captura de pantalla. Torna-ho a provar quan el telèfon disposi de més recursos.</translation> <translation id="2979639724566107830">Obre-ho en una finestra nova</translation> <translation id="2987620471460279764">Text compartit d'un altre dispositiu</translation> <translation id="2989523299700148168">Visitats últimament</translation> @@ -684,6 +684,7 @@ <translation id="545042621069398927">S'està accelerant la baixada.</translation> <translation id="5454166040603940656">amb <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Baixa la pàgina</translation> +<translation id="5458366071038729214">Aquí veuràs els llocs web que segueixes</translation> <translation id="548278423535722844">Obre en una aplicació de mapes</translation> <translation id="5483197086164197190">Navegar per Chrome</translation> <translation id="5487521232677179737">Esborra les dades</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb index fcff4e96..fec1954 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Zrychlování stahování.</translation> <translation id="5454166040603940656">(<ph name="PROVIDER" />)</translation> <translation id="5456381639095306749">Stáhnout stránku</translation> +<translation id="5458366071038729214">Zde najdete weby, které sledujete</translation> <translation id="548278423535722844">Otevřít v mapové aplikaci</translation> <translation id="5483197086164197190">Navigace v Chromu</translation> <translation id="5487521232677179737">Vymazat data</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb index 3dbd0c8..c15e1c1 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Øger hastigheden på din download.</translation> <translation id="5454166040603940656">med <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Download siden</translation> +<translation id="5458366071038729214">Du kan finde de websites, du følger, her</translation> <translation id="548278423535722844">Åbn i kortapp</translation> <translation id="5483197086164197190">Find rundt i Chrome</translation> <translation id="5487521232677179737">Ryd data</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb index 3e185c6..6f7a767 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Επιτάχυνση της λήψης σας.</translation> <translation id="5454166040603940656">με <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Λήψη σελίδας</translation> +<translation id="5458366071038729214">Εδώ θα βρίσκετε τους ιστοτόπους που ακολουθείτε.</translation> <translation id="548278423535722844">Άνοιγμα σε εφαρμογή χαρτών</translation> <translation id="5483197086164197190">Πλοήγηση στο Chrome</translation> <translation id="5487521232677179737">Διαγραφή δεδομένων</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb index 1e470d9f..502877b 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Acelerando la descarga</translation> <translation id="5454166040603940656">con <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Descargar página</translation> +<translation id="5458366071038729214">Aquí encontrarás los sitios que sigues.</translation> <translation id="548278423535722844">Abrir en una app de mapas</translation> <translation id="5483197086164197190">Navigate Chrome</translation> <translation id="5487521232677179737">Borrar datos</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb index ca24fd1..adb8f3c4 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Acelerando descarga.</translation> <translation id="5454166040603940656">con <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Descargar página</translation> +<translation id="5458366071038729214">Los sitios que sigas aparecerán aquí</translation> <translation id="548278423535722844">Abrirla en una aplicación de mapas</translation> <translation id="5483197086164197190">Desplazarte por Chrome</translation> <translation id="5487521232677179737">Borrar datos</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb index 672cc1c..8d25a943 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Allalaadimise kiirendamine.</translation> <translation id="5454166040603940656">teenusepakkujaga <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Laadi leht alla</translation> +<translation id="5458366071038729214">Jälgitavad saidid leiate siit</translation> <translation id="548278423535722844">Avage kaardirakenduses</translation> <translation id="5483197086164197190">Chrome'is navigeerimine</translation> <translation id="5487521232677179737">Kustuta andmed</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb index 1d5bf42..d84ecae 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Deskarga bizkortzen.</translation> <translation id="5454166040603940656">Hornitzailea: <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Deskargatu orria</translation> +<translation id="5458366071038729214">Jarraitzaile zaituzten webguneak aurkituko dituzu hemen</translation> <translation id="548278423535722844">Ireki mapa-aplikazio batean</translation> <translation id="5483197086164197190">Chrome-n nabigatzea</translation> <translation id="5487521232677179737">Garbitu datuak</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb index 740c9e3..be0132c 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">درحال سرعت بخشیدن به بارگیری.</translation> <translation id="5454166040603940656">با <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">بارگیری صفحه</translation> +<translation id="5458366071038729214">سایتهایی را که دنبال میکنید اینجا پیدا خواهید کرد</translation> <translation id="548278423535722844">باز کردن در برنامه Maps</translation> <translation id="5483197086164197190">پیمایش در Chrome</translation> <translation id="5487521232677179737">پاک کردن دادهها</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb index 8b9ed0ff..20e34d0 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Lataustasi nopeutetaan</translation> <translation id="5454166040603940656">palvelulla <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Lataa sivu</translation> +<translation id="5458366071038729214">Löydät seuraamasi sivustot täältä</translation> <translation id="548278423535722844">Avaa karttasovelluksessa</translation> <translation id="5483197086164197190">Chromessa siirtyminen</translation> <translation id="5487521232677179737">Poista tiedot</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb index 011c537..6e27ba6 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Accélération de votre téléchargement en cours…</translation> <translation id="5454166040603940656">avec <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Télécharger la page</translation> +<translation id="5458366071038729214">Les sites que vous suivez s'afficheront ici</translation> <translation id="548278423535722844">Ouvrir dans l'application Maps</translation> <translation id="5483197086164197190">Naviguer dans Chrome</translation> <translation id="5487521232677179737">Effacer les données</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb index 970a7ec23..8b5d705 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Accélération du téléchargement…</translation> <translation id="5454166040603940656">avec <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Télécharger la page</translation> +<translation id="5458366071038729214">Les sites que vous suivez s'afficheront ici</translation> <translation id="548278423535722844">Ouvrir dans une application de plans</translation> <translation id="5483197086164197190">Navigate Chrome</translation> <translation id="5487521232677179737">Effacer les données</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb index 3ae0a3a..9c66982f 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Estase acelerando a descarga.</translation> <translation id="5454166040603940656">con <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Descargar páxina</translation> +<translation id="5458366071038729214">Aquí atoparás os sitios que segues</translation> <translation id="548278423535722844">Abrir na aplicación de mapas</translation> <translation id="5483197086164197190">Navega por Chrome</translation> <translation id="5487521232677179737">Borrar datos</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb index d42de2f..8342978 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">आपके डाउनलोड की गति बढ़ाई जा रही है.</translation> <translation id="5454166040603940656"><ph name="PROVIDER" /> के साथ</translation> <translation id="5456381639095306749">पेज डाउनलोड करें</translation> +<translation id="5458366071038729214">यहां आपको वे साइटें दिखेंगी जिन्हें आप फ़ॉलो करते हैं</translation> <translation id="548278423535722844">मैप ऐप्लिकेशन में खोलें</translation> <translation id="5483197086164197190">Navigate Chrome</translation> <translation id="5487521232677179737">डेटा साफ़ करें</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb index 7b8ae78..105bb343 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
@@ -683,6 +683,7 @@ <translation id="545042621069398927">Ubrzavanje preuzimanja.</translation> <translation id="5454166040603940656">uz <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Preuzmi stranicu</translation> +<translation id="5458366071038729214">Ovdje ćete pronaći stranice koje pratite</translation> <translation id="548278423535722844">Otvori u aplikaciji za karte</translation> <translation id="5483197086164197190">Kretanje Chromeom</translation> <translation id="5487521232677179737">Izbriši podatke</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb index e6d8cc75..9d622fc 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Letöltés felgyorsítása…</translation> <translation id="5454166040603940656"><ph name="PROVIDER" /> szolgáltatóval</translation> <translation id="5456381639095306749">Oldal letöltése</translation> +<translation id="5458366071038729214">A követett webhelyeket itt láthatja majd</translation> <translation id="548278423535722844">Megnyitás térképalkalmazásban</translation> <translation id="5483197086164197190">Navigáció a Chrome-ban</translation> <translation id="5487521232677179737">Adatok törlése</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb index c07f874..023b38f 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Ներբեռնումն արագացվում է։</translation> <translation id="5454166040603940656"><ph name="PROVIDER" />-ի հետ</translation> <translation id="5456381639095306749">Ներբեռնել էջը</translation> +<translation id="5458366071038729214">Կայքերը, որոնց հետևում եք, կցուցադրվեն այստեղ</translation> <translation id="548278423535722844">Բացեք Քարտեզներ հավելվածում</translation> <translation id="5483197086164197190">Նավիգացիա Chrome-ում</translation> <translation id="5487521232677179737">Ջնջել տվյալները</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb index 529989e3..45718c6 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Mempercepat download.</translation> <translation id="5454166040603940656">dengan <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Download halaman</translation> +<translation id="5458366071038729214">Anda akan menemukan situs yang Anda ikuti di sini</translation> <translation id="548278423535722844">Buka di aplikasi peta</translation> <translation id="5483197086164197190">Navigate Chrome</translation> <translation id="5487521232677179737">Hapus data</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb index 30839a18..7e45cb46 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Flýtir fyrir niðurhali.</translation> <translation id="5454166040603940656">hjá <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Sækja síðu</translation> +<translation id="5458366071038729214">Hér birtast vefsvæði sem þú fylgir</translation> <translation id="548278423535722844">Opna í kortaforriti</translation> <translation id="5483197086164197190">Flettu í Chrome</translation> <translation id="5487521232677179737">Hreinsa gögn</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb index 7eeb1f20..96f7cf2 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Accelerazione del download in corso.</translation> <translation id="5454166040603940656">con <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Scarica la pagina</translation> +<translation id="5458366071038729214">Qui troverai i siti che segui</translation> <translation id="548278423535722844">Apri nell'app di mappe</translation> <translation id="5483197086164197190">Esplorare Chrome</translation> <translation id="5487521232677179737">Cancella dati</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb index 265a566..0166f70 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">הדפדפן מאיץ את ההורדה.</translation> <translation id="5454166040603940656">עם <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">הורדת דף זה</translation> +<translation id="5458366071038729214">כאן יוצגו האתרים שיתווספו למעקב</translation> <translation id="548278423535722844">פתיחה באפליקציית מפות</translation> <translation id="5483197086164197190">ניווט ב-Chrome</translation> <translation id="5487521232677179737">ניקוי נתונים</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb index f1947f8a..6adba7da 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">მიმდინარეობს ჩამოტვირთვის აჩქარება.</translation> <translation id="5454166040603940656"><ph name="PROVIDER" />-ით</translation> <translation id="5456381639095306749">გვერდის ჩამოტვირთვა</translation> +<translation id="5458366071038729214">აქ იპოვით საიტებს, რომლებსაც თვალს ადევნებთ</translation> <translation id="548278423535722844">რუკების აპში გახსნა</translation> <translation id="5483197086164197190">Chrome-ში ნავიგაცია</translation> <translation id="5487521232677179737">მონაცემების წაშლა</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb index f13c6284..0469225 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Жылдамырақ жүктеп алынуда.</translation> <translation id="5454166040603940656"><ph name="PROVIDER" /> провайдерімен</translation> <translation id="5456381639095306749">Жүктеп алу беті</translation> +<translation id="5458366071038729214">Жазылған сайттарыңыз осы жерде көрсетіледі.</translation> <translation id="548278423535722844">Maps қолданбасында ашу</translation> <translation id="5483197086164197190">Chrome браузерін шарлау</translation> <translation id="5487521232677179737">Деректерді жою</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb index 87eae5b..4d89e548 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">កំពុងបង្កើនល្បឿននៃការទាញយករបស់អ្នក។</translation> <translation id="5454166040603940656">ជាមួយ <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">ទាញយកទំព័រ</translation> +<translation id="5458366071038729214">អ្នកនឹងឃើញគេហទំព័រដែលអ្នកតាមដាននៅទីនេះ</translation> <translation id="548278423535722844">បើកនៅក្នុងកម្មវិធីផែនទី</translation> <translation id="5483197086164197190">រុករក Chrome</translation> <translation id="5487521232677179737">ជម្រះទិន្នន័យ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb index 3ac9129..488445f 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb
@@ -473,7 +473,7 @@ <translation id="4062305924942672200">ಕಾನೂನು ಮಾಹಿತಿ</translation> <translation id="4084682180776658562">ಬುಕ್ಮಾರ್ಕ್</translation> <translation id="4084712963632273211"><ph name="PUBLISHER_ORIGIN" /> ಅವರಿಂದ – <ph name="BEGIN_DEEMPHASIZED" />Google ನಿಂದ ವಿತರಿಸಲಾಗಿದೆ<ph name="END_DEEMPHASIZED" /></translation> -<translation id="4095146165863963773">ಅಪ್ಲಿಕೇಶನ್ ಡೇಟಾ ಅಳಿಸುವುದೇ?</translation> +<translation id="4095146165863963773">ಆ್ಯಪ್ ಡೇಟಾ ಅಳಿಸಬೇಕೇ?</translation> <translation id="4095189195365058471">ನಂತರ ಓದಿ <ph name="BEGIN_NEW" />ಹೊಸತು<ph name="END_NEW" /></translation> <translation id="4099578267706723511">Google ಗೆ ಬಳಕೆಯ ಅಂಕಿಅಂಶಗಳು ಮತ್ತು ಕ್ರ್ಯಾಶ್ ವರದಿಗಳನ್ನು ಕಳುಹಿಸುವ ಮೂಲಕ Chrome ಅನ್ನು ಉತ್ತಮಗೊಳಿಸಲು ಸಹಾಯ ಮಾಡಿ.</translation> <translation id="410351446219883937">ಆಟೋಪ್ಲೇ</translation> @@ -684,6 +684,7 @@ <translation id="545042621069398927">ನಿಮ್ಮ ಡೌನ್ಲೋಡ್ನ ವೇಗವನ್ನು ಹೆಚ್ಚಿಸಲಾಗುತ್ತಿದೆ.</translation> <translation id="5454166040603940656"><ph name="PROVIDER" /> ಜೊತೆಗೆ</translation> <translation id="5456381639095306749">ಪುಟ ಡೌನ್ಲೋಡ್ ಮಾಡಿ</translation> +<translation id="5458366071038729214">ನೀವು ಫಾಲೋ ಮಾಡುವ ಸೈಟ್ಗಳನ್ನು ಇಲ್ಲಿ ಹುಡುಕಬಹುದು</translation> <translation id="548278423535722844">ನಕ್ಷೆಗಳ ಅಪ್ಲಿಕೇಶನ್ನಲ್ಲಿ ತೆರೆಯಿರಿ</translation> <translation id="5483197086164197190">Chrome ಅನ್ನು ನ್ಯಾವಿಗೇಟ್ ಮಾಡಿ</translation> <translation id="5487521232677179737">ಡೇಟಾ ತೆರವುಗೊಳಿಸು</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb index b082edb..49896d634 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">다운로드 속도 향상</translation> <translation id="5454166040603940656">제공업체: <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">다운로드 페이지</translation> +<translation id="5458366071038729214">팔로우하는 사이트가 여기에 표시됩니다</translation> <translation id="548278423535722844">지도 앱에서 열기</translation> <translation id="5483197086164197190">Chrome 탐색하기</translation> <translation id="5487521232677179737">인터넷 사용 기록 삭제</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb index 4149477a..af6c15d 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Файл ылдам жүктөлүп алынууда.</translation> <translation id="5454166040603940656"><ph name="PROVIDER" /> менен</translation> <translation id="5456381639095306749">Баракты жүктөп алуу</translation> +<translation id="5458366071038729214">Жазылган сайттарды ушул жерден табасыз</translation> <translation id="548278423535722844">Карталар колдонмосунан ачыңыз</translation> <translation id="5483197086164197190">Chrome'до чабыттаңыз</translation> <translation id="5487521232677179737">Дайын-даректерди өчүрүү</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb index 8c7029b..ae2192eb 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">ກຳລັງເພີ່ມຄວາມໄວໃຫ້ການດາວໂຫຼດຂອງທ່ານ.</translation> <translation id="5454166040603940656">ກັບ <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">ໜ້າການດາວໂຫຼດ</translation> +<translation id="5458366071038729214">ທ່ານຈະພົບເວັບໄຊທີ່ທ່ານຕິດຕາມຢູ່ບ່ອນນີ້</translation> <translation id="548278423535722844">ເປີດໃນແອັບແຜນທີ່</translation> <translation id="5483197086164197190">ໄປຍັງສ່ວນຕ່າງໆຂອງ Chrome</translation> <translation id="5487521232677179737">ລຶບລ້າງຂໍ້ມູນ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb index e9bfd83..e2994249 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Paspartinamas atsisiuntimas.</translation> <translation id="5454166040603940656">naudojant <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Atsisiųsti puslapį</translation> +<translation id="5458366071038729214">Stebimas svetaines rasite čia</translation> <translation id="548278423535722844">Atidaryti Žemėlapių programoje</translation> <translation id="5483197086164197190">Naršyti „Chrome“</translation> <translation id="5487521232677179737">Išvalyti duomenis</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb index 27c68cd..cb3a8c22 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Lejupielāde tiek paātrināta.</translation> <translation id="5454166040603940656">izmantojot <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Lejupielādēt lapu</translation> +<translation id="5458366071038729214">Šeit būs redzamas vietnes, kurām sekojat</translation> <translation id="548278423535722844">Atvērt karšu lietotnē</translation> <translation id="5483197086164197190">Navigācija pārlūkā Chrome</translation> <translation id="5487521232677179737">Notīrīt datus</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb index 0d8579f..44d53174 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Го забрзуваме вашето преземање.</translation> <translation id="5454166040603940656">со <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Преземете ја страницата</translation> +<translation id="5458366071038729214">Сајтовите што ги следите ќе ги најдете тука</translation> <translation id="548278423535722844">Отвори во апликацијата „Карти“</translation> <translation id="5483197086164197190">Навигација во Chrome</translation> <translation id="5487521232677179737">Избриши податоци</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb index 845391c2..e88d788 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">तुमच्या डाउनलोडचा वेग वाढवत आहे.</translation> <translation id="5454166040603940656"><ph name="PROVIDER" /> सह</translation> <translation id="5456381639095306749">पेज डाउनलोड करा</translation> +<translation id="5458366071038729214">तुम्ही फॉलो करत असलेल्या साइट तुम्हाला येथे दिसतील</translation> <translation id="548278423535722844">नकाशे ॲपमध्ये उघडा</translation> <translation id="5483197086164197190">Chrome नेव्हिगेट करा</translation> <translation id="5487521232677179737">डेटा साफ करा</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb index d146d01..d9bd29a 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Mempercepatkan muat turun anda.</translation> <translation id="5454166040603940656">dengan <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Muat turun halaman</translation> +<translation id="5458366071038729214">Anda akan menemukan laman yang anda ikuti di sini</translation> <translation id="548278423535722844">Buka dalam apl peta</translation> <translation id="5483197086164197190">Navigasi Chrome</translation> <translation id="5487521232677179737">Kosongkan data</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb index 03fa68c..cb47e89 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">သင်၏ ဒေါင်းလုဒ်ကို အရှိန်မြှင့်တင်ခြင်း။</translation> <translation id="5454166040603940656"><ph name="PROVIDER" /> ဖြင့်</translation> <translation id="5456381639095306749">ဒေါင်းလုဒ်စာမျက်နှာ</translation> +<translation id="5458366071038729214">သင်လိုက်ကြည့်သော ဝဘ်ဆိုက်များကို ဤနေရာတွင် တွေ့ရပါမည်</translation> <translation id="548278423535722844">မြေပုံအက်ပ်တွင် ဖွင့်ပါ</translation> <translation id="5483197086164197190">Navigate Chrome</translation> <translation id="5487521232677179737">ဒေတာများကို ရှင်းလင်းပါ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb index e6fb235..671c321 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Je download wordt versneld.</translation> <translation id="5454166040603940656">met <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Pagina downloaden</translation> +<translation id="5458366071038729214">Hier vind je de sites die je volgt</translation> <translation id="548278423535722844">Openen in app voor passen</translation> <translation id="5483197086164197190">Navigeren in Chrome</translation> <translation id="5487521232677179737">Gegevens wissen</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb index 8dce969..a20928d 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Øker hastigheten på nedlastingen.</translation> <translation id="5454166040603940656">med <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Last ned siden</translation> +<translation id="5458366071038729214">Her finner du nettsteder du følger</translation> <translation id="548278423535722844">Åpne i en kartapp</translation> <translation id="5483197086164197190">Naviger i Chrome</translation> <translation id="5487521232677179737">Slett data</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb index 9ab0358b..7585102f 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Przyspieszam pobieranie.</translation> <translation id="5454166040603940656">za pomocą <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Pobierz stronę</translation> +<translation id="5458366071038729214">Tu znajdziesz witryny, które obserwujesz</translation> <translation id="548278423535722844">Otwórz w aplikacji z mapami</translation> <translation id="5483197086164197190">Poruszanie się w Chrome</translation> <translation id="5487521232677179737">Wyczyść dane</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb index 2d676b1..46080ff 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
@@ -685,6 +685,7 @@ <translation id="545042621069398927">Acelerando seu download.</translation> <translation id="5454166040603940656">com <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Fazer o download da página</translation> +<translation id="5458366071038729214">Você verá os sites que você seguir aqui</translation> <translation id="548278423535722844">Abrir no app de mapa</translation> <translation id="5483197086164197190">Navegar no Chrome</translation> <translation id="5487521232677179737">Limpar dados</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb index dddbe1c..58f064c 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">A acelerar a transferência…</translation> <translation id="5454166040603940656">com <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Transferir página</translation> +<translation id="5458366071038729214">Encontrará os sites que segue aqui</translation> <translation id="548278423535722844">Abrir na aplicação de mapas</translation> <translation id="5483197086164197190">Navegue no Chrome</translation> <translation id="5487521232677179737">Limpar dados</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb index 0555bb8..c7c8c7c0 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Se accelerează descărcarea.</translation> <translation id="5454166040603940656">cu <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Descarcă pagina</translation> +<translation id="5458366071038729214">Aici vei vedea site-urile pe care le urmărești</translation> <translation id="548278423535722844">Deschide în aplicația Maps</translation> <translation id="5483197086164197190">Navigarea în Chrome</translation> <translation id="5487521232677179737">Șterge datele</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb index f4d2fdcd..6548584f 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Ускорение скачивания…</translation> <translation id="5454166040603940656">с помощью <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Скачать страницу</translation> +<translation id="5458366071038729214">Здесь будут сайты, на которые вы подпишетесь.</translation> <translation id="548278423535722844">Показать на карте</translation> <translation id="5483197086164197190">Navigate Chrome</translation> <translation id="5487521232677179737">Удалить данные</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb index f266cf27..fe460e3 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Sťahovanie sa zrýchľuje.</translation> <translation id="5454166040603940656">s poskytovateľom <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Stránka sťahovania</translation> +<translation id="5458366071038729214">Tu nájdete weby, ktoré sledujete</translation> <translation id="548278423535722844">Otvorte v aplikácii pre mapy</translation> <translation id="5483197086164197190">Navigácia v Chrome</translation> <translation id="5487521232677179737">Vymazať dáta</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb index 487f9f96..cef7369 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Pospeševanje prenosa.</translation> <translation id="5454166040603940656">pri ponudniku <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Prenos strani</translation> +<translation id="5458366071038729214">Tukaj boste našli spletna mesta, ki jih spremljate.</translation> <translation id="548278423535722844">Odpiranje v aplikaciji z zemljevidi</translation> <translation id="5483197086164197190">Premikanju po Chromu</translation> <translation id="5487521232677179737">Izbriši podatke</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb index e253fce..eedd955 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Preuzimanje se ubrzava.</translation> <translation id="5454166040603940656">sa dobavljačem <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Preuzmi stranicu</translation> +<translation id="5458366071038729214">Ovde ćete pronaći sajtove koje pratite</translation> <translation id="548278423535722844">Otvorite u aplikaciji za mape</translation> <translation id="5483197086164197190">Krećite se po Chrome-u</translation> <translation id="5487521232677179737">Obriši podatke</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb index 705f3bbe..09d3293e 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Преузимање се убрзава.</translation> <translation id="5454166040603940656">са добављачем <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Преузми страницу</translation> +<translation id="5458366071038729214">Овде ћете пронаћи сајтове које пратите</translation> <translation id="548278423535722844">Отворите у апликацији за мапе</translation> <translation id="5483197086164197190">Крећите се по Chrome-у</translation> <translation id="5487521232677179737">Обриши податке</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb index eb28ebd..4feaa64 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Nedladdningen görs snabbare.</translation> <translation id="5454166040603940656">med <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Ladda ned sida</translation> +<translation id="5458366071038729214">Här hittar du webbplatser som du följer</translation> <translation id="548278423535722844">Öppna i kartapp</translation> <translation id="5483197086164197190">Navigera i Chrome</translation> <translation id="5487521232677179737">Rensa data</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb index 77c9501b..1bfc00c 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Inaongeza kasi ya kupakua faili yako.</translation> <translation id="5454166040603940656">na <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Pakua ukurasa</translation> +<translation id="5458366071038729214">Utapata tovuti unazofuatilia hapa</translation> <translation id="548278423535722844">Fungua katika programu ya ramani</translation> <translation id="5483197086164197190">Kutumia Chrome</translation> <translation id="5487521232677179737">Futa data</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb index b5495d2..29eb281 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">กำลังเพิ่มความเร็วในการดาวน์โหลด</translation> <translation id="5454166040603940656">กับ <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">ดาวน์โหลดหน้า</translation> +<translation id="5458366071038729214">คุณจะเห็นเว็บไซต์ที่ติดตามที่นี่</translation> <translation id="548278423535722844">เปิดในแอปแผนที่</translation> <translation id="5483197086164197190">ไปยังส่วนต่างๆ ของ Chrome</translation> <translation id="5487521232677179737">ล้างข้อมูล</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb index 7c7e517..8c2d4bc 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">İndirme işleminiz hızlandırılıyor.</translation> <translation id="5454166040603940656"><ph name="PROVIDER" /> ile</translation> <translation id="5456381639095306749">Sayfayı indir</translation> +<translation id="5458366071038729214">Takip ettiğiniz siteleri burada bulursunuz</translation> <translation id="548278423535722844">Haritalar uygulamasında aç</translation> <translation id="5483197086164197190">Chrome'da gezinme</translation> <translation id="5487521232677179737">Verileri temizle</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb index 45b9b5ca..13135ffb 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Прискорюється завантаження.</translation> <translation id="5454166040603940656">за допомогою <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Завантажити сторінку</translation> +<translation id="5458366071038729214">Тут відображатимуться сайти, на які ви підпишетеся</translation> <translation id="548278423535722844">Відкрити в додатку Карти</translation> <translation id="5483197086164197190">Навігація в Chrome</translation> <translation id="5487521232677179737">Видалити дані</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb index d921b9f..8d979603 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Đang tăng tốc độ tải xuống.</translation> <translation id="5454166040603940656">với <ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Tải trang xuống</translation> +<translation id="5458366071038729214">Bạn sẽ thấy các trang web mình theo dõi tại đây</translation> <translation id="548278423535722844">Mở trong ứng dụng bản đồ</translation> <translation id="5483197086164197190">Thao tác trong Chrome</translation> <translation id="5487521232677179737">Xóa dữ liệu</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb index 62c089b..9a8d832 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">正在加快您的下载速度。</translation> <translation id="5454166040603940656">提供方:<ph name="PROVIDER" /></translation> <translation id="5456381639095306749">下载网页</translation> +<translation id="5458366071038729214">您会在此处看到自己已关注的网站</translation> <translation id="548278423535722844">在地图应用中打开</translation> <translation id="5483197086164197190">探索 Chrome</translation> <translation id="5487521232677179737">清除数据</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb index 27d37c8..b7fc6d2e 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">正在加快下載速度。</translation> <translation id="5454166040603940656">提供者:<ph name="PROVIDER" /></translation> <translation id="5456381639095306749">下載網頁</translation> +<translation id="5458366071038729214">這裡會顯示你追蹤的網站</translation> <translation id="548278423535722844">在地圖應用程式中開啟</translation> <translation id="5483197086164197190">Navigate Chrome</translation> <translation id="5487521232677179737">清除資料</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb index a9eb2dae..91d431a 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb
@@ -684,6 +684,7 @@ <translation id="545042621069398927">Isheshisa ukulanda kwakho.</translation> <translation id="5454166040603940656">ne-<ph name="PROVIDER" /></translation> <translation id="5456381639095306749">Landa ikhasi</translation> +<translation id="5458366071038729214">Uzothola amasayithi owalandelayo lapha</translation> <translation id="548278423535722844">Uhlelo lokusebenza lokuvula kumamephu</translation> <translation id="5483197086164197190">Zulazula ku-Chrome</translation> <translation id="5487521232677179737">Sula idatha</translation>
diff --git a/chrome/browser/ui/cocoa/history_menu_bridge.mm b/chrome/browser/ui/cocoa/history_menu_bridge.mm index d00e10ee..d5342810 100644 --- a/chrome/browser/ui/cocoa/history_menu_bridge.mm +++ b/chrome/browser/ui/cocoa/history_menu_bridge.mm
@@ -21,6 +21,7 @@ #include "chrome/browser/themes/theme_service.h" #import "chrome/browser/ui/cocoa/history_menu_cocoa_controller.h" #include "chrome/browser/ui/tabs/tab_group_theme.h" +#include "chrome/common/chrome_features.h" #include "chrome/grit/generated_resources.h" #include "components/grit/components_scaled_resources.h" #include "components/tab_groups/tab_group_visual_data.h" @@ -574,6 +575,12 @@ } bool HistoryMenuBridge::ShouldMenuItemBeVisible(NSMenuItem* item) { + if (!base::FeatureList::IsEnabled( + features::kUpdateHistoryEntryPointsInIncognito)) { + return [item tag] != kIncognitoDisclaimerLabel && + [item tag] != kIncognitoDisclaimerSeparator; + } + int tag = [item tag]; switch (tag) { // The common menu items for both profiles
diff --git a/chrome/browser/ui/hung_renderer/hung_renderer_interactive_uitest.cc b/chrome/browser/ui/hung_renderer/hung_renderer_interactive_uitest.cc index 2d3f190..ac42ee1 100644 --- a/chrome/browser/ui/hung_renderer/hung_renderer_interactive_uitest.cc +++ b/chrome/browser/ui/hung_renderer/hung_renderer_interactive_uitest.cc
@@ -9,7 +9,7 @@ #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/tab_dialogs.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" -#include "chrome/browser/ui/test/test_browser_dialog.h" +#include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/interactive_test_utils.h" #include "chrome/test/base/ui_test_utils.h" #include "content/public/browser/render_view_host.h"
diff --git a/chrome/browser/ui/tab_ui_helper.cc b/chrome/browser/ui/tab_ui_helper.cc index eeb80bc..1a848cc 100644 --- a/chrome/browser/ui/tab_ui_helper.cc +++ b/chrome/browser/ui/tab_ui_helper.cc
@@ -93,7 +93,8 @@ void TabUIHelper::DidStopLoading() { // Reset the properties after the initial navigation finishes loading, so that - // latter navigations are not affected. + // latter navigations are not affected. Note that the prerendered page won't + // reset the properties because DidStopLoading is not called for prerendering. is_navigation_delayed_ = false; created_by_session_restore_ = false; tab_ui_data_.reset();
diff --git a/chrome/browser/ui/tab_ui_helper.h b/chrome/browser/ui/tab_ui_helper.h index 3d6e8c2..6e5c4cf 100644 --- a/chrome/browser/ui/tab_ui_helper.h +++ b/chrome/browser/ui/tab_ui_helper.h
@@ -51,6 +51,9 @@ void set_created_by_session_restore(bool created_by_session_restore) { created_by_session_restore_ = created_by_session_restore; } + bool is_created_by_session_restore_for_testing() { + return created_by_session_restore_; + } private: friend class content::WebContentsUserData<TabUIHelper>;
diff --git a/chrome/browser/ui/tab_ui_helper_browsertest.cc b/chrome/browser/ui/tab_ui_helper_browsertest.cc new file mode 100644 index 0000000..2fbd03d --- /dev/null +++ b/chrome/browser/ui/tab_ui_helper_browsertest.cc
@@ -0,0 +1,89 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/tab_ui_helper.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/base/ui_test_utils.h" +#include "content/public/browser/web_contents.h" +#include "content/public/test/browser_test.h" +#include "content/public/test/prerender_test_util.h" +#include "net/dns/mock_host_resolver.h" +#include "net/test/embedded_test_server/embedded_test_server.h" +#include "third_party/blink/public/common/features.h" + +class TabUIHelperWithPrerenderingTest : public InProcessBrowserTest { + public: + TabUIHelperWithPrerenderingTest() + : prerender_test_helper_(base::BindRepeating( + &TabUIHelperWithPrerenderingTest::GetWebContents, + base::Unretained(this))) {} + ~TabUIHelperWithPrerenderingTest() override = default; + TabUIHelperWithPrerenderingTest(const TabUIHelperWithPrerenderingTest&) = + delete; + TabUIHelperWithPrerenderingTest& operator=( + const TabUIHelperWithPrerenderingTest&) = delete; + + void SetUp() override { + feature_list_.InitAndEnableFeature(blink::features::kPrerender2); + InProcessBrowserTest::SetUp(); + } + + void SetUpOnMainThread() override { + prerender_test_helper_.SetUpOnMainThread(embedded_test_server()); + host_resolver()->AddRule("*", "127.0.0.1"); + ASSERT_TRUE(embedded_test_server()->Start()); + } + + content::test::PrerenderTestHelper& prerender_test_helper() { + return prerender_test_helper_; + } + + content::WebContents* GetWebContents() { + return browser()->tab_strip_model()->GetActiveWebContents(); + } + + private: + content::test::PrerenderTestHelper prerender_test_helper_; + base::test::ScopedFeatureList feature_list_; +}; + +IN_PROC_BROWSER_TEST_F(TabUIHelperWithPrerenderingTest, + ShouldNotAffectTabUIHelperOnPrerendering) { + GURL initial_url = embedded_test_server()->GetURL("/empty.html"); + GURL prerender_url = + embedded_test_server()->GetURL("/favicon/title2_with_favicon.html"); + ASSERT_NE(ui_test_utils::NavigateToURL(browser(), initial_url), nullptr); + + TabUIHelper* tab_ui_helper = TabUIHelper::FromWebContents(GetWebContents()); + std::u16string primary_title = tab_ui_helper->GetTitle(); + gfx::Image primary_favicon = tab_ui_helper->GetFavicon(); + bool primary_should_hide_throbber = tab_ui_helper->ShouldHideThrobber(); + + // Set |create_by_session_restore_| to true to check if the value is changed + // after prerendering. It should not be changed because DidStopLoading is not + // called during the prerendering. + tab_ui_helper->set_created_by_session_restore(true); + + // Prerender to another site. + prerender_test_helper().AddPrerender(prerender_url); + + // Check if the prerendering doesn't affect the returned values of + // TabUIHelper. + EXPECT_EQ(primary_title, tab_ui_helper->GetTitle()); + EXPECT_EQ(primary_favicon, tab_ui_helper->GetFavicon()); + EXPECT_EQ(primary_should_hide_throbber, tab_ui_helper->ShouldHideThrobber()); + // is_created_by_session_restore_for_testing should return true because + // DidStopLoading is not called. + EXPECT_TRUE(tab_ui_helper->is_created_by_session_restore_for_testing()); + + // Activate the prerendered page. + prerender_test_helper().NavigatePrimaryPage(prerender_url); + + // Check if new values are different from the previous primary values after + // activating the prerendered page. + EXPECT_NE(primary_title, tab_ui_helper->GetTitle()); + EXPECT_FALSE(primary_favicon == tab_ui_helper->GetFavicon()); + EXPECT_FALSE(tab_ui_helper->ShouldHideThrobber()); +}
diff --git a/chrome/browser/ui/webui/chromeos/login/active_directory_password_change_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/active_directory_password_change_screen_handler.h index 8a978fee..ba724c6 100644 --- a/chrome/browser/ui/webui/chromeos/login/active_directory_password_change_screen_handler.h +++ b/chrome/browser/ui/webui/chromeos/login/active_directory_password_change_screen_handler.h
@@ -44,7 +44,7 @@ public: using TView = ActiveDirectoryPasswordChangeView; - ActiveDirectoryPasswordChangeScreenHandler( + explicit ActiveDirectoryPasswordChangeScreenHandler( JSCallsContainer* js_calls_container); ~ActiveDirectoryPasswordChangeScreenHandler() override;
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index 8e2146b..ddef0f6 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-master-1622527178-9a5352b7412ad6ef11456de74f66a37dcaa3308d.profdata +chrome-win32-master-1622548311-ca747ddbe3d5cda88542993ec1ab0665dd902079.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index a2d677e8..aa2ea51 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-master-1622527178-f7f002d24b6ce32cbf736f0bf14b7211500ab8a5.profdata +chrome-win64-master-1622548311-634ae7aa517bfdcc37267c34eaf23279f6ac6ae5.profdata
diff --git a/chrome/common/extensions/api/speech/tts_engine_manifest_handler.cc b/chrome/common/extensions/api/speech/tts_engine_manifest_handler.cc index 0efd7e50..3dfe84c 100644 --- a/chrome/common/extensions/api/speech/tts_engine_manifest_handler.cc +++ b/chrome/common/extensions/api/speech/tts_engine_manifest_handler.cc
@@ -9,11 +9,13 @@ #include <memory> #include "base/strings/string_number_conversions.h" +#include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "base/values.h" #include "extensions/common/error_utils.h" #include "extensions/common/manifest.h" #include "extensions/common/manifest_constants.h" +#include "media/base/limits.h" #include "ui/base/l10n/l10n_util.h" namespace extensions { @@ -26,10 +28,10 @@ TtsVoice::TtsVoice(const TtsVoice& other) = default; -TtsVoice::~TtsVoice() {} +TtsVoice::~TtsVoice() = default; -TtsVoices::TtsVoices() {} -TtsVoices::~TtsVoices() {} +TtsVoices::TtsVoices() = default; +TtsVoices::~TtsVoices() = default; // static bool TtsVoices::Parse(const base::ListValue* tts_voices, @@ -116,14 +118,20 @@ // static const std::vector<TtsVoice>* TtsVoices::GetTtsVoices( const Extension* extension) { - TtsVoices* info = - static_cast<TtsVoices*>(extension->GetManifestData(keys::kTtsVoices)); - return info ? &info->voices : nullptr; + const TtsVoices* engine = TtsVoices::GetTtsEngineInfo(extension); + return engine ? &engine->voices : nullptr; } -TtsEngineManifestHandler::TtsEngineManifestHandler() {} +// static +const TtsVoices* TtsVoices::GetTtsEngineInfo(const Extension* extension) { + TtsVoices* info = + static_cast<TtsVoices*>(extension->GetManifestData(keys::kTtsVoices)); + return info; +} -TtsEngineManifestHandler::~TtsEngineManifestHandler() {} +TtsEngineManifestHandler::TtsEngineManifestHandler() = default; + +TtsEngineManifestHandler::~TtsEngineManifestHandler() = default; bool TtsEngineManifestHandler::Parse(Extension* extension, std::u16string* error) { @@ -146,6 +154,52 @@ if (!TtsVoices::Parse(tts_voices, info.get(), error, extension)) return false; + const base::Value* tts_engine_sample_rate = + tts_dict->FindPath(keys::kTtsEngineSampleRate); + if (tts_engine_sample_rate) { + if (!tts_engine_sample_rate->GetIfInt()) { + *error = base::ASCIIToUTF16(errors::kInvalidTtsSampleRateFormat); + return false; + } + + info->sample_rate = tts_engine_sample_rate->GetInt(); + if (info->sample_rate < media::limits::kMinSampleRate || + info->sample_rate > media::limits::kMaxSampleRate) { + *error = base::ASCIIToUTF16(base::StringPrintf( + errors::kInvalidTtsSampleRateRange, media::limits::kMinSampleRate, + media::limits::kMaxSampleRate)); + return false; + } + } + + const base::Value* tts_engine_buffer_size = + tts_dict->FindPath(keys::kTtsEngineBufferSize); + if (tts_engine_buffer_size) { + if (!tts_engine_buffer_size->GetIfInt()) { + *error = base::ASCIIToUTF16(errors::kInvalidTtsBufferSizeFormat); + return false; + } + + // The limits of the buffer size should match those of those found in + // AudioParameters::IsValid (as should the sample rate limits above). + constexpr int kMinBufferSize = 1; + info->buffer_size = tts_engine_buffer_size->GetInt(); + if (info->buffer_size < kMinBufferSize || + info->buffer_size > media::limits::kMaxSamplesPerPacket) { + *error = base::ASCIIToUTF16( + base::StringPrintf(errors::kInvalidTtsBufferSizeRange, kMinBufferSize, + media::limits::kMaxSamplesPerPacket)); + return false; + } + } + + if ((!tts_engine_sample_rate && tts_engine_buffer_size) || + (tts_engine_sample_rate && !tts_engine_buffer_size)) { + *error = + base::ASCIIToUTF16(errors::kInvalidTtsRequiresSampleRateAndBufferSize); + return false; + } + extension->SetManifestData(keys::kTtsVoices, std::move(info)); return true; }
diff --git a/chrome/common/extensions/api/speech/tts_engine_manifest_handler.h b/chrome/common/extensions/api/speech/tts_engine_manifest_handler.h index 7b3950c..b5d15eda 100644 --- a/chrome/common/extensions/api/speech/tts_engine_manifest_handler.h +++ b/chrome/common/extensions/api/speech/tts_engine_manifest_handler.h
@@ -27,6 +27,8 @@ std::set<std::string> event_types; }; +// TODO(dtseng): Rename this to TtsEngine, as it encapsulates all data regarding +// an engine, not just its voices. struct TtsVoices : public Extension::ManifestData { TtsVoices(); ~TtsVoices() override; @@ -37,7 +39,14 @@ std::vector<extensions::TtsVoice> voices; + // The sample rate at which this engine encodes its audio data. + absl::optional<int> sample_rate; + + // The number of samples in one audio buffer. + absl::optional<int> buffer_size; + static const std::vector<TtsVoice>* GetTtsVoices(const Extension* extension); + static const TtsVoices* GetTtsEngineInfo(const Extension* extension); }; // Parses the "tts_engine" manifest key.
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_ru.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_ru.xtb index af8f2db..5308d3f4 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_ru.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_ru.xtb
@@ -10,7 +10,7 @@ <translation id="2844349213149998955">На этом устройстве запрещен вход с личным аккаунтом. Войдите в рабочий аккаунт.</translation> <translation id="3217145568844727893">Если вы продолжите работу, не вводя текущий пароль для Windows, данные на устройстве могут быть безвозвратно утеряны.</translation> <translation id="3306357053520292004">Указанный аккаунт уже используется на этом компьютере. Выполните вход, используя другой аккаунт.</translation> -<translation id="3355053591933237049">Убедитесь, что устройство подключено к Интернету, и повторите попытку.</translation> +<translation id="3355053591933237049">Убедитесь, что устройство подключено к интернету, и повторите попытку.</translation> <translation id="3926852373333893095">Вход разрешен только пользователям G Suite Enterprise.</translation> <translation id="399130515869721714">Не удалось загрузить экран входа в аккаунт Google из-за проблемы, связанной с установкой Chrome. Обратитесь к администратору.</translation> <translation id="4057329986137569701">Произошла внутренняя ошибка.</translation>
diff --git a/chrome/renderer/autofill/form_control_click_detection_browsertest.cc b/chrome/renderer/autofill/form_control_click_detection_browsertest.cc index d81433d1..b684ece 100644 --- a/chrome/renderer/autofill/form_control_click_detection_browsertest.cc +++ b/chrome/renderer/autofill/form_control_click_detection_browsertest.cc
@@ -23,7 +23,7 @@ void SetUp() override { ChromeRenderViewTest::SetUp(); // Must be set before loading HTML. - view_->GetWebView()->SetDefaultPageScaleLimits(1, 4); + web_view_->SetDefaultPageScaleLimits(1, 4); LoadHTML( "<form>" @@ -170,8 +170,8 @@ TEST_F(FormControlClickDetectionTest, ScaledTextareaClicked) { ClearAutofillAgentTestState(); EXPECT_NE(textarea_, textarea_.GetDocument().FocusedElement()); - view_->GetWebView()->SetPageScaleFactor(3); - view_->GetWebView()->SetVisualViewportOffset(gfx::PointF(50, 50)); + web_view_->SetPageScaleFactor(3); + web_view_->SetVisualViewportOffset(gfx::PointF(50, 50)); // Click textarea_1. SimulatePointClick(gfx::Point(30, 30)); @@ -183,8 +183,8 @@ TEST_F(FormControlClickDetectionTest, ScaledTextareaTapped) { ClearAutofillAgentTestState(); EXPECT_NE(textarea_, textarea_.GetDocument().FocusedElement()); - view_->GetWebView()->SetPageScaleFactor(3); - view_->GetWebView()->SetVisualViewportOffset(gfx::PointF(50, 50)); + web_view_->SetPageScaleFactor(3); + web_view_->SetVisualViewportOffset(gfx::PointF(50, 50)); // Tap textarea_1. SimulateRectTap(gfx::Rect(30, 30, 30, 30));
diff --git a/chrome/renderer/searchbox/searchbox_extension.cc b/chrome/renderer/searchbox/searchbox_extension.cc index 718bb9fd..cdf5bee 100644 --- a/chrome/renderer/searchbox/searchbox_extension.cc +++ b/chrome/renderer/searchbox/searchbox_extension.cc
@@ -815,7 +815,7 @@ // This corresponds to "window.devicePixelRatio" in JavaScript. float zoom_factor = - blink::PageZoomLevelToZoomFactor(render_view->GetWebView()->ZoomLevel()); + blink::PageZoomLevelToZoomFactor(render_frame->GetWebView()->ZoomLevel()); float device_pixel_ratio = render_frame->GetDeviceScaleFactor() * zoom_factor; int render_view_id = render_view->GetRoutingID();
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 304ce09..40a3838 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -1812,6 +1812,7 @@ "../browser/ui/sync/profile_signin_confirmation_helper_browsertest.cc", "../browser/ui/tab_modal_confirm_dialog_browsertest.cc", "../browser/ui/tab_modal_confirm_dialog_browsertest.h", + "../browser/ui/tab_ui_helper_browsertest.cc", "../browser/ui/tabs/pinned_tab_service_browsertest.cc", "../browser/ui/test/browser_ui_browsertest.cc", "../browser/ui/test/test_browser_dialog.cc", @@ -7229,6 +7230,7 @@ "../browser/extensions/extension_crash_recovery_browsertest.cc", "../browser/extensions/extension_fullscreen_apitest.cc", "../browser/extensions/extension_function_test_utils.cc", + "../browser/extensions/extension_function_test_utils.h", "../browser/extensions/extension_keybinding_apitest.cc", "../browser/extensions/omnibox_focus_interactive_test.cc", "../browser/extensions/window_open_interactive_apitest.cc", @@ -7331,23 +7333,51 @@ "//chrome:packed_resources", "//chrome:resources", "//chrome:strings", + "//chrome/app:command_ids", "//chrome/browser", + "//chrome/browser:unexpire_flags", "//chrome/browser/devtools", "//chrome/browser/devtools:test_support", "//chrome/browser/resource_coordinator:tab_metrics_event_proto", + "//chrome/browser/resource_coordinator/tab_ranker", "//chrome/browser/web_applications:web_applications_test_support", + "//chrome/common:version_header", "//chrome/renderer", + "//components/back_forward_cache", + "//components/blocked_content", + "//components/bookmarks/browser", + "//components/bookmarks/common", + "//components/constrained_window", + "//components/content_settings/browser", + "//components/embedder_support", "//components/enterprise:test_support", + "//components/feature_engagement/public", "//components/feature_engagement/test:test_support", + "//components/flags_ui", + "//components/fullscreen_control", + "//components/infobars/content", + "//components/javascript_dialogs", "//components/keep_alive_registry", + "//components/live_caption", + "//components/media_message_center", "//components/media_router/browser:test_support", + "//components/metrics:content", + "//components/reading_list/core", + "//components/reading_list/features:flags", + "//components/renderer_context_menu", "//components/resources", + "//components/security_interstitials/content:security_interstitial_page", + "//components/shared_highlighting/core/common", + "//components/site_engagement/content", + "//components/soda:constants", "//components/sync", "//components/sync:test_support_model", + "//components/tab_groups", "//components/translate/content/browser:test_support", "//components/ukm:test_support", "//components/ukm:ukm_test_helper", "//content/app/resources", + "//content/test:browsertest_support", "//content/test:test_support", "//crypto:platform", "//crypto:test_support", @@ -7358,6 +7388,7 @@ "//net", "//net:net_resources", "//net:test_support", + "//ppapi/shared_impl:test_support", "//services/metrics/public/cpp:ukm_builders", "//skia", "//testing/gmock", @@ -7368,7 +7399,12 @@ "//ui/base:base_interactive_ui_tests", "//ui/base:test_support", "//ui/base/clipboard:clipboard_test_support", + "//ui/display:display_manager_test_api", + "//ui/display:test_support", + "//ui/display/manager", "//ui/events:events_interactive_ui_tests", + "//ui/events:gesture_detection", + "//ui/events:test_support", "//ui/web_dialogs:test_support", ] @@ -7391,6 +7427,14 @@ data_deps += [ "//chrome:packed_resources" ] } + if (is_linux || is_chromeos) { + deps += [ "//ui/platform_window/common" ] + } + + if (use_ozone) { + deps += [ "//ui/ozone" ] + } + if (use_aura) { sources += [ "../browser/ui/aura/accessibility/automation_manager_aura_browsertest.cc", @@ -7398,6 +7442,7 @@ ] deps += [ "//ui/aura:aura_interactive_ui_tests", + "//ui/aura:test_support", "//ui/base/dragdrop:types", "//ui/base/dragdrop/mojom", ] @@ -7508,6 +7553,7 @@ "//chrome/browser/chromeos:test_support", "//chrome/browser/media/router:test_support", "//chromeos/dbus", + "//chromeos/login/auth", "//chromeos/ui/frame:test_support", ] sources += [ @@ -7525,10 +7571,16 @@ ] } - # These tests are not applicable on Chrome OS - Ash and Lacros. if (is_chromeos_ash || is_chromeos_lacros) { + # These tests are not applicable on Chrome OS - Ash and Lacros. sources -= [ "../browser/ui/signin_view_controller_interactive_uitest.cc" ] + + deps += [ + "//chromeos/ui/base", + "//chromeos/ui/frame", + "//chromeos/ui/frame:test_support", + ] } if (is_chromeos_lacros) { @@ -7603,6 +7655,12 @@ "//chrome", "//chrome:chrome_framework", ] + + deps += [ + "//chrome/browser/apps/app_shim", + "//chrome/browser/web_applications/extensions", + "//components/spellcheck:buildflags", + ] } if (enable_downgrade_processing) {
diff --git a/chrome/test/data/extensions/api_test/tts_engine/on_speak_with_audio_stream_using_audio_options/manifest.json b/chrome/test/data/extensions/api_test/tts_engine/on_speak_with_audio_stream_using_audio_options/manifest.json new file mode 100644 index 0000000..b9010d74 --- /dev/null +++ b/chrome/test/data/extensions/api_test/tts_engine/on_speak_with_audio_stream_using_audio_options/manifest.json
@@ -0,0 +1,22 @@ +{ + "name": "chrome.ttsEngine", + "version": "0.1", + "manifest_version": 2, + "description": "browser test for chrome.ttsEngine.onSpeakWithAudioBufferStream", + "background": { + "scripts": ["test.js"] + }, + "tts_engine": { + "sample_rate": 48000, + "buffer_size": 128, + "voices": [ + { + "voice_name": "Zach", + "lang": "en-US", + "event_types": [ "start", "end", "word", "error" ] + } + ] + }, + "permissions": ["tts", "ttsEngine"], + "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtDfX9dHNh948bt00YhZBm3P6E5QLaOt+v8kXVtibQfiPtOD2FTScB/f0wX/EQWVO7BkaSOsRkTPcPIgocyMPYr2FLgqGLFlYT9nQpKJZUFNF5oJ5rG6Nv7ppf4zEB3j6da1IBRTz2yOZ+6O1TMZxol/V62/QcqrJeggsHTEPGLdr9Ua4b1Ka0xKJnJngZljsbw93FI1o+P9dAh5BS6wTPiZI/vmJVjvMTkSTnaZ3n9Go2t7A0XLcSxLcVyuLAd2mAvSN0mIviOukdM66wr7llif71nKuUt+4qvlr/r9HfwzN6pA4jkwhtS1UD+3CmB+wsHwsnohNcuu4FIQ6rgq/7QIDAQAB" +}
diff --git a/chrome/test/data/extensions/api_test/tts_engine/on_speak_with_audio_stream_using_audio_options/test.js b/chrome/test/data/extensions/api_test/tts_engine/on_speak_with_audio_stream_using_audio_options/test.js new file mode 100644 index 0000000..f6a3930f --- /dev/null +++ b/chrome/test/data/extensions/api_test/tts_engine/on_speak_with_audio_stream_using_audio_options/test.js
@@ -0,0 +1,57 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +chrome.test.runTests([function testSendAudioData() { + // Sends a series of audio buffers, and verifies we get events for them. + const expectedEvents = [ + {type: 'start', charIndex: 0}, {'type': 'word', 'charIndex': 10}, + {type: 'word', charIndex: 20}, {type: 'end', charIndex: 39} + ]; + + chrome.ttsEngine.onStop.addListener(() => {}); + + let errors = 0; + chrome.ttsEngine.onSpeakWithAudioStream.addListener( + (text, options, audioStreamOptions, sendAudioCallback) => { + // Check the additional parameters. + chrome.test.assertEq(48000, audioStreamOptions.sampleRate); + chrome.test.assertEq(128, audioStreamOptions.bufferSize); + + const buffer = new Float32Array(audioStreamOptions.bufferSize); + + // Start event. + sendAudioCallback({audioBuffer: buffer}); + + // A word event. + sendAudioCallback({audioBuffer: buffer, charIndex: 10}); + + // A word event. + sendAudioCallback({audioBuffer: buffer, charIndex: 20}); + + // Invalid audio buffer length. + try { + sendAudioCallback({audioBuffer: [0, 0]}); + } catch (e) { + errors++; + } + + // End event. + sendAudioCallback( + {audioBuffer: buffer, charIndex: 30, isLastBuffer: true}); + }); + + function onEvent(event) { + const expected = expectedEvents.shift(); + chrome.test.assertEq(JSON.stringify(expected), JSON.stringify(event)); + if (event.type == 'end') { + chrome.test.assertEq(0, expectedEvents.length); + chrome.test.assertEq(1, errors); + chrome.test.succeed(); + } + } + + chrome.tts.speak( + 'this is a test of using audio playback.', + {voiceName: 'Zach', onEvent: onEvent}); +}]);
diff --git a/chrome/test/data/favicon/title2_with_favicon.html b/chrome/test/data/favicon/title2_with_favicon.html new file mode 100644 index 0000000..95e6889 --- /dev/null +++ b/chrome/test/data/favicon/title2_with_favicon.html
@@ -0,0 +1,7 @@ +<html> +<head> +<title>Title Of Awesomeness</title> +<link rel="icon" href="icon.png"/> +</head> +<body>This page has a title.</body> +</html>
diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json index 122e504..45c24d5 100644 --- a/chrome/test/data/policy/policy_test_cases.json +++ b/chrome/test/data/policy/policy_test_cases.json
@@ -33,7 +33,7 @@ "${pref}": { "value": "The value that |pref| should take on.", "expect_default": "Whether or not the pref value should be the default one (i.e. unmanaged and user-modifiable). Defaults to false if not specified.", - "location": "The location where the pref is registered, possible values are ['user_profile', 'signin_profile', 'local_state', 'cros_setting']. Defaults to 'user_profile' if not specified.", + "location": "The location where the pref is registered, possible values are ['user_profile', 'signin_profile', 'local_state']. Defaults to 'user_profile' if not specified.", "check_for_mandatory": "Should the preference be tested when a mandatory value is set for the policy? Defaults to |true| if not specified. See |can_be_recommended|.", "check_for_recommended": "Should the preference be tested when a recommended value is set for the policy? Defaults to |true| if not specified. See |can_be_recommended|." } @@ -5576,19 +5576,7 @@ "DevicePciPeripheralDataAccessEnabled": {}, "DeviceMetricsReportingEnabled": { - "os": ["chromeos"], - "official_only": true, - "policy_pref_mapping_tests": [ - { - "policies": { - "DeviceMetricsReportingEnabled": true - }, - "prefs": { "cros.metrics.reportingEnabled": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "DeviceEphemeralUsersEnabled": {}, @@ -5730,20 +5718,7 @@ "ExtensionCacheSize": {}, "DeviceShowLowDiskSpaceNotification": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "ShowLowDiskSpaceNotification": false - }, - "prefs": { - "cros.device.show_low_disk_space_notification": { - "value": false, - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "DeviceLoginScreenDomainAutoComplete": {}, @@ -5751,19 +5726,7 @@ "AllowKioskAppControlChromeVersion": {}, "LoginAuthenticationBehavior": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "LoginAuthenticationBehavior": 1 - }, - "prefs": { - "cros.device.login_authentication_behavior": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "UsbDetachableWhitelist": {}, @@ -5773,51 +5736,15 @@ "DeviceAllowBluetooth": {}, "DeviceWiFiAllowed": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "DeviceWiFiAllowed": false - }, - "prefs": { - "cros.device.device_wifi_allowed": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "DeviceQuirksDownloadEnabled": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "DeviceQuirksDownloadEnabled": true - }, - "prefs": { - "cros.device.quirks_download_enabled": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "SystemTimezoneAutomaticDetection": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "SystemTimezoneAutomaticDetection": 1 - }, - "prefs": { - "cros.device.system_timezone_automatic_detection": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "WebRestrictionsAuthority": {}, @@ -5863,21 +5790,7 @@ }, "LoginVideoCaptureAllowedUrls": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "LoginVideoCaptureAllowedUrls": [ - "https://example.com" - ] - }, - "prefs": { - "cros.device.login_video_capture_allowed_urls": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "DeviceLoginScreenExtensions": { @@ -5908,22 +5821,7 @@ }, "DeviceWallpaperImage": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "DeviceWallpaperImage": { - "url": "http://localhost/", - "hash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef" - } - }, - "prefs": { - "cros.device_wallpaper_image": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "BrowserNetworkTimeQueriesEnabled": { @@ -5986,19 +5884,7 @@ }, "CastReceiverName": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "CastReceiverName": "Hallway" - }, - "prefs": { - "cros.device.cast_receiver.name": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "DeviceNativePrinters": { @@ -6016,51 +5902,15 @@ }, "DeviceNativePrintersAccessMode": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "DeviceNativePrintersAccessMode": 1 - }, - "prefs": { - "cros.device.native_printers_access_mode": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "DeviceNativePrintersBlacklist": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "DeviceNativePrintersBlacklist": ["id4", "id7", "id10"] - }, - "prefs": { - "cros.device.native_printers_blacklist": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "DeviceNativePrintersWhitelist": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "DeviceNativePrintersWhitelist": ["id4", "id7", "id10"] - }, - "prefs": { - "cros.device.native_printers_whitelist": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "DeviceExternalPrintServers": { @@ -6107,68 +5957,19 @@ }, "DevicePrintersAccessMode": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "DevicePrintersAccessMode": 1 - }, - "prefs": { - "cros.device.native_printers_access_mode": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "DevicePrintersBlocklist": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "DevicePrintersBlocklist": ["id4", "id7", "id10"] - }, - "prefs": { - "cros.device.native_printers_blacklist": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "DevicePrintersAllowlist": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "DevicePrintersAllowlist": ["id4", "id7", "id10"] - }, - "prefs": { - "cros.device.native_printers_whitelist": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "TPMFirmwareUpdateSettings": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "allow-user-initiated-powerwash": true, - "auto-update-mode": 2 - }, - "prefs": { - "cros.tpm_firmware_update_settings": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "MinimumRequiredChromeVersion": { @@ -6176,81 +5977,21 @@ }, "DeviceMinimumVersion": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "DeviceMinimumVersion": { - "requirements": [ - {"chromeos_version" : "13121.0.0", "warning_period" : 0, "aue_warning_period" : 14} - ], - "unmanaged_user_restricted": true - } - }, - "prefs": { - "cros.device.min_version": { - "value": { - "requirements": [ - {"chromeos_version" : "13121.0.0", "warning_period" : 0, "aue_warning_period" : 14} - ], - "unmanaged_user_restricted": true - }, - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "DeviceMinimumVersionAueMessage": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "DeviceMinimumVersionAueMessage": "Please return your device." - }, - "prefs": { - "cros.device.min_version_aue_message": { - "value": "Please return this device.", - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "DeviceLoginScreenAutoSelectCertificateForUrls": {}, "UnaffiliatedArcAllowed": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "unaffiliated_arc_allowed": false - }, - "prefs": { - "cros.unaffiliated_arc_allowed": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "DeviceHostnameTemplate": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "DeviceHostnameTemplate": "chromebook-${ASSET_ID}" - }, - "prefs": { - "cros.network.hostname_template": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "ContextAwareAccessSignalsAllowlist": { @@ -6379,19 +6120,7 @@ }, "VirtualMachinesAllowed": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "virtual_machines_allowed": true - }, - "prefs": { - "cros.device.virtual_machines_allowed": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "CrostiniAllowed": { @@ -6407,19 +6136,7 @@ }, "DeviceUnaffiliatedCrostiniAllowed": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "device_unaffiliated_crostini_allowed": false - }, - "prefs": { - "cros.device.unaffiliated_crostini_allowed": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "CrostiniExportImportUIAllowed": { @@ -6828,35 +6545,11 @@ }, "PluginVmAllowed": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "PluginVmAllowed": true - }, - "prefs": { - "cros.device.plugin_vm_allowed": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "PluginVmLicenseKey": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "PluginVmLicenseKey": "LICENSE_KEY" - }, - "prefs": { - "cros.device.plugin_vm_license_key": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "ParentAccessCodeConfig": { @@ -6946,19 +6639,7 @@ }, "DeviceRebootOnUserSignout": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "DeviceRebootOnUserSignout": 0 - }, - "prefs": { - "cros.device.reboot_on_user_signout": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "ForceNetworkInProcess": { @@ -6966,19 +6647,7 @@ }, "DeviceWilcoDtcAllowed": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "DeviceWilcoDtcAllowed": true - }, - "prefs": { - "cros.device.wilco_dtc_allowed": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "DeviceWilcoDtcConfiguration": { @@ -7077,19 +6746,7 @@ }, "DeviceDockMacAddressSource": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "DeviceDockMacAddressSource": 2 - }, - "prefs": { - "cros.device.device_dock_mac_address_source": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "DeviceAdvancedBatteryChargeModeEnabled": { @@ -7190,37 +6847,11 @@ }, "DevicePowerwashAllowed": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "DevicePowerwashAllowed": true - }, - "prefs": { - "cros.device.device_powerwash_allowed": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "DeviceWebBasedAttestationAllowedUrls": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "DeviceWebBasedAttestationAllowedUrls": [ - "[*.]example.com" - ] - }, - "prefs": { - "cros.device.web_based_attestation_allowed_urls": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "EmojiSuggestionEnabled": { @@ -7470,36 +7101,11 @@ }, "DeviceBorealisAllowed": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "DeviceBorealisAllowed": false - }, - "prefs": { - "cros.device.borealis_allowed": { - "value": false, - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "DeviceAllowedBluetoothServices": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "DeviceAllowedBluetoothServices": ["1124","180A","180F","1812"] - }, - "prefs": { - "cros.device.allowed_bluetooth_services": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "DeviceDebugPacketCaptureAllowed": {}, @@ -8150,24 +7756,7 @@ ] }, "SystemProxySettings": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { - "SystemProxySettings": { - "system_proxy_enabled": "true", - "system_services_username": "test_user", - "system_services_password": "0000", - "policy_credentials_auth_schemes": ["basic","digest"] - } - }, - "prefs": { - "cros.system_proxy_settings": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "NativeWindowOcclusionEnabled": { "os": ["win"], @@ -8282,17 +7871,7 @@ ] }, "DeviceChannelDowngradeBehavior": { - "os": ["chromeos"], - "policy_pref_mapping_tests": [ - { - "policies": { "DeviceChannelDowngradeBehavior": 0 }, - "prefs": { - "cros.system.channelDowngradeBehavior": { - "location": "cros_setting" - } - } - } - ] + "reason_for_missing_test": "Maps into CrosSettings" }, "BackForwardCacheEnabled": { "os": ["android"],
diff --git a/chrome/test/data/webui/chromeos/diagnostics/connectivity_card_test.js b/chrome/test/data/webui/chromeos/diagnostics/connectivity_card_test.js index 9c12d1e..8961537 100644 --- a/chrome/test/data/webui/chromeos/diagnostics/connectivity_card_test.js +++ b/chrome/test/data/webui/chromeos/diagnostics/connectivity_card_test.js
@@ -4,10 +4,11 @@ import 'chrome://diagnostics/connectivity_card.js'; -import {Network} from 'chrome://diagnostics/diagnostics_types.js'; -import {fakeEthernetNetwork, fakeNetworkGuidInfoList} from 'chrome://diagnostics/fake_data.js'; +import {Network, RoutineType, StandardRoutineResult} from 'chrome://diagnostics/diagnostics_types.js'; +import {fakeEthernetNetwork, fakeNetworkGuidInfoList, fakePowerRoutineResults, fakeRoutineResults} from 'chrome://diagnostics/fake_data.js'; import {FakeNetworkHealthProvider} from 'chrome://diagnostics/fake_network_health_provider.js'; -import {setNetworkHealthProviderForTesting} from 'chrome://diagnostics/mojo_interface_provider.js'; +import {FakeSystemRoutineController} from 'chrome://diagnostics/fake_system_routine_controller.js'; +import {setNetworkHealthProviderForTesting, setSystemRoutineControllerForTesting} from 'chrome://diagnostics/mojo_interface_provider.js'; import {assertFalse, assertTrue} from '../../chai_assert.js'; import {flushTasks} from '../../test_util.m.js'; @@ -21,9 +22,22 @@ /** @type {?FakeNetworkHealthProvider} */ let provider = null; + /** @type {!FakeSystemRoutineController} */ + let routineController; + suiteSetup(() => { provider = new FakeNetworkHealthProvider(); setNetworkHealthProviderForTesting(provider); + + // Setup a fake routine controller. + routineController = new FakeSystemRoutineController(); + routineController.setDelayTimeInMillisecondsForTesting(-1); + + // Enable all routines by default. + routineController.setFakeSupportedRoutines( + [...fakeRoutineResults.keys(), ...fakePowerRoutineResults.keys()]); + + setSystemRoutineControllerForTesting(routineController); }); setup(() => { @@ -39,8 +53,10 @@ /** * @param {string} activeGuid * @param {!Array<!Network>} networkStateList + * @param {boolean=} isActive */ - function initializeConnectivityCard(activeGuid, networkStateList) { + function initializeConnectivityCard( + activeGuid, networkStateList, isActive = false) { assertFalse(!!connectivityCardElement); provider.setFakeNetworkGuidInfo(fakeNetworkGuidInfoList); provider.setFakeNetworkState(activeGuid, networkStateList); @@ -50,8 +66,16 @@ document.createElement('connectivity-card')); assertTrue(!!connectivityCardElement); connectivityCardElement.activeGuid = activeGuid; + connectivityCardElement.isActive = isActive; document.body.appendChild(connectivityCardElement); + /** @type {!Array<!RoutineType>} */ + const routines = [RoutineType.kCpuCache]; + routineController.setFakeStandardRoutineResult( + RoutineType.kCpuCache, StandardRoutineResult.kTestPassed); + const routineSection = dx_utils.getRoutineSection(connectivityCardElement); + routineSection.routines = routines; + routineSection.runTestsAutomatically = true; return flushTasks(); } @@ -65,4 +89,10 @@ fakeEthernetNetwork.guid); }); }); + + test('TestsRunAutomaticallyWhenPageIsActive', () => { + return initializeConnectivityCard( + 'ethernetGuid', [fakeEthernetNetwork], true) + .then(() => assertTrue(connectivityCardElement.isTestRunning)); + }); } \ No newline at end of file
diff --git a/chrome/test/data/webui/chromeos/diagnostics/network_list_test.js b/chrome/test/data/webui/chromeos/diagnostics/network_list_test.js index 2ffe0ef..4105025 100644 --- a/chrome/test/data/webui/chromeos/diagnostics/network_list_test.js +++ b/chrome/test/data/webui/chromeos/diagnostics/network_list_test.js
@@ -5,9 +5,10 @@ import 'chrome://diagnostics/network_list.js'; import {NetworkGuidInfo} from 'chrome://diagnostics/diagnostics_types.js'; -import {fakeCellularNetwork, fakeEthernetNetwork, fakeNetworkGuidInfoList, fakeWifiNetwork} from 'chrome://diagnostics/fake_data.js'; +import {fakeCellularNetwork, fakeEthernetNetwork, fakeNetworkGuidInfoList, fakePowerRoutineResults, fakeRoutineResults, fakeWifiNetwork} from 'chrome://diagnostics/fake_data.js'; import {FakeNetworkHealthProvider} from 'chrome://diagnostics/fake_network_health_provider.js'; -import {setNetworkHealthProviderForTesting} from 'chrome://diagnostics/mojo_interface_provider.js'; +import {FakeSystemRoutineController} from 'chrome://diagnostics/fake_system_routine_controller.js'; +import {setNetworkHealthProviderForTesting, setSystemRoutineControllerForTesting} from 'chrome://diagnostics/mojo_interface_provider.js'; import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js'; import {flushTasks} from '../../test_util.m.js'; @@ -21,9 +22,22 @@ /** @type {?FakeNetworkHealthProvider} */ let provider = null; + /** @type {!FakeSystemRoutineController} */ + let routineController; + suiteSetup(() => { provider = new FakeNetworkHealthProvider(); setNetworkHealthProviderForTesting(provider); + + // Setup a fake routine controller. + routineController = new FakeSystemRoutineController(); + routineController.setDelayTimeInMillisecondsForTesting(-1); + + // Enable all routines by default. + routineController.setFakeSupportedRoutines( + [...fakeRoutineResults.keys(), ...fakePowerRoutineResults.keys()]); + + setSystemRoutineControllerForTesting(routineController); }); teardown(() => {
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM index 4dea8125..facdcb3 100644 --- a/chromeos/CHROMEOS_LKGM +++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@ -14005.0.0 \ No newline at end of file +14006.0.0 \ No newline at end of file
diff --git a/chromeos/attestation/attestation_flow_adaptive.cc b/chromeos/attestation/attestation_flow_adaptive.cc index 51715d10..4f446cd 100644 --- a/chromeos/attestation/attestation_flow_adaptive.cc +++ b/chromeos/attestation/attestation_flow_adaptive.cc
@@ -37,6 +37,7 @@ std::unique_ptr<AttestationFlowFactory> factory) : AttestationFlow(/*server_proxy=*/nullptr), server_proxy_(std::move(server_proxy)), + raw_server_proxy_(server_proxy_.get()), attestation_flow_type_decider_(std::move(type_decider)), attestation_flow_factory_(std::move(factory)) {} @@ -63,7 +64,7 @@ // Start the flow with checking if platform-side integrated attestation is an // valid option. attestation_flow_type_decider_->CheckType( - server_proxy_.get(), raw_status_reporter, + raw_server_proxy_, raw_status_reporter, base::BindOnce(&AttestationFlowAdaptive::OnCheckAttestationFlowType, weak_factory_.GetWeakPtr(), std::move(params), std::move(status_reporter), std::move(callback)));
diff --git a/chromeos/attestation/attestation_flow_adaptive.h b/chromeos/attestation/attestation_flow_adaptive.h index db81d16..260e9ef 100644 --- a/chromeos/attestation/attestation_flow_adaptive.h +++ b/chromeos/attestation/attestation_flow_adaptive.h
@@ -94,6 +94,8 @@ // to gather proxy information, and the attestation flow factory to // initialize. std::unique_ptr<ServerProxy> server_proxy_; + // Owened by either `server_proxy_` or `attestation_flow_factory_`. + ServerProxy* const raw_server_proxy_; // `AttestationFlowTypeDecider` object that decides which attestation flow // type we can use. @@ -108,4 +110,13 @@ } // namespace attestation } // namespace chromeos +// TODO(https://crbug.com/1164001): remove when //chromeos/attestation +// moved to ash +namespace ash { +namespace attestation { +using ::chromeos::attestation::AttestationFlowAdaptive; +using ::chromeos::attestation::ServerProxy; +} // namespace attestation +} // namespace ash + #endif // CHROMEOS_ATTESTATION_ATTESTATION_FLOW_ADAPTIVE_H_
diff --git a/chromeos/attestation/attestation_flow_adaptive_unittest.cc b/chromeos/attestation/attestation_flow_adaptive_unittest.cc index d984d127..1214f27c 100644 --- a/chromeos/attestation/attestation_flow_adaptive_unittest.cc +++ b/chromeos/attestation/attestation_flow_adaptive_unittest.cc
@@ -73,9 +73,10 @@ void set_has_proxy(bool has_proxy) { has_proxy_ = has_proxy; } private: - void FakeCheck(ServerProxy*, + void FakeCheck(ServerProxy* server_proxy, AttestationFlowStatusReporter* reporter, AttestationFlowTypeCheckCallback callback) { + EXPECT_TRUE(server_proxy); reporter->OnHasProxy(has_proxy_); // TODO(b/158532239): Add test after determining the availability of // system proxy at runtime. @@ -95,9 +96,9 @@ ~AttestationFlowAdaptiveTest() override = default; protected: - void ExpectReport(int metric_value) { + void ExpectReport(int metric_value, int number) { histogram_tester_.ExpectUniqueSample( - "ChromeOS.Attestation.AttestationFlowStatus", metric_value, 1); + "ChromeOS.Attestation.AttestationFlowStatus", metric_value, number); } base::test::SingleThreadTaskEnvironment task_environment_; @@ -145,7 +146,7 @@ EXPECT_EQ(result_status, ATTESTATION_SUCCESS); EXPECT_EQ(result_cert, kFakeCert); // No proxy, run default flow, and default flow works. - ExpectReport(0b001100); + ExpectReport(0b001100, 1); } TEST_F(AttestationFlowAdaptiveTest, DefaultFlowFailureAndFallback) { @@ -197,7 +198,7 @@ EXPECT_EQ(result_status, ATTESTATION_SUCCESS); EXPECT_EQ(result_cert, kFakeCert); // No proxy, run default flow, and default flow fails, but the fallback works. - ExpectReport(0b001011); + ExpectReport(0b001011, 1); } TEST_F(AttestationFlowAdaptiveTest, SkipDefaultFlow) { @@ -242,7 +243,62 @@ EXPECT_EQ(result_status, ATTESTATION_SUCCESS); EXPECT_EQ(result_cert, kFakeCert); // Has proxy, falls back directly, and the fallback works. - ExpectReport(0b100011); + ExpectReport(0b100011, 1); +} + +TEST_F(AttestationFlowAdaptiveTest, FallbackTwice) { + // The ownerships of these testing objects will be transferred to the object + // under test. + StrictMock<FakeAttestationFlowTypeDecider>* fake_decider = + new StrictMock<FakeAttestationFlowTypeDecider>(); + TestAttestationFlowFactory* test_factory = new TestAttestationFlowFactory(); + + fake_decider->set_is_default_attestation_valid(false); + fake_decider->set_has_proxy(true); + EXPECT_CALL(*fake_decider, CheckType(_, _, _)).Times(2); + EXPECT_CALL( + *(test_factory->GetFallbackMock()), + GetCertificate(kFakeProfile, AccountId::FromUserEmail(kFakeUserEmail), + kFakeOrigin, true, kFakeKeyName, _)) + .Times(2) + .WillRepeatedly( + WithArg<5>(Invoke([](AttestationFlow::CertificateCallback callback) { + std::move(callback).Run(ATTESTATION_SUCCESS, kFakeCert); + }))); + AttestationStatus result_status; + std::string result_cert; + + base::RunLoop run_loop; + auto callback = [](base::RunLoop* run_loop, AttestationStatus* result_status, + std::string* result_cert, AttestationStatus status, + const std::string& cert) { + *result_status = status; + *result_cert = cert; + run_loop->QuitClosure().Run(); + }; + AttestationFlowAdaptive flow( + std::make_unique<StrictMock<MockServerProxy>>(), + std::unique_ptr<AttestationFlowTypeDecider>(fake_decider), + std::unique_ptr<AttestationFlowFactory>(test_factory)); + + flow.GetCertificate( + kFakeProfile, AccountId::FromUserEmail(kFakeUserEmail), kFakeOrigin, true, + kFakeKeyName, + base::BindOnce(callback, &run_loop, &result_status, &result_cert)); + run_loop.Run(); + EXPECT_EQ(result_status, ATTESTATION_SUCCESS); + EXPECT_EQ(result_cert, kFakeCert); + + base::RunLoop run_loop_again; + flow.GetCertificate( + kFakeProfile, AccountId::FromUserEmail(kFakeUserEmail), kFakeOrigin, true, + kFakeKeyName, + base::BindOnce(callback, &run_loop_again, &result_status, &result_cert)); + run_loop_again.Run(); + EXPECT_EQ(result_status, ATTESTATION_SUCCESS); + EXPECT_EQ(result_cert, kFakeCert); + // Has proxy, falls back directly, and the fallback works twice. + ExpectReport(0b100011, 2); } } // namespace attestation
diff --git a/chromeos/attestation/attestation_flow_type_decider.cc b/chromeos/attestation/attestation_flow_type_decider.cc index f803d367e..4210d8f8 100644 --- a/chromeos/attestation/attestation_flow_type_decider.cc +++ b/chromeos/attestation/attestation_flow_type_decider.cc
@@ -23,6 +23,7 @@ ServerProxy* server_proxy, AttestationFlowStatusReporter* reporter, AttestationFlowTypeCheckCallback callback) { + CHECK(server_proxy); server_proxy->CheckIfAnyProxyPresent(base::BindOnce( &AttestationFlowTypeDecider::OnCheckProxyPresence, weak_factory_.GetWeakPtr(), reporter, std::move(callback)));
diff --git a/chromeos/components/camera_app_ui/resources/js/toast.js b/chromeos/components/camera_app_ui/resources/js/toast.js index 31d8bd80..cd7f9fb 100644 --- a/chromeos/components/camera_app_ui/resources/js/toast.js +++ b/chromeos/components/camera_app_ui/resources/js/toast.js
@@ -19,7 +19,9 @@ element.textContent = message; element.classList.toggle('spoken', spoken); - animate.play(element); + if (!spoken) { + animate.play(element); + } } /**
diff --git a/chromeos/components/diagnostics_ui/resources/connectivity_card.html b/chromeos/components/diagnostics_ui/resources/connectivity_card.html index 94420755..433ff0dc 100644 --- a/chromeos/components/diagnostics_ui/resources/connectivity_card.html +++ b/chromeos/components/diagnostics_ui/resources/connectivity_card.html
@@ -9,6 +9,7 @@ is-test-running="{{isTestRunning}}" run-tests-button-text="Run Network test" routine-runtime="{{getEstimateRuntimeInMinutes_(routines_)}}" - is-active="[[isActive]]"> + is-active="[[isActive]]" + run-tests-automatically="true"> </routine-section> </diagnostics-card>
diff --git a/chromeos/components/diagnostics_ui/resources/fake_data.js b/chromeos/components/diagnostics_ui/resources/fake_data.js index 9bad5a4..67d6f3ef 100644 --- a/chromeos/components/diagnostics_ui/resources/fake_data.js +++ b/chromeos/components/diagnostics_ui/resources/fake_data.js
@@ -213,6 +213,17 @@ [RoutineType.kCpuFloatingPoint, StandardRoutineResult.kTestFailed], [RoutineType.kCpuPrime, StandardRoutineResult.kExecutionError], [RoutineType.kMemory, StandardRoutineResult.kTestPassed], + [RoutineType.kCaptivePortal, StandardRoutineResult.kTestPassed], + [RoutineType.kDnsLatency, StandardRoutineResult.kTestPassed], + [RoutineType.kDnsResolution, StandardRoutineResult.kTestPassed], + [RoutineType.kDnsResolverPresent, StandardRoutineResult.kTestPassed], + [RoutineType.kGatewayCanBePinged, StandardRoutineResult.kTestPassed], + [RoutineType.kHasSecureWiFiConnection, StandardRoutineResult.kTestPassed], + [RoutineType.kHttpFirewall, StandardRoutineResult.kTestPassed], + [RoutineType.kHttpsFirewall, StandardRoutineResult.kTestPassed], + [RoutineType.kHttpsLatency, StandardRoutineResult.kTestPassed], + [RoutineType.kLanConnectivity, StandardRoutineResult.kTestPassed], + [RoutineType.kSignalStrength, StandardRoutineResult.kTestPassed], ]); /** @type {!Map<!RoutineType, !PowerRoutineResult>} */
diff --git a/chromeos/components/diagnostics_ui/resources/routine_section.html b/chromeos/components/diagnostics_ui/resources/routine_section.html index 9432021..6ee6ae2 100644 --- a/chromeos/components/diagnostics_ui/resources/routine_section.html +++ b/chromeos/components/diagnostics_ui/resources/routine_section.html
@@ -93,7 +93,7 @@ <cr-button id="runTestsButton" hidden$="[[isRunTestsButtonHidden_(isTestRunning, executionStatus_)]]" - on-click="onRunTestsClicked_" + on-click="runTests_" disabled="[[isRunTestsButtonDisabled_(isTestRunning, additionalMessage)]]"> [[runTestsButtonText]]
diff --git a/chromeos/components/diagnostics_ui/resources/routine_section.js b/chromeos/components/diagnostics_ui/resources/routine_section.js index 3c03a0b..61faf38 100644 --- a/chromeos/components/diagnostics_ui/resources/routine_section.js +++ b/chromeos/components/diagnostics_ui/resources/routine_section.js
@@ -176,6 +176,12 @@ value: '', computed: 'getInitialButtonText_(runTestsButtonText)', }, + + /** @type {boolean} */ + runTestsAutomatically: { + type: Boolean, + value: false, + }, }, observers: [ @@ -200,7 +206,7 @@ }, /** @private */ - onRunTestsClicked_() { + runTests_() { this.isTestRunning = true; this.hasTestFailure_ = false; @@ -487,13 +493,21 @@ }, /** - * Stop any running tests and reset to initial routine state - * when the active navigation page changes. + * If the page is active, check if we should run the routines + * automatically, otherwise stop any running tests and reset to + * the initial routine state. * @private */ onActivePageChanged_() { - this.stopTests_(); - this.resetRoutineState_(); + if (!this.isActive) { + this.stopTests_(); + this.resetRoutineState_(); + return; + } + + if (this.runTestsAutomatically && !this.isTestRunning) { + this.runTests_(); + } }, /** @override */
diff --git a/chromeos/login/auth/test_attempt_state.h b/chromeos/login/auth/test_attempt_state.h index 51e88a4..b515985 100644 --- a/chromeos/login/auth/test_attempt_state.h +++ b/chromeos/login/auth/test_attempt_state.h
@@ -19,7 +19,7 @@ class COMPONENT_EXPORT(CHROMEOS_LOGIN_AUTH) TestAttemptState : public AuthAttemptState { public: - TestAttemptState(const UserContext& credentials); + explicit TestAttemptState(const UserContext& credentials); ~TestAttemptState() override;
diff --git a/chromeos/login/login_state/scoped_test_public_session_login_state.h b/chromeos/login/login_state/scoped_test_public_session_login_state.h index 46053a9..f0754ab 100644 --- a/chromeos/login/login_state/scoped_test_public_session_login_state.h +++ b/chromeos/login/login_state/scoped_test_public_session_login_state.h
@@ -15,7 +15,7 @@ // (so it nicely cleans up after going out of scope). class ScopedTestPublicSessionLoginState { public: - ScopedTestPublicSessionLoginState( + explicit ScopedTestPublicSessionLoginState( LoginState::LoggedInUserType user_type = LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT); ~ScopedTestPublicSessionLoginState();
diff --git a/chromeos/profiles/atom.afdo.newest.txt b/chromeos/profiles/atom.afdo.newest.txt index b334404b..79f6c31 100644 --- a/chromeos/profiles/atom.afdo.newest.txt +++ b/chromeos/profiles/atom.afdo.newest.txt
@@ -1 +1 @@ -chromeos-chrome-amd64-atom-92-4484.0-1621849150-benchmark-92.0.4515.32-r1-redacted.afdo.xz +chromeos-chrome-amd64-atom-93-4484.0-1621851457-benchmark-93.0.4522.0-r1-redacted.afdo.xz
diff --git a/chromeos/profiles/bigcore.afdo.newest.txt b/chromeos/profiles/bigcore.afdo.newest.txt index e7a1b05f..3e43a2c 100644 --- a/chromeos/profiles/bigcore.afdo.newest.txt +++ b/chromeos/profiles/bigcore.afdo.newest.txt
@@ -1 +1 @@ -chromeos-chrome-amd64-bigcore-92-4484.0-1621852288-benchmark-92.0.4515.32-r1-redacted.afdo.xz +chromeos-chrome-amd64-bigcore-93-4484.0-1621851890-benchmark-93.0.4522.0-r1-redacted.afdo.xz
diff --git a/chromeos/services/tts/constants.cc b/chromeos/services/tts/constants.cc index e64ea1a..f22a651 100644 --- a/chromeos/services/tts/constants.cc +++ b/chromeos/services/tts/constants.cc
@@ -9,5 +9,8 @@ const char kLibchromettsPath[] = "/usr/share/chromeos-assets/speech_synthesis/patts/libchrometts.so"; const char kTempDataDirectory[] = "/tmp/tts"; +const int kDefaultSampleRate = 24000; +const int kDefaultBufferSize = 512; + } // namespace tts } // namespace chromeos
diff --git a/chromeos/services/tts/constants.h b/chromeos/services/tts/constants.h index 99d130d6..9851d1cb 100644 --- a/chromeos/services/tts/constants.h +++ b/chromeos/services/tts/constants.h
@@ -12,6 +12,13 @@ // The location of read-write text-to-speech data. extern const char kTempDataDirectory[]; + +// Default sample rate for audio playback. +extern const int kDefaultSampleRate; + +// Default buffer size for audio playback. +extern const int kDefaultBufferSize; + } // namespace tts } // namespace chromeos
diff --git a/chromeos/services/tts/google_tts_stream.cc b/chromeos/services/tts/google_tts_stream.cc index 6366193..f688da04 100644 --- a/chromeos/services/tts/google_tts_stream.cc +++ b/chromeos/services/tts/google_tts_stream.cc
@@ -14,11 +14,6 @@ namespace chromeos { namespace tts { -namespace { -constexpr int kDefaultSampleRate = 24000; -constexpr int kDefaultBufferSize = 512; -} // namespace - // Simple helper to bridge logging in the shared library to Chrome's logging. void HandleLibraryLogging(int severity, const char* message) { switch (severity) {
diff --git a/chromeos/services/tts/public/mojom/tts_service.mojom b/chromeos/services/tts/public/mojom/tts_service.mojom index f43fc9e..f51e4f38b0 100644 --- a/chromeos/services/tts/public/mojom/tts_service.mojom +++ b/chromeos/services/tts/public/mojom/tts_service.mojom
@@ -6,6 +6,12 @@ import "media/mojo/mojom/audio_stream_factory.mojom"; +// Audio parameters used for PlaybackTtsStream. +struct AudioParameters { + int32 sample_rate; + int32 buffer_size; +}; + // The main interface to TTS engines on Chrome OS. TtsService lives in a // tts-sandboxed process. TtsEngineExtensionObserver, the other end of this // interface, in the browser process, brokers a connection between TtsService @@ -13,15 +19,19 @@ interface TtsService { // Binds a GoogleTtsStream received by this service. // The remote lives in the Google tts component extension. - BindGoogleTtsStream(pending_receiver<GoogleTtsStream> receiver, + BindGoogleTtsStream( + pending_receiver<GoogleTtsStream> receiver, pending_remote<media.mojom.AudioStreamFactory> stream_factory); // Binds a PlaybackTtsStream received by this service. // The remote lives in the Ash Chrome browser process. - BindPlaybackTtsStream(pending_receiver<PlaybackTtsStream> receiver, - pending_remote<media.mojom.AudioStreamFactory> stream_factory) => ( - int32 sample_rate, - int32 buffer_size); + // The caller can request specific |sample_rate| and |buffer_size|. The actual + // audio parameters for the output device are returned. + BindPlaybackTtsStream( + pending_receiver<PlaybackTtsStream> receiver, + pending_remote<media.mojom.AudioStreamFactory> stream_factory, + AudioParameters? desired_audio_parameters) => ( + AudioParameters audio_parameters); }; // Interface for the Google component TTS engine to control
diff --git a/chromeos/services/tts/tts_service.cc b/chromeos/services/tts/tts_service.cc index 1dbcd3c5..5766b335 100644 --- a/chromeos/services/tts/tts_service.cc +++ b/chromeos/services/tts/tts_service.cc
@@ -7,18 +7,13 @@ #include <dlfcn.h> #include <sys/resource.h> +#include "chromeos/services/tts/constants.h" #include "media/base/audio_parameters.h" #include "media/base/audio_sample_types.h" namespace chromeos { namespace tts { -// TODO: remove this once dynamic params are supported. -namespace { -constexpr int kDefaultSampleRate = 24000; -constexpr int kDefaultBufferSize = 512; -} // namespace - TtsService::TtsService(mojo::PendingReceiver<mojom::TtsService> receiver) : service_receiver_(this, std::move(receiver)) { if (setpriority(PRIO_PROCESS, 0, -10 /* real time audio */) != 0) { @@ -39,16 +34,34 @@ void TtsService::BindPlaybackTtsStream( mojo::PendingReceiver<mojom::PlaybackTtsStream> receiver, mojo::PendingRemote<media::mojom::AudioStreamFactory> factory, + mojom::AudioParametersPtr desired_audio_parameters, BindPlaybackTtsStreamCallback callback) { - // TODO(accessibility): make it possible to change this dynamically by passing - // params from extension manifest. - media::AudioParameters params(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, - media::CHANNEL_LAYOUT_MONO, kDefaultSampleRate, - kDefaultBufferSize); + media::AudioParameters params; + if (desired_audio_parameters) { + params = media::AudioParameters( + media::AudioParameters::AUDIO_PCM_LOW_LATENCY, + media::CHANNEL_LAYOUT_MONO, desired_audio_parameters->sample_rate, + desired_audio_parameters->buffer_size); + + if (!params.IsValid()) { + // Returning early disconnects the remote. + return; + } + } else { + // The client did not specify parameters; use defaults. + params = media::AudioParameters( + media::AudioParameters::AUDIO_PCM_LOW_LATENCY, + media::CHANNEL_LAYOUT_MONO, kDefaultSampleRate, kDefaultBufferSize); + } + DCHECK(params.IsValid()); playback_tts_stream_ = std::make_unique<PlaybackTtsStream>( this, std::move(receiver), std::move(factory), params); - std::move(callback).Run(kDefaultSampleRate, kDefaultBufferSize); + + auto ret_params = mojom::AudioParameters::New(); + ret_params->sample_rate = params.sample_rate(); + ret_params->buffer_size = params.frames_per_buffer(); + std::move(callback).Run(std::move(ret_params)); } void TtsService::MaybeExit() {
diff --git a/chromeos/services/tts/tts_service.h b/chromeos/services/tts/tts_service.h index 3cd1037..5a0524a0 100644 --- a/chromeos/services/tts/tts_service.h +++ b/chromeos/services/tts/tts_service.h
@@ -42,6 +42,7 @@ void BindPlaybackTtsStream( mojo::PendingReceiver<mojom::PlaybackTtsStream> receiver, mojo::PendingRemote<media::mojom::AudioStreamFactory> factory, + mojom::AudioParametersPtr desired_audio_parameters, BindPlaybackTtsStreamCallback callback) override; private:
diff --git a/chromeos/services/tts/tts_service_unittest.cc b/chromeos/services/tts/tts_service_unittest.cc index 2b935f6b..698831c 100644 --- a/chromeos/services/tts/tts_service_unittest.cc +++ b/chromeos/services/tts/tts_service_unittest.cc
@@ -104,14 +104,17 @@ if (audio_stream_factory_.is_bound()) audio_stream_factory_.reset(); - auto callback = - base::BindOnce([](int32_t sample_rate, int32_t buffer_size) { - // Do nothing. - }); + auto callback = base::BindOnce([](mojom::AudioParametersPtr) { + // Do nothing. + }); + mojom::AudioParametersPtr desired_audio_parameters = + mojom::AudioParameters::New(20000 /* sample rate */, + 128 /* buffer size */); remote_service_->BindPlaybackTtsStream( stream->BindNewPipeAndPassReceiver(), - audio_stream_factory_.BindNewPipeAndPassRemote(), std::move(callback)); + audio_stream_factory_.BindNewPipeAndPassRemote(), + std::move(desired_audio_parameters), std::move(callback)); remote_service_.FlushForTesting(); }
diff --git a/components/autofill/content/renderer/form_autofill_util_browsertest.cc b/components/autofill/content/renderer/form_autofill_util_browsertest.cc index 2c2ec45..dfb08a3 100644 --- a/components/autofill/content/renderer/form_autofill_util_browsertest.cc +++ b/components/autofill/content/renderer/form_autofill_util_browsertest.cc
@@ -982,7 +982,7 @@ </body>)"); // Ensure that Android runs at default page scale. - view_->GetWebView()->SetPageScaleFactor(1.0); + web_view_->SetPageScaleFactor(1.0); std::vector<WebElement> iframes = [this] { WebDocument doc = GetMainFrame()->GetDocument();
diff --git a/components/autofill_assistant/browser/BUILD.gn b/components/autofill_assistant/browser/BUILD.gn index 59d17cd..1c861f9 100644 --- a/components/autofill_assistant/browser/BUILD.gn +++ b/components/autofill_assistant/browser/BUILD.gn
@@ -34,8 +34,6 @@ "actions/check_option_element_action.h", "actions/clear_persistent_ui_action.cc", "actions/clear_persistent_ui_action.h", - "actions/click_action.cc", - "actions/click_action.h", "actions/collect_user_data_action.cc", "actions/collect_user_data_action.h", "actions/configure_bottom_sheet_action.cc", @@ -344,7 +342,6 @@ "actions/check_element_tag_action_unittest.cc", "actions/check_option_element_action_unittest.cc", "actions/clear_persistent_ui_action_unittest.cc", - "actions/click_action_unittest.cc", "actions/collect_user_data_action_unittest.cc", "actions/configure_bottom_sheet_action_unittest.cc", "actions/dispatch_js_event_action_unittest.cc",
diff --git a/components/autofill_assistant/browser/actions/action.cc b/components/autofill_assistant/browser/actions/action.cc index 152b445..be0eb51 100644 --- a/components/autofill_assistant/browser/actions/action.cc +++ b/components/autofill_assistant/browser/actions/action.cc
@@ -84,9 +84,6 @@ return out; #else switch (action_case) { - case ActionProto::ActionInfoCase::kClick: - out << "Click"; - break; case ActionProto::ActionInfoCase::kSetFormValue: out << "KeyboardInput"; break;
diff --git a/components/autofill_assistant/browser/actions/click_action.cc b/components/autofill_assistant/browser/actions/click_action.cc deleted file mode 100644 index 7ce65393..0000000 --- a/components/autofill_assistant/browser/actions/click_action.cc +++ /dev/null
@@ -1,72 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "components/autofill_assistant/browser/actions/click_action.h" - -#include <utility> - -#include "base/bind.h" -#include "base/callback.h" -#include "components/autofill_assistant/browser/actions/action_delegate.h" -#include "components/autofill_assistant/browser/actions/action_delegate_util.h" -#include "components/autofill_assistant/browser/client_status.h" -#include "components/autofill_assistant/browser/service.pb.h" - -namespace autofill_assistant { - -ClickAction::ClickAction(ActionDelegate* delegate, const ActionProto& proto) - : Action(delegate, proto) { - DCHECK(proto_.has_click()); - click_type_ = proto.click().click_type(); - if (click_type_ == ClickType::NOT_SET) { - // default: TAP - click_type_ = ClickType::TAP; - } - on_top_ = proto.click().on_top(); - if (on_top_ == STEP_UNSPECIFIED) { - on_top_ = SKIP_STEP; - } -} - -ClickAction::~ClickAction() {} - -void ClickAction::InternalProcessAction(ProcessActionCallback callback) { - Selector selector = Selector(proto_.click().element_to_click()); - if (selector.empty()) { - VLOG(1) << __func__ << ": empty selector"; - UpdateProcessedAction(INVALID_SELECTOR); - std::move(callback).Run(std::move(processed_action_proto_)); - return; - } - - delegate_->ShortWaitForElementWithSlowWarning( - selector, base::BindOnce(&ClickAction::OnWaitForElementTimed, - weak_ptr_factory_.GetWeakPtr(), - base::BindOnce(&ClickAction::OnWaitForElement, - weak_ptr_factory_.GetWeakPtr(), - std::move(callback), selector))); -} - -void ClickAction::OnWaitForElement(ProcessActionCallback callback, - const Selector& selector, - const ClientStatus& element_status) { - if (!element_status.ok()) { - UpdateProcessedAction(element_status); - std::move(callback).Run(std::move(processed_action_proto_)); - return; - } - - action_delegate_util::ClickOrTapElement( - delegate_, selector, click_type_, on_top_, - base::BindOnce(&::autofill_assistant::ClickAction::OnClick, - weak_ptr_factory_.GetWeakPtr(), std::move(callback))); -} - -void ClickAction::OnClick(ProcessActionCallback callback, - const ClientStatus& status) { - UpdateProcessedAction(status); - std::move(callback).Run(std::move(processed_action_proto_)); -} - -} // namespace autofill_assistant
diff --git a/components/autofill_assistant/browser/actions/click_action.h b/components/autofill_assistant/browser/actions/click_action.h deleted file mode 100644 index 9cf0da0..0000000 --- a/components/autofill_assistant/browser/actions/click_action.h +++ /dev/null
@@ -1,38 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_ACTIONS_CLICK_ACTION_H_ -#define COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_ACTIONS_CLICK_ACTION_H_ - -#include "base/macros.h" -#include "base/memory/weak_ptr.h" -#include "components/autofill_assistant/browser/actions/action.h" - -namespace autofill_assistant { -class ClientStatus; - -// This action performs a click on a given element. -class ClickAction : public Action { - public: - explicit ClickAction(ActionDelegate* delegate, const ActionProto& proto); - ~ClickAction() override; - - private: - // Overrides Action: - void InternalProcessAction(ProcessActionCallback callback) override; - - void OnWaitForElement(ProcessActionCallback callback, - const Selector& selector, - const ClientStatus& element_status); - void OnClick(ProcessActionCallback callback, const ClientStatus& status); - - ClickType click_type_; - OptionalStep on_top_; - base::WeakPtrFactory<ClickAction> weak_ptr_factory_{this}; - - DISALLOW_COPY_AND_ASSIGN(ClickAction); -}; - -} // namespace autofill_assistant -#endif // COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_ACTIONS_CLICK_ACTION_H_
diff --git a/components/autofill_assistant/browser/actions/click_action_unittest.cc b/components/autofill_assistant/browser/actions/click_action_unittest.cc deleted file mode 100644 index 5da446d8..0000000 --- a/components/autofill_assistant/browser/actions/click_action_unittest.cc +++ /dev/null
@@ -1,269 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "components/autofill_assistant/browser/actions/click_action.h" - -#include "base/test/gmock_callback_support.h" -#include "base/test/mock_callback.h" -#include "components/autofill_assistant/browser/actions/action_test_utils.h" -#include "components/autofill_assistant/browser/actions/mock_action_delegate.h" -#include "components/autofill_assistant/browser/selector.h" -#include "components/autofill_assistant/browser/service.pb.h" -#include "components/autofill_assistant/browser/web/mock_web_controller.h" -#include "testing/gmock/include/gmock/gmock.h" - -namespace autofill_assistant { -namespace { - -using ::base::test::RunOnceCallback; -using ::testing::_; -using ::testing::InSequence; -using ::testing::Pointee; -using ::testing::Property; -using ::testing::Return; - -class ClickActionTest : public testing::Test { - public: - ClickActionTest() {} - - void SetUp() override { - ON_CALL(mock_action_delegate_, GetWebController) - .WillByDefault(Return(&mock_web_controller_)); - ON_CALL(mock_action_delegate_, OnShortWaitForElement(_, _)) - .WillByDefault(RunOnceCallback<1>(OkClientStatus(), - base::TimeDelta::FromSeconds(0))); - ON_CALL(mock_action_delegate_, WaitUntilDocumentIsInReadyState(_, _, _, _)) - .WillByDefault(RunOnceCallback<3>(OkClientStatus(), - base::TimeDelta::FromSeconds(0))); - ON_CALL(mock_web_controller_, ScrollIntoView(_, _, _)) - .WillByDefault(RunOnceCallback<2>(OkClientStatus())); - ON_CALL(mock_web_controller_, WaitUntilElementIsStable(_, _, _, _)) - .WillByDefault(RunOnceCallback<3>(OkClientStatus(), - base::TimeDelta::FromSeconds(0))); - ON_CALL(mock_web_controller_, CheckOnTop(_, _)) - .WillByDefault(RunOnceCallback<1>(OkClientStatus())); - ON_CALL(mock_web_controller_, ClickOrTapElement(_, _, _)) - .WillByDefault(RunOnceCallback<2>(OkClientStatus())); - ON_CALL(mock_web_controller_, JsClickElement(_, _)) - .WillByDefault(RunOnceCallback<1>(OkClientStatus())); - } - - protected: - void Run() { - ActionProto action_proto; - *action_proto.mutable_click() = proto_; - ClickAction action(&mock_action_delegate_, action_proto); - action.ProcessAction(callback_.Get()); - } - - // Return an error status with details as created by - // WebController::CheckOnTop. - ClientStatus NotOnTopStatus() { - ClientStatus not_on_top(ELEMENT_NOT_ON_TOP); - not_on_top.mutable_details() - ->mutable_web_controller_error_info() - ->set_failed_web_action(WebControllerErrorInfoProto::ON_TOP); - return not_on_top; - } - - MockActionDelegate mock_action_delegate_; - MockWebController mock_web_controller_; - base::MockCallback<Action::ProcessActionCallback> callback_; - ClickProto proto_; -}; - -TEST_F(ClickActionTest, EmptySelectorFails) { - EXPECT_CALL( - callback_, - Run(Pointee(Property(&ProcessedActionProto::status, INVALID_SELECTOR)))); - Run(); -} - -TEST_F(ClickActionTest, CheckExpectedCallChain) { - Selector expected_selector({"#click"}); - *proto_.mutable_element_to_click() = expected_selector.proto; - proto_.set_click_type(ClickType::CLICK); - - ElementFinder::Result expected_element = - test_util::MockFindElement(mock_action_delegate_, expected_selector); - - InSequence seq; - EXPECT_CALL(mock_action_delegate_, - OnShortWaitForElement(expected_selector, _)) - .WillOnce(RunOnceCallback<1>(OkClientStatus(), - base::TimeDelta::FromSeconds(0))); - EXPECT_CALL(mock_action_delegate_, - WaitUntilDocumentIsInReadyState( - _, DOCUMENT_INTERACTIVE, EqualsElement(expected_element), _)) - .WillOnce(RunOnceCallback<3>(OkClientStatus(), - base::TimeDelta::FromSeconds(0))); - EXPECT_CALL(mock_web_controller_, - ScrollIntoView(true, EqualsElement(expected_element), _)) - .WillOnce(RunOnceCallback<2>(OkClientStatus())); - EXPECT_CALL( - mock_web_controller_, - WaitUntilElementIsStable(_, _, EqualsElement(expected_element), _)) - .WillOnce(RunOnceCallback<3>(OkClientStatus(), - base::TimeDelta::FromSeconds(0))); - EXPECT_CALL( - mock_web_controller_, - ClickOrTapElement(ClickType::CLICK, EqualsElement(expected_element), _)) - .WillOnce(RunOnceCallback<2>(OkClientStatus())); - EXPECT_CALL( - callback_, - Run(Pointee(Property(&ProcessedActionProto::status, ACTION_APPLIED)))); - - Run(); -} - -TEST_F(ClickActionTest, JavaScriptClickSkipsWaitForElementStable) { - Selector expected_selector({"#click"}); - *proto_.mutable_element_to_click() = expected_selector.proto; - proto_.set_click_type(ClickType::JAVASCRIPT); - - ElementFinder::Result expected_element = - test_util::MockFindElement(mock_action_delegate_, expected_selector); - - EXPECT_CALL(mock_web_controller_, WaitUntilElementIsStable(_, _, _, _)) - .Times(0); - EXPECT_CALL(mock_web_controller_, CheckOnTop(_, _)).Times(0); - EXPECT_CALL(mock_web_controller_, - JsClickElement(EqualsElement(expected_element), _)) - .WillOnce(RunOnceCallback<1>(OkClientStatus())); - - EXPECT_CALL( - callback_, - Run(Pointee(Property(&ProcessedActionProto::status, ACTION_APPLIED)))); - Run(); -} - -TEST_F(ClickActionTest, SkipCheckOnTop) { - Selector expected_selector({"#click"}); - *proto_.mutable_element_to_click() = expected_selector.proto; - proto_.set_click_type(ClickType::TAP); - proto_.set_on_top(SKIP_STEP); - - ElementFinder::Result expected_element = - test_util::MockFindElement(mock_action_delegate_, expected_selector); - - EXPECT_CALL(mock_web_controller_, CheckOnTop(_, _)).Times(0); - - EXPECT_CALL( - callback_, - Run(Pointee(Property(&ProcessedActionProto::status, ACTION_APPLIED)))); - Run(); -} - -TEST_F(ClickActionTest, RequireCheckOnTop) { - Selector expected_selector({"#click"}); - *proto_.mutable_element_to_click() = expected_selector.proto; - proto_.set_click_type(ClickType::TAP); - proto_.set_on_top(REQUIRE_STEP_SUCCESS); - - ElementFinder::Result expected_element = - test_util::MockFindElement(mock_action_delegate_, expected_selector); - - InSequence seq; - EXPECT_CALL( - mock_web_controller_, - WaitUntilElementIsStable(_, _, EqualsElement(expected_element), _)); - EXPECT_CALL(mock_web_controller_, - CheckOnTop(EqualsElement(expected_element), _)); - EXPECT_CALL( - mock_web_controller_, - ClickOrTapElement(ClickType::TAP, EqualsElement(expected_element), _)) - .WillOnce(RunOnceCallback<2>(OkClientStatus())); - - EXPECT_CALL( - callback_, - Run(Pointee(Property(&ProcessedActionProto::status, ACTION_APPLIED)))); - Run(); -} - -TEST_F(ClickActionTest, OptionalCheckOnTop) { - Selector expected_selector({"#click"}); - *proto_.mutable_element_to_click() = expected_selector.proto; - proto_.set_click_type(ClickType::TAP); - proto_.set_on_top(REPORT_STEP_RESULT); - - ElementFinder::Result expected_element = - test_util::MockFindElement(mock_action_delegate_, expected_selector); - - InSequence seq; - EXPECT_CALL( - mock_web_controller_, - WaitUntilElementIsStable(_, _, EqualsElement(expected_element), _)); - EXPECT_CALL(mock_web_controller_, - CheckOnTop(EqualsElement(expected_element), _)); - EXPECT_CALL( - mock_web_controller_, - ClickOrTapElement(ClickType::TAP, EqualsElement(expected_element), _)) - .WillOnce(RunOnceCallback<2>(OkClientStatus())); - - EXPECT_CALL( - callback_, - Run(Pointee(Property(&ProcessedActionProto::status, ACTION_APPLIED)))); - Run(); -} - -TEST_F(ClickActionTest, RequiredCheckOnTopFails) { - Selector expected_selector({"#click"}); - *proto_.mutable_element_to_click() = expected_selector.proto; - proto_.set_click_type(ClickType::TAP); - proto_.set_on_top(REQUIRE_STEP_SUCCESS); - - ElementFinder::Result expected_element = - test_util::MockFindElement(mock_action_delegate_, expected_selector); - - // CheckOnTop fails. - EXPECT_CALL(mock_web_controller_, - CheckOnTop(EqualsElement(expected_element), _)) - .WillOnce(RunOnceCallback<1>(NotOnTopStatus())); - - // The action must not tap. - EXPECT_CALL(mock_web_controller_, ClickOrTapElement(_, _, _)).Times(0); - - ProcessedActionProto result; - EXPECT_CALL(callback_, Run(_)).WillOnce(testing::SaveArgPointee<0>(&result)); - Run(); - - EXPECT_EQ(ELEMENT_NOT_ON_TOP, result.status()); - EXPECT_EQ( - WebControllerErrorInfoProto::ON_TOP, - result.status_details().web_controller_error_info().failed_web_action()); -} - -TEST_F(ClickActionTest, OptionalCheckOnTopFails) { - Selector expected_selector({"#click"}); - *proto_.mutable_element_to_click() = expected_selector.proto; - proto_.set_click_type(ClickType::TAP); - proto_.set_on_top(REPORT_STEP_RESULT); - - ElementFinder::Result expected_element = - test_util::MockFindElement(mock_action_delegate_, expected_selector); - - // CheckOnTop fails. - EXPECT_CALL(mock_web_controller_, - CheckOnTop(EqualsElement(expected_element), _)) - .WillOnce(RunOnceCallback<1>(NotOnTopStatus())); - - // The action must tap anyway. - EXPECT_CALL( - mock_web_controller_, - ClickOrTapElement(ClickType::TAP, EqualsElement(expected_element), _)) - .WillOnce(RunOnceCallback<2>(OkClientStatus())); - - ProcessedActionProto result; - EXPECT_CALL(callback_, Run(_)).WillOnce(testing::SaveArgPointee<0>(&result)); - Run(); - - EXPECT_EQ(ACTION_APPLIED, result.status()); - EXPECT_EQ( - WebControllerErrorInfoProto::ON_TOP, - result.status_details().web_controller_error_info().failed_web_action()); - EXPECT_EQ(ELEMENT_NOT_ON_TOP, result.status_details().original_status()); -} - -} // namespace -} // namespace autofill_assistant
diff --git a/components/autofill_assistant/browser/actions/collect_user_data_action.cc b/components/autofill_assistant/browser/actions/collect_user_data_action.cc index 8057bfb..5e1be68 100644 --- a/components/autofill_assistant/browser/actions/collect_user_data_action.cc +++ b/components/autofill_assistant/browser/actions/collect_user_data_action.cc
@@ -762,11 +762,6 @@ collect_user_data.supported_basic_card_networks().end(), std::back_inserter( collect_user_data_options_->supported_basic_card_networks)); - - collect_user_data_options_->shipping_address_name = - collect_user_data.shipping_address_name(); - collect_user_data_options_->request_shipping = - !collect_user_data.shipping_address_name().empty(); collect_user_data_options_->request_payment_method = collect_user_data.request_payment_method(); collect_user_data_options_->require_billing_postal_code = @@ -785,7 +780,6 @@ VLOG(1) << "Required payment method without address name"; return false; } - collect_user_data_options_->credit_card_expired_text = collect_user_data.credit_card_expired_text(); // TODO(b/146195295): Remove fallback and enforce non-empty backend string. @@ -794,6 +788,18 @@ l10n_util::GetStringUTF8( IDS_PAYMENTS_VALIDATION_INVALID_CREDIT_CARD_EXPIRED); } + + collect_user_data_options_->shipping_address_name = + collect_user_data.shipping_address_name(); + collect_user_data_options_->request_shipping = + !collect_user_data.shipping_address_name().empty(); + if (collect_user_data_options_->request_shipping) { + collect_user_data_options_->required_shipping_address_data_pieces = + std::vector<RequiredDataPiece>( + collect_user_data.required_shipping_address_data_piece().begin(), + collect_user_data.required_shipping_address_data_piece().end()); + } + collect_user_data_options_->request_login_choice = collect_user_data.has_login_details(); collect_user_data_options_->login_section_title.assign( @@ -984,8 +990,9 @@ if (collect_user_data_options_->request_shipping) { auto completeAddressIter = std::find_if( profiles.begin(), profiles.end(), [this](const auto* profile) { - return IsCompleteShippingAddress( - profile, *this->collect_user_data_options_.get()); + return user_data::GetShippingAddressValidationErrors( + profile, *this->collect_user_data_options_.get()) + .empty(); }); if (completeAddressIter == profiles.end()) { return false; @@ -1031,7 +1038,9 @@ user_data.selected_address(options.shipping_address_name); return user_data::GetContactValidationErrors(selected_profile, options) .empty() && - IsCompleteShippingAddress(shipping_address, options) && + user_data::GetShippingAddressValidationErrors(shipping_address, + options) + .empty() && IsCompleteCreditCard(user_data.selected_card(), billing_address, options) && IsValidLoginChoice(user_data.login_choice_identifier_, options) && @@ -1317,7 +1326,7 @@ if (!user_data->has_selected_address( collect_user_data_options_->shipping_address_name) && collect_user_data_options_->request_shipping) { - int default_selection = GetDefaultAddressProfile( + int default_selection = user_data::GetDefaultShippingAddressProfile( *collect_user_data_options_, user_data->available_profiles_); if (default_selection != -1) { delegate_->GetUserModel()->SetSelectedAutofillProfile(
diff --git a/components/autofill_assistant/browser/actions/collect_user_data_action_unittest.cc b/components/autofill_assistant/browser/actions/collect_user_data_action_unittest.cc index 99f65c1..f6422c5 100644 --- a/components/autofill_assistant/browser/actions/collect_user_data_action_unittest.cc +++ b/components/autofill_assistant/browser/actions/collect_user_data_action_unittest.cc
@@ -1083,6 +1083,8 @@ CollectUserDataOptions options; options.request_shipping = true; options.shipping_address_name = "shipping_address"; + options.required_shipping_address_data_pieces.push_back( + MakeRequiredDataPiece(autofill::ServerFieldType::EMAIL_ADDRESS)); EXPECT_FALSE(CollectUserDataAction::IsUserDataComplete(user_data, user_model_, options)); @@ -1091,9 +1093,9 @@ user_model_.SetSelectedAutofillProfile( "shipping_address", std::make_unique<autofill::AutofillProfile>(profile), &user_data); - autofill::test::SetProfileInfo(&profile, "Marion", "Mitchell", "Morrison", - "marion@me.xyz", "Fox", "123 Zoo St.", - "unit 5", "Hollywood", "CA", + autofill::test::SetProfileInfo(&profile, "Marion", "Mitchell", "Morrison", "", + "Fox", "123 Zoo St.", "unit 5", "Hollywood", + "CA", /* zipcode = */ "", "US", "16505678910"); user_model_.SetSelectedAutofillProfile( "shipping_address", std::make_unique<autofill::AutofillProfile>(profile), @@ -1101,6 +1103,15 @@ EXPECT_FALSE(CollectUserDataAction::IsUserDataComplete(user_data, user_model_, options)); + // Complete for Assistant but not for AddressEditor. + profile.SetRawInfo(autofill::EMAIL_ADDRESS, u"marion@me.xyz"); + user_model_.SetSelectedAutofillProfile( + "shipping_address", std::make_unique<autofill::AutofillProfile>(profile), + &user_data); + EXPECT_FALSE(CollectUserDataAction::IsUserDataComplete(user_data, user_model_, + options)); + + // Complete. profile.SetRawInfo(autofill::ADDRESS_HOME_ZIP, u"91601"); user_model_.SetSelectedAutofillProfile( "shipping_address", std::make_unique<autofill::AutofillProfile>(profile),
diff --git a/components/autofill_assistant/browser/protocol_utils.cc b/components/autofill_assistant/browser/protocol_utils.cc index 7147e47f..45724fc 100644 --- a/components/autofill_assistant/browser/protocol_utils.cc +++ b/components/autofill_assistant/browser/protocol_utils.cc
@@ -12,7 +12,6 @@ #include "components/autofill_assistant/browser/actions/check_element_tag_action.h" #include "components/autofill_assistant/browser/actions/check_option_element_action.h" #include "components/autofill_assistant/browser/actions/clear_persistent_ui_action.h" -#include "components/autofill_assistant/browser/actions/click_action.h" #include "components/autofill_assistant/browser/actions/collect_user_data_action.h" #include "components/autofill_assistant/browser/actions/configure_bottom_sheet_action.h" #include "components/autofill_assistant/browser/actions/configure_ui_state_action.h" @@ -173,8 +172,6 @@ std::unique_ptr<Action> ProtocolUtils::CreateAction(ActionDelegate* delegate, const ActionProto& action) { switch (action.action_info_case()) { - case ActionProto::ActionInfoCase::kClick: - return std::make_unique<ClickAction>(delegate, action); case ActionProto::ActionInfoCase::kTell: return std::make_unique<TellAction>(delegate, action); case ActionProto::ActionInfoCase::kShowCast:
diff --git a/components/autofill_assistant/browser/protocol_utils_unittest.cc b/components/autofill_assistant/browser/protocol_utils_unittest.cc index fe466bc..865add7 100644 --- a/components/autofill_assistant/browser/protocol_utils_unittest.cc +++ b/components/autofill_assistant/browser/protocol_utils_unittest.cc
@@ -252,7 +252,7 @@ proto.set_global_payload("global_payload"); proto.set_script_payload("script_payload"); proto.add_actions()->mutable_tell(); - proto.add_actions()->mutable_click(); + proto.add_actions()->mutable_highlight_element(); std::string proto_str; proto.SerializeToString(&proto_str);
diff --git a/components/autofill_assistant/browser/script_executor_unittest.cc b/components/autofill_assistant/browser/script_executor_unittest.cc index 8cfed84..b56dc51c 100644 --- a/components/autofill_assistant/browser/script_executor_unittest.cc +++ b/components/autofill_assistant/browser/script_executor_unittest.cc
@@ -73,18 +73,10 @@ test_util::MockFindAnyElement(mock_web_controller_); - // In this test, "tell" actions always succeed and "click" actions, - // always fail. The following makes a click action fail. - ON_CALL(mock_web_controller_, WaitForDocumentReadyState(_, _, _)) - .WillByDefault(RunOnceCallback<2>(OkClientStatus(), DOCUMENT_COMPLETE, - base::TimeDelta::FromSeconds(0))); - ON_CALL(mock_web_controller_, ScrollIntoView(_, _, _)) - .WillByDefault(RunOnceCallback<2>(OkClientStatus())); - ON_CALL(mock_web_controller_, WaitUntilElementIsStable(_, _, _, _)) - .WillByDefault(RunOnceCallback<3>(OkClientStatus(), - base::TimeDelta::FromSeconds(0))); - ON_CALL(mock_web_controller_, ClickOrTapElement(_, _, _)) - .WillByDefault(RunOnceCallback<2>(ClientStatus(UNEXPECTED_JS_ERROR))); + // In this test, "tell" actions always succeed and "highlight element" + // actions always fail. + ON_CALL(mock_web_controller_, HighlightElement(_, _)) + .WillByDefault(RunOnceCallback<1>(ClientStatus(UNEXPECTED_JS_ERROR))); } protected: @@ -227,8 +219,9 @@ TEST_F(ScriptExecutorTest, RunOneActionReportAndReturn) { ActionsResponseProto actions_response; - *actions_response.add_actions()->mutable_click()->mutable_element_to_click() = - ToSelectorProto("will fail"); + *actions_response.add_actions() + ->mutable_highlight_element() + ->mutable_element() = ToSelectorProto("will fail"); EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _, _)) .WillOnce(RunOnceCallback<5>(net::HTTP_OK, Serialize(actions_response))); @@ -773,8 +766,8 @@ initial_actions_response.add_actions()->mutable_tell()->set_message( "will pass"); *initial_actions_response.add_actions() - ->mutable_click() - ->mutable_element_to_click() = ToSelectorProto("will fail"); + ->mutable_highlight_element() + ->mutable_element() = ToSelectorProto("will fail"); initial_actions_response.add_actions()->mutable_tell()->set_message( "never run");
diff --git a/components/autofill_assistant/browser/service.proto b/components/autofill_assistant/browser/service.proto index 5fe6480f..ae36d71 100644 --- a/components/autofill_assistant/browser/service.proto +++ b/components/autofill_assistant/browser/service.proto
@@ -734,7 +734,6 @@ optional bytes server_payload = 4; oneof action_info { - ClickProto click = 5; SetFormFieldValueProto set_form_value = 6; SelectOptionProto select_option = 7; NavigateProto navigate = 9; @@ -794,7 +793,7 @@ // action sent to the client after this one. Default is false. optional bool clean_contextual_ui = 33; - reserved 8, 13 to 17, 20 to 23, 25 to 27, 30, 34, 38, 46 to 48, 50, 51, 71; + reserved 5, 8, 13 to 17, 20 to 23, 25 to 27, 30, 34, 38, 46 to 48, 50, 51, 71; } // Result of |CollectUserDataProto| to be sent to the server. @@ -1376,18 +1375,6 @@ reserved 1 to 8; } -// Contain all arguments to perform a click. -message ClickProto { - optional SelectorProto element_to_click = 1; - optional ClickType click_type = 2; - - // Configure whether click should check whether the element is the topmost - // element before clicking on it. - // - // If set to REQUIRE_STEP_SUCCESS, click might fail with ELEMENT_NOT_ON_TOP. - optional OptionalStep on_top = 3; -} - enum OptionalStep { STEP_UNSPECIFIED = 0; SKIP_STEP = 1; @@ -2350,8 +2337,10 @@ // contact_details.contact_details_name}. NOTE: when clearing the billing // address, the selected credit card should also be cleared! repeated string clear_previous_profile_selection = 30; + // Defines how to evaluate validitiy of an address or credit card. + repeated RequiredDataPiece required_shipping_address_data_piece = 34; - reserved 7, 26, 34 to 36; + reserved 7, 26, 35 to 36; } // Stop Autofill Assistant.
diff --git a/components/autofill_assistant/browser/user_data.h b/components/autofill_assistant/browser/user_data.h index 829df06f..0f21772 100644 --- a/components/autofill_assistant/browser/user_data.h +++ b/components/autofill_assistant/browser/user_data.h
@@ -193,6 +193,7 @@ std::string credit_card_expired_text; std::vector<RequiredDataPiece> required_contact_data_pieces; + std::vector<RequiredDataPiece> required_shipping_address_data_pieces; // If empty, terms and conditions should not be shown. std::string accept_terms_and_conditions_text;
diff --git a/components/autofill_assistant/browser/user_data_util.cc b/components/autofill_assistant/browser/user_data_util.cc index b69fa8e9a..4c7cd70c 100644 --- a/components/autofill_assistant/browser/user_data_util.cc +++ b/components/autofill_assistant/browser/user_data_util.cc
@@ -16,9 +16,11 @@ #include "components/autofill_assistant/browser/field_formatter.h" #include "components/autofill_assistant/browser/url_utils.h" #include "components/autofill_assistant/browser/website_login_manager.h" +#include "components/strings/grit/components_strings.h" #include "third_party/libaddressinput/chromium/addressinput_util.h" #include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_data.h" #include "third_party/re2/src/re2/re2.h" +#include "ui/base/l10n/l10n_util.h" namespace autofill_assistant { namespace { @@ -33,33 +35,6 @@ profile.GetRawInfo(autofill::NAME_LAST)); } -int GetAddressCompletenessRating(const CollectUserDataOptions& options, - const autofill::AutofillProfile& profile) { - auto address_data = autofill::i18n::CreateAddressDataFromAutofillProfile( - profile, kDefaultLocale); - std::multimap<i18n::addressinput::AddressField, - i18n::addressinput::AddressProblem> - problems; - autofill::addressinput::ValidateRequiredFields( - *address_data, /* filter= */ nullptr, &problems); - return -problems.size(); -} - -// Helper function that compares instances of AutofillProfile by completeness -// in regards to the current options. Full profiles should be ordered before -// empty ones and fall back to compare the profile's name in case of equality. -bool CompletenessCompareAddresses(const CollectUserDataOptions& options, - const autofill::AutofillProfile& a, - const autofill::AutofillProfile& b) { - int complete_fields_a = GetAddressCompletenessRating(options, a); - int complete_fields_b = GetAddressCompletenessRating(options, b); - if (complete_fields_a == complete_fields_b) { - return base::i18n::ToLower(GetProfileFullName(a)) - .compare(base::i18n::ToLower(GetProfileFullName(b))) < 0; - } - return complete_fields_a > complete_fields_b; -} - int CountCompletePaymentInstrumentFields(const CollectUserDataOptions& options, const PaymentInstrument& instrument) { int complete_fields = 0; @@ -220,11 +195,56 @@ field_formatter::CreateAutofillMappings(b, kDefaultLocale), options.required_contact_data_pieces) .size(); - if (incomplete_fields_a == incomplete_fields_b) { - return base::i18n::ToLower(GetProfileFullName(a)) - .compare(base::i18n::ToLower(GetProfileFullName(b))) < 0; + if (incomplete_fields_a != incomplete_fields_b) { + return incomplete_fields_a <= incomplete_fields_b; } - return incomplete_fields_a <= incomplete_fields_b; + + return base::i18n::ToLower(GetProfileFullName(a)) + .compare(base::i18n::ToLower(GetProfileFullName(b))) < 0; +} + +int GetAddressEditorCompletenessRating( + const autofill::AutofillProfile& profile) { + auto address_data = autofill::i18n::CreateAddressDataFromAutofillProfile( + profile, kDefaultLocale); + std::multimap<i18n::addressinput::AddressField, + i18n::addressinput::AddressProblem> + problems; + autofill::addressinput::ValidateRequiredFields( + *address_data, /* filter= */ nullptr, &problems); + return problems.size(); +} + +// Helper function that compares instances of AutofillProfile by completeness +// in regards to the current options. Full profiles should be ordered before +// empty ones and fall back to compare the profile's name in case of equality. +bool CompletenessCompareShippingAddresses(const CollectUserDataOptions& options, + const autofill::AutofillProfile& a, + const autofill::AutofillProfile& b) { + // Compare by editor completeness first. This is done because the + // AddressEditor only allows storing addresses it considers complete. + int incomplete_fields_a = GetAddressEditorCompletenessRating(a); + int incomplete_fields_b = GetAddressEditorCompletenessRating(b); + if (incomplete_fields_a != incomplete_fields_b) { + return incomplete_fields_a <= incomplete_fields_b; + } + + incomplete_fields_a = + GetValidationErrors( + field_formatter::CreateAutofillMappings(a, kDefaultLocale), + options.required_shipping_address_data_pieces) + .size(); + incomplete_fields_b = + GetValidationErrors( + field_formatter::CreateAutofillMappings(b, kDefaultLocale), + options.required_shipping_address_data_pieces) + .size(); + if (incomplete_fields_a != incomplete_fields_b) { + return incomplete_fields_a <= incomplete_fields_b; + } + + return base::i18n::ToLower(GetProfileFullName(a)) + .compare(base::i18n::ToLower(GetProfileFullName(b))) < 0; } } // namespace @@ -277,6 +297,59 @@ return sorted_indices[0]; } +std::vector<std::string> GetShippingAddressValidationErrors( + const autofill::AutofillProfile* profile, + const CollectUserDataOptions& collect_user_data_options) { + std::vector<std::string> errors; + if (!collect_user_data_options.request_shipping) { + return errors; + } + + if (!collect_user_data_options.required_shipping_address_data_pieces + .empty()) { + errors = GetValidationErrors( + profile + ? field_formatter::CreateAutofillMappings(*profile, kDefaultLocale) + : std::map<std::string, std::string>(), + collect_user_data_options.required_shipping_address_data_pieces); + } + + // Require address editor completeness if Assistant validation succeeds. If + // Assistant validation fails, the editor has to be opened and requires + // completeness to save the change, do not append the (potentially duplicate) + // error in this case. + if (errors.empty() && (profile == nullptr || + GetAddressEditorCompletenessRating(*profile) != 0)) { + errors.push_back(l10n_util::GetStringUTF8( + IDS_AUTOFILL_ASSISTANT_PAYMENT_INFORMATION_MISSING)); + } + return errors; +} + +std::vector<int> SortShippingAddressesByCompleteness( + const CollectUserDataOptions& collect_user_data_options, + const std::vector<std::unique_ptr<autofill::AutofillProfile>>& profiles) { + std::vector<int> profile_indices(profiles.size()); + std::iota(std::begin(profile_indices), std::end(profile_indices), 0); + std::sort(profile_indices.begin(), profile_indices.end(), + [&collect_user_data_options, &profiles](int i, int j) { + return CompletenessCompareShippingAddresses( + collect_user_data_options, *profiles[i], *profiles[j]); + }); + return profile_indices; +} + +int GetDefaultShippingAddressProfile( + const CollectUserDataOptions& collect_user_data_options, + const std::vector<std::unique_ptr<autofill::AutofillProfile>>& profiles) { + if (profiles.empty()) { + return -1; + } + auto sorted_indices = + SortShippingAddressesByCompleteness(collect_user_data_options, profiles); + return sorted_indices[0]; +} + } // namespace user_data std::unique_ptr<autofill::AutofillProfile> MakeUniqueFromProfile( @@ -288,30 +361,6 @@ return unique_profile; } -std::vector<int> SortAddressesByCompleteness( - const CollectUserDataOptions& collect_user_data_options, - const std::vector<std::unique_ptr<autofill::AutofillProfile>>& profiles) { - std::vector<int> profile_indices(profiles.size()); - std::iota(std::begin(profile_indices), std::end(profile_indices), 0); - std::sort(profile_indices.begin(), profile_indices.end(), - [&collect_user_data_options, &profiles](int i, int j) { - return CompletenessCompareAddresses(collect_user_data_options, - *profiles[i], *profiles[j]); - }); - return profile_indices; -} - -int GetDefaultAddressProfile( - const CollectUserDataOptions& collect_user_data_options, - const std::vector<std::unique_ptr<autofill::AutofillProfile>>& profiles) { - if (profiles.empty()) { - return -1; - } - auto sorted_indices = - SortAddressesByCompleteness(collect_user_data_options, profiles); - return sorted_indices[0]; -} - std::vector<int> SortPaymentInstrumentsByCompleteness( const CollectUserDataOptions& collect_user_data_options, const std::vector<std::unique_ptr<PaymentInstrument>>& @@ -372,13 +421,6 @@ return true; } -bool IsCompleteShippingAddress( - const autofill::AutofillProfile* profile, - const CollectUserDataOptions& collect_user_data_options) { - return !collect_user_data_options.request_shipping || - IsCompleteAddress(profile, /* require_postal_code = */ false); -} - bool IsCompleteCreditCard( const autofill::CreditCard* credit_card, const autofill::AutofillProfile* billing_profile,
diff --git a/components/autofill_assistant/browser/user_data_util.h b/components/autofill_assistant/browser/user_data_util.h index 81e0024d..b408bf0 100644 --- a/components/autofill_assistant/browser/user_data_util.h +++ b/components/autofill_assistant/browser/user_data_util.h
@@ -39,25 +39,29 @@ const CollectUserDataOptions& collect_user_data_options, const std::vector<std::unique_ptr<autofill::AutofillProfile>>& profiles); -} // namespace user_data - -std::unique_ptr<autofill::AutofillProfile> MakeUniqueFromProfile( - const autofill::AutofillProfile& profile); +std::vector<std::string> GetShippingAddressValidationErrors( + const autofill::AutofillProfile* profile, + const CollectUserDataOptions& collect_user_data_options); // Sorts the given autofill profiles based on completeness, and returns a // vector of profile indices in sorted order. Full profiles will be ordered // before empty ones, and for equally complete profiles, this falls back to // sorting based on the profile names. -std::vector<int> SortAddressesByCompleteness( +std::vector<int> SortShippingAddressesByCompleteness( const CollectUserDataOptions& collect_user_data_options, const std::vector<std::unique_ptr<autofill::AutofillProfile>>& profiles); // Get the default selection for the current list of profiles. Returns -1 if no // default selection is possible. -int GetDefaultAddressProfile( +int GetDefaultShippingAddressProfile( const CollectUserDataOptions& collect_user_data_options, const std::vector<std::unique_ptr<autofill::AutofillProfile>>& profiles); +} // namespace user_data + +std::unique_ptr<autofill::AutofillProfile> MakeUniqueFromProfile( + const autofill::AutofillProfile& profile); + // Sorts the given payment instruments by completeness, and returns a vector // of payment instrument indices in sorted order. Full payment instruments will // be ordered before empty ones, and for equally complete payment instruments, @@ -80,10 +84,6 @@ const autofill::AutofillProfile* a, const autofill::AutofillProfile* b); -bool IsCompleteShippingAddress( - const autofill::AutofillProfile* profile, - const CollectUserDataOptions& collect_user_data_options); - bool IsCompleteCreditCard( const autofill::CreditCard* credit_card, const autofill::AutofillProfile* billing_profile,
diff --git a/components/autofill_assistant/browser/user_data_util_unittest.cc b/components/autofill_assistant/browser/user_data_util_unittest.cc index 559b4f3..8480cfd3 100644 --- a/components/autofill_assistant/browser/user_data_util_unittest.cc +++ b/components/autofill_assistant/browser/user_data_util_unittest.cc
@@ -210,12 +210,12 @@ CollectUserDataOptions options; std::vector<int> profile_indices = - autofill_assistant::SortAddressesByCompleteness(options, profiles); + user_data::SortShippingAddressesByCompleteness(options, profiles); EXPECT_THAT(profile_indices, SizeIs(profiles.size())); EXPECT_THAT(profile_indices, ElementsAre(1, 0)); } -TEST(UserDataUtilTest, SortsAddressesByCompleteness) { +TEST(UserDataUtilTest, SortsAddressesByEditorCompleteness) { // Adding email address and phone number to demonstrate that they are not // checked for completeness. auto profile_no_street = std::make_unique<autofill::AutofillProfile>(); @@ -226,7 +226,7 @@ auto profile_complete = std::make_unique<autofill::AutofillProfile>(); autofill::test::SetProfileInfo(profile_complete.get(), "Berta", "", "West", "", "", "Brandschenkestrasse 110", "", - "Zurich", "", "8002", "UK", ""); + "Zurich", "", "8002", "CH", ""); // Specify profiles in reverse order to force sorting. std::vector<std::unique_ptr<autofill::AutofillProfile>> profiles; @@ -236,7 +236,33 @@ CollectUserDataOptions options; std::vector<int> profile_indices = - autofill_assistant::SortAddressesByCompleteness(options, profiles); + user_data::SortShippingAddressesByCompleteness(options, profiles); + EXPECT_THAT(profile_indices, SizeIs(profiles.size())); + EXPECT_THAT(profile_indices, ElementsAre(1, 0)); +} + +TEST(UserDataUtilTest, SortsAddressesByAssistantCompleteness) { + auto profile_no_email = std::make_unique<autofill::AutofillProfile>(); + autofill::test::SetProfileInfo(profile_no_email.get(), "Adam", "", "West", "", + "", "Brandschenkestrasse 110", "", "Zurich", + "", "8002", "CH", ""); + + auto profile_complete = std::make_unique<autofill::AutofillProfile>(); + autofill::test::SetProfileInfo( + profile_complete.get(), "Berta", "", "West", "berta.west@gmail.com", "", + "Brandschenkestrasse 110", "", "Zurich", "", "8002", "CH", ""); + + // Specify profiles in reverse order to force sorting. + std::vector<std::unique_ptr<autofill::AutofillProfile>> profiles; + profiles.emplace_back(std::move(profile_no_email)); + profiles.emplace_back(std::move(profile_complete)); + + CollectUserDataOptions options; + options.required_shipping_address_data_pieces.push_back( + MakeRequiredDataPiece(autofill::ServerFieldType::EMAIL_ADDRESS)); + + std::vector<int> profile_indices = + user_data::SortShippingAddressesByCompleteness(options, profiles); EXPECT_THAT(profile_indices, SizeIs(profiles.size())); EXPECT_THAT(profile_indices, ElementsAre(1, 0)); } @@ -245,7 +271,8 @@ std::vector<std::unique_ptr<autofill::AutofillProfile>> profiles; CollectUserDataOptions options; - EXPECT_THAT(GetDefaultAddressProfile(options, profiles), -1); + EXPECT_THAT(user_data::GetDefaultShippingAddressProfile(options, profiles), + -1); } TEST(UserDataUtilTest, GetDefaultAddressSelectionForCompleteProfiles) { @@ -270,7 +297,8 @@ CollectUserDataOptions options; - EXPECT_THAT(GetDefaultAddressProfile(options, profiles), 1); + EXPECT_THAT(user_data::GetDefaultShippingAddressProfile(options, profiles), + 1); } TEST(UserDataUtilTest, SortsCreditCardsByCompleteness) { @@ -625,25 +653,74 @@ CollectUserDataOptions not_required_options; not_required_options.request_shipping = false; - EXPECT_TRUE(IsCompleteShippingAddress(nullptr, not_required_options)); + EXPECT_THAT(user_data::GetShippingAddressValidationErrors( + nullptr, not_required_options), + IsEmpty()); } -TEST(UserDataUtilTest, CompleteShippingAddressRequired) { +TEST(UserDataUtilTest, CompleteShippingAddressForAssistant) { autofill::AutofillProfile address; CollectUserDataOptions require_shipping_options; require_shipping_options.request_shipping = true; + require_shipping_options.required_shipping_address_data_pieces.push_back( + MakeRequiredDataPiece( + autofill::ServerFieldType::ADDRESS_HOME_STREET_ADDRESS)); + require_shipping_options.required_shipping_address_data_pieces.push_back( + MakeRequiredDataPiece(autofill::ServerFieldType::ADDRESS_HOME_ZIP)); + require_shipping_options.required_shipping_address_data_pieces.push_back( + MakeRequiredDataPiece(autofill::ServerFieldType::ADDRESS_HOME_COUNTRY)); + EXPECT_THAT(user_data::GetShippingAddressValidationErrors( + nullptr, require_shipping_options), + ElementsAre("77", "35", "36")); autofill::test::SetProfileInfo(&address, "John", "", "Doe", "john.doe@gmail.com", "", /* address1= */ "", /* address2= */ "", /* city= */ "", /* state= */ "", /* zip_code= */ "", - /* country= */ "", "+41"); - EXPECT_FALSE(IsCompleteShippingAddress(&address, require_shipping_options)); + /* country= */ "", /* phone= */ ""); + EXPECT_THAT(user_data::GetShippingAddressValidationErrors( + &address, require_shipping_options), + ElementsAre("77", "35", "36")); + autofill::test::SetProfileInfo(&address, "John", "", "Doe", + /* email= */ "", "", "Brandschenkestrasse 110", + "", "Zurich", "Zurich", /* zip_code= */ "", + "CH", + /* phone= */ ""); + EXPECT_THAT(user_data::GetShippingAddressValidationErrors( + &address, require_shipping_options), + ElementsAre("35")); autofill::test::SetProfileInfo(&address, "John", "", "Doe", /* email= */ "", "", "Brandschenkestrasse 110", "", "Zurich", "Zurich", "8002", "CH", /* phone= */ ""); - EXPECT_TRUE(IsCompleteShippingAddress(&address, require_shipping_options)); + EXPECT_THAT(user_data::GetShippingAddressValidationErrors( + &address, require_shipping_options), + IsEmpty()); +} + +TEST(UserDataUtilTest, CompleteShippingAddressForEditor) { + autofill::AutofillProfile address; + CollectUserDataOptions require_shipping_options; + require_shipping_options.request_shipping = true; + + EXPECT_THAT(user_data::GetShippingAddressValidationErrors( + nullptr, require_shipping_options), + ElementsAre(_)); + autofill::test::SetProfileInfo(&address, "John", "", "Doe", + /* email= */ "", "", "Brandschenkestrasse 110", + "", "Zurich", "Zurich", /* zip_code= */ "", + "CH", + /* phone= */ ""); + EXPECT_THAT(user_data::GetShippingAddressValidationErrors( + &address, require_shipping_options), + ElementsAre(_)); + autofill::test::SetProfileInfo(&address, "John", "", "Doe", + /* email= */ "", "", "Brandschenkestrasse 110", + "", "Zurich", "Zurich", "8002", "CH", + /* phone= */ ""); + EXPECT_THAT(user_data::GetShippingAddressValidationErrors( + &address, require_shipping_options), + IsEmpty()); } TEST(UserDataUtilTest, CompleteCreditCardNotRequired) {
diff --git a/components/autofill_assistant_strings.grdp b/components/autofill_assistant_strings.grdp index 30c1712..aa52aff 100644 --- a/components/autofill_assistant_strings.grdp +++ b/components/autofill_assistant_strings.grdp
@@ -3,6 +3,9 @@ <message name="IDS_AUTOFILL_ASSISTANT_PAYMENT_INFO_CONFIRM" desc="Text on the payment request primary button to confirm payment information [CHAR_LIMIT=32]"> Continue </message> + <message name="IDS_AUTOFILL_ASSISTANT_PAYMENT_INFORMATION_MISSING" desc="Text label that is shown when a payment request entry (e.g., contact details or payment method) is incomplete."> + Information missing + </message> <message name="IDS_AUTOFILL_ASSISTANT_DEFAULT_ERROR" desc="Text label that is shown when autofill assistant cannot help anymore, because something went wrong."> Sorry, something went wrong. </message>
diff --git a/components/autofill_assistant_strings_grdp/IDS_AUTOFILL_ASSISTANT_PAYMENT_INFORMATION_MISSING.png.sha1 b/components/autofill_assistant_strings_grdp/IDS_AUTOFILL_ASSISTANT_PAYMENT_INFORMATION_MISSING.png.sha1 new file mode 100644 index 0000000..0c2f0378 --- /dev/null +++ b/components/autofill_assistant_strings_grdp/IDS_AUTOFILL_ASSISTANT_PAYMENT_INFORMATION_MISSING.png.sha1
@@ -0,0 +1 @@ +a9e1c5e944e0445776057beb4d5193e39514e77a \ No newline at end of file
diff --git a/components/browser_ui/strings/android/browser_ui_strings.grd b/components/browser_ui/strings/android/browser_ui_strings.grd index 04731069..a0932972 100644 --- a/components/browser_ui/strings/android/browser_ui_strings.grd +++ b/components/browser_ui/strings/android/browser_ui_strings.grd
@@ -794,6 +794,20 @@ New icon </message> + <!-- WebApk name/icon report abuse dialog --> + <message name="IDS_WEBAPK_REPORT_ABUSE_DIALOG_TITLE" desc="The title at the top of the report abuse dialog."> + Uninstall '<ph name="APP_NAME">%1$s<ex>Google App</ex></ph>'? + </message> + <message name="IDS_WEBAPK_REPORT_ABUSE_CHECKBOX" desc="The label for the box you check when you want to report an app for abuse."> + Report abuse + </message> + <message name="IDS_WEBAPK_REPORT_ABUSE_CONFIRM" desc="The text within the confirmation button of the report abuse dialog."> + Uninstall + </message> + <message name="IDS_WEBAPK_REPORT_ABUSE_CANCEL" desc="The text within the cancelation button of the report abuse dialog."> + Cancel + </message> + <!-- Messages --> <message name="IDS_MESSAGE_SCREEN_POSITION" desc="Accessibility label to inform users about the Message location"> Option available near top of the screen
diff --git a/components/browser_ui/strings/android/browser_ui_strings_grd/IDS_WEBAPK_REPORT_ABUSE_CANCEL.png.sha1 b/components/browser_ui/strings/android/browser_ui_strings_grd/IDS_WEBAPK_REPORT_ABUSE_CANCEL.png.sha1 new file mode 100644 index 0000000..f66b1d1 --- /dev/null +++ b/components/browser_ui/strings/android/browser_ui_strings_grd/IDS_WEBAPK_REPORT_ABUSE_CANCEL.png.sha1
@@ -0,0 +1 @@ +528a4e20e50d8d90edcd24b9bd747ce76423cf92 \ No newline at end of file
diff --git a/components/browser_ui/strings/android/browser_ui_strings_grd/IDS_WEBAPK_REPORT_ABUSE_CHECKBOX.png.sha1 b/components/browser_ui/strings/android/browser_ui_strings_grd/IDS_WEBAPK_REPORT_ABUSE_CHECKBOX.png.sha1 new file mode 100644 index 0000000..f66b1d1 --- /dev/null +++ b/components/browser_ui/strings/android/browser_ui_strings_grd/IDS_WEBAPK_REPORT_ABUSE_CHECKBOX.png.sha1
@@ -0,0 +1 @@ +528a4e20e50d8d90edcd24b9bd747ce76423cf92 \ No newline at end of file
diff --git a/components/browser_ui/strings/android/browser_ui_strings_grd/IDS_WEBAPK_REPORT_ABUSE_CONFIRM.png.sha1 b/components/browser_ui/strings/android/browser_ui_strings_grd/IDS_WEBAPK_REPORT_ABUSE_CONFIRM.png.sha1 new file mode 100644 index 0000000..f66b1d1 --- /dev/null +++ b/components/browser_ui/strings/android/browser_ui_strings_grd/IDS_WEBAPK_REPORT_ABUSE_CONFIRM.png.sha1
@@ -0,0 +1 @@ +528a4e20e50d8d90edcd24b9bd747ce76423cf92 \ No newline at end of file
diff --git a/components/browser_ui/strings/android/browser_ui_strings_grd/IDS_WEBAPK_REPORT_ABUSE_DIALOG_TITLE.png.sha1 b/components/browser_ui/strings/android/browser_ui_strings_grd/IDS_WEBAPK_REPORT_ABUSE_DIALOG_TITLE.png.sha1 new file mode 100644 index 0000000..f66b1d1 --- /dev/null +++ b/components/browser_ui/strings/android/browser_ui_strings_grd/IDS_WEBAPK_REPORT_ABUSE_DIALOG_TITLE.png.sha1
@@ -0,0 +1 @@ +528a4e20e50d8d90edcd24b9bd747ce76423cf92 \ No newline at end of file
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb index 6f3e60c7..6660b24 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb
@@ -74,7 +74,7 @@ <translation id="2822354292072154809">మీరు <ph name="CHOSEN_OBJECT_NAME" /> కోసం అన్ని సైట్ అనుమతులను ఖచ్చితంగా రీసెట్ చేయాలనుకుంటున్నారా ?</translation> <translation id="2870560284913253234">సైట్</translation> <translation id="2874939134665556319">మునుపటి ట్రాక్</translation> -<translation id="2903493209154104877">చిరునామాలు</translation> +<translation id="2903493209154104877">అడ్రస్లు</translation> <translation id="2910701580606108292">సైట్లు రక్షిత కంటెంట్ను ప్లే చేయడానికి ముందు అనుమతి కోసం అడుగుతాయి</translation> <translation id="2913331724188855103">కుక్కీ డేటాను సేవ్ చేయడానికి, చదవడానికి సైట్లను అనుమతిస్తుంది (సిఫార్సు చేయబడింది)</translation> <translation id="2968755619301702150">ప్రమాణపత్రం వ్యూయర్</translation>
diff --git a/components/content_creation/notes/android/java/src/org/chromium/components/content_creation/notes/bridges/NoteTemplateConversionBridge.java b/components/content_creation/notes/android/java/src/org/chromium/components/content_creation/notes/bridges/NoteTemplateConversionBridge.java index 4203d87..f2eda435 100644 --- a/components/content_creation/notes/android/java/src/org/chromium/components/content_creation/notes/bridges/NoteTemplateConversionBridge.java +++ b/components/content_creation/notes/android/java/src/org/chromium/components/content_creation/notes/bridges/NoteTemplateConversionBridge.java
@@ -48,10 +48,10 @@ } @CalledByNative - private static TextStyle createTextStyle( - String fontName, @ColorInt int fontColor, int weight, boolean allCaps, int alignment) { - return new TextStyle( - fontName, fontColor, weight, allCaps, TextAlignment.fromInteger(alignment)); + private static TextStyle createTextStyle(String fontName, @ColorInt int fontColor, int weight, + boolean allCaps, int alignment, @ColorInt int highlightColor) { + return new TextStyle(fontName, fontColor, weight, allCaps, + TextAlignment.fromInteger(alignment), highlightColor); } @CalledByNative @@ -66,10 +66,10 @@ */ @CalledByNative private static NoteTemplate createTemplateAndMaybeAddToList(@Nullable List<NoteTemplate> list, - int id, String localizedName, Background mainBackground, TextStyle textStyle, - FooterStyle footerStyle) { - NoteTemplate template = - new NoteTemplate(id, localizedName, mainBackground, textStyle, footerStyle); + int id, String localizedName, Background mainBackground, Background contentBackground, + TextStyle textStyle, FooterStyle footerStyle) { + NoteTemplate template = new NoteTemplate( + id, localizedName, mainBackground, contentBackground, textStyle, footerStyle); if (list != null) { list.add(template);
diff --git a/components/content_creation/notes/android/java/src/org/chromium/components/content_creation/notes/models/NoteTemplate.java b/components/content_creation/notes/android/java/src/org/chromium/components/content_creation/notes/models/NoteTemplate.java index f37f497d..b3524ac7 100644 --- a/components/content_creation/notes/android/java/src/org/chromium/components/content_creation/notes/models/NoteTemplate.java +++ b/components/content_creation/notes/android/java/src/org/chromium/components/content_creation/notes/models/NoteTemplate.java
@@ -8,19 +8,23 @@ * Model class for note templates. */ public class NoteTemplate { - /** The localized name of this template. */ + /** Required. */ public final int id; public final String localizedName; public final Background mainBackground; public final TextStyle textStyle; public final FooterStyle footerStyle; + /** Optional. */ + public final Background contentBackground; + /** Constructor. */ public NoteTemplate(int id, String localizedName, Background mainBackground, - TextStyle textStyle, FooterStyle footerStyle) { + Background contentBackground, TextStyle textStyle, FooterStyle footerStyle) { this.id = id; this.localizedName = localizedName; this.mainBackground = mainBackground; + this.contentBackground = contentBackground; this.textStyle = textStyle; this.footerStyle = footerStyle; }
diff --git a/components/content_creation/notes/android/java/src/org/chromium/components/content_creation/notes/models/TextStyle.java b/components/content_creation/notes/android/java/src/org/chromium/components/content_creation/notes/models/TextStyle.java index 3cdb36a..853be12 100644 --- a/components/content_creation/notes/android/java/src/org/chromium/components/content_creation/notes/models/TextStyle.java +++ b/components/content_creation/notes/android/java/src/org/chromium/components/content_creation/notes/models/TextStyle.java
@@ -15,14 +15,29 @@ public final int weight; public final boolean allCaps; public final TextAlignment alignment; + public final @ColorInt int highlightColor; /** Constructor. */ public TextStyle(String fontName, @ColorInt int fontColor, int weight, boolean allCaps, - TextAlignment alignment) { + TextAlignment alignment, @ColorInt int highlightColor) { this.fontName = fontName; this.fontColor = fontColor; this.weight = weight; this.allCaps = allCaps; this.alignment = alignment; + + if (highlightColor > 0) { + this.highlightColor = highlightColor; + } else { + this.highlightColor = 0; + } + } + + /** + * Returns true if this text style specifies a highlight color to draw behind the + * text but on top of background colors. + */ + public boolean hasHighlightColor() { + return this.highlightColor > 0; } }
diff --git a/components/content_creation/notes/android/note_template_conversion_bridge.cc b/components/content_creation/notes/android/note_template_conversion_bridge.cc index 1d1be9f..eeaaa2a 100644 --- a/components/content_creation/notes/android/note_template_conversion_bridge.cc +++ b/components/content_creation/notes/android/note_template_conversion_bridge.cc
@@ -19,8 +19,8 @@ ScopedJavaLocalRef<jobject> CreateJavaBackground(JNIEnv* env, const Background& background) { if (background.is_linear_gradient()) { - const std::vector<int> int_colors(background.colors()->begin(), - background.colors()->end()); + const std::vector<int> int_colors(background.colors().begin(), + background.colors().end()); ScopedJavaLocalRef<jintArray> int_array = base::android::ToJavaIntArray(env, int_colors); @@ -36,7 +36,8 @@ return Java_NoteTemplateConversionBridge_createTextStyle( env, ConvertUTF8ToJavaString(env, text_style.font_name()), text_style.font_color(), text_style.weight(), text_style.all_caps(), - static_cast<uint16_t>(text_style.alignment())); + static_cast<uint16_t>(text_style.alignment()), + text_style.highlight_color()); } ScopedJavaLocalRef<jobject> CreateJavaFooterStyle( @@ -50,14 +51,22 @@ JNIEnv* env, ScopedJavaLocalRef<jobject> jlist, const NoteTemplate& note_template) { - auto jbackground = CreateJavaBackground(env, note_template.main_background()); + auto jmain_background = + CreateJavaBackground(env, note_template.main_background()); + + ScopedJavaLocalRef<jobject> jcontent_background = nullptr; + const Background* content_background = note_template.content_background(); + if (content_background) { + jcontent_background = CreateJavaBackground(env, *content_background); + } + auto jtext_style = CreateJavaTextStyle(env, note_template.text_style()); auto jfooter_style = CreateJavaFooterStyle(env, note_template.footer_style()); return Java_NoteTemplateConversionBridge_createTemplateAndMaybeAddToList( env, jlist, static_cast<uint32_t>(note_template.id()), - ConvertUTF8ToJavaString(env, note_template.localized_name()), jbackground, - jtext_style, jfooter_style); + ConvertUTF8ToJavaString(env, note_template.localized_name()), + jmain_background, jcontent_background, jtext_style, jfooter_style); } } // namespace
diff --git a/components/content_creation/notes/core/templates/note_template.cc b/components/content_creation/notes/core/templates/note_template.cc index e880dbb..cb64210 100644 --- a/components/content_creation/notes/core/templates/note_template.cc +++ b/components/content_creation/notes/core/templates/note_template.cc
@@ -17,11 +17,30 @@ text_style_(text_style), footer_style_(footer_style) {} +NoteTemplate::NoteTemplate(NoteTemplateIds id, + const std::string& localized_name, + const Background& main_background, + const Background& content_background, + const TextStyle& text_style, + const FooterStyle& footer_style) + : id_(id), + localized_name_(localized_name), + main_background_(main_background), + content_background_(content_background), + text_style_(text_style), + footer_style_(footer_style) {} + NoteTemplate::NoteTemplate(const NoteTemplate& other) : id_(other.id()), localized_name_(other.localized_name()), main_background_(other.main_background()), text_style_(other.text_style()), - footer_style_(other.footer_style()) {} + footer_style_(other.footer_style()) { + if (other.content_background()) { + content_background_ = *other.content_background(); + } +} + +NoteTemplate::~NoteTemplate() = default; } // namespace content_creation
diff --git a/components/content_creation/notes/core/templates/note_template.h b/components/content_creation/notes/core/templates/note_template.h index 3e79e49..de1c9c5 100644 --- a/components/content_creation/notes/core/templates/note_template.h +++ b/components/content_creation/notes/core/templates/note_template.h
@@ -8,25 +8,41 @@ #include <vector> #include "components/content_creation/notes/core/templates/template_types.h" +#include "third_party/abseil-cpp/absl/types/optional.h" namespace content_creation { // Contains the information required to be able to render a note. class NoteTemplate { public: + // Constructor for a basic NoteTemplate. explicit NoteTemplate(NoteTemplateIds id, const std::string& localized_name, - const Background& background, + const Background& main_background, + const TextStyle& text_style, + const FooterStyle& footer_style); + + // Constructor for a NoteTemplate with a content background. + explicit NoteTemplate(NoteTemplateIds id, + const std::string& localized_name, + const Background& main_background, + const Background& content_background, const TextStyle& text_style, const FooterStyle& footer_style); NoteTemplate(const NoteTemplate& other); + ~NoteTemplate(); + NoteTemplateIds id() const { return id_; } - const std::string localized_name() const { return localized_name_; } - const Background main_background() const { return main_background_; } - const TextStyle text_style() const { return text_style_; } - const FooterStyle footer_style() const { return footer_style_; } + const std::string& localized_name() const { return localized_name_; } + const Background& main_background() const { return main_background_; } + const Background* content_background() const { + return content_background_.has_value() ? &content_background_.value() + : nullptr; + } + const TextStyle& text_style() const { return text_style_; } + const FooterStyle& footer_style() const { return footer_style_; } private: // The template's identifier. @@ -38,6 +54,10 @@ // Styling of the main background. Background main_background_; + // Styling of the content's background, drawn on top of the main background + // but behind the main text. + absl::optional<Background> content_background_; + // Styling of the main text. TextStyle text_style_;
diff --git a/components/content_creation/notes/core/templates/template_constants.cc b/components/content_creation/notes/core/templates/template_constants.cc index 66fdae10..881c009 100644 --- a/components/content_creation/notes/core/templates/template_constants.cc +++ b/components/content_creation/notes/core/templates/template_constants.cc
@@ -16,12 +16,15 @@ const char kBebasNeueFontName[] = "Bebas Neue"; const char kMansalvaFontName[] = "Mansalva"; const char kRobotoCondensedFontName[] = "Roboto Condensed"; +const char kRockSaltFontName[] = "Rock Salt"; const char kSourceSerifProFontName[] = "Source Serif Pro"; +const ARGBColor kBlue900Color = 0xFF174EA6; const ARGBColor kGreen50Color = 0xFFE6F4EA; const ARGBColor kGreen900Color = 0xFF0D652D; const ARGBColor kGrey200Color = 0xFFE8EAED; const ARGBColor kGrey900Color = 0xFF202124; +const ARGBColor kRed500Color = 0xFFEA4335; const ARGBColor kYellow400Color = 0xFFFCC934; const ARGBColor kWhiteColor = 0xFFFFFFFF; @@ -64,6 +67,19 @@ /*footer_style=*/CreateDarkBackgroundFooterStyle()); } +// TODO(crbug.com/1194168): Add background image support. +NoteTemplate GetFriendlyTemplate() { + return NoteTemplate( + /*id=*/NoteTemplateIds::kFriendly, + l10n_util::GetStringUTF8( + IDS_CONTENT_CREATION_NOTE_TEMPLATE_NAME_FRIENDLY), + Background(/*color=*/0XFFF3E8FD), + TextStyle(kRockSaltFontName, + /*font_color=*/kGrey900Color, k400Weight, + /*all_caps=*/false, TextAlignment::kStart), + /*footer_style=*/CreateLightBackgroundFooterStyle()); +} + NoteTemplate GetFreshTemplate() { return NoteTemplate( /*id=*/NoteTemplateIds::kFresh, @@ -88,7 +104,7 @@ } NoteTemplate GetImpactfulTemplate() { - // TODO(crbug.com/1194168): Add text background color. + // TODO(crbug.com/1194168): Add offset text highlights support. return NoteTemplate( /*id=*/NoteTemplateIds::kImpactful, l10n_util::GetStringUTF8( @@ -100,6 +116,32 @@ /*footer_style=*/CreateLightBackgroundFooterStyle()); } +NoteTemplate GetLovelyTemplate() { + return NoteTemplate( + /*id=*/NoteTemplateIds::kLovely, + l10n_util::GetStringUTF8(IDS_CONTENT_CREATION_NOTE_TEMPLATE_NAME_LOVELY), + /*main_background=*/ + Background(/*colors=*/{0xFFCEF9FF, 0xFFF1DFFF}, + LinearGradientDirection::kTopRightToBottomLeft), + /*content_background=*/Background(/*color=*/kWhiteColor), + TextStyle(kSourceSerifProFontName, + /*font_color=*/kBlackColor, k400Weight, + /*all_caps=*/false, TextAlignment::kCenter), + /*footer_style=*/CreateLightBackgroundFooterStyle()); +} + +NoteTemplate GetGroovyTemplate() { + return NoteTemplate( + /*id=*/NoteTemplateIds::kGroovy, + l10n_util::GetStringUTF8(IDS_CONTENT_CREATION_NOTE_TEMPLATE_NAME_GROOVY), + Background(/*color=*/kRed500Color), + TextStyle(kBebasNeueFontName, + /*font_color=*/kYellow400Color, k400Weight, + /*all_caps=*/true, TextAlignment::kStart, + /*highlight_color=*/kBlue900Color), + /*footer_style=*/CreateDarkBackgroundFooterStyle()); +} + NoteTemplate GetMonochromeTemplate() { return NoteTemplate( /*id=*/NoteTemplateIds::kMonochrome, @@ -113,7 +155,7 @@ } NoteTemplate GetBoldTemplate() { - // TODO(crbug.com/1194168): Add text background color. + // TODO(crbug.com/1194168): Add offset text highlights support. return NoteTemplate( /*id=*/NoteTemplateIds::kBold, l10n_util::GetStringUTF8(IDS_CONTENT_CREATION_NOTE_TEMPLATE_NAME_BOLD),
diff --git a/components/content_creation/notes/core/templates/template_constants.h b/components/content_creation/notes/core/templates/template_constants.h index 9d82bdad..bf85c42 100644 --- a/components/content_creation/notes/core/templates/template_constants.h +++ b/components/content_creation/notes/core/templates/template_constants.h
@@ -9,11 +9,12 @@ namespace content_creation { -// TODO(crbug.com/1194168): Add missing templates: Friendly, Lovely, and Groovy. - // Returns a NoteTemplate with the Classic style. NoteTemplate GetClassicTemplate(); +// Returns a NoteTemplate with the Friendly style. +NoteTemplate GetFriendlyTemplate(); + // Returns a NoteTemplate with the Fresh style. NoteTemplate GetFreshTemplate(); @@ -23,6 +24,12 @@ // Returns a NoteTemplate with the Impactful style. NoteTemplate GetImpactfulTemplate(); +// Returns a NoteTemplate with the Lovely style. +NoteTemplate GetLovelyTemplate(); + +// Returns a NoteTemplate with the Groovy style. +NoteTemplate GetGroovyTemplate(); + // Returns a NoteTemplate with the Monochrome style. NoteTemplate GetMonochromeTemplate();
diff --git a/components/content_creation/notes/core/templates/template_store.cc b/components/content_creation/notes/core/templates/template_store.cc index 2f00676..828f2fe 100644 --- a/components/content_creation/notes/core/templates/template_store.cc +++ b/components/content_creation/notes/core/templates/template_store.cc
@@ -28,9 +28,9 @@ } std::vector<NoteTemplate> TemplateStore::BuildTemplates() { - return {GetClassicTemplate(), GetFreshTemplate(), - GetPowerfulTemplate(), GetImpactfulTemplate(), - GetMonochromeTemplate(), GetBoldTemplate(), + return {GetClassicTemplate(), GetFriendlyTemplate(), GetFreshTemplate(), + GetPowerfulTemplate(), GetImpactfulTemplate(), GetLovelyTemplate(), + GetGroovyTemplate(), GetMonochromeTemplate(), GetBoldTemplate(), GetDreamyTemplate()}; }
diff --git a/components/content_creation/notes/core/templates/template_store_unittest.cc b/components/content_creation/notes/core/templates/template_store_unittest.cc index 4bbde02..a9172a7 100644 --- a/components/content_creation/notes/core/templates/template_store_unittest.cc +++ b/components/content_creation/notes/core/templates/template_store_unittest.cc
@@ -49,7 +49,7 @@ template_store_->GetTemplates(base::BindLambdaForTesting( [&run_loop, this](std::vector<NoteTemplate> templates) { - EXPECT_EQ(7U, templates.size()); + EXPECT_EQ(10U, templates.size()); ValidateTemplates(templates);
diff --git a/components/content_creation/notes/core/templates/template_types.cc b/components/content_creation/notes/core/templates/template_types.cc index 8336d4d..182942b 100644 --- a/components/content_creation/notes/core/templates/template_types.cc +++ b/components/content_creation/notes/core/templates/template_types.cc
@@ -27,7 +27,7 @@ Background::Background(const Background& other) { if (other.is_linear_gradient()) { is_linear_gradient_ = true; - colors_ = *other.colors(); + colors_ = other.colors(); direction_ = other.direction(); } else { is_linear_gradient_ = false; @@ -46,7 +46,21 @@ font_color_(font_color), weight_(weight), all_caps_(all_caps), - alignment_(alignment) {} + alignment_(alignment), + highlight_color_(0U) {} + +TextStyle::TextStyle(const std::string& font_name, + ARGBColor font_color, + uint16_t weight, + bool all_caps, + TextAlignment alignment, + ARGBColor highlight_color) + : font_name_(font_name), + font_color_(font_color), + weight_(weight), + all_caps_(all_caps), + alignment_(alignment), + highlight_color_(highlight_color) {} FooterStyle::FooterStyle(ARGBColor text_color, ARGBColor logo_color) : text_color_(text_color), logo_color_(logo_color) {}
diff --git a/components/content_creation/notes/core/templates/template_types.h b/components/content_creation/notes/core/templates/template_types.h index 4b5f2fd..6a2dfc1 100644 --- a/components/content_creation/notes/core/templates/template_types.h +++ b/components/content_creation/notes/core/templates/template_types.h
@@ -54,7 +54,7 @@ ARGBColor color() const { return color_; } - const std::vector<ARGBColor>* colors() const { return &colors_; } + const std::vector<ARGBColor>& colors() const { return colors_; } LinearGradientDirection direction() const { return direction_; } bool is_linear_gradient() const { return is_linear_gradient_; } @@ -81,11 +81,19 @@ bool all_caps, TextAlignment alignment); - const std::string font_name() const { return font_name_; } + explicit TextStyle(const std::string& font_name, + ARGBColor font_color, + uint16_t weight, + bool all_caps, + TextAlignment alignment, + ARGBColor highlight_color); + + const std::string& font_name() const { return font_name_; } ARGBColor font_color() const { return font_color_; } uint16_t weight() const { return weight_; } bool all_caps() const { return all_caps_; } TextAlignment alignment() const { return alignment_; } + ARGBColor highlight_color() const { return highlight_color_; } private: std::string font_name_; @@ -93,6 +101,7 @@ uint16_t weight_; bool all_caps_; TextAlignment alignment_; + ARGBColor highlight_color_; }; // Parameters to control the appearance of the elements in a note's footer.
diff --git a/components/content_settings/browser/ui/cookie_controls_controller.cc b/components/content_settings/browser/ui/cookie_controls_controller.cc index 2676603a..f82382e 100644 --- a/components/content_settings/browser/ui/cookie_controls_controller.cc +++ b/components/content_settings/browser/ui/cookie_controls_controller.cc
@@ -109,8 +109,8 @@ bool CookieControlsController::FirstPartyCookiesBlocked() { const GURL& url = GetWebContents()->GetURL(); - return !cookie_settings_->IsCookieAccessAllowed(url, url, - url::Origin::Create(url)); + return !cookie_settings_->IsFullCookieAccessAllowed(url, url, + url::Origin::Create(url)); } int CookieControlsController::GetAllowedCookieCount() {
diff --git a/components/content_settings/core/common/cookie_settings_base.cc b/components/content_settings/core/common/cookie_settings_base.cc index d93ee1ae..c7d115b4b 100644 --- a/components/content_settings/core/common/cookie_settings_base.cc +++ b/components/content_settings/core/common/cookie_settings_base.cc
@@ -71,6 +71,13 @@ bool CookieSettingsBase::IsCookieAccessAllowed( const GURL& url, const GURL& first_party_url) const { + // TODO(https://crbug.com/1203706): remove this after migrating all callers. + return IsFullCookieAccessAllowed(url, first_party_url); +} + +bool CookieSettingsBase::IsFullCookieAccessAllowed( + const GURL& url, + const GURL& first_party_url) const { #if !defined(OS_IOS) // IOS uses this method with an empty |first_party_url| but we don't have // content settings on IOS, so it does not matter. @@ -83,6 +90,14 @@ const GURL& url, const GURL& site_for_cookies, const absl::optional<url::Origin>& top_frame_origin) const { + // TODO(https://crbug.com/1203706): remove after migrating all callers. + return IsFullCookieAccessAllowed(url, site_for_cookies, top_frame_origin); +} + +bool CookieSettingsBase::IsFullCookieAccessAllowed( + const GURL& url, + const GURL& site_for_cookies, + const absl::optional<url::Origin>& top_frame_origin) const { ContentSetting setting = GetCookieSettingInternal( url, top_frame_origin ? top_frame_origin->GetURL() : site_for_cookies, IsThirdPartyRequest(url, site_for_cookies), nullptr);
diff --git a/components/content_settings/core/common/cookie_settings_base.h b/components/content_settings/core/common/cookie_settings_base.h index de17a2bc..ed5dd8b 100644 --- a/components/content_settings/core/common/cookie_settings_base.h +++ b/components/content_settings/core/common/cookie_settings_base.h
@@ -87,8 +87,10 @@ // DEPRECATED: Replace with IsCookieAccessAllowed(GURL, GURL, Origin). bool IsCookieAccessAllowed(const GURL& url, const GURL& first_party_url) const; + bool IsFullCookieAccessAllowed(const GURL& url, + const GURL& first_party_url) const; - // Similar to IsCookieAccessAllowed(GURL, GURL) but provides a mechanism + // Similar to IsFullCookieAccessAllowed(GURL, GURL) but provides a mechanism // to specify a separate |site_for_cookies|, which is used to determine // whether a request is in a third_party context and |top_frame_origin|, which // is used to check if there are any content_settings exceptions. @@ -98,6 +100,10 @@ const GURL& url, const GURL& site_for_cookies, const absl::optional<url::Origin>& top_frame_origin) const; + bool IsFullCookieAccessAllowed( + const GURL& url, + const GURL& site_for_cookies, + const absl::optional<url::Origin>& top_frame_origin) const; // Returns true if the cookie set by a page identified by |url| should be // session only. Querying this only makes sense if |IsCookieAccessAllowed|
diff --git a/components/exo/data_exchange_delegate.h b/components/exo/data_exchange_delegate.h index 4bbd623d..3a70767 100644 --- a/components/exo/data_exchange_delegate.h +++ b/components/exo/data_exchange_delegate.h
@@ -67,14 +67,6 @@ const base::Pickle& pickle, SendDataCallback callback) = 0; - // Reads filenames from text/uri-list |data| which was provided by |source| - // endpoint. Translates paths into filesystem URLs suitable for FilesApp by - // setting custom mime type fs/tag to 'exo' and fs/sources with - // newline-separated filesystem URLs. - virtual base::Pickle CreateClipboardFilenamesPickle( - ui::EndpointType source, - const std::vector<uint8_t>& data) const = 0; - // Reads pickle for FilesApp fs/sources with newline-separated filesystem // URLs. Validates that |source| is FilesApp. virtual std::vector<ui::FileInfo> ParseFileSystemSources(
diff --git a/components/exo/seat.cc b/components/exo/seat.cc index 363f070..dd09411 100644 --- a/components/exo/seat.cc +++ b/components/exo/seat.cc
@@ -11,7 +11,6 @@ #include "base/barrier_closure.h" #include "base/bind.h" #include "base/callback_helpers.h" -#include "base/feature_list.h" #include "base/memory/weak_ptr.h" #include "base/pickle.h" #include "base/strings/utf_string_conversions.h" @@ -32,7 +31,6 @@ #include "ui/base/clipboard/clipboard_monitor.h" #include "ui/base/clipboard/scoped_clipboard_writer.h" #include "ui/base/data_transfer_policy/data_transfer_endpoint.h" -#include "ui/base/ui_base_features.h" #include "ui/events/event_utils.h" #include "ui/events/platform/platform_event_source.h" #include "ui/gfx/geometry/point_f.h" @@ -238,18 +236,9 @@ base::OnceClosure callback, const std::string& mime_type, const std::vector<uint8_t>& data) { - if (base::FeatureList::IsEnabled(features::kClipboardFilenames)) { - std::vector<ui::FileInfo> filenames = - data_exchange_delegate_->GetFilenames(source, data); - writer->WriteFilenames(ui::FileInfosToURIList(filenames)); - } else { - // There is no need for CreateClipboardFilenamesPickle() once - // chrome://flags#clipboard-filenames is permanently enabled. - base::Pickle pickle = - data_exchange_delegate_->CreateClipboardFilenamesPickle(source, data); - writer->WritePickledData(pickle, - ui::ClipboardFormatType::GetWebCustomDataType()); - } + std::vector<ui::FileInfo> filenames = + data_exchange_delegate_->GetFilenames(source, data); + writer->WriteFilenames(ui::FileInfosToURIList(filenames)); std::move(callback).Run(); }
diff --git a/components/exo/seat_unittest.cc b/components/exo/seat_unittest.cc index 2942c6ac..0bee86ac 100644 --- a/components/exo/seat_unittest.cc +++ b/components/exo/seat_unittest.cc
@@ -9,7 +9,6 @@ #include "base/pickle.h" #include "base/strings/utf_string_conversions.h" #include "base/task/thread_pool/thread_pool_instance.h" -#include "base/test/scoped_feature_list.h" #include "components/exo/data_source.h" #include "components/exo/data_source_delegate.h" #include "components/exo/seat_observer.h" @@ -21,7 +20,6 @@ #include "ui/base/clipboard/clipboard_format_type.h" #include "ui/base/clipboard/scoped_clipboard_writer.h" #include "ui/base/dragdrop/mojom/drag_drop_types.mojom-shared.h" -#include "ui/base/ui_base_features.h" #include "ui/events/event.h" #include "ui/events/event_utils.h" @@ -326,9 +324,6 @@ } TEST_F(SeatTest, SetSelectionFilenames) { - base::test::ScopedFeatureList features; - features.InitWithFeatures({features::kClipboardFilenames}, {}); - TestSeat seat; Surface focused_surface; seat.set_focused_surface(&focused_surface); @@ -351,33 +346,6 @@ EXPECT_EQ(ui::FileInfosToURIList(filenames), data); } -TEST_F(SeatTest, SetSelectionFilenamesClipboardFilesDisabled) { - base::test::ScopedFeatureList features; - features.InitWithFeatures({}, {features::kClipboardFilenames}); - - TestSeat seat; - Surface focused_surface; - seat.set_focused_surface(&focused_surface); - - TestDataSourceDelegate delegate; - DataSource source(&delegate); - source.Offer("text/uri-list"); - seat.SetSelection(&source); - - RunReadingTask(); - - std::string data; - ui::Clipboard::GetForCurrentThread()->ReadData( - ui::ClipboardFormatType::GetWebCustomDataType(), - /*data_dst=*/nullptr, &data); - base::Pickle pickle(data.c_str(), data.size()); - std::string clipboard; - base::PickleIterator iter(pickle); - EXPECT_TRUE(iter.ReadString(&clipboard)); - - EXPECT_EQ(clipboard, std::string("TestData")); -} - TEST_F(SeatTest, SetSelection_TwiceSame) { TestSeat seat; Surface focused_surface;
diff --git a/components/exo/test/exo_test_data_exchange_delegate.cc b/components/exo/test/exo_test_data_exchange_delegate.cc index 550389e..56cd011 100644 --- a/components/exo/test/exo_test_data_exchange_delegate.cc +++ b/components/exo/test/exo_test_data_exchange_delegate.cc
@@ -83,14 +83,6 @@ .Run(base::RefCountedString::TakeString(&result)); } -base::Pickle TestDataExchangeDelegate::CreateClipboardFilenamesPickle( - ui::EndpointType source, - const std::vector<uint8_t>& data) const { - base::Pickle result; - result.WriteData(reinterpret_cast<const char*>(data.data()), data.size()); - return result; -} - std::vector<ui::FileInfo> TestDataExchangeDelegate::ParseFileSystemSources( const ui::DataTransferEndpoint* source, const base::Pickle& pickle) const {
diff --git a/components/exo/test/exo_test_data_exchange_delegate.h b/components/exo/test/exo_test_data_exchange_delegate.h index 9daeb28..a428f2f3 100644 --- a/components/exo/test/exo_test_data_exchange_delegate.h +++ b/components/exo/test/exo_test_data_exchange_delegate.h
@@ -34,9 +34,6 @@ void SendPickle(ui::EndpointType target, const base::Pickle& pickle, SendDataCallback callback) override; - base::Pickle CreateClipboardFilenamesPickle( - ui::EndpointType source, - const std::vector<uint8_t>& data) const override; std::vector<ui::FileInfo> ParseFileSystemSources( const ui::DataTransferEndpoint* source, const base::Pickle& pickle) const override;
diff --git a/components/guest_view/browser/BUILD.gn b/components/guest_view/browser/BUILD.gn index 896e019..f60ffe5 100644 --- a/components/guest_view/browser/BUILD.gn +++ b/components/guest_view/browser/BUILD.gn
@@ -33,7 +33,6 @@ ] deps = [ "//build:chromeos_buildflags", - "//components/crash/core/common:crash_key", "//components/keyed_service/content", "//components/keyed_service/core", "//components/zoom",
diff --git a/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineItem.java b/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineItem.java index ab5e7b4af..507e6b7 100644 --- a/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineItem.java +++ b/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineItem.java
@@ -90,7 +90,7 @@ public String mimeType; // Request Metadata. - public String pageUrl; + public String url; public String originalUrl; public boolean isOffTheRecord; public String otrProfileId; @@ -138,7 +138,7 @@ clone.canRename = canRename; clone.ignoreVisuals = ignoreVisuals; clone.contentQualityScore = contentQualityScore; - clone.pageUrl = pageUrl; + clone.url = url; clone.originalUrl = originalUrl; clone.isOffTheRecord = isOffTheRecord; clone.otrProfileId = otrProfileId;
diff --git a/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/bridges/OfflineItemBridge.java b/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/bridges/OfflineItemBridge.java index 98b2b34..158e0da9 100644 --- a/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/bridges/OfflineItemBridge.java +++ b/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/bridges/OfflineItemBridge.java
@@ -51,7 +51,7 @@ boolean isAccelerated, boolean promoteOrigin, long totalSizeBytes, boolean externallyRemoved, long creationTimeMs, long completionTimeMs, long lastAccessedTimeMs, boolean isOpenable, String filePath, String mimeType, - String pageUrl, String originalUrl, boolean isOffTheRecord, String otrProfileId, + String url, String originalUrl, boolean isOffTheRecord, String otrProfileId, @OfflineItemState int state, @FailState int failState, @PendingState int pendingState, boolean isResumable, boolean allowMetered, long receivedBytes, long progressValue, long progressMax, @OfflineItemProgressUnit int progressUnit, long timeRemainingMs, @@ -75,7 +75,7 @@ item.isOpenable = isOpenable; item.filePath = filePath; item.mimeType = mimeType; - item.pageUrl = pageUrl; + item.url = url; item.originalUrl = originalUrl; item.isOffTheRecord = isOffTheRecord; item.otrProfileId = otrProfileId;
diff --git a/components/offline_items_collection/core/android/offline_item_bridge.cc b/components/offline_items_collection/core/android/offline_item_bridge.cc index efa251f..f9f685f 100644 --- a/components/offline_items_collection/core/android/offline_item_bridge.cc +++ b/components/offline_items_collection/core/android/offline_item_bridge.cc
@@ -38,7 +38,7 @@ item.completion_time.ToJavaTime(), item.last_accessed_time.ToJavaTime(), item.is_openable, ConvertUTF8ToJavaString(env, item.file_path.value()), ConvertUTF8ToJavaString(env, item.mime_type), - ConvertUTF8ToJavaString(env, item.page_url.spec()), + ConvertUTF8ToJavaString(env, item.url.spec()), ConvertUTF8ToJavaString(env, item.original_url.spec()), item.is_off_the_record, ConvertUTF8ToJavaString(env, item.otr_profile_id), static_cast<jint>(item.state), static_cast<jint>(item.fail_state),
diff --git a/components/offline_items_collection/core/offline_item.cc b/components/offline_items_collection/core/offline_item.cc index ed68c10..3e63913 100644 --- a/components/offline_items_collection/core/offline_item.cc +++ b/components/offline_items_collection/core/offline_item.cc
@@ -112,8 +112,7 @@ last_accessed_time == offline_item.last_accessed_time && is_openable == offline_item.is_openable && file_path == offline_item.file_path && - mime_type == offline_item.mime_type && - page_url == offline_item.page_url && + mime_type == offline_item.mime_type && url == offline_item.url && original_url == offline_item.original_url && is_off_the_record == offline_item.is_off_the_record && otr_profile_id == offline_item.otr_profile_id &&
diff --git a/components/offline_items_collection/core/offline_item.h b/components/offline_items_collection/core/offline_item.h index 5b353ad..bb43795 100644 --- a/components/offline_items_collection/core/offline_item.h +++ b/components/offline_items_collection/core/offline_item.h
@@ -185,8 +185,8 @@ // Request Metadata. // --------------------------------------------------------------------------- - // The URL of the top level frame at the time the content was offlined. - GURL page_url; + // The URL of the offline item, after all redirections. + GURL url; // The URL that represents the original request (before any redirection). GURL original_url;
diff --git a/components/offline_items_collection/core/test_support/offline_item_test_support.cc b/components/offline_items_collection/core/test_support/offline_item_test_support.cc index 7ebecb5..a895532 100644 --- a/components/offline_items_collection/core/test_support/offline_item_test_support.cc +++ b/components/offline_items_collection/core/test_support/offline_item_test_support.cc
@@ -30,7 +30,7 @@ os << ", is_openable: " << item.is_openable; os << ", file_path: " << item.file_path; os << ", mime_type: " << item.mime_type; - os << ", page_url: " << item.page_url; + os << ", url: " << item.url; os << ", original_url: " << item.original_url; os << ", is_off_the_record: " << item.is_off_the_record; os << ", attribution: " << item.attribution;
diff --git a/components/offline_pages/core/downloads/download_ui_adapter_unittest.cc b/components/offline_pages/core/downloads/download_ui_adapter_unittest.cc index 2bd7effe8..4a127fe 100644 --- a/components/offline_pages/core/downloads/download_ui_adapter_unittest.cc +++ b/components/offline_pages/core/downloads/download_ui_adapter_unittest.cc
@@ -349,7 +349,7 @@ auto callback = base::BindLambdaForTesting([&](const absl::optional<OfflineItem>& item) { EXPECT_EQ(kTestGuid1, item.value().id.id); - EXPECT_EQ(kTestUrl, item.value().page_url.spec()); + EXPECT_EQ(kTestUrl, item.value().url.spec()); EXPECT_EQ(OfflineItemState::COMPLETE, item.value().state); EXPECT_EQ(kFileSize, item.value().received_bytes); EXPECT_EQ(kTestFilePath, item.value().file_path);
diff --git a/components/offline_pages/core/downloads/offline_item_conversions.cc b/components/offline_pages/core/downloads/offline_item_conversions.cc index bdb6824..fdb032e 100644 --- a/components/offline_pages/core/downloads/offline_item_conversions.cc +++ b/components/offline_pages/core/downloads/offline_item_conversions.cc
@@ -57,7 +57,7 @@ item.last_accessed_time = page.last_access_time; item.file_path = page.file_path; item.mime_type = GetMimeType(); - item.page_url = page.url; + item.url = page.url; item.original_url = page.original_url_if_different; item.progress.value = 100; item.progress.max = 100; @@ -82,7 +82,7 @@ item.total_size_bytes = -1L; item.received_bytes = 0; item.mime_type = GetMimeType(); - item.page_url = request.url(); + item.url = request.url(); item.original_url = request.original_url(); switch (request.request_state()) { case SavePageRequest::RequestState::AVAILABLE:
diff --git a/components/offline_pages/core/downloads/offline_item_conversions_unittest.cc b/components/offline_pages/core/downloads/offline_item_conversions_unittest.cc index 42c6450e..6c3c8a3 100644 --- a/components/offline_pages/core/downloads/offline_item_conversions_unittest.cc +++ b/components/offline_pages/core/downloads/offline_item_conversions_unittest.cc
@@ -43,7 +43,7 @@ OfflineItemConversions::CreateOfflineItem(offline_page_item, true); EXPECT_EQ(ContentId(kOfflinePageNamespace, guid), offline_item.id); - EXPECT_EQ(kTestUrl, offline_item.page_url); + EXPECT_EQ(kTestUrl, offline_item.url); EXPECT_EQ(kTestOriginalUrl, offline_item.original_url); EXPECT_EQ(title, offline_item.title); EXPECT_EQ(file_path, offline_item.file_path); @@ -96,7 +96,7 @@ OfflineItemConversions::CreateOfflineItem(save_page_request); EXPECT_EQ(ContentId(kOfflinePageNamespace, guid), offline_item.id); - EXPECT_EQ(kTestUrl, offline_item.page_url); + EXPECT_EQ(kTestUrl, offline_item.url); EXPECT_EQ(kTestOriginalUrl, offline_item.original_url); EXPECT_EQ(kTestUrl.host(), offline_item.title); EXPECT_EQ(base::FilePath(), offline_item.file_path);
diff --git a/components/os_crypt/key_storage_linux.cc b/components/os_crypt/key_storage_linux.cc index 53b1903..7faca2d 100644 --- a/components/os_crypt/key_storage_linux.cc +++ b/components/os_crypt/key_storage_linux.cc
@@ -170,7 +170,7 @@ #if defined(USE_LIBSECRET) if (selected_backend == os_crypt::SelectedLinuxBackend::GNOME_ANY || selected_backend == os_crypt::SelectedLinuxBackend::GNOME_LIBSECRET) { - key_storage = std::make_unique<KeyStorageLibsecret>(std::move(application_name)); + key_storage = std::make_unique<KeyStorageLibsecret>(application_name); if (key_storage->WaitForInitOnTaskRunner()) { VLOG(1) << "OSCrypt using Libsecret as backend."; return key_storage; @@ -183,7 +183,7 @@ if (selected_backend == os_crypt::SelectedLinuxBackend::GNOME_ANY || selected_backend == os_crypt::SelectedLinuxBackend::GNOME_KEYRING) { key_storage = std::make_unique<KeyStorageKeyring>(config.main_thread_runner, - std::move(application_name)); + application_name); if (key_storage->WaitForInitOnTaskRunner()) { VLOG(1) << "OSCrypt using Keyring as backend."; return key_storage;
diff --git a/components/permissions/BUILD.gn b/components/permissions/BUILD.gn index 8b429a9c..3545bd1 100644 --- a/components/permissions/BUILD.gn +++ b/components/permissions/BUILD.gn
@@ -37,6 +37,8 @@ "contexts/nfc_permission_context.h", "contexts/payment_handler_permission_context.cc", "contexts/payment_handler_permission_context.h", + "contexts/sensor_permission_context.cc", + "contexts/sensor_permission_context.h", "contexts/webxr_permission_context.cc", "contexts/webxr_permission_context.h", "object_permission_context_base.cc",
diff --git a/chrome/browser/generic_sensor/sensor_permission_context.cc b/components/permissions/contexts/sensor_permission_context.cc similarity index 91% rename from chrome/browser/generic_sensor/sensor_permission_context.cc rename to components/permissions/contexts/sensor_permission_context.cc index 713a96f0..960ec4c3 100644 --- a/chrome/browser/generic_sensor/sensor_permission_context.cc +++ b/components/permissions/contexts/sensor_permission_context.cc
@@ -2,17 +2,17 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/generic_sensor/sensor_permission_context.h" +#include "components/permissions/contexts/sensor_permission_context.h" -#include "base/feature_list.h" #include "components/content_settings/browser/page_specific_content_settings.h" #include "components/content_settings/core/common/content_settings.h" #include "components/content_settings/core/common/content_settings_types.h" #include "components/permissions/permission_request_id.h" -#include "services/device/public/cpp/device_features.h" #include "third_party/blink/public/mojom/permissions_policy/permissions_policy.mojom.h" #include "url/gurl.h" +namespace permissions { + SensorPermissionContext::SensorPermissionContext( content::BrowserContext* browser_context) : PermissionContextBase(browser_context, @@ -45,3 +45,5 @@ // origins and this is enforced by the renderer. return false; } + +} // namespace permissions
diff --git a/components/permissions/contexts/sensor_permission_context.h b/components/permissions/contexts/sensor_permission_context.h new file mode 100644 index 0000000..d7cd9c3 --- /dev/null +++ b/components/permissions/contexts/sensor_permission_context.h
@@ -0,0 +1,29 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_PERMISSIONS_CONTEXTS_SENSOR_PERMISSION_CONTEXT_H_ +#define COMPONENTS_PERMISSIONS_CONTEXTS_SENSOR_PERMISSION_CONTEXT_H_ + +#include "components/permissions/permission_context_base.h" + +namespace permissions { + +class SensorPermissionContext : public PermissionContextBase { + public: + explicit SensorPermissionContext(content::BrowserContext* browser_context); + SensorPermissionContext(const SensorPermissionContext&) = delete; + SensorPermissionContext& operator=(const SensorPermissionContext&) = delete; + ~SensorPermissionContext() override; + + private: + // PermissionContextBase: + void UpdateTabContext(const PermissionRequestID& id, + const GURL& requesting_frame, + bool allowed) override; + bool IsRestrictedToSecureOrigins() const override; +}; + +} // namespace permissions + +#endif // COMPONENTS_PERMISSIONS_CONTEXTS_SENSOR_PERMISSION_CONTEXT_H_
diff --git a/components/policy/core/browser/policy_pref_mapping_test.cc b/components/policy/core/browser/policy_pref_mapping_test.cc index 9d7ee815..c86efe1f 100644 --- a/components/policy/core/browser/policy_pref_mapping_test.cc +++ b/components/policy/core/browser/policy_pref_mapping_test.cc
@@ -41,7 +41,6 @@ kUserProfile, kSigninProfile, kLocalState, - kCrosSetting, }; PrefLocation GetPrefLocation(const base::Value& settings) { @@ -52,8 +51,6 @@ return PrefLocation::kLocalState; if (*location == "signin_profile") return PrefLocation::kSigninProfile; - if (*location == "cros_setting") - return PrefLocation::kCrosSetting; NOTREACHED() << "Unknown pref location: " << *location; return PrefLocation::kUserProfile; } @@ -534,9 +531,6 @@ case PrefLocation::kLocalState: prefs = local_state; break; - case PrefLocation::kCrosSetting: - // TODO(https://crbug.com/809991) Verify CrosSettings mappings - continue; default: NOTREACHED() << "Unhandled pref location: " << static_cast<int>(pref_case->location());
diff --git a/components/policy/core/common/cloud/encrypted_reporting_job_configuration_unittest.cc b/components/policy/core/common/cloud/encrypted_reporting_job_configuration_unittest.cc index 28deb3f..9a0ce6d0 100644 --- a/components/policy/core/common/cloud/encrypted_reporting_job_configuration_unittest.cc +++ b/components/policy/core/common/cloud/encrypted_reporting_job_configuration_unittest.cc
@@ -282,8 +282,9 @@ chromeos::system::ScopedFakeStatisticsProvider fake_statistics_provider_; class ScopedFakeSerialNumber { public: - ScopedFakeSerialNumber(chromeos::system::ScopedFakeStatisticsProvider* - fake_statistics_provider) { + explicit ScopedFakeSerialNumber( + chromeos::system::ScopedFakeStatisticsProvider* + fake_statistics_provider) { // The fake serial number must be set before |configuration| is // constructed below. fake_statistics_provider->SetMachineStatistic(
diff --git a/components/policy/core/common/cloud/realtime_reporting_job_configuration_unittest.cc b/components/policy/core/common/cloud/realtime_reporting_job_configuration_unittest.cc index cd87d641..5ee89381 100644 --- a/components/policy/core/common/cloud/realtime_reporting_job_configuration_unittest.cc +++ b/components/policy/core/common/cloud/realtime_reporting_job_configuration_unittest.cc
@@ -160,8 +160,9 @@ chromeos::system::ScopedFakeStatisticsProvider fake_statistics_provider_; class ScopedFakeSerialNumber { public: - ScopedFakeSerialNumber(chromeos::system::ScopedFakeStatisticsProvider* - fake_statistics_provider) { + explicit ScopedFakeSerialNumber( + chromeos::system::ScopedFakeStatisticsProvider* + fake_statistics_provider) { // The fake serial number must be set before |configuration_| is // constructed below. fake_statistics_provider->SetMachineStatistic(
diff --git a/components/policy/proto/device_management_backend.proto b/components/policy/proto/device_management_backend.proto index ac2908a..c74b916 100644 --- a/components/policy/proto/device_management_backend.proto +++ b/components/policy/proto/device_management_backend.proto
@@ -748,7 +748,7 @@ // Please note that |new_public_key| is also included inside this data // field. Thus we have new public key signed with old version of private key // (if client indicated to us that it has old key version), and - // new public key data signed by master verification key (if client told + // new public key data signed by primary verification key (if client told // us that it has public verification key - see |verification_key_id| field // of |PolicyFetchRequest|). In most cases, both signatures will be provided. // However, client might not have old policy signing key - for example, when @@ -1952,8 +1952,8 @@ // TODO(crbug.com/1105938): This will also replace the computer_name and // serial_number fields. optional BrowserDeviceIdentifier browser_device_identifier = 9; - // A list of flags indicates that the report only contains particular - // information. When list is empty or unset, the report should contains all + // A list of flags indicating that the report only contains particular + // information. When the list is empty or unset, the report should contain all // information. repeated PartialReportType partial_report_types = 10; // Public key that can be used for attesting the machine. @@ -2414,6 +2414,8 @@ CHROME_ENTERPRISE = 1; // Education SKU. CHROME_EDUCATION = 2; + // Terminal SKU + CHROME_TERMINAL = 3; } // LINT.ThenChange(//depot/google3/google/chrome/licensepackaging/v1/service.proto)
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb index 375f040..e9cc612 100644 --- a/components/policy/resources/policy_templates_es-419.xtb +++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -3896,6 +3896,10 @@ De lo contrario, se ocultarán las direcciones IP locales con nombres de host de mDNS. Ten en cuenta que esta política afecta la protección de las IP locales, si los administradores la habilitan.</translation> <translation id="614662973812186053">Esta política también controla la recopilación de datos de diagnóstico y uso de Android.</translation> +<translation id="6154509171634387825">Advertencia: 3DES se quitará por completo en la versión 95 de <ph name="PRODUCT_NAME" /> (alrededor de octubre de 2021) y esta política dejará de funcionar. + + Si estableces la política como verdadera, se habilitarán los conjuntos de algoritmos de cifrado 3DES en TLS. Si la estableces como falsa, se inhabilitarán los conjuntos. Si no la estableces, los conjuntos de algoritmos de cifrado 3DES estarán inhabilitados de forma predeterminada. Esta política podrá usarse para asegurar la compatibilidad de forma temporal con un servidor desactualizado. Esta es una medida provisoria; deberás volver a configurar el servidor. + </translation> <translation id="6155350825868160236">Permitir que el usuario decida si se usarán los servicios web de Google para solucionar errores de ortografía</translation> <translation id="6155936611791017817">Establece el estado predeterminado del cursor grande en la pantalla de acceso.</translation> <translation id="6157537876488211233">Lista separada por comas de las normas de omisión de proxy</translation>
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb index 4929b3f..f01405efb 100644 --- a/components/policy/resources/policy_templates_es.xtb +++ b/components/policy/resources/policy_templates_es.xtb
@@ -3912,6 +3912,10 @@ De lo contrario, las direcciones IP locales se ocultarán con nombres de host mDNS. Ten en cuenta que esta política debilita la protección de las IP locales si así lo necesitan los administradores.</translation> <translation id="614662973812186053">Esta política también controla la recopilación de los datos de uso y diagnóstico de Android.</translation> +<translation id="6154509171634387825">Advertencia: 3DES se eliminará totalmente en la versión 95 de <ph name="PRODUCT_NAME" /> (en torno a octubre del 2021) y esta política dejará de funcionar en ese momento. + + Si se asigna el valor true a esta política, se habilitarán los paquetes de cifrado 3DES en TLS. Si se le asigna el valor false, se inhabilitarán estos paquetes. Si no se le asigna ningún valor, los paquetes de cifrado 3DES estarán inhabilitados de forma predeterminada. Esta política se puede usar para mantener temporalmente la compatibilidad con un servidor obsoleto. Se trata de una solución provisional y se debería volver a configurar el servidor. + </translation> <translation id="6155350825868160236">Permitir que el usuario elija si se utilizan servicios web de Google para corregir errores ortográficos</translation> <translation id="6155936611791017817">Establecer el estado predeterminado del cursor grande en la pantalla de inicio de sesión</translation> <translation id="6157537876488211233">Lista de reglas de omisión de proxy separadas por comas</translation>
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb index 4b7da6f..5ddc76b 100644 --- a/components/policy/resources/policy_templates_fr.xtb +++ b/components/policy/resources/policy_templates_fr.xtb
@@ -3886,6 +3886,10 @@ Sinon, les adresses IP locales sont masquées avec les noms d'hôte mDNS. Veuillez noter que cette règle affaiblit la protection des adresses IP locales, dans le cas où celle-ci serait requise par les administrateurs.</translation> <translation id="614662973812186053">Cette règle permet également de contrôler la collecte des données d'utilisation et de diagnostic sur les appareils Android.</translation> +<translation id="6154509171634387825">Avertissement : 3DES sera complètement supprimé de <ph name="PRODUCT_NAME" /> dans la version 95 (autour d'octobre 2021). Cette règle cessera alors de fonctionner. + + Si cette règle est définie sur "True", les suites de chiffrement 3DES dans TLS seront activées. Si cette règle est définie sur "False", celles-ci seront désactivées. Si cette règle n'est pas configurée, les suites de chiffrement 3DES sont désactivées par défaut. Cette règle peut être utilisée pour assurer temporairement la compatibilité avec un serveur obsolète. Il s'agit d'une solution provisoire, et il est conseillé de reconfigurer le serveur. + </translation> <translation id="6155350825868160236">Autoriser l'utilisateur à choisir si des services Web Google peuvent être utilisés pour corriger les fautes d'orthographe</translation> <translation id="6155936611791017817">Définir l'état par défaut du grand curseur sur l'écran de connexion</translation> <translation id="6157537876488211233">Liste de règles de contournement de proxy séparées par des virgules</translation>
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb index 6d5a13b..fd5970c 100644 --- a/components/policy/resources/policy_templates_id.xtb +++ b/components/policy/resources/policy_templates_id.xtb
@@ -3913,6 +3913,10 @@ Jika tidak, alamat IP lokal akan disembunyikan dengan hostname mDNS. Perlu diingat bahwa kebijakan ini akan melemahkan perlindungan IP lokal jika dibutuhkan oleh administrator.</translation> <translation id="614662973812186053">Kebijakan ini juga mengontrol pengumpulan data diagnostik dan penggunaan Android.</translation> +<translation id="6154509171634387825">Peringatan: 3DES akan dihapus sepenuhnya dari <ph name="PRODUCT_NAME" /> versi 95 (sekitar Oktober 2021) dan kebijakan ini akan berhenti berfungsi. + + Jika kebijakan disetel ke benar (true), cipher suite 3DES di TLS akan diaktifkan. Jika kebijakan disetel ke salah (false), cipher suite 3DES di TLS akan dinonaktifkan. Jika kebijakan tidak disetel, cipher suite 3DES akan dinonaktifkan secara default. Kebijakan ini dapat digunakan untuk sementara waktu mempertahankan kompatibilitas dengan server yang sudah tidak berlaku. Ini adalah tindakan sementara dan server harus dikonfigurasi ulang. + </translation> <translation id="6155350825868160236">Izinkan pengguna memilih apakah akan menggunakan layanan web Google untuk mengatasi kesalahan ejaan</translation> <translation id="6155936611791017817">Setel status default kursor besar di layar masuk</translation> <translation id="6157537876488211233">Peraturan mengabaikan proxy yang dipisahkan koma</translation>
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb index 0ea1b51..8d20530 100644 --- a/components/policy/resources/policy_templates_it.xtb +++ b/components/policy/resources/policy_templates_it.xtb
@@ -3865,6 +3865,10 @@ In caso contrario, gli indirizzi IP locali vengono nascosti tramite nomi host mDNS. Tieni presente che questo criterio riduce la sicurezza degli indirizzi IP locali se richiesto dagli amministratori.</translation> <translation id="614662973812186053">Questa norma controlla anche la raccolta dei dati diagnostici e sull'utilizzo di Android.</translation> +<translation id="6154509171634387825">Avviso: 3DES verrà completamente rimosso da <ph name="PRODUCT_NAME" /> nella versione 95 (indicativamente a ottobre 2021); in quel momento, questo criterio smetterà di funzionare. + + Se il criterio viene impostato su vero, le suite di crittografia 3DES in TLS verranno attivate. Se viene impostato su falso, verranno disattivate. Se il criterio non viene configurato, le suite di crittografia 3DES sono disattivate per impostazione predefinita. Questo criterio potrebbe essere usato per mantenere momentaneamente la compatibilità con un server obsoleto. Si tratta di una misura temporanea ed è necessario riconfigurare il server. + </translation> <translation id="6155350825868160236">Consenti all'utente di decidere se usare o meno servizi web di Google per correggere gli errori ortografici</translation> <translation id="6155936611791017817">Impostazione stato predefinito del puntatore grande nella schermata di accesso</translation> <translation id="6157537876488211233">Elenco separato da virgole delle regole di bypass proxy</translation>
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb index be1ea8c..5901036f 100644 --- a/components/policy/resources/policy_templates_ko.xtb +++ b/components/policy/resources/policy_templates_ko.xtb
@@ -3908,6 +3908,10 @@ 그러지 않으면 로컬 IP 주소가 mDNS 호스트 이름으로 숨겨집니다. 관리자가 필요로 하는 경우 이 정책은 로컬 IP의 보안 수준을 낮춥니다.</translation> <translation id="614662973812186053">이 정책은 Android 사용 및 진단 데이터 수집도 제어합니다.</translation> +<translation id="6154509171634387825">경고: 3DES는 버전 95(2021년 10월경)부터 <ph name="PRODUCT_NAME" />에서 완전히 삭제되고 그 이후에는 정책이 작동하지 않습니다. + + 정책이 true로 설정되면 TLS의 3DES 암호화 스위트가 사용 설정됩니다. false로 설정되면 사용 중지됩니다. 설정되지 않으면 3DES 암호화 스위트가 기본적으로 사용 중지됩니다. 정책은 오래된 서버와 일시적으로 호환성을 유지하는 데 사용될 수 있습니다. 임시방편이므로 서버를 다시 구성해야 합니다. + </translation> <translation id="6155350825868160236">사용자가 맞춤법 오류를 해결하는 Google 웹 서비스의 사용 여부를 선택하도록 허용</translation> <translation id="6155936611791017817">로그인 화면에서 큰 커서의 기본 상태를 설정</translation> <translation id="6157537876488211233">쉼표로 구분된 프록시 우회 규칙 목록</translation>
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb index 7905f7f..ab2d5f99 100644 --- a/components/policy/resources/policy_templates_nl.xtb +++ b/components/policy/resources/policy_templates_nl.xtb
@@ -3842,6 +3842,10 @@ Anders worden lokale IP-adressen verborgen met mDNS-hostnamen. Houd er rekening mee dat dit beleid de beveiliging van lokale IP's verzwakt als beheerders dit nodig hebben.</translation> <translation id="614662973812186053">Met dit beleid wordt ook het gebruik van Android en het verzamelen van diagnostische gegevens bepaald.</translation> +<translation id="6154509171634387825">Waarschuwing: 3DES wordt volledig verwijderd uit <ph name="PRODUCT_NAME" /> vanaf versie 95 (rond oktober 2021). Dit beleid werkt dan niet meer. + + Als je het beleid instelt op True, worden 3DES cipher suites in TLS aangezet. Als je het beleid instelt op False, worden ze uitgezet. Als je het beleid niet instelt, staan 3DES cipher suites standaard uit. Je kunt dit beleid gebruiken om de compatibiliteit met een verouderde server tijdelijk te behouden. Dit is slechts een noodoplossing. De server moet opnieuw worden ingesteld. + </translation> <translation id="6155350825868160236">Toestaan dat gebruikers kiezen of Google-webservices worden gebruikt om spelfouten op te lossen</translation> <translation id="6155936611791017817">De standaardstatus van de grote muisaanwijzer op het inlogscherm instellen</translation> <translation id="6157537876488211233">Door komma's gescheiden lijst van regels voor proxyomzeiling</translation>
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb index e3b0956d..9758a3c1 100644 --- a/components/policy/resources/policy_templates_pt-BR.xtb +++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -3888,6 +3888,10 @@ Caso contrário, os endereços IP locais serão ocultos com os nomes de host de mDNS. Observe que, se exigida pelos administradores, esta política enfraquece a proteção dos IPs locais.</translation> <translation id="614662973812186053">Esta política também controla a coleta de dados de uso e diagnóstico do Android.</translation> +<translation id="6154509171634387825">Aviso: o padrão 3DES será completamente removido na versão 95 do <ph name="PRODUCT_NAME" /> por volta de outubro de 2021, e esta política só funcionará até essa data. + + Se esta política for definida como verdadeira, os pacotes de criptografia 3DES em TLS serão ativados. Se ela for definida como falsa, eles serão desativados. Se for deixada sem definição, os pacotes de criptografia 3DES serão desativados por padrão. Esta política pode ser usada para manter temporariamente a compatibilidade com um servidor desatualizado. Esta é uma medida provisória e o servidor precisará ser reconfigurado. + </translation> <translation id="6155350825868160236">Permitir que o usuário escolha se serviços da Web do Google serão usados para solucionar erros de ortografia</translation> <translation id="6155936611791017817">Definir estado padrão do cursor grande na tela de login</translation> <translation id="6157537876488211233">Lista separada por vírgulas das regras de proxies ignoráveis</translation>
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb index 738a025..aa67873e 100644 --- a/components/policy/resources/policy_templates_ru.xtb +++ b/components/policy/resources/policy_templates_ru.xtb
@@ -3874,6 +3874,10 @@ В противном случае локальные IP-адреса скрываются с помощью имен хоста mDNS. Обратите внимание, что это правило ослабляет защиту локальных IP-адресов (если это нужно администратору).</translation> <translation id="614662973812186053">Это правило также контролирует сбор данных об использовании и диагностике Android.</translation> +<translation id="6154509171634387825">Внимание! Начиная с версии 95 (появится приблизительно в октябре 2021 года) в <ph name="PRODUCT_NAME" /> будет полностью прекращена поддержка 3DES. Это правило больше не будет работать. + + Если для правила задано значение True, наборы шифров 3DES в TLS включены. При значении False они отключены. Если правило не настроено, наборы шифров 3DES по умолчанию включены. Правило можно использовать, чтобы временно обеспечить совместимость с устаревшим сервером. Помните, что это временное решение и сервер следует настроить заново. + </translation> <translation id="6155350825868160236">Разрешить пользователю самому решать, использовать ли веб-сервисы Google для проверки правописания</translation> <translation id="6155936611791017817">Наличие или отсутствие большого курсора по умолчанию на экране входа</translation> <translation id="6157537876488211233">Список правил для игнорирования прокси-сервера</translation>
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb index 943a202..732fcec 100644 --- a/components/policy/resources/policy_templates_th.xtb +++ b/components/policy/resources/policy_templates_th.xtb
@@ -3834,6 +3834,10 @@ หากไม่ ระบบจะปกปิดที่อยู่ IP ของเครื่องโดยใช้ชื่อโฮสต์ mDNS แทน โปรดทราบว่าหากผู้ดูแลระบบจำเป็นต้องปกป้อง IP ของเครื่อง นโยบายนี้จะทำให้การปกป้องนั้นด้อยประสิทธิภาพลง</translation> <translation id="614662973812186053">นโยบายนี้จะยังควบคุมการใช้งาน Android และการรวบรวมข้อมูลการวินิจฉัยด้วยเช่นกัน</translation> +<translation id="6154509171634387825">คำเตือน: 3DES จะถูกนำออกจาก <ph name="PRODUCT_NAME" /> เวอร์ชัน 95 อย่างสมบูรณ์ (ประมาณเดือนตุลาคม 2021) และเมื่อนั้นนโยบายนี้จะหยุดทำงาน + + หากตั้งค่านโยบายนี้เป็น "จริง" จะเปิดใช้ชุดการเข้ารหัส 3DES ใน TLS หากตั้งค่าเป็น "เท็จ" จะปิดใช้ชุดการเข้ารหัสดังกล่าว หากไม่ได้ตั้งค่านโยบาย โดยค่าเริ่มต้นชุดการเข้ารหัส 3DES จะปิดใช้อยู่ ระบบอาจใช้นโยบายนี้เพื่อรักษาความเข้ากันได้กับเซิร์ฟเวอร์ที่ล้าสมัยเป็นการชั่วคราว ซึ่งเป็นมาตรการที่ใช้ทดแทนและควรจะต้องมีการกำหนดค่าเซิร์ฟเวอร์ใหม่ + </translation> <translation id="6155350825868160236">อนุญาตให้ผู้ใช้เลือกหากใช้บริการเว็บของ Google เพื่อแก้ไขข้อผิดพลาดของการสะกดคำ</translation> <translation id="6155936611791017817">ตั้งค่าสถานะเริ่มต้นของเคอร์เซอร์ขนาดใหญ่บนหน้าจอการเข้าสู่ระบบ</translation> <translation id="6157537876488211233">รายการกฎการข้ามพร็อกซีที่คั่นด้วยเครื่องหมายจุลภาค</translation>
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb index f6304843..95a2dc1a 100644 --- a/components/policy/resources/policy_templates_tr.xtb +++ b/components/policy/resources/policy_templates_tr.xtb
@@ -3855,6 +3855,10 @@ Aksi takdirde, yerel IP adresleri mDNS ana makine adlarıyla gizlenir. Bu politikanın, yöneticilerin ihtiyaç duyması halinde yerel IP'lerin korunmasını zayıflattığını lütfen unutmayın.</translation> <translation id="614662973812186053">Bu politika, Android kullanımını ve teşhis verilerini toplama çalışmalarını da kontrol eder.</translation> +<translation id="6154509171634387825">Uyarı: 3DES, 95 sürümünde (Ekim 2021 civarında) <ph name="PRODUCT_NAME" /> ürününden tamamen kaldırılacak ve bu politika artık kullanılamayacaktır. + + Politika doğru değerine ayarlanırsa TLS'de 3DES şifre paketleri etkinleştirilir. Politika yanlış değerine ayarlanırsa bunlar devre dışı bırakılır. Politika ayarlanmazsa 3DES şifre paketleri varsayılan olarak devre dışı bırakılır. Bu politika eski bir sunucuyla uyumluluğu sürdürmek için geçici olarak kullanılabilir. Bu geçici bir tedbir olup sunucu yeniden yapılandırılmalıdır. + </translation> <translation id="6155350825868160236">Kullanıcının, Google web hizmetlerinin yazım hatalarını çözmek için kullanılıp kullanılmayacağını seçmesine izin ver</translation> <translation id="6155936611791017817">Giriş ekranında büyük imleç modunun varsayılan durumunu ayarla</translation> <translation id="6157537876488211233">Proxy atlama kurallarının noktalı virgül ile ayrılmış listesi</translation>
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb index b89793da..634aebd 100644 --- a/components/policy/resources/policy_templates_uk.xtb +++ b/components/policy/resources/policy_templates_uk.xtb
@@ -3911,6 +3911,10 @@ В інших випадках імена хостів mDNS приховують локальні IP-адреси. Зауважте, що це правило послаблює захист локальних IP-адрес (якщо це вимагають адміністратори).</translation> <translation id="614662973812186053">Це правило також керує збиранням даних про використання та діагностику додатків Android.</translation> +<translation id="6154509171634387825">Попередження: шифри 3DES буде видалено з <ph name="PRODUCT_NAME" /> у версії 95 (приблизно в жовтні 2021 року). Тоді ж перестане працювати це правило. + + Якщо для цього правила вибрати значення true, набори шрифтів 3DES у TLS буде ввімкнено. Якщо вибрати значення false, їх буде вимкнено. Якщо це правило не налаштувати, набори шрифтів 3DES будуть вимкнені за умовчанням. Це правило можна застосовувати, щоб підтримувати сумісність із застарілим сервером. Це тимчасовий захід, налаштування сервера потрібно змінити. + </translation> <translation id="6155350825868160236">Дозволити користувачам вибирати, чи використовувати веб-сервіси Google для виправлення орфографічних помилок</translation> <translation id="6155936611791017817">Налаштувати стан великого курсора за умовчанням на екрані входу</translation> <translation id="6157537876488211233">Розділений комами список правил обходу проксі-сервера</translation>
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb index 2277ad84..f81a014 100644 --- a/components/policy/resources/policy_templates_vi.xtb +++ b/components/policy/resources/policy_templates_vi.xtb
@@ -1871,7 +1871,7 @@ Chỉ định khoảng thời gian kể từ lần cuối cùng người dùng nhập cho đến thời điểm hộp thoại cảnh báo hiển thị khi chạy bằng pin. - Khi bạn đặt, chính sách này sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ tạm vắng trước khi <ph name="PRODUCT_OS_NAME" /> hiển thị hộp thoại cảnh báo cho người dùng biết rằng hành động ở chế độ tạm vắng đó sắp được thực hiện. + Khi bạn đặt, chính sách này sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ tạm vắng trước khi <ph name="PRODUCT_OS_NAME" /> hiện hộp thoại cảnh báo cho người dùng biết rằng hành động ở chế độ tạm vắng đó sắp được thực hiện. Khi bạn không đặt chính sách này, sẽ không có hộp thoại cảnh báo nào hiển thị. @@ -3781,7 +3781,7 @@ <translation id="5950069117106131681">Nếu bạn đặt chính sách này thành Bật, đầu trang và chân trang ở chế độ xem trước bản in sẽ được bật. Nếu bạn đặt chính sách này thành Tắt, đầu trang và chân trang ở chế độ xem trước bản in sẽ bị tắt. Nếu bạn đặt chính sách này, người dùng sẽ không thể thay đổi được. Nếu bạn không đặt chính sách này, người dùng sẽ quyết định có để đầu trang và chân trang xuất hiện hay không.</translation> -<translation id="5951418260805607969">Hiển thị thông báo khi dung lượng ổ đĩa sắp hết</translation> +<translation id="5951418260805607969">Hiện thông báo khi dung lượng ổ đĩa sắp hết</translation> <translation id="5958746038080720143">Bật tính năng tối ưu hóa Web Proxy Auto-Discovery (WPAD) (Tự động phát hiện proxy web)</translation> <translation id="5959428851851090097">Nếu đặt chính sách này thành Bật, thì chính sách đám mây sẽ được ưu tiên nếu chính sách này xung đột với chính sách nền tảng. @@ -3916,6 +3916,10 @@ Nếu không, địa chỉ IP cục bộ sẽ được che giấu bằng tên máy chủ mDNS. Xin lưu ý rằng chính sách này sẽ làm yếu đi chức năng bảo vệ của IP cục bộ nếu quản trị viên cần.</translation> <translation id="614662973812186053">Chính sách này cũng kiểm soát việc thu thập dữ liệu chẩn đoán và sử dụng Android.</translation> +<translation id="6154509171634387825">Cảnh báo: Bộ thuật toán mật mã 3DES sẽ bị xóa hoàn toàn khỏi <ph name="PRODUCT_NAME" /> trong phiên bản 95 (vào khoảng tháng 10 năm 2021). Khi đó, chính sách này sẽ ngừng hoạt động. + + Nếu bạn đặt chính sách này thành bật, bộ thuật toán mật mã 3DES trong TLS sẽ được bật. Bộ thuật toán mật mã sẽ bị tắt nếu bạn đặt chính sách này thành tắt. Nếu bạn không đặt chính sách này, bộ thuật toán mật mã 3DES sẽ bị tắt theo mặc định. Bạn có thể dùng chính sách này để tạm thời duy trì khả năng tương thích với một máy chủ lỗi thời. Đây chỉ là giải pháp thay thế tạm thời nên bạn cần thiết lập lại máy chủ. + </translation> <translation id="6155350825868160236">Cho phép người dùng chọn xem có sử dụng các dịch vụ web của Google để sửa lỗi chính tả hay không</translation> <translation id="6155936611791017817">Đặt trạng thái của con trỏ lớn mặc định trên màn hình đăng nhập</translation> <translation id="6157537876488211233">Danh sách quy tắc bỏ qua proxy được phân cách bằng dấu phẩy</translation> @@ -4038,7 +4042,7 @@ Chỉ định khoảng thời gian kể từ lần cuối cùng người dùng nhập cho đến thời điểm hộp thoại cảnh báo hiển thị khi chạy bằng nguồn điện xoay chiều. - Khi bạn đặt, chính sách này sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ tạm vắng trước khi <ph name="PRODUCT_OS_NAME" /> hiển thị hộp thoại cảnh báo cho người dùng biết rằng hành động ở chế độ tạm vắng đó sắp được thực hiện. + Khi bạn đặt, chính sách này sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ tạm vắng trước khi <ph name="PRODUCT_OS_NAME" /> hiện hộp thoại cảnh báo cho người dùng biết rằng hành động ở chế độ tạm vắng đó sắp được thực hiện. Khi bạn không đặt chính sách này, sẽ không có hộp thoại cảnh báo nào hiển thị. @@ -5148,7 +5152,7 @@ Lưu ý: <ph name="DEVICE_LOGIN_SCREEN_LARGE_CURSOR_ENABLED" /> (nếu đã được chỉ định) sẽ ghi đè chính sách này.</translation> <translation id="7632147323011514740">Các khoảng thời gian mà quá trình cập nhật ảnh chụp nhanh dữ liệu ARC có thể bắt đầu cho Phiên khách được quản lý</translation> <translation id="7632724434767231364">Tên thư viện GSSAPI</translation> -<translation id="7635106595080609261">Khi bạn đặt thành Bật hoặc không đặt chính sách này, Chrome có thể hiển thị hộp thoại chọn tệp và người dùng có thể mở hộp thoại này. +<translation id="7635106595080609261">Khi bạn đặt thành Bật hoặc không đặt chính sách này, Chrome có thể hiện hộp thoại chọn tệp và người dùng có thể mở hộp thoại này. Khi bạn đặt chính sách này thành Tắt, bất cứ khi nào người dùng thực hiện thao tác làm kích hoạt hộp thoại chọn tệp (chẳng hạn như nhập dấu trang, tải tệp lên, lưu đường liên kết, v.v), một thông báo sẽ xuất hiện. Người dùng được xem là đã nhấp vào nút Hủy trên hộp thoại chọn tệp.</translation> <translation id="7638300388094655454">Google Cast</translation> @@ -5188,7 +5192,7 @@ Khi bạn không đặt chính sách này, khoảng thời gian mặc định sẽ được sử dụng. Bạn phải chỉ định giá trị của chính sách bằng mili giây. Các giá trị được giới hạn ở mức nhỏ hơn hoặc bằng thời gian chờ tắt màn hình (nếu có đặt thời gian này) và thời gian chờ khi ở chế độ tạm vắng.</translation> -<translation id="7680437377926096177">Ngăn hiển thị hộp thoại đăng xuất khi cửa sổ cuối cùng đóng lại.</translation> +<translation id="7680437377926096177">Ngăn hiện hộp thoại đăng xuất khi cửa sổ cuối cùng đóng lại.</translation> <translation id="7683777542468165012">Làm mới chính sách động</translation> <translation id="7687943045976362719">Nếu bạn đặt chính sách này, <ph name="PRODUCT_FRAME_NAME" /> sẽ xử lý các loại nội dung được chỉ định. @@ -6062,7 +6066,7 @@ Đối với những cookie trên miền không khớp với các mẫu nêu ở đây hoặc đối với tất cả cookie, nếu bạn không đặt chính sách này, thì giá trị mặc định chung của chính sách <ph name="LEGACY_SAMESITE_COOKIE_BEHAVIOR_ENABLED_POLICY_NAME" /> (nếu bạn đã đặt chính sách này) hoặc trong cấu hình cá nhân của người dùng sẽ được sử dụng. Xin lưu ý rằng các mẫu bạn liệt kê ở đây được xử lý như miền, chứ không phải như URL. Vì vậy, bạn không nên chỉ định lược đồ hoặc cổng.</translation> -<translation id="8887709920496070892">Khoảng thời gian (tính bằng mili giây) kể từ khi không có hoạt động đầu vào của người dùng cho đến thời điểm hệ thống hiển thị hộp thoại cảnh báo</translation> +<translation id="8887709920496070892">Khoảng thời gian (tính bằng mili giây) kể từ khi không có hoạt động đầu vào của người dùng cho đến thời điểm hệ thống hiện hộp thoại cảnh báo</translation> <translation id="8890438048579188548">Ẩn cảnh báo về việc ngừng cung cấp <ph name="CLOUD_PRINT_NAME" /></translation> <translation id="8892286064305622118">Dung lượng ổ đĩa trống cần có cho <ph name="PLUGIN_VM_NAME" /></translation> <translation id="8892783613915541293">Số lần trì hoãn và các hành động cần thực hiện khi thiết bị ở trạng thái rảnh và chạy bằng nguồn điện AC</translation>
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb index 9b3c1eb..06523bf 100644 --- a/components/policy/resources/policy_templates_zh-CN.xtb +++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -3835,6 +3835,10 @@ 否则,本地 IP 地址将会隐藏,被 mDNS 主机名取代。 请注意,此政策会削弱对本地 IP 的保护(如果管理员需要这样做)。</translation> <translation id="614662973812186053">此政策亦用于控制对 Android 使用情况和诊断数据的收集。</translation> +<translation id="6154509171634387825">警告:我们将从 <ph name="PRODUCT_NAME" /> 的 95 版(将于 2021 年 10 月左右推出)中彻底移除 3DES。届时,此政策将不再有效。 + + 如果此政策设为 true,系统将在传输层安全协议 (TLS) 中启用 3DES 加密套件。如果此政策设为 false,系统将在 TLS 中停用 3DES 加密套件。如果此政策未设置,3DES 加密套件会默认处于停用状态。此政策可用于暂时保持与过时服务器的兼容性。这只是一种权宜之计,正确的做法是重新配置服务器。 + </translation> <translation id="6155350825868160236">允许用户选择是否使用 Google 网络服务来修正拼写错误</translation> <translation id="6155936611791017817">设置登录屏幕上大号光标的默认状态</translation> <translation id="6157537876488211233">代理绕过规则的逗号分隔列表</translation>
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb index 605fcb6..602c4e0 100644 --- a/components/policy/resources/policy_templates_zh-TW.xtb +++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -3822,6 +3822,9 @@ 否則系統會透過 mDNS 主機名稱隱藏本機 IP 位址。 請注意,如果系統管理員必須使用此政策,此政策將降低系統對本機 IP 的保護程度。</translation> <translation id="614662973812186053">這項政策也可以控制 Android 使用資料和診斷資料的收集設定。</translation> +<translation id="6154509171634387825">警告:我們將從 <ph name="PRODUCT_NAME" /> 第 95 版中 (約在 2021 年 10 月推出) 完全移除 3DES,屆時這項政策也會停止運作。 + 如果將這項政策設為 True,系統會啟用傳輸層安全標準 (TLS) 中的 3DES 加密套件。如果設為 False,系統將停用這些加密套件。如果不設定這項政策,3DES 加密套件會預設為停用。這項政策可以暫時維持與過時伺服器的相容性。這種做法是權宜之計,正確的做法是重新設定伺服器。 + </translation> <translation id="6155350825868160236">允許使用者選擇是否要使用 Google 網路服務來解決拼字錯誤</translation> <translation id="6155936611791017817">設定大型游標在登入畫面的預設狀態</translation> <translation id="6157537876488211233">以逗號間隔的 Proxy 略過規則清單</translation>
diff --git a/components/signin/core/browser/cookie_settings_util.cc b/components/signin/core/browser/cookie_settings_util.cc index 54233035..2f9cebf 100644 --- a/components/signin/core/browser/cookie_settings_util.cc +++ b/components/signin/core/browser/cookie_settings_util.cc
@@ -15,8 +15,8 @@ GURL gaia_url = GaiaUrls::GetInstance()->gaia_url(); GURL google_url = GaiaUrls::GetInstance()->google_url(); return cookie_settings && - cookie_settings->IsCookieAccessAllowed(gaia_url, gaia_url) && - cookie_settings->IsCookieAccessAllowed(google_url, google_url); + cookie_settings->IsFullCookieAccessAllowed(gaia_url, gaia_url) && + cookie_settings->IsFullCookieAccessAllowed(google_url, google_url); } bool SettingsDeleteSigninCookiesOnExit(
diff --git a/components/signin/internal/identity_manager/account_tracker_service.cc b/components/signin/internal/identity_manager/account_tracker_service.cc index 3f56318..45714fa 100644 --- a/components/signin/internal/identity_manager/account_tracker_service.cc +++ b/components/signin/internal/identity_manager/account_tracker_service.cc
@@ -620,17 +620,13 @@ return; ListPrefUpdate update(pref_service_, prefs::kAccountInfo); - for (size_t i = 0; i < update->GetSize(); ++i) { - base::DictionaryValue* dict = nullptr; - if (update->GetDictionary(i, &dict)) { - std::string value; - if (dict->GetString(kAccountKeyPath, &value) && - value == account_info.account_id.ToString()) { - update->Remove(i, nullptr); - break; - } - } - } + const std::string account_id = account_info.account_id.ToString(); + update->EraseListValueIf([&account_id](const base::Value& value) { + if (!value.is_dict()) + return false; + const std::string* account_key = value.FindStringKey(kAccountKeyPath); + return account_key && *account_key == account_id; + }); } CoreAccountId AccountTrackerService::PickAccountIdForAccount(
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerDelegate.java b/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerDelegate.java index e5e31e84..2441f5c 100644 --- a/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerDelegate.java +++ b/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerDelegate.java
@@ -119,9 +119,4 @@ @WorkerThread @Nullable String getAccountGaiaId(String accountEmail); - - /** - * Checks whether Google Play services is available. - */ - boolean isGooglePlayServicesAvailable(); }
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacade.java b/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacade.java index 8f69ac8..e69cbc9b 100644 --- a/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacade.java +++ b/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacade.java
@@ -148,10 +148,4 @@ @WorkerThread @Nullable String getAccountGaiaId(String accountEmail); - - /** - * Checks whether Google Play services is available. - */ - @AnyThread - boolean isGooglePlayServicesAvailable(); }
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeImpl.java b/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeImpl.java index d38565ad..6a5441f8 100644 --- a/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeImpl.java +++ b/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeImpl.java
@@ -264,14 +264,6 @@ return mDelegate.getAccountGaiaId(accountEmail); } - /** - * Checks whether Google Play services is available. - */ - @Override - public boolean isGooglePlayServicesAvailable() { - return mDelegate.isGooglePlayServicesAvailable(); - } - private void updateCanOfferExtendedSyncPromos(List<Account> accounts) { new AsyncTask<Void>() { @Override
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java b/components/signin/public/android/java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java index 982dc71d..6d232223 100644 --- a/components/signin/public/android/java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java +++ b/components/signin/public/android/java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java
@@ -226,8 +226,7 @@ } } - @Override - public boolean isGooglePlayServicesAvailable() { + protected boolean isGooglePlayServicesAvailable() { return ExternalAuthUtils.getInstance().canUseGooglePlayServices(); }
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/AccountInfoService.java b/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/AccountInfoService.java index 04c80c57..e5615ae 100644 --- a/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/AccountInfoService.java +++ b/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/AccountInfoService.java
@@ -78,9 +78,9 @@ } /** - * Gets the corresponding {@link AccountInfo} of the given account email asynchronously. + * Gets the corresponding {@link AccountInfo} of the given account email. */ - public Promise<AccountInfo> getAccountInfoByEmailAsync(String email) { + public Promise<AccountInfo> getAccountInfoByEmail(String email) { final Promise<AccountInfo> accountInfoPromise = new Promise<>(); mAccountTrackerService.seedAccountsIfNeeded(() -> { accountInfoPromise.fulfill(
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerDelegate.java b/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerDelegate.java index c809e991..b5eccb8b 100644 --- a/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerDelegate.java +++ b/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerDelegate.java
@@ -61,11 +61,6 @@ } @Override - public boolean isGooglePlayServicesAvailable() { - return true; - } - - @Override public void attachAccountsChangeObserver(AccountsChangeObserver observer) { mObserver = observer; }
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java b/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java index 2ea832f8..e196f4648 100644 --- a/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java +++ b/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java
@@ -138,11 +138,6 @@ return "gaia-id-" + accountEmail.replace("@", "_at_"); } - @Override - public boolean isGooglePlayServicesAvailable() { - return true; - } - /** * Adds an account to the fake AccountManagerFacade. */
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb index f9ca4c2e..be6a282 100644 --- a/components/strings/components_strings_am.xtb +++ b/components/strings/components_strings_am.xtb
@@ -727,6 +727,7 @@ <translation id="3631244953324577188">ባዮሜትሪክስ</translation> <translation id="3633738897356909127">የChrome አዝራርን ያዘምኑ፣ Chromeን ለማዘመን ከእርስዎ Chrome ቅንብሮች ሆነው አስገባን ይጫኑ</translation> <translation id="3634530185120165534">መሳቢያ 5</translation> +<translation id="3637662659967048211">ወደ Google መለያ አስቀምጥ</translation> <translation id="3640766068866876100">መረጃ ጠቋሚ-4x6-Ext</translation> <translation id="3642638418806704195">መተግበሪያ፦</translation> <translation id="3650584904733503804">ማረጋገጥ ተሳክቷል</translation> @@ -1401,6 +1402,7 @@ <translation id="6106989379647458772">በ<ph name="PAGE" /> ላይ ያለው ድረ-ገፅ ለጊዜው ተበላሽቶ ሊሆን ይችላል ወይም በቋሚነት ወደ አዲስ የድር አድራሻ ተንቀሳቅሶ ሊሆን ይችላል።</translation> <translation id="6107012941649240045">ለእዚህ ቀርቧል</translation> <translation id="610911394827799129">የእርስዎ Google መለያ <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> ላይ ሌሎች የአሰሳ ታሪክ ዓይነቶች ሊኖረው ይችላል።</translation> +<translation id="6113594885686374546">የጉዞን ከቆመበት ቀጥል ቁልፍ፣ ጉዞዎን ከቆመበት ለመቀጠል አስገባን ይጫኑ እና በChrome ታሪክዎ ውስጥ አግባብነት ያለው እንቅስቃሴን ይመልከቱ</translation> <translation id="6116338172782435947">ወደ ቅንጥብ ሰሌዳው የተቀዱ ጽሑፍ እና ምስሎችን ይመልከቱ</translation> <translation id="6120179357481664955">የእርስዎን UPI መታወቂያ ያስታውሳሉ?</translation> <translation id="6123290840358279103">ምናባዊ ካርድ ይመልከቱ</translation> @@ -1476,6 +1478,7 @@ <translation id="6423385022588644828">ከአሁን በኋላ የንኪ መታወቂያን በመጠቀም የእርስዎን ካርዶች በበለጠ ፍጥነት ያረጋግጡ</translation> <translation id="6425092077175753609">ቁሳዊ</translation> <translation id="6427730057873428458">የበር እጥፋት</translation> +<translation id="6428146287756735566">በእርስዎ የChrome ታሪክ ውስጥ አግባብነት ያለው እንቅስቃሴን ለማየት ጉዞዎን ከቆመበት ይቀጥሉ</translation> <translation id="6428450836711225518">ስልክ ቁጥርዎን ያረጋግጡ</translation> <translation id="6433490469411711332">የዕውቂያ መረጃን ያርትዑ</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> ማገናኘት አሻፈረኝ ብሏል።</translation> @@ -1527,6 +1530,7 @@ <translation id="6643016212128521049">አጽዳ</translation> <translation id="6645291930348198241">ኩኪዎችን እና የጣቢያ ውሂብን ይድረሱ።</translation> <translation id="6646269444027925224">{COUNT,plural, =0{ምንም}=1{ከ1 ጣቢያ (ከእርስዎ የGoogle መለያ ዘግተው እንዲወጡ አይደረጉም)}one{ከ# ጣቢያዎች (ከእርስዎ የGoogle መለያ ዘግተው እንዲወጡ አይደረጉም)}other{ከ# ጣቢያዎች (ከእርስዎ የGoogle መለያ ዘግተው እንዲወጡ አይደረጉም)}}</translation> +<translation id="6647197322759179819">ጉዞን ከቆመበት ቀጥል</translation> <translation id="6648459603387803038">የእርስዎ አስተዳዳሪ በርቀት የአሳሽዎን ውቅረት መቀየር ይችላል። በዚህ መሣሪያ ላይ ያለ እንቅስቃሴ ከChrome ውጭም ሊስተዳደር ይችላል።</translation> <translation id="6648524591329069940">ባለጭረት ቅርጸ-ቁምፊ</translation> <translation id="6651270836885078973">በሚከተለው የሚተዳደር ነው፦</translation> @@ -2179,6 +2183,7 @@ <translation id="9114524666733003316">ካርድን በማረጋገጥ ላይ...</translation> <translation id="9114581008513152754">ይህ አሳሽ በኩባንያ ወይም ሌላ ድርጅት አይተዳደርም። በዚህ መሣሪያ ላይ ያለ እንቅስቃሴ ከChrome ውጭ ሊተዳደር ይችላል። <ph name="BEGIN_LINK" />የበለጠ ለመረዳት<ph name="END_LINK" /></translation> <translation id="9117930699067497412">አዲስ</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />፣ ትርን ጠቅ ያድርጉ ከዚያ ጉዞዎን ከቆመበት ለመቀጠል ያስገቡ እና በChrome ታሪክዎ ውስጥ አግባብነት ያለው እንቅስቃሴን ይመልከቱ</translation> <translation id="9119042192571987207">ተሰቅሏል</translation> <translation id="9128016270925453879">መመሪያዎች ተጭነዋል</translation> <translation id="9128870381267983090">ከአውታረ መረብ ጋር ይገናኙ</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb index 85759b9..5da0a0eb 100644 --- a/components/strings/components_strings_ar.xtb +++ b/components/strings/components_strings_ar.xtb
@@ -734,6 +734,7 @@ <translation id="3631244953324577188">المقاييس الحيوية</translation> <translation id="3633738897356909127">زر "تحديث Chrome"، اضغط على مفتاح Enter لتحديث Chrome من إعداداته.</translation> <translation id="3634530185120165534">الدُرج 5</translation> +<translation id="3637662659967048211">حفظ المعلومات في حساب Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">التطبيق:</translation> <translation id="3650584904733503804">تم التحقق بنجاح</translation> @@ -1411,6 +1412,7 @@ <translation id="6106989379647458772">قد تكون صفحة الويب على <ph name="PAGE" /> غير متاحة مؤقتًا أو تم نقلها نهائيًا إلى عنوان ويب جديد.</translation> <translation id="6107012941649240045">الجهة صاحبة الإصدار</translation> <translation id="610911394827799129">قد يتضمّن حسابك على Google نماذج أخرى من سجلّ التصفّح على <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation> +<translation id="6113594885686374546">زر استئناف عملية البحث، اضغط على Enter لاستئناف عملية البحث والاطّلاع على النشاط ذي الصلة في سجلّ Chrome.</translation> <translation id="6116338172782435947">الاطلاع على النصوص والصور التي تم نسخها إلى الحافظة</translation> <translation id="6120179357481664955">هل تتذكر معرّف واجهة الدفعات الموحّدة؟</translation> <translation id="6123290840358279103">عرض البطاقة الافتراضية</translation> @@ -1486,6 +1488,7 @@ <translation id="6423385022588644828">التأكد من بطاقاتك بشكلٍ أسرع باستخدام ميزة Touch ID من الآن فصاعدًا</translation> <translation id="6425092077175753609">متعدد الأبعاد</translation> <translation id="6427730057873428458">الطي على شكل بوابة</translation> +<translation id="6428146287756735566">استأنف عملية البحث للاطّلاع على النشاط ذي الصلة في سجلّ Chrome</translation> <translation id="6428450836711225518">إثبات ملكية رقم الهاتف</translation> <translation id="6433490469411711332">تعديل معلومات الاتصال</translation> <translation id="6433595998831338502">رفض <ph name="HOST_NAME" /> الاتصال.</translation> @@ -1537,6 +1540,7 @@ <translation id="6643016212128521049">محو</translation> <translation id="6645291930348198241">الوصول إلى بيانات الموقع الإلكتروني وملفات تعريف الارتباط</translation> <translation id="6646269444027925224">{COUNT,plural, =0{بدون}=1{من موقع إلكتروني واحد (لن يتم تسجيل خروجك من حسابك على Google)}two{من موقعي ويب (#) (لن يتم تسجيل خروجك من حسابك على Google)}few{من # مواقع إلكترونية (لن يتم تسجيل خروجك من حسابك على Google)}many{من # موقع إلكتروني (لن يتم تسجيل خروجك من حسابك على Google)}other{من # موقع إلكتروني (لن يتم تسجيل خروجك من حسابك على Google)}}</translation> +<translation id="6647197322759179819">استئناف عملية البحث</translation> <translation id="6648459603387803038">يمكن لمشرفك تغيير إعداد المتصفِّح عن بُعد. وقد تتم أيضًا إدارة النشاط على هذا الجهاز خارج Chrome.</translation> <translation id="6648524591329069940">خط Serif</translation> <translation id="6651270836885078973">تتم إدارة الجهاز من خلال:</translation> @@ -2189,6 +2193,7 @@ <translation id="9114524666733003316">جارٍ التحقق من البطاقة...</translation> <translation id="9114581008513152754">لا تتم إدارة هذا المتصفِّح من خلال شركة أو مؤسسة أخرى. وقد تتم إدارة النشاط على هذا الجهاز خارج Chrome. <ph name="BEGIN_LINK" />مزيد من المعلومات<ph name="END_LINK" /></translation> <translation id="9117930699067497412">جديد</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />، اضغط على مفتاح التبويب (Tab)، ثم Enter لاستئناف عملية البحث والاطّلاع على النشاط ذي الصلة في سجلّ Chrome.</translation> <translation id="9119042192571987207">تم التحميل</translation> <translation id="9128016270925453879">تم تحميل السياسات.</translation> <translation id="9128870381267983090">الاتصال بالشبكة</translation>
diff --git a/components/strings/components_strings_as.xtb b/components/strings/components_strings_as.xtb index ebdde15..624efd7 100644 --- a/components/strings/components_strings_as.xtb +++ b/components/strings/components_strings_as.xtb
@@ -731,6 +731,7 @@ <translation id="3631244953324577188">বায়’মেট্ৰিক্স</translation> <translation id="3633738897356909127">Chrome আপডে’ট কৰক বুটাম, Chromeৰ ছেটিংসমূহৰ পৰা Chrome আপডে’ট কৰিবলৈ এণ্টাৰ টিপক</translation> <translation id="3634530185120165534">ট্ৰে’ ৫</translation> +<translation id="3637662659967048211">Google একাউণ্টত ছেভ কৰক</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">এপ্লিকেশ্বন:</translation> <translation id="3650584904733503804">মান্যতাকৰণ সফল</translation> @@ -1405,6 +1406,7 @@ <translation id="6106989379647458772"><ph name="PAGE" />ৰ ৱেবপৃষ্ঠাটো অস্থায়ীভাৱে ব্যৱহাৰযোগ্য হৈ নাথাকিব পাৰে বা ইয়াক কোনো নতুন ৱেব ঠিকনালৈ স্থায়ী ভাৱে নিয়া হ’ব পাৰে।</translation> <translation id="6107012941649240045">ইয়াত প্ৰদান কৰা হৈছে</translation> <translation id="610911394827799129">আপোনাৰ Google একাউণ্টৰ <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />ত অন্য ব্ৰাউজিং ইতিহাস থাকিব পাৰে৷</translation> +<translation id="6113594885686374546">যাত্ৰা পুনৰ আৰম্ভ কৰক বুটাম, আপোনাৰ যাত্ৰা পুনৰ আৰম্ভ কৰিবলৈ এণ্টাৰ টিপক আৰু আপোনাৰ Chromeৰ ইতিহাসত প্ৰাসংগিক কাৰ্যকলাপ চাওক</translation> <translation id="6116338172782435947">ক্লিপব’ৰ্ডলৈ প্ৰতিলিপি কৰা পাঠ আৰু প্ৰতিচ্ছবি চাওক</translation> <translation id="6120179357481664955">আপোনাৰ UPI IDটো মনত আছেনে?</translation> <translation id="6123290840358279103">ভাৰ্চুৱেল কাৰ্ডখন চাওক</translation> @@ -1479,6 +1481,7 @@ <translation id="6423385022588644828">এতিয়াৰ পৰা স্পৰ্শ আইডি ব্যৱহাৰ কৰি আপোনাৰ কাৰ্ডসমূহ খৰতকীয়াকৈ নিশ্চিত কৰক</translation> <translation id="6425092077175753609">সামগ্ৰী</translation> <translation id="6427730057873428458">গে'ট ফ'ল্ড কৰক</translation> +<translation id="6428146287756735566">আপোনাৰ Chromeৰ ইতিহাসত প্ৰাসংগিক কাৰ্যকলাপ চাবলৈ যাত্ৰা পুনৰ আৰম্ভ কৰক</translation> <translation id="6428450836711225518">আপোনাৰ ফ’ন নম্বৰটো সত্যাপন কৰক</translation> <translation id="6433490469411711332">সম্পর্কৰ তথ্য সম্পাদনা কৰক</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" />এ সংযোগ কৰিবলৈ অস্বীকাৰ কৰিছে।</translation> @@ -1530,6 +1533,7 @@ <translation id="6643016212128521049">মচক</translation> <translation id="6645291930348198241">কুকীসমূহ আৰু ছাইটৰ ডেটা এক্সেছ কৰক।</translation> <translation id="6646269444027925224">{COUNT,plural, =0{এটাৰ পৰাও নহয়}=1{১টা ছাইটৰ পৰা (আপুনি নিজৰ Google Accountৰ পৰা ছাইন আউট হৈ নাযায়)}one{#টা ছাইটৰ পৰা (আপুনি নিজৰ Google Accountৰ পৰা ছাইন আউট হৈ নাযায়)}other{#টা ছাইটৰ পৰা (আপুনি নিজৰ Google Accountৰ পৰা ছাইন আউট হৈ নাযায়)}}</translation> +<translation id="6647197322759179819">যাত্ৰা পুনৰ আৰম্ভ কৰক</translation> <translation id="6648459603387803038">আপোনাৰ প্ৰশাসকে দূৰৰ পৰাই আপোনাৰ ব্ৰাউজাৰৰ ছেটআপ সলনি কৰিব পাৰে। এই ডিভাইচটোত কৰা কাৰ্যকলাপ Chromeৰ বাহিৰৰ পৰাও পৰিচালনা কৰা হ’ব পাৰে।</translation> <translation id="6648524591329069940">Serif ফ’ণ্ট</translation> <translation id="6651270836885078973">ইয়াৰ দ্বাৰা পৰিচালিত:</translation> @@ -2178,6 +2182,7 @@ <translation id="9114524666733003316">কার্ড নিশ্চিত কৰি থকা হৈছে...</translation> <translation id="9114581008513152754">এই ব্ৰাউজাৰটো কোনো কোম্পানী অথবা অন্য প্ৰতিষ্ঠানৰ দ্বাৰা পৰিচালিত। এই ডিভাইচটোৰ কাৰ্যকলাপ Chromeৰ বাহিৰত পৰিচালনা কৰা হৈ থাকিব পাৰে। <ph name="BEGIN_LINK" />অধিক জানক<ph name="END_LINK" /></translation> <translation id="9117930699067497412">সজীৱ</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, টেব টিপক তাৰ পাছত আপোনাৰ যাত্ৰা পুনৰ আৰম্ভ কৰিবলৈ এণ্টাৰ টিপক আৰু আপোনাৰ Chromeৰ ইতিহাসত প্ৰাসংগিক কাৰ্যকলাপ চাওক</translation> <translation id="9119042192571987207">আপল’ড কৰা হৈছে</translation> <translation id="9128016270925453879">নীতি ল’ড কৰা হৈছে</translation> <translation id="9128870381267983090">নেটৱৰ্কত সংযোগ কৰক</translation>
diff --git a/components/strings/components_strings_az.xtb b/components/strings/components_strings_az.xtb index ba6d1b2..447baeb3 100644 --- a/components/strings/components_strings_az.xtb +++ b/components/strings/components_strings_az.xtb
@@ -730,6 +730,7 @@ <translation id="3631244953324577188">Biometriklər</translation> <translation id="3633738897356909127">"Chrome'u güncəlləyin" düyməsi, Chrome ayarlarında Chrome'u güncəlləmək üçün Enter düyməsinə basın</translation> <translation id="3634530185120165534">Qab 5</translation> +<translation id="3637662659967048211">Google Hesabında saxlayın</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Tətbiq:</translation> <translation id="3650584904733503804">Yoxlama uğurludur</translation> @@ -1406,6 +1407,7 @@ <translation id="6106989379647458772"><ph name="PAGE" /> veb səhifəsi müvəqqəti işləməyə bilər və ya yeni veb ünvana köçürülmüş ola bilər.</translation> <translation id="6107012941649240045">Verildi:</translation> <translation id="610911394827799129"><ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> linkində Google Hesabına məxsus axtarış tarixçəsinin başqa formaları ola bilər</translation> +<translation id="6113594885686374546">"Baxışa davam edin" düyməsi, Enter düyməsinə basaraq baxışa davam edin və Chrome tarixçəsində əlaqəli fəaliyyəti görün</translation> <translation id="6116338172782435947">Buferə kopyalanan mətn və şəkillərə baxın</translation> <translation id="6120179357481664955">UPI ID'niz yadda saxlansın?</translation> <translation id="6123290840358279103">Virtual karta baxın</translation> @@ -1481,6 +1483,7 @@ <translation id="6423385022588644828">Bundan sonra Toxunuş İD'si istifadə edərək kartlarınızı daha sürətli təsdiqləyin</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">Qapı şəklində qatlayın</translation> +<translation id="6428146287756735566">Chrome tarixçəsində əlaqəli fəaliyyəti görmək üçün baxışa davam edin</translation> <translation id="6428450836711225518">Telefon nömrənizi doğrulayın</translation> <translation id="6433490469411711332">Kontakt məlumatını redaktə edin</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> qoşulmaq istəmədi.</translation> @@ -1532,6 +1535,7 @@ <translation id="6643016212128521049">Silin</translation> <translation id="6645291930348198241">Kukilər və sayt datasına giriş.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Yoxdur}=1{1 saytdan (Google Hesabınızdan çıxmayacaqsınız)}other{ # saytdan (Google Hesabınızdan çıxmayacaqsınız)}}</translation> +<translation id="6647197322759179819">Baxışa davam edin</translation> <translation id="6648459603387803038">Administrator brauzer quraşdırmasını uzaqdan dəyişə bilər. Bu cihazdakı fəaliyyət Chrome'dan kənarda da idarə edilə bilər.</translation> <translation id="6648524591329069940">Serif Şrifti</translation> <translation id="6651270836885078973">İdarə edən:</translation> @@ -2183,6 +2187,7 @@ <translation id="9114524666733003316">Kart təsdiqlənir...</translation> <translation id="9114581008513152754">Bu brauzer şirkət və ya başqa təşkilat tərəfindən idarə edilmir. Bu cihazdakı fəaliyyət Chrome'dan kənarda idarə edilə bilər. <ph name="BEGIN_LINK" />Ətraflı məlumat<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Təzə</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, Tab düyməsi, sonra Enter düyməsinə basaraq baxışa davam edin və Chrome tarixçəsində əlaqəli fəaliyyəti görün</translation> <translation id="9119042192571987207">Yüklənib</translation> <translation id="9128016270925453879">Siyasətlər yüklənib</translation> <translation id="9128870381267983090">Şəbəkəyə qoşulun</translation>
diff --git a/components/strings/components_strings_be.xtb b/components/strings/components_strings_be.xtb index 5bbf7d6..08523bd 100644 --- a/components/strings/components_strings_be.xtb +++ b/components/strings/components_strings_be.xtb
@@ -733,6 +733,7 @@ <translation id="3631244953324577188">Біяметрыя</translation> <translation id="3633738897356909127">Кнопка "Абнавіць Chrome". Каб абнавіць браўзер Chrome праз яго налады, націсніце Enter</translation> <translation id="3634530185120165534">Латок 5</translation> +<translation id="3637662659967048211">Захоўванне даных ва Уліковым запісе Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Праграма:</translation> <translation id="3650584904733503804">Праверка прайшла паспяхова</translation> @@ -1410,6 +1411,7 @@ <translation id="6106989379647458772">Магчыма, вэб-старонка па адрасе <ph name="PAGE" /> часова недаступная або была перамешчана на новы вэб-адрас.</translation> <translation id="6107012941649240045">Каму выдадзена</translation> <translation id="610911394827799129">На сайце <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> могуць быць іншыя формы запісу гісторыі прагляду сайтаў для вашага Уліковага запісу Google</translation> +<translation id="6113594885686374546">Кнопка "Працягнуць пошук". Каб пашукаць звязаныя дзеянні ў гісторыі праглядаў Chrome, націсніце Enter</translation> <translation id="6116338172782435947">Праглядаць тэкст і відарысы, скапіраваныя ў буфер абмену</translation> <translation id="6120179357481664955">Запомніць ідэнтыфікатар UPI?</translation> <translation id="6123290840358279103">Праглядзець віртуальную картку</translation> @@ -1485,6 +1487,7 @@ <translation id="6423385022588644828">Калі выкарыстоўваць Touch ID, пацвярджаць карткі можна будзе хутчэй</translation> <translation id="6425092077175753609">Матэрыял</translation> <translation id="6427730057873428458">Згіб "вароты"</translation> +<translation id="6428146287756735566">Пашукаць звязаныя дзеянні ў гісторыі праглядаў Chrome</translation> <translation id="6428450836711225518">Спраўдзіце свой нумар тэлефона</translation> <translation id="6433490469411711332">Змена кантактных звестак</translation> <translation id="6433595998831338502">Хост <ph name="HOST_NAME" /> адмовіўся ад падключэння.</translation> @@ -1536,6 +1539,7 @@ <translation id="6643016212128521049">Ачысціць</translation> <translation id="6645291930348198241">Атрымаць доступ да файлаў cookie і даных сайта.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Няма}=1{З 1 сайта (вы не выйдзеце з Уліковага запісу Google)}one{З # сайта (вы не выйдзеце з Уліковага запісу Google)}few{З # сайтаў (вы не выйдзеце з Уліковага запісу Google)}many{З # сайтаў (вы не выйдзеце з Уліковага запісу Google)}other{З # сайта (вы не выйдзеце з Уліковага запісу Google)}}</translation> +<translation id="6647197322759179819">Працягнуць пошук</translation> <translation id="6648459603387803038">Адміністратар можа аддалена змяняць налады браўзера. Сама прылада таксама можа знаходзіцца пад знешнім кіраваннем.</translation> <translation id="6648524591329069940">Шрыфт з засечкамі</translation> <translation id="6651270836885078973">Прыладай кіруе:</translation> @@ -2188,6 +2192,7 @@ <translation id="9114524666733003316">Пацвярджаюцца даныя карткі...</translation> <translation id="9114581008513152754">Гэты браўзер не знаходзіцца пад кіраваннем кампаніі або іншай арганізацыі. Аднак сама прылада можа знаходзіцца пад знешнім кіраваннем. <ph name="BEGIN_LINK" />Даведацца больш<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Свежы</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />. Каб пашукаць звязаныя дзеянні ў гісторыі праглядаў Chrome, націсніце Tab, затым Enter</translation> <translation id="9119042192571987207">Запампавана</translation> <translation id="9128016270925453879">Палітыкі загружаны</translation> <translation id="9128870381267983090">Падключыцеся да сеткі</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb index 21c525d..191b01cb 100644 --- a/components/strings/components_strings_bg.xtb +++ b/components/strings/components_strings_bg.xtb
@@ -730,6 +730,7 @@ <translation id="3631244953324577188">Биометрика</translation> <translation id="3633738897356909127">Бутон „Актуализиране на Chrome“. Натиснете Enter, за да актуализирате Chrome от настройките</translation> <translation id="3634530185120165534">Тава 5</translation> +<translation id="3637662659967048211">Запазване в профила в Google</translation> <translation id="3640766068866876100">Index-4 x 6-Ext</translation> <translation id="3642638418806704195">Приложение:</translation> <translation id="3650584904733503804">Потвърждаването е успешно</translation> @@ -1407,6 +1408,7 @@ <translation id="6106989379647458772">Уеб страницата на адрес <ph name="PAGE" /> може временно да не е налице или да е била преместена на нов уеб адрес.</translation> <translation id="6107012941649240045">Издаден на</translation> <translation id="610911394827799129">В профила ви в Google може да има други видове история на сърфиране, съхранявани на адрес <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation> +<translation id="6113594885686374546">Бутон „Продължаване на пътешествието“. Натиснете Enter, за да продължите пътешествието си и да прегледате съответната активност в историята си в Chrome</translation> <translation id="6116338172782435947">Да преглежда текста и изображенията, копирани в буферната памет</translation> <translation id="6120179357481664955">Помните ли идентификационния си номер за UPI?</translation> <translation id="6123290840358279103">Преглед на виртуалната карта</translation> @@ -1482,6 +1484,7 @@ <translation id="6423385022588644828">Потвърждавайте картите си по-бързо, като от сега нататък използвате Touch ID</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">Сгъване на двата края навътре</translation> +<translation id="6428146287756735566">Продължете пътешествието си, за да прегледате съответната активност в историята си в Chrome</translation> <translation id="6428450836711225518">Потвърдете телефонния си номер</translation> <translation id="6433490469411711332">Редактиране на информацията за връзка</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> отказа да установи връзка.</translation> @@ -1533,6 +1536,7 @@ <translation id="6643016212128521049">Изчистване</translation> <translation id="6645291930348198241">Осъществява достъп до „бисквитки“ и данни за сайтове.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Няма}=1{От 1 сайт (няма да излезете от профила си в Google)}other{От # сайта (няма да излезете от профила си в Google)}}</translation> +<translation id="6647197322759179819">Продължаване на пътешествието</translation> <translation id="6648459603387803038">Администраторът ви може отдалечено да променя настройките на браузъра. Възможно е активността на това устройство да се управлява и извън Chrome.</translation> <translation id="6648524591329069940">Серифен шрифт</translation> <translation id="6651270836885078973">Управлява се от:</translation> @@ -2184,6 +2188,7 @@ <translation id="9114524666733003316">Картата се потвърждава...</translation> <translation id="9114581008513152754">Този браузър не се управлява от дружество или друга организация. Възможно е активността на устройството да се управлява извън Chrome. <ph name="BEGIN_LINK" />Научете повече<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Свежо</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, натиснете Tab и след това Enter, за да продължите пътешествието си и да прегледате съответната активност в историята си в Chrome</translation> <translation id="9119042192571987207">Качено</translation> <translation id="9128016270925453879">Правилата са заредени</translation> <translation id="9128870381267983090">Свързване към мрежа</translation>
diff --git a/components/strings/components_strings_bs.xtb b/components/strings/components_strings_bs.xtb index ec4273e..0c357ab2 100644 --- a/components/strings/components_strings_bs.xtb +++ b/components/strings/components_strings_bs.xtb
@@ -734,6 +734,7 @@ <translation id="3631244953324577188">Biometrija</translation> <translation id="3633738897356909127">Dugme Ažuriraj Chrome, pritisnite Enter da ažurirate Chrome iz postavki Chromea</translation> <translation id="3634530185120165534">Ladica 5</translation> +<translation id="3637662659967048211">Sačuvajte na Google račun</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Aplikacija:</translation> <translation id="3650584904733503804">Potvrda valjanosti je uspjela</translation> @@ -1411,6 +1412,7 @@ <translation id="6106989379647458772">Web stranica na <ph name="PAGE" /> je možda privremeno ugašena ili je trajno prebačena na novu web adresu.</translation> <translation id="6107012941649240045">Izdato za</translation> <translation id="610911394827799129">Google račun može imati druge oblike historije pregledanja na <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation> +<translation id="6113594885686374546">Dugme Nastavi pregledati, pritisnite Enter da nastavite pregledati te da vidite relevantne aktivnosti u historiji Chromea</translation> <translation id="6116338172782435947">Pogledajte tekst i slike kopirane u međumemoriju</translation> <translation id="6120179357481664955">Zapamtiti vaš UPI ID?</translation> <translation id="6123290840358279103">Prikaži virtuelnu karticu</translation> @@ -1486,6 +1488,7 @@ <translation id="6423385022588644828">Od sada brže potvrđujte kartice korištenjem funkcije Touch ID</translation> <translation id="6425092077175753609">Materijal</translation> <translation id="6427730057873428458">Presavijanje</translation> +<translation id="6428146287756735566">Nastavite pregledati da vidite relevantne aktivnosti u historiji Chromea</translation> <translation id="6428450836711225518">Potvrdite broj telefona</translation> <translation id="6433490469411711332">Uređivanje podataka za kontakt</translation> <translation id="6433595998831338502">Host računar <ph name="HOST_NAME" /> je odbio povezivanje.</translation> @@ -1537,6 +1540,7 @@ <translation id="6643016212128521049">Obriši</translation> <translation id="6645291930348198241">Pristupiti kolačićima i podacima web lokacije.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Ništa}=1{S jedne web lokacije (nećete se odjaviti sa svog Google računa)}one{S # web lokacije (nećete se odjaviti sa svog Google računa)}few{S # web lokacije (nećete se odjaviti sa svog Google računa)}other{S # web lokacija (nećete se odjaviti sa svog Google računa)}}</translation> +<translation id="6647197322759179819">Nastavi pregledati</translation> <translation id="6648459603387803038">Vaš administrator može promijeniti postavke preglednika daljinskim putem. Aktivnostima na ovom uređaju se može upravljati i van Chromea.</translation> <translation id="6648524591329069940">Font Serif</translation> <translation id="6651270836885078973">Upravlja:</translation> @@ -2188,6 +2192,7 @@ <translation id="9114524666733003316">Potvrđivanje kartice...</translation> <translation id="9114581008513152754">Ovim preglednikom ne upravlja kompanija ili neka druga organizacija. Aktivnostima na ovom uređaju se može upravljati van Chromea. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Svježe</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, pritisnite Tab, a zatim Enter da nastavite pregledati te da vidite relevantne aktivnosti u historiji Chromea</translation> <translation id="9119042192571987207">Otpremljeno</translation> <translation id="9128016270925453879">Pravila su učitana</translation> <translation id="9128870381267983090">Spoji se na mrežu</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb index 622da3f..4114ecc 100644 --- a/components/strings/components_strings_ca.xtb +++ b/components/strings/components_strings_ca.xtb
@@ -728,6 +728,7 @@ <translation id="3631244953324577188">Biometria</translation> <translation id="3633738897356909127">Botó Actualitza Chrome; prem Retorn per actualitzar Chrome des de la configuració de Chrome</translation> <translation id="3634530185120165534">Safata 5</translation> +<translation id="3637662659967048211">Desa al Compte de Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Aplicació:</translation> <translation id="3650584904733503804">Validació correcta</translation> @@ -1400,6 +1401,7 @@ <translation id="6106989379647458772">És possible que la pàgina web <ph name="PAGE" /> estigui temporalment fora de servei o s'hagi traslladat permanentment a una adreça web nova.</translation> <translation id="6107012941649240045">Emès per a</translation> <translation id="610911394827799129">A <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> trobaràs altres maneres d'explorar l'historial de navegació del teu Compte de Google</translation> +<translation id="6113594885686374546">Botó Reprèn el camí: prem Retorn per reprendre el camí i veure activitat rellevant a l'historial de Chrome</translation> <translation id="6116338172782435947">Veure el text i les imatges copiats al porta-retalls</translation> <translation id="6120179357481664955">Recordes el teu identificador d'UPI?</translation> <translation id="6123290840358279103">Mostra la targeta virtual</translation> @@ -1475,6 +1477,7 @@ <translation id="6423385022588644828">A partir d'ara, confirma les targetes més ràpidament amb Touch ID</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">Plegat en finestra</translation> +<translation id="6428146287756735566">Reprèn el camí per veure activitat rellevant a l'historial de Chrome</translation> <translation id="6428450836711225518">Verifica el número de telèfon</translation> <translation id="6433490469411711332">Edita la informació de contacte</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> no ens ha permès establir la connexió.</translation> @@ -1526,6 +1529,7 @@ <translation id="6643016212128521049">Esborra</translation> <translation id="6645291930348198241">Accedir a les galetes i a les dades del lloc web.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Cap}=1{D'1 lloc web (no se't tancarà la sessió del Compte de Google)}other{De # llocs web (no se't tancarà la sessió del Compte de Google)}}</translation> +<translation id="6647197322759179819">Reprèn el camí</translation> <translation id="6648459603387803038">L'administrador pot modificar la configuració del navegador de manera remota. És possible que l'activitat d'aquest dispositiu també es gestioni fora de Chrome.</translation> <translation id="6648524591329069940">Tipus de lletra Serif</translation> <translation id="6651270836885078973">Gestionades per:</translation> @@ -2177,6 +2181,7 @@ <translation id="9114524666733003316">S'està confirmant la targeta...</translation> <translation id="9114581008513152754">Cap empresa ni cap altra organització no gestiona aquest navegador. És possible que l'activitat d'aquest dispositiu es gestioni fora de Chrome. <ph name="BEGIN_LINK" />Més informació<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Fresca</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />: prem Tab i després Retorn per reprendre el camí i veure activitat rellevant a l'historial de Chrome</translation> <translation id="9119042192571987207">Penjat</translation> <translation id="9128016270925453879">Les polítiques s'han carregat</translation> <translation id="9128870381267983090">Connecta't a la xarxa</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb index a50ade6..4d27896 100644 --- a/components/strings/components_strings_cs.xtb +++ b/components/strings/components_strings_cs.xtb
@@ -724,6 +724,7 @@ <translation id="3631244953324577188">Biometrické systémy</translation> <translation id="3633738897356909127">Tlačítko Aktualizovat Chrome, stisknutím klávesy Enter aktualizujete Chrome v nastavení Chromu</translation> <translation id="3634530185120165534">Přihrádka 5</translation> +<translation id="3637662659967048211">Uložit do účtu Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Aplikace:</translation> <translation id="3650584904733503804">Ověření proběhlo úspěšně</translation> @@ -1395,6 +1396,7 @@ <translation id="6106989379647458772">Webová stránka <ph name="PAGE" /> může být dočasně nefunkční nebo mohla být trvale přesunuta na novou webovou adresu.</translation> <translation id="6107012941649240045">Vydán pro</translation> <translation id="610911394827799129">Na stránce <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> mohou být k dispozici další druhy historie prohlížení zaznamenané ve vašem účtu Google.</translation> +<translation id="6113594885686374546">Tlačítko obnovení cesty, stisknutím klávesy Enter obnovíte svou cestu a zobrazíte příslušnou aktivitu v historii Chromu</translation> <translation id="6116338172782435947">Přístup k textu a obrázkům zkopírovaným do schránky</translation> <translation id="6120179357481664955">Uložit vaše UPI ID?</translation> <translation id="6123290840358279103">Zobrazit virtuální kartu</translation> @@ -1469,6 +1471,7 @@ <translation id="6423385022588644828">Od teď karty potvrzujte rychleji pomocí technologie Touch ID</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">Otevírací přeložení</translation> +<translation id="6428146287756735566">Obnovením cesty zobrazíte příslušnou aktivitu v historii Chromu</translation> <translation id="6428450836711225518">Ověření telefonního čísla</translation> <translation id="6433490469411711332">Upravit kontaktní údaje</translation> <translation id="6433595998831338502">Web <ph name="HOST_NAME" /> odmítl připojení.</translation> @@ -1520,6 +1523,7 @@ <translation id="6643016212128521049">Vymazat</translation> <translation id="6645291930348198241">Získat přístup k souborům cookie a datům webů.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Žádné}=1{Z 1 webu (nebudete odhlášeni z účtu Google)}few{Ze # webů (nebudete odhlášeni z účtu Google)}many{Z # webu (nebudete odhlášeni z účtu Google)}other{Z # webů (nebudete odhlášeni z účtu Google)}}</translation> +<translation id="6647197322759179819">Obnovit cestu</translation> <translation id="6648459603387803038">Administrátor může nastavení prohlížeče vzdáleně změnit. Aktivita na tomto zařízení může být spravována také mimo Chrome.</translation> <translation id="6648524591329069940">Patkové písmo</translation> <translation id="6651270836885078973">Správce:</translation> @@ -2171,6 +2175,7 @@ <translation id="9114524666733003316">Ověřování karty...</translation> <translation id="9114581008513152754">Tento prohlížeč není spravován administrátorem ani jinou organizací. Aktivita na tomto zařízení může být spravována mimo Chrome. <ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Svěží</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, stisknutím tabulátoru a poté klávesy Enter obnovíte svou cestu a zobrazíte příslušnou aktivitu v historii Chromu</translation> <translation id="9119042192571987207">Nahráno</translation> <translation id="9128016270925453879">Zásady jsou načteny</translation> <translation id="9128870381267983090">Připojit k síti</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb index 5c69c827..c67d7d7 100644 --- a/components/strings/components_strings_da.xtb +++ b/components/strings/components_strings_da.xtb
@@ -734,6 +734,7 @@ <translation id="3631244953324577188">Biometri</translation> <translation id="3633738897356909127">Knappen Opdater Chrome – tryk på Enter for at opdatere Chrome i dine Chrome-indstillinger</translation> <translation id="3634530185120165534">Bakke 5</translation> +<translation id="3637662659967048211">Gem på Google-konto</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Program:</translation> <translation id="3650584904733503804">Valideringen er fuldført</translation> @@ -1411,6 +1412,7 @@ <translation id="6106989379647458772">Websiden på <ph name="PAGE" /> kan være midlertidigt nede, eller også er den permanent flyttet til en ny webadresse.</translation> <translation id="6107012941649240045">Udstedt til</translation> <translation id="610911394827799129">Din Google-konto kan have andre former for browserhistorik på <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation> +<translation id="6113594885686374546">Knappen Genoptag søgning, tryk på Enter for at genoptage søgningen og se relevant aktivitet i din Chrome-historik</translation> <translation id="6116338172782435947">Se tekst og billeder, der er kopieret til udklipsholderen</translation> <translation id="6120179357481664955">Skal dit UPI-id huskes?</translation> <translation id="6123290840358279103">Se virtuelt kort</translation> @@ -1486,6 +1488,7 @@ <translation id="6423385022588644828">Bekræft dine kort hurtigere ved hjælp af Touch ID fra nu af</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">Portfals</translation> +<translation id="6428146287756735566">Genoptag søgningen for at se relevant aktivitet i din Chrome-historik</translation> <translation id="6428450836711225518">Bekræft dit telefonnummer</translation> <translation id="6433490469411711332">Rediger kontaktoplysninger</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> nægtede at oprette forbindelse.</translation> @@ -1537,6 +1540,7 @@ <translation id="6643016212128521049">Ryd</translation> <translation id="6645291930348198241">Adgang til cookies og websitedata.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Ingen}=1{Fra 1 website (du logges ikke ud af din Google-konto)}one{Fra # website (du logges ikke ud af din Google-konto)}other{Fra # websites (du logges ikke ud af din Google-konto)}}</translation> +<translation id="6647197322759179819">Genoptag søgning</translation> <translation id="6648459603387803038">Din administrator kan ændre konfigurationen af din browser via fjernadgang. Aktivitet på denne enhed administreres muligvis også uden for Chrome.</translation> <translation id="6648524591329069940">Serif-skrifttype</translation> <translation id="6651270836885078973">Administreres af:</translation> @@ -2189,6 +2193,7 @@ <translation id="9114524666733003316">Bekræfter kort...</translation> <translation id="9114581008513152754">Denne browser administreres ikke af en virksomhed eller en anden organisation. Aktivitet på denne enhed administreres muligvis uden for Chrome. <ph name="BEGIN_LINK" />Få flere oplysninger<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Frisk</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" /> – tryk på Tab-tasten og derefter Enter for at genoptage søgningen og se relevant aktivitet i din Chrome-historik</translation> <translation id="9119042192571987207">Uploadet</translation> <translation id="9128016270925453879">Politikkerne er indlæst</translation> <translation id="9128870381267983090">Opret forbindelse til netværk</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb index a7393c8d..ad64d3d9 100644 --- a/components/strings/components_strings_el.xtb +++ b/components/strings/components_strings_el.xtb
@@ -735,6 +735,7 @@ <translation id="3631244953324577188">Βιομετρικά</translation> <translation id="3633738897356909127">Κουμπί ενημέρωσης Chrome, πατήστε Enter για να ενημερώσετε το Chrome από τις ρυθμίσεις του Chrome.</translation> <translation id="3634530185120165534">Δίσκος 5</translation> +<translation id="3637662659967048211">Αποθήκευση στον Λογαριασμό Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Εφαρμογή:</translation> <translation id="3650584904733503804">Επιτυχής επικύρωση</translation> @@ -1415,6 +1416,7 @@ <translation id="6106989379647458772">Η ιστοσελίδα στη διεύθυνση <ph name="PAGE" /> μπορεί να βρίσκεται προσωρινά εκτός λειτουργίας ή ίσως έχει μεταφερθεί μόνιμα σε μια νέα διεύθυνση ιστού.</translation> <translation id="6107012941649240045">Εκδόθηκε σε</translation> <translation id="610911394827799129">Ο Λογαριασμός Google ενδέχεται να διαθέτει άλλες μορφές ιστορικού περιήγησης στη διεύθυνση <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation> +<translation id="6113594885686374546">Κουμπί Συνέχιση διαδρομής, πατήστε Enter για να συνεχίσετε τη διαδρομή σας και να δείτε σχετική δραστηριότητα στο Ιστορικό Chrome.</translation> <translation id="6116338172782435947">Δει κείμενο και εικόνες που αντιγράψατε στο πρόχειρο</translation> <translation id="6120179357481664955">Θυμάστε το αναγνωριστικό UPI;</translation> <translation id="6123290840358279103">Προβολή εικονικής κάρτας</translation> @@ -1490,6 +1492,7 @@ <translation id="6423385022588644828">Επιβεβαιώστε πιο γρήγορα τις κάρτες σας, χρησιμοποιώντας το Touch ID από εδώ και στο εξής</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">Δίπλωση παράθυρο</translation> +<translation id="6428146287756735566">Συνέχιση διαδρομής για προβολή σχετική δραστηριότητας στο Ιστορικό Chrome</translation> <translation id="6428450836711225518">Επαλήθευση του αριθμού τηλεφώνου σας</translation> <translation id="6433490469411711332">Επεξεργασία στοιχείων επαφής</translation> <translation id="6433595998831338502">Ο κεντρικός υπολογιστής <ph name="HOST_NAME" /> απέρριψε τη σύνδεση.</translation> @@ -1541,6 +1544,7 @@ <translation id="6643016212128521049">Διαγραφή</translation> <translation id="6645291930348198241">Πρόσβαση σε cookie και δεδομένα ιστοτόπου.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Κανένας}=1{Από 1 ιστότοπο (δεν θα αποσυνδεθείτε από τον Λογαριασμό σας Google)}other{Από # ιστοτόπους (δεν θα αποσυνδεθείτε από τον Λογαριασμό σας Google)}}</translation> +<translation id="6647197322759179819">Συνέχιση διαδρομής</translation> <translation id="6648459603387803038">Ο διαχειριστής σας μπορεί να αλλάξει τη ρύθμιση του προγράμματος περιήγησής σας απομακρυσμένα. Η διαχείριση της δραστηριότητας σε αυτήν τη συσκευή μπορεί επίσης να πραγματοποιηθεί εκτός Chrome.</translation> <translation id="6648524591329069940">Γραμματοσειρά Serif</translation> <translation id="6651270836885078973">Η διαχείριση γίνεται από:</translation> @@ -2195,6 +2199,7 @@ <translation id="9114524666733003316">Επιβεβαίωση κάρτας…</translation> <translation id="9114581008513152754">Αυτός ο ιστότοπος δεν είναι διαχειριζόμενος από κάποια εταιρεία ή άλλον οργανισμό. Η διαχείριση της δραστηριότητας σε αυτήν τη συσκευή μπορεί να πραγματοποιηθεί εκτός Chrome. <ph name="BEGIN_LINK" />Μάθετε περισσότερα<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Φρέσκο</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, πατήστε Tab και, στη συνέχεια, Enter για να συνεχίσετε τη διαδρομή σας και να δείτε σχετική δραστηριότητα στο Ιστορικό Chrome.</translation> <translation id="9119042192571987207">Έγινε μεταφόρτωση</translation> <translation id="9128016270925453879">Οι πολιτικές φορτώθηκαν</translation> <translation id="9128870381267983090">Σύνδεση σε δίκτυο</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb index 251b7cb..c1d8cd9 100644 --- a/components/strings/components_strings_es-419.xtb +++ b/components/strings/components_strings_es-419.xtb
@@ -729,6 +729,7 @@ <translation id="3631244953324577188">Biométricos</translation> <translation id="3633738897356909127">Botón Actualizar Chrome: presiona Intro para actualizar Chrome desde la configuración del navegador</translation> <translation id="3634530185120165534">Bandeja 5</translation> +<translation id="3637662659967048211">Guardar en la Cuenta de Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Aplicación:</translation> <translation id="3650584904733503804">Validación correcta</translation> @@ -1401,6 +1402,7 @@ <translation id="6106989379647458772">Es posible que la página web de <ph name="PAGE" /> no funcione temporalmente o se haya trasladado permanentemente a una dirección web nueva.</translation> <translation id="6107012941649240045">Emitido a</translation> <translation id="610911394827799129">Es posible que tu cuenta de Google tenga otros formularios del historial de navegación en <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation> +<translation id="6113594885686374546">Botón Reanudar búsqueda: presiona Intro para reanudar la búsqueda y ver actividad relevante en tu historial de Chrome</translation> <translation id="6116338172782435947">Ver el texto y las imágenes copiados en el portapapeles</translation> <translation id="6120179357481664955">¿Recuerdas tu ID de IUP?</translation> <translation id="6123290840358279103">Ver la tarjeta virtual</translation> @@ -1476,6 +1478,7 @@ <translation id="6423385022588644828">A partir de ahora, usa Touch ID para confirmar las tarjetas más rápido</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">Plegado en ventana</translation> +<translation id="6428146287756735566">Reanuda la búsqueda para ver la actividad relevante en tu historial de Chrome.</translation> <translation id="6428450836711225518">Verifica tu número de teléfono</translation> <translation id="6433490469411711332">Editar la información de contacto</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> rechazó la conexión.</translation> @@ -1527,6 +1530,7 @@ <translation id="6643016212128521049">Borrar</translation> <translation id="6645291930348198241">Acceder a las cookies y los datos de sitios</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Ninguno}=1{De 1 sitio (no saldrás de tu cuenta de Google)}other{De # sitios (no saldrás de tu cuenta de Google)}}</translation> +<translation id="6647197322759179819">Reanudar búsqueda</translation> <translation id="6648459603387803038">El administrador puede cambiar la configuración de tu navegador de forma remota. Es posible que la actividad en este dispositivo también se administre fuera de Chrome.</translation> <translation id="6648524591329069940">Fuente Serif</translation> <translation id="6651270836885078973">Administrador:</translation> @@ -2179,6 +2183,7 @@ <translation id="9114524666733003316">Confirmando tarjeta…</translation> <translation id="9114581008513152754">Este navegador no está administrado por una empresa ni por otra organización. Es posible que la actividad de este dispositivo se administre fuera de Chrome. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Fresh</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />: presiona Tab y, luego, Intro para reanudar la búsqueda y ver la actividad relevante en tu historial de Chrome</translation> <translation id="9119042192571987207">Subido</translation> <translation id="9128016270925453879">Se cargaron las políticas</translation> <translation id="9128870381267983090">Conectarse a una red</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb index 43071152..b2e2309 100644 --- a/components/strings/components_strings_es.xtb +++ b/components/strings/components_strings_es.xtb
@@ -734,6 +734,7 @@ <translation id="3631244953324577188">Biometría</translation> <translation id="3633738897356909127">Botón Actualizar Chrome, pulsa Intro para actualizar Chrome desde la configuración de Chrome</translation> <translation id="3634530185120165534">Bandeja 5</translation> +<translation id="3637662659967048211">Guardar en tu cuenta de Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Aplicación:</translation> <translation id="3650584904733503804">Validación correcta</translation> @@ -1411,6 +1412,7 @@ <translation id="6106989379647458772">La página web <ph name="PAGE" /> podría estar temporalmente fuera de servicio o bien podría haberse trasladado a una dirección web nueva permanentemente.</translation> <translation id="6107012941649240045">Enviado a</translation> <translation id="610911394827799129">Es posible que tu cuenta de Google tenga otros tipos de historial de navegación en la página <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation> +<translation id="6113594885686374546">Botón Reanudar recorrido, pulsa Intro para reanudar tu recorrido y ver la actividad relevante en tu historial de Chrome</translation> <translation id="6116338172782435947">Ver el texto y las imágenes que se hayan copiado en el portapapeles</translation> <translation id="6120179357481664955">¿Recuerdas tu ID de UPI?</translation> <translation id="6123290840358279103">Ver tarjeta virtual</translation> @@ -1486,6 +1488,7 @@ <translation id="6423385022588644828">A partir de ahora, puedes confirmar tus tarjetas más rápido con Touch ID</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">Plegado en ventana</translation> +<translation id="6428146287756735566">Reanuda el recorrido para ver la actividad relevante en tu historial de Chrome</translation> <translation id="6428450836711225518">Verifica tu número de teléfono</translation> <translation id="6433490469411711332">Editar información de contacto</translation> <translation id="6433595998831338502">La página <ph name="HOST_NAME" /> ha rechazado la conexión.</translation> @@ -1537,6 +1540,7 @@ <translation id="6643016212128521049">Borrar</translation> <translation id="6645291930348198241">Acceder a cookies y datos de sitios.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Ninguno}=1{De 1 sitio web (no se cerrará la sesión en tu cuenta de Google)}other{De # sitios (no se cerrará la sesión en tu cuenta de Google)}}</translation> +<translation id="6647197322759179819">Reanudar recorrido</translation> <translation id="6648459603387803038">El administrador puede cambiar la configuración del navegador de forma remota. Es posible que la actividad de este dispositivo también se administre fuera de Chrome.</translation> <translation id="6648524591329069940">Fuente Serif</translation> <translation id="6651270836885078973">Gestionado por:</translation> @@ -2188,6 +2192,7 @@ <translation id="9114524666733003316">Confirmando tarjeta...</translation> <translation id="9114581008513152754">Este navegador no lo administra ninguna empresa ni organización. Es posible que se administre la actividad de este dispositivo fuera de Chrome. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Novedosa</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />. Pulsa Pestaña y, después, Intro para reanudar tu recorrido y ver la actividad relevante en tu historial de Chrome</translation> <translation id="9119042192571987207">Subido</translation> <translation id="9128016270925453879">Se han cargado las políticas</translation> <translation id="9128870381267983090">Conéctate a la red</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb index 8829e1e..3eff36b 100644 --- a/components/strings/components_strings_et.xtb +++ b/components/strings/components_strings_et.xtb
@@ -733,6 +733,7 @@ <translation id="3631244953324577188">Biomeetria</translation> <translation id="3633738897356909127">Nupp Värskenda Chrome'i, vajutage Chrome'i seadetes Chrome'i värskendamiseks sisestusklahvi</translation> <translation id="3634530185120165534">Salv 5</translation> +<translation id="3637662659967048211">Salvesta Google'i kontole</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Rakendus:</translation> <translation id="3650584904733503804">Valideerimine õnnestus</translation> @@ -1410,6 +1411,7 @@ <translation id="6106989379647458772">Veebileht <ph name="PAGE" /> võib olla ajutiselt maas või see viidi jäädavalt üle uuele veebiaadressile.</translation> <translation id="6107012941649240045">Väljastatud subjektile:</translation> <translation id="610911394827799129">Aadressil <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> võib teie Google'i kontol olla muus vormis sirvimisajalugu</translation> +<translation id="6113594885686374546">Teekonna jätkamise nupp, vajutage sisestusklahvi, et teekonda jätkata ja oma Chrome'i ajaloos asjakohaseid tegevusi näha</translation> <translation id="6116338172782435947">näha lõikelauale kopeeritud teksti ja kujutisi</translation> <translation id="6120179357481664955">Kas jätta teie UPI ID meelde?</translation> <translation id="6123290840358279103">Kuva virtuaalkaart</translation> @@ -1485,6 +1487,7 @@ <translation id="6423385022588644828">Kinnitage oma kaardid kiiremini, kasutades edaspidi funktsiooni Touch ID</translation> <translation id="6425092077175753609">Materiaalne</translation> <translation id="6427730057873428458">Väravakujuliselt volditud</translation> +<translation id="6428146287756735566">Jätkake teekonda, et näha Chrome'i ajaloos asjakohaseid tegevusi</translation> <translation id="6428450836711225518">Kinnitage oma telefoninumber</translation> <translation id="6433490469411711332">Kontaktandmete muutmine</translation> <translation id="6433595998831338502">Host <ph name="HOST_NAME" /> keeldus ühendamast.</translation> @@ -1536,6 +1539,7 @@ <translation id="6643016212128521049">Tühjenda</translation> <translation id="6645291930348198241">Juurdepääs küpsisefailidele ja saidi andmetele.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Mitte ükski}=1{1 saidilt (teid ei logita Google'i kontolt välja)}other{# saidilt (teid ei logita Google'i kontolt välja)}}</translation> +<translation id="6647197322759179819">Jätka teekonda</translation> <translation id="6648459603387803038">Teie administraator saab brauseri seadistust kaugühenduse kaudu muuta. Selle seadme tegevusi võidakse hallata ka väljaspool Chrome'i.</translation> <translation id="6648524591329069940">Seriifidega font</translation> <translation id="6651270836885078973">Haldab:</translation> @@ -2187,6 +2191,7 @@ <translation id="9114524666733003316">Kaardi kinnitamine …</translation> <translation id="9114581008513152754">Seda brauserit ei halda ettevõte ega muu organisatsioon. Selle seadme tegevusi võidakse hallata ka väljaspool Chrome'i. <ph name="BEGIN_LINK" />Lisateave<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Värske</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, vajutage tabulaatorit ja siis sisestusklahvi, et teekonda jätkata ning oma Chrome'i ajaloos asjakohaseid tegevusi näha</translation> <translation id="9119042192571987207">Üles laaditud</translation> <translation id="9128016270925453879">Reeglid on laaditud</translation> <translation id="9128870381267983090">Ühendumine Internetiga</translation>
diff --git a/components/strings/components_strings_eu.xtb b/components/strings/components_strings_eu.xtb index 780aa67..af0e697 100644 --- a/components/strings/components_strings_eu.xtb +++ b/components/strings/components_strings_eu.xtb
@@ -724,6 +724,7 @@ <translation id="3631244953324577188">Sistema biometrikoak</translation> <translation id="3633738897356909127">"Eguneratu Chrome" botoia: sakatu "Sartu" Chrome eguneratzeko Chrome-ren ezarpenetan</translation> <translation id="3634530185120165534">5. erretilua</translation> +<translation id="3637662659967048211">Gorde Google-ko kontuan</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Aplikazioa:</translation> <translation id="3650584904733503804">Behar bezala baliozkotu da</translation> @@ -1396,6 +1397,7 @@ <translation id="6106989379647458772">Baliteke <ph name="PAGE" /> helbideko web-orria ez funtzionatzea edo beste web-helbide batera betiko aldatu izatea.</translation> <translation id="6107012941649240045">Nori jaulkia:</translation> <translation id="610911394827799129">Google-ko kontuko arakatze-historiaren bestelako datu batzuk gera litezke <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> webgunean.</translation> +<translation id="6113594885686374546">"Berrekin bidaiari" botoia, sakatu Sartu bidaiari berrekiteko eta Chrome-ko historiako jarduera egokiak ikusteko</translation> <translation id="6116338172782435947">Ikusi arbelean kopiatzen ditudan testuak eta irudiak</translation> <translation id="6120179357481664955">Gogoan al duzu UPIko IDa?</translation> <translation id="6123290840358279103">Ikusi txartel birtuala</translation> @@ -1470,6 +1472,7 @@ <translation id="6423385022588644828">Aurrerantzean, berretsi txartelak bizkorrago Touch ID erabilita</translation> <translation id="6425092077175753609">Material diseinua</translation> <translation id="6427730057873428458">Leiho-erako tolestura</translation> +<translation id="6428146287756735566">Berrekin bidaiari Chrome-ko historiako jarduera egokiak ikusteko</translation> <translation id="6428450836711225518">Egiaztatu telefono-zenbakia</translation> <translation id="6433490469411711332">Editatu harremanetarako informazioa</translation> <translation id="6433595998831338502">Konexioa baztertu du <ph name="HOST_NAME" /> webguneak.</translation> @@ -1521,6 +1524,7 @@ <translation id="6643016212128521049">Garbitu</translation> <translation id="6645291930348198241">Cookieak eta webguneko datuak atzitu.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Bat ere ez}=1{1 gune (ez da amaituko Google-ko kontuko saioa)}other{# gune (ez da amaituko Google-ko kontuko saioa)}}</translation> +<translation id="6647197322759179819">Berrekin bidaiari</translation> <translation id="6648459603387803038">Administratzaileak urrunetik alda dezake arakatzailearen konfigurazioa. Baliteke gailu honetako jarduerak Chrome-tik kanpo ere kudeatzea.</translation> <translation id="6648524591329069940">Serif letra</translation> <translation id="6651270836885078973">Kudeatzailea:</translation> @@ -2172,6 +2176,7 @@ <translation id="9114524666733003316">Txartela berresten…</translation> <translation id="9114581008513152754">Arakatzailea ez du enpresa edo erakunde batek kudeatzen. Baliteke gailu honetako jarduerak Chrome-tik kanpo kudeatzea. <ph name="BEGIN_LINK" />Lortu informazio gehiago<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Freskoa</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, sakatu tabuladorea eta, ondoren, sakatu Sartu bidaiari berrekiteko eta Chrome-ko historiako jarduera egokiak ikusteko</translation> <translation id="9119042192571987207">Kargatuta</translation> <translation id="9128016270925453879">Kargatu dira gidalerroak</translation> <translation id="9128870381267983090">Konektatu sarera</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb index d9b20f9..02f98ac 100644 --- a/components/strings/components_strings_fa.xtb +++ b/components/strings/components_strings_fa.xtb
@@ -732,6 +732,7 @@ <translation id="3631244953324577188">زیستسنجشی</translation> <translation id="3633738897356909127">دکمه «بهروزرسانی Chrome»، برای بهروزرسانی Chrome ازطریق تنظیمات Chrome، کلید Enter (ورود) را فشار دهید</translation> <translation id="3634530185120165534">سینی ۵</translation> +<translation id="3637662659967048211">ذخیره در «حساب Google»</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">برنامه:</translation> <translation id="3650584904733503804">ارزیابی موفق بود</translation> @@ -1409,6 +1410,7 @@ <translation id="6106989379647458772">شاید صفحه وب در <ph name="PAGE" /> موقتاً غیرفعال شده باشد یا شاید بهطور دائم به آدرس وب جدیدی منتقل شده باشد.</translation> <translation id="6107012941649240045">صادر شده برای</translation> <translation id="610911394827799129">ممکن است حساب Google شما اشکال دیگری از سابقه مرور در <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> داشته باشد</translation> +<translation id="6113594885686374546">دکمه «ازسرگیری کاوش»، کلید «ورود» را فشار دهید تا کاوش را ازسر بگیرید و فعالیتهای مرتبط را در سابقه Chrome ببینید</translation> <translation id="6116338172782435947">به نوشتار و تصاویر کپیشده در بریدهدان دسترسی پیدا کند</translation> <translation id="6120179357481664955">شناسه «رابط پرداختهای یکپارچه» (UPI) شما بهخاطر سپرده شود؟</translation> <translation id="6123290840358279103">مشاهده کارت مجازی</translation> @@ -1484,6 +1486,7 @@ <translation id="6423385022588644828">ازاینپس، برای بهتأیید رساندن سریعتر کارتها، از «شناسه لمسی» استفاده شود</translation> <translation id="6425092077175753609">سهبعدی</translation> <translation id="6427730057873428458">تاخوردگی دروازهای</translation> +<translation id="6428146287756735566">کاوش را ازسربگیرید تا فعالیتهای مرتبط را در سابقه Chrome ببینید</translation> <translation id="6428450836711225518">بهتأیید رساندن شماره تلفن</translation> <translation id="6433490469411711332">ویرایش اطلاعات تماس</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> از اتصال خودداری کرد.</translation> @@ -1535,6 +1538,7 @@ <translation id="6643016212128521049">پاک کردن</translation> <translation id="6645291930348198241">به کوکیها و دادههای سایت دسترسی داشته باشد.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{هیچکدام}=1{از ۱ سایت (از سیستم حساب Google خود خارج نخواهید شد)}one{از # سایت (از سیستم حساب Google خود خارج نخواهید شد)}other{از # سایت (از سیستم حساب Google خود خارج نخواهید شد)}}</translation> +<translation id="6647197322759179819">ازسرگیری کاوش</translation> <translation id="6648459603387803038">سرپرستتان میتواند تنظیم مرورگرتان را ازراهدور تغییر دهد. فعالیت انجامشده در این دستگاه میتواند از خارج از Chrome هم مدیریت شود.</translation> <translation id="6648524591329069940">قلم Serif</translation> <translation id="6651270836885078973">مدیریت توسط:</translation> @@ -2186,6 +2190,7 @@ <translation id="9114524666733003316">درحال تأیید کردن کارت…</translation> <translation id="9114581008513152754">این مرورگر را شرکت یا سازمان دیگری مدیریت نمیکند. فعالیت در این دستگاه ممکن است خارج از Chrome مدیریت شود. <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation> <translation id="9117930699067497412">تازه</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />، کلید «جهش» و سپس «ورود» را فشار دهید تا کاوش را ازسر بگیرید و فعالیتهای مرتبط را در سابقه Chrome ببینید</translation> <translation id="9119042192571987207">بارگذاریشده</translation> <translation id="9128016270925453879">خطمشیها بار شد</translation> <translation id="9128870381267983090">اتصال به شبکه</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb index 8353321..467aacd 100644 --- a/components/strings/components_strings_fi.xtb +++ b/components/strings/components_strings_fi.xtb
@@ -735,6 +735,7 @@ <translation id="3631244953324577188">Biometriikka</translation> <translation id="3633738897356909127">Päivitä Chrome ‑painike, päivitä Chrome sen asetuksista painamalla Enter</translation> <translation id="3634530185120165534">Lokero 5</translation> +<translation id="3637662659967048211">Tallenna Google-tilille</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Sovellus:</translation> <translation id="3650584904733503804">Todennus onnistui</translation> @@ -1412,6 +1413,7 @@ <translation id="6106989379647458772">Verkkosivu <ph name="PAGE" /> saattaa olla väliaikaisesti poissa käytöstä tai se on siirretty pysyvästi uuteen osoitteeseen.</translation> <translation id="6107012941649240045">Myönnetty kohteelle</translation> <translation id="610911394827799129">Google-tililläsi voi olla muita selaushistoriatietoja osoitteessa <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> +<translation id="6113594885686374546">Jatka toimintoa ‑painike, paina Enter, niin voit jatkaa toimintoa ja nähdä oleelliset tapahtumat Chrome-historiassasi</translation> <translation id="6116338172782435947">nähdä leikepöydälle kopioidun tekstin ja kuvat</translation> <translation id="6120179357481664955">Muistatko UPI-tunnuksesi?</translation> <translation id="6123290840358279103">Näytä virtuaalinen kortti</translation> @@ -1487,6 +1489,7 @@ <translation id="6423385022588644828">Vahvista kortit jatkossa nopeammin Touch ID:llä</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">Lehtitaite</translation> +<translation id="6428146287756735566">Jatka toimintoa, niin näet oleelliset tapahtumat Chrome-historiassasi</translation> <translation id="6428450836711225518">Vahvista puhelinnumerosi</translation> <translation id="6433490469411711332">Muokkaa yhteystietoja</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> kieltäytyi muodostamasta yhteyttä.</translation> @@ -1538,6 +1541,7 @@ <translation id="6643016212128521049">Tyhjennä</translation> <translation id="6645291930348198241">päästä evästeisiin ja sivustodataan.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Ei mitään}=1{1 sivustolta (sinua ei kirjata ulos Google-tililtäsi)}other{# sivustolta (sinua ei kirjata ulos Google-tililtäsi)}}</translation> +<translation id="6647197322759179819">Jatka toimintoa</translation> <translation id="6648459603387803038">Järjestelmänvalvoja voi muuttaa selaimen määrityksiä etäyhteydellä. Toimintaa tällä laitteella saatetaan ylläpitää myös Chromen ulkopuolelta.</translation> <translation id="6648524591329069940">Serif-fontti</translation> <translation id="6651270836885078973">Ylläpitäjä:</translation> @@ -2190,6 +2194,7 @@ <translation id="9114524666733003316">Vahvistetaan korttia…</translation> <translation id="9114581008513152754">Yritys tai muu organisaatio ei ylläpidä selainta. Laitteen toimintaa saatetaan ylläpitää Chromen ulkopuolelta. <ph name="BEGIN_LINK" />Lue lisää<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Tuore</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, paina sarkainta ja Enter, niin voit jatkaa toimintoa ja nähdä oleelliset tapahtumat Chrome-historiassasi</translation> <translation id="9119042192571987207">Lähetetty</translation> <translation id="9128016270925453879">Käytännöt on ladattu</translation> <translation id="9128870381267983090">Yhdistä verkkoon</translation>
diff --git a/components/strings/components_strings_fr-CA.xtb b/components/strings/components_strings_fr-CA.xtb index 3f5585e..32c79d2 100644 --- a/components/strings/components_strings_fr-CA.xtb +++ b/components/strings/components_strings_fr-CA.xtb
@@ -728,6 +728,7 @@ <translation id="3631244953324577188">Données biométriques</translation> <translation id="3633738897356909127">Bouton Mise à jour de Chrome, appuyez sur la touche Entrée pour mettre à jour Chrome dans les paramètres de Chrome</translation> <translation id="3634530185120165534">Bac 5</translation> +<translation id="3637662659967048211">Enregistrer dans le compte Google</translation> <translation id="3640766068866876100">Fiche, 4 po x 6 po, ext</translation> <translation id="3642638418806704195">Application :</translation> <translation id="3650584904733503804">Validation réussie</translation> @@ -1400,6 +1401,7 @@ <translation id="6106989379647458772">Il se peut que la page Web à l'adresse <ph name="PAGE" /> soit temporairement inaccessible ou qu'elle ait été déplacée de façon permanente à une autre adresse Web.</translation> <translation id="6107012941649240045">Délivré à</translation> <translation id="610911394827799129">D'autres formes d'historique de navigation peuvent exister sur votre compte Google à l'adresse <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation> +<translation id="6113594885686374546">Bouton de reprise de la recherche, appuyez sur Entrée pour reprendre votre recherche et voir l'activité pertinente dans votre historique de Chrome</translation> <translation id="6116338172782435947">Voir le texte et les images copiés dans le presse-papiers</translation> <translation id="6120179357481664955">Se souvenir de votre identifiant UPI?</translation> <translation id="6123290840358279103">Afficher la carte virtuelle</translation> @@ -1475,6 +1477,7 @@ <translation id="6423385022588644828">Vérifiez vos cartes plus rapidement en vous servant de Touch ID à partir de maintenant</translation> <translation id="6425092077175753609">Matériel</translation> <translation id="6427730057873428458">Pli fenêtre</translation> +<translation id="6428146287756735566">Reprenez votre recherche pour voir l'activité pertinente dans votre historique de Chrome</translation> <translation id="6428450836711225518">Vérifier votre numéro de téléphone</translation> <translation id="6433490469411711332">Modifier les coordonnées</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> a refusé la connexion.</translation> @@ -1526,6 +1529,7 @@ <translation id="6643016212128521049">Effacer</translation> <translation id="6645291930348198241">Accéder aux témoins et aux données relatives aux sites.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Aucun}=1{De 1 site (vous ne serez pas déconnecté de votre compte Google)}one{De # site (vous ne serez pas déconnecté de votre compte Google)}other{De # sites (vous ne serez pas déconnecté de votre compte Google)}}</translation> +<translation id="6647197322759179819">Reprendre la recherche</translation> <translation id="6648459603387803038">Votre administrateur peut modifier la configuration de votre navigateur à distance. L'activité sur cet appareil peut aussi être gérée à l'extérieur de Chrome.</translation> <translation id="6648524591329069940">Police avec empattement</translation> <translation id="6651270836885078973">Géré par :</translation> @@ -2177,6 +2181,7 @@ <translation id="9114524666733003316">Confirmation de la carte en cours…</translation> <translation id="9114581008513152754">Ce navigateur n'est pas géré par une entreprise ou une organisation. L'activité sur cet appareil peut être gérée à l'extérieur de Chrome. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Frais</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, appuyez sur la touche Tabulation, puis sur la touche Entrée pour reprendre votre recherche et voir l'activité pertinente dans votre historique de Chrome</translation> <translation id="9119042192571987207">Téléversé</translation> <translation id="9128016270925453879">Les politiques ont été chargées</translation> <translation id="9128870381267983090">Connexion au réseau</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb index 47a2c3f..28969c73 100644 --- a/components/strings/components_strings_fr.xtb +++ b/components/strings/components_strings_fr.xtb
@@ -732,6 +732,7 @@ <translation id="3631244953324577188">Biométrie</translation> <translation id="3633738897356909127">Bouton "Mise à jour de Chrome" : appuyer sur Entrée pour mettre à jour Chrome depuis les paramètres du navigateur</translation> <translation id="3634530185120165534">Bac 5</translation> +<translation id="3637662659967048211">Enregistrer dans le compte Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Application :</translation> <translation id="3650584904733503804">Validation réussie.</translation> @@ -1409,6 +1410,7 @@ <translation id="6106989379647458772">Il est possible que la page Web située à l'adresse <ph name="PAGE" /> soit temporairement inaccessible ou qu'elle ait été déplacée de façon permanente à une nouvelle adresse Web.</translation> <translation id="6107012941649240045">Émis pour</translation> <translation id="610911394827799129">Votre compte Google conserve peut-être d'autres contenus d'historique de navigation sur la page <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation> +<translation id="6113594885686374546">Bouton "Reprendre les recherches", appuyez sur Entrée pour reprendre vos recherches et voir les activités pertinentes dans votre historique Chrome</translation> <translation id="6116338172782435947">Voir le texte et les images copiés dans le presse-papiers</translation> <translation id="6120179357481664955">Souhaitez-vous mémoriser votre ID UPI ?</translation> <translation id="6123290840358279103">Afficher la carte virtuelle</translation> @@ -1484,6 +1486,7 @@ <translation id="6423385022588644828">Confirmez désormais vos cartes plus rapidement avec Touch ID</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">Pli en volets</translation> +<translation id="6428146287756735566">Reprenez vos recherches pour voir les activités pertinentes dans votre historique Chrome</translation> <translation id="6428450836711225518">Validez votre numéro de téléphone</translation> <translation id="6433490469411711332">Modifier les coordonnées</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> n'autorise pas la connexion.</translation> @@ -1535,6 +1538,7 @@ <translation id="6643016212128521049">Effacer</translation> <translation id="6645291930348198241">Accéder aux cookies et aux données de site.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Aucun}=1{De 1 site (vous ne serez pas déconnecté de votre compte Google)}one{De # site (vous ne serez pas déconnecté de votre compte Google)}other{De # sites (vous ne serez pas déconnecté de votre compte Google)}}</translation> +<translation id="6647197322759179819">Reprendre les recherches</translation> <translation id="6648459603387803038">Votre administrateur peut modifier à distance la configuration de votre navigateur. Il se peut que l'activité sur cet appareil soit gérée en dehors de Chrome.</translation> <translation id="6648524591329069940">Police Serif</translation> <translation id="6651270836885078973">Gérées par :</translation> @@ -2186,6 +2190,7 @@ <translation id="9114524666733003316">Validation de la carte…</translation> <translation id="9114581008513152754">Ce navigateur n'est géré par aucune entreprise ni aucune autre organisation. Il se peut que l'activité sur cet appareil soit gérée en dehors de Chrome. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Frais</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, appuyez sur la touche Tabulation, puis sur Entrée pour reprendre vos recherches et voir les activités pertinentes dans votre historique Chrome</translation> <translation id="9119042192571987207">Importation terminée</translation> <translation id="9128016270925453879">Les règles sont chargées</translation> <translation id="9128870381267983090">Connectez-vous au réseau</translation>
diff --git a/components/strings/components_strings_gl.xtb b/components/strings/components_strings_gl.xtb index d689d82..e3076a6 100644 --- a/components/strings/components_strings_gl.xtb +++ b/components/strings/components_strings_gl.xtb
@@ -731,6 +731,7 @@ <translation id="3631244953324577188">Autenticación biométrica</translation> <translation id="3633738897356909127">Botón Actualizar Chrome. Preme Intro para actualizar Chrome desde a configuración do navegador</translation> <translation id="3634530185120165534">Bandexa 5</translation> +<translation id="3637662659967048211">Gardar na Conta de Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Aplicación:</translation> <translation id="3650584904733503804">Validación realizada correctamente</translation> @@ -1408,6 +1409,7 @@ <translation id="6106989379647458772">É posible que a páxina web de <ph name="PAGE" /> estea temporalmente inactiva ou que se trasladase definitivamente a un enderezo web novo.</translation> <translation id="6107012941649240045">Emitido para</translation> <translation id="610911394827799129">É posible que a túa conta de Google teña outras formas do historial de navegación en <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /></translation> +<translation id="6113594885686374546">Botón Retomar percorrido; para retomar o percorrido e ver a actividade relevante do teu historial de Chrome, preme Introducir</translation> <translation id="6116338172782435947">Ver o texto e as imaxes que se copian no portapapeis</translation> <translation id="6120179357481664955">Queres lembrar o teu código da UPI?</translation> <translation id="6123290840358279103">Ver tarxeta virtual</translation> @@ -1483,6 +1485,7 @@ <translation id="6423385022588644828">A partir de agora, confirma as tarxetas máis rápido con Touch ID</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">Dobrez en ventá</translation> +<translation id="6428146287756735566">Retoma o percorrido para ver a actividade relevante do teu historial de Chrome</translation> <translation id="6428450836711225518">Verificar o teu número de teléfono</translation> <translation id="6433490469411711332">Editar información de contacto</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> rexeitou a conexión.</translation> @@ -1534,6 +1537,7 @@ <translation id="6643016212128521049">Borrar</translation> <translation id="6645291930348198241">Acceder ás cookies e aos datos dos sitios.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Ningún}=1{De 1 sitio (non se pechará sesión na túa conta de Google)}other{De # sitios (non se pechará sesión na túa conta de Google)}}</translation> +<translation id="6647197322759179819">Retomar percorrido</translation> <translation id="6648459603387803038">O teu administrador pode cambiar a configuración do navegador de forma remota. A actividade deste dispositivo tamén se pode xestionar fóra de Chrome.</translation> <translation id="6648524591329069940">Tipo de letra con serifas</translation> <translation id="6651270836885078973">Xestionadas por:</translation> @@ -2185,6 +2189,7 @@ <translation id="9114524666733003316">Confirmando tarxeta…</translation> <translation id="9114581008513152754">Ningunha compañía ou organización xestiona este navegador. A actividade deste dispositivo pódese xestionar fóra de Chrome. <ph name="BEGIN_LINK" />Máis información<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Novo</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />; para retomar o percorrido e ver a actividade relevante do teu historial de Chrome, preme Tabulador e, despois, Introducir</translation> <translation id="9119042192571987207">Cargouse</translation> <translation id="9128016270925453879">Cargáronse as políticas</translation> <translation id="9128870381267983090">Conectarse á rede</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb index 2dbda10..a0261ac4 100644 --- a/components/strings/components_strings_hi.xtb +++ b/components/strings/components_strings_hi.xtb
@@ -732,6 +732,7 @@ <translation id="3631244953324577188">बायोमेट्रिक्स</translation> <translation id="3633738897356909127">'Chrome अपडेट करें' बटन, अपनी Chrome सेटिंग से Chrome अपडेट करने के लिए Enter दबाएं</translation> <translation id="3634530185120165534">ट्रे 5</translation> +<translation id="3637662659967048211">Google खाते में सेव करें</translation> <translation id="3640766068866876100">इंडेक्स-4x6-एक्स्ट्रा</translation> <translation id="3642638418806704195">ऐप्लिकेशन:</translation> <translation id="3650584904733503804">मान्यकरण सफल</translation> @@ -1409,6 +1410,7 @@ <translation id="6106989379647458772">हो सकता है कि <ph name="PAGE" /> पर मौजूद वेबपेज अस्थायी रूप से काम नहीं कर रहा हो या उसे स्थायी रूप से किसी नए वेब पते पर ले जाया गया हो.</translation> <translation id="6107012941649240045">इसको जारी</translation> <translation id="610911394827799129">आपके Google खाते में <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> पर दूसरी तरह के ब्राउज़िंग इतिहास हो सकते हैं</translation> +<translation id="6113594885686374546">ढूंढना जारी रखने के लिए बटन, ढूंढना जारी रखने के लिए Enter दबाएं. इससे आपको 'Chrome इतिहास' में मिलती-जुलती गतिविधि दिखेगी</translation> <translation id="6116338172782435947">क्लिपबोर्ड पर कॉपी किए गए लेख और इमेज देखें</translation> <translation id="6120179357481664955">क्या आप चाहते हैं कि हम आपका UPI आईडी रखें?</translation> <translation id="6123290840358279103">वर्चुअल कार्ड देखें</translation> @@ -1484,6 +1486,7 @@ <translation id="6423385022588644828">अब Touch ID का इस्तेमाल करके अपने कार्ड की जल्दी पुष्टि करें</translation> <translation id="6425092077175753609">मटीरियल</translation> <translation id="6427730057873428458">गेट फ़ोल्ड</translation> +<translation id="6428146287756735566">अपने 'Chrome इतिहास' में मिलती-जुलती गतिविधि देखने के लिए ढूंढना जारी रखें</translation> <translation id="6428450836711225518">अपने फ़ोन नंबर की पुष्टि करें</translation> <translation id="6433490469411711332">संपर्क जानकारी में बदलाव करें</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> ने कनेक्ट करने से मना कर दिया है.</translation> @@ -1535,6 +1538,7 @@ <translation id="6643016212128521049">साफ़ करें</translation> <translation id="6645291930348198241">कुकी और साइट के डेटा को ऐक्सेस करना चाहती है.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{कोई नहीं}=1{1 साइट से (आप अपने Google खाते से साइन आउट नहीं होंगे)}one{# साइटों से (आप अपने Google खाते से साइन आउट नहीं होंगे)}other{# साइटों से (आप अपने Google खाते से साइन आउट नहीं होंगे)}}</translation> +<translation id="6647197322759179819">ढूंढना जारी रखें</translation> <translation id="6648459603387803038">आपका एडमिन किसी दूसरे डिवाइस से आपके ब्राउज़र का सेट अप बदल सकता है. इस डिवाइस की गतिविधि को Chrome से बाहर भी प्रबंधित किया जा सकता है.</translation> <translation id="6648524591329069940">Serif फ़ॉन्ट</translation> <translation id="6651270836885078973">इसे यह मैनेज करता है:</translation> @@ -2187,6 +2191,7 @@ <translation id="9114524666733003316">कार्ड की पुष्टि की जा रही है...</translation> <translation id="9114581008513152754">यह ब्राउज़र कोई कंपनी या दूसरा संगठन प्रबंधित नहीं करता. इस डिवाइस की गतिविधि Chrome से बाहर प्रबंधित की जा सकती है. <ph name="BEGIN_LINK" />ज़्यादा जानें<ph name="END_LINK" /></translation> <translation id="9117930699067497412">ताज़ा</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, ढूंढना जारी रखने के लिए Tab दबाएं और फिर Enter दबाएं. इससे आपको 'Chrome इतिहास' में मिलती-जुलती गतिविधि दिखेगी</translation> <translation id="9119042192571987207">अपलोड किया गया</translation> <translation id="9128016270925453879">नीतियां लोड हो गई हैं</translation> <translation id="9128870381267983090">नेटवर्क से कनेक्ट करें</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb index 0a6cf61a..5879efa9 100644 --- a/components/strings/components_strings_hr.xtb +++ b/components/strings/components_strings_hr.xtb
@@ -733,6 +733,7 @@ <translation id="3631244953324577188">Biometrijski podaci</translation> <translation id="3633738897356909127">Gumb Ažuriranje Chromea, pritisnite Enter da biste ažurirali Chrome u postavkama Chromea</translation> <translation id="3634530185120165534">Ladica 5</translation> +<translation id="3637662659967048211">Spremanje na Google račun</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Aplikacija:</translation> <translation id="3650584904733503804">Valjanost je uspješna</translation> @@ -1411,6 +1412,7 @@ <translation id="6106989379647458772">Web-stranica na <ph name="PAGE" /> možda privremeno nije dostupna ili je trajno premještena na novu web-adresu.</translation> <translation id="6107012941649240045">Izdano za</translation> <translation id="610911394827799129">Na vašem Google računu možda postoje drugi oblici povijesti pregledavanja na stranici <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation> +<translation id="6113594885686374546">Gumb Nastavi putovanje, pritisnite Enter da biste nastavili putovanje i vidjeli relevantne aktivnosti u svojoj povijesti na Chromeu</translation> <translation id="6116338172782435947">vidjeti tekst i slike koje kopirate u međuspremnik</translation> <translation id="6120179357481664955">Upamtiti vaš UPI ID?</translation> <translation id="6123290840358279103">Prikaži virtualnu karticu</translation> @@ -1486,6 +1488,7 @@ <translation id="6423385022588644828">Odsad brže potvrdite svoje kartice upotrebom značajke Touch ID.</translation> <translation id="6425092077175753609">Materijal</translation> <translation id="6427730057873428458">Presavijanje u obliku prozora</translation> +<translation id="6428146287756735566">Nastavite putovanje da biste vidjeli relevantne aktivnosti u svojoj povijesti na Chromeu</translation> <translation id="6428450836711225518">Potvrdite svoj telefonski broj</translation> <translation id="6433490469411711332">Uređivanje podataka za kontakt</translation> <translation id="6433595998831338502">Host <ph name="HOST_NAME" /> odbio je povezivanje.</translation> @@ -1537,6 +1540,7 @@ <translation id="6643016212128521049">Izbriši</translation> <translation id="6645291930348198241">pristupiti kolačićima i podacima web-lokacije.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Nijedna}=1{S jedne web-lokacije (nećete se odjaviti s Google računa)}one{S # web-lokacije (nećete se odjaviti s Google računa)}few{S # web-lokacije (nećete se odjaviti s Google računa)}other{S # web-lokacija (nećete se odjaviti s Google računa)}}</translation> +<translation id="6647197322759179819">Nastavi putovanje</translation> <translation id="6648459603387803038">Vaš administrator može daljinski promijeniti postavke preglednika. Aktivnostima na ovom uređaju može se upravljati i izvan Chromea.</translation> <translation id="6648524591329069940">Font Serif</translation> <translation id="6651270836885078973">Upravlja:</translation> @@ -2190,6 +2194,7 @@ <translation id="9114524666733003316">Potvrđivanje kartice...</translation> <translation id="9114581008513152754">Preglednikom ne upravlja tvrtka ili neka druga organizacija. Aktivnostima na ovom uređaju možda se upravlja izvan Chromea. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Novo</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, pritisnite Tab, a zatim Enter da biste nastavili putovanje i vidjeli relevantne aktivnosti u svojoj povijesti na Chromeu</translation> <translation id="9119042192571987207">Preneseno</translation> <translation id="9128016270925453879">Pravila se učitavaju</translation> <translation id="9128870381267983090">Povezivanje s mrežom</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb index 97f335d..70d569fd 100644 --- a/components/strings/components_strings_hu.xtb +++ b/components/strings/components_strings_hu.xtb
@@ -730,6 +730,7 @@ <translation id="3631244953324577188">Biometria</translation> <translation id="3633738897356909127">Chrome frissítése gomb, nyomja le az Enter billentyűt a Chrome-nak a Chrome beállításaiban való frissítéséhez</translation> <translation id="3634530185120165534">5. tálca</translation> +<translation id="3637662659967048211">Mentés Google-fiókba</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Alkalmazás:</translation> <translation id="3650584904733503804">Sikeres érvényesítés</translation> @@ -1407,6 +1408,7 @@ <translation id="6106989379647458772">Előfordulhat, hogy a(z) <ph name="PAGE" /> webhelyen található oldal ideiglenesen nem érhető el, vagy véglegesen új címre költözött.</translation> <translation id="6107012941649240045">Tulajdonos</translation> <translation id="610911394827799129">Előfordulhat, hogy a böngészési előzmények más formái még megtalálhatók Google-fiókjában a <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> webhelyen</translation> +<translation id="6113594885686374546">Keresés folytatása gomb, nyomja le az Enter billentyűt, ha folytatni szeretné a keresést, és meg szeretné tekinteni a releváns tevékenységet Chrome-előzményei között</translation> <translation id="6116338172782435947">Megtekinteni a vágólapra másolt szövegeket és képeket</translation> <translation id="6120179357481664955">Emlékszik UPI-azonosítójára?</translation> <translation id="6123290840358279103">Virtuális kártya megtekintése</translation> @@ -1482,6 +1484,7 @@ <translation id="6423385022588644828">Mostantól gyorsabban igazolhatja kártyáit a Touch ID használatával</translation> <translation id="6425092077175753609">Anyag</translation> <translation id="6427730057873428458">Kihajtható</translation> +<translation id="6428146287756735566">Keresés folytatása a Chrome-előzmények között található releváns tevékenységek megtekintéséhez</translation> <translation id="6428450836711225518">Telefonszám ellenőrzése</translation> <translation id="6433490469411711332">Kapcsolattartási adatok szerkesztése</translation> <translation id="6433595998831338502">A(z) <ph name="HOST_NAME" /> visszautasította a csatlakozást.</translation> @@ -1533,6 +1536,7 @@ <translation id="6643016212128521049">Törlés</translation> <translation id="6645291930348198241">Hozzáférés a cookie-khoz és a webhelyadatokhoz.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Nincs}=1{1 webhelyről (a böngésző nem jelentkezteti ki Google-fiókjából)}other{# webhelyről (a böngésző nem jelentkezteti ki Google-fiókjából)}}</translation> +<translation id="6647197322759179819">Keresés folytatása</translation> <translation id="6648459603387803038">A rendszergazda távolról módosítani tudja a böngészőbeállításokat. Az is lehetséges, hogy az eszközön végzett tevékenységeket a Chrome-on kívülről felügyelik.</translation> <translation id="6648524591329069940">Serif betűtípus</translation> <translation id="6651270836885078973">Kezelő:</translation> @@ -2185,6 +2189,7 @@ <translation id="9114524666733003316">Kártya ellenőrzése…</translation> <translation id="9114581008513152754">Ezt a böngészőt nem kezeli cég vagy más szervezet. Lehetséges, hogy az eszközön végzett tevékenységeket a Chrome-on kívülről felügyelik. <ph name="BEGIN_LINK" />További információ<ph name="END_LINK" />.</translation> <translation id="9117930699067497412">Friss</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, nyomja le a Tab, majd az Enter billentyűt, ha folytatni szeretné a keresést, és meg szeretné tekinteni a releváns tevékenységet Chrome-előzményei között</translation> <translation id="9119042192571987207">Feltöltve</translation> <translation id="9128016270925453879">Házirendek betöltve</translation> <translation id="9128870381267983090">Csatlakozás hálózathoz</translation>
diff --git a/components/strings/components_strings_hy.xtb b/components/strings/components_strings_hy.xtb index 2a09d50a..9dda317b 100644 --- a/components/strings/components_strings_hy.xtb +++ b/components/strings/components_strings_hy.xtb
@@ -734,6 +734,7 @@ <translation id="3631244953324577188">Կենսաչափական համակարգեր</translation> <translation id="3633738897356909127">«Թարմացնել Chrome-ը» կոճակ։ Սեղմեք Enter՝ Chrome-ը թարմացելու համար։</translation> <translation id="3634530185120165534">Դարակ 5</translation> +<translation id="3637662659967048211">Պահեք Google հաշվում</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Ծրագիրը՝</translation> <translation id="3650584904733503804">Վավերացումը հաջողվեց</translation> @@ -1411,6 +1412,7 @@ <translation id="6106989379647458772">Հնարավոր է, որ <ph name="PAGE" /> կայքէջը ժամանակավորապես անհասանելի է կամ մշտապես տեղափոխվել է նոր հասցե:</translation> <translation id="6107012941649240045">Տրված`</translation> <translation id="610911394827799129">Ձեր Google հաշվում կարող են լինել այցելությունների պատմության այլ ձևեր ևս: Դրանք կարող եք գտնել <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> էջում:</translation> +<translation id="6113594885686374546">«Շարունակել որոնումը» կոճակ։ Chrome-ի պատմության մեջ նման հարցումները դիտելու համար սեղմեք Enter։</translation> <translation id="6116338172782435947">Տեսնել սեղմատախտակին պատճենված տեքստը և պատկերները</translation> <translation id="6120179357481664955">Հիշո՞ւմ եք ձեր UPI ID-ն</translation> <translation id="6123290840358279103">Դիտել վիրտուալ քարտը</translation> @@ -1486,6 +1488,7 @@ <translation id="6423385022588644828">Այսուհետ ավելի արագ հաստատեք ձեր քարտերը Touch ID-ի միջոցով</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">Երկփեղկ ծալում</translation> +<translation id="6428146287756735566">Դիտել նման հարցումներ Chrome-ի պատմության մեջ</translation> <translation id="6428450836711225518">Հաստատեք ձեր հեռախոսահամարը</translation> <translation id="6433490469411711332">Փոփոխեք կոնտակտային տվյալները</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" />-ը մերժեց կապակցումը:</translation> @@ -1537,6 +1540,7 @@ <translation id="6643016212128521049">Մաքրել</translation> <translation id="6645291930348198241">Օգտագործել քուքիներն ու կայքի տվյալները։</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Ոչինչ չկա}=1{1 կայքից (դուք դուրս չեք գա ձեր Google հաշվից)}one{# կայքից (դուք դուրս չեք գա ձեր Google հաշվից)}other{# կայքից (դուք դուրս չեք գա ձեր Google հաշվից)}}</translation> +<translation id="6647197322759179819">Շարունակել որոնումը</translation> <translation id="6648459603387803038">Ձեր ադմինիստրատորը կարող է հեռակա փոխել ձեր դիտարկիչի կարգավորումները։ Սարքում արվող գործողությունները նույնպես կարող են կառավարվել Chrome-ից դուրս։</translation> <translation id="6648524591329069940">Serif տառատեսակ</translation> <translation id="6651270836885078973">Կառավարիչ՝</translation> @@ -2188,6 +2192,7 @@ <translation id="9114524666733003316">Քարտի հաստատում...</translation> <translation id="9114581008513152754">Ձեր դիտարկիչը չի կառավարվում որևէ ընկերության կամ կազմակերպության կողմից։ Սարքում արվող գործողությունները կարող են կառավարվել Chrome-ից դուրս։ <ph name="BEGIN_LINK" />Իմանալ ավելին<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Թարմ</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />։ Chrome-ի պատմության մեջ նման հարցումները դիտելու համար սեղմեք Tab, ապա՝ Enter։</translation> <translation id="9119042192571987207">Վերբեռնված է</translation> <translation id="9128016270925453879">Կանոնները բեռնվել են</translation> <translation id="9128870381267983090">Կապակցեք ցանցին</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb index 8ac6e2bb..b1d62d1 100644 --- a/components/strings/components_strings_id.xtb +++ b/components/strings/components_strings_id.xtb
@@ -729,6 +729,7 @@ <translation id="3631244953324577188">Biometrik</translation> <translation id="3633738897356909127">Tombol Update Chrome, tekan Enter untuk mengupdate Chrome dari setelan Chrome</translation> <translation id="3634530185120165534">Baki 5</translation> +<translation id="3637662659967048211">Simpan ke Akun Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Aplikasi:</translation> <translation id="3650584904733503804">Validasi berhasil</translation> @@ -1401,6 +1402,7 @@ <translation id="6106989379647458772">Halaman web di <ph name="PAGE" /> mungkin tidak aktif untuk sementara atau dipindahkan secara permanen ke alamat web baru.</translation> <translation id="6107012941649240045">Diterbitkan Untuk</translation> <translation id="610911394827799129">Akun Google Anda mungkin memiliki bentuk histori penjelajahan lainnya di <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation> +<translation id="6113594885686374546">Tombol Lanjutkan penelusuran, tekan Enter untuk melanjutkan penelusuran dan melihat aktivitas yang relevan di histori Chrome Anda</translation> <translation id="6116338172782435947">Melihat teks dan gambar yang disalin ke papan klip</translation> <translation id="6120179357481664955">Ingat ID UPI Anda?</translation> <translation id="6123290840358279103">Lihat kartu virtual</translation> @@ -1476,6 +1478,7 @@ <translation id="6423385022588644828">Mulai sekarang, konfirmasikan kartu Anda lebih cepat menggunakan Touch ID</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">Gate fold</translation> +<translation id="6428146287756735566">Lanjutkan penelusuran untuk melihat aktivitas yang relevan di histori Chrome Anda</translation> <translation id="6428450836711225518">Verifikasi nomor telepon Anda</translation> <translation id="6433490469411711332">Edit info kontak</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> menolak untuk tersambung.</translation> @@ -1527,6 +1530,7 @@ <translation id="6643016212128521049">Hapus</translation> <translation id="6645291930348198241">Mengakses cookie dan data situs.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Tidak ada}=1{Dari 1 situs (Anda tidak akan logout dari Akun Google)}other{Dari # situs (Anda tidak akan logout dari Akun Google)}}</translation> +<translation id="6647197322759179819">Lanjutkan penelusuran</translation> <translation id="6648459603387803038">Administrator dapat mengubah penyiapan browser Anda dari jarak jauh. Aktivitas di perangkat ini juga dapat dikelola di luar Chrome.</translation> <translation id="6648524591329069940">Font Serif</translation> <translation id="6651270836885078973">Dikelola oleh:</translation> @@ -2174,6 +2178,7 @@ <translation id="9114524666733003316">Mengonfirmasi kartu...</translation> <translation id="9114581008513152754">Browser ini tidak dikelola oleh perusahaan atau organisasi lain. Aktivitas di perangkat ini mungkin dikelola di luar Chrome. <ph name="BEGIN_LINK" />Pelajari lebih lanjut<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Baru</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, tekan Tab, lalu Enter untuk melanjutkan penelusuran dan melihat aktivitas yang relevan di histori Chrome Anda</translation> <translation id="9119042192571987207">Diupload</translation> <translation id="9128016270925453879">Kebijakan dimuat</translation> <translation id="9128870381267983090">Sambungkan ke jaringan</translation>
diff --git a/components/strings/components_strings_is.xtb b/components/strings/components_strings_is.xtb index d7e6ad5..a79b823 100644 --- a/components/strings/components_strings_is.xtb +++ b/components/strings/components_strings_is.xtb
@@ -735,6 +735,7 @@ <translation id="3631244953324577188">Lífkenni</translation> <translation id="3633738897356909127">Hnappurinn Uppfæra Chrome, ýttu á Enter til að uppfæra Chrome úr stillingum Chrome</translation> <translation id="3634530185120165534">Bakki 5</translation> +<translation id="3637662659967048211">Vista á Google reikningi</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Forrit:</translation> <translation id="3650584904733503804">Sannvottun heppnaðist</translation> @@ -1412,6 +1413,7 @@ <translation id="6106989379647458772">Vefsíðan á <ph name="PAGE" /> gæti legið niðri tímabundið eða hafa verið færð á nýtt veffang fyrir fullt og allt.</translation> <translation id="6107012941649240045">Úthlutað til</translation> <translation id="610911394827799129">Google reikningurinn þinn kann að vera með annars konar vefskoðunarferil á <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation> +<translation id="6113594885686374546">Hnappur til að halda ferðinni áfram, ýttu á Enter til að halda ferðinni áfram og sjá viðkomandi virkni í Chrome ferlinum</translation> <translation id="6116338172782435947">Sjá texta og myndir sem þú afritar á klippiborðið</translation> <translation id="6120179357481664955">Muna eftir UPI-auðkenni?</translation> <translation id="6123290840358279103">Skoða sýndarkort</translation> @@ -1487,6 +1489,7 @@ <translation id="6423385022588644828">Staðfestu kortin þín hraðar með því að nota Touch ID héðan í frá</translation> <translation id="6425092077175753609">Nýja útlitshönnunin</translation> <translation id="6427730057873428458">Bæklingabrot</translation> +<translation id="6428146287756735566">Haltu ferðinni áfram til að sjá viðkomandi virkni í Chrome ferlinum</translation> <translation id="6428450836711225518">Staðfestu símanúmerið þitt</translation> <translation id="6433490469411711332">Breyta samskiptaupplýsingum</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> neitaði að koma á tengingu.</translation> @@ -1538,6 +1541,7 @@ <translation id="6643016212128521049">Hreinsa</translation> <translation id="6645291930348198241">Fá aðgang að fótsporum og gögnum vefsvæða.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Ekkert}=1{Frá einu vefsvæði (þú verður ekki skráð(ur) út af Google reikningnum þínum)}one{Frá # vefsvæði (þú verður ekki skráð(ur) út af Google reikningnum þínum)}other{Frá # vefsvæðum (þú verður ekki skráð(ur) út af Google reikningnum þínum)}}</translation> +<translation id="6647197322759179819">Halda ferðinni áfram</translation> <translation id="6648459603387803038">Kerfisstjórinn þinn getur breytt uppsetningu vafrans með fjartengingu. Virkni þinni í þessu tæki er einnig hægt að stjórna utan Chrome.</translation> <translation id="6648524591329069940">Serif-letur</translation> <translation id="6651270836885078973">Stjórnað af:</translation> @@ -2189,6 +2193,7 @@ <translation id="9114524666733003316">Staðfestir kort...</translation> <translation id="9114581008513152754">Þessi vafri er ekki í umsjón fyrirtækis eða annarrar stofnunar. Hægt er að hafa umsjón með aðgerðum í þessu tæki utan Chrome. <ph name="BEGIN_LINK" />Frekari upplýsingar<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Ferskt</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, ýttu á dálkalykilinn og svo á Enter til að halda ferðinni áfram og sjá viðkomandi virkni í Chrome ferlinum</translation> <translation id="9119042192571987207">Sent</translation> <translation id="9128016270925453879">Reglum var hlaðið</translation> <translation id="9128870381267983090">Tengjast neti</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb index adc9c78..c9cf5d7 100644 --- a/components/strings/components_strings_it.xtb +++ b/components/strings/components_strings_it.xtb
@@ -731,6 +731,7 @@ <translation id="3631244953324577188">Dati biometrici</translation> <translation id="3633738897356909127">Pulsante Aggiorna Chrome, premi Invio per aggiornare Chrome dalle relative impostazioni</translation> <translation id="3634530185120165534">Vassoio 5</translation> +<translation id="3637662659967048211">Salva nell'Account Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Applicazione:</translation> <translation id="3650584904733503804">Convalida riuscita</translation> @@ -1408,6 +1409,7 @@ <translation id="6106989379647458772">La pagina web all'indirizzo <ph name="PAGE" /> potrebbe non essere momentaneamente disponibile o potrebbe essere stata trasferita definitivamente a un nuovo indirizzo web.</translation> <translation id="6107012941649240045">Rilasciato a</translation> <translation id="610911394827799129">Il tuo Account Google potrebbe avere altre forme di cronologia di navigazione all'indirizzo <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation> +<translation id="6113594885686374546">Pulsante Riprendi il percorso, premi Invio per riprendere il percorso e visualizzare le attività pertinenti nella tua cronologia di Chrome</translation> <translation id="6116338172782435947">Leggere testi e immagini copiati negli appunti</translation> <translation id="6120179357481664955">Ricordi il tuo ID UPI?</translation> <translation id="6123290840358279103">Visualizza carta virtuale</translation> @@ -1482,6 +1484,7 @@ <translation id="6423385022588644828">Verifica più velocemente le tue carte usando Touch ID d'ora in poi</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">Piegatura a finestra</translation> +<translation id="6428146287756735566">Riprendi il percorso per visualizzare le attività pertinenti nella tua cronologia di Chrome</translation> <translation id="6428450836711225518">Verifica il numero di telefono</translation> <translation id="6433490469411711332">Modifica informazioni di contatto</translation> <translation id="6433595998831338502">Connessione negata da <ph name="HOST_NAME" />.</translation> @@ -1533,6 +1536,7 @@ <translation id="6643016212128521049">Cancella</translation> <translation id="6645291930348198241">Accedere a cookie e dati del sito.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Nessuno}=1{Da 1 sito (non verrai disconnesso dal tuo Account Google)}other{Da # siti (non verrai disconnesso dal tuo Account Google)}}</translation> +<translation id="6647197322759179819">Riprendi il percorso</translation> <translation id="6648459603387803038">L'amministratore può modificare da remoto la configurazione del browser. L'attività svolta su questo dispositivo potrebbe essere gestita anche al di fuori di Chrome.</translation> <translation id="6648524591329069940">Carattere serif</translation> <translation id="6651270836885078973">Gestiti da:</translation> @@ -2184,6 +2188,7 @@ <translation id="9114524666733003316">Conferma della carta...</translation> <translation id="9114581008513152754">Questo browser non è gestito da un'azienda o da un'altra organizzazione. L'attività svolta su questo dispositivo potrebbe essere gestita al di fuori di Chrome. <ph name="BEGIN_LINK" />Ulteriori informazioni<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Vivace</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, premi Tab poi Invio per riprendere il percorso e visualizzare le attività pertinenti nella tua cronologia di Chrome</translation> <translation id="9119042192571987207">Caricato</translation> <translation id="9128016270925453879">I criteri sono stati caricati</translation> <translation id="9128870381267983090">Collegati alla rete</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb index f98f308..4da5a2d 100644 --- a/components/strings/components_strings_iw.xtb +++ b/components/strings/components_strings_iw.xtb
@@ -734,6 +734,7 @@ <translation id="3631244953324577188">מידע ביומטרי</translation> <translation id="3633738897356909127">הלחצן 'עדכון Chrome', יש להקיש על Enter כדי לעדכן את דפדפן Chrome בהגדרות Chrome</translation> <translation id="3634530185120165534">מגש 5</translation> +<translation id="3637662659967048211">שמירה בחשבון Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">אפליקציה:</translation> <translation id="3650584904733503804">האימות בוצע בהצלחה</translation> @@ -1414,6 +1415,7 @@ <translation id="6106989379647458772">ייתכן שדף האינטרנט בכתובת <ph name="PAGE" /> אינו פעיל זמנית, או שהוא הועבר לכתובת אינטרנט קבועה אחרת.</translation> <translation id="6107012941649240045">מונפק ל</translation> <translation id="610911394827799129">ייתכן שיהיה אפשר לגשת לסוגים אחרים של היסטוריית גלישה בחשבון Google בכתובת <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> +<translation id="6113594885686374546">הלחצן 'המשך התהליך', יש להקיש על Enter להמשך התהליך ולהצגת פעילות רלוונטית בהיסטוריה ב-Chrome</translation> <translation id="6116338172782435947">גישה אל טקסט ותמונות שהועתקו ללוח</translation> <translation id="6120179357481664955">מזהה UPI שלך זכור לך?</translation> <translation id="6123290840358279103">לצפייה בכרטיס הווירטואלי</translation> @@ -1489,6 +1491,7 @@ <translation id="6423385022588644828">כדי לאשר את הכרטיסים שלך מהר יותר, אפשר להשתמש ב-Touch ID מעכשיו והלאה</translation> <translation id="6425092077175753609">עיצוב חדשני תלת-ממדי</translation> <translation id="6427730057873428458">כנף בקיפול</translation> +<translation id="6428146287756735566">המשך התהליך מאפשר הצגת פעילות רלוונטית בהיסטוריה שלך ב-Chrome</translation> <translation id="6428450836711225518">אימות מספר הטלפון שלך</translation> <translation id="6433490469411711332">עריכת הפרטים ליצירת קשר</translation> <translation id="6433595998831338502">לא ניתן היה להתחבר אל <ph name="HOST_NAME" />.</translation> @@ -1540,6 +1543,7 @@ <translation id="6643016212128521049">ניקוי</translation> <translation id="6645291930348198241">לקבל גישה לקובצי Cookie ולנתוני אתרים.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{ללא}=1{מאתר אחד (לא תבוצע יציאה מחשבון Google שלך.)}two{מ-# אתרים (לא תבוצע יציאה מחשבון Google שלך.)}many{מ-# אתרים (לא תבוצע יציאה מחשבון Google שלך.)}other{מ-# אתרים (לא תבוצע יציאה מחשבון Google שלך.)}}</translation> +<translation id="6647197322759179819">המשך התהליך</translation> <translation id="6648459603387803038">מנהל המערכת יכול לשנות את הגדרת הדפדפן שלך מרחוק. בנוסף, ניתן לנהל את הפעילות במכשיר הזה מחוץ ל-Chrome.</translation> <translation id="6648524591329069940">גופן Serif</translation> <translation id="6651270836885078973">בניהול של:</translation> @@ -2191,6 +2195,7 @@ <translation id="9114524666733003316">אישור הכרטיס מתבצע...</translation> <translation id="9114581008513152754">הדפדפן הזה לא מנוהל על ידי חברה או ארגון אחר. ייתכן שהפעילות במכשיר הזה מנוהלת מחוץ ל-Chrome. <ph name="BEGIN_LINK" />מידע נוסף<ph name="END_LINK" /></translation> <translation id="9117930699067497412">מרענן</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, יש להקיש על Tab ואז על Enter להמשך התהליך ולהצגת פעילות רלוונטית בהיסטוריה ב-Chrome</translation> <translation id="9119042192571987207">הועלה</translation> <translation id="9128016270925453879">המדיניות נטענה</translation> <translation id="9128870381267983090">התחברות לרשת</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb index 2c2d807..1820b26 100644 --- a/components/strings/components_strings_ja.xtb +++ b/components/strings/components_strings_ja.xtb
@@ -1713,7 +1713,7 @@ <translation id="7378594059915113390">メディアの操作</translation> <translation id="7378627244592794276">いいえ</translation> <translation id="7378810950367401542">/</translation> -<translation id="7386364858855961704">該当なし</translation> +<translation id="7386364858855961704">対象外です</translation> <translation id="7390545607259442187">カードの確認</translation> <translation id="7392089738299859607">住所を更新</translation> <translation id="7399802613464275309">安全確認</translation>
diff --git a/components/strings/components_strings_ka.xtb b/components/strings/components_strings_ka.xtb index df365975..f0c527b 100644 --- a/components/strings/components_strings_ka.xtb +++ b/components/strings/components_strings_ka.xtb
@@ -728,6 +728,7 @@ <translation id="3631244953324577188">ბიომეტრიული მონაცემები</translation> <translation id="3633738897356909127">Chrome-ის განახლების ღილაკი, Chrome-ის პარამეტრებიდან Chrome-ის გასაახლებლად დააჭირეთ კლავიშს Enter</translation> <translation id="3634530185120165534">ლანგარი 5</translation> +<translation id="3637662659967048211">შეინახეთ Google ანგარიშში</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">აპლიკაცია:</translation> <translation id="3650584904733503804">წარმატებული შემოწმება</translation> @@ -1400,6 +1401,7 @@ <translation id="6106989379647458772"><ph name="PAGE" />-ზე არსებული ვებგვერდი შეიძლება იყოს დროებით გათიშული ან სამუდამოდ ახალ ვებ მისამართზე გადასული.</translation> <translation id="6107012941649240045">გაცემულია</translation> <translation id="610911394827799129">თქვენს Google ანგარიშში შეიძლება ინახებოდეს სხვა ტიპის დათვალიერების ისტორიაც, რომელიც ხელმისაწვდომია მისამართზე: <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation> +<translation id="6113594885686374546">პროცესის გაგრძელების ღილაკი, პროცესის გასაგრძელებლად და თქვენს Chrome-ის ისტორიაში შესაბამისი აქტივობის სანახავად დააჭირეთ კლავიშს Tab, შემდეგ კი — Enter-ს</translation> <translation id="6116338172782435947">გაცვლის ბუფერში კოპირებული ტექსტისა და სურათების ნახვა</translation> <translation id="6120179357481664955">გსურთ თქვენი UPI ID-ს დამახსოვრება?</translation> <translation id="6123290840358279103">ვირტუალური ბარათის ჩვენება</translation> @@ -1475,6 +1477,7 @@ <translation id="6423385022588644828">დაადასტურეთ ბარათები უფრო სწრაფად ამიერიდან Touch ID-ს გამოყენების მეშვეობით</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">დაკეცვა ჭიშკრის ფორმით</translation> +<translation id="6428146287756735566">გააგრძელეთ პროცესი, თქვენს Chrome-ის ისტორიაში შესაბამისი აქტივობა რომ იხილოთ</translation> <translation id="6428450836711225518">დაადასტურეთ თქვენი ტელეფონის ნომერი</translation> <translation id="6433490469411711332">საკონტაქტო ინფორმაციის რედაქტირება</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" />-მა უარყო დაკავშირება.</translation> @@ -1526,6 +1529,7 @@ <translation id="6643016212128521049">გასუფთავება</translation> <translation id="6645291930348198241">ქუქი-ჩანაწერებსა და საიტის მონაცემებზე წვდომა.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{არცერთი}=1{1 საიტიდან (თქვენ არ გამოხვალთ Google ანგარიშიდან)}other{# საიტიდან (თქვენ არ გამოხვალთ Google ანგარიშიდან)}}</translation> +<translation id="6647197322759179819">პროცესის გაგრძელება</translation> <translation id="6648459603387803038">თქვენს ადმინისტრატორს დისტანციურად შეუძლია ბრაუზერში დაყენებული პარამეტრების შეცვლა. ამ მოწყობილობაზე აქტივობა შეიძლება იმართებოდეს Chrome-ს მიღმაც.</translation> <translation id="6648524591329069940">Serif შრიფტი</translation> <translation id="6651270836885078973">მმართველი:</translation> @@ -2177,6 +2181,7 @@ <translation id="9114524666733003316">მიმდინარეობს ბარათის დადასტურება...</translation> <translation id="9114581008513152754">ამ ბრაუზერს არ მართავს კომპანია თუ სხვა ორგანიზაცია. ამ მოწყობილობაზე აქტივობა შეიძლება იმართებოდეს Chrome-ს მიღმა. <ph name="BEGIN_LINK" />შეიტყვეთ მეტი<ph name="END_LINK" /></translation> <translation id="9117930699067497412">ნორჩი</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, პროცესის გასაგრძელებლად და თქვენს Chrome-ის ისტორიაში შესაბამისი აქტივობის სანახავად დააჭირეთ კლავიშს Tab, შემდეგ კი — Enter-ს</translation> <translation id="9119042192571987207">ატვირთულია</translation> <translation id="9128016270925453879">წესები ჩაიტვირთა</translation> <translation id="9128870381267983090">ქსელთან დაკავშირება</translation>
diff --git a/components/strings/components_strings_kk.xtb b/components/strings/components_strings_kk.xtb index d7080b0..484ef527 100644 --- a/components/strings/components_strings_kk.xtb +++ b/components/strings/components_strings_kk.xtb
@@ -733,6 +733,7 @@ <translation id="3631244953324577188">Биометрика</translation> <translation id="3633738897356909127">"Chrome-ды жаңарту" түймесі, Chrome параметрлерінен Chrome-ды жаңарту үшін Enter пернесін басыңыз.</translation> <translation id="3634530185120165534">5-науа</translation> +<translation id="3637662659967048211">Google есептік жазбасына сақтау</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Қолданба:</translation> <translation id="3650584904733503804">Тексеру сәтті аяқталды</translation> @@ -1410,6 +1411,7 @@ <translation id="6106989379647458772"><ph name="PAGE" /> мекенжайындағы веб-бет уақытша өшірілген немесе біржола жаңа мекенжайға көшірілген болуы мүмкін.</translation> <translation id="6107012941649240045">Кімге берілді</translation> <translation id="610911394827799129"><ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> бетінде Google есептік жазбасымен шолу тарихының басқа да үлгілері болуы мүмкін.</translation> +<translation id="6113594885686374546">Іздеуді жалғастыру түймесі. Іздеуді жалғастырып, Chrome тарихынан сәйкес сұрауларды көру үшін Enter пернесін басыңыз.</translation> <translation id="6116338172782435947">Буферге көшірілетін мәтіндер мен кескіндерді көру</translation> <translation id="6120179357481664955">UPI идентификаторы сақталсын ба?</translation> <translation id="6123290840358279103">Виртуалды картаны көру</translation> @@ -1485,6 +1487,7 @@ <translation id="6423385022588644828">Қазірден бастап Touch ID арқылы карталараңызды жылдам растаңыз</translation> <translation id="6425092077175753609">Материал</translation> <translation id="6427730057873428458">Қақпа тәрізді бүктеу</translation> +<translation id="6428146287756735566">Chrome тарихынан сәйкес сұрауларды көру үшін іздеуді жалғастыру</translation> <translation id="6428450836711225518">Телефон нөміріңізді растаңыз</translation> <translation id="6433490469411711332">Байланыс ақпаратын өңдеу</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> байланыстан бас тартты.</translation> @@ -1536,6 +1539,7 @@ <translation id="6643016212128521049">Тазалау</translation> <translation id="6645291930348198241">Cookie файлдарын және сайт деректерін пайдалану.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Жоқ}=1{1 сайттан (Google есептік жазбаңыздан шықпайсыз)}other{# сайттан (Google есептік жазбаңыздан шықпайсыз)}}</translation> +<translation id="6647197322759179819">Іздеуді жалғастыру</translation> <translation id="6648459603387803038">Браузер параметрін әкімші қашықтан өзгерте алады. Сонымен қатар құрылғыдағы әрекеттерді Chrome браузерінен тыс басқаруға болады.</translation> <translation id="6648524591329069940">Serif қарпі</translation> <translation id="6651270836885078973">Басқарушы:</translation> @@ -2187,6 +2191,7 @@ <translation id="9114524666733003316">Карта расталуда...</translation> <translation id="9114581008513152754">Бұл браузер компания немесе басқа ұйым арқылы басқарылмайды. Құрылғыдағы әрекет Chrome браузерінен тыс басқарылуы мүмкін. <ph name="BEGIN_LINK" />Толығырақ<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Жаңа</translation> +<translation id="9118692854637641831">"<ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />". Іздеуді жалғастырып, Chrome тарихынан сәйкес сұрауларды көру үшін Tab, сосын Enter пернесін басыңыз.</translation> <translation id="9119042192571987207">Жүктеп салынды</translation> <translation id="9128016270925453879">Саясаттар жүктелді.</translation> <translation id="9128870381267983090">Желіге қосылу</translation>
diff --git a/components/strings/components_strings_km.xtb b/components/strings/components_strings_km.xtb index ee00468..6f1a4c2 100644 --- a/components/strings/components_strings_km.xtb +++ b/components/strings/components_strings_km.xtb
@@ -737,6 +737,7 @@ <translation id="3631244953324577188">ជីវមាត្រ</translation> <translation id="3633738897356909127">ប៊ូតុង "ដំឡើងកំណែ Chrome" ចុច "Enter" ដើម្បីដំឡើងកំណែ Chrome ពីការកំណត់ Chrome របស់អ្នក</translation> <translation id="3634530185120165534">ទម្រទី 5</translation> +<translation id="3637662659967048211">រក្សាទុកនៅក្នុងគណនី Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">កម្មវិធី៖</translation> <translation id="3650584904733503804">ការពិនិត្យសុពលភាពបានជោគជ័យ</translation> @@ -1415,6 +1416,7 @@ <translation id="6106989379647458772">គេហទំព័រនៅ <ph name="PAGE" /> អាចមិនដំណើរការបណ្តោះអាសន្ន ឬវាអាចត្រូវបានផ្លាស់ទីទៅអាសយដ្ឋានគេហទំព័រថ្មី។</translation> <translation id="6107012941649240045">បោះផ្សាយជូន</translation> <translation id="610911394827799129">គណនី Google របស់អ្នកអាចមានទម្រង់ប្រវត្តិរុករកផ្សេងទៀតនៅក្នុង <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> ។</translation> +<translation id="6113594885686374546">ប៊ូតុងបន្តការស្វែងរក រួចចុច Enter ដើម្បីបន្តការស្វែងរករបស់អ្នក និងមើលសកម្មភាពដែលពាក់ព័ន្ធនៅក្នុងប្រវត្តិ Chrome របស់អ្នក</translation> <translation id="6116338172782435947">មើលអត្ថបទ និងរូបភាពដែលបានចម្លងទៅអង្គចងចាំ</translation> <translation id="6120179357481664955">ចងចាំលេខសម្គាល់ UPI របស់អ្នកដែរទេ?</translation> <translation id="6123290840358279103">មើលកាតនិម្មិត</translation> @@ -1490,6 +1492,7 @@ <translation id="6423385022588644828">បញ្ជាក់បណ្ណរបស់អ្នករហ័សជាងមុនដោយប្រើ Touch ID ចាប់ពីពេលនេះតទៅ</translation> <translation id="6425092077175753609">សម្ភារៈ</translation> <translation id="6427730057873428458">បត់ជាផ្ទាំងៗមានសណ្ឋានជាទ្វារ</translation> +<translation id="6428146287756735566">បន្តការស្វែងរកដើម្បីមើលសកម្មភាពដែលពាក់ព័ន្ធនៅក្នុងប្រវត្តិ Chrome របស់អ្នក</translation> <translation id="6428450836711225518">ផ្ទៀងផ្ទាត់លេខទូរសព្ទរបស់អ្នក</translation> <translation id="6433490469411711332">កែសម្រួលព័ត៌មានទំនាក់ទំនង</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> បានបដិសេធក្នុងការតភ្ជាប់</translation> @@ -1541,6 +1544,7 @@ <translation id="6643016212128521049">ជម្រះ</translation> <translation id="6645291930348198241">ចូលប្រើទិន្នន័យគេហទំព័រ និងខូគី។</translation> <translation id="6646269444027925224">{COUNT,plural, =0{គ្មាន}=1{ពីទំព័រ 1 (អ្នកនឹងមិនចាកចេញពីគណនី Google របស់អ្នកទេ)}other{ពីទំព័រ # (អ្នកនឹងមិនចាកចេញពីគណនី Google របស់អ្នកទេ)}}</translation> +<translation id="6647197322759179819">បន្តការស្វែងរក</translation> <translation id="6648459603387803038">អ្នកគ្រប់គ្រងរបស់អ្នកអាចប្ដូរការរៀបចំកម្មវិធីរុករកតាមអ៊ីនធឺណិតរបស់អ្នកពីចម្ងាយបាន។ សកម្មភាពនៅលើឧបករណ៍នេះក៏អាចត្រូវបានគ្រប់គ្រងនៅក្រៅ Chrome ផងដែរ។</translation> <translation id="6648524591329069940">ពុម្ពអក្សរ Serif</translation> <translation id="6651270836885078973">ស្ថិតក្រោមការគ្រប់គ្រងរបស់៖</translation> @@ -2193,6 +2197,7 @@ <translation id="9114524666733003316">កំពុងបញ្ជាក់បណ្ណឥណទាន...</translation> <translation id="9114581008513152754">កម្មវិធីរុករកតាមអ៊ីនធឺណិតនេះមិនស្ថិតក្រោមការគ្រប់គ្រងរបស់ក្រុមហ៊ុន ឬស្ថាប័នផ្សេងទេ។ សកម្មភាពនៅលើឧបករណ៍នេះអាចនឹងត្រូវបានគ្រប់គ្រងក្រៅពី Chrome។ <ph name="BEGIN_LINK" />ស្វែងយល់បន្ថែម<ph name="END_LINK" /></translation> <translation id="9117930699067497412">ស្រស់ស្រាយ</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, ចុច Tab រួចចុច Enter ដើម្បីបន្តការស្វែងរករបស់អ្នក និងមើលសកម្មភាពដែលពាក់ព័ន្ធនៅក្នុងប្រវត្តិ Chrome របស់អ្នក</translation> <translation id="9119042192571987207">បានបង្ហោះ</translation> <translation id="9128016270925453879">គោលការណ៍ត្រូវបានផ្ទុក</translation> <translation id="9128870381267983090">ភ្ជាប់ទៅបណ្តាញ</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb index cb722d8..c3f2fc4 100644 --- a/components/strings/components_strings_kn.xtb +++ b/components/strings/components_strings_kn.xtb
@@ -727,6 +727,7 @@ <translation id="3631244953324577188">ಬಯೋಮೆಟ್ರಿಕ್ಸ್</translation> <translation id="3633738897356909127">Chrome ಬಟನ್ ಅಪ್ಡೇಟ್ ಮಾಡಿ, ನಿಮ್ಮ Chrome ಸೆಟ್ಟಿಂಗ್ಗಳಿಂದ Chrome ಅನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಲು Enter ಒತ್ತಿರಿ</translation> <translation id="3634530185120165534">ಟ್ರೇ 5</translation> +<translation id="3637662659967048211">Google ಖಾತೆಗೆ ಉಳಿಸಿ</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">ಅಪ್ಲಿಕೇಶನ್:</translation> <translation id="3650584904733503804">ಊರ್ಜಿತಗೊಳಿಸುವಿಕೆಯು ಯಶಸ್ವಿಯಾಗಿದೆ</translation> @@ -1399,6 +1400,7 @@ <translation id="6106989379647458772"><ph name="PAGE" /> ನಲ್ಲಿರುವ ವೆಬ್ಪುಟ ತಾತ್ಕಾಲಿಕವಾಗಿ ಕೆಲಸ ಮಾಡುತ್ತಿಲ್ಲ ಅಥವಾ ಅದನ್ನು ಶಾಶ್ವತವಾಗಿ ಹೊಸ ವೆಬ್ ವಿಳಾಸಕ್ಕೆ ಸರಿಸಲಾಗಿದೆ.</translation> <translation id="6107012941649240045">ಇವರಿಗೆ ನೀಡಲಾಗಿದೆ</translation> <translation id="610911394827799129">ನಿಮ್ಮ Google ಖಾತೆಯು <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> ನಲ್ಲಿ ಇತರ ವಿಧಗಳ ಬ್ರೌಸಿಂಗ್ ಇತಿಹಾಸವನ್ನು ಹೊಂದಿರಬಹುದು</translation> +<translation id="6113594885686374546">ನಿಮ್ಮ ಪ್ರಯಾಣವನ್ನು ಪುನರಾರಂಭಿಸಲು ಮತ್ತು ನಿಮ್ಮ Chrome ಇತಿಹಾಸದಲ್ಲಿ ಸಂಬಂಧಿತ ಚಟುವಟಿಕೆಯನ್ನು ನೋಡಲು, ಪ್ರಯಾಣದ ಬಟನ್ ಪುನರಾರಂಭಿಸಿ, Enter ಒತ್ತಿ</translation> <translation id="6116338172782435947">ಕ್ಲಿಪ್ಬೋರ್ಡ್ಗೆ ನಕಲಿಸಿರುವ ಪಠ್ಯ ಮತ್ತು ಚಿತ್ರಗಳನ್ನು ನೋಡಿ</translation> <translation id="6120179357481664955">ನಿಮ್ಮ UPI ಐಡಿ ನೆನಪಿದೆಯೇ?</translation> <translation id="6123290840358279103">ವರ್ಚುವಲ್ ಕಾರ್ಡ್ ವೀಕ್ಷಿಸಿ</translation> @@ -1473,6 +1475,7 @@ <translation id="6423385022588644828">ಇನ್ನು ಮುಂದೆ, ಟಚ್ ID ಬಳಸುವ ಮೂಲಕ ನಿಮ್ಮ ಕಾರ್ಡ್ಗಳನ್ನು ವೇಗವಾಗಿ ದೃಢೀಕರಿಸಿ</translation> <translation id="6425092077175753609">ವಸ್ತು</translation> <translation id="6427730057873428458">ಗೇಟ್ ಮಾದರಿಯಲ್ಲಿ ಮಡಿಸಿ</translation> +<translation id="6428146287756735566">ನಿಮ್ಮ Chrome ಇತಿಹಾಸದಲ್ಲಿ ಸಂಬಂಧಿತ ಚಟುವಟಿಕೆಯನ್ನು ನೋಡಲು ಪ್ರಯಾಣವನ್ನು ಪುನರಾರಂಭಿಸಿ</translation> <translation id="6428450836711225518">ನಿಮ್ಮ ದೂರವಾಣಿ ಸಂಖ್ಯೆಯನ್ನು ದೃಢೀಕರಿಸಿ</translation> <translation id="6433490469411711332">ಸಂಪರ್ಕ ಮಾಹಿತಿ ಎಡಿಟ್ ಮಾಡಿ</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> ಸಂಪರ್ಕಗೊಳ್ಳಲು ನಿರಾಕರಿಸಿದೆ.</translation> @@ -1524,6 +1527,7 @@ <translation id="6643016212128521049">ತೆರವುಗೊಳಿಸಿ</translation> <translation id="6645291930348198241">ಕುಕೀಗಳು ಮತ್ತು ಸೈಟ್ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಿ.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{ಯಾವುದೂ ಇಲ್ಲ}=1{1 ಸೈಟ್ನಿಂದ (ನಿಮ್ಮ Google ಖಾತೆಯಿಂದ ನಿಮ್ಮನ್ನು ಸೈನ್ ಔಟ್ ಮಾಡುವುದಿಲ್ಲ)}one{# ಸೈಟ್ಗಳಿಂದ (ನಿಮ್ಮ Google ಖಾತೆಯಿಂದ ನಿಮ್ಮನ್ನು ಸೈನ್ ಔಟ್ ಮಾಡುವುದಿಲ್ಲ)}other{# ಸೈಟ್ಗಳಿಂದ (ನಿಮ್ಮ Google ಖಾತೆಯಿಂದ ನಿಮ್ಮನ್ನು ಸೈನ್ ಔಟ್ ಮಾಡುವುದಿಲ್ಲ)}}</translation> +<translation id="6647197322759179819">ಪ್ರಯಾಣವನ್ನು ಪುನರಾರಂಭಿಸಿ</translation> <translation id="6648459603387803038">ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನಿಮ್ಮ ಬ್ರೌಸರ್ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ದೂರದಿಂದಲೇ ಬದಲಾಯಿಸಬಹುದು. ಈ ಸಾಧನದಲ್ಲಿನ ಚಟುವಟಿಕೆಯನ್ನು Chrome ನ ಹೊರಗೆ ಸಹ ನಿರ್ವಹಿಸಬಹುದು.</translation> <translation id="6648524591329069940">Serif ಫಾಂಟ್</translation> <translation id="6651270836885078973">ಈ ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗುತ್ತಿದೆ:</translation> @@ -2175,6 +2179,7 @@ <translation id="9114524666733003316">ಕಾರ್ಡ್ ದೃಢೀಕರಿಸಲಾಗುತ್ತಿದೆ...</translation> <translation id="9114581008513152754">ಈ ಬ್ರೌಸರ್ ಅನ್ನು ಕಂಪನಿ ಅಥವಾ ಇತರ ಸಂಸ್ಥೆಯು ನಿರ್ವಹಿಸುತ್ತಿಲ್ಲ. ಈ ಸಾಧನದಲ್ಲಿನ ಚಟುವಟಿಕೆಯನ್ನು Chrome ನಿಂದ ಹೊರಗೆ ನಿರ್ವಹಿಸಬಹುದು. <ph name="BEGIN_LINK" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LINK" /></translation> <translation id="9117930699067497412">ಹೊಸದು</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, ನಿಮ್ಮ ಪ್ರಯಾಣವನ್ನು ಪುನರಾರಂಭಿಸಲು ಮತ್ತು ನಿಮ್ಮ Chrome ಇತಿಹಾಸದಲ್ಲಿ ಸಂಬಂಧಿತ ಚಟುವಟಿಕೆಯನ್ನು ನೋಡಲು, Tab ಒತ್ತಿ, ನಂತರ Enter ಒತ್ತಿ</translation> <translation id="9119042192571987207">ಅಪ್ಲೋಡ್ ಮಾಡಲಾಗಿದೆ</translation> <translation id="9128016270925453879">ನೀತಿಗಳನ್ನು ಲೋಡ್ ಮಾಡಲಾಗಿದೆ</translation> <translation id="9128870381267983090">ನೆಟ್ವರ್ಕ್ಗೆ ಸಂಪರ್ಕಿಸು</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb index e61a986..c529c17 100644 --- a/components/strings/components_strings_ko.xtb +++ b/components/strings/components_strings_ko.xtb
@@ -728,6 +728,7 @@ <translation id="3631244953324577188">생체 인식</translation> <translation id="3633738897356909127">Chrome 업데이트 버튼, Chrome 설정에서 Chrome을 업데이트하려면 Enter 누르기</translation> <translation id="3634530185120165534">트레이 5</translation> +<translation id="3637662659967048211">Google 계정에 저장</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">애플리케이션:</translation> <translation id="3650584904733503804">유효성 검사 성공</translation> @@ -1400,6 +1401,7 @@ <translation id="6106989379647458772"><ph name="PAGE" />의 웹페이지가 일시적으로 다운되었거나 새 웹 주소로 완전히 이동했을 수 있습니다.</translation> <translation id="6107012941649240045">발급 대상</translation> <translation id="610911394827799129">Google 계정의 내 활동(<ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />)에는 인터넷 방문 기록이 다른 형식으로 남아 있을 수도 있습니다</translation> +<translation id="6113594885686374546">검색 계속하기 버튼, 검색을 계속하고 Chrome 방문 기록에서 관련 활동을 보려면 Enter를 누르세요.</translation> <translation id="6116338172782435947">클립보드에 복사된 텍스트 및 이미지를 확인합니다.</translation> <translation id="6120179357481664955">UPI ID를 저장하시겠습니까?</translation> <translation id="6123290840358279103">가상 카드 보기</translation> @@ -1475,6 +1477,7 @@ <translation id="6423385022588644828">지금부터 Touch ID를 사용하여 빠르게 카드를 확인합니다.</translation> <translation id="6425092077175753609">머티리얼</translation> <translation id="6427730057873428458">게이트 폴드</translation> +<translation id="6428146287756735566">Chrome 방문 기록에서 관련 활동을 보려면 검색을 계속하세요.</translation> <translation id="6428450836711225518">전화번호 인증</translation> <translation id="6433490469411711332">연락처 정보 수정</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" />에서 연결을 거부했습니다.</translation> @@ -1526,6 +1529,7 @@ <translation id="6643016212128521049">삭제</translation> <translation id="6645291930348198241">쿠키 및 사이트 데이터에 액세스합니다.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{없음}=1{사이트 1개(Google 계정에서 로그아웃되지 않음)}other{사이트 #개(Google 계정에서 로그아웃되지 않음)}}</translation> +<translation id="6647197322759179819">검색 계속하기</translation> <translation id="6648459603387803038">관리자가 원격으로 브라우저 설정을 변경할 수 있습니다. 이 기기의 활동은 Chrome 외부에서도 관리할 수 있습니다.</translation> <translation id="6648524591329069940">Serif 체</translation> <translation id="6651270836885078973">관리자:</translation> @@ -2176,6 +2180,7 @@ <translation id="9114524666733003316">카드 확인 중...</translation> <translation id="9114581008513152754">이 브라우저는 회사 또는 다른 조직에서 관리하지 않습니다. 이 기기의 활동은 Chrome 외부에서도 관리할 수 있습니다. <ph name="BEGIN_LINK" />자세히 알아보기<ph name="END_LINK" /></translation> <translation id="9117930699067497412">생기</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, 검색을 계속하고 Chrome 방문 기록에서 관련 활동을 보려면 Tab과 Enter를 차례로 누르세요</translation> <translation id="9119042192571987207">업로드됨</translation> <translation id="9128016270925453879">정책 로드됨</translation> <translation id="9128870381267983090">네트워크에 연결</translation>
diff --git a/components/strings/components_strings_ky.xtb b/components/strings/components_strings_ky.xtb index a559e8f5..48a6f51 100644 --- a/components/strings/components_strings_ky.xtb +++ b/components/strings/components_strings_ky.xtb
@@ -733,6 +733,7 @@ <translation id="3631244953324577188">Биометрика</translation> <translation id="3633738897356909127">Chrome'ду жаңыртуу баскычы. Chrome жөндөөлөрүңүздөн Chrome'ду жаңыртуу үчүн, Enter баскычын басыңыз</translation> <translation id="3634530185120165534">5-түпкүч</translation> +<translation id="3637662659967048211">Google аккаунтка сактоо</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Колдонмо:</translation> <translation id="3650584904733503804">Жарактуулугу ийгиликтүү текшерилди</translation> @@ -1410,6 +1411,7 @@ <translation id="6106989379647458772"><ph name="PAGE" /> дарегиндеги веб-баракча убактылуу иштебейт же жаңы веб дарекке биротоло көчүрүлгөн окшойт.</translation> <translation id="6107012941649240045">Кимге берилген</translation> <translation id="610911394827799129">Google аккаунтуңуздун серептөө таржымалынын башка түрлөрү <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> дарегинде болушу мүмкүн.</translation> +<translation id="6113594885686374546">Саякатты улантуу баскычы, саякатыңызды улантып, Chrome´до көрүлгөн вебсайттарыңыздын арасынан ылайыктууларын көрүү үчүн, Enter баскычын басыңыз</translation> <translation id="6116338172782435947">Алмашуу буферине көчүрүлгөн текстти жана сүрөттөрдү көрүү</translation> <translation id="6120179357481664955">UPI идентификаторуңуз сакталсынбы?</translation> <translation id="6123290840358279103">Виртуалдык картаны көрүү</translation> @@ -1485,6 +1487,7 @@ <translation id="6423385022588644828">Мындан ары Touch ID функциясын колдонуп карталарды тезирээк ырастаңыз</translation> <translation id="6425092077175753609">Материал</translation> <translation id="6427730057873428458">Эки жолу чаптоо</translation> +<translation id="6428146287756735566">Chrome´до көрүлгөн вебсайттарыңыздын арасынан ылайыктууларын көрүү үчүн саякатты улантыңыз</translation> <translation id="6428450836711225518">Телефон номериңизди ырастаңыз</translation> <translation id="6433490469411711332">Байланыш маалыматын түзөтүү</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> сайты туташуудан баш тартты.</translation> @@ -1536,6 +1539,7 @@ <translation id="6643016212128521049">Тазалоо</translation> <translation id="6645291930348198241">Cookie файлдарына жана сайттын маалыматына кирүү мүмкүнчүлүгүн алуу.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Бирөө да жок}=1{1 сайттан (Google аккаунтуңуздан чыгарылбайсыз)}other{# сайттан (Google аккаунтуңуздан чыгарылбайсыз)}}</translation> +<translation id="6647197322759179819">Саякатты улантуу</translation> <translation id="6648459603387803038">Администраторуңуз серепчини алыстан жөндөй алат. Бул түзмөктө аткарылган аракеттер Chrome'дон тышкары да башкарылышы мүмкүн.</translation> <translation id="6648524591329069940">Serif ариби</translation> <translation id="6651270836885078973">Төмөнкү тарабынан башкарылат:</translation> @@ -2187,6 +2191,7 @@ <translation id="9114524666733003316">Карта текшерилүүдө…</translation> <translation id="9114581008513152754">Бул серепчи компанияңыз же башка уюм тарабынан башкарылбайт. Бул түзмөктө аткарылган аракеттер Chrome'дон тышкары башкарылышы мүмкүн. <ph name="BEGIN_LINK" />Кеңири маалымат<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Жаңы</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, саякатыңызды улантып, Chrome´до көрүлгөн вебсайттарыңыздын арасынан ылайыктууларын көрүү үчүн, Tab, андан соң Enter баскычын басыңыз</translation> <translation id="9119042192571987207">Жүктөлүп берилди</translation> <translation id="9128016270925453879">Саясаттар жүктөлдү</translation> <translation id="9128870381267983090">Тармакка туташуу</translation>
diff --git a/components/strings/components_strings_lo.xtb b/components/strings/components_strings_lo.xtb index 244f947..bdc667b 100644 --- a/components/strings/components_strings_lo.xtb +++ b/components/strings/components_strings_lo.xtb
@@ -734,6 +734,7 @@ <translation id="3631244953324577188">ຂໍ້ມູນຊີວະມິຕິ</translation> <translation id="3633738897356909127">ປຸ່ມອັບເດດ Chrome, ກົດ Enter ເພື່ອອັບເດດ Chrome ຈາກການຕັ້ງຄ່າ Chrome ຂອງທ່ານ</translation> <translation id="3634530185120165534">ຖາດ 5</translation> +<translation id="3637662659967048211">ບັນທຶກໄປໃສ່ບັນຊີ Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">ແອັບພລິເຄຊັນ:</translation> <translation id="3650584904733503804">ການຮັບຮອງສໍາເລັດ</translation> @@ -1411,6 +1412,7 @@ <translation id="6106989379647458772">ໜ້າເວັບຢູ່ທີ່ <ph name="PAGE" /> ອາດຈະໃຊ້ງານບໍ່ໄດ້ຊົ່ວຄາວ ຫຼື ມັນອາດຈະຍ້າຍໄປຫາທີ່ຢູ່ເວັບໃໝ່ຖາວອນແລ້ວ.</translation> <translation id="6107012941649240045">ອອກໃຫ້ກັບ</translation> <translation id="610911394827799129">ບັນຊີ Google ຂອງທ່ານອາດຈະມີປະຫວັດການທ່ອງເວັບຮູບແບບອື່ນຢູ່ <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> +<translation id="6113594885686374546">ປຸ່ມສືບຕໍ່ສຳຫຼວດ, ກົດ Enter ເພື່ອສືບຕໍ່ການສຳຫຼວດຂອງທ່ານ ແລະ ເບິ່ງການເຄື່ອນໄຫວທີ່ກ່ຽວຂ້ອງໃນປະຫວັດ Chrome ຂອງທ່ານ</translation> <translation id="6116338172782435947">ເຫັນຂໍ້ຄວາມ ແລະ ຮູບພາບທີ່ສຳເນົາໄວ້ໃນຄລິບບອດ</translation> <translation id="6120179357481664955">ຈື່ UPI ID ຂອງທ່ານໄວ້ບໍ?</translation> <translation id="6123290840358279103">ເບິ່ງບັດສະເໝືອນ</translation> @@ -1486,6 +1488,7 @@ <translation id="6423385022588644828">ຢືນຢັນບັດຂອງທ່ານໄດ້ໄວຂຶ້ນໂດຍໃຊ້ Touch ID ຈາກນີ້ໄປ</translation> <translation id="6425092077175753609">ເນື້ອໃນ</translation> <translation id="6427730057873428458">ພັບທົບ</translation> +<translation id="6428146287756735566">ສືບຕໍ່ສຳຫຼວດເພື່ອເບິ່ງການເຄື່ອນໄຫວທີ່ກ່ຽວຂ້ອງໃນປະຫວັດ Chrome ຂອງທ່ານ</translation> <translation id="6428450836711225518">ຢັ້ງຢືນເບີໂທລະສັບຂອງທ່ານ</translation> <translation id="6433490469411711332">ແກ້ໄຂຂໍ້ມູນລາຍຊື່ຜູ້ຕິດຕໍ່</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> ໄດ້ປະຕິເສດການເຊື່ອມຕໍ່.</translation> @@ -1537,6 +1540,7 @@ <translation id="6643016212128521049">ລຶບ</translation> <translation id="6645291930348198241">ເຂົ້າເຖິງຄຸກກີ້ ແລະ ຂໍ້ມູນເວັບໄຊ.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{ບໍ່ມີ}=1{ຈາກ 1 ເວັບໄຊ (ທ່ານຈະບໍ່ຖືກນຳອອກຈາກລະບົບບັນຊີ Google ຂອງທ່ານ)}other{ຈາກ # ເວັບໄຊ (ທ່ານຈະບໍ່ຖືກນຳອອກຈາກລະບົບບັນຊີ Google ຂອງທ່ານ)}}</translation> +<translation id="6647197322759179819">ສືບຕໍ່ສຳຫຼວດ</translation> <translation id="6648459603387803038">ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານສາມາດປ່ຽນການຕັ້ງຄ່າໂປຣແກຣມທ່ອງເວັບຂອງທ່ານຈາກທາງໄກໄດ້. ການເຄື່ອນໄຫວໃນອຸປະກອນນີ້ອາດຈະຖືກຈັດການຢູ່ນອກ Chrome ໄດ້ເຊັ່ນກັນ.</translation> <translation id="6648524591329069940">ຟອນ Serif</translation> <translation id="6651270836885078973">ຈັດການໂດຍ:</translation> @@ -2188,6 +2192,7 @@ <translation id="9114524666733003316">ກຳລັງຢືນຢັນບັດ...</translation> <translation id="9114581008513152754">ໂປຣແກຣມທ່ອງເວັບນີ້ບໍ່ໄດ້ຖືກຈັດການໂດຍບໍລິສັດ ຫຼື ອົງການຈັດຕັ້ງອື່ນ. ການເຄື່ອນໄຫວໃນອຸປະກອນນີ້ອາດຈະຖືກຈັດການຢູ່ນອກ Chrome ໄດ້. <ph name="BEGIN_LINK" />ສຶກສາເພີ່ມເຕີມ<ph name="END_LINK" /></translation> <translation id="9117930699067497412">ສົດໃໝ່</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, ກົດ Tab, ຈາກນັ້ນກົດ Enter ເພື່ອສືບຕໍ່ການສຳຫຼວດຂອງທ່ານ ແລະ ເບິ່ງການເຄື່ອນໄຫວທີ່ກ່ຽວຂ້ອງໃນປະຫວັດ Chrome ຂອງທ່ານ</translation> <translation id="9119042192571987207">ອັບໂຫລດແລ້ວ</translation> <translation id="9128016270925453879">ໂຫຼດນະໂຍບາຍແລ້ວ</translation> <translation id="9128870381267983090">ເຊື່ອມຕໍ່ກັບເຄືອຂ່າຍ</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb index 74bd2e243..797e37e 100644 --- a/components/strings/components_strings_lt.xtb +++ b/components/strings/components_strings_lt.xtb
@@ -735,6 +735,7 @@ <translation id="3631244953324577188">Biometrinės sistemos</translation> <translation id="3633738897356909127">Mygtukas „Atnaujinti „Chrome“, paspauskite „Enter“, kad „Chrome“ nustatymuose būtų atnaujinta naršyklė „Chrome“</translation> <translation id="3634530185120165534">5 dėklas</translation> +<translation id="3637662659967048211">Išsaugojimas „Google“ paskyroje</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Programa:</translation> <translation id="3650584904733503804">Tikrinimas sėkmingas</translation> @@ -1412,6 +1413,7 @@ <translation id="6106989379647458772">Gali būti, kad tinklalapis adresu <ph name="PAGE" /> laikinai neveikia arba yra visam laikui perkeltas nauju žiniatinklio adresu.</translation> <translation id="6107012941649240045">Išduotas</translation> <translation id="610911394827799129">„Google“ paskyroje gali būti kito tipo naršymo istorijos, kuri pasiekiama adresu <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> +<translation id="6113594885686374546">Mygtukas „Tęsti veiksmus“, paspauskite „Enter“, kad tęstumėte veiksmus ir galėtumėte matyti atitinkamą veiklą „Chrome“ istorijoje</translation> <translation id="6116338172782435947">Peržiūrėti tekstą ir vaizdus, nukopijuotus į iškarpinę</translation> <translation id="6120179357481664955">Prisiminti UPI ID?</translation> <translation id="6123290840358279103">Žr. virtualią kortelę</translation> @@ -1487,6 +1489,7 @@ <translation id="6423385022588644828">Nuo šiol patvirtinkite korteles greičiau su „Touch ID“</translation> <translation id="6425092077175753609">Trimačiai objektai</translation> <translation id="6427730057873428458">Du atvartai</translation> +<translation id="6428146287756735566">Tęskite veiksmus, kad galėtumėte matyti atitinkamą veiklą „Chrome“ istorijoje</translation> <translation id="6428450836711225518">Patvirtinkite savo telefono numerį</translation> <translation id="6433490469411711332">Kontaktinės informacijos redagavimas</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> atsisakė prisijungti.</translation> @@ -1538,6 +1541,7 @@ <translation id="6643016212128521049">Išvalyti</translation> <translation id="6645291930348198241">Pasiekti slapukus ir svetainės duomenis.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Nėra}=1{Iš 1 svetainės (nebūsite atjungti nuo „Google“ paskyros)}one{Iš # svetainės (nebūsite atjungti nuo „Google“ paskyros)}few{Iš # svetainių (nebūsite atjungti nuo „Google“ paskyros)}many{Iš # svetainės (nebūsite atjungti nuo „Google“ paskyros)}other{Iš # svetainių (nebūsite atjungti nuo „Google“ paskyros)}}</translation> +<translation id="6647197322759179819">Tęsti veiksmus</translation> <translation id="6648459603387803038">Administratorius gali nuotoliniu būdu keisti naršyklės sąranką. Veiklą šiame įrenginyje taip pat galima tvarkyti ne naršyklėje „Chrome“.</translation> <translation id="6648524591329069940">Šriftas „Serif“</translation> <translation id="6651270836885078973">Valdo:</translation> @@ -2190,6 +2194,7 @@ <translation id="9114524666733003316">Kortelė patvirtinama...</translation> <translation id="9114581008513152754">Šios naršyklės netvarko įmonė ar kita organizacija. Veiklą šiame įrenginyje galima tvarkyti ne naršyklėje „Chrome“. <ph name="BEGIN_LINK" />Sužinokite daugiau<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Šviežia</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, paspauskite tabuliavimo klavišą, tada – „Enter“, kad tęstumėte veiksmus ir galėtumėte matyti atitinkamą veiklą „Chrome“ istorijoje</translation> <translation id="9119042192571987207">Įkelta</translation> <translation id="9128016270925453879">Politika įkelta</translation> <translation id="9128870381267983090">Prisijungti prie tinklo</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb index 9813bd7..bf1c474 100644 --- a/components/strings/components_strings_lv.xtb +++ b/components/strings/components_strings_lv.xtb
@@ -731,6 +731,7 @@ <translation id="3631244953324577188">Biometrija</translation> <translation id="3633738897356909127">Poga “Atjaunināt Chrome”. Lai Chrome iestatījumos atjauninātu pārlūkprogrammu Chrome, nospiediet ievadīšanas taustiņu.</translation> <translation id="3634530185120165534">5. paplāte</translation> +<translation id="3637662659967048211">Saglabāšana Google kontā</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Lietojumprogramma:</translation> <translation id="3650584904733503804">Validācija bija veiksmīga.</translation> @@ -1408,6 +1409,7 @@ <translation id="6106989379647458772">Tīmekļa lapa <ph name="PAGE" /> var būt īslaicīgi nepieejama, vai tā var būt pārvietota uz jaunu tīmekļa adresi.</translation> <translation id="6107012941649240045">Izsniegts</translation> <translation id="610911394827799129">Jūsu Google kontam var būt citu veidu pārlūkošanas vēstures dati vietnē <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> +<translation id="6113594885686374546">Poga “Atsākt meklēšanu”: nospiediet ievadīšanas taustiņu, lai atsāktu meklēšanu un skatītu atbilstošās darbības savā Chrome vēsturē.</translation> <translation id="6116338172782435947">Skatīt starpliktuvē kopēto tekstu un attēlus</translation> <translation id="6120179357481664955">Vai iegaumēt jūsu UPI ID?</translation> <translation id="6123290840358279103">Skatīt virtuālo karti</translation> @@ -1483,6 +1485,7 @@ <translation id="6423385022588644828">Turpmāk, izmantojot Touch ID, apstipriniet kartes ātrāk</translation> <translation id="6425092077175753609">Materiāls</translation> <translation id="6427730057873428458">Abpusējs locījums</translation> +<translation id="6428146287756735566">Atsāciet meklēšanu, lai skatītu atbilstošās darbības savā Chrome vēsturē.</translation> <translation id="6428450836711225518">Verificējiet savu tālruņa numuru</translation> <translation id="6433490469411711332">Kontaktinformācijas rediģēšana</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> noraidīja savienojuma izveidi.</translation> @@ -1534,6 +1537,7 @@ <translation id="6643016212128521049">Notīrīt</translation> <translation id="6645291930348198241">Piekļūt sīkfailiem un vietnes datiem</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Nav}=1{No 1 vietnes (jūs netiksiet izrakstīts no sava Google konta)}zero{No # vietnēm (jūs netiksiet izrakstīts no sava Google konta)}one{No # vietnes (jūs netiksiet izrakstīts no sava Google konta)}other{No # vietnēm (jūs netiksiet izrakstīts no sava Google konta)}}</translation> +<translation id="6647197322759179819">Atsākt meklēšanu</translation> <translation id="6648459603387803038">Jūsu administrators var attālināti mainīt jūsu pārlūka iestatījumus. Darbību šajā ierīcē var pārvaldīt arī ārpus Chrome.</translation> <translation id="6648524591329069940">Serif fonts</translation> <translation id="6651270836885078973">Pārvalda:</translation> @@ -2186,6 +2190,7 @@ <translation id="9114524666733003316">Notiek kartes apstiprināšana...</translation> <translation id="9114581008513152754">Šo pārlūku nepārvalda uzņēmums vai cita organizācija. Darbību šajā ierīcē var pārvaldīt ārpus pārlūka Chrome. <ph name="BEGIN_LINK" />Uzzināt vairāk<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Dzīvīga</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />: nospiediet tabulēšanas taustiņu un pēc tam — ievadīšanas taustiņu, lai atsāktu meklēšanu un skatītu atbilstošās darbības savā Chrome vēsturē.</translation> <translation id="9119042192571987207">Augšupielādēts</translation> <translation id="9128016270925453879">Politikas ir ielādētas</translation> <translation id="9128870381267983090">Izveidot savienojumu ar tīklu</translation>
diff --git a/components/strings/components_strings_mk.xtb b/components/strings/components_strings_mk.xtb index 3db769f3..98739764 100644 --- a/components/strings/components_strings_mk.xtb +++ b/components/strings/components_strings_mk.xtb
@@ -734,6 +734,7 @@ <translation id="3631244953324577188">Биометрика</translation> <translation id="3633738897356909127">Копче „Ажурирај го Chrome“, притиснете Enter за да го ажурирате Chrome од поставките за Chrome</translation> <translation id="3634530185120165534">Фиока 5</translation> +<translation id="3637662659967048211">Зачувајте во сметката на Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Апликација:</translation> <translation id="3650584904733503804">Потврдувањето е успешно</translation> @@ -1411,6 +1412,7 @@ <translation id="6106989379647458772">Веб-страницата на <ph name="PAGE" /> можеби привремено не работи или можеби трајно е преместена на нова веб-адреса.</translation> <translation id="6107012941649240045">Издадено на</translation> <translation id="610911394827799129">Вашата сметка на Google можеби има други видови историја на прелистување на <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> +<translation id="6113594885686374546">Копче за продолжување со патувањето, притиснете Enter за да продолжите со патувањето и да ја прегледате релевантната активност во вашата „Историја на Chrome“</translation> <translation id="6116338172782435947">гледа текст и слики копирани на привремената меморија</translation> <translation id="6120179357481664955">Да се запомни ID за UPI?</translation> <translation id="6123290840358279103">Прикажи ја виртуелната картичка</translation> @@ -1486,6 +1488,7 @@ <translation id="6423385022588644828">Отсега, потврдувајте ги картичките побрзо со Touch ID</translation> <translation id="6425092077175753609">Материјален</translation> <translation id="6427730057873428458">Превиткување како брошура</translation> +<translation id="6428146287756735566">Продолжете со патување за да ја прегледате релевантната активност во вашата „Историја на Chrome“</translation> <translation id="6428450836711225518">Потврдете го телефонскиот број</translation> <translation id="6433490469411711332">Уредете ги информациите за контакт</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> одби да се поврзе.</translation> @@ -1537,6 +1540,7 @@ <translation id="6643016212128521049">Исчисти</translation> <translation id="6645291930348198241">да пристапува до колачиња и податоци за сајтот.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Ниту еден}=1{Од 1 сајт (нема да ве одјавиме од сметката на Google)}one{Од # сајт (нема да ве одјавиме од сметката на Google)}other{Од # сајтови (нема да ве одјавиме од сметката на Google)}}</translation> +<translation id="6647197322759179819">Продолжете со патување</translation> <translation id="6648459603387803038">Администраторот може далечински да го менува поставувањето на прелистувачот. Со активноста на уредов може да се управува и надвор од Chrome.</translation> <translation id="6648524591329069940">Фонт Serif</translation> <translation id="6651270836885078973">Управувано од:</translation> @@ -2188,6 +2192,7 @@ <translation id="9114524666733003316">Се потврдува картичката…</translation> <translation id="9114581008513152754">Прелистувачов не е управуван од компанија или друга организација. Активноста на уредов можеби се управува надвор од Chrome. <ph name="BEGIN_LINK" />Дознајте повеќе<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Свеж</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, притиснете Tab, а потоа Enter за да продолжите со патувањето и да ја прегледате релевантната активност во вашата „Историја на Chrome“</translation> <translation id="9119042192571987207">Прикачен</translation> <translation id="9128016270925453879">Правилата се вчитани</translation> <translation id="9128870381267983090">Поврзете се на мрежа</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb index 6c86d6a..0da98d68 100644 --- a/components/strings/components_strings_mr.xtb +++ b/components/strings/components_strings_mr.xtb
@@ -733,6 +733,7 @@ <translation id="3631244953324577188">बायोमेट्रिक</translation> <translation id="3633738897356909127">Chrome अपडेट करा बटण, तुमच्या Chrome सेटिंग्जमधून Chrome अपडेट करण्यासाठी एंटर दाबा</translation> <translation id="3634530185120165534">ट्रे ५</translation> +<translation id="3637662659967048211">Google खाते मध्ये सेव्ह करा</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">ॲप्लिकेशन:</translation> <translation id="3650584904733503804">प्रमाणीकरण यशस्वी</translation> @@ -1410,6 +1411,7 @@ <translation id="6106989379647458772"><ph name="PAGE" /> वरील वेबपेज कदाचित तात्पुरते बंद आहे किंवा ते कदाचित कायमचे नवीन वेब पत्त्यावर हलवले आहे.</translation> <translation id="6107012941649240045">यांना जारी केलेले</translation> <translation id="610911394827799129">तुमच्या Google खात्यामध्ये <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> वर ब्राउझिंग इतिहासाची अन्य स्वरूपे असू शकतात.</translation> +<translation id="6113594885686374546">शोध पुन्हा सुरू करा बटण, तुमच्या Chrome इतिहासामध्ये संबंधित अॅक्टिव्हिटी पाहण्यासाठी आणि शोध पुन्हा सुरू करण्यासाठी एंटर दाबा</translation> <translation id="6116338172782435947">क्लिपबोर्डवर कॉपी केलेला मजकूर आणि इमेज पहा</translation> <translation id="6120179357481664955">तुमचा UPI आयडी लक्षात ठेवायचा आहे का?</translation> <translation id="6123290840358279103">व्हर्च्युअल कार्ड पहा</translation> @@ -1486,6 +1488,7 @@ <translation id="6423385022588644828">यापुढे टच आयडी वापरून तुमच्या कार्डांची जलद खात्री करा</translation> <translation id="6425092077175753609">आशय</translation> <translation id="6427730057873428458">गेट फोल्ड</translation> +<translation id="6428146287756735566">तुमच्या Chrome इतिहासामध्ये संबंधित अॅक्टिव्हिटी पाहण्यासाठी शोध पुन्हा सुरू करा</translation> <translation id="6428450836711225518">तुमच्या फोन नंबरची पडताळणी करा</translation> <translation id="6433490469411711332">संपर्क माहिती संपादित करा</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> नी कनेक्ट करण्यास नकार दिला.</translation> @@ -1537,6 +1540,7 @@ <translation id="6643016212128521049">साफ करा</translation> <translation id="6645291930348198241">कुकी आणि साइट डेटा अॅक्सेस करा.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{काहीही नाही}=1{एका साइटवरून (तुम्हाला तुमच्या Google खात्यातून साइन आउट केले जाणार नाही)}other{# साइटवरून (तुम्हाला तुमच्या Google खात्यातून साइन आउट केले जाणार नाही)}}</translation> +<translation id="6647197322759179819">शोध पुन्हा सुरू करा</translation> <translation id="6648459603387803038">तुमचा अॅडमिनिस्ट्रेटर तुमच्या ब्राउझरचा सेटअप रिमोट पद्धतीने बदलू शकतो. या डिव्हाइसवरील अॅक्टिव्हिटी कदाचित Chrome च्या बाहेर व्यवस्थापित केलेली असू शकते.</translation> <translation id="6648524591329069940">Serif Font</translation> <translation id="6651270836885078973">यांनी व्यवस्थापित केलेले:</translation> @@ -2188,6 +2192,7 @@ <translation id="9114524666733003316">कार्डची निश्चिती करत आहे...</translation> <translation id="9114581008513152754">हा ब्राउझर कंपनी किंवा इतर संस्थेद्वारे व्यवस्थापित केला जात नाही. या डिव्हाइसवरील अॅक्टिव्हिटी Chrome च्या बाहेर व्यवस्थापित केलेली असू शकते. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation> <translation id="9117930699067497412">नवीन</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, तुमच्या Chrome इतिहासामध्ये संबंधित अॅक्टिव्हिटी पाहण्यासाठी आणि शोध पुन्हा सुरू करण्यासाठी टॅब आणि त्यानंतर एंटर दाबा</translation> <translation id="9119042192571987207">अपलोड केला</translation> <translation id="9128016270925453879">धोरणे लोड केलेली आहेत</translation> <translation id="9128870381267983090">नेटवर्कशी कनेक्ट करा</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb index 9439a9ba..cd60195f 100644 --- a/components/strings/components_strings_ms.xtb +++ b/components/strings/components_strings_ms.xtb
@@ -735,6 +735,7 @@ <translation id="3631244953324577188">Biometrik</translation> <translation id="3633738897356909127">Butang Kemas Kini Chrome, tekan Enter untuk mengemas kini Chrome daripada tetapan Chrome anda</translation> <translation id="3634530185120165534">Dulang 5</translation> +<translation id="3637662659967048211">Simpan pada Akaun Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Aplikasi:</translation> <translation id="3650584904733503804">Pengesahan berjaya</translation> @@ -1412,6 +1413,7 @@ <translation id="6106989379647458772">Halaman web di <ph name="PAGE" /> mungkin tergendala sebentar atau mungkin telah dipindahkan secara kekal ke alamat web baharu.</translation> <translation id="6107012941649240045">Dikeluarkan Kepada</translation> <translation id="610911394827799129">Akaun Google anda mungkin mempunyai bentuk sejarah penyemakan imbas yang lain di <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> +<translation id="6113594885686374546">Butang sambung semula perjalanan, tekan Enter untuk menyambung semula perjalanan dan melihat aktiviti yang berkaitan dalam sejarah Chrome anda</translation> <translation id="6116338172782435947">Lihat teks dan imej yang disalin ke papan keratan</translation> <translation id="6120179357481664955">Ingat ID UPI anda?</translation> <translation id="6123290840358279103">Lihat kad maya</translation> @@ -1487,6 +1489,7 @@ <translation id="6423385022588644828">Sahkan kad anda dengan lebih cepat dengan menggunakan Touch ID mulai sekarang</translation> <translation id="6425092077175753609">Bahan</translation> <translation id="6427730057873428458">Lipatan pintu</translation> +<translation id="6428146287756735566">Sambung semula perjalanan untuk melihat aktiviti yang berkaitan dalam sejarah Chrome anda</translation> <translation id="6428450836711225518">Sahkan nombor telefon anda</translation> <translation id="6433490469411711332">Edit maklumat hubungan</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> enggan menyambung.</translation> @@ -1538,6 +1541,7 @@ <translation id="6643016212128521049">Kosongkan</translation> <translation id="6645291930348198241">Akses kuki dan data tapak.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Tiada}=1{Daripada 1 tapak (anda tidak akan dilog keluar daripada Akaun Google anda)}other{Daripada # tapak (anda tidak akan dilog keluar daripada Akaun Google anda)}}</translation> +<translation id="6647197322759179819">Sambung semula perjalanan</translation> <translation id="6648459603387803038">Pentadbir anda boleh menukar persediaan penyemak imbas anda dari jauh. Aktiviti pada peranti ini mungkin turut diurus di luar Chrome.</translation> <translation id="6648524591329069940">Fon Serif</translation> <translation id="6651270836885078973">Diurus oleh:</translation> @@ -2190,6 +2194,7 @@ <translation id="9114524666733003316">Mengesahkan kad...</translation> <translation id="9114581008513152754">Penyemak imbas ini tidak diurus oleh syarikat atau organisasi lain. Aktiviti pada peranti ini mungkin diurus di luar Chrome. <ph name="BEGIN_LINK" />Ketahui lebih lanjut<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Baharu</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, tekan Tab kemudian Enter untuk menyambung semula perjalanan dan melihat aktiviti yang berkaitan dalam sejarah Chrome anda</translation> <translation id="9119042192571987207">Dimuat naik</translation> <translation id="9128016270925453879">Dasar dimuatkan</translation> <translation id="9128870381267983090">Sambung ke rangkaian</translation>
diff --git a/components/strings/components_strings_my.xtb b/components/strings/components_strings_my.xtb index f6af9a62..71092e41 100644 --- a/components/strings/components_strings_my.xtb +++ b/components/strings/components_strings_my.xtb
@@ -733,6 +733,7 @@ <translation id="3631244953324577188">ဇီဝမက်ထရစ် အချက်အလက်များ</translation> <translation id="3633738897356909127">Chrome အပ်ဒိတ်လုပ်ရန်ခလုတ်၊ သင့် Chrome ဆက်တင်များမှတစ်ဆင့် Chrome ကို အပ်ဒိတ်လုပ်ရန် Enter နှိပ်ပါ</translation> <translation id="3634530185120165534">ဗန်း ၅</translation> +<translation id="3637662659967048211">Google Account တွင် သိမ်းပါ</translation> <translation id="3640766068866876100">အညွှန်း-၄x၆-နောက်ဆက်တွဲ</translation> <translation id="3642638418806704195">အပလီကေးရှင်း-</translation> <translation id="3650584904733503804">အောင်မြင်စွာ အတည်ပြုပြီး</translation> @@ -1411,6 +1412,7 @@ <translation id="6106989379647458772"><ph name="PAGE" /> ပေါ်က ဝဘ်စာမျက်နှာမှာ ယာယီ ဒေါင်းနေတာ ဖြစ်နိုင်သည် သို့မဟုတ် ၎င်းသည် ဝဘ် လိပ်စာ သစ်ဆီသို့ ထာဝရ ရွှေ့ပြောင်းသွားတာ ဖြစ်နိုင်သည်။</translation> <translation id="6107012941649240045">...အား ထုတ်ပေးခဲ့သည်</translation> <translation id="610911394827799129">သင်၏ Google အကောင့်က ဖွင့်ကြည့်ထားသော မှတ်တမ်းသည် <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> တွင် အခြားပုံစံများဖြင့် ရှိနေနိုင်ပါသည်</translation> +<translation id="6113594885686374546">ခရီးစဉ်ကို ဆက်လုပ်ရန် ခလုတ်။ သင်၏ခရီးစဉ်ကို ဆက်လုပ်ရန်နှင့် သင်၏ Chrome မှတ်တမ်းရှိ သက်ဆိုင်ရာလုပ်ဆောင်ချက်ကို ကြည့်ရန် Enter နှိပ်ပါ</translation> <translation id="6116338172782435947">ကလစ်ဘုတ်သို့ မိတ္တူကူးထားသည့် စာသားနှင့် ပုံများအား ကြည့်ရန်</translation> <translation id="6120179357481664955">သင့် UPI ID ကို မှတ်မိပါသလား။</translation> <translation id="6123290840358279103">ပကတိအသွင်ကတ် ကြည့်ရန်</translation> @@ -1485,6 +1487,7 @@ <translation id="6423385022588644828">ယခုမှစ၍ Touch ID ကို အသုံးပြု၍ သင့်ကတ်များကို ပိုမိုမြန်ဆန်စွာ အတည်ပြုလိုက်ပါ</translation> <translation id="6425092077175753609">ရုပ်ဝတ္ထုပစ္စည်း</translation> <translation id="6427730057873428458">ဝင်းတံခါးပုံ ခေါက်ရန်</translation> +<translation id="6428146287756735566">သင်၏ Chrome မှတ်တမ်းရှိ သက်ဆိုင်ရာလုပ်ဆောင်ချက်ကို ကြည့်ရန် ခရီးစဉ်ကို ဆက်လုပ်ပါ</translation> <translation id="6428450836711225518">သင်၏ဖုန်းနံပါတ်ကို အတည်ပြုပါ</translation> <translation id="6433490469411711332">အဆက်အသွယ်အချက်အလက်ကို တည်းဖြတ်ပါ</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> သည်ချိတ်ဆက်ရန် ငြင်းပယ်ခဲ့သည်။</translation> @@ -1536,6 +1539,7 @@ <translation id="6643016212128521049">ရှင်းရန်</translation> <translation id="6645291930348198241">ကွတ်ကီးနှင့် ဝဘ်ဆိုက်ဒေတာများ သုံးခြင်း။</translation> <translation id="6646269444027925224">{COUNT,plural, =0{တစ်ခုမျှမရှိပါ}=1{ဝဘ်ဆိုက် ၁ ခုမှ (သင်၏ Google အကောင့်မှနေ၍ ထွက်သွားမည်မဟုတ်ပါ)}other{ဝဘ်ဆိုက် # ခုမှ (သင်၏ Google အကောင့်မှနေ၍ ထွက်သွားမည်မဟုတ်ပါ)}}</translation> +<translation id="6647197322759179819">ခရီးစဉ်ကို ဆက်လုပ်ရန်</translation> <translation id="6648459603387803038">သင့်စီမံခန့်ခွဲသူက သင်၏ဘရောင်ဇာ စနစ်ထည့်သွင်းမှုကို အဝေးမှ ပြောင်းလဲနိုင်ပါသည်။ ဤစက်ပေါ်ရှိ လုပ်ဆောင်ချက်များကိုလည်း Chrome ပြင်ပမှ စီမံခန့်ခွဲထားခြင်း ဖြစ်နိုင်သည်။</translation> <translation id="6648524591329069940">Serif ဖောင့်</translation> <translation id="6651270836885078973">စီမံခန့်ခွဲသူ-</translation> @@ -2188,6 +2192,7 @@ <translation id="9114524666733003316">ကတ် အတည်ပြုနေသည်...</translation> <translation id="9114581008513152754">ဤဘရောင်ဇာကို ကုမ္ပဏီ သို့မဟုတ် အခြားအဖွဲ့အစည်းက စီမံခန့်ခွဲမထားပါ။ ဤစက်ပေါ်ရှိ လုပ်ဆောင်ချက်ကို Chrome ပြင်ပမှ စီမံခန့်ခွဲထားခြင်း ဖြစ်နိုင်သည်။ <ph name="BEGIN_LINK" />ပိုမိုလေ့လာရန်<ph name="END_LINK" /></translation> <translation id="9117930699067497412">လန်းလန်းဆန်းဆန်း</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />။ တဘ်နှိပ်ပါ။ ထို့နောက် သင်၏ခရီးစဉ်ကို ဆက်လုပ်ရန်နှင့် သင်၏ Chrome မှတ်တမ်းရှိ သက်ဆိုင်ရာလုပ်ဆောင်ချက်ကို ကြည့်ရန် Enter နှိပ်ပါ</translation> <translation id="9119042192571987207">အပ်လုဒ်လုပ်ပြီးပြီ</translation> <translation id="9128016270925453879">မူဝါဒများကို ဖွင့်လိုက်သည်</translation> <translation id="9128870381267983090">ကွန်ယက်သို့ ချိတ်ဆက်ပါ</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb index ad1393d9..2398ac2e 100644 --- a/components/strings/components_strings_nl.xtb +++ b/components/strings/components_strings_nl.xtb
@@ -722,6 +722,7 @@ <translation id="3631244953324577188">Biometrische systemen</translation> <translation id="3633738897356909127">Knop 'Chrome updaten'. Druk op Enter om Chrome te updaten via de instellingen van Chrome.</translation> <translation id="3634530185120165534">Lade 5</translation> +<translation id="3637662659967048211">Opslaan in Google-account</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">App:</translation> <translation id="3650584904733503804">Validatie geslaagd</translation> @@ -1397,6 +1398,7 @@ <translation id="6106989379647458772">De webpagina op <ph name="PAGE" /> is mogelijk tijdelijk niet beschikbaar of is permanent verplaatst naar een nieuw webadres.</translation> <translation id="6107012941649240045">Verleend aan</translation> <translation id="610911394827799129">Er kunnen andere vormen van browsegeschiedenis zijn opgeslagen voor je Google-account op <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> +<translation id="6113594885686374546">Knop Reis hervatten. Druk op Enter om je reis te hervatten en relevante activiteit in je Chrome-geschiedenis te bekijken.</translation> <translation id="6116338172782435947">Tekst en afbeeldingen bekijken die naar het klembord zijn gekopieerd</translation> <translation id="6120179357481664955">Weet je je UPI-ID nog?</translation> <translation id="6123290840358279103">Virtuele kaart bekijken</translation> @@ -1471,6 +1473,7 @@ <translation id="6423385022588644828">Bevestig je kaarten sneller door vanaf nu Touch ID te gebruiken</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">Luikvouw</translation> +<translation id="6428146287756735566">Reis hervatten om relevante activiteit in je Chrome-geschiedenis te bekijken</translation> <translation id="6428450836711225518">Je telefoonnummer verifiëren</translation> <translation id="6433490469411711332">Contactgegevens bewerken</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> heeft de verbinding geweigerd.</translation> @@ -1522,6 +1525,7 @@ <translation id="6643016212128521049">Wissen</translation> <translation id="6645291930348198241">Toegang krijgen tot cookies en sitegegevens.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Geen}=1{Van 1 site (je wordt niet uitgelogd bij je Google-account)}other{Van # sites (je wordt niet uitgelogd bij je Google-account)}}</translation> +<translation id="6647197322759179819">Reis hervatten</translation> <translation id="6648459603387803038">Je beheerder kan je browserinstellingen op afstand wijzigen. Activiteit op dit apparaat kan ook buiten Chrome worden beheerd.</translation> <translation id="6648524591329069940">Serif-lettertype</translation> <translation id="6651270836885078973">Beheerd door:</translation> @@ -2171,6 +2175,7 @@ <translation id="9114524666733003316">Creditcard bevestigen...</translation> <translation id="9114581008513152754">Deze browser wordt niet beheerd door een bedrijf of andere organisatie. Activiteit op dit apparaat kan buiten Chrome worden beheerd. <ph name="BEGIN_LINK" />Meer informatie<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Nieuw</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />. Druk op Tab en daarna op Enter om je reis te hervatten en relevante activiteit in je Chrome-geschiedenis te bekijken.</translation> <translation id="9119042192571987207">Geüpload</translation> <translation id="9128016270925453879">Beleid is geladen</translation> <translation id="9128870381267983090">Verbinding maken met netwerk</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb index 9f01abb2..c6ebab2 100644 --- a/components/strings/components_strings_no.xtb +++ b/components/strings/components_strings_no.xtb
@@ -734,6 +734,7 @@ <translation id="3631244953324577188">Biometri</translation> <translation id="3633738897356909127">Knappen «Oppdater Chrome» – trykk på Enter for å oppdatere Chrome fra Chrome-innstillingene</translation> <translation id="3634530185120165534">Skuff 5</translation> +<translation id="3637662659967048211">Lagre i Google-kontoen</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Program:</translation> <translation id="3650584904733503804">Valideringen var vellykket</translation> @@ -1411,6 +1412,7 @@ <translation id="6106989379647458772">Det kan hende at nettsiden på <ph name="PAGE" /> er midlertidig nede eller flyttet permanent til en ny nettadresse.</translation> <translation id="6107012941649240045">Utstedt til</translation> <translation id="610911394827799129">Det kan hende Google-kontoen din har andre typer nettleserlogger på <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> +<translation id="6113594885686374546">Fortsett ferden-knappen – trykk på Enter for å fortsette ferden og se relevant aktivitet i Chrome-loggen</translation> <translation id="6116338172782435947">Se tekst og bilder som er kopiert til utklippstavlen</translation> <translation id="6120179357481664955">Husker du UPI-ID-en din?</translation> <translation id="6123290840358279103">Se virtuelt kort</translation> @@ -1486,6 +1488,7 @@ <translation id="6423385022588644828">Bekreft kortene dine raskere ved å bruke Touch ID fra nå av</translation> <translation id="6425092077175753609">Materiale</translation> <translation id="6427730057873428458">Vindusfals</translation> +<translation id="6428146287756735566">Fortsett ferden for å se relevant aktivitet i Chrome-loggen</translation> <translation id="6428450836711225518">Bekreft telefonnummeret ditt</translation> <translation id="6433490469411711332">Endre kontaktinformasjonen</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> avviste tilkoblingsforsøket.</translation> @@ -1537,6 +1540,7 @@ <translation id="6643016212128521049">Tøm</translation> <translation id="6645291930348198241">få tilgang til informasjonskapsler og nettstedsdata</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Ingen}=1{Fra 1 nettsted (du blir ikke logget av Google-kontoen din)}other{Fra # nettsteder (du blir ikke logget av Google-kontoen din)}}</translation> +<translation id="6647197322759179819">Fortsett ferden</translation> <translation id="6648459603387803038">Administratoren kan endre nettleseroppsettet eksternt. Aktiviteten på denne enheten kan også administreres utenfor Chrome.</translation> <translation id="6648524591329069940">Med seriffer</translation> <translation id="6651270836885078973">Administreres av:</translation> @@ -2187,6 +2191,7 @@ <translation id="9114524666733003316">Bekrefter kortet …</translation> <translation id="9114581008513152754">Denne nettleseren administreres ikke av et selskap eller en annen organisasjon. Aktiviteten på denne enheten kan bli administrert utenfor Chrome. <ph name="BEGIN_LINK" />Finn ut mer<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Frisk</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" /> – trykk på Tab og deretter på Enter for å fortsette ferden og se relevant aktivitet i Chrome-loggen</translation> <translation id="9119042192571987207">Opplastet</translation> <translation id="9128016270925453879">Regler er lastet inn</translation> <translation id="9128870381267983090">Koble til nettverk</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb index 4cec46b3..1d5c6cff 100644 --- a/components/strings/components_strings_pl.xtb +++ b/components/strings/components_strings_pl.xtb
@@ -730,6 +730,7 @@ <translation id="3631244953324577188">Biometria</translation> <translation id="3633738897356909127">Przycisk aktualizacji Chrome. Naciśnij Enter, by zaktualizować przeglądarkę Chrome z poziomu jej ustawień.</translation> <translation id="3634530185120165534">Taca 5</translation> +<translation id="3637662659967048211">Zapisz na koncie Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Aplikacja:</translation> <translation id="3650584904733503804">Weryfikacja powiodła się</translation> @@ -1402,6 +1403,7 @@ <translation id="6106989379647458772">Strona <ph name="PAGE" /> może być chwilowo niedostępna lub została przeniesiona pod nowy adres.</translation> <translation id="6107012941649240045">Wystawiony dla</translation> <translation id="610911394827799129">Inne rodzaje historii przeglądania mogą być nadal dostępne na Twoim koncie Google na <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation> +<translation id="6113594885686374546">Przycisk Wznów podróż; aby wznowić podróż i zobaczyć odpowiednią aktywność w historii Chrome, naciśnij Enter</translation> <translation id="6116338172782435947">Mieć dostęp do tekstu i obrazów skopiowanych do schowka</translation> <translation id="6120179357481664955">Zapamiętać Twój identyfikator UPI?</translation> <translation id="6123290840358279103">Zobacz kartę wirtualną</translation> @@ -1477,6 +1479,7 @@ <translation id="6423385022588644828">Potwierdzaj karty szybciej przy użyciu Touch ID</translation> <translation id="6425092077175753609">Styl Material</translation> <translation id="6427730057873428458">Składanie od góry i od dołu do środka</translation> +<translation id="6428146287756735566">Wznów podróż, aby zobaczyć odpowiednią aktywność w historii Chrome</translation> <translation id="6428450836711225518">Weryfikowanie numeru telefonu</translation> <translation id="6433490469411711332">Edytuj dane kontaktowe</translation> <translation id="6433595998831338502">Serwer <ph name="HOST_NAME" /> odrzucił połączenie.</translation> @@ -1528,6 +1531,7 @@ <translation id="6643016212128521049">Wyczyść</translation> <translation id="6645291930348198241">Dostęp do plików cookie i danych witryn.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Brak}=1{Z 1 witryny (nie spowoduje to wylogowania z konta Google)}few{Z # witryn (nie spowoduje to wylogowania z konta Google)}many{Z # witryn (nie spowoduje to wylogowania z konta Google)}other{Z # witryny (nie spowoduje to wylogowania z konta Google)}}</translation> +<translation id="6647197322759179819">Wznów podróż</translation> <translation id="6648459603387803038">Administrator może zdalnie zmienić konfigurację przeglądarki. Aktywność na tym urządzeniu może być zarządzana również poza Chrome.</translation> <translation id="6648524591329069940">Czcionka szeryfowa</translation> <translation id="6651270836885078973">Zarządzane przez:</translation> @@ -2179,6 +2183,7 @@ <translation id="9114524666733003316">Sprawdzam kartę…</translation> <translation id="9114581008513152754">Ta przeglądarka nie jest zarządzana przez firmę ani inną organizację. Aktywność na tym urządzeniu może być zarządzana poza Chrome. <ph name="BEGIN_LINK" />Więcej informacji<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Świeży</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />; aby wznowić podróż i zobaczyć odpowiednią aktywność w historii Chrome, naciśnij Tab, a potem Enter</translation> <translation id="9119042192571987207">Przesłano</translation> <translation id="9128016270925453879">Zasady zostały załadowane</translation> <translation id="9128870381267983090">Połącz z siecią</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb index 972be96..3666b641 100644 --- a/components/strings/components_strings_pt-BR.xtb +++ b/components/strings/components_strings_pt-BR.xtb
@@ -728,6 +728,7 @@ <translation id="3631244953324577188">Biometria</translation> <translation id="3633738897356909127">Botão "Atualizar o Chrome". Pressione "Enter" para atualizar o Chrome pelas configurações dele</translation> <translation id="3634530185120165534">Bandeja 5</translation> +<translation id="3637662659967048211">Salvar na Conta do Google</translation> <translation id="3640766068866876100">102 mm × 152 mm</translation> <translation id="3642638418806704195">Aplicativo:</translation> <translation id="3650584904733503804">Validação bem-sucedida</translation> @@ -1400,6 +1401,7 @@ <translation id="6106989379647458772">A página da Web no endereço <ph name="PAGE" /> pode estar temporariamente inativa ou pode ter sido transferida para um novo endereço.</translation> <translation id="6107012941649240045">Emitido para</translation> <translation id="610911394827799129">Sua Conta do Google pode ter outras formas de histórico de navegação em <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation> +<translation id="6113594885686374546">Botão "Retomar jornada". Pressione Enter para retomar a jornada e ver as atividades relevantes no seu histórico do Chrome</translation> <translation id="6116338172782435947">Ver os textos e imagens copiados para a área de transferência</translation> <translation id="6120179357481664955">Lembrar código da UPI?</translation> <translation id="6123290840358279103">Ver cartão virtual</translation> @@ -1475,6 +1477,7 @@ <translation id="6423385022588644828">Confirme seus cartões mais rapidamente usando o Touch ID de agora em diante</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">Dobra janela</translation> +<translation id="6428146287756735566">Retomar a jornada para ver as atividades relevantes no seu histórico do Chrome</translation> <translation id="6428450836711225518">Verificar seu número de telefone</translation> <translation id="6433490469411711332">Editar informações de contato</translation> <translation id="6433595998831338502">A conexão com <ph name="HOST_NAME" /> foi recusada.</translation> @@ -1526,6 +1529,7 @@ <translation id="6643016212128521049">Limpar</translation> <translation id="6645291930348198241">Acesso a cookies e dados do site.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Nenhum}=1{De 1 site (você não será desconectado da sua Conta do Google)}one{De # site (você não será desconectado da sua Conta do Google)}other{De # sites (você não será desconectado da sua Conta do Google)}}</translation> +<translation id="6647197322759179819">Retomar jornada</translation> <translation id="6648459603387803038">O administrador pode mudar as configurações do navegador remotamente. A atividade deste dispositivo também pode ser gerenciada fora do Chrome.</translation> <translation id="6648524591329069940">Fonte Serif</translation> <translation id="6651270836885078973">Gerenciamento por:</translation> @@ -2179,6 +2183,7 @@ <translation id="9114524666733003316">Confirmando cartão…</translation> <translation id="9114581008513152754">Este navegador não é gerenciado por uma empresa ou outra organização. A atividade deste dispositivo pode ser gerenciada fora do Chrome. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Revigorado</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />. Pressione Tab e depois Enter para retomar a jornada e ver as atividades no seu histórico do Chrome</translation> <translation id="9119042192571987207">Enviado</translation> <translation id="9128016270925453879">As políticas foram carregadas</translation> <translation id="9128870381267983090">Conectar à rede</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb index bda1bcb..2c518cd 100644 --- a/components/strings/components_strings_pt-PT.xtb +++ b/components/strings/components_strings_pt-PT.xtb
@@ -734,6 +734,7 @@ <translation id="3631244953324577188">Biometria</translation> <translation id="3633738897356909127">Botão Atualizar Chrome; prima Enter para atualizar o Chrome nas Definições do Chrome.</translation> <translation id="3634530185120165534">Tabuleiro 5</translation> +<translation id="3637662659967048211">Guardar na Conta Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Aplicação:</translation> <translation id="3650584904733503804">Validação com êxito</translation> @@ -1411,6 +1412,7 @@ <translation id="6106989379647458772">A página Web em <ph name="PAGE" /> pode estar temporariamente indisponível ou pode ter sido permanentemente movida para um novo endereço Web.</translation> <translation id="6107012941649240045">Emitido para</translation> <translation id="610911394827799129">A sua Conta Google pode ter outras formas do histórico de navegação em <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> +<translation id="6113594885686374546">Botão Retomar percurso, prima Enter para retomar o percurso e ver atividade relevante no Histórico do Chrome</translation> <translation id="6116338172782435947">Ver o texto e as imagens copiados para a área de transferência</translation> <translation id="6120179357481664955">Lembra-se do seu ID do UPI?</translation> <translation id="6123290840358279103">Ver cartão virtual</translation> @@ -1486,6 +1488,7 @@ <translation id="6423385022588644828">Confirme os seus cartões mais rapidamente ao utilizar o Touch ID a partir de agora.</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">Dobra simétrica</translation> +<translation id="6428146287756735566">Retome o percurso para ver atividade relevante no Histórico do Chrome</translation> <translation id="6428450836711225518">Valide o seu número de telefone</translation> <translation id="6433490469411711332">Editar informações de contacto</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> recusou estabelecer ligação.</translation> @@ -1537,6 +1540,7 @@ <translation id="6643016212128521049">Limpar</translation> <translation id="6645291930348198241">Aceder aos cookies e dados de sites.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Nenhum}=1{De 1 site (a sessão na sua Conta Google não é terminada).}other{De # sites (a sessão na sua Conta Google não é terminada).}}</translation> +<translation id="6647197322759179819">Retomar percurso</translation> <translation id="6648459603387803038">O administrador pode alterar a configuração do navegador remotamente. A atividade neste dispositivo também pode ser gerida fora do Chrome.</translation> <translation id="6648524591329069940">Tipo de letra Serif</translation> <translation id="6651270836885078973">Gerido por:</translation> @@ -2188,6 +2192,7 @@ <translation id="9114524666733003316">A confirmar o cartão…</translation> <translation id="9114581008513152754">Este navegador não é gerido por uma empresa ou outra entidade. A atividade neste dispositivo pode ser gerida fora do Chrome. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Moderno</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, prima Tab e, em seguida, Enter para retomar o percurso e ver atividade relevante no Histórico do Chrome</translation> <translation id="9119042192571987207">Carregado</translation> <translation id="9128016270925453879">As políticas foram carregadas.</translation> <translation id="9128870381267983090">Ligar à rede</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb index 2068196..fb4f993 100644 --- a/components/strings/components_strings_ro.xtb +++ b/components/strings/components_strings_ro.xtb
@@ -732,6 +732,7 @@ <translation id="3631244953324577188">Sisteme biometrice</translation> <translation id="3633738897356909127">Butonul Actualizează Chrome, apasă pe Enter pentru a actualiza Chrome din setările Chrome</translation> <translation id="3634530185120165534">Tava 5</translation> +<translation id="3637662659967048211">Salvează în Contul Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Aplicație:</translation> <translation id="3650584904733503804">Validarea a reușit</translation> @@ -1409,6 +1410,7 @@ <translation id="6106989379647458772">Este posibil ca pagina web de la <ph name="PAGE" /> să fie blocată temporar sau să fi fost mutată definitiv la o nouă adresă web.</translation> <translation id="6107012941649240045">Emis către</translation> <translation id="610911394827799129">Contul Google poate să ofere alte forme ale istoricului de navigare la <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation> +<translation id="6113594885686374546">Butonul Repetă experiența, apasă pe Enter pentru a repeta experiența și a vedea activitatea relevantă din istoricul Chrome</translation> <translation id="6116338172782435947">să afișeze textul și imaginile copiate în clipboard</translation> <translation id="6120179357481664955">Îți amintești ID-ul UPI?</translation> <translation id="6123290840358279103">Vezi cardul virtual</translation> @@ -1484,6 +1486,7 @@ <translation id="6423385022588644828">Confirmă-ți cardurile mai rapid, folosind Touch ID</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">Îndoire de tip fereastră</translation> +<translation id="6428146287756735566">Repetă experiența pentru a vedea activitatea relevantă din istoricul Chrome</translation> <translation id="6428450836711225518">Confirmă numărul de telefon</translation> <translation id="6433490469411711332">Editează informațiile de contact</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> a refuzat conexiunea.</translation> @@ -1535,6 +1538,7 @@ <translation id="6643016212128521049">Șterge</translation> <translation id="6645291930348198241">să acceseze cookie-urile și datele privind site-urile.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Niciunul}=1{De pe un site (nu te va deconecta de la Contul Google)}few{De pe # site-uri (nu te va deconecta de la Contul Google)}other{De pe # de site-uri (nu te va deconecta de la Contul Google)}}</translation> +<translation id="6647197322759179819">Repetă experiența</translation> <translation id="6648459603387803038">Administratorul poate schimba configurația browserului de la distanță. Este posibil ca activitatea de pe acest dispozitiv să fie gestionată și din afara Chrome.</translation> <translation id="6648524591329069940">Font Serif</translation> <translation id="6651270836885078973">Gestionat de:</translation> @@ -2187,6 +2191,7 @@ <translation id="9114524666733003316">Se confirmă cardul…</translation> <translation id="9114581008513152754">Browserul nu este gestionat de o companie sau o altă organizație. Este posibil ca activitatea de pe acest dispozitiv să fie gestionată în afara Chrome. <ph name="BEGIN_LINK" />Află mai multe<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Prospețime</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, apasă pe Tab, apoi pe Enter pentru a repeta experiența și a vedea activitatea relevantă din istoricul Chrome</translation> <translation id="9119042192571987207">Încărcat</translation> <translation id="9128016270925453879">Politicile s-au încărcat</translation> <translation id="9128870381267983090">Conectați-vă la rețea</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb index 0b8bcaf..443c625 100644 --- a/components/strings/components_strings_ru.xtb +++ b/components/strings/components_strings_ru.xtb
@@ -727,6 +727,7 @@ <translation id="3631244953324577188">Биометрия</translation> <translation id="3633738897356909127">Кнопка "Обновить Chrome". Нажмите Ввод, чтобы обновить Chrome.</translation> <translation id="3634530185120165534">Лоток 5</translation> +<translation id="3637662659967048211">Сохранить в аккаунте Google?</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Приложение:</translation> <translation id="3650584904733503804">Проверка выполнена успешно</translation> @@ -1399,6 +1400,7 @@ <translation id="6106989379647458772">Возможно, веб-страница <ph name="PAGE" /> временно недоступна или находится по новому адресу.</translation> <translation id="6107012941649240045">Кому выдан</translation> <translation id="610911394827799129">Информация о других ваших действиях в Интернете может также храниться на странице <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> +<translation id="6113594885686374546">Кнопка "Продолжить поиск в истории". Нажмите Ввод, чтобы посмотреть похожие запросы в истории Chrome.</translation> <translation id="6116338172782435947">Просмотр текста и изображений, скопированных в буфер обмена</translation> <translation id="6120179357481664955">Запомнить идентификатор UPI?</translation> <translation id="6123290840358279103">Посмотреть виртуальную карту</translation> @@ -1474,6 +1476,7 @@ <translation id="6423385022588644828">Подтверждайте карты быстрее с помощью Touch ID</translation> <translation id="6425092077175753609">Material design</translation> <translation id="6427730057873428458">Фальцовка калиткой в два сгиба</translation> +<translation id="6428146287756735566">Посмотреть похожие запросы в истории Chrome</translation> <translation id="6428450836711225518">Подтвердите номер телефона</translation> <translation id="6433490469411711332">Изменить контактную информацию</translation> <translation id="6433595998831338502">Сайт <ph name="HOST_NAME" /> не позволяет установить соединение.</translation> @@ -1525,6 +1528,7 @@ <translation id="6643016212128521049">Удалить</translation> <translation id="6645291930348198241">доступ к файлам cookie и данным сайта.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Нет}=1{С 1 сайта (вы останетесь в аккаунте Google)}one{С # сайта (вы останетесь в аккаунте Google)}few{С # сайтов (вы останетесь в аккаунте Google)}many{С # сайтов (вы останетесь в аккаунте Google)}other{С # сайта (вы останетесь в аккаунте Google)}}</translation> +<translation id="6647197322759179819">Продолжить поиск в истории</translation> <translation id="6648459603387803038">Администратор может удаленно менять настройки браузера и управлять действиями вне браузера Chrome на этом устройстве.</translation> <translation id="6648524591329069940">Шрифты с засечками</translation> <translation id="6651270836885078973">Управляет:</translation> @@ -2176,6 +2180,7 @@ <translation id="9114524666733003316">Подтверждение карты...</translation> <translation id="9114581008513152754">Компания или организация не управляет этим браузером. Действиями на этом устройстве можно управлять вне браузера Chrome. <ph name="BEGIN_LINK" />Подробнее…<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Свежий</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />. Нажмите Tab и затем Ввод, чтобы посмотреть похожие запросы в истории Chrome.</translation> <translation id="9119042192571987207">Загружен</translation> <translation id="9128016270925453879">Правила загружены</translation> <translation id="9128870381267983090">Подключитесь к сети</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb index 492de7d..4f14ee4 100644 --- a/components/strings/components_strings_sk.xtb +++ b/components/strings/components_strings_sk.xtb
@@ -724,6 +724,7 @@ <translation id="3631244953324577188">Biometria</translation> <translation id="3633738897356909127">Tlačidlo Aktualizovať Chrome. Stlačením tlačidla Enter aktualizujete Chrome v jeho nastaveniach.</translation> <translation id="3634530185120165534">Priehradka č. 5</translation> +<translation id="3637662659967048211">Uloženie do účtu Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Aplikácia:</translation> <translation id="3650584904733503804">Overenie bolo úspešné</translation> @@ -1396,6 +1397,7 @@ <translation id="6106989379647458772">Stránka <ph name="PAGE" /> je možno dočasne nedostupná, možno bola natrvalo presunutá na novú webovú adresu.</translation> <translation id="6107012941649240045">Vydané pre</translation> <translation id="610911394827799129">Váš účet Google môže mať ďalšie formy histórie prehliadania na adrese <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation> +<translation id="6113594885686374546">Tlačidlo Pokračovať v ceste, po stlačení klávesa Enter budete pokračovať v ceste a zobrazíte si relevantnú aktivitu v histórii Chromu</translation> <translation id="6116338172782435947">Prístup k textu a obrázkom skopírovaným do schránky</translation> <translation id="6120179357481664955">Chcete uložiť svoj identifikátor UPI?</translation> <translation id="6123290840358279103">Zobraziť virtuálnu kartu</translation> @@ -1470,6 +1472,7 @@ <translation id="6423385022588644828">Odteraz môžete potvrdzovať karty rýchlejšie pomocou funkcie Touch ID</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">Obojstranná fazóna</translation> +<translation id="6428146287756735566">Pokračujte v ceste a zobrazte si relevantnú aktivitu v histórii Chromu</translation> <translation id="6428450836711225518">Overenie telefónneho čísla</translation> <translation id="6433490469411711332">Úprava kontaktných informácií</translation> <translation id="6433595998831338502">Web <ph name="HOST_NAME" /> zamietol pripojenie.</translation> @@ -1521,6 +1524,7 @@ <translation id="6643016212128521049">Vymazať</translation> <translation id="6645291930348198241">Používať súbory cookie a údaje webov.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Žiadne}=1{Z 1 webu (neodhlásime vás z účtu Google)}few{Z # webov (neodhlásime vás z účtu Google)}many{From # sites (you won't be signed out of your Google Account)}other{Z # webov (neodhlásime vás z účtu Google)}}</translation> +<translation id="6647197322759179819">Pokračovať v ceste</translation> <translation id="6648459603387803038">Nastavenia prehliadača môže vzdialene zmeniť správca. Aktivita v tomto zariadení môže byť tiež spravovaná mimo Chromu.</translation> <translation id="6648524591329069940">Písmo Serif</translation> <translation id="6651270836885078973">Spravuje:</translation> @@ -2173,6 +2177,7 @@ <translation id="9114524666733003316">Overuje sa karta…</translation> <translation id="9114581008513152754">Tento prehliadač nespravuje firma ani iná organizácia. Aktivita v tomto zariadení môže byť spravovaná mimo Chromu. <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Príjemné</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, stlačte Tab, potom Enter a pokračujte tak v ceste so zobrazením relevantnej aktivity v histórii Chromu</translation> <translation id="9119042192571987207">Nahrané</translation> <translation id="9128016270925453879">Načítavajú sa pravidlá</translation> <translation id="9128870381267983090">Pripojiť k sieti</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb index bcf8d09..2d0701e 100644 --- a/components/strings/components_strings_sl.xtb +++ b/components/strings/components_strings_sl.xtb
@@ -734,6 +734,7 @@ <translation id="3631244953324577188">Biometrika</translation> <translation id="3633738897356909127">Gumb za posodobitev Chroma, pritisnite Enter, če želite posodobiti Chrome v Chromovih nastavitvah</translation> <translation id="3634530185120165534">Pladenj 5</translation> +<translation id="3637662659967048211">Shranjevanje v račun Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Program:</translation> <translation id="3650584904733503804">Preverjanje veljavnosti uspešno</translation> @@ -1411,6 +1412,7 @@ <translation id="6106989379647458772">Spletna stran na naslovu <ph name="PAGE" /> morda začasno ni na voljo ali pa je trajno preseljena na drug spletni naslov.</translation> <translation id="6107012941649240045">Izdano za</translation> <translation id="610911394827799129">V Google Računu so morda druge vrste zgodovine brskanja na <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> +<translation id="6113594885686374546">Gumb za nadaljevanje poti, pritisnite Enter, če želite nadaljevati pot in si ogledati pomembno dejavnost v zgodovini uporabe Chroma.</translation> <translation id="6116338172782435947">ogled besedila in slik, kopiranih v odložišče</translation> <translation id="6120179357481664955">Si želite zapomniti ID za UPI?</translation> <translation id="6123290840358279103">Ogled navidezne kartice</translation> @@ -1486,6 +1488,7 @@ <translation id="6423385022588644828">Od zdaj naprej lahko uporabljate Touch ID in kartice potrjujete hitreje</translation> <translation id="6425092077175753609">Materialno</translation> <translation id="6427730057873428458">Prepogibanje v obliki okna</translation> +<translation id="6428146287756735566">Nadaljujte pot, če si želite ogledati pomembno dejavnost v zgodovini uporabe Chroma.</translation> <translation id="6428450836711225518">Preverjanje telefonske številke</translation> <translation id="6433490469411711332">Uredi informacije o stiku</translation> <translation id="6433595998831338502">Spletno mesto <ph name="HOST_NAME" /> ni dovolilo povezave.</translation> @@ -1537,6 +1540,7 @@ <translation id="6643016212128521049">Izbriši</translation> <translation id="6645291930348198241">Dostop do piškotkov in podatkov spletnih mest.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Nič}=1{Na 1 spletnem mestu (iz Google Računa ne boste odjavljeni)}one{Na # spletnem mestu (iz Google Računa ne boste odjavljeni)}two{Na # spletnih mestih (iz Google Računa ne boste odjavljeni)}few{Na # spletnih mestih (iz Google Računa ne boste odjavljeni)}other{Na # spletnih mestih (iz Google Računa ne boste odjavljeni)}}</translation> +<translation id="6647197322759179819">Nadaljuj pot</translation> <translation id="6648459603387803038">Skrbnik lahko spremeni nastavitev brskalnika na daljavo. Dejavnost v tej napravi morda tudi upravljajo zunaj Chroma.</translation> <translation id="6648524591329069940">Serifna pisava</translation> <translation id="6651270836885078973">Upravitelj:</translation> @@ -2188,6 +2192,7 @@ <translation id="9114524666733003316">Potrjevanje kartice …</translation> <translation id="9114581008513152754">Tega brskalnika ne upravlja podjetje ali druga organizacija. Dejavnost v tej napravi morda upravljajo zunaj Chroma. <ph name="BEGIN_LINK" />Več o tem<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Sveže</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, pritisnite tabulatorko, nato Enter, če želite nadaljevati pot in si ogledati pomembno dejavnost v zgodovini uporabe Chroma.</translation> <translation id="9119042192571987207">Naloženo</translation> <translation id="9128016270925453879">Pravilniki so naloženi</translation> <translation id="9128870381267983090">Vzpostavi povezavo z omrežjem</translation>
diff --git a/components/strings/components_strings_sr-Latn.xtb b/components/strings/components_strings_sr-Latn.xtb index 13ba305..e59da9af 100644 --- a/components/strings/components_strings_sr-Latn.xtb +++ b/components/strings/components_strings_sr-Latn.xtb
@@ -734,6 +734,7 @@ <translation id="3631244953324577188">Biometrija</translation> <translation id="3633738897356909127">Dugme Ažuriraj Chrome, pritisnite Enter da biste ažurirali Chrome iz podešavanja Chrome-a</translation> <translation id="3634530185120165534">5. fioka</translation> +<translation id="3637662659967048211">Sačuvajte na Google nalogu</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Aplikacija:</translation> <translation id="3650584904733503804">Potvrda valjanosti je uspela</translation> @@ -1411,6 +1412,7 @@ <translation id="6106989379647458772">Veb-stranica na adresi <ph name="PAGE" /> možda privremeno ne funkcioniše ili je trajno premeštena na novu veb-adresu.</translation> <translation id="6107012941649240045">Izdato za</translation> <translation id="610911394827799129">Google nalog može da ima druge oblike istorije pregledanja na <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> +<translation id="6113594885686374546">Dugme Nastavi putanjom, pritisnite Enter da biste nastavili putanjom i videli relevantne aktivnosti u istoriji Chrome-a</translation> <translation id="6116338172782435947">da vidi tekst i slike koji su kopirani u privremenu memoriju</translation> <translation id="6120179357481664955">Želite da sačuvate ID za UPI?</translation> <translation id="6123290840358279103">Prikaži virtuelnu karticu</translation> @@ -1485,6 +1487,7 @@ <translation id="6423385022588644828">Od sada brže potvrđujte kartice uz Touch ID</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">Presavijanje u obliku prozora</translation> +<translation id="6428146287756735566">Nastavite putanjom da biste videli relevantne aktivnosti u istoriji Chrome-a</translation> <translation id="6428450836711225518">Verifikujte broj telefona</translation> <translation id="6433490469411711332">Izmenite kontakt informacije</translation> <translation id="6433595998831338502">Host <ph name="HOST_NAME" /> je odbio povezivanje.</translation> @@ -1536,6 +1539,7 @@ <translation id="6643016212128521049">Obriši</translation> <translation id="6645291930348198241">da pristupa kolačićima i podacima o sajtovima.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{None}=1{Sa 1 sajta (nećemo vas odjaviti sa Google naloga)}one{Sa # sajta (nećemo vas odjaviti sa Google naloga)}few{Sa # sajta (nećemo vas odjaviti sa Google naloga)}other{Sa # sajtova (nećemo vas odjaviti sa Google naloga)}}</translation> +<translation id="6647197322759179819">Nastavi putanjom</translation> <translation id="6648459603387803038">Administrator može daljinski da promeni podešavanje pregledača. Aktivnostima na ovom uređaju može da se upravlja i van Chrome-a.</translation> <translation id="6648524591329069940">Font Serif</translation> <translation id="6651270836885078973">Ovim upravlja:</translation> @@ -2188,6 +2192,7 @@ <translation id="9114524666733003316">Kartica se potvrđuje...</translation> <translation id="9114581008513152754">Ovim pregledačem ne upravlja kompanija niti druga organizacija. Aktivnostima na ovom uređaju se možda upravlja van Chrome-a. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Sveže</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, pritisnite Tab, pa Enter da biste nastavili putanjom i videli relevantne aktivnosti u istoriji Chrome-a</translation> <translation id="9119042192571987207">Otpremljeno</translation> <translation id="9128016270925453879">Smernice su učitane</translation> <translation id="9128870381267983090">Povezivanje sa mrežom</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb index 0ecd426..a1a1d90 100644 --- a/components/strings/components_strings_sr.xtb +++ b/components/strings/components_strings_sr.xtb
@@ -734,6 +734,7 @@ <translation id="3631244953324577188">Биометрија</translation> <translation id="3633738897356909127">Дугме Ажурирај Chrome, притисните Enter да бисте ажурирали Chrome из подешавања Chrome-а</translation> <translation id="3634530185120165534">5. фиока</translation> +<translation id="3637662659967048211">Сачувајте на Google налогу</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Апликација:</translation> <translation id="3650584904733503804">Потврда ваљаности је успела</translation> @@ -1411,6 +1412,7 @@ <translation id="6106989379647458772">Веб-страница на адреси <ph name="PAGE" /> можда привремено не функционише или је трајно премештена на нову веб-адресу.</translation> <translation id="6107012941649240045">Издато за</translation> <translation id="610911394827799129">Google налог може да има друге облике историје прегледања на <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> +<translation id="6113594885686374546">Дугме Настави путањом, притисните Enter да бисте наставили путањом и видели релевантне активности у историји Chrome-а</translation> <translation id="6116338172782435947">да види текст и слике који су копирани у привремену меморију</translation> <translation id="6120179357481664955">Желите да сачувате ИД за UPI?</translation> <translation id="6123290840358279103">Прикажи виртуелну картицу</translation> @@ -1485,6 +1487,7 @@ <translation id="6423385022588644828">Од сада брже потврђујте картице уз Touch ID</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">Пресавијање у облику прозора</translation> +<translation id="6428146287756735566">Наставите путањом да бисте видели релевантне активности у историји Chrome-а</translation> <translation id="6428450836711225518">Верификујте број телефона</translation> <translation id="6433490469411711332">Измените контакт информације</translation> <translation id="6433595998831338502">Хост <ph name="HOST_NAME" /> је одбио повезивање.</translation> @@ -1536,6 +1539,7 @@ <translation id="6643016212128521049">Обриши</translation> <translation id="6645291930348198241">да приступа колачићима и подацима о сајтовима.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{None}=1{Са 1 сајта (нећемо вас одјавити са Google налога)}one{Са # сајта (нећемо вас одјавити са Google налога)}few{Са # сајта (нећемо вас одјавити са Google налога)}other{Са # сајтова (нећемо вас одјавити са Google налога)}}</translation> +<translation id="6647197322759179819">Настави путањом</translation> <translation id="6648459603387803038">Администратор може даљински да промени подешавање прегледача. Активностима на овом уређају може да се управља и ван Chrome-а.</translation> <translation id="6648524591329069940">Фонт Serif</translation> <translation id="6651270836885078973">Овим управља:</translation> @@ -2188,6 +2192,7 @@ <translation id="9114524666733003316">Картица се потврђује...</translation> <translation id="9114581008513152754">Овим прегледачем не управља компанија нити друга организација. Активностима на овом уређају се можда управља ван Chrome-а. <ph name="BEGIN_LINK" />Сазнајте више<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Свеже</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, притисните Tab, па Enter да бисте наставили путањом и видели релевантне активности у историји Chrome-а</translation> <translation id="9119042192571987207">Отпремљено</translation> <translation id="9128016270925453879">Смернице су учитане</translation> <translation id="9128870381267983090">Повезивање са мрежом</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb index 70ca7bf..4b6b4e83 100644 --- a/components/strings/components_strings_sv.xtb +++ b/components/strings/components_strings_sv.xtb
@@ -734,6 +734,7 @@ <translation id="3631244953324577188">Biometri</translation> <translation id="3633738897356909127">Knappen Uppdatera Chrome, tryck på retur om du vill uppdatera Chrome i inställningarna för Chrome</translation> <translation id="3634530185120165534">Fack 5</translation> +<translation id="3637662659967048211">Spara i Google-kontot</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Program:</translation> <translation id="3650584904733503804">Valideringen har genomförts</translation> @@ -1411,6 +1412,7 @@ <translation id="6106989379647458772">Webbsidan på <ph name="PAGE" /> kan vara nere tillfälligt eller ha flyttats permanent till en ny webbadress.</translation> <translation id="6107012941649240045">Utfärdat till</translation> <translation id="610911394827799129">Det kan finnas andra former av webbhistorik i Google-kontot på <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation> +<translation id="6113594885686374546">Knappen Återuppta sökning, tryck på Retur om du vill återuppta sökningen och se relevant aktivitet i Chrome-historiken</translation> <translation id="6116338172782435947">Tillgång till text och bilder som kopierats till Urklipp</translation> <translation id="6120179357481664955">Vill du spara UPI-id?</translation> <translation id="6123290840358279103">Visa virtuellt kort</translation> @@ -1486,6 +1488,7 @@ <translation id="6423385022588644828">Verifiera kreditkort snabbare genom att använda Touch ID från och med nu</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">Fönsterfalsning</translation> +<translation id="6428146287756735566">Återuppta sökningen för att se relevant aktivitet i Chrome-historiken</translation> <translation id="6428450836711225518">Bekräfta ditt telefonnummer</translation> <translation id="6433490469411711332">Redigera kontaktuppgifter</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> avvisade anslutningen.</translation> @@ -1537,6 +1540,7 @@ <translation id="6643016212128521049">Rensa</translation> <translation id="6645291930348198241">få åtkomst till cookies och webbplatsdata.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Ingen}=1{Från 1 webbplats (du loggas inte ut från Google-kontot)}other{Från # webbplatser (du loggas inte ut från Google-kontot)}}</translation> +<translation id="6647197322759179819">Återuppta sökning</translation> <translation id="6648459603387803038">Administratören kan ändra webbläsarinställningarna på distans. Aktivitet på den här enheten kan hanteras även utanför Chrome.</translation> <translation id="6648524591329069940">Serif-teckensnitt</translation> <translation id="6651270836885078973">Hanteras av:</translation> @@ -2189,6 +2193,7 @@ <translation id="9114524666733003316">Kortet kontrolleras …</translation> <translation id="9114581008513152754">Den här webbläsaren hanteras inte av ett företag eller en organisation. Aktiviteter på den här enheten kan hanteras utanför Chrome. <ph name="BEGIN_LINK" />Läs mer<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Fräsch</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, tryck på Tabb och sedan på Retur om du vill återuppta sökningen och se relevant aktivitet i Chrome-historiken</translation> <translation id="9119042192571987207">Uppladdad</translation> <translation id="9128016270925453879">Policyer har lästs in</translation> <translation id="9128870381267983090">Anslut till ett nätverk</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb index f317db9d..a73af1ab 100644 --- a/components/strings/components_strings_sw.xtb +++ b/components/strings/components_strings_sw.xtb
@@ -733,6 +733,7 @@ <translation id="3631244953324577188">Bayometriki</translation> <translation id="3633738897356909127">Kitufe cha 'Sasisha Chrome', bonyeza 'Enter' ili usasishe Chrome katika mipangilio yako ya Chrome</translation> <translation id="3634530185120165534">Trei ya tano</translation> +<translation id="3637662659967048211">Hifadhi kwenye Akaunti ya Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Programu:</translation> <translation id="3650584904733503804">Uhalalishaji umefanikiwa</translation> @@ -1410,6 +1411,7 @@ <translation id="6106989379647458772">Huenda ukurasa wa wavuti ulio kwenye <ph name="PAGE" /> haupatikani kwa muda au umehamishwa kabisa hadi kwenye anwani mpya ya wavuti.</translation> <translation id="6107012941649240045">Kimetolewa Kwa</translation> <translation id="610911394827799129">Huenda Akaunti yako ya Google ina aina nyingine za historia ya kuvinjari katika <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> +<translation id="6113594885686374546">Kitufe cha kuendelea na ziara, bonyeza Enter ili uendelee na ziara yako na uone shughuli muhimu katika historia yako kwenye Chrome</translation> <translation id="6116338172782435947">Kuona maandishi na picha zilizonakiliwa kwenye ubao wa kunakili</translation> <translation id="6120179357481664955">Ungependa kukumbuka kitambulisho chako cha UPI?</translation> <translation id="6123290840358279103">Angalia kadi pepe</translation> @@ -1485,6 +1487,7 @@ <translation id="6423385022588644828">Thibitisha kadi zako kwa haraka zaidi ukitumia Touch ID kuanzia sasa</translation> <translation id="6425092077175753609">Usanifu bora</translation> <translation id="6427730057873428458">Mikunjo miwili sambamba</translation> +<translation id="6428146287756735566">Endelea na ziara yako ili uone shughuli muhimu katika historia yako kwenye Chrome</translation> <translation id="6428450836711225518">Thibitisha nambari yako ya simu</translation> <translation id="6433490469411711332">Badilisha maelezo ya mawasiliano</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> imekataa kuunganisha.</translation> @@ -1536,6 +1539,7 @@ <translation id="6643016212128521049">Futa</translation> <translation id="6645291930348198241">Kufikia data ya tovuti na vidakuzi.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Hamna}=1{Kutoka tovuti 1 (hutaondolewa kwenye Akaunti ya Google)}other{Kutoka tovuti # (hutaondolewa kwenye Akaunti ya Google)}}</translation> +<translation id="6647197322759179819">Endelea na ziara yako</translation> <translation id="6648459603387803038">Msimamizi wako anaweza kubadilisha mipangilio ya kivinjari chako kwa mbali. Huenda shughuli kwenye kifaa hiki zikadhibitiwa nje ya Chrome.</translation> <translation id="6648524591329069940">Fonti ya "Serif"</translation> <translation id="6651270836885078973">Inadhibitiwa na:</translation> @@ -2184,6 +2188,7 @@ <translation id="9114524666733003316">Inathibitisha kadi…</translation> <translation id="9114581008513152754">Kivinjari hiki hakidhibitiwi na kampuni au shirika lingine. Huenda shughuli kwenye kifaa hiki zinadhibitiwa nje ya Chrome. <ph name="BEGIN_LINK" />Pata maelezo zaidi<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Fresh</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, bonyeza kifufe cha Tab, kisha Enter ili uendelee na ziara yako na uone shughuli muhimu katika historia yako kwenye Chrome</translation> <translation id="9119042192571987207">Imepakiwa</translation> <translation id="9128016270925453879">Sera zimepakiwa</translation> <translation id="9128870381267983090">Unganisha kwenye mtandao</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb index ed12a335..b71b3bd 100644 --- a/components/strings/components_strings_te.xtb +++ b/components/strings/components_strings_te.xtb
@@ -523,7 +523,7 @@ <translation id="2880660355386638022">విండో స్థలం</translation> <translation id="2881276955470682203">కార్డ్ను సేవ్ చేయాలా?</translation> <translation id="2882949212241984732">డబుల్-గేట్ ఫోల్డ్</translation> -<translation id="2903493209154104877">చిరునామాలు</translation> +<translation id="2903493209154104877">అడ్రస్లు</translation> <translation id="290376772003165898">పేజీ <ph name="LANGUAGE" />లో లేదా?</translation> <translation id="2909946352844186028">నెట్వర్క్ మార్పు గుర్తించబడింది.</translation> <translation id="2911973620368911614">జాబ్ అకౌంటింగ్ యూజర్ ID</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb index 4136411..a43ed20 100644 --- a/components/strings/components_strings_th.xtb +++ b/components/strings/components_strings_th.xtb
@@ -727,6 +727,7 @@ <translation id="3631244953324577188">ข้อมูลไบโอเมตริก</translation> <translation id="3633738897356909127">ปุ่มอัปเดต Chrome กด Enter เพื่ออัปเดต Chrome จากการตั้งค่า Chrome</translation> <translation id="3634530185120165534">ถาด 5</translation> +<translation id="3637662659967048211">บันทึกลงในบัญชี Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">แอปพลิเคชัน:</translation> <translation id="3650584904733503804">การตรวจสอบสำเร็จ</translation> @@ -1399,6 +1400,7 @@ <translation id="6106989379647458772">หน้าเว็บที่ <ph name="PAGE" /> อาจใช้งานไม่ได้ชั่วคราวหรืออาจมีการย้ายไปยังที่อยู่เว็บใหม่อย่างถาวรแล้ว</translation> <translation id="6107012941649240045">ออกให้แก่</translation> <translation id="610911394827799129">บัญชี Google อาจมีประวัติการท่องเว็บรูปแบบอื่นๆ ที่ <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation> +<translation id="6113594885686374546">ปุ่มดำเนินการสำรวจต่อ กด Enter เพื่อดำเนินการสำรวจต่อและดูกิจกรรมที่เกี่ยวข้องในประวัติการเข้าชมใน Chrome</translation> <translation id="6116338172782435947">ดูข้อความและรูปภาพที่คัดลอกไปที่คลิปบอร์ด</translation> <translation id="6120179357481664955">จำรหัส UPI ไหม</translation> <translation id="6123290840358279103">ดูบัตรเสมือน</translation> @@ -1474,6 +1476,7 @@ <translation id="6423385022588644828">ยืนยันบัตรได้เร็วขึ้นโดยใช้ Touch ID จากนี้ไป</translation> <translation id="6425092077175753609">วัสดุ</translation> <translation id="6427730057873428458">พับทบ</translation> +<translation id="6428146287756735566">ดำเนินการสำรวจต่อเพื่อดูกิจกรรมที่เกี่ยวข้องในประวัติการเข้าชมใน Chrome</translation> <translation id="6428450836711225518">ยืนยันเบอร์โทรศัพท์</translation> <translation id="6433490469411711332">แก้ไขข้อมูลติดต่อ</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> ปฏิเสธการเชื่อมต่อ</translation> @@ -1525,6 +1528,7 @@ <translation id="6643016212128521049">ล้าง</translation> <translation id="6645291930348198241">เข้าถึงคุกกี้และข้อมูลเว็บไซต์</translation> <translation id="6646269444027925224">{COUNT,plural, =0{ไม่มี}=1{จาก 1 เว็บไซต์ (คุณจะไม่ออกจากระบบบัญชี Google)}other{จาก # เว็บไซต์ (คุณจะไม่ออกจากระบบบัญชี Google)}}</translation> +<translation id="6647197322759179819">ดำเนินการสำรวจต่อ</translation> <translation id="6648459603387803038">ผู้ดูแลระบบจะเปลี่ยนการตั้งค่าเบราว์เซอร์จากระยะไกลได้ กิจกรรมในอุปกรณ์นี้อาจมีการจัดการภายนอก Chrome ได้ด้วย</translation> <translation id="6648524591329069940">แบบอักษร Serif</translation> <translation id="6651270836885078973">จัดการโดย:</translation> @@ -2177,6 +2181,7 @@ <translation id="9114524666733003316">กำลังยืนยันบัตร…</translation> <translation id="9114581008513152754">เบราว์เซอร์นี้ไม่ได้จัดการโดยบริษัทหรือองค์กรอื่นๆ กิจกรรมในอุปกรณ์นี้อาจมีการจัดการภายนอก Chrome <ph name="BEGIN_LINK" />ดูข้อมูลเพิ่มเติม<ph name="END_LINK" /></translation> <translation id="9117930699067497412">สดชื่น</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" /> กด Tab ตามด้วย Enter เพื่อดำเนินการสำรวจต่อและดูกิจกรรมที่เกี่ยวข้องในประวัติการเข้าชมใน Chrome</translation> <translation id="9119042192571987207">อัปโหลดแล้ว</translation> <translation id="9128016270925453879">โหลดนโยบายแล้ว</translation> <translation id="9128870381267983090">เชื่อมต่อกับเครือข่าย</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb index 5b454d1f..81a3a4d 100644 --- a/components/strings/components_strings_tr.xtb +++ b/components/strings/components_strings_tr.xtb
@@ -729,6 +729,7 @@ <translation id="3631244953324577188">Biyometri</translation> <translation id="3633738897356909127">Chrome'u güncelle düğmesi, Chrome ayarlarınızdan Chrome'u güncellemek için Enter'a basın</translation> <translation id="3634530185120165534">Tepsi 5</translation> +<translation id="3637662659967048211">Google Hesabı'na kaydedin</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Uygulama:</translation> <translation id="3650584904733503804">Doğrulama başarılı</translation> @@ -1402,6 +1403,7 @@ <translation id="6106989379647458772"><ph name="PAGE" /> adresindeki web sayfası geçici olarak kullanılamıyor veya kalıcı olarak yeni bir web adresine taşınmış olabilir.</translation> <translation id="6107012941649240045">Verilen:</translation> <translation id="610911394827799129">Google Hesabınızın <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> adresinde başka biçimlerde tarama geçmişi olabilir</translation> +<translation id="6113594885686374546">Yolculuğu sürdür düğmesi, yolculuğunuzu devam ettirmek ve Chrome geçmişinizdeki alakalı etkinlikleri görmek için Enter'a basın</translation> <translation id="6116338172782435947">Panoya kopyalanan metin ve resimleri görme</translation> <translation id="6120179357481664955">UPI ID'nizi hatırlıyor musunuz?</translation> <translation id="6123290840358279103">Sanal kartı görüntüle</translation> @@ -1477,6 +1479,7 @@ <translation id="6423385022588644828">Bundan böyle Touch ID'yi kullanarak kartlarınızı daha hızlı onaylayın</translation> <translation id="6425092077175753609">Malzeme</translation> <translation id="6427730057873428458">İki kırımlı katlama</translation> +<translation id="6428146287756735566">Chrome geçmişinizde alakalı etkinlikleri görmek için yolculuğu devam ettirin</translation> <translation id="6428450836711225518">Telefon numaranızı doğrulayın</translation> <translation id="6433490469411711332">İletişim bilgilerini düzenle</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> bağlanmayı reddetti.</translation> @@ -1528,6 +1531,7 @@ <translation id="6643016212128521049">Temizle</translation> <translation id="6645291930348198241">Çerezlere ve site verilerine erişmek.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Yok}=1{1 siteden (Google Hesabınızdan çıkış yapılmaz)}other{# siteden (Google Hesabınızdan çıkış yapılmaz)}}</translation> +<translation id="6647197322759179819">Yolculuğu sürdür</translation> <translation id="6648459603387803038">Yöneticiniz, tarayıcınızın kurulumunu uzaktan değiştirebilir. Bu cihazdaki etkinlikler Chrome dışında da yönetilebilir.</translation> <translation id="6648524591329069940">Serif Yazı Tipi</translation> <translation id="6651270836885078973">Yöneten:</translation> @@ -2180,6 +2184,7 @@ <translation id="9114524666733003316">Kart onaylanıyor...</translation> <translation id="9114581008513152754">Bu tarayıcı bir şirket veya başka bir kuruluş tarafından yönetilmemektedir. Bu cihazdaki etkinlikler Chrome dışında yönetilebilir. <ph name="BEGIN_LINK" />Daha fazla bilgi<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Taze</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, Sekme'ye basın, ardından yolculuğunuzu devam ettirmek ve Chrome geçmişinizdeki alakalı etkinlikleri görmek için Enter'a basın</translation> <translation id="9119042192571987207">Yüklendi</translation> <translation id="9128016270925453879">Politikalar yüklendi</translation> <translation id="9128870381267983090">Ağa bağlan</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb index bf2a016..54d6a5b3 100644 --- a/components/strings/components_strings_uk.xtb +++ b/components/strings/components_strings_uk.xtb
@@ -732,6 +732,7 @@ <translation id="3631244953324577188">Біометрія</translation> <translation id="3633738897356909127">Кнопка "Оновити Chrome"; натисніть Enter, щоб оновити веб-переглядач Chrome у його налаштуваннях</translation> <translation id="3634530185120165534">Лоток 5</translation> +<translation id="3637662659967048211">Зберегти в обліковий запис Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Додаток:</translation> <translation id="3650584904733503804">Перевірку закінчено</translation> @@ -1409,6 +1410,7 @@ <translation id="6106989379647458772">Можливо, веб-сторінка <ph name="PAGE" /> тимчасово недоступна або її назавжди переміщено на нову веб-адресу.</translation> <translation id="6107012941649240045">Кому видано</translation> <translation id="610911394827799129">Історія веб-перегляду може також зберігатися у вашому обліковому записі Google на сторінці <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation> +<translation id="6113594885686374546">Кнопка "Відновити пошук"; натисніть Enter, щоб відновити пошук і переглянути релевантні дії в історії Chrome</translation> <translation id="6116338172782435947">Переглядати тексти й зображення в буфері обміну</translation> <translation id="6120179357481664955">Запам'ятати ідентифікатор UPI?</translation> <translation id="6123290840358279103">Переглянути віртуальну картку</translation> @@ -1484,6 +1486,7 @@ <translation id="6423385022588644828">Відтепер ви можете підтверджувати картки швидше за допомогою Touch ID</translation> <translation id="6425092077175753609">Матеріальний</translation> <translation id="6427730057873428458">Зігнути за типом "ворота"</translation> +<translation id="6428146287756735566">Щоб бачити релевантні дії в історії Chrome, відновіть пошук</translation> <translation id="6428450836711225518">Підтвердьте номер телефону</translation> <translation id="6433490469411711332">Змінити контактні дані</translation> <translation id="6433595998831338502">Хост <ph name="HOST_NAME" /> відхилив запит на з’єднання.</translation> @@ -1535,6 +1538,7 @@ <translation id="6643016212128521049">Очистити</translation> <translation id="6645291930348198241">Отримати доступ до файлів cookie й даних сайту.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Немає}=1{З 1 сайту (ви не вийдете з облікового запису Google)}one{З # сайту (ви не вийдете з облікового запису Google)}few{З # сайтів (ви не вийдете з облікового запису Google)}many{З # сайтів (ви не вийдете з облікового запису Google)}other{З # сайту (ви не вийдете з облікового запису Google)}}</translation> +<translation id="6647197322759179819">Відновити пошук</translation> <translation id="6648459603387803038">Адміністратор може змінити налаштування веб-переглядача віддалено. Діями на цьому пристрої можна керувати за межами Chrome.</translation> <translation id="6648524591329069940">Шрифт Serif</translation> <translation id="6651270836885078973">Керує:</translation> @@ -2187,6 +2191,7 @@ <translation id="9114524666733003316">Підтверджуються дані картки…</translation> <translation id="9114581008513152754">Цим веб-переглядачем не керує адміністратор компанії чи іншої організації. Діями на цьому пристрої можна керувати за межами Chrome. <ph name="BEGIN_LINK" />Докладніше<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Свіжий</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />; натисніть Tab, а потім – Enter, щоб відновити пошук і переглянути релевантні дії в історії Chrome</translation> <translation id="9119042192571987207">Завантажено</translation> <translation id="9128016270925453879">Правила завантажено</translation> <translation id="9128870381267983090">З'єднатися з мережею</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb index d0f2f84..37743e5 100644 --- a/components/strings/components_strings_vi.xtb +++ b/components/strings/components_strings_vi.xtb
@@ -734,6 +734,7 @@ <translation id="3631244953324577188">Sinh trắc học</translation> <translation id="3633738897356909127">Nút Cập nhật Chrome, nhấn phím Enter để cập nhật Chrome trong phần cài đặt của Chrome</translation> <translation id="3634530185120165534">Khay 5</translation> +<translation id="3637662659967048211">Lưu vào Tài khoản Google</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">Ứng dụng:</translation> <translation id="3650584904733503804">Xác thực thành công</translation> @@ -1411,6 +1412,7 @@ <translation id="6106989379647458772">Trang web tại <ph name="PAGE" /> có thể tạm thời không hoạt động hoặc có thể đã được chuyển vĩnh viễn sang địa chỉ web mới.</translation> <translation id="6107012941649240045">Cấp cho</translation> <translation id="610911394827799129">Tài khoản Google của bạn có thể có các dạng lịch sử duyệt web khác tại <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation> +<translation id="6113594885686374546">Nút Tiếp tục hành trình, nhấn phím Enter để tiếp tục hành trình và xem hoạt động liên quan trong nhật ký duyệt web trên Chrome</translation> <translation id="6116338172782435947">Xem văn bản và hình ảnh đã sao chép sang bảng nhớ tạm</translation> <translation id="6120179357481664955">Ghi nhớ mã nhận dạng sản phẩm duy nhất (UPI) của bạn?</translation> <translation id="6123290840358279103">Xem thẻ ảo</translation> @@ -1486,6 +1488,7 @@ <translation id="6423385022588644828">Từ giờ trở đi, bạn có thể xác nhận các thẻ nhanh hơn bằng Touch ID</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">Gấp dạng cửa</translation> +<translation id="6428146287756735566">Tiếp tục hành trình để xem hoạt động liên quan trong nhật ký duyệt web trên Chrome</translation> <translation id="6428450836711225518">Xác minh số điện thoại của bạn</translation> <translation id="6433490469411711332">Chỉnh sửa thông tin liên hệ</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> đã từ chối kết nối.</translation> @@ -1537,6 +1540,7 @@ <translation id="6643016212128521049">Xóa</translation> <translation id="6645291930348198241">Truy cập vào cookie và dữ liệu trang web.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Không có}=1{Của 1 trang web (bạn sẽ không bị đăng xuất khỏi Tài khoản Google của mình)}other{Của # trang web (bạn sẽ không bị đăng xuất khỏi Tài khoản Google của mình)}}</translation> +<translation id="6647197322759179819">Tiếp tục hành trình</translation> <translation id="6648459603387803038">Quản trị viên có thể thay đổi quy trình thiết lập trình duyệt của bạn từ xa. Hoạt động trên thiết bị này cũng có thể được quản lý bên ngoài Chrome.</translation> <translation id="6648524591329069940">Phông chữ Serif</translation> <translation id="6651270836885078973">Người quản lý:</translation> @@ -1676,7 +1680,7 @@ <translation id="7217745192097460130">Dùng Touch ID để xác minh và hoàn tất việc mua hàng?</translation> <translation id="7219179957768738017">Kết nối sử dụng <ph name="SSL_VERSION" />.</translation> <translation id="7220786058474068424">Đang xử lý</translation> -<translation id="7221855153210829124">Hiển thị thông báo</translation> +<translation id="7221855153210829124">Hiện thông báo</translation> <translation id="7229659723041939809">Bạn vừa nhập mật khẩu vào một trang web lừa đảo. Chrome khuyên bạn nên kiểm tra ngay những mật khẩu bạn đã lưu cho <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> và các trang web khác mà bạn sử dụng mật khẩu này.</translation> <translation id="7233592378249864828">In tờ xác nhận</translation> <translation id="7238585580608191973">SHA-256 Fingerprint</translation> @@ -2189,6 +2193,7 @@ <translation id="9114524666733003316">Đang xác nhận thẻ...</translation> <translation id="9114581008513152754">Không có công ty hay tổ chức nào quản lý trình duyệt này. Hoạt động trên thiết bị này có thể được quản lý ở bên ngoài Chrome. <ph name="BEGIN_LINK" />Tìm hiểu thêm<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Tươi mới</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, nhấn phím Tab rồi nhấn Enter để tiếp tục hành trình và xem hoạt động liên quan trong nhật ký duyệt web trên Chrome</translation> <translation id="9119042192571987207">Đã tải lên</translation> <translation id="9128016270925453879">Đã tải chính sách</translation> <translation id="9128870381267983090">Kết nối đến mạng</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb index 7a964c4..dc4d37c 100644 --- a/components/strings/components_strings_zh-CN.xtb +++ b/components/strings/components_strings_zh-CN.xtb
@@ -724,6 +724,7 @@ <translation id="3631244953324577188">生物识别</translation> <translation id="3633738897356909127">“更新 Chrome”按钮,按 Enter 键即可前往 Chrome 设置以更新 Chrome</translation> <translation id="3634530185120165534">纸匣 5</translation> +<translation id="3637662659967048211">保存到 Google 帐号</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">应用:</translation> <translation id="3650584904733503804">验证成功</translation> @@ -1396,6 +1397,7 @@ <translation id="6106989379647458772">位于 <ph name="PAGE" /> 的网页可能暂时无法打开或已永久移至新网址。</translation> <translation id="6107012941649240045">颁发对象</translation> <translation id="610911394827799129">您的 Google 帐号在 <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> 上可能有其他形式的浏览记录</translation> +<translation id="6113594885686374546">“继续您的历程”按钮,按 Enter 键即可继续您的历程,以查看您的 Chrome 历史记录中的相关活动记录</translation> <translation id="6116338172782435947">查看复制到剪贴板的文字和图片</translation> <translation id="6120179357481664955">要记住您的 UPI ID 吗?</translation> <translation id="6123290840358279103">查看虚拟卡</translation> @@ -1470,6 +1472,7 @@ <translation id="6423385022588644828">从现在开始,您只需使用 Touch ID 便能更快速地确认银行卡</translation> <translation id="6425092077175753609">Material</translation> <translation id="6427730057873428458">关门折</translation> +<translation id="6428146287756735566">继续您的历程,以查看您的 Chrome 历史记录中的相关活动记录</translation> <translation id="6428450836711225518">验证您的手机号码</translation> <translation id="6433490469411711332">修改联系信息</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> 拒绝了我们的连接请求。</translation> @@ -1521,6 +1524,7 @@ <translation id="6643016212128521049">清除</translation> <translation id="6645291930348198241">访问 Cookie 和网站数据。</translation> <translation id="6646269444027925224">{COUNT,plural, =0{无}=1{来自 1 个网站(这不会致使您退出自己的 Google 帐号)}other{来自 # 个网站(这不会致使您退出自己的 Google 帐号)}}</translation> +<translation id="6647197322759179819">继续您的历程</translation> <translation id="6648459603387803038">您的管理员可以远程更改您的浏览器设置。此设备上的活动可能也在接受 Chrome 外部的管理。</translation> <translation id="6648524591329069940">Serif 字体</translation> <translation id="6651270836885078973">管理者:</translation> @@ -2173,6 +2177,7 @@ <translation id="9114524666733003316">正在确认信用卡…</translation> <translation id="9114581008513152754">此浏览器并未由某个公司或其他组织管理。此设备上的活动可能在接受 Chrome 外部的管理。<ph name="BEGIN_LINK" />了解详情<ph name="END_LINK" /></translation> <translation id="9117930699067497412">清新</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />,依次按 Tab 键和 Enter 键即可继续您的历程,以查看您的 Chrome 历史记录中的相关活动记录</translation> <translation id="9119042192571987207">已上传</translation> <translation id="9128016270925453879">政策已加载完毕</translation> <translation id="9128870381267983090">连接到网络</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb index 5ec8d40..04c1c05 100644 --- a/components/strings/components_strings_zh-TW.xtb +++ b/components/strings/components_strings_zh-TW.xtb
@@ -728,6 +728,7 @@ <translation id="3631244953324577188">生物特徵辨識</translation> <translation id="3633738897356909127">「更新 Chrome」按鈕,按下 Enter 鍵即可透過 Chrome 設定來更新 Chrome</translation> <translation id="3634530185120165534">紙匣 5</translation> +<translation id="3637662659967048211">儲存至 Google 帳戶</translation> <translation id="3640766068866876100">Index-4x6-Ext</translation> <translation id="3642638418806704195">應用程式:</translation> <translation id="3650584904733503804">驗證成功</translation> @@ -1400,6 +1401,7 @@ <translation id="6106989379647458772">位於 <ph name="PAGE" /> 的網頁可能暫時無法使用,或是已永久移至新的網址。</translation> <translation id="6107012941649240045">核發對象</translation> <translation id="610911394827799129">你的 Google 帳戶仍可能保留了其他類型的瀏覽記錄 (可前往 <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> 查詢)。</translation> +<translation id="6113594885686374546">「繼續歷程」按鈕;按下 Enter 鍵即可繼續歷程,查看 Chrome 歷史記錄中的相關活動</translation> <translation id="6116338172782435947">讀取已複製到剪貼簿的文字和圖片</translation> <translation id="6120179357481664955">還記得你的 UPI ID 嗎?</translation> <translation id="6123290840358279103">查看虛擬卡片</translation> @@ -1475,6 +1477,7 @@ <translation id="6423385022588644828">現在就開始使用 Touch ID,加快卡片驗證速度</translation> <translation id="6425092077175753609">質感</translation> <translation id="6427730057873428458">開門摺</translation> +<translation id="6428146287756735566">繼續歷程即可查看 Chrome 歷史記錄中的相關活動</translation> <translation id="6428450836711225518">驗證你的電話號碼</translation> <translation id="6433490469411711332">編輯聯絡資訊</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> 拒絕連線。</translation> @@ -1526,6 +1529,7 @@ <translation id="6643016212128521049">清除</translation> <translation id="6645291930348198241">存取 Cookie 和網站資料。</translation> <translation id="6646269444027925224">{COUNT,plural, =0{無}=1{1 個網站 (你不會因此登出 Google 帳戶)}other{# 個網站 (你不會因此登出 Google 帳戶)}}</translation> +<translation id="6647197322759179819">繼續歷程</translation> <translation id="6648459603387803038">你的系統管理員可以遠端變更瀏覽器設定。這部裝置上的活動也可以透過 Chrome 以外的服務管理。</translation> <translation id="6648524591329069940">Serif 字型</translation> <translation id="6651270836885078973">管理網域/帳戶:</translation> @@ -2177,6 +2181,7 @@ <translation id="9114524666733003316">正在驗證信用卡...</translation> <translation id="9114581008513152754">這個瀏覽器未受到任何公司或其他機構管理。這部裝置上的活動可透過 Chrome 以外的服務管理。<ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation> <translation id="9117930699067497412">新鮮</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />;按下 Tab 鍵再按下 Enter 鍵即可繼續歷程,查看 Chrome 歷史記錄中的相關活動</translation> <translation id="9119042192571987207">已上傳</translation> <translation id="9128016270925453879">已載入政策</translation> <translation id="9128870381267983090">連線至網路</translation>
diff --git a/components/strings/components_strings_zu.xtb b/components/strings/components_strings_zu.xtb index 4adfb6ff..91fc5a6 100644 --- a/components/strings/components_strings_zu.xtb +++ b/components/strings/components_strings_zu.xtb
@@ -731,6 +731,7 @@ <translation id="3631244953324577188">I-biometrics</translation> <translation id="3633738897356909127">Inkinoho yokubuyekekeza ye-Chrome, cindezela u-Enter ukuze ubuyekeze i-Chrome kusuka kumasethingi akho e-Chrome</translation> <translation id="3634530185120165534">Ithileyi elingu-5</translation> +<translation id="3637662659967048211">Londoloza ku-akhawunti ye-Google</translation> <translation id="3640766068866876100">I-Index-4x6-Ext</translation> <translation id="3642638418806704195">Uhlelo lokusebenza:</translation> <translation id="3650584904733503804">Ukuqinisekiswa kuphumelele</translation> @@ -1408,6 +1409,7 @@ <translation id="6106989379647458772">Ikhasi lewebhu ku-<ph name="PAGE" /> lingahle liphansi okwesikhashana noma lingahle liye unaphakathi ekheli elisha lewebhu.</translation> <translation id="6107012941649240045">Ikhishelwe ku-</translation> <translation id="610911394827799129">I-akhawunti yakho ye-Google ingaba namanye amafomu omlando wokuphequlula ku-<ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> +<translation id="6113594885686374546">Inkinobho yokuqhubeka, cindezela u-Enter ukuqhubeka nohambo lwakho futhi ubone umsebenzi ohambisanayo kumlando wakho we-Chrome</translation> <translation id="6116338172782435947">Bona umbhalo nezithombe ezikopishelwe kubhodi lokunamathisela</translation> <translation id="6120179357481664955">Khumbula i-UPI ID yakho?</translation> <translation id="6123290840358279103">Buka ikhadi elibonakalayo</translation> @@ -1483,6 +1485,7 @@ <translation id="6423385022588644828">Qinisekisa amakhadi akho ngokushesha ngokusebenzisa i-Touch ID kusuka manje</translation> <translation id="6425092077175753609">Okubalulekile</translation> <translation id="6427730057873428458">Ukugoqa kwesango</translation> +<translation id="6428146287756735566">Qhubeka nohambo ukubona umsebenzi ohambisanayo kumlando wakho we-Chrome</translation> <translation id="6428450836711225518">Iqinisekisa inombolo yakho yefoni</translation> <translation id="6433490469411711332">Hlela ulwazi loxhumana naye</translation> <translation id="6433595998831338502">I-<ph name="HOST_NAME" /> inqabe ukuxhumeka.</translation> @@ -1534,6 +1537,7 @@ <translation id="6643016212128521049">Sula</translation> <translation id="6645291930348198241">Finyelela amakhukhi nedatha yesayithi.</translation> <translation id="6646269444027925224">{COUNT,plural, =0{Lutho}=1{Kusukela kusayithi elingu-1 (ngeke ukhishwe ngemvume ku-akhawunti yakho ye-Google)}one{Kusukela kumasayithi angu-# (ngeke ukhishwe ngemvume ku-akhawunti yakho ye-Google)}other{Kusukela kumasayithi angu-# (ngeke ukhishwe ngemvume ku-akhawunti yakho ye-Google)}}</translation> +<translation id="6647197322759179819">Qhubeka nohambo</translation> <translation id="6648459603387803038">Umlawuli wakho angaguqula ukusethwa kwesiphequluli sakho akude. Umsebenzi kule divayisi ungaphinda aphathwe ngaphandle kwe-Chrome.</translation> <translation id="6648524591329069940">Ifonti ye-Serif</translation> <translation id="6651270836885078973">Iphethwe i-:</translation> @@ -2185,6 +2189,7 @@ <translation id="9114524666733003316">Iqinisekisa ikhadi...</translation> <translation id="9114581008513152754">Lesi siphequluli asiphethwe inkampani noma enye inhlangano. Umsebenzi kule divayisi ungaphathwa ngaphandle kwe-Chrome. <ph name="BEGIN_LINK" />Funda kabanzi<ph name="END_LINK" /></translation> <translation id="9117930699067497412">Okusha</translation> +<translation id="9118692854637641831"><ph name="HISTORY_CLUSTERS_SEARCH_FOCUSED_FRIENDLY_MATCH_TEXT" />, cindezela u-Tab, bese ucindezela u-Enter ukuqhubeka nohambo lwakho futhi ubone umsebenzi ohambisanayo kumlando wakho we-Chrome</translation> <translation id="9119042192571987207">Kulayishiwe</translation> <translation id="9128016270925453879">Izinqubomgomo zilayishiwe</translation> <translation id="9128870381267983090">Xhuma kunethiwekhi</translation>
diff --git a/components/sync/driver/data_type_manager_impl.cc b/components/sync/driver/data_type_manager_impl.cc index 44f6bf1..14701fe 100644 --- a/components/sync/driver/data_type_manager_impl.cc +++ b/components/sync/driver/data_type_manager_impl.cc
@@ -544,58 +544,36 @@ const ModelTypeSet inactive_types = GetDataTypesInState(CONFIGURE_INACTIVE, config_state_map); - const ModelTypeSet enabled_types = active_types; ModelTypeSet disabled_types = GetDataTypesInState(DISABLED, config_state_map); disabled_types.PutAll(fatal_types); disabled_types.PutAll(crypto_types); disabled_types.PutAll(unready_types); - DCHECK(Intersection(enabled_types, disabled_types).Empty()); + DCHECK(Intersection(active_types, disabled_types).Empty()); - // The sync engine's enabled types will be updated by adding |enabled_types| - // to the list then removing |disabled_types|. Any types which are not in - // either of those sets will remain untouched. Types which were not in - // |downloaded_types_| previously are not fully downloaded, so we must ask the - // engine to download them. Any newly supported datatypes won't have been in - // |downloaded_types_|, so they will also be downloaded if they are enabled. - ModelTypeSet types_to_download = Difference(enabled_types, downloaded_types_); - downloaded_types_.PutAll(enabled_types); - downloaded_types_.RemoveAll(disabled_types); - + ModelTypeSet types_to_download = Difference(active_types, downloaded_types_); + // Proxy and commit-only types never require downloading. types_to_download.RemoveAll(ProxyTypes()); types_to_download.RemoveAll(CommitOnlyTypes()); - if (!types_to_download.Empty()) - types_to_download.Put(NIGORI); + if (!types_to_download.Empty()) { + types_to_download.PutAll(ControlTypes()); + } + // Already (optimistically) update the |downloaded_types_|, so that the next + // time we get here, it has the correct value. + downloaded_types_.PutAll(active_types); + // Assume that disabled types are not downloaded anymore - if they get + // re-enabled, we'll want to re-download them as well. + downloaded_types_.RemoveAll(disabled_types); force_redownload_types_.RemoveAll(types_to_download); - // TODO(sync): crbug.com/137550. - // It's dangerous to configure types that have progress markers. Types with - // progress markers can trigger a MIGRATION_DONE response. We are not - // prepared to handle a migration during a configure, so we must ensure that - // all our types_to_download actually contain no data before we sync them. - // - // One common way to end up in this situation used to be types which - // downloaded some or all of their data but have not applied it yet. We avoid - // problems with those types by purging the data of any such partially synced - // types soon after we load the Directory. - // - // Another possible scenario is that we have newly supported or newly enabled - // data types being downloaded here but the nigori type, which is always - // included in any GetUpdates request, requires migration. The server has - // code to detect this scenario based on the configure reason, the fact that - // the nigori type is the only requested type which requires migration, and - // that the requested types list includes at least one non-nigori type. It - // will not send a MIGRATION_DONE response in that case. We still need to be - // careful to not send progress markers for non-nigori types, though. If a - // non-nigori type in the request requires migration, a MIGRATION_DONE - // response will be sent. - ModelTypeSet types_to_purge; // If we're using transport-only mode, don't clear any old data. The reason is // that if a user temporarily disables Sync, we don't want to wipe (and later // redownload) all their data, just because Sync restarted in transport-only // mode. + // TODO(crbug.com/1142771): "Purging" logic is only implemented for NIGORI - + // verify whether it is actually needed at all. if (last_requested_context_.sync_mode == SyncMode::kFull) { types_to_purge = Difference(ModelTypeSet::All(), downloaded_types_); types_to_purge.RemoveAll(inactive_types); @@ -612,7 +590,6 @@ ModelTypeConfigurer::ConfigureParams params; params.reason = last_requested_context_.reason; - params.enabled_types = enabled_types; params.to_download = types_to_download; params.to_purge = types_to_purge; params.ready_task = @@ -698,16 +675,6 @@ } } -void DataTypeManagerImpl::Abort(ConfigureStatus status) { - DCHECK_EQ(CONFIGURING, state_); - - StopImpl(STOP_SYNC); - - DCHECK_NE(OK, status); - ConfigureResult result(status, last_requested_types_); - NotifyDone(result); -} - void DataTypeManagerImpl::StopImpl(ShutdownReason reason) { state_ = STOPPING;
diff --git a/components/sync/driver/data_type_manager_impl.h b/components/sync/driver/data_type_manager_impl.h index f54b3f77..c44478d0 100644 --- a/components/sync/driver/data_type_manager_impl.h +++ b/components/sync/driver/data_type_manager_impl.h
@@ -111,9 +111,6 @@ ModelTypeConfigurer::ConfigureParams PrepareConfigureParams( const AssociationTypesInfo& association_types_info); - // Abort configuration and stop all data types due to configuration errors. - void Abort(ConfigureStatus status); - // Divide |types| into sets by their priorities and return the sets from // high priority to low priority. base::queue<ModelTypeSet> PrioritizeTypes(const ModelTypeSet& types); @@ -194,9 +191,6 @@ // A set of types that should be redownloaded even if initial sync is // completed for them. - // TODO(crbug.com/967677): Once all datatypes are in USS, we should redesign - // this class and for example compute |downloaded_types_|'s initial value - // only after all datatypes have loaded for the first time. ModelTypeSet force_redownload_types_; // Whether an attempt to reconfigure was made while we were busy configuring.
diff --git a/components/sync/driver/glue/sync_engine_impl_unittest.cc b/components/sync/driver/glue/sync_engine_impl_unittest.cc index 43420f7..b96b797 100644 --- a/components/sync/driver/glue/sync_engine_impl_unittest.cc +++ b/components/sync/driver/glue/sync_engine_impl_unittest.cc
@@ -260,8 +260,8 @@ ModelTypeSet ConfigureDataTypesWithUnready(ModelTypeSet unready_types) { ModelTypeConfigurer::ConfigureParams params; params.reason = CONFIGURE_REASON_RECONFIGURATION; - params.enabled_types = Difference(enabled_types_, unready_types); - params.to_download = Difference(params.enabled_types, engine_types_); + ModelTypeSet enabled_types = Difference(enabled_types_, unready_types); + params.to_download = Difference(enabled_types, engine_types_); if (!params.to_download.Empty()) { params.to_download.Put(NIGORI); } @@ -269,8 +269,7 @@ params.ready_task = base::BindOnce(&SyncEngineImplTest::DownloadReady, base::Unretained(this)); - ModelTypeSet ready_types = - Difference(params.enabled_types, params.to_download); + ModelTypeSet ready_types = Difference(enabled_types, params.to_download); backend_->ConfigureDataTypes(std::move(params)); PumpSyncThread();
diff --git a/components/sync/engine/model_type_configurer.h b/components/sync/engine/model_type_configurer.h index 8c1c5c7..4d2cef1 100644 --- a/components/sync/engine/model_type_configurer.h +++ b/components/sync/engine/model_type_configurer.h
@@ -28,16 +28,11 @@ ConfigureParams& operator=(ConfigureParams&& other); ConfigureReason reason; - ModelTypeSet enabled_types; ModelTypeSet to_download; ModelTypeSet to_purge; - // Run when configuration is done with the set of all types that failed - // configuration (if its argument isn't empty, an error was encountered). - // TODO(akalin): Use a Delegate class with OnConfigureSuccess, - // OnConfigureFailure, and OnConfigureRetry instead of a pair of callbacks. - // The awkward part is handling when SyncEngine calls ConfigureDataTypes on - // itself to configure Nigori. - base::OnceCallback<void(ModelTypeSet, ModelTypeSet)> ready_task; + + base::OnceCallback<void(ModelTypeSet succeeded, ModelTypeSet failed)> + ready_task; // Whether full sync (or sync the feature) is enabled; bool is_sync_feature_enabled;
diff --git a/components/sync/test/engine/fake_sync_engine.cc b/components/sync/test/engine/fake_sync_engine.cc index 496cc66..956f7bf8 100644 --- a/components/sync/test/engine/fake_sync_engine.cc +++ b/components/sync/test/engine/fake_sync_engine.cc
@@ -94,7 +94,7 @@ void FakeSyncEngine::ConfigureDataTypes(ConfigureParams params) { std::move(params.ready_task) - .Run(/*succeeded_configuration_types=*/params.enabled_types, + .Run(/*succeeded_configuration_types=*/params.to_download, /*failed_configuration_types=*/ModelTypeSet()); }
diff --git a/components/variations/BUILD.gn b/components/variations/BUILD.gn index 3841d01..23163a2 100644 --- a/components/variations/BUILD.gn +++ b/components/variations/BUILD.gn
@@ -35,7 +35,7 @@ deps = [ "//base" ] } -component("variations") { +static_library("variations") { sources = [ "active_field_trials.cc", "active_field_trials.h", @@ -89,9 +89,6 @@ "variations_url_constants.h", ] - # Needed for exporting functions (because the target type is a component). - defines = [ "IS_VARIATIONS_IMPL" ] - if (is_android || is_ios) { sources += [ "variations_request_scheduler_mobile.cc",
diff --git a/components/variations/active_field_trials.h b/components/variations/active_field_trials.h index 0307a98..a1cba30 100644 --- a/components/variations/active_field_trials.h +++ b/components/variations/active_field_trials.h
@@ -9,7 +9,6 @@ #include <string> -#include "base/component_export.h" #include "base/metrics/field_trial.h" #include "base/strings/string_piece.h" @@ -17,19 +16,18 @@ // The Unique ID of a trial and its active group, where the name and group // identifiers are hashes of the trial and group name strings. -struct COMPONENT_EXPORT(VARIATIONS) ActiveGroupId { +struct ActiveGroupId { uint32_t name; uint32_t group; }; // Returns an ActiveGroupId struct for the given trial and group names. -COMPONENT_EXPORT(VARIATIONS) ActiveGroupId MakeActiveGroupId(base::StringPiece trial_name, base::StringPiece group_name); // We need to supply a Compare class for templates since ActiveGroupId is a // user-defined type. -struct COMPONENT_EXPORT(VARIATIONS) ActiveGroupIdCompare { +struct ActiveGroupIdCompare { bool operator() (const ActiveGroupId& lhs, const ActiveGroupId& rhs) const { // The group and name fields are just SHA-1 Hashes, so we just need to treat // them as IDs and do a less-than comparison. We test group first, since @@ -45,7 +43,6 @@ // Field Trials for which a group has not been chosen yet are NOT returned in // this list. Field trial names are suffixed with |suffix| before hashing is // executed. -COMPONENT_EXPORT(VARIATIONS) void GetFieldTrialActiveGroupIds(base::StringPiece suffix, std::vector<ActiveGroupId>* name_group_ids); @@ -55,7 +52,6 @@ // with the names as hex strings. Field Trials for which a group has not been // chosen yet are NOT returned in this list. Field trial names are suffixed with // |suffix| before hashing is executed. -COMPONENT_EXPORT(VARIATIONS) void GetFieldTrialActiveGroupIdsAsStrings(base::StringPiece suffix, std::vector<std::string>* output); @@ -65,14 +61,12 @@ // group. The strings are formatted as "<TrialName>-<GroupName>", // with the names as hex strings. Synthetic Field Trials for which a group // which hasn't been chosen yet are NOT returned in this list. -COMPONENT_EXPORT(VARIATIONS) void GetSyntheticTrialGroupIdsAsString(std::vector<std::string>* output); // Sets the version of the seed that the current set of FieldTrials was // generated from. // TODO(crbug/507665): Move this to field_trials_provider once it moves // into components/variations -COMPONENT_EXPORT(VARIATIONS) void SetSeedVersion(const std::string& seed_version); // Gets the version of the seed that the current set of FieldTrials was @@ -81,14 +75,12 @@ // processes. // TODO(crbug/507665): Move this to field_trials_provider once it moves // into components/variations -COMPONENT_EXPORT(VARIATIONS) const std::string& GetSeedVersion(); // Expose some functions for testing. These functions just wrap functionality // that is implemented above. namespace testing { -COMPONENT_EXPORT(VARIATIONS) void TestGetFieldTrialActiveGroupIds( base::StringPiece suffix, const base::FieldTrial::ActiveGroups& active_groups,
diff --git a/components/variations/android/variations_seed_bridge.h b/components/variations/android/variations_seed_bridge.h index 5b1c2ed..e4ac1854 100644 --- a/components/variations/android/variations_seed_bridge.h +++ b/components/variations/android/variations_seed_bridge.h
@@ -8,35 +8,32 @@ #include <jni.h> #include <string> -#include "base/component_export.h" #include "components/variations/seed_response.h" namespace variations { namespace android { // Return the first run seed data pulled from the Java side of application. -COMPONENT_EXPORT(VARIATIONS) std::unique_ptr<variations::SeedResponse> GetVariationsFirstRunSeed(); // Clears first run seed preferences stored on the Java side of Chrome for // Android. -COMPONENT_EXPORT(VARIATIONS) void ClearJavaFirstRunPrefs(); +void ClearJavaFirstRunPrefs(); // Marks variations seed as stored to avoid repeated fetches of the seed at // the Java side. -COMPONENT_EXPORT(VARIATIONS) void MarkVariationsSeedAsStored(); +void MarkVariationsSeedAsStored(); // Sets test data on the Java side. The data is pulled during the unit tests to // C++ side and is being checked for consistency. // This method is used for unit testing purposes only. -COMPONENT_EXPORT(VARIATIONS) void SetJavaFirstRunPrefsForTesting(const std::string& seed_data, const std::string& seed_signature, const std::string& seed_country, long response_date, bool is_gzip_compressed); -COMPONENT_EXPORT(VARIATIONS) bool HasMarkedPrefsForTesting(); +bool HasMarkedPrefsForTesting(); } // namespace android } // namespace variations
diff --git a/components/variations/child_process_field_trial_syncer.h b/components/variations/child_process_field_trial_syncer.h index 6931731b..ed6b570 100644 --- a/components/variations/child_process_field_trial_syncer.h +++ b/components/variations/child_process_field_trial_syncer.h
@@ -9,7 +9,6 @@ #include <string> #include "base/callback.h" -#include "base/component_export.h" #include "base/macros.h" #include "base/metrics/field_trial.h" #include "base/threading/thread_local.h" @@ -20,8 +19,7 @@ // processes. Specifically, when a field trial is activated in the browser, it // also activates it in the child process and when a field trial is activated in // the child process, it notifies the browser process to activate it. -class COMPONENT_EXPORT(VARIATIONS) ChildProcessFieldTrialSyncer - : public base::FieldTrialList::Observer { +class ChildProcessFieldTrialSyncer : public base::FieldTrialList::Observer { public: using FieldTrialActivatedCallback = base::RepeatingCallback<void(const std::string& trial_name)>;
diff --git a/components/variations/client_filterable_state.h b/components/variations/client_filterable_state.h index 2e1ab5dd..06c3c406 100644 --- a/components/variations/client_filterable_state.h +++ b/components/variations/client_filterable_state.h
@@ -8,7 +8,6 @@ #include <string> #include "base/callback.h" -#include "base/component_export.h" #include "base/macros.h" #include "base/time/time.h" #include "base/version.h" @@ -32,7 +31,7 @@ using IsEnterpriseFunction = base::OnceCallback<bool()>; // A container for all of the client state which is used for filtering studies. -struct COMPONENT_EXPORT(VARIATIONS) ClientFilterableState { +struct ClientFilterableState { static Study::Platform GetCurrentPlatform(); // base::Version used in {min,max}_os_version filtering.
diff --git a/components/variations/entropy_provider.h b/components/variations/entropy_provider.h index 8cd0109..0f765b16 100644 --- a/components/variations/entropy_provider.h +++ b/components/variations/entropy_provider.h
@@ -14,7 +14,6 @@ #include <vector> #include "base/compiler_specific.h" -#include "base/component_export.h" #include "base/macros.h" #include "base/metrics/field_trial.h" @@ -24,8 +23,7 @@ // It works by taking the first 64 bits of the SHA1 hash of the entropy source // concatenated with the trial name, or randomization seed and using that for // the final entropy value. -class COMPONENT_EXPORT(VARIATIONS) SHA1EntropyProvider - : public base::FieldTrial::EntropyProvider { +class SHA1EntropyProvider : public base::FieldTrial::EntropyProvider { public: // Creates a SHA1EntropyProvider with the given |entropy_source|, which // should contain a large amount of entropy - for example, a textual @@ -49,7 +47,7 @@ // the actual low entropy source's hash would fall in the sorted list of all // those hashes, and uses that as the final value. For more info, see: // https://docs.google.com/document/d/1cPF5PruriWNP2Z5gSkq4MBTm0wSZqLyIJkUO9ekibeo -class COMPONENT_EXPORT(VARIATIONS) NormalizedMurmurHashEntropyProvider +class NormalizedMurmurHashEntropyProvider : public base::FieldTrial::EntropyProvider { public: NormalizedMurmurHashEntropyProvider(uint16_t low_entropy_source,
diff --git a/components/variations/hashing.h b/components/variations/hashing.h index 2cb0760..149813f 100644 --- a/components/variations/hashing.h +++ b/components/variations/hashing.h
@@ -7,14 +7,13 @@ #include <stdint.h> -#include "base/component_export.h" #include "base/strings/string_piece.h" namespace variations { // Computes a uint32_t hash of a given string based on its SHA1 hash. Suitable // for uniquely identifying field trial names and group names. -COMPONENT_EXPORT(VARIATIONS) uint32_t HashName(base::StringPiece name); +uint32_t HashName(base::StringPiece name); } // namespace variations
diff --git a/components/variations/metrics.h b/components/variations/metrics.h index 4febb0dd..660a4751 100644 --- a/components/variations/metrics.h +++ b/components/variations/metrics.h
@@ -5,7 +5,6 @@ #ifndef COMPONENTS_VARIATIONS_METRICS_H_ #define COMPONENTS_VARIATIONS_METRICS_H_ -#include "base/component_export.h" #include "build/build_config.h" namespace variations { @@ -90,21 +89,19 @@ #if defined(OS_ANDROID) // Records the result of importing a seed during Android first run. -COMPONENT_EXPORT(VARIATIONS) void RecordFirstRunSeedImportResult(FirstRunSeedImportResult result); #endif // OS_ANDROID // Records the result of attempting to load the latest variations seed on // startup. -COMPONENT_EXPORT(VARIATIONS) void RecordLoadSeedResult(LoadSeedResult state); +void RecordLoadSeedResult(LoadSeedResult state); // Records the result of attempting to load the safe variations seed on startup. -COMPONENT_EXPORT(VARIATIONS) void RecordLoadSafeSeedResult(LoadSeedResult state); // Records the result of attempting to store a variations seed received from the // server. -COMPONENT_EXPORT(VARIATIONS) void RecordStoreSeedResult(StoreSeedResult result); +void RecordStoreSeedResult(StoreSeedResult result); } // namespace variations
diff --git a/components/variations/platform_field_trials.h b/components/variations/platform_field_trials.h index df468a6..335cd0e 100644 --- a/components/variations/platform_field_trials.h +++ b/components/variations/platform_field_trials.h
@@ -5,14 +5,13 @@ #ifndef COMPONENTS_VARIATIONS_PLATFORM_FIELD_TRIALS_H_ #define COMPONENTS_VARIATIONS_PLATFORM_FIELD_TRIALS_H_ -#include "base/component_export.h" #include "base/metrics/field_trial.h" namespace variations { // Infrastructure for setting up platform specific field trials. Chrome and // WebView make use through their corresponding subclasses. -class COMPONENT_EXPORT(VARIATIONS) PlatformFieldTrials { +class PlatformFieldTrials { public: PlatformFieldTrials() = default; virtual ~PlatformFieldTrials() = default;
diff --git a/components/variations/pref_names.h b/components/variations/pref_names.h index a7ef1d3..ca7e4e7 100644 --- a/components/variations/pref_names.h +++ b/components/variations/pref_names.h
@@ -5,40 +5,31 @@ #ifndef COMPONENTS_VARIATIONS_PREF_NAMES_H_ #define COMPONENTS_VARIATIONS_PREF_NAMES_H_ -#include "base/component_export.h" - namespace variations { namespace prefs { // Alphabetical list of preference names specific to the variations component. // Keep alphabetized and document each in the .cc file. -COMPONENT_EXPORT(VARIATIONS) extern const char kDeviceVariationsRestrictionsByPolicy[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kVariationsCompressedSeed[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kVariationsCountry[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kVariationsCrashStreak[]; -COMPONENT_EXPORT(VARIATIONS) +extern const char kVariationsCompressedSeed[]; +extern const char kVariationsCountry[]; +extern const char kVariationsCrashStreak[]; extern const char kVariationsFailedToFetchSeedStreak[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kVariationsLastFetchTime[]; -COMPONENT_EXPORT(VARIATIONS) +extern const char kVariationsLastFetchTime[]; extern const char kVariationsPermanentConsistencyCountry[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kVariationsPermanentOverriddenCountry[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kVariationsRestrictionsByPolicy[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kVariationsRestrictParameter[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kVariationsSafeCompressedSeed[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kVariationsSafeSeedDate[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kVariationsSafeSeedFetchTime[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kVariationsSafeSeedLocale[]; -COMPONENT_EXPORT(VARIATIONS) +extern const char kVariationsRestrictParameter[]; +extern const char kVariationsSafeCompressedSeed[]; +extern const char kVariationsSafeSeedDate[]; +extern const char kVariationsSafeSeedFetchTime[]; +extern const char kVariationsSafeSeedLocale[]; extern const char kVariationsSafeSeedPermanentConsistencyCountry[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kVariationsSafeSeedSessionConsistencyCountry[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kVariationsSafeSeedSignature[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kVariationsSeedDate[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kVariationsSeedSignature[]; +extern const char kVariationsSafeSeedSignature[]; +extern const char kVariationsSeedDate[]; +extern const char kVariationsSeedSignature[]; } // namespace prefs } // namespace variations
diff --git a/components/variations/processed_study.h b/components/variations/processed_study.h index 584e7410..504b5f4 100644 --- a/components/variations/processed_study.h +++ b/components/variations/processed_study.h
@@ -8,7 +8,6 @@ #include <string> #include <vector> -#include "base/component_export.h" #include "base/metrics/field_trial.h" namespace variations { @@ -17,7 +16,7 @@ // Wrapper over Study with extra information computed during pre-processing, // such as whether the study is expired and its total probability. -class COMPONENT_EXPORT(VARIATIONS) ProcessedStudy { +class ProcessedStudy { public: // The default group used when a study doesn't specify one. This is needed // because the field trial api requires a default group name.
diff --git a/components/variations/seed_response.h b/components/variations/seed_response.h index bee917c07..058bb11 100644 --- a/components/variations/seed_response.h +++ b/components/variations/seed_response.h
@@ -7,14 +7,12 @@ #include <string> -#include "base/component_export.h" - namespace variations { // Represents data received when downloading the seed: "data" is the response // body while the other fields come from headers. // This is only used on Android. -struct COMPONENT_EXPORT(VARIATIONS) SeedResponse { +struct SeedResponse { SeedResponse(); ~SeedResponse();
diff --git a/components/variations/study_filtering.h b/components/variations/study_filtering.h index e4ec9de..aba51115 100644 --- a/components/variations/study_filtering.h +++ b/components/variations/study_filtering.h
@@ -9,7 +9,6 @@ #include <vector> #include "base/compiler_specific.h" -#include "base/component_export.h" #include "base/time/time.h" #include "base/version.h" #include "components/variations/client_filterable_state.h" @@ -26,82 +25,66 @@ namespace internal { // Checks whether a study is applicable for the given |channel| per |filter|. -COMPONENT_EXPORT(VARIATIONS) bool CheckStudyChannel(const Study::Filter& filter, Study::Channel channel); // Checks whether a study is applicable for the given |form_factor| per // |filter|. -COMPONENT_EXPORT(VARIATIONS) bool CheckStudyFormFactor(const Study::Filter& filter, Study::FormFactor form_factor); // Checks whether a study is applicable for the given |hardware_class| per // |filter|. -COMPONENT_EXPORT(VARIATIONS) bool CheckStudyHardwareClass(const Study::Filter& filter, const std::string& hardware_class); // Checks whether a study is applicable for the given |locale| per |filter|. -COMPONENT_EXPORT(VARIATIONS) bool CheckStudyLocale(const Study::Filter& filter, const std::string& locale); // Checks whether a study is applicable for the given |platform| per |filter|. -COMPONENT_EXPORT(VARIATIONS) bool CheckStudyPlatform(const Study::Filter& filter, Study::Platform platform); // Checks whether a study is applicable given |is_low_end_device| per |filter|. -COMPONENT_EXPORT(VARIATIONS) bool CheckStudyLowEndDevice(const Study::Filter& filter, bool is_low_end_device); // Checks whether a study is applicable given the ChromeVariations policy value. -COMPONENT_EXPORT(VARIATIONS) bool CheckStudyPolicyRestriction(const Study::Filter& filter, RestrictionPolicy policy_restriction); // Checks whether a study is applicable for the given date/time per |filter|. -COMPONENT_EXPORT(VARIATIONS) bool CheckStudyStartDate(const Study::Filter& filter, const base::Time& date_time); // Checks whether a study is applicable for the given date/time per |filter|. -COMPONENT_EXPORT(VARIATIONS) bool CheckStudyEndDate(const Study::Filter& filter, const base::Time& date_time); // Checks whether a study is applicable for the given version per |filter|. -COMPONENT_EXPORT(VARIATIONS) bool CheckStudyVersion(const Study::Filter& filter, const base::Version& version); // Checks whether a study is applicable for the given OS version per |filter|. -COMPONENT_EXPORT(VARIATIONS) bool CheckStudyOSVersion(const Study::Filter& filter, const base::Version& os_version); // Checks whether a study is applicable for the given |country| per |filter|. -COMPONENT_EXPORT(VARIATIONS) bool CheckStudyCountry(const Study::Filter& filter, const std::string& country); // Checks whether a study is applicable given |is_enterprise| per |filter|. -COMPONENT_EXPORT(VARIATIONS) bool CheckStudyEnterprise(const Study::Filter& filter, const ClientFilterableState& client_state); // Returns the country that should be used for filtering this study, depending // on whether the study has session or permanent consistency. -COMPONENT_EXPORT(VARIATIONS) const std::string& GetClientCountryForStudy( const Study& study, const ClientFilterableState& client_state); // Checks whether |study| is expired using the given date/time. -COMPONENT_EXPORT(VARIATIONS) bool IsStudyExpired(const Study& study, const base::Time& date_time); // Returns whether |study| should be disabled according to the restriction // parameters in the |config|. -COMPONENT_EXPORT(VARIATIONS) bool ShouldAddStudy(const Study& study, const ClientFilterableState& client_state, const VariationsLayers& layers); @@ -112,7 +95,6 @@ // validates and pre-processes them, adding any kept studies to the // |filtered_studies| list. Ensures that the resulting list will not have more // than one study with the same name. -COMPONENT_EXPORT(VARIATIONS) void FilterAndValidateStudies(const VariationsSeed& seed, const ClientFilterableState& client_state, const VariationsLayers& layers,
diff --git a/components/variations/synthetic_trial_registry.h b/components/variations/synthetic_trial_registry.h index cb9e584..3cfe4de 100644 --- a/components/variations/synthetic_trial_registry.h +++ b/components/variations/synthetic_trial_registry.h
@@ -7,7 +7,6 @@ #include <vector> -#include "base/component_export.h" #include "base/feature_list.h" #include "base/metrics/field_trial_params.h" #include "base/observer_list.h" @@ -25,11 +24,10 @@ class SyntheticTrialRegistryTest; namespace internal { -COMPONENT_EXPORT(VARIATIONS) extern const base::Feature kExternalExperimentAllowlist; } // namespace internal -class COMPONENT_EXPORT(VARIATIONS) SyntheticTrialRegistry { +class SyntheticTrialRegistry { public: // Constructor that specifies whether the SyntheticTrialRegistry should use // an allowlist for external experiments. Some embedders such as WebLayer
diff --git a/components/variations/synthetic_trials.h b/components/variations/synthetic_trials.h index 9586882..89cbd1bf 100644 --- a/components/variations/synthetic_trials.h +++ b/components/variations/synthetic_trials.h
@@ -10,7 +10,6 @@ #include <vector> #include "base/compiler_specific.h" -#include "base/component_export.h" #include "base/time/time.h" #include "components/variations/active_field_trials.h" @@ -19,7 +18,7 @@ // A Field Trial and its selected group, which represent a particular // Chrome configuration state. For example, the trial name could map to // a preference name, and the group name could map to a preference value. -struct COMPONENT_EXPORT(VARIATIONS) SyntheticTrialGroup { +struct SyntheticTrialGroup { public: SyntheticTrialGroup(uint32_t trial, uint32_t group); ~SyntheticTrialGroup(); @@ -32,7 +31,7 @@ }; // Interface class to observe changes to synthetic trials in MetricsService. -class COMPONENT_EXPORT(VARIATIONS) SyntheticTrialObserver { +class SyntheticTrialObserver { public: // Called when the list of synthetic field trial groups has changed. virtual void OnSyntheticTrialsChanged(
diff --git a/components/variations/synthetic_trials_active_group_id_provider.h b/components/variations/synthetic_trials_active_group_id_provider.h index 17ea2a4..365cacc 100644 --- a/components/variations/synthetic_trials_active_group_id_provider.h +++ b/components/variations/synthetic_trials_active_group_id_provider.h
@@ -7,7 +7,6 @@ #include <vector> -#include "base/component_export.h" #include "base/macros.h" #include "base/synchronization/lock.h" #include "components/variations/active_field_trials.h" @@ -23,8 +22,7 @@ // This is a helper class which can observe the creation of SyntheticTrialGroups // and later provide a list of active group IDs to be included in the crash // reports. This class is a thread-safe singleton. -class COMPONENT_EXPORT(VARIATIONS) SyntheticTrialsActiveGroupIdProvider - : public SyntheticTrialObserver { +class SyntheticTrialsActiveGroupIdProvider : public SyntheticTrialObserver { public: static SyntheticTrialsActiveGroupIdProvider* GetInstance();
diff --git a/components/variations/variations_associated_data.h b/components/variations/variations_associated_data.h index 21da1ca..214e3189 100644 --- a/components/variations/variations_associated_data.h +++ b/components/variations/variations_associated_data.h
@@ -88,21 +88,18 @@ // the trial and append groups) and needs to have a variations::VariationID // associated with it so Google servers can recognize the FieldTrial. // Thread safe. -COMPONENT_EXPORT(VARIATIONS) void AssociateGoogleVariationID(IDCollectionKey key, const std::string& trial_name, const std::string& group_name, VariationID id); // As above, but overwrites any previously set id. Thread safe. -COMPONENT_EXPORT(VARIATIONS) void AssociateGoogleVariationIDForce(IDCollectionKey key, const std::string& trial_name, const std::string& group_name, VariationID id); // As above, but takes an ActiveGroupId hash pair, rather than the string names. -COMPONENT_EXPORT(VARIATIONS) void AssociateGoogleVariationIDForceHashes(IDCollectionKey key, const ActiveGroupId& active_group, VariationID id); @@ -113,57 +110,47 @@ // for the named group. This API can be nicely combined with // FieldTrial::GetActiveFieldTrialGroups() to enumerate the variation IDs for // all active FieldTrial groups. Thread safe. -COMPONENT_EXPORT(VARIATIONS) VariationID GetGoogleVariationID(IDCollectionKey key, const std::string& trial_name, const std::string& group_name); // Same as GetGoogleVariationID(), but takes in a hashed |active_group| rather // than the string trial and group name. -COMPONENT_EXPORT(VARIATIONS) VariationID GetGoogleVariationIDFromHashes(IDCollectionKey key, const ActiveGroupId& active_group); // Deprecated. Use base::AssociateFieldTrialParams() instead. -COMPONENT_EXPORT(VARIATIONS) bool AssociateVariationParams(const std::string& trial_name, const std::string& group_name, const std::map<std::string, std::string>& params); // Deprecated. Use base::GetFieldTrialParams() instead. -COMPONENT_EXPORT(VARIATIONS) bool GetVariationParams(const std::string& trial_name, std::map<std::string, std::string>* params); // Deprecated. Use base::GetFieldTrialParamsByFeature() instead. -COMPONENT_EXPORT(VARIATIONS) bool GetVariationParamsByFeature(const base::Feature& feature, std::map<std::string, std::string>* params); // Deprecated. Use base::GetFieldTrialParamValue() instead. -COMPONENT_EXPORT(VARIATIONS) std::string GetVariationParamValue(const std::string& trial_name, const std::string& param_name); // Deprecated. Use base::GetFieldTrialParamValueByFeature() instead. -COMPONENT_EXPORT(VARIATIONS) std::string GetVariationParamValueByFeature(const base::Feature& feature, const std::string& param_name); // Deprecated. Use base::GetFieldTrialParamByFeatureAsInt() instead. -COMPONENT_EXPORT(VARIATIONS) int GetVariationParamByFeatureAsInt(const base::Feature& feature, const std::string& param_name, int default_value); // Deprecated. Use base::GetFieldTrialParamByFeatureAsDouble() instead. -COMPONENT_EXPORT(VARIATIONS) double GetVariationParamByFeatureAsDouble(const base::Feature& feature, const std::string& param_name, double default_value); // Deprecated. Use base::GetFieldTrialParamByFeatureAsBool() instead. -COMPONENT_EXPORT(VARIATIONS) bool GetVariationParamByFeatureAsBool(const base::Feature& feature, const std::string& param_name, bool default_value); @@ -173,11 +160,11 @@ // Clears all of the mapped associations. Deprecated, use ScopedFeatureList // instead as it does a lot of work for you automatically. -COMPONENT_EXPORT(VARIATIONS) void ClearAllVariationIDs(); +void ClearAllVariationIDs(); // Clears all of the associated params. Deprecated, use ScopedFeatureList // instead as it does a lot of work for you automatically. -COMPONENT_EXPORT(VARIATIONS) void ClearAllVariationParams(); +void ClearAllVariationParams(); } // namespace testing
diff --git a/components/variations/variations_client.h b/components/variations/variations_client.h index df74d1ba..bdfa3bd1 100644 --- a/components/variations/variations_client.h +++ b/components/variations/variations_client.h
@@ -5,7 +5,6 @@ #ifndef COMPONENTS_VARIATIONS_VARIATIONS_CLIENT_H_ #define COMPONENTS_VARIATIONS_VARIATIONS_CLIENT_H_ -#include "base/component_export.h" #include "components/variations/variations.mojom.h" namespace variations { @@ -13,7 +12,7 @@ // Used by VariationsURLLoaderThrottle to insulate the content layer from // concepts like user sign in which don't belong there. There is an instance per // profile, so there can be multiple clients at a time when in multi user mode. -class COMPONENT_EXPORT(VARIATIONS) VariationsClient { +class VariationsClient { public: virtual ~VariationsClient() = default;
diff --git a/components/variations/variations_crash_keys.h b/components/variations/variations_crash_keys.h index 908c1d3..2bee11c6 100644 --- a/components/variations/variations_crash_keys.h +++ b/components/variations/variations_crash_keys.h
@@ -8,41 +8,38 @@ #include <string> #include <vector> -#include "base/component_export.h" - namespace variations { struct SyntheticTrialGroup; // The key used in crash reports to indicate the number of active experiments. // Should match the number of entries in kExperimentListKey. -COMPONENT_EXPORT(VARIATIONS) extern const char kNumExperimentsKey[]; +extern const char kNumExperimentsKey[]; // The key used in crash reports to list all the active experiments. Each // experiment is listed as two hex numbers: trial ID and group ID, separated by // a dash. The experiments are separated by a comma. -COMPONENT_EXPORT(VARIATIONS) extern const char kExperimentListKey[]; +extern const char kExperimentListKey[]; // Initializes crash keys that report the current set of active FieldTrial // groups (aka variations) for crash reports. After initialization, an observer // will be registered on FieldTrialList that will keep the crash keys up-to-date // with newly-activated trials. Synthetic trials must be manually updated using // the API below. -COMPONENT_EXPORT(VARIATIONS) void InitCrashKeys(); +void InitCrashKeys(); // Updates variations crash keys by replacing the list of synthetic trials with // the specified list. Does not affect non-synthetic trials. -COMPONENT_EXPORT(VARIATIONS) void UpdateCrashKeysWithSyntheticTrials( const std::vector<SyntheticTrialGroup>& synthetic_trials); // Clears the internal instance, for testing. -COMPONENT_EXPORT(VARIATIONS) void ClearCrashKeysInstanceForTesting(); +void ClearCrashKeysInstanceForTesting(); // The list of experiments, in the format needed by the crash keys. The // |num_experiments| goes into the |kNumExperimentsKey| crash key, and the // |experiment_list| goes into the |kExperimentListKey| crash key. -struct COMPONENT_EXPORT(VARIATIONS) ExperimentListInfo { +struct ExperimentListInfo { int num_experiments = 0; std::string experiment_list; }; @@ -51,7 +48,7 @@ // Specifically, returns the string used for representing the active experiment // groups + the synthetic trials in |experiment_list| and the number of elements // in that list in |num_experiments|. Must be called on the UI thread. -COMPONENT_EXPORT(VARIATIONS) ExperimentListInfo GetExperimentListInfo(); +ExperimentListInfo GetExperimentListInfo(); } // namespace variations
diff --git a/components/variations/variations_crash_keys_chromeos.h b/components/variations/variations_crash_keys_chromeos.h index eebd2ab..3453776 100644 --- a/components/variations/variations_crash_keys_chromeos.h +++ b/components/variations/variations_crash_keys_chromeos.h
@@ -5,7 +5,6 @@ #ifndef COMPONENTS_VARIATIONS_VARIATIONS_CRASH_KEYS_CHROMEOS_H_ #define COMPONENTS_VARIATIONS_VARIATIONS_CRASH_KEYS_CHROMEOS_H_ -#include "base/component_export.h" #include "base/sequenced_task_runner.h" #include "components/variations/variations_crash_keys.h" @@ -14,7 +13,6 @@ // On a separate thread, report the provided crash keys to Chrome OS using a // .variant-list.txt in the user's home directory, or /home/chronos if no user // is logged in. -COMPONENT_EXPORT(VARIATIONS) void ReportVariationsToChromeOs(scoped_refptr<base::SequencedTaskRunner> runner, ExperimentListInfo info);
diff --git a/components/variations/variations_ids_provider.h b/components/variations/variations_ids_provider.h index 3242b90..00ed598 100644 --- a/components/variations/variations_ids_provider.h +++ b/components/variations/variations_ids_provider.h
@@ -11,7 +11,6 @@ #include <utility> #include <vector> -#include "base/component_export.h" #include "base/gtest_prod_util.h" #include "base/macros.h" #include "base/metrics/field_trial.h" @@ -33,7 +32,7 @@ // (i) VariationsIDs associated with external experiments, which can be sent // only for signed-in users and (ii) VariationsIDs that can be sent in first- // and third-party contexts. -struct COMPONENT_EXPORT(VARIATIONS) VariationsHeaderKey { +struct VariationsHeaderKey { bool is_signed_in; Study_GoogleWebVisibility web_visibility; @@ -44,11 +43,10 @@ // A helper class for maintaining client experiments and metrics state // transmitted in custom HTTP request headers. // This class is a thread-safe singleton. -class COMPONENT_EXPORT(VARIATIONS) VariationsIdsProvider - : public base::FieldTrialList::Observer, - public SyntheticTrialObserver { +class VariationsIdsProvider : public base::FieldTrialList::Observer, + public SyntheticTrialObserver { public: - class COMPONENT_EXPORT(VARIATIONS) Observer { + class Observer { public: // Called when variation ids headers are updated. virtual void VariationIdsHeaderUpdated() = 0;
diff --git a/components/variations/variations_layers.h b/components/variations/variations_layers.h index c5c17f6..d24484f 100644 --- a/components/variations/variations_layers.h +++ b/components/variations/variations_layers.h
@@ -7,7 +7,6 @@ #include <map> -#include "base/component_export.h" #include "base/metrics/field_trial.h" #include "components/variations/proto/variations_seed.pb.h" #include "third_party/abseil-cpp/absl/types/optional.h" @@ -16,7 +15,7 @@ // Parses out the Variations Layers data from the provided seed and // chooses which member within each layer should be the active one. -class COMPONENT_EXPORT(VARIATIONS) VariationsLayers { +class VariationsLayers { public: VariationsLayers( const VariationsSeed& seed,
diff --git a/components/variations/variations_murmur_hash.h b/components/variations/variations_murmur_hash.h index 62df4c3..d4a0291 100644 --- a/components/variations/variations_murmur_hash.h +++ b/components/variations/variations_murmur_hash.h
@@ -9,7 +9,6 @@ #include <vector> #include "base/compiler_specific.h" -#include "base/component_export.h" #include "base/strings/string_piece.h" namespace variations { @@ -17,7 +16,7 @@ // Hash utilities for NormalizedMurmurHashEntropyProvider. For more info, see: // https://docs.google.com/document/d/1cPF5PruriWNP2Z5gSkq4MBTm0wSZqLyIJkUO9ekibeo -class COMPONENT_EXPORT(VARIATIONS) VariationsMurmurHash { +class VariationsMurmurHash { public: // Prepares data to be hashed by VariationsMurmurHash: align and zero-pad to a // multiple of 4 bytes, and produce the same uint32_t values regardless of
diff --git a/components/variations/variations_request_scheduler.h b/components/variations/variations_request_scheduler.h index d2b114f..72ca48da 100644 --- a/components/variations/variations_request_scheduler.h +++ b/components/variations/variations_request_scheduler.h
@@ -6,7 +6,6 @@ #define COMPONENTS_VARIATIONS_VARIATIONS_REQUEST_SCHEDULER_H_ #include "base/bind.h" -#include "base/component_export.h" #include "base/gtest_prod_util.h" #include "base/macros.h" #include "base/time/time.h" @@ -17,7 +16,7 @@ namespace variations { // A helper class that makes VariationsService requests at the correct times. -class COMPONENT_EXPORT(VARIATIONS) VariationsRequestScheduler { +class VariationsRequestScheduler { public: virtual ~VariationsRequestScheduler();
diff --git a/components/variations/variations_request_scheduler_mobile.h b/components/variations/variations_request_scheduler_mobile.h index fe8193e5..ee1e117d 100644 --- a/components/variations/variations_request_scheduler_mobile.h +++ b/components/variations/variations_request_scheduler_mobile.h
@@ -6,7 +6,6 @@ #define COMPONENTS_VARIATIONS_VARIATIONS_REQUEST_SCHEDULER_MOBILE_H_ #include "base/bind.h" -#include "base/component_export.h" #include "base/gtest_prod_util.h" #include "base/macros.h" #include "base/timer/timer.h" @@ -18,13 +17,12 @@ // A specialized VariationsRequestScheduler that manages request cycles for // VariationsService on mobile platforms. -class COMPONENT_EXPORT(VARIATIONS) VariationsRequestSchedulerMobile - : public VariationsRequestScheduler { +class VariationsRequestSchedulerMobile : public VariationsRequestScheduler { public: // |task} is the closure to call when the scheduler deems ready. |local_state| // is the PrefService that contains the time of the last fetch. - VariationsRequestSchedulerMobile(const base::RepeatingClosure& task, - PrefService* local_state); + explicit VariationsRequestSchedulerMobile(const base::RepeatingClosure& task, + PrefService* local_state); ~VariationsRequestSchedulerMobile() override; // Base class overrides.
diff --git a/components/variations/variations_seed_processor.h b/components/variations/variations_seed_processor.h index 763ac56..553556b 100644 --- a/components/variations/variations_seed_processor.h +++ b/components/variations/variations_seed_processor.h
@@ -12,7 +12,6 @@ #include "base/callback_forward.h" #include "base/compiler_specific.h" -#include "base/component_export.h" #include "base/gtest_prod_util.h" #include "base/macros.h" #include "base/metrics/field_trial.h" @@ -30,7 +29,7 @@ struct ClientFilterableState; // Helper class to instantiate field trials from a variations seed. -class COMPONENT_EXPORT(VARIATIONS) VariationsSeedProcessor { +class VariationsSeedProcessor { public: using UIStringOverrideCallback = base::RepeatingCallback<void(uint32_t, const std::u16string&)>;
diff --git a/components/variations/variations_seed_simulator.h b/components/variations/variations_seed_simulator.h index 3cb9e1f..72986af 100644 --- a/components/variations/variations_seed_simulator.h +++ b/components/variations/variations_seed_simulator.h
@@ -9,7 +9,6 @@ #include <vector> #include "base/compiler_specific.h" -#include "base/component_export.h" #include "base/macros.h" #include "base/metrics/field_trial.h" #include "base/version.h" @@ -24,15 +23,12 @@ // VariationsSeedSimulator simulates the result of creating a set of studies // and detecting which studies would result in group changes. -class COMPONENT_EXPORT(VARIATIONS) VariationsSeedSimulator { +class VariationsSeedSimulator { public: // The result of variations seed simulation, counting the number of experiment // group changes of each type that are expected to occur on a restart with the // seed. - struct COMPONENT_EXPORT(VARIATIONS) Result { - Result(); - ~Result(); - + struct Result { // The number of expected group changes that do not fall into any special // category. This is a lower bound due to session randomized studies. int normal_group_change_count; @@ -44,6 +40,9 @@ // The number of expected group changes that fall in the category of killed // experiments that should trigger the "critical" restart mechanism. int kill_critical_group_change_count; + + Result(); + ~Result(); }; // Creates the simulator with the given default and low entropy providers. The
diff --git a/components/variations/variations_seed_store.h b/components/variations/variations_seed_store.h index 62b55da06..8f905e1 100644 --- a/components/variations/variations_seed_store.h +++ b/components/variations/variations_seed_store.h
@@ -10,7 +10,6 @@ #include "base/callback.h" #include "base/compiler_specific.h" -#include "base/component_export.h" #include "base/gtest_prod_util.h" #include "base/macros.h" #include "base/time/time.h" @@ -28,7 +27,7 @@ // VariationsSeedStore is a helper class for reading and writing the variations // seed from Local State. -class COMPONENT_EXPORT(VARIATIONS) VariationsSeedStore { +class VariationsSeedStore { public: // Standard constructor. Enables signature verification. explicit VariationsSeedStore(PrefService* local_state);
diff --git a/components/variations/variations_switches.h b/components/variations/variations_switches.h index 32bb2e8..c4559c2d 100644 --- a/components/variations/variations_switches.h +++ b/components/variations/variations_switches.h
@@ -5,31 +5,20 @@ #ifndef COMPONENTS_VARIATIONS_VARIATIONS_SWITCHES_H_ #define COMPONENTS_VARIATIONS_VARIATIONS_SWITCHES_H_ -#include "base/component_export.h" - namespace variations { namespace switches { // Alphabetical list of switches specific to the variations component. Document // each in the .cc file. -COMPONENT_EXPORT(VARIATIONS) extern const char kDisableFieldTrialTestingConfig[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kEnableBenchmarking[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kFakeVariationsChannel[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kForceFieldTrialParams[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kForceVariationIds[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kForceDisableVariationIds[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kVariationsOverrideCountry[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kVariationsServerURL[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kVariationsInsecureServerURL[]; } // namespace switches
diff --git a/components/variations/variations_url_constants.h b/components/variations/variations_url_constants.h index f6c2852..336effdc 100644 --- a/components/variations/variations_url_constants.h +++ b/components/variations/variations_url_constants.h
@@ -5,13 +5,11 @@ #ifndef COMPONENTS_VARIATIONS_VARIATIONS_URL_CONSTANTS_H_ #define COMPONENTS_VARIATIONS_VARIATIONS_URL_CONSTANTS_H_ -#include "base/component_export.h" - namespace variations { -COMPONENT_EXPORT(VARIATIONS) extern const char kDefaultServerUrl[]; +extern const char kDefaultServerUrl[]; -COMPONENT_EXPORT(VARIATIONS) extern const char kDefaultInsecureServerUrl[]; +extern const char kDefaultInsecureServerUrl[]; } // namespace variations
diff --git a/components/viz/service/display_embedder/skia_output_device_buffer_queue_unittest.cc b/components/viz/service/display_embedder/skia_output_device_buffer_queue_unittest.cc index dfd9494..10a27f7 100644 --- a/components/viz/service/display_embedder/skia_output_device_buffer_queue_unittest.cc +++ b/components/viz/service/display_embedder/skia_output_device_buffer_queue_unittest.cc
@@ -179,9 +179,13 @@ NOTREACHED(); return nullptr; } - bool CanImportGpuMemoryBuffer( - gfx::GpuMemoryBufferType memory_buffer_type) override { - return false; + bool IsSupported(uint32_t usage, + ResourceFormat format, + bool thread_safe, + gfx::GpuMemoryBufferType gmb_type, + gpu::GrContextType gr_context_type_, + bool* allow_legacy_mailbox) override { + return true; } };
diff --git a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc index 0eb1e4f..1ddd4f2 100644 --- a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc +++ b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc
@@ -1374,6 +1374,23 @@ return true; } +#if defined(OS_ANDROID) + if (vulkan_context_provider_->GetGrSecondaryCBDrawContext()) { + if (base::FeatureList::IsEnabled( + features::kWebViewVulkanIntermediateBuffer)) { + output_device_ = + std::make_unique<SkiaOutputDeviceVulkanSecondaryCBOffscreen>( + context_state_, shared_gpu_deps_->memory_tracker(), + GetDidSwapBuffersCompleteCallback()); + } else { + output_device_ = std::make_unique<SkiaOutputDeviceVulkanSecondaryCB>( + vulkan_context_provider_, shared_gpu_deps_->memory_tracker(), + GetDidSwapBuffersCompleteCallback()); + } + return true; + } +#endif + #if defined(USE_OZONE) bool needs_background_image = features::IsUsingOzonePlatform() && ui::OzonePlatform::GetInstance() @@ -1417,23 +1434,6 @@ #endif // !defined(OS_WIN) (void)needs_background_image; -#if defined(OS_ANDROID) - if (vulkan_context_provider_->GetGrSecondaryCBDrawContext()) { - if (base::FeatureList::IsEnabled( - features::kWebViewVulkanIntermediateBuffer)) { - output_device_ = - std::make_unique<SkiaOutputDeviceVulkanSecondaryCBOffscreen>( - context_state_, shared_gpu_deps_->memory_tracker(), - GetDidSwapBuffersCompleteCallback()); - } else { - output_device_ = std::make_unique<SkiaOutputDeviceVulkanSecondaryCB>( - vulkan_context_provider_, shared_gpu_deps_->memory_tracker(), - GetDidSwapBuffersCompleteCallback()); - } - return true; - } -#endif - std::unique_ptr<SkiaOutputDeviceVulkan> output_device; if (!gpu_preferences_.disable_vulkan_surface) { output_device = SkiaOutputDeviceVulkan::Create(
diff --git a/content/browser/android/dialog_overlay_impl.cc b/content/browser/android/dialog_overlay_impl.cc index 54490eb..d221038 100644 --- a/content/browser/android/dialog_overlay_impl.cc +++ b/content/browser/android/dialog_overlay_impl.cc
@@ -10,7 +10,9 @@ #include "content/public/android/content_jni_headers/DialogOverlayImpl_jni.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" +#include "content/public/browser/content_browser_client.h" #include "content/public/browser/web_contents_delegate.h" +#include "content/public/common/content_client.h" #include "gpu/ipc/common/gpu_surface_tracker.h" #include "media/mojo/mojom/android_overlay.mojom.h" #include "mojo/public/cpp/bindings/sync_call_restrictions.h" @@ -64,18 +66,25 @@ if (power_efficient && !web_contents_impl->IsFullscreen()) return 0; - return reinterpret_cast<jlong>( - new DialogOverlayImpl(obj, rfhi, web_contents_impl, power_efficient)); + bool observe_container_view = + GetContentClient() + ->browser() + ->ShouldObserveContainerViewLocationForDialogOverlays(); + + return reinterpret_cast<jlong>(new DialogOverlayImpl( + obj, rfhi, web_contents_impl, power_efficient, observe_container_view)); } DialogOverlayImpl::DialogOverlayImpl(const JavaParamRef<jobject>& obj, RenderFrameHostImpl* rfhi, WebContents* web_contents, - bool power_efficient) + bool power_efficient, + bool observe_container_view) : WebContentsObserver(web_contents), rfhi_(rfhi), power_efficient_(power_efficient), - observed_window_android_(false) { + observed_window_android_(false), + observe_container_view_(observe_container_view) { DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK(rfhi_); @@ -116,6 +125,10 @@ ScopedJavaLocalRef<jobject> token = window->GetWindowToken(); Java_DialogOverlayImpl_onWindowToken(env, obj, token); } + + // Pass up a reference to the container view so we can observe its location. + // The observer will notify us if there is none yet. + StartObservingContainerView(); } DialogOverlayImpl::~DialogOverlayImpl() { @@ -157,6 +170,9 @@ if (!rfhi_) return; + // No need to track the container view location anymore. + StopObservingContainerView(); + // We clear overlay mode here rather than in Destroy(), because we may have // been called via a WebContentsDestroyed() event, and this might be the last // opportunity we have to access web_contents(). @@ -230,6 +246,8 @@ ScopedJavaLocalRef<jobject> obj = obj_.get(env); if (!obj.is_null()) Java_DialogOverlayImpl_onWindowToken(env, obj, token); + + StartObservingContainerView(); } void DialogOverlayImpl::OnDetachedFromWindow() { @@ -248,6 +266,26 @@ } } +void DialogOverlayImpl::StartObservingContainerView() { + ObserveContainerViewIfNeeded( + web_contents()->GetNativeView()->GetContainerView()); +} + +void DialogOverlayImpl::StopObservingContainerView() { + ObserveContainerViewIfNeeded(/*container_view=*/nullptr); +} + +void DialogOverlayImpl::ObserveContainerViewIfNeeded( + const ScopedJavaLocalRef<jobject>& container_view) { + if (!observe_container_view_) + return; + + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobject> obj = obj_.get(env); + if (!obj.is_null()) + Java_DialogOverlayImpl_observeContainerView(env, obj, container_view); +} + // Helper class that has permission to talk to SyncCallRestrictions. Rather // than friend the function directly, which has an odd signature, friend a class // that knows how to do the work.
diff --git a/content/browser/android/dialog_overlay_impl.h b/content/browser/android/dialog_overlay_impl.h index 1912e5e..fd97cbf3 100644 --- a/content/browser/android/dialog_overlay_impl.h +++ b/content/browser/android/dialog_overlay_impl.h
@@ -30,7 +30,8 @@ DialogOverlayImpl(const base::android::JavaParamRef<jobject>& obj, RenderFrameHostImpl* rfhi, WebContents* web_contents, - bool power_efficient); + bool power_efficient, + bool observe_container_view); ~DialogOverlayImpl() override; // Called when the java side is ready for token / dismissed callbacks. May @@ -77,6 +78,11 @@ void Stop(); void RegisterWindowObserverIfNeeded(ui::WindowAndroid* window); + void StartObservingContainerView(); + void StopObservingContainerView(); + void ObserveContainerViewIfNeeded( + const base::android::ScopedJavaLocalRef<jobject>& container_view); + // Java object that owns us. JavaObjectWeakGlobalRef obj_; @@ -84,10 +90,13 @@ RenderFrameHostImpl* rfhi_; // Do we care about power efficiency? - bool power_efficient_; + const bool power_efficient_; // Whether we added ourselves as an observer through WindowAndroid. bool observed_window_android_; + + // Whether we should observe the container view for location changes. + const bool observe_container_view_; }; } // namespace content
diff --git a/content/browser/browser_interface_binders.cc b/content/browser/browser_interface_binders.cc index 9534099..24cc886 100644 --- a/content/browser/browser_interface_binders.cc +++ b/content/browser/browser_interface_binders.cc
@@ -728,8 +728,6 @@ &RenderFrameHostImpl::CreatePaymentManager, base::Unretained(host))); if (base::FeatureList::IsEnabled( - blink::features::kHandwritingRecognitionWebPlatformApi) && - base::FeatureList::IsEnabled( blink::features::kHandwritingRecognitionWebPlatformApiFinch)) { map->Add<handwriting::mojom::HandwritingRecognitionService>( base::BindRepeating(&CreateHandwritingRecognitionService));
diff --git a/content/browser/conversions/conversion_storage_sql.cc b/content/browser/conversions/conversion_storage_sql.cc index 1b07875..618c73d 100644 --- a/content/browser/conversions/conversion_storage_sql.cc +++ b/content/browser/conversions/conversion_storage_sql.cc
@@ -57,6 +57,8 @@ // // Version 5 - 2021/04/30 - https://crrev.com/c/2860056 // +// Version 5 drops the conversions.attribution_credit column. +// // Version 6 - 2021/05/06 - https://crrev.com/c/2878235 // // Version 6 adds the impression.priority column.
diff --git a/content/browser/file_system_access/file_system_access_clipboard_browsertest.cc b/content/browser/file_system_access/file_system_access_clipboard_browsertest.cc index b65b5b5e..d560beb0 100644 --- a/content/browser/file_system_access/file_system_access_clipboard_browsertest.cc +++ b/content/browser/file_system_access/file_system_access_clipboard_browsertest.cc
@@ -6,7 +6,6 @@ #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" -#include "base/test/scoped_feature_list.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "content/browser/web_contents/web_contents_impl.h" @@ -20,7 +19,6 @@ #include "ui/base/clipboard/file_info.h" #include "ui/base/clipboard/scoped_clipboard_writer.h" #include "ui/base/clipboard/test/test_clipboard.h" -#include "ui/base/ui_base_features.h" namespace content { @@ -32,7 +30,6 @@ void SetUp() override { ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); ASSERT_TRUE(embedded_test_server()->Start()); - features_.InitWithFeatures({features::kClipboardFilenames}, {}); ui::TestClipboard::CreateForCurrentThread(); ContentBrowserTest::SetUp(); } @@ -61,7 +58,6 @@ protected: base::ScopedTempDir temp_dir_; - base::test::ScopedFeatureList features_; }; IN_PROC_BROWSER_TEST_F(FileSystemAccessClipboardBrowserTest, File) { @@ -172,58 +168,4 @@ EXPECT_EQ(file_inside_dir.BaseName().AsUTF8Unsafe(), EvalJs(shell(), "p")); } -class FileSystemAccessClipboardDisabledBrowserTest : public ContentBrowserTest { - public: - void SetUp() override { - ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); - ASSERT_TRUE(embedded_test_server()->Start()); - features_.InitWithFeatures({}, {features::kClipboardFilenames}); - ContentBrowserTest::SetUp(); - } - - void TearDown() override { - ContentBrowserTest::TearDown(); - ASSERT_TRUE(temp_dir_.Delete()); - } - - protected: - base::ScopedTempDir temp_dir_; - base::test::ScopedFeatureList features_; -}; - -IN_PROC_BROWSER_TEST_F(FileSystemAccessClipboardDisabledBrowserTest, Disabled) { - ASSERT_TRUE( - NavigateToURL(shell(), embedded_test_server()->GetURL("/title1.html"))); - - // Create a promise that will reject if clipboard contains any files. - ASSERT_TRUE( - ExecJs(shell(), - "var p = new Promise((resolve, reject) => {" - " window.document.onpaste = async (event) => {" - " if (event.clipboardData.files.length !== 0) {" - " reject('There were ' + event.clipboardData.files.length +" - " ' clipboard files. Expected 0.');" - " }" - " resolve(true);" - " };" - "});")); - - // Create a file and place on the clipboard. - base::FilePath test_file_path; - { - base::ScopedAllowBlockingForTesting allow_blocking; - EXPECT_TRUE( - base::CreateTemporaryFileInDir(temp_dir_.GetPath(), &test_file_path)); - } - { - ui::ScopedClipboardWriter writer(ui::ClipboardBuffer::kCopyPaste); - writer.WriteFilenames(ui::FileInfosToURIList( - {ui::FileInfo(test_file_path, base::FilePath())})); - } - - // Send paste event and wait for JS promise to resolve. - shell()->web_contents()->Paste(); - EXPECT_EQ(true, EvalJs(shell(), "p")); -} - } // namespace content
diff --git a/content/browser/prerender/prerender_browsertest.cc b/content/browser/prerender/prerender_browsertest.cc index 82ec72b2..4aea0963 100644 --- a/content/browser/prerender/prerender_browsertest.cc +++ b/content/browser/prerender/prerender_browsertest.cc
@@ -1767,7 +1767,6 @@ EvalJsOptions::EXECUTE_SCRIPT_NO_USER_GESTURE)); } -#if !defined(OS_ANDROID) || BUILDFLAG(ENABLE_PLUGINS) void LoadAndWaitForPrerenderDestroyed(WebContents* const web_contents, const GURL prerendering_url, test::PrerenderTestHelper* helper) { @@ -1780,7 +1779,6 @@ EXPECT_EQ(helper->GetHostForUrl(prerendering_url), RenderFrameHost::kNoFrameTreeNodeId); } -#endif // !defined(OS_ANDROID) || BUILDFLAG(ENABLE_PLUGINS) #if BUILDFLAG(ENABLE_PLUGINS) // Tests that we will cancel the prerendering if the prerendering page attempts @@ -1861,6 +1859,55 @@ } #endif // defined(OS_ANDROID) +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DownloadInMainFrame) { + base::HistogramTester histogram_tester; + const GURL kInitialUrl = GetUrl("/empty.html"); + + // Navigate to an initial page. + ASSERT_TRUE(NavigateToURL(shell(), kInitialUrl)); + + // TODO(crbug.com/1215073): Make a WPT for the content-disposition WPT test. + const GURL download_url = + GetUrl("/set-header?Content-Disposition: attachment"); + + LoadAndWaitForPrerenderDestroyed(web_contents(), download_url, + prerender_helper()); + + histogram_tester.ExpectUniqueSample( + "Prerender.Experimental.PrerenderHostFinalStatus", + PrerenderHost::FinalStatus::kDownload, 1); +} + +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DownloadInSubframe) { + base::HistogramTester histogram_tester; + const GURL kInitialUrl = GetUrl("/empty.html"); + const GURL kPrerenderingUrl = GetUrl("/empty.html?prerendering"); + + // Navigate to an initial page. + ASSERT_TRUE(NavigateToURL(shell(), kInitialUrl)); + + // Make a prerendered page. + const int host_id = AddPrerender(kPrerenderingUrl); + ASSERT_NE(host_id, RenderFrameHost::kNoFrameTreeNodeId); + auto* prerender_host = GetPrerenderedMainFrameHost(host_id); + EXPECT_TRUE(AddTestUtilJS(prerender_host)); + + // TODO(crbug.com/1215073): Make a WPT for the content-disposition WPT test. + const GURL download_url = + GetUrl("/set-header?Content-Disposition: attachment"); + ExecuteScriptAsync(prerender_host, + JsReplace("add_iframe_async($1)", download_url)); + + test::PrerenderHostObserver host_observer(*web_contents(), host_id); + host_observer.WaitForDestroyed(); + EXPECT_EQ(GetHostForUrl(kPrerenderingUrl), + RenderFrameHost::kNoFrameTreeNodeId); + + histogram_tester.ExpectUniqueSample( + "Prerender.Experimental.PrerenderHostFinalStatus", + PrerenderHost::FinalStatus::kDownload, 1); +} + // End: Tests for feature restrictions in prerendered pages ==================== // Tests that prerendering doesn't run for low-end devices.
diff --git a/content/browser/prerender/prerender_host.h b/content/browser/prerender/prerender_host.h index d394b4e6..7da69d4 100644 --- a/content/browser/prerender/prerender_host.h +++ b/content/browser/prerender/prerender_host.h
@@ -65,7 +65,8 @@ kPlugin = 12, kRendererProcessCrashed = 13, kRendererProcessKilled = 14, - kMaxValue = kRendererProcessKilled + kDownload = 15, + kMaxValue = kDownload }; PrerenderHost(blink::mojom::PrerenderAttributesPtr attributes,
diff --git a/content/browser/prerender/prerender_host_registry.cc b/content/browser/prerender/prerender_host_registry.cc index 5e94dfa..c4091028 100644 --- a/content/browser/prerender/prerender_host_registry.cc +++ b/content/browser/prerender/prerender_host_registry.cc
@@ -83,23 +83,19 @@ std::move(prerender_host); if (!prerender_host_by_frame_tree_node_id_[frame_tree_node_id] ->StartPrerendering()) { - AbandonHost(frame_tree_node_id); + // TODO(nhiroki): Pass a more suitable cancellation reason like + // kStartFailed. + AbandonHost(frame_tree_node_id, PrerenderHost::FinalStatus::kDestroyed); return RenderFrameHost::kNoFrameTreeNodeId; } return frame_tree_node_id; } -void PrerenderHostRegistry::AbandonHost(int frame_tree_node_id) { - TRACE_EVENT1("navigation", "PrerenderHostRegistry::AbandonHost", - "frame_tree_node_id", frame_tree_node_id); - AbandonHostInternal(frame_tree_node_id); -} - -void PrerenderHostRegistry::AbandonHostAsync( +void PrerenderHostRegistry::AbandonHost( int frame_tree_node_id, PrerenderHost::FinalStatus final_status) { - TRACE_EVENT1("navigation", "PrerenderHostRegistry::AbandonHostAsync", + TRACE_EVENT1("navigation", "PrerenderHostRegistry::AbandonHost", "frame_tree_node_id", frame_tree_node_id); // Remove the prerender host from the host maps so that it's not used for // activation during asynchronous deletion.
diff --git a/content/browser/prerender/prerender_host_registry.h b/content/browser/prerender/prerender_host_registry.h index 3da02d8..1b55ad8f 100644 --- a/content/browser/prerender/prerender_host_registry.h +++ b/content/browser/prerender/prerender_host_registry.h
@@ -32,7 +32,7 @@ // for activators. // // - Triggers (e.g., PrerenderProcessor) can request to create a new prerender -// host by CreateAndStartHost() and cancel it by AbandonHost(Async)(). +// host by CreateAndStartHost() and cancel it by AbandonHost(). // Triggers cannot cancel the host after it's reserved by an activator. // - Activators (i.e., NavigationRequest) can reserve the prerender host on // activation start by ReserveHostToActivate() and activate it by @@ -70,8 +70,11 @@ int CreateAndStartHost(blink::mojom::PrerenderAttributesPtr attributes, RenderFrameHostImpl& initiator_render_frame_host); - // For triggers. - // Destroys the host registered for `frame_tree_node_id`. + // Destroys the host registered for `frame_tree_node_id`. The host is + // immediately removed from the map of reservable hosts but asynchronously + // destroyed so that prerendered pages can cancel themselves without concern + // for self destruction. + // // TODO(https://crbug.com/1169594): Distinguish two paths that cancel // prerendering. A prerender can be canceled due to the following reasons: // 1. Initiator was no longer interested. Since one prerender may have several @@ -80,14 +83,8 @@ // 2. Prerendering page did something undesirable. The same behavior always // happens regardless of which caller calls it. So PrerenderHostRegistry // should destroy the PrerenderHost. - void AbandonHost(int frame_tree_node_id); - - // For triggers. - // This is the same with AbandonHost but destroys the prerender host - // asynchronously so that the prerendered page itself can cancel prerendering - // without concern for self destruction. - void AbandonHostAsync(int frame_tree_node_id, - PrerenderHost::FinalStatus final_status); + void AbandonHost(int frame_tree_node_id, + PrerenderHost::FinalStatus final_status); // For activators. // Reserves the host to activate for a navigation for the given
diff --git a/content/browser/prerender/prerender_host_registry_unittest.cc b/content/browser/prerender/prerender_host_registry_unittest.cc index 6c5baaf2..5f76aa9 100644 --- a/content/browser/prerender/prerender_host_registry_unittest.cc +++ b/content/browser/prerender/prerender_host_registry_unittest.cc
@@ -248,7 +248,8 @@ registry->CreateAndStartHost(std::move(attributes), *render_frame_host); EXPECT_NE(registry->FindHostByUrlForTesting(kPrerenderingUrl), nullptr); - registry->AbandonHost(prerender_frame_tree_node_id); + registry->AbandonHost(prerender_frame_tree_node_id, + PrerenderHost::FinalStatus::kDestroyed); EXPECT_EQ(registry->FindHostByUrlForTesting(kPrerenderingUrl), nullptr); }
diff --git a/content/browser/prerender/prerender_host_unittest.cc b/content/browser/prerender/prerender_host_unittest.cc index 7f692cd..3da652d 100644 --- a/content/browser/prerender/prerender_host_unittest.cc +++ b/content/browser/prerender/prerender_host_unittest.cc
@@ -118,7 +118,8 @@ // Start the prerendering navigation, but don't activate it. const int prerender_frame_tree_node_id = registry->CreateAndStartHost(std::move(attributes), *initiator_rfh); - registry->AbandonHost(prerender_frame_tree_node_id); + registry->AbandonHost(prerender_frame_tree_node_id, + PrerenderHost::FinalStatus::kDestroyed); ExpectFinalStatus(PrerenderHost::FinalStatus::kDestroyed); }
diff --git a/content/browser/prerender/prerender_navigation_throttle.cc b/content/browser/prerender/prerender_navigation_throttle.cc index f233fa5..06bf3143 100644 --- a/content/browser/prerender/prerender_navigation_throttle.cc +++ b/content/browser/prerender/prerender_navigation_throttle.cc
@@ -73,12 +73,11 @@ : nullptr; if (initiator_render_frame_host_impl && initiator_render_frame_host_impl->frame_tree()->is_prerendering()) { - prerender_host_registry->AbandonHostAsync( + prerender_host_registry->AbandonHost( frame_tree_node->frame_tree_node_id(), PrerenderHost::FinalStatus::kMainFrameNavigation); // TODO(https://crbug.com/1194414): Handle the case the prerendering page - // is reserved for activation, and AbandonHostAsync() could not do nothing - // here. + // is reserved for activation. return CANCEL; } @@ -86,7 +85,7 @@ // https://jeremyroman.github.io/alternate-loading-modes/#no-bad-navs GURL prerendering_url = navigation_handle()->GetURL(); if (!prerendering_url.SchemeIsHTTPOrHTTPS()) { - prerender_host_registry->AbandonHostAsync( + prerender_host_registry->AbandonHost( frame_tree_node->frame_tree_node_id(), is_redirection ? PrerenderHost::FinalStatus::kInvalidSchemeRedirect : PrerenderHost::FinalStatus::kInvalidSchemeNavigation); @@ -115,10 +114,7 @@ // prerendered page. url::Origin prerendering_origin = url::Origin::Create(prerendering_url); if (prerendering_origin != prerender_host->initiator_origin()) { - // Asynchronously abandon the prerender host so that the navigation request - // and the render frame tree indirectly owned by the prerender host can - // outlive the current callstack. - prerender_host_registry->AbandonHostAsync( + prerender_host_registry->AbandonHost( frame_tree_node->frame_tree_node_id(), is_redirection ? PrerenderHost::FinalStatus::kCrossOriginRedirect : PrerenderHost::FinalStatus::kCrossOriginNavigation); @@ -129,4 +125,24 @@ return PROCEED; } +NavigationThrottle::ThrottleCheckResult +PrerenderNavigationThrottle::WillProcessResponse() { + // Disallow downloads during prerendering and cancel the prerender. + if (navigation_handle()->IsDownload()) { + auto* navigation_request = NavigationRequest::From(navigation_handle()); + FrameTreeNode* frame_tree_node = navigation_request->frame_tree_node(); + DCHECK(frame_tree_node->frame_tree()->is_prerendering()); + + PrerenderHostRegistry* prerender_host_registry = + frame_tree_node->current_frame_host() + ->delegate() + ->GetPrerenderHostRegistry(); + + prerender_host_registry->AbandonHost(frame_tree_node->frame_tree_node_id(), + PrerenderHost::FinalStatus::kDownload); + return CANCEL; + } + return PROCEED; +} + } // namespace content
diff --git a/content/browser/prerender/prerender_navigation_throttle.h b/content/browser/prerender/prerender_navigation_throttle.h index 127e859..c307d86 100644 --- a/content/browser/prerender/prerender_navigation_throttle.h +++ b/content/browser/prerender/prerender_navigation_throttle.h
@@ -27,6 +27,7 @@ const char* GetNameForLogging() override; ThrottleCheckResult WillStartRequest() override; ThrottleCheckResult WillRedirectRequest() override; + ThrottleCheckResult WillProcessResponse() override; private: explicit PrerenderNavigationThrottle(NavigationHandle* navigation_handle);
diff --git a/content/browser/prerender/prerender_processor.cc b/content/browser/prerender/prerender_processor.cc index 846857b1..896f4d0d6 100644 --- a/content/browser/prerender/prerender_processor.cc +++ b/content/browser/prerender/prerender_processor.cc
@@ -115,7 +115,10 @@ if (!registry_) return; - registry_->AbandonHost(prerender_frame_tree_node_id_); + // TODO(https://crbug.com/1169594): Pass kCanceled or a more detailed + // cancellation reason instead of kDestroyed. + registry_->AbandonHost(prerender_frame_tree_node_id_, + PrerenderHost::FinalStatus::kDestroyed); } } // namespace content
diff --git a/content/browser/prerender/prerender_subframe_navigation_throttle.cc b/content/browser/prerender/prerender_subframe_navigation_throttle.cc index 31afa82..308b63e 100644 --- a/content/browser/prerender/prerender_subframe_navigation_throttle.cc +++ b/content/browser/prerender/prerender_subframe_navigation_throttle.cc
@@ -54,6 +54,26 @@ return WillStartOrRedirectRequest(); } +NavigationThrottle::ThrottleCheckResult +PrerenderSubframeNavigationThrottle::WillProcessResponse() { + auto* navigation_request = NavigationRequest::From(navigation_handle()); + FrameTreeNode* frame_tree_node = navigation_request->frame_tree_node(); + // Disallow downloads during prerendering and cancel the prerender. + if (navigation_handle()->IsDownload() && + frame_tree_node->frame_tree()->is_prerendering()) { + PrerenderHostRegistry* prerender_host_registry = + frame_tree_node->current_frame_host() + ->delegate() + ->GetPrerenderHostRegistry(); + + prerender_host_registry->AbandonHost( + frame_tree_node->frame_tree()->root()->frame_tree_node_id(), + PrerenderHost::FinalStatus::kDownload); + return CANCEL; + } + return PROCEED; +} + void PrerenderSubframeNavigationThrottle::OnActivated() { DCHECK(!NavigationRequest::From(navigation_handle()) ->frame_tree_node()
diff --git a/content/browser/prerender/prerender_subframe_navigation_throttle.h b/content/browser/prerender/prerender_subframe_navigation_throttle.h index 5e733e9..4eed6d7 100644 --- a/content/browser/prerender/prerender_subframe_navigation_throttle.h +++ b/content/browser/prerender/prerender_subframe_navigation_throttle.h
@@ -29,6 +29,7 @@ const char* GetNameForLogging() override; ThrottleCheckResult WillStartRequest() override; ThrottleCheckResult WillRedirectRequest() override; + ThrottleCheckResult WillProcessResponse() override; // PrerenderHost::Observer void OnActivated() override;
diff --git a/content/browser/renderer_host/clipboard_host_impl.cc b/content/browser/renderer_host/clipboard_host_impl.cc index 3981ffd..61ad2a1 100644 --- a/content/browser/renderer_host/clipboard_host_impl.cc +++ b/content/browser/renderer_host/clipboard_host_impl.cc
@@ -8,7 +8,6 @@ #include <utility> #include "base/bind.h" -#include "base/feature_list.h" #include "base/location.h" #include "base/macros.h" #include "base/memory/ptr_util.h" @@ -44,7 +43,6 @@ #include "ui/base/clipboard/scoped_clipboard_writer.h" #include "ui/base/data_transfer_policy/data_transfer_endpoint.h" #include "ui/base/data_transfer_policy/data_transfer_policy_controller.h" -#include "ui/base/ui_base_features.h" #include "url/gurl.h" namespace content { @@ -389,11 +387,6 @@ return; } - if (!base::FeatureList::IsEnabled(features::kClipboardFilenames)) { - std::move(callback).Run(std::move(result)); - return; - } - std::vector<ui::FileInfo> filenames; auto data_dst = CreateDataEndpoint(); clipboard_->ReadFilenames(clipboard_buffer, data_dst.get(), &filenames);
diff --git a/content/browser/renderer_host/clipboard_host_impl_browsertest.cc b/content/browser/renderer_host/clipboard_host_impl_browsertest.cc index 61f79c7..bc125469 100644 --- a/content/browser/renderer_host/clipboard_host_impl_browsertest.cc +++ b/content/browser/renderer_host/clipboard_host_impl_browsertest.cc
@@ -8,7 +8,6 @@ #include "base/base_paths.h" #include "base/files/file_util.h" #include "base/path_service.h" -#include "base/test/scoped_feature_list.h" #include "base/threading/thread_restrictions.h" #include "content/public/test/browser_test.h" #include "content/public/test/browser_test_utils.h" @@ -20,7 +19,6 @@ #include "ui/base/clipboard/file_info.h" #include "ui/base/clipboard/scoped_clipboard_writer.h" #include "ui/base/clipboard/test/test_clipboard.h" -#include "ui/base/ui_base_features.h" namespace content { @@ -35,7 +33,6 @@ void SetUp() override { ASSERT_TRUE(embedded_test_server()->Start()); - features_.InitWithFeatures({features::kClipboardFilenames}, {}); ui::TestClipboard::CreateForCurrentThread(); ContentBrowserTest::SetUp(); } @@ -97,9 +94,6 @@ shell()->web_contents()->Paste(); EXPECT_EQ(base::JoinString(expected, ","), EvalJs(shell(), "p")); } - - protected: - base::test::ScopedFeatureList features_; }; IN_PROC_BROWSER_TEST_F(ClipboardHostImplBrowserTest, TextFile) {
diff --git a/content/browser/renderer_host/input/scroll_behavior_browsertest.cc b/content/browser/renderer_host/input/scroll_behavior_browsertest.cc index af7534a..f9e24af 100644 --- a/content/browser/renderer_host/input/scroll_behavior_browsertest.cc +++ b/content/browser/renderer_host/input/scroll_behavior_browsertest.cc
@@ -302,8 +302,10 @@ // This tests that a in-progress smooth scroll on an overflow:scroll element // stops when interrupted by a touch scroll. +// Currently only pre-Scroll-Unification main-thread input-handling gets this +// right (crbug.com/1116647#c5). IN_PROC_BROWSER_TEST_P(ScrollBehaviorBrowserTest, - OverflowScrollInterruptedByTouchScroll) { + DISABLED_OverflowScrollInterruptedByTouchScroll) { // TODO(crbug.com/1116647): compositing scroll should be able to cancel a // running programmatic scroll. if (!disable_threaded_scrolling_)
diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc index b4fb8e9..f2e4e11b 100644 --- a/content/browser/renderer_host/navigation_request.cc +++ b/content/browser/renderer_host/navigation_request.cc
@@ -3043,8 +3043,7 @@ if (net_error_ == net::Error::ERR_BLOCKED_BY_CSP) { final_status = PrerenderHost::FinalStatus::kNavigationRequestBlockedByCsp; } - GetPrerenderHostRegistry().AbandonHostAsync(GetFrameTreeNodeId(), - final_status); + GetPrerenderHostRegistry().AbandonHost(GetFrameTreeNodeId(), final_status); return; }
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc index c07e061..ddcda126 100644 --- a/content/browser/renderer_host/render_frame_host_impl.cc +++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -4388,6 +4388,15 @@ void RenderFrameHostImpl::DownloadURL( blink::mojom::DownloadURLParamsPtr blink_parameters) { + // TODO(crbug.com/1205359): We should defer the download until the + // prerendering page is activated, and it will comply with the prerendering + // spec. + if (blink::features::IsPrerender2Enabled() && + frame_tree()->is_prerendering()) { + CancelPrerendering(PrerenderHost::FinalStatus::kDownload); + return; + } + if (!VerifyDownloadUrlParams(GetSiteInstance(), *blink_parameters)) return; @@ -8468,7 +8477,7 @@ // TODO(https://crbug.com/1126305): Pass a FinalStatus to CancelPrerendering() // method when MojoInterface control, or IsInactiveAndDisallowActivation are // called. - delegate_->GetPrerenderHostRegistry()->AbandonHostAsync( + delegate_->GetPrerenderHostRegistry()->AbandonHost( frame_tree()->root()->frame_tree_node_id(), status); }
diff --git a/content/public/android/java/src/org/chromium/content/browser/androidoverlay/DialogOverlayImpl.java b/content/public/android/java/src/org/chromium/content/browser/androidoverlay/DialogOverlayImpl.java index d6a0b02..be596776 100644 --- a/content/public/android/java/src/org/chromium/content/browser/androidoverlay/DialogOverlayImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/androidoverlay/DialogOverlayImpl.java
@@ -7,6 +7,8 @@ import android.content.Context; import android.os.IBinder; import android.view.Surface; +import android.view.View; +import android.view.ViewTreeObserver; import org.chromium.base.ContextUtils; import org.chromium.base.ThreadUtils; @@ -26,7 +28,8 @@ * from that thread from the UI thread. */ @JNINamespace("content") -public class DialogOverlayImpl implements AndroidOverlay, DialogOverlayCore.Host { +public class DialogOverlayImpl + implements AndroidOverlay, DialogOverlayCore.Host, ViewTreeObserver.OnPreDrawListener { private static final String TAG = "DialogOverlayImpl"; private AndroidOverlayClient mClient; @@ -46,6 +49,12 @@ // Temporary, so we don't need to keep allocating arrays. private final int[] mCompositorOffset = new int[2]; + // The last rect passed to scheduleLayout(). + private Rect mLastRect; + + // Observes the container view to update our location. + private ViewTreeObserver mContainerViewViewTreeObserver; + /** * @param client Mojo client interface. * @param config initial overlay configuration. @@ -58,6 +67,7 @@ mClient = client; mReleasedRunnable = releasedRunnable; + mLastRect = copyRect(config.rect); mDialogCore = new DialogOverlayCore(); @@ -123,6 +133,8 @@ public void scheduleLayout(final Rect rect) { ThreadUtils.assertOnUiThread(); + mLastRect = copyRect(rect); + if (mDialogCore == null) return; // |rect| is relative to the compositor surface. Convert it to be relative to the screen. @@ -166,6 +178,13 @@ // client to close their connection first. } + // ViewTreeObserver.OnPreDrawListener implementation. + @Override + public boolean onPreDraw() { + scheduleLayout(mLastRect); + return true; + } + /** * Callback from native that the window token has changed. */ @@ -183,6 +202,19 @@ mDialogCore.onWindowToken(token); } + @CalledByNative + private void observeContainerView(View containerView) { + if (mContainerViewViewTreeObserver != null && mContainerViewViewTreeObserver.isAlive()) { + mContainerViewViewTreeObserver.removeOnPreDrawListener(this); + } + mContainerViewViewTreeObserver = null; + + if (containerView != null) { + mContainerViewViewTreeObserver = containerView.getViewTreeObserver(); + mContainerViewViewTreeObserver.addOnPreDrawListener(this); + } + } + /** * Callback from native that we will be getting no additional tokens. */ @@ -237,6 +269,9 @@ // We close |mClient| first to prevent leaking the mojo router object. if (mClient != null) mClient.close(); mClient = null; + + // Native should have cleaned up the container view before we reach this. + assert mContainerViewViewTreeObserver == null; } private void notifyDestroyed() { @@ -266,6 +301,18 @@ DialogOverlayImplJni.get().notifyDestroyedSynchronously(nativeHandle); } + /** + * Creates a copy of |rect| and returns it. + */ + private static Rect copyRect(Rect rect) { + Rect copy = new Rect(); + copy.x = rect.x; + copy.y = rect.y; + copy.width = rect.width; + copy.height = rect.height; + return copy; + } + @NativeMethods interface Natives { /**
diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc index 53de48c..dcc9c226 100644 --- a/content/public/browser/content_browser_client.cc +++ b/content/public/browser/content_browser_client.cc
@@ -1086,6 +1086,11 @@ ContentBrowserClient::CreateTtsEnvironmentAndroid() { return nullptr; } + +bool ContentBrowserClient:: + ShouldObserveContainerViewLocationForDialogOverlays() { + return false; +} #endif base::flat_set<std::string>
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h index 4b1479f6..09ce07d 100644 --- a/content/public/browser/content_browser_client.h +++ b/content/public/browser/content_browser_client.h
@@ -1882,6 +1882,12 @@ // Creates the TtsEnvironmentAndroid. A return value of null results in using // a default implementation. virtual std::unique_ptr<TtsEnvironmentAndroid> CreateTtsEnvironmentAndroid(); + + // If enabled, DialogOverlays will observe the container view for location + // changes and reposition themselves automatically. Note that this comes with + // some overhead and should only be enabled if the embedder itself can be + // moved. Defaults to false. + virtual bool ShouldObserveContainerViewLocationForDialogOverlays(); #endif // Obtains the list of MIME types that are for plugins with external handlers.
diff --git a/content/public/test/render_view_test.cc b/content/public/test/render_view_test.cc index b6a94c5..d764f7a4 100644 --- a/content/public/test/render_view_test.cc +++ b/content/public/test/render_view_test.cc
@@ -324,7 +324,7 @@ RenderViewTest::~RenderViewTest() = default; WebLocalFrame* RenderViewTest::GetMainFrame() { - return view_->GetWebView()->MainFrame()->ToWebLocalFrame(); + return web_view_->MainFrame()->ToWebLocalFrame(); } void RenderViewTest::ExecuteJavaScriptForTests(const char* js) { @@ -371,7 +371,7 @@ // The load may happen asynchronously, so we pump messages to process // the pending continuation. waiter.Wait(); - view_->GetWebView()->MainFrameWidget()->UpdateAllLifecyclePhases( + web_view_->MainFrameWidget()->UpdateAllLifecyclePhases( blink::DocumentUpdateReason::kTest); } @@ -384,7 +384,7 @@ // The load may happen asynchronously, so we pump messages to process // the pending continuation. waiter.Wait(); - view_->GetWebView()->MainFrameWidget()->UpdateAllLifecyclePhases( + web_view_->MainFrameWidget()->UpdateAllLifecyclePhases( blink::DocumentUpdateReason::kTest); } @@ -538,6 +538,7 @@ waiter.Wait(); view_ = view; + web_view_ = view->GetWebView(); } void RenderViewTest::TearDown() { @@ -558,6 +559,7 @@ // |view_| is ref-counted and deletes itself during the RunUntilIdle() call // below. view_ = nullptr; + web_view_ = nullptr; process_.reset(); // After telling the view to close and resetting process_ we may get @@ -773,7 +775,7 @@ FrameLoadWaiter waiter(frame); frame->Navigate(std::move(common_params), std::move(commit_params)); waiter.Wait(); - view_->GetWebView()->MainFrameWidget()->UpdateAllLifecyclePhases( + web_view_->MainFrameWidget()->UpdateAllLifecyclePhases( blink::DocumentUpdateReason::kTest); } @@ -853,7 +855,7 @@ } blink::WebFrameWidget* RenderViewTest::GetWebFrameWidget() { - return view_->GetWebView()->MainFrameWidget(); + return web_view_->MainFrameWidget(); } ContentClient* RenderViewTest::CreateContentClient() { @@ -886,7 +888,7 @@ const GURL& url, const blink::PageState& state) { RenderViewImpl* view = static_cast<RenderViewImpl*>(view_); - blink::WebView* webview = view->GetWebView(); + blink::WebView* webview = web_view_; int history_list_length = webview->HistoryBackListCount() + webview->HistoryForwardListCount() + 1; int pending_offset = offset + webview->HistoryBackListCount();
diff --git a/content/public/test/render_view_test.h b/content/public/test/render_view_test.h index 977e619a..873be59 100644 --- a/content/public/test/render_view_test.h +++ b/content/public/test/render_view_test.h
@@ -214,6 +214,10 @@ // We use a naked pointer because we don't want to expose RenderViewImpl in // the embedder's namespace. RenderView* view_ = nullptr; + // The WebView is owned by `view_` but provided as a raw pointer here. This + // will provide a transition of eventually removing RenderView and owning + // it directly here. See https://crbug.com/1155202. + blink::WebView* web_view_ = nullptr; RendererBlinkPlatformImplTestOverride blink_platform_impl_; std::unique_ptr<ContentClient> content_client_; std::unique_ptr<ContentBrowserClient> content_browser_client_;
diff --git a/content/renderer/accessibility/render_accessibility_impl.cc b/content/renderer/accessibility/render_accessibility_impl.cc index c68b426..e367219 100644 --- a/content/renderer/accessibility/render_accessibility_impl.cc +++ b/content/renderer/accessibility/render_accessibility_impl.cc
@@ -34,7 +34,6 @@ #include "content/renderer/accessibility/render_accessibility_manager.h" #include "content/renderer/render_frame_impl.h" #include "content/renderer/render_frame_proxy.h" -#include "content/renderer/render_view_impl.h" #include "services/image_annotation/public/mojom/image_annotation.mojom.h" #include "services/metrics/public/cpp/mojo_ukm_recorder.h" #include "services/metrics/public/cpp/ukm_builders.h" @@ -217,19 +216,16 @@ #if !defined(OS_ANDROID) // Inline text boxes can be enabled globally on all except Android. // On Android they can be requested for just a specific node. - RenderView* render_view = render_frame_->GetRenderView(); - if (render_view) { - WebView* web_view = render_view->GetWebView(); - if (web_view) { - WebSettings* settings = web_view->GetSettings(); - if (settings) { - if (mode.has_mode(ui::AXMode::kInlineTextBoxes)) { - settings->SetInlineTextBoxAccessibilityEnabled(true); - tree_source_->GetRoot().MaybeUpdateLayoutAndCheckValidity(); - tree_source_->GetRoot().LoadInlineTextBoxes(); - } else { - settings->SetInlineTextBoxAccessibilityEnabled(false); - } + WebView* web_view = render_frame_->GetWebView(); + if (web_view) { + WebSettings* settings = web_view->GetSettings(); + if (settings) { + if (mode.has_mode(ui::AXMode::kInlineTextBoxes)) { + settings->SetInlineTextBoxAccessibilityEnabled(true); + tree_source_->GetRoot().MaybeUpdateLayoutAndCheckValidity(); + tree_source_->GetRoot().LoadInlineTextBoxes(); + } else { + settings->SetInlineTextBoxAccessibilityEnabled(false); } } }
diff --git a/content/renderer/pepper/pepper_file_system_host.cc b/content/renderer/pepper/pepper_file_system_host.cc index aaf62fc2..dc075be 100644 --- a/content/renderer/pepper/pepper_file_system_host.cc +++ b/content/renderer/pepper/pepper_file_system_host.cc
@@ -7,7 +7,7 @@ #include "base/bind.h" #include "base/callback.h" #include "content/common/pepper_file_util.h" -#include "content/public/renderer/render_view.h" +#include "content/public/renderer/render_frame.h" #include "content/public/renderer/renderer_ppapi_host.h" #include "content/renderer/pepper/pepper_plugin_instance_impl.h" #include "content/renderer/render_thread_impl.h" @@ -143,13 +143,13 @@ if (!storage::ValidateIsolatedFileSystemId(fsid)) return PP_ERROR_BADARGUMENT; - RenderView* view = - renderer_ppapi_host_->GetRenderViewForInstance(pp_instance()); - if (!view) + RenderFrame* frame = + renderer_ppapi_host_->GetRenderFrameForInstance(pp_instance()); + if (!frame) return PP_ERROR_FAILED; url::Origin main_frame_origin( - view->GetWebView()->MainFrame()->GetSecurityOrigin()); + frame->GetWebView()->MainFrame()->GetSecurityOrigin()); const std::string root_name = ppapi::IsolatedFileSystemTypeToRootName(type); if (root_name.empty()) return PP_ERROR_BADARGUMENT;
diff --git a/content/renderer/pepper/pepper_in_process_resource_creation.cc b/content/renderer/pepper/pepper_in_process_resource_creation.cc index 2a149c2..760c6b5 100644 --- a/content/renderer/pepper/pepper_in_process_resource_creation.cc +++ b/content/renderer/pepper/pepper_in_process_resource_creation.cc
@@ -59,7 +59,7 @@ // GPU process whether these features are blacklisted or not. gpu::GpuFeatureInfo gpu_feature_info; ppapi::Preferences prefs(PpapiPreferencesBuilder::Build( - host_impl_->GetRenderViewForInstance(instance) + host_impl_->GetRenderFrameForInstance(instance) ->GetWebView() ->GetWebPreferences(), gpu_feature_info));
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index 1be5ffc..543da4c 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -292,6 +292,19 @@ const int kExtraCharsBeforeAndAfterSelection = 100; const size_t kMaxURLLogChars = 1024; +// Time, in seconds, we delay before sending content state changes (such as form +// state and scroll position) to the browser. We delay sending changes to avoid +// spamming the browser. +// To avoid having tab/session restore require sending a message to get the +// current content state during tab closing we use a shorter timeout for the +// foreground renderer. This means there is a small window of time from which +// content state is modified and not sent to session restore, but this is +// better than having to wake up all renderers during shutdown. +constexpr base::TimeDelta kDelaySecondsForContentStateSyncHidden = + base::TimeDelta::FromSeconds(5); +constexpr base::TimeDelta kDelaySecondsForContentStateSync = + base::TimeDelta::FromSeconds(1); + const blink::PreviewsState kDisabledPreviewsBits = blink::PreviewsTypes::PREVIEWS_OFF | blink::PreviewsTypes::PREVIEWS_NO_TRANSFORM; @@ -1828,6 +1841,9 @@ std::move(params.browser_interface_broker), agent_scheduling_group_.agent_group_scheduler().DefaultTaskRunner()); + delayed_state_sync_timer_.SetTaskRunner( + agent_scheduling_group_.agent_group_scheduler().DefaultTaskRunner()); + // Must call after binding our own remote interfaces. media_factory_.SetupMojo(); @@ -3909,13 +3925,43 @@ observer.DidFinishSameDocumentNavigation(); } +void RenderFrameImpl::WillFreezePage() { + // Make sure browser has the latest info before the page is frozen. If the + // page goes into the back-forward cache it could be evicted and some of the + // updates lost. + SendUpdateState(); +} + void RenderFrameImpl::DidSetPageLifecycleState() { for (auto& observer : observers_) observer.DidSetPageLifecycleState(); } void RenderFrameImpl::DidUpdateCurrentHistoryItem() { - render_view_->StartNavStateSyncTimerIfNecessary(this); + StartDelayedSyncTimer(); +} + +void RenderFrameImpl::StartDelayedSyncTimer() { + base::TimeDelta delay; + if (send_content_state_immediately_) { + SendUpdateState(); + return; + } else if (GetWebView()->GetVisibilityState() != + PageVisibilityState::kVisible) + delay = kDelaySecondsForContentStateSyncHidden; + else + delay = kDelaySecondsForContentStateSync; + + if (delayed_state_sync_timer_.IsRunning()) { + // The timer is already running. If the delay of the timer matches the + // amount we want to delay by, then return. Otherwise stop the timer so that + // it gets started with the right delay. + if (delayed_state_sync_timer_.GetCurrentDelay() == delay) + return; + delayed_state_sync_timer_.Stop(); + } + delayed_state_sync_timer_.Start(FROM_HERE, delay, this, + &RenderFrameImpl::SendUpdateState); } base::UnguessableToken RenderFrameImpl::GetDevToolsFrameToken() { @@ -4188,7 +4234,7 @@ } void RenderFrameImpl::DidChangeScrollOffset() { - render_view_->StartNavStateSyncTimerIfNecessary(this); + StartDelayedSyncTimer(); for (auto& observer : observers_) observer.DidChangeScrollOffset(); @@ -5540,6 +5586,9 @@ } void RenderFrameImpl::SendUpdateState() { + // Since we are sending immediately we can cancel any pending delayed sync + // timer. + delayed_state_sync_timer_.Stop(); if (GetWebFrame()->GetCurrentHistoryItem().IsNull()) return;
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h index 852c6df..d21bf88 100644 --- a/content/renderer/render_frame_impl.h +++ b/content/renderer/render_frame_impl.h
@@ -27,6 +27,7 @@ #include "base/observer_list.h" #include "base/process/process_handle.h" #include "base/single_thread_task_runner.h" +#include "base/timer/timer.h" #include "base/unguessable_token.h" #include "build/build_config.h" #include "cc/input/browser_controls_state.h" @@ -546,6 +547,7 @@ bool is_synchronously_committed, bool is_history_api_navigation, bool is_client_redirect) override; + void WillFreezePage() override; void DidSetPageLifecycleState() override; void DidUpdateCurrentHistoryItem() override; base::UnguessableToken GetDevToolsFrameToken() override; @@ -716,6 +718,10 @@ url::Origin GetSecurityOriginOfTopFrame(); + void set_send_content_state_immediately(bool value) { + send_content_state_immediately_ = value; + } + protected: explicit RenderFrameImpl(CreateParams params); @@ -735,6 +741,7 @@ TestOverlayRoutingTokenSendsLater); FRIEND_TEST_ALL_PREFIXES(RenderFrameImplTest, TestOverlayRoutingTokenSendsNow); + FRIEND_TEST_ALL_PREFIXES(RenderFrameImplTest, SendUpdateCancelsPending); // Similar to base::AutoReset, but skips restoration of the original value if // |this| is already destroyed. @@ -1051,6 +1058,10 @@ const std::string& message, bool discard_duplicates); + // Start a delayed timer to update the frame sync state to the browser. + // Debounces many updates in quick succession. + void StartDelayedSyncTimer(); + // Stores the WebLocalFrame we are associated with. This is null from the // constructor until BindToFrame() is called, and it is null after // FrameDetached() is called until destruction (which is asynchronous in the @@ -1396,6 +1407,14 @@ NavigationCommitState navigation_commit_state_ = NavigationCommitState::kInitialEmptyDocument; + // Timer used to delay the updating of frame state. + base::OneShotTimer delayed_state_sync_timer_; + + // Whether content state (such as form state, scroll position and page + // contents) should be sent to the browser immediately. This is normally + // false, but set to true by some tests. + bool send_content_state_immediately_ = false; + base::WeakPtrFactory<RenderFrameImpl> weak_factory_{this}; DISALLOW_COPY_AND_ASSIGN(RenderFrameImpl);
diff --git a/content/renderer/render_frame_impl_browsertest.cc b/content/renderer/render_frame_impl_browsertest.cc index 93db588..12020bf 100644 --- a/content/renderer/render_frame_impl_browsertest.cc +++ b/content/renderer/render_frame_impl_browsertest.cc
@@ -260,9 +260,8 @@ main_frame_widget->ApplyVisualProperties(visual_properties); // The main frame widget's size is the "widget size", not the visible viewport // size, which is given to blink separately. - EXPECT_EQ(gfx::Size(view_->GetWebView()->MainFrameWidget()->Size()), - widget_size); - EXPECT_EQ(gfx::SizeF(view_->GetWebView()->VisualViewportSize()), + EXPECT_EQ(gfx::Size(web_view_->MainFrameWidget()->Size()), widget_size); + EXPECT_EQ(gfx::SizeF(web_view_->VisualViewportSize()), gfx::SizeF(visible_size)); // The main frame doesn't change other local roots directly. EXPECT_NE(gfx::Size(frame_widget()->Size()), visible_size); @@ -1055,4 +1054,14 @@ EXPECT_EQ(GURL(GetMainRenderFrame()->LastCommittedUrlForUKM()), override_url); } +// Verify that a frame with a pending update is cancelled when a forced update +// is sent. +TEST_F(RenderFrameImplTest, SendUpdateCancelsPending) { + RenderFrameImpl* main_frame = GetMainRenderFrame(); + main_frame->StartDelayedSyncTimer(); + EXPECT_TRUE(main_frame->delayed_state_sync_timer_.IsRunning()); + main_frame->SendUpdateState(); + EXPECT_FALSE(main_frame->delayed_state_sync_timer_.IsRunning()); +} + } // namespace content
diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc index 1778b5d..98f420d 100644 --- a/content/renderer/render_view_browsertest.cc +++ b/content/renderer/render_view_browsertest.cc
@@ -337,14 +337,11 @@ return render_widget_host_->LastCompositionBounds(); } - void ReceiveDisableDeviceEmulation(RenderViewImpl* view) { - view->GetWebView()->DisableDeviceEmulation(); - } + void ReceiveDisableDeviceEmulation() { web_view_->DisableDeviceEmulation(); } void ReceiveEnableDeviceEmulation( - RenderViewImpl* view, const blink::DeviceEmulationParams& params) { - view->GetWebView()->EnableDeviceEmulation(params); + web_view_->EnableDeviceEmulation(params); } void GoToOffsetWithParams(int offset, @@ -352,7 +349,7 @@ mojom::CommonNavigationParamsPtr common_params, mojom::CommitNavigationParamsPtr commit_params) { EXPECT_TRUE(common_params->transition & ui::PAGE_TRANSITION_FORWARD_BACK); - blink::WebView* webview = view()->GetWebView(); + blink::WebView* webview = web_view_; int pending_offset = offset + webview->HistoryBackListCount(); commit_params->page_state = state; @@ -511,14 +508,12 @@ } void EnablePreferredSizeMode() { - blink::WebView* webview = view()->GetWebView(); - webview->EnablePreferredSizeChangedMode(); + web_view_->EnablePreferredSizeChangedMode(); } gfx::Size GetPreferredSize() { - blink::WebView* webview = view()->GetWebView(); - webview->UpdatePreferredSize(); - return gfx::Size(webview->GetPreferredSizeForTest()); + web_view_->UpdatePreferredSize(); + return gfx::Size(web_view_->GetPreferredSizeForTest()); } gfx::Size MainWidgetSizeInDIPS() { @@ -529,9 +524,8 @@ } int GetScrollbarWidth() { - blink::WebView* webview = view()->GetWebView(); - return webview->MainFrameWidget()->Size().width() - - webview->MainFrame() + return web_view_->MainFrameWidget()->Size().width() - + web_view_->MainFrame() ->ToWebLocalFrame() ->VisibleContentRect() .width(); @@ -545,7 +539,7 @@ public: virtual void DoSetUp() { RenderViewImplTest::SetUp(); } - blink::WebSettings* settings() { return view()->GetWebView()->GetSettings(); } + blink::WebSettings* settings() { return web_view_->GetSettings(); } protected: // Blink settings may be specified on the command line, which must @@ -582,8 +576,7 @@ visual_properties.new_size = gfx::Size(100, 100); visual_properties.compositor_viewport_pixel_rect = gfx::Rect(200, 200); visual_properties.visible_viewport_size = visual_properties.new_size; - visual_properties.auto_resize_enabled = - view()->GetWebView()->AutoResizeMode(); + visual_properties.auto_resize_enabled = web_view_->AutoResizeMode(); visual_properties.min_size_for_auto_resize = min_size_for_autoresize_; visual_properties.max_size_for_auto_resize = max_size_for_autoresize_; visual_properties.local_surface_id = @@ -601,7 +594,7 @@ blink::DeviceEmulationParams params; params.view_size = gfx::Size(width, height); params.device_scale_factor = dpr; - ReceiveEnableDeviceEmulation(view(), params); + ReceiveEnableDeviceEmulation(params); EXPECT_TRUE(ExecuteJavaScriptAndReturnIntValue(get_width, &emulated_width)); EXPECT_EQ(width, emulated_width); EXPECT_TRUE( @@ -616,8 +609,7 @@ void EnableAutoResize(const gfx::Size& min_size, const gfx::Size& max_size) { min_size_for_autoresize_ = min_size; max_size_for_autoresize_ = max_size; - blink::WebView* webview = view()->GetWebView(); - webview->EnableAutoResizeForTesting(min_size, max_size); + web_view_->EnableAutoResizeForTesting(min_size, max_size); } private: @@ -684,7 +676,7 @@ args.browser_controls_constraint = cc::BrowserControlsState::kHidden; args.scroll_gesture_did_end = false; - view()->GetWebView()->MainFrameWidget()->ApplyViewportChangesForTesting(args); + web_view_->MainFrameWidget()->ApplyViewportChangesForTesting(args); EXPECT_TRUE(root_web_frame->FirstChild() ->ToWebRemoteFrame() ->GetPendingVisualPropertiesForTesting() @@ -707,7 +699,7 @@ // Reset the flag, make sure both children respond. args.is_pinch_gesture_active = false; - view()->GetWebView()->MainFrameWidget()->ApplyViewportChangesForTesting(args); + web_view_->MainFrameWidget()->ApplyViewportChangesForTesting(args); EXPECT_FALSE(root_web_frame->FirstChild() ->ToWebRemoteFrame() ->GetPendingVisualPropertiesForTesting() @@ -721,7 +713,7 @@ // Test that we get form state change notifications when input fields change. TEST_F(RenderViewImplTest, OnNavStateChanged) { - view()->set_send_content_state_immediately(true); + frame()->set_send_content_state_immediately(true); LoadHTML("<input type=\"text\" id=\"elt_text\"></input>"); // We should NOT have gotten a form state change notification yet. @@ -916,10 +908,9 @@ } TEST_F(RenderViewImplTest, BeginNavigationHandlesAllTopLevel) { - blink::RendererPreferences prefs = - view()->GetWebView()->GetRendererPreferences(); + blink::RendererPreferences prefs = web_view_->GetRendererPreferences(); prefs.browser_handles_all_top_level_requests = true; - view()->GetWebView()->SetRendererPreferences(prefs); + web_view_->SetRendererPreferences(prefs); const blink::WebNavigationType kNavTypes[] = { blink::kWebNavigationTypeLinkClicked, @@ -1085,10 +1076,10 @@ EXPECT_EQ(device_scale, main_frame_widget()->GetOriginalScreenInfo().device_scale_factor); - ReceiveDisableDeviceEmulation(view()); + ReceiveDisableDeviceEmulation(); blink::DeviceEmulationParams params; - ReceiveEnableDeviceEmulation(view(), params); + ReceiveEnableDeviceEmulation(params); // Don't disable here to test that emulation is being shutdown properly. } @@ -1156,7 +1147,7 @@ static_cast<mojom::Frame*>(frame())->Unload( kProxyRoutingId, true, replication_state->Clone(), blink::RemoteFrameToken(), CreateStubRemoteFrameInterfaces()); - EXPECT_TRUE(view()->GetWebView()->MainFrame()->IsWebRemoteFrame()); + EXPECT_TRUE(web_view_->MainFrame()->IsWebRemoteFrame()); // Do the remote-to-local transition for the proxy, which is to create a // provisional local frame. @@ -1215,8 +1206,7 @@ base::RunLoop().RunUntilIdle(); EXPECT_EQ(device_scale, view()->GetMainRenderFrame()->GetDeviceScaleFactor()); - EXPECT_EQ(device_scale, - view()->GetWebView()->ZoomFactorForDeviceScaleFactor()); + EXPECT_EQ(device_scale, web_view_->ZoomFactorForDeviceScaleFactor()); double device_pixel_ratio; std::u16string get_dpr = u"Number(window.devicePixelRatio)"; @@ -1227,8 +1217,7 @@ int width; std::u16string get_width = u"Number(document.documentElement.clientWidth)"; EXPECT_TRUE(ExecuteJavaScriptAndReturnIntValue(get_width, &width)); - EXPECT_EQ(view()->GetWebView()->MainFrameWidget()->Size().width(), - width * device_scale); + EXPECT_EQ(web_view_->MainFrameWidget()->Size().width(), width * device_scale); } // Test that when a parent detaches a remote child after the provisional @@ -1297,7 +1286,7 @@ ->Unload(kProxyRoutingId, true, ReconstructReplicationStateForTesting(main_frame), blink::RemoteFrameToken(), CreateStubRemoteFrameInterfaces()); - EXPECT_TRUE(view()->GetWebView()->MainFrame()->IsWebRemoteFrame()); + EXPECT_TRUE(web_view_->MainFrame()->IsWebRemoteFrame()); } class TextInputStateFakeRenderWidgetHost : public FakeRenderWidgetHost { @@ -2042,7 +2031,7 @@ // result. const int kMaxOutputCharacters = 128; std::u16string output = TestWebFrameContentDumper::DumpWebViewAsText( - view()->GetWebView(), kMaxOutputCharacters) + web_view_, kMaxOutputCharacters) .Utf16(); EXPECT_EQ(base::WideToUTF16(ime_message->result), output); } @@ -2093,7 +2082,7 @@ // expected result. const int kMaxOutputCharacters = 16; std::u16string output = TestWebFrameContentDumper::DumpWebViewAsText( - view()->GetWebView(), kMaxOutputCharacters) + web_view_, kMaxOutputCharacters) .Utf16(); EXPECT_EQ(base::WideToUTF16(test_case.expected_result), output); } @@ -2528,7 +2517,7 @@ // expected result. const int kMaxOutputCharacters = 256; std::string output = TestWebFrameContentDumper::DumpWebViewAsText( - view()->GetWebView(), kMaxOutputCharacters) + web_view_, kMaxOutputCharacters) .Utf8(); EXPECT_EQ(output, "hello \n\nworld"); } @@ -2645,7 +2634,7 @@ FrameLoadWaiter(main_frame).Wait(); const int kMaxOutputCharacters = 22; EXPECT_EQ("A suffusion of yellow.", - TestWebFrameContentDumper::DumpWebViewAsText(view()->GetWebView(), + TestWebFrameContentDumper::DumpWebViewAsText(web_view_, kMaxOutputCharacters) .Ascii()); } @@ -2864,7 +2853,7 @@ main_frame_widget()->SetZoomLevelForTesting( blink::PageZoomFactorToZoomLevel(2.0)); - view_->GetWebView()->MainFrameWidget()->UpdateAllLifecyclePhases( + web_view_->MainFrameWidget()->UpdateAllLifecyclePhases( blink::DocumentUpdateReason::kTest); size = GetPreferredSize(); EXPECT_EQ(gfx::Size(800 + scrollbar_width, 800), size); @@ -2895,7 +2884,7 @@ // Ensure the RenderViewImpl history list is properly updated when starting a // new browser-initiated navigation. TEST_F(RenderViewImplTest, HistoryIsProperlyUpdatedOnNavigation) { - blink::WebView* webview = view()->GetWebView(); + blink::WebView* webview = web_view_; EXPECT_EQ(0, webview->HistoryBackListCount()); EXPECT_EQ(0, webview->HistoryBackListCount() + webview->HistoryForwardListCount() + 1); @@ -2915,7 +2904,7 @@ // Ensure the RenderViewImpl history list is properly updated when starting a // new history browser-initiated navigation. TEST_F(RenderViewImplTest, HistoryIsProperlyUpdatedOnHistoryNavigation) { - blink::WebView* webview = view()->GetWebView(); + blink::WebView* webview = web_view_; EXPECT_EQ(0, webview->HistoryBackListCount()); EXPECT_EQ(0, webview->HistoryBackListCount() + webview->HistoryForwardListCount() + 1); @@ -2937,7 +2926,7 @@ // Ensure the RenderViewImpl history list is properly updated when starting a // new history browser-initiated navigation with should_clear_history_list TEST_F(RenderViewImplTest, HistoryIsProperlyUpdatedOnShouldClearHistoryList) { - blink::WebView* webview = view()->GetWebView(); + blink::WebView* webview = web_view_; EXPECT_EQ(0, webview->HistoryBackListCount()); EXPECT_EQ(0, webview->HistoryBackListCount() + webview->HistoryForwardListCount() + 1); @@ -3096,18 +3085,18 @@ "}" "</style>"); - EXPECT_EQ(1.f, view()->GetWebView()->PageScaleFactor()); - EXPECT_EQ(1.f, view()->GetWebView()->MinimumPageScaleFactor()); + EXPECT_EQ(1.f, web_view_->PageScaleFactor()); + EXPECT_EQ(1.f, web_view_->MinimumPageScaleFactor()); blink::web_pref::WebPreferences prefs; prefs.shrinks_viewport_contents_to_fit = true; prefs.default_minimum_page_scale_factor = 0.1f; prefs.default_maximum_page_scale_factor = 5.5f; - view()->GetWebView()->SetWebPreferences(prefs); + web_view_->SetWebPreferences(prefs); - EXPECT_EQ(1.f, view()->GetWebView()->PageScaleFactor()); - EXPECT_EQ(1.f, view()->GetWebView()->MinimumPageScaleFactor()); - EXPECT_EQ(5.5f, view()->GetWebView()->MaximumPageScaleFactor()); + EXPECT_EQ(1.f, web_view_->PageScaleFactor()); + EXPECT_EQ(1.f, web_view_->MinimumPageScaleFactor()); + EXPECT_EQ(5.5f, web_view_->MaximumPageScaleFactor()); } TEST_F(RenderViewImplDisableZoomForDSFTest, @@ -3139,10 +3128,10 @@ TestEmulatedSizeDprDsf(1005, 1102, 3.f, 1.f); } - ReceiveDisableDeviceEmulation(view()); + ReceiveDisableDeviceEmulation(); blink::DeviceEmulationParams params; - ReceiveEnableDeviceEmulation(view(), params); + ReceiveEnableDeviceEmulation(params); // Don't disable here to test that emulation is being shutdown properly. } @@ -3168,10 +3157,10 @@ TestEmulatedSizeDprDsf(1005, 1102, 3.f, device_scale); } - ReceiveDisableDeviceEmulation(view()); + ReceiveDisableDeviceEmulation(); blink::DeviceEmulationParams params; - ReceiveEnableDeviceEmulation(view(), params); + ReceiveEnableDeviceEmulation(params); // Don't disable here to test that emulation is being shutdown properly. } @@ -3278,13 +3267,13 @@ TEST_F(RenderViewImplTest, ZoomLevelUpdate) { // 0 will use the minimum zoom level, which is the default, nothing will // change. - EXPECT_FLOAT_EQ(0u, view()->GetWebView()->ZoomLevel()); + EXPECT_FLOAT_EQ(0u, web_view_->ZoomLevel()); double zoom_level = blink::PageZoomFactorToZoomLevel(0.25); // Change the zoom level to 25% and check if the view gets the change. main_frame_widget()->SetZoomLevelForTesting(zoom_level); // Use EXPECT_FLOAT_EQ here because view()->GetZoomLevel returns a float. - EXPECT_FLOAT_EQ(zoom_level, view()->GetWebView()->ZoomLevel()); + EXPECT_FLOAT_EQ(zoom_level, web_view_->ZoomLevel()); } #endif
diff --git a/content/renderer/render_view_browsertest_mac.mm b/content/renderer/render_view_browsertest_mac.mm index 6872bf8..3a33c28b 100644 --- a/content/renderer/render_view_browsertest_mac.mm +++ b/content/renderer/render_view_browsertest_mac.mm
@@ -89,7 +89,7 @@ NSEvent* arrowUpKeyDown = CmdDeadKeyEvent(NSKeyDown, kVK_UpArrow); // First test when javascript does not eat keypresses -- should scroll. - view->set_send_content_state_immediately(true); + view->GetMainRenderFrame()->set_send_content_state_immediately(true); LoadHTML(kRawHtml); render_thread_->sink().ClearMessages();
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index 2882fd9..870b5f6 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc
@@ -53,17 +53,6 @@ static base::LazyInstance<RoutingIDViewMap>::Leaky g_routing_id_view_map = LAZY_INSTANCE_INITIALIZER; -// Time, in seconds, we delay before sending content state changes (such as form -// state and scroll position) to the browser. We delay sending changes to avoid -// spamming the browser. -// To avoid having tab/session restore require sending a message to get the -// current content state during tab closing we use a shorter timeout for the -// foreground renderer. This means there is a small window of time from which -// content state is modified and not sent to session restore, but this is -// better than having to wake up all renderers during shutdown. -const int kDelaySecondsForContentStateSyncHidden = 5; -const int kDelaySecondsForContentStateSync = 1; - // static WindowOpenDisposition RenderViewImpl::NavigationPolicyToDisposition( WebNavigationPolicy policy) { @@ -165,8 +154,6 @@ GetContentClient()->renderer()->RenderViewCreated(this); - nav_state_sync_timer_.SetTaskRunner(task_runner); - #if defined(OS_ANDROID) // TODO(sgurun): crbug.com/325351 Needed only for android webview's deprecated // HandleNavigation codepath. @@ -251,17 +238,6 @@ delete this; } -void RenderViewImpl::SendFrameStateUpdates() { - // Tell each frame with pending state to send its UpdateState message. - for (int render_frame_routing_id : frames_with_pending_state_) { - RenderFrameImpl* frame = - RenderFrameImpl::FromRoutingID(render_frame_routing_id); - if (frame) - frame->SendUpdateState(); - } - frames_with_pending_state_.clear(); -} - // blink::WebViewClient ------------------------------------------------------ // TODO(csharrison): Migrate this method to WebLocalFrameClient / @@ -409,42 +385,6 @@ return view->GetWebView(); } -void RenderViewImpl::StartNavStateSyncTimerIfNecessary(RenderFrameImpl* frame) { - // Keep track of which frames have pending updates. - frames_with_pending_state_.insert(frame->GetRoutingID()); - - int delay; - if (send_content_state_immediately_) - delay = 0; - else if (GetWebView()->GetVisibilityState() != PageVisibilityState::kVisible) - delay = kDelaySecondsForContentStateSyncHidden; - else - delay = kDelaySecondsForContentStateSync; - - if (nav_state_sync_timer_.IsRunning()) { - // The timer is already running. If the delay of the timer maches the amount - // we want to delay by, then return. Otherwise stop the timer so that it - // gets started with the right delay. - if (nav_state_sync_timer_.GetCurrentDelay().InSeconds() == delay) - return; - nav_state_sync_timer_.Stop(); - } - - // Tell each frame with pending state to inform the browser. - nav_state_sync_timer_.Start(FROM_HERE, base::TimeDelta::FromSeconds(delay), - this, &RenderViewImpl::SendFrameStateUpdates); -} - -void RenderViewImpl::OnPageFrozenChanged(bool frozen) { - if (frozen) { - // Make sure browser has the latest info before the page is frozen. If the - // page goes into the back-forward cache it could be evicted and some of the - // updates lost. - nav_state_sync_timer_.Stop(); - SendFrameStateUpdates(); - } -} - // RenderView implementation --------------------------------------------------- RenderFrameImpl* RenderViewImpl::GetMainRenderFrame() {
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h index a2113fcc..59f8c47 100644 --- a/content/renderer/render_view_impl.h +++ b/content/renderer/render_view_impl.h
@@ -102,15 +102,6 @@ // Returns the RenderViewImpl for the given routing ID. static RenderViewImpl* FromRoutingID(int routing_id); - void set_send_content_state_immediately(bool value) { - send_content_state_immediately_ = value; - } - - // Starts a timer to send an UpdateState message on behalf of |frame|, if the - // timer isn't already running. This allows multiple state changing events to - // be coalesced into one update. - void StartNavStateSyncTimerIfNecessary(RenderFrameImpl* frame); - // blink::WebViewClient implementation -------------------------------------- blink::WebView* CreateView( @@ -123,7 +114,6 @@ const blink::SessionStorageNamespaceId& session_storage_namespace_id, bool& consumed_user_gesture, const absl::optional<blink::WebImpression>& impression) override; - void OnPageFrozenChanged(bool frozen) override; // RenderView implementation ------------------------------------------------- @@ -165,12 +155,6 @@ static WindowOpenDisposition NavigationPolicyToDisposition( blink::WebNavigationPolicy policy); - // Misc private functions ---------------------------------------------------- - - // In OOPIF-enabled modes, this tells each RenderFrame with a pending state - // update to inform the browser process. - void SendFrameStateUpdates(); - // --------------------------------------------------------------------------- // ADDING NEW FUNCTIONS? Please keep private functions alphabetized and put // it in the same order in the .cc file as it was in the header. @@ -190,21 +174,6 @@ // Settings ------------------------------------------------------------------ - // Whether content state (such as form state, scroll position and page - // contents) should be sent to the browser immediately. This is normally - // false, but set to true by some tests. - bool send_content_state_immediately_ = false; - - // Loading state ------------------------------------------------------------- - - // Timer used to delay the updating of nav state (see - // StartNavStateSyncTimerIfNecessary). - base::OneShotTimer nav_state_sync_timer_; - - // Set of RenderFrame routing IDs for frames that having pending UpdateState - // messages to send when the next |nav_state_sync_timer_| fires. - std::set<int> frames_with_pending_state_; - // View ---------------------------------------------------------------------- // This class owns this member, and is responsible for calling
diff --git a/content/renderer/render_widget_browsertest.cc b/content/renderer/render_widget_browsertest.cc index 322f95c..94401fca 100644 --- a/content/renderer/render_widget_browsertest.cc +++ b/content/renderer/render_widget_browsertest.cc
@@ -114,7 +114,7 @@ float scale_factors[] = {1, 1.5, 2}; for (float factor : scale_factors) { - view_->GetWebView()->SetPageScaleFactor(factor); + web_view_->SetPageScaleFactor(factor); // Hit the root EXPECT_EQ(GetCompositorElementId(),
diff --git a/extensions/common/manifest_constants.cc b/extensions/common/manifest_constants.cc index 681fa61..ad9b793 100644 --- a/extensions/common/manifest_constants.cc +++ b/extensions/common/manifest_constants.cc
@@ -139,6 +139,8 @@ const char kThemeImages[] = "images"; const char kThemeTints[] = "tints"; const char kTtsEngine[] = "tts_engine"; +const char kTtsEngineSampleRate[] = "sample_rate"; +const char kTtsEngineBufferSize[] = "buffer_size"; const char kTtsVoices[] = "voices"; const char kTtsVoicesEventTypeEnd[] = "end"; const char kTtsVoicesEventTypeError[] = "error"; @@ -584,6 +586,19 @@ "Invalid value for theme images - tints must be decimal numbers."; const char kInvalidTts[] = "Invalid value for 'tts_engine'."; +const char kInvalidTtsSampleRateFormat[] = + "Invalid format for tts_engine.sample_rate: expected integer."; +const char kInvalidTtsSampleRateRange[] = + "Invalid tts_engine.sample_rate: out of range. Expected sample_rate >= %d " + "and sample_rate <= %d."; +const char kInvalidTtsBufferSizeFormat[] = + "Invalid format for tts_engine.buffer_size: expected integer."; +const char kInvalidTtsBufferSizeRange[] = + "Invalid tts_engine.buffer_size: out of range. Expected buffer_size >= %d " + "and buffer_size <= %d."; +const char kInvalidTtsRequiresSampleRateAndBufferSize[] = + "Invalid tts_engine: requires both sample_rate and buffer_size if either " + "is specified."; const char kInvalidTtsVoices[] = "Invalid value for 'tts_engine.voices'."; const char kInvalidTtsVoicesEventTypes[] =
diff --git a/extensions/common/manifest_constants.h b/extensions/common/manifest_constants.h index ecfb4641..e968635 100644 --- a/extensions/common/manifest_constants.h +++ b/extensions/common/manifest_constants.h
@@ -141,6 +141,8 @@ extern const char kThemeImages[]; extern const char kThemeTints[]; extern const char kTtsEngine[]; +extern const char kTtsEngineSampleRate[]; +extern const char kTtsEngineBufferSize[]; extern const char kTtsVoices[]; extern const char kTtsVoicesEventTypeEnd[]; extern const char kTtsVoicesEventTypeError[]; @@ -409,6 +411,11 @@ extern const char kInvalidThemeImagesMissing[]; extern const char kInvalidThemeTints[]; extern const char kInvalidTts[]; +extern const char kInvalidTtsSampleRateFormat[]; +extern const char kInvalidTtsSampleRateRange[]; +extern const char kInvalidTtsBufferSizeFormat[]; +extern const char kInvalidTtsBufferSizeRange[]; +extern const char kInvalidTtsRequiresSampleRateAndBufferSize[]; extern const char kInvalidTtsVoices[]; extern const char kInvalidTtsVoicesEventTypes[]; extern const char kInvalidTtsVoicesGender[];
diff --git a/extensions/renderer/extension_frame_helper.cc b/extensions/renderer/extension_frame_helper.cc index 8274e636..3f468d6 100644 --- a/extensions/renderer/extension_frame_helper.cc +++ b/extensions/renderer/extension_frame_helper.cc
@@ -498,7 +498,6 @@ void ExtensionFrameHelper::SetSpatialNavigationEnabled(bool enabled) { render_frame() - ->GetRenderView() ->GetWebView() ->GetSettings() ->SetSpatialNavigationEnabled(enabled);
diff --git a/extensions/strings/extensions_strings_eu.xtb b/extensions/strings/extensions_strings_eu.xtb index fa32170..7e80600 100644 --- a/extensions/strings/extensions_strings_eu.xtb +++ b/extensions/strings/extensions_strings_eu.xtb
@@ -28,7 +28,7 @@ <translation id="4115165561519362854"><ph name="EXTENSION_NAME" /> luzapenaren bertsioak gutxienez <ph name="EXTENSION_VERSION" /> izatea behar du makinaren administratzaileak. Ezin da gaitu eguneratzen ez den arte (bertsio horretara edo berriago batera).</translation> <translation id="4233778200880751280">Ezin izan da "<ph name="ABOUT_PAGE" />" orria kargatu.</translation> <translation id="471800408830181311">Ezin izan da gako pribatua eman.</translation> -<translation id="4811956658694082538">Ezin izan da paketea instalatu utilitate-prozesuak huts egin duelako. Berrabiarazi Chrome eta saiatu berriro.</translation> +<translation id="4811956658694082538">Ezin izan da paketea instalatu zerbitzu-aplikazioaren prozesuak huts egin duelako. Berrabiarazi Chrome eta saiatu berriro.</translation> <translation id="4988792151665380515">Ezin izan da gako publikoa esportatu.</translation> <translation id="5026754133087629784">Web-ikuspegia: <ph name="WEBVIEW_TAG_NAME" /></translation> <translation id="5098647635849512368">Ezin da aurkitu bide absolutu bat paketatu nahi den direktoriorako.</translation>
diff --git a/gin/v8_initializer.cc b/gin/v8_initializer.cc index f4d6372..8bac97b6 100644 --- a/gin/v8_initializer.cc +++ b/gin/v8_initializer.cc
@@ -185,14 +185,6 @@ return file; } -enum LoadV8FileResult { - V8_LOAD_SUCCESS = 0, - V8_LOAD_FAILED_OPEN, - V8_LOAD_FAILED_MAP, - V8_LOAD_FAILED_VERIFY, // Deprecated. - V8_LOAD_MAX_VALUE -}; - #endif // defined(V8_USE_EXTERNAL_STARTUP_DATA) template <int LENGTH> @@ -210,7 +202,6 @@ return; } v8::V8::SetFlagsFromString(buffer, length - 1); - ; } } // namespace @@ -379,8 +370,7 @@ return; if (!snapshot_file.IsValid()) { - UMA_HISTOGRAM_ENUMERATION("V8.Initializer.LoadV8Snapshot.Result", - V8_LOAD_FAILED_OPEN, V8_LOAD_MAX_VALUE); + LOG(FATAL) << "Error loading V8 startup snapshot file"; return; } @@ -390,11 +380,10 @@ region = *snapshot_file_region; } - LoadV8FileResult result = V8_LOAD_SUCCESS; - if (!MapV8File(std::move(snapshot_file), region, &g_mapped_snapshot)) - result = V8_LOAD_FAILED_MAP; - UMA_HISTOGRAM_ENUMERATION("V8.Initializer.LoadV8Snapshot.Result", result, - V8_LOAD_MAX_VALUE); + if (!MapV8File(std::move(snapshot_file), region, &g_mapped_snapshot)) { + LOG(FATAL) << "Error mapping V8 startup snapshot file"; + return; + } } #if defined(OS_ANDROID)
diff --git a/gpu/command_buffer/service/external_vk_image_factory.cc b/gpu/command_buffer/service/external_vk_image_factory.cc index 115071b8..8945486 100644 --- a/gpu/command_buffer/service/external_vk_image_factory.cc +++ b/gpu/command_buffer/service/external_vk_image_factory.cc
@@ -4,6 +4,7 @@ #include "gpu/command_buffer/service/external_vk_image_factory.h" +#include "build/build_config.h" #include "components/viz/common/gpu/vulkan_context_provider.h" #include "components/viz/common/resources/resource_format_utils.h" #include "gpu/command_buffer/service/external_vk_image_backing.h" @@ -143,4 +144,54 @@ memory_buffer_type == gfx::SHARED_MEMORY_BUFFER; } +bool ExternalVkImageFactory::IsSupported(uint32_t usage, + viz::ResourceFormat format, + bool thread_safe, + gfx::GpuMemoryBufferType gmb_type, + GrContextType gr_context_type, + bool* allow_legacy_mailbox) { + bool using_interop_factory = (gr_context_type == GrContextType::kVulkan && + (usage & SHARED_IMAGE_USAGE_DISPLAY)) || + (usage & SHARED_IMAGE_USAGE_WEBGPU) || + (usage & SHARED_IMAGE_USAGE_VIDEO_DECODE); + +#if defined(OS_ANDROID) + // Scanout on Android requires explicit fence synchronization which is only + // supported by the interop factory. + using_interop_factory |= usage & SHARED_IMAGE_USAGE_SCANOUT; +#endif + + if (gmb_type != gfx::EMPTY_BUFFER) { + bool interop_factory_supports_gmb = CanImportGpuMemoryBuffer(gmb_type); + + if (!interop_factory_supports_gmb) { + return false; + } + + // If |interop_backing_factory_| supports supplied GMB type then use it + using_interop_factory |= interop_factory_supports_gmb; + } + + if (using_interop_factory) { + // TODO(crbug.com/969114): Not all shared image factory implementations + // support concurrent read/write usage. + if (usage & SHARED_IMAGE_USAGE_CONCURRENT_READ_WRITE) { + LOG(ERROR) << "Unable to create SharedImage backing: Interoperability is " + "not supported for concurrent read/write usage"; + return false; + } + + if (thread_safe) { + LOG(ERROR) << "ExternalVkImageFactory currently do not support " + "cross-thread usage."; + return false; + } + + *allow_legacy_mailbox = false; + return true; + } + + return false; +} + } // namespace gpu
diff --git a/gpu/command_buffer/service/external_vk_image_factory.h b/gpu/command_buffer/service/external_vk_image_factory.h index 96417b3..1fde360 100644 --- a/gpu/command_buffer/service/external_vk_image_factory.h +++ b/gpu/command_buffer/service/external_vk_image_factory.h
@@ -60,8 +60,12 @@ GrSurfaceOrigin surface_origin, SkAlphaType alpha_type, uint32_t usage) override; - bool CanImportGpuMemoryBuffer( - gfx::GpuMemoryBufferType memory_buffer_type) override; + bool IsSupported(uint32_t usage, + viz::ResourceFormat format, + bool thread_safe, + gfx::GpuMemoryBufferType gmb_type, + GrContextType gr_context_type, + bool* allow_legacy_mailbox) override; private: VkResult CreateExternalVkImage(VkFormat format, @@ -70,6 +74,8 @@ void TransitionToColorAttachment(VkImage image); + bool CanImportGpuMemoryBuffer(gfx::GpuMemoryBufferType memory_buffer_type); + scoped_refptr<SharedContextState> context_state_; std::unique_ptr<VulkanCommandPool> command_pool_;
diff --git a/gpu/command_buffer/service/shared_image_backing_factory.h b/gpu/command_buffer/service/shared_image_backing_factory.h index 4c5ef2ed..bb60cba0 100644 --- a/gpu/command_buffer/service/shared_image_backing_factory.h +++ b/gpu/command_buffer/service/shared_image_backing_factory.h
@@ -8,6 +8,7 @@ #include <memory> #include "components/viz/common/resources/resource_format.h" +#include "gpu/config/gpu_preferences.h" #include "gpu/ipc/common/surface_handle.h" #include "third_party/skia/include/core/SkImageInfo.h" #include "third_party/skia/include/gpu/GrTypes.h" @@ -58,10 +59,13 @@ SkAlphaType alpha_type, uint32_t usage) = 0; - // Returns true if the specified GpuMemoryBufferType can be imported using - // this factory. - virtual bool CanImportGpuMemoryBuffer( - gfx::GpuMemoryBufferType memory_buffer_type) = 0; + // Returns true if the factory is supported + virtual bool IsSupported(uint32_t usage, + viz::ResourceFormat format, + bool thread_safe, + gfx::GpuMemoryBufferType gmb_type, + GrContextType gr_context_type, + bool* allow_legacy_mailbox) = 0; }; } // namespace gpu
diff --git a/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc b/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc index 3587e70..ca0c558 100644 --- a/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc +++ b/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc
@@ -733,6 +733,48 @@ return memory_buffer_type == gfx::ANDROID_HARDWARE_BUFFER; } +bool SharedImageBackingFactoryAHB::IsSupported( + uint32_t usage, + viz::ResourceFormat format, + bool thread_safe, + gfx::GpuMemoryBufferType gmb_type, + GrContextType gr_context_type, + bool* allow_legacy_mailbox) { + bool using_interop_factory = (gr_context_type == GrContextType::kVulkan && + (usage & SHARED_IMAGE_USAGE_DISPLAY)) || + (usage & SHARED_IMAGE_USAGE_WEBGPU) || + (usage & SHARED_IMAGE_USAGE_VIDEO_DECODE) || + (usage & SHARED_IMAGE_USAGE_SCANOUT); + + if (gmb_type != gfx::EMPTY_BUFFER) { + bool interop_factory_supports_gmb = CanImportGpuMemoryBuffer(gmb_type); + + if (!interop_factory_supports_gmb) { + return false; + } + + // If |interop_backing_factory_| supports supplied GMB type then use it + using_interop_factory |= interop_factory_supports_gmb; + } + + if (using_interop_factory) { + // TODO(crbug.com/969114): Not all shared image factory implementations + // support concurrent read/write usage. + if (usage & SHARED_IMAGE_USAGE_CONCURRENT_READ_WRITE) { + LOG(ERROR) << "Unable to create SharedImage backing: Interoperability is " + "not supported for concurrent read/write usage"; + return false; + } + + if (IsFormatSupported(format)) { + *allow_legacy_mailbox = false; + return true; + } + } + + return false; +} + bool SharedImageBackingFactoryAHB::IsFormatSupported( viz::ResourceFormat format) { DCHECK_GE(format, 0);
diff --git a/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.h b/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.h index b70c4db..2961be7 100644 --- a/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.h +++ b/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.h
@@ -63,8 +63,12 @@ GrSurfaceOrigin surface_origin, SkAlphaType alpha_type, uint32_t usage) override; - bool CanImportGpuMemoryBuffer( - gfx::GpuMemoryBufferType memory_buffer_type) override; + bool IsSupported(uint32_t usage, + viz::ResourceFormat format, + bool thread_safe, + gfx::GpuMemoryBufferType gmb_type, + GrContextType gr_context_type, + bool* allow_legacy_mailbox) override; bool IsFormatSupported(viz::ResourceFormat format); private: @@ -72,6 +76,8 @@ const gfx::Size& size, viz::ResourceFormat format) const; + bool CanImportGpuMemoryBuffer(gfx::GpuMemoryBufferType memory_buffer_type); + std::unique_ptr<SharedImageBacking> MakeBacking( const Mailbox& mailbox, viz::ResourceFormat format,
diff --git a/gpu/command_buffer/service/shared_image_backing_factory_d3d.cc b/gpu/command_buffer/service/shared_image_backing_factory_d3d.cc index 11775ef..f7bea85 100644 --- a/gpu/command_buffer/service/shared_image_backing_factory_d3d.cc +++ b/gpu/command_buffer/service/shared_image_backing_factory_d3d.cc
@@ -361,4 +361,43 @@ return (memory_buffer_type == gfx::DXGI_SHARED_HANDLE); } +bool SharedImageBackingFactoryD3D::IsSupported( + uint32_t usage, + viz::ResourceFormat format, + bool thread_safe, + gfx::GpuMemoryBufferType gmb_type, + GrContextType gr_context_type, + bool* allow_legacy_mailbox) { + bool using_interop_factory = (gr_context_type == GrContextType::kVulkan && + (usage & SHARED_IMAGE_USAGE_DISPLAY)) || + (usage & SHARED_IMAGE_USAGE_WEBGPU) || + (usage & SHARED_IMAGE_USAGE_VIDEO_DECODE); + + if (gmb_type != gfx::EMPTY_BUFFER) { + bool interop_factory_supports_gmb = CanImportGpuMemoryBuffer(gmb_type); + + if (!interop_factory_supports_gmb) { + return false; + } + + // If |interop_backing_factory_| supports supplied GMB type then use it + using_interop_factory |= interop_factory_supports_gmb; + } + + if (using_interop_factory) { + // TODO(crbug.com/969114): Not all shared image factory implementations + // support concurrent read/write usage. + if (usage & SHARED_IMAGE_USAGE_CONCURRENT_READ_WRITE) { + LOG(ERROR) << "Unable to create SharedImage backing: Interoperability is " + "not supported for concurrent read/write usage"; + return false; + } + + *allow_legacy_mailbox = false; + return true; + } + + return false; +} + } // namespace gpu
diff --git a/gpu/command_buffer/service/shared_image_backing_factory_d3d.h b/gpu/command_buffer/service/shared_image_backing_factory_d3d.h index 9a13216..c17dd45b 100644 --- a/gpu/command_buffer/service/shared_image_backing_factory_d3d.h +++ b/gpu/command_buffer/service/shared_image_backing_factory_d3d.h
@@ -92,10 +92,16 @@ SkAlphaType alpha_type, uint32_t usage) override; + bool IsSupported(uint32_t usage, + viz::ResourceFormat format, + bool thread_safe, + gfx::GpuMemoryBufferType gmb_type, + GrContextType gr_context_type, + bool* allow_legacy_mailbox) override; + // Returns true if the specified GpuMemoryBufferType can be imported using // this factory. - bool CanImportGpuMemoryBuffer( - gfx::GpuMemoryBufferType memory_buffer_type) override; + bool CanImportGpuMemoryBuffer(gfx::GpuMemoryBufferType memory_buffer_type); Microsoft::WRL::ComPtr<ID3D11Device> GetDeviceForTesting() const { return d3d11_device_;
diff --git a/gpu/command_buffer/service/shared_image_backing_factory_gl_texture.cc b/gpu/command_buffer/service/shared_image_backing_factory_gl_texture.cc index c27e621..e0ac358a 100644 --- a/gpu/command_buffer/service/shared_image_backing_factory_gl_texture.cc +++ b/gpu/command_buffer/service/shared_image_backing_factory_gl_texture.cc
@@ -369,11 +369,34 @@ std::move(handle), size, format, plane, client_id, surface_handle); } -bool SharedImageBackingFactoryGLTexture::CanImportGpuMemoryBuffer( - gfx::GpuMemoryBufferType memory_buffer_type) { - // SharedImageFactory may call CanImportGpuMemoryBuffer() in all other - // SharedImageBackingFactory implementations except this one. - NOTREACHED(); +bool SharedImageBackingFactoryGLTexture::IsSupported( + uint32_t usage, + viz::ResourceFormat format, + bool thread_safe, + gfx::GpuMemoryBufferType gmb_type, + GrContextType gr_context_type, + bool* allow_legacy_mailbox) { + bool needs_interop_factory = (gr_context_type == GrContextType::kVulkan && + (usage & SHARED_IMAGE_USAGE_DISPLAY)) || + (usage & SHARED_IMAGE_USAGE_WEBGPU) || + (usage & SHARED_IMAGE_USAGE_VIDEO_DECODE); + +#if defined(OS_ANDROID) + // Scanout on Android requires explicit fence synchronization which is only + // supported by the interop factory. + needs_interop_factory |= usage & SHARED_IMAGE_USAGE_SCANOUT; +#elif defined(OS_MAC) + // On macOS, there is no separate interop factory. Any GpuMemoryBuffer-backed + // image can be used with both OpenGL and Metal. + needs_interop_factory = false; +#endif + + if (needs_interop_factory) { + // return false if it needs interop factory + return false; + } + + *allow_legacy_mailbox = gr_context_type == GrContextType::kGL && !thread_safe; return true; }
diff --git a/gpu/command_buffer/service/shared_image_backing_factory_gl_texture.h b/gpu/command_buffer/service/shared_image_backing_factory_gl_texture.h index df747b14..e09c819 100644 --- a/gpu/command_buffer/service/shared_image_backing_factory_gl_texture.h +++ b/gpu/command_buffer/service/shared_image_backing_factory_gl_texture.h
@@ -83,8 +83,12 @@ GrSurfaceOrigin surface_origin, SkAlphaType alpha_type, uint32_t usage) override; - bool CanImportGpuMemoryBuffer( - gfx::GpuMemoryBufferType memory_buffer_type) override; + bool IsSupported(uint32_t usage, + viz::ResourceFormat format, + bool thread_safe, + gfx::GpuMemoryBufferType gmb_type, + GrContextType gr_context_type, + bool* allow_legacy_mailbox) override; static std::unique_ptr<SharedImageBacking> CreateSharedImageForTest( const Mailbox& mailbox,
diff --git a/gpu/command_buffer/service/shared_image_backing_factory_ozone.cc b/gpu/command_buffer/service/shared_image_backing_factory_ozone.cc index 5c49cfc8..174558e 100644 --- a/gpu/command_buffer/service/shared_image_backing_factory_ozone.cc +++ b/gpu/command_buffer/service/shared_image_backing_factory_ozone.cc
@@ -8,6 +8,7 @@ #include <dawn_native/DawnNative.h> #include "base/logging.h" +#include "gpu/command_buffer/common/shared_image_usage.h" #include "gpu/command_buffer/service/shared_image_backing_ozone.h" #include "ui/gl/buildflags.h" @@ -72,9 +73,32 @@ return nullptr; } -bool SharedImageBackingFactoryOzone::CanImportGpuMemoryBuffer( - gfx::GpuMemoryBufferType memory_buffer_type) { - NOTIMPLEMENTED_LOG_ONCE(); +bool SharedImageBackingFactoryOzone::IsSupported( + uint32_t usage, + viz::ResourceFormat format, + bool thread_safe, + gfx::GpuMemoryBufferType gmb_type, + GrContextType gr_context_type, + bool* allow_legacy_mailbox) { + bool using_dawn = usage & SHARED_IMAGE_USAGE_WEBGPU; + bool vulkan_usage = gr_context_type == GrContextType::kVulkan && + (usage & SHARED_IMAGE_USAGE_DISPLAY); + bool using_interop_factory = + vulkan_usage || using_dawn || (usage & SHARED_IMAGE_USAGE_VIDEO_DECODE); + + if (using_interop_factory) { + // TODO(crbug.com/969114): Not all shared image factory implementations + // support concurrent read/write usage. + if (usage & SHARED_IMAGE_USAGE_CONCURRENT_READ_WRITE) { + LOG(ERROR) << "Unable to create SharedImage backing: Interoperability is " + "not supported for concurrent read/write usage"; + return false; + } + + *allow_legacy_mailbox = false; + return true; + } + return false; }
diff --git a/gpu/command_buffer/service/shared_image_backing_factory_ozone.h b/gpu/command_buffer/service/shared_image_backing_factory_ozone.h index 97ace67..f910d25 100644 --- a/gpu/command_buffer/service/shared_image_backing_factory_ozone.h +++ b/gpu/command_buffer/service/shared_image_backing_factory_ozone.h
@@ -60,8 +60,12 @@ SkAlphaType alpha_type, uint32_t usage) override; - bool CanImportGpuMemoryBuffer( - gfx::GpuMemoryBufferType memory_buffer_type) override; + bool IsSupported(uint32_t usage, + viz::ResourceFormat format, + bool thread_safe, + gfx::GpuMemoryBufferType gmb_type, + GrContextType gr_context_type, + bool* allow_legacy_mailbox) override; private: SharedContextState* const shared_context_state_;
diff --git a/gpu/command_buffer/service/shared_image_factory.cc b/gpu/command_buffer/service/shared_image_factory.cc index cab11a1..00c0378 100644 --- a/gpu/command_buffer/service/shared_image_factory.cc +++ b/gpu/command_buffer/service/shared_image_factory.cc
@@ -461,25 +461,6 @@ (usage & SHARED_IMAGE_USAGE_DISPLAY); } -bool SharedImageFactory::CanUseWrappedSkImage(uint32_t usage) const { - if (!wrapped_sk_image_factory_) - return false; - - constexpr auto kWrappedSkImageUsage = SHARED_IMAGE_USAGE_RASTER | - SHARED_IMAGE_USAGE_OOP_RASTERIZATION | - SHARED_IMAGE_USAGE_DISPLAY; - - if (gr_context_type_ != GrContextType::kGL) { - // For SkiaRenderer/Vulkan+Dawn use WrappedSkImage if the usage is only - // raster and/or display. - return (usage & kWrappedSkImageUsage) && !(usage & ~kWrappedSkImageUsage); - } else { - // For d SkiaRenderer/GL only use WrappedSkImages for OOP-R because - // CopySubTexture() doesn't use Skia. https://crbug.com/984045 - return usage == kWrappedSkImageUsage; - } -} - SharedImageBackingFactory* SharedImageFactory::GetFactoryByUsage( uint32_t usage, viz::ResourceFormat format, @@ -488,91 +469,53 @@ if (backing_factory_for_testing_) return backing_factory_for_testing_; - bool using_dawn = usage & SHARED_IMAGE_USAGE_WEBGPU; - bool vulkan_usage = gr_context_type_ == GrContextType::kVulkan && - (usage & SHARED_IMAGE_USAGE_DISPLAY); - bool gl_usage = usage & SHARED_IMAGE_USAGE_GLES2; bool share_between_threads = IsSharedBetweenThreads(usage); - bool share_between_gl_vulkan = gl_usage && vulkan_usage; - bool using_interop_factory = share_between_gl_vulkan || using_dawn || - (usage & SHARED_IMAGE_USAGE_VIDEO_DECODE) || - (share_between_threads && vulkan_usage); -#if defined(OS_ANDROID) - // Scanout on Android requires explicit fence synchronization which is only - // supported by the interop factory. - using_interop_factory |= usage & SHARED_IMAGE_USAGE_SCANOUT; -#elif defined(OS_MAC) - // On macOS, there is no separate interop factory. Any GpuMemoryBuffer-backed - // image can be used with both OpenGL and Metal. - using_interop_factory = false; -#endif - - bool using_wrapped_sk_image = !using_interop_factory && - !share_between_threads && - CanUseWrappedSkImage(usage); - if (using_wrapped_sk_image) { - if (gmb_type == gfx::EMPTY_BUFFER || - wrapped_sk_image_factory_->CanImportGpuMemoryBuffer(gmb_type)) { - *allow_legacy_mailbox = false; - return wrapped_sk_image_factory_.get(); - } + if (wrapped_sk_image_factory_ && + wrapped_sk_image_factory_->IsSupported( + usage, format, share_between_threads, gmb_type, gr_context_type_, + allow_legacy_mailbox)) { + return wrapped_sk_image_factory_.get(); } - using_interop_factory |= vulkan_usage; - - if (gmb_type != gfx::EMPTY_BUFFER) { - bool interop_factory_supports_gmb = - interop_backing_factory_ && - interop_backing_factory_->CanImportGpuMemoryBuffer(gmb_type); - - if (using_interop_factory && !interop_backing_factory_) { - LOG(ERROR) << "Unable to screate SharedImage backing: no support for the " - "requested GpuMemoryBufferType."; - return nullptr; - } - - // If |interop_backing_factory_| supports supplied GMB type then use it - // instead of |gl_backing_factory_|. - using_interop_factory |= interop_factory_supports_gmb; + // check if GpuMemoryBufferType is empty. If empty prefer + // |gl_backing_factory_| first + if (gmb_type == gfx::EMPTY_BUFFER && gl_backing_factory_ && + gl_backing_factory_->IsSupported(usage, format, share_between_threads, + gmb_type, gr_context_type_, + allow_legacy_mailbox)) { + return gl_backing_factory_.get(); } - *allow_legacy_mailbox = !using_interop_factory && - gr_context_type_ == GrContextType::kGL && - !share_between_threads; - - if (using_interop_factory) { - // TODO(crbug.com/969114): Not all shared image factory implementations - // support concurrent read/write usage. - if (usage & SHARED_IMAGE_USAGE_CONCURRENT_READ_WRITE) { - LOG(ERROR) << "Unable to create SharedImage backing: Interoperability is " - "not supported for concurrent read/write usage"; - return nullptr; - } - -#if defined(OS_ANDROID) - // On android, we sometime choose VkImage based backing factory as an - // interop if the format is not supported by the AHB backing factory. - auto* ahb_backing_factory = static_cast<SharedImageBackingFactoryAHB*>( - interop_backing_factory_.get()); - if (ahb_backing_factory && ahb_backing_factory->IsFormatSupported(format)) - return ahb_backing_factory; - if (share_between_threads) { - LOG(FATAL) << "ExternalVkImageFactory currently do not support " - "cross-thread usage."; - } - *allow_legacy_mailbox = false; - return external_vk_image_factory_.get(); -#else // defined(OS_ANDROID) - LOG_IF(ERROR, !interop_backing_factory_) - << "Unable to create SharedImage backing: GL / Vulkan interoperability " - "is not supported on this platform"; - + if (interop_backing_factory_ && + interop_backing_factory_->IsSupported( + usage, format, share_between_threads, gmb_type, gr_context_type_, + allow_legacy_mailbox)) { return interop_backing_factory_.get(); -#endif // !defined(OS_ANDROID) } - return gl_backing_factory_.get(); +#if defined(OS_ANDROID) + // On android, we sometime choose VkImage based backing factory as an + // interop if the format is not supported by the AHB backing factory. + if (external_vk_image_factory_ && + external_vk_image_factory_->IsSupported( + usage, format, share_between_threads, gmb_type, gr_context_type_, + allow_legacy_mailbox)) + return external_vk_image_factory_.get(); +#endif // !defined(OS_ANDROID) + + if (gmb_type != gfx::EMPTY_BUFFER && gl_backing_factory_ && + gl_backing_factory_->IsSupported(usage, format, share_between_threads, + gmb_type, gr_context_type_, + allow_legacy_mailbox)) { + return gl_backing_factory_.get(); + } + + LOG(ERROR) << "Could not find SharedImageBackingFactory with params: usage: " + << usage << ", format: " << format + << ", share_between_threads: " << share_between_threads + << ", gmb_type: " << gmb_type; + return nullptr; } bool SharedImageFactory::RegisterBacking(
diff --git a/gpu/command_buffer/service/shared_image_factory.h b/gpu/command_buffer/service/shared_image_factory.h index 32423ce..014e4f0d 100644 --- a/gpu/command_buffer/service/shared_image_factory.h +++ b/gpu/command_buffer/service/shared_image_factory.h
@@ -141,7 +141,6 @@ private: bool IsSharedBetweenThreads(uint32_t usage); - bool CanUseWrappedSkImage(uint32_t usage) const; SharedImageBackingFactory* GetFactoryByUsage( uint32_t usage, viz::ResourceFormat format,
diff --git a/gpu/command_buffer/service/wrapped_sk_image.cc b/gpu/command_buffer/service/wrapped_sk_image.cc index 809c6317..bda13a8 100644 --- a/gpu/command_buffer/service/wrapped_sk_image.cc +++ b/gpu/command_buffer/service/wrapped_sk_image.cc
@@ -13,6 +13,7 @@ #include "build/build_config.h" #include "components/viz/common/resources/resource_format_utils.h" #include "gpu/command_buffer/common/shared_image_trace_utils.h" +#include "gpu/command_buffer/common/shared_image_usage.h" #include "gpu/command_buffer/service/feature_info.h" #include "gpu/command_buffer/service/mailbox_manager.h" #include "gpu/command_buffer/service/shared_context_state.h" @@ -479,6 +480,41 @@ return memory_buffer_type == gfx::SHARED_MEMORY_BUFFER; } +bool WrappedSkImageFactory::CanUseWrappedSkImage( + uint32_t usage, + GrContextType gr_context_type) const { + constexpr auto kWrappedSkImageUsage = SHARED_IMAGE_USAGE_RASTER | + SHARED_IMAGE_USAGE_OOP_RASTERIZATION | + SHARED_IMAGE_USAGE_DISPLAY; + if (gr_context_type != GrContextType::kGL) { + // For SkiaRenderer/Vulkan+Dawn use WrappedSkImage if the usage is only + // raster and/or display. + return (usage & kWrappedSkImageUsage) && !(usage & ~kWrappedSkImageUsage); + } else { + // For d SkiaRenderer/GL only use WrappedSkImages for OOP-R because + // CopySubTexture() doesn't use Skia. https://crbug.com/984045 + return usage == kWrappedSkImageUsage; + } +} + +bool WrappedSkImageFactory::IsSupported(uint32_t usage, + viz::ResourceFormat format, + bool thread_safe, + gfx::GpuMemoryBufferType gmb_type, + GrContextType gr_context_type, + bool* allow_legacy_mailbox) { + if (!CanUseWrappedSkImage(usage, gr_context_type) || thread_safe) { + return false; + } + + if (gmb_type == gfx::EMPTY_BUFFER || CanImportGpuMemoryBuffer(gmb_type)) { + *allow_legacy_mailbox = false; + return true; + } + + return false; +} + std::unique_ptr<SharedImageRepresentationSkia> WrappedSkImage::ProduceSkia( SharedImageManager* manager, MemoryTypeTracker* tracker,
diff --git a/gpu/command_buffer/service/wrapped_sk_image.h b/gpu/command_buffer/service/wrapped_sk_image.h index 21f2fe3..d1b903e 100644 --- a/gpu/command_buffer/service/wrapped_sk_image.h +++ b/gpu/command_buffer/service/wrapped_sk_image.h
@@ -60,10 +60,18 @@ GrSurfaceOrigin surface_origin, SkAlphaType alpha_type, uint32_t usage) override; - bool CanImportGpuMemoryBuffer( - gfx::GpuMemoryBufferType memory_buffer_type) override; + bool IsSupported(uint32_t usage, + viz::ResourceFormat format, + bool thread_safe, + gfx::GpuMemoryBufferType gmb_type, + GrContextType gr_context_type, + bool* allow_legacy_mailbox) override; private: + bool CanImportGpuMemoryBuffer(gfx::GpuMemoryBufferType memory_buffer_type); + bool CanUseWrappedSkImage(uint32_t usage, + GrContextType gr_context_type) const; + scoped_refptr<SharedContextState> context_state_; DISALLOW_COPY_AND_ASSIGN(WrappedSkImageFactory);
diff --git a/infra/config/generated/cr-buildbucket-dev.cfg b/infra/config/generated/cr-buildbucket-dev.cfg index 82ff50b..3139c77 100644 --- a/infra/config/generated/cr-buildbucket-dev.cfg +++ b/infra/config/generated/cr-buildbucket-dev.cfg
@@ -248,7 +248,7 @@ service_account: "chromium-ci-builder-dev@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -291,7 +291,7 @@ service_account: "chromium-ci-builder-dev@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink"
diff --git a/infra/config/generated/cr-buildbucket.cfg b/infra/config/generated/cr-buildbucket.cfg index 70b4caf..061eece 100644 --- a/infra/config/generated/cr-buildbucket.cfg +++ b/infra/config/generated/cr-buildbucket.cfg
@@ -58,7 +58,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -124,7 +124,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -190,7 +190,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -256,7 +256,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -322,7 +322,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -388,7 +388,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -454,7 +454,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -520,7 +520,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -586,7 +586,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -652,7 +652,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -719,7 +719,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -786,7 +786,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -853,7 +853,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -919,7 +919,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -986,7 +986,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -1053,7 +1053,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -1120,7 +1120,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -1187,7 +1187,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -1254,7 +1254,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -1321,7 +1321,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -1388,7 +1388,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -1455,7 +1455,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -1522,7 +1522,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -1589,7 +1589,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -1656,7 +1656,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -1723,7 +1723,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -1789,7 +1789,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -1855,7 +1855,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -1921,7 +1921,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -1987,7 +1987,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -2053,7 +2053,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -2119,7 +2119,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -2185,7 +2185,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -2251,7 +2251,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -2321,7 +2321,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -2388,7 +2388,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -2454,7 +2454,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -2520,7 +2520,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -2587,7 +2587,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -2653,7 +2653,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -2719,7 +2719,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -2785,7 +2785,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -2851,7 +2851,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -2917,7 +2917,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -2984,7 +2984,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -3051,7 +3051,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -3117,7 +3117,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -3171,7 +3171,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -3187,7 +3187,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -3241,7 +3241,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -3257,7 +3257,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -3323,7 +3323,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -3389,7 +3389,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -3454,7 +3454,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -3519,7 +3519,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -3584,7 +3584,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -3649,7 +3649,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -3717,7 +3717,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -3785,7 +3785,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -3850,7 +3850,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -3915,7 +3915,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -3980,7 +3980,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -4045,7 +4045,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -4099,7 +4099,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -4115,7 +4115,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -4169,7 +4169,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -4185,7 +4185,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -4239,7 +4239,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -4255,7 +4255,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -4320,7 +4320,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -4385,7 +4385,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -4450,7 +4450,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -4515,7 +4515,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -4569,7 +4569,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -4585,7 +4585,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -4639,7 +4639,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -4655,7 +4655,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -4720,7 +4720,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -4785,7 +4785,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -4850,7 +4850,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -4915,7 +4915,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -4981,7 +4981,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -5047,7 +5047,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -5113,7 +5113,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -5179,7 +5179,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -5245,7 +5245,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -5311,7 +5311,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -5377,7 +5377,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -5444,7 +5444,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -5511,7 +5511,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -5578,7 +5578,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -5645,7 +5645,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -5714,7 +5714,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -5783,7 +5783,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -5850,7 +5850,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -5905,7 +5905,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -5921,7 +5921,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -5976,7 +5976,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -5992,7 +5992,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -6047,7 +6047,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -6063,7 +6063,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -6118,7 +6118,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -6134,7 +6134,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -6189,7 +6189,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -6205,7 +6205,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -6260,7 +6260,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -6276,7 +6276,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -6342,7 +6342,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -6408,7 +6408,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -6476,7 +6476,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -6544,7 +6544,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -6598,7 +6598,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -6614,7 +6614,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -6668,7 +6668,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -6684,7 +6684,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -6750,7 +6750,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -6816,7 +6816,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -6882,7 +6882,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -6948,7 +6948,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -7014,7 +7014,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -7080,7 +7080,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -7146,7 +7146,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -7211,7 +7211,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -7277,7 +7277,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -7343,7 +7343,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -7409,7 +7409,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -7475,7 +7475,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -7541,7 +7541,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -7607,7 +7607,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -7676,7 +7676,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -7729,7 +7729,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -7745,7 +7745,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -7811,7 +7811,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -7877,7 +7877,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -7943,7 +7943,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -8013,7 +8013,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -8079,7 +8079,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -8145,7 +8145,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -8211,7 +8211,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -8277,7 +8277,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -8343,7 +8343,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -8409,7 +8409,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -8475,7 +8475,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -8541,7 +8541,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -8607,7 +8607,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -8673,7 +8673,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -8739,7 +8739,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -8805,7 +8805,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -8871,7 +8871,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -8937,7 +8937,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -9002,7 +9002,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -9068,7 +9068,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -9134,7 +9134,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -9200,7 +9200,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -9267,7 +9267,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -9333,7 +9333,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -9399,7 +9399,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -9465,7 +9465,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -9531,7 +9531,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -9598,7 +9598,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -9664,7 +9664,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -9730,7 +9730,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -9796,7 +9796,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -9862,7 +9862,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -9928,7 +9928,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -9994,7 +9994,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -10060,7 +10060,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -10126,7 +10126,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -10192,7 +10192,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -10257,7 +10257,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -10323,7 +10323,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -10389,7 +10389,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -10455,7 +10455,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -10521,7 +10521,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -10587,7 +10587,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -10653,7 +10653,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -10719,7 +10719,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -10785,7 +10785,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -10850,7 +10850,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -10916,7 +10916,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -10982,7 +10982,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -11048,7 +11048,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -11114,7 +11114,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -11180,7 +11180,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -11246,7 +11246,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -11315,7 +11315,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -11384,7 +11384,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -11452,7 +11452,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -11521,7 +11521,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -11589,7 +11589,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -11657,7 +11657,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -11720,7 +11720,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -11785,7 +11785,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -11851,7 +11851,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -11917,7 +11917,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -11983,7 +11983,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -12049,7 +12049,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -12118,7 +12118,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -12184,7 +12184,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -12250,7 +12250,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -12316,7 +12316,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -12382,7 +12382,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -12448,7 +12448,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -12514,7 +12514,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -12583,7 +12583,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -12649,7 +12649,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -12714,7 +12714,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -12779,7 +12779,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -12844,7 +12844,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -12912,7 +12912,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -12980,7 +12980,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -13045,7 +13045,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -13110,7 +13110,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -13175,7 +13175,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -13240,7 +13240,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -13305,7 +13305,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -13370,7 +13370,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -13435,7 +13435,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -13501,7 +13501,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -13567,7 +13567,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -13633,7 +13633,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -13699,7 +13699,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -13765,7 +13765,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -13818,7 +13818,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -13834,7 +13834,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -13900,7 +13900,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -13966,7 +13966,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -14032,7 +14032,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -14098,7 +14098,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -14164,7 +14164,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -14230,7 +14230,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -14296,7 +14296,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -14362,7 +14362,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -14428,7 +14428,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -14494,7 +14494,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -14560,7 +14560,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -14626,7 +14626,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -14692,7 +14692,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -14758,7 +14758,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -14824,7 +14824,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -14890,7 +14890,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -14956,7 +14956,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -15022,7 +15022,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -15088,7 +15088,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -15154,7 +15154,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -15220,7 +15220,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -15286,7 +15286,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -15352,7 +15352,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -15418,7 +15418,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -15484,7 +15484,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -15549,7 +15549,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -15615,7 +15615,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -15681,7 +15681,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -15747,7 +15747,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -15813,7 +15813,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -15879,7 +15879,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -15950,7 +15950,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -16021,7 +16021,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -16092,7 +16092,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -16163,7 +16163,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -16216,7 +16216,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -16232,7 +16232,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -16286,7 +16286,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -16302,7 +16302,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -16356,7 +16356,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -16372,7 +16372,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -16426,7 +16426,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -16442,7 +16442,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -16495,7 +16495,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -16511,7 +16511,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -16565,7 +16565,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -16581,7 +16581,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -16635,7 +16635,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -16651,7 +16651,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -16705,7 +16705,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -16721,7 +16721,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -16795,7 +16795,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -16869,7 +16869,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -16935,7 +16935,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -17001,7 +17001,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -17067,7 +17067,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -17133,7 +17133,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -17199,7 +17199,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -17265,7 +17265,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -17331,7 +17331,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -17397,7 +17397,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -17450,7 +17450,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -17466,7 +17466,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -17519,7 +17519,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -17535,7 +17535,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -17589,7 +17589,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -17605,7 +17605,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -17658,7 +17658,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -17674,7 +17674,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -17727,7 +17727,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -17743,7 +17743,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -17796,7 +17796,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -17812,7 +17812,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -17865,7 +17865,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -17881,7 +17881,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -17934,7 +17934,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -17950,7 +17950,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -18004,7 +18004,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -18020,7 +18020,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -18074,7 +18074,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -18090,7 +18090,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -18156,7 +18156,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -18222,7 +18222,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -18288,7 +18288,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -18354,7 +18354,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -18420,7 +18420,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -18486,7 +18486,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -18552,7 +18552,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -18618,7 +18618,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -18684,7 +18684,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -18750,7 +18750,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -18805,7 +18805,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -18821,7 +18821,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -18887,7 +18887,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -18940,7 +18940,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -18956,7 +18956,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -19009,7 +19009,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -19025,7 +19025,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -19090,7 +19090,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -19155,7 +19155,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -19209,7 +19209,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -19225,7 +19225,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -19291,7 +19291,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -19357,7 +19357,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -19423,7 +19423,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -19477,7 +19477,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -19493,7 +19493,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -19547,7 +19547,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -19563,7 +19563,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -19616,7 +19616,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -19632,7 +19632,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -19698,7 +19698,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -19764,7 +19764,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -19829,7 +19829,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -19896,7 +19896,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -19962,7 +19962,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -20029,7 +20029,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -20095,7 +20095,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -20162,7 +20162,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -20228,7 +20228,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -20295,7 +20295,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -20361,7 +20361,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -20428,7 +20428,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -20494,7 +20494,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -20560,7 +20560,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -20626,7 +20626,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -20692,7 +20692,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -20758,7 +20758,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -20824,7 +20824,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -20890,7 +20890,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -20956,7 +20956,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -21022,7 +21022,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -21088,7 +21088,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -21155,7 +21155,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -21222,7 +21222,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -21288,7 +21288,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -21354,7 +21354,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -21420,7 +21420,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -21486,7 +21486,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -21552,7 +21552,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -21618,7 +21618,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -21684,7 +21684,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -21750,7 +21750,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -21813,7 +21813,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -21879,7 +21879,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -21945,7 +21945,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -22011,7 +22011,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -22077,7 +22077,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -22143,7 +22143,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -22209,7 +22209,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -22275,7 +22275,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -22341,7 +22341,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -22406,7 +22406,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -22472,7 +22472,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -22538,7 +22538,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -22604,7 +22604,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -22670,7 +22670,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -22736,7 +22736,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -22802,7 +22802,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -22868,7 +22868,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -22934,7 +22934,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -23000,7 +23000,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -23066,7 +23066,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -23132,7 +23132,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -23198,7 +23198,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -23264,7 +23264,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -23330,7 +23330,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -23396,7 +23396,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -23462,7 +23462,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -23528,7 +23528,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -23594,7 +23594,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -23660,7 +23660,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -23726,7 +23726,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -23792,7 +23792,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -23858,7 +23858,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -23924,7 +23924,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -23990,7 +23990,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -24056,7 +24056,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -24122,7 +24122,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -24188,7 +24188,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -24255,7 +24255,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -24321,7 +24321,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -24388,7 +24388,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -24454,7 +24454,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -24520,7 +24520,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 20 + value: 50 } experiments { key: "luci.use_realms" @@ -24586,7 +24586,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -24652,7 +24652,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -24718,7 +24718,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -24784,7 +24784,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -24850,7 +24850,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -24916,7 +24916,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -24990,7 +24990,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -25056,7 +25056,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -25129,7 +25129,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -25202,7 +25202,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -25275,7 +25275,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -25350,7 +25350,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -25423,7 +25423,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -25496,7 +25496,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -25569,7 +25569,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -25642,7 +25642,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -25715,7 +25715,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -25788,7 +25788,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -25861,7 +25861,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -25934,7 +25934,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -26007,7 +26007,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -26080,7 +26080,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -26147,7 +26147,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -26213,7 +26213,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -26279,7 +26279,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -26345,7 +26345,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -26412,7 +26412,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -26479,7 +26479,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -26545,7 +26545,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -26611,7 +26611,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -26677,7 +26677,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -26743,7 +26743,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -26809,7 +26809,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -26875,7 +26875,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -26941,7 +26941,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -27008,7 +27008,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -27075,7 +27075,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -27141,7 +27141,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -27207,7 +27207,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -27273,7 +27273,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -27339,7 +27339,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -27405,7 +27405,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -27471,7 +27471,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -27537,7 +27537,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -27603,7 +27603,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -27670,7 +27670,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -27736,7 +27736,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -27803,7 +27803,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -27869,7 +27869,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -27935,7 +27935,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -28001,7 +28001,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -28068,7 +28068,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -28134,7 +28134,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -28200,7 +28200,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -28266,7 +28266,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -28331,7 +28331,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -28397,7 +28397,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -28463,7 +28463,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -28530,7 +28530,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -28596,7 +28596,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -28662,7 +28662,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -28728,7 +28728,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -28793,7 +28793,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -28859,7 +28859,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -28925,7 +28925,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -28991,7 +28991,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -29057,7 +29057,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -29123,7 +29123,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -29189,7 +29189,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -29255,7 +29255,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -29321,7 +29321,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -29387,7 +29387,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -29453,7 +29453,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -29520,7 +29520,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -29587,7 +29587,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -29654,7 +29654,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -29720,7 +29720,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -29786,7 +29786,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -29855,7 +29855,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -29921,7 +29921,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -29990,7 +29990,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -30056,7 +30056,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -30122,7 +30122,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -30188,7 +30188,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -30257,7 +30257,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -30326,7 +30326,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -30395,7 +30395,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -30464,7 +30464,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -30532,7 +30532,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -30597,7 +30597,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -30663,7 +30663,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -30734,7 +30734,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -30803,7 +30803,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -30872,7 +30872,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -30940,7 +30940,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -31006,7 +31006,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -31075,7 +31075,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -31144,7 +31144,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -31212,7 +31212,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -31280,7 +31280,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -31348,7 +31348,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -31417,7 +31417,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -31483,7 +31483,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -31549,7 +31549,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -31615,7 +31615,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -31681,7 +31681,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -31747,7 +31747,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -31813,7 +31813,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -31879,7 +31879,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -31941,7 +31941,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -32001,7 +32001,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -32056,7 +32056,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -32072,7 +32072,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -32127,7 +32127,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -32143,7 +32143,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -32198,7 +32198,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -32214,7 +32214,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -32269,7 +32269,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -32285,7 +32285,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -32339,7 +32339,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -32355,7 +32355,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -32408,7 +32408,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -32424,7 +32424,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -32477,7 +32477,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -32493,7 +32493,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -32547,7 +32547,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -32563,7 +32563,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -32617,7 +32617,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -32633,7 +32633,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -32687,7 +32687,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -32703,7 +32703,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -32760,7 +32760,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -32776,7 +32776,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -32833,7 +32833,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -32849,7 +32849,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -32902,7 +32902,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -32918,7 +32918,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -32971,7 +32971,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -32987,7 +32987,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -33053,7 +33053,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -33107,7 +33107,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -33123,7 +33123,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -33177,7 +33177,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -33193,7 +33193,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -33247,7 +33247,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -33263,7 +33263,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -33317,7 +33317,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -33333,7 +33333,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -33387,7 +33387,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -33403,7 +33403,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -33457,7 +33457,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -33473,7 +33473,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -33527,7 +33527,7 @@ service_account: "chromium-ci-gpu-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -33543,7 +33543,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -33597,7 +33597,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -33613,7 +33613,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -33667,7 +33667,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -33683,7 +33683,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -33737,7 +33737,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -33753,7 +33753,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -33819,7 +33819,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -33885,7 +33885,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -33951,7 +33951,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -34017,7 +34017,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -34072,7 +34072,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -34088,7 +34088,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -34154,7 +34154,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -34220,7 +34220,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -34273,7 +34273,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -34289,7 +34289,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -34342,7 +34342,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -34358,7 +34358,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -34411,7 +34411,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -34427,7 +34427,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -34480,7 +34480,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -34496,7 +34496,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -34550,7 +34550,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -34566,7 +34566,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -34620,7 +34620,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -34636,7 +34636,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -34702,7 +34702,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -34768,7 +34768,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -34834,7 +34834,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -34900,7 +34900,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -34966,7 +34966,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -35032,7 +35032,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -35098,7 +35098,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -35464,7 +35464,7 @@ service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -36061,7 +36061,7 @@ service_account: "goma-release-testing@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -36095,7 +36095,7 @@ service_account: "goma-release-testing@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -36129,7 +36129,7 @@ service_account: "goma-release-testing@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -36163,7 +36163,7 @@ service_account: "goma-release-testing@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -36197,7 +36197,7 @@ service_account: "goma-release-testing@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -36231,7 +36231,7 @@ service_account: "goma-release-testing@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -36434,7 +36434,7 @@ service_account: "goma-release-testing@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -36468,7 +36468,7 @@ service_account: "goma-release-testing@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -36502,7 +36502,7 @@ service_account: "goma-release-testing@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -36536,7 +36536,7 @@ service_account: "goma-release-testing@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -36570,7 +36570,7 @@ service_account: "goma-release-testing@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -36604,7 +36604,7 @@ service_account: "goma-release-testing@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -36638,7 +36638,7 @@ service_account: "goma-release-testing@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -36672,7 +36672,7 @@ service_account: "goma-release-testing@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -37249,7 +37249,7 @@ } experiments { key: "luci.buildbucket.use_bbagent" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -42594,7 +42594,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -42665,7 +42665,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -42736,7 +42736,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -42807,7 +42807,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -46739,7 +46739,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -46808,7 +46808,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -46877,7 +46877,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -46946,7 +46946,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -47015,7 +47015,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -47084,7 +47084,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -47153,7 +47153,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -47222,7 +47222,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -47291,7 +47291,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -47360,7 +47360,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -47429,7 +47429,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -47498,7 +47498,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -47567,7 +47567,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -47967,7 +47967,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -57236,7 +57236,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -57308,7 +57308,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -57380,7 +57380,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -57452,7 +57452,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -57525,7 +57525,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -57598,7 +57598,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -57675,7 +57675,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -57746,7 +57746,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -57818,7 +57818,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -57891,7 +57891,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -57961,7 +57961,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -58031,7 +58031,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -58101,7 +58101,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -58171,7 +58171,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -58241,7 +58241,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -58311,7 +58311,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -58381,7 +58381,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -58454,7 +58454,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -58527,7 +58527,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -58600,7 +58600,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -58673,7 +58673,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -58745,7 +58745,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -58818,7 +58818,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -58892,7 +58892,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -58964,7 +58964,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -59037,7 +59037,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -59110,7 +59110,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -59183,7 +59183,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -59256,7 +59256,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -59329,7 +59329,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -59402,7 +59402,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -59475,7 +59475,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -59548,7 +59548,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -59621,7 +59621,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -59694,7 +59694,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -59767,7 +59767,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -59838,7 +59838,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -59911,7 +59911,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "chromium.resultdb.result_sink" @@ -60160,7 +60160,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -60191,7 +60191,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -60222,7 +60222,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -60253,7 +60253,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -60607,7 +60607,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -60638,7 +60638,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -60668,7 +60668,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -60698,7 +60698,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "luci.use_realms" @@ -60728,7 +60728,7 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 50 + value: 100 } experiments { key: "luci.use_realms"
diff --git a/infra/config/lib/builders.star b/infra/config/lib/builders.star index 6b117e8..f132c61 100644 --- a/infra/config/lib/builders.star +++ b/infra/config/lib/builders.star
@@ -593,10 +593,8 @@ # TODO(crbug.com/1143122): remove this. experiments = experiments or {} - if os and os.category == os_category.MAC: + if os and os.category in (os_category.MAC, os_category.WINDOWS): experiments["chromium.chromium_tests.use_rbe_cas"] = 100 - elif os and os.category == os_category.WINDOWS: - experiments["chromium.chromium_tests.use_rbe_cas"] = 50 kwargs["experiments"] = experiments configure_kitchen = defaults.get_value("configure_kitchen", configure_kitchen)
diff --git a/infra/config/lib/ci.star b/infra/config/lib/ci.star index 7efadac..188f042 100644 --- a/infra/config/lib/ci.star +++ b/infra/config/lib/ci.star
@@ -99,7 +99,7 @@ experiments.setdefault("chromium.resultdb.result_sink.gtests_local", 100) # Migrate executable to bbagent incrementally. - experiments.setdefault("luci.buildbucket.use_bbagent", 50) + experiments.setdefault("luci.buildbucket.use_bbagent", 100) goma_enable_ats = defaults.get_value_from_kwargs("goma_enable_ats", kwargs) if goma_enable_ats == args.COMPUTE:
diff --git a/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb index c489f2e..26279a1d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_am.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_am.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">የእርስዎን ታሪክ እና እንቅስቃሴ እዚህ ይቆጣጠሩ</translation> <translation id="6066301408025741299">ይቅር ለማለት መታ ያድርጉ።</translation> <translation id="60829778314739003">ይቀበሉ እና ይቀጥሉ</translation> +<translation id="6084848228346514841">ትሮችን ይምረጡ</translation> <translation id="6108923351542677676">ማዋቀር በሂደት ላይ…</translation> <translation id="6119050551270742952">የአሁኑ ድረ-ገጽ ማንነት በማያሳውቅ ላይ ነው</translation> <translation id="6122191549521593678">መስመር ላይ</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />የበለጠ ለመረዳት<ph name="END_LINK" /></translation> <translation id="8820817407110198400">ዕልባቶች</translation> <translation id="8840513115188359703">ከእርስዎ የGoogle መለያ ዘግተው እንዲወጡ አይደረጉም።</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} ትር}one{{count} ትሮች}other{{count} ትሮች}}</translation> <translation id="8870413625673593573">በቅርብ ጊዜ የተዘጉ</translation> <translation id="8876882697946675716">መሳሪያዎችዎን በስምረት ላይ ያቆዩዋቸው</translation> <translation id="8881801611828450202">ይህን ምስል በ<ph name="SEARCH_ENGINE" /> ውስጥ ፈልግ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb index 6636566..517790aa 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">يمكنك التحكُّم بقصصك ونشاطك هنا.</translation> <translation id="6066301408025741299">انقر للإلغاء.</translation> <translation id="60829778314739003">قبول ومتابعة</translation> +<translation id="6084848228346514841">اختيار علامات التبويب</translation> <translation id="6108923351542677676">الإعداد قيد التقدّم…</translation> <translation id="6119050551270742952">صفحة الويب الحالية في وضع التصفح المتخفي</translation> <translation id="6122191549521593678">متصل</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />مزيد من المعلومات<ph name="END_LINK" /></translation> <translation id="8820817407110198400">الإشارات المرجعية</translation> <translation id="8840513115188359703">لن يتم تسجيل خروجك من حساب Google.</translation> +<translation id="8868471676553493380">{count,plural, =1{علامة تبويب واحدة ({count})}zero{{count} علامة تبويب}two{علامتا تبويب ({count})}few{{count} علامات تبويب}many{{count} علامة تبويب}other{{count} علامة تبويب}}</translation> <translation id="8870413625673593573">العناصر المغلقة مؤخرًا</translation> <translation id="8876882697946675716">مواصلة مزامنة الأجهزة</translation> <translation id="8881801611828450202">البحث في <ph name="SEARCH_ENGINE" /> عن هذه الصورة</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_as.xtb b/ios/chrome/app/strings/resources/ios_strings_as.xtb index c300db9..5b2887b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_as.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_as.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">আপোনাৰ কাহিনীসমূহ আৰু কাৰ্যকলাপ ইয়াত নিয়ন্ত্ৰণ কৰক</translation> <translation id="6066301408025741299">বাতিল কৰিবলৈ টিপক।</translation> <translation id="60829778314739003">গ্ৰহণ কৰি অব্যাহত ৰাখক</translation> +<translation id="6084848228346514841">টেব বাছনি কৰক</translation> <translation id="6108923351542677676">ছেট আপ প্ৰক্ৰিয়া চলি আছে…</translation> <translation id="6119050551270742952">বৰ্তমানৰ ৱেবপৃষ্ঠাটো ইনক’গনিট’ত আছে</translation> <translation id="6122191549521593678">অনলাইন</translation> @@ -779,6 +780,7 @@ <ph name="BEGIN_LINK" />অধিক জানক<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Bookmarks</translation> <translation id="8840513115188359703">আপোনাক নিজৰ Google Accountৰ পৰা ছাইন আউট কৰোৱা নহয়।</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} টা টেব}one{{count} টা টেব}other{{count} টা টেব}}</translation> <translation id="8870413625673593573">শেহতীয়াকৈ বন্ধ কৰা</translation> <translation id="8876882697946675716">আপোনাৰ ডিভাইচসমূহ ছিংক কৰি ৰাখক</translation> <translation id="8881801611828450202">এই প্ৰতিচ্ছবিটোৰ কাৰণে <ph name="SEARCH_ENGINE" />ত সন্ধান কৰক</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_az.xtb b/ios/chrome/app/strings/resources/ios_strings_az.xtb index 07dd66d..d93385b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_az.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_az.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Hekayələrinizi və fəaliyyətlərinizi burada idarə edin</translation> <translation id="6066301408025741299">Ləğv etmək üçün tıklayın.</translation> <translation id="60829778314739003">Qəbul edin və Davam edin</translation> +<translation id="6084848228346514841">Tablar seçin</translation> <translation id="6108923351542677676">Quraşdırma icra olunur...</translation> <translation id="6119050551270742952">Hazırkı veb səhifə anonim rejimdədir</translation> <translation id="6122191549521593678">Onlayn</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Ətraflı məlumat<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Əlfəcinlər</translation> <translation id="8840513115188359703">Google Hesabınızdan çıxmayacaqsınız.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} Tab}other{{count} Tab}}</translation> <translation id="8870413625673593573">Son Qapadılan</translation> <translation id="8876882697946675716">Cihazlarınızı Sinxronlaşdırın</translation> <translation id="8881801611828450202">Bu Şəkil üçün <ph name="SEARCH_ENGINE" /> Axtarışı Edin</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_be.xtb b/ios/chrome/app/strings/resources/ios_strings_be.xtb index b4809e8..190110c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_be.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_be.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Кіруйце паказам артыкулаў і гісторыяй дзеянняў тут</translation> <translation id="6066301408025741299">Каб скасаваць, націсніце тут.</translation> <translation id="60829778314739003">Прыняць і працягнуць</translation> +<translation id="6084848228346514841">Выбраць укладкі</translation> <translation id="6108923351542677676">Ідзе наладка…</translation> <translation id="6119050551270742952">Вэб-старонка адкрыта ў рэжыме інкогніта</translation> <translation id="6122191549521593678">У інтэрнэце</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Даведацца больш<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Закладкі</translation> <translation id="8840513115188359703">З Уліковага запісу Google вы не выйдзеце.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} укладка}one{{count} укладка}few{{count} укладкі}many{{count} укладак}other{{count} укладкі}}</translation> <translation id="8870413625673593573">Нядаўна закрытыя</translation> <translation id="8876882697946675716">Сінхранізуйце свае прылады</translation> <translation id="8881801611828450202">Шукаць гэты відарыс праз <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_strings_bg.xtb index ca45f5c..7b638f9 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bg.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Управлявайте материалите и активността си тук</translation> <translation id="6066301408025741299">Докоснете, за да анулирате.</translation> <translation id="60829778314739003">Приемам и продължавам</translation> +<translation id="6084848228346514841">Избиране на раздели</translation> <translation id="6108923351542677676">Извършва се настройване…</translation> <translation id="6119050551270742952">Страницата е в режим „инкогнито“</translation> <translation id="6122191549521593678">Онлайн</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Научете повече<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Отметки</translation> <translation id="8840513115188359703">Няма да излезете от профила си в Google.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} раздел}other{{count} раздела}}</translation> <translation id="8870413625673593573">Наскоро затворени</translation> <translation id="8876882697946675716">Синхронизирайте устройствата си</translation> <translation id="8881801611828450202">Търсене на изобр. със: <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_strings_bs.xtb index 4206823..3662b935 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bs.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Upravljajte pričama i aktivnostima ovdje</translation> <translation id="6066301408025741299">Dodirnite da otkažete.</translation> <translation id="60829778314739003">Prihvati i nastavi</translation> +<translation id="6084848228346514841">Odaberite kartice</translation> <translation id="6108923351542677676">U toku je postavljanje…</translation> <translation id="6119050551270742952">Trenutna web stranica je u Anonimnom načinu</translation> <translation id="6122191549521593678">Na mreži</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Oznake</translation> <translation id="8840513115188359703">Nećete se odjaviti sa svog Google računa.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} kartica}one{{count} kartica}few{{count} kartice}other{{count} kartica}}</translation> <translation id="8870413625673593573">Nedavno zatvoreno</translation> <translation id="8876882697946675716">Kontinuirano sinhronizirajte uređaje</translation> <translation id="8881801611828450202">Pretraži <ph name="SEARCH_ENGINE" /> za ovu sliku</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb index 7e3deb86..84ee7242 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Controla les teves històries i la teva activitat aquí</translation> <translation id="6066301408025741299">Toca per cancel·lar.</translation> <translation id="60829778314739003">Accepta i continua</translation> +<translation id="6084848228346514841">Selecciona pestanyes</translation> <translation id="6108923351542677676">Configuració en curs...</translation> <translation id="6119050551270742952">La pàgina web actual està en mode d'incògnit</translation> <translation id="6122191549521593678">En línia</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Més informació<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Adreces d'interès</translation> <translation id="8840513115188359703">No se us tancarà la sessió del compte de Google.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} pestanya}other{{count} pestanyes}}</translation> <translation id="8870413625673593573">Tancades recentment</translation> <translation id="8876882697946675716">Mantén els dispositius sincronitzats</translation> <translation id="8881801611828450202">Cerca aquesta imatge a <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb index c152d26..2c6abdde 100644 --- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Zde můžete ovládat své příběhy a aktivity</translation> <translation id="6066301408025741299">Stahování zrušíte klepnutím.</translation> <translation id="60829778314739003">Přijmout a pokračovat</translation> +<translation id="6084848228346514841">Vybrat karty</translation> <translation id="6108923351542677676">Probíhá nastavování…</translation> <translation id="6119050551270742952">Webová stránka je v anonymním režimu</translation> <translation id="6122191549521593678">Online</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Záložky</translation> <translation id="8840513115188359703">Nebudete odhlášeni ze svého účtu Google.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} karta}few{{count} karty}many{{count} karty}other{{count} karet}}</translation> <translation id="8870413625673593573">Nedávno zavřené</translation> <translation id="8876882697946675716">Synchronizujte svá zařízení</translation> <translation id="8881801611828450202">Vyhledat tento obrázek ve službě <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb index 96a9491..b18a14a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Administrer dine historier og din aktivitet her</translation> <translation id="6066301408025741299">Tryk for at annullere.</translation> <translation id="60829778314739003">Acceptér og fortsæt</translation> +<translation id="6084848228346514841">Vælg faner</translation> <translation id="6108923351542677676">Konfigurationen er i gang...</translation> <translation id="6119050551270742952">Den aktuelle webside er i inkognitotilstand</translation> <translation id="6122191549521593678">Online</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Få flere oplysninger<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Bogmærker</translation> <translation id="8840513115188359703">Du bliver ikke logget ud af din Google-konto.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} fane}one{{count} fane}other{{count} faner}}</translation> <translation id="8870413625673593573">Senest lukkede</translation> <translation id="8876882697946675716">Bevar synkroniseringen af dine enheder</translation> <translation id="8881801611828450202">Søg på <ph name="SEARCH_ENGINE" /> efter dette billede</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb index f321bf4..37c3ddc72 100644 --- a/ios/chrome/app/strings/resources/ios_strings_el.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Ελέγξτε τις ειδήσεις και τη δραστηριότητά σας εδώ</translation> <translation id="6066301408025741299">Πατήστε για ακύρωση.</translation> <translation id="60829778314739003">Αποδοχή και συνέχεια</translation> +<translation id="6084848228346514841">Επιλογή καρτελών</translation> <translation id="6108923351542677676">Ρύθμιση σε εξέλιξη…</translation> <translation id="6119050551270742952">Ιστοσελίδα σε ανώνυμη περιήγηση</translation> <translation id="6122191549521593678">Συνδεδεμένο</translation> @@ -783,6 +784,7 @@ <ph name="BEGIN_LINK" />Μάθετε περισσότερα<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Σελιδοδείκτες</translation> <translation id="8840513115188359703">Δεν θα αποσυνδεθείτε από το Λογαριασμό σας Google.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} καρτέλα}other{{count} καρτέλες}}</translation> <translation id="8870413625673593573">Έκλεισαν πρόσφατα</translation> <translation id="8876882697946675716">Διατηρήστε συγχρονισμένες τις συσκευές σας</translation> <translation id="8881801611828450202">Αναζήτηση εικόνας σε <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb index 8a16e0d9..1542991 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Controla tus noticias y actividad aquí</translation> <translation id="6066301408025741299">Toca para cancelar.</translation> <translation id="60829778314739003">Aceptar y continuar</translation> +<translation id="6084848228346514841">Seleccionar pestañas</translation> <translation id="6108923351542677676">Configuración en curso…</translation> <translation id="6119050551270742952">Pág. incógnito</translation> <translation id="6122191549521593678">En línea</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Favoritos</translation> <translation id="8840513115188359703">No saldrás de tu cuenta de Google.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} pestaña}other{{count} pestañas}}</translation> <translation id="8870413625673593573">Cerrado recientemente</translation> <translation id="8876882697946675716">Mantén tus dispositivos sincronizados</translation> <translation id="8881801611828450202">Buscar esta imagen en <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb index 59bbb4bc5..6d9443e4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Controla tus noticias y tu actividad aquí</translation> <translation id="6066301408025741299">Toca para cancelar.</translation> <translation id="60829778314739003">Aceptar y continuar</translation> +<translation id="6084848228346514841">Seleccionar pestañas</translation> <translation id="6108923351542677676">Configuración en curso…</translation> <translation id="6119050551270742952">Sitio actual en modo incógnito</translation> <translation id="6122191549521593678">Online</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Marcadores</translation> <translation id="8840513115188359703">No se cerrará la sesión en tu cuenta de Google.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} pestaña}other{{count} pestañas}}</translation> <translation id="8870413625673593573">Cerrado recientemente</translation> <translation id="8876882697946675716">Mantén tus dispositivos sincronizados</translation> <translation id="8881801611828450202">Buscar esta imagen en <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb index 08d561f..4fae63f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_et.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Hallake oma lugusid ja tegevusi siin</translation> <translation id="6066301408025741299">Tühistamiseks puudutage.</translation> <translation id="60829778314739003">Nõustu ja jätka</translation> +<translation id="6084848228346514841">Valige vahelehed</translation> <translation id="6108923351542677676">Seadistamine on pooleli ...</translation> <translation id="6119050551270742952">Praegune veebileht on inkognito režiimis</translation> <translation id="6122191549521593678">Onlain</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Lisateave<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Järjehoidjad</translation> <translation id="8840513115188359703">Teid ei logita teie Google'i kontolt välja.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} vaheleht}other{{count} vahelehte}}</translation> <translation id="8870413625673593573">Viimati suletud</translation> <translation id="8876882697946675716">Hoidke oma seadmed sünkroonituna</translation> <translation id="8881801611828450202">Otsi pilti teenusest <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_strings_eu.xtb index c4b41aa0..62944d7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_eu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_eu.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Kontrolatu istorioak eta jarduerak hemen</translation> <translation id="6066301408025741299">Sakatu bertan behera uzteko</translation> <translation id="60829778314739003">Onartu eta egin aurrera</translation> +<translation id="6084848228346514841">Hautatu fitxak</translation> <translation id="6108923351542677676">Konfigurazioa abian da…</translation> <translation id="6119050551270742952">Web-orri hau ezkutuko moduan dago</translation> <translation id="6122191549521593678">Konektatu</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Lortu informazio gehiago<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Laster-markak</translation> <translation id="8840513115188359703">Ez da amaituko Google-ko kontuko saioa.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} fitxa}other{{count} fitxa}}</translation> <translation id="8870413625673593573">Itxitako azkenak</translation> <translation id="8876882697946675716">Mantendu gailuak sinkronizatuta</translation> <translation id="8881801611828450202">Bilatu irudia <ph name="SEARCH_ENGINE" /> bilatzailean</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb index f7e4103..98ec198 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">داستانها و فعالیت خود را اینجا کنترل کنید</translation> <translation id="6066301408025741299">برای لغو ضربه بزنید.</translation> <translation id="60829778314739003">پذیرش و ادامه</translation> +<translation id="6084848228346514841">انتخاب برگهها</translation> <translation id="6108923351542677676">تنظیم در حال انجام است...</translation> <translation id="6119050551270742952">صفحه وب کنونی در حالت ناشناس است</translation> <translation id="6122191549521593678">آنلاین</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation> <translation id="8820817407110198400">نشانکها</translation> <translation id="8840513115188359703">از حساب Google خود خارج نمیشوید.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} برگه}one{{count} برگه}other{{count} برگه}}</translation> <translation id="8870413625673593573">اخیراً بستهشده</translation> <translation id="8876882697946675716">دستگاههایتان را همگام نگه دارید</translation> <translation id="8881801611828450202">جستجوی <ph name="SEARCH_ENGINE" /> برای این تصویر</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb index d674f55..a195788 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Muuta tarinoiden ja toiminnan asetuksia täällä</translation> <translation id="6066301408025741299">Peru napauttamalla.</translation> <translation id="60829778314739003">Hyväksy ja jatka</translation> +<translation id="6084848228346514841">Valitse välilehdet</translation> <translation id="6108923351542677676">Synkronointia valmistellaan…</translation> <translation id="6119050551270742952">Nykyinen verkkosivu on incognito-tilassa</translation> <translation id="6122191549521593678">Online</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Lue lisää<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Kirjanmerkit</translation> <translation id="8840513115188359703">Sinua ei kirjata ulos Google-tililtäsi.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} välilehti}other{{count} välilehteä}}</translation> <translation id="8870413625673593573">Hiljattain suljetut</translation> <translation id="8876882697946675716">Pidä laitteesi synkronoituina</translation> <translation id="8881801611828450202">Hae kuvaa seuraavasta palvelusta: <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb index 4ed16a93..ef639f0 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Gérez vos histoires et votre activité ici</translation> <translation id="6066301408025741299">Appuyez pour annuler.</translation> <translation id="60829778314739003">Accepter et continuer</translation> +<translation id="6084848228346514841">Sélectionner des onglets</translation> <translation id="6108923351542677676">Configuration en cours...</translation> <translation id="6119050551270742952">La page Web actuelle est ouverte en mode de navigation privée</translation> <translation id="6122191549521593678">En ligne</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Favoris</translation> <translation id="8840513115188359703">Vous ne serez pas déconnecté(e) de votre compte Google.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} onglet}one{{count} onglets}other{{count} onglets}}</translation> <translation id="8870413625673593573">Éléments récemment fermés</translation> <translation id="8876882697946675716">Synchroniser vos appareils</translation> <translation id="8881801611828450202">Rechercher cette image avec <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_strings_fr.xtb index 2930287..fd5df0062 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Contrôlez vos articles et votre activité via ce menu</translation> <translation id="6066301408025741299">Appuyez sur l'écran pour annuler.</translation> <translation id="60829778314739003">Accepter et continuer</translation> +<translation id="6084848228346514841">Sélectionner des onglets</translation> <translation id="6108923351542677676">Configuration en cours…</translation> <translation id="6119050551270742952">La page Web actuelle est en mode navigation privée</translation> <translation id="6122191549521593678">En ligne</translation> @@ -783,6 +784,7 @@ <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Favoris</translation> <translation id="8840513115188359703">Vous ne serez pas déconnecté de votre compte Google.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} onglet}one{{count} onglet}other{{count} onglets}}</translation> <translation id="8870413625673593573">Récemment fermés</translation> <translation id="8876882697946675716">Synchroniser vos appareils</translation> <translation id="8881801611828450202">Chercher cette image sur <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gl.xtb b/ios/chrome/app/strings/resources/ios_strings_gl.xtb index 0f06e3f..8d1b2da 100644 --- a/ios/chrome/app/strings/resources/ios_strings_gl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_gl.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Controla as túas historias e a túa actividade aquí</translation> <translation id="6066301408025741299">Toca para cancelar.</translation> <translation id="60829778314739003">Aceptar e continuar</translation> +<translation id="6084848228346514841">Seleccionar pestanas</translation> <translation id="6108923351542677676">Configuración en curso…</translation> <translation id="6119050551270742952">O sitio web actual está no modo de incógnito</translation> <translation id="6122191549521593678">Online</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Máis información<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Marcadores</translation> <translation id="8840513115188359703">Non se pechará sesión na túa conta de Google.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} pestana}other{{count} pestanas}}</translation> <translation id="8870413625673593573">Pechados recentemente</translation> <translation id="8876882697946675716">Mantén sincronizados os teus dispositivos</translation> <translation id="8881801611828450202">Buscar esta imaxe en <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb index a42804fe..06ef56f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">अपनी खबरों और गतिविधि को यहां नियंत्रित करें</translation> <translation id="6066301408025741299">रद्द करने के लिए टैप करें.</translation> <translation id="60829778314739003">स्वीकार करें और जारी रखें</translation> +<translation id="6084848228346514841">टैब चुनें</translation> <translation id="6108923351542677676">सेटअप प्रगति में है…</translation> <translation id="6119050551270742952">मौजूदा वेबपेज गुप्त मोड में खोला गया है</translation> <translation id="6122191549521593678">ऑनलाइन</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />ज़्यादा जानें<ph name="END_LINK" /></translation> <translation id="8820817407110198400">बुकमार्क</translation> <translation id="8840513115188359703">आप अपने Google खाते से प्रस्थान नहीं करेंगे.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} टैब}one{{count} टैब}other{{count} टैब}}</translation> <translation id="8870413625673593573">हाल ही में बंद किए गए</translation> <translation id="8876882697946675716">अपने डिवाइसों को सिंक करके रखें</translation> <translation id="8881801611828450202">इस इमेज को <ph name="SEARCH_ENGINE" /> पर खोजें</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb index 2d6317af..785f6ae 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Svojim pričama i aktivnostima upravljajte ovdje</translation> <translation id="6066301408025741299">Dotaknite da biste otkazali.</translation> <translation id="60829778314739003">Prihvaćam, nastavi</translation> +<translation id="6084848228346514841">Odaberite kartice</translation> <translation id="6108923351542677676">Postavljanje je u tijeku…</translation> <translation id="6119050551270742952">Stranica u anonimnom načinu</translation> <translation id="6122191549521593678">Na mreži</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Knjižne oznake</translation> <translation id="8840513115188359703">Nećete se odjaviti s Google računa.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} kartica}one{{count} kartica}few{{count} kartice}other{{count} kartica}}</translation> <translation id="8870413625673593573">Nedavno zatvoreno</translation> <translation id="8876882697946675716">Sinkronizacija uređaja</translation> <translation id="8881801611828450202">Potraži sliku na usluzi <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_strings_hu.xtb index 63b4997..e2806ef 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Itt kezelheti a híreket és a tevékenységeket</translation> <translation id="6066301408025741299">Érintse meg a visszavonáshoz</translation> <translation id="60829778314739003">Elfogadás és folytatás</translation> +<translation id="6084848228346514841">Lapok kiválasztása</translation> <translation id="6108923351542677676">A telepítés folyamatban...</translation> <translation id="6119050551270742952">Ez a weboldal inkognitó módban van megnyitva</translation> <translation id="6122191549521593678">Online</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />További információ<ph name="END_LINK" />.</translation> <translation id="8820817407110198400">Könyvjelzők</translation> <translation id="8840513115188359703">A rendszer nem jelentkezteti ki Google-fiókjából.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} lap}other{{count} lap}}</translation> <translation id="8870413625673593573">Mostanában bezárt</translation> <translation id="8876882697946675716">Biztosítsa, hogy eszközei szinkronban maradjanak</translation> <translation id="8881801611828450202">Kép keresése a(z) <ph name="SEARCH_ENGINE" /> segítségével</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hy.xtb b/ios/chrome/app/strings/resources/ios_strings_hy.xtb index 15e7e0c..2681fece 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hy.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hy.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Կառավարեք ձեր պատմություններն ու գործողություններն այստեղ</translation> <translation id="6066301408025741299">Հպեք՝ չեղարկելու համար:</translation> <translation id="60829778314739003">Ընդունել և շարունակել</translation> +<translation id="6084848228346514841">Ընտրեք ներդիրներ</translation> <translation id="6108923351542677676">Կարգավորումն ընթացքի մեջ է…</translation> <translation id="6119050551270742952">Ընթացիկ կայքէջը ինկոգնիտո ռեժիմում է բացված</translation> <translation id="6122191549521593678">Առցանց</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Իմանալ ավելին<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Էջանիշներ</translation> <translation id="8840513115188359703">Դուք դուրս չեք գա ձեր Google հաշվից:</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} ներդիր}one{{count} ներդիր}other{{count} ներդիր}}</translation> <translation id="8870413625673593573">Վերջին փակվածները</translation> <translation id="8876882697946675716">Համաժամացրեք ձեր սարքերը</translation> <translation id="8881801611828450202">Որոնել այս պատկերը <ph name="SEARCH_ENGINE" />-ում</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb index 4d241f04..9c7098a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_id.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Kontrol artikel dan aktivitas Anda di sini</translation> <translation id="6066301408025741299">Ketuk untuk membatalkan.</translation> <translation id="60829778314739003">Setujui dan Lanjutkan</translation> +<translation id="6084848228346514841">Pilih Tab</translation> <translation id="6108923351542677676">Penyiapan sedang berlangsung...</translation> <translation id="6119050551270742952">Halaman Web saat ini sedang dalam Mode Samaran</translation> <translation id="6122191549521593678">Online</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Pelajari lebih lanjut<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Bookmark</translation> <translation id="8840513115188359703">Anda tidak akan keluar dari Akun Google.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} Tab}other{{count} Tab}}</translation> <translation id="8870413625673593573">Baru Saja Ditutup</translation> <translation id="8876882697946675716">Jaga Perangkat Anda Tetap Sinkron</translation> <translation id="8881801611828450202">Telusuri Gambar Ini di <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_is.xtb b/ios/chrome/app/strings/resources/ios_strings_is.xtb index 5e458f2..e251d55 100644 --- a/ios/chrome/app/strings/resources/ios_strings_is.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_is.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Stjórnaðu sögunum þínum og virkni hér</translation> <translation id="6066301408025741299">Ýttu til að hætta við.</translation> <translation id="60829778314739003">Samþykkja og halda áfram</translation> +<translation id="6084848228346514841">Velja flipa</translation> <translation id="6108923351542677676">Uppsetning fer fram…</translation> <translation id="6119050551270742952">Opin vefsíða er í huliðsstillingu</translation> <translation id="6122191549521593678">Á netinu</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Frekari upplýsingar<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Bókamerki</translation> <translation id="8840513115188359703">Þú verður ekki skráð(ur) út af Google reikningnum þínum.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} flipi}one{{count} flipi}other{{count} flipar}}</translation> <translation id="8870413625673593573">Nýlega lokað</translation> <translation id="8876882697946675716">Samstilltu öll tækin þín</translation> <translation id="8881801611828450202">Leita að þessari mynd á <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_it.xtb b/ios/chrome/app/strings/resources/ios_strings_it.xtb index 386f125..69fb30e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_it.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_it.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Controlla notizie e attività qui</translation> <translation id="6066301408025741299">Tocca per annullare.</translation> <translation id="60829778314739003">Accetta e continua</translation> +<translation id="6084848228346514841">Seleziona schede</translation> <translation id="6108923351542677676">Configurazione in corso…</translation> <translation id="6119050551270742952">Pagina web corrente in incognito</translation> <translation id="6122191549521593678">Online</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Scopri di più<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Preferiti</translation> <translation id="8840513115188359703">Non verrai disconnesso dal tuo Account Google.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} scheda}other{{count} schede}}</translation> <translation id="8870413625673593573">Chiusi di recente</translation> <translation id="8876882697946675716">Mantieni sincronizzati i tuoi dispositivi</translation> <translation id="8881801611828450202">Cerca questa immagine su <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb index 9848ab190..b4967050 100644 --- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">כאן אפשר לנהל את הסטוריז והפעילות שלך</translation> <translation id="6066301408025741299">יש להקיש כדי לבטל.</translation> <translation id="60829778314739003">אישור והמשך</translation> +<translation id="6084848228346514841">בחירת כרטיסיות</translation> <translation id="6108923351542677676">ההגדרה מתבצעת…</translation> <translation id="6119050551270742952">דף האינטרנט הנוכחי מוצג במצב אנונימי</translation> <translation id="6122191549521593678">אונליין</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />מידע נוסף<ph name="END_LINK" /></translation> <translation id="8820817407110198400">סימניות</translation> <translation id="8840513115188359703">פעולה זו לא תוציא אותך מחשבון Google שלך.</translation> +<translation id="8868471676553493380">{count,plural, =1{כרטיסייה אחת ({count})}two{{count} כרטיסיות}many{{count} כרטיסיות}other{{count} כרטיסיות}}</translation> <translation id="8870413625673593573">נסגרו לאחרונה</translation> <translation id="8876882697946675716">אפשר לסנכרן בין המכשירים</translation> <translation id="8881801611828450202">חיפוש התמונה הזו ב-<ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ka.xtb b/ios/chrome/app/strings/resources/ios_strings_ka.xtb index 67025bb..7baffe2 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ka.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ka.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">აქ შეგიძლიათ მართოთ ამბები და აქტივობა</translation> <translation id="6066301408025741299">შეეხეთ გასაუქმებლად.</translation> <translation id="60829778314739003">დათანხმება და გაგრძელება</translation> +<translation id="6084848228346514841">აირჩიეთ ჩანართები</translation> <translation id="6108923351542677676">მიმდინარეობს დაყენება…</translation> <translation id="6119050551270742952">ამჟამად გახსნილი ვებგვერდი ინკოგნიტო რეჟიმშია</translation> <translation id="6122191549521593678">ონლაინ</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />შეიტყვეთ მეტი<ph name="END_LINK" /></translation> <translation id="8820817407110198400">სანიშნეები</translation> <translation id="8840513115188359703">თქვენ არ გამოხვალთ თქვენი Google ანგარიშიდან.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} ჩანართი}other{{count} ჩანართი}}</translation> <translation id="8870413625673593573">ბოლოს დახურული</translation> <translation id="8876882697946675716">შეინარჩუნეთ მოწყობილობები სინქრონიზებულ მდგომარეობაში</translation> <translation id="8881801611828450202">ამ სურათის ძიება <ph name="SEARCH_ENGINE" />-ში</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_strings_kk.xtb index 807b5dd6..96a9ef06 100644 --- a/ios/chrome/app/strings/resources/ios_strings_kk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_kk.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Жаңалықтар мен әрекеттерді осы жерде басқарыңыз.</translation> <translation id="6066301408025741299">Болдырмау үшін түртіңіз.</translation> <translation id="60829778314739003">Қабылдап, жалғастыру</translation> +<translation id="6084848228346514841">Қойындыларды таңдау</translation> <translation id="6108923351542677676">Орнатылуда…</translation> <translation id="6119050551270742952">Ағымдағы веб-бет инкогнито режимінде</translation> <translation id="6122191549521593678">Онлайн</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Толығырақ<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Бетбелгілер</translation> <translation id="8840513115188359703">Google есептік жазбаңыздан шықпайсыз.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} қойынды}other{{count} қойынды}}</translation> <translation id="8870413625673593573">Жақында жабылған</translation> <translation id="8876882697946675716">Құрылғыларыңызды синхрондаңыз</translation> <translation id="8881801611828450202">Осы кескінді <ph name="SEARCH_ENGINE" /> ішінен іздеу</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_km.xtb b/ios/chrome/app/strings/resources/ios_strings_km.xtb index e9a0ab0..e252e9e3 100644 --- a/ios/chrome/app/strings/resources/ios_strings_km.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_km.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">គ្រប់គ្រងអត្ថបទ និងសកម្មភាពរបស់អ្នកនៅទីនេះ</translation> <translation id="6066301408025741299">ប៉ះដើម្បីបោះបង់</translation> <translation id="60829778314739003">ទទួលយក និងបន្ត</translation> +<translation id="6084848228346514841">ជ្រើសរើសផ្ទាំង</translation> <translation id="6108923351542677676">ការដំឡើងកំពុងដំណើរការ…</translation> <translation id="6119050551270742952">ទំព័របណ្ដាញបច្ចុប្បន្នស្ថិតនៅក្នុងមុខងារឯកជន</translation> <translation id="6122191549521593678">លើអ៊ីនធឺណិត</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />ស្វែងយល់បន្ថែម<ph name="END_LINK" /></translation> <translation id="8820817407110198400">ចំណាំ</translation> <translation id="8840513115188359703">អ្នកនឹងមិនត្រូវបាននាំចេញពីគណនី Google របស់អ្នកទេ។</translation> +<translation id="8868471676553493380">{count,plural, =1{ផ្ទាំង {count}}other{ផ្ទាំង {count}}}</translation> <translation id="8870413625673593573">បានបិទកន្លងទៅថ្មីៗ</translation> <translation id="8876882697946675716">បន្តឱ្យឧបករណ៍របស់អ្នកធ្វើសមកាលកម្ម</translation> <translation id="8881801611828450202">ស្វែងរករួបភាពនេះនៅលើ <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_strings_kn.xtb index d00ea59..2345a5f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_kn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">ನಿಮ್ಮ ಕತೆಗಳು ಮತ್ತು ಚಟುವಟಿಕೆಯನ್ನು ಇಲ್ಲಿ ನಿರ್ವಹಿಸಿ</translation> <translation id="6066301408025741299">ರದ್ದುಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ</translation> <translation id="60829778314739003">ಸಮ್ಮತಿಸಿ ಮತ್ತು ಮುಂದುವರಿಯಿರಿ</translation> +<translation id="6084848228346514841">ಟ್ಯಾಬ್ಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ</translation> <translation id="6108923351542677676">ಸೆಟಪ್ ಪ್ರಗತಿಯಲ್ಲಿದೆ...</translation> <translation id="6119050551270742952">ಪ್ರಸ್ತುತ ವೆಬ್ ಪುಟವು ಅಜ್ಞಾತ ಮೋಡ್ನಲ್ಲಿದೆ</translation> <translation id="6122191549521593678">ಆನ್ಲೈನ್</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LINK" /></translation> <translation id="8820817407110198400">ಬುಕ್ಮಾರ್ಕ್ಗಳು</translation> <translation id="8840513115188359703">ನಿಮ್ಮನ್ನು ನಿಮ್ಮ Google ಖಾತೆಯಿಂದ ಸೈನ್ ಔಟ್ ಮಾಡುವುದಿಲ್ಲ.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} ಟ್ಯಾಬ್}one{{count} ಟ್ಯಾಬ್ಗಳು}other{{count} ಟ್ಯಾಬ್ಗಳು}}</translation> <translation id="8870413625673593573">ಇತ್ತೀಚೆಗೆ ಮುಚ್ಚಿರುವುದು</translation> <translation id="8876882697946675716">ನಿಮ್ಮ ಸಾಧನಗಳನ್ನು ಸಿಂಕ್ನಲ್ಲಿ ಇರಿಸಿ</translation> <translation id="8881801611828450202">ಈ ಚಿತ್ರಕ್ಕಾಗಿ <ph name="SEARCH_ENGINE" /> ನಲ್ಲಿ ಹುಡುಕಿ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_strings_ko.xtb index 78947be8..741e4c6e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ko.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">여기에서 스토리 및 활동을 관리하세요.</translation> <translation id="6066301408025741299">취소하려면 탭하세요.</translation> <translation id="60829778314739003">동의 및 계속</translation> +<translation id="6084848228346514841">탭 선택</translation> <translation id="6108923351542677676">설정 진행 중...</translation> <translation id="6119050551270742952">현재 시크릿 모드에서 웹페이지 사용 중</translation> <translation id="6122191549521593678">온라인</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />자세히 알아보기<ph name="END_LINK" /></translation> <translation id="8820817407110198400">북마크</translation> <translation id="8840513115188359703">Google 계정에서 로그아웃되지 않습니다.</translation> +<translation id="8868471676553493380">{count,plural, =1{탭 {count}개}other{탭 {count}개}}</translation> <translation id="8870413625673593573">최근에 닫은 탭</translation> <translation id="8876882697946675716">기기 동기화 상태 유지</translation> <translation id="8881801611828450202"><ph name="SEARCH_ENGINE" />에서 이 이미지 검색</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ky.xtb b/ios/chrome/app/strings/resources/ios_strings_ky.xtb index 6d23ccb..d5d4e800 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ky.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ky.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Окуяларыңызды жана аракеттериңизди бул жерден көзөмөлдөңүз</translation> <translation id="6066301408025741299">Жокко чыгаруу үчүн таптаңыз.</translation> <translation id="60829778314739003">Кабыл алуу жана улантуу</translation> +<translation id="6084848228346514841">Өтмөктөрдү тандоо</translation> <translation id="6108923351542677676">Орнотулуп жатат…</translation> <translation id="6119050551270742952">Учурдагы веб-баракча Жашыруун режимде</translation> <translation id="6122191549521593678">Онлайн</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Кеңири маалымат<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Кыстармалар</translation> <translation id="8840513115188359703">Google Каттоо эсебиңизден чыгарылбайсыз.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} өтмөк}other{{count} өтмөк}}</translation> <translation id="8870413625673593573">Жакында жабылган</translation> <translation id="8876882697946675716">Түзмөктөрүңүздү шайкештириңиз</translation> <translation id="8881801611828450202">Бул сүрөттү <ph name="SEARCH_ENGINE" /> издөө каражатынан издөө</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_strings_lo.xtb index 88461cba..188a9e2 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lo.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lo.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">ຄວບຄຸມເລື່ອງລາວ ແລະ ການເຄື່ອນໄຫວຢູ່ບ່ອນນີ້</translation> <translation id="6066301408025741299">ແຕະເພື່ອຍົກເລີກ.</translation> <translation id="60829778314739003">ຍອມຮັບ ແລະ ສືບຕໍ່</translation> +<translation id="6084848228346514841">ເລືອກແຖບ</translation> <translation id="6108923351542677676">ກຳລັງດຳເນີນການຕັ້ງຄ່າ...</translation> <translation id="6119050551270742952">ໜ້າເວັບປັດຈຸບັນຢູ່ໃນໂໝດບໍ່ເປີດເຜີຍຕົວຕົນ</translation> <translation id="6122191549521593678">ອອນລາຍ</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />ສຶກສາເພີ່ມເຕີມ<ph name="END_LINK" /></translation> <translation id="8820817407110198400">ບຸກມາກ</translation> <translation id="8840513115188359703">ທ່ານຈະບໍ່ຖືກນຳອອກຈາກລະບົບບັນຊີ Google ຂອງທ່ານ.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} ແຖບ}other{{count} ແຖບ}}</translation> <translation id="8870413625673593573">ປິດບໍ່ດົນມານີ້</translation> <translation id="8876882697946675716">ຊິ້ງຂໍ້ມູນອຸປະກອນຂອງທ່ານສະເໝີ</translation> <translation id="8881801611828450202">ຊອກຫາຮູບນີ້ໃນ <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_strings_lt.xtb index 1fed90a..15b60f8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lt.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Čia galite valdyti savo pasakojimus ir veiklą</translation> <translation id="6066301408025741299">Palieskite, jei norite atšaukti.</translation> <translation id="60829778314739003">Sutikti ir tęsti</translation> +<translation id="6084848228346514841">Skirtukų pasirinkimas</translation> <translation id="6108923351542677676">Nustatoma…</translation> <translation id="6119050551270742952">Dabartinė svetainė atidaryta inkognito režimu</translation> <translation id="6122191549521593678">Prisijungęs</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Sužinokite daugiau<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Žymės</translation> <translation id="8840513115188359703">Nebūsite atjungti nuo „Google“ paskyros.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} skirtukas}one{{count} skirtukas}few{{count} skirtukai}many{{count} skirtuko}other{{count} skirtukų}}</translation> <translation id="8870413625673593573">Neseniai uždaryta</translation> <translation id="8876882697946675716">Įrenginių sinchronizavimas</translation> <translation id="8881801611828450202">Ieškoti „<ph name="SEARCH_ENGINE" />“ šio vaizdo</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_strings_lv.xtb index 5d8f8c31..d7e1a3ebe 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lv.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Šeit varat kontrolēt jums rādītos rakstus un darbības.</translation> <translation id="6066301408025741299">Pieskarieties, lai atceltu.</translation> <translation id="60829778314739003">Piekrist un turpināt</translation> +<translation id="6084848228346514841">Atlasiet cilnes</translation> <translation id="6108923351542677676">Notiek iestatīšana...</translation> <translation id="6119050551270742952">Šajā lapā esat inkognito</translation> <translation id="6122191549521593678">Tiešsaistē</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Uzzināt vairāk<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Grāmatzīmes</translation> <translation id="8840513115188359703">Jūs netiksiet izrakstīts no sava Google konta.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} cilne}zero{{count} ciļņu}one{{count} cilne}other{{count} cilnes}}</translation> <translation id="8870413625673593573">Nesen aizvērtas</translation> <translation id="8876882697946675716">Sinhronizējiet savas ierīces</translation> <translation id="8881801611828450202">Meklēt šo attēlu ar <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mk.xtb b/ios/chrome/app/strings/resources/ios_strings_mk.xtb index aedfe4c0..5f77429 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mk.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Контролирајте ги сториите и активноста тука</translation> <translation id="6066301408025741299">Допри за откажување.</translation> <translation id="60829778314739003">Прифати и продолжи</translation> +<translation id="6084848228346514841">Изберете картички</translation> <translation id="6108923351542677676">Поставувањето е во тек…</translation> <translation id="6119050551270742952">Веб-страницата е во режим инкогнито</translation> <translation id="6122191549521593678">Онлајн</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Дознајте повеќе<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Обележувачи</translation> <translation id="8840513115188359703">Нема да ве одјавиме од сметката на Google.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} картичка}one{{count} картичка}other{{count} картички}}</translation> <translation id="8870413625673593573">Неодамна затворено</translation> <translation id="8876882697946675716">Уредите нека ви бидат синхронизирани</translation> <translation id="8881801611828450202">Пребарај <ph name="SEARCH_ENGINE" /> за сликава</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb index 86098f59..03b945e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -493,6 +493,7 @@ <translation id="6059830886158432458">तुमच्या स्टोरी आणि अॅक्टिव्हिटी येथे नियंत्रित करा</translation> <translation id="6066301408025741299">रद्द करण्यासाठी टॅप करा.</translation> <translation id="60829778314739003">स्वीकारा आणि पुढे सुरू ठेवा</translation> +<translation id="6084848228346514841">टॅब निवडा</translation> <translation id="6108923351542677676">सेटअप प्रगती पथावर आहे...</translation> <translation id="6119050551270742952">सध्याचे वेबपेज गुप्त मोडमध्ये सुरू आहे</translation> <translation id="6122191549521593678">ऑनलाइन</translation> @@ -784,6 +785,7 @@ <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Bookmarks</translation> <translation id="8840513115188359703">तुम्हाला आपल्या Google खात्यामधून साइन आउट केले जाणार नाही.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} टॅब}other{{count} टॅब}}</translation> <translation id="8870413625673593573">अलीकडे बंद</translation> <translation id="8876882697946675716">तुमची डिव्हाइस सिंकमध्ये ठेवा</translation> <translation id="8881801611828450202">या इमेजसाठी <ph name="SEARCH_ENGINE" /> शोधा</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb index 8b26fcfa..d16f88af 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ms.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Kawal cerita dan aktiviti anda di sini</translation> <translation id="6066301408025741299">Ketik untuk membatalkan.</translation> <translation id="60829778314739003">Terima dan Teruskan</translation> +<translation id="6084848228346514841">Pilih Tab</translation> <translation id="6108923351542677676">Persediaan sedang berjalan...</translation> <translation id="6119050551270742952">Halaman web semasa dalam mod Inkognito</translation> <translation id="6122191549521593678">Dalam talian</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Ketahui lebih lanjut<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Penanda buku</translation> <translation id="8840513115188359703">Anda tidak akan dilog keluar daripada Akaun Google anda.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} Tab}other{{count} Tab}}</translation> <translation id="8870413625673593573">Ditutup Baru-baru Ini</translation> <translation id="8876882697946675716">Pastikan Peranti Anda Segerak</translation> <translation id="8881801611828450202">Cari Imej Ini di <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_my.xtb b/ios/chrome/app/strings/resources/ios_strings_my.xtb index 235360f..e1dca749 100644 --- a/ios/chrome/app/strings/resources/ios_strings_my.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_my.xtb
@@ -491,6 +491,7 @@ <translation id="6059830886158432458">သင့်သတင်းများနှင့် လုပ်ဆောင်ချက်ကို ဤနေရာတွင် ထိန်းချုပ်နိုင်သည်</translation> <translation id="6066301408025741299">မလုပ်တော့ပါ ထိပါ</translation> <translation id="60829778314739003">လက်ခံပြီး ရှေ့ဆက်ရန်</translation> +<translation id="6084848228346514841">တဘ်ရွေးပါ</translation> <translation id="6108923351542677676">စဖွင့် သတ်မှတ်မှု လုပ်ကိုင်…</translation> <translation id="6119050551270742952">လက်ရှိဝဘ်စာမျက်နှာကို ရုပ်ဖျက်မုဒ်တွင် ဖွင့်ထားသည်</translation> <translation id="6122191549521593678">အွန်လိုင်း</translation> @@ -781,6 +782,7 @@ <ph name="BEGIN_LINK" />ပိုမိုလေ့လာရန်<ph name="END_LINK" /></translation> <translation id="8820817407110198400">စာညှပ်များ</translation> <translation id="8840513115188359703">Google အကောင့်မှ သင်ထွက်သွားမည် မဟုတ်ပါ။</translation> +<translation id="8868471676553493380">{count,plural, =1{တဘ် {count} ခု}other{တဘ် {count} ခု}}</translation> <translation id="8870413625673593573">မကြာမီက ပိတ်ခဲ့</translation> <translation id="8876882697946675716">သင့်စက်များကို စင့်ခ်လုပ်ထားခြင်း</translation> <translation id="8881801611828450202">ဤရုပ်ပုံကို <ph name="SEARCH_ENGINE" /> တွင်ရှာရန်</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_strings_nl.xtb index d1292043..5029105b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_nl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Beheer hier je artikelen en activiteiten</translation> <translation id="6066301408025741299">Tik om te annuleren.</translation> <translation id="60829778314739003">Accepteren en verder</translation> +<translation id="6084848228346514841">Tabbladen selecteren</translation> <translation id="6108923351542677676">Instellen wordt uitgevoerd...</translation> <translation id="6119050551270742952">De huidige webpagina is in de incognitomodus</translation> <translation id="6122191549521593678">Online</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Meer informatie<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Bookmarks</translation> <translation id="8840513115188359703">Je wordt niet uitgelogd van je Google-account.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} tabblad}other{{count} tabbladen}}</translation> <translation id="8870413625673593573">Recent gesloten</translation> <translation id="8876882697946675716">Je apparaten synchroniseren</translation> <translation id="8881801611828450202">Zoeken op <ph name="SEARCH_ENGINE" /> naar deze afbeelding</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb index d6fa7323..3547d4ce 100644 --- a/ios/chrome/app/strings/resources/ios_strings_no.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Styr nyhetssakene dine og aktiviteten din her</translation> <translation id="6066301408025741299">Trykk for å avbryte.</translation> <translation id="60829778314739003">Godta og fortsett</translation> +<translation id="6084848228346514841">Velg faner</translation> <translation id="6108923351542677676">Konfigurasjon pågår …</translation> <translation id="6119050551270742952">Den gjeldende nettsiden er på inkognito</translation> <translation id="6122191549521593678">Pålogget</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Finn ut mer<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Bokmerker</translation> <translation id="8840513115188359703">Du blir ikke logget av Google-kontoen din.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} fane}other{{count} faner}}</translation> <translation id="8870413625673593573">Nylig lukket</translation> <translation id="8876882697946675716">Hold enhetene dine synkronisert</translation> <translation id="8881801611828450202">Søk etter dette bildet i <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb index 3e3d95f..35fc31f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -490,6 +490,7 @@ <translation id="6059830886158432458">Tutaj możesz zarządzać wyświetlanymi wiadomościami i aktywnością</translation> <translation id="6066301408025741299">Kliknij, by anulować.</translation> <translation id="60829778314739003">Zaakceptuj i kontynuuj</translation> +<translation id="6084848228346514841">Wybierz karty</translation> <translation id="6108923351542677676">Trwa konfigurowanie…</translation> <translation id="6119050551270742952">Bieżąca strona jest w trybie incognito</translation> <translation id="6122191549521593678">Online</translation> @@ -780,6 +781,7 @@ <ph name="BEGIN_LINK" />Więcej informacji<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Zakładki</translation> <translation id="8840513115188359703">Nie spowoduje to wylogowania z konta Google.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} karta}few{{count} karty}many{{count} kart}other{{count} karty}}</translation> <translation id="8870413625673593573">Ostatnio zamknięte</translation> <translation id="8876882697946675716">Synchronizacja urządzeń</translation> <translation id="8881801611828450202">Szukaj tego obrazu w: <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb index d4b4fd5..5d26784 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Controle suas matérias e atividade aqui</translation> <translation id="6066301408025741299">Toque para cancelar.</translation> <translation id="60829778314739003">Aceitar e continuar</translation> +<translation id="6084848228346514841">Selecionar guias</translation> <translation id="6108923351542677676">Configuração em andamento...</translation> <translation id="6119050551270742952">Esta pág. está no modo anônimo</translation> <translation id="6122191549521593678">On-line</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Favoritos</translation> <translation id="8840513115188359703">Você não será desconectado da sua Conta do Google.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} guia}one{{count} guia}other{{count} guias}}</translation> <translation id="8870413625673593573">Fechadas recentemente</translation> <translation id="8876882697946675716">Manter os dispositivos sincronizados</translation> <translation id="8881801611828450202">Pesquisar esta imagem no <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb index 83e0f64..4d97053 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Controle as suas notícias e atividade aqui.</translation> <translation id="6066301408025741299">Toque para cancelar.</translation> <translation id="60829778314739003">Aceitar e continuar</translation> +<translation id="6084848228346514841">Selecionar separadores</translation> <translation id="6108923351542677676">Configuração em curso…</translation> <translation id="6119050551270742952">Página Web atual – Nav. anónima</translation> <translation id="6122191549521593678">Online</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Marcadores</translation> <translation id="8840513115188359703">A sessão na sua Conta Google não é terminada.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} separador}other{{count} separadores}}</translation> <translation id="8870413625673593573">Fechadas recentemente</translation> <translation id="8876882697946675716">Mantenha os seus dispositivos sincronizados</translation> <translation id="8881801611828450202">Pesquisar esta imagem no <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_strings_ro.xtb index 0bafdb9..a638dea1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ro.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Gestionează subiectele și activitatea aici</translation> <translation id="6066301408025741299">Atinge pentru a anula.</translation> <translation id="60829778314739003">Accept și continui</translation> +<translation id="6084848228346514841">Selectează file</translation> <translation id="6108923351542677676">Configurare în curs...</translation> <translation id="6119050551270742952">Pagina web actuală este în modul Incognito</translation> <translation id="6122191549521593678">Online</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Află mai multe<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Marcaje</translation> <translation id="8840513115188359703">Nu vei fi deconectat(ă) de la Contul Google.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} filă}few{{count} file}other{{count} de file}}</translation> <translation id="8870413625673593573">Închise recent</translation> <translation id="8876882697946675716">Menține dispozitivele sincronizate</translation> <translation id="8881801611828450202">Caută această imagine cu <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb index daff92ee..081aab9 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ru.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Управление рекомендациями</translation> <translation id="6066301408025741299">Нажмите, чтобы отменить загрузку</translation> <translation id="60829778314739003">Принять и продолжить</translation> +<translation id="6084848228346514841">Выберите вкладки</translation> <translation id="6108923351542677676">Настройка…</translation> <translation id="6119050551270742952">Открыто в режиме инкогнито</translation> <translation id="6122191549521593678">Онлайн</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Подробнее…<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Закладки</translation> <translation id="8840513115188359703">Вы останетесь в аккаунте Google.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} вкладка}one{{count} вкладка}few{{count} вкладки}many{{count} вкладок}other{{count} вкладки}}</translation> <translation id="8870413625673593573">Недавно закрытые</translation> <translation id="8876882697946675716">Синхронизируйте устройства</translation> <translation id="8881801611828450202">Найти это изображение в <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb index 0cfff7a..61237cc 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Tu ovládajte svoje príbehy aj aktivitu</translation> <translation id="6066301408025741299">Sťahovanie zrušíte klepnutím.</translation> <translation id="60829778314739003">Súhlasiť a pokračovať</translation> +<translation id="6084848228346514841">Výber kariet</translation> <translation id="6108923351542677676">Inštaluje sa...</translation> <translation id="6119050551270742952">Aktuálna webová stránka je v anonymnom režime</translation> <translation id="6122191549521593678">Online</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Záložky</translation> <translation id="8840513115188359703">Neodhlásime vás z účtu Google.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} karta}few{{count} karty}many{{count} Tabs}other{{count} kariet}}</translation> <translation id="8870413625673593573">Nedávno zatvorené</translation> <translation id="8876882697946675716">Udržiavajte svoje zariadenia synchronizované</translation> <translation id="8881801611828450202">Hľadať tento obrázok v službe <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_strings_sl.xtb index 426a37e..2e9409f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Nadzirajte članke in dejavnost tukaj</translation> <translation id="6066301408025741299">Dotaknite se, da prekinete.</translation> <translation id="60829778314739003">Sprejmi in nadaljuj</translation> +<translation id="6084848228346514841">Izbira zavihkov</translation> <translation id="6108923351542677676">Poteka nastavitev …</translation> <translation id="6119050551270742952">Trenutna spletna stran je v anonimnem načinu</translation> <translation id="6122191549521593678">Dosegljiv</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Več o tem<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Zaznamki</translation> <translation id="8840513115188359703">Iz Google Računa ne boste odjavljeni.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} zavihek}one{{count} zavihek}two{{count} zavihka}few{{count} zavihki}other{{count} zavihkov}}</translation> <translation id="8870413625673593573">Nedavno zaprto</translation> <translation id="8876882697946675716">Poskrbite za sinhroniziranost naprav</translation> <translation id="8881801611828450202">Uporabi <ph name="SEARCH_ENGINE" /> za iskanje te slike</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb index 2cc49881..b0f8397 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Ovde kontrolišite priče i aktivnosti</translation> <translation id="6066301408025741299">Dodirnite da biste otkazali.</translation> <translation id="60829778314739003">Prihvatam, nastavi</translation> +<translation id="6084848228346514841">Izaberite kartice</translation> <translation id="6108923351542677676">Podešavanje je u toku...</translation> <translation id="6119050551270742952">Aktuelna veb-stranica je u režimu bez arhiviranja</translation> <translation id="6122191549521593678">Onlajn</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Obeleživači</translation> <translation id="8840513115188359703">Nećemo vas odjaviti sa Google naloga.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} kartica}one{{count} kartica}few{{count} kartice}other{{count} kartica}}</translation> <translation id="8870413625673593573">Nedavno zatvoreno</translation> <translation id="8876882697946675716">Sinhronizujte uređaje</translation> <translation id="8881801611828450202">Pretraži ovu sliku u <ph name="SEARCH_ENGINE" />-u</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb index a3dc186..c36a53eb 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Овде контролишите приче и активности</translation> <translation id="6066301408025741299">Додирните да бисте отказали.</translation> <translation id="60829778314739003">Прихватам, настави</translation> +<translation id="6084848228346514841">Изаберите картице</translation> <translation id="6108923351542677676">Подешавање је у току...</translation> <translation id="6119050551270742952">Актуелна веб-страница је у режиму без архивирања</translation> <translation id="6122191549521593678">Онлајн</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Сазнајте више<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Обележивачи</translation> <translation id="8840513115188359703">Нећемо вас одјавити са Google налога.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} картица}one{{count} картица}few{{count} картице}other{{count} картица}}</translation> <translation id="8870413625673593573">Недавно затворено</translation> <translation id="8876882697946675716">Синхронизујте уређаје</translation> <translation id="8881801611828450202">Претражи ову слику у <ph name="SEARCH_ENGINE" />-у</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sv.xtb b/ios/chrome/app/strings/resources/ios_strings_sv.xtb index 770278fe..726e240 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sv.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Styr dina berättelser och din aktivitet här</translation> <translation id="6066301408025741299">Avbryt genom att trycka här.</translation> <translation id="60829778314739003">Godkänn och fortsätt</translation> +<translation id="6084848228346514841">Välj flikar</translation> <translation id="6108923351542677676">Konfigurationen pågår ...</translation> <translation id="6119050551270742952">Webbsidan är i inkognitoläge</translation> <translation id="6122191549521593678">Online</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Läs mer<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Bokmärken</translation> <translation id="8840513115188359703">Du loggas inte ut från Google-kontot.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} flik}other{{count} flikar}}</translation> <translation id="8870413625673593573">Nyligen stängda</translation> <translation id="8876882697946675716">Håll dina enheter synkroniserade</translation> <translation id="8881801611828450202">Sök på <ph name="SEARCH_ENGINE" /> efter denna bild</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_strings_sw.xtb index 92ebe51..e722900 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Dhibiti hadithi na shughuli zako hapa</translation> <translation id="6066301408025741299">Gusa ili kughairi.</translation> <translation id="60829778314739003">Kubali na Uendelee</translation> +<translation id="6084848228346514841">Chagua Vichupo</translation> <translation id="6108923351542677676">Usanidi unaendelea...</translation> <translation id="6119050551270742952">Ukurasa wa sasa wa Wavuti uko katika Hali Fiche</translation> <translation id="6122191549521593678">Mtandaoni</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Pata maelezo zaidi<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Alamisho</translation> <translation id="8840513115188359703">Hutaondolewa katika Akaunti yako ya Google.</translation> +<translation id="8868471676553493380">{count,plural, =1{Kichupo {count}}other{Vichupo {count}}}</translation> <translation id="8870413625673593573">Zilizofungwa Hivi Karibuni</translation> <translation id="8876882697946675716">Hakikisha Vifaa Vyako Vinasawazishwa</translation> <translation id="8881801611828450202">Tafuta Picha Hii kwenye <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb index 6483621..dc4952b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -286,7 +286,7 @@ <translation id="3915450441834151894">సైట్ సమాచారం</translation> <translation id="3922310737605261887">కాపీ చేసిన వచనం కోసం వెతకండి</translation> <translation id="3928666092801078803">నా డేటాను కలపండి</translation> -<translation id="3929457972718048006">చిరునామాలు</translation> +<translation id="3929457972718048006">అడ్రస్లు</translation> <translation id="3943492037546055397">పాస్వర్డ్లు</translation> <translation id="3967822245660637423">డౌన్లోడ్ పూర్తయింది</translation> <translation id="3968505803272650567">ఆసక్తులను మేనేజ్ చేయండి</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb index ac049d8d..78b56bf 100644 --- a/ios/chrome/app/strings/resources/ios_strings_th.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">ควบคุมเรื่องราวและกิจกรรมของคุณได้ที่นี่</translation> <translation id="6066301408025741299">แตะเพื่อยกเลิก</translation> <translation id="60829778314739003">ยอมรับและดำเนินการต่อ</translation> +<translation id="6084848228346514841">เลือกแท็บ</translation> <translation id="6108923351542677676">กำลังดำเนินการตั้งค่า…</translation> <translation id="6119050551270742952">หน้าเว็บนี้อยู่ในโหมดไม่ระบุตัวตน</translation> <translation id="6122191549521593678">ออนไลน์</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />ดูข้อมูลเพิ่มเติม<ph name="END_LINK" /></translation> <translation id="8820817407110198400">บุ๊กมาร์ก</translation> <translation id="8840513115188359703">คุณจะไม่ออกจากระบบบัญชี Google</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} แท็บ}other{{count} แท็บ}}</translation> <translation id="8870413625673593573">เพิ่งปิด</translation> <translation id="8876882697946675716">ซิงค์อุปกรณ์อยู่เสมอ</translation> <translation id="8881801611828450202">ค้นหาภาพนี้ใน <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb index f6958ef..f6ba147 100644 --- a/ios/chrome/app/strings/resources/ios_strings_tr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Haberlerinizi ve aktivitenizi buradan yönetin</translation> <translation id="6066301408025741299">İptal etmek için hafifçe vurun.</translation> <translation id="60829778314739003">Kabul Et ve Devam Et</translation> +<translation id="6084848228346514841">Sekme Seçin</translation> <translation id="6108923351542677676">Kurulum devam ediyor…</translation> <translation id="6119050551270742952">Geçerli Web sayfası Gizli modda</translation> <translation id="6122191549521593678">Çevrimiçi</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Daha fazla bilgi<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Yer işaretleri</translation> <translation id="8840513115188359703">Google Hesaplarınızdaki oturumlarınız kapatılmaz.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} Sekme}other{{count} Sekme}}</translation> <translation id="8870413625673593573">Son Kapatılan</translation> <translation id="8876882697946675716">Cihazlarınızı Senkronize Durumda Tutun</translation> <translation id="8881801611828450202">Bu Resmi <ph name="SEARCH_ENGINE" /> Üzerinde Ara</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_strings_uk.xtb index 38a1962..e78408a0 100644 --- a/ios/chrome/app/strings/resources/ios_strings_uk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Керуйте новинами й діями тут</translation> <translation id="6066301408025741299">Торкніться, щоб скасувати.</translation> <translation id="60829778314739003">Прийняти та продовжити</translation> +<translation id="6084848228346514841">Виберіть вкладки</translation> <translation id="6108923351542677676">Виконується налаштування…</translation> <translation id="6119050551270742952">Поточна сторінка в анонімному режимі</translation> <translation id="6122191549521593678">Онлайн</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Докладніше<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Закладки</translation> <translation id="8840513115188359703">Ви не вийдете з облікового запису Google.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} вкладка}one{{count} вкладка}few{{count} вкладки}many{{count} вкладок}other{{count} вкладки}}</translation> <translation id="8870413625673593573">Нещодавно закриті</translation> <translation id="8876882697946675716">Синхронізуйте свої пристрої</translation> <translation id="8881801611828450202">Пошук цього зображення в <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb index c99e0d21..0edf02c1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Kiểm soát tin bài và hoạt động của bạn tại đây</translation> <translation id="6066301408025741299">Nhấn để hủy.</translation> <translation id="60829778314739003">Đồng ý và tiếp tục</translation> +<translation id="6084848228346514841">Chọn các thẻ</translation> <translation id="6108923351542677676">Đang thiết lập…</translation> <translation id="6119050551270742952">Trang web hiện tại đang ở chế độ ẩn danh</translation> <translation id="6122191549521593678">Trực tuyến</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Tìm hiểu thêm<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Dấu trang</translation> <translation id="8840513115188359703">Bạn sẽ không được đăng xuất khỏi Tài khoản Google của mình.</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} thẻ}other{{count} thẻ}}</translation> <translation id="8870413625673593573">Các thẻ đã Đóng gần đây</translation> <translation id="8876882697946675716">Đồng bộ hóa các thiết bị của bạn</translation> <translation id="8881801611828450202">Tìm hình ảnh này trên <ph name="SEARCH_ENGINE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb index 0484359..dd326cf1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">在此处控制您的报道和活动</translation> <translation id="6066301408025741299">点按可取消。</translation> <translation id="60829778314739003">接受并继续</translation> +<translation id="6084848228346514841">选择标签页</translation> <translation id="6108923351542677676">正在设置…</translation> <translation id="6119050551270742952">当前网页处于无痕模式</translation> <translation id="6122191549521593678">在线</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />了解详情<ph name="END_LINK" /></translation> <translation id="8820817407110198400">书签</translation> <translation id="8840513115188359703">您不会因此而退出自己的 Google 帐号。</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} 个标签页}other{{count} 个标签页}}</translation> <translation id="8870413625673593573">最近关闭的标签页</translation> <translation id="8876882697946675716">让您的各部设备保持同步</translation> <translation id="8881801611828450202">在 <ph name="SEARCH_ENGINE" /> 中搜索此图片</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb index 02dd9fa..aa5c298 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">請在這裡控管你的報導和活動</translation> <translation id="6066301408025741299">輕觸即可取消。</translation> <translation id="60829778314739003">接受並繼續</translation> +<translation id="6084848228346514841">選取分頁</translation> <translation id="6108923351542677676">設定中…</translation> <translation id="6119050551270742952">目前的網頁處於無痕模式</translation> <translation id="6122191549521593678">線上</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation> <translation id="8820817407110198400">書籤</translation> <translation id="8840513115188359703">您不會因此登出 Google 帳戶。</translation> +<translation id="8868471676553493380">{count,plural, =1{{count} 個分頁}other{{count} 個分頁}}</translation> <translation id="8870413625673593573">最近關閉的分頁</translation> <translation id="8876882697946675716">讓你的裝置保持同步</translation> <translation id="8881801611828450202">透過 <ph name="SEARCH_ENGINE" /> 搜尋這張圖片</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zu.xtb b/ios/chrome/app/strings/resources/ios_strings_zu.xtb index e55895b6..9515d8f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zu.xtb
@@ -492,6 +492,7 @@ <translation id="6059830886158432458">Lawula izindaba nomsebenzi wakho lapha</translation> <translation id="6066301408025741299">Thepha ukuze ukhansele.</translation> <translation id="60829778314739003">Yamukela futhi Uqhubeke</translation> +<translation id="6084848228346514841">Khetha amathebhu</translation> <translation id="6108923351542677676">Ukusetha kuyaqhubeka…</translation> <translation id="6119050551270742952">Ikhasi lewebhu lamanje liku-Incognito</translation> <translation id="6122191549521593678">Ku-inthanethi</translation> @@ -782,6 +783,7 @@ <ph name="BEGIN_LINK" />Funda kabanzi<ph name="END_LINK" /></translation> <translation id="8820817407110198400">Amabhukhimakhi</translation> <translation id="8840513115188359703">Ngeke uze ukhishwe ngemvume ku-Akhawunti yakho ye-Google.</translation> +<translation id="8868471676553493380">{count,plural, =1{Ithebhu engu-{count}}one{Amathebhu angu-{count}}other{Amathebhu angu-{count}}}</translation> <translation id="8870413625673593573">Okuvalwe kamuva</translation> <translation id="8876882697946675716">Gcina Amadivayisi Akho Ekuvumelaniseni</translation> <translation id="8881801611828450202">Sesha i-<ph name="SEARCH_ENGINE" /> yalesi sithombe</translation>
diff --git a/ios/chrome/browser/DEPS b/ios/chrome/browser/DEPS index 7b7a431..a171764f 100644 --- a/ios/chrome/browser/DEPS +++ b/ios/chrome/browser/DEPS
@@ -88,6 +88,7 @@ "+components/shared_highlighting", "+components/signin/core/browser", "+components/signin/public", + "+components/signin/public/base", "+components/signin/ios/browser", "+components/ssl_errors", "+components/suggestions",
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc index 02019e52..7ec5518 100644 --- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc +++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
@@ -445,7 +445,7 @@ "managed by the toolbar container coordinator rather than BVC."; const char kUpdateHistoryEntryPointsInIncognitoName[] = - "Update history entry points in Incongito."; + "Update history entry points in Incognito."; const char kUpdateHistoryEntryPointsInIncognitoDescription[] = "When enabled, the entry points to history UI from Incognito mode will be " "removed.";
diff --git a/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_egtest.mm b/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_egtest.mm index d91f6262..51ac4990 100644 --- a/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_egtest.mm +++ b/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_egtest.mm
@@ -83,9 +83,13 @@ [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity]; [ChromeEarlGreyUI tapSettingsMenuButton:GoogleServicesSettingsButton()]; - [[EarlGrey selectElementWithMatcher: - grey_accessibilityLabel(l10n_util::GetNSString( - IDS_IOS_OPTIONS_ACCOUNTS_SIGN_OUT_TURN_OFF_SYNC))] + + [[[EarlGrey selectElementWithMatcher: + grey_accessibilityLabel(l10n_util::GetNSString( + IDS_IOS_OPTIONS_ACCOUNTS_SIGN_OUT_TURN_OFF_SYNC))] + usingSearchAction:grey_scrollInDirection(kGREYDirectionDown, 200) + onElementWithMatcher:grey_accessibilityID( + kManageSyncTableViewAccessibilityIdentifier)] performAction:grey_tap()]; [[EarlGrey
diff --git a/ios/third_party/webkit/BUILD.gn b/ios/third_party/webkit/BUILD.gn index 75c27d7..7d9f967 100644 --- a/ios/third_party/webkit/BUILD.gn +++ b/ios/third_party/webkit/BUILD.gn
@@ -144,6 +144,14 @@ "--clean", "--output_dir", rebase_path("$_webkit_mac_out_base_dir"), + + # The arguments below allow building with Xcode 11.4 on macOS 11. + "MACOSX_DEPLOYMENT_TARGET=10.15", + "TARGET_MAC_OS_X_VERSION_MAJOR=101500", + "MAC_OS_X_VERSION_ACTUAL=101507", + "MAC_OS_X_VERSION_MAJOR=101500", + "MAC_OS_X_VERSION_MINOR=1507", + "MAC_OS_X_PRODUCT_BUILD_VERSION=19H2", ] }
diff --git a/native_client_sdk/src/tools/create_nmf.py b/native_client_sdk/src/tools/create_nmf.py index 7139444..cc3f7cb8 100755 --- a/native_client_sdk/src/tools/create_nmf.py +++ b/native_client_sdk/src/tools/create_nmf.py
@@ -132,7 +132,7 @@ """Wrap elf.ParseElfHeader to return raise this module's Error on failure.""" try: return elf.ParseElfHeader(path) - except elf.Error, e: + except elf.Error as e: raise Error(str(e)) @@ -248,14 +248,14 @@ self.lib_path) except get_shared_deps.NoObjdumpError: raise Error('No objdump executable found (see --help for more info)') - except get_shared_deps.Error, e: + except get_shared_deps.Error as e: raise Error(str(e)) self.needed = {} # all_files is a dictionary mapping filename to architecture. self.needed # should be a dictionary of filename to ArchFile. - for filename, arch in all_files.iteritems(): + for filename, arch in all_files.items(): name = os.path.basename(filename) self.needed[filename] = ArchFile(name=name, path=filename, arch=arch) @@ -286,7 +286,7 @@ main_dir = '' arch_to_main_dir[arch] = main_dir - for arch_file in self.needed.itervalues(): + for arch_file in self.needed.values(): prefix = '' if DirectoryTreeContainsFile(self.nmf_root, arch_file.path): # This file is already in the nmf_root tree, so it does not need to be @@ -317,7 +317,7 @@ destination_dir: The destination directory for staging the dependencies """ assert self.needed is not None - for arch_file in self.needed.itervalues(): + for arch_file in self.needed.values(): source = arch_file.path destination = os.path.join(destination_dir, arch_file.url) @@ -377,7 +377,7 @@ url=url)) for key, arch, url in self.extra_files] - manifest_items = needed.items() + extra_files_kv + manifest_items = list(needed.items()) + extra_files_kv # Add dynamic loader to the program section. for need, archinfo in manifest_items: @@ -703,7 +703,7 @@ if __name__ == '__main__': try: rtn = main(sys.argv[1:]) - except Error, e: + except Error as e: sys.stderr.write('%s: %s\n' % (os.path.basename(__file__), e)) rtn = 1 except KeyboardInterrupt:
diff --git a/native_client_sdk/src/tools/getos.py b/native_client_sdk/src/tools/getos.py index c5fe5c2..5324c8ed 100755 --- a/native_client_sdk/src/tools/getos.py +++ b/native_client_sdk/src/tools/getos.py
@@ -10,6 +10,8 @@ Toolchain to invoke. """ +from __future__ import print_function + import argparse import os import re @@ -263,7 +265,7 @@ out = platform if out: - print out + print(out) return 0
diff --git a/native_client_sdk/src/tools/lib/elf.py b/native_client_sdk/src/tools/lib/elf.py index 84519de..c860a5a6 100644 --- a/native_client_sdk/src/tools/lib/elf.py +++ b/native_client_sdk/src/tools/lib/elf.py
@@ -37,7 +37,7 @@ raise Error("error parsing elf header: %s" % path) e_ident, _, e_machine = header[:3] - elf_magic = '\x7fELF' + elf_magic = b'\x7fELF' if e_ident[:4] != elf_magic: raise Error('Not a valid NaCl executable: %s' % path)
diff --git a/native_client_sdk/src/tools/lib/get_shared_deps.py b/native_client_sdk/src/tools/lib/get_shared_deps.py index 5325df9e..99d2f03 100644 --- a/native_client_sdk/src/tools/lib/get_shared_deps.py +++ b/native_client_sdk/src/tools/lib/get_shared_deps.py
@@ -89,7 +89,7 @@ def _GetNeededDynamic(main_files, objdump, lib_path): examined = set() all_files, unexamined = GleanFromObjdump(main_files, None, objdump, lib_path) - for arch in all_files.itervalues(): + for arch in all_files.values(): if unexamined: if arch == 'arm': unexamined.add((LOADER_ARM, arch)) @@ -106,7 +106,7 @@ # Call GleanFromObjdump() for each architecture. needed = set() - for arch, files in files_to_examine.iteritems(): + for arch, files in files_to_examine.items(): new_files, new_needed = GleanFromObjdump(files, arch, objdump, lib_path) all_files.update(new_files) needed |= new_needed @@ -117,7 +117,7 @@ # With the runnable-ld.so scheme we have today, the proper name of # the dynamic linker should be excluded from the list of files. ldso = [LD_NACL_MAP[arch] for arch in set(OBJDUMP_ARCH_MAP.values())] - for filename, arch in all_files.items(): + for filename, arch in list(all_files.items()): name = os.path.basename(filename) if name in ldso: del all_files[filename] @@ -156,10 +156,11 @@ for path in _FindLibsInPath(filename, lib_path): full_paths.add(path) - cmd = [objdump, '-p'] + list(full_paths) + cmd = [objdump, '-p'] + list(sorted(full_paths)) env = {'LANG': 'en_US.UTF-8'} proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, bufsize=-1, + universal_newlines=True, env=env) input_info = {}
diff --git a/native_client_sdk/src/tools/oshelpers.py b/native_client_sdk/src/tools/oshelpers.py index cd05cff..b5541bca 100755 --- a/native_client_sdk/src/tools/oshelpers.py +++ b/native_client_sdk/src/tools/oshelpers.py
@@ -454,7 +454,7 @@ zip_info.date_time = time.localtime(st.st_mtime)[0:6] zip_info.compress_type = zip_stream.compression zip_info.flag_bits = 0x00 - zip_info.external_attr = (st[0] & 0xFFFF) << 16L + zip_info.external_attr = (st[0] & 0xFFFF) << 16 zip_info.CRC = 0 zip_info.compress_size = 0 zip_info.file_size = 0
diff --git a/remoting/resources/remoting_strings_eu.xtb b/remoting/resources/remoting_strings_eu.xtb index 3f9d53d..6aba458 100644 --- a/remoting/resources/remoting_strings_eu.xtb +++ b/remoting/resources/remoting_strings_eu.xtb
@@ -65,7 +65,7 @@ <translation id="4145029455188493639"><ph name="EMAIL_ADDRESS" /> gisa hasi duzu saioa.</translation> <translation id="4155497795971509630">Beharrezko osagai batzuk falta dira. Ziurtatu softwarearen azken bertsioa instalatuta daukazula eta saiatu berriro.</translation> <translation id="4176825807642096119">Sarbide-kodea</translation> -<translation id="4227991223508142681">Ostalaria hornitzeko funtzioa</translation> +<translation id="4227991223508142681">Ostalaria hornitzeko zerbitzu-aplikazioa</translation> <translation id="4240294130679914010">Chromoting ostalariaren desinstalatzailea</translation> <translation id="4277736576214464567">Sarbide-kodeak ez du balio. Saiatu berriro.</translation> <translation id="4281844954008187215">Zerbitzu-baldintzak</translation>
diff --git a/services/audio/BUILD.gn b/services/audio/BUILD.gn index 2112adf..840aee9 100644 --- a/services/audio/BUILD.gn +++ b/services/audio/BUILD.gn
@@ -8,6 +8,8 @@ source_set("audio") { sources = [ + "concurrent_stream_metric_reporter.cc", + "concurrent_stream_metric_reporter.h", "debug_recording.cc", "debug_recording.h", "delay_buffer.cc",
diff --git a/services/audio/concurrent_stream_metric_reporter.cc b/services/audio/concurrent_stream_metric_reporter.cc new file mode 100644 index 0000000..9dd995bf --- /dev/null +++ b/services/audio/concurrent_stream_metric_reporter.cc
@@ -0,0 +1,44 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "services/audio/concurrent_stream_metric_reporter.h" + +#include "base/metrics/histogram_functions.h" + +namespace audio { + +void ConcurrentStreamMetricReporter::OnInputStreamActive() { + ++active_input_stream_count_; + if (active_input_stream_count_ == 1) { + // Reset metric when recording starts. + max_concurrent_output_streams_metric_ = active_output_stream_count_; + } +} + +void ConcurrentStreamMetricReporter::OnInputStreamInactive() { + DCHECK_GE(active_input_stream_count_, 1); + --active_input_stream_count_; + if (active_input_stream_count_ == 0) { + // Report metric when recording ends. + base::UmaHistogramCustomCounts("Media.Audio.MaxOutputStreamsPerInputStream", + max_concurrent_output_streams_metric_, 1, 50, + 50); + } +} + +void ConcurrentStreamMetricReporter::OnOutputStreamActive() { + ++active_output_stream_count_; + // Report output stream count increases during recording. + if (active_input_stream_count_ >= 1 && + active_output_stream_count_ > max_concurrent_output_streams_metric_) { + max_concurrent_output_streams_metric_ = active_output_stream_count_; + } +} + +void ConcurrentStreamMetricReporter::OnOutputStreamInactive() { + DCHECK_GE(active_output_stream_count_, 1); + --active_output_stream_count_; +} + +} // namespace audio
diff --git a/services/audio/concurrent_stream_metric_reporter.h b/services/audio/concurrent_stream_metric_reporter.h new file mode 100644 index 0000000..bb5f5e2 --- /dev/null +++ b/services/audio/concurrent_stream_metric_reporter.h
@@ -0,0 +1,51 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef SERVICES_AUDIO_CONCURRENT_STREAM_METRIC_REPORTER_H_ +#define SERVICES_AUDIO_CONCURRENT_STREAM_METRIC_REPORTER_H_ + +namespace audio { + +class InputStreamActivityMonitor { + public: + // Called when an input stream starts recording. + virtual void OnInputStreamActive() = 0; + // Called when an input stream stops recording. + virtual void OnInputStreamInactive() = 0; +}; + +class OutputStreamActivityMonitor { + public: + // Called when an output stream starts playing audio. + virtual void OnOutputStreamActive() = 0; + // Called when an output stream stops playing audio. + virtual void OnOutputStreamInactive() = 0; +}; + +// ConcurrentStreamMetricReporter monitors input and output streams and reports +// the maximum number of concurrent active OutputStreams observed during active +// InputStream recording. This provides an estimate of how many audio streams +// need to be mixed for echo cancellation. +// +// This class is not thread safe. +class ConcurrentStreamMetricReporter final + : public InputStreamActivityMonitor, + public OutputStreamActivityMonitor { + public: + // InputStreamActivityMonitor implementation. + void OnInputStreamActive() override; + void OnInputStreamInactive() override; + + // OutputStreamActivityMonitor implementation. + void OnOutputStreamActive() override; + void OnOutputStreamInactive() override; + + private: + int active_input_stream_count_ = 0; + int active_output_stream_count_ = 0; + int max_concurrent_output_streams_metric_ = 0; +}; +} // namespace audio + +#endif // SERVICES_AUDIO_CONCURRENT_STREAM_METRIC_REPORTER_H_
diff --git a/services/audio/input_controller.cc b/services/audio/input_controller.cc index 56570ab..905c60b 100644 --- a/services/audio/input_controller.cc +++ b/services/audio/input_controller.cc
@@ -27,6 +27,7 @@ #include "media/audio/audio_manager.h" #include "media/base/audio_bus.h" #include "media/base/user_input_monitor.h" +#include "services/audio/concurrent_stream_metric_reporter.h" namespace audio { namespace { @@ -130,12 +131,10 @@ class InputController::AudioCallback : public media::AudioInputStream::AudioInputCallback { public: - AudioCallback( - InputController* controller) + explicit AudioCallback(InputController* controller) : task_runner_(base::ThreadTaskRunnerHandle::Get()), controller_(controller), - weak_controller_(controller->weak_ptr_factory_.GetWeakPtr()) { - } + weak_controller_(controller->weak_ptr_factory_.GetWeakPtr()) {} ~AudioCallback() override = default; // These should not be called when the stream is live. @@ -206,16 +205,19 @@ InputController::InputController(EventHandler* handler, SyncWriter* sync_writer, media::UserInputMonitor* user_input_monitor, + InputStreamActivityMonitor* activity_monitor, const media::AudioParameters& params, StreamType type) : handler_(handler), stream_(nullptr), sync_writer_(sync_writer), type_(type), - user_input_monitor_(user_input_monitor) { + user_input_monitor_(user_input_monitor), + activity_monitor_(activity_monitor) { DCHECK_CALLED_ON_VALID_THREAD(owning_thread_); DCHECK(handler_); DCHECK(sync_writer_); + DCHECK(activity_monitor_); } InputController::~InputController() { @@ -231,11 +233,13 @@ EventHandler* event_handler, SyncWriter* sync_writer, media::UserInputMonitor* user_input_monitor, + InputStreamActivityMonitor* activity_monitor, const media::AudioParameters& params, const std::string& device_id, bool enable_agc) { DCHECK(audio_manager); DCHECK(audio_manager->GetTaskRunner()->BelongsToCurrentThread()); + DCHECK(activity_monitor); DCHECK(sync_writer); DCHECK(event_handler); DCHECK(params.IsValid()); @@ -245,9 +249,9 @@ // Create the InputController object and ensure that it runs on // the audio-manager thread. - std::unique_ptr<InputController> controller( - new InputController(event_handler, sync_writer, user_input_monitor, - params, ParamsToStreamType(params))); + std::unique_ptr<InputController> controller(new InputController( + event_handler, sync_writer, user_input_monitor, activity_monitor, params, + ParamsToStreamType(params))); controller->DoCreate(audio_manager, params, device_id, enable_agc); return controller; @@ -271,6 +275,7 @@ audio_callback_ = std::make_unique<AudioCallback>(this); stream_->Start(audio_callback_.get()); + activity_monitor_->OnInputStreamActive(); return; } @@ -289,6 +294,7 @@ // Allow calling unconditionally and bail if we don't have a stream to close. if (audio_callback_) { stream_->Stop(); + activity_monitor_->OnInputStreamInactive(); // Sometimes a stream (and accompanying audio track) is created and // immediately closed or discarded. In this case they are registered as
diff --git a/services/audio/input_controller.h b/services/audio/input_controller.h index 4b48f34..a0f3b8d 100644 --- a/services/audio/input_controller.h +++ b/services/audio/input_controller.h
@@ -33,6 +33,7 @@ } // namespace media namespace audio { +class InputStreamActivityMonitor; // Only do power monitoring for non-mobile platforms to save resources. #if !defined(OS_ANDROID) && !defined(OS_IOS) @@ -135,6 +136,7 @@ EventHandler* event_handler, SyncWriter* sync_writer, media::UserInputMonitor* user_input_monitor, + InputStreamActivityMonitor* activity_monitor, const media::AudioParameters& params, const std::string& device_id, bool agc_is_enabled); @@ -182,6 +184,7 @@ InputController(EventHandler* handler, SyncWriter* sync_writer, media::UserInputMonitor* user_input_monitor, + InputStreamActivityMonitor* activity_monitor, const media::AudioParameters& params, StreamType type); @@ -252,6 +255,9 @@ media::UserInputMonitor* const user_input_monitor_; + // Notified when the stream starts/stops recording. + InputStreamActivityMonitor* const activity_monitor_; + #if defined(AUDIO_POWER_MONITORING) // Whether the silence state and microphone levels should be checked and sent // as UMA stats.
diff --git a/services/audio/input_controller_unittest.cc b/services/audio/input_controller_unittest.cc index b3333bf..a1a2d2b 100644 --- a/services/audio/input_controller_unittest.cc +++ b/services/audio/input_controller_unittest.cc
@@ -20,15 +20,17 @@ #include "media/base/user_input_monitor.h" #include "media/webrtc/webrtc_switches.h" #include "mojo/public/cpp/bindings/remote.h" +#include "services/audio/concurrent_stream_metric_reporter.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +using base::WaitableEvent; using ::testing::_; using ::testing::AtLeast; using ::testing::Exactly; using ::testing::InvokeWithoutArgs; using ::testing::NotNull; -using base::WaitableEvent; +using ::testing::StrictMock; namespace audio { @@ -83,6 +85,14 @@ MOCK_METHOD0(DisableKeyPressMonitoring, void()); }; +class MockInputStreamActivityMonitor : public InputStreamActivityMonitor { + public: + MockInputStreamActivityMonitor() = default; + + MOCK_METHOD0(OnInputStreamActive, void()); + MOCK_METHOD0(OnInputStreamInactive, void()); +}; + class MockAudioInputStream : public media::AudioInputStream { public: MockAudioInputStream() {} @@ -126,7 +136,7 @@ void CreateAudioController() { controller_ = InputController::Create( audio_manager_.get(), &event_handler_, &sync_writer_, - &user_input_monitor_, params_, + &user_input_monitor_, &mock_stream_activity_monitor_, params_, media::AudioDeviceDescription::kDefaultDeviceId, false); } @@ -138,6 +148,7 @@ MockInputControllerEventHandler event_handler_; MockSyncWriter sync_writer_; MockUserInputMonitor user_input_monitor_; + StrictMock<MockInputStreamActivityMonitor> mock_stream_activity_monitor_; media::AudioParameters params_; MockAudioInputStream stream_; base::test::ScopedFeatureList audio_processing_feature_; @@ -166,6 +177,8 @@ // that thread, and thus we must use SYSTEM_TIME. TEST_F(SystemTimeInputControllerTest, CreateRecordAndClose) { EXPECT_CALL(event_handler_, OnCreated(_)); + EXPECT_CALL(mock_stream_activity_monitor_, OnInputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnInputStreamInactive()).Times(1); CreateAudioController(); ASSERT_TRUE(controller_.get()); @@ -193,8 +206,26 @@ task_environment_.RunUntilIdle(); } +TEST_F(InputControllerTest, RecordTwice) { + EXPECT_CALL(event_handler_, OnCreated(_)); + EXPECT_CALL(mock_stream_activity_monitor_, OnInputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnInputStreamInactive()).Times(1); + CreateAudioController(); + ASSERT_TRUE(controller_.get()); + + EXPECT_CALL(user_input_monitor_, EnableKeyPressMonitoring()); + controller_->Record(); + controller_->Record(); + + EXPECT_CALL(user_input_monitor_, DisableKeyPressMonitoring()); + EXPECT_CALL(sync_writer_, Close()); + controller_->Close(); +} + TEST_F(InputControllerTest, CloseTwice) { EXPECT_CALL(event_handler_, OnCreated(_)); + EXPECT_CALL(mock_stream_activity_monitor_, OnInputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnInputStreamInactive()).Times(1); CreateAudioController(); ASSERT_TRUE(controller_.get());
diff --git a/services/audio/input_stream.cc b/services/audio/input_stream.cc index 0e4308b..59440d5 100644 --- a/services/audio/input_stream.cc +++ b/services/audio/input_stream.cc
@@ -65,6 +65,7 @@ mojo::PendingRemote<media::mojom::AudioLog> log, media::AudioManager* audio_manager, std::unique_ptr<UserInputMonitor> user_input_monitor, + InputStreamActivityMonitor* activity_monitor, const std::string& device_id, const media::AudioParameters& params, uint32_t shared_memory_count, @@ -86,6 +87,7 @@ &foreign_socket_)), user_input_monitor_(std::move(user_input_monitor)) { DCHECK(audio_manager); + DCHECK(activity_monitor); DCHECK(receiver_.is_bound()); DCHECK(client_); DCHECK(created_callback_); @@ -123,9 +125,9 @@ return; } - controller_ = InputController::Create(audio_manager, this, writer_.get(), - user_input_monitor_.get(), params, - device_id, enable_agc); + controller_ = InputController::Create( + audio_manager, this, writer_.get(), user_input_monitor_.get(), + activity_monitor, params, device_id, enable_agc); } InputStream::~InputStream() {
diff --git a/services/audio/input_stream.h b/services/audio/input_stream.h index 349ed147..cebb1d2 100644 --- a/services/audio/input_stream.h +++ b/services/audio/input_stream.h
@@ -30,6 +30,7 @@ namespace audio { +class InputStreamActivityMonitor; class InputSyncWriter; class UserInputMonitor; @@ -51,6 +52,7 @@ mojo::PendingRemote<media::mojom::AudioLog> log, media::AudioManager* manager, std::unique_ptr<UserInputMonitor> user_input_monitor, + InputStreamActivityMonitor* activity_monitor, const std::string& device_id, const media::AudioParameters& params, uint32_t shared_memory_count,
diff --git a/services/audio/output_controller.cc b/services/audio/output_controller.cc index a537d2d..bf712c4 100644 --- a/services/audio/output_controller.cc +++ b/services/audio/output_controller.cc
@@ -23,6 +23,7 @@ #include "base/threading/platform_thread.h" #include "base/trace_event/trace_event.h" #include "media/base/audio_timestamp_helper.h" +#include "services/audio/concurrent_stream_metric_reporter.h" #include "services/audio/stream_monitor.h" using base::TimeDelta; @@ -137,14 +138,17 @@ } } -OutputController::OutputController(media::AudioManager* audio_manager, - EventHandler* handler, - const media::AudioParameters& params, - const std::string& output_device_id, - SyncReader* sync_reader) +OutputController::OutputController( + media::AudioManager* audio_manager, + EventHandler* handler, + OutputStreamActivityMonitor* activity_monitor, + const media::AudioParameters& params, + const std::string& output_device_id, + SyncReader* sync_reader) : audio_manager_(audio_manager), params_(params), handler_(handler), + activity_monitor_(activity_monitor), task_runner_(audio_manager->GetTaskRunner()), construction_time_(base::TimeTicks::Now()), output_device_id_(output_device_id), @@ -158,6 +162,7 @@ TimeDelta::FromMilliseconds(kPowerMeasurementTimeConstantMillis)) { DCHECK(audio_manager); DCHECK(handler_); + DCHECK(activity_monitor_); DCHECK(sync_reader_); DCHECK(task_runner_.get()); } @@ -304,6 +309,15 @@ if (state_ != kCreated && state_ != kPaused) return; + StartStream(); + if (StreamIsActive()) + activity_monitor_->OnOutputStreamActive(); +} + +void OutputController::StartStream() { + DCHECK(task_runner_->BelongsToCurrentThread()); + DCHECK(state_ == kCreated || state_ == kPaused); + // Ask for first packet. sync_reader_->RequestMoreData(base::TimeDelta(), base::TimeTicks(), 0); @@ -346,6 +360,8 @@ TRACE_EVENT0("audio", "OutputController::Pause"); SendLogMessage("%s([state=%s])", __func__, StateToString(state_)); + if (StreamIsActive()) + activity_monitor_->OnOutputStreamInactive(); StopStream(); if (state_ != kPaused) @@ -382,6 +398,8 @@ SendLogMessage("%s([state=%s])", __func__, StateToString(state_)); if (state_ != kClosed) { + if (StreamIsActive()) + activity_monitor_->OnOutputStreamInactive(); StopCloseAndClearStream(); sync_reader_->Close(); state_ = kClosed; @@ -491,6 +509,10 @@ power_and_clip.first); } +bool OutputController::StreamIsActive() { + return (state_ == kPlaying) && !disable_local_output_; +} + void OutputController::OnError(ErrorType type) { SendLogMessage("%s({type=%s} [state=%s])", __func__, ErrorTypeToString(type), StateToString(state_)); @@ -570,16 +592,22 @@ DCHECK(task_runner_->BelongsToCurrentThread()); SendLogMessage("%s([state=%s])", __func__, StateToString(state_)); - if (!disable_local_output_) + if (!disable_local_output_) { + if (StreamIsActive()) + activity_monitor_->OnOutputStreamInactive(); ToggleLocalOutput(); + } } void OutputController::StopMuting() { DCHECK(task_runner_->BelongsToCurrentThread()); SendLogMessage("%s([state=%s])", __func__, StateToString(state_)); - if (disable_local_output_) + if (disable_local_output_) { ToggleLocalOutput(); + if (StreamIsActive()) + activity_monitor_->OnOutputStreamActive(); + } } void OutputController::ToggleLocalOutput() { @@ -597,7 +625,7 @@ const bool restore_playback = (state_ == kPlaying); RecreateStream(RecreateReason::LOCAL_OUTPUT_TOGGLE); if (state_ == kCreated && restore_playback) - Play(); + StartStream(); } } @@ -619,7 +647,7 @@ // "Media.AudioOutputController.ChangeTime" which maybe is not desired? RecreateStreamWithTimingUMA(RecreateReason::DEVICE_CHANGE); if (state_ == kCreated && restore_playback) - Play(); + StartStream(); } std::pair<float, bool> OutputController::ReadCurrentPowerAndClip() {
diff --git a/services/audio/output_controller.h b/services/audio/output_controller.h index 9da59e49..11d1310 100644 --- a/services/audio/output_controller.h +++ b/services/audio/output_controller.h
@@ -58,6 +58,7 @@ // it via construction to synchronously fulfill this read request. namespace audio { +class OutputStreamActivityMonitor; class OutputController : public media::AudioOutputStream::AudioSourceCallback, public LoopbackGroupMember, @@ -116,6 +117,7 @@ // specific hardware device for audio output. OutputController(media::AudioManager* audio_manager, EventHandler* handler, + OutputStreamActivityMonitor* activity_monitor, const media::AudioParameters& params, const std::string& output_device_id, SyncReader* sync_reader); @@ -237,6 +239,10 @@ // Notifies the EventHandler that an error has occurred. void ReportError(); + // Helper method that starts the physical stream. Must only be called in state + // kCreated or kPaused. + void StartStream(); + // Helper method that stops the physical stream. void StopStream(); @@ -249,6 +255,10 @@ // Log the current average power level measured by power_monitor_. void LogAudioPowerLevel(const char* call_name); + // Returns whether the output stream is considered active to the + // |activity_monitor_|. + bool StreamIsActive(); + // Helper called by StartMuting() and StopMuting() to execute the stream // change. void ToggleLocalOutput(); @@ -262,6 +272,9 @@ // the OC object. EventHandler* const handler_; + // Notified when the stream starts/stops playing audio without muting. + OutputStreamActivityMonitor* const activity_monitor_; + // The task runner for the audio manager. All control methods should be called // via tasks run by this TaskRunner. const scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
diff --git a/services/audio/output_controller_unittest.cc b/services/audio/output_controller_unittest.cc index e921938a..e4614e2 100644 --- a/services/audio/output_controller_unittest.cc +++ b/services/audio/output_controller_unittest.cc
@@ -32,6 +32,7 @@ #include "media/audio/test_audio_thread.h" #include "media/base/audio_bus.h" #include "media/base/audio_parameters.h" +#include "services/audio/concurrent_stream_metric_reporter.h" #include "services/audio/loopback_group_member.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -98,6 +99,17 @@ DISALLOW_COPY_AND_ASSIGN(MockOutputControllerSyncReader); }; +class MockOutputStreamActivityMonitor : public OutputStreamActivityMonitor { + public: + MockOutputStreamActivityMonitor() = default; + + MOCK_METHOD0(OnOutputStreamActive, void()); + MOCK_METHOD0(OnOutputStreamInactive, void()); + + private: + DISALLOW_COPY_AND_ASSIGN(MockOutputStreamActivityMonitor); +}; + // Wraps an AudioOutputStream instance, calling DidXYZ() mock methods for test // verification of controller behavior. If a null AudioOutputStream pointer is // provided to the constructor, a "data pump" thread will be run between the @@ -321,7 +333,8 @@ ~OutputControllerTest() override { audio_manager_.Shutdown(); } void SetUp() override { - controller_.emplace(&audio_manager_, &mock_event_handler_, GetTestParams(), + controller_.emplace(&audio_manager_, &mock_event_handler_, + &mock_stream_activity_monitor_, GetTestParams(), std::string(), &mock_sync_reader_); controller_->SetVolume(kTestVolume); } @@ -367,6 +380,8 @@ loop.Run(); } + void PlayWhilePlaying() { controller_->Play(); } + void Pause() { base::RunLoop loop; EXPECT_CALL(mock_event_handler_, OnControllerPaused()) @@ -403,7 +418,9 @@ Mock::VerifyAndClearExpectations(&mock_event_handler_); } - void StopMuting() { + void StopMutingBeforePlaying() { controller_->StopMuting(); } + + void StopMutingWhilePlaying() { EXPECT_CALL(mock_event_handler_, OnControllerPlaying()); controller_->StopMuting(); Mock::VerifyAndClearExpectations(&mock_event_handler_); @@ -467,6 +484,7 @@ } StrictMock<MockOutputControllerEventHandler> mock_event_handler_; + StrictMock<MockOutputStreamActivityMonitor> mock_stream_activity_monitor_; private: base::TestMessageLoop message_loop_; @@ -484,12 +502,17 @@ } TEST_F(OutputControllerTest, PlayAndClose) { + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(1); Create(); Play(); Close(); } TEST_F(OutputControllerTest, PlayPauseClose) { + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(1); + Create(); Play(); Pause(); @@ -497,6 +520,9 @@ } TEST_F(OutputControllerTest, PlayPausePlayClose) { + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(2); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(2); + Create(); Play(); Pause(); @@ -505,6 +531,9 @@ } TEST_F(OutputControllerTest, PlayDeviceChangeClose) { + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(1); + Create(); Play(); ChangeDevice(); @@ -512,6 +541,9 @@ } TEST_F(OutputControllerTest, PlayDeviceChangeError) { + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(1); + Create(); Play(); SimulateErrorThenDeviceChange(); @@ -552,6 +584,9 @@ // Tests that a local playout stream is shut-down and replaced with a "muting // stream" if StartMuting() is called after playback begins. TEST_F(OutputControllerTest, CreatePlayMuteClose) { + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(1); + Create(); MockAudioOutputStream* const playout_stream = last_created_stream(); ASSERT_TRUE(playout_stream); @@ -576,7 +611,10 @@ // Tests that the "muting stream" is shut down and replaced with the normal // playout stream after StopMuting() is called. -TEST_F(OutputControllerTest, PlayMuteUnmuteClose) { +TEST_F(OutputControllerTest, MutePlayUnmuteClose) { + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(1); + StartMutingBeforePlaying(); Create(); Play(); @@ -585,7 +623,7 @@ EXPECT_EQ(nullptr, last_closed_stream()); EXPECT_EQ(AudioParameters::AUDIO_FAKE, mute_stream->format()); - StopMuting(); + StopMutingWhilePlaying(); MockAudioOutputStream* const playout_stream = last_created_stream(); ASSERT_TRUE(playout_stream); EXPECT_EQ(mute_stream, last_closed_stream()); @@ -598,6 +636,9 @@ } TEST_F(OutputControllerTest, SnoopCreatePlayStopClose) { + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(1); + NiceMock<MockSnooper> snooper; StartSnooping(&snooper); Create(); @@ -608,6 +649,9 @@ } TEST_F(OutputControllerTest, CreatePlaySnoopStopClose) { + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(1); + NiceMock<MockSnooper> snooper; Create(); Play(); @@ -618,6 +662,9 @@ } TEST_F(OutputControllerTest, CreatePlaySnoopCloseStop) { + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(1); + NiceMock<MockSnooper> snooper; Create(); Play(); @@ -628,6 +675,9 @@ } TEST_F(OutputControllerTest, TwoSnoopers_StartAtDifferentTimes) { + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(1); + NiceMock<MockSnooper> snooper1; NiceMock<MockSnooper> snooper2; StartSnooping(&snooper1); @@ -644,6 +694,9 @@ } TEST_F(OutputControllerTest, TwoSnoopers_StopAtDifferentTimes) { + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(1); + NiceMock<MockSnooper> snooper1; NiceMock<MockSnooper> snooper2; Create(); @@ -692,6 +745,9 @@ } TEST_F(OutputControllerTest, FlushWhenStreamIsPlayingTriggersError) { + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(1); + Create(); Play(); @@ -704,6 +760,9 @@ } TEST_F(OutputControllerTest, FlushesWhenStreamIsNotPlaying) { + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(1); + Create(); Play(); Pause(); @@ -715,5 +774,69 @@ Close(); } +// Tests that stream activity (play/pause, taking muting into account) is +// correctly signalled to the OutputStreamActivityMonitor. +TEST_F(OutputControllerTest, ReportActivity) { + Create(); + + // The stream is expected to only report state changes once. This variable + // tracks this throughout the test. + bool stream_active_state = false; + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()) + .WillRepeatedly([&stream_active_state]() { + EXPECT_FALSE(stream_active_state); + stream_active_state = true; + }); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()) + .WillRepeatedly([&stream_active_state]() { + EXPECT_TRUE(stream_active_state); + stream_active_state = false; + }); + + // Playing -> active. + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(0); + Play(); + + // Pausing -> inactive. + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(0); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(1); + Pause(); + + // Repeated Play()/Pause() calls do not change active state. + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(1); + Play(); + PlayWhilePlaying(); + Pause(); + Pause(); + + // Playing during muting -> stream is never active. + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(0); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(0); + StartMutingBeforePlaying(); + Play(); + Pause(); + StopMutingBeforePlaying(); + + // Muting while playing -> stream becomes inactive. + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(1); + Play(); + StartMutingWhilePlaying(); + + // Unmuting while playing -> stream becomes active. + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(0); + StopMutingWhilePlaying(); + + // Closing a playing stream triggers a final inactivation. + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(0); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(1); + Close(); + + EXPECT_FALSE(stream_active_state); +} + } // namespace } // namespace audio
diff --git a/services/audio/output_stream.cc b/services/audio/output_stream.cc index 0a99fd4..055f69d 100644 --- a/services/audio/output_stream.cc +++ b/services/audio/output_stream.cc
@@ -38,6 +38,7 @@ observer, mojo::PendingRemote<media::mojom::AudioLog> log, media::AudioManager* audio_manager, + OutputStreamActivityMonitor* activity_monitor, const std::string& output_device_id, const media::AudioParameters& params, LoopbackCoordinator* coordinator, @@ -54,7 +55,12 @@ : base::DoNothing(), params, &foreign_socket_), - controller_(audio_manager, this, params, output_device_id, &reader_), + controller_(audio_manager, + this, + activity_monitor, + params, + output_device_id, + &reader_), loopback_group_id_(loopback_group_id) { DCHECK(receiver_.is_bound()); DCHECK(created_callback);
diff --git a/services/audio/output_stream.h b/services/audio/output_stream.h index 9058eb0c..efb3a2f 100644 --- a/services/audio/output_stream.h +++ b/services/audio/output_stream.h
@@ -40,6 +40,7 @@ } // namespace media namespace audio { +class OutputStreamActivityMonitor; class OutputStream final : public media::mojom::AudioOutputStream, public OutputController::EventHandler { @@ -56,6 +57,7 @@ observer, mojo::PendingRemote<media::mojom::AudioLog> log, media::AudioManager* audio_manager, + OutputStreamActivityMonitor* activity_monitor, const std::string& output_device_id, const media::AudioParameters& params, LoopbackCoordinator* coordinator,
diff --git a/services/audio/stream_factory.cc b/services/audio/stream_factory.cc index c811753..0a4810f9 100644 --- a/services/audio/stream_factory.cc +++ b/services/audio/stream_factory.cc
@@ -58,8 +58,9 @@ std::move(created_callback), std::move(deleter_callback), std::move(stream_receiver), std::move(client), std::move(observer), std::move(pending_log), audio_manager_, - UserInputMonitor::Create(std::move(key_press_count_buffer)), device_id, - params, shared_memory_count, enable_agc)); + UserInputMonitor::Create(std::move(key_press_count_buffer)), + &stream_count_metric_reporter_, device_id, params, shared_memory_count, + enable_agc)); } void StreamFactory::AssociateInputAndOutputForAec( @@ -108,7 +109,8 @@ output_streams_.insert(std::make_unique<OutputStream>( std::move(created_callback), std::move(deleter_callback), std::move(stream_receiver), std::move(observer), std::move(log), - audio_manager_, device_id_or_group_id, params, &coordinator_, group_id)); + audio_manager_, &stream_count_metric_reporter_, device_id_or_group_id, + params, &coordinator_, group_id)); } void StreamFactory::BindMuter(
diff --git a/services/audio/stream_factory.h b/services/audio/stream_factory.h index fccd0520..37a373d 100644 --- a/services/audio/stream_factory.h +++ b/services/audio/stream_factory.h
@@ -20,6 +20,7 @@ #include "media/mojo/mojom/audio_output_stream.mojom.h" #include "media/mojo/mojom/audio_stream_factory.mojom.h" #include "mojo/public/cpp/bindings/receiver_set.h" +#include "services/audio/concurrent_stream_metric_reporter.h" #include "services/audio/loopback_coordinator.h" namespace base { @@ -104,6 +105,8 @@ mojo::ReceiverSet<media::mojom::AudioStreamFactory> receivers_; + ConcurrentStreamMetricReporter stream_count_metric_reporter_; + // Order of the following members is important for a clean shutdown. LoopbackCoordinator coordinator_; std::vector<std::unique_ptr<LocalMuter>> muters_;
diff --git a/services/network/cookie_settings.cc b/services/network/cookie_settings.cc index 3cb2c78b..e118d54 100644 --- a/services/network/cookie_settings.cc +++ b/services/network/cookie_settings.cc
@@ -100,6 +100,14 @@ url.SchemeIs(first_party_url.scheme_piece())); } +bool CookieSettings::IsPrivacyModeEnabled( + const GURL& url, + const GURL& site_for_cookies, + const absl::optional<url::Origin>& top_frame_origin) const { + // TODO(https://crbug.com/1203706): rewrite this to check proper conditions. + return !IsFullCookieAccessAllowed(url, site_for_cookies, top_frame_origin); +} + ContentSetting CookieSettings::GetCookieSettingInternal( const GURL& url, const GURL& first_party_url,
diff --git a/services/network/cookie_settings.h b/services/network/cookie_settings.h index 6cc3363f..2ac08aa 100644 --- a/services/network/cookie_settings.h +++ b/services/network/cookie_settings.h
@@ -78,6 +78,14 @@ const GURL& url, const GURL& site_for_cookies) const override; + // Returns true if the resource identified by (`url`, `site_for_cookies`, + // `top_frame_origin`) is not allowed to access cookies in this context, and + // "privacy mode" should be enabled for the URL request in question. + bool IsPrivacyModeEnabled( + const GURL& url, + const GURL& site_for_cookies, + const absl::optional<url::Origin>& top_frame_origin) const; + private: // Returns whether third-party cookie blocking should be bypassed (i.e. always // allow the cookie regardless of cookie content settings and third-party
diff --git a/services/network/cookie_settings_unittest.cc b/services/network/cookie_settings_unittest.cc index 2f1a9b6b..0126947 100644 --- a/services/network/cookie_settings_unittest.cc +++ b/services/network/cookie_settings_unittest.cc
@@ -493,5 +493,37 @@ } } +TEST_F(CookieSettingsTest, IsPrivacyModeEnabled) { + CookieSettings settings; + settings.set_block_third_party_cookies(true); + + // Enabled for third-party requests. + EXPECT_TRUE(settings.IsPrivacyModeEnabled( + GURL(kURL), GURL(), url::Origin::Create(GURL(kOtherURL)))); + + // Enabled for requests with a null site_for_cookies, even if the + // top_frame_origin matches. + EXPECT_TRUE(settings.IsPrivacyModeEnabled(GURL(kURL), GURL(), + url::Origin::Create(GURL(kURL)))); + + // Disabled for first-party requests, if no other rule applies. + EXPECT_FALSE(settings.IsPrivacyModeEnabled(GURL(kURL), GURL(kURL), + url::Origin::Create(GURL(kURL)))); + + // Enabled if there's a site-specific rule that blocks access, regardless of + // the kind of request. + settings.set_content_settings( + {CreateSetting(kURL, "*", CONTENT_SETTING_BLOCK)}); + // Third-party requests: + EXPECT_TRUE(settings.IsPrivacyModeEnabled( + GURL(kURL), GURL(), url::Origin::Create(GURL(kOtherURL)))); + // Requests with a null site_for_cookies, but matching top_frame_origin. + EXPECT_TRUE(settings.IsPrivacyModeEnabled(GURL(kURL), GURL(), + url::Origin::Create(GURL(kURL)))); + // First-party requests. + EXPECT_TRUE(settings.IsPrivacyModeEnabled(GURL(kURL), GURL(kURL), + url::Origin::Create(GURL(kURL)))); +} + } // namespace } // namespace network
diff --git a/services/network/network_service_network_delegate.cc b/services/network/network_service_network_delegate.cc index 8d8f412..2719cea 100644 --- a/services/network/network_service_network_delegate.cc +++ b/services/network/network_service_network_delegate.cc
@@ -238,10 +238,10 @@ const GURL& url, const net::SiteForCookies& site_for_cookies, const absl::optional<url::Origin>& top_frame_origin) const { - return !network_context_->cookie_manager() - ->cookie_settings() - .IsCookieAccessAllowed(url, site_for_cookies.RepresentativeUrl(), - top_frame_origin); + return network_context_->cookie_manager() + ->cookie_settings() + .IsPrivacyModeEnabled(url, site_for_cookies.RepresentativeUrl(), + top_frame_origin); } bool NetworkServiceNetworkDelegate:: @@ -272,7 +272,7 @@ const url::Origin& origin) const { return network_context_->cookie_manager() ->cookie_settings() - .IsCookieAccessAllowed(origin.GetURL(), origin.GetURL()); + .IsFullCookieAccessAllowed(origin.GetURL(), origin.GetURL()); } void NetworkServiceNetworkDelegate::OnCanSendReportingReports( @@ -304,7 +304,7 @@ const GURL& endpoint) const { return network_context_->cookie_manager() ->cookie_settings() - .IsCookieAccessAllowed(origin.GetURL(), origin.GetURL()); + .IsFullCookieAccessAllowed(origin.GetURL(), origin.GetURL()); } bool NetworkServiceNetworkDelegate::OnCanUseReportingClient( @@ -312,7 +312,7 @@ const GURL& endpoint) const { return network_context_->cookie_manager() ->cookie_settings() - .IsCookieAccessAllowed(origin.GetURL(), origin.GetURL()); + .IsFullCookieAccessAllowed(origin.GetURL(), origin.GetURL()); } int NetworkServiceNetworkDelegate::HandleClearSiteDataHeader(
diff --git a/services/tracing/public/cpp/perfetto/trace_event_data_source.h b/services/tracing/public/cpp/perfetto/trace_event_data_source.h index 0d544f10..6c56108 100644 --- a/services/tracing/public/cpp/perfetto/trace_event_data_source.h +++ b/services/tracing/public/cpp/perfetto/trace_event_data_source.h
@@ -175,9 +175,8 @@ // Deletes TraceWriter safely on behalf of a ThreadLocalEventSink. void ReturnTraceWriter(std::unique_ptr<perfetto::TraceWriter> trace_writer); - bool privacy_filtering_enabled() const { return privacy_filtering_enabled_; } - bool IsEnabled(); + bool IsPrivacyFilteringEnabled(); // Records trace event for a histogram sample. When histogram_samples category // is enabled, it is registered with base::StatisticsRecorder to monitor the @@ -243,7 +242,6 @@ uint32_t IncrementSessionIdOrClearStartupFlagWhileLocked(); void SetStartupTracingFlagsWhileLocked(); bool IsStartupTracingActive() const; - bool IsPrivacyFilteringEnabled(); // Takes the |lock_|. bool disable_interning_ = false; base::OnceClosure stop_complete_callback_;
diff --git a/services/tracing/public/cpp/trace_startup.cc b/services/tracing/public/cpp/trace_startup.cc index 25be6288..a9b73c02 100644 --- a/services/tracing/public/cpp/trace_startup.cc +++ b/services/tracing/public/cpp/trace_startup.cc
@@ -174,7 +174,7 @@ // Make sure that the startup session uses privacy filtering mode if it's // enabled for the browser's session. - if (TraceEventDataSource::GetInstance()->privacy_filtering_enabled()) + if (TraceEventDataSource::GetInstance()->IsPrivacyFilteringEnabled()) cmd_line->AppendSwitch(switches::kTraceStartupEnablePrivacyFiltering); cmd_line->AppendSwitchASCII(switches::kTraceStartup,
diff --git a/services/viz/privileged/mojom/compositing/display_private.mojom b/services/viz/privileged/mojom/compositing/display_private.mojom index 409115f..03ad7c39 100644 --- a/services/viz/privileged/mojom/compositing/display_private.mojom +++ b/services/viz/privileged/mojom/compositing/display_private.mojom
@@ -22,7 +22,7 @@ // Attempts to immediately swap a frame with the current size if possible, // then will no longer swap until Resize() is called with a non-empty size. - [EnableIf=is_win, Sync] + [EnableIf=is_win, Sync, NoInterrupt] DisableSwapUntilResize() => (); // Resizes the display.
diff --git a/testing/merge_scripts/code_coverage/merge_js_lib.py b/testing/merge_scripts/code_coverage/merge_js_lib.py index 5011c73..c6eb347 100644 --- a/testing/merge_scripts/code_coverage/merge_js_lib.py +++ b/testing/merge_scripts/code_coverage/merge_js_lib.py
@@ -194,7 +194,7 @@ return segments -def _get_coverage_paths(input_dir): +def _get_paths_with_suffix(input_dir, suffix): """Gets all JSON files in the input directory. Args: @@ -208,7 +208,7 @@ for dir_path, _sub_dirs, file_names in os.walk(input_dir): paths.extend([ os.path.join(dir_path, fn) for fn in file_names - if fn.endswith('.cov.json') + if fn.endswith(suffix) ]) return paths @@ -221,7 +221,7 @@ output_path (str): Path to the location to output merged coverage. """ coverage_by_path = {} - json_files = _get_coverage_paths(coverage_dir) + json_files = _get_paths_with_suffix(coverage_dir, '.cov.json') if not json_files: logging.info('No JavaScript coverage files found in %s', coverage_dir)
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 46b1d81..c37197f 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -1798,8 +1798,7 @@ { "name": "Enabled", "enable_features": [ - "ChromeShareScreenshot", - "PreemptiveLinkToTextGeneration" + "ChromeShareScreenshot" ], "min_os_version": "5.1" } @@ -4942,6 +4941,24 @@ ] } ], + "MobileIdentityConsistencyVar": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "EnabledWithConsecutiveActiveDismissal", + "params": { + "consecutive_active_dismissal_limit": "3" + }, + "enable_features": [ + "MobileIdentityConsistencyVar" + ] + } + ] + } + ], "MojoInlineMessagePayloads": [ { "platforms": [ @@ -7066,6 +7083,21 @@ ] } ], + "SharedHighlightingClank": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PreemptiveLinkToTextGeneration" + ] + } + ] + } + ], "SharedHighlightingIOS": [ { "platforms": [ @@ -7924,6 +7956,23 @@ ] } ], + "UploadBrowserDeviceIdentifier": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "UploadBrowserDeviceIdentifier" + ] + } + ] + } + ], "UseFluentLanguageModel": [ { "platforms": [
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc index e6c5b18..f19febd1 100644 --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc
@@ -33,20 +33,8 @@ const base::Feature kGMSCoreEmoji{"GMSCoreEmoji", base::FEATURE_DISABLED_BY_DEFAULT}; -// Whether the HandwritingRecognition API can be enabled. Disabling this feature -// disables both the origin trial and the mojo interface. Enabling this feature -// allows the API to be controlled by origin trial (see web runtime feature -// `HandwritingRecognition`) and finch (see -// `kHandwritingRecognitionWebPlatformApiFinch`). -// TODO (crbug.com/1166910): Remove once the HandwritingRecognition API is more -// widely available (likely M92). -const base::Feature kHandwritingRecognitionWebPlatformApi{ - "HandwritingRecognitionWebPlatformApi", base::FEATURE_ENABLED_BY_DEFAULT}; - -// Whether the HandwritingRecognition API can be enabled. Disabling this feature -// disables both the origin trial and the mojo interface. Defaults to enabled -// so the feature can be controlled by finch, even when -// `kHandwritingRecognitionWebPlatformApi` is set from command-line. +// Whether the HandwritingRecognition API can be enabled by origin trial. +// Disabling this feature disables both the origin trial and the mojo interface. const base::Feature kHandwritingRecognitionWebPlatformApiFinch{ "HandwritingRecognitionWebPlatformApiFinch", base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h index 4f97c5709..307bbdc0 100644 --- a/third_party/blink/public/common/features.h +++ b/third_party/blink/public/common/features.h
@@ -23,8 +23,6 @@ BLINK_COMMON_EXPORT extern const base::Feature kConversionMeasurement; BLINK_COMMON_EXPORT extern const base::Feature kGMSCoreEmoji; BLINK_COMMON_EXPORT extern const base::Feature - kHandwritingRecognitionWebPlatformApi; -BLINK_COMMON_EXPORT extern const base::Feature kHandwritingRecognitionWebPlatformApiFinch; BLINK_COMMON_EXPORT extern const base::Feature kPaintHolding; BLINK_COMMON_EXPORT extern const base::Feature kPaintHoldingCrossOrigin;
diff --git a/third_party/blink/public/mojom/background_sync/OWNERS b/third_party/blink/public/mojom/background_sync/OWNERS index 502de83..212d60b 100644 --- a/third_party/blink/public/mojom/background_sync/OWNERS +++ b/third_party/blink/public/mojom/background_sync/OWNERS
@@ -1,6 +1,7 @@ iclelland@chromium.org jkarlin@chromium.org peter@chromium.org +rayankans@chromium.org per-file *.mojom=set noparent per-file *.mojom=file://ipc/SECURITY_OWNERS
diff --git a/third_party/blink/public/mojom/web_feature/web_feature.mojom b/third_party/blink/public/mojom/web_feature/web_feature.mojom index 52a12023..62c475d 100644 --- a/third_party/blink/public/mojom/web_feature/web_feature.mojom +++ b/third_party/blink/public/mojom/web_feature/web_feature.mojom
@@ -3240,6 +3240,7 @@ kFontFaceLineGapOverride = 3925, kFontFaceSizeAdjust = 3926, kHiddenBackfaceWith3D = 3927, + kMainFrameNonSecurePrivateAddressSpace = 3928, // Add new features immediately above this line. Don't change assigned // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/blink/public/web/web_local_frame_client.h b/third_party/blink/public/web/web_local_frame_client.h index a8fadc4e..7bbe375 100644 --- a/third_party/blink/public/web/web_local_frame_client.h +++ b/third_party/blink/public/web/web_local_frame_client.h
@@ -424,7 +424,10 @@ bool is_history_api_navigation, bool is_client_redirect) {} - // Called when a RenderFrame's page lifecycle state gets updated. + // Called before a frame's page is frozen. + virtual void WillFreezePage() {} + + // Called when a frame's page lifecycle state gets updated. virtual void DidSetPageLifecycleState() {} // Called upon update to scroll position, document state, and other
diff --git a/third_party/blink/public/web/web_view_client.h b/third_party/blink/public/web/web_view_client.h index 782336e6..7b65e9d08 100644 --- a/third_party/blink/public/web/web_view_client.h +++ b/third_party/blink/public/web/web_view_client.h
@@ -84,8 +84,6 @@ // the layers. virtual void InvalidateContainer() {} - virtual void OnPageFrozenChanged(bool frozen) {} - // UI ------------------------------------------------------------------ // Called when the View has changed size as a result of an auto-resize.
diff --git a/third_party/blink/renderer/core/aom/accessible_node.cc b/third_party/blink/renderer/core/aom/accessible_node.cc index 59e589d..17ca9cc8 100644 --- a/third_party/blink/renderer/core/aom/accessible_node.cc +++ b/third_party/blink/renderer/core/aom/accessible_node.cc
@@ -201,7 +201,6 @@ if (element_) return &element_->GetDocument(); - NOTREACHED(); return nullptr; } @@ -1141,7 +1140,10 @@ } AXObjectCache* AccessibleNode::GetAXObjectCache() { - return GetDocument()->ExistingAXObjectCache(); + if (Document* document = GetDocument()) + return document->ExistingAXObjectCache(); + + return nullptr; } void AccessibleNode::Trace(Visitor* visitor) const {
diff --git a/third_party/blink/renderer/core/clipboard/data_object.cc b/third_party/blink/renderer/core/clipboard/data_object.cc index 58d1c47d..ee6da6d3 100644 --- a/third_party/blink/renderer/core/clipboard/data_object.cc +++ b/third_party/blink/renderer/core/clipboard/data_object.cc
@@ -30,7 +30,6 @@ #include "third_party/blink/renderer/core/clipboard/data_object.h" -#include "base/feature_list.h" #include "base/notreached.h" #include "third_party/blink/public/platform/file_path_conversion.h" #include "third_party/blink/public/platform/platform.h" @@ -42,7 +41,6 @@ #include "third_party/blink/renderer/core/clipboard/system_clipboard.h" #include "third_party/blink/renderer/platform/file_metadata.h" #include "third_party/blink/renderer/platform/wtf/hash_set.h" -#include "ui/base/ui_base_features.h" namespace blink { @@ -58,8 +56,7 @@ if (paste_mode == PasteMode::kPlainTextOnly && type != kMimeTypeTextPlain) continue; mojom::blink::ClipboardFilesPtr files; - if (type == kMimeTypeTextURIList && - base::FeatureList::IsEnabled(features::kClipboardFilenames)) { + if (type == kMimeTypeTextURIList) { files = system_clipboard->ReadFiles(); // Ignore ReadFiles() result if clipboard sequence number has changed. if (system_clipboard->SequenceNumber() != sequence_number) {
diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_party/blink/renderer/core/exported/web_view_impl.cc index 63cef003..f2fbcc76 100644 --- a/third_party/blink/renderer/core/exported/web_view_impl.cc +++ b/third_party/blink/renderer/core/exported/web_view_impl.cc
@@ -2356,8 +2356,18 @@ if (storing_in_bfcache) { Scheduler()->SetPageBackForwardCached(new_state->is_in_back_forward_cache); } - if (freezing_page) + + if (freezing_page) { + // Notify all local frames that we are about to freeze. + for (WebFrame* frame = MainFrame(); frame; frame = frame->TraverseNext()) { + if (frame->IsWebLocalFrame()) { + frame->ToWebLocalFrame()->Client()->WillFreezePage(); + } + } + SetPageFrozen(true); + } + if (restoring_from_bfcache) { DCHECK(page_restore_params); // Update the history offset and length value, as pages that are kept in @@ -3604,7 +3614,6 @@ void WebViewImpl::SetPageFrozen(bool frozen) { Scheduler()->SetPageFrozen(frozen); - web_view_client_->OnPageFrozenChanged(frozen); } WebFrameWidget* WebViewImpl::MainFrameWidget() {
diff --git a/third_party/blink/renderer/core/frame/use_counter_impl.cc b/third_party/blink/renderer/core/frame/use_counter_impl.cc index 3dacfcc..fda2ad0a 100644 --- a/third_party/blink/renderer/core/frame/use_counter_impl.cc +++ b/third_party/blink/renderer/core/frame/use_counter_impl.cc
@@ -104,10 +104,16 @@ void UseCounterImpl::DidCommitLoad(const LocalFrame* frame) { const KURL url = frame->GetDocument()->Url(); - if (url.ProtocolIs("chrome-extension")) + if (url.ProtocolIs("chrome-extension")) { context_ = kExtensionContext; - if (url.ProtocolIs("file")) + } else if (url.ProtocolIs("file")) { context_ = kFileContext; + } else if (url.ProtocolIsInHTTPFamily()) { + context_ = kDefaultContext; + } else { + // UseCounter is disabled for all other URL schemes. + context_ = kDisabledContext; + } DCHECK_EQ(kPreCommit, commit_state_); commit_state_ = kCommited; @@ -123,7 +129,6 @@ TraceMeasurement(feature); } - // TODO(crbug.com/1196402): move extension histogram to the browser side. if (context_ == kExtensionContext || context_ == kFileContext) { CountFeature(WebFeature::kPageVisits); } @@ -213,8 +218,6 @@ observers_.RemoveAll(to_be_removed); } -// TODO(crbug.com/1196402): Remove this method after all histograms are -// counted on browser side. void UseCounterImpl::CountFeature(WebFeature feature) const { switch (context_) { case kDefaultContext: @@ -246,26 +249,24 @@ return false; auto* client = frame->Client(); - switch (feature.type()) { - case mojom::blink::UseCounterFeatureType::kWebFeature: { - WebFeature web_feature = static_cast<WebFeature>(feature.value()); - if (context_ != kDefaultContext) - CountFeature(web_feature); - NotifyFeatureCounted(web_feature); - break; - } - case mojom::blink::UseCounterFeatureType::kAnimatedCssProperty: - case mojom::blink::UseCounterFeatureType::kCssProperty: - if (context_ == kExtensionContext) - return false; - break; - case mojom::blink::UseCounterFeatureType:: - kPermissionsPolicyViolationEnforce: - break; + if (feature.type() == mojom::blink::UseCounterFeatureType::kWebFeature) + NotifyFeatureCounted(static_cast<WebFeature>(feature.value())); + + // Report to browser about observed event only when URL is HTTP/HTTPS, + // as other URL schemes are filtered out in + // |MetricsWebContentsObserver::DoesTimingUpdateHaveError| anyway. + if (context_ == kDefaultContext) { + client->DidObserveNewFeatureUsage(feature); + return true; } - client->DidObserveNewFeatureUsage(feature); - return true; + // WebFeatures in non-default contexts are counted on renderer side. + if (feature.type() == mojom::blink::UseCounterFeatureType::kWebFeature) { + CountFeature(static_cast<WebFeature>(feature.value())); + return true; + } + + return false; } // Note that HTTPArchive tooling looks specifically for this event - see
diff --git a/third_party/blink/renderer/core/frame/use_counter_impl_test.cc b/third_party/blink/renderer/core/frame/use_counter_impl_test.cc index c084886..70b081d 100644 --- a/third_party/blink/renderer/core/frame/use_counter_impl_test.cc +++ b/third_party/blink/renderer/core/frame/use_counter_impl_test.cc
@@ -12,6 +12,7 @@ #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/html/html_html_element.h" #include "third_party/blink/renderer/core/loader/document_loader.h" +#include "third_party/blink/renderer/core/loader/empty_clients.h" #include "third_party/blink/renderer/core/page/page.h" #include "third_party/blink/renderer/core/testing/dummy_page_holder.h" #include "third_party/blink/renderer/platform/instrumentation/use_counter.h" @@ -41,7 +42,26 @@ class UseCounterImplTest : public testing::Test { public: - UseCounterImplTest() : dummy_(std::make_unique<DummyPageHolder>()) { + class DummyLocalFrameClient : public EmptyLocalFrameClient { + public: + DummyLocalFrameClient() = default; + const std::vector<UseCounterFeature>& observed_features() const { + return observed_features_; + } + + private: + void DidObserveNewFeatureUsage(const UseCounterFeature& feature) override { + observed_features_.push_back(feature); + } + std::vector<UseCounterFeature> observed_features_; + }; + + UseCounterImplTest() + : dummy_(std::make_unique<DummyPageHolder>( + /* initial_view_size= */ IntSize(), + /* chrome_client= */ nullptr, + /* local_frame_client= */ + MakeGarbageCollected<DummyLocalFrameClient>())) { Page::InsertOrdinaryPageForTesting(&dummy_->GetPage()); } @@ -67,6 +87,43 @@ } }; +class UseCounterImplBrowserReportTest + : public UseCounterImplTest, + public ::testing::WithParamInterface</* URL */ const char*> {}; + +INSTANTIATE_TEST_SUITE_P(All, + UseCounterImplBrowserReportTest, + ::testing::Values("chrome-extension://dummysite/", + "file://dummyfile", + "data:;base64,", + "ftp://ftp.dummy/dummy.txt", + "http://foo.com", + "https://bar.com")); + +// UseCounter should not send events to browser when handling page with +// Non HTTP Family URLs, as these events will be discarded on the browser side +// in |MetricsWebContentsObserver::DoesTimingUpdateHaveError|. +TEST_P(UseCounterImplBrowserReportTest, ReportOnlyHTTPFamily) { + KURL url = url_test_helpers::ToKURL(GetParam()); + SetURL(url); + UseCounterImpl use_counter; + use_counter.DidCommitLoad(GetFrame()); + + // Count every feature types in UseCounterFeatureType. + use_counter.Count(mojom::WebFeature::kFetch, GetFrame()); + use_counter.Count(CSSPropertyID::kHeight, + UseCounterImpl::CSSPropertyType::kDefault, GetFrame()); + use_counter.Count(CSSPropertyID::kHeight, + UseCounterImpl::CSSPropertyType::kAnimation, GetFrame()); + + auto* dummy_client = + static_cast<UseCounterImplBrowserReportTest::DummyLocalFrameClient*>( + GetFrame()->Client()); + + EXPECT_EQ(!dummy_client->observed_features().empty(), + url.ProtocolIsInHTTPFamily()); +} + TEST_F(UseCounterImplTest, RecordingExtensions) { const std::string histogram = kExtensionFeaturesHistogramName; constexpr auto item = mojom::WebFeature::kFetch;
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_performance_monitor.cc b/third_party/blink/renderer/core/html/canvas/canvas_performance_monitor.cc index 41dc7fba..a3f993a2 100644 --- a/third_party/blink/renderer/core/html/canvas/canvas_performance_monitor.cc +++ b/third_party/blink/renderer/core/html/canvas/canvas_performance_monitor.cc
@@ -5,6 +5,7 @@ #include "third_party/blink/renderer/core/html/canvas/canvas_performance_monitor.h" #include "base/metrics/histogram_functions.h" +#include "base/metrics/histogram_macros.h" #include "base/trace_event/trace_event.h" #include "third_party/blink/renderer/core/html/canvas/canvas_rendering_context.h" @@ -204,6 +205,20 @@ TimeTicks end_time) { TRACE_EVENT0("blink", "CanvasPerformanceMonitor::RecordMetrics"); TimeDelta elapsed_time = end_time - start_time; + constexpr size_t kKiloByte = 1024; + int partition_alloc_kb = WTF::Partitions::TotalActiveBytes() / kKiloByte; + int blink_gc_alloc_kb = ProcessHeap::TotalAllocatedObjectSize() / kKiloByte; + + bool canvas_context_type_was_used[CanvasRenderingContext::kMaxValue]; + for (bool& b : canvas_context_type_was_used) { + b = false; + } + + bool offscreen_context_type_was_used[CanvasRenderingContext::kMaxValue]; + for (bool& b : offscreen_context_type_was_used) { + b = false; + } + while (!rendering_context_descriptions_.IsEmpty()) { RenderingContextDescriptionCodec desc( rendering_context_descriptions_.TakeAny()); @@ -232,6 +247,84 @@ base::UmaHistogramMicrosecondsTimes(histogram_name.Latin1(), elapsed_time); } + if (desc.IsOffscreen()) { + offscreen_context_type_was_used[desc.ContextType()] = true; + } else { + canvas_context_type_was_used[desc.ContextType()] = true; + } + } + + if (canvas_context_type_was_used[CanvasRenderingContext::kContext2D]) { + UMA_HISTOGRAM_MEMORY_KB("Blink.Canvas.PartionAlloc.2D", partition_alloc_kb); + UMA_HISTOGRAM_MEMORY_KB("Blink.Canvas.BlinkGC.2D", blink_gc_alloc_kb); + } + + if (canvas_context_type_was_used[CanvasRenderingContext::kContextWebgl] || + canvas_context_type_was_used + [CanvasRenderingContext::kContextExperimentalWebgl]) { + UMA_HISTOGRAM_MEMORY_KB("Blink.Canvas.PartionAlloc.WebGL", + partition_alloc_kb); + UMA_HISTOGRAM_MEMORY_KB("Blink.Canvas.BlinkGC.WebGL", blink_gc_alloc_kb); + } + + if (canvas_context_type_was_used[CanvasRenderingContext::kContextWebgl2]) { + UMA_HISTOGRAM_MEMORY_KB("Blink.Canvas.PartionAlloc.WebGL2", + partition_alloc_kb); + UMA_HISTOGRAM_MEMORY_KB("Blink.Canvas.BlinkGC.WebGL2", blink_gc_alloc_kb); + } + + if (canvas_context_type_was_used + [CanvasRenderingContext::kContextGPUPresent]) { + UMA_HISTOGRAM_MEMORY_KB("Blink.Canvas.PartionAlloc.WebGPU", + partition_alloc_kb); + UMA_HISTOGRAM_MEMORY_KB("Blink.Canvas.BlinkGC.WebGPU", blink_gc_alloc_kb); + } + + if (canvas_context_type_was_used + [CanvasRenderingContext::kContextImageBitmap]) { + UMA_HISTOGRAM_MEMORY_KB("Blink.Canvas.PartionAlloc.ImageBitmap", + partition_alloc_kb); + UMA_HISTOGRAM_MEMORY_KB("Blink.Canvas.BlinkGC.ImageBitmap", + blink_gc_alloc_kb); + } + + if (offscreen_context_type_was_used[CanvasRenderingContext::kContext2D]) { + UMA_HISTOGRAM_MEMORY_KB("Blink.OffscreenCanvas.PartionAlloc.2D", + partition_alloc_kb); + UMA_HISTOGRAM_MEMORY_KB("Blink.OffscreenCanvas.BlinkGC.2D", + blink_gc_alloc_kb); + } + + if (offscreen_context_type_was_used[CanvasRenderingContext::kContextWebgl] || + offscreen_context_type_was_used + [CanvasRenderingContext::kContextExperimentalWebgl]) { + UMA_HISTOGRAM_MEMORY_KB("Blink.OffscreenCanvas.PartionAlloc.WebGL", + partition_alloc_kb); + UMA_HISTOGRAM_MEMORY_KB("Blink.OffscreenCanvas.BlinkGC.WebGL", + blink_gc_alloc_kb); + } + + if (offscreen_context_type_was_used[CanvasRenderingContext::kContextWebgl2]) { + UMA_HISTOGRAM_MEMORY_KB("Blink.OffscreenCanvas.PartionAlloc.WebGL2", + partition_alloc_kb); + UMA_HISTOGRAM_MEMORY_KB("Blink.OffscreenCanvas.BlinkGC.WebGL2", + blink_gc_alloc_kb); + } + + if (offscreen_context_type_was_used + [CanvasRenderingContext::kContextGPUPresent]) { + UMA_HISTOGRAM_MEMORY_KB("Blink.OffscreenCanvas.PartionAlloc.WebGPU", + partition_alloc_kb); + UMA_HISTOGRAM_MEMORY_KB("Blink.OffscreenCanvas.BlinkGC.WebGPU", + blink_gc_alloc_kb); + } + + if (offscreen_context_type_was_used + [CanvasRenderingContext::kContextImageBitmap]) { + UMA_HISTOGRAM_MEMORY_KB("Blink.OffscreenCanvas.PartionAlloc.ImageBitmap", + partition_alloc_kb); + UMA_HISTOGRAM_MEMORY_KB("Blink.OffscreenCanvas.BlinkGC.ImageBitmap", + blink_gc_alloc_kb); } }
diff --git a/third_party/blink/renderer/core/layout/layout_shift_tracker_test.cc b/third_party/blink/renderer/core/layout/layout_shift_tracker_test.cc index d062cf71..138d251 100644 --- a/third_party/blink/renderer/core/layout/layout_shift_tracker_test.cc +++ b/third_party/blink/renderer/core/layout/layout_shift_tracker_test.cc
@@ -385,6 +385,7 @@ EXPECT_FLOAT_EQ(0.0, tracker.Score()); tracker.ResetTimerForTesting(); + WebView().MainFrameWidget()->HandleInputEvent( WebCoalescedInputEvent(event2, ui::LatencyInfo())); @@ -393,13 +394,189 @@ auto entries = perf.getBufferedEntriesByType("layout-shift"); EXPECT_EQ(1u, entries.size()); - LayoutShift* shift = static_cast<LayoutShift*>(entries.front().Get()); + LayoutShift* shift = static_cast<LayoutShift*>(entries.back().Get()); // region fraction 50%, distance fraction 1/8 const double expected_shift = 0.5 * 0.125; EXPECT_TRUE(shift->hadRecentInput()); EXPECT_FLOAT_EQ(expected_shift, shift->value()); + EXPECT_FLOAT_EQ(0.0, tracker.Score()); +} + +TEST_F(LayoutShiftTrackerSimTest, TouchDraggingAction) { + SimRequest main_resource("https://example.com/", "text/html"); + LoadURL("https://example.com/"); + main_resource.Complete(R"HTML( + <style> + body { margin: 0; height: 1500px; } + #box { + left: 0px; + top: 0px; + width: 400px; + height: 600px; + background: yellow; + position: absolute; + } + </style> + <div id="box"></div> + <script> + box.addEventListener("pointermove", (e) => { + box.style.top = "100px"; + e.preventDefault(); + }); + </script> + )HTML"); + + Compositor().BeginFrame(); + test::RunPendingTasks(); + + WebPointerProperties pointer_properties = WebPointerProperties( + 1 /* PointerId */, WebPointerProperties::PointerType::kTouch, + WebPointerProperties::Button::kLeft); + + WebPointerEvent event1(WebInputEvent::Type::kPointerDown, pointer_properties, + 5, 5); + WebPointerEvent event2(WebInputEvent::Type::kPointerMove, pointer_properties, + 5, 5); + WebPointerEvent event3(WebInputEvent::Type::kPointerUp, pointer_properties, 5, + 5); + + // Coordinates inside #box. + event1.SetPositionInWidget(100, 160); + event2.SetPositionInWidget(100, 180); + event3.SetPositionInWidget(100, 180); + + WebView().MainFrameWidget()->HandleInputEvent( + WebCoalescedInputEvent(event1, ui::LatencyInfo())); + + WindowPerformance& perf = *DOMWindowPerformance::performance(Window()); + auto& tracker = MainFrame().GetFrameView()->GetLayoutShiftTracker(); + + EXPECT_EQ(0u, perf.getBufferedEntriesByType("layout-shift").size()); + EXPECT_FLOAT_EQ(0.0, tracker.Score()); + + WebView().MainFrameWidget()->HandleInputEvent( + WebCoalescedInputEvent(event2, ui::LatencyInfo())); + + // Executes the BeginMainFrame processing steps and calls ReportShift in + // LayoutShiftTracker to get the latest layout shift score. + Compositor().BeginFrame(); + test::RunPendingTasks(); + + EXPECT_EQ(0u, perf.getBufferedEntriesByType("layout-shift").size()); + EXPECT_FLOAT_EQ(0.0, tracker.Score()); + + WebView().MainFrameWidget()->HandleInputEvent( + WebCoalescedInputEvent(event3, ui::LatencyInfo())); + + // region fraction 50%, distance fraction 1/8 + const double expected_shift = 0.5 * 0.125; + + auto entries = perf.getBufferedEntriesByType("layout-shift"); + EXPECT_EQ(1u, entries.size()); + LayoutShift* shift = static_cast<LayoutShift*>(entries.back().Get()); + + EXPECT_TRUE(shift->hadRecentInput()); + EXPECT_FLOAT_EQ(expected_shift, shift->value()); + EXPECT_FLOAT_EQ(0.0, tracker.Score()); +} + +TEST_F(LayoutShiftTrackerSimTest, TouchScrollingAction) { + SimRequest main_resource("https://example.com/", "text/html"); + LoadURL("https://example.com/"); + main_resource.Complete(R"HTML( + <style> + body { margin: 0; height: 1500px; } + #box { + left: 0px; + top: 0px; + width: 400px; + height: 600px; + background: yellow; + position: absolute; + } + </style> + <div id="box"></div> + <script> + box.addEventListener("pointermove", (e) => { + box.style.top = e.clientY; + e.preventDefault(); + }); + </script> + )HTML"); + + Compositor().BeginFrame(); + test::RunPendingTasks(); + + WebPointerProperties pointer_properties = WebPointerProperties( + 1 /* PointerId */, WebPointerProperties::PointerType::kTouch, + WebPointerProperties::Button::kLeft); + + WebPointerEvent event1(WebInputEvent::Type::kPointerDown, pointer_properties, + 5, 5); + WebPointerEvent event2(WebInputEvent::Type::kPointerMove, pointer_properties, + 5, 5); + WebPointerEvent event3(WebInputEvent::Type::kPointerCancel, + pointer_properties, 5, 5); + WebPointerEvent event4(WebInputEvent::Type::kPointerMove, pointer_properties, + 5, 5); + + // Coordinates inside #box. + event1.SetPositionInWidget(80, 90); + event2.SetPositionInWidget(80, 100); + event3.SetPositionInWidget(80, 100); + event4.SetPositionInWidget(80, 150); + + WebView().MainFrameWidget()->HandleInputEvent( + WebCoalescedInputEvent(event1, ui::LatencyInfo())); + + WindowPerformance& perf = *DOMWindowPerformance::performance(Window()); + auto& tracker = MainFrame().GetFrameView()->GetLayoutShiftTracker(); + + EXPECT_EQ(0u, perf.getBufferedEntriesByType("layout-shift").size()); + EXPECT_FLOAT_EQ(0.0, tracker.Score()); + + WebView().MainFrameWidget()->HandleInputEvent( + WebCoalescedInputEvent(event2, ui::LatencyInfo())); + + // Executes the BeginMainFrame processing steps and calls ReportShift in + // LayoutShiftTracker to get the latest layout shift score. + Compositor().BeginFrame(); + test::RunPendingTasks(); + + EXPECT_EQ(0u, perf.getBufferedEntriesByType("layout-shift").size()); EXPECT_FLOAT_EQ(0, tracker.Score()); + + WebView().MainFrameWidget()->HandleInputEvent( + WebCoalescedInputEvent(event3, ui::LatencyInfo())); + + // region fraction 50%, distance fraction 1/8 + const double expected_shift = 0.5 * 0.125; + auto entries = perf.getBufferedEntriesByType("layout-shift"); + EXPECT_EQ(1u, entries.size()); + LayoutShift* shift = static_cast<LayoutShift*>(entries.back().Get()); + + // For touch scroll, hasRecentInput is false, and the layout shift score is + // reported when a PointerCancel event is received. + EXPECT_FALSE(shift->hadRecentInput()); + EXPECT_FLOAT_EQ(expected_shift, shift->value()); + EXPECT_FLOAT_EQ(expected_shift, tracker.Score()); + + WebView().MainFrameWidget()->HandleInputEvent( + WebCoalescedInputEvent(event4, ui::LatencyInfo())); + + // Executes the BeginMainFrame processing steps and calls ReportShift in + // LayoutShiftTracker to get the latest layout shift score. + Compositor().BeginFrame(); + test::RunPendingTasks(); + + entries = perf.getBufferedEntriesByType("layout-shift"); + EXPECT_EQ(2u, entries.size()); + shift = static_cast<LayoutShift*>(entries.back().Get()); + + EXPECT_FALSE(shift->hadRecentInput()); + EXPECT_GT(shift->value(), 0); + EXPECT_GT(tracker.Score(), expected_shift); } TEST_F(LayoutShiftTrackerTest, StableCompositingChanges) {
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.cc index 24443c1..1c7764a6 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.cc
@@ -55,15 +55,19 @@ pending_descendants(std::move(state.pending_descendants)), include_used_fonts(state.include_used_fonts), has_box_placeholder(state.has_box_placeholder), - needs_box_fragment(state.needs_box_fragment) { + needs_box_fragment(state.needs_box_fragment), + is_svg_text(state.is_svg_text) { if (state.scaled_font) font = &*scaled_font; else font = state.font; } -void NGInlineBoxState::InitializeFont(bool is_svg_text, - const LayoutObject& layout_object) { +void NGInlineBoxState::ResetStyle(const ComputedStyle& style_ref, + bool is_svg, + const LayoutObject& layout_object) { + style = &style_ref; + is_svg_text = is_svg; if (!is_svg_text) { scaling_factor = 1.0f; font = &style->GetFont(); @@ -78,10 +82,16 @@ void NGInlineBoxState::ComputeTextMetrics(const ComputedStyle& styleref, const Font& fontref, FontBaseline baseline_type) { - if (const SimpleFontData* font_data = fontref.PrimaryFont()) - text_metrics = font_data->GetFontMetrics().GetFontHeight(baseline_type); - else + if (const SimpleFontData* font_data = fontref.PrimaryFont()) { + if (is_svg_text) { + text_metrics = + font_data->GetFontMetrics().GetFloatFontHeight(baseline_type); + } else { + text_metrics = font_data->GetFontMetrics().GetFontHeight(baseline_type); + } + } else { text_metrics = FontHeight(); + } text_top = -text_metrics.ascent; text_height = text_metrics.LineHeight(); @@ -188,8 +198,8 @@ // Initialize the box state for the line box. NGInlineBoxState& line_box_state = LineBoxState(); if (line_box_state.style != &line_style) { - line_box_state.style = &line_style; - line_box_state.InitializeFont(node.IsSvgText(), *node.GetLayoutBox()); + line_box_state.ResetStyle(line_style, node.IsSvgText(), + *node.GetLayoutBox()); // Use a "strut" (a zero-width inline box with the element's font and // line height properties) as the initial metrics for the line box. @@ -226,8 +236,7 @@ stack_.resize(stack_.size() + 1); NGInlineBoxState* box = &stack_.back(); box->fragment_start = line_box.size(); - box->style = &style; - box->InitializeFont(is_svg_text_, *item.GetLayoutObject()); + box->ResetStyle(style, is_svg_text_, *item.GetLayoutObject()); box->item = &item; box->has_start_edge = item_result.has_edge; box->margin_inline_start = item_result.margins.inline_start; @@ -304,8 +313,6 @@ DCHECK(box != stack_.begin() && box->item->Type() != NGInlineItem::kAtomicInline); box->has_box_placeholder = true; - DCHECK(box->style); - const ComputedStyle& style = *box->style; LayoutUnit block_offset; LayoutUnit block_size; @@ -313,7 +320,13 @@ // The inline box should have the height of the font metrics without the // line-height property. Compute from style because |box->metrics| includes // the line-height property. - FontHeight metrics = style.GetFontHeight(baseline_type); + FontHeight metrics; + if (const auto* font_data = box->font->PrimaryFont()) { + metrics = + is_svg_text_ + ? font_data->GetFontMetrics().GetFloatFontHeight(baseline_type) + : font_data->GetFontMetrics().GetFontHeight(baseline_type); + } // Extend the block direction of the box by borders and paddings. Inline // direction is already included into positions in NGLineBreaker.
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.h b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.h index ba903ef..109ead5 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.h +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.h
@@ -81,6 +81,7 @@ bool include_used_fonts = false; bool has_box_placeholder = false; bool needs_box_fragment = false; + bool is_svg_text = false; // If you add new data members, update the move constructor. @@ -90,9 +91,10 @@ NGInlineBoxState(const NGInlineBoxState&) = delete; NGInlineBoxState& operator=(const NGInlineBoxState&) = delete; - // Initialize |font| and |scaled_font|. This should be called after setting - // |style|. - void InitializeFont(bool is_svg_text, const LayoutObject& layout_object); + // Reset |style|, |is_svg_text|, |font|, |scaled_font|, and |scaling_factor|. + void ResetStyle(const ComputedStyle& style_ref, + bool is_svg, + const LayoutObject& layout_object); // True if this box has a metrics, including pending ones. Pending metrics // will be activated in |EndBoxState()|.
diff --git a/third_party/blink/renderer/core/layout/scroll_anchor.cc b/third_party/blink/renderer/core/layout/scroll_anchor.cc index 0494502f..e9ce36e 100644 --- a/third_party/blink/renderer/core/layout/scroll_anchor.cc +++ b/third_party/blink/renderer/core/layout/scroll_anchor.cc
@@ -326,7 +326,6 @@ void ScrollAnchor::FindAnchor() { TRACE_EVENT0("blink", "ScrollAnchor::findAnchor"); - SCOPED_BLINK_UMA_HISTOGRAM_TIMER("Layout.ScrollAnchor.TimeToFindAnchor"); bool found_priority_anchor = FindAnchorInPriorityCandidates(); if (!found_priority_anchor)
diff --git a/third_party/blink/renderer/core/loader/document_loader.cc b/third_party/blink/renderer/core/loader/document_loader.cc index c4ea74e..43ba55c7 100644 --- a/third_party/blink/renderer/core/loader/document_loader.cc +++ b/third_party/blink/renderer/core/loader/document_loader.cc
@@ -2163,6 +2163,23 @@ LocalDOMWindow* previous_window = frame_->DomWindow(); InitializeWindow(owner_document); + // Record if we have navigated to a non-secure page served from a IP address + // in the private address space. + // + // Use response_.AddressSpace() instead of frame_->DomWindow()->AddressSpace() + // since the latter isn't populated in unit tests. + // + // TODO(crbug.com/1171214): move RecordAddressSpaceFeature() call from + // StartLoadingInternal to here. + if (frame_->IsMainFrame()) { + auto address_space = response_.AddressSpace(); + if ((address_space == network::mojom::blink::IPAddressSpace::kPrivate || + address_space == network::mojom::blink::IPAddressSpace::kLocal) && + !frame_->DomWindow()->IsSecureContext()) { + CountUse(WebFeature::kMainFrameNonSecurePrivateAddressSpace); + } + } + SecurityContextInit security_init(frame_->DomWindow()); // The document constructed by XSLTProcessor and ScriptController should
diff --git a/third_party/blink/renderer/core/loader/document_loader_test.cc b/third_party/blink/renderer/core/loader/document_loader_test.cc index e91c50e..5d3a968 100644 --- a/third_party/blink/renderer/core/loader/document_loader_test.cc +++ b/third_party/blink/renderer/core/loader/document_loader_test.cc
@@ -12,6 +12,7 @@ #include "third_party/blink/public/common/features.h" #include "third_party/blink/public/mojom/frame/frame_owner_element_type.mojom-blink.h" #include "third_party/blink/public/platform/platform.h" +#include "third_party/blink/public/platform/web_string.h" #include "third_party/blink/public/platform/web_url_loader_client.h" #include "third_party/blink/public/platform/web_url_loader_mock_factory.h" #include "third_party/blink/renderer/core/frame/frame_test_helpers.h" @@ -35,11 +36,29 @@ void SetUp() override { web_view_helper_.Initialize(); url_test_helpers::RegisterMockedURLLoad( + url_test_helpers::ToKURL("http://example.com/foo.html"), + test::CoreTestDataPath("foo.html")); + url_test_helpers::RegisterMockedURLLoad( url_test_helpers::ToKURL("https://example.com/foo.html"), test::CoreTestDataPath("foo.html")); url_test_helpers::RegisterMockedURLLoad( url_test_helpers::ToKURL("https://example.com:8000/foo.html"), test::CoreTestDataPath("foo.html")); + url_test_helpers::RegisterMockedURLLoad( + url_test_helpers::ToKURL("http://192.168.1.1/foo.html"), + test::CoreTestDataPath("foo.html"), WebString::FromUTF8("text/html"), + WebURLLoaderMockFactory::GetSingletonInstance(), + network::mojom::IPAddressSpace::kPrivate); + url_test_helpers::RegisterMockedURLLoad( + url_test_helpers::ToKURL("https://192.168.1.1/foo.html"), + test::CoreTestDataPath("foo.html"), WebString::FromUTF8("text/html"), + WebURLLoaderMockFactory::GetSingletonInstance(), + network::mojom::IPAddressSpace::kPrivate); + url_test_helpers::RegisterMockedURLLoad( + url_test_helpers::ToKURL("http://somethinglocal/foo.html"), + test::CoreTestDataPath("foo.html"), WebString::FromUTF8("text/html"), + WebURLLoaderMockFactory::GetSingletonInstance(), + network::mojom::IPAddressSpace::kLocal); } void TearDown() override { @@ -454,4 +473,85 @@ ->LastNavigationHadTrustedInitiator()); } +TEST_F(DocumentLoaderTest, PublicSecureNotCounted) { + // Checking to make sure secure pages served in the public address space + // aren't counted for WebFeature::kMainFrameNonSecurePrivateAddressSpace + WebViewImpl* web_view_impl = + web_view_helper_.InitializeAndLoad("https://example.com/foo.html"); + Document* document = + To<LocalFrame>(web_view_impl->GetPage()->MainFrame())->GetDocument(); + EXPECT_FALSE(document->IsUseCounted( + WebFeature::kMainFrameNonSecurePrivateAddressSpace)); +} + +TEST_F(DocumentLoaderTest, PublicNonSecureNotCounted) { + // Checking to make sure non-secure pages served in the public address space + // aren't counted for WebFeature::kMainFrameNonSecurePrivateAddressSpace + WebViewImpl* web_view_impl = + web_view_helper_.InitializeAndLoad("http://example.com/foo.html"); + Document* document = + To<LocalFrame>(web_view_impl->GetPage()->MainFrame())->GetDocument(); + EXPECT_FALSE(document->IsUseCounted( + WebFeature::kMainFrameNonSecurePrivateAddressSpace)); +} + +TEST_F(DocumentLoaderTest, PrivateSecureNotCounted) { + // Checking to make sure secure pages served in the private address space + // aren't counted for WebFeature::kMainFrameNonSecurePrivateAddressSpace + WebViewImpl* web_view_impl = + web_view_helper_.InitializeAndLoad("https://192.168.1.1/foo.html"); + Document* document = + To<LocalFrame>(web_view_impl->GetPage()->MainFrame())->GetDocument(); + EXPECT_FALSE(document->IsUseCounted( + WebFeature::kMainFrameNonSecurePrivateAddressSpace)); +} + +TEST_F(DocumentLoaderTest, PrivateNonSecureIsCounted) { + // Checking to make sure non-secure pages served in the private address space + // are counted for WebFeature::kMainFrameNonSecurePrivateAddressSpace + WebViewImpl* web_view_impl = + web_view_helper_.InitializeAndLoad("http://192.168.1.1/foo.html"); + Document* document = + To<LocalFrame>(web_view_impl->GetPage()->MainFrame())->GetDocument(); + EXPECT_TRUE(document->IsUseCounted( + WebFeature::kMainFrameNonSecurePrivateAddressSpace)); +} + +TEST_F(DocumentLoaderTest, LocalNonSecureIsCounted) { + // Checking to make sure non-secure pages served in the local address space + // are counted for WebFeature::kMainFrameNonSecurePrivateAddressSpace + WebViewImpl* web_view_impl = + web_view_helper_.InitializeAndLoad("http://somethinglocal/foo.html"); + Document* document = + To<LocalFrame>(web_view_impl->GetPage()->MainFrame())->GetDocument(); + EXPECT_TRUE(document->IsUseCounted( + WebFeature::kMainFrameNonSecurePrivateAddressSpace)); +} + +TEST_F(DocumentLoaderSimTest, PrivateNonSecureChildFrameNotCounted) { + // Checking to make sure non-secure iframes served in the private address + // space are not counted for + // WebFeature::kMainFrameNonSecurePrivateAddressSpace + SimRequest main_resource("http://example.com", "text/html"); + SimRequest iframe_resource("http://192.168.1.1/foo.html", "text/html"); + LoadURL("http://example.com"); + + main_resource.Write(R"( + <iframe id='frame1'></iframe> + <script> + const iframe = document.getElementById('frame1'); + iframe.src = 'http://192.168.1.1/foo.html'; // navigation triggered + </script> + )"); + + main_resource.Finish(); + iframe_resource.Finish(); + + auto* child_frame = To<WebLocalFrameImpl>(MainFrame().FirstChild()); + auto* child_document = child_frame->GetFrame()->GetDocument(); + + EXPECT_FALSE(child_document->IsUseCounted( + WebFeature::kMainFrameNonSecurePrivateAddressSpace)); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc b/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc index d1f3ee0..b91d3f8f 100644 --- a/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc +++ b/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc
@@ -424,41 +424,33 @@ bool OriginTrialContext::CanEnableTrialFromName(const StringView& trial_name) { if (trial_name == "HandwritingRecognition") { return base::FeatureList::IsEnabled( - features::kHandwritingRecognitionWebPlatformApi) && - base::FeatureList::IsEnabled( features::kHandwritingRecognitionWebPlatformApiFinch); } - if (trial_name == "Portals" && - !base::FeatureList::IsEnabled(features::kPortals)) { - return false; + if (trial_name == "Portals") + return base::FeatureList::IsEnabled(features::kPortals); + + if (trial_name == "FencedFrames") + return base::FeatureList::IsEnabled(features::kFencedFrames); + + if (trial_name == "AppCache") + return base::FeatureList::IsEnabled(features::kAppCache); + + if (trial_name == "ComputePressure") + return base::FeatureList::IsEnabled(features::kComputePressure); + + if (trial_name == "FledgeInterestGroupAPI") + return base::FeatureList::IsEnabled(features::kFledgeInterestGroups); + + if (trial_name == "TrustTokens") + return base::FeatureList::IsEnabled(network::features::kTrustTokens); + + if (trial_name == "InterestCohortAPI") { + return base::FeatureList::IsEnabled( + features::kInterestCohortAPIOriginTrial); } - if (trial_name == "FencedFrames" && - !base::FeatureList::IsEnabled(features::kFencedFrames)) { - return false; - } - if (trial_name == "AppCache" && - !base::FeatureList::IsEnabled(features::kAppCache)) { - return false; - } - if (trial_name == "ComputePressure" && - !base::FeatureList::IsEnabled(features::kComputePressure)) { - return false; - } - if (trial_name == "FledgeInterestGroupAPI" && - !base::FeatureList::IsEnabled(features::kFledgeInterestGroups)) { - return false; - } - if (trial_name == "TrustTokens" && - !base::FeatureList::IsEnabled(network::features::kTrustTokens)) { - return false; - } - if (trial_name == "InterestCohortAPI" && - !base::FeatureList::IsEnabled(features::kInterestCohortAPIOriginTrial)) { - return false; - } - if (trial_name == "SpeculationRulesPrefetch" && - !base::FeatureList::IsEnabled(features::kSpeculationRulesPrefetchProxy)) { - return false; + if (trial_name == "SpeculationRulesPrefetch") { + return base::FeatureList::IsEnabled( + features::kSpeculationRulesPrefetchProxy); } if (trial_name == "ConversionMeasurement" && !base::FeatureList::IsEnabled(features::kConversionMeasurement)) {
diff --git a/third_party/blink/renderer/modules/accessibility/ax_node_object.cc b/third_party/blink/renderer/modules/accessibility/ax_node_object.cc index f1125653..0ea3ecf 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_node_object.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_node_object.cc
@@ -128,26 +128,40 @@ // It is not easily possible to find out if an element is the target of an // in-page link. -// As a workaround, we consider the following to be in-page link targets: +// As a workaround, we consider the following to be potential targets: // - <a name> -// - An element with an id that is not SVG, a <label> or <optgroup>. -// <label> does not make much sense as an in-page link target. -// Exposing <optgroup> is redundant, as thr group is already exposed via a -// child in its shadow DOM, which contains the accessible name. +// - <foo id> -- an element with an id that is not SVG, a <label> or <optgroup>. +// <label> does not make much sense as an in-page link target. +// Exposing <optgroup> is redundant, as the group is already exposed via a +// child in its shadow DOM, which contains the accessible name. +// #document -- this is always a potential link target via <a name="#">. // This is a compromise that does not include too many elements, and // has minimal impact on tests. -bool IsInPageLinkTarget(blink::Element& element) { - // We exclude elements that are in the shadow DOM. - if (element.ContainingShadowRoot() || element.IsSVGElement()) +bool IsPotentialInPageLinkTarget(blink::Node& node) { + auto* element = blink::DynamicTo<blink::Element>(&node); + if (!element) { + // The document itself is a potential link target, e.g. via <a name="#">. + return blink::IsA<blink::Document>(node); + } + + // We exclude elements that are in the shadow DOM. They cannot be linked by a + // document fragment from the main page:as they have their own id namespace. + if (element->ContainingShadowRoot()) return false; - if (auto* anchor = blink::DynamicTo<blink::HTMLAnchorElement>(&element)) { + // SVG elements are unlikely link targets, and we want to avoid creating + // a lot of noise in the AX tree or breaking tests unnecessarily. + if (element->IsSVGElement()) + return false; + + // <a name> + if (auto* anchor = blink::DynamicTo<blink::HTMLAnchorElement>(element)) { if (anchor->HasName()) return true; } - if (element.HasID() && !element.ContainingShadowRoot() && - !blink::IsA<blink::HTMLLabelElement>(element) && + // <foo id> not in an <optgroup> or <label>. + if (element->HasID() && !blink::IsA<blink::HTMLLabelElement>(element) && !blink::IsA<blink::HTMLOptGroupElement>(element)) { return true; } @@ -522,7 +536,7 @@ } // Process potential in-page link targets - if (IsInPageLinkTarget(*element)) + if (IsPotentialInPageLinkTarget(*element)) return kIncludeObject; // <span> tags are inline tags and not meant to convey information if they @@ -1792,16 +1806,21 @@ String fragment = link_url.FragmentIdentifier(); TreeScope& tree_scope = anchor->GetTreeScope(); Node* target = tree_scope.FindAnchor(fragment); - if (!target) + AXObject* ax_target = AXObjectCache().GetOrCreate(target); + if (!ax_target || !IsPotentialInPageLinkTarget(*ax_target->GetNode())) return AXObject::InPageLinkTarget(); - // If the target is not in the accessibility tree, get the first unignored - // sibling. - // TODO(accessibility) Ensure all in-page targets are unignored so that - // this extra logic becomes unnecessary. We should be able to simply call - // GetOrCreate(target) and DCHECK() that it's unignored. - // See IsInPageLinkTarget(), which includes almost all elements with an id, - // except for a few which affected tests. - return AXObjectCache().FirstAccessibleObjectFromNode(target); + +#if DCHECK_IS_ON() + // Link targets always have an element, unless it is the document itself, + // e.g. via <a href="#">. + DCHECK(ax_target->IsWebArea() || ax_target->GetElement()) + << "The link target is expected to be a document or an element: " + << ax_target->ToString(true, true) << "\n* URL fragment = " << fragment; + DCHECK(!ax_target->AccessibilityIsIgnored()) + << "The link target cannot be ignored: " + << ax_target->ToString(true, true) << "\n* URL fragment = " << fragment; +#endif + return ax_target; } AccessibilityOrientation AXNodeObject::Orientation() const {
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc index ddcff24..44450298 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
@@ -2986,27 +2986,6 @@ return result; } -AXObject* AXObjectCacheImpl::FirstAccessibleObjectFromNode(const Node* node) { - if (!node) - return nullptr; - - AXObject* accessible_object = GetOrCreate(node->GetLayoutObject()); - while (accessible_object && - !accessible_object->AccessibilityIsIncludedInTree()) { - node = NodeTraversal::Next(*node); - - while (node && !node->GetLayoutObject()) - node = NodeTraversal::NextSkippingChildren(*node); - - if (!node) - return nullptr; - - accessible_object = GetOrCreate(node->GetLayoutObject()); - } - - return accessible_object; -} - bool AXObjectCacheImpl::NodeIsTextControl(const Node* node) { if (!node) return false;
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h index 4677c4c7..d9891d9 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h +++ b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h
@@ -223,8 +223,6 @@ // exist or can be repaired all the way to the root. bool IsStillInTree(AXObject*); - AXObject* FirstAccessibleObjectFromNode(const Node*); - void ChildrenChangedWithCleanLayout(Node* optional_node_for_relation_update, AXObject*);
diff --git a/third_party/blink/renderer/modules/csspaint/background_color_paint_worklet.cc b/third_party/blink/renderer/modules/csspaint/background_color_paint_worklet.cc index 6cc4aab9..086bb6fb 100644 --- a/third_party/blink/renderer/modules/csspaint/background_color_paint_worklet.cc +++ b/third_party/blink/renderer/modules/csspaint/background_color_paint_worklet.cc
@@ -24,8 +24,6 @@ namespace { -const float kProgressBoundsTolerance = 0.000001f; - // This class includes information that is required by the compositor thread // when painting background color. class BackgroundColorPaintWorkletInput : public PaintWorkletInput { @@ -100,11 +98,8 @@ // Get the start and end color based on the progress and offsets. unsigned result_index = offsets.size() - 1; - // The progress of the animation might outside of [0, 1] by - // kProgressBoundsTolerance. if (progress <= 0) { result_index = 0; - DCHECK_GE(progress, -kProgressBoundsTolerance); } else if (progress > 0 && progress < 1) { for (unsigned i = 0; i < offsets.size() - 1; i++) { if (progress <= offsets[i + 1]) { @@ -113,10 +108,8 @@ } } } - if (result_index == offsets.size() - 1) { - DCHECK_LE(std::fabs(progress - 1), kProgressBoundsTolerance); + if (result_index == offsets.size() - 1) result_index = offsets.size() - 2; - } // Because the progress is a global one, we need to adjust it with offsets. float adjusted_progress = (progress - offsets[result_index]) /
diff --git a/third_party/blink/renderer/modules/mediastream/local_media_stream_audio_source.cc b/third_party/blink/renderer/modules/mediastream/local_media_stream_audio_source.cc index 0bf0c1f..d284b26 100644 --- a/third_party/blink/renderer/modules/mediastream/local_media_stream_audio_source.cc +++ b/third_party/blink/renderer/modules/mediastream/local_media_stream_audio_source.cc
@@ -126,7 +126,7 @@ base::StringPrintf("LocalMediaStreamAudioSource::OnCaptureError: %d, %s", code, why.c_str())); - StopSourceOnError(why); + StopSourceOnError(code, why); } void LocalMediaStreamAudioSource::OnCaptureMuted(bool is_muted) {
diff --git a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc index 5180df8..32f4dfc 100644 --- a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc +++ b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc
@@ -488,7 +488,7 @@ const std::string& message) { SendLogMessageWithSessionId(base::StringPrintf( "OnCaptureError({code=%d, message=%s})", code, message.c_str())); - StopSourceOnError(message); + StopSourceOnError(code, message); } void ProcessedLocalAudioSource::OnCaptureMuted(bool is_muted) {
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_processor.cc b/third_party/blink/renderer/modules/mediastream/user_media_processor.cc index 0c98a56..1300f8a 100644 --- a/third_party/blink/renderer/modules/mediastream/user_media_processor.cc +++ b/third_party/blink/renderer/modules/mediastream/user_media_processor.cc
@@ -1768,17 +1768,28 @@ for (auto* device_it = pending_local_sources_.begin(); device_it != pending_local_sources_.end(); ++device_it) { if (IsSameSource(*device_it, source)) { - WebPlatformMediaStreamSource* const source_extra_data = + WebPlatformMediaStreamSource* const platform_source = source->GetPlatformSource(); - const bool is_audio_source = - source->GetType() == MediaStreamSource::kTypeAudio; - NotifyCurrentRequestInfoOfAudioSourceStarted( - source_extra_data, - is_audio_source ? MediaStreamRequestResult::TRACK_START_FAILURE_AUDIO - : MediaStreamRequestResult::TRACK_START_FAILURE_VIDEO, - String::FromUTF8(is_audio_source - ? "Failed to access audio capture device" - : "Failed to access video capture device")); + MediaStreamRequestResult result; + String message; + if (source->GetType() == MediaStreamSource::kTypeAudio) { + auto error = MediaStreamAudioSource::From(source)->ErrorCode(); + if (error.has_value() && + error.value() == + media::AudioCapturerSource::ErrorCode::kSystemPermissions) { + result = MediaStreamRequestResult::SYSTEM_PERMISSION_DENIED; + message = + "System Permssions prevented access to audio capture device"; + } else { + result = MediaStreamRequestResult::TRACK_START_FAILURE_AUDIO; + message = "Failed to access audio capture device"; + } + } else { + result = MediaStreamRequestResult::TRACK_START_FAILURE_VIDEO; + message = "Failed to access video capture device"; + } + NotifyCurrentRequestInfoOfAudioSourceStarted(platform_source, result, + message); pending_local_sources_.erase(device_it); return true; }
diff --git a/third_party/blink/renderer/platform/fonts/font_metrics.cc b/third_party/blink/renderer/platform/fonts/font_metrics.cc index e59d727..b5e333a 100644 --- a/third_party/blink/renderer/platform/fonts/font_metrics.cc +++ b/third_party/blink/renderer/platform/fonts/font_metrics.cc
@@ -154,7 +154,7 @@ switch (baseline_type) { case kAlphabeticBaseline: NOTREACHED(); - return ascent_; + return float_ascent_; case kIdeographicBaseline: return FloatHeight() / 2; @@ -167,27 +167,27 @@ // TODO(layout-dev): Should refer to 'ideo' in OpenType. return FloatHeight(); case kXMiddleBaseline: - return ascent_ - XHeight() / 2; + return float_ascent_ - XHeight() / 2; case kMathBaseline: // TODO(layout-dev): Should refer to 'math' in OpenType or 'bsln' value 4 // in TrueType AAT. - return ascent_ * 0.5f; + return float_ascent_ * 0.5f; case kHangingBaseline: // TODO(layout-dev): Should refer to 'hang' in OpenType or 'bsln' value 3 // in TrueType AAT. - return ascent_ * 0.2f; + return float_ascent_ * 0.2f; case kTextOverBaseline: return 0; } NOTREACHED(); - return ascent_; + return float_ascent_; } int FontMetrics::IntAscentInternal(FontBaseline baseline_type) const { switch (baseline_type) { case kAlphabeticBaseline: NOTREACHED(); - return ascent_int_; + return int_ascent_; case kIdeographicBaseline: return Height() - Height() / 2; @@ -200,19 +200,19 @@ // TODO(layout-dev): Should refer to 'ideo' in OpenType. return Height(); case kXMiddleBaseline: - return ascent_int_ - static_cast<int>(XHeight() / 2); + return int_ascent_ - static_cast<int>(XHeight() / 2); case kMathBaseline: // TODO(layout-dev): Should refer to 'math' in OpenType or 'bsln' value 4 // in TrueType AAT. - return ascent_int_ / 2; + return int_ascent_ / 2; case kHangingBaseline: // TODO(layout-dev): Should refer to 'hang' in OpenType or 'bsln' value 3 // in TrueType AAT. - return ascent_int_ * 2 / 10; + return int_ascent_ * 2 / 10; case kTextOverBaseline: return 0; } NOTREACHED(); - return ascent_int_; + return int_ascent_; } }
diff --git a/third_party/blink/renderer/platform/fonts/font_metrics.h b/third_party/blink/renderer/platform/fonts/font_metrics.h index 4ca5396..f2506e84 100644 --- a/third_party/blink/renderer/platform/fonts/font_metrics.h +++ b/third_party/blink/renderer/platform/fonts/font_metrics.h
@@ -41,14 +41,14 @@ public: FontMetrics() : units_per_em_(kGDefaultUnitsPerEm), - ascent_(0), - descent_(0), + float_ascent_(0), + float_descent_(0), line_gap_(0), line_spacing_(0), x_height_(0), zero_width_(0), - ascent_int_(0), - descent_int_(0), + int_ascent_(0), + int_descent_(0), has_x_height_(false), has_zero_width_(false) {} @@ -57,27 +57,27 @@ float FloatAscent(FontBaseline baseline_type = kAlphabeticBaseline) const { if (baseline_type == kAlphabeticBaseline) - return ascent_; + return float_ascent_; return FloatAscentInternal(baseline_type); } void SetAscent(float ascent) { - ascent_ = ascent; - ascent_int_ = static_cast<int>(lroundf(ascent)); + float_ascent_ = ascent; + int_ascent_ = static_cast<int>(lroundf(ascent)); } float FloatDescent(FontBaseline baseline_type = kAlphabeticBaseline) const { if (baseline_type == kAlphabeticBaseline) - return descent_; + return float_descent_; return FloatHeight() - FloatAscentInternal(baseline_type); } void SetDescent(float descent) { - descent_ = descent; - descent_int_ = static_cast<int>(lroundf(descent)); + float_descent_ = descent; + int_descent_ = static_cast<int>(lroundf(descent)); } - float FloatHeight() const { return ascent_ + descent_; } + float FloatHeight() const { return float_ascent_ + float_descent_; } float FloatLineGap() const { return line_gap_; } void SetLineGap(float line_gap) { line_gap_ = line_gap; } @@ -97,17 +97,17 @@ // Integer variants of certain metrics, used for HTML rendering. int Ascent(FontBaseline baseline_type = kAlphabeticBaseline) const { if (baseline_type == kAlphabeticBaseline) - return ascent_int_; + return int_ascent_; return IntAscentInternal(baseline_type); } int Descent(FontBaseline baseline_type = kAlphabeticBaseline) const { if (baseline_type == kAlphabeticBaseline) - return descent_int_; + return int_descent_; return Height() - IntAscentInternal(baseline_type); } - int Height() const { return ascent_int_ + descent_int_; } + int Height() const { return int_ascent_ + int_descent_; } int LineGap() const { return static_cast<int>(lroundf(line_gap_)); } int LineSpacing() const { return static_cast<int>(lroundf(line_spacing_)); } @@ -129,6 +129,10 @@ return LayoutUnit::FromFloatRound(line_spacing_); } + FontHeight GetFloatFontHeight(FontBaseline baseline_type) const { + return FontHeight(FixedAscent(baseline_type), FixedDescent(baseline_type)); + } + FontHeight GetFontHeight( FontBaseline baseline_type = kAlphabeticBaseline) const { // TODO(kojii): In future, we'd like to use LayoutUnit metrics to support @@ -187,10 +191,10 @@ void Reset() { units_per_em_ = kGDefaultUnitsPerEm; - ascent_ = 0; - descent_ = 0; - ascent_int_ = 0; - descent_int_ = 0; + float_ascent_ = 0; + float_descent_ = 0; + int_ascent_ = 0; + int_descent_ = 0; line_gap_ = 0; line_spacing_ = 0; x_height_ = 0; @@ -203,16 +207,16 @@ PLATFORM_EXPORT int IntAscentInternal(FontBaseline baseline_type) const; unsigned units_per_em_; - float ascent_; - float descent_; + float float_ascent_; + float float_descent_; float line_gap_; float line_spacing_; float x_height_; float zero_width_; absl::optional<float> underline_thickness_ = absl::nullopt; absl::optional<float> underline_position_ = absl::nullopt; - int ascent_int_; - int descent_int_; + int int_ascent_; + int int_descent_; bool has_x_height_; bool has_zero_width_; };
diff --git a/third_party/blink/renderer/platform/mediastream/media_stream_audio_source.cc b/third_party/blink/renderer/platform/mediastream/media_stream_audio_source.cc index 3472afb1..cbfe7b8 100644 --- a/third_party/blink/renderer/platform/mediastream/media_stream_audio_source.cc +++ b/third_party/blink/renderer/platform/mediastream/media_stream_audio_source.cc
@@ -251,13 +251,24 @@ } } -void MediaStreamAudioSource::StopSourceOnError(const std::string& why) { +void MediaStreamAudioSource::StopSourceOnError( + media::AudioCapturerSource::ErrorCode code, + const std::string& why) { LogMessage(base::StringPrintf("%s({why=%s})", __func__, why.c_str())); + // Stop source when error occurs. PostCrossThreadTask( *task_runner_, FROM_HERE, - CrossThreadBindOnce(&WebPlatformMediaStreamSource::StopSource, - GetWeakPtr())); + CrossThreadBindOnce( + &MediaStreamAudioSource::StopSourceOnErrorOnTaskRunner, GetWeakPtr(), + code)); +} + +void MediaStreamAudioSource::StopSourceOnErrorOnTaskRunner( + media::AudioCapturerSource::ErrorCode code) { + DCHECK(task_runner_->BelongsToCurrentThread()); + SetErrorCode(code); + StopSource(); } void MediaStreamAudioSource::SetMutedState(bool muted_state) {
diff --git a/third_party/blink/renderer/platform/mediastream/media_stream_audio_source.h b/third_party/blink/renderer/platform/mediastream/media_stream_audio_source.h index 40ca601..ce0ba793 100644 --- a/third_party/blink/renderer/platform/mediastream/media_stream_audio_source.h +++ b/third_party/blink/renderer/platform/mediastream/media_stream_audio_source.h
@@ -11,6 +11,7 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" +#include "media/base/audio_capturer_source.h" #include "media/base/limits.h" #include "third_party/blink/public/platform/modules/mediastream/web_platform_media_stream_source.h" #include "third_party/blink/renderer/platform/mediastream/media_stream_audio_deliverer.h" @@ -127,6 +128,11 @@ return absl::nullopt; } + absl::optional<media::AudioCapturerSource::ErrorCode> ErrorCode() { + DCHECK(task_runner_->BelongsToCurrentThread()); + return error_code_; + } + protected: // Returns a new MediaStreamAudioTrack. |id| is the blink track's ID in UTF-8. // Subclasses may override this to provide an extended implementation. @@ -169,7 +175,8 @@ // Called by subclasses when capture error occurs. // Note: This can be called on any thread, and will post a task to the main // thread to stop the source soon. - void StopSourceOnError(const std::string& why); + void StopSourceOnError(media::AudioCapturerSource::ErrorCode code, + const std::string& why); // Sets muted state and notifies it to all registered tracks. void SetMutedState(bool state); @@ -196,6 +203,15 @@ void LogMessage(const std::string& message); + void SetErrorCode(media::AudioCapturerSource::ErrorCode code) { + DCHECK(task_runner_->BelongsToCurrentThread()); + error_code_ = code; + } + + // The portion of StopSourceOnError processing carried out on the main thread. + void StopSourceOnErrorOnTaskRunner( + media::AudioCapturerSource::ErrorCode code); + // True if the source of audio is a local device. False if the source is // remote (e.g., streamed-in from a server). const bool is_local_source_; @@ -214,6 +230,9 @@ // thread. const scoped_refptr<base::SingleThreadTaskRunner> task_runner_; + // Code set if this source was closed due to an error. + absl::optional<media::AudioCapturerSource::ErrorCode> error_code_; + // Provides weak pointers so that MediaStreamAudioTracks won't call // StopAudioDeliveryTo() if this instance dies first. base::WeakPtrFactory<MediaStreamAudioSource> weak_factory_{this};
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index ea4e277a..20b63a70 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1020,7 +1020,7 @@ { name: "HandwritingRecognition", status: "experimental", - // Trial also requires kHandwritingRecognitionWebPlatformApi enabled. + // Trial also requires kHandwritingRecognitionWebPlatformApiFinch enabled. origin_trial_feature_name: "HandwritingRecognition", origin_trial_os: ["chromeos"] },
diff --git a/third_party/blink/renderer/platform/testing/url_test_helpers.cc b/third_party/blink/renderer/platform/testing/url_test_helpers.cc index 15da047..8f1bf35 100644 --- a/third_party/blink/renderer/platform/testing/url_test_helpers.cc +++ b/third_party/blink/renderer/platform/testing/url_test_helpers.cc
@@ -64,7 +64,8 @@ void RegisterMockedURLLoad(const WebURL& full_url, const WebString& file_path, const WebString& mime_type, - WebURLLoaderMockFactory* mock_factory) { + WebURLLoaderMockFactory* mock_factory, + network::mojom::IPAddressSpace address_space) { network::mojom::LoadTimingInfoPtr timing = network::mojom::LoadTimingInfo::New(); @@ -73,6 +74,7 @@ response.SetHttpHeaderField(http_names::kContentType, mime_type); response.SetHttpStatusCode(200); response.SetLoadTiming(*timing); + response.SetAddressSpace(address_space); mock_factory->RegisterURL(full_url, response, file_path); }
diff --git a/third_party/blink/renderer/platform/testing/url_test_helpers.h b/third_party/blink/renderer/platform/testing/url_test_helpers.h index 12c6f6c2..e6e1cea 100644 --- a/third_party/blink/renderer/platform/testing/url_test_helpers.h +++ b/third_party/blink/renderer/platform/testing/url_test_helpers.h
@@ -31,6 +31,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_TESTING_URL_TEST_HELPERS_H_ #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_TESTING_URL_TEST_HELPERS_H_ +#include "services/network/public/mojom/ip_address_space.mojom-shared.h" #include "third_party/blink/public/platform/web_string.h" #include "third_party/blink/public/platform/web_url.h" #include "third_party/blink/public/platform/web_url_loader_mock_factory.h" @@ -74,7 +75,9 @@ const WebString& file_path, const WebString& mime_type = WebString::FromUTF8("text/html"), WebURLLoaderMockFactory* mock_factory = - WebURLLoaderMockFactory::GetSingletonInstance()); + WebURLLoaderMockFactory::GetSingletonInstance(), + network::mojom::IPAddressSpace address_space = + network::mojom::IPAddressSpace::kPublic); // Unregisters a URL that has been registered, so that the same URL can be // registered again from the another test.
diff --git a/third_party/blink/renderer/platform/wtf/text/atomic_string.h b/third_party/blink/renderer/platform/wtf/text/atomic_string.h index b36b2e90..a533ffaa 100644 --- a/third_party/blink/renderer/platform/wtf/text/atomic_string.h +++ b/third_party/blink/renderer/platform/wtf/text/atomic_string.h
@@ -274,6 +274,7 @@ } // Define external global variables for the commonly used atomic strings. +// These are only usable from the main thread. WTF_EXPORT extern const AtomicString& g_null_atom; WTF_EXPORT extern const AtomicString& g_empty_atom; WTF_EXPORT extern const AtomicString& g_star_atom;
diff --git a/third_party/blink/renderer/platform/wtf/text/string_statics.cc b/third_party/blink/renderer/platform/wtf/text/string_statics.cc index 3c90f13d..aeb0d1d2 100644 --- a/third_party/blink/renderer/platform/wtf/text/string_statics.cc +++ b/third_party/blink/renderer/platform/wtf/text/string_statics.cc
@@ -83,8 +83,7 @@ String(StringImpl::empty16_bit_); // FIXME: These should be allocated at compile time. - new (NotNullTag::kNotNull, (void*)&g_star_atom) - AtomicString(AddStaticASCIILiteral("*")); + new (NotNullTag::kNotNull, (void*)&g_star_atom) AtomicString("*"); new (NotNullTag::kNotNull, (void*)&g_xml_atom) AtomicString(AddStaticASCIILiteral("xml")); new (NotNullTag::kNotNull, (void*)&g_xmlns_atom)
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 7acd3ba..0b1f54d 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -6263,7 +6263,6 @@ # V8 roll crbug.com/961059 fast/workers/worker-shared-asm-buffer.html [ Skip ] -crbug.com/1202013 http/tests/devtools/console/console-tainted-globals.js [ Pass Failure ] crbug.com/1170062 [ Linux ] external/wpt/html/canvas/element/manual/shadows/canvas_shadows_001.htm [ Timeout Pass ] crbug.com/1170062 [ mac ] external/wpt/html/canvas/element/manual/shadows/canvas_shadows_001.htm [ Timeout Pass ] @@ -6586,7 +6585,7 @@ crbug.com/1198443 [ Mac10.14 ] virtual/plz-dedicated-worker/external/wpt/fetch/api/basic/request-upload.any.html [ Pass Failure Timeout ] crbug.com/1198443 [ Mac10.14 ] virtual/plz-dedicated-worker/external/wpt/fetch/api/basic/request-upload.any.worker.html [ Pass Failure Timeout ] crbug.com/1204086 external/wpt/html/cross-origin-opener-policy/reporting/navigation-reporting/report-only-same-origin-report-to.https.html [ Pass Failure ] -crbug.com/1204086 external/wpt/requestidlecallback/callback-invoked.html [ Pass Failure ] +crbug.com/1204086 external/wpt/requestidlecallback/callback-invoked.html [ Pass Failure Timeout ] # Sheriff 2021-04-30 crbug.com/1204498 [ Linux ] virtual/scroll-unification/fast/events/hit-test-cache-iframes.html [ Pass Failure ] @@ -7001,3 +7000,13 @@ # Sheriff on 2021-05-27 crbug.com/1213718 virtual/forced-high-contrast-colors/external/wpt/forced-colors-mode/backplate/* [ Pass Failure ] + +# Do not retry slow tests that also timeouts +crbug.com/1210687 [ Mac10.15 ] fast/events/open-window-from-another-frame.html [ Pass Timeout ] +crbug.com/1210687 [ Mac10.15 ] http/tests/devtools/a11y-axe-core/sources/scope-pane-a11y-test.js [ Pass Timeout ] +crbug.com/1210687 [ Mac10.15 ] http/tests/permissions/chromium/test-request-worker.html [ Pass Timeout ] +crbug.com/1210687 [ Mac10.15 ] storage/websql/sql-error-codes.html [ Pass Timeout ] +crbug.com/1210687 [ Mac10.15 ] external/wpt/html/user-activation/propagation-crossorigin.sub.tentative.html [ Pass Timeout ] +crbug.com/1210687 [ Win ] virtual/threaded/http/tests/devtools/tracing/timeline-misc/timeline-event-dispatch.js [ Pass Timeout ] +crbug.com/1210687 [ Win ] virtual/split-http-cache-not-site-per-process/http/tests/devtools/isolated-code-cache/stale-revalidation-test.js [ Pass Timeout ] +crbug.com/1210687 [ Win ] virtual/shared_array_buffer_on_desktop/http/tests/devtools/a11y-axe-core/sources/scope-pane-a11y-test.js [ Pass Timeout ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites index 0e3b69e..3c374a2 100644 --- a/third_party/blink/web_tests/VirtualTestSuites +++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -1048,7 +1048,8 @@ "accessibility/virtual-node-child-removal.html", "accessibility/virtual-node-parent-removal.html", "accessibility/virtual-node-build-parent.html", - "accessibility/virtual-node-build-parent-multiple.html"], + "accessibility/virtual-node-build-parent-multiple.html", + "accessibility/virtual-node-removed-from-document.html"], "args": ["--force-renderer-accessibility"] }, {
diff --git a/third_party/blink/web_tests/accessibility/virtual-node-removed-from-document.html b/third_party/blink/web_tests/accessibility/virtual-node-removed-from-document.html new file mode 100644 index 0000000..927b2db --- /dev/null +++ b/third_party/blink/web_tests/accessibility/virtual-node-removed-from-document.html
@@ -0,0 +1,28 @@ +<!DOCTYPE html> +<html> +<body> + +<script src="../resources/testharness.js"></script> +<script src="../resources/testharnessreport.js"></script> + +<script> +test(function() { + var childAccessibleNode = new AccessibleNode(); + document.body.accessibleNode.appendChild(childAccessibleNode); + document.body.remove(); + + // Validate that childAccessibleNode has no child. + assert_equals(0, childAccessibleNode.childNodes.length); + + // childAccessibleNode by now would be already detached from document, by + // appending a child to detached childAccessibleNode should not cause an + // exception. + childAccessibleNode.appendChild(new AccessibleNode()); + + // Validate that childAccessibleNode has a new child. + assert_equals(1, childAccessibleNode.childNodes.length); +}); +</script> + +</body> +</html>
diff --git a/third_party/blink/web_tests/android/ChromeWPTOverrideExpectations b/third_party/blink/web_tests/android/ChromeWPTOverrideExpectations index 12fbcf7..3318d83 100644 --- a/third_party/blink/web_tests/android/ChromeWPTOverrideExpectations +++ b/third_party/blink/web_tests/android/ChromeWPTOverrideExpectations
@@ -275,6 +275,43 @@ # Test seems to be flaky on both Chrome and WebLayer. crbug.com/1177918 external/wpt/input-events/input-events-get-target-ranges.html [ Failure Pass ] +# Layout Instability tests are not calibrated for mobile screens. +crbug.com/1191142 external/wpt/layout-instability/absolute-child-shift-with-parent-contain.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/absolute-child-shift-with-parent-negative-overflow.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/absolute-child-shift-with-parent-overflow.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/body-display-change.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/buffer-layout-shift.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/buffered-flag.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/child-shift-with-parent-overflow-hidden.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/child-shift-with-parent-overflow-x-clip.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/child-shift-with-parent.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/composited-element-movement.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/content-visibility-auto-offscreen.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/expand-above-viewport.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/fixed-position-move.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/input-timestamp.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/move-distance-clamped.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/move-transformed.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/multi-clip-visual-rect.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/opacity-zero-layout-and-visible.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/partially-clipped-visual-rect.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/pointerdown-becomes-scroll.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/pointerdown-becomes-tap.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/pointermove-becomes-drag.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/recent-input.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/rtl-distance.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/shift-into-viewport.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/shift-outside-viewport.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/shift-while-scrolled.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/shift-with-overflow-status-change.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/simple-block-movement.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/sources-enclosure.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/sources-maximpact.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/sources.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/sticky-descendant-move.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/transform.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/visibility-hidden-layout-and-visible.html [ Skip ] + # Add untriaged failures in this block crbug.com/1050754 external/wpt/FileAPI/file/send-file-form-punctuation.html [ Pass Timeout ] crbug.com/1050754 external/wpt/FileAPI/url/url-charset.window.html [ Crash Pass ] @@ -1066,14 +1103,6 @@ crbug.com/1050754 external/wpt/intersection-observer/v2/simple-occlusion-svg-foreign-object.html [ Failure ] crbug.com/1050754 external/wpt/intersection-observer/v2/simple-occlusion.html [ Failure ] crbug.com/1050754 external/wpt/largest-contentful-paint/image-not-fully-visible.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/composited-element-movement.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/content-visibility-auto-offscreen.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/expand-above-viewport.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/move-distance-clamped.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/shift-into-viewport.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/sources-enclosure.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/sources-maximpact.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/sources.html [ Failure ] crbug.com/1050754 external/wpt/longtask-timing/containerNames.html [ Failure Pass ] crbug.com/1050754 external/wpt/longtask-timing/containerTypes.html [ Failure Pass ] crbug.com/1050754 external/wpt/mathml/relations/css-styling/displaystyle-1.html [ Pass ]
diff --git a/third_party/blink/web_tests/android/WebLayerWPTOverrideExpectations b/third_party/blink/web_tests/android/WebLayerWPTOverrideExpectations index 3678852..8f172fff 100644 --- a/third_party/blink/web_tests/android/WebLayerWPTOverrideExpectations +++ b/third_party/blink/web_tests/android/WebLayerWPTOverrideExpectations
@@ -320,6 +320,43 @@ # Test seems to be flaky on both Chrome and WebLayer. crbug.com/1177918 external/wpt/input-events/input-events-get-target-ranges.html [ Failure Pass ] +# Layout Instability tests are not calibrated for mobile screens. +crbug.com/1191142 external/wpt/layout-instability/absolute-child-shift-with-parent-contain.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/absolute-child-shift-with-parent-negative-overflow.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/absolute-child-shift-with-parent-overflow.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/body-display-change.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/buffer-layout-shift.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/buffered-flag.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/child-shift-with-parent-overflow-hidden.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/child-shift-with-parent-overflow-x-clip.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/child-shift-with-parent.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/composited-element-movement.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/content-visibility-auto-offscreen.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/expand-above-viewport.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/fixed-position-move.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/input-timestamp.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/move-distance-clamped.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/move-transformed.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/multi-clip-visual-rect.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/opacity-zero-layout-and-visible.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/partially-clipped-visual-rect.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/pointerdown-becomes-scroll.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/pointerdown-becomes-tap.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/pointermove-becomes-drag.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/recent-input.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/rtl-distance.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/shift-into-viewport.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/shift-outside-viewport.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/shift-while-scrolled.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/shift-with-overflow-status-change.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/simple-block-movement.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/sources-enclosure.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/sources-maximpact.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/sources.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/sticky-descendant-move.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/transform.html [ Skip ] +crbug.com/1191142 external/wpt/layout-instability/visibility-hidden-layout-and-visible.html [ Skip ] + # Add untriaged failures in this block crbug.com/1050754 external/wpt/FileAPI/file/send-file-form-punctuation.html [ Pass Timeout ] crbug.com/1050754 external/wpt/FileAPI/file/send-file-formdata-controls.html [ Failure ] @@ -1141,40 +1178,6 @@ crbug.com/1050754 external/wpt/intersection-observer/v2/simple-occlusion.html [ Failure ] crbug.com/1050754 external/wpt/largest-contentful-paint/idlharness.html [ Failure Pass ] crbug.com/1050754 external/wpt/largest-contentful-paint/image-not-fully-visible.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/absolute-child-shift-with-parent-contain.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/absolute-child-shift-with-parent-negative-overflow.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/absolute-child-shift-with-parent-overflow.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/body-display-change.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/buffer-layout-shift.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/buffered-flag.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/child-shift-with-parent-overflow-hidden.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/child-shift-with-parent-overflow-x-clip.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/child-shift-with-parent.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/composited-element-movement.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/content-visibility-auto-offscreen.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/expand-above-viewport.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/fixed-position-move.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/input-timestamp.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/move-transformed.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/multi-clip-visual-rect.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/opacity-zero-layout-and-visible.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/partially-clipped-visual-rect.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/pointerdown-becomes-scroll.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/pointerdown-becomes-tap.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/pointermove-becomes-drag.html [ Failure Pass ] -crbug.com/1050754 external/wpt/layout-instability/recent-input.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/rtl-distance.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/shift-into-viewport.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/shift-outside-viewport.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/shift-while-scrolled.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/shift-with-overflow-status-change.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/simple-block-movement.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/sources-enclosure.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/sources-maximpact.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/sources.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/sticky-descendant-move.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/transform.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/visibility-hidden-layout-and-visible.html [ Failure ] crbug.com/1050754 external/wpt/longtask-timing/containerNames.html [ Failure Pass ] crbug.com/1050754 external/wpt/longtask-timing/containerTypes.html [ Failure Pass ] crbug.com/1050754 external/wpt/longtask-timing/longtask-before-observer.window.html [ Failure Pass ] @@ -1248,7 +1251,6 @@ crbug.com/1050754 external/wpt/native-io/write_capacity_allocation_async.tentative.https.any.worker.html [ Failure Pass ] crbug.com/1050754 external/wpt/native-io/write_getLength_async_basic.tentative.https.any.sharedworker.html [ Failure ] crbug.com/1050754 external/wpt/navigation-timing/test_performance_attributes.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/orientation-event/device-orientation-events-unavailable-on-insecure-origins.html [ Failure ] crbug.com/1050754 external/wpt/orientation-sensor/AbsoluteOrientationSensor.https.html [ Failure ] crbug.com/1050754 external/wpt/orientation-sensor/RelativeOrientationSensor.https.html [ Failure ] crbug.com/1050754 external/wpt/paint-timing/fcp-only/fcp-gradient.html [ Pass ] @@ -1807,7 +1809,6 @@ crbug.com/1050754 external/wpt/web-locks/secure-context.tentative.https.any.sharedworker.html [ Failure ] crbug.com/1050754 external/wpt/web-locks/signal.tentative.https.any.sharedworker.html [ Failure ] crbug.com/1050754 external/wpt/web-locks/steal.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-share/share-sharePromise-internal-slot.https.html [ Pass ] crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html [ Failure Pass ] crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audiocontext-interface/processing-after-resume.https.html [ Failure Pass ] crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-addmodule-resolution.https.html [ Failure Pass ] @@ -2263,3 +2264,16 @@ crbug.com/1050754 external/wpt/xhr/over-1-meg.any.worker.html [ Failure Pass ] crbug.com/1050754 external/wpt/xhr/sync-no-timeout.any.sharedworker.html [ Failure ] crbug.com/1050754 external/wpt/xhr/xhr-timeout-longtask.any.html [ Failure Pass ] + +# update on Jun 2nd +crbug.com/1050754 external/wpt/eventsource/eventsource-constructor-empty-url.any.sharedworker.html [ Failure Pass ] +crbug.com/1050754 external/wpt/html/canvas/element/fill-and-stroke-styles/2d.gradient.conic.negative.rotation.html [ Failure ] +crbug.com/1050754 external/wpt/html/canvas/element/fill-and-stroke-styles/2d.gradient.conic.positive.rotation.html [ Failure ] +crbug.com/1050754 external/wpt/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.conic.negative.rotation.html [ Failure ] +crbug.com/1050754 external/wpt/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.conic.negative.rotation.worker.html [ Failure ] +crbug.com/1050754 external/wpt/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.conic.positive.rotation.html [ Failure ] +crbug.com/1050754 external/wpt/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.conic.positive.rotation.worker.html [ Failure ] +crbug.com/1050754 external/wpt/resource-timing/sizes-cache.any.sharedworker.html [ Failure ] +crbug.com/1050754 external/wpt/resource-timing/sizes-redirect.any.sharedworker.html [ Failure ] +crbug.com/1050754 external/wpt/web-bundle/subresource-loading/csp-blocked.https.tentative.html [ Failure ] +crbug.com/1050754 external/wpt/video-rvfc/request-video-frame-callback.html [ Timeout ]
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/pointermove-becomes-drag.html b/third_party/blink/web_tests/external/wpt/layout-instability/pointermove-becomes-drag.html new file mode 100644 index 0000000..0f42be0 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/layout-instability/pointermove-becomes-drag.html
@@ -0,0 +1,64 @@ +<!DOCTYPE html> +<title>Layout Instability: no shift in pointerdown becoming dragging</title> +<link rel="help" href="https://wicg.github.io/layout-instability/" /> +<style> + +body { margin: 0; } +#draggable { + top:50px; + left:50px; + width:50px; + height:50px; + background-color:blue; + position:absolute +} + +</style> +<div id="draggable" ></div> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="resources/util.js"></script> +<script> + +const draggable = document.getElementById("draggable"); +draggable.addEventListener('touchmove', function(event) { + var touch = event.targetTouches[0]; + + // Move the element when the finger moves. + draggable.style.top = touch.pageY - 25 + 'px'; + event.preventDefault(); +}, false); + +generateTouchDragSequence = () => new test_driver.Actions() + .addPointer("touch1", "touch") + .pointerMove(0, 0, {origin: draggable}) + .pointerDown() + .pointerMove(0, 15, {origin: draggable}) + .pause(100) + .pointerMove(0, 30, {origin: draggable}) + .pause(100) + .pointerMove(0, 45, {origin: draggable}) + .pause(100) + .pointerUp() + .pause(100); + +promise_test(async () => { + const watcher = new ScoreWatcher; + + // Wait for the initial render to complete. + await waitForAnimationFrames(2); + + // Send pointer events for a touch drag. + await generateTouchDragSequence().send(); + + // Touch moves which drag the objects should be counted as the excluding inputs + // for the layout shift. + assert_greater_than(watcher.score, 0); + assert_equals(watcher.scoreWithInputExclusion, 0); + +}, "No Shift in pointerdown reported when it becomes a touch drag."); + +</script>
diff --git a/third_party/blink/web_tests/http/tests/devtools/console/console-tainted-globals-expected.txt b/third_party/blink/web_tests/http/tests/devtools/console/console-tainted-globals-expected.txt index 107539a..9ee2dfd 100644 --- a/third_party/blink/web_tests/http/tests/devtools/console/console-tainted-globals-expected.txt +++ b/third_party/blink/web_tests/http/tests/devtools/console/console-tainted-globals-expected.txt
@@ -33,9 +33,9 @@ } testOverriddenToString(/^regex$/, true) -RegExp +/^regex$/ testOverriddenToString(/^regex$/, false) -RegExp +/^regex$/ testOverriddenToString(new Date, true) Date testOverriddenToString(new Date, false)
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_svg_text/svg/W3C-SVG-1.1/text-align-05-b-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_svg_text/svg/W3C-SVG-1.1/text-align-05-b-expected.png index 763d096..a40e9e2 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_svg_text/svg/W3C-SVG-1.1/text-align-05-b-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_svg_text/svg/W3C-SVG-1.1/text-align-05-b-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_svg_text/svg/batik/text/verticalText-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_svg_text/svg/batik/text/verticalText-expected.png index 9c30993..1cf7ba3d 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_svg_text/svg/batik/text/verticalText-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_svg_text/svg/batik/text/verticalText-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_svg_text/svg/batik/text/verticalTextOnPath-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_svg_text/svg/batik/text/verticalTextOnPath-expected.png index b32a4d7..202b229 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_svg_text/svg/batik/text/verticalTextOnPath-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_svg_text/svg/batik/text/verticalTextOnPath-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_svg_text/svg/batik/text/verticalTextOnPath-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_svg_text/svg/batik/text/verticalTextOnPath-expected.png index 1f69b6db..40c83e1 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_svg_text/svg/batik/text/verticalTextOnPath-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_svg_text/svg/batik/text/verticalTextOnPath-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/layout_ng_svg_text/svg/W3C-SVG-1.1/text-align-05-b-expected.png b/third_party/blink/web_tests/platform/win/virtual/layout_ng_svg_text/svg/W3C-SVG-1.1/text-align-05-b-expected.png deleted file mode 100644 index c302e29..0000000 --- a/third_party/blink/web_tests/platform/win/virtual/layout_ng_svg_text/svg/W3C-SVG-1.1/text-align-05-b-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/layout_ng_svg_text/svg/batik/text/verticalText-expected.png b/third_party/blink/web_tests/platform/win/virtual/layout_ng_svg_text/svg/batik/text/verticalText-expected.png index b823f3f..625163d 100644 --- a/third_party/blink/web_tests/platform/win/virtual/layout_ng_svg_text/svg/batik/text/verticalText-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/layout_ng_svg_text/svg/batik/text/verticalText-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/layout_ng_svg_text/svg/batik/text/verticalTextOnPath-expected.png b/third_party/blink/web_tests/platform/win/virtual/layout_ng_svg_text/svg/batik/text/verticalTextOnPath-expected.png index 8ff13bd..45c6ce6 100644 --- a/third_party/blink/web_tests/platform/win/virtual/layout_ng_svg_text/svg/batik/text/verticalTextOnPath-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/layout_ng_svg_text/svg/batik/text/verticalTextOnPath-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/wpt_internal/prerender/resources/download.html b/third_party/blink/web_tests/wpt_internal/prerender/resources/download.html new file mode 100644 index 0000000..b4fc8525 --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/prerender/resources/download.html
@@ -0,0 +1,49 @@ +<!DOCTYPE html> +<script src="utils.js"></script> +<a id="target" download="download-link" href="cache.txt">here</a> +<script> + +const params = new URLSearchParams(location.search); + +// The main test page (restriction-download.html) loads the initiator page, +// then the initiator page will prerender itself with the `prerendering` +// parameter. +const isPrerenderingTarget = params.has('prerendering'); + +if (!isPrerenderingTarget) { + loadInitiatorPage(); +} else { + window.addEventListener('load', () => { + if (document.prerendering) { + // If prerendering, tell the initiator that this page finished + // loading, so it can attempt activation. + + // Used to communicate with the initiator page. + const prerenderChannel = new BroadcastChannel('prerender-channel'); + + document.getElementById('target').click(); + + // Inform the initiator page that this page was loaded. + prerenderChannel.postMessage('readyToActivate'); + prerenderChannel.close(); + } else { + // If not prerendering, and `load` was fired with the `prerendering` + // parameter, we know this page was not prerendered and it was loaded by + // a new navigation. This means the prerender was cancelled. + + // Used to communicate with the main test page. + const testChannel = new BroadcastChannel('test-channel'); + testChannel.postMessage('prerendering is canceled'); + testChannel.close(); + } + }); + + document.addEventListener('prerenderingchange', () => { + // Used to communicate with the main test page. + const testChannel = new BroadcastChannel('test-channel'); + testChannel.postMessage('unexpectedly activated'); + testChannel.close(); + }); +} + +</script>
diff --git a/third_party/blink/web_tests/wpt_internal/prerender/resources/message-boxes.html b/third_party/blink/web_tests/wpt_internal/prerender/resources/message-boxes.html new file mode 100644 index 0000000..4ff0584 --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/prerender/resources/message-boxes.html
@@ -0,0 +1,34 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + +function runAlertTest() { + window.alert('Hello! Preprendering!'); + bc.postMessage('no block'); +} + +function runConfirmTest() { + const result = window.confirm('Are you preprendering page?'); + bc.postMessage('the return value is ' + (result === true ? 'yes' : 'no')); +} + +function runPromptTest() { + const result = window.prompt('Are you preprendering page?', 'the default value'); + bc.postMessage('the return value is ' + + (result === '' ? 'the empty string' : result)); +} + +const bc = new BroadcastChannel('prerender-channel'); +assert_true(document.prerendering); +const params = new URLSearchParams(location.search); + +if (params.has('alert')) + runAlertTest(); +else if (params.has('confirm')) + runConfirmTest(); +else if (params.has('prompt')) + runPromptTest(); + +bc.close(); +</script>
diff --git a/third_party/blink/web_tests/wpt_internal/prerender/restriction-download.html b/third_party/blink/web_tests/wpt_internal/prerender/restriction-download.html new file mode 100644 index 0000000..2709127 --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/prerender/restriction-download.html
@@ -0,0 +1,37 @@ +<!DOCTYPE html> +<!-- +This file cannot be upstreamed to WPT until: +* startPrerendering() usage is replaced with a WebDriver API +* The test changes to expect the deferring behavior described at + https://jeremyroman.github.io/alternate-loading-modes/#patch-downloading + instead of expecting that prerender is cancelled. +--> +<title> +Prerending is canceled upon the `download the hyperlink` algorithm +</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<script> + +promise_test(async t => { + const bc = new BroadcastChannel('test-channel'); + t.add_cleanup(_ => bc.close()); + + const gotMessage = new Promise(resolve => { + bc.addEventListener('message', e => { + resolve(e.data); + }, { + once: true + }); + }); + const url = `resources/download.html`; + window.open(url, '_blank', 'noopener'); + + const result = await gotMessage; + assert_equals(result, 'prerendering is canceled'); +}, `attempting a download should cause prerendering to be cancelled`); + +</script> +</body>
diff --git a/third_party/blink/web_tests/wpt_internal/prerender/restriction-message-boxes.html b/third_party/blink/web_tests/wpt_internal/prerender/restriction-message-boxes.html new file mode 100644 index 0000000..106d8cd --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/prerender/restriction-message-boxes.html
@@ -0,0 +1,53 @@ +<!DOCTYPE html> +<!-- +This file cannot be upstreamed to WPT until: +* startPrerendering() usage is replaced with a WebDriver API +* window.confirm() silently returns the default values `false`. +--> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/utils.js"></script> +<body> +<script> +function runTest(test_file, expectation, description) { + promise_test(async t => { + const bc = new BroadcastChannel('prerender-channel'); + t.add_cleanup(_ => bc.close()); + + const gotMessage = new Promise(resolve => { + bc.addEventListener('message', e => { + resolve(e.data); + }, { + once: true + }); + }); + + startPrerendering(test_file); + + // Wait for the message from the prerendering page. + assert_equals(await gotMessage, expectation); + }, description); +} + +// Test that a page invokes the alert modal during prerendering. +runTest( + 'resources/message-boxes.html?alert', + 'no block', + 'alert() does not display the modal and returns immediately'); + +// Test that a page invokes the comfirm modal during prerendering. +// TODO(crbug.com/1214768) : window.confirm() should silently return +// the default values `false`. +// https://github.com/jeremyroman/alternate-loading-modes/blob/main/browsing-context.md +runTest( + 'resources/message-boxes.html?confirm', + 'the return value is yes', + 'comfirm() does not display the modal and returns immediately'); + +// Test that a page invokes the prompt modal during prerendering. +runTest( + 'resources/message-boxes.html?prompt', + 'the return value is the empty string', + 'prompt() does not display the modal and returns immediately'); +</script> +</body>
diff --git a/tools/mb/mb.py b/tools/mb/mb.py index e5bd2a3..f210d90 100755 --- a/tools/mb/mb.py +++ b/tools/mb/mb.py
@@ -686,19 +686,11 @@ # We trap the command explicitly and rewrite the error output so that # the error message is actually correct for a Chromium check out. self.PrintCmd(cmd) - ret, out, err = self.Run(cmd, force_verbose=False) + ret, out, _ = self.Run(cmd, force_verbose=False) if ret: self.Print(' -> returned %d' % ret) if out: self.Print(out, end='') - if err: - # The swarming client will return an exit code of 2 (via - # argparse.ArgumentParser.error()) and print a message to indicate - # that auth failed, so we have to parse the message to check. - if (ret == 2 and 'Please login to' in err): - err = err.replace(' auth.py', ' tools/swarming_client/auth.py') - self.Print(err, end='', file=sys.stderr) - return ret try:
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index b892967..7bec21e 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -32794,6 +32794,7 @@ <int value="3925" label="FontFaceLineGapOverride"/> <int value="3926" label="FontFaceSizeAdjust"/> <int value="3927" label="HiddenBackfaceWith3D"/> + <int value="3928" label="MainFrameNonSecurePrivateAddressSpace"/> </enum> <enum name="FeaturePolicyAllowlistType"> @@ -64027,6 +64028,7 @@ <int value="12" label="kPlugin"/> <int value="13" label="kRendererProcessCrashed"/> <int value="14" label="kRendererProcessKilled"/> + <int value="15" label="kDownload"/> </enum> <enum name="PrerenderHoverEvent">
diff --git a/tools/metrics/histograms/histograms_xml/METRIC_REVIEWER_OWNERS b/tools/metrics/histograms/histograms_xml/METRIC_REVIEWER_OWNERS index fb5d4060..9073827a 100644 --- a/tools/metrics/histograms/histograms_xml/METRIC_REVIEWER_OWNERS +++ b/tools/metrics/histograms/histograms_xml/METRIC_REVIEWER_OWNERS
@@ -3,6 +3,7 @@ alexilin@chromium.org altimin@chromium.org anise@chromium.org +ayui@chromium.org chlily@chromium.org csharrison@chromium.org cthomp@chromium.org
diff --git a/tools/metrics/histograms/histograms_xml/blink/histograms.xml b/tools/metrics/histograms/histograms_xml/blink/histograms.xml index c3bf4e13..e1fbdde 100644 --- a/tools/metrics/histograms/histograms_xml/blink/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/blink/histograms.xml
@@ -2898,10 +2898,10 @@ UseCounterPageLoadMetricsObserver. </summary> <details> - Note that features used inside of SVG images are tracked separately in the - Blink.UseCounter.SVGImage.Features histogram. Features used inside of - extension pages are tracked separately in the - Blink.UseCounter.Extensions.Features histogram. + Note that this histogram only counts page with HTTP/HTTPS URL scheme. + Feature used in pages with other URL schemes might be counted in other + histograms: "extension://" : Blink.UseCounter.Extensions.Features + "file://" : Blink.UseCounter.File.Features </details> </histogram> @@ -3183,6 +3183,32 @@ </token> </histogram> +<histogram name="Blink.{Host}.{Heap}.{Context}" units="KB" + expires_after="2022-05-11"> + <owner>junov@chromium.org</owner> + <owner>fserb@chromium.org</owner> + <owner>aaronhk@chromium.org</owner> + <summary> + Memory usage on the {Heap} heap in KB, sampled after the execution of script + tasks that render content to a {Host}, using a {Context} context. + </summary> + <token key="Host"> + <variant name="Canvas"/> + <variant name="OffscreenCanvas"/> + </token> + <token key="Heap"> + <variant name="BlinkGC"/> + <variant name="PartitionAlloc"/> + </token> + <token key="Context"> + <variant name="2D"/> + <variant name="ImageBitmap"/> + <variant name="WebGL"/> + <variant name="WebGL2"/> + <variant name="WebGPU"/> + </token> +</histogram> + <histogram name="BlinkGC.CollectionRate" units="%" expires_after="M84"> <owner>haraken@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/media/histograms.xml b/tools/metrics/histograms/histograms_xml/media/histograms.xml index 80042d25..8ae628e 100644 --- a/tools/metrics/histograms/histograms_xml/media/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/media/histograms.xml
@@ -562,6 +562,20 @@ </summary> </histogram> +<histogram name="Media.Audio.MaxOutputStreamsPerInputStream" units="streams" + expires_after="M99"> + <owner>saza@chromium.org</owner> + <owner>olka@chromium.org</owner> + <summary> + The maximum number of concurrently active (playing and not muting by + diverting to a fake AudioOutputStream) OutputStreams observed when at least + one InputStream is recording. The metric is reported each time the number of + actively recording input streams drops to 0. The metric provides an estimate + of the number of output streams that may need to be mixed for echo + cancellation. + </summary> +</histogram> + <histogram name="Media.Audio.Output.Win.{AudioOutputMethod}Error" enum="Hresult" expires_after="M98"> <owner>dalecurtis@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/obsolete_histograms.xml b/tools/metrics/histograms/histograms_xml/obsolete_histograms.xml index 850d262..e358d98 100644 --- a/tools/metrics/histograms/histograms_xml/obsolete_histograms.xml +++ b/tools/metrics/histograms/histograms_xml/obsolete_histograms.xml
@@ -388,7 +388,7 @@ <histogram name="ActivityTracker.Record.SetupTime" units="ms" expires_after="M77"> <obsolete> - Setup time is <=10ms for 90% with 0.1% taking >500ms. Removed 2019/06. + Removed 2019/06. </obsolete> <owner>siggi@chromium.org</owner> <summary> @@ -400,7 +400,7 @@ <histogram name="ActivityTracker.ThreadTrackers.Count" units="count" expires_after="M77"> <obsolete> - Gaussian distribution around 22 with 0.1% being >=100. Removed 2019/06. + Removed 2019/06. </obsolete> <owner>bcwhite@chromium.org</owner> <summary> @@ -2449,9 +2449,6 @@ <obsolete> Removed January 2020, this was a debugging metric that was too expensive to keep in the code. - - Results on beta were: 60% present and shown, 5% present and not shown, and - 35% absent. </obsolete> <owner>tby@chromium.org</owner> <owner>wrong@chromium.org</owner> @@ -4988,8 +4985,7 @@ <histogram name="Autofill.MaskedCardComparisonNetworksMatch" enum="BooleanEqual" expires_after="2020-01-15"> <obsolete> - Removed as of 12/2019. The comparison found that Chrome and Payments - correctly matched 99.9% of the time. + Removed as of 12/2019. </obsolete> <owner>jsaul@google.com</owner> <owner>payments-autofill-team@google.com</owner> @@ -11964,8 +11960,7 @@ <histogram name="Cryptohome.FreedGCacheDiskSpaceInMb" units="MB" expires_after="2018-05-01"> <obsolete> - Removed 05/2018 in favor of Cryptohome.GCache.FreedDiskSpaceInMb. Reports - zero in 99% of hits. + Removed 05/2018 in favor of Cryptohome.GCache.FreedDiskSpaceInMb. </obsolete> <owner>oka@chromium.org</owner> <summary> @@ -25946,8 +25941,7 @@ <histogram base="true" name="GPU.DirectComposition.OverlaySupportFlags2" enum="OverlaySupportFlag" expires_after="2019-04-06"> <obsolete> - Removed 04/2019. BGRA is never supported, NV12 always supports scaling, and - YUY2 supports scaling in 75% cases. + Removed 04/2019. </obsolete> <!-- Name completed by histogram_suffixes name="GPU.DirectComposition.OverlayFormat" --> @@ -27366,8 +27360,7 @@ <histogram name="HttpCache.StaleEntry.FreshnessPeriodsSinceLastUsed" units="units" expires_after="M77"> <obsolete> - Removed in M77. One day Android results: 25.00% 1033 50.00% 4945 75.00% - 42023 95.00% Infinity + Removed in M77. </obsolete> <owner>jkarlin@chromium.org</owner> <summary> @@ -27380,8 +27373,7 @@ <histogram name="HttpCache.StaleEntry.Updated.Age" units="seconds" expires_after="M77"> <obsolete> - Removed in M77. One day percentiles on Android: 25.00% 16146 50.00% 101342 - 75.00% 372632 95.00% Infinity + Removed in M77. </obsolete> <owner>jkarlin@chromium.org</owner> <summary> @@ -27394,8 +27386,7 @@ <histogram name="HttpCache.StaleEntry.Updated.AgeInFreshnessPeriods" units="%" expires_after="M77"> <obsolete> - Removed in M77. One day percentiles on Android: 25.00% 246.3 50.00% 1353 - 75.00% 9142 95.00% 147572 99.00% Infinity + Removed in M77. </obsolete> <owner>jkarlin@chromium.org</owner> <summary> @@ -27408,8 +27399,7 @@ <histogram name="HttpCache.StaleEntry.Validated.Age" units="seconds" expires_after="M77"> <obsolete> - Removed in M77. One day percentiles on Android: 25.00% 10791 50.00% 70285 - 75.00% 223571 95.00% Infinity + Removed in M77. </obsolete> <owner>jkarlin@chromium.org</owner> <summary> @@ -27422,8 +27412,7 @@ <histogram name="HttpCache.StaleEntry.Validated.AgeInFreshnessPeriods" units="%" expires_after="M77"> <obsolete> - Removed in M77. One day percentiles on Android: 25.00% 169.5 50.00% 476.3 - 75.00% 2451 95.00% 43218 99.00% 474791 99.50% Infinity + Removed in M77. </obsolete> <owner>jkarlin@chromium.org</owner> <summary> @@ -29282,8 +29271,7 @@ <histogram name="LibraryLoader.PrefetchDetailedStatus" enum="LibraryLoaderPrefetchDetailedStatus" expires_after="2020-04-12"> <obsolete> - Removed 2019-10. The code has stabilized, the failure rate is 0.04% on - Stable. + Removed 2019-10. </obsolete> <owner>lizeb@chromium.org</owner> <owner>pasko@chromium.org</owner> @@ -32638,9 +32626,7 @@ <histogram name="MemCache.WriteResult" enum="MemCacheWriteResult" expires_after="M77"> <obsolete> - Removed in M77. One day results for Android were 99.99% success, .01% - Exceeded Cache Size, and an even smaller fraction Exceeded Single Entry - Size. + Removed in M77. </obsolete> <owner>jkarlin@chromium.org</owner> <summary>The outcome of Entry::WriteData in the memory cache.</summary> @@ -51760,8 +51746,7 @@ <histogram name="PageLoad.Clients.Ads.All.ParentExistsForSubFrame" enum="ParentFrameKnown" expires_after="2018-09-21"> <obsolete> - Removed in September 2018. At deprecation, 98.12% of parent frames were - known. + Removed in September 2018. </obsolete> <owner>jkarlin@chromium.org</owner> <summary> @@ -63292,8 +63277,7 @@ <histogram name="RecurrenceRanker.LogFileOpenType" enum="FileOpenType" expires_after="2019-12-31"> <obsolete> - Removed December 2019. Distribution between file open types is approximately - 33% download, 26% launch, 26% open, 15% save as. + Removed December 2019. </obsolete> <owner>jiameng@chromium.org</owner> <owner>thanhdng@chromium.org</owner> @@ -69482,8 +69466,8 @@ <histogram name="SBClientDownload.ExtractImageHeadersTime" units="ms" expires_after="M77"> <obsolete> - Removed in M77. Extracting image headers was usually fast (84% were less - than 1ms), so this histogram was not providing useful data. + Removed in M77. Extracting image headers was usually fast so this histogram + was not providing useful data. </obsolete> <owner>vakh@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> @@ -74745,9 +74729,7 @@ <histogram name="Setup.Install.NumDeleteOldVersionsAttemptsBeforeAbort" units="Attempts" expires_after="M77"> <obsolete> - Removed 06/2019. In 88% of cases, we aborted after the maximum number of - attemps was reached. The remaining 12% of cases occured when another process - tried to acquire the setup singleton. + Removed 06/2019. </obsolete> <owner>fdoray@chromium.org</owner> <summary> @@ -78087,9 +78069,7 @@ <histogram name="Stability.Android.PendingMinidumpsOnStartup" units="minidumps" expires_after="2017-05-16"> <obsolete> - Removed in M60. Roughly 50% of Chrome startups that had *any* pending - minidumps had at least one pending minidump without any logcat output. About - 5% had multiple minidumps without any logcat output. + Removed in M60. </obsolete> <owner>isherman@chromium.org</owner> <summary> @@ -78624,7 +78604,7 @@ enum="BooleanSuccess" expires_after="2015-12-10"> <obsolete> Removed 12/2015. No longer tracked because values collected on stable show - that the function pretty much never fails (succeeds 99.9996% of the time). + that the function pretty much never fails. </obsolete> <owner>chrisha@chromium.org</owner> <owner>fdoray@chromium.org</owner> @@ -83913,8 +83893,7 @@ <histogram base="true" name="TaskScheduler.NumCancelledDelayedTasks" units="tasks" expires_after="2019-03-20"> <obsolete> - Removed as of 03/2019. The number of cancelled delayed tasks found by the - lazy approach is 0 more than 99% of the time. + Removed as of 03/2019. </obsolete> <owner>adityakeerthi@google.com</owner> <owner>fdoray@chromium.org</owner> @@ -83988,8 +83967,7 @@ <histogram base="true" name="TaskScheduler.PercentCancelledDelayedTasks" units="tasks" expires_after="2019-03-20"> <obsolete> - Removed as of 03/2019. The number of cancelled delayed tasks found by the - lazy approach is 0 more than 99% of the time. + Removed as of 03/2019. </obsolete> <owner>adityakeerthi@google.com</owner> <owner>fdoray@chromium.org</owner> @@ -85125,8 +85103,7 @@ <histogram name="UMA.FileMetricsProvider.EmbeddedProfile.DroppedFileAge" units="minutes" expires_after="2017-07-08"> <obsolete> - Removed 07/2017. Was only for short-term analysis. About 95% of dropped - files were less than 1 day old. + Removed 07/2017. </obsolete> <owner>asvitkine@chromium.org</owner> <owner>bcwhite@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/others/histograms.xml b/tools/metrics/histograms/histograms_xml/others/histograms.xml index ce9656c..e3bb107 100644 --- a/tools/metrics/histograms/histograms_xml/others/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/others/histograms.xml
@@ -8759,6 +8759,9 @@ <histogram name="Layout.ScrollAnchor.TimeToFindAnchor" units="microseconds" expires_after="M82"> + <obsolete> + Removed in M93. + </obsolete> <owner>ymalik@chromium.org</owner> <summary> The time it took to find a suitable anchor element.
diff --git a/tools/metrics/histograms/histograms_xml/quota/OWNERS b/tools/metrics/histograms/histograms_xml/quota/OWNERS index ca66767..ae17e08 100644 --- a/tools/metrics/histograms/histograms_xml/quota/OWNERS +++ b/tools/metrics/histograms/histograms_xml/quota/OWNERS
@@ -2,4 +2,9 @@ # Prefer sending CLs to the owners listed below. # Use chromium-metrics-reviews@google.com as a backup. + +# Primary +ayui@chromium.org + +# Secondary pwnall@chromium.org
diff --git a/tools/metrics/histograms/histograms_xml/storage/OWNERS b/tools/metrics/histograms/histograms_xml/storage/OWNERS index ca66767..ae17e08 100644 --- a/tools/metrics/histograms/histograms_xml/storage/OWNERS +++ b/tools/metrics/histograms/histograms_xml/storage/OWNERS
@@ -2,4 +2,9 @@ # Prefer sending CLs to the owners listed below. # Use chromium-metrics-reviews@google.com as a backup. + +# Primary +ayui@chromium.org + +# Secondary pwnall@chromium.org
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json index 65870d3..175e1c0 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -9,8 +9,8 @@ "remote_path": "perfetto_binaries/trace_processor_shell/mac/bae8193de6c017394901163b7817157342914679/trace_processor_shell" }, "linux": { - "hash": "46ee9624f529202741eaa0126a9fb42641b0ea1f", - "remote_path": "perfetto_binaries/trace_processor_shell/linux/b3f455e9edced2a776ddcb5a2cdf5ddcefa8776f/trace_processor_shell" + "hash": "e5faa69a486f60fe15e12f1a73fca358580b4dd5", + "remote_path": "perfetto_binaries/trace_processor_shell/linux/71719e601946d80f52445f4ca232f3b1b4d652f3/trace_processor_shell" } }, "power_profile.sql": {
diff --git a/ui/android/java/res/values/semantic_colors_adaptive.xml b/ui/android/java/res/values/semantic_colors_adaptive.xml index fac4562..95e2ed74 100644 --- a/ui/android/java/res/values/semantic_colors_adaptive.xml +++ b/ui/android/java/res/values/semantic_colors_adaptive.xml
@@ -110,7 +110,7 @@ <!-- IncognitoHistoryPlaceholderView colors --> <color name="incognito_history_placeholder_stroke_color">@color/modern_grey_500</color> - <color name="incognito_history_placeholder_bottom_circle_color">@color/modern_grey_700</color> + <color name="incognito_history_placeholder_bottom_circle_color">@color/modern_grey_300</color> <!-- Colors of adaptive toolbar --> <color name="adaptive_toolbar_preference_header_background">@color/adaptive_toolbar_preference_header_background_light</color>
diff --git a/ui/base/clipboard/clipboard_mac.mm b/ui/base/clipboard/clipboard_mac.mm index 360a92ae..77ecc98 100644 --- a/ui/base/clipboard/clipboard_mac.mm +++ b/ui/base/clipboard/clipboard_mac.mm
@@ -9,7 +9,6 @@ #include <limits> -#include "base/feature_list.h" #include "base/files/file_path.h" #include "base/logging.h" #include "base/mac/foundation_util.h" @@ -32,7 +31,6 @@ #include "ui/base/clipboard/clipboard_util_mac.h" #include "ui/base/clipboard/custom_data_helper.h" #include "ui/base/data_transfer_policy/data_transfer_endpoint.h" -#include "ui/base/ui_base_features.h" #include "ui/gfx/canvas.h" #include "ui/gfx/geometry/size.h" #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h" @@ -91,12 +89,6 @@ DCHECK(CalledOnValidThread()); DCHECK_EQ(buffer, ClipboardBuffer::kCopyPaste); - // Only support filenames if chrome://flags#clipboard-filenames is enabled. - if (format == ClipboardFormatType::GetFilenamesType() && - !base::FeatureList::IsEnabled(features::kClipboardFilenames)) { - return false; - } - // https://crbug.com/1016740#c21 base::scoped_nsobject<NSArray> types([[GetPasteboard() types] retain]); @@ -493,22 +485,8 @@ // a blank image is better. base::scoped_nsobject<NSImage> image; @try { - // TODO(crbug.com/1175483): remove first branch of this code when - // ClipboardFilenames feature flag is removed. - if ([[pasteboard types] containsObject:NSFilenamesPboardType]) { - // -[NSImage initWithPasteboard:] gets confused with copies of a single - // file from the Finder, so extract the path ourselves. - // http://crbug.com/553686 - NSArray* paths = [pasteboard propertyListForType:NSFilenamesPboardType]; - if ([paths count]) { - // If N number of files are selected from finder, choose the last one. - image.reset([[NSImage alloc] - initWithContentsOfURL:[NSURL fileURLWithPath:[paths lastObject]]]); - } - } else { - if (pasteboard) - image.reset([[NSImage alloc] initWithPasteboard:pasteboard]); - } + if (pasteboard) + image.reset([[NSImage alloc] initWithPasteboard:pasteboard]); } @catch (id exception) { } if (!image)
diff --git a/ui/base/clipboard/clipboard_non_backed.cc b/ui/base/clipboard/clipboard_non_backed.cc index dfebf6d..2cf2dc1 100644 --- a/ui/base/clipboard/clipboard_non_backed.cc +++ b/ui/base/clipboard/clipboard_non_backed.cc
@@ -14,7 +14,6 @@ #include "base/check_op.h" #include "base/containers/contains.h" -#include "base/feature_list.h" #include "base/files/file_path.h" #include "base/macros.h" #include "base/memory/ptr_util.h" @@ -33,7 +32,6 @@ #include "ui/base/clipboard/custom_data_helper.h" #include "ui/base/data_transfer_policy/data_transfer_endpoint.h" #include "ui/base/data_transfer_policy/data_transfer_policy_controller.h" -#include "ui/base/ui_base_features.h" #include "ui/gfx/geometry/size.h" namespace ui { @@ -452,8 +450,7 @@ return clipboard_internal_->IsFormatAvailable( ClipboardInternalFormat::kWeb); // Only support filenames if chrome://flags#clipboard-filenames is enabled. - if (format == ClipboardFormatType::GetFilenamesType() && - base::FeatureList::IsEnabled(features::kClipboardFilenames)) + if (format == ClipboardFormatType::GetFilenamesType()) return clipboard_internal_->IsFormatAvailable( ClipboardInternalFormat::kFilenames); const ClipboardData* data = clipboard_internal_->GetData();
diff --git a/ui/base/clipboard/clipboard_non_backed_unittest.cc b/ui/base/clipboard/clipboard_non_backed_unittest.cc index 963dbc42..02dca672 100644 --- a/ui/base/clipboard/clipboard_non_backed_unittest.cc +++ b/ui/base/clipboard/clipboard_non_backed_unittest.cc
@@ -10,10 +10,8 @@ #include "base/strings/utf_string_conversions.h" #include "base/test/metrics/histogram_tester.h" -#include "base/test/scoped_feature_list.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/clipboard/clipboard_data.h" -#include "ui/base/ui_base_features.h" namespace ui { namespace { @@ -92,8 +90,6 @@ // Tests that site bookmark URLs are accessed as text, and // IsFormatAvailable('text/uri-list') is only true for files. TEST_F(ClipboardNonBackedTest, TextURIList) { - base::test::ScopedFeatureList features; - features.InitWithFeatures({features::kClipboardFilenames}, {}); EXPECT_EQ("text/uri-list", ClipboardFormatType::GetFilenamesType().GetName()); auto data = std::make_unique<ClipboardData>();
diff --git a/ui/base/clipboard/clipboard_test_template.h b/ui/base/clipboard/clipboard_test_template.h index 8b4caf8..9dc28830 100644 --- a/ui/base/clipboard/clipboard_test_template.h +++ b/ui/base/clipboard/clipboard_test_template.h
@@ -28,7 +28,6 @@ #include "base/run_loop.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" -#include "base/test/scoped_feature_list.h" #include "base/threading/thread_restrictions.h" #include "build/build_config.h" #include "build/chromecast_buildflags.h" @@ -48,7 +47,6 @@ #include "ui/base/clipboard/test/test_clipboard.h" #include "ui/base/data_transfer_policy/data_transfer_endpoint.h" #include "ui/base/data_transfer_policy/data_transfer_policy_controller.h" -#include "ui/base/ui_base_features.h" #include "ui/gfx/codec/png_codec.h" #include "ui/gfx/geometry/size.h" #include "ui/gfx/half_float.h" @@ -421,8 +419,6 @@ #if !defined(OS_ANDROID) // Filenames is not implemented in ClipboardAndroid. TYPED_TEST(ClipboardTest, FilenamesTest) { - base::test::ScopedFeatureList features; - features.InitWithFeatures({features::kClipboardFilenames}, {}); base::ScopedAllowBlockingForTesting allow_blocking; base::ScopedTempDir temp_dir; ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
diff --git a/ui/base/clipboard/clipboard_win.cc b/ui/base/clipboard/clipboard_win.cc index 67d0680f..c2df7780 100644 --- a/ui/base/clipboard/clipboard_win.cc +++ b/ui/base/clipboard/clipboard_win.cc
@@ -13,7 +13,6 @@ #include "base/bind.h" #include "base/check_op.h" -#include "base/feature_list.h" #include "base/files/file_path.h" #include "base/lazy_instance.h" #include "base/macros.h" @@ -39,7 +38,6 @@ #include "ui/base/clipboard/clipboard_util_win.h" #include "ui/base/clipboard/custom_data_helper.h" #include "ui/base/data_transfer_policy/data_transfer_endpoint.h" -#include "ui/base/ui_base_features.h" #include "ui/gfx/canvas.h" #include "ui/gfx/codec/png_codec.h" #include "ui/gfx/geometry/size.h" @@ -224,10 +222,6 @@ } bool ReadFilenamesAvailable() { - // Only support filenames if chrome://flags#clipboard-filenames is enabled. - if (!base::FeatureList::IsEnabled(features::kClipboardFilenames)) - return false; - return ::IsClipboardFormatAvailable( ClipboardFormatType::GetCFHDropType().ToFormatEtc().cfFormat) || ::IsClipboardFormatAvailable(
diff --git a/ui/base/ui_base_features.cc b/ui/base/ui_base_features.cc index 7c92a78..b183e79 100644 --- a/ui/base/ui_base_features.cc +++ b/ui/base/ui_base_features.cc
@@ -32,11 +32,6 @@ base::FEATURE_ENABLED_BY_DEFAULT}; #endif // OW_WIN -// Whether or not filenames are supported on the clipboard. -// https://crbug.com/1175483 -const base::Feature kClipboardFilenames{"ClipboardFilenames", - base::FEATURE_ENABLED_BY_DEFAULT}; - // Whether or not to delegate color queries to the color provider. const base::Feature kColorProviderRedirection = { "ColorProviderRedirection", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/ui/base/ui_base_features.h b/ui/base/ui_base_features.h index a63d055..7e2ebc5 100644 --- a/ui/base/ui_base_features.h +++ b/ui/base/ui_base_features.h
@@ -16,8 +16,6 @@ // Keep sorted! COMPONENT_EXPORT(UI_BASE_FEATURES) -extern const base::Feature kClipboardFilenames; -COMPONENT_EXPORT(UI_BASE_FEATURES) extern const base::Feature kColorProviderRedirection; COMPONENT_EXPORT(UI_BASE_FEATURES) extern const base::Feature kCompositorThreadedScrollbarScrolling;
diff --git a/ui/base/x/x11_clipboard_helper.cc b/ui/base/x/x11_clipboard_helper.cc index b04c0188..1d10ca88 100644 --- a/ui/base/x/x11_clipboard_helper.cc +++ b/ui/base/x/x11_clipboard_helper.cc
@@ -223,11 +223,8 @@ available_types.push_back(kMimeTypeRTF); if (target_list.ContainsFormat(ClipboardFormatType::GetBitmapType())) available_types.push_back(kMimeTypePNG); - // Only support filenames if chrome://flags#clipboard-filenames is enabled. - if (target_list.ContainsFormat(ClipboardFormatType::GetFilenamesType()) && - base::FeatureList::IsEnabled(features::kClipboardFilenames)) { + if (target_list.ContainsFormat(ClipboardFormatType::GetFilenamesType())) available_types.push_back(kMimeTypeURIList); - } return available_types; }
diff --git a/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.cc b/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.cc index f334a2b..12b8aa22 100644 --- a/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.cc +++ b/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.cc
@@ -33,11 +33,12 @@ buffer_id_(buffer_manager->AllocateBufferID()) {} GbmPixmapWayland::~GbmPixmapWayland() { - if (gbm_bo_) + if (gbm_bo_ && widget_ != gfx::kNullAcceleratedWidget) buffer_manager_->DestroyBuffer(widget_, buffer_id_); } bool GbmPixmapWayland::InitializeBuffer( + gfx::AcceleratedWidget widget, gfx::Size size, gfx::BufferFormat format, gfx::BufferUsage usage, @@ -47,6 +48,8 @@ (visible_area_size.value().height() <= size.height()))); TRACE_EVENT0("wayland", "GbmPixmapWayland::InitializeBuffer"); + widget_ = widget; + if (!buffer_manager_->gbm_device()) return false; @@ -80,16 +83,11 @@ << " usage=" << gfx::BufferUsageToString(usage); visible_area_size_ = visible_area_size ? visible_area_size.value() : size; - CreateDmabufBasedBuffer(); + if (widget_ != gfx::kNullAcceleratedWidget) + CreateDmabufBasedBuffer(); return true; } -void GbmPixmapWayland::SetAcceleratedWiget(gfx::AcceleratedWidget widget) { - DCHECK(widget != gfx::kNullAcceleratedWidget); - DCHECK(widget_ == gfx::kNullAcceleratedWidget); - widget_ = widget; -} - bool GbmPixmapWayland::AreDmaBufFdsValid() const { return gbm_bo_->AreFdsValid(); }
diff --git a/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.h b/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.h index 6bb1f674..af9d927 100644 --- a/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.h +++ b/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.h
@@ -14,6 +14,7 @@ #include "ui/gfx/geometry/size.h" #include "ui/gfx/linux/gbm_buffer.h" #include "ui/gfx/native_pixmap.h" +#include "ui/gfx/native_widget_types.h" namespace ui { @@ -27,17 +28,16 @@ // |visible_area_size| represents a 'visible size', i.e., a buffer // of size |size| may actually contain visible data only in the // subregion of size |visible_area_size|. If |visible_area_size| is - // not provided, |size| is used. + // not provided, |size| is used. If |widget| is provided, browser + // side wl_buffer is also created. Otherwise, this pixmap + // behaves as a staging pixmap and mustn't be scheduled as an overlay. bool InitializeBuffer( + gfx::AcceleratedWidget widget, gfx::Size size, gfx::BufferFormat format, gfx::BufferUsage usage, absl::optional<gfx::Size> visible_area_size = absl::nullopt); - // The widget that this pixmap backs can be assigned later. Can be assigned - // only once. - void SetAcceleratedWiget(gfx::AcceleratedWidget widget); - // gfx::NativePixmap overrides: bool AreDmaBufFdsValid() const override; int GetDmaBufFd(size_t plane) const override;
diff --git a/ui/ozone/platform/wayland/gpu/wayland_surface_factory.cc b/ui/ozone/platform/wayland/gpu/wayland_surface_factory.cc index a2ca454..7d11962c 100644 --- a/ui/ozone/platform/wayland/gpu/wayland_surface_factory.cc +++ b/ui/ozone/platform/wayland/gpu/wayland_surface_factory.cc
@@ -186,10 +186,7 @@ scoped_refptr<GbmPixmapWayland> pixmap = base::MakeRefCounted<GbmPixmapWayland>(buffer_manager_); - if (widget != gfx::kNullAcceleratedWidget) - pixmap->SetAcceleratedWiget(widget); - - if (!pixmap->InitializeBuffer(size, format, usage, framebuffer_size)) + if (!pixmap->InitializeBuffer(widget, size, format, usage, framebuffer_size)) return nullptr; return pixmap; #else
diff --git a/ui/ozone/platform/wayland/host/wayland_screen.cc b/ui/ozone/platform/wayland/host/wayland_screen.cc index e29a5eb..73dc463 100644 --- a/ui/ozone/platform/wayland/host/wayland_screen.cc +++ b/ui/ozone/platform/wayland/host/wayland_screen.cc
@@ -209,7 +209,7 @@ // point or not. auto* window = connection_->wayland_window_manager()->GetCurrentFocusedWindow(); - if (window && window->GetBounds().Contains(point)) + if (window && window->GetBoundsInDIP().Contains(point)) return window->GetWidget(); return gfx::kNullAcceleratedWidget; }
diff --git a/ui/ozone/platform/wayland/host/wayland_screen_unittest.cc b/ui/ozone/platform/wayland/host/wayland_screen_unittest.cc index 1bfb72e..3ff6033 100644 --- a/ui/ozone/platform/wayland/host/wayland_screen_unittest.cc +++ b/ui/ozone/platform/wayland/host/wayland_screen_unittest.cc
@@ -10,6 +10,7 @@ #include "testing/gtest/include/gtest/gtest.h" #include "ui/display/display_observer.h" #include "ui/display/display_switches.h" +#include "ui/gfx/geometry/point.h" #include "ui/gfx/geometry/rect.h" #include "ui/gfx/native_widget_types.h" #include "ui/ozone/platform/wayland/host/wayland_connection.h" @@ -246,6 +247,14 @@ } TEST_P(WaylandScreenTest, GetAcceleratedWidgetAtScreenPoint) { + // Now, send enter event for the surface, which was created before. + wl::MockSurface* surface = server_.GetObject<wl::MockSurface>( + window_->root_surface()->GetSurfaceId()); + ASSERT_TRUE(surface); + wl_surface_send_enter(surface->resource(), output_->resource()); + + Sync(); + // If there is no focused window (focus is set whenever a pointer enters any // of the windows), there must be kNullAcceleratedWidget returned. There is no // real way to determine what window is located on a certain screen point in @@ -268,11 +277,13 @@ EXPECT_EQ(widget_at_screen_point, gfx::kNullAcceleratedWidget); MockPlatformWindowDelegate delegate; + auto menu_window_bounds = + gfx::Rect(window_->GetBounds().width() - 10, + window_->GetBounds().height() - 10, 100, 100); std::unique_ptr<WaylandWindow> menu_window = - CreateWaylandWindowWithProperties( - gfx::Rect(window_->GetBounds().width() - 10, - window_->GetBounds().height() - 10, 100, 100), - PlatformWindowType::kMenu, window_->GetWidget(), &delegate); + CreateWaylandWindowWithProperties(menu_window_bounds, + PlatformWindowType::kMenu, + window_->GetWidget(), &delegate); Sync(); @@ -296,6 +307,22 @@ // Reset the focus to avoid crash on dtor as long as there is no real pointer // object. window_->SetPointerFocus(false); + + // Part 2: test that the window is found when display's scale changes. + // Update scale. + output_->SetScale(2); + output_->Flush(); + + Sync(); + + auto menu_bounds_px = menu_window->GetBounds(); + // Translate the point to dip. + auto point_in_screen = + gfx::ScaleToRoundedPoint(menu_bounds_px.origin(), 1.f / 2); + menu_window->SetPointerFocus(true); + widget_at_screen_point = + platform_screen_->GetAcceleratedWidgetAtScreenPoint(point_in_screen); + EXPECT_EQ(widget_at_screen_point, menu_window->GetWidget()); } TEST_P(WaylandScreenTest, GetLocalProcessWidgetAtPoint) {
diff --git a/ui/ozone/platform/wayland/host/wayland_window.cc b/ui/ozone/platform/wayland/host/wayland_window.cc index 58bcf94a..fc87907ca 100644 --- a/ui/ozone/platform/wayland/host/wayland_window.cc +++ b/ui/ozone/platform/wayland/host/wayland_window.cc
@@ -264,6 +264,10 @@ return bounds_px_; } +gfx::Rect WaylandWindow::GetBoundsInDIP() const { + return gfx::ScaleToRoundedRect(bounds_px_, 1.0 / buffer_scale()); +} + void WaylandWindow::SetTitle(const std::u16string& title) {} void WaylandWindow::SetCapture() {
diff --git a/ui/ozone/platform/wayland/host/wayland_window.h b/ui/ozone/platform/wayland/host/wayland_window.h index deaa2718..21dfcca5 100644 --- a/ui/ozone/platform/wayland/host/wayland_window.h +++ b/ui/ozone/platform/wayland/host/wayland_window.h
@@ -225,6 +225,9 @@ return ui_task_runner_; } + // Returns bounds in DIP. + gfx::Rect GetBoundsInDIP() const; + protected: WaylandWindow(PlatformWindowDelegate* delegate, WaylandConnection* connection);
diff --git a/weblayer/browser/content_browser_client_impl.cc b/weblayer/browser/content_browser_client_impl.cc index a4ce774..02819447 100644 --- a/weblayer/browser/content_browser_client_impl.cc +++ b/weblayer/browser/content_browser_client_impl.cc
@@ -1129,6 +1129,14 @@ return std::make_unique<TtsEnvironmentAndroidImpl>(); } +bool ContentBrowserClientImpl:: + ShouldObserveContainerViewLocationForDialogOverlays() { + // Observe location changes of the container view as WebLayer might be + // embedded in a scrollable container and we need to update the position of + // any DialogOverlays. + return true; +} + #endif // OS_ANDROID content::SpeechRecognitionManagerDelegate*
diff --git a/weblayer/browser/content_browser_client_impl.h b/weblayer/browser/content_browser_client_impl.h index a45de63c..2ffb54e 100644 --- a/weblayer/browser/content_browser_client_impl.h +++ b/weblayer/browser/content_browser_client_impl.h
@@ -201,6 +201,7 @@ LoginAuthRequiredCallback auth_required_callback) override; std::unique_ptr<content::TtsEnvironmentAndroid> CreateTtsEnvironmentAndroid() override; + bool ShouldObserveContainerViewLocationForDialogOverlays() override; #endif // OS_ANDROID content::SpeechRecognitionManagerDelegate* CreateSpeechRecognitionManagerDelegate() override;
diff --git a/weblayer/browser/permissions/permission_manager_factory.cc b/weblayer/browser/permissions/permission_manager_factory.cc index 10020d7..2188a8a4 100644 --- a/weblayer/browser/permissions/permission_manager_factory.cc +++ b/weblayer/browser/permissions/permission_manager_factory.cc
@@ -13,6 +13,7 @@ #include "components/permissions/contexts/midi_permission_context.h" #include "components/permissions/contexts/midi_sysex_permission_context.h" #include "components/permissions/contexts/payment_handler_permission_context.h" +#include "components/permissions/contexts/sensor_permission_context.h" #include "components/permissions/permission_context_base.h" #include "components/permissions/permission_manager.h" #include "content/public/browser/permission_type.h" @@ -120,6 +121,8 @@ std::make_unique<BackgroundFetchPermissionContext>(browser_context); permission_contexts[ContentSettingsType::BACKGROUND_SYNC] = std::make_unique<BackgroundSyncPermissionContext>(browser_context); + permission_contexts[ContentSettingsType::SENSORS] = + std::make_unique<permissions::SensorPermissionContext>(browser_context); // For now, all requests are denied. As features are added, their permission // contexts can be added here instead of DeniedPermissionContext.