diff --git a/DEPS b/DEPS index 615b9efb83f3c2..56424c3ccbd857 100644 --- a/DEPS +++ b/DEPS @@ -209,11 +209,11 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': '77724af76ce24bc845a0909046d3fb7cd2453006', + 'skia_revision': '9af0bca3de2b56c9a8062a4617d5e0490ab90396', # 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': '115347c24efce03c9f79e62b71430fd13d94eff5', + 'v8_revision': '5ecef708595c72e5b4d798fc336a0a64e764aeff', # 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 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': 'fe93fcdd1b484ee460e6fcdd0e8dbb6624bbc751', + 'angle_revision': 'a44b16d39075af2ba64ac48457bd6f8f3b3aafeb', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -643,7 +643,7 @@ deps = { 'packages': [ { 'package': 'chromium/rts/model/linux-amd64', - 'version': 'riSig3JqaTPXRJyArMbQCNmMd2MM4C5qAkr7enZF5f8C', + 'version': 'oALhDKVkeAzkGeq7XrFKM1mUTH2TaYJGQkXwM7RytDYC', }, ], 'dep_type': 'cipd', @@ -654,7 +654,7 @@ deps = { 'packages': [ { 'package': 'chromium/rts/model/mac-amd64', - 'version': 'D1etRzwhVwI7QGbv0PFp2QrQ73HzOVZjex_mrRU2obsC', + 'version': 'qgWjqhDC-d3maWRs-3dh4uTjXicdxi88EYI4HoaVGcgC', }, ], 'dep_type': 'cipd', @@ -665,7 +665,7 @@ deps = { 'packages': [ { 'package': 'chromium/rts/model/windows-amd64', - 'version': 'KEqicFtFOQ7QG3MH4ZNilLLBf6T_i6PHqx4O0j-ADVYC', + 'version': 'M668EbK0TLr4XWelPNWUCwz-8fDE1RMeO0xvXR4Y4rsC', }, ], 'dep_type': 'cipd', @@ -1349,7 +1349,7 @@ deps = { }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + 'b3f455e9edced2a776ddcb5a2cdf5ddcefa8776f', + Var('android_git') + '/platform/external/perfetto.git' + '@' + '44702c57e7e6a294a58b8ea35879fc58842f2995', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1547,7 +1547,7 @@ deps = { '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', diff --git a/ash/login/ui/animated_rounded_image_view.cc b/ash/login/ui/animated_rounded_image_view.cc index 1354083b156b0a..bfb4f03e351549 100644 --- a/ash/login/ui/animated_rounded_image_view.cc +++ b/ash/login/ui/animated_rounded_image_view.cc @@ -21,7 +21,8 @@ namespace { 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 c0487e0154faa5..e5ac7916f36661 100644 --- a/ash/login/ui/bottom_status_indicator.h +++ b/ash/login/ui/bottom_status_indicator.h @@ -20,7 +20,7 @@ class BottomStatusIndicator : public views::LabelButton { 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 e64deeedfff0c9..d2776a715326f1 100644 --- a/ash/login/ui/login_base_bubble_view.cc +++ b/ash/login/ui/login_base_bubble_view.cc @@ -47,7 +47,7 @@ constexpr base::TimeDelta kBubbleAnimationDuration = // 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 e9504dec459d6c..df220e6695285c 100644 --- a/ash/login/ui/login_user_view.cc +++ b/ash/login/ui/login_user_view.cc @@ -88,7 +88,7 @@ constexpr char kLoginUserLabelClassName[] = "LoginUserLabel"; 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 PassthroughAnimationDecoder 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 @@ class LoginUserView::UserImage : public NonAccessibleView { LoginUserView::UserImage* const view_; }; - UserImage(LoginDisplayStyle style) + explicit UserImage(LoginDisplayStyle style) : NonAccessibleView(kLoginUserImageClassName) { SetLayoutManager(std::make_unique()); diff --git a/ash/login/ui/public_account_warning_dialog.h b/ash/login/ui/public_account_warning_dialog.h index 189d3461b877a1..b1042cb8bcfb0c 100644 --- a/ash/login/ui/public_account_warning_dialog.h +++ b/ash/login/ui/public_account_warning_dialog.h @@ -17,7 +17,7 @@ class LoginExpandedPublicAccountView; // 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 controller); ~PublicAccountWarningDialog() override; diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb index 7d6a697af2fe8d..8839d8bbdb7cc5 100644 --- a/ash/strings/ash_strings_bn.xtb +++ b/ash/strings/ash_strings_bn.xtb @@ -280,6 +280,7 @@ ব্যবহারকারী সংক্রান্ত সেটিংস ভলিউম চালু আছে, টগল করলে অডিও মিউট হয়ে যাবে। + আরও টি +অপ্রয়োজনীয় আওয়াজের বাতিলকরণ Window ডেস্ক থেকে ডেস্ক -এ সরানো হয়েছে আপনি কি করতে পারেন? ডানদিকের বোতামে ক্লিক করুন diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb index 422bd1cfddb78d..ef6290a7a1039c 100644 --- a/ash/strings/ash_strings_gu.xtb +++ b/ash/strings/ash_strings_gu.xtb @@ -280,6 +280,7 @@ વપરાશકર્તા સેટિંગ વૉલ્યૂમ ચાલુ છે, ટૉગલ કરવાથી ઑડિયો મ્યૂટ થશે. + વધુ +અવાજ રદ્દીકરણ વિડો ને ડેસ્ક માંથી ડેસ્ક માં ખસેડી તમે શું કરી શકો? રાઇટ ક્લિક કરો diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb index 9ac989690d8fdf..93ce5266fec942 100644 --- a/ash/strings/ash_strings_kn.xtb +++ b/ash/strings/ash_strings_kn.xtb @@ -280,6 +280,7 @@ ಬಳಕೆದಾರರ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ವಾಲ್ಯೂಮ್ ಆನ್ ಆಗಿದೆ, ಟಾಗಲ್ ಮಾಡುವುದರಿಂದ ಆಡಿಯೊ ಮ್ಯೂಟ್ ಆಗುತ್ತದೆ. + ಹೆಚ್ಚು +ಗದ್ದಲ ನಿವಾರಣೆ ವಿಂಡೋವನ್ನು ಡೆಸ್ಕ್‌ನಿಂದ ಡೆಸ್ಕ್‌ಗೆ ಸರಿಸಲಾಗಿದೆ ನೀವೇನು ಮಾಡಬಲ್ಲಿರಿ? ಬಲ-ಕ್ಲಿಕ್ diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb index e9a660c0ec9bbe..b5da30ec886297 100644 --- a/ash/strings/ash_strings_mr.xtb +++ b/ash/strings/ash_strings_mr.xtb @@ -280,6 +280,7 @@ वापरकर्ता सेटिंग्ज व्हॉल्यूम सुरू आहे, टॉगल केल्याने ऑडिओ म्यूट होईल. आणखी + +नॉइझ कॅंसलेशन विंडो डेस्क वरून डेस्क वर हलवली तुला काय करता येते? राइट क्लिक diff --git a/ash/strings/ash_strings_ne.xtb b/ash/strings/ash_strings_ne.xtb index ea166eb28ac544..f88f7623b2407b 100644 --- a/ash/strings/ash_strings_ne.xtb +++ b/ash/strings/ash_strings_ne.xtb @@ -274,6 +274,7 @@ प्रयोगकर्ताका सेटिङहरू भोल्युम सक्रिय छ, टगल गर्नुले अडियो म्युट गर्ने छ। + थप +ध्वनि खारेजी विन्डो सारेर डेस्क बाट डेस्कमा पुर्‍याइयो तपाईं के गर्न सक्नुहुन्छ? दायाँ क्लिक गर्नुहोस् diff --git a/ash/strings/ash_strings_ur.xtb b/ash/strings/ash_strings_ur.xtb index a3c92d8b4a9675..59bee13b720088 100644 --- a/ash/strings/ash_strings_ur.xtb +++ b/ash/strings/ash_strings_ur.xtb @@ -280,6 +280,7 @@ صارف کی ترتیبات والیوم آن ہے۔ ٹوگل کرنے سے آڈیو خاموش ہو جائے گی۔ ‏‎+‎ مزید +شور کو کم کرنا ونڈو کو ڈیسک سے ڈیسک میں منتقل کر دیا گیا ہے آپ کیا کر سکتی ہیں؟ دائیں طرف کلک کریں diff --git a/build/config/c++/c++.gni b/build/config/c++/c++.gni index a7448f3a0a6a3a..8a29edefcc4b28 100644 --- a/build/config/c++/c++.gni +++ b/build/config/c++/c++.gni @@ -11,11 +11,12 @@ declare_args() { # 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/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index 00ff4fa55b86da..711d54018b3dc9 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 00ff4fa55b86da..711d54018b3dc9 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/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 7a0febd51143aa..21fed249f85585 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"/> \ 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 18973b4c76a919..910f7231b63499 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"/> \ No newline at end of file diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/trigger_scripts/AssistantTriggerScriptBridge.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/trigger_scripts/AssistantTriggerScriptBridge.java index 12dd8e20a5232b..3d25cc343cbca7 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/trigger_scripts/AssistantTriggerScriptBridge.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/trigger_scripts/AssistantTriggerScriptBridge.java @@ -120,8 +120,6 @@ private boolean showTriggerScript(String[] cancelPopupMenuItems, int[] cancelPop @CalledByNative private void hideTriggerScript() { mTriggerScript.hide(); - mStartupDependencies.getKeyboardVisibilityDelegate().removeKeyboardVisibilityListener( - mKeyboardVisibilityListener); } @CalledByNative 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 4dc22f94ecd845..d22b7fcf4a3dba 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 @@ public void onTimeSlotChanged(@Nullable Integer index) { 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 @@ private boolean updateSectionSelectedItem( // 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 97b6741cbbe4ab..ea8f37c3fd8d0e 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 @@ -54,12 +54,6 @@ public interface AssistantCollectUserDataDelegate { /** The focus on an input text field has changed */ 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 c6b8069b0910bf..cf2b693e96b4d8 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 @@ public ContactModel(AutofillContact contact) { } } + /** Model wrapper for an {@code AutofillAddress}. */ + public static class AddressModel extends OptionModel { + public AddressModel(AutofillAddress address, List errors) { + super(address, errors); + } + + public AddressModel(AutofillAddress address) { + super(address); + } + } + public static final WritableObjectPropertyKey DELEGATE = new WritableObjectPropertyKey<>(); @@ -100,7 +111,7 @@ public ContactModel(AutofillContact contact) { public static final WritableBooleanPropertyKey VISIBLE = new WritableBooleanPropertyKey(); /** The chosen shipping address. */ - public static final WritableObjectPropertyKey SELECTED_SHIPPING_ADDRESS = + public static final WritableObjectPropertyKey SELECTED_SHIPPING_ADDRESS = new WritableObjectPropertyKey<>(); /** The chosen payment method (including billing address). */ @@ -150,8 +161,8 @@ public ContactModel(AutofillContact contact) { public static final WritableObjectPropertyKey> AVAILABLE_CONTACTS = new WritableObjectPropertyKey<>(); - public static final WritableObjectPropertyKey> - AVAILABLE_SHIPPING_ADDRESSES = new WritableObjectPropertyKey<>(); + public static final WritableObjectPropertyKey> AVAILABLE_SHIPPING_ADDRESSES = + new WritableObjectPropertyKey<>(); public static final WritableObjectPropertyKey> AVAILABLE_PAYMENT_INSTRUMENTS = new WritableObjectPropertyKey<>(); @@ -388,8 +399,11 @@ private void setSelectedContactDetails(@Nullable AutofillContact contact, String } @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 @@ private void setAvailableContacts(List contacts) { } @CalledByNative - private static List createAutofillAddressList() { + private static List createShippingAddressList() { return new ArrayList<>(); } @CalledByNative - private static void addAutofillAddress( - List addresses, AutofillAddress address) { - addresses.add(address); + private static void addShippingAddress( + List addresses, AutofillAddress address, String[] errors) { + addresses.add(new AddressModel(address, Arrays.asList(errors))); } @VisibleForTesting @@ -643,10 +657,21 @@ public static AutofillAddress createAutofillAddress( } @CalledByNative - private void setAvailableShippingAddresses(List addresses) { + private void setAvailableShippingAddresses(List addresses) { set(AVAILABLE_SHIPPING_ADDRESSES, addresses); } + @CalledByNative + private static List createBillingAddressList() { + return new ArrayList<>(); + } + + @CalledByNative + private static void addBillingAddress( + List addresses, AutofillAddress address) { + addresses.add(address); + } + @CalledByNative private void setAvailableBillingAddresses(List 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 082c92bc851f9b..9495afc7ff5242 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 @@ -169,18 +169,6 @@ public void onInputTextFocusChanged(boolean isFocused) { } } - @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) { @@ -238,9 +226,6 @@ void onKeyValueChanged(long nativeAssistantCollectUserDataDelegate, 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 199d565995524a..c1e51c928823a2 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 { +public class AssistantShippingAddressSection extends AssistantCollectUserDataSection { private AddressEditor mEditor; private boolean mIgnoreProfileChangeNotifications; @@ -42,76 +42,84 @@ public void setEditor(AddressEditor editor) { } @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 @@ protected boolean areEqual(AutofillAddress optionA, AutofillAddress optionB) { * 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 addresses) { + void onAddressesChanged(List addresses) { if (mIgnoreProfileChangeNotifications) { return; } @@ -147,13 +155,13 @@ void onAddressesChanged(List addresses) { } @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 f63b94786bed7b..a9eb47eac47189 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 @@ -179,11 +179,6 @@ public void onKeyValueChanged(String key, AssistantValue value) { @Override public void onInputTextFocusChanged(boolean isFocused) {} - @Override - public boolean isShippingAddressComplete(@Nullable AutofillAddress address) { - return address != null && address.isComplete(); - } - @Override public boolean isPaymentInstrumentComplete( @Nullable AutofillPaymentInstrument paymentInstrument) { 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 79ba7e76807dc5..7e192515a49371 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 @@ public void testNonEmptyPaymentRequest() throws Exception { 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 @@ public void testNonEmptyPaymentRequest() throws Exception { 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/AutofillAssistantPersonalDataManagerTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPersonalDataManagerTest.java index 45f28c0cc80b6f..abca6589de9d03 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 @@ private boolean hasAddress() { */ @Test @MediumTest - public void testCreateAndEnterAddress() throws Exception { + public void testCreateAndEnterShippingAddress() throws Exception { ArrayList 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 @@ public void testCreateAndEnterAddress() throws Exception { 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/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantTriggerScriptIntegrationTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantTriggerScriptIntegrationTest.java index 408bbe431ffe1b..97ce013fda4215 100644 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantTriggerScriptIntegrationTest.java +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantTriggerScriptIntegrationTest.java @@ -23,7 +23,9 @@ import static org.chromium.base.test.util.CriteriaHelper.DEFAULT_MAX_TIME_TO_POLL; import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.createDefaultTriggerScriptUI; +import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.scrollIntoView; import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.tapElement; +import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.waitUntilKeyboardMatchesCondition; import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.waitUntilViewAssertionTrue; import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.waitUntilViewMatchesCondition; @@ -723,4 +725,36 @@ public void onScrollEnded(int scrollOffsetY, int scrollExtentY) { waitUntilViewAssertionTrue(withText("Continue"), doesNotExist(), DEFAULT_MAX_TIME_TO_POLL); Assert.assertTrue(AutofillAssistantPreferencesUtil.getShowOnboarding()); } + + @Test + @MediumTest + @Features.EnableFeatures(ChromeFeatureList.AUTOFILL_ASSISTANT_PROACTIVE_HELP) + public void triggerScriptHidesAndShowsForKeyboard() throws Exception { + TriggerScriptProto.Builder triggerScript = + TriggerScriptProto.newBuilder() + .setTriggerCondition( + TriggerScriptConditionProto.newBuilder().setKeyboardHidden( + Empty.newBuilder())) + .setUserInterface(createDefaultTriggerScriptUI("Hello world", + /* bubbleMessage = */ "", + /* withProgressBar = */ false)); + + GetTriggerScriptsResponseProto triggerScripts = GetTriggerScriptsResponseProto.newBuilder() + .addTriggerScripts(triggerScript) + .build(); + AutofillAssistantTestServiceRequestSender testServiceRequestSender = + setupTriggerScripts(triggerScripts); + startAutofillAssistantOnTab(TEST_PAGE_A); + waitUntilViewMatchesCondition(withText("Hello world"), isCompletelyDisplayed()); + + scrollIntoView(mTestRule.getWebContents(), "input1"); + tapElement(mTestRule, "input1"); + waitUntilKeyboardMatchesCondition(mTestRule, /* isShowing= */ true); + waitUntilViewAssertionTrue( + withText("Hello World"), doesNotExist(), DEFAULT_MAX_TIME_TO_POLL); + + Espresso.closeSoftKeyboard(); + waitUntilKeyboardMatchesCondition(mTestRule, /* isShowing= */ false); + waitUntilViewMatchesCondition(withText("Hello world"), isCompletelyDisplayed()); + } } diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTestUtil.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTestUtil.java index ca0f8c65a2708c..b6ccc6ed9fb535 100644 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTestUtil.java +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTestUtil.java @@ -706,6 +706,23 @@ public static String getElementValue(WebContents webContents, String... elementI return result.getString(0); } + /** + * Scroll the element into view. + */ + public static void scrollIntoView(WebContents webContents, String... elementIds) + throws Exception { + if (!checkElementExists(webContents, elementIds)) { + throw new IllegalArgumentException(Arrays.toString(elementIds) + " does not exist"); + } + TestCallbackHelperContainer.OnEvaluateJavaScriptResultHelper javascriptHelper = + new TestCallbackHelperContainer.OnEvaluateJavaScriptResultHelper(); + javascriptHelper.evaluateJavaScriptForTests(webContents, + "(function() {" + getElementSelectorString(elementIds) + ".scrollIntoView();" + + "return true;" + + "})()"); + javascriptHelper.waitUntilHasValue(); + } + /** * Converts a view into a bitmap. */ 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 b33bea195711b3..e1dae066d83c08 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 @@ 'టచ్ చేసి నింపాల్సిన ఆధారాల జాబితా' మూసివేయబడింది. పాస్‌వర్డ్‌ని సూచించు సేవ్ చేసిన పాస్‌వర్డ్‌లు మరియు పాస్‌వర్డ్ ఎంపికలను చూపిస్తోంది -చిరునామాలు +అడ్రస్‌లు 'ట‌చ్ చేసి నింపాల్సిన ఆధారాల జాబితా'. కీబోర్డ్‌ను చూపు మీకు మీద నమ్మకం ఉంటే, ఇదివరకే సేవ్ చేసిన మీ పాస్‌వర్డ్‌ను మీరు మరొక సైట్‌కు ఉపయోగించవచ్చు. 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 b60301a2ee49a7..2a823ad5c93f51 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 @@ public void signinAndEnableSync(@SigninAccessPoint int accessPoint, CoreAccountI @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 b071c84e91c365..bbde1058f5dce3 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 boolean areControlsEnabled() { } 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/settings/AccountManagementFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/AccountManagementFragment.java index f02beac0649a15..28c73ee1c60247 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 @@ public void update() { configureSignOutSwitch(); configureChildAccountPreferences(); - updateAccountsList(); + AccountManagerFacadeProvider.getInstance().tryGetGoogleAccounts(this::updateAccountsList); } private boolean canAddAccounts() { @@ -271,7 +271,7 @@ private void configureChildAccountPreferences() { } } - private void updateAccountsList() { + private void updateAccountsList(List accounts) { PreferenceCategory accountsCategory = (PreferenceCategory) findPreference(PREF_ACCOUNTS_CATEGORY); if (accountsCategory == null) return; @@ -285,7 +285,6 @@ private void updateAccountsList() { accountsCategory.addPreference(createManageYourGoogleAccountPreference()); accountsCategory.addPreference(createDividerPreference(R.layout.divider_preference)); - List accounts = AccountManagerFacadeProvider.getInstance().tryGetGoogleAccounts(); for (Account account : accounts) { if (!mSignedInAccountName.equals(account.name)) { accountsCategory.addPreference(createAccountPreference(account)); @@ -372,7 +371,7 @@ private Context getStyledContext() { // ProfileDataCache.Observer implementation: @Override public void onProfileDataUpdated(String accountEmail) { - updateAccountsList(); + AccountManagerFacadeProvider.getInstance().tryGetGoogleAccounts(this::updateAccountsList); } // SignOutDialogListener implementation: diff --git a/chrome/app/resources/chromium_strings_is.xtb b/chrome/app/resources/chromium_strings_is.xtb index d4a6286fe5960f..953b42304a0d9b 100644 --- a/chrome/app/resources/chromium_strings_is.xtb +++ b/chrome/app/resources/chromium_strings_is.xtb @@ -270,7 +270,7 @@ Chromium getur ekki endurheimt stillingarnar þínar. Chromium er að reyna að sýna aðgangsorð. Sláðu inn Windows-aðgangsorðið þitt til að heimila þetta. Ekki var hægt að uppfæra Chromium Chromium OS á tilvist sína að þakka öðrum opnum hugbúnaði. -Þú 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. +Þú ert að bæta vinnusniði við þennan vafra og veita stjórnanda þínum leyfi til að stjórna vinnusniðinu eingöngu. Til að gera Chromium öruggara höfum við slökkt á eftirfarandi viðbót sem ekki er á skrá hjá og kann að hafa verið bætt við án þinnar vitneskju. Flytja reikning á nýjan Chromium prófíl? Chromium er úrelt diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb index 6e6c62245fa39b..1105d60f9c3f99 100644 --- a/chrome/app/resources/generated_resources_be.xtb +++ b/chrome/app/resources/generated_resources_be.xtb @@ -1028,7 +1028,7 @@ Дадаць укладку ў групу Выберыце колер тэмы Паўтарыце спробу -Заўсёды ўключаны VPN +Заўсёды ўключаная VPN Друк: Сетка VPN Каб у любы момант перайсці на галоўны экран, правядзіце знізу ўверх. diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index e8834468532862..47f43951bfa5ca 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb @@ -2582,6 +2582,7 @@ এই নামের কোনও প্রতিষ্ঠানের ইউনিট খুঁজে পাওয়া যাচ্ছে না। অনুগ্রহ করে আবার চেষ্টা করুন। পটভূমি সিঙ্ক অ্যাপগুলি সরাতে, সেটিংস > Google Play স্টোর > Android অভিরুচি ম্যানেজ করুন > অ্যাপ বা অ্যাপ্লিকেশন ম্যানেজার বিকল্পে যান। এরপর যে অ্যাপটিকে আনইনস্টল করতে চান তাতে ট্যাপ করুন (অ্যাপটি খোঁজার জন্য আপনাকে ডানদিক বা বাঁদিকে সোয়াইপ করতে হতে পারে)। এরপর আনইনস্টল করুন বা বন্ধ করুন বিকল্পে ট্যাপ করুন। +টাইপ করার সাথে সাথে প্রদর্শিত হবে এমন ইনলাইন লেখার সাজেশন দেখানো হবে একটি বাগ রিপোর্ট করুন ঠিক আছে... একবার সেভ করুন। সব জায়গায় ব্যবহার করুন @@ -3270,6 +3271,7 @@ Linux ফাইল ও অ্যাপগুলিকে, ব্যাক-আপ করার সমকালীন অবস্থায় ফিরিয়ে নিয়ে যাওয়া হচ্ছে। কার্ট 'উইন্ডো কন্ট্রোলস ওভারলে' বন্ধ করুন +লেখার সাজেশন প্রতিক্রিয়া এর দ্বারা চালিত ভিডিও চালাতে বা থামানোর জন্য টগল করুন @@ -4434,6 +4436,7 @@ -কে আপনার ফোনের সাথে কানেক্ট করুন। আরও জানুন অর্ধ-স্বচ্ছ Safari +পরবর্তী শব্দ সনাক্তকরণ প্রোফাইল যোগ করুন... মুদ্রন হচ্ছে... &পৃষ্ঠা সেভ করুন... @@ -6303,6 +6306,7 @@ আরও Google অ্যাকাউন্ট যোগ করার সুবিধা এখন উপলভ্য নেই আরও সর&ঞ্জাম ট্যাবটি নতুন উইন্ডোতে খুলুন +টেক্সট সংক্রান্ত সাজেশন ব্যতিক্রম যোগ করুন আপনি কি এই পৃষ্ঠাটিকে নতুন ট্যাব পৃষ্ঠা হিসাবে আশা করছিলেন? (Windows) diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index f90a0144965a0f..f32374af363225 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb @@ -200,7 +200,7 @@ SharedWorker: Servidores de nombres automáticos Tú gestionas los accesos directos -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. +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. Este archivo no se puede descargar de forma segura Nueva aplicación en segundo plano añadida Quitar huella digital @@ -3712,7 +3712,7 @@ Puedes gestionar la configuración de esta cuenta instalando la aplicación Fami Puedes desplazarte por las páginas con un cursor de texto. Pulsa Ctrl + tecla de búsqueda + 7 para desactivar esta función. Recordar más tarde Abrir sitio web de la extensión -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. +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. Aún no se ha actualizado Inicia sesión para añadir una cuenta de Google Activar Wi‑Fi @@ -3865,7 +3865,7 @@ Puedes gestionar la configuración de esta cuenta instalando la aplicación Fami Abre la aplicación Family Link para ver la configuración de supervisión Se ha copiado al portapapeles Internet -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. +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. Experimentos {NUM_EXTENSIONS,plural, =1{Haz clic para ver la extensión}other{Haz clic para ver las extensiones}} Realiza un powerwash e inténtalo de nuevo. @@ -4210,7 +4210,7 @@ Puedes gestionar la configuración de esta cuenta instalando la aplicación Fami Tecla de retroceso ¿Quieres guardar el nombre de usuario? Al inicio -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. +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. 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. El propietario puede controlar esta función en Ajustes > Configuración avanzada > Enviar automáticamente los datos de uso y diagnóstico a Google. 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. @@ -5351,7 +5351,7 @@ Exponente público ( bits): Libera espacio para continuar Tienes algunas tarjetas que solo se pueden utilizar en este dispositivo Color del texto -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. +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. Aplicación habilitada ¿Restaurar aplicaciones y páginas de forma predeterminada? Herramienta de actualización no disponible @@ -5672,7 +5672,7 @@ Exponente público ( bits): Ampliado Descargando ... {NUM_PAGES,plural, =1{Salir de la página}other{Salir de las páginas}} -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. +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. Buscar aplicaciones Impresoras de extensiones Pulsa "" otra vez para confirmar la asignación y salir. @@ -6680,7 +6680,7 @@ Guarda tu archivo de clave en un lugar seguro, ya que lo necesitarás para crear 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. Todos los métodos de introducción de texto Añadir impresora -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. +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. 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. El propietario puede controlar esta función en Ajustes > Configuración avanzada > Enviar automáticamente los datos de uso y diagnóstico a Google. 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. @@ -6983,7 +6983,7 @@ Pulsa un interruptor asignado para quitar la asignación. PIN incorrecto. Te quedan intentos. Buscando software dañino... (puerto) -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. +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. 2 segundos Ampliar el tamaño del texto podría ser peligroso. ¿Quieres enviarlo a Protección Avanzada de Google para que lo analice? @@ -7276,7 +7276,7 @@ Pulsa un interruptor asignado para quitar la asignación. Solo a la sesión de incógnito actual La nueva configuración de cookies se aplicará al volver a cargar la página Conexión inalámbrica -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. +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. Gestionar qué sincronizas Detalles de la conexión compartida instantánea Opciones de accesibilidad con interruptores @@ -7510,7 +7510,7 @@ Pulsa un interruptor asignado para quitar la asignación. &Deshacer Otro programa de tu ordenador ha añadido un tema que puede cambiar el funcionamiento de Chrome. Has llegado al límite de tiempo de uso de que ha establecido tu padre o madre. Podrás usar esta aplicación mañana durante . -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. +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. Preguntar cuando un sitio web quiera acceder a los dispositivos Bluetooth 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 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. Más información : dispositivo Bluetooth conectado diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb index 89569e6eada44f..3ce1c92e74f473 100644 --- a/chrome/app/resources/generated_resources_eu.xtb +++ b/chrome/app/resources/generated_resources_eu.xtb @@ -4385,7 +4385,7 @@ Haurrak ikastetxean ez badu Chromebook-ik erabiltzen, edo nahiago baduzu etxean Bidali aginduak luzapenari Itzultzen… Desaktibatu audioa -Chrome-ren fitxategietarako tresnak +Chrome-ren fitxategietarako zerbitzu-aplikazioak Gakoei buruzko akordioa Gailuaren izena Ezin izan da muntatu gailuaren partizio bat edo gehiago. @@ -6331,7 +6331,7 @@ Txartel adimenduna sartuta edukitzea eskatzen du domeinuak. Orri honek ez du erantzuten. Itxaron orriak erantzun arte, edo itxi ezazu. Ziurtagiri-emaile hauek identifikatzen dituzten ziurtagiriak dituzu erregistratuta egonkorra (probatzaile fidagarria) -Zerbitzua: +Zerbitzu-aplikazioaren prozesua: Kontu honen administratzaileak saio-hasiera anitzerako baimenak kendu ditu. Ezarri Linux-eko atakak sareko beste gailu batzuentzat erabilgarri. Erakutsi puntu argi bizkor bat fokuratutako objektuan @@ -6864,7 +6864,7 @@ Gorde gakoen fitxategia leku seguru batean. Zure luzapenaren bertsio berriak sor Ez dago erabilgarri etxeko sarea. Datu-ibiltaritzak gaituta egon behar du konektatu ahal izateko. Mikrofonoa: Abiarazi plugin hau -Windows-en tresnak +Windows-en zerbitzu-aplikazioak Ez zaizu egingo horren nekagarria argi gutxiko inguruetan pantailari begira egotea Jarraitu irakurtzen Chrome-n Aktibatu mikrofonoa diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb index f2124c31b8f627..d0631b73d370f7 100644 --- a/chrome/app/resources/generated_resources_gu.xtb +++ b/chrome/app/resources/generated_resources_gu.xtb @@ -2565,6 +2565,7 @@ તે નામવાળો કોઈ સંસ્થાકીય એકમ શોધી શકાયો નથી. કૃપા કરીને ફરી પ્રયત્ન કરો. પૃષ્ઠભૂમિ સમન્વયન ઍપને કાઢી નાખવા માટે, સેટિંગ > Google Play સ્ટોર > Android પસંદગીઓ મેનેજ કરો > ઍપ અથવા ઍપ્લિકેશન મેનેજર પર જાઓ. પછી તમે અનઇન્સ્ટૉલ કરવા માગો છો તે ઍપ પર ટૅપ કરો (ઍપ શોધવા માટે તમારે જમણે અથવા ડાબે સ્વાઇપ કરવું જરૂરી હોય શકે છે). પછી અનઇન્સ્ટૉલ કરો અથવા બંધ કરો પર ટૅપ કરો. +તમે ટાઇપ કરી રહ્યાં હો ત્યારે દેખાતા ઇનલાઇન લખવાના સૂચનો બતાવો બગની જાણ કરો બરાબર, સમજાઇ ગયું... એકવાર સ્ટોર કરો. ગમે ત્યાં ઉપયોગ કરો @@ -3253,6 +3254,7 @@ Linux ફાઇલો અને ઍપને તેની બૅકઅપ લીધેલી સ્થિતિમાં રિસ્ટોર કરવામાં આવી રહ્યાં છે. કાર્ટ વિન્ડો નિયંત્રણોનું ઓવરલે બંધ કરો +પૂર્વાનુમાનિત લેખન Feedback દ્વારા સંચાલિત વીડિઓ ચલાવવા અથવા થોભાવવા માટે તેને ટૉગલ કરો @@ -4417,6 +4419,7 @@ તમારા ને તમારા ફોન સાથે કનેક્ટ કરો. વધુ જાણો અર્ધ-પારદર્શક Safari +આગલા શબ્દનું પૂર્વાનુમાન પ્રોફાઇલ ઉમેરો... છાપકામ... પેજ આ &રીતે સાચવો... @@ -6287,6 +6290,7 @@ USB ડિવાઇસ Googleના વધુ એકાઉન્ટ ઉમેરી શકાશે નહીં વધુ સા&ધનો ટૅબને નવી વિંડોમાં ખસેડો +ટેક્સ્ટ સૂચનો અપવાદ ઉમેરો શું આ તમારી અપેક્ષા મુજબનું નવું ટેબ પૃષ્ઠ છે? (Windows) diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb index d9268c2c3cdb73..651bffc0a76910 100644 --- a/chrome/app/resources/generated_resources_is.xtb +++ b/chrome/app/resources/generated_resources_is.xtb @@ -2317,7 +2317,7 @@ Annars skaltu skrá þig út núna svo breytingarnar á þessum reikningi taki g 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. Hætta við uppsetningu reiknings? Allir notendur þessa tækis hafa aðgang að þessu farsímakerfi -Bæta við vinnuprófíl +Bæta við vinnusniði Þetta er reikningur fyrir börn sem stjórnar. Merki Android sími @@ -5243,7 +5243,7 @@ Annars skaltu skrá þig út núna svo breytingarnar á þessum reikningi taki g Fréttir Tengjast með Til baka -Bæta við vinnuprófíl +Bæta við vinnusniði Villa kom upp við uppsetningu Linux-forritsins. Smelltu á tilkynninguna til að fá nánari upplýsingar. Þetta hreinsar af gögnum sem vefsvæði geyma Læsa skjánum diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb index 1fe0489e86d5e2..551f052232f8c6 100644 --- a/chrome/app/resources/generated_resources_kn.xtb +++ b/chrome/app/resources/generated_resources_kn.xtb @@ -2575,6 +2575,7 @@ ಆ ಹೆಸರಿನ ಸಾಂಸ್ಥಿಕ ಘಟಕವನ್ನು ಕಂಡುಹಿಡಿಯಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ. ಹಿನ್ನೆಲೆ ಸಿಂಕ್ ಆ್ಯಪ್‌ಗಳನ್ನು ತೆಗೆದುಹಾಕಲು, ಸೆಟ್ಟಿಂಗ್‌ಗಳು > Google Play ಸ್ಟೋರ್ > Android ಆದ್ಯತೆಗಳನ್ನು ನಿರ್ವಹಿಸಿ> ಆ್ಯಪ್‌ಗಳು ಅಥವಾ ಆ್ಯಪ್ ನಿರ್ವಾಹಕಕ್ಕೆ ಹೋಗಿ ನಂತರ ನೀವು ಅನ್‌ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲು ಬಯಸುವ ಆ್ಯಪ್ ಅನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ (ಆ್ಯಪ್ ಹುಡುಕಲು ನಿಮಗೆ ಎಡಕ್ಕೆ ಅಥವಾ ಬಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡುವ ಅಗತ್ಯವಿರಬಹುದು). ನಂತರ ಅನ್‌ಇನ್‌ಸ್ಟಾಲ್ ಅಥವಾ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ ಅನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ. +ನೀವು ಟೈಪ್ ಮಾಡುವಾಗ ಗೋಚರಿಸುವ ಇನ್‌ಲೈನ್‌ ಬರವಣಿಗೆಯ ಸಲಹೆಗಳನ್ನು ತೋರಿಸಿ ಬಗ್ ವರದಿ ಮಾಡಿ ಸರಿ... ಒಮ್ಮೆ ಸಂಗ್ರಹಿಸಿ. ಎಲ್ಲೆಡೆ ಬಳಸಿ @@ -3263,6 +3264,7 @@ Linux ಫೈಲ್‌ಗಳು ಮತ್ತು ಆ್ಯಪ್‌ಗಳನ್ನು, ಅವುಗಳ ಬ್ಯಾಕಪ್ ಮಾಡಲಾದ ಸ್ಥಿತಿಗೆ ಮರುಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ. ಕಾರ್ಟ್‌ಗಳು ವಿಂಡೋ ನಿಯಂತ್ರಣಗಳ ಓವರ್‌ಲೇಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ +ಮುನ್ಸೂಚಕ ಬರವಣಿಗೆ Feedback ಮೂಲಕ ಸಂಚಾಲಿತಗೊಂಡಿದೆ ಪ್ಲೇ ಮಾಡಲು ಅಥವಾ ವಿರಾಮಗೊಳಿಸಲು ವೀಡಿಯೊವನ್ನು ಟಾಗಲ್ ಮಾಡಿ @@ -4428,6 +4430,7 @@ ನಿಮ್ಮ ಅನ್ನು, ನಿಮ್ಮ ಫೋನ್‌ಗೆ ಸಂಪರ್ಕಿಸಿ. ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ ಸೆಮಿ-ಟ್ರಾನ್ಸ್‌ಪರೆಂಟ್ Safari +ಮುಂದಿನ ಪದದ ಮುನ್ನೋಟಗಳು ಪ್ರೊಫೈಲ್ ಸೇರಿಸಿ... ಮುದ್ರಿಸಲಾಗುತ್ತಿದೆ... &ಇದರಂತೆ ಪುಟವನ್ನು ಉಳಿಸಿ... @@ -6298,6 +6301,7 @@ ಹೆಚ್ಚಿನ Google ಖಾತೆಗಳ ಸೇರಿಸುವಿಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ ಇನ್ನಷ್ಟು ಪರಿಕರ&ಗಳು ಟ್ಯಾಬ್ ಅನ್ನು ಹೊಸ ವಿಂಡೋಗೆ ಸರಿಸಿ +ಪಠ್ಯ ಸಲಹೆಗಳು ವಿನಾಯಿತಿ ಸೇರಿಸು ನೀವು ನಿರೀಕ್ಷಿಸುತ್ತಿರುವುದು ಈ ಹೊಸ ಟ್ಯಾಬ್ ಪುಟವೇ? (Windows) diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb index 796928e99fd2e0..a01e52af58bb10 100644 --- a/chrome/app/resources/generated_resources_ky.xtb +++ b/chrome/app/resources/generated_resources_ky.xtb @@ -1479,7 +1479,7 @@ Family Link колдонмосун түзмөгүңүзгө орнотуп, бу Виртуалдык машинанын сүрөтү текшерилүүдө түзмөгүн ким колдонуп жатат? Шайкештирүү өчүрүлгөн -Кеңейтүүнүн аракеттерин угуу үчүн, "Баштоо" баскычын басыңыз +Кеңейтүүнүн аракеттерин угуу үчүн "Баштоо" баскычын басыңыз Бир жерден ката кетти. Ката коду: . Толук экран режиминде трансляциялоо оптималдаштырылсынбы? Жаңы уктоочу убакыт коюлду diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb index 3b188695247fa6..e9753498bcf5ec 100644 --- a/chrome/app/resources/generated_resources_mr.xtb +++ b/chrome/app/resources/generated_resources_mr.xtb @@ -2581,6 +2581,7 @@ त्या नावाचे संस्थात्मक एकक शोधू शकत नाही. कृपया पुन्हा प्रयत्न करा. पार्श्वभूमी सिंक ॲप्स काढून टाकण्यासाठी, सेटिंग्ज > Google Play स्टोअर > Android प्राधान्ये व्यवस्थापित करा > ॲप्स किंवा अ‍ॅप्लिकेशन व्यवस्थापक वर जा. नंतर तुम्हाला अनइंस्टॉल करायच्या असलेल्या ॲपवर टॅप करा (ॲप शोधण्‍यासाठी तुम्हाला कदाचित उजवीकडे किंवा डावीकडे स्वाइप करावे लागेल). यानंतर अनइंस्टॉल करा किंंवा बंद करा वर टॅप करा. +तुम्ही टाइप करत असताना दिसणाऱ्या लिखाणाच्या इनलाइन सूचना दाखवा एक दोष नोंदवा ठीक आहे... एकदा स्टोअर करा. कुठेही वापरा @@ -3268,6 +3269,7 @@ Linux फाइल आणि ॲप्स या गोष्टी बॅकअप घेतला होता त्या स्थितीमध्ये रीस्टोअर केल्या जात आहेत. कार्ट विंडो नियंत्रणे ओव्हरले बंद करा +अंदाजानुसार लिखाण Feedback ने समर्थित करा प्ले करण्यासाठी किंवा थांबवण्यासाठी व्हिडिओ टॉगल करा @@ -4431,6 +4433,7 @@ तुमचे तुमच्या फोनसह कनेक्ट करा. अधिक जाणून घ्या अर्धपारदर्शक Safari +पुढील शब्दांचा अंदाज प्रोफाइल जोडा… प्रिंट करत आहे... पेज या फॉरमॅटमध्ये सेव्ह करा... @@ -6300,6 +6303,7 @@ https://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featu आणखी Google खाती जोडणे बंद केले आहे अधिक साध&ने टॅब नवीन विंडोवर हलवा +मजकुराबाबत सूचना एक्सेप्शन जोडा तुम्ही अपेक्षा करत होता ते हे नवीन पृष्ठ आहे? (Windows) diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb index deae6320960576..c71a893376437e 100644 --- a/chrome/app/resources/generated_resources_ne.xtb +++ b/chrome/app/resources/generated_resources_ne.xtb @@ -2559,6 +2559,7 @@ त्यो नाम भएको सङ्गठनात्मक एकाइ फेला पार्न सकिएन। कृपया फेरि प्रयास गर्नुहोस्। पृष्ठभूमिमा सिंक गर्ने सुविधा एप हटाउन, सेटिङहरू > Google Play स्टोर > Android का प्राथमिकताहरू व्यवस्थापन गर्नुहोस् > एपहरू वा एप प्रबन्धक नामक विकल्पमा जानुहोस्। त्यसपछि आफूले स्थापना रद्द गर्न चाहेको एपमा ट्याप गर्नुहोस् (उक्त एप फेला पार्न तपाईंले दायाँ वा बायाँतिर स्वाइप गर्नु पर्ने हुन सक्छ)। त्यसपछि स्थापना रद्द गर्नुहोस् वा असक्षम पार्नुहोस् नामक बटनमा ट्याप गर्नुहोस्। +मैले टाइप गर्दै जाँदा लेखनसम्बन्धी इनलाइन सुझावहरू देखाइयोस् बगका बारेमा रिपोर्ट गर्नुहोस् ठिक छ... एक पटक भण्डारण गर्नुहोस्। सबैतिर प्रयोग गर्नुहोस् @@ -3245,6 +3246,7 @@ Linux का फाइल र एपहरू पुनर्स्थापना गरी तिनको ब्याकअप स्थितिमा लगिँदै छ। कार्टहरू विन्डो कन्ट्रोल ओभरले असक्षम पार्नुहोस् +पूर्वानुमानयुक्त लेखन पृष्ठपोषण द्वारा संचालित भिडियो प्ले वा पज गर्न टगल गर्नुहोस्‌ @@ -4195,7 +4197,7 @@ ब्याकस्पेस युजरनेम सुरक्षित गर्ने हो? सुरुवातमा -यो तपाईंको डिभाइस र तपाईंले गर्ने त्यसको प्रयोग (जस्तै ब्याट्रीको स्तर, प्रणाली तथा एपका क्रियाकलाप र त्रुटिहरू) सम्बन्धी सामान्य जानकारी हो। यो डेटालाई Android मा सुधार गर्ने प्रयोजनका लागि प्रयोग गरिने छ र केही एकत्रित जानकारीले Google का एप तथा Android का विकासकर्ता जस्ता साझेदारहरूलाई तिनका एप र उत्पादनहरू अझ राम्रो बनाउन पनि मद्दत गर्ने छ। +यो तपाईंको डिभाइस र त्यसको प्रयोग (जस्तै ब्याट्रीको स्तर, प्रणाली तथा एपका क्रियाकलाप र त्रुटिहरू) सम्बन्धी सामान्य जानकारी हो। यो डेटालाई Android मा सुधार गर्ने प्रयोजनका लागि प्रयोग गरिने छ र केही एकत्रित जानकारीले Google का एप तथा Android का विकासकर्ता जस्ता साझेदारहरूलाई तिनका एप र उत्पादनहरू अझ राम्रो बनाउन पनि मद्दत गर्ने छ। यो सुविधा निष्क्रिय पार्नुले प्रणालीका अद्यावधिक र सुरक्षा जस्ता अत्यावश्यक सेवाहरूलाई आवश्यक पर्ने जानकारी पठाउने तपाईंको डिभाइसको क्षमतामा भने कुनै असर पर्दैन। यस डिभाइसका मालिक सेटिङहरू > उन्नत > निदान तथा प्रयोगसम्बन्धी डेटा Google मा स्वतः पठाउनुहोस् नामक विकल्पमा गई यो सुविधा नियन्त्रण गर्न सक्नुहुन्छ। तपाईंको वेब तथा एपसम्बन्धी अतिरिक्त क्रियाकलापको सेटिङ सक्रिय गरिएको छ भने यो डेटा तपाईंको Google खातामा सुरक्षित गरिन सक्छ। तपाईं account.google.com मा गई आफ्नो डेटा हेर्न, मेटाउन र परिवर्तन गर्न सक्नुहुन्छ। @@ -4404,6 +4406,7 @@ आफ्नो आफ्नो फोनमा जोड्नुहोस्। थप जान्नुहोस् अर्धपारदर्शी सफारी +आउँदो शब्दको पूर्वानुमान प्रोफाइल हाल्नुहोस्... प्रिन्ट गर्दै... पृष्ठलाई यसको &रूपमा बचत गर्नुहोस्... @@ -6270,6 +6273,7 @@ योभन्दा बढी Google खाताहरू थप्ने सुविधा असक्षम पारिएको छ थप उपकरणहरू ट्याब नयाँ विन्डोमा सार्नुहोस् +पाठसम्बन्धी सुझावहरू अपवाद थप्नुहोस् के यो नै तपाईंले अपेक्षा गर्नुभएको नयाँ ट्याब पृष्ठ हो? (Windows) diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb index 4c46f634a128a6..d1ce480f0a4b5b 100644 --- a/chrome/app/resources/generated_resources_sr-Latn.xtb +++ b/chrome/app/resources/generated_resources_sr-Latn.xtb @@ -2661,7 +2661,7 @@ a Ctrl+Alt+taster za smanjivanje osvetljenosti da biste umanjili prikaz.Dodavanje aplikacije „“ nije uspelo zbog konflikta sa aplikacijom „“. Korišćenje uređaja O, ne! Ovaj server šalje podatke koje ne razume. Prijavite grešku i uz nju pošaljite osnovnu listu. -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. +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. Učitavanje dodatka nije uspelo Još stranica Nijedan sajt nije uvećan ni umanjen @@ -4210,7 +4210,7 @@ a Ctrl+Alt+taster za smanjivanje osvetljenosti da biste umanjili prikaz.Backspace Želite li da sačuvate korisničko ime? Pri pokretanju -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. +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. 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. Vlasnik može da upravlja ovom funkcijom u odeljku Podešavanja > Napredno > Automatski šalji dijagnostiku i podatke o korišćenju Google-u. 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. @@ -6677,7 +6677,7 @@ Datoteka ključa: Ušli ste u režim pregleda prozora. Prevucite da biste se kretali ili pritisnite Tab ako koristite tastaturu. Sve metode unosa Dodajte štampač -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. +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. 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. Vlasnik može da upravlja ovom funkcijom u odeljku Podešavanja > Napredno > Automatski šalji dijagnostiku i podatke o korišćenju Google-u. 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. @@ -6936,7 +6936,7 @@ Pritisnite dodeljeni prekidač da biste uklonili dodelu. Podesi automatska ažuriranja , 1 sekunda -Ne prikazuj nikakva obaveštenja +Ne prikazuj uopšte obaveštenja Ovom sajtu je zabranjeno da pristupa lokaciji. Š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. Saznajte više Snimi video @@ -7087,7 +7087,7 @@ Pritisnite dodeljeni prekidač da biste uklonili dodelu. Odaberite jezik na koji želite da prevedete stranicu Možete da predate ovaj Chromebook korisniku . Podešavanje je skoro gotove, pa dolazi vreme za istraživanje. Vodič za podešavanje pristupa pomoću prekidača -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. +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. . mreža od , , , jačina signala %, upravlja administrator, povežite Već ste tražili „ {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?}} diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index 6ea92e341cd7b4..97766cc2b03b27 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb @@ -2661,7 +2661,7 @@ Додавање апликације „“ није успело због конфликта са апликацијом „“. Коришћење уређаја О, не! Овај сервер шаље податке које не разуме. Пријавите грешку и уз њу пошаљите основну листу. -Ово су опште информације о овом уређају и начину на који се користи (попут нивоа напуњености батерије, активности система и апликација и грешака). Подаци ће се користити за побољшање Android-а, а неке обједињене информације ће помоћи и Google апликацијама и партнерима, као што су Android програмери, да побољшају своје апликације и производе. +Ово су опште информације о овом уређају и начину на који се користи (попут нивоа напуњености батерије, активности система и апликација, и грешака). Подаци ће се користити за побољшање Android-а, а неке обједињене информације ће помоћи и Google апликацијама и партнерима, као што су Android програмери, да побољшају своје апликације и производе. Учитавање додатка није успело Још страница Ниједан сајт није увећан ни умањен @@ -4210,7 +4210,7 @@ Backspace Желите ли да сачувате корисничко име? При покретању -Ово су уопштене информације о уређају и начину на који се користи (попут нивоа батерије, активности система и апликација и грешака). Подаци ће се користити за побољшавање Android-а, а неке обједињене информације ће помоћи и Google апликацијама и партнерима, као што су Android програмери, да побољшају своје апликације и производе. +Ово су уопштене информације о уређају и начину на који се користи (попут нивоа батерије, активности система и апликација, и грешака). Подаци ће се користити за побољшавање Android-а, а неке обједињене информације ће помоћи и Google апликацијама и партнерима, као што су Android програмери, да побољшају своје апликације и производе. Искључивање ове функције неће утицати на могућност уређаја да шаље информације потребне за неопходне услуге, попут ажурирања система и безбедносних функција. Власник може да управља овом функцијом у одељку Подешавања > Напредно > Аутоматски шаљи дијагностику и податке о коришћењу Google-у. Ако је укључено додатно подешавање за Активности на вебу и у апликацијама, ови подаци ће се можда чувати на Google налогу. Можете да прегледате и бришете податке и да мењате подешавања налога на account.google.com. @@ -6677,7 +6677,7 @@ Ушли сте у режим прегледа прозора. Превуците да бисте се кретали или притисните Tab ако користите тастатуру. Све методе уноса Додајте штампач -Ово су уопштене информације о овом уређају и начину на који се користи (попут нивоа батерије, активности система и апликација и грешака). Подаци ће се користити за побољшавање Android-а, а неке обједињене информације ће помоћи и Google апликацијама и партнерима, као што су Android програмери, да побољшају своје апликације и производе. +Ово су уопштене информације о овом уређају и начину на који се користи (попут нивоа батерије, активности система и апликација, и грешака). Подаци ће се користити за побољшавање Android-а, а неке обједињене информације ће помоћи и Google апликацијама и партнерима, као што су Android програмери, да побољшају своје апликације и производе. Искључивање ове функције неће утицати на могућност овог уређаја да шаље информације потребне за неопходне услуге, попут ажурирања система и безбедносних функција. Власник може да управља овом функцијом у одељку Подешавања > Напредно > Аутоматски шаљи дијагностику и податке о коришћењу Google-у. Ако за дете укључите додатне Активности на вебу и у апликацијама, ти подаци ће се можда чувати на Google налогу детета. Сазнајте више о овим подешавањима и о томе како да их прилагодите на families.google.com. @@ -6936,7 +6936,7 @@ Подеси аутоматска ажурирања , 1 секунда -Не приказуј никаква обавештења +Не приказуј уопште обавештења Овом сајту је забрањено да приступа локацији. Шаљите податке о коришћењу и дијагностичке податке. Помозите нам да побољшамо Android доживљај за дете тако што ћете аутоматски слати Google-у податке о дијагностици и коришћењу уређаја и апликација. Те информације се неће користити за идентификацију детета и помоћи ће у одржавању стабилности система и апликације и другим подешавањима. Неки обједињени подаци ће такође помоћи Google апликацијама и партнерима, попут Android програмера. Ако за дете укључите додатне активности на вебу и у апликацијама, ти подаци ће се можда чувати на Google налогу детета. Сазнајте више Сними видео @@ -7087,7 +7087,7 @@ Одаберите језик на који желите да преведете страницу Можете да предате овај Chromebook кориснику . Подешавање је скоро готове, па долази време за истраживање. Водич за подешавање приступа помоћу прекидача -Ово су опште информације о уређају и начину на који га користите (попут нивоа напуњености батерије, активности система и апликација и грешака). Подаци ће се користити за побољшање Android-а, а неке обједињене информације ће помоћи и Google апликацијама и партнерима, као што су Android програмери, да побољшају своје апликације и производе. +Ово су опште информације о уређају и начину на који га користите (попут нивоа напуњености батерије, активности система и апликација, и грешака). Подаци ће се користити за побољшање Android-а, а неке обједињене информације ће помоћи и Google апликацијама и партнерима, као што су Android програмери, да побољшају своје апликације и производе. . мрежа од , , , јачина сигнала %, управља администратор, повежите Већ сте тражили „ {0,plural, =1{Желите ли да отпремите једну датотеку на овај сајт?}one{Желите ли да отпремите # датотеку на овај сајт?}few{Желите ли да отпремите # датотеке на овај сајт?}other{Желите ли да отпремите # датотека на овај сајт?}} diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index 243a5dbe66046a..78f927de71f9d5 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb @@ -4051,7 +4051,7 @@ நிறுவனத்தின் கொள்கை மாறியுள்ளது. கருவிப்பட்டியில் ’பரிசோதனைகள்’ பட்டன் சேர்க்கப்பட்டது. பரிசோதனைகளை இயக்குவதற்கான உரையாடலைத் திறக்க, இந்த பட்டனைக் கிளிக் செய்யவும். சேர்க்கப்பட்டவை ஒலியை இயக்க, தளங்களை அனுமதி -கருத்து அறிக்கைகளில் அனுப்பிய system_logs.txt கோப்பினைச் சேர்க்கும். +கருத்து அறிக்கைகளில் அனுப்பிய system_logs.txt ஃபைலைச் சேர்க்கும். அடர் சிவப்பு & ஆரஞ்சு இதற்காக அனுப்பு: அறிவிப்புகளை அனுப்ப அனுமதிக்கப்பட்டவை @@ -4896,7 +4896,7 @@ இனி ஆதரிக்கப்படாது. ஆப்ஸ் சாளரத்திற்காகக் காத்திருக்கிறது... பிரத்தியேகப் பெயர்மாற்றி -கொள்கை உள்ளமைவுகளுடன் policies.json கோப்பினைச் சேர். +கொள்கை உள்ளமைவுகளுடன் policies.json ஃபைலைச் சேர். பதிவிறக்கம் தொடங்கியது பிரிண்டரைக் கண்டறிய இயலவில்லை. பிரிண்டர் முகரியை மீண்டும் உள்ளிடுக. ஸ்கிரீன் சேவரை இயக்குதல் diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb index a1d79178904dc2..2195a3dd27f28c 100644 --- a/chrome/app/resources/generated_resources_tr.xtb +++ b/chrome/app/resources/generated_resources_tr.xtb @@ -1804,7 +1804,7 @@ Sunucunun mesajı: Bir ağa bağlanın ve tekrar deneyin OKUNMAYANLAR Bir hata oluştu. Lütfen tekrar deneyin veya cihaz sahibi ya da yöneticisiyle iletişime geçin. Hata kodu: . -ChromeVox eğiticiyi aç +ChromeVox eğitimini aç Sitelerin, çerez verilerini kaydetmelerine ve okumalarına izin ver (önerilir) Etkinlik günlüğünü göster Otomatik tarama diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb index 28a61a2e5c3be9..a7d0ff0791ad3a 100644 --- a/chrome/app/resources/generated_resources_ur.xtb +++ b/chrome/app/resources/generated_resources_ur.xtb @@ -2567,6 +2567,7 @@ myaccount.google.com/activitycontrols/search پر تبدیل کر سکتے ہي اس نام کا تنظیمی یونٹ تلاش نہیں کیا جا سکا۔ براہ کرم دوبارہ کوشش کریں۔ پس منظر کی مطابقت پذیری ‏ایپس ہٹانے کے لیے، ترتیبات > Google Play اسٹور > Android کی ترجیحات کا نظم کریں > ایپس یا ایپلیکیشن مینیجر پر جائیں۔ پھر اس ایپ پر تھپتھپائیں جسے آپ اَن انسٹال کرنا چاہتے ہیں (ممکن ہے کہ ایپ تلاش کرنے کے لیے آپ کو دائیں یا بائیں سوائپ کرنا پڑے)۔ پھر 'اَن انسٹال کریں' یا 'غیر فعال کریں' پر تھپتھپائیں۔ +ان لائن لکھنے کی تجاویز دکھائیں جو آپ کے ٹائپ کرتے ہی ظاہر ہوتے ہیں بگ کی اطلاع دیں ٹھیک ہے… ایک بار اسٹور کریں۔ ہر جگہ استعمال کریں @@ -3255,6 +3256,7 @@ myaccount.google.com/activitycontrols/search پر تبدیل کر سکتے ہي ‏Linux فائلز اور ایپس کو ان کی بیک اپ حالت میں بحال کیا جا رہا ہے۔ کارٹس ونڈو کنٹرولز اوورلے کو غیر فعال کریں +لکھنے میں لفظ کی پیشین گوئی تاثرات کی جانب سے تقویت یافتہ چلانے یا روکنے کیلئے ویڈیو ٹوگل کریں @@ -4418,6 +4420,7 @@ myaccount.google.com/activitycontrols/search پر تبدیل کر سکتے ہي اپنے کو اپنے فون سے منسلک کریں۔ مزید جانیں نیم شفاف Safari +اگلے لفظ کی پیشن گوئی پروفائل شامل کریں... پرنٹ کیا جا رہا ہے… صفحہ محفوظ کریں &بطور… @@ -6289,6 +6292,7 @@ myaccount.google.com/activitycontrols/search پر تبدیل کر سکتے ہي ‏مزید Google اکاؤنٹس شامل کرنے کا عمل غیر فعال ہے مزید ٹولز ٹیب کو نئی ونڈو میں منتقل کریں +متنی تجاویز استثناء شامل کریں کیا یہی وہ نیا ٹیب صفحہ ہے جس کی آپ توقع کر رہے تھے؟ (Windows)‎ diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index bb97901ad16482..2d5e3242580c8c 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb @@ -3134,7 +3134,7 @@ và Ctrl+Alt+Giảm độ sáng để thu nhỏ. Không tìm thấy đích Truyền nào. Bạn cần trợ giúp? Quả dưa đang chia sẻ một cửa sổ. -Hiển thị thông báo +Hiện thông báo Đã bắt đầu in Email và mật khẩu bạn nhập không khớp Đang truyền màn hình diff --git a/chrome/app/resources/google_chrome_strings_is.xtb b/chrome/app/resources/google_chrome_strings_is.xtb index d65a3079d6a344..493332b06a3fc5 100644 --- a/chrome/app/resources/google_chrome_strings_is.xtb +++ b/chrome/app/resources/google_chrome_strings_is.xtb @@ -291,7 +291,7 @@ Google Chrome getur ekki endurheimt stillingarnar þínar. Þú hefur ekki tilskilin réttindi til uppsetningar fyrir kerfið allt. Prófaðu að keyra uppsetningarforritið aftur sem stjórnandi. Endurræsa Chrome Til að senda númer úr í Android símann þinn skaltu skrá þig inn á Chrome í báðum tækjunum. -Þú 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. +Þú ert að bæta vinnusniði við þennan vafra og veita stjórnanda þínum leyfi til að stjórna vinnusniðinu eingöngu. {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}} Chrome OS gat ekki samstillt gögnin þín vegna þess að innskráningarupplýsingar reikningsins eru úreltar. Google Chrome krefst Windows 7 eða nýrri útgáfu. diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 199407202dfcf4..43fffa4cdaf794 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn @@ -536,8 +536,6 @@ static_library("browser") { "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 9dc3f2deca59ef..18240ea8c99681 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc @@ -6412,10 +6412,6 @@ const FeatureEntry kFeatureEntries[] = { 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 1ef62c74ba9922..d2c11b457a1289 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 @@ AssistantCollectUserDataDelegate::GetJavaObject() { return java_assistant_collect_user_data_delegate_; } -bool AssistantCollectUserDataDelegate::IsShippingAddressComplete( - JNIEnv* env, - const base::android::JavaParamRef& jcaller, - const base::android::JavaParamRef& 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& 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 522b5de9acd94b..2a92a2ab4d85d5 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 @@ class AssistantCollectUserDataDelegate { const base::android::JavaParamRef& jcaller, jboolean jis_focused); - bool IsShippingAddressComplete( - JNIEnv* env, - const base::android::JavaParamRef& jcaller, - const base::android::JavaParamRef& jaddress); - bool IsPaymentInstrumentComplete( JNIEnv* env, const base::android::JavaParamRef& jcaller, diff --git a/chrome/browser/android/autofill_assistant/ui_controller_android.cc b/chrome/browser/android/autofill_assistant/ui_controller_android.cc index efa4840b14a465..a8ec539ebe9654 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 @@ void UiControllerAndroid::OnInputTextFocusChanged(bool is_text_focused) { 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 @@ void UiControllerAndroid::OnUserDataChanged( 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 @@ void UiControllerAndroid::OnUserDataChanged( 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 @@ void UiControllerAndroid::OnUserDataChanged( 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 @@ void UiControllerAndroid::OnUserDataChanged( 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 afaed9d990ecc2..3eda3ee2fa2d53 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 @@ class UiControllerAndroid : public ControllerObserver { 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/ash/crosapi/BUILD.gn b/chrome/browser/ash/crosapi/BUILD.gn index b6b63495afe32b..69aa355611b035 100644 --- a/chrome/browser/ash/crosapi/BUILD.gn +++ b/chrome/browser/ash/crosapi/BUILD.gn @@ -63,6 +63,8 @@ source_set("crosapi") { "message_center_ash.h", "metrics_reporting_ash.cc", "metrics_reporting_ash.h", + "power_ash.cc", + "power_ash.h", "prefs_ash.cc", "prefs_ash.h", "screen_manager_ash.cc", @@ -129,6 +131,7 @@ source_set("crosapi") { "//extensions/common", "//printing:printing", "//printing:printing_base", + "//services/device/wake_lock/power_save_blocker", "//ui/message_center", "//ui/message_center/public/cpp", "//ui/shell_dialogs", diff --git a/chrome/browser/ash/crosapi/DEPS b/chrome/browser/ash/crosapi/DEPS index 37178cbcd6078d..47c672ef1c248b 100644 --- a/chrome/browser/ash/crosapi/DEPS +++ b/chrome/browser/ash/crosapi/DEPS @@ -6,6 +6,9 @@ specific_include_rules = { "+chrome/browser/ash/crosapi", "+ui/message_center/message_center.h", ], + "power_ash\.cc": [ + "+services/device/wake_lock/power_save_blocker/power_save_blocker.h", + ], "screen_manager_ash\.cc": [ # For window parenting. "+ash/shell.h", diff --git a/chrome/browser/ash/crosapi/browser_util.cc b/chrome/browser/ash/crosapi/browser_util.cc index 72b4dd290fe58c..7ed7b4ed5272b0 100644 --- a/chrome/browser/ash/crosapi/browser_util.cc +++ b/chrome/browser/ash/crosapi/browser_util.cc @@ -54,6 +54,7 @@ #include "chromeos/crosapi/mojom/local_printer.mojom.h" #include "chromeos/crosapi/mojom/message_center.mojom.h" #include "chromeos/crosapi/mojom/metrics_reporting.mojom.h" +#include "chromeos/crosapi/mojom/power.mojom.h" #include "chromeos/crosapi/mojom/prefs.mojom.h" #include "chromeos/crosapi/mojom/screen_manager.mojom.h" #include "chromeos/crosapi/mojom/system_display.mojom.h" @@ -232,6 +233,7 @@ constexpr InterfaceVersionEntry kInterfaceVersionEntries[] = { chromeos::machine_learning::mojom::MachineLearningService>(), MakeInterfaceVersionEntry(), MakeInterfaceVersionEntry(), + MakeInterfaceVersionEntry(), MakeInterfaceVersionEntry(), MakeInterfaceVersionEntry(), MakeInterfaceVersionEntry(), @@ -261,7 +263,7 @@ constexpr bool HasDuplicatedUuid() { } static_assert( - crosapi::mojom::Crosapi::Version_ == 29, + crosapi::mojom::Crosapi::Version_ == 30, "if you add a new crosapi, please add it to kInterfaceVersionEntries"); static_assert(!HasDuplicatedUuid(), "Each Crosapi Mojom interface should have unique UUID."); diff --git a/chrome/browser/ash/crosapi/crosapi_ash.cc b/chrome/browser/ash/crosapi/crosapi_ash.cc index 68c8843756c9fb..cee01cd1650366 100644 --- a/chrome/browser/ash/crosapi/crosapi_ash.cc +++ b/chrome/browser/ash/crosapi/crosapi_ash.cc @@ -31,6 +31,7 @@ #include "chrome/browser/ash/crosapi/local_printer_ash.h" #include "chrome/browser/ash/crosapi/message_center_ash.h" #include "chrome/browser/ash/crosapi/metrics_reporting_ash.h" +#include "chrome/browser/ash/crosapi/power_ash.h" #include "chrome/browser/ash/crosapi/prefs_ash.h" #include "chrome/browser/ash/crosapi/screen_manager_ash.h" #include "chrome/browser/ash/crosapi/select_file_ash.h" @@ -103,6 +104,7 @@ CrosapiAsh::CrosapiAsh() message_center_ash_(std::make_unique()), metrics_reporting_ash_(std::make_unique( g_browser_process->local_state())), + power_ash_(std::make_unique()), prefs_ash_( std::make_unique(g_browser_process->profile_manager(), g_browser_process->local_state())), @@ -293,6 +295,10 @@ void CrosapiAsh::BindSensorHalClient( std::move(remote)); } +void CrosapiAsh::BindPower(mojo::PendingReceiver receiver) { + power_ash_->BindReceiver(std::move(receiver)); +} + void CrosapiAsh::BindPrefs(mojo::PendingReceiver receiver) { prefs_ash_->BindReceiver(std::move(receiver)); } diff --git a/chrome/browser/ash/crosapi/crosapi_ash.h b/chrome/browser/ash/crosapi/crosapi_ash.h index 2b29d8dc473033..bbf7af537de15c 100644 --- a/chrome/browser/ash/crosapi/crosapi_ash.h +++ b/chrome/browser/ash/crosapi/crosapi_ash.h @@ -34,6 +34,7 @@ class KeystoreServiceAsh; class LocalPrinterAsh; class MessageCenterAsh; class MetricsReportingAsh; +class PowerAsh; class PrefsAsh; class ScreenManagerAsh; class SelectFileAsh; @@ -92,6 +93,7 @@ class CrosapiAsh : public mojom::Crosapi { mojo::PendingReceiver receiver) override; void BindMetricsReporting( mojo::PendingReceiver receiver) override; + void BindPower(mojo::PendingReceiver receiver) override; void BindPrefs(mojo::PendingReceiver receiver) override; void BindScreenManager( mojo::PendingReceiver receiver) override; @@ -167,6 +169,7 @@ class CrosapiAsh : public mojom::Crosapi { std::unique_ptr local_printer_ash_; std::unique_ptr message_center_ash_; std::unique_ptr metrics_reporting_ash_; + std::unique_ptr power_ash_; std::unique_ptr prefs_ash_; std::unique_ptr screen_manager_ash_; std::unique_ptr select_file_ash_; diff --git a/chrome/browser/ash/crosapi/power_ash.cc b/chrome/browser/ash/crosapi/power_ash.cc new file mode 100644 index 00000000000000..263f81d0aa0923 --- /dev/null +++ b/chrome/browser/ash/crosapi/power_ash.cc @@ -0,0 +1,45 @@ +// 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/ash/crosapi/power_ash.h" + +#include + +#include "base/bind.h" +#include "base/sequenced_task_runner.h" +#include "base/single_thread_task_runner.h" +#include "base/task/thread_pool.h" +#include "services/device/wake_lock/power_save_blocker/power_save_blocker.h" + +namespace crosapi { + +PowerAsh::PowerAsh() + : main_task_runner_(base::ThreadTaskRunnerHandle::Get()), + file_task_runner_(base::ThreadPool::CreateSingleThreadTaskRunner( + {base::MayBlock(), base::TaskPriority::BEST_EFFORT})) { + lock_set_.set_disconnect_handler(base::BindRepeating( + &PowerAsh::OnLockDisconnect, weak_ptr_factory_.GetWeakPtr())); +} + +PowerAsh::~PowerAsh() = default; + +void PowerAsh::BindReceiver(mojo::PendingReceiver receiver) { + receivers_.Add(this, std::move(receiver)); +} + +void PowerAsh::AddPowerSaveBlocker( + mojo::PendingRemote lock, + device::mojom::WakeLockType type, + device::mojom::WakeLockReason reason, + const std::string& description) { + mojo::RemoteSetElementId id = lock_set_.Add(std::move(lock)); + power_save_blockers_[id] = std::make_unique( + type, reason, description, main_task_runner_, file_task_runner_); +} + +void PowerAsh::OnLockDisconnect(mojo::RemoteSetElementId id) { + power_save_blockers_.erase(id); +} + +} // namespace crosapi diff --git a/chrome/browser/ash/crosapi/power_ash.h b/chrome/browser/ash/crosapi/power_ash.h new file mode 100644 index 00000000000000..6090be6f08b680 --- /dev/null +++ b/chrome/browser/ash/crosapi/power_ash.h @@ -0,0 +1,74 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_ASH_CROSAPI_POWER_ASH_H_ +#define CHROME_BROWSER_ASH_CROSAPI_POWER_ASH_H_ + +#include + +#include +#include +#include + +#include "base/memory/weak_ptr.h" +#include "chromeos/crosapi/mojom/power.mojom.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver_set.h" +#include "mojo/public/cpp/bindings/remote_set.h" +#include "services/device/public/mojom/wake_lock.mojom.h" + +namespace base { +class SequencedTaskRunner; +class SingleThreadTaskRunner; +} // namespace base + +namespace device { +class PowerSaveBlocker; +} // namespace device + +namespace crosapi { + +// The ash-chrome implementation of the Power crosapi interface. +class PowerAsh : public mojom::Power { + public: + PowerAsh(); + PowerAsh(const PowerAsh&) = delete; + PowerAsh& operator=(const PowerAsh&) = delete; + ~PowerAsh() override; + + void BindReceiver(mojo::PendingReceiver receiver); + + // crosapi::mojom::Power: + void AddPowerSaveBlocker(mojo::PendingRemote lock, + device::mojom::WakeLockType type, + device::mojom::WakeLockReason reason, + const std::string& description) override; + + private: + // Handlers for disconnection of |lock| from AddPowerSaveBlocker(), + void OnLockDisconnect(mojo::RemoteSetElementId id); + + // Support any number of connections. + mojo::ReceiverSet receivers_; + + // Keeps track of |lock| passed by AddPowerSaveBlocker(), allowing + // disconnection to be detected. + mojo::RemoteSet lock_set_; + + // Storage of device::PowerSaveBlocker instances, keyed by + // mojo::RemoteSetElementId in |lock_set_|. + std::map> + power_save_blockers_; + + // Task runners needed by device::PowerSaveBlocker. + scoped_refptr main_task_runner_; + scoped_refptr file_task_runner_; + + base::WeakPtrFactory weak_ptr_factory_{this}; +}; + +} // namespace crosapi + +#endif // CHROME_BROWSER_ASH_CROSAPI_POWER_ASH_H_ diff --git a/chrome/browser/ash/login/app_mode/kiosk_browsertest.cc b/chrome/browser/ash/login/app_mode/kiosk_browsertest.cc index e01015a8b41c75..180473c0f03c5f 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 @@ class AppDataLoadWaiter : public KioskAppManagerObserver { // Replaces settings urls for KioskSettingsNavigationThrottle. class ScopedSettingsPages { public: - ScopedSettingsPages( + explicit ScopedSettingsPages( std::vector* 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 bc73248b7ad7bc..beccfff14f1c22 100644 --- a/chrome/browser/ash/login/marketing_backend_connector.h +++ b/chrome/browser/ash/login/marketing_backend_connector.h @@ -95,7 +95,7 @@ class MarketingBackendConnector // Scoped callback setter for the MarketingBackendConnector class ScopedRequestCallbackSetter { public: - ScopedRequestCallbackSetter( + explicit ScopedRequestCallbackSetter( std::unique_ptr> 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 be81a880f31d79..77ebb270359b84 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 NativeWindowVisibilityObserver : public aura::WindowObserver { 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 85d93966748c6f..b2731e85af1c56 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 @@ class InSessionPasswordSyncManagerTest : public testing::Test { std::unique_ptr lock_handler_; std::unique_ptr manager_; base::test::ScopedFeatureList feature_list_; + std::unique_ptr known_user_; }; InSessionPasswordSyncManagerTest::InSessionPasswordSyncManagerTest() @@ -103,6 +104,8 @@ InSessionPasswordSyncManagerTest::InSessionPasswordSyncManagerTest() user_manager_ = static_cast(user_manager::UserManager::Get()); + known_user_ = + std::make_unique(user_manager_->GetLocalState()); } InSessionPasswordSyncManagerTest::~InSessionPasswordSyncManagerTest() { @@ -235,9 +238,9 @@ TEST_F(InSessionPasswordSyncManagerTest, AuthenticateWithIncorrectUser) { 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 @@ TEST_F(InSessionPasswordSyncManagerTest, AuthenticateWithCorrectUser) { 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 @@ TEST_F(InSessionPasswordSyncManagerTest, AuthenticateTokenNotInitialized) { 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 1b906900aed374..4874cc4096b87a 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 @@ class PasswordSyncTokenVerifierTest : public testing::Test { FakeChromeUserManager* user_manager_ = nullptr; std::unique_ptr scoped_user_manager_; std::unique_ptr verifier_; + std::unique_ptr known_user_; }; PasswordSyncTokenVerifierTest::PasswordSyncTokenVerifierTest() { @@ -87,6 +88,8 @@ PasswordSyncTokenVerifierTest::PasswordSyncTokenVerifierTest() { user_manager_ = static_cast(user_manager::UserManager::Get()); + known_user_ = + std::make_unique(user_manager_->GetLocalState()); } PasswordSyncTokenVerifierTest::~PasswordSyncTokenVerifierTest() { @@ -132,8 +135,7 @@ TEST_F(PasswordSyncTokenVerifierTest, EmptySyncToken) { } 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, SyncTokenValidationPassed) { } 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, SyncTokenValidationFailed) { } 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, SyncTokenValidationAfterDelay) { } 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, SyncTokenNoRecheckExecuted) { 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 @@ TEST_F(PasswordSyncTokenVerifierTest, SyncTokenNotSet) { 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 @@ TEST_F(PasswordSyncTokenVerifierTest, InitialSyncTokenListEmpty) { 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 @@ TEST_F(PasswordSyncTokenVerifierTest, SyncTokenInitForUser) { // 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 e5d75ebcf569ab..4bec55b82910fe 100644 --- a/chrome/browser/ash/login/saml/saml_browsertest.cc +++ b/chrome/browser/ash/login/saml/saml_browsertest.cc @@ -459,10 +459,11 @@ IN_PROC_BROWSER_TEST_F(SamlTest, CredentialPassingAPI) { 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 @@ IN_PROC_BROWSER_TEST_F(SamlTest, CredentialPassingAPIWithoutConfirm) { 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 @@ IN_PROC_BROWSER_TEST_F(SamlTest, ScrapedSingle) { 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 @@ IN_PROC_BROWSER_TEST_F(SamlTest, ScrapedDynamic) { 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 @@ IN_PROC_BROWSER_TEST_F(SamlTest, ScrapedMultiple) { 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 @@ IN_PROC_BROWSER_TEST_F(SamlTest, ScrapedNone) { 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/chromeos/exo/chrome_data_exchange_delegate.cc b/chrome/browser/chromeos/exo/chrome_data_exchange_delegate.cc index c209b94fcba1fd..ea10e4db4dffb4 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 kUriListSeparator[] = "\r\n"; 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 @@ void ChromeDataExchangeDelegate::SendPickle(ui::EndpointType target, base::BindOnce(&SendAfterShare, target, std::move(callback))); } -base::Pickle ChromeDataExchangeDelegate::CreateClipboardFilenamesPickle( - ui::EndpointType source, - const std::vector& data) const { - std::vector filenames; - std::vector 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( - {{kFilesAppMimeTag, kFilesAppTagExo}, - {kFilesAppMimeSources, base::UTF8ToUTF16(base::JoinString( - filenames, kFilesAppSeparator))}}), - &pickle); - return pickle; -} - std::vector 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 8c320f94e53642..44dbf68a932c1a 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 @@ class ChromeDataExchangeDelegate : public exo::DataExchangeDelegate { void SendPickle(ui::EndpointType target, const base::Pickle& pickle, SendDataCallback callback) override; - base::Pickle CreateClipboardFilenamesPickle( - ui::EndpointType source, - const std::vector& data) const override; std::vector 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 8e910ab828d8e4..58a30542491d3e 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 @@ TEST_F(ChromeDataExchangeDelegateTest, ParseFileSystemSources) { 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 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( + {{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/platform_keys/platform_keys.cc b/chrome/browser/chromeos/platform_keys/platform_keys.cc index 10d9b0319f735a..709e6609f49122 100644 --- a/chrome/browser/chromeos/platform_keys/platform_keys.cc +++ b/chrome/browser/chromeos/platform_keys/platform_keys.cc @@ -257,46 +257,57 @@ GetPublicKeyAndAlgorithmOutput GetPublicKeyAndAlgorithm( return output; } - // Currently, the only supported combinations are: - // 1- A certificate declaring rsaEncryption in the SubjectPublicKeyInfo used - // with the RSASSA-PKCS1-v1.5 algorithm. - // 2- A certificate declaring id-ecPublicKey in the SubjectPublicKeyInfo used - // with the ECDSA algorithm. - if (algorithm_name == kWebCryptoRsassaPkcs1v15) { - if (key_info.key_type != net::X509Certificate::kPublicKeyTypeRSA) { - output.status = Status::kErrorAlgorithmNotPermittedByCertificate; - return output; - } - - BuildWebCryptoRSAAlgorithmDictionary(key_info, &output.algorithm); - output.public_key = - std::vector(key_info.public_key_spki_der.begin(), - key_info.public_key_spki_der.end()); - output.status = Status::kSuccess; + if (GetKeyTypeForAlgorithm(algorithm_name) != key_info.key_type) { + output.status = Status::kErrorAlgorithmNotPermittedByCertificate; return output; } - if (algorithm_name == kWebCryptoEcdsa) { - if (key_info.key_type != net::X509Certificate::kPublicKeyTypeECDSA) { - output.status = Status::kErrorAlgorithmNotPermittedByCertificate; - return output; - } - - BuildWebCryptoEcdsaAlgorithmDictionary(key_info, &output.algorithm); - output.public_key = - std::vector(key_info.public_key_spki_der.begin(), - key_info.public_key_spki_der.end()); - output.status = Status::kSuccess; - return output; - } + absl::optional algorithm = + BuildWebCrypAlgorithmDictionary(key_info); + DCHECK(algorithm.has_value()); + output.algorithm = std::move(algorithm.value()); - output.status = Status::kErrorAlgorithmNotPermittedByCertificate; + output.public_key = std::vector(key_info.public_key_spki_der.begin(), + key_info.public_key_spki_der.end()); + output.status = Status::kSuccess; return output; } PublicKeyInfo::PublicKeyInfo() = default; PublicKeyInfo::~PublicKeyInfo() = default; +net::X509Certificate::PublicKeyType GetKeyTypeForAlgorithm( + const std::string& algorithm_name) { + // Currently, the only supported combinations are: + // 1- A certificate declaring rsaEncryption in the SubjectPublicKeyInfo used + // with the RSASSA-PKCS1-v1.5 algorithm. + // 2- A certificate declaring id-ecPublicKey in the SubjectPublicKeyInfo used + // with the ECDSA algorithm. + if (algorithm_name == kWebCryptoRsassaPkcs1v15) + return net::X509Certificate::kPublicKeyTypeRSA; + if (algorithm_name == kWebCryptoEcdsa) + return net::X509Certificate::kPublicKeyTypeECDSA; + return net::X509Certificate::kPublicKeyTypeUnknown; +} + +absl::optional BuildWebCrypAlgorithmDictionary( + const PublicKeyInfo& key_info) { + switch (key_info.key_type) { + case net::X509Certificate::kPublicKeyTypeRSA: { + base::DictionaryValue result; + BuildWebCryptoRSAAlgorithmDictionary(key_info, &result); + return result; + } + case net::X509Certificate::kPublicKeyTypeECDSA: { + base::DictionaryValue result; + BuildWebCryptoEcdsaAlgorithmDictionary(key_info, &result); + return result; + } + default: + return absl::nullopt; + } +} + void BuildWebCryptoRSAAlgorithmDictionary(const PublicKeyInfo& key_info, base::DictionaryValue* algorithm) { CHECK_EQ(net::X509Certificate::kPublicKeyTypeRSA, key_info.key_type); diff --git a/chrome/browser/chromeos/platform_keys/platform_keys.h b/chrome/browser/chromeos/platform_keys/platform_keys.h index 23dc64de760e8c..1ddc3412684e40 100644 --- a/chrome/browser/chromeos/platform_keys/platform_keys.h +++ b/chrome/browser/chromeos/platform_keys/platform_keys.h @@ -15,6 +15,7 @@ #include "base/values.h" #include "chromeos/crosapi/mojom/keystore_error.mojom.h" #include "net/cert/x509_certificate.h" +#include "third_party/abseil-cpp/absl/types/optional.h" namespace chromeos { namespace platform_keys { @@ -126,6 +127,18 @@ struct PublicKeyInfo { size_t key_size_bits = 0; }; +// Returns the certificate key type that supports the given algorithm, +// or |kPublicKeyTypeUnknown| if the algorithm is unknown or unsupported. +net::X509Certificate::PublicKeyType GetKeyTypeForAlgorithm( + const std::string& algorithm_name); + +// Builds a partial WebCrypto Algorithm object from the parameters available in +// |key_info|. This supports both RSA and EC keys. +// Returns absl::nullopt if the key is of an unsupported type (so not RSA or +// EC). +absl::optional BuildWebCrypAlgorithmDictionary( + const PublicKeyInfo& key_info); + // Builds a partial WebCrypto Algorithm object from the parameters available in // |key_info|, which must be the info of an RSA key. This doesn't include // sign/hash parameters and thus isn't complete. platform_keys::GetPublicKey() diff --git a/chrome/browser/chromeos/platform_keys/platform_keys_service_nss.cc b/chrome/browser/chromeos/platform_keys/platform_keys_service_nss.cc index 80c4c86b17d15c..ff4494c825c596 100644 --- a/chrome/browser/chromeos/platform_keys/platform_keys_service_nss.cc +++ b/chrome/browser/chromeos/platform_keys/platform_keys_service_nss.cc @@ -82,8 +82,7 @@ using ServiceWeakPtr = base::WeakPtr; class NSSOperationState { public: explicit NSSOperationState(ServiceWeakPtr weak_ptr) - : service_weak_ptr_(weak_ptr), - origin_task_runner_(base::ThreadTaskRunnerHandle::Get()) {} + : service_weak_ptr_(weak_ptr) {} virtual ~NSSOperationState() = default; @@ -102,9 +101,6 @@ class NSSOperationState { // Weak pointer to the PlatformKeysServiceImpl that created this state. Used // to check if the callback should be still called. ServiceWeakPtr service_weak_ptr_; - // The task runner on which the NSS operation was called. Any reply must be - // posted to this runner. - scoped_refptr origin_task_runner_; private: DISALLOW_COPY_AND_ASSIGN(NSSOperationState); @@ -192,7 +188,7 @@ class GenerateRSAKeyState : public NSSOperationState { status == Status::kSuccess); auto bound_callback = base::BindOnce(std::move(callback_), public_key_spki_der, status); - origin_task_runner_->PostTask( + content::GetUIThreadTaskRunner({})->PostTask( from, base::BindOnce(&NSSOperationState::RunCallback, std::move(bound_callback), service_weak_ptr_)); } @@ -231,7 +227,7 @@ class GenerateECKeyState : public NSSOperationState { status == Status::kSuccess); auto bound_callback = base::BindOnce(std::move(callback_), public_key_spki_der, status); - origin_task_runner_->PostTask( + content::GetUIThreadTaskRunner({})->PostTask( from, base::BindOnce(&NSSOperationState::RunCallback, std::move(bound_callback), service_weak_ptr_)); } @@ -287,7 +283,7 @@ class SignState : public NSSOperationState { EmitOperationStatusToHistogram(status == Status::kSuccess); auto bound_callback = base::BindOnce(std::move(callback_), signature, status); - origin_task_runner_->PostTask( + content::GetUIThreadTaskRunner({})->PostTask( from, base::BindOnce(&NSSOperationState::RunCallback, std::move(bound_callback), service_weak_ptr_)); } @@ -340,7 +336,7 @@ class SelectCertificatesState : public NSSOperationState { Status status) { auto bound_callback = base::BindOnce(std::move(callback_), std::move(matches), status); - origin_task_runner_->PostTask( + content::GetUIThreadTaskRunner({})->PostTask( from, base::BindOnce(&NSSOperationState::RunCallback, std::move(bound_callback), service_weak_ptr_)); } @@ -376,7 +372,7 @@ class GetCertificatesState : public NSSOperationState { Status status) { auto bound_callback = base::BindOnce(std::move(callback_), std::move(certs), status); - origin_task_runner_->PostTask( + content::GetUIThreadTaskRunner({})->PostTask( from, base::BindOnce(&NSSOperationState::RunCallback, std::move(bound_callback), service_weak_ptr_)); } @@ -408,7 +404,7 @@ class GetAllKeysState : public NSSOperationState { Status status) { auto bound_callback = base::BindOnce( std::move(callback_), std::move(public_key_spki_der_list), status); - origin_task_runner_->PostTask( + content::GetUIThreadTaskRunner({})->PostTask( from, base::BindOnce(&NSSOperationState::RunCallback, std::move(bound_callback), service_weak_ptr_)); } @@ -441,7 +437,7 @@ class ImportCertificateState : public NSSOperationState { private: void CallBack(const base::Location& from, Status status) { auto bound_callback = base::BindOnce(std::move(callback_), status); - origin_task_runner_->PostTask( + content::GetUIThreadTaskRunner({})->PostTask( from, base::BindOnce(&NSSOperationState::RunCallback, std::move(bound_callback), service_weak_ptr_)); } @@ -474,7 +470,7 @@ class RemoveCertificateState : public NSSOperationState { private: void CallBack(const base::Location& from, Status status) { auto bound_callback = base::BindOnce(std::move(callback_), status); - origin_task_runner_->PostTask( + content::GetUIThreadTaskRunner({})->PostTask( from, base::BindOnce(&NSSOperationState::RunCallback, std::move(bound_callback), service_weak_ptr_)); } @@ -508,7 +504,7 @@ class RemoveKeyState : public NSSOperationState { private: void CallBack(const base::Location& from, Status status) { auto bound_callback = base::BindOnce(std::move(callback_), status); - origin_task_runner_->PostTask( + content::GetUIThreadTaskRunner({})->PostTask( from, base::BindOnce(&NSSOperationState::RunCallback, std::move(bound_callback), service_weak_ptr_)); } @@ -540,7 +536,7 @@ class GetTokensState : public NSSOperationState { Status status) { auto bound_callback = base::BindOnce(std::move(callback_), std::move(token_ids), status); - origin_task_runner_->PostTask( + content::GetUIThreadTaskRunner({})->PostTask( from, base::BindOnce(&NSSOperationState::RunCallback, std::move(bound_callback), service_weak_ptr_)); } @@ -578,7 +574,7 @@ class GetKeyLocationsState : public NSSOperationState { Status status) { auto bound_callback = base::BindOnce(std::move(callback_), token_ids, status); - origin_task_runner_->PostTask( + content::GetUIThreadTaskRunner({})->PostTask( from, base::BindOnce(&NSSOperationState::RunCallback, std::move(bound_callback), service_weak_ptr_)); } @@ -618,7 +614,7 @@ class SetAttributeForKeyState : public NSSOperationState { private: void CallBack(const base::Location& from, Status status) { auto bound_callback = base::BindOnce(std::move(callback_), status); - origin_task_runner_->PostTask( + content::GetUIThreadTaskRunner({})->PostTask( from, base::BindOnce(&NSSOperationState::RunCallback, std::move(bound_callback), service_weak_ptr_)); } @@ -659,7 +655,7 @@ class GetAttributeForKeyState : public NSSOperationState { Status status) { auto bound_callback = base::BindOnce(std::move(callback_), attribute_value, status); - origin_task_runner_->PostTask( + content::GetUIThreadTaskRunner({})->PostTask( from, base::BindOnce(&NSSOperationState::RunCallback, std::move(bound_callback), service_weak_ptr_)); } @@ -696,7 +692,7 @@ class IsKeyOnTokenState : public NSSOperationState { Status status) { auto bound_callback = base::BindOnce(std::move(callback_), on_token, status); - origin_task_runner_->PostTask( + content::GetUIThreadTaskRunner({})->PostTask( from, base::BindOnce(&NSSOperationState::RunCallback, std::move(bound_callback), service_weak_ptr_)); } diff --git a/chrome/browser/extensions/api/platform_keys/platform_keys_api_ash.cc b/chrome/browser/extensions/api/platform_keys/platform_keys_api_ash.cc index 1735e1355dac23..00870460539d92 100644 --- a/chrome/browser/extensions/api/platform_keys/platform_keys_api_ash.cc +++ b/chrome/browser/extensions/api/platform_keys/platform_keys_api_ash.cc @@ -264,20 +264,15 @@ void PlatformKeysInternalSelectClientCertificatesFunction:: result_match.certificate.assign(der_encoded_cert.begin(), der_encoded_cert.end()); - switch (key_info.key_type) { - case net::X509Certificate::kPublicKeyTypeRSA: - chromeos::platform_keys::BuildWebCryptoRSAAlgorithmDictionary( - key_info, &result_match.key_algorithm.additional_properties); - break; - case net::X509Certificate::kPublicKeyTypeECDSA: - chromeos::platform_keys::BuildWebCryptoEcdsaAlgorithmDictionary( - key_info, &result_match.key_algorithm.additional_properties); - break; - default: - LOG(ERROR) << "Skipping unsupported certificate with key type " - << key_info.key_type; - continue; + absl::optional algorithm = + BuildWebCrypAlgorithmDictionary(key_info); + if (!algorithm) { + LOG(ERROR) << "Skipping unsupported certificate with key type " + << key_info.key_type; + continue; } + result_match.key_algorithm.additional_properties = + std::move(algorithm.value()); result_matches.push_back(std::move(result_match)); } diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 2601a2bfb01ef4..2f18f7e98ddc9d 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json @@ -601,11 +601,6 @@ ], "expiry_milestone": 92 }, - { - "name": "clipboard-filenames", - "owners": [ "joelhockey" ], - "expiry_milestone": 96 - }, { "name": "collections-card-presentation-style", "owners": [ "sczs", "bling-flags@google.com" ], diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index fd13fbc1ed240e..e7cf099cc67ea5 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc @@ -432,10 +432,6 @@ const char kClientStorageAccessContextAuditingName[] = 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"; diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index fb8b879deb3f18..6048eec0002ee1 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h @@ -254,9 +254,6 @@ extern const char kClickToOpenPDFDescription[]; 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 fd9a3488da45d9..00000000000000 --- 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 f301975f4c3270..00000000000000 --- 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/media/webrtc/capture_handle_browsertest.cc b/chrome/browser/media/webrtc/capture_handle_browsertest.cc new file mode 100644 index 00000000000000..0cd998c922d9fd --- /dev/null +++ b/chrome/browser/media/webrtc/capture_handle_browsertest.cc @@ -0,0 +1,561 @@ +// 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 +#include + +#include "base/files/file_path.h" +#include "base/path_service.h" +#include "base/strings/strcat.h" +#include "base/strings/stringprintf.h" +#include "build/buildflag.h" +#include "chrome/browser/media/webrtc/webrtc_browsertest_base.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_tabstrip.h" +#include "chrome/common/chrome_paths.h" +#include "chrome/common/chrome_switches.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/base/ui_test_utils.h" +#include "components/permissions/permission_request_manager.h" +#include "content/public/browser/web_contents.h" +#include "content/public/common/content_switches.h" +#include "content/public/test/browser_test.h" +#include "content/public/test/browser_test_base.h" +#include "content/public/test/browser_test_utils.h" + +// TODO(crbug.com/1215089): Enable this test suite on Lacros. +#if !BUILDFLAG(IS_CHROMEOS_LACROS) + +using content::WebContents; + +namespace { + +// The captured tab is identified by its title. +const char kCapturedTabTitle[] = "totally-unique-captured-page-title"; + +// Capturing page. +const char kCapturingPageMain[] = "/webrtc/capturing_page_main.html"; +// Captured page. +const char kCapturedPageMain[] = "/webrtc/captured_page_main.html"; +// Similar contents to kCapturedPageMain, but on a different page, which can +// be served same-origin or cross-origin. +const char kCapturedPageOther[] = "/webrtc/captured_page_other.html"; + +const char* kArbitraryOrigin = "https://arbitrary-origin.com"; +const char* kNoCaptureHandle = "no-capture-handle"; + +std::string StringifyPermittedOrigins( + const std::vector& permitted_origins) { + if (permitted_origins.empty()) { + return "[]"; + } + return base::StrCat( + {"[\"", base::JoinString(permitted_origins, "\", \""), "\"]"}); +} + +std::string StringifyCaptureHandle(WebContents* web_contents, + bool expose_origin, + const std::string& handle) { + if (!expose_origin && handle.empty()) { + return ""; + } + + std::string origin_str; + if (expose_origin) { + const auto origin = + url::Origin::Create(web_contents->GetLastCommittedURL()); + origin_str = + base::StringPrintf(",\"origin\":\"%s\"", origin.Serialize().c_str()); + } + + return base::StringPrintf("{\"handle\":\"%s\"%s}", handle.c_str(), + origin_str.c_str()); +} + +// Conveniently pack together a captured tab and the capture-handle that +// is expected to be observed by capturers from a permitted origin. +struct TabInfo { + void StartCapturing() { + std::string script_result; + EXPECT_TRUE(content::ExecuteScriptAndExtractString( + web_contents->GetMainFrame(), "captureOtherTab();", &script_result)); + EXPECT_EQ(script_result, "capture-success"); + } + + url::Origin GetOrigin() const { + return url::Origin::Create(web_contents->GetLastCommittedURL()); + } + + std::string GetOriginAsString() const { return GetOrigin().Serialize(); } + + void SetCaptureHandleConfig( + bool expose_origin, + const std::string& handle, + const std::vector& permitted_origins) { + std::string script_result; + EXPECT_TRUE(content::ExecuteScriptAndExtractString( + web_contents->GetMainFrame(), + base::StringPrintf( + "callSetCaptureHandleConfig(%s, \"%s\", %s);", + expose_origin ? "true" : "false", handle.c_str(), + StringifyPermittedOrigins(permitted_origins).c_str()), + &script_result)); + EXPECT_EQ(script_result, "capture-handle-set"); + + capture_handle = + StringifyCaptureHandle(web_contents, expose_origin, handle); + } + + std::string ReadCaptureHandleFromSettings() { + std::string script_result; + EXPECT_TRUE(content::ExecuteScriptAndExtractString( + web_contents->GetMainFrame(), "readCaptureHandleFromSettings();", + &script_result)); + return script_result; + } + + void Navigate(Browser* browser, GURL url, bool expect_handle_reset = false) { + std::string script_result; + ASSERT_TRUE(content::ExecuteScriptAndExtractString( + web_contents->GetMainFrame(), + base::StringPrintf("clickLinkToUrl(\"%s\");", url.spec().c_str()), + &script_result)); + ASSERT_EQ(script_result, "link-success"); + + if (expect_handle_reset) { + capture_handle = ""; + } + } + + std::string LastEvent() { + std::string script_result = "error-not-modified"; + EXPECT_TRUE(content::ExecuteScriptAndExtractString( + web_contents->GetMainFrame(), "readLastEvent();", &script_result)); + return script_result; + } + + WebContents* web_contents; + std::string capture_handle; // Expected value for those who may observe. +}; + +TabInfo MakeTabInfo(WebContents* web_contents, + bool expose_origin, + const std::string& handle) { + return TabInfo{web_contents, + StringifyCaptureHandle(web_contents, expose_origin, handle)}; +} + +} // namespace + +// Essentially depends on InProcessBrowserTest, but WebRtcTestBase provides +// detection of JS errors. +class CaptureHandleBrowserTest : public WebRtcTestBase { + public: + void SetUpInProcessBrowserTestFixture() override { + WebRtcTestBase::SetUpInProcessBrowserTestFixture(); + + DetectErrorsInJavaScript(); + + base::FilePath test_dir; + ASSERT_TRUE(base::PathService::Get(chrome::DIR_TEST_DATA, &test_dir)); + + for (size_t i = 0; i < 3; ++i) { + servers_.emplace_back(std::make_unique()); + servers_[i]->ServeFilesFromDirectory(test_dir); + ASSERT_TRUE(servers_[i]->Start()); + } + } + + void SetUpCommandLine(base::CommandLine* command_line) override { + command_line->AppendSwitch( + switches::kEnableExperimentalWebPlatformFeatures); + command_line->AppendSwitchASCII( + switches::kAutoSelectTabCaptureSourceByTitle, kCapturedTabTitle); + } + + void TearDownOnMainThread() override { + for (auto& server : servers_) { + if (server) { + ASSERT_TRUE(server->ShutdownAndWaitUntilComplete()); + } + } + + WebRtcTestBase::TearDownOnMainThread(); + } + + // Same as WebRtcTestBase::OpenTestPageInNewTab, but does not assume + // a single embedded server is used for all pages. + WebContents* OpenTestPageInNewTab(const std::string& test_page, + net::EmbeddedTestServer* server) const { + chrome::AddTabAt(browser(), GURL(url::kAboutBlankURL), -1, true); + GURL url = server->GetURL(test_page); + ui_test_utils::NavigateToURL(browser(), url); + WebContents* new_tab = browser()->tab_strip_model()->GetActiveWebContents(); + permissions::PermissionRequestManager::FromWebContents(new_tab) + ->set_auto_response_for_test( + permissions::PermissionRequestManager::ACCEPT_ALL); + return new_tab; + } + + TabInfo SetUpCapturingPage(bool start_capturing) { + auto* const web_contents = OpenTestPageInNewTab( + kCapturingPageMain, servers_[kCapturingServer].get()); + + auto result = MakeTabInfo(web_contents, true, "capturing_page"); + if (start_capturing) { + result.StartCapturing(); + } + + event_sinks_.push_back(web_contents); + + return result; + } + + TabInfo SetUpCapturedPage(bool expose_origin, + const std::string& handle, + const std::vector& permitted_origins, + bool self_capture = false) { + // Normally, the captured page has its own server (=origin) and own file. + // But if self-capture is tested, use the origin and page of the capturer. + const char* page = self_capture ? kCapturingPageMain : kCapturedPageMain; + const int server_index = self_capture ? kCapturingServer : kCapturedServer; + + auto* const web_contents = + OpenTestPageInNewTab(page, servers_[server_index].get()); + + // The target for getDisplayMedia is determined via the title. If we want + // the capturing page to capture itself, then it has to change its title. + if (self_capture) { + std::string script_result; + EXPECT_TRUE(content::ExecuteScriptAndExtractString( + web_contents->GetMainFrame(), + base::StringPrintf("setTitle(\"%s\");", kCapturedTabTitle), + &script_result)); + EXPECT_EQ(script_result, "title-changed"); + } + + auto tab_info = MakeTabInfo(web_contents, expose_origin, handle); + + tab_info.SetCaptureHandleConfig(expose_origin, handle, permitted_origins); + + return tab_info; + } + + static constexpr size_t kCapturedServer = 0; + static constexpr size_t kCapturingServer = 1; + static constexpr size_t kOtherCapturedServer = 2; + + // Checked for no unconsumed events. + std::vector event_sinks_; + + // Three servers to create three origins (different ports). One server for the + // captured page, one for the top-level capturer and one for the embedded + // capturer. Some tests will use one server for multiple pages so as to + // make them same-origin. + std::vector> servers_; +}; + +IN_PROC_BROWSER_TEST_F(CaptureHandleBrowserTest, + HandleAndOriginExposedIfAllPermitted) { + TabInfo captured_tab = + SetUpCapturedPage(/*expose_origin=*/true, "handle", {"*"}); + + TabInfo capturing_tab = SetUpCapturingPage(/*start_capturing=*/true); + + // The capture handle set by the captured tab is observable by the capturer. + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), + captured_tab.capture_handle); +} + +IN_PROC_BROWSER_TEST_F(CaptureHandleBrowserTest, + HandleAndOriginExposedIfCapturerOriginPermitted) { + TabInfo capturing_tab = SetUpCapturingPage(/*start_capturing=*/false); + + TabInfo captured_tab = SetUpCapturedPage(/*expose_origin=*/true, "handle", + {capturing_tab.GetOriginAsString()}); + + capturing_tab.StartCapturing(); + + // The capture handle set by the captured tab is observable by the capturer. + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), + captured_tab.capture_handle); +} + +IN_PROC_BROWSER_TEST_F(CaptureHandleBrowserTest, + HandleAndOriginNotExposedIfCapturerOriginNotPermitted) { + TabInfo capturing_tab = SetUpCapturingPage(/*start_capturing=*/false); + + TabInfo captured_tab = + SetUpCapturedPage(/*expose_origin=*/true, "handle", {kArbitraryOrigin}); + + capturing_tab.StartCapturing(); + + // The capture handle isn't observable by the capturer. + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), kNoCaptureHandle); +} + +IN_PROC_BROWSER_TEST_F(CaptureHandleBrowserTest, CanExposeOnlyHandle) { + TabInfo captured_tab = + SetUpCapturedPage(/*expose_origin=*/false, "handle", {"*"}); + ASSERT_EQ(captured_tab.capture_handle.find("origin"), std::string::npos); + + TabInfo capturing_tab = SetUpCapturingPage(/*start_capturing=*/true); + + // The capture handle set by the captured tab is observable by the capturer. + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), + captured_tab.capture_handle); +} + +IN_PROC_BROWSER_TEST_F(CaptureHandleBrowserTest, + CanExposeEmptyHandleIfExposingOrigin) { + TabInfo captured_tab = + SetUpCapturedPage(/*expose_origin=*/true, /*handle=*/"", {"*"}); + // Still expecting "handle: \"\"" in there. + ASSERT_NE(captured_tab.capture_handle.find("handle"), std::string::npos); + + TabInfo capturing_tab = SetUpCapturingPage(/*start_capturing=*/true); + + // The capture handle set by the captured tab is observable by the capturer. + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), + captured_tab.capture_handle); +} + +IN_PROC_BROWSER_TEST_F(CaptureHandleBrowserTest, + EmptyCaptureHandleConfigMeansCaptureHandleNotExposed) { + // Note - even if we set permitted origins, the empty config is empty. + TabInfo captured_tab = + SetUpCapturedPage(/*expose_origin=*/false, /*handle=*/"", {"*"}); + // Not expecting "handle: \"\"" in there, nor "origin:..." + ASSERT_EQ(captured_tab.capture_handle, ""); + + TabInfo capturing_tab = SetUpCapturingPage(/*start_capturing=*/true); + + // The capture handle isn't observable by the capturer. + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), kNoCaptureHandle); +} + +IN_PROC_BROWSER_TEST_F( + CaptureHandleBrowserTest, + CallingSetCaptureHandleConfigWithEmptyConfigFiresEventAndClearsValue) { + TabInfo captured_tab = + SetUpCapturedPage(/*expose_origin=*/true, "handle", {"*"}); + + TabInfo capturing_tab = SetUpCapturingPage(/*start_capturing=*/true); + + // The capture handle set by the captured tab is observable by the capturer. + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), + captured_tab.capture_handle); + + // New CaptureHandleConfig set by captured tab triggers an event, and all + // subsequent calls to getSettings produce the new values. + captured_tab.SetCaptureHandleConfig(/*expose_origin=*/false, "", {}); + EXPECT_EQ(capturing_tab.LastEvent(), "{}"); + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), kNoCaptureHandle); +} + +IN_PROC_BROWSER_TEST_F( + CaptureHandleBrowserTest, + CallingSetCaptureHandleConfigWithNewHandleChangesConfigAndFiresEvent) { + TabInfo captured_tab = + SetUpCapturedPage(/*expose_origin=*/true, "handle", {"*"}); + + TabInfo capturing_tab = SetUpCapturingPage(/*start_capturing=*/true); + + // The capture handle set by the captured tab is observable by the capturer. + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), + captured_tab.capture_handle); + + // New CaptureHandleConfig set by captured tab triggers an event, and all + // subsequent calls to getSettings produce the new values. + captured_tab.SetCaptureHandleConfig(/*expose_origin=*/true, "new_handle", + {"*"}); + EXPECT_EQ(capturing_tab.LastEvent(), captured_tab.capture_handle); + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), + captured_tab.capture_handle); +} + +IN_PROC_BROWSER_TEST_F( + CaptureHandleBrowserTest, + CallingSetCaptureHandleConfigWithNewOriginValueChangesConfigAndFiresEvent) { + TabInfo captured_tab = + SetUpCapturedPage(/*expose_origin=*/true, "handle", {"*"}); + + TabInfo capturing_tab = SetUpCapturingPage(/*start_capturing=*/true); + + // The capture handle set by the captured tab is observable by the capturer. + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), + captured_tab.capture_handle); + + // New CaptureHandleConfig set by captured tab triggers an event, and all + // subsequent calls to getSettings produce the new values. + captured_tab.SetCaptureHandleConfig(/*expose_origin=*/false, "handle", {"*"}); + EXPECT_EQ(capturing_tab.LastEvent(), captured_tab.capture_handle); + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), + captured_tab.capture_handle); +} + +IN_PROC_BROWSER_TEST_F( + CaptureHandleBrowserTest, + PermittedOriginsChangeThatRemovesCapturerCausesEventAndEmptyConfig) { + TabInfo captured_tab = + SetUpCapturedPage(/*expose_origin=*/true, "handle", {"*"}); + + TabInfo capturing_tab = SetUpCapturingPage(/*start_capturing=*/true); + + // The capture handle set by the captured tab is observable by the capturer. + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), + captured_tab.capture_handle); + + // New CaptureHandleConfig set by captured tab triggers an event, and all + // subsequent calls to getSettings produce the new values. + captured_tab.SetCaptureHandleConfig(/*expose_origin=*/true, "handle", + {kArbitraryOrigin}); + EXPECT_EQ(capturing_tab.LastEvent(), "{}"); + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), kNoCaptureHandle); +} + +IN_PROC_BROWSER_TEST_F( + CaptureHandleBrowserTest, + PermittedOriginsChangeThatAddsCapturerCausesEventAndConfigExposure) { + TabInfo captured_tab = + SetUpCapturedPage(/*expose_origin=*/true, "handle", {kArbitraryOrigin}); + + TabInfo capturing_tab = SetUpCapturingPage(/*start_capturing=*/true); + + // The capture handle set by the captured tab is observable by the capturer. + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), kNoCaptureHandle); + + // New CaptureHandleConfig set by captured tab triggers an event, and all + // subsequent calls to getSettings produce the new values. + captured_tab.SetCaptureHandleConfig(/*expose_origin=*/true, "handle", {"*"}); + EXPECT_EQ(capturing_tab.LastEvent(), captured_tab.capture_handle); + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), + captured_tab.capture_handle); +} + +IN_PROC_BROWSER_TEST_F( + CaptureHandleBrowserTest, + PermittedOriginsChangeThatDoesNotAffectCapturerDoesNotCauseEventOrChange) { + TabInfo captured_tab = + SetUpCapturedPage(/*expose_origin=*/true, "handle", {"*"}); + + TabInfo capturing_tab = SetUpCapturingPage(/*start_capturing=*/true); + + // The capture handle set by the captured tab is observable by the capturer. + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), + captured_tab.capture_handle); + + // New CaptureHandleConfig set by captured tab triggers an event, and all + // subsequent calls to getSettings produce the new values. + captured_tab.SetCaptureHandleConfig(/*expose_origin=*/true, "handle", + {capturing_tab.GetOriginAsString()}); + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), + captured_tab.capture_handle); +} + +IN_PROC_BROWSER_TEST_F(CaptureHandleBrowserTest, + SameDocumentNavigationDoesNotClearTheCaptureHandle) { + TabInfo captured_tab = + SetUpCapturedPage(/*expose_origin=*/true, "handle", {"*"}); + + TabInfo capturing_tab = SetUpCapturingPage(/*start_capturing=*/true); + + // Sanity test - there was an initial handle. + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), + captured_tab.capture_handle); + + // In-document navigation does not change the capture handle (config). + std::string navigation_result; + EXPECT_TRUE(content::ExecuteScriptAndExtractString( + captured_tab.web_contents->GetMainFrame(), "clickLinkToPageBottom();", + &navigation_result)); + ASSERT_EQ(navigation_result, "navigated"); + + // No event was fired (verified in teardown) and getSettings returns the + // same configuration as previously. + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), + captured_tab.capture_handle); +} + +IN_PROC_BROWSER_TEST_F(CaptureHandleBrowserTest, + CrossDocumentNavigationClearsTheCaptureHandle) { + TabInfo captured_tab = + SetUpCapturedPage(/*expose_origin=*/true, "handle", {"*"}); + + TabInfo capturing_tab = SetUpCapturingPage(/*start_capturing=*/true); + + // Sanity test - there was an initial handle. + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), + captured_tab.capture_handle); + + // Cross-document navigation clears the capture handle (config). + captured_tab.Navigate(browser(), + servers_[kCapturedServer]->GetURL(kCapturedPageOther), + /*expect_handle_reset=*/true); + + // Navigation cleared the the capture handle, and that fired an event + // with the empty CaptureHandle. + EXPECT_EQ(capturing_tab.LastEvent(), "{}"); + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), kNoCaptureHandle); +} + +IN_PROC_BROWSER_TEST_F(CaptureHandleBrowserTest, + CrossOriginNavigationClearsTheCaptureHandle) { + TabInfo captured_tab = + SetUpCapturedPage(/*expose_origin=*/true, "handle", {"*"}); + + TabInfo capturing_tab = SetUpCapturingPage(/*start_capturing=*/true); + + // Sanity test - there was an initial handle. + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), + captured_tab.capture_handle); + + // Sanity over the test itself - the new server has a different origin. + ASSERT_FALSE(url::Origin::Create(servers_[kOtherCapturedServer]->base_url()) + .IsSameOriginWith(captured_tab.GetOrigin())); + + // Cross-origin navigation clears the capture handle (config) and fires + // an event with the empty CaptureHandle. + captured_tab.Navigate( + browser(), servers_[kOtherCapturedServer]->GetURL(kCapturedPageOther), + /*expect_handle_reset=*/true); + EXPECT_EQ(capturing_tab.LastEvent(), "{}"); + EXPECT_EQ(capturing_tab.ReadCaptureHandleFromSettings(), kNoCaptureHandle); +} + +IN_PROC_BROWSER_TEST_F(CaptureHandleBrowserTest, + SelfCaptureSanityWhenPermitted) { + TabInfo tab = SetUpCapturedPage(/*expose_origin=*/true, "handle", {"*"}, + /*self_capture=*/true); + tab.StartCapturing(); + + // Correct initial value read. + EXPECT_EQ(tab.ReadCaptureHandleFromSettings(), tab.capture_handle); + + // Events correctly fired when self-capturing. + tab.SetCaptureHandleConfig(/*expose_origin=*/true, "new_handle", {"*"}); + EXPECT_EQ(tab.LastEvent(), tab.capture_handle); + EXPECT_EQ(tab.ReadCaptureHandleFromSettings(), tab.capture_handle); +} + +IN_PROC_BROWSER_TEST_F(CaptureHandleBrowserTest, + SelfCaptureSanityWhenNotPermitted) { + TabInfo tab = + SetUpCapturedPage(/*expose_origin=*/true, "handle", {kArbitraryOrigin}, + /*self_capture=*/true); + + ASSERT_TRUE(tab.GetOrigin().IsSameOriginWith(tab.GetOrigin())); + + tab.StartCapturing(); + + // Correct initial value read. + EXPECT_EQ(tab.ReadCaptureHandleFromSettings(), kNoCaptureHandle); + + // No events fired when self-capturing but not allowed to observe.. + tab.SetCaptureHandleConfig(/*expose_origin=*/true, "new_handle", + {kArbitraryOrigin}); + EXPECT_EQ(tab.ReadCaptureHandleFromSettings(), kNoCaptureHandle); +} + +#endif // !BUILDFLAG(IS_CHROMEOS_LACROS) 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 cbd234ccefd327..b55928d63a53f4 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 @@ interface CredentialActionDelegate { 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 @@ void handleHelp() { @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 9d60a72d66b794..1f1e7f6781b78e 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 UI_ACTION_HANDLER = - new PropertyModel.ReadableObjectPropertyKey<>("ui action handler"); + static final PropertyModel.WritableObjectPropertyKey UI_ACTION_HANDLER = + new PropertyModel.WritableObjectPropertyKey<>("ui action handler"); static final PropertyModel.ReadableObjectPropertyKey URL_OR_APP = new PropertyModel.ReadableObjectPropertyKey<>("url or app"); static final PropertyModel.WritableObjectPropertyKey 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 a63fceaf701b0a..35c1e40c92ff5c 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 @@ void PasswordUIViewAndroid::HandleShowBlockedCredentialView( 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(), &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 3811b0d846c91c..80008779e748c7 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 @@ permissions::PermissionManager::PermissionContextMap CreatePermissionContexts( permission_contexts[ContentSettingsType::BACKGROUND_SYNC] = std::make_unique(profile); permission_contexts[ContentSettingsType::SENSORS] = - std::make_unique(profile); + std::make_unique(profile); permission_contexts[ContentSettingsType::ACCESSIBILITY_EVENTS] = std::make_unique(profile); permission_contexts[ContentSettingsType::CLIPBOARD_READ_WRITE] = 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 4add9f9e4fa3be..2225a31612d521 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 @@ Liste öğesi srched İki parmağınızı sağa kaydırın -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. +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. Sabit mod devre dışı bırakıldı sonra Satır sayısı: @@ -121,7 +121,7 @@ Chrome tarayıcı menüsünü açmak için Alt+F tuşlarına basın.Dokunarak kullanma eğitimi tamamlandı Bağlantı ftr -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. +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. Sonraki grafik Koyu Macenta Bu konuyla ilgili derslere göz atmak için tek parmağınızla ekranı sola veya sağa kaydırın @@ -216,7 +216,7 @@ Chrome tarayıcı menüsünü açmak için Alt+F tuşlarına basın.Pembemsi Kahverengi Metin okuma ayarlarını aç Yeşile Dönük Sarı -ChromeVox Eğiticisi +ChromeVox Eğitimi Chromebook klavye kısayolları grammatical mistake Devam etmekte olan bir konuşmayı durdurmak için 2 parmağınızla dokunun @@ -239,7 +239,7 @@ Chrome tarayıcı menüsünü açmak için Alt+F tuşlarına basın.düzenleniyor yenile Açık Yeşil -ChromeVox Eğiticisi'ni kapat +ChromeVox Eğitimini kapat autoinl Metin dönüşüm adayı {COUNT,plural, =1{aç parantez}other{# aç parantez}} @@ -277,7 +277,7 @@ Chrome tarayıcı menüsünü açmak için Alt+F tuşlarına basın.Bilgiler {COUNT,plural, =1{sol küme parantezi}other{# sol küme parantezi}} Sonraki düğme yok -ChromeVox eğiticiyi aç +ChromeVox eğitimini aç Üç parmağınızı sağa kaydırın Sonraki 3. düzey başlık yok Koyu Kurşun Mavisi @@ -288,7 +288,7 @@ Chrome tarayıcı menüsünü açmak için Alt+F tuşlarına basın.İpucu 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. İki parmağınızı sola kaydırın -İpucu: Bu eğiticiden çıkmak istiyorsanız iki parmağınızla sağdan sola kaydırın. +İpucu: Bu eğitimden çıkmak istiyorsanız iki parmağınızla sağdan sola kaydırın. Önceki Karakter Sesi kalınlaştır Ara + O, ardından S. Sesleri yüklemek, yönetmek ve özelleştirmek için kullanın. @@ -331,7 +331,7 @@ Chrome tarayıcı menüsünü açmak için Alt+F tuşlarına basın.{COUNT,plural, =1{boşluk}other{# boşluk}} Bağlantı verilmemiş Görüntüleme stilini üst üste (interleave) olarak değiştir -Eğiticiden çık +Eğitimden çık Sonraki denetim yok Orkide metnini yapıştır. @@ -361,7 +361,7 @@ Chrome tarayıcı menüsünü açmak için Alt+F tuşlarına basın.Kelimenin fonetik telaffuzunu söyler seprtr 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. - Eğiticisi, Ders + Eğitimi, Ders {COUNT,plural, =1{artı işareti}other{# artı işareti}} Ayırıcı Önceki form alanı @@ -401,7 +401,7 @@ Chrome tarayıcı menüsünü açmak için Alt+F tuşlarına basın.chkmnuitm {COUNT,plural, =1{dolar işareti}other{# dolar işareti}} alrt -İpucu: Bu eğiticiden çıkmak isterseniz Escape tuşuna basın. +İpucu: Bu eğitimden çıkmak isterseniz Escape tuşuna basın. 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. Papaya Rengi A: @@ -693,7 +693,7 @@ Chrome tarayıcı menüsünü açmak için Alt+F tuşlarına basın.Sekme listesi Kısmen işaretli Bu konuyla ilgili derslere göz atmak için Arama + Sağ Ok veya Arama + Sol Ok tuşlarına basın -Bu eğitici sırasında herhangi bir tuşun adını duymak için ilgili tuşa basın. +Bu eğitim sırasında herhangi bir tuşun adını duymak için ilgili tuşa basın. Tablo Konuşma ses düzeyini düşür Konulara göz atmak için Arama + Sağ Ok veya Arama + Sol Ok tuşlarına basın @@ -934,7 +934,7 @@ Chrome tarayıcı menüsünü açmak için Alt+F tuşlarına basın.autolst Sonraki birleşik giriş kutusu yok 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. + Eğitimle işiniz bittiğinde, ChromeVox'ı kullanarak Kapat düğmesine gidip düğmeyi tıklayın. Kes Sonraki medya widget'ı yok Dokunarak keşfetmek, ekranda neler olduğunu kısa sürede algılamanıza yardımcı olabilir. @@ -1052,7 +1052,7 @@ Chrome tarayıcı menüsünü açmak için Alt+F tuşlarına basın.ChromeVox Paneli Tarih denetimi Beyaz Porselen -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. +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. Sonraki 6. düzey başlık yok Domates Geçerli hücre koordinatlarını söyle @@ -1097,7 +1097,7 @@ Chrome tarayıcı menüsünü açmak için Alt+F tuşlarına basın.Unut Devam etmekte olan bir ChromeVox konuşmasını durdurmak için Control tuşuna basın. Okuma sesini hızlandırma, yavaşlatma ve duraklatma kontrollerini sağlar -ChromeVox eğiticisi +ChromeVox eğitimi Başlık 1 8 noktalı bir braille tablosu seçin: +popup 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 b94816762a4b37..45765f059e61ea 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 @@ public void onProfileDataUpdated(ProfileDataSource.ProfileData profileData) { 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 @@ public void onAccountInfoUpdated(AccountInfo accountInfo) { 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/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/SigninPromoUtil.java b/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/SigninPromoUtil.java index 9fe9485d332111..0665dec871aaa8 100644 --- a/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/SigninPromoUtil.java +++ b/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/SigninPromoUtil.java @@ -24,6 +24,7 @@ import org.chromium.components.signin.metrics.SigninAccessPoint; import org.chromium.components.user_prefs.UserPrefs; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -110,11 +111,8 @@ public static void setupSigninPromoViewFromCache(SigninPromoController signinPro SigninPromoController.OnDismissListener listener) { final AccountManagerFacade accountManagerFacade = AccountManagerFacadeProvider.getInstance(); - if (!accountManagerFacade.isCachePopulated()) { - signinPromoController.setupPromoView(view, /* profileData= */ null, listener); - return; - } - final List accounts = accountManagerFacade.tryGetGoogleAccounts(); + final List accounts = + accountManagerFacade.getGoogleAccounts().or(Collections.emptyList()); if (accounts.isEmpty()) { signinPromoController.setupPromoView(view, /* profileData= */ null, listener); return; 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 9085087d5ee0df..560133e373fead 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 @@ ውርድዎን በማፍጠን ላይ። ጋር ገጽ አውርድ +የሚከተሏቸውን ጣቢያዎች እዚህ ያገኛሉ በካርታዎች መተግበሪያ ውስጥ ይክፈቱ Chromeን ያስሱ ውሂብን አጽዳ 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 ac173ec2f9ee2d..09d0c2fdda7b44 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 @@ جارٍ تسريع التنزيل. مع تنزيل الصفحة +تظهر هنا المواقع الإلكترونية التي تتابعها. فتح في تطبيق الخرائط ‏التنقُّل في Chrome محو البيانات 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 c42cb4358c82d4..925ffc2ff14f1c 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 @@ আপোনাৰ ডাউনল’ড আৰু খৰতকীয়া কৰি থকা হৈছে। ৰ সৈতে পৃষ্ঠাটো ডাউনল'ড কৰক +আপুনি নিজে ফ'ল' কৰা ছাইটসমূহ ইয়াত বিচাৰি পাব maps এপত খোলক Chromeত নেভিগে’ট কৰা ডেটা মচক 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 c473540658cd24..f61c2a07c272b2 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 @@ Ayarı dəyişmək üçün sinxronizasiyanı sıfırlay Endirmənizi sürətləndirin. ilə Endirmə səhifəsi +İzlədiyiniz saytları burada tapa bilərsiniz Xəritə tətbiqində açın Chrome'u araşdırın Datanı silin 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 bd227b409db36b..a72c5a545b7e90 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 @@ Privacy Sandbox падтрымлівае адкрытасць інтэрнэту Спампоўка паскараецца. крыніца: Спампаваць старонку +Тут будуць паказвацца сайты, на якія вы падпішацеся Адкрыць у праграме карт Навігацыя ў Chrome Ачысціць даныя 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 afd00224e72318..dceab66a7c86ca 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 @@ Privacy Sandbox продължава да се разработва активн Изтеглянето се ускорява. с/ъс Изтегляне на страницата +Тук ще виждате сайтовете, които следите Отваряне в приложение за карти Навигиране в Chrome Изчиств. на данните 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 b33b887118e4c2..005ef02ba241bc 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 @@ Da biste promijenili tu postavku, poništite sinkronizac Ubrzavanje preuzimanja. s pružaocem usluge Preuzmi stranicu +Ovdje ćete pronaći lokacije koje pratite Otvori u aplikacijama za mape Navigirajte Chromeom Obriši podatke 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 901fbe0df9f13e..adb9d790c308c8 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 @@ Mantén premuda qualsevol paraula per cercar-la. Per definir millor la cerca, se i gestionen aquest compte. {READING_LIST_UNREAD_PAGE_COUNT,plural, =1{ pàgina no llegida}other{ pàgines no llegides}} Pestanya d'incògnit seleccionada -No es pot ampliar la captura de pantalla. Torna-ho a provar quan el telèfon no estigui ocupat. +No es pot ampliar la captura de pantalla. Torna-ho a provar quan el telèfon disposi de més recursos. Obre-ho en una finestra nova Text compartit d'un altre dispositiu Visitats últimament @@ -684,6 +684,7 @@ Per canviar aquesta opció, restableix la sincronitzaci S'està accelerant la baixada. amb Baixa la pàgina +Aquí veuràs els llocs web que segueixes Obre en una aplicació de mapes Navegar per Chrome Esborra les dades 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 fcff4e963f309c..fec1954c259693 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 @@ Chcete-toto nastavení změnit, resetujte synchronizaci< Zrychlování stahování. () Stáhnout stránku +Zde najdete weby, které sledujete Otevřít v mapové aplikaci Navigace v Chromu Vymazat data 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 3dbd0c8c8a0023..c15e1c1b5717d2 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 @@ Hvis du vil ændre denne indstilling, skal du nulstille Øger hastigheden på din download. med Download siden +Du kan finde de websites, du følger, her Åbn i kortapp Find rundt i Chrome Ryd data 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 3e185c6b705580..6f7a76745a8518 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 @@ Επιτάχυνση της λήψης σας. με Λήψη σελίδας +Εδώ θα βρίσκετε τους ιστοτόπους που ακολουθείτε. Άνοιγμα σε εφαρμογή χαρτών Πλοήγηση στο Chrome Διαγραφή δεδομένων 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 1e470d9f40fb36..502877b0e440ee 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 @@ Para cambiar esta configuración, restablece la sincroni Acelerando la descarga con Descargar página +Aquí encontrarás los sitios que sigues. Abrir en una app de mapas Navigate Chrome Borrar datos 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 ca24fd12ffc65a..adb8f3c4215850 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 @@ Para cambiar esta opción, restablece la sincronización Acelerando descarga. con Descargar página +Los sitios que sigas aparecerán aquí Abrirla en una aplicación de mapas Desplazarte por Chrome Borrar datos 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 672cc1c19aa2d1..8d25a943a70886 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 @@ Seade muutmiseks lähtestage sünkroonimineAllalaadimise kiirendamine. teenusepakkujaga Laadi leht alla +Jälgitavad saidid leiate siit Avage kaardirakenduses Chrome'is navigeerimine Kustuta andmed 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 1d5bf42ee7d691..d84ecaefc7a76f 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 @@ Ezarpena aldatzeko, berrezarri sinkronizazioaDeskarga bizkortzen. Hornitzailea: Deskargatu orria +Jarraitzaile zaituzten webguneak aurkituko dituzu hemen Ireki mapa-aplikazio batean Chrome-n nabigatzea Garbitu datuak 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 740c9e3bffb96b..be0132c61b1fb9 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 @@ درحال سرعت بخشیدن به بارگیری. با بارگیری صفحه +سایت‌هایی را که دنبال می‌کنید اینجا پیدا خواهید کرد ‏باز کردن در برنامه Maps ‏پیمایش در Chrome پاک کردن داده‌ها 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 8b9ed0fff2895d..20e34d0dbd9bf0 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 @@ Jos haluat muokata asetusta, nollaa synkronointiLataustasi nopeutetaan palvelulla Lataa sivu +Löydät seuraamasi sivustot täältä Avaa karttasovelluksessa Chromessa siirtyminen Poista tiedot 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 011c5377635be8..6e27ba6f22a37c 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 @@ Pour modifier ce paramètre, réinitialisez la synchroni Accélération de votre téléchargement en cours… avec Télécharger la page +Les sites que vous suivez s'afficheront ici Ouvrir dans l'application Maps Naviguer dans Chrome Effacer les données 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 970a7ec23bef39..8b5d70579ae98d 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 @@ Pour modifier ce paramètre, réinitialisez la synchroni Accélération du téléchargement… avec Télécharger la page +Les sites que vous suivez s'afficheront ici Ouvrir dans une application de plans Navigate Chrome Effacer les données 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 3ae0a3ae1e2b5d..9c66982fce4e0f 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 @@ Para cambiar esta opción de configuración, deberás re Estase acelerando a descarga. con Descargar páxina +Aquí atoparás os sitios que segues Abrir na aplicación de mapas Navega por Chrome Borrar datos 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 d42de2f28f63c8..834297836aefbd 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 @@ आपके डाउनलोड की गति बढ़ाई जा रही है. के साथ पेज डाउनलोड करें +यहां आपको वे साइटें दिखेंगी जिन्हें आप फ़ॉलो करते हैं मैप ऐप्लिकेशन में खोलें Navigate Chrome डेटा साफ़ करें 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 7b8ae7872b476b..105bb343031123 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 @@ Da biste promijenili tu postavku, poništite sinkronizac Ubrzavanje preuzimanja. uz Preuzmi stranicu +Ovdje ćete pronaći stranice koje pratite Otvori u aplikaciji za karte Kretanje Chromeom Izbriši podatke 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 e6d8cc754acc25..9d622fc9ee1c05 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 @@ A beállítás módosításához állítsa vissza a szin Letöltés felgyorsítása… szolgáltatóval Oldal letöltése +A követett webhelyeket itt láthatja majd Megnyitás térképalkalmazásban Navigáció a Chrome-ban Adatok törlése 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 c07f874308be03..023b38faa28d07 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 @@ Privacy Sandbox-ը դեռևս մշակման փուլում է և հասանել Ներբեռնումն արագացվում է։ -ի հետ Ներբեռնել էջը +Կայքերը, որոնց հետևում եք, կցուցադրվեն այստեղ Բացեք Քարտեզներ հավելվածում Նավիգացիա Chrome-ում Ջնջել տվյալները 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 529989e382f3a7..45718c621335b1 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 @@ Untuk mengubah setelan ini, reset sinkronisasiMempercepat download. dengan Download halaman +Anda akan menemukan situs yang Anda ikuti di sini Buka di aplikasi peta Navigate Chrome Hapus data 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 30839a1816a319..7e45cb462acef1 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 @@ Til að breyta þessari stillingu skaltu endurstilla sam Flýtir fyrir niðurhali. hjá Sækja síðu +Hér birtast vefsvæði sem þú fylgir Opna í kortaforriti Flettu í Chrome Hreinsa gögn 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 7eeb1f2094b91b..96f7cf2a6a2c70 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 @@ Per cambiare questa impostazione, reimposta la sincroniz Accelerazione del download in corso. con Scarica la pagina +Qui troverai i siti che segui Apri nell'app di mappe Esplorare Chrome Cancella dati 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 265a5665501117..0166f70d8b9346 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 @@ הדפדפן מאיץ את ההורדה. עם הורדת דף זה +כאן יוצגו האתרים שיתווספו למעקב פתיחה באפליקציית מפות ‏ניווט ב-Chrome ניקוי נתונים 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 f1947f8a1a411b..6adba7dac68608 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 @@ მიმდინარეობს ჩამოტვირთვის აჩქარება. -ით გვერდის ჩამოტვირთვა +აქ იპოვით საიტებს, რომლებსაც თვალს ადევნებთ რუკების აპში გახსნა Chrome-ში ნავიგაცია მონაცემების წაშლა 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 f13c6284794bff..0469225f767e8b 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 @@ Google есептік жазбасының шолу тарихы басқа Goog Жылдамырақ жүктеп алынуда. провайдерімен Жүктеп алу беті +Жазылған сайттарыңыз осы жерде көрсетіледі. Maps қолданбасында ашу Chrome браузерін шарлау Деректерді жою 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 87eae5b502cd71..4d89e548aec6dd 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 @@ Privacy Sandbox កំពុងស្ថិតនៅក្នុងការអ កំពុង​បង្កើនល្បឿន​នៃការទាញយក​របស់អ្នក។ ជាមួយ ទាញយកទំព័រ +អ្នកនឹងឃើញ​គេហទំព័រ​ដែលអ្នកតាមដាន​នៅទីនេះ បើកនៅក្នុងកម្មវិធីផែនទី រុករក Chrome ជម្រះទិន្នន័យ 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 3ac9129d21641d..488445fdceb4bf 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 @@ ಕಾನೂನು ಮಾಹಿತಿ ಬುಕ್‌ಮಾರ್ಕ್ ಅವರಿಂದ – Google ನಿಂದ ವಿತರಿಸಲಾಗಿದೆ -ಅಪ್ಲಿಕೇಶನ್ ಡೇಟಾ ಅಳಿಸುವುದೇ? +ಆ್ಯಪ್ ಡೇಟಾ ಅಳಿಸಬೇಕೇ? ನಂತರ ಓದಿ ಹೊಸತು Google ಗೆ ಬಳಕೆಯ ಅಂಕಿಅಂಶಗಳು ಮತ್ತು ಕ್ರ್ಯಾಶ್ ವರದಿಗಳನ್ನು ಕಳುಹಿಸುವ ಮೂಲಕ Chrome ಅನ್ನು ಉತ್ತಮಗೊಳಿಸಲು ಸಹಾಯ ಮಾಡಿ. ಆಟೋಪ್ಲೇ @@ -684,6 +684,7 @@ ನಿಮ್ಮ ಡೌನ್‌ಲೋಡ್‌ನ ವೇಗವನ್ನು ಹೆಚ್ಚಿಸಲಾಗುತ್ತಿದೆ. ಜೊತೆಗೆ ಪುಟ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ +ನೀವು ಫಾಲೋ ಮಾಡುವ ಸೈಟ್‌ಗಳನ್ನು ಇಲ್ಲಿ ಹುಡುಕಬಹುದು ನಕ್ಷೆಗಳ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ತೆರೆಯಿರಿ Chrome ಅನ್ನು ನ್ಯಾವಿಗೇಟ್ ಮಾಡಿ ಡೇಟಾ ತೆರವುಗೊಳಿಸು 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 b082edb0f55307..49896d634c3eea 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 @@ 다운로드 속도 향상 제공업체: 다운로드 페이지 +팔로우하는 사이트가 여기에 표시됩니다 지도 앱에서 열기 Chrome 탐색하기 인터넷 사용 기록 삭제 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 4149477ad148bc..af6c15d6c57a9d 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 @@ Google аккаунтуңуздун башка Google кызматтарынан Файл ылдам жүктөлүп алынууда. менен Баракты жүктөп алуу +Жазылган сайттарды ушул жерден табасыз Карталар колдонмосунан ачыңыз Chrome'до чабыттаңыз Дайын-даректерди өчүрүү 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 8c7029b310f52a..ae2192ebdc17d7 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 @@ Privacy Sandbox ຍັງຢູ່ໃນລະຫວ່າງການພັດ ກຳລັງເພີ່ມຄວາມໄວໃຫ້ການດາວໂຫຼດຂອງທ່ານ. ກັບ ໜ້າການດາວໂຫຼດ +ທ່ານຈະພົບເວັບໄຊທີ່ທ່ານຕິດຕາມຢູ່ບ່ອນນີ້ ເປີດໃນແອັບແຜນທີ່ ໄປຍັງສ່ວນຕ່າງໆຂອງ Chrome ລຶບລ້າງຂໍ້ມູນ 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 e9bfd83854e409..e2994249602147 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 @@ Jei norite pakeisti šį nustatymą, iš naujo nustatyki Paspartinamas atsisiuntimas. naudojant Atsisiųsti puslapį +Stebimas svetaines rasite čia Atidaryti Žemėlapių programoje Naršyti „Chrome“ Išvalyti duomenis 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 27c68cdb02ef22..cb3a8c2259b9b8 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 @@ Lai mainītu šo iestatījumu, atiestatiet sinhronizāci Lejupielāde tiek paātrināta. izmantojot Lejupielādēt lapu +Šeit būs redzamas vietnes, kurām sekojat Atvērt karšu lietotnē Navigācija pārlūkā Chrome Notīrīt datus 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 0d8579f3078c58..44d53174138b43 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 @@ Privacy Sandbox сѐ уште активно се развива и таа е д Го забрзуваме вашето преземање. со Преземете ја страницата +Сајтовите што ги следите ќе ги најдете тука Отвори во апликацијата „Карти“ Навигација во Chrome Избриши податоци 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 845391c2c27b96..e88d7889b7e205 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 @@ तुमच्या डाउनलोडचा वेग वाढवत आहे. सह पेज डाउनलोड करा +तुम्ही फॉलो करत असलेल्या साइट तुम्हाला येथे दिसतील नकाशे ॲपमध्ये उघडा Chrome नेव्हिगेट करा डेटा साफ करा 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 d146d013c154d0..d9bd29aad0929f 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 @@ Untuk menukar tetapan ini, tetapkan semula penyegerakan< Mempercepatkan muat turun anda. dengan Muat turun halaman +Anda akan menemukan laman yang anda ikuti di sini Buka dalam apl peta Navigasi Chrome Kosongkan data 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 03fa68c806a5ca..cb47e894ed1ac9 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 @@ သင်၏ ဒေါင်းလုဒ်ကို အရှိန်မြှင့်တင်ခြင်း။ ဖြင့် ဒေါင်းလုဒ်စာမျက်နှာ +သင်လိုက်ကြည့်သော ဝဘ်ဆိုက်များကို ဤနေရာတွင် တွေ့ရပါမည် မြေပုံအက်ပ်တွင် ဖွင့်ပါ Navigate Chrome ဒေတာများကို ရှင်းလင်းပါ 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 e6fb23587044c5..671c3212505fc7 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 @@ Voor je Google-account kunnen andere vormen van browsegeschiedenis (zoals zoekop Je download wordt versneld. met Pagina downloaden +Hier vind je de sites die je volgt Openen in app voor passen Navigeren in Chrome Gegevens wissen 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 8dce969f42f27b..a20928d5614fb3 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 @@ For å endre denne innstillingen, tilbakestill synkronis Øker hastigheten på nedlastingen. med Last ned siden +Her finner du nettsteder du følger Åpne i en kartapp Naviger i Chrome Slett data 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 9ab0358b676384..7585102f133980 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 @@ Aby zmienić to ustawienie, zresetuj synchronizacjęPrzyspieszam pobieranie. za pomocą Pobierz stronę +Tu znajdziesz witryny, które obserwujesz Otwórz w aplikacji z mapami Poruszanie się w Chrome Wyczyść dane 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 2d676b1080f67c..46080ffbebd5db 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 @@ Para alterar essa configuração, redefina a sincroniza Acelerando seu download. com Fazer o download da página +Você verá os sites que você seguir aqui Abrir no app de mapa Navegar no Chrome Limpar dados 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 dddbe1cfc44c5d..58f064ce8977c7 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 @@ Para alterar esta definição, reponha a sincronização A acelerar a transferência… com Transferir página +Encontrará os sites que segue aqui Abrir na aplicação de mapas Navegue no Chrome Limpar dados 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 0555bb8f6835d4..c7c8c7c06dfc91 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 @@ Pentru a modifica această setare, resetează sincroniza Se accelerează descărcarea. cu Descarcă pagina +Aici vei vedea site-urile pe care le urmărești Deschide în aplicația Maps Navigarea în Chrome Șterge datele 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 f4d2fdcdd2064a..6548584fec7e5a 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 @@ Ускорение скачивания… с помощью Скачать страницу +Здесь будут сайты, на которые вы подпишетесь. Показать на карте Navigate Chrome Удалить данные 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 f266cf2747ead8..fe460e39528b1e 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 @@ Ak chcete toto nastavenie zmeniť, resetujte synchroniz Sťahovanie sa zrýchľuje. s poskytovateľom Stránka sťahovania +Tu nájdete weby, ktoré sledujete Otvorte v aplikácii pre mapy Navigácia v Chrome Vymazať dáta 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 487f9f9691ec73..cef73690c5ed51 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 @@ V Google Računu so morda druge vrste zgodovine brskanja, kot so iskanja in deja Pospeševanje prenosa. pri ponudniku Prenos strani +Tukaj boste našli spletna mesta, ki jih spremljate. Odpiranje v aplikaciji z zemljevidi Premikanju po Chromu Izbriši podatke 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 e253fcebf3dd67..eedd9552ed1f70 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 @@ Da biste promenili ovo podešavanje, resetujte sinhroniz Preuzimanje se ubrzava. sa dobavljačem Preuzmi stranicu +Ovde ćete pronaći sajtove koje pratite Otvorite u aplikaciji za mape Krećite se po Chrome-u Obriši podatke 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 705f3bbeb05989..09d3293ea903fc 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 @@ Google налог можда има друге облике историје п Преузимање се убрзава. са добављачем Преузми страницу +Овде ћете пронаћи сајтове које пратите Отворите у апликацији за мапе Крећите се по Chrome-у Обриши податке 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 eb28ebdea16afa..4feaa64920260f 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 @@ Det kan finnas andra former av webbhistorik i Google-kontot på Nedladdningen görs snabbare. med Ladda ned sida +Här hittar du webbplatser som du följer Öppna i kartapp Navigera i Chrome Rensa data 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 77c9501bc16294..1bfc00c6957679 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 @@ Ili ubadilishe mipangilio hii, fanya usawazishaji upya

Inaongeza kasi ya kupakua faili yako. na Pakua ukurasa +Utapata tovuti unazofuatilia hapa Fungua katika programu ya ramani Kutumia Chrome Futa data 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 b5495d2d1557d9..29eb281f25eea3 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 @@ Privacy Sandbox ยังอยู่ในระหว่างการพั กำลังเพิ่มความเร็วในการดาวน์โหลด กับ ดาวน์โหลดหน้า +คุณจะเห็นเว็บไซต์ที่ติดตามที่นี่ เปิดในแอปแผนที่ ไปยังส่วนต่างๆ ของ Chrome ล้างข้อมูล 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 7c7e517ed60163..8c2d4bcaf1504f 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 @@ Bu ayarı değiştirmek için senkronizasyonu sıfırlay İndirme işleminiz hızlandırılıyor. ile Sayfayı indir +Takip ettiğiniz siteleri burada bulursunuz Haritalar uygulamasında aç Chrome'da gezinme Verileri temizle 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 45b9b5caeeef47..13135ffb195693 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 @@ Privacy Sandbox підтримує існування відкритої мер Прискорюється завантаження. за допомогою Завантажити сторінку +Тут відображатимуться сайти, на які ви підпишетеся Відкрити в додатку Карти Навігація в Chrome Видалити дані 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 d921b9f25d4496..8d979603be7127 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 @@ Tài khoản Google của bạn có thể có các dạng lịch sử duyệt we Đang tăng tốc độ tải xuống. với Tải trang xuống +Bạn sẽ thấy các trang web mình theo dõi tại đây Mở trong ứng dụng bản đồ Thao tác trong Chrome Xóa dữ liệu 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 62c089b6c150e5..9a8d8322899a9d 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 @@ 正在加快您的下载速度。 提供方: 下载网页 +您会在此处看到自己已关注的网站 在地图应用中打开 探索 Chrome 清除数据 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 27d37c817f6e58..b7fc6d2e88a0ff 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 @@ Privacy Sandbox 仍在開發階段,目前開放地區有限。現在網站可 正在加快下載速度。 提供者: 下載網頁 +這裡會顯示你追蹤的網站 在地圖應用程式中開啟 Navigate Chrome 清除資料 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 a9eb2daec7294c..91d431a56c974c 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 @@ Ukuze ushintshe lesi silungiselelo, setha kabusha ukuvum Isheshisa ukulanda kwakho. ne- Landa ikhasi +Uzothola amasayithi owalandelayo lapha Uhlelo lokusebenza lokuvula kumamephu Zulazula ku-Chrome Sula idatha diff --git a/chrome/browser/ui/views/desktop_capture/desktop_media_list_controller.cc b/chrome/browser/ui/views/desktop_capture/desktop_media_list_controller.cc index 1afd384d2d188e..1af567d949e05e 100644 --- a/chrome/browser/ui/views/desktop_capture/desktop_media_list_controller.cc +++ b/chrome/browser/ui/views/desktop_capture/desktop_media_list_controller.cc @@ -23,13 +23,16 @@ DesktopMediaListController::DesktopMediaListController( std::unique_ptr media_list) : dialog_(parent), media_list_(std::move(media_list)), + auto_select_tab_( + base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( + switches::kAutoSelectTabCaptureSourceByTitle)), auto_select_source_( base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( switches::kAutoSelectDesktopCaptureSource)), - auto_accept_tab_capture_( + auto_accept_this_tab_capture_( base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kThisTabCaptureAutoAccept)), - auto_reject_tab_capture_( + auto_reject_this_tab_capture_( base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kThisTabCaptureAutoReject)) {} @@ -171,7 +174,13 @@ void DesktopMediaListController::OnViewIsDeleting(views::View* view) { bool DesktopMediaListController::ShouldAutoAccept( const DesktopMediaList::Source& source) const { if (media_list_->GetMediaListType() == DesktopMediaList::Type::kCurrentTab) { - return auto_accept_tab_capture_; + return auto_accept_this_tab_capture_; + } else if (media_list_->GetMediaListType() == + DesktopMediaList::Type::kWebContents && + !auto_select_tab_.empty() && + source.name.find(base::ASCIIToUTF16(auto_select_tab_)) != + std::u16string::npos) { + return true; } return (!auto_select_source_.empty() && @@ -182,7 +191,7 @@ bool DesktopMediaListController::ShouldAutoAccept( bool DesktopMediaListController::ShouldAutoReject( const DesktopMediaList::Source& source) const { if (media_list_->GetMediaListType() == DesktopMediaList::Type::kCurrentTab) { - return auto_reject_tab_capture_; + return auto_reject_this_tab_capture_; } return false; } diff --git a/chrome/browser/ui/views/desktop_capture/desktop_media_list_controller.h b/chrome/browser/ui/views/desktop_capture/desktop_media_list_controller.h index f6636c405ed34a..3f03ab48af6a94 100644 --- a/chrome/browser/ui/views/desktop_capture/desktop_media_list_controller.h +++ b/chrome/browser/ui/views/desktop_capture/desktop_media_list_controller.h @@ -132,9 +132,10 @@ class DesktopMediaListController : public DesktopMediaListObserver, view_observations_{this}; // Auto-selection. Used only in tests. - const std::string auto_select_source_; - const bool auto_accept_tab_capture_; - const bool auto_reject_tab_capture_; + const std::string auto_select_tab_; // Only tabs, by title. + const std::string auto_select_source_; // Any source by its title. + const bool auto_accept_this_tab_capture_; // Only for current-tab capture. + const bool auto_reject_this_tab_capture_; // Only for current-tab capture. base::WeakPtrFactory weak_factory_{this}; }; 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 8a978fee173058..ba724c6b53ab4a 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 @@ class ActiveDirectoryPasswordChangeScreenHandler public: using TView = ActiveDirectoryPasswordChangeView; - ActiveDirectoryPasswordChangeScreenHandler( + explicit ActiveDirectoryPasswordChangeScreenHandler( JSCallsContainer* js_calls_container); ~ActiveDirectoryPasswordChangeScreenHandler() override; diff --git a/chrome/browser/web_applications/web_app_icon_manager_unittest.cc b/chrome/browser/web_applications/web_app_icon_manager_unittest.cc index 3a4bc05b2bb739..3a509dc04520f0 100644 --- a/chrome/browser/web_applications/web_app_icon_manager_unittest.cc +++ b/chrome/browser/web_applications/web_app_icon_manager_unittest.cc @@ -1381,7 +1381,7 @@ TEST_F(WebAppIconManagerTest, CacheNewAppFavicon) { } TEST_F(WebAppIconManagerTest, CacheAppFavicon_UiScaleFactors_NoMissingIcons) { - ui::SetSupportedScaleFactors( + ui::test::ScopedSetSupportedScaleFactors scoped_scale_factors( {ui::SCALE_FACTOR_100P, ui::SCALE_FACTOR_200P, ui::SCALE_FACTOR_300P}); std::unique_ptr web_app = CreateWebApp(); @@ -1424,7 +1424,8 @@ TEST_F(WebAppIconManagerTest, CacheAppFavicon_UiScaleFactors_NoMissingIcons) { } TEST_F(WebAppIconManagerTest, CacheAppFavicon_UiScaleFactors_DownsizingIcons) { - ui::SetSupportedScaleFactors({ui::SCALE_FACTOR_100P, ui::SCALE_FACTOR_200P}); + ui::test::ScopedSetSupportedScaleFactors scoped_scale_factors( + {ui::SCALE_FACTOR_100P, ui::SCALE_FACTOR_200P}); std::unique_ptr web_app = CreateWebApp(); const AppId app_id = web_app->app_id(); @@ -1461,7 +1462,8 @@ TEST_F(WebAppIconManagerTest, CacheAppFavicon_UiScaleFactors_DownsizingIcons) { } TEST_F(WebAppIconManagerTest, CacheAppFavicon_UiScaleFactors_NoIcons) { - ui::SetSupportedScaleFactors({ui::SCALE_FACTOR_100P, ui::SCALE_FACTOR_200P}); + ui::test::ScopedSetSupportedScaleFactors scoped_scale_factors( + {ui::SCALE_FACTOR_100P, ui::SCALE_FACTOR_200P}); std::unique_ptr web_app = CreateWebApp(); const AppId app_id = web_app->app_id(); @@ -1474,7 +1476,8 @@ TEST_F(WebAppIconManagerTest, CacheAppFavicon_UiScaleFactors_NoIcons) { } TEST_F(WebAppIconManagerTest, CacheAppFavicon_UiScaleFactors_NoMatchSmaller) { - ui::SetSupportedScaleFactors({ui::SCALE_FACTOR_200P, ui::SCALE_FACTOR_300P}); + ui::test::ScopedSetSupportedScaleFactors scoped_scale_factors( + {ui::SCALE_FACTOR_200P, ui::SCALE_FACTOR_300P}); std::unique_ptr web_app = CreateWebApp(); const AppId app_id = web_app->app_id(); @@ -1495,7 +1498,8 @@ TEST_F(WebAppIconManagerTest, CacheAppFavicon_UiScaleFactors_NoMatchSmaller) { TEST_F(WebAppIconManagerTest, CacheAppFavicon_UiScaleFactors_DownsizingFromSingleIcon) { - ui::SetSupportedScaleFactors({ui::SCALE_FACTOR_100P, ui::SCALE_FACTOR_200P}); + ui::test::ScopedSetSupportedScaleFactors scoped_scale_factors( + {ui::SCALE_FACTOR_100P, ui::SCALE_FACTOR_200P}); std::unique_ptr web_app = CreateWebApp(); const AppId app_id = web_app->app_id(); @@ -1529,7 +1533,8 @@ TEST_F(WebAppIconManagerTest, TEST_F(WebAppIconManagerTest, CacheAppFavicon_UiScaleFactors_BiggerUiScaleFactorIconMissing) { - ui::SetSupportedScaleFactors({ui::SCALE_FACTOR_100P, ui::SCALE_FACTOR_300P}); + ui::test::ScopedSetSupportedScaleFactors scoped_scale_factors( + {ui::SCALE_FACTOR_100P, ui::SCALE_FACTOR_300P}); std::unique_ptr web_app = CreateWebApp(); const AppId app_id = web_app->app_id(); diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index f65aa3ef3d4722..0ef992bc71b1f7 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt @@ -1 +1 @@ -chrome-win32-master-1622483725-e592581519e2e467a881534fc9e51e3e93c1d0b1.profdata +chrome-win32-master-1622537940-de546d7191135903a2ef665a10feb391e9b45b67.profdata diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index 8aa2fcbb487982..7543d3170941ef 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt @@ -1 +1 @@ -chrome-win64-master-1622483725-e57c48324ade86a0cf5db99c0a175a0b2327d7f5.profdata +chrome-win64-master-1622537940-762b6b3e8d3692381f31254fc3e14d7487d42c28.profdata diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc index 314e5528af40fa..e27edd38d9fa0a 100644 --- a/chrome/common/chrome_switches.cc +++ b/chrome/common/chrome_switches.cc @@ -96,6 +96,15 @@ const char kAutoOpenDevToolsForTabs[] = "auto-open-devtools-for-tabs"; const char kAutoSelectDesktopCaptureSource[] = "auto-select-desktop-capture-source"; +// This flag makes Chrome auto-select a tab with the provided title when +// the media-picker should otherwise be displayed to the user. This switch +// is very similar to kAutoSelectDesktopCaptureSource, but limits selection +// to tabs. This solves the issue of kAutoSelectDesktopCaptureSource being +// liable to accidentally capturing the Chromium window instead of the tab, +// as both have the same title if the tab is focused. +const char kAutoSelectTabCaptureSourceByTitle[] = + "auto-select-tab-capture-source-by-title"; + // How often (in seconds) to check for updates. Should only be used for testing // purposes. const char kCheckForUpdateIntervalSec[] = "check-for-update-interval"; diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h index 4a7726314c6fc2..6cd006e6f1f46b 100644 --- a/chrome/common/chrome_switches.h +++ b/chrome/common/chrome_switches.h @@ -53,6 +53,7 @@ extern const char kAppsGalleryURL[]; extern const char kAuthServerAllowlist[]; extern const char kAutoOpenDevToolsForTabs[]; extern const char kAutoSelectDesktopCaptureSource[]; +extern const char kAutoSelectTabCaptureSourceByTitle[]; extern const char kCheckForUpdateIntervalSec[]; extern const char kCipherSuiteBlacklist[]; extern const char kCloudPrintFile[]; diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_ru.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_ru.xtb index af8f2db25cbc8f..5308d3f4c1be24 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 @@ На этом устройстве запрещен вход с личным аккаунтом. Войдите в рабочий аккаунт. Если вы продолжите работу, не вводя текущий пароль для Windows, данные на устройстве могут быть безвозвратно утеряны. Указанный аккаунт уже используется на этом компьютере. Выполните вход, используя другой аккаунт. -Убедитесь, что устройство подключено к Интернету, и повторите попытку. +Убедитесь, что устройство подключено к интернету, и повторите попытку. Вход разрешен только пользователям G Suite Enterprise. Не удалось загрузить экран входа в аккаунт Google из-за проблемы, связанной с установкой Chrome. Обратитесь к администратору. Произошла внутренняя ошибка. diff --git a/chrome/renderer/autofill/form_control_click_detection_browsertest.cc b/chrome/renderer/autofill/form_control_click_detection_browsertest.cc index d81433d18263df..b684ece1ac94bf 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 @@ class FormControlClickDetectionTest : public ChromeRenderViewTest { void SetUp() override { ChromeRenderViewTest::SetUp(); // Must be set before loading HTML. - view_->GetWebView()->SetDefaultPageScaleLimits(1, 4); + web_view_->SetDefaultPageScaleLimits(1, 4); LoadHTML( "

" @@ -170,8 +170,8 @@ TEST_F(FormControlClickDetectionTest, TextAreaFocusedAndClicked) { 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, ScaledTextareaClicked) { 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/test/BUILD.gn b/chrome/test/BUILD.gn index 304ce09dd59432..c9db518b97592b 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn @@ -1442,6 +1442,7 @@ if (!is_android) { "../browser/media/test_license_server.h", "../browser/media/test_license_server_config.h", "../browser/media/unified_autoplay_browsertest.cc", + "../browser/media/webrtc/capture_handle_browsertest.cc", "../browser/media/webrtc/media_stream_devices_controller_browsertest.cc", "../browser/media/webrtc/media_stream_permission_browsertest.cc", "../browser/media/webrtc/test_stats_dictionary.cc", diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json index 122e504ef78c7d..45c24d54cb8c9d 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/webrtc/captured_page_main.html b/chrome/test/data/webrtc/captured_page_main.html new file mode 100644 index 00000000000000..27cb73fba92471 --- /dev/null +++ b/chrome/test/data/webrtc/captured_page_main.html @@ -0,0 +1,62 @@ + + + + + Capture Handle Test - Captured Page (totally-unique-captured-page-title) + + + + + +

Capture Handle Test - Captured Page

+ Link + bottom +









+









+









+









+









+









+









+









+









+









+









+









+









+









+









+









+









+









+

Bottom

+ top + + diff --git a/chrome/test/data/webrtc/captured_page_other.html b/chrome/test/data/webrtc/captured_page_other.html new file mode 100644 index 00000000000000..b3c6e95f108c1c --- /dev/null +++ b/chrome/test/data/webrtc/captured_page_other.html @@ -0,0 +1,28 @@ + + + + + Capture Handle Test - Captured Page Copy (totally-unique-DIFFERENT-captured-page-title) + + + + + +

Capture Handle Test - Captured Page

+ + diff --git a/chrome/test/data/webrtc/capturing_page_main.html b/chrome/test/data/webrtc/capturing_page_main.html new file mode 100644 index 00000000000000..f223bf846bcc8a --- /dev/null +++ b/chrome/test/data/webrtc/capturing_page_main.html @@ -0,0 +1,89 @@ + + + Capture Handle Test - Capturing Page + + + + +

Capture Handle Test - Capturing Page

+ + diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM index 4dea8125aa04fb..facdcb3f44021a 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/components/camera_app_ui/resources.h b/chromeos/components/camera_app_ui/resources.h index 609aa9e50ee1cc..2c85fffc4a668f 100644 --- a/chromeos/components/camera_app_ui/resources.h +++ b/chromeos/components/camera_app_ui/resources.h @@ -46,6 +46,7 @@ const struct { {"error_msg_take_photo_failed", IDS_ERROR_MSG_TAKE_PHOTO_FAILED}, {"error_msg_take_portrait_bokeh_photo_failed", IDS_ERROR_MSG_TAKE_PORTRAIT_BOKEH_PHOTO_FAILED}, + {"error_msg_video_too_short", IDS_ERROR_MSG_VIDEO_TOO_SHORT}, {"expert_custom_video_parameters", IDS_EXPERT_CUSTOM_VIDEO_PARAMETERS}, {"expert_mode_button", IDS_EXPERT_MODE_BUTTON}, {"expert_preview_metadata", IDS_EXPERT_PREVIEW_METADATA}, diff --git a/chromeos/components/camera_app_ui/resources/js/BUILD.gn b/chromeos/components/camera_app_ui/resources/js/BUILD.gn index 9fa4f66cb6f46e..5a635f44c58444 100644 --- a/chromeos/components/camera_app_ui/resources/js/BUILD.gn +++ b/chromeos/components/camera_app_ui/resources/js/BUILD.gn @@ -10,6 +10,7 @@ js_type_check("closure_compile") { closure_flags = default_closure_args + [ "language_in=ECMASCRIPT_2020", + "language_out=ECMASCRIPT_2020", "jscomp_error=strictCheckTypes", "conformance_configs=" + rebase_path("externs/conformance_config.textproto", root_build_dir), diff --git a/chromeos/components/camera_app_ui/resources/js/models/file_system_access_entry.js b/chromeos/components/camera_app_ui/resources/js/models/file_system_access_entry.js index 63921a328621e4..806482fbf8ea68 100644 --- a/chromeos/components/camera_app_ui/resources/js/models/file_system_access_entry.js +++ b/chromeos/components/camera_app_ui/resources/js/models/file_system_access_entry.js @@ -36,8 +36,9 @@ export class FileSystemAccessEntry { export class FileAccessEntry extends FileSystemAccessEntry { /** * @param {!FileSystemFileHandle} handle + * @param {?DirectoryAccessEntryImpl} parent */ - constructor(handle) { + constructor(handle, parent = null) { super(handle); /** @@ -45,6 +46,12 @@ export class FileAccessEntry extends FileSystemAccessEntry { * @private */ this.handle_ = handle; + + /** + * @type {?DirectoryAccessEntryImpl} + * @private + */ + this.parent_ = parent; } /** @@ -92,6 +99,19 @@ export class FileAccessEntry extends FileSystemAccessEntry { const file = await this.file(); return file.lastModified; } + + /** + * Deletes the file. + * @return {!Promise} + * @throws {!Error} Thrown when trying to delete file with no parent + * directory. + */ + async delete() { + if (this.parent_ === null) { + throw new Error('Failed to delete file due to no parent directory'); + } + return this.parent_.removeEntry(this.name); + } } /** @@ -158,6 +178,13 @@ export class DirectoryAccessEntry { * directory. */ async getDirectory({name, createIfNotExist}) {} + + /** + * Removes file by given |name| from the directory. + * @param {string} name The name of the file. + * @return {!Promise} + */ + async removeEntry(name) {} } /** @@ -167,8 +194,9 @@ export class DirectoryAccessEntry { export class DirectoryAccessEntryImpl extends FileSystemAccessEntry { /** * @param {!FileSystemDirectoryHandle} handle + * @param {?DirectoryAccessEntryImpl} parent */ - constructor(handle) { + constructor(handle, parent = null) { super(handle); /** @@ -176,6 +204,12 @@ export class DirectoryAccessEntryImpl extends FileSystemAccessEntry { * @private */ this.handle_ = handle; + + /** + * @type {?DirectoryAccessEntryImpl} + * @private + */ + this.parent_ = parent; } /** @@ -206,7 +240,7 @@ export class DirectoryAccessEntryImpl extends FileSystemAccessEntry { */ async getFile(name) { const handle = await this.handle_.getFileHandle(name, {create: false}); - return new FileAccessEntry(handle); + return new FileAccessEntry(handle, this); } /** @@ -242,7 +276,7 @@ export class DirectoryAccessEntryImpl extends FileSystemAccessEntry { } const handle = await this.handle_.getFileHandle(uniqueName, {create: true}); - return new FileAccessEntry(handle); + return new FileAccessEntry(handle, this); }); } @@ -255,7 +289,7 @@ export class DirectoryAccessEntryImpl extends FileSystemAccessEntry { name, {create: createIfNotExist}); assert(handle !== null); return new DirectoryAccessEntryImpl( - /** @type {!FileSystemDirectoryHandle} */ (handle)); + /** @type {!FileSystemDirectoryHandle} */ (handle), this); } catch (error) { if (!createIfNotExist && error.name === 'NotFoundError') { return null; @@ -264,6 +298,13 @@ export class DirectoryAccessEntryImpl extends FileSystemAccessEntry { } } + /** + * @override + */ + async removeEntry(name) { + return this.handle_.removeEntry(name); + } + /** * Gets the file handles in this directory if |isDirectory| is set to false. * If |isDirectory| is true, gets the directory entries instead. @@ -274,9 +315,9 @@ export class DirectoryAccessEntryImpl extends FileSystemAccessEntry { const results = []; for await (const handle of this.handle_.values()) { if (isDirectory && handle.kind === 'directory') { - results.push(new DirectoryAccessEntryImpl(handle)); + results.push(new DirectoryAccessEntryImpl(handle, this)); } else if (!isDirectory && handle.kind === 'file') { - results.push(new FileAccessEntry(handle)); + results.push(new FileAccessEntry(handle, this)); } } return results; diff --git a/chromeos/components/camera_app_ui/resources/js/models/lazy_directory_entry.js b/chromeos/components/camera_app_ui/resources/js/models/lazy_directory_entry.js index 81a58f9206da98..0c10a718b8bb7a 100644 --- a/chromeos/components/camera_app_ui/resources/js/models/lazy_directory_entry.js +++ b/chromeos/components/camera_app_ui/resources/js/models/lazy_directory_entry.js @@ -114,6 +114,16 @@ class LazyDirectoryEntry { return dir.getDirectory({name, createIfNotExist}); } + /** + * @override + */ + async removeEntry(name) { + if (this.directory_ === null) { + return null; + } + return this.directory_.removeEntry(name); + } + /** * Gets the directory which this entry points to. Create it if it does not * exist. diff --git a/chromeos/components/camera_app_ui/resources/js/models/mp4_video_processor.js b/chromeos/components/camera_app_ui/resources/js/models/mp4_video_processor.js index 0f6db045a3dee4..c0ef1e40ab2196 100644 --- a/chromeos/components/camera_app_ui/resources/js/models/mp4_video_processor.js +++ b/chromeos/components/camera_app_ui/resources/js/models/mp4_video_processor.js @@ -252,6 +252,7 @@ class Mp4VideoProcessor { this.inputDevice_ = new InputDevice(); this.outputDevice_ = new OutputDevice(output); this.jobQueue_ = new AsyncJobQueue(); + this.quitCallback_ = null; const args = [ // Make the procssing pipeline start earlier by shorten the initial @@ -312,6 +313,7 @@ class Mp4VideoProcessor { assert(stdin.fd === 0); assert(stdout.fd === 1); assert(stderr.fd === 2); + this.quitCallback_ = fs.quit; }, }; @@ -362,6 +364,22 @@ class Mp4VideoProcessor { await this.output_.close(); } + /** + * Cancels all the remaining tasks and quits the processor. + * @return {!Promise} Resolved when the processor quits. + */ + async cancel() { + await this.jobQueue_.clear(); + await this.output_.close(); + + // We quit the processor directly instead of calling close() to avoid mp4 + // video processor crashing and entering an unrecoverable state when trying + // to encode video file without receiving any data chunk. + if (this.quitCallback_ !== null) { + this.quitCallback_(); + } + } + /** * Expose the VideoProcessor constructor to given end point. * @param {!Port} endPoint diff --git a/chromeos/components/camera_app_ui/resources/js/models/video_processor_interface.js b/chromeos/components/camera_app_ui/resources/js/models/video_processor_interface.js index 3de4853d78fcc2..ccf3286ec3b63b 100644 --- a/chromeos/components/camera_app_ui/resources/js/models/video_processor_interface.js +++ b/chromeos/components/camera_app_ui/resources/js/models/video_processor_interface.js @@ -22,4 +22,12 @@ export class VideoProcessor { * @abstract */ async close() {} + + /** + * Cancels the remaining tasks and quits the processor. No more write + * operations are allowed. + * @return {!Promise} Resolved when the processor quits. + * @abstract + */ + async cancel() {} } diff --git a/chromeos/components/camera_app_ui/resources/js/models/video_saver.js b/chromeos/components/camera_app_ui/resources/js/models/video_saver.js index 8f18351c009e17..d9393c476282e1 100644 --- a/chromeos/components/camera_app_ui/resources/js/models/video_saver.js +++ b/chromeos/components/camera_app_ui/resources/js/models/video_saver.js @@ -77,6 +77,15 @@ export class VideoSaver { this.processor_.write(blob); } + /** + * Cancels and drops all the written video data. + * @return {!Promise} + */ + async cancel() { + await this.processor_.cancel(); + return this.file_.delete(); + } + /** * Finishes the write of video data parts and returns result video file. * @return {!Promise} Result video file. diff --git a/chromeos/components/camera_app_ui/resources/js/toast.js b/chromeos/components/camera_app_ui/resources/js/toast.js index 31d8bd8074b5fc..cd7f9fbf96da0e 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 @@ function update(message, spoken) { element.textContent = message; element.classList.toggle('spoken', spoken); - animate.play(element); + if (!spoken) { + animate.play(element); + } } /** diff --git a/chromeos/components/camera_app_ui/resources/js/type.js b/chromeos/components/camera_app_ui/resources/js/type.js index e79a2d2fa5ae79..c364a72f257c95 100644 --- a/chromeos/components/camera_app_ui/resources/js/type.js +++ b/chromeos/components/camera_app_ui/resources/js/type.js @@ -322,3 +322,17 @@ export class EmptyThumbnailError extends Error { this.name = this.constructor.name; } } + +/** + * Throws when the recording is ended with no chunk returned. + */ +export class NoChunkError extends Error { + /** + * @param {string=} message + * @public + */ + constructor(message = 'No chunk is received during recording session') { + super(message); + this.name = this.constructor.name; + } +} diff --git a/chromeos/components/camera_app_ui/resources/js/views/camera/mode/record_time.js b/chromeos/components/camera_app_ui/resources/js/views/camera/mode/record_time.js index e30c9b134746e5..f037e7f655331d 100644 --- a/chromeos/components/camera_app_ui/resources/js/views/camera/mode/record_time.js +++ b/chromeos/components/camera_app_ui/resources/js/views/camera/mode/record_time.js @@ -32,6 +32,20 @@ export class RecordTime { * @private */ this.ticks_ = 0; + + /** + * The timestamp when the recording starts. + * @type {number} + * @private + */ + this.startTimestamp_ = 0; + + /** + * The total duration of the recording in milliseconds. + * @type {number} + * @private + */ + this.totalDuration_ = 0; } /** @@ -61,6 +75,7 @@ export class RecordTime { start({resume}) { if (!resume) { this.ticks_ = 0; + this.totalDuration_ = 0; } this.update_(this.ticks_); this.recordTime_.hidden = false; @@ -69,12 +84,13 @@ export class RecordTime { this.ticks_++; this.update_(this.ticks_); }, 1000); + + this.startTimestamp_ = performance.now(); } /** * Stops counting and showing the elapsed recording time. * @param {{pause: boolean}} param If the time count is paused temporarily. - * @return {number} Recorded time in 1 minute buckets. */ stop({pause}) { speak('status_msg_recording_stopped'); @@ -82,12 +98,28 @@ export class RecordTime { clearInterval(this.tickTimeout_); this.tickTimeout_ = null; } - const mins = Math.ceil(this.ticks_ / 60); if (!pause) { this.ticks_ = 0; this.recordTime_.hidden = true; this.update_(0); } - return mins; + + this.totalDuration_ += performance.now() - this.startTimestamp_; + } + + /** + * Returns the recorded duration in minutes. + * @return {number} + */ + inMinutes() { + return Math.ceil(this.totalDuration_ / 1000 / 60); + } + + /** + * Returns the recorded duration in milliseconds. + * @return {number} + */ + inMilliseconds() { + return this.totalDuration_; } } diff --git a/chromeos/components/camera_app_ui/resources/js/views/camera/mode/video.js b/chromeos/components/camera_app_ui/resources/js/views/camera/mode/video.js index 5c3b5a71a20f50..9f0fc66129aed7 100644 --- a/chromeos/components/camera_app_ui/resources/js/views/camera/mode/video.js +++ b/chromeos/components/camera_app_ui/resources/js/views/camera/mode/video.js @@ -27,6 +27,7 @@ import * as toast from '../../../toast.js'; import { CanceledError, Facing, // eslint-disable-line no-unused-vars + NoChunkError, PerfEvent, Resolution, ResolutionList, // eslint-disable-line no-unused-vars @@ -54,6 +55,9 @@ const encoderPreference = new Map([ */ let avc1Parameters = null; +// The minimum duration of videos captured via cca. +const MINIMUM_VIDEO_DURATION_IN_MILLISECONDS = 500; + /** * Sets avc1 parameter used in video recording. * @param {?h264.EncoderParameters} params @@ -361,23 +365,44 @@ export class Video extends ModeBase { this.recordTime_.start({resume: false}); let /** ?VideoSaver */ videoSaver = null; - let /** number */ duration = 0; + const isVideoTooShort = () => this.recordTime_.inMilliseconds() < + MINIMUM_VIDEO_DURATION_IN_MILLISECONDS; + try { - videoSaver = await this.captureVideo_(); + try { + videoSaver = await this.captureVideo_(); + } finally { + this.recordTime_.stop({pause: false}); + sound.play(dom.get('#sound-rec-end', HTMLAudioElement)); + await this.snapshots_.flush(); + } } catch (e) { - toast.show('error_msg_empty_recording'); - throw e; - } finally { - duration = this.recordTime_.stop({pause: false}); + // Tolerates the error if it is due to the very short duration. Reports + // for other errors. + if (!(e instanceof NoChunkError && isVideoTooShort())) { + toast.show('error_msg_empty_recording'); + throw e; + } + } + + if (isVideoTooShort()) { + toast.show('error_msg_video_too_short'); + if (videoSaver !== null) { + await videoSaver.cancel(); + } + return; } - sound.play(dom.get('#sound-rec-end', HTMLAudioElement)); const settings = this.stream_.getVideoTracks()[0].getSettings(); const resolution = new Resolution(settings.width, settings.height); state.set(PerfEvent.VIDEO_CAPTURE_POST_PROCESSING, true); try { - await this.handler_.handleResultVideo(new VideoResult( - {resolution, duration, videoSaver, everPaused: this.everPaused_})); + await this.handler_.handleResultVideo(new VideoResult({ + resolution, + duration: this.recordTime_.inMinutes(), + videoSaver, + everPaused: this.everPaused_, + })); state.set( PerfEvent.VIDEO_CAPTURE_POST_PROCESSING, false, {resolution, facing: this.facing_}); @@ -386,8 +411,6 @@ export class Video extends ModeBase { PerfEvent.VIDEO_CAPTURE_POST_PROCESSING, false, {hasError: true}); throw e; } - - await this.snapshots_.flush(); } /** @@ -413,45 +436,51 @@ export class Video extends ModeBase { async captureVideo_() { const saver = await this.handler_.createVideoSaver(); - return new Promise((resolve, reject) => { - let noChunk = true; - - const ondataavailable = (event) => { - if (event.data && event.data.size > 0) { - noChunk = false; - saver.write(event.data); - } - }; - const onstop = (event) => { - state.set(state.State.RECORDING, false); + try { + await new Promise((resolve, reject) => { + let noChunk = true; + + const ondataavailable = (event) => { + if (event.data && event.data.size > 0) { + noChunk = false; + saver.write(event.data); + } + }; + const onstop = async (event) => { + state.set(state.State.RECORDING, false); + state.set(state.State.RECORDING_PAUSED, false); + state.set(state.State.RECORDING_UI_PAUSED, false); + + this.mediaRecorder_.removeEventListener( + 'dataavailable', ondataavailable); + this.mediaRecorder_.removeEventListener('stop', onstop); + + if (noChunk) { + reject(new NoChunkError()); + } else { + // TODO(yuli): Handle insufficient storage. + resolve(saver); + } + }; + const onstart = () => { + state.set(state.State.RECORDING, true); + this.mediaRecorder_.removeEventListener('start', onstart); + }; + this.mediaRecorder_.addEventListener('dataavailable', ondataavailable); + this.mediaRecorder_.addEventListener('stop', onstop); + this.mediaRecorder_.addEventListener('start', onstart); + + window.addEventListener('beforeunload', beforeUnloadListener); + + this.mediaRecorder_.start(100); state.set(state.State.RECORDING_PAUSED, false); state.set(state.State.RECORDING_UI_PAUSED, false); - - this.mediaRecorder_.removeEventListener( - 'dataavailable', ondataavailable); - this.mediaRecorder_.removeEventListener('stop', onstop); - - if (noChunk) { - reject(new Error('Video blob error.')); - } else { - // TODO(yuli): Handle insufficient storage. - resolve(saver); - } - }; - const onstart = () => { - state.set(state.State.RECORDING, true); - this.mediaRecorder_.removeEventListener('start', onstart); - }; - this.mediaRecorder_.addEventListener('dataavailable', ondataavailable); - this.mediaRecorder_.addEventListener('stop', onstop); - this.mediaRecorder_.addEventListener('start', onstart); - - window.addEventListener('beforeunload', beforeUnloadListener); - - this.mediaRecorder_.start(100); - state.set(state.State.RECORDING_PAUSED, false); - state.set(state.State.RECORDING_UI_PAUSED, false); - }); + }); + return saver; + } catch (e) { + await saver.cancel(); + throw e; + } } } diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings.grd b/chromeos/components/camera_app_ui/resources/strings/camera_strings.grd index 407bb6a7cc1463..a109731fb9dc5d 100644 --- a/chromeos/components/camera_app_ui/resources/strings/camera_strings.grd +++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings.grd @@ -466,6 +466,9 @@ If your feedback is about image or video quality, please attach a sample photo o Paused + + The video is not saved since it is too short. + diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_grd/IDS_ERROR_MSG_VIDEO_TOO_SHORT.png.sha1 b/chromeos/components/camera_app_ui/resources/strings/camera_strings_grd/IDS_ERROR_MSG_VIDEO_TOO_SHORT.png.sha1 new file mode 100644 index 00000000000000..e940b848eb4560 --- /dev/null +++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_grd/IDS_ERROR_MSG_VIDEO_TOO_SHORT.png.sha1 @@ -0,0 +1 @@ +b2626b33abff403cadccdd79d32901163884e88d \ No newline at end of file diff --git a/chromeos/crosapi/mojom/BUILD.gn b/chromeos/crosapi/mojom/BUILD.gn index b0c010d784256f..1ce489f182762f 100644 --- a/chromeos/crosapi/mojom/BUILD.gn +++ b/chromeos/crosapi/mojom/BUILD.gn @@ -29,6 +29,7 @@ mojom("mojom") { "message_center.mojom", "metrics_reporting.mojom", "notification.mojom", + "power.mojom", "prefs.mojom", "screen_manager.mojom", "select_file.mojom", diff --git a/chromeos/crosapi/mojom/crosapi.mojom b/chromeos/crosapi/mojom/crosapi.mojom index a499f39f415ee5..98eaf5002f363c 100644 --- a/chromeos/crosapi/mojom/crosapi.mojom +++ b/chromeos/crosapi/mojom/crosapi.mojom @@ -23,6 +23,7 @@ import "chromeos/crosapi/mojom/keystore_service.mojom"; import "chromeos/crosapi/mojom/local_printer.mojom"; import "chromeos/crosapi/mojom/message_center.mojom"; import "chromeos/crosapi/mojom/metrics_reporting.mojom"; +import "chromeos/crosapi/mojom/power.mojom"; import "chromeos/crosapi/mojom/prefs.mojom"; import "chromeos/crosapi/mojom/screen_manager.mojom"; import "chromeos/crosapi/mojom/select_file.mojom"; @@ -60,8 +61,8 @@ struct BrowserInfo { // please note the milestone when you added it, to help us reason about // compatibility between the client applications and older ash-chrome binaries. // -// Next version: 30 -// Next method id: 35 +// Next version: 31 +// Next method id: 36 [Stable, Uuid="8b79c34f-2bf8-4499-979a-b17cac522c1e", RenamedFrom="crosapi.mojom.AshChromeService"] interface Crosapi { @@ -126,7 +127,8 @@ interface Crosapi { // Binds the DriveIntegrationService interface for getting information about // the local Google Drive mount. // Added in M93. - [MinVersion=29] BindDriveIntegrationService@34(pending_receiver receiver); + [MinVersion=29] BindDriveIntegrationService@34( + pending_receiver receiver); // Binds the FileManager interface for showing files, folders, etc. // Added in M88. @@ -210,6 +212,10 @@ interface Crosapi { [MinVersion=6] BindMediaSessionAudioFocusDebug@11( pending_receiver receiver); + // Binds the Power interface for power management. + // Added in M92. + [MinVersion=30] BindPower@35(pending_receiver receiver); + // Binds the System Display interface for querying display info. // Added in M92. [MinVersion=24] BindSystemDisplay@29( diff --git a/chromeos/crosapi/mojom/power.mojom b/chromeos/crosapi/mojom/power.mojom new file mode 100644 index 00000000000000..87dd3dc253f7ac --- /dev/null +++ b/chromeos/crosapi/mojom/power.mojom @@ -0,0 +1,23 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +module crosapi.mojom; + +import "services/device/public/mojom/wake_lock.mojom"; + +// An empty interface to enable Power.AddPowerSaveBlocker() to maintain a +// connection to its caller, and free resources on disconnect. +[Stable, Uuid="742bde40-5689-44bb-807e-6252ff54d635"] +interface PowerWakeLock { +}; + +// Crosapi support for chrome.system.display extensions API. +[Stable, Uuid="878f8be2-ad59-4cc6-84ef-abc5102da696"] +interface Power { + // Creates a PowerSaveBlocker that lasts until |lock| disconnects. + AddPowerSaveBlocker@0(pending_remote lock, + device.mojom.WakeLockType type, + device.mojom.WakeLockReason reason, + string description); +}; diff --git a/chromeos/dbus/session_manager/session_manager_client.cc b/chromeos/dbus/session_manager/session_manager_client.cc index 4f97cfec8463ee..8a680f77d6d006 100644 --- a/chromeos/dbus/session_manager/session_manager_client.cc +++ b/chromeos/dbus/session_manager/session_manager_client.cc @@ -24,7 +24,6 @@ #include "base/memory/platform_shared_memory_region.h" #include "base/memory/read_only_shared_memory_region.h" #include "base/memory/writable_shared_memory_region.h" -#include "base/metrics/histogram_functions.h" #include "base/path_service.h" #include "base/strings/string_util.h" #include "base/threading/thread_task_runner_handle.h" @@ -709,18 +708,6 @@ class SessionManagerClientImpl : public SessionManagerClient { std::move(callback).Run(response); } - // Called when `StorePolicyEx()` finishes. - void OnStorePolicyEx(base::TimeTicks store_policy_ex_start_time, - VoidDBusMethodCallback callback, - dbus::Response* response) { - base::TimeTicks now = base::TimeTicks::Now(); - DCHECK(!store_policy_ex_start_time.is_null()); - base::TimeDelta delta = now - store_policy_ex_start_time; - base::UmaHistogramMediumTimes("Enterprise.StorePolicy.Duration", delta); - - OnVoidMethod(std::move(callback), response); - } - // Non-blocking call to Session Manager to retrieve policy. void CallRetrievePolicy(const login_manager::PolicyDescriptor& descriptor, RetrievePolicyCallback callback) { @@ -784,17 +771,13 @@ class SessionManagerClientImpl : public SessionManagerClient { writer.AppendArrayOfBytes( reinterpret_cast(policy_blob.data()), policy_blob.size()); - // TODO(crbug/1155533) On grunt devices, initially storing device policy may - // take about 45s, which is longer than the default timeout for dbus calls. - // We need to investigate why this is happening. In the meantime, increase - // the timeout to make sure enrollment does not fail. - // Record the timing to find a reasonable timeout value. - base::TimeTicks store_policy_ex_start_time = base::TimeTicks::Now(); + // The timeout is intentionally chosen to be that big because on some + // devices the operation is slow and a short timeout would lead to + // unnecessary enrollment failures. See crbug.com/1155533 for context. session_manager_proxy_->CallMethod( - &method_call, /*timeout_ms=*/90000, - base::BindOnce(&SessionManagerClientImpl::OnStorePolicyEx, - weak_ptr_factory_.GetWeakPtr(), - store_policy_ex_start_time, std::move(callback))); + &method_call, /*timeout_ms=*/180000, + base::BindOnce(&SessionManagerClientImpl::OnVoidMethod, + weak_ptr_factory_.GetWeakPtr(), std::move(callback))); } // Called when kSessionManagerRetrieveActiveSessions method is complete. diff --git a/chromeos/lacros/lacros_chrome_service_impl.cc b/chromeos/lacros/lacros_chrome_service_impl.cc index f40de44601e27f..eb1414c5a03784 100644 --- a/chromeos/lacros/lacros_chrome_service_impl.cc +++ b/chromeos/lacros/lacros_chrome_service_impl.cc @@ -31,6 +31,7 @@ #include "chromeos/crosapi/mojom/local_printer.mojom.h" #include "chromeos/crosapi/mojom/message_center.mojom.h" #include "chromeos/crosapi/mojom/metrics_reporting.mojom.h" +#include "chromeos/crosapi/mojom/power.mojom.h" #include "chromeos/crosapi/mojom/prefs.mojom.h" #include "chromeos/crosapi/mojom/screen_manager.mojom.h" #include "chromeos/crosapi/mojom/select_file.mojom.h" @@ -238,6 +239,8 @@ LacrosChromeServiceImpl::LacrosChromeServiceImpl( ConstructRemote(); + ConstructRemote(); ConstructRemote(); ConstructRemote)"); // Ensure that Android runs at default page scale. - view_->GetWebView()->SetPageScaleFactor(1.0); + web_view_->SetPageScaleFactor(1.0); std::vector iframes = [this] { WebDocument doc = GetMainFrame()->GetDocument(); 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 8057bfb5eb0dcd..5e1be68a43c1ae 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 @@ bool CollectUserDataAction::CreateOptionsFromProto() { 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 @@ bool CollectUserDataAction::CreateOptionsFromProto() { 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 @@ bool CollectUserDataAction::CreateOptionsFromProto() { 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( + 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 @@ bool CollectUserDataAction::CheckInitialAutofillDataComplete( 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 @@ bool CollectUserDataAction::IsUserDataComplete( 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 @@ void CollectUserDataAction::UpdatePersonalDataManagerProfiles( 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 99f65c1fdcba0f..f6422c5b3644dd 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 @@ TEST_F(CollectUserDataActionTest, UserDataComplete_ShippingAddress) { 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 @@ TEST_F(CollectUserDataActionTest, UserDataComplete_ShippingAddress) { user_model_.SetSelectedAutofillProfile( "shipping_address", std::make_unique(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(profile), @@ -1101,6 +1103,15 @@ TEST_F(CollectUserDataActionTest, UserDataComplete_ShippingAddress) { 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(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(profile), diff --git a/components/autofill_assistant/browser/service.proto b/components/autofill_assistant/browser/service.proto index 5fe6480fb63a49..f4ef6c3c07265b 100644 --- a/components/autofill_assistant/browser/service.proto +++ b/components/autofill_assistant/browser/service.proto @@ -2350,8 +2350,10 @@ message CollectUserDataProto { // 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 829df06fac0e19..0f21772a7c7451 100644 --- a/components/autofill_assistant/browser/user_data.h +++ b/components/autofill_assistant/browser/user_data.h @@ -193,6 +193,7 @@ struct CollectUserDataOptions { std::string credit_card_expired_text; std::vector required_contact_data_pieces; + std::vector 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 b69fa8e9aabadd..4c7cd70c9d8c1e 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 @@ std::u16string GetProfileFullName(const autofill::AutofillProfile& profile) { profile.GetRawInfo(autofill::NAME_LAST)); } -int GetAddressCompletenessRating(const CollectUserDataOptions& options, - const autofill::AutofillProfile& profile) { - auto address_data = autofill::i18n::CreateAddressDataFromAutofillProfile( - profile, kDefaultLocale); - std::multimap - 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 @@ bool CompletenessCompareContacts(const CollectUserDataOptions& options, 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 + 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,41 +297,70 @@ int GetDefaultContactProfile( return sorted_indices[0]; } -} // namespace user_data +std::vector GetShippingAddressValidationErrors( + const autofill::AutofillProfile* profile, + const CollectUserDataOptions& collect_user_data_options) { + std::vector errors; + if (!collect_user_data_options.request_shipping) { + return errors; + } -std::unique_ptr MakeUniqueFromProfile( - const autofill::AutofillProfile& profile) { - auto unique_profile = std::make_unique(profile); - // Temporary workaround so that fields like first/last name a properly - // populated. - unique_profile->FinalizeAfterImport(); - return unique_profile; + if (!collect_user_data_options.required_shipping_address_data_pieces + .empty()) { + errors = GetValidationErrors( + profile + ? field_formatter::CreateAutofillMappings(*profile, kDefaultLocale) + : std::map(), + 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 SortAddressesByCompleteness( +std::vector SortShippingAddressesByCompleteness( const CollectUserDataOptions& collect_user_data_options, const std::vector>& profiles) { std::vector 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 CompletenessCompareShippingAddresses( + collect_user_data_options, *profiles[i], *profiles[j]); }); return profile_indices; } -int GetDefaultAddressProfile( +int GetDefaultShippingAddressProfile( const CollectUserDataOptions& collect_user_data_options, const std::vector>& profiles) { if (profiles.empty()) { return -1; } auto sorted_indices = - SortAddressesByCompleteness(collect_user_data_options, profiles); + SortShippingAddressesByCompleteness(collect_user_data_options, profiles); return sorted_indices[0]; } +} // namespace user_data + +std::unique_ptr MakeUniqueFromProfile( + const autofill::AutofillProfile& profile) { + auto unique_profile = std::make_unique(profile); + // Temporary workaround so that fields like first/last name a properly + // populated. + unique_profile->FinalizeAfterImport(); + return unique_profile; +} + std::vector SortPaymentInstrumentsByCompleteness( const CollectUserDataOptions& collect_user_data_options, const std::vector>& @@ -372,13 +421,6 @@ bool CompareContactDetails( 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 81e0024d0d5e77..b408bf0bfef010 100644 --- a/components/autofill_assistant/browser/user_data_util.h +++ b/components/autofill_assistant/browser/user_data_util.h @@ -39,25 +39,29 @@ int GetDefaultContactProfile( const CollectUserDataOptions& collect_user_data_options, const std::vector>& profiles); -} // namespace user_data - -std::unique_ptr MakeUniqueFromProfile( - const autofill::AutofillProfile& profile); +std::vector 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 SortAddressesByCompleteness( +std::vector SortShippingAddressesByCompleteness( const CollectUserDataOptions& collect_user_data_options, const std::vector>& 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>& profiles); +} // namespace user_data + +std::unique_ptr 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 @@ bool CompareContactDetails( 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 559b4f3bef2e9c..8480cfd39f1c93 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 @@ TEST(UserDataUtilTest, SortsCompleteAddressesAlphabetically) { CollectUserDataOptions options; std::vector 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(); @@ -226,7 +226,7 @@ TEST(UserDataUtilTest, SortsAddressesByCompleteness) { auto profile_complete = std::make_unique(); 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> profiles; @@ -236,7 +236,33 @@ TEST(UserDataUtilTest, SortsAddressesByCompleteness) { CollectUserDataOptions options; std::vector 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::test::SetProfileInfo(profile_no_email.get(), "Adam", "", "West", "", + "", "Brandschenkestrasse 110", "", "Zurich", + "", "8002", "CH", ""); + + auto profile_complete = std::make_unique(); + 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> 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 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 @@ TEST(UserDataUtilTest, GetDefaultAddressSelectionForEmptyProfiles) { std::vector> profiles; CollectUserDataOptions options; - EXPECT_THAT(GetDefaultAddressProfile(options, profiles), -1); + EXPECT_THAT(user_data::GetDefaultShippingAddressProfile(options, profiles), + -1); } TEST(UserDataUtilTest, GetDefaultAddressSelectionForCompleteProfiles) { @@ -270,7 +297,8 @@ TEST(UserDataUtilTest, GetDefaultAddressSelectionForCompleteProfiles) { CollectUserDataOptions options; - EXPECT_THAT(GetDefaultAddressProfile(options, profiles), 1); + EXPECT_THAT(user_data::GetDefaultShippingAddressProfile(options, profiles), + 1); } TEST(UserDataUtilTest, SortsCreditCardsByCompleteness) { @@ -625,25 +653,74 @@ TEST(UserDataUtilTest, CompleteShippingAddressNotRequired) { 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_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_TRUE(IsCompleteShippingAddress(&address, require_shipping_options)); + 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 30c1712b14597f..aa52aff3fe2839 100644 --- a/components/autofill_assistant_strings.grdp +++ b/components/autofill_assistant_strings.grdp @@ -3,6 +3,9 @@ Continue + + Information missing + Sorry, something went wrong. 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 00000000000000..0c2f037886da2e --- /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/translations/browser_ui_strings_te.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb index 6f3e60c721e5d8..6660b2405d51ad 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 @@ మీరు కోసం అన్ని సైట్ అనుమతులను ఖచ్చితంగా రీసెట్ చేయాలనుకుంటున్నారా ? సైట్ మునుపటి ట్రాక్ -చిరునామాలు +అడ్రస్‌లు సైట్‌లు రక్షిత కంటెంట్‌ను ప్లే చేయడానికి ముందు అనుమతి కోసం అడుగుతాయి కుక్కీ డేటాను సేవ్ చేయడానికి, చదవడానికి సైట్‌లను అనుమతిస్తుంది (సిఫార్సు చేయబడింది) ప్రమాణపత్రం వ్యూయర్ diff --git a/components/exo/data_exchange_delegate.h b/components/exo/data_exchange_delegate.h index 4bbd623d3b81f1..3a70767abd4852 100644 --- a/components/exo/data_exchange_delegate.h +++ b/components/exo/data_exchange_delegate.h @@ -67,14 +67,6 @@ class DataExchangeDelegate { 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& data) const = 0; - // Reads pickle for FilesApp fs/sources with newline-separated filesystem // URLs. Validates that |source| is FilesApp. virtual std::vector ParseFileSystemSources( diff --git a/components/exo/seat.cc b/components/exo/seat.cc index 363f07057189fe..dd09411b62e0f4 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 @@ void Seat::OnFilenamesRead( base::OnceClosure callback, const std::string& mime_type, const std::vector& data) { - if (base::FeatureList::IsEnabled(features::kClipboardFilenames)) { - std::vector 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 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 2942c6ac3941bf..0bee86ac45966e 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, SetSelectionRTF) { } 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 @@ TEST_F(SeatTest, SetSelectionFilenames) { 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 550389e0c55297..56cd01173dc54a 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 @@ void TestDataExchangeDelegate::RunSendPickleCallback(std::vector urls) { .Run(base::RefCountedString::TakeString(&result)); } -base::Pickle TestDataExchangeDelegate::CreateClipboardFilenamesPickle( - ui::EndpointType source, - const std::vector& data) const { - base::Pickle result; - result.WriteData(reinterpret_cast(data.data()), data.size()); - return result; -} - std::vector 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 9daeb28399c8cc..a428f2f3da4e04 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 @@ class TestDataExchangeDelegate : public DataExchangeDelegate { void SendPickle(ui::EndpointType target, const base::Pickle& pickle, SendDataCallback callback) override; - base::Pickle CreateClipboardFilenamesPickle( - ui::EndpointType source, - const std::vector& data) const override; std::vector ParseFileSystemSources( const ui::DataTransferEndpoint* source, const base::Pickle& pickle) const override; diff --git a/components/os_crypt/key_storage_linux.cc b/components/os_crypt/key_storage_linux.cc index 53b1903ff04043..7faca2d58fa595 100644 --- a/components/os_crypt/key_storage_linux.cc +++ b/components/os_crypt/key_storage_linux.cc @@ -170,7 +170,7 @@ std::unique_ptr KeyStorageLinux::CreateServiceInternal( #if defined(USE_LIBSECRET) if (selected_backend == os_crypt::SelectedLinuxBackend::GNOME_ANY || selected_backend == os_crypt::SelectedLinuxBackend::GNOME_LIBSECRET) { - key_storage = std::make_unique(std::move(application_name)); + key_storage = std::make_unique(application_name); if (key_storage->WaitForInitOnTaskRunner()) { VLOG(1) << "OSCrypt using Libsecret as backend."; return key_storage; @@ -183,7 +183,7 @@ std::unique_ptr KeyStorageLinux::CreateServiceInternal( if (selected_backend == os_crypt::SelectedLinuxBackend::GNOME_ANY || selected_backend == os_crypt::SelectedLinuxBackend::GNOME_KEYRING) { key_storage = std::make_unique(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/paint_preview/browser/BUILD.gn b/components/paint_preview/browser/BUILD.gn index 41d74474d50f6d..7dc28043c38df2 100644 --- a/components/paint_preview/browser/BUILD.gn +++ b/components/paint_preview/browser/BUILD.gn @@ -2,6 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//build/config/chromeos/ui_mode.gni") import("//build/util/version.gni") import("//testing/test.gni") @@ -103,6 +104,7 @@ source_set("unit_tests") { ":test_support", "//base", "//base/test:test_support", + "//build:chromeos_buildflags", "//components/paint_preview/common:test_utils", "//content/public/browser", "//content/test:test_support", @@ -112,6 +114,10 @@ source_set("unit_tests") { "//url", ] + if (is_chromeos_lacros) { + deps += [ "//chromeos/lacros:test_support" ] + } + defines = [ "CHROME_VERSION_MAJOR=" + chrome_version_major, "CHROME_VERSION_MINOR=" + chrome_version_minor, diff --git a/components/paint_preview/browser/DEPS b/components/paint_preview/browser/DEPS index fea23bd726784e..e6e5c8e734191b 100644 --- a/components/paint_preview/browser/DEPS +++ b/components/paint_preview/browser/DEPS @@ -1,5 +1,6 @@ include_rules = [ "+cc/base", + "+chromeos/lacros", "+components/discardable_memory/service", "+components/keyed_service/core", "+components/services/paint_preview_compositor/public/mojom", diff --git a/components/paint_preview/browser/paint_preview_base_service_unittest.cc b/components/paint_preview/browser/paint_preview_base_service_unittest.cc index dcbde0b22ed4f6..79f06b56dc43b9 100644 --- a/components/paint_preview/browser/paint_preview_base_service_unittest.cc +++ b/components/paint_preview/browser/paint_preview_base_service_unittest.cc @@ -13,6 +13,7 @@ #include "base/strings/strcat.h" #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" +#include "build/chromeos_buildflags.h" #include "components/paint_preview/browser/paint_preview_base_service_test_factory.h" #include "components/paint_preview/browser/paint_preview_file_mixin.h" #include "components/paint_preview/common/mojom/paint_preview_recorder.mojom.h" @@ -26,6 +27,10 @@ #include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" +#if BUILDFLAG(IS_CHROMEOS_LACROS) +#include "chromeos/lacros/lacros_test_helper.h" +#endif + namespace paint_preview { namespace { @@ -192,6 +197,10 @@ class PaintPreviewBaseServiceTest } private: +#if BUILDFLAG(IS_CHROMEOS_LACROS) + // Instantiate LacrosService for WakeLock support during capturing. + chromeos::ScopedLacrosServiceTestHelper scoped_lacros_service_test_helper_; +#endif std::unique_ptr key_; std::unique_ptr rejection_policy_key_; }; diff --git a/components/permissions/BUILD.gn b/components/permissions/BUILD.gn index 8b429a9ced4b83..3545bd19a5c45d 100644 --- a/components/permissions/BUILD.gn +++ b/components/permissions/BUILD.gn @@ -37,6 +37,8 @@ source_set("permissions") { "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 713a96f0ccf72f..960ec4c350778b 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 @@ bool SensorPermissionContext::IsRestrictedToSecureOrigins() const { // origins and this is enforced by the renderer. return false; } + +} // namespace permissions diff --git a/chrome/browser/generic_sensor/sensor_permission_context.h b/components/permissions/contexts/sensor_permission_context.h similarity index 51% rename from chrome/browser/generic_sensor/sensor_permission_context.h rename to components/permissions/contexts/sensor_permission_context.h index 9ff55cc46b7d8f..d7cd9c3f7e61ee 100644 --- a/chrome/browser/generic_sensor/sensor_permission_context.h +++ b/components/permissions/contexts/sensor_permission_context.h @@ -2,26 +2,28 @@ // 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_ +#ifndef COMPONENTS_PERMISSIONS_CONTEXTS_SENSOR_PERMISSION_CONTEXT_H_ +#define COMPONENTS_PERMISSIONS_CONTEXTS_SENSOR_PERMISSION_CONTEXT_H_ -#include "base/macros.h" #include "components/permissions/permission_context_base.h" -class SensorPermissionContext : public permissions::PermissionContextBase { +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 permissions::PermissionRequestID& id, + void UpdateTabContext(const 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_ +} // 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 9d7ee81593c153..c86efe1f792be2 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 @@ enum class PrefLocation { kUserProfile, kSigninProfile, kLocalState, - kCrosSetting, }; PrefLocation GetPrefLocation(const base::Value& settings) { @@ -52,8 +51,6 @@ PrefLocation GetPrefLocation(const base::Value& settings) { 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 @@ void VerifyPolicyToPrefMappings(const base::FilePath& test_case_path, 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(pref_case->location()); diff --git a/components/policy/proto/device_management_backend.proto b/components/policy/proto/device_management_backend.proto index ac2908a56225b1..c74b916e393e19 100644 --- a/components/policy/proto/device_management_backend.proto +++ b/components/policy/proto/device_management_backend.proto @@ -748,7 +748,7 @@ message PolicyFetchResponse { // 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 @@ message ChromeDesktopReportRequest { // 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 @@ message DeviceInitialEnrollmentStateResponse { 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 375f0401dc19fd..e9cc612544fa43 100644 --- a/components/policy/resources/policy_templates_es-419.xtb +++ b/components/policy/resources/policy_templates_es-419.xtb @@ -3896,6 +3896,10 @@ Si ninguna de las entradas tiene un valor de Esta política también controla la recopilación de datos de diagnóstico y uso de Android. +Advertencia: 3DES se quitará por completo en la versión 95 de (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. + Permitir que el usuario decida si se usarán los servicios web de Google para solucionar errores de ortografía Establece el estado predeterminado del cursor grande en la pantalla de acceso. Lista separada por comas de las normas de omisión de proxy diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb index 4929b3fc1a6ee9..f01405efb96a52 100644 --- a/components/policy/resources/policy_templates_es.xtb +++ b/components/policy/resources/policy_templates_es.xtb @@ -3912,6 +3912,10 @@ Si se le asigna el valor False, no utilizará notific 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. Esta política también controla la recopilación de los datos de uso y diagnóstico de Android. +Advertencia: 3DES se eliminará totalmente en la versión 95 de (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. + Permitir que el usuario elija si se utilizan servicios web de Google para corregir errores ortográficos Establecer el estado predeterminado del cursor grande en la pantalla de inicio de sesión Lista de reglas de omisión de proxy separadas por comas diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb index 4b7da6f7113997..5ddc76bde876db 100644 --- a/components/policy/resources/policy_templates_fr.xtb +++ b/components/policy/resources/policy_templates_fr.xtb @@ -3886,6 +3886,10 @@ Lorsque cette règle n'est pas configurée, le paramètre par défaut utilisé c 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. Cette règle permet également de contrôler la collecte des données d'utilisation et de diagnostic sur les appareils Android. +Avertissement : 3DES sera complètement supprimé de 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. + Autoriser l'utilisateur à choisir si des services Web Google peuvent être utilisés pour corriger les fautes d'orthographe Définir l'état par défaut du grand curseur sur l'écran de connexion Liste de règles de contournement de proxy séparées par des virgules diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb index 6d5a13b13307dc..fd5970cd5f620a 100644 --- a/components/policy/resources/policy_templates_id.xtb +++ b/components/policy/resources/policy_templates_id.xtb @@ -3913,6 +3913,10 @@ Jika disetel ke Salah (False), tidak akan menggunakan Jika tidak, alamat IP lokal akan disembunyikan dengan hostname mDNS. Perlu diingat bahwa kebijakan ini akan melemahkan perlindungan IP lokal jika dibutuhkan oleh administrator. Kebijakan ini juga mengontrol pengumpulan data diagnostik dan penggunaan Android. +Peringatan: 3DES akan dihapus sepenuhnya dari 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. + Izinkan pengguna memilih apakah akan menggunakan layanan web Google untuk mengatasi kesalahan ejaan Setel status default kursor besar di layar masuk Peraturan mengabaikan proxy yang dipisahkan koma diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb index 0ea1b5139545fd..8d2053038e0083 100644 --- a/components/policy/resources/policy_templates_it.xtb +++ b/components/policy/resources/policy_templates_it.xtb @@ -3865,6 +3865,10 @@ Per ulteriori informazioni sui contesti sicuri, visita il sito https://www.w3.or 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. Questa norma controlla anche la raccolta dei dati diagnostici e sull'utilizzo di Android. +Avviso: 3DES verrà completamente rimosso da 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. + Consenti all'utente di decidere se usare o meno servizi web di Google per correggere gli errori ortografici Impostazione stato predefinito del puntatore grande nella schermata di accesso Elenco separato da virgole delle regole di bypass proxy diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb index be1ea8c70c1287..5901036f14fe68 100644 --- a/components/policy/resources/policy_templates_ko.xtb +++ b/components/policy/resources/policy_templates_ko.xtb @@ -3908,6 +3908,10 @@ False로 설정하면 에서 시스템 알림을 사 그러지 않으면 로컬 IP 주소가 mDNS 호스트 이름으로 숨겨집니다. 관리자가 필요로 하는 경우 이 정책은 로컬 IP의 보안 수준을 낮춥니다. 이 정책은 Android 사용 및 진단 데이터 수집도 제어합니다. +경고: 3DES는 버전 95(2021년 10월경)부터 에서 완전히 삭제되고 그 이후에는 정책이 작동하지 않습니다. + + 정책이 true로 설정되면 TLS의 3DES 암호화 스위트가 사용 설정됩니다. false로 설정되면 사용 중지됩니다. 설정되지 않으면 3DES 암호화 스위트가 기본적으로 사용 중지됩니다. 정책은 오래된 서버와 일시적으로 호환성을 유지하는 데 사용될 수 있습니다. 임시방편이므로 서버를 다시 구성해야 합니다. + 사용자가 맞춤법 오류를 해결하는 Google 웹 서비스의 사용 여부를 선택하도록 허용 로그인 화면에서 큰 커서의 기본 상태를 설정 쉼표로 구분된 프록시 우회 규칙 목록 diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb index 7905f7f6651158..ab2d5f994cbf4c 100644 --- a/components/policy/resources/policy_templates_nl.xtb +++ b/components/policy/resources/policy_templates_nl.xtb @@ -3842,6 +3842,10 @@ Voor meer informatie over een beveiligde context ga je naar https://www.w3.org/T 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. Met dit beleid wordt ook het gebruik van Android en het verzamelen van diagnostische gegevens bepaald. +Waarschuwing: 3DES wordt volledig verwijderd uit 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. + Toestaan dat gebruikers kiezen of Google-webservices worden gebruikt om spelfouten op te lossen De standaardstatus van de grote muisaanwijzer op het inlogscherm instellen Door komma's gescheiden lijst van regels voor proxyomzeiling diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb index e3b0956d1a0be5..9758a3c1aa0bdf 100644 --- a/components/policy/resources/policy_templates_pt-BR.xtb +++ b/components/policy/resources/policy_templates_pt-BR.xtb @@ -3888,6 +3888,10 @@ Se esta política for definida como "Falsa", o não u 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. Esta política também controla a coleta de dados de uso e diagnóstico do Android. +Aviso: o padrão 3DES será completamente removido na versão 95 do 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. + Permitir que o usuário escolha se serviços da Web do Google serão usados para solucionar erros de ortografia Definir estado padrão do cursor grande na tela de login Lista separada por vírgulas das regras de proxies ignoráveis diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb index 738a0257695f94..aa67873ef7d3ee 100644 --- a/components/policy/resources/policy_templates_ru.xtb +++ b/components/policy/resources/policy_templates_ru.xtb @@ -3874,6 +3874,10 @@ В противном случае локальные IP-адреса скрываются с помощью имен хоста mDNS. Обратите внимание, что это правило ослабляет защиту локальных IP-адресов (если это нужно администратору). Это правило также контролирует сбор данных об использовании и диагностике Android. +Внимание! Начиная с версии 95 (появится приблизительно в октябре 2021 года) в будет полностью прекращена поддержка 3DES. Это правило больше не будет работать. + + Если для правила задано значение True, наборы шифров 3DES в TLS включены. При значении False они отключены. Если правило не настроено, наборы шифров 3DES по умолчанию включены. Правило можно использовать, чтобы временно обеспечить совместимость с устаревшим сервером. Помните, что это временное решение и сервер следует настроить заново. + Разрешить пользователю самому решать, использовать ли веб-сервисы Google для проверки правописания Наличие или отсутствие большого курсора по умолчанию на экране входа Список правил для игнорирования прокси-сервера diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb index 943a20231b576a..732fcec58bcffd 100644 --- a/components/policy/resources/policy_templates_th.xtb +++ b/components/policy/resources/policy_templates_th.xtb @@ -3834,6 +3834,10 @@ หากไม่ ระบบจะปกปิดที่อยู่ IP ของเครื่องโดยใช้ชื่อโฮสต์ mDNS แทน โปรดทราบว่าหากผู้ดูแลระบบจำเป็นต้องปกป้อง IP ของเครื่อง นโยบายนี้จะทำให้การปกป้องนั้นด้อยประสิทธิภาพลง นโยบายนี้จะยังควบคุมการใช้งาน Android และการรวบรวมข้อมูลการวินิจฉัยด้วยเช่นกัน +คำเตือน: 3DES จะถูกนำออกจาก เวอร์ชัน 95 อย่างสมบูรณ์ (ประมาณเดือนตุลาคม 2021) และเมื่อนั้นนโยบายนี้จะหยุดทำงาน + + หากตั้งค่านโยบายนี้เป็น "จริง" จะเปิดใช้ชุดการเข้ารหัส 3DES ใน TLS หากตั้งค่าเป็น "เท็จ" จะปิดใช้ชุดการเข้ารหัสดังกล่าว หากไม่ได้ตั้งค่านโยบาย โดยค่าเริ่มต้นชุดการเข้ารหัส 3DES จะปิดใช้อยู่ ระบบอาจใช้นโยบายนี้เพื่อรักษาความเข้ากันได้กับเซิร์ฟเวอร์ที่ล้าสมัยเป็นการชั่วคราว ซึ่งเป็นมาตรการที่ใช้ทดแทนและควรจะต้องมีการกำหนดค่าเซิร์ฟเวอร์ใหม่ + อนุญาตให้ผู้ใช้เลือกหากใช้บริการเว็บของ Google เพื่อแก้ไขข้อผิดพลาดของการสะกดคำ ตั้งค่าสถานะเริ่มต้นของเคอร์เซอร์ขนาดใหญ่บนหน้าจอการเข้าสู่ระบบ รายการกฎการข้ามพร็อกซีที่คั่นด้วยเครื่องหมายจุลภาค diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb index f630484370679c..95a2dc1a5bc68c 100644 --- a/components/policy/resources/policy_templates_tr.xtb +++ b/components/policy/resources/policy_templates_tr.xtb @@ -3855,6 +3855,10 @@ Bu ayarı etkinleştirirseniz veya yapılandırmazsanız kullanıcılar şifrele 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. Bu politika, Android kullanımını ve teşhis verilerini toplama çalışmalarını da kontrol eder. +Uyarı: 3DES, 95 sürümünde (Ekim 2021 civarında) ü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. + Kullanıcının, Google web hizmetlerinin yazım hatalarını çözmek için kullanılıp kullanılmayacağını seçmesine izin ver Giriş ekranında büyük imleç modunun varsayılan durumunu ayarla Proxy atlama kurallarının noktalı virgül ile ayrılmış listesi diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb index b89793dae060e8..634aebd3264e59 100644 --- a/components/policy/resources/policy_templates_uk.xtb +++ b/components/policy/resources/policy_templates_uk.xtb @@ -3911,6 +3911,10 @@ В інших випадках імена хостів mDNS приховують локальні IP-адреси. Зауважте, що це правило послаблює захист локальних IP-адрес (якщо це вимагають адміністратори). Це правило також керує збиранням даних про використання та діагностику додатків Android. +Попередження: шифри 3DES буде видалено з у версії 95 (приблизно в жовтні 2021 року). Тоді ж перестане працювати це правило. + + Якщо для цього правила вибрати значення true, набори шрифтів 3DES у TLS буде ввімкнено. Якщо вибрати значення false, їх буде вимкнено. Якщо це правило не налаштувати, набори шрифтів 3DES будуть вимкнені за умовчанням. Це правило можна застосовувати, щоб підтримувати сумісність із застарілим сервером. Це тимчасовий захід, налаштування сервера потрібно змінити. + Дозволити користувачам вибирати, чи використовувати веб-сервіси Google для виправлення орфографічних помилок Налаштувати стан великого курсора за умовчанням на екрані входу Розділений комами список правил обходу проксі-сервера diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb index 2277ad84b4958d..f81a014eddd12c 100644 --- a/components/policy/resources/policy_templates_vi.xtb +++ b/components/policy/resources/policy_templates_vi.xtb @@ -1871,7 +1871,7 @@ Khi chính sách này được đặt thành false hoặc không được địn 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 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 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 @@ Nếu bạn đặt chính sách thành Tắt, thì s 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. -Hiển thị thông báo khi dung lượng ổ đĩa sắp hết +Hiện thông báo khi dung lượng ổ đĩa sắp hết Bật tính năng tối ưu hóa Web Proxy Auto-Discovery (WPAD) (Tự động phát hiện proxy web) 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 bạn đặt chính sách thành Tắt, thì s 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. 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. +Cảnh báo: Bộ thuật toán mật mã 3DES sẽ bị xóa hoàn toàn khỏi 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ủ. + 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 Đặt trạng thái của con trỏ lớn mặc định trên màn hình đăng nhập Danh sách quy tắc bỏ qua proxy được phân cách bằng dấu phẩy @@ -4038,7 +4042,7 @@ Nếu bạn đặt chính sách thành Tắt, thì s 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 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 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 @@ Nếu bạn đặt chính sách thành Tắt, thì s Lưu ý: (nếu đã được chỉ định) sẽ ghi đè chính sách này. 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ý Tên thư viện GSSAPI -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. +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. Google Cast @@ -5188,7 +5192,7 @@ Nếu bạn đặt chính sách thành Tắt, thì s 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. -Ngăn hiển thị hộp thoại đăng xuất khi cửa sổ cuối cùng đóng lại. +Ngăn hiện hộp thoại đăng xuất khi cửa sổ cuối cùng đóng lại. Làm mới chính sách động Nếu bạn đặt chính sách này, sẽ xử lý các loại nội dung được chỉ định. @@ -6062,7 +6066,7 @@ Bạn nên định cấu hình chính sách trên Windows qua GPO, mặc dù vi Đố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 (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. -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 +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 Ẩn cảnh báo về việc ngừng cung cấp Dung lượng ổ đĩa trống cần có cho 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 diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb index 9b3c1eb65ee6f2..06523bf5bf3ed8 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 的保护(如果管理员需要这样做)。 此政策亦用于控制对 Android 使用情况和诊断数据的收集。 +警告:我们将从 的 95 版(将于 2021 年 10 月左右推出)中彻底移除 3DES。届时,此政策将不再有效。 + + 如果此政策设为 true,系统将在传输层安全协议 (TLS) 中启用 3DES 加密套件。如果此政策设为 false,系统将在 TLS 中停用 3DES 加密套件。如果此政策未设置,3DES 加密套件会默认处于停用状态。此政策可用于暂时保持与过时服务器的兼容性。这只是一种权宜之计,正确的做法是重新配置服务器。 + 允许用户选择是否使用 Google 网络服务来修正拼写错误 设置登录屏幕上大号光标的默认状态 代理绕过规则的逗号分隔列表 diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb index 605fcb6b3b856d..602c4e011534c4 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 的保護程度。 這項政策也可以控制 Android 使用資料和診斷資料的收集設定。 +警告:我們將從 第 95 版中 (約在 2021 年 10 月推出) 完全移除 3DES,屆時這項政策也會停止運作。 + 如果將這項政策設為 True,系統會啟用傳輸層安全標準 (TLS) 中的 3DES 加密套件。如果設為 False,系統將停用這些加密套件。如果不設定這項政策,3DES 加密套件會預設為停用。這項政策可以暫時維持與過時伺服器的相容性。這種做法是權宜之計,正確的做法是重新設定伺服器。 + 允許使用者選擇是否要使用 Google 網路服務來解決拼字錯誤 設定大型游標在登入畫面的預設狀態 以逗號間隔的 Proxy 略過規則清單 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 e5e31e84aa41c1..2441f5c947c03e 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 @@ default ProfileDataSource getProfileDataSource() { @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 3dd5682ea151cb..e69cbc9b4fb761 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 @@ -48,14 +48,6 @@ interface ChildAccountStatusListener { @MainThread void removeObserver(AccountsChangeObserver observer); - /** - * Returns whether the account cache has already been populated. {@link #tryGetGoogleAccounts()} - * and similar methods will return instantly if the cache has been populated, otherwise these - * methods may block waiting for the cache to be populated. - */ - @AnyThread - boolean isCachePopulated(); - /** * Retrieves all Google accounts on the device from the cache. * Returns an empty array if an error occurs while getting account list. @@ -156,10 +148,4 @@ void updateCredentials( @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 74e331e2756243..6a5441f8a527da 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 @@ -112,16 +112,6 @@ public void removeObserver(AccountsChangeObserver observer) { assert success : "Can't find observer"; } - /** - * Returns whether the account cache has already been populated. {@link #tryGetGoogleAccounts()} - * and similar methods will return instantly if the cache has been populated, otherwise these - * methods may block waiting for the cache to be populated. - */ - @Override - public boolean isCachePopulated() { - return mFilteredAccounts.get() != null; - } - @Override public Optional> getGoogleAccounts() { return Optional.fromNullable(mFilteredAccounts.get()); @@ -274,14 +264,6 @@ public String getAccountGaiaId(String accountEmail) { return mDelegate.getAccountGaiaId(accountEmail); } - /** - * Checks whether Google Play services is available. - */ - @Override - public boolean isGooglePlayServicesAvailable() { - return mDelegate.isGooglePlayServicesAvailable(); - } - private void updateCanOfferExtendedSyncPromos(List accounts) { new AsyncTask() { @Override diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeTest.java b/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeTest.java index 879d1df5d9b5aa..8722f6b0cd4391 100644 --- a/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeTest.java +++ b/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeTest.java @@ -76,7 +76,7 @@ public void tearDown() { @SmallTest public void testIsCachePopulated() throws InterruptedException { // Cache shouldn't be populated until getAccountsSync is unblocked. - assertFalse(AccountManagerFacadeProvider.getInstance().isCachePopulated()); + assertFalse(AccountManagerFacadeProvider.getInstance().getGoogleAccounts().isPresent()); mDelegate.unblockGetAccounts(); CountDownLatch countDownLatch = new CountDownLatch(1); @@ -86,7 +86,7 @@ public void testIsCachePopulated() throws InterruptedException { }); // Wait for cache population to finish. countDownLatch.await(); - assertTrue(AccountManagerFacadeProvider.getInstance().isCachePopulated()); + assertTrue(AccountManagerFacadeProvider.getInstance().getGoogleAccounts().isPresent()); } @Test 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 982dc71d04c087..6d2322236872d8 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 @@ public String getAccountGaiaId(String accountEmail) { } } - @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 04c80c573b7683..e5615ae007e03b 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 @@ public static void resetForTests() { } /** - * Gets the corresponding {@link AccountInfo} of the given account email asynchronously. + * Gets the corresponding {@link AccountInfo} of the given account email. */ - public Promise getAccountInfoByEmailAsync(String email) { + public Promise getAccountInfoByEmail(String email) { final Promise 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 c809e991d7d2c3..b5eccb8bbd0c74 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 @@ -60,11 +60,6 @@ public String getAccountGaiaId(String accountEmail) { return "gaia-id-" + accountEmail.replace("@", "_at_"); } - @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 2d65cfcff93f30..e196f4648aa2b8 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 @@ -70,11 +70,6 @@ public void removeObserver(AccountsChangeObserver observer) { mObservers.remove(observer); } - @Override - public boolean isCachePopulated() { - return true; - } - @Override public Optional> getGoogleAccounts() { List accounts = new ArrayList<>(); @@ -143,11 +138,6 @@ public String getAccountGaiaId(String accountEmail) { 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 f9ca4c2e8b2eb0..be6a28243d91db 100644 --- a/components/strings/components_strings_am.xtb +++ b/components/strings/components_strings_am.xtb @@ -727,6 +727,7 @@ ባዮሜትሪክስ የChrome አዝራርን ያዘምኑ፣ Chromeን ለማዘመን ከእርስዎ Chrome ቅንብሮች ሆነው አስገባን ይጫኑ መሳቢያ 5 +ወደ Google መለያ አስቀምጥ መረጃ ጠቋሚ-4x6-Ext መተግበሪያ፦ ማረጋገጥ ተሳክቷል @@ -1401,6 +1402,7 @@ ላይ ያለው ድረ-ገፅ ለጊዜው ተበላሽቶ ሊሆን ይችላል ወይም በቋሚነት ወደ አዲስ የድር አድራሻ ተንቀሳቅሶ ሊሆን ይችላል። ለእዚህ ቀርቧል የእርስዎ Google መለያ myactivity.google.com ላይ ሌሎች የአሰሳ ታሪክ ዓይነቶች ሊኖረው ይችላል። +የጉዞን ከቆመበት ቀጥል ቁልፍ፣ ጉዞዎን ከቆመበት ለመቀጠል አስገባን ይጫኑ እና በChrome ታሪክዎ ውስጥ አግባብነት ያለው እንቅስቃሴን ይመልከቱ ወደ ቅንጥብ ሰሌዳው የተቀዱ ጽሑፍ እና ምስሎችን ይመልከቱ የእርስዎን UPI መታወቂያ ያስታውሳሉ? ምናባዊ ካርድ ይመልከቱ @@ -1476,6 +1478,7 @@ ከአሁን በኋላ የንኪ መታወቂያን በመጠቀም የእርስዎን ካርዶች በበለጠ ፍጥነት ያረጋግጡ ቁሳዊ የበር እጥፋት +በእርስዎ የChrome ታሪክ ውስጥ አግባብነት ያለው እንቅስቃሴን ለማየት ጉዞዎን ከቆመበት ይቀጥሉ ስልክ ቁጥርዎን ያረጋግጡ የዕውቂያ መረጃን ያርትዑ ማገናኘት አሻፈረኝ ብሏል። @@ -1527,6 +1530,7 @@ አጽዳ ኩኪዎችን እና የጣቢያ ውሂብን ይድረሱ። {COUNT,plural, =0{ምንም}=1{ከ1 ጣቢያ (ከእርስዎ የGoogle መለያ ዘግተው እንዲወጡ አይደረጉም)}one{ከ# ጣቢያዎች (ከእርስዎ የGoogle መለያ ዘግተው እንዲወጡ አይደረጉም)}other{ከ# ጣቢያዎች (ከእርስዎ የGoogle መለያ ዘግተው እንዲወጡ አይደረጉም)}} +ጉዞን ከቆመበት ቀጥል የእርስዎ አስተዳዳሪ በርቀት የአሳሽዎን ውቅረት መቀየር ይችላል። በዚህ መሣሪያ ላይ ያለ እንቅስቃሴ ከChrome ውጭም ሊስተዳደር ይችላል። ባለጭረት ቅርጸ-ቁምፊ በሚከተለው የሚተዳደር ነው፦ @@ -2179,6 +2183,7 @@ ካርድን በማረጋገጥ ላይ... ይህ አሳሽ በኩባንያ ወይም ሌላ ድርጅት አይተዳደርም። በዚህ መሣሪያ ላይ ያለ እንቅስቃሴ ከChrome ውጭ ሊተዳደር ይችላል። የበለጠ ለመረዳት አዲስ +፣ ትርን ጠቅ ያድርጉ ከዚያ ጉዞዎን ከቆመበት ለመቀጠል ያስገቡ እና በChrome ታሪክዎ ውስጥ አግባብነት ያለው እንቅስቃሴን ይመልከቱ ተሰቅሏል መመሪያዎች ተጭነዋል ከአውታረ መረብ ጋር ይገናኙ diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb index 85759b940735ea..5da0a0eb102601 100644 --- a/components/strings/components_strings_ar.xtb +++ b/components/strings/components_strings_ar.xtb @@ -734,6 +734,7 @@ المقاييس الحيوية ‏زر "تحديث Chrome"، اضغط على مفتاح Enter لتحديث Chrome من إعداداته. الدُرج 5 +‏حفظ المعلومات في حساب Google Index-4x6-Ext التطبيق: تم التحقق بنجاح @@ -1411,6 +1412,7 @@ قد تكون صفحة الويب على غير متاحة مؤقتًا أو تم نقلها نهائيًا إلى عنوان ويب جديد. الجهة صاحبة الإصدار ‏قد يتضمّن حسابك على Google نماذج أخرى من سجلّ التصفّح على myactivity.google.com +‏زر استئناف عملية البحث، اضغط على Enter لاستئناف عملية البحث والاطّلاع على النشاط ذي الصلة في سجلّ Chrome. الاطلاع على النصوص والصور التي تم نسخها إلى الحافظة هل تتذكر معرّف واجهة الدفعات الموحّدة؟ عرض البطاقة الافتراضية @@ -1486,6 +1488,7 @@ ‏التأكد من بطاقاتك بشكلٍ أسرع باستخدام ميزة Touch ID من الآن فصاعدًا متعدد الأبعاد الطي على شكل بوابة +‏استأنف عملية البحث للاطّلاع على النشاط ذي الصلة في سجلّ Chrome إثبات ملكية رقم الهاتف تعديل معلومات الاتصال رفض الاتصال. @@ -1537,6 +1540,7 @@ محو الوصول إلى بيانات الموقع الإلكتروني وملفات تعريف الارتباط {COUNT,plural, =0{بدون}=1{‏من موقع إلكتروني واحد (لن يتم تسجيل خروجك من حسابك على Google)}two{‏من موقعي ويب (#) (لن يتم تسجيل خروجك من حسابك على Google)}few{‏من # مواقع إلكترونية (لن يتم تسجيل خروجك من حسابك على Google)}many{‏من # موقع إلكتروني (لن يتم تسجيل خروجك من حسابك على Google)}other{‏من # موقع إلكتروني (لن يتم تسجيل خروجك من حسابك على Google)}} +استئناف عملية البحث ‏يمكن لمشرفك تغيير إعداد المتصفِّح عن بُعد. وقد تتم أيضًا إدارة النشاط على هذا الجهاز خارج Chrome. ‏خط Serif تتم إدارة الجهاز من خلال: @@ -2189,6 +2193,7 @@ جارٍ التحقق من البطاقة... ‏لا تتم إدارة هذا المتصفِّح من خلال شركة أو مؤسسة أخرى. وقد تتم إدارة النشاط على هذا الجهاز خارج Chrome. مزيد من المعلومات جديد +، اضغط على مفتاح التبويب (Tab)، ثم Enter لاستئناف عملية البحث والاطّلاع على النشاط ذي الصلة في سجلّ Chrome. تم التحميل تم تحميل السياسات. الاتصال بالشبكة diff --git a/components/strings/components_strings_as.xtb b/components/strings/components_strings_as.xtb index ebdde15753fd7b..624efd743351a2 100644 --- a/components/strings/components_strings_as.xtb +++ b/components/strings/components_strings_as.xtb @@ -731,6 +731,7 @@ বায়’মেট্ৰিক্স Chrome আপডে’ট কৰক বুটাম, Chromeৰ ছেটিংসমূহৰ পৰা Chrome আপডে’ট কৰিবলৈ এণ্টাৰ টিপক ট্ৰে’ ৫ +Google একাউণ্টত ছেভ কৰক Index-4x6-Ext এপ্লিকেশ্বন: মান্যতাকৰণ সফল @@ -1405,6 +1406,7 @@ ৰ ৱেবপৃষ্ঠাটো অস্থায়ীভাৱে ব্যৱহাৰযোগ্য হৈ নাথাকিব পাৰে বা ইয়াক কোনো নতুন ৱেব ঠিকনালৈ স্থায়ী ভাৱে নিয়া হ’ব পাৰে। ইয়াত প্ৰদান কৰা হৈছে আপোনাৰ Google একাউণ্টৰ myactivity.google.comত অন্য ব্ৰাউজিং ইতিহাস থাকিব পাৰে৷ +যাত্ৰা পুনৰ আৰম্ভ কৰক বুটাম, আপোনাৰ যাত্ৰা পুনৰ আৰম্ভ কৰিবলৈ এণ্টাৰ টিপক আৰু আপোনাৰ Chromeৰ ইতিহাসত প্ৰাসংগিক কাৰ্যকলাপ চাওক ক্লিপব’ৰ্ডলৈ প্ৰতিলিপি কৰা পাঠ আৰু প্ৰতিচ্ছবি চাওক আপোনাৰ UPI IDটো মনত আছেনে? ভাৰ্চুৱেল কাৰ্ডখন চাওক @@ -1479,6 +1481,7 @@ এতিয়াৰ পৰা স্পৰ্শ আইডি ব্যৱহাৰ কৰি আপোনাৰ কাৰ্ডসমূহ খৰতকীয়াকৈ নিশ্চিত কৰক সামগ্ৰী গে'ট ফ'ল্ড কৰক +আপোনাৰ Chromeৰ ইতিহাসত প্ৰাসংগিক কাৰ্যকলাপ চাবলৈ যাত্ৰা পুনৰ আৰম্ভ কৰক আপোনাৰ ফ’ন নম্বৰটো সত্যাপন কৰক সম্পর্কৰ তথ্য সম্পাদনা কৰক এ সংযোগ কৰিবলৈ অস্বীকাৰ কৰিছে। @@ -1530,6 +1533,7 @@ মচক কুকীসমূহ আৰু ছাইটৰ ডেটা এক্সেছ কৰক। {COUNT,plural, =0{এটাৰ পৰাও নহয়}=1{১টা ছাইটৰ পৰা (আপুনি নিজৰ Google Accountৰ পৰা ছাইন আউট হৈ নাযায়)}one{#টা ছাইটৰ পৰা (আপুনি নিজৰ Google Accountৰ পৰা ছাইন আউট হৈ নাযায়)}other{#টা ছাইটৰ পৰা (আপুনি নিজৰ Google Accountৰ পৰা ছাইন আউট হৈ নাযায়)}} +যাত্ৰা পুনৰ আৰম্ভ কৰক আপোনাৰ প্ৰশাসকে দূৰৰ পৰাই আপোনাৰ ব্ৰাউজাৰৰ ছেটআপ সলনি কৰিব পাৰে। এই ডিভাইচটোত কৰা কাৰ্যকলাপ Chromeৰ বাহিৰৰ পৰাও পৰিচালনা কৰা হ’ব পাৰে। Serif ফ’ণ্ট ইয়াৰ দ্বাৰা পৰিচালিত: @@ -2178,6 +2182,7 @@ কার্ড নিশ্চিত কৰি থকা হৈছে... এই ব্ৰাউজাৰটো কোনো কোম্পানী অথবা অন্য প্ৰতিষ্ঠানৰ দ্বাৰা পৰিচালিত। এই ডিভাইচটোৰ কাৰ্যকলাপ Chromeৰ বাহিৰত পৰিচালনা কৰা হৈ থাকিব পাৰে। অধিক জানক সজীৱ +, টেব টিপক তাৰ পাছত আপোনাৰ যাত্ৰা পুনৰ আৰম্ভ কৰিবলৈ এণ্টাৰ টিপক আৰু আপোনাৰ Chromeৰ ইতিহাসত প্ৰাসংগিক কাৰ্যকলাপ চাওক আপল’ড কৰা হৈছে নীতি ল’ড কৰা হৈছে নেটৱৰ্কত সংযোগ কৰক diff --git a/components/strings/components_strings_az.xtb b/components/strings/components_strings_az.xtb index ba6d1b2fe53a55..447baeb30d0ec9 100644 --- a/components/strings/components_strings_az.xtb +++ b/components/strings/components_strings_az.xtb @@ -730,6 +730,7 @@ Biometriklər "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 Qab 5 +Google Hesabında saxlayın Index-4x6-Ext Tətbiq: Yoxlama uğurludur @@ -1406,6 +1407,7 @@ 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. Verildi: history.google.com linkində Google Hesabına məxsus axtarış tarixçəsinin başqa formaları ola bilər +"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 Buferə kopyalanan mətn və şəkillərə baxın UPI ID'niz yadda saxlansın? Virtual karta baxın @@ -1481,6 +1483,7 @@ Bundan sonra Toxunuş İD'si istifadə edərək kartlarınızı daha sürətli təsdiqləyin Material Qapı şəklində qatlayın +Chrome tarixçəsində əlaqəli fəaliyyəti görmək üçün baxışa davam edin Telefon nömrənizi doğrulayın Kontakt məlumatını redaktə edin qoşulmaq istəmədi. @@ -1532,6 +1535,7 @@ Silin Kukilər və sayt datasına giriş. {COUNT,plural, =0{Yoxdur}=1{1 saytdan (Google Hesabınızdan çıxmayacaqsınız)}other{ # saytdan (Google Hesabınızdan çıxmayacaqsınız)}} +Baxışa davam edin 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. Serif Şrifti İdarə edən: @@ -2183,6 +2187,7 @@ Kart təsdiqlənir... 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. Ətraflı məlumat Təzə +, 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 Yüklənib Siyasətlər yüklənib Şəbəkəyə qoşulun diff --git a/components/strings/components_strings_be.xtb b/components/strings/components_strings_be.xtb index 5bbf7d6ee1f6e4..08523bd2b63329 100644 --- a/components/strings/components_strings_be.xtb +++ b/components/strings/components_strings_be.xtb @@ -733,6 +733,7 @@ Біяметрыя Кнопка "Абнавіць Chrome". Каб абнавіць браўзер Chrome праз яго налады, націсніце Enter Латок 5 +Захоўванне даных ва Уліковым запісе Google Index-4x6-Ext Праграма: Праверка прайшла паспяхова @@ -1410,6 +1411,7 @@ Магчыма, вэб-старонка па адрасе часова недаступная або была перамешчана на новы вэб-адрас. Каму выдадзена На сайце myactivity.google.com могуць быць іншыя формы запісу гісторыі прагляду сайтаў для вашага Уліковага запісу Google +Кнопка "Працягнуць пошук". Каб пашукаць звязаныя дзеянні ў гісторыі праглядаў Chrome, націсніце Enter Праглядаць тэкст і відарысы, скапіраваныя ў буфер абмену Запомніць ідэнтыфікатар UPI? Праглядзець віртуальную картку @@ -1485,6 +1487,7 @@ Калі выкарыстоўваць Touch ID, пацвярджаць карткі можна будзе хутчэй Матэрыял Згіб "вароты" +Пашукаць звязаныя дзеянні ў гісторыі праглядаў Chrome Спраўдзіце свой нумар тэлефона Змена кантактных звестак Хост адмовіўся ад падключэння. @@ -1536,6 +1539,7 @@ Ачысціць Атрымаць доступ да файлаў cookie і даных сайта. {COUNT,plural, =0{Няма}=1{З 1 сайта (вы не выйдзеце з Уліковага запісу Google)}one{З # сайта (вы не выйдзеце з Уліковага запісу Google)}few{З # сайтаў (вы не выйдзеце з Уліковага запісу Google)}many{З # сайтаў (вы не выйдзеце з Уліковага запісу Google)}other{З # сайта (вы не выйдзеце з Уліковага запісу Google)}} +Працягнуць пошук Адміністратар можа аддалена змяняць налады браўзера. Сама прылада таксама можа знаходзіцца пад знешнім кіраваннем. Шрыфт з засечкамі Прыладай кіруе: @@ -2188,6 +2192,7 @@ Пацвярджаюцца даныя карткі... Гэты браўзер не знаходзіцца пад кіраваннем кампаніі або іншай арганізацыі. Аднак сама прылада можа знаходзіцца пад знешнім кіраваннем. Даведацца больш Свежы +. Каб пашукаць звязаныя дзеянні ў гісторыі праглядаў Chrome, націсніце Tab, затым Enter Запампавана Палітыкі загружаны Падключыцеся да сеткі diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb index 21c525dea5c9b5..191b01cb38262e 100644 --- a/components/strings/components_strings_bg.xtb +++ b/components/strings/components_strings_bg.xtb @@ -730,6 +730,7 @@ Биометрика Бутон „Актуализиране на Chrome“. Натиснете Enter, за да актуализирате Chrome от настройките Тава 5 +Запазване в профила в Google Index-4 x 6-Ext Приложение: Потвърждаването е успешно @@ -1407,6 +1408,7 @@ Уеб страницата на адрес може временно да не е налице или да е била преместена на нов уеб адрес. Издаден на В профила ви в Google може да има други видове история на сърфиране, съхранявани на адрес myactivity.google.com +Бутон „Продължаване на пътешествието“. Натиснете Enter, за да продължите пътешествието си и да прегледате съответната активност в историята си в Chrome Да преглежда текста и изображенията, копирани в буферната памет Помните ли идентификационния си номер за UPI? Преглед на виртуалната карта @@ -1482,6 +1484,7 @@ Потвърждавайте картите си по-бързо, като от сега нататък използвате Touch ID Material Сгъване на двата края навътре +Продължете пътешествието си, за да прегледате съответната активност в историята си в Chrome Потвърдете телефонния си номер Редактиране на информацията за връзка отказа да установи връзка. @@ -1533,6 +1536,7 @@ Изчистване Осъществява достъп до „бисквитки“ и данни за сайтове. {COUNT,plural, =0{Няма}=1{От 1 сайт (няма да излезете от профила си в Google)}other{От # сайта (няма да излезете от профила си в Google)}} +Продължаване на пътешествието Администраторът ви може отдалечено да променя настройките на браузъра. Възможно е активността на това устройство да се управлява и извън Chrome. Серифен шрифт Управлява се от: @@ -2184,6 +2188,7 @@ Картата се потвърждава... Този браузър не се управлява от дружество или друга организация. Възможно е активността на устройството да се управлява извън Chrome. Научете повече Свежо +, натиснете Tab и след това Enter, за да продължите пътешествието си и да прегледате съответната активност в историята си в Chrome Качено Правилата са заредени Свързване към мрежа diff --git a/components/strings/components_strings_bs.xtb b/components/strings/components_strings_bs.xtb index ec4273e52d0f8a..0c357ab203ccac 100644 --- a/components/strings/components_strings_bs.xtb +++ b/components/strings/components_strings_bs.xtb @@ -734,6 +734,7 @@ To će u suprotnom biti blokirano prema vašim postavkama privatnosti. Ovo će o Biometrija Dugme Ažuriraj Chrome, pritisnite Enter da ažurirate Chrome iz postavki Chromea Ladica 5 +Sačuvajte na Google račun Index-4x6-Ext Aplikacija: Potvrda valjanosti je uspjela @@ -1411,6 +1412,7 @@ To će u suprotnom biti blokirano prema vašim postavkama privatnosti. Ovo će o Web stranica na je možda privremeno ugašena ili je trajno prebačena na novu web adresu. Izdato za Google račun može imati druge oblike historije pregledanja na myactivity.google.com +Dugme Nastavi pregledati, pritisnite Enter da nastavite pregledati te da vidite relevantne aktivnosti u historiji Chromea Pogledajte tekst i slike kopirane u međumemoriju Zapamtiti vaš UPI ID? Prikaži virtuelnu karticu @@ -1486,6 +1488,7 @@ To će u suprotnom biti blokirano prema vašim postavkama privatnosti. Ovo će o Od sada brže potvrđujte kartice korištenjem funkcije Touch ID Materijal Presavijanje +Nastavite pregledati da vidite relevantne aktivnosti u historiji Chromea Potvrdite broj telefona Uređivanje podataka za kontakt Host računar je odbio povezivanje. @@ -1537,6 +1540,7 @@ To će u suprotnom biti blokirano prema vašim postavkama privatnosti. Ovo će o Obriši Pristupiti kolačićima i podacima web lokacije. {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)}} +Nastavi pregledati Vaš administrator može promijeniti postavke preglednika daljinskim putem. Aktivnostima na ovom uređaju se može upravljati i van Chromea. Font Serif Upravlja: @@ -2188,6 +2192,7 @@ Dodatni detalji: Potvrđivanje kartice... Ovim preglednikom ne upravlja kompanija ili neka druga organizacija. Aktivnostima na ovom uređaju se može upravljati van Chromea. Saznajte više Svježe +, pritisnite Tab, a zatim Enter da nastavite pregledati te da vidite relevantne aktivnosti u historiji Chromea Otpremljeno Pravila su učitana Spoji se na mrežu diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb index 622da3f2b83428..4114ecc18c5ad9 100644 --- a/components/strings/components_strings_ca.xtb +++ b/components/strings/components_strings_ca.xtb @@ -728,6 +728,7 @@ En cas contrari, la configuració de privadesa el bloquejarà. Això permetrà q Biometria Botó Actualitza Chrome; prem Retorn per actualitzar Chrome des de la configuració de Chrome Safata 5 +Desa al Compte de Google Index-4x6-Ext Aplicació: Validació correcta @@ -1400,6 +1401,7 @@ En cas contrari, la configuració de privadesa el bloquejarà. Això permetrà q És possible que la pàgina web estigui temporalment fora de servei o s'hagi traslladat permanentment a una adreça web nova. Emès per a A myactivity.google.com trobaràs altres maneres d'explorar l'historial de navegació del teu Compte de Google +Botó Reprèn el camí: prem Retorn per reprendre el camí i veure activitat rellevant a l'historial de Chrome Veure el text i les imatges copiats al porta-retalls Recordes el teu identificador d'UPI? Mostra la targeta virtual @@ -1475,6 +1477,7 @@ En cas contrari, la configuració de privadesa el bloquejarà. Això permetrà q A partir d'ara, confirma les targetes més ràpidament amb Touch ID Material Plegat en finestra +Reprèn el camí per veure activitat rellevant a l'historial de Chrome Verifica el número de telèfon Edita la informació de contacte no ens ha permès establir la connexió. @@ -1526,6 +1529,7 @@ En cas contrari, la configuració de privadesa el bloquejarà. Això permetrà q Esborra Accedir a les galetes i a les dades del lloc web. {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)}} +Reprèn el camí 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. Tipus de lletra Serif Gestionades per: @@ -2177,6 +2181,7 @@ Detalls addicionals: S'està confirmant la targeta... Cap empresa ni cap altra organització no gestiona aquest navegador. És possible que l'activitat d'aquest dispositiu es gestioni fora de Chrome. Més informació Fresca +: prem Tab i després Retorn per reprendre el camí i veure activitat rellevant a l'historial de Chrome Penjat Les polítiques s'han carregat Connecta't a la xarxa diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb index a50ade6299721e..4d27896e4f6c2d 100644 --- a/components/strings/components_strings_cs.xtb +++ b/components/strings/components_strings_cs.xtb @@ -724,6 +724,7 @@ Jinak to vaše nastavení ochrany soukromí bude blokovat. Povolením umožníte Biometrické systémy Tlačítko Aktualizovat Chrome, stisknutím klávesy Enter aktualizujete Chrome v nastavení Chromu Přihrádka 5 +Uložit do účtu Google Index-4x6-Ext Aplikace: Ověření proběhlo úspěšně @@ -1395,6 +1396,7 @@ Kontaktujte administrátora systému. Webová stránka může být dočasně nefunkční nebo mohla být trvale přesunuta na novou webovou adresu. Vydán pro Na stránce myactivity.google.com mohou být k dispozici další druhy historie prohlížení zaznamenané ve vašem účtu Google. +Tlačítko obnovení cesty, stisknutím klávesy Enter obnovíte svou cestu a zobrazíte příslušnou aktivitu v historii Chromu Přístup k textu a obrázkům zkopírovaným do schránky Uložit vaše UPI ID? Zobrazit virtuální kartu @@ -1469,6 +1471,7 @@ Kontaktujte administrátora systému. Od teď karty potvrzujte rychleji pomocí technologie Touch ID Material Otevírací přeložení +Obnovením cesty zobrazíte příslušnou aktivitu v historii Chromu Ověření telefonního čísla Upravit kontaktní údaje Web odmítl připojení. @@ -1520,6 +1523,7 @@ Kontaktujte administrátora systému. Vymazat Získat přístup k souborům cookie a datům webů. {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)}} +Obnovit cestu 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. Patkové písmo Správce: @@ -2171,6 +2175,7 @@ Další podrobnosti: Ověřování karty... Tento prohlížeč není spravován administrátorem ani jinou organizací. Aktivita na tomto zařízení může být spravována mimo Chrome. Další informace Svěží +, stisknutím tabulátoru a poté klávesy Enter obnovíte svou cestu a zobrazíte příslušnou aktivitu v historii Chromu Nahráno Zásady jsou načteny Připojit k síti diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb index 5c69c827d50929..c67d7d7d12b73a 100644 --- a/components/strings/components_strings_da.xtb +++ b/components/strings/components_strings_da.xtb @@ -734,6 +734,7 @@ Ellers vil det blive blokeret af dine privatlivsindstillinger. Det giver det ind Biometri Knappen Opdater Chrome – tryk på Enter for at opdatere Chrome i dine Chrome-indstillinger Bakke 5 +Gem på Google-konto Index-4x6-Ext Program: Valideringen er fuldført @@ -1411,6 +1412,7 @@ Ellers vil det blive blokeret af dine privatlivsindstillinger. Det giver det ind Websiden på kan være midlertidigt nede, eller også er den permanent flyttet til en ny webadresse. Udstedt til Din Google-konto kan have andre former for browserhistorik på myactivity.google.com +Knappen Genoptag søgning, tryk på Enter for at genoptage søgningen og se relevant aktivitet i din Chrome-historik Se tekst og billeder, der er kopieret til udklipsholderen Skal dit UPI-id huskes? Se virtuelt kort @@ -1486,6 +1488,7 @@ Ellers vil det blive blokeret af dine privatlivsindstillinger. Det giver det ind Bekræft dine kort hurtigere ved hjælp af Touch ID fra nu af Material Portfals +Genoptag søgningen for at se relevant aktivitet i din Chrome-historik Bekræft dit telefonnummer Rediger kontaktoplysninger nægtede at oprette forbindelse. @@ -1537,6 +1540,7 @@ Ellers vil det blive blokeret af dine privatlivsindstillinger. Det giver det ind Ryd Adgang til cookies og websitedata. {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)}} +Genoptag søgning Din administrator kan ændre konfigurationen af din browser via fjernadgang. Aktivitet på denne enhed administreres muligvis også uden for Chrome. Serif-skrifttype Administreres af: @@ -2189,6 +2193,7 @@ Yderligere oplysninger: Bekræfter kort... Denne browser administreres ikke af en virksomhed eller en anden organisation. Aktivitet på denne enhed administreres muligvis uden for Chrome. Få flere oplysninger Frisk + – tryk på Tab-tasten og derefter Enter for at genoptage søgningen og se relevant aktivitet i din Chrome-historik Uploadet Politikkerne er indlæst Opret forbindelse til netværk diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb index a7393c8d36ed38..ad64d3d9b1d368 100644 --- a/components/strings/components_strings_el.xtb +++ b/components/strings/components_strings_el.xtb @@ -735,6 +735,7 @@ Βιομετρικά Κουμπί ενημέρωσης Chrome, πατήστε Enter για να ενημερώσετε το Chrome από τις ρυθμίσεις του Chrome. Δίσκος 5 +Αποθήκευση στον Λογαριασμό Google Index-4x6-Ext Εφαρμογή: Επιτυχής επικύρωση @@ -1415,6 +1416,7 @@ Η ιστοσελίδα στη διεύθυνση μπορεί να βρίσκεται προσωρινά εκτός λειτουργίας ή ίσως έχει μεταφερθεί μόνιμα σε μια νέα διεύθυνση ιστού. Εκδόθηκε σε Ο Λογαριασμός Google ενδέχεται να διαθέτει άλλες μορφές ιστορικού περιήγησης στη διεύθυνση myactivity.google.com +Κουμπί Συνέχιση διαδρομής, πατήστε Enter για να συνεχίσετε τη διαδρομή σας και να δείτε σχετική δραστηριότητα στο Ιστορικό Chrome. Δει κείμενο και εικόνες που αντιγράψατε στο πρόχειρο Θυμάστε το αναγνωριστικό UPI; Προβολή εικονικής κάρτας @@ -1490,6 +1492,7 @@ Επιβεβαιώστε πιο γρήγορα τις κάρτες σας, χρησιμοποιώντας το Touch ID από εδώ και στο εξής Material Δίπλωση παράθυρο +Συνέχιση διαδρομής για προβολή σχετική δραστηριότητας στο Ιστορικό Chrome Επαλήθευση του αριθμού τηλεφώνου σας Επεξεργασία στοιχείων επαφής Ο κεντρικός υπολογιστής απέρριψε τη σύνδεση. @@ -1541,6 +1544,7 @@ Διαγραφή Πρόσβαση σε cookie και δεδομένα ιστοτόπου. {COUNT,plural, =0{Κανένας}=1{Από 1 ιστότοπο (δεν θα αποσυνδεθείτε από τον Λογαριασμό σας Google)}other{Από # ιστοτόπους (δεν θα αποσυνδεθείτε από τον Λογαριασμό σας Google)}} +Συνέχιση διαδρομής Ο διαχειριστής σας μπορεί να αλλάξει τη ρύθμιση του προγράμματος περιήγησής σας απομακρυσμένα. Η διαχείριση της δραστηριότητας σε αυτήν τη συσκευή μπορεί επίσης να πραγματοποιηθεί εκτός Chrome. Γραμματοσειρά Serif Η διαχείριση γίνεται από: @@ -2195,6 +2199,7 @@ Επιβεβαίωση κάρτας… Αυτός ο ιστότοπος δεν είναι διαχειριζόμενος από κάποια εταιρεία ή άλλον οργανισμό. Η διαχείριση της δραστηριότητας σε αυτήν τη συσκευή μπορεί να πραγματοποιηθεί εκτός Chrome. Μάθετε περισσότερα Φρέσκο +, πατήστε Tab και, στη συνέχεια, Enter για να συνεχίσετε τη διαδρομή σας και να δείτε σχετική δραστηριότητα στο Ιστορικό Chrome. Έγινε μεταφόρτωση Οι πολιτικές φορτώθηκαν Σύνδεση σε δίκτυο diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb index 251b7cb183760a..c1d8cd96014075 100644 --- a/components/strings/components_strings_es-419.xtb +++ b/components/strings/components_strings_es-419.xtb @@ -729,6 +729,7 @@ De lo contrario, la configuración de privacidad bloqueará esta acción. Esto p Biométricos Botón Actualizar Chrome: presiona Intro para actualizar Chrome desde la configuración del navegador Bandeja 5 +Guardar en la Cuenta de Google Index-4x6-Ext Aplicación: Validación correcta @@ -1401,6 +1402,7 @@ De lo contrario, la configuración de privacidad bloqueará esta acción. Esto p Es posible que la página web de no funcione temporalmente o se haya trasladado permanentemente a una dirección web nueva. Emitido a Es posible que tu cuenta de Google tenga otros formularios del historial de navegación en myactivity.google.com +Botón Reanudar búsqueda: presiona Intro para reanudar la búsqueda y ver actividad relevante en tu historial de Chrome Ver el texto y las imágenes copiados en el portapapeles ¿Recuerdas tu ID de IUP? Ver la tarjeta virtual @@ -1476,6 +1478,7 @@ De lo contrario, la configuración de privacidad bloqueará esta acción. Esto p A partir de ahora, usa Touch ID para confirmar las tarjetas más rápido Material Plegado en ventana +Reanuda la búsqueda para ver la actividad relevante en tu historial de Chrome. Verifica tu número de teléfono Editar la información de contacto rechazó la conexión. @@ -1527,6 +1530,7 @@ De lo contrario, la configuración de privacidad bloqueará esta acción. Esto p Borrar Acceder a las cookies y los datos de sitios {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)}} +Reanudar búsqueda 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. Fuente Serif Administrador: @@ -2179,6 +2183,7 @@ Detalles adicionales: Confirmando tarjeta… 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. Más información Fresh +: presiona Tab y, luego, Intro para reanudar la búsqueda y ver la actividad relevante en tu historial de Chrome Subido Se cargaron las políticas Conectarse a una red diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb index 43071152e9c40f..b2e23093c37179 100644 --- a/components/strings/components_strings_es.xtb +++ b/components/strings/components_strings_es.xtb @@ -734,6 +734,7 @@ De lo contrario, lo impedirá tu configuración de privacidad. Permitirá que el Biometría Botón Actualizar Chrome, pulsa Intro para actualizar Chrome desde la configuración de Chrome Bandeja 5 +Guardar en tu cuenta de Google Index-4x6-Ext Aplicación: Validación correcta @@ -1411,6 +1412,7 @@ De lo contrario, lo impedirá tu configuración de privacidad. Permitirá que el La página web podría estar temporalmente fuera de servicio o bien podría haberse trasladado a una dirección web nueva permanentemente. Enviado a Es posible que tu cuenta de Google tenga otros tipos de historial de navegación en la página myactivity.google.com +Botón Reanudar recorrido, pulsa Intro para reanudar tu recorrido y ver la actividad relevante en tu historial de Chrome Ver el texto y las imágenes que se hayan copiado en el portapapeles ¿Recuerdas tu ID de UPI? Ver tarjeta virtual @@ -1486,6 +1488,7 @@ De lo contrario, lo impedirá tu configuración de privacidad. Permitirá que el A partir de ahora, puedes confirmar tus tarjetas más rápido con Touch ID Material Plegado en ventana +Reanuda el recorrido para ver la actividad relevante en tu historial de Chrome Verifica tu número de teléfono Editar información de contacto La página ha rechazado la conexión. @@ -1537,6 +1540,7 @@ De lo contrario, lo impedirá tu configuración de privacidad. Permitirá que el Borrar Acceder a cookies y datos de sitios. {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)}} +Reanudar recorrido 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. Fuente Serif Gestionado por: @@ -2188,6 +2192,7 @@ Más información: Confirmando tarjeta... Este navegador no lo administra ninguna empresa ni organización. Es posible que se administre la actividad de este dispositivo fuera de Chrome. Más información Novedosa +. Pulsa Pestaña y, después, Intro para reanudar tu recorrido y ver la actividad relevante en tu historial de Chrome Subido Se han cargado las políticas Conéctate a la red diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb index 8829e1e208544f..3eff36bc11be5f 100644 --- a/components/strings/components_strings_et.xtb +++ b/components/strings/components_strings_et.xtb @@ -733,6 +733,7 @@ Vastasel korral blokeeritakse see teie privaatsusseadetes. See võimaldab teie k Biomeetria Nupp Värskenda Chrome'i, vajutage Chrome'i seadetes Chrome'i värskendamiseks sisestusklahvi Salv 5 +Salvesta Google'i kontole Index-4x6-Ext Rakendus: Valideerimine õnnestus @@ -1410,6 +1411,7 @@ Vastasel korral blokeeritakse see teie privaatsusseadetes. See võimaldab teie k Veebileht võib olla ajutiselt maas või see viidi jäädavalt üle uuele veebiaadressile. Väljastatud subjektile: Aadressil myactivity.google.com võib teie Google'i kontol olla muus vormis sirvimisajalugu +Teekonna jätkamise nupp, vajutage sisestusklahvi, et teekonda jätkata ja oma Chrome'i ajaloos asjakohaseid tegevusi näha näha lõikelauale kopeeritud teksti ja kujutisi Kas jätta teie UPI ID meelde? Kuva virtuaalkaart @@ -1485,6 +1487,7 @@ Vastasel korral blokeeritakse see teie privaatsusseadetes. See võimaldab teie k Kinnitage oma kaardid kiiremini, kasutades edaspidi funktsiooni Touch ID Materiaalne Väravakujuliselt volditud +Jätkake teekonda, et näha Chrome'i ajaloos asjakohaseid tegevusi Kinnitage oma telefoninumber Kontaktandmete muutmine Host keeldus ühendamast. @@ -1536,6 +1539,7 @@ Vastasel korral blokeeritakse see teie privaatsusseadetes. See võimaldab teie k Tühjenda Juurdepääs küpsisefailidele ja saidi andmetele. {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)}} +Jätka teekonda Teie administraator saab brauseri seadistust kaugühenduse kaudu muuta. Selle seadme tegevusi võidakse hallata ka väljaspool Chrome'i. Seriifidega font Haldab: @@ -2187,6 +2191,7 @@ Lisateave: Kaardi kinnitamine … Seda brauserit ei halda ettevõte ega muu organisatsioon. Selle seadme tegevusi võidakse hallata ka väljaspool Chrome'i. Lisateave Värske +, vajutage tabulaatorit ja siis sisestusklahvi, et teekonda jätkata ning oma Chrome'i ajaloos asjakohaseid tegevusi näha Üles laaditud Reeglid on laaditud Ühendumine Internetiga diff --git a/components/strings/components_strings_eu.xtb b/components/strings/components_strings_eu.xtb index 780aa671aa6bb5..af0e697b77b248 100644 --- a/components/strings/components_strings_eu.xtb +++ b/components/strings/components_strings_eu.xtb @@ -724,6 +724,7 @@ Bestela, pribatutasun-ezarpenek blokeatu egingo dute baimen hori. Baimen honekin Sistema biometrikoak "Eguneratu Chrome" botoia: sakatu "Sartu" Chrome eguneratzeko Chrome-ren ezarpenetan 5. erretilua +Gorde Google-ko kontuan Index-4x6-Ext Aplikazioa: Behar bezala baliozkotu da @@ -1396,6 +1397,7 @@ Bestela, pribatutasun-ezarpenek blokeatu egingo dute baimen hori. Baimen honekin Baliteke helbideko web-orria ez funtzionatzea edo beste web-helbide batera betiko aldatu izatea. Nori jaulkia: Google-ko kontuko arakatze-historiaren bestelako datu batzuk gera litezke myactivity.google.com webgunean. +"Berrekin bidaiari" botoia, sakatu Sartu bidaiari berrekiteko eta Chrome-ko historiako jarduera egokiak ikusteko Ikusi arbelean kopiatzen ditudan testuak eta irudiak Gogoan al duzu UPIko IDa? Ikusi txartel birtuala @@ -1470,6 +1472,7 @@ Bestela, pribatutasun-ezarpenek blokeatu egingo dute baimen hori. Baimen honekin Aurrerantzean, berretsi txartelak bizkorrago Touch ID erabilita Material diseinua Leiho-erako tolestura +Berrekin bidaiari Chrome-ko historiako jarduera egokiak ikusteko Egiaztatu telefono-zenbakia Editatu harremanetarako informazioa Konexioa baztertu du webguneak. @@ -1521,6 +1524,7 @@ Bestela, pribatutasun-ezarpenek blokeatu egingo dute baimen hori. Baimen honekin Garbitu Cookieak eta webguneko datuak atzitu. {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)}} +Berrekin bidaiari Administratzaileak urrunetik alda dezake arakatzailearen konfigurazioa. Baliteke gailu honetako jarduerak Chrome-tik kanpo ere kudeatzea. Serif letra Kudeatzailea: @@ -2172,6 +2176,7 @@ Xehetasun gehiago: Txartela berresten… Arakatzailea ez du enpresa edo erakunde batek kudeatzen. Baliteke gailu honetako jarduerak Chrome-tik kanpo kudeatzea. Lortu informazio gehiago Freskoa +, sakatu tabuladorea eta, ondoren, sakatu Sartu bidaiari berrekiteko eta Chrome-ko historiako jarduera egokiak ikusteko Kargatuta Kargatu dira gidalerroak Konektatu sarera diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb index d9b20f99064503..02f98ac356c012 100644 --- a/components/strings/components_strings_fa.xtb +++ b/components/strings/components_strings_fa.xtb @@ -732,6 +732,7 @@ زیست‌سنجشی ‏دکمه «به‌روزرسانی Chrome»، برای به‌روزرسانی Chrome ازطریق تنظیمات Chrome، کلید Enter (ورود) را فشار دهید سینی ۵ +‏ذخیره در «حساب Google» Index-4x6-Ext برنامه: ارزیابی موفق بود @@ -1409,6 +1410,7 @@ شاید صفحه وب در موقتاً غیرفعال شده باشد یا شاید به‌طور دائم به آدرس وب جدیدی منتقل شده باشد. صادر شده برای ‏ممکن است حساب Google شما اشکال دیگری از سابقه مرور در myactivity.google.com داشته باشد +‏دکمه «ازسرگیری کاوش»، کلید «ورود» را فشار دهید تا کاوش را ازسر بگیرید و فعالیت‌های مرتبط را در سابقه Chrome ببینید به نوشتار و تصاویر کپی‌شده در بریده‌دان دسترسی پیدا کند ‏شناسه «رابط پرداخت‌های یکپارچه» (UPI) شما به‌خاطر سپرده شود؟ مشاهده کارت مجازی @@ -1484,6 +1486,7 @@ ازاین‌پس، برای به‌تأیید رساندن سریع‌تر کارت‌ها، از «شناسه لمسی» استفاده شود سه‌بعدی تاخوردگی دروازه‌ای +‏کاوش را ازسربگیرید تا فعالیت‌های مرتبط را در سابقه Chrome ببینید به‌تأیید رساندن شماره تلفن ویرایش اطلاعات تماس از اتصال خودداری کرد. @@ -1535,6 +1538,7 @@ پاک کردن به کوکی‌ها و داده‌های سایت دسترسی داشته باشد. {COUNT,plural, =0{هیچ‌کدام}=1{‏از ۱ سایت (از سیستم حساب Google خود خارج نخواهید شد)}one{‏از # سایت (از سیستم حساب Google خود خارج نخواهید شد)}other{‏از # سایت (از سیستم حساب Google خود خارج نخواهید شد)}} +ازسرگیری کاوش ‏سرپرستتان می‌تواند تنظیم مرورگرتان را ازراه‌دور تغییر دهد. فعالیت انجام‌شده در این دستگاه می‌تواند از خارج از Chrome هم مدیریت شود. ‏قلم Serif مدیریت توسط: @@ -2186,6 +2190,7 @@ درحال تأیید کردن کارت… ‏این مرورگر را شرکت یا سازمان دیگری مدیریت نمی‌کند. فعالیت در این دستگاه ممکن است خارج از Chrome مدیریت شود. بیشتر بدانید تازه +، کلید «جهش» و سپس «ورود» را فشار دهید تا کاوش را ازسر بگیرید و فعالیت‌های مرتبط را در سابقه Chrome ببینید بارگذاری‌شده خط‌مشی‌ها بار شد اتصال به شبکه diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb index 8353321ee3a3ae..467aacdb8127dc 100644 --- a/components/strings/components_strings_fi.xtb +++ b/components/strings/components_strings_fi.xtb @@ -735,6 +735,7 @@ Muussa tapauksessa tämä estetään tietosuoja-asetuksilla. Jos sallit tämän, Biometriikka Päivitä Chrome ‑painike, päivitä Chrome sen asetuksista painamalla Enter Lokero 5 +Tallenna Google-tilille Index-4x6-Ext Sovellus: Todennus onnistui @@ -1412,6 +1413,7 @@ Muussa tapauksessa tämä estetään tietosuoja-asetuksilla. Jos sallit tämän, Verkkosivu saattaa olla väliaikaisesti poissa käytöstä tai se on siirretty pysyvästi uuteen osoitteeseen. Myönnetty kohteelle Google-tililläsi voi olla muita selaushistoriatietoja osoitteessa myactivity.google.com. +Jatka toimintoa ‑painike, paina Enter, niin voit jatkaa toimintoa ja nähdä oleelliset tapahtumat Chrome-historiassasi nähdä leikepöydälle kopioidun tekstin ja kuvat Muistatko UPI-tunnuksesi? Näytä virtuaalinen kortti @@ -1487,6 +1489,7 @@ Muussa tapauksessa tämä estetään tietosuoja-asetuksilla. Jos sallit tämän, Vahvista kortit jatkossa nopeammin Touch ID:llä Material Lehtitaite +Jatka toimintoa, niin näet oleelliset tapahtumat Chrome-historiassasi Vahvista puhelinnumerosi Muokkaa yhteystietoja kieltäytyi muodostamasta yhteyttä. @@ -1538,6 +1541,7 @@ Muussa tapauksessa tämä estetään tietosuoja-asetuksilla. Jos sallit tämän, Tyhjennä päästä evästeisiin ja sivustodataan. {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)}} +Jatka toimintoa Järjestelmänvalvoja voi muuttaa selaimen määrityksiä etäyhteydellä. Toimintaa tällä laitteella saatetaan ylläpitää myös Chromen ulkopuolelta. Serif-fontti Ylläpitäjä: @@ -2190,6 +2194,7 @@ Lisätietoja: Vahvistetaan korttia… Yritys tai muu organisaatio ei ylläpidä selainta. Laitteen toimintaa saatetaan ylläpitää Chromen ulkopuolelta. Lue lisää Tuore +, paina sarkainta ja Enter, niin voit jatkaa toimintoa ja nähdä oleelliset tapahtumat Chrome-historiassasi Lähetetty Käytännöt on ladattu Yhdistä verkkoon diff --git a/components/strings/components_strings_fr-CA.xtb b/components/strings/components_strings_fr-CA.xtb index 3f5585e1277ba1..32c79d288af2b7 100644 --- a/components/strings/components_strings_fr-CA.xtb +++ b/components/strings/components_strings_fr-CA.xtb @@ -728,6 +728,7 @@ Données biométriques Bouton Mise à jour de Chrome, appuyez sur la touche Entrée pour mettre à jour Chrome dans les paramètres de Chrome Bac 5 +Enregistrer dans le compte Google Fiche, 4 po x 6 po, ext Application : Validation réussie @@ -1400,6 +1401,7 @@ Il se peut que la page Web à l'adresse soit temporairement inaccessible ou qu'elle ait été déplacée de façon permanente à une autre adresse Web. Délivré à D'autres formes d'historique de navigation peuvent exister sur votre compte Google à l'adresse myactivity.google.com +Bouton de reprise de la recherche, appuyez sur Entrée pour reprendre votre recherche et voir l'activité pertinente dans votre historique de Chrome Voir le texte et les images copiés dans le presse-papiers Se souvenir de votre identifiant UPI? Afficher la carte virtuelle @@ -1475,6 +1477,7 @@ Vérifiez vos cartes plus rapidement en vous servant de Touch ID à partir de maintenant Matériel Pli fenêtre +Reprenez votre recherche pour voir l'activité pertinente dans votre historique de Chrome Vérifier votre numéro de téléphone Modifier les coordonnées a refusé la connexion. @@ -1526,6 +1529,7 @@ Effacer Accéder aux témoins et aux données relatives aux sites. {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)}} +Reprendre la recherche 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. Police avec empattement Géré par : @@ -2177,6 +2181,7 @@ Détails supplémentaires : Confirmation de la carte en cours… 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. En savoir plus Frais +, 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 Téléversé Les politiques ont été chargées Connexion au réseau diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb index 47a2c3fb89a6b2..28969c73a9d289 100644 --- a/components/strings/components_strings_fr.xtb +++ b/components/strings/components_strings_fr.xtb @@ -732,6 +732,7 @@ Par défaut, ce type d'accès est bloqué par vos paramètres de confidentialit Biométrie Bouton "Mise à jour de Chrome" : appuyer sur Entrée pour mettre à jour Chrome depuis les paramètres du navigateur Bac 5 +Enregistrer dans le compte Google Index-4x6-Ext Application : Validation réussie. @@ -1409,6 +1410,7 @@ Par défaut, ce type d'accès est bloqué par vos paramètres de confidentialit Il est possible que la page Web située à l'adresse soit temporairement inaccessible ou qu'elle ait été déplacée de façon permanente à une nouvelle adresse Web. Émis pour Votre compte Google conserve peut-être d'autres contenus d'historique de navigation sur la page myactivity.google.com +Bouton "Reprendre les recherches", appuyez sur Entrée pour reprendre vos recherches et voir les activités pertinentes dans votre historique Chrome Voir le texte et les images copiés dans le presse-papiers Souhaitez-vous mémoriser votre ID UPI ? Afficher la carte virtuelle @@ -1484,6 +1486,7 @@ Par défaut, ce type d'accès est bloqué par vos paramètres de confidentialit Confirmez désormais vos cartes plus rapidement avec Touch ID Material Pli en volets +Reprenez vos recherches pour voir les activités pertinentes dans votre historique Chrome Validez votre numéro de téléphone Modifier les coordonnées n'autorise pas la connexion. @@ -1535,6 +1538,7 @@ Par défaut, ce type d'accès est bloqué par vos paramètres de confidentialit Effacer Accéder aux cookies et aux données de site. {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)}} +Reprendre les recherches 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. Police Serif Gérées par : @@ -2186,6 +2190,7 @@ Informations supplémentaires : Validation de la carte… 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. En savoir plus Frais +, appuyez sur la touche Tabulation, puis sur Entrée pour reprendre vos recherches et voir les activités pertinentes dans votre historique Chrome Importation terminée Les règles sont chargées Connectez-vous au réseau diff --git a/components/strings/components_strings_gl.xtb b/components/strings/components_strings_gl.xtb index d689d82fcfe441..e3076a6c3a768f 100644 --- a/components/strings/components_strings_gl.xtb +++ b/components/strings/components_strings_gl.xtb @@ -731,6 +731,7 @@ En caso contrario, a configuración de privacidade impedirao. Se o permites, o c Autenticación biométrica Botón Actualizar Chrome. Preme Intro para actualizar Chrome desde a configuración do navegador Bandexa 5 +Gardar na Conta de Google Index-4x6-Ext Aplicación: Validación realizada correctamente @@ -1408,6 +1409,7 @@ En caso contrario, a configuración de privacidade impedirao. Se o permites, o c É posible que a páxina web de estea temporalmente inactiva ou que se trasladase definitivamente a un enderezo web novo. Emitido para É posible que a túa conta de Google teña outras formas do historial de navegación en history.google.com +Botón Retomar percorrido; para retomar o percorrido e ver a actividade relevante do teu historial de Chrome, preme Introducir Ver o texto e as imaxes que se copian no portapapeis Queres lembrar o teu código da UPI? Ver tarxeta virtual @@ -1483,6 +1485,7 @@ En caso contrario, a configuración de privacidade impedirao. Se o permites, o c A partir de agora, confirma as tarxetas máis rápido con Touch ID Material Dobrez en ventá +Retoma o percorrido para ver a actividade relevante do teu historial de Chrome Verificar o teu número de teléfono Editar información de contacto rexeitou a conexión. @@ -1534,6 +1537,7 @@ En caso contrario, a configuración de privacidade impedirao. Se o permites, o c Borrar Acceder ás cookies e aos datos dos sitios. {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)}} +Retomar percorrido 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. Tipo de letra con serifas Xestionadas por: @@ -2185,6 +2189,7 @@ Detalles adicionais: Confirmando tarxeta… Ningunha compañía ou organización xestiona este navegador. A actividade deste dispositivo pódese xestionar fóra de Chrome. Máis información Novo +; para retomar o percorrido e ver a actividade relevante do teu historial de Chrome, preme Tabulador e, despois, Introducir Cargouse Cargáronse as políticas Conectarse á rede diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb index 2dbda10686acb5..a0261ac48629a6 100644 --- a/components/strings/components_strings_hi.xtb +++ b/components/strings/components_strings_hi.xtb @@ -732,6 +732,7 @@ बायोमेट्रिक्स 'Chrome अपडेट करें' बटन, अपनी Chrome सेटिंग से Chrome अपडेट करने के लिए Enter दबाएं ट्रे 5 +Google खाते में सेव करें इंडेक्स-4x6-एक्स्ट्रा ऐप्लिकेशन: मान्यकरण सफल @@ -1409,6 +1410,7 @@ हो सकता है कि पर मौजूद वेबपेज अस्थायी रूप से काम नहीं कर रहा हो या उसे स्थायी रूप से किसी नए वेब पते पर ले जाया गया हो. इसको जारी आपके Google खाते में myactivity.google.com पर दूसरी तरह के ब्राउज़िंग इतिहास हो सकते हैं +ढूंढना जारी रखने के लिए बटन, ढूंढना जारी रखने के लिए Enter दबाएं. इससे आपको 'Chrome इतिहास' में मिलती-जुलती गतिविधि दिखेगी क्लिपबोर्ड पर कॉपी किए गए लेख और इमेज देखें क्या आप चाहते हैं कि हम आपका UPI आईडी रखें? वर्चुअल कार्ड देखें @@ -1484,6 +1486,7 @@ अब Touch ID का इस्तेमाल करके अपने कार्ड की जल्दी पुष्टि करें मटीरियल गेट फ़ोल्ड +अपने 'Chrome इतिहास' में मिलती-जुलती गतिविधि देखने के लिए ढूंढना जारी रखें अपने फ़ोन नंबर की पुष्टि करें संपर्क जानकारी में बदलाव करें ने कनेक्ट करने से मना कर दिया है. @@ -1535,6 +1538,7 @@ साफ़ करें कुकी और साइट के डेटा को ऐक्सेस करना चाहती है. {COUNT,plural, =0{कोई नहीं}=1{1 साइट से (आप अपने Google खाते से साइन आउट नहीं होंगे)}one{# साइटों से (आप अपने Google खाते से साइन आउट नहीं होंगे)}other{# साइटों से (आप अपने Google खाते से साइन आउट नहीं होंगे)}} +ढूंढना जारी रखें आपका एडमिन किसी दूसरे डिवाइस से आपके ब्राउज़र का सेट अप बदल सकता है. इस डिवाइस की गतिविधि को Chrome से बाहर भी प्रबंधित किया जा सकता है. Serif फ़ॉन्ट इसे यह मैनेज करता है: @@ -2187,6 +2191,7 @@ कार्ड की पुष्टि की जा रही है... यह ब्राउज़र कोई कंपनी या दूसरा संगठन प्रबंधित नहीं करता. इस डिवाइस की गतिविधि Chrome से बाहर प्रबंधित की जा सकती है. ज़्यादा जानें ताज़ा +, ढूंढना जारी रखने के लिए Tab दबाएं और फिर Enter दबाएं. इससे आपको 'Chrome इतिहास' में मिलती-जुलती गतिविधि दिखेगी अपलोड किया गया नीतियां लोड हो गई हैं नेटवर्क से कनेक्ट करें diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb index 0a6cf61a2314be..5879efa929cd0c 100644 --- a/components/strings/components_strings_hr.xtb +++ b/components/strings/components_strings_hr.xtb @@ -733,6 +733,7 @@ To će u suprotnom biti onemogućeno na temelju vaših postavki privatnosti. To Biometrijski podaci Gumb Ažuriranje Chromea, pritisnite Enter da biste ažurirali Chrome u postavkama Chromea Ladica 5 +Spremanje na Google račun Index-4x6-Ext Aplikacija: Valjanost je uspješna @@ -1411,6 +1412,7 @@ To će u suprotnom biti onemogućeno na temelju vaših postavki privatnosti. To Web-stranica na možda privremeno nije dostupna ili je trajno premještena na novu web-adresu. Izdano za Na vašem Google računu možda postoje drugi oblici povijesti pregledavanja na stranici myactivity.google.com +Gumb Nastavi putovanje, pritisnite Enter da biste nastavili putovanje i vidjeli relevantne aktivnosti u svojoj povijesti na Chromeu vidjeti tekst i slike koje kopirate u međuspremnik Upamtiti vaš UPI ID? Prikaži virtualnu karticu @@ -1486,6 +1488,7 @@ To će u suprotnom biti onemogućeno na temelju vaših postavki privatnosti. To Odsad brže potvrdite svoje kartice upotrebom značajke Touch ID. Materijal Presavijanje u obliku prozora +Nastavite putovanje da biste vidjeli relevantne aktivnosti u svojoj povijesti na Chromeu Potvrdite svoj telefonski broj Uređivanje podataka za kontakt Host odbio je povezivanje. @@ -1537,6 +1540,7 @@ To će u suprotnom biti onemogućeno na temelju vaših postavki privatnosti. To Izbriši pristupiti kolačićima i podacima web-lokacije. {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)}} +Nastavi putovanje Vaš administrator može daljinski promijeniti postavke preglednika. Aktivnostima na ovom uređaju može se upravljati i izvan Chromea. Font Serif Upravlja: @@ -2190,6 +2194,7 @@ i netočne vjerodajnice. To može značiti da se neki napadač pokušava predsta Potvrđivanje kartice... Preglednikom ne upravlja tvrtka ili neka druga organizacija. Aktivnostima na ovom uređaju možda se upravlja izvan Chromea. Saznajte više Novo +, pritisnite Tab, a zatim Enter da biste nastavili putovanje i vidjeli relevantne aktivnosti u svojoj povijesti na Chromeu Preneseno Pravila se učitavaju Povezivanje s mrežom diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb index 97f335d95fcf1e..70d569fd936acb 100644 --- a/components/strings/components_strings_hu.xtb +++ b/components/strings/components_strings_hu.xtb @@ -730,6 +730,7 @@ Ezt egyéb esetben letiltják az Ön adatvédelmi beállításai. Az engedélyez Biometria 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 5. tálca +Mentés Google-fiókba Index-4x6-Ext Alkalmazás: Sikeres érvényesítés @@ -1407,6 +1408,7 @@ Ezt egyéb esetben letiltják az Ön adatvédelmi beállításai. Az engedélyez Előfordulhat, hogy a(z) webhelyen található oldal ideiglenesen nem érhető el, vagy véglegesen új címre költözött. Tulajdonos 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 myactivity.google.com webhelyen +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 Megtekinteni a vágólapra másolt szövegeket és képeket Emlékszik UPI-azonosítójára? Virtuális kártya megtekintése @@ -1482,6 +1484,7 @@ Ezt egyéb esetben letiltják az Ön adatvédelmi beállításai. Az engedélyez Mostantól gyorsabban igazolhatja kártyáit a Touch ID használatával Anyag Kihajtható +Keresés folytatása a Chrome-előzmények között található releváns tevékenységek megtekintéséhez Telefonszám ellenőrzése Kapcsolattartási adatok szerkesztése A(z) visszautasította a csatlakozást. @@ -1533,6 +1536,7 @@ Ezt egyéb esetben letiltják az Ön adatvédelmi beállításai. Az engedélyez Törlés Hozzáférés a cookie-khoz és a webhelyadatokhoz. {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)}} +Keresés folytatása 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. Serif betűtípus Kezelő: @@ -2185,6 +2189,7 @@ További részletek: Kártya ellenőrzése… 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. További információ. Friss +, 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 Feltöltve Házirendek betöltve Csatlakozás hálózathoz diff --git a/components/strings/components_strings_hy.xtb b/components/strings/components_strings_hy.xtb index 2a09d50a372865..9dda317ba98fce 100644 --- a/components/strings/components_strings_hy.xtb +++ b/components/strings/components_strings_hy.xtb @@ -734,6 +734,7 @@ Կենսաչափական համակարգեր «Թարմացնել Chrome-ը» կոճակ։ Սեղմեք Enter՝ Chrome-ը թարմացելու համար։ Դարակ 5 +Պահեք Google հաշվում Index-4x6-Ext Ծրագիրը՝ Վավերացումը հաջողվեց @@ -1411,6 +1412,7 @@ Հնարավոր է, որ կայքէջը ժամանակավորապես անհասանելի է կամ մշտապես տեղափոխվել է նոր հասցե: Տրված` Ձեր Google հաշվում կարող են լինել այցելությունների պատմության այլ ձևեր ևս: Դրանք կարող եք գտնել myactivity.google.com էջում: +«Շարունակել որոնումը» կոճակ։ Chrome-ի պատմության մեջ նման հարցումները դիտելու համար սեղմեք Enter։ Տեսնել սեղմատախտակին պատճենված տեքստը և պատկերները Հիշո՞ւմ եք ձեր UPI ID-ն Դիտել վիրտուալ քարտը @@ -1486,6 +1488,7 @@ Այսուհետ ավելի արագ հաստատեք ձեր քարտերը Touch ID-ի միջոցով Material Երկփեղկ ծալում +Դիտել նման հարցումներ Chrome-ի պատմության մեջ Հաստատեք ձեր հեռախոսահամարը Փոփոխեք կոնտակտային տվյալները -ը մերժեց կապակցումը: @@ -1537,6 +1540,7 @@ Մաքրել Օգտագործել քուքիներն ու կայքի տվյալները։ {COUNT,plural, =0{Ոչինչ չկա}=1{1 կայքից (դուք դուրս չեք գա ձեր Google հաշվից)}one{# կայքից (դուք դուրս չեք գա ձեր Google հաշվից)}other{# կայքից (դուք դուրս չեք գա ձեր Google հաշվից)}} +Շարունակել որոնումը Ձեր ադմինիստրատորը կարող է հեռակա փոխել ձեր դիտարկիչի կարգավորումները։ Սարքում արվող գործողությունները նույնպես կարող են կառավարվել Chrome-ից դուրս։ Serif տառատեսակ Կառավարիչ՝ @@ -2188,6 +2192,7 @@ Քարտի հաստատում... Ձեր դիտարկիչը չի կառավարվում որևէ ընկերության կամ կազմակերպության կողմից։ Սարքում արվող գործողությունները կարող են կառավարվել Chrome-ից դուրս։ Իմանալ ավելին Թարմ +։ Chrome-ի պատմության մեջ նման հարցումները դիտելու համար սեղմեք Tab, ապա՝ Enter։ Վերբեռնված է Կանոնները բեռնվել են Կապակցեք ցանցին diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb index 8ac6e2bb12f454..b1d62d17ed90b7 100644 --- a/components/strings/components_strings_id.xtb +++ b/components/strings/components_strings_id.xtb @@ -729,6 +729,7 @@ Jika tidak, ini akan diblokir oleh setelan privasi Anda. Ini akan memungkinkan k Biometrik Tombol Update Chrome, tekan Enter untuk mengupdate Chrome dari setelan Chrome Baki 5 +Simpan ke Akun Google Index-4x6-Ext Aplikasi: Validasi berhasil @@ -1401,6 +1402,7 @@ Jika tidak, ini akan diblokir oleh setelan privasi Anda. Ini akan memungkinkan k Halaman web di mungkin tidak aktif untuk sementara atau dipindahkan secara permanen ke alamat web baru. Diterbitkan Untuk Akun Google Anda mungkin memiliki bentuk histori penjelajahan lainnya di myactivity.google.com +Tombol Lanjutkan penelusuran, tekan Enter untuk melanjutkan penelusuran dan melihat aktivitas yang relevan di histori Chrome Anda Melihat teks dan gambar yang disalin ke papan klip Ingat ID UPI Anda? Lihat kartu virtual @@ -1476,6 +1478,7 @@ Jika tidak, ini akan diblokir oleh setelan privasi Anda. Ini akan memungkinkan k Mulai sekarang, konfirmasikan kartu Anda lebih cepat menggunakan Touch ID Material Gate fold +Lanjutkan penelusuran untuk melihat aktivitas yang relevan di histori Chrome Anda Verifikasi nomor telepon Anda Edit info kontak menolak untuk tersambung. @@ -1527,6 +1530,7 @@ Jika tidak, ini akan diblokir oleh setelan privasi Anda. Ini akan memungkinkan k Hapus Mengakses cookie dan data situs. {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)}} +Lanjutkan penelusuran Administrator dapat mengubah penyiapan browser Anda dari jarak jauh. Aktivitas di perangkat ini juga dapat dikelola di luar Chrome. Font Serif Dikelola oleh: @@ -2174,6 +2178,7 @@ Jika tidak, ini akan diblokir oleh setelan privasi Anda. Ini akan memungkinkan k Mengonfirmasi kartu... Browser ini tidak dikelola oleh perusahaan atau organisasi lain. Aktivitas di perangkat ini mungkin dikelola di luar Chrome. Pelajari lebih lanjut Baru +, tekan Tab, lalu Enter untuk melanjutkan penelusuran dan melihat aktivitas yang relevan di histori Chrome Anda Diupload Kebijakan dimuat Sambungkan ke jaringan diff --git a/components/strings/components_strings_is.xtb b/components/strings/components_strings_is.xtb index d7e6ad54effa8f..a79b8231f974a4 100644 --- a/components/strings/components_strings_is.xtb +++ b/components/strings/components_strings_is.xtb @@ -735,6 +735,7 @@ og röng skilríki til baka. Þetta getur gerst þegar tölvuþrjótur reynir a Lífkenni Hnappurinn Uppfæra Chrome, ýttu á Enter til að uppfæra Chrome úr stillingum Chrome Bakki 5 +Vista á Google reikningi Index-4x6-Ext Forrit: Sannvottun heppnaðist @@ -1412,6 +1413,7 @@ og röng skilríki til baka. Þetta getur gerst þegar tölvuþrjótur reynir a Vefsíðan á gæti legið niðri tímabundið eða hafa verið færð á nýtt veffang fyrir fullt og allt. Úthlutað til Google reikningurinn þinn kann að vera með annars konar vefskoðunarferil á myactivity.google.com +Hnappur til að halda ferðinni áfram, ýttu á Enter til að halda ferðinni áfram og sjá viðkomandi virkni í Chrome ferlinum Sjá texta og myndir sem þú afritar á klippiborðið Muna eftir UPI-auðkenni? Skoða sýndarkort @@ -1487,6 +1489,7 @@ og röng skilríki til baka. Þetta getur gerst þegar tölvuþrjótur reynir a Staðfestu kortin þín hraðar með því að nota Touch ID héðan í frá Nýja útlitshönnunin Bæklingabrot +Haltu ferðinni áfram til að sjá viðkomandi virkni í Chrome ferlinum Staðfestu símanúmerið þitt Breyta samskiptaupplýsingum neitaði að koma á tengingu. @@ -1538,6 +1541,7 @@ og röng skilríki til baka. Þetta getur gerst þegar tölvuþrjótur reynir a Hreinsa Fá aðgang að fótsporum og gögnum vefsvæða. {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)}} +Halda ferðinni áfram Kerfisstjórinn þinn getur breytt uppsetningu vafrans með fjartengingu. Virkni þinni í þessu tæki er einnig hægt að stjórna utan Chrome. Serif-letur Stjórnað af: @@ -2189,6 +2193,7 @@ og röng skilríki til baka. Þetta getur gerst þegar tölvuþrjótur reynir a Staðfestir kort... Þ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. Frekari upplýsingar Ferskt +, ýttu á dálkalykilinn og svo á Enter til að halda ferðinni áfram og sjá viðkomandi virkni í Chrome ferlinum Sent Reglum var hlaðið Tengjast neti diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb index adc9c7855d43fe..c9cf5d73f3a3a3 100644 --- a/components/strings/components_strings_it.xtb +++ b/components/strings/components_strings_it.xtb @@ -731,6 +731,7 @@ In caso contrario l'uso sarà bloccato dalle impostazioni sulla privacy. I conte Dati biometrici Pulsante Aggiorna Chrome, premi Invio per aggiornare Chrome dalle relative impostazioni Vassoio 5 +Salva nell'Account Google Index-4x6-Ext Applicazione: Convalida riuscita @@ -1408,6 +1409,7 @@ In caso contrario l'uso sarà bloccato dalle impostazioni sulla privacy. I conte La pagina web all'indirizzo potrebbe non essere momentaneamente disponibile o potrebbe essere stata trasferita definitivamente a un nuovo indirizzo web. Rilasciato a Il tuo Account Google potrebbe avere altre forme di cronologia di navigazione all'indirizzo myactivity.google.com +Pulsante Riprendi il percorso, premi Invio per riprendere il percorso e visualizzare le attività pertinenti nella tua cronologia di Chrome Leggere testi e immagini copiati negli appunti Ricordi il tuo ID UPI? Visualizza carta virtuale @@ -1482,6 +1484,7 @@ In caso contrario l'uso sarà bloccato dalle impostazioni sulla privacy. I conte Verifica più velocemente le tue carte usando Touch ID d'ora in poi Material Piegatura a finestra +Riprendi il percorso per visualizzare le attività pertinenti nella tua cronologia di Chrome Verifica il numero di telefono Modifica informazioni di contatto Connessione negata da . @@ -1533,6 +1536,7 @@ In caso contrario l'uso sarà bloccato dalle impostazioni sulla privacy. I conte Cancella Accedere a cookie e dati del sito. {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)}} +Riprendi il percorso 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. Carattere serif Gestiti da: @@ -2184,6 +2188,7 @@ Ulteriori dettagli: Conferma della carta... 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. Ulteriori informazioni Vivace +, premi Tab poi Invio per riprendere il percorso e visualizzare le attività pertinenti nella tua cronologia di Chrome Caricato I criteri sono stati caricati Collegati alla rete diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb index f98f308e139cb0..4da5a2d38fd5c5 100644 --- a/components/strings/components_strings_iw.xtb +++ b/components/strings/components_strings_iw.xtb @@ -734,6 +734,7 @@ מידע ביומטרי ‏הלחצן 'עדכון Chrome', יש להקיש על Enter כדי לעדכן את דפדפן Chrome בהגדרות Chrome מגש 5 +‏שמירה בחשבון Google Index-4x6-Ext אפליקציה: האימות בוצע בהצלחה @@ -1414,6 +1415,7 @@ Del ייתכן שדף האינטרנט בכתובת אינו פעיל זמנית, או שהוא הועבר לכתובת אינטרנט קבועה אחרת. מונפק ל ‏ייתכן שיהיה אפשר לגשת לסוגים אחרים של היסטוריית גלישה בחשבון Google בכתובת myactivity.google.com. +‏הלחצן 'המשך התהליך', יש להקיש על Enter להמשך התהליך ולהצגת פעילות רלוונטית בהיסטוריה ב-Chrome גישה אל טקסט ותמונות שהועתקו ללוח ‏מזהה UPI שלך זכור לך? לצפייה בכרטיס הווירטואלי @@ -1489,6 +1491,7 @@ Del ‏כדי לאשר את הכרטיסים שלך מהר יותר, אפשר להשתמש ב-Touch ID מעכשיו והלאה עיצוב חדשני תלת-ממדי כנף בקיפול +‏המשך התהליך מאפשר הצגת פעילות רלוונטית בהיסטוריה שלך ב-Chrome אימות מספר הטלפון שלך עריכת הפרטים ליצירת קשר לא ניתן היה להתחבר אל . @@ -1540,6 +1543,7 @@ Del ניקוי ‏לקבל גישה לקובצי Cookie ולנתוני אתרים. {COUNT,plural, =0{ללא}=1{‏מאתר אחד (לא תבוצע יציאה מחשבון Google שלך.)}two{‏מ-# אתרים (לא תבוצע יציאה מחשבון Google שלך.)}many{‏מ-# אתרים (לא תבוצע יציאה מחשבון Google שלך.)}other{‏מ-# אתרים (לא תבוצע יציאה מחשבון Google שלך.)}} +המשך התהליך ‏מנהל המערכת יכול לשנות את הגדרת הדפדפן שלך מרחוק. בנוסף, ניתן לנהל את הפעילות במכשיר הזה מחוץ ל-Chrome. ‏גופן Serif בניהול של: @@ -2191,6 +2195,7 @@ Del אישור הכרטיס מתבצע... ‏הדפדפן הזה לא מנוהל על ידי חברה או ארגון אחר. ייתכן שהפעילות במכשיר הזה מנוהלת מחוץ ל-Chrome. מידע נוסף מרענן +, יש להקיש על Tab ואז על Enter להמשך התהליך ולהצגת פעילות רלוונטית בהיסטוריה ב-Chrome הועלה המדיניות נטענה התחברות לרשת diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb index 2c2d8073dc33d2..1820b261eb23f7 100644 --- a/components/strings/components_strings_ja.xtb +++ b/components/strings/components_strings_ja.xtb @@ -1713,7 +1713,7 @@ メディアの操作 いいえ / -該当なし +対象外です カードの確認 住所を更新 安全確認 diff --git a/components/strings/components_strings_ka.xtb b/components/strings/components_strings_ka.xtb index df3659754a457e..f0c527b2fd7936 100644 --- a/components/strings/components_strings_ka.xtb +++ b/components/strings/components_strings_ka.xtb @@ -728,6 +728,7 @@ ბიომეტრიული მონაცემები Chrome-ის განახლების ღილაკი, Chrome-ის პარამეტრებიდან Chrome-ის გასაახლებლად დააჭირეთ კლავიშს Enter ლანგარი 5 +შეინახეთ Google ანგარიშში Index-4x6-Ext აპლიკაცია: წარმატებული შემოწმება @@ -1400,6 +1401,7 @@ -ზე არსებული ვებგვერდი შეიძლება იყოს დროებით გათიშული ან სამუდამოდ ახალ ვებ მისამართზე გადასული. გაცემულია თქვენს Google ანგარიშში შეიძლება ინახებოდეს სხვა ტიპის დათვალიერების ისტორიაც, რომელიც ხელმისაწვდომია მისამართზე: myactivity.google.com +პროცესის გაგრძელების ღილაკი, პროცესის გასაგრძელებლად და თქვენს Chrome-ის ისტორიაში შესაბამისი აქტივობის სანახავად დააჭირეთ კლავიშს Tab, შემდეგ კი — Enter-ს გაცვლის ბუფერში კოპირებული ტექსტისა და სურათების ნახვა გსურთ თქვენი UPI ID-ს დამახსოვრება? ვირტუალური ბარათის ჩვენება @@ -1475,6 +1477,7 @@ დაადასტურეთ ბარათები უფრო სწრაფად ამიერიდან Touch ID-ს გამოყენების მეშვეობით Material დაკეცვა ჭიშკრის ფორმით +გააგრძელეთ პროცესი, თქვენს Chrome-ის ისტორიაში შესაბამისი აქტივობა რომ იხილოთ დაადასტურეთ თქვენი ტელეფონის ნომერი საკონტაქტო ინფორმაციის რედაქტირება -მა უარყო დაკავშირება. @@ -1526,6 +1529,7 @@ გასუფთავება ქუქი-ჩანაწერებსა და საიტის მონაცემებზე წვდომა. {COUNT,plural, =0{არცერთი}=1{1 საიტიდან (თქვენ არ გამოხვალთ Google ანგარიშიდან)}other{# საიტიდან (თქვენ არ გამოხვალთ Google ანგარიშიდან)}} +პროცესის გაგრძელება თქვენს ადმინისტრატორს დისტანციურად შეუძლია ბრაუზერში დაყენებული პარამეტრების შეცვლა. ამ მოწყობილობაზე აქტივობა შეიძლება იმართებოდეს Chrome-ს მიღმაც. Serif შრიფტი მმართველი: @@ -2177,6 +2181,7 @@ მიმდინარეობს ბარათის დადასტურება... ამ ბრაუზერს არ მართავს კომპანია თუ სხვა ორგანიზაცია. ამ მოწყობილობაზე აქტივობა შეიძლება იმართებოდეს Chrome-ს მიღმა. შეიტყვეთ მეტი ნორჩი +, პროცესის გასაგრძელებლად და თქვენს Chrome-ის ისტორიაში შესაბამისი აქტივობის სანახავად დააჭირეთ კლავიშს Tab, შემდეგ კი — Enter-ს ატვირთულია წესები ჩაიტვირთა ქსელთან დაკავშირება diff --git a/components/strings/components_strings_kk.xtb b/components/strings/components_strings_kk.xtb index d7080b00806ef9..484ef527379853 100644 --- a/components/strings/components_strings_kk.xtb +++ b/components/strings/components_strings_kk.xtb @@ -733,6 +733,7 @@ Биометрика "Chrome-ды жаңарту" түймесі, Chrome параметрлерінен Chrome-ды жаңарту үшін Enter пернесін басыңыз. 5-науа +Google есептік жазбасына сақтау Index-4x6-Ext Қолданба: Тексеру сәтті аяқталды @@ -1410,6 +1411,7 @@ мекенжайындағы веб-бет уақытша өшірілген немесе біржола жаңа мекенжайға көшірілген болуы мүмкін. Кімге берілді myactivity.google.com бетінде Google есептік жазбасымен шолу тарихының басқа да үлгілері болуы мүмкін. +Іздеуді жалғастыру түймесі. Іздеуді жалғастырып, Chrome тарихынан сәйкес сұрауларды көру үшін Enter пернесін басыңыз. Буферге көшірілетін мәтіндер мен кескіндерді көру UPI идентификаторы сақталсын ба? Виртуалды картаны көру @@ -1485,6 +1487,7 @@ Қазірден бастап Touch ID арқылы карталараңызды жылдам растаңыз Материал Қақпа тәрізді бүктеу +Chrome тарихынан сәйкес сұрауларды көру үшін іздеуді жалғастыру Телефон нөміріңізді растаңыз Байланыс ақпаратын өңдеу байланыстан бас тартты. @@ -1536,6 +1539,7 @@ Тазалау Cookie файлдарын және сайт деректерін пайдалану. {COUNT,plural, =0{Жоқ}=1{1 сайттан (Google есептік жазбаңыздан шықпайсыз)}other{# сайттан (Google есептік жазбаңыздан шықпайсыз)}} +Іздеуді жалғастыру Браузер параметрін әкімші қашықтан өзгерте алады. Сонымен қатар құрылғыдағы әрекеттерді Chrome браузерінен тыс басқаруға болады. Serif қарпі Басқарушы: @@ -2187,6 +2191,7 @@ Карта расталуда... Бұл браузер компания немесе басқа ұйым арқылы басқарылмайды. Құрылғыдағы әрекет Chrome браузерінен тыс басқарылуы мүмкін. Толығырақ Жаңа +"". Іздеуді жалғастырып, Chrome тарихынан сәйкес сұрауларды көру үшін Tab, сосын Enter пернесін басыңыз. Жүктеп салынды Саясаттар жүктелді. Желіге қосылу diff --git a/components/strings/components_strings_km.xtb b/components/strings/components_strings_km.xtb index ee00468687c61e..6f1a4c2c08c8d0 100644 --- a/components/strings/components_strings_km.xtb +++ b/components/strings/components_strings_km.xtb @@ -737,6 +737,7 @@ ជីវមាត្រ ប៊ូតុង "ដំឡើងកំណែ Chrome" ចុច "Enter" ដើម្បីដំឡើងកំណែ Chrome ពីការកំណត់ Chrome របស់អ្នក ទម្រទី 5 +រក្សាទុក​នៅក្នុង​គណនី Google Index-4x6-Ext កម្មវិធី៖ ការពិនិត្យសុពលភាពបានជោគជ័យ @@ -1415,6 +1416,7 @@ គេហទំព័រនៅ អាចមិនដំណើរការបណ្តោះអាសន្ន ឬវាអាចត្រូវបានផ្លាស់ទីទៅអាសយដ្ឋានគេហទំព័រថ្មី។ បោះផ្សាយជូន គណនី Google របស់អ្នកអាចមានទម្រង់ប្រវត្តិរុករកផ្សេងទៀតនៅក្នុង myactivity.google.com +ប៊ូតុង​បន្តការស្វែងរក រួចចុច Enter ដើម្បីបន្តការស្វែងរក​របស់អ្នក និងមើល​សកម្មភាព​ដែលពាក់ព័ន្ធ​នៅក្នុងប្រវត្តិ Chrome របស់អ្នក មើល​អត្ថបទ និង​រូបភាព​ដែល​បានចម្លង​ទៅ​អង្គ​ចងចាំ ចងចាំ​លេខសម្គាល់ UPI របស់អ្នក​ដែរទេ​? មើល​កាតនិម្មិត @@ -1490,6 +1492,7 @@ បញ្ជាក់​បណ្ណ​របស់អ្នក​រហ័ស​ជាងមុន​ដោយប្រើ Touch ID ចាប់ពី​ពេលនេះ​តទៅ សម្ភារៈ បត់ជា​ផ្ទាំងៗមានសណ្ឋានជាទ្វារ +បន្ត​ការស្វែងរក​ដើម្បីមើល​សកម្មភាព​ដែលពាក់ព័ន្ធ​នៅក្នុង​ប្រវត្តិ Chrome របស់អ្នក ផ្ទៀងផ្ទាត់​លេខ​ទូរសព្ទ​របស់​អ្នក កែសម្រួលព័ត៌មានទំនាក់ទំនង បានបដិសេធក្នុងការតភ្ជាប់ @@ -1541,6 +1544,7 @@ ជម្រះ ចូលប្រើ​ទិន្នន័យ​គេហទំព័រ និង​ខូគី។ {COUNT,plural, =0{គ្មាន}=1{ពីទំព័រ 1 (អ្នក​នឹង​មិនចាក​ចេញ​ពី​គណនី Google របស់អ្នក​ទេ)}other{ពីទំព័រ # (អ្នក​នឹង​មិនចាក​ចេញ​ពី​គណនី Google របស់អ្នក​ទេ)}} +បន្ត​ការស្វែងរក អ្នកគ្រប់គ្រង​របស់អ្នក​អាចប្ដូរ​ការរៀបចំ​កម្មវិធីរុករកតាមអ៊ីនធឺណិត​របស់អ្នក​ពីចម្ងាយបាន។ សកម្មភាព​នៅលើឧបករណ៍នេះ​ក៏អាចត្រូវបាន​គ្រប់គ្រងនៅក្រៅ Chrome ផងដែរ។ ពុម្ពអក្សរ Serif ស្ថិតក្រោមការគ្រប់គ្រងរបស់៖ @@ -2193,6 +2197,7 @@ កំពុង​បញ្ជាក់​បណ្ណ​ឥណទាន... កម្មវិធីរុករក​តាមអ៊ីនធឺណិត​នេះ​មិនស្ថិតក្រោម​ការគ្រប់គ្រង​របស់ក្រុមហ៊ុន ឬ​ស្ថាប័នផ្សេងទេ​។ សកម្មភាព​នៅលើឧបករណ៍នេះ​អាចនឹងត្រូវបាន​គ្រប់គ្រងក្រៅពី Chrome។ ស្វែងយល់បន្ថែម ស្រស់ស្រាយ +, ចុច Tab រួចចុច Enter ដើម្បីបន្ត​ការស្វែងរក​របស់អ្នក និងមើល​សកម្មភាព​ដែលពាក់ព័ន្ធ​នៅក្នុងប្រវត្តិ Chrome របស់អ្នក បាន​បង្ហោះ គោលការណ៍ត្រូវបានផ្ទុក ភ្ជាប់ទៅបណ្តាញ diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb index cb722d80c23f5d..c3f2fc4c58d5ff 100644 --- a/components/strings/components_strings_kn.xtb +++ b/components/strings/components_strings_kn.xtb @@ -727,6 +727,7 @@ ಬಯೋಮೆಟ್ರಿಕ್ಸ್ Chrome ಬಟನ್ ಅಪ್‌ಡೇಟ್‌ ಮಾಡಿ, ನಿಮ್ಮ Chrome ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಂದ Chrome ಅನ್ನು ಅಪ್‌ಡೇಟ್‌ ಮಾಡಲು Enter ಒತ್ತಿರಿ ಟ್ರೇ 5 +Google ಖಾತೆಗೆ ಉಳಿಸಿ Index-4x6-Ext ಅಪ್ಲಿಕೇಶನ್: ಊರ್ಜಿತಗೊಳಿಸುವಿಕೆಯು ಯಶಸ್ವಿಯಾಗಿದೆ @@ -1399,6 +1400,7 @@ ನಲ್ಲಿರುವ ವೆಬ್‌ಪುಟ ತಾತ್ಕಾಲಿಕವಾಗಿ ಕೆಲಸ ಮಾಡುತ್ತಿಲ್ಲ ಅಥವಾ ಅದನ್ನು ಶಾಶ್ವತವಾಗಿ ಹೊಸ ವೆಬ್ ವಿಳಾಸಕ್ಕೆ ಸರಿಸಲಾಗಿದೆ. ಇವರಿಗೆ ನೀಡಲಾಗಿದೆ ನಿಮ್ಮ Google ಖಾತೆಯು history.google.com ನಲ್ಲಿ ಇತರ ವಿಧಗಳ ಬ್ರೌಸಿಂಗ್ ಇತಿಹಾಸವನ್ನು ಹೊಂದಿರಬಹುದು +ನಿಮ್ಮ ಪ್ರಯಾಣವನ್ನು ಪುನರಾರಂಭಿಸಲು ಮತ್ತು ನಿಮ್ಮ Chrome ಇತಿಹಾಸದಲ್ಲಿ ಸಂಬಂಧಿತ ಚಟುವಟಿಕೆಯನ್ನು ನೋಡಲು, ಪ್ರಯಾಣದ ಬಟನ್ ಪುನರಾರಂಭಿಸಿ, Enter ಒತ್ತಿ ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸಿರುವ ಪಠ್ಯ ಮತ್ತು ಚಿತ್ರಗಳನ್ನು ನೋಡಿ ನಿಮ್ಮ UPI ಐಡಿ ನೆನಪಿದೆಯೇ? ವರ್ಚುವಲ್ ಕಾರ್ಡ್ ವೀಕ್ಷಿಸಿ @@ -1473,6 +1475,7 @@ ಇನ್ನು ಮುಂದೆ, ಟಚ್ ID ಬಳಸುವ ಮೂಲಕ ನಿಮ್ಮ ಕಾರ್ಡ್‌ಗಳನ್ನು ವೇಗವಾಗಿ ದೃಢೀಕರಿಸಿ ವಸ್ತು ಗೇಟ್ ಮಾದರಿಯಲ್ಲಿ ಮಡಿಸಿ +ನಿಮ್ಮ Chrome ಇತಿಹಾಸದಲ್ಲಿ ಸಂಬಂಧಿತ ಚಟುವಟಿಕೆಯನ್ನು ನೋಡಲು ಪ್ರಯಾಣವನ್ನು ಪುನರಾರಂಭಿಸಿ ನಿಮ್ಮ ದೂರವಾಣಿ ಸಂಖ್ಯೆಯನ್ನು ದೃಢೀಕರಿಸಿ ಸಂಪರ್ಕ ಮಾಹಿತಿ ಎಡಿಟ್ ಮಾಡಿ ಸಂಪರ್ಕಗೊಳ್ಳಲು ನಿರಾಕರಿಸಿದೆ. @@ -1524,6 +1527,7 @@ ತೆರವುಗೊಳಿಸಿ ಕುಕೀಗಳು ಮತ್ತು ಸೈಟ್ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಿ. {COUNT,plural, =0{ಯಾವುದೂ ಇಲ್ಲ}=1{1 ಸೈಟ್‌‍ನಿಂದ (ನಿಮ್ಮ Google ಖಾತೆಯಿಂದ ನಿಮ್ಮನ್ನು ಸೈನ್ ಔಟ್ ಮಾಡುವುದಿಲ್ಲ)}one{# ಸೈಟ್‌ಗಳಿಂದ (ನಿಮ್ಮ Google ಖಾತೆಯಿಂದ ನಿಮ್ಮನ್ನು ಸೈನ್ ಔಟ್ ಮಾಡುವುದಿಲ್ಲ)}other{# ಸೈಟ್‌ಗಳಿಂದ (ನಿಮ್ಮ Google ಖಾತೆಯಿಂದ ನಿಮ್ಮನ್ನು ಸೈನ್ ಔಟ್ ಮಾಡುವುದಿಲ್ಲ)}} +ಪ್ರಯಾಣವನ್ನು ಪುನರಾರಂಭಿಸಿ ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನಿಮ್ಮ ಬ್ರೌಸರ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ದೂರದಿಂದಲೇ ಬದಲಾಯಿಸಬಹುದು. ಈ ಸಾಧನದಲ್ಲಿನ ಚಟುವಟಿಕೆಯನ್ನು Chrome ನ ಹೊರಗೆ ಸಹ ನಿರ್ವಹಿಸಬಹುದು. Serif ಫಾಂಟ್ ಈ ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗುತ್ತಿದೆ: @@ -2175,6 +2179,7 @@ ಕಾರ್ಡ್‌ ದೃಢೀಕರಿಸಲಾಗುತ್ತಿದೆ... ಈ ಬ್ರೌಸರ್ ಅನ್ನು ಕಂಪನಿ ಅಥವಾ ಇತರ ಸಂಸ್ಥೆಯು ನಿರ್ವಹಿಸುತ್ತಿಲ್ಲ. ಈ ಸಾಧನದಲ್ಲಿನ ಚಟುವಟಿಕೆಯನ್ನು Chrome ನಿಂದ ಹೊರಗೆ ನಿರ್ವಹಿಸಬಹುದು. ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ ಹೊಸದು +, ನಿಮ್ಮ ಪ್ರಯಾಣವನ್ನು ಪುನರಾರಂಭಿಸಲು ಮತ್ತು ನಿಮ್ಮ Chrome ಇತಿಹಾಸದಲ್ಲಿ ಸಂಬಂಧಿತ ಚಟುವಟಿಕೆಯನ್ನು ನೋಡಲು, Tab ಒತ್ತಿ, ನಂತರ Enter ಒತ್ತಿ ಅಪ್‌ಲೋಡ್ ಮಾಡಲಾಗಿದೆ ನೀತಿಗಳನ್ನು ಲೋಡ್ ಮಾಡಲಾಗಿದೆ ನೆಟ್‌ವರ್ಕ್‌ಗೆ ಸಂಪರ್ಕಿಸು diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb index e61a9860157c4d..c529c175b08abb 100644 --- a/components/strings/components_strings_ko.xtb +++ b/components/strings/components_strings_ko.xtb @@ -728,6 +728,7 @@ 생체 인식 Chrome 업데이트 버튼, Chrome 설정에서 Chrome을 업데이트하려면 Enter 누르기 트레이 5 +Google 계정에 저장 Index-4x6-Ext 애플리케이션: 유효성 검사 성공 @@ -1400,6 +1401,7 @@ 의 웹페이지가 일시적으로 다운되었거나 새 웹 주소로 완전히 이동했을 수 있습니다. 발급 대상 Google 계정의 내 활동(myactivity.google.com)에는 인터넷 방문 기록이 다른 형식으로 남아 있을 수도 있습니다 +검색 계속하기 버튼, 검색을 계속하고 Chrome 방문 기록에서 관련 활동을 보려면 Enter를 누르세요. 클립보드에 복사된 텍스트 및 이미지를 확인합니다. UPI ID를 저장하시겠습니까? 가상 카드 보기 @@ -1475,6 +1477,7 @@ 지금부터 Touch ID를 사용하여 빠르게 카드를 확인합니다. 머티리얼 게이트 폴드 +Chrome 방문 기록에서 관련 활동을 보려면 검색을 계속하세요. 전화번호 인증 연락처 정보 수정 에서 연결을 거부했습니다. @@ -1526,6 +1529,7 @@ 삭제 쿠키 및 사이트 데이터에 액세스합니다. {COUNT,plural, =0{없음}=1{사이트 1개(Google 계정에서 로그아웃되지 않음)}other{사이트 #개(Google 계정에서 로그아웃되지 않음)}} +검색 계속하기 관리자가 원격으로 브라우저 설정을 변경할 수 있습니다. 이 기기의 활동은 Chrome 외부에서도 관리할 수 있습니다. Serif 체 관리자: @@ -2176,6 +2180,7 @@ 카드 확인 중... 이 브라우저는 회사 또는 다른 조직에서 관리하지 않습니다. 이 기기의 활동은 Chrome 외부에서도 관리할 수 있습니다. 자세히 알아보기 생기 +, 검색을 계속하고 Chrome 방문 기록에서 관련 활동을 보려면 Tab과 Enter를 차례로 누르세요 업로드됨 정책 로드됨 네트워크에 연결 diff --git a/components/strings/components_strings_ky.xtb b/components/strings/components_strings_ky.xtb index a559e8f5383562..48a6f5118734b7 100644 --- a/components/strings/components_strings_ky.xtb +++ b/components/strings/components_strings_ky.xtb @@ -733,6 +733,7 @@ Биометрика Chrome'ду жаңыртуу баскычы. Chrome жөндөөлөрүңүздөн Chrome'ду жаңыртуу үчүн, Enter баскычын басыңыз 5-түпкүч +Google аккаунтка сактоо Index-4x6-Ext Колдонмо: Жарактуулугу ийгиликтүү текшерилди @@ -1410,6 +1411,7 @@ дарегиндеги веб-баракча убактылуу иштебейт же жаңы веб дарекке биротоло көчүрүлгөн окшойт. Кимге берилген Google аккаунтуңуздун серептөө таржымалынын башка түрлөрү myactivity.google.com дарегинде болушу мүмкүн. +Саякатты улантуу баскычы, саякатыңызды улантып, Chrome´до көрүлгөн вебсайттарыңыздын арасынан ылайыктууларын көрүү үчүн, Enter баскычын басыңыз Алмашуу буферине көчүрүлгөн текстти жана сүрөттөрдү көрүү UPI идентификаторуңуз сакталсынбы? Виртуалдык картаны көрүү @@ -1485,6 +1487,7 @@ Мындан ары Touch ID функциясын колдонуп карталарды тезирээк ырастаңыз Материал Эки жолу чаптоо +Chrome´до көрүлгөн вебсайттарыңыздын арасынан ылайыктууларын көрүү үчүн саякатты улантыңыз Телефон номериңизди ырастаңыз Байланыш маалыматын түзөтүү сайты туташуудан баш тартты. @@ -1536,6 +1539,7 @@ Тазалоо Cookie файлдарына жана сайттын маалыматына кирүү мүмкүнчүлүгүн алуу. {COUNT,plural, =0{Бирөө да жок}=1{1 сайттан (Google аккаунтуңуздан чыгарылбайсыз)}other{# сайттан (Google аккаунтуңуздан чыгарылбайсыз)}} +Саякатты улантуу Администраторуңуз серепчини алыстан жөндөй алат. Бул түзмөктө аткарылган аракеттер Chrome'дон тышкары да башкарылышы мүмкүн. Serif ариби Төмөнкү тарабынан башкарылат: @@ -2187,6 +2191,7 @@ Карта текшерилүүдө… Бул серепчи компанияңыз же башка уюм тарабынан башкарылбайт. Бул түзмөктө аткарылган аракеттер Chrome'дон тышкары башкарылышы мүмкүн. Кеңири маалымат Жаңы +, саякатыңызды улантып, Chrome´до көрүлгөн вебсайттарыңыздын арасынан ылайыктууларын көрүү үчүн, Tab, андан соң Enter баскычын басыңыз Жүктөлүп берилди Саясаттар жүктөлдү Тармакка туташуу diff --git a/components/strings/components_strings_lo.xtb b/components/strings/components_strings_lo.xtb index 244f947ed8b397..bdc667ba884c81 100644 --- a/components/strings/components_strings_lo.xtb +++ b/components/strings/components_strings_lo.xtb @@ -734,6 +734,7 @@ ຂໍ້ມູນຊີວະມິຕິ ປຸ່ມອັບເດດ Chrome, ກົດ Enter ເພື່ອອັບເດດ Chrome ຈາກການຕັ້ງຄ່າ Chrome ຂອງທ່ານ ຖາດ 5 +ບັນທຶກໄປໃສ່ບັນຊີ Google Index-4x6-Ext ແອັບພລິເຄຊັນ: ການຮັບຮອງສໍາ​ເລັດ @@ -1411,6 +1412,7 @@ ໜ້າ​ເວັບ​ຢູ່​ທີ່ ອາດ​ຈະ​ໃຊ້​ງານ​ບໍ່​ໄດ້​ຊົ່ວ​ຄາວ ຫຼື ມັນ​ອາດ​ຈະ​ຍ້າຍ​ໄປ​ຫາ​ທີ່​ຢູ່​ເວັບ​ໃໝ່​ຖາ​ວອນ​ແລ້ວ. ອອກໃຫ້ກັບ ບັນຊີ Google ຂອງທ່ານອາດຈະມີປະຫວັດການທ່ອງເວັບຮູບແບບອື່ນຢູ່ myactivity.google.com. +ປຸ່ມສືບຕໍ່ສຳຫຼວດ, ກົດ Enter ເພື່ອສືບຕໍ່ການສຳຫຼວດຂອງທ່ານ ແລະ ເບິ່ງການເຄື່ອນໄຫວທີ່ກ່ຽວຂ້ອງໃນປະຫວັດ Chrome ຂອງທ່ານ ເຫັນຂໍ້ຄວາມ ແລະ ຮູບພາບທີ່ສຳເນົາໄວ້ໃນຄລິບບອດ ຈື່ UPI ID ຂອງທ່ານໄວ້ບໍ? ເບິ່ງບັດສະເໝືອນ @@ -1486,6 +1488,7 @@ ຢືນຢັນບັດຂອງທ່ານໄດ້ໄວຂຶ້ນໂດຍໃຊ້ Touch ID ຈາກນີ້ໄປ ເນື້ອ​ໃນ ພັບທົບ +ສືບຕໍ່ສຳຫຼວດເພື່ອເບິ່ງການເຄື່ອນໄຫວທີ່ກ່ຽວຂ້ອງໃນປະຫວັດ Chrome ຂອງທ່ານ ຢັ້ງຢືນເບີໂທລະສັບຂອງທ່ານ ແກ້ໄຂຂໍ້ມູນລາຍຊື່ຜູ້ຕິດຕໍ່ ໄດ້ປະຕິເສດການເຊື່ອມຕໍ່. @@ -1537,6 +1540,7 @@ ລຶບ ເຂົ້າເຖິງຄຸກກີ້ ແລະ ຂໍ້ມູນເວັບໄຊ. {COUNT,plural, =0{ບໍ່ມີ}=1{ຈາກ 1 ເວັບໄຊ (ທ່ານຈະບໍ່ຖືກນຳອອກຈາກລະບົບບັນຊີ Google ຂອງທ່ານ)}other{ຈາກ # ເວັບໄຊ (ທ່ານຈະບໍ່ຖືກນຳອອກຈາກລະບົບບັນຊີ Google ຂອງທ່ານ)}} +ສືບຕໍ່ສຳຫຼວດ ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານສາມາດປ່ຽນການຕັ້ງຄ່າໂປຣແກຣມທ່ອງເວັບຂອງທ່ານຈາກທາງໄກໄດ້. ການເຄື່ອນໄຫວໃນອຸປະກອນນີ້ອາດຈະຖືກຈັດການຢູ່ນອກ Chrome ໄດ້ເຊັ່ນກັນ. ຟອນ Serif ຈັດການໂດຍ: @@ -2188,6 +2192,7 @@ ກຳລັງຢືນຢັນບັດ... ໂປຣແກຣມທ່ອງເວັບນີ້ບໍ່ໄດ້ຖືກຈັດການໂດຍບໍລິສັດ ຫຼື ອົງການຈັດຕັ້ງອື່ນ. ການເຄື່ອນໄຫວໃນອຸປະກອນນີ້ອາດຈະຖືກຈັດການຢູ່ນອກ Chrome ໄດ້. ສຶກສາເພີ່ມເຕີມ ສົດໃໝ່ +, ກົດ Tab, ຈາກນັ້ນກົດ Enter ເພື່ອສືບຕໍ່ການສຳຫຼວດຂອງທ່ານ ແລະ ເບິ່ງການເຄື່ອນໄຫວທີ່ກ່ຽວຂ້ອງໃນປະຫວັດ Chrome ຂອງທ່ານ ອັບໂຫລດແລ້ວ ໂຫຼດນະໂຍບາຍແລ້ວ ເຊື່ອມ​ຕໍ່ກັບ​ເຄືອ​ຂ່າຍ diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb index 74bd2e243b8ca3..797e37e1ef0e3c 100644 --- a/components/strings/components_strings_lt.xtb +++ b/components/strings/components_strings_lt.xtb @@ -735,6 +735,7 @@ Kitu atveju tai bus užblokuota pagal jūsų privatumo nustatymus. Taip turinys, Biometrinės sistemos Mygtukas „Atnaujinti „Chrome“, paspauskite „Enter“, kad „Chrome“ nustatymuose būtų atnaujinta naršyklė „Chrome“ 5 dėklas +Išsaugojimas „Google“ paskyroje Index-4x6-Ext Programa: Tikrinimas sėkmingas @@ -1412,6 +1413,7 @@ Kitu atveju tai bus užblokuota pagal jūsų privatumo nustatymus. Taip turinys, Gali būti, kad tinklalapis adresu laikinai neveikia arba yra visam laikui perkeltas nauju žiniatinklio adresu. Išduotas „Google“ paskyroje gali būti kito tipo naršymo istorijos, kuri pasiekiama adresu myactivity.google.com. +Mygtukas „Tęsti veiksmus“, paspauskite „Enter“, kad tęstumėte veiksmus ir galėtumėte matyti atitinkamą veiklą „Chrome“ istorijoje Peržiūrėti tekstą ir vaizdus, nukopijuotus į iškarpinę Prisiminti UPI ID? Žr. virtualią kortelę @@ -1487,6 +1489,7 @@ Kitu atveju tai bus užblokuota pagal jūsų privatumo nustatymus. Taip turinys, Nuo šiol patvirtinkite korteles greičiau su „Touch ID“ Trimačiai objektai Du atvartai +Tęskite veiksmus, kad galėtumėte matyti atitinkamą veiklą „Chrome“ istorijoje Patvirtinkite savo telefono numerį Kontaktinės informacijos redagavimas atsisakė prisijungti. @@ -1538,6 +1541,7 @@ Kitu atveju tai bus užblokuota pagal jūsų privatumo nustatymus. Taip turinys, Išvalyti Pasiekti slapukus ir svetainės duomenis. {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)}} +Tęsti veiksmus Administratorius gali nuotoliniu būdu keisti naršyklės sąranką. Veiklą šiame įrenginyje taip pat galima tvarkyti ne naršyklėje „Chrome“. Šriftas „Serif“ Valdo: @@ -2190,6 +2194,7 @@ Papildoma išsami informacija: Kortelė patvirtinama... Šios naršyklės netvarko įmonė ar kita organizacija. Veiklą šiame įrenginyje galima tvarkyti ne naršyklėje „Chrome“. Sužinokite daugiau Šviežia +, paspauskite tabuliavimo klavišą, tada – „Enter“, kad tęstumėte veiksmus ir galėtumėte matyti atitinkamą veiklą „Chrome“ istorijoje Įkelta Politika įkelta Prisijungti prie tinklo diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb index 9813bd7ffb593f..bf1c4741f310a9 100644 --- a/components/strings/components_strings_lv.xtb +++ b/components/strings/components_strings_lv.xtb @@ -731,6 +731,7 @@ Pretējā gadījumā šī iespēja būtu liegta saskaņā ar jūsu konfidenciali Biometrija Poga “Atjaunināt Chrome”. Lai Chrome iestatījumos atjauninātu pārlūkprogrammu Chrome, nospiediet ievadīšanas taustiņu. 5. paplāte +Saglabāšana Google kontā Index-4x6-Ext Lietojumprogramma: Validācija bija veiksmīga. @@ -1408,6 +1409,7 @@ Pretējā gadījumā šī iespēja būtu liegta saskaņā ar jūsu konfidenciali Tīmekļa lapa var būt īslaicīgi nepieejama, vai tā var būt pārvietota uz jaunu tīmekļa adresi. Izsniegts Jūsu Google kontam var būt citu veidu pārlūkošanas vēstures dati vietnē myactivity.google.com. +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ē. Skatīt starpliktuvē kopēto tekstu un attēlus Vai iegaumēt jūsu UPI ID? Skatīt virtuālo karti @@ -1483,6 +1485,7 @@ Pretējā gadījumā šī iespēja būtu liegta saskaņā ar jūsu konfidenciali Turpmāk, izmantojot Touch ID, apstipriniet kartes ātrāk Materiāls Abpusējs locījums +Atsāciet meklēšanu, lai skatītu atbilstošās darbības savā Chrome vēsturē. Verificējiet savu tālruņa numuru Kontaktinformācijas rediģēšana noraidīja savienojuma izveidi. @@ -1534,6 +1537,7 @@ Pretējā gadījumā šī iespēja būtu liegta saskaņā ar jūsu konfidenciali Notīrīt Piekļūt sīkfailiem un vietnes datiem {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)}} +Atsākt meklēšanu 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. Serif fonts Pārvalda: @@ -2186,6 +2190,7 @@ Papildu informācija: Notiek kartes apstiprināšana... Š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. Uzzināt vairāk Dzīvīga +: 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ē. Augšupielādēts Politikas ir ielādētas Izveidot savienojumu ar tīklu diff --git a/components/strings/components_strings_mk.xtb b/components/strings/components_strings_mk.xtb index 3db769f3159db2..98739764ca7188 100644 --- a/components/strings/components_strings_mk.xtb +++ b/components/strings/components_strings_mk.xtb @@ -734,6 +734,7 @@ Биометрика Копче „Ажурирај го Chrome“, притиснете Enter за да го ажурирате Chrome од поставките за Chrome Фиока 5 +Зачувајте во сметката на Google Index-4x6-Ext Апликација: Потврдувањето е успешно @@ -1411,6 +1412,7 @@ Веб-страницата на можеби привремено не работи или можеби трајно е преместена на нова веб-адреса. Издадено на Вашата сметка на Google можеби има други видови историја на прелистување на myactivity.google.com. +Копче за продолжување со патувањето, притиснете Enter за да продолжите со патувањето и да ја прегледате релевантната активност во вашата „Историја на Chrome“ гледа текст и слики копирани на привремената меморија Да се запомни ID за UPI? Прикажи ја виртуелната картичка @@ -1486,6 +1488,7 @@ Отсега, потврдувајте ги картичките побрзо со Touch ID Материјален Превиткување како брошура +Продолжете со патување за да ја прегледате релевантната активност во вашата „Историја на Chrome“ Потврдете го телефонскиот број Уредете ги информациите за контакт одби да се поврзе. @@ -1537,6 +1540,7 @@ Исчисти да пристапува до колачиња и податоци за сајтот. {COUNT,plural, =0{Ниту еден}=1{Од 1 сајт (нема да ве одјавиме од сметката на Google)}one{Од # сајт (нема да ве одјавиме од сметката на Google)}other{Од # сајтови (нема да ве одјавиме од сметката на Google)}} +Продолжете со патување Администраторот може далечински да го менува поставувањето на прелистувачот. Со активноста на уредов може да се управува и надвор од Chrome. Фонт Serif Управувано од: @@ -2188,6 +2192,7 @@ Се потврдува картичката… Прелистувачов не е управуван од компанија или друга организација. Активноста на уредов можеби се управува надвор од Chrome. Дознајте повеќе Свеж +, притиснете Tab, а потоа Enter за да продолжите со патувањето и да ја прегледате релевантната активност во вашата „Историја на Chrome“ Прикачен Правилата се вчитани Поврзете се на мрежа diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb index 6c86d6ad88b54d..0da98d689a4682 100644 --- a/components/strings/components_strings_mr.xtb +++ b/components/strings/components_strings_mr.xtb @@ -733,6 +733,7 @@ बायोमेट्रिक Chrome अपडेट करा बटण, तुमच्या Chrome सेटिंग्जमधून Chrome अपडेट करण्यासाठी एंटर दाबा ट्रे ५ +Google खाते मध्ये सेव्ह करा Index-4x6-Ext ॲप्लिकेशन: प्रमाणीकरण यशस्वी @@ -1410,6 +1411,7 @@ वरील वेबपेज कदाचित तात्पुरते बंद आहे किंवा ते कदाचित कायमचे नवीन वेब पत्त्यावर हलवले आहे. यांना जारी केलेले तुमच्या Google खात्यामध्ये myactivity.google.com वर ब्राउझिंग इतिहासाची अन्य स्वरूपे असू शकतात. +शोध पुन्हा सुरू करा बटण, तुमच्या Chrome इतिहासामध्ये संबंधित अ‍ॅक्टिव्हिटी पाहण्यासाठी आणि शोध पुन्हा सुरू करण्यासाठी एंटर दाबा क्लिपबोर्डवर कॉपी केलेला मजकूर आणि इमेज पहा तुमचा UPI आयडी लक्षात ठेवायचा आहे का? व्हर्च्युअल कार्ड पहा @@ -1486,6 +1488,7 @@ यापुढे टच आयडी वापरून तुमच्या कार्डांची जलद खात्री करा आशय गेट फोल्ड +तुमच्या Chrome इतिहासामध्ये संबंधित अ‍ॅक्टिव्हिटी पाहण्यासाठी शोध पुन्हा सुरू करा तुमच्या फोन नंबरची पडताळणी करा संपर्क माहिती संपादित करा नी कनेक्ट करण्यास नकार दिला. @@ -1537,6 +1540,7 @@ साफ करा कुकी आणि साइट डेटा अ‍ॅक्सेस करा. {COUNT,plural, =0{काहीही नाही}=1{एका साइटवरून (तुम्हाला तुमच्या Google खात्यातून साइन आउट केले जाणार नाही)}other{# साइटवरून (तुम्हाला तुमच्या Google खात्यातून साइन आउट केले जाणार नाही)}} +शोध पुन्हा सुरू करा तुमचा अ‍ॅडमिनिस्ट्रेटर तुमच्या ब्राउझरचा सेटअप रिमोट पद्धतीने बदलू शकतो. या डिव्हाइसवरील अ‍ॅक्टिव्हिटी कदाचित Chrome च्या बाहेर व्यवस्थापित केलेली असू शकते. Serif Font यांनी व्यवस्थापित केलेले: @@ -2188,6 +2192,7 @@ कार्डची निश्चिती करत आहे... हा ब्राउझर कंपनी किंवा इतर संस्थेद्वारे व्यवस्थापित केला जात नाही. या डिव्हाइसवरील अ‍ॅक्टिव्हिटी Chrome च्या बाहेर व्यवस्थापित केलेली असू शकते. अधिक जाणून घ्या नवीन +, तुमच्या Chrome इतिहासामध्ये संबंधित अ‍ॅक्टिव्हिटी पाहण्यासाठी आणि शोध पुन्हा सुरू करण्यासाठी टॅब आणि त्यानंतर एंटर दाबा अपलोड केला धोरणे लोड केलेली आहेत नेटवर्कशी कनेक्ट करा diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb index 9439a9ba84a9e6..cd60195f130bca 100644 --- a/components/strings/components_strings_ms.xtb +++ b/components/strings/components_strings_ms.xtb @@ -735,6 +735,7 @@ Jika tidak, ini akan disekat oleh tetapan privasi anda. Kebenaran ini akan membo Biometrik Butang Kemas Kini Chrome, tekan Enter untuk mengemas kini Chrome daripada tetapan Chrome anda Dulang 5 +Simpan pada Akaun Google Index-4x6-Ext Aplikasi: Pengesahan berjaya @@ -1412,6 +1413,7 @@ Jika tidak, ini akan disekat oleh tetapan privasi anda. Kebenaran ini akan membo Halaman web di mungkin tergendala sebentar atau mungkin telah dipindahkan secara kekal ke alamat web baharu. Dikeluarkan Kepada Akaun Google anda mungkin mempunyai bentuk sejarah penyemakan imbas yang lain di myactivity.google.com. +Butang sambung semula perjalanan, tekan Enter untuk menyambung semula perjalanan dan melihat aktiviti yang berkaitan dalam sejarah Chrome anda Lihat teks dan imej yang disalin ke papan keratan Ingat ID UPI anda? Lihat kad maya @@ -1487,6 +1489,7 @@ Jika tidak, ini akan disekat oleh tetapan privasi anda. Kebenaran ini akan membo Sahkan kad anda dengan lebih cepat dengan menggunakan Touch ID mulai sekarang Bahan Lipatan pintu +Sambung semula perjalanan untuk melihat aktiviti yang berkaitan dalam sejarah Chrome anda Sahkan nombor telefon anda Edit maklumat hubungan enggan menyambung. @@ -1538,6 +1541,7 @@ Jika tidak, ini akan disekat oleh tetapan privasi anda. Kebenaran ini akan membo Kosongkan Akses kuki dan data tapak. {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)}} +Sambung semula perjalanan Pentadbir anda boleh menukar persediaan penyemak imbas anda dari jauh. Aktiviti pada peranti ini mungkin turut diurus di luar Chrome. Fon Serif Diurus oleh: @@ -2190,6 +2194,7 @@ Butiran tambahan: Mengesahkan kad... Penyemak imbas ini tidak diurus oleh syarikat atau organisasi lain. Aktiviti pada peranti ini mungkin diurus di luar Chrome. Ketahui lebih lanjut Baharu +, tekan Tab kemudian Enter untuk menyambung semula perjalanan dan melihat aktiviti yang berkaitan dalam sejarah Chrome anda Dimuat naik Dasar dimuatkan Sambung ke rangkaian diff --git a/components/strings/components_strings_my.xtb b/components/strings/components_strings_my.xtb index f6af9a62e7b571..71092e418a225e 100644 --- a/components/strings/components_strings_my.xtb +++ b/components/strings/components_strings_my.xtb @@ -733,6 +733,7 @@ ဇီဝမက်ထရစ် အချက်အလက်များ Chrome အပ်ဒိတ်လုပ်ရန်ခလုတ်၊ သင့် Chrome ဆက်တင်များမှတစ်ဆင့် Chrome ကို အပ်ဒိတ်လုပ်ရန် Enter နှိပ်ပါ ဗန်း ၅ +Google Account တွင် သိမ်းပါ အညွှန်း-၄x၆-နောက်ဆက်တွဲ အပလီကေးရှင်း- အောင်မြင်စွာ အတည်ပြုပြီး @@ -1411,6 +1412,7 @@ ပေါ်က ဝဘ်စာမျက်နှာမှာ ယာယီ ဒေါင်းနေတာ ဖြစ်နိုင်သည် သို့မဟုတ် ၎င်းသည် ဝဘ် လိပ်စာ သစ်ဆီသို့ ထာဝရ ရွှေ့ပြောင်းသွားတာ ဖြစ်နိုင်သည်။ ...အား ထုတ်ပေးခဲ့သည် သင်၏ Google အကောင့်က ဖွင့်ကြည့်ထားသော မှတ်တမ်းသည် myactivity.google.com တွင် အခြားပုံစံများဖြင့် ရှိနေနိုင်ပါသည် +ခရီးစဉ်ကို ဆက်လုပ်ရန် ခလုတ်။ သင်၏ခရီးစဉ်ကို ဆက်လုပ်ရန်နှင့် သင်၏ Chrome မှတ်တမ်းရှိ သက်ဆိုင်ရာလုပ်ဆောင်ချက်ကို ကြည့်ရန် Enter နှိပ်ပါ ကလစ်ဘုတ်သို့ မိတ္တူကူးထားသည့် စာသားနှင့် ပုံများအား ကြည့်ရန် သင့် UPI ID ကို မှတ်မိပါသလား။ ပကတိအသွင်ကတ် ကြည့်ရန် @@ -1485,6 +1487,7 @@ ယခုမှစ၍ Touch ID ကို အသုံးပြု၍ သင့်ကတ်များကို ပိုမိုမြန်ဆန်စွာ အတည်ပြုလိုက်ပါ ရုပ်ဝတ္ထုပစ္စည်း ဝင်းတံခါးပုံ ခေါက်ရန် +သင်၏ Chrome မှတ်တမ်းရှိ သက်ဆိုင်ရာလုပ်ဆောင်ချက်ကို ကြည့်ရန် ခရီးစဉ်ကို ဆက်လုပ်ပါ သင်၏ဖုန်းနံပါတ်ကို အတည်ပြုပါ အဆက်အသွယ်အချက်အလက်ကို တည်းဖြတ်ပါ သည်ချိတ်ဆက်ရန် ငြင်းပယ်ခဲ့သည်။ @@ -1536,6 +1539,7 @@ ရှင်းရန် ကွတ်ကီးနှင့် ဝဘ်ဆိုက်ဒေတာများ သုံးခြင်း။ {COUNT,plural, =0{တစ်ခုမျှမရှိပါ}=1{ဝဘ်ဆိုက် ၁ ခုမှ (သင်၏ Google အကောင့်မှနေ၍ ထွက်သွားမည်မဟုတ်ပါ)}other{ဝဘ်ဆိုက် # ခုမှ (သင်၏ Google အကောင့်မှနေ၍ ထွက်သွားမည်မဟုတ်ပါ)}} +ခရီးစဉ်ကို ဆက်လုပ်ရန် သင့်စီမံခန့်ခွဲသူက သင်၏ဘရောင်ဇာ စနစ်ထည့်သွင်းမှုကို အဝေးမှ ပြောင်းလဲနိုင်ပါသည်။ ဤစက်ပေါ်ရှိ လုပ်ဆောင်ချက်များကိုလည်း Chrome ပြင်ပမှ စီမံခန့်ခွဲထားခြင်း ဖြစ်နိုင်သည်။ Serif ဖောင့် စီမံခန့်ခွဲသူ- @@ -2188,6 +2192,7 @@ ကတ် အတည်ပြုနေသည်... ဤဘရောင်ဇာကို ကုမ္ပဏီ သို့မဟုတ် အခြားအဖွဲ့အစည်းက စီမံခန့်ခွဲမထားပါ။ ဤစက်ပေါ်ရှိ လုပ်ဆောင်ချက်ကို Chrome ပြင်ပမှ စီမံခန့်ခွဲထားခြင်း ဖြစ်နိုင်သည်။ ပိုမိုလေ့လာရန် လန်းလန်းဆန်းဆန်း +။ တဘ်နှိပ်ပါ။ ထို့နောက် သင်၏ခရီးစဉ်ကို ဆက်လုပ်ရန်နှင့် သင်၏ Chrome မှတ်တမ်းရှိ သက်ဆိုင်ရာလုပ်ဆောင်ချက်ကို ကြည့်ရန် Enter နှိပ်ပါ အပ်လုဒ်လုပ်ပြီးပြီ မူဝါဒများကို ဖွင့်လိုက်သည် ကွန်ယက်သို့ ချိတ်ဆက်ပါ diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb index ad1393d974c0a5..2398ac2ebd2c3a 100644 --- a/components/strings/components_strings_nl.xtb +++ b/components/strings/components_strings_nl.xtb @@ -722,6 +722,7 @@ Anders wordt dit geblokkeerd door je privacyinstellingen. Hierdoor werkt de cont Biometrische systemen Knop 'Chrome updaten'. Druk op Enter om Chrome te updaten via de instellingen van Chrome. Lade 5 +Opslaan in Google-account Index-4x6-Ext App: Validatie geslaagd @@ -1397,6 +1398,7 @@ Anders wordt dit geblokkeerd door je privacyinstellingen. Hierdoor werkt de cont De webpagina op is mogelijk tijdelijk niet beschikbaar of is permanent verplaatst naar een nieuw webadres. Verleend aan Er kunnen andere vormen van browsegeschiedenis zijn opgeslagen voor je Google-account op myactivity.google.com. +Knop Reis hervatten. Druk op Enter om je reis te hervatten en relevante activiteit in je Chrome-geschiedenis te bekijken. Tekst en afbeeldingen bekijken die naar het klembord zijn gekopieerd Weet je je UPI-ID nog? Virtuele kaart bekijken @@ -1471,6 +1473,7 @@ Anders wordt dit geblokkeerd door je privacyinstellingen. Hierdoor werkt de cont Bevestig je kaarten sneller door vanaf nu Touch ID te gebruiken Material Luikvouw +Reis hervatten om relevante activiteit in je Chrome-geschiedenis te bekijken Je telefoonnummer verifiëren Contactgegevens bewerken heeft de verbinding geweigerd. @@ -1522,6 +1525,7 @@ Anders wordt dit geblokkeerd door je privacyinstellingen. Hierdoor werkt de cont Wissen Toegang krijgen tot cookies en sitegegevens. {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)}} +Reis hervatten Je beheerder kan je browserinstellingen op afstand wijzigen. Activiteit op dit apparaat kan ook buiten Chrome worden beheerd. Serif-lettertype Beheerd door: @@ -2171,6 +2175,7 @@ Aanvullende informatie: Creditcard bevestigen... Deze browser wordt niet beheerd door een bedrijf of andere organisatie. Activiteit op dit apparaat kan buiten Chrome worden beheerd. Meer informatie Nieuw +. Druk op Tab en daarna op Enter om je reis te hervatten en relevante activiteit in je Chrome-geschiedenis te bekijken. Geüpload Beleid is geladen Verbinding maken met netwerk diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb index 9f01abb29a7db6..c6ebab26e2ef0b 100644 --- a/components/strings/components_strings_no.xtb +++ b/components/strings/components_strings_no.xtb @@ -734,6 +734,7 @@ brukere av denne nettleseren. Biometri Knappen «Oppdater Chrome» – trykk på Enter for å oppdatere Chrome fra Chrome-innstillingene Skuff 5 +Lagre i Google-kontoen Index-4x6-Ext Program: Valideringen var vellykket @@ -1411,6 +1412,7 @@ brukere av denne nettleseren. Det kan hende at nettsiden på er midlertidig nede eller flyttet permanent til en ny nettadresse. Utstedt til Det kan hende Google-kontoen din har andre typer nettleserlogger på myactivity.google.com. +Fortsett ferden-knappen – trykk på Enter for å fortsette ferden og se relevant aktivitet i Chrome-loggen Se tekst og bilder som er kopiert til utklippstavlen Husker du UPI-ID-en din? Se virtuelt kort @@ -1486,6 +1488,7 @@ brukere av denne nettleseren. Bekreft kortene dine raskere ved å bruke Touch ID fra nå av Materiale Vindusfals +Fortsett ferden for å se relevant aktivitet i Chrome-loggen Bekreft telefonnummeret ditt Endre kontaktinformasjonen avviste tilkoblingsforsøket. @@ -1537,6 +1540,7 @@ brukere av denne nettleseren. Tøm få tilgang til informasjonskapsler og nettstedsdata {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)}} +Fortsett ferden Administratoren kan endre nettleseroppsettet eksternt. Aktiviteten på denne enheten kan også administreres utenfor Chrome. Med seriffer Administreres av: @@ -2187,6 +2191,7 @@ Mer informasjon: Bekrefter kortet … Denne nettleseren administreres ikke av et selskap eller en annen organisasjon. Aktiviteten på denne enheten kan bli administrert utenfor Chrome. Finn ut mer Frisk + – trykk på Tab og deretter på Enter for å fortsette ferden og se relevant aktivitet i Chrome-loggen Opplastet Regler er lastet inn Koble til nettverk diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb index 4cec46b3345840..1d5c6cff68ff86 100644 --- a/components/strings/components_strings_pl.xtb +++ b/components/strings/components_strings_pl.xtb @@ -730,6 +730,7 @@ Jeśli się nie zgodzisz, zostaną one zablokowane ze względu na Twoje ustawien Biometria Przycisk aktualizacji Chrome. Naciśnij Enter, by zaktualizować przeglądarkę Chrome z poziomu jej ustawień. Taca 5 +Zapisz na koncie Google Index-4x6-Ext Aplikacja: Weryfikacja powiodła się @@ -1402,6 +1403,7 @@ Jeśli się nie zgodzisz, zostaną one zablokowane ze względu na Twoje ustawien Strona może być chwilowo niedostępna lub została przeniesiona pod nowy adres. Wystawiony dla Inne rodzaje historii przeglądania mogą być nadal dostępne na Twoim koncie Google na myactivity.google.com +Przycisk Wznów podróż; aby wznowić podróż i zobaczyć odpowiednią aktywność w historii Chrome, naciśnij Enter Mieć dostęp do tekstu i obrazów skopiowanych do schowka Zapamiętać Twój identyfikator UPI? Zobacz kartę wirtualną @@ -1477,6 +1479,7 @@ Jeśli się nie zgodzisz, zostaną one zablokowane ze względu na Twoje ustawien Potwierdzaj karty szybciej przy użyciu Touch ID Styl Material Składanie od góry i od dołu do środka +Wznów podróż, aby zobaczyć odpowiednią aktywność w historii Chrome Weryfikowanie numeru telefonu Edytuj dane kontaktowe Serwer odrzucił połączenie. @@ -1528,6 +1531,7 @@ Jeśli się nie zgodzisz, zostaną one zablokowane ze względu na Twoje ustawien Wyczyść Dostęp do plików cookie i danych witryn. {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)}} +Wznów podróż Administrator może zdalnie zmienić konfigurację przeglądarki. Aktywność na tym urządzeniu może być zarządzana również poza Chrome. Czcionka szeryfowa Zarządzane przez: @@ -2179,6 +2183,7 @@ Dodatkowe informacje: Sprawdzam kartę… Ta przeglądarka nie jest zarządzana przez firmę ani inną organizację. Aktywność na tym urządzeniu może być zarządzana poza Chrome. Więcej informacji Świeży +; aby wznowić podróż i zobaczyć odpowiednią aktywność w historii Chrome, naciśnij Tab, a potem Enter Przesłano Zasady zostały załadowane Połącz z siecią diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb index 972be96345522a..3666b6417d4410 100644 --- a/components/strings/components_strings_pt-BR.xtb +++ b/components/strings/components_strings_pt-BR.xtb @@ -728,6 +728,7 @@ Se não fizer isso, a permissão será bloqueada pelas configurações de privac Biometria Botão "Atualizar o Chrome". Pressione "Enter" para atualizar o Chrome pelas configurações dele Bandeja 5 +Salvar na Conta do Google 102 mm × 152 mm Aplicativo: Validação bem-sucedida @@ -1400,6 +1401,7 @@ Se não fizer isso, a permissão será bloqueada pelas configurações de privac A página da Web no endereço pode estar temporariamente inativa ou pode ter sido transferida para um novo endereço. Emitido para Sua Conta do Google pode ter outras formas de histórico de navegação em myactivity.google.com +Botão "Retomar jornada". Pressione Enter para retomar a jornada e ver as atividades relevantes no seu histórico do Chrome Ver os textos e imagens copiados para a área de transferência Lembrar código da UPI? Ver cartão virtual @@ -1475,6 +1477,7 @@ Se não fizer isso, a permissão será bloqueada pelas configurações de privac Confirme seus cartões mais rapidamente usando o Touch ID de agora em diante Material Dobra janela +Retomar a jornada para ver as atividades relevantes no seu histórico do Chrome Verificar seu número de telefone Editar informações de contato A conexão com foi recusada. @@ -1526,6 +1529,7 @@ Se não fizer isso, a permissão será bloqueada pelas configurações de privac Limpar Acesso a cookies e dados do site. {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)}} +Retomar jornada O administrador pode mudar as configurações do navegador remotamente. A atividade deste dispositivo também pode ser gerenciada fora do Chrome. Fonte Serif Gerenciamento por: @@ -2179,6 +2183,7 @@ incomuns e incorretas. Isso pode acontecer quando um invasor está fingindo ser Confirmando cartão… Este navegador não é gerenciado por uma empresa ou outra organização. A atividade deste dispositivo pode ser gerenciada fora do Chrome. Saiba mais Revigorado +. Pressione Tab e depois Enter para retomar a jornada e ver as atividades no seu histórico do Chrome Enviado As políticas foram carregadas Conectar à rede diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb index bda1bcb18ca386..2c518cd8d993a8 100644 --- a/components/strings/components_strings_pt-PT.xtb +++ b/components/strings/components_strings_pt-PT.xtb @@ -734,6 +734,7 @@ Se não permitir, isto será bloqueado pelas suas definições de privacidade. I Biometria Botão Atualizar Chrome; prima Enter para atualizar o Chrome nas Definições do Chrome. Tabuleiro 5 +Guardar na Conta Google Index-4x6-Ext Aplicação: Validação com êxito @@ -1411,6 +1412,7 @@ Se não permitir, isto será bloqueado pelas suas definições de privacidade. I A página Web em pode estar temporariamente indisponível ou pode ter sido permanentemente movida para um novo endereço Web. Emitido para A sua Conta Google pode ter outras formas do histórico de navegação em myactivity.google.com. +Botão Retomar percurso, prima Enter para retomar o percurso e ver atividade relevante no Histórico do Chrome Ver o texto e as imagens copiados para a área de transferência Lembra-se do seu ID do UPI? Ver cartão virtual @@ -1486,6 +1488,7 @@ Se não permitir, isto será bloqueado pelas suas definições de privacidade. I Confirme os seus cartões mais rapidamente ao utilizar o Touch ID a partir de agora. Material Dobra simétrica +Retome o percurso para ver atividade relevante no Histórico do Chrome Valide o seu número de telefone Editar informações de contacto recusou estabelecer ligação. @@ -1537,6 +1540,7 @@ Se não permitir, isto será bloqueado pelas suas definições de privacidade. I Limpar Aceder aos cookies e dados de sites. {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).}} +Retomar percurso O administrador pode alterar a configuração do navegador remotamente. A atividade neste dispositivo também pode ser gerida fora do Chrome. Tipo de letra Serif Gerido por: @@ -2188,6 +2192,7 @@ Detalhes adicionais: A confirmar o cartão… Este navegador não é gerido por uma empresa ou outra entidade. A atividade neste dispositivo pode ser gerida fora do Chrome. Saiba mais Moderno +, prima Tab e, em seguida, Enter para retomar o percurso e ver atividade relevante no Histórico do Chrome Carregado As políticas foram carregadas. Ligar à rede diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb index 2068196e377c74..fb4f993e65d0f6 100644 --- a/components/strings/components_strings_ro.xtb +++ b/components/strings/components_strings_ro.xtb @@ -732,6 +732,7 @@ Sisteme biometrice Butonul Actualizează Chrome, apasă pe Enter pentru a actualiza Chrome din setările Chrome Tava 5 +Salvează în Contul Google Index-4x6-Ext Aplicație: Validarea a reușit @@ -1409,6 +1410,7 @@ Este posibil ca pagina web de la să fie blocată temporar sau să fi fost mutată definitiv la o nouă adresă web. Emis către Contul Google poate să ofere alte forme ale istoricului de navigare la myactivity.google.com +Butonul Repetă experiența, apasă pe Enter pentru a repeta experiența și a vedea activitatea relevantă din istoricul Chrome să afișeze textul și imaginile copiate în clipboard Îți amintești ID-ul UPI? Vezi cardul virtual @@ -1484,6 +1486,7 @@ Confirmă-ți cardurile mai rapid, folosind Touch ID Material Îndoire de tip fereastră +Repetă experiența pentru a vedea activitatea relevantă din istoricul Chrome Confirmă numărul de telefon Editează informațiile de contact a refuzat conexiunea. @@ -1535,6 +1538,7 @@ Șterge să acceseze cookie-urile și datele privind site-urile. {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)}} +Repetă experiența Administratorul poate schimba configurația browserului de la distanță. Este posibil ca activitatea de pe acest dispozitiv să fie gestionată și din afara Chrome. Font Serif Gestionat de: @@ -2187,6 +2191,7 @@ Detalii suplimentare: Se confirmă cardul… 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. Află mai multe Prospețime +, apasă pe Tab, apoi pe Enter pentru a repeta experiența și a vedea activitatea relevantă din istoricul Chrome Încărcat Politicile s-au încărcat Conectați-vă la rețea diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb index 0b8bcaf26b55b3..443c625b1e7fc9 100644 --- a/components/strings/components_strings_ru.xtb +++ b/components/strings/components_strings_ru.xtb @@ -727,6 +727,7 @@ Биометрия Кнопка "Обновить Chrome". Нажмите Ввод, чтобы обновить Chrome. Лоток 5 +Сохранить в аккаунте Google? Index-4x6-Ext Приложение: Проверка выполнена успешно @@ -1399,6 +1400,7 @@ Возможно, веб-страница временно недоступна или находится по новому адресу. Кому выдан Информация о других ваших действиях в Интернете может также храниться на странице myactivity.google.com. +Кнопка "Продолжить поиск в истории". Нажмите Ввод, чтобы посмотреть похожие запросы в истории Chrome. Просмотр текста и изображений, скопированных в буфер обмена Запомнить идентификатор UPI? Посмотреть виртуальную карту @@ -1474,6 +1476,7 @@ Подтверждайте карты быстрее с помощью Touch ID Material design Фальцовка калиткой в два сгиба +Посмотреть похожие запросы в истории Chrome Подтвердите номер телефона Изменить контактную информацию Сайт не позволяет установить соединение. @@ -1525,6 +1528,7 @@ Удалить доступ к файлам cookie и данным сайта. {COUNT,plural, =0{Нет}=1{С 1 сайта (вы останетесь в аккаунте Google)}one{С # сайта (вы останетесь в аккаунте Google)}few{С # сайтов (вы останетесь в аккаунте Google)}many{С # сайтов (вы останетесь в аккаунте Google)}other{С # сайта (вы останетесь в аккаунте Google)}} +Продолжить поиск в истории Администратор может удаленно менять настройки браузера и управлять действиями вне браузера Chrome на этом устройстве. Шрифты с засечками Управляет: @@ -2176,6 +2180,7 @@ Подтверждение карты... Компания или организация не управляет этим браузером. Действиями на этом устройстве можно управлять вне браузера Chrome. Подробнее… Свежий +. Нажмите Tab и затем Ввод, чтобы посмотреть похожие запросы в истории Chrome. Загружен Правила загружены Подключитесь к сети diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb index 492de7d9bbe5c1..4f14ee41ccb2ae 100644 --- a/components/strings/components_strings_sk.xtb +++ b/components/strings/components_strings_sk.xtb @@ -724,6 +724,7 @@ Ich používanie by bolo inak blokované vašimi nastaveniami ochrany súkromia. Biometria Tlačidlo Aktualizovať Chrome. Stlačením tlačidla Enter aktualizujete Chrome v jeho nastaveniach. Priehradka č. 5 +Uloženie do účtu Google Index-4x6-Ext Aplikácia: Overenie bolo úspešné @@ -1396,6 +1397,7 @@ Ich používanie by bolo inak blokované vašimi nastaveniami ochrany súkromia. Stránka je možno dočasne nedostupná, možno bola natrvalo presunutá na novú webovú adresu. Vydané pre Váš účet Google môže mať ďalšie formy histórie prehliadania na adrese myactivity.google.com +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 Prístup k textu a obrázkom skopírovaným do schránky Chcete uložiť svoj identifikátor UPI? Zobraziť virtuálnu kartu @@ -1470,6 +1472,7 @@ Ich používanie by bolo inak blokované vašimi nastaveniami ochrany súkromia. Odteraz môžete potvrdzovať karty rýchlejšie pomocou funkcie Touch ID Material Obojstranná fazóna +Pokračujte v ceste a zobrazte si relevantnú aktivitu v histórii Chromu Overenie telefónneho čísla Úprava kontaktných informácií Web zamietol pripojenie. @@ -1521,6 +1524,7 @@ Ich používanie by bolo inak blokované vašimi nastaveniami ochrany súkromia. Vymazať Používať súbory cookie a údaje webov. {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)}} +Pokračovať v ceste Nastavenia prehliadača môže vzdialene zmeniť správca. Aktivita v tomto zariadení môže byť tiež spravovaná mimo Chromu. Písmo Serif Spravuje: @@ -2173,6 +2177,7 @@ Ich používanie by bolo inak blokované vašimi nastaveniami ochrany súkromia. Overuje sa karta… Tento prehliadač nespravuje firma ani iná organizácia. Aktivita v tomto zariadení môže byť spravovaná mimo Chromu. Ďalšie informácie Príjemné +, stlačte Tab, potom Enter a pokračujte tak v ceste so zobrazením relevantnej aktivity v histórii Chromu Nahrané Načítavajú sa pravidlá Pripojiť k sieti diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb index bcf8d09d84aa96..2d0701e0757c17 100644 --- a/components/strings/components_strings_sl.xtb +++ b/components/strings/components_strings_sl.xtb @@ -734,6 +734,7 @@ V nasprotnem primeru bodo to blokirale nastavitve zasebnosti. S tem bo vsebina, Biometrika Gumb za posodobitev Chroma, pritisnite Enter, če želite posodobiti Chrome v Chromovih nastavitvah Pladenj 5 +Shranjevanje v račun Google Index-4x6-Ext Program: Preverjanje veljavnosti uspešno @@ -1411,6 +1412,7 @@ V nasprotnem primeru bodo to blokirale nastavitve zasebnosti. S tem bo vsebina, Spletna stran na naslovu morda začasno ni na voljo ali pa je trajno preseljena na drug spletni naslov. Izdano za V Google Računu so morda druge vrste zgodovine brskanja na myactivity.google.com. +Gumb za nadaljevanje poti, pritisnite Enter, če želite nadaljevati pot in si ogledati pomembno dejavnost v zgodovini uporabe Chroma. ogled besedila in slik, kopiranih v odložišče Si želite zapomniti ID za UPI? Ogled navidezne kartice @@ -1486,6 +1488,7 @@ V nasprotnem primeru bodo to blokirale nastavitve zasebnosti. S tem bo vsebina, Od zdaj naprej lahko uporabljate Touch ID in kartice potrjujete hitreje Materialno Prepogibanje v obliki okna +Nadaljujte pot, če si želite ogledati pomembno dejavnost v zgodovini uporabe Chroma. Preverjanje telefonske številke Uredi informacije o stiku Spletno mesto ni dovolilo povezave. @@ -1537,6 +1540,7 @@ V nasprotnem primeru bodo to blokirale nastavitve zasebnosti. S tem bo vsebina, Izbriši Dostop do piškotkov in podatkov spletnih mest. {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)}} +Nadaljuj pot Skrbnik lahko spremeni nastavitev brskalnika na daljavo. Dejavnost v tej napravi morda tudi upravljajo zunaj Chroma. Serifna pisava Upravitelj: @@ -2188,6 +2192,7 @@ Dodatne podrobnosti: Potrjevanje kartice … Tega brskalnika ne upravlja podjetje ali druga organizacija. Dejavnost v tej napravi morda upravljajo zunaj Chroma. Več o tem Sveže +, pritisnite tabulatorko, nato Enter, če želite nadaljevati pot in si ogledati pomembno dejavnost v zgodovini uporabe Chroma. Naloženo Pravilniki so naloženi Vzpostavi povezavo z omrežjem diff --git a/components/strings/components_strings_sr-Latn.xtb b/components/strings/components_strings_sr-Latn.xtb index 13ba30515dd77e..e59da9af5eda15 100644 --- a/components/strings/components_strings_sr-Latn.xtb +++ b/components/strings/components_strings_sr-Latn.xtb @@ -734,6 +734,7 @@ To inače blokiraju podešavanja privatnosti. To omogućava da sadržaj sa koji Biometrija Dugme Ažuriraj Chrome, pritisnite Enter da biste ažurirali Chrome iz podešavanja Chrome-a 5. fioka +Sačuvajte na Google nalogu Index-4x6-Ext Aplikacija: Potvrda valjanosti je uspela @@ -1411,6 +1412,7 @@ To inače blokiraju podešavanja privatnosti. To omogućava da sadržaj sa koji Veb-stranica na adresi možda privremeno ne funkcioniše ili je trajno premeštena na novu veb-adresu. Izdato za Google nalog može da ima druge oblike istorije pregledanja na myactivity.google.com. +Dugme Nastavi putanjom, pritisnite Enter da biste nastavili putanjom i videli relevantne aktivnosti u istoriji Chrome-a da vidi tekst i slike koji su kopirani u privremenu memoriju Želite da sačuvate ID za UPI? Prikaži virtuelnu karticu @@ -1485,6 +1487,7 @@ To inače blokiraju podešavanja privatnosti. To omogućava da sadržaj sa koji Od sada brže potvrđujte kartice uz Touch ID Material Presavijanje u obliku prozora +Nastavite putanjom da biste videli relevantne aktivnosti u istoriji Chrome-a Verifikujte broj telefona Izmenite kontakt informacije Host je odbio povezivanje. @@ -1536,6 +1539,7 @@ To inače blokiraju podešavanja privatnosti. To omogućava da sadržaj sa koji Obriši da pristupa kolačićima i podacima o sajtovima. {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)}} +Nastavi putanjom Administrator može daljinski da promeni podešavanje pregledača. Aktivnostima na ovom uređaju može da se upravlja i van Chrome-a. Font Serif Ovim upravlja: @@ -2188,6 +2192,7 @@ Dodatni detalji: Kartica se potvrđuje... Ovim pregledačem ne upravlja kompanija niti druga organizacija. Aktivnostima na ovom uređaju se možda upravlja van Chrome-a. Saznajte više Sveže +, pritisnite Tab, pa Enter da biste nastavili putanjom i videli relevantne aktivnosti u istoriji Chrome-a Otpremljeno Smernice su učitane Povezivanje sa mrežom diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb index 0ecd4263fdfe02..a1a1d901d85e16 100644 --- a/components/strings/components_strings_sr.xtb +++ b/components/strings/components_strings_sr.xtb @@ -734,6 +734,7 @@ Биометрија Дугме Ажурирај Chrome, притисните Enter да бисте ажурирали Chrome из подешавања Chrome-а 5. фиока +Сачувајте на Google налогу Index-4x6-Ext Апликација: Потврда ваљаности је успела @@ -1411,6 +1412,7 @@ Веб-страница на адреси можда привремено не функционише или је трајно премештена на нову веб-адресу. Издато за Google налог може да има друге облике историје прегледања на myactivity.google.com. +Дугме Настави путањом, притисните Enter да бисте наставили путањом и видели релевантне активности у историји Chrome-а да види текст и слике који су копирани у привремену меморију Желите да сачувате ИД за UPI? Прикажи виртуелну картицу @@ -1485,6 +1487,7 @@ Од сада брже потврђујте картице уз Touch ID Material Пресавијање у облику прозора +Наставите путањом да бисте видели релевантне активности у историји Chrome-а Верификујте број телефона Измените контакт информације Хост је одбио повезивање. @@ -1536,6 +1539,7 @@ Обриши да приступа колачићима и подацима о сајтовима. {COUNT,plural, =0{None}=1{Са 1 сајта (нећемо вас одјавити са Google налога)}one{Са # сајта (нећемо вас одјавити са Google налога)}few{Са # сајта (нећемо вас одјавити са Google налога)}other{Са # сајтова (нећемо вас одјавити са Google налога)}} +Настави путањом Администратор може даљински да промени подешавање прегледача. Активностима на овом уређају може да се управља и ван Chrome-а. Фонт Serif Овим управља: @@ -2188,6 +2192,7 @@ Картица се потврђује... Овим прегледачем не управља компанија нити друга организација. Активностима на овом уређају се можда управља ван Chrome-а. Сазнајте више Свеже +, притисните Tab, па Enter да бисте наставили путањом и видели релевантне активности у историји Chrome-а Отпремљено Смернице су учитане Повезивање са мрежом diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb index 70ca7bffcf1288..4b6b4e83606571 100644 --- a/components/strings/components_strings_sv.xtb +++ b/components/strings/components_strings_sv.xtb @@ -734,6 +734,7 @@ Annars blockeras detta av sekretessinställningarna. Om du tillåter detta kan i Biometri Knappen Uppdatera Chrome, tryck på retur om du vill uppdatera Chrome i inställningarna för Chrome Fack 5 +Spara i Google-kontot Index-4x6-Ext Program: Valideringen har genomförts @@ -1411,6 +1412,7 @@ Annars blockeras detta av sekretessinställningarna. Om du tillåter detta kan i Webbsidan på kan vara nere tillfälligt eller ha flyttats permanent till en ny webbadress. Utfärdat till Det kan finnas andra former av webbhistorik i Google-kontot på myactivity.google.com +Knappen Återuppta sökning, tryck på Retur om du vill återuppta sökningen och se relevant aktivitet i Chrome-historiken Tillgång till text och bilder som kopierats till Urklipp Vill du spara UPI-id? Visa virtuellt kort @@ -1486,6 +1488,7 @@ Annars blockeras detta av sekretessinställningarna. Om du tillåter detta kan i Verifiera kreditkort snabbare genom att använda Touch ID från och med nu Material Fönsterfalsning +Återuppta sökningen för att se relevant aktivitet i Chrome-historiken Bekräfta ditt telefonnummer Redigera kontaktuppgifter avvisade anslutningen. @@ -1537,6 +1540,7 @@ Annars blockeras detta av sekretessinställningarna. Om du tillåter detta kan i Rensa få åtkomst till cookies och webbplatsdata. {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)}} +Återuppta sökning Administratören kan ändra webbläsarinställningarna på distans. Aktivitet på den här enheten kan hanteras även utanför Chrome. Serif-teckensnitt Hanteras av: @@ -2189,6 +2193,7 @@ Mer information: Kortet kontrolleras … 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. Läs mer Fräsch +, tryck på Tabb och sedan på Retur om du vill återuppta sökningen och se relevant aktivitet i Chrome-historiken Uppladdad Policyer har lästs in Anslut till ett nätverk diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb index f317db9d2f1e84..a73af1ab2e1921 100644 --- a/components/strings/components_strings_sw.xtb +++ b/components/strings/components_strings_sw.xtb @@ -733,6 +733,7 @@ Usipoiruhusu, itazuiwa na mipangilio yako ya faragha. Hali hii itaruhusu maudhui Bayometriki Kitufe cha 'Sasisha Chrome', bonyeza 'Enter' ili usasishe Chrome katika mipangilio yako ya Chrome Trei ya tano +Hifadhi kwenye Akaunti ya Google Index-4x6-Ext Programu: Uhalalishaji umefanikiwa @@ -1410,6 +1411,7 @@ Usipoiruhusu, itazuiwa na mipangilio yako ya faragha. Hali hii itaruhusu maudhui Huenda ukurasa wa wavuti ulio kwenye haupatikani kwa muda au umehamishwa kabisa hadi kwenye anwani mpya ya wavuti. Kimetolewa Kwa Huenda Akaunti yako ya Google ina aina nyingine za historia ya kuvinjari katika myactivity.google.com. +Kitufe cha kuendelea na ziara, bonyeza Enter ili uendelee na ziara yako na uone shughuli muhimu katika historia yako kwenye Chrome Kuona maandishi na picha zilizonakiliwa kwenye ubao wa kunakili Ungependa kukumbuka kitambulisho chako cha UPI? Angalia kadi pepe @@ -1485,6 +1487,7 @@ Usipoiruhusu, itazuiwa na mipangilio yako ya faragha. Hali hii itaruhusu maudhui Thibitisha kadi zako kwa haraka zaidi ukitumia Touch ID kuanzia sasa Usanifu bora Mikunjo miwili sambamba +Endelea na ziara yako ili uone shughuli muhimu katika historia yako kwenye Chrome Thibitisha nambari yako ya simu Badilisha maelezo ya mawasiliano imekataa kuunganisha. @@ -1536,6 +1539,7 @@ Usipoiruhusu, itazuiwa na mipangilio yako ya faragha. Hali hii itaruhusu maudhui Futa Kufikia data ya tovuti na vidakuzi. {COUNT,plural, =0{Hamna}=1{Kutoka tovuti 1 (hutaondolewa kwenye Akaunti ya Google)}other{Kutoka tovuti # (hutaondolewa kwenye Akaunti ya Google)}} +Endelea na ziara yako Msimamizi wako anaweza kubadilisha mipangilio ya kivinjari chako kwa mbali. Huenda shughuli kwenye kifaa hiki zikadhibitiwa nje ya Chrome. Fonti ya "Serif" Inadhibitiwa na: @@ -2184,6 +2188,7 @@ Usipoiruhusu, itazuiwa na mipangilio yako ya faragha. Hali hii itaruhusu maudhui Inathibitisha kadi… Kivinjari hiki hakidhibitiwi na kampuni au shirika lingine. Huenda shughuli kwenye kifaa hiki zinadhibitiwa nje ya Chrome. Pata maelezo zaidi Fresh +, bonyeza kifufe cha Tab, kisha Enter ili uendelee na ziara yako na uone shughuli muhimu katika historia yako kwenye Chrome Imepakiwa Sera zimepakiwa Unganisha kwenye mtandao diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb index ed12a335c57d37..b71b3bde26ef13 100644 --- a/components/strings/components_strings_te.xtb +++ b/components/strings/components_strings_te.xtb @@ -523,7 +523,7 @@ విండో స్థలం కార్డ్‌ను సేవ్ చేయాలా? డబుల్-గేట్ ఫోల్డ్ -చిరునామాలు +అడ్రస్‌లు పేజీ లో లేదా? నెట్‌వర్క్ మార్పు గుర్తించబడింది. జాబ్ అకౌంటింగ్ యూజర్ ID diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb index 41364113eab6de..a43ed20bd513a1 100644 --- a/components/strings/components_strings_th.xtb +++ b/components/strings/components_strings_th.xtb @@ -727,6 +727,7 @@ ข้อมูลไบโอเมตริก ปุ่มอัปเดต Chrome กด Enter เพื่ออัปเดต Chrome จากการตั้งค่า Chrome ถาด 5 +บันทึกลงในบัญชี Google Index-4x6-Ext แอปพลิเคชัน: การตรวจสอบสำเร็จ @@ -1399,6 +1400,7 @@ หน้าเว็บที่ อาจใช้งานไม่ได้ชั่วคราวหรืออาจมีการย้ายไปยังที่อยู่เว็บใหม่อย่างถาวรแล้ว ออกให้แก่ บัญชี Google อาจมีประวัติการท่องเว็บรูปแบบอื่นๆ ที่ myactivity.google.com +ปุ่มดำเนินการสำรวจต่อ กด Enter เพื่อดำเนินการสำรวจต่อและดูกิจกรรมที่เกี่ยวข้องในประวัติการเข้าชมใน Chrome ดูข้อความและรูปภาพที่คัดลอกไปที่คลิปบอร์ด จำรหัส UPI ไหม ดูบัตรเสมือน @@ -1474,6 +1476,7 @@ ยืนยันบัตรได้เร็วขึ้นโดยใช้ Touch ID จากนี้ไป วัสดุ พับทบ +ดำเนินการสำรวจต่อเพื่อดูกิจกรรมที่เกี่ยวข้องในประวัติการเข้าชมใน Chrome ยืนยันเบอร์โทรศัพท์ แก้ไขข้อมูลติดต่อ ปฏิเสธการเชื่อมต่อ @@ -1525,6 +1528,7 @@ ล้าง เข้าถึงคุกกี้และข้อมูลเว็บไซต์ {COUNT,plural, =0{ไม่มี}=1{จาก 1 เว็บไซต์ (คุณจะไม่ออกจากระบบบัญชี Google)}other{จาก # เว็บไซต์ (คุณจะไม่ออกจากระบบบัญชี Google)}} +ดำเนินการสำรวจต่อ ผู้ดูแลระบบจะเปลี่ยนการตั้งค่าเบราว์เซอร์จากระยะไกลได้ กิจกรรมในอุปกรณ์นี้อาจมีการจัดการภายนอก Chrome ได้ด้วย แบบอักษร Serif จัดการโดย: @@ -2177,6 +2181,7 @@ กำลังยืนยันบัตร… เบราว์เซอร์นี้ไม่ได้จัดการโดยบริษัทหรือองค์กรอื่นๆ กิจกรรมในอุปกรณ์นี้อาจมีการจัดการภายนอก Chrome ดูข้อมูลเพิ่มเติม สดชื่น + กด Tab ตามด้วย Enter เพื่อดำเนินการสำรวจต่อและดูกิจกรรมที่เกี่ยวข้องในประวัติการเข้าชมใน Chrome อัปโหลดแล้ว โหลดนโยบายแล้ว เชื่อมต่อกับเครือข่าย diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb index 5b454d1fee3194..81a3a4de7605bf 100644 --- a/components/strings/components_strings_tr.xtb +++ b/components/strings/components_strings_tr.xtb @@ -729,6 +729,7 @@ Aksi halde bu işlem gizlilik ayarlarınız tarafından engellenecek. Buna izin Biyometri Chrome'u güncelle düğmesi, Chrome ayarlarınızdan Chrome'u güncellemek için Enter'a basın Tepsi 5 +Google Hesabı'na kaydedin Index-4x6-Ext Uygulama: Doğrulama başarılı @@ -1402,6 +1403,7 @@ Aksi halde bu işlem gizlilik ayarlarınız tarafından engellenecek. Buna izin adresindeki web sayfası geçici olarak kullanılamıyor veya kalıcı olarak yeni bir web adresine taşınmış olabilir. Verilen: Google Hesabınızın myactivity.google.com adresinde başka biçimlerde tarama geçmişi olabilir +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 Panoya kopyalanan metin ve resimleri görme UPI ID'nizi hatırlıyor musunuz? Sanal kartı görüntüle @@ -1477,6 +1479,7 @@ Aksi halde bu işlem gizlilik ayarlarınız tarafından engellenecek. Buna izin Bundan böyle Touch ID'yi kullanarak kartlarınızı daha hızlı onaylayın Malzeme İki kırımlı katlama +Chrome geçmişinizde alakalı etkinlikleri görmek için yolculuğu devam ettirin Telefon numaranızı doğrulayın İletişim bilgilerini düzenle bağlanmayı reddetti. @@ -1528,6 +1531,7 @@ Aksi halde bu işlem gizlilik ayarlarınız tarafından engellenecek. Buna izin Temizle Çerezlere ve site verilerine erişmek. {COUNT,plural, =0{Yok}=1{1 siteden (Google Hesabınızdan çıkış yapılmaz)}other{# siteden (Google Hesabınızdan çıkış yapılmaz)}} +Yolculuğu sürdür Yöneticiniz, tarayıcınızın kurulumunu uzaktan değiştirebilir. Bu cihazdaki etkinlikler Chrome dışında da yönetilebilir. Serif Yazı Tipi Yöneten: @@ -2180,6 +2184,7 @@ Ek ayrıntılar: Kart onaylanıyor... Bu tarayıcı bir şirket veya başka bir kuruluş tarafından yönetilmemektedir. Bu cihazdaki etkinlikler Chrome dışında yönetilebilir. Daha fazla bilgi Taze +, 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 Yüklendi Politikalar yüklendi Ağa bağlan diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb index bf2a01640decf1..54d6a5b3c59e45 100644 --- a/components/strings/components_strings_uk.xtb +++ b/components/strings/components_strings_uk.xtb @@ -732,6 +732,7 @@ Біометрія Кнопка "Оновити Chrome"; натисніть Enter, щоб оновити веб-переглядач Chrome у його налаштуваннях Лоток 5 +Зберегти в обліковий запис Google Index-4x6-Ext Додаток: Перевірку закінчено @@ -1409,6 +1410,7 @@ Можливо, веб-сторінка тимчасово недоступна або її назавжди переміщено на нову веб-адресу. Кому видано Історія веб-перегляду може також зберігатися у вашому обліковому записі Google на сторінці myactivity.google.com +Кнопка "Відновити пошук"; натисніть Enter, щоб відновити пошук і переглянути релевантні дії в історії Chrome Переглядати тексти й зображення в буфері обміну Запам'ятати ідентифікатор UPI? Переглянути віртуальну картку @@ -1484,6 +1486,7 @@ Відтепер ви можете підтверджувати картки швидше за допомогою Touch ID Матеріальний Зігнути за типом "ворота" +Щоб бачити релевантні дії в історії Chrome, відновіть пошук Підтвердьте номер телефону Змінити контактні дані Хост відхилив запит на з’єднання. @@ -1535,6 +1538,7 @@ Очистити Отримати доступ до файлів cookie й даних сайту. {COUNT,plural, =0{Немає}=1{З 1 сайту (ви не вийдете з облікового запису Google)}one{З # сайту (ви не вийдете з облікового запису Google)}few{З # сайтів (ви не вийдете з облікового запису Google)}many{З # сайтів (ви не вийдете з облікового запису Google)}other{З # сайту (ви не вийдете з облікового запису Google)}} +Відновити пошук Адміністратор може змінити налаштування веб-переглядача віддалено. Діями на цьому пристрої можна керувати за межами Chrome. Шрифт Serif Керує: @@ -2187,6 +2191,7 @@ Підтверджуються дані картки… Цим веб-переглядачем не керує адміністратор компанії чи іншої організації. Діями на цьому пристрої можна керувати за межами Chrome. Докладніше Свіжий +; натисніть Tab, а потім – Enter, щоб відновити пошук і переглянути релевантні дії в історії Chrome Завантажено Правила завантажено З'єднатися з мережею diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb index d0f2f84e446b4b..37743e57babc8c 100644 --- a/components/strings/components_strings_vi.xtb +++ b/components/strings/components_strings_vi.xtb @@ -734,6 +734,7 @@ Nếu bạn từ chối, chế độ cài đặt quyền riêng tư của bạn Sinh trắc học 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 Khay 5 +Lưu vào Tài khoản Google Index-4x6-Ext Ứng dụng: Xác thực thành công @@ -1411,6 +1412,7 @@ Nếu bạn từ chối, chế độ cài đặt quyền riêng tư của bạn Trang web tại 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. Cấp cho 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 myactivity.google.com +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 Xem văn bản và hình ảnh đã sao chép sang bảng nhớ tạm Ghi nhớ mã nhận dạng sản phẩm duy nhất (UPI) của bạn? Xem thẻ ảo @@ -1486,6 +1488,7 @@ Nếu bạn từ chối, chế độ cài đặt quyền riêng tư của bạn Từ giờ trở đi, bạn có thể xác nhận các thẻ nhanh hơn bằng Touch ID Material Gấp dạng cửa +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 Xác minh số điện thoại của bạn Chỉnh sửa thông tin liên hệ đã từ chối kết nối. @@ -1537,6 +1540,7 @@ Nếu bạn từ chối, chế độ cài đặt quyền riêng tư của bạn Xóa Truy cập vào cookie và dữ liệu trang web. {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)}} +Tiếp tục hành trình 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. Phông chữ Serif Người quản lý: @@ -1676,7 +1680,7 @@ Nếu bạn từ chối, chế độ cài đặt quyền riêng tư của bạn Dùng Touch ID để xác minh và hoàn tất việc mua hàng? Kết nối sử dụng . Đang xử lý -Hiển thị thông báo +Hiện thông báo 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 , , và các trang web khác mà bạn sử dụng mật khẩu này. In tờ xác nhận SHA-256 Fingerprint @@ -2189,6 +2193,7 @@ Thông tin chi tiết bổ sung: Đang xác nhận thẻ... 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. Tìm hiểu thêm Tươi mới +, 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 Đã tải lên Đã tải chính sách Kết nối đến mạng diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb index 7a964c46a144bc..dc4d37c38e8baa 100644 --- a/components/strings/components_strings_zh-CN.xtb +++ b/components/strings/components_strings_zh-CN.xtb @@ -724,6 +724,7 @@ 生物识别 “更新 Chrome”按钮,按 Enter 键即可前往 Chrome 设置以更新 Chrome 纸匣 5 +保存到 Google 帐号 Index-4x6-Ext 应用: 验证成功 @@ -1396,6 +1397,7 @@ 位于 的网页可能暂时无法打开或已永久移至新网址。 颁发对象 您的 Google 帐号在 myactivity.google.com 上可能有其他形式的浏览记录 +“继续您的历程”按钮,按 Enter 键即可继续您的历程,以查看您的 Chrome 历史记录中的相关活动记录 查看复制到剪贴板的文字和图片 要记住您的 UPI ID 吗? 查看虚拟卡 @@ -1470,6 +1472,7 @@ 从现在开始,您只需使用 Touch ID 便能更快速地确认银行卡 Material 关门折 +继续您的历程,以查看您的 Chrome 历史记录中的相关活动记录 验证您的手机号码 修改联系信息 拒绝了我们的连接请求。 @@ -1521,6 +1524,7 @@ 清除 访问 Cookie 和网站数据。 {COUNT,plural, =0{无}=1{来自 1 个网站(这不会致使您退出自己的 Google 帐号)}other{来自 # 个网站(这不会致使您退出自己的 Google 帐号)}} +继续您的历程 您的管理员可以远程更改您的浏览器设置。此设备上的活动可能也在接受 Chrome 外部的管理。 Serif 字体 管理者: @@ -2173,6 +2177,7 @@ 正在确认信用卡… 此浏览器并未由某个公司或其他组织管理。此设备上的活动可能在接受 Chrome 外部的管理。了解详情 清新 +,依次按 Tab 键和 Enter 键即可继续您的历程,以查看您的 Chrome 历史记录中的相关活动记录 已上传 政策已加载完毕 连接到网络 diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb index 5ec8d4086c1e8b..04c1c05536ee14 100644 --- a/components/strings/components_strings_zh-TW.xtb +++ b/components/strings/components_strings_zh-TW.xtb @@ -728,6 +728,7 @@ 生物特徵辨識 「更新 Chrome」按鈕,按下 Enter 鍵即可透過 Chrome 設定來更新 Chrome 紙匣 5 +儲存至 Google 帳戶 Index-4x6-Ext 應用程式: 驗證成功 @@ -1400,6 +1401,7 @@ 位於 的網頁可能暫時無法使用,或是已永久移至新的網址。 核發對象 你的 Google 帳戶仍可能保留了其他類型的瀏覽記錄 (可前往 myactivity.google.com 查詢)。 +「繼續歷程」按鈕;按下 Enter 鍵即可繼續歷程,查看 Chrome 歷史記錄中的相關活動 讀取已複製到剪貼簿的文字和圖片 還記得你的 UPI ID 嗎? 查看虛擬卡片 @@ -1475,6 +1477,7 @@ 現在就開始使用 Touch ID,加快卡片驗證速度 質感 開門摺 +繼續歷程即可查看 Chrome 歷史記錄中的相關活動 驗證你的電話號碼 編輯聯絡資訊 拒絕連線。 @@ -1526,6 +1529,7 @@ 清除 存取 Cookie 和網站資料。 {COUNT,plural, =0{無}=1{1 個網站 (你不會因此登出 Google 帳戶)}other{# 個網站 (你不會因此登出 Google 帳戶)}} +繼續歷程 你的系統管理員可以遠端變更瀏覽器設定。這部裝置上的活動也可以透過 Chrome 以外的服務管理。 Serif 字型 管理網域/帳戶: @@ -2177,6 +2181,7 @@ 正在驗證信用卡... 這個瀏覽器未受到任何公司或其他機構管理。這部裝置上的活動可透過 Chrome 以外的服務管理。瞭解詳情 新鮮 +;按下 Tab 鍵再按下 Enter 鍵即可繼續歷程,查看 Chrome 歷史記錄中的相關活動 已上傳 已載入政策 連線至網路 diff --git a/components/strings/components_strings_zu.xtb b/components/strings/components_strings_zu.xtb index 4adfb6ff6f2da4..91fc5a6f0d63c1 100644 --- a/components/strings/components_strings_zu.xtb +++ b/components/strings/components_strings_zu.xtb @@ -731,6 +731,7 @@ Lokhu uma kungenjalo kuzovinjelwa izilungiselelo zakho zobumfihlo. Lokhu kuzovum I-biometrics Inkinoho yokubuyekekeza ye-Chrome, cindezela u-Enter ukuze ubuyekeze i-Chrome kusuka kumasethingi akho e-Chrome Ithileyi elingu-5 +Londoloza ku-akhawunti ye-Google I-Index-4x6-Ext Uhlelo lokusebenza: Ukuqinisekiswa kuphumelele @@ -1408,6 +1409,7 @@ Lokhu uma kungenjalo kuzovinjelwa izilungiselelo zakho zobumfihlo. Lokhu kuzovum Ikhasi lewebhu ku- lingahle liphansi okwesikhashana noma lingahle liye unaphakathi ekheli elisha lewebhu. Ikhishelwe ku- I-akhawunti yakho ye-Google ingaba namanye amafomu omlando wokuphequlula ku-myactivity.google.com. +Inkinobho yokuqhubeka, cindezela u-Enter ukuqhubeka nohambo lwakho futhi ubone umsebenzi ohambisanayo kumlando wakho we-Chrome Bona umbhalo nezithombe ezikopishelwe kubhodi lokunamathisela Khumbula i-UPI ID yakho? Buka ikhadi elibonakalayo @@ -1483,6 +1485,7 @@ Lokhu uma kungenjalo kuzovinjelwa izilungiselelo zakho zobumfihlo. Lokhu kuzovum Qinisekisa amakhadi akho ngokushesha ngokusebenzisa i-Touch ID kusuka manje Okubalulekile Ukugoqa kwesango +Qhubeka nohambo ukubona umsebenzi ohambisanayo kumlando wakho we-Chrome Iqinisekisa inombolo yakho yefoni Hlela ulwazi loxhumana naye I- inqabe ukuxhumeka. @@ -1534,6 +1537,7 @@ Lokhu uma kungenjalo kuzovinjelwa izilungiselelo zakho zobumfihlo. Lokhu kuzovum Sula Finyelela amakhukhi nedatha yesayithi. {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)}} +Qhubeka nohambo Umlawuli wakho angaguqula ukusethwa kwesiphequluli sakho akude. Umsebenzi kule divayisi ungaphinda aphathwe ngaphandle kwe-Chrome. Ifonti ye-Serif Iphethwe i-: @@ -2185,6 +2189,7 @@ Imininingwane engeziwe: Iqinisekisa ikhadi... Lesi siphequluli asiphethwe inkampani noma enye inhlangano. Umsebenzi kule divayisi ungaphathwa ngaphandle kwe-Chrome. Funda kabanzi Okusha +, cindezela u-Tab, bese ucindezela u-Enter ukuqhubeka nohambo lwakho futhi ubone umsebenzi ohambisanayo kumlando wakho we-Chrome Kulayishiwe Izinqubomgomo zilayishiwe Xhuma kunethiwekhi diff --git a/components/sync/driver/data_type_manager_impl.cc b/components/sync/driver/data_type_manager_impl.cc index 44f6bf10597a2f..14701fee27ea76 100644 --- a/components/sync/driver/data_type_manager_impl.cc +++ b/components/sync/driver/data_type_manager_impl.cc @@ -544,58 +544,36 @@ DataTypeManagerImpl::PrepareConfigureParams( 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()); - - // 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); + DCHECK(Intersection(active_types, disabled_types).Empty()); + 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 @@ DataTypeManagerImpl::PrepareConfigureParams( 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::Stop(ShutdownReason reason) { } } -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 f54b3f777638fe..c44478d0c2db69 100644 --- a/components/sync/driver/data_type_manager_impl.h +++ b/components/sync/driver/data_type_manager_impl.h @@ -111,9 +111,6 @@ class DataTypeManagerImpl : public DataTypeManager, 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 PrioritizeTypes(const ModelTypeSet& types); @@ -194,9 +191,6 @@ class DataTypeManagerImpl : public DataTypeManager, // 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 43420f701be1a5..b96b79761f3e9a 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 @@ class SyncEngineImplTest : public testing::Test { 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 @@ class SyncEngineImplTest : public testing::Test { 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 8c1c5c7d1f9444..4d2cef146bebe7 100644 --- a/components/sync/engine/model_type_configurer.h +++ b/components/sync/engine/model_type_configurer.h @@ -28,16 +28,11 @@ class ModelTypeConfigurer { 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 ready_task; + + base::OnceCallback + 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 496cc6628f9d56..956f7bf8019e7a 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::Shutdown(ShutdownReason reason) { 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/content/browser/android/dialog_overlay_impl.cc b/content/browser/android/dialog_overlay_impl.cc index 54490eb6815b88..d221038b72d5b5 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 @@ static jlong JNI_DialogOverlayImpl_Init(JNIEnv* env, if (power_efficient && !web_contents_impl->IsFullscreen()) return 0; - return reinterpret_cast( - new DialogOverlayImpl(obj, rfhi, web_contents_impl, power_efficient)); + bool observe_container_view = + GetContentClient() + ->browser() + ->ShouldObserveContainerViewLocationForDialogOverlays(); + + return reinterpret_cast(new DialogOverlayImpl( + obj, rfhi, web_contents_impl, power_efficient, observe_container_view)); } DialogOverlayImpl::DialogOverlayImpl(const JavaParamRef& 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 @@ void DialogOverlayImpl::CompleteInit(JNIEnv* env, ScopedJavaLocalRef 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 @@ void DialogOverlayImpl::UnregisterCallbacksIfNeeded() { 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 @@ void DialogOverlayImpl::OnAttachedToWindow() { ScopedJavaLocalRef obj = obj_.get(env); if (!obj.is_null()) Java_DialogOverlayImpl_onWindowToken(env, obj, token); + + StartObservingContainerView(); } void DialogOverlayImpl::OnDetachedFromWindow() { @@ -248,6 +266,26 @@ void DialogOverlayImpl::RegisterWindowObserverIfNeeded( } } +void DialogOverlayImpl::StartObservingContainerView() { + ObserveContainerViewIfNeeded( + web_contents()->GetNativeView()->GetContainerView()); +} + +void DialogOverlayImpl::StopObservingContainerView() { + ObserveContainerViewIfNeeded(/*container_view=*/nullptr); +} + +void DialogOverlayImpl::ObserveContainerViewIfNeeded( + const ScopedJavaLocalRef& container_view) { + if (!observe_container_view_) + return; + + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef 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 1912e5e567c956..fd97cbf329958c 100644 --- a/content/browser/android/dialog_overlay_impl.h +++ b/content/browser/android/dialog_overlay_impl.h @@ -30,7 +30,8 @@ class DialogOverlayImpl : public ui::ViewAndroidObserver, DialogOverlayImpl(const base::android::JavaParamRef& 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 @@ class DialogOverlayImpl : public ui::ViewAndroidObserver, void Stop(); void RegisterWindowObserverIfNeeded(ui::WindowAndroid* window); + void StartObservingContainerView(); + void StopObservingContainerView(); + void ObserveContainerViewIfNeeded( + const base::android::ScopedJavaLocalRef& container_view); + // Java object that owns us. JavaObjectWeakGlobalRef obj_; @@ -84,10 +90,13 @@ class DialogOverlayImpl : public ui::ViewAndroidObserver, 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 953409929b031a..24cc886e1c63a0 100644 --- a/content/browser/browser_interface_binders.cc +++ b/content/browser/browser_interface_binders.cc @@ -728,8 +728,6 @@ void PopulateFrameBinders(RenderFrameHostImpl* host, mojo::BinderMap* map) { &RenderFrameHostImpl::CreatePaymentManager, base::Unretained(host))); if (base::FeatureList::IsEnabled( - blink::features::kHandwritingRecognitionWebPlatformApi) && - base::FeatureList::IsEnabled( blink::features::kHandwritingRecognitionWebPlatformApiFinch)) { map->Add( base::BindRepeating(&CreateHandwritingRecognitionService)); 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 b65b5b5e3beac4..d560beb05d830b 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 @@ class FileSystemAccessClipboardBrowserTest : public ContentBrowserTest { 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 @@ class FileSystemAccessClipboardBrowserTest : public ContentBrowserTest { protected: base::ScopedTempDir temp_dir_; - base::test::ScopedFeatureList features_; }; IN_PROC_BROWSER_TEST_F(FileSystemAccessClipboardBrowserTest, File) { @@ -172,58 +168,4 @@ IN_PROC_BROWSER_TEST_F(FileSystemAccessClipboardBrowserTest, Directory) { 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 82ec72b29378d6..4aea0963e503ac 100644 --- a/content/browser/prerender/prerender_browsertest.cc +++ b/content/browser/prerender/prerender_browsertest.cc @@ -1767,7 +1767,6 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, ClipboardByExecCommandFail) { 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 @@ void LoadAndWaitForPrerenderDestroyed(WebContents* const web_contents, 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 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, NotificationConstructor) { } #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 d394b4e6635447..7da69d4fd143a3 100644 --- a/content/browser/prerender/prerender_host.h +++ b/content/browser/prerender/prerender_host.h @@ -65,7 +65,8 @@ class CONTENT_EXPORT PrerenderHost : public WebContentsObserver { kPlugin = 12, kRendererProcessCrashed = 13, kRendererProcessKilled = 14, - kMaxValue = kRendererProcessKilled + kDownload = 15, + kMaxValue = kDownload }; PrerenderHost(blink::mojom::PrerenderAttributesPtr attributes, diff --git a/content/browser/prerender/prerender_navigation_throttle.cc b/content/browser/prerender/prerender_navigation_throttle.cc index f233fa53eaea83..2eba9601fbdefc 100644 --- a/content/browser/prerender/prerender_navigation_throttle.cc +++ b/content/browser/prerender/prerender_navigation_throttle.cc @@ -129,4 +129,25 @@ PrerenderNavigationThrottle::WillStartOrRedirectRequest(bool is_redirection) { 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->AbandonHostAsync( + 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 127e85993e32de..c307d86b1d6191 100644 --- a/content/browser/prerender/prerender_navigation_throttle.h +++ b/content/browser/prerender/prerender_navigation_throttle.h @@ -27,6 +27,7 @@ class PrerenderNavigationThrottle : public NavigationThrottle { 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_subframe_navigation_throttle.cc b/content/browser/prerender/prerender_subframe_navigation_throttle.cc index 31afa82cf9b3e1..a11dc4eff4a35d 100644 --- a/content/browser/prerender/prerender_subframe_navigation_throttle.cc +++ b/content/browser/prerender/prerender_subframe_navigation_throttle.cc @@ -54,6 +54,26 @@ PrerenderSubframeNavigationThrottle::WillRedirectRequest() { 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->AbandonHostAsync( + 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 5e733e993a1996..4eed6d7d652b86 100644 --- a/content/browser/prerender/prerender_subframe_navigation_throttle.h +++ b/content/browser/prerender/prerender_subframe_navigation_throttle.h @@ -29,6 +29,7 @@ class PrerenderSubframeNavigationThrottle : public NavigationThrottle, 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 3981ffdd7c6c09..61ad2a1f7ad039 100644 --- a/content/browser/renderer_host/clipboard_host_impl.cc +++ b/content/browser/renderer_host/clipboard_host_impl.cc @@ -8,7 +8,6 @@ #include #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 @@ void ClipboardHostImpl::ReadFiles(ui::ClipboardBuffer clipboard_buffer, return; } - if (!base::FeatureList::IsEnabled(features::kClipboardFilenames)) { - std::move(callback).Run(std::move(result)); - return; - } - std::vector 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 61f79c7e4b759a..bc125469c3ad4c 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 @@ class ClipboardHostImplBrowserTest : public ContentBrowserTest { void SetUp() override { ASSERT_TRUE(embedded_test_server()->Start()); - features_.InitWithFeatures({features::kClipboardFilenames}, {}); ui::TestClipboard::CreateForCurrentThread(); ContentBrowserTest::SetUp(); } @@ -97,9 +94,6 @@ class ClipboardHostImplBrowserTest : public ContentBrowserTest { 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 af7534ae0e604f..f9e24afb8b9e9c 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 @@ IN_PROC_BROWSER_TEST_P(ScrollBehaviorBrowserTest, // 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/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc index c07e061af9c8c5..555ff4f301d96a 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::UpdateManifestURL( 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; 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 d6a0b022da52bf..be596776b55d6c 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 @@ public class DialogOverlayImpl implements AndroidOverlay, DialogOverlayCore.Host // 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 @@ public DialogOverlayImpl(AndroidOverlayClient client, final AndroidOverlayConfig mClient = client; mReleasedRunnable = releasedRunnable; + mLastRect = copyRect(config.rect); mDialogCore = new DialogOverlayCore(); @@ -123,6 +133,8 @@ public void onConnectionError(MojoException e) { 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 @@ public void onOverlayDestroyed() { // 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 @@ public void onWindowToken(final IBinder token) { 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 @@ private void cleanup() { // 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 @@ private void notifyDestroyed() { 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 53de48cce1212a..dcc9c2261a5a68 100644 --- a/content/public/browser/content_browser_client.cc +++ b/content/public/browser/content_browser_client.cc @@ -1086,6 +1086,11 @@ std::unique_ptr ContentBrowserClient::CreateTtsEnvironmentAndroid() { return nullptr; } + +bool ContentBrowserClient:: + ShouldObserveContainerViewLocationForDialogOverlays() { + return false; +} #endif base::flat_set diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h index 4b1479f606fd94..09ce07d6501e1c 100644 --- a/content/public/browser/content_browser_client.h +++ b/content/public/browser/content_browser_client.h @@ -1882,6 +1882,12 @@ class CONTENT_EXPORT ContentBrowserClient { // Creates the TtsEnvironmentAndroid. A return value of null results in using // a default implementation. virtual std::unique_ptr 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 b6a94c58cf15e4..d764f7a486a708 100644 --- a/content/public/test/render_view_test.cc +++ b/content/public/test/render_view_test.cc @@ -324,7 +324,7 @@ RenderViewTest::RenderViewTest(bool hook_render_frame_creation) 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 @@ void RenderViewTest::LoadHTML(const char* html) { // 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 @@ void RenderViewTest::LoadHTMLWithUrlOverride(const char* html, // 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 @@ void RenderViewTest::SetUp() { waiter.Wait(); view_ = view; + web_view_ = view->GetWebView(); } void RenderViewTest::TearDown() { @@ -558,6 +559,7 @@ void RenderViewTest::TearDown() { // |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 @@ void RenderViewTest::Reload(const GURL& url) { 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 @@ void RenderViewTest::SetUseZoomForDSFEnabled(bool enabled) { } blink::WebFrameWidget* RenderViewTest::GetWebFrameWidget() { - return view_->GetWebView()->MainFrameWidget(); + return web_view_->MainFrameWidget(); } ContentClient* RenderViewTest::CreateContentClient() { @@ -886,7 +888,7 @@ void RenderViewTest::GoToOffset(int offset, const GURL& url, const blink::PageState& state) { RenderViewImpl* view = static_cast(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 977e619a02ad61..873be598b3c6c9 100644 --- a/content/public/test/render_view_test.h +++ b/content/public/test/render_view_test.h @@ -214,6 +214,10 @@ class RenderViewTest : public testing::Test { // 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 content_client_; std::unique_ptr content_browser_client_; diff --git a/content/renderer/render_frame_impl_browsertest.cc b/content/renderer/render_frame_impl_browsertest.cc index 93db5889081ab2..48db49fc561e7e 100644 --- a/content/renderer/render_frame_impl_browsertest.cc +++ b/content/renderer/render_frame_impl_browsertest.cc @@ -260,9 +260,8 @@ TEST_F(RenderFrameImplTest, FrameResize) { 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); diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc index 1778b5d944edb4..e27e610510b294 100644 --- a/content/renderer/render_view_browsertest.cc +++ b/content/renderer/render_view_browsertest.cc @@ -337,14 +337,11 @@ class RenderViewImplTest : public RenderViewTest { 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 @@ class RenderViewImplTest : public RenderViewTest { 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 @@ class RenderViewImplTest : public RenderViewTest { } 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 @@ class RenderViewImplTest : public RenderViewTest { } 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 @@ class RenderViewImplBlinkSettingsTest : public RenderViewImplTest { 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 @@ class RenderViewImplScaleFactorTest : public RenderViewImplTest { 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 @@ class RenderViewImplScaleFactorTest : public RenderViewImplTest { 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 @@ class RenderViewImplScaleFactorTest : public RenderViewImplTest { 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 @@ TEST_F(RenderViewImplTest, IsPinchGestureActivePropagatesToProxies) { 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 @@ TEST_F(RenderViewImplTest, IsPinchGestureActivePropagatesToProxies) { // 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() @@ -916,10 +908,9 @@ TEST_F(RenderViewImplTest, BeginNavigation) { } 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 @@ TEST_F(RenderViewImplScaleFactorTest, DeviceEmulationWithOOPIF) { 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 @@ TEST_F(RenderViewImplEnableZoomForDSFTest, static_cast(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 @@ TEST_F(RenderViewImplEnableZoomForDSFTest, 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 @@ TEST_F(RenderViewImplEnableZoomForDSFTest, 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 @@ TEST_F(RenderViewImplEnableZoomForDSFTest, ->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 @@ TEST_F(RenderViewImplTest, ImeComposition) { // 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 @@ TEST_F(RenderViewImplTest, OnSetTextDirection) { // 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 @@ TEST_F(RenderViewImplTest, NavigateSubframe) { // 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 @@ TEST_F(RendererErrorPageTest, RegularError) { 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 @@ TEST_F(RenderViewImplTest, PreferredSizeZoomed) { 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 @@ TEST_F(RenderViewImplScaleFactorTest, PreferredSizeWithScaleFactor) { // 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 @@ TEST_F(RenderViewImplTest, HistoryIsProperlyUpdatedOnNavigation) { // 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 @@ TEST_F(RenderViewImplTest, HistoryIsProperlyUpdatedOnHistoryNavigation) { // 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 @@ TEST_F(RenderViewImplBlinkSettingsTest, DefaultPageScaleSettings) { "}" ""); - 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 @@ TEST_F(RenderViewImplScaleFactorTest, ScreenMetricsEmulationWithOriginalDSF1) { 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 @@ TEST_F(RenderViewImplScaleFactorTest, ScreenMetricsEmulationWithOriginalDSF2) { 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(RenderViewImplScaleFactorTest, AutoResizeWithoutZoomForDSF) { 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_widget_browsertest.cc b/content/renderer/render_widget_browsertest.cc index 322f95c9c38227..94401fca2077ae 100644 --- a/content/renderer/render_widget_browsertest.cc +++ b/content/renderer/render_widget_browsertest.cc @@ -114,7 +114,7 @@ TEST_F(RenderWidgetTest, CompositorIdHitTestAPI) { 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/strings/extensions_strings_eu.xtb b/extensions/strings/extensions_strings_eu.xtb index fa3217087151bf..7e8060077f99a3 100644 --- a/extensions/strings/extensions_strings_eu.xtb +++ b/extensions/strings/extensions_strings_eu.xtb @@ -28,7 +28,7 @@ luzapenaren bertsioak gutxienez izatea behar du makinaren administratzaileak. Ezin da gaitu eguneratzen ez den arte (bertsio horretara edo berriago batera). Ezin izan da "" orria kargatu. Ezin izan da gako pribatua eman. -Ezin izan da paketea instalatu utilitate-prozesuak huts egin duelako. Berrabiarazi Chrome eta saiatu berriro. +Ezin izan da paketea instalatu zerbitzu-aplikazioaren prozesuak huts egin duelako. Berrabiarazi Chrome eta saiatu berriro. Ezin izan da gako publikoa esportatu. Web-ikuspegia: Ezin da aurkitu bide absolutu bat paketatu nahi den direktoriorako. diff --git a/gin/v8_initializer.cc b/gin/v8_initializer.cc index f4d6372c79a7e0..8bac97b6809a1f 100644 --- a/gin/v8_initializer.cc +++ b/gin/v8_initializer.cc @@ -185,14 +185,6 @@ base::File OpenV8File(const char* file_name, 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 @@ -210,7 +202,6 @@ void SetV8FlagsFormatted(const char* format, ...) { return; } v8::V8::SetFlagsFromString(buffer, length - 1); - ; } } // namespace @@ -379,8 +370,7 @@ void V8Initializer::LoadV8SnapshotFromFile( 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 @@ void V8Initializer::LoadV8SnapshotFromFile( 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/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb index c489f2ec278ff8..26279a1d4fee17 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 @@ Handoff እንዲሁም በSettings ውስጥ ባለው የGeneral ክፍል ላ የእርስዎን ታሪክ እና እንቅስቃሴ እዚህ ይቆጣጠሩ ይቅር ለማለት መታ ያድርጉ። ይቀበሉ እና ይቀጥሉ +ትሮችን ይምረጡ ማዋቀር በሂደት ላይ… የአሁኑ ድረ-ገጽ ማንነት በማያሳውቅ ላይ ነው መስመር ላይ @@ -782,6 +783,7 @@ Handoff እንዲሁም በSettings ውስጥ ባለው የGeneral ክፍል ላ የበለጠ ለመረዳት ዕልባቶች ከእርስዎ የGoogle መለያ ዘግተው እንዲወጡ አይደረጉም። +{count,plural, =1{{count} ትር}one{{count} ትሮች}other{{count} ትሮች}} በቅርብ ጊዜ የተዘጉ መሳሪያዎችዎን በስምረት ላይ ያቆዩዋቸው ይህን ምስል በ ውስጥ ፈልግ diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb index 6636566feeaf09..517790aaaa7716 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 @@ يمكنك التحكُّم بقصصك ونشاطك هنا. انقر للإلغاء. قبول ومتابعة +اختيار علامات التبويب الإعداد قيد التقدّم… صفحة الويب الحالية في وضع التصفح المتخفي متصل @@ -782,6 +783,7 @@ مزيد من المعلومات الإشارات المرجعية ‏لن يتم تسجيل خروجك من حساب Google. +{count,plural, =1{علامة تبويب واحدة ({count})}zero{{count} علامة تبويب}two{علامتا تبويب ({count})}few{{count} علامات تبويب}many{{count} علامة تبويب}other{{count} علامة تبويب}} العناصر المغلقة مؤخرًا مواصلة مزامنة الأجهزة البحث في عن هذه الصورة diff --git a/ios/chrome/app/strings/resources/ios_strings_as.xtb b/ios/chrome/app/strings/resources/ios_strings_as.xtb index c300db9be462ad..5b2887b676e373 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 @@ আপোনাৰ কাহিনীসমূহ আৰু কাৰ্যকলাপ ইয়াত নিয়ন্ত্ৰণ কৰক বাতিল কৰিবলৈ টিপক। গ্ৰহণ কৰি অব্যাহত ৰাখক +টেব বাছনি কৰক ছেট আপ প্ৰক্ৰিয়া চলি আছে… বৰ্তমানৰ ৱেবপৃষ্ঠাটো ইনক’গনিট’ত আছে অনলাইন @@ -779,6 +780,7 @@ অধিক জানক Bookmarks আপোনাক নিজৰ Google Accountৰ পৰা ছাইন আউট কৰোৱা নহয়। +{count,plural, =1{{count} টা টেব}one{{count} টা টেব}other{{count} টা টেব}} শেহতীয়াকৈ বন্ধ কৰা আপোনাৰ ডিভাইচসমূহ ছিংক কৰি ৰাখক এই প্ৰতিচ্ছবিটোৰ কাৰণে ত সন্ধান কৰক diff --git a/ios/chrome/app/strings/resources/ios_strings_az.xtb b/ios/chrome/app/strings/resources/ios_strings_az.xtb index 07dd66d2a4da6c..d93385ba2a1aeb 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 @@ Handoff Ayarların Ümumi bölməsindən də aktiv edilə bilər və cihazların Hekayələrinizi və fəaliyyətlərinizi burada idarə edin Ləğv etmək üçün tıklayın. Qəbul edin və Davam edin +Tablar seçin Quraşdırma icra olunur... Hazırkı veb səhifə anonim rejimdədir Onlayn @@ -782,6 +783,7 @@ Saytlar müxtəlif saytlarda baxış fəaliyyətinizi görmək üçün kukilərd Ətraflı məlumat Əlfəcinlər Google Hesabınızdan çıxmayacaqsınız. +{count,plural, =1{{count} Tab}other{{count} Tab}} Son Qapadılan Cihazlarınızı Sinxronlaşdırın Bu Şəkil üçün Axtarışı Edin diff --git a/ios/chrome/app/strings/resources/ios_strings_be.xtb b/ios/chrome/app/strings/resources/ios_strings_be.xtb index b4809e8b01c017..190110c905c76f 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 @@ Кіруйце паказам артыкулаў і гісторыяй дзеянняў тут Каб скасаваць, націсніце тут. Прыняць і працягнуць +Выбраць укладкі Ідзе наладка… Вэб-старонка адкрыта ў рэжыме інкогніта У інтэрнэце @@ -782,6 +783,7 @@ Даведацца больш Закладкі З Уліковага запісу Google вы не выйдзеце. +{count,plural, =1{{count} укладка}one{{count} укладка}few{{count} укладкі}many{{count} укладак}other{{count} укладкі}} Нядаўна закрытыя Сінхранізуйце свае прылады Шукаць гэты відарыс праз diff --git a/ios/chrome/app/strings/resources/ios_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_strings_bg.xtb index ca45f5c3e25d90..7b638f953b4052 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 @@ Управлявайте материалите и активността си тук Докоснете, за да анулирате. Приемам и продължавам +Избиране на раздели Извършва се настройване… Страницата е в режим „инкогнито“ Онлайн @@ -782,6 +783,7 @@ Научете повече Отметки Няма да излезете от профила си в Google. +{count,plural, =1{{count} раздел}other{{count} раздела}} Наскоро затворени Синхронизирайте устройствата си Търсене на изобр. със: diff --git a/ios/chrome/app/strings/resources/ios_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_strings_bs.xtb index 42068230528838..3662b935acfb60 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 @@ Također, Handoff mora biti omogućen u odjeljku Općenito u Postavkama, a vaši Upravljajte pričama i aktivnostima ovdje Dodirnite da otkažete. Prihvati i nastavi +Odaberite kartice U toku je postavljanje… Trenutna web stranica je u Anonimnom načinu Na mreži @@ -782,6 +783,7 @@ Web lokacije mogu koristiti kolačiće da vide vašu aktivnost pregledanja na ra Saznajte više Oznake Nećete se odjaviti sa svog Google računa. +{count,plural, =1{{count} kartica}one{{count} kartica}few{{count} kartice}other{{count} kartica}} Nedavno zatvoreno Kontinuirano sinhronizirajte uređaje Pretraži za ovu sliku diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb index 7e3deb860fe80f..84ee7242b6f480 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 @@ Handoff també ha d'estar activat a la secció General de Configuració, i els v Controla les teves històries i la teva activitat aquí Toca per cancel·lar. Accepta i continua +Selecciona pestanyes Configuració en curs... La pàgina web actual està en mode d'incògnit En línia @@ -782,6 +783,7 @@ Els llocs web poden fer servir galetes per veure la teva activitat de navegació Més informació Adreces d'interès No se us tancarà la sessió del compte de Google. +{count,plural, =1{{count} pestanya}other{{count} pestanyes}} Tancades recentment Mantén els dispositius sincronitzats Cerca aquesta imatge a diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb index c152d26a282051..2c6abddebaa2e5 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 @@ Funkce Handoff musí být povolena také v Nastavení v sekci Obecné a zaříze Zde můžete ovládat své příběhy a aktivity Stahování zrušíte klepnutím. Přijmout a pokračovat +Vybrat karty Probíhá nastavování… Webová stránka je v anonymním režimu Online @@ -782,6 +783,7 @@ Weby pomocí souborů cookie mohou sledovat vaši aktivitu prohlížení na růz Další informace Záložky Nebudete odhlášeni ze svého účtu Google. +{count,plural, =1{{count} karta}few{{count} karty}many{{count} karty}other{{count} karet}} Nedávno zavřené Synchronizujte svá zařízení Vyhledat tento obrázek ve službě diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb index 96a949180c1af9..b18a14ab456a7d 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 @@ Handoff skal være aktiveret i afsnittet Generelt i Indstillinger, og dine enhed Administrer dine historier og din aktivitet her Tryk for at annullere. Acceptér og fortsæt +Vælg faner Konfigurationen er i gang... Den aktuelle webside er i inkognitotilstand Online @@ -782,6 +783,7 @@ Websites kan bruge cookies til at se din browseraktivitet på forskellige websit Få flere oplysninger Bogmærker Du bliver ikke logget ud af din Google-konto. +{count,plural, =1{{count} fane}one{{count} fane}other{{count} faner}} Senest lukkede Bevar synkroniseringen af dine enheder Søg på efter dette billede diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb index f321bf4c15d4b2..37c3ddc72e0d9f 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 @@ Ελέγξτε τις ειδήσεις και τη δραστηριότητά σας εδώ Πατήστε για ακύρωση. Αποδοχή και συνέχεια +Επιλογή καρτελών Ρύθμιση σε εξέλιξη… Ιστοσελίδα σε ανώνυμη περιήγηση Συνδεδεμένο @@ -783,6 +784,7 @@ Μάθετε περισσότερα Σελιδοδείκτες Δεν θα αποσυνδεθείτε από το Λογαριασμό σας Google. +{count,plural, =1{{count} καρτέλα}other{{count} καρτέλες}} Έκλεισαν πρόσφατα Διατηρήστε συγχρονισμένες τις συσκευές σας Αναζήτηση εικόνας σε 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 8a16e0d939a218..1542991b997847 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 @@ Handoff también debe estar habilitado en la sección General de la configuraci Controla tus noticias y actividad aquí Toca para cancelar. Aceptar y continuar +Seleccionar pestañas Configuración en curso… Pág. incógnito En línea @@ -782,6 +783,7 @@ También pueden usar cookies para ver la actividad de navegación en diferentes Más información Favoritos No saldrás de tu cuenta de Google. +{count,plural, =1{{count} pestaña}other{{count} pestañas}} Cerrado recientemente Mantén tus dispositivos sincronizados Buscar esta imagen en diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb index 59bbb4bc5c2169..6d9443e4f2ffd8 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 @@ Handoff también debe estar habilitado en la sección General de Configuración, Controla tus noticias y tu actividad aquí Toca para cancelar. Aceptar y continuar +Seleccionar pestañas Configuración en curso… Sitio actual en modo incógnito Online @@ -782,6 +783,7 @@ Los sitios pueden usar cookies para ver tu actividad de navegación en otros sit Más información Marcadores No se cerrará la sesión en tu cuenta de Google. +{count,plural, =1{{count} pestaña}other{{count} pestañas}} Cerrado recientemente Mantén tus dispositivos sincronizados Buscar esta imagen en diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb index 08d561f8225b17..4fae63f6a659a6 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 @@ Handoff peab olema lubatud seadete jaotises General ja seadmed peavad kasutama s Hallake oma lugusid ja tegevusi siin Tühistamiseks puudutage. Nõustu ja jätka +Valige vahelehed Seadistamine on pooleli ... Praegune veebileht on inkognito režiimis Onlain @@ -782,6 +783,7 @@ Saidid saavad küpsisefailide abil eri saitidel teie sirvimistegevust jälgida, Lisateave Järjehoidjad Teid ei logita teie Google'i kontolt välja. +{count,plural, =1{{count} vaheleht}other{{count} vahelehte}} Viimati suletud Hoidke oma seadmed sünkroonituna Otsi pilti teenusest diff --git a/ios/chrome/app/strings/resources/ios_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_strings_eu.xtb index c4b41aa0c0b114..62944d71ec4efb 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 @@ Ezarpena aldatzeko, berrezarri sinkronizazioaKontrolatu istorioak eta jarduerak hemen Sakatu bertan behera uzteko Onartu eta egin aurrera +Hautatu fitxak Konfigurazioa abian da… Web-orri hau ezkutuko moduan dago Konektatu @@ -782,6 +783,7 @@ Webguneek cookieak erabil ditzakete beste webguneetan egiten dituzun arakatze-ja Lortu informazio gehiago Laster-markak Ez da amaituko Google-ko kontuko saioa. +{count,plural, =1{{count} fitxa}other{{count} fitxa}} Itxitako azkenak Mantendu gailuak sinkronizatuta Bilatu irudia bilatzailean diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb index f7e410387bb7b5..98ec1988f46624 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 @@ Handoff باید در بخش عمومی تنظیمات نیز فعال شود و داستان‌ها و فعالیت خود را اینجا کنترل کنید برای لغو ضربه بزنید. پذیرش و ادامه +انتخاب برگه‌ها تنظیم در حال انجام است... صفحه وب کنونی در حالت ناشناس است آنلاین @@ -782,6 +783,7 @@ Handoff باید در بخش عمومی تنظیمات نیز فعال شود و بیشتر بدانید نشانک‌ها ‏از حساب Google خود خارج نمی‌شوید. +{count,plural, =1{{count} برگه}one{{count} برگه}other{{count} برگه}} اخیراً بسته‌شده دستگاه‌هایتان را همگام نگه دارید جستجوی برای این تصویر diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb index d674f557c95e7b..a1957885f84ad6 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 @@ Handoff täytyy ottaa käyttöön myös Asetusten Yleiset-osiossa. Lisäksi mole Muuta tarinoiden ja toiminnan asetuksia täällä Peru napauttamalla. Hyväksy ja jatka +Valitse välilehdet Synkronointia valmistellaan… Nykyinen verkkosivu on incognito-tilassa Online @@ -782,6 +783,7 @@ Sivustot voivat nähdä selaustoimintaasi eri sivustoilta evästeiden kautta esi Lue lisää Kirjanmerkit Sinua ei kirjata ulos Google-tililtäsi. +{count,plural, =1{{count} välilehti}other{{count} välilehteä}} Hiljattain suljetut Pidä laitteesi synkronoituina Hae kuvaa seuraavasta palvelusta: 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 4ed16a93ab3e26..ef639f032041ca 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 @@ La fonction de transfert doit également être activée dans la section Généra Gérez vos histoires et votre activité ici Appuyez pour annuler. Accepter et continuer +Sélectionner des onglets Configuration en cours... La page Web actuelle est ouverte en mode de navigation privée En ligne @@ -782,6 +783,7 @@ Les sites peuvent utiliser des témoins afin de voir votre activité de navigati En savoir plus Favoris Vous ne serez pas déconnecté(e) de votre compte Google. +{count,plural, =1{{count} onglet}one{{count} onglets}other{{count} onglets}} Éléments récemment fermés Synchroniser vos appareils Rechercher cette image avec diff --git a/ios/chrome/app/strings/resources/ios_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_strings_fr.xtb index 2930287b5ff269..fd5df006225dce 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 @@ Handoff doit également être activé dans la section "Général" des paramètre Contrôlez vos articles et votre activité via ce menu Appuyez sur l'écran pour annuler. Accepter et continuer +Sélectionner des onglets Configuration en cours… La page Web actuelle est en mode navigation privée En ligne @@ -783,6 +784,7 @@ Ils peuvent également s'en servir pour voir votre activité de navigation sur l En savoir plus Favoris Vous ne serez pas déconnecté de votre compte Google. +{count,plural, =1{{count} onglet}one{{count} onglet}other{{count} onglets}} Récemment fermés Synchroniser vos appareils Chercher cette image sur diff --git a/ios/chrome/app/strings/resources/ios_strings_gl.xtb b/ios/chrome/app/strings/resources/ios_strings_gl.xtb index 0f06e3f54d7c4e..8d1b2dae2e32b9 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 @@ Handoff tamén debe estar activado na sección Xeral da configuración e os teus Controla as túas historias e a túa actividade aquí Toca para cancelar. Aceptar e continuar +Seleccionar pestanas Configuración en curso… O sitio web actual está no modo de incógnito Online @@ -782,6 +783,7 @@ Tamén poden utilizalas para ver a túa actividade de navegación en varios siti Máis información Marcadores Non se pechará sesión na túa conta de Google. +{count,plural, =1{{count} pestana}other{{count} pestanas}} Pechados recentemente Mantén sincronizados os teus dispositivos Buscar esta imaxe en diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb index a42804fe7471a3..06ef56fa55541e 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 @@ Handoff को Settings के General अनुभाग में भी स अपनी खबरों और गतिविधि को यहां नियंत्रित करें रद्द करने के लिए टैप करें. स्वीकार करें और जारी रखें +टैब चुनें सेटअप प्रगति में है… मौजूदा वेबपेज गुप्त मोड में खोला गया है ऑनलाइन @@ -782,6 +783,7 @@ Handoff को Settings के General अनुभाग में भी स ज़्यादा जानें बुकमार्क आप अपने Google खाते से प्रस्थान नहीं करेंगे. +{count,plural, =1{{count} टैब}one{{count} टैब}other{{count} टैब}} हाल ही में बंद किए गए अपने डिवाइसों को सिंक करके रखें इस इमेज को पर खोजें diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb index 2d6317af177474..785f6ae47e9375 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 @@ Handoff mora biti omogućen i u odjeljku Općenito u Postavkama, a vaši uređaj Svojim pričama i aktivnostima upravljajte ovdje Dotaknite da biste otkazali. Prihvaćam, nastavi +Odaberite kartice Postavljanje je u tijeku… Stranica u anonimnom načinu Na mreži @@ -782,6 +783,7 @@ Web-lokacije mogu upotrebljavati kolačiće za uvid u vašu aktivnost pregledava Saznajte više Knjižne oznake Nećete se odjaviti s Google računa. +{count,plural, =1{{count} kartica}one{{count} kartica}few{{count} kartice}other{{count} kartica}} Nedavno zatvoreno Sinkronizacija uređaja Potraži sliku na usluzi diff --git a/ios/chrome/app/strings/resources/ios_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_strings_hu.xtb index 63b499747281d7..e2806efa806957 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 @@ Az Átadást engedélyezni kell a Beállítások általános részében is, és Itt kezelheti a híreket és a tevékenységeket Érintse meg a visszavonáshoz Elfogadás és folytatás +Lapok kiválasztása A telepítés folyamatban... Ez a weboldal inkognitó módban van megnyitva Online @@ -782,6 +783,7 @@ A webhelyek használhatnak cookie-kat arra, hogy megfigyeljék más webhelyekre További információ. Könyvjelzők A rendszer nem jelentkezteti ki Google-fiókjából. +{count,plural, =1{{count} lap}other{{count} lap}} Mostanában bezárt Biztosítsa, hogy eszközei szinkronban maradjanak Kép keresése a(z) segítségével diff --git a/ios/chrome/app/strings/resources/ios_strings_hy.xtb b/ios/chrome/app/strings/resources/ios_strings_hy.xtb index 15e7e0c3334076..2681fece8dd30e 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 @@ Handoff-ը պետք է միացված լինի նաև Կարգավորումնե Կառավարեք ձեր պատմություններն ու գործողություններն այստեղ Հպեք՝ չեղարկելու համար: Ընդունել և շարունակել +Ընտրեք ներդիրներ Կարգավորումն ընթացքի մեջ է… Ընթացիկ կայքէջը ինկոգնիտո ռեժիմում է բացված Առցանց @@ -782,6 +783,7 @@ Handoff-ը պետք է միացված լինի նաև Կարգավորումնե Իմանալ ավելին Էջանիշներ Դուք դուրս չեք գա ձեր Google հաշվից: +{count,plural, =1{{count} ներդիր}one{{count} ներդիր}other{{count} ներդիր}} Վերջին փակվածները Համաժամացրեք ձեր սարքերը Որոնել այս պատկերը -ում diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb index 4d241f049747c5..9c7098ad76b76b 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 @@ Handoff juga harus diaktifkan pada bagian General di Settings, dan perangkat And Kontrol artikel dan aktivitas Anda di sini Ketuk untuk membatalkan. Setujui dan Lanjutkan +Pilih Tab Penyiapan sedang berlangsung... Halaman Web saat ini sedang dalam Mode Samaran Online @@ -782,6 +783,7 @@ Situs dapat menggunakan cookie untuk melihat aktivitas penjelajahan Anda di berb Pelajari lebih lanjut Bookmark Anda tidak akan keluar dari Akun Google. +{count,plural, =1{{count} Tab}other{{count} Tab}} Baru Saja Ditutup Jaga Perangkat Anda Tetap Sinkron Telusuri Gambar Ini di diff --git a/ios/chrome/app/strings/resources/ios_strings_is.xtb b/ios/chrome/app/strings/resources/ios_strings_is.xtb index 5e458f20aac8bf..e251d55c739531 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 @@ Einnig þarf að vera kveikt á Handoff í hlutanum General í Settings og tæki Stjórnaðu sögunum þínum og virkni hér Ýttu til að hætta við. Samþykkja og halda áfram +Velja flipa Uppsetning fer fram… Opin vefsíða er í huliðsstillingu Á netinu @@ -782,6 +783,7 @@ Vefsvæði geta notað fótspor til að sjá vafranotkun þína á mismunandi ve Frekari upplýsingar Bókamerki Þú verður ekki skráð(ur) út af Google reikningnum þínum. +{count,plural, =1{{count} flipi}one{{count} flipi}other{{count} flipar}} Nýlega lokað Samstilltu öll tækin þín Leita að þessari mynd á diff --git a/ios/chrome/app/strings/resources/ios_strings_it.xtb b/ios/chrome/app/strings/resources/ios_strings_it.xtb index 386f1255f49b2c..69fb30e8eb43af 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 @@ La funzione Handoff deve anche essere attivata nella sezione Generali di Imposta Controlla notizie e attività qui Tocca per annullare. Accetta e continua +Seleziona schede Configurazione in corso… Pagina web corrente in incognito Online @@ -782,6 +783,7 @@ I siti possono utilizzare i cookie per conoscere la tua attività di navigazione Scopri di più Preferiti Non verrai disconnesso dal tuo Account Google. +{count,plural, =1{{count} scheda}other{{count} schede}} Chiusi di recente Mantieni sincronizzati i tuoi dispositivi Cerca questa immagine su diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb index 9848ab190dcc5b..b49670501bd918 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 @@ כאן אפשר לנהל את הסטוריז והפעילות שלך יש להקיש כדי לבטל. אישור והמשך +בחירת כרטיסיות ההגדרה מתבצעת… דף האינטרנט הנוכחי מוצג במצב אנונימי אונליין @@ -782,6 +783,7 @@ מידע נוסף סימניות ‏פעולה זו לא תוציא אותך מחשבון Google שלך. +{count,plural, =1{כרטיסייה אחת ({count})}two{{count} כרטיסיות}many{{count} כרטיסיות}other{{count} כרטיסיות}} נסגרו לאחרונה אפשר לסנכרן בין המכשירים חיפוש התמונה הזו ב- diff --git a/ios/chrome/app/strings/resources/ios_strings_ka.xtb b/ios/chrome/app/strings/resources/ios_strings_ka.xtb index 67025bb786188f..7baffe23e7d79f 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 @@ Handoff ასევე უნდა იყოს ჩართული პა აქ შეგიძლიათ მართოთ ამბები და აქტივობა შეეხეთ გასაუქმებლად. დათანხმება და გაგრძელება +აირჩიეთ ჩანართები მიმდინარეობს დაყენება… ამჟამად გახსნილი ვებგვერდი ინკოგნიტო რეჟიმშია ონლაინ @@ -782,6 +783,7 @@ Handoff ასევე უნდა იყოს ჩართული პა შეიტყვეთ მეტი სანიშნეები თქვენ არ გამოხვალთ თქვენი Google ანგარიშიდან. +{count,plural, =1{{count} ჩანართი}other{{count} ჩანართი}} ბოლოს დახურული შეინარჩუნეთ მოწყობილობები სინქრონიზებულ მდგომარეობაში ამ სურათის ძიება -ში diff --git a/ios/chrome/app/strings/resources/ios_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_strings_kk.xtb index 807b5dd68eb216..96a9ef063017d4 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 @@ Handoff функциясы параметрлердің жалпы бөлімі Жаңалықтар мен әрекеттерді осы жерде басқарыңыз. Болдырмау үшін түртіңіз. Қабылдап, жалғастыру +Қойындыларды таңдау Орнатылуда… Ағымдағы веб-бет инкогнито режимінде Онлайн @@ -782,6 +783,7 @@ Handoff функциясы параметрлердің жалпы бөлімі Толығырақ Бетбелгілер Google есептік жазбаңыздан шықпайсыз. +{count,plural, =1{{count} қойынды}other{{count} қойынды}} Жақында жабылған Құрылғыларыңызды синхрондаңыз Осы кескінді ішінен іздеу diff --git a/ios/chrome/app/strings/resources/ios_strings_km.xtb b/ios/chrome/app/strings/resources/ios_strings_km.xtb index e9a0ab0cab2852..e252e9e31bc1f5 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 @@ Handoff ត្រូវបើកដំណើរការនៅក្នុងផ គ្រប់គ្រង​អត្ថបទ និង​សកម្មភាព​របស់អ្នក​នៅទីនេះ ប៉ះដើម្បីបោះបង់ ទទួលយក និងបន្ត +ជ្រើសរើស​ផ្ទាំង ការដំឡើងកំពុងដំណើរការ… ទំព័របណ្ដាញ​បច្ចុប្បន្ន​ស្ថិតនៅក្នុងមុខងារឯកជន លើអ៊ីនធឺណិត @@ -782,6 +783,7 @@ Handoff ត្រូវបើកដំណើរការនៅក្នុងផ ស្វែងយល់បន្ថែម ចំណាំ អ្នកនឹងមិនត្រូវបាននាំចេញពីគណនី Google របស់អ្នកទេ។ +{count,plural, =1{ផ្ទាំង {count}}other{ផ្ទាំង {count}}} បានបិទកន្លងទៅថ្មីៗ បន្តឱ្យ​ឧបករណ៍​របស់អ្នក​ធ្វើសមកាលកម្ម ស្វែងរក​រួបភាពនេះ​នៅលើ diff --git a/ios/chrome/app/strings/resources/ios_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_strings_kn.xtb index d00ea59c0856a8..2345a5f8925af7 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 @@ ನಿಮ್ಮ ಕತೆಗಳು ಮತ್ತು ಚಟುವಟಿಕೆಯನ್ನು ಇಲ್ಲಿ ನಿರ್ವಹಿಸಿ ರದ್ದುಮಾಡಲು ಟ್ಯಾಪ್‌ ಮಾಡಿ ಸಮ್ಮತಿಸಿ ಮತ್ತು ಮುಂದುವರಿಯಿರಿ +ಟ್ಯಾಬ್‌ಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ ಸೆಟಪ್ ಪ್ರಗತಿಯಲ್ಲಿದೆ... ಪ್ರಸ್ತುತ ವೆಬ್ ಪುಟವು ಅಜ್ಞಾತ ಮೋಡ್‌ನಲ್ಲಿದೆ ಆನ್‌ಲೈನ್ @@ -782,6 +783,7 @@ ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳು ನಿಮ್ಮನ್ನು ನಿಮ್ಮ Google ಖಾತೆಯಿಂದ ಸೈನ್‌ ಔಟ್‌ ಮಾಡುವುದಿಲ್ಲ. +{count,plural, =1{{count} ಟ್ಯಾಬ್}one{{count} ಟ್ಯಾಬ್‌ಗಳು}other{{count} ಟ್ಯಾಬ್‌ಗಳು}} ಇತ್ತೀಚೆಗೆ ಮುಚ್ಚಿರುವುದು ನಿಮ್ಮ ಸಾಧನಗಳನ್ನು ಸಿಂಕ್‌ನಲ್ಲಿ ಇರಿಸಿ ಈ ಚಿತ್ರಕ್ಕಾಗಿ ನಲ್ಲಿ ಹುಡುಕಿ diff --git a/ios/chrome/app/strings/resources/ios_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_strings_ko.xtb index 78947be80d8ce8..741e4c6efe9372 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 @@ 여기에서 스토리 및 활동을 관리하세요. 취소하려면 탭하세요. 동의 및 계속 +탭 선택 설정 진행 중... 현재 시크릿 모드에서 웹페이지 사용 중 온라인 @@ -782,6 +783,7 @@ 자세히 알아보기 북마크 Google 계정에서 로그아웃되지 않습니다. +{count,plural, =1{탭 {count}개}other{탭 {count}개}} 최근에 닫은 탭 기기 동기화 상태 유지 에서 이 이미지 검색 diff --git a/ios/chrome/app/strings/resources/ios_strings_ky.xtb b/ios/chrome/app/strings/resources/ios_strings_ky.xtb index 6d23ccb110b669..d5d4e80018c939 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 @@ Handoff Жөндөөлөрдүн жалпы бөлүмүндө да иштети Окуяларыңызды жана аракеттериңизди бул жерден көзөмөлдөңүз Жокко чыгаруу үчүн таптаңыз. Кабыл алуу жана улантуу +Өтмөктөрдү тандоо Орнотулуп жатат… Учурдагы веб-баракча Жашыруун режимде Онлайн @@ -782,6 +783,7 @@ Handoff Жөндөөлөрдүн жалпы бөлүмүндө да иштети Кеңири маалымат Кыстармалар Google Каттоо эсебиңизден чыгарылбайсыз. +{count,plural, =1{{count} өтмөк}other{{count} өтмөк}} Жакында жабылган Түзмөктөрүңүздү шайкештириңиз Бул сүрөттү издөө каражатынан издөө diff --git a/ios/chrome/app/strings/resources/ios_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_strings_lo.xtb index 88461cba35fa89..188a9e21e40a1f 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 @@ Handoff ຍັງ​ຕ້ອງ​ໄດ້​ເປີດ​ໃຊ້​ງາ ຄວບຄຸມເລື່ອງລາວ ແລະ ການເຄື່ອນໄຫວຢູ່ບ່ອນນີ້ ແຕະ​ເພື່ອ​ຍົກ​ເລີກ. ຍອມຮັບ ແລະ ສືບຕໍ່ +ເລືອກແຖບ ກຳລັງດຳເນີນການຕັ້ງຄ່າ... ໜ້າເວັບປັດຈຸບັນຢູ່ໃນໂໝດບໍ່ເປີດເຜີຍຕົວຕົນ ອອນ​ລາຍ @@ -782,6 +783,7 @@ Handoff ຍັງ​ຕ້ອງ​ໄດ້​ເປີດ​ໃຊ້​ງາ ສຶກສາເພີ່ມເຕີມ ບຸກມາກ ທ່ານຈະບໍ່ຖືກນຳອອກຈາກລະບົບບັນຊີ Google ຂອງທ່ານ. +{count,plural, =1{{count} ແຖບ}other{{count} ແຖບ}} ປິດ​ບໍ່​ດົນ​ມາ​ນີ້ ຊິ້ງຂໍ້ມູນອຸປະກອນຂອງທ່ານສະເໝີ ຊອກຫາຮູບນີ້ໃນ diff --git a/ios/chrome/app/strings/resources/ios_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_strings_lt.xtb index 1fed90a5517b13..15b60f81156426 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 @@ Be to, reikia įgalinti „Handoff“ nustatymų skiltyje „Bendrieji“, o įr Čia galite valdyti savo pasakojimus ir veiklą Palieskite, jei norite atšaukti. Sutikti ir tęsti +Skirtukų pasirinkimas Nustatoma… Dabartinė svetainė atidaryta inkognito režimu Prisijungęs @@ -782,6 +783,7 @@ Svetainės gali naudoti slapukus, kad sužinotų apie naršymo veiklą skirtingo Sužinokite daugiau Žymės Nebūsite atjungti nuo „Google“ paskyros. +{count,plural, =1{{count} skirtukas}one{{count} skirtukas}few{{count} skirtukai}many{{count} skirtuko}other{{count} skirtukų}} Neseniai uždaryta Įrenginių sinchronizavimas Ieškoti „“ šio vaizdo diff --git a/ios/chrome/app/strings/resources/ios_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_strings_lv.xtb index 5d8f8c310bd252..d7e1a3ebe01787 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 @@ Funkcija Handoff ir jāiespējo arī iestatījumu sadaļā General (Vispārīgi) Šeit varat kontrolēt jums rādītos rakstus un darbības. Pieskarieties, lai atceltu. Piekrist un turpināt +Atlasiet cilnes Notiek iestatīšana... Šajā lapā esat inkognito Tiešsaistē @@ -782,6 +783,7 @@ Vietnes drīkst izmantot sīkfailus, lai skatītu jūsu pārlūkošanas darbība Uzzināt vairāk Grāmatzīmes Jūs netiksiet izrakstīts no sava Google konta. +{count,plural, =1{{count} cilne}zero{{count} ciļņu}one{{count} cilne}other{{count} cilnes}} Nesen aizvērtas Sinhronizējiet savas ierīces Meklēt šo attēlu ar diff --git a/ios/chrome/app/strings/resources/ios_strings_mk.xtb b/ios/chrome/app/strings/resources/ios_strings_mk.xtb index aedfe4c0695964..5f77429edc85c9 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 @@ Handoff мора да биде овозможен и во Општиот дел Контролирајте ги сториите и активноста тука Допри за откажување. Прифати и продолжи +Изберете картички Поставувањето е во тек… Веб-страницата е во режим инкогнито Онлајн @@ -782,6 +783,7 @@ Handoff мора да биде овозможен и во Општиот дел Дознајте повеќе Обележувачи Нема да ве одјавиме од сметката на Google. +{count,plural, =1{{count} картичка}one{{count} картичка}other{{count} картички}} Неодамна затворено Уредите нека ви бидат синхронизирани Пребарај за сликава diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb index 86098f59e8eb22..03b945ed7d5b90 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 @@ तुमच्या स्टोरी आणि अ‍ॅक्टिव्हिटी येथे नियंत्रित करा रद्द करण्यासाठी टॅप करा. स्वीकारा आणि पुढे सुरू ठेवा +टॅब निवडा सेटअप प्रगती पथावर आहे... सध्याचे वेबपेज गुप्त मोडमध्ये सुरू आहे ऑनलाइन @@ -784,6 +785,7 @@ अधिक जाणून घ्या Bookmarks तुम्हाला आपल्या Google खात्यामधून साइन आउट केले जाणार नाही. +{count,plural, =1{{count} टॅब}other{{count} टॅब}} अलीकडे बंद तुमची डिव्हाइस सिंकमध्ये ठेवा या इमेजसाठी शोधा diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb index 8b26fcfa3e9e39..d16f88afb97b7f 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 @@ Serah mestilah turut didayakan dalam bahagian Umum pada Tetapan dan peranti anda Kawal cerita dan aktiviti anda di sini Ketik untuk membatalkan. Terima dan Teruskan +Pilih Tab Persediaan sedang berjalan... Halaman web semasa dalam mod Inkognito Dalam talian @@ -782,6 +783,7 @@ Tapak boleh menggunakan kuki untuk melihat aktiviti penyemakan imbas anda merent Ketahui lebih lanjut Penanda buku Anda tidak akan dilog keluar daripada Akaun Google anda. +{count,plural, =1{{count} Tab}other{{count} Tab}} Ditutup Baru-baru Ini Pastikan Peranti Anda Segerak Cari Imej Ini di diff --git a/ios/chrome/app/strings/resources/ios_strings_my.xtb b/ios/chrome/app/strings/resources/ios_strings_my.xtb index 235360f01385bc..e1dca749a2979f 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 @@ Handoff ကို ဆက်တင်များ၏ ယေဘူယျအပိ သင့်သတင်းများနှင့် လုပ်ဆောင်ချက်ကို ဤနေရာတွင် ထိန်းချုပ်နိုင်သည် မလုပ်တော့ပါ ထိပါ လက်ခံပြီး ရှေ့ဆက်ရန် +တဘ်ရွေးပါ စဖွင့် သတ်မှတ်မှု လုပ်ကိုင်… လက်ရှိဝဘ်စာမျက်နှာကို ရုပ်ဖျက်မုဒ်တွင် ဖွင့်ထားသည် အွန်လိုင်း @@ -781,6 +782,7 @@ Handoff ကို ဆက်တင်များ၏ ယေဘူယျအပိ ပိုမိုလေ့လာရန် စာညှပ်များ Google အကောင့်မှ သင်ထွက်သွားမည် မဟုတ်ပါ။ +{count,plural, =1{တဘ် {count} ခု}other{တဘ် {count} ခု}} မကြာမီက ပိတ်ခဲ့ သင့်စက်များကို စင့်ခ်လုပ်ထားခြင်း ဤရုပ်ပုံကို တွင်ရှာရန် diff --git a/ios/chrome/app/strings/resources/ios_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_strings_nl.xtb index d1292043e0eda1..5029105b2dfee4 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 @@ Handoff moet ook aanstaan in het gedeelte Algemeen van Instellingen en je appara Beheer hier je artikelen en activiteiten Tik om te annuleren. Accepteren en verder +Tabbladen selecteren Instellen wordt uitgevoerd... De huidige webpagina is in de incognitomodus Online @@ -782,6 +783,7 @@ Sites mogen cookies gebruiken om je browse-activiteit op verschillende sites te Meer informatie Bookmarks Je wordt niet uitgelogd van je Google-account. +{count,plural, =1{{count} tabblad}other{{count} tabbladen}} Recent gesloten Je apparaten synchroniseren Zoeken op naar deze afbeelding diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb index d6fa732304389c..3547d4cefdf655 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 @@ Handoff må også være aktivert i Generelt-delen av Innstillinger, og enhetene Styr nyhetssakene dine og aktiviteten din her Trykk for å avbryte. Godta og fortsett +Velg faner Konfigurasjon pågår … Den gjeldende nettsiden er på inkognito Pålogget @@ -782,6 +783,7 @@ Nettsteder kan bruke informasjonskapsler til å se nettleseraktiviteten din på Finn ut mer Bokmerker Du blir ikke logget av Google-kontoen din. +{count,plural, =1{{count} fane}other{{count} faner}} Nylig lukket Hold enhetene dine synkronisert Søk etter dette bildet i diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb index 3e3d95fc0a75bb..35fc31f0968421 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 @@ Funkcja Handoff musi być też włączona w sekcji Ogólne w Ustawieniach, a urz Tutaj możesz zarządzać wyświetlanymi wiadomościami i aktywnością Kliknij, by anulować. Zaakceptuj i kontynuuj +Wybierz karty Trwa konfigurowanie… Bieżąca strona jest w trybie incognito Online @@ -780,6 +781,7 @@ Witryny mogą używać plików cookie do śledzenia Twojej aktywności związane Więcej informacji Zakładki Nie spowoduje to wylogowania z konta Google. +{count,plural, =1{{count} karta}few{{count} karty}many{{count} kart}other{{count} karty}} Ostatnio zamknięte Synchronizacja urządzeń Szukaj tego obrazu w:  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 d4b4fd5356ef5b..5d26784d51b69c 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 @@ A "Transição" também deve ser ativada na seção "Geral" das configurações. Controle suas matérias e atividade aqui Toque para cancelar. Aceitar e continuar +Selecionar guias Configuração em andamento... Esta pág. está no modo anônimo On-line @@ -782,6 +783,7 @@ Eles também podem usar cookies para ver sua atividade de navegação em diferen Saiba mais Favoritos Você não será desconectado da sua Conta do Google. +{count,plural, =1{{count} guia}one{{count} guia}other{{count} guias}} Fechadas recentemente Manter os dispositivos sincronizados Pesquisar esta imagem no 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 83e0f6466f9491..4d970530538370 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 @@ A Entrega também tem de estar ativada na secção Geral das Definições e os s Controle as suas notícias e atividade aqui. Toque para cancelar. Aceitar e continuar +Selecionar separadores Configuração em curso… Página Web atual – Nav. anónima Online @@ -782,6 +783,7 @@ Os sites podem utilizar cookies para ver a sua atividade de navegação em difer Saiba mais Marcadores A sessão na sua Conta Google não é terminada. +{count,plural, =1{{count} separador}other{{count} separadores}} Fechadas recentemente Mantenha os seus dispositivos sincronizados Pesquisar esta imagem no diff --git a/ios/chrome/app/strings/resources/ios_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_strings_ro.xtb index 0bafdb9de956bd..a638dea14f1488 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 @@ Trebuie să activezi Handoff în secțiunea General din Setări, iar dispozitive Gestionează subiectele și activitatea aici Atinge pentru a anula. Accept și continui +Selectează file Configurare în curs... Pagina web actuală este în modul Incognito Online @@ -782,6 +783,7 @@ Site-urile pot folosi cookie-uri pentru a vedea activitatea ta de navigare de pe Află mai multe Marcaje Nu vei fi deconectat(ă) de la Contul Google. +{count,plural, =1{{count} filă}few{{count} file}other{{count} de file}} Închise recent Menține dispozitivele sincronizate Caută această imagine cu diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb index daff92ee8a41f0..081aab9abeab32 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 @@ Управление рекомендациями Нажмите, чтобы отменить загрузку Принять и продолжить +Выберите вкладки Настройка… Открыто в режиме инкогнито Онлайн @@ -782,6 +783,7 @@ Подробнее… Закладки Вы останетесь в аккаунте Google. +{count,plural, =1{{count} вкладка}one{{count} вкладка}few{{count} вкладки}many{{count} вкладок}other{{count} вкладки}} Недавно закрытые Синхронизируйте устройства Найти это изображение в diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb index 0cfff7a0ccdbab..61237cc3753b87 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 @@ Funkciu Handoff musíte povoliť v nastaveniach v časti Všeobecné a vaše zar Tu ovládajte svoje príbehy aj aktivitu Sťahovanie zrušíte klepnutím. Súhlasiť a pokračovať +Výber kariet Inštaluje sa... Aktuálna webová stránka je v anonymnom režime Online @@ -782,6 +783,7 @@ Na základe súborov cookie si môžu zobraziť vašu históriu prehliadania v  Ďalšie informácie Záložky Neodhlásime vás z účtu Google. +{count,plural, =1{{count} karta}few{{count} karty}many{{count} Tabs}other{{count} kariet}} Nedávno zatvorené Udržiavajte svoje zariadenia synchronizované Hľadať tento obrázok v službe diff --git a/ios/chrome/app/strings/resources/ios_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_strings_sl.xtb index 426a37e1ed0f79..2e9409f6bf8878 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 @@ Handoff must also be enabled in the General section of Settings, and your device Nadzirajte članke in dejavnost tukaj Dotaknite se, da prekinete. Sprejmi in nadaljuj +Izbira zavihkov Poteka nastavitev … Trenutna spletna stran je v anonimnem načinu Dosegljiv @@ -782,6 +783,7 @@ Spletna mesta lahko uporabljajo piškotke za ogled dejavnosti brskanja na razli Več o tem Zaznamki Iz Google Računa ne boste odjavljeni. +{count,plural, =1{{count} zavihek}one{{count} zavihek}two{{count} zavihka}few{{count} zavihki}other{{count} zavihkov}} Nedavno zaprto Poskrbite za sinhroniziranost naprav Uporabi za iskanje te slike 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 2cc4988138d5c6..b0f839768832e3 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 @@ Handoff treba da se omogući u odeljku General (Opšte) u meniju Settings (Pode Ovde kontrolišite priče i aktivnosti Dodirnite da biste otkazali. Prihvatam, nastavi +Izaberite kartice Podešavanje je u toku... Aktuelna veb-stranica je u režimu bez arhiviranja Onlajn @@ -782,6 +783,7 @@ Sajtovi mogu da koriste kolačiće da bi videli vaše aktivnosti pregledanja na Saznajte više Obeleživači Nećemo vas odjaviti sa Google naloga. +{count,plural, =1{{count} kartica}one{{count} kartica}few{{count} kartice}other{{count} kartica}} Nedavno zatvoreno Sinhronizujte uređaje Pretraži ovu sliku u -u diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb index a3dc186cf36c53..c36a53ebf321a7 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 @@ Handoff треба да се омогући у одељку General (Опште) Овде контролишите приче и активности Додирните да бисте отказали. Прихватам, настави +Изаберите картице Подешавање је у току... Актуелна веб-страница је у режиму без архивирања Онлајн @@ -782,6 +783,7 @@ Handoff треба да се омогући у одељку General (Опште) Сазнајте више Обележивачи Нећемо вас одјавити са Google налога. +{count,plural, =1{{count} картица}one{{count} картица}few{{count} картице}other{{count} картица}} Недавно затворено Синхронизујте уређаје Претражи ову слику у diff --git a/ios/chrome/app/strings/resources/ios_strings_sv.xtb b/ios/chrome/app/strings/resources/ios_strings_sv.xtb index 770278fe77023f..726e240f69ee22 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 @@ Du måste även aktivera Handoff i avsnittet Allmänt i inställningarna och sam Styr dina berättelser och din aktivitet här Avbryt genom att trycka här. Godkänn och fortsätt +Välj flikar Konfigurationen pågår ... Webbsidan är i inkognitoläge Online @@ -782,6 +783,7 @@ Webbplatser får se din webbaktivitet på olika webbplatser med hjälp av cookie Läs mer Bokmärken Du loggas inte ut från Google-kontot. +{count,plural, =1{{count} flik}other{{count} flikar}} Nyligen stängda Håll dina enheter synkroniserade Sök på efter denna bild diff --git a/ios/chrome/app/strings/resources/ios_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_strings_sw.xtb index 92ebe5154aafef..e7229004d6e09a 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 @@ Lazima Handoff iwashwe pia katika sehemu ya Jumla ya Mipangilio, na lazima vifaa Dhibiti hadithi na shughuli zako hapa Gusa ili kughairi. Kubali na Uendelee +Chagua Vichupo Usanidi unaendelea... Ukurasa wa sasa wa Wavuti uko katika Hali Fiche Mtandaoni @@ -782,6 +783,7 @@ Tovuti zinaweza kutumia vidakuzi kuona shughuli zako za kuvinjari kwenye tovuti Pata maelezo zaidi Alamisho Hutaondolewa katika Akaunti yako ya Google. +{count,plural, =1{Kichupo {count}}other{Vichupo {count}}} Zilizofungwa Hivi Karibuni Hakikisha Vifaa Vyako Vinasawazishwa Tafuta Picha Hii kwenye diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb index 648362138d2e24..dc4952b56f607d 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 @@ సైట్ సమాచారం కాపీ చేసిన వచనం కోసం వెతకండి నా డేటాను కలపండి -చిరునామాలు +అడ్రస్‌లు పాస్‌వర్డ్‌లు డౌన్‌లోడ్ పూర్తయింది ఆసక్తులను మేనేజ్ చేయండి diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb index ac049d8d04b21d..78b56bf5b081dc 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 @@ ควบคุมเรื่องราวและกิจกรรมของคุณได้ที่นี่ แตะเพื่อยกเลิก ยอมรับและดำเนินการต่อ +เลือกแท็บ กำลังดำเนินการตั้งค่า… หน้าเว็บนี้อยู่ในโหมดไม่ระบุตัวตน ออนไลน์ @@ -782,6 +783,7 @@ ดูข้อมูลเพิ่มเติม บุ๊กมาร์ก คุณจะไม่ออกจากระบบบัญชี Google +{count,plural, =1{{count} แท็บ}other{{count} แท็บ}} เพิ่งปิด ซิงค์อุปกรณ์อยู่เสมอ ค้นหาภาพนี้ใน diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb index f6958efe2b0840..f6ba1477d60baa 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 @@ Handoff'un ayrıca, Ayarlar'ın Genel bölümünde de etkinleştirilmesi ve ciha Haberlerinizi ve aktivitenizi buradan yönetin İptal etmek için hafifçe vurun. Kabul Et ve Devam Et +Sekme Seçin Kurulum devam ediyor… Geçerli Web sayfası Gizli modda Çevrimiçi @@ -782,6 +783,7 @@ Siteler, örneğin reklamları kişiselleştirmek amacıyla farklı sitelerde ta Daha fazla bilgi Yer işaretleri Google Hesaplarınızdaki oturumlarınız kapatılmaz. +{count,plural, =1{{count} Sekme}other{{count} Sekme}} Son Kapatılan Cihazlarınızı Senkronize Durumda Tutun Bu Resmi Üzerinde Ara diff --git a/ios/chrome/app/strings/resources/ios_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_strings_uk.xtb index 38a196222b2271..e78408a06965dd 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 @@ Керуйте новинами й діями тут Торкніться, щоб скасувати. Прийняти та продовжити +Виберіть вкладки Виконується налаштування… Поточна сторінка в анонімному режимі Онлайн @@ -782,6 +783,7 @@ Докладніше Закладки Ви не вийдете з облікового запису Google. +{count,plural, =1{{count} вкладка}one{{count} вкладка}few{{count} вкладки}many{{count} вкладок}other{{count} вкладки}} Нещодавно закриті Синхронізуйте свої пристрої Пошук цього зображення в diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb index c99e0d21eb5ea5..0edf02c1d0c39b 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 @@ Dữ liệu của bạn đã được mã hóa bằng cụm mật khẩu đồng Kiểm soát tin bài và hoạt động của bạn tại đây Nhấn để hủy. Đồng ý và tiếp tục +Chọn các thẻ Đang thiết lập… Trang web hiện tại đang ở chế độ ẩn danh Trực tuyến @@ -782,6 +783,7 @@ Các trang web có thể dùng cookie để giám sát hoạt động duyệt we Tìm hiểu thêm Dấu trang Bạn sẽ không được đăng xuất khỏi Tài khoản Google của mình. +{count,plural, =1{{count} thẻ}other{{count} thẻ}} Các thẻ đã Đóng gần đây Đồng bộ hóa các thiết bị của bạn Tìm hình ảnh này trên 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 0484359571d296..dd326cf19654e9 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 @@ 在此处控制您的报道和活动 点按可取消。 接受并继续 +选择标签页 正在设置… 当前网页处于无痕模式 在线 @@ -782,6 +783,7 @@ 了解详情 书签 您不会因此而退出自己的 Google 帐号。 +{count,plural, =1{{count} 个标签页}other{{count} 个标签页}} 最近关闭的标签页 让您的各部设备保持同步 中搜索此图片 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 02dd9fac592069..aa5c298ab38455 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 @@ 請在這裡控管你的報導和活動 輕觸即可取消。 接受並繼續 +選取分頁 設定中… 目前的網頁處於無痕模式 線上 @@ -782,6 +783,7 @@ 瞭解詳情 書籤 您不會因此登出 Google 帳戶。 +{count,plural, =1{{count} 個分頁}other{{count} 個分頁}} 最近關閉的分頁 讓你的裝置保持同步 透過 搜尋這張圖片 diff --git a/ios/chrome/app/strings/resources/ios_strings_zu.xtb b/ios/chrome/app/strings/resources/ios_strings_zu.xtb index e55895b6d09b84..9515d8fdfb03f2 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 @@ I-Handoff futhi kufanele inikwe amandla esigabeni sokuvamile zezilungiselelo, fu Lawula izindaba nomsebenzi wakho lapha Thepha ukuze ukhansele. Yamukela futhi Uqhubeke +Khetha amathebhu Ukusetha kuyaqhubeka… Ikhasi lewebhu lamanje liku-Incognito Ku-inthanethi @@ -782,6 +783,7 @@ Amasayithi angasebenzisa amakhukhi ukubona umsebenzi wakho wokuphequlula kumasay Funda kabanzi Amabhukhimakhi Ngeke uze ukhishwe ngemvume ku-Akhawunti yakho ye-Google. +{count,plural, =1{Ithebhu engu-{count}}one{Amathebhu angu-{count}}other{Amathebhu angu-{count}}} Okuvalwe kamuva Gcina Amadivayisi Akho Ekuvumelaniseni Sesha i- yalesi sithombe diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_edit_view_controller.h b/ios/chrome/browser/ui/bookmarks/bookmark_edit_view_controller.h index cd99f65a4852cb..cd028269b79a67 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_edit_view_controller.h +++ b/ios/chrome/browser/ui/bookmarks/bookmark_edit_view_controller.h @@ -55,6 +55,9 @@ class BookmarkNode; browser:(Browser*)browser NS_DESIGNATED_INITIALIZER; - (instancetype)initWithStyle:(UITableViewStyle)style NS_UNAVAILABLE; +// Called before the instance is deallocated. +- (void)shutdown; + // Closes the edit view as if close button was pressed. - (void)dismiss; diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_edit_view_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_edit_view_controller.mm index 4e7e54268931e8..89cb7efbac68e3 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_edit_view_controller.mm +++ b/ios/chrome/browser/ui/bookmarks/bookmark_edit_view_controller.mm @@ -219,6 +219,10 @@ - (instancetype)initWithBookmark:(const BookmarkNode*)bookmark } - (void)dealloc { + [self shutdown]; +} + +- (void)shutdown { _folderViewController.delegate = nil; } diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_mediator.mm b/ios/chrome/browser/ui/bookmarks/bookmark_home_mediator.mm index 0934fac121ed87..e5d3d4a58dd694 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_home_mediator.mm +++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_mediator.mm @@ -120,6 +120,9 @@ - (void)startMediating { } - (void)disconnect { + [_bookmarkPromoController shutdown]; + _bookmarkPromoController = nil; + _modelBridge = nullptr; _syncedBookmarksObserver = nullptr; self.browserState = nullptr; diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.h b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.h index 965332dd804f34..16fe955296a175 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.h +++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.h @@ -49,6 +49,9 @@ class GURL; - (instancetype)initWithBrowser:(Browser*)browser NS_DESIGNATED_INITIALIZER; - (instancetype)initWithStyle:(UITableViewStyle)tableViewStyle NS_UNAVAILABLE; +// Called before the instance is deallocated. +- (void)shutdown; + // Setter to set _rootNode value. - (void)setRootNode:(const bookmarks::BookmarkNode*)rootNode; diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm index f40592fb89cca7..c50c21f25eacad 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm +++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm @@ -87,6 +87,10 @@ #include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util_mac.h" +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + using bookmarks::BookmarkNode; using l10n_util::GetNSString; @@ -238,10 +242,6 @@ @interface BookmarkHomeViewController () RemoveObserver(this); + if (model_) { + model_->RemoveObserver(this); + } } void BookmarkModelBridge::BookmarkModelLoaded(BookmarkModel* model, @@ -36,9 +37,9 @@ } void BookmarkModelBridge::BookmarkModelBeingDeleted(BookmarkModel* model) { - // This is an inconsistent state in the application lifecycle. The bookmark - // model shouldn't disappear. - NOTREACHED(); + DCHECK(model_); + model_->RemoveObserver(this); + model_ = nullptr; } void BookmarkModelBridge::BookmarkNodeMoved(BookmarkModel* model, diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_promo_controller.h b/ios/chrome/browser/ui/bookmarks/bookmark_promo_controller.h index 2a3ec20ccd3f2b..1746295912d76b 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_promo_controller.h +++ b/ios/chrome/browser/ui/bookmarks/bookmark_promo_controller.h @@ -42,6 +42,9 @@ class ChromeBrowserState; (id)delegate presenter:(id)presenter; +// Called before the instance is deallocated. +- (void)shutdown; + // Hides the promo cell. It won't be presented again on this profile. - (void)hidePromoCell; diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_promo_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_promo_controller.mm index b0bbfe56e0eda2..997fed0621dabc 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_promo_controller.mm +++ b/ios/chrome/browser/ui/bookmarks/bookmark_promo_controller.mm @@ -67,7 +67,14 @@ - (instancetype)initWithBrowserState:(ChromeBrowserState*)browserState } - (void)dealloc { + [self shutdown]; +} + +- (void)shutdown { [_signinPromoViewMediator signinPromoViewIsRemoved]; + _signinPromoViewMediator = nil; + + _identityManagerObserverBridge.reset(); } - (void)hidePromoCell { diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm index a9eba810cbc5eb..d3c959ff4ffa44 100644 --- a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm +++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm @@ -1375,6 +1375,9 @@ - (void)shutdown { } _fullscreenDisabler = nullptr; [[NSNotificationCenter defaultCenter] removeObserver:self]; + + [_bookmarkInteractionController shutdown]; + _bookmarkInteractionController = nil; } #pragma mark - NSObject diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 index 5072bb9d2b9f33..62ba4e572b243e 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 @@ -1 +1 @@ -0922ae42b0e78d9ebbcf20efa7d8fe38c1b77537 \ No newline at end of file +b165ec4bd7a5979a32893cd52ecd39e61cc65339 \ No newline at end of file diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 index d2db8a059fe6c0..f133e9bca0834b 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 @@ -1 +1 @@ -af4b9d94863deb39c97c908e28d826cab414f25e \ No newline at end of file +36f7829f239fab66d5af0bde8373c1c97186821f \ No newline at end of file diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1 index 43b35ac86acaf4..a0051aab4a1d3e 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1 @@ -1 +1 @@ -f86a5d873c9b09028636abe715c3e268dd04cc3c \ No newline at end of file +21c7a1e4734ce5005e50a4f07419bb693470d473 \ No newline at end of file diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1 index 9ff4743634d1dd..c468ff23ee8150 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1 @@ -1 +1 @@ -1ca63bc557cd10f136305ace705a0204e66bd84f \ No newline at end of file +165894cdafef013703fb57c6dca18ded340f5718 \ No newline at end of file diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 index 36867334146de0..05f1959b8fa287 100644 --- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 @@ -1 +1 @@ -c8e08b808e499fa8915a0911ab5444ba62834c59 \ No newline at end of file +0471019a3826bd272307ab625bf5bb3de791a8eb \ No newline at end of file diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 index caa81dd4191953..6e076187c23d8b 100644 --- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 @@ -1 +1 @@ -108b092f9a0f3e22565f030ef7931cbd8bf763d5 \ No newline at end of file +bcf5330f3f49eda35b79d1f397e97b280d4074ec \ No newline at end of file diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 index 9469144c86eda1..a2fd07bf96bc8b 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 @@ -1 +1 @@ -8b410ffbd936c68aec0016c62a6c4d6ca707ec10 \ No newline at end of file +ab01efc21b39b87bb64ae359b65ac97c68af8f04 \ No newline at end of file diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 index 38e6089054e3c3..4ae4442ccc725f 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 @@ -1 +1 @@ -03234f6d1e9d65e72af376880ef03017044d688a \ No newline at end of file +9be3d6042aa1ec76bebc57b2d1a8380abcd058d2 \ No newline at end of file diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 index b04b88312f3751..81df60e3682216 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 @@ -1 +1 @@ -4398877ea8a87b8bafffde620a60b8679b6ffcf0 \ No newline at end of file +975c899c4005d936f8734d84cdf0d3470658c282 \ No newline at end of file diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 index 302ae04d658015..f48b80ef278981 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 @@ -1 +1 @@ -9fb642fd85e02d4044396221433dd9fd416904ff \ No newline at end of file +9deb5535c74ff72c62913f93ee134338bbf3599c \ No newline at end of file diff --git a/ios/third_party/webkit/BUILD.gn b/ios/third_party/webkit/BUILD.gn index 75c27d7fd75ef7..7d9f967242046b 100644 --- a/ios/third_party/webkit/BUILD.gn +++ b/ios/third_party/webkit/BUILD.gn @@ -144,6 +144,14 @@ if (_build_mac_webkit) { "--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/remoting/resources/remoting_strings_eu.xtb b/remoting/resources/remoting_strings_eu.xtb index 3f9d53dde8f875..6aba458d6ba2bf 100644 --- a/remoting/resources/remoting_strings_eu.xtb +++ b/remoting/resources/remoting_strings_eu.xtb @@ -65,7 +65,7 @@ Baimen hori emateko, sakatu beheko "" botoia pantailare gisa hasi duzu saioa. Beharrezko osagai batzuk falta dira. Ziurtatu softwarearen azken bertsioa instalatuta daukazula eta saiatu berriro. Sarbide-kodea -Ostalaria hornitzeko funtzioa +Ostalaria hornitzeko zerbitzu-aplikazioa Chromoting ostalariaren desinstalatzailea Sarbide-kodeak ez du balio. Saiatu berriro. Zerbitzu-baldintzak diff --git a/services/audio/BUILD.gn b/services/audio/BUILD.gn index 2112adf11fb70b..840aee92d0f456 100644 --- a/services/audio/BUILD.gn +++ b/services/audio/BUILD.gn @@ -8,6 +8,8 @@ import("//testing/test.gni") 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 00000000000000..9dd995bf85e6eb --- /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 00000000000000..bb5f5e2a9c9a8a --- /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 56570ab9be15a7..905c60b932fda7 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 @@ float AveragePower(const media::AudioBus& buffer) { 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 @@ class InputController::AudioCallback 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 @@ std::unique_ptr InputController::Create( 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 @@ std::unique_ptr InputController::Create( // Create the InputController object and ensure that it runs on // the audio-manager thread. - std::unique_ptr controller( - new InputController(event_handler, sync_writer, user_input_monitor, - params, ParamsToStreamType(params))); + std::unique_ptr 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 @@ void InputController::Record() { audio_callback_ = std::make_unique(this); stream_->Start(audio_callback_.get()); + activity_monitor_->OnInputStreamActive(); return; } @@ -289,6 +294,7 @@ void InputController::Close() { // 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 4b48f344173482..a0f3b8de3e3dd0 100644 --- a/services/audio/input_controller.h +++ b/services/audio/input_controller.h @@ -33,6 +33,7 @@ class UserInputMonitor; } // 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 @@ class InputController final : public StreamMonitor { 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 @@ class InputController final : public StreamMonitor { InputController(EventHandler* handler, SyncWriter* sync_writer, media::UserInputMonitor* user_input_monitor, + InputStreamActivityMonitor* activity_monitor, const media::AudioParameters& params, StreamType type); @@ -252,6 +255,9 @@ class InputController final : public StreamMonitor { 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 b3333bf2211dff..a1a2d2ba9b856c 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 @@ class MockUserInputMonitor : public media::UserInputMonitor { 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 @@ class TimeSourceInputControllerTest : public ::testing::Test { 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 @@ class TimeSourceInputControllerTest : public ::testing::Test { MockInputControllerEventHandler event_handler_; MockSyncWriter sync_writer_; MockUserInputMonitor user_input_monitor_; + StrictMock mock_stream_activity_monitor_; media::AudioParameters params_; MockAudioInputStream stream_; base::test::ScopedFeatureList audio_processing_feature_; @@ -166,6 +177,8 @@ TEST_F(InputControllerTest, CreateAndCloseWithoutRecording) { // 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 @@ TEST_F(SystemTimeInputControllerTest, CreateRecordAndClose) { 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 0e4308bf6d2b3f..59440d5d048656 100644 --- a/services/audio/input_stream.cc +++ b/services/audio/input_stream.cc @@ -65,6 +65,7 @@ InputStream::InputStream( mojo::PendingRemote log, media::AudioManager* audio_manager, std::unique_ptr user_input_monitor, + InputStreamActivityMonitor* activity_monitor, const std::string& device_id, const media::AudioParameters& params, uint32_t shared_memory_count, @@ -86,6 +87,7 @@ InputStream::InputStream( &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 @@ InputStream::InputStream( 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 349ed147ce1030..cebb1d2c5c76f9 100644 --- a/services/audio/input_stream.h +++ b/services/audio/input_stream.h @@ -30,6 +30,7 @@ class AudioParameters; namespace audio { +class InputStreamActivityMonitor; class InputSyncWriter; class UserInputMonitor; @@ -51,6 +52,7 @@ class InputStream final : public media::mojom::AudioInputStream, mojo::PendingRemote log, media::AudioManager* manager, std::unique_ptr 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 a537d2d120d5e7..bf712c4a3df828 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 @@ void OutputController::ErrorStatisticsTracker::WedgeCheck() { } } -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 @@ OutputController::OutputController(media::AudioManager* audio_manager, TimeDelta::FromMilliseconds(kPowerMeasurementTimeConstantMillis)) { DCHECK(audio_manager); DCHECK(handler_); + DCHECK(activity_monitor_); DCHECK(sync_reader_); DCHECK(task_runner_.get()); } @@ -304,6 +309,15 @@ void OutputController::Play() { 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 @@ void OutputController::Pause() { 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 @@ void OutputController::Close() { 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 @@ void OutputController::LogAudioPowerLevel(const char* call_name) { 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 @@ void OutputController::StartMuting() { 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 @@ void OutputController::ToggleLocalOutput() { const bool restore_playback = (state_ == kPlaying); RecreateStream(RecreateReason::LOCAL_OUTPUT_TOGGLE); if (state_ == kCreated && restore_playback) - Play(); + StartStream(); } } @@ -619,7 +647,7 @@ void OutputController::OnDeviceChange() { // "Media.AudioOutputController.ChangeTime" which maybe is not desired? RecreateStreamWithTimingUMA(RecreateReason::DEVICE_CHANGE); if (state_ == kCreated && restore_playback) - Play(); + StartStream(); } std::pair OutputController::ReadCurrentPowerAndClip() { diff --git a/services/audio/output_controller.h b/services/audio/output_controller.h index 9da59e496734cf..11d1310c1b90ec 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 @@ class OutputController : public media::AudioOutputStream::AudioSourceCallback, // 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 @@ class OutputController : public media::AudioOutputStream::AudioSourceCallback, // 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 @@ class OutputController : public media::AudioOutputStream::AudioSourceCallback, // 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 @@ class OutputController : public media::AudioOutputStream::AudioSourceCallback, // 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 task_runner_; diff --git a/services/audio/output_controller_unittest.cc b/services/audio/output_controller_unittest.cc index e921938a5fc169..e4614e27354e1e 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 @@ class MockOutputControllerSyncReader : public OutputController::SyncReader { 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 @@ class OutputControllerTest : public ::testing::Test { ~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 @@ class OutputControllerTest : public ::testing::Test { loop.Run(); } + void PlayWhilePlaying() { controller_->Play(); } + void Pause() { base::RunLoop loop; EXPECT_CALL(mock_event_handler_, OnControllerPaused()) @@ -403,7 +418,9 @@ class OutputControllerTest : public ::testing::Test { 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 @@ class OutputControllerTest : public ::testing::Test { } StrictMock mock_event_handler_; + StrictMock mock_stream_activity_monitor_; private: base::TestMessageLoop message_loop_; @@ -484,12 +502,17 @@ TEST_F(OutputControllerTest, CreateAndClose) { } 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, PlayPauseClose) { } 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, PlayPausePlayClose) { } 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, PlayDeviceChangeClose) { } 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 @@ TEST_F(OutputControllerTest, MuteCreatePlayClose) { // 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 @@ TEST_F(OutputControllerTest, CreatePlayMuteClose) { // 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 @@ TEST_F(OutputControllerTest, PlayMuteUnmuteClose) { 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, PlayMuteUnmuteClose) { } TEST_F(OutputControllerTest, SnoopCreatePlayStopClose) { + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(1); + NiceMock snooper; StartSnooping(&snooper); Create(); @@ -608,6 +649,9 @@ TEST_F(OutputControllerTest, SnoopCreatePlayStopClose) { } TEST_F(OutputControllerTest, CreatePlaySnoopStopClose) { + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(1); + NiceMock snooper; Create(); Play(); @@ -618,6 +662,9 @@ TEST_F(OutputControllerTest, CreatePlaySnoopStopClose) { } TEST_F(OutputControllerTest, CreatePlaySnoopCloseStop) { + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(1); + NiceMock snooper; Create(); Play(); @@ -628,6 +675,9 @@ TEST_F(OutputControllerTest, CreatePlaySnoopCloseStop) { } TEST_F(OutputControllerTest, TwoSnoopers_StartAtDifferentTimes) { + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(1); + NiceMock snooper1; NiceMock snooper2; StartSnooping(&snooper1); @@ -644,6 +694,9 @@ TEST_F(OutputControllerTest, TwoSnoopers_StartAtDifferentTimes) { } TEST_F(OutputControllerTest, TwoSnoopers_StopAtDifferentTimes) { + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamActive()).Times(1); + EXPECT_CALL(mock_stream_activity_monitor_, OnOutputStreamInactive()).Times(1); + NiceMock snooper1; NiceMock snooper2; Create(); @@ -692,6 +745,9 @@ TEST_F(OutputControllerTest, SnoopWhileMuting) { } 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, FlushWhenStreamIsPlayingTriggersError) { } 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 @@ TEST_F(OutputControllerTest, FlushesWhenStreamIsNotPlaying) { 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 0a99fd4e8e7357..055f69d6b3cc0f 100644 --- a/services/audio/output_stream.cc +++ b/services/audio/output_stream.cc @@ -38,6 +38,7 @@ OutputStream::OutputStream( observer, mojo::PendingRemote log, media::AudioManager* audio_manager, + OutputStreamActivityMonitor* activity_monitor, const std::string& output_device_id, const media::AudioParameters& params, LoopbackCoordinator* coordinator, @@ -54,7 +55,12 @@ OutputStream::OutputStream( : 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 9058eb0c2e7186..efb3a2f23965bb 100644 --- a/services/audio/output_stream.h +++ b/services/audio/output_stream.h @@ -40,6 +40,7 @@ class AudioParameters; } // namespace media namespace audio { +class OutputStreamActivityMonitor; class OutputStream final : public media::mojom::AudioOutputStream, public OutputController::EventHandler { @@ -56,6 +57,7 @@ class OutputStream final : public media::mojom::AudioOutputStream, observer, mojo::PendingRemote 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 c811753360f0b1..0a4810f980fd3b 100644 --- a/services/audio/stream_factory.cc +++ b/services/audio/stream_factory.cc @@ -58,8 +58,9 @@ void StreamFactory::CreateInputStream( 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 @@ void StreamFactory::CreateOutputStream( output_streams_.insert(std::make_unique( 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 fccd05208b81af..37a373d234f267 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 @@ class StreamFactory final : public media::mojom::AudioStreamFactory { mojo::ReceiverSet receivers_; + ConcurrentStreamMetricReporter stream_count_metric_reporter_; + // Order of the following members is important for a clean shutdown. LoopbackCoordinator coordinator_; std::vector> muters_; diff --git a/services/device/public/mojom/wake_lock.mojom b/services/device/public/mojom/wake_lock.mojom index 18e1377f57269a..57b8eb13227594 100644 --- a/services/device/public/mojom/wake_lock.mojom +++ b/services/device/public/mojom/wake_lock.mojom @@ -4,6 +4,7 @@ module device.mojom; +[Stable, Extensible] enum WakeLockType { // Prevent the application from being suspended. On some platforms, apps may // be suspended when they are not visible to the user. This type of block @@ -24,6 +25,7 @@ enum WakeLockType { kPreventDisplaySleepAllowDimming = 2, }; +[Stable, Extensible] enum WakeLockReason { // Audio is being played. kAudioPlayback = 0, diff --git a/services/device/wake_lock/power_save_blocker/BUILD.gn b/services/device/wake_lock/power_save_blocker/BUILD.gn index 8ca1d4da121f8c..5bc4ea649e9733 100644 --- a/services/device/wake_lock/power_save_blocker/BUILD.gn +++ b/services/device/wake_lock/power_save_blocker/BUILD.gn @@ -12,6 +12,9 @@ if (is_android) { source_set("power_save_blocker") { visibility = [ + # Crosapi power API needs to directly use the Ash PowerBlocker . + "//chrome/browser/ash/crosapi", + # //remoting runs in a separate process which is outside of the context of # the ServiceManager-based world. Instead of embedding a Service Manager # environment and Device Service in it, we allow the power save blocker to @@ -36,13 +39,21 @@ source_set("power_save_blocker") { deps += [ ":jni_headers" ] public_deps += [ "//ui/android" ] } else if (is_chromeos_ash) { - sources += [ "power_save_blocker_chromeos.cc" ] + sources += [ "power_save_blocker_ash.cc" ] deps += [ "//chromeos/dbus/power", "//chromeos/dbus/power:power_manager_proto", ] } else if ((is_linux || is_chromeos) && use_dbus) { - sources += [ "power_save_blocker_linux.cc" ] + if (is_chromeos_lacros) { + sources += [ "power_save_blocker_lacros.cc" ] + deps += [ + "//chromeos/crosapi/mojom", + "//chromeos/lacros", + ] + } else { + sources += [ "power_save_blocker_linux.cc" ] + } deps += [ "//dbus", "//ui/gfx", diff --git a/services/device/wake_lock/power_save_blocker/power_save_blocker_chromeos.cc b/services/device/wake_lock/power_save_blocker/power_save_blocker_ash.cc similarity index 97% rename from services/device/wake_lock/power_save_blocker/power_save_blocker_chromeos.cc rename to services/device/wake_lock/power_save_blocker/power_save_blocker_ash.cc index 6be8cab21ef05f..f5c867badece0a 100644 --- a/services/device/wake_lock/power_save_blocker/power_save_blocker_chromeos.cc +++ b/services/device/wake_lock/power_save_blocker/power_save_blocker_ash.cc @@ -9,7 +9,6 @@ #include "base/bind.h" #include "base/check.h" #include "base/location.h" -#include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/notreached.h" #include "base/sequenced_task_runner.h" @@ -49,6 +48,9 @@ class PowerSaveBlocker::Delegate block_id_(0), ui_task_runner_(ui_task_runner) {} + Delegate(const Delegate&) = delete; + const Delegate& operator=(const Delegate&) = delete; + void ApplyBlock() { DCHECK(ui_task_runner_->RunsTasksInCurrentSequence()); if (!chromeos::PowerPolicyController::IsInitialized()) @@ -93,8 +95,6 @@ class PowerSaveBlocker::Delegate int block_id_; scoped_refptr ui_task_runner_; - - DISALLOW_COPY_AND_ASSIGN(Delegate); }; PowerSaveBlocker::PowerSaveBlocker( diff --git a/services/device/wake_lock/power_save_blocker/power_save_blocker_lacros.cc b/services/device/wake_lock/power_save_blocker/power_save_blocker_lacros.cc new file mode 100644 index 00000000000000..99cf56c7a993a9 --- /dev/null +++ b/services/device/wake_lock/power_save_blocker/power_save_blocker_lacros.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 "services/device/wake_lock/power_save_blocker/power_save_blocker.h" + +#include + +#include "base/memory/ref_counted.h" +#include "chromeos/crosapi/mojom/power.mojom.h" +#include "chromeos/lacros/lacros_service.h" +#include "mojo/public/cpp/bindings/receiver.h" + +namespace device { + +/******** PowerSaveBlocker::Delegate ********/ + +// Lacros-chrome PowerSaveBlocker uses ash-chrome ProwerSaveBlocker via crosapi. +// RAII style is maintained by keeping a crosapi::mojom::PowerWakeLock Mojo +// connection, whose disconnection triggers resource release in ash-chrome. + +class PowerSaveBlocker::Delegate + : public base::RefCountedThreadSafe { + public: + Delegate(mojom::WakeLockType type, + mojom::WakeLockReason reason, + const std::string& description, + scoped_refptr ui_task_runner) + : type_(type), + reason_(reason), + description_(description), + ui_task_runner_(ui_task_runner) {} + Delegate(const Delegate&) = delete; + Delegate& operator=(const Delegate&) = delete; + + void ApplyBlock() { + DCHECK(ui_task_runner_->RunsTasksInCurrentSequence()); + auto* lacros_service = chromeos::LacrosService::Get(); + if (lacros_service->IsAvailable()) { + lacros_service->GetRemote()->AddPowerSaveBlocker( + receiver_.BindNewPipeAndPassRemote(), type_, reason_, description_); + } + } + + void RemoveBlock() { + DCHECK(ui_task_runner_->RunsTasksInCurrentSequence()); + // Disconnect to make ash-chrome release its PowerSaveBlocker. + receiver_.reset(); + } + + private: + friend class base::RefCountedThreadSafe; + virtual ~Delegate() {} + + // Connection to ash-chrome via crosapi. Disconnection from RemoveBlock() or + // Lacros termination triggers resource release in ash-chrome. + crosapi::mojom::PowerWakeLock lock_; + mojo::Receiver receiver_{&lock_}; + + mojom::WakeLockType type_; + mojom::WakeLockReason reason_; + std::string description_; + scoped_refptr ui_task_runner_; +}; + +/******** PowerSaveBlocker ********/ + +PowerSaveBlocker::PowerSaveBlocker( + mojom::WakeLockType type, + mojom::WakeLockReason reason, + const std::string& description, + scoped_refptr ui_task_runner, + scoped_refptr blocking_task_runner) + : delegate_(base::MakeRefCounted(type, + reason, + description, + ui_task_runner)), + ui_task_runner_(ui_task_runner), + blocking_task_runner_(blocking_task_runner) { + ui_task_runner_->PostTask(FROM_HERE, + base::BindOnce(&Delegate::ApplyBlock, delegate_)); +} + +PowerSaveBlocker::~PowerSaveBlocker() { + ui_task_runner_->PostTask(FROM_HERE, + base::BindOnce(&Delegate::RemoveBlock, delegate_)); +} + +} // namespace device diff --git a/services/viz/privileged/mojom/compositing/display_private.mojom b/services/viz/privileged/mojom/compositing/display_private.mojom index 409115f95787e3..03ad7c39128fc4 100644 --- a/services/viz/privileged/mojom/compositing/display_private.mojom +++ b/services/viz/privileged/mojom/compositing/display_private.mojom @@ -22,7 +22,7 @@ interface DisplayPrivate { // 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/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 46b1d81c369649..8269ddfee08464 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": [ diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc index e6c5b184c0e7ad..f19febd1074fc4 100644 --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc @@ -33,20 +33,8 @@ const base::Feature kConversionMeasurement{"ConversionMeasurement", 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 4f97c5709cba09..307bbdc0a45e33 100644 --- a/third_party/blink/public/common/features.h +++ b/third_party/blink/public/common/features.h @@ -22,8 +22,6 @@ BLINK_COMMON_EXPORT extern const base::Feature kCOLRV1Fonts; BLINK_COMMON_EXPORT extern const base::Feature kCSSContainerQueries; 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; diff --git a/third_party/blink/public/mojom/background_sync/OWNERS b/third_party/blink/public/mojom/background_sync/OWNERS index 502de83d47110b..212d60ba302b53 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/renderer/bindings/generated_in_core.gni b/third_party/blink/renderer/bindings/generated_in_core.gni index efe9dbc32fd466..670831fedc519e 100644 --- a/third_party/blink/renderer/bindings/generated_in_core.gni +++ b/third_party/blink/renderer/bindings/generated_in_core.gni @@ -85,6 +85,10 @@ generated_dictionary_sources_in_core = [ "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_animation_playback_event_init.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_app_history_navigate_event_init.cc", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_app_history_navigate_event_init.h", + "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_app_history_navigate_options.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_app_history_navigate_options.h", + "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_app_history_navigation_options.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_app_history_navigation_options.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_application_cache_error_event_init.cc", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_application_cache_error_event_init.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_assigned_nodes_options.cc", @@ -115,6 +119,10 @@ generated_dictionary_sources_in_core = [ "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_custom_layout_constraints_options.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_document_timeline_options.cc", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_document_timeline_options.h", + "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_document_transition_prepare_options.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_document_transition_prepare_options.h", + "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_document_transition_start_options.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_document_transition_start_options.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_dom_matrix_2d_init.cc", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_dom_matrix_2d_init.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_dom_matrix_init.cc", @@ -177,8 +185,6 @@ generated_dictionary_sources_in_core = [ "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_image_data_settings.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_image_encode_options.cc", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_image_encode_options.h", - "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_impression_params.cc", - "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_impression_params.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_input_device_capabilities_init.cc", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_input_device_capabilities_init.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_input_event_init.cc", diff --git a/third_party/blink/renderer/bindings/generated_in_modules.gni b/third_party/blink/renderer/bindings/generated_in_modules.gni index 387be0798e19af..de24a1e063974f 100644 --- a/third_party/blink/renderer/bindings/generated_in_modules.gni +++ b/third_party/blink/renderer/bindings/generated_in_modules.gni @@ -111,6 +111,12 @@ generated_dictionary_sources_in_modules = [ "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_android_pay_method_data.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_app_banner_prompt_result.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_app_banner_prompt_result.h", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_auction_ad.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_auction_ad.h", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_auction_ad_config.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_auction_ad_config.h", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_auction_ad_interest_group.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_auction_ad_interest_group.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_audio_buffer_options.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_audio_buffer_options.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_audio_buffer_source_options.cc", @@ -131,6 +137,8 @@ generated_dictionary_sources_in_modules = [ "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_audio_encoder_config.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_audio_encoder_init.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_audio_encoder_init.h", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_audio_encoder_support.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_audio_encoder_support.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_audio_node_options.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_audio_node_options.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_audio_param_descriptor.cc", @@ -201,6 +209,12 @@ generated_dictionary_sources_in_modules = [ "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_canvas_filter_dictionary.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_canvas_rendering_context_2d_settings.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_canvas_rendering_context_2d_settings.h", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_capture_handle.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_capture_handle.h", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_capture_handle_change_event_init.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_capture_handle_change_event_init.h", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_capture_handle_config.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_capture_handle_config.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_channel_merger_options.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_channel_merger_options.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_channel_splitter_options.cc", @@ -389,6 +403,8 @@ generated_dictionary_sources_in_modules = [ "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_gpu_image_copy_texture.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_gpu_image_data_layout.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_gpu_image_data_layout.h", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_gpu_multisample_state.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_gpu_multisample_state.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_gpu_object_descriptor_base.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_gpu_object_descriptor_base.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_gpu_origin_2d_dict.cc", @@ -593,6 +609,10 @@ generated_dictionary_sources_in_modules = [ "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_midi_permission_descriptor.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_multi_cache_query_options.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_multi_cache_query_options.h", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_native_io_read_result.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_native_io_read_result.h", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_native_io_write_result.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_native_io_write_result.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_navigation_preload_state.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_navigation_preload_state.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_ndef_message_init.cc", @@ -683,6 +703,8 @@ generated_dictionary_sources_in_modules = [ "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_picture_in_picture_options.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_plane_init.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_plane_init.h", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_plane_layout.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_plane_layout.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_point_2d.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_point_2d.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_position_options.cc", @@ -717,8 +739,6 @@ generated_dictionary_sources_in_modules = [ "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_push_subscription_options_init.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_query_options.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_query_options.h", - "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_quic_transport_options.cc", - "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_quic_transport_options.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_registration_options.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_registration_options.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_related_application.cc", @@ -841,6 +861,8 @@ generated_dictionary_sources_in_modules = [ "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_stream_abort_info.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_sync_event_init.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_sync_event_init.h", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_task_priority_change_event_init.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_task_priority_change_event_init.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_text_decode_options.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_text_decode_options.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_text_decoder_options.cc", @@ -877,12 +899,18 @@ generated_dictionary_sources_in_modules = [ "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_video_encoder_encode_options.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_video_encoder_init.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_video_encoder_init.h", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_video_encoder_support.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_video_encoder_support.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_video_frame_init.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_video_frame_init.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_video_frame_metadata.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_video_frame_metadata.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_video_frame_plane_init.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_video_frame_plane_init.h", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_video_frame_read_into_options.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_video_frame_read_into_options.h", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_video_frame_region.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_video_frame_region.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_watch_advertisements_options.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_watch_advertisements_options.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_wave_shaper_options.cc", @@ -891,6 +919,8 @@ generated_dictionary_sources_in_modules = [ "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_web_id_request_options.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_web_transport_close_info.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_web_transport_close_info.h", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_web_transport_options.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_web_transport_options.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_webgl_context_attributes.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_webgl_context_attributes.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_webgl_context_event_init.cc", @@ -938,6 +968,8 @@ generated_dictionary_sources_in_modules = [ ] generated_enumeration_sources_in_modules = [ + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_alpha_option.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_alpha_option.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_app_banner_prompt_outcome.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_app_banner_prompt_outcome.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_append_mode.cc", @@ -1136,6 +1168,8 @@ generated_enumeration_sources_in_modules = [ "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_midi_port_device_state.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_midi_port_type.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_midi_port_type.h", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_mode.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_mode.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_notification_action_type.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_notification_action_type.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_notification_direction.cc", diff --git a/third_party/blink/renderer/core/clipboard/data_object.cc b/third_party/blink/renderer/core/clipboard/data_object.cc index 58d1c47df2c51e..ee6da6d30a9c9e 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 @@ DataObject* DataObject::CreateFromClipboard(SystemClipboard* system_clipboard, 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/css/properties/longhands/longhands_custom.cc b/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc index a5a0a99f143127..9a8b361f618e3a 100644 --- a/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc +++ b/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc @@ -1885,19 +1885,19 @@ const CSSValue* Contain::CSSValueFromComputedStyleInternal( return CSSIdentifierValue::Create(CSSValueID::kContent); CSSValueList* list = CSSValueList::CreateSpaceSeparated(); - if (style.ContainsSize()) { + if ((style.Contain() & kContainsSize) == kContainsSize) { list->Append(*CSSIdentifierValue::Create(CSSValueID::kSize)); } else { - if (style.ContainsInlineSize()) + if (style.Contain() & kContainsInlineSize) list->Append(*CSSIdentifierValue::Create(CSSValueID::kInlineSize)); - else if (style.ContainsBlockSize()) + else if (style.Contain() & kContainsBlockSize) list->Append(*CSSIdentifierValue::Create(CSSValueID::kBlockSize)); } - if (style.ContainsLayout()) + if (style.Contain() & kContainsLayout) list->Append(*CSSIdentifierValue::Create(CSSValueID::kLayout)); - if (style.ContainsStyle()) + if (style.Contain() & kContainsStyle) list->Append(*CSSIdentifierValue::Create(CSSValueID::kStyle)); - if (style.ContainsPaint()) + if (style.Contain() & kContainsPaint) list->Append(*CSSIdentifierValue::Create(CSSValueID::kPaint)); DCHECK(list->length()); return list; 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 3dacfcce543298..fda2ad0a77870b 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::Trace(Visitor* visitor) const { 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 @@ void UseCounterImpl::DidCommitLoad(const LocalFrame* frame) { 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 @@ void UseCounterImpl::NotifyFeatureCounted(WebFeature feature) { 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 @@ bool UseCounterImpl::ReportMeasurement(const UseCounterFeature& feature, return false; auto* client = frame->Client(); - switch (feature.type()) { - case mojom::blink::UseCounterFeatureType::kWebFeature: { - WebFeature web_feature = static_cast(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(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; + } + + // WebFeatures in non-default contexts are counted on renderer side. + if (feature.type() == mojom::blink::UseCounterFeatureType::kWebFeature) { + CountFeature(static_cast(feature.value())); + return true; } - client->DidObserveNewFeatureUsage(feature); - 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 c08488615e0ac1..70b081dd274a6f 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 @@ using WebFeature = mojom::WebFeature; class UseCounterImplTest : public testing::Test { public: - UseCounterImplTest() : dummy_(std::make_unique()) { + class DummyLocalFrameClient : public EmptyLocalFrameClient { + public: + DummyLocalFrameClient() = default; + const std::vector& observed_features() const { + return observed_features_; + } + + private: + void DidObserveNewFeatureUsage(const UseCounterFeature& feature) override { + observed_features_.push_back(feature); + } + std::vector observed_features_; + }; + + UseCounterImplTest() + : dummy_(std::make_unique( + /* initial_view_size= */ IntSize(), + /* chrome_client= */ nullptr, + /* local_frame_client= */ + MakeGarbageCollected())) { Page::InsertOrdinaryPageForTesting(&dummy_->GetPage()); } @@ -67,6 +87,43 @@ class UseCounterImplTest : public testing::Test { } }; +class UseCounterImplBrowserReportTest + : public UseCounterImplTest, + public ::testing::WithParamInterface {}; + +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( + 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/layout/layout_object.h b/third_party/blink/renderer/core/layout/layout_object.h index 4b7258fc44679c..5a194385c83457 100644 --- a/third_party/blink/renderer/core/layout/layout_object.h +++ b/third_party/blink/renderer/core/layout/layout_object.h @@ -618,13 +618,11 @@ class CORE_EXPORT LayoutObject : public ImageResourceObserver, } inline bool ShouldApplyInlineSizeContainment() const { NOT_DESTROYED(); - return (StyleRef().ContainsInlineSize() || StyleRef().ContainsSize()) && - IsEligibleForSizeContainment(); + return StyleRef().ContainsInlineSize() && IsEligibleForSizeContainment(); } inline bool ShouldApplyBlockSizeContainment() const { NOT_DESTROYED(); - return (StyleRef().ContainsBlockSize() || StyleRef().ContainsSize()) && - IsEligibleForSizeContainment(); + return StyleRef().ContainsBlockSize() && IsEligibleForSizeContainment(); } inline bool ShouldApplyStyleContainment() const { NOT_DESTROYED(); 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 24443c13b41098..1c7764a6f28712 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 @@ NGInlineBoxState::NGInlineBoxState(const NGInlineBoxState&& state) 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::InitializeFont(bool is_svg_text, 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 @@ NGInlineBoxState* NGInlineLayoutStateStack::OnBeginPlaceItems( // 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 @@ NGInlineBoxState* NGInlineLayoutStateStack::OnOpenTag( 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 @@ void NGInlineLayoutStateStack::AddBoxFragmentPlaceholder( 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 @@ void NGInlineLayoutStateStack::AddBoxFragmentPlaceholder( // 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 ba903efdb832b9..109ead58b0a3a9 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 @@ struct NGInlineBoxState { 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 @@ struct NGInlineBoxState { 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/origin_trials/origin_trial_context.cc b/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc index d1f3ee0cd9f7c4..b91d3f8f2de625 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 @@ void OriginTrialContext::AddForceEnabledTrials( 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 == "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 == "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 == "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/core/style/computed_style.h b/third_party/blink/renderer/core/style/computed_style.h index e137aa817569da..d9e8564a6f47c1 100644 --- a/third_party/blink/renderer/core/style/computed_style.h +++ b/third_party/blink/renderer/core/style/computed_style.h @@ -2040,14 +2040,34 @@ class ComputedStyle : public ComputedStyleBase, } // Contain utility functions. + // + // Containment can be enabled from a variety of sources, not just the + // 'contain' property itself. The return values represent whether or not + // we should enable containment of a given type, taking those different + // sources into account. + // + // Note that even with a return value of |true|, containment may still not + // be applied if the layout object is ineligible for the given containment + // type. See |LayoutObject::IsEligibleForSizeContainment| and similar + // functions. + bool ContainsPaint() const { return Contain() & kContainsPaint; } - bool ContainsStyle() const { return Contain() & kContainsStyle; } - bool ContainsLayout() const { return Contain() & kContainsLayout; } + bool ContainsStyle() const { + return (Contain() & kContainsStyle) || IsInlineOrBlockSizeContainer(); + } + bool ContainsLayout() const { + return (Contain() & kContainsLayout) || IsInlineOrBlockSizeContainer(); + } bool ContainsSize() const { - return (Contain() & kContainsSize) == kContainsSize; + return ((Contain() & kContainsSize) == kContainsSize) || + IsInlineAndBlockSizeContainer(); + } + bool ContainsInlineSize() const { + return (Contain() & kContainsInlineSize) || IsInlineSizeContainer(); + } + bool ContainsBlockSize() const { + return (Contain() & kContainsBlockSize) || IsBlockSizeContainer(); } - bool ContainsInlineSize() const { return Contain() & kContainsInlineSize; } - bool ContainsBlockSize() const { return Contain() & kContainsBlockSize; } // Display utility functions. bool IsDisplayReplacedType() const { @@ -2647,6 +2667,21 @@ class ComputedStyle : public ComputedStyleBase, EFloat Floating() const { return FloatingInternal(); } EResize Resize() const { return ResizeInternal(); } + bool IsInlineSizeContainer() const { + return ContainerType() & kContainerTypeInlineSize; + } + bool IsBlockSizeContainer() const { + return ContainerType() & kContainerTypeBlockSize; + } + bool IsInlineOrBlockSizeContainer() const { + return ContainerType() & + (kContainerTypeInlineSize | kContainerTypeBlockSize); + } + bool IsInlineAndBlockSizeContainer() const { + const unsigned both = (kContainerTypeInlineSize | kContainerTypeBlockSize); + return (ContainerType() & both) == both; + } + void SetInternalVisitedColor(const StyleColor& v) { SetInternalVisitedColorInternal(v); } 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 6cc4aab9868c66..086bb6fb55c1f5 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 blink { 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 @@ class BackgroundColorPaintWorkletProxyClient // 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 @@ class BackgroundColorPaintWorkletProxyClient } } } - 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/media_controls/resources/mediaControls.css b/third_party/blink/renderer/modules/media_controls/resources/mediaControls.css index e0782ff67943c7..f33684dd27e48d 100644 --- a/third_party/blink/renderer/modules/media_controls/resources/mediaControls.css +++ b/third_party/blink/renderer/modules/media_controls/resources/mediaControls.css @@ -1330,24 +1330,22 @@ video::-internal-media-controls-scrubbing-message { video::-internal-media-controls-text-track-list-kind-captions { -webkit-appearance: none; background-image: -internal-light-dark(-webkit-image-set(url(ic_closed_caption.svg) 1x), -webkit-image-set(url(ic_closed_caption_white.svg) 1x)); - background-size: 32px; + background-size: 18px; background-repeat: no-repeat; background-position: center center; - height: 20px; - width: 20px; - margin-left: 10px; + height: 18px; + width: 18px; vertical-align: middle; } video::-internal-media-controls-text-track-list-kind-subtitles { -webkit-appearance: none; background-image: -internal-light-dark(-webkit-image-set(url(ic_subtitles.svg) 1x), -webkit-image-set(url(ic_subtitles_white.svg) 1x)); - background-size: 32px; + background-size: 18px; background-repeat: no-repeat; background-position: center center; - height: 20px; - width: 20px; - margin-left: 10px; + height: 18px; + width: 18px; vertical-align: middle; } 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 0bf0c1fd9ecd83..d284b26908e209 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 @@ void LocalMediaStreamAudioSource::OnCaptureError( 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 5180df81abbe76..32f4dfc93d1fab 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 @@ void ProcessedLocalAudioSource::OnCaptureError( 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 0c98a5635112f4..1300f8abc7919c 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 @@ bool UserMediaProcessor::RemoveLocalSource(MediaStreamSource* source) { 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 e59d727f0b50a7..b5e333a5a643a2 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 @@ float FontMetrics::FloatAscentInternal(FontBaseline baseline_type) const { switch (baseline_type) { case kAlphabeticBaseline: NOTREACHED(); - return ascent_; + return float_ascent_; case kIdeographicBaseline: return FloatHeight() / 2; @@ -167,27 +167,27 @@ float FontMetrics::FloatAscentInternal(FontBaseline baseline_type) const { // 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 @@ int FontMetrics::IntAscentInternal(FontBaseline baseline_type) const { // TODO(layout-dev): Should refer to 'ideo' in OpenType. return Height(); case kXMiddleBaseline: - return ascent_int_ - static_cast(XHeight() / 2); + return int_ascent_ - static_cast(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 4ca53961ffe77b..f2506e84ac48a4 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 @@ class FontMetrics { 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 @@ class FontMetrics { 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(lroundf(ascent)); + float_ascent_ = ascent; + int_ascent_ = static_cast(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(lroundf(descent)); + float_descent_ = descent; + int_descent_ = static_cast(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 @@ class FontMetrics { // 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(lroundf(line_gap_)); } int LineSpacing() const { return static_cast(lroundf(line_spacing_)); } @@ -129,6 +129,10 @@ class FontMetrics { 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 @@ class FontMetrics { 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 @@ class FontMetrics { 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 underline_thickness_ = absl::nullopt; absl::optional 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 3472afb17878e1..cbfe7b887c70f1 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::StopAudioDeliveryTo(MediaStreamAudioTrack* track) { } } -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 40ca6019c6a2de..ce0ba7930856c6 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 @@ class PLATFORM_EXPORT MediaStreamAudioSource return absl::nullopt; } + absl::optional 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 @@ class PLATFORM_EXPORT MediaStreamAudioSource // 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 @@ class PLATFORM_EXPORT MediaStreamAudioSource 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 @@ class PLATFORM_EXPORT MediaStreamAudioSource // thread. const scoped_refptr task_runner_; + // Code set if this source was closed due to an error. + absl::optional error_code_; + // Provides weak pointers so that MediaStreamAudioTracks won't call // StopAudioDeliveryTo() if this instance dies first. base::WeakPtrFactory 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 ea4e277a5689fa..20b63a703f7d18 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/web_tests/android/WebLayerWPTOverrideExpectations b/third_party/blink/web_tests/android/WebLayerWPTOverrideExpectations index 3678852400054f..7a766ba3a669b2 100644 --- a/third_party/blink/web_tests/android/WebLayerWPTOverrideExpectations +++ b/third_party/blink/web_tests/android/WebLayerWPTOverrideExpectations @@ -1248,7 +1248,6 @@ crbug.com/1050754 external/wpt/native-io/write_capacity_allocation_async.tentati 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 ] 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 763d0967d9fe9c..a40e9e23adf532 100644 Binary files a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_svg_text/svg/W3C-SVG-1.1/text-align-05-b-expected.png and b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_svg_text/svg/W3C-SVG-1.1/text-align-05-b-expected.png 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 9c30993f9c4c21..1cf7ba3d0faf3d 100644 Binary files a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_svg_text/svg/batik/text/verticalText-expected.png and b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_svg_text/svg/batik/text/verticalText-expected.png 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 b32a4d7c332a80..202b229dc11f32 100644 Binary files a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_svg_text/svg/batik/text/verticalTextOnPath-expected.png and b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_svg_text/svg/batik/text/verticalTextOnPath-expected.png 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 1f69b6db02be92..40c83e1e71895d 100644 Binary files a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_svg_text/svg/batik/text/verticalTextOnPath-expected.png and b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_svg_text/svg/batik/text/verticalTextOnPath-expected.png 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 c302e29b298f3e..00000000000000 Binary files a/third_party/blink/web_tests/platform/win/virtual/layout_ng_svg_text/svg/W3C-SVG-1.1/text-align-05-b-expected.png and /dev/null 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 b823f3f8142fef..625163d4eeeaa1 100644 Binary files a/third_party/blink/web_tests/platform/win/virtual/layout_ng_svg_text/svg/batik/text/verticalText-expected.png and b/third_party/blink/web_tests/platform/win/virtual/layout_ng_svg_text/svg/batik/text/verticalText-expected.png 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 8ff13bd7fb7bd6..45c6ce60e9495e 100644 Binary files a/third_party/blink/web_tests/platform/win/virtual/layout_ng_svg_text/svg/batik/text/verticalTextOnPath-expected.png and b/third_party/blink/web_tests/platform/win/virtual/layout_ng_svg_text/svg/batik/text/verticalTextOnPath-expected.png differ diff --git a/third_party/blink/web_tests/wpt_internal/css/css-conditional/container-queries/container-type-containment.html b/third_party/blink/web_tests/wpt_internal/css/css-conditional/container-queries/container-type-containment.html new file mode 100644 index 00000000000000..e77abb676a1990 --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/css/css-conditional/container-queries/container-type-containment.html @@ -0,0 +1,103 @@ + + + + + +
+
+
+
+ + +
+ +
+
+
+
+ + +
+ +
+
A
+
A
+
+ + +
+ +
+
A
+
A
+
+ + +
+ +
+
A
+
+ + +
+ + +
+
+
+ +
+
+ +
+
+
+ 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 00000000000000..b4fc8525aa23fb --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/prerender/resources/download.html @@ -0,0 +1,49 @@ + + +here + 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 00000000000000..4ff0584ebf5402 --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/prerender/resources/message-boxes.html @@ -0,0 +1,34 @@ + + + + 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 00000000000000..2709127ba163aa --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/prerender/restriction-download.html @@ -0,0 +1,37 @@ + + + +Prerending is canceled upon the `download the hyperlink` algorithm + + + + + + + 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 00000000000000..106d8cd7fa4faa --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/prerender/restriction-message-boxes.html @@ -0,0 +1,53 @@ + + + + + + + + diff --git a/tools/mb/mb.py b/tools/mb/mb.py index e5bd2a3bf76151..f210d90925b79e 100755 --- a/tools/mb/mb.py +++ b/tools/mb/mb.py @@ -686,19 +686,11 @@ def _RunUnderSwarming(self, build_dir, target, isolate_cmd): # 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 b8929673243e45..dd4adb05235c34 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml @@ -64027,6 +64027,7 @@ Called by update_net_trust_anchors.py.--> + diff --git a/tools/metrics/histograms/histograms_xml/accessibility/histograms.xml b/tools/metrics/histograms/histograms_xml/accessibility/histograms.xml index 33e801fdb8ee37..515b658de4cc1b 100644 --- a/tools/metrics/histograms/histograms_xml/accessibility/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/accessibility/histograms.xml @@ -177,7 +177,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + enum="ChromeVoxGestureType" expires_after="2021-11-28"> dtseng@chromium.org chrome-a11y-core@google.com diff --git a/tools/metrics/histograms/histograms_xml/android/histograms.xml b/tools/metrics/histograms/histograms_xml/android/histograms.xml index 52052e57c448d4..056dc0b72e6585 100644 --- a/tools/metrics/histograms/histograms_xml/android/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/android/histograms.xml @@ -3295,7 +3295,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + units="ms" expires_after="2021-11-28"> changwan@chromium.org src/android_webview/OWNERS @@ -3305,7 +3305,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + units="ms" expires_after="2021-11-28"> changwan@chromium.org src/android_webview/OWNERS @@ -3317,7 +3317,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + units="ms" expires_after="2021-11-28"> changwan@chromium.org src/android_webview/OWNERS diff --git a/tools/metrics/histograms/histograms_xml/apps/histograms.xml b/tools/metrics/histograms/histograms_xml/apps/histograms.xml index 1223dda158fba6..78c42f928f91c3 100644 --- a/tools/metrics/histograms/histograms_xml/apps/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/apps/histograms.xml @@ -1174,7 +1174,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> napper@chromium.org robsc@chromium.org thanhdng@chromium.org diff --git a/tools/metrics/histograms/histograms_xml/arc/histograms.xml b/tools/metrics/histograms/histograms_xml/arc/histograms.xml index 9d7136c46b9b60..87ab959eb86f66 100644 --- a/tools/metrics/histograms/histograms_xml/arc/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/arc/histograms.xml @@ -1069,7 +1069,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> camurcu@google.com khmel@google.com @@ -1079,7 +1079,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> camurcu@google.com khmel@google.com diff --git a/tools/metrics/histograms/histograms_xml/ash/histograms.xml b/tools/metrics/histograms/histograms_xml/ash/histograms.xml index b89a7b12f01dfb..cf97e806373c19 100644 --- a/tools/metrics/histograms/histograms_xml/ash/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/ash/histograms.xml @@ -355,7 +355,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> afakhry@chromium.org gzadina@google.com @@ -367,7 +367,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> afakhry@chromium.org gzadina@google.com @@ -2011,7 +2011,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> xiyuan@chromium.org gzadina@google.com diff --git a/tools/metrics/histograms/histograms_xml/blink/histograms.xml b/tools/metrics/histograms/histograms_xml/blink/histograms.xml index 06ac1028f824ae..436280e7d59c30 100644 --- a/tools/metrics/histograms/histograms_xml/blink/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/blink/histograms.xml @@ -2645,7 +2645,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> @@ -2898,10 +2898,10 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. UseCounterPageLoadMetricsObserver.
- 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
diff --git a/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml b/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml index 6bd1a7b83bec34..9b4c6b94382006 100644 --- a/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml @@ -1417,6 +1417,9 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + + Removed in M93. + mpolzer@google.com managed-platforms@google.com diff --git a/tools/metrics/histograms/histograms_xml/gpu/histograms.xml b/tools/metrics/histograms/histograms_xml/gpu/histograms.xml index 07d4b69b770bfc..16c5ccb3044aec 100644 --- a/tools/metrics/histograms/histograms_xml/gpu/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/gpu/histograms.xml @@ -500,7 +500,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> magchen@chromium.org zmo@chromium.org diff --git a/tools/metrics/histograms/histograms_xml/holding_space/histograms.xml b/tools/metrics/histograms/histograms_xml/holding_space/histograms.xml index 2a1a89b5b36b9e..0d62831a95a8bb 100644 --- a/tools/metrics/histograms/histograms_xml/holding_space/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/holding_space/histograms.xml @@ -52,7 +52,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> dmblack@google.com gzadina@google.com @@ -76,7 +76,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + enum="HoldingSpaceDownloadsAction" expires_after="2021-11-28"> dmblack@google.com gzadina@google.com @@ -86,7 +86,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + enum="HoldingSpaceFilesAppChipAction" expires_after="2021-11-28"> dmblack@google.com gzadina@google.com @@ -96,7 +96,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> dmblack@google.com gzadina@google.com @@ -159,7 +159,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> dmblack@google.com gzadina@google.com @@ -179,7 +179,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> dmblack@google.com gzadina@google.com @@ -189,7 +189,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> dmblack@google.com gzadina@google.com diff --git a/tools/metrics/histograms/histograms_xml/ios/histograms.xml b/tools/metrics/histograms/histograms_xml/ios/histograms.xml index 37fa6cc98f8db1..3f2fabcef398d8 100644 --- a/tools/metrics/histograms/histograms_xml/ios/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/ios/histograms.xml @@ -1058,7 +1058,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. - + ajuma@chromium.org edchin@chromium.org @@ -1067,7 +1067,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. - + ajuma@chromium.org edchin@chromium.org diff --git a/tools/metrics/histograms/histograms_xml/media/histograms.xml b/tools/metrics/histograms/histograms_xml/media/histograms.xml index 80042d25268eac..8ae628e4c89eda 100644 --- a/tools/metrics/histograms/histograms_xml/media/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/media/histograms.xml @@ -562,6 +562,20 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + + saza@chromium.org + olka@chromium.org + + 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. + + + dalecurtis@chromium.org diff --git a/tools/metrics/histograms/histograms_xml/memory/histograms.xml b/tools/metrics/histograms/histograms_xml/memory/histograms.xml index 181137e7001e01..259060809c99c6 100644 --- a/tools/metrics/histograms/histograms_xml/memory/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/memory/histograms.xml @@ -1615,7 +1615,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + units="KB" expires_after="2021-11-28"> lizeb@chromium.org pasko@chromium.org diff --git a/tools/metrics/histograms/histograms_xml/net/histograms.xml b/tools/metrics/histograms/histograms_xml/net/histograms.xml index 87d3e77436444f..f6a5ff637c6cdb 100644 --- a/tools/metrics/histograms/histograms_xml/net/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/net/histograms.xml @@ -1248,7 +1248,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + units="ms" expires_after="2021-11-28"> ericorth@chromium.org doh-core@google.com @@ -5018,7 +5018,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> dschinazi@chromium.org src/net/OWNERS The type of SPDY Protocol error encountered. diff --git a/tools/metrics/histograms/histograms_xml/others/histograms.xml b/tools/metrics/histograms/histograms_xml/others/histograms.xml index 9270f71d9fcbf9..ce9656c5bce739 100644 --- a/tools/metrics/histograms/histograms_xml/others/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/others/histograms.xml @@ -781,7 +781,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + units="units" expires_after="2021-11-28"> cmp@chromium.org pwnall@chromium.org @@ -8346,7 +8346,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> xiyuan@chromium.org apotapchuk@chromium.org Tracks cryptohome failure during kiosk launch. @@ -12267,7 +12267,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> msramek@chromium.org sauski@google.com @@ -12278,7 +12278,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> msramek@chromium.org sauski@google.com @@ -12289,7 +12289,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> msramek@chromium.org sauski@google.com @@ -12300,7 +12300,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> msramek@chromium.org sauski@google.com @@ -12311,7 +12311,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> msramek@chromium.org sauski@google.com @@ -18690,7 +18690,7 @@ regressions. --> + expires_after="2021-11-28"> hajimehoshi@chromium.org kenjibaheux@chromium.org kouhei@chromium.org @@ -18714,7 +18714,7 @@ regressions. --> + expires_after="2022-01-15"> kenjibaheux@chromium.org ksakamoto@chromium.org @@ -18724,7 +18724,7 @@ regressions. --> + expires_after="2022-01-15"> kenjibaheux@chromium.org ksakamoto@chromium.org @@ -18734,7 +18734,7 @@ regressions. --> + expires_after="2022-01-15"> kenjibaheux@chromium.org ksakamoto@chromium.org @@ -18744,7 +18744,7 @@ regressions. --> + expires_after="2022-01-15"> kenjibaheux@chromium.org ksakamoto@chromium.org @@ -18754,7 +18754,7 @@ regressions. --> + expires_after="2022-01-15"> kenjibaheux@chromium.org ksakamoto@chromium.org @@ -18764,7 +18764,7 @@ regressions. --> + expires_after="2022-01-15"> kenjibaheux@chromium.org ksakamoto@chromium.org diff --git a/tools/metrics/histograms/histograms_xml/page/histograms.xml b/tools/metrics/histograms/histograms_xml/page/histograms.xml index ad3b3a1dc9019f..8eeb7213adad67 100644 --- a/tools/metrics/histograms/histograms_xml/page/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/page/histograms.xml @@ -611,7 +611,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + enum="PageLoadTimingUnderStat" expires_after="2021-11-28"> tbansal@chromium.org Records if the time from navigation to first contentful paint was less than @@ -639,7 +639,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + enum="PageLoadTimingUnderStat" expires_after="2021-11-28"> tbansal@chromium.org Records if the time from navigation to first contentful paint was less than diff --git a/tools/metrics/histograms/histograms_xml/platform/histograms.xml b/tools/metrics/histograms/histograms_xml/platform/histograms.xml index c35b55c8fce27c..072e727a077170 100644 --- a/tools/metrics/histograms/histograms_xml/platform/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/platform/histograms.xml @@ -213,7 +213,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> vbendeb@chromium.org apronin@chromium.org cros-hwsec+uma@chromium.org diff --git a/tools/metrics/histograms/histograms_xml/power/histograms.xml b/tools/metrics/histograms/histograms_xml/power/histograms.xml index 2e6d885b205a7f..9ea7f50ca13aef 100644 --- a/tools/metrics/histograms/histograms_xml/power/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/power/histograms.xml @@ -97,7 +97,7 @@ Also used in tools/metrics/histograms/histograms_xml/others/histograms.xml + expires_after="2021-11-28"> tbroch@chromium.org Chrome OS battery discharge rate in mW sampled every 30 seconds while the @@ -316,7 +316,7 @@ Also used in tools/metrics/histograms/histograms_xml/others/histograms.xml + expires_after="2021-11-28"> eseckler@chromium.org skyostil@chromium.org diff --git a/tools/metrics/histograms/histograms_xml/safe_browsing/histograms.xml b/tools/metrics/histograms/histograms_xml/safe_browsing/histograms.xml index 18aeea86d5225a..479ff77b880fdb 100644 --- a/tools/metrics/histograms/histograms_xml/safe_browsing/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/safe_browsing/histograms.xml @@ -1910,7 +1910,7 @@ and applied correctly. --> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2021-11-28"> vakh@chromium.org chrome-safebrowsing-alerts@google.com @@ -1935,7 +1935,7 @@ risk. --> + expires_after="2021-11-28"> vakh@chromium.org chrome-safebrowsing-alerts@google.com diff --git a/tools/metrics/histograms/histograms_xml/uma/histograms.xml b/tools/metrics/histograms/histograms_xml/uma/histograms.xml index ce5df7e7e2e914..fbb97843b005b6 100644 --- a/tools/metrics/histograms/histograms_xml/uma/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/uma/histograms.xml @@ -589,7 +589,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> rkaplow@chromium.org src/base/metrics/OWNERS diff --git a/tools/metrics/histograms/histograms_xml/web_rtc/histograms.xml b/tools/metrics/histograms/histograms_xml/web_rtc/histograms.xml index 8faceb4de33939..fe827bb3beed03 100644 --- a/tools/metrics/histograms/histograms_xml/web_rtc/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/web_rtc/histograms.xml @@ -804,7 +804,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> hlundin@chromium.org Measures the audible expand rate for an incoming WebRTC audio stream. The @@ -1803,7 +1803,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> perkj@chromium.org Durations of audio tracks received over a PeerConnection. The stopwatch @@ -1813,7 +1813,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> perkj@chromium.org Durations of video tracks received over a PeerConnection. The stopwatch @@ -1839,7 +1839,7 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. + expires_after="2021-11-28"> perkj@chromium.org Durations of audio tracks sent over a PeerConnection. The stopwatch starts diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json index 65870d38071d43..68b43781a06178 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": "5908e1b3ac1c0c11089af3576e84be429b556d93", + "remote_path": "perfetto_binaries/trace_processor_shell/linux/bb3b66d486694c9984e76d38e3bd7ca525edfee2/trace_processor_shell" } }, "power_profile.sql": { diff --git a/ui/base/clipboard/clipboard_mac.mm b/ui/base/clipboard/clipboard_mac.mm index 360a92aeef0962..77ecc9894e8b89 100644 --- a/ui/base/clipboard/clipboard_mac.mm +++ b/ui/base/clipboard/clipboard_mac.mm @@ -9,7 +9,6 @@ #include -#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 types([[GetPasteboard() types] retain]); @@ -493,22 +485,8 @@ // a blank image is better. base::scoped_nsobject 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 dfebf6daba0d47..2cf2dc1c431079 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 @@ bool ClipboardNonBacked::IsFormatAvailable( 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 963dbc4297f213..02dca6729b19b2 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 @@ TEST_F(ClipboardNonBackedTest, AdminWriteDoesNotRecordHistograms) { // 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(); diff --git a/ui/base/clipboard/clipboard_test_template.h b/ui/base/clipboard/clipboard_test_template.h index 8b4caf8a2dc7b6..9dc28830b916b8 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 @@ TYPED_TEST(ClipboardTest, BookmarkTest) { #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 67d0680f1db6c0..c2df77803f30ad 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 @@ void TrimAfterNull(StringType* result) { } 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 7c92a785ba407b..b183e7935ae229 100644 --- a/ui/base/ui_base_features.cc +++ b/ui/base/ui_base_features.cc @@ -32,11 +32,6 @@ const base::Feature kScreenPowerListenerForNativeWinOcclusion{ 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 a63d05580cd139..7e2ebc5d74bb6b 100644 --- a/ui/base/ui_base_features.h +++ b/ui/base/ui_base_features.h @@ -15,8 +15,6 @@ namespace features { // 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) diff --git a/ui/base/x/x11_clipboard_helper.cc b/ui/base/x/x11_clipboard_helper.cc index b04c0188354515..1d10ca88ec406d 100644 --- a/ui/base/x/x11_clipboard_helper.cc +++ b/ui/base/x/x11_clipboard_helper.cc @@ -223,11 +223,8 @@ std::vector XClipboardHelper::GetAvailableTypes( 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/BUILD.gn b/ui/ozone/platform/wayland/BUILD.gn index 40b71e72e90b9b..0368a75a264908 100644 --- a/ui/ozone/platform/wayland/BUILD.gn +++ b/ui/ozone/platform/wayland/BUILD.gn @@ -212,7 +212,6 @@ source_set("wayland") { "//ui/events/devices", "//ui/events/keycodes:xkb", "//ui/events/ozone", - "//ui/events/ozone/evdev", "//ui/events/ozone/layout", "//ui/events/platform", "//ui/gfx", diff --git a/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.cc b/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.cc index f334a2b27e0df3..12b8aa22fd60ea 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 @@ GbmPixmapWayland::GbmPixmapWayland(WaylandBufferManagerGpu* buffer_manager) 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 @@ bool GbmPixmapWayland::InitializeBuffer( (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 @@ bool GbmPixmapWayland::InitializeBuffer( << " 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 6bb1f674faede1..af9d927b34171e 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 @@ class GbmPixmapWayland : public gfx::NativePixmap { // |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 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 a2ca45477200b6..7d11962cf201ac 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 WaylandSurfaceFactory::CreateNativePixmap( scoped_refptr pixmap = base::MakeRefCounted(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 e29a5eb5a2e729..73dc4637872e1e 100644 --- a/ui/ozone/platform/wayland/host/wayland_screen.cc +++ b/ui/ozone/platform/wayland/host/wayland_screen.cc @@ -209,7 +209,7 @@ gfx::AcceleratedWidget WaylandScreen::GetAcceleratedWidgetAtScreenPoint( // 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 1bfb72e76109ec..3ff6033165c1f4 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, OutputPropertyChanges) { } TEST_P(WaylandScreenTest, GetAcceleratedWidgetAtScreenPoint) { + // Now, send enter event for the surface, which was created before. + wl::MockSurface* surface = server_.GetObject( + 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 @@ TEST_P(WaylandScreenTest, GetAcceleratedWidgetAtScreenPoint) { 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 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 @@ TEST_P(WaylandScreenTest, GetAcceleratedWidgetAtScreenPoint) { // 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 58bcf94a4b1e78..fc87907ca15fc1 100644 --- a/ui/ozone/platform/wayland/host/wayland_window.cc +++ b/ui/ozone/platform/wayland/host/wayland_window.cc @@ -264,6 +264,10 @@ gfx::Rect WaylandWindow::GetBounds() const { 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 deaa271864cee5..21dfcca559e05c 100644 --- a/ui/ozone/platform/wayland/host/wayland_window.h +++ b/ui/ozone/platform/wayland/host/wayland_window.h @@ -225,6 +225,9 @@ class WaylandWindow : public PlatformWindow, 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 a4ce7747c8f6f2..0281944759fcef 100644 --- a/weblayer/browser/content_browser_client_impl.cc +++ b/weblayer/browser/content_browser_client_impl.cc @@ -1129,6 +1129,14 @@ ContentBrowserClientImpl::CreateTtsEnvironmentAndroid() { return std::make_unique(); } +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 a45de63ce94f14..2ffb54e41b7704 100644 --- a/weblayer/browser/content_browser_client_impl.h +++ b/weblayer/browser/content_browser_client_impl.h @@ -201,6 +201,7 @@ class ContentBrowserClientImpl : public content::ContentBrowserClient { LoginAuthRequiredCallback auth_required_callback) override; std::unique_ptr 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 10020d717b8e83..2188a8a4072dc5 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 @@ permissions::PermissionManager::PermissionContextMap CreatePermissionContexts( std::make_unique(browser_context); permission_contexts[ContentSettingsType::BACKGROUND_SYNC] = std::make_unique(browser_context); + permission_contexts[ContentSettingsType::SENSORS] = + std::make_unique(browser_context); // For now, all requests are denied. As features are added, their permission // contexts can be added here instead of DeniedPermissionContext.