diff --git a/BUILD.gn b/BUILD.gn index 37b82afa..fa680949 100644 --- a/BUILD.gn +++ b/BUILD.gn
@@ -522,7 +522,8 @@ "//media/cast:generate_timecode_audio", "//net:crash_cache", "//net:dns_fuzz_stub", - "//net:net_watcher", # TODO(GYP): This should be conditional on use_v8_in_net + "//net:net_watcher", # TODO(GYP): This should be conditional on + # use_v8_in_net "//net:run_testserver", "//net:stress_cache", "//net:tld_cleanup",
diff --git a/DEPS b/DEPS index 0bf4caec..827f9c8 100644 --- a/DEPS +++ b/DEPS
@@ -177,11 +177,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': 'f76da63fbdfc9628d883033ea869455c9ac6d4e0', + 'skia_revision': 'f03c1160217296167d4132795f628231105f4002', # 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': 'e750f4502cc23cb621f8828e2818b4cdb0eef0ad', + 'v8_revision': '0a0715c4776f8c92cbc00a8b72b7f7fd51d3857e', # 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. @@ -189,15 +189,15 @@ # 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': 'f144b77bc8464e4ed84ace4f1f2af416ded05c4e', + 'angle_revision': '7488a096411581520ef858f1089a94234c048101', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. - 'swiftshader_revision': '34e16df059f8c69f0409e167b4d2e7ef59bf7b55', + 'swiftshader_revision': '153a537a3f87413ce262bf269d1ef1542e9a5186', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. - 'pdfium_revision': '32d4291f7a61f30f36863f1caff1a60965060679', + 'pdfium_revision': '3c63cf70e3b3388b0cbc6799d55c62dcb71b78ee', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling BoringSSL # and whatever else without interference from each other. @@ -240,7 +240,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': '315382afa6997df22fd1b8f6bf313df93e2acf92', + 'catapult_revision': '2e0a0cb9ad546be8c835e65d7537507cb7896e03', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -292,7 +292,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'spv_tools_revision': '1b3441036a8f178cb3b41c1aa222b652db522a88', + 'spv_tools_revision': '97f1d485b76303ea7094fa164c0cc770b79f6f78', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -339,7 +339,7 @@ # revisions. # GN CIPD package version. - 'gn_version': 'git_revision:83dad00afb232d7235dd70dff1ee90292d72a01e', + 'gn_version': 'git_revision:97cc440d84f050f99ff0161f9414bfa2ffa38f65', # Also, if you change these, update buildtools/DEPS too. Also update the # libc++ svn_revision in //buildtools/deps_revisions.gni. @@ -1494,7 +1494,7 @@ Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'ec18cc3262922e7dcdbe70243c6f40606f979144', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '260c788d77ca1501b327f03472825c46f18ced93', + Var('webrtc_git') + '/src.git' + '@' + '8c52e8a2efb022c58dd5069e231c6e67b701b3b0', 'src/third_party/libgifcodec': Var('skia_git') + '/libgifcodec' + '@'+ Var('libgifcodec_revision'), @@ -1564,7 +1564,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@f1dc5730d8ef50d3f8d52e3908c79d0b15507005', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@e6148d3266a24a8bcfd266179f3a185546662256', 'condition': 'checkout_src_internal', },
diff --git a/android_webview/browser/aw_autofill_client.cc b/android_webview/browser/aw_autofill_client.cc index b75922a..d085c4e 100644 --- a/android_webview/browser/aw_autofill_client.cc +++ b/android_webview/browser/aw_autofill_client.cc
@@ -226,6 +226,22 @@ // See crrev.com/18102002 if need to implement. } +base::span<const autofill::Suggestion> AwAutofillClient::GetPopupSuggestions() + const { + NOTIMPLEMENTED(); + return base::span<const autofill::Suggestion>(); +} + +void AwAutofillClient::PinPopupViewUntilUpdate() { + NOTIMPLEMENTED(); +} + +void AwAutofillClient::UpdatePopup( + const std::vector<autofill::Suggestion>& suggestions, + autofill::PopupType popup_type) { + NOTIMPLEMENTED(); +} + void AwAutofillClient::HideAutofillPopup(autofill::PopupHidingReason reason) { JNIEnv* env = AttachCurrentThread(); ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
diff --git a/android_webview/browser/aw_autofill_client.h b/android_webview/browser/aw_autofill_client.h index 9d04aff..58eea8d 100644 --- a/android_webview/browser/aw_autofill_client.h +++ b/android_webview/browser/aw_autofill_client.h
@@ -128,6 +128,10 @@ void UpdateAutofillPopupDataListValues( const std::vector<base::string16>& values, const std::vector<base::string16>& labels) override; + base::span<const autofill::Suggestion> GetPopupSuggestions() const override; + void PinPopupViewUntilUpdate() override; + void UpdatePopup(const std::vector<autofill::Suggestion>& suggestions, + autofill::PopupType popup_type) override; void HideAutofillPopup(autofill::PopupHidingReason reason) override; bool IsAutocompleteEnabled() override; void PropagateAutofillPredictions(
diff --git a/android_webview/java/strings/android_webview_strings.grd b/android_webview/java/strings/android_webview_strings.grd index 779ad49bb..d3d3af1 100644 --- a/android_webview/java/strings/android_webview_strings.grd +++ b/android_webview/java/strings/android_webview_strings.grd
@@ -78,6 +78,7 @@ <output filename="values-uz/android_webview_strings.xml" lang="uz" type="android" /> <output filename="values-vi/android_webview_strings.xml" lang="vi" type="android" /> <output filename="values-zh-rCN/android_webview_strings.xml" lang="zh-CN" type="android" /> + <output filename="values-zh-rHK/android_webview_strings.xml" lang="zh-HK" type="android" /> <output filename="values-zh-rTW/android_webview_strings.xml" lang="zh-TW" type="android" /> <output filename="values-zu/android_webview_strings.xml" lang="zu" type="android" /> </outputs>
diff --git a/android_webview/nonembedded/BUILD.gn b/android_webview/nonembedded/BUILD.gn index 0df90258..a69634b 100644 --- a/android_webview/nonembedded/BUILD.gn +++ b/android_webview/nonembedded/BUILD.gn
@@ -7,9 +7,7 @@ import("//build/config/android/rules.gni") generate_jni("nonembedded_jni_headers") { - sources = [ - "java/src/org/chromium/android_webview/nonembedded/WebViewApkApplication.java", - ] + sources = [ "java/src/org/chromium/android_webview/nonembedded/WebViewApkApplication.java" ] } # Contains classes needed by the webview apk, but not used when loading the apk @@ -94,9 +92,7 @@ } source_set("nonembedded") { - sources = [ - "webview_apk_application.cc", - ] + sources = [ "webview_apk_application.cc" ] deps = [ ":nonembedded_jni_headers", "//android_webview/common",
diff --git a/android_webview/ui/aw_strings.grd b/android_webview/ui/aw_strings.grd index 2b5e969a..ec5f93e 100644 --- a/android_webview/ui/aw_strings.grd +++ b/android_webview/ui/aw_strings.grd
@@ -83,6 +83,7 @@ <output filename="aw_strings_uz.pak" type="data_package" lang="uz" /> <output filename="aw_strings_vi.pak" type="data_package" lang="vi" /> <output filename="aw_strings_zh-CN.pak" type="data_package" lang="zh-CN" /> + <output filename="aw_strings_zh-HK.pak" type="data_package" lang="zh-HK" /> <output filename="aw_strings_zh-TW.pak" type="data_package" lang="zh-TW" /> <output filename="aw_strings_zu.pak" type="data_package" lang="zu" /> </outputs>
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index 27de5361..8abc1307 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -476,6 +476,8 @@ "login/ui/public_account_warning_dialog.h", "login/ui/scrollable_users_list_view.cc", "login/ui/scrollable_users_list_view.h", + "login/ui/system_label_button.cc", + "login/ui/system_label_button.h", "login/ui/user_switch_flip_animation.cc", "login/ui/user_switch_flip_animation.h", "login/ui/views_utils.cc", @@ -574,6 +576,8 @@ "shelf/assistant_overlay.h", "shelf/back_button.cc", "shelf/back_button.h", + "shelf/drag_handle.cc", + "shelf/drag_handle.h", "shelf/home_button.cc", "shelf/home_button.h", "shelf/home_button_controller.cc",
diff --git a/ash/keyboard/ui/BUILD.gn b/ash/keyboard/ui/BUILD.gn index 64b31a3..643ca26c 100644 --- a/ash/keyboard/ui/BUILD.gn +++ b/ash/keyboard/ui/BUILD.gn
@@ -75,9 +75,7 @@ deps += [ "//ui/ozone" ] } - data_deps = [ - ":resources", - ] + data_deps = [ ":resources" ] } static_library("test_support") { @@ -120,21 +118,13 @@ "inputview_gen_js=" + rebase_path(inputview_gen_js, root_build_dir), ] - deps = [ - ":inputview", - ] + deps = [ ":inputview" ] } copy("resources") { - sources = [ - "$target_gen_dir/keyboard_resources.pak", - ] - outputs = [ - "$root_out_dir/keyboard_resources.pak", - ] - public_deps = [ - ":resources_grit", - ] + sources = [ "$target_gen_dir/keyboard_resources.pak" ] + outputs = [ "$root_out_dir/keyboard_resources.pak" ] + public_deps = [ ":resources_grit" ] } build_closure("inputview") { @@ -179,9 +169,7 @@ "//ui/wm", ] - data_deps = [ - "//ui/resources:ui_test_pak_data", - ] + data_deps = [ "//ui/resources:ui_test_pak_data" ] if (use_ozone) { deps += [ "//ui/ozone" ]
diff --git a/ash/login/ui/bottom_status_indicator.h b/ash/login/ui/bottom_status_indicator.h index 61171b56..24cd08b 100644 --- a/ash/login/ui/bottom_status_indicator.h +++ b/ash/login/ui/bottom_status_indicator.h
@@ -22,6 +22,12 @@ class BottomStatusIndicator : public views::View { public: + enum class ContentType { + kNone, + kManagedDevice, + kAdbSideLoadingEnabled, + }; + BottomStatusIndicator(); BottomStatusIndicator(const BottomStatusIndicator&) = delete; @@ -32,9 +38,16 @@ void SetIcon(const gfx::VectorIcon& vector_icon, AshColorProvider::ContentLayerType type); + void set_content_type(ContentType content_type) { + content_type_ = content_type; + } + ContentType content_type() const { return content_type_; } + private: views::Label* label_ = nullptr; views::ImageView* icon_ = nullptr; + + ContentType content_type_ = ContentType::kNone; }; } // namespace ash
diff --git a/ash/login/ui/lock_contents_view.cc b/ash/login/ui/lock_contents_view.cc index 012e698..735c0ba 100644 --- a/ash/login/ui/lock_contents_view.cc +++ b/ash/login/ui/lock_contents_view.cc
@@ -26,6 +26,7 @@ #include "ash/login/ui/note_action_launch_button.h" #include "ash/login/ui/parent_access_widget.h" #include "ash/login/ui/scrollable_users_list_view.h" +#include "ash/login/ui/system_label_button.h" #include "ash/login/ui/views_utils.h" #include "ash/media/media_controller_impl.h" #include "ash/public/cpp/ash_features.h" @@ -107,18 +108,14 @@ constexpr int kHorizontalPaddingAuthErrorBubbleDp = 8; constexpr int kVerticalPaddingAuthErrorBubbleDp = 8; -// Spacing between the auth error text and the learn more button. -constexpr int kLearnMoreButtonVerticalSpacingDp = 6; - // Spacing between the bottom status indicator and the shelf. constexpr int kBottomStatusIndicatorBottomMarginDp = 16; // Spacing between icon and text in the bottom status indicator. constexpr int kBottomStatusIndicatorChildSpacingDp = 8; -// Blue-ish color for the "learn more" button text. -constexpr SkColor kLearnMoreButtonTextColor = - SkColorSetARGB(0xFF, 0x7B, 0xAA, 0xF7); +// Spacing between child of LoginBaseBubbleView. +constexpr int kBubbleBetweenChildSpacingDp = 16; constexpr char kLockContentsViewName[] = "LockContentsView"; constexpr char kAuthErrorContainerName[] = "AuthErrorContainer"; @@ -128,50 +125,6 @@ view->SetPreferredSize(gfx::Size(width, kNonEmptyHeightDp)); } -class AuthErrorLearnMoreButton : public views::Button, - public views::ButtonListener { - public: - explicit AuthErrorLearnMoreButton(LoginErrorBubble* parent_bubble) - : views::Button(this), parent_bubble_(parent_bubble) { - SetLayoutManager(std::make_unique<views::FillLayout>()); - auto* label = - new views::Label(l10n_util::GetStringUTF16(IDS_ASH_LEARN_MORE)); - label->SetAutoColorReadabilityEnabled(false); - label->SetHorizontalAlignment(gfx::ALIGN_LEFT); - label->SetEnabledColor(kLearnMoreButtonTextColor); - label->SetSubpixelRenderingEnabled(false); - const gfx::FontList& base_font_list = views::Label::GetDefaultFontList(); - label->SetFontList(base_font_list.Derive(0, gfx::Font::FontStyle::NORMAL, - gfx::Font::Weight::NORMAL)); - AddChildView(label); - - SetAccessibleName(l10n_util::GetStringUTF16(IDS_ASH_LEARN_MORE)); - } - - void ButtonPressed(Button* sender, const ui::Event& event) override { - Shell::Get()->login_screen_controller()->ShowAccountAccessHelpApp( - GetWidget()->GetNativeWindow()); - parent_bubble_->Hide(); - } - - private: - LoginErrorBubble* parent_bubble_; - - DISALLOW_COPY_AND_ASSIGN(AuthErrorLearnMoreButton); -}; - -class AuthErrorBubble : public LoginErrorBubble { - public: - AuthErrorBubble() = default; - - // ash::LoginBaseBubbleView - gfx::Point CalculatePosition() override { - return CalculatePositionUsingDefaultStrategy( - PositioningStrategy::kShowOnRightSideOrLeftSide, - kHorizontalPaddingAuthErrorBubbleDp, kVerticalPaddingAuthErrorBubbleDp); - } -}; - // Focuses the first or last focusable child of |root|. If |reverse| is false, // this focuses the first focusable child. If |reverse| is true, this focuses // the last focusable child. @@ -317,6 +270,26 @@ } // namespace +class LockContentsView::AuthErrorBubble : public LoginErrorBubble, + public views::ButtonListener { + public: + AuthErrorBubble() = default; + + // LoginErrorBubble: + gfx::Point CalculatePosition() override { + return CalculatePositionUsingDefaultStrategy( + PositioningStrategy::kShowOnRightSideOrLeftSide, + kHorizontalPaddingAuthErrorBubbleDp, kVerticalPaddingAuthErrorBubbleDp); + } + + // views::ButtonListener: + void ButtonPressed(views::Button* sender, const ui::Event& event) override { + Shell::Get()->login_screen_controller()->ShowAccountAccessHelpApp( + GetWidget()->GetNativeWindow()); + Hide(); + } +}; + class LockContentsView::AutoLoginUserActivityHandler : public ui::UserActivityObserver { public: @@ -620,7 +593,9 @@ ui::GetChromeOSDeviceName(), base::UTF8ToUTF16(entreprise_domain_name)), gfx::kGoogleGrey200); - bottom_status_indicator_->SetVisible(true); + bottom_status_indicator_->set_content_type( + BottomStatusIndicator::ContentType::kManagedDevice); + UpdateBottomStatusIndicatorVisibility(); } void LockContentsView::ShowAdbEnabled() { @@ -629,7 +604,9 @@ bottom_status_indicator_->SetText( l10n_util::GetStringUTF16(IDS_ASH_LOGIN_SCREEN_UNVERIFIED_CODE_WARNING), gfx::kGoogleRed300); - bottom_status_indicator_->SetVisible(true); + bottom_status_indicator_->set_content_type( + BottomStatusIndicator::ContentType::kAdbSideLoadingEnabled); + UpdateBottomStatusIndicatorVisibility(); } void LockContentsView::ShowSystemInfo() { @@ -1259,10 +1236,13 @@ void LockContentsView::OnOobeDialogStateChanged(OobeDialogState state) { oobe_dialog_visible_ = state != OobeDialogState::HIDDEN; + extension_ui_visible_ = state == OobeDialogState::EXTENSION_LOGIN; // Show either oobe dialog or lock screen. SetVisible(!oobe_dialog_visible_); + UpdateBottomStatusIndicatorVisibility(); + if (!oobe_dialog_visible_ && primary_big_view_) primary_big_view_->RequestFocus(); } @@ -1941,12 +1921,17 @@ MakeSectionBold(label, error_text, bold_start, bold_length); label->SetAutoColorReadabilityEnabled(false); - auto* learn_more_button = new AuthErrorLearnMoreButton(auth_error_bubble_); + auto* learn_more_button = new SystemLabelButton( + auth_error_bubble_, l10n_util::GetStringUTF16(IDS_ASH_LEARN_MORE), + SystemLabelButton::DisplayType::DEFAULT); auto* container = new NonAccessibleView(kAuthErrorContainerName); - container->SetLayoutManager(std::make_unique<views::BoxLayout>( - views::BoxLayout::Orientation::kVertical, gfx::Insets(), - kLearnMoreButtonVerticalSpacingDp)); + auto* container_layout = + container->SetLayoutManager(std::make_unique<views::BoxLayout>( + views::BoxLayout::Orientation::kVertical, gfx::Insets(), + kBubbleBetweenChildSpacingDp)); + container_layout->set_cross_axis_alignment( + views::BoxLayout::CrossAxisAlignment::kStart); container->AddChildView(label); container->AddChildView(learn_more_button); @@ -2184,4 +2169,14 @@ } } +void LockContentsView::UpdateBottomStatusIndicatorVisibility() { + bool visible = + bottom_status_indicator_->content_type() == + BottomStatusIndicator::ContentType::kAdbSideLoadingEnabled || + (bottom_status_indicator_->content_type() == + BottomStatusIndicator::ContentType::kManagedDevice && + !extension_ui_visible_); + bottom_status_indicator_->SetVisible(visible); +} + } // namespace ash
diff --git a/ash/login/ui/lock_contents_view.h b/ash/login/ui/lock_contents_view.h index e275f69..3ee96322f 100644 --- a/ash/login/ui/lock_contents_view.h +++ b/ash/login/ui/lock_contents_view.h
@@ -73,6 +73,8 @@ public KeyboardControllerObserver, public chromeos::PowerManagerClient::Observer { public: + class AuthErrorBubble; + // TestApi is used for tests to get internal implementation details. class ASH_EXPORT TestApi { public: @@ -376,6 +378,10 @@ // factors including policy settings, channel and Alt-V accelerator. bool GetSystemInfoVisibility() const; + // Toggles the visibility of the |bottom_status_indicator_| based on its + // content type and whether the extension UI window is opened. + void UpdateBottomStatusIndicatorVisibility(); + const LockScreen::ScreenType screen_type_; std::vector<UserState> users_; @@ -416,7 +422,7 @@ // All error bubbles and the tooltip view are child views of LockContentsView, // and will be torn down when LockContentsView is torn down. // Bubble for displaying authentication error. - LoginErrorBubble* auth_error_bubble_; + AuthErrorBubble* auth_error_bubble_; // Bubble for displaying detachable base errors. LoginErrorBubble* detachable_base_error_bubble_; // Bubble for displaying easy-unlock tooltips. @@ -429,6 +435,9 @@ // Bottom status indicator displaying entreprise domain or ADB enabled alert BottomStatusIndicator* bottom_status_indicator_; + // Tracks the visibility of the extension Ui window. + bool extension_ui_visible_ = false; + int unlock_attempt_ = 0; // Whether a lock screen app is currently active (i.e. lock screen note action
diff --git a/ash/login/ui/lock_contents_view_unittest.cc b/ash/login/ui/lock_contents_view_unittest.cc index d5d7e598..d5f6ce3 100644 --- a/ash/login/ui/lock_contents_view_unittest.cc +++ b/ash/login/ui/lock_contents_view_unittest.cc
@@ -811,6 +811,13 @@ false /*show*/, false /*enforced*/, "Best version ever", "Asset ID: 6666", "Bluetooth adapter", true /*adb_sideloading_enabled*/); EXPECT_TRUE(test_api.bottom_status_indicator()->GetVisible()); + + // bottom_status_indicator should always be visible when displaying ADB + // sideloading warning. + DataDispatcher()->NotifyOobeDialogState(OobeDialogState::EXTENSION_LOGIN); + EXPECT_TRUE(test_api.bottom_status_indicator()->GetVisible()); + DataDispatcher()->NotifyOobeDialogState(OobeDialogState::HIDDEN); + EXPECT_TRUE(test_api.bottom_status_indicator()->GetVisible()); } // Show bottom status indicator if device is enrolled @@ -829,6 +836,13 @@ LockContentsView::TestApi test_api(contents); EXPECT_TRUE(test_api.bottom_status_indicator()->GetVisible()); + + // bottom_status_indicator should not be visible when displaying enterprise + // domain and extension UI is visible. + DataDispatcher()->NotifyOobeDialogState(OobeDialogState::EXTENSION_LOGIN); + EXPECT_FALSE(test_api.bottom_status_indicator()->GetVisible()); + DataDispatcher()->NotifyOobeDialogState(OobeDialogState::HIDDEN); + EXPECT_TRUE(test_api.bottom_status_indicator()->GetVisible()); } // Verifies the easy unlock tooltip is automatically displayed when requested.
diff --git a/ash/login/ui/login_auth_user_view.cc b/ash/login/ui/login_auth_user_view.cc index 84d0f719..f7628f3 100644 --- a/ash/login/ui/login_auth_user_view.cc +++ b/ash/login/ui/login_auth_user_view.cc
@@ -20,6 +20,7 @@ #include "ash/login/ui/non_accessible_view.h" #include "ash/login/ui/parent_access_view.h" #include "ash/login/ui/pin_keyboard_animation.h" +#include "ash/login/ui/system_label_button.h" #include "ash/login/ui/views_utils.h" #include "ash/public/cpp/login_constants.h" #include "ash/resources/vector_icons/vector_icons.h" @@ -41,15 +42,12 @@ #include "ui/compositor/layer_animation_sequence.h" #include "ui/compositor/layer_animator.h" #include "ui/compositor/scoped_layer_animation_settings.h" -#include "ui/gfx/canvas.h" #include "ui/gfx/color_analysis.h" -#include "ui/gfx/color_palette.h" #include "ui/gfx/interpolated_transform.h" #include "ui/gfx/paint_vector_icon.h" #include "ui/gfx/vector_icon_types.h" #include "ui/views/background.h" #include "ui/views/border.h" -#include "ui/views/controls/button/label_button.h" #include "ui/views/controls/button/md_text_button.h" #include "ui/views/controls/highlight_path_generator.h" #include "ui/views/layout/box_layout.h" @@ -113,24 +111,6 @@ constexpr int kNonEmptyWidthDp = 1; -// The color of the required online sign-in message text. -constexpr SkColor kSystemButtonMessageColor = SK_ColorBLACK; -// The background color of the required online sign-in button. -constexpr SkColor kSystemButtonBackgroundColor = - SkColorSetA(gfx::kGoogleRed300, SK_AlphaOPAQUE); - -constexpr int kUserInfoBubbleWidth = 192; -constexpr int kUserInfoBubbleExternalPadding = 8; -constexpr int kSystemButtonIconSize = 20; -constexpr int kSystemButtonMarginTopBottomDp = 6; -constexpr int kSystemButtonMarginLeftRightDp = 16; -constexpr int kSystemButtonBorderRadius = 16; -constexpr int kSystemButtonImageLabelSpacing = 8; -constexpr int kSystemButtonMaxLabelWidthDp = - kUserInfoBubbleWidth - 2 * kUserInfoBubbleExternalPadding - - kSystemButtonIconSize - kSystemButtonImageLabelSpacing - - 2 * kSystemButtonBorderRadius; - // Returns an observer that will hide |view| when it fires. The observer will // delete itself after firing (by returning true). Make sure to call // |observer->SetActive()| after attaching it. @@ -194,69 +174,6 @@ DISALLOW_COPY_AND_ASSIGN(ClearPasswordAndHideAnimationObserver); }; -SkPath GetSystemButtonHighlightPath(const views::View* view) { - gfx::Rect rect(view->GetLocalBounds()); - return SkPath().addRoundRect(gfx::RectToSkRect(rect), - kSystemButtonBorderRadius, - kSystemButtonBorderRadius); -} - -class SystemButtonHighlightPathGenerator - : public views::HighlightPathGenerator { - public: - SystemButtonHighlightPathGenerator() = default; - SystemButtonHighlightPathGenerator( - const SystemButtonHighlightPathGenerator&) = delete; - SystemButtonHighlightPathGenerator& operator=( - const SystemButtonHighlightPathGenerator&) = delete; - - // views::HighlightPathGenerator: - SkPath GetHighlightPath(const views::View* view) override { - return GetSystemButtonHighlightPath(view); - } -}; - -class SystemButton : public views::LabelButton { - public: - SystemButton(views::ButtonListener* listener, const base::string16& text) - : LabelButton(listener, text) { - SetImageLabelSpacing(kSystemButtonImageLabelSpacing); - label()->SetMultiLine(true); - label()->SetMaximumWidth(kSystemButtonMaxLabelWidthDp); - label()->SetFontList( - gfx::FontList().DeriveWithWeight(gfx::Font::Weight::MEDIUM)); - SetPaintToLayer(); - layer()->SetFillsBoundsOpaquely(false); - SetImage(views::Button::STATE_NORMAL, - CreateVectorIcon(kLockScreenAlertIcon, kSystemButtonMessageColor)); - SetTextSubpixelRenderingEnabled(false); - SetTextColor(views::Button::STATE_NORMAL, kSystemButtonMessageColor); - SetTextColor(views::Button::STATE_HOVERED, kSystemButtonMessageColor); - SetTextColor(views::Button::STATE_PRESSED, kSystemButtonMessageColor); - views::HighlightPathGenerator::Install( - this, std::make_unique<SystemButtonHighlightPathGenerator>()); - } - - SystemButton(const SystemButton&) = delete; - SystemButton& operator=(const SystemButton&) = delete; - ~SystemButton() override = default; - - // views::LabelButton: - void PaintButtonContents(gfx::Canvas* canvas) override { - cc::PaintFlags flags; - flags.setAntiAlias(true); - flags.setColor(kSystemButtonBackgroundColor); - flags.setStyle(cc::PaintFlags::kFill_Style); - canvas->DrawPath(GetSystemButtonHighlightPath(this), flags); - } - - gfx::Insets GetInsets() const override { - return gfx::Insets( - kSystemButtonMarginTopBottomDp, kSystemButtonMarginLeftRightDp, - kSystemButtonMarginTopBottomDp, kSystemButtonMarginLeftRightDp); - } -}; - // The label shown below the fingerprint icon. class FingerprintLabel : public views::Label { public: @@ -852,8 +769,9 @@ callbacks.on_easy_unlock_icon_hovered, callbacks.on_easy_unlock_icon_tapped); - auto online_sign_in_message = std::make_unique<SystemButton>( - this, l10n_util::GetStringUTF16(IDS_ASH_LOGIN_SIGN_IN_REQUIRED_MESSAGE)); + auto online_sign_in_message = std::make_unique<SystemLabelButton>( + this, l10n_util::GetStringUTF16(IDS_ASH_LOGIN_SIGN_IN_REQUIRED_MESSAGE), + SystemLabelButton::DisplayType::ALERT_WITH_ICON); online_sign_in_message_ = online_sign_in_message.get(); auto disabled_auth_message = std::make_unique<DisabledAuthMessageView>();
diff --git a/ash/login/ui/login_base_bubble_view.cc b/ash/login/ui/login_base_bubble_view.cc index 14a12e04..53f6d84 100644 --- a/ash/login/ui/login_base_bubble_view.cc +++ b/ash/login/ui/login_base_bubble_view.cc
@@ -9,6 +9,7 @@ #include "ash/login/ui/views_utils.h" #include "ash/public/cpp/shell_window_ids.h" #include "ash/shell.h" +#include "ash/style/ash_color_provider.h" #include "base/scoped_observer.h" #include "ui/accessibility/ax_enums.mojom.h" #include "ui/aura/client/focus_change_observer.h" @@ -25,19 +26,22 @@ namespace { // Total width of the bubble view. -constexpr int kBubbleTotalWidthDp = 178; +constexpr int kBubbleTotalWidthDp = 192; // Horizontal margin of the bubble view. -constexpr int kBubbleHorizontalMarginDp = 14; +constexpr int kBubbleHorizontalMarginDp = 16; // Top margin of the bubble view. -constexpr int kBubbleTopMarginDp = 13; +constexpr int kBubbleTopMarginDp = 16; // Bottom margin of the bubble view. -constexpr int kBubbleBottomMarginDp = 18; +constexpr int kBubbleBottomMarginDp = 16; // Spacing between the child view inside the bubble view. -constexpr int kBubbleBetweenChildSpacingDp = 6; +constexpr int kBubbleBetweenChildSpacingDp = 16; + +// Border radius of the rounded bubble. +constexpr int kErrorBubbleBorderRadius = 8; // The amount of time for bubble show/hide animation. constexpr base::TimeDelta kBubbleAnimationDuration = @@ -123,17 +127,27 @@ aura::Window* parent_window) : anchor_view_(anchor_view), bubble_handler_(std::make_unique<LoginBubbleHandler>(this)) { - SetLayoutManager(std::make_unique<views::BoxLayout>( - views::BoxLayout::Orientation::kVertical, - gfx::Insets(kBubbleTopMarginDp, kBubbleHorizontalMarginDp, - kBubbleBottomMarginDp, kBubbleHorizontalMarginDp), - kBubbleBetweenChildSpacingDp)); + views::BoxLayout* layout_manager = + SetLayoutManager(std::make_unique<views::BoxLayout>( + views::BoxLayout::Orientation::kVertical, + gfx::Insets(kBubbleTopMarginDp, kBubbleHorizontalMarginDp, + kBubbleBottomMarginDp, kBubbleHorizontalMarginDp), + kBubbleBetweenChildSpacingDp)); + layout_manager->set_cross_axis_alignment( + views::BoxLayout::CrossAxisAlignment::kStart); SetVisible(false); - SetBackground(views::CreateSolidBackground(SK_ColorBLACK)); // Layer rendering is needed for animation. SetPaintToLayer(); + SkColor background_color = AshColorProvider::Get()->GetBaseLayerColor( + AshColorProvider::BaseLayerType::kTransparent74, + AshColorProvider::AshColorMode::kDark); + layer()->SetBackgroundBlur( + static_cast<float>(AshColorProvider::LayerBlurSigma::kBlurDefault)); + SetBackground(views::CreateRoundedRectBackground(background_color, + kErrorBubbleBorderRadius)); + layer()->SetFillsBoundsOpaquely(false); } LoginBaseBubbleView::~LoginBaseBubbleView() = default;
diff --git a/ash/login/ui/login_base_bubble_view_unittest.cc b/ash/login/ui/login_base_bubble_view_unittest.cc index 4e85673..22b9a06 100644 --- a/ash/login/ui/login_base_bubble_view_unittest.cc +++ b/ash/login/ui/login_base_bubble_view_unittest.cc
@@ -4,6 +4,7 @@ #include "ash/login/ui/login_base_bubble_view.h" #include "ash/login/ui/login_test_base.h" +#include "ash/style/ash_color_provider.h" #include "base/strings/utf_string_conversions.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/events/test/event_generator.h" @@ -14,7 +15,7 @@ namespace { // Total width of the bubble view. -constexpr int kBubbleTotalWidthDp = 178; +constexpr int kBubbleTotalWidthDp = 192; } // namespace class LoginBaseBubbleViewTest : public LoginTestBase { @@ -61,7 +62,10 @@ EXPECT_TRUE(bubble_->GetVisible()); EXPECT_EQ(bubble_->width(), kBubbleTotalWidthDp); - EXPECT_EQ(bubble_->background()->get_color(), SK_ColorBLACK); + SkColor background_color = AshColorProvider::Get()->GetBaseLayerColor( + AshColorProvider::BaseLayerType::kTransparent74, + AshColorProvider::AshColorMode::kDark); + EXPECT_EQ(bubble_->background()->get_color(), background_color); bubble_->Hide(); EXPECT_FALSE(bubble_->GetVisible());
diff --git a/ash/login/ui/login_error_bubble.cc b/ash/login/ui/login_error_bubble.cc index ebc0734..fbd5dcb1 100644 --- a/ash/login/ui/login_error_bubble.cc +++ b/ash/login/ui/login_error_bubble.cc
@@ -32,15 +32,11 @@ views::View* anchor_view, bool is_persistent) : LoginBaseBubbleView(anchor_view), is_persistent_(is_persistent) { - auto* alert_view = new NonAccessibleView("AlertIconContainer"); - alert_view->SetLayoutManager(std::make_unique<views::BoxLayout>( - views::BoxLayout::Orientation::kHorizontal)); views::ImageView* alert_icon = new views::ImageView(); alert_icon->SetPreferredSize(gfx::Size(kAlertIconSizeDp, kAlertIconSizeDp)); alert_icon->SetImage( gfx::CreateVectorIcon(kLockScreenAlertIcon, SK_ColorWHITE)); - alert_view->AddChildView(alert_icon); - AddChildView(alert_view); + AddChildView(alert_icon); if (content) { content_ = content; @@ -70,16 +66,6 @@ is_persistent_ = persistent; } -gfx::Size LoginErrorBubble::CalculatePreferredSize() const { - gfx::Size size; - - if (GetAnchorView()) - size.set_width(GetAnchorView()->width()); - - size.set_height(GetHeightForWidth(size.width())); - return size; -} - const char* LoginErrorBubble::GetClassName() const { return "LoginErrorBubble"; }
diff --git a/ash/login/ui/login_error_bubble.h b/ash/login/ui/login_error_bubble.h index 0b42a33..0392edd 100644 --- a/ash/login/ui/login_error_bubble.h +++ b/ash/login/ui/login_error_bubble.h
@@ -32,7 +32,6 @@ void SetPersistent(bool persistent) override; // views::View: - gfx::Size CalculatePreferredSize() const override; const char* GetClassName() const override; void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
diff --git a/ash/login/ui/login_expanded_public_account_view.cc b/ash/login/ui/login_expanded_public_account_view.cc index 3a6512a..746de0f 100644 --- a/ash/login/ui/login_expanded_public_account_view.cc +++ b/ash/login/ui/login_expanded_public_account_view.cc
@@ -39,13 +39,13 @@ constexpr const char kLoginExpandedPublicAccountViewClassName[] = "LoginExpandedPublicAccountView"; -constexpr int kExpandedViewWidthDp = 600; +constexpr int kExpandedViewWidthDp = 628; constexpr int kExpandedViewHeightDp = 324; constexpr int kTextLineHeightDp = 16; constexpr int kRoundRectCornerRadiusDp = 2; constexpr int kBorderThicknessDp = 1; -constexpr int kRightPaneMarginDp = 28; +constexpr int kHorizontalMarginPaneDp = 28; constexpr int kLabelMarginDp = 20; constexpr int kLeftMarginForSelectionButton = 8; constexpr int kRightMarginForSelectionButton = 3; @@ -63,7 +63,7 @@ constexpr int kArrowButtonSizeDp = 48; constexpr int kAdvancedViewButtonWidthDp = 190; constexpr int kAdvancedViewButtonHeightDp = 16; -constexpr int kSelectionBoxWidthDp = 178; +constexpr int kSelectionBoxWidthDp = 192; constexpr int kSelectionBoxHeightDp = 28; constexpr int kTopSpacingForLabelInAdvancedViewDp = 7; constexpr int kTopSpacingForLabelInRegularViewDp = 65; @@ -298,7 +298,7 @@ : on_learn_more_tapped_(on_learn_more_tapped) { SetPreferredSize( gfx::Size(kExpandedViewWidthDp / 2, kExpandedViewHeightDp)); - SetBorder(views::CreateEmptyBorder(gfx::Insets(kRightPaneMarginDp))); + SetBorder(views::CreateEmptyBorder(gfx::Insets(kHorizontalMarginPaneDp))); // Create labels view. labels_view_ = new NonAccessibleView();
diff --git a/ash/login/ui/login_expanded_public_account_view_unittest.cc b/ash/login/ui/login_expanded_public_account_view_unittest.cc index 1006ac8..4bf2c21 100644 --- a/ash/login/ui/login_expanded_public_account_view_unittest.cc +++ b/ash/login/ui/login_expanded_public_account_view_unittest.cc
@@ -26,7 +26,7 @@ namespace { // Total width of the expanded view. -constexpr int kBubbleTotalWidthDp = 600; +constexpr int kBubbleTotalWidthDp = 628; // Total height of the expanded view. constexpr int kBubbleTotalHeightDp = 324;
diff --git a/ash/login/ui/login_menu_view.cc b/ash/login/ui/login_menu_view.cc index da16546..e8c8b9f8 100644 --- a/ash/login/ui/login_menu_view.cc +++ b/ash/login/ui/login_menu_view.cc
@@ -21,7 +21,7 @@ namespace ash { -constexpr int kMenuItemWidthDp = 178; +constexpr int kMenuItemWidthDp = 192; constexpr int kMenuItemHeightDp = 28; constexpr int kRegularMenuItemLeftPaddingDp = 2; constexpr int kGroupMenuItemLeftPaddingDp = 10;
diff --git a/ash/login/ui/login_tooltip_view.cc b/ash/login/ui/login_tooltip_view.cc index 65281b6a..cc7734e5 100644 --- a/ash/login/ui/login_tooltip_view.cc +++ b/ash/login/ui/login_tooltip_view.cc
@@ -4,12 +4,16 @@ #include "ash/login/ui/login_tooltip_view.h" +#include "ash/login/ui/non_accessible_view.h" #include "ash/login/ui/views_utils.h" #include "ui/accessibility/ax_enums.mojom.h" #include "ui/display/display.h" #include "ui/display/screen.h" +#include "ui/gfx/paint_vector_icon.h" +#include "ui/views/controls/image_view.h" #include "ui/views/controls/label.h" #include "ui/views/layout/box_layout.h" +#include "ui/views/vector_icons.h" namespace ash { @@ -19,38 +23,34 @@ constexpr int kHorizontalPaddingLoginTooltipViewDp = 8; constexpr int kVerticalPaddingLoginTooltipViewDp = 8; +// The size of the info icon in the tooltip view. +constexpr int kInfoIconSizeDp = 20; + } // namespace LoginTooltipView::LoginTooltipView(const base::string16& message, views::View* anchor_view) : LoginBaseBubbleView(anchor_view) { - SetText(message); + views::ImageView* info_icon = new views::ImageView(); + info_icon->SetPreferredSize(gfx::Size(kInfoIconSizeDp, kInfoIconSizeDp)); + info_icon->SetImage(gfx::CreateVectorIcon(views::kInfoIcon, SK_ColorWHITE)); + AddChildView(info_icon); + + label_ = login_views_utils::CreateBubbleLabel(message, SK_ColorWHITE); + label_->SetMultiLine(true); + AddChildView(label_); } LoginTooltipView::~LoginTooltipView() = default; void LoginTooltipView::SetText(const base::string16& message) { - views::Label* text = - login_views_utils::CreateBubbleLabel(message, SK_ColorWHITE); - text->SetMultiLine(true); - RemoveAllChildViews(true /*delete_children*/); - AddChildView(text); + label_->SetText(message); } void LoginTooltipView::GetAccessibleNodeData(ui::AXNodeData* node_data) { node_data->role = ax::mojom::Role::kTooltip; } -gfx::Size LoginTooltipView::CalculatePreferredSize() const { - gfx::Size size; - - if (GetAnchorView()) - size.set_width(GetAnchorView()->width()); - - size.set_height(GetHeightForWidth(size.width())); - return size; -} - gfx::Point LoginTooltipView::CalculatePosition() { return CalculatePositionUsingDefaultStrategy( PositioningStrategy::kShowOnLeftSideOrRightSide,
diff --git a/ash/login/ui/login_tooltip_view.h b/ash/login/ui/login_tooltip_view.h index 51d7553..033d978 100644 --- a/ash/login/ui/login_tooltip_view.h +++ b/ash/login/ui/login_tooltip_view.h
@@ -9,6 +9,10 @@ #include "ui/accessibility/ax_node_data.h" #include "ui/views/view.h" +namespace views { +class Label; +} // namespace views + namespace ash { class LoginTooltipView : public LoginBaseBubbleView { @@ -22,10 +26,9 @@ void GetAccessibleNodeData(ui::AXNodeData* node_data) override; gfx::Point CalculatePosition() override; - // views::View: - gfx::Size CalculatePreferredSize() const override; - private: + views::Label* label_ = nullptr; + DISALLOW_COPY_AND_ASSIGN(LoginTooltipView); };
diff --git a/ash/login/ui/system_label_button.cc b/ash/login/ui/system_label_button.cc new file mode 100644 index 0000000..4efe014 --- /dev/null +++ b/ash/login/ui/system_label_button.cc
@@ -0,0 +1,136 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/login/ui/system_label_button.h" + +#include "ash/public/cpp/shelf_config.h" +#include "ash/resources/vector_icons/vector_icons.h" +#include "ash/style/ash_color_provider.h" +#include "ui/gfx/canvas.h" +#include "ui/gfx/color_palette.h" +#include "ui/gfx/paint_vector_icon.h" +#include "ui/views/controls/highlight_path_generator.h" + +namespace ash { + +namespace { + +// The color of the system button's text and icon in alert mode. +constexpr SkColor kSystemButtonContentColorAlert = + SkColorSetA(gfx::kGoogleGrey900, SK_AlphaOPAQUE); +// The background color of the system button in alert mode. +constexpr SkColor kSystemButtonBackgroundColorAlert = + SkColorSetA(gfx::kGoogleRed300, SK_AlphaOPAQUE); + +// The color of the system button's text in default mode. +constexpr SkColor kSystemButtonContentColorDefault = + SkColorSetA(gfx::kGoogleGrey200, SK_AlphaOPAQUE); + +// The color of the base color used for ink drop in default mode. +constexpr SkColor kInkDropBaseColorDefault = SK_ColorWHITE; + +constexpr int kUserInfoBubbleWidth = 192; +constexpr int kUserInfoBubbleExternalPadding = 8; +constexpr int kSystemButtonHeight = 32; +constexpr int kSystemButtonIconSize = 20; +constexpr int kSystemButtonMarginTopBottomDp = 6; +constexpr int kSystemButtonMarginLeftRightDp = 16; +constexpr int kSystemButtonBorderRadius = 16; +constexpr int kSystemButtonImageLabelSpacing = 8; +constexpr int kSystemButtonMaxLabelWidthDp = + kUserInfoBubbleWidth - 2 * kUserInfoBubbleExternalPadding - + kSystemButtonIconSize - kSystemButtonImageLabelSpacing - + 2 * kSystemButtonBorderRadius; + +} // namespace + +SkPath GetSystemButtonHighlightPath(const views::View* view) { + gfx::Rect rect(view->GetLocalBounds()); + return SkPath().addRoundRect(gfx::RectToSkRect(rect), + kSystemButtonBorderRadius, + kSystemButtonBorderRadius); +} + +class SystemButtonHighlightPathGenerator + : public views::HighlightPathGenerator { + public: + SystemButtonHighlightPathGenerator() = default; + SystemButtonHighlightPathGenerator( + const SystemButtonHighlightPathGenerator&) = delete; + SystemButtonHighlightPathGenerator& operator=( + const SystemButtonHighlightPathGenerator&) = delete; + + // views::HighlightPathGenerator: + SkPath GetHighlightPath(const views::View* view) override { + return GetSystemButtonHighlightPath(view); + } +}; + +SystemLabelButton::SystemLabelButton(views::ButtonListener* listener, + const base::string16& text, + DisplayType display_type) + : LabelButton(listener, text) { + SetImageLabelSpacing(kSystemButtonImageLabelSpacing); + label()->SetMultiLine(true); + label()->SetMaximumWidth(kSystemButtonMaxLabelWidthDp); + label()->SetFontList( + gfx::FontList().DeriveWithWeight(gfx::Font::Weight::BOLD)); + SetMinSize(gfx::Size(0, kSystemButtonHeight)); + SetPaintToLayer(); + layer()->SetFillsBoundsOpaquely(false); + if (display_type == SystemLabelButton::DisplayType::ALERT_WITH_ICON) { + SetImage( + views::Button::STATE_NORMAL, + CreateVectorIcon(kLockScreenAlertIcon, kSystemButtonContentColorAlert)); + } + SetTextSubpixelRenderingEnabled(false); + SkColor default_background = AshColorProvider::Get()->GetControlsLayerColor( + AshColorProvider::ControlsLayerType::kInactiveControlBackground, + AshColorProvider::AshColorMode::kDark); + bool is_alert = + display_type == SystemLabelButton::DisplayType::ALERT_WITH_ICON || + display_type == SystemLabelButton::DisplayType::ALERT_NO_ICON; + background_color_ = + is_alert ? kSystemButtonBackgroundColorAlert : default_background; + SkColor font_color = is_alert ? kSystemButtonContentColorAlert + : kSystemButtonContentColorDefault; + SetTextColor(views::Button::STATE_NORMAL, font_color); + SetTextColor(views::Button::STATE_HOVERED, font_color); + SetTextColor(views::Button::STATE_PRESSED, font_color); + views::HighlightPathGenerator::Install( + this, std::make_unique<SystemButtonHighlightPathGenerator>()); + + SetInkDropMode(InkDropMode::ON); + if (is_alert) { + const AshColorProvider::RippleAttributes ripple_attributes = + AshColorProvider::Get()->GetRippleAttributes(background_color_); + set_ink_drop_base_color(ripple_attributes.base_color); + set_ink_drop_visible_opacity(ripple_attributes.inkdrop_opacity); + set_ink_drop_highlight_opacity(ripple_attributes.highlight_opacity); + } else { + // using RippleAttributes here doesn't give visually satisfying results + // in default display mode + set_ink_drop_base_color(kInkDropBaseColorDefault); + } + + SetFocusBehavior(FocusBehavior::ALWAYS); + SetInstallFocusRingOnFocus(true); + focus_ring()->SetColor(ShelfConfig::Get()->shelf_focus_border_color()); +} + +void SystemLabelButton::PaintButtonContents(gfx::Canvas* canvas) { + cc::PaintFlags flags; + flags.setAntiAlias(true); + flags.setColor(background_color_); + flags.setStyle(cc::PaintFlags::kFill_Style); + canvas->DrawPath(GetSystemButtonHighlightPath(this), flags); +} + +gfx::Insets SystemLabelButton::GetInsets() const { + return gfx::Insets( + kSystemButtonMarginTopBottomDp, kSystemButtonMarginLeftRightDp, + kSystemButtonMarginTopBottomDp, kSystemButtonMarginLeftRightDp); +} + +} // namespace ash
diff --git a/ash/login/ui/system_label_button.h b/ash/login/ui/system_label_button.h new file mode 100644 index 0000000..7c8bfe4 --- /dev/null +++ b/ash/login/ui/system_label_button.h
@@ -0,0 +1,35 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_LOGIN_UI_SYSTEM_LABEL_BUTTON_H_ +#define ASH_LOGIN_UI_SYSTEM_LABEL_BUTTON_H_ + +#include "ash/ash_export.h" +#include "ui/views/controls/button/label_button.h" + +namespace ash { + +// SystemLabelButton provides styled buttons with label for the login screen. +class ASH_EXPORT SystemLabelButton : public views::LabelButton { + public: + enum class DisplayType { DEFAULT, ALERT_NO_ICON, ALERT_WITH_ICON }; + + SystemLabelButton(views::ButtonListener* listener, + const base::string16& text, + DisplayType display_type); + SystemLabelButton(const SystemLabelButton&) = delete; + SystemLabelButton& operator=(const SystemLabelButton&) = delete; + ~SystemLabelButton() override = default; + + // views::LabelButton: + void PaintButtonContents(gfx::Canvas* canvas) override; + gfx::Insets GetInsets() const override; + + private: + SkColor background_color_ = SK_ColorGREEN; +}; + +} // namespace ash + +#endif // ASH_LOGIN_UI_SYSTEM_LABEL_BUTTON_H_
diff --git a/ash/media/media_notification_controller_impl.cc b/ash/media/media_notification_controller_impl.cc index ba22074..59f0660 100644 --- a/ash/media/media_notification_controller_impl.cc +++ b/ash/media/media_notification_controller_impl.cc
@@ -164,7 +164,7 @@ // If we lost focus then we should freeze the notification as it may regain // focus after a second or so. - it->second.Freeze(); + it->second.Freeze(base::DoNothing()); } void MediaNotificationControllerImpl::ShowNotification(const std::string& id) {
diff --git a/ash/public/cpp/shelf_config.h b/ash/public/cpp/shelf_config.h index e994d5a..587d0e4 100644 --- a/ash/public/cpp/shelf_config.h +++ b/ash/public/cpp/shelf_config.h
@@ -181,6 +181,8 @@ private: friend class ShelfConfigTest; + class ShelfAccessibilityObserver; + // Called whenever something has changed in the shelf configuration. Notifies // all observers. void OnShelfConfigUpdated(); @@ -195,6 +197,9 @@ // calculated as if is_in_app() returns false. int GetShelfSize(bool ignore_in_app_state) const; + // Updates shelf config - called when the accessibility state changes. + void UpdateConfigForAccessibilityState(); + // Whether shelf is currently standard or dense. bool is_dense_; @@ -276,6 +281,10 @@ // tablet mode. const int app_icon_end_padding_; + // Object responsible for observing accessibility settings relevant to shelf + // config. + std::unique_ptr<ShelfAccessibilityObserver> accessibility_observer_; + base::ObserverList<Observer> observers_; DISALLOW_COPY_AND_ASSIGN(ShelfConfig);
diff --git a/ash/shelf/back_button_unittest.cc b/ash/shelf/back_button_unittest.cc index 2ecaa5ae..9c1d341c 100644 --- a/ash/shelf/back_button_unittest.cc +++ b/ash/shelf/back_button_unittest.cc
@@ -7,8 +7,10 @@ #include <memory> #include "ash/accelerators/accelerator_controller_impl.h" +#include "ash/accessibility/accessibility_controller_impl.h" #include "ash/app_list/test/app_list_test_helper.h" #include "ash/app_list/views/app_list_view.h" +#include "ash/public/cpp/ash_features.h" #include "ash/shelf/shelf.h" #include "ash/shelf/shelf_navigation_widget.h" #include "ash/shelf/shelf_view.h" @@ -26,6 +28,8 @@ namespace ash { +namespace { + class BackButtonTest : public AshTestBase, public testing::WithParamInterface<bool> { public: @@ -76,6 +80,48 @@ DISALLOW_COPY_AND_ASSIGN(BackButtonTest); }; +enum class TestAccessibilityFeature { + kSpokenFeedback, + kAutoclick, + kSwitchAccess +}; + +// Tests back button visibility with number of accessibility setting enabled, +// with kHideControlsInTabletModeFeature. +class BackButtonVisibilityWithAccessibilityFeaturesTest + : public AshTestBase, + public ::testing::WithParamInterface<TestAccessibilityFeature> { + public: + BackButtonVisibilityWithAccessibilityFeaturesTest() { + scoped_feature_list_.InitWithFeatures( + {chromeos::features::kShelfHotseat, + features::kHideShelfControlsInTabletMode}, + {}); + } + ~BackButtonVisibilityWithAccessibilityFeaturesTest() override = default; + + void SetTestA11yFeatureEnabled(bool enabled) { + switch (GetParam()) { + case TestAccessibilityFeature::kSpokenFeedback: + Shell::Get()->accessibility_controller()->SetSpokenFeedbackEnabled( + enabled, A11Y_NOTIFICATION_NONE); + break; + case TestAccessibilityFeature::kAutoclick: + Shell::Get()->accessibility_controller()->SetAutoclickEnabled(enabled); + break; + case TestAccessibilityFeature::kSwitchAccess: + Shell::Get()->accessibility_controller()->SetSwitchAccessEnabled( + enabled); + break; + } + } + + private: + base::test::ScopedFeatureList scoped_feature_list_; +}; + +} // namespace + // The parameter indicates whether the kShelfHotseat feature is enabled. INSTANTIATE_TEST_SUITE_P(All, BackButtonTest, testing::Bool()); @@ -203,4 +249,49 @@ EXPECT_FALSE(test_api_->CloseMenu()); } +INSTANTIATE_TEST_SUITE_P( + All, + BackButtonVisibilityWithAccessibilityFeaturesTest, + ::testing::Values(TestAccessibilityFeature::kSpokenFeedback, + TestAccessibilityFeature::kAutoclick, + TestAccessibilityFeature::kSwitchAccess)); + +TEST_P(BackButtonVisibilityWithAccessibilityFeaturesTest, + TabletModeSwitchWithA11yFeatureEnabled) { + std::unique_ptr<views::Widget> widget = CreateTestWidget(); + + SetTestA11yFeatureEnabled(true /*enabled*/); + + ShelfNavigationWidget::TestApi test_api( + GetPrimaryShelf()->shelf_widget()->navigation_widget()); + // Back button is not shown in clamshell. + EXPECT_FALSE(test_api.IsBackButtonVisible()); + + // Switch to tablet mode, and verify the back button is now visible. + Shell::Get()->tablet_mode_controller()->SetEnabledForTest(true); + EXPECT_TRUE(test_api.IsBackButtonVisible()); + + // The button should be hidden if the feature gets disabled. + SetTestA11yFeatureEnabled(false /*enabled*/); + EXPECT_FALSE(test_api.IsBackButtonVisible()); +} + +TEST_P(BackButtonVisibilityWithAccessibilityFeaturesTest, + FeatureEnabledWhileInTabletMode) { + std::unique_ptr<views::Widget> widget = CreateTestWidget(); + + ShelfNavigationWidget::TestApi test_api( + GetPrimaryShelf()->shelf_widget()->navigation_widget()); + // Back button is not shown in clamshell. + EXPECT_FALSE(test_api.IsBackButtonVisible()); + + // Switch to tablet mode, and verify the back button is still hidden. + Shell::Get()->tablet_mode_controller()->SetEnabledForTest(true); + EXPECT_FALSE(test_api.IsBackButtonVisible()); + + // The button should be shown if the feature gets enabled. + SetTestA11yFeatureEnabled(true /*enabled*/); + EXPECT_TRUE(test_api.IsBackButtonVisible()); +} + } // namespace ash
diff --git a/ash/shelf/drag_handle.cc b/ash/shelf/drag_handle.cc new file mode 100644 index 0000000..7ea26f8 --- /dev/null +++ b/ash/shelf/drag_handle.cc
@@ -0,0 +1,50 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/shelf/drag_handle.h" + +#include "ash/public/cpp/shelf_config.h" +#include "ash/session/session_controller_impl.h" +#include "ash/shell.h" +#include "base/bind.h" +#include "base/timer/timer.h" +#include "ui/gfx/color_palette.h" + +namespace ash { + +namespace { + +// Vertical padding to make the drag handle easier to tap. +constexpr int kVerticalClickboxPadding = 15; + +} // namespace + +DragHandle::DragHandle(gfx::Size drag_handle_size, + AshColorProvider::RippleAttributes ripple_attributes, + int drag_handle_corner_radius) { + SetPaintToLayer(ui::LAYER_SOLID_COLOR); + layer()->SetColor(ripple_attributes.base_color); + // TODO(manucornet): Figure out why we need a manual opacity adjustment + // to make this color look the same as the status area highlight. + layer()->SetOpacity(ripple_attributes.inkdrop_opacity + 0.075); + layer()->SetRoundedCornerRadius( + {drag_handle_corner_radius, drag_handle_corner_radius, + drag_handle_corner_radius, drag_handle_corner_radius}); + SetSize(drag_handle_size); + SetEventTargeter(std::make_unique<views::ViewTargeter>(this)); +} + +DragHandle::~DragHandle() = default; + +bool DragHandle::DoesIntersectRect(const views::View* target, + const gfx::Rect& rect) const { + DCHECK_EQ(target, this); + gfx::Rect drag_handle_bounds = target->GetLocalBounds(); + drag_handle_bounds.set_y(drag_handle_bounds.y() - kVerticalClickboxPadding); + drag_handle_bounds.set_height(drag_handle_bounds.height() + + 2 * kVerticalClickboxPadding); + return drag_handle_bounds.Intersects(rect); +} + +} // namespace ash
diff --git a/ash/shelf/drag_handle.h b/ash/shelf/drag_handle.h new file mode 100644 index 0000000..8f69a0e --- /dev/null +++ b/ash/shelf/drag_handle.h
@@ -0,0 +1,35 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_SHELF_DRAG_HANDLE_H_ +#define ASH_SHELF_DRAG_HANDLE_H_ + +#include "ash/ash_export.h" +#include "ash/shelf/shelf_widget.h" +#include "ash/style/ash_color_provider.h" +#include "base/timer/timer.h" +#include "ui/views/view.h" +#include "ui/views/view_targeter_delegate.h" + +namespace ash { + +class ASH_EXPORT DragHandle : public views::View, + public views::ViewTargeterDelegate { + public: + explicit DragHandle(gfx::Size drag_handle_size, + AshColorProvider::RippleAttributes ripple_attributes, + int drag_handle_corner_radius); + DragHandle(const DragHandle&) = delete; + ~DragHandle() override; + + DragHandle& operator=(const DragHandle&) = delete; + + // views::ViewTargeterDelegate: + bool DoesIntersectRect(const views::View* target, + const gfx::Rect& rect) const override; +}; + +} // namespace ash + +#endif // ASH_SHELF_DRAG_HANDLE_H_
diff --git a/ash/shelf/home_button_unittest.cc b/ash/shelf/home_button_unittest.cc index 6eca5e0d..69a860c8 100644 --- a/ash/shelf/home_button_unittest.cc +++ b/ash/shelf/home_button_unittest.cc
@@ -7,6 +7,7 @@ #include <memory> #include <string> +#include "ash/accessibility/accessibility_controller_impl.h" #include "ash/app_list/test/app_list_test_helper.h" #include "ash/app_list/views/app_list_view.h" #include "ash/assistant/assistant_controller.h" @@ -41,8 +42,6 @@ return ui::GestureEvent(0, 0, ui::EF_NONE, base::TimeTicks(), details); } -} // namespace - class HomeButtonTest : public AshTestBase, public testing::WithParamInterface<std::tuple<bool, bool>> { @@ -117,6 +116,48 @@ DISALLOW_COPY_AND_ASSIGN(HomeButtonTest); }; +enum class TestAccessibilityFeature { + kSpokenFeedback, + kAutoclick, + kSwitchAccess +}; + +// Tests home button visibility with number of accessibility setting enabled, +// with kHideControlsInTabletModeFeature. +class HomeButtonVisibilityWithAccessibilityFeaturesTest + : public AshTestBase, + public ::testing::WithParamInterface<TestAccessibilityFeature> { + public: + HomeButtonVisibilityWithAccessibilityFeaturesTest() { + scoped_feature_list_.InitWithFeatures( + {chromeos::features::kShelfHotseat, + features::kHideShelfControlsInTabletMode}, + {}); + } + ~HomeButtonVisibilityWithAccessibilityFeaturesTest() override = default; + + void SetTestA11yFeatureEnabled(bool enabled) { + switch (GetParam()) { + case TestAccessibilityFeature::kSpokenFeedback: + Shell::Get()->accessibility_controller()->SetSpokenFeedbackEnabled( + enabled, A11Y_NOTIFICATION_NONE); + break; + case TestAccessibilityFeature::kAutoclick: + Shell::Get()->accessibility_controller()->SetAutoclickEnabled(enabled); + break; + case TestAccessibilityFeature::kSwitchAccess: + Shell::Get()->accessibility_controller()->SetSwitchAccessEnabled( + enabled); + break; + } + } + + private: + base::test::ScopedFeatureList scoped_feature_list_; +}; + +} // namespace + // The parameters indicate whether the kShelfHotseat and // kHideShelfControlsInTabletMode features are enabled. INSTANTIATE_TEST_SUITE_P(All, @@ -531,4 +572,43 @@ GetAppListTestHelper()->CheckVisibility(true); } +INSTANTIATE_TEST_SUITE_P( + All, + HomeButtonVisibilityWithAccessibilityFeaturesTest, + ::testing::Values(TestAccessibilityFeature::kSpokenFeedback, + TestAccessibilityFeature::kAutoclick, + TestAccessibilityFeature::kSwitchAccess)); + +TEST_P(HomeButtonVisibilityWithAccessibilityFeaturesTest, + TabletModeSwitchWithA11yFeatureEnabled) { + SetTestA11yFeatureEnabled(true /*enabled*/); + + ShelfNavigationWidget::TestApi test_api( + GetPrimaryShelf()->shelf_widget()->navigation_widget()); + EXPECT_TRUE(test_api.IsHomeButtonVisible()); + + // Switch to tablet mode, and verify the home button is still visible. + Shell::Get()->tablet_mode_controller()->SetEnabledForTest(true); + EXPECT_TRUE(test_api.IsHomeButtonVisible()); + + // The button should be hidden if the feature gets disabled. + SetTestA11yFeatureEnabled(false /*enabled*/); + EXPECT_FALSE(test_api.IsHomeButtonVisible()); +} + +TEST_P(HomeButtonVisibilityWithAccessibilityFeaturesTest, + FeatureEnabledWhileInTabletMode) { + ShelfNavigationWidget::TestApi test_api( + GetPrimaryShelf()->shelf_widget()->navigation_widget()); + EXPECT_TRUE(test_api.IsHomeButtonVisible()); + + // Switch to tablet mode, and verify the home button is hidden. + Shell::Get()->tablet_mode_controller()->SetEnabledForTest(true); + EXPECT_FALSE(test_api.IsHomeButtonVisible()); + + // The button should be shown if the feature gets enabled. + SetTestA11yFeatureEnabled(true /*enabled*/); + EXPECT_TRUE(test_api.IsHomeButtonVisible()); +} + } // namespace ash
diff --git a/ash/shelf/scrollable_shelf_view.cc b/ash/shelf/scrollable_shelf_view.cc index 4414cb8f..92e7623 100644 --- a/ash/shelf/scrollable_shelf_view.cc +++ b/ash/shelf/scrollable_shelf_view.cc
@@ -208,6 +208,10 @@ void set_end_fade_zone(const FadeZone& fade_zone) { end_fade_zone_ = fade_zone; } + gfx::Rect start_fade_zone_bounds() const { + return start_fade_zone_.zone_rect; + } + gfx::Rect end_fade_zone_bounds() const { return end_fade_zone_.zone_rect; } ui::Layer* layer() { return &layer_; } private: @@ -549,8 +553,7 @@ GetShelf()->shelf_widget()->ForceToHideHotseat(); } - MaybeUpdateGradientZone(/*is_left_arrow_changed=*/false, - /*is_right_arrow_changed=*/false); + MaybeUpdateGradientZone(); } void ScrollableShelfView::ScrollToNewPage(bool forward) { @@ -734,8 +737,7 @@ StopObservingImplicitAnimations(); during_scroll_animation_ = true; - MaybeUpdateGradientZone(/*is_left_arrow_changed=*/false, - /*is_right_arrow_changed=*/false); + MaybeUpdateGradientZone(); ui::ScopedLayerAnimationSettings animation_settings( shelf_view_->layer()->GetAnimator()); @@ -861,13 +863,6 @@ shelf_container_bounds.Transpose(); } - const bool is_left_arrow_changed = - (left_arrow_->bounds() != left_arrow_bounds) || - (!left_arrow_bounds.IsEmpty() && !left_arrow_->GetVisible()); - const bool is_right_arrow_changed = - (right_arrow_->bounds() != right_arrow_bounds) || - (!right_arrow_bounds.IsEmpty() && !right_arrow_->GetVisible()); - // Layout |left_arrow_| if it should show. left_arrow_->SetVisible(!left_arrow_bounds.IsEmpty()); if (left_arrow_->GetVisible()) @@ -885,10 +880,7 @@ layer()->SetMaskLayer(gradient_layer_delegate_->layer()); } - if (gradient_layer_delegate_->layer()->bounds() != layer()->bounds()) - gradient_layer_delegate_->layer()->SetBounds(layer()->bounds()); - - MaybeUpdateGradientZone(is_left_arrow_changed, is_right_arrow_changed); + MaybeUpdateGradientZone(); // Layout |shelf_container_view_|. shelf_container_view_->SetBoundsRect(shelf_container_bounds); @@ -947,6 +939,9 @@ } void ScrollableShelfView::OnBoundsChanged(const gfx::Rect& previous_bounds) { + if (gradient_layer_delegate_->layer()->bounds() != layer()->bounds()) + gradient_layer_delegate_->layer()->SetBounds(layer()->bounds()); + const gfx::Vector2dF old_scroll_offset = scroll_offset_; // The changed view bounds may lead to update on the available space. @@ -1437,8 +1432,7 @@ layout_strategy_before_main_axis_scrolling_ = layout_strategy_; // The change in |scroll_status_| may lead to update on the gradient zone. - MaybeUpdateGradientZone(/*is_left_arrow_changed=*/false, - /*is_right_arrow_changed=*/false); + MaybeUpdateGradientZone(); } if (event.type() == ui::ET_GESTURE_END) @@ -1453,8 +1447,7 @@ layout_strategy_before_main_axis_scrolling_ = kNotShowArrowButtons; // The change in |scroll_status_| may lead to update on the gradient zone. - MaybeUpdateGradientZone(/*is_left_arrow_changed=*/false, - /*is_right_arrow_changed=*/false); + MaybeUpdateGradientZone(); } bool ScrollableShelfView::ProcessGestureEvent(const ui::GestureEvent& event) { @@ -1662,13 +1655,6 @@ return offset; } -void ScrollableShelfView::UpdateGradientZone() { - gradient_layer_delegate_->set_start_fade_zone(CalculateStartGradientZone()); - gradient_layer_delegate_->set_end_fade_zone(CalculateEndGradientZone()); - - SchedulePaint(); -} - ScrollableShelfView::FadeZone ScrollableShelfView::CalculateStartGradientZone() const { if (!should_show_start_gradient_zone_) @@ -1677,17 +1663,6 @@ gfx::Rect zone_rect; bool fade_in = false; const bool is_horizontal_alignment = GetShelf()->IsHorizontalAlignment(); - gfx::Rect left_arrow_bounds; - if (left_arrow_->GetVisible()) { - left_arrow_bounds = left_arrow_->bounds(); - } else { - // If the arrow button is invisible, the gradient zone is created on - // the side of |visible_space_|. - left_arrow_bounds = gfx::Rect( - is_horizontal_alignment ? GetMirroredRect(visible_space_).x() : 0, - is_horizontal_alignment ? 0 : visible_space_.y(), /*width=*/0, - /*height=*/0); - } if (is_horizontal_alignment) { int gradient_start; @@ -1697,19 +1672,19 @@ // one-pixel to offset the potential rounding error during rendering (we // also do it in CalculateEndGradientZone()). if (ShouldAdaptToRTL()) { - const gfx::Rect mirrored_left_arrow_bounds = - GetMirroredRect(left_arrow_bounds); - gradient_start = mirrored_left_arrow_bounds.x() - kGradientZoneLength; - gradient_end = mirrored_left_arrow_bounds.x() + 1; + const int border = visible_space_.right(); + gradient_start = border - kGradientZoneLength; + gradient_end = border + 1; } else { - gradient_start = left_arrow_bounds.right() - 1; - gradient_end = left_arrow_bounds.right() + kGradientZoneLength; + const int border = visible_space_.x(); + gradient_start = border - 1; + gradient_end = border + kGradientZoneLength; } zone_rect = gfx::Rect(gradient_start, 0, gradient_end - gradient_start, height()); } else { - zone_rect = gfx::Rect(0, left_arrow_bounds.bottom() - 1, width(), - kGradientZoneLength + 1); + zone_rect = + gfx::Rect(0, visible_space_.y() - 1, width(), kGradientZoneLength + 1); } fade_in = !ShouldAdaptToRTL(); @@ -1726,36 +1701,23 @@ bool fade_in = false; const bool is_horizontal_alignment = GetShelf()->IsHorizontalAlignment(); - gfx::Rect right_arrow_bounds; - if (right_arrow_->GetVisible()) { - right_arrow_bounds = right_arrow_->bounds(); - } else { - // If the arrow button is invisible, the gradient zone is created on - // the side of |visible_space_|. - right_arrow_bounds = gfx::Rect( - is_horizontal_alignment ? GetMirroredRect(visible_space_).right() : 0, - is_horizontal_alignment ? 0 : visible_space_.bottom(), - /*width=*/0, - /*height=*/0); - } - if (is_horizontal_alignment) { int gradient_start; int gradient_end; if (ShouldAdaptToRTL()) { - const gfx::Rect mirrored_right_arrow_bounds = - GetMirroredRect(right_arrow_bounds); - gradient_start = mirrored_right_arrow_bounds.right() - 1; - gradient_end = mirrored_right_arrow_bounds.right() + kGradientZoneLength; + const int border = visible_space_.x(); + gradient_start = border - 1; + gradient_end = border + kGradientZoneLength; } else { - gradient_start = right_arrow_bounds.x() - kGradientZoneLength; - gradient_end = right_arrow_bounds.x() + 1; + const int border = visible_space_.right(); + gradient_start = border - kGradientZoneLength; + gradient_end = border + 1; } zone_rect = gfx::Rect(gradient_start, 0, gradient_end - gradient_start, height()); } else { - zone_rect = gfx::Rect(0, right_arrow_bounds.y() - kGradientZoneLength, + zone_rect = gfx::Rect(0, visible_space_.bottom() - kGradientZoneLength, width(), kGradientZoneLength + 1); } @@ -1785,23 +1747,32 @@ should_show_end_gradient_zone_ = ShouldShowRightArrow(); } -void ScrollableShelfView::MaybeUpdateGradientZone(bool is_left_arrow_changed, - bool is_right_arrow_changed) { +void ScrollableShelfView::MaybeUpdateGradientZone() { // Fade zones should be updated if: // (1) Fade zone's visibility changes. // (2) Fade zone should show and the arrow button's location changes. UpdateGradientZoneState(); - const bool should_update_end_fade_zone = - (should_show_end_gradient_zone_ != - gradient_layer_delegate_->IsEndFadeZoneVisible()) || - (should_show_end_gradient_zone_ && is_right_arrow_changed); - const bool should_update_start_fade_zone = - (should_show_start_gradient_zone_ != - gradient_layer_delegate_->IsStartFadeZoneVisible()) || - (should_show_start_gradient_zone_ && is_left_arrow_changed); - if (should_update_start_fade_zone || should_update_end_fade_zone) - UpdateGradientZone(); + const FadeZone target_start_fade_zone = CalculateStartGradientZone(); + const FadeZone target_end_fade_zone = CalculateEndGradientZone(); + + const bool should_update_start_fade_zone = + target_start_fade_zone.zone_rect != + gradient_layer_delegate_->start_fade_zone_bounds(); + const bool should_update_end_fade_zone = + target_end_fade_zone.zone_rect != + gradient_layer_delegate_->end_fade_zone_bounds(); + + if (!should_update_start_fade_zone && !should_update_end_fade_zone) + return; + + if (should_update_start_fade_zone) + gradient_layer_delegate_->set_start_fade_zone(target_start_fade_zone); + + if (should_update_end_fade_zone) + gradient_layer_delegate_->set_end_fade_zone(target_end_fade_zone); + + SchedulePaint(); } int ScrollableShelfView::GetActualScrollOffset(
diff --git a/ash/shelf/scrollable_shelf_view.h b/ash/shelf/scrollable_shelf_view.h index 0855ff8..655fe094 100644 --- a/ash/shelf/scrollable_shelf_view.h +++ b/ash/shelf/scrollable_shelf_view.h
@@ -294,9 +294,6 @@ float CalculatePageScrollingOffset(bool forward, LayoutStrategy layout_strategy) const; - // Updates the gradient zone. - void UpdateGradientZone(); - // Calculates the bounds of the gradient zone before/after the shelf // container. FadeZone CalculateStartGradientZone() const; @@ -305,11 +302,9 @@ // Updates the visibility of gradient zones. void UpdateGradientZoneState(); - // Updates the gradient zone if the gradient zone's expected visibility is - // different from the actual value or arrow buttons' bounds change indicated - // by parameters. - void MaybeUpdateGradientZone(bool is_left_arrow_changed, - bool is_right_arrow_changed); + // Updates the gradient zone if the gradient zone's target bounds are + // different from the actual values. + void MaybeUpdateGradientZone(); // Returns the actual scroll offset for the given scroll distance along the // main axis under the specific layout strategy. When the left arrow button
diff --git a/ash/shelf/shelf.cc b/ash/shelf/shelf.cc index fdf96d4..279f342 100644 --- a/ash/shelf/shelf.cc +++ b/ash/shelf/shelf.cc
@@ -287,24 +287,6 @@ return true; } -int Shelf::SelectValueForShelfAlignment(int bottom, int left, int right) const { - switch (alignment_) { - case ShelfAlignment::kBottom: - case ShelfAlignment::kBottomLocked: - return bottom; - case ShelfAlignment::kLeft: - return left; - case ShelfAlignment::kRight: - return right; - } - NOTREACHED(); - return bottom; -} - -int Shelf::PrimaryAxisValue(int horizontal, int vertical) const { - return IsHorizontalAlignment() ? horizontal : vertical; -} - void Shelf::SetAutoHideBehavior(ShelfAutoHideBehavior auto_hide_behavior) { DCHECK(shelf_layout_manager_);
diff --git a/ash/shelf/shelf.h b/ash/shelf/shelf.h index 5436dd32..7360a47 100644 --- a/ash/shelf/shelf.h +++ b/ash/shelf/shelf.h
@@ -104,10 +104,26 @@ bool IsHorizontalAlignment() const; // Returns a value based on shelf alignment. - int SelectValueForShelfAlignment(int bottom, int left, int right) const; + template <typename T> + T SelectValueForShelfAlignment(T bottom, T left, T right) const { + switch (alignment_) { + case ShelfAlignment::kBottom: + case ShelfAlignment::kBottomLocked: + return bottom; + case ShelfAlignment::kLeft: + return left; + case ShelfAlignment::kRight: + return right; + } + NOTREACHED(); + return bottom; + } // Returns |horizontal| if shelf is horizontal, otherwise |vertical|. - int PrimaryAxisValue(int horizontal, int vertical) const; + template <typename T> + T PrimaryAxisValue(T horizontal, T vertical) const { + return IsHorizontalAlignment() ? horizontal : vertical; + } void SetAutoHideBehavior(ShelfAutoHideBehavior behavior);
diff --git a/ash/shelf/shelf_config.cc b/ash/shelf/shelf_config.cc index 8115b4e2..961fede 100644 --- a/ash/shelf/shelf_config.cc +++ b/ash/shelf/shelf_config.cc
@@ -4,6 +4,8 @@ #include "ash/public/cpp/shelf_config.h" +#include "ash/accessibility/accessibility_controller_impl.h" +#include "ash/accessibility/accessibility_observer.h" #include "ash/app_list/app_list_controller_impl.h" #include "ash/public/cpp/ash_features.h" #include "ash/session/session_controller_impl.h" @@ -11,6 +13,7 @@ #include "ash/style/ash_color_provider.h" #include "ash/wallpaper/wallpaper_controller_impl.h" #include "ash/wm/tablet_mode/tablet_mode_controller.h" +#include "base/scoped_observer.h" #include "chromeos/constants/chromeos_switches.h" #include "ui/gfx/color_analysis.h" #include "ui/gfx/color_palette.h" @@ -30,8 +33,46 @@ Shell::Get()->tablet_mode_controller()->InTabletMode(); } +// Whether the the shelf control buttons must be shown for accessibility +// reasons. +bool ShelfControlsForcedShownForAccessibility() { + AccessibilityControllerImpl* accessibility_controller = + Shell::Get()->accessibility_controller(); + return accessibility_controller->spoken_feedback_enabled() || + accessibility_controller->autoclick_enabled() || + accessibility_controller->switch_access_enabled(); +} + } // namespace +class ShelfConfig::ShelfAccessibilityObserver : public AccessibilityObserver { + public: + ShelfAccessibilityObserver( + const base::RepeatingClosure& accessibility_state_changed_callback) + : accessibility_state_changed_callback_( + accessibility_state_changed_callback) { + observer_.Add(Shell::Get()->accessibility_controller()); + } + + ShelfAccessibilityObserver(const ShelfAccessibilityObserver& other) = delete; + ShelfAccessibilityObserver& operator=( + const ShelfAccessibilityObserver& other) = delete; + + ~ShelfAccessibilityObserver() override = default; + + // AccessibilityObserver: + void OnAccessibilityStatusChanged() override { + accessibility_state_changed_callback_.Run(); + } + void OnAccessibilityControllerShutdown() override { observer_.RemoveAll(); } + + private: + base::RepeatingClosure accessibility_state_changed_callback_; + + ScopedObserver<AccessibilityControllerImpl, AccessibilityObserver> observer_{ + this}; +}; + ShelfConfig::ShelfConfig() : is_dense_(false), shelf_controls_shown_(true), @@ -63,6 +104,9 @@ mousewheel_scroll_offset_threshold_(20), in_app_control_button_height_inset_(4), app_icon_end_padding_(4) { + accessibility_observer_ = std::make_unique<ShelfAccessibilityObserver>( + base::BindRepeating(&ShelfConfig::UpdateConfigForAccessibilityState, + base::Unretained(this))); UpdateConfig(is_app_list_visible_); } @@ -228,7 +272,8 @@ // TODO(http::crbug.com/1008956): Add a user preference that would allow the // user or a policy to override this behavior. const bool new_shelf_controls_shown = - !(in_tablet_mode && features::IsHideShelfControlsInTabletModeEnabled()); + !(in_tablet_mode && features::IsHideShelfControlsInTabletModeEnabled()) || + ShelfControlsForcedShownForAccessibility(); if (new_is_dense == is_dense_ && shelf_controls_shown_ == new_shelf_controls_shown && @@ -342,6 +387,10 @@ : 0; } +void ShelfConfig::UpdateConfigForAccessibilityState() { + UpdateConfig(is_app_list_visible_); +} + void ShelfConfig::OnShelfConfigUpdated() { for (auto& observer : observers_) observer.OnShelfConfigUpdated();
diff --git a/ash/shelf/shelf_layout_manager.cc b/ash/shelf/shelf_layout_manager.cc index f68ce02..b78102e 100644 --- a/ash/shelf/shelf_layout_manager.cc +++ b/ash/shelf/shelf_layout_manager.cc
@@ -458,7 +458,7 @@ const int shelf_size = ShelfConfig::Get()->shelf_size(); aura::Window* shelf_window = shelf_widget_->GetNativeWindow(); gfx::Rect rect(screen_util::GetDisplayBoundsInParent(shelf_window)); - return SelectValueForShelfAlignment( + return shelf_->SelectValueForShelfAlignment( gfx::Rect(rect.x(), rect.bottom() - shelf_size, rect.width(), shelf_size), gfx::Rect(rect.x(), rect.y(), shelf_size, rect.height()), gfx::Rect(rect.right() - shelf_size, rect.y(), shelf_size, @@ -1603,13 +1603,15 @@ screen_util::GetDisplayBoundsWithShelf(shelf_widget_->GetNativeWindow()); available_bounds.Inset(work_area->GetAccessibilityInsets()); - int shelf_width = PrimaryAxisValue(available_bounds.width(), shelf_size); - int shelf_height = PrimaryAxisValue(shelf_size, available_bounds.height()); - const int shelf_primary_position = SelectValueForShelfAlignment( + int shelf_width = + shelf_->PrimaryAxisValue(available_bounds.width(), shelf_size); + int shelf_height = + shelf_->PrimaryAxisValue(shelf_size, available_bounds.height()); + const int shelf_primary_position = shelf_->SelectValueForShelfAlignment( available_bounds.bottom() - shelf_in_screen_portion, available_bounds.x() - shelf_size + shelf_in_screen_portion, available_bounds.right() - shelf_in_screen_portion); - gfx::Point shelf_origin = SelectValueForShelfAlignment( + gfx::Point shelf_origin = shelf_->SelectValueForShelfAlignment( gfx::Point(available_bounds.x(), shelf_primary_position), gfx::Point(shelf_primary_position, available_bounds.y()), gfx::Point(shelf_primary_position, available_bounds.y())); @@ -1625,7 +1627,7 @@ else status_size.set_width(shelf_size); - gfx::Point status_origin = SelectValueForShelfAlignment( + gfx::Point status_origin = shelf_->SelectValueForShelfAlignment( gfx::Point(0, 0), gfx::Point(shelf_width - status_size.width(), shelf_height - status_size.height()), @@ -1639,7 +1641,8 @@ // Enlarge the widget to take up available space, this ensures events which // are outside of the HomeButton bounds can be received. - nav_size.Enlarge(home_button_edge_spacing, home_button_edge_spacing); + if (!nav_size.IsEmpty()) + nav_size.Enlarge(home_button_edge_spacing, home_button_edge_spacing); if (shelf_->IsHorizontalAlignment() && base::i18n::IsRTL()) nav_origin.set_x(shelf_width - nav_size.width()); @@ -1683,7 +1686,7 @@ if (drag_status_ == kDragInProgress) UpdateTargetBoundsForGesture(hotseat_target_state); - target_bounds_.shelf_insets = SelectValueForShelfAlignment( + target_bounds_.shelf_insets = shelf_->SelectValueForShelfAlignment( gfx::Insets(0, 0, GetShelfInset(state.visibility_state, IsHotseatEnabled() @@ -1697,7 +1700,7 @@ // that can change the size of the shelf. const bool showing_login_shelf = !state.IsActiveSessionState(); if (chromeos::switches::ShouldShowScrollableShelf() && !showing_login_shelf) { - target_bounds_.shelf_bounds_in_shelf = SelectValueForShelfAlignment( + target_bounds_.shelf_bounds_in_shelf = shelf_->SelectValueForShelfAlignment( gfx::Rect(target_bounds_.nav_bounds_in_shelf.right(), 0, shelf_width - status_size.width() - target_bounds_.nav_bounds_in_shelf.width() - @@ -1714,7 +1717,7 @@ target_bounds_.nav_bounds_in_shelf.height() - home_button_edge_spacing)); } else { - target_bounds_.shelf_bounds_in_shelf = SelectValueForShelfAlignment( + target_bounds_.shelf_bounds_in_shelf = shelf_->SelectValueForShelfAlignment( gfx::Rect(0, 0, shelf_width - status_size.width(), target_bounds_.shelf_bounds.height()), gfx::Rect(0, 0, target_bounds_.shelf_bounds.width(), @@ -1770,7 +1773,7 @@ // because there should be a linear transition to the home launcher gesture. translate = drag_amount_; } else { - const bool resist = SelectValueForShelfAlignment( + const bool resist = shelf_->SelectValueForShelfAlignment( drag_amount_<-resistance_free_region, drag_amount_> resistance_free_region, drag_amount_ < -resistance_free_region); @@ -1788,7 +1791,7 @@ const gfx::Rect available_bounds = screen_util::GetDisplayBoundsWithShelf(shelf_widget_->GetNativeWindow()); - const int baseline = SelectValueForShelfAlignment( + const int baseline = shelf_->SelectValueForShelfAlignment( available_bounds.bottom() - (shelf_hidden_at_start ? 0 : shelf_size), available_bounds.x() - (shelf_hidden_at_start ? shelf_size : 0), available_bounds.right() - (shelf_hidden_at_start ? 0 : shelf_size)); @@ -1879,7 +1882,7 @@ gfx::Rect ShelfLayoutManager::GetAutoHideShowShelfRegionInScreen() const { gfx::Rect shelf_bounds_in_screen = GetVisibleShelfBounds(); - gfx::Vector2d offset = SelectValueForShelfAlignment( + gfx::Vector2d offset = shelf_->SelectValueForShelfAlignment( gfx::Vector2d(0, shelf_bounds_in_screen.height()), gfx::Vector2d(-kMaxAutoHideShowShelfRegionSize, 0), gfx::Vector2d(shelf_bounds_in_screen.width(), 0)); @@ -2445,7 +2448,7 @@ } else { if (drag_start_point_in_screen_ == gfx::Point()) drag_start_point_in_screen_ = event_in_screen.location(); - drag_amount_ += PrimaryAxisValue(scroll_y, scroll_x); + drag_amount_ += shelf_->PrimaryAxisValue(scroll_y, scroll_x); if (event_in_screen.type() == ui::ET_SCROLL_FLING_START) { last_drag_velocity_ = event_in_screen.AsGestureEvent()->details().velocity_y();
diff --git a/ash/shelf/shelf_layout_manager.h b/ash/shelf/shelf_layout_manager.h index 4d4a65f..a2b6193 100644 --- a/ash/shelf/shelf_layout_manager.h +++ b/ash/shelf/shelf_layout_manager.h
@@ -268,28 +268,6 @@ return drag_status_ == kDragAppListInProgress; } - // TODO(harrym|oshima): These templates will be moved to a new Shelf class. - // A helper function for choosing values specific to a shelf alignment. - template <typename T> - T SelectValueForShelfAlignment(T bottom, T left, T right) const { - switch (shelf_->alignment()) { - case ShelfAlignment::kBottom: - case ShelfAlignment::kBottomLocked: - return bottom; - case ShelfAlignment::kLeft: - return left; - case ShelfAlignment::kRight: - return right; - } - NOTREACHED(); - return right; - } - - template <typename T> - T PrimaryAxisValue(T horizontal, T vertical) const { - return shelf_->IsHorizontalAlignment() ? horizontal : vertical; - } - private: class UpdateShelfObserver; friend class DimShelfLayoutManagerTestBase;
diff --git a/ash/shelf/shelf_navigation_widget.cc b/ash/shelf/shelf_navigation_widget.cc index 52b2c53d2..96f3259 100644 --- a/ash/shelf/shelf_navigation_widget.cc +++ b/ash/shelf/shelf_navigation_widget.cc
@@ -173,11 +173,18 @@ void ShelfNavigationWidget::Delegate::UpdateOpaqueBackground() { opaque_background_.SetColor(ShelfConfig::Get()->GetShelfControlButtonColor()); + // Hide background if no buttons should be shown. + if (!IsHomeButtonShown() && !IsBackButtonShown()) { + opaque_background_.SetVisible(false); + return; + } + if (chromeos::switches::ShouldShowShelfHotseat() && IsTabletMode() && ShelfConfig::Get()->is_in_app()) { opaque_background_.SetVisible(false); return; } + opaque_background_.SetVisible(true); int radius = ShelfConfig::Get()->control_border_radius();
diff --git a/ash/shelf/shelf_widget.cc b/ash/shelf/shelf_widget.cc index 57f6b3c0..09b482e 100644 --- a/ash/shelf/shelf_widget.cc +++ b/ash/shelf/shelf_widget.cc
@@ -17,6 +17,7 @@ #include "ash/public/cpp/window_properties.h" #include "ash/root_window_controller.h" #include "ash/session/session_controller_impl.h" +#include "ash/shelf/drag_handle.h" #include "ash/shelf/home_button.h" #include "ash/shelf/hotseat_transition_animator.h" #include "ash/shelf/hotseat_widget.h" @@ -165,7 +166,7 @@ // A drag handle shown in tablet mode when we are not on the home screen. // Owned by the view hierarchy. - views::View* drag_handle_ = nullptr; + DragHandle* drag_handle_ = nullptr; // When true, the default focus of the shelf is the last focusable child. bool default_last_focusable_child_ = false; @@ -197,26 +198,18 @@ ShowAnimatingBackground(false); animating_background_.SetColor(ShelfConfig::Get()->GetMaximizedShelfColor()); - std::unique_ptr<views::View> drag_handle_ptr = - std::make_unique<views::View>(); - const int radius = kDragHandleCornerRadius; const AshColorProvider::RippleAttributes ripple_attributes = AshColorProvider::Get()->GetRippleAttributes( ShelfConfig::Get()->GetDefaultShelfColor()); - drag_handle_ = AddChildView(std::move(drag_handle_ptr)); - drag_handle_->SetPaintToLayer(ui::LAYER_SOLID_COLOR); - drag_handle_->layer()->SetColor(ripple_attributes.base_color); - // TODO(manucornet): Figure out why we need a manual opacity adjustment - // to make this color look the same as the status area highlight. - drag_handle_->layer()->SetOpacity(ripple_attributes.inkdrop_opacity + 0.075); - drag_handle_->layer()->SetRoundedCornerRadius( - {radius, radius, radius, radius}); - drag_handle_->SetSize(kDragHandleSize); + + drag_handle_ = AddChildView(std::make_unique<DragHandle>( + kDragHandleSize, ripple_attributes, kDragHandleCornerRadius)); animating_drag_handle_.SetColor(ripple_attributes.base_color); animating_drag_handle_.SetOpacity(ripple_attributes.inkdrop_opacity + 0.075); animating_drag_handle_.SetRoundedCornerRadius( - {radius, radius, radius, radius}); + {kDragHandleCornerRadius, kDragHandleCornerRadius, + kDragHandleCornerRadius, kDragHandleCornerRadius}); } ShelfWidget::DelegateView::~DelegateView() = default;
diff --git a/ash/shelf/test/shelf_layout_manager_test_base.cc b/ash/shelf/test/shelf_layout_manager_test_base.cc index c3cac3d49..929818f 100644 --- a/ash/shelf/test/shelf_layout_manager_test_base.cc +++ b/ash/shelf/test/shelf_layout_manager_test_base.cc
@@ -74,22 +74,19 @@ Shelf* shelf = AshTestBase::GetPrimaryShelf(); gfx::Rect shelf_bounds = GetShelfWidget()->GetWindowBoundsInScreen(); - float scroll_delta = - GetShelfLayoutManager()->PrimaryAxisValue(scroll_.y(), scroll_.x()); - bool increasing_drag = - GetShelfLayoutManager()->SelectValueForShelfAlignment( - scroll_delta<0, scroll_delta> 0, scroll_delta < 0); - const int shelf_size = GetShelfLayoutManager()->PrimaryAxisValue( - shelf_bounds.height(), shelf_bounds.width()); + float scroll_delta = shelf->PrimaryAxisValue(scroll_.y(), scroll_.x()); + bool increasing_drag = shelf->SelectValueForShelfAlignment( + scroll_delta<0, scroll_delta> 0, scroll_delta < 0); + const int shelf_size = + shelf->PrimaryAxisValue(shelf_bounds.height(), shelf_bounds.width()); if (was_visible_on_drag_start_) { if (increasing_drag) { // If dragging inwards from the visible state, then the shelf should // 'overshoot', but not by more than the scroll delta. - const int bounds_delta = - GetShelfLayoutManager()->SelectValueForShelfAlignment( - visible_shelf_bounds_.y() - shelf_bounds.y(), - shelf_bounds.x() - visible_shelf_bounds_.x(), - visible_shelf_bounds_.x() - shelf_bounds.x()); + const int bounds_delta = shelf->SelectValueForShelfAlignment( + visible_shelf_bounds_.y() - shelf_bounds.y(), + shelf_bounds.x() - visible_shelf_bounds_.x(), + visible_shelf_bounds_.x() - shelf_bounds.x()); EXPECT_GE(bounds_delta, 0); EXPECT_LE(bounds_delta, std::abs(scroll_delta)); } else {
diff --git a/ash/strings/ash_strings_fr-CA.xtb b/ash/strings/ash_strings_fr-CA.xtb index 8233451..22b57d64 100644 --- a/ash/strings/ash_strings_fr-CA.xtb +++ b/ash/strings/ash_strings_fr-CA.xtb
@@ -112,6 +112,7 @@ <translation id="2352467521400612932">Paramètres du stylet</translation> <translation id="2354174487190027830">Activation du réseau <ph name="NAME" /> en cours…</translation> <translation id="2359808026110333948">Continuer</translation> +<translation id="2364154243880592194">Barre d'état, heure <ph name="TIME" />, <ph name="BATTERY" /> Appuyez sur les touches Rechercher+Gauche pour accéder au centre de notifications.</translation> <translation id="2365393535144473978">L'activation des données mobiles activera le Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2412593942846481727">Mise à jour disponible</translation> @@ -335,6 +336,7 @@ <translation id="5669267381087807207">Activation en cours…</translation> <translation id="5673434351075758678">De « <ph name="FROM_LOCALE" /> à « <ph name="TO_LOCALE" /> » après la synchronisation de vos paramètres.</translation> <translation id="5682642926269496722">L'Assistant Google n'est pas accessible pour le compte d'utilisateur actuel.</translation> +<translation id="5689633613396158040">Le mode Éclairage nocturne permet de regarder l'écran plus facilement lorsque l'éclairage est faible. Touchez l'écran pour modifier l'heure à laquelle le mode Éclairage nocturne s'active ou se désactive complètement.</translation> <translation id="5691772641933328258">Empreinte digitale non reconnue</translation> <translation id="5710450975648804523">Mode Ne pas déranger activé</translation> <translation id="573413375004481890">Cet appareil ne prend pas en charge tous vos écrans, alors l'un d'eux a été déconnecté</translation> @@ -514,6 +516,7 @@ <translation id="8142441511840089262">Double-clic</translation> <translation id="8142699993796781067">Réseau privé</translation> <translation id="8152092012181020186">Appuyez sur les touches Ctrl + W pour fermer.</translation> +<translation id="8155007568264258537"><ph name="FEATURE_NAME" /> C'est votre administrateur qui gère ce paramètre.</translation> <translation id="8167567890448493835">Paramètres régionaux utilisés : <ph name="LOCALE_NAME" /></translation> <translation id="8190698733819146287">Personnaliser les langues et l'entrée...</translation> <translation id="8192202700944119416">Les notifications sont masquées.</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb index 59f0e94..11a3adaa 100644 --- a/ash/strings/ash_strings_fr.xtb +++ b/ash/strings/ash_strings_fr.xtb
@@ -112,7 +112,7 @@ <translation id="2352467521400612932">Paramètres du stylet</translation> <translation id="2354174487190027830">Activation du réseau <ph name="NAME" /> en cours…</translation> <translation id="2359808026110333948">Continuer</translation> -<translation id="2364154243880592194">Barre d'état, heure <ph name="TIME" />, <ph name="BATTERY" /> Appuyez sur la touche de recherche et sur celle vers la gauche pour accéder au centre de notifications.</translation> +<translation id="2364154243880592194">Barre d'état, heure <ph name="TIME" />, <ph name="BATTERY" /> Appuyez en même temps sur la touche de recherche et la flèche gauche pour accéder au centre de notifications.</translation> <translation id="2365393535144473978">L'activation des données mobiles active également le Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2412593942846481727">Mise à jour disponible</translation> @@ -336,7 +336,7 @@ <translation id="5669267381087807207">Activation</translation> <translation id="5673434351075758678">La langue utilisée est passée de "<ph name="FROM_LOCALE" />" à "<ph name="TO_LOCALE" />" après la synchronisation de vos paramètres.</translation> <translation id="5682642926269496722">L'Assistant Google n'est pas disponible pour le compte utilisateur actuel.</translation> -<translation id="5689633613396158040">Cette fonctionnalité facilite la lecture à l'écran lorsque l'éclairage est faible. Appuyez ici pour redéfinir quand elle doit être activée ou désactivez-la complètement.</translation> +<translation id="5689633613396158040">Cette fonctionnalité facilite la lecture à l'écran lorsque l'éclairage est faible. Appuyez ici pour modifier l'heure à laquelle elle doit s'activer ou désactivez-la complètement.</translation> <translation id="5691772641933328258">Empreinte digitale non reconnue</translation> <translation id="5710450975648804523">Mode "Ne pas déranger" activé</translation> <translation id="573413375004481890">Cet appareil ne peut pas prendre en charge tous vos écrans. L'un d'eux a été déconnecté</translation>
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb index fcc390e2..b853cce 100644 --- a/ash/strings/ash_strings_gu.xtb +++ b/ash/strings/ash_strings_gu.xtb
@@ -112,6 +112,7 @@ <translation id="2352467521400612932">સ્ટાઇલસની સેટિંગ</translation> <translation id="2354174487190027830"><ph name="NAME" /> ને સક્રિય કરી રહ્યું છે</translation> <translation id="2359808026110333948">આગળ વધો</translation> +<translation id="2364154243880592194">સ્ટેટસ ટ્રે, સમય <ph name="TIME" />, <ph name="BATTERY" /> નોટિફિકેશન કેન્દ્ર ઍક્સેસ કરવા માટે 'શોધો' + ડાબી ઍરો કી દબાવો.</translation> <translation id="2365393535144473978">મોબાઇલ ડેટા ચાલુ કરવાથી બ્લૂટૂથ ચાલુ થશે.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2412593942846481727">અપડેટ ઉપલબ્ધ છે</translation> @@ -335,6 +336,7 @@ <translation id="5669267381087807207">સક્રિય કરી રહ્યું છે</translation> <translation id="5673434351075758678">તમારી સેટિંગને સિંક કર્યા પછી "<ph name="FROM_LOCALE" />" થી "<ph name="TO_LOCALE" />"માં ફેરવો.</translation> <translation id="5682642926269496722">હાલના વપરાશકર્તા એકાઉન્ટ માટે Google આસિસ્ટંટ ઉપલબ્ધ નથી.</translation> +<translation id="5689633613396158040">રાત્રિ પ્રકાશથી તમે સરળતાથી તમારી સ્ક્રીનને જોઈ શકો છો અથવા ઓછા પ્રકાશમાં વાંચી શકો છો. રાત્રિ પ્રકાશ ચાલુ થવાનો સમય બદલવા અથવા તેને સંપૂર્ણપણે બંધ કરવા ટૅપ કરો.</translation> <translation id="5691772641933328258">ફિંગરપ્રિન્ટ ઓળખી શકાઈ નથી</translation> <translation id="5710450975648804523">ખલેલ પાડશો નહીં ચાલુ છે</translation> <translation id="573413375004481890">આ ડિવાઇસ તમારા બધા ડિસ્પ્લેને સપોર્ટ કરી શક્યું નથી, તેથી એકને ડિસ્કનેક્ટ કરવામાં આવ્યું છે</translation> @@ -514,6 +516,7 @@ <translation id="8142441511840089262">ડબલ ક્લિક કરો</translation> <translation id="8142699993796781067">ખાનગી નેટવર્ક</translation> <translation id="8152092012181020186">બંધ કરવા માટે Ctrl + W દબાવો.</translation> +<translation id="8155007568264258537"><ph name="FEATURE_NAME" /> આ સેટિંગને તમારા વ્યવસ્થાપક દ્વારા મેનેજ કરવામાં આવે છે.</translation> <translation id="8167567890448493835"><ph name="LOCALE_NAME" />નો ઉપયોગ કરી રહ્યા છે</translation> <translation id="8190698733819146287">ભાષાઓ અને ઇનપુટને કસ્ટમાઇઝ કરો...</translation> <translation id="8192202700944119416">નોટિફિકેશન છુપાવેલા છે.</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb index 48cccd2..ec57c37 100644 --- a/ash/strings/ash_strings_id.xtb +++ b/ash/strings/ash_strings_id.xtb
@@ -112,7 +112,7 @@ <translation id="2352467521400612932">Setelan stilus</translation> <translation id="2354174487190027830">Mengaktifkan <ph name="NAME" /></translation> <translation id="2359808026110333948">Lanjutkan</translation> -<translation id="2364154243880592194">Menu status , waktu <ph name="TIME" />, <ph name="BATTERY" /> Tekan penelusuran + panah kiri untuk mengakses pusat notifikasi.</translation> +<translation id="2364154243880592194">Menu status, waktu <ph name="TIME" />, <ph name="BATTERY" /> Tekan penelusuran + panah kiri untuk mengakses pusat notifikasi.</translation> <translation id="2365393535144473978">Mengaktifkan data seluler akan mengaktifkan Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2412593942846481727">Update tersedia</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb index f7d7502..c9bd473 100644 --- a/ash/strings/ash_strings_kn.xtb +++ b/ash/strings/ash_strings_kn.xtb
@@ -112,7 +112,7 @@ <translation id="2352467521400612932">ಸ್ಟೈಲಸ್ ಸೆಟ್ಟಿಂಗ್ಗಳು</translation> <translation id="2354174487190027830"><ph name="NAME" /> ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತಿದೆ</translation> <translation id="2359808026110333948">ಮುಂದುವರೆಸಿ</translation> -<translation id="2364154243880592194">ಸ್ಥಿತಿ ಟ್ರೇ, ಸಮಯ <ph name="TIME" />, <ph name="BATTERY" /> ಅಧಿಸೂಚನೆ ಕೇಂದ್ರವನ್ನು ಪ್ರವೇಶಿಸಲು ಹುಡುಕಾಟ + ಎಡ ಅನ್ನು ಒತ್ತಿರಿ.</translation> +<translation id="2364154243880592194">ಸ್ಥಿತಿ ಟ್ರೇ, ಸಮಯ <ph name="TIME" />, <ph name="BATTERY" /> ಅಧಿಸೂಚನೆ ಕೇಂದ್ರವನ್ನು ಪ್ರವೇಶಿಸಲು ಹುಡುಕಾಟ + ಎಡ ಬಟನ್ ಅನ್ನು ಒತ್ತಿರಿ.</translation> <translation id="2365393535144473978">ಮೊಬೈಲ್ ಡೇಟಾವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವುದರಿಂದ ಬ್ಲೂಟೂತ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2412593942846481727">ಅಪ್ಡೇಟ್ ಲಭ್ಯವಿದೆ</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb index 20c6018..9dc3262 100644 --- a/ash/strings/ash_strings_ml.xtb +++ b/ash/strings/ash_strings_ml.xtb
@@ -112,6 +112,7 @@ <translation id="2352467521400612932">സ്റ്റൈലസ് ക്രമീകരണം</translation> <translation id="2354174487190027830"><ph name="NAME" /> സജീവമാക്കുന്നു</translation> <translation id="2359808026110333948">തുടരുക</translation> +<translation id="2364154243880592194">സ്റ്റാറ്റസ് ട്രേ, സമയം <ph name="TIME" />, <ph name="BATTERY" /> അറിയിപ്പ് കേന്ദ്രം ആക്സസ് ചെയ്യാൻ തിരയൽ + ഇടത് അമ്പടയാളം അമർത്തുക.</translation> <translation id="2365393535144473978">മൊബൈൽ ഡാറ്റ പ്രവർത്തനക്ഷമമാക്കുമ്പോൾ Bluetooth-ഉം പ്രവർത്തനക്ഷമമാകും.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2412593942846481727">അപ്ഡേറ്റ് ലഭ്യമാണ്</translation> @@ -335,6 +336,7 @@ <translation id="5669267381087807207">സജീവമാക്കുന്നു</translation> <translation id="5673434351075758678">നിങ്ങളുടെ ക്രമീകരണം സമന്വയിപ്പിച്ചതിന് ശേഷം, "<ph name="FROM_LOCALE" />" എന്നതിൽ നിന്ന്"<ph name="TO_LOCALE" />" എന്നതിലേക്ക്.</translation> <translation id="5682642926269496722">നിലവിലെ ഉപയോക്തൃ അക്കൗണ്ടിന് Google അസിസ്റ്റന്റ് ലഭ്യമല്ല.</translation> +<translation id="5689633613396158040">മങ്ങിയ വെളിച്ചത്തിൽ സ്ക്രീനിൽ നോക്കുന്നതോ വായിക്കുന്നതോ നൈറ്റ് ലൈറ്റ് എളുപ്പമാക്കുന്നു. നൈറ്റ് ലൈറ്റ് പൂർണ്ണമായി ഓഫാകുകയോ ഓണാകുകയോ ചെയ്യേണ്ട സമയം മാറ്റാൻ ടാപ്പ് ചെയ്യുക.</translation> <translation id="5691772641933328258">വിരലടയാളം തിരിച്ചറിഞ്ഞില്ല</translation> <translation id="5710450975648804523">'ശല്യപ്പെടുത്തരുത്' ഓണാണ്</translation> <translation id="573413375004481890">ഈ ഉപകരണത്തിന് നിങ്ങളുടെ എല്ലാ ഡിസ്പ്ലേകൾക്കും പിന്തുണ നൽകാനാവാത്തതിനാൽ ഒന്ന് വിച്ഛേദിച്ചു</translation> @@ -514,6 +516,7 @@ <translation id="8142441511840089262">ഇരട്ട ക്ലിക്ക് ചെയ്യുക</translation> <translation id="8142699993796781067">സ്വകാര്യ നെറ്റ്വര്ക്ക്</translation> <translation id="8152092012181020186">അടയ്ക്കാൻ Ctrl + W അമർത്തുക.</translation> +<translation id="8155007568264258537"><ph name="FEATURE_NAME" /> ഈ ക്രമീകരണം മാനേജ് ചെയ്യുന്നത് നിങ്ങളുടെ അഡ്മിനാണ്.</translation> <translation id="8167567890448493835"><ph name="LOCALE_NAME" /> ഉപയോഗിക്കുന്നു</translation> <translation id="8190698733819146287">ഭാഷകൾ ഇച്ഛാനുസൃതമാക്കി നല്കുക...</translation> <translation id="8192202700944119416">അറിയിപ്പുകൾ അദൃശ്യമാക്കിയിരിക്കുന്നു.</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb index a91554a..0a9b094 100644 --- a/ash/strings/ash_strings_mr.xtb +++ b/ash/strings/ash_strings_mr.xtb
@@ -112,6 +112,7 @@ <translation id="2352467521400612932">स्टायलस सेटिंग्ज</translation> <translation id="2354174487190027830"><ph name="NAME" /> सक्रिय करत आहे</translation> <translation id="2359808026110333948">सुरू ठेवा</translation> +<translation id="2364154243880592194">स्थिती ट्रे, वेळ <ph name="TIME" />, <ph name="BATTERY" /> सूचना केंद्र ॲक्सेस करण्यासाठी शोध + डावे बटण दाबा.</translation> <translation id="2365393535144473978">मोबाइल डेटा सुरू केल्याने ब्लूटूथ सुरू होईल.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2412593942846481727">अपडेट उपलब्ध आहे</translation> @@ -335,6 +336,7 @@ <translation id="5669267381087807207">सक्रिय करीत आहे </translation> <translation id="5673434351075758678">तुमच्या सेटिंग्ज सिंक केल्यानंतर "<ph name="FROM_LOCALE" />" पासून "<ph name="TO_LOCALE" />" पर्यंत.</translation> <translation id="5682642926269496722">सध्याच्या वापरकर्ता खात्यावर Google असिस्टंट उपलब्ध नाही.</translation> +<translation id="5689633613396158040">रात्रीचा प्रकाश तुमच्या स्क्रीनकडे पाहणे किंवा मंद प्रकाशात वाचणे आणखी सोपे करते. रात्रीचा प्रकाश कधी सुरू होईल किंवा पूर्ण बंद होईल हे बदलण्यासाठी टॅप करा.</translation> <translation id="5691772641933328258">फिंगरप्रिंट ओळखले नाही</translation> <translation id="5710450975648804523">व्यत्यय आणू नका सुरू आहे</translation> <translation id="573413375004481890">हे डिव्हाइस तुमच्या सर्व डिस्प्लेंना सपोर्ट करू शकले नाही, त्यामुळे एक डिस्प्ले डिस्कनेक्ट केला गेला</translation> @@ -514,6 +516,7 @@ <translation id="8142441511840089262">डबल क्लिक करा</translation> <translation id="8142699993796781067">खाजगी नेटवर्क</translation> <translation id="8152092012181020186">बंद करण्यासाठी Ctrl + W दाबा.</translation> +<translation id="8155007568264258537"><ph name="FEATURE_NAME" /> हे सेटिंग तुमच्या अॅडमिनिस्ट्रेटरद्वारे व्यवस्थापित केले जाते.</translation> <translation id="8167567890448493835"><ph name="LOCALE_NAME" /> वापरत आहे</translation> <translation id="8190698733819146287">भाषा आणि इनपुट कस्टमाइझ करा...</translation> <translation id="8192202700944119416">सूचना लपवलेल्या आहेत.</translation>
diff --git a/ash/strings/ash_strings_ne.xtb b/ash/strings/ash_strings_ne.xtb index a4530b00..22346dc 100644 --- a/ash/strings/ash_strings_ne.xtb +++ b/ash/strings/ash_strings_ne.xtb
@@ -112,6 +112,7 @@ <translation id="2352467521400612932">स्टाइलस सम्बन्धी सेटिङहरू</translation> <translation id="2354174487190027830"><ph name="NAME" /> लाई सक्रिय बनाउँदै</translation> <translation id="2359808026110333948">जारी राख्नुहोस्</translation> +<translation id="2364154243880592194">स्थिति ट्रे, समय <ph name="TIME" />, <ph name="BATTERY" /> सूचना केन्द्रमाथि पहुँच राख्न खोज्नुहोस् तथा सूचना केन्द्रमाथि पहुँच राख्नुहोस् नामक विकल्पको बायाँ भागमा थिच्नुहोस्</translation> <translation id="2365393535144473978">मोबाइल डेटा सक्षम पार्नुले ब्लुटुथ सक्षम हुनेछ।</translation> <translation id="2391579633712104609">180°</translation> <translation id="2412593942846481727">अद्यावधिक उपलब्ध छ</translation> @@ -335,6 +336,7 @@ <translation id="5669267381087807207">सक्रिय गर्दै</translation> <translation id="5673434351075758678">तपाईंका सेटिङहरू सिंक पश्चात् "<ph name="TO_LOCALE" />" बाट "<ph name="FROM_LOCALE" />" मा परिवर्तन भएका छन्।</translation> <translation id="5682642926269496722">हालको प्रयोगकर्ताको खातामा Google सहायक उपलब्ध छैन।</translation> +<translation id="5689633613396158040">रात्रि प्रकाशले मधुरो प्रकाशमा आफ्नो स्क्रिनमा हेर्न वा पढ्न अझ सजिलो बनाउँछ। रात्रि प्रकाश सक्रिय हुने समय परिवर्तन गर्न वा यसलाई पूर्ण रूपमा निष्क्रिय पार्न ट्याप गर्नुहोस्।</translation> <translation id="5691772641933328258">फिंगरप्रिन्ट पहिचान गरिएन</translation> <translation id="5710450975648804523">बाधा नपुर्याउनुहोस् नामक सेवा सक्रिय छ</translation> <translation id="573413375004481890">यो यन्त्रले तपाईंको कुनै पनि डिस्प्ले समर्थन गर्न सकेन, त्यसैले एउटाको जडान विच्छेद गरियो</translation> @@ -514,6 +516,7 @@ <translation id="8142441511840089262">दुई पटक क्लिक गर्नुहोस्</translation> <translation id="8142699993796781067">निजी नेटवर्क</translation> <translation id="8152092012181020186">बन्द गर्न Ctrl + W थिच्नुहोस्।</translation> +<translation id="8155007568264258537"><ph name="FEATURE_NAME" /> तपाईंका प्रशासक यो सेटिङ मिलाउनुहुन्छ।</translation> <translation id="8167567890448493835"><ph name="LOCALE_NAME" /> प्रयोग गर्दै</translation> <translation id="8190698733819146287">भाषा तथा इन्पुट आफू अनुकूल गर्नुहोस् ...</translation> <translation id="8192202700944119416">सूचनाहरू लुकाइन्छन्।</translation>
diff --git a/ash/strings/ash_strings_or.xtb b/ash/strings/ash_strings_or.xtb index 0ba78f0..31703cf 100644 --- a/ash/strings/ash_strings_or.xtb +++ b/ash/strings/ash_strings_or.xtb
@@ -112,6 +112,7 @@ <translation id="2352467521400612932">ଷ୍ଟାଇଲସ୍ ସେଟିଂ</translation> <translation id="2354174487190027830"><ph name="NAME" /> ସକ୍ରିୟ କରାଯାଉଛି</translation> <translation id="2359808026110333948">ଜାରି ରଖନ୍ତୁ</translation> +<translation id="2364154243880592194">ସ୍ଥିତି ଟ୍ରେ, ସମୟ <ph name="TIME" />, <ph name="BATTERY" /> ବିଜ୍ଞପ୍ତି କେନ୍ଦ୍ରକୁ ଆକ୍ସେସ୍ କରିବା ପାଇଁ search + left ଦବାନ୍ତୁ।</translation> <translation id="2365393535144473978">ମୋବାଇଲ୍ ଡାଟା ସକ୍ଷମ କରିବାରେ ବ୍ଲୁଟୁଥ୍ ସକ୍ଷମ ହେବ।</translation> <translation id="2391579633712104609">180°</translation> <translation id="2412593942846481727">ଅପ୍ଡେଟ୍ ଉପଲବ୍ଧ ଅଛି</translation> @@ -335,6 +336,7 @@ <translation id="5669267381087807207">ସକ୍ରିୟ କରାଯାଉଛି</translation> <translation id="5673434351075758678">ଆପଣଙ୍କର ସେଟିଂସ୍ ସିଙ୍କ୍ ହେବା ପରେ "<ph name="FROM_LOCALE" />"ରୁ "<ph name="TO_LOCALE" />" ପର୍ଯ୍ୟନ୍ତ।</translation> <translation id="5682642926269496722">ବର୍ତ୍ତମାନର ଉପଯୋଗକର୍ତ୍ତା ଆକାଉଣ୍ଟ ପାଇଁ Google Assistant ଉପଲବ୍ଧ ନାହିଁ।</translation> +<translation id="5689633613396158040">ନାଇଟ୍ ଲାଇଟ୍ କମ୍ ଆଲୋକରେ ଆପଣଙ୍କର ସ୍କ୍ରିନକୁ ଦେଖିବା କିମ୍ବା ପଢ଼ିବା ସହଜ କରିଥାଏ। କେଉଁ ସମୟରେ ନାଇଟ୍ ଲାଇଟ୍ ଚାଲୁ କରାଯିବ କିମ୍ବା ଏହାକୁ ସମ୍ପୂର୍ଣ୍ଣ ରୂପେ ବନ୍ଦ କରାଯିବ ତାହା ବଦଳାଇବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ।</translation> <translation id="5691772641933328258">ଟିପ ଚିହ୍ନ ଚିହ୍ନଟ ହେଲାନାହିଁ</translation> <translation id="5710450975648804523">"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ" ଚାଲୁ ଅଛି</translation> <translation id="573413375004481890">ଏହି ଡିଭାଇସ୍ ଆପଣଙ୍କର ସମସ୍ତ ଡିସ୍ପ୍ଲେକୁ ସମର୍ଥନ କରିପାରିଲା ନାହିଁ, ତେଣୁ ଗୋଟିଏକୁ ବିଚ୍ଛିନ୍ନ କରିଦିଆଯାଇଛି</translation> @@ -514,6 +516,7 @@ <translation id="8142441511840089262">ଦୁଇଥର କ୍ଲିକ୍ କରନ୍ତୁ</translation> <translation id="8142699993796781067">ବ୍ୟକ୍ତିଗତ ନେଟ୍ୱର୍କ</translation> <translation id="8152092012181020186">ବନ୍ଦ କରିବାକୁ Ctrl + W ଦବାନ୍ତୁ।</translation> +<translation id="8155007568264258537"><ph name="FEATURE_NAME" /> ଏହି ସେଟିଂ ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ଦ୍ୱାରା ପରିଚାଳିତ ହୁଏ।</translation> <translation id="8167567890448493835"><ph name="LOCALE_NAME" />କୁ ବ୍ୟବହାର କରାଯାଉଛି</translation> <translation id="8190698733819146287">ଭାଷାଗୁଡ଼ିକୁ ଏବଂ ଇନ୍ପୁଟ୍କୁ କଷ୍ଟମାଇଜ୍ କରନ୍ତୁ...</translation> <translation id="8192202700944119416">ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ଲୁଚାଯାଇଛି।</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb index e474dde..8fabb97 100644 --- a/ash/strings/ash_strings_te.xtb +++ b/ash/strings/ash_strings_te.xtb
@@ -112,6 +112,7 @@ <translation id="2352467521400612932">స్టైలస్ సెట్టింగ్లు</translation> <translation id="2354174487190027830"><ph name="NAME" />ని సక్రియం చేస్తోంది</translation> <translation id="2359808026110333948">కొనసాగించు</translation> +<translation id="2364154243880592194">స్థితి ట్రే, సమయం <ph name="TIME" />, <ph name="BATTERY" /> నోటిఫికేషన్ కేంద్రాన్ని యాక్సెస్ చేయడానికి శోధన + ఎడమను నొక్కండి.</translation> <translation id="2365393535144473978">మొబైల్ డేటాను ప్రారంభిస్తే బ్లూటూత్ను ఆరంభిస్తుంది.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2412593942846481727">అప్డేట్ అందుబాటులో ఉంది</translation> @@ -336,6 +337,7 @@ <translation id="5669267381087807207">సక్రియం చేస్తోంది</translation> <translation id="5673434351075758678">మీ సెట్టింగులను సమకాలీకరించిన తర్వాత "<ph name="FROM_LOCALE" />" నుండి "<ph name="TO_LOCALE" />"కి.</translation> <translation id="5682642926269496722">ప్రస్తుత వినియోగదారు ఖాతాలో Google అసిస్టెంట్ పని చేయదు.</translation> +<translation id="5689633613396158040">రాత్రి కాంతి ఫీచర్ అనేది తక్కువ కాంతి ఉన్న సందర్భాలలో మీ స్క్రీన్ను స్పష్టంగా చూడటాన్ని లేదా చదవడాన్ని మరింత సులభతరం చేస్తుంది. నైట్ లైట్ ఆన్ చేసే సమయాన్ని మార్చడానికి నొక్కండి లేదా దాన్ని పూర్తిగా ఆపివేయండి.</translation> <translation id="5691772641933328258">వేలిముద్ర గుర్తించబడలేదు</translation> <translation id="5710450975648804523">'అంతరాయం కలిగించవద్దు' మోడ్ ఆన్లో ఉంది</translation> <translation id="573413375004481890">ఈ పరికరం మీ అన్ని ప్రదర్శన స్క్రీన్లకు మద్దతు ఇవ్వలేదు, కాబట్టి ఒకటి డిస్కనెక్ట్ చేయబడింది</translation> @@ -515,6 +517,7 @@ <translation id="8142441511840089262">రెండు సార్లు క్లిక్ చేయండి</translation> <translation id="8142699993796781067">ప్రైవేట్ నెట్వర్క్</translation> <translation id="8152092012181020186">మూసివేయడానికి Ctrl + W నొక్కండి.</translation> +<translation id="8155007568264258537"><ph name="FEATURE_NAME" /> ఈ సెట్టింగ్ మీ నిర్వాహకుడి ద్వారా నిర్వహించబడుతుంది.</translation> <translation id="8167567890448493835"><ph name="LOCALE_NAME" />ని ఉపయోగిస్తోంది</translation> <translation id="8190698733819146287">భాషలు మరియు ఇన్పుట్ పద్ధతిని అనుకూలీకరించండి...</translation> <translation id="8192202700944119416">నోటిఫికేషన్లు దాచబడ్డాయి.</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb index a8fe0c7..90a8aea 100644 --- a/ash/strings/ash_strings_th.xtb +++ b/ash/strings/ash_strings_th.xtb
@@ -112,6 +112,7 @@ <translation id="2352467521400612932">การตั้งค่าสไตลัส</translation> <translation id="2354174487190027830">กำลังเปิดใช้งาน <ph name="NAME" /></translation> <translation id="2359808026110333948">ต่อไป</translation> +<translation id="2364154243880592194">ถาดสถานะ, เวลา <ph name="TIME" />, <ph name="BATTERY" /> กด "ค้นหา" + ลูกศรซ้าย เพื่อเข้าถึงศูนย์การแจ้งเตือน</translation> <translation id="2365393535144473978">การเปิดใช้เน็ตมือถือจะเปิดใช้บลูทูธ</translation> <translation id="2391579633712104609">180°</translation> <translation id="2412593942846481727">มีเวอร์ชันอัปเดต</translation> @@ -335,6 +336,7 @@ <translation id="5669267381087807207">กำลังเปิดการใช้งาน</translation> <translation id="5673434351075758678">เปลี่ยนจาก "<ph name="FROM_LOCALE" />" เป็น "<ph name="TO_LOCALE" />" หลังการซิงก์การตั้งค่า</translation> <translation id="5682642926269496722">Google Assistant ไม่พร้อมใช้งานกับบัญชีผู้ใช้ปัจจุบัน</translation> +<translation id="5689633613396158040">แสงตอนกลางคืนช่วยให้มองหรืออ่านหน้าจอในแสงสลัวได้ง่ายขึ้น แตะเพื่อเปลี่ยนเวลาเปิดแสงตอนกลางคืนหรือจะปิดไปเลยก็ได้</translation> <translation id="5691772641933328258">ระบบไม่รู้จักลายนิ้วมือนี้</translation> <translation id="5710450975648804523">โหมดห้ามรบกวนเปิดอยู่</translation> <translation id="573413375004481890">อุปกรณ์นี้รองรับจอแสดงผลทั้งหมดไม่ได้ ระบบจึงยกเลิกการเชื่อมต่อจอแสดงผลจอหนึ่ง</translation> @@ -514,6 +516,7 @@ <translation id="8142441511840089262">ดับเบิลคลิก</translation> <translation id="8142699993796781067">เครือข่ายส่วนบุคคล</translation> <translation id="8152092012181020186">กด Ctrl + W เพื่อปิด</translation> +<translation id="8155007568264258537"><ph name="FEATURE_NAME" /> การตั้งค่านี้จัดการโดยผู้ดูแลระบบ</translation> <translation id="8167567890448493835">กำลังใช้<ph name="LOCALE_NAME" /></translation> <translation id="8190698733819146287">กำหนดค่าภาษาและการป้อนข้อมูล... </translation> <translation id="8192202700944119416">ซ่อนการแจ้งเตือนไว้</translation>
diff --git a/ash/strings/ash_strings_ur.xtb b/ash/strings/ash_strings_ur.xtb index 68d6bb57..0ed38b8a 100644 --- a/ash/strings/ash_strings_ur.xtb +++ b/ash/strings/ash_strings_ur.xtb
@@ -112,6 +112,7 @@ <translation id="2352467521400612932">اسٹائلس کی ترتیبات</translation> <translation id="2354174487190027830"><ph name="NAME" /> کو فعال کیا جا رہا ہے</translation> <translation id="2359808026110333948">جاری رکھیں</translation> +<translation id="2364154243880592194">اطلاع کے مرکز تک رسائی کے لیے صورتحال کی ٹرے،<ph name="TIME" /> وقت، <ph name="BATTERY" /> تلاش + بائیں تیر والی بٹن کو دبائيں۔</translation> <translation id="2365393535144473978">موبائل ڈیٹا فعال کرنے سے بلوٹوتھ فعال ہو جائے گا۔</translation> <translation id="2391579633712104609">180°</translation> <translation id="2412593942846481727">اپ ڈیٹ دستیاب ہے</translation> @@ -335,6 +336,7 @@ <translation id="5669267381087807207">فعال کیا جا رہا ہے</translation> <translation id="5673434351075758678">آپ کی ترتیبات کی مطابقت پذیری کے بعد '<ph name="FROM_LOCALE" />' سے ''<ph name="TO_LOCALE" /> میں۔</translation> <translation id="5682642926269496722">Google اسسٹنٹ موجودہ صارف اکاؤنٹ کے لیے دستیاب نہیں ہے۔</translation> +<translation id="5689633613396158040">نائٹ لائٹ سے مدھم روشنی میں اپنی اسکرین کو دیکھنا یا پڑھنا آسان ہو جاتا ہے۔ نائٹ لائٹ کے آن ہونے کے وقت کو تبدیل کرنے کے لئے تھپتھپائیں یا اسے مکمل طور پر آف کر دیں۔</translation> <translation id="5691772641933328258">فنگر پرنٹ کی شناخت نہیں ہو سکی</translation> <translation id="5710450975648804523">'ڈسٹرب نہ کریں' آن ہے</translation> <translation id="573413375004481890">یہ آلہ آپ کے تمام ڈسپلیز کو سپورٹ نہیں کر سکتا، لہذا ایک کو غیر منسلک کر دیا گیا ہے</translation> @@ -514,6 +516,7 @@ <translation id="8142441511840089262">دو بار کلک کریں</translation> <translation id="8142699993796781067">نجی نیٹ ورک</translation> <translation id="8152092012181020186">بند کرنے کے لیے Ctrl + W کو دبائیں۔</translation> +<translation id="8155007568264258537"><ph name="FEATURE_NAME" /> یہ ترتیب آپ کے منتظم کے زیر انتظام ہے۔</translation> <translation id="8167567890448493835"><ph name="LOCALE_NAME" /> استعمال کر کے</translation> <translation id="8190698733819146287">زبانوں اور ان پٹ کو حسب ضرورت بنائیں…</translation> <translation id="8192202700944119416">اطلاعات پوشیدہ ہیں۔</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb index 94ea7e30..54983c8 100644 --- a/ash/strings/ash_strings_zh-CN.xtb +++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -112,6 +112,7 @@ <translation id="2352467521400612932">触控笔设置</translation> <translation id="2354174487190027830">正在激活“<ph name="NAME" />”</translation> <translation id="2359808026110333948">继续</translation> +<translation id="2364154243880592194">状态栏,时间 <ph name="TIME" />,<ph name="BATTERY" />按搜索键 + 向左箭头键可访问通知中心。</translation> <translation id="2365393535144473978">如果您启用移动数据网络,蓝牙亦会随之开启。</translation> <translation id="2391579633712104609">180°</translation> <translation id="2412593942846481727">有可用的更新</translation> @@ -335,6 +336,7 @@ <translation id="5669267381087807207">正在激活</translation> <translation id="5673434351075758678">当系统同步完您的设置后,“<ph name="FROM_LOCALE" />”即会改为“<ph name="TO_LOCALE" />”。</translation> <translation id="5682642926269496722">当前用户帐号无法使用 Google 助理。</translation> +<translation id="5689633613396158040">护眼模式可让您更舒适地在黯淡的光线下查看屏幕或阅读文字。点按即可更改护眼模式的开启时间或彻底关闭护眼模式。</translation> <translation id="5691772641933328258">无法识别指纹</translation> <translation id="5710450975648804523">“请勿打扰”模式已开启</translation> <translation id="573413375004481890">此设备无法支持您的所有显示屏,因此断开了与其中一个显示屏的连接</translation> @@ -514,6 +516,7 @@ <translation id="8142441511840089262">双击</translation> <translation id="8142699993796781067">专用网络</translation> <translation id="8152092012181020186">按 Ctrl + W 即可关闭。</translation> +<translation id="8155007568264258537"><ph name="FEATURE_NAME" />:此设置由您的管理员管理。</translation> <translation id="8167567890448493835">目前使用的是“<ph name="LOCALE_NAME" />”</translation> <translation id="8190698733819146287">自定义语言和输入法...</translation> <translation id="8192202700944119416">已隐藏通知。</translation>
diff --git a/ash/strings/ash_strings_zh-HK.xtb b/ash/strings/ash_strings_zh-HK.xtb index 988944e..e22503ea 100644 --- a/ash/strings/ash_strings_zh-HK.xtb +++ b/ash/strings/ash_strings_zh-HK.xtb
@@ -112,7 +112,7 @@ <translation id="2352467521400612932">觸控筆設定</translation> <translation id="2354174487190027830">正在啟用 <ph name="NAME" /></translation> <translation id="2359808026110333948">繼續</translation> -<translation id="2364154243880592194">狀態匣,時間 <ph name="TIME" />,<ph name="BATTERY" />。按下搜尋鍵 + 向左鍵即可存取通知中心。</translation> +<translation id="2364154243880592194">狀態列,時間係 <ph name="TIME" />,<ph name="BATTERY" />。㩒搜尋鍵同埋向左鍵就可以存取通知中心。</translation> <translation id="2365393535144473978">如果您啟用流動數據,藍牙亦會隨之開啟。</translation> <translation id="2391579633712104609">180 度</translation> <translation id="2412593942846481727">有可用的更新</translation> @@ -336,7 +336,7 @@ <translation id="5669267381087807207">啟用</translation> <translation id="5673434351075758678">同步處理您的設定後,系統會將語言從「<ph name="FROM_LOCALE" />」改為「<ph name="TO_LOCALE" />」。</translation> <translation id="5682642926269496722">「Google 助理」不適用於目前的使用者帳戶。</translation> -<translation id="5689633613396158040">夜燈功能可讓你在光線昏暗的環境下更容易看清畫面內容或閱讀文字。輕觸即可變更夜燈的開啟時間,或完全關閉夜燈功能。</translation> +<translation id="5689633613396158040">「夜燈模式」讓您更易在光線昏暗的環境下觀看螢幕內容或閱讀。輕按即可變更「夜燈模式」的開啟時間,或完全關閉此功能。</translation> <translation id="5691772641933328258">識別唔到指紋</translation> <translation id="5710450975648804523">「請勿騷擾」模式已開啟</translation> <translation id="573413375004481890">此裝置無法支援所有顯示屏,因此已取消連接其中一個</translation> @@ -516,7 +516,7 @@ <translation id="8142441511840089262">連按兩下</translation> <translation id="8142699993796781067">私人網絡</translation> <translation id="8152092012181020186">㩒一下 Ctrl + W 就可以閂咗佢。</translation> -<translation id="8155007568264258537"><ph name="FEATURE_NAME" /> 這項設定是由系統管理員管理。</translation> +<translation id="8155007568264258537"><ph name="FEATURE_NAME" />,呢項設定由管理員管理。</translation> <translation id="8167567890448493835">正在使用「<ph name="LOCALE_NAME" />」</translation> <translation id="8190698733819146287">自訂語言與輸入法…</translation> <translation id="8192202700944119416">已隱藏通知。</translation>
diff --git a/ash/system/overview/overview_button_tray.cc b/ash/system/overview/overview_button_tray.cc index 0a33119..c074aa0 100644 --- a/ash/system/overview/overview_button_tray.cc +++ b/ash/system/overview/overview_button_tray.cc
@@ -70,8 +70,10 @@ void OverviewButtonTray::OnGestureEvent(ui::GestureEvent* event) { Button::OnGestureEvent(event); if (event->type() == ui::ET_GESTURE_LONG_PRESS) { - Shell::Get()->overview_controller()->OnOverviewButtonTrayLongPressed( - event->location()); + // TODO(crbug.com/970013): Properly implement the multi-display behavior (in + // tablet position with an external pointing device). + SplitViewController::Get(Shell::GetPrimaryRootWindow()) + ->OnOverviewButtonTrayLongPressed(event->location()); } }
diff --git a/ash/wm/overview/overview_controller.cc b/ash/wm/overview/overview_controller.cc index 334fb87b..e70258a 100644 --- a/ash/wm/overview/overview_controller.cc +++ b/ash/wm/overview/overview_controller.cc
@@ -160,101 +160,6 @@ return overview_session_->AcceptSelection(); } -void OverviewController::OnOverviewButtonTrayLongPressed( - const gfx::Point& event_location) { - // Do nothing if split view is not enabled. - if (!ShouldAllowSplitView()) - return; - - // Depending on the state of the windows and split view, a long press has many - // different results. - // 1. Already in split view - exit split view. The active snapped window - // becomes maximized. If overview was seen alongside a snapped window, then - // overview mode ends. - // 2. Not in overview mode - enter split view iff there is an active window - // and it is snappable. - // 3. In overview mode - enter split view iff there are at least two windows - // in the overview grid for the display where the overview button was long - // pressed, and the first window in that overview grid is snappable. - - // TODO(crbug.com/970013): Properly implement the multi-display behavior (in - // tablet position with an external pointing device). - auto* split_view_controller = - SplitViewController::Get(Shell::GetPrimaryRootWindow()); - // Exit split view mode if we are already in it. - if (split_view_controller->InSplitViewMode()) { - // In some cases the window returned by window_util::GetActiveWindow will be - // an item in overview mode (maybe the overview mode dummy focus widget). - // The active window may also be a transient descendant of the left or right - // snapped window, in which we want to activate the transient window's - // ancestor (left or right snapped window). Manually set |active_window| as - // either the left or right window. - aura::Window* active_window = window_util::GetActiveWindow(); - while (::wm::GetTransientParent(active_window)) - active_window = ::wm::GetTransientParent(active_window); - if (!split_view_controller->IsWindowInSplitView(active_window)) - active_window = split_view_controller->GetDefaultSnappedWindow(); - DCHECK(active_window); - split_view_controller->EndSplitView(); - EndOverview(); - MaximizeIfSnapped(active_window); - wm::ActivateWindow(active_window); - base::RecordAction( - base::UserMetricsAction("Tablet_LongPressOverviewButtonExitSplitView")); - return; - } - - OverviewItem* item_to_snap = nullptr; - if (!InOverviewSession()) { - // The current active window may be a transient child. - aura::Window* active_window = window_util::GetActiveWindow(); - while (active_window && ::wm::GetTransientParent(active_window)) - active_window = ::wm::GetTransientParent(active_window); - - // Do nothing if there are no active windows. - if (!active_window) - return; - - // Show a toast if the window cannot be snapped. - if (!split_view_controller->CanSnapWindow(active_window)) { - ShowAppCannotSnapToast(); - return; - } - - // If we are not in overview mode, enter overview mode and then find the - // window item to snap. - StartOverview(); - DCHECK(overview_session_); - OverviewGrid* current_grid = overview_session_->GetGridWithRootWindow( - active_window->GetRootWindow()); - if (current_grid) - item_to_snap = current_grid->GetOverviewItemContaining(active_window); - } else { - // Currently in overview mode, with no snapped windows. Retrieve the first - // overview item and attempt to snap that window. - DCHECK(overview_session_); - OverviewGrid* current_grid = overview_session_->GetGridWithRootWindow( - window_util::GetRootWindowAt(event_location)); - if (current_grid) { - const auto& windows = current_grid->window_list(); - if (windows.size() > 1) - item_to_snap = windows[0].get(); - } - } - - // Do nothing if no item was retrieved, or if the retrieved item is - // unsnappable. - if (!item_to_snap || - !split_view_controller->CanSnapWindow(item_to_snap->GetWindow())) { - return; - } - - split_view_controller->SnapWindow(item_to_snap->GetWindow(), - SplitViewController::LEFT); - base::RecordAction( - base::UserMetricsAction("Tablet_LongPressOverviewButtonEnterSplitView")); -} - bool OverviewController::IsInStartAnimation() { return !start_animations_.empty(); }
diff --git a/ash/wm/overview/overview_controller.h b/ash/wm/overview/overview_controller.h index 98559336..fdbafec 100644 --- a/ash/wm/overview/overview_controller.h +++ b/ash/wm/overview/overview_controller.h
@@ -49,12 +49,6 @@ // false otherwise. bool AcceptSelection(); - // Called when the overview button tray has been long pressed. Enters - // splitview mode if the active window is snappable. Also enters overview mode - // if device is not currently in overview mode. - // TODO(sammiequon): Move this function to SplitViewController. - void OnOverviewButtonTrayLongPressed(const gfx::Point& event_location); - // Returns true if we're in start-overview animation. bool IsInStartAnimation();
diff --git a/ash/wm/overview/overview_grid.cc b/ash/wm/overview/overview_grid.cc index 59f3e25a1..b6a6699 100644 --- a/ash/wm/overview/overview_grid.cc +++ b/ash/wm/overview/overview_grid.cc
@@ -1465,16 +1465,23 @@ screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer( root_window_) .size(); - gfx::Size dragged_window_size = dragged_window->bounds().size(); - // If the drag started from a different root window, |dragged_window| may - // not fit into the work area of |root_window_|. Then if |dragged_window| - // is dropped into this grid, |dragged_window| will shrink to fit into - // this work area. The drop target shall reflect that. - dragged_window_size.SetToMin(work_area_size); - grid_fill_mode = ScopedOverviewTransformWindow::GetWindowDimensionsType( - dragged_window_size); - target_size = ::ash::GetTargetBoundsInScreen(dragged_window).size(); - target_size.SetToMin(gfx::SizeF(work_area_size)); + if (WindowState::Get(dragged_window)->IsMaximized()) { + grid_fill_mode = ScopedOverviewTransformWindow::GetWindowDimensionsType( + work_area_size); + target_size = gfx::SizeF(work_area_size); + } else { + gfx::Size dragged_window_size = dragged_window->bounds().size(); + // If the drag started from a different root window, |dragged_window| + // may not fit into the work area of |root_window_|. Then if + // |dragged_window| is dropped into this grid, |dragged_window| will + // shrink to fit into this work area. The drop target shall reflect + // that. + dragged_window_size.SetToMin(work_area_size); + grid_fill_mode = ScopedOverviewTransformWindow::GetWindowDimensionsType( + dragged_window_size); + target_size = ::ash::GetTargetBoundsInScreen(dragged_window).size(); + target_size.SetToMin(gfx::SizeF(work_area_size)); + } const gfx::SizeF inset_size(0, height - 2 * kWindowMargin); scale = ScopedOverviewTransformWindow::GetItemScale( target_size, inset_size,
diff --git a/ash/wm/overview/overview_session_unittest.cc b/ash/wm/overview/overview_session_unittest.cc index 14e480a0..7cc8c181 100644 --- a/ash/wm/overview/overview_session_unittest.cc +++ b/ash/wm/overview/overview_session_unittest.cc
@@ -6315,6 +6315,34 @@ EXPECT_EQ(grid1->GetDropTarget(), grid1->window_list()[2].get()); } +// Verify that the drop target in each overview grid has the correct bounds when +// a maximized window is being dragged. +TEST_P(SplitViewOverviewSessionInClamshellTestMultiDisplayOnly, + DropTargetBoundsForMaximizedWindowDraggedToOtherDisplay) { + UpdateDisplay("1000x400,1000x400/l"); + std::unique_ptr<aura::Window> window = CreateTestWindow(); + WindowState::Get(window.get())->Maximize(); + ToggleOverview(); + OverviewItem* item = GetOverviewItemForWindow(window.get()); + // Verify that |item| is letter boxed. + EXPECT_EQ(ScopedOverviewTransformWindow::GridWindowFillMode::kLetterBoxed, + item->GetWindowDimensionsType()); + EXPECT_EQ(2.f, + item->target_bounds().width() / item->target_bounds().height()); + overview_session()->InitiateDrag(item, item->target_bounds().CenterPoint(), + /*is_touch_dragging=*/false); + Shell::Get()->cursor_manager()->SetDisplay( + display_manager()->GetSecondaryDisplay()); + overview_session()->Drag(item, gfx::PointF(1200.f, 0.f)); + OverviewItem* drop_target = GetDropTarget(1); + ASSERT_TRUE(drop_target); + // Verify that |drop_target| is effectively pillar boxed. Avoid calling + // |OverviewItem::GetWindowDimensionsType|, because it does not work for drop + // targets (and that is okay). + EXPECT_EQ(0.5f, drop_target->target_bounds().width() / + drop_target->target_bounds().height()); +} + // Verify that the drop target in each overview grid has bounds representing // anticipation that if the dragged window is dropped into that grid, it will // shrink to fit into the corresponding work area.
diff --git a/ash/wm/splitview/split_view_controller.cc b/ash/wm/splitview/split_view_controller.cc index fa64ee7cc..5eaa1727 100644 --- a/ash/wm/splitview/split_view_controller.cc +++ b/ash/wm/splitview/split_view_controller.cc
@@ -816,6 +816,73 @@ divider_position_ = divider_position; } +void SplitViewController::OnOverviewButtonTrayLongPressed( + const gfx::Point& event_location) { + // Do nothing if split view is not enabled. + if (!ShouldAllowSplitView()) + return; + + // Depending on the state of the windows and split view, a long press has many + // different results. + // 1. Already in split view - exit split view. The active snapped window + // becomes maximized. If overview was seen alongside a snapped window, then + // overview mode ends. + // 2. Not in overview mode - enter split view iff there is an active window + // and it is snappable. + // 3. In overview mode - enter split view iff there are at least two windows + // in the overview grid for the display where the overview button was long + // pressed, and the first window in that overview grid is snappable. + + MruWindowTracker::WindowList mru_window_list = + Shell::Get()->mru_window_tracker()->BuildWindowForCycleList(kActiveDesk); + // Do nothing if there is one or less windows in the MRU list. + if (mru_window_list.empty()) + return; + + auto* overview_controller = Shell::Get()->overview_controller(); + aura::Window* target_window = mru_window_list[0]; + + // Exit split view mode if we are already in it. + if (InSplitViewMode()) { + DCHECK(IsWindowInSplitView(target_window)); + DCHECK(target_window); + EndSplitView(); + overview_controller->EndOverview(); + MaximizeIfSnapped(target_window); + wm::ActivateWindow(target_window); + base::RecordAction( + base::UserMetricsAction("Tablet_LongPressOverviewButtonExitSplitView")); + return; + } + + // Show a toast if the window cannot be snapped. + if (!CanSnapWindow(target_window)) { + ShowAppCannotSnapToast(); + return; + } + + // Start overview mode if we aren't already in it. + if (!overview_controller->InOverviewSession()) { + // If we are not in overview mode, enter overview mode and then find the + // window item to snap. + overview_controller->StartOverview(); + } else { + // If we are already in overview, do nothing if there is one window or less. + OverviewSession* overview_session = overview_controller->overview_session(); + DCHECK(overview_session); + OverviewGrid* grid = overview_session->GetGridWithRootWindow( + window_util::GetRootWindowAt(event_location)); + DCHECK(grid); + if (grid->window_list().size() < 2) + return; + } + + SnapWindow(target_window, SplitViewController::LEFT); + wm::ActivateWindow(target_window); + base::RecordAction( + base::UserMetricsAction("Tablet_LongPressOverviewButtonEnterSplitView")); +} + void SplitViewController::OnWindowDragStarted(aura::Window* dragged_window) { DCHECK(dragged_window); if (IsWindowInSplitView(dragged_window))
diff --git a/ash/wm/splitview/split_view_controller.h b/ash/wm/splitview/split_view_controller.h index f905854..9a550514 100644 --- a/ash/wm/splitview/split_view_controller.h +++ b/ash/wm/splitview/split_view_controller.h
@@ -196,6 +196,11 @@ // on the middle split position). void InitDividerPositionForTransition(int divider_position); + // Called when the overview button tray has been long pressed. Enters + // splitview mode if the active window is snappable. Also enters overview mode + // if device is not currently in overview mode. + void OnOverviewButtonTrayLongPressed(const gfx::Point& event_location); + // Called when a window (either it's browser window or an app window) start/ // end being dragged. void OnWindowDragStarted(aura::Window* dragged_window);
diff --git a/ash/wm/splitview/split_view_controller_unittest.cc b/ash/wm/splitview/split_view_controller_unittest.cc index a526d91..bef2f3fc 100644 --- a/ash/wm/splitview/split_view_controller_unittest.cc +++ b/ash/wm/splitview/split_view_controller_unittest.cc
@@ -1461,6 +1461,15 @@ EXPECT_FALSE(split_view_controller()->InSplitViewMode()); } +// Tests that long press works even if the window is minimized. +TEST_P(SplitViewControllerTest, LongPressWithMinimizedWindow) { + std::unique_ptr<aura::Window> window(CreateWindow(gfx::Rect(400, 400))); + WindowState::Get(window.get())->Minimize(); + + LongPressOnOverivewButtonTray(); + EXPECT_TRUE(split_view_controller()->InSplitViewMode()); +} + // Test the rotation functionalities in split view mode. TEST_P(SplitViewControllerTest, RotationTest) { UpdateDisplay("807x407");
diff --git a/base/BUILD.gn b/base/BUILD.gn index bd898aa..de763ee 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn
@@ -579,8 +579,8 @@ "task/common/scoped_defer_task_posting.h", "task/common/task_annotator.cc", "task/common/task_annotator.h", - "task/lazy_task_runner.cc", - "task/lazy_task_runner.h", + "task/lazy_thread_pool_task_runner.cc", + "task/lazy_thread_pool_task_runner.h", "task/post_job.cc", "task/post_job.h", "task/post_task.cc", @@ -702,6 +702,8 @@ "third_party/nspr/prtime.h", "third_party/superfasthash/superfasthash.c", "thread_annotations.h", + "threading/hang_watcher.cc", + "threading/hang_watcher.h", "threading/platform_thread.cc", "threading/platform_thread.h", "threading/post_task_and_reply_impl.cc", @@ -2651,7 +2653,7 @@ "task/common/checked_lock_unittest.cc", "task/common/operations_controller_unittest.cc", "task/common/task_annotator_unittest.cc", - "task/lazy_task_runner_unittest.cc", + "task/lazy_thread_pool_task_runner_unittest.cc", "task/post_job_unittest.cc", "task/post_task_unittest.cc", "task/scoped_set_task_priority_for_current_thread_unittest.cc", @@ -2705,6 +2707,7 @@ "test/test_pending_task_unittest.cc", "test/trace_event_analyzer_unittest.cc", "thread_annotations_unittest.cc", + "threading/hang_watcher_unittest.cc", "threading/platform_thread_unittest.cc", "threading/post_task_and_reply_impl_unittest.cc", "threading/scoped_blocking_call_unittest.cc",
diff --git a/base/mac/sdk_forward_declarations.h b/base/mac/sdk_forward_declarations.h index 50822e3..1d2da18a 100644 --- a/base/mac/sdk_forward_declarations.h +++ b/base/mac/sdk_forward_declarations.h
@@ -13,40 +13,78 @@ #import <AppKit/AppKit.h> #include <AvailabilityMacros.h> -#import <CoreBluetooth/CoreBluetooth.h> -#import <CoreWLAN/CoreWLAN.h> -#import <IOBluetooth/IOBluetooth.h> -#import <ImageCaptureCore/ImageCaptureCore.h> -#import <QuartzCore/QuartzCore.h> -#include <stdint.h> +#include <os/availability.h> + +// NOTE: If an #import is needed only for a newer SDK, it might be found below. #include "base/base_export.h" // ---------------------------------------------------------------------------- -// Define typedefs, enums, and protocols not available in the version of the -// OSX SDK being compiled against. +// Old symbols that used to be in the macOS SDK but are no longer. // ---------------------------------------------------------------------------- -// ---------------------------------------------------------------------------- -// Define NSStrings only available in newer versions of the OSX SDK to force -// them to be statically linked. -// ---------------------------------------------------------------------------- +// kCWSSIDDidChangeNotification is available in the CoreWLAN.framework for OSX +// versions 10.6 through 10.10 but stopped being included starting with the 10.9 +// SDK. Remove when 10.10 is no longer supported by Chromium. +BASE_EXPORT extern "C" NSString* const kCWSSIDDidChangeNotification; -extern "C" { -#if !defined(MAC_OS_X_VERSION_10_11) || \ - MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_11 -BASE_EXPORT extern NSString* const CIDetectorTypeText; -#endif // MAC_OS_X_VERSION_10_11 -} // extern "C" +// ---------------------------------------------------------------------------- +// Definitions from SDKs newer than the one that Chromium compiles against. +// +// HOW TO DO THIS: +// +// 1. In this file: +// a. Use an #if !defined() guard +// b. Include all API_AVAILABLE/NS_CLASS_AVAILABLE_MAC annotations +// c. Optionally import frameworks +// 2. In your source file: +// a. Correctly use @available to annotate availability +// +// This way, when the SDK is rolled, the section full of definitions +// corresponding to it can be easily deleted. +// +// EXAMPLES OF HOW TO DO THIS: +// +// Suppose there's a simple extension of NSApplication in macOS 10.25. Then: +// +// #if !defined(MAC_OS_X_VERSION_10_25) || \ +// MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_25 +// +// @interface NSApplication (MacOSHouseCatSDK) +// @property(readonly) CGFloat purrRate API_AVAILABLE(macos(10.25)); +// @end +// +// #endif // MAC_OS_X_VERSION_10_25 +// +// +// Suppose the CoreShoelace framework is introduced in macOS 10.77. Then: +// +// #if !defined(MAC_OS_X_VERSION_10_77) || \ +// MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_77 +// +// API_AVAILABLE(macos(10.77)) +// @interface NSCoreShoelace : NSObject +// @property (readonly) NSUInteger stringLength; +// @end +// +// #else +// +// #import <CoreShoelace/CoreShoelace.h> +// +// #endif // MAC_OS_X_VERSION_10_77 +// +// ---------------------------------------------------------------------------- #if !defined(MAC_OS_X_VERSION_10_15) || \ - MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_15 + MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_15 @interface NSScreen (ForwardDeclare) @property(readonly) - CGFloat maximumPotentialExtendedDynamicRangeColorComponentValue; + CGFloat maximumPotentialExtendedDynamicRangeColorComponentValue + API_AVAILABLE(macos(10.15)); @end +NS_CLASS_AVAILABLE_MAC(10_15) @interface SFUniversalLink : NSObject - (instancetype)initWithWebpageURL:(NSURL*)url; @property(readonly) NSURL* webpageURL; @@ -54,14 +92,11 @@ @property(getter=isEnabled) BOOL enabled; @end +#else + +#import <SafariServices/SafariServices.h> + #endif // MAC_OS_X_VERSION_10_15 -// ---------------------------------------------------------------------------- -// The symbol for kCWSSIDDidChangeNotification is available in the -// CoreWLAN.framework for OSX versions 10.6 through 10.10. The symbol is not -// declared in the OSX 10.9+ SDK, so when compiling against an OSX 10.9+ SDK, -// declare the symbol. -// ---------------------------------------------------------------------------- -BASE_EXPORT extern "C" NSString* const kCWSSIDDidChangeNotification; #endif // BASE_MAC_SDK_FORWARD_DECLARATIONS_H_
diff --git a/base/mac/sdk_forward_declarations.mm b/base/mac/sdk_forward_declarations.mm index 9c641989..2183349a 100644 --- a/base/mac/sdk_forward_declarations.mm +++ b/base/mac/sdk_forward_declarations.mm
@@ -4,7 +4,7 @@ #include "base/mac/sdk_forward_declarations.h" -#if !defined(MAC_OS_X_VERSION_10_11) || \ - MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_11 -NSString* const CIDetectorTypeText = @"CIDetectorTypeText"; -#endif // MAC_OS_X_VERSION_10_11 +// ---------------------------------------------------------------------------- +// This file is reserved for the definition of any constant values declared in +// sdk_forward_declarations.h. +// ----------------------------------------------------------------------------
diff --git a/base/task/lazy_task_runner.cc b/base/task/lazy_thread_pool_task_runner.cc similarity index 67% rename from base/task/lazy_task_runner.cc rename to base/task/lazy_thread_pool_task_runner.cc index 883da7c7..47d52aee 100644 --- a/base/task/lazy_task_runner.cc +++ b/base/task/lazy_thread_pool_task_runner.cc
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include <utility> #include "base/lazy_instance_helpers.h" #include "base/logging.h" -#include "base/task/post_task.h" +#include "base/task/thread_pool.h" namespace base { namespace internal { @@ -19,7 +19,7 @@ } // namespace template <typename TaskRunnerType, bool com_sta> -void LazyTaskRunner<TaskRunnerType, com_sta>::Reset() { +void LazyThreadPoolTaskRunner<TaskRunnerType, com_sta>::Reset() { subtle::AtomicWord state = subtle::Acquire_Load(&state_); DCHECK_NE(state, kLazyInstanceStateCreating) << "Race: all threads should be " @@ -40,65 +40,68 @@ template <> scoped_refptr<SequencedTaskRunner> -LazyTaskRunner<SequencedTaskRunner, false>::Create() { +LazyThreadPoolTaskRunner<SequencedTaskRunner, false>::Create() { // It is invalid to specify a SingleThreadTaskRunnerThreadMode with a - // LazySequencedTaskRunner. + // LazyThreadPoolSequencedTaskRunner. DCHECK_EQ(thread_mode_, SingleThreadTaskRunnerThreadMode::SHARED); - return CreateSequencedTaskRunner(traits_); + return ThreadPool::CreateSequencedTaskRunner(traits_); } template <> scoped_refptr<SingleThreadTaskRunner> -LazyTaskRunner<SingleThreadTaskRunner, false>::Create() { - return CreateSingleThreadTaskRunner(traits_, thread_mode_); +LazyThreadPoolTaskRunner<SingleThreadTaskRunner, false>::Create() { + return ThreadPool::CreateSingleThreadTaskRunner(traits_, thread_mode_); } #if defined(OS_WIN) template <> scoped_refptr<SingleThreadTaskRunner> -LazyTaskRunner<SingleThreadTaskRunner, true>::Create() { - return CreateCOMSTATaskRunner(traits_, thread_mode_); +LazyThreadPoolTaskRunner<SingleThreadTaskRunner, true>::Create() { + return ThreadPool::CreateCOMSTATaskRunner(traits_, thread_mode_); } #endif // static template <typename TaskRunnerType, bool com_sta> -TaskRunnerType* LazyTaskRunner<TaskRunnerType, com_sta>::CreateRaw( +TaskRunnerType* LazyThreadPoolTaskRunner<TaskRunnerType, com_sta>::CreateRaw( void* void_self) { auto self = - reinterpret_cast<LazyTaskRunner<TaskRunnerType, com_sta>*>(void_self); + reinterpret_cast<LazyThreadPoolTaskRunner<TaskRunnerType, com_sta>*>( + void_self); scoped_refptr<TaskRunnerType> task_runner = self->Create(); // Acquire a reference to the TaskRunner. The reference will either // never be released or be released in Reset(). The reference is not // managed by a scoped_refptr because adding a scoped_refptr member to - // LazyTaskRunner would prevent its static initialization. + // LazyThreadPoolTaskRunner would prevent its static initialization. task_runner->AddRef(); // Reset this instance when the current // ScopedLazyTaskRunnerListForTesting is destroyed, if any. if (g_scoped_lazy_task_runner_list_for_testing) { - g_scoped_lazy_task_runner_list_for_testing->AddCallback(BindOnce( - &LazyTaskRunner<TaskRunnerType, com_sta>::Reset, Unretained(self))); + g_scoped_lazy_task_runner_list_for_testing->AddCallback( + BindOnce(&LazyThreadPoolTaskRunner<TaskRunnerType, com_sta>::Reset, + Unretained(self))); } return task_runner.get(); } template <typename TaskRunnerType, bool com_sta> -scoped_refptr<TaskRunnerType> LazyTaskRunner<TaskRunnerType, com_sta>::Get() { +scoped_refptr<TaskRunnerType> +LazyThreadPoolTaskRunner<TaskRunnerType, com_sta>::Get() { return WrapRefCounted(subtle::GetOrCreateLazyPointer( - &state_, &LazyTaskRunner<TaskRunnerType, com_sta>::CreateRaw, + &state_, &LazyThreadPoolTaskRunner<TaskRunnerType, com_sta>::CreateRaw, reinterpret_cast<void*>(this), nullptr, nullptr)); } -template class LazyTaskRunner<SequencedTaskRunner, false>; -template class LazyTaskRunner<SingleThreadTaskRunner, false>; +template class LazyThreadPoolTaskRunner<SequencedTaskRunner, false>; +template class LazyThreadPoolTaskRunner<SingleThreadTaskRunner, false>; #if defined(OS_WIN) -template class LazyTaskRunner<SingleThreadTaskRunner, true>; +template class LazyThreadPoolTaskRunner<SingleThreadTaskRunner, true>; #endif ScopedLazyTaskRunnerListForTesting::ScopedLazyTaskRunnerListForTesting() {
diff --git a/base/task/lazy_task_runner.h b/base/task/lazy_thread_pool_task_runner.h similarity index 65% rename from base/task/lazy_task_runner.h rename to base/task/lazy_thread_pool_task_runner.h index 20c44b3..b4cfe669d 100644 --- a/base/task/lazy_task_runner.h +++ b/base/task/lazy_thread_pool_task_runner.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef BASE_TASK_LAZY_TASK_RUNNER_H_ -#define BASE_TASK_LAZY_TASK_RUNNER_H_ +#ifndef BASE_TASK_LAZY_THREAD_POOL_TASK_RUNNER_H_ +#define BASE_TASK_LAZY_THREAD_POOL_TASK_RUNNER_H_ #include <vector> @@ -28,23 +28,17 @@ // TaskRunners do not outlive the scope of the TaskEnvironment in unit tests // (otherwise the next test in the same process will die in use-after-frees). // -// Note: This is only meant for base::ThreadPool bound task runners. Task -// runners bound to other destination which share an existing sequence (like -// BrowserThreads) should just use the appropriate getter each time (e.g. -// base::Create*TaskRunner({BrowserThread::UI})). -// TODO(1026641): Rename this API to LazyThreadPoolTaskRunner. -// // IMPORTANT: Only use this API as a last resort. Prefer storing a // (Sequenced|SingleThread)TaskRunner returned by -// base::Create(Sequenced|SingleThread|COMSTA)TaskRunner() as a member on an -// object accessible by all PostTask() call sites. +// base::ThreadPool::Create(Sequenced|SingleThread|COMSTA)TaskRunner() as a +// member on an object accessible by all PostTask() call sites. // // Example usage 1: // // namespace { -// base::LazySequencedTaskRunner g_sequenced_task_runner = -// LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER( -// base::TaskTraits(base::ThreadPool(), base::MayBlock(), +// base::LazyThreadPoolSequencedTaskRunner g_sequenced_task_runner = +// LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER( +// base::TaskTraits(base::MayBlock(), // base::TaskPriority::USER_VISIBLE)); // } // namespace // @@ -57,9 +51,9 @@ // Example usage 2: // // namespace { -// base::LazySequencedTaskRunner g_sequenced_task_task_runner = -// LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER( -// base::TaskTraits(base::ThreadPool(), base::MayBlock())); +// base::LazyThreadPoolSequencedTaskRunner g_sequenced_task_task_runner = +// LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER( +// base::TaskTraits(base::MayBlock())); // } // namespace // // // Code from different files can access the SequencedTaskRunner via this @@ -72,21 +66,21 @@ namespace internal { template <typename TaskRunnerType, bool com_sta> -class BASE_EXPORT LazyTaskRunner; +class BASE_EXPORT LazyThreadPoolTaskRunner; } // namespace internal // Lazy SequencedTaskRunner. -using LazySequencedTaskRunner = - internal::LazyTaskRunner<SequencedTaskRunner, false>; +using LazyThreadPoolSequencedTaskRunner = + internal::LazyThreadPoolTaskRunner<SequencedTaskRunner, false>; // Lazy SingleThreadTaskRunner. -using LazySingleThreadTaskRunner = - internal::LazyTaskRunner<SingleThreadTaskRunner, false>; +using LazyThreadPoolSingleThreadTaskRunner = + internal::LazyThreadPoolTaskRunner<SingleThreadTaskRunner, false>; #if defined(OS_WIN) // Lazy COM-STA enabled SingleThreadTaskRunner. -using LazyCOMSTATaskRunner = - internal::LazyTaskRunner<SingleThreadTaskRunner, true>; +using LazyThreadPoolCOMSTATaskRunner = + internal::LazyThreadPoolTaskRunner<SingleThreadTaskRunner, true>; #endif // Helper macros to generate a variable name by concatenation. @@ -94,14 +88,15 @@ #define LAZY_TASK_RUNNER_CONCATENATE_INTERNAL(a, b) \ LAZY_TASK_RUNNER_CONCATENATE_INTERNAL2(a, b) -// Use the macros below to initialize a LazyTaskRunner. These macros verify that -// their arguments are constexpr, which is important to prevent the generation -// of a static initializer. +// Use the macros below to initialize a LazyThreadPoolTaskRunner. These macros +// verify that their arguments are constexpr, which is important to prevent the +// generation of a static initializer. // |traits| are TaskTraits used when creating the SequencedTaskRunner. -#define LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER(traits) \ - base::LazySequencedTaskRunner::CreateInternal(traits); \ - static_assert(traits.use_thread_pool(), ""); \ +#define LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER(traits) \ + base::LazyThreadPoolSequencedTaskRunner::CreateInternal(traits); \ + /* ThreadPool() as a trait is deprecated and implicit here */ \ + static_assert(!traits.use_thread_pool(), ""); \ ALLOW_UNUSED_TYPE constexpr base::TaskTraits \ LAZY_TASK_RUNNER_CONCATENATE_INTERNAL(kVerifyTraitsAreConstexpr, \ __LINE__) = traits @@ -109,46 +104,50 @@ // |traits| are TaskTraits used when creating the SingleThreadTaskRunner. // |thread_mode| specifies whether the SingleThreadTaskRunner can share its // thread with other SingleThreadTaskRunners. -#define LAZY_SINGLE_THREAD_TASK_RUNNER_INITIALIZER(traits, thread_mode) \ - base::LazySingleThreadTaskRunner::CreateInternal(traits, thread_mode); \ - static_assert(traits.use_thread_pool(), ""); \ - ALLOW_UNUSED_TYPE constexpr base::TaskTraits \ - LAZY_TASK_RUNNER_CONCATENATE_INTERNAL(kVerifyTraitsAreConstexpr, \ - __LINE__) = traits; \ - ALLOW_UNUSED_TYPE constexpr base::SingleThreadTaskRunnerThreadMode \ - LAZY_TASK_RUNNER_CONCATENATE_INTERNAL(kVerifyThreadModeIsConstexpr, \ +#define LAZY_THREAD_POOL_SINGLE_THREAD_TASK_RUNNER_INITIALIZER(traits, \ + thread_mode) \ + base::LazyThreadPoolSingleThreadTaskRunner::CreateInternal(traits, \ + thread_mode); \ + /* ThreadPool() as a trait is deprecated and implicit here */ \ + static_assert(!traits.use_thread_pool(), ""); \ + ALLOW_UNUSED_TYPE constexpr base::TaskTraits \ + LAZY_TASK_RUNNER_CONCATENATE_INTERNAL(kVerifyTraitsAreConstexpr, \ + __LINE__) = traits; \ + ALLOW_UNUSED_TYPE constexpr base::SingleThreadTaskRunnerThreadMode \ + LAZY_TASK_RUNNER_CONCATENATE_INTERNAL(kVerifyThreadModeIsConstexpr, \ __LINE__) = thread_mode // |traits| are TaskTraits used when creating the COM STA // SingleThreadTaskRunner. |thread_mode| specifies whether the COM STA // SingleThreadTaskRunner can share its thread with other // SingleThreadTaskRunners. -#define LAZY_COM_STA_TASK_RUNNER_INITIALIZER(traits, thread_mode) \ - base::LazyCOMSTATaskRunner::CreateInternal(traits, thread_mode); \ - static_assert(traits.use_thread_pool(), ""); \ - ALLOW_UNUSED_TYPE constexpr base::TaskTraits \ - LAZY_TASK_RUNNER_CONCATENATE_INTERNAL(kVerifyTraitsAreConstexpr, \ - __LINE__) = traits; \ - ALLOW_UNUSED_TYPE constexpr base::SingleThreadTaskRunnerThreadMode \ - LAZY_TASK_RUNNER_CONCATENATE_INTERNAL(kVerifyThreadModeIsConstexpr, \ +#define LAZY_COM_STA_TASK_RUNNER_INITIALIZER(traits, thread_mode) \ + base::LazyThreadPoolCOMSTATaskRunner::CreateInternal(traits, thread_mode); \ + /* ThreadPool() as a trait is deprecated and implicit here */ \ + static_assert(!traits.use_thread_pool(), ""); \ + ALLOW_UNUSED_TYPE constexpr base::TaskTraits \ + LAZY_TASK_RUNNER_CONCATENATE_INTERNAL(kVerifyTraitsAreConstexpr, \ + __LINE__) = traits; \ + ALLOW_UNUSED_TYPE constexpr base::SingleThreadTaskRunnerThreadMode \ + LAZY_TASK_RUNNER_CONCATENATE_INTERNAL(kVerifyThreadModeIsConstexpr, \ __LINE__) = thread_mode namespace internal { template <typename TaskRunnerType, bool com_sta> -class BASE_EXPORT LazyTaskRunner { +class BASE_EXPORT LazyThreadPoolTaskRunner { public: // Use the macros above rather than a direct call to this. // // |traits| are TaskTraits to use to create the TaskRunner. If this - // LazyTaskRunner is specialized to create a SingleThreadTaskRunner, + // LazyThreadPoolTaskRunner is specialized to create a SingleThreadTaskRunner, // |thread_mode| specifies whether the SingleThreadTaskRunner can share its // thread with other SingleThreadTaskRunner. Otherwise, it is unused. - static constexpr LazyTaskRunner CreateInternal( + static constexpr LazyThreadPoolTaskRunner CreateInternal( const TaskTraits& traits, SingleThreadTaskRunnerThreadMode thread_mode = SingleThreadTaskRunnerThreadMode::SHARED) { - return LazyTaskRunner(traits, thread_mode); + return LazyThreadPoolTaskRunner(traits, thread_mode); } // Returns the TaskRunner held by this instance. Creates it if it didn't @@ -156,9 +155,10 @@ scoped_refptr<TaskRunnerType> Get(); private: - constexpr LazyTaskRunner(const TaskTraits& traits, - SingleThreadTaskRunnerThreadMode thread_mode = - SingleThreadTaskRunnerThreadMode::SHARED) + constexpr LazyThreadPoolTaskRunner( + const TaskTraits& traits, + SingleThreadTaskRunnerThreadMode thread_mode = + SingleThreadTaskRunnerThreadMode::SHARED) : traits_(traits), thread_mode_(thread_mode) {} // Releases the TaskRunner held by this instance. @@ -191,22 +191,22 @@ // (implementation limitation))'. }; -// When a LazyTaskRunner becomes active (invokes Get()), it adds a callback to -// the current ScopedLazyTaskRunnerListForTesting, if any. Callbacks run when -// the ScopedLazyTaskRunnerListForTesting is destroyed. In a test process, a -// ScopedLazyTaskRunnerListForTesting must be instantiated before any -// LazyTaskRunner becomes active. +// When a LazyThreadPoolTaskRunner becomes active (invokes Get()), it adds a +// callback to the current ScopedLazyTaskRunnerListForTesting, if any. +// Callbacks run when the ScopedLazyTaskRunnerListForTesting is +// destroyed. In a test process, a ScopedLazyTaskRunnerListForTesting +// must be instantiated before any LazyThreadPoolTaskRunner becomes active. class BASE_EXPORT ScopedLazyTaskRunnerListForTesting { public: ScopedLazyTaskRunnerListForTesting(); ~ScopedLazyTaskRunnerListForTesting(); private: - friend class LazyTaskRunner<SequencedTaskRunner, false>; - friend class LazyTaskRunner<SingleThreadTaskRunner, false>; + friend class LazyThreadPoolTaskRunner<SequencedTaskRunner, false>; + friend class LazyThreadPoolTaskRunner<SingleThreadTaskRunner, false>; #if defined(OS_WIN) - friend class LazyTaskRunner<SingleThreadTaskRunner, true>; + friend class LazyThreadPoolTaskRunner<SingleThreadTaskRunner, true>; #endif // Add |callback| to the list of callbacks to run on destruction. @@ -223,4 +223,4 @@ } // namespace internal } // namespace base -#endif // BASE_TASK_LAZY_TASK_RUNNER_H_ +#endif // BASE_TASK_LAZY_THREAD_POOL_TASK_RUNNER_H_
diff --git a/base/task/lazy_task_runner_unittest.cc b/base/task/lazy_thread_pool_task_runner_unittest.cc similarity index 73% rename from base/task/lazy_task_runner_unittest.cc rename to base/task/lazy_thread_pool_task_runner_unittest.cc index 7601458..b2f281e 100644 --- a/base/task/lazy_task_runner_unittest.cc +++ b/base/task/lazy_thread_pool_task_runner_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include "base/bind.h" #include "base/bind_helpers.h" @@ -21,30 +21,30 @@ namespace { -LazySequencedTaskRunner g_sequenced_task_runner_user_visible = - LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER( - TaskTraits(ThreadPool(), TaskPriority::USER_VISIBLE)); -LazySequencedTaskRunner g_sequenced_task_runner_user_blocking = - LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER( - TaskTraits(ThreadPool(), TaskPriority::USER_BLOCKING)); +LazyThreadPoolSequencedTaskRunner g_sequenced_task_runner_user_visible = + LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER( + TaskTraits(TaskPriority::USER_VISIBLE)); +LazyThreadPoolSequencedTaskRunner g_sequenced_task_runner_user_blocking = + LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER( + TaskTraits(TaskPriority::USER_BLOCKING)); -LazySingleThreadTaskRunner g_single_thread_task_runner_user_visible = - LAZY_SINGLE_THREAD_TASK_RUNNER_INITIALIZER( - TaskTraits(ThreadPool(), TaskPriority::USER_VISIBLE), +LazyThreadPoolSingleThreadTaskRunner g_single_thread_task_runner_user_visible = + LAZY_THREAD_POOL_SINGLE_THREAD_TASK_RUNNER_INITIALIZER( + TaskTraits(TaskPriority::USER_VISIBLE), SingleThreadTaskRunnerThreadMode::SHARED); -LazySingleThreadTaskRunner g_single_thread_task_runner_user_blocking = - LAZY_SINGLE_THREAD_TASK_RUNNER_INITIALIZER( - TaskTraits(ThreadPool(), TaskPriority::USER_BLOCKING), +LazyThreadPoolSingleThreadTaskRunner g_single_thread_task_runner_user_blocking = + LAZY_THREAD_POOL_SINGLE_THREAD_TASK_RUNNER_INITIALIZER( + TaskTraits(TaskPriority::USER_BLOCKING), SingleThreadTaskRunnerThreadMode::SHARED); #if defined(OS_WIN) -LazyCOMSTATaskRunner g_com_sta_task_runner_user_visible = +LazyThreadPoolCOMSTATaskRunner g_com_sta_task_runner_user_visible = LAZY_COM_STA_TASK_RUNNER_INITIALIZER( - TaskTraits(ThreadPool(), TaskPriority::USER_VISIBLE), + TaskTraits(TaskPriority::USER_VISIBLE), SingleThreadTaskRunnerThreadMode::SHARED); -LazyCOMSTATaskRunner g_com_sta_task_runner_user_blocking = +LazyThreadPoolCOMSTATaskRunner g_com_sta_task_runner_user_blocking = LAZY_COM_STA_TASK_RUNNER_INITIALIZER( - TaskTraits(ThreadPool(), TaskPriority::USER_BLOCKING), + TaskTraits(TaskPriority::USER_BLOCKING), SingleThreadTaskRunnerThreadMode::SHARED); #endif // defined(OS_WIN) @@ -71,7 +71,7 @@ , bool expect_com_sta = false #endif - ) { +) { EXPECT_TRUE(sequence_checker->CalledOnValidSequence()); EXPECT_TRUE(thread_checker->CalledOnValidThread()); EXPECT_EQ(expected_priority, internal::GetTaskPriorityForCurrentThread()); @@ -82,9 +82,9 @@ #endif } -class LazyTaskRunnerEnvironmentTest : public testing::Test { +class LazyThreadPoolTaskRunnerEnvironmentTest : public testing::Test { protected: - LazyTaskRunnerEnvironmentTest() = default; + LazyThreadPoolTaskRunnerEnvironmentTest() = default; void TestTaskRunnerEnvironment(scoped_refptr<SequencedTaskRunner> task_runner, bool expect_single_thread, @@ -93,7 +93,7 @@ , bool expect_com_sta = false #endif - ) { + ) { SequenceCheckerImpl sequence_checker; ThreadCheckerImpl thread_checker; task_runner->PostTask(FROM_HERE, @@ -121,44 +121,50 @@ test::TaskEnvironment task_environment_; private: - DISALLOW_COPY_AND_ASSIGN(LazyTaskRunnerEnvironmentTest); + DISALLOW_COPY_AND_ASSIGN(LazyThreadPoolTaskRunnerEnvironmentTest); }; } // namespace -TEST_F(LazyTaskRunnerEnvironmentTest, LazySequencedTaskRunnerUserVisible) { +TEST_F(LazyThreadPoolTaskRunnerEnvironmentTest, + LazyThreadPoolSequencedTaskRunnerUserVisible) { TestTaskRunnerEnvironment(g_sequenced_task_runner_user_visible.Get(), false, TaskPriority::USER_VISIBLE); } -TEST_F(LazyTaskRunnerEnvironmentTest, LazySequencedTaskRunnerUserBlocking) { +TEST_F(LazyThreadPoolTaskRunnerEnvironmentTest, + LazyThreadPoolSequencedTaskRunnerUserBlocking) { TestTaskRunnerEnvironment(g_sequenced_task_runner_user_blocking.Get(), false, TaskPriority::USER_BLOCKING); } -TEST_F(LazyTaskRunnerEnvironmentTest, LazySingleThreadTaskRunnerUserVisible) { +TEST_F(LazyThreadPoolTaskRunnerEnvironmentTest, + LazyThreadPoolSingleThreadTaskRunnerUserVisible) { TestTaskRunnerEnvironment(g_single_thread_task_runner_user_visible.Get(), true, TaskPriority::USER_VISIBLE); } -TEST_F(LazyTaskRunnerEnvironmentTest, LazySingleThreadTaskRunnerUserBlocking) { +TEST_F(LazyThreadPoolTaskRunnerEnvironmentTest, + LazyThreadPoolSingleThreadTaskRunnerUserBlocking) { TestTaskRunnerEnvironment(g_single_thread_task_runner_user_blocking.Get(), true, TaskPriority::USER_BLOCKING); } #if defined(OS_WIN) -TEST_F(LazyTaskRunnerEnvironmentTest, LazyCOMSTATaskRunnerUserVisible) { +TEST_F(LazyThreadPoolTaskRunnerEnvironmentTest, + LazyThreadPoolCOMSTATaskRunnerUserVisible) { TestTaskRunnerEnvironment(g_com_sta_task_runner_user_visible.Get(), true, TaskPriority::USER_VISIBLE, true); } -TEST_F(LazyTaskRunnerEnvironmentTest, LazyCOMSTATaskRunnerUserBlocking) { +TEST_F(LazyThreadPoolTaskRunnerEnvironmentTest, + LazyThreadPoolCOMSTATaskRunnerUserBlocking) { TestTaskRunnerEnvironment(g_com_sta_task_runner_user_blocking.Get(), true, TaskPriority::USER_BLOCKING, true); } #endif // defined(OS_WIN) -TEST(LazyTaskRunnerTest, LazySequencedTaskRunnerReset) { +TEST(LazyThreadPoolTaskRunnerTest, LazyThreadPoolSequencedTaskRunnerReset) { for (int i = 0; i < 2; ++i) { test::TaskEnvironment task_environment; // If the TaskRunner isn't released when the test::TaskEnvironment @@ -169,7 +175,7 @@ } } -TEST(LazyTaskRunnerTest, LazySingleThreadTaskRunnerReset) { +TEST(LazyThreadPoolTaskRunnerTest, LazyThreadPoolSingleThreadTaskRunnerReset) { for (int i = 0; i < 2; ++i) { test::TaskEnvironment task_environment; // If the TaskRunner isn't released when the test::TaskEnvironment @@ -181,7 +187,7 @@ } #if defined(OS_WIN) -TEST(LazyTaskRunnerTest, LazyCOMSTATaskRunnerReset) { +TEST(LazyThreadPoolTaskRunnerTest, LazyThreadPoolCOMSTATaskRunnerReset) { for (int i = 0; i < 2; ++i) { test::TaskEnvironment task_environment; // If the TaskRunner isn't released when the test::TaskEnvironment
diff --git a/base/test/task_environment.h b/base/test/task_environment.h index c8d1d71..d5e62b5 100644 --- a/base/test/task_environment.h +++ b/base/test/task_environment.h
@@ -13,7 +13,7 @@ #include "base/observer_list.h" #include "base/run_loop.h" #include "base/single_thread_task_runner.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include "base/task/sequence_manager/sequence_manager.h" #include "base/threading/thread_checker.h" #include "base/time/time.h"
diff --git a/base/threading/hang_watcher.cc b/base/threading/hang_watcher.cc new file mode 100644 index 0000000..3a08cf0 --- /dev/null +++ b/base/threading/hang_watcher.cc
@@ -0,0 +1,194 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/threading/hang_watcher.h" +#include "base/bind.h" +#include "base/callback_helpers.h" +#include "base/no_destructor.h" +#include "base/synchronization/lock.h" +#include "base/threading/thread_checker.h" +#include "base/threading/thread_restrictions.h" +#include "base/time/time.h" + +namespace base { + +namespace { +HangWatcher* g_instance = nullptr; +} + +HangWatchScope::HangWatchScope(TimeDelta timeout) { + internal::HangWatchState* current_hang_watch_state = + internal::HangWatchState::GetHangWatchStateForCurrentThread()->Get(); + + DCHECK(current_hang_watch_state) + << "A scope can only be used on a thread that " + "registered for hang watching with HangWatcher::RegisterThread."; + +#if DCHECK_IS_ON() + previous_scope_ = current_hang_watch_state->GetCurrentHangWatchScope(); + current_hang_watch_state->SetCurrentHangWatchScope(this); +#endif + + // TODO(crbug.com/1034046): Check whether we are over deadline already for the + // previous scope here by issuing only one TimeTicks::Now() and resuing the + // value. + + previous_deadline_ = current_hang_watch_state->GetDeadline(); + TimeTicks deadline = TimeTicks::Now() + timeout; + current_hang_watch_state->SetDeadline(deadline); +} + +HangWatchScope::~HangWatchScope() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + internal::HangWatchState* current_hang_watch_state = + internal::HangWatchState::GetHangWatchStateForCurrentThread()->Get(); + +#if DCHECK_IS_ON() + // Verify that no Scope was destructed out of order. + DCHECK_EQ(this, current_hang_watch_state->GetCurrentHangWatchScope()); + current_hang_watch_state->SetCurrentHangWatchScope(previous_scope_); +#endif + + // Reset the deadline to the value it had before entering this scope. + current_hang_watch_state->SetDeadline(previous_deadline_); + // TODO(crbug.com/1034046): Log when a HangWatchScope exits after its deadline + // and that went undetected by the HangWatcher. +} + +HangWatcher::HangWatcher(RepeatingClosure on_hang_closure) + : on_hang_closure_(std::move(on_hang_closure)) { + DCHECK(!g_instance); + g_instance = this; +} + +HangWatcher::~HangWatcher() { + DCHECK_EQ(g_instance, this); + DCHECK(watch_states_.empty()); + g_instance = nullptr; +} + +// static +HangWatcher* HangWatcher::GetInstance() { + return g_instance; +} + +ScopedClosureRunner HangWatcher::RegisterThread() { + AutoLock auto_lock(watch_state_lock_); + + watch_states_.push_back( + internal::HangWatchState::CreateHangWatchStateForCurrentThread()); + + return ScopedClosureRunner(BindOnce(&HangWatcher::UnregisterThread, + Unretained(HangWatcher::GetInstance()))); +} + +void HangWatcher::Monitor() { + bool must_invoke_hang_closure = false; + { + AutoLock auto_lock(watch_state_lock_); + for (const auto& watch_state : watch_states_) { + if (watch_state->IsOverDeadline()) { + must_invoke_hang_closure = true; + break; + } + } + } + + if (must_invoke_hang_closure) { + // Invoke the closure outside the scope of |watch_state_lock_| + // to prevent lock reentrancy. + on_hang_closure_.Run(); + } +} + +void HangWatcher::UnregisterThread() { + AutoLock auto_lock(watch_state_lock_); + + internal::HangWatchState* current_hang_watch_state = + internal::HangWatchState::GetHangWatchStateForCurrentThread()->Get(); + + auto it = + std::find_if(watch_states_.cbegin(), watch_states_.cend(), + [current_hang_watch_state]( + const std::unique_ptr<internal::HangWatchState>& state) { + return state.get() == current_hang_watch_state; + }); + + // Thread should be registered to get unregistered. + DCHECK(it != watch_states_.end()); + + watch_states_.erase(it); +} + +namespace internal { + +// |deadline_| starts at Max() to avoid validation problems +// when setting the first legitimate value. +HangWatchState::HangWatchState() : deadline_(TimeTicks::Max()) {} + +HangWatchState::~HangWatchState() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + +#if DCHECK_IS_ON() + // Destroying the HangWatchState should not be done if there are live + // HangWatchScopes. + DCHECK(!current_hang_watch_scope_); +#endif +} + +// static +std::unique_ptr<HangWatchState> +HangWatchState::CreateHangWatchStateForCurrentThread() { + // There should not exist a state object for this thread already. + DCHECK(!GetHangWatchStateForCurrentThread()->Get()); + + // Allocate a watch state object for this thread. + std::unique_ptr<HangWatchState> hang_state = + std::make_unique<HangWatchState>(); + + // Bind the new instance to this thread. + GetHangWatchStateForCurrentThread()->Set(hang_state.get()); + + // Setting the thread local worked. + DCHECK(GetHangWatchStateForCurrentThread()->Get()); + + // Transfer ownership to caller. + return hang_state; +} + +TimeTicks HangWatchState::GetDeadline() const { + return deadline_.load(); +} + +TimeTicks HangWatchState::SetDeadline(TimeTicks deadline) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + return deadline_.exchange(deadline); +} + +bool HangWatchState::IsOverDeadline() const { + return TimeTicks::Now() > deadline_.load(); +} + +#if DCHECK_IS_ON() +void HangWatchState::SetCurrentHangWatchScope(HangWatchScope* scope) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + current_hang_watch_scope_ = scope; +} + +HangWatchScope* HangWatchState::GetCurrentHangWatchScope() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + return current_hang_watch_scope_; +} +#endif + +// static +ThreadLocalPointer<HangWatchState>* +HangWatchState::GetHangWatchStateForCurrentThread() { + static NoDestructor<ThreadLocalPointer<HangWatchState>> hang_watch_state; + return hang_watch_state.get(); +} + +} // namespace internal + +} // namespace base
diff --git a/base/threading/hang_watcher.h b/base/threading/hang_watcher.h new file mode 100644 index 0000000..2c5f71de --- /dev/null +++ b/base/threading/hang_watcher.h
@@ -0,0 +1,177 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef BASE_THREADING_HANG_WATCHER_H_ +#define BASE_THREADING_HANG_WATCHER_H_ + +#include <exception> +#include <memory> + +#include "base/atomicops.h" +#include "base/callback.h" +#include "base/callback_helpers.h" +#include "base/threading/thread_checker.h" +#include "base/threading/thread_local.h" +#include "base/time/time.h" + +namespace base { +class HangWatchScope; +namespace internal { +class HangWatchState; +} // namespace internal +} // namespace base + +namespace base { + +// Instantiate of HangWatchScope in a scope to register it to be +// watched for hangs of more than |timeout| by the HangWatcher. +// +// Example usage: +// +// void FooBar(){ +// HangWatchScope scope(base::TimeDelta::FromSeconds(5)); +// DoSomeWork(); +// } +// +// If DoSomeWork() takes more than 5s to run and the HangWatcher +// inspects the thread state before Foobar returns a hang will be +// reported. Instances of this object should live on the stack only as they are +// intrinsicaly linked to the execution scopes that contain them. +// Keeping a HangWatchScope alive after the scope in which it was created has +// exited would lead to non-actionnable hang reports. +class BASE_EXPORT HangWatchScope { + public: + // Constructing/destructing thread must be the same thread. + explicit HangWatchScope(TimeDelta timeout); + ~HangWatchScope(); + + HangWatchScope(const HangWatchScope&) = delete; + HangWatchScope& operator=(const HangWatchScope&) = delete; + + private: + // This object should always be constructed and destructed on the same thread. + THREAD_CHECKER(thread_checker_); + + // The deadline set by the previous HangWatchScope created on this thread. + // Stored so it can be reset when this HangWatchScope is destroyed. + TimeTicks previous_deadline_; + +#if DCHECK_IS_ON() + // The previous HangWatchScope created on this thread. + HangWatchScope* previous_scope_; +#endif +}; + +// Monitors registered threads for hangs by inspecting their associated +// HangWatchStates for deadline overruns. Only one instance of HangWatcher can +// exist at a time. +class BASE_EXPORT HangWatcher { + public: + // The first invocation of the constructor will set the global instance + // accessible through GetInstance(). This means that only one instance can + // exist at a time. + explicit HangWatcher(RepeatingClosure on_hang_closure); + + // Clears the global instance for the class. + ~HangWatcher(); + + HangWatcher(const HangWatcher&) = delete; + HangWatcher& operator=(const HangWatcher&) = delete; + + // Returns a non-owning pointer to the global HangWatcher instance. + static HangWatcher* GetInstance(); + + // Sets up the calling thread to be monitored for threads. Returns a + // ScopedClosureRunner that unregisters the thread. This closure has to be + // called from the registered thread before it's joined. + ScopedClosureRunner RegisterThread() WARN_UNUSED_RESULT; + + // Inspects the state of all registered threads to check if they are hung. + void Monitor(); + + private: + // Stops hang watching on the calling thread by removing the entry from the + // watch list. + void UnregisterThread(); + + const RepeatingClosure on_hang_closure_; + Lock watch_state_lock_; + + std::vector<std::unique_ptr<internal::HangWatchState>> watch_states_ + GUARDED_BY(watch_state_lock_); +}; + +// Classes here are exposed in the header only for testing. They are not +// intended to be used outside of base. +namespace internal { + +// Contains the information necessary for hang watching a specific +// thread. Instances of this class are accessed concurrently by the associated +// thread and the HangWatcher. The HangWatcher owns instances of this +// class and outside of it they are accessed through +// GetHangWatchStateForCurrentThread(). +class BASE_EXPORT HangWatchState { + public: + HangWatchState(); + ~HangWatchState(); + + HangWatchState(const HangWatchState&) = delete; + HangWatchState& operator=(const HangWatchState&) = delete; + + // Allocates a new state object bound to the calling thread and returns an + // owning pointer to it. + static std::unique_ptr<HangWatchState> CreateHangWatchStateForCurrentThread(); + + // Retrieves the hang watch state associated with the calling thread. + // Returns nullptr if no HangWatchState exists for the current thread (see + // CreateHangWatchStateForCurrentThread()). + static ThreadLocalPointer<HangWatchState>* + GetHangWatchStateForCurrentThread(); + + // Returns the value of the current deadline. Use this function if you need to + // store the value. To test if the deadline has expired use IsOverDeadline(). + TimeTicks GetDeadline() const; + + // Atomically sets the deadline to a new value and return the previous value. + TimeTicks SetDeadline(TimeTicks deadline); + + // Tests whether the associated thread's execution has gone over the deadline. + bool IsOverDeadline() const; + +#if DCHECK_IS_ON() + // Saves the supplied HangWatchScope as the currently active scope. + void SetCurrentHangWatchScope(HangWatchScope* scope); + + // Retrieve the currently active scope. + HangWatchScope* GetCurrentHangWatchScope(); +#endif + + private: + // The thread that creates the instance should be the class that updates + // the deadline. + THREAD_CHECKER(thread_checker_); + + // If the deadline fails to be updated before TimeTicks::Now() ever + // reaches the value contained in it this constistutes a hang. + std::atomic<TimeTicks> deadline_; + +#if DCHECK_IS_ON() + // Used to keep track of the current HangWatchScope and detect improper usage. + // Scopes should always be destructed in reverse order from the one they were + // constructed in. Example of improper use: + // + // { + // std::unique_ptr<Scope> scope = std::make_unique<Scope>(...); + // Scope other_scope; + // |scope| gets deallocated first, violating reverse destruction order. + // scope.reset(); + // } + HangWatchScope* current_hang_watch_scope_{nullptr}; +#endif +}; + +} // namespace internal +} // namespace base + +#endif // BASE_THREADING_HANG_WATCHER_H_
diff --git a/base/threading/hang_watcher_unittest.cc b/base/threading/hang_watcher_unittest.cc new file mode 100644 index 0000000..289295d --- /dev/null +++ b/base/threading/hang_watcher_unittest.cc
@@ -0,0 +1,175 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/threading/hang_watcher.h" +#include <memory> + +#include "base/bind.h" +#include "base/callback.h" +#include "base/callback_helpers.h" +#include "base/synchronization/lock.h" +#include "base/synchronization/waitable_event.h" +#include "base/test/task_environment.h" +#include "base/threading/platform_thread.h" +#include "base/time/time.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace base { +namespace { + +constexpr base::TimeDelta kTimeout(base::TimeDelta::FromSeconds(10)); +constexpr base::TimeDelta kHangTime = + kTimeout + base::TimeDelta::FromSeconds(1); + +// Waits on provided WaitableEvent before executing and signals when done. +class BlockingThread : public PlatformThread::Delegate { + public: + explicit BlockingThread(base::WaitableEvent* unblock_thread) + : unblock_thread_(unblock_thread) {} + + void ThreadMain() override { + // (Un)Register the thread here instead of in ctor/dtor so that the action + // happens on the right thread. + base::ScopedClosureRunner unregister_closure = + base::HangWatcher::GetInstance()->RegisterThread(); + + HangWatchScope scope(kTimeout); + wait_until_entered_scope_.Signal(); + + unblock_thread_->Wait(); + run_event_.Signal(); + } + + bool IsDone() { return run_event_.IsSignaled(); } + + // Block until this thread registered itself for hang watching and has entered + // a HangWatchScope. + void WaitUntilScopeEntered() { wait_until_entered_scope_.Wait(); } + + private: + // Will be signaled once the thread is properly registered for watching and + // scope has been entered. + WaitableEvent wait_until_entered_scope_; + + // Will be signaled once ThreadMain has run. + WaitableEvent run_event_; + + base::WaitableEvent* const unblock_thread_; +}; + +class HangWatcherTest : public testing::Test { + public: + HangWatcherTest() + : hang_watcher_(std::make_unique<HangWatcher>( + base::BindRepeating(&WaitableEvent::Signal, + base::Unretained(&hang_event_)))), + thread_(&unblock_thread_) {} + + void StartBlockedThread() { + // Thread has not run yet. + ASSERT_FALSE(thread_.IsDone()); + + // Start the thread. It will block since |unblock_thread_| was not + // signaled yet. + ASSERT_TRUE(PlatformThread::Create(0, &thread_, &handle)); + + thread_.WaitUntilScopeEntered(); + } + + void MonitorHangsAndJoinThread() { + // Try to detect a hang if any. + HangWatcher::GetInstance()->Monitor(); + + unblock_thread_.Signal(); + + // Thread is joinable since we signaled |unblock_thread_|. + PlatformThread::Join(handle); + + // If thread is done then it signaled. + ASSERT_TRUE(thread_.IsDone()); + } + + protected: + std::unique_ptr<HangWatcher> hang_watcher_; + + // Used exclusively for MOCK_TIME. No tasks will be run on the environment. + test::TaskEnvironment task_environment_{ + test::TaskEnvironment::TimeSource::MOCK_TIME}; + + PlatformThreadHandle handle; + + WaitableEvent unblock_thread_; + + BlockingThread thread_; + + // Signaled when a hang is detected. + WaitableEvent hang_event_; +}; +} // namespace + +TEST_F(HangWatcherTest, NoScopes) { + HangWatcher::GetInstance()->Monitor(); + ASSERT_FALSE(hang_event_.IsSignaled()); +} + +TEST_F(HangWatcherTest, NestedScopes) { + // Create a state object for the test thread since this test is single + // threaded. + auto current_hang_watch_state = + base::internal::HangWatchState::CreateHangWatchStateForCurrentThread(); + + ASSERT_FALSE(current_hang_watch_state->IsOverDeadline()); + base::TimeTicks original_deadline = current_hang_watch_state->GetDeadline(); + + constexpr base::TimeDelta kFirstTimeout( + base::TimeDelta::FromMilliseconds(500)); + base::TimeTicks first_deadline = base::TimeTicks::Now() + kFirstTimeout; + + constexpr base::TimeDelta kSecondTimeout( + base::TimeDelta::FromMilliseconds(250)); + base::TimeTicks second_deadline = base::TimeTicks::Now() + kSecondTimeout; + + // At this point we have not set any timeouts. + { + // Create a first timeout which is more restrictive than the default. + HangWatchScope first_scope(kFirstTimeout); + + // We are on mock time. There is no time advancement and as such no hangs. + ASSERT_FALSE(current_hang_watch_state->IsOverDeadline()); + ASSERT_EQ(current_hang_watch_state->GetDeadline(), first_deadline); + { + // Set a yet more restrictive deadline. Still no hang. + HangWatchScope second_scope(kSecondTimeout); + ASSERT_FALSE(current_hang_watch_state->IsOverDeadline()); + ASSERT_EQ(current_hang_watch_state->GetDeadline(), second_deadline); + } + // First deadline we set should be restored. + ASSERT_FALSE(current_hang_watch_state->IsOverDeadline()); + ASSERT_EQ(current_hang_watch_state->GetDeadline(), first_deadline); + } + + // Original deadline should now be restored. + ASSERT_FALSE(current_hang_watch_state->IsOverDeadline()); + ASSERT_EQ(current_hang_watch_state->GetDeadline(), original_deadline); +} + +TEST_F(HangWatcherTest, Hang) { + StartBlockedThread(); + + // Simulate hang. + task_environment_.FastForwardBy(kHangTime); + + MonitorHangsAndJoinThread(); + ASSERT_TRUE(hang_event_.IsSignaled()); +} + +TEST_F(HangWatcherTest, NoHang) { + StartBlockedThread(); + + MonitorHangsAndJoinThread(); + ASSERT_FALSE(hang_event_.IsSignaled()); +} + +} // namespace base
diff --git a/base/threading/thread.cc b/base/threading/thread.cc index 177873f..d264c1d 100644 --- a/base/threading/thread.cc +++ b/base/threading/thread.cc
@@ -160,18 +160,18 @@ if (options.delegate) { DCHECK(!options.message_pump_factory); - DCHECK(!options.task_queue_time_domain_); + DCHECK(!options.task_queue_time_domain); delegate_ = WrapUnique(options.delegate); } else if (options.message_pump_factory) { delegate_ = std::make_unique<SequenceManagerThreadDelegate>( MessagePumpType::CUSTOM, options.message_pump_factory, - options.task_queue_time_domain_); + options.task_queue_time_domain); } else { delegate_ = std::make_unique<SequenceManagerThreadDelegate>( options.message_pump_type, BindOnce([](MessagePumpType type) { return MessagePump::Create(type); }, options.message_pump_type), - options.task_queue_time_domain_); + options.task_queue_time_domain); } start_event_.Reset();
diff --git a/base/threading/thread.h b/base/threading/thread.h index f376f111..f19f328 100644 --- a/base/threading/thread.h +++ b/base/threading/thread.h
@@ -96,7 +96,7 @@ // The time domain to be used by the task queue. This is not compatible with // a non-null |delegate|. - sequence_manager::TimeDomain* task_queue_time_domain_ = nullptr; + sequence_manager::TimeDomain* task_queue_time_domain = nullptr; // Used to create the MessagePump for the MessageLoop. The callback is Run() // on the thread. If message_pump_factory.is_null(), then a MessagePump
diff --git a/build/android/gyp/compile_resources.py b/build/android/gyp/compile_resources.py index cf2b4db5..f353fd6 100755 --- a/build/android/gyp/compile_resources.py +++ b/build/android/gyp/compile_resources.py
@@ -697,7 +697,8 @@ build.deps_dir) logging.debug('Applying locale transformations') path_info = resource_utils.ResourceInfoFile() - _DuplicateZhResources(dep_subdirs, path_info) + if options.support_zh_hk: + _DuplicateZhResources(dep_subdirs, path_info) _RenameLocaleResourceDirs(dep_subdirs, path_info) _RemoveUnwantedLocalizedStrings(dep_subdirs, options)
diff --git a/build/cipd/cipd.gni b/build/cipd/cipd.gni new file mode 100644 index 0000000..1e68f93c --- /dev/null +++ b/build/cipd/cipd.gni
@@ -0,0 +1,73 @@ +# Copyright 2020 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Build targets for constructing CIPD packages. +# +# Prepares a CIPD archive and generates a manifest file. +# +# TODO(crbug.com/1042819): Add support for including directories. +# +# Parameters: +# package_definition_yaml: CIPD package definition filename. "cipd.yaml" +# if unspecified. +# package: The path where the package will be located inside the CIPD +# repository. +# description: Sets the "description" field in CIPD package definition. +# install_mode: String, should be either "symlink" or "copy". Defaults to +# "symlink". +# deps: A list of targets to build prior to copying files. +# sources: A list of files to copy into the staging root. +# +# Example: +# cipd_package_definition("chromedriver") { +# package = "path/to/cipd/package" +# description = "Prebuilt test binary." +# install_mode = "copy" +# deps = [ "//path/to:test_binary_target" ] +# sources = [ "//path/to:test_binary_file" ] +# } +# +template("cipd_package_definition") { + forward_variables_from(invoker, + [ + "deps", + "data", + "data_deps", + "sources", + "testonly", + ]) + + assert(defined(invoker.sources), "sources must be specified.") + + _install_mode = "symlink" + if (defined(invoker.install_mode)) { + _install_mode = invoker.install_mode + } + assert(_install_mode == "copy" || _install_mode == "symlink", + "\"install_mode\" arg should be either \"copy\" or \"symlink\".") + + _cipd_definition_yaml = "cipd.yaml" + if (defined(invoker.package_definition_yaml)) { + _cipd_definition_yaml = invoker.package_definition_yaml + } + + _package_staging_dir = "${target_gen_dir}/${target_name}" + + _yaml_contents = [ + "package: ${invoker.package}", + "description: ${invoker.description}", + "root: \${outdir}/" + rebase_path(_package_staging_dir, root_build_dir), + "install_mode: ${_install_mode}", + "data:", + ] + foreach(source, sources) { + _yaml_contents += [ " - file: " + get_path_info(source, "file") ] + } + + write_file("${_package_staging_dir}/${_cipd_definition_yaml}", _yaml_contents) + + copy(target_name) { + outputs = [ "${_package_staging_dir}/{{source_file_part}}" ] + } +}
diff --git a/build/config/locales.gni b/build/config/locales.gni index bd57fc3..44875e7 100644 --- a/build/config/locales.gni +++ b/build/config/locales.gni
@@ -171,9 +171,7 @@ ] if (is_android) { - # Add all locales except "zh-HK" since this currently rendered as "zh-TW" - # https://crbug.com/780847 - locales = all_chrome_locales - [ "zh-HK" ] + locales = all_chrome_locales # Android doesn't ship all locales on KitKat in order to save space # (but webview does). http://crbug.com/369218
diff --git a/build/linux/unbundle/libxml.gn b/build/linux/unbundle/libxml.gn index c481bd35..3587881 100644 --- a/build/linux/unbundle/libxml.gn +++ b/build/linux/unbundle/libxml.gn
@@ -8,11 +8,48 @@ packages = [ "libxml-2.0" ] } -static_library("libxml") { +source_set("libxml") { + public_configs = [ ":system_libxml" ] +} + +static_library("libxml_utils") { + # Do not expand this visibility list without first consulting with the + # Security Team. + visibility = [ + ":xml_reader", + ":xml_writer", + "//base/test:test_support", + "//services/data_decoder:xml_parser_fuzzer", + ] sources = [ "chromium/libxml_utils.cc", "chromium/libxml_utils.h", ] - public_configs = [ ":system_libxml" ] } + +static_library("xml_reader") { + # Do not expand this visibility list without first consulting with the + # Security Team. + visibility = [ + "//base/test:test_support", + "//components/policy/core/common:unit_tests", + "//services/data_decoder:*", + "//tools/traffic_annotation/auditor:auditor_sources", + ] + sources = [ + "chromium/xml_reader.cc", + "chromium/xml_reader.h", + ] + deps = [ ":libxml_utils" ] +} + +static_library("xml_writer") { + # The XmlWriter is considered safe to use from any target. + visibility = [ "*" ] + sources = [ + "chromium/xml_writer.cc", + "chromium/xml_writer.h", + ] + deps = [ ":libxml_utils" ] +}
diff --git a/build/toolchain/mac/BUILD.gn b/build/toolchain/mac/BUILD.gn index d78946e..cb96e1e 100644 --- a/build/toolchain/mac/BUILD.gn +++ b/build/toolchain/mac/BUILD.gn
@@ -274,7 +274,8 @@ } tool("solink") { - dylib = "{{output_dir}}/{{target_output_name}}{{output_extension}}" # eg "./libfoo.dylib" + # E.g. "./libfoo.dylib": + dylib = "{{output_dir}}/{{target_output_name}}{{output_extension}}" rspfile = dylib + ".rsp" pool = "//build/toolchain:link_pool($default_toolchain)" @@ -345,7 +346,8 @@ } tool("solink_module") { - sofile = "{{output_dir}}/{{target_output_name}}{{output_extension}}" # eg "./libfoo.so" + # E.g. "./libfoo.so": + sofile = "{{output_dir}}/{{target_output_name}}{{output_extension}}" rspfile = sofile + ".rsp" pool = "//build/toolchain:link_pool($default_toolchain)"
diff --git a/build/toolchain/win/BUILD.gn b/build/toolchain/win/BUILD.gn index adec621..5dcff8f 100644 --- a/build/toolchain/win/BUILD.gn +++ b/build/toolchain/win/BUILD.gn
@@ -123,7 +123,8 @@ # passing in a list of include directories isn't enough. if (defined(invoker.sys_include_flags)) { env_wrapper = "" - sys_include_flags = "${invoker.sys_include_flags} " # Note trailing space. + sys_include_flags = + "${invoker.sys_include_flags} " # Note trailing space. } else { # clang-cl doesn't need this env hoop, so omit it there. assert((defined(toolchain_args.is_clang) && !toolchain_args.is_clang) || @@ -136,7 +137,7 @@ # mt.exe in PATH on non-Windows, so it's not needed there anyways. if (host_os != "win") { linker_wrapper = "" - sys_lib_flags = "${invoker.sys_lib_flags} " # Note trailing space + sys_lib_flags = "${invoker.sys_lib_flags} " # Note trailing space. } else if (defined(invoker.sys_lib_flags)) { # Invoke ninja as wrapper instead of tool wrapper, because python # invocation requires higher cpu usage compared to ninja invocation, and @@ -144,10 +145,11 @@ # TODO(thakis): Remove wrapper once lld-link can merge manifests without # relying on mt.exe being in %PATH% on Windows, https://crbug.com/872740 linker_wrapper = "ninja -t msvc -e $env -- " # Note trailing space. - sys_lib_flags = "${invoker.sys_lib_flags} " # Note trailing space + sys_lib_flags = "${invoker.sys_lib_flags} " # Note trailing space. } else { + # Note trailing space: linker_wrapper = - "$python_path $tool_wrapper_path link-wrapper $env False " # Note trailing space. + "$python_path $tool_wrapper_path link-wrapper $env False " sys_lib_flags = "" } @@ -268,7 +270,8 @@ } tool("solink") { - dllname = "{{output_dir}}/{{target_output_name}}{{output_extension}}" # e.g. foo.dll + # E.g. "foo.dll": + dllname = "{{output_dir}}/{{target_output_name}}{{output_extension}}" libname = "${dllname}.lib" # e.g. foo.dll.lib pdbname = "${dllname}.pdb" rspfile = "${dllname}.rsp" @@ -302,7 +305,9 @@ } tool("solink_module") { - dllname = "{{output_dir}}/{{target_output_name}}{{output_extension}}" # e.g. foo.dll + dllname = + "{{output_dir}}/{{target_output_name}}{{output_extension}}" # e.g. + # foo.dll pdbname = "${dllname}.pdb" rspfile = "${dllname}.rsp" pool = "//build/toolchain:link_pool($default_toolchain)"
diff --git a/buildtools/DEPS b/buildtools/DEPS index 92d828b2..272a537 100644 --- a/buildtools/DEPS +++ b/buildtools/DEPS
@@ -14,7 +14,7 @@ # # GN CIPD package version. - 'gn_version': 'git_revision:83dad00afb232d7235dd70dff1ee90292d72a01e', + 'gn_version': 'git_revision:97cc440d84f050f99ff0161f9414bfa2ffa38f65', # When changing these, also update the svn revisions in deps_revisions.gni 'clang_format_revision': '96636aa0e9f047f17447f2d45a094d0b59ed7917',
diff --git a/buildtools/third_party/libc++abi/BUILD.gn b/buildtools/third_party/libc++abi/BUILD.gn index cd05c32d..22517c2 100644 --- a/buildtools/third_party/libc++abi/BUILD.gn +++ b/buildtools/third_party/libc++abi/BUILD.gn
@@ -15,9 +15,7 @@ # unwinding symbols, unlike Linux does with glibc. Build and link against # libunwind manually to get this functionality. if (is_fuchsia) { - deps = [ - "//buildtools/third_party/libunwind", - ] + deps = [ "//buildtools/third_party/libunwind" ] } sources = [
diff --git a/cc/input/scroll_state_data.h b/cc/input/scroll_state_data.h index 39c34717..6aae516 100644 --- a/cc/input/scroll_state_data.h +++ b/cc/input/scroll_state_data.h
@@ -46,7 +46,8 @@ // True if the user interacts directly with the display, e.g., via // touch. bool is_direct_manipulation; - // Minimum amount this input device can scroll. + // Granularity units for delta - TODO(dlibby): change this to an enum - + // crbug.com/1045306 double delta_granularity; // TODO(tdresser): ScrollState shouldn't need to keep track of whether or not
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc index ebb4fa8e..2fbccae 100644 --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc
@@ -3642,6 +3642,17 @@ input_handler_client_ = client; } +gfx::Vector2dF LayerTreeHostImpl::ResolveScrollPercentageToPixels( + const ScrollNode& scroll_node, + const gfx::Vector2dF& scroll_delta) { + gfx::Vector2dF scroll_delta_in_pixels; + scroll_delta_in_pixels.set_x(scroll_delta.x() * + scroll_node.container_bounds.width()); + scroll_delta_in_pixels.set_y(scroll_delta.y() * + scroll_node.container_bounds.height()); + return scroll_delta_in_pixels; +} + InputHandler::ScrollStatus LayerTreeHostImpl::TryScroll( const ScrollTree& scroll_tree, ScrollNode* scroll_node) const { @@ -4623,6 +4634,21 @@ DCHECK(scroll_state); last_scroll_state_ = *scroll_state; + bool is_delta_percent_units = + scroll_state->delta_granularity() == + static_cast<double>( + ui::input_types::ScrollGranularity::kScrollByPercentage); + if (CurrentlyScrollingNode() && is_delta_percent_units) { + gfx::Vector2dF resolvedScrollDelta = ResolveScrollPercentageToPixels( + *CurrentlyScrollingNode(), + gfx::Vector2dF(scroll_state->delta_x(), scroll_state->delta_y())); + + scroll_state->data()->delta_x = resolvedScrollDelta.x(); + scroll_state->data()->delta_y = resolvedScrollDelta.y(); + scroll_state->data()->delta_granularity = + static_cast<double>(ui::input_types::ScrollGranularity::kScrollByPixel); + } + gfx::Vector2dF scroll_delta(scroll_state->delta_x(), scroll_state->delta_y()); scroll_accumulated_this_frame_ += scroll_delta;
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h index a03b49c..610fc63a 100644 --- a/cc/trees/layer_tree_host_impl.h +++ b/cc/trees/layer_tree_host_impl.h
@@ -855,6 +855,10 @@ void CollectScrollDeltas(ScrollAndScaleSet* scroll_info); void CollectScrollbarUpdates(ScrollAndScaleSet* scroll_info) const; + gfx::Vector2dF ResolveScrollPercentageToPixels( + const ScrollNode& scroll_node, + const gfx::Vector2dF& resolved_pixels); + // Returns the ScrollNode we should use to scroll, accounting for viewport // scroll chaining rules. ScrollNode* GetNodeToScroll(ScrollNode* node) const;
diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn index bbc1aa4..fe09f99 100644 --- a/chrome/BUILD.gn +++ b/chrome/BUILD.gn
@@ -1081,7 +1081,8 @@ if (is_chrome_branded) { framework_contents += [ "Default Apps" ] if (enable_keystone_registration_framework) { - framework_contents += [ "Frameworks" ] # For KeystoneRegistration.framework. + framework_contents += + [ "Frameworks" ] # For KeystoneRegistration.framework. } }
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index cbb593640..6030163 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -1362,7 +1362,7 @@ disable_compression = _is_bundle_module renaming_sources = [] renaming_destinations = [] - foreach(_locale, android_apk_locales) { + foreach(_locale, locales) { renaming_sources += [ "$target_gen_dir/${_variant}_paks/locales/$_locale.pak" ] renaming_destinations += [ "locales/$_locale.pak" ]
diff --git a/chrome/android/chrome_public_apk_tmpl.gni b/chrome/android/chrome_public_apk_tmpl.gni index d8432215..a821df0d 100644 --- a/chrome/android/chrome_public_apk_tmpl.gni +++ b/chrome/android/chrome_public_apk_tmpl.gni
@@ -204,6 +204,9 @@ # For bundles, only include resource strings files from our full # locale list, but nothing more. aapt_locale_whitelist = locales + + # zh_hk is supported in Android bundles. + support_zh_hk = false } } @@ -225,7 +228,7 @@ if (!defined(negative_main_dex_globs)) { negative_main_dex_globs = [ "*ApplicationStatus*", # Doesn't work in non-browser process. - "*ChromeActivity*", # Pulls in the world, so ensure it doesn't slip in. + "*ChromeActivity*", # Pulls in the world; ensure it stays out. "*GoogleApiAvailability*", # Play Services only in browser process. "*R\$*", # Should not use resources from non-browser process. ] @@ -487,8 +490,9 @@ [ "//chrome/android:libmonochrome_64($_hwasan_toolchain)" ] if (use_chromium_linker) { - shared_libraries += - [ "//base/android/linker:chromium_android_linker($_hwasan_toolchain)" ] + shared_libraries += [ + "//base/android/linker:chromium_android_linker($_hwasan_toolchain)", + ] } }
diff --git a/chrome/android/features/autofill_assistant/java/strings/android_chrome_autofill_assistant_strings.grd b/chrome/android/features/autofill_assistant/java/strings/android_chrome_autofill_assistant_strings.grd index d7e3dceb..29bcd54 100644 --- a/chrome/android/features/autofill_assistant/java/strings/android_chrome_autofill_assistant_strings.grd +++ b/chrome/android/features/autofill_assistant/java/strings/android_chrome_autofill_assistant_strings.grd
@@ -79,6 +79,7 @@ <output filename="values-uz/android_chrome_autofill_assistant_strings.xml" lang="uz" type="android" /> <output filename="values-vi/android_chrome_autofill_assistant_strings.xml" lang="vi" type="android" /> <output filename="values-zh-rCN/android_chrome_autofill_assistant_strings.xml" lang="zh-CN" type="android" /> + <output filename="values-zh-rHK/android_chrome_autofill_assistant_strings.xml" lang="zh-HK" type="android" /> <output filename="values-zh-rTW/android_chrome_autofill_assistant_strings.xml" lang="zh-TW" type="android" /> <output filename="values-zu/android_chrome_autofill_assistant_strings.xml" lang="zu" type="android" /> </outputs>
diff --git a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantMetrics.java b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantMetrics.java index 852412a7..80877743 100644 --- a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantMetrics.java +++ b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantMetrics.java
@@ -4,7 +4,7 @@ package org.chromium.chrome.browser.autofill_assistant; -import org.chromium.base.metrics.CachedMetrics.EnumeratedHistogramSample; +import org.chromium.base.metrics.RecordHistogram; import org.chromium.chrome.browser.autofill_assistant.metrics.DropOutReason; import org.chromium.chrome.browser.autofill_assistant.metrics.FeatureModuleInstallation; import org.chromium.chrome.browser.autofill_assistant.metrics.OnBoarding; @@ -17,33 +17,19 @@ */ /* package */ class AutofillAssistantMetrics { /** - * Note: Java-side constructors expect a (NUM_ENTRIES+1) value, but C++ works with implicitly - * defined enum boundaries using 'kMaxValue'. See crbug.com/983518. - */ - private static final EnumeratedHistogramSample ENUMERATED_DROP_OUT_REASON = - new EnumeratedHistogramSample( - "Android.AutofillAssistant.DropOutReason", DropOutReason.MAX_VALUE + 1); - - private static final EnumeratedHistogramSample ENUMERATED_ON_BOARDING = - new EnumeratedHistogramSample( - "Android.AutofillAssistant.OnBoarding", OnBoarding.MAX_VALUE + 1); - - private static final EnumeratedHistogramSample ENUMERATED_FEATURE_MODULE_INSTALLATION = - new EnumeratedHistogramSample("Android.AutofillAssistant.FeatureModuleInstallation", - FeatureModuleInstallation.MAX_VALUE + 1); - - /** * Records the reason for a drop out. */ /* package */ static void recordDropOut(@DropOutReason int reason) { - ENUMERATED_DROP_OUT_REASON.record(reason); + RecordHistogram.recordEnumeratedHistogram( + "Android.AutofillAssistant.DropOutReason", reason, DropOutReason.MAX_VALUE + 1); } /** * Records the onboarding related action. */ /* package */ static void recordOnBoarding(@OnBoarding int metric) { - ENUMERATED_ON_BOARDING.record(metric); + RecordHistogram.recordEnumeratedHistogram( + "Android.AutofillAssistant.OnBoarding", metric, OnBoarding.MAX_VALUE + 1); } /** @@ -51,6 +37,8 @@ */ /* package */ static void recordFeatureModuleInstallation( @FeatureModuleInstallation int metric) { - ENUMERATED_FEATURE_MODULE_INSTALLATION.record(metric); + RecordHistogram.recordEnumeratedHistogram( + "Android.AutofillAssistant.FeatureModuleInstallation", metric, + FeatureModuleInstallation.MAX_VALUE + 1); } }
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/android_keyboard_accessory_strings.grd b/chrome/android/features/keyboard_accessory/internal/java/strings/android_keyboard_accessory_strings.grd index 9f93d16..2e83b39 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/strings/android_keyboard_accessory_strings.grd +++ b/chrome/android/features/keyboard_accessory/internal/java/strings/android_keyboard_accessory_strings.grd
@@ -79,6 +79,7 @@ <output filename="values-uz/android_keyboard_accessory_strings.xml" lang="uz" type="android" /> <output filename="values-vi/android_keyboard_accessory_strings.xml" lang="vi" type="android" /> <output filename="values-zh-rCN/android_keyboard_accessory_strings.xml" lang="zh-CN" type="android" /> + <output filename="values-zh-rHK/android_keyboard_accessory_strings.xml" lang="zh-HK" type="android" /> <output filename="values-zh-rTW/android_keyboard_accessory_strings.xml" lang="zh-TW" type="android" /> <output filename="values-zu/android_keyboard_accessory_strings.xml" lang="zu" type="android" /> </outputs>
diff --git a/chrome/android/features/media_router/java/strings/android_chrome_media_router_strings.grd b/chrome/android/features/media_router/java/strings/android_chrome_media_router_strings.grd index 068fef6..1f246c4c 100644 --- a/chrome/android/features/media_router/java/strings/android_chrome_media_router_strings.grd +++ b/chrome/android/features/media_router/java/strings/android_chrome_media_router_strings.grd
@@ -79,6 +79,7 @@ <output filename="values-uz/android_chrome_media_router_strings.xml" lang="uz" type="android" /> <output filename="values-vi/android_chrome_media_router_strings.xml" lang="vi" type="android" /> <output filename="values-zh-rCN/android_chrome_media_router_strings.xml" lang="zh-CN" type="android" /> + <output filename="values-zh-rHK/android_chrome_media_router_strings.xml" lang="zh-HK" type="android" /> <output filename="values-zh-rTW/android_chrome_media_router_strings.xml" lang="zh-TW" type="android" /> <output filename="values-zu/android_chrome_media_router_strings.xml" lang="zu" type="android" /> </outputs>
diff --git a/chrome/android/features/start_surface/internal/java/strings/android_chrome_start_surface_strings.grd b/chrome/android/features/start_surface/internal/java/strings/android_chrome_start_surface_strings.grd index 2f60ecf7..ac07a9c 100644 --- a/chrome/android/features/start_surface/internal/java/strings/android_chrome_start_surface_strings.grd +++ b/chrome/android/features/start_surface/internal/java/strings/android_chrome_start_surface_strings.grd
@@ -79,6 +79,7 @@ <output filename="values-uz/android_chrome_start_surface_strings.xml" lang="uz" type="android" /> <output filename="values-vi/android_chrome_start_surface_strings.xml" lang="vi" type="android" /> <output filename="values-zh-rCN/android_chrome_start_surface_strings.xml" lang="zh-CN" type="android" /> + <output filename="values-zh-rHK/android_chrome_start_surface_strings.xml" lang="zh-HK" type="android" /> <output filename="values-zh-rTW/android_chrome_start_surface_strings.xml" lang="zh-TW" type="android" /> <output filename="values-zu/android_chrome_start_surface_strings.xml" lang="zu" type="android" /> </outputs>
diff --git a/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings.grd b/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings.grd index d84dbe6..51c4698 100644 --- a/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings.grd +++ b/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings.grd
@@ -79,6 +79,7 @@ <output filename="values-uz/android_chrome_tab_ui_strings.xml" lang="uz" type="android" /> <output filename="values-vi/android_chrome_tab_ui_strings.xml" lang="vi" type="android" /> <output filename="values-zh-rCN/android_chrome_tab_ui_strings.xml" lang="zh-CN" type="android" /> + <output filename="values-zh-rHK/android_chrome_tab_ui_strings.xml" lang="zh-HK" type="android" /> <output filename="values-zh-rTW/android_chrome_tab_ui_strings.xml" lang="zh-TW" type="android" /> <output filename="values-zu/android_chrome_tab_ui_strings.xml" lang="zu" type="android" /> </outputs>
diff --git a/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrDelegateFallback.java b/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrDelegateFallback.java index dc0f3dc..35a904fa 100644 --- a/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrDelegateFallback.java +++ b/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrDelegateFallback.java
@@ -16,7 +16,7 @@ import org.chromium.base.Log; import org.chromium.base.compat.ApiHelperForN; import org.chromium.base.library_loader.LibraryLoader; -import org.chromium.base.metrics.CachedMetrics; +import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.task.PostTask; import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeActivity; @@ -29,9 +29,9 @@ * Fallback {@link VrDelegate} implementation if the VR module is not available. */ /* package */ class VrDelegateFallback extends VrDelegate { - /* package */ static final CachedMetrics - .BooleanHistogramSample ENTER_VR_BROWSER_WITHOUT_FEATURE_MODULE_METRIC = - new CachedMetrics.BooleanHistogramSample("VR.EnterVrBrowserWithoutFeatureModule"); + /* package */ static void recordEnterVrBrowserWithoutFeatureModule(boolean sample) { + RecordHistogram.recordBooleanHistogram("VR.EnterVrBrowserWithoutFeatureModule", sample); + } private static final String TAG = "VrDelegateFallback"; private static final boolean DEBUG_LOGS = false; private static final String DEFAULT_VR_MODE_PACKAGE = "com.google.vr.vrcore"; @@ -199,7 +199,7 @@ } assert VrModule.isInstalled(); - ENTER_VR_BROWSER_WITHOUT_FEATURE_MODULE_METRIC.record(true); + recordEnterVrBrowserWithoutFeatureModule(true); // We need native to enter VR. Enter VR flow will automatically continue once native is // loaded. @@ -214,7 +214,7 @@ } private void onVrModuleInstallFailure(Activity activity) { - ENTER_VR_BROWSER_WITHOUT_FEATURE_MODULE_METRIC.record(false); + recordEnterVrBrowserWithoutFeatureModule(false); // For SVR close Chrome. For standalones launch into 2D-in-VR (if that fails, close Chrome). if (bootsToVr()) {
diff --git a/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrFirstRunActivity.java b/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrFirstRunActivity.java index e9c16da..3f4df4f 100644 --- a/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrFirstRunActivity.java +++ b/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrFirstRunActivity.java
@@ -9,7 +9,7 @@ import android.os.Bundle; import android.os.Handler; -import org.chromium.base.metrics.CachedMetrics.BooleanHistogramSample; +import org.chromium.base.metrics.RecordHistogram; import org.chromium.chrome.browser.util.IntentUtils; /** @@ -22,9 +22,6 @@ public class VrFirstRunActivity extends Activity { private static final long SHOW_DOFF_TIMEOUT_MS = 500; - private static final BooleanHistogramSample sFreNotCompleteBrowserHistogram = - new BooleanHistogramSample("VRFreNotComplete.Browser"); - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -73,7 +70,7 @@ finish(); } - private void recordFreHistogram() { - sFreNotCompleteBrowserHistogram.record(true); + private static void recordFreHistogram() { + RecordHistogram.recordBooleanHistogram("VRFreNotComplete.Browser", true); } }
diff --git a/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrIntentDelegateFallback.java b/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrIntentDelegateFallback.java index 5bf86ed..922523b2 100644 --- a/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrIntentDelegateFallback.java +++ b/chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrIntentDelegateFallback.java
@@ -13,7 +13,7 @@ public class VrIntentDelegateFallback extends VrIntentDelegate { @Override public Intent setupVrFreIntent(Context context, Intent freIntent) { - VrDelegateFallback.ENTER_VR_BROWSER_WITHOUT_FEATURE_MODULE_METRIC.record(false); + VrDelegateFallback.recordEnterVrBrowserWithoutFeatureModule(false); if (VrModuleProvider.getDelegate().bootsToVr()) return freIntent; // Don't bother handling FRE without VR module on smartphone VR. Just request module and // return to caller.
diff --git a/chrome/android/features/vr/java/strings/android_chrome_vr_strings.grd b/chrome/android/features/vr/java/strings/android_chrome_vr_strings.grd index 9c64837..07f8f8bc 100644 --- a/chrome/android/features/vr/java/strings/android_chrome_vr_strings.grd +++ b/chrome/android/features/vr/java/strings/android_chrome_vr_strings.grd
@@ -79,6 +79,7 @@ <output filename="values-uz/android_chrome_vr_strings.xml" lang="uz" type="android" /> <output filename="values-vi/android_chrome_vr_strings.xml" lang="vi" type="android" /> <output filename="values-zh-rCN/android_chrome_vr_strings.xml" lang="zh-CN" type="android" /> + <output filename="values-zh-rHK/android_chrome_vr_strings.xml" lang="zh-HK" type="android" /> <output filename="values-zh-rTW/android_chrome_vr_strings.xml" lang="zh-TW" type="android" /> <output filename="values-zu/android_chrome_vr_strings.xml" lang="zu" type="android" /> </outputs>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivitySessionTracker.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivitySessionTracker.java index 3795619..1dfd269 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivitySessionTracker.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivitySessionTracker.java
@@ -24,6 +24,7 @@ import org.chromium.chrome.browser.browsing_data.BrowsingDataType; import org.chromium.chrome.browser.browsing_data.TimePeriod; import org.chromium.chrome.browser.firstrun.FirstRunUtils; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.FeatureUtilities; import org.chromium.chrome.browser.metrics.UmaUtils; import org.chromium.chrome.browser.metrics.VariationsSession; @@ -41,6 +42,8 @@ import org.chromium.chrome.browser.translate.TranslateBridge; import org.chromium.ui.base.ResourceBundle; +import java.util.Arrays; +import java.util.List; import java.util.Locale; /** @@ -256,7 +259,10 @@ private void cacheNativeFlags() { if (mIsFinishedCachingNativeFlags) return; FirstRunUtils.cacheFirstRunPrefs(); - FeatureUtilities.cacheNativeFlags(); + + List<String> featuresToCache = Arrays.asList(ChromeFeatureList.HOMEPAGE_LOCATION_POLICY); + FeatureUtilities.cacheNativeFlags(featuresToCache); + FeatureUtilities.cacheAdditionalNativeFlags(); mIsFinishedCachingNativeFlags = true; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/home/DownloadManagerCoordinatorFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/download/home/DownloadManagerCoordinatorFactory.java index de2e083f..6437c51 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/home/DownloadManagerCoordinatorFactory.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/home/DownloadManagerCoordinatorFactory.java
@@ -30,7 +30,7 @@ ModalDialogManager modalDialogManager) { Profile profile = Profile.getMainProfile(); LegacyDownloadProvider legacyProvider = - config.useNewDownloadPath ? new LegacyDownloadProviderImpl() : null; + config.useNewDownloadPath ? null : new LegacyDownloadProviderImpl(); return new DownloadManagerCoordinatorImpl(activity, config, new PrefetchEnabledSupplier(), DownloadManagerCoordinatorFactory::settingsLaunchHelper, snackbarManager, modalDialogManager, TrackerFactory.getTrackerForProfile(profile),
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/flags/FeatureUtilities.java b/chrome/android/java/src/org/chromium/chrome/browser/flags/FeatureUtilities.java index 804650061..82ac432a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/flags/FeatureUtilities.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/flags/FeatureUtilities.java
@@ -35,20 +35,16 @@ import java.util.Map; /** - * A utility {@code class} meant to help determine whether or not certain features are supported by - * this device. + * A class to cache the state of flags from {@link ChromeFeatureList}. * - * This utility class also contains support for cached feature flags that must take effect on - * startup before native is initialized but are set via native code. The caching is done in + * It caches certain feature flags that must take effect on startup before native is initialized. + * ChromeFeatureList can only be queried through native code. The caching is done in * {@link android.content.SharedPreferences}, which is available in Java immediately. * - * To cache the flag {@link ChromeFeatureList}.FOO: - * - Call {@link FeatureUtilities#cacheFlag(String, String)} in {@link - * FeatureUtilities#cacheNativeFlags()} passing - * {@link ChromePreferenceKeys#FLAGS_CACHED}.createKey(FOO) and FOO. - * - To query whether the cached flag is enabled in client code, call - * {@link FeatureUtilities#isFlagEnabled(String, boolean)} passing - * {@link ChromePreferenceKeys#FLAGS_CACHED}.createKey(FOO). + * To cache a flag from ChromeFeatureList: + * - Set its default value by adding an entry to {@link #sDefaults}. + * - Add it to the list passed to {@link #cacheNativeFlags()}. + * - Call {@link #isEnabled(String)} to query whether the cached flag is enabled. * Consider this the source of truth for whether the flag is turned on in the current session. * - When querying whether a cached feature is enabled from native, a @CalledByNative method can be * exposed in this file to allow feature_utilities.cc to retrieve the cached value. @@ -60,6 +56,14 @@ * value in shared preferences. */ public class FeatureUtilities { + /** + * Stores the default values for each feature flag queried, used as a fallback in case native + * isn't loaded, and no value has been previously cached. + */ + private static Map<String, Boolean> sDefaults = new HashMap<String, Boolean>() { + { put(ChromeFeatureList.HOMEPAGE_LOCATION_POLICY, false); } + }; + private static Map<String, Boolean> sFlags = new HashMap<>(); private static Boolean sHasRecognitionIntentHandler; private static String sReachedCodeProfilerTrialGroup; @@ -67,6 +71,70 @@ private static final String ALLOW_TO_REFETCH = "allow_to_refetch"; /** + * Checks if a cached feature flag is enabled. + * + * Requires that the feature be registered in {@link #sDefaults}. + * + * Rules from highest to lowest priority: + * 1. If the flag has been forced by {@link #setForTesting}, the forced value is returned. + * 2. If a value was previously returned in the same run, the same value is returned for + * consistency. + * 3. If native is loaded, the value from {@link ChromeFeatureList} is returned. + * 4. If in a previous run, the value from {@link ChromeFeatureList} was cached to SharedPrefs, + * it is returned. + * 5. The default value defined in {@link #sDefaults} is returned. + * + * @param featureName the feature name from ChromeFeatureList. + * @return whether the cached feature should be considered enabled. + */ + public static boolean isEnabled(String featureName) { + // All cached feature flags should have a default value. + if (!sDefaults.containsKey(featureName)) { + throw new IllegalArgumentException( + "Feature " + featureName + " has no default in FeatureUtilities."); + } + + String preferenceName = getPrefForFeatureFlag(featureName); + + Boolean flag = sFlags.get(preferenceName); + if (flag != null) { + return flag; + } + + SharedPreferencesManager prefs = SharedPreferencesManager.getInstance(); + if (prefs.contains(preferenceName)) { + flag = prefs.readBoolean(preferenceName, false); + } else { + flag = sDefaults.get(featureName); + } + sFlags.put(preferenceName, flag); + return flag; + } + + /** + * Caches the value of a feature from {@link ChromeFeatureList} to SharedPrefs. + * + * @param featureName the feature name from ChromeFeatureList. + */ + private static void cacheFeature(String featureName) { + String preferenceName = getPrefForFeatureFlag(featureName); + boolean isEnabledInNative = ChromeFeatureList.isEnabled(featureName); + SharedPreferencesManager.getInstance().writeBoolean(preferenceName, isEnabledInNative); + } + + /** + * Forces a feature to be enabled or disabled for testing. + * + * @param featureName the feature name from ChromeFeatureList. + * @param value the value that {@link #isEnabled(String)} will be forced to return. If null, + * remove any values previously forced. + */ + public static void setForTesting(String featureName, @Nullable Boolean value) { + String preferenceName = getPrefForFeatureFlag(featureName); + sFlags.put(preferenceName, value); + } + + /** * Determines whether or not the {@link RecognizerIntent#ACTION_WEB_SEARCH} {@link Intent} * is handled by any {@link android.app.Activity}s in the system. The result will be cached for * future calls. Passing {@code false} to {@code useCachedValue} will force it to re-query any @@ -88,7 +156,23 @@ /** * Caches flags that must take effect on startup but are set via native code. */ - public static void cacheNativeFlags() { + public static void cacheNativeFlags(List<String> featuresToCache) { + for (String featureName : featuresToCache) { + if (!sDefaults.containsKey(featureName)) { + throw new IllegalArgumentException( + "Feature " + featureName + " has no default in FeatureUtilities."); + } + cacheFeature(featureName); + } + } + + /** + * Caches a predetermined list of flags that must take effect on startup but are set via native + * code. + * + * Do not add new simple boolean flags here, use {@link #cacheNativeFlags} instead. + */ + public static void cacheAdditionalNativeFlags() { cacheCommandLineOnNonRootedEnabled(); cacheBottomToolbarEnabled(); cacheAdaptiveToolbarEnabled(); @@ -105,7 +189,6 @@ cacheReachedCodeProfilerTrialGroup(); cacheStartSurfaceEnabled(); cacheNativeTabSwitcherUiFlags(); - cacheHomepageLocationPolicyEnabled(); cachePaintPreviewTestEnabled(); cacheAllowToRefetchTabThumbnail(); @@ -698,24 +781,6 @@ } /** - * Caches the feature flag for whether we enable the homepage location policy. - */ - private static void cacheHomepageLocationPolicyEnabled() { - cacheFlag(ChromePreferenceKeys.FLAGS_CACHED.createKey( - ChromeFeatureList.HOMEPAGE_LOCATION_POLICY), - ChromeFeatureList.HOMEPAGE_LOCATION_POLICY); - } - - /** - * @return True if homepage location policy is supported to be enabled. - */ - public static boolean isHomepageLocationPolicyEnabled() { - return isFlagEnabled(ChromePreferenceKeys.FLAGS_CACHED.createKey( - ChromeFeatureList.HOMEPAGE_LOCATION_POLICY), - false); - } - - /** * @return Whether the thumbnail_aspect_ratio field trail is set. */ public static boolean isTabThumbnailAspectRatioNotOne() { @@ -756,15 +821,9 @@ } /** - * Expose an interface to set the homepage policy feature flag to be enabled during tests. + * @deprecated Add the feature to {@link #cacheNativeFlags() instead}. */ - @VisibleForTesting - public static void setHomepageLocationPolicyEnabledForTesting(@Nullable Boolean isEnabled) { - sFlags.put(ChromePreferenceKeys.FLAGS_CACHED.createKey( - ChromeFeatureList.HOMEPAGE_LOCATION_POLICY), - isEnabled); - } - + @Deprecated private static void cacheFlag(String preferenceName, String featureName) { SharedPreferencesManager.getInstance().writeBoolean( preferenceName, ChromeFeatureList.isEnabled(featureName)); @@ -776,6 +835,10 @@ ChromeFeatureList.getFieldTrialParamByFeature(featureName, variationName)); } + /** + * @deprecated Call {@link #isEnabled(String)} instead. + */ + @Deprecated private static boolean isFlagEnabled(String preferenceName, boolean defaultValue) { Boolean flag = sFlags.get(preferenceName); if (flag == null) { @@ -785,6 +848,10 @@ return flag; } + private static String getPrefForFeatureFlag(String featureName) { + return ChromePreferenceKeys.FLAGS_CACHED.createKey(featureName); + } + private static String getPrefForFieldTrialParam(String featureName, String paramName) { return ChromePreferenceKeys.FLAGS_FIELD_TRIAL_PARAM_CACHED.createKey( featureName + ":" + paramName); @@ -795,6 +862,13 @@ sFlags.clear(); } + @VisibleForTesting + public static Map<String, Boolean> swapDefaultsForTesting(Map<String, Boolean> testDefaults) { + Map<String, Boolean> swapped = sDefaults; + sDefaults = testDefaults; + return swapped; + } + @NativeMethods interface Natives { boolean isNetworkServiceWarmUpEnabled();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepagePolicyManager.java b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepagePolicyManager.java index fbd015ea..ca3498aa 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepagePolicyManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepagePolicyManager.java
@@ -11,6 +11,7 @@ import androidx.annotation.VisibleForTesting; import org.chromium.base.ObserverList; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.FeatureUtilities; import org.chromium.chrome.browser.init.ChromeBrowserInitializer; import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; @@ -192,7 +193,7 @@ } private static boolean isFeatureFlagEnabled() { - return FeatureUtilities.isHomepageLocationPolicyEnabled(); + return FeatureUtilities.isEnabled(ChromeFeatureList.HOMEPAGE_LOCATION_POLICY); } @VisibleForTesting
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/partnercustomizations/HomepageManager.java b/chrome/android/java/src/org/chromium/chrome/browser/partnercustomizations/HomepageManager.java index 15c25e6..b71c565 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/partnercustomizations/HomepageManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/partnercustomizations/HomepageManager.java
@@ -10,6 +10,7 @@ import org.chromium.base.ObserverList; import org.chromium.base.metrics.RecordHistogram; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.FeatureUtilities; import org.chromium.chrome.browser.homepage.HomepagePolicyManager; import org.chromium.chrome.browser.ntp.NewTabPage; @@ -211,7 +212,7 @@ * Get the homepage button preference state. */ public static void recordHomeButtonPreferenceState() { - if (!FeatureUtilities.isHomepageLocationPolicyEnabled()) { + if (!FeatureUtilities.isEnabled(ChromeFeatureList.HOMEPAGE_LOCATION_POLICY)) { RecordHistogram.recordBooleanHistogram( "Settings.ShowHomeButtonPreferenceState", HomepageManager.isHomepageEnabled()); return;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/autofill/AutofillProfileEditorPreference.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/autofill/AutofillProfileEditorPreference.java index 6a2246e5..6f6dacfa 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/autofill/AutofillProfileEditorPreference.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/autofill/AutofillProfileEditorPreference.java
@@ -4,104 +4,21 @@ package org.chromium.chrome.browser.settings.autofill; -import android.app.Activity; import android.content.Context; -import android.os.Bundle; -import android.support.v7.preference.Preference; - -import androidx.annotation.VisibleForTesting; - -import org.chromium.base.Callback; -import org.chromium.chrome.browser.autofill.PersonalDataManager; -import org.chromium.chrome.browser.autofill.prefeditor.EditorDialog; -import org.chromium.chrome.browser.autofill.prefeditor.EditorObserverForTest; -import org.chromium.chrome.browser.payments.AddressEditor; -import org.chromium.chrome.browser.payments.AutofillAddress; -import org.chromium.chrome.browser.payments.SettingsAutofillAndPaymentsObserver; +import android.support.v7.preference.DialogPreference; /** * Launches the UI to edit, create or delete an Autofill profile entry. */ -public class AutofillProfileEditorPreference extends Preference { - private static EditorObserverForTest sObserverForTest; - - private final Activity mActivity; - private EditorDialog mEditorDialog; - private AutofillAddress mAutofillAddress; - private String mGUID; - - // TODO(crbug.com/982338): Remove Activity usage for Support Library migration. - public AutofillProfileEditorPreference(Activity activity, Context styledContext) { - super(styledContext); - mActivity = activity; +public class AutofillProfileEditorPreference extends DialogPreference { + public AutofillProfileEditorPreference(Context context) { + super(context); } - public EditorDialog getEditorDialog() { - return mEditorDialog; - } - - @Override - protected void onClick() { - Bundle extras = getExtras(); - // We know which profile to edit based on the GUID stuffed in our extras - // by MainSettings. - mGUID = extras.getString(AutofillEditorBase.AUTOFILL_GUID); - prepareEditorDialog(); - prepareAddressEditor(); - } - - private void prepareAddressEditor() { - AddressEditor addressEditor = - new AddressEditor(AddressEditor.Purpose.AUTOFILL_SETTINGS, /*saveToDisk=*/true); - addressEditor.setEditorDialog(mEditorDialog); - - addressEditor.edit(mAutofillAddress, new Callback<AutofillAddress>() { - /* - * There are four cases for |address| here. - * (1) |address| is null: the user canceled address creation - * (2) |address| is non-null: the user canceled editing an existing address - * (3) |address| is non-null: the user edited an existing address. - * (4) |address| is non-null: the user created a new address. - * We should save the changes (set the profile) for cases 3 and 4, - * and it's OK to set the profile for 2. - */ - @Override - public void onResult(AutofillAddress address) { - if (address != null) { - PersonalDataManager.getInstance().setProfile(address.getProfile()); - SettingsAutofillAndPaymentsObserver.getInstance().notifyOnAddressUpdated( - address); - } - if (sObserverForTest != null) { - sObserverForTest.onEditorReadyToEdit(); - } - } - }); - } - - private void prepareEditorDialog() { - Runnable runnable = null; - mAutofillAddress = null; - if (mGUID != null) { - mAutofillAddress = new AutofillAddress( - mActivity, PersonalDataManager.getInstance().getProfile(mGUID)); - runnable = () -> { - if (mGUID != null) { - PersonalDataManager.getInstance().deleteProfile(mGUID); - SettingsAutofillAndPaymentsObserver.getInstance().notifyOnAddressDeleted( - mGUID); - } - if (sObserverForTest != null) { - sObserverForTest.onEditorReadyToEdit(); - } - }; - } - mEditorDialog = new EditorDialog(mActivity, runnable); - } - - @VisibleForTesting - public static void setEditorObserverForTest(EditorObserverForTest observerForTest) { - sObserverForTest = observerForTest; - EditorDialog.setEditorObserverForTest(sObserverForTest); + /** + * @return ID of the profile to edit when this preference is selected. + */ + public String getGUID() { + return getExtras().getString(AutofillEditorBase.AUTOFILL_GUID); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/autofill/AutofillProfilesFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/autofill/AutofillProfilesFragment.java index 78c754a4..d39f827 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/autofill/AutofillProfilesFragment.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/autofill/AutofillProfilesFragment.java
@@ -19,7 +19,11 @@ import org.chromium.chrome.R; import org.chromium.chrome.browser.autofill.PersonalDataManager; import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile; +import org.chromium.chrome.browser.autofill.prefeditor.EditorDialog; import org.chromium.chrome.browser.autofill.prefeditor.EditorObserverForTest; +import org.chromium.chrome.browser.payments.AddressEditor; +import org.chromium.chrome.browser.payments.AutofillAddress; +import org.chromium.chrome.browser.payments.SettingsAutofillAndPaymentsObserver; import org.chromium.chrome.browser.settings.ChromeSwitchPreference; import org.chromium.chrome.browser.settings.ManagedPreferenceDelegate; @@ -31,6 +35,8 @@ private static EditorObserverForTest sObserverForTest; static final String PREF_NEW_PROFILE = "new_profile"; + EditorDialog mLastEditorDialogForTest; + @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { getActivity().setTitle(R.string.autofill_addresses_settings_title); @@ -84,12 +90,10 @@ // Add a preference for the profile. Preference pref; if (profile.getIsLocal()) { - AutofillProfileEditorPreference localPref = - new AutofillProfileEditorPreference(getActivity(), getStyledContext()); - localPref.setTitle(profile.getFullName()); - localPref.setSummary(profile.getLabel()); - localPref.setKey(localPref.getTitle().toString()); // For testing. - pref = localPref; + pref = new AutofillProfileEditorPreference(getStyledContext()); + pref.setTitle(profile.getFullName()); + pref.setSummary(profile.getLabel()); + pref.setKey(pref.getTitle().toString()); // For testing. } else { pref = new Preference(getStyledContext()); pref.setWidgetLayoutResource(R.layout.autofill_server_data_label); @@ -106,7 +110,7 @@ // new addresses. if (PersonalDataManager.isAutofillProfileEnabled()) { AutofillProfileEditorPreference pref = - new AutofillProfileEditorPreference(getActivity(), getStyledContext()); + new AutofillProfileEditorPreference(getStyledContext()); Drawable plusIcon = ApiCompatibilityUtils.getDrawable(getResources(), R.drawable.plus); plusIcon.mutate(); plusIcon.setColorFilter( @@ -143,10 +147,69 @@ @VisibleForTesting public static void setObserverForTest(EditorObserverForTest observerForTest) { sObserverForTest = observerForTest; - AutofillProfileEditorPreference.setEditorObserverForTest(sObserverForTest); + EditorDialog.setEditorObserverForTest(sObserverForTest); + } + + @Override + public void onDisplayPreferenceDialog(Preference preference) { + if (preference instanceof AutofillProfileEditorPreference) { + String guid = ((AutofillProfileEditorPreference) preference).getGUID(); + EditorDialog editorDialog = prepareEditorDialog(guid); + mLastEditorDialogForTest = editorDialog; + AutofillAddress autofillAddress = guid == null + ? null + : new AutofillAddress( + getActivity(), PersonalDataManager.getInstance().getProfile(guid)); + editAddress(editorDialog, autofillAddress); + return; + } + + super.onDisplayPreferenceDialog(preference); + } + + @VisibleForTesting + EditorDialog prepareEditorDialog(String guid) { + Runnable runnable = guid == null ? null : () -> { + PersonalDataManager.getInstance().deleteProfile(guid); + SettingsAutofillAndPaymentsObserver.getInstance().notifyOnAddressDeleted(guid); + if (sObserverForTest != null) { + sObserverForTest.onEditorReadyToEdit(); + } + }; + + return new EditorDialog(getActivity(), runnable); + } + + private void editAddress(EditorDialog dialog, AutofillAddress autofillAddress) { + AddressEditor addressEditor = + new AddressEditor(AddressEditor.Purpose.AUTOFILL_SETTINGS, /*saveToDisk=*/true); + addressEditor.setEditorDialog(dialog); + + /* + * There are four cases for |address| here. + * (1) |address| is null: the user canceled address creation + * (2) |address| is non-null: the user canceled editing an existing address + * (3) |address| is non-null: the user edited an existing address. + * (4) |address| is non-null: the user created a new address. + * We should save the changes (set the profile) for cases 3 and 4, + * and it's OK to set the profile for 2. + */ + addressEditor.edit(autofillAddress, address -> { + if (address != null) { + PersonalDataManager.getInstance().setProfile(address.getProfile()); + SettingsAutofillAndPaymentsObserver.getInstance().notifyOnAddressUpdated(address); + } + if (sObserverForTest != null) { + sObserverForTest.onEditorReadyToEdit(); + } + }); } private Context getStyledContext() { return getPreferenceManager().getContext(); } + + EditorDialog getEditorDialogForTest() { + return mLastEditorDialogForTest; + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetBottomSheetContent.java b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetBottomSheetContent.java index c91396a..5720b5b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetBottomSheetContent.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetBottomSheetContent.java
@@ -5,6 +5,7 @@ package org.chromium.chrome.browser.share; import android.content.Context; +import android.support.v7.content.res.AppCompatResources; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; @@ -15,6 +16,8 @@ import android.widget.ImageView; import android.widget.TextView; +import org.chromium.base.ApiCompatibilityUtils; +import org.chromium.base.ContextUtils; import org.chromium.chrome.R; import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetContent; import org.chromium.ui.modelutil.MVCListAdapter.ListItem; @@ -91,6 +94,12 @@ view.setText(model.get(ShareSheetItemViewProperties.LABEL)); } else if (ShareSheetItemViewProperties.CLICK_LISTENER.equals(propertyKey)) { parent.setOnClickListener(model.get(ShareSheetItemViewProperties.CLICK_LISTENER)); + } else if (ShareSheetItemViewProperties.IS_FIRST_PARTY.equals(propertyKey)) { + if (!model.get(ShareSheetItemViewProperties.IS_FIRST_PARTY)) return; + ImageView view = (ImageView) parent.findViewById(R.id.icon); + ApiCompatibilityUtils.setImageTintList(view, + AppCompatResources.getColorStateList( + ContextUtils.getApplicationContext(), R.color.standard_mode_tint)); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetCoordinator.java index a2c4025..c1f3cee 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetCoordinator.java
@@ -77,12 +77,14 @@ PropertyModel qrcodePropertyModel = mPropertyModelBuilder.createPropertyModel( AppCompatResources.getDrawable(activity, R.drawable.qr_code), activity.getResources().getString(R.string.qr_code_share_icon_label), - (currentActivity) -> { + (currentActivity) + -> { mBottomSheetController.hideContent(bottomSheet, true); QrCodeCoordinator qrCodeCoordinator = new QrCodeCoordinator(activity, this::createNewTab); qrCodeCoordinator.show(); - }); + }, + /*isFirstParty=*/true); models.add(qrcodePropertyModel); // Send Tab To Self @@ -92,7 +94,8 @@ AppCompatResources.getDrawable(activity, R.drawable.send_tab), activity.getResources().getString( R.string.send_tab_to_self_share_activity_title), - (shareParams) -> { + (shareParams) + -> { mBottomSheetController.hideContent(bottomSheet, true); SendTabToSelfShareActivity.actionHandler(activity, mActivityTabProvider.get() @@ -100,7 +103,8 @@ .getNavigationController() .getVisibleEntry(), mBottomSheetController); - }); + }, + /*isFirstParty=*/true); models.add(sttsPropertyModel); // Copy URL @@ -118,26 +122,23 @@ Toast toast = Toast.makeText(activity, R.string.link_copied, Toast.LENGTH_SHORT); toast.show(); - }); + }, /*isFirstParty=*/true); models.add(copyPropertyModel); // ScreenShot PropertyModel screenshotPropertyModel = null; if (ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARE_SCREENSHOT)) { - screenshotPropertyModel = - new PropertyModel.Builder(ShareSheetItemViewProperties.ALL_KEYS) - .with(ShareSheetItemViewProperties.ICON, - AppCompatResources.getDrawable(activity, R.drawable.screenshot)) - .with(ShareSheetItemViewProperties.LABEL, - activity.getResources().getString(R.string.sharing_screenshot)) - .with(ShareSheetItemViewProperties.CLICK_LISTENER, - (shareParams) -> { - mBottomSheetController.hideContent(bottomSheet, true); - ScreenshotCoordinator screenshotCoordinator = - new ScreenshotCoordinator(activity); - screenshotCoordinator.takeScreenshot(); - }) - .build(); + screenshotPropertyModel = mPropertyModelBuilder.createPropertyModel( + AppCompatResources.getDrawable(activity, R.drawable.screenshot), + activity.getResources().getString(R.string.sharing_screenshot), + (shareParams) + -> { + mBottomSheetController.hideContent(bottomSheet, true); + ScreenshotCoordinator screenshotCoordinator = + new ScreenshotCoordinator(activity); + screenshotCoordinator.takeScreenshot(); + }, + /*isFirstParty=*/true); models.add(screenshotPropertyModel); } @@ -153,10 +154,12 @@ PropertyModel morePropertyModel = mPropertyModelBuilder.createPropertyModel( AppCompatResources.getDrawable(activity, R.drawable.sharing_more), activity.getResources().getString(R.string.sharing_more_icon_label), - (shareParams) -> { + (shareParams) + -> { mBottomSheetController.hideContent(bottomSheet, true); ShareHelper.showDefaultShareUi(params); - }); + }, + /*isFirstParty=*/true); models.add(morePropertyModel); return models;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetItemViewProperties.java b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetItemViewProperties.java index 8c7dee1..0bbfc5843 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetItemViewProperties.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetItemViewProperties.java
@@ -22,5 +22,9 @@ public static final WritableObjectPropertyKey<OnClickListener> CLICK_LISTENER = new WritableObjectPropertyKey<>(); - public static final PropertyKey[] ALL_KEYS = {ICON, LABEL, CLICK_LISTENER}; + /** True if this share sheet item is provided by Chrome. **/ + public static final WritableObjectPropertyKey<Boolean> IS_FIRST_PARTY = + new WritableObjectPropertyKey<>(); + + public static final PropertyKey[] ALL_KEYS = {ICON, LABEL, CLICK_LISTENER, IS_FIRST_PARTY}; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetPropertyModelBuilder.java b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetPropertyModelBuilder.java index 2c4b669..bab0a07 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetPropertyModelBuilder.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareSheetPropertyModelBuilder.java
@@ -65,19 +65,20 @@ } mBottomSheetController.hideContent(bottomSheet, true); ShareHelper.makeIntentAndShare(params, component); - }); + }, /*isFirstParty=*/false); models.add(propertyModel); } return models; } protected PropertyModel createPropertyModel( - Drawable icon, String label, OnClickListener listener) { + Drawable icon, String label, OnClickListener listener, boolean isFirstParty) { PropertyModel propertyModel = new PropertyModel.Builder(ShareSheetItemViewProperties.ALL_KEYS) .with(ShareSheetItemViewProperties.ICON, icon) .with(ShareSheetItemViewProperties.LABEL, label) .with(ShareSheetItemViewProperties.CLICK_LISTENER, listener) + .with(ShareSheetItemViewProperties.IS_FIRST_PARTY, isFirstParty) .build(); return propertyModel; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/ShareButton.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/ShareButton.java index c08514c..1982236 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/ShareButton.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/ShareButton.java
@@ -56,13 +56,11 @@ mActivityTabTabObserver = new ActivityTabTabObserver(activityTabProvider) { @Override public void onObservingDifferentTab(Tab tab) { - if (tab == null) return; updateButtonEnabledState(tab); } @Override public void onUpdateUrl(Tab tab, String url) { - if (tab == null) return; updateButtonEnabledState(tab); } };
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/homepage/HomepagePolicyIntegrationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/homepage/HomepagePolicyIntegrationTest.java index 575c303..e6a62f09 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/homepage/HomepagePolicyIntegrationTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/homepage/HomepagePolicyIntegrationTest.java
@@ -80,7 +80,7 @@ @Before public void setUp() { // Disable Histogram for tests. - FeatureUtilities.setHomepageLocationPolicyEnabledForTesting(true); + FeatureUtilities.setForTesting(ChromeFeatureList.HOMEPAGE_LOCATION_POLICY, true); // Give some user pref setting, simulate user that have their customized preference. // Use shared preference manager, not to change the order object created in tests. @@ -95,7 +95,7 @@ @After public void tearDown() { mTestServer.stopAndDestroyServer(); - FeatureUtilities.setHomepageLocationPolicyEnabledForTesting(null); + FeatureUtilities.setForTesting(ChromeFeatureList.HOMEPAGE_LOCATION_POLICY, null); } @Test
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/settings/autofill/AutofillProfilesFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/autofill/AutofillProfilesFragmentTest.java index 2541cea..e03ec5c 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/settings/autofill/AutofillProfilesFragmentTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/autofill/AutofillProfilesFragmentTest.java
@@ -270,7 +270,7 @@ InstrumentationRegistry.getInstrumentation(), AutofillProfilesFragment.class.getName()); - PreferenceFragmentCompat fragment = (PreferenceFragmentCompat) activity.getMainFragment(); + AutofillProfilesFragment fragment = (AutofillProfilesFragment) activity.getMainFragment(); AutofillProfileEditorPreference addProfile = (AutofillProfileEditorPreference) fragment.findPreference( AutofillProfilesFragment.PREF_NEW_PROFILE); @@ -278,13 +278,14 @@ // Open AutofillProfileEditorPreference. TestThreadUtils.runOnUiThreadBlocking(addProfile::performClick); - rule.setEditorDialogAndWait(addProfile.getEditorDialog()); + rule.setEditorDialogAndWait(fragment.getEditorDialogForTest()); // The keyboard is shown as soon as AutofillProfileEditorPreference comes into view. waitForKeyboardStatus(true, activity); // Hide the keyboard. TestThreadUtils.runOnUiThreadBlocking(() -> { - List<EditText> fields = addProfile.getEditorDialog().getEditableTextFieldsForTest(); + List<EditText> fields = + fragment.getEditorDialogForTest().getEditableTextFieldsForTest(); KeyboardVisibilityDelegate.getInstance().hideKeyboard(fields.get(0)); }); // Check that the keyboard is hidden. @@ -319,7 +320,7 @@ boolean waitForError) throws TimeoutException { TestThreadUtils.runOnUiThreadBlocking(profile::performClick); - rule.setEditorDialogAndWait(profile.getEditorDialog()); + rule.setEditorDialogAndWait(profileFragment.getEditorDialogForTest()); if (values != null) rule.setTextInEditorAndWait(values); if (waitForError) { rule.clickInEditorAndWaitForValidationError(buttonId);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/share/ShareSheetCoordinatorTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/share/ShareSheetCoordinatorTest.java index a8d25e1..d0f1312 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/share/ShareSheetCoordinatorTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/share/ShareSheetCoordinatorTest.java
@@ -5,6 +5,7 @@ package org.chromium.chrome.browser.share; import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyBoolean; import android.app.Activity; import android.support.test.filters.MediumTest; @@ -55,18 +56,20 @@ .with(ShareSheetItemViewProperties.ICON, null) .with(ShareSheetItemViewProperties.LABEL, "testModel1") .with(ShareSheetItemViewProperties.CLICK_LISTENER, null) + .with(ShareSheetItemViewProperties.IS_FIRST_PARTY, false) .build(); PropertyModel testModel2 = new PropertyModel.Builder(ShareSheetItemViewProperties.ALL_KEYS) .with(ShareSheetItemViewProperties.ICON, null) .with(ShareSheetItemViewProperties.LABEL, "testModel2") .with(ShareSheetItemViewProperties.CLICK_LISTENER, null) + .with(ShareSheetItemViewProperties.IS_FIRST_PARTY, false) .build(); mThirdPartyPropertyModels = new ArrayList<PropertyModel>(Arrays.asList(testModel1, testModel2)); Mockito.when(mPropertyModelBuilder.selectThirdPartyApps(any(), any(), any())) .thenReturn(mThirdPartyPropertyModels); - Mockito.when(mPropertyModelBuilder.createPropertyModel(any(), any(), any())) + Mockito.when(mPropertyModelBuilder.createPropertyModel(any(), any(), any(), anyBoolean())) .thenCallRealMethod(); } @@ -86,12 +89,18 @@ Assert.assertEquals("First property model isn't QR Code.", activity.getResources().getString(R.string.qr_code_share_icon_label), propertyModels.get(0).get(ShareSheetItemViewProperties.LABEL)); + Assert.assertEquals("First property model isn't marked as first party.", true, + propertyModels.get(0).get(ShareSheetItemViewProperties.IS_FIRST_PARTY)); Assert.assertEquals("Second property model isn't SendTabToSelf.", activity.getResources().getString(R.string.send_tab_to_self_share_activity_title), propertyModels.get(1).get(ShareSheetItemViewProperties.LABEL)); + Assert.assertEquals("Second property model isn't marked as first party.", true, + propertyModels.get(1).get(ShareSheetItemViewProperties.IS_FIRST_PARTY)); Assert.assertEquals("Third property model isn't Copy URL.", activity.getResources().getString(R.string.sharing_copy_url), propertyModels.get(2).get(ShareSheetItemViewProperties.LABEL)); + Assert.assertEquals("Third property model isn't marked as first party.", true, + propertyModels.get(2).get(ShareSheetItemViewProperties.IS_FIRST_PARTY)); } @Test @@ -109,15 +118,23 @@ Assert.assertEquals("First property model isn't QR Code.", activity.getResources().getString(R.string.qr_code_share_icon_label), propertyModels.get(0).get(ShareSheetItemViewProperties.LABEL)); + Assert.assertEquals("First property model isn't marked as first party.", true, + propertyModels.get(0).get(ShareSheetItemViewProperties.IS_FIRST_PARTY)); Assert.assertEquals("Second property model isn't SendTabToSelf.", activity.getResources().getString(R.string.send_tab_to_self_share_activity_title), propertyModels.get(1).get(ShareSheetItemViewProperties.LABEL)); + Assert.assertEquals("Second property model isn't marked as first party.", true, + propertyModels.get(1).get(ShareSheetItemViewProperties.IS_FIRST_PARTY)); Assert.assertEquals("Third property model isn't Copy URL.", activity.getResources().getString(R.string.sharing_copy_url), propertyModels.get(2).get(ShareSheetItemViewProperties.LABEL)); + Assert.assertEquals("Third property model isn't marked as first party.", true, + propertyModels.get(2).get(ShareSheetItemViewProperties.IS_FIRST_PARTY)); Assert.assertEquals("Fourth property model isn't Screenshotz.", activity.getResources().getString(R.string.sharing_screenshot), propertyModels.get(3).get(ShareSheetItemViewProperties.LABEL)); + Assert.assertEquals("Fourth property model isn't marked as first party.", true, + propertyModels.get(3).get(ShareSheetItemViewProperties.IS_FIRST_PARTY)); } @Test @@ -133,10 +150,16 @@ Assert.assertEquals("Incorrect number of property models.", 3, propertyModels.size()); Assert.assertEquals("First property model isn't testModel1.", "testModel1", propertyModels.get(0).get(ShareSheetItemViewProperties.LABEL)); + Assert.assertEquals("First property model is marked as first party.", false, + propertyModels.get(0).get(ShareSheetItemViewProperties.IS_FIRST_PARTY)); Assert.assertEquals("Second property model isn't testModel2.", "testModel2", propertyModels.get(1).get(ShareSheetItemViewProperties.LABEL)); + Assert.assertEquals("Second property model is marked as first party.", false, + propertyModels.get(1).get(ShareSheetItemViewProperties.IS_FIRST_PARTY)); Assert.assertEquals("Third property model isn't More.", activity.getResources().getString(R.string.sharing_more_icon_label), propertyModels.get(2).get(ShareSheetItemViewProperties.LABEL)); + Assert.assertEquals("Thired property model isn't marked as first party.", true, + propertyModels.get(2).get(ShareSheetItemViewProperties.IS_FIRST_PARTY)); } }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/flags/FeatureUtilitiesUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/flags/FeatureUtilitiesUnitTest.java index 867e6a5..1c97c29b9 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/flags/FeatureUtilitiesUnitTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/flags/FeatureUtilitiesUnitTest.java
@@ -4,6 +4,7 @@ package org.chromium.chrome.browser.flags; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.when; @@ -24,6 +25,12 @@ import org.chromium.chrome.browser.util.AccessibilityUtil; import org.chromium.chrome.test.util.browser.Features; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** * Unit Tests for {@link FeatureUtilities}. */ @@ -50,10 +57,159 @@ public void tearDown() { CommandLine.reset(); FeatureUtilities.resetFlagsForTesting(); + ChromeFeatureList.setTestFeatures(null); AccessibilityUtil.setAccessibilityEnabledForTesting(null); SysUtils.resetForTesting(); } + public static final String FEATURE_A = "FeatureA"; + public static final String FEATURE_B = "FeatureB"; + + @Test(expected = IllegalArgumentException.class) + public void testNativeInitializedNoDefault_throwsException() { + // Setup FeatureA in ChromeFeatureList but not in the defaults. + Map<String, Boolean> testFeatures = Collections.singletonMap(FEATURE_A, false); + ChromeFeatureList.setTestFeatures(testFeatures); + + // Assert FeatureUtilities throws an exception. + FeatureUtilities.cacheNativeFlags(Collections.singletonList(FEATURE_A)); + assertFalse(FeatureUtilities.isEnabled(FEATURE_A)); + } + + private static final Map<String, Boolean> A_OFF_B_ON = new HashMap<String, Boolean>() { + { + put(FEATURE_A, false); + put(FEATURE_B, true); + } + }; + private static final Map<String, Boolean> A_OFF_B_OFF = new HashMap<String, Boolean>() { + { + put(FEATURE_A, false); + put(FEATURE_B, false); + } + }; + private static final Map<String, Boolean> A_ON_B_OFF = new HashMap<String, Boolean>() { + { + put(FEATURE_A, true); + put(FEATURE_B, false); + } + }; + private static final Map<String, Boolean> A_ON_B_ON = new HashMap<String, Boolean>() { + { + put(FEATURE_A, true); + put(FEATURE_B, true); + } + }; + private static final List<String> FEATURES_A_AND_B = Arrays.asList(FEATURE_A, FEATURE_B); + + private static void assertFeatureUtilitiesIsEnabledMatches(Map<String, Boolean> state) { + assertEquals(state.get(FEATURE_A), FeatureUtilities.isEnabled(FEATURE_A)); + assertEquals(state.get(FEATURE_B), FeatureUtilities.isEnabled(FEATURE_B)); + } + + @Test + public void testNativeInitialized_getsFromChromeFeatureList() { + Map<String, Boolean> previousDefaults = + FeatureUtilities.swapDefaultsForTesting(A_OFF_B_OFF); + + try { + // Cache native flags, meaning values from ChromeFeatureList should be used from now on. + ChromeFeatureList.setTestFeatures(A_OFF_B_ON); + FeatureUtilities.cacheNativeFlags(FEATURES_A_AND_B); + + // Assert FeatureUtilities uses the values from ChromeFeatureList. + assertFeatureUtilitiesIsEnabledMatches(A_OFF_B_ON); + } finally { + FeatureUtilities.swapDefaultsForTesting(previousDefaults); + } + } + + @Test + public void testNativeNotInitializedNotCached_useDefault() { + Map<String, Boolean> previousDefaults = + FeatureUtilities.swapDefaultsForTesting(A_OFF_B_OFF); + + try { + // Do not cache values from native. There are no values stored in prefs either. + ChromeFeatureList.setTestFeatures(A_OFF_B_ON); + + // Query the flags to make sure the default values are returned. + assertFeatureUtilitiesIsEnabledMatches(A_OFF_B_OFF); + + // Now do cache the values from ChromeFeatureList. + FeatureUtilities.cacheNativeFlags(FEATURES_A_AND_B); + + // Verify that FeatureUtilities returns consistent values in the same run. + assertFeatureUtilitiesIsEnabledMatches(A_OFF_B_OFF); + } finally { + FeatureUtilities.swapDefaultsForTesting(previousDefaults); + } + } + + @Test + public void testNativeNotInitializedPrefsCached_getsFromPrefs() { + Map<String, Boolean> previousDefaults = + FeatureUtilities.swapDefaultsForTesting(A_OFF_B_OFF); + + try { + // Cache native flags, meaning values from ChromeFeatureList should be used from now on. + ChromeFeatureList.setTestFeatures(A_OFF_B_ON); + FeatureUtilities.cacheNativeFlags(FEATURES_A_AND_B); + assertFeatureUtilitiesIsEnabledMatches(A_OFF_B_ON); + + // Pretend the app was restarted. The SharedPrefs should remain. + FeatureUtilities.resetFlagsForTesting(); + + // Simulate ChromeFeatureList retrieving new, different values for the flags. + ChromeFeatureList.setTestFeatures(A_ON_B_ON); + + // Do not cache new values, but query the flags to make sure the values stored to prefs + // are returned. Neither the defaults (false/false) or the ChromeFeatureList values + // (true/true) should be returned. + assertFeatureUtilitiesIsEnabledMatches(A_OFF_B_ON); + + // Now do cache the values from ChromeFeatureList. + FeatureUtilities.cacheNativeFlags(FEATURES_A_AND_B); + + // Verify that FeatureUtilities returns consistent values in the same run. + assertFeatureUtilitiesIsEnabledMatches(A_OFF_B_ON); + + // Pretend the app was restarted again. + FeatureUtilities.resetFlagsForTesting(); + + // The SharedPrefs should retain the latest values. + assertFeatureUtilitiesIsEnabledMatches(A_ON_B_ON); + } finally { + FeatureUtilities.swapDefaultsForTesting(previousDefaults); + } + } + + @Test + public void testSetForTesting_returnsForcedValue() { + Map<String, Boolean> previousDefaults = + FeatureUtilities.swapDefaultsForTesting(A_OFF_B_OFF); + + try { + // Do not cache values from native. There are no values stored in prefs either. + // Query the flags to make sure the default values are returned. + assertFeatureUtilitiesIsEnabledMatches(A_OFF_B_OFF); + + // Force a feature flag. + FeatureUtilities.setForTesting(FEATURE_A, true); + + // Verify that the forced value is returned. + assertFeatureUtilitiesIsEnabledMatches(A_ON_B_OFF); + + // Remove the forcing. + FeatureUtilities.setForTesting(FEATURE_A, null); + + // Verify that the forced value is not returned anymore. + assertFeatureUtilitiesIsEnabledMatches(A_OFF_B_OFF); + } finally { + FeatureUtilities.swapDefaultsForTesting(previousDefaults); + } + } + @Test // clang-format off @Features.DisableFeatures({ChromeFeatureList.DUET_TABSTRIP_INTEGRATION_ANDROID,
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/homepage/HomepagePolicyManagerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/homepage/HomepagePolicyManagerTest.java index 7634df88..c55ca312 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/homepage/HomepagePolicyManagerTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/homepage/HomepagePolicyManagerTest.java
@@ -73,7 +73,7 @@ ChromeBrowserInitializer.setForTesting(mChromeBrowserInitializer); - FeatureUtilities.setHomepageLocationPolicyEnabledForTesting(true); + FeatureUtilities.setForTesting(ChromeFeatureList.HOMEPAGE_LOCATION_POLICY, true); // Disable the policy during setup PrefServiceBridge.setInstanceForTesting(mMockServiceBridge); @@ -87,7 +87,7 @@ @After public void tearDown() { // Empty cache inside the FeatureUtilities - FeatureUtilities.setHomepageLocationPolicyEnabledForTesting(null); + FeatureUtilities.setForTesting(ChromeFeatureList.HOMEPAGE_LOCATION_POLICY, null); } /** @@ -272,7 +272,7 @@ public void testFeatureFlagDisabled() { Mockito.reset(mMockRegistrar); Mockito.reset(mMockServiceBridge); - FeatureUtilities.setHomepageLocationPolicyEnabledForTesting(false); + FeatureUtilities.setForTesting(ChromeFeatureList.HOMEPAGE_LOCATION_POLICY, false); // 1. Test initialization early finishing setupNewHomepagePolicyManagerForTests(true, TEST_URL, null); @@ -299,7 +299,7 @@ @SmallTest @DisableFeatures(ChromeFeatureList.HOMEPAGE_LOCATION_POLICY) public void testIllegal_Refresh() { - FeatureUtilities.setHomepageLocationPolicyEnabledForTesting(false); + FeatureUtilities.setForTesting(ChromeFeatureList.HOMEPAGE_LOCATION_POLICY, false); TestThreadUtils.runOnUiThreadBlocking( () -> { mHomepagePolicyManager.onPreferenceChange(); }); }
diff --git a/chrome/android/webapk/strings/android_webapk_strings.grd b/chrome/android/webapk/strings/android_webapk_strings.grd index 1e69d960..97be784 100644 --- a/chrome/android/webapk/strings/android_webapk_strings.grd +++ b/chrome/android/webapk/strings/android_webapk_strings.grd
@@ -78,6 +78,7 @@ <output filename="values-uz/android_webapk_strings.xml" lang="uz" type="android" /> <output filename="values-vi/android_webapk_strings.xml" lang="vi" type="android" /> <output filename="values-zh-rCN/android_webapk_strings.xml" lang="zh-CN" type="android" /> + <output filename="values-zh-rHK/android_webapk_strings.xml" lang="zh-HK" type="android" /> <output filename="values-zh-rTW/android_webapk_strings.xml" lang="zh-TW" type="android" /> <output filename="values-zu/android_webapk_strings.xml" lang="zu" type="android" /> </outputs>
diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd index 0b1b278f..cac26b1 100644 --- a/chrome/app/chromium_strings.grd +++ b/chrome/app/chromium_strings.grd
@@ -34,6 +34,7 @@ <output filename="chromium_strings_sq.pak" type="data_package" lang="sq" /> <output filename="chromium_strings_ur.pak" type="data_package" lang="ur" /> <output filename="chromium_strings_uz.pak" type="data_package" lang="uz" /> + <output filename="chromium_strings_zh-HK.pak" type="data_package" lang="zh-HK" /> <output filename="chromium_strings_zu.pak" type="data_package" lang="zu" /> </if> <output filename="chromium_strings_am.pak" type="data_package" lang="am" />
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 3ed502a..e29422ea 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -39,6 +39,7 @@ <output filename="generated_resources_sq.pak" type="data_package" lang="sq" /> <output filename="generated_resources_ur.pak" type="data_package" lang="ur" /> <output filename="generated_resources_uz.pak" type="data_package" lang="uz" /> + <output filename="generated_resources_zh-HK.pak" type="data_package" lang="zh-HK" /> <output filename="generated_resources_zu.pak" type="data_package" lang="zu" /> </if> <output filename="generated_resources_am.pak" type="data_package" lang="am" /> @@ -178,6 +179,7 @@ <output filename="java/res/values-uz/generated_resources.xml" lang="uz" type="android" context="android_java" /> <output filename="java/res/values-vi/generated_resources.xml" lang="vi" type="android" context="android_java" /> <output filename="java/res/values-zh-rCN/generated_resources.xml" lang="zh-CN" type="android" context="android_java" /> + <output filename="java/res/values-zh-rHK/generated_resources.xml" lang="zh-HK" type="android" context="android_java" /> <output filename="java/res/values-zh-rTW/generated_resources.xml" lang="zh-TW" type="android" context="android_java" /> <output filename="java/res/values-zu/generated_resources.xml" lang="zu" type="android" context="android_java" /> </if> @@ -1012,8 +1014,8 @@ <message name="IDS_SAVE_PAGE" desc="The text label of the Save Page As menu item"> Save page &as... </message> - <message name="IDS_DISTILL_PAGE" desc="The text label of the 'Toggle distilled page contents' menu item"> - Toggle distilled page contents + <message name="IDS_DISTILL_PAGE" desc="The text label of the 'Toggle reader mode' menu item"> + Toggle reader mode </message> <message name="IDS_MORE_TOOLS_MENU" desc="The text label of the Tools submenu for touch"> More too&ls @@ -1086,8 +1088,8 @@ <message name="IDS_SAVE_PAGE" desc="In Title Case: The text label of the Save Page As menu item"> Save Page &As... </message> - <message name="IDS_DISTILL_PAGE" desc="The text label of the 'Distill Page' menu item"> - Distill Page + <message name="IDS_DISTILL_PAGE" desc="The text label of the 'Reader mode' menu item"> + Reader mode </message> <message name="IDS_MORE_TOOLS_MENU" desc="In Title Case: The text label of the Tools submenu for touch"> More Too&ls
diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_strings.grd index 40e42a76..61a6a3d5 100644 --- a/chrome/app/google_chrome_strings.grd +++ b/chrome/app/google_chrome_strings.grd
@@ -36,6 +36,7 @@ <output filename="google_chrome_strings_sq.pak" type="data_package" lang="sq" /> <output filename="google_chrome_strings_ur.pak" type="data_package" lang="ur" /> <output filename="google_chrome_strings_uz.pak" type="data_package" lang="uz" /> + <output filename="google_chrome_strings_zh-HK.pak" type="data_package" lang="zh-HK" /> <output filename="google_chrome_strings_zu.pak" type="data_package" lang="zu" /> </if> <output filename="google_chrome_strings_am.pak" type="data_package" lang="am" />
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb index 9a13fcc..25173bd 100644 --- a/chrome/app/resources/generated_resources_af.xtb +++ b/chrome/app/resources/generated_resources_af.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Laai tans voorskou …</translation> <translation id="1032605640136438169">Lees asseblief die nuwe bepalings</translation> <translation id="103279545524624934">Maak skyfspasie beskikbaar om Android-programme te begin.</translation> -<translation id="1033343386521881354">Het 1 drukker op die drukbediener gekry.</translation> <translation id="1033780634303702874">Verkry toegang tot jou serietoestelle</translation> <translation id="1034942643314881546">Aktiveer ADB om programillustrasie te skep</translation> <translation id="1036348656032585052">Skakel af</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Druk |<ph name="ACCELERATOR" />| om volskerm te verlaat</translation> <translation id="1038168778161626396">Net met syfers</translation> <translation id="1039337018183941703">Ongeldige of korrupte lêer</translation> -<translation id="1039850285407663109">Die lêer wat jy gekies het, is onbekend en kan gevaarlik wees. Oorweeg dit om hierdie lêer te skandeer voordat jy dit oopmaak.</translation> <translation id="1041175011127912238">Hierdie bladsy reageer nie</translation> <translation id="1041263367839475438">Beskikbare toestelle</translation> <translation id="1042174272890264476">Jou rekenaar kom ook met <ph name="SHORT_PRODUCT_NAME" /> se RLZ-biblioteek ingebou. RLZ wys 'n nie-unieke, nie-persoonlik identifiseerbare merker toe om die soektogte en <ph name="SHORT_PRODUCT_NAME" /> se gebruik, gedryf deur 'n bepaalde promosieveldtog, te meet. Hierdie etikette verskyn somtyds in Google Search-navrae op <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Vertrou hierdie sertifikaat om sagtewaremakers te identifiseer</translation> <translation id="1861262398884155592">Hierdie vouer is leeg</translation> <translation id="1863182668524159459">Geen reekspoorte is gevind nie</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> is onbekend. Skandeer lêer om risiko te minimeer.</translation> <translation id="1864111464094315414">Meld aan</translation> <translation id="1864400682872660285">Koeler</translation> <translation id="1864454756846565995">USB C-toestel (poort aan agterkant)</translation> @@ -3143,7 +3140,7 @@ <translation id="5427459444770871191">Draai kloksgewys</translation> <translation id="542872847390508405">Jy blaai tans as 'n gas</translation> <translation id="5428850089342283580"><ph name="ACCNAME_APP" /> (Opdatering is beskikbaar)</translation> -<translation id="542948651837270806">'n Opdatering van die Trusted Platform Module-ferware moet geïnstalleer word. Sien <ph name="TPM_FIRMWARE_UPDATE_LINK" /></translation> +<translation id="542948651837270806">'n Opdatering van die Trusted Platform Module-fermware moet geïnstalleer word. Sien <ph name="TPM_FIRMWARE_UPDATE_LINK" /></translation> <translation id="5430931332414098647">Kitsverbinding</translation> <translation id="5431318178759467895">Kleur</translation> <translation id="5431825016875453137">OpenVPN / L2TP</translation> @@ -4026,7 +4023,6 @@ <translation id="6678717876183468697">Navraag-URL</translation> <translation id="6680442031740878064">Beskikbaar: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Gradeer</translation> -<translation id="6681301928961274620">Het geen drukkers op die drukbediener gekry nie.</translation> <translation id="6681668084120808868">Neem foto</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" sal gedeïnstalleer word</translation> <translation id="668599234725812620">Maak Google Play oop</translation> @@ -5555,7 +5551,6 @@ <translation id="8794025342371547160">Beperkte IP</translation> <translation id="879413103056696865">Terwyl die warmkol aan is, sal jou <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Nuwe venster</translation> -<translation id="8797086401386164142">Het <ph name="NUM_PRINTERS" /> drukkers op drukbediener gekry.</translation> <translation id="8797459392481275117">Moet nooit hierdie werf vertaal nie</translation> <translation id="8798099450830957504">Verstek</translation> <translation id="8798441408945964110">Verskaffer se naam</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb index 9b8cd14..1250cd90 100644 --- a/chrome/app/resources/generated_resources_am.xtb +++ b/chrome/app/resources/generated_resources_am.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">ቅድመ-እይታን በመጫን ላይ</translation> <translation id="1032605640136438169">እባክዎ አዲሶቹን ደንቦች ይገምግሙ</translation> <translation id="103279545524624934">የAndroid መተግበሪያዎችን ለማስጀመር የዲስክ ቦታ ያስለቅቁ።</translation> -<translation id="1033343386521881354">ከህትመት አገልጋዩ 1 አታሚ ተገኝቷል።</translation> <translation id="1033780634303702874">ተከታታይ መሣሪያዎችዎን ይደርሳል</translation> <translation id="1034942643314881546">የመተግበሪያዎች ሥዕልን ለመፍጠር adb ን በማንቃት ላይ</translation> <translation id="1036348656032585052">አጥፋ</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">ከሙሉ ማያ ገጽ ለመውጣት |<ph name="ACCELERATOR" />|ን ይጫኑ</translation> <translation id="1038168778161626396">ምስጢራዊ ማድረግ ብቻ</translation> <translation id="1039337018183941703">ልክ ያልሆነ ወይም የተበላሸ ፋይል</translation> -<translation id="1039850285407663109">የተመረጠው ፋይል ያልታወቀ ነው እና አደገኛ ሊሆን ይችላል። ይህን ከመክፈት በፊት መቃኘትን ከግምት ያስገቡ።</translation> <translation id="1041175011127912238">ይህ ግጽ ምላሽ እየሰጠ አይደለም</translation> <translation id="1041263367839475438">የሚገኙ መሣሪያዎች</translation> <translation id="1042174272890264476">እንዲሁም ኮምፒውተርዎ የ<ph name="SHORT_PRODUCT_NAME" /> RLZ ቤተ-ፍርግም አብሮ ተሰርቶለት ነው የሚመጣው። RLZ ፍለጋዎችን እና በአንድ የተወሰነ የማስተዋወቂያ ዘመቻ የሚነዳ የ<ph name="SHORT_PRODUCT_NAME" /> አጠቃቀምን ለመለካት ልዩ ያልሆነ፣ በግል ሊለይ የማይችል መለያ ይመድባል። እነዚህ መለያ ስሞች አንዳንድ ጊዜ በ<ph name="PRODUCT_NAME" /> የGoogle ፍለጋ መጠይቆች ላይ ይታያሉ።</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">የሶፍትዌር ሠሪዎችን ለመለየት ይህን የዕውቅና ማረጋገጫ እመን</translation> <translation id="1861262398884155592">ይህ አቃፊ ባዶ ነው</translation> <translation id="1863182668524159459">ምንም ተከታታይ ወደቦች አልተገኙም</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> የማይታወቅ ነው። ስጋትን ለመቀነስ ፋይልን ይቃኙ።</translation> <translation id="1864111464094315414">ግባ</translation> <translation id="1864400682872660285">ማቀዥቀዣ</translation> <translation id="1864454756846565995">USB-C መሣሪያ (የኋላ ወደብ)</translation> @@ -4022,7 +4019,6 @@ <translation id="6678717876183468697">የጥያቄ ዩአርኤል</translation> <translation id="6680442031740878064">ይገኛል፦ <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">ደረጃ ይስጡ</translation> -<translation id="6681301928961274620">ከህትመት አገልጋዩ ምንም አታሚዎች አልተገኙም።</translation> <translation id="6681668084120808868">ፎቶ አንሳ</translation> <translation id="6681964764822470072">«<ph name="APP_NAME" />» ይራገፋል።</translation> <translation id="668599234725812620">Google Playን ይክፈቱ</translation> @@ -5556,7 +5552,6 @@ <translation id="8794025342371547160">የተገደበ አይፒ</translation> <translation id="879413103056696865">የመገናኛ ነጥቡ በርቶ ሳለ የእርስዎ <ph name="PHONE_NAME" /> ይህን ያደርጋል፦</translation> <translation id="8795916974678578410">አዲስ መስኮት</translation> -<translation id="8797086401386164142">ከህትመት አገልጋዩ <ph name="NUM_PRINTERS" /> አታሚዎች ተገኝተዋል</translation> <translation id="8797459392481275117">ይህን ጣቢያ በጭራሽ አትተርጉም</translation> <translation id="8798099450830957504">እንደወረደ</translation> <translation id="8798441408945964110">የአቅራቢ ስም</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index 3b714d6..5910cb3 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">تحميل المعاينة</translation> <translation id="1032605640136438169">يُرجى مراجعة البنود الجديدة.</translation> <translation id="103279545524624934">احرص على تفريغ مساحة على القرص لتشغيل تطبيقات Android.</translation> -<translation id="1033343386521881354">تم العثور على طابعة واحدة من خادم الطباعة.</translation> <translation id="1033780634303702874">الوصول إلى الأجهزة التسلسلية</translation> <translation id="1034942643314881546">تفعيل ADB لإنشاء رسم توضيحي للتطبيقات</translation> <translation id="1036348656032585052">إيقاف</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">اضغط على |<ph name="ACCELERATOR" />| للخروج من وضع ملء الشاشة</translation> <translation id="1038168778161626396">التشفير فقط</translation> <translation id="1039337018183941703">ملف تالف أو غير صالح</translation> -<translation id="1039850285407663109">الملف الذي تم اختياره غير معروف ويمكن أن يكون ضارًا. يُرجى فحص الملف قبل فتحه.</translation> <translation id="1041175011127912238">الصفحة لا تستجيب.</translation> <translation id="1041263367839475438">الأجهزة المتوفِّرة</translation> <translation id="1042174272890264476">يأتي جهاز الكمبيوتر أيضًا مزودًا بمكتبة RLZ مضمنة للمنتج <ph name="SHORT_PRODUCT_NAME" />. تعيّن RLZ علامة غير فريدة وغير متعلقة بتحديد الشخصية من أجل قياس عمليات البحث ومعدل استخدام <ph name="SHORT_PRODUCT_NAME" /> الذي تؤثر فيه حملة ترويجية محددة. تظهر هذه التصنيفات أحيانًا في طلبات بحث Google في <ph name="PRODUCT_NAME" />.</translation> @@ -153,7 +151,7 @@ <translation id="1197979282329025000">حدث خطأ أثناء استرداد إمكانيات الطابعة للطابعة <ph name="PRINTER_NAME" />. تعذر تسجيل هذه الطابعة في <ph name="CLOUD_PRINT_NAME" />.</translation> <translation id="119944043368869598">محو الكل</translation> <translation id="1201402288615127009">التالي</translation> -<translation id="1202556750060561551">سيتم محو جميع بيانات وملفات تعريف الارتباط المُخزّنة من خلال<ph name="SITE_GROUP_NAME" /> وأيّ مواقع إلكترونية ضمنها وتطبيقاتها المثبّتة.</translation> +<translation id="1202556750060561551">سيتم محو جميع البيانات وملفات تعريف الارتباط المُخزّنة من خلال المجموعة <ph name="SITE_GROUP_NAME" />، كما سيتم محو المواقع الإلكترونية والتطبيقات المثبّتة ضمن هذه المجموعة.</translation> <translation id="1202596434010270079">تم تحديث تطبيق Kiosk. يُرجى إزالة جهاز USB.</translation> <translation id="120368089816228251">نوتة موسيقية</translation> <translation id="1205489148908752564">قراءة وتغيير المستخدمين في القائمة البيضاء</translation> @@ -281,7 +279,7 @@ <translation id="138784436342154190">هل تريد استعادة صفحة بدء التشغيل التلقائية؟</translation> <translation id="1390548061267426325">فتح كعلامة تبويب عادية</translation> <translation id="1393283411312835250">الشمس والسحاب</translation> -<translation id="1393787139683794508">سيؤدي هذا الإجراء إلى محو جميع بيانات وملفات تعريف الارتباط المُخزّنة من خلال<ph name="ORIGIN_NAME" />.</translation> +<translation id="1393787139683794508">سيؤدي هذا الإجراء إلى محو جميع البيانات وملفات تعريف الارتباط المُخزّنة من خلال <ph name="ORIGIN_NAME" />.</translation> <translation id="1395730723686586365">خدمة التحديث بدأت</translation> <translation id="1396139853388185343">حدث خطأ أثناء إعداد الطابعة</translation> <translation id="1396259464226642517">هل كانت هذه النتيجة غير متوقعة؟ <ph name="BEGIN_LINK" />إرسال تعليقات<ph name="END_LINK" /></translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">الوثوق بهذه الشهادة لتحديد هوية مصممي البرامج</translation> <translation id="1861262398884155592">هذا المجلد فارغ</translation> <translation id="1863182668524159459">لم يتم العثور على منافذ تسلسلية</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> غير معروف. يُفضَّل فحص الملف لتقليل المخاطر.</translation> <translation id="1864111464094315414">تسجيل الدخول</translation> <translation id="1864400682872660285">أكثر برودة</translation> <translation id="1864454756846565995">جهاز USB-C (المنفذ الخلفي)</translation> @@ -746,7 +743,7 @@ <translation id="202352106777823113">استغرق التنزيل وقتًا طويلاً للغاية وتم إيقافه بواسطة الشبكة.</translation> <translation id="2025632980034333559">لقد تعطل <ph name="APP_NAME" />. انقر على هذا البالون لإعادة تحميل الإضافة.</translation> <translation id="2025891858974379949">محتوى غير آمن</translation> -<translation id="202918510990975568">يُرجى إدخال كلمة المرور لتهيئة قفل الشاشة وتسجيل الدخول</translation> +<translation id="202918510990975568">يُرجى إدخال كلمة المرور لضبط قفل الشاشة وتسجيل الدخول</translation> <translation id="2034346955588403444">إضافة شبكة WiFi أخرى</translation> <translation id="203574396658008164">تفعيل تدوين الملاحظات من شاشة التأمين</translation> <translation id="2037445849770872822">تم إعداد الإشراف من أجل حساب Google هذا. ولإعداد المزيد من أدوات الرقابة الأبوية، يُرجى اختيار "مواصلة". @@ -992,7 +989,7 @@ <translation id="2353297238722298836">تم السماح باستخدام الكاميرا والميكروفون</translation> <translation id="2356070529366658676">طلب</translation> <translation id="2357330829548294574">إزالة <ph name="USER_NAME" /></translation> -<translation id="235798134753548762">ستتم مزامنة تفضيلات التطبيقات والإعدادات وWi-Fi. لإجراء التغييرات، يُرجى الانتقال إلى "الإعدادات" في أيّ وقت بعد الإعداد.</translation> +<translation id="235798134753548762">ستتم مزامنة تطبيقاتك وإعداداتك، فضلًا عن إعدادات Wi-Fi المفضّلة لديك. لإجراء التغييرات، يُرجى الانتقال إلى "الإعدادات" في أيّ وقت بعد إنهاء عملية الإعداد.</translation> <translation id="2359345697448000899">يمكنك إدارة الإضافات من خلال النقر على "الإضافات" في قائمة "الأدوات".</translation> <translation id="2359808026110333948">متابعة</translation> <translation id="236117173274098341">تحسين</translation> @@ -1373,7 +1370,7 @@ <translation id="2865919525181940183">لقطة شاشة للبرامج التي تظهر على الشاشة حاليًا</translation> <translation id="286674810810214575">جارٍ التحقق من مصادر الطاقة...</translation> <translation id="2867768963760577682">فتح كعلامة تبويب مثبتة</translation> -<translation id="2868184003987917410">عدم السماح للمواقع الإلكترونية بالوصول إلى أجهزة أو بيانات الواقع الافتراضي</translation> +<translation id="2868184003987917410">عدم السماح للمواقع الإلكترونية بالوصول إلى أجهزة الواقع الافتراضي أو بياناته</translation> <translation id="2868746137289129307">تعتبر هذه الإضافة قديمة وغير مفعّلة بواسطة سياسة المؤسسة. وقد تصبح مفعّلة تلقائيًا عندما يتوفر إصدار أحدث.</translation> <translation id="2870560284913253234">الموقع</translation> <translation id="2870909136778269686">جارٍ التحديث...</translation> @@ -1701,7 +1698,7 @@ <translation id="3348038390189153836">تم اكتشاف جهاز قابل للإزالة</translation> <translation id="3349933790966648062">الذاكرة المستخدَمة</translation> <translation id="3350117557200012647">الدخول في وضع الإقران</translation> -<translation id="3350244554415289209">السؤال عند محاولة موقع إلكتروني في الوصول إلى موضع الكاميرا أو تصوير غرفتك (مُوصى به)</translation> +<translation id="3350244554415289209">طلب الإذن عندما يحاول موقع إلكتروني أن يصل إلى موضع الكاميرا أو أن يصوّر غرفتك (إعداد مُوصى به)</translation> <translation id="3355936511340229503">خطأ الاتصال</translation> <translation id="3356580349448036450">مكتمل</translation> <translation id="3359256513598016054">القيود على سياسة الشهادة</translation> @@ -1765,7 +1762,7 @@ <translation id="3448492834076427715">تحديث الحساب</translation> <translation id="3449839693241009168">اضغط على <ph name="SEARCH_KEY" /> لإرسال الأوامر إلى <ph name="EXTENSION_NAME" /></translation> <translation id="3450157232394774192">نسبة الإشغال لحالة الخمول</translation> -<translation id="3451332697983754369">مزامنة<ph name="DEVICE_TYPE" /></translation> +<translation id="3451332697983754369">مزامنة <ph name="DEVICE_TYPE" /></translation> <translation id="3453612417627951340">يتطلب تخويل</translation> <translation id="3454157711543303649">اكتمل التفعيل</translation> <translation id="3454213325559396544">هذا هو آخر تحديث تلقائي للبرنامج والأمان للجهاز <ph name="DEVICE_TYPE" />. وللحصول على التحديثات المستقبلية، يمكنك الترقية إلى طراز أحدث.</translation> @@ -1904,7 +1901,7 @@ <translation id="3630132874740063857">هاتفك</translation> <translation id="3630995161997703415">أضف موقع الويب هذا إلى الرف لاستخدامه في أي وقت.</translation> <translation id="3634507049637220048">الشبكة <ph name="NETWORK_INDEX" /> من <ph name="NETWORK_COUNT" />، الشبكة <ph name="NETWORK_NAME" />، حالة الاتصال <ph name="CONNECTION_STATUS" />، يديرها المشرف، التفاصيل</translation> -<translation id="3635241501480133979">تنتهك هذه البيانات سياسات أمان مؤسستك ولا يمكن حذفها.</translation> +<translation id="3635241501480133979">تنتهك هذه البيانات سياسات أمان مؤسستك ولا يمكن إدراجها.</translation> <translation id="3635353578505343390">إرسال تعليقات إلى Google</translation> <translation id="3636096452488277381">مرحبًا، <ph name="USER_GIVEN_NAME" />.</translation> <translation id="3636766455281737684"><ph name="PERCENTAGE" />% - <ph name="TIME" /> وقت متبقٍ</translation> @@ -2517,7 +2514,7 @@ <translation id="4508051413094283164">فتح الكل في نافذة التصفح المتخفي</translation> <translation id="4508265954913339219">تعذّر إتمام عملية التفعيل</translation> <translation id="4508765956121923607">عرض الم&صدر</translation> -<translation id="4510614391273086606">تتم الآن استعادة ملفات وتطبيقات نظام التشغيل Linux لحالة النسخ الاحتياطي.</translation> +<translation id="4510614391273086606">تتم الآن استعادة البيانات الاحتياطية الخاصّة بملفات نظام التشغيل Linux وتطبيقاته.</translation> <translation id="451407183922382411">تم التشغيل من قبل <ph name="COMPANY_NAME" /></translation> <translation id="4514610446763173167">تبديل الفيديو لتشغيله أو إيقافه مؤقتًا</translation> <translation id="451515744433878153">إزالة</translation> @@ -3140,7 +3137,7 @@ <translation id="5427459444770871191">تدوير &في اتجاه عقارب الساعة</translation> <translation id="542872847390508405">أنت تتصفح كضيف</translation> <translation id="5428850089342283580"><ph name="ACCNAME_APP" /> (هناك تحديث متاح)</translation> -<translation id="542948651837270806">تحتاج البرامج الثابتة لوحدة للنظام الأساسي الموثوق به إلى تثبيت التحديث. الاطّلاع على <ph name="TPM_FIRMWARE_UPDATE_LINK" /></translation> +<translation id="542948651837270806">يجب تثبيت الإصدار المُحدَّث من البرامج الثابتة لوحدة للنظام الأساسي الموثوق به. الاطّلاع على <ph name="TPM_FIRMWARE_UPDATE_LINK" /></translation> <translation id="5430931332414098647">التوصيل الفوري</translation> <translation id="5431318178759467895">بالألوان</translation> <translation id="5431825016875453137">OpenVPN / L2TP</translation> @@ -3321,7 +3318,7 @@ <translation id="5659593005791499971">البريد الإلكتروني</translation> <translation id="5659833766619490117">تعذَّرت ترجمة هذه الصفحة</translation> <translation id="5660204307954428567">الإقران مع <ph name="DEVICE_NAME" /></translation> -<translation id="5662513737565158057">تغيير طريقة عمل تطبيقات نظام التشغيل Linux.</translation> +<translation id="5662513737565158057">تغيير طريقة عمل تطبيقات نظام التشغيل Linux</translation> <translation id="5667546120811588575">جارٍ إعداد Google Play...</translation> <translation id="5669267381087807207">تفعيل</translation> <translation id="5669691691057771421">إدخال رقم التعريف الشخصي الجديد</translation> @@ -3940,7 +3937,7 @@ <translation id="6545864417968258051">البحث عن بلوتوث</translation> <translation id="6545867563032584178">تم إيقاف الميكروفون في إعدادات نظام Mac المفضلة</translation> <translation id="6547354035488017500">احرص على تفريغ مساحة قدرها 512 ميغابايت على الأقل أو سيصبح جهازك غير مستجيب. لتفريغ مساحة، يمكنك حذف الملفات من مساحة تخزين الجهاز.</translation> -<translation id="6549966385318247177">تم حظر هذا المحتوى لأنه محتوى للكبار.</translation> +<translation id="6549966385318247177">تم حظر هذا المحتوى لأنه مخصّص للكبار.</translation> <translation id="6550675742724504774">خيارات</translation> <translation id="6551508934388063976">الأمر غير متوفر. اضغط على control-N لفتح نافذة جديدة.</translation> <translation id="6551612971599078809">يستخدم الموقع الإلكتروني جهاز USB.</translation> @@ -4023,7 +4020,6 @@ <translation id="6678717876183468697">عنوان URL للاستعلام</translation> <translation id="6680442031740878064">المساحة المتاحة: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">تقييم</translation> -<translation id="6681301928961274620">لم يتم العثور على أيّ طابعات من خادم الطباعة.</translation> <translation id="6681668084120808868">التقاط صورة</translation> <translation id="6681964764822470072">سيتم إلغاء تثبيت "<ph name="APP_NAME" />".</translation> <translation id="668599234725812620">فتح Google Play</translation> @@ -4273,7 +4269,7 @@ <translation id="703001695939087067">تم الدخول إلى وضع "النظرة العامة للنافذة". اضغط على علامة التبويب للتنقُّل.</translation> <translation id="7031608529463141342"><ph name="WINDOW_TITLE" /> - تم ربط المنفذ التسلسلي</translation> <translation id="7031962166228839643">يتم حاليًا تحضير TPM، يرجى الانتظار (قد يستغرق ذلك بضع دقائق)...</translation> -<translation id="7034615910652881882">السؤال عند محاولة موقع إلكتروني في الوصول إلى أجهزة أو بيانات "الواقع الافتراضي"</translation> +<translation id="7034615910652881882">طلب الإذن عندما يحاول موقع إلكتروني أن يصل إلى أجهزة الواقع الافتراضي أو بياناته</translation> <translation id="7037509989619051237">نص للمعاينة</translation> <translation id="7039326228527141150">الدخول إلى أجهزة USB من <ph name="VENDOR_NAME" /></translation> <translation id="7039912931802252762">تسجيل دخول البطاقة الذكية لـ Microsoft</translation> @@ -4313,7 +4309,7 @@ <translation id="7081952801286122383">أنت تستخدم وضع التصفُّح المُتخفِّي</translation> <translation id="708278670402572152">قطع الاتصال لتفعيل الفحص</translation> <translation id="7085389578340536476">هل تسمح لمتصفح Chrome بتسجيل الصوت؟</translation> -<translation id="7086467953285486445">تنتهك هذه الملفات سياسات أمان مؤسستك ولا يمكن حذفها.</translation> +<translation id="7086467953285486445">تنتهك هذه الملفات سياسات أمان مؤسستك ولا يمكن إدراجها.</translation> <translation id="7088434364990739311">تعذّر بدء التحقق من التحديثات (رمز الخطأ <ph name="ERROR" />).</translation> <translation id="7088561041432335295">Zip Archiver - فتح ملفات ZIP وتجميعها في تطبيق "الملفات".</translation> <translation id="7088674813905715446">ألغى المشرف إدارة الحسابات لهذا الجهاز. لتمكينه من التسجيل، يُرجى أن تطلب من المشرف وضع الجهاز في حالة في انتظار المراجعة.</translation> @@ -4514,7 +4510,7 @@ <translation id="7360233684753165754"><ph name="PAGE_NUMBER" /> صفحة على <ph name="PRINTER_NAME" /></translation> <translation id="7361297102842600584">انقر بزر الماوس الأيمن لتشغيل <ph name="PLUGIN_NAME" /></translation> <translation id="7363117941401515667">تم التحديث قبل <ph name="HOURS" /> من الساعات</translation> -<translation id="7364591875953874521">تم طلب الوصول</translation> +<translation id="7364591875953874521">تم طلب إذن الوصول</translation> <translation id="7364796246159120393">اختيار ملفّ</translation> <translation id="7366415735885268578">إضافة موقع ويب</translation> <translation id="7366909168761621528">بيانات التصفح</translation> @@ -4540,7 +4536,7 @@ <translation id="740624631517654988">تم منع النوافذ المنبثقة.</translation> <translation id="7407430846095439694">الاستيراد والربط</translation> <translation id="7407504355934009739">يحظر معظم المستخدمين الإشعارات من هذا الموقع الإلكتروني.</translation> -<translation id="740810853557944681">إضافة خادم طابعة</translation> +<translation id="740810853557944681">إضافة خادم طباعة</translation> <translation id="7409549334477097887">كبير جدًا</translation> <translation id="7409836189476010449">تشغيل Flash</translation> <translation id="7410344089573941623">السؤال عند رغبة <ph name="HOST" /> في الدخول إلى الكاميرا والميكروفون التابعين لك</translation> @@ -4561,7 +4557,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{فتح الكل في &نافذة جديدة}=1{فتح في &نافذة جديدة}two{فتح كلا العنوانين (#) في &نافذة جديدة}few{فتح كل الـ (#) عناوين في &نافذة جديدة}many{فتح كل الـ (#) عنوانًا في &نافذة جديدة}other{فتح كل الـ (#) عنوان في &نافذة جديدة}}</translation> <translation id="7434509671034404296">المطوِّر</translation> <translation id="7434635829372401939">مزامنة إعداداتك</translation> -<translation id="7434969625063495310">تعذّر العثور على خادم الطباعة. يُرجى التحقّق من تهيئة الخادم وإعادة المحاولة.</translation> +<translation id="7434969625063495310">تعذّر العثور على خادم الطباعة. يُرجى التحقّق من إعدادات الخادم وإعادة المحاولة.</translation> <translation id="7436921188514130341">عذرًا، حدث خطأ في أثناء إعادة التسمية.</translation> <translation id="7438976808740265764">لن يتوفَّر برنامج Adobe Flash Player بعد كانون الأول (ديسمبر) 2020.</translation> <translation id="7441736921018636843">لتغيير هذا الإعداد، يمكنك <ph name="BEGIN_LINK" />إعادة ضبط المزامنة<ph name="END_LINK" /> لإزالة عبارة مرور المزامنة.</translation> @@ -4571,7 +4567,7 @@ <translation id="7443806024147773267">يمكنك الوصول إلى كلمات المرور عند تسجيل الدخول إلى حسابك على Google.</translation> <translation id="7444983668544353857">إيقاف <ph name="NETWORKDEVICE" /></translation> <translation id="7448430327655618736">يمكنك تثبيت التطبيقات تلقائيًا.</translation> -<translation id="7448625729116931228">السؤال عند محاولة موقع إلكتروني في الوصول إلى أجهزة أو بيانات الواقع الافتراضي (مُوصى به)</translation> +<translation id="7448625729116931228">طلب الإذن عندما يحاول موقع إلكتروني أن يصل إلى أجهزة الواقع الافتراضي أو بياناته (إعداد مُوصى به)</translation> <translation id="7450761244949417357">سيتم الفتح في <ph name="ALTERNATIVE_BROWSER_NAME" /> الآن.</translation> <translation id="7453008956351770337">عند تحديد الطابعة، فإنك تمنح الإضافة التالية الإذن للدخول إلى الطابعة.</translation> <translation id="7454548535253569100">البوابة: <ph name="SUBFRAME_SITE" /></translation> @@ -4709,7 +4705,7 @@ <translation id="7652808307838961528">تعديل شخص، <ph name="PROFILE_NAME" /></translation> <translation id="765293928828334535">لا يمكن إضافة التطبيقات والإضافات والنصوص البرمجية للمستخدم من موقع الويب هذا.</translation> <translation id="7652954539215530680">إنشاء رقم التعريف الشخصي</translation> -<translation id="7653295403398566475">السؤال عند محاولة موقع إلكتروني في الوصول إلى موضع الكاميرا أو تصوير غرفتك.</translation> +<translation id="7653295403398566475">طلب الإذن عندما يحاول موقع إلكتروني أن يصل إلى موضع الكاميرا أو أن يصوّر غرفتك</translation> <translation id="7654941827281939388">يتم الآن استخدام هذا الحساب فعلاً على هذا الكمبيوتر.</translation> <translation id="7658239707568436148">إلغاء</translation> <translation id="7659584679870740384">لا يصرح لك باستخدام هذا الجهاز. يُرجى الاتصال بالمسؤول، للحصول على إذن تسجيل الدخول.</translation> @@ -5436,7 +5432,7 @@ <translation id="8650543407998814195">يمكنك إزالة ملفك الشخصي القديم حتى لو لم يعد بإمكانك الوصول إليه.</translation> <translation id="8651585100578802546">فرض إعادة تحميل هذه الصفحة</translation> <translation id="8652400352452647993">خطأ في حزمة الإضافة</translation> -<translation id="8653578191563425126">مساحة القرص المطلوبة للحجز لـ Crostini (يمكنك تغيير هذا لاحقًا).</translation> +<translation id="8653578191563425126">مساحة القرص التي يجب تخصيصها لـ Crostini (يمكنك تغيير هذا لاحقًا).</translation> <translation id="8654151524613148204">عذرًا، الملف كبير جدًا حتى يتمكن الكمبيوتر من معالجته.</translation> <translation id="8655295600908251630">القناة</translation> <translation id="8655319619291175901">عفوًا، حدث خطأ ما.</translation> @@ -5553,7 +5549,6 @@ <translation id="8794025342371547160">عنوان IP مقيد</translation> <translation id="879413103056696865">أثناء تشغيل نقطة الاتصال، سينفّذ جهاز <ph name="PHONE_NAME" /> ما يلي:</translation> <translation id="8795916974678578410">نافذة جديدة</translation> -<translation id="8797086401386164142">تم العثور على <ph name="NUM_PRINTERS" /> طابعات من خادم الطباعة.</translation> <translation id="8797459392481275117">عدم ترجمة هذا الموقع مطلقًا</translation> <translation id="8798099450830957504">التلقائي</translation> <translation id="8798441408945964110">اسم مقدم الخدمة</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb index 065d379..0a2801d 100644 --- a/chrome/app/resources/generated_resources_as.xtb +++ b/chrome/app/resources/generated_resources_as.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">পূৰ্বদৰ্শন ল’ড কৰি থকা হৈছে</translation> <translation id="1032605640136438169">অনুগ্ৰহ কৰি নতুন চৰ্তাৱলী পৰ্যালোচনা কৰক</translation> <translation id="103279545524624934">Android এপ্ লঞ্চ কৰিবলৈ ডিস্কৰ ঠাই খালী কৰক।</translation> -<translation id="1033343386521881354">প্ৰিণ্ট ছার্ভাৰটোৰ পৰা ১ টা প্ৰিণ্টাৰ বিচাৰি পোৱা গৈছে।</translation> <translation id="1033780634303702874">আপোনাৰ ছিৰিয়েল ডিভাইচসমূহ এক্সেছ কৰক</translation> <translation id="1034942643314881546">এপ্সমূহৰ সবিশেষ বর্ণনা সৃষ্টি কৰিবলৈ adb সক্ষম কৰি থকা হৈছে</translation> <translation id="1036348656032585052">অফ কৰক</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">সম্পূৰ্ণ স্ক্রীণৰ পৰা ওলাই যাবলৈ |<ph name="ACCELERATOR" />|ত টিপক</translation> <translation id="1038168778161626396">কেৱল সাংকেতিক</translation> <translation id="1039337018183941703">অমান্য বা ব্যৱহাৰৰ অনুপযোগী ফাইল</translation> -<translation id="1039850285407663109">বাছনি কৰা ফাইলটো অজ্ঞাত আৰু বিপজ্জনক হ’ব পাৰে। এই ফাইলটো খোলাৰ পূর্বে স্কেন কৰাৰ কথা বিবেচনা কৰক।</translation> <translation id="1041175011127912238">এই পৃষ্ঠাটোৱে সঁহাৰি জনোৱা নাই</translation> <translation id="1041263367839475438">উপলব্ধ ডিভাইচসমূ্হ</translation> <translation id="1042174272890264476">আপোনাৰ কম্পিউটাৰৰ সৈতে <ph name="SHORT_PRODUCT_NAME" />ৰ RLZ লাইব্ৰেৰী অন্তনিৰ্মিত ভাৱে আছে। কোনো বিশেষ প্ৰচাৰ অভিযানত ব্যৱহাৰ হোৱা সন্ধান আৰু <ph name="SHORT_PRODUCT_NAME" />ৰ ব্যৱহাৰ জুখিবলৈ RLZএ কোনো অদ্বৈত নোহোৱা, ব্যক্তিগতভাৱে চিনাক্ত কৰিব নোৱাৰা টেগ দিয়ে। এই লেবেলসমূহ কেতিয়াবা <ph name="PRODUCT_NAME" />ৰ Google Searchত কৰা সন্ধানত প্ৰদর্শিত হয়।</translation> @@ -636,7 +634,6 @@ <translation id="1858585891038687145">ছফ্টৱেৰ মেকাৰসকলক চিনাক্ত কৰিবলৈ এই প্ৰমাণপত্ৰখনক বিশ্বাস কৰক</translation> <translation id="1861262398884155592">এই ফল্ডাৰটো খালী</translation> <translation id="1863182668524159459">কোনো ছিৰিয়েল প'ৰ্ট বিচাৰি পোৱা নগ'ল</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> অজ্ঞাত। ক্ষতিৰ সম্ভাৱনা কমাবলৈ ফাইল স্কেন কৰক।</translation> <translation id="1864111464094315414">লগ ইন কৰক</translation> <translation id="1864400682872660285">শীতল</translation> <translation id="1864454756846565995">USB-C ডিভাইচ (পিছফালে থকা পর্ট)</translation> @@ -4014,7 +4011,6 @@ <translation id="6678717876183468697">কুৱেৰীৰ URL</translation> <translation id="6680442031740878064">উপলব্ধ: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">হাৰ</translation> -<translation id="6681301928961274620">প্ৰিণ্ট ছার্ভাৰটোৰ পৰা কোনো প্ৰিণ্টাৰ বিচাৰি পোৱা নগ’ল।</translation> <translation id="6681668084120808868">ফট’ তোলক</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" আনইনষ্টল হ’ব।</translation> <translation id="668599234725812620">Google Play খোলক</translation> @@ -5538,7 +5534,6 @@ <translation id="8794025342371547160">প্ৰতিবন্ধিত আইপি</translation> <translation id="879413103056696865">হটস্পট অন হৈ থাকিলে আপোনাৰ <ph name="PHONE_NAME" />টোৱে এইসমূহ কৰিব পাৰিব:</translation> <translation id="8795916974678578410">নতুন ৱিণ্ড’</translation> -<translation id="8797086401386164142">প্ৰিণ্ট ছার্ভাৰটোৰ পৰা <ph name="NUM_PRINTERS" /> টা প্ৰিণ্টাৰ বিচাৰি পোৱা গৈছে।</translation> <translation id="8797459392481275117">এই ছাইটটো কেতিয়াও অনুবাদ নকৰিব</translation> <translation id="8798099450830957504">ডিফ’ল্ট</translation> <translation id="8798441408945964110">প্ৰদানকাৰীৰ নাম</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb index beede2e..23ba7570 100644 --- a/chrome/app/resources/generated_resources_az.xtb +++ b/chrome/app/resources/generated_resources_az.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Önizləmə yüklənir</translation> <translation id="1032605640136438169">Yeni şərtləri nəzərdən keçirin</translation> <translation id="103279545524624934">Android tətbiqlərini başlatmaq üçün diskdə yer boşaldın.</translation> -<translation id="1033343386521881354">Çap serverindən 1 printer tapıldı.</translation> <translation id="1033780634303702874">Serial cihazlarınıza daxil olun</translation> <translation id="1034942643314881546">Tətbiq illüstrasiyası yaratmaq üçün adb aktiv edilir</translation> <translation id="1036348656032585052">Deaktiv edin</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Tam ekrandan çıxmaq üçün |<ph name="ACCELERATOR" />| basın</translation> <translation id="1038168778161626396">Sadəcə olaraq kodlandırın</translation> <translation id="1039337018183941703">Yanlış və ya zədələnmiş fayl</translation> -<translation id="1039850285407663109">Seçilmiş fayl naməlumdur və təhlükəli ola bilər. Bu faylı açmazdan əvvəl skanlayın.</translation> <translation id="1041175011127912238">Bu səhifə cavab vermir</translation> <translation id="1041263367839475438">Əlçatan cihazlar</translation> <translation id="1042174272890264476">Kompüteriniz həmçinin daxili <ph name="SHORT_PRODUCT_NAME" /> RLZ kitabxanası ilə gəlir. RLZ axtarışları və <ph name="SHORT_PRODUCT_NAME" /> istifadəsini ölçmək üçün identifikasiya edilə bilən teq ayırır. Bu etiketlər bəzən <ph name="PRODUCT_NAME" /> daxilində, Google Axtarış sorğularında görünür.</translation> @@ -554,7 +552,7 @@ <translation id="1758018619400202187">EAP-TLS</translation> <translation id="17584710573359123">Chrome Veb Mağazada baxın</translation> <translation id="176193854664720708">Barmaq izi sensoru yandırıb-söndürmə düyməsindədir. Barmağınızla ona yavaşca toxunun.</translation> -<translation id="176273057789108760">Təşkilatınız təhlükəsizliyin təsdiq edilməsi üçün sürüşdürülən faylları skanlayır.</translation> +<translation id="176273057789108760">Təşkilatınız təhlükəsizliyin təsdiq edilməsi üçün daşınan faylları skanlayır.</translation> <translation id="1763046204212875858">Tətbiq qısayolları yaradın</translation> <translation id="1763108912552529023">Araşdırmağa davam edin</translation> <translation id="1763808908432309942">Yeni tabda açır</translation> @@ -635,7 +633,6 @@ <translation id="1858585891038687145">Proqram yaradıcılarının aşkarlanması üçün bu sertifikata güvənin.</translation> <translation id="1861262398884155592">Qovluq boşdur</translation> <translation id="1863182668524159459">Seriya portu tapılmadı</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> naməlumdur. Riski minimuma endirmək üçün faylı skanlayın.</translation> <translation id="1864111464094315414">Daxil olun</translation> <translation id="1864400682872660285">Daha soyuq</translation> <translation id="1864454756846565995">USB-C cihazı (arxa port)</translation> @@ -1899,7 +1896,7 @@ <translation id="3630132874740063857">Telefonunuz</translation> <translation id="3630995161997703415">Hər hansı bir vaxt istifadə etmək üçün bu saytı rəfinizə əlavə edin</translation> <translation id="3634507049637220048"><ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" /> şəbəkə, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, Administratorunuz tərəfindən idarə olunur, Detallar</translation> -<translation id="3635241501480133979">Bu data təşkilatınızın təhlükəsizlik siyasətlərini pozur və yerləşdirilməsi mümkün deyil.</translation> +<translation id="3635241501480133979">Bu datanın daşınması təşkilatınızın təhlükəsizlik siyasətlərini pozduğu üçün mümkün deyil.</translation> <translation id="3635353578505343390">Google'a rəy göndərin</translation> <translation id="3636096452488277381">Necəsiniz, <ph name="USER_GIVEN_NAME" />.</translation> <translation id="3636766455281737684"><ph name="PERCENTAGE" />% - <ph name="TIME" /> qalıb</translation> @@ -2462,7 +2459,7 @@ <translation id="4421932782753506458">Tüklü</translation> <translation id="4423376891418188461">Ayarları Bərpa Edin</translation> <translation id="442397852638519243"><ph name="USER_NAME" />, administrator parolu dəyişməyinizi tələb edir.</translation> -<translation id="4429030830601238961">Bu data təşkilatınızın təhlükəsizlik siyasətlərini pozur və əlavə edilməsi mümkün deyil.</translation> +<translation id="4429030830601238961">Bu datanın əlavə edilməsi təşkilatınızın təhlükəsizlik siyasətlərini pozduğu üçün mümkün deyil.</translation> <translation id="4430019312045809116">Həcm</translation> <translation id="4430369329743628066">Əlfəcin əlavə olundu</translation> <translation id="4434045419905280838">Popap və yönləndirmələr</translation> @@ -3933,7 +3930,7 @@ <translation id="6545864417968258051">Bluetooth skanı</translation> <translation id="6545867563032584178">Mikrofon Mac Sistem Tərcihlərində deaktivdir</translation> <translation id="6547354035488017500">Ən az 512 MB boşaldın əks halda cihazınız reaksiya verməyəcək. Yer boşaltmaq üçün, cihaz yaddaşından faylları silin.</translation> -<translation id="6549966385318247177">Bu, yetkin məzmunu olduğu üçün bloklanıb.</translation> +<translation id="6549966385318247177">Böyüklər üçün məzmun olması səbəbindən bloklanıb.</translation> <translation id="6550675742724504774">Seçimlər</translation> <translation id="6551508934388063976">Əmr əlçatmazdır. Yeni pəncərə açmaq üçün control-N basın.</translation> <translation id="6551612971599078809">Sayt USB istifadə edir</translation> @@ -4016,7 +4013,6 @@ <translation id="6678717876183468697">Sorğu linki</translation> <translation id="6680442031740878064">Əlçatandır: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Qiymət</translation> -<translation id="6681301928961274620">Çap serverindən heç bir printer tapılmadı.</translation> <translation id="6681668084120808868">Fotoşəkil çəkin</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" sistemdən silinəcək.</translation> <translation id="668599234725812620">Google Play'i açın</translation> @@ -4306,7 +4302,7 @@ <translation id="7081952801286122383">Gizli rejimindəsiniz</translation> <translation id="708278670402572152">Skanı aktiv etmək üçün bağlantını kəsin</translation> <translation id="7085389578340536476">Chrome'a səs yazmaq icazəsi verilsin?</translation> -<translation id="7086467953285486445">Bu fayllar təşkilatınızın təhlükəsizlik siyasətlərini pozur və onları yerləşdirmək mümkün deyil.</translation> +<translation id="7086467953285486445">Bu faylların daşınması təşkilatınızın təhlükəsizlik siyasətlərini pozduğu üçün mümkün deyil.</translation> <translation id="7088434364990739311">Güncəlləmə yoxlanışı başladıla bilmədi (xəta kodu <ph name="ERROR" />).</translation> <translation id="7088561041432335295">Zip Archiver - ZIP fayllarını Fayl tətbiqində açın və paketləyin.</translation> <translation id="7088674813905715446">Bu cihaz administrator tərəfindən deproviziya edilmiş duruma yerləşdirildi. Qeydiyyatdan keçirmək üçün administrator onu gözləmə durumuna keçirməlidir.</translation> @@ -5542,7 +5538,6 @@ <translation id="8794025342371547160">Məhdudlaşdırılmış IP</translation> <translation id="879413103056696865">Hotspot aktiv olduqda, <ph name="PHONE_NAME" /> telefonunun edə biləcəkləri:</translation> <translation id="8795916974678578410">Yeni Pəncərə</translation> -<translation id="8797086401386164142">Çap serverindən <ph name="NUM_PRINTERS" /> printer tapıldı.</translation> <translation id="8797459392481275117">Bu Saytı Heç Vaxt Tərcümə Etməyin</translation> <translation id="8798099450830957504">Defolt</translation> <translation id="8798441408945964110">Provayder adı</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb index 2d62bf5..00e912c4 100644 --- a/chrome/app/resources/generated_resources_be.xtb +++ b/chrome/app/resources/generated_resources_be.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Ідзе загрузка перадпрагляду</translation> <translation id="1032605640136438169">Азнаёмцеся з новымі ўмовамі</translation> <translation id="103279545524624934">Каб запускаць праграмы Android, вызваліце месца на дыску.</translation> -<translation id="1033343386521881354">На серверы друку знойдзены 1 прынтар.</translation> <translation id="1033780634303702874">Доступ да паслядоўных прылад</translation> <translation id="1034942643314881546">Уключэнне ADB для стварэння ілюстрацый для праграм</translation> <translation id="1036348656032585052">Выключыць</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Націсніце "<ph name="ACCELERATOR" />", каб выйсці з поўнаэкраннага рэжыму</translation> <translation id="1038168778161626396">Толькі шыфраванне</translation> <translation id="1039337018183941703">Недапушчальны або пашкоджаны файл</translation> -<translation id="1039850285407663109">Выбраны файл – невядомы і можа быць небяспечным. Перад адкрыццём гэты файл лепш праверыць.</translation> <translation id="1041175011127912238">Гэтая старонка не адказвае</translation> <translation id="1041263367839475438">Даступныя прылады</translation> <translation id="1042174272890264476">Ваш камп'ютар пастаўляецца з убудаванай бібліятэкай RLZ для <ph name="SHORT_PRODUCT_NAME" />. RLZ прызначае неўнікальны цэтлік, які не дазваляе ідэнтыфікаваць асобу, для ацэнкі пошукавых запытаў і статыстыкі выкарыстання <ph name="SHORT_PRODUCT_NAME" />, якія з'яўляюцца вынікам пэўных рэкламных кампаній. Гэтыя меткі часам з'яўляюцца ў пошукавых запытах у Google у прадукце <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Давяраць гэтаму сертыфікату пры ідэнтыфікацыі стваральнікаў праграмнага забеспячэння</translation> <translation id="1861262398884155592">Гэта папка пустая</translation> <translation id="1863182668524159459">Паслядоўныя парты не знойдзены</translation> -<translation id="1863552924692672565">Файл "<ph name="FILE_NAME" />" – невядомы Каб звесці рызыку да мінімуму, выканайце праверку файла</translation> <translation id="1864111464094315414">Уваход</translation> <translation id="1864400682872660285">Халадней</translation> <translation id="1864454756846565995">Прылада USB-C (порт ззаду)</translation> @@ -4025,7 +4022,6 @@ <translation id="6678717876183468697">URL запыту</translation> <translation id="6680442031740878064">Даступна: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Хуткасць</translation> -<translation id="6681301928961274620">На серверы друку прынтараў не знойдзена.</translation> <translation id="6681668084120808868">Зрабіць фота</translation> <translation id="6681964764822470072">Праграма "<ph name="APP_NAME" />" будзе выдалена.</translation> <translation id="668599234725812620">Адкрыць Google Play</translation> @@ -5554,7 +5550,6 @@ <translation id="8794025342371547160">IP-адрас з абмежаваннямі</translation> <translation id="879413103056696865">Калі хот-спот уключаны, прылада <ph name="PHONE_NAME" /> будзе:</translation> <translation id="8795916974678578410">Новае акно</translation> -<translation id="8797086401386164142">Знойдзена прынтараў на серверы друку: <ph name="NUM_PRINTERS" />.</translation> <translation id="8797459392481275117">Ніколі не перакладаць гэты сайт</translation> <translation id="8798099450830957504">Стандартна</translation> <translation id="8798441408945964110">Назва пастаўшчыка</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb index 9919648..f5ed4933 100644 --- a/chrome/app/resources/generated_resources_bg.xtb +++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Визуализацията се зарежда</translation> <translation id="1032605640136438169">Моля, прегледайте новите Условия</translation> <translation id="103279545524624934">Освободете място на диска, за да стартирате приложения за Android.</translation> -<translation id="1033343386521881354">В сървъра за отпечатване бе открит 1 принтер.</translation> <translation id="1033780634303702874">Достъп до серийните ви устройства</translation> <translation id="1034942643314881546">Илюстрация на активирането на adb за създаване на приложения</translation> <translation id="1036348656032585052">Изключване</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Натиснете |<ph name="ACCELERATOR" />| за изход от режима на цял екран</translation> <translation id="1038168778161626396">Само шифроване</translation> <translation id="1039337018183941703">Невалиден или повреден файл</translation> -<translation id="1039850285407663109">Избраният файл е неизвестен и може да бъде опасен. Добре е да го сканирате, преди да го отворите.</translation> <translation id="1041175011127912238">Страницата не реагира</translation> <translation id="1041263367839475438">Налични устройства</translation> <translation id="1042174272890264476">Компютърът ви също се предлага с библиотеката RLZ на <ph name="SHORT_PRODUCT_NAME" />, която е вградена. Тя задава неуникален и непозволяващ лично идентифициране маркер за измерване на търсенията и използването на <ph name="SHORT_PRODUCT_NAME" />, стимулирани от определена промоционална кампания. Тези етикети понякога се показват в заявките за търсене с Google в <ph name="PRODUCT_NAME" />.</translation> @@ -636,7 +634,6 @@ <translation id="1858585891038687145">Да се има доверие на този сертификат за идентифициране на производители на софтуер</translation> <translation id="1861262398884155592">Тази папка е празна</translation> <translation id="1863182668524159459">Няма намерени серийни портове</translation> -<translation id="1863552924692672565">Файлът „<ph name="FILE_NAME" />“ е неизвестен. Сканирайте го, за да сведете риска до минимум.</translation> <translation id="1864111464094315414">Вход</translation> <translation id="1864400682872660285">По-студени цветове</translation> <translation id="1864454756846565995">USB-C устройство (задният порт)</translation> @@ -3142,7 +3139,7 @@ <translation id="5427459444770871191">Завъртане &по часовниковата стрелка</translation> <translation id="542872847390508405">Сърфирате като гост</translation> <translation id="5428850089342283580"><ph name="ACCNAME_APP" /> (Налице е актуализация)</translation> -<translation id="542948651837270806">Трябва да бъде инсталирана актуализация на фърмуера на модула за надеждна платформа. Вижте информацията на адрес<ph name="TPM_FIRMWARE_UPDATE_LINK" /></translation> +<translation id="542948651837270806">Трябва да бъде инсталирана актуализация на фърмуера на модула за надеждна платформа. Вижте информацията на адрес <ph name="TPM_FIRMWARE_UPDATE_LINK" /></translation> <translation id="5430931332414098647">Незабавен тетъринг</translation> <translation id="5431318178759467895">Цветно</translation> <translation id="5431825016875453137">OpenVPN/L2TP</translation> @@ -4025,7 +4022,6 @@ <translation id="6678717876183468697">URL адрес на заявката</translation> <translation id="6680442031740878064">Свободно място: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Скорост</translation> -<translation id="6681301928961274620">В сървъра за отпечатване не бяха открити принтери.</translation> <translation id="6681668084120808868">Снимане</translation> <translation id="6681964764822470072"><ph name="APP_NAME" /> ще се деинсталира.</translation> <translation id="668599234725812620">Отваряне на Google Play</translation> @@ -5555,7 +5551,6 @@ <translation id="8794025342371547160">Ограничен IP адрес</translation> <translation id="879413103056696865">Докато точката за достъп е включена, устройството ви <ph name="PHONE_NAME" /> ще:</translation> <translation id="8795916974678578410">Нов прозорец</translation> -<translation id="8797086401386164142">В сървъра за отпечатване бяха открити <ph name="NUM_PRINTERS" /> принтера.</translation> <translation id="8797459392481275117">Този сайт да не се превежда никога</translation> <translation id="8798099450830957504">По подразбиране</translation> <translation id="8798441408945964110">Име на доставчика</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index 6fb44c8..075c53ef 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">প্রিভিউ লোড হচ্ছে</translation> <translation id="1032605640136438169">নতুন শর্তাবলী ভাল করে পড়ে নিন</translation> <translation id="103279545524624934">Android অ্যাপ্লিকেশন লঞ্চ করার জন্য ডিস্কে জায়গা খালি করুন।</translation> -<translation id="1033343386521881354">প্রিন্ট সার্ভারে একটি প্রিন্টার পাওয়া গেছে।</translation> <translation id="1033780634303702874">আপনার সিরিয়াল ডিভাইসগুলি অ্যাক্সেস করুন</translation> <translation id="1034942643314881546">অ্যাপ ইলাস্ট্রেশন করতে adb চালু করা হচ্ছে</translation> <translation id="1036348656032585052">বন্ধ করুন</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">পূর্ণ স্ক্রিন থেকে বেরিয়ে যেতে |<ph name="ACCELERATOR" />| চাপুন</translation> <translation id="1038168778161626396">কেবলমাত্র চিহ্ন প্রদান</translation> <translation id="1039337018183941703">ভুল বা দূষিত ফাইল</translation> -<translation id="1039850285407663109">বেছে নেওয়া ফাইলটি অজানা এবং সেটি বিপজ্জনকও হতে পারে। এই ফাইল খোলার আগে স্ক্যান করে নিলে ভাল হয়।</translation> <translation id="1041175011127912238">এই পৃষ্ঠা সাড়া দিচ্ছে না</translation> <translation id="1041263367839475438">উপলভ্য ডিভাইস</translation> <translation id="1042174272890264476">আপনার কম্পিউটারও <ph name="SHORT_PRODUCT_NAME" /> এর RLZ লাইব্রেরি বিল্ট ইনের সাথে আসে৷ RLZ সার্চগুলি পরিমাপ করার জন্য একটি সাধারণ, ব্যক্তিগতভাবে সনাক্তকরণযোগ্য নয় এমন ট্যাগ নির্ধারণ করে এবং <ph name="SHORT_PRODUCT_NAME" /> এর ব্যবহার একটি নির্দিষ্ট প্রচারাভিযানের মাধ্যমে চালিত হয়৷ এই লেবেলগুলি কখনো কখনো <ph name="PRODUCT_NAME" /> এ Google সার্চ ক্যোয়ারিগুলিতে প্রদর্শিত হয়৷</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">সফ্টওয়্যার প্রস্তুতকারকদের শনাক্তকরণের জন্য এই সার্টিফিকেটটিকে বিশ্বাস করুন</translation> <translation id="1861262398884155592">ফোল্ডারটি খালি</translation> <translation id="1863182668524159459">কোনও সিরিয়াল পোর্ট পাওয়া যায়নি</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> অজানা। ঝুঁকি কমাতে ফাইল স্ক্যান করুন।</translation> <translation id="1864111464094315414">লগ-ইন করুন</translation> <translation id="1864400682872660285">কুলার</translation> <translation id="1864454756846565995">USB-C ডিভাইস (পিছনের পোর্ট)</translation> @@ -4025,7 +4022,6 @@ <translation id="6678717876183468697">কোয়েরি URL</translation> <translation id="6680442031740878064">খালি জায়গা: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">দ্রুততা</translation> -<translation id="6681301928961274620">প্রিন্ট সার্ভার থেকে কোনও প্রিন্টার খুঁজে পাওয়া যায়নি।</translation> <translation id="6681668084120808868">ফটো তুলুন</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" আনইনস্টল করা হবে।</translation> <translation id="668599234725812620">Google Play খুলুন</translation> @@ -5553,7 +5549,6 @@ <translation id="8794025342371547160">বিধিনিষেধযুক্ত IP</translation> <translation id="879413103056696865">হটস্পট চালু থাকা অবস্থায়, আপনার <ph name="PHONE_NAME" /> যা করবে:</translation> <translation id="8795916974678578410">নতুন উইন্ডো</translation> -<translation id="8797086401386164142">প্রিন্ট সার্ভারে <ph name="NUM_PRINTERS" />টি প্রিন্টার পাওয়া গেছে।</translation> <translation id="8797459392481275117">কখনও এই সাইটটিকে অনুবাদ করবেন না</translation> <translation id="8798099450830957504">ডিফল্ট</translation> <translation id="8798441408945964110">পরিষেবা প্রদানকারীর নাম</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb index a1d95047..6627eaec 100644 --- a/chrome/app/resources/generated_resources_bs.xtb +++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Učitavanje pregleda</translation> <translation id="1032605640136438169">Pročitajte nove Uslove</translation> <translation id="103279545524624934">Oslobodite prostor na disku da pokrenete Android aplikacije.</translation> -<translation id="1033343386521881354">Pronađen je 1 štampač na serveru za štampanje.</translation> <translation id="1033780634303702874">Pristup serijskim uređajima</translation> <translation id="1034942643314881546">Omogućavanje ADB-a za kreiranje ilustracije aplikacija</translation> <translation id="1036348656032585052">Isključi</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Pritisnite |<ph name="ACCELERATOR" />| da biste zatvorili prikaz na cijelom zaslonu</translation> <translation id="1038168778161626396">Samo šifriranje</translation> <translation id="1039337018183941703">Nevažeći ili oštećen fajl</translation> -<translation id="1039850285407663109">Odabrani fajl je nepoznat i može biti opasan. Predlažemo da skenirate fajl prije nego što ga otvorite.</translation> <translation id="1041175011127912238">Ova stranica ne reagira</translation> <translation id="1041263367839475438">Dostupni uređaji</translation> <translation id="1042174272890264476">Vaš računar također ima ugrađenu RLZ biblioteku proizvoda <ph name="SHORT_PRODUCT_NAME" />. RLZ dodjeljuje nejedinstvenu oznaku koja ne može poslužiti za ličnu identifikaciju za mjerenje pretraživanja i korištenje proizvoda <ph name="SHORT_PRODUCT_NAME" /> do kojeg je došlo putem određene promotivne kampanje. Te oznake se nekada pojavljuju u upitima Google Pretraživanja u proizvodu <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Vjeruj ovoj potvrdi za identifikaciju proizvođača softvera</translation> <translation id="1861262398884155592">Ovaj folder je prazan</translation> <translation id="1863182668524159459">Nije pronađen nijedan serijski priključak</translation> -<translation id="1863552924692672565">Fajl <ph name="FILE_NAME" /> je nepoznat. Skenirajte fajl da umanjite rizik.</translation> <translation id="1864111464094315414">Prijava</translation> <translation id="1864400682872660285">Hladnije</translation> <translation id="1864454756846565995">USB-C uređaj (stražnji priključak)</translation> @@ -1100,7 +1097,7 @@ <translation id="2501278716633472235">Nazad</translation> <translation id="2501797496290880632">Upišite prečac</translation> <translation id="2502441965851148920">Automatska ažuriranja su omogućena. Administrator je onemogućio ručna ažuriranja.</translation> -<translation id="2502719318159902502">Potpuni pristup</translation> +<translation id="2502719318159902502">Puni pristup</translation> <translation id="2505127913256479918">Ovaj račun pod nadzorom uskoro će biti uklonjen</translation> <translation id="2505324914378689427">{SCREEN_INDEX,plural, =1{#. ekran}one{#. ekran}few{#. ekran}other{#. ekran}}</translation> <translation id="2505402373176859469"><ph name="RECEIVED_AMOUNT" /> od <ph name="TOTAL_SIZE" /></translation> @@ -1373,7 +1370,7 @@ <translation id="2865919525181940183">Snimak ekrana programa koji su trenutno na ekranu.</translation> <translation id="286674810810214575">Provjeravanje izvora napajanja...</translation> <translation id="2867768963760577682">Otvori kao zakačenu karticu</translation> -<translation id="2868184003987917410">Nemoj dozvoliti web lokacijama da pristupaju uređajima/podacima virtualne realnosti</translation> +<translation id="2868184003987917410">Nemoj dozvoliti web lokacijama da pristupaju uređajima/podacima virtuelne realnosti</translation> <translation id="2868746137289129307">Ova ekstenzija je zastarjela i onemogućena je pravilom preduzeća. Može se omogućiti automatski kada nova verzija postane dostupna.</translation> <translation id="2870560284913253234">Web lokacija</translation> <translation id="2870909136778269686">Ažuriranje…</translation> @@ -1701,7 +1698,7 @@ <translation id="3348038390189153836">Otkriven je uklonjivi uređaj</translation> <translation id="3349933790966648062">Otisak iz memorije</translation> <translation id="3350117557200012647">Pokreni način rada za uparivanje</translation> -<translation id="3350244554415289209">Pitaj kada web lokacija želi pristupiti položaju moje kamere ili mapirati moju sobu (preporučeno)</translation> +<translation id="3350244554415289209">Pitaj me kada web lokacija želi pristupiti položaju moje kamere ili mapirati moju sobu (preporučeno)</translation> <translation id="3355936511340229503">Greška prilikom povezivanja</translation> <translation id="3356580349448036450">Završi</translation> <translation id="3359256513598016054">Ograničenja pravila za potvrdu</translation> @@ -3143,7 +3140,7 @@ <translation id="5427459444770871191">Rotiraj u smjeru kretanja kazaljki na satu</translation> <translation id="542872847390508405">Pregledavate kao gost</translation> <translation id="5428850089342283580"><ph name="ACCNAME_APP" /> (Dostupno je ažuriranje)</translation> -<translation id="542948651837270806">Potrebno je instalirati ažuriranje za firmer modula pouzdane platforme. Pogledajte <ph name="TPM_FIRMWARE_UPDATE_LINK" /></translation> +<translation id="542948651837270806">Potrebno je instalirati ažuriranje za firmver modula pouzdane platforme. Pogledajte <ph name="TPM_FIRMWARE_UPDATE_LINK" /></translation> <translation id="5430931332414098647">Trenutno povezivanje putem mobitela</translation> <translation id="5431318178759467895">Boja</translation> <translation id="5431825016875453137">OpenVPN/L2TP</translation> @@ -4025,7 +4022,6 @@ <translation id="6678717876183468697">URL upita</translation> <translation id="6680442031740878064">Dostupno: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Brzina</translation> -<translation id="6681301928961274620">Nije pronađen nijedan štampač na serveru za štampanje.</translation> <translation id="6681668084120808868">Snimi fotografiju</translation> <translation id="6681964764822470072">Aplikacija "<ph name="APP_NAME" />" će se deinstalirati.</translation> <translation id="668599234725812620">Otvori Google Play</translation> @@ -4275,7 +4271,7 @@ <translation id="703001695939087067">Ušli ste u način rada pregleda prozora. Pritisnite karticu za navigaciju.</translation> <translation id="7031608529463141342"><ph name="WINDOW_TITLE" /> – serijski priključak je povezan</translation> <translation id="7031962166228839643">TPM se trenutno priprema. Pričekajte (ovo može potrajati nekoliko minuta)...</translation> -<translation id="7034615910652881882">Pitaj kada web lokacija želi pristupiti mojim uređajima/podacima virtuelne realnosti</translation> +<translation id="7034615910652881882">Pitaj me kada web lokacija želi pristupiti mojim uređajima/podacima virtuelne realnosti</translation> <translation id="7037509989619051237">Tekst za pregledanje</translation> <translation id="7039326228527141150">Pristup USB uređajima dobavljača <ph name="VENDOR_NAME" /></translation> <translation id="7039912931802252762">Prijava na Microsoft pametnu karticu</translation> @@ -4573,7 +4569,7 @@ <translation id="7443806024147773267">Pristupite svojim lozinkama kad god ste prijavljeni na Google račun.</translation> <translation id="7444983668544353857">Onemogući <ph name="NETWORKDEVICE" /></translation> <translation id="7448430327655618736">Instalirajte aplikacije automatski</translation> -<translation id="7448625729116931228">Pitaj kada web lokacija želi pristupiti mojim uređajima/podacima virtuelne realnosti (preporučeno)</translation> +<translation id="7448625729116931228">Pitaj me kada web lokacija želi pristupiti mojim uređajima/podacima virtuelne realnosti (preporučeno)</translation> <translation id="7450761244949417357">Otvaranje u pregledniku <ph name="ALTERNATIVE_BROWSER_NAME" /></translation> <translation id="7453008956351770337">Ako odaberete ovaj štampač, sljedećoj ekstenziji dajete odobrenje da pristupi vašem štampaču:</translation> <translation id="7454548535253569100">Portal: <ph name="SUBFRAME_SITE" /></translation> @@ -4711,7 +4707,7 @@ <translation id="7652808307838961528">Uređivanje osobe, <ph name="PROFILE_NAME" /></translation> <translation id="765293928828334535">Aplikacije, ekstenzije i korisničke skripte se ne mogu dodati s ove web lokacije.</translation> <translation id="7652954539215530680">Kreirajte PIN</translation> -<translation id="7653295403398566475">Pitaj kada web lokacija želi pristupiti položaju moje kamere ili mapirati moju sobu</translation> +<translation id="7653295403398566475">Pitaj me kada web lokacija želi pristupiti položaju moje kamere ili mapirati moju sobu</translation> <translation id="7654941827281939388">Ovaj račun se već koristi na ovom računaru.</translation> <translation id="7658239707568436148">Otkaži</translation> <translation id="7659584679870740384">Nemate odobrenje za korištenje ovog uređaja. Kontaktirajte administratora zbog odobrenja za prijavu.</translation> @@ -5555,7 +5551,6 @@ <translation id="8794025342371547160">Ograničeni IP</translation> <translation id="879413103056696865">Dok je pristupna tačka uključena, telefon <ph name="PHONE_NAME" /> će:</translation> <translation id="8795916974678578410">Novi prozor</translation> -<translation id="8797086401386164142">Na serveru za štampanje je pronađen sljedeći broj štampača: <ph name="NUM_PRINTERS" />.</translation> <translation id="8797459392481275117">Nikada ne prevodi ovu web lokaciju</translation> <translation id="8798099450830957504">Zadano</translation> <translation id="8798441408945964110">Naziv pružaoca usluge</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index 718279a..c2c5836 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">S'està carregant la previsualització</translation> <translation id="1032605640136438169">Revisa les condicions noves</translation> <translation id="103279545524624934">Allibera espai al disc per poder iniciar aplicacions d'Android.</translation> -<translation id="1033343386521881354">S'ha trobat 1 impressora al servidor d'impressió.</translation> <translation id="1033780634303702874">Accedeix als dispositius en sèrie</translation> <translation id="1034942643314881546">S'està activant ADB per crear la il·lustració d'aplicacions</translation> <translation id="1036348656032585052">Desactiva</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Premeu |<ph name="ACCELERATOR" />| per sortir de la pantalla completa</translation> <translation id="1038168778161626396">Només encriptar</translation> <translation id="1039337018183941703">Fitxer no vàlid o malmès</translation> -<translation id="1039850285407663109">El fitxer seleccionat és desconegut i podria ser perillós. Pots optar per escanejar-lo abans d'obrir-lo.</translation> <translation id="1041175011127912238">Aquesta pàgina no respon</translation> <translation id="1041263367839475438">Dispositius disponibles</translation> <translation id="1042174272890264476">L'ordinador també incorpora la biblioteca RLZ de <ph name="SHORT_PRODUCT_NAME" />. La biblioteca RLZ assigna una etiqueta no única i sense identificació personal per mesurar les cerques i l'ús de <ph name="SHORT_PRODUCT_NAME" /> derivats d'una campanya promocional concreta. De vegades, aquestes etiquetes apareixen a les consultes de la Cerca de Google a <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Confia en aquest certificat per identificar generadors de programari</translation> <translation id="1861262398884155592">Aquesta carpeta és buida</translation> <translation id="1863182668524159459">No s'ha trobat cap port en sèrie</translation> -<translation id="1863552924692672565">El fitxer <ph name="FILE_NAME" /> és desconegut. Escaneja'l per reduir el risc.</translation> <translation id="1864111464094315414">Inicia la sessió</translation> <translation id="1864400682872660285">Més fred</translation> <translation id="1864454756846565995">Dispositiu USB-C (port posterior)</translation> @@ -3141,7 +3138,7 @@ <translation id="5427459444770871191">Gira en el sentit de les &agulles del rellotge</translation> <translation id="542872847390508405">Esteu navegant com a convidat.</translation> <translation id="5428850089342283580"><ph name="ACCNAME_APP" /> (l'actualització està disponible)</translation> -<translation id="542948651837270806">Cal instal·lar una actualització del microprogramari del mòdul de plataforma de confiança. Consulta <ph name="TPM_FIRMWARE_UPDATE_LINK" />.</translation> +<translation id="542948651837270806">Cal instal·lar una actualització per al microprogramari del mòdul de plataforma de confiança. Consulta <ph name="TPM_FIRMWARE_UPDATE_LINK" />.</translation> <translation id="5430931332414098647">Compartició de xarxa instantània</translation> <translation id="5431318178759467895">Color</translation> <translation id="5431825016875453137">OpenVPN/L2TP</translation> @@ -4024,7 +4021,6 @@ <translation id="6678717876183468697">URL de la consulta</translation> <translation id="6680442031740878064">Disponible: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Velocitat</translation> -<translation id="6681301928961274620">No s'ha trobat cap impressora al servidor d'impressió.</translation> <translation id="6681668084120808868">Fes una foto</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" es desinstal·larà.</translation> <translation id="668599234725812620">Obre Google Play</translation> @@ -5554,7 +5550,6 @@ <translation id="8794025342371547160">IP restringida</translation> <translation id="879413103056696865">Mentre el punt d'accés Wi-Fi estigui activat, el telèfon <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Finestra nova</translation> -<translation id="8797086401386164142">S'han trobat <ph name="NUM_PRINTERS" /> impressores al servidor d'impressió.</translation> <translation id="8797459392481275117">No tradueixis mai aquest lloc</translation> <translation id="8798099450830957504">Predeterminat</translation> <translation id="8798441408945964110">Nom del proveïdor</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb index 18026e6..1b0a93ca 100644 --- a/chrome/app/resources/generated_resources_cs.xtb +++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Načítání náhledu</translation> <translation id="1032605640136438169">Prostudujte si nové smluvní podmínky</translation> <translation id="103279545524624934">Chcete-li spouštět aplikace pro Android, uvolněte místo na disku.</translation> -<translation id="1033343386521881354">Na tiskovém serveru byla nalezena jedna tiskárna.</translation> <translation id="1033780634303702874">Přistupovat k zařízením připojeným pomocí sériového portu</translation> <translation id="1034942643314881546">Aktivace ADB k vytvoření ilustrace aplikací</translation> <translation id="1036348656032585052">Vypnout</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Režim celé obrazovky ukončíte stisknutím klávesy |<ph name="ACCELERATOR" />|</translation> <translation id="1038168778161626396">Pouze šifrování</translation> <translation id="1039337018183941703">Neplatný nebo poškozený soubor</translation> -<translation id="1039850285407663109">Vybraný soubor není znám a může být nebezpečný. Před otevřením ho doporučujeme zkontrolovat.</translation> <translation id="1041175011127912238">Tato stránka nereaguje</translation> <translation id="1041263367839475438">Dostupná zařízení</translation> <translation id="1042174272890264476">Počítač je dodáván s integrovanou knihovnou RLZ prohlížeče <ph name="SHORT_PRODUCT_NAME" />. RLZ přiřadí značku, která slouží k vyhodnocení vyhledávání a využití prohlížečů <ph name="SHORT_PRODUCT_NAME" />, které pocházejí z konkrétní propagační kampaně. Tato značka není jedinečná a neumožňuje osobní identifikaci. Tyto značky jsou někdy v prohlížeči <ph name="PRODUCT_NAME" /> uváděny v dotazech ve Vyhledávání Google.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Důvěřovat tomuto certifikátu při ověřování identity výrobců softwaru</translation> <translation id="1861262398884155592">Tato složka je prázdná</translation> <translation id="1863182668524159459">Nebyly nalezeny žádné sériové porty</translation> -<translation id="1863552924692672565">Soubor <ph name="FILE_NAME" /> není znám. Chcete-li minimalizovat riziko, zkontrolujte soubor.</translation> <translation id="1864111464094315414">Přihlásit</translation> <translation id="1864400682872660285">Studenější</translation> <translation id="1864454756846565995">Zařízení USB Type-C (zadní port)</translation> @@ -4023,7 +4020,6 @@ <translation id="6678717876183468697">Adresa URL dotazu</translation> <translation id="6680442031740878064">Volné místo: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Ohodnotit</translation> -<translation id="6681301928961274620">Na tiskovém serveru nebyly nalezeny žádné tiskárny.</translation> <translation id="6681668084120808868">Vyfotit</translation> <translation id="6681964764822470072">Aplikace <ph name="APP_NAME" /> bude odinstalována.</translation> <translation id="668599234725812620">Otevřít Google Play</translation> @@ -5552,7 +5548,6 @@ <translation id="8794025342371547160">Omezená IP adresa</translation> <translation id="879413103056696865">Při zapnutém hotspotu váš telefon <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Nové okno</translation> -<translation id="8797086401386164142">Na tiskovém serveru byl nalezen tento počet tiskáren: <ph name="NUM_PRINTERS" />.</translation> <translation id="8797459392481275117">Tento web nikdy nepřekládat</translation> <translation id="8798099450830957504">Výchozí</translation> <translation id="8798441408945964110">Název poskytovatele</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb index 6a4fc64..30d106c 100644 --- a/chrome/app/resources/generated_resources_da.xtb +++ b/chrome/app/resources/generated_resources_da.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Indlæser eksempel</translation> <translation id="1032605640136438169">Læs de nye vilkår</translation> <translation id="103279545524624934">Frigør diskplads for at starte Android-apps.</translation> -<translation id="1033343386521881354">Der blev fundet 1 printer på printerserveren.</translation> <translation id="1033780634303702874">Få adgang til dine serieenheder</translation> <translation id="1034942643314881546">Illustration, der viser, at ADB aktiveres for at oprette apps</translation> <translation id="1036348656032585052">Deaktiver</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Tryk på |<ph name="ACCELERATOR" />| for at afslutte fuld skærm</translation> <translation id="1038168778161626396">Kun omsætning til kode</translation> <translation id="1039337018183941703">Ugyldig eller beskadiget fil</translation> -<translation id="1039850285407663109">Den valgte fil er ukendt og er muligvis skadelig. Du bør scanne filen, før du åbner den.</translation> <translation id="1041175011127912238">Denne side svarer ikke</translation> <translation id="1041263367839475438">Tilgængelige enheder</translation> <translation id="1042174272890264476">Computeren leveres også med <ph name="SHORT_PRODUCT_NAME" />s RLZ-samling indbygget. RLZ tildeler et ikke-unikt, ikke-personligt identificerbart tag til at måle søgninger og <ph name="SHORT_PRODUCT_NAME" />-brug, der er drevet af en bestemt kampagne. Disse etiketter vises nogle gange i Googles søgeforespørgsler i <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Hav tillid til dette certifikat i forbindelse med identifikation af softwareproducenter</translation> <translation id="1861262398884155592">Denne mappe er tom</translation> <translation id="1863182668524159459">Der blev ikke fundet nogen serieporte</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> er ukendt. Scan filen for at minimere risikoen.</translation> <translation id="1864111464094315414">Login</translation> <translation id="1864400682872660285">Kølig</translation> <translation id="1864454756846565995">USB-C-enhed (port bagpå)</translation> @@ -4026,7 +4023,6 @@ <translation id="6678717876183468697">Webadresse for søgeforespørgsler</translation> <translation id="6680442031740878064">Tilgængelig: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Talehastighed</translation> -<translation id="6681301928961274620">Der blev ikke fundet nogen printere på printerserveren.</translation> <translation id="6681668084120808868">Tag billede</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" afinstalleres.</translation> <translation id="668599234725812620">Åbn Google Play</translation> @@ -5556,7 +5552,6 @@ <translation id="8794025342371547160">Adgangsbeskyttet IP-adresse</translation> <translation id="879413103056696865">Mens hotspottet er aktivt, vil din <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Nyt vindue</translation> -<translation id="8797086401386164142">Der blev fundet <ph name="NUM_PRINTERS" /> printere på printerserveren.</translation> <translation id="8797459392481275117">Oversæt aldrig dette website</translation> <translation id="8798099450830957504">Standard</translation> <translation id="8798441408945964110">Navn på udbyder</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb index 37402b5..78918d9 100644 --- a/chrome/app/resources/generated_resources_de.xtb +++ b/chrome/app/resources/generated_resources_de.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Vorschau wird geladen...</translation> <translation id="1032605640136438169">Bitte lesen Sie sich die neue Fassung durch</translation> <translation id="103279545524624934">Geben Sie Speicherplatz frei, um Android-Apps starten zu können.</translation> -<translation id="1033343386521881354">Auf dem Druckerserver wurde 1 Drucker gefunden.</translation> <translation id="1033780634303702874">Auf Ihre seriellen Geräte zugreifen</translation> <translation id="1034942643314881546">Zulassen, dass ADB App-Illustrationen erstellt</translation> <translation id="1036348656032585052">Deaktivieren</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Zum Beenden des Vollbildmodus |<ph name="ACCELERATOR" />| drücken</translation> <translation id="1038168778161626396">Nur verschlüsseln</translation> <translation id="1039337018183941703">Ungültige oder beschädigte Datei</translation> -<translation id="1039850285407663109">Die ausgewählte Datei ist unbekannt und könnte schädlich sein. Möglicherweise sollten Sie sie vor dem Öffnen scannen.</translation> <translation id="1041175011127912238">Diese Seite reagiert nicht</translation> <translation id="1041263367839475438">Verfügbare Geräte</translation> <translation id="1042174272890264476">Auch die RLZ-Bibliothek von <ph name="SHORT_PRODUCT_NAME" /> ist auf Ihrem Computer vorinstalliert. RLZ sorgt für die Zuweisung von Tags, anhand derer gemessen wird, wie sich einzelne Werbekampagnen auf die Suchanfragen und die Nutzung von <ph name="SHORT_PRODUCT_NAME" /> auswirken. Die Tags sind weder eindeutig, noch personenbezogen und kommen manchmal in Google-Suchanfragen in <ph name="PRODUCT_NAME" /> vor.</translation> @@ -636,7 +634,6 @@ <translation id="1858585891038687145">Diesem Zertifikat zur Identifizierung von Softwareherstellern vertrauen</translation> <translation id="1861262398884155592">Dieser Ordner ist leer</translation> <translation id="1863182668524159459">Keine seriellen Schnittstellen gefunden</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> ist unbekannt. Scannen Sie die Datei, um das Risiko zu minimieren.</translation> <translation id="1864111464094315414">Anmeldung</translation> <translation id="1864400682872660285">Kälter</translation> <translation id="1864454756846565995">USB-C-Gerät (Port hinten)</translation> @@ -743,7 +740,7 @@ <translation id="202352106777823113">Der Download hat zu lange gedauert und wurde vom Netzwerk gestoppt.</translation> <translation id="2025632980034333559"><ph name="APP_NAME" /> ist abgestürzt. Klicken Sie auf dieses Fenster, um die Erweiterung erneut zu laden.</translation> <translation id="2025891858974379949">Unsichere Inhalte</translation> -<translation id="202918510990975568">Geben Sie Ihr Passwort ein, um die Sicherheit und die Anmeldung zu konfigurieren</translation> +<translation id="202918510990975568">Geben Sie Ihr Passwort ein, um die Sicherheits- und Anmeldungseinstellungen zu konfigurieren</translation> <translation id="2034346955588403444">Anderes WLAN hinzufügen</translation> <translation id="203574396658008164">Notizen über Sperrbildschirm aktivieren</translation> <translation id="2037445849770872822">Für dieses Google-Konto wurde die Elternaufsicht eingerichtet. Wenn Sie zusätzliche Jugendschutzeinstellungen konfigurieren möchten, wählen Sie "Weiter" aus. @@ -1369,7 +1366,7 @@ <translation id="2865919525181940183">Screenshot der Programme, die sich momentan auf dem Bildschirm befinden</translation> <translation id="286674810810214575">Stromquellen werden überprüft…</translation> <translation id="2867768963760577682">In angepinntem Tab öffnen</translation> -<translation id="2868184003987917410">Websites nicht erlauben, auf Ihre Virtual-Reality-Geräte und -Daten zuzugreifen</translation> +<translation id="2868184003987917410">Websites nicht erlauben, auf meine Virtual-Reality-Geräte und ‑Daten zuzugreifen</translation> <translation id="2868746137289129307">Diese Erweiterung ist veraltet und wurde aufgrund der Unternehmensrichtlinie deaktiviert. Die Erweiterung kann automatisch aktiviert werden, wenn eine neuere Version verfügbar ist.</translation> <translation id="2870560284913253234">Website</translation> <translation id="2870909136778269686">Wird aktualisiert…</translation> @@ -1697,7 +1694,7 @@ <translation id="3348038390189153836">Externes Gerät erkannt</translation> <translation id="3349933790966648062">Speicherbedarf</translation> <translation id="3350117557200012647">In den Pairing-Modus wechseln</translation> -<translation id="3350244554415289209">Nachfragen, wenn eine Website auf Ihre Kameraposition zugreifen oder Ihr Zimmer vermessen möchte (empfohlen)</translation> +<translation id="3350244554415289209">Nachfragen, wenn eine Website auf meine Kameraposition zugreifen oder mein Zimmer vermessen möchte (empfohlen)</translation> <translation id="3355936511340229503">Verbindungsfehler</translation> <translation id="3356580349448036450">Fertig</translation> <translation id="3359256513598016054">Beschränkungen für Zertifikatrichtlinien</translation> @@ -1754,7 +1751,7 @@ <translation id="3439153939049640737"><ph name="HOST" /> immer Zugriff auf Ihr Mikrofon gestatten</translation> <translation id="3439970425423980614">PDF-Vorschau wird geöffnet...</translation> <translation id="3440663250074896476">Weitere Aktionen für <ph name="BOOKMARK_NAME" /></translation> -<translation id="3440761377721825626">Nachfragen, wenn eine Website ein Plug-in für den Zugriff auf Ihren Computer verwenden möchte</translation> +<translation id="3440761377721825626">Nachfragen, wenn eine Website ein Plug-in für den Zugriff auf meinen Computer verwenden möchte</translation> <translation id="3441653493275994384">Bildschirm</translation> <translation id="3445925074670675829">USB-C-Gerät</translation> <translation id="344630545793878684">Ihre Daten auf verschiedenen Websites lesen</translation> @@ -1814,7 +1811,7 @@ <translation id="3515983984924808886">Tippen Sie noch einmal auf Ihren Sicherheitsschlüssel, um das Zurücksetzen zu bestätigen. Damit werden alle auf dem Sicherheitsschlüssel gespeicherten Informationen und die zugehörige PIN gelöscht.</translation> <translation id="3518985090088779359">Akzeptieren & weiter</translation> <translation id="351952459507671940">Neuer Gruppe hinzufügen</translation> -<translation id="3523642406908660543">Nachfragen, wenn eine Website ein Plug-in für den Zugriff auf Ihren Computer verwenden möchte (empfohlen)</translation> +<translation id="3523642406908660543">Nachfragen, wenn eine Website ein Plug-in für den Zugriff auf meinen Computer verwenden möchte (empfohlen)</translation> <translation id="3524965460886318643">Aktivitäten exportieren</translation> <translation id="3526034519184079374">Daten der Website können nicht gelesen oder geändert werden</translation> <translation id="3527085408025491307">Ordner</translation> @@ -1935,7 +1932,7 @@ <translation id="3677657024345889897">Am leisesten</translation> <translation id="3677911431265050325">Mobile Version anfordern</translation> <translation id="3678156199662914018">Erweiterung: <ph name="EXTENSION_NAME" /></translation> -<translation id="3678613690490567106">Für eine Personalisierung auf allen Geräten synchronisieren</translation> +<translation id="3678613690490567106">Synchronisierung aktivieren für eine personalisierte Nutzung auf allen Geräten</translation> <translation id="3681311097828166361">Vielen Dank für Ihr Feedback. Sie sind jetzt offline und Ihr Bericht wird später versendet.</translation> <translation id="3682824389861648626">Grenzwert für Mausbewegungen</translation> <translation id="3683524264665795342">Anfrage zur Bildschirmfreigabe durch <ph name="APP_NAME" /></translation> @@ -2512,11 +2509,11 @@ <translation id="4501530680793980440">Entfernen bestätigen</translation> <translation id="4502423230170890588">Von diesem Gerät entfernen</translation> <translation id="4504940961672722399">Klicken Sie auf dieses Symbol oder drücken Sie <ph name="EXTENSION_SHORTCUT" />, um diese Erweiterung zu verwenden.</translation> -<translation id="4507164039066603071">Websites nicht erlauben, auf Ihre Kameraposition zuzugreifen oder Ihr Zimmer zu vermessen</translation> +<translation id="4507164039066603071">Websites nicht erlauben, auf meine Kameraposition zuzugreifen oder mein Zimmer zu vermessen</translation> <translation id="4508051413094283164">Alle in Inkognitofenster öffnen</translation> <translation id="4508265954913339219">Aktivierung fehlgeschlagen</translation> <translation id="4508765956121923607">Q&uelle anzeigen</translation> -<translation id="4510614391273086606">Linux-Dateien und -Apps werden auf den Stand des letzten Back-ups zurückgesetzt.</translation> +<translation id="4510614391273086606">Linux-Dateien und ‑Apps werden auf den Stand des letzten Back-ups zurückgesetzt.</translation> <translation id="451407183922382411">Powered by <ph name="COMPANY_NAME" /></translation> <translation id="4514610446763173167">Video wiedergeben oder pausieren</translation> <translation id="451515744433878153">Entfernen</translation> @@ -3085,7 +3082,7 @@ <translation id="5341793073192892252">Die folgenden Cookies wurden blockiert (Cookies von Drittanbietern werden ausnahmslos blockiert)</translation> <translation id="5341980496415249280">Bitte warten, Paket wird erstellt...</translation> <translation id="5342091991439452114">PIN muss mindestens <ph name="MINIMUM" /> Ziffern umfassen</translation> -<translation id="5344036115151554031">Linux wiederherstellen</translation> +<translation id="5344036115151554031">Linux wird wiederhergestellt</translation> <translation id="5352033265844765294">Zeitstempeldienst</translation> <translation id="5353252989841766347">Passwörter aus Chrome exportieren</translation> <translation id="5355099869024327351">Zulassen, dass Assistant Ihnen Benachrichtigungen anzeigt</translation> @@ -4021,7 +4018,6 @@ <translation id="6678717876183468697">Abfrage-URL</translation> <translation id="6680442031740878064">Verfügbar: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Geschwindigkeit</translation> -<translation id="6681301928961274620">Auf dem Druckerserver wurden keine Drucker gefunden.</translation> <translation id="6681668084120808868">Foto machen</translation> <translation id="6681964764822470072"><ph name="APP_NAME" /> wird deinstalliert.</translation> <translation id="668599234725812620">Google Play öffnen</translation> @@ -4271,7 +4267,7 @@ <translation id="703001695939087067">Sie befinden sich jetzt im Modus "Fensterübersicht". Drücken Sie zum Navigieren auf den Tab.</translation> <translation id="7031608529463141342"><ph name="WINDOW_TITLE" />: serielle Schnittstelle verbunden</translation> <translation id="7031962166228839643">TPM wird vorbereitet, bitte warten (dies kann einige Minuten dauern)...</translation> -<translation id="7034615910652881882">Nachfragen, wenn eine Website auf Virtual-Reality-Geräte und -Daten zugreifen möchte</translation> +<translation id="7034615910652881882">Nachfragen, wenn eine Website auf meine Virtual-Reality-Geräte und ‑Daten zugreifen möchte</translation> <translation id="7037509989619051237">Text zum Anhören</translation> <translation id="7039326228527141150">Auf USB-Geräte von <ph name="VENDOR_NAME" /> zugreifen</translation> <translation id="7039912931802252762">Microsoft-Smartcard-Anmeldung</translation> @@ -4569,7 +4565,7 @@ <translation id="7443806024147773267">Überall dort, wo Sie mit Ihrem Google-Konto angemeldet sind, können Sie auf Ihre Passwörter zugreifen</translation> <translation id="7444983668544353857"><ph name="NETWORKDEVICE" /> deaktivieren</translation> <translation id="7448430327655618736">Apps automatisch installieren</translation> -<translation id="7448625729116931228">Nachfragen, wenn eine Website auf Virtual-Reality-Geräte und -Daten zugreifen möchte (empfohlen)</translation> +<translation id="7448625729116931228">Nachfragen, wenn eine Website auf meine Virtual-Reality-Geräte und ‑Daten zugreifen möchte (empfohlen)</translation> <translation id="7450761244949417357">Wird jetzt in <ph name="ALTERNATIVE_BROWSER_NAME" /> geöffnet</translation> <translation id="7453008956351770337">Durch die Auswahl dieses Druckers berechtigen Sie die folgende Erweiterung, auf Ihren Drucker zuzugreifen:</translation> <translation id="7454548535253569100">Portal: <ph name="SUBFRAME_SITE" /></translation> @@ -4707,7 +4703,7 @@ <translation id="7652808307838961528">Person bearbeiten: <ph name="PROFILE_NAME" /></translation> <translation id="765293928828334535">Von dieser Website können keine Apps, Erweiterungen und Nutzerskripte hinzugefügt werden</translation> <translation id="7652954539215530680">PIN erstellen</translation> -<translation id="7653295403398566475">Nachfragen, wenn eine Website auf Ihre Kameraposition zugreifen oder Ihr Zimmer vermessen möchte</translation> +<translation id="7653295403398566475">Nachfragen, wenn eine Website auf meine Kameraposition zugreifen oder mein Zimmer vermessen möchte</translation> <translation id="7654941827281939388">Dieses Konto wird bereits auf dem Computer verwendet.</translation> <translation id="7658239707568436148">Abbrechen</translation> <translation id="7659584679870740384">Sie sind nicht zur Verwendung dieses Geräts berechtigt. Bitten Sie den Administrator um eine Anmeldeberechtigung.</translation> @@ -5550,7 +5546,6 @@ <translation id="8794025342371547160">IP eingeschränkt</translation> <translation id="879413103056696865">Während der Hotspot aktiviert ist, wird Ihr <ph name="PHONE_NAME" /> Folgendes tun:</translation> <translation id="8795916974678578410">Neues Fenster</translation> -<translation id="8797086401386164142">Auf dem Druckerserver wurden <ph name="NUM_PRINTERS" /> Drucker gefunden.</translation> <translation id="8797459392481275117">Diese Website nie übersetzen</translation> <translation id="8798099450830957504">Standardeinstellung</translation> <translation id="8798441408945964110">Name des Anbieters</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index 08b4829..eab51ea7 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Φόρτωση προεπισκόπησης</translation> <translation id="1032605640136438169">Ελέγξτε τους νέους όρους.</translation> <translation id="103279545524624934">Ελευθερώστε χώρο στον δίσκο, για την εκκίνηση εφαρμογών Android.</translation> -<translation id="1033343386521881354">Βρέθηκε ένας εκτυπωτής από τον διακομιστή εκτύπωσης.</translation> <translation id="1033780634303702874">Πρόσβαση στις σειριακές συσκευές</translation> <translation id="1034942643314881546">Ενεργοποίηση του adb για δημιουργία εικόνων εφαρμογών</translation> <translation id="1036348656032585052">Απενεργοποίηση</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Πατήστε το |<ph name="ACCELERATOR" />| για να εξέλθετε από την πλήρη οθόνη</translation> <translation id="1038168778161626396">Μόνο κρυπτογράφηση</translation> <translation id="1039337018183941703">Μη έγκυρο ή κατεστραμμένο αρχείο</translation> -<translation id="1039850285407663109">Το επιλεγμένο αρχείο είναι άγνωστο και μπορεί να είναι επικίνδυνο. Μπορείτε να εκτελέσετε σάρωση του αρχείου πριν από το άνοιγμά του.</translation> <translation id="1041175011127912238">Αυτή η σελίδα δεν αποκρίνεται.</translation> <translation id="1041263367839475438">Διαθέσιμες συσκευές</translation> <translation id="1042174272890264476">Ο υπολογιστής σας κυκλοφορεί και με ενσωματωμένη τη βιβλιοθήκη RLZ του <ph name="SHORT_PRODUCT_NAME" />. Το RLZ εκχωρεί μια μη μοναδική ετικέτα μη προσωπικής ταυτοποίησης για τη μέτρηση των αναζητήσεων και της χρήσης του <ph name="SHORT_PRODUCT_NAME" /> που προκύπτει από μια συγκεκριμένη καμπάνια προώθησης. Αυτές οι ετικέτες εμφανίζονται μερικές φορές σε ερωτήματα στην Αναζήτηση Google στο <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Να θεωρείται αξιόπιστο αυτό το πιστοποιητικό για τον προσδιορισμό κατασκευαστών λογισμικού</translation> <translation id="1861262398884155592">Αυτός ο φάκελος είναι άδειος</translation> <translation id="1863182668524159459">Δεν βρέθηκαν σειριακές θύρες</translation> -<translation id="1863552924692672565">Το αρχείο <ph name="FILE_NAME" /> είναι άγνωστο. Σάρωση του αρχείου για ελαχιστοποίηση του κινδύνου.</translation> <translation id="1864111464094315414">Σύνδεση</translation> <translation id="1864400682872660285">Ψυχρότερο</translation> <translation id="1864454756846565995">Συσκευή USB-C (πίσω θύρα)</translation> @@ -4026,7 +4023,6 @@ <translation id="6678717876183468697">URL ερωτήματος</translation> <translation id="6680442031740878064">Διαθέσιμος χώρος: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Βαθμολόγηση</translation> -<translation id="6681301928961274620">Δεν βρέθηκαν εκτυπωτές από τον διακομιστή εκτύπωσης.</translation> <translation id="6681668084120808868">Λήψη φωτογραφίας</translation> <translation id="6681964764822470072">Η εγκατάσταση της εφαρμογής "<ph name="APP_NAME" />" θα καταργηθεί.</translation> <translation id="668599234725812620">Άνοιγμα Google Play</translation> @@ -5554,7 +5550,6 @@ <translation id="8794025342371547160">Περιορισμένο IP</translation> <translation id="879413103056696865">Ενώ το σημείο πρόσβασης Wi-Fi είναι ενεργό, το τηλέφωνο <ph name="PHONE_NAME" /> θα:</translation> <translation id="8795916974678578410">Νέο Παράθυρο</translation> -<translation id="8797086401386164142">Βρέθηκαν <ph name="NUM_PRINTERS" /> εκτυπωτές από τον διακομιστή εκτύπωσης.</translation> <translation id="8797459392481275117">Να μη γίνεται ποτέ μετάφραση αυτού του ιστοτόπου</translation> <translation id="8798099450830957504">Προεπιλογή</translation> <translation id="8798441408945964110">Όνομα παρόχου</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb index b564c88..13030139 100644 --- a/chrome/app/resources/generated_resources_en-GB.xtb +++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Loading preview</translation> <translation id="1032605640136438169">Please review the new terms</translation> <translation id="103279545524624934">Free up disk space to launch Android apps.</translation> -<translation id="1033343386521881354">Found one printer from the print server.</translation> <translation id="1033780634303702874">Access your serial devices</translation> <translation id="1034942643314881546">Enabling ADB to create apps illustration</translation> <translation id="1036348656032585052">Turn off</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Press |<ph name="ACCELERATOR" />| to exit full screen</translation> <translation id="1038168778161626396">Encipher Only</translation> <translation id="1039337018183941703">Invalid or corrupt file</translation> -<translation id="1039850285407663109">The selected file is unknown and may be dangerous. Consider scanning before opening this file.</translation> <translation id="1041175011127912238">This page isn't responding</translation> <translation id="1041263367839475438">Available devices</translation> <translation id="1042174272890264476">Your computer also comes with <ph name="SHORT_PRODUCT_NAME" />'s RLZ library built in. RLZ assigns a non-unique, non-personally identifiable tag to measure the searches and <ph name="SHORT_PRODUCT_NAME" /> usage driven by a particular promotional campaign. These labels sometimes appear in Google Search queries in <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Trust this certificate for identifying software makers</translation> <translation id="1861262398884155592">This folder is empty</translation> <translation id="1863182668524159459">No serial ports found</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> is unknown. Scan file to minimise risk.</translation> <translation id="1864111464094315414">Login</translation> <translation id="1864400682872660285">Cooler</translation> <translation id="1864454756846565995">USB-C device (rear port)</translation> @@ -4025,7 +4022,6 @@ <translation id="6678717876183468697">Query URL</translation> <translation id="6680442031740878064">Available: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Rate</translation> -<translation id="6681301928961274620">Did not find any printers from the print server.</translation> <translation id="6681668084120808868">Take photo</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" will be uninstalled.</translation> <translation id="668599234725812620">Open Google Play</translation> @@ -5555,7 +5551,6 @@ <translation id="8794025342371547160">Restricted IP</translation> <translation id="879413103056696865">While the hotspot is on, your <ph name="PHONE_NAME" /> will:</translation> <translation id="8795916974678578410">New Window</translation> -<translation id="8797086401386164142">Found <ph name="NUM_PRINTERS" /> printers from the print server.</translation> <translation id="8797459392481275117">Never Translate This Site</translation> <translation id="8798099450830957504">Default</translation> <translation id="8798441408945964110">Provider name</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb index 0f07db6..3f341aa7 100644 --- a/chrome/app/resources/generated_resources_es-419.xtb +++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Cargando vista previa</translation> <translation id="1032605640136438169">Revisa las Condiciones nuevas</translation> <translation id="103279545524624934">Libera espacio en el disco para ejecutar apps de Android.</translation> -<translation id="1033343386521881354">Se encontró 1 impresora en el servidor de impresión.</translation> <translation id="1033780634303702874">Acceder a tus dispositivos en serie</translation> <translation id="1034942643314881546">Habilitando ADB para crear la ilustración de apps</translation> <translation id="1036348656032585052">Desactivar</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Presiona |<ph name="ACCELERATOR" />| para salir de la pantalla completa</translation> <translation id="1038168778161626396">Sólo cifrar</translation> <translation id="1039337018183941703">Archivo no válido o dañado</translation> -<translation id="1039850285407663109">El archivo seleccionado es desconocido y puede ser peligroso. Se recomienda analizarlo antes de abrirlo.</translation> <translation id="1041175011127912238">Esta página no responde</translation> <translation id="1041263367839475438">Dispositivos disponibles</translation> <translation id="1042174272890264476">Tu computadora también tiene la biblioteca RLZ de <ph name="SHORT_PRODUCT_NAME" /> incorporada. RLZ asigna una etiqueta identificable, no exclusiva y no personal para medir las búsquedas y el uso de <ph name="SHORT_PRODUCT_NAME" /> impulsados por una determinada campaña de promoción. Estas etiquetas aparecen a veces en las consultas de la Búsqueda de Google en <ph name="PRODUCT_NAME" />.</translation> @@ -636,7 +634,6 @@ <translation id="1858585891038687145">Confiar en este certificado para identificar fabricantes de software</translation> <translation id="1861262398884155592">Esta carpeta está vacía</translation> <translation id="1863182668524159459">No se encontraron puertos en serie</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> es un archivo desconocido. Analízalo para reducir el riesgo.</translation> <translation id="1864111464094315414">Acceder</translation> <translation id="1864400682872660285">Frío</translation> <translation id="1864454756846565995">Dispositivo USB-C (puerto trasero)</translation> @@ -4022,7 +4019,6 @@ <translation id="6678717876183468697">URL de consulta</translation> <translation id="6680442031740878064">Disponible: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Velocidad</translation> -<translation id="6681301928961274620">No se encontraron impresoras en el servidor de impresión.</translation> <translation id="6681668084120808868">Tomar foto</translation> <translation id="6681964764822470072">Se desinstalará "<ph name="APP_NAME" />".</translation> <translation id="668599234725812620">Abrir Google Play</translation> @@ -5552,7 +5548,6 @@ <translation id="8794025342371547160">IP restringido</translation> <translation id="879413103056696865">Mientras el hotspot esté activado, tu número <ph name="PHONE_NAME" /> podrá:</translation> <translation id="8795916974678578410">Nueva ventana</translation> -<translation id="8797086401386164142">Se encontraron <ph name="NUM_PRINTERS" /> impresoras en el servidor de impresión.</translation> <translation id="8797459392481275117">Nunca traducir este sitio</translation> <translation id="8798099450830957504">Predeterminado</translation> <translation id="8798441408945964110">Nombre del proveedor</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index d9fa096d..02d6151c 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Cargando vista previa</translation> <translation id="1032605640136438169">Revisa los nuevos términos</translation> <translation id="103279545524624934">Libera espacio del disco para iniciar aplicaciones de Android.</translation> -<translation id="1033343386521881354">Se ha encontrado 1 impresora en el servidor de impresión.</translation> <translation id="1033780634303702874">Acceder a tus dispositivos en serie</translation> <translation id="1034942643314881546">Ilustración de habilitar ADB para crear aplicaciones</translation> <translation id="1036348656032585052">Desactivar</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Pulsa |<ph name="ACCELERATOR" />| para salir del modo de pantalla completa</translation> <translation id="1038168778161626396">Solo cifrar</translation> <translation id="1039337018183941703">El archivo no es válido o está dañado</translation> -<translation id="1039850285407663109">El archivo seleccionado es desconocido y podría ser peligroso. Te recomendamos que lo analices antes de abrirlo.</translation> <translation id="1041175011127912238">La página no responde</translation> <translation id="1041263367839475438">Dispositivos disponibles</translation> <translation id="1042174272890264476">El ordenador también incluye la biblioteca RLZ de <ph name="SHORT_PRODUCT_NAME" />. RLZ asigna una etiqueta identificable, no exclusiva y no personal para medir las búsquedas y el uso de <ph name="SHORT_PRODUCT_NAME" /> derivados de una determinada campaña promocional. Estas etiquetas aparecen a veces en las consultas de la Búsqueda de Google realizadas en <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Confiar en este certificado para identificar a los fabricantes de software</translation> <translation id="1861262398884155592">Esta carpeta está vacía</translation> <translation id="1863182668524159459">No se ha encontrado ningún puerto serie</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> es un archivo desconocido. Analízalo para reducir el riesgo.</translation> <translation id="1864111464094315414">Acceder</translation> <translation id="1864400682872660285">Más frío</translation> <translation id="1864454756846565995">Dispositivo USB-C (puerto trasero)</translation> @@ -4024,7 +4021,6 @@ <translation id="6678717876183468697">URL de la consulta</translation> <translation id="6680442031740878064">Disponible: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Velocidad</translation> -<translation id="6681301928961274620">No se ha encontrado ninguna impresora en el servidor de impresión.</translation> <translation id="6681668084120808868">Sacar foto</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" se desinstalará.</translation> <translation id="668599234725812620">Abrir Google Play</translation> @@ -5554,7 +5550,6 @@ <translation id="8794025342371547160">IP restringida</translation> <translation id="879413103056696865">Mientras el punto de acceso esté activo, tu <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Nueva ventana</translation> -<translation id="8797086401386164142">Se han encontrado <ph name="NUM_PRINTERS" /> impresoras en el servidor de impresión.</translation> <translation id="8797459392481275117">No traducir nunca este sitio web</translation> <translation id="8798099450830957504">Predeterminado</translation> <translation id="8798441408945964110">Nombre del proveedor</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb index 6fd1873..36f342de 100644 --- a/chrome/app/resources/generated_resources_et.xtb +++ b/chrome/app/resources/generated_resources_et.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Eelvaate laadimine</translation> <translation id="1032605640136438169">Vaadake uued tingimused üle</translation> <translation id="103279545524624934">Vabastage Androidi rakenduste käivitamiseks kettaruumi.</translation> -<translation id="1033343386521881354">Prindiserverist leiti 1 printer.</translation> <translation id="1033780634303702874">Juurdepääs jadaseadmetele</translation> <translation id="1034942643314881546">Rakenduste illustratsiooni loomiseks lubatakse ADB</translation> <translation id="1036348656032585052">Lülita välja</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Täisekraanilt väljumiseks vajutage klahvi |<ph name="ACCELERATOR" />|</translation> <translation id="1038168778161626396">Ainult šifreerimine</translation> <translation id="1039337018183941703">Sobimatu või rikutud fail</translation> -<translation id="1039850285407663109">Valitud fail on tundmatu ja võib olla ohtlik. Enne selle faili avamist kaaluge skannimist.</translation> <translation id="1041175011127912238">Leht ei reageeri</translation> <translation id="1041263367839475438">Saadaolevad seadmed</translation> <translation id="1042174272890264476">Teie arvutil on ka toote <ph name="SHORT_PRODUCT_NAME" /> sisseehitatud RLZ-teek. RLZ määrab korduva ja isikut mittetuvastava ID-tunnuse, et mõõta konkreetse reklaamikampaania tekitatud otsinguid ja toote <ph name="SHORT_PRODUCT_NAME" /> kasutust. Need sildid kuvatakse vahel ka tootes <ph name="PRODUCT_NAME" /> Google'i otsingupäringutes.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Usalda seda sertifikaati tarkvaraloojate tuvastamiseks</translation> <translation id="1861262398884155592">See kaust on tühi</translation> <translation id="1863182668524159459">Jadaporte ei leitud</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> on teadmata. Riski minimeerimiseks skannige faili.</translation> <translation id="1864111464094315414">Sisselogimine</translation> <translation id="1864400682872660285">Külmem</translation> <translation id="1864454756846565995">C-tüüpi USB-seade (tagumine port)</translation> @@ -4025,7 +4022,6 @@ <translation id="6678717876183468697">Päringu URL</translation> <translation id="6680442031740878064">Saadaval: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Kiirus</translation> -<translation id="6681301928961274620">Prindiserverist ei leitud ühtegi printerit.</translation> <translation id="6681668084120808868">Tee foto</translation> <translation id="6681964764822470072">Rakendus „<ph name="APP_NAME" />” desinstallitakse.</translation> <translation id="668599234725812620">Ava Google Play</translation> @@ -5555,7 +5551,6 @@ <translation id="8794025342371547160">Piirangutega IP</translation> <translation id="879413103056696865">Kui leviala on sisse lülitatud, teeb teie telefon <ph name="PHONE_NAME" /> järgmist.</translation> <translation id="8795916974678578410">Uus aken</translation> -<translation id="8797086401386164142">Prindiserverist leiti <ph name="NUM_PRINTERS" /> printerit.</translation> <translation id="8797459392481275117">Ära kunagi seda saiti tõlgi</translation> <translation id="8798099450830957504">Vaikimisi</translation> <translation id="8798441408945964110">Teenusepakkuja nimi</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb index 06f71b63..08f53055 100644 --- a/chrome/app/resources/generated_resources_eu.xtb +++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Aurrebista kargatzen</translation> <translation id="1032605640136438169">Irakurri baldintza berriak</translation> <translation id="103279545524624934">Egin tokia diskoan Android-erako aplikazioak abiarazteko.</translation> -<translation id="1033343386521881354">Inprimagailu bat aurkitu da inprimatze-zerbitzarian.</translation> <translation id="1033780634303702874">Atzitu serieko gailuak</translation> <translation id="1034942643314881546">ADB gaitzen aplikazioen ilustrazioak egiteko</translation> <translation id="1036348656032585052">Desaktibatu</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Pantaila osoko ikuspegitik irteteko, sakatu |<ph name="ACCELERATOR" />|</translation> <translation id="1038168778161626396">Zifratu soilik</translation> <translation id="1039337018183941703">Fitxategiak ez du balio edo hondatuta dago</translation> -<translation id="1039850285407663109">Hautatutako fitxategia ezezaguna da eta baliteke arriskutsua izatea. Ireki aurretik, hura analizatzea gomendatzen dugu.</translation> <translation id="1041175011127912238">Orriak ez du erantzuten</translation> <translation id="1041263367839475438">Gailu erabilgarriak</translation> <translation id="1042174272890264476">Ordenagailuak <ph name="SHORT_PRODUCT_NAME" /> produktuaren RLZ liburutegia ere du integratuta. RLZ liburutegiak esklusiboa ez den eta pertsonalki identifikatu ezin zaitzakeen etiketa bat esleitzen du promozio-kanpaina jakin batek sortutako bilaketak eta <ph name="SHORT_PRODUCT_NAME" /> produktuaren erabilera neurtzeko. Etiketa horiek <ph name="PRODUCT_NAME" /> produktuko Google Bilaketa kontsultetan agertzen dira batzuetan.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Jo fidagarritzat software-egileak identifikatzeko ziurtagiri hau</translation> <translation id="1861262398884155592">Hutsik dago karpeta</translation> <translation id="1863182668524159459">Ez da aurkitu serie-atakarik</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> ezezaguna da. Arriskua murrizteko, analizatu fitxategia.</translation> <translation id="1864111464094315414">Hasi saioa</translation> <translation id="1864400682872660285">Hotzagoa</translation> <translation id="1864454756846565995">USB-C gailua (atzealdeko ataka)</translation> @@ -4025,7 +4022,6 @@ <translation id="6678717876183468697">Kontsultaren URLa</translation> <translation id="6680442031740878064">Libre: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Abiadura</translation> -<translation id="6681301928961274620">Ez da aurkitu inprimagailurik inprimatze-zerbitzarian.</translation> <translation id="6681668084120808868">Atera argazkia</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" desinstalatuko da.</translation> <translation id="668599234725812620">Ireki Google Play</translation> @@ -5554,7 +5550,6 @@ <translation id="8794025342371547160">IP murriztua</translation> <translation id="879413103056696865">Sare publikoa aktibatuta dagoen bitartean, <ph name="PHONE_NAME" /> telefonoak hau egingo du:</translation> <translation id="8795916974678578410">Leiho berria</translation> -<translation id="8797086401386164142"><ph name="NUM_PRINTERS" /> inprimagailu aurkitu dira inprimatze-zerbitzarian.</translation> <translation id="8797459392481275117">Ez itzuli inoiz webgune hau</translation> <translation id="8798099450830957504">Lehenetsia</translation> <translation id="8798441408945964110">Hornitzailearen izena</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb index e691b1c..c15df0f7 100644 --- a/chrome/app/resources/generated_resources_fa.xtb +++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">بارگیری پیشنمایش</translation> <translation id="1032605640136438169">لطفاً «شرایط» جدید را مرور کنید</translation> <translation id="103279545524624934">برای راهاندازی برنامههای Android فضای دیسک را خالی کنید.</translation> -<translation id="1033343386521881354">۱ چاپگر از این سرور چاپ پیدا شد.</translation> <translation id="1033780634303702874">دسترسی به دستگاههای سریال خودتان</translation> <translation id="1034942643314881546">فعال کردن adb برای ایجاد مصورسازی برنامهها</translation> <translation id="1036348656032585052">خاموش کردن</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">برای خروج از حالت تمام صفحه |<ph name="ACCELERATOR" />| را فشار دهید</translation> <translation id="1038168778161626396">فقط به رمز درآورد</translation> <translation id="1039337018183941703">فایل نامعتبر یا خراب است</translation> -<translation id="1039850285407663109">فایل انتخابشده ناشناس است و ممکن است خطرناک باشد. پیش از باز کردن فایل، آن را اسکن کنید.</translation> <translation id="1041175011127912238">این صفحه پاسخ نمیدهد</translation> <translation id="1041263367839475438">دستگاههای در دسترس</translation> <translation id="1042174272890264476">همچنین کتابخانه RLZ <ph name="SHORT_PRODUCT_NAME" /> از قبل بر روی رایانه شما نصب شده است. RLZ یک برچسب غیرمنحصر بفرد و غیرقابلشناسایی برای سنجش جستجوها و استفاده از <ph name="SHORT_PRODUCT_NAME" /> اختصاص میدهد که توسط یک کمپین تبلیغاتی خاص ارائه میشود. در بعضی مواقع در <ph name="PRODUCT_NAME" /> این برچسبها در عباراتی که در جستجوی Goole جستجو میشوند نمایان میشوند.</translation> @@ -636,7 +634,6 @@ <translation id="1858585891038687145">برای شناسایی سازندگان نرمافزار، به این گواهی اطمینان شود</translation> <translation id="1861262398884155592">این پوشه خالی است</translation> <translation id="1863182668524159459">درگاه سریالی یافت نشد</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> ناشناس است. برای کاهش خطرپذیری، فایل را اسکن کنید.</translation> <translation id="1864111464094315414">ورود به سیستم</translation> <translation id="1864400682872660285">سردتر</translation> <translation id="1864454756846565995">دستگاه USB-C (درگاه عقب)</translation> @@ -4022,7 +4019,6 @@ <translation id="6678717876183468697">نشانی وب عبارت</translation> <translation id="6680442031740878064">در دسترس: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">رتبهبندی</translation> -<translation id="6681301928961274620">هیچ چاپگری از این سرور چاپ پیدا نشد.</translation> <translation id="6681668084120808868">عکسبرداری</translation> <translation id="6681964764822470072">«<ph name="APP_NAME" />» حذف نصب میشود.</translation> <translation id="668599234725812620">باز کردن Google Play</translation> @@ -5552,7 +5548,6 @@ <translation id="8794025342371547160">IP محدود</translation> <translation id="879413103056696865">وقتی نقطه اتصال روشن است، <ph name="PHONE_NAME" /> شما:</translation> <translation id="8795916974678578410">پنجرهٔ جدید</translation> -<translation id="8797086401386164142"><ph name="NUM_PRINTERS" /> چاپگر از سرور چاپ پیدا شد.</translation> <translation id="8797459392481275117">این سایت هرگز ترجمه نشود</translation> <translation id="8798099450830957504">پیشفرض</translation> <translation id="8798441408945964110">نام ارائهدهنده</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb index 9dfda26..767516b 100644 --- a/chrome/app/resources/generated_resources_fi.xtb +++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Ladataan esikatselua</translation> <translation id="1032605640136438169">Lue uudet ehdot</translation> <translation id="103279545524624934">Vapauta levytilaa, jotta voit käynnistää Android-sovelluksia.</translation> -<translation id="1033343386521881354">Tulostuspalvelimelta löytyi yksi tulostin.</translation> <translation id="1033780634303702874">Käyttää sarjaporttilaitteitasi</translation> <translation id="1034942643314881546">Otetaan ADB käyttöön sovelluskuvituksen luomista varten</translation> <translation id="1036348656032585052">Poista käytöstä</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Poistu koko näytön tilasta painikkeella |<ph name="ACCELERATOR" />|.</translation> <translation id="1038168778161626396">Vain salakoodaus</translation> <translation id="1039337018183941703">Virheellinen tai korruptoitunut tiedosto</translation> -<translation id="1039850285407663109">Tämä on tuntematon tiedosto, joka voi olla vaarallinen. Harkitse sen skannausta ennen avaamista.</translation> <translation id="1041175011127912238">Sivu ei vastaa</translation> <translation id="1041263367839475438">Käytettävissä olevat laitteet</translation> <translation id="1042174272890264476"><ph name="SHORT_PRODUCT_NAME" /> sisältää sisäänrakennetun RLZ-kirjaston. RLZ tuottaa ei-yksilöivän tagin, jolla voidaan mitata tietyn kampanjan aiheuttamia hakuja ja tuotteen <ph name="SHORT_PRODUCT_NAME" /> käyttöä. <ph name="PRODUCT_NAME" /> näyttää ajoittain näitä tunnisteita Google-hakujen kyselyissä.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Luota tähän varmenteeseen ohjelmiston tekijöitä tunnistettaessa.</translation> <translation id="1861262398884155592">Tämä kansio on tyhjä</translation> <translation id="1863182668524159459">Sarjaportteja ei löytynyt</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> on tuntematon tiedosto. Skannaa tiedosto riskien minimoimiseksi.</translation> <translation id="1864111464094315414">Kirjaudu</translation> <translation id="1864400682872660285">Viileä</translation> <translation id="1864454756846565995">C-tyypin USB-laite (takaportti)</translation> @@ -4024,7 +4021,6 @@ <translation id="6678717876183468697">Haun URL-osoite</translation> <translation id="6680442031740878064">Käytettävissä: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Nopeus</translation> -<translation id="6681301928961274620">Tulostuspalvelimelta ei löytynyt yhtään tulostinta.</translation> <translation id="6681668084120808868">Ota valokuva</translation> <translation id="6681964764822470072"><ph name="APP_NAME" /> poistetaan</translation> <translation id="668599234725812620">Avaa Google Play</translation> @@ -5553,7 +5549,6 @@ <translation id="8794025342371547160">Rajoitettu IP</translation> <translation id="879413103056696865">Kun hotspot on päällä, <ph name="PHONE_NAME" /> tekee seuraavaa:</translation> <translation id="8795916974678578410">Uusi ikkuna</translation> -<translation id="8797086401386164142">Tulostinpalvelimelta löytyi <ph name="NUM_PRINTERS" /> tulostinta.</translation> <translation id="8797459392481275117">Älä käännä tätä sivustoa</translation> <translation id="8798099450830957504">Oletus</translation> <translation id="8798441408945964110">Palveluntarjoajan nimi</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb index 8c833da8..16341c1 100644 --- a/chrome/app/resources/generated_resources_fil.xtb +++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Preview ng paglo-load</translation> <translation id="1032605640136438169">Pakisuri ang mga bagong tuntunin</translation> <translation id="103279545524624934">Magbakante ng disk space upang mailunsad ang Android apps.</translation> -<translation id="1033343386521881354">May nakitang 1 printer mula sa server sa pag-print.</translation> <translation id="1033780634303702874">I-access ang iyong mga serial device</translation> <translation id="1034942643314881546">Ine-enable ang adb para makagawa ng illustration ng mga app</translation> <translation id="1036348656032585052">I-off</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Pindutin ang |<ph name="ACCELERATOR" />| upang lumabas sa full screen</translation> <translation id="1038168778161626396">Encipher Lamang</translation> <translation id="1039337018183941703">Di-wasto o sira ang file</translation> -<translation id="1039850285407663109">Hindi kilala ang napiling file at may posibilidad na mapanganib ito. Isaalang-alang ang pag-scan bago buksan ang file na ito.</translation> <translation id="1041175011127912238">Hindi tumutugon ang page na ito</translation> <translation id="1041263367839475438">Mga available na device</translation> <translation id="1042174272890264476">Ang iyong computer ay may naka-built in din na RLZ library ng <ph name="SHORT_PRODUCT_NAME" />. Nagtatalaga ang RLZ ng hindi natatangi at hindi personal na nakakapagpakilalang tag upang sukatin ang mga paghahanap at paggamit ng <ph name="SHORT_PRODUCT_NAME" /> na nahimok ng isang partikular na kampanya sa pag-promote. Lumalabas minsan ang mga label na ito sa mga query sa Paghahanap sa Google sa <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Pagkatiwalaan ang certificate na ito para sa pagtukoy sa mga gumawa ng software</translation> <translation id="1861262398884155592">Walang laman ang folder na ito</translation> <translation id="1863182668524159459">Walang nakitang serial port</translation> -<translation id="1863552924692672565">Hindi kilala ang <ph name="FILE_NAME" />. I-scan ang file para mabawasan ang posibleng panganib.</translation> <translation id="1864111464094315414">Mag-login</translation> <translation id="1864400682872660285">Cooler</translation> <translation id="1864454756846565995">USB-C device (port sa rear)</translation> @@ -4025,7 +4022,6 @@ <translation id="6678717876183468697">URL ng Query</translation> <translation id="6680442031740878064">Available: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">I-rate</translation> -<translation id="6681301928961274620">Walang nakitang anumang printer mula sa server sa pag-print.</translation> <translation id="6681668084120808868">Kumuha ng larawan</translation> <translation id="6681964764822470072">Ia-uninstall ang "<ph name="APP_NAME" />."</translation> <translation id="668599234725812620">Buksan ang Google Play</translation> @@ -5556,7 +5552,6 @@ <translation id="8794025342371547160">Pinaghihigpitang IP</translation> <translation id="879413103056696865">Habang naka-on ang hotspot, gagawin ng iyong <ph name="PHONE_NAME" /> ang mga sumusunod:</translation> <translation id="8795916974678578410">New Window</translation> -<translation id="8797086401386164142">May nakitang <ph name="NUM_PRINTERS" /> (na) printer mula sa server sa pag-print.</translation> <translation id="8797459392481275117">Huwag Kailanman Isalin Ang Site na Ito</translation> <translation id="8798099450830957504">Default</translation> <translation id="8798441408945964110">Pangalan ng provider</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb index 93b220d..deaf425 100644 --- a/chrome/app/resources/generated_resources_fr-CA.xtb +++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -33,7 +33,6 @@ <translation id="1036982837258183574">Appuyez sur |<ph name="ACCELERATOR" />| pour quitter le mode plein écran</translation> <translation id="1038168778161626396">Chiffrer seulement</translation> <translation id="1039337018183941703">Fichier non valide ou corrompu</translation> -<translation id="1039850285407663109">Le fichier sélectionné est inconnu et peut être dangereux. Envisagez d'analyser ce fichier avant de l'ouvrir.</translation> <translation id="1041175011127912238">Cette page ne répond pas</translation> <translation id="1041263367839475438">Appareils accessibles</translation> <translation id="1042174272890264476">Votre ordinateur est fourni avec la bibliothèque RLZ de <ph name="SHORT_PRODUCT_NAME" />. RLZ attribue une étiquette non unique et qui ne permet pas d'identifier des internautes afin de mesurer les recherches et l'utilisation de <ph name="SHORT_PRODUCT_NAME" /> générées par une campagne de promotion particulière. Ces étiquettes s'affichent parfois dans les requêtes de recherche Google dans <ph name="PRODUCT_NAME" />.</translation> @@ -152,6 +151,7 @@ <translation id="1197979282329025000">Une erreur s'est produite lors de la récupération des capacités d'impression de l'imprimante <ph name="PRINTER_NAME" />. Cette imprimante n'a pas pu être enregistrée dans <ph name="CLOUD_PRINT_NAME" />.</translation> <translation id="119944043368869598">Tout effacer</translation> <translation id="1201402288615127009">Suivant</translation> +<translation id="1202556750060561551">Toutes les données et tous les témoins stockés par <ph name="SITE_GROUP_NAME" />, ainsi que tout site subordonné, et ses applications installées seront supprimés.</translation> <translation id="1202596434010270079">L'application de kiosque a été mise à jour. Veuillez retirer la clé USB.</translation> <translation id="120368089816228251">Note de musique</translation> <translation id="1205489148908752564">Consulter et modifier les utilisateurs ajoutés à la liste blanche</translation> @@ -279,8 +279,10 @@ <translation id="138784436342154190">Restaurer la page de démarrage par défaut?</translation> <translation id="1390548061267426325">Ouvrir dans un onglet ordinaire</translation> <translation id="1393283411312835250">Soleil et nuages</translation> +<translation id="1393787139683794508">Cette action effacera toutes les données et tous les témoins stockés par <ph name="ORIGIN_NAME" />.</translation> <translation id="1395730723686586365">L'outil de mise à jour est actif</translation> <translation id="1396139853388185343">Erreur lors de la configuration de l'imprimante</translation> +<translation id="1396259464226642517">Ce résultat était-il inattendu? <ph name="BEGIN_LINK" />Donner votre avis<ph name="END_LINK" /></translation> <translation id="1396963298126346194">Le nom d'utilisateur et le mot de passe que vous avez entrés ne correspondent pas</translation> <translation id="1397500194120344683">Aucun appareil admissible. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation> <translation id="1398853756734560583">Agrandir</translation> @@ -554,6 +556,7 @@ <translation id="1758018619400202187">EAP-TLS</translation> <translation id="17584710573359123">Afficher dans la boutique en ligne Chrome Web Store</translation> <translation id="176193854664720708">Le capteur d'empreintes digitales est situé au niveau de l'interrupteur. Touchez-le doucement avec n'importe quel doigt.</translation> +<translation id="176273057789108760">Votre organisation analyse les fichiers déplacés pour en vérifier la conformité.</translation> <translation id="1763046204212875858">Créer des raccourcis vers des applications</translation> <translation id="1763108912552529023">Continuer l'exploration</translation> <translation id="1763808908432309942">S'ouvre dans un nouvel onglet</translation> @@ -592,6 +595,7 @@ <translation id="1805472176602625930">Appuyez sur le bouton de la clé de sécurité</translation> <translation id="1805738995123446102">L'onglet d'arrière-plan utilise votre microphone</translation> <translation id="1805822111539868586">Examiner les vues</translation> +<translation id="1805888043020974594">Serveur d'impression</translation> <translation id="1805967612549112634">Confirmez le NIP</translation> <translation id="1809734401532861917">Ajouter au compte <ph name="USER_EMAIL_ADDRESS" /> mes favoris, mon historique, mes mots de passe et autres paramètres</translation> <translation id="1813278315230285598">Services</translation> @@ -633,7 +637,6 @@ <translation id="1858585891038687145">Considérer ce certificat comme fiable pour identifier les concepteurs de logiciels</translation> <translation id="1861262398884155592">Ce dossier est vide</translation> <translation id="1863182668524159459">Aucun port série n'a été trouvé</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> est inconnu. Analyser le fichier pour minimiser le risque.</translation> <translation id="1864111464094315414">Connexion</translation> <translation id="1864400682872660285">Plus froid</translation> <translation id="1864454756846565995">Appareil USB-C (port arrière)</translation> @@ -740,6 +743,7 @@ <translation id="202352106777823113">Le téléchargement prenait trop de temps et a été interrompu par le réseau.</translation> <translation id="2025632980034333559"><ph name="APP_NAME" /> a planté. Cliquez sur cette infobulle pour redémarrer l'application.</translation> <translation id="2025891858974379949">Contenu non sécurisé</translation> +<translation id="202918510990975568">Entrez votre mot de passe pour configurer la sécurité et la connexion</translation> <translation id="2034346955588403444">Ajouter un autre réseau Wi-Fi</translation> <translation id="203574396658008164">Activer la prise de notes à partir de l'écran de verrouillage</translation> <translation id="2037445849770872822">La supervision est configurée pour ce compte Google. Si vous souhaitez configurer davantage de contrôles parentaux, sélectionnez Continuer. @@ -891,6 +895,7 @@ <translation id="2224471211857467033">Événements d'accessibilité</translation> <translation id="2224551243087462610">Modifier le nom du dossier</translation> <translation id="2226449515541314767">La commande totale des appareils MIDI a été bloquée pour ce site.</translation> +<translation id="222704500187107962">Cette exception sera automatiquement supprimée lorsque vous aurez quitté la session de navigation privée en cours</translation> <translation id="2227179592712503583">Supprimer la suggestion</translation> <translation id="2229161054156947610">Il reste plus d'une heure</translation> <translation id="222931766245975952">Fichier tronqué</translation> @@ -944,6 +949,7 @@ <translation id="2300383962156589922">Personnaliser et contrôler <ph name="APP_NAME" /></translation> <translation id="2301382460326681002">Le répertoire racine de l'extension n'est pas valide.</translation> <translation id="23030561267973084">« <ph name="EXTENSION_NAME" /> » a demandé des autorisations supplémentaires.</translation> +<translation id="23055578400314116">Sélectionnez un nom d'utilisateur</translation> <translation id="2307462900900812319">Configurer le réseau</translation> <translation id="230927227160767054">Cette page veut installer un gestionnaire de services.</translation> <translation id="2309620859903500144">L'accès à vos capteurs de mouvement et de luminosité a été bloqué pour ce site.</translation> @@ -983,6 +989,7 @@ <translation id="2353297238722298836">La caméra et le microphone sont autorisés</translation> <translation id="2356070529366658676">Demander</translation> <translation id="2357330829548294574">Supprimer <ph name="USER_NAME" /></translation> +<translation id="235798134753548762">Vos applications, vos paramètres et vos préférences Wi-Fi seront synchronisés. Pour apporter des modifications, accédez au menu Paramètres en tout temps après la configuration.</translation> <translation id="2359345697448000899">Pour gérer les extensions, cliquer sur « Extensions » dans le menu « Outils ».</translation> <translation id="2359808026110333948">Continuer</translation> <translation id="236117173274098341">Optimiser</translation> @@ -1035,6 +1042,7 @@ <translation id="2436720498717686157">Votre organisation exige l'installation immédiate d'une mise à jour sur cet appareil</translation> <translation id="2439545803278355377">Entrez votre nouveau NIP. Un NIP doit comprendre au moins quatre caractères. Il peut contenir des lettres, des numéros et d'autres caractères.</translation> <translation id="2440604414813129000">Afficher le code s&ource</translation> +<translation id="244231003699905658">Adresse incorrecte. Veuillez vérifier l'adresse, puis réessayez.</translation> <translation id="2442916515643169563">Ombre du texte</translation> <translation id="2445081178310039857">Le répertoire racine de l'extension doit être indiqué.</translation> <translation id="2445484935443597917">Créer un profil</translation> @@ -1089,6 +1097,7 @@ <translation id="2501278716633472235">Retour</translation> <translation id="2501797496290880632">Entrez un raccourci</translation> <translation id="2502441965851148920">Les mises à jour automatiques sont activées. Votre administrateur a désactivé les mises à jour manuelles.</translation> +<translation id="2502719318159902502">Accès complet</translation> <translation id="2505127913256479918">Ce compte supervisé sera bientôt supprimé</translation> <translation id="2505324914378689427">{SCREEN_INDEX,plural, =1{Écran #}one{Écran #}other{Écran #}}</translation> <translation id="2505402373176859469"><ph name="RECEIVED_AMOUNT" /> de <ph name="TOTAL_SIZE" /></translation> @@ -1362,6 +1371,7 @@ <translation id="2865919525181940183">Capture d'écran des programmes qui sont présentement à l'écran</translation> <translation id="286674810810214575">Vérification des sources d'alimentation en cours…</translation> <translation id="2867768963760577682">Ouvrir dans un onglet épinglé</translation> +<translation id="2868184003987917410">Ne pas autoriser les sites à accéder à vos appareils et vos données de réalité virtuelle</translation> <translation id="2868746137289129307">Cette extension est obsolète et désactivée par la politique de l'entreprise. Il est possible qu’elle s’active automatiquement lorsqu’une nouvelle version sera disponible.</translation> <translation id="2870560284913253234">Site</translation> <translation id="2870909136778269686">Mise à jour en cours…</translation> @@ -1407,6 +1417,7 @@ <translation id="2916745397441987255">Rechercher dans les extensions</translation> <translation id="2921081876747860777">Veuillez créer un mot de passe pour protéger vos données locales.</translation> <translation id="2923234477033317484">Supprimer ce compte</translation> +<translation id="2925054096976782003">Votre organisation analyse les données collées pour en vérifier la conformité.</translation> <translation id="2926085873880284723">Rétablir les raccourcis par défaut</translation> <translation id="2927017729816812676">Stockage du cache</translation> <translation id="2931157624143513983">Ajuster à la zone imprimable</translation> @@ -1430,6 +1441,7 @@ <translation id="2956070239128776395">Section imbriquée dans le groupe : <ph name="ERROR_LINE" /></translation> <translation id="2957117904572187936">Ne pas autoriser de sites à modifier les fichiers ou les dossiers de votre appareil</translation> <translation id="2958721676848865875">Avertissement concernant l'empaquetage d'extensions</translation> +<translation id="2959127025785722291">Il y a eu un problème. Impossible de terminer la recherche. Veuillez réessayer.</translation> <translation id="2959842337402130152">Impossible d'effectuer la restauration en raison d'un manque d'espace de stockage. Libérez <ph name="SPACE_REQUIRED" /> sur l'appareil, puis réessayez.</translation> <translation id="296026337010986570">Terminé! Logiciel nuisible supprimé. Pour activer à nouveau les extensions, consultez la page <a href="chrome://extensions">Extensions</a>.</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" /> (extension fournie)</translation> @@ -1687,6 +1699,7 @@ <translation id="3348038390189153836">Appareil amovible détecté</translation> <translation id="3349933790966648062">Empreinte mémoire</translation> <translation id="3350117557200012647">Activer le mode d'association</translation> +<translation id="3350244554415289209">Demander une autorisation lorsqu'un site veut accéder à la position de votre appareil photo ou cartographier votre pièce (recommandé)</translation> <translation id="3355936511340229503">Erreur de connexion</translation> <translation id="3356580349448036450">Terminé</translation> <translation id="3359256513598016054">Contraintes des politiques de certificat</translation> @@ -1750,6 +1763,7 @@ <translation id="3448492834076427715">Mettre à jour le compte</translation> <translation id="3449839693241009168">Appuyez sur <ph name="SEARCH_KEY" /> pour envoyer des commandes à <ph name="EXTENSION_NAME" /></translation> <translation id="3450157232394774192">Pourcentage d'utilisation à l'état de veille</translation> +<translation id="3451332697983754369">Synchroniser mon <ph name="DEVICE_TYPE" /></translation> <translation id="3453612417627951340">Nécessite une autorisation</translation> <translation id="3454157711543303649">Activation terminée</translation> <translation id="3454213325559396544">Il s'agit de la dernière mise à jour logicielle et de sécurité pour ce <ph name="DEVICE_TYPE" />. Pour recevoir les mises à jour ultérieures, procurez-vous un modèle plus récent.</translation> @@ -1772,6 +1786,7 @@ <translation id="347785443197175480">Continuer à autoriser <ph name="HOST" /> à accéder à votre caméra et à votre microphone</translation> <translation id="3478685642445675458">Veuillez déverrouiller votre profil avant de supprimer une personne.</translation> <translation id="3479552764303398839">Pas maintenant</translation> +<translation id="3479685872808224578">Impossible de détecter le serveur d'impression. Veuillez vérifier l'adresse, puis réessayez.</translation> <translation id="3481268647794498892">Ouverture dans <ph name="ALTERNATIVE_BROWSER_NAME" /> dans <ph name="COUNTDOWN_SECONDS" /> secondes</translation> <translation id="3484273680291419129">Suppression du logiciel nuisible en cours…</translation> <translation id="3484869148456018791">Obtenir un nouveau certificat</translation> @@ -1887,6 +1902,7 @@ <translation id="3630132874740063857">Votre téléphone</translation> <translation id="3630995161997703415">Ajoutez ce site à votre étagère pour pouvoir l'utiliser à tout moment</translation> <translation id="3634507049637220048">Réseau <ph name="NETWORK_INDEX" /> sur <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, géré par votre administrateur, détails</translation> +<translation id="3635241501480133979">Ces données violent les politiques de sécurité de votre organisation et ne peuvent pas être déposées.</translation> <translation id="3635353578505343390">Envoyer un commentaire à Google</translation> <translation id="3636096452488277381">Bien le bonjour, <ph name="USER_GIVEN_NAME" />.</translation> <translation id="3636766455281737684"><ph name="PERCENTAGE" /> % - temps restant : <ph name="TIME" /></translation> @@ -1921,6 +1937,7 @@ <translation id="3677657024345889897">Le plus faible</translation> <translation id="3677911431265050325">Voir la version pour appareil mobile</translation> <translation id="3678156199662914018">Extension : <ph name="EXTENSION_NAME" /></translation> +<translation id="3678613690490567106">Synchronisez vos données pour profiter d'une expérience personnalisée sur tous vos appareils</translation> <translation id="3681311097828166361">Nous vous remercions de vos commentaires. Vous êtes actuellement hors connexion, et votre rapport sera envoyé plus tard.</translation> <translation id="3682824389861648626">Seuil de mouvement</translation> <translation id="3683524264665795342">Demande de partage d'écran de <ph name="APP_NAME" /></translation> @@ -2431,6 +2448,7 @@ <translation id="4400632832271803360">Maintenez la touche Lanceur d'applications enfoncée pour modifier la fonction des touches de la rangée supérieure</translation> <translation id="4400963414856942668">Vous pouvez cliquer sur l'étoile pour ajouter un onglet aux favoris</translation> <translation id="4403775189117163360">Choisir un autre dossier</translation> +<translation id="4404136731284211429">Rechercher à nouveau</translation> <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation> <translation id="4408599188496843485">Aid&e</translation> <translation id="4409697491990005945">Marges</translation> @@ -2449,6 +2467,7 @@ <translation id="4421932782753506458">Félix</translation> <translation id="4423376891418188461">Restaurer les paramètres</translation> <translation id="442397852638519243"><ph name="USER_NAME" />, votre administrateur vous demande de changer votre mot de passe.</translation> +<translation id="4429030830601238961">Ces données violent les politiques de sécurité de votre organisation et ne peuvent pas être collées.</translation> <translation id="4430019312045809116">Volume</translation> <translation id="4430369329743628066">Favori ajouté</translation> <translation id="4434045419905280838">Fenêt. context. et redirections</translation> @@ -2495,9 +2514,11 @@ <translation id="4501530680793980440">Confirmation de la désinstallation</translation> <translation id="4502423230170890588">Supprimer de cet appareil</translation> <translation id="4504940961672722399">Utilisez cette extension en cliquant sur cette icône ou en appuyant sur <ph name="EXTENSION_SHORTCUT" />.</translation> +<translation id="4507164039066603071">Ne pas autoriser les sites à accéder à la position de votre appareil photo ni à cartographier votre pièce</translation> <translation id="4508051413094283164">Tout ouvrir dans une fenêtre de navigation privée</translation> <translation id="4508265954913339219">Échec de l'activation</translation> <translation id="4508765956121923607">Voir le code s&ource</translation> +<translation id="4510614391273086606">Les fichiers et les applications Linux sont en cours de restauration vers leur état sauvegardé.</translation> <translation id="451407183922382411">Optimisé par <ph name="COMPANY_NAME" /></translation> <translation id="4514610446763173167">Faire jouer la vidéo ou la mettre en pause</translation> <translation id="451515744433878153">Supprimer</translation> @@ -2695,6 +2716,7 @@ <translation id="480990236307250886">Ouvrir la page d'accueil</translation> <translation id="4813136279048157860">Mes images</translation> <translation id="4813512666221746211">Erreur réseau</translation> +<translation id="4814378367953456825">Entrez un nom pour cette empreinte digitale</translation> <translation id="4820236583224459650">Enregistrer comme ticket actif</translation> <translation id="4821935166599369261">&Profilage activé</translation> <translation id="4823484602432206655">Lire et modifier les paramètres de l’utilisateur et de l'appareil</translation> @@ -2741,6 +2763,7 @@ <translation id="4876895919560854374">Verrouiller et déverrouiller l'écran</translation> <translation id="4877276003880815204">Inspecter des éléments</translation> <translation id="4878653975845355462">Les arrière-plans personnalisés ont été désactivés par votre administrateur</translation> +<translation id="4878718769565915065">L'ajout d'une empreinte digitale à cette clé de sécurité a échoué</translation> <translation id="4879491255372875719">Automatique (par défaut)</translation> <translation id="4880328057631981605">Nom du point d'accès</translation> <translation id="4880827082731008257">Rechercher dans l'historique</translation> @@ -2871,6 +2894,7 @@ <translation id="5065775832226780415">Smart Lock</translation> <translation id="5067399438976153555">Toujours activé</translation> <translation id="5067867186035333991">Demander mon autorisation si <ph name="HOST" /> veut accéder au microphone</translation> +<translation id="5068377946749700758">Votre organisation analyse les données déposées pour en vérifier la conformité.</translation> <translation id="5068918910148307423">Ne pas autoriser les sites récemment fermés à terminer l'envoi et la réception de données</translation> <translation id="5068919226082848014">Pizza</translation> <translation id="5072052264945641674">Ajuster la taille du curseur</translation> @@ -3063,6 +3087,7 @@ <translation id="5341793073192892252">Les témoins suivants ont été bloqués (tous les témoins de tiers sont bloqués, sans exception)</translation> <translation id="5341980496415249280">Veuillez patienter, emballage en cours…</translation> <translation id="5342091991439452114">Le NIP doit comporter au moins <ph name="MINIMUM" /> chiffres</translation> +<translation id="5344036115151554031">Restauration de Linux en cours…</translation> <translation id="5352033265844765294">Horodatage</translation> <translation id="5353252989841766347">Exporter les mots de passe à partir de Chrome</translation> <translation id="5355099869024327351">Permet à l'Assistant Google de vous montrer des notifications</translation> @@ -3116,6 +3141,7 @@ <translation id="5427459444770871191">Rotation dans le sens &horaire</translation> <translation id="542872847390508405">Vous naviguez en tant qu'invité</translation> <translation id="5428850089342283580"><ph name="ACCNAME_APP" /> (une mise à jour est offerte)</translation> +<translation id="542948651837270806">Une mise à jour pour le micrologiciel du module de plateforme de confiance doit être installée. Consultez <ph name="TPM_FIRMWARE_UPDATE_LINK" /></translation> <translation id="5430931332414098647">Partage de connexion instantané</translation> <translation id="5431318178759467895">Couleur</translation> <translation id="5431825016875453137">OpenVPN / L2TP</translation> @@ -3296,6 +3322,7 @@ <translation id="5659593005791499971">Courriel</translation> <translation id="5659833766619490117">Impossible de traduire cette page</translation> <translation id="5660204307954428567">Associer avec <ph name="DEVICE_NAME" /></translation> +<translation id="5662513737565158057">Modifiez la manière dont les applications Linux vont fonctionner.</translation> <translation id="5667546120811588575">Configuration de Google Play en cours…</translation> <translation id="5669267381087807207">Activation en cours…</translation> <translation id="5669691691057771421">Entrez le nouveau NIP</translation> @@ -3641,7 +3668,7 @@ <translation id="6147020289383635445">Échec de création de l'aperçu avant impression.</translation> <translation id="6148576794665275391">Ouvrir maintenant</translation> <translation id="6149015141270619212">Impossible de se connecter à Internet</translation> -<translation id="614940544461990577">Essayez :</translation> +<translation id="614940544461990577">Essayez ceci :</translation> <translation id="6150961653851236686">Cette langue est utilisée pour la traduction de pages</translation> <translation id="6151323131516309312">Appuyez sur <ph name="SEARCH_KEY" /> pour faire une recherche sur <ph name="SITE_NAME" /></translation> <translation id="6151771661215463137">Le fichier existe déjà dans votre dossier de téléchargements.</translation> @@ -3703,6 +3730,7 @@ <translation id="6238923052227198598">Afficher la dernière note sur l'écran de verrouillage</translation> <translation id="6239558157302047471">Actualiser le &cadre</translation> <translation id="6241530762627360640">Accéder aux détails des appareils Bluetooth associés à votre système et détecter les appareils Bluetooth à proximité.</translation> +<translation id="6241844896329831164">Aucun accès nécessaire</translation> <translation id="6242589501614145408">Réinitialiser votre clé de sécurité</translation> <translation id="6242852299490624841">Mettre cet onglet en évidence</translation> <translation id="6243280677745499710">Fond d'écran actuel</translation> @@ -3903,6 +3931,8 @@ <translation id="6531282281159901044">Conserver le fichier dangereux</translation> <translation id="6532101170117367231">Enregistrer dans Google Disque</translation> <translation id="6532106788206463496">Enregistrer les modifications</translation> +<translation id="6532206849875187177">Sécurité et connexion</translation> +<translation id="6532527800157340614">Échec de la connexion dû à l'impossibilité de récupérer votre jeton d'accès. Veuillez vérifier votre connexion réseau et réessayer.</translation> <translation id="6532663472409656417">Inscrit à une entreprise</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />Remarque<ph name="END_BOLD" /> : n'activez cette option que si vous êtes sûr de ce que vous faites ou si vous avez été invité à le faire. En effet, la collecte de données est susceptible de diminuer les performances.</translation> <translation id="6541638731489116978">Ce site a été bloqué : il ne peut pas accéder à vos capteurs de mouvement.</translation> @@ -3910,6 +3940,7 @@ <translation id="6545864417968258051">Recherche d'appareils Bluetooth</translation> <translation id="6545867563032584178">Le microphone est désactivé dans les Préférences Système du Mac</translation> <translation id="6547354035488017500">Libérez au moins 512 Mo d'espace de stockage ou votre appareil ne répondra plus. Pour libérer de l'espace, supprimez des fichiers de l'espace de stockage de votre appareil.</translation> +<translation id="6549966385318247177">Ce site a été bloqué en raison de contenu pour adultes.</translation> <translation id="6550675742724504774">Options</translation> <translation id="6551508934388063976">Commande inaccessible. Appuyez sur Ctrl + N pour ouvrir une nouvelle fenêtre.</translation> <translation id="6551612971599078809">Le site utilise un appareil USB</translation> @@ -4241,6 +4272,7 @@ <translation id="703001695939087067">Vous avez activé le mode de vue d'ensemble des fenêtres. Sélectionnez l'onglet pour naviguer.</translation> <translation id="7031608529463141342"><ph name="WINDOW_TITLE" /> : connecté à un port série</translation> <translation id="7031962166228839643">Le module TPM est en cours de préparation, veuillez patienter (cette opération peut prendre quelques minutes)...</translation> +<translation id="7034615910652881882">Demander quand un site souhaite accéder à vos appareils ou vos données de réalité virtuelle</translation> <translation id="7037509989619051237">Aperçu du texte</translation> <translation id="7039326228527141150">Accéder à des appareils USB de <ph name="VENDOR_NAME" /></translation> <translation id="7039912931802252762">Ouverture de session par carte à puce Microsoft</translation> @@ -4280,6 +4312,7 @@ <translation id="7081952801286122383">Vous êtes en mode de navigation privée</translation> <translation id="708278670402572152">Déconnecter pour activer la numérisation</translation> <translation id="7085389578340536476">Autoriser Chrome à enregistrer du contenu audio?</translation> +<translation id="7086467953285486445">Ces fichiers violent les politiques de sécurité de votre organisation et ne peuvent pas être déposés.</translation> <translation id="7088434364990739311">Échec du lancement de la vérification des mises à jour (code d'erreur <ph name="ERROR" />).</translation> <translation id="7088561041432335295">Zip Archiver – Ouvrez et compressez des fichiers ZIP dans l'application Fichiers.</translation> <translation id="7088674813905715446">Cet appareil a été mis en état « révoqué » par l'administrateur. Pour activer son inscription, veuillez demander à l'administrateur d'activer l'état « en attente » pour cet appareil.</translation> @@ -4393,6 +4426,7 @@ <translation id="7241389281993241388">Veuillez vous connecter à <ph name="TOKEN_NAME" /> pour importer le certificat de client.</translation> <translation id="7241443820034350811">Si votre clé de sécurité ne figure pas dans la liste, maintenez son bouton enfoncé pendant au moins cinq secondes.</translation> <translation id="7243632151880336635">Effacer et se déconnecter</translation> +<translation id="7243784282103630670">Une erreur s'est produite lors de la mise à niveau de Linux. Nous allons restaurer le conteneur à l'aide de votre sauvegarde.</translation> <translation id="7245628041916450754"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (Meilleure résolution)</translation> <translation id="7246230585855757313">Réinsérez votre clé de sécurité, puis réessayez</translation> <translation id="7246947237293279874">Mandataire FTP</translation> @@ -4479,6 +4513,7 @@ <translation id="7360233684753165754"><ph name="PAGE_NUMBER" /> pages vers <ph name="PRINTER_NAME" /></translation> <translation id="7361297102842600584">Cliquez avec le bouton de droite pour exécuter le plugiciel <ph name="PLUGIN_NAME" /></translation> <translation id="7363117941401515667">Page mise à jour il y a <ph name="HOURS" /> heures</translation> +<translation id="7364591875953874521">Accès demandé</translation> <translation id="7364796246159120393">Sélectionner un fichier</translation> <translation id="7366415735885268578">Ajouter un site</translation> <translation id="7366909168761621528">Données de navigation</translation> @@ -4504,6 +4539,7 @@ <translation id="740624631517654988">Fenêtre contextuelle bloquée</translation> <translation id="7407430846095439694">Importer et associer</translation> <translation id="7407504355934009739">La plupart des gens bloquent les notifications provenant de ce site</translation> +<translation id="740810853557944681">Ajouter un serveur d'impression</translation> <translation id="7409549334477097887">Très grand</translation> <translation id="7409836189476010449">Exécuter Flash</translation> <translation id="7410344089573941623">Demander mon autorisation si <ph name="HOST" /> veut accéder à la caméra et au microphone</translation> @@ -4524,6 +4560,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{Tout ouvrir dans une &nouvelle fenêtre}=1{Ouvrir dans une &nouvelle fenêtre}one{Tout ouvrir (#) dans une &nouvelle fenêtre}other{Tout ouvrir (#) dans une &nouvelle fenêtre}}</translation> <translation id="7434509671034404296">Concepteur</translation> <translation id="7434635829372401939">Synchroniser vos paramètres</translation> +<translation id="7434969625063495310">Impossible d'ajouter le serveur d'impression. Veuillez vérifier la configuration du serveur, puis réessayer.</translation> <translation id="7436921188514130341">Oups… Une erreur s'est produite lors du changement de nom.</translation> <translation id="7438976808740265764">Après décembre 2020, le lecteur Flash ne sera plus pris en charge.</translation> <translation id="7441736921018636843">Pour modifier ce paramètre, <ph name="BEGIN_LINK" />réinitialisez la synchronisation<ph name="END_LINK" /> afin de supprimer votre phrase de passe de synchronisation</translation> @@ -4533,8 +4570,10 @@ <translation id="7443806024147773267">Accédez à vos mots de passe lorsque vous êtes connecté à votre compte Google</translation> <translation id="7444983668544353857">Désactiver <ph name="NETWORKDEVICE" /></translation> <translation id="7448430327655618736">Installer automatiquement les applications</translation> +<translation id="7448625729116931228">Demander quand un site souhaite accéder à vos appareils ou vos données de réalité virtuelle (recommandé)</translation> <translation id="7450761244949417357">Ouverture dans <ph name="ALTERNATIVE_BROWSER_NAME" /> en cours…</translation> <translation id="7453008956351770337">En sélectionnant cette imprimante, vous permettez à l'extension suivante d'y accéder :</translation> +<translation id="7454548535253569100">Portail : <ph name="SUBFRAME_SITE" /></translation> <translation id="7456142309650173560">concepteur</translation> <translation id="7456847797759667638">Ouvrir une adresse...</translation> <translation id="7458168200501453431">Utilise le même correcteur orthographique que celui utilisé dans la recherche Google. Le texte que vous tapez dans le navigateur sera envoyé à Google.</translation> @@ -4580,6 +4619,7 @@ <translation id="7513029293694390567">Connexion automatique à des sites Web à l'aide d'identifiants enregistrés. Si cette fonctionnalité est désactivée, une confirmation vous est demandée avant chaque connexion à un site Web.</translation> <translation id="7514239104543605883">Copier vers votre appareil</translation> <translation id="7514365320538308">Télécharger</translation> +<translation id="7520766081042531487">Portail de navigation privée : <ph name="SUBFRAME_SITE" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7522255036471229694">Dites « Ok Google ».</translation> <translation id="7525067979554623046">Créer</translation> @@ -4668,6 +4708,7 @@ <translation id="7652808307838961528">Modifier la personne, <ph name="PROFILE_NAME" /></translation> <translation id="765293928828334535">Les applications, les extensions et les scripts d'utilisateur ne peuvent pas être ajoutés à partir de ce site Web</translation> <translation id="7652954539215530680">Créer un NIP</translation> +<translation id="7653295403398566475">Demander une autorisation lorsqu'un site veut accéder à la position de votre appareil photo ou cartographier votre pièce</translation> <translation id="7654941827281939388">Ce compte est déjà utilisé sur cet ordinateur.</translation> <translation id="7658239707568436148">Annuler</translation> <translation id="7659584679870740384">Vous n'êtes pas autorisé(e) à utiliser cet appareil. Pour obtenir l'autorisation de vous y connecter, veuillez communiquer avec l'administrateur.</translation> @@ -4820,6 +4861,7 @@ <translation id="783214144752121388">Empêcher les sites d'utiliser Flash (recommandé)</translation> <translation id="7833720883933317473">Les mots personnalisés enregistrés s'afficheront ici</translation> <translation id="7835178595033117206">Favori supprimé</translation> +<translation id="7836850009646241041">Essayez de toucher votre clé de sécurité à nouveau</translation> <translation id="7837776265184002579">Votre page d'accueil a été remplacée par <ph name="URL" />.</translation> <translation id="7839051173341654115">Afficher/Sauvegarder les médias</translation> <translation id="7839192898639727867">Identifiant de la clé du destinataire du certificat</translation> @@ -5134,7 +5176,9 @@ <translation id="8260864402787962391">Souris</translation> <translation id="8261378640211443080">Cette extension ne figure pas dans la boutique <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> et peut avoir été ajoutée à votre insu.</translation> <translation id="8261506727792406068">Supprimer</translation> +<translation id="8263336784344783289">Nommer ce groupe</translation> <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" /> a désactivé le curseur de votre souris.</translation> +<translation id="8264024885325823677">C'est votre administrateur qui gère ce paramètre.</translation> <translation id="8264718194193514834">L'extension « <ph name="EXTENSION_NAME" /> » a déclenché le mode plein écran.</translation> <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />Il s'agit de données générales concernant votre appareil et l'usage que vous en faites (comme le niveau de la pile, l'activité système, l'activité des applications et les erreurs) qui seront utilisées pour améliorer Android. De plus, certaines données collectées contribueront également à améliorer les applications de Google et aideront nos partenaires, comme les concepteurs d'Android, à améliorer leurs applications et leurs produits.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />La désactivation de cette fonctionnalité n'empêche pas votre appareil d'envoyer les données nécessaires aux services essentiels, comme les mises à jour du système et la sécurité.<ph name="END_PARAGRAPH2" /> @@ -5390,6 +5434,7 @@ <translation id="8650543407998814195">Bien que vous ne puissiez plus accéder à votre ancien profil, vous pouvez toujours le supprimer.</translation> <translation id="8651585100578802546">Forcer l'actualisation de la page</translation> <translation id="8652400352452647993">Erreur concernant l'empaquetage d'extensions</translation> +<translation id="8653578191563425126">Espace disque à réserver pour Crostini (vous pouvez modifier cette valeur plus tard).</translation> <translation id="8654151524613148204">Ce fichier est trop volumineux pour votre ordinateur.</translation> <translation id="8655295600908251630">Version</translation> <translation id="8655319619291175901">Une erreur s'est produite.</translation> @@ -5654,6 +5699,7 @@ <translation id="8985264973231822211">Actif il y a <ph name="DEVICE_LAST_ACTIVATED_TIME" /> jour</translation> <translation id="8986362086234534611">Supprimer</translation> <translation id="8986494364107987395">Envoyer automatiquement les statistiques d'utilisation et les rapports d'erreur à Google</translation> +<translation id="8986651757229422279">Cette action effacera toutes les données et tous les témoins stockés par <ph name="ORIGIN_NAME" /> et son application installée.</translation> <translation id="8987927404178983737">Mois</translation> <translation id="8991520179165052608">Le site peut utiliser votre microphone</translation> <translation id="899403249577094719">URL de base du certificat Netscape</translation> @@ -5805,6 +5851,7 @@ <translation id="932508678520956232">Impossible de lancer l'impression.</translation> <translation id="93343527085570547">Accédez à la <ph name="BEGIN_LINK1" />page d'aide juridique<ph name="END_LINK1" /> pour demander des modifications de contenu pour des raisons juridiques. Certaines données de compte et de système peuvent être envoyées à Google. Nous utiliserons les données que vous nous fournissez pour aider à répondre aux problèmes techniques afin d'améliorer nos services, conformément à notre <ph name="BEGIN_LINK2" />politique de confidentialité<ph name="END_LINK2" /> et à nos <ph name="BEGIN_LINK3" />conditions d'utilisation<ph name="END_LINK3" />.</translation> <translation id="93393615658292258">Mot de passe seulement</translation> +<translation id="934244546219308557">Nommer ce groupe</translation> <translation id="934503638756687833">Les éléments qui ne sont pas affichés ici seront également supprimés si nécessaire. Pour en savoir plus sur la <a href="<ph name="URL" />">protection contre les logiciels indésirables</a>, consultez le livre blanc sur la confidentialité de Chrome.</translation> <translation id="935490618240037774">Vos favoris, votre historique, vos mots de passe et autres paramètres seront synchronisés avec votre compte Google, et vous pourrez les utiliser sur tous vos appareils.</translation> <translation id="935854577147268200">Changement de téléphone Smart Lock. Entrez votre mot de passe pour mettre à jour Smart Lock. La prochaine fois, votre téléphone pourra déverrouiller votre <ph name="DEVICE_TYPE" />. Vous pouvez désactiver Smart Lock dans le menu Paramètres.</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb index 0fa8362..6adb7fd0 100644 --- a/chrome/app/resources/generated_resources_fr.xtb +++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Chargement de l'aperçu...</translation> <translation id="1032605640136438169">Veuillez consulter les nouvelles conditions</translation> <translation id="103279545524624934">Libérez de l'espace disque pour lancer des applications Android.</translation> -<translation id="1033343386521881354">1 imprimante trouvée sur le serveur d'impression.</translation> <translation id="1033780634303702874">Accéder à vos appareils reliés via le port série</translation> <translation id="1034942643314881546">Illustration de l'activation d'ADB pour créer des applications</translation> <translation id="1036348656032585052">Désactiver</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Appuyez sur |<ph name="ACCELERATOR" />| pour quitter le mode plein écran.</translation> <translation id="1038168778161626396">Chiffrer seulement</translation> <translation id="1039337018183941703">Fichier non valide ou corrompu</translation> -<translation id="1039850285407663109">Le fichier sélectionné est inconnu et peut présenter un danger. Vous devriez l'analyser avant de l'ouvrir.</translation> <translation id="1041175011127912238">Cette page ne répond pas</translation> <translation id="1041263367839475438">Appareils disponibles</translation> <translation id="1042174272890264476">Votre ordinateur est fourni avec la bibliothèque RLZ de <ph name="SHORT_PRODUCT_NAME" />. RLZ attribue un tag non unique (et qui n'identifie pas personnellement les internautes) afin de mesurer les recherches et l'utilisation de <ph name="SHORT_PRODUCT_NAME" /> générées par une campagne de promotion spécifique. Ces libellés s'affichent parfois dans les requêtes de recherche Google dans <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Considérer ce certificat comme fiable pour identifier les développeurs de logiciels</translation> <translation id="1861262398884155592">Ce dossier est vide</translation> <translation id="1863182668524159459">Ports série introuvables</translation> -<translation id="1863552924692672565">Fichier <ph name="FILE_NAME" /> inconnu. Analysez le fichier pour minimiser les risques.</translation> <translation id="1864111464094315414">Connexion</translation> <translation id="1864400682872660285">Plus froid</translation> <translation id="1864454756846565995">Appareil USB de type C (port situé sur l'arrière de l'appareil)</translation> @@ -1701,7 +1698,7 @@ <translation id="3348038390189153836">Nouveau matériel détecté</translation> <translation id="3349933790966648062">Espace mémoire utilisé</translation> <translation id="3350117557200012647">Associer</translation> -<translation id="3350244554415289209">Vous demander votre avis lorsqu'un site souhaite accéder à la position de votre caméra ou cartographier votre pièce (recommandé)</translation> +<translation id="3350244554415289209">Vous demander votre avis lorsqu'un site souhaite accéder à la position de la caméra ou cartographier la pièce (recommandé)</translation> <translation id="3355936511340229503">Erreur de connexion</translation> <translation id="3356580349448036450">Terminé</translation> <translation id="3359256513598016054">Contraintes des stratégies de certificat</translation> @@ -1939,7 +1936,7 @@ <translation id="3677657024345889897">Volume minimal</translation> <translation id="3677911431265050325">Demander le site mobile</translation> <translation id="3678156199662914018">Extension : <ph name="EXTENSION_NAME" /></translation> -<translation id="3678613690490567106">Synchroniser pour une expérience personnalisée sur tous les appareils</translation> +<translation id="3678613690490567106">Activer la synchronisation pour une expérience personnalisée sur tous les appareils</translation> <translation id="3681311097828166361">Merci de vos commentaires. Vous êtes hors connexion pour le moment, et votre rapport sera envoyé plus tard.</translation> <translation id="3682824389861648626">Seuil de mouvement</translation> <translation id="3683524264665795342">Partage de l'écran demandé par <ph name="APP_NAME" /></translation> @@ -2516,11 +2513,11 @@ <translation id="4501530680793980440">Confirmer la suppression</translation> <translation id="4502423230170890588">Supprimer de cet appareil</translation> <translation id="4504940961672722399">Utilisez cette extension en cliquant sur cette icône ou en appuyant sur <ph name="EXTENSION_SHORTCUT" /></translation> -<translation id="4507164039066603071">Interdire aux sites d'accéder à la position de votre caméra ou de cartographier votre pièce</translation> +<translation id="4507164039066603071">Interdire aux sites d'accéder à la position de la caméra ou de cartographier la pièce</translation> <translation id="4508051413094283164">Tout ouvrir dans une fenêtre de navigation privée</translation> <translation id="4508265954913339219">Échec de l'activation</translation> <translation id="4508765956121923607">Afficher la s&ource</translation> -<translation id="4510614391273086606">Les applications et fichiers Linux sont restaurés tels qu'ils ont été sauvegardés.</translation> +<translation id="4510614391273086606">Les applications et fichiers Linux sont restaurés tels qu'ils étaient au moment de la sauvegarde.</translation> <translation id="451407183922382411">Fourni par <ph name="COMPANY_NAME" /></translation> <translation id="4514610446763173167">Activer/Désactiver la lecture ou la mise en pause de la vidéo</translation> <translation id="451515744433878153">Supprimer</translation> @@ -3325,7 +3322,7 @@ <translation id="5659593005791499971">E-mail</translation> <translation id="5659833766619490117">Impossible de traduire cette page</translation> <translation id="5660204307954428567">Associer à <ph name="DEVICE_NAME" /></translation> -<translation id="5662513737565158057">Modifiez le fonctionnement des applications Linux.</translation> +<translation id="5662513737565158057">Modifier le fonctionnement des applications Linux.</translation> <translation id="5667546120811588575">Configuration de Google Play…</translation> <translation id="5669267381087807207">Activation</translation> <translation id="5669691691057771421">Saisir le nouveau code</translation> @@ -3943,7 +3940,7 @@ <translation id="6545864417968258051">Recherche Bluetooth</translation> <translation id="6545867563032584178">Micro désactivé dans les préférences système Mac</translation> <translation id="6547354035488017500">Si vous ne libérez pas au moins 512 Mo en supprimant des fichiers de l'espace de stockage, votre appareil ne répondra plus.</translation> -<translation id="6549966385318247177">Cette extension est bloquée en raison du contenu réservé à un public averti.</translation> +<translation id="6549966385318247177">Cette extension est bloquée en raison d'un contenu réservé à un public averti.</translation> <translation id="6550675742724504774">Options</translation> <translation id="6551508934388063976">Commande indisponible. Appuyez sur CTRL + N pour ouvrir une nouvelle fenêtre.</translation> <translation id="6551612971599078809">Le site utilise actuellement un appareil USB</translation> @@ -4026,7 +4023,6 @@ <translation id="6678717876183468697">URL de requête</translation> <translation id="6680442031740878064">Espace disponible : <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Cadence</translation> -<translation id="6681301928961274620">Aucune imprimante trouvée sur le serveur d'impression.</translation> <translation id="6681668084120808868">Prendre une photo</translation> <translation id="6681964764822470072">L'application "<ph name="APP_NAME" />" va être désinstallée.</translation> <translation id="668599234725812620">Ouvrir Google Play</translation> @@ -4712,7 +4708,7 @@ <translation id="7652808307838961528">Modifier la personne, <ph name="PROFILE_NAME" /></translation> <translation id="765293928828334535">Les applications, les extensions et les scripts d'utilisateur ne peuvent pas être ajoutés à partir de ce site Web</translation> <translation id="7652954539215530680">Créer un code</translation> -<translation id="7653295403398566475">Vous demander votre avis lorsqu'un site souhaite accéder à la position de votre caméra ou cartographier votre pièce</translation> +<translation id="7653295403398566475">Vous demander votre avis lorsqu'un site souhaite accéder à la position de la caméra ou cartographier la pièce</translation> <translation id="7654941827281939388">Ce compte est déjà utilisé sur cet ordinateur.</translation> <translation id="7658239707568436148">Annuler</translation> <translation id="7659584679870740384">Vous n'êtes pas autorisé à utiliser cet appareil. Pour obtenir l'autorisation de vous y connecter, veuillez contacter l'administrateur.</translation> @@ -5439,7 +5435,7 @@ <translation id="8650543407998814195">Bien que vous ne puissiez plus accéder à votre ancien profil, vous pouvez quand même le supprimer.</translation> <translation id="8651585100578802546">Forcer l'actualisation de cette page</translation> <translation id="8652400352452647993">Erreur relative à la mise en package des extensions</translation> -<translation id="8653578191563425126">Espace disque à réserver pour Crostini (vous pourrez modifier ce paramètre plus tard).</translation> +<translation id="8653578191563425126">Espace disque à réserver à Crostini (vous pourrez modifier ce paramètre plus tard).</translation> <translation id="8654151524613148204">Ce fichier est trop volumineux pour votre ordinateur.</translation> <translation id="8655295600908251630">Version</translation> <translation id="8655319619291175901">Petit problème... Une erreur s'est produite.</translation> @@ -5556,7 +5552,6 @@ <translation id="8794025342371547160">IP limitée</translation> <translation id="879413103056696865">Lors de l'utilisation du point d'accès, votre <ph name="PHONE_NAME" /> :</translation> <translation id="8795916974678578410">Nouvelle fenêtre</translation> -<translation id="8797086401386164142"><ph name="NUM_PRINTERS" /> imprimante(s) trouvée(s) sur le serveur d'impression.</translation> <translation id="8797459392481275117">Ne jamais traduire ce site</translation> <translation id="8798099450830957504">Par défaut</translation> <translation id="8798441408945964110">Nom du fournisseur</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb index a624c1c9..48850b0c 100644 --- a/chrome/app/resources/generated_resources_gl.xtb +++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Cargando vista previa</translation> <translation id="1032605640136438169">Revísaas</translation> <translation id="103279545524624934">Libera espazo en disco para iniciar as aplicacións de Android.</translation> -<translation id="1033343386521881354">Atopouse 1 impresora no servidor de impresión.</translation> <translation id="1033780634303702874">Acceder aos teus dispositivos en serie</translation> <translation id="1034942643314881546">Activando ADB para crear a ilustración de aplicacións</translation> <translation id="1036348656032585052">Desactivar</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Preme |<ph name="ACCELERATOR" />| para saír da pantalla completa</translation> <translation id="1038168778161626396">Só cifrar</translation> <translation id="1039337018183941703">O ficheiro non é válido ou está danado</translation> -<translation id="1039850285407663109">Descoñécese o ficheiro seleccionado e pode ser perigoso. É recomendable que o analices antes de abrilo.</translation> <translation id="1041175011127912238">Esta páxina non responde</translation> <translation id="1041263367839475438">Dispositivos dispoñibles</translation> <translation id="1042174272890264476">O ordenador tamén inclúe a biblioteca de <ph name="SHORT_PRODUCT_NAME" />. RLZ asigna unha etiqueta que non é exclusiva e sen identificación persoal para medir as buscas e o uso de <ph name="SHORT_PRODUCT_NAME" /> derivados dunha determinada campaña promocional. En ocasións estas etiquetas aparecen nas consultas de Busca de Google en <ph name="PRODUCT_NAME" />.</translation> @@ -638,7 +636,6 @@ <translation id="1858585891038687145">Confía neste certificado para identificar fabricantes de software</translation> <translation id="1861262398884155592">Este cartafol está baleiro</translation> <translation id="1863182668524159459">Non se encontrou ningún porto de serie</translation> -<translation id="1863552924692672565">Descoñécese o ficheiro <ph name="FILE_NAME" />. Analízao para minimizar o risco.</translation> <translation id="1864111464094315414">Inicio de sesión</translation> <translation id="1864400682872660285">Cores máis frías</translation> <translation id="1864454756846565995">Dispositivo USB-C (porto posterior)</translation> @@ -4024,7 +4021,6 @@ <translation id="6678717876183468697">URL da consulta</translation> <translation id="6680442031740878064">Espazo dispoñible: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Velocidade</translation> -<translation id="6681301928961274620">Non se atopou ningunha impresora no servidor de impresión.</translation> <translation id="6681668084120808868">Tirar foto</translation> <translation id="6681964764822470072">Desinstalarase "<ph name="APP_NAME" />".</translation> <translation id="668599234725812620">Abrir Google Play</translation> @@ -5553,7 +5549,6 @@ <translation id="8794025342371547160">IP restrinxida</translation> <translation id="879413103056696865">Mentres a zona wifi estea activada, o teu teléfono <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Nova ventá</translation> -<translation id="8797086401386164142">Atopáronse <ph name="NUM_PRINTERS" /> impresoras no servidor de impresión.</translation> <translation id="8797459392481275117">Non traducir nunca este sitio</translation> <translation id="8798099450830957504">Predeterminado</translation> <translation id="8798441408945964110">Nome do fornecedor</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb index 1cd0fbdd..0e6936f 100644 --- a/chrome/app/resources/generated_resources_gu.xtb +++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -33,7 +33,6 @@ <translation id="1036982837258183574">બહાર નીકળવા માટે |<ph name="ACCELERATOR" />| દબાવો</translation> <translation id="1038168778161626396">ફક્ત ચિહ્નિત કરો</translation> <translation id="1039337018183941703">અમાન્ય અથવા દૂષિત ફાઇલ</translation> -<translation id="1039850285407663109">પસંદ કરેલી ફાઇલ અજાણ છે અને જોખમકારક હોઈ શકે છે. આ ફાઇલ ખોલતા પહેલાં તપાસવાનું વિચારો.</translation> <translation id="1041175011127912238">આ પેજ પ્રતિભાવ આપી રહ્યું નથી</translation> <translation id="1041263367839475438">ઉપલબ્ધ ડિવાઇસ</translation> <translation id="1042174272890264476">તમારા કમ્પ્યુટરની સાથે <ph name="SHORT_PRODUCT_NAME" /> ની RLZ લાઇબ્રેરી બિલ્ટ ઇન પણ આવે છે. RLZ વિશેષ પ્રચારાત્મક ઝુંબેશ દ્વારા ચલાવવામાં આવતી શોધ અને <ph name="SHORT_PRODUCT_NAME" /> ઉપયોગને માપવા માટે બિન-અદ્વિતીય, બિન-વ્યક્તિગત રૂપે ઓળખી શકાય તેવા ટૅગ સોંપે છે. આ લેબલ્સ કેટલીકવાર <ph name="PRODUCT_NAME" /> માં Google શોધ ક્વેરીઝમાં દેખાય છે.</translation> @@ -152,6 +151,7 @@ <translation id="1197979282329025000">પ્રિંટર <ph name="PRINTER_NAME" /> માટે પ્રિંટર ક્ષમતાઓ પુનર્પ્રાપ્ત કરતી વખતે ભૂલ થઈ છે. આ પ્રિંટર <ph name="CLOUD_PRINT_NAME" /> સાથે નોંધાયેલું નથી.</translation> <translation id="119944043368869598">બધા દૂર કરો</translation> <translation id="1201402288615127009">આગલું</translation> +<translation id="1202556750060561551"><ph name="SITE_GROUP_NAME" />, તેની હેઠળ આવતી કોઈપણ સાઇટ તથા તેની ઇન્સ્ટૉલ કરેલી ઍપ દ્વારા સ્ટોર કરવામાં આવેલો બધો ડેટા અને કુકી સાફ કરવામાં આવશે.</translation> <translation id="1202596434010270079">કિઓસ્ક ઍપ્લિકેશન અપડેટ કરી. કૃપા કરીને USB સ્ટીક અપડેટ કરો.</translation> <translation id="120368089816228251">સંગીતનો સૂર</translation> <translation id="1205489148908752564">વ્હાઇટલિસ્ટ કરેલ વપરાશકર્તાઓને વાંચો અને બદલો</translation> @@ -279,8 +279,10 @@ <translation id="138784436342154190">ડિફૉલ્ટ સ્ટાર્ટઅપ પૃષ્ઠને પુનઃસ્થાપિત કરીએ?</translation> <translation id="1390548061267426325">નિયમિત ટૅબ તરીકે ખોલો</translation> <translation id="1393283411312835250">સૂર્ય અને વાદળો</translation> +<translation id="1393787139683794508">આનાથી <ph name="ORIGIN_NAME" /> દ્વારા સ્ટોર કરવામાં આવેલો બધો ડેટા અને કુકી સાફ કરવામાં આવશે.</translation> <translation id="1395730723686586365">અપડેટકર્તા પ્રારંભ કર્યું</translation> <translation id="1396139853388185343">પ્રિન્ટર સેટ કરવામાં ભૂલ</translation> +<translation id="1396259464226642517">શું આ પરિણામ અનપેક્ષિત હતું? <ph name="BEGIN_LINK" />પ્રતિસાદ મોકલો<ph name="END_LINK" /></translation> <translation id="1396963298126346194">તમે દાખલ કરેલ વપરાશકર્તાનામ અને પાસવર્ડ મેળ ખાતા નથી</translation> <translation id="1397500194120344683">કોઈ પાત્ર ડિવાઇસ નથી. <ph name="LINK_BEGIN" />વધુ જાણો<ph name="LINK_END" /></translation> <translation id="1398853756734560583">મોટું કરો</translation> @@ -550,6 +552,7 @@ <translation id="1758018619400202187">EAP-TLS</translation> <translation id="17584710573359123">Chrome વેબ સ્ટોરમાં જુઓ</translation> <translation id="176193854664720708">ફિંગરપ્રિન્ટ સેન્સર એ પાવર બટનમાં ઉપલબ્ધ છે. તેને કોઈપણ આંગળીથી હળવેથી સ્પર્શ કરો.</translation> +<translation id="176273057789108760">તમારી સંસ્થા ખેંચેલી ફાઇલોને સુરક્ષા મંજૂરી માટે સ્કૅન કરી રહી છે.</translation> <translation id="1763046204212875858">ઍપ્લિકેશન શૉર્ટકટ્સ બનાવો</translation> <translation id="1763108912552529023">અન્વેષણ કરતાં રહો</translation> <translation id="1763808908432309942">નવા ટૅબમાં ખૂલે છે</translation> @@ -588,6 +591,7 @@ <translation id="1805472176602625930">સુરક્ષા કોડ પરનું બટન દબાવો</translation> <translation id="1805738995123446102">બૅકગ્રાઉન્ડ ટૅબ તમારા માઇક્રોફોનનો ઉપયોગ કરી રહ્યું છે</translation> <translation id="1805822111539868586">દૃશ્યોની તપાસ કરો</translation> +<translation id="1805888043020974594">પ્રિન્ટ સર્વર</translation> <translation id="1805967612549112634">પિન કન્ફર્મ કરો</translation> <translation id="1809734401532861917">મારા બુકમાર્ક, ઇતિહાસ, પાસવર્ડ અને અન્ય સેટિંગ્સને <ph name="USER_EMAIL_ADDRESS" /> માં ઉમેરો</translation> <translation id="1813278315230285598">સેવાઓ</translation> @@ -629,7 +633,6 @@ <translation id="1858585891038687145">સૉફ્ટવેર માર્કર્સને ઓળખવા માટે આ પ્રમાણપત્ર પર વિશ્વાસ કરો</translation> <translation id="1861262398884155592">આ ફોલ્ડર ખાલી છે</translation> <translation id="1863182668524159459">કોઈ સીરિયલ પોર્ટ મળ્યાં નથી</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> અજાણ છે. જોખમ ઘટાડવા માટે ફાઇલ તપાસો.</translation> <translation id="1864111464094315414">લૉગિન</translation> <translation id="1864400682872660285">કૂલર</translation> <translation id="1864454756846565995">USB-C ઉપકરણ (પાછળનું પોર્ટ)</translation> @@ -736,6 +739,7 @@ <translation id="202352106777823113">ડાઉનલોડ ઘણો સમય લઈ રહ્યું હતું અને નેટવર્ક દ્વારા રોકવામાં આવ્યું હતું.</translation> <translation id="2025632980034333559"><ph name="APP_NAME" /> ક્રેશ થયું છે. એક્સ્ટેંશનને ફરીથી લોડ કરવા માટે આ બલૂન ક્લિક કરો.</translation> <translation id="2025891858974379949">અસુરક્ષિત કન્ટેન્ટ</translation> +<translation id="202918510990975568">સુરક્ષા ગોઠવવા અને સાઇન ઇન કરવા માટે તમારો પાસવર્ડ દાખલ કરો</translation> <translation id="2034346955588403444">અન્ય WiFi નેટવર્ક ઉમેરો</translation> <translation id="203574396658008164">લૉક સ્ક્રીનમાંથી નોંધ લેવાનું ચાલુ કરો</translation> <translation id="2037445849770872822">આ Google એકાઉન્ટ માટે નિરીક્ષણ સેટ કરવામાં આવ્યું છે. વધુ પેરેંટલ કન્ટ્રોલ સેટ અપ કરવા માટે, ચાલુ રાખો પસંદ કરો. @@ -887,6 +891,7 @@ <translation id="2224471211857467033">ઍક્સેસિબિલિટી ઇવેન્ટ</translation> <translation id="2224551243087462610">ફોલ્ડરના નામમાં ફેરફાર કરો</translation> <translation id="2226449515541314767">આ સાઇટને MIDI ઉપકરણોના સંપૂર્ણ નિયંત્રણ કરવાથી અવરોધિત કરવામાં આવી છે.</translation> +<translation id="222704500187107962">તમે હાલના છૂપા સત્રમાંથી બહાર નીકળો, તે પછી આ અપવાદને ઑટોમૅટિક રીતે કાઢી નાખવામાં આવશે</translation> <translation id="2227179592712503583">સૂચન દૂર કરો</translation> <translation id="2229161054156947610">1 કલાક કરતા વધુ બાકી</translation> <translation id="222931766245975952">ફાઇલ કપાયેલ છે</translation> @@ -940,6 +945,7 @@ <translation id="2300383962156589922"><ph name="APP_NAME" />ને કસ્ટમાઇઝ કરો અને નિયંત્રિત કરો</translation> <translation id="2301382460326681002">એક્સ્ટેંશન રૂટ ડિરેક્ટરી અમાન્ય છે.</translation> <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" એ અતિરિક્ત પરવાનગીઓની વિનંતી કરી છે.</translation> +<translation id="23055578400314116">વપરાશકર્તાનું નામ પસંદ કરો</translation> <translation id="2307462900900812319">નેટવર્ક ગોઠવો</translation> <translation id="230927227160767054">આ પૃષ્ઠ સેવા હેન્ડલર ઇન્સ્ટોલ કરવા માગે છે.</translation> <translation id="2309620859903500144">આ સાઇટને તમારા મોશન અથવા લાઇટ સેન્સરને ઍક્સેસ કરવાથી બ્લૉક કરવામાં આવી છે.</translation> @@ -979,6 +985,7 @@ <translation id="2353297238722298836">કૅમેરા અને માઇક્રોફોનની મંજૂરી</translation> <translation id="2356070529366658676">કહો</translation> <translation id="2357330829548294574"><ph name="USER_NAME" /> કાઢી નાખો</translation> +<translation id="235798134753548762">તમારી ઍપ, સેટિંગ અને વાઇ-ફાઇ પસંદગીઓને સિંક કરવામાં આવશે. ફેરફારો કરવા માટે, સેટઅપ પછી ગમે ત્યારે સેટિંગ પર જાઓ.</translation> <translation id="2359345697448000899">ટૂલ્સ મેનૂમાં એક્સટેંશનને ક્લિક કરીને તમારા એક્સ્ટેંશન્સને મેનેજ કરો.</translation> <translation id="2359808026110333948">આગળ વધો</translation> <translation id="236117173274098341">ઑપ્ટિમાઇઝ કરો</translation> @@ -1031,6 +1038,7 @@ <translation id="2436720498717686157">તમારી સંસ્થા માટે આ ડિવાઇસનું અત્યારે જ અપડેટ જરૂરી છે</translation> <translation id="2439545803278355377">તમારો નવો પિન દાખલ કરો. પિન ઓછામાં ઓછા ચાર અક્ષરનો હોવો જોઈએ અને તેમાં અક્ષરો, સંખ્યા અને અન્ય વર્ણો શામેલ હોઈ શકે છે.</translation> <translation id="2440604414813129000">&સ્રોત જુઓ</translation> +<translation id="244231003699905658">અમાન્ય ઍડ્રેસ. કૃપા કરીને ઍડ્રેસ ચેક કરીને ફરી પ્રયાસ કરો.</translation> <translation id="2442916515643169563">ટેક્સ્ટ શૅડો</translation> <translation id="2445081178310039857">એક્સ્ટેંશન રૂટ ડિરેક્ટરી જરૂરી છે.</translation> <translation id="2445484935443597917">એક નવી પ્રોફાઇલ બનાવો</translation> @@ -1085,6 +1093,7 @@ <translation id="2501278716633472235">પાછા જાઓ</translation> <translation id="2501797496290880632">એક શૉર્ટકટ લખો</translation> <translation id="2502441965851148920">સ્વચલિત અપડેટ્સ સક્ષમ કરેલ છે. તમારા વ્યવસ્થાપક દ્વારા મેન્યુઅલ અપડેટ્સ અક્ષમ કરવામાં આવ્યાં છે.</translation> +<translation id="2502719318159902502">સંપૂર્ણ ઍક્સેસ</translation> <translation id="2505127913256479918">આ નિરીક્ષિત એકાઉન્ટને ટૂંક સમયમાં કાઢી નાખવામાં આવશે</translation> <translation id="2505324914378689427">{SCREEN_INDEX,plural, =1{સ્ક્રીન #}one{સ્ક્રીન #}other{સ્ક્રીન #}}</translation> <translation id="2505402373176859469"><ph name="TOTAL_SIZE" /> માંથી <ph name="RECEIVED_AMOUNT" /></translation> @@ -1357,6 +1366,7 @@ <translation id="2865919525181940183">હાલમાં સ્ક્રીન પર છે તે પ્રોગ્રામનો સ્ક્રીનશૉટ</translation> <translation id="286674810810214575">પાવરના સ્રોતો શોધી રહ્યાં છીએ...</translation> <translation id="2867768963760577682">પિન કરેલા ટૅબ તરીકે ખોલો</translation> +<translation id="2868184003987917410">કોઈ સાઇટને તમારા વર્ચ્યુઅલ રિયાલિટી ડિવાઇસ/ડેટા ઍક્સેસ કરવાની મંજૂરી આપશો નહીં</translation> <translation id="2868746137289129307">આ એક્સ્ટેંશન જૂનું થઈ ગયું છે અને એન્ટરપ્રાઇસ પોલિસી દ્વારા બંધ થયું છે. જ્યારે એક નવું વર્ઝન ઉપલબ્ધ થાય ત્યારે તે ઑટોમૅટિક રીતે ચાલુ થઈ શકે છે.</translation> <translation id="2870560284913253234">સાઇટ</translation> <translation id="2870909136778269686">અપડેટ કરી રહ્યાં છીએ...</translation> @@ -1402,6 +1412,7 @@ <translation id="2916745397441987255">એક્સ્ટેન્શન્સ શોધો</translation> <translation id="2921081876747860777">તમારો સ્થાનિક ડેટા સુરક્ષિત કરવા માટે કૃપા કરીને એક પાસવર્ડ બનાવો.</translation> <translation id="2923234477033317484">આ એકાઉન્ટ કાઢી નાખો</translation> +<translation id="2925054096976782003">તમારી સંસ્થા પેસ્ટ કરેલા ડેટાને સુરક્ષા મંજૂરી માટે સ્કૅન કરી રહી છે.</translation> <translation id="2926085873880284723">ડિફૉલ્ટ શૉર્ટક્ટ ફરી મેળવો</translation> <translation id="2927017729816812676">કૅશ મેમરી સ્ટોરેજ</translation> <translation id="2931157624143513983">પ્રિન્ટ કરી શકાય એટલી જગ્યામાં બંધબેસતું કરો</translation> @@ -1425,6 +1436,7 @@ <translation id="2956070239128776395">ગ્રૂપમાં નેસ્ટ કરેલો વિભાગ: <ph name="ERROR_LINE" /></translation> <translation id="2957117904572187936">કોઈપણ સાઇટને તમારા ડિવાઇસમાંની ફાઇલો કે ફોલ્ડરોમાં ફેરફાર કરવાની મંજૂરી આપશો નહીં</translation> <translation id="2958721676848865875">પૅક એક્સટેન્શનની ચેતવણી</translation> +<translation id="2959127025785722291">કંઈક ખોટું થયું. સ્કૅન કરવાની પ્રક્રિયા પૂર્ણ થઈ શકી ન હતી. કૃપા કરીને ફરી પ્રયાસ કરો.</translation> <translation id="2959842337402130152">સ્ટોરેજ સ્પેસના અભાવના કારણે પહેલાંના જેવું કરી શકાતું નથી. ડિવાઇસમાંથી <ph name="SPACE_REQUIRED" /> ખાલી કરો અને ફરી પ્રયાસ કરો.</translation> <translation id="296026337010986570">થઈ થયું! નુકસાનકારક સૉફ્ટવેર કાઢી નાખ્યું. એક્સ્ટેંશન ફરી ચાલુ કરવા માટે, <a href="chrome://extensions">એક્સ્ટેંશન</a>ની મુલાકાત લો.</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" /> (એક્સ્ટેન્શન પ્રદાન કર્યું)</translation> @@ -1682,6 +1694,7 @@ <translation id="3348038390189153836">કાઢી નાખવા યોગ્ય ઉપકરણ મળ્યું</translation> <translation id="3349933790966648062">મેમરી ફૂટપ્રિન્ટ</translation> <translation id="3350117557200012647">જોડાણ કરવાના મોડમાં જાઓ</translation> +<translation id="3350244554415289209">જ્યારે કોઈ સાઇટ તમારા કૅમેરાની સ્થિતી ઍક્સેસ કરવા અથવા તમારા રૂમનો નકશો બનાવવા માગે ત્યારે પૂછો (સુઝાવ આપેલો છે)</translation> <translation id="3355936511340229503">કનેક્શન ભૂલ</translation> <translation id="3356580349448036450">પૂર્ણ</translation> <translation id="3359256513598016054">પ્રમાણપત્ર નીતિની મર્યાદાઓ</translation> @@ -1745,6 +1758,7 @@ <translation id="3448492834076427715">એકાઉન્ટ અપડેટ કરો</translation> <translation id="3449839693241009168">આદેશોને <ph name="EXTENSION_NAME" /> પર મોકલવા માટે <ph name="SEARCH_KEY" /> દબાવો</translation> <translation id="3450157232394774192">નિષ્ક્રિય સ્થિતિ અક્યુપન્સિ ટકા</translation> +<translation id="3451332697983754369">મારું <ph name="DEVICE_TYPE" /> સિંક કરો</translation> <translation id="3453612417627951340">પ્રમાણિતની જરૂર છે</translation> <translation id="3454157711543303649">સક્રિયતા પૂર્ણ</translation> <translation id="3454213325559396544">આ <ph name="DEVICE_TYPE" /> માટે આ છેલ્લું ઑટોમૅટિક સૉફ્ટવેર અને સુરક્ષા અપડેટ છે. ભાવિ અપડેટ મેળવવા માટે, નવા મૉડલ પર અપગ્રેડ કરો.</translation> @@ -1767,6 +1781,7 @@ <translation id="347785443197175480">તમારા કૅમેરા અને માઇક્રોફોનને ઍક્સેસ કરવા માટે <ph name="HOST" /> ને સતત મંજૂરી આપે છે </translation> <translation id="3478685642445675458">કોઇ વ્યક્તિને દૂર કરતા પહેલાં કૃપા કરીને તમારી પ્રોફાઇલ અનલૉક કરો.</translation> <translation id="3479552764303398839">હમણાં નહીં</translation> +<translation id="3479685872808224578">પ્રિન્ટ સર્વર શોધી શક્યા નથી. કૃપા કરીને ઍડ્રેસ ચેક કરીને ફરી પ્રયાસ કરો.</translation> <translation id="3481268647794498892"><ph name="COUNTDOWN_SECONDS" /> સેકન્ડમાં <ph name="ALTERNATIVE_BROWSER_NAME" />માં ખુલી રહ્યું છે</translation> <translation id="3484273680291419129">નુકસાનકારક સૉફ્ટવેર દૂર કરી રહ્યાં છીએ...</translation> <translation id="3484869148456018791">નવું પ્રમાણપત્ર મેળવો</translation> @@ -1882,6 +1897,7 @@ <translation id="3630132874740063857">તમારો ફોન</translation> <translation id="3630995161997703415">આ સાઇટને ગમે ત્યારે ઉપયોગમાં લેવા માટે તેને તમારા શેલ્ફમાં ઉમેરો</translation> <translation id="3634507049637220048"><ph name="NETWORK_COUNT" />માંથી નેટવર્ક <ph name="NETWORK_INDEX" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, તમારા વ્યવસ્થાપક દ્વારા મેનેજ કરવામાં આવે છે, વિગતો</translation> +<translation id="3635241501480133979">આ ડેટા તમારી સંસ્થાની સુરક્ષા નીતિઓનું ઉલ્લંઘન કરે છે અને તેને છોડી શકાશે નહીં.</translation> <translation id="3635353578505343390">Googleને પ્રતિસાદ મોકલો</translation> <translation id="3636096452488277381">હેલો, <ph name="USER_GIVEN_NAME" />.</translation> <translation id="3636766455281737684"><ph name="PERCENTAGE" />% - <ph name="TIME" /> બાકી</translation> @@ -1916,6 +1932,7 @@ <translation id="3677657024345889897">પૂર્ણ શાંતતા</translation> <translation id="3677911431265050325">મોબાઇલ સાઇટની વિનંતી કરો</translation> <translation id="3678156199662914018">એક્સ્ટેંશન: <ph name="EXTENSION_NAME" /></translation> +<translation id="3678613690490567106">બધા ડિવાઇસ પર મનગમતા અનુભવ માટે સિંક કરો</translation> <translation id="3681311097828166361">તમારા પ્રતિસાદ બદલ આભાર. તમે હમણાં ઑફલાઇન છો અને તમારી રિપોર્ટ પછીથી મોકલવામાં આવશે.</translation> <translation id="3682824389861648626">ગતિવિધિનો થ્રેશોલ્ડ</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> સ્ક્રીન શેરિંગ વિનંતી</translation> @@ -2426,6 +2443,7 @@ <translation id="4400632832271803360">ટોચની-પંક્તિ કીની વર્તણૂંક સ્વિચ કરવા માટે લૉન્ચર કીને દબાવી રાખો</translation> <translation id="4400963414856942668">ટૅબને બુકમાર્ક કરવા માટે તમે સ્ટાર પર ક્લિક કરી શકો છો</translation> <translation id="4403775189117163360">કોઈ અલગ ફોલ્ડર પસંદ કરો</translation> +<translation id="4404136731284211429">ફરી સ્કૅન કરો</translation> <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation> <translation id="4408599188496843485">સ&હાય</translation> <translation id="4409697491990005945">હાંસિયા</translation> @@ -2444,6 +2462,7 @@ <translation id="4421932782753506458">ફ્લફી</translation> <translation id="4423376891418188461">સેટિંગ્સ પુનઃસ્થાપિત કરો</translation> <translation id="442397852638519243"><ph name="USER_NAME" />, તમારા વ્યવસ્થાપક માટે આવશ્યક છે કે તમે તમારો પાસવર્ડ બદલો.</translation> +<translation id="4429030830601238961">આ ડેટા તમારી સંસ્થાની સુરક્ષા નીતિઓનું ઉલ્લંઘન કરે છે અને તેને પેસ્ટ કરી શકાશે નહીં.</translation> <translation id="4430019312045809116">વૉલ્યૂમ</translation> <translation id="4430369329743628066">બુકમાર્ક ઉમેરાયો</translation> <translation id="4434045419905280838">પૉપ-અપ અને રીડાયરેક્ટ</translation> @@ -2490,9 +2509,11 @@ <translation id="4501530680793980440">રીમૂવલની પુષ્ટિ કરો</translation> <translation id="4502423230170890588">આ ડિવાઇસમાંથી કાઢી નાખો</translation> <translation id="4504940961672722399">આ આયકન પર ક્લિક કરીને અથવા <ph name="EXTENSION_SHORTCUT" /> દબાવીને આ એક્સ્ટેંશનનો ઉપયોગ કરો.</translation> +<translation id="4507164039066603071">કોઈ સાઇટને તમારા કૅમેરાની સ્થિતી ઍક્સેસ કરવા અથવા તમારા રૂમનો નકશો બનાવવાની મંજૂરી આપશો નહીં</translation> <translation id="4508051413094283164">બધુ છુપી વિંડોમાં ખોલો</translation> <translation id="4508265954913339219">સક્રિયતા નિષ્ફળ</translation> <translation id="4508765956121923607">&સ્રોત જુઓ</translation> +<translation id="4510614391273086606">Linux ફાઇલો અને ઍપને તેની બૅકઅપ લીધેલી સ્થિતિમાં રિસ્ટોર કરવામાં આવી રહ્યાં છે.</translation> <translation id="451407183922382411"><ph name="COMPANY_NAME" /> દ્વારા સંચાલિત</translation> <translation id="4514610446763173167">વીડિઓ ચલાવવા અથવા થોભાવવા માટે તેને ટૉગલ કરો</translation> <translation id="451515744433878153">દૂર કરો</translation> @@ -2690,6 +2711,7 @@ <translation id="480990236307250886">હોમ પેજ ખોલો</translation> <translation id="4813136279048157860">મારી છબીઓ</translation> <translation id="4813512666221746211">નેટવર્ક ભૂલ</translation> +<translation id="4814378367953456825">આ ફિંગરપ્રિન્ટ માટેનું નામ દાખલ કરો</translation> <translation id="4820236583224459650">સક્રિય ટિકિટ તરીકે સેટ કરો</translation> <translation id="4821935166599369261">&પ્રોફાઇલિંગ સક્ષમ</translation> <translation id="4823484602432206655">વપરાશકર્તા અને ઉપકરણ સેટિંગ્સ વાંચો અને બદલો</translation> @@ -2736,6 +2758,7 @@ <translation id="4876895919560854374">સ્ક્રીન લૉક કરો અને અનલૉક કરો</translation> <translation id="4877276003880815204">ઘટકો તપાસો</translation> <translation id="4878653975845355462">તમારા વ્યવસ્થાપક દ્વારા કસ્ટમ બૅકગ્રાઉન્ડ બંધ કરવામાં આવ્યાં છે</translation> +<translation id="4878718769565915065">આ સિક્યુરિટી કીમાં ફિંગરપ્રિન્ટ ઉમેરવાનું નિષ્ફળ રહ્યું</translation> <translation id="4879491255372875719">ઑટોમૅટિક (ડિફૉલ્ટ)</translation> <translation id="4880328057631981605">ઍક્સેસ પૉઇન્ટનું નામ</translation> <translation id="4880827082731008257">ઇતિહાસ શોધ</translation> @@ -2866,6 +2889,7 @@ <translation id="5065775832226780415">Smart Lock</translation> <translation id="5067399438976153555">હંમેશાં ચાલુ</translation> <translation id="5067867186035333991"><ph name="HOST" /> તમારા માઇક્રોફોનને ઍક્સેસ કરવા માંગે છે કે કેમ તે પૂછો</translation> +<translation id="5068377946749700758">તમારી સંસ્થા ખેંચેલા ડેટાને સુરક્ષા મંજૂરી માટે સ્કૅન કરી રહી છે.</translation> <translation id="5068918910148307423">ડેટા મોકલવાનું અને પ્રાપ્ત કરવાનું સમાપ્ત કરવા માટે તાજેતરમાં બંધ કરેલ સાઇટ્સને મંજૂરી આપશો નહીં</translation> <translation id="5068919226082848014">પિઝા</translation> <translation id="5072052264945641674">કર્સરનું કદ સમાયોજિત કરો</translation> @@ -3058,6 +3082,7 @@ <translation id="5341793073192892252">નીચેની કુકી બ્લૉક કરવામાં આવી હતી (તૃતીય પક્ષ કુકી, કોઈ પણ અપવાદ સિવાય, બ્લૉક કરવામાં આવી રહી છે)</translation> <translation id="5341980496415249280">કૃપા કરીને રાહ જુઓ, પૅકિંગ કરીએ છીએ ...</translation> <translation id="5342091991439452114">PIN, ઓછામાં ઓછો <ph name="MINIMUM" /> અંકનો હોવો આવશ્યક છે</translation> +<translation id="5344036115151554031">Linux રિસ્ટોર કરી રહ્યાં છીએ</translation> <translation id="5352033265844765294">ટાઇમ સ્ટેમ્પિંગ</translation> <translation id="5353252989841766347">Chrome માંથી પાસવર્ડ્સનો નિકાસ કરો</translation> <translation id="5355099869024327351">આસિસ્ટંટને તમને નોટિફિકેશન બતાવવાની મંજૂરી આપે છે.</translation> @@ -3111,6 +3136,7 @@ <translation id="5427459444770871191">&ઘડિયાળની દિશામાં ફેરવો</translation> <translation id="542872847390508405">તમે અતિથિ તરીકે બ્રાઉઝ કરી રહ્યાં છો</translation> <translation id="5428850089342283580"><ph name="ACCNAME_APP" /> (અપડેટ ઉપલબ્ધ છે)</translation> +<translation id="542948651837270806">વિશ્વસનીય પ્લૅટફૉર્મ મૉડ્યૂલ ફર્મવેયર માટે અપડેટ ઇન્સ્ટૉલ કરવું જરૂરી છે. <ph name="TPM_FIRMWARE_UPDATE_LINK" /> જુઓ</translation> <translation id="5430931332414098647">ફટાફટ ટિથરિંગ</translation> <translation id="5431318178759467895">રંગ</translation> <translation id="5431825016875453137">OpenVPN / L2TP</translation> @@ -3292,6 +3318,7 @@ <translation id="5659593005791499971">ઇમેઇલ</translation> <translation id="5659833766619490117">આ પેજનો અનુવાદ કરી શકાયો નથી</translation> <translation id="5660204307954428567"><ph name="DEVICE_NAME" /> સાથે જોડાણ કરો</translation> +<translation id="5662513737565158057">Linux ઍપની કાર્ય કરવાની રીત બદલો.</translation> <translation id="5667546120811588575">Google Play સેટ કરી રહ્યાં છીએ...</translation> <translation id="5669267381087807207">સક્રિય કરી રહ્યું છે</translation> <translation id="5669691691057771421">નવો PIN દાખલ કરો</translation> @@ -3700,6 +3727,7 @@ <translation id="6238923052227198598">લૉક સ્ક્રીન પર એક એકદમ નવી નોંધ રાખો</translation> <translation id="6239558157302047471">&ફ્રેમ ફરીથી લોડ કરો</translation> <translation id="6241530762627360640">તમારા સિસ્ટમ સાથે જોડી બનાવેલા Bluetooth ડિવાઇસ વિશેની માહિતી ઍક્સેસ કરો અને નજીકના Bluetooth ડિવાઇસની શોધ કરો.</translation> +<translation id="6241844896329831164">કોઈ ઍક્સેસની જરૂર નથી</translation> <translation id="6242589501614145408">તમારા સુરક્ષા કોડને રીસેટ કરો</translation> <translation id="6242852299490624841">આ ટૅબ પર ફોકસ કરો</translation> <translation id="6243280677745499710">હાલમાં સેટ કરેલ</translation> @@ -3900,6 +3928,8 @@ <translation id="6531282281159901044">જોખમી ફાઇલ રાખો</translation> <translation id="6532101170117367231">Google ડ્રાઇવ પર સાચવો</translation> <translation id="6532106788206463496">ફેરફારો સાચવો</translation> +<translation id="6532206849875187177">સુરક્ષા અને સાઇન ઇન</translation> +<translation id="6532527800157340614">સાઇન ઇન નિષ્ફળ થયું કારણ કે તમારું એક્સેસ ટોકન પાછું મેળવી શકાયું ન હતું. કૃપા કરીને તમારું નેટવર્ક કનેક્શન ચેક કરો અને ફરી પ્રયાસ કરો.</translation> <translation id="6532663472409656417">એન્ટરપ્રાઇઝ દ્વારા નોંધણી કરાયેલું</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" /> નોંધ: <ph name="END_BOLD" /> જો તમે શું કરી રહ્યાં છો તે તમે જાણતા હો અથવા જો તમને તેવું કરવા માટે કહેવામાં આવ્યું હોય તો જ ચાલુ કરો, કારણ કે ડેટાનો સંગ્રહ પ્રદર્શન પર અસર કરી શકે છે.</translation> <translation id="6541638731489116978">આ સાઇટને તમારા મોશન સેન્સરને ઍક્સેસ કરવાથી બ્લૉક કરવામાં આવી છે.</translation> @@ -3907,6 +3937,7 @@ <translation id="6545864417968258051">બ્લૂટૂથ સ્કૅનિંગ</translation> <translation id="6545867563032584178">Mac સિસ્ટમ પસંદગીઓમાં માઇક્રોફોન બંધ કરેલું છે</translation> <translation id="6547354035488017500">ઓછામાં ઓછું 512 MB સ્થાન ખાલી કરો અથવા તમારું ડિવાઇસ કામ નહિ કરે. સ્થાન ખાલી કરવા માટે, ડ્રાઇવ સ્ટોરેજમાંથી ફાઇલો ડિલીટ કરો.</translation> +<translation id="6549966385318247177">પુખ્ત લોકો માટેનું કન્ટેન્ટ હોવાને કારણે આને બ્લૉક કરવામાં આવ્યું છે.</translation> <translation id="6550675742724504774">વિકલ્પો</translation> <translation id="6551508934388063976">આદેશ અનુપલબ્ધ. એક નવી વિંડોમાં ખોલવા માટે કંટ્રોલ-N દબાવો.</translation> <translation id="6551612971599078809">સાઇટ USBનો ઉપયોગ કરી રહી છે</translation> @@ -4238,6 +4269,7 @@ <translation id="703001695939087067">વિંડો ઝલક મોડમાં દાખલ થયાં. નૅવિગેટ કરવા માટે tab દબાવો.</translation> <translation id="7031608529463141342"><ph name="WINDOW_TITLE" /> - સિરીઅલ પોર્ટ કનેક્ટ કર્યું</translation> <translation id="7031962166228839643">TPM બનાવાઈ રહી છે, કૃપા કરીને રાહ જુઓ (આમાં થોડીવાર લાગી શકે છે)...</translation> +<translation id="7034615910652881882">જ્યારે કોઈ સાઇટ તમારા વર્ચ્યુઅલ રિયાલિટી ડિવાઇસ/ડેટાને ઍક્સેસ કરવા માગે ત્યારે પૂછો</translation> <translation id="7037509989619051237">ટેક્સ્ટ ટૂ સ્પીચના પ્રીવ્યૂ માટે</translation> <translation id="7039326228527141150"><ph name="VENDOR_NAME" /> થી USB ઉપકરણો ઍક્સેસ કરો</translation> <translation id="7039912931802252762">Microsoft Smart Card Logon</translation> @@ -4277,6 +4309,7 @@ <translation id="7081952801286122383">તમે છૂપા મોડમાં છો</translation> <translation id="708278670402572152">સ્કૅનિંગ ચાલુ કરવા માટે ડિસ્કનેક્ટ કરો</translation> <translation id="7085389578340536476">ઑડિઓ રેકોર્ડ કરવા માટે Chromeને મંજૂરી આપીએ?</translation> +<translation id="7086467953285486445">આ ફાઇલો તમારી સંસ્થાની સુરક્ષા નીતિઓનું ઉલ્લંઘન કરે છે અને તેને છોડી શકાશે નહીં.</translation> <translation id="7088434364990739311">અપડેટ તપાસ પ્રારંભ કરવામાં નિષ્ફળ થયું (ભૂલ કોડ <ph name="ERROR" />).</translation> <translation id="7088561041432335295">ઝિપ આર્કાઇવર - Files ઍપમાં ઝિપ ફાઇલો ખોલો અને પૅક કરો.</translation> <translation id="7088674813905715446">આ ડિવાઇસને વ્યવસ્થાપક દ્વારા જોગવાઈ દૂર કરેલી સ્થિતિમાં મૂકવામાં આવ્યું છે. નોંધણી માટે તેને ચાલુ કરવા, કૃપા કરીને તમારા વ્યવસ્થાપકને ડિવાઇસને બાકી સ્થિતિમાં મૂકવા દો.</translation> @@ -4390,6 +4423,7 @@ <translation id="7241389281993241388">ક્લાયંટ પ્રમાણપત્ર આયાત કરવા માટે કૃપા કરીને <ph name="TOKEN_NAME" /> પર સાઇન ઇન કરો.</translation> <translation id="7241443820034350811">તમારો સુરક્ષા કોડ સૂચિબદ્ધ ન હોય, તો તેનું બટન ઓછામાં ઓછી 5 સેકન્ડ સુધી દબાવો.</translation> <translation id="7243632151880336635">સાફ કરો અને સાઇન આઉટ કરો</translation> +<translation id="7243784282103630670">Linux અપગ્રેડ કરતી વખતે ભૂલ આવી હતી. તમારા બૅકઅપનો ઉપયોગ કરીને અમે કન્ટેનરને રિસ્ટોર કરીશું.</translation> <translation id="7245628041916450754"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (શ્રેષ્ઠ)</translation> <translation id="7246230585855757313">તમારો સુરક્ષા કોડ ફરી શામેલ કરીને ફરી પ્રયાસ કરો</translation> <translation id="7246947237293279874">FTP પ્રૉક્સી</translation> @@ -4476,6 +4510,7 @@ <translation id="7360233684753165754"><ph name="PAGE_NUMBER" /> પેજને <ph name="PRINTER_NAME" /> પર મોકલ્યાં</translation> <translation id="7361297102842600584"><ph name="PLUGIN_NAME" /> ચલાવવા માટે રાઇટ-ક્લિક કરો</translation> <translation id="7363117941401515667"><ph name="HOURS" /> કલાક પહેલાં અપડેટ કર્યું</translation> +<translation id="7364591875953874521">ઍક્સેસની વિનંતી કરી</translation> <translation id="7364796246159120393">ફાઇલ પસંદ કરો</translation> <translation id="7366415735885268578">એક સાઇટ ઉમેરો</translation> <translation id="7366909168761621528">બ્રાઉઝિંગ ડેટા</translation> @@ -4501,6 +4536,7 @@ <translation id="740624631517654988">પૉપ-અપ બ્લૉક કરેલું છે</translation> <translation id="7407430846095439694">આયાત કરો અને પ્રતિબદ્ધ કરો</translation> <translation id="7407504355934009739">મોટાભાગના લોકો આ સાઇટના બધા નોટિફિકેશનને બ્લૉક કરે છે</translation> +<translation id="740810853557944681">પ્રિન્ટ સર્વર ઉમેરો</translation> <translation id="7409549334477097887">વધુ મોટી</translation> <translation id="7409836189476010449">ફ્લેશ ચલાવો</translation> <translation id="7410344089573941623">પૂછો કે <ph name="HOST" /> તમારા કૅમેરા અને માઇક્રોફોનને ઍક્સેસ કરવા માંગે છે કે કેમ</translation> @@ -4521,6 +4557,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{તમામ URLને &નવી વિંડોમાં ખોલો}=1{URLને &નવી વિંડોમાં ખોલો}one{તમામ (#) URLને &નવી વિંડોમાં ખોલો}other{તમામ (#) URLને &નવી વિંડોમાં ખોલો}}</translation> <translation id="7434509671034404296">વિકાસકર્તા</translation> <translation id="7434635829372401939">તમારા સેટિંગને સિંક કરો</translation> +<translation id="7434969625063495310">પ્રિન્ટ સર્વર ઉમેરી શક્યા નથી. કૃપા કરીને સર્વરની ગોઠવણી ચેક કરો અને ફરી પ્રયાસ કરો.</translation> <translation id="7436921188514130341">અરેરે! નામ બદલતી વખતે એક ભૂલ આવી હતી.</translation> <translation id="7438976808740265764">2020 ડિસેમ્બર પછી Flash Player ચાલશે નહીં.</translation> <translation id="7441736921018636843">આ સેટિંગ બદલવા, સિંક પાસફ્રેઝ કાઢી નાખવા માટે <ph name="BEGIN_LINK" />સિંક રીસેટ કરો<ph name="END_LINK" /></translation> @@ -4530,8 +4567,10 @@ <translation id="7443806024147773267">તમે જ્યારે પણ તમારા Google એકાઉન્ટમાં સાઇન ઇન કરેલું હોય ત્યારે તમારા પાસવર્ડને ઍક્સેસ કરો</translation> <translation id="7444983668544353857"><ph name="NETWORKDEVICE" /> બંધ કરો</translation> <translation id="7448430327655618736">ઍપ ઑટોમૅટિક રીતે ઇન્સ્ટૉલ કરો</translation> +<translation id="7448625729116931228">જ્યારે કોઈ સાઇટ તમારા વર્ચ્યુઅલ રિયાલિટી ડિવાઇસ/ડેટાને ઍક્સેસ કરવા માગે, ત્યારે પૂછો (સુઝાવ આપેલો છે)</translation> <translation id="7450761244949417357">હમણાં <ph name="ALTERNATIVE_BROWSER_NAME" />માં ખુલી રહ્યું છે</translation> <translation id="7453008956351770337">આ પ્રિન્ટરને પસંદ કરીને, તમે નીચેના એક્સ્ટેન્શનને તમારા પ્રિન્ટરને ઍક્સેસ કરવાની પરવાનગી આપી રહ્યાં છો:</translation> +<translation id="7454548535253569100">પોર્ટલ: <ph name="SUBFRAME_SITE" /></translation> <translation id="7456142309650173560">dev</translation> <translation id="7456847797759667638">સ્થાન ખોલો...</translation> <translation id="7458168200501453431">Google શોધમાં જે જોડણી તપાસનારનો ઉપયોગ થાય છે તેનો જ ઉપયોગ કરે છે. તમે બાઉઝરમાં ટાઇપ કરો છો તે ટેક્સ્ટ Googleને મોકલવામાં આવે છે.</translation> @@ -4577,6 +4616,7 @@ <translation id="7513029293694390567">સંગ્રહિત ઓળખપત્રનો ઉપયોગ કરીને વેબસાઇટ્સમાં આપમેળે સાઇન ઇન કરો. જો અક્ષમ કરેલ હોય, તો વેબસાઇટમાં સાઇન ઇન કરતાં પહેલાં દર વખતે તમને પુષ્ટિકરણ માટે કહેવામાં આવશે.</translation> <translation id="7514239104543605883">તમારા ડિવાઇસ પર કૉપિ કરો</translation> <translation id="7514365320538308">ડાઉનલોડ કરો</translation> +<translation id="7520766081042531487">છૂપું પોર્ટલ: <ph name="SUBFRAME_SITE" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7522255036471229694">"Ok Google" કહો</translation> <translation id="7525067979554623046">બનાવો</translation> @@ -4665,6 +4705,7 @@ <translation id="7652808307838961528">વ્યક્તિના <ph name="PROFILE_NAME" />માં ફેરફાર કરો</translation> <translation id="765293928828334535">આ વેબસાઇટ પરથી ઍપ, એક્સ્ટેંશન અને વપરાશકર્તા સ્ક્રિપ્ટ ઉમેરી શકાતી નથી</translation> <translation id="7652954539215530680">PIN બનાવો</translation> +<translation id="7653295403398566475">જ્યારે કોઈ સાઇટ તમારા કૅમેરાની સ્થિતી ઍક્સેસ કરવા અથવા તમારા રૂમનો નકશો બનાવવા માગે ત્યારે પૂછો</translation> <translation id="7654941827281939388">આ એકાઉન્ટ પહેલાથીજ આ કમ્પ્યુટર પર ઉપયોગમાં લેવાઈ રહ્યું છે.</translation> <translation id="7658239707568436148">રદ કરો</translation> <translation id="7659584679870740384">તમે આ ઉપકરણ વાપરવા માટે અધિકૃત નથી. કૃપા કરીને સાઇન ઇન કરવાની પરવાનગી માટે વ્યવસ્થાપકનો સંપર્ક કરો.</translation> @@ -4816,6 +4857,7 @@ <translation id="783214144752121388">સાઇટને ફ્લૅશ (સુઝાવ આપેલ) ચલાવવાથી બ્લૉક કરો</translation> <translation id="7833720883933317473">સાચવેલ કસ્ટમ શબ્દો અહીં દેખાશે</translation> <translation id="7835178595033117206">બુકમાર્ક કાઢી નાખ્યું</translation> +<translation id="7836850009646241041">તમારી સિક્યુરિટી કીને ફરી સ્પર્શ કરી જુઓ</translation> <translation id="7837776265184002579">તમારું હોમપેજ, <ph name="URL" /> પર બદલ્યું હતું.</translation> <translation id="7839051173341654115">મીડિયા જુઓ/બૅકઅપ લો</translation> <translation id="7839192898639727867">પ્રમાણપત્ર વિષય કી ID</translation> @@ -5126,7 +5168,9 @@ <translation id="8260864402787962391">માઉસ</translation> <translation id="8261378640211443080">આ એક્સટેન્શન <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> માં સૂચિબદ્ધ નથી અને તમારી જાણ વિના ઉમેરવામાં આવ્યું હોઈ શકે છે.</translation> <translation id="8261506727792406068">ડિલીટ કરો</translation> +<translation id="8263336784344783289">આ ગ્રૂપને નામ આપો</translation> <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" /> એ તમારા માઉસ કર્સરને અક્ષમ કર્યું છે.</translation> +<translation id="8264024885325823677">આ સેટિંગને તમારા વ્યવસ્થાપક દ્વારા મેનેજ કરવામાં આવે છે.</translation> <translation id="8264718194193514834"><ph name="EXTENSION_NAME" /> એ પૂર્ણ સ્ક્રીનને ટ્રિગર કરેલી છે.</translation> <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />આ ડિવાઇસ અને તે કેવી રીતે ઉપયોગમાં લેવાય છે (જેમ કે બૅટરીનું લેવલ, સિસ્ટમ અને ઍપ પ્રવૃત્તિ તેમજ ભૂલો) વિશેની આ સામાન્ય માહિતી છે. આ ડેટાનો ઉપયોગ Androidને બહેતર બનાવવા માટે કરવામાં આવશે અને અમુક એકીકૃત માહિતી, Google ઍપ અને ભાગીદારો, જેમ કે Android ડેવલપરને પણ તેઓની ઍપ અને પ્રોડક્ટને બહેતર બનાવવામાં સહાયરૂપ થશે.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />આ સુવિધાને બંધ કરવાથી સિસ્ટમ અપડેટ અને સુરક્ષા જેવી આવશ્યક સેવાઓ માટે આવશ્યક માહિતી મોકલવાની આ ડિવાઇસની ક્ષમતાને અસર થતી નથી.<ph name="END_PARAGRAPH2" /> @@ -5382,6 +5426,7 @@ <translation id="8650543407998814195">જો કે તમે હવે તમારી જૂની પ્રોફાઇલ ઍક્સેસ કરી શકતા નથી, છતાં તમે તેને કાઢી નાખી શકો છો.</translation> <translation id="8651585100578802546">આ પૃષ્ઠ ફરીથી લોડ કરવા દબાણ કરો</translation> <translation id="8652400352452647993">પૅક એક્સટેન્શન ભૂલ</translation> +<translation id="8653578191563425126">Crostini માટે આરક્ષિત રાખવાની ડિસ્ક સ્પેસ (તમે આને પછી બદલી શકો છો).</translation> <translation id="8654151524613148204">આ ફાઇલ તમારા કમ્પ્યુટરને સંચાલિત કરવા માટે ખૂબ મોટી છે. માફ કરશો.</translation> <translation id="8655295600908251630">ચેનલ</translation> <translation id="8655319619291175901">અરેરે, કંઈક ખોટું થયું.</translation> @@ -5646,6 +5691,7 @@ <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> દિવસ પહેલાં સક્રિય</translation> <translation id="8986362086234534611">ભૂલી ગયા</translation> <translation id="8986494364107987395">ઉપયોગિતા આંકડાઓ અને ક્રૅશ રિપોર્ટ Googleને ઑટોમૅટિક રીતે મોકલો</translation> +<translation id="8986651757229422279">આનાથી <ph name="ORIGIN_NAME" /> અને તેની ઇન્સ્ટૉલ કરેલી ઍપ દ્વારા સ્ટોર કરવામાં આવેલો બધો ડેટા અને કુકી સાફ કરવામાં આવશે.</translation> <translation id="8987927404178983737">મહિનો</translation> <translation id="8991520179165052608">સાઇટ તમારા માઇક્રોફોનનો ઉપયોગ કરી શકે છે</translation> <translation id="899403249577094719">નેટસ્કેપ પ્રમાણપત્ર બેઝ URL</translation> @@ -5797,6 +5843,7 @@ <translation id="932508678520956232">છાપકામ શરૂ કરી શકાયું નથી.</translation> <translation id="93343527085570547">કાનૂની કારણોસર કન્ટેન્ટમાં ફેરફારોની વિનંતી કરવા માટે <ph name="BEGIN_LINK1" />કાનૂની સહાય પેજ<ph name="END_LINK1" /> પર જાઓ. એકાઉન્ટ અને સિસ્ટમ વિશેની અમુક માહિતી Googleને મોકલવામાં આવી શકે છે. તમે અમને આપો છો તે માહિતીનો ઉપયોગ અમે તકનીકી સમસ્યાઓને હલ કરવા માટે અને અમારી સેવાઓને બહેતર બનાવવા માટે અમારી <ph name="BEGIN_LINK2" />ગોપનીયતા નીતિ<ph name="END_LINK2" /> અને <ph name="BEGIN_LINK3" />સેવાની શરતો<ph name="END_LINK3" />ને આધીન કરીશું.</translation> <translation id="93393615658292258">ફક્ત પાસવર્ડ</translation> +<translation id="934244546219308557">આ ગ્રૂપને નામ આપો</translation> <translation id="934503638756687833">જો જરૂર જણાય તો, જે આઇટમ અહીંની સૂચિમાં નથી તે પણ કાઢી નાખવામાં આવશે. Chrome ગોપનીયતા વ્હાઇટ પેપરમાં <a href="<ph name="URL" />">ન જોઈતા સૉફ્ટવેર સામે રક્ષણ મેળવવા</a> વિશે વધુ જાણો.</translation> <translation id="935490618240037774">તમારા Google એકાઉન્ટ પર તમારા બુકમાર્ક, ઇતિહાસ, પાસવર્ડ અને બીજા સેટિંગ સિંક કરવામાં આવશે જેથી કરીને તમે તમારા બધા ડિવાઇસ પર એનો ઉપયોગ કરી શકો</translation> <translation id="935854577147268200">Smart Lock ફોન બદલાયો. Smart Lock અપડેટ કરવા માટે તમારો પાસવર્ડ દાખલ કરો. આગલી વખતે, તમારો ફોન તમારા <ph name="DEVICE_TYPE" />ને અનલૉક કરશે. તમે સેટિંગમાં Smart Lock બંધ કરી શકો છો</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb index d8cf605..8eba5d8 100644 --- a/chrome/app/resources/generated_resources_hi.xtb +++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -33,7 +33,6 @@ <translation id="1036982837258183574">फ़ुल स्क्रीन से बाहर निकलने के लिए |<ph name="ACCELERATOR" />| दबाएं</translation> <translation id="1038168778161626396">केवल कूटलेखन</translation> <translation id="1039337018183941703">अमान्य या खराब फ़ाइल</translation> -<translation id="1039850285407663109">चुनी गई फ़ाइल अज्ञात है और खतरनाक हो सकती है. इस फ़ाइल को खोलने से पहले स्कैन करें.</translation> <translation id="1041175011127912238">इस पेज से जवाब नहीं मिल रहा है</translation> <translation id="1041263367839475438">उपलब्ध डिवाइस</translation> <translation id="1042174272890264476">आपके कंप्यूटर में पहले से ही <ph name="SHORT_PRODUCT_NAME" /> की RLZ लाइब्रेरी होती है. किसी खास प्रचार कैंपेन में इस्तेमाल हुई खोजों और <ph name="SHORT_PRODUCT_NAME" /> के इस्तेमाल को मापने के लिए, RLZ एक बिना-विशिष्ट, बिना निजी तौर वाला टैग तय करता है. कभी-कभी ये लेबल <ph name="PRODUCT_NAME" /> में 'Google सर्च' क्वेरी में दिखाई देते हैं.</translation> @@ -633,7 +632,6 @@ <translation id="1858585891038687145">सॉफ़्टवेयर निर्माताओं की पहचान करने के लिए इस प्रमाणपत्र पर विश्वास करें</translation> <translation id="1861262398884155592">यह फ़ोल्डर खाली है</translation> <translation id="1863182668524159459">काेई सीरियल पाेर्ट नहीं मिला</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> अज्ञात है. जोखिम कम करने के लिए फ़ाइल स्कैन करें.</translation> <translation id="1864111464094315414">प्रवेश करें</translation> <translation id="1864400682872660285">कूलर</translation> <translation id="1864454756846565995">USB-C डिवाइस (पिछला पोर्ट)</translation> @@ -4470,7 +4468,7 @@ <translation id="7352651011704765696">कुछ गलत हुआ</translation> <translation id="735361434055555355">Linux इंस्टॉल किया जा रहा है...</translation> <translation id="7353887511974462734">मौजूदा समूह में जोड़ें</translation> -<translation id="7354341762311560488">आपके कीबोर्ड पर सबसे नीचे बाईं ओर वाली कुंजी, फ़िंगरप्रिंट का सेंसर है. किसी भी उंगली से इसे हल्के से छुएं.</translation> +<translation id="7354341762311560488">आपके कीबोर्ड पर सबसे नीचे बाईं ओर वाली कुंजी, फ़िंगरप्रिंट सेंसर है. किसी भी उंगली से इसे हल्के से छुएं.</translation> <translation id="735745346212279324">VPN डिसकनेक्ट है</translation> <translation id="7359588939039777303">विज्ञापन ब्लॉक हैं.</translation> <translation id="7360183604634508679">बुकमार्क मेन्यू</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index 0aaa3ce..4864415 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Učitavanje pregleda</translation> <translation id="1032605640136438169">Pregledajte nove uvjete</translation> <translation id="103279545524624934">Oslobodite prostor na disku da biste pokrenuli Android aplikacije.</translation> -<translation id="1033343386521881354">Pronađen je jedan pisač s poslužitelja za ispis.</translation> <translation id="1033780634303702874">pristupiti vašim serijski spojenim uređajima</translation> <translation id="1034942643314881546">Omogućavanje adb-a za stvaranje ilustracije aplikacija</translation> <translation id="1036348656032585052">Isključi</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Pritisnite |<ph name="ACCELERATOR" />| da biste zatvorili prikaz na cijelom zaslonu</translation> <translation id="1038168778161626396">Samo za šifriranje</translation> <translation id="1039337018183941703">Neispravna ili oštećena datoteka</translation> -<translation id="1039850285407663109">Odabrana datoteka nije poznata i može biti opasna. Preporučujemo da je prije otvaranja skenirate.</translation> <translation id="1041175011127912238">Stranica ne reagira</translation> <translation id="1041263367839475438">Dostupni uređaji</translation> <translation id="1042174272890264476">Vaše računalo ima ugrađenu RLZ biblioteku preglednika <ph name="SHORT_PRODUCT_NAME" />. RLZ dodjeljuje nejedinstvenu oznaku koja ne može poslužiti za osobnu identifikaciju za mjerenje pretraživanja i upotrebu proizvoda <ph name="SHORT_PRODUCT_NAME" /> potaknutu određenom promotivnom kampanjom. Te se oznake ponekad prikazuju u upitima Google pretraživanja u pregledniku <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Vjeruj ovom certifikatu za identifikaciju proizvođača softvera</translation> <translation id="1861262398884155592">Mapa je prazna</translation> <translation id="1863182668524159459">Nije pronađen nijedan serijski priključak</translation> -<translation id="1863552924692672565">Datoteka <ph name="FILE_NAME" /> nije poznata. Skenirajte datoteku da biste smanjili rizik.</translation> <translation id="1864111464094315414">Prijava</translation> <translation id="1864400682872660285">Hladnije</translation> <translation id="1864454756846565995">USB-C uređaj (stražnji priključak)</translation> @@ -3066,7 +3063,7 @@ <translation id="5311304534597152726">Prijavite se kao</translation> <translation id="53116743016968120"><ph name="ERROR_MESSAGE" /> Pokušajte ponovo.</translation> <translation id="5313628438272378649">Ovim prijenosom krše se sigurnosna pravila vaše organizacije te se on ne može dovršiti.</translation> -<translation id="5314381603623123224">Chromeovi Uvjeti pružanja usluge mijenjaju se 31. ožujka</translation> +<translation id="5314381603623123224">Chromeovi uvjeti pružanja usluge mijenjaju se 31. ožujka</translation> <translation id="5315738755890845852">Dodatna vitičasta zagrada: <ph name="ERROR_LINE" /></translation> <translation id="5315873049536339193">Identitet</translation> <translation id="5317780077021120954">Spremi</translation> @@ -4025,7 +4022,6 @@ <translation id="6678717876183468697">URL upita</translation> <translation id="6680442031740878064">Dostupno: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Brzina</translation> -<translation id="6681301928961274620">Nije pronađen nijedan pisač s poslužitelja za ispis.</translation> <translation id="6681668084120808868">Snimite fotografiju</translation> <translation id="6681964764822470072">Aplikacija "<ph name="APP_NAME" />" deinstalirat će se.</translation> <translation id="668599234725812620">Otvori Google Play</translation> @@ -5555,7 +5551,6 @@ <translation id="8794025342371547160">Ograničeni IP</translation> <translation id="879413103056696865">Dok je žarišna točka uključena, vaš će <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Novi prozor</translation> -<translation id="8797086401386164142">Pronađeno pisača s poslužitelja za ispis: <ph name="NUM_PRINTERS" />.</translation> <translation id="8797459392481275117">Nikad nemoj prevoditi ovu web-lokaciju</translation> <translation id="8798099450830957504">Zadano</translation> <translation id="8798441408945964110">Naziv davatelja usluge</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb index a14bc2a..c285ebca 100644 --- a/chrome/app/resources/generated_resources_hu.xtb +++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Előnézet betöltése</translation> <translation id="1032605640136438169">Kérjük, tekintse meg az új Feltételeket</translation> <translation id="103279545524624934">Szabadítson fel tárhelyet az Android-alkalmazások elindításához.</translation> -<translation id="1033343386521881354">1 nyomtató található a nyomtatószerveren.</translation> <translation id="1033780634303702874">Hozzáférés a soros eszközökhöz</translation> <translation id="1034942643314881546">Illusztráció: Alkalmazások létrehozásának engedélyezése az ADB számára</translation> <translation id="1036348656032585052">Kikapcsolás</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">A teljes képernyős nézetből való kilépéshez nyomja meg a következő billentyűt: |<ph name="ACCELERATOR" />|</translation> <translation id="1038168778161626396">Csak titkosítás</translation> <translation id="1039337018183941703">Érvénytelen vagy sérült fájl</translation> -<translation id="1039850285407663109">A kiválasztott fájl ismeretlen, és veszélyes lehet. Fontolja meg az ellenőrzését, mielőtt megnyitja.</translation> <translation id="1041175011127912238">Az oldal nem válaszol</translation> <translation id="1041263367839475438">Rendelkezésre álló eszközök</translation> <translation id="1042174272890264476">Számítógépe a <ph name="SHORT_PRODUCT_NAME" /> RLZ-könyvtárát is tartalmazza beépítve. Az RLZ egy nem egyedi, személy szerinti azonosításra nem alkalmas címkét rendel hozzá a keresések és a <ph name="SHORT_PRODUCT_NAME" /> használatának egy adott promóciós kampány keretein belüli felméréséhez. Ezek a címkék időnként a <ph name="PRODUCT_NAME" /> Google-keresési lekérdezéseiben is feltűnnek.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Bízzon meg ebben a tanúsítványban a szoftvergyártók azonosításakor</translation> <translation id="1861262398884155592">Ez a mappa üres</translation> <translation id="1863182668524159459">Nem található soros port</translation> -<translation id="1863552924692672565">A(z) <ph name="FILE_NAME" /> fájl ismeretlen. A kockázatok csökkentése érdekében ellenőrizze.</translation> <translation id="1864111464094315414">Bejelentkezés</translation> <translation id="1864400682872660285">Hideg színek</translation> <translation id="1864454756846565995">C típusú USB-vel kompatibilis eszköz (hátsó port)</translation> @@ -4026,7 +4023,6 @@ <translation id="6678717876183468697">Lekérdezés URL-je</translation> <translation id="6680442031740878064">Rendelkezésre álló tárhely: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Értékelés</translation> -<translation id="6681301928961274620">Nem található nyomtató a nyomtatószerveren.</translation> <translation id="6681668084120808868">Fényképkészítés</translation> <translation id="6681964764822470072">A(z) „<ph name="APP_NAME" />” el lesz távolítva.</translation> <translation id="668599234725812620">A Google Play megnyitása</translation> @@ -5556,7 +5552,6 @@ <translation id="8794025342371547160">Korlátozott IP</translation> <translation id="879413103056696865">Amíg a hotspot be van kapcsolva, az Ön <ph name="PHONE_NAME" /> telefonja:</translation> <translation id="8795916974678578410">Új ablak</translation> -<translation id="8797086401386164142"><ph name="NUM_PRINTERS" /> nyomtató található a nyomtatószerveren.</translation> <translation id="8797459392481275117">Ezt a webhelyet soha ne fordítsa le</translation> <translation id="8798099450830957504">Alapértelmezett</translation> <translation id="8798441408945964110">Szolgáltató neve</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb index cbd7f15..cf16ed47 100644 --- a/chrome/app/resources/generated_resources_hy.xtb +++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Նախադիտման բեռնում</translation> <translation id="1032605640136438169">Ծանոթացեք նոր պայմաններին</translation> <translation id="103279545524624934">Android հավելվածները գործարկելու համար ազատեք սկավառակի տարածքը:</translation> -<translation id="1033343386521881354">Տպման սերվերում գտնվել է 1 տպիչ։</translation> <translation id="1033780634303702874">Մուտք գործել ձեր հաջորդական սարքեր</translation> <translation id="1034942643314881546">Միացրեք ADB-ն՝ հավելվածների պատկեր ստեղծելու համար</translation> <translation id="1036348656032585052">Անջատել</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Լիաէկրան ռեժիմից դուրս գալու համար սեղմեք |<ph name="ACCELERATOR" />|</translation> <translation id="1038168778161626396">Միայն կոդավորում</translation> <translation id="1039337018183941703">Ֆայլն անվավեր է կամ վնասված</translation> -<translation id="1039850285407663109">Ընտրված ֆայլն անհայտ է և կարող է վտանգավոր լինել։ Նախքան բացելը խորհուրդ ենք տալիս ստուգել այն։</translation> <translation id="1041175011127912238">Էջը չի արձագանքում</translation> <translation id="1041263367839475438">Հասանելի սարքեր</translation> <translation id="1042174272890264476">Ձեր համակարգչում նաև առկա է <ph name="SHORT_PRODUCT_NAME" />-ի ներկառուցված RLZ գրադարանը: RLZ-ը նշանակում է ոչ եզակի, անձը չնույնացնող ներդիր` որոնումների և <ph name="SHORT_PRODUCT_NAME" />-ի օգտագործման չափումների համար` նախագծված հատուկ գովազդային արշավի կողմից: Այս պիտակները երբեմն ցուցադրվում են Google որոնման հարցումների մեջ <ph name="PRODUCT_NAME" />-ում:</translation> @@ -640,7 +638,6 @@ <translation id="1858585891038687145">Վստահել այս հավաստագրին ծրագրակազմ արտադրողների նույնականացման համար</translation> <translation id="1861262398884155592">Այս պանակը դատարկ է</translation> <translation id="1863182668524159459">Հաջորդական միացքներ չեն գտնվել</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> ֆայլն անհայտ է։ Ստուգեք այն՝ ռիսկը նվազագույնի հասցնելու համար։</translation> <translation id="1864111464094315414">Մուտք</translation> <translation id="1864400682872660285">Սառը</translation> <translation id="1864454756846565995">USB-C սարք (հետևի միացք)</translation> @@ -4029,7 +4026,6 @@ <translation id="6678717876183468697">Հարցման URL-ը</translation> <translation id="6680442031740878064">Հասանելի է <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Խոսքի արագությունը</translation> -<translation id="6681301928961274620">Տպման սերվերում որևէ տպիչ չի գտնվել։</translation> <translation id="6681668084120808868">Լուսանկարել</translation> <translation id="6681964764822470072">«<ph name="APP_NAME" />» հավելվածը կհեռացվի:</translation> <translation id="668599234725812620">Բացել Google Play-ը</translation> @@ -5557,7 +5553,6 @@ <translation id="8794025342371547160">Սահմանափակված IP</translation> <translation id="879413103056696865">Երբ միացնեք թեժ կետը, «<ph name="PHONE_NAME" />» սարքը՝</translation> <translation id="8795916974678578410">New Window</translation> -<translation id="8797086401386164142">Տպման սերվերում գտնվել է <ph name="NUM_PRINTERS" /> տպիչ։</translation> <translation id="8797459392481275117">Երբեք չթարգմանել այս կայքը</translation> <translation id="8798099450830957504">Կանխադրված</translation> <translation id="8798441408945964110">Մատակարարի անունը</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb index 791163c..7ac8574e 100644 --- a/chrome/app/resources/generated_resources_id.xtb +++ b/chrome/app/resources/generated_resources_id.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Memuat pratinjau</translation> <translation id="1032605640136438169">Harap tinjau persyaratan baru</translation> <translation id="103279545524624934">Kosongkan ruang disk untuk meluncurkan aplikasi Android.</translation> -<translation id="1033343386521881354">Menemukan 1 printer dari server cetak.</translation> <translation id="1033780634303702874">Mengakses perangkat seri Anda</translation> <translation id="1034942643314881546">Mengaktifkan adb untuk membuat ilustrasi aplikasi</translation> <translation id="1036348656032585052">Matikan</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Tekan |<ph name="ACCELERATOR" />| untuk keluar dari mode layar penuh</translation> <translation id="1038168778161626396">Khusus Penyandi</translation> <translation id="1039337018183941703">File tidak valid atau rusak</translation> -<translation id="1039850285407663109">File terpilih tidak dikenali dan mungkin saja berbahaya. Sebaiknya pindai file ini sebelum membukanya.</translation> <translation id="1041175011127912238">Halaman ini tidak merespons</translation> <translation id="1041263367839475438">Perangkat yang tersedia</translation> <translation id="1042174272890264476">Komputer Anda juga dilengkapi dengan perpustakaan RLZ <ph name="SHORT_PRODUCT_NAME" /> yang tertanam di dalamnya. RLZ menetapkan tag tak unik dan tidak dapat diidentifikasi secara pribadi untuk mengukur penelusuran dan penggunaan <ph name="SHORT_PRODUCT_NAME" /> yang didorong oleh kampanye promosi tertentu. Biasanya label ini muncul di kueri Google Penelusuran di <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Mempercayai sertifikat ini untuk mengidentifikasi pembuat software</translation> <translation id="1861262398884155592">Folder ini kosong</translation> <translation id="1863182668524159459">Port serial tidak ditemukan</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> tidak diketahui. Pindai file untuk meminimalkan risiko.</translation> <translation id="1864111464094315414">Login</translation> <translation id="1864400682872660285">Dingin</translation> <translation id="1864454756846565995">Perangkat USB-C (port belakang)</translation> @@ -4023,7 +4020,6 @@ <translation id="6678717876183468697">URL Kueri</translation> <translation id="6680442031740878064">Tersedia: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Beri rating</translation> -<translation id="6681301928961274620">Tidak menemukan printer dari server cetak.</translation> <translation id="6681668084120808868">Ambil foto</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" akan dicopot pemasangannya.</translation> <translation id="668599234725812620">Buka Google Play</translation> @@ -5553,7 +5549,6 @@ <translation id="8794025342371547160">IP Terbatas</translation> <translation id="879413103056696865">Saat hotspot aktif, <ph name="PHONE_NAME" /> Anda akan:</translation> <translation id="8795916974678578410">Jendela Baru</translation> -<translation id="8797086401386164142">Menemukan <ph name="NUM_PRINTERS" /> printer dari server cetak.</translation> <translation id="8797459392481275117">Jangan Pernah Terjemahkan Situs Ini</translation> <translation id="8798099450830957504">Default</translation> <translation id="8798441408945964110">Nama penyedia</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb index 0dfc2a7..d3a4e913 100644 --- a/chrome/app/resources/generated_resources_is.xtb +++ b/chrome/app/resources/generated_resources_is.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Hleður forskoðun</translation> <translation id="1032605640136438169">Kynntu þér nýju skilmálana</translation> <translation id="103279545524624934">Losaðu um geymslupláss til að opna Android forrit.</translation> -<translation id="1033343386521881354">Einn prentari fannst á prentþjóninum.</translation> <translation id="1033780634303702874">Aðgangur að raðtengdu tækjunum þínum</translation> <translation id="1034942643314881546">ADB virkjað til að búa til skýringarmynd fyrir forrit</translation> <translation id="1036348656032585052">Slökkva</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Ýttu á |<ph name="ACCELERATOR" />| til að hætta birtingu á öllum skjánum</translation> <translation id="1038168778161626396">Aðeins dulrita</translation> <translation id="1039337018183941703">Ógild eða skemmd skrá</translation> -<translation id="1039850285407663109">Valin skrá þekkist ekki og gæti verið hættuleg. Íhugaðu að skanna skrána áður en þú opnar hana.</translation> <translation id="1041175011127912238">Þessi síða svarar ekki.</translation> <translation id="1041263367839475438">Tæki í boði</translation> <translation id="1042174272890264476">RLZ-safn <ph name="SHORT_PRODUCT_NAME" /> er einnig innbyggt í tölvuna. RLZ úthlutar merki sem er ekki einkvæmt og ekki persónugreinanlegt til að mæla leitarvirkni og notkun <ph name="SHORT_PRODUCT_NAME" /> hjá tiltekinni auglýsingaherferð. Þessi merki birtast stundum í leitarfyrirspurnum á Google í <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Treysta þessu vottorði til að bera kennsl á hugbúnaðarframleiðendur</translation> <translation id="1861262398884155592">Mappan er tóm</translation> <translation id="1863182668524159459">Engin raðtengi fundust</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> þekkist ekki. Skannaðu skrána til að lágmarka áhættu.</translation> <translation id="1864111464094315414">Innskráning</translation> <translation id="1864400682872660285">Kaldara</translation> <translation id="1864454756846565995">USB-C-tæki (tengi að aftan)</translation> @@ -4025,7 +4022,6 @@ <translation id="6678717876183468697">Fyrirspurnarvefslóð</translation> <translation id="6680442031740878064">Laust: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Hraði</translation> -<translation id="6681301928961274620">Engir prentarar fundust á prentþjóni.</translation> <translation id="6681668084120808868">Taka mynd</translation> <translation id="6681964764822470072">„<ph name="APP_NAME" />“ verður fjarlægt.</translation> <translation id="668599234725812620">Opna Google Play</translation> @@ -5554,7 +5550,6 @@ <translation id="8794025342371547160">Takmarkaður IP-aðgangur</translation> <translation id="879413103056696865">Þegar kveikt er á heitum reit mun <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Nýr gluggi</translation> -<translation id="8797086401386164142"><ph name="NUM_PRINTERS" /> prentarar fundust á prentþjóni.</translation> <translation id="8797459392481275117">Aldrei þýða þetta vefsvæði</translation> <translation id="8798099450830957504">Sjálfgefið</translation> <translation id="8798441408945964110">Heiti veitu</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb index bea4ac9..e95d6b33 100644 --- a/chrome/app/resources/generated_resources_it.xtb +++ b/chrome/app/resources/generated_resources_it.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Caricamento anteprima in corso</translation> <translation id="1032605640136438169">Ti invitiamo a leggere i nuovi termini</translation> <translation id="103279545524624934">Libera spazio sul disco per avviare le app Android.</translation> -<translation id="1033343386521881354">1 stampante trovata sul server di stampa.</translation> <translation id="1033780634303702874">Accesso ai dispositivi seriali</translation> <translation id="1034942643314881546">Attivazione di ADB per creare l'illustrazione delle app</translation> <translation id="1036348656032585052">Disattiva</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Premi |<ph name="ACCELERATOR" />| per uscire dalla modalità a schermo intero</translation> <translation id="1038168778161626396">Solo crittografia</translation> <translation id="1039337018183941703">File non valido o danneggiato</translation> -<translation id="1039850285407663109">Il file selezionato è sconosciuto e potrebbe essere pericoloso. Esegui una scansione prima di aprirlo.</translation> <translation id="1041175011127912238">Questa pagina non risponde</translation> <translation id="1041263367839475438">Dispositivi disponibili</translation> <translation id="1042174272890264476">Sul computer è integrata anche la libreria RLZ di <ph name="SHORT_PRODUCT_NAME" />. RLZ assegna un tag non univoco che non consente l'identificazione personale per valutare le ricerche e l'utilizzo di <ph name="SHORT_PRODUCT_NAME" /> promosso da una determinata campagna promozionale. Talvolta queste etichette vengono visualizzate in query della Ricerca Google in <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Considera attendibile questo certificato per l'identificazione dei creatori di software</translation> <translation id="1861262398884155592">Questa cartella è vuota</translation> <translation id="1863182668524159459">Nessuna porta seriale trovata</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> è sconosciuto. Esegui una scansione del file per ridurre al minimo i rischi.</translation> <translation id="1864111464094315414">Accesso</translation> <translation id="1864400682872660285">Più fredda</translation> <translation id="1864454756846565995">Dispositivo USB-C (porta posteriore)</translation> @@ -4024,7 +4021,6 @@ <translation id="6678717876183468697">URL query</translation> <translation id="6680442031740878064">Disponibile: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Velocità</translation> -<translation id="6681301928961274620">Nessuna stampante trovata sul server di stampa.</translation> <translation id="6681668084120808868">Scatta foto</translation> <translation id="6681964764822470072">L'app "<ph name="APP_NAME" />" verrà disinstallata.</translation> <translation id="668599234725812620">Apri Google Play</translation> @@ -5553,7 +5549,6 @@ <translation id="8794025342371547160">IP limitato</translation> <translation id="879413103056696865">Quando l'hotspot è attivo, il tuo <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Nuova finestra</translation> -<translation id="8797086401386164142"><ph name="NUM_PRINTERS" /> stampanti trovate sul server di stampa.</translation> <translation id="8797459392481275117">Non tradurre mai questo sito</translation> <translation id="8798099450830957504">Predefinito</translation> <translation id="8798441408945964110">Nome provider</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb index 89964e59..d3a7a1c 100644 --- a/chrome/app/resources/generated_resources_iw.xtb +++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">טוען תצוגה מקדימה</translation> <translation id="1032605640136438169">יש לקרוא את התנאים החדשים</translation> <translation id="103279545524624934">עליך לפנות שטח אחסון כדי להפעיל אפליקציות Android.</translation> -<translation id="1033343386521881354">נמצאה מדפסת אחת המשויכת לשרת ההדפסה.</translation> <translation id="1033780634303702874">גישה להתקנים הסיריאליים שלך</translation> <translation id="1034942643314881546">המערכת מפעילה את ADB ליצירת איור של אפליקציות</translation> <translation id="1036348656032585052">כבה</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">לחץ על |<ph name="ACCELERATOR" />| כדי לצאת ממסך מלא</translation> <translation id="1038168778161626396">הצפנה בלבד</translation> <translation id="1039337018183941703">הקובץ לא חוקי, או שהוא פגום</translation> -<translation id="1039850285407663109">הקובץ שנבחר אינו מזוהה ועלול להיות מסוכן. מומלץ לסרוק אותו לפני הפתיחה.</translation> <translation id="1041175011127912238">הדף לא מגיב</translation> <translation id="1041263367839475438">מכשירים זמינים</translation> <translation id="1042174272890264476">המחשב שלך מגיע גם עם ספריית ה-RLZ המובנה של <ph name="SHORT_PRODUCT_NAME" />. RLZ מקצה תג שאינו ייחודי ואינו ניתן לזיהוי על מנת למדוד את החיפוש ואת השימוש ב-<ph name="SHORT_PRODUCT_NAME" /> המונעים על ידי קמפיין ספציפי לקידום מכירות. התוויות האלה מופיעות לעתים בשאילתות החיפוש של Google ב-<ph name="PRODUCT_NAME" />.</translation> @@ -636,7 +634,6 @@ <translation id="1858585891038687145">תן אמון באישור זה לזיהוי מפתחי תוכנה</translation> <translation id="1861262398884155592">התיקייה הזו ריקה</translation> <translation id="1863182668524159459">לא נמצאו יציאות טוריות</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> אינו מזוהה. יש לסרוק את הקובץ כדי להקטין את הסיכון.</translation> <translation id="1864111464094315414">התחבר</translation> <translation id="1864400682872660285">קריר יותר</translation> <translation id="1864454756846565995">מכשיר עם יציאת USB-C (יציאה אחורית)</translation> @@ -4022,7 +4019,6 @@ <translation id="6678717876183468697">כתובת אתר של שאילתה</translation> <translation id="6680442031740878064">השטח הזמין: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">קצב</translation> -<translation id="6681301928961274620">לא נמצאו מדפסות המשויכות לשרת ההדפסה.</translation> <translation id="6681668084120808868">צלם תמונה</translation> <translation id="6681964764822470072">ההתקנה של "<ph name="APP_NAME" />" תוסר.</translation> <translation id="668599234725812620">פתח את Google Play</translation> @@ -5553,7 +5549,6 @@ <translation id="8794025342371547160">IP מוגבל</translation> <translation id="879413103056696865">כשהנקודה לשיתוף אינטרנט מופעלת, ה-<ph name="PHONE_NAME" /> יבצע את הפעולות הבאות:</translation> <translation id="8795916974678578410">חלון חדש</translation> -<translation id="8797086401386164142">נמצאו <ph name="NUM_PRINTERS" /> מדפסות המשויכות לשרת הההדפסה.</translation> <translation id="8797459392481275117">איני רוצה לקבל תרגום של אתר זה בכלל</translation> <translation id="8798099450830957504">ברירת מחדל</translation> <translation id="8798441408945964110">שם ספק</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb index 145ba64b..2eaffa8 100644 --- a/chrome/app/resources/generated_resources_ja.xtb +++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">プレビューを読み込んでいます</translation> <translation id="1032605640136438169">新しい利用規約をご確認ください</translation> <translation id="103279545524624934">Android アプリを起動できるようにディスク領域を解放します。</translation> -<translation id="1033343386521881354">プリント サーバーで 1 個のプリンタが見つかりました。</translation> <translation id="1033780634303702874">シリアル デバイスへのアクセス</translation> <translation id="1034942643314881546">ADB によるアプリのイラストレーション作成を有効にする</translation> <translation id="1036348656032585052">オフにする</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">全画面表示を終了するには |<ph name="ACCELERATOR" />| を押します</translation> <translation id="1038168778161626396">暗号化のみ</translation> <translation id="1039337018183941703">ファイルが無効であるか壊れています</translation> -<translation id="1039850285407663109">選択したファイルは不明で、危害を及ぼす可能性があります。このファイルを開く前にスキャンすることをおすすめします。</translation> <translation id="1041175011127912238">このページは応答していません</translation> <translation id="1041263367839475438">使用可能なデバイス</translation> <translation id="1042174272890264476">お使いのパソコンには <ph name="SHORT_PRODUCT_NAME" /> の RLZ ライブラリも組み込まれています。RLZ は、個人を特定できないタグを割り当てて、特定の販促キャンペーンで生じた検索や <ph name="SHORT_PRODUCT_NAME" /> の利用状況を計測します。これらのラベルは <ph name="PRODUCT_NAME" /> で Google 検索キーワード内に表示されることがあります。</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">ソフトウェア作成元の識別でこの証明書を信頼します</translation> <translation id="1861262398884155592">このフォルダは空です</translation> <translation id="1863182668524159459">シリアルポートが見つかりません</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> は不明なファイルです。リスクを最小限にするには、ファイルをスキャンすることをおすすめします。</translation> <translation id="1864111464094315414">ログイン</translation> <translation id="1864400682872660285">寒色</translation> <translation id="1864454756846565995">USB-C デバイス(背面のポート)</translation> @@ -4025,7 +4022,6 @@ <translation id="6678717876183468697">クエリ URL</translation> <translation id="6680442031740878064">空き容量: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">速度</translation> -<translation id="6681301928961274620">プリント サーバーでプリンタが見つかりませんでした。</translation> <translation id="6681668084120808868">写真を撮る</translation> <translation id="6681964764822470072">「<ph name="APP_NAME" />」をアンインストールします。</translation> <translation id="668599234725812620">Google Play を開く</translation> @@ -5555,7 +5551,6 @@ <translation id="8794025342371547160">制限付き IP</translation> <translation id="879413103056696865">アクセス ポイントが有効な場合、<ph name="PHONE_NAME" /> は次のように動作します。</translation> <translation id="8795916974678578410">新規ウインドウ</translation> -<translation id="8797086401386164142">プリント サーバーで <ph name="NUM_PRINTERS" /> 個のプリンタが見つかりました。</translation> <translation id="8797459392481275117">このサイトは翻訳しない</translation> <translation id="8798099450830957504">既定</translation> <translation id="8798441408945964110">プロバイダ名</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb index 1c0583c..306b9bab 100644 --- a/chrome/app/resources/generated_resources_ka.xtb +++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">წინასწარი ხედის ჩატვირთვა</translation> <translation id="1032605640136438169">გთხოვთ, გადახედოთ ახალ პირობებს</translation> <translation id="103279545524624934">Android აპების გასაშვებად, გამოათავისუფლეთ მეხსიერება დისკზე.</translation> -<translation id="1033343386521881354">ბეჭდვის სერვერზე მოიძებნა 1 პრინტერი.</translation> <translation id="1033780634303702874">წვდომა თქვენს სერიულ მოწყობილობებზე</translation> <translation id="1034942643314881546">მიმდინარეობს ADB-ის ჩართვა აპების ილუსტრაციის შესაქმნელად</translation> <translation id="1036348656032585052">გამორთვა</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">სრულეკრანიანი რეჟიმიდან გამოსასვლელად, დააჭირეთ კლავიშზე |<ph name="ACCELERATOR" />|</translation> <translation id="1038168778161626396">მხოლოდ დამშიფრავი</translation> <translation id="1039337018183941703">ფაილი არასწორი ან დაზიანებულია</translation> -<translation id="1039850285407663109">არჩეული ფაილი უცნობია და შეიძლება სახიფათო იყოს. ამ ფაილის გახსნამდე რეკომენდებულია მისი სკანირება.</translation> <translation id="1041175011127912238">ეს გვერდი არ რეაგირებს</translation> <translation id="1041263367839475438">ხელმისაწვდომი მოწყობილობები</translation> <translation id="1042174272890264476">თქვენს კომპიუტერში ასევე ჩაშენებულია <ph name="SHORT_PRODUCT_NAME" />-ის RLZ ბიბლიოთეკა. RLZ მიამაგრებს არაუნიკალურ, არაპერსონალურ ტეგს, რომელიც გაზომავს ძიებებს და <ph name="SHORT_PRODUCT_NAME" />-ის გამოყენებას, რომლებიც აქტიურდება გარკვეული სარეკლამო კამპანიის მიერ. ეს წარწერები ზოგჯერ გამოჩნდება Google-ის ძიების მოთხოვნებში <ph name="PRODUCT_NAME" />-ში.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">ამ სერტიფიკატისთვის პროგრამული უზრუნველყოფის შემქმნელების ამოცნობის მინდობა</translation> <translation id="1861262398884155592">ეს საქაღალდე ცარიელია</translation> <translation id="1863182668524159459">თანმიმდევრული პორტები ვერ მოიძებნა</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> უცნობია. დაასკანირეთ რისკის მინიმუმამდე დასაყვანად.</translation> <translation id="1864111464094315414">შესვლა</translation> <translation id="1864400682872660285">უფრო ცივი</translation> <translation id="1864454756846565995">USB-C მოწყობილობა (უკანა პორტი)</translation> @@ -4024,7 +4021,6 @@ <translation id="6678717876183468697">ფრაზის URL</translation> <translation id="6680442031740878064">ხელმისაწვდომია: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">სიხშირე</translation> -<translation id="6681301928961274620">ბეჭდვის სერვერზე პრინტერები ვერ მოიძებნა.</translation> <translation id="6681668084120808868">ფოტოს გადაღება</translation> <translation id="6681964764822470072">მოხდება „<ph name="APP_NAME" />“-ის დეინსტალაცია.</translation> <translation id="668599234725812620">Google Play-ს გახსნა</translation> @@ -5552,7 +5548,6 @@ <translation id="8794025342371547160">შეზღუდული IP</translation> <translation id="879413103056696865">უსადენო ქსელის ჩართვისას თქვენს <ph name="PHONE_NAME" />-ში მოხდება:</translation> <translation id="8795916974678578410">ახალი ფანჯარა</translation> -<translation id="8797086401386164142">ბეჭდვის სერვერზე მოიძებნა <ph name="NUM_PRINTERS" /> პრინტერი.</translation> <translation id="8797459392481275117">არასოდეს ითარგმნოს ეს საიტი</translation> <translation id="8798099450830957504">ნაგულისხმევი</translation> <translation id="8798441408945964110">პროვაიდერის სახელი</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb index 9fc39cb..e891f5b 100644 --- a/chrome/app/resources/generated_resources_kk.xtb +++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Алдын ала көріністі жүктеу</translation> <translation id="1032605640136438169">Жаңа шарттарды қарап шығыңыз.</translation> <translation id="103279545524624934">Android қолданбаларын орнату үшін дискіде орын босатыңыз.</translation> -<translation id="1033343386521881354">Басып шығару серверінен 1 принтер табылды.</translation> <translation id="1033780634303702874">Сериялық құрылғыларыңызға кіру</translation> <translation id="1034942643314881546">Қолданбалардың кескінін жасау үшін adb-ді іске қосу</translation> <translation id="1036348656032585052">Өшіру</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Толық экран режимінен шығу үшін |<ph name="ACCELERATOR" />| пернесін басыңыз</translation> <translation id="1038168778161626396">Тек шифрдан шығару</translation> <translation id="1039337018183941703">Файл жарамсыз немесе бүлінген</translation> -<translation id="1039850285407663109">Таңдалған файл белгісіз, сондықтан қауіпті болуы мүмкін. Осы файлды ашпас бұрын, оны тексергеніңіз жөн.</translation> <translation id="1041175011127912238">Бұл бет жауап бермей жатыр.</translation> <translation id="1041263367839475438">Қолжетімді құрылғылар</translation> <translation id="1042174272890264476">Сонымен қатар компьютеріңізге <ph name="SHORT_PRODUCT_NAME" /> RLZ кітапханасы ендірілген. RLZ кітапханасы белгілі бір науқан арқылы жүргізілген іздеулер мен <ph name="SHORT_PRODUCT_NAME" /> пайдалану мүмкіндігін өлшеу үшін бірегей емес, жеке анықталмайтын тегті тағайындайды. Бұл белгілер кейде <ph name="PRODUCT_NAME" /> өніміндегі Google Search сұрауларында пайда болады.</translation> @@ -636,7 +634,6 @@ <translation id="1858585891038687145">Бағдарламалық жасақтама авторларын анықтауда осы сертификатқа сену</translation> <translation id="1861262398884155592">Бұл қалта бос</translation> <translation id="1863182668524159459">Сериялық порттар табылмады.</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> – белгісіз файл. Қатерді азайту үшін файлды тексеріңіз.</translation> <translation id="1864111464094315414">Кіру</translation> <translation id="1864400682872660285">Салқындатқыш</translation> <translation id="1864454756846565995">USB-C құрылғысы (артқы ұяшық)</translation> @@ -3939,7 +3936,7 @@ <translation id="6545864417968258051">Bluetooth құрылғыларын іздеу</translation> <translation id="6545867563032584178">Микрофон Mac жүйесінің параметрлерінде өшірілген.</translation> <translation id="6547354035488017500">Кемінде 512 MБ орын босатпасаңыз, құрылғы жауап бермейтін болады. Бұл үшін файлдарды құрылғының жадынан жойыңыз.</translation> -<translation id="6549966385318247177">Бұл ересектерге арналған мазмұнға байланысты бөгелді.</translation> +<translation id="6549966385318247177">Бұл — ересектерге арналған мазмұнға байланысты бөгелді.</translation> <translation id="6550675742724504774">Опциялар</translation> <translation id="6551508934388063976">Пәрмен қолжетімсіз. Жаңа терезе ашу үшін Ctrl+N тіркесімін басыңыз.</translation> <translation id="6551612971599078809">Сайт USB құрылғысын пайдалануда</translation> @@ -4022,7 +4019,6 @@ <translation id="6678717876183468697">Сұрау URL мекенжайы</translation> <translation id="6680442031740878064">Бос: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Жылдамдық</translation> -<translation id="6681301928961274620">Басып шығару серверінен бірде-бір принтер табылмады.</translation> <translation id="6681668084120808868">Фотосуретке түсіру</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" жойылады.</translation> <translation id="668599234725812620">Google Play дүкенін ашу</translation> @@ -5551,7 +5547,6 @@ <translation id="8794025342371547160">Шектелген IP мекенжайы</translation> <translation id="879413103056696865">Хотспот қосулы кезде, <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Жаңа терезе</translation> -<translation id="8797086401386164142">Басып шығару серверінен <ph name="NUM_PRINTERS" /> принтер табылды.</translation> <translation id="8797459392481275117">Бұл сайт ешқашан аударылмасын</translation> <translation id="8798099450830957504">Әдепкі</translation> <translation id="8798441408945964110">Провайдер аты</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb index 8f72ddef..e697f89 100644 --- a/chrome/app/resources/generated_resources_km.xtb +++ b/chrome/app/resources/generated_resources_km.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">កំពុងដំណើរការការពិនិត្យមើល</translation> <translation id="1032605640136438169">សូមពិនិត្យមើលលក្ខខណ្ឌថ្មី</translation> <translation id="103279545524624934">បង្កើនទំហំផ្ទុកថាសដើម្បីចាប់ផ្តើមកម្មវិធី Android</translation> -<translation id="1033343386521881354">បានរកឃើញម៉ាស៊ីនបោះពុម្ព 1 ពីម៉ាស៊ីនមេបោះពុម្ព។</translation> <translation id="1033780634303702874">ចូលប្រើឧបករណ៍សេរ៊ីរបស់អ្នក</translation> <translation id="1034942643314881546">បើក adb ដើម្បីបង្កើតរូបភាពកម្មវិធី</translation> <translation id="1036348656032585052">បិទ</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">ចុច |<ph name="ACCELERATOR" />| ដើម្បីចេញពីរបៀបពេញអេក្រង់</translation> <translation id="1038168778161626396">បម្លែងតែប៉ុណ្ណោះ</translation> <translation id="1039337018183941703">ឯកសារមិនត្រឹមត្រូវ ឬខូច</translation> -<translation id="1039850285407663109">មិនស្គាល់ឯកសារដែលបានជ្រើសរើសទេ ហើយឯកសារនេះអាចបង្កគ្រោះថ្នាក់។ សូមពិចារណាធ្វើការស្កេន មុនពេលបើកឯកសារនេះ។</translation> <translation id="1041175011127912238">ទំព័រនេះមិនដំណើរការទេ</translation> <translation id="1041263367839475438">ឧបករណ៍ដែលអាចប្រើបាន</translation> <translation id="1042174272890264476">កុំព្យូទ័ររបស់អ្នកក៏ភ្ជាប់មកជាមួយបណ្តាល័យដែលបំពាក់ RLZ របស់ <ph name="SHORT_PRODUCT_NAME" /> ផងដែរ។ RLZ ចាត់ស្លាកដែលអាចសម្គាល់បានដោយមិនមែនលក្ខណៈបុគ្គល ឬពិសេស ដើម្បីវាស់វែងការស្វែងរក និងការប្រើប្រាស់ <ph name="SHORT_PRODUCT_NAME" /> ដែលដំណើរការដោយយុទ្ធនាការផ្សព្ធផ្សាយជាក់លាក់មួយ។ ជួនកាល ផ្លាកទាំងនេះលេចឡើងនៅក្នុងការសួរ Google ស្វែងរក <ph name="PRODUCT_NAME" />។</translation> @@ -597,7 +595,7 @@ <translation id="1805472176602625930">ចុចប៊ូតុងនៅលើសោសុវត្ថិភាព</translation> <translation id="1805738995123446102">ផ្ទាំងផ្ទៃខាងក្រោយកំពុងប្រើមីក្រូហ្វូនរបស់អ្នក</translation> <translation id="1805822111539868586">ត្រួតពិនិត្យទិដ្ឋភាព</translation> -<translation id="1805888043020974594">មាស៊ីនមេបោះពុម្ព</translation> +<translation id="1805888043020974594">ម៉ាស៊ីនមេបោះពុម្ព</translation> <translation id="1805967612549112634">បញ្ជាក់កូដ PIN</translation> <translation id="1809734401532861917">បញ្ចូលចំណាំ ប្រវត្តិ ពាក្យសម្ងាត់ និងការកំណត់ផ្សេងទៀតរបស់ខ្ញុំទៅ <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">សេវាកម្ម</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">ជឿទុកចិត្តលើវិញ្ញាបនបត្រនេះដើម្បីសម្គាល់អ្នកផលិតកម្មវិធី</translation> <translation id="1861262398884155592">ថតនេះទទេ</translation> <translation id="1863182668524159459">រកមិនឃើញរន្ធស៊េរីទេ</translation> -<translation id="1863552924692672565">មិនស្គាល់ <ph name="FILE_NAME" /> ទេ។ សូមស្កេនឯកសារ ដើម្បីកាត់បន្ថយហានិភ័យ។</translation> <translation id="1864111464094315414">ចូល</translation> <translation id="1864400682872660285">កាន់តែខៀវ</translation> <translation id="1864454756846565995">ឧបករណ៍ USB-C (រន្ធខាងក្រោយ)</translation> @@ -4026,7 +4023,6 @@ <translation id="6678717876183468697">URL សំណួរ</translation> <translation id="6680442031740878064">ទំនេរ៖ <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">អត្រា</translation> -<translation id="6681301928961274620">រកមិនឃើញម៉ាស៊ីនបោះពុម្ពណាមួយពីម៉ាស៊ីនមេបោះពុម្ពទេ។</translation> <translation id="6681668084120808868">ថតរូបភាព</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" នឹងត្រូវបានលុប។</translation> <translation id="668599234725812620">បើក Google Play</translation> @@ -5555,7 +5551,6 @@ <translation id="8794025342371547160">IP ដែលបានរឹតបន្តឹង</translation> <translation id="879413103056696865">ខណៈពេលដែលហតស្ប៉តបើក <ph name="PHONE_NAME" /> របស់អ្នកនឹង៖</translation> <translation id="8795916974678578410">ផ្ទាំងថ្មី</translation> -<translation id="8797086401386164142">បានរកឃើញម៉ាស៊ីនបោះពុម្ព <ph name="NUM_PRINTERS" /> ពីម៉ាស៊ីនមេបោះពុម្ព។</translation> <translation id="8797459392481275117">កុំបកប្រែគេហទំទំព័រនេះឲ្យសោះ</translation> <translation id="8798099450830957504">លំនាំដើម</translation> <translation id="8798441408945964110">ឈ្មោះក្រុមហ៊ុនផ្តល់សេវា</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb index 286a5ed..09225916 100644 --- a/chrome/app/resources/generated_resources_kn.xtb +++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">ಪೂರ್ವವೀಕ್ಷಣೆ ಲೋಡ್ ಆಗುತ್ತಿದೆ</translation> <translation id="1032605640136438169">ಹೊಸ ನಿಯಮಗಳನ್ನು ಪರಿಶೀಲಿಸಿ</translation> <translation id="103279545524624934">Android ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಪ್ರಾರಂಭಿಸಲು ಡಿಸ್ಕ್ ಸ್ಥಳಾವಕಾಶ ಮುಕ್ತಗೊಳಿಸಿ.</translation> -<translation id="1033343386521881354">ಮುದ್ರಣ ಸರ್ವರ್ನಿಂದ 1 ಪ್ರಿಂಟರ್ ಕಂಡುಬಂದಿದೆ.</translation> <translation id="1033780634303702874">ನಿಮ್ಮ ಸರಣಿ ಸಾಧನಗಳನ್ನು ಪ್ರವೇಶಿಸಿ</translation> <translation id="1034942643314881546">ಆ್ಯಪ್ಗಳ ನಿದರ್ಶನವನ್ನು ರಚಿಸಲು adb ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತಿದೆ</translation> <translation id="1036348656032585052">ಆಫ್ ಮಾಡು</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">ಪೂರ್ಣಪರದೆಯಿಂದ ನಿರ್ಗಮಿಸಲು |<ph name="ACCELERATOR" />| ಒತ್ತಿರಿ</translation> <translation id="1038168778161626396">ಸಂಕೇತಲಿಪಿ ಮಾತ್ರ</translation> <translation id="1039337018183941703">ಅಮಾನ್ಯ ಅಥವಾ ದೋಷಯುಕ್ತ ಫೈಲ್</translation> -<translation id="1039850285407663109">ಆಯ್ಕೆ ಮಾಡಿದ ಫೈಲ್, ಅಪರಿಚಿತವಾಗಿದೆ ಮತ್ತು ಇದು ಅಪಾಯಕಾರಿಯಾಗಿರಬಹುದು. ಈ ಫೈಲ್ ಅನ್ನು ತೆರೆಯುವ ಮೊದಲು, ಸ್ಕ್ಯಾನ್ ಮಾಡುವ ಕುರಿತು ಯೋಚಿಸಿ.</translation> <translation id="1041175011127912238">ಈ ಪುಟವು ಪ್ರತಿಕ್ರಿಯಿಸುತ್ತಿಲ್ಲ</translation> <translation id="1041263367839475438">ಲಭ್ಯವಿರುವ ಸಾಧನಗಳು</translation> <translation id="1042174272890264476">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅಂತರ್ನಿರ್ಮಿತ <ph name="SHORT_PRODUCT_NAME" /> ನ RLZ ಲೈಬ್ರರಿಯೊಂದಿಗೆ ಸಹ ಬರುತ್ತದೆ. ಹುಡುಕಾಟಗಳನ್ನು ಅಳತೆ ಮಾಡಲು ಮತ್ತು ಒಂದು ನಿರ್ದಿಷ್ಟ ಪ್ರಚಾರದ ಶಿಬಿರದಿಂದ <ph name="SHORT_PRODUCT_NAME" /> ಬಳಕೆಯಿಂದ ಗಳಿಸಿದ ಅನನ್ಯವಲ್ಲದ, ವೈಯಕ್ತಿಕವಾಗಿ ಗುರುತಿಸದಂತಹ ಟ್ಯಾಗ್ ಅನ್ನು RLZ ಆಯೋಜಿಸುತ್ತದೆ. ಈ ಲೇಬಲ್ಗಳು ಕೆಲವು ಬಾರಿ <ph name="PRODUCT_NAME" /> ನಲ್ಲಿ Google ಹುಡುಕಾಟ ಪ್ರಶ್ನೆಗಳಲ್ಲಿ ಗೋಚರಿಸುತ್ತವೆ.</translation> @@ -598,7 +596,7 @@ <translation id="1805472176602625930">ಭದ್ರತೆ ಕೀಯಲ್ಲಿ ಬಟನ್ ಒತ್ತಿರಿ</translation> <translation id="1805738995123446102">ಹಿನ್ನೆಲೆ ಟ್ಯಾಬ್ ನಿಮ್ಮ ಮೈಕ್ರೋಫೋನ್ ಅನ್ನು ಬಳಸುತ್ತಿದೆ</translation> <translation id="1805822111539868586">ವೀಕ್ಷಣೆಗಳನ್ನು ಪರಿಶೀಲಿಸಿ</translation> -<translation id="1805888043020974594">ಮುದ್ರಣ ಸರ್ವರ್</translation> +<translation id="1805888043020974594">ಪ್ರಿಂಟ್ ಸರ್ವರ್</translation> <translation id="1805967612549112634">ಪಿನ್ ದೃಢೀಕರಿಸಿ</translation> <translation id="1809734401532861917"><ph name="USER_EMAIL_ADDRESS" /> ಗೆ ನನ್ನ ಬುಕ್ಮಾರ್ಕ್ಗಳು, ಇತಿಹಾಸ, ಪಾಸ್ವರ್ಡ್ಗಳು ಮತ್ತು ಇತರ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಸೇರಿಸಿ.</translation> <translation id="1813278315230285598">ಸೇವೆಗಳು</translation> @@ -640,7 +638,6 @@ <translation id="1858585891038687145">ಸಾಫ್ಟ್ವೇರ್ ತಯಾರಕರನ್ನು ಗುರುತಿಸುವುದಕ್ಕಾಗಿ ಈ ಪ್ರಮಾಣಪತ್ರದ ಮೇಲೆ ವಿಶ್ವಾಸವಿಡಿ</translation> <translation id="1861262398884155592">ಈ ಫೋಲ್ಡರ್ ಖಾಲಿಯಾಗಿದೆ</translation> <translation id="1863182668524159459">ಯಾವುದೇ ಸೀರಿಯಲ್ ಪೋರ್ಟ್ಗಳು ಕಂಡುಬಂದಿಲ್ಲ</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> ಅಪರಿಚಿತವಾಗಿದೆ. ಅಪಾಯವನ್ನು ಆದಷ್ಟು ಕಡಿಮೆ ಮಾಡಲು ಫೈಲ್ ಅನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿ.</translation> <translation id="1864111464094315414">ಲಾಗಿನ್</translation> <translation id="1864400682872660285">ಕೂಲರ್</translation> <translation id="1864454756846565995">USB-C ಸಾಧನ (ಹಿಂದಿನ ಪೋರ್ಟ್)</translation> @@ -1788,7 +1785,7 @@ <translation id="347785443197175480">ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಹಾಗೂ ಮೈಕ್ರೋಫೋನ್ ಅನ್ನು ಪ್ರವೇಶಿಸಲು <ph name="HOST" /> ಗೆ ಅನುಮತಿಸುವುದನ್ನು ಮುಂದುವರೆಸಿ</translation> <translation id="3478685642445675458">ವ್ಯಕ್ತಿಯನ್ನು ತೆಗೆದುಹಾಕುವ ಮೊದಲು ದಯವಿಟ್ಟು ನಿಮ್ಮ ಪ್ರೊಫೈಲ್ ಅನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಿ.</translation> <translation id="3479552764303398839">ಈಗ ಬೇಡ</translation> -<translation id="3479685872808224578">ಮುದ್ರಣ ಸರ್ವರ್ ಅನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ವಿಳಾಸವನ್ನು ಪರಿಶೀಲಿಸಿ ಹಾಗೂ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation> +<translation id="3479685872808224578">ಪ್ರಿಂಟ್ ಸರ್ವರ್ ಅನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ವಿಳಾಸವನ್ನು ಪರಿಶೀಲಿಸಿ ಹಾಗೂ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="3481268647794498892"><ph name="COUNTDOWN_SECONDS" /> ಸೆಕೆಂಡುಗಳಲ್ಲಿ <ph name="ALTERNATIVE_BROWSER_NAME" /> ನಲ್ಲಿ ತೆರೆಯಲಾಗುತ್ತದೆ</translation> <translation id="3484273680291419129">ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತಿದೆ...</translation> <translation id="3484869148456018791">ಹೊಸ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಪಡೆಯಿರಿ</translation> @@ -4027,7 +4024,6 @@ <translation id="6678717876183468697">ಕ್ವೆರಿ URL</translation> <translation id="6680442031740878064">ಲಭ್ಯವಿದೆ: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">ದರ</translation> -<translation id="6681301928961274620">ಮುದ್ರಣ ಸರ್ವರ್ನಿಂದ ಯಾವುದೇ ಪ್ರಿಂಟರ್ಗಳು ಕಂಡುಬಂದಿಲ್ಲ.</translation> <translation id="6681668084120808868">ಫೋಟೋ ತೆಗೆಯಿರಿ</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" ಅಸ್ಥಾಪಿಸಲಾಗುವುದು.</translation> <translation id="668599234725812620">Google Play ತೆರೆಯಿರಿ</translation> @@ -4545,7 +4541,7 @@ <translation id="740624631517654988">ಪಾಪ್-ಅಪ್ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation> <translation id="7407430846095439694">ಆಮದು ಮಾಡಿ ಮತ್ತು ಬೈಂಡ್ ಮಾಡಿ</translation> <translation id="7407504355934009739">ಬಹುತೇಕ ಜನರು ಈ ಸೈಟ್ನ ಅಧಿಸೂಚನೆಗಳನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತಾರೆ</translation> -<translation id="740810853557944681">ಮುದ್ರಣ ಸರ್ವರ್ ಒಂದನ್ನು ಸೇರಿಸಿ</translation> +<translation id="740810853557944681">ಪ್ರಿಂಟ್ ಸರ್ವರ್ ಒಂದನ್ನು ಸೇರಿಸಿ</translation> <translation id="7409549334477097887">ತುಂಬಾ ದೊಡ್ಡದು</translation> <translation id="7409836189476010449">ಫ್ಲ್ಯಾಶ್ ರನ್ ಮಾಡು</translation> <translation id="7410344089573941623">ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಹಾಗೂ ಮೈಕ್ರೋಫೋನ್ ಪ್ರವೇಶಿಸಲು <ph name="HOST" /> ಬಯಸುತ್ತಾರೆಯೇ ಎಂಬುದನ್ನು ಕೇಳಿ</translation> @@ -4566,7 +4562,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{&ಹೊಸ ವಿಂಡೋದಲ್ಲಿ ಎಲ್ಲವನ್ನೂ ತೆರೆಯಿರಿ}=1{&ಹೊಸ ವಿಂಡೋದಲ್ಲಿ ತೆರೆಯಿರಿ}one{&ಹೊಸ ವಿಂಡೋದಲ್ಲಿ ಎಲ್ಲಾ (#) ಅನ್ನು ತೆರೆಯಿರಿ}other{&ಹೊಸ ವಿಂಡೋದಲ್ಲಿ ಎಲ್ಲಾ (#) ಅನ್ನು ತೆರೆಯಿರಿ}}</translation> <translation id="7434509671034404296">ಡೆವಲಪರ್</translation> <translation id="7434635829372401939">ನಿಮ್ಮ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಸಿಂಕ್ ಮಾಡಿ</translation> -<translation id="7434969625063495310">ಮುದ್ರಣ ಸರ್ವರ್ ಅನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಸರ್ವರ್ನ ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ಪರಿಶೀಲಿಸಿ ಮತ್ತು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation> +<translation id="7434969625063495310">ಪ್ರಿಂಟ್ ಸರ್ವರ್ ಅನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಸರ್ವರ್ನ ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ಪರಿಶೀಲಿಸಿ ಮತ್ತು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="7436921188514130341">ಓಹ್, ಹೋಯ್ತು! ಮರುಹೆಸರಿಸುವ ಸಂದರ್ಭದಲ್ಲಿ ದೋಷ ಕಂಡುಬಂದಿದೆ.</translation> <translation id="7438976808740265764">ಡಿಸೆಂಬರ್ 2020 ರ ಬಳಿಕ ಫ್ಲ್ಯಾಶ್ ಪ್ಲೇಯರ್ಗೆ ಬೆಂಬಲವಿರುವುದಿಲ್ಲ.</translation> <translation id="7441736921018636843">ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಬದಲಾಯಿಸಲು, ನಿಮ್ಮ ಸಿಂಕ್ ಪಾಸ್ಫ್ರೇಸ್ ಅನ್ನು ತೆಗೆದುಹಾಕಲು <ph name="BEGIN_LINK" />ಸಿಂಕ್ ಮರುಹೊಂದಿಸಿ<ph name="END_LINK" /></translation> @@ -5556,7 +5552,6 @@ <translation id="8794025342371547160">ನಿರ್ಬಂಧಿಸಲಾಗಿರುವ ಐಪಿ</translation> <translation id="879413103056696865">ಹಾಟ್ಸ್ಪಾಟ್ ಆನ್ ಆಗಿರುವಾಗ, ನಿಮ್ಮ <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">ಹೊಸ ವಿಂಡೊ</translation> -<translation id="8797086401386164142">ಮುದ್ರಣ ಸರ್ವರ್ನಿಂದ <ph name="NUM_PRINTERS" /> ಪ್ರಿಂಟರ್ಗಳು ಕಂಡುಬಂದಿವೆ.</translation> <translation id="8797459392481275117">ಈ ಸೈಟ್ ಅನ್ನು ಎಂದಿಗೂ ಅನುವಾದಿಸಬೇಡಿ</translation> <translation id="8798099450830957504">ಡಿಫಾಲ್ಟ್</translation> <translation id="8798441408945964110">ಪೂರೈಕೆದಾರರ ಹೆಸರು</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb index f9ec70a0..41c7a415 100644 --- a/chrome/app/resources/generated_resources_ko.xtb +++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">미리보기 로드 중</translation> <translation id="1032605640136438169">새로운 약관을 검토해 주세요.</translation> <translation id="103279545524624934">Android 앱을 실행하려면 디스크 저장 공간을 확보하세요.</translation> -<translation id="1033343386521881354">인쇄 서버에 프린터 1개가 있습니다.</translation> <translation id="1033780634303702874">직렬 기기에 액세스</translation> <translation id="1034942643314881546">앱 생성에 ADB 사용 설정 삽화</translation> <translation id="1036348656032585052">사용 중지</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">전체화면을 종료하려면 |<ph name="ACCELERATOR" />|을(를) 누르세요.</translation> <translation id="1038168778161626396">암호화만</translation> <translation id="1039337018183941703">잘못되었거나 손상된 파일입니다.</translation> -<translation id="1039850285407663109">선택한 파일은 알 수 없는 파일이므로 위험할 수 있습니다. 파일을 열기 전에 검사하는 것을 고려해 보세요.</translation> <translation id="1041175011127912238">페이지가 응답하지 않음</translation> <translation id="1041263367839475438">사용 가능한 기기</translation> <translation id="1042174272890264476">또한 컴퓨터에는 <ph name="SHORT_PRODUCT_NAME" /> RLZ 라이브러리가 내장되어 있습니다. RLZ는 고유하지 않고 개인 식별이 불가능한 태그를 할당하여 특정 홍보 캠페인을 통한 검색 및 <ph name="SHORT_PRODUCT_NAME" /> 사용 실태를 측정합니다. 이러한 라벨은 <ph name="PRODUCT_NAME" />의 Google 검색어에 표시되기도 합니다.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">소프트웨어 제작자를 식별하기 위해 이 인증서 신뢰</translation> <translation id="1861262398884155592">폴더가 비어 있습니다.</translation> <translation id="1863182668524159459">직렬 포트를 찾을 수 없음</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" />은(는) 알 수 없는 파일입니다. 파일을 검사하여 위험을 최소화하세요.</translation> <translation id="1864111464094315414">로그인</translation> <translation id="1864400682872660285">시원함</translation> <translation id="1864454756846565995">USB-C 기기(후면 포트)</translation> @@ -1939,7 +1936,7 @@ <translation id="3677657024345889897">가장 조용하게</translation> <translation id="3677911431265050325">모바일 버전으로 보기</translation> <translation id="3678156199662914018">확장 프로그램: <ph name="EXTENSION_NAME" /></translation> -<translation id="3678613690490567106">동기화를 통해 모든 기기에서 맞춤설정된 환경 사용</translation> +<translation id="3678613690490567106">동기화하여 모든 기기에서 맞춤설정된 환경 사용</translation> <translation id="3681311097828166361">의견을 보내주셔서 감사합니다. 현재 오프라인 상태이므로 보고서는 나중에 전송됩니다.</translation> <translation id="3682824389861648626">움직임 기준</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> 화면 공유 요청</translation> @@ -4023,7 +4020,6 @@ <translation id="6678717876183468697">쿼리 URL</translation> <translation id="6680442031740878064">사용 가능한 저장용량: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">속도</translation> -<translation id="6681301928961274620">인쇄 서버에서 프린터를 찾을 수 없습니다.</translation> <translation id="6681668084120808868">사진 찍기</translation> <translation id="6681964764822470072">'<ph name="APP_NAME" />'이(가) 제거됩니다.</translation> <translation id="668599234725812620">Google Play 열기</translation> @@ -5553,7 +5549,6 @@ <translation id="8794025342371547160">제한된 IP</translation> <translation id="879413103056696865">핫스팟이 사용 설정되어 있는 동안 <ph name="PHONE_NAME" />이(가) 다음과 같이 작동함</translation> <translation id="8795916974678578410">새 창</translation> -<translation id="8797086401386164142">인쇄 서버에 프린터 <ph name="NUM_PRINTERS" />개가 있습니다.</translation> <translation id="8797459392481275117">이 사이트 번역 안함</translation> <translation id="8798099450830957504">기본값</translation> <translation id="8798441408945964110">공급자 이름</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb index 0893cd6b6d..2179621 100644 --- a/chrome/app/resources/generated_resources_ky.xtb +++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Алдын ала көрүү жүктөлүүдө</translation> <translation id="1032605640136438169">Жаңы шарттарды карап чыгыңыз</translation> <translation id="103279545524624934">Android колдонмолорун ишке киргизүү үчүн дисктен орун бошотуңуз.</translation> -<translation id="1033343386521881354">Басып чыгаруу серверинен 1 принтер табылды.</translation> <translation id="1033780634303702874">Ыраатталган интерфейстүү түзмөктөрүңүздү колдонуңуз</translation> <translation id="1034942643314881546">Колдонмолордун иллюстрациясын түзүү үчүн ADB'ни иштетүү</translation> <translation id="1036348656032585052">Өчүрүү</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Толук экрандан чыгуу үчүн |<ph name="ACCELERATOR" />| баскычын басыңыз</translation> <translation id="1038168778161626396">Шифрлегич гана</translation> <translation id="1039337018183941703">Жараксыз же бузук файл</translation> -<translation id="1039850285407663109">Тандалган файл белгисиз жана кооптуу болушу мүмкүн. Аны ачуудан мурда текшерип көрүңүз.</translation> <translation id="1041175011127912238">Барак жооп бербей жатат</translation> <translation id="1041263367839475438">Жеткиликтүү түзмөктөр</translation> <translation id="1042174272890264476">Компьютериңизде <ph name="SHORT_PRODUCT_NAME" /> өнүмүнүн RLZ китепканасы камтылган. Белгилүү бир жарнамалык иш-чара башкарган издөө аракеттерин жана <ph name="SHORT_PRODUCT_NAME" /> колдонулушун талдап туруу үчүн RLZ кеңири кездешкен жалпы таанылуучу тегди дайындайт. Бул белгилер айрым учурларда Google Издөө сурамдарындагы <ph name="PRODUCT_NAME" /> өнүмүндө көрүнөт.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Программаларды иштеп чыгуучулардын аныктыгын текшерүүдө ушул тастыктаманы ишенимдүү деп белгилеңиз</translation> <translation id="1861262398884155592">Бул папка бош</translation> <translation id="1863182668524159459">Сериялык порт табылган жок</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> белгисиз. Коркунучтун алдын алуу үчүн файлды текшериңиз.</translation> <translation id="1864111464094315414">Кирүү</translation> <translation id="1864400682872660285">Салкыныраак</translation> <translation id="1864454756846565995">USB-C түзмөгү (арткы оюкча)</translation> @@ -4025,7 +4022,6 @@ <translation id="6678717876183468697">Сурам URL'и</translation> <translation id="6680442031740878064">Бош орун: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Баалоо</translation> -<translation id="6681301928961274620">Басып чыгаруу серверинде бир да принтер табылган жок.</translation> <translation id="6681668084120808868">Сүрөт тартуу</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" чыгарылып салынат.</translation> <translation id="668599234725812620">Google Play'ди ачуу</translation> @@ -5554,7 +5550,6 @@ <translation id="8794025342371547160">Чектелген IP</translation> <translation id="879413103056696865">Туташуу түйүнү күйүп турганда, сиздин <ph name="PHONE_NAME" /> төмөнкүлөрдү аткарат:</translation> <translation id="8795916974678578410">Жаңы терезе</translation> -<translation id="8797086401386164142">Басып чыгаруу серверинде <ph name="NUM_PRINTERS" /> принтер табылды.</translation> <translation id="8797459392481275117">Бул сайт эч качан которулбасын</translation> <translation id="8798099450830957504">Демейки</translation> <translation id="8798441408945964110">Жабдуучунун аталышы</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb index bf49b1e..c376a4e 100644 --- a/chrome/app/resources/generated_resources_lo.xtb +++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">ກໍາລັງໂຫຼດການເບິ່ງຕົວຢ່າງກ່ອນ</translation> <translation id="1032605640136438169">ກະລຸນາກວດເບິ່ງຂໍ້ກຳນົດໃໝ່</translation> <translation id="103279545524624934">ຂະຫຍາຍພື້ນທີ່ດິສກ໌ເພື່ອເປີດໃຊ້ແອັບ Android.</translation> -<translation id="1033343386521881354">ພົບເຄື່ອງພິມ 1 ລາຍການຈາກເຊີບເວີການພິມ.</translation> <translation id="1033780634303702874">ເຂົ້າຫາອຸປະກອນ Serial ຂອງທ່ານ</translation> <translation id="1034942643314881546">ເປີດນຳໃຊ້ ADB ເພື່ອສ້າງຮູບປະກອບແອັບ</translation> <translation id="1036348656032585052">ປິດ</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">ກົດ |<ph name="ACCELERATOR" />| ເພື່ອອອກຈາກເຕັມຈໍ</translation> <translation id="1038168778161626396">ປ່ຽນເປັນລະຫັດເທົ່ານັ້ນ</translation> <translation id="1039337018183941703">ໄຟລ໌ເສຍຫາຍ ຫຼື ບໍ່ຖືກຕ້ອງ</translation> -<translation id="1039850285407663109">ໄຟລ໌ທີ່ເລືອກເປັນໄຟລ໌ທີ່ບໍ່ຮູ້ຈັກ ແລະ ອາດຈະເປັນອັນຕະລາຍ. ຂໍແນະນຳໃຫ້ສະແກນກ່ອນເປີດໄຟລ໌ນີ້.</translation> <translation id="1041175011127912238">ໜ້ານີ້ບໍ່ຕອບສະໜອງ</translation> <translation id="1041263367839475438">ອຸປະກອນທີ່ໃຊ້ໄດ້</translation> <translation id="1042174272890264476">ຄອມພິວເຕີຂອງທ່ານຍັງມາພ້ອມກັບຄັງເກັບມ້ຽນ RLZ ຂອງ <ph name="SHORT_PRODUCT_NAME" /> ມາກັບເຄື່ອງ. RLZ ມອບໝາຍໃຫ້ແທັກສາມາດລະບຸໄດ້ບໍ່ເປັນເອກະລັກ, ບໍ່ເປັນສ່ວນຕົວ ເພື່ອວັດແທກການຄົ້ນຫາ ແລະການໃຊ້ <ph name="SHORT_PRODUCT_NAME" /> ຂັບເຄື່ອນໂດຍການໂຄສະນາສະເພາະ. ບາງຄັ້ງສະຫຼາກເຫຼົ່ານີ້ປະກົດຂຶ້ນຢູ່ໃນການສອບຖາມການຄົ້ນຫາ Google ຢູ່ໃນ <ph name="PRODUCT_NAME" />.</translation> @@ -637,7 +635,6 @@ <translation id="1858585891038687145">ເຊື່ອໝັ້ນໃບຢັ້ງຢືນນີ້ສຳລັບການລະບຸຕົວຕົນຜູ້ສ້າງຊອບແວ</translation> <translation id="1861262398884155592">ໂຟນເດີນີ້ຫວ່າງເປົ່າ</translation> <translation id="1863182668524159459">ບໍ່ພົບຜອດອະນຸກຳ</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> ເປັນໄຟລ໌ທີ່ບໍ່ຮູ້ຈັກ. ສະແກນໄຟລ໌ເພື່ອເຮັດໃຫ້ມີຄວາມສ່ຽງໜ້ອຍສຸດ.</translation> <translation id="1864111464094315414">ເຂົ້າສູ່ລະບົບ</translation> <translation id="1864400682872660285">ເຢັນກວ່າ</translation> <translation id="1864454756846565995">ອຸປະກອນ USB-C (ຜອດດ້ານຫຼັງ)</translation> @@ -4023,7 +4020,6 @@ <translation id="6678717876183468697">URL ສອບຖາມ</translation> <translation id="6680442031740878064">ມີໃຫ້: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">ໃຫ້ຄະແນນ</translation> -<translation id="6681301928961274620">ຊອກບໍ່ເຫັນເຄື່ອງພິມໃດໆຈາກເຊີບເວີການພິມ.</translation> <translation id="6681668084120808868">ຖ່າຍຮູບ</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" ຈະຖືກຖອນຕິດຕັ້ງ.</translation> <translation id="668599234725812620">ເປີດ Google Play</translation> @@ -5551,7 +5547,6 @@ <translation id="8794025342371547160">IP ທີ່ຖືກຈໍາກັດ</translation> <translation id="879413103056696865">ໃນຂະນະທີ່ຮັອດສະປອດເປີດຢູ່, <ph name="PHONE_NAME" /> ຂອງທ່ານຈະ:</translation> <translation id="8795916974678578410">ໜ້າຕ່າງໃຫມ່</translation> -<translation id="8797086401386164142">ພົບເຄື່ອງພິມ <ph name="NUM_PRINTERS" /> ເຄື່ອງຈາກເຊີບເວີການພິມ.</translation> <translation id="8797459392481275117">ຢ່າແປເວັບໄຊນີ້</translation> <translation id="8798099450830957504">ຄ່າມາດຕະຖານ</translation> <translation id="8798441408945964110">ຊື່ຜູ້ໃຫ້ບໍລິການ</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb index 9486d37..600b45b 100644 --- a/chrome/app/resources/generated_resources_lt.xtb +++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Įkeliama peržiūra</translation> <translation id="1032605640136438169">Peržiūrėkite naujas sąlygas</translation> <translation id="103279545524624934">Atlaisvinkite vietos diske, kad galėtumėte paleisti „Android“ programas.</translation> -<translation id="1033343386521881354">Rastas vienas spausdintuvas iš spausdinimo serverio.</translation> <translation id="1033780634303702874">Pasiekti nuosekliuosius įtaisus</translation> <translation id="1034942643314881546">ADB įgalinimas kurti programos iliustraciją</translation> <translation id="1036348656032585052">Išjungti</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Paspauskite |<ph name="ACCELERATOR" />|, kad išeitumėte iš viso ekrano režimo</translation> <translation id="1038168778161626396">Tik šifruoti</translation> <translation id="1039337018183941703">Netinkamas arba sugadintas failas</translation> -<translation id="1039850285407663109">Pasirinktas failas nežinomas ir gali būti pavojingas. Apsvarstykite galimybę nuskaityti prieš atidarydami šį failą.</translation> <translation id="1041175011127912238">Šis puslapis neatsako</translation> <translation id="1041263367839475438">Pasiekiami įrenginiai</translation> <translation id="1042174272890264476">Jūsų kompiuteryje taip pat įdiegta „<ph name="SHORT_PRODUCT_NAME" />“ RLZ biblioteka. RLZ priskiria neunikalią, asmens neidentifikuojančią žymą, kad įvertintų tam tikros reklamos kampanijos paieškas ir „<ph name="SHORT_PRODUCT_NAME" />“ naudojimą. Šios etiketės kartais rodomos „Google“ paieškos užklausose „<ph name="PRODUCT_NAME" />“.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Pasitikėti šiuo sertifikatu nustatant programinės įrangos kūrėjus</translation> <translation id="1861262398884155592">Šis aplankas tuščias</translation> <translation id="1863182668524159459">Nuosekliųjų prievadų nerasta</translation> -<translation id="1863552924692672565">Failas „<ph name="FILE_NAME" />“ nežinomas. Nuskaitykite failą, kad sumažintumėte riziką.</translation> <translation id="1864111464094315414">Prisijungimas</translation> <translation id="1864400682872660285">Šaltesnio atspalvio</translation> <translation id="1864454756846565995">USB-C įrenginys (prievadas gale)</translation> @@ -4026,7 +4023,6 @@ <translation id="6678717876183468697">Užklausos URL</translation> <translation id="6680442031740878064">Pasiekiama: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Sparta</translation> -<translation id="6681301928961274620">Nerasta jokių spausdintuvų iš spausdinimo serverio.</translation> <translation id="6681668084120808868">Fotografuoti</translation> <translation id="6681964764822470072">„<ph name="APP_NAME" />“ bus pašalinta.</translation> <translation id="668599234725812620">Atidaryti „Google Play“</translation> @@ -5556,7 +5552,6 @@ <translation id="8794025342371547160">Ribotas IP</translation> <translation id="879413103056696865">Kai viešosios interneto prieigos taškas bus įjungtas, „<ph name="PHONE_NAME" />“:</translation> <translation id="8795916974678578410">Naujas langas</translation> -<translation id="8797086401386164142">Rasta spausdintuvų iš spausdinimo serverio: <ph name="NUM_PRINTERS" />.</translation> <translation id="8797459392481275117">Niekada neversti šios svetainės</translation> <translation id="8798099450830957504">Numatytasis</translation> <translation id="8798441408945964110">Teikėjo pavadinimas</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb index e06c51a1..208ad54f 100644 --- a/chrome/app/resources/generated_resources_lv.xtb +++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Notiek priekšskatījuma ielāde</translation> <translation id="1032605640136438169">Lūdzu, pārskatiet jaunos noteikumus.</translation> <translation id="103279545524624934">Atbrīvojiet vietu diskā, lai varētu palaist Android lietotnes.</translation> -<translation id="1033343386521881354">Atrasts 1 printeris no drukas servera.</translation> <translation id="1033780634303702874">Piekļūt jūsu seriālajām ierīcēm</translation> <translation id="1034942643314881546">ADB iespējošana lietotņu ilustrācijas izveidei</translation> <translation id="1036348656032585052">Izslēgt</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Lai izietu no pilnekrāna režīma, nospiediet |<ph name="ACCELERATOR" />|.</translation> <translation id="1038168778161626396">Tikai šifrēt</translation> <translation id="1039337018183941703">Nederīgs vai bojāts fails</translation> -<translation id="1039850285407663109">Atlasītais fails nav zināms un var būt bīstams. Pirms šī faila atvēršanas apsveriet iespēju to skenēt.</translation> <translation id="1041175011127912238">Šī lapa nereaģē</translation> <translation id="1041263367839475438">Pieejamās ierīces</translation> <translation id="1042174272890264476">Jūsu datorā ir iebūvēta arī pārlūka <ph name="SHORT_PRODUCT_NAME" /> RLZ bibliotēka. RLZ piešķir neunikālu, personu neidentificējošu atzīmi, lai novērtētu noteiktas reklāmas kampaņas ietvaros ievadītos meklēšanas vienumus un pārlūka <ph name="SHORT_PRODUCT_NAME" /> lietojumu. Šīs atzīmes pārlūkā <ph name="PRODUCT_NAME" /> dažkārt tiek rādītas Google meklēšanas vaicājumos.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Uzticēties šim sertifikātam, lai identificētu programmatūras izstrādātājus</translation> <translation id="1861262398884155592">Šī mape ir tukša</translation> <translation id="1863182668524159459">Netika atrasti seriālie porti</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> nav zināms. Skenējiet failu, lai samazinātu risku.</translation> <translation id="1864111464094315414">Pieteikties</translation> <translation id="1864400682872660285">Vēsāks</translation> <translation id="1864454756846565995">USB-C ierīce (aizmugurējā pieslēgvieta)</translation> @@ -4025,7 +4022,6 @@ <translation id="6678717876183468697">Vaicājuma URL</translation> <translation id="6680442031740878064">Pieejamā vieta: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Ātrums</translation> -<translation id="6681301928961274620">Netika atrasts neviens printeris no drukas servera.</translation> <translation id="6681668084120808868">Uzņemt fotoattēlu</translation> <translation id="6681964764822470072">Lietotne <ph name="APP_NAME" /> tiks atinstalēta.</translation> <translation id="668599234725812620">Atvērt pakalpojumu Google Play</translation> @@ -5554,7 +5550,6 @@ <translation id="8794025342371547160">Ierobežota IP adrese</translation> <translation id="879413103056696865">Kamēr darbosies tīklājs, ierīcē <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Jauns logs</translation> -<translation id="8797086401386164142">Atrasti <ph name="NUM_PRINTERS" /> printeri no drukas servera.</translation> <translation id="8797459392481275117">Nekad netulkot šo vietni</translation> <translation id="8798099450830957504">Noklusējums</translation> <translation id="8798441408945964110">Pakalpojumu sniedzēja nosaukums</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb index 09dd812..766d4ac 100644 --- a/chrome/app/resources/generated_resources_mk.xtb +++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Се вчитува преглед</translation> <translation id="1032605640136438169">Прегледајте ги новите услови</translation> <translation id="103279545524624934">Ослободете простор на дискот за да ги стартувате апликациите за Android.</translation> -<translation id="1033343386521881354">Најден е 1 печатач од серверот за печатење.</translation> <translation id="1033780634303702874">Пристапете до сериските уреди</translation> <translation id="1034942643314881546">Се овозможува adb за создавање илустрација за апликации</translation> <translation id="1036348656032585052">Исклучи</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Притиснете |<ph name="ACCELERATOR" />| за да излезете од цел екран</translation> <translation id="1038168778161626396">Само шифрирање</translation> <translation id="1039337018183941703">Невалидна или оштетена датотека</translation> -<translation id="1039850285407663109">Избраната датотека е непозната и може да биде опасна. Скенирајте ја пред да ја отворите.</translation> <translation id="1041175011127912238">Страницава не реагира</translation> <translation id="1041263367839475438">Достапни уреди</translation> <translation id="1042174272890264476">Вашиот компјутер е со вградена <ph name="SHORT_PRODUCT_NAME" /> RLZ библиотека. RLZ доделува неуникатна, не-лична идентификувачка картичка за мерење на пребарувањата и користење на <ph name="SHORT_PRODUCT_NAME" /> поттикнато од одредена промотивна кампања. Овие ознаки понекогаш се појавуваат во прашалници за пребарување на Google во <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Имајте доверба во сертификатов за идентификување на производителите на софтвер</translation> <translation id="1861262398884155592">Папкава е празна</translation> <translation id="1863182668524159459">Не се најдени сериски порти</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> е непозната. Скенирајте ја датотеката за да го намалите ризикот.</translation> <translation id="1864111464094315414">Најавување</translation> <translation id="1864400682872660285">Поладни</translation> <translation id="1864454756846565995">USB-Ц уред (задна порта)</translation> @@ -4025,7 +4022,6 @@ <translation id="6678717876183468697">Барај URL</translation> <translation id="6680442031740878064">Слободен простор: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Брзина</translation> -<translation id="6681301928961274620">Не се најдени печатачи од серверот за печатење.</translation> <translation id="6681668084120808868">Фотографирај</translation> <translation id="6681964764822470072">„<ph name="APP_NAME" />“ ќе се деинсталира.</translation> <translation id="668599234725812620">Отвори Google Play</translation> @@ -5557,7 +5553,6 @@ <translation id="8794025342371547160">Ограничена IP</translation> <translation id="879413103056696865">Додека е вклучена точката на пристап, вашиот <ph name="PHONE_NAME" /> ќе:</translation> <translation id="8795916974678578410">Нов прозорец</translation> -<translation id="8797086401386164142">Најдени се <ph name="NUM_PRINTERS" /> печатачи од серверот за печатење.</translation> <translation id="8797459392481275117">Никогаш не преведувај го сајтов</translation> <translation id="8798099450830957504">Стандардно</translation> <translation id="8798441408945964110">Име на оператор</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb index 94c8101..ea61dbf 100644 --- a/chrome/app/resources/generated_resources_ml.xtb +++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -33,7 +33,6 @@ <translation id="1036982837258183574">പൂർണ്ണ സ്ക്രീനിൽ നിന്ന് പുറത്തുകടക്കാൻ |<ph name="ACCELERATOR" />| അമർത്തുക</translation> <translation id="1038168778161626396">എന്സിഫര് മാത്രം</translation> <translation id="1039337018183941703">ഫയൽ അസാധുവോ കേടായതോ ആണ്</translation> -<translation id="1039850285407663109">തിരഞ്ഞെടുത്ത ഫയൽ അജ്ഞാതമാണ്, അപകടകരവുമായേക്കാം. ഈ ഫയൽ തുറക്കുന്നതിന് മുമ്പ് സ്കാൻ ചെയ്യുന്നത് പരിഗണിക്കുക.</translation> <translation id="1041175011127912238">ഈ പേജ് പ്രതികരിക്കുന്നില്ല</translation> <translation id="1041263367839475438">ലഭ്യമായ ഉപകരണങ്ങൾ</translation> <translation id="1042174272890264476">നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ <ph name="SHORT_PRODUCT_NAME" /> എന്നതിന്റെ RLZ ലൈബ്രറി അന്തർനിർമ്മിതവുമാണ്. RLZ, ഒരു നിർദ്ദിഷ്ട പ്രമോഷണൽ കാമ്പെയ്നിലൂടെ ലഭിക്കുന്ന തിരയലുകളും <ph name="SHORT_PRODUCT_NAME" /> ഉപയോഗവും കണക്കാക്കുന്നതിന് അദ്വിതീയമല്ലാത്തതും വ്യക്തിപരമായി തിരിച്ചറിയാനാകാത്തതുമായ ഒരു ടാഗ് നിയുക്തമാക്കുന്നു. ഈ ലേബലുകൾ ചിലസമയത്ത് <ph name="PRODUCT_NAME" /> എന്നതിലെ Google തിരയലിൽ ദൃശ്യമാകുന്നു.</translation> @@ -152,6 +151,7 @@ <translation id="1197979282329025000"><ph name="PRINTER_NAME" /> പ്രിന്ററിനായുള്ള പ്രിന്റര് കാര്യക്ഷമതകള് വീണ്ടെടുക്കുമ്പോള് ഒരു പിശക് സംഭവിച്ചു. ഈ പ്രിന്റര് <ph name="CLOUD_PRINT_NAME" /> ഉപയോഗിച്ച് രജിസ്റ്റര് ചെയ്യാന് കഴിയില്ല.</translation> <translation id="119944043368869598">എല്ലാം നീക്കുക</translation> <translation id="1201402288615127009">അടുത്തത്</translation> +<translation id="1202556750060561551"><ph name="SITE_GROUP_NAME" /> എന്നതും അതിന് കീഴിലുള്ള എല്ലാ സൈറ്റുകളും അതിന്റെ ഇൻസ്റ്റാൾ ചെയ്തിരിക്കുന്ന ആപ്പുകളും സംഭരിച്ചിരിക്കുന്ന എല്ലാ ഡാറ്റയും കുക്കികളും മായ്ക്കും.</translation> <translation id="1202596434010270079">കിയോസ്ക് ആപ്പ് അപ്ഡേറ്റ് ചെയ്തു. USB സ്റ്റിക്ക് നീക്കംചെയ്യുക.</translation> <translation id="120368089816228251">മ്യൂസിക് നോട്ട്</translation> <translation id="1205489148908752564">വൈറ്റ്ലിസ്റ്റ് ചെയ്ത ഉപയോക്താക്കളെ റീഡുചെയ്യുക, മാറ്റുക</translation> @@ -279,8 +279,10 @@ <translation id="138784436342154190">ഡിഫോൾട്ട് ആരംഭ പേജ് പുനഃസ്ഥാപിക്കണോ?</translation> <translation id="1390548061267426325">സാധാരണ ടാബായി തുറക്കുക</translation> <translation id="1393283411312835250">സൂര്യനും മേഘങ്ങളും</translation> +<translation id="1393787139683794508">ഇത് <ph name="ORIGIN_NAME" /> സംഭരിച്ചിരിക്കുന്ന എല്ലാ ഡാറ്റയും കുക്കികളും മായ്ക്കും.</translation> <translation id="1395730723686586365">അപ്ഡേറ്റർ ആരംഭിച്ചു</translation> <translation id="1396139853388185343">പ്രിന്റർ സജ്ജീകരിക്കുന്നതിൽ പിശക്</translation> +<translation id="1396259464226642517">ഈ ഫലം അപ്രതീക്ഷിതമായിരുന്നോ? <ph name="BEGIN_LINK" />ഫീഡ്ബാക്ക് അയയ്ക്കൂ<ph name="END_LINK" /></translation> <translation id="1396963298126346194">നിങ്ങൾ നൽകിയ ഉപയോക്തൃനാമവും പാസ്വേഡും യോജിക്കുന്നില്ല</translation> <translation id="1397500194120344683">യോഗ്യമായ ഉപകരണങ്ങളൊന്നുമില്ല. <ph name="LINK_BEGIN" />കൂടുതലറിയുക<ph name="LINK_END" /></translation> <translation id="1398853756734560583">വലുതാക്കുക</translation> @@ -551,6 +553,7 @@ <translation id="1758018619400202187">EAP-TLS</translation> <translation id="17584710573359123">Chrome വെബ് സ്റ്റോറിൽ കാണുക</translation> <translation id="176193854664720708">വിരലടയാള സെന്സര്, പവര് ബട്ടണിലാണ് ഉള്ളത്. ഏതെങ്കിലും വിരലുകൊണ്ട് അത് മൃദുവായി സ്പര്ശിക്കുക.</translation> +<translation id="176273057789108760">സുരക്ഷാ അംഗീകാരത്തിനായി നിങ്ങളുടെ ഓർഗനൈസേഷൻ, വലിച്ചിട്ട ഫയലുകൾ പരിശോധിക്കുകയാണ്.</translation> <translation id="1763046204212875858">ആപ്പ് കുറുക്കുവഴികള് സൃഷ്ടിക്കുക</translation> <translation id="1763108912552529023">പര്യവേക്ഷണം ചെയ്യുന്നത് തുടരുക</translation> <translation id="1763808908432309942">പുതിയൊരു ടാബിൽ തുറക്കുന്നു</translation> @@ -589,6 +592,7 @@ <translation id="1805472176602625930">സുരക്ഷാ കീയിലുള്ള ബട്ടൺ അമർത്തുക</translation> <translation id="1805738995123446102">പശ്ചാത്തല ടാബ് നിങ്ങളുടെ മൈക്രോഫോൺ ഉപയോഗിക്കുന്നു</translation> <translation id="1805822111539868586">കാഴ്ചകൾ പരിശോധിക്കുക</translation> +<translation id="1805888043020974594">പ്രിന്റ് സെർവർ</translation> <translation id="1805967612549112634">പിൻ സ്ഥിരീകരിക്കുക</translation> <translation id="1809734401532861917"><ph name="USER_EMAIL_ADDRESS" /> ഇമെയിലിൽ എന്റെ ബുക്ക്മാർക്കുകളും ചരിത്രവും പാസ്വേഡുകളും മറ്റ് ക്രമീകരണവും ചേർക്കുക</translation> <translation id="1813278315230285598">സേവനങ്ങള്</translation> @@ -630,7 +634,6 @@ <translation id="1858585891038687145">സോഫ്റ്റ്വെയർ നിർമ്മാതാക്കളെ തിരിച്ചറിയുന്നതിന് ഈ സർട്ടിഫിക്കറ്റിനെ വിശ്വസിക്കുക</translation> <translation id="1861262398884155592">ഈ ഫോൾഡറിൽ ഒന്നുമില്ല</translation> <translation id="1863182668524159459">സീരിയൽ പോർട്ടുകളൊന്നും കണ്ടെത്തിയില്ല</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> അജ്ഞാതമാണ്. അപകടസാധ്യത കുറയ്ക്കാൻ ഫയൽ സ്കാൻ ചെയ്യുക.</translation> <translation id="1864111464094315414">സൈൻ ഇൻ</translation> <translation id="1864400682872660285">കൂളർ</translation> <translation id="1864454756846565995">USB-C ഉപകരണം (പുറകിലെ പോർട്ട്)</translation> @@ -737,6 +740,7 @@ <translation id="202352106777823113">ഡൗൺലോഡ് ചെയ്യാൻ വളരെയധികം സമയമെടുത്തതിനാൽ നെറ്റ്വർക്ക് അത് നിർത്തിവച്ചു.</translation> <translation id="2025632980034333559"><ph name="APP_NAME" /> എന്നത് ക്രാഷ് ചെയ്തു. എക്സ്റ്റന്ഷന് റീലോഡ് ചെയ്യുന്നതിന് ഈ ബലൂണ് ക്ലിക്ക് ചെയ്യുക.</translation> <translation id="2025891858974379949">സുരക്ഷിതമല്ലാത്ത ഉള്ളടക്കം</translation> +<translation id="202918510990975568">സുരക്ഷ കോൺഫിഗർ ചെയ്ത് സൈൻ ഇൻ ചെയ്യാൻ നിങ്ങളുടെ പാസ്വേഡ് നൽകുക</translation> <translation id="2034346955588403444">മറ്റൊരു WiFi നെറ്റ്വർക്ക് ചേർക്കുക</translation> <translation id="203574396658008164">ലോക്ക് സ്ക്രീനിൽ നിന്ന് കുറിപ്പെടുക്കുന്നത് പ്രവർത്തനക്ഷമമാക്കുക</translation> <translation id="2037445849770872822">ഈ Google അക്കൗണ്ടിനായി മേൽനോട്ടം സജ്ജീകരിച്ചു. കൂടുതൽ രക്ഷാകർതൃ നിയന്ത്രണങ്ങൾ സജ്ജീകരിക്കാൻ 'തുടരുക' തിരഞ്ഞെടുക്കുക. @@ -888,6 +892,7 @@ <translation id="2224471211857467033">ഉപയോഗസഹായി ഇവൻ്റുകൾ</translation> <translation id="2224551243087462610">ഫോള്ഡര് നാമം എഡിറ്റ് ചെയ്യുക</translation> <translation id="2226449515541314767">MIDI ഉപകരണങ്ങളിൽ പൂർണ്ണനിയന്ത്രണം നേടുന്നതിൽ നിന്ന് ഈ സൈറ്റിനെ തടഞ്ഞു.</translation> +<translation id="222704500187107962">നിലവിലെ അദൃശ്യ മോഡ് സെഷനിൽ നിന്ന് നിങ്ങൾ പുറത്തുകടന്ന് കഴിഞ്ഞാൽ ഈ ഒഴിവാക്കൽ സ്വയമേവ നീക്കം ചെയ്യപ്പെടും</translation> <translation id="2227179592712503583">നിർദ്ദേശം നീക്കം ചെയ്യുക</translation> <translation id="2229161054156947610">1 മണിക്കൂറിൽ കൂടുതൽ ശേഷിക്കുന്നു</translation> <translation id="222931766245975952">ഫയലിന് ആവശ്യത്തിന് വലുപ്പമില്ല</translation> @@ -941,6 +946,7 @@ <translation id="2300383962156589922"><ph name="APP_NAME" /> ഇഷ്ടാനുസൃതമാക്കുകയും നിയന്ത്രിക്കുകയും ചെയ്യുക</translation> <translation id="2301382460326681002">വിപുലീകരണ റൂട്ട് ഡയറക്റ്ററി അസാധുവാണ്.</translation> <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" കൂടുതൽ അനുമതികൾ അഭ്യർത്ഥിച്ചു.</translation> +<translation id="23055578400314116">ഒരു ഉപയോക്തൃനാമം തിരഞ്ഞെടുക്കുക</translation> <translation id="2307462900900812319">നെറ്റ്വർക്ക് കോൺഫിഗർ ചെയ്യുക</translation> <translation id="230927227160767054">ഈ പേജ് ഒരു സേവന ഹാൻഡ്ലർ ഇൻസ്റ്റാൾ ചെയ്യാൻ താൽപ്പര്യപ്പെടുന്നു.</translation> <translation id="2309620859903500144">നിങ്ങളുടെ ചലന സെൻസർ അല്ലെങ്കിൽ പ്രകാശ സെൻസർ ആക്സസ് ചെയ്യുന്നതിൽ നിന്ന് ഈ സൈറ്റിനെ ബ്ലോക്ക് ചെയ്തിരിക്കുന്നു.</translation> @@ -980,6 +986,7 @@ <translation id="2353297238722298836">ക്യാമറയും മൈക്രോഫോണും അനുവദനീയം</translation> <translation id="2356070529366658676">ചോദിക്കുക</translation> <translation id="2357330829548294574"><ph name="USER_NAME" /> നീക്കം ചെയ്യുക</translation> +<translation id="235798134753548762">നിങ്ങളുടെ ആപ്പുകൾ, ക്രമീകരണം, വൈഫൈ മുൻഗണനകൾ എന്നിവ സമന്വയിപ്പിക്കും. മാറ്റങ്ങൾ വരുത്താൻ, സജ്ജീകരണം പൂർത്തിയാക്കിയ ശേഷം ഏതുസമയത്തും ക്രമീകരണത്തിലേക്ക് പോവുക.</translation> <translation id="2359345697448000899">ഉപകരണങ്ങൾ മെനുവിലെ വിപുലീകരണങ്ങളിൽ ക്ലിക്ക് ചെയ്യുന്നതിലൂടെ നിങ്ങളുടെ വിപുലീകരണങ്ങൾ നിയന്ത്രിക്കുക.</translation> <translation id="2359808026110333948">തുടരുക</translation> <translation id="236117173274098341">ഓപ്റ്റിമൈസ് ചെയ്യുക</translation> @@ -1032,6 +1039,7 @@ <translation id="2436720498717686157">നിങ്ങളുടെ ഓർഗനൈസേഷൻ ഇപ്പോൾ ഈ ഉപകരണത്തിൽ ഒരു അപ്ഡേറ്റ് നടത്താൻ ആവശ്യപ്പെടുന്നു</translation> <translation id="2439545803278355377">നിങ്ങളുടെ പുതിയ പിൻ നൽകുക. കുറഞ്ഞത് നാല് പ്രതീകങ്ങൾ ദൈർഘ്യമുള്ളതായിരിക്കണം പിൻ, അക്ഷരങ്ങളും അക്കങ്ങളും മറ്റ് പ്രതീകങ്ങളും ഇതിൽ ഉൾപ്പെടാം.</translation> <translation id="2440604414813129000">ഉറവിടം കാണുക</translation> +<translation id="244231003699905658">വിലാസം തെറ്റാണ്. വിലാസം പരിശോധിച്ച ശേഷം വീണ്ടും ശ്രമിക്കുക.</translation> <translation id="2442916515643169563">ടെക്സ്റ്റ് ഷാഡോ</translation> <translation id="2445081178310039857">വിപുലീകരണ റൂട്ട് ഡയറക്റ്ററി ആവശ്യമാണ്.</translation> <translation id="2445484935443597917">പുതിയ പ്രൊഫൈൽ സൃഷ്ടിക്കുക</translation> @@ -1086,6 +1094,7 @@ <translation id="2501278716633472235">പിന്നോട്ട് പോകുക</translation> <translation id="2501797496290880632">ഒരു കുറുക്കുവഴി ടൈപ്പ് ചെയ്യുക</translation> <translation id="2502441965851148920">സ്വയമേവയുള്ള അപ്ഡേറ്റുകൾ പ്രവർത്തനക്ഷമമാക്കി. സ്വമേധയാ ഉള്ള അപ്ഡേറ്റുകൾ നിങ്ങളുടെ അഡ്മിനിസ്ട്രേറ്റർ പ്രവർത്തനരഹിതമാക്കി.</translation> +<translation id="2502719318159902502">പൂർണ്ണമായ ആക്സസ്</translation> <translation id="2505127913256479918">മേൽനോട്ടം വഹിക്കപ്പെടുന്ന ഈ അക്കൗണ്ട് വൈകാതെ നീക്കം ചെയ്യപ്പെടും</translation> <translation id="2505324914378689427">{SCREEN_INDEX,plural, =1{സ്ക്രീൻ #}other{സ്ക്രീൻ #}}</translation> <translation id="2505402373176859469"><ph name="TOTAL_SIZE" /> ന്റെ <ph name="RECEIVED_AMOUNT" /></translation> @@ -1358,6 +1367,7 @@ <translation id="2865919525181940183">നിലവിൽ സ്ക്രീനിലുള്ള പ്രോഗ്രാമുകളുടെ സ്ക്രീൻ ഷോട്ട്</translation> <translation id="286674810810214575">ഊർജ സ്രോതസ്സുകൾ പരിശോധിക്കുന്നു...</translation> <translation id="2867768963760577682">പിന് ചെയ്ത ടാബായി തുറക്കുക</translation> +<translation id="2868184003987917410">നിങ്ങളുടെ വെർച്വൽ റിയാലിറ്റി ഉപകരണങ്ങൾ/ഡാറ്റ ആക്സസ് ചെയ്യാൻ സൈറ്റുകളെ അനുവദിക്കരുത്</translation> <translation id="2868746137289129307">ഈ വിപുലീകരണം എന്റർപ്രൈസ് നയം ഉപയോഗിച്ച് കാലഹരണപ്പെടുത്തുകയും പ്രവർത്തനരഹിതമാക്കുകയും ചെയ്തു. പുതിയ പതിപ്പ് ലഭ്യമാകുമ്പോൾ അത് സ്വയമേവ പ്രവർത്തനക്ഷമമായേക്കാം.</translation> <translation id="2870560284913253234">സൈറ്റ്</translation> <translation id="2870909136778269686">അപ്ഡേറ്റ് ചെയ്യുന്നു...</translation> @@ -1403,6 +1413,7 @@ <translation id="2916745397441987255">വിപുലീകരണങ്ങൾ തിരയുക</translation> <translation id="2921081876747860777">നിങ്ങളുടെ ലോക്കൽ ഡാറ്റ സംരക്ഷിക്കുന്നതിന് പാസ്വേഡ് സൃഷ്ടിക്കുക.</translation> <translation id="2923234477033317484">ഈ അക്കൗണ്ട് നീക്കം ചെയ്യുക</translation> +<translation id="2925054096976782003">സുരക്ഷാ അംഗീകാരത്തിനായി നിങ്ങളുടെ ഓർഗനൈസേഷൻ, ഒട്ടിച്ച ഡാറ്റ പരിശോധിക്കുകയാണ്.</translation> <translation id="2926085873880284723">ഡിഫോൾട്ട് കുറുക്കുവഴികൾ പുനഃസ്ഥാപിക്കുക</translation> <translation id="2927017729816812676">കാഷെ സ്റ്റോറേജ്</translation> <translation id="2931157624143513983">പ്രിന്റ് ചെയ്യാനുള്ള സ്ഥലത്തിന് അനുയോജ്യമാക്കുക</translation> @@ -1426,6 +1437,7 @@ <translation id="2956070239128776395">വിഭാഗം ഗ്രൂപ്പിനുള്ളിലാണ്: <ph name="ERROR_LINE" /></translation> <translation id="2957117904572187936">നിങ്ങളുടെ ഉപകരണത്തിലെ ഫയലുകളോ ഫോൾഡറുകളോ എഡിറ്റ് ചെയ്യാൻ ഒരു സൈറ്റിനെയും അനുവദിക്കരുത്</translation> <translation id="2958721676848865875">പായ്ക്ക് വിപുലീകരണ മുന്നറിയിപ്പ്</translation> +<translation id="2959127025785722291">എന്തോ കുഴപ്പമുണ്ടായി. സ്കാനിംഗ് പൂർത്തിയാക്കാനായില്ല. വീണ്ടും ശ്രമിക്കുക.</translation> <translation id="2959842337402130152">സ്റ്റോറേജ് സ്പെയ്സ് ഇല്ലാത്തതിനാൽ പുനഃസ്ഥാപിക്കാനായില്ല. ഉപകരണത്തിൽ <ph name="SPACE_REQUIRED" /> ഇടമുണ്ടാക്കി വീണ്ടും ശ്രമിക്കുക.</translation> <translation id="296026337010986570">പൂര്ത്തിയായി! ദോഷകരമായ സോഫ്റ്റ്വെയര് നീക്കം ചെയ്തു. വിപുലീകരണങ്ങള് വീണ്ടും ഓണാക്കാന്, <a href="chrome://extensions">വിപുലീകരണങ്ങള്</a> സന്ദര്ശിക്കുക.</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" /> (വിപുലീകരണം നൽകി)</translation> @@ -1683,6 +1695,7 @@ <translation id="3348038390189153836">നീക്കം ചെയ്യാവുന്ന ഉപകരണം കണ്ടെത്തി</translation> <translation id="3349933790966648062">മെമ്മറി ഫൂട്ട് പ്രിന്റ്</translation> <translation id="3350117557200012647">ജോടിയാക്കൽ മോഡിലേക്ക് പ്രവേശിക്കുക</translation> +<translation id="3350244554415289209">നിങ്ങളുടെ ക്യാമറയുടെ സ്ഥാനം ആക്സസ് ചെയ്യാനോ നിങ്ങളുടെ റൂം മാപ്പ് ചെയ്യാനോ ഒരു സൈറ്റ് താൽപ്പര്യപ്പെടുമ്പോൾ ചോദിക്കുക (ശുപാർശ ചെയ്യുന്നത്)</translation> <translation id="3355936511340229503">കണക്ഷന് പിശക്.</translation> <translation id="3356580349448036450">പൂര്ത്തിയാക്കൂ</translation> <translation id="3359256513598016054">സര്ട്ടിഫിക്കറ്റ് നയ നിയന്ത്രണങ്ങള്</translation> @@ -1746,6 +1759,7 @@ <translation id="3448492834076427715">അക്കൗണ്ട് അപ്ഡേറ്റ് ചെയ്യുക</translation> <translation id="3449839693241009168"><ph name="EXTENSION_NAME" /> ലേക്ക് കമാന്റുകള് അയയ്ക്കുന്നതിന് <ph name="SEARCH_KEY" /> അമര്ത്തുക</translation> <translation id="3450157232394774192">നിഷ്ക്രിയ നില ഒക്യുപ്പൻസി ശതമാനം</translation> +<translation id="3451332697983754369">എന്റെ <ph name="DEVICE_TYPE" /> സമന്വയിപ്പിക്കുക</translation> <translation id="3453612417627951340">അംഗീകാരം ആവശ്യമാണ്</translation> <translation id="3454157711543303649">സജീവമാക്കല് പൂര്ത്തിയായി</translation> <translation id="3454213325559396544">ഈ <ph name="DEVICE_TYPE" />-ന് സ്വയമേവയുള്ള അവസാനത്തെ സോഫ്റ്റ്വെയർ, സുരക്ഷാ അപ്ഡേറ്റ് ആണിത്. ഭാവി അപ്ഡേറ്റുകൾ ലഭിക്കാൻ പുതിയൊരു മോഡലിലേക്ക് അപ്ഗ്രേഡ് ചെയ്യൂ.</translation> @@ -1768,6 +1782,7 @@ <translation id="347785443197175480">നിങ്ങളുടെ ക്യാമറയും മൈക്രോഫോണും ആക്സസ് ചെയ്യുന്നതിന് <ph name="HOST" /> എന്നതിനെ അനുവദിക്കുന്നത് തുടരുക</translation> <translation id="3478685642445675458">ഒരാളെ നീക്കംചെയ്യുന്നതിന് മുമ്പ് നിങ്ങളുടെ പ്രൊഫൈൽ അൺലോക്ക് ചെയ്യുക.</translation> <translation id="3479552764303398839">ഇപ്പോഴല്ല</translation> +<translation id="3479685872808224578">പ്രിന്റ് സെർവർ കണ്ടെത്താനായില്ല. വിലാസം പരിശോധിച്ച ശേഷം വീണ്ടും ശ്രമിക്കുക.</translation> <translation id="3481268647794498892"><ph name="COUNTDOWN_SECONDS" /> സെക്കൻഡിനുള്ളിൽ <ph name="ALTERNATIVE_BROWSER_NAME" />-ൽ തുറക്കുന്നു</translation> <translation id="3484273680291419129">ദോഷകരമായ സോഫ്റ്റ്വയർ നീക്കംചെയ്യുന്നു...</translation> <translation id="3484869148456018791">പുതിയ സർട്ടിഫിക്കറ്റ് ലഭ്യമാക്കുക</translation> @@ -1883,6 +1898,7 @@ <translation id="3630132874740063857">നിങ്ങളുടെ ഫോൺ</translation> <translation id="3630995161997703415">എപ്പോൾ വേണമെങ്കിലും ഉപയോഗിക്കാൻ ഈ സൈറ്റിനെ നിങ്ങളുടെ ഷെൽഫിൽ ചേർക്കുക</translation> <translation id="3634507049637220048"><ph name="NETWORK_COUNT" />-ൽ <ph name="NETWORK_INDEX" /> നെറ്റ്വർക്ക്, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, നിങ്ങളുടെ അഡ്മിൻ മാനേജ് ചെയ്യുന്നത്, വിശദാംശങ്ങൾ</translation> +<translation id="3635241501480133979">ഈ ഡാറ്റ നിങ്ങളുടെ ഓർഗനൈസേഷന്റെ സുരക്ഷാ നയങ്ങൾ ലംഘിക്കുന്നതിനാൽ ഇത് വലിച്ചിടാനാവില്ല.</translation> <translation id="3635353578505343390">Google-ലേക്ക് ഫീഡ്ബാക്ക് അയയ്ക്കുക</translation> <translation id="3636096452488277381">ഹലോ, <ph name="USER_GIVEN_NAME" />.</translation> <translation id="3636766455281737684"><ph name="PERCENTAGE" />% - <ph name="TIME" /> ശേഷിക്കുന്നു</translation> @@ -1917,6 +1933,7 @@ <translation id="3677657024345889897">തീരെ ശബ്ജം കുറഞ്ഞ</translation> <translation id="3677911431265050325">മൊബൈൽ സൈറ്റ് അഭ്യർത്ഥിക്കുക</translation> <translation id="3678156199662914018">വിപുലീകരണം: <ph name="EXTENSION_NAME" /></translation> +<translation id="3678613690490567106">ഉപകരണങ്ങളിലുടനീളം വ്യക്തിപരമാക്കിയ അനുഭവം ലഭിക്കാൻ സമന്വയിപ്പിക്കുക</translation> <translation id="3681311097828166361">നിങ്ങളുടെ ഫീഡ്ബാക്കിന് നന്ദി. നിങ്ങളിപ്പോൾ ഓഫ്ലൈനായതിനാൽ, റിപ്പോർട്ട് പിന്നീട് അയയ്ക്കുന്നതാണ്.</translation> <translation id="3682824389861648626">ചലന പരിധി</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> സ്ക്രീൻ പങ്കിടൽ അഭ്യർത്ഥന</translation> @@ -2426,6 +2443,7 @@ <translation id="4400632832271803360">മുകൾ-വരിയിലെ കീകളുടെ പ്രവർത്തനരീതി മാറ്റാൻ 'ലോഞ്ചർ' കീ അമർത്തിപ്പിടിക്കുക</translation> <translation id="4400963414856942668">ഒരു ടാബ് ബുക്ക്മാർക്ക് ചെയ്യാൻ നക്ഷത്ര ചിഹ്നത്തിൽ ക്ലിക്ക് ചെയ്യുക</translation> <translation id="4403775189117163360">മറ്റൊരു ഫോൾഡർ തിരഞ്ഞെടുക്കുക</translation> +<translation id="4404136731284211429">വീണ്ടും സ്കാൻ ചെയ്യുക</translation> <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation> <translation id="4408599188496843485">സ&ഹായം</translation> <translation id="4409697491990005945">മാര്ജിനുകള്</translation> @@ -2444,6 +2462,7 @@ <translation id="4421932782753506458">ഫ്ലഫി</translation> <translation id="4423376891418188461">ക്രമീകരണം പുനഃസ്ഥാപിക്കുക</translation> <translation id="442397852638519243"><ph name="USER_NAME" />, അഡ്മിൻ നിങ്ങളുടെ പാസ്വേഡ് മാറ്റാൻ ആവശ്യപ്പെടുന്നു.</translation> +<translation id="4429030830601238961">ഈ ഡാറ്റ നിങ്ങളുടെ ഓർഗനൈസേഷന്റെ സുരക്ഷാ നയങ്ങൾ ലംഘിക്കുന്നതിനാൽ ഇത് ഒട്ടിക്കാനാവില്ല.</translation> <translation id="4430019312045809116">അളവ്</translation> <translation id="4430369329743628066">ബുക്ക്മാർക്ക് ചേർത്തു</translation> <translation id="4434045419905280838">പോപ്-അപ്പുകളും റീഡയറക്റ്റുകളും</translation> @@ -2490,9 +2509,11 @@ <translation id="4501530680793980440">നീക്കംചെയ്യൽ സ്ഥിരീകരിക്കുക</translation> <translation id="4502423230170890588">ഈ ഉപകരണത്തിൽ നിന്ന് നീക്കം ചെയ്യുക</translation> <translation id="4504940961672722399">ഐക്കണിൽ ക്ലിക്ക് ചെയ്ത് <ph name="EXTENSION_SHORTCUT" /> അമർത്തിക്കൊണ്ടോ ഈ വിപുലീകരണം സജീവമാക്കുക.</translation> +<translation id="4507164039066603071">നിങ്ങളുടെ ക്യാമറയുടെ സ്ഥാനം ആക്സസ് ചെയ്യാനോ നിങ്ങളുടെ റൂം മാപ്പ് ചെയ്യാനോ സൈറ്റുകളെ അനുവദിക്കരുത്</translation> <translation id="4508051413094283164">എല്ലാം അദൃശ്യ വിൻഡോയിൽ തുറക്കുക</translation> <translation id="4508265954913339219">സജീവമാക്കല് പരാജയപ്പെട്ടു</translation> <translation id="4508765956121923607">ഉ&റവിടം കാണുക</translation> +<translation id="4510614391273086606">Linux ഫയലുകളും ആപ്പുകളും അവയുടെ ബാക്കപ്പ് നിലയിലേക്ക് പുനഃസ്ഥാപിക്കുന്നു.</translation> <translation id="451407183922382411"><ph name="COMPANY_NAME" /> നൽകുന്നത്</translation> <translation id="4514610446763173167">പ്ലേ ചെയ്യാനോ നിർത്താനോ വീഡിയോ മാറ്റുക</translation> <translation id="451515744433878153">നീക്കംചെയ്യുക</translation> @@ -2690,6 +2711,7 @@ <translation id="480990236307250886">ഹോംപേജ് തുറക്കുക</translation> <translation id="4813136279048157860">എന്റെ ചിത്രങ്ങൾ</translation> <translation id="4813512666221746211">നെറ്റ്വര്ക്ക് പിശക്</translation> +<translation id="4814378367953456825">ഈ ഫിംഗർപ്രിന്റിന് ഒരു പേര് നൽകുക</translation> <translation id="4820236583224459650">സജീവമായ ടിക്കറ്റായി സജ്ജീകരിക്കുക</translation> <translation id="4821935166599369261">&പ്രൊഫൈലിംഗ് പ്രാപ്തമാക്കി</translation> <translation id="4823484602432206655">ഉപയോക്തൃ, ഉപകരണ ക്രമീകരണങ്ങൾ റീഡ് ചെയ്ത് മാറ്റുക</translation> @@ -2736,6 +2758,7 @@ <translation id="4876895919560854374">സ്ക്രീൻ ലോക്ക് ചെയ്യുക, അൺലോക്ക് ചെയ്യുക</translation> <translation id="4877276003880815204">ഘടകങ്ങൾ പരിശോധിക്കുക</translation> <translation id="4878653975845355462">ഇഷ്ടാനുസൃത പശ്ചാത്തലങ്ങൾ നിങ്ങളുടെ അഡ്മിൻ ഓഫാക്കിയിരിക്കുന്നു</translation> +<translation id="4878718769565915065">ഈ സുരക്ഷാ കീയിലേക്ക് ഒരു ഫിംഗർപ്രിന്റ് ചേർക്കാനായില്ല</translation> <translation id="4879491255372875719">സ്വമേധയാ (ഡിഫോൾട്ട്)</translation> <translation id="4880328057631981605">ആക്സസ് പോയിന്റിന്റെ പേര്</translation> <translation id="4880827082731008257">തിരയൽ ചരിത്രം</translation> @@ -2866,6 +2889,7 @@ <translation id="5065775832226780415">Smart Lock</translation> <translation id="5067399438976153555">എല്ലായ്പ്പോഴും ഓണാക്കുക</translation> <translation id="5067867186035333991"><ph name="HOST" />-ന് നിങ്ങളുടെ മൈക്രോഫോൺ ആക്സസ് ചെയ്യണോ എന്ന് ചോദിക്കുക</translation> +<translation id="5068377946749700758">സുരക്ഷാ അംഗീകാരത്തിനായി നിങ്ങളുടെ ഓർഗനൈസേഷൻ, വലിച്ചിട്ട ഡാറ്റ പരിശോധിക്കുകയാണ്.</translation> <translation id="5068918910148307423">അടുത്തിടെ അടച്ച സൈറ്റുകളെ, ഡാറ്റ അയയ്ക്കുന്നതും സ്വീകരിക്കുന്നതും പൂർത്തിയാക്കാൻ അനുവദിക്കരുത്</translation> <translation id="5068919226082848014">പിസ്സ</translation> <translation id="5072052264945641674">കഴ്സറിന്റെ വലുപ്പം ക്രമീകരിക്കുക</translation> @@ -3058,6 +3082,7 @@ <translation id="5341793073192892252">ഇനിപ്പറയുന്ന കുക്കികളെ ബ്ലോക്ക് ചെയ്തു (മൂന്നാം കക്ഷി കുക്കികളെ വേര്തിരിവ് ഇല്ലാതെ ബ്ലോക്ക് ചെയ്യുന്നു)</translation> <translation id="5341980496415249280">കാത്തിരിക്കുക, പായ്ക്ക് ചെയ്യുന്നു...</translation> <translation id="5342091991439452114">പിൻ നമ്പറിൽ <ph name="MINIMUM" /> അക്കങ്ങളെങ്കിലും വേണം</translation> +<translation id="5344036115151554031">Linux പുനഃസ്ഥാപിക്കുന്നു</translation> <translation id="5352033265844765294">സമയ സ്റ്റാമ്പിംഗ്</translation> <translation id="5353252989841766347">Chrome-ൽ നിന്ന് പാസ്വേഡുകൾ എക്സ്പോർട്ടുചെയ്യുക</translation> <translation id="5355099869024327351">നിങ്ങളെ അറിയിപ്പുകൾ കാണിക്കാൻ അസിസ്റ്റന്റിനെ അനുവദിക്കുക</translation> @@ -3111,6 +3136,7 @@ <translation id="5427459444770871191">&ഘടികാരദിശയില് തിരിക്കുക</translation> <translation id="542872847390508405">നിങ്ങൾ ഒരു അതിഥിയായി ബ്രൗസുചെയ്യുന്നു</translation> <translation id="5428850089342283580"><ph name="ACCNAME_APP" /> (അപ്ഡേറ്റ് ലഭ്യമാണ്)</translation> +<translation id="542948651837270806">പരിചിത പ്ലാറ്റ്ഫോം മൊഡ്യൂൾ ഫേംവെയറിനുള്ള അപ്ഡേറ്റ് ഇൻസ്റ്റാൾ ചെയ്യേണ്ടതുണ്ട്. <ph name="TPM_FIRMWARE_UPDATE_LINK" /> കാണുക</translation> <translation id="5430931332414098647">തൽക്ഷണ ടെതറിംഗ്</translation> <translation id="5431318178759467895">വര്ണ്ണം</translation> <translation id="5431825016875453137">OpenVPN / L2TP</translation> @@ -3291,6 +3317,7 @@ <translation id="5659593005791499971">ഇമെയില്</translation> <translation id="5659833766619490117">ഈ പേജ് വിവർത്തനം ചെയ്യാനായില്ല</translation> <translation id="5660204307954428567"><ph name="DEVICE_NAME" /> എന്ന ഉപകരണവുമായി ജോടിയാക്കുക</translation> +<translation id="5662513737565158057">Linux ആപ്പുകളുടെ പ്രവർത്തനരീതി മാറ്റുക.</translation> <translation id="5667546120811588575">Google Play സജ്ജമാക്കുന്നു...</translation> <translation id="5669267381087807207">സജീവമാക്കുന്നു</translation> <translation id="5669691691057771421">പുതിയ പിൻ നൽകുക</translation> @@ -3700,6 +3727,7 @@ <translation id="6238923052227198598">ലോക്ക് സ്ക്രീനിൽ ഏറ്റവും പുതിയ കുറിപ്പ് സൂക്ഷിക്കുക</translation> <translation id="6239558157302047471">റീലോഡും ഫ്രെയിമും</translation> <translation id="6241530762627360640">നിങ്ങളുടെ സിസ്റ്റവുമായി ജോടിയാക്കിയ Bluetooth ഉപകരണങ്ങളെക്കുറിച്ചുള്ള വിവരങ്ങൾ ആക്സസ് ചെയ്ത് സമീപമുള്ള Bluetooth ഉപകരണങ്ങൾ കണ്ടെത്തുക.</translation> +<translation id="6241844896329831164">ആകസസ് ആവശ്യമില്ല</translation> <translation id="6242589501614145408">നിങ്ങളുടെ സുരക്ഷാ കീ പുനഃക്രമീകരിക്കുക</translation> <translation id="6242852299490624841">ഈ ടാബ് ഫോക്കസ് ചെയ്യുക</translation> <translation id="6243280677745499710">നിലവിൽ സജ്ജീകരിച്ചിരിക്കുന്നത്</translation> @@ -3900,6 +3928,8 @@ <translation id="6531282281159901044">അപകടകരമായ ഫയൽ സൂക്ഷിക്കുക</translation> <translation id="6532101170117367231">Google ഡ്രൈവിൽ സംരക്ഷിക്കുക</translation> <translation id="6532106788206463496">മാറ്റങ്ങൾ സംരക്ഷിക്കുക</translation> +<translation id="6532206849875187177">സുരക്ഷയും സൈൻ ഇൻ ചെയ്യലും</translation> +<translation id="6532527800157340614">നിങ്ങളുടെ ആക്സസ് ടോക്കൺ വീണ്ടെടുക്കാനാവാത്തതിനാൽ സൈൻ ഇൻ ചെയ്യാനായില്ല. നിങ്ങളുടെ നെറ്റ്വർക്ക് കണക്ഷൻ പരിശോധിച്ച ശേഷം വീണ്ടും ശ്രമിക്കുക.</translation> <translation id="6532663472409656417">എൻറോൾ ചെയ്ത എന്റർപ്രൈസ്</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />ശ്രദ്ധിക്കുക:<ph name="END_BOLD" /> ഡാറ്റയുടെ ശേഖരം പ്രകടനത്തെ കുറയ്ക്കുമെന്നതിനാൽ, ചെയ്യുന്നതെന്താണെന്ന് നിങ്ങൾക്ക് അറിയാമെങ്കിലോ അങ്ങനെ ചെയ്യാൻ നിങ്ങൾ ആവശ്യപ്പെട്ടാലോ മാത്രമേ പ്രവർത്തനക്ഷമമാക്കൂ.</translation> <translation id="6541638731489116978">നിങ്ങളുടെ ചലന സെൻസറുകൾ ആക്സസ് ചെയ്യുന്നതിൽ നിന്ന് ഈ സൈറ്റിനെ ബ്ലോക്ക് ചെയ്തിരിക്കുന്നു.</translation> @@ -3907,6 +3937,7 @@ <translation id="6545864417968258051">Bluetooth സ്കാനിംഗ്</translation> <translation id="6545867563032584178">Mac സിസ്റ്റം മുൻഗണനകളിൽ മൈക്രോഫോൺ ഓഫാക്കി</translation> <translation id="6547354035488017500">512 MB ഇടമെങ്കിലും സൃഷ്ടിച്ചില്ലെങ്കിൽ നിങ്ങളുടെ ഉപകരണം പ്രതികരിക്കില്ല. ഇടം സൃഷ്ടിക്കാൻ, ഉപകരണ സ്റ്റോറേജിൽ നിന്ന് ഫയലുകൾ ഇല്ലാതാക്കുക.</translation> +<translation id="6549966385318247177">മുതിർന്നവർക്കുള്ള ഉള്ളടക്കമുള്ളതിനാൽ ഇത് ബ്ലോക്ക് ചെയ്തിരിക്കുന്നു.</translation> <translation id="6550675742724504774">ഓപ്ഷനുകൾ</translation> <translation id="6551508934388063976">കമാൻഡ് ലഭ്യമല്ല. പുതിയ വിൻഡോ തുറക്കാൻ control-N അമർത്തുക.</translation> <translation id="6551612971599078809">സൈറ്റ് USB ഉപയോഗിക്കുന്നുണ്ട്</translation> @@ -4238,6 +4269,7 @@ <translation id="703001695939087067">വിൻഡോ അവലോകന മോഡിൽ പ്രവേശിച്ചു. നാവിഗേറ്റ് ചെയ്യാൻ ടാബ് അമർത്തുക.</translation> <translation id="7031608529463141342"><ph name="WINDOW_TITLE" /> - സീരിയൽ പോർട്ട് കണക്റ്റ് ചെയ്തിരിക്കുന്നു</translation> <translation id="7031962166228839643">TPM തയ്യാറാക്കുന്നു, ദയവായി കാത്തിരിക്കുക (ഇതിന് കുറച്ച് മിനിറ്റെടുത്തേക്കാം)...</translation> +<translation id="7034615910652881882">നിങ്ങളുടെ വെർച്വൽ റിയാലിറ്റി ഉപകരണങ്ങൾ/ഡാറ്റ ആക്സസ് ചെയ്യാൻ ഒരു സൈറ്റ് താൽപ്പര്യപ്പെടുമ്പോൾ ചോദിക്കുക</translation> <translation id="7037509989619051237">പ്രിവ്യൂ ചെയ്യുന്നതിനുള്ള ടെക്സ്റ്റ്</translation> <translation id="7039326228527141150"><ph name="VENDOR_NAME" /> എന്നതിൽ നിന്നും USB ഉപകരണങ്ങൾ ആക്സസ് ചെയ്യുക</translation> <translation id="7039912931802252762">Microsoft Smart Card Logon</translation> @@ -4277,6 +4309,7 @@ <translation id="7081952801286122383">നിങ്ങൾ അദൃശ്യ മോഡിലാണ്</translation> <translation id="708278670402572152">സ്കാനിംഗ് പ്രവർത്തനക്ഷമമാക്കാൻ വിച്ഛേദിക്കുക</translation> <translation id="7085389578340536476">ഓഡിയോ റെക്കോർഡ് ചെയ്യാൻ Chrome-നെ അനുവദിക്കണോ?</translation> +<translation id="7086467953285486445">ഈ ഫയലുകൾ നിങ്ങളുടെ ഓർഗനൈസേഷന്റെ സുരക്ഷാ നയങ്ങൾ ലംഘിക്കുന്നതിനാൽ അവ വലിച്ചിടാനാവില്ല.</translation> <translation id="7088434364990739311">അപ്ഡേറ്റ് പരിശോധന ആരംഭിക്കുന്നതിൽ പരാജയപ്പെട്ടു (പിശക് കോഡ് <ph name="ERROR" />).</translation> <translation id="7088561041432335295">Zip Archiver - Files ആപ്പിൽ ZIP ഫയലുകൾ തുറന്ന്, പായ്ക്ക് ചെയ്യുക.</translation> <translation id="7088674813905715446">അഡ്മിനിസ്ട്രേറ്റർ ഈ ഉപകരണം ഡിപ്രൊവിഷൻ ചെയ്ത നിലയിലാക്കിയിരിക്കുന്നു. എൻറോൾമെന്റിനായി ഇത് പ്രവർത്തനക്ഷമമാക്കാൻ, അഡ്മിനിസ്ട്രേറ്റർ ഈ ഉപകരണത്തെ തീർപ്പുകൽപ്പിക്കാത്ത നിലയിലാക്കേണ്ടതുണ്ട്.</translation> @@ -4390,6 +4423,7 @@ <translation id="7241389281993241388">ക്ലയന്റ് സര്ട്ടിഫിക്കറ്റ് ഇമ്പോർട്ട് ചെയ്യുന്നതിന് <ph name="TOKEN_NAME" /> എന്നതിലേക്ക് ദയവായി പ്രവേശിക്കുക.</translation> <translation id="7241443820034350811">നിങ്ങളുടെ സുരക്ഷാ കീ ലിസ്റ്റ് ചെയ്തിട്ടില്ലെങ്കിൽ, കുറഞ്ഞത് 5 സെക്കൻഡ് അതിൻ്റെ ബട്ടൺ അമർത്തുക.</translation> <translation id="7243632151880336635">മായ്ച്ച്, സൈൻ ഔട്ട് ചെയ്യുക</translation> +<translation id="7243784282103630670">Linux അപ്ഗ്രേഡ് ചെയ്യുന്നതിനിടെ പിശകുണ്ടായി. നിങ്ങളുടെ ബാക്കപ്പ് ഉപയോഗിച്ച് ഞങ്ങൾ കണ്ടെയ്നർ പുനഃസ്ഥാപിക്കും.</translation> <translation id="7245628041916450754"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (മികച്ചത്)</translation> <translation id="7246230585855757313">സുരക്ഷാ കീ വീണ്ടും ബന്ധിപ്പിച്ച് വീണ്ടും ശ്രമിക്കുക</translation> <translation id="7246947237293279874">FTP പ്രോക്സി</translation> @@ -4476,6 +4510,7 @@ <translation id="7360233684753165754"><ph name="PAGE_NUMBER" /> പേജുകൾ <ph name="PRINTER_NAME" /> പ്രിന്ററിലേക്ക്</translation> <translation id="7361297102842600584"><ph name="PLUGIN_NAME" /> റൺ ചെയ്യാൻ വലത് ക്ലിക്ക് ചെയ്യുക</translation> <translation id="7363117941401515667"><ph name="HOURS" /> മണിക്കൂർ മുമ്പ് അപ്ഡേറ്റ് ചെയ്തു</translation> +<translation id="7364591875953874521">ആക്സസ് അഭ്യർത്ഥിച്ചു</translation> <translation id="7364796246159120393">ഫയല് തിരഞ്ഞെടുക്കൂ</translation> <translation id="7366415735885268578">ഒരു സൈറ്റ് ചേർക്കുക</translation> <translation id="7366909168761621528">ഡാറ്റ ബ്രൌസ് ചെയ്യുന്നു</translation> @@ -4501,6 +4536,7 @@ <translation id="740624631517654988">പോപ്പ്-അപ്പ് തടഞ്ഞു</translation> <translation id="7407430846095439694">ഇമ്പോർട്ടുചെയ്ത് യോജിപ്പിക്കുക</translation> <translation id="7407504355934009739">മിക്കവരും ഈ സൈറ്റിൽ നിന്നുള്ള അറിയിപ്പുകൾ ബ്ലോക്ക് ചെയ്യുന്നു</translation> +<translation id="740810853557944681">ഒരു പ്രിന്റ് സെർവർ ചേർക്കുക</translation> <translation id="7409549334477097887">വളരെ വലുത്</translation> <translation id="7409836189476010449">Flash റൺ ചെയ്യുക</translation> <translation id="7410344089573941623">നിങ്ങളുടെ ക്യാമറയും മൈക്രോഫോണും ആക്സസ് ചെയ്യാൻ <ph name="HOST" /> താൽപ്പര്യപ്പെടുന്നുണ്ടോയെന്ന് ചോദിക്കുക</translation> @@ -4521,6 +4557,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{എല്ലാം &പുതിയ വിൻഡോയിൽ തുറക്കുക}=1{&പുതിയ വിന്ഡോയിൽ തുറക്കുക}other{എല്ലാം (#) &പുതിയ വിൻഡോയിൽ തുറക്കുക}}</translation> <translation id="7434509671034404296">ഡെവലപ്പർ</translation> <translation id="7434635829372401939">നിങ്ങളുടെ ക്രമീകരണം സമന്വയിപ്പിക്കുക</translation> +<translation id="7434969625063495310">പ്രിന്റ് സെർവർ ചേർക്കാനായില്ല. സെർവറിന്റെ കോൺഫിഗറേഷൻ പരിശോധിച്ച ശേഷം വീണ്ടും ശ്രമിക്കുക.</translation> <translation id="7436921188514130341">ക്ഷമിക്കണം! പേരുമാറ്റുന്നതിനിടെ ഒരു പിശകുണ്ടായി.</translation> <translation id="7438976808740265764">2020 ഡിസംബറിന് ശേഷം Flash Player പിന്തുണയ്ക്കില്ല.</translation> <translation id="7441736921018636843">ഈ ക്രമീകരണം മാറ്റാന്, നിങ്ങളുടെ സമന്വയ പാസ്ഫ്രെയ്സ് നീക്കം ചെയ്യുന്നതിന് <ph name="BEGIN_LINK" />സമന്വയം പുനഃസജ്ജീകരിക്കുക<ph name="END_LINK" /></translation> @@ -4530,8 +4567,10 @@ <translation id="7443806024147773267">Google അക്കൗണ്ടിലേക്ക് സൈൻ ഇൻ ചെയ്തിരിക്കുമ്പോഴെല്ലാം നിങ്ങളുടെ പാസ്വേഡുകൾ ആക്സസ് ചെയ്യുക</translation> <translation id="7444983668544353857"><ph name="NETWORKDEVICE" /> അപ്രാപ്തമാക്കുക</translation> <translation id="7448430327655618736">സ്വയമേവ ആപ്പുകൾ ഇൻസ്റ്റാൾ ചെയ്യുക</translation> +<translation id="7448625729116931228">നിങ്ങളുടെ വെർച്വൽ റിയാലിറ്റി ഉപകരണങ്ങൾ/ഡാറ്റ ആക്സസ് ചെയ്യാൻ ഒരു സൈറ്റ് താൽപ്പര്യപ്പെടുമ്പോൾ ചോദിക്കുക (ശുപാർശ ചെയ്യുന്നു)</translation> <translation id="7450761244949417357">ഇപ്പോൾ <ph name="ALTERNATIVE_BROWSER_NAME" />-ൽ തുറക്കുന്നു</translation> <translation id="7453008956351770337">ഈ പ്രിന്റർ തിരഞ്ഞെടുക്കുന്നതിലൂടെ, നിങ്ങളുടെ പ്രിന്റർ ആക്സസ് ചെയ്യാൻ ഇനിപ്പറയുന്ന വിപുലീകരണത്തിന് അനുമതി നൽകുന്നു:</translation> +<translation id="7454548535253569100">പോർട്ടൽ: <ph name="SUBFRAME_SITE" /></translation> <translation id="7456142309650173560">ഡെവലപ്പർ</translation> <translation id="7456847797759667638">സ്ഥാനം തുറക്കുക...</translation> <translation id="7458168200501453431">Google തിരയലിൽ ഉപയോഗിക്കുന്ന അതേ സ്പെൽ ചെക്കർ ഉപയോഗിക്കുന്നു. നിങ്ങൾ ബ്രൗസറിൽ ടൈപ്പ് ചെയ്യുന്ന ടെക്സ്റ്റ് Google-ന് അയയ്ക്കുന്നു.</translation> @@ -4577,6 +4616,7 @@ <translation id="7513029293694390567">സംരക്ഷിച്ച ക്രെഡൻഷ്യലുകൾ ഉപയോഗിച്ച് വെബ്സൈറ്റുകളിലേക്ക് സ്വയം സൈൻ ഇൻ ചെയ്യുക. പ്രവർത്തനരഹിതമാണെങ്കിൽ, ഒരു വെബ്സൈറ്റിലേക്ക് സൈൻ ഇൻ ചെയ്യുന്നതിന് മുമ്പ് ഓരോ തവണയും നിങ്ങളോട് സ്ഥിരീകരിക്കാൻ ആവശ്യപ്പെടും.</translation> <translation id="7514239104543605883">നിങ്ങളുടെ ഉപകരണത്തിലേക്ക് പകർത്തുക</translation> <translation id="7514365320538308">ഡൗൺലോഡ് ചെയ്യുക</translation> +<translation id="7520766081042531487">അദൃശ്യ മോഡ് പോർട്ടൽ: <ph name="SUBFRAME_SITE" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7522255036471229694">"Ok Google" എന്ന് പറയുക</translation> <translation id="7525067979554623046">സൃഷ്ടിക്കുക</translation> @@ -4665,6 +4705,7 @@ <translation id="7652808307838961528">വ്യക്തിയുടെ പ്രൊഫൈൽ എഡിറ്റുചെയ്യുക, <ph name="PROFILE_NAME" /></translation> <translation id="765293928828334535">ഈ വെബ്സൈറ്റിൽ നിന്നും ആപ്പുകൾ, വിപുലീകരണങ്ങൾ, ഉപയോക്തൃ സ്ക്രിപ്റ്റുകൾ എന്നിവ ചേർക്കാനാവില്ല</translation> <translation id="7652954539215530680">പിൻ സൃഷ്ടിക്കുക</translation> +<translation id="7653295403398566475">നിങ്ങളുടെ ക്യാമറയുടെ സ്ഥാനം ആക്സസ് ചെയ്യാനോ നിങ്ങളുടെ റൂം മാപ്പ് ചെയ്യാനോ ഒരു സൈറ്റ് താൽപ്പര്യപ്പെടുമ്പോൾ ചോദിക്കുക</translation> <translation id="7654941827281939388">ഈ അക്കൗണ്ട് ഇതിനകം ഈ കമ്പ്യൂട്ടറിൽ ഉപയോഗിച്ചുകൊണ്ടിരിക്കുന്നു.</translation> <translation id="7658239707568436148">റദ്ദാക്കൂ</translation> <translation id="7659584679870740384">ഈ ഉപകരണം ഉപയോഗിക്കാൻ നിങ്ങൾക്ക് അനുമതിയില്ല. സൈൻ ഇൻ അനുമതിയ്ക്കായി അഡ്മിനിസ്ട്രേറ്ററെ ബന്ധപ്പെടുക.</translation> @@ -4817,6 +4858,7 @@ <translation id="783214144752121388">Flash റൺ ചെയ്യുന്നതിൽ നിന്ന് സൈറ്റുകളെ ബ്ലോക്ക് ചെയ്യുക (ശുപാർശ ചെയ്യുന്നത്)</translation> <translation id="7833720883933317473">സംരക്ഷിച്ച ഇഷ്ടാനുസൃത പദങ്ങൾ ഇവിടെ ദൃശ്യമാകും</translation> <translation id="7835178595033117206">ബുക്ക്മാര്ക്ക് നീക്കം ചെയ്തു</translation> +<translation id="7836850009646241041">നിങ്ങളുടെ സുരക്ഷാ കീയിൽ വീണ്ടും സ്പർശിക്കാൻ ശ്രമിക്കുക</translation> <translation id="7837776265184002579">നിങ്ങളുടെ ഹോം പേജ് <ph name="URL" /> എന്നതിലേക്ക് മാറ്റിയിരിക്കുന്നു.</translation> <translation id="7839051173341654115">മീഡിയ കാണുക/ബാക്കപ്പ് ചെയ്യുക</translation> <translation id="7839192898639727867">സര്ട്ടിഫിക്കറ്റ് സബ്ജക്റ്റ് കീ ഐഡി</translation> @@ -5132,7 +5174,9 @@ <translation id="8260864402787962391">മൗസ്</translation> <translation id="8261378640211443080">ഈ വിപുലീകരണം <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> എന്നതിൽ ലിസ്റ്റ് ചെയ്തിട്ടില്ല, ഇത് നിങ്ങളുടെ അറിവില്ലാതെ ചേർത്തിരിക്കാനിടയുണ്ട്.</translation> <translation id="8261506727792406068">ഇല്ലാതാക്കുക</translation> +<translation id="8263336784344783289">ഈ ഗ്രൂപ്പിന് പേര് നൽകുക</translation> <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" /> നിങ്ങളുടെ മൗസ് കഴ്സർ അപ്രാപ്തമാക്കി.</translation> +<translation id="8264024885325823677">ഈ ക്രമീകരണം മാനേജ് ചെയ്യുന്നത് നിങ്ങളുടെ അഡ്മിനാണ്.</translation> <translation id="8264718194193514834">"<ph name="EXTENSION_NAME" />" പൂർണ്ണ സ്ക്രീനിൽ പ്രവർത്തനക്ഷമമാക്കി.</translation> <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />ഈ ഉപകരണത്തെക്കുറിച്ചും അത് ഉപയോഗിക്കുന്ന രീതിയെക്കുറിച്ചുമുള്ള പൊതുവായ വിവരങ്ങളാണിത് (ബാറ്ററി നില, സിസ്റ്റത്തിന്റെയും ആപ്പിന്റെയും ആക്റ്റിവിറ്റി, മറ്റ് പിശകുകൾ എന്നിവ പോലെ). Android മെച്ചപ്പെടുത്താൻ ഈ ഡാറ്റ ഉപയോഗിക്കും. സംഗ്രഹിച്ച ചില വിവരങ്ങൾ, Google ആപ്പുകളെയും Android ഡെവലപ്പർമാർ പോലുള്ള പങ്കാളികളെയും അവരുടെ ആപ്പുകളും ഉൽപ്പന്നങ്ങളും മെച്ചപ്പെടുത്താനും സഹായിക്കും.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />ഈ ഫീച്ചർ ഓഫാക്കുന്നത്, സിസ്റ്റം അപ്ഡേറ്റുകളും സുരക്ഷയും പോലുള്ള അത്യാവശ്യ സേവനങ്ങൾക്ക് ആവശ്യമായ വിവരങ്ങൾ അയയ്ക്കാനുള്ള ഈ ഉപകരണത്തിന്റെ കഴിവിനെ ബാധിക്കില്ല.<ph name="END_PARAGRAPH2" /> @@ -5388,6 +5432,7 @@ <translation id="8650543407998814195">നിങ്ങളുടെ പഴയ പ്രൊഫൈൽ ഇനിയങ്ങോട്ട് ആക്സസ് ചെയ്യാനാകില്ലെങ്കിലും നിങ്ങൾക്കത് ഇല്ലാതാക്കാം.</translation> <translation id="8651585100578802546">ഈ പേജ് വീണ്ടും ലോഡ് ചെയ്യുന്നതിന് നിര്ബന്ധിക്കുക</translation> <translation id="8652400352452647993">പായ്ക്ക് വിപുലീകരണ പിശക്</translation> +<translation id="8653578191563425126">Crostini-യ്ക്കായി നീക്കിവെയ്ക്കേണ്ട ഡിസ്ക് ഇടം (നിങ്ങൾക്ക് ഇത് പിന്നീട് മാറ്റാം).</translation> <translation id="8654151524613148204">ഫയലിന്റെ വലുപ്പം കമ്പ്യൂട്ടറിന് കൈകാര്യം ചെയ്യാനാവുന്നതിലും കൂടുതലാണ്. ക്ഷമിക്കണം.</translation> <translation id="8655295600908251630">ചാനല്</translation> <translation id="8655319619291175901">ക്ഷമിക്കണം, എന്തോ കുഴപ്പം സംഭവിച്ചു.</translation> @@ -5651,6 +5696,7 @@ <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> ദിവസം മുമ്പ് സജീവമായിരുന്നു</translation> <translation id="8986362086234534611">മറന്നു</translation> <translation id="8986494364107987395">Google ലേക്ക് സ്വയമേവ ഉപയോഗ വിവരക്കണക്കുകളും ക്രാഷ് റിപ്പോര്ട്ടുകളും അയയ്ക്കുക</translation> +<translation id="8986651757229422279">ഇത് <ph name="ORIGIN_NAME" /> എന്നതും ഇതിന്റെ ഇൻസ്റ്റാൾ ചെയ്തിരിക്കുന്ന ആപ്പുകളും സംഭരിച്ചിട്ടുള്ള എല്ലാ ഡാറ്റയും കുക്കികളും മായ്ക്കും.</translation> <translation id="8987927404178983737">മാസം</translation> <translation id="8991520179165052608">സൈറ്റിന് നിങ്ങളുടെ മൈക്രോഫോൺ ഉപയോഗിക്കാനാകും</translation> <translation id="899403249577094719">നെറ്റ്സ്കേപ്പ് സര്ട്ടിഫിക്കറ്റ് ബേസ് URL</translation> @@ -5802,6 +5848,7 @@ <translation id="932508678520956232">അച്ചടിക്കല് ആരംഭിക്കാന് കഴിഞ്ഞില്ല.</translation> <translation id="93343527085570547">നിയമപരമായ കാരണങ്ങൾക്കായി ഉള്ളടക്ക മാറ്റങ്ങൾ അഭ്യർത്ഥിക്കാൻ <ph name="BEGIN_LINK1" />നിയമ സഹായ പേജിലേക്ക്<ph name="END_LINK1" /> പോവുക. ചില അക്കൗണ്ട് വിവരവും സിസ്റ്റം വിവരവും Google-ലേക്ക് അയച്ചേക്കാം. ഞങ്ങളുടെ <ph name="BEGIN_LINK2" />സ്വകാര്യതാ നയം<ph name="END_LINK2" />, <ph name="BEGIN_LINK3" />സേവന നിബന്ധനകൾ<ph name="END_LINK3" /> എന്നിവയ്ക്ക് വിധേയമായി, സാങ്കേതിക പ്രശ്നങ്ങൾ പരിഹരിക്കാൻ സഹായിക്കാനും ഞങ്ങളുടെ സേവനം മെച്ചപ്പെടുത്താനും നിങ്ങൾ ഞങ്ങൾക്ക് നൽകുന്ന വിവരം ഉപയോഗിക്കും.</translation> <translation id="93393615658292258">പാസ്വേഡ് മാത്രം</translation> +<translation id="934244546219308557">ഈ ഗ്രൂപ്പിന് പേര് നൽകുക</translation> <translation id="934503638756687833">ആവശ്യമെങ്കിൽ, ഇവിടെ ലിസ്റ്റ് ചെയ്യപ്പെടാത്ത ഇനങ്ങളും നീക്കം ചെയ്യപ്പെടും. <a href="<ph name="URL" />">അനാവശ്യ സോഫ്റ്റ്വെയർ പരിരക്ഷയെ</a> കുറിച്ച് Chrome സ്വകാര്യതാ വൈറ്റ് പേപ്പറിൽ കൂടുതലറിയുക.</translation> <translation id="935490618240037774">നിങ്ങളുടെ എല്ലാ ഉപകരണങ്ങളിലും ഉപയോഗിക്കുന്നതിന് ബുക്ക്മാർക്കുകൾ, ചരിത്രം, പാസ്വേഡുകൾ, മറ്റ് ക്രമീകരണം എന്നിവയെ Google അക്കൗണ്ടിലേക്ക് സമന്വയിപ്പിക്കുന്നതാണ്.</translation> <translation id="935854577147268200">Smart Lock ഫോൺ മാറ്റി. Smart Lock അപ്ഡേറ്റ് ചെയ്യാൻ നിങ്ങളുടെ പാസ്വേഡ് നൽകുക. അടുത്ത തവണ, നിങ്ങളുടെ <ph name="DEVICE_TYPE" /> ഫോൺ അൺലോക്ക് ചെയ്യും. ക്രമീകരണത്തിൽ Smart Lock ഓഫാക്കാം</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb index ed86216..6e95324 100644 --- a/chrome/app/resources/generated_resources_mn.xtb +++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Ачаалах явцыг харах</translation> <translation id="1032605640136438169">Шинэ нөхцөлийг шалгаж үзнэ үү</translation> <translation id="103279545524624934">Андройд апп-г ажиллуулахын тулд дискний багтаамжийг нэмэгдүүлнэ үү.</translation> -<translation id="1033343386521881354">Хэвлэх серверээс 1 хэвлэгч олдлоо.</translation> <translation id="1033780634303702874">Цуваа төхөөрөмжүүд рүүгээ нэвтэр</translation> <translation id="1034942643314881546">Аппын зурагт тайлбарыг үүсгэхийн тулд adb-г идэвхжүүлж байна</translation> <translation id="1036348656032585052">Унтраа</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Бүтэн дэлгэцээс гарах бол |<ph name="ACCELERATOR" />|-г дарна уу</translation> <translation id="1038168778161626396">Зөвхөн шифрлэх</translation> <translation id="1039337018183941703">Буруу эсвэл алдаатай файл</translation> -<translation id="1039850285407663109">Сонгосон файл нь танигдаагүй бөгөөд аюултай байж болзошгүй. Энэ файлыг нээхээс өмнө скан хийнэ үү.</translation> <translation id="1041175011127912238">Энэ хуудас хариу өгөхгүй байна</translation> <translation id="1041263367839475438">Боломжтой байгаа төхөөрөмжүүд</translation> <translation id="1042174272890264476">Таны компьютер мөн <ph name="SHORT_PRODUCT_NAME" />-ын RLZ программын мэдээллийн сантай байдаг. RLZ нь тодорхой кампанит ажлаар удирдуулсан хайлтууд болон <ph name="SHORT_PRODUCT_NAME" />-ын хэрэглээг хэмжих онцгой бус, мөн хувийн бус, тодорхойлох боломжтой цонхнуудыг ажиллуулдаг. Эдгээр хаягууд нь заримдаа <ph name="PRODUCT_NAME" /> дахь Google Хайлтын асуултуудад харагддаг.</translation> @@ -635,7 +633,6 @@ <translation id="1858585891038687145">Програм хангамж боловсруулагчийг тодорхойлох итгэмжлэлийг энэ сертификатад олгох</translation> <translation id="1861262398884155592">Энэ фолдер хоосон байна</translation> <translation id="1863182668524159459">Цуваа порт олдсонгүй</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> нь танигдаагүй байна. Эрсдэлийг багасгахын тулд файлыг скан хийнэ үү.</translation> <translation id="1864111464094315414">Нэвтрэх</translation> <translation id="1864400682872660285">Хүйтэн</translation> <translation id="1864454756846565995">USB-C төхөөрөмж (ард талын порт)</translation> @@ -4019,7 +4016,6 @@ <translation id="6678717876183468697">Хүсэлтийн URL</translation> <translation id="6680442031740878064">Сул зай: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Үнэлэх</translation> -<translation id="6681301928961274620">Хэвлэх серверээс ямар ч хэвлэгч олдсонгүй.</translation> <translation id="6681668084120808868">Гэрэл зураг авах</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />"-г устгах болно.</translation> <translation id="668599234725812620">Google Play-г нээх</translation> @@ -5543,7 +5539,6 @@ <translation id="8794025342371547160">Хязгаарласан IP</translation> <translation id="879413103056696865">Сүлжээний цэг асаалттай үед таны <ph name="PHONE_NAME" /> дараахыг хийнэ:</translation> <translation id="8795916974678578410">Шинэ цонх</translation> -<translation id="8797086401386164142">Хэвлэх серверээс <ph name="NUM_PRINTERS" /> хэвлэгч олдлоо.</translation> <translation id="8797459392481275117">Энэ сайтыг хэзээ ч бүү орчуул</translation> <translation id="8798099450830957504">Гэрээ үл биелүүлэх</translation> <translation id="8798441408945964110">Үйлчилгээ үзүүлэгчийн нэр</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb index 957c3f7b..32494b5 100644 --- a/chrome/app/resources/generated_resources_mr.xtb +++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -33,7 +33,6 @@ <translation id="1036982837258183574">संपूर्ण स्क्रीनमधून बाहेर पडण्यासाठी |<ph name="ACCELERATOR" />| दाबा</translation> <translation id="1038168778161626396">केवळ एनसिफर</translation> <translation id="1039337018183941703">चुकीची किंवा दूषित फाइल</translation> -<translation id="1039850285407663109">निवडलेली फाइल अज्ञात आहे आणि ती धोकादायक असू शकते. ही फाइल उघडण्याआधी स्कॅन करणे विचारात घ्या.</translation> <translation id="1041175011127912238">हे पेज प्रतिसाद देत नाही</translation> <translation id="1041263367839475438">उपलब्ध असलेली डिव्हाइस</translation> <translation id="1042174272890264476">तुमचा कॉंप्युटर देखील <ph name="SHORT_PRODUCT_NAME" />च्या RLZ वाचनालयासह बिल्ट-इन आला आहे. एका विशिष्ट जाहिरात मोहीमेद्वारे चालविलेला शोध आणि <ph name="SHORT_PRODUCT_NAME" /> वापर मोजण्यासाठी RLZ एक अद्वितीय-नसलेला, वैयक्तिकरित्या-ओळखता न येणारा टॅग नियुक्त करते. <ph name="PRODUCT_NAME" /> मधील Google शोध क्वेरींमध्ये ही लेबल काहीवेळा दिसतात.</translation> @@ -152,6 +151,7 @@ <translation id="1197979282329025000"><ph name="PRINTER_NAME" /> प्रिंटरसाठी प्रिंटर क्षमता पुन्हा मिळवताना करताना एरर आली. हा प्रिंटर <ph name="CLOUD_PRINT_NAME" /> सह नोंदणीकृत असू शकत नाही.</translation> <translation id="119944043368869598">सर्व साफ करा</translation> <translation id="1201402288615127009">पुढील</translation> +<translation id="1202556750060561551"><ph name="SITE_GROUP_NAME" /> ने स्टोअर केलेला सर्व डेटा आणि कुकी, त्याअंतर्गत असलेल्या कोणत्याही साइट व त्यामध्ये इंस्टॉल केलेली ॲप्स साफ केली जातील.</translation> <translation id="1202596434010270079">कियोस्क ॲप अपडेट केला गेला आहे. कृपया USB स्टिक काढून टाका.</translation> <translation id="120368089816228251">संगीत टीप</translation> <translation id="1205489148908752564">श्वेतसूची केलेले वापरकर्ते वाचा आणि बदला</translation> @@ -279,8 +279,10 @@ <translation id="138784436342154190">डीफॉल्ट स्टार्टअप पेज रिस्टोअर करायचे?</translation> <translation id="1390548061267426325">नियमित टॅब म्हणून उघडा</translation> <translation id="1393283411312835250">सूर्य आणि ढग</translation> +<translation id="1393787139683794508">हे <ph name="ORIGIN_NAME" /> ने स्टोअर केलेला सर्व डेटा आणि कुकी साफ करेल.</translation> <translation id="1395730723686586365">अद्यतनकर्ता प्रारंभ</translation> <translation id="1396139853388185343">प्रिंटर सेट अप करण्यात एरर आली</translation> +<translation id="1396259464226642517">हा परिणाम अनपेक्षित होता का? <ph name="BEGIN_LINK" />फीडबॅक पाठवा<ph name="END_LINK" /></translation> <translation id="1396963298126346194">तुम्ही एंटर केलेले वापरकर्तानाव आणि पासवर्ड जुळत नाही</translation> <translation id="1397500194120344683">कोणतीही पात्र डिव्हाइस नाहीत. <ph name="LINK_BEGIN" />अधिक जाणून घ्या.<ph name="LINK_END" /></translation> <translation id="1398853756734560583">वाढवा</translation> @@ -553,6 +555,7 @@ <translation id="1758018619400202187">EAP-TLS</translation> <translation id="17584710573359123">Chrome वेब स्टोअरमध्ये पहा</translation> <translation id="176193854664720708">फिंगरप्रिंट सेन्सर पॉवर बटणात आहे. कोणत्याही बोटाने हळूवारपणे स्पर्श करा.</translation> +<translation id="176273057789108760">सुरक्षितता मंजुरीसाठी तुमची संस्था ही ड्रॅग केलेल्या फाइल स्कॅन करत आहे.</translation> <translation id="1763046204212875858">ॲप्लिकेशन शॉर्टकट तयार करा</translation> <translation id="1763108912552529023">एक्सप्लोर करत रहा</translation> <translation id="1763808908432309942">नवीन टॅबमध्ये उघडते</translation> @@ -591,6 +594,7 @@ <translation id="1805472176602625930">सिक्युरिटी कीवरील बटण दाबा</translation> <translation id="1805738995123446102">बॅकग्राउंड टॅब तुमचा मायक्रोफोन वापरत आहे</translation> <translation id="1805822111539868586">दृश्ये तपासा</translation> +<translation id="1805888043020974594">प्रिंट सर्व्हर</translation> <translation id="1805967612549112634">पिन निश्चित करा</translation> <translation id="1809734401532861917">माझे बुकमार्क, इतिहास, पासवर्ड आणि अन्य सेटिंग्ज <ph name="USER_EMAIL_ADDRESS" /> मध्ये जोडा</translation> <translation id="1813278315230285598">सेवा</translation> @@ -632,7 +636,6 @@ <translation id="1858585891038687145">सॉफ्टवेअर निर्मात्यांना ओळखण्याकरिता या सर्टिफिकेटवर विश्वास ठेवा</translation> <translation id="1861262398884155592">हे फोल्डर रिक्त आहे</translation> <translation id="1863182668524159459">सिरीअल पोर्ट सापडली नाहीत</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> अज्ञात आहे. जोखीम कमी करण्यासाठी फाइल स्कॅन करा.</translation> <translation id="1864111464094315414">लॉगिन</translation> <translation id="1864400682872660285">थंड</translation> <translation id="1864454756846565995">USB-C डिव्हाइस (मागील बाजूचे पोर्ट)</translation> @@ -739,6 +742,7 @@ <translation id="202352106777823113">डाउनलोडला खूप वेळ लागत होता आणि नेटवर्कद्वारे थांबविले.</translation> <translation id="2025632980034333559"><ph name="APP_NAME" /> क्रॅश झाला. एक्स्टेंशन रीलोड करण्यासाठी या फुग्यावर क्लिक करा.</translation> <translation id="2025891858974379949">असुरक्षित आशय</translation> +<translation id="202918510990975568">सुरक्षितता कॉन्फिगर करण्यासाठी आणि साइन इन करण्यासाठी तुमचा पासवर्ड एंटर करा</translation> <translation id="2034346955588403444">इतर WiFi नेटवर्क जोडा</translation> <translation id="203574396658008164">लॉक स्क्रीनवरून टीप घेणे सुरू करा</translation> <translation id="2037445849770872822">या Google खात्यासाठी पर्यवेक्षण सेट केले आहे. आणखी पालक नियंत्रणे सेट करण्यासाठी, पुढे सुरू ठेवा निवडा. @@ -890,6 +894,7 @@ <translation id="2224471211857467033">ॲक्सेसिबिलिटी इव्हेंट</translation> <translation id="2224551243087462610">फोल्डर नाव संपादित करा</translation> <translation id="2226449515541314767">MIDI डिव्हाइसचे पूर्ण नियंत्रण असण्यापासून ही साइट अवरोधित केली गेली आहे.</translation> +<translation id="222704500187107962">तुम्ही सध्याच्या गुप्त सेशनमधून बाहेर पडल्यानंतर हे एक्सेप्शन आपोआप काढून टाकले जाईल</translation> <translation id="2227179592712503583">सूचना काढून टाका</translation> <translation id="2229161054156947610">1 तासापेक्षा जास्त बाकी</translation> <translation id="222931766245975952">फाईल कापली गेली</translation> @@ -943,6 +948,7 @@ <translation id="2300383962156589922"><ph name="APP_NAME" /> ला कस्टमाइझ आणि नियंत्रित करा</translation> <translation id="2301382460326681002">एक्स्टेंशन मूळ डिरेक्टरी अवैध आहे.</translation> <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" नी अतिरिक्त परवानग्यांची विनंती केली आहे.</translation> +<translation id="23055578400314116">एखादे वापरकर्तानाव निवडा</translation> <translation id="2307462900900812319">नेटवर्क कॉन्फिगर करा</translation> <translation id="230927227160767054">हे पृष्ठ एक सेवा हँडलर इंस्टॉल करू इच्छिते.</translation> <translation id="2309620859903500144">या साइटला तुमचे गती किंवा प्रकाश सेन्सर ॲक्सेस करण्यापासून ब्लॉक केले गेले आहे.</translation> @@ -982,6 +988,7 @@ <translation id="2353297238722298836">कॅमेरा आणि मायक्रोफोनला अनुमती आहे</translation> <translation id="2356070529366658676">विचारा</translation> <translation id="2357330829548294574"><ph name="USER_NAME" /> काढा</translation> +<translation id="235798134753548762">तुमची ॲप्स, सेटिंग्ज आणि वाय-फाय प्राधान्ये सिंक केली जातील. बदल करण्यासाठी, सेट केल्यानंतर कधीही सेटिंग्ज वर जा.</translation> <translation id="2359345697448000899">टूल मेनूमध्ये विस्तारांवर क्लिक करुन तुमचे विस्तार व्यवस्थापित करा.</translation> <translation id="2359808026110333948">सुरू ठेवा</translation> <translation id="236117173274098341">ऑप्टिमाइझ करा</translation> @@ -1034,6 +1041,7 @@ <translation id="2436720498717686157">तुमच्या संस्थेला या डिव्हाइसवर लगेच अपडेट करण्याची आवश्यकता आहे</translation> <translation id="2439545803278355377">तुमचा नवीन पिन एंटर करा. पिन किमान चार वर्णांचा असणे आवश्यक आहे आणि त्यामध्ये अक्षरे, अंक आणि इतर वर्ण असू शकतात.</translation> <translation id="2440604414813129000">स्त्रो&त पाहा</translation> +<translation id="244231003699905658">चुकीचा ॲड्रेस. कृपया ॲड्रेस तपासा आणि पुन्हा प्रयत्न करा.</translation> <translation id="2442916515643169563">मजकुराची शॅडो</translation> <translation id="2445081178310039857">एक्स्टेंशन मूळ डिरेक्टरी आवश्यक आहे.</translation> <translation id="2445484935443597917">नवीन प्रोफाइल तयार करा</translation> @@ -1088,6 +1096,7 @@ <translation id="2501278716633472235">परत जा</translation> <translation id="2501797496290880632">शॉर्टकट टाइप करा</translation> <translation id="2502441965851148920">स्वयंचलित अपडेट सक्षम केली आहेत. तुमच्या ॲडमिनिस्ट्रेटरने मॅन्युअल अपडेट अक्षम केली आहेत.</translation> +<translation id="2502719318159902502">पूर्ण अॅक्सेस</translation> <translation id="2505127913256479918">हे पर्यवेक्षित खाते लवकरच काढले जाईल</translation> <translation id="2505324914378689427">{SCREEN_INDEX,plural, =1{स्क्रीन #}other{स्क्रीन #}}</translation> <translation id="2505402373176859469"><ph name="TOTAL_SIZE" /> पैकी <ph name="RECEIVED_AMOUNT" /></translation> @@ -1360,6 +1369,7 @@ <translation id="2865919525181940183">सध्या स्क्रीनवर असलेल्या प्रोग्रामचे स्क्रीनशॉट</translation> <translation id="286674810810214575">पॉवर स्रोत तपासत आहे…</translation> <translation id="2867768963760577682">पिन केलेला टॅब म्हणून उघडा</translation> +<translation id="2868184003987917410">साइटना तुमचे आभासी वास्तविकता डिव्हाइस/डेटा ॲक्सेस करण्याची अनुमती देऊ नका</translation> <translation id="2868746137289129307">हे एक्स्टेंशन कालबाह्य आहे आणि संस्था धोरणानुसार बंद केले आहे. नवीनतम आवृत्ती उपलब्ध झाल्यावर ते कदाचित आपोआप सुरू होईल.</translation> <translation id="2870560284913253234">साइट</translation> <translation id="2870909136778269686">अपडेट करत आहे...</translation> @@ -1405,6 +1415,7 @@ <translation id="2916745397441987255">शोध विस्तार</translation> <translation id="2921081876747860777">कृपया तुमचा स्थानिक डेटा संरक्षित करण्यासाठी एक पासवर्ड तयार करा.</translation> <translation id="2923234477033317484">हे खाते काढून टाका</translation> +<translation id="2925054096976782003">सुरक्षितता मंजुरीसाठी तुमची संस्था ही पेस्ट केलेला डेटा स्कॅन करत आहे.</translation> <translation id="2926085873880284723">डीफॉल्ट शॉर्टकट रिस्टोअर करा</translation> <translation id="2927017729816812676">कॅश स्टोरेज</translation> <translation id="2931157624143513983">प्रिंट करण्यायोग्य भागात बसवा</translation> @@ -1428,6 +1439,7 @@ <translation id="2956070239128776395">गटामध्ये विभाग नेस्ट केले: <ph name="ERROR_LINE" /></translation> <translation id="2957117904572187936">कोणत्याही साइटला तुमच्या डिव्हाइसवरील फाइल किंवा फोल्डर संपादित करण्याची अनुमती देऊ नका</translation> <translation id="2958721676848865875">पॅक एक्स्टेंशन चेतावणी</translation> +<translation id="2959127025785722291">काहीतरी चूक झाली. स्कॅनिंग पूर्ण करता आले नाही. कृपया पुन्हा प्रयत्न करा.</translation> <translation id="2959842337402130152">स्टोरेज जागा कमी असल्यामुळे रिस्टोअर करू शकत नाही. डिव्हाइसमधील <ph name="SPACE_REQUIRED" /> जागा मोकळी करा आणि पुन्हा प्रयत्न करा.</translation> <translation id="296026337010986570">पूर्ण झाले! धोकादायक सॉफ्टवेअर काढून टाकले. एक्स्टेंशन पुन्हा सुरू करण्यासाठी <a href="chrome://extensions">Extensions</a> ला भेट द्या.</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" /> (एक्स्टेंशन प्रदान केले)</translation> @@ -1685,6 +1697,7 @@ <translation id="3348038390189153836">काढण्यायोग्य डिव्हाइस आढळले</translation> <translation id="3349933790966648062">मेमरी फुटप्रिंट</translation> <translation id="3350117557200012647">पेअरींग मोड मध्ये जा</translation> +<translation id="3350244554415289209">एखाद्या साइटला तुमच्या कॅमेऱ्याची स्थिती किंवा तुमच्या रूमच्या नकाशाचा ॲक्सेस हवा असल्यास, विनंती करा (शिफारस केलेले)</translation> <translation id="3355936511340229503">कनेक्शन एरर</translation> <translation id="3356580349448036450">पूर्ण</translation> <translation id="3359256513598016054">सर्टिफिकेट धोरण प्रतिबंध</translation> @@ -1748,6 +1761,7 @@ <translation id="3448492834076427715">खाते अपडेट करा</translation> <translation id="3449839693241009168"><ph name="EXTENSION_NAME" /> कडे कमांड पाठविण्यासाठी <ph name="SEARCH_KEY" /> दाबा</translation> <translation id="3450157232394774192">निष्क्रिय स्थिती कब्जा टक्केवारी</translation> +<translation id="3451332697983754369">माझे <ph name="DEVICE_TYPE" /> सिंक करा</translation> <translation id="3453612417627951340">ऑथेंटिकेशन आवश्यक</translation> <translation id="3454157711543303649">सक्रियन पूर्ण झाले</translation> <translation id="3454213325559396544">या <ph name="DEVICE_TYPE" /> साठी हे अंतिम ऑटोमेटिक सॉफ्टवेअर आणि सिक्युरिटी अपडेट आहे. वैशिष्ट्यांसंबंधित अपडेट मिळवण्यासाठी, सर्वात नवीन मॉडेलवर अपग्रेड करा.</translation> @@ -1770,6 +1784,7 @@ <translation id="347785443197175480">तुमचा कॅमेरा आणि मायक्रोफोन ॲक्सेस करण्यासाठी <ph name="HOST" /> ला परवानगी देणे सुरू ठेवा</translation> <translation id="3478685642445675458">कृपया एखाद्या व्यक्तीस काढण्यापूर्वी तुमचे प्रोफाईल अनलॉक करा.</translation> <translation id="3479552764303398839">सध्या नाही</translation> +<translation id="3479685872808224578">प्रिंट सर्व्हर डिटेक्ट करता आला नाही. कृपया ॲड्रेस तपासा आणि पुन्हा प्रयत्न करा.</translation> <translation id="3481268647794498892"><ph name="ALTERNATIVE_BROWSER_NAME" /> मध्ये <ph name="COUNTDOWN_SECONDS" /> सेकंदांत उघडत आहे</translation> <translation id="3484273680291419129">धोकादायक सॉफ्टवेअर काढत आहे...</translation> <translation id="3484869148456018791">नवीन सर्टिफिकेट मिळवा</translation> @@ -1885,6 +1900,7 @@ <translation id="3630132874740063857">तुमचा फोन</translation> <translation id="3630995161997703415">कधीही वापरण्यासाठी ही साइट तुमच्या शेल्फवर जोडा</translation> <translation id="3634507049637220048"><ph name="NETWORK_COUNT" /> पैकी <ph name="NETWORK_INDEX" /> नेटवर्क, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, तुमच्या अॅडमिनिस्ट्रेटरने व्यवस्थापित केलेले, तपशील</translation> +<translation id="3635241501480133979">हा डेटा तुमच्या संस्थेच्या सुरक्षितता धोरणांचे उल्लंघन करतो आणि तो ड्रॉप केला जाऊ शकत नाही.</translation> <translation id="3635353578505343390">Google ला फीडबॅक पाठवा</translation> <translation id="3636096452488277381">कसे आहात, <ph name="USER_GIVEN_NAME" />.</translation> <translation id="3636766455281737684"><ph name="PERCENTAGE" />% - <ph name="TIME" /> शिल्लक</translation> @@ -1919,6 +1935,7 @@ <translation id="3677657024345889897">सर्वात शांत</translation> <translation id="3677911431265050325">मोबाइल साइटची विनंती करा</translation> <translation id="3678156199662914018">एक्स्टेंशनः <ph name="EXTENSION_NAME" /></translation> +<translation id="3678613690490567106">संपूर्ण डिव्हाइसवर एखाद्या पर्सनलाइझ केलेल्या अनुभवासाठी सिंक करा</translation> <translation id="3681311097828166361">तुमच्या फीडबॅकाबद्दल धन्यवाद. तुम्ही आता ऑफलाइन आहात आणि तुमचा अहवाल नंतर पाठविला जाईल.</translation> <translation id="3682824389861648626">हालचालाची मर्यादा</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> स्क्रीन शेअर विनंती</translation> @@ -2427,6 +2444,7 @@ <translation id="4400632832271803360">शीर्ष-पंक्ती की चे वर्तन स्विच करण्यासाठी लाँचर की धरून ठेवा.</translation> <translation id="4400963414856942668">तुम्ही टॅब बुकमार्क करण्यासाठी ताऱ्यावर क्लिक करू शकता</translation> <translation id="4403775189117163360">वेगळे फोल्डर निवडा</translation> +<translation id="4404136731284211429">पुन्हा स्कॅन करा</translation> <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation> <translation id="4408599188496843485">मदत</translation> <translation id="4409697491990005945">समास</translation> @@ -2445,6 +2463,7 @@ <translation id="4421932782753506458">Fluffy</translation> <translation id="4423376891418188461">सेटिंग्ज पुनर्संचयित करा</translation> <translation id="442397852638519243"><ph name="USER_NAME" />, तुम्ही तुमचा पासवर्ड बदलणे तुमच्या ॲडमिनिस्ट्रेटरलााठी आवश्यक आहे.</translation> +<translation id="4429030830601238961">हा डेटा तुमच्या संस्थेच्या सुरक्षितता धोरणांचे उल्लंघन करतो आणि तो पेस्ट केला जाऊ शकत नाही.</translation> <translation id="4430019312045809116">व्हॉल्यूम</translation> <translation id="4430369329743628066">बुकमार्क जोडला</translation> <translation id="4434045419905280838">पॉप-अप आणि रीडिरेक्ट</translation> @@ -2491,9 +2510,11 @@ <translation id="4501530680793980440">काढून टाकण्याची पुष्टी करा</translation> <translation id="4502423230170890588">या डिव्हाइसवरून काढून टाका</translation> <translation id="4504940961672722399">या आयकनवर क्लिक करुन किंवा <ph name="EXTENSION_SHORTCUT" /> दाबून हे एक्स्टेंशन वापरा.</translation> +<translation id="4507164039066603071">साइटना तुमच्या कॅमेऱ्याची स्थिती ॲक्सेस करण्याची किंवा तुमच्या रूमचा नकाशा तयार करण्याची अनुमती देऊ नका</translation> <translation id="4508051413094283164">सर्व गुप्त विंडोमध्ये उघडा</translation> <translation id="4508265954913339219">सक्रियन अयशस्वी</translation> <translation id="4508765956121923607">स्त्रो&त पाहा</translation> +<translation id="4510614391273086606">Linux फाइल आणि ॲप्स या गोष्टी त्यांच्या बॅकअप घेण्याच्या स्थितीमध्ये रिस्टोअर केल्या जात आहेत.</translation> <translation id="451407183922382411"><ph name="COMPANY_NAME" />ने समर्थित करा</translation> <translation id="4514610446763173167">प्ले करण्यासाठी किंवा थांबवण्यासाठी व्हिडिओ टॉगल करा</translation> <translation id="451515744433878153">काढून टाका</translation> @@ -2691,6 +2712,7 @@ <translation id="480990236307250886">होम पेज उघडा</translation> <translation id="4813136279048157860">माझ्या इमेज</translation> <translation id="4813512666221746211">नेटवर्क एरर</translation> +<translation id="4814378367953456825">या फिंगरप्रिंटसाठी एखादे नाव एंटर करा</translation> <translation id="4820236583224459650">ॲक्टिव्ह तिकीट म्हणून सेट करा</translation> <translation id="4821935166599369261">&प्रोफाइलिंग सक्षम</translation> <translation id="4823484602432206655">वापरकर्ता आणि डिव्हाइस सेटिंग्ज वाचा आणि बदला</translation> @@ -2737,6 +2759,7 @@ <translation id="4876895919560854374">स्क्रीन लॉक आणि अनलॉक करा</translation> <translation id="4877276003880815204">तपासणी घटक</translation> <translation id="4878653975845355462">तुमच्या अॅडमिनिस्ट्रेटरने कस्टम बॅकग्राउंड बंद केले आहेत</translation> +<translation id="4878718769565915065">या सिक्युरिटी कीवर फिंगरप्रिंट जोडता आले नाही</translation> <translation id="4879491255372875719">आपोआप (डीफॉल्ट)</translation> <translation id="4880328057631981605">ॲक्सेसबिंदूचे नाव</translation> <translation id="4880827082731008257">इतिहास शोध</translation> @@ -2867,6 +2890,7 @@ <translation id="5065775832226780415">Smart Lock</translation> <translation id="5067399438976153555">नेहमी चालू</translation> <translation id="5067867186035333991"><ph name="HOST" /> तुमचा मायक्रोफोन ॲक्सेस करू इच्छित असल्यास विचारा</translation> +<translation id="5068377946749700758">सुरक्षितता मंजुरीसाठी तुमची संस्था ड्रॅग केलेला डेटा स्कॅन करत आहे.</translation> <translation id="5068918910148307423">अलीकडील बंद केलेल्या साइटना डेटा पाठविणे आणि प्राप्त करणे समाप्त करण्यासाठी अनुमती देऊ नका</translation> <translation id="5068919226082848014">पिझ्झा</translation> <translation id="5072052264945641674">कर्सर आकार समायोजित करा</translation> @@ -3059,6 +3083,7 @@ <translation id="5341793073192892252">पुढील कुकी ब्लॉक केल्या होत्या (तृतीय पक्षाच्या कुकी कोणत्याही एक्सेप्शनाशिवाय ब्लॉक केलेल्या आहेत)</translation> <translation id="5341980496415249280">कृपया वाट पहा, पॅकिंग करत आहे...</translation> <translation id="5342091991439452114">पिन किमान <ph name="MINIMUM" /> अंकांचा असणे आवश्यक आहे</translation> +<translation id="5344036115151554031">Linux रिस्टोअर करत आहे</translation> <translation id="5352033265844765294">वेळ स्टॅम्पिंग</translation> <translation id="5353252989841766347">Chrome मधून पासवर्ड एक्सपोर्ट करा</translation> <translation id="5355099869024327351">असिस्टंटला तुम्हाला सूचना दाखवू द्या</translation> @@ -3112,6 +3137,7 @@ <translation id="5427459444770871191">&घड्याळाच्या दिशेने फिरवा</translation> <translation id="542872847390508405">तुम्ही अतिथी म्हणून ब्राउझ करत आहात</translation> <translation id="5428850089342283580"><ph name="ACCNAME_APP" /> (अपडेट उपलब्ध आहे)</translation> +<translation id="542948651837270806">विश्वासू प्लॅटफॉर्म मॉड्युल फर्मवेयरचा एखादा अपडेट इंस्टॉल करणे आवश्यक आहे. <ph name="TPM_FIRMWARE_UPDATE_LINK" /> पाहा</translation> <translation id="5430931332414098647">झटपट टेदरिंग</translation> <translation id="5431318178759467895">रंग</translation> <translation id="5431825016875453137">OpenVPN / L2TP</translation> @@ -3292,6 +3318,7 @@ <translation id="5659593005791499971">ईमेल</translation> <translation id="5659833766619490117">या पेजचे भाषांतर करता आले नाही</translation> <translation id="5660204307954428567"><ph name="DEVICE_NAME" /> सह जोडा</translation> +<translation id="5662513737565158057">Linux ॲप्स कशी काम करतील ते बदला.</translation> <translation id="5667546120811588575">Google Play सेट अप करत आहे...</translation> <translation id="5669267381087807207">सक्रिय करीत आहे </translation> <translation id="5669691691057771421">नवीन पिन एंटर करा</translation> @@ -3700,6 +3727,7 @@ <translation id="6238923052227198598">लॉक स्क्रीनवर नवीनतम टीप ठेवा</translation> <translation id="6239558157302047471">रीलोड आणि फ्रेम करा</translation> <translation id="6241530762627360640">तुमच्या सिस्टमशी जोडलेल्या ब्लूटूथ डिव्हाइसविषयीची माहिती ॲक्सेस करा आणि जवळपासचे ब्लूटूथ डिव्हाइस शोधा.</translation> +<translation id="6241844896329831164">ॲक्सेसची आवश्यकता नाही</translation> <translation id="6242589501614145408">तुमची सिक्युरिटी की रीसेट करा</translation> <translation id="6242852299490624841">या टॅबवर फोकस करा</translation> <translation id="6243280677745499710">सध्या सेट केला आहे</translation> @@ -3900,6 +3928,8 @@ <translation id="6531282281159901044">धोकादायक फाईल ठेवा</translation> <translation id="6532101170117367231">Google ड्राइव्ह मध्ये सेव्ह करा</translation> <translation id="6532106788206463496">बदल सेव्ह करा</translation> +<translation id="6532206849875187177">सुरक्षितता आणि साइन इन करा</translation> +<translation id="6532527800157340614">साइन इन करता आले नाही कारण तुमचे ॲक्सेस टोकन पुन्हा मिळवता आले नाही. कृपया तुमचे नेटवर्क कनेक्शन तपासा आणि पुन्हा प्रयत्न करा.</translation> <translation id="6532663472409656417">एंटरप्राइझची नोंदणी केली</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />टीप:<ph name="END_BOLD" /> डेटाचे संकलन कामप्रदर्शन कमी करू शकत असल्यामुळे, तुम्ही काय करत आहात हे केवळ तुम्हाला माहिती असल्यास किंवा असे करण्यास तुम्हाला सांगितले गेले असल्यास सुरू करा.</translation> <translation id="6541638731489116978">या साइटला तुमचे मोशन सेन्सर अॅक्सेस करण्यापासून ब्लॉक केले आहे.</translation> @@ -3907,6 +3937,7 @@ <translation id="6545864417968258051">ब्लूटूथ स्कॅन करत आहे</translation> <translation id="6545867563032584178">Mac सिस्टम प्राधान्ये मधील मायक्रोफोन बंद केला आहे</translation> <translation id="6547354035488017500">किमान ५१२ MB स्थान मोकळे करा किंवा तुमचे डिव्हाइस अप्रतिसादात्मक बनेल. स्थान मोकळे करण्यासाठी, डिव्हाइस स्टोरेजमधून फायली हटवा.</translation> +<translation id="6549966385318247177">प्रौढांशी संबंधित आशय असल्यामुळे हे ब्लॉक केले आहे.</translation> <translation id="6550675742724504774">पर्याय</translation> <translation id="6551508934388063976">कमांड अनुपलब्ध. एक नवीन विंडो उघडण्यासाठी control-N दाबा.</translation> <translation id="6551612971599078809">साइट USB वापरत आहे</translation> @@ -4238,6 +4269,7 @@ <translation id="703001695939087067">विंडो अवलोकन मोडमध्ये एंटर केले आहे. नेव्हिगेट करण्यासाठी टॅब दाबा.</translation> <translation id="7031608529463141342"><ph name="WINDOW_TITLE" /> - सिरीअल पोर्ट कनेक्ट केला आहे</translation> <translation id="7031962166228839643">TPM तयार केले जात आहे, कृपया प्रतीक्षा करा (याला काही मिनिटे लागू शकतात)...</translation> +<translation id="7034615910652881882">एखाद्या साइटला तुमच्या आभासी वास्तविकतेचा/ डेटाचा ॲक्सेस हवा असल्यास, विनंती करा</translation> <translation id="7037509989619051237">पूर्वावलोकनासाठी मजकूर</translation> <translation id="7039326228527141150"><ph name="VENDOR_NAME" /> कडील USB डिव्हाइस ॲक्सेस करा</translation> <translation id="7039912931802252762">Microsoft Smart Card Logon</translation> @@ -4277,6 +4309,7 @@ <translation id="7081952801286122383">तुम्ही गुप्त मोड वर आहात</translation> <translation id="708278670402572152">स्कॅनिंग सुरू करण्यासाठी डिस्कनेक्ट करा</translation> <translation id="7085389578340536476">Chrome ला ऑडिओ रेकॉर्ड करण्याची अनुमती द्यायची का?</translation> +<translation id="7086467953285486445">या फाइल तुमच्या संस्थेच्या सुरक्षितता धोरणांचे उल्लंघन करतात आणि त्या ड्रॉप केल्या जाऊ शकत नाहीत.</translation> <translation id="7088434364990739311">अपडेट तपासणी सुरू होण्यात अयशस्वी (एरर कोड <ph name="ERROR" />).</translation> <translation id="7088561041432335295">Zip Archiver - Files ॲपमध्ये झिप फायली उघडा आणि पॅक करा.</translation> <translation id="7088674813905715446">हे डिव्हाइस ॲडमिनिस्ट्रेटरद्वारे तरतूद नसलेल्या स्थितीमध्ये ठेवले गेले आहे. ते नोंदणीकरिता सक्षम करण्यासाठी, कृपया तुमच्या ॲडमिनिस्ट्रेटरने डिव्हाइस एका प्रलंबित स्थितीमध्ये ठेवावे.</translation> @@ -4390,6 +4423,7 @@ <translation id="7241389281993241388">कृपया क्लायंट प्रमाणपत्र इंपोर्ट करण्यासाठी <ph name="TOKEN_NAME" /> मध्ये साइन इन करा.</translation> <translation id="7241443820034350811">तुमची सिक्युरिटी की सूचीबद्ध नसल्यास, तिचे बटण किमान पाच सेकंद दाबून ठेवा.</translation> <translation id="7243632151880336635">साफ करा आणि साइन आउट करा</translation> +<translation id="7243784282103630670">Linux अपग्रेड करताना एरर आली. आम्ही तुमचा बॅकअप वापरून कंटनेर रिस्टोअर करू.</translation> <translation id="7245628041916450754"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (उत्कृष्ट)</translation> <translation id="7246230585855757313">तुमची सिक्युरिटी की पुन्हा घाला आणि पुन्हा प्रयत्न करा</translation> <translation id="7246947237293279874">FTP प्रॉक्सी</translation> @@ -4476,6 +4510,7 @@ <translation id="7360233684753165754"><ph name="PAGE_NUMBER" /> पेज <ph name="PRINTER_NAME" /> कडे</translation> <translation id="7361297102842600584"><ph name="PLUGIN_NAME" /> चालवण्यासाठी राइट-क्लिक करा</translation> <translation id="7363117941401515667"><ph name="HOURS" /> तासांपूर्वी अपडेट केले</translation> +<translation id="7364591875953874521">ॲक्सेसची विनंती केली आहे</translation> <translation id="7364796246159120393">फाइल निवडा</translation> <translation id="7366415735885268578">एक साइट जोडा</translation> <translation id="7366909168761621528">ब्राउझिंग डेटा</translation> @@ -4501,6 +4536,7 @@ <translation id="740624631517654988">पॉप-अप अवरोधित</translation> <translation id="7407430846095439694">इंपोर्ट करा आणि प्रतिबद्ध करा</translation> <translation id="7407504355934009739">बहुतेक लोक या साइटवरून येणार्या सूचना ब्लॉक करतात</translation> +<translation id="740810853557944681">एखादा प्रिंट सर्व्हर जोडा</translation> <translation id="7409549334477097887">आणखी मोठी</translation> <translation id="7409836189476010449">फ्लॅश रन करा</translation> <translation id="7410344089573941623"><ph name="HOST" /> तुमच्या कॅमेरा आणि मायक्रोफोन ॲक्सेस करू इच्छित असल्यास विचारा</translation> @@ -4521,6 +4557,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{सर्व नवीन विंडोमध्ये उघडा}=1{ नवीन विंडोमध्ये उघडा}other{सर्व (#) नवीन विंडोमध्ये उघडा}}</translation> <translation id="7434509671034404296">डेव्हलपर</translation> <translation id="7434635829372401939">तुमच्या सेटिंग्ज सिंक करा</translation> +<translation id="7434969625063495310">प्रिंट सर्व्हर जोडता आला नाही. कृपया सर्व्हरचे कॉन्फिगरेशन तपासा आणि पुन्हा प्रयत्न करा.</translation> <translation id="7436921188514130341">ओहो! नाव बदलताना एक एरर आली होती.</translation> <translation id="7438976808740265764">डिसेंबर २०२० नंतर Flash Player ला सपोर्ट केले जाणार नाही.</translation> <translation id="7441736921018636843">हे सेटिंग बदलण्यासाठी, तुमची सिंक पासफ्रेझ काढून टाकण्यासाठी <ph name="BEGIN_LINK" />सिंक रीसेट करा<ph name="END_LINK" /></translation> @@ -4530,8 +4567,10 @@ <translation id="7443806024147773267">तुम्ही तुमच्या Google खात्यामध्ये कधीही साइन इन करता तेव्हा तुमचे पासवर्ड ॲक्सेस करा</translation> <translation id="7444983668544353857"><ph name="NETWORKDEVICE" /> अक्षम करा</translation> <translation id="7448430327655618736">अॅप्स आपोआप इंस्टॉल करा</translation> +<translation id="7448625729116931228">एखाद्या साइटला तुमच्या आभासी वास्तविकतेचा/ डेटाचा ॲक्सेस हवा असल्यास, विनंती करा (शिफारस केलेले)</translation> <translation id="7450761244949417357">आता <ph name="ALTERNATIVE_BROWSER_NAME" /> मध्ये उघडत आहे</translation> <translation id="7453008956351770337">हा प्रिंटर निवडून, तुम्ही खालील एक्स्टेंशनला तुमच्या प्रिंटरमध्ये ॲक्सेस करण्याची परवानगी देत आहात:</translation> +<translation id="7454548535253569100">पोर्टल: <ph name="SUBFRAME_SITE" /></translation> <translation id="7456142309650173560">dev</translation> <translation id="7456847797759667638">स्थान उघडा...</translation> <translation id="7458168200501453431">Google शोध मध्ये वापरत असेलेले स्पेल चेकर वापरले जाते. तुम्ही ब्राउझरमध्ये टाइप करत असलेला मजकूर Google कडे पाठवला जातो.</translation> @@ -4577,6 +4616,7 @@ <translation id="7513029293694390567">स्टोअर क्रेडेंशियल वापरून वेबसाइटवर आपोआप साइन इन करा. अक्षम केले असल्यास, वेबसाइटवर साइन इन करण्यापूर्वी प्रत्येकवेळी तुम्हाला पुष्टीकरणासाठी विचारले जाईल.</translation> <translation id="7514239104543605883">तुमच्या डिव्हाइसवर कॉपी करा</translation> <translation id="7514365320538308">डाउनलोड करा</translation> +<translation id="7520766081042531487">गुप्त पोर्टल: <ph name="SUBFRAME_SITE" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7522255036471229694">"Ok Google" म्हणा</translation> <translation id="7525067979554623046">तयार करा</translation> @@ -4665,6 +4705,7 @@ <translation id="7652808307838961528">व्यक्ती संपादित करा, <ph name="PROFILE_NAME" /></translation> <translation id="765293928828334535">या वेबसाइटवरून अॅप्स, एक्स्टेंशन आणि वापरकर्ता स्क्रिप्ट जोडली जाऊ शकत नाहीत</translation> <translation id="7652954539215530680">पिन तयार करा</translation> +<translation id="7653295403398566475">एखाद्या साइटला तुमच्या कॅमेऱ्याची स्थिती किंवा तुमच्या रूमच्या नकाशाचा ॲक्सेस हवा असल्यास, विनंती करा</translation> <translation id="7654941827281939388">हे खाते या कॉंप्युटरवर याआधीच वापरण्यात येत आहे.</translation> <translation id="7658239707568436148">रद्द करा</translation> <translation id="7659584679870740384">तुम्ही हे डिव्हाइस वापरण्यासाठी प्राधिकृत नाही. कृपया साइन इन करण्याच्या परवानगीसाठी ॲडमिनिस्ट्रेटरशी संपर्क साधा.</translation> @@ -4815,6 +4856,7 @@ <translation id="783214144752121388">साइटना फ्लॅश रन करण्यापासून ब्लॉक करा (शिफारस केलेले)</translation> <translation id="7833720883933317473">सेव्ह केलेले कस्टम शब्द येथे दिसून येतील</translation> <translation id="7835178595033117206">बुकमार्क काढून टाकले</translation> +<translation id="7836850009646241041">तुमच्या सिक्युरिटी कीला पुन्हा स्पर्श करून पाहा</translation> <translation id="7837776265184002579">तुमचे होम पेज <ph name="URL" /> मध्ये बदलले.</translation> <translation id="7839051173341654115">पहा/बॅकअप घ्या मीडिया</translation> <translation id="7839192898639727867">सर्टिफिकेट विषय की आयडी</translation> @@ -5130,7 +5172,9 @@ <translation id="8260864402787962391">माउस</translation> <translation id="8261378640211443080"><ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> मध्ये हे एक्स्टेंशन सूचीबद्ध केले नाही आणि कदाचित तुमच्या माहिती शिवाय जोडले गेले आहे.</translation> <translation id="8261506727792406068">हटवा</translation> +<translation id="8263336784344783289">या गटाला नाव द्या</translation> <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" /> नी तुमचा माउस कर्सर बंद केला आहे.</translation> +<translation id="8264024885325823677">हे सेटिंग तुमच्या अॅडमिनिस्ट्रेटरद्वारे व्यवस्थापित केले जाते.</translation> <translation id="8264718194193514834">"<ph name="EXTENSION_NAME" />" प्रवर्तित क्षेत्रे.</translation> <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />हे डिव्हाइस आणि ते कसे वापरले जाते याविषयी ही सर्वसाधारण माहिती आहे (जसे की, बॅटरी पातळी, सिस्टम आणि ॲप ॲक्टिव्हिटी आणि एरर). डेटाचा वापर Android सुधारित करण्यासाठी केला जाईल आणि काही एकत्रित केलेली माहिती Google ॲप्स आणि Android डेव्हलपरसारख्या भागीदारांना त्यांची ॲप्स आणि उत्पादने आणखी उत्तम बनवण्यातदेखील मदत करेल<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />ही वैशिष्ट्ये बंद केल्याने तुमच्या डिव्हाइसच्या सिस्टम अपडेट आणि सुरक्षितता यासारख्या अत्यावश्यक सेवांसाठी आवश्यक असलेली माहिती पाठवण्याच्या या डिव्हाइसच्या क्षमतेवर परिणाम होत नाही.<ph name="END_PARAGRAPH2" /> @@ -5386,6 +5430,7 @@ <translation id="8650543407998814195">जरी तुम्ही आता तुमची जुनी प्रोफाइल अॅक्सेस करू शकत नसलात, तरीही तुम्ही ती काढून टाकू शकता.</translation> <translation id="8651585100578802546">सक्तीने हे पृष्ठ रीलोड करा</translation> <translation id="8652400352452647993">पॅक एक्स्टेंशन एरर</translation> +<translation id="8653578191563425126">Crostini साठी आरक्षित डिस्क जागा (तुम्ही हे नंतर बदलू शकता).</translation> <translation id="8654151524613148204">तुमच्या कॉंप्युटरला हाताळण्यासाठी ही फाइल खूप मोठी आहे. क्षमस्व.</translation> <translation id="8655295600908251630">खाडी</translation> <translation id="8655319619291175901">अरेरे, काहीतरी चूक झाली.</translation> @@ -5651,6 +5696,7 @@ <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> दिवसापूर्वी ॲक्टिव्ह होते</translation> <translation id="8986362086234534611">विसरा</translation> <translation id="8986494364107987395">Google ला वापर आकडेवारी आणि क्रॅश अहवाल आपोआप पाठवा</translation> +<translation id="8986651757229422279">हे <ph name="ORIGIN_NAME" /> ने स्टोअर केलेला सर्व डेटा आणि कुकी व त्याचे इंस्टॉल केलेले ॲप साफ करेल.</translation> <translation id="8987927404178983737">महिना</translation> <translation id="8991520179165052608">साइट तुमचा मायक्रोफोन वापरू शकते</translation> <translation id="899403249577094719">Netscape सर्टिफिकेट मूळ URL</translation> @@ -5802,6 +5848,7 @@ <translation id="932508678520956232">प्रिंट आरंभ करणे शक्य नव्हते.</translation> <translation id="93343527085570547">कायदेशीर कारणांसाठी आशयामध्ये बदल करण्याची विनंती करण्याकरिता <ph name="BEGIN_LINK1" />कायदेशीर मदत पेजवर<ph name="END_LINK1" /> जा. काही खाते आणि सिस्टम माहिती कदाचित Google ला पाठवली जाऊ शकते. आमच्या <ph name="BEGIN_LINK2" />गोपनीयता धोरण<ph name="END_LINK2" /> आणि <ph name="BEGIN_LINK3" />सेवा अटी<ph name="END_LINK3" /> यांच्या अधीन, तांत्रिक समस्यांचे निराकरण करण्यात आणि सेवांमध्ये सुधारणा करण्यात आम्हाला मदत करण्यासाठी तुम्ही आम्हाला दिलेली माहिती आम्ही वापरू.</translation> <translation id="93393615658292258">फक्त पासवर्ड</translation> +<translation id="934244546219308557">या गटाला नाव द्या</translation> <translation id="934503638756687833">आवश्यक असल्यास, येथे सूचीत नसलेले आयटम देखील काढून टाकले जातील. Chrome गोपनीयता व्हाइट पेपरमध्ये <a href="<ph name="URL" />"> नको असलेल्या सॉफ्टवेअर संरक्षण</a> बद्दल अधिक जाणून घ्या.</translation> <translation id="935490618240037774">तुमचे बुकमार्क, इतिहास, पासवर्ड आणि इतर सेटिंग्ज आपल्या Google खात्यात संकालित केल्या जातील जेणेकरून तुम्ही आपल्या सर्व डिव्हाइसेसवर त्यांचा वापर करू शकता.</translation> <translation id="935854577147268200">Smart Lock फोन बदलला आहे. Smart Lock अपडेट करण्यासाठी तुमचा पासवर्ड एंटर करा. पुढील वेळेस तुमचा फोन तुमचे <ph name="DEVICE_TYPE" /> अनलॉक करेल. तुम्ही सेटिंग्जमधून Smart Lock बंद करू शकता</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb index 29a5e8b..3f94e13 100644 --- a/chrome/app/resources/generated_resources_ms.xtb +++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Memuatkan pratonton</translation> <translation id="1032605640136438169">Sila semak syarat baharu</translation> <translation id="103279545524624934">Kosongkan ruang cakera untuk melancarkan apl Android.</translation> -<translation id="1033343386521881354">Menjumpai satu pencetak daripada pelayan cetak.</translation> <translation id="1033780634303702874">Akses peranti bersiri anda</translation> <translation id="1034942643314881546">Mendayakan adb untuk membuat ilustrasi apl</translation> <translation id="1036348656032585052">Matikan</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Tekan |<ph name="ACCELERATOR" />| untuk keluar daripada skrin penuh</translation> <translation id="1038168778161626396">Encipher Sahaja</translation> <translation id="1039337018183941703">Fail tidak sah atau rosak</translation> -<translation id="1039850285407663109">Fail yang dipilih tidak diketahui dan mungkin berbahaya. Pertimbangkan untuk mengimbas sebelum membuka fail tersebut.</translation> <translation id="1041175011127912238">Halaman ini tidak bertindak balas</translation> <translation id="1041263367839475438">Peranti yang tersedia</translation> <translation id="1042174272890264476">Komputer anda juga disertakan dengan pustaka RLZ <ph name="SHORT_PRODUCT_NAME" /> terbina dalam. RLZ memperuntukkan tanda nama tidak unik yang tidak boleh mengenal pasti secara peribadi untuk mengukur carian dan penggunaan <ph name="SHORT_PRODUCT_NAME" /> yang didorong oleh kempen galakan tertentu. Label ini kadangkala dipaparkan dalam pertanyaan Carian Google dalam <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Percayakan sijil ini untuk mengenal pasti pembuat perisian</translation> <translation id="1861262398884155592">Folder ini kosong</translation> <translation id="1863182668524159459">Tiada port siri ditemui</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> tidak diketahui. Imbas fail untuk mengurangkan risiko.</translation> <translation id="1864111464094315414">Log masuk</translation> <translation id="1864400682872660285">Dingin</translation> <translation id="1864454756846565995">Peranti USB-C (port belakang)</translation> @@ -4025,7 +4022,6 @@ <translation id="6678717876183468697">URL Pertanyaan</translation> <translation id="6680442031740878064">Tersedia: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Kadar</translation> -<translation id="6681301928961274620">Tidak menjumpai sebarang pencetak daripada pelayan cetak.</translation> <translation id="6681668084120808868">Ambil foto</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" akan dinyahpasang.</translation> <translation id="668599234725812620">Buka Google Play</translation> @@ -5556,7 +5552,6 @@ <translation id="8794025342371547160">IP terhad</translation> <translation id="879413103056696865">Semasa tempat liputan dihidupkan, <ph name="PHONE_NAME" /> anda akan:</translation> <translation id="8795916974678578410">Tetingkap Baharu</translation> -<translation id="8797086401386164142">Menjumpai <ph name="NUM_PRINTERS" /> pencetak daripada pelayan cetak.</translation> <translation id="8797459392481275117">Jangan Sekali-kali Terjemahkan Tapak Ini</translation> <translation id="8798099450830957504">Lalai</translation> <translation id="8798441408945964110">Nama penyedia</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb index 11798c4..7fd23bb 100644 --- a/chrome/app/resources/generated_resources_my.xtb +++ b/chrome/app/resources/generated_resources_my.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">အစမ်းကြည့် တင်ပေးနေ</translation> <translation id="1032605640136438169">စည်းမျဉ်းအသစ်များကို ဖတ်ရှုပါ</translation> <translation id="103279545524624934">Android အက်ပ်များကိုစဖွင့်ရန် နေရာလွတ်ပြုလုပ်ပါ။</translation> -<translation id="1033343386521881354">ပုံနှိပ်စက်ဆာဗာတွင် ပုံနှိပ်စက် ၁ ခုတွေ့သည်။</translation> <translation id="1033780634303702874">သင်၏ ဆင့်ဆက် ကိရိယာများကို ရယူသုံးရန်</translation> <translation id="1034942643314881546">အက်ပ်သရုပ်ဖော်မှု ပြုလုပ်ရန် adb ကို ဖွင့်နေသည်</translation> <translation id="1036348656032585052">ပိတ်ရန်</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">မျက်နှာပြင်အပြည့်ဖွင့်ခြင်းမှ ထွက်ရန် |<ph name="ACCELERATOR" />| ကိုနှိပ်ပါ</translation> <translation id="1038168778161626396">ကုဒ်သွင်းမှု သာလျှင်</translation> <translation id="1039337018183941703">မမှန်ကန်သော သို့မဟုတ် ပျက်စီးနေသောဖိုင်</translation> -<translation id="1039850285407663109">ရွေးထားသည့်ဖိုင်သည် အမျိုးအမည်မသိရသည့်အတွက် အန္တရာယ်ရှိနိုင်သည်။ ဤဖိုင်ကို မဖွင့်မီ စကင်ဖတ်ပါ။</translation> <translation id="1041175011127912238">ဤစာမျက်နှာသည် တုံ့ပြန်မှုမရှိပါ</translation> <translation id="1041263367839475438">ရနိုင်သော စက်များ</translation> <translation id="1042174272890264476">သင်၏ ကွန်ပျူတာထဲတွင်ပါ <ph name="SHORT_PRODUCT_NAME" />၏ RLZ စာကြည့်တိုက် ထည့်သွင်းပြီး ဖြစ်သည်။ RLZ က တစ်ဦးတည်းပိုင် မဟုတ်သော၊ ကိုယ်ပိုင် မဟုတ်သော ထောက်ပြရနိုင်သည့် တဲဘ်ကို သတ်မှတ်ပေးလျက် မြှင့်တင်ရေး အစီအစဉ် တစ်ခုက လှုံ့ဆော်ပေးလိုက်သည့် ရှာဖွေမှုုများ နှင့် <ph name="SHORT_PRODUCT_NAME" /> သုံးစွဲမှုုကို တိုင်းထွာပေးသည်။ ထို တံဆိပ်များမှာ တခါတရံ <ph name="PRODUCT_NAME" /> ထဲက Google ရှာဖွေမှု မေးမြန်းချက်များထဲမှာ ပါလာတတ်ကြသည်။</translation> @@ -640,7 +638,6 @@ <translation id="1858585891038687145">ဆော့ဝဲပြုလုပ်သူများ၏ အထောက်အထားအဖြစ် ဤအသိအမှတ်ပြုလက်မှတ်ကို ယုံကြည်ပါ</translation> <translation id="1861262398884155592">ဤဖိုင်တွဲတွင် မည်သည့်အရာမျှ မရှိပါ</translation> <translation id="1863182668524159459">အစဉ်လိုက်ပို့တ်များ မရှိပါ</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> ကို မသိရပါ။ အန္တရာယ် လျော့နည်းစေရန် ဖိုင်ကို စကင်ဖတ်ပါ။</translation> <translation id="1864111464094315414">အကောင့်ထဲဝင်ခြင်း</translation> <translation id="1864400682872660285">ပိုအေးသည့် အရောင်</translation> <translation id="1864454756846565995">USB-C ကိရိယာ (နောက်ဘက် ပို့တ်)</translation> @@ -4023,7 +4020,6 @@ <translation id="6678717876183468697">မေးခွန်း URL</translation> <translation id="6680442031740878064">ရနိုင်သည့် နေရာလွတ်− <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">အဆင့်သတ်မှတ်ရန်</translation> -<translation id="6681301928961274620">ပုံနှိပ်စက်ဆာဗာတွင် မည်သည့်ပုံနှိပ်စက်မျှ မတွေ့ပါ။</translation> <translation id="6681668084120808868">ဓါတ်ပုံရိုက်</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" ကို ဖယ်ရှားသွားပါမည်။</translation> <translation id="668599234725812620">Google Play ကို ဖွင့်ရန်</translation> @@ -5552,7 +5548,6 @@ <translation id="8794025342371547160">ကန့်သတ်ထားသည့် အိုင်ပီ</translation> <translation id="879413103056696865">ဟော့စပေါ့ပွင့်နေစဉ်တွင် သင်၏ <ph name="PHONE_NAME" /> က အောက်ပါတို့ကို ပြုလုပ်ပါမည်−</translation> <translation id="8795916974678578410">ဝင်ဒိုး အသစ်</translation> -<translation id="8797086401386164142">ပုံနှိပ်စက်ဆာဗာတွင် ပုံနှိပ်စက် <ph name="NUM_PRINTERS" /> ခု တွေ့သည်။</translation> <translation id="8797459392481275117">ဤဝဘ်ဆိုဒ်ကို ဘယ်တော့မှ ဘာသာမပြန်ပါနှင့်</translation> <translation id="8798099450830957504">ပုံသေ</translation> <translation id="8798441408945964110">ပံ့ပိုးသူ အမည်</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb index 0fa18c5..8a5f5852 100644 --- a/chrome/app/resources/generated_resources_ne.xtb +++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -33,7 +33,6 @@ <translation id="1036982837258183574">पूर्ण स्क्रिनबाट बाहिर निस्कनका लागि <ph name="ACCELERATOR" /> लाई थिच्नुहोस्</translation> <translation id="1038168778161626396">एन्साइफर मात्रै</translation> <translation id="1039337018183941703">अमान्य वा बिग्रिएको फाइल</translation> -<translation id="1039850285407663109">चयन गरिएको यो फाइलको ढाँचा अज्ञात भएकाले यो खतरनाक हुन सक्छ। यो फाइल खोल्नुअघि स्क्यान गर्न सिफारिस गरिन्छ।</translation> <translation id="1041175011127912238">यो पृष्ठले प्रतिक्रिया जनाइरहेको छैन</translation> <translation id="1041263367839475438">उपलब्ध यन्त्रहरू</translation> <translation id="1042174272890264476">तपाइँको कम्प्युटर <ph name="SHORT_PRODUCT_NAME" /> को RLZ अन्तरनिर्मित पुस्तकालयसँग पनि आउँछ। एक विशेष वृद्धि जनक अभियानद्वारा चालू भएको खोजीहरू र <ph name="SHORT_PRODUCT_NAME" /> प्रयोगहरू नाप्नको लागि RLZ ले एउटा अद्वितीय नभएको, व्यक्तिगत नभएको ठम्याउन सकिने ट्याग तोक्छ। यी लेबुलहरू कहिलेकाही <ph name="PRODUCT_NAME" /> मा Google खोजी क्वेरीहरूमका देखा पर्छन्।</translation> @@ -150,6 +149,7 @@ <translation id="1197979282329025000"><ph name="PRINTER_NAME" /> मुद्रकको लागि मुद्रक क्षमताहरू प्राप्त गर्दा एक त्रुटि भयो। यो मुद्रक <ph name="CLOUD_PRINT_NAME" /> सँग दर्ता गर्न सकिएन।</translation> <translation id="119944043368869598">सबै सफा गर्नुहोस्</translation> <translation id="1201402288615127009">अर्को</translation> +<translation id="1202556750060561551"><ph name="SITE_GROUP_NAME" /> ले भण्डारण गरेका सबै डेटा र कुकी, यसअन्तर्गतका सबै साइट र यसले स्थापना गरेका सबै अनुप्रयोगहरू खाली गरिने छन्।</translation> <translation id="1202596434010270079">Kiosk अनुप्रयोग अद्यावधिक गरिएको छ। कृपया USB स्टिक हटाउनुहोस्।</translation> <translation id="120368089816228251">साङ्गीतिक टिपोट</translation> <translation id="1205489148908752564">पढ्नुहोस् र श्वेतसूची गरिएका प्रयोगकर्ताहरू परिवर्तन गर्नुहोस्</translation> @@ -277,8 +277,10 @@ <translation id="138784436342154190">पूर्वनिर्धारित सुरुवात पृष्ठलाई पुनर्स्थापना गर्ने हो?</translation> <translation id="1390548061267426325">नियमित ट्याबको रूपमा खोल्नुहोस्</translation> <translation id="1393283411312835250">घाम र बादल</translation> +<translation id="1393787139683794508">यस कार्यले <ph name="ORIGIN_NAME" /> ले भण्डारण गरेका सबै डेटा र कुकीहरू खाली गर्ने छ।</translation> <translation id="1395730723686586365">अद्यतनकर्ता सुरु भयो</translation> <translation id="1396139853388185343">प्रिन्टर सेटअप गर्दा त्रुटि</translation> +<translation id="1396259464226642517">तपाईंलाई यस्तो परिणाम आउला भन्ने लागेको थियो? <ph name="BEGIN_LINK" />प्रतिक्रिया पठाउनुहोस्<ph name="END_LINK" /></translation> <translation id="1396963298126346194">तपाईंले प्रविष्ट गर्नुभएको इमेल र पासवर्ड मेल खाँदैनन्</translation> <translation id="1397500194120344683">कुनै पनि योग्य यन्त्र छैन। <ph name="LINK_BEGIN" />थप जान्नुहोस्।<ph name="LINK_END" /></translation> <translation id="1398853756734560583">अधिकतम बनाउनुहोस्</translation> @@ -550,6 +552,7 @@ <translation id="1758018619400202187">EAP-TLS</translation> <translation id="17584710573359123">Chrome वेब स्टोरमा हेर्नुहोस्</translation> <translation id="176193854664720708">फिंगरप्रिन्ट सेन्सर पावर बटनमा छ। कुनै एक औँलाले हल्का किसिमले यसलाई छुनुहोस्।</translation> +<translation id="176273057789108760">ड्र्याग गरिएका फाइलहरू इन्टरप्राइजका नीतिहरूअनुसार छन् कि छैनन् भन्ने कुराको जाँच गर्न तपाईंको सङ्गठनले ती फाइलहरू स्क्यान गर्दै छ।</translation> <translation id="1763046204212875858">एप्लिकेसन शर्टकटहरू सिर्जना गर्नुहोस्</translation> <translation id="1763108912552529023">अन्वेषण गरिराख्नुहोस्</translation> <translation id="1763808908432309942">यसले नयाँ ट्याबमा खोल्छ</translation> @@ -588,6 +591,7 @@ <translation id="1805472176602625930">सुरक्षा साँचोमा रहेको बटन थिच्नुहोस्</translation> <translation id="1805738995123446102">पृष्ठभूमि ट्याबले तपाईंको माइक्रोफोन प्रयोग गर्दै छ</translation> <translation id="1805822111539868586">दृश्यहरूको निरीक्षण गर्नुहोस्</translation> +<translation id="1805888043020974594">छपाइसम्बन्धी सर्भर</translation> <translation id="1805967612549112634">PIN पुष्टि गर्नुहोस्</translation> <translation id="1809734401532861917">मेरा बुकमार्क, इतिहास, पासवर्ड र अन्य सेटिङहरूलाई <ph name="USER_EMAIL_ADDRESS" /> मा थप्नुहोस्</translation> <translation id="1813278315230285598">सेवाहरू</translation> @@ -629,7 +633,6 @@ <translation id="1858585891038687145">सफ्टवेयर निर्माताहरूको पहिचान गर्न यस प्रमाणपत्रमाथि विश्वास गर्नुहोस्</translation> <translation id="1861262398884155592">यो फोल्डर खाली छ</translation> <translation id="1863182668524159459">कुनै पनि सिरियल पोर्ट फेला परेन</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> को ढाँचा अज्ञात छ। जोखिम न्यूनीकरण गर्न यो फाइल स्क्यान गर्नुहोस्।</translation> <translation id="1864111464094315414">लगइन</translation> <translation id="1864400682872660285">अझ शीतल</translation> <translation id="1864454756846565995">USB-C यन्त्र (पछाडिको पोर्ट)</translation> @@ -736,6 +739,7 @@ <translation id="202352106777823113">डाउनलोड गर्न अत्यन्त लामो समय लियो र सञ्जालबाट रोकिएको थियो।</translation> <translation id="2025632980034333559"><ph name="APP_NAME" /> क्र्यास भएको छ। एक्स्टेन्सनलाई पुन: लोड गर्न यो बलुनलाई क्लिक गर्नुहोस्।</translation> <translation id="2025891858974379949">असुरक्षित सामग्री</translation> +<translation id="202918510990975568">सुरक्षा तथा साइन इन गर्ने प्रक्रिया कन्फिगर गर्न आफ्नो पासवर्ड प्रविष्टि गर्नुहोस्</translation> <translation id="2034346955588403444">अन्य WiFi नेटवर्क थप्नुहोस्</translation> <translation id="203574396658008164">लक स्क्रिनबाटै टिपोट लिने अनुप्रयोगलाई सक्षम पार्नुहोस्</translation> <translation id="2037445849770872822">यो Google खातामा सुपरिवेक्षण सेटअप गरिएको छ। थप अभिभावकीय नियन्त्रणहरू सेटअप गर्न जारी राख्नुहोस् नामक विकल्प चयन गर्नुहोस्। @@ -887,6 +891,7 @@ <translation id="2224471211857467033">पहुँचसम्बन्धी घटनाहरू</translation> <translation id="2224551243087462610">फोल्डर नाम सम्पादन गर्नुहोस्</translation> <translation id="2226449515541314767">MIDI यन्त्रहरूको पूरा नियन्त्रणको लागि यो साइट ब्लक गरिएको छ।</translation> +<translation id="222704500187107962">तपाईं हालको इन्कग्निटो सत्रबाट बाहिरिएपछि यो अपवाद स्वतः हटाइने छ</translation> <translation id="2227179592712503583">सुझाव हटाउनुहोस्</translation> <translation id="2229161054156947610">1 धण्टा बढी समय बाँकी</translation> <translation id="222931766245975952">फाइल काटियो</translation> @@ -940,6 +945,7 @@ <translation id="2300383962156589922"><ph name="APP_NAME" /> लाई आफू अनुकूल पार्नुका साथै यसमाथि नियन्त्रण गर्नुहोस्</translation> <translation id="2301382460326681002">विस्तार रुट डाइरेक्टरी अवेध छ।</translation> <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" ले थप अनुमतिहरू अनुरोध गरेको छ।</translation> +<translation id="23055578400314116">प्रयोगकर्ताको नाम चयन गर्नुहोस्</translation> <translation id="2307462900900812319">नेटवर्क कन्फिगर गर्नुहोस्</translation> <translation id="230927227160767054">यस पृष्ठले एक सेवा सञ्चालनकर्ता स्थापना गर्न चाहन्छ।</translation> <translation id="2309620859903500144">यो साइटलाई तपाईंको चाल वा प्रकाशसम्बन्धी सेन्सरहरूको पहुँच राख्नबाट रोक लागाइएको छ।</translation> @@ -979,6 +985,7 @@ <translation id="2353297238722298836">क्यामेरा तथा माइक्रोफोन प्रयोग गर्ने अनुमति छ</translation> <translation id="2356070529366658676">सोध्नुहोस्</translation> <translation id="2357330829548294574"><ph name="USER_NAME" /> हटाउनुहोस्</translation> +<translation id="235798134753548762">तपाईंका अनुप्रयोग, सेटिङ र Wi-Fi सम्बन्धी प्राथमिकताहरू सिंक गरिने छन्। परिवर्तन गर्न सेटअप पछि जुनसुकै बेला सेटिङमा जानुहोस्।</translation> <translation id="2359345697448000899">उपकरण मेनुमा विस्तारहरू क्लिक गर्दै तपाइँका विस्तारहरूलाई व्वयस्थापन गर्नुहोस्।</translation> <translation id="2359808026110333948">जारी राख्नुहोस्</translation> <translation id="236117173274098341">अप्टिमाइज गर्नुहोस्</translation> @@ -1031,6 +1038,7 @@ <translation id="2436720498717686157">तपाईंको सङ्गठनलाई तुरुन्तै यो यन्त्रमा अद्यावधिक चाहिन्छ</translation> <translation id="2439545803278355377">आफ्नो नयाँ PIN प्रविष्टि गर्नुहोस्। PIN मा अनिवार्य रूपमा कम्तीमा चारवटा वर्ण हुनु पर्छ र यसमा अक्षर, सङ्ख्या र अन्य वर्णहरू समावेश हुन सक्छन्।</translation> <translation id="2440604414813129000">स्रो&त हेर्नुहोस्</translation> +<translation id="244231003699905658">अमान्य ठेगाना कृपया उक्त ठेगानाको जाँच गरी फेरि प्रयास गर्नुहोस्।</translation> <translation id="2442916515643169563">पाठको छायाँ</translation> <translation id="2445081178310039857">एक्सटेन्सन मूल डाइरेक्टरी आवश्यक छ।</translation> <translation id="2445484935443597917">नयाँ प्रोफाइल बनाउनुहोस्</translation> @@ -1085,6 +1093,7 @@ <translation id="2501278716633472235">पछाडि जानुहोस्</translation> <translation id="2501797496290880632">एक सर्टकट टाइप गर्नुहोस्</translation> <translation id="2502441965851148920">स्वचालित अद्यावधिकहरू सक्रिय गरिएका छन्। म्यानुअल अद्यावधिकहरू तपाईँको प्रशासकद्वारा असक्षम गरिएको छ।</translation> +<translation id="2502719318159902502">पूर्ण पहुँच</translation> <translation id="2505127913256479918">सुपरिवेक्षण गरिएको यो खाता चाँडै नै हटाइने छ</translation> <translation id="2505324914378689427">{SCREEN_INDEX,plural, =1{स्क्रिन #}other{स्क्रिन #}}</translation> <translation id="2505402373176859469"><ph name="RECEIVED_AMOUNT" /> को <ph name="TOTAL_SIZE" /></translation> @@ -1357,6 +1366,7 @@ <translation id="2865919525181940183">हाल स्क्रिनमा देखिएका कार्यक्रमहरूको स्क्रिनसट</translation> <translation id="286674810810214575">पावरका स्रोतहरूको जाँच गर्दै...</translation> <translation id="2867768963760577682">पिन गरिएको ट्याबको रूपमा खोल्नुहोस्</translation> +<translation id="2868184003987917410">साइटहरूलाई भर्चुअल रियालिटी चल्ने तपाईंको यन्त्र/डेटामाथि पहुँच राख्ने अनुमति नदिनुहोस्</translation> <translation id="2868746137289129307">यो एक्सटेन्सनको मिति सकिएको छ र उद्यम नीति द्वारा अक्षम छ। एक नयाँ संस्करण उपलब्ध भएपछि यो स्वतः सक्षम हुन सक्छ।</translation> <translation id="2870560284913253234">साइट</translation> <translation id="2870909136778269686">अद्यावधिक गर्दै...</translation> @@ -1403,6 +1413,7 @@ <translation id="2916745397441987255">विस्तारहरू खोज्नुहोस्</translation> <translation id="2921081876747860777">आफ्नो स्थानीय डेटाको सुरक्षा गर्न पासवर्ड सिर्जना गर्नुहोस्।</translation> <translation id="2923234477033317484">यो खाता हटाउनुहोस्</translation> +<translation id="2925054096976782003">टाँसिएको डेटा अपलोड गर्न सुरक्षित छ कि छैन भन्ने कुराको जाँच गर्न तपाईंको संस्थाले सो डेटा स्क्यान गर्दै छ।</translation> <translation id="2926085873880284723">पूर्वनिर्धारित सर्टकटहरू पुनर्स्थापना गर्नुहोस्</translation> <translation id="2927017729816812676">केस भण्डारण</translation> <translation id="2931157624143513983">छाप्न मिल्ने क्षेत्रमा ठ्याक्कै अट्ने बनाउनुहोस्</translation> @@ -1426,6 +1437,7 @@ <translation id="2956070239128776395">समूहभित्र खण्ड छ: <ph name="ERROR_LINE" /></translation> <translation id="2957117904572187936">कुनै पनि साइटलाई आफ्नो यन्त्रका फाइल वा फोल्डरहरू सम्पादन गर्न नदिनुहोस्</translation> <translation id="2958721676848865875">प्याक विस्तारसम्बन्धी चेतावनी</translation> +<translation id="2959127025785722291">केही चिज गडबड भयो। स्क्यान गर्ने कार्य पूरा गर्न सकिएन। कृपया फेरि प्रयास गर्नुहोस्</translation> <translation id="2959842337402130152">पर्याप्त भण्डारण स्थान नभएका कारण पुनर्स्थापना गर्न सकिएन। यन्त्रबाट <ph name="SPACE_REQUIRED" /> ठाउँ खाली गरी फेरि प्रयास गर्नुहोस्।</translation> <translation id="296026337010986570">सम्पन्न भयो! हानिकारक सफ्टवेयर हटाइयो। विस्तारहरू फेरि सक्रिय गर्न <a href="chrome://extensions">विस्तारहरू</a> मा जानुहोस्।</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" /> (विस्तार प्रदान गरिएको छ)</translation> @@ -1683,6 +1695,7 @@ <translation id="3348038390189153836">हटाउन सकिने यन्त्र पत्ता लगाइयो</translation> <translation id="3349933790966648062">मेमोरीको इतिहास</translation> <translation id="3350117557200012647">जोडा बनाउने मोडमा सामेल हुनुहोस्</translation> +<translation id="3350244554415289209">कुनै साइटले तपाईंको क्यामेराको स्थितिमाथि पहुँच राख्न वा तपाईंको कोठाको नक्साङ्कन गर्न चाहेका बेला सोध्नुहोस् (सिफारिस गरिएको)</translation> <translation id="3355936511340229503">जडान त्रुटि</translation> <translation id="3356580349448036450">पूर्ण</translation> <translation id="3359256513598016054">प्रमाणपत्र नीति अवरोधहरू</translation> @@ -1746,6 +1759,7 @@ <translation id="3448492834076427715">खाता अद्यावधिक गर्नुहोस्</translation> <translation id="3449839693241009168"><ph name="EXTENSION_NAME" /> लाई आदेशहरू पठाउनको लागि <ph name="SEARCH_KEY" /> थिच्नुहोस्</translation> <translation id="3450157232394774192">निष्क्रिय स्थिति दखल प्रतिशत</translation> +<translation id="3451332697983754369">मेरो <ph name="DEVICE_TYPE" /> सिंक गर्नुहोस्</translation> <translation id="3453612417627951340">प्राधिकरण आवश्यकता</translation> <translation id="3454157711543303649">सक्रिय गर्ने काम पूरा भयो</translation> <translation id="3454213325559396544">यो <ph name="DEVICE_TYPE" /> का लागि यो नै सफ्टवेयर र सुरक्षासम्बन्धी अन्तिम स्वचालित अद्यावधिक हो। भावी अद्यावधिकहरू प्राप्त गर्न स्तरवृद्धि गरी नयाँ मोडेल प्रयोग गर्न थाल्नुहोस्।</translation> @@ -1768,6 +1782,7 @@ <translation id="347785443197175480"><ph name="HOST" /> लाई तपाइँको क्यामेरा र माइक्रोफोन पहुँच गर्न अनुमति दिन जारी राख्नुहोस्</translation> <translation id="3478685642445675458">कृपया कुनै व्यक्तिलाई हटाउनु अघि आफ्नो प्रोफाइललाई अनलक गर्नुहोस्।</translation> <translation id="3479552764303398839">अहिले होइन</translation> +<translation id="3479685872808224578">छपाइसम्बन्धी सर्भर फेला पार्न सकिएन। कृपया उक्त ठेगानाको जाँच गरी फेरि प्रयास गर्नुहोस्।</translation> <translation id="3481268647794498892"><ph name="COUNTDOWN_SECONDS" /> सेकेन्डमा <ph name="ALTERNATIVE_BROWSER_NAME" /> खोलिँदै</translation> <translation id="3484273680291419129">हानिकारक सफ्टवेयर हटाउँदै...</translation> <translation id="3484869148456018791">नयाँ प्रमाणपत्र प्राप्त गर्नुहोस्</translation> @@ -1883,6 +1898,7 @@ <translation id="3630132874740063857">तपाईंको फोन</translation> <translation id="3630995161997703415">यो साइट जुनसुकै बेला प्रयोग गर्न यसलाई आफ्नो सेल्फमा थप्नुहोस्</translation> <translation id="3634507049637220048"><ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" /> मध्ये नेटवर्क <ph name="NETWORK_INDEX" />, तपाईंका प्रशासकले व्यवस्थित गर्नुभएको छ, विवरणहरू</translation> +<translation id="3635241501480133979">यो डेटा तपाईंको सङ्गठनको सुरक्षासम्बन्धी नीतिहरूको उल्लङ्घन हुने भएकाले यो डेटा ड्रप गर्न सकिँदैन</translation> <translation id="3635353578505343390">Google लाई प्रतिक्रिया पठाउनुहोस्</translation> <translation id="3636096452488277381">के छ, <ph name="USER_GIVEN_NAME" />।</translation> <translation id="3636766455281737684"><ph name="PERCENTAGE" /> % - <ph name="TIME" /> बायाँ</translation> @@ -1917,6 +1933,7 @@ <translation id="3677657024345889897">सबैभन्दा सानो आवाज</translation> <translation id="3677911431265050325">मोबाइल साइट अनुरोध गर्नुहोस्</translation> <translation id="3678156199662914018">विस्तार: <ph name="EXTENSION_NAME" /></translation> +<translation id="3678613690490567106">विभिन्न यन्त्रहरूमा वैयक्तीकृत अनुभव प्राप्त गर्न सिंक गर्नुहोस्</translation> <translation id="3681311097828166361">प्रतिक्रिया दिनुभएकोमा धन्यवाद। तपाईं अहिले अफलाइन हुनुहुन्छ र तपाईंको रिपोर्ट पछि पठाइने छ।</translation> <translation id="3682824389861648626">चालको थ्रेसहोल्ड</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> स्क्रीन साझा अनुरोध</translation> @@ -2426,6 +2443,7 @@ <translation id="4400632832271803360">शीर्ष-पङ्क्तिका कुञ्जीहरूको व्यवहार बदल्न लन्चर कुञ्जीलाई थिचिराख्नुहोस्</translation> <translation id="4400963414856942668">तपाईं कुनै ट्याबमा पुस्तक चिन्ह लगाउनका लागि तारा चिन्हमा क्लिक गर्न सक्नुहुन्छ</translation> <translation id="4403775189117163360">कुनै अर्को फोल्डर छनौट गर्नुहोस्</translation> +<translation id="4404136731284211429">फेरि स्क्यान गर्नुहोस्</translation> <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation> <translation id="4408599188496843485">म&द्दत</translation> <translation id="4409697491990005945">सीमान्तहरू</translation> @@ -2444,6 +2462,7 @@ <translation id="4421932782753506458">फ्लफी</translation> <translation id="4423376891418188461">सेटिङहरूलाई पुनर्स्थापना गर्नुहोस्</translation> <translation id="442397852638519243"><ph name="USER_NAME" />, तपाईंको प्रशासकले तपाईंले आफ्नो पासवर्ड परिवतन गर्नुहोस् भन्ने चाहनुहुन्छ।</translation> +<translation id="4429030830601238961">यो डेटा तपाईंको सङ्गठनको सुरक्षासम्बन्धी नीतिहरूको उल्लङ्घन हुने भएकाले यो डेटा टाँस्न सकिँदैन</translation> <translation id="4430019312045809116">आयतन</translation> <translation id="4430369329743628066">पुस्तक चिन्ह थपियो!</translation> <translation id="4434045419905280838">पपअप तथा रिडिरेक्टहरू</translation> @@ -2490,9 +2509,11 @@ <translation id="4501530680793980440">हटाउने कार्य पक्का गर्नुहोस्</translation> <translation id="4502423230170890588">यो यन्त्रबाट हटाउनुहोस्</translation> <translation id="4504940961672722399">यस प्रतिमामा क्लिक गरेर वा <ph name="EXTENSION_SHORTCUT" /> थिचेर यो विस्तार प्रयोग गर्नुहोस्।</translation> +<translation id="4507164039066603071">साइटहरूलाई तपाईंको क्यामेराको स्थितिमाथी पहुँच राख्न वा तपाईंको कोठाको नक्साङ्कन गर्ने अनुमति नदिनुहोस्</translation> <translation id="4508051413094283164">सबै url हरूलाई इन्कोग्निटो विन्डोमा खोल्नुहोस्</translation> <translation id="4508265954913339219">सक्रिय बनाउने कार्य असफल भयो</translation> <translation id="4508765956121923607">स्रो&त हेर्नुहोस्</translation> +<translation id="4510614391273086606">Linux का फाइल र अनुप्रयोगहरू पुनर्स्थापना गरी तिनको ब्याकअप स्थितिमा लगिँदै छ।</translation> <translation id="451407183922382411"><ph name="COMPANY_NAME" /> द्वारा संचालित</translation> <translation id="4514610446763173167">भिडियो प्ले वा पज गर्न टगल गर्नुहोस्</translation> <translation id="451515744433878153">हटाउनुहोस्</translation> @@ -2690,6 +2711,7 @@ <translation id="480990236307250886">गृह पृष्ठ खोल्नुहोस्</translation> <translation id="4813136279048157860">मेरा छविहरू</translation> <translation id="4813512666221746211">सञ्जाल त्रुटि</translation> +<translation id="4814378367953456825">यो फिंगरप्रिन्टको नाम प्रविष्टि गर्नुहोस्</translation> <translation id="4820236583224459650">सक्रिय टिकटको रूपमा सेट गर्नुहोस्</translation> <translation id="4821935166599369261">&रूपरेखा सक्षम गरिएको छ</translation> <translation id="4823484602432206655">पढ्नुहोस् र प्रयोगकर्ता तथा यन्त्र सेटिङहरू परिवर्तन गर्नुहोस्</translation> @@ -2736,6 +2758,7 @@ <translation id="4876895919560854374">स्क्रिनलाई लक र अनलक गर्नुहोस्</translation> <translation id="4877276003880815204">तत्त्वहरूको निरीक्षण गर्नुहोस्</translation> <translation id="4878653975845355462">इच्छ्याइएका पृष्ठभूमिहरू तपाईंका प्रशासकद्वारा निष्क्रिय पारिएका छन्</translation> +<translation id="4878718769565915065">यो सुरक्षा साँचोमा फिंगरप्रिन्ट थप्न सकिएन</translation> <translation id="4879491255372875719">स्वचालित (पूर्वनिर्धारित)</translation> <translation id="4880328057631981605">पहुँच बिन्दुको नाम</translation> <translation id="4880827082731008257">खोज इतिहास</translation> @@ -2866,6 +2889,7 @@ <translation id="5065775832226780415">Smart Lock</translation> <translation id="5067399438976153555">सधैं सक्रिय</translation> <translation id="5067867186035333991"><ph name="HOST" /> तपाईंको माइक्रोफोनको पहुँच गर्न चाहन्छ कि चाहँदैन भनि सोध्नुहोस्</translation> +<translation id="5068377946749700758">ड्र्याग गरिएको डेटा अपलोड गर्न सुरक्षित छ कि छैन भन्ने कुराको जाँच गर्न तपाईंको संस्थाले सो डेटा स्क्यान गर्दै छ।</translation> <translation id="5068918910148307423">हालसालै बन्द गरिएका साइटहरूलाई डेटा पठाउने र प्राप्त गर्ने कार्य सम्पन्न गर्न अनुमति नदिनुहोस्</translation> <translation id="5068919226082848014">पिजा</translation> <translation id="5072052264945641674">कर्सरको आकार समायोजन गर्नुहोस्</translation> @@ -3058,6 +3082,7 @@ <translation id="5341793073192892252">निम्न कुकीहरूमाथि रोक लगाइयो (तेस्रो पक्षीय कुकीहरूमाथि बिना अपवाद रोक लागिरहेको छ)</translation> <translation id="5341980496415249280">कृपया प्रतीक्षा गर्नुहोस्, प्याकिङ गर्दै...</translation> <translation id="5342091991439452114">PIN अनिवार्य रूपले कम्तीमा <ph name="MINIMUM" /> अङ्कको हुनु पर्छ</translation> +<translation id="5344036115151554031">Linux पुनर्स्थापना गर्दै</translation> <translation id="5352033265844765294">समय स्याम्पिङ</translation> <translation id="5353252989841766347">Chrome का पासवर्डहरूलाई निर्यात गर्नुहोस्</translation> <translation id="5355099869024327351">सहायकलाई तपाईंलाई सूचनाहरू देखाउन दिनुहोस्</translation> @@ -3111,6 +3136,7 @@ <translation id="5427459444770871191">दायाँबाट &घुमाउनुहोस्</translation> <translation id="542872847390508405">तपाइँ पाहुनाको रूपमा ब्राउज गर्दै हुनुहुन्छ</translation> <translation id="5428850089342283580"><ph name="ACCNAME_APP" /> (अपडेट उपलब्ध छ)</translation> +<translation id="542948651837270806">विश्वसनीय प्लेटफर्मको मोड्युलको अद्यावधिक स्थापना गरिनु पर्छ। <ph name="TPM_FIRMWARE_UPDATE_LINK" /> हेर्नुहोस्</translation> <translation id="5430931332414098647">तात्कालिक टेदरिङ</translation> <translation id="5431318178759467895">रङ्ग</translation> <translation id="5431825016875453137">OpenVPN/L2TP</translation> @@ -3291,6 +3317,7 @@ <translation id="5659593005791499971">इमेल</translation> <translation id="5659833766619490117">यस पृष्ठलाई अनुवाद गर्न सकिएन</translation> <translation id="5660204307954428567"><ph name="DEVICE_NAME" /> सँग जोडा बनाउनुहोस्</translation> +<translation id="5662513737565158057">Linux अनुप्रयोगहरूले काम गर्ने तरिका परिवर्तन गर्नुहोस्।</translation> <translation id="5667546120811588575">Google Play सेटअप गरिँदै छ…</translation> <translation id="5669267381087807207">सक्रिय गर्दै</translation> <translation id="5669691691057771421">नयाँ PIN प्रविष्टि गर्नुहोस्</translation> @@ -3697,6 +3724,7 @@ <translation id="6238923052227198598">लक स्क्रिनसम्बन्धी पछिल्लो टिपोट राख्नुहोस्</translation> <translation id="6239558157302047471">&frame पुन: लोड गर्नुहोस्</translation> <translation id="6241530762627360640">तपाईंको सिस्टमसँग पेयर गरिएको ब्लूटुथ यन्त्रहरूको जानकारी पहुँच गर्नुहोस् र नजिकैको ब्लूटुथ यन्त्रहरू खोज्नुहोस्।</translation> +<translation id="6241844896329831164">पहुँच चाहिँदैन</translation> <translation id="6242589501614145408">आफ्नो सुरक्षा साँचो रिसेट गर्नुहोस्</translation> <translation id="6242852299490624841">यो ट्याबमा केन्द्रित गर्नुहोस्</translation> <translation id="6243280677745499710">हाल सेट गरिएको</translation> @@ -3897,6 +3925,8 @@ <translation id="6531282281159901044">खतरनाक फाइल राख्नुहोस्</translation> <translation id="6532101170117367231">Google ड्राइभमा सुरक्षित गर्नुहोस्</translation> <translation id="6532106788206463496">परिवर्तनहरू सुरक्षित गर्ने</translation> +<translation id="6532206849875187177">सुरक्षा तथा साइन इन</translation> +<translation id="6532527800157340614">तपाईंको पहुँच टोकन प्राप्त गर्न नसकिएकाले साइन इन गर्न सकिएन। कृपया आफ्नो इन्टरनेटको जाँच गरी फेरि प्रयास गर्नुहोस्।</translation> <translation id="6532663472409656417">इन्टरप्राइजमा दर्ता गरिएको</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />नोट:<ph name="END_BOLD" /> तपाइँले के गरिरहनुभएको छ भनेर थाहा छ भने वा तपाइँलाई त्यसो गर्न अनुरोध गरिएको छ भने मात्रै सक्षम गर्नुहोस्, किनभने लगत सङ्कलन गर्नाले प्रस्तुतीकरण घटाउन सक्छ।</translation> <translation id="6541638731489116978">यो साइटलाई तपाईंको चालसम्बन्धी सेन्सरहरूको पहुँच राख्नबाट रोक लगाइएको छ।</translation> @@ -3904,6 +3934,7 @@ <translation id="6545864417968258051">ब्लुटुथ स्क्यान गर्दै</translation> <translation id="6545867563032584178">Mac का सिस्टमसम्बन्धी प्राथमिकताहरूमा माइक्रोफोन निष्क्रिय पारिएको छ</translation> <translation id="6547354035488017500">कम्तीमा ५१२ एम.बि. ठाउँ खाली गर्नुहोस् नत्र तपाईँको यन्त्रले प्रतिक्रिया दिन छाड्नेछ। ठाउँ खाली गर्न यन्त्रको भण्डारणबाट फाइलहरू मेट्नुहोस्।</translation> +<translation id="6549966385318247177">यो सामग्री वयस्क व्यक्तिको सामग्री भएकाले यसमाथि रोक लगाइयो</translation> <translation id="6550675742724504774">विकल्पहरू</translation> <translation id="6551508934388063976">आदेश अनुपलब्ध छ। नया विन्डो खोल्नको लागि control-N थिच्नुहोस्।</translation> <translation id="6551612971599078809">साइटले USB प्रयोग गर्दै छ</translation> @@ -4235,6 +4266,7 @@ <translation id="703001695939087067">विन्डोको रूपरेखा मोडमा प्रवेश गरियो। नेभिगेसन गर्न ट्याब थिच्नुहोस्।</translation> <translation id="7031608529463141342"><ph name="WINDOW_TITLE" /> - क्रमिक पोर्टमा जडान गरियो</translation> <translation id="7031962166228839643">TPM तैयार गरिदैँछ, कृपया प्रतिक्षा गर्नुहोस् (यसले केही समय लिन सक्छ)...</translation> +<translation id="7034615910652881882">कुनै साइटले तपाईंका भर्चुअल रियालिटी चल्ने यन्त्रहरूमाथि पहुँच राख्न चाहेका बेला सोध्नुहोस्</translation> <translation id="7037509989619051237">पाठवाचकको पूर्वावलोकन</translation> <translation id="7039326228527141150"><ph name="VENDOR_NAME" /> बाट USB उपकरणहरूको पहुँच गर्नुहोस्</translation> <translation id="7039912931802252762">Microsoft स्मार्ट कार्ड लगअन</translation> @@ -4274,6 +4306,7 @@ <translation id="7081952801286122383">तपाईं इन्कोग्निटो मोडमा हुनुहुन्छ</translation> <translation id="708278670402572152">स्क्यान गर्ने कार्यलाई सक्षम पार्न जडान विच्छेद गर्नुहोस्</translation> <translation id="7085389578340536476">Chrome लाई अडियो रेकर्ड गर्न दिने हो?</translation> +<translation id="7086467953285486445">यी फाइलहरू तपाईंको सङ्गठनको सुरक्षासम्बन्धी नीतिअनुसार नभएकाले ड्र्प गर्न सकिँदैन।</translation> <translation id="7088434364990739311">अद्यावधिक जाँच सुरु हुन असफल भयो (त्रुटि कोड <ph name="ERROR" />)।</translation> <translation id="7088561041432335295">Zip Archiver - फाइल अनुप्रयोगमार्फत जिप फाइलहरू खोल्नुहोस् र प्याक गर्नुहोस्।</translation> <translation id="7088674813905715446">यस यन्त्रलाई प्रशासकद्वारा एक डिप्रोभिजन गरिएको स्थितिमा राखिएको छ। त्यसलाई भर्ती गर्न सक्षम गर्नको लागि, कृपया तपाइँको प्रशासकलाई यन्त्रलाई पेन्डिङ स्थितिमा राख्न लगाउनुहोस्।</translation> @@ -4387,6 +4420,7 @@ <translation id="7241389281993241388">ग्राहक प्रमाणपत्र आयात गर्न कृपया <ph name="TOKEN_NAME" /> मा साइन इन गर्नुहोस्।</translation> <translation id="7241443820034350811">तपाईंको सुरक्षा साँचो सूचीकृत गरिएको छैन भने कम्तीमा ५ सेकेन्डसम्म यसको बटन थिचिरहनुहोस्।</translation> <translation id="7243632151880336635">खाली गरी साइन आउट गर्नुहोस्</translation> +<translation id="7243784282103630670">Linux को स्तरवृद्धि गर्ने क्रममा कुनै त्रुटि भयो। हामी तपाईंको ब्याकअप प्रयोग गरी उक्त कन्टेनर पुनर्स्थापना गर्ने छौँ।</translation> <translation id="7245628041916450754"><ph name="WIDTH" /> गुणा <ph name="HEIGHT" /> (उत्कृष्ट)</translation> <translation id="7246230585855757313">आफ्नो सुरक्षा साँचो पुनः प्रविष्टि गरी फेरि प्रयास गर्नुहोस्</translation> <translation id="7246947237293279874">FTP प्रोक्सी</translation> @@ -4473,6 +4507,7 @@ <translation id="7360233684753165754"><ph name="PRINTER_NAME" /> मा <ph name="PAGE_NUMBER" /> पृष्ठहरू</translation> <translation id="7361297102842600584"><ph name="PLUGIN_NAME" /> सञ्चालन गर्नका लागि दायाँ-क्लिक गर्नुहोस्</translation> <translation id="7363117941401515667"><ph name="HOURS" /> घन्टाअघि अद्यावधिक गरिएको</translation> +<translation id="7364591875953874521">पहुँच मागियो</translation> <translation id="7364796246159120393">फाइल छान्नुहोस्</translation> <translation id="7366415735885268578">कुनै साइट थप्नुहोस्</translation> <translation id="7366909168761621528">ब्राउजिङको डेटा</translation> @@ -4498,6 +4533,7 @@ <translation id="740624631517654988">पप-अप रोकिएको</translation> <translation id="7407430846095439694">आयात गनुहोस् र बाँध्नुहोस्</translation> <translation id="7407504355934009739">धेरैजसो मान्छेहरू यो साइटका सूचनाहरूमाथि रोक लगाउँछन्</translation> +<translation id="740810853557944681">छपाइसम्बन्धी सर्भर थप्नुहोस्</translation> <translation id="7409549334477097887">ज्यादै ठूलो</translation> <translation id="7409836189476010449">फ्ल्यास सञ्चालन गर्नुहोस्</translation> <translation id="7410344089573941623"><ph name="HOST" />लाई तपाइँको क्यामेरा र माइक्रोफोन पहुँच गर्न चाहन्छ की भनेर सोध्नुहोस्।</translation> @@ -4518,6 +4554,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{सबैलाई &नयाँ विन्डोमा खोल्नुहोस्}=1{]&नयाँ विन्डोमा खोल्नुहोस्}other{सबै (#) लाई &नयाँ विन्डोमा खोल्नुहोस्}}</translation> <translation id="7434509671034404296">विकासकर्ता</translation> <translation id="7434635829372401939">आफ्ना सेटिङ सिंक गर्नुहोस्</translation> +<translation id="7434969625063495310">छपाइसम्बन्धी सर्भर थप्न पार्न सकिएन। कृपया सर्भरको कन्फिगुरेसन जाँच गरी फेरि प्रयास गर्नुहोस्।</translation> <translation id="7436921188514130341">ओहो! पुनः नामकरण गर्ने क्रममा कुनै त्रुटि भयो।</translation> <translation id="7438976808740265764">सन् २०२० को डिसेम्बरपछि Flash Player लाई समर्थन गरिने छैन।</translation> <translation id="7441736921018636843">यो सेटिङ परिवर्तन गर्ने प्रयोजनका लागि आफ्नो सिंकसम्बन्धी पासफ्रेज हटाउन <ph name="BEGIN_LINK" />सिंक गर्ने सेवा रिसेट गर्नुहोस्<ph name="END_LINK" /></translation> @@ -4527,8 +4564,10 @@ <translation id="7443806024147773267">आफ्नो Google खातामा साइन इन हुने बित्तिकै आफ्ना पासवर्डमाथिको पहुँच प्राप्त गर्नुहोस्</translation> <translation id="7444983668544353857"><ph name="NETWORKDEVICE" /> लाई अक्षम बनाउनुहोस्</translation> <translation id="7448430327655618736">अनुप्रयोगहरू स्वतः स्थापना गर्नुहोस्</translation> +<translation id="7448625729116931228">कुनै साइटले तपाईंका भर्चुअल रियालिटी चल्ने यन्त्रहरूमाथि पहुँच राख्न चाहेका बेला सोध्नुहोस् (सिफारिस गरिएको)</translation> <translation id="7450761244949417357">अहिले <ph name="ALTERNATIVE_BROWSER_NAME" /> मा खोलिँदै</translation> <translation id="7453008956351770337">यस प्रिन्टरको चयन गरेर तपाईँले निम्न विस्तारलाई तपाईँको प्रिन्टरमा पहुँचको अनुमति दिँदै हुनुहुन्छ:</translation> +<translation id="7454548535253569100">पोर्टलः <ph name="SUBFRAME_SITE" /></translation> <translation id="7456142309650173560">देव</translation> <translation id="7456847797759667638">खुला स्थान...</translation> <translation id="7458168200501453431">Google खोजमा प्रयोग हुने हिज्जे-जाँचकर्ता नै प्रयोग गर्छ। तपाईंले ब्राउजरमा टाइप गर्नुभएको पाठ Google लाई पठाइन्छ।</translation> @@ -4574,6 +4613,7 @@ <translation id="7513029293694390567">भण्डारण गरिएका प्रमाणपत्रहरूको प्रयोग गरेर वेबसाइटहरूमा स्वचालित रूपमा साइन इन गर्नुहोस्। यो सुविधा असक्षम गरिएमा वेबसाइटमा साइन इन गर्नुभन्दा पहिले तपाईंलाई हरेक पटक पुुष्टि गर्न भनिने छ।</translation> <translation id="7514239104543605883">प्रतिलिपि गरी तपाईंको यन्त्रमा टाँस्नुहोस्</translation> <translation id="7514365320538308">डाउनलोड गर्नुहोस्</translation> +<translation id="7520766081042531487">इन्कोग्निटो पोर्टल: <ph name="SUBFRAME_SITE" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7522255036471229694">"Ok Google" भन्नुहोस्</translation> <translation id="7525067979554623046">सिर्जना गर्नुहोस्</translation> @@ -4662,6 +4702,7 @@ <translation id="7652808307838961528">व्यक्तिको विवरण सम्पादन गर्नुहोस्, <ph name="PROFILE_NAME" /></translation> <translation id="765293928828334535">यो वेबसाइटबाट अनुप्रयोग, विस्तार र प्रयोगकर्ताका स्क्रिप्टहरू थप गर्न मिल्दैन</translation> <translation id="7652954539215530680">कुनै PIN सिर्जना गर्नुहोस्</translation> +<translation id="7653295403398566475">कुनै साइटले तपाईंको क्यामेराको स्थितिमाथि पहुँच राख्न वा तपाईंको कोठाको नक्साङ्कन गर्न चाहेका बेला सोध्नुहोस्</translation> <translation id="7654941827281939388">यो खाता यस कम्प्युटरमा पहिले नै प्रयोग भइरहेको छ।</translation> <translation id="7658239707568436148">रद्द गर्नुहोस्</translation> <translation id="7659584679870740384">तपाईंलाई यो यन्त्र प्रयोग गर्ने अधिकार छैन। कृपया साइन-इन अनुमतिको लागि प्रशासकलाई सम्पर्क गर्नुहोस्।</translation> @@ -4814,6 +4855,7 @@ <translation id="783214144752121388">साइटहरूलाई फ्ल्यास प्रयोग गर्न नदिनुहोस् (सिफारिस गरिएको)</translation> <translation id="7833720883933317473">सुरक्षित गरिएका आफू अनुकूलका शब्दहरू यहाँ देखापर्ने छन्</translation> <translation id="7835178595033117206">पुस्तक चिन्ह हटाइयो</translation> +<translation id="7836850009646241041">आफ्नो सुरक्षा साँचो फेरि छोई हेर्नुहोस्</translation> <translation id="7837776265184002579">तपाईंको गृहपृष्ठलाई <ph name="URL" /> मा परिवर्तन गरिएको छ।</translation> <translation id="7839051173341654115">मिडिया हेर्नुहोस्/ब्याकअप गर्नुहोस्</translation> <translation id="7839192898639727867">प्रमाणपत्र विषय कुञ्जी आइडी</translation> @@ -5128,7 +5170,9 @@ <translation id="8260864402787962391">माउस</translation> <translation id="8261378640211443080">तपाइँको विस्तार <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> मा सूची गरिएको छैन र तपाइँलाई जानकार नगरीकन त्यो थपिएको हुन सक्छ।</translation> <translation id="8261506727792406068">मेट्नुहोस्</translation> +<translation id="8263336784344783289">यो समूहको नाम राख्नुहोस्</translation> <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" /> ले तपाइँको माउस कर्सरलाई असक्षम गरेको छ।</translation> +<translation id="8264024885325823677">तपाईंका प्रशासक यो सेटिङ मिलाउनुहुन्छ।</translation> <translation id="8264718194193514834">"<ph name="EXTENSION_NAME" />" ले पूर्ण स्क्रिन ट्रिगर गर्यो।</translation> <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />यो जानकारी यस यन्त्र र यसको प्रयोग (जस्तै ब्याट्रीको स्तर, प्रणाली तथा अनुप्रयोगका क्रियाकलाप र त्रुटिहरू) सम्बन्धी सामान्य जानकारी हो। यो डेटालाई Android मा सुधार गर्ने प्रयोजनका लागि प्रयोग गरिने छ र केही एकत्रित जानकारीले Google का अनुप्रयोग तथा Android का विकासकर्ता जस्ता साझेदारहरूलाई तिनका अनुप्रयोग र उत्पादनहरू अझ राम्रो बनाउन पनि मद्दत गर्ने छ।<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />यो सुविधा निष्क्रिय पार्नुले प्रणालीका अद्यावधिक र सुरक्षा जस्ता अत्यावश्यक सेवाहरूलाई आवश्यक पर्ने जानकारी पठाउने यस यन्त्रको क्षमतामा भने कुनै असर पर्दैन।<ph name="END_PARAGRAPH2" /> @@ -5384,6 +5428,7 @@ <translation id="8650543407998814195">आफ्नो पुरानो प्रोफाइलमाथि अब उप्रान्त पहुँच राख्न नसके तापनि तपाईं अझै पनि यसलाई हटाउन भने सक्नुहुन्छ।</translation> <translation id="8651585100578802546">यो पेज रिलोड गर्न दबाब दिनुहोस्</translation> <translation id="8652400352452647993">प्याक विस्तारसम्बन्धी त्रुटि</translation> +<translation id="8653578191563425126">Crostini का सुरक्षित गरिएको डिस्कको खाली ठाउँ (तपाईं यो कुरा पछि परिवर्तन गर्न सक्नुहुन्छ)।</translation> <translation id="8654151524613148204">यो फाइल तपाइँको कम्प्युटरलाई सञ्चालन गर्नको लागि अत्यन्त ठूलो छ। माफ गर्नुहोस्।</translation> <translation id="8655295600908251630">च्यानल</translation> <translation id="8655319619291175901">ओहो, केही गलत भयो।</translation> @@ -5648,6 +5693,7 @@ <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> दिन अघि सक्रिय</translation> <translation id="8986362086234534611">बिर्सनुहोस्</translation> <translation id="8986494364107987395">Google लाई स्वचालित रूपमा उपयोगको तथ्याङ्कहरू र क्र्यास रिपोर्ट पठाउनुहोस्</translation> +<translation id="8986651757229422279">यस कार्यले <ph name="ORIGIN_NAME" /> ले भण्डारण गरेका सबै डेटा र कुकीका साथै यसले स्थापना गरेको अनुप्रयोग खाली गर्ने छ।</translation> <translation id="8987927404178983737">महिना</translation> <translation id="8991520179165052608">साइटले तपाईंको माइक्रोफोन प्रयोग गर्न सक्छ</translation> <translation id="899403249577094719">नेटस्केप प्रमाणपत्र आधार URL</translation> @@ -5799,6 +5845,7 @@ <translation id="932508678520956232">प्रिन्ट प्रारम्भ गर्न सकेन।</translation> <translation id="93343527085570547">कानुनी कारणहरू देखाई सामग्रीमा परिवर्तन गर्ने अनुरोध गर्न <ph name="BEGIN_LINK1" />कानुनी मद्दतसम्बन्धी पृष्ठ<ph name="END_LINK1" /> मा जानुहोस्। केही खाता तथा प्रणालीसम्बन्धी जानकारी Google मा पठाइन सकिन्छ। हामी प्राविधिक समस्याहरूको समाधान तथा हाम्रा सेवाहरूमा सुधार ल्याउन मद्दत गर्न हाम्रा <ph name="BEGIN_LINK2" />गोपनीयता नीति<ph name="END_LINK2" /> र <ph name="BEGIN_LINK3" />सेवाका सर्तहरू<ph name="END_LINK3" /> को अधीनमा रहेर तपाईंले हामीलाई दिनुभएको जानकारी प्रयोग गर्ने छौँ।</translation> <translation id="93393615658292258">पासवर्ड मात्र</translation> +<translation id="934244546219308557">यो समूहको नाम राख्नुहोस्</translation> <translation id="934503638756687833">आवश्यक परेका खण्डमा यहाँ सूचीबद्ध नगरिएका वस्तुहरूलाई हटाउन पनि सकिने छ। Chrome को गोपनीयतासम्बन्धी श्वेतपत्रमा गई <a href="<ph name="URL" />">अवाञ्छित सफ्टवेयरबाट सुरक्षा</a> बारे थप जान्नुहोस्।</translation> <translation id="935490618240037774">तपाईं आफ्ना सबै यन्त्रहरूमा प्रयोग गर्न सक्नुहोस् भन्नका खातिर तपाईंका पुस्तक चिन्ह, इतिहास, पासवर्ड र अन्य सेटिङहरू तपाईंको Google खातामा सिंक गरिनेछन्।</translation> <translation id="935854577147268200">Smart Lock रहेको फोन परिवर्तन गरियो। Smart Lock अद्यावधिक गर्न आफ्नो पासवर्ड प्रविष्टि गर्नुहोस्। अर्को पटकदेखि, तपाईंको फोनले तपाईंको <ph name="DEVICE_TYPE" />अनलक गर्ने छ। तपाईं सेटिङहरूमा गई Smart Lock निष्क्रिय पार्न सक्नुहुन्छ</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb index a70757293..ee2d7b97 100644 --- a/chrome/app/resources/generated_resources_nl.xtb +++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Voorbeeld wordt geladen</translation> <translation id="1032605640136438169">Lees de nieuwe voorwaarden door</translation> <translation id="103279545524624934">Maak schijfruimte vrij om Android-apps te starten.</translation> -<translation id="1033343386521881354">Er is één printer gevonden op de afdrukserver.</translation> <translation id="1033780634303702874">Toegang krijgen tot je seriële apparaten</translation> <translation id="1034942643314881546">ADB inschakelen om app-illustraties te maken</translation> <translation id="1036348656032585052">Uitschakelen</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Druk op |<ph name="ACCELERATOR" />| om het volledige scherm te sluiten</translation> <translation id="1038168778161626396">Alleen coderen</translation> <translation id="1039337018183941703">Ongeldig of beschadigd bestand</translation> -<translation id="1039850285407663109">Het geselecteerde bestand is onbekend en kan gevaarlijk zijn. Overweeg dit bestand te scannen voordat je het opent.</translation> <translation id="1041175011127912238">Deze pagina reageert niet</translation> <translation id="1041263367839475438">Beschikbare apparaten</translation> <translation id="1042174272890264476">Je computer is ook uitgerust met de RLZ-bibliotheek van <ph name="SHORT_PRODUCT_NAME" />. RLZ wijst een niet-unieke, niet-persoonlijke tag toe om de zoekopdrachten en het gebruik van <ph name="SHORT_PRODUCT_NAME" /> te meten als gevolg van een bepaalde promotiecampagne. Deze labels worden soms weergegeven in Google-zoekopdrachten in <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Dit certificaat vertrouwen voor het identificeren van softwareontwikkelaars</translation> <translation id="1861262398884155592">Deze map is leeg</translation> <translation id="1863182668524159459">Geen seriële poorten gevonden</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> is onbekend. Scan het bestand om het risico te minimaliseren.</translation> <translation id="1864111464094315414">Aanmelden</translation> <translation id="1864400682872660285">Koeler</translation> <translation id="1864454756846565995">USB-C-apparaat (poort aan achterkant)</translation> @@ -4025,7 +4022,6 @@ <translation id="6678717876183468697">Query-URL</translation> <translation id="6680442031740878064">Beschikbaar: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Snelheid</translation> -<translation id="6681301928961274620">Er zijn geen printers gevonden op de afdrukserver.</translation> <translation id="6681668084120808868">Foto nemen</translation> <translation id="6681964764822470072"><ph name="APP_NAME" /> wordt verwijderd</translation> <translation id="668599234725812620">Google Play openen</translation> @@ -5555,7 +5551,6 @@ <translation id="8794025342371547160">Beperkt IP-adres</translation> <translation id="879413103056696865">Terwijl de hotspot is ingeschakeld, doet je <ph name="PHONE_NAME" /> het volgende:</translation> <translation id="8795916974678578410">Nieuw venster</translation> -<translation id="8797086401386164142">Er zijn <ph name="NUM_PRINTERS" /> printers gevonden op de afdrukserver.</translation> <translation id="8797459392481275117">Deze site nooit vertalen</translation> <translation id="8798099450830957504">Standaard</translation> <translation id="8798441408945964110">Naam provider</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb index 2c939fb..c9e7115 100644 --- a/chrome/app/resources/generated_resources_no.xtb +++ b/chrome/app/resources/generated_resources_no.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Laster inn forhåndsvisning</translation> <translation id="1032605640136438169">Les gjennom de nye vilkårene</translation> <translation id="103279545524624934">Frigjør lagringsplass for å starte Android-apper.</translation> -<translation id="1033343386521881354">Fant én skriver på utskriftstjeneren.</translation> <translation id="1033780634303702874">bruke de seriekoblede enhetene dine</translation> <translation id="1034942643314881546">Slår på adb for å skape illustrasjon av apper</translation> <translation id="1036348656032585052">Slå av</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Trykk på |<ph name="ACCELERATOR" />| for å avslutte fullskjerm</translation> <translation id="1038168778161626396">Kun chiffrering</translation> <translation id="1039337018183941703">Ugyldig eller skadet fil.</translation> -<translation id="1039850285407663109">Den valgte filen er ukjent og kan være farlig. Vurder å skanne filen før du åpner den.</translation> <translation id="1041175011127912238">Denne siden svarer ikke</translation> <translation id="1041263367839475438">Tilgjengelige enheter</translation> <translation id="1042174272890264476">Datamaskinen din har <ph name="SHORT_PRODUCT_NAME" />s RLZ-bibliotek innebygget. RLZ tildeler en ikke-unik, ikke-personlig tagg for å måle søk og <ph name="SHORT_PRODUCT_NAME" />-bruk drevet av en bestemt markedsføringskampanje. Disse etikettene vises noen ganger i Google-søk i <ph name="PRODUCT_NAME" />.</translation> @@ -636,7 +634,6 @@ <translation id="1858585891038687145">Stol på dette sertifikatet for identifisering av programvareprodusenter.</translation> <translation id="1861262398884155592">Denne mappen er tom</translation> <translation id="1863182668524159459">Fant ingen serielle porter</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> er ukjent. Skann filen for å minimere risikoen.</translation> <translation id="1864111464094315414">Pålogging</translation> <translation id="1864400682872660285">Kaldere</translation> <translation id="1864454756846565995">USB-C-enhet (porten på baksiden)</translation> @@ -4020,7 +4017,6 @@ <translation id="6678717876183468697">Nettadresse for søk</translation> <translation id="6680442031740878064">Tilgjengelig: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Hastighet</translation> -<translation id="6681301928961274620">Fant ingen skrivere på utskriftstjeneren.</translation> <translation id="6681668084120808868">Ta et bilde</translation> <translation id="6681964764822470072">«<ph name="APP_NAME" />» blir avinstallert.</translation> <translation id="668599234725812620">Åpne Google Play</translation> @@ -5550,7 +5546,6 @@ <translation id="8794025342371547160">Begrenset IP</translation> <translation id="879413103056696865">Når Wi-Fi-sonen er på, kommer <ph name="PHONE_NAME" /> til å</translation> <translation id="8795916974678578410">Nytt vindu</translation> -<translation id="8797086401386164142">Fant <ph name="NUM_PRINTERS" /> skrivere på utskriftstjeneren.</translation> <translation id="8797459392481275117">Oversett aldri dette nettstedet</translation> <translation id="8798099450830957504">Standard</translation> <translation id="8798441408945964110">Leverandørnavn</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb index cde83cf7f..693f1560 100644 --- a/chrome/app/resources/generated_resources_or.xtb +++ b/chrome/app/resources/generated_resources_or.xtb
@@ -33,7 +33,6 @@ <translation id="1036982837258183574">ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନ୍ରୁ ପ୍ରସ୍ଥାନ କରିବାକୁ |<ph name="ACCELERATOR" />| ଦବାନ୍ତୁ</translation> <translation id="1038168778161626396">କେବଳ ଏନ୍ସାଇଫର୍</translation> <translation id="1039337018183941703">ଅବୈଧ କିମ୍ବା ଖରାପ ଫାଇଲ୍</translation> -<translation id="1039850285407663109">ଚୟନିତ ଫାଇଲ୍ଟି ଅଜଣା ଅଟେ ଏବଂ ବିପଦଜନକ ହୋଇପାରେ। ଏହି ଫାଇଲ୍ ଖୋଲିବା ପୂର୍ବରୁ ସ୍କାନ୍ କରିବା ପାଇଁ ବିଚାର କରନ୍ତୁ।</translation> <translation id="1041175011127912238">ଏହି ପୃଷ୍ଠାଟି କାମ କରୁନାହିଁ</translation> <translation id="1041263367839475438">ଉପଲବ୍ଧ ଥିବା ଡିଭାଇସ୍ଗୁଡ଼ିକ</translation> <translation id="1042174272890264476">ଆପଣଙ୍କ କମ୍ପ୍ୟୁଟର୍ରେ ମଧ୍ୟ ପୂର୍ବରୁ<ph name="SHORT_PRODUCT_NAME" />ର RLZ ଲାଇବ୍ରେରୀ ଥାଏ। ଏକ ନିର୍ଦ୍ଧିଷ୍ଟ ପ୍ରଚାର ଅଭିଯାନରେ ବ୍ୟବହାର ହୋଇଥିବା ସନ୍ଧାନ ଏବଂ <ph name="SHORT_PRODUCT_NAME" />ର ବ୍ୟବହାର ମାପିବାକୁ RLZ ଏକ ସାଧାରଣ, ସାର୍ବଜନିକ ଚିହ୍ନିପାରିବା ପରି ଟାଗ୍ ନିରୂପଣ କରେ। Google ସର୍ଚ୍ଚ କ୍ୱେରୀର <ph name="PRODUCT_NAME" />ରେ ଏହି ଲେବଲ୍ଗୁଡ଼ିକ ବେଳେବେଳେ ଦେଖାଯାଏ।</translation> @@ -152,6 +151,7 @@ <translation id="1197979282329025000">ପ୍ରିଣ୍ଟର୍ <ph name="PRINTER_NAME" /> ପାଇଁ ପ୍ରିଣ୍ଟର୍ କ୍ଷମତାକୁ ପୁନଃପ୍ରାପ୍ତ କରିବା ସମୟରେ ଏକ ତ୍ରୁଟି ଘଟିଛି। ପ୍ରିଣ୍ଟର୍କୁ<ph name="CLOUD_PRINT_NAME" /> ସହିତ ପଞ୍ଜିକୃତ କରାଯାଇପାରିଲା ନାହିଁ।</translation> <translation id="119944043368869598">ସମସ୍ତ ଖାଲି କରନ୍ତୁ</translation> <translation id="1201402288615127009">ପରବର୍ତ୍ତୀ</translation> +<translation id="1202556750060561551"><ph name="SITE_GROUP_NAME" /> ଦ୍ୱାରା ଷ୍ଟୋର୍ କରାଯାଇଥିବା ସମସ୍ତ ଡାଟା ଓ କୁକୀ, ଏହାର ଅଧୀନରେ ଥିବା ଯେ କୌଣସି ସାଇଟ୍ ଏବଂ ଏହା ଦ୍ୱାରା ଇନଷ୍ଟଲ୍ କରାଯାଇଥିବା ଆପଗୁଡ଼ିକୁ ଖାଲି କରାଯିବ।</translation> <translation id="1202596434010270079">କିଓସ୍କ ଆପ୍ ଅପ୍ଡେଟ୍ କରାଯାଇଛି। ଦୟାକରି USB ଷ୍ଟିକ୍ କାଢ଼ି ଦିଅନ୍ତୁ।</translation> <translation id="120368089816228251">ସଙ୍ଗୀତର ନୋଟ୍</translation> <translation id="1205489148908752564">ହ୍ୱାଇଟ୍ଲିଷ୍ଟରେ ଥିବା ଉପଯୋଗକର୍ତ୍ତାମାନଙ୍କୁ ପଢ଼ନ୍ତୁ ଏବଂ ପରିବର୍ତ୍ତନ କରନ୍ତୁ</translation> @@ -278,8 +278,10 @@ <translation id="138784436342154190">ଡିଫଲ୍ଟ ଷ୍ଟାର୍ଟଅପ୍ ପୃଷ୍ଠାକୁ ରିଷ୍ଟୋର୍ କରିବେ?</translation> <translation id="1390548061267426325">ନିୟମିତ ଟାବ୍ ଭାବରେ ଖୋଲନ୍ତୁ</translation> <translation id="1393283411312835250">ସୂର୍ଯ୍ୟ ଏବଂ ବାଦଲ</translation> +<translation id="1393787139683794508">ଏହା <ph name="ORIGIN_NAME" /> ଦ୍ୱାରା ଷ୍ଟୋର୍ କରାଯାଇଥିବା ସମସ୍ତ ଡାଟା ଏବଂ କୁକୀକୁ ଖାଲି କରିଦେବ।</translation> <translation id="1395730723686586365">ଅପ୍ଡେଟର୍ ଆରମ୍ଭ ହୋଇଛି</translation> <translation id="1396139853388185343">ପ୍ରିଣ୍ଟର୍ ସେଟିଂରେ ତ୍ରୁଟି</translation> +<translation id="1396259464226642517">ଏହି ଫଳାଫଳ ଅପ୍ରତ୍ୟାଶିତ ଥିଲା କି? <ph name="BEGIN_LINK" />ମତାମତ ପଠାନ୍ତୁ<ph name="END_LINK" /></translation> <translation id="1396963298126346194">ଆପଣ ଲେଖିଥିବା ଉପଯୋଗକର୍ତ୍ତାନାମ ଏବଂ ପାସ୍ୱର୍ଡ ମେଳ ଖାଉନାହିଁ</translation> <translation id="1397500194120344683">କୌଣସି ଉପଯୁକ୍ତ ଡିଭାଇସ୍ ନାହିଁ। <ph name="LINK_BEGIN" />ଅଧିକ ଜାଣନ୍ତୁ<ph name="LINK_END" /></translation> <translation id="1398853756734560583">ସର୍ବାଧିକ କରନ୍ତୁ</translation> @@ -550,6 +552,7 @@ <translation id="1758018619400202187">EAP-TLS</translation> <translation id="17584710573359123">Chrome ୱେବ୍ ଷ୍ଟୋର୍ରେ ଦେଖନ୍ତୁ</translation> <translation id="176193854664720708">ଟିପଚିହ୍ନ ସେନ୍ସର୍ ପାୱାର୍ ବଟନ୍ରେ ଅଛି। ଏହାକୁ କୌଣସି ଆଙ୍ଗୁଳିରେ ହାଲୁକା ଭାବରେ ସ୍ପର୍ଶ କରନ୍ତୁ।</translation> +<translation id="176273057789108760">ସୁରକ୍ଷା ଅନୁମୋଦନ ପାଇଁ ଆପଣଙ୍କର ସଂସ୍ଥା ଡ୍ରାଗ୍ କରାଯାଇଥିବା ଫାଇଲଗୁଡ଼ିକୁ ସ୍କାନ୍ କରୁଛି।</translation> <translation id="1763046204212875858">ଆପ୍ଲିକେସନ୍ ସର୍ଟକଟ୍ ତିଆରି କରନ୍ତୁ</translation> <translation id="1763108912552529023">ଏକ୍ସପ୍ଲୋର୍ କରିବା ଜାରି ରଖନ୍ତୁ</translation> <translation id="1763808908432309942">ଏକ ନୂଆ ଟାବ୍ରେ ଖୋଲେ</translation> @@ -588,6 +591,7 @@ <translation id="1805472176602625930">ସୁରକ୍ଷା କୀ’ରେ ଥିବା ବଟନ୍କୁ ଦବାନ୍ତୁ</translation> <translation id="1805738995123446102">ପୃଷ୍ଠପଟରେ ଥିବା ଟାବ୍ ଆପଣଙ୍କର ମାଇକ୍ରୋଫୋନ୍ ବ୍ୟବହାର କରୁଛି।</translation> <translation id="1805822111539868586">ଦୃଶ୍ୟଗୁଡ଼ିକ ନିରୀକ୍ଷଣ କରନ୍ତୁ</translation> +<translation id="1805888043020974594">ପ୍ରିଣ୍ଟ ସର୍ଭର୍</translation> <translation id="1805967612549112634">ପିନ୍ ସୁନିଶ୍ଚିତ କରନ୍ତୁ</translation> <translation id="1809734401532861917"><ph name="USER_EMAIL_ADDRESS" />ରେ ମୋର ବୁକ୍ମାର୍କ, ଇତିବୃତ୍ତି, ପାସ୍ୱର୍ଡ, ଏବଂ ଆନ୍ୟାନ୍ୟ ସେଟିଂସ୍କୁ ଯୋଗ କରନ୍ତୁ</translation> <translation id="1813278315230285598">ସେବା</translation> @@ -629,7 +633,6 @@ <translation id="1858585891038687145">ସଫ୍ଟୱେୟାର୍ ନିର୍ମାତା ଚିହ୍ନଟ କରିବା ପାଇଁ ଏହି ସାର୍ଟିଫିକେଟ୍ ଉପରେ ବିଶ୍ଵାସ ରଖନ୍ତୁ</translation> <translation id="1861262398884155592">ଏହି ଫୋଲ୍ଡର୍ ଖାଲି ଅଟେ</translation> <translation id="1863182668524159459">କୌଣସି କ୍ରମିକ ପୋର୍ଟଗୁଡ଼ିକ ମିଳିଲା ନାହିଁ</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> ଅଜଣା ଅଟେ। ବିପଦ ହ୍ରାସ କରିବା ପାଇଁ ଫାଇଲ୍କୁ ସ୍କାନ୍ କରନ୍ତୁ।</translation> <translation id="1864111464094315414">ଲଗ୍ଇନ୍</translation> <translation id="1864400682872660285">ଶୀତଳ</translation> <translation id="1864454756846565995">USB-C ଡିଭାଇସ୍ (ପଛ ପୋର୍ଟ)</translation> @@ -736,6 +739,7 @@ <translation id="202352106777823113">ଡାଉନ୍ଲୋଡ୍ ଅଧିକ ସମୟ ନେଉଥିଲା ଏବଂ ନେଟ୍ୱାର୍କ ଦ୍ୱାରା ବନ୍ଦ କରାଯାଇଥିଲା।</translation> <translation id="2025632980034333559"><ph name="APP_NAME" /> କ୍ରାସ୍ ହୋଇଯାଇଛି। ଏକ୍ସଟେନ୍ସନ୍କୁ ରିଲୋଡ୍ କରିବା ପାଇଁ ଏହି ବେଲୁନ୍ରେ କ୍ଲିକ୍ କରନ୍ତୁ।</translation> <translation id="2025891858974379949">ଅସୁରକ୍ଷିତ ବିଷୟବସ୍ତୁ</translation> +<translation id="202918510990975568">ସୁରକ୍ଷା କନଫିଗର୍ କରିବା ଏବଂ ସାଇନ୍-ଇନ୍ କରିବା ପାଇଁ ଆପଣଙ୍କର ପାସୱାର୍ଡ ଲେଖନ୍ତୁ</translation> <translation id="2034346955588403444">ଅନ୍ୟ ଏକ ୱାଇଫାଇ ନେଟ୍ୱର୍କ ଯୋଗ କରନ୍ତୁ</translation> <translation id="203574396658008164">ଲକ୍ ସ୍କ୍ରିନ୍ରୁ ନୋଟ୍-ନେବାକୁ ସକ୍ଷମ କରନ୍ତୁ</translation> <translation id="2037445849770872822">ଏହି Google ଆକାଉଣ୍ଟ ପାଇଁ ନିରୀକ୍ଷଣ ସେଟ୍ ଅପ୍ କରାଯାଇଛି। ଅଧିକ ବାପାମାଙ୍କ ଦ୍ଵାରା ନିୟନ୍ତ୍ରଣ ସେଟ୍ ଅପ୍ କରିବାକୁ, ଜାରି ବାଛନ୍ତୁ। @@ -887,6 +891,7 @@ <translation id="2224471211857467033">ଆକ୍ସେସିବିଲିଟୀ ଇଭେଣ୍ଟଗୁଡ଼ିକ</translation> <translation id="2224551243087462610">ଫୋଲ୍ଡର ନାମ ସଂପାଦନ କରନ୍ତୁ</translation> <translation id="2226449515541314767">ଏହି ସାଇଟ୍ MIDI ଡିଭାଇସ୍ଗୁଡ଼ିକର ପୂର୍ଣ୍ଣ ନିୟନ୍ତ୍ରଣରୁ ଅବରୋଧ କରାଯାଇଛି।</translation> +<translation id="222704500187107962">ଆପଣ ବର୍ତ୍ତମାନର ଇନକଗ୍ନିଟୋ ଅବଧିରୁ ବାହାରିବା ପରେ ଏହି ବ୍ୟତିକ୍ରମକୁ ସ୍ୱଚାଳିତ ଭାବେ କାଢ଼ି ଦିଆଯିବ</translation> <translation id="2227179592712503583">ପରାମର୍ଶ କାଢ଼ନ୍ତୁ</translation> <translation id="2229161054156947610">ଆଉ ଅଧିକ 1 ଘଣ୍ଟା ସମୟ ଅଛି</translation> <translation id="222931766245975952">ଫାଇଲ୍ ଛୋଟ କରାଗଲା</translation> @@ -940,6 +945,7 @@ <translation id="2300383962156589922"><ph name="APP_NAME" />କୁ କଷ୍ଟମାଇଜ୍ କରି ନିୟନ୍ତ୍ରଣ କରନ୍ତୁ</translation> <translation id="2301382460326681002">ଏକ୍ସଟେନ୍ସନ୍ ରୁଟ୍ ଡିରେକ୍ଟୋରୀ ଅବୈଧ ଅଟେ।</translation> <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" ଅତିରିକ୍ତ ଅନୁମତିଗୁଡ଼ିକ ଅନୁରୋଧ କରିଛନ୍ତି।</translation> +<translation id="23055578400314116">ଏକ ଉପଯୋଗକର୍ତ୍ତାନାମ ଚୟନ କରନ୍ତୁ</translation> <translation id="2307462900900812319">ନେଟ୍ୱର୍କ କନ୍ଫିଗର୍ କରନ୍ତୁ</translation> <translation id="230927227160767054">ଏହି ପୃଷ୍ଠା ଏକ ସେବା ହ୍ୟାଣ୍ଡଲର୍ ଇନ୍ଷ୍ଟଲ୍ କରିବାକୁ ଚାହୁଁଛି।</translation> <translation id="2309620859903500144">ଏହି ସାଇଟ୍କୁ ଆପଣଙ୍କ ମୋସନ୍ ଏବଂ ଲାଇଟ୍ ସେନ୍ସର୍ ଆକ୍ସେସ୍ କରିବା ପାଇଁ ବ୍ଲକ୍ କରାଯାଇଛି।</translation> @@ -979,6 +985,7 @@ <translation id="2353297238722298836">କ୍ୟାମେରା ଏବଂ ମାଇକ୍ରୋଫୋନ୍ ବ୍ୟବହାର କରିପାରିବେ</translation> <translation id="2356070529366658676">ପଚାରନ୍ତୁ</translation> <translation id="2357330829548294574"><ph name="USER_NAME" />କୁ କାଢ଼ି ଦିଅନ୍ତୁ</translation> +<translation id="235798134753548762">ଆପଣଙ୍କର ଆପ୍ସ, ସେଟିଂସ୍ ଏବଂ ୱାଇ-ଫାଇ ପସନ୍ଦଗୁଡ଼ିକ ସିଙ୍କ୍ କରାଯିବ। ପରିବର୍ତ୍ତନ କରିବା ପାଇଁ, ସେଟ୍ ଅପ୍ କରିବା ପରେ ଯେ କୌଣସି ସମୟରେ ସେଟିଂସକୁ ଯାଆନ୍ତୁ।</translation> <translation id="2359345697448000899">ଟୁଲ୍ସ ମେନୁରେ ଥିବା ଏକ୍ସଟେନ୍ସନ୍ କ୍ଲିକ୍ କରି ନିଜର ଏକ୍ସଟେନ୍ସନ୍ଗୁଡ଼ିକ ପରିଚାଳନା କରନ୍ତୁ।</translation> <translation id="2359808026110333948">ଜାରି ରଖନ୍ତୁ</translation> <translation id="236117173274098341">ଅପ୍ଟିମାଇଜ୍ କରନ୍ତୁ</translation> @@ -1030,6 +1037,7 @@ <translation id="2436720498717686157">ଆପଣଙ୍କର ସଂସ୍ଥା ବର୍ତ୍ତମାନ ଏହି ଡିଭାଇସ୍ରେ ଏକ ଅପ୍ଡେଟ୍ ଆବଶ୍ୟକ କରୁଛି</translation> <translation id="2439545803278355377">ଆପଣଙ୍କର ନୂଆ ପିନ୍ ଲେଖନ୍ତୁ। ଗୋଟିଏ ପିନ୍ ଅତିକମ୍ରେ ଚାରି ଅକ୍ଷର ବିଶିଷ୍ଟ ଲମ୍ବା ହେବା ଉଚିତ ଏବଂ ସେଥିରେ ଅକ୍ଷର, ସଂଖ୍ୟା ଏବଂ ଅନ୍ୟ ବର୍ଣ୍ଣ ରହିପାରୁଥିବ।</translation> <translation id="2440604414813129000">ଉ&ତ୍ସ ଦର୍ଶନ୍ କରନ୍ତୁ</translation> +<translation id="244231003699905658">ଅବୈଧ ଠିକଣା। ଦୟାକରି ଠିକଣା ଯାଞ୍ଚ କରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation> <translation id="2442916515643169563">ଟେକ୍ସଟ ଶାଡୋ</translation> <translation id="2445081178310039857">ଏକ୍ସଟେନ୍ସନ୍ ମୂଳ ଡିରେକ୍ଟୋରୀ ଆବଶ୍ୟକ ଅଟେ।</translation> <translation id="2445484935443597917">ଗୋଟିଏ ନୂତନ ପ୍ରୋଫାଇଲ୍ ତିଆରି କରନ୍ତୁ</translation> @@ -1084,6 +1092,7 @@ <translation id="2501278716633472235">ଫେରନ୍ତୁ</translation> <translation id="2501797496290880632">ଏକ ସର୍ଟକଟ୍ ଟାଇପ୍ କରନ୍ତୁ</translation> <translation id="2502441965851148920">ସ୍ୱଚାଳିତ ଅପ୍ଡେଟ୍ଗୁଡ଼ିକ ସକ୍ଷମ ଅଛି ଆପଣଙ୍କର ଡିଭାଇସ୍ ବ୍ୟବସ୍ଥାପକଙ୍କ ଦ୍ଵାରା ମେନୁଆଲ୍ ଅପଡେଟ୍ଗୁଡ଼ିକ ଅକ୍ଷମ କରାଯାଇଛି।</translation> +<translation id="2502719318159902502">ସମ୍ପୂର୍ଣ୍ଣ ଆକ୍ସେସ୍</translation> <translation id="2505127913256479918">ଏହି ପର୍ଯ୍ୟବେକ୍ଷିତ ଆକାଉଣ୍ଟ ଖୁବ୍ ଶୀଘ୍ର କାଢ଼ି ଦିଆଯିବ।</translation> <translation id="2505324914378689427">{SCREEN_INDEX,plural, =1{ସ୍କ୍ରିନ୍ #}other{ସ୍କ୍ରିନ୍ #}}</translation> <translation id="2505402373176859469"><ph name="TOTAL_SIZE" /> ର <ph name="RECEIVED_AMOUNT" /></translation> @@ -1356,6 +1365,7 @@ <translation id="2865919525181940183">ବର୍ତ୍ତମାନ ସ୍କ୍ରିନ୍ରେ ଥିବା ପ୍ରୋଗ୍ରାମ୍ଗୁଡ଼ିକର ସ୍କ୍ରିନ୍ସଟ୍</translation> <translation id="286674810810214575">ପାୱାର ସୋର୍ସଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରାଯାଉଛି...</translation> <translation id="2867768963760577682">ପିନ୍ କରାଯାଇଥିବା ଟାବ୍ ଭାବରେ ଖୋଲନ୍ତୁ</translation> +<translation id="2868184003987917410">ଆପଣଙ୍କର ଭର୍ଚୁଆଲ୍ ରିଆଲିଟୀ ଡିଭାଇସଗୁଡ଼ିକୁ/ଡାଟାକୁ ଆକ୍ସେସ୍ କରିବା ପାଇଁ ସାଇଟଗୁଡ଼ିକୁ ଅନୁମତି ଦିଅନ୍ତୁ ନାହିଁ</translation> <translation id="2868746137289129307">ଏହି ଏକ୍ସଟେନ୍ସନ୍ ପୁରୁଣା ହୋଇଯାଇଛି ଏବଂ ଏଣ୍ଟର୍ପ୍ରାଇଜ୍ ନୀତି ଦ୍ଵାରା ଅକ୍ଷମ କରାଯାଇଛି। ଯେତେବେଳେ ଏକ ନୂତନ ସଂସ୍କରଣ ଉପଲବ୍ଧ ହେବ ଏହା ସ୍ୱଚାଳିତ ଭାବେ ସକ୍ଷମ ହୋଇପାରେ।</translation> <translation id="2870560284913253234">ସାଇଟ୍</translation> <translation id="2870909136778269686">ଅପ୍ଡେଟ୍ କରାଯାଉଛି…</translation> @@ -1401,6 +1411,7 @@ <translation id="2916745397441987255">ଏକ୍ସଟେନ୍ସନ୍ ଖୋଜନ୍ତୁ</translation> <translation id="2921081876747860777">ଦୟାକରି ଆପଣଙ୍କର ସ୍ଥାନୀୟ ଡାଟାକୁ ସୁରକ୍ଷିତ ରଖିବାକୁ ଏକ ପାସ୍ୱର୍ଡ ତିଆରି କରନ୍ତୁ।</translation> <translation id="2923234477033317484">ଏହି ଆକାଉଣ୍ଟ କାଢ଼ନ୍ତୁ</translation> +<translation id="2925054096976782003">ସୁରକ୍ଷା ଅନୁମୋଦନ ପାଇଁ ଆପଣଙ୍କର ସଂସ୍ଥା ପେଷ୍ଟ କରାଯାଇଥିବା ଡାଟାକୁ ସ୍କାନ୍ କରୁଛି।</translation> <translation id="2926085873880284723">ଡିଫଲ୍ଟ ସର୍ଟକଟ୍ଗୁଡ଼ିକ ପୁନଃସ୍ଥାପନ କରନ୍ତୁ</translation> <translation id="2927017729816812676">କେଚ୍ ଷ୍ଟୋରେଜ୍</translation> <translation id="2931157624143513983">ପ୍ରିଣ୍ଟଯୋଗ୍ୟ ଏରିଆ ଅନୁସାରେ ଫିଟ୍ କରନ୍ତୁ</translation> @@ -1424,6 +1435,7 @@ <translation id="2956070239128776395">ଗୋଷ୍ଠୀରେ ବିଭାଗ ଅଛି: <ph name="ERROR_LINE" /></translation> <translation id="2957117904572187936">କୌଣସି ସାଇଟ୍କୁ ଆପଣଙ୍କ ଡିଭାଇସ୍ରେ ଫାଇଲ୍ କିମ୍ବା ଫୋଲ୍ଡର୍ଗୁଡ଼ିକୁ ସମ୍ପାଦନ କରିବାକୁ ଅନୁମତି ଦିଅନ୍ତୁ ନାହିଁ</translation> <translation id="2958721676848865875">ପ୍ୟାକ୍ ଏକ୍ସଟେନ୍ସନ୍ ଚେତାବନୀ</translation> +<translation id="2959127025785722291">କିଛି ତ୍ରୁଟି ହୋଇଗଲା। ସ୍କାନ୍ କରିବା ସମ୍ପୂର୍ଣ୍ଣ ହୋଇପାରିଲା ନାହିଁ। ଦୟାକରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation> <translation id="2959842337402130152">ଷ୍ଟୋରେଜ୍ ସ୍ଥାନ ଅଭାବ ଯୋଗୁଁ ରିଷ୍ଟୋର୍ କରାଯାଇ ପାରିବ ନାହିଁ। ଡିଭାଇସ୍ରୁ <ph name="SPACE_REQUIRED" /> ଖାଲି କରନ୍ତୁ ଏବଂ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation> <translation id="296026337010986570">ସମାପ୍ତ ହୋଇଛି! କ୍ଷତିକାରକ ସଫ୍ଟୱେର୍ କଢ଼ାଗଲା। ପୁଣି ଏକ୍ସଟେନ୍ସନ୍ ଚାଲୁ କରିବାକୁ <a href="chrome://extensions">Extensions</a>କୁ ଯାଆନ୍ତୁ।</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" /> (ଏକ୍ସଟେନ୍ସନ୍ ଦିଆଯାଇଛି)</translation> @@ -1681,6 +1693,7 @@ <translation id="3348038390189153836">କାଢ଼ିବା ଯୋଗ୍ୟ ଡିଭାଇସ୍ ଚିହ୍ନଟ ହୋଇଛି</translation> <translation id="3349933790966648062">ମେମୋରୀ ଫୁଟ୍ପ୍ରିଣ୍ଟ</translation> <translation id="3350117557200012647">ପେୟାରିଙ୍ଗ ମୋଡ୍କୁ ଯାଆନ୍ତୁ</translation> +<translation id="3350244554415289209">କୌଣସି ସାଇଟ୍ ଆପଣଙ୍କ କ୍ୟାମେରାର ସ୍ଥିତିକୁ ଆକ୍ସେସ୍ କରିବାକୁ କିମ୍ବା ଆପଣଙ୍କ ରୁମକୁ ମ୍ୟାପ୍ କରିବାକୁ ଚାହିଁଲେ ତାହାକୁ ପଚାରନ୍ତୁ (ସୁପାରିଶ କରାଯାଇଛି)</translation> <translation id="3355936511340229503">ସଂଯୋଗରେ ତ୍ରୁଟି</translation> <translation id="3356580349448036450">ସମ୍ପୂର୍ଣ୍ଣ ହୋଇଛି</translation> <translation id="3359256513598016054">ସାର୍ଟିଫିକେଟ୍ ନୀତି ପ୍ରତିବନ୍ଧଗୁଡ଼ିକ</translation> @@ -1744,6 +1757,7 @@ <translation id="3448492834076427715">ଆକାଉଣ୍ଟ ଅପ୍ଡେଟ୍ କରନ୍ତୁ</translation> <translation id="3449839693241009168"><ph name="EXTENSION_NAME" />କୁ ନିର୍ଦ୍ଦେଶ ପଠାଇବାକୁ <ph name="SEARCH_KEY" /> ଦବାନ୍ତୁ</translation> <translation id="3450157232394774192">ନିଷ୍କ୍ରିୟ ସ୍ଥିତି ଦଖଲ ଶତକଡ଼ା</translation> +<translation id="3451332697983754369">ମୋର <ph name="DEVICE_TYPE" /> ସିଙ୍କ୍ କରନ୍ତୁ</translation> <translation id="3453612417627951340">ପ୍ରାଧିକରଣ ଆବଶ୍ୟକ ଅଟେ</translation> <translation id="3454157711543303649">ସକ୍ରିୟକରଣ ସମ୍ପୂର୍ଣ୍ଣ ହୋଇଛି</translation> <translation id="3454213325559396544">ଏହି <ph name="DEVICE_TYPE" /> ପାଇଁ ଏହା ଶେଷ ସ୍ୱଚାଳିତ ସଫ୍ଟୱେୟାର୍ ଏବଂ ସୁରକ୍ଷା ଅପ୍ଡେଟ୍ ଅଟେ ଭବିଷ୍ୟତର ଅପ୍ଡେଟ୍ଗୁଡ଼ିକ ପାଇବା ପାଇଁ, ଗୋଟିଏ ନୂଆ ମଡେଲ୍କୁ ଅପ୍ଗ୍ରେଡ୍ କରନ୍ତୁ।</translation> @@ -1766,6 +1780,7 @@ <translation id="347785443197175480"><ph name="HOST" />କୁ ଆପଣଙ୍କର କ୍ୟାମେରା ଏବଂ ମାଇକ୍ରୋଫୋନ୍ ଆକ୍ସେସ୍ କରିବାକୁ ଅନୁମତି ଦେବା ଜାରି ରଖନ୍ତୁ</translation> <translation id="3478685642445675458">ଜଣେ ବ୍ୟକ୍ତିଙ୍କୁ କାଢ଼ି ଦେବା ପୂର୍ବରୁ ଦୟାକରି ଆପଣଙ୍କର ପ୍ରୋଫାଇଲ୍କୁ ଅନ୍ଲକ୍ କରନ୍ତୁ।</translation> <translation id="3479552764303398839">ଏବେ ନୁହେଁ</translation> +<translation id="3479685872808224578">ପ୍ରିଣ୍ଟ ସର୍ଭର୍ ଚିହ୍ନଟ କରାଯାଇପାରିଲା ନାହିଁ। ଦୟାକରି ଠିକଣା ଯାଞ୍ଚ କରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation> <translation id="3481268647794498892"><ph name="ALTERNATIVE_BROWSER_NAME" />ରେ <ph name="COUNTDOWN_SECONDS" />ରେ ଖୋଲୁଛି</translation> <translation id="3484273680291419129">କ୍ଷତିକାରକ ସଫ୍ଟୱେର୍ କାଢୁଛି...</translation> <translation id="3484869148456018791">ନୂଆ ସାର୍ଟିଫିକେଟ୍ ପ୍ରାପ୍ତ କରନ୍ତୁ</translation> @@ -1881,6 +1896,7 @@ <translation id="3630132874740063857">ଆପଣଙ୍କର ଫୋନ୍</translation> <translation id="3630995161997703415">ଯେକୌଣସି ସମୟରେ ଏହାକୁ ବ୍ୟବହାର କରିବାପାଇଁ ଏହି ସାଇଟ୍କୁ ଆପଣଙ୍କ ସେଲ୍ଫରେ ଯୋଗ କରନ୍ତୁ</translation> <translation id="3634507049637220048"><ph name="NETWORK_COUNT" />ଟିର <ph name="NETWORK_INDEX" /> ନେଟ୍ୱାର୍କ, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" /> ଆପଣଙ୍କ ଆଡ୍ମିନିଷ୍ଟ୍ରେଟର୍ଙ୍କ ଦ୍ୱାରା ପରିଚାଳିତ, ବିବରଣୀ</translation> +<translation id="3635241501480133979">ଏହି ଡାଟା ଆପଣଙ୍କ ସଂସ୍ଥାର ସୁରକ୍ଷା ନୀତିଗୁଡ଼ିକର ଉଲ୍ଲଙ୍ଘନ କରୁଛି ଏବଂ ଏହାକୁ ଡ୍ରପ୍ କରାଯାଇପାରିବ ନାହିଁ।</translation> <translation id="3635353578505343390">Googleକୁ ମତାମତ ପଠାନ୍ତୁ</translation> <translation id="3636096452488277381">ହାୱଡି, <ph name="USER_GIVEN_NAME" />।</translation> <translation id="3636766455281737684"><ph name="PERCENTAGE" />% - <ph name="TIME" /> ବାକି ଅଛି</translation> @@ -1915,6 +1931,7 @@ <translation id="3677657024345889897">ସର୍ବାଧିକ ନିଃଶଦ୍ଦତା</translation> <translation id="3677911431265050325">ମୋବାଇଲ୍ ସାଇଟ୍ ପାଇଁ ଅନୁରୋଧ କରନ୍ତୁ</translation> <translation id="3678156199662914018">ପରିବର୍ଦ୍ଧନ: <ph name="EXTENSION_NAME" /></translation> +<translation id="3678613690490567106">ସମସ୍ତ ଡିଭାଇସରେ ଏକ ବ୍ୟକ୍ତିଗତକୃତ ଅନୁଭୂତି ପାଇଁ ସିଙ୍କ୍ କରନ୍ତୁ</translation> <translation id="3681311097828166361">ଆପଣଙ୍କର ମତାମତ ପାଇଁ ଧନ୍ୟବାଦ। ଆପଣ ବର୍ତ୍ତମାନ ଅଫ୍ଲାଇନ୍ ଅଛନ୍ତି, ଏବଂ ଆପଣଙ୍କ ରିପୋର୍ଟ ପରେ ପଠାଯିବ।</translation> <translation id="3682824389861648626">ଗତିଶୀଳ ଥ୍ରେସ୍ହୋଲ୍ଡ</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> ସ୍କ୍ରିନ୍ ସେୟାରିଂ ଅନୁରୋଧ</translation> @@ -2424,6 +2441,7 @@ <translation id="4400632832271803360">ଶୀର୍ଷ-ଧାଡିରେ ଥିବା କୀଗୁଡ଼ିକର ଆଚରଣ ସ୍ୱିଚ୍ କରିବାକୁ ଲଞ୍ଚର୍ କୀ ଧରି ରଖନ୍ତୁ</translation> <translation id="4400963414856942668">ଏକ ଟାବ୍କୁ ବୁକ୍ମାର୍କ କରିବା ପାଇଁ ଆପଣ ତାରା ଚିହ୍ନରେ କ୍ଲିକ୍ କରିପାରିବେ</translation> <translation id="4403775189117163360">ଏକ ଭିନ୍ନ ଫୋଲ୍ଡର୍ ବାଛନ୍ତୁ</translation> +<translation id="4404136731284211429">ପୁଣି ସ୍କାନ୍ କରନ୍ତୁ</translation> <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation> <translation id="4408599188496843485">ସହାୟତା</translation> <translation id="4409697491990005945">ମାର୍ଜିନ୍</translation> @@ -2442,6 +2460,7 @@ <translation id="4421932782753506458">ଫ୍ଲୁଫି</translation> <translation id="4423376891418188461">ସେଟିଂସ୍ ରିଷ୍ଟୋର୍ କରନ୍ତୁ</translation> <translation id="442397852638519243"><ph name="USER_NAME" />, ଆପଣ ଆପଣଙ୍କର ପାସ୍ୱର୍ଡ ପରିବର୍ତ୍ତନ କରନ୍ତୁ ବୋଲି ଆପଣଙ୍କର ବ୍ୟବସ୍ଥାପକ ଚାହୁଁଛନ୍ତି।</translation> +<translation id="4429030830601238961">ଏହି ଡାଟା ଆପଣଙ୍କ ସଂସ୍ଥାର ସୁରକ୍ଷା ନୀତିଗୁଡ଼ିକର ଉଲ୍ଲଙ୍ଘନ କରୁଛି ଏବଂ ଏହାକୁ ପେଷ୍ଟ କରାଯାଇପାରିବ ନାହିଁ।</translation> <translation id="4430019312045809116">ଭଲ୍ୟୁମ୍</translation> <translation id="4430369329743628066">ବୁକ୍ମାର୍କ ଯୋଡାଗଲା</translation> <translation id="4434045419905280838">ପପ୍-ଅପ୍ ଏବଂ ରିଡାଇରେକ୍ଟ</translation> @@ -2488,9 +2507,11 @@ <translation id="4501530680793980440">କାଢ଼ିଦେବା ସୁନିଶ୍ଚିତ କରନ୍ତୁ</translation> <translation id="4502423230170890588">ଏହି ଡିଭାଇସ୍ରୁ କାଢ଼ି ଦିଅନ୍ତୁ</translation> <translation id="4504940961672722399">ଏହି ଆଇକନ୍ ଉପରେ କ୍ଲିକ୍ କରି କିମ୍ବା<ph name="EXTENSION_SHORTCUT" /> ଦବାଇ ଏହି ଏକ୍ସଟେନ୍ସନ୍କୁ ବ୍ୟବହାର କରନ୍ତୁ।</translation> +<translation id="4507164039066603071">ଆପଣଙ୍କ କ୍ୟାମେରାର ସ୍ଥିତିକୁ ଆକ୍ସେସ୍ କରିବା କିମ୍ବା ଆପଣଙ୍କର ରୁମକୁ ମ୍ୟାପ୍ କରିବା ପାଇଁ ସାଇଟଗୁଡ଼ିକୁ ଅନୁମତି ଦିଅନ୍ତୁ ନାହିଁ</translation> <translation id="4508051413094283164">ସବୁ ଇନ୍କଗ୍ନିଟୋ ୱିଣ୍ଡୋରେ ଖୋଲନ୍ତୁ</translation> <translation id="4508265954913339219">ସକ୍ରିୟକରଣ ବିଫଳ ହେଲା</translation> <translation id="4508765956121923607">ଉ&ତ୍ସ ଦର୍ଶନ କରନ୍ତୁ</translation> +<translation id="4510614391273086606">Linux ଫାଇଲ୍ ଏବଂ ଆପଗୁଡ଼ିକୁ ସେଗୁଡ଼ିକର ବ୍ୟାକଅପ୍ କରାଯାଇଥିବା ସ୍ଥିତିରେ ରିଷ୍ଟୋର୍ କରାଯାଉଛି।</translation> <translation id="451407183922382411"><ph name="COMPANY_NAME" /> ଦ୍ୱାରା ସମର୍ଥିତ</translation> <translation id="4514610446763173167">ଭିଡିଓକୁ ଚଲାଇବା କିମ୍ବା ବିରତ କରିବା ପାଇଁ ଟୋଗଲ୍ କରନ୍ତୁ</translation> <translation id="451515744433878153">କାଢ଼ିଦିଅନ୍ତୁ</translation> @@ -2688,6 +2709,7 @@ <translation id="480990236307250886">ମୂଳପୃଷ୍ଠାଟି ଖୋଲନ୍ତୁ</translation> <translation id="4813136279048157860">ମୋ ଛବି</translation> <translation id="4813512666221746211">ନେଟ୍ୱର୍କ ତ୍ରୁଟି</translation> +<translation id="4814378367953456825">ଏହି ଟିପଚିହ୍ନ ପାଇଁ ଏକ ନାମ ଲେଖନ୍ତୁ</translation> <translation id="4820236583224459650">ସକ୍ରିୟ ଟିକେଟ୍ ଭାବେ ସେଟ୍ କରନ୍ତୁ</translation> <translation id="4821935166599369261">&ପ୍ରୋଫାଇଲିଂ ସକ୍ଷମ କରାଗଲା</translation> <translation id="4823484602432206655">ଉପଯୋଗକର୍ତ୍ତା ଏବଂ ଡିଭାଇସ୍ ସେଟିଂସ୍ ପଢ଼ନ୍ତୁ ଏବଂ ପରିବର୍ତ୍ତନ କରନ୍ତୁ</translation> @@ -2734,6 +2756,7 @@ <translation id="4876895919560854374">ସ୍କ୍ରିନ୍କୁ ଲକ୍ ଏବଂ ଅନ୍ଲକ୍ କରନ୍ତୁ</translation> <translation id="4877276003880815204">ଉପାଦାନଗୁଡ଼ିକ ଯାଞ୍ଚ କରନ୍ତୁ</translation> <translation id="4878653975845355462">ଆପଣଙ୍କର ଆଡ୍ମିନିଷ୍ଟ୍ରେଟର୍ଙ୍କ ଦ୍ୱାରା କଷ୍ଟମ୍ ପୃଷ୍ଠପଟଗୁଡ଼ିକ ବନ୍ଦ କରାଯାଇଛି</translation> +<translation id="4878718769565915065">ଏହି ସୁରକ୍ଷା କୀରେ ଏକ ଟିପଚିହ୍ନ ଯୋଗ କରିବା ବିଫଳ ହୋଇଛି</translation> <translation id="4879491255372875719">ସ୍ୱଚାଳିତ (ଡିଫଲ୍ଟ)</translation> <translation id="4880328057631981605">ଆକ୍ସେସ୍ ପଏଣ୍ଟର ନାମ</translation> <translation id="4880827082731008257">ଇତିବୃତ୍ତି ସନ୍ଧାନ କରନ୍ତୁ</translation> @@ -2864,6 +2887,7 @@ <translation id="5065775832226780415">ସ୍ମାର୍ଟ ଲକ୍</translation> <translation id="5067399438976153555">ସର୍ବଦା ଚାଲୁ ଅଛି</translation> <translation id="5067867186035333991"><ph name="HOST" /> ଆପଣଙ୍କ ମାଇକ୍ରୋଫୋନ୍କୁ ଆକ୍ସେସ୍ କରିବାକୁ ଚାହାନ୍ତି କି ନାହିଁ, ତାହା ପଚାରନ୍ତୁ</translation> +<translation id="5068377946749700758">ସୁରକ୍ଷା ଅନୁମୋଦନ ପାଇଁ ଆପଣଙ୍କର ସଂସ୍ଥା ଡ୍ରାଗ୍ କରାଯାଇଥିବା ଡାଟାକୁ ସ୍କାନ୍ କରୁଛି।</translation> <translation id="5068918910148307423">ଡାଟା ପଠାଇବା ଓ ଗ୍ରହଣ କରିବା ସମାପ୍ତ କରିବାକୁ ନିକଟରେ ବନ୍ଦ କରାଯାଇଥିବା ସାଇଟ୍ଗୁଡ଼ିକୁ ଅନୁମତି ଦିଅନ୍ତୁ ନାହିଁ</translation> <translation id="5068919226082848014">ପିଜା</translation> <translation id="5072052264945641674">କର୍ସର୍ ଆକାର ଆଡ୍ଜଷ୍ଟ୍ କରନ୍ତୁ</translation> @@ -3056,6 +3080,7 @@ <translation id="5341793073192892252">ନିମ୍ନରେ ଦିଆଯାଇଥିବା କୁକୀଗୁଡ଼ିକ ଅବରୋଧ କରାଯାଇଥିଲା (କୌଣସି ବ୍ୟତିକ୍ରମ ବିନା ତୃତୀୟ-ପକ୍ଷ କୁକୀଗୁଡ଼ିକୁ ଅବରୋଧ କରାଯାଉଛି)</translation> <translation id="5341980496415249280">ଦୟାକରି ଅପେକ୍ଷା କରନ୍ତୁ, ପ୍ୟାକ୍ ହେଉଛି...</translation> <translation id="5342091991439452114">PIN ନିଶ୍ଚିତ ରୂପେ ଅତି କମ୍ରେ <ph name="MINIMUM" /> ଅଙ୍କ ବିଶିଷ୍ଟ ହେବା ଦରକାର</translation> +<translation id="5344036115151554031">Linuxକୁ ରିଷ୍ଟୋର୍ କରାଯାଉଛି</translation> <translation id="5352033265844765294">ଟାଇମ୍ ଷ୍ଟାମ୍ପିଂ</translation> <translation id="5353252989841766347">Chromeରୁ ପାସ୍ୱର୍ଡଗୁଡ଼ିକ ଏକ୍ସପୋର୍ଟ କରନ୍ତୁ</translation> <translation id="5355099869024327351">ଆପଣଙ୍କ ବିଜ୍ଞପ୍ତି ଦେଖାଇବା ପାଇଁ Assistantକୁ ଅନୁମତି ଦିଅନ୍ତୁ</translation> @@ -3109,6 +3134,7 @@ <translation id="5427459444770871191">&ଘଣ୍ଟାକଣ୍ଟା ଦିଗରେ ଘୂରାନ୍ତୁ</translation> <translation id="542872847390508405">ଆପଣ ଏକ ଅତିଥି ଭାବରେ ବ୍ରାଉଜ୍ କରୁଛନ୍ତି</translation> <translation id="5428850089342283580"><ph name="ACCNAME_APP" /> (ଅପ୍ଡେଟ୍ ଉପଲବ୍ଧ ଅଛି)</translation> +<translation id="542948651837270806">ବିଶ୍ୱସ୍ତ ପ୍ଲାଟଫର୍ମ ମଡ୍ୟୁଲ୍ ଫାର୍ମୱେର୍ ପାଇଁ ଏକ ଅପଡେଟ୍ ଇନଷ୍ଟଲ୍ କରିବାର ଆବଶ୍ୟକତା ଅଛି। <ph name="TPM_FIRMWARE_UPDATE_LINK" /> ଦେଖନ୍ତୁ</translation> <translation id="5430931332414098647">ଇନ୍ଷ୍ଟାଣ୍ଟ ଟିଥରିଂ</translation> <translation id="5431318178759467895">ରଙ୍ଗ</translation> <translation id="5431825016875453137">VPN / L2TP ଖୋଲନ୍ତୁ</translation> @@ -3289,6 +3315,7 @@ <translation id="5659593005791499971">ଇମେଲ୍</translation> <translation id="5659833766619490117">ଏହି ପୃଷ୍ଠାଟିକୁ ଅନୁବାଦ କରାଯାଇପାରିବ ନାହିଁ</translation> <translation id="5660204307954428567"><ph name="DEVICE_NAME" /> ସହ ପେୟାର୍ କରନ୍ତୁ</translation> +<translation id="5662513737565158057">Linux ଆପ୍ସ କିପରି କାମ କରିବ ତାହା ବଦଳାନ୍ତୁ।</translation> <translation id="5667546120811588575">Google Play ସେଟ୍ଅପ୍ କରାଯାଉଛି...</translation> <translation id="5669267381087807207">ସକ୍ରିୟ କରାଯାଉଛି</translation> <translation id="5669691691057771421">ନୂଆ ପିନ୍ ଲେଖନ୍ତୁ</translation> @@ -3696,6 +3723,7 @@ <translation id="6238923052227198598">ନବୀନତମ ନୋଟ୍ ଲକ୍ ସ୍କ୍ରିନ୍ରେ ରଖନ୍ତୁ</translation> <translation id="6239558157302047471">ରିଲୋଡ୍ ଏବଂ ଫ୍ରେମ୍ କରନ୍ତୁ</translation> <translation id="6241530762627360640">ଆପଣଙ୍କର ସିଷ୍ଟମ୍ ସହ ପେୟାର୍ ହୋଇଥିବା ବ୍ଲୁଟୁଥ୍ ଡିଭାଇସ୍ ବିଷୟରେ ସୂଚନା ଆକ୍ସେସ୍ କରନ୍ତୁ ଏବଂ ଆଖପାଖର ବ୍ଲୁଟୁଥ୍ ଡିଭାଇସ୍କୁ ଖୋଜନ୍ତୁ।</translation> +<translation id="6241844896329831164">କୌଣସି ଆକ୍ସେସର ଆବଶ୍ୟକତା ନାହିଁ</translation> <translation id="6242589501614145408">ଆପଣଙ୍କର ସୁରକ୍ଷା କୀ ରିସେଟ୍ କରନ୍ତୁ</translation> <translation id="6242852299490624841">ଏହି ଟାବ୍ ପ୍ରତି ଧ୍ୟାନ ଦିଅନ୍ତୁ</translation> <translation id="6243280677745499710">ବର୍ତ୍ତମାନ ସେଟ୍ ହୋଇଛି</translation> @@ -3897,6 +3925,8 @@ <translation id="6531282281159901044">ବିପଜ୍ଜନକ ଫାଇଲ୍କୁ ରଖନ୍ତୁ</translation> <translation id="6532101170117367231">Google ଡ୍ରାଇଭ୍ରେ ସେଭ୍ କରନ୍ତୁ</translation> <translation id="6532106788206463496">ପରିବର୍ତ୍ତନଗୁଡିକୁ ସେଭ୍ କରନ୍ତୁ</translation> +<translation id="6532206849875187177">ସୁରକ୍ଷା ଏବଂ ସାଇନ୍ ଇନ୍</translation> +<translation id="6532527800157340614">ଆପଣଙ୍କର ଆକ୍ସେସ୍ ଟୋକନକୁ ପୁନରୁଦ୍ଧାର କରାଯାଇ ନପାରିବାରୁ ସାଇନ୍ ଇନ୍ କରିବା ବିଫଳ ହୋଇଛି। ଦୟାକରି ଆପଣଙ୍କ ନେଟୱାର୍କ ସଂଯୋଗ ଯାଞ୍ଚ କରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation> <translation id="6532663472409656417">ଏଣ୍ଟରପ୍ରାଇଜ୍ ପଞ୍ଜିକରଣ କରାଯାଇଛି</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />ଟିପ୍ପଣୀ:<ph name="END_BOLD" /> ଯଦି ଆପଣ ଜାଣିଛନ୍ତି ଯେ ଆପଣ କ'ଣ କରୁଛନ୍ତି କିମ୍ବା ଆପଣଙ୍କୁ ଏପରି କରିବାକୁ କୁହାଯାଇଛି, କାରଣ ଡାଟାର ସଂଗ୍ରହ କାର୍ଯ୍ୟଦକ୍ଷତାକୁ କମାଇପାରେ।</translation> <translation id="6541638731489116978">ଏହି ସାଇଟ୍କୁ ଆପଣଙ୍କ ମୋସନ୍ ସେନ୍ସର୍ ଆକ୍ସେସ୍ କରିବା ପାଇଁ ବ୍ଲକ୍ କରାଯାଇଛି।</translation> @@ -3904,6 +3934,7 @@ <translation id="6545864417968258051">ବ୍ଲୁଟୁଥ୍ ସ୍କାନିଂ</translation> <translation id="6545867563032584178">Mac ସିଷ୍ଟମ୍ ଅଗ୍ରାଧିକାରଗୁଡ଼ିକରେ ମାଇକ୍ରୋଫୋନ୍ ବନ୍ଦ କରାଯାଇଛି</translation> <translation id="6547354035488017500">ଅତିକମ୍ରେ 512 MB ଜାଗା ଖାଲି କରନ୍ତୁ ନଚେତ୍ ଆପଣଙ୍କର ଡିଭାଇସ୍ ପ୍ରତିକ୍ରିୟାରହିତ ହୋଇଯିବ। ଜାଗା ଖାଲି କରିବାକୁ, ଡିଭାଇସ୍ ଷ୍ଟୋରେଜ୍ରୁ ଫାଇଲ୍ ଡିଲିଟ୍ କରନ୍ତୁ।</translation> +<translation id="6549966385318247177">ପ୍ରାପ୍ତ ବୟସ୍କଙ୍କ ପାଇଁ ଉଦ୍ଦିଷ୍ଟ ବିଷୟବସ୍ତୁ ରହିଥିବା ଯୋଗୁଁ ଏହାକୁ ବ୍ଲକ୍ କରାଯାଇଛି।</translation> <translation id="6550675742724504774">ବିକଳ୍ପଗୁଡ଼ିକ</translation> <translation id="6551508934388063976">କମାଣ୍ଡ ଉପଲବ୍ଧ ନାହିଁ। ଗୋଟିଏ ନୂଆ ୱିଣ୍ଡୋ ଖୋଲିବା ପାଇଁ control-N ଦବାନ୍ତୁ।</translation> <translation id="6551612971599078809">ସାଇଟ୍ USB ବ୍ୟବହାର କରୁଛି</translation> @@ -4236,6 +4267,7 @@ <translation id="703001695939087067">ୱିଣ୍ଡୋର ସାରାଂଶ ମୋଡ୍ରେ ପ୍ରବେଶ କରାଯାଇଛି। ନାଭିଗେଟ୍ କରିବାକୁ ଟାବ୍ ଦବାନ୍ତୁ।</translation> <translation id="7031608529463141342"><ph name="WINDOW_TITLE" /> - ସିରିଏଲ୍ ପୋର୍ଟ ସଂଯୁକ୍ତ କରାଗଲା</translation> <translation id="7031962166228839643">TPM ପ୍ରସ୍ତୁତ କରାଯାଉଛି, ଦୟାକରି ଅପେକ୍ଷା କରନ୍ତୁ (ଏଥିପାଇଁ କିଛି ସମୟ ଲାଗିପାରେ)...</translation> +<translation id="7034615910652881882">କୌଣସି ସାଇଟ୍ ଆପଣଙ୍କର ଭର୍ଚୁଆଲ୍ ରିଆଲିଟୀ ଡିଭାଇସଗୁଡ଼ିକ/ଡାଟା ଆକ୍ସେସ୍ କରିବାକୁ ଚାହିଁଲେ ତାହାକୁ ପଚାରନ୍ତୁ</translation> <translation id="7037509989619051237">ପୂର୍ବାବଲୋକନ ପାଇଁ ଟେକ୍ସଟ୍</translation> <translation id="7039326228527141150"><ph name="VENDOR_NAME" />ରୁ USB ଡିଭାଇସ୍ଗୁଡ଼ିକୁ ଆକ୍ସେସ୍ କରନ୍ତୁ</translation> <translation id="7039912931802252762">Microsoft ସ୍ମାର୍ଟ କାର୍ଡ ଲଗ୍ଅନ୍</translation> @@ -4275,6 +4307,7 @@ <translation id="7081952801286122383">ଆପଣ ଇନ୍କଗ୍ନିଟୋ ମୋଡ୍ରେ ଅଛନ୍ତି</translation> <translation id="708278670402572152">ସ୍କାନିଂକୁ ସକ୍ଷମ କରିବା ପାଇଁ ବିଚ୍ଛିନ୍ନ କରନ୍ତୁ</translation> <translation id="7085389578340536476">ଅଡିଓ ରେକର୍ଡ କରିବାକୁ Chromeକୁ ଅନୁମତି ଦେବେ କି?</translation> +<translation id="7086467953285486445">ଏହି ଫାଇଲଗୁଡ଼ିକ ଆପଣଙ୍କ ସଂସ୍ଥାର ସୁରକ୍ଷା ନୀତିଗୁଡ଼ିକର ଉଲ୍ଲଙ୍ଘନ କରୁଛି ଏବଂ ଏଗୁଡ଼ିକୁ ଡ୍ରପ୍ କରାଯାଇପାରିବ ନାହିଁ।</translation> <translation id="7088434364990739311">ଅପ୍ଡେଟ୍ର ଯାଞ୍ଚ ପ୍ରକ୍ରିୟା ଆରମ୍ଭ କରିବାରେ ବିଫଳ ହେଲା (ତ୍ରୁଟି କୋଡ୍ <ph name="ERROR" />)।</translation> <translation id="7088561041432335295">ଜିପ୍ ଆର୍କାଇଭର୍ - ଫାଇଲ୍ ଆପ୍ରେ ZIP ଫାଇଲ୍ ଖୋଲନ୍ତୁ ଏବଂ ପ୍ୟାକ୍ କରନ୍ତୁ।</translation> <translation id="7088674813905715446">ବ୍ୟବସ୍ଥାପକଙ୍କ ଦ୍ୱାରା ଏହି ଡିଭାଇସ୍ ଏକ ଅବ୍ୟବସ୍ଥିତ ସ୍ଥିତିରେ ରଖାଯାଇଛି। ଏହାକୁ ନାମାଙ୍କନ ପାଇଁ ସକ୍ଷମ କରିବାକୁ, ଦୟାକରି ଆପଣଙ୍କର ବ୍ୟବସ୍ଥାପକଙ୍କ ଦ୍ୱାରା ଡିଭାଇସ୍କୁ ଏକ ବିଳମ୍ବିତ ସ୍ଥିତିରେ ରହିବାକୁ ଦିଅନ୍ତୁ।</translation> @@ -4388,6 +4421,7 @@ <translation id="7241389281993241388">କ୍ଲାଏଣ୍ଟ ସାର୍ଟିଫିକେଟ୍ ଇମ୍ପୋର୍ଟ କରିବାକୁ ଦୟାକରି <ph name="TOKEN_NAME" />କୁ ସାଇନ୍ ଇନ୍ କରନ୍ତୁ।</translation> <translation id="7241443820034350811">ଯଦି ଆପଣଙ୍କ ସୁରକ୍ଷା କୀ ତାଲିକାଭୁକ୍ତ କରାଯାଇ ନାହିଁ, ତେବେ ଏହାର ବଟନ୍କୁ ଅତିକମ୍ରେ 5 ସେକେଣ୍ଡ ପାଇଁ ଦବାନ୍ତୁ।</translation> <translation id="7243632151880336635">ଖାଲି କରନ୍ତୁ ଏବଂ ସାଇନ୍ ଆଉଟ୍ କରନ୍ତୁ</translation> +<translation id="7243784282103630670">Linux ଅପଗ୍ରେଡ୍ କରିବା ସମୟରେ ଏକ ତ୍ରୁଟି ହୋଇଥିଲା। ଆପଣଙ୍କର ବ୍ୟାକଅପକୁ ବ୍ୟବହାର କରୁଥିବା କଣ୍ଟେନରକୁ ଆମେ ରିଷ୍ଟୋର୍ କରିବୁ।</translation> <translation id="7245628041916450754"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (ଶ୍ରେଷ୍ଠ)</translation> <translation id="7246230585855757313">ଆପଣଙ୍କର ସୁରକ୍ଷା କୀ’କୁ ପୁଣି ଭର୍ତ୍ତି କରନ୍ତୁ ଏବଂ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ</translation> <translation id="7246947237293279874">FTP ପ୍ରୋକ୍ସି</translation> @@ -4474,6 +4508,7 @@ <translation id="7360233684753165754"><ph name="PRINTER_NAME" />କୁ <ph name="PAGE_NUMBER" />ଟି ପୃଷ୍ଠା</translation> <translation id="7361297102842600584"><ph name="PLUGIN_NAME" />କୁ ଚାଲୁ କରିବା ପାଇଁ ଡାହାଣ-କ୍ଲିକ୍ କରନ୍ତୁ</translation> <translation id="7363117941401515667"><ph name="HOURS" /> ପୂର୍ବେ ଅପ୍ଡେଟ୍ କରାଯାଇଛି</translation> +<translation id="7364591875953874521">ଆକ୍ସେସର ଅନୁରୋଧ କରାଯାଇଛି</translation> <translation id="7364796246159120393">ଫାଇଲ୍ ମନୋନୟନ କରନ୍ତୁ</translation> <translation id="7366415735885268578">ଏକ ସାଇଟ୍ ଯୋଗକରନ୍ତୁ</translation> <translation id="7366909168761621528">ବ୍ରାଉଜିଂ ଡାଟା</translation> @@ -4499,6 +4534,7 @@ <translation id="740624631517654988">ପପ୍-ଅପ୍ ବ୍ଲକ୍ କରାଯାଇଛି</translation> <translation id="7407430846095439694">ଇମ୍ପୋର୍ଟ ଏବଂ ଆବଦ୍ଧ କରନ୍ତୁ</translation> <translation id="7407504355934009739">ଏହି ସାଇଟ୍ର ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଅଧିକାଂଶ ଲୋକ ବ୍ଲକ୍ କରିଥାନ୍ତି</translation> +<translation id="740810853557944681">ଏକ ପ୍ରିଣ୍ଟ ସର୍ଭର୍ ଯୋଗ କରନ୍ତୁ</translation> <translation id="7409549334477097887">ଅତିରିକ୍ତ ବୃହତ</translation> <translation id="7409836189476010449">ଫ୍ଲାସ୍ ଚଲାନ୍ତୁ</translation> <translation id="7410344089573941623">ଯଦି <ph name="HOST" /> ଆପଣଙ୍କର କ୍ୟାମେରା ଏବଂ ମାଇକ୍ରୋଫୋନ୍କୁ ଆକ୍ସେସ୍ କରିବାକୁ ଚାହୁଁଛି, ତେବେ ପଚାରନ୍ତୁ</translation> @@ -4519,6 +4555,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{ସମସ୍ତ &ନୂଆ ୱିଣ୍ଡୋରେ ଖୋଲନ୍ତୁ}=1{&ନୂଆ ୱିଣ୍ଡୋରେ ଖୋଲନ୍ତୁ}other{ସମସ୍ତ (#)ଟି &ନୂଆ ୱିଣ୍ଡୋରେ ଖୋଲନ୍ତୁ}}</translation> <translation id="7434509671034404296">ଡେଭେଲପର୍</translation> <translation id="7434635829372401939">ଆପଣଙ୍କର ସେଟିଂସ୍ ସିଙ୍କ୍ କରନ୍ତୁ</translation> +<translation id="7434969625063495310">ପ୍ରିଣ୍ଟ ସର୍ଭର୍ ଯୋଗ କରାଯାଇପାରିଲା ନାହିଁ। ଦୟାକରି ସର୍ଭରର କନଫିଗରେସନ୍ ଯାଞ୍ଚ କରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation> <translation id="7436921188514130341">ଇସ୍, କିଛି ଭୁଲ୍ ହୋଇଛି! ରିନେମ୍ କରିବା ସମୟରେ ଏକ ତ୍ରୁଟି ହୋଇଥିଲା।</translation> <translation id="7438976808740265764">ଡିସେମ୍ବର୍ 2020 ପରେ ଫ୍ଲାସ୍ ପ୍ଲେୟାର୍ ଆଉ ସହଯୋଗ କରିବ ନାହିଁ।</translation> <translation id="7441736921018636843">ଏହି ସେଟିଂ ପର୍ବର୍ତ୍ତନ କରିବାକୁ, <ph name="BEGIN_LINK" />ସିଙ୍କ୍ ରିସେଟ୍ କରନ୍ତୁ<ph name="END_LINK" /> ଯାହାଦ୍ୱାରା ଆପଣଙ୍କର ସିଙ୍କ୍ ପାସ୍ଫ୍ରେଜ୍ କାଢ଼ନ୍ତୁ</translation> @@ -4528,8 +4565,10 @@ <translation id="7443806024147773267">ଯେତେବେଳେ ଆପଣ ଆପଣଙ୍କର Google ଆକାଉଣ୍ଟରେ ସାଇନ୍ ଇନ୍ କରିଥିବା ସମୟରେ ଆପଣଙ୍କର ପାସ୍ୱାର୍ଡଗୁଡ଼ିକୁ ଆକ୍ସେସ୍ କରନ୍ତୁ</translation> <translation id="7444983668544353857"><ph name="NETWORKDEVICE" />କୁ ଅକ୍ଷମ କରନ୍ତୁ</translation> <translation id="7448430327655618736">ସ୍ୱଚାଳିତ ଭାବେ ଆପ୍ସ ଇନଷ୍ଟଲ୍ କରନ୍ତୁ</translation> +<translation id="7448625729116931228">କୌଣସି ସାଇଟ୍ ଆପଣଙ୍କର ଭର୍ଚୁଆଲ୍ ରିଆଲିଟୀ ଡିଭାଇସଗୁଡ଼ିକ/ଡାଟା ଆକ୍ସେସ୍ କରିବାକୁ ଚାହିଁଲେ ତାହାକୁ ପଚାରନ୍ତୁ (ସୁପାରିଶ କରାଯାଇଛି)</translation> <translation id="7450761244949417357">ବର୍ତ୍ତମାନ <ph name="ALTERNATIVE_BROWSER_NAME" />ରେ ଖୋଲୁଛି</translation> <translation id="7453008956351770337">ଏହି ପ୍ରିଣ୍ଟର୍ର ଚୟନ କରିବା ଦ୍ଵାରା ଆପଣ ନିମ୍ନୋକ୍ତ ଏକ୍ସଟେନ୍ସନ୍କୁ ଆପଣଙ୍କର ପ୍ରିଣ୍ଟର୍ ଆକ୍ସେସ୍ କରିବା ପାଇଁ ଅନୁମତି ଦେଉଛନ୍ତି।</translation> +<translation id="7454548535253569100">ପୋର୍ଟାଲ୍: <ph name="SUBFRAME_SITE" /></translation> <translation id="7456142309650173560">ଡେଭ୍</translation> <translation id="7456847797759667638">ଲୋକେସନ୍ ଖୋଲନ୍ତୁ...</translation> <translation id="7458168200501453431">ଏହା Google ସନ୍ଧାନରେ ବ୍ୟବହୃତ ହୋଇଥିବା ସମାନ ବନାନ ଯାଞ୍ଚକାରୀ ବ୍ୟବହାର କରେ। ବ୍ରାଉଜର୍ରେ ଆପଣ ଟାଇପ୍ କରିଥିବା ଟେକ୍ସଟ୍ Googleକୁ ପଠାଯାଏ।</translation> @@ -4575,6 +4614,7 @@ <translation id="7513029293694390567">ଷ୍ଟୋର୍ ଥିବା ବିଶ୍ୱସନୀୟତା ବ୍ୟବହାର କରି ୱେବ୍ସାଇଟ୍ରେ ସ୍ୱଚାଳିତରୂପେ ସାଇନ୍ ଇନ୍ କରନ୍ତୁ। ଯଦି ଏହା ଅକ୍ଷମ କରାଯାଏ, ତେବେ ଏକ ୱେବ୍ସାଇଟ୍ରେ ସାଇନ୍ ଇନ୍ କରିବା ପୂର୍ବରୁ ପ୍ରତ୍ୟେକଥର ଆପଣଙ୍କୁ ସୁନିଶ୍ଚିତ କରିବା ପାଇଁ କୁହାଯିବ।</translation> <translation id="7514239104543605883">ଆପଣଙ୍କର ଡିଭାଇସ୍କୁ କପି କରନ୍ତୁ</translation> <translation id="7514365320538308">ଡାଉନ୍ଲୋଡ୍ କରନ୍ତୁ</translation> +<translation id="7520766081042531487">ଇନକଗ୍ନିଟୋ ପୋର୍ଟାଲ୍: <ph name="SUBFRAME_SITE" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7522255036471229694">"Ok Google" କୁହନ୍ତୁ</translation> <translation id="7525067979554623046">ତିଆରି କରନ୍ତୁ</translation> @@ -4663,6 +4703,7 @@ <translation id="7652808307838961528">ବ୍ୟକ୍ତିଙ୍କର, <ph name="PROFILE_NAME" /> ଏଡିଟ୍ କରନ୍ତୁ</translation> <translation id="765293928828334535">ଏହି ୱେବ୍ସାଇଟ୍ରୁ ଆପ୍ସ, ଏକ୍ସଟେନ୍ସନ୍, ଏବଂ ଉପଯୋଗକର୍ତ୍ତାଙ୍କ ସ୍କ୍ରିପ୍ଟ ଯୋଗ କରାଯାଇପାରିବ ନାହିଁ</translation> <translation id="7652954539215530680">ଗୋଟିଏ ପିନ୍ ତିଆରି କରନ୍ତୁ</translation> +<translation id="7653295403398566475">କୌଣସି ସାଇଟ୍ ଆପଣଙ୍କ କ୍ୟାମେରାର ସ୍ଥିତିକୁ ଆକ୍ସେସ୍ କରିବାକୁ କିମ୍ବା ଆପଣଙ୍କ ରୁମକୁ ମ୍ୟାପ୍ କରିବାକୁ ଚାହିଁଲେ ତାହାକୁ ପଚାରନ୍ତୁ</translation> <translation id="7654941827281939388">ଏହି ଆକାଉଣ୍ଟ ପୂର୍ବରୁ ଏହି ଡିଭାଇସ୍ରେ ବ୍ୟବହୃତ ହୋଇଛି।</translation> <translation id="7658239707568436148">ବାତିଲ୍</translation> <translation id="7659584679870740384">ଆପଣ ଏହି ଡିଭାଇସ୍ ବ୍ୟବହାର କରିବାକୁ ପ୍ରାଧିକୃତ ନୁହନ୍ତି। ସାଇନ୍-ଇନ୍ ଅନୁମତି ପାଇଁ ଦୟାକରି ବ୍ୟବସ୍ଥାପକଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।</translation> @@ -4815,6 +4856,7 @@ <translation id="783214144752121388">ସାଇଟ୍ଗୁଡ଼ିକୁ ଫ୍ଲାସ୍ ଚଲାଇବା ବ୍ଲକ୍ କରନ୍ତୁ</translation> <translation id="7833720883933317473">ସେଭ୍ ହୋଇଥିବା କଷ୍ଟମ୍ ଶବ୍ଦ ଏଠାରେ ଦେଖାଯିବ</translation> <translation id="7835178595033117206">ବୁକ୍ମାର୍କକୁ କଢ଼ାଯାଇଛି</translation> +<translation id="7836850009646241041">ଆପଣଙ୍କର ସୁରକ୍ଷା କୀ'କୁ ପୁଣି ସ୍ପର୍ଶ କରିବାକୁ ଚେଷ୍ଟା କରନ୍ତୁ</translation> <translation id="7837776265184002579">ଆପଣଙ୍କର ମୂଳପୃଷ୍ଠା <ph name="URL" />କୁ ପରିବର୍ତ୍ତନ ହୋଇଥିଲା।</translation> <translation id="7839051173341654115">ମିଡିଆ ଦେଖନ୍ତୁ/ବ୍ୟାକ୍ଅପ୍ କରନ୍ତୁ</translation> <translation id="7839192898639727867">ସାର୍ଟିଫିକେଟ୍ ବିଷୟ କୀ' ID</translation> @@ -5127,7 +5169,9 @@ <translation id="8260864402787962391">ମାଉସ୍</translation> <translation id="8261378640211443080">ଏହି ଏକ୍ସଟେନ୍ସନ୍, <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />ରେ ତାଲିକାଭୁକ୍ତ ନାହିଁ ଏବଂ ଆପଣଙ୍କର ଅଜାଣତରେ ହୁଏତ ଏହା ଯୋଗ କରାଯାଇଥାଇପାରେ।</translation> <translation id="8261506727792406068">ବିଲୋପ</translation> +<translation id="8263336784344783289">ଏହି ଗୋଷ୍ଠୀର ନାମ ଦିଅନ୍ତୁ</translation> <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" /> ଆପଣଙ୍କ ମାଉସ୍ କର୍ସର୍ ନିଷ୍କ୍ରିୟ କରିଦେଇଛି।</translation> +<translation id="8264024885325823677">ଏହି ସେଟିଂ ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ଦ୍ୱାରା ପରିଚାଳିତ ହୁଏ।</translation> <translation id="8264718194193514834">"<ph name="EXTENSION_NAME" />" ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନ୍ରେ ଟ୍ରିଗର୍ କରିଛନ୍ତି।</translation> <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />ଏହା ଏହି ଡିଭାଇସ୍ ଏବଂ ଏହା କିପରି ବ୍ୟବହାର ହୋଇଛି (ଯେପରି ବ୍ୟାଟେରୀ ଲେବଲ୍, ସିଷ୍ଟମ୍, ଆପ୍ ଗତିବିଧି ଓ ତ୍ରୁଟି) ତାହା ବିଷୟରେ ସାଧାରଣ ସୂଚନା ଅଟେ। Androidକୁ ଉନ୍ନତ କରିବା ପାଇଁ ଡାଟାକୁ ବ୍ୟବହାର କରାଯିବ ଏବଂ କିଛି ଏକତ୍ରିତ ସୂଚନା Google ଆପ୍ସ ଏବଂ Android ଡେଭଲପର୍ ପରି ସହଯୋଗୀଙ୍କୁ ସେମାନଙ୍କର ଆପ୍ସ ଓ ଉତ୍ପାଦକୁ ଉନ୍ନତ କରିବାରେ ସାହାଯ୍ୟ କରିବ।<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />ଏହି ବୈଶିଷ୍ଟ୍ୟକୁ ବନ୍ଦ କରିବା ଦ୍ଵାରା ଏହି ଡିଭାଇସ୍ର ସିଷ୍ଟମ୍ ଅପ୍ଡେଟ୍ ଓ ସୁରକ୍ଷା ପରି ଆବଶ୍ୟକ ସେବାଗୁଡ଼ିକ ପାଇଁ ଆବଶ୍ୟକୀୟ ସୂଚନାକୁ ପଠାଇବାର କ୍ଷମତା ପ୍ରଭାବିତ ହେବନାହିଁ।<ph name="END_PARAGRAPH2" /> @@ -5383,6 +5427,7 @@ <translation id="8650543407998814195">ଯଦିଓ, ଆପଣ ଆପଣଙ୍କର ପୁରୁଣା ପ୍ରୋଫାଇଲ୍କୁ ଏବେ ଆଉ ଆକ୍ସେସ୍ କରିପାରୁନାହାନ୍ତି, ତଥାପି ଆପଣ ଏହାକୁ ଏବେ ମଧ୍ୟ କାଢିପାରିବେ।</translation> <translation id="8651585100578802546">ଏହି ପୃଷ୍ଠାକୁ ବାଧ୍ୟତାମୂଳକ ଭାବରେ ପୁନଃଲୋଡ୍ କରନ୍ତୁ</translation> <translation id="8652400352452647993">ପ୍ୟାକ୍ ଏକ୍ସଟେନ୍ସନ୍ ତ୍ରୁଟି</translation> +<translation id="8653578191563425126">Crostini ପାଇଁ ସଂରକ୍ଷଣ କରିବାକୁ ଡିସ୍କ ସ୍ଥାନ (ଆପଣ ପରେ ଏହାକୁ ବଦଳାଇ ପାରିବେ)।</translation> <translation id="8654151524613148204">ଆପଣଙ୍କ କମ୍ପ୍ୟୁଟର୍ ପାଇଁ ଫାଇଲ୍ଟି ବହୁତ ବଡ ଅଟେ। କ୍ଷମା କରିବେ…</translation> <translation id="8655295600908251630">ଚ୍ୟାନେଲ୍</translation> <translation id="8655319619291175901">ଓହୋଃ, କିଛି ଭୁଲ୍ ହୋଇଗଲା।</translation> @@ -5647,6 +5692,7 @@ <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> ଦିନ ପୂର୍ବେ ସକ୍ରିୟ ଥିଲା</translation> <translation id="8986362086234534611">ଭୁଲିଗଲେ</translation> <translation id="8986494364107987395">ସ୍ୱଚାଳିତରୂପେ Googleକୁ ବ୍ୟବହାରର ପରିସଂଖ୍ୟାନ ଏବଂ କ୍ରାସ୍ ରିପୋର୍ଟ ପଠାନ୍ତୁ</translation> +<translation id="8986651757229422279">ଏହା <ph name="ORIGIN_NAME" /> ଦ୍ୱାରା ଷ୍ଟୋର୍ କରାଯାଇଥିବା ସମସ୍ତ ଡାଟା ଏବଂ କୁକୀକୁ ଏବଂ ଏହାର ଇନଷ୍ଟଲ୍ କରାଯାଇଥିବା ଆପକୁ ଖାଲି କରିଦେବ।</translation> <translation id="8987927404178983737">ମାସ</translation> <translation id="8991520179165052608">ଆପଣଙ୍କର ମାଇକ୍ରୋଫୋନ୍କୁ ସାଇଟ୍ ବ୍ୟବହାର କରିପାରେ</translation> <translation id="899403249577094719">Netscape ସାର୍ଟିଫିକେଟ୍ ଉପରେ ଆଧାରିତ URL</translation> @@ -5798,6 +5844,7 @@ <translation id="932508678520956232">ପ୍ରିଣ୍ଟିଂ ଆରମ୍ଭ କରିହେଲା ନାହିଁ।</translation> <translation id="93343527085570547">ଆଇନଗତ କାରଣ ପାଇଁ ବିଷୟବସ୍ତୁ ପରିବର୍ତ୍ତନର ଅନୁରୋଧ କରିବାକୁ <ph name="BEGIN_LINK1" />ଆଇନ ସମ୍ବନ୍ଧୀୟ ସହାୟତା ପୃଷ୍ଠା<ph name="END_LINK1" />କୁ ଯାଆନ୍ତୁ। କିଛି ଆକାଉଣ୍ଟ ଓ ସିଷ୍ଟମ୍ ସୂଚନା Googleକୁ ପଠାଇଦିଆଯାଇପାରେ। ବୈଷୟିକ ସମସ୍ୟାର ସମାଧାନ କରିବାକୁ ଏବଂ ଆମର ସେବାଗୁଡ଼ିକୁ ଉନ୍ନତ କରିବାକୁ, ଆମେ ଆମର <ph name="BEGIN_LINK2" />ଗୋପନୀୟତା ନୀତି<ph name="END_LINK2" />ଏବଂ <ph name="BEGIN_LINK3" />ସେବାର ସର୍ତ୍ତାବଳୀ<ph name="END_LINK3" /> ଅଧୀନରେ ଆପଣ ଆମକୁ ପ୍ରଦାନ କରିଥିବା ସୂଚନାକୁ ବ୍ୟବହାର କରିବୁ।</translation> <translation id="93393615658292258">କେବଳ ପାସ୍ୱର୍ଡ</translation> +<translation id="934244546219308557">ଏହି ଗୋଷ୍ଠୀର ନାମ ଦିଅନ୍ତୁ</translation> <translation id="934503638756687833">ଆବଶ୍ୟକ ହେଲେ, ଏଠାରେ ତାଲିକାଭୁକ୍ତ ନଥିବା ଆଇଟମ୍ଗୁଡ଼ିକୁ କାଢ଼ିଦିଆଯିବ। Chrome ଗୋପନୀୟତା ହ୍ୱାଇଟ୍ ପେପର୍ରେ <a href="<ph name="URL" />">ଅବାଞ୍ଚିତ ସଫ୍ଟୱେର୍ରୁ ସୁରକ୍ଷା</a> ବିଷୟରେ ଅଧିକ ଜାଣନ୍ତୁ।</translation> <translation id="935490618240037774">ଆପଣଙ୍କର ବୁକ୍ମାର୍କ, ଇତିବୃତ୍ତି, ପାସ୍ୱାର୍ଡ ଓ ଅନ୍ୟାନ୍ୟ ସେଟିଂଗୁଡ଼ିକୁ ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟରେ ସିଙ୍କ୍ କରିଦିଆଯିବ, ଯାହାଦ୍ଵାରା ଆପଣ ସେଗୁଡ଼ିକୁ ନିଜର ସମସ୍ତ ଡିଭାଇସ୍ରେ ବ୍ୟବହାର କରିପାରିବେ।</translation> <translation id="935854577147268200">ସ୍ମାର୍ଟ ଲକ୍ ଫୋନ୍ ବଦଳିଗଲା। ସ୍ମାର୍ଟ ଲକ୍କୁ ଅପ୍ଡେଟ୍ କରିବା ପାଇଁ ଆପଣଙ୍କର ପାସ୍ୱର୍ଡ ଲେଖନ୍ତୁ। ପରବର୍ତ୍ତୀ ସମୟରେ, ଆପଣଙ୍କର ଫୋନ୍ ଆପଣଙ୍କ <ph name="DEVICE_TYPE" /> ଅନ୍ଲକ୍ କରିବ।ସେଟିଂସ୍ରେ ଆପଣ ସ୍ମାର୍ଟ ଲକ୍ ପରିବର୍ତ୍ତନ କରିପାରିବେ</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb index 4b894c6..a51c73a 100644 --- a/chrome/app/resources/generated_resources_pa.xtb +++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">ਪ੍ਰੀਵਿਊ ਲੋਡ ਕਰ ਰਿਹਾ ਹੈ</translation> <translation id="1032605640136438169">ਕਿਰਪਾ ਕਰਕੇ ਨਵੇਂ ਨਿਯਮਾਂ ਦੀ ਸਮੀਖਿਆ ਕਰੋ</translation> <translation id="103279545524624934">Android ਐਪਾਂ ਨੂੰ ਲਾਂਚ ਕਰਨ ਲਈ ਡਿਸਕ ਜਗ੍ਹਾ ਨੂੰ ਖਾਲੀ ਕਰੋ।</translation> -<translation id="1033343386521881354">ਪ੍ਰਿੰਟ ਸਰਵਰ ਤੋਂ 1 ਪ੍ਰਿੰਟਰ ਮਿਲਿਆ।</translation> <translation id="1033780634303702874">ਆਪਣੀਆਂ ਸੀਰੀਅਲ ਡਿਵਾਈਸਾਂ ਤੇ ਪਹੁੰਚ ਪ੍ਰਾਪਤ ਕਰੋ</translation> <translation id="1034942643314881546">ਐਪਾਂ ਦਾ ਚਿੱਤਰ ਬਣਾਉਣ ਲਈ ADB ਨੂੰ ਚਾਲੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</translation> <translation id="1036348656032585052">ਬੰਦ ਕਰੋ</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">ਪੂਰੀ ਸਕ੍ਰੀਨ ਤੋਂ ਬਾਹਰ ਜਾਣ ਲਈ |<ph name="ACCELERATOR" />| ਦਬਾਓ</translation> <translation id="1038168778161626396">ਕੇਵਲ ਐਨਸਿਫਰ</translation> <translation id="1039337018183941703">ਅਵੈਧ ਜਾਂ ਖਰਾਬ ਫ਼ਾਈਲ</translation> -<translation id="1039850285407663109">ਚੁਣੀ ਹੋਈ ਫ਼ਾਈਲ ਅਗਿਆਤ ਹੈ ਅਤੇ ਇਹ ਖਤਰਨਾਕ ਹੋ ਸਕਦੀ ਹੈ। ਇਸ ਫ਼ਾਈਲ ਨੂੰ ਖੋਲ੍ਹਣ ਤੋਂ ਪਹਿਲਾਂ ਸਕੈਨ ਕਰਨ 'ਤੇ ਵਿਚਾਰ ਕਰੋ।</translation> <translation id="1041175011127912238">ਇਹ ਪੰਨਾ ਪ੍ਰਤਿਕਿਰਿਆ ਨਹੀਂ ਦੇ ਰਿਹਾ ਹੈ</translation> <translation id="1041263367839475438">ਉਪਲਬਧ ਡੀਵਾਈਸਾਂ</translation> <translation id="1042174272890264476">ਤੁਹਾਡਾ ਕੰਪਿਊਟਰ ਵੀ <ph name="SHORT_PRODUCT_NAME" /> ਦੀ RLZ ਲਾਇਬ੍ਰੇਰੀ ਬਿਲਟ ਇਨ ਤੋਂ ਆਉਂਦਾ ਹੈ। RLZ ਖੋਜਾਂ ਅਤੇ ਇੱਕ ਖ਼ਾਸ ਪ੍ਰਚਾਰ ਮੁਹਿੰਮ ਵੱਲੋਂ ਕੀਤੀ ਗਈ <ph name="SHORT_PRODUCT_NAME" /> ਵਰਤੋਂ ਦਾ ਹਿਸਾਬ ਲਗਾਉਣ ਲਈ ਇੱਕ ਗ਼ੈਰ-ਬੇਜੋੜ, ਗ਼ੈਰ-ਨਿੱਜੀ ਪਛਾਣਯੋਗ ਟੈਗ ਅਸਾਈਨ ਕਰਦਾ ਹੈ। ਇਹ ਲੇਬਲ ਕਦੇ-ਕਦਾਈਂ <ph name="PRODUCT_NAME" /> ਵਿੱਚ Google ਖੋਜ ਪੁੱਛਗਿੱਛਾਂ ਵਿੱਚ ਪ੍ਰਗਟ ਹੁੰਦੇ ਹਨ।</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">ਸਾਫਟਵੇਅਰ ਨਿਰਮਾਤਾਵਾਂ ਦੀ ਪਛਾਣ ਕਰਨ ਲਈ ਇਸ ਪ੍ਰਮਾਣ-ਪੱਤਰ 'ਤੇ ਭਰੋਸਾ ਕਰੋ</translation> <translation id="1861262398884155592">ਇਹ ਫੋਲਡਰ ਖਾਲੀ ਹੈ</translation> <translation id="1863182668524159459">ਕੋਈ ਸੀਰੀਅਲ ਪੋਰਟ ਨਹੀਂ ਮਿਲੇ</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> ਅਗਿਆਤ ਹੈ। ਜੋਖਮ ਘਟਾਉਣ ਲਈ ਫ਼ਾਈਲ ਸਕੈਨ ਕਰੋ।</translation> <translation id="1864111464094315414">ਲੌਗ-ਇਨ ਕਰੋ</translation> <translation id="1864400682872660285">ਵਧੇਰੇ ਹਲਕਾ</translation> <translation id="1864454756846565995">USB-C ਡੀਵਾਈਸ (ਪਿਛਲਾ ਪੋਰਟ)</translation> @@ -1699,7 +1696,7 @@ <translation id="3348038390189153836">ਹਟਾਉਣਯੋਗ ਡੀਵਾਈਸ ਖੋਜੀ ਗਈ</translation> <translation id="3349933790966648062">ਵਰਤੀ ਗਈ ਮੈਮੋਰੀ</translation> <translation id="3350117557200012647">ਜੋੜਾਬੱਧ ਕਰਨ ਦੇ ਮੋਡ ਵਿੱਚ ਜਾਓ</translation> -<translation id="3350244554415289209">ਕਿਸੇ ਸਾਈਟ ਵੱਲੋਂ ਤੁਹਾਡੇ ਕੈਮਰੇ ਦੀ ਸਥਿਤੀ ਜਾਂ ਤੁਹਾਡੇ ਕਮਰੇ ਦੀ ਰੂਪ-ਰੇਖਾ ਜਾਣਨ ਵੇਲੇ ਪੁੱਛੋ (ਸਿਫ਼ਾਰਸ਼ੀ)</translation> +<translation id="3350244554415289209">ਕਿਸੇ ਸਾਈਟ ਵੱਲੋਂ ਤੁਹਾਡੇ ਕੈਮਰੇ ਦੀ ਸਥਿਤੀ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਜਾਂ ਤੁਹਾਡੇ ਕਮਰੇ ਨੂੰ ਮਾਪਣ ਵੇਲੇ ਪੁੱਛੋ (ਸਿਫ਼ਾਰਸ਼ੀ)</translation> <translation id="3355936511340229503">ਕਨੈਕਸ਼ਨ ਗੜਬੜ</translation> <translation id="3356580349448036450">ਪੂਰਾ</translation> <translation id="3359256513598016054">ਪ੍ਰਮਾਣ-ਪੱਤਰ ਨੀਤੀ ਪਾਬੰਦੀਆਂ</translation> @@ -4023,7 +4020,6 @@ <translation id="6678717876183468697">ਪੁੱਛਗਿਛ URL</translation> <translation id="6680442031740878064">ਉਪਲਬਧ: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">ਦਰ</translation> -<translation id="6681301928961274620">ਪ੍ਰਿੰਟ ਸਰਵਰ ਤੋਂ ਕੋਈ ਪ੍ਰਿੰਟਰ ਨਹੀਂ ਮਿਲਿਆ।</translation> <translation id="6681668084120808868">ਫ਼ੋਟੋ ਲਓ</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" ਅਣਸਥਾਪਤ ਕੀਤੀ ਜਾਵੇਗੀ।</translation> <translation id="668599234725812620">Google Play ਖੋਲ੍ਹੋ</translation> @@ -4709,7 +4705,7 @@ <translation id="7652808307838961528">ਵਿਅਕਤੀ, <ph name="PROFILE_NAME" /> ਦਾ ਸੰਪਾਦਨ ਕਰੋ</translation> <translation id="765293928828334535">ਇਸ ਵੈੱਬਸਾਈਟ ਤੋਂ ਐਪਾਂ, ਐਕਸਟੈਂਸ਼ਨਾਂ ਅਤੇ ਵਰਤੋਂਕਾਰ ਸਕ੍ਰਿਪਟਾਂ ਸ਼ਾਮਲ ਨਹੀਂ ਕੀਤੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ</translation> <translation id="7652954539215530680">ਇੱਕ ਪਿੰਨ ਬਣਾਓ</translation> -<translation id="7653295403398566475">ਕਿਸੇ ਸਾਈਟ ਵੱਲੋਂ ਤੁਹਾਡੇ ਕੈਮਰੇ ਦੀ ਸਥਿਤੀ ਜਾਂ ਤੁਹਾਡੇ ਕਮਰੇ ਦੀ ਰੂਪ-ਰੇਖਾ ਜਾਣਨ ਵੇਲੇ ਪੁੱਛੋ</translation> +<translation id="7653295403398566475">ਕਿਸੇ ਸਾਈਟ ਵੱਲੋਂ ਤੁਹਾਡੇ ਕੈਮਰੇ ਦੀ ਸਥਿਤੀ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਜਾਂ ਤੁਹਾਡੇ ਕਮਰੇ ਨੂੰ ਮਾਪਣ ਵੇਲੇ ਪੁੱਛੋ</translation> <translation id="7654941827281939388">ਇਹ ਖਾਤਾ ਪਹਿਲਾਂ ਹੀ ਇਸ ਕੰਪਿਊਟਰ 'ਤੇ ਵਰਤਿਆ ਜਾ ਰਿਹਾ ਹੈ।</translation> <translation id="7658239707568436148">ਰੱਦ ਕਰੋ</translation> <translation id="7659584679870740384">ਤੁਸੀਂ ਇਹ ਡੀਵਾਈਸ ਵਰਤਣ ਲਈ ਅਧਿਕਾਰਿਤ ਨਹੀਂ ਹੋ। ਕਿਰਪਾ ਕਰਕੇ ਸਾਈਨ-ਇਨ ਸੰਬੰਧੀ ਇਜਾਜ਼ਤ ਲਈ ਡੀਵਾਈਸ ਪ੍ਰਬੰਧਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।</translation> @@ -5550,7 +5546,6 @@ <translation id="8794025342371547160">ਪ੍ਰਤਿਬੰਧਿਤ IP</translation> <translation id="879413103056696865">ਹੌਟਸਪੌਟ ਚਾਲੂ ਹੋਣ 'ਤੇ, ਤੁਹਾਡਾ <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">ਨਵੀਂ Window</translation> -<translation id="8797086401386164142">ਪ੍ਰਿੰਟ ਸਰਵਰ ਤੋਂ <ph name="NUM_PRINTERS" /> ਪ੍ਰਿੰਟਰ ਮਿਲੇ।</translation> <translation id="8797459392481275117">ਕਦੇ ਵੀ ਇਸ ਸਾਈਟ ਦਾ ਅਨੁਵਾਦ ਨਾ ਕਰੋ</translation> <translation id="8798099450830957504">ਪੂਰਵ-ਨਿਰਧਾਰਤ</translation> <translation id="8798441408945964110">ਪ੍ਰਦਾਨਕ ਦਾ ਨਾਮ</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb index 017940d..377244f 100644 --- a/chrome/app/resources/generated_resources_pl.xtb +++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Wczytuję podgląd</translation> <translation id="1032605640136438169">Zapoznaj się z ich nową wersją</translation> <translation id="103279545524624934">Aby uruchomić aplikacje na Androida, zwolnij miejsce na dysku.</translation> -<translation id="1033343386521881354">Znaleziono jedną drukarkę na serwerze druku.</translation> <translation id="1033780634303702874">Dostęp do urządzeń szeregowych</translation> <translation id="1034942643314881546">Ilustracja: włączanie ADB w celu utworzenia aplikacji</translation> <translation id="1036348656032585052">Wyłącz</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Aby zamknąć pełny ekran, naciśnij |<ph name="ACCELERATOR" />|</translation> <translation id="1038168778161626396">Tylko szyfrowanie</translation> <translation id="1039337018183941703">Nieprawidłowy lub uszkodzony plik</translation> -<translation id="1039850285407663109">Wybrany plik jest nieznany i może być niebezpieczny. Zanim go otworzysz, najlepiej go przeskanuj.</translation> <translation id="1041175011127912238">Ta strona nie odpowiada</translation> <translation id="1041263367839475438">Dostępne urządzenia</translation> <translation id="1042174272890264476">Twój komputer zawiera również wbudowaną bibliotekę RLZ <ph name="SHORT_PRODUCT_NAME" />. Przypisuje ona powtarzalny, nieumożliwiający identyfikacji użytkownika tag służący do monitorowania wyszukiwań i używania <ph name="SHORT_PRODUCT_NAME" /> w ramach określonej kampanii promocyjnej. Etykiety te czasami pojawiają się w zapytaniach wyszukiwarki Google w <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Ufaj temu certyfikatowi przy identyfikowaniu producentów oprogramowania</translation> <translation id="1861262398884155592">Ten folder jest pusty</translation> <translation id="1863182668524159459">Nie znaleziono portów szeregowych</translation> -<translation id="1863552924692672565">Plik <ph name="FILE_NAME" /> jest nieznany. Aby zminimalizować ryzyko, przeskanuj go.</translation> <translation id="1864111464094315414">Zaloguj się</translation> <translation id="1864400682872660285">Chłodniejsze</translation> <translation id="1864454756846565995">Urządzenie USB-C (tylny port)</translation> @@ -4025,7 +4022,6 @@ <translation id="6678717876183468697">URL zapytania</translation> <translation id="6680442031740878064">Dostępne: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Szybkość</translation> -<translation id="6681301928961274620">Nie znaleziono żadnej drukarki na serwerze druku.</translation> <translation id="6681668084120808868">Zrób zdjęcie</translation> <translation id="6681964764822470072">Aplikacja „<ph name="APP_NAME" />” zostanie odinstalowana.</translation> <translation id="668599234725812620">Otwórz Google Play</translation> @@ -5555,7 +5551,6 @@ <translation id="8794025342371547160">IP z ograniczonym dostępem</translation> <translation id="879413103056696865">Gdy hotspot jest włączony, <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Nowe okno</translation> -<translation id="8797086401386164142">Wykryto drukarki (<ph name="NUM_PRINTERS" />) z serwera druku.</translation> <translation id="8797459392481275117">Nigdy nie tłumacz tej strony</translation> <translation id="8798099450830957504">Domyślny</translation> <translation id="8798441408945964110">Nazwa dostawcy</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index 80189c15..25f8b34 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Carregando visualização</translation> <translation id="1032605640136438169">Leia os novos termos</translation> <translation id="103279545524624934">Libere espaço em disco para iniciar apps Android.</translation> -<translation id="1033343386521881354">1 impressora encontrada no servidor de impressão.</translation> <translation id="1033780634303702874">Acessar seus dispositivos de série</translation> <translation id="1034942643314881546">Ativando adb para criar ilustração de apps</translation> <translation id="1036348656032585052">Desativar</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Pressione |<ph name="ACCELERATOR" />| para sair do modo tela cheia</translation> <translation id="1038168778161626396">Somente codificar</translation> <translation id="1039337018183941703">Arquivo inválido ou corrompido</translation> -<translation id="1039850285407663109">O arquivo selecionado é desconhecido e pode ser perigoso. Verifique-o antes de abrir.</translation> <translation id="1041175011127912238">Esta página não está respondendo</translation> <translation id="1041263367839475438">Dispositivos disponíveis</translation> <translation id="1042174272890264476">Seu computador já vem com a biblioteca RLZ do <ph name="SHORT_PRODUCT_NAME" /> integrada. O RLZ atribui uma tag não exclusiva e sem identificação pessoal para medir as pesquisas e o uso do <ph name="SHORT_PRODUCT_NAME" /> gerados por uma campanha promocional específica. Esses marcadores às vezes aparecem em consultas da Pesquisa Google no <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Confiar neste certificado para a identificação de criadores do software</translation> <translation id="1861262398884155592">Esta pasta está vazia</translation> <translation id="1863182668524159459">Nenhuma porta serial encontrada</translation> -<translation id="1863552924692672565">O arquivo <ph name="FILE_NAME" /> é desconhecido. Verifique-o para minimizar os riscos.</translation> <translation id="1864111464094315414">Login</translation> <translation id="1864400682872660285">Mais frias</translation> <translation id="1864454756846565995">Dispositivo USB-C (porta traseira)</translation> @@ -4027,7 +4024,6 @@ <translation id="6678717876183468697">URL de consulta</translation> <translation id="6680442031740878064">Disponível: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Velocidade</translation> -<translation id="6681301928961274620">Não foram encontradas impressoras no servidor.</translation> <translation id="6681668084120808868">Tirar foto</translation> <translation id="6681964764822470072">O app "<ph name="APP_NAME" />" será desinstalado.</translation> <translation id="668599234725812620">Abrir o Google Play</translation> @@ -5557,7 +5553,6 @@ <translation id="8794025342371547160">IP restrito</translation> <translation id="879413103056696865">Enquanto o ponto de acesso estiver ativado, seu <ph name="PHONE_NAME" /> vai:</translation> <translation id="8795916974678578410">Nova janela</translation> -<translation id="8797086401386164142"><ph name="NUM_PRINTERS" /> impressoras encontradas no servidor de impressão.</translation> <translation id="8797459392481275117">Nunca traduzir este site</translation> <translation id="8798099450830957504">Padrão</translation> <translation id="8798441408945964110">Nome do provedor</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb index 267d9a6a..17be1196 100644 --- a/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">A carregar a pré-visualização</translation> <translation id="1032605640136438169">Reveja os novos termos.</translation> <translation id="103279545524624934">Liberte espaço em disco para iniciar as aplicações para Android.</translation> -<translation id="1033343386521881354">Foi encontrada 1 impressora do servidor de impressão.</translation> <translation id="1033780634303702874">Aceder aos dispositivos de série</translation> <translation id="1034942643314881546">Ativar o adb para criar a ilustração das aplicações</translation> <translation id="1036348656032585052">Desativar</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Premir |<ph name="ACCELERATOR" />| para sair do ecrã inteiro</translation> <translation id="1038168778161626396">Cifrar apenas</translation> <translation id="1039337018183941703">Ficheiro inválido ou danificado</translation> -<translation id="1039850285407663109">O ficheiro selecionado é desconhecido e pode ser perigoso. Pondere analisar este ficheiro antes de o abrir.</translation> <translation id="1041175011127912238">Esta página não está a responder.</translation> <translation id="1041263367839475438">Dispositivos disponíveis</translation> <translation id="1042174272890264476">O seu computador também tem a biblioteca RLZ de <ph name="SHORT_PRODUCT_NAME" /> incorporada. A RLZ atribui uma etiqueta não exclusiva e não identificável a nível pessoal para medir as pesquisas e a utilização de <ph name="SHORT_PRODUCT_NAME" /> impulsionada por uma campanha promocional específica. Estas etiquetas por vezes aparecem em consultas da Pesquisa Google em <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Confiar neste certificado para identificar fabricantes de software</translation> <translation id="1861262398884155592">Esta pasta está vazia</translation> <translation id="1863182668524159459">Nenhuma porta de série encontrada.</translation> -<translation id="1863552924692672565">O ficheiro <ph name="FILE_NAME" /> é desconhecido. Analise-o para minimizar o risco.</translation> <translation id="1864111464094315414">Início de sessão</translation> <translation id="1864400682872660285">Mais frio</translation> <translation id="1864454756846565995">Dispositivo USB-C (porta traseira)</translation> @@ -4026,7 +4023,6 @@ <translation id="6678717876183468697">URL de consulta</translation> <translation id="6680442031740878064">Disponível: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Classificar</translation> -<translation id="6681301928961274620">Não foram encontradas quaisquer impressoras do servidor de impressão.</translation> <translation id="6681668084120808868">Tirar foto</translation> <translation id="6681964764822470072">O "<ph name="APP_NAME" />" será desinstalado.</translation> <translation id="668599234725812620">Abrir o Google Play</translation> @@ -5555,7 +5551,6 @@ <translation id="8794025342371547160">IP restrito</translation> <translation id="879413103056696865">Enquanto a zona Wi-Fi estiver ativada, o <ph name="PHONE_NAME" /> irá:</translation> <translation id="8795916974678578410">Nova janela</translation> -<translation id="8797086401386164142">Foram encontradas <ph name="NUM_PRINTERS" /> impressoras do servidor de impressão.</translation> <translation id="8797459392481275117">Nunca traduzir este site</translation> <translation id="8798099450830957504">Predefinição</translation> <translation id="8798441408945964110">Nome do fornecedor</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb index 44ae20c9..fba8bbb 100644 --- a/chrome/app/resources/generated_resources_ro.xtb +++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Se încarcă previzualizarea</translation> <translation id="1032605640136438169">Consultă noile condiții</translation> <translation id="103279545524624934">Eliberează spațiu pe disc pentru a lansa aplicații Android.</translation> -<translation id="1033343386521881354">S-a găsit o imprimantă de la serverul de imprimare.</translation> <translation id="1033780634303702874">Accesează dispozitivele seriale</translation> <translation id="1034942643314881546">Se activează ADB pentru crearea ilustrației aplicației</translation> <translation id="1036348656032585052">Dezactivează</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Apasă pe |<ph name="ACCELERATOR" />| pentru a ieși din ecranul complet</translation> <translation id="1038168778161626396">Numai cifrare</translation> <translation id="1039337018183941703">Fișier nevalid sau deteriorat</translation> -<translation id="1039850285407663109">Fișierul selectat este necunoscut și poate fi periculos. Scanează înainte de a deschide acest fișier.</translation> <translation id="1041175011127912238">Pagina nu răspunde</translation> <translation id="1041263367839475438">Dispozitive disponibile</translation> <translation id="1042174272890264476">Computerul este dotat, de asemenea, cu o bibliotecă RLZ încorporată, oferită de <ph name="SHORT_PRODUCT_NAME" />. Biblioteca RLZ atribuie o etichetă non-unică și care nu vă identifică în mod personal, pentru a măsura căutările și modul în care este utilizat <ph name="SHORT_PRODUCT_NAME" /> în funcție de o anumită campanie promoțională. Aceste etichete pot apărea uneori în interogările Căutării Google din <ph name="PRODUCT_NAME" />.</translation> @@ -153,7 +151,7 @@ <translation id="1197979282329025000">A apărut o eroare la preluarea caracteristicilor imprimantei <ph name="PRINTER_NAME" />. Această imprimantă nu a putut fi înregistrată la <ph name="CLOUD_PRINT_NAME" />.</translation> <translation id="119944043368869598">Șterge-le pe toate</translation> <translation id="1201402288615127009">Înainte</translation> -<translation id="1202556750060561551">Toate datele și cookie-urile stocate de <ph name="SITE_GROUP_NAME" /> și de site-urile subordonate vor fi șterse.</translation> +<translation id="1202556750060561551">Toate datele și cookie-urile stocate de <ph name="SITE_GROUP_NAME" /> și de site-urile subordonate, precum și aplicațiile instalate asociate vor fi șterse.</translation> <translation id="1202596434010270079">Aplicația de tip chioșc a fost actualizată. Scoate stickul USB.</translation> <translation id="120368089816228251">Notă muzicală</translation> <translation id="1205489148908752564">Citește și schimbă utilizatorii trecuți în lista albă</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Ai încredere în acest certificat pentru a identifica furnizorii de software</translation> <translation id="1861262398884155592">Acest dosar este gol</translation> <translation id="1863182668524159459">Nu s-a găsit niciun port serial</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> este necunoscut. Scanează fișierul pentru a minimaliza riscul.</translation> <translation id="1864111464094315414">Conectați-vă</translation> <translation id="1864400682872660285">Mai rece</translation> <translation id="1864454756846565995">Dispozitiv USB-C (portul din spate)</translation> @@ -1765,7 +1762,7 @@ <translation id="3448492834076427715">Actualizează contul</translation> <translation id="3449839693241009168">Apasă pe <ph name="SEARCH_KEY" /> pentru a trimite comenzi la <ph name="EXTENSION_NAME" /></translation> <translation id="3450157232394774192">Procentaj de ocupare în starea inactivă</translation> -<translation id="3451332697983754369">Sincronizează <ph name="DEVICE_TYPE" /></translation> +<translation id="3451332697983754369">Sincronizează dispozitivul <ph name="DEVICE_TYPE" /></translation> <translation id="3453612417627951340">Necesită autorizare</translation> <translation id="3454157711543303649">Activarea a fost finalizată</translation> <translation id="3454213325559396544">Aceasta este cea mai recentă actualizare automată de software și securitate pentru acest dispozitiv <ph name="DEVICE_TYPE" />. Pentru a primi actualizări viitoare, fă upgrade la un model mai nou.</translation> @@ -2718,7 +2715,7 @@ <translation id="480990236307250886">Deschide pagina de pornire</translation> <translation id="4813136279048157860">Imaginile mele</translation> <translation id="4813512666221746211">Eroare de rețea</translation> -<translation id="4814378367953456825">Introdu un nume pentru amprenta digitală</translation> +<translation id="4814378367953456825">Introdu un nume pentru amprentă</translation> <translation id="4820236583224459650">Setează ca tichet activ</translation> <translation id="4821935166599369261">&Analizare activată</translation> <translation id="4823484602432206655">Citește și modifică setările pentru dispozitiv și pentru utilizator</translation> @@ -2765,7 +2762,7 @@ <translation id="4876895919560854374">Blochează și deblochează ecranul</translation> <translation id="4877276003880815204">Inspectează elementele</translation> <translation id="4878653975845355462">Administratorul a dezactivat fundalurile personalizate</translation> -<translation id="4878718769565915065">Nu s-a putut adăuga o amprentă digitală la cheia de securitate</translation> +<translation id="4878718769565915065">Nu s-a putut adăuga o amprentă la cheia de securitate</translation> <translation id="4879491255372875719">Automat (prestabilit)</translation> <translation id="4880328057631981605">Nume punct de acces</translation> <translation id="4880827082731008257">Caută în istoric</translation> @@ -4025,7 +4022,6 @@ <translation id="6678717876183468697">Adresa URL a interogării</translation> <translation id="6680442031740878064">Spațiu disponibil: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Ritmul</translation> -<translation id="6681301928961274620">Nu s-au găsit imprimante de la serverul de imprimare.</translation> <translation id="6681668084120808868">Fotografiază</translation> <translation id="6681964764822470072">Aplicația „<ph name="APP_NAME" />” va fi dezinstalată.</translation> <translation id="668599234725812620">Deschide Google Play</translation> @@ -4622,7 +4618,7 @@ <translation id="7513029293694390567">Te conectezi automat la site-uri folosind datele de conectare stocate. Dacă funcția este dezactivată, ți se va solicita confirmarea de fiecare dată înainte de a te conecta la un site.</translation> <translation id="7514239104543605883">Copiază pe dispozitiv</translation> <translation id="7514365320538308">Descarcă</translation> -<translation id="7520766081042531487">Portal Incognito: <ph name="SUBFRAME_SITE" /></translation> +<translation id="7520766081042531487">Portal incognito: <ph name="SUBFRAME_SITE" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7522255036471229694">Rostește „Ok Google”</translation> <translation id="7525067979554623046">Creați</translation> @@ -5555,7 +5551,6 @@ <translation id="8794025342371547160">Adresă IP restricționată</translation> <translation id="879413103056696865">Cât timp hotspotul este activat, <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Fereastră nouă</translation> -<translation id="8797086401386164142">S-au găsit <ph name="NUM_PRINTERS" /> imprimante de la serverul de imprimare.</translation> <translation id="8797459392481275117">Nu traduce niciodată acest site</translation> <translation id="8798099450830957504">Prestabilit</translation> <translation id="8798441408945964110">Numele furnizorului</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb index b65ceaa..9ab9c27 100644 --- a/chrome/app/resources/generated_resources_ru.xtb +++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Загрузка данных для предварительного просмотра</translation> <translation id="1032605640136438169">Просим вас ознакомиться с изменениями.</translation> <translation id="103279545524624934">Чтобы запускать Android-приложения, освободите пространство на диске.</translation> -<translation id="1033343386521881354">На сервере печати найден 1 принтер.</translation> <translation id="1033780634303702874">Доступ к последовательным устройствам</translation> <translation id="1034942643314881546">Включение ADB для создания иллюстраций</translation> <translation id="1036348656032585052">Отключить</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Чтобы выйти из полноэкранного режима, нажмите |<ph name="ACCELERATOR" />|</translation> <translation id="1038168778161626396">Только расшифровка</translation> <translation id="1039337018183941703">Файл поврежден или недействителен</translation> -<translation id="1039850285407663109">Выбранный файл может представлять опасность. Рекомендуем проверить его, прежде чем открывать.</translation> <translation id="1041175011127912238">Страница не отвечает</translation> <translation id="1041263367839475438">Доступные устройства</translation> <translation id="1042174272890264476">В ваш компьютер встроена библиотека RLZ <ph name="SHORT_PRODUCT_NAME" />. RLZ присваивает компьютеру неуникальную и не позволяющую идентифицировать пользователя метку, с помощью которой мы можем оценить количество запросов и статистику использования этого продукта (<ph name="SHORT_PRODUCT_NAME" />) по результатам рекламных кампаний. Иногда метки могут включаться в поисковые запросы, сделанные в этом продукте (<ph name="PRODUCT_NAME" />).</translation> @@ -638,7 +636,6 @@ <translation id="1858585891038687145">Доверять этому сертификату при идентификации производителей ПО</translation> <translation id="1861262398884155592">Папка пуста</translation> <translation id="1863182668524159459">Последовательные порты не найдены.</translation> -<translation id="1863552924692672565">Файл "<ph name="FILE_NAME" />" неизвестен. Проверьте его, чтобы свести риск к минимуму.</translation> <translation id="1864111464094315414">Вход</translation> <translation id="1864400682872660285">Холоднее</translation> <translation id="1864454756846565995">Устройство USB-C (порт сзади)</translation> @@ -4023,7 +4020,6 @@ <translation id="6678717876183468697">URL запроса</translation> <translation id="6680442031740878064">Доступно: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Скорость речи</translation> -<translation id="6681301928961274620">На сервере печати принтеры не найдены.</translation> <translation id="6681668084120808868">Сфотографировать</translation> <translation id="6681964764822470072">Приложение "<ph name="APP_NAME" />" будет удалено.</translation> <translation id="668599234725812620">Открыть Google Play</translation> @@ -4514,7 +4510,7 @@ <translation id="7360233684753165754">Печать <ph name="PAGE_NUMBER" /> стр. на принтере <ph name="PRINTER_NAME" /></translation> <translation id="7361297102842600584">Нажмите правой кнопкой мыши, чтобы запустить плагин "<ph name="PLUGIN_NAME" />"</translation> <translation id="7363117941401515667">Обновлено <ph name="HOURS" /> ч. назад</translation> -<translation id="7364591875953874521">Расширения, запросившие право на доступ</translation> +<translation id="7364591875953874521">Расширения, запросившие доступ</translation> <translation id="7364796246159120393">Выберите файл</translation> <translation id="7366415735885268578">Добавление сайта</translation> <translation id="7366909168761621528">Данные о работе в браузере</translation> @@ -5552,7 +5548,6 @@ <translation id="8794025342371547160">Ограниченный IP</translation> <translation id="879413103056696865">Когда вы включите точку доступа, устройство "<ph name="PHONE_NAME" />":</translation> <translation id="8795916974678578410">Новое окно</translation> -<translation id="8797086401386164142">Найдено принтеров на сервере печати: <ph name="NUM_PRINTERS" />.</translation> <translation id="8797459392481275117">Никогда не переводить этот сайт</translation> <translation id="8798099450830957504">По умолчанию</translation> <translation id="8798441408945964110">Название провайдера</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb index b984499..f1acd79c5 100644 --- a/chrome/app/resources/generated_resources_si.xtb +++ b/chrome/app/resources/generated_resources_si.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">පෙර දැක්ම පූර්ණය වෙමින්</translation> <translation id="1032605640136438169">නව නියම සමාලෝචන කරන්න</translation> <translation id="103279545524624934">Android යෙදුම් දියත් කිරීමට තැටි ඉඩ නිදහස් කර ගන්න.</translation> -<translation id="1033343386521881354">මුද්රණ සේවාදායකයෙන් 1 මුද්රකකයක් හමු විය.</translation> <translation id="1033780634303702874">ඔබගේ අනුක්රමික උපාංග වෙත ප්රවේශ වන්න</translation> <translation id="1034942643314881546">යෙදුම් රූප සටහන සෑදීමට adb සබල කෙරේ</translation> <translation id="1036348656032585052">ක්රියා විරහිතය</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">පූර්ණ තිරයෙන් පිටවීමට |<ph name="ACCELERATOR" />| ඔබන්න</translation> <translation id="1038168778161626396">Encipher පමණි</translation> <translation id="1039337018183941703">වලංගු නොවන හෝ දූෂිත ගොනුවකි</translation> -<translation id="1039850285407663109">තේරූ ගොනුව නොදන්නා අතර, අනතුරුදායක විය හැක. මෙම ගොනුව විවෘත කිරීමට පෙර ස්කෑන් කිරීම සලකා බලන්න.</translation> <translation id="1041175011127912238">මෙම පිටුව ප්රතිචාර නොදක්වයි</translation> <translation id="1041263367839475438">තිබෙන උපාංග</translation> <translation id="1042174272890264476">ඔබේ පරිගණකය අැතුළතින් සවි කළ <ph name="SHORT_PRODUCT_NAME" />හි RLZ පුස්තකාලයද සමඟ පැමිණේ. RLZ විසින් විශේෂ ප්රවර්ධනාත්මක ව්යාපාරයක් මඟින් ධාවනය වන සෙවීම් සහ <ph name="SHORT_PRODUCT_NAME" /> භාවිතය මැනීම සදහා අසමසම නොවන, පුද්ගලික නොවන ලෙස හදුනාගත හැකි ටැග් ඒකක් පවරයි. මෙම ලේබල සමහර විට Google සෙවීම් විමසුම්වල දිස් වේ <ph name="PRODUCT_NAME" />.</translation> @@ -636,7 +634,6 @@ <translation id="1858585891038687145">මෘදුකාංග සාදන්නන් හඳුනා ගැනීම සඳහා මෙම සහතිකය මත විශ්වාසය තබන්න</translation> <translation id="1861262398884155592">මෙම ෆෝල්ඩරය හිස්ය</translation> <translation id="1863182668524159459">අනුක්රමික තොට කිසිවක් හමු නොවිය</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> නොදනී. අවදානම අවම කිරීමට ගොනුව ස්කෑන් කරන්න.</translation> <translation id="1864111464094315414">පිවිසෙන්න</translation> <translation id="1864400682872660285">ශ්රීතකය</translation> <translation id="1864454756846565995">USB-C උපාංගය (පසුපස තොට)</translation> @@ -4022,7 +4019,6 @@ <translation id="6678717876183468697">විමසුම් URL</translation> <translation id="6680442031740878064">ලබා ගත හැකි: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">ඇගයීම</translation> -<translation id="6681301928961274620">මුද්රණ සේවාදායකයෙන් කිසිම මුද්රකයක් සොයා ගත්තේ නැත.</translation> <translation id="6681668084120808868">ඡායාරූපයක් ලබාගන්න</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" අස්ථාපනය කරනු ඇත.</translation> <translation id="668599234725812620">Google Play විවෘත කරන්න</translation> @@ -5550,7 +5546,6 @@ <translation id="8794025342371547160">සීමා කළ IP</translation> <translation id="879413103056696865">හොට්ස්පොට් ක්රියාත්මක අතරතුර, ඔබේ <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">නව කවුළුව</translation> -<translation id="8797086401386164142">මුද්රණ සේවාදායකයෙන් මුද්රක <ph name="NUM_PRINTERS" /> ක් සොයා ගත්තා.</translation> <translation id="8797459392481275117">මෙම අඩවිය කිසි විට පරිවර්තනය නොකරන්න</translation> <translation id="8798099450830957504">පෙරනිමි</translation> <translation id="8798441408945964110">සපයන්නාගේ නම</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb index a774772..c6b8c75 100644 --- a/chrome/app/resources/generated_resources_sk.xtb +++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Načítava sa ukážka</translation> <translation id="1032605640136438169">Prečítajte si nové zmluvné podmienky</translation> <translation id="103279545524624934">Ak chcete spúšťať aplikácie pre Android, uvoľnite miesto na disku.</translation> -<translation id="1033343386521881354">Na tlačovom serveri bola nájdená 1 tlačiareň.</translation> <translation id="1033780634303702874">Mať prístup k zariadeniam pripojeným cez sériový port</translation> <translation id="1034942643314881546">Aktivovanie nástroja ADB na vytváranie obrázkov aplikácií</translation> <translation id="1036348656032585052">Vypnúť</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Režim celej obrazovky ukončíte stlačením klávesa |<ph name="ACCELERATOR" />|</translation> <translation id="1038168778161626396">Len zašifrovanie</translation> <translation id="1039337018183941703">Neplatný alebo poškodený súbor</translation> -<translation id="1039850285407663109">Vybraný súbor je neznámy a môže byť nebezpečný. Než ho otvoríte, zvážte jeho kontrolu.</translation> <translation id="1041175011127912238">Táto stránka nereaguje</translation> <translation id="1041263367839475438">Dostupné zariadenia</translation> <translation id="1042174272890264476">Váš počítač má tiež vstavanú knižnicu RLZ prehliadača <ph name="SHORT_PRODUCT_NAME" />. Knižnica RLZ priradí nejedinečnú značku, pomocou ktorej sa nedá zistiť totožnosť, na meranie výsledkov a použitia prehliadača <ph name="SHORT_PRODUCT_NAME" /> vyplývajúceho z konkrétnej propagačnej kampane. Tieto menovky sa niekedy zobrazujú v dopytoch Vyhľadávania Google v prehliadači <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Dôverovať tomuto certifikátu na identifikáciu tvorcov softvéru</translation> <translation id="1861262398884155592">Tento priečinok je prázdny</translation> <translation id="1863182668524159459">Nenašli sa žiadne sériové porty</translation> -<translation id="1863552924692672565">Súbor <ph name="FILE_NAME" /> je neznámy. Ak chcete minimalizovať riziko, skontrolujte ho.</translation> <translation id="1864111464094315414">Prihlásiť sa</translation> <translation id="1864400682872660285">Chladnejšie</translation> <translation id="1864454756846565995">Zariadenie USB-C (port vzadu)</translation> @@ -1372,7 +1369,7 @@ <translation id="2865919525181940183">Snímky programov, ktoré sú momentálne na obrazovke</translation> <translation id="286674810810214575">Kontrolujú sa zdroje napájania…</translation> <translation id="2867768963760577682">Otvoriť ako pevnú kartu</translation> -<translation id="2868184003987917410">Nepovoliť webom používať vaše zariadenia virtuálnej reality a spojené údaje</translation> +<translation id="2868184003987917410">Nepovoliť webom používať vaše zariadenia a údaje virtuálnej reality</translation> <translation id="2868746137289129307">Toto rozšírenie je zastarané a je zakázané podnikovým pravidlom. Možno bude opäť automaticky povolené, keď bude k dispozícii novšia verzia.</translation> <translation id="2870560284913253234">Web</translation> <translation id="2870909136778269686">Prebieha aktualizácia...</translation> @@ -2515,7 +2512,7 @@ <translation id="4501530680793980440">Potvrdiť odstránenie</translation> <translation id="4502423230170890588">Odstrániť z tohto zariadenia</translation> <translation id="4504940961672722399">Rozšírenie použijete stlačením klávesov <ph name="EXTENSION_SHORTCUT" />.</translation> -<translation id="4507164039066603071">Nepovoliť webom používať polohu kamery alebo mapovať vašu miestnosť</translation> +<translation id="4507164039066603071">Nepovoliť webom používať polohu kamery ani mapovať vašu miestnosť</translation> <translation id="4508051413094283164">Otvoriť všetky v okne inkognito</translation> <translation id="4508265954913339219">Aktivácia zlyhala</translation> <translation id="4508765956121923607">&Zobraziť zdrojový kód</translation> @@ -4024,7 +4021,6 @@ <translation id="6678717876183468697">Webová adresa dopytu</translation> <translation id="6680442031740878064">K dispozícii: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Ohodnotiť</translation> -<translation id="6681301928961274620">Na tlačovom serveri neboli nájdené žiadne tlačiarne.</translation> <translation id="6681668084120808868">Zaznamenať fotografiu</translation> <translation id="6681964764822470072">Aplikácia <ph name="APP_NAME" /> bude odinštalovaná.</translation> <translation id="668599234725812620">Otvoriť Google Play</translation> @@ -4274,7 +4270,7 @@ <translation id="703001695939087067">Vstúpili ste do režimu prehľadu okien. Môžete ich prechádzať pomocou klávesa Tab.</translation> <translation id="7031608529463141342"><ph name="WINDOW_TITLE" /> – sériový port je pripojený</translation> <translation id="7031962166228839643">Model TPM sa pripravuje, čakajte (môže to trvať niekoľko minút)...</translation> -<translation id="7034615910652881882">Opýtať sa, keď chce web používať vaše zariadenia virtuálnej reality a spojené údaje</translation> +<translation id="7034615910652881882">Opýtať sa, keď chce web používať vaše zariadenia a údaje virtuálnej reality.</translation> <translation id="7037509989619051237">Ukážka textu</translation> <translation id="7039326228527141150">Pristupovať k zariadením USB od dodávateľa <ph name="VENDOR_NAME" /></translation> <translation id="7039912931802252762">Karta Smart Card – prihlásenie</translation> @@ -4572,7 +4568,7 @@ <translation id="7443806024147773267">Získajte prístup k svojim heslám, keď sa prihlásite do účtu Google</translation> <translation id="7444983668544353857">Zakázať zariadenie <ph name="NETWORKDEVICE" /></translation> <translation id="7448430327655618736">Inštalujte aplikácie automaticky</translation> -<translation id="7448625729116931228">Opýtať sa, keď chce web používať vaše zariadenia virtuálnej reality a spojené údaje</translation> +<translation id="7448625729116931228">Opýtať sa, keď chce web používať vaše zariadenia a údaje virtuálnej reality (odporúčané)</translation> <translation id="7450761244949417357">Otvára sa v prehliadači <ph name="ALTERNATIVE_BROWSER_NAME" /></translation> <translation id="7453008956351770337">Výberom tejto tlačiarne udeľujete nasledujúcemu rozšíreniu povolenie k tlačiarni pristupovať:</translation> <translation id="7454548535253569100">Portál: <ph name="SUBFRAME_SITE" /></translation> @@ -5553,7 +5549,6 @@ <translation id="8794025342371547160">Obmedzená adresa IP</translation> <translation id="879413103056696865">Keď je hotspot zapnutý, telefón <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Nové okno</translation> -<translation id="8797086401386164142">Na tlačovom serveri boli nájdené tlačiarne (<ph name="NUM_PRINTERS" />).</translation> <translation id="8797459392481275117">Tento web nikdy neprekladať</translation> <translation id="8798099450830957504">Predvolené</translation> <translation id="8798441408945964110">Názov poskytovateľa</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb index cf5f7b2..738db21 100644 --- a/chrome/app/resources/generated_resources_sl.xtb +++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Nalaganje predogleda</translation> <translation id="1032605640136438169">Preglejte nove pogoje</translation> <translation id="103279545524624934">Če želite zagnati aplikacije za Android, sprostite prostor na disku.</translation> -<translation id="1033343386521881354">V tiskalnem strežniku je bil najden 1 tiskalnik.</translation> <translation id="1033780634303702874">Dostop do serijskih naprav</translation> <translation id="1034942643314881546">Omogočanje orodja ADB za ustvarjanje ilustracij aplikacij</translation> <translation id="1036348656032585052">Izklop</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Pritisnite |<ph name="ACCELERATOR" />| za zapiranje celozaslonskega načina</translation> <translation id="1038168778161626396">Le šifriranje</translation> <translation id="1039337018183941703">Neveljavna ali poškodovana datoteka</translation> -<translation id="1039850285407663109">Izbrana datoteka je neznana in je morda nevarna. Preden jo odprete, razmislite o njenem pregledu.</translation> <translation id="1041175011127912238">Ta stran se ne odziva</translation> <translation id="1041263367839475438">Razpoložljive naprave</translation> <translation id="1042174272890264476">V vašem računalniku je tudi vgrajena knjižnica RLZ izdelka <ph name="SHORT_PRODUCT_NAME" />. RLZ za merjenje iskanj in uporabe izdelka <ph name="SHORT_PRODUCT_NAME" /> v okviru določene promocijske akcije dodeli neenolično oznako, ki ne omogoča osebne prepoznave. Te oznake so včasih v izdelku <ph name="PRODUCT_NAME" /> prikazane v iskalnih poizvedbah v Googlu.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Zaupaj temu potrdilu za prepoznavanje proizvajalcev programske opreme</translation> <translation id="1861262398884155592">Ta mapa je prazna</translation> <translation id="1863182668524159459">Ni serijskih vrat</translation> -<translation id="1863552924692672565">Datoteka <ph name="FILE_NAME" /> je neznana. Preglejte jo, če želite zmanjšati tveganje.</translation> <translation id="1864111464094315414">Prijava</translation> <translation id="1864400682872660285">Hladneje</translation> <translation id="1864454756846565995">Naprava USB-C (vrata zadaj)</translation> @@ -4027,7 +4024,6 @@ <translation id="6678717876183468697">URL poizvedbe</translation> <translation id="6680442031740878064">Na voljo: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Hitrost</translation> -<translation id="6681301928961274620">V tiskalnem strežniku ni bil najden noben tiskalnik.</translation> <translation id="6681668084120808868">Posnemi fotografijo</translation> <translation id="6681964764822470072">Aplikacija »<ph name="APP_NAME" />« bo odstranjena.</translation> <translation id="668599234725812620">Odpiranje Googla Play</translation> @@ -5557,7 +5553,6 @@ <translation id="8794025342371547160">Omejen IP</translation> <translation id="879413103056696865">Medtem ko je dostopna točka vklopljena, bo telefon <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Novo okno</translation> -<translation id="8797086401386164142">Število najdenih tiskalnikov v tiskalnem strežniku: <ph name="NUM_PRINTERS" />.</translation> <translation id="8797459392481275117">Nikoli ne prevedi tega spletnega mesta</translation> <translation id="8798099450830957504">Privzeto</translation> <translation id="8798441408945964110">Ime ponudnika</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb index 6a6857f..a59b58b2 100644 --- a/chrome/app/resources/generated_resources_sq.xtb +++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Po ngarkohet pamja paraprake...</translation> <translation id="1032605640136438169">Shqyrto kushtet e reja</translation> <translation id="103279545524624934">Liro hapësirë në disk për të nisur aplikacionet Android.</translation> -<translation id="1033343386521881354">U gjet 1 printer nga serveri i printimit.</translation> <translation id="1033780634303702874">Qasu në pajisjet e tua seriale</translation> <translation id="1034942643314881546">ADB-ja po aktivizohet për të krijuar ilustrimin e aplikacioneve</translation> <translation id="1036348656032585052">Çaktivizo</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Shtyp |<ph name="ACCELERATOR" />| për të dalë nga ekrani i plotë</translation> <translation id="1038168778161626396">Vetëm shifrues</translation> <translation id="1039337018183941703">Skedar i pavlefshëm ose i dëmtuar</translation> -<translation id="1039850285407663109">Skedari i zgjedhur është i panjohur dhe mund të jetë i rrezikshëm. Ki parasysh ta skanosh këtë skedar para se ta hapësh.</translation> <translation id="1041175011127912238">Kjo faqe nuk përgjigjet</translation> <translation id="1041263367839475438">Pajisjet që ofrohen</translation> <translation id="1042174272890264476">Kompjuteri yt vjen po ashtu me bibliotekën RLZ të <ph name="SHORT_PRODUCT_NAME" /> të integruar. Parametri RLZ cakton një etiketë jo unike, jo personalisht të identifikueshme për të matur kërkimet dhe përdorimin e <ph name="SHORT_PRODUCT_NAME" /> të nxitur nga një fushatë promocionale të veçantë. Këto etiketa ndonjëherë shfaqen në pyetjet e "Kërko me Google" në <ph name="PRODUCT_NAME" />.</translation> @@ -636,7 +634,6 @@ <translation id="1858585891038687145">Besoji kësaj certifikate për identifikimin e prodhuesve të softuerëve</translation> <translation id="1861262398884155592">Kjo dosje është bosh</translation> <translation id="1863182668524159459">Nuk u gjet asnjë portë seriale</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> është i panjohur. Skano skedarin për të minimizuar rrezikun.</translation> <translation id="1864111464094315414">Identifikimi</translation> <translation id="1864400682872660285">Më freskët</translation> <translation id="1864454756846565995">Pajisja USB-C (porta prapa)</translation> @@ -2513,7 +2510,7 @@ <translation id="4501530680793980440">Konfirmo heqjen</translation> <translation id="4502423230170890588">Hiq nga kjo pajisje</translation> <translation id="4504940961672722399">Përdore këtë shtesë duke klikuar këtë ikonë ose duke shtypur <ph name="EXTENSION_SHORTCUT" />.</translation> -<translation id="4507164039066603071">Mos lejo që sajtet të kenë qasje te pozicioni i kamerës ose të krijojnë një hartëd të dhomës sate</translation> +<translation id="4507164039066603071">Mos lejo që sajtet të kenë qasje te pozicioni i kamerës ose të krijojnë një hartë të dhomës sate</translation> <translation id="4508051413094283164">Hapi të gjitha në dritare "të fshehtë"</translation> <translation id="4508265954913339219">Aktivizimi dështoi</translation> <translation id="4508765956121923607">Shiko b&urimin</translation> @@ -4022,7 +4019,6 @@ <translation id="6678717876183468697">URL-ja e pyetjes</translation> <translation id="6680442031740878064">Në dispozicion: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Shpejtësia</translation> -<translation id="6681301928961274620">Nuk u gjet asnjë printer nga serveri i printimit.</translation> <translation id="6681668084120808868">Nxirr një fotografi</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" do të çinstalohet.</translation> <translation id="668599234725812620">Hap Google Play</translation> @@ -4570,7 +4566,7 @@ <translation id="7443806024147773267">Merr qasjen te fjalëkalimet e tua kur je identifikuar në "Llogarinë tënde të Google"</translation> <translation id="7444983668544353857">Çaktivizoje <ph name="NETWORKDEVICE" /></translation> <translation id="7448430327655618736">Instalo automatikisht aplikacionet</translation> -<translation id="7448625729116931228">Pyet kur një sajt dëshiron të ketë qasje te pajisjet e realitetit virtual/të dhënat e tua (rekomandohet)</translation> +<translation id="7448625729116931228">Pyet kur një sajt dëshiron të ketë qasje te pajisjet/të dhënat e tua të realitetit virtual (rekomandohet)</translation> <translation id="7450761244949417357">Po hapet në <ph name="ALTERNATIVE_BROWSER_NAME" /> tani</translation> <translation id="7453008956351770337">Duke zgjedhur këtë printer, po i jep shtesës së mëposhtme lejen për qasjen te printeri yt:</translation> <translation id="7454548535253569100">Portali: <ph name="SUBFRAME_SITE" /></translation> @@ -5550,7 +5546,6 @@ <translation id="8794025342371547160">Adresa IP e kufizuar</translation> <translation id="879413103056696865">Kur zona e qasjes për internet është aktive, telefoni yt <ph name="PHONE_NAME" /> do të:</translation> <translation id="8795916974678578410">Dritare e re</translation> -<translation id="8797086401386164142">U gjetën <ph name="NUM_PRINTERS" /> printerë nga serveri i printimit.</translation> <translation id="8797459392481275117">Asnjëherë mos e përkthe këtë sajt</translation> <translation id="8798099450830957504">I parazgjedhur</translation> <translation id="8798441408945964110">Emri i ofruesit</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index 92002a8..eb651ab 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Учитавање прегледа</translation> <translation id="1032605640136438169">Прегледајте нове услове</translation> <translation id="103279545524624934">Ослободите простор на диску да бисте покренули Android апликације.</translation> -<translation id="1033343386521881354">Пронашли смо 1 штампач са сервера за штампање.</translation> <translation id="1033780634303702874">Приступ серијским уређајима</translation> <translation id="1034942643314881546">Омогућавање ADB-а за прављење илустрација апликација</translation> <translation id="1036348656032585052">Искључи</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Притисните |<ph name="ACCELERATOR" />| да бисте изашли из режима целог екрана</translation> <translation id="1038168778161626396">Само шифруј</translation> <translation id="1039337018183941703">Неважећа или оштећена датотека</translation> -<translation id="1039850285407663109">Изабрана датотека је непозната и може да буде опасна. Предлажемо да скенирате ову датотеку пре отварања.</translation> <translation id="1041175011127912238">Ова страница не реагује</translation> <translation id="1041263367839475438">Доступни уређаји</translation> <translation id="1042174272890264476">Уз рачунар такође добијате уграђену RLZ библиотеку производа <ph name="SHORT_PRODUCT_NAME" />. RLZ додељује нејединствену ознаку помоћу које вас није могуће лично идентификовати да би измерио претраге и коришћење производа <ph name="SHORT_PRODUCT_NAME" /> који су подстакнути одређеном промотивном кампањом. Те ознаке се понекад приказују у упитима Google претраге у производу <ph name="PRODUCT_NAME" />.</translation> @@ -153,7 +151,7 @@ <translation id="1197979282329025000">Дошло је до грешке при преузимању могућности за штампач <ph name="PRINTER_NAME" />. Тај штампач није било могуће регистровати помоћу <ph name="CLOUD_PRINT_NAME" />.</translation> <translation id="119944043368869598">Обриши све</translation> <translation id="1201402288615127009">Даље</translation> -<translation id="1202556750060561551">Бришу се сви подаци и колачићи које чува <ph name="SITE_GROUP_NAME" />, сви сајтови у оквиру те групе и све инсталиране апликације.</translation> +<translation id="1202556750060561551">Бришу се сви подаци и колачићи које чува <ph name="SITE_GROUP_NAME" />, као и сви сајтови у оквиру те групе и све инсталиране апликације.</translation> <translation id="1202596434010270079">Киоск апликација је ажурирана. Уклоните USB меморију.</translation> <translation id="120368089816228251">Музичка нота</translation> <translation id="1205489148908752564">Читање и мењање корисника на белој листи</translation> @@ -636,7 +634,6 @@ <translation id="1858585891038687145">Овај сертификат је поуздан за идентификацију произвођача софтвера</translation> <translation id="1861262398884155592">Овај директоријум је празан</translation> <translation id="1863182668524159459">Нисмо пронашли ниједан серијски порт</translation> -<translation id="1863552924692672565">Датотека <ph name="FILE_NAME" /> је непозната. Скенирајте је да бисте свели ризик на минимум.</translation> <translation id="1864111464094315414">Пријављивање</translation> <translation id="1864400682872660285">Хладније</translation> <translation id="1864454756846565995">Уређај са USB прикључком типа C (задњи порт)</translation> @@ -4023,7 +4020,6 @@ <translation id="6678717876183468697">URL упита</translation> <translation id="6680442031740878064">Доступно: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Оцените</translation> -<translation id="6681301928961274620">Нисмо пронашли ниједан штампач са сервера за штампање.</translation> <translation id="6681668084120808868">Снимите фотографију</translation> <translation id="6681964764822470072">„<ph name="APP_NAME" />“ ће се деинсталирати.</translation> <translation id="668599234725812620">Отвори Google Play</translation> @@ -5553,7 +5549,6 @@ <translation id="8794025342371547160">Ограничени IP</translation> <translation id="879413103056696865">Када је хотспот укључен, <ph name="PHONE_NAME" /> ће:</translation> <translation id="8795916974678578410">Нови прозор</translation> -<translation id="8797086401386164142">Пронашли смо <ph name="NUM_PRINTERS" /> штампача са сервера за штампање.</translation> <translation id="8797459392481275117">Никад не преводи овај сајт</translation> <translation id="8798099450830957504">Подразумевано</translation> <translation id="8798441408945964110">Назив добављача</translation> @@ -5702,7 +5697,7 @@ <translation id="8985264973231822211">Последња активност: пре <ph name="DEVICE_LAST_ACTIVATED_TIME" /> дан/а</translation> <translation id="8986362086234534611">Заборави</translation> <translation id="8986494364107987395">Аутоматски шаљи Google-у статистичке податке о коришћењу и извештаје о отказивању</translation> -<translation id="8986651757229422279">Овим бришете све податке и колачиће које чува сајт <ph name="ORIGIN_NAME" /> и његова инсталирана апликација.</translation> +<translation id="8986651757229422279">Овим бришете све податке и колачиће које чувају сајт <ph name="ORIGIN_NAME" /> и његова инсталирана апликација.</translation> <translation id="8987927404178983737">Месец</translation> <translation id="8991520179165052608">Сајт може да користи микрофон</translation> <translation id="899403249577094719">Основна URL адреса за Netscape сертификат</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb index 58fe4735..5941351 100644 --- a/chrome/app/resources/generated_resources_sv.xtb +++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Läser in förhandsgranskning</translation> <translation id="1032605640136438169">Läs de nya villkoren</translation> <translation id="103279545524624934">Frigör diskutrymme om du vill starta Android-appar.</translation> -<translation id="1033343386521881354">1 skrivare från utskriftsservern hittades.</translation> <translation id="1033780634303702874">Få åtkomst till dina seriella enheter</translation> <translation id="1034942643314881546">Aktiverar adb för att skapa illustration av appar</translation> <translation id="1036348656032585052">Inaktivera</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Tryck på |<ph name="ACCELERATOR" />| för att stänga helskärmen</translation> <translation id="1038168778161626396">Endast chiffrering</translation> <translation id="1039337018183941703">Ogiltig eller skadad fil</translation> -<translation id="1039850285407663109">Den valda filen är okänd och kan vara skadlig. Vi rekommenderar att du genomsöker filen innan du öppnar den.</translation> <translation id="1041175011127912238">Sidan svarar inte</translation> <translation id="1041263367839475438">Tillgängliga enheter</translation> <translation id="1042174272890264476">Datorn har även RLZ-biblioteket för <ph name="SHORT_PRODUCT_NAME" /> inbyggt. RLZ tilldelar en icke-unik, icke-personligt identifierbar tagg för att mäta antalet sökningar och användningen av <ph name="SHORT_PRODUCT_NAME" /> som drivs av en viss reklamkampanj. Dessa etiketter visas ibland vid sökningar på Google i <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Lita på det här certifikatet för identifiering av programskapare</translation> <translation id="1861262398884155592">Mappen är tom</translation> <translation id="1863182668524159459">Ingen serieport hittades.</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> är okänd. Genomsök filen för att minska skaderisken.</translation> <translation id="1864111464094315414">Inloggning</translation> <translation id="1864400682872660285">Kallare</translation> <translation id="1864454756846565995">USB-C-enhet (bakre port)</translation> @@ -4025,7 +4022,6 @@ <translation id="6678717876183468697">Frågewebbadress</translation> <translation id="6680442031740878064">Tillgängligt: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Hastighet</translation> -<translation id="6681301928961274620">Inga skrivare från utskriftsservern hittades.</translation> <translation id="6681668084120808868">Ta foto</translation> <translation id="6681964764822470072"><ph name="APP_NAME" /> avinstalleras.</translation> <translation id="668599234725812620">Öppna Google Play</translation> @@ -5555,7 +5551,6 @@ <translation id="8794025342371547160">Begränsad IP</translation> <translation id="879413103056696865">När den trådlösa surfzonen är aktiverad sker följande i <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Nytt fönster</translation> -<translation id="8797086401386164142"><ph name="NUM_PRINTERS" /> skrivare från utskriftsservern hittades.</translation> <translation id="8797459392481275117">Översätt aldrig den här webbplatsen</translation> <translation id="8798099450830957504">Standard</translation> <translation id="8798441408945964110">Leverantörens namn</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb index 1ef9e18..15c9af08 100644 --- a/chrome/app/resources/generated_resources_sw.xtb +++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Inapakia nakala ya kuchungulia</translation> <translation id="1032605640136438169">Tafadhali pitia Sheria na Masharti mapya</translation> <translation id="103279545524624934">Futa maudhui katika hifadhi ya diski ili ufungue programu za Android.</translation> -<translation id="1033343386521881354">Imepata printa moja kutoka seva ya kuchapisha.</translation> <translation id="1033780634303702874">Fikia vifaa vyako tambulishi</translation> <translation id="1034942643314881546">Inawasha ADB ili kuweka michoro ya programu</translation> <translation id="1036348656032585052">Zima</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Bonyeza |<ph name="ACCELERATOR" />| ili uondoke kwenye skrini nzima</translation> <translation id="1038168778161626396">Usimabji Tu</translation> <translation id="1039337018183941703">Faili si sahihi au imeharibika</translation> -<translation id="1039850285407663109">Faili iliyochaguliwa haijulikani na huenda ni hatari. Tunakushauri uchanganue kabla ya kuifungua.</translation> <translation id="1041175011127912238">Ukurasa huu haufanyi kazi</translation> <translation id="1041263367839475438">Vifaa vinavyopatikana</translation> <translation id="1042174272890264476">Kompyuta yako pia huja na maktaba ya <ph name="SHORT_PRODUCT_NAME" /> ya RLZ iliyojengewa ndani. RLZ hutoa lebo isiyo ya kipekee, isiyotambulika kibinafsi ili kupima utafutaji na matumizi ya <ph name="SHORT_PRODUCT_NAME" /> yanayoendeshwa na kampeni husika ya ukwezaji. Lebo hizi wakati mwingine hutokea katika hoja za Huduma ya Tafuta na Google katika <ph name="PRODUCT_NAME" />.</translation> @@ -636,7 +634,6 @@ <translation id="1858585891038687145">Amini cheti hiki kwa kutambua watengenezaji programu</translation> <translation id="1861262398884155592">Folda hii haina chochote</translation> <translation id="1863182668524159459">Haikupata milango yoyote ya kuingiza</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> haijulikani. Changanua faili ili upunguze hatari.</translation> <translation id="1864111464094315414">Ingia</translation> <translation id="1864400682872660285">Isiyo angavu</translation> <translation id="1864454756846565995">Kifaa cha USB-C (mlango wa nyuma)</translation> @@ -4020,7 +4017,6 @@ <translation id="6678717876183468697">URL ya Hoja</translation> <translation id="6680442031740878064">Nafasi inayopatikana: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Kadiria</translation> -<translation id="6681301928961274620">Haikupata printa zozote kwenye seva ya kuchapisha.</translation> <translation id="6681668084120808868">Piga picha</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" itasakinishwa.</translation> <translation id="668599234725812620">Fungua Google Play</translation> @@ -5552,7 +5548,6 @@ <translation id="8794025342371547160">IP Iliyodhibitiwa</translation> <translation id="879413103056696865">Mtandaopepe wako ukiwa umewashwa, kifaa chako cha <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Dirisha Jipya</translation> -<translation id="8797086401386164142">Imepata printa <ph name="NUM_PRINTERS" /> kwenye seva ya kuchapisha.</translation> <translation id="8797459392481275117">Usitafsiri Tovuti Hii Kamwe</translation> <translation id="8798099450830957504">Chaguomsingi</translation> <translation id="8798441408945964110">Jina la mtoa huduma</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index fbb46b6..008d1a2 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -33,7 +33,6 @@ <translation id="1036982837258183574">முழுத்திரையிலிருந்து வெளியேற, |<ph name="ACCELERATOR" />|ஐ அழுத்தவும்</translation> <translation id="1038168778161626396">என்சைபர் மட்டுமே</translation> <translation id="1039337018183941703">தவறானது அல்லது சிதைந்த கோப்பு</translation> -<translation id="1039850285407663109">தேர்ந்தெடுத்த கோப்பு பற்றி தெரியவில்லை மற்றும் இது ஆபத்தானதாக இருக்கக்கூடும். இந்தக் கோப்பைத் திறப்பதற்கு முன்பு ஸ்கேன் செய்யவும்.</translation> <translation id="1041175011127912238">இந்தப் பக்கம் செயல்படவில்லை</translation> <translation id="1041263367839475438">கிடைக்கும் சாதனங்கள்</translation> <translation id="1042174272890264476">உள்ளிணைந்த <ph name="SHORT_PRODUCT_NAME" /> இன் RLZ நூலகமும் உங்கள் கம்ப்யூட்டரில் அமைந்துள்ளது. தேடல்களையும், குறிப்பிட்ட விளம்பரப் பிரச்சாரத்தால் இயக்கப்படும் <ph name="SHORT_PRODUCT_NAME" /> இன் ஆப்ஸையும் அளவிட தனிப்பட்டது அல்லாத, தனிப்பட்ட முறையில் அடையாளம் காண முடியாத குறியை RLZ ஒதுக்கும். சில சமயங்களில் இந்த லேபிள்கள் <ph name="PRODUCT_NAME" /> இன் Google தேடல் வினவல்களில் தோன்றும்.</translation> @@ -632,7 +631,6 @@ <translation id="1858585891038687145">மென்பொருள் தயாரிப்பாளர்களை அடையாளங்காண, இந்தச் சான்றிதழை நம்பு</translation> <translation id="1861262398884155592">இந்தக் கோப்புறையில் எதுவுமில்லை</translation> <translation id="1863182668524159459">சீரியல் போர்ட்டுகள் இல்லை</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> தெரியவில்லை. கோப்பை ஸ்கேன் செய்து ஆபத்தைக் குறையுங்கள்.</translation> <translation id="1864111464094315414">உள்நுழைவு</translation> <translation id="1864400682872660285">அதிக நீலம்</translation> <translation id="1864454756846565995">USB-C சாதனம் (பின்பக்கப் போர்ட்)</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index 300baaa..0f3d2f5 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -33,7 +33,6 @@ <translation id="1036982837258183574">పూర్తి స్క్రీన్ నుండి నిష్క్రమించడానికి |<ph name="ACCELERATOR" />| నొక్కండి</translation> <translation id="1038168778161626396">కోడ్ మాత్రమే</translation> <translation id="1039337018183941703">ఫైల్ చెల్లదు లేదా పాడైంది</translation> -<translation id="1039850285407663109">ఎంచుకున్న ఫైల్ తెలియనిది, అలాగే ప్రమాదకరం కావచ్చు. ఈ ఫైల్ను తెరిచే ముందు దీనిని స్కాన్ చేయడం పరిశీలించండి.</translation> <translation id="1041175011127912238">ఈ పేజీ ప్రతిస్పందించడం లేదు</translation> <translation id="1041263367839475438">అందుబాటులో ఉన్న పరికరాలు</translation> <translation id="1042174272890264476">మీ కంప్యూటర్లో కూడా <ph name="SHORT_PRODUCT_NAME" /> యొక్క అంతర్గత RLZ లైబ్రరీ ఉంటుంది. RLZ శోధనలను మరియు నిర్దిష్ట ప్రమోషనల్ ప్రచారం ద్వారా ఉపయోగించబడిన <ph name="SHORT_PRODUCT_NAME" /> వినియోగాన్ని లెక్కించడానికి, ప్రత్యేకం కానటువంటి, వ్యక్తిగతంగా గుర్తించలేని ట్యాగ్ను సమర్పిస్తుంది. ఈ లేబుల్లు కొన్నిసార్లు <ph name="PRODUCT_NAME" />లోని Google శోధన ప్రశ్నలలో కనిపిస్తాయి.</translation> @@ -152,6 +151,7 @@ <translation id="1197979282329025000">ప్రింటర్ <ph name="PRINTER_NAME" />కు సంబంధించిన ప్రింటర్ సామర్థ్యాలను తిరిగి పొందడంలో ఎర్రర్ ఏర్పడింది. ఈ ప్రింటర్ను <ph name="CLOUD_PRINT_NAME" />తో నమోదు చేయడం సాధ్యం కాలేదు.</translation> <translation id="119944043368869598">అన్ని క్లియర్ చెయ్యి</translation> <translation id="1201402288615127009">తరువాత</translation> +<translation id="1202556750060561551"><ph name="SITE_GROUP_NAME" /> ద్వారా స్టోర్ చేయబడిన డేటా మరియు కుక్కీలు, అలాగే దీని ఆధీనంలో ఉన్న సైట్లు మరియు దాని ఇన్స్టాల్ చేసిన యాప్లు తొలగించబడతాయి.</translation> <translation id="1202596434010270079">కియోస్క్ యాప్ అప్డేట్ చేయబడింది. దయచేసి USB స్టిక్ను తీసివేయండి.</translation> <translation id="120368089816228251">సంగీత స్వరం</translation> <translation id="1205489148908752564">అనుమతి జాబితాలోని వినియోగదారులను చదవండి మరియు మార్చండి</translation> @@ -279,8 +279,10 @@ <translation id="138784436342154190">డిఫాల్ట్ ప్రారంభ పేజీని పునరుద్ధరించాలా?</translation> <translation id="1390548061267426325">సాధారణ ట్యాబ్ లాగా తెరువు</translation> <translation id="1393283411312835250">సూర్యుడు మరియు మేఘాలు</translation> +<translation id="1393787139683794508">ఇది <ph name="ORIGIN_NAME" /> ద్వారా నిల్వ చేసిన మొత్తం డేటా మరియు కుక్కీలను తొలగిస్తుంది.</translation> <translation id="1395730723686586365">అప్డేటర్ ప్రారంభించబడింది</translation> <translation id="1396139853388185343">ప్రింటర్ను సెటప్ చేస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది</translation> +<translation id="1396259464226642517">ఈ ఫలితం ఊహించనిదా? <ph name="BEGIN_LINK" />ఫీడ్బ్యాక్ పంపండి<ph name="END_LINK" /></translation> <translation id="1396963298126346194">మీరు నమోదు చేసిన వినియోగదారు పేరు మరియు పాస్వర్డ్ సరిపోలలేదు</translation> <translation id="1397500194120344683">అర్హత గల పరికరాలు లేవు. <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation> <translation id="1398853756734560583">గరిష్ఠీకరించు</translation> @@ -554,6 +556,7 @@ <translation id="1758018619400202187">EAP-TLS</translation> <translation id="17584710573359123">Chrome వెబ్ స్టోర్లో చూడండి</translation> <translation id="176193854664720708">వేలిముద్ర సెన్సార్ పవర్ బటన్లో ఉంది. ఏదైనా వేలితో మెల్లిగా దానిని తాకండి.</translation> +<translation id="176273057789108760">డ్రాగ్ చేసిన ఫైల్లను, భద్రతా ఆమోదం కోసం మీ సంస్థ స్కాన్ చేస్తోంది.</translation> <translation id="1763046204212875858">అప్లికేషన్ షార్ట్కట్లను సృష్టించు</translation> <translation id="1763108912552529023">విశ్లేషణ కొనసాగించండి</translation> <translation id="1763808908432309942">కొత్త ట్యాబ్లో తెరవబడుతుంది</translation> @@ -591,6 +594,7 @@ <translation id="1805472176602625930">సెక్యూరిటీ కీలోని బటన్ను నొక్కండి</translation> <translation id="1805738995123446102">బ్యాక్గ్రౌండ్ ట్యాబ్ మీ మైక్రోఫోన్ను ఉపయోగిస్తోంది</translation> <translation id="1805822111539868586">వీక్షణలను పరిశీలించండి</translation> +<translation id="1805888043020974594">ప్రింట్ సర్వర్</translation> <translation id="1805967612549112634">పిన్ను నిర్ధారించండి</translation> <translation id="1809734401532861917">నా బుక్మార్క్లు, చరిత్ర, పాస్వర్డ్లు మరియు ఇతర సెట్టింగ్లను <ph name="USER_EMAIL_ADDRESS" />కి జోడించు</translation> <translation id="1813278315230285598">సేవలు</translation> @@ -632,7 +636,6 @@ <translation id="1858585891038687145">సాఫ్ట్వేర్ రూపకర్తలను గుర్తించడం కోసం ఈ ప్రమాణపత్రాన్ని విశ్వసిస్తుంది</translation> <translation id="1861262398884155592">ఈ ఫోల్డర్ ఖాళీగా ఉంది</translation> <translation id="1863182668524159459">సీరియల్ పోర్ట్లు కనుగొనబడలేదు</translation> -<translation id="1863552924692672565">'<ph name="FILE_NAME" />' తెలియదు. ప్రమాదాన్ని కనీస స్థాయికి తగ్గించడానికి ఫైల్ను స్కాన్ చేయండి.</translation> <translation id="1864111464094315414">లాగిన్</translation> <translation id="1864400682872660285">చల్లని</translation> <translation id="1864454756846565995">USB-C పరికరం (వెనుకవైపు పోర్ట్)</translation> @@ -739,6 +742,7 @@ <translation id="202352106777823113">డౌన్లోడ్కు చాలా సమయం పడుతుంది మరియు నెట్వర్క్ ద్వారా నిలిపివేయబడింది.</translation> <translation id="2025632980034333559"><ph name="APP_NAME" /> క్రాష్ అయింది. ఎక్స్టెన్షన్ను రీలోడ్ చేయడానికి ఈ బెలూన్ను క్లిక్ చేయండి.</translation> <translation id="2025891858974379949">అసురక్షితమైన కంటెంట్</translation> +<translation id="202918510990975568">భద్రత మరియు సైన్ ఇన్ను కాన్ఫిగర్ చేయడానికి మీ పాస్వర్డ్ను నమోదు చేయండి</translation> <translation id="2034346955588403444">మరో WiFi నెట్వర్క్ని జోడించండి</translation> <translation id="203574396658008164">లాక్ స్క్రీన్ నుండి గమనిక సేకరణను ప్రారంభించండి</translation> <translation id="2037445849770872822">ఈ Google ఖాతాకు పర్యవేక్షణ సెటప్ చేయబడింది. మరిన్ని తల్లిదండ్రుల నియంత్రణలు సెటప్ చేయడానికి, 'కొనసాగించు'ను ఎంచుకోండి. @@ -890,6 +894,7 @@ <translation id="2224471211857467033">యాక్సెసిబిలిటీ సంఘటనలు</translation> <translation id="2224551243087462610">ఫోల్డర్ పేరును సవరించు</translation> <translation id="2226449515541314767">ఈ సైట్ MIDI పరికరాలకు పూర్తి నియంత్రణ లేకుండా బ్లాక్ చేయబడింది.</translation> +<translation id="222704500187107962">ప్రస్తుత అజ్ఞాత సెషన్ నుండి మీరు నిష్క్రమించిన తర్వాత, ఈ మినహాయింపు ఆటోమేటిక్గా తొలగించబడుతుంది</translation> <translation id="2227179592712503583">సూచనను తీసివేయి</translation> <translation id="2229161054156947610">1 గంట పైగా మిగిలి ఉంది</translation> <translation id="222931766245975952">ఫైల్ కుదించబడింది</translation> @@ -943,6 +948,7 @@ <translation id="2300383962156589922"><ph name="APP_NAME" />ను అనుకూలీకరించండి మరియు నియంత్రించండి</translation> <translation id="2301382460326681002">ఎక్స్టెన్షన్ మూలం డైరెక్టరీ చెల్లదు.</translation> <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" అదనపు అనుమతులను అభ్యర్థించింది.</translation> +<translation id="23055578400314116">ఒక యూజర్నేమ్ ఎంచుకోండి</translation> <translation id="2307462900900812319">నెట్వర్క్ను కాన్ఫిగర్ చేయి</translation> <translation id="230927227160767054">సేవా హ్యాండ్లర్ను ఇన్స్టాల్ చేయాలని ఈ పేజీ కోరుతోంది.</translation> <translation id="2309620859903500144">మీ మోషన్ లేదా లైట్ సెన్సార్లను యాక్సెస్ చేయనీయకుండా ఈ సైట్ బ్లాక్ చేయబడింది.</translation> @@ -982,6 +988,7 @@ <translation id="2353297238722298836">కెమెరా మరియు మైక్రోఫోన్ అనుమతించబడ్డాయి</translation> <translation id="2356070529366658676">అడుగు</translation> <translation id="2357330829548294574"><ph name="USER_NAME" />ను తీసివేయి</translation> +<translation id="235798134753548762">మీ యాప్లు, సెట్టింగ్లు మరియు Wi-Fi ప్రాధాన్యతలు సింక్ చేయబడతాయి. మార్పులు చేయడానికి, సెటప్ చేసిన తర్వాత ఎప్పుడైనా సెట్టింగ్లకు వెళ్లండి.</translation> <translation id="2359345697448000899">'సాధనాలు' మెనూలోని ఎక్స్టెన్షన్లను క్లిక్ చేయడం ద్వారా మీ ఎక్స్టెన్షన్లను నిర్వహించండి.</translation> <translation id="2359808026110333948">కొనసాగించు</translation> <translation id="236117173274098341">ఆప్టిమైజ్ చేయండి</translation> @@ -1034,6 +1041,7 @@ <translation id="2436720498717686157">మీ సంస్థ నియమాల ప్రకారం, ఈ పరికరాన్ని తక్షణం అప్డేట్ చేయాలి</translation> <translation id="2439545803278355377">మీ కొత్త పిన్ను నమోదు చేయండి. పిన్ తప్పక కనీసం నాలుగు అక్షరాల పొడవు ఉండాలి, అలాగే ఇందులో అక్షరాలు, సంఖ్యలు, ఇతర సంకేత గుర్తులను ఉపయోగించవచ్చు.</translation> <translation id="2440604414813129000">&సోర్స్ను చూడండి</translation> +<translation id="244231003699905658">చిరునామా చెల్లదు. దయచేసి చిరునామాను తనిఖీ చేసి, ఆపై మళ్లీ ప్రయత్నించండి.</translation> <translation id="2442916515643169563">వచన నీడ</translation> <translation id="2445081178310039857">ఎక్స్టెన్షన్ మూలం డైరెక్టరీ అవసరం.</translation> <translation id="2445484935443597917">కొత్త ప్రొఫైల్ను సృష్టించు</translation> @@ -1088,6 +1096,7 @@ <translation id="2501278716633472235">వెనుకకు వెళ్ళు</translation> <translation id="2501797496290880632">షార్ట్కట్ను టైప్ చేయండి</translation> <translation id="2502441965851148920">ఆటోమేటిక్ అప్డేట్లు ప్రారంభించబడ్డాయి. స్వయంగా చేసే అప్డేట్లను మాత్రం మీ నిర్వాహకులు నిలిపివేశారు.</translation> +<translation id="2502719318159902502">పూర్తి యాక్సెస్</translation> <translation id="2505127913256479918">ఈ పర్యవేక్షిత వినియోగదారు ప్రొఫైల్ త్వరలో తీసివేయబడుతుంది</translation> <translation id="2505324914378689427">{SCREEN_INDEX,plural, =1{స్క్రీన్ #}other{స్క్రీన్ #}}</translation> <translation id="2505402373176859469"><ph name="TOTAL_SIZE" />లో <ph name="RECEIVED_AMOUNT" /></translation> @@ -1360,6 +1369,7 @@ <translation id="2865919525181940183">ప్రస్తుతం స్క్రీన్పై ఉన్న ప్రోగ్రామ్ల స్క్రీన్షాట్</translation> <translation id="286674810810214575">పవర్ మూలాలను తనిఖీ చేస్తోంది...</translation> <translation id="2867768963760577682">పిన్ చేసిన ట్యాబ్ లాగా తెరువు</translation> +<translation id="2868184003987917410">మీ వర్చువల్ రియాలిటీ పరికరాలు/డేటాను యాక్సెస్ చేయడానికి సైట్లను అనుమతించకండి</translation> <translation id="2868746137289129307">ఈ ఎక్స్టెన్షన్ చాలా పాతది, వ్యాపార విధానం కారణంగా నిలిపివేయబడింది. అయితే, కొత్త వెర్షన్ అందుబాటులో ఉన్నప్పుడు ఇది ఆటోమేటిక్గా ప్రారంభించబడవచ్చు.</translation> <translation id="2870560284913253234">సైట్</translation> <translation id="2870909136778269686">అప్డేట్ చేస్తోంది...</translation> @@ -1405,6 +1415,7 @@ <translation id="2916745397441987255">ఎక్స్టెన్షన్లను వెతకండి</translation> <translation id="2921081876747860777">దయచేసి మీ స్థానిక డేటాను రక్షించడానికి పాస్వర్డ్ను సృష్టించండి.</translation> <translation id="2923234477033317484">ఈ ఖాతాను తీసివేయి</translation> +<translation id="2925054096976782003">అతికించిన డేటాను, భద్రతా ఆమోదం కోసం మీ సంస్థ స్కాన్ చేస్తోంది.</translation> <translation id="2926085873880284723">డిఫాల్ట్ షార్ట్కట్లను పునరుద్ధరించండి</translation> <translation id="2927017729816812676">కాష్ నిల్వ</translation> <translation id="2931157624143513983">ప్రింట్ చేయగల సైజ్కు అమర్చు</translation> @@ -1428,6 +1439,7 @@ <translation id="2956070239128776395">విభాగం సమూహంలో ఉంది: <ph name="ERROR_LINE" /></translation> <translation id="2957117904572187936">మీ పరికరంలోని ఫైల్లు లేదా ఫోల్డర్లను సవరించడానికి ఏ సైట్లనూ అనుమతించవద్దు</translation> <translation id="2958721676848865875">ప్యాక్ పొడిగింపు హెచ్చరిక</translation> +<translation id="2959127025785722291">ఏదో తప్పు జరిగింది. స్కానింగ్ పూర్తి కాలేకపోయింది. దయచేసి మళ్లీ ప్రయత్నించండి.</translation> <translation id="2959842337402130152">నిల్వ స్థలం లేని కారణంగా పునరుద్ధరించడం సాధ్యపడలేదు. పరికరంలో <ph name="SPACE_REQUIRED" /> స్థలం ఖాళీ చేసి, ఆపై మళ్లీ ప్రయత్నించండి.</translation> <translation id="296026337010986570">పూర్తయింది! హానికరమైన సాఫ్ట్వేర్ తీసివేయబడింది. ఎక్స్టెన్షన్లను తిరిగి ఆన్ చేయడానికి, <a href="chrome://extensions">ఎక్స్టెన్షన్లు</a> సందర్శించండి.</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" /> (పొడిగింపు అందించినది)</translation> @@ -1685,6 +1697,7 @@ <translation id="3348038390189153836">తొలగించగల పరికరం కనుగొనబడింది</translation> <translation id="3349933790966648062">మెమరీ ఫుట్ప్రింట్</translation> <translation id="3350117557200012647">జత చేసే మోడ్లోకి ప్రవేశించండి</translation> +<translation id="3350244554415289209">సైట్కి మీ కెమెరా స్థానం యాక్సెస్ అవసరమైనప్పుడు లేదా మీ గదిని మ్యాప్ చేయాలనుకున్నప్పుడు యాక్సెస్ అడగడం జరుగుతుంది (సిఫార్సు చేయబడింది)</translation> <translation id="3355936511340229503">కనెక్షన్ ఎర్రర్</translation> <translation id="3356580349448036450">పూర్తయింది</translation> <translation id="3359256513598016054">సర్టిఫికెట్ విధాన పరిమితులు</translation> @@ -1748,6 +1761,7 @@ <translation id="3448492834076427715">ఖాతాను అప్డేట్ చేయి</translation> <translation id="3449839693241009168"><ph name="EXTENSION_NAME" />కు ఆదేశాలను పంపడానికి <ph name="SEARCH_KEY" /> నొక్కండి</translation> <translation id="3450157232394774192">నిష్క్రియ స్థితి అధీన శాతం</translation> +<translation id="3451332697983754369">నా <ph name="DEVICE_TYPE" /> సింక్ చేయి</translation> <translation id="3453612417627951340">ప్రామాణీకరణ అవసరం</translation> <translation id="3454157711543303649">సక్రియం చేయడం పూర్తయింది</translation> <translation id="3454213325559396544">ఈ <ph name="DEVICE_TYPE" />కు ఇదే చివరి ఆటోమేటిక్ సాఫ్ట్వేర్ మరియు భద్రతాపరమైన అప్డేట్. భవిష్యత్తు అప్డేట్లను పొందడానికి, సరికొత్త మోడల్కు అప్గ్రేడ్ చేయండి.</translation> @@ -1770,6 +1784,7 @@ <translation id="347785443197175480">మీ కెమెరా మరియు మైక్రోఫోన్ను యాక్సెస్ చేయడానికి <ph name="HOST" />ను అనుమతించడాన్ని కొనసాగించండి</translation> <translation id="3478685642445675458">వ్యక్తిని తీసివేయబోయే ముందు దయచేసి మీ ప్రొఫైల్ను అన్లాక్ చేయండి.</translation> <translation id="3479552764303398839">ఇప్పుడు కాదు</translation> +<translation id="3479685872808224578">ప్రింట్ సర్వర్ని కనుగొనలేకపోయింది. దయచేసి చిరునామాను తనిఖీ చేసి, ఆపై మళ్లీ ప్రయత్నించండి.</translation> <translation id="3481268647794498892"><ph name="COUNTDOWN_SECONDS" /> క్షణాలలో <ph name="ALTERNATIVE_BROWSER_NAME" />లో తెరవబోతోంది</translation> <translation id="3484273680291419129">హానికరమైన సాఫ్ట్వేర్ని తీసివేస్తోంది...</translation> <translation id="3484869148456018791">క్రొత్త ప్రమాణపత్రాన్ని పొందండి</translation> @@ -1885,6 +1900,7 @@ <translation id="3630132874740063857">మీ ఫోన్</translation> <translation id="3630995161997703415">ఈ సైట్ను ఏ సమయంలో అయినా ఉపయోగించడం కోసం దీనిని మీ 'అర'కు జోడించండి</translation> <translation id="3634507049637220048"><ph name="NETWORK_COUNT" />లో <ph name="NETWORK_INDEX" /> నెట్వర్క్, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, మీ అడ్మినిస్ట్రేటర్ ద్వారా నిర్వహించబడుతోంది, వివరాలు</translation> +<translation id="3635241501480133979">ఈ డేటా, మీ సంస్థకు చెందిన భద్రతా పాలసీలను ఉల్లంఘిస్తుంది, కాబట్టి దానిని డ్రాప్ చేయడం సాధ్యం కాదు.</translation> <translation id="3635353578505343390">Googleకు ఫీడ్బ్యాక్ పంపండి</translation> <translation id="3636096452488277381">హాయ్, <ph name="USER_GIVEN_NAME" />.</translation> <translation id="3636766455281737684"><ph name="PERCENTAGE" />% - <ph name="TIME" /> మిగిలి ఉంది</translation> @@ -1919,6 +1935,7 @@ <translation id="3677657024345889897">అత్యంత నిశబ్దం</translation> <translation id="3677911431265050325">మొబైల్ సైట్ను అభ్యర్థించండి</translation> <translation id="3678156199662914018">పొడిగింపు: <ph name="EXTENSION_NAME" /></translation> +<translation id="3678613690490567106">అన్ని పరికరాలలో వ్యక్తిగతీకరించిన అనుభవం పొందడానికి సింక్ చేయండి</translation> <translation id="3681311097828166361">మీ అభిప్రాయం తెలియజేసినందుకు ధన్యవాదాలు. మీరు ప్రస్తుతం ఆఫ్లైన్లో ఉన్నారు, మీ నివేదిక తర్వాత పంపబడుతుంది.</translation> <translation id="3682824389861648626">కదలిక థ్రెషోల్డ్</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> స్క్రీన్ షేరింగ్ అభ్యర్థన</translation> @@ -2429,6 +2446,7 @@ <translation id="4400632832271803360">ఎగువ-అడ్డు వరుసలోని కీల ప్రవర్తనను మార్చడానికి లాంచర్ కీని నొక్కి ఉంచండి</translation> <translation id="4400963414856942668">మీరు ట్యాబ్ను బుక్మార్క్ చేయడానికి నక్షత్రం గుర్తును క్లిక్ చేయవచ్చు</translation> <translation id="4403775189117163360">వేరొక ఫోల్డర్ను ఎంచుకోండి</translation> +<translation id="4404136731284211429">మళ్లీ స్కాన్ చేయి</translation> <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation> <translation id="4408599188496843485">స&హాయం</translation> <translation id="4409697491990005945">సరిహద్దులు</translation> @@ -2447,6 +2465,7 @@ <translation id="4421932782753506458">ఫ్లఫ్ఫీ</translation> <translation id="4423376891418188461">సెట్టింగ్లను పునరుద్ధరించు</translation> <translation id="442397852638519243"><ph name="USER_NAME" />, మీ నిర్వాహకులకు మీరు మీ పాస్వర్డ్ను మార్చడం అవసరం.</translation> +<translation id="4429030830601238961">ఈ డేటా మీ సంస్థ యొక్క భద్రతా పాలసీలను ఉల్లంఘిస్తుంది, కాబట్టి అది అతికించబడదు.</translation> <translation id="4430019312045809116">వాల్యూమ్</translation> <translation id="4430369329743628066">బుక్మార్క్ జోడించబడింది</translation> <translation id="4434045419905280838">పాప్-అప్లు మరియు మళ్లింపులు</translation> @@ -2493,9 +2512,11 @@ <translation id="4501530680793980440">తీసివేతను నిర్ధారించండి</translation> <translation id="4502423230170890588">ఈ పరికరం నుండి తీసివేయి</translation> <translation id="4504940961672722399">ఈ చిహ్నంపై క్లిక్ చేయడం ద్వారా లేదా <ph name="EXTENSION_SHORTCUT" />ను నొక్కడం ద్వారా ఈ ఎక్స్టెన్షన్ను ఉపయోగించండి.</translation> +<translation id="4507164039066603071">మీ కెమెరా స్థానాన్ని యాక్సెస్ చేయడానికి లేదా మీ గదిని మ్యాప్ చేయడానికి సైట్లను అనుమతించవద్దు</translation> <translation id="4508051413094283164">అన్నింటినీ అజ్ఞాత విండోలో తెరవండి</translation> <translation id="4508265954913339219">సక్రియం చేయడం విఫలమైంది</translation> <translation id="4508765956121923607">&మూలాన్ని చూడండి</translation> +<translation id="4510614391273086606">Linux ఫైల్లు మరియు యాప్లు వాటి బ్యాకప్ స్థితికి పునరుద్ధరించబడుతున్నాయి.</translation> <translation id="451407183922382411"><ph name="COMPANY_NAME" /> అందిస్తోంది</translation> <translation id="4514610446763173167">ప్లే లేదా పాజ్ చేయడానికి వీడియోని టోగుల్ చేయండి</translation> <translation id="451515744433878153">తీసివేయి</translation> @@ -2693,6 +2714,7 @@ <translation id="480990236307250886">హోమ్ పేజీని తెరువు</translation> <translation id="4813136279048157860">నా చిత్రాలు</translation> <translation id="4813512666221746211">నెట్వర్క్ ఎర్రర్</translation> +<translation id="4814378367953456825">ఈ వేలి ముద్రకు ఒక పేరు పెట్టండి</translation> <translation id="4820236583224459650">యాక్టివ్ టిక్కెట్గా సెట్ చేయి</translation> <translation id="4821935166599369261">&ప్రొఫైలింగ్ అనుమతించబడింది</translation> <translation id="4823484602432206655">వినియోగదారు మరియు పరికర సెట్టింగ్లను చదవడానికి మరియు మార్చడానికి అనుమతి</translation> @@ -2739,6 +2761,7 @@ <translation id="4876895919560854374">స్క్రీన్ను లాక్ చేయండి మరియు అన్లాక్ చేయండి</translation> <translation id="4877276003880815204">మూలకాలను పర్యవేక్షించు</translation> <translation id="4878653975845355462">మీ నిర్వాహకుడి ద్వారా అనుకూల బ్యాక్గ్రౌండ్లు ఆపివేయబడ్డాయి</translation> +<translation id="4878718769565915065">ఈ సెక్యూరిటీ కీకి వేలిముద్రను జోడంచడం విఫలమైంది</translation> <translation id="4879491255372875719">ఆటోమేటిక్ (డిఫాల్ట్)</translation> <translation id="4880328057631981605">యాక్సెస్ స్థానం పేరు</translation> <translation id="4880827082731008257">శోధన చరిత్ర</translation> @@ -2869,6 +2892,7 @@ <translation id="5065775832226780415">Smart Lock</translation> <translation id="5067399438976153555">ఎల్లప్పుడూ ఆన్ చేయి</translation> <translation id="5067867186035333991"><ph name="HOST" /> మీ మైక్రోఫోన్ను యాక్సెస్ చేయాలనుకుంటే నాకు తెలియజేయి</translation> +<translation id="5068377946749700758">డ్రాగ్ చేసిన డేటాను, భద్రతా ఆమోదం కోసం మీ సంస్థ స్కాన్ చేస్తోంది.</translation> <translation id="5068918910148307423">డేటాను పంపడం మరియు స్వీకరించడం పూర్తి చేయడానికి ఇటీవల మూసివేసిన సైట్లను అనుమతించవద్దు</translation> <translation id="5068919226082848014">పిజ్జా</translation> <translation id="5072052264945641674">కర్సర్ పరిమాణాన్ని సర్దుబాటు చేయి</translation> @@ -3061,6 +3085,7 @@ <translation id="5341793073192892252">కింది కుక్కీలు బ్లాక్ చేయబడ్డాయి (మూడవ-పక్ష కుక్కీలన్నీ, మినహాయింపు లేకుండా బ్లాక్ చేయబడుతున్నాయి)</translation> <translation id="5341980496415249280">దయచేసి వేచి ఉండండి, ప్యాకింగ్ జరుగుతోంది...</translation> <translation id="5342091991439452114">PIN తప్పనిసరిగా కనీసం <ph name="MINIMUM" /> అంకెలు ఉండాలి</translation> +<translation id="5344036115151554031">Linux రీస్టోర్ చేయబడుతోంది</translation> <translation id="5352033265844765294">టైమ్ స్టాంపింగ్</translation> <translation id="5353252989841766347">Chrome నుండి పాస్వర్డ్లను ఎగుమతి చేయండి</translation> <translation id="5355099869024327351">మీకు నోటిఫికేషన్లను చూపించడానికి అసిస్టెంట్ను అనుమతించండి</translation> @@ -3114,6 +3139,7 @@ <translation id="5427459444770871191">&సవ్యదిశలో తిప్పు</translation> <translation id="542872847390508405">మీరు అతిథిగా బ్రౌజ్ చేస్తున్నారు</translation> <translation id="5428850089342283580"><ph name="ACCNAME_APP" /> (అప్డేట్ అందుబాటులో ఉంది)</translation> +<translation id="542948651837270806">విశ్వసనీయ ప్లాట్ఫామ్ మాడ్యూల్ ఫర్మ్వేర్ కోసం అప్డేట్ను ఇన్స్టాల్ చేయాలి. <ph name="TPM_FIRMWARE_UPDATE_LINK" />ను చూడండి</translation> <translation id="5430931332414098647">తక్షణ టెథెరింగ్</translation> <translation id="5431318178759467895">రంగు</translation> <translation id="5431825016875453137">OpenVPN / L2TP</translation> @@ -3294,6 +3320,7 @@ <translation id="5659593005791499971">ఇమెయిల్</translation> <translation id="5659833766619490117">ఈ పేజీని అనువదించడం సాధ్యపడలేదు</translation> <translation id="5660204307954428567"><ph name="DEVICE_NAME" />తో జత చేయండి</translation> +<translation id="5662513737565158057">Linux యాప్లు పనిచేసే తీరును మార్చండి.</translation> <translation id="5667546120811588575">Google Play సెటప్ చేస్తోంది...</translation> <translation id="5669267381087807207">సక్రియం చేస్తోంది</translation> <translation id="5669691691057771421">కొత్త PINని నమోదు చేయండి</translation> @@ -3701,6 +3728,7 @@ <translation id="6238923052227198598">లాక్ స్క్రీన్పై తాజా గమనికను ఉంచండి</translation> <translation id="6239558157302047471">&ఫ్రేమ్ను మళ్లీ లోడ్ చేయి</translation> <translation id="6241530762627360640">మీ సిస్టమ్తో జత చేయబడిన బ్లూటూత్ పరికరాలకు సంబంధించిన సమాచారాన్ని యాక్సెస్ చేయడానికి, సమీపంలోని బ్లూటూత్ పరికరాలను కనుగొనడానికి అనుమతి.</translation> +<translation id="6241844896329831164">యాక్సెస్ అవసరం లేదు</translation> <translation id="6242589501614145408">మీ సెక్యూరిటీ కీని రీసెట్ చేయండి</translation> <translation id="6242852299490624841">ఈ ట్యాబ్పై దృష్టి కేంద్రీకరించు</translation> <translation id="6243280677745499710">ప్రస్తుతం సెట్ చేసినది</translation> @@ -3901,6 +3929,8 @@ <translation id="6531282281159901044">అపాయకరమైన ఫైల్ను అలాగే ఉంచు</translation> <translation id="6532101170117367231">Google డిస్క్కు సేవ్ చేయండి</translation> <translation id="6532106788206463496">మార్పులను సేవ్ చేయి</translation> +<translation id="6532206849875187177">భద్రత మరియు సైన్ ఇన్</translation> +<translation id="6532527800157340614">మీ యాక్సెస్ టోకెన్ని పొందడం సాధ్యం కాలేదు కాబట్టి, సైన్ ఇన్ విఫలమైంది. దయచేసి మీ నెట్వర్క్ కనెక్షన్ను తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి.</translation> <translation id="6532663472409656417">ఎంటర్ప్రైజ్ నమోదు చేయబడింది</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />గమనిక:<ph name="END_BOLD" /> డేటా సేకరణ వలన పనితీరు తగ్గవచ్చు, అందువల్ల మీరు చేస్తున్నది మీకు తెలిసినప్పుడు లేదా ఇలా చేయాలని మీకు చెప్పినప్పుడు మాత్రమే ప్రారంభించండి.</translation> <translation id="6541638731489116978">ఈ సైట్ మీ మోషన్ సెన్సార్లను యాక్సెస్ చేయనీయకుండా బ్లాక్ చేయబడింది.</translation> @@ -3908,6 +3938,7 @@ <translation id="6545864417968258051">బ్లూటూత్ స్కానింగ్</translation> <translation id="6545867563032584178">Mac సిస్టమ్ ప్రాధాన్యతలలో మైక్రోఫోన్ ఆఫ్ చేయబడింది</translation> <translation id="6547354035488017500">కనీసం 512 MB స్థలాన్ని ఖాళీగా ఉంచండి, లేదంటే పరికరం ఇక స్పందించదు. స్థలాన్ని ఖాళీ చేయడానికి, పరికర నిల్వ నుండి ఫైల్లను తొలగించండి.</translation> +<translation id="6549966385318247177">ఇది పరిణతి చెందిన వారికి తగిన కంటెంట్ కాబట్టి, ఇది బ్లాక్ చేయబడింది.</translation> <translation id="6550675742724504774">ఎంపికలు</translation> <translation id="6551508934388063976">ఆదేశం అందుబాటులో లేదు. కొత్త విండోను తెరవడానికి control-N నొక్కండి.</translation> <translation id="6551612971599078809">సైట్ USBని ఉపయోగిస్తోంది</translation> @@ -4239,6 +4270,7 @@ <translation id="703001695939087067">విండో స్థూలదృష్టి మోడ్లోకి ప్రవేశించారు. నావిగేట్ చేయడానికి ట్యాబ్ను నొక్కండి.</translation> <translation id="7031608529463141342"><ph name="WINDOW_TITLE" /> - సీరియల్ పోర్ట్ కనెక్ట్ చేయబడింది</translation> <translation id="7031962166228839643">TPM అనేది సిద్ధం అవుతోంది, దయచేసి వేచి ఉంచండి (దీనికి కొన్ని నిమిషాల సమయం పట్టవచ్చు)...</translation> +<translation id="7034615910652881882">మీ వర్చువల్ రియాలిటీ పరికరాలు/డేటా యాక్సెస్ సైట్కు కావాల్సినప్పుడు అడగడం జరుగుతుంది</translation> <translation id="7037509989619051237">ప్రివ్యూ చేయవలసిన వచనం</translation> <translation id="7039326228527141150"><ph name="VENDOR_NAME" /> అందించిన USB పరికరాలకు యాక్సెస్</translation> <translation id="7039912931802252762">Microsoft Smart Card Logon</translation> @@ -4278,6 +4310,7 @@ <translation id="7081952801286122383">మీరు అజ్ఞాత మోడ్లో ఉన్నారు</translation> <translation id="708278670402572152">స్కానింగ్ను ప్రారంభించడం కోసం డిస్కనెక్ట్ చేయండి</translation> <translation id="7085389578340536476">ఆడియోను రికార్డ్ చేయడానికి Chromeను అనుమతించాలా?</translation> +<translation id="7086467953285486445">ఈ ఫైల్లు మీ సంస్థ యొక్క భద్రతా విధానాలను ఉల్లంఘిస్తాయి మరియు వాటిని ఉంచడం సాధ్యం కాదు.</translation> <translation id="7088434364990739311">అప్డేట్ తనిఖీ ప్రారంభం విఫలమైంది (ఎర్రర్ కోడ్ <ph name="ERROR" />).</translation> <translation id="7088561041432335295">జిప్ ఆర్కైవర్ - ఫైల్ల యాప్లో జిప్ ఫైల్లను తెరవండి మరియు ప్యాక్ చేయండి.</translation> <translation id="7088674813905715446">నిర్వాహకులు, ఈ పరికరాన్ని కేటాయించబడని స్థితిలో ఉంచారు. దీనిని నమోదు కోసం ప్రారంభించడానికి, ఈ పరికరాన్ని పెండింగ్ స్థితిలో ఉంచమని దయచేసి మీ నిర్వాహకులను కోరండి.</translation> @@ -4391,6 +4424,7 @@ <translation id="7241389281993241388">దయచేసి క్లయింట్ సర్టిఫికెట్ను దిగుమతి చేయడానికి <ph name="TOKEN_NAME" />కు సైన్ ఇన్ చేయండి.</translation> <translation id="7241443820034350811">మీ సెక్యూరిటీ కీ జాబితాలో లేకుంటే, దాని బటన్ను కనీసం 5 సెకన్ల పాటు నొక్కి ఉంచండి.</translation> <translation id="7243632151880336635">తీసివేసి, సైన్ అవుట్ చేయి</translation> +<translation id="7243784282103630670">Linuxని అప్గ్రేడ్ చేయడంలో ఎర్రర్ ఎదురైంది. మేము మీ బ్యాకప్ ఉపయోగించి కంటైనర్ను రీస్టోర్ చేస్తాము.</translation> <translation id="7245628041916450754"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (ఉత్తమం)</translation> <translation id="7246230585855757313">మీ సెక్యూరిటీ కీని తీసివేసి, మళ్లీ ఇన్సర్ట్ చేసి, ఆపై మరొకసారి ప్రయత్నించండి</translation> <translation id="7246947237293279874">FTP ప్రాక్సీ</translation> @@ -4477,6 +4511,7 @@ <translation id="7360233684753165754"><ph name="PRINTER_NAME" />కు <ph name="PAGE_NUMBER" /> పేజీలు</translation> <translation id="7361297102842600584"><ph name="PLUGIN_NAME" />ను అమలు చేయడానికి కుడి క్లిక్ చేయండి</translation> <translation id="7363117941401515667"><ph name="HOURS" /> గంటల క్రితం అప్డేట్ చేయబడింది</translation> +<translation id="7364591875953874521">యాక్సెస్ను అభ్యర్థించారు</translation> <translation id="7364796246159120393">ఫైల్ను ఎంచుకోండి</translation> <translation id="7366415735885268578">సైట్ను జోడించండి</translation> <translation id="7366909168761621528">బ్రౌజింగ్ డేటా</translation> @@ -4502,6 +4537,7 @@ <translation id="740624631517654988">పాప్-అప్ నిరోధించబడింది</translation> <translation id="7407430846095439694">దిగుమతి చేసి, అనుబంధించు</translation> <translation id="7407504355934009739">చాలా మంది వ్యక్తులు ఈ సైట్ నుండి నోటిఫికేషన్లను బ్లాక్ చేస్తారు</translation> +<translation id="740810853557944681">ప్రింట్ సర్వర్ని జోడించండి</translation> <translation id="7409549334477097887">అతి పెద్దది</translation> <translation id="7409836189476010449">Flash అమలు చేయాలనుకుంటోంది</translation> <translation id="7410344089573941623"><ph name="HOST" /> మీ కెమెరా మరియు మైక్రోఫోన్ను యాక్సెస్ చేయాలని అనుకుంటే నాకు తెలియజేయి</translation> @@ -4522,6 +4558,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{అన్నింటినీ &కొత్త విండోలో తెరవండి}=1{&కొత్త విండోలో తెరవండి}other{అన్నింటినీ (#) &కొత్త విండోలో తెరవండి}}</translation> <translation id="7434509671034404296">డెవలపర్</translation> <translation id="7434635829372401939">మీ సెట్టింగ్లను సింక్ చేయండి</translation> +<translation id="7434969625063495310">ప్రింట్ సర్వర్ని జోడించడం సాధ్యపడలేదు. దయచేసి సర్వర్ కాన్ఫిగరేషన్ తనిఖీ చేసుకుని, ఆపై మళ్లీ ప్రయత్నించండి.</translation> <translation id="7436921188514130341">అయ్యో! పేరు మారుస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది.</translation> <translation id="7438976808740265764">డిసెంబర్ 2020 నుండి Flash Playerకు మద్దతు తీసివేయబడుతుంది.</translation> <translation id="7441736921018636843">ఈ సెట్టింగ్ని మార్చడానికి, మీ సమకాలీకరణ రహస్య పదబంధాన్ని తీసివేయడానికి <ph name="BEGIN_LINK" />సమకాలీకరణను రీసెట్ చేయండి<ph name="END_LINK" /></translation> @@ -4531,8 +4568,10 @@ <translation id="7443806024147773267">మీ Google ఖాతాలో ఎప్పుడు సైన్ ఇన్ చేసినా, మీ పాస్వర్డ్లను యాక్సెస్ చేయండి</translation> <translation id="7444983668544353857"><ph name="NETWORKDEVICE" />ను నిలిపివేయి</translation> <translation id="7448430327655618736">యాప్లను ఆటోమేటిక్గా ఇన్స్టాల్ చేస్తుంది</translation> +<translation id="7448625729116931228">మీ వర్చువల్ రియాలిటీ పరికరాలు/డేటా యాక్సెస్ సైట్కు కావాల్సినప్పుడు అడగడం జరుగుతుంది (సిఫార్సు చేయబడింది)</translation> <translation id="7450761244949417357">ఇప్పుడు <ph name="ALTERNATIVE_BROWSER_NAME" />లో తెరుస్తోంది</translation> <translation id="7453008956351770337">ఈ ప్రింటర్ను ఎంచుకోవడం ద్వారా, మీరు మీ ప్రింటర్ని యాక్సెస్ చేయడానికి క్రింది ఎక్సటెన్షన్కు అనుమతి ఇస్తున్నారు:</translation> +<translation id="7454548535253569100">పోర్టల్: <ph name="SUBFRAME_SITE" /></translation> <translation id="7456142309650173560">డెవలపర్</translation> <translation id="7456847797759667638">స్థానాన్ని తెరువు...</translation> <translation id="7458168200501453431">Google శోధనలో ఉపయోగించే అదే స్పెల్ చెకర్ను ఉపయోగిస్తుంది. మీరు బ్రౌజర్లో టైప్ చేసే వచనం Googleకు పంపబడుతుంది.</translation> @@ -4578,6 +4617,7 @@ <translation id="7513029293694390567">నిల్వ చేసిన ఆధారాలను ఉపయోగించి ఆటోమేటిక్గా వెబ్సైట్లకు సైన్ ఇన్ చేస్తుంది. దీన్ని నిలిపివేస్తే, మీరు వెబ్సైట్కు సైన్ ఇన్ చేసే ప్రతిసారి నిర్ధారణ కోసం మిమ్మల్ని అడుగుతుంది.</translation> <translation id="7514239104543605883">మీ పరికరానికి కాపీ చేయండి</translation> <translation id="7514365320538308">డౌన్లోడ్ చేయి</translation> +<translation id="7520766081042531487">అజ్ఞాత పోర్టల్: <ph name="SUBFRAME_SITE" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7522255036471229694">"Ok Google" చెప్పండి</translation> <translation id="7525067979554623046">సృష్టించు</translation> @@ -4666,6 +4706,7 @@ <translation id="7652808307838961528">వ్యక్తిని సవరించండి, <ph name="PROFILE_NAME" /></translation> <translation id="765293928828334535">ఈ వెబ్సైట్ నుండి యాప్లు, ఎక్స్టెన్షన్లు మరియు వినియోగదారు స్క్రిప్ట్లు జోడించబడవు</translation> <translation id="7652954539215530680">పిన్ను సృష్టించండి</translation> +<translation id="7653295403398566475">సైట్కి మీ కెమెరా స్థానం యాక్సెస్ అవసరమైనప్పుడు లేదా మీ గదిని మ్యాప్ చేయాలనుకున్నప్పుడు యాక్సెస్ అడగడం జరుగుతుంది</translation> <translation id="7654941827281939388">ఈ ఖాతా ఇప్పటికే ఈ కంప్యూటర్లో ఉపయోగించబడుతోంది.</translation> <translation id="7658239707568436148">రద్దు చేయి</translation> <translation id="7659584679870740384">ఈ పరికరాన్ని ఉపయోగించడానికి మీకు అధికారం లేదు. దయచేసి సైన్-ఇన్ అనుమతి కోసం నిర్వాహకుడిని సంప్రదించండి.</translation> @@ -4817,6 +4858,7 @@ <translation id="783214144752121388">సైట్లలో Flashను అమలు చేయనివ్వకుండా బ్లాక్ చేయి (సిఫార్సు చేయడమైనది)</translation> <translation id="7833720883933317473">సేవ్ చేసిన అనుకూల పదాలు ఇక్కడ కనిపిస్తాయి</translation> <translation id="7835178595033117206">బుక్మార్క్ తీసివేయబడింది</translation> +<translation id="7836850009646241041">మీ సెక్యూరిటీ కీని మళ్లీ తాకి చూడండి</translation> <translation id="7837776265184002579">మీ హోమ్పేజీ <ph name="URL" />కు మార్చబడింది.</translation> <translation id="7839051173341654115">మీడియాను వీక్షించండి/బ్యాకప్ చేయండి</translation> <translation id="7839192898639727867">సర్టిఫికెట్ విషయం కీ ID</translation> @@ -5129,7 +5171,9 @@ <translation id="8260864402787962391">మౌస్</translation> <translation id="8261378640211443080">ఈ పొడిగింపు <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />లో జాబితా చేయబడలేదు మరియు మీకు తెలియకుండానే జోడించబడి ఉండవచ్చు.</translation> <translation id="8261506727792406068">తొలగించు</translation> +<translation id="8263336784344783289">ఈ సమూహానికి పేరు పెట్టండి</translation> <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" /> మీ మౌస్ కర్సర్ను నిలిపివేసింది.</translation> +<translation id="8264024885325823677">ఈ సెట్టింగ్ మీ నిర్వాహకుడి ద్వారా నిర్వహించబడుతుంది.</translation> <translation id="8264718194193514834"><ph name="EXTENSION_NAME" /> పూర్తి స్క్రీన్ని ప్రారంభించింది.</translation> <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />ఇది, ఈ పరికరం మరియు మీరు దీనిని ఉపయోగించే పద్ధతిని (బ్యాటరీ స్థాయి, సిస్టమ్ మరియు యాప్ కార్యకలాపం మరియు ఎర్రర్లు వంటివి) గురించిన సాధారణ సమాచారం. Androidని మెరుగుపరచడం కోసం డేటా ఉపయోగించబడుతుంది మరియు కొంత ఏకీకృత సమాచారం Google యాప్లు మరియు Android డెవలపర్ల వంటి భాగస్వాములకు వారి యాప్లు మరియు ఉత్పత్తులను మెరుగుపరచడంలో సహాయపడుతుంది.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />ఈ ఫీచర్ని ఆఫ్ చేయడం వలన సిస్టమ్ అప్డేట్లు మరియు భద్రత వంటి ముఖ్యమైన సేవలకు అవసరమైన సమాచారాన్ని పంపగల ఈ పరికర సామర్థ్యంపై ప్రభావం పడదు.<ph name="END_PARAGRAPH2" /> @@ -5385,6 +5429,7 @@ <translation id="8650543407998814195">మీరు మీ పాత ప్రొఫైల్ను ఇప్పుడు యాక్సెస్ చేయలేకపోయినప్పటికీ, మీరు దాన్ని ఇప్పటికీ తీసివేయగలరు.</translation> <translation id="8651585100578802546">ఈ పేజీని బలవంతంగా మళ్లీ లోడ్ చేయి</translation> <translation id="8652400352452647993">ప్యాక్ ఎక్స్టెన్షన్ ఎర్రర్</translation> +<translation id="8653578191563425126">Crostiniకి రిజర్వ్ చేయడానికి డిస్క్ నిల్వ (మీరు దీన్ని తర్వాత మార్చుకోవచ్చు).</translation> <translation id="8654151524613148204">మీ కంప్యూటర్ నిర్వహించడానికి ఫైల్ చాలా పెద్దదిగా ఉంది. క్షమించండి.</translation> <translation id="8655295600908251630">ఛానల్</translation> <translation id="8655319619291175901">అయ్యో, ఏదో తప్పు జరిగింది.</translation> @@ -5649,6 +5694,7 @@ <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> రోజు క్రితం యాక్టివ్గా ఉంది</translation> <translation id="8986362086234534611">మరిచిపోయారా</translation> <translation id="8986494364107987395">Googleకు ఆటోమేటిక్గా వినియోగ గణాంకాలను, క్రాష్ నివేదికలను పంపు</translation> +<translation id="8986651757229422279"><ph name="ORIGIN_NAME" /> ద్వారా మరియు దాని ఇన్స్టాల్ చేసిన యాప్ ద్వారా స్టోర్ అయిన డేటా మరియు కుక్కీలను ఇది తొలగిస్తుంది.</translation> <translation id="8987927404178983737">నెల</translation> <translation id="8991520179165052608">సైట్ మీ మైక్రోఫోన్ను ఉపయోగించవచ్చు</translation> <translation id="899403249577094719">Netscape సర్టిఫికెట్ ఆధార URL</translation> @@ -5800,6 +5846,7 @@ <translation id="932508678520956232">ముద్రించడాన్ని ప్రారంభించడం సాధ్యం కాలేదు.</translation> <translation id="93343527085570547">చట్టపరమైన కారణాలతో కంటెంట్ మార్పులను అభ్యర్ధించడానికి <ph name="BEGIN_LINK1" />చట్టపరమైన అంశాల సహాయ పేజీ<ph name="END_LINK1" />కు వెళ్లండి. కొంత ఖాతా మరియు సిస్టమ్ సమాచారం Googleకి పంపబడవచ్చు. సాంకేతిక సమస్యల పరిష్కారానికి మరియు మా సేవలను మెరుగుపరచడానికి మీరు మాకు ఇచ్చిన సమాచారాన్ని మా <ph name="BEGIN_LINK2" />గోప్యతా విధానం<ph name="END_LINK2" /> మరియు <ph name="BEGIN_LINK3" />సేవా నిబంధనలు<ph name="END_LINK3" />కు లోబడి మేము ఉపయోగిస్తాము.</translation> <translation id="93393615658292258">పాస్వర్డ్ మాత్రమే</translation> +<translation id="934244546219308557">ఈ సమూహానికి పేరు పెట్టండి</translation> <translation id="934503638756687833">అవసరమైతే ఇక్కడ జాబితా చేయబడని అంశాలను కూడా తీసివేయవచ్చు. Chrome గోప్యత విధాన పత్రంలో <a href="<ph name="URL" />">అవాంఛిత సాఫ్ట్వేర్ రక్షణ</a> గురించి మరింత తెలుసుకోండి.</translation> <translation id="935490618240037774">మీ బుక్మార్క్లు, చరిత్ర, పాస్వర్డ్లు, ఇతర సెట్టింగ్లు మీ Google ఖాతాకు సింక్ చేయబడతాయి. కాబట్టి మీరు వీటిని మీ అన్ని పరికరాల్లో ఉపయోగించవచ్చు.</translation> <translation id="935854577147268200">Smart Lock ఫోన్ మారింది. Smart Lockను అప్డేట్ చేయడానికి మీ పాస్వర్డ్ను నమోదు చేయండి. తదుపరిసారి, మీ ఫోన్ మీ <ph name="DEVICE_TYPE" />ను అన్లాక్ చేస్తుంది. మీరు సెట్టింగ్లలో Smart Lockను ఆఫ్ చేయవచ్చు</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb index fd76d81..aaeed186 100644 --- a/chrome/app/resources/generated_resources_th.xtb +++ b/chrome/app/resources/generated_resources_th.xtb
@@ -33,7 +33,6 @@ <translation id="1036982837258183574">กด |<ph name="ACCELERATOR" />| เพื่อออกจากโหมดเต็มหน้าจอ</translation> <translation id="1038168778161626396">เข้ารหัสเท่านั้น</translation> <translation id="1039337018183941703">ไฟล์ไม่ถูกต้องหรือเสียหาย</translation> -<translation id="1039850285407663109">ระบบไม่รู้จักไฟล์ที่เลือกและอาจเป็นไฟล์อันตราย ขอแนะนำให้สแกนก่อนเปิดไฟล์นี้</translation> <translation id="1041175011127912238">หน้านี้ไม่ตอบสนอง</translation> <translation id="1041263367839475438">อุปกรณ์ที่ใช้ได้</translation> <translation id="1042174272890264476">คอมพิวเตอร์ของคุณมาพร้อมกับไลบรารี RLZ ของ <ph name="SHORT_PRODUCT_NAME" /> ในตัว โดย RLZ จะระบุแท็กที่ซ้ำกันได้และไม่สามารถระบุตัวบุคคลเพื่อวัดการค้นหาและการใช้งาน <ph name="SHORT_PRODUCT_NAME" /> ที่ทำงานโดยแคมเปญส่งเสริมการขายบางรายการ บางครั้งป้ายกำกับจะปรากฏในคำค้นหาของ Google Search ใน <ph name="PRODUCT_NAME" /></translation> @@ -152,6 +151,7 @@ <translation id="1197979282329025000">เกิดข้อผิดพลาดขณะดึงข้อมูลความสามารถของเครื่องพิมพ์ <ph name="PRINTER_NAME" /> ไม่สามารถลงทะเบียนเครื่องพิมพ์นี้กับ <ph name="CLOUD_PRINT_NAME" /></translation> <translation id="119944043368869598">ล้างทั้งหมด</translation> <translation id="1201402288615127009">ถัดไป</translation> +<translation id="1202556750060561551">ระบบจะล้างข้อมูลและคุกกี้ทั้งหมดที่ <ph name="SITE_GROUP_NAME" /> จัดเก็บไว้ เว็บไซต์ในกลุ่มนี้ รวมถึงแอปที่กลุ่มเว็บไซต์นี้ติดตั้งไว้</translation> <translation id="1202596434010270079">อัปเดตแอปคีออสก์แล้ว โปรดนำ USB สติ๊กออก</translation> <translation id="120368089816228251">โน้ตดนตรี</translation> <translation id="1205489148908752564">อ่านและเปลี่ยนผู้ใช้ที่อนุญาตพิเศษ</translation> @@ -279,8 +279,10 @@ <translation id="138784436342154190">คืนค่าเป็นหน้าเริ่มต้นใช้งานเริ่มต้นไหม</translation> <translation id="1390548061267426325">เปิดเป็นแท็บทั่วไป</translation> <translation id="1393283411312835250">ดวงอาทิตย์และเมฆ</translation> +<translation id="1393787139683794508">การดำเนินการนี้จะล้างข้อมูลและคุกกี้ทั้งหมด <ph name="ORIGIN_NAME" /> ที่จัดเก็บไว้</translation> <translation id="1395730723686586365">โปรแกรมอัปเดตเริ่มต้นแล้ว</translation> <translation id="1396139853388185343">เกิดข้อผิดพลาดในการตั้งค่าเครื่องพิมพ์</translation> +<translation id="1396259464226642517">ผลลัพธ์นี้ต่างจากที่คาดไว้ไหม <ph name="BEGIN_LINK" />ส่งความคิดเห็น<ph name="END_LINK" /></translation> <translation id="1396963298126346194">ชื่อผู้ใช้และรหัสผ่านที่คุณป้อนไม่ตรงกัน</translation> <translation id="1397500194120344683">ไม่มีอุปกรณ์ที่มีสิทธิ์ <ph name="LINK_BEGIN" />ดูข้อมูลเพิ่มเติม<ph name="LINK_END" /></translation> <translation id="1398853756734560583">ย่อ</translation> @@ -554,6 +556,7 @@ <translation id="1758018619400202187">EAP-TLS</translation> <translation id="17584710573359123">ดูใน Chrome เว็บสโตร์</translation> <translation id="176193854664720708">เซ็นเซอร์ลายนิ้วมืออยู่ในปุ่มเปิด/ปิด โปรดแตะเบาๆ ด้วยนิ้วใดก็ได้</translation> +<translation id="176273057789108760">องค์กรกำลังสแกนไฟล์ที่ลากมาเพื่ออนุมัติด้านความปลอดภัย</translation> <translation id="1763046204212875858">สร้างทางลัดไปยังแอปพลิเคชัน</translation> <translation id="1763108912552529023">สำรวจต่อไป</translation> <translation id="1763808908432309942">เปิดในแท็บใหม่</translation> @@ -592,6 +595,7 @@ <translation id="1805472176602625930">กดปุ่มที่คีย์ความปลอดภัย</translation> <translation id="1805738995123446102">แท็บพื้นหลังกำลังใช้ไมโครโฟน</translation> <translation id="1805822111539868586">ตรวจสอบการแสดงผล</translation> +<translation id="1805888043020974594">เซิร์ฟเวอร์การพิมพ์</translation> <translation id="1805967612549112634">ยืนยัน PIN</translation> <translation id="1809734401532861917">เพิ่มบุ๊กมาร์ก ประวัติการเข้าชม รหัสผ่าน และการตั้งค่าอื่นๆ ของฉันไปยัง <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">บริการ</translation> @@ -633,7 +637,6 @@ <translation id="1858585891038687145">เชื่อถือใบรับรองนี้ในการระบุตัวตนผู้ผลิตซอฟต์แวร์</translation> <translation id="1861262398884155592">โฟลเดอร์นี้ว่างเปล่า</translation> <translation id="1863182668524159459">ไม่พบพอร์ตอนุกรม</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> เป็นไฟล์ที่ไม่รู้จัก สแกนไฟล์เพื่อลดความเสี่ยง</translation> <translation id="1864111464094315414">ลงชื่อเข้าใช้</translation> <translation id="1864400682872660285">เย็น</translation> <translation id="1864454756846565995">อุปกรณ์ USB-C (พอร์ตด้านหลัง)</translation> @@ -740,6 +743,7 @@ <translation id="202352106777823113">การดาวน์โหลดนี้ใช้เวลานานเกินไปและถูกหยุดลงโดยเครือข่าย</translation> <translation id="2025632980034333559"><ph name="APP_NAME" /> ขัดข้อง คลิกที่บอลลูนเพื่อโหลดส่วนขยายอีกครั้ง</translation> <translation id="2025891858974379949">เนื้อหาที่ไม่ปลอดภัย</translation> +<translation id="202918510990975568">ป้อนรหัสผ่านเพื่อกำหนดค่าความปลอดภัยและการลงชื่อเข้าใช้</translation> <translation id="2034346955588403444">เพิ่มเครือข่าย Wi-Fi อื่นๆ</translation> <translation id="203574396658008164">เปิดใช้การจดบันทึกจากหน้าจอล็อก</translation> <translation id="2037445849770872822">มีการตั้งค่าการควบคุมดูแลสำหรับบัญชี Google นี้ หากต้องการตั้งค่าการควบคุมโดยผู้ปกครองเพิ่มเติม ให้เลือก "ต่อไป" @@ -891,6 +895,7 @@ <translation id="2224471211857467033">เหตุการณ์การช่วยเหลือพิเศษ</translation> <translation id="2224551243087462610">แก้ไขชื่อโฟลเดอร์</translation> <translation id="2226449515541314767">ไซต์นี้ถูกบล็อกจากการมีสิทธิ์ควบคุมอุปกรณ์ MIDI เต็มรูปแบบ</translation> +<translation id="222704500187107962">ระบบจะนำข้อยกเว้นนี้ออกโดยอัตโนมัติหลังคุณออกจากเซสชันที่ไม่ระบุตัวตนในปัจจุบัน</translation> <translation id="2227179592712503583">นำคำแนะนำออก</translation> <translation id="2229161054156947610">เหลือเวลามากกว่า 1 ชั่วโมง</translation> <translation id="222931766245975952">ไฟล์ไม่สมบูรณ์</translation> @@ -944,6 +949,7 @@ <translation id="2300383962156589922">ปรับแต่งและควบคุม <ph name="APP_NAME" /></translation> <translation id="2301382460326681002">ไดเรกทอรีหลักของส่วนขยายไม่ถูกต้อง</translation> <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" ขออนุญาตเพิ่มเติม</translation> +<translation id="23055578400314116">เลือกชื่อผู้ใช้</translation> <translation id="2307462900900812319">กำหนดค่าเครือข่าย</translation> <translation id="230927227160767054">หน้าเว็บนี้ต้องการติดตั้งเครื่องจัดการบริการ</translation> <translation id="2309620859903500144">เว็บไซต์นี้ถูกบล็อกไม่ให้เข้าถึงเซ็นเซอร์ตรวจจับการเคลื่อนไหวหรือแสง</translation> @@ -983,6 +989,7 @@ <translation id="2353297238722298836">อนุญาตให้ใช้กล้องถ่ายรูปและไมโครโฟน</translation> <translation id="2356070529366658676">ถาม</translation> <translation id="2357330829548294574">นำ <ph name="USER_NAME" /> ออก</translation> +<translation id="235798134753548762">ระบบจะซิงค์แอป การตั้งค่า และค่ากำหนด Wi-Fi ของคุณ หากต้องการเปลี่ยนแปลง ให้ไปที่การตั้งค่าได้ทุกเมื่อหลังจากที่ตั้งค่า</translation> <translation id="2359345697448000899">จัดการส่วนขยายของคุณโดยคลิกที่ "ส่วนขยาย" ในเมนู "เครื่องมือ"</translation> <translation id="2359808026110333948">ต่อไป</translation> <translation id="236117173274098341">เพิ่มประสิทธิภาพ</translation> @@ -1035,6 +1042,7 @@ <translation id="2436720498717686157">องค์กรของคุณกำหนดให้อัปเดตอุปกรณ์นี้ทันที</translation> <translation id="2439545803278355377">ป้อน PIN ใหม่ PIN ต้องยาวอย่างน้อย 4 อักขระและอนุญาตให้ใช้ตัวอักษร ตัวเลข และอักขระอื่นๆ</translation> <translation id="2440604414813129000">ดูโ&ค้ดต้นฉบับ</translation> +<translation id="244231003699905658">ที่อยู่ไม่ถูกต้อง โปรดตรวจสอบที่อยู่แล้วลองอีกครั้ง</translation> <translation id="2442916515643169563">เงาของข้อความ</translation> <translation id="2445081178310039857">จำเป็นต้องระบุไดเรกทอรีหลักของส่วนขยาย</translation> <translation id="2445484935443597917">สร้างโปรไฟล์ใหม่</translation> @@ -1089,6 +1097,7 @@ <translation id="2501278716633472235">ย้อนกลับ</translation> <translation id="2501797496290880632">พิมพ์แป้นพิมพ์ลัด</translation> <translation id="2502441965851148920">เปิดใช้การอัปเดตอัตโนมัติอยู่ ผู้ดูแลระบบได้ปิดใช้การอัปเดตด้วยตนเอง</translation> +<translation id="2502719318159902502">สิทธิ์เข้าถึงแบบเต็มรูปแบบ</translation> <translation id="2505127913256479918">ระบบจะนำบัญชีที่มีการควบคุมดูแลนี้ออกในเร็วๆ นี้</translation> <translation id="2505324914378689427">{SCREEN_INDEX,plural, =1{หน้าจอ #}other{หน้าจอ #}}</translation> <translation id="2505402373176859469"><ph name="RECEIVED_AMOUNT" /> จาก <ph name="TOTAL_SIZE" /></translation> @@ -1361,6 +1370,7 @@ <translation id="2865919525181940183">ภาพหน้าจอของโปรแกรมที่กำลังแสดงอยู่ในหน้าจอ</translation> <translation id="286674810810214575">กำลังตรวจสอบแหล่งจ่ายไฟ...</translation> <translation id="2867768963760577682">เปิดเป็นแท็บที่ถูกตรึง</translation> +<translation id="2868184003987917410">ไม่อนุญาตให้เว็บไซต์เข้าถึงอุปกรณ์/ข้อมูล Virtual Reality ของคุณ</translation> <translation id="2868746137289129307">ส่วนขยายนี้ล้าสมัยแล้วและปิดใช้อยู่โดยนโยบายองค์กร แต่อาจเปิดใช้โดยอัตโนมัติได้เมื่อมีเวอร์ชันใหม่</translation> <translation id="2870560284913253234">เว็บไซต์</translation> <translation id="2870909136778269686">กำลังอัปเดต...</translation> @@ -1406,6 +1416,7 @@ <translation id="2916745397441987255">ค้นหาส่วนขยาย</translation> <translation id="2921081876747860777">โปรดสร้างรหัสผ่านเพื่อปกป้องข้อมูลในเครื่อง</translation> <translation id="2923234477033317484">นำบัญชีนี้ออก</translation> +<translation id="2925054096976782003">องค์กรกำลังสแกนข้อมูลที่วางนี้เพื่ออนุมัติด้านความปลอดภัย</translation> <translation id="2926085873880284723">คืนค่าทางลัดเริ่มต้น</translation> <translation id="2927017729816812676">พื้นที่เก็บข้อมูลแคช</translation> <translation id="2931157624143513983">พอดีกับพื้นที่ที่พิมพ์ได้</translation> @@ -1429,6 +1440,7 @@ <translation id="2956070239128776395">ส่วนที่ฝังอยู่ในกลุ่ม: <ph name="ERROR_LINE" /></translation> <translation id="2957117904572187936">ไม่อนุญาตให้เว็บไซต์แก้ไขไฟล์หรือโฟลเดอร์ในอุปกรณ์</translation> <translation id="2958721676848865875">คำเตือนเกี่ยวกับการรวมแพ็กเกจส่วนขยาย</translation> +<translation id="2959127025785722291">เกิดข้อผิดพลาด สแกนไม่สำเร็จ โปรดลองอีกครั้ง</translation> <translation id="2959842337402130152">นำเข้าไม่ได้เนื่องจากมีพื้นที่เก็บข้อมูลไม่เพียงพอ เพิ่มพื้นที่ว่าง <ph name="SPACE_REQUIRED" /> ในอุปกรณ์แล้วลองอีกครั้ง</translation> <translation id="296026337010986570">เสร็จแล้ว! นำซอฟต์แวร์ที่เป็นอันตรายออกแล้ว หากต้องการเปิดส่วนขยายอีกครั้ง โปรดไปที่<a href="chrome://extensions">ส่วนขยาย</a></translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" /> (มีส่วนขยายให้มาด้วย)</translation> @@ -1686,6 +1698,7 @@ <translation id="3348038390189153836">พบอุปกรณ์แบบถอดออกได้</translation> <translation id="3349933790966648062">หน่วยความจำที่ใช้</translation> <translation id="3350117557200012647">เข้าสู่โหมดการจับคู่</translation> +<translation id="3350244554415289209">ถามเมื่อเว็บไซต์ต้องการเข้าถึงตำแหน่งของกล้องหรือทำแผนผังห้องของคุณ (แนะนำ)</translation> <translation id="3355936511340229503">ข้อผิดพลาดในการเชื่อมต่อ</translation> <translation id="3356580349448036450">เสร็จสมบูรณ์</translation> <translation id="3359256513598016054">ข้อจำกัดนโยบายใบรับรอง</translation> @@ -1749,6 +1762,7 @@ <translation id="3448492834076427715">อัปเดตบัญชี</translation> <translation id="3449839693241009168">กด <ph name="SEARCH_KEY" /> เพื่อส่งคำสั่งไปที่ <ph name="EXTENSION_NAME" /></translation> <translation id="3450157232394774192">เปอร์เซ็นต์การเกิดขึ้นของสถานะไม่มีการใช้งาน</translation> +<translation id="3451332697983754369">ซิงค์ <ph name="DEVICE_TYPE" /> ของฉัน</translation> <translation id="3453612417627951340">ต้องขออนุมัติก่อน</translation> <translation id="3454157711543303649">การเปิดใช้งานเสร็จสมบูรณ์</translation> <translation id="3454213325559396544">นี่เป็นการอัปเดตซอฟต์แวร์และความปลอดภัยอัตโนมัติครั้งสุดท้ายสำหรับ <ph name="DEVICE_TYPE" /> เครื่องนี้ โปรดอัปเกรดเป็นรุ่นที่ใหม่กว่าเพื่อรับการอัปเดตในอนาคต</translation> @@ -1771,6 +1785,7 @@ <translation id="347785443197175480">อนุญาตให้ <ph name="HOST" /> เข้าถึงกล้องถ่ายรูปและไมโครโฟนของคุณต่อไป</translation> <translation id="3478685642445675458">โปรดปลดล็อกโปรไฟล์ของคุณก่อนนำบุคคลออก</translation> <translation id="3479552764303398839">ไม่ใช่ตอนนี้</translation> +<translation id="3479685872808224578">ไม่พบเซิร์ฟเวอร์การพิมพ์ โปรดตรวจสอบที่อยู่แล้วลองอีกครั้ง</translation> <translation id="3481268647794498892">กำลังจะเปิดใน <ph name="ALTERNATIVE_BROWSER_NAME" /> ในอีก <ph name="COUNTDOWN_SECONDS" /> วินาที</translation> <translation id="3484273680291419129">กำลังนำซอฟต์แวร์อันตรายออก...</translation> <translation id="3484869148456018791">รับใบรับรองใหม่</translation> @@ -1886,6 +1901,7 @@ <translation id="3630132874740063857">โทรศัพท์ของคุณ</translation> <translation id="3630995161997703415">เพิ่มเว็บไซต์นี้ลงในชั้นวางเพื่อใช้งานได้ทุกเมื่อ</translation> <translation id="3634507049637220048">เครือข่ายที่ <ph name="NETWORK_INDEX" /> จาก <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, จัดการโดยผู้ดูแลระบบ, รายละเอียด</translation> +<translation id="3635241501480133979">ข้อมูลนี้ละเมิดนโยบายความปลอดภัยขององค์กรและจะวางไม่ได้</translation> <translation id="3635353578505343390">ส่งความคิดเห็นไปยัง Google</translation> <translation id="3636096452488277381">สวัสดี <ph name="USER_GIVEN_NAME" /></translation> <translation id="3636766455281737684"><ph name="PERCENTAGE" />% - ใช้ได้อีก <ph name="TIME" /></translation> @@ -1920,6 +1936,7 @@ <translation id="3677657024345889897">เสียงเบาที่สุด</translation> <translation id="3677911431265050325">ขอเว็บไซต์ในอุปกรณ์เคลื่อนที่</translation> <translation id="3678156199662914018">ส่วนขยาย: <ph name="EXTENSION_NAME" /></translation> +<translation id="3678613690490567106">ซิงค์เพื่อรับประสบการณ์ใช้งานที่ปรับให้เหมาะกับคุณในอุปกรณ์ต่างๆ</translation> <translation id="3681311097828166361">ขอขอบคุณสำหรับความคิดเห็น คุณกำลังออฟไลน์อยู่ในขณะนี้ และระบบจะส่งรายงานของคุณในภายหลัง</translation> <translation id="3682824389861648626">เกณฑ์การเคลื่อนไหว</translation> <translation id="3683524264665795342">คำขอการแชร์หน้าจอของ <ph name="APP_NAME" /></translation> @@ -2430,6 +2447,7 @@ <translation id="4400632832271803360">กดแป้น "Launcher" ค้างไว้เพื่อเปลี่ยนการทำงานของแป้นแถวบนสุด</translation> <translation id="4400963414856942668">คุณคลิกดาวเพื่อบุ๊กมาร์กแท็บได้</translation> <translation id="4403775189117163360">เลือกโฟลเดอร์อื่น</translation> +<translation id="4404136731284211429">สแกนอีกครั้ง</translation> <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation> <translation id="4408599188496843485">ความ&ช่วยเหลือ</translation> <translation id="4409697491990005945">ระยะขอบ</translation> @@ -2448,6 +2466,7 @@ <translation id="4421932782753506458">ฟลัฟฟี</translation> <translation id="4423376891418188461">กู้คืนการตั้งค่า</translation> <translation id="442397852638519243"><ph name="USER_NAME" /> ผู้ดูแลระบบต้องการให้คุณเปลี่ยนรหัสผ่าน</translation> +<translation id="4429030830601238961">ข้อมูลนี้ละเมิดนโยบายความปลอดภัยขององค์กรและจะวางไม่ได้</translation> <translation id="4430019312045809116">ระดับเสียง</translation> <translation id="4430369329743628066">เพิ่มบุ๊กมาร์กแล้ว</translation> <translation id="4434045419905280838">ป๊อปอัปและการเปลี่ยนเส้นทาง</translation> @@ -2494,9 +2513,11 @@ <translation id="4501530680793980440">ยืนยันการนำออก</translation> <translation id="4502423230170890588">นำออกจากอุปกรณ์นี้</translation> <translation id="4504940961672722399">ใช้ส่วนขยายนี้โดยคลิกที่ไอคอนนี้ หรือกด <ph name="EXTENSION_SHORTCUT" /></translation> +<translation id="4507164039066603071">ไม่อนุญาตให้เว็บไซต์เข้าถึงตำแหน่งของกล้องหรือทำแผนผังห้องของคุณ</translation> <translation id="4508051413094283164">เปิดทั้งหมดในหน้าต่างที่ไม่ระบุตัวตน</translation> <translation id="4508265954913339219">การเปิดใช้งานล้มเหลว</translation> <translation id="4508765956121923607">ดู&ต้นฉบับ</translation> +<translation id="4510614391273086606">ระบบกำลังคืนค่าไฟล์และแอป Linux เป็นสถานะข้อมูลสำรอง</translation> <translation id="451407183922382411">ขับเคลื่อนโดย <ph name="COMPANY_NAME" /></translation> <translation id="4514610446763173167">สลับปุ่มควบคุมวิดีโอเพื่อเล่นหรือหยุดชั่วคราว</translation> <translation id="451515744433878153">นำออก</translation> @@ -2694,6 +2715,7 @@ <translation id="480990236307250886">เปิดหน้าแรก</translation> <translation id="4813136279048157860">รูปภาพของฉัน</translation> <translation id="4813512666221746211">ข้อผิดพลาดของเครือข่าย</translation> +<translation id="4814378367953456825">ป้อนชื่อให้ลายนิ้วมือนี้</translation> <translation id="4820236583224459650">กำหนดเป็นตั๋วที่ใช้งานอยู่</translation> <translation id="4821935166599369261">&เปิดใช้งานการทำแฟ้มประวัติ</translation> <translation id="4823484602432206655">อ่านและเปลี่ยนการตั้งค่าผู้ใช้และอุปกรณ์</translation> @@ -2740,6 +2762,7 @@ <translation id="4876895919560854374">ล็อกและปลดล็อกหน้าจอ</translation> <translation id="4877276003880815204">ตรวจสอบองค์ประกอบ</translation> <translation id="4878653975845355462">ผู้ดูแลระบบของคุณปิดพื้นหลังที่กำหนดเอง</translation> +<translation id="4878718769565915065">เพิ่มลายนิ้วมือในคีย์ความปลอดภัยนี้ไม่สำเร็จ</translation> <translation id="4879491255372875719">อัตโนมัติ (ค่าเริ่มต้น)</translation> <translation id="4880328057631981605">ชื่อจุดเข้าใช้งาน</translation> <translation id="4880827082731008257">ค้นประวัติการเข้าชม</translation> @@ -2870,6 +2893,7 @@ <translation id="5065775832226780415">Smart Lock</translation> <translation id="5067399438976153555">เปิดเสมอ</translation> <translation id="5067867186035333991">ถามว่า <ph name="HOST" /> ต้องการเข้าถึงไมโครโฟนของคุณไหม</translation> +<translation id="5068377946749700758">องค์กรกำลังสแกนข้อมูลที่ลากมาเพื่ออนุมัติด้านความปลอดภัย</translation> <translation id="5068918910148307423">ไม่อนุญาตให้เว็บไซต์ที่ปิดล่าสุดดำเนินการส่งและรับข้อมูลต่อจนเสร็จ</translation> <translation id="5068919226082848014">พิซซ่า</translation> <translation id="5072052264945641674">ปรับขนาดเคอร์เซอร์</translation> @@ -3062,6 +3086,7 @@ <translation id="5341793073192892252">บล็อกคุกกี้ต่อไปนี้แล้ว (บล็อกคุกกี้ของบุคคลที่สามอยู่โดยไม่มีข้อยกเว้น)</translation> <translation id="5341980496415249280">โปรดรอ กำลังบรรจุ...</translation> <translation id="5342091991439452114">PIN ต้องมีอย่างน้อย <ph name="MINIMUM" /> หลัก</translation> +<translation id="5344036115151554031">กำลังคืนค่า Linux</translation> <translation id="5352033265844765294">การระบุเวลา</translation> <translation id="5353252989841766347">ส่งออกรหัสผ่านจาก Chrome</translation> <translation id="5355099869024327351">อนุญาตให้ Assistant แสดงการแจ้งเตือน</translation> @@ -3115,6 +3140,7 @@ <translation id="5427459444770871191">หมุน&ตามเข็มนาฬิกา</translation> <translation id="542872847390508405">คุณกำลังเรียกดูในฐานะผู้เยี่ยมชม</translation> <translation id="5428850089342283580"><ph name="ACCNAME_APP" /> (มีการอัปเดต)</translation> +<translation id="542948651837270806">ต้องติดตั้งอัปเดตเฟิร์มแวร์ของโมดูลแพลตฟอร์มที่เชื่อถือได้ ดู <ph name="TPM_FIRMWARE_UPDATE_LINK" /></translation> <translation id="5430931332414098647">การเชื่อมต่อ Wi-Fi ฮอตสปอตจากมือถือโดยอัตโนมัติ</translation> <translation id="5431318178759467895">สี</translation> <translation id="5431825016875453137">OpenVPN/L2TP</translation> @@ -3295,6 +3321,7 @@ <translation id="5659593005791499971">อีเมล</translation> <translation id="5659833766619490117">แปลหน้านี้ไม่ได้</translation> <translation id="5660204307954428567">จับคู่กับ <ph name="DEVICE_NAME" /></translation> +<translation id="5662513737565158057">เปลี่ยนลักษณะที่แอป Linux จะทำงาน</translation> <translation id="5667546120811588575">กำลังตั้งค่า Google Play...</translation> <translation id="5669267381087807207">กำลังเปิดการใช้งาน</translation> <translation id="5669691691057771421">ป้อน PIN ใหม่</translation> @@ -3702,6 +3729,7 @@ <translation id="6238923052227198598">เก็บโน้ตล่าสุดไว้ในหน้าจอล็อก</translation> <translation id="6239558157302047471">โหลดเ&ฟรมซ้ำ</translation> <translation id="6241530762627360640">เข้าถึงข้อมูลเกี่ยวกับอุปกรณ์บลูทูธที่จับคู่กับระบบของคุณ และสำรวจอุปกรณ์บลูทูธใกล้เคียง</translation> +<translation id="6241844896329831164">ไม่จำเป็นต้องเข้าถึง</translation> <translation id="6242589501614145408">รีเซ็ตคีย์ความปลอดภัย</translation> <translation id="6242852299490624841">โฟกัสแท็บนี้</translation> <translation id="6243280677745499710">วอลเปเปอร์ปัจจุบัน</translation> @@ -3902,6 +3930,8 @@ <translation id="6531282281159901044">เก็บไฟล์อันตรายไว้</translation> <translation id="6532101170117367231">บันทึกไปยัง Google ไดรฟ์</translation> <translation id="6532106788206463496">บันทึกการเปลี่ยนแปลง</translation> +<translation id="6532206849875187177">ความปลอดภัยและการลงชื่อเข้าใช้</translation> +<translation id="6532527800157340614">ลงชื่อเข้าใช้ไม่สำเร็จเนื่องจากระบบเรียกดูโทเค็นเพื่อการเข้าถึงไม่ได้ โปรดตรวจสอบการเชื่อมต่อเครือข่ายแล้วลองอีกครั้ง</translation> <translation id="6532663472409656417">องค์กรที่ลงทะเบียน</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />หมายเหตุ:<ph name="END_BOLD" /> เปิดใช้งานเฉพาะเมื่อคุณทราบว่าคุณกำลังทำอะไรอยู่ หรือเมื่อคุณถูกร้องขอให้ทำเช่นนั้นเท่านั้น เนื่องจากคอลเล็กชันข้อมูลอาจลดประสิทธิภาพในการปฏิบัติงาน</translation> <translation id="6541638731489116978">เว็บไซต์นี้ถูกบล็อกไม่ให้เข้าถึงเซ็นเซอร์ตรวจจับความเคลื่อนไหว</translation> @@ -3909,6 +3939,7 @@ <translation id="6545864417968258051">การสแกนหาบลูทูธ</translation> <translation id="6545867563032584178">ไมโครโฟนปิดอยู่ในค่ากำหนดของระบบ Mac</translation> <translation id="6547354035488017500">เพิ่มพื้นที่ว่างบนอุปกรณ์อย่างน้อย 512 MB มิฉะนั้นอุปกรณ์ของคุณอาจไม่ตอบสนอง หากต้องการเพิ่มพื้นที่ว่าง ให้ลบไฟล์ออกจากพื้นที่เก็บข้อมูลของอุปกรณ์</translation> +<translation id="6549966385318247177">ส่วนขยายนี้ถูกบล็อกเนื่องจากมีเนื้อหาสำหรับผู้ใหญ่</translation> <translation id="6550675742724504774">ตัวเลือก</translation> <translation id="6551508934388063976">คำสั่งไม่สามารถใช้งานได้ กด Control-N เพื่อเปิดหน้าต่างใหม่</translation> <translation id="6551612971599078809">เว็บไซต์กำลังใช้ USB</translation> @@ -4240,6 +4271,7 @@ <translation id="703001695939087067">เข้าสู่โหมดภาพรวมหน้าต่างแล้ว กดแท็บเพื่อไปยังส่วนต่างๆ</translation> <translation id="7031608529463141342"><ph name="WINDOW_TITLE" /> - เชื่อมต่อพอร์ตอนุกรมอยู่</translation> <translation id="7031962166228839643">TPM กำลังได้รับการจัดเตรียม โปรดรอสักครู่ (การดำเนินการนี้อาจใช้เวลาสองถึงสามนาที)...</translation> +<translation id="7034615910652881882">ถามเมื่อเว็บไซต์ต้องการเข้าถึงอุปกรณ์/ข้อมูล Virtual Reality ของคุณ</translation> <translation id="7037509989619051237">ข้อความที่จะแสดงตัวอย่าง</translation> <translation id="7039326228527141150">เข้าถึงอุปกรณ์ USB จาก <ph name="VENDOR_NAME" /></translation> <translation id="7039912931802252762">การเข้าสู่ระบบด้วยสมาร์ทการ์ดของ Microsoft</translation> @@ -4279,6 +4311,7 @@ <translation id="7081952801286122383">คุณอยู่ในโหมดไม่ระบุตัวตน</translation> <translation id="708278670402572152">ยกเลิกการเชื่อมต่อเพื่อเปิดใช้การสแกน</translation> <translation id="7085389578340536476">อนุญาตให้ Chrome บันทึกเสียงไหม</translation> +<translation id="7086467953285486445">ไฟล์เหล่านี้ละเมิดนโยบายความปลอดภัยขององค์กรและจะวางไม่ได้</translation> <translation id="7088434364990739311">การเริ่มต้นการตรวจสอบการอัปเดตล้มเหลว (รหัสข้อผิดพลาด <ph name="ERROR" />)</translation> <translation id="7088561041432335295">ที่เก็บ ZIP ถาวร - เปิดและแพ็กไฟล์ ZIP ในแอป Files</translation> <translation id="7088674813905715446">ผู้ดูแลระบบนำอุปกรณ์นี้ไปไว้ในสถานะถูกยกเลิกการเตรียมใช้งาน หากต้องการเปิดใช้สำหรับการลงทะเบียน โปรดขอให้ผู้ดูแลระบบนำอุปกรณ์ไปไว้ในสถานะรอดำเนินการ</translation> @@ -4392,6 +4425,7 @@ <translation id="7241389281993241388">โปรดลงชื่อเข้าใช้ <ph name="TOKEN_NAME" /> เพื่อนำเข้าใบรับรองไคลเอ็นต์</translation> <translation id="7241443820034350811">หากคีย์ความปลอดภัยของคุณไม่ได้อยู่ในรายการ ให้กดปุ่มของคีย์อย่างน้อย 5 วินาที</translation> <translation id="7243632151880336635">ล้างและออกจากระบบ</translation> +<translation id="7243784282103630670">เกิดข้อผิดพลาดขณะอัปเกรด Linux เราจะคืนค่าคอนเทนเนอร์โดยใช้ข้อมูลสำรองของคุณ</translation> <translation id="7245628041916450754"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (ดีที่สุด)</translation> <translation id="7246230585855757313">เสียบคีย์ความปลอดภัยใหม่แล้วลองอีกครั้ง</translation> <translation id="7246947237293279874">พร็อกซี FTP</translation> @@ -4478,6 +4512,7 @@ <translation id="7360233684753165754">พิมพ์ <ph name="PAGE_NUMBER" /> หน้าไปยัง <ph name="PRINTER_NAME" /></translation> <translation id="7361297102842600584">คลิกขวาเพื่อเรียกใช้ <ph name="PLUGIN_NAME" /></translation> <translation id="7363117941401515667">อัปเดตเมื่อ <ph name="HOURS" /> ชม. ที่ผ่านมา</translation> +<translation id="7364591875953874521">ขอสิทธิ์เข้าถึงแล้ว</translation> <translation id="7364796246159120393">เลือกไฟล์</translation> <translation id="7366415735885268578">เพิ่มเว็บไซต์</translation> <translation id="7366909168761621528">ข้อมูลการท่องเว็บ</translation> @@ -4503,6 +4538,7 @@ <translation id="740624631517654988">ปิดกั้นป๊อปอัป</translation> <translation id="7407430846095439694">นำเข้าและเชื่อมโยง</translation> <translation id="7407504355934009739">คนส่วนใหญ่บล็อกการแจ้งเตือนจากเว็บไซต์นี้</translation> +<translation id="740810853557944681">เพิ่มเซิร์ฟเวอร์การพิมพ์</translation> <translation id="7409549334477097887">ใหญ่พิเศษ</translation> <translation id="7409836189476010449">เรียกใช้ Flash</translation> <translation id="7410344089573941623">ถามว่า <ph name="HOST" /> ต้องการเข้าถึงกล้องและไมโครโฟนของคุณหรือไม่</translation> @@ -4523,6 +4559,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{เปิดทั้งหมดใน&หน้าต่างใหม่}=1{เปิดใน&หน้าต่างใหม่}other{เปิดทั้งหมด (#) ใน&หน้าต่างใหม่}}</translation> <translation id="7434509671034404296">นักพัฒนา</translation> <translation id="7434635829372401939">ซิงค์การตั้งค่า</translation> +<translation id="7434969625063495310">เพิ่มเซิร์ฟเวอร์การพิมพ์ไม่ได้ โปรดตรวจสอบการกำหนดค่าของเซิร์ฟเวอร์แล้วลองอีกครั้ง</translation> <translation id="7436921188514130341">แย่จัง! เกิดข้อผิดพลาดในระหว่างการตั้งชื่อ</translation> <translation id="7438976808740265764">เราจะไม่รองรับ Flash Player อีกต่อไปหลังจากเดือนธันวาคม 2020</translation> <translation id="7441736921018636843">หากต้องการเปลี่ยนการตั้งค่านี้ ให้<ph name="BEGIN_LINK" />รีเซ็ตการซิงค์<ph name="END_LINK" />เพื่อนำรหัสผ่านการซิงค์ออก</translation> @@ -4532,8 +4569,10 @@ <translation id="7443806024147773267">เข้าถึงรหัสผ่านได้เมื่อใดก็ตามที่ลงชื่อเข้าใช้บัญชี Google อยู่</translation> <translation id="7444983668544353857">ปิดการใช้งาน<ph name="NETWORKDEVICE" /></translation> <translation id="7448430327655618736">ติดตั้งแอปโดยอัตโนมัติ</translation> +<translation id="7448625729116931228">ถามเมื่อเว็บไซต์ต้องการเข้าถึงอุปกรณ์/ข้อมูล Virtual Reality ของคุณ (แนะนำ)</translation> <translation id="7450761244949417357">เปิดอยู่ใน <ph name="ALTERNATIVE_BROWSER_NAME" /></translation> <translation id="7453008956351770337">ในการเลือกเครื่องพิมพ์นี้ แสดงว่าคุณให้สิทธิ์การเข้าถึงเครื่องพิมพ์แก่ส่วนขยายต่อไปนี้:</translation> +<translation id="7454548535253569100">พอร์ทัล: <ph name="SUBFRAME_SITE" /></translation> <translation id="7456142309650173560">การพัฒนา</translation> <translation id="7456847797759667638">เปิดตำแหน่ง...</translation> <translation id="7458168200501453431">ใช้โปรแกรมตรวจตัวสะกดแบบเดียวกับ Google Search ข้อความที่คุณพิมพ์ในเบราว์เซอร์จะส่งไปยัง Google</translation> @@ -4579,6 +4618,7 @@ <translation id="7513029293694390567">ลงชื่อเข้าใช้เว็บไซต์โดยอัตโนมัติโดยใช้ข้อมูลเข้าสู่ระบบที่เก็บไว้ เมื่อฟีเจอร์นี้ปิดอยู่ ระบบจะขอให้คุณยืนยันทุกครั้งก่อนลงชื่อเข้าใช้เว็บไซต์</translation> <translation id="7514239104543605883">คัดลอกไปยังอุปกรณ์ของคุณ</translation> <translation id="7514365320538308">ดาวน์โหลด</translation> +<translation id="7520766081042531487">พอร์ทัลที่ไม่ระบุตัวตน: <ph name="SUBFRAME_SITE" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7522255036471229694">พูดว่า "Ok Google"</translation> <translation id="7525067979554623046">สร้าง</translation> @@ -4667,6 +4707,7 @@ <translation id="7652808307838961528">แก้ไขบุคคล, <ph name="PROFILE_NAME" /></translation> <translation id="765293928828334535">เพิ่มแอป ส่วนขยาย และสคริปต์ของผู้ใช้จากเว็บไซต์นี้ไม่ได้</translation> <translation id="7652954539215530680">สร้าง PIN</translation> +<translation id="7653295403398566475">ถามเมื่อเว็บไซต์ต้องการเข้าถึงตำแหน่งของกล้องหรือทำแผนผังห้องของคุณ</translation> <translation id="7654941827281939388">ใช้บัญชีนี้ในคอมพิวเตอร์เครื่องนี้อยู่แล้ว</translation> <translation id="7658239707568436148">ยกเลิก</translation> <translation id="7659584679870740384">คุณไม่ได้รับอนุญาตให้ใช้อุปกรณ์นี้ โปรดติดต่อผู้ดูแลระบบเพื่อขออนุญาตลงชื่อเข้าใช้</translation> @@ -4819,6 +4860,7 @@ <translation id="783214144752121388">บล็อกไม่ให้เว็บไซต์เรียกใช้ Flash (แนะนำ)</translation> <translation id="7833720883933317473">คำที่กำหนดเองที่บันทึกไว้จะแสดงที่นี่</translation> <translation id="7835178595033117206">นำบุ๊กมาร์กออกแล้ว</translation> +<translation id="7836850009646241041">ลองแตะคีย์ความปลอดภัยอีกครั้ง</translation> <translation id="7837776265184002579">หน้าแรกของคุณเปลี่ยนเป็น <ph name="URL" /></translation> <translation id="7839051173341654115">ดู/สำรองสื่อ</translation> <translation id="7839192898639727867">รหัสคีย์หัวเรื่องใบรับรอง</translation> @@ -5134,7 +5176,9 @@ <translation id="8260864402787962391">เมาส์</translation> <translation id="8261378640211443080">ส่วนขยายนี้ไม่ได้ระบุไว้ใน <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> และอาจถูกเพิ่มเข้ามาโดยที่คุณไม่รู้ตัว</translation> <translation id="8261506727792406068">ลบ</translation> +<translation id="8263336784344783289">ตั้งชื่อกลุ่มนี้</translation> <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" /> ได้ปิดใช้งานเคอร์เซอร์เมาส์แล้ว</translation> +<translation id="8264024885325823677">การตั้งค่านี้จัดการโดยผู้ดูแลระบบ</translation> <translation id="8264718194193514834">"<ph name="EXTENSION_NAME" />" เรียกใช้หน้าจอแบบเต็ม</translation> <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />นี่คือข้อมูลทั่วไปเกี่ยวกับอุปกรณ์นี้และวิธีใช้อุปกรณ์ (เช่น ระดับแบตเตอรี่ กิจกรรมในระบบและแอป และข้อผิดพลาด) ระบบจะใช้ข้อมูลดังกล่าวเพื่อปรับปรุง Android และข้อมูลแบบสรุปรวมบางอย่างจะช่วยให้แอป Google และพาร์ทเนอร์ต่างๆ เช่น นักพัฒนาซอฟต์แวร์ Android ปรับปรุงแอปและผลิตภัณฑ์ของตนให้ดีขึ้นได้อีกด้วย<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />การปิดฟีเจอร์นี้จะไม่ส่งผลต่อความสามารถของอุปกรณ์ในการส่งข้อมูลที่จำเป็นต้องใช้ในบริการสำคัญอย่างเช่น การอัปเดตระบบ และความปลอดภัย<ph name="END_PARAGRAPH2" /> @@ -5390,6 +5434,7 @@ <translation id="8650543407998814195">คุณยังคงนำโปรไฟล์เก่าออกได้ แม้จะเข้าถึงโปรไฟล์นั้นไม่ได้แล้วก็ตาม</translation> <translation id="8651585100578802546">ต้องโหลดหน้านี้ใหม่</translation> <translation id="8652400352452647993">ข้อผิดพลาดเกี่ยวกับการรวมแพ็กเกจส่วนขยาย</translation> +<translation id="8653578191563425126">พื้นที่ดิสก์ที่จะเก็บไว้ให้ Crostini (คุณเปลี่ยนตัวเลือกนี้ภายหลังได้)</translation> <translation id="8654151524613148204">ไฟล์มีขนาดใหญ่เกินกว่าที่คอมพิวเตอร์ของคุณจะจัดการได้ ขออภัย</translation> <translation id="8655295600908251630">ช่องทาง</translation> <translation id="8655319619291175901">อ๊ะ เกิดข้อผิดพลาดบางอย่าง</translation> @@ -5654,6 +5699,7 @@ <translation id="8985264973231822211">ใช้งานเมื่อ <ph name="DEVICE_LAST_ACTIVATED_TIME" /> วันที่ผ่านมา</translation> <translation id="8986362086234534611">ไม่จำ</translation> <translation id="8986494364107987395">ส่งสถิติการใช้งานและรายงานข้อขัดข้องไปยัง Google โดยอัตโนมัติ</translation> +<translation id="8986651757229422279">การดำเนินการนี้จะล้างข้อมูลและคุกกี้ทั้งหมดที่ <ph name="ORIGIN_NAME" /> จัดเก็บไว้ รวมถึงแอปที่ต้นทางนี้ติดตั้งไว้</translation> <translation id="8987927404178983737">เดือน</translation> <translation id="8991520179165052608">เว็บไซต์ใช้ไมโครโฟนของคุณได้</translation> <translation id="899403249577094719">URL ที่อ้างอิงใบรับรองของ Netscape</translation> @@ -5805,6 +5851,7 @@ <translation id="932508678520956232">ไม่สามารถเริ่มพิมพ์</translation> <translation id="93343527085570547">ไปที่<ph name="BEGIN_LINK1" />หน้าความช่วยเหลือทางกฎหมาย<ph name="END_LINK1" />เพื่อขอเปลี่ยนแปลงเนื้อหาด้วยเหตุผลทางกฎหมาย ระบบอาจส่งข้อมูลบัญชีและข้อมูลระบบบางส่วนไปยัง Google เราจะใช้ข้อมูลที่คุณให้มาเพื่อช่วยแก้ปัญหาด้านเทคนิคและปรับปรุงบริการโดยเป็นไปตาม<ph name="BEGIN_LINK2" />นโยบายความเป็นส่วนตัว<ph name="END_LINK2" />และ<ph name="BEGIN_LINK3" />ข้อกำหนดในการให้บริการ<ph name="END_LINK3" /></translation> <translation id="93393615658292258">เฉพาะรหัสผ่านเท่านั้น</translation> +<translation id="934244546219308557">ตั้งชื่อกลุ่มนี้</translation> <translation id="934503638756687833">หากจำเป็น ระบบจะนำรายการที่ไม่ได้แสดงไว้ที่นี่ออกด้วย ดูข้อมูลเพิ่มเติมเกี่ยวกับ<a href="<ph name="URL" />">การป้องกันซอฟต์แวร์ไม่พึงประสงค์</a>ในสมุดปกขาวเกี่ยวกับความเป็นส่วนตัวของ Chrome</translation> <translation id="935490618240037774">บุ๊กมาร์ก ประวัติการเข้าชม รหัสผ่าน และการตั้งค่าอื่นๆ จะซิงค์กับบัญชี Google เพื่อให้คุณสามารถใช้ข้อมูลเหล่านี้ได้กับอุปกรณ์ทุกเครื่อง</translation> <translation id="935854577147268200">เปลี่ยนโทรศัพท์ที่เปิด Smart Lock แล้ว โปรดป้อนรหัสผ่านเพื่ออัปเดต Smart Lock โทรศัพท์จะปลดล็อก <ph name="DEVICE_TYPE" /> ของคุณในครั้งถัดไป คุณปิด Smart Lock ได้ในการตั้งค่า</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb index 2cad245..99db98f 100644 --- a/chrome/app/resources/generated_resources_tr.xtb +++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Önizleme yükleniyor</translation> <translation id="1032605640136438169">Lütfen yeni şartları inceleyin</translation> <translation id="103279545524624934">Android uygulamalarını başlatmak için disk alanını boşaltın.</translation> -<translation id="1033343386521881354">Yazdırma sunucusunda 1 yazıcı bulundu.</translation> <translation id="1033780634303702874">Seri cihazlarınıza erişme</translation> <translation id="1034942643314881546">Uygulama resmi oluşturmak için adb etkinleştiriliyor</translation> <translation id="1036348656032585052">Kapat</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Tam ekrandan çıkmak için |<ph name="ACCELERATOR" />| tuşuna basın</translation> <translation id="1038168778161626396">Yalnızca Şifrele</translation> <translation id="1039337018183941703">Geçersiz veya bozuk dosya</translation> -<translation id="1039850285407663109">Seçilen dosya bilinmiyor ve tehlikeli olabilir. Bu dosyayı açmadan önce taramayı düşünün.</translation> <translation id="1041175011127912238">Bu sayfa yanıt vermiyor</translation> <translation id="1041263367839475438">Kullanılabilir cihazlar</translation> <translation id="1042174272890264476">Bilgisayarınızda aynı zamanda yerleşik <ph name="SHORT_PRODUCT_NAME" /> RLZ kitaplığı da bulunur. RLZ, aramaları ve belirli bir promosyon kampanyasının sağladığı <ph name="SHORT_PRODUCT_NAME" /> kullanımını ölçmek için benzersiz olmayan ve kimlik bilgileri içermeyen bir etiket atar. Bu etiketler bazen <ph name="PRODUCT_NAME" /> içindeki Google Arama sorgularında görünür.</translation> @@ -281,7 +279,7 @@ <translation id="138784436342154190">Varsayılan başlangıç sayfası geri yüklensin mi?</translation> <translation id="1390548061267426325">Normal Sekme Olarak Aç</translation> <translation id="1393283411312835250">Güneş ve bulutlar</translation> -<translation id="1393787139683794508">Bu işlem, <ph name="ORIGIN_NAME" /> web sitesinin depoladığı tüm verileri ve çerezleri temizler.</translation> +<translation id="1393787139683794508">Bu işlem, <ph name="ORIGIN_NAME" /> tarafından depolanan tüm verileri ve çerezleri temizler.</translation> <translation id="1395730723686586365">Güncelleyici başladı</translation> <translation id="1396139853388185343">Yazıcı kurulum hatası</translation> <translation id="1396259464226642517">Bu beklenmeyen bir sonuç muydu? <ph name="BEGIN_LINK" />Geri bildirim gönder<ph name="END_LINK" /></translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Yazılım üreticilerini tanımlamak için bu sertifikaya güvenin</translation> <translation id="1861262398884155592">Bu klasör boş</translation> <translation id="1863182668524159459">Seri bağlantı noktası bulunamadı</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> bilinmiyor. Riski en aza indirmek için dosyayı tarayın.</translation> <translation id="1864111464094315414">Oturum Aç</translation> <translation id="1864400682872660285">Daha Soğuk</translation> <translation id="1864454756846565995">USB-C cihaz (arka bağlantı noktası)</translation> @@ -4026,7 +4023,6 @@ <translation id="6678717876183468697">Sorgu URL'si</translation> <translation id="6680442031740878064">Kullanılabilir alan: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Hız</translation> -<translation id="6681301928961274620">Yazdırma sunucusunda yazıcı bulunamadı.</translation> <translation id="6681668084120808868">Fotoğraf çek</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" uygulaması kaldırılacak.</translation> <translation id="668599234725812620">Google Play'i aç</translation> @@ -5555,7 +5551,6 @@ <translation id="8794025342371547160">Kısıtlı IP</translation> <translation id="879413103056696865">Hotspot açıkken <ph name="PHONE_NAME" /> telefonunuz:</translation> <translation id="8795916974678578410">Yeni Pencere</translation> -<translation id="8797086401386164142">Yazdırma sunucusunda <ph name="NUM_PRINTERS" /> yazıcı bulundu.</translation> <translation id="8797459392481275117">Bu Siteyi Hiçbir Zaman Çevirme</translation> <translation id="8798099450830957504">Varsayılan</translation> <translation id="8798441408945964110">Sağlayıcı adı</translation> @@ -5704,7 +5699,7 @@ <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> gün önce etkinleştirildi</translation> <translation id="8986362086234534611">Unut</translation> <translation id="8986494364107987395">Kullanım istatistiklerini ve çökme raporlarını otomatik olarak Google'a gönder</translation> -<translation id="8986651757229422279">Bu işlem, <ph name="ORIGIN_NAME" /> web sitesinin depoladığı tüm veriler ve çerezler ile sitenin yüklediği uygulamaları temizleyecek.</translation> +<translation id="8986651757229422279">Bu işlem, <ph name="ORIGIN_NAME" /> tarafından depolanan tüm veriler ve çerezler ile yüklemiş olduğu uygulamayı temizleyecek.</translation> <translation id="8987927404178983737">Ay</translation> <translation id="8991520179165052608">Site, mikrofonunuzu kullanabilir</translation> <translation id="899403249577094719">Netscape Sertifikası Temel URL'si</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb index 3818639..e8d6221b 100644 --- a/chrome/app/resources/generated_resources_uk.xtb +++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Завантаження попереднього перегляду</translation> <translation id="1032605640136438169">Перегляньте нові правила</translation> <translation id="103279545524624934">Щоб запускати додатки Android, звільніть місце на диску.</translation> -<translation id="1033343386521881354">На сервері для друку знайдено 1 принтер.</translation> <translation id="1033780634303702874">Отримувати доступ до серійних пристроїв</translation> <translation id="1034942643314881546">Увімкнення ADB, щоб створювати ілюстрації додатків</translation> <translation id="1036348656032585052">Вимкнути</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Натисніть |<ph name="ACCELERATOR" />|, щоб вийти з повноекранного режиму</translation> <translation id="1038168778161626396">Тільки шифрувати</translation> <translation id="1039337018183941703">Недійсний або пошкоджений файл</translation> -<translation id="1039850285407663109">Вибраний файл невідомий. Він може бути небезпечним. Спробуйте зісканути файл, перш ніж відкривати його.</translation> <translation id="1041175011127912238">Ця сторінка не відповідає</translation> <translation id="1041263367839475438">Доступні пристрої</translation> <translation id="1042174272890264476">Ваш комп’ютер також має вбудовану бібліотеку RLZ у <ph name="SHORT_PRODUCT_NAME" />. Параметр RLZ призначає неунікальний тег, який не містить особисті дані, проте дозволяє вимірювати пошуки й користування <ph name="SHORT_PRODUCT_NAME" /> у рамках певної рекламної кампанії. Ці мітки інколи з’являються в пошукових запитах Google у <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Довіряти цьому сертифікату для ідентифікації виробників програмного забезпечення</translation> <translation id="1861262398884155592">Ця папка порожня</translation> <translation id="1863182668524159459">Немає послідовних портів</translation> -<translation id="1863552924692672565">Файл "<ph name="FILE_NAME" />" невідомий. Зіскануйте його, щоб зменшити ризик.</translation> <translation id="1864111464094315414">Вхід</translation> <translation id="1864400682872660285">Холод</translation> <translation id="1864454756846565995">Пристрій із портом USB типу C (на задній панелі)</translation> @@ -4025,7 +4022,6 @@ <translation id="6678717876183468697">URL-адреса пошукового запиту</translation> <translation id="6680442031740878064">Доступно: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Оцінити</translation> -<translation id="6681301928961274620">Немає принтерів на сервері для друку.</translation> <translation id="6681668084120808868">Зробити фото</translation> <translation id="6681964764822470072"><ph name="APP_NAME" /> буде видалено.</translation> <translation id="668599234725812620">Відкрити Google Play</translation> @@ -5555,7 +5551,6 @@ <translation id="8794025342371547160">IP-адреса з обмеженим доступом</translation> <translation id="879413103056696865">Коли ввімкнено точку доступу, пристрій <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Нове вікно</translation> -<translation id="8797086401386164142">На сервері для друку знайдено стільки принтерів: <ph name="NUM_PRINTERS" />.</translation> <translation id="8797459392481275117">Ніколи не перекладати цей сайт</translation> <translation id="8798099450830957504">За умовчанням</translation> <translation id="8798441408945964110">Назва постачальника</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb index 46ad9ad..86d23cbc 100644 --- a/chrome/app/resources/generated_resources_ur.xtb +++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -33,7 +33,6 @@ <translation id="1036982837258183574">پوری اسکرین سے باہر نکلنے کیلئے |<ph name="ACCELERATOR" />| کو دبائیں</translation> <translation id="1038168778161626396">صرف انسائفر</translation> <translation id="1039337018183941703">غلط یا خراب فائل</translation> -<translation id="1039850285407663109">منتخب کردہ فائل نامعلوم ہے اور یہ خطرناک بھی ہو سکتی ہے۔ اس فائل کو کھولنے سے پہلے اسکین کریں۔</translation> <translation id="1041175011127912238">یہ صفحہ نہیں کھل رہا ہے</translation> <translation id="1041263367839475438">دستیاب آلات</translation> <translation id="1042174272890264476">آپ کا کمپیوٹر <ph name="SHORT_PRODUCT_NAME" /> کی پہلے سے شامل RLZ لائبریری کے ساتھ بھی آتا ہے۔ RLZ ایک غیر منفرد، ذاتی طور پر ناقابل شناخت ٹیگ کو تفویض کرتا ہے تاکہ تلاشوں اور ایک خاص پروموشنل مہم کے ذریعہ چلائے گئے <ph name="SHORT_PRODUCT_NAME" /> استعمال کی پیمائش کر سکے۔ یہ لیبلز کبھی کبھی Google تلاش استفسارات میں <ph name="PRODUCT_NAME" /> میں ظاہر ہوتے ہیں۔</translation> @@ -153,6 +152,7 @@ <translation id="1197979282329025000">پرنٹر <ph name="PRINTER_NAME" /> کیلئے پرنٹر کی اہلیتیں بازیافت کرنے کے دوران ایک خرابی پیش آ گئی۔ یہ پرنٹر <ph name="CLOUD_PRINT_NAME" /> کے ساتھ رجسٹرڈ نہیں ہو سکا۔</translation> <translation id="119944043368869598">سب کو صاف کریں</translation> <translation id="1201402288615127009">اگلا</translation> +<translation id="1202556750060561551"><ph name="SITE_GROUP_NAME" /> کا اسٹور کردہ تمام ڈیٹا اور کوکیز، اس کے تحت کوئی سائٹ اور اس کی انسٹال کردہ ایپس صاف ہو جائیں گی۔</translation> <translation id="1202596434010270079">کیوسک ایپ کو اپ ڈیٹ کر دیا گیا ہے۔ براہ کرم USB اسٹک کو ہٹائیں۔</translation> <translation id="120368089816228251">موسیقی نوٹ</translation> <translation id="1205489148908752564">وائٹ لسٹ کردہ صارفین کے بارے میں پڑھیں اور انہیں تبدیل کریں</translation> @@ -280,8 +280,10 @@ <translation id="138784436342154190">ڈیفالٹ ابتدائی صفحہ بحال کریں؟</translation> <translation id="1390548061267426325">ریگولر ٹیب کے بطور کھولیں</translation> <translation id="1393283411312835250">سورج اور بادل</translation> +<translation id="1393787139683794508"><ph name="ORIGIN_NAME" /> سے اسٹور کردہ تمام ڈیٹا اور کوکیز کو یہ صاف کرے گا۔</translation> <translation id="1395730723686586365">اپ ڈیٹر شروع ہوگیا</translation> <translation id="1396139853388185343">پرنٹر سیٹ اپ کرنے میں خرابی</translation> +<translation id="1396259464226642517">کیا یہ نتیجہ غیر متوقع تھا؟ <ph name="BEGIN_LINK" />تاثرات بھیجیں<ph name="END_LINK" /></translation> <translation id="1396963298126346194">آپ کی جانب سے درج کردہ صارف نام اور پاس ورڈ مماثل نہیں ہیں</translation> <translation id="1397500194120344683">کوئی اہل آلہ نہیں ہے۔ <ph name="LINK_BEGIN" />مزید جانیں<ph name="LINK_END" /></translation> <translation id="1398853756734560583">بڑا کریں</translation> @@ -555,6 +557,7 @@ <translation id="1758018619400202187">EAP-TLS</translation> <translation id="17584710573359123">Chrome ویب اسٹور میں دیکھیں</translation> <translation id="176193854664720708">پاور بٹن میں فنگر پرنٹ سینسر ہے۔ اسے کسی بھی انگلی سے ہلکے سے ٹچ کریں۔</translation> +<translation id="176273057789108760">آپ کی تنظیم سیکیورٹی کی منظوری کے لیے ڈریگ کردہ فائلز کو اسکین کر رہی ہے۔</translation> <translation id="1763046204212875858">ایپلیکیشن شارٹ کٹس بنائیں</translation> <translation id="1763108912552529023">دریافت کرتے رہیں</translation> <translation id="1763808908432309942">نئے ٹیب میں کھلتا ہے</translation> @@ -593,6 +596,7 @@ <translation id="1805472176602625930">سیکیورٹی کلید پر بٹن دبائیں</translation> <translation id="1805738995123446102">پس منظر ٹیب آپ کا مائیکروفون استعمال کر رہا ہے</translation> <translation id="1805822111539868586">ملاحظات کا معائنہ کریں</translation> +<translation id="1805888043020974594">پرنٹ سرور</translation> <translation id="1805967612549112634">PIN کی توثیق کریں</translation> <translation id="1809734401532861917">میرے بُک مارکس، سرگزشت، پاس ورڈز اور دیگر ترتیبات کو <ph name="USER_EMAIL_ADDRESS" /> میں شامل کریں</translation> <translation id="1813278315230285598">سروسز</translation> @@ -634,7 +638,6 @@ <translation id="1858585891038687145">سافٹ ویئر بنانے والوں کی شناخت کرنے کیلئے اس سرٹیفیکیٹ پر بھروسہ کریں</translation> <translation id="1861262398884155592">یہ فولڈر خالی ہے</translation> <translation id="1863182668524159459">کوئی سیریل پورٹ نہیں ملا</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> نامعلوم ہے۔ خطرے کو کم کرنے کے لیے فائل کو اسکین کریں۔</translation> <translation id="1864111464094315414">لاگ ان</translation> <translation id="1864400682872660285">کولر</translation> <translation id="1864454756846565995">USB-C آلہ (پیچھے کا پورٹ)</translation> @@ -741,6 +744,7 @@ <translation id="202352106777823113">ڈاؤن لوڈ میں بہت زیادہ وقت لگنے کی وجہ سے نیٹ ورک نے اسے روک دیا۔</translation> <translation id="2025632980034333559"><ph name="APP_NAME" /> کریش ہوگیا ہے۔ ایکسٹینشن دوبارہ لوڈ کرنے کیلئے اس غبارہ پر کلک کریں۔</translation> <translation id="2025891858974379949">غیر محفوظ مواد</translation> +<translation id="202918510990975568">سیکیورٹی اور سائن ان کو ترتیب دینے کے لیے اپنا پاس ورڈ درج کریں</translation> <translation id="2034346955588403444">دوسرا WiFi نیٹ ورک شامل کریں</translation> <translation id="203574396658008164">مقفل اسکرین سے نوٹ لینا فعال کریں</translation> <translation id="2037445849770872822">اس Google اکاؤنٹ کیلئے نگرانی ترتیب دے دی گئی ہے۔ مزید پیرنٹل کنٹرولز ترتیب دینے کیلئے، 'جاری رکھیں' منتخب کریں۔ @@ -892,6 +896,7 @@ <translation id="2224471211857467033">ایکسیسبیلٹی ایونٹس</translation> <translation id="2224551243087462610">فولڈر کے نام میں ترمیم کریں</translation> <translation id="2226449515541314767">اس سائٹ کو MIDI آلات پر مکمل کنٹرول حاصل کرنے سے مسدود کر دیا گیا ہے۔</translation> +<translation id="222704500187107962">موجودہ پوشیدگی سیشن سے باہر نکل جانے کے بعد یہ استثناء خودکار طور پر حذف ہو جائے گا</translation> <translation id="2227179592712503583">تجویز ہٹائیں</translation> <translation id="2229161054156947610">1 گھنٹہ سے زیادہ باقی ہے</translation> <translation id="222931766245975952">فائل چھوٹی کر دی گئی</translation> @@ -945,6 +950,7 @@ <translation id="2300383962156589922"><ph name="APP_NAME" /> کو ذاتی نوعیت کا بنائیں اور کنٹرول کريں</translation> <translation id="2301382460326681002">ایکسٹینشن روٹ ڈائریکٹری غلط ہے۔</translation> <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" نے اضافی اجازتوں کی درخواست کی ہے۔</translation> +<translation id="23055578400314116">صارف نام منتخب کریں</translation> <translation id="2307462900900812319">نیٹ ورک کنفیگر کریں</translation> <translation id="230927227160767054">یہ صفحہ ایک سرور ہینڈلر انسٹال کرنا چاہتا ہے۔</translation> <translation id="2309620859903500144">اس سائٹ کو آپ کے موشن اور لائٹ سینسرز تک رسائی حاصل کرنے سے مسدود کر دیا گیا ہے۔</translation> @@ -984,6 +990,7 @@ <translation id="2353297238722298836">کیمرا اور مائیکروفون اجازت یافتہ ہے</translation> <translation id="2356070529366658676">پوچھیں</translation> <translation id="2357330829548294574"><ph name="USER_NAME" /> ہٹائیں</translation> +<translation id="235798134753548762">آپ کی ایپس، ترتیبات اور Wi-Fi کی ترجیحات مطابقت پذیر ہو جائیں گی۔ تبدیلیاں کرنے کیلئے، سیٹ اپ کے بعد کسی بھی وقت ترتیبات پر جائیں۔</translation> <translation id="2359345697448000899">ٹولز مینو میں ایکسٹینشنز پر کلک کر کے اپنے ایکسٹینشنز کا نظم کریں۔</translation> <translation id="2359808026110333948">جاری رکھیں</translation> <translation id="236117173274098341">بہتر بنائیں</translation> @@ -1036,6 +1043,7 @@ <translation id="2436720498717686157">آپ کی تنظیم اس آلہ کو فوری طور پر اپ ڈیٹ کرنا چاہتی ہے</translation> <translation id="2439545803278355377">اپنا نیا PIN درج کریں۔ PIN کم از کم چار حروف طویل ہونا چاہیے اور اس میں حروف، اعداد اور دیگر کیریکٹرز ہو سکتے ہیں۔</translation> <translation id="2440604414813129000">ما&خذ دیکھیں</translation> +<translation id="244231003699905658">غلط پتہ۔ براہ کرم پتہ چیک کریں اور دوبارہ کوشش کریں۔</translation> <translation id="2442916515643169563">متنی سایہ</translation> <translation id="2445081178310039857">ایکسٹینشن روٹ ڈائریکٹری درکار ہے۔</translation> <translation id="2445484935443597917">'نیا پروفائل' بنائیں</translation> @@ -1090,6 +1098,7 @@ <translation id="2501278716633472235">پیچھے جائیں</translation> <translation id="2501797496290880632">ایک شارٹ کٹ ٹائپ کریں</translation> <translation id="2502441965851148920">خودکار اپ ڈیٹس فعال ہیں۔ آپ کے منتظم نے دستی اپ ڈیٹس کو غیر فعال کر دیا ہے۔</translation> +<translation id="2502719318159902502">مکمل رسائی</translation> <translation id="2505127913256479918">اس زیر نگرانی اکاؤنٹ کو جلد ہی ہٹا دیا جائے گا</translation> <translation id="2505324914378689427">{SCREEN_INDEX,plural, =1{اسکرین #}other{اسکرین #}}</translation> <translation id="2505402373176859469"><ph name="RECEIVED_AMOUNT" /> از <ph name="TOTAL_SIZE" /></translation> @@ -1362,6 +1371,7 @@ <translation id="2865919525181940183">ان پروگرامز کا اسکرین شاٹ جو فی الحال اسکرین پر موجود ہے</translation> <translation id="286674810810214575">پاور کے ذارائع چیک کیے جا رہے ہیں...</translation> <translation id="2867768963760577682">پن کردہ ٹیب کے بطور کھولیں</translation> +<translation id="2868184003987917410">سائٹس کو اپنے ورچوئل رئیلٹی آلات/ڈیٹا تک رسائی کی اجازت نہ دیں</translation> <translation id="2868746137289129307">یہ ایکسٹینشن پرانا ہے اور انٹرپرائز پالیسی کی جانب سے غیر فعال کر دیا گیا ہے۔ ایک نیا ورژن دستیاب ہو جانے پر یہ خود بخود فعال ہو سکتا ہے۔</translation> <translation id="2870560284913253234">سائٹ</translation> <translation id="2870909136778269686">اپ ڈیٹ جاری ہے...</translation> @@ -1407,6 +1417,7 @@ <translation id="2916745397441987255">ایکسٹینشنز تلاش کریں</translation> <translation id="2921081876747860777">براہ کرم اپنے مقامی ڈیٹا کی حفاظت کرنے کیلئے ایک پاس ورڈ بنائیں۔</translation> <translation id="2923234477033317484">یہ اکاؤنٹ ہٹائیں</translation> +<translation id="2925054096976782003">آپ کی تنظیم سیکیورٹی کی منظوری کے لیے پیسٹ کردہ ڈیٹا کو اسکین کر رہی ہے۔</translation> <translation id="2926085873880284723">ڈیفالٹ شارٹ کٹس بحال کریں</translation> <translation id="2927017729816812676">کیش اسٹوریج</translation> <translation id="2931157624143513983">پرنٹ کرنے لائق جگہ پر فٹ کریں</translation> @@ -1430,6 +1441,7 @@ <translation id="2956070239128776395">سیکشن گروپ میں ہے: <ph name="ERROR_LINE" /></translation> <translation id="2957117904572187936">اپنے آلہ پر کسی بھی سائٹ کو فائلز یا فولڈرز میں ترمیم کرنے کی اجازت نہ دیں</translation> <translation id="2958721676848865875">پیک ایکسٹینشن کی وارننگ</translation> +<translation id="2959127025785722291">کچھ غلط ہو گیا۔ اسکیننگ مکمل نہیں ہو سکی۔ براہ کرم دوبارہ کوشش کریں۔</translation> <translation id="2959842337402130152">اسٹوریج کی جگہ کم ہونے کی وجہ سے بحال نہیں کیا جا سکتا۔ آلہ سے <ph name="SPACE_REQUIRED" /> خالی کریں اور دوبارہ کوشش کریں۔</translation> <translation id="296026337010986570">ہو گیا! نقصان دہ سافٹ ویئر کو ہٹا دیا گیا۔ ایکسٹینشنز کو دوبارہ آن کرنے کے لیے، <a href="chrome://extensions">ایکسٹینشنز</a> ملاحظہ کریں۔</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" /> (ایکسٹینشن فراہم کیا گیا)</translation> @@ -1687,6 +1699,7 @@ <translation id="3348038390189153836">ہٹانے لائق آلہ کا پتا چلا</translation> <translation id="3349933790966648062">میموری فوٹ پرنٹ</translation> <translation id="3350117557200012647">جوڑا بنانے کے موڈ میں جائیں</translation> +<translation id="3350244554415289209">جب کوئی سائٹ آپ کے کیمرے کی پوزیشن تک رسائی یا آپ کے کمرے کی پیمائش کرنا چاہے تو پوچھیں (تجویز کردہ)</translation> <translation id="3355936511340229503">کنکشن کی خرابی</translation> <translation id="3356580349448036450">مکمل</translation> <translation id="3359256513598016054">سرٹیفکیٹ کی پالیسی کی پابندیاں</translation> @@ -1750,6 +1763,7 @@ <translation id="3448492834076427715">اکاؤنٹ اپ ڈیٹ کریں</translation> <translation id="3449839693241009168"><ph name="EXTENSION_NAME" /> پر کمانڈز بھیجنے کیلئے <ph name="SEARCH_KEY" /> دبائیں</translation> <translation id="3450157232394774192">معطل صورتحال کے تصرف کی فیصد</translation> +<translation id="3451332697983754369">میرے <ph name="DEVICE_TYPE" /> کو سِنک کریں</translation> <translation id="3453612417627951340">اجازت نامہ درکار ہے</translation> <translation id="3454157711543303649">فعالیت مکمل</translation> <translation id="3454213325559396544">یہ اس <ph name="DEVICE_TYPE" /> کے لیے آخری خودکار سافٹ ویئر اور سیکیورٹی اپ ڈیٹ ہے۔ آئندہ کے اپ ڈیٹس حاصل کرنے کے لیے، نئے ماڈل پر اپ گریڈ کریں۔</translation> @@ -1772,6 +1786,7 @@ <translation id="347785443197175480"><ph name="HOST" /> کو اپنے کیمرا اور مائیکروفون تک حاصل کرنے کی اجازت دینا جاری رکھیں</translation> <translation id="3478685642445675458">کسی شخص کو ہٹانے سے پہلے براہ کرم اپنا پروفائل غیر مقفل کریں۔</translation> <translation id="3479552764303398839">ابھی نہیں</translation> +<translation id="3479685872808224578">پرنٹ سرور کا پتا نہیں لگ سکا۔ براہ کرم پتہ چیک کریں اور دوبارہ کوشش کریں۔</translation> <translation id="3481268647794498892"><ph name="ALTERNATIVE_BROWSER_NAME" /> میں <ph name="COUNTDOWN_SECONDS" /> سیکنڈ میں کھل رہا ہے</translation> <translation id="3484273680291419129">نقصان دہ سافٹ ویئر ہٹایا جا رہا ہے...</translation> <translation id="3484869148456018791">نیا سرٹیفکیٹ حاصل کریں</translation> @@ -1887,6 +1902,7 @@ <translation id="3630132874740063857">آپ کا فون</translation> <translation id="3630995161997703415">اس سائٹ کو کسی بھی وقت استعمال کرنے کیلئے، اسے اپنی شیلف میں شامل کریں</translation> <translation id="3634507049637220048"><ph name="NETWORK_COUNT" /> میں سے نیٹ ورک <ph name="NETWORK_INDEX" />، <ph name="NETWORK_NAME" />، <ph name="CONNECTION_STATUS" />، آپ کے منتظم کے زیر انتظام ہے، تفصیلات</translation> +<translation id="3635241501480133979">یہ ڈیٹا آپ کی تنظیم کی سکیورٹی کی پالیسیوں کی خلاف ورزی کرتا ہے اور اسے ڈراپ نہیں کیا جا سکتا۔</translation> <translation id="3635353578505343390">Google کو تاثرات بھیجیں</translation> <translation id="3636096452488277381">ہیلو <ph name="USER_GIVEN_NAME" />،</translation> <translation id="3636766455281737684"><ph name="PERCENTAGE" />% - <ph name="TIME" /> باقی</translation> @@ -1921,6 +1937,7 @@ <translation id="3677657024345889897">انتہائی خاموش</translation> <translation id="3677911431265050325">موبائل سائٹ کی درخواست کریں</translation> <translation id="3678156199662914018">ایکسٹینشن: <ph name="EXTENSION_NAME" /></translation> +<translation id="3678613690490567106">پورے آلات میں ذاتی نوعیت کے تجربے کیلئے سِنک کریں</translation> <translation id="3681311097828166361">آپ کے تاثرات کا شکریہ۔ آپ ابھی آف لائن ہیں اور آپ کی رپورٹ بعد میں بھیجی جائے گی۔</translation> <translation id="3682824389861648626">حرکت کی حد</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> اسکرین کے اشتراک کی درخواست</translation> @@ -2431,6 +2448,7 @@ <translation id="4400632832271803360">سر فہرست قطار کی کلیدوں کے برتاؤ کو سوئچ کرنے کیلئے، لانچر کی کلید کو دبائے رکھیں</translation> <translation id="4400963414856942668">ٹیپ کو بُک مارک کرنے کے لیے آپ ستارہ پر کلک کر سکتے ہيں</translation> <translation id="4403775189117163360">ایک مختلف فولڈر منتخب کریں</translation> +<translation id="4404136731284211429">دوبارہ اسکین کریں</translation> <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation> <translation id="4408599188496843485">&مدد</translation> <translation id="4409697491990005945">مارجنز</translation> @@ -2449,6 +2467,7 @@ <translation id="4421932782753506458">Fluffy</translation> <translation id="4423376891418188461">ترتیبات بحال کریں</translation> <translation id="442397852638519243"><ph name="USER_NAME" />، آپ کا منتظم آپ سے اپنا پاس ورڈ تبدیل کرنے کا مطالبہ کرتا ہے۔</translation> +<translation id="4429030830601238961">یہ ڈیٹا آپ کی تنظیم کی سکیورٹی کی پالیسیوں کی خلاف ورزی کرتا ہے اور پیسٹ نہیں کیا جا سکتا۔</translation> <translation id="4430019312045809116">والیوم</translation> <translation id="4430369329743628066">بُک مارک شامل کر دیا گیا</translation> <translation id="4434045419905280838">پوپ اپس اور ری ڈائریکٹس</translation> @@ -2495,9 +2514,11 @@ <translation id="4501530680793980440">ہٹانے کی توثیق کریں</translation> <translation id="4502423230170890588">اس آلہ سے ہٹائيں</translation> <translation id="4504940961672722399">اس آئیکن پر کلک کر کے یا <ph name="EXTENSION_SHORTCUT" /> کو دبا کر یہ ایکسٹینشن استعمال کریں۔</translation> +<translation id="4507164039066603071">سائٹس کو اپنے کیمرے کی پوزیشن تک رسائی یا اپنے کمرے کی پیمائش کی اجازت نہ دیں</translation> <translation id="4508051413094283164">سبھی کو پوشیدگی ونڈو میں کھولیں</translation> <translation id="4508265954913339219">فعالیت ناکام ہو گئی</translation> <translation id="4508765956121923607">ما&خذ دیکھیں</translation> +<translation id="4510614391273086606">Linux فائلز اور ایپس کو ان کی بیک اپ حالت میں بحال کیا جا رہا ہے۔</translation> <translation id="451407183922382411"><ph name="COMPANY_NAME" /> کی جانب سے تقویت یافتہ</translation> <translation id="4514610446763173167">چلانے یا روکنے کیلئے ویڈیو ٹوگل کریں</translation> <translation id="451515744433878153">ہٹائیں</translation> @@ -2695,6 +2716,7 @@ <translation id="480990236307250886">ہوم صفحہ کھولیں</translation> <translation id="4813136279048157860">میری تصاویر</translation> <translation id="4813512666221746211">نیٹ ورک کی خرابی</translation> +<translation id="4814378367953456825">اس فنگر پرنٹ کے لئے ایک نام درج کریں</translation> <translation id="4820236583224459650">بطور فعال ٹکٹ سیٹ کریں</translation> <translation id="4821935166599369261">&پروفائلنگ فعال ہے</translation> <translation id="4823484602432206655">صارف اور آلہ کی ترتیبات پڑھیں اور انہیں تبدیل کریں</translation> @@ -2741,6 +2763,7 @@ <translation id="4876895919560854374">اسکرین کو مقفل اور غیر مقفل کریں</translation> <translation id="4877276003880815204">عناصر کا معائنہ کریں</translation> <translation id="4878653975845355462">آپ کے منتظم نے حسب ضرورت کے پس مناظر کو آف کر دیا ہے</translation> +<translation id="4878718769565915065">اس حفاظتی کلید میں فنگر پرنٹ شامل کرنے میں ناکام ہو گیا</translation> <translation id="4879491255372875719">خودکار (ڈیفالٹ)</translation> <translation id="4880328057631981605">رسائی کی جگہ کا نام</translation> <translation id="4880827082731008257">تلاش کی سرگزشت</translation> @@ -2871,6 +2894,7 @@ <translation id="5065775832226780415">Smart Lock</translation> <translation id="5067399438976153555">ہمیشہ آن رکھیں</translation> <translation id="5067867186035333991">پوچھیں کہ آیا <ph name="HOST" /> آپ کے مائیکروفون تک رسائی حاصل کرنا چاہتا ہے</translation> +<translation id="5068377946749700758">آپ کی تنظیم سیکیورٹی کی منظوری کے لیے ڈریگ کردہ ڈیٹا کو اسکین کر رہی ہے۔</translation> <translation id="5068918910148307423">حال ہی میں بند کی گئی سائٹس کو ڈیٹا بھیجنے اور موصول کرنے کو مکمل کرنے کی اجازت نہ دیں</translation> <translation id="5068919226082848014">پزّا</translation> <translation id="5072052264945641674">کرسر کا سائز ایڈجسٹ کریں</translation> @@ -3063,6 +3087,7 @@ <translation id="5341793073192892252">مندرجہ ذیل کوکیز کو مسدود کر دیا گیا (فریق ثالث کوکیز کو استثناء کے بغیر مسدود کیا جا رہا ہے)</translation> <translation id="5341980496415249280">براہ کرم انتظار کریں، پیکنگ ہو رہی ہے…</translation> <translation id="5342091991439452114">PIN کا کم از کم <ph name="MINIMUM" /> ہندسے کا ہونا ضروری ہے</translation> +<translation id="5344036115151554031">Linux بحال کیا جا رہا ہے</translation> <translation id="5352033265844765294">ٹائم اسٹامپنگ</translation> <translation id="5353252989841766347">Chrome سے پاس ورڈز برآمد کریں</translation> <translation id="5355099869024327351">'اسسٹنٹ' کو اطلاعات دکھانے کی اجازت دیں</translation> @@ -3116,6 +3141,7 @@ <translation id="5427459444770871191">&گھڑی وار گھمائیں</translation> <translation id="542872847390508405">آپ ایک مہمان کے بطور براؤز کر رہے ہیں</translation> <translation id="5428850089342283580"><ph name="ACCNAME_APP" /> (اپ ڈیٹ دستیاب ہے)</translation> +<translation id="542948651837270806">بھروسہ مند پلیٹ فارم ماڈیول فرم ویئر کے لیے اپ ڈیٹ انسٹال کرنے کی ضرورت ہے۔ <ph name="TPM_FIRMWARE_UPDATE_LINK" /> دیکھیں</translation> <translation id="5430931332414098647">فوری ٹیدرنگ</translation> <translation id="5431318178759467895">رنگ</translation> <translation id="5431825016875453137">OpenVPN / L2TP</translation> @@ -3296,6 +3322,7 @@ <translation id="5659593005791499971">ای میل</translation> <translation id="5659833766619490117">اس صفحہ کا ترجمہ نہیں کیا جا سکا</translation> <translation id="5660204307954428567"><ph name="DEVICE_NAME" /> کے ساتھ جوڑا بنائیں</translation> +<translation id="5662513737565158057">Linux ایپس کے کام کرنے کا طریقہ تبدیل کریں۔</translation> <translation id="5667546120811588575">Google Play کو سیٹ کیا جا رہا ہے...</translation> <translation id="5669267381087807207">فعال کیا جا رہا ہے</translation> <translation id="5669691691057771421">نیا PIN درج کریں</translation> @@ -3703,6 +3730,7 @@ <translation id="6238923052227198598">مقفل اسکرین پر تازہ ترین نوٹ رکھیں</translation> <translation id="6239558157302047471">&فریم دوبارہ لوڈ کریں</translation> <translation id="6241530762627360640">اپنے سسٹم کے ساتھ جوڑا بنائے گئے بلوٹوتھ آلات کے بارے میں معلومات تک رسائی حاصل کریں اور قریبی بلوٹوتھ آلات کو دریافت کریں۔</translation> +<translation id="6241844896329831164">کوئی رسائی درکار نہیں ہے</translation> <translation id="6242589501614145408">اپنی سیکیورٹی کلید دوبارہ ترتیب دیں</translation> <translation id="6242852299490624841">اس ٹیب کو فوکس کریں</translation> <translation id="6243280677745499710">فی الحال سیٹ ہے</translation> @@ -3903,6 +3931,8 @@ <translation id="6531282281159901044">خطرناک فائل رکھیں</translation> <translation id="6532101170117367231">Google Drive میں محفوظ کریں</translation> <translation id="6532106788206463496">تبدیلیاں محفوظ کریں</translation> +<translation id="6532206849875187177">سیکیورٹی اور سائن ان</translation> +<translation id="6532527800157340614">سائن ان ناکام ہو گیا کیونکہ آپ تک رسائی کا ٹوکن دوبارہ حاصل نہیں ہو سکا۔ براہ کرم اپنا نیٹ ورک کنکشن چیک کریں اور دوبارہ کوشش کریں۔</translation> <translation id="6532663472409656417">انٹرپرائز کا ادراج کیا گیا</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />نوٹ:<ph name="END_BOLD" /> صرف اس وقت فعال کریں جب آپ کو معلوم ہو کہ آپ کیا کر رہے ہیں یا اگر آپ سے ایسا کرنے کو کہا گیا ہو، کیونکہ ڈیٹا جمع کرنے سے کارکردگی کم ہو سکتی ہے۔</translation> <translation id="6541638731489116978">اس سائٹ کو آپ کے موشن سینسرز تک رسائی حاصل کرنے سے مسدود کر دیا گیا ہے۔</translation> @@ -3910,6 +3940,7 @@ <translation id="6545864417968258051">بلوٹوتھ اسکیننگ</translation> <translation id="6545867563032584178">Mac سسٹم کی ترجیحات میں مائیکروفون آف ہے</translation> <translation id="6547354035488017500">کم از کم 512 MB جگہ خالی کریں یا آپ کا آلہ جواب دینا بند کر دے گا۔ جگہ خالی کرنے کیلئے، آلہ کے اسٹوریج سے فائلیں حذف کریں۔</translation> +<translation id="6549966385318247177">یہ بالغ مواد کی وجہ سے مسدود کیا گیا ہے۔</translation> <translation id="6550675742724504774">اختیارات</translation> <translation id="6551508934388063976">کمانڈ دستیاب نہیں ہے۔ ایک نئی ونڈو کھولنے کیلئے control-N دبائیں۔</translation> <translation id="6551612971599078809">سائٹ USB کا استعمال کر رہی ہے</translation> @@ -4241,6 +4272,7 @@ <translation id="703001695939087067">ونڈو کے عمومی جائزہ کی وضع میں داخل ہو گئے۔ نیویگیٹ کرنے کے لیے ٹیب دبائیں۔</translation> <translation id="7031608529463141342"><ph name="WINDOW_TITLE" /> - سیریل پورٹ منسلک ہے</translation> <translation id="7031962166228839643">TPM کو تیار کیا جا رہا ہے، براہ کرم انتظار کریں (اس میں کچھ منٹ لگ سکتے ہیں)…</translation> +<translation id="7034615910652881882">جب کوئی سائٹ آپ کے ورچوئل رئیلٹی آلات/ڈیٹا تک رسائی حاصل کرنا چاہے تو پوچھیں</translation> <translation id="7037509989619051237">متن کا پیش منظر دیکھیں</translation> <translation id="7039326228527141150"><ph name="VENDOR_NAME" /> سے USB آلات تک رسائی حاصل کریں</translation> <translation id="7039912931802252762">Microsoft اسمارٹ کارڈ لاگ آن</translation> @@ -4280,6 +4312,7 @@ <translation id="7081952801286122383">آپ پوشیدگی وضع میں ہیں</translation> <translation id="708278670402572152">اسکین کرنے کو فعال کرنے کے لئے غیر منسلک کریں</translation> <translation id="7085389578340536476">Chrome کو آڈیو ریکارڈ کرنے کی اجازت دیں؟</translation> +<translation id="7086467953285486445">یہ فائلز آپ کی تنظیم کی سیکیورٹی کی پالیسیوں کی خلاف ورزی کرتی ہیں اور انہیں ڈراپ نہیں کیا جا سکتا۔</translation> <translation id="7088434364990739311">اپ ڈیٹ چیک شروع ہونے میں ناکام ہوگیا (خرابی کا کوڈ <ph name="ERROR" />)۔</translation> <translation id="7088561041432335295">Zip Archiver - فائلز ایپ میں ZIP فائلز کھولیں اور پیک کریں۔</translation> <translation id="7088674813905715446">منتظم نے اس آلہ کو ایک مسترد کردہ حالت میں رکھ دیا ہے۔ اندراج کیلئے اسے فعال کرنے کیلئے، براہ کرم اپنے منتظم کو آلہ کو ایک زیر التوا حالت میں رکھنے دیں۔</translation> @@ -4393,6 +4426,7 @@ <translation id="7241389281993241388">براہ کرم کلائنٹ سرٹیفکیٹ درآمد کرنے کیلئے <ph name="TOKEN_NAME" /> میں سائن ان کریں۔</translation> <translation id="7241443820034350811">اگر آپ کی سیکیورٹی کلید مندرج نہیں ہے تو اس کے بٹن کو کم از کم 5 سیکنڈ تک دبائیں۔</translation> <translation id="7243632151880336635">صاف کریں اور سائن آؤٹ کریں</translation> +<translation id="7243784282103630670">Linux اپ گریڈ کرنے میں ایک خرابی تھی۔ ہم آپ کا بیک اپ استعمال کرکے کنٹینر کو بحال کریں گے۔</translation> <translation id="7245628041916450754"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (بہترین)</translation> <translation id="7246230585855757313">اپنی سیکیورٹی کلید دوبارہ داخل کریں اور دوبارہ کوشش کریں</translation> <translation id="7246947237293279874">FTP پراکسی</translation> @@ -4479,6 +4513,7 @@ <translation id="7360233684753165754"><ph name="PRINTER_NAME" /> کیلئے <ph name="PAGE_NUMBER" /> صفحات</translation> <translation id="7361297102842600584"><ph name="PLUGIN_NAME" /> چلانے کیلئے دایاں کلک کریں</translation> <translation id="7363117941401515667"><ph name="HOURS" /> گھنٹے پہلے اپ ڈیٹ کیا گیا</translation> +<translation id="7364591875953874521">رسائی طلب کی گئی</translation> <translation id="7364796246159120393">فائل کا انتخاب کریں</translation> <translation id="7366415735885268578">ایک سائٹ شامل کریں</translation> <translation id="7366909168761621528">براؤزنگ ڈیٹا</translation> @@ -4504,6 +4539,7 @@ <translation id="740624631517654988">پاپ اپ کو مسدود کر دیا گیا</translation> <translation id="7407430846095439694">درآمد کریں اور پابند بنائیں</translation> <translation id="7407504355934009739">زیادہ تر لوگ اس سائٹ سے اطلاعات کو مسدود کرتے ہیں</translation> +<translation id="740810853557944681">پرنٹ سرور شامل کریں</translation> <translation id="7409549334477097887">بہت ہی زیادہ</translation> <translation id="7409836189476010449">Flash چلائیں</translation> <translation id="7410344089573941623">پوچھیں کہ آیا <ph name="HOST" /> آپ کے کیمرے اور مائیکروفون تک رسائی حاصل کرنا چاہتا ہے</translation> @@ -4524,6 +4560,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{سبھی کو &نئی ونڈو میں کھولیں}=1{&نئی ونڈو میں کھولیں}other{سبھی (#) کو &نئی ونڈو میں کھولیں}}</translation> <translation id="7434509671034404296">ڈیولپر</translation> <translation id="7434635829372401939">اپنی ترتیبات کو مطابقت پذیر بنائیں</translation> +<translation id="7434969625063495310">پرنٹ سرور شامل نہیں کر سکا۔ براہ کرم سرور کی کنفیگریشن کو چیک کریں اور دوبارہ کوشش کریں۔</translation> <translation id="7436921188514130341">افوہ! نام کی تبدیلی کے دوران ایک خرابی تھی۔</translation> <translation id="7438976808740265764">دسمبر 2020 کے بعد Flash Player تعاون یافتہ نہیں رہے گا۔</translation> <translation id="7441736921018636843">اس ترتیب کو تبدیل کرنے کے لیے، اپنی مطابقت پذیری کے پاس فریز کو ہٹانے کے لیے <ph name="BEGIN_LINK" />مطابقت پذیری کو ری سیٹ کریں<ph name="END_LINK" /></translation> @@ -4533,8 +4570,10 @@ <translation id="7443806024147773267">آپ جب بھی اپنے Google اکاؤنٹ میں سائن ان ہوں، اپنے پاس ورڈز تک رسائی حاصل کریں</translation> <translation id="7444983668544353857"><ph name="NETWORKDEVICE" /> غیر فعال کریں</translation> <translation id="7448430327655618736">ایپس خودکار طور پر انسٹال کریں</translation> +<translation id="7448625729116931228">جب کوئی سائٹ آپ کے ورچوئل رئیلٹی آلات/ڈیٹا تک رسائی حاصل کرنا چاہے تو پوچھیں (تجویز کردہ)</translation> <translation id="7450761244949417357">ابھی <ph name="ALTERNATIVE_BROWSER_NAME" /> میں کھل رہا ہے</translation> <translation id="7453008956351770337">یہ پرنٹر منتخب کر کے، آپ مندرجہ ذیل ایکسٹینشن کو اپنے پرنٹر تک رسائی کی اجازت دے رہے ہیں:</translation> +<translation id="7454548535253569100">پورٹل: <ph name="SUBFRAME_SITE" /></translation> <translation id="7456142309650173560">dev</translation> <translation id="7456847797759667638">مقام کھولیں…</translation> <translation id="7458168200501453431">اسی املا جانچ کنندہ کا استعمال کرتا ہے جس کا Google تلاش میں استعمال کیا جاتا ہے۔ آپ براؤزر میں جو متن ٹائپ کرتے ہیں وہ Google کو بھیجا جاتا ہے۔</translation> @@ -4580,6 +4619,7 @@ <translation id="7513029293694390567">اسٹور کردہ اسناد کا استعمال کر کے ویب سائٹس میں خود کار طور پر سائن ان کریں۔ خصوصیت غیر فعال ہونے پر، ویب سائٹ میں سائن ان کرنے سے پہلے ہر بار آپ سے توثیق کرنے کو کہا جائے گا۔</translation> <translation id="7514239104543605883">اپنے آلہ پر کاپی کریں</translation> <translation id="7514365320538308">ڈاؤن لوڈ کریں</translation> +<translation id="7520766081042531487">پوشیدگی وضع کا پورٹل: <ph name="SUBFRAME_SITE" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7522255036471229694">"Ok Google" بولیں</translation> <translation id="7525067979554623046">بنائیں</translation> @@ -4668,6 +4708,7 @@ <translation id="7652808307838961528">شخص، <ph name="PROFILE_NAME" /> میں ترمیم کریں</translation> <translation id="765293928828334535">ایپس، ایکسٹینشنز اور صارف اسکرپٹس کو اس ویب سائٹ سے شامل نہیں کیا جا سکتا ہے</translation> <translation id="7652954539215530680">ایک PIN تخلیق کریں</translation> +<translation id="7653295403398566475">جب کوئی سائٹ آپ کے کیمرا کی پوزیشن تک رسائی چاہتی ہو یا آپ کے کمرے کی پیمائش چاہتی ہو تو پوچھیں</translation> <translation id="7654941827281939388">یہ اکاؤنٹ پہلے سے ہی اس کمپیوٹر پر زیر استعمال ہے۔</translation> <translation id="7658239707568436148">منسوخ کریں</translation> <translation id="7659584679870740384">آپ کو یہ آلہ استعمال کرنے کی اجازت نہیں ہے۔ سائن ان کی اجازت کیلئے براہ کرم منتظم سے رابطہ کریں۔</translation> @@ -4821,6 +4862,7 @@ <translation id="783214144752121388">سائٹس کو Flash چلانے سے مسدود کریں (تجویز کردہ)</translation> <translation id="7833720883933317473">محفوظ کردہ حسب ضرورت الفاظ یہاں ظاہر ہوں گے</translation> <translation id="7835178595033117206">بُک مارک ہٹا دیا گیا</translation> +<translation id="7836850009646241041">اپنی سیکیورٹی کلید کو دوبارہ چھونے کی کوشش کریں</translation> <translation id="7837776265184002579">آپ کے ہوم پیج کو <ph name="URL" /> پر تبدیل کر دیا گیا۔</translation> <translation id="7839051173341654115">میڈیا دیکھیں /بیک اپ لیں</translation> <translation id="7839192898639727867">سرٹیفیکیٹ موضوع کلید ID</translation> @@ -5135,7 +5177,9 @@ <translation id="8260864402787962391">ماؤس</translation> <translation id="8261378640211443080">یہ ایکسٹینشن <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> میں مندرج نہیں ہے اور ہو سکتا ہے اس کو آپ کے علم کے بغیر شامل کیا گیا ہو۔</translation> <translation id="8261506727792406068">حذف کریں</translation> +<translation id="8263336784344783289">اس گروپ کو نام دیں</translation> <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" /> نے آپ کا ماؤس کرسر غیر فعال کر دیا ہے۔</translation> +<translation id="8264024885325823677">یہ ترتیب آپ کے منتظم کے زیر انتظام ہے۔</translation> <translation id="8264718194193514834">"<ph name="EXTENSION_NAME" />" نے پوری اسکرین کو تحریک دی۔</translation> <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />یہ اس آلہ اور اس کے طریقۂ استعمال (جیسے بیٹری کی سطح، سسٹم، ایپ کی سرگرمی اور خرابیوں) کے بارے میں عام معلومات ہے۔ Android کو بہتر بنانے کی خاطر ڈیٹا کا استعمال کیا جائے گا اور کچھ مجموعی معلومات سے Google ایپس اور پارٹنرز، جیسے کہ Android ڈیولپرز، کو ان کی ایپس اور پروڈکٹس کو بہتر بنانے میں بھی مدد ملے گی۔<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />اس خصوصیت کو آف کرنے سے سسٹم اپ ڈیٹس اور سیکیورٹی جیسی لازمی سروسز کے لیے درکار معلومات بھیجنے کی اس آلے کی اہلیت متاثر نہیں ہوتی ہے۔<ph name="END_PARAGRAPH2" /> @@ -5391,6 +5435,7 @@ <translation id="8650543407998814195">اگرچہ آپ اپنے پرانے پروفائل تک مزید رسائی حاصل نہیں کر سکتے لیکن آپ اسے اب بھی ہٹا سکتے ہیں۔</translation> <translation id="8651585100578802546">یہ صفحہ زبردستی دوبارہ لوڈ کریں</translation> <translation id="8652400352452647993">پیک ایکسٹینشن کی خرابی</translation> +<translation id="8653578191563425126">Crostini کیلئے مخصوص ڈسک کی جگہ (آپ اسے بعد میں تبدیل کر سکتے ہیں)۔</translation> <translation id="8654151524613148204">آپ کے کمپیوٹر کیلئے ہینڈل کرنے کیلئے فائل کافی بڑی ہے۔ معذرت۔</translation> <translation id="8655295600908251630">چینل</translation> <translation id="8655319619291175901">افوہ، کچھ غلط ہو گیا۔</translation> @@ -5655,6 +5700,7 @@ <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> دن پہلے فعال کیا گیا</translation> <translation id="8986362086234534611">بھول جائیں</translation> <translation id="8986494364107987395">خود کار طریقے سے Google کو استعمال کے اعداد و شمار اور کریش کی رپورٹیں بھیجیں</translation> +<translation id="8986651757229422279"><ph name="ORIGIN_NAME" /> سے اسٹور کردہ تمام ڈیٹا کو صاف کرے گی اور یہ انسٹال کردہ ایپ ہے۔</translation> <translation id="8987927404178983737">ماہ</translation> <translation id="8991520179165052608">سائٹ آپ کا مائیکروفون استعمال کر سکتی ہے</translation> <translation id="899403249577094719">Netscape سرٹیفکیٹ بیس URL</translation> @@ -5806,6 +5852,7 @@ <translation id="932508678520956232">پرنٹنگ کو شروع نہیں کیا جا سکا۔</translation> <translation id="93343527085570547">قانونی وجوہات کی بناء پر، مواد کی تبدیلیوں کی درخواست کرنے کیلئے <ph name="BEGIN_LINK1" />قانونی مدد کے صفحہ<ph name="END_LINK1" /> پر جائیں۔ کچھ اکاؤنٹ اور سسٹم کی معلومات Google کو بھیجی جا سکتی ہے۔ ہم تکنیکی مسائل حل کرنے اور ہماری سروسز کو بہتر بنانے میں مدد کیلئے، آپ کی طرف سے ہمیں فراہم کردہ معلومات کا استعمال کریں گے جو <ph name="BEGIN_LINK2" />رازداری کی پالیسی<ph name="END_LINK2" /> اور <ph name="BEGIN_LINK3" />سروس کی شرائط<ph name="END_LINK3" /> سے مشروط ہوگا۔</translation> <translation id="93393615658292258">صرف پاس ورڈ</translation> +<translation id="934244546219308557">اس گروپ کو نام دیں</translation> <translation id="934503638756687833">ضرورت پڑنے پر، یہاں غیر مندرج آئٹمز کو بھی ہٹا دیا جائے گا۔ Chrome رازداری کے وہائٹ پیپر میں <a href="<ph name="URL" />">غیر مطلوبہ سافٹ وئیر کے تحفظ</a> کے بارے میں مزید جانیں۔</translation> <translation id="935490618240037774">آپ کے بُک مارکس، سرگزشت، پاس ورڈز اور دیگر ترتیبات کی آپ کے Google اکاؤنٹ کے ساتھ مطابقت پذیری کی جائے گی تاکہ آپ انہیں اپنے سبھی آلات پر استعمال کر سکیں۔</translation> <translation id="935854577147268200">Smart Lock کا فون تبدیل ہو گيا ہے۔ Smart Lock اپ ڈیٹ کرنے کے لیے اپنا پاس ورڈ درج کریں۔ اگلی بار آپ کے فون سے آپ کا <ph name="DEVICE_TYPE" /> غیر مقفل ہوگا۔ آپ ترتیبات میں Smart Lock کو آف کر سکتے ہیں</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb index d627c04..a5342ad 100644 --- a/chrome/app/resources/generated_resources_uz.xtb +++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Ma’lumotlar oldindan ko‘rish uchun yuklanmoqda</translation> <translation id="1032605640136438169">Yangi shartlar bilan tanishib chiqing</translation> <translation id="103279545524624934">Android ilovalarni ishga tushirish uchun diskda joy bo‘shating.</translation> -<translation id="1033343386521881354">Bosma serverda 1 ta printer topildi.</translation> <translation id="1033780634303702874">Keyingi seriyali qurilmalaringizga ruxsat</translation> <translation id="1034942643314881546">Ilovalar illustratsiyalarini yaratish uchun ADB ishga tushirilmoqda</translation> <translation id="1036348656032585052">O‘chirib qo‘yish</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">To‘liq ekran rejimidan chiqish uchun |<ph name="ACCELERATOR" />| tugmasini bosing</translation> <translation id="1038168778161626396">Faqat shifrdan chiqarish</translation> <translation id="1039337018183941703">Fayl yaroqsiz yoki shikastlangan</translation> -<translation id="1039850285407663109">Tanlangan fayl nomaʼlum va zararli boʻlishi mumkin. Uni ochishdan oldin antivirus orqali tekshiring.</translation> <translation id="1041175011127912238">Bu sahifa javob bermayapti.</translation> <translation id="1041263367839475438">Mavjud qurilmalar</translation> <translation id="1042174272890264476">Kompyuteringizda ichki o‘rnatilgan <ph name="SHORT_PRODUCT_NAME" /> RLZ kutubxonasi mavjud. RLZ mahsulotimiz(<ph name="SHORT_PRODUCT_NAME" />) reklama kompaniyalari natijalari asosidagi qidiruv so‘rovlari soni va mahsulotdan foydalanish statistikasini baholashimizga yordam beradigan ko‘rinmas va foydalanuvchini aniqlamaydigan yorliq tayinlaydi. Ushbu yorliqlar ba’zida mahsulotimiz (<ph name="PRODUCT_NAME" />) orqali bajarilgan qidiruv so‘rovlarida paydo bo‘lishi mumkin.</translation> @@ -637,7 +635,6 @@ <translation id="1858585891038687145">Dasturiy ta’minot ishlab chiquvchilarni identifikatsiya qilishda ushbu sertifikat ishonchli deb hisoblansin.</translation> <translation id="1861262398884155592">Bu jild bo‘sh</translation> <translation id="1863182668524159459">Hech qanday ketma-ket port topilmadi</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> nomaʼlum fayl. Xavfsizlik yuzasidan uni antivirus orqali tekshiring.</translation> <translation id="1864111464094315414">Kirish</translation> <translation id="1864400682872660285">Salqinroq</translation> <translation id="1864454756846565995">USB-C qurilma (orqa port)</translation> @@ -4023,7 +4020,6 @@ <translation id="6678717876183468697">So‘rovning URL manzili</translation> <translation id="6680442031740878064">Bo‘sh: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Nutq tezligi</translation> -<translation id="6681301928961274620">Bosma serverda hech qanday printer topilmadi.</translation> <translation id="6681668084120808868">Suratga olish</translation> <translation id="6681964764822470072">“<ph name="APP_NAME" />” o‘chirib tashlanadi.</translation> <translation id="668599234725812620">Play Marketni ochish</translation> @@ -5551,7 +5547,6 @@ <translation id="8794025342371547160">Taqiqlangan IP</translation> <translation id="879413103056696865">Hotspot yoniq ekanligida, <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Yangi oyna</translation> -<translation id="8797086401386164142">Bosma serverda <ph name="NUM_PRINTERS" /> ta printer topildi.</translation> <translation id="8797459392481275117">Bu sayt hech qachon tarjima qilinmasin</translation> <translation id="8798099450830957504">Standart</translation> <translation id="8798441408945964110">Ta’minotchi nomi</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index ba3b11a3..b02f230 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Đang tải chế độ xem trước</translation> <translation id="1032605640136438169">Vui lòng xem các điều khoản mới này</translation> <translation id="103279545524624934">Giải phóng dung lượng ổ đĩa để khởi chạy ứng dụng Android.</translation> -<translation id="1033343386521881354">Tìm thấy 1 máy in trên máy chủ máy in này.</translation> <translation id="1033780634303702874">Truy cập thiết bị tuần tự của bạn</translation> <translation id="1034942643314881546">Đang bật ADB để tạo hình minh họa ứng dụng</translation> <translation id="1036348656032585052">Tắt</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Nhấn |<ph name="ACCELERATOR" />| để thoát khỏi chế độ toàn màn hình</translation> <translation id="1038168778161626396">Chỉ Mã hóa</translation> <translation id="1039337018183941703">Tệp lỗi hoặc không hợp lệ</translation> -<translation id="1039850285407663109">Tệp đã chọn là không xác định và có thể nguy hiểm. Hãy cân nhắc quét trước khi mở tệp này.</translation> <translation id="1041175011127912238">Trang này hiện không phản hồi</translation> <translation id="1041263367839475438">Thiết bị hiện có</translation> <translation id="1042174272890264476">Máy tính của bạn cũng đi kèm với thư viện RLZ của <ph name="SHORT_PRODUCT_NAME" /> được tích hợp sẵn. RLZ chỉ định thẻ không thể nhận dạng cá nhân, không duy nhất để đo lường các tìm kiếm và mức độ sử dụng <ph name="SHORT_PRODUCT_NAME" /> mà một chiến dịch quảng cáo cụ thể mang lại. Đôi khi các nhãn này xuất hiện trong truy vấn Google Tìm kiếm trong <ph name="PRODUCT_NAME" />.</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">Tin tưởng chứng chỉ này khi nhận dạng nhà sản xuất phần mềm</translation> <translation id="1861262398884155592">Thư mục này trống</translation> <translation id="1863182668524159459">Không tìm thấy cổng nối tiếp nào</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> là tệp không xác định. Hãy quét tệp này để giảm thiểu rủi ro.</translation> <translation id="1864111464094315414">Đăng nhập</translation> <translation id="1864400682872660285">Mát hơn</translation> <translation id="1864454756846565995">Thiết bị USB-C (cổng phía sau)</translation> @@ -3934,7 +3931,7 @@ <translation id="6532101170117367231">Lưu vào Google Drive</translation> <translation id="6532106788206463496">Lưu thay đổi</translation> <translation id="6532206849875187177">Bảo mật và đăng nhập</translation> -<translation id="6532527800157340614">Không đăng nhập được do không thể lấy mã thông báo truy cập. Vui lòng kiểm tra kết nối mạng rồi thử lại.</translation> +<translation id="6532527800157340614">Không đăng nhập được do không thể lấy mã truy cập. Vui lòng kiểm tra kết nối mạng rồi thử lại.</translation> <translation id="6532663472409656417">Do doanh nghiệp đăng ký</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />Lưu ý:<ph name="END_BOLD" /> Chỉ bật nếu bạn biết mình đang làm gì hoặc nếu bạn đã được yêu cầu bật vì việc thu thập dữ liệu có thể giảm hiệu suất hoạt động.</translation> <translation id="6541638731489116978">Trang web này đã bị chặn sử dụng cảm biến chuyển động.</translation> @@ -3942,7 +3939,7 @@ <translation id="6545864417968258051">Quét tìm Bluetooth</translation> <translation id="6545867563032584178">Micrô ở trạng thái tắt trong System Preferences (Tùy chọn hệ thống) trên máy Mac</translation> <translation id="6547354035488017500">Hãy giải phóng ít nhất 512 MB dung lượng, nếu không thiết bị sẽ không phản hồi. Để giải phóng dung lượng, hãy xóa các tệp khỏi bộ nhớ thiết bị.</translation> -<translation id="6549966385318247177">Trang web này bị chặn do chứa nội dung dành cho người trưởng thành.</translation> +<translation id="6549966385318247177">Tiện ích này bị chặn do chứa nội dung dành cho người trưởng thành.</translation> <translation id="6550675742724504774">Tùy chọn</translation> <translation id="6551508934388063976">Lệnh không khả dụng. Nhấn phím control-N để mở cửa sổ mới.</translation> <translation id="6551612971599078809">Trang web đang sử dụng USB</translation> @@ -4025,7 +4022,6 @@ <translation id="6678717876183468697">URL truy vấn</translation> <translation id="6680442031740878064">Còn trống: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Tốc độ</translation> -<translation id="6681301928961274620">Không tìm thấy máy in nào trên máy chủ máy in.</translation> <translation id="6681668084120808868">Chụp ảnh</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" sẽ được gỡ cài đặt.</translation> <translation id="668599234725812620">Mở Google Play</translation> @@ -5438,7 +5434,7 @@ <translation id="8650543407998814195">Mặc dù không thể truy cập vào hồ sơ cũ của mình nữa, nhưng bạn vẫn có thể xóa hồ sơ đó.</translation> <translation id="8651585100578802546">Bắt buộc Tải lại Trang Này</translation> <translation id="8652400352452647993">Lỗi đóng gói tiện ích</translation> -<translation id="8653578191563425126">Dung lượng ổ đĩa dự trữ cho Crostini (bạn có thể thay đổi dung lượng này sau).</translation> +<translation id="8653578191563425126">Dung lượng ổ đĩa dự trữ cho Crostini (bạn có thể thay đổi dung lượng này sau đó).</translation> <translation id="8654151524613148204">Rất tiếc, tệp quá lớn để máy tính của bạn có thể xử lý.</translation> <translation id="8655295600908251630">Kênh</translation> <translation id="8655319619291175901">Rất tiếc, đã xảy ra lỗi.</translation> @@ -5555,7 +5551,6 @@ <translation id="8794025342371547160">IP bị hạn chế</translation> <translation id="879413103056696865">Khi điểm phát sóng bật, <ph name="PHONE_NAME" /> của bạn sẽ:</translation> <translation id="8795916974678578410">Cửa sổ mới</translation> -<translation id="8797086401386164142">Tìm thấy <ph name="NUM_PRINTERS" /> máy in trên máy chủ máy in.</translation> <translation id="8797459392481275117">Không bao giờ dịch trang web này</translation> <translation id="8798099450830957504">Mặc định</translation> <translation id="8798441408945964110">Tên nhà mạng</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb index 2b40a4a9..e2d71f0 100644 --- a/chrome/app/resources/generated_resources_zh-CN.xtb +++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -33,7 +33,6 @@ <translation id="1036982837258183574">按 |<ph name="ACCELERATOR" />| 即可退出全屏模式</translation> <translation id="1038168778161626396">仅加密</translation> <translation id="1039337018183941703">文件无效或已损坏</translation> -<translation id="1039850285407663109">所选文件是不明文件,可能含有危险内容。建议您在打开此文件前先扫描。</translation> <translation id="1041175011127912238">该页面未响应</translation> <translation id="1041263367839475438">可用的设备</translation> <translation id="1042174272890264476">您的计算机还内置了 <ph name="SHORT_PRODUCT_NAME" /> 的 RLZ 库。RLZ 会指定非唯一、非个人身份识别代码来衡量某推广活动所带来的搜索量和 <ph name="SHORT_PRODUCT_NAME" /> 使用量。这些标签有时会显示在 <ph name="PRODUCT_NAME" /> 的 Google 搜索查询中。</translation> @@ -152,6 +151,7 @@ <translation id="1197979282329025000">检索打印机“<ph name="PRINTER_NAME" />”的打印功能时发生错误。此打印机无法使用“<ph name="CLOUD_PRINT_NAME" />”进行注册。</translation> <translation id="119944043368869598">全部清除</translation> <translation id="1201402288615127009">下一步</translation> +<translation id="1202556750060561551"><ph name="SITE_GROUP_NAME" />、其名下所有网站及其中安装的应用存储的所有数据和 Cookie 都会被清除。</translation> <translation id="1202596434010270079">自助服务终端应用已更新完毕。请拔下 U 盘。</translation> <translation id="120368089816228251">乐谱</translation> <translation id="1205489148908752564">读取和更改已列入白名单的用户</translation> @@ -279,8 +279,10 @@ <translation id="138784436342154190">要恢复默认启动页吗?</translation> <translation id="1390548061267426325">在常规标签页中打开</translation> <translation id="1393283411312835250">太阳和云朵</translation> +<translation id="1393787139683794508">这会清除 <ph name="ORIGIN_NAME" /> 存储的所有数据和 Cookie。</translation> <translation id="1395730723686586365">更新程序已启动</translation> <translation id="1396139853388185343">设置打印机时出错</translation> +<translation id="1396259464226642517">此结果出乎意料?<ph name="BEGIN_LINK" />发送反馈<ph name="END_LINK" /></translation> <translation id="1396963298126346194">您输入的用户名和密码不匹配</translation> <translation id="1397500194120344683">没有任何符合条件的设备。<ph name="LINK_BEGIN" />了解详情<ph name="LINK_END" /></translation> <translation id="1398853756734560583">最大化</translation> @@ -551,6 +553,7 @@ <translation id="1758018619400202187">EAP-TLS</translation> <translation id="17584710573359123">在 Chrome 网上应用店中查看详情</translation> <translation id="176193854664720708">指纹传感器位于电源按钮中。请用任一根手指轻轻触摸它。</translation> +<translation id="176273057789108760">贵组织正在扫描您拖动的文件,以审核它是否符合安全政策。</translation> <translation id="1763046204212875858">创建应用快捷方式</translation> <translation id="1763108912552529023">继续了解</translation> <translation id="1763808908432309942">在新标签页中打开</translation> @@ -589,6 +592,7 @@ <translation id="1805472176602625930">按下安全密钥上的按钮</translation> <translation id="1805738995123446102">背景标签页正在使用您的麦克风</translation> <translation id="1805822111539868586">查看视图</translation> +<translation id="1805888043020974594">打印服务器</translation> <translation id="1805967612549112634">确认 PIN 码</translation> <translation id="1809734401532861917">将我的书签、历史记录、密码和其他设置添加至 <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">服务</translation> @@ -630,7 +634,6 @@ <translation id="1858585891038687145">信任该证书,以便标识软件编写者的身份</translation> <translation id="1861262398884155592">此文件夹中没有内容</translation> <translation id="1863182668524159459">未发现串行端口</translation> -<translation id="1863552924692672565"><ph name="FILE_NAME" /> 是不明文件。请扫描此文件以尽可能降低风险。</translation> <translation id="1864111464094315414">登录</translation> <translation id="1864400682872660285">冷色调</translation> <translation id="1864454756846565995">USB-C 设备(背面端口)</translation> @@ -737,6 +740,7 @@ <translation id="202352106777823113">下载时间过长,网络已停止下载。</translation> <translation id="2025632980034333559">“<ph name="APP_NAME" />”崩溃了。点击此信息框,以重新加载该扩展程序。</translation> <translation id="2025891858974379949">不安全内容</translation> +<translation id="202918510990975568">您必须输入密码,才能配置安全性和登录</translation> <translation id="2034346955588403444">添加其他 Wi-Fi 网络</translation> <translation id="203574396658008164">从锁定屏幕启用备注功能</translation> <translation id="2037445849770872822">此 Google 帐号的监管功能已设置完毕。要设置更多家长控制,请选择“继续”。 @@ -888,6 +892,7 @@ <translation id="2224471211857467033">无障碍功能事件</translation> <translation id="2224551243087462610">修改文件夹名</translation> <translation id="2226449515541314767">已禁止该网站完全控制 MIDI 设备。</translation> +<translation id="222704500187107962">待您退出当前的无痕式会话后,此例外情况将被自动移除</translation> <translation id="2227179592712503583">移除推荐内容</translation> <translation id="2229161054156947610">剩余时间超过 1 小时</translation> <translation id="222931766245975952">文件被截断</translation> @@ -941,6 +946,7 @@ <translation id="2300383962156589922">自定义和控制<ph name="APP_NAME" /></translation> <translation id="2301382460326681002">扩展程序根目录无效。</translation> <translation id="23030561267973084">“<ph name="EXTENSION_NAME" />”请求获得更多权限。</translation> +<translation id="23055578400314116">选择用户名</translation> <translation id="2307462900900812319">配置网络</translation> <translation id="230927227160767054">此页面想要安装一个服务处理程序。</translation> <translation id="2309620859903500144">此网站已被禁止使用您的动态传感器或光传感器。</translation> @@ -980,6 +986,7 @@ <translation id="2353297238722298836">已允许使用摄像头和麦克风</translation> <translation id="2356070529366658676">询问</translation> <translation id="2357330829548294574">移除<ph name="USER_NAME" /></translation> +<translation id="235798134753548762">系统会同步您的应用、设置和 Wi-Fi 偏好设置。完成设置后,您随时可转到“设置”进行更改。</translation> <translation id="2359345697448000899">您可以通过点击“工具”菜单中的“扩展程序”,管理您的扩展程序。</translation> <translation id="2359808026110333948">继续</translation> <translation id="236117173274098341">优化</translation> @@ -1031,6 +1038,7 @@ <translation id="2436720498717686157">贵组织要求立即更新此设备</translation> <translation id="2439545803278355377">输入您的新 PIN 码。PIN 码必须包含至少 4 个字符,且可以包含字母、数字和其他字符。</translation> <translation id="2440604414813129000">查看源代码(&O)</translation> +<translation id="244231003699905658">地址无效。请检查该地址,然后重试。</translation> <translation id="2442916515643169563">文字阴影</translation> <translation id="2445081178310039857">必须指定扩展程序根目录。</translation> <translation id="2445484935443597917">创建新的个人资料</translation> @@ -1085,6 +1093,7 @@ <translation id="2501278716633472235">返回</translation> <translation id="2501797496290880632">输入快捷键</translation> <translation id="2502441965851148920">已启用自动更新。您的管理员已停用手动更新。</translation> +<translation id="2502719318159902502">完全访问权限</translation> <translation id="2505127913256479918">这个受监管帐号很快就会被移除</translation> <translation id="2505324914378689427">{SCREEN_INDEX,plural, =1{屏幕 #}other{屏幕 #}}</translation> <translation id="2505402373176859469"><ph name="RECEIVED_AMOUNT" />,共 <ph name="TOTAL_SIZE" /></translation> @@ -1357,6 +1366,7 @@ <translation id="2865919525181940183">当前屏幕所含程序的屏幕截图</translation> <translation id="286674810810214575">正在检查电源…</translation> <translation id="2867768963760577682">在固定标签页中打开</translation> +<translation id="2868184003987917410">不允许网站访问您的虚拟实境设备/数据</translation> <translation id="2868746137289129307">此扩展程序已过期并已根据企业政策停用。当有新版本时,它可能会自动启用。</translation> <translation id="2870560284913253234">网站</translation> <translation id="2870909136778269686">正在更新…</translation> @@ -1402,6 +1412,7 @@ <translation id="2916745397441987255">搜索扩展程序</translation> <translation id="2921081876747860777">请设置密码,以保护您的本地数据。</translation> <translation id="2923234477033317484">移除此帐号</translation> +<translation id="2925054096976782003">贵组织正在扫描您粘贴的数据,以审核它是否符合安全政策。</translation> <translation id="2926085873880284723">恢复默认快捷方式</translation> <translation id="2927017729816812676">缓存空间</translation> <translation id="2931157624143513983">适合可打印区域</translation> @@ -1425,6 +1436,7 @@ <translation id="2956070239128776395">有区段嵌套在分组中:<ph name="ERROR_LINE" /></translation> <translation id="2957117904572187936">不允许任何网站修改您设备上的文件或文件夹</translation> <translation id="2958721676848865875">打包扩展程序警告</translation> +<translation id="2959127025785722291">出了点问题。无法完成扫描。请重试。</translation> <translation id="2959842337402130152">存储空间不足,因此无法恢复。请从设备中释放 <ph name="SPACE_REQUIRED" /> 空间,然后重试。</translation> <translation id="296026337010986570">大功告成!已移除有害软件。要想重新开启扩展程序,请前往<a href="chrome://extensions">扩展程序</a>页面。</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" />(已提供扩展功能)</translation> @@ -1682,6 +1694,7 @@ <translation id="3348038390189153836">检测到可移除的设备</translation> <translation id="3349933790966648062">内存占用空间</translation> <translation id="3350117557200012647">进入配对模式</translation> +<translation id="3350244554415289209">在网站想访问您的摄像头位置或映射您的房间时询问您(推荐)</translation> <translation id="3355936511340229503">连接出错</translation> <translation id="3356580349448036450">已完成</translation> <translation id="3359256513598016054">证书政策约束</translation> @@ -1745,6 +1758,7 @@ <translation id="3448492834076427715">更新帐号</translation> <translation id="3449839693241009168">按 <ph name="SEARCH_KEY" /> 可向<ph name="EXTENSION_NAME" />发送命令</translation> <translation id="3450157232394774192">闲置状态占用率</translation> +<translation id="3451332697983754369">同步我的<ph name="DEVICE_TYPE" /></translation> <translation id="3453612417627951340">需要获得授权</translation> <translation id="3454157711543303649">激活已完成</translation> <translation id="3454213325559396544">这是最后一次为此 <ph name="DEVICE_TYPE" /> 提供自动的软件和安全更新。要想接收以后的更新,请升级至较新的型号。</translation> @@ -1767,6 +1781,7 @@ <translation id="347785443197175480">继续允许 <ph name="HOST" /> 使用您的摄像头和麦克风</translation> <translation id="3478685642445675458">在移除用户前,请先解锁您的个人资料。</translation> <translation id="3479552764303398839">以后再说</translation> +<translation id="3479685872808224578">检测不到打印服务器。请检查该地址,然后重试。</translation> <translation id="3481268647794498892">将于 <ph name="COUNTDOWN_SECONDS" /> 秒后在<ph name="ALTERNATIVE_BROWSER_NAME" />中打开</translation> <translation id="3484273680291419129">正在移除有害软件…</translation> <translation id="3484869148456018791">获取新的证书</translation> @@ -1882,6 +1897,7 @@ <translation id="3630132874740063857">您的手机</translation> <translation id="3630995161997703415">请将此网站添加到您的任务栏中,以便随时使用</translation> <translation id="3634507049637220048">第 <ph name="NETWORK_INDEX" /> 个网络(共 <ph name="NETWORK_COUNT" /> 个),<ph name="NETWORK_NAME" />,<ph name="CONNECTION_STATUS" />,由您的管理员管理,详细信息</translation> +<translation id="3635241501480133979">此数据违反了贵组织的安全政策,因此无法拖放。</translation> <translation id="3635353578505343390">向 Google 发送反馈</translation> <translation id="3636096452488277381"><ph name="USER_GIVEN_NAME" />,您好!</translation> <translation id="3636766455281737684"><ph name="PERCENTAGE" />% - 还可使用 <ph name="TIME" /></translation> @@ -1916,6 +1932,7 @@ <translation id="3677657024345889897">最小音量</translation> <translation id="3677911431265050325">请求切换到移动版网站</translation> <translation id="3678156199662914018">扩展程序:<ph name="EXTENSION_NAME" /></translation> +<translation id="3678613690490567106">完成同步后即可在所有设备上畅享个性化体验</translation> <translation id="3681311097828166361">感谢您提交反馈。您目前处于离线状态,系统将在您上线后提交您的反馈报告。</translation> <translation id="3682824389861648626">鼠标移动阈值</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> 屏幕共享请求</translation> @@ -2425,6 +2442,7 @@ <translation id="4400632832271803360">按住启动器键可切换顶行键的行为</translation> <translation id="4400963414856942668">点击星形图标即可为标签页添加书签</translation> <translation id="4403775189117163360">另选一个文件夹</translation> +<translation id="4404136731284211429">重新扫描</translation> <translation id="4405117686468554883">*.jpeg、*.jpg、*.png</translation> <translation id="4408599188496843485">帮助(&E)</translation> <translation id="4409697491990005945">边距</translation> @@ -2443,6 +2461,7 @@ <translation id="4421932782753506458">猫咪</translation> <translation id="4423376891418188461">还原设置</translation> <translation id="442397852638519243"><ph name="USER_NAME" />,您的管理员要求您更改密码。</translation> +<translation id="4429030830601238961">此数据违反了贵组织的安全政策,因此无法粘贴。</translation> <translation id="4430019312045809116">音量</translation> <translation id="4430369329743628066">已添加书签</translation> <translation id="4434045419905280838">弹出式窗口和重定向</translation> @@ -2489,9 +2508,11 @@ <translation id="4501530680793980440">确认删除</translation> <translation id="4502423230170890588">从此设备中移除</translation> <translation id="4504940961672722399">点击该图标或按 <ph name="EXTENSION_SHORTCUT" />,即可使用此扩展程序。</translation> +<translation id="4507164039066603071">不允许网站访问您的摄像头位置或映射您的房间</translation> <translation id="4508051413094283164">在无痕式窗口中打开所有网址</translation> <translation id="4508265954913339219">激活失败</translation> <translation id="4508765956121923607">显示源代码(&O)</translation> +<translation id="4510614391273086606">正在将 Linux 文件和应用恢复为备份状态。</translation> <translation id="451407183922382411">由 <ph name="COMPANY_NAME" /> 提供技术支持</translation> <translation id="4514610446763173167">在播放视频和暂停视频之间切换</translation> <translation id="451515744433878153">移除</translation> @@ -2689,6 +2710,7 @@ <translation id="480990236307250886">打开主页</translation> <translation id="4813136279048157860">我的图片</translation> <translation id="4813512666221746211">网络错误</translation> +<translation id="4814378367953456825">请为此指纹输入一个名称</translation> <translation id="4820236583224459650">设为当前所用票据</translation> <translation id="4821935166599369261">分析已启用(&P)</translation> <translation id="4823484602432206655">读取和更改用户设置与设备设置</translation> @@ -2735,6 +2757,7 @@ <translation id="4876895919560854374">将屏幕锁定和解锁</translation> <translation id="4877276003880815204">检查元素</translation> <translation id="4878653975845355462">您的管理员已关闭自定义背景</translation> +<translation id="4878718769565915065">未能向此安全密钥添加指纹</translation> <translation id="4879491255372875719">自动(默认)</translation> <translation id="4880328057631981605">接入点名称 (APN)</translation> <translation id="4880827082731008257">搜索历史记录</translation> @@ -2865,6 +2888,7 @@ <translation id="5065775832226780415">Smart Lock</translation> <translation id="5067399438976153555">始终启用</translation> <translation id="5067867186035333991">当 <ph name="HOST" /> 想要使用麦克风时询问我</translation> +<translation id="5068377946749700758">贵组织正在扫描您拖动的数据,以审核它是否符合安全政策。</translation> <translation id="5068918910148307423">禁止最近关闭的网站完成数据收发操作</translation> <translation id="5068919226082848014">披萨</translation> <translation id="5072052264945641674">调整光标大小</translation> @@ -3057,6 +3081,7 @@ <translation id="5341793073192892252">已拦截以下 Cookie(所有第三方 Cookie 都会被拦截)</translation> <translation id="5341980496415249280">正在打包,请稍候…</translation> <translation id="5342091991439452114">PIN 码必须至少为 <ph name="MINIMUM" /> 位数</translation> +<translation id="5344036115151554031">正在恢复 Linux</translation> <translation id="5352033265844765294">时间戳</translation> <translation id="5353252989841766347">从 Chrome 中导出密码</translation> <translation id="5355099869024327351">允许 Google 助理向您显示通知</translation> @@ -3110,6 +3135,7 @@ <translation id="5427459444770871191">顺时针旋转(&C)</translation> <translation id="542872847390508405">您正在以访客身份浏览</translation> <translation id="5428850089342283580"><ph name="ACCNAME_APP" />(可进行更新)</translation> +<translation id="542948651837270806">需为“可信平台模块”固件安装更新。请访问 <ph name="TPM_FIRMWARE_UPDATE_LINK" /></translation> <translation id="5430931332414098647">即时网络共享</translation> <translation id="5431318178759467895">彩色</translation> <translation id="5431825016875453137">OpenVPN / L2TP</translation> @@ -3290,6 +3316,7 @@ <translation id="5659593005791499971">电子邮件</translation> <translation id="5659833766619490117">无法翻译此网页</translation> <translation id="5660204307954428567">与“<ph name="DEVICE_NAME" />”配对</translation> +<translation id="5662513737565158057">更改 Linux 应用的运行方式。</translation> <translation id="5667546120811588575">正在设置 Google Play…</translation> <translation id="5669267381087807207">正在激活</translation> <translation id="5669691691057771421">请输入新的 PIN 码</translation> @@ -3697,6 +3724,7 @@ <translation id="6238923052227198598">始终将最新记事显示在锁定屏幕上</translation> <translation id="6239558157302047471">重新加载框架(&F)</translation> <translation id="6241530762627360640">获取与您的系统配对的蓝牙设备的相关信息,以及发现附近的蓝牙设备。</translation> +<translation id="6241844896329831164">不需要任何访问权限</translation> <translation id="6242589501614145408">重置您的安全密钥</translation> <translation id="6242852299490624841">聚焦此标签页</translation> <translation id="6243280677745499710">当前设置的壁纸</translation> @@ -3897,6 +3925,8 @@ <translation id="6531282281159901044">保留危险文件</translation> <translation id="6532101170117367231">保存到 Google 云端硬盘</translation> <translation id="6532106788206463496">保存更改</translation> +<translation id="6532206849875187177">安全性与登录</translation> +<translation id="6532527800157340614">登录失败,因为检索不到您的访问令牌。请检查您的网络连接,然后重试。</translation> <translation id="6532663472409656417">已向企业注册</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />注意:<ph name="END_BOLD" />除非您有意这么做或被要求这样做,否则请不要随意启用这项功能,因为收集数据可能会降低性能。</translation> <translation id="6541638731489116978">此网站已被禁止使用您的动态传感器。</translation> @@ -3904,6 +3934,7 @@ <translation id="6545864417968258051">蓝牙扫描</translation> <translation id="6545867563032584178">已在 Mac 系统偏好设置中关闭麦克风</translation> <translation id="6547354035488017500">请至少释放 512 MB 的空间,否则您的设备将无响应。要释放空间,请将文件从设备存储空间中删除。</translation> +<translation id="6549966385318247177">该扩展程序已被屏蔽,因为它包含少儿不宜的内容。</translation> <translation id="6550675742724504774">选项</translation> <translation id="6551508934388063976">无法使用命令。请按 Ctrl+N 打开一个新窗口。</translation> <translation id="6551612971599078809">此网站正在使用 USB</translation> @@ -4235,6 +4266,7 @@ <translation id="703001695939087067">已进入窗口概览模式。按 Tab 键即可导航。</translation> <translation id="7031608529463141342"><ph name="WINDOW_TITLE" /> - 已连接到串行端口</translation> <translation id="7031962166228839643">正在准备 TPM,请稍候(这可能需要几分钟时间)...</translation> +<translation id="7034615910652881882">在网站想访问您的虚拟实境设备/数据时询问您</translation> <translation id="7037509989619051237">要试听的文字</translation> <translation id="7039326228527141150">访问来自<ph name="VENDOR_NAME" />的 USB 设备</translation> <translation id="7039912931802252762">Microsoft 智能卡登录</translation> @@ -4274,6 +4306,7 @@ <translation id="7081952801286122383">您正在使用无痕模式</translation> <translation id="708278670402572152">要想启用扫描,请先断开连接</translation> <translation id="7085389578340536476">允许 Chrome 录制音频?</translation> +<translation id="7086467953285486445">这些文件违反了贵组织的安全政策,因此无法拖放。</translation> <translation id="7088434364990739311">无法启动更新检查(错误代码为 <ph name="ERROR" />)。</translation> <translation id="7088561041432335295">Zip Archiver - 在“文件”应用中打开和打包 ZIP 文件。</translation> <translation id="7088674813905715446">管理员已将该设备设置为已取消配置的状态。要让该设备能够注册,请让管理员将其设置为待处理状态。</translation> @@ -4387,6 +4420,7 @@ <translation id="7241389281993241388">请登录“<ph name="TOKEN_NAME" />”,导入客户端证书。</translation> <translation id="7241443820034350811">如果您的安全密钥未被列出,请按住安全密钥上的按钮至少 5 秒钟。</translation> <translation id="7243632151880336635">清除并退出</translation> +<translation id="7243784282103630670">升级 Linux 时出错。我们将使用您的备份来恢复容器。</translation> <translation id="7245628041916450754"><ph name="WIDTH" /> x <ph name="HEIGHT" />(最佳)</translation> <translation id="7246230585855757313">请重新插入您的安全密钥,然后再试一次</translation> <translation id="7246947237293279874">FTP 代理</translation> @@ -4473,6 +4507,7 @@ <translation id="7360233684753165754">通过“<ph name="PRINTER_NAME" />”打印 <ph name="PAGE_NUMBER" /> 个页面</translation> <translation id="7361297102842600584">右键点击即可运行 <ph name="PLUGIN_NAME" /></translation> <translation id="7363117941401515667">上次更新时间:<ph name="HOURS" /> 小时前</translation> +<translation id="7364591875953874521">已请求访问权限</translation> <translation id="7364796246159120393">选择文件</translation> <translation id="7366415735885268578">添加网站</translation> <translation id="7366909168761621528">浏览数据</translation> @@ -4498,6 +4533,7 @@ <translation id="740624631517654988">已拦截弹出式窗口</translation> <translation id="7407430846095439694">导入并绑定</translation> <translation id="7407504355934009739">多数人会屏蔽来自此网站的通知</translation> +<translation id="740810853557944681">添加打印服务器</translation> <translation id="7409549334477097887">特大</translation> <translation id="7409836189476010449">运行 Flash</translation> <translation id="7410344089573941623"><ph name="HOST" /> 想要使用摄像头和麦克风时询问我是否同意</translation> @@ -4518,6 +4554,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{在新窗口中打开全部网址(&N)}=1{在新窗口中打开 1 个网址(&N)}other{在新窗口中打开全部(# 个)网址(&N)}}</translation> <translation id="7434509671034404296">开发者</translation> <translation id="7434635829372401939">同步您的设置</translation> +<translation id="7434969625063495310">无法添加打印服务器。请检查服务器的配置,然后重试。</translation> <translation id="7436921188514130341">糟糕!重命名过程中出错了。</translation> <translation id="7438976808740265764">自 2020 年 12 月开始,Flash Player 将不再受支持。</translation> <translation id="7441736921018636843">要更改此设置,请<ph name="BEGIN_LINK" />重置同步功能<ph name="END_LINK" />以移除同步密码</translation> @@ -4527,8 +4564,10 @@ <translation id="7443806024147773267">只要您登录自己的 Google 帐号,即可获取您的密码</translation> <translation id="7444983668544353857">停用<ph name="NETWORKDEVICE" /></translation> <translation id="7448430327655618736">自动安装应用</translation> +<translation id="7448625729116931228">在网站想访问您的虚拟实境设备/数据时询问您(推荐)</translation> <translation id="7450761244949417357">正在<ph name="ALTERNATIVE_BROWSER_NAME" />中打开</translation> <translation id="7453008956351770337">选择此打印机即表示您允许以下扩展程序访问您的打印机:</translation> +<translation id="7454548535253569100">门户网站:<ph name="SUBFRAME_SITE" /></translation> <translation id="7456142309650173560">开发者版本</translation> <translation id="7456847797759667638">打开位置...</translation> <translation id="7458168200501453431">使用 Google 搜索所用的拼写检查工具。您在浏览器中输入的文字会被发送给 Google。</translation> @@ -4574,6 +4613,7 @@ <translation id="7513029293694390567">使用存储的凭据自动登录网站。停用该功能后,系统会在您每次登录网站时要求您进行确认。</translation> <translation id="7514239104543605883">复制到您的设备</translation> <translation id="7514365320538308">下载</translation> +<translation id="7520766081042531487">无痕式门户网站:<ph name="SUBFRAME_SITE" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7522255036471229694">说“Ok Google”</translation> <translation id="7525067979554623046">创建</translation> @@ -4662,6 +4702,7 @@ <translation id="7652808307838961528">修改用户,<ph name="PROFILE_NAME" /></translation> <translation id="765293928828334535">无法从该网站添加应用、扩展程序和用户脚本</translation> <translation id="7652954539215530680">创建 PIN 码</translation> +<translation id="7653295403398566475">在网站想访问您的摄像头位置或映射您的房间时询问您</translation> <translation id="7654941827281939388">已有人在此计算机上使用此帐号。</translation> <translation id="7658239707568436148">取消</translation> <translation id="7659584679870740384">您无权使用此设备。请向管理员申请登录权限。</translation> @@ -4814,6 +4855,7 @@ <translation id="783214144752121388">禁止网站运行 Flash(推荐)</translation> <translation id="7833720883933317473">已保存的自定义字词将显示在这里</translation> <translation id="7835178595033117206">已移除书签</translation> +<translation id="7836850009646241041">请再次尝试轻触您的安全密钥</translation> <translation id="7837776265184002579">您的主页已改为 <ph name="URL" />。</translation> <translation id="7839051173341654115">查看/备份媒体</translation> <translation id="7839192898639727867">证书主题背景密钥 ID</translation> @@ -5128,7 +5170,9 @@ <translation id="8260864402787962391">鼠标</translation> <translation id="8261378640211443080">该扩展程序未列在 <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />中,并可能是在您不知情的情况下添加的。</translation> <translation id="8261506727792406068">删除</translation> +<translation id="8263336784344783289">为此组命名</translation> <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" /> 已隐藏鼠标指针。</translation> +<translation id="8264024885325823677">此设置由您的管理员管理。</translation> <translation id="8264718194193514834">“<ph name="EXTENSION_NAME" />”触发了全屏模式。</translation> <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />这是关于此设备及其使用情况(例如电池电量、系统与应用活动记录以及错误消息)的一般信息。我们会使用这些数据来改善 Android;部分汇总信息也会有助于改善 Google 应用,并会协助我们的合作伙伴(例如 Android 开发者)改善其应用和产品。<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />关闭这项功能并不会影响此设备发送基本服务(例如系统更新和安全防护)所需的信息。<ph name="END_PARAGRAPH2" /> @@ -5384,6 +5428,7 @@ <translation id="8650543407998814195">既然您已无法再访问自己的旧个人资料,不妨将其移除。</translation> <translation id="8651585100578802546">强制重新加载此页</translation> <translation id="8652400352452647993">打包扩展程序错误</translation> +<translation id="8653578191563425126">要为 Crostini 预留的磁盘空间(之后您可以更改此设置)。</translation> <translation id="8654151524613148204">很抱歉,文件过大,计算机无法处理。</translation> <translation id="8655295600908251630">版本</translation> <translation id="8655319619291175901">糟糕,出了点问题。</translation> @@ -5648,6 +5693,7 @@ <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> 天前曾有活动</translation> <translation id="8986362086234534611">不保存</translation> <translation id="8986494364107987395">将使用情况统计信息和崩溃报告自动发送给 Google</translation> +<translation id="8986651757229422279">这会清除 <ph name="ORIGIN_NAME" /> 及其中安装的应用存储的所有数据和 Cookie。</translation> <translation id="8987927404178983737">月</translation> <translation id="8991520179165052608">该网站可能会使用您的麦克风</translation> <translation id="899403249577094719">Netscape 证书基本网址</translation> @@ -5799,6 +5845,7 @@ <translation id="932508678520956232">无法开始打印。</translation> <translation id="93343527085570547">要出于法律原因请求更改内容,请前往<ph name="BEGIN_LINK1" />法律帮助页面<ph name="END_LINK1" />。系统可能会将部分帐号和系统信息发送给 Google。我们将依照<ph name="BEGIN_LINK2" />隐私权政策<ph name="END_LINK2" />和<ph name="BEGIN_LINK3" />服务条款<ph name="END_LINK3" />的规定,使用您提供的信息解决技术问题并改进我们的服务。</translation> <translation id="93393615658292258">仅限密码</translation> +<translation id="934244546219308557">为此组命名</translation> <translation id="934503638756687833">如有必要,此处未列出的内容也会被移除。请参阅 Chrome 隐私权政策白皮书,详细了解<a href="<ph name="URL" />">垃圾软件防护</a>。</translation> <translation id="935490618240037774">您的书签、历史记录、密码及其他设置均将同步到您的 Google 帐号,以便您在自己所有的设备上使用。</translation> <translation id="935854577147268200">Smart Lock 所用的配对手机已更改。请输入您的密码以更新 Smart Lock。下次,您就能使用新的配对手机解锁您的 <ph name="DEVICE_TYPE" /> 了。您可在“设置”中关闭 Smart Lock。</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb index 4ee7dc7d..66f3ba2 100644 --- a/chrome/app/resources/generated_resources_zh-HK.xtb +++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">正在載入預覽畫面</translation> <translation id="1032605640136438169">請閱讀新版條款</translation> <translation id="103279545524624934">請釋出磁碟的儲存空間,以啟動 Android 應用程式。</translation> -<translation id="1033343386521881354">在列印伺服器上找到 1 台印表機。</translation> <translation id="1033780634303702874">存取您的序列裝置</translation> <translation id="1034942643314881546">啟用 adb 以建立應用程式插圖</translation> <translation id="1036348656032585052">停用</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">按下 |<ph name="ACCELERATOR" />| 即可退出全螢幕</translation> <translation id="1038168778161626396">只有 Encipher</translation> <translation id="1039337018183941703">檔案無效或損毀</translation> -<translation id="1039850285407663109">所選檔案不明,且可能不安全。建議您在開啟檔案前先掃瞄。</translation> <translation id="1041175011127912238">此網頁沒有回應</translation> <translation id="1041263367839475438">可用的裝置</translation> <translation id="1042174272890264476">您的電腦也內置了 <ph name="SHORT_PRODUCT_NAME" /> 的 RLZ 資料庫。RLZ 可指定非重複、非個人的可識別標記,以評估特定宣傳廣告活動所提升的搜尋數量與 <ph name="SHORT_PRODUCT_NAME" /> 使用量。這些標籤有時也會顯示在 <ph name="PRODUCT_NAME" /> 的 Google 搜尋查詢中。</translation> @@ -153,7 +151,7 @@ <translation id="1197979282329025000">擷取 <ph name="PRINTER_NAME" /> 的打印機功能狀態時發生錯誤,無法向 <ph name="CLOUD_PRINT_NAME" /> 註冊該打印機。</translation> <translation id="119944043368869598">全部清除</translation> <translation id="1201402288615127009">下一個</translation> -<translation id="1202556750060561551"><ph name="SITE_GROUP_NAME" /> 儲存的所有資料和 Cookie、包含的所有網站,以及該群組所安裝的應用程式都將遭到清除。</translation> +<translation id="1202556750060561551"><ph name="SITE_GROUP_NAME" /> 儲存的所有資料和 Cookie、包含的所有網站,以及該群組所安裝的應用程式都將被清除。</translation> <translation id="1202596434010270079">Kiosk 應用程式已更新。請移除 USB 記憶體。</translation> <translation id="120368089816228251">音符</translation> <translation id="1205489148908752564">讀取及變更許可名單上的使用者</translation> @@ -281,10 +279,10 @@ <translation id="138784436342154190">要將起始網頁還原至預設值嗎?</translation> <translation id="1390548061267426325">在一般分頁中開啟</translation> <translation id="1393283411312835250">太陽和雲</translation> -<translation id="1393787139683794508">這會清除 <ph name="ORIGIN_NAME" /> 儲存的所有資料和 Cookie。</translation> +<translation id="1393787139683794508">此操作會清除 <ph name="ORIGIN_NAME" /> 儲存的所有資料和 Cookie。</translation> <translation id="1395730723686586365">更新程式已啟動</translation> <translation id="1396139853388185343">設定打印機時發生錯誤</translation> -<translation id="1396259464226642517">這不是你預期的結果嗎?<ph name="BEGIN_LINK" />提供意見<ph name="END_LINK" /></translation> +<translation id="1396259464226642517">結果未如預期嗎?<ph name="BEGIN_LINK" />傳送意見<ph name="END_LINK" /></translation> <translation id="1396963298126346194">您輸入的使用者名稱與密碼不符</translation> <translation id="1397500194120344683">沒有適用裝置。<ph name="LINK_BEGIN" />瞭解詳情<ph name="LINK_END" /></translation> <translation id="1398853756734560583">最大化</translation> @@ -558,7 +556,7 @@ <translation id="1758018619400202187">EAP-TLS</translation> <translation id="17584710573359123">在「Chrome 網上應用程式商店」上查看</translation> <translation id="176193854664720708">指紋感應器位於開關按鈕中。請以任何一隻手指輕觸按鈕。</translation> -<translation id="176273057789108760">貴機構正在掃描拖曳的檔案,以取得安全性核准。</translation> +<translation id="176273057789108760">機構正在掃瞄拖曳的檔案,以取得安全性核准。</translation> <translation id="1763046204212875858">建立應用程式捷徑</translation> <translation id="1763108912552529023">繼續探索</translation> <translation id="1763808908432309942">在新分頁中開啟</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">信任這個用於識別軟件製造商的憑證</translation> <translation id="1861262398884155592">此資料夾中沒有內容</translation> <translation id="1863182668524159459">找不到序列連接埠</translation> -<translation id="1863552924692672565">「<ph name="FILE_NAME" />」是不明檔案。建議您掃瞄檔案以減低風險。</translation> <translation id="1864111464094315414">登入</translation> <translation id="1864400682872660285">冷色調</translation> <translation id="1864454756846565995">USB-C 裝置 (後方連接埠)</translation> @@ -746,7 +743,7 @@ <translation id="202352106777823113">下載時間太長,已被網絡停止。</translation> <translation id="2025632980034333559"><ph name="APP_NAME" /> 當機了,請按一下這個提示框來重新載入擴充功能。</translation> <translation id="2025891858974379949">不安全的內容</translation> -<translation id="202918510990975568">請輸入你的密碼以進行安全性與登入設定</translation> +<translation id="202918510990975568">請輸入您的密碼以進行安全性和登入設定</translation> <translation id="2034346955588403444">新增其他 Wi-Fi 網絡</translation> <translation id="203574396658008164">從上鎖畫面啟用筆記功能</translation> <translation id="2037445849770872822">您已設定此 Google 帳戶的監控功能。如要設定更多家長監控設定,請選取 [繼續]。 @@ -898,7 +895,7 @@ <translation id="2224471211857467033">無障礙功能活動</translation> <translation id="2224551243087462610">編輯資料夾名稱</translation> <translation id="2226449515541314767">這個網站已被封鎖,無法全權控制 MIDI 裝置。</translation> -<translation id="222704500187107962">當你結束目前的無痕模式工作階段後,系統將自動移除這個例外設定</translation> +<translation id="222704500187107962">此例外情況會在您結束目前的無痕模式工作階段後自動移除</translation> <translation id="2227179592712503583">移除建議</translation> <translation id="2229161054156947610">還有 1 個多小時</translation> <translation id="222931766245975952">檔案已被截斷</translation> @@ -992,7 +989,7 @@ <translation id="2353297238722298836">已允許使用相機和麥克風</translation> <translation id="2356070529366658676">詢問</translation> <translation id="2357330829548294574">移除「<ph name="USER_NAME" />」</translation> -<translation id="235798134753548762">系統會同步處理你的應用程式、設定和 Wi‑Fi 偏好設定。你隨時可以前往「設定」變更這些設定。</translation> +<translation id="235798134753548762">您的應用程式、設定和 Wi-Fi 偏好設定將會同步處理。您隨時可前往「設定」變更這些設定。</translation> <translation id="2359345697448000899">如要管理擴充功能,只需按一下 [工具] 選單裡的 [擴充功能] 即可。</translation> <translation id="2359808026110333948">繼續</translation> <translation id="236117173274098341">優化</translation> @@ -1044,7 +1041,7 @@ <translation id="2436720498717686157">您的機構要求立即更新此裝置</translation> <translation id="2439545803278355377">請輸入新 PIN。PIN 必須包含至少四個字元,可以使用字母、數字和其他字元。</translation> <translation id="2440604414813129000">檢視原始碼(&O)</translation> -<translation id="244231003699905658">位址無效。請檢查位址是否正確,然後再試一次。</translation> +<translation id="244231003699905658">地址無效。請檢查地址,然後再試一次。</translation> <translation id="2442916515643169563">文字陰影</translation> <translation id="2445081178310039857">請指定擴充功能根目錄。</translation> <translation id="2445484935443597917">建立新的設定檔</translation> @@ -1099,7 +1096,7 @@ <translation id="2501278716633472235">返回</translation> <translation id="2501797496290880632">按下快速鍵</translation> <translation id="2502441965851148920">已啟用自動更新功能。您的管理員已停用手動更新功能。</translation> -<translation id="2502719318159902502">具有完整存取權</translation> +<translation id="2502719318159902502">完整存取權</translation> <translation id="2505127913256479918">此受監管帳戶即將被移除</translation> <translation id="2505324914378689427">{SCREEN_INDEX,plural, =1{螢幕 #}other{螢幕 #}}</translation> <translation id="2505402373176859469">已收到 <ph name="RECEIVED_AMOUNT" />,共 <ph name="TOTAL_SIZE" /></translation> @@ -1372,7 +1369,7 @@ <translation id="2865919525181940183">目前畫面上面嘅程式螢幕截圖</translation> <translation id="286674810810214575">正在檢查電源…</translation> <translation id="2867768963760577682">在固定分頁中開啟</translation> -<translation id="2868184003987917410">不允許網站存取你的虛擬實境裝置/資料</translation> +<translation id="2868184003987917410">不允許網站存取您的虛擬實境裝置/資料</translation> <translation id="2868746137289129307">這項擴充功能已過時,並根據企業政策停用。當日後有更新版本可用,系統可能會自動啟用該功能。</translation> <translation id="2870560284913253234">網站</translation> <translation id="2870909136778269686">正在更新…</translation> @@ -1418,7 +1415,7 @@ <translation id="2916745397441987255">搜尋擴充程式</translation> <translation id="2921081876747860777">請建立密碼以保護您的本機資料。</translation> <translation id="2923234477033317484">移除此帳戶</translation> -<translation id="2925054096976782003">貴機構正在掃描貼上的資料,以取得安全性核准。</translation> +<translation id="2925054096976782003">機構正在掃瞄貼上的資料,以取得安全性核准。</translation> <translation id="2926085873880284723">還原預設捷徑</translation> <translation id="2927017729816812676">快取儲存空間</translation> <translation id="2931157624143513983">依可列印範圍自動調整</translation> @@ -1442,7 +1439,7 @@ <translation id="2956070239128776395">群組中具有巢狀部份:<ph name="ERROR_LINE" /></translation> <translation id="2957117904572187936">不允許任何網站編輯裝置上的檔案或資料夾</translation> <translation id="2958721676848865875">封裝擴充功能警告</translation> -<translation id="2959127025785722291">發生錯誤,無法完成掃描作業。請再試一次。</translation> +<translation id="2959127025785722291">發生錯誤,無法完成掃瞄。請再試一次。</translation> <translation id="2959842337402130152">儲存空間不足,因此無法還原。請騰出 <ph name="SPACE_REQUIRED" /> 的裝置儲存空間,然後再試一次。</translation> <translation id="296026337010986570">大功告成!有害軟件已移除。如要重新啟用擴充程式,請前往 <a href="chrome://extensions">擴充程式</a>。</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" /> (已延長期限)</translation> @@ -1699,7 +1696,7 @@ <translation id="3348038390189153836">偵測到卸除式裝置</translation> <translation id="3349933790966648062">記憶體使用量</translation> <translation id="3350117557200012647">進入配對模式</translation> -<translation id="3350244554415289209">網站必須先詢問你,才能存取攝影機位置或對應你的房間 (建議)</translation> +<translation id="3350244554415289209">在網站要存取您的攝錄機位置或對應您的房間佈局時詢問您 (建議)</translation> <translation id="3355936511340229503">連線錯誤</translation> <translation id="3356580349448036450">完成</translation> <translation id="3359256513598016054">憑證政策限制</translation> @@ -1786,7 +1783,7 @@ <translation id="347785443197175480">繼續允許 <ph name="HOST" /> 存取您的相機和麥克風</translation> <translation id="3478685642445675458">移除任何使用者前,請先取消鎖定您的個人檔案。</translation> <translation id="3479552764303398839">略過</translation> -<translation id="3479685872808224578">偵測不到列印伺服器。請檢查位址是否正確,然後再試一次。</translation> +<translation id="3479685872808224578">偵測不到列印伺服器。請檢查地址,然後再試一次。</translation> <translation id="3481268647794498892">將於 <ph name="COUNTDOWN_SECONDS" /> 秒後在 <ph name="ALTERNATIVE_BROWSER_NAME" /> 中開啟</translation> <translation id="3484273680291419129">正在移除有害的軟件…</translation> <translation id="3484869148456018791">取得新憑證</translation> @@ -1902,7 +1899,7 @@ <translation id="3630132874740063857">您的手機</translation> <translation id="3630995161997703415">將此網站加到檔案櫃,即可隨時使用</translation> <translation id="3634507049637220048">第 <ph name="NETWORK_INDEX" /> 個網絡,一共有 <ph name="NETWORK_COUNT" /> 個網絡,<ph name="NETWORK_NAME" />,<ph name="CONNECTION_STATUS" />,由管理員管理,詳情</translation> -<translation id="3635241501480133979">這項資料違反了貴機構的安全性政策,因此無法拖放。</translation> +<translation id="3635241501480133979">此資料違反機構的安全性政策,因此無法拖放。</translation> <translation id="3635353578505343390">傳送意見給 Google</translation> <translation id="3636096452488277381"><ph name="USER_GIVEN_NAME" />,您好!</translation> <translation id="3636766455281737684">電力剩餘 <ph name="PERCENTAGE" />% - <ph name="TIME" /></translation> @@ -1937,7 +1934,7 @@ <translation id="3677657024345889897">最小聲</translation> <translation id="3677911431265050325">切換至流動網站</translation> <translation id="3678156199662914018">擴充功能:<ph name="EXTENSION_NAME" /></translation> -<translation id="3678613690490567106">完成同步作業後即可在所有裝置上享有個人化體驗</translation> +<translation id="3678613690490567106">同步處理後即可在所有裝置上享受個人化體驗</translation> <translation id="3681311097828166361">多謝您提供的意見反映。您目前處於離線狀態,系統會稍後傳送您的報告。</translation> <translation id="3682824389861648626">移動限制</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> 要求共用螢幕</translation> @@ -2448,7 +2445,7 @@ <translation id="4400632832271803360">按住啟動器鍵,即可切換最上排按鍵的執行動作</translation> <translation id="4400963414856942668">按一下「星號」即可將分頁加入書籤</translation> <translation id="4403775189117163360">選擇其他資料夾</translation> -<translation id="4404136731284211429">重新掃描</translation> +<translation id="4404136731284211429">重新掃瞄</translation> <translation id="4405117686468554883">*.jpeg、*.jpg、*.png</translation> <translation id="4408599188496843485">說明(&E)</translation> <translation id="4409697491990005945">邊界</translation> @@ -2467,7 +2464,7 @@ <translation id="4421932782753506458">長毛貓</translation> <translation id="4423376891418188461">還原設定</translation> <translation id="442397852638519243"><ph name="USER_NAME" />,管理員要求您變更密碼。</translation> -<translation id="4429030830601238961">這項資料違反了貴機構的安全性政策,因此無法貼上。</translation> +<translation id="4429030830601238961">此資料違反機構的安全性政策,因此無法貼上。</translation> <translation id="4430019312045809116">音量</translation> <translation id="4430369329743628066">已新增書籤</translation> <translation id="4434045419905280838">彈出式視窗和重新導向</translation> @@ -2514,11 +2511,11 @@ <translation id="4501530680793980440">確認移除</translation> <translation id="4502423230170890588">從此裝置中移除</translation> <translation id="4504940961672722399">按一下這個圖示或按下 <ph name="EXTENSION_SHORTCUT" />,即可使用這項擴充功能。</translation> -<translation id="4507164039066603071">不允許網站存取攝影機位置或對應你的房間</translation> +<translation id="4507164039066603071">不允許網站存取您的攝錄機位置或對應您的房間佈局</translation> <translation id="4508051413094283164">在無痕式視窗中開啟所有書籤</translation> <translation id="4508265954913339219">啟用失敗</translation> <translation id="4508765956121923607">檢視原始碼(&O)</translation> -<translation id="4510614391273086606">系統正在將 Linux 檔案和應用程式還原至備份狀態。</translation> +<translation id="4510614391273086606">正在將 Linux 檔案和應用程式還原至備份狀態。</translation> <translation id="451407183922382411">由 <ph name="COMPANY_NAME" /> 提供</translation> <translation id="4514610446763173167">喺播放同暫停影片之間切換</translation> <translation id="451515744433878153">移除</translation> @@ -2716,7 +2713,7 @@ <translation id="480990236307250886">開啟首頁</translation> <translation id="4813136279048157860">我的圖片</translation> <translation id="4813512666221746211">網絡錯誤</translation> -<translation id="4814378367953456825">請輸入這個指紋的名稱</translation> +<translation id="4814378367953456825">請輸入此指紋的名稱</translation> <translation id="4820236583224459650">設定為有效票證</translation> <translation id="4821935166599369261">分析已啟用(&P)</translation> <translation id="4823484602432206655">讀取和變更使用者和裝置設定</translation> @@ -2763,7 +2760,7 @@ <translation id="4876895919560854374">鎖定和解鎖屏幕</translation> <translation id="4877276003880815204">檢查元素</translation> <translation id="4878653975845355462">管理員已關閉自訂背景功能</translation> -<translation id="4878718769565915065">無法將指紋新增到這個安全金鑰</translation> +<translation id="4878718769565915065">無法將指紋新增到此安全密鑰</translation> <translation id="4879491255372875719">自動 (預設)</translation> <translation id="4880328057631981605">接入點名稱 (APN)</translation> <translation id="4880827082731008257">搜尋記錄</translation> @@ -2894,7 +2891,7 @@ <translation id="5065775832226780415">Smart Lock</translation> <translation id="5067399438976153555">保持開啟</translation> <translation id="5067867186035333991">當 <ph name="HOST" /> 要求存取麥克風時詢問我。</translation> -<translation id="5068377946749700758">貴機構正在掃描拖曳的資料,以取得安全性核准。</translation> +<translation id="5068377946749700758">機構正在掃瞄拖曳的資料,以取得安全性核准。</translation> <translation id="5068918910148307423">不允許最近關閉的網站完成傳送和接收資料的動作</translation> <translation id="5068919226082848014">薄餅</translation> <translation id="5072052264945641674">調整游標大小</translation> @@ -3141,7 +3138,7 @@ <translation id="5427459444770871191">順時針旋轉(&C)</translation> <translation id="542872847390508405">您目前是以訪客身分瀏覽</translation> <translation id="5428850089342283580"><ph name="ACCNAME_APP" /> (有可用的更新)</translation> -<translation id="542948651837270806">必須安裝可信任平台模組韌體的更新項目。詳情請參閱 <ph name="TPM_FIRMWARE_UPDATE_LINK" /></translation> +<translation id="542948651837270806">需要安裝信任平台模組韌體的更新。請參閱 <ph name="TPM_FIRMWARE_UPDATE_LINK" /></translation> <translation id="5430931332414098647">即時網絡共享</translation> <translation id="5431318178759467895">顏色</translation> <translation id="5431825016875453137">OpenVPN / L2TP</translation> @@ -3730,7 +3727,7 @@ <translation id="6238923052227198598">在上鎖畫面上顯示最新筆記</translation> <translation id="6239558157302047471">重新載入頁框(&F)</translation> <translation id="6241530762627360640">存取與系統配對的藍牙裝置資料,並搜尋附近的藍牙裝置。</translation> -<translation id="6241844896329831164">不需要存取權</translation> +<translation id="6241844896329831164">無需存取權</translation> <translation id="6242589501614145408">重設安全密鑰</translation> <translation id="6242852299490624841">將焦點移至此分頁</translation> <translation id="6243280677745499710">目前設定的桌布</translation> @@ -3931,8 +3928,8 @@ <translation id="6531282281159901044">保留不安全的檔案</translation> <translation id="6532101170117367231">儲存至 Google 雲端硬碟</translation> <translation id="6532106788206463496">儲存變更</translation> -<translation id="6532206849875187177">安全性與登入</translation> -<translation id="6532527800157340614">無法擷取你的存取憑證,因此登入失敗。請檢查網路連線,然後再試一次。</translation> +<translation id="6532206849875187177">安全性和登入</translation> +<translation id="6532527800157340614">無法擷取您的存取憑證,因此無法登入。請檢查您的網絡連線,然後再試一次。</translation> <translation id="6532663472409656417">已註冊企業</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />注意:<ph name="END_BOLD" />除非您瞭解這項功能的用途或是收到相關指示,否則請不要啟用這項功能,因為收集數據可能會導致系統效能降低。</translation> <translation id="6541638731489116978">此網站被禁止存取您的動作感應器。</translation> @@ -3940,7 +3937,7 @@ <translation id="6545864417968258051">藍牙掃瞄</translation> <translation id="6545867563032584178">已關閉 Mac 系統偏好設定中的麥克風</translation> <translation id="6547354035488017500">請釋出最少 512 MB 的儲存空間,否則裝置將沒有回應。如要釋出空間,請刪除裝置儲存空間內的檔案。</translation> -<translation id="6549966385318247177">這個擴充功能包含兒童不宜的內容,因此已遭到封鎖。</translation> +<translation id="6549966385318247177">此擴充程式包含兒童不宜內容,因此已被封鎖。</translation> <translation id="6550675742724504774">選項</translation> <translation id="6551508934388063976">無法使用指令。按下 Ctrl + N 鍵可開啟新視窗。</translation> <translation id="6551612971599078809">網站正在使用 USB 裝置</translation> @@ -4023,7 +4020,6 @@ <translation id="6678717876183468697">查詢網址</translation> <translation id="6680442031740878064">可用空間:<ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">語速</translation> -<translation id="6681301928961274620">在列印伺服器上找不到任何印表機。</translation> <translation id="6681668084120808868">拍攝相片</translation> <translation id="6681964764822470072">系統會解除安裝「<ph name="APP_NAME" />」。</translation> <translation id="668599234725812620">開啟 Google Play</translation> @@ -4273,7 +4269,7 @@ <translation id="703001695939087067">進入咗視窗概覽模式。㩒一下就可以瀏覽。</translation> <translation id="7031608529463141342"><ph name="WINDOW_TITLE" /> - 連接咗序列連接埠</translation> <translation id="7031962166228839643">正在準備 TPM,請稍候 (這可能需要幾分鐘的時間)…</translation> -<translation id="7034615910652881882">網站必須先詢問你,才能存取你的虛擬實境裝置/資料</translation> +<translation id="7034615910652881882">在網站要存取您的虛擬實境裝置/資料時詢問您</translation> <translation id="7037509989619051237">要預覽的文字</translation> <translation id="7039326228527141150">存取來自 <ph name="VENDOR_NAME" /> 的 USB 裝置</translation> <translation id="7039912931802252762">Microsoft 智能卡登入</translation> @@ -4313,7 +4309,7 @@ <translation id="7081952801286122383">目前為無痕模式</translation> <translation id="708278670402572152">中斷連線即可啟用掃瞄功能</translation> <translation id="7085389578340536476">允許 Chrome 錄音嗎?</translation> -<translation id="7086467953285486445">這些檔案違反了貴機構的安全性政策,因此無法拖放。</translation> +<translation id="7086467953285486445">這些檔案違反機構的安全性政策,因此無法拖放。</translation> <translation id="7088434364990739311">無法啟動更新檢查 (錯誤代碼 <ph name="ERROR" />)。</translation> <translation id="7088561041432335295">Zip Archiver - 在「檔案」應用程式開啟及封裝 ZIP 檔案。</translation> <translation id="7088674813905715446">管理員已將這部裝置設為取消佈建狀態。如要讓裝置符合註冊資格,請要求您的管理員將裝置設為等待處理狀態。</translation> @@ -4427,7 +4423,7 @@ <translation id="7241389281993241388">請登入 <ph name="TOKEN_NAME" /> 以匯入用戶端憑證。</translation> <translation id="7241443820034350811">如果畫面上未列出您的安全密鑰,請按住密鑰上的按鈕至少 5 秒。</translation> <translation id="7243632151880336635">清除並登出</translation> -<translation id="7243784282103630670">升級 Linux 時發生錯誤。系統將使用你的備份資料還原容器。</translation> +<translation id="7243784282103630670">升級 Linux 時發生錯誤。我們會使用您的備份還原容器。</translation> <translation id="7245628041916450754"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (最佳)</translation> <translation id="7246230585855757313">請重新插入安全密鑰,然後再試一次</translation> <translation id="7246947237293279874">FTP Proxy</translation> @@ -4561,7 +4557,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{在新視窗中開啟所有書籤(&N)}=1{在新視窗中開啟(&N)}other{在新視窗中開啟全部 # 個書籤(&N)}}</translation> <translation id="7434509671034404296">開發人員</translation> <translation id="7434635829372401939">同步您的設定</translation> -<translation id="7434969625063495310">無法新增列印伺服器。請檢查伺服器的設定,然後再試一次。</translation> +<translation id="7434969625063495310">無法新增列印伺服器。請檢查伺服器設定,然後再試一次。</translation> <translation id="7436921188514130341">很抱歉!重新命名過程中發生錯誤。</translation> <translation id="7438976808740265764">由 2020 年 12 月起,系統將不再支援 Flash Player。</translation> <translation id="7441736921018636843">如要變更此設定,請<ph name="BEGIN_LINK" />重設同步功能<ph name="END_LINK" />以移除同步密碼短語</translation> @@ -4571,7 +4567,7 @@ <translation id="7443806024147773267">系統會在您每次登入 Google 帳戶時都會存取密碼</translation> <translation id="7444983668544353857">停用 <ph name="NETWORKDEVICE" /></translation> <translation id="7448430327655618736">自動安裝應用程式</translation> -<translation id="7448625729116931228">網站必須先詢問你,才能存取你的虛擬實境裝置/資料 (建議)</translation> +<translation id="7448625729116931228">在網站要存取您的虛擬實境裝置/資料時詢問您 (選擇)</translation> <translation id="7450761244949417357">正在 <ph name="ALTERNATIVE_BROWSER_NAME" /> 中開啟</translation> <translation id="7453008956351770337">選取此打印機,即表示您授權下列擴充程式存取您的打印機:</translation> <translation id="7454548535253569100">入口網站:<ph name="SUBFRAME_SITE" /></translation> @@ -4709,7 +4705,7 @@ <translation id="7652808307838961528">編輯使用者、<ph name="PROFILE_NAME" /></translation> <translation id="765293928828334535">無法從這個網站新增應用程式、擴充程式及使用者指令碼</translation> <translation id="7652954539215530680">建立 PIN</translation> -<translation id="7653295403398566475">網站必須先詢問你,才能存取攝影機位置或對應你的房間</translation> +<translation id="7653295403398566475">在網站要存取您的攝錄機位置或對應您的房間佈局時詢問您</translation> <translation id="7654941827281939388">已有人在這部電腦上使用這個帳戶。</translation> <translation id="7658239707568436148">取消</translation> <translation id="7659584679870740384">您無權使用這部裝置。如需登入權限,請與管理員聯絡。</translation> @@ -4862,7 +4858,7 @@ <translation id="783214144752121388">禁止網站執行 Flash (建議)</translation> <translation id="7833720883933317473">已儲存的自訂字詞將會在這裡顯示</translation> <translation id="7835178595033117206">移除咗書籤</translation> -<translation id="7836850009646241041">請再次輕觸你的安全金鑰</translation> +<translation id="7836850009646241041">請嘗試再次輕觸安全密鑰</translation> <translation id="7837776265184002579">您的首頁已變更為 <ph name="URL" />。</translation> <translation id="7839051173341654115">查看/備份媒體</translation> <translation id="7839192898639727867">憑證主體金鑰識別碼</translation> @@ -5177,9 +5173,9 @@ <translation id="8260864402787962391">滑鼠</translation> <translation id="8261378640211443080">這個擴充功能未列在 <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> 中,可能是在您不知情的情況下加入瀏覽器。</translation> <translation id="8261506727792406068">刪除</translation> -<translation id="8263336784344783289">為這個群組命名</translation> +<translation id="8263336784344783289">為此群組命名</translation> <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" /> 已停用滑鼠游標。</translation> -<translation id="8264024885325823677">這項設定是由系統管理員管理。</translation> +<translation id="8264024885325823677">此設定由管理員管理。</translation> <translation id="8264718194193514834">「<ph name="EXTENSION_NAME" />」啟用了全螢幕。</translation> <translation id="8267961145111171918"><ph name="BEGIN_PARAGRAPH1" />這是裝置的一般資料和使用情况 (例如電量、系統及應用程式活動,以及發生的錯誤)。這些資料將會用來改善 Android。部分彙整資料還能協助 Google 應用程式和合作夥伴 (例如 Android 開發人員) 改良應用程式和產品。<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />即使關閉此功能,您的裝置仍然可以傳送基本服務 (例如系統更新與安全性) 所需的資料。<ph name="END_PARAGRAPH2" /> @@ -5435,7 +5431,7 @@ <translation id="8650543407998814195">您無法再存取舊設定檔,但可將其移除。</translation> <translation id="8651585100578802546">強制重新載入這個網頁</translation> <translation id="8652400352452647993">封裝擴充程式錯誤</translation> -<translation id="8653578191563425126">要保留給 Crostini 的磁碟空間 (你之後可以變更這項設定)。</translation> +<translation id="8653578191563425126">要保留給 Crostini 的磁碟空間 (您稍後可變更此設定)。</translation> <translation id="8654151524613148204">抱歉,檔案過大,您的裝置無法處理。</translation> <translation id="8655295600908251630">版本</translation> <translation id="8655319619291175901">糟糕,發生錯誤。</translation> @@ -5552,7 +5548,6 @@ <translation id="8794025342371547160">受限制的 IP</translation> <translation id="879413103056696865">開啟熱點時,您的 <ph name="PHONE_NAME" /> 將會:</translation> <translation id="8795916974678578410">開啟新視窗</translation> -<translation id="8797086401386164142">在列印伺服器上找到 <ph name="NUM_PRINTERS" /> 台印表機。</translation> <translation id="8797459392481275117">永不翻譯此網站的內容</translation> <translation id="8798099450830957504">預設</translation> <translation id="8798441408945964110">供應商名稱</translation> @@ -5701,7 +5696,7 @@ <translation id="8985264973231822211">曾於 <ph name="DEVICE_LAST_ACTIVATED_TIME" /> 天前在線</translation> <translation id="8986362086234534611">清除</translation> <translation id="8986494364107987395">自動將使用統計資料和當機報告傳送給 Google</translation> -<translation id="8986651757229422279">這會清除 <ph name="ORIGIN_NAME" /> 儲存的所有資料和 Cookie,以及該網站所安裝的應用程式。</translation> +<translation id="8986651757229422279">此操作會清除 <ph name="ORIGIN_NAME" /> 儲存的所有資料和 Cookie,以及該網站所安裝的應用程式。</translation> <translation id="8987927404178983737">月</translation> <translation id="8991520179165052608">網站可以使用您的麥克風</translation> <translation id="899403249577094719">Netscape 憑證基底網址</translation> @@ -5853,7 +5848,7 @@ <translation id="932508678520956232">無法初始化列印操作。</translation> <translation id="93343527085570547">如基於法律原因提出內容變更要求,請前往<ph name="BEGIN_LINK1" />「法律說明」頁面<ph name="END_LINK1" />。系統會將部分帳戶和系統資料傳送給 Google。我們將根據您提供的資料解決技術問題,並優化我們的服務。使用這些資料時,我們會遵守《<ph name="BEGIN_LINK2" />私隱權政策<ph name="END_LINK2" />》和《<ph name="BEGIN_LINK3" />服務條款<ph name="END_LINK3" />》。</translation> <translation id="93393615658292258">只限密碼</translation> -<translation id="934244546219308557">為這個群組命名</translation> +<translation id="934244546219308557">為此群組命名</translation> <translation id="934503638756687833">視乎情況,在此未有列出的項目也會一併移除。有關<a href="<ph name="URL" />">垃圾軟件防護</a>的詳情,請參閱 Chrome 私隱權白皮書。</translation> <translation id="935490618240037774">您的書籤、記錄、密碼及其他設定將會同步至您的 Google 帳戶,讓您可以在所有裝置上使用。</translation> <translation id="935854577147268200">Smart Lock 手機已變更,請輸入密碼以更新 Smart Lock。下次您便可使用手機來解鎖 <ph name="DEVICE_TYPE" />。您可在「設定」中停用 Smart Lock。</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb index 93accef..ff8aba4 100644 --- a/chrome/app/resources/generated_resources_zh-TW.xtb +++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">正在載入預覽畫面</translation> <translation id="1032605640136438169">請詳閱新版條款</translation> <translation id="103279545524624934">請釋出磁碟空間以啟動 Android 應用程式。</translation> -<translation id="1033343386521881354">在列印伺服器上找到 1 台印表機。</translation> <translation id="1033780634303702874">存取你的序列裝置</translation> <translation id="1034942643314881546">啟用 ADB 以建立應用程式圖例</translation> <translation id="1036348656032585052">關閉</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">按下 |<ph name="ACCELERATOR" />| 即可結束全螢幕模式</translation> <translation id="1038168778161626396">只有 Encipher</translation> <translation id="1039337018183941703">檔案無效或毀損</translation> -<translation id="1039850285407663109">你選取了一個不明檔案,其中可能含有危險內容。建議你在開啟這個檔案前先進行掃描。</translation> <translation id="1041175011127912238">這個網頁沒有回應</translation> <translation id="1041263367839475438">可用的裝置</translation> <translation id="1042174272890264476">你的電腦也內建了 <ph name="SHORT_PRODUCT_NAME" /> 的 RLZ 程式庫。RLZ 可指定非重複、非個人的可辨識標記,以評估特定宣傳廣告活動所提升的搜尋數與 <ph name="SHORT_PRODUCT_NAME" /> 使用量。這些標籤有時也會顯示在 <ph name="PRODUCT_NAME" /> 的 Google 搜尋查詢中。</translation> @@ -153,7 +151,7 @@ <translation id="1197979282329025000">擷取 <ph name="PRINTER_NAME" /> 的印表機功能狀態時發生錯誤,無法向 <ph name="CLOUD_PRINT_NAME" /> 註冊該印表機。</translation> <translation id="119944043368869598">全部清除</translation> <translation id="1201402288615127009">繼續</translation> -<translation id="1202556750060561551"><ph name="SITE_GROUP_NAME" /> 儲存的所有資料和 Cookie、包含的所有網站,以及該群組所安裝的應用程式都將遭到清除。</translation> +<translation id="1202556750060561551"><ph name="SITE_GROUP_NAME" /> 儲存的所有資料和 Cookie、所包含的網站,以及所安裝的應用程式都將遭到清除。</translation> <translation id="1202596434010270079">Kiosk 應用程式已更新,請移除 USB 隨身碟。</translation> <translation id="120368089816228251">音符</translation> <translation id="1205489148908752564">讀取及變更使用者許可清單</translation> @@ -284,7 +282,7 @@ <translation id="1393787139683794508">這會清除 <ph name="ORIGIN_NAME" /> 儲存的所有資料和 Cookie。</translation> <translation id="1395730723686586365">更新程式已啟動</translation> <translation id="1396139853388185343">設定印表機時發生錯誤</translation> -<translation id="1396259464226642517">這不是你預期的結果嗎?<ph name="BEGIN_LINK" />提供意見<ph name="END_LINK" /></translation> +<translation id="1396259464226642517">這並非預期結果嗎?<ph name="BEGIN_LINK" />提供意見<ph name="END_LINK" /></translation> <translation id="1396963298126346194">你輸入的使用者名稱和密碼不相符</translation> <translation id="1397500194120344683">沒有適用裝置。<ph name="LINK_BEGIN" />瞭解詳情<ph name="LINK_END" /></translation> <translation id="1398853756734560583">放到最大</translation> @@ -639,7 +637,6 @@ <translation id="1858585891038687145">信任這個用於識別軟體製造商的憑證</translation> <translation id="1861262398884155592">這個資料夾是空的</translation> <translation id="1863182668524159459">找不到序列埠</translation> -<translation id="1863552924692672565">「<ph name="FILE_NAME" />」是不明檔案。建議你掃描這個檔案,盡可能降低風險。</translation> <translation id="1864111464094315414">登入</translation> <translation id="1864400682872660285">冷色調</translation> <translation id="1864454756846565995">USB-C 裝置 (背面連接埠)</translation> @@ -992,7 +989,7 @@ <translation id="2353297238722298836">可使用攝影機和麥克風</translation> <translation id="2356070529366658676">詢問</translation> <translation id="2357330829548294574">移除「<ph name="USER_NAME" />」</translation> -<translation id="235798134753548762">系統會同步處理你的應用程式、設定和 Wi‑Fi 偏好設定。你隨時可以前往「設定」變更這些設定。</translation> +<translation id="235798134753548762">系統會同步處理你的應用程式、設定和 Wi‑Fi 偏好設定。設定後,你隨時可以前往「設定」進行變更。</translation> <translation id="2359345697448000899">如要管理擴充功能,只要按一下 [工具] 選單裡的 [擴充功能] 即可。</translation> <translation id="2359808026110333948">繼續</translation> <translation id="236117173274098341">最佳化</translation> @@ -1700,7 +1697,7 @@ <translation id="3348038390189153836">偵測到卸除式裝置</translation> <translation id="3349933790966648062">記憶體使用量</translation> <translation id="3350117557200012647">進入配對模式</translation> -<translation id="3350244554415289209">網站必須先詢問你,才能存取攝影機位置或對應你的房間 (建議)</translation> +<translation id="3350244554415289209">網站必須先詢問你,才能存取攝影機位置或對應你的房間 (建議設定)</translation> <translation id="3355936511340229503">連線錯誤</translation> <translation id="3356580349448036450">完成</translation> <translation id="3359256513598016054">憑證原則限制</translation> @@ -2518,7 +2515,7 @@ <translation id="4508051413094283164">在無痕式視窗中開啟所有書籤</translation> <translation id="4508265954913339219">啟用失敗</translation> <translation id="4508765956121923607">檢視原始碼(&O)</translation> -<translation id="4510614391273086606">系統正在將 Linux 檔案和應用程式還原至備份狀態。</translation> +<translation id="4510614391273086606">系統正在將 Linux 檔案和應用程式還原到當初所備份的狀態。</translation> <translation id="451407183922382411">技術提供:<ph name="COMPANY_NAME" /></translation> <translation id="4514610446763173167">在播放和暫停影片之間切換</translation> <translation id="451515744433878153">移除</translation> @@ -4023,7 +4020,6 @@ <translation id="6678717876183468697">查詢網址</translation> <translation id="6680442031740878064">可用空間:<ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">語速</translation> -<translation id="6681301928961274620">在列印伺服器上找不到任何印表機。</translation> <translation id="6681668084120808868">拍照</translation> <translation id="6681964764822470072">系統會解除安裝「<ph name="APP_NAME" />」。</translation> <translation id="668599234725812620">開啟 Google Play</translation> @@ -4561,7 +4557,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{在新視窗中開啟所有書籤(&N)}=1{在新視窗中開啟(&N)}other{在新視窗中開啟全部 # 個書籤(&N)}}</translation> <translation id="7434509671034404296">開發人員選項</translation> <translation id="7434635829372401939">同步處理你的設定</translation> -<translation id="7434969625063495310">無法新增列印伺服器。請檢查伺服器的設定,然後再試一次。</translation> +<translation id="7434969625063495310">無法新增列印伺服器。請檢查伺服器設定,然後再試一次。</translation> <translation id="7436921188514130341">糟糕!重新命名過程中發生錯誤。</translation> <translation id="7438976808740265764">2020 年 12 月之後,系統將停止支援 Flash Player。</translation> <translation id="7441736921018636843">如要變更這項設定,請<ph name="BEGIN_LINK" />重設同步處理功能<ph name="END_LINK" />以移除同步處理通關密語</translation> @@ -4862,7 +4858,7 @@ <translation id="783214144752121388">禁止網站執行 Flash (建議)</translation> <translation id="7833720883933317473">你所儲存的自訂字詞會顯示在這裡</translation> <translation id="7835178595033117206">已移除書籤</translation> -<translation id="7836850009646241041">請再次輕觸你的安全金鑰</translation> +<translation id="7836850009646241041">請再次觸碰你的安全金鑰</translation> <translation id="7837776265184002579">你的首頁已變更為 <ph name="URL" />。</translation> <translation id="7839051173341654115">查看/備份媒體</translation> <translation id="7839192898639727867">憑證主體金鑰識別碼</translation> @@ -5552,7 +5548,6 @@ <translation id="8794025342371547160">受限 IP</translation> <translation id="879413103056696865">無線基地台開啟時,你的「<ph name="PHONE_NAME" />」會:</translation> <translation id="8795916974678578410">開新視窗</translation> -<translation id="8797086401386164142">在列印伺服器上找到 <ph name="NUM_PRINTERS" /> 台印表機。</translation> <translation id="8797459392481275117">一律不翻譯這個網站的內容</translation> <translation id="8798099450830957504">預設</translation> <translation id="8798441408945964110">提供者名稱</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb index a3721fb5..faa410a 100644 --- a/chrome/app/resources/generated_resources_zu.xtb +++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -26,7 +26,6 @@ <translation id="1031362278801463162">Ilayisha ukubuka kuqala</translation> <translation id="1032605640136438169">Sicela ubuyekeze imigomo emisha</translation> <translation id="103279545524624934">Khulula isikhala sediksi ukuze uqalise izinhlelo zokusebenza ze-Android.</translation> -<translation id="1033343386521881354">Kutholakele iphrinti engu-1 kusuka kuseva yokuphrinta.</translation> <translation id="1033780634303702874">Finyelela amadivayisi wakho womkhiqizo</translation> <translation id="1034942643314881546">Ukunika amandla i-adb ukuze udale ukubonisa izinhlelo zokusebenza</translation> <translation id="1036348656032585052">Vala</translation> @@ -34,7 +33,6 @@ <translation id="1036982837258183574">Cindezela |<ph name="ACCELERATOR" />| ukuze uphume kusikrini esigcwele</translation> <translation id="1038168778161626396">I-encipher kuphela</translation> <translation id="1039337018183941703">Ifayela elingavumelekile noma elimoshekile</translation> -<translation id="1039850285407663109">Ifayela elikhethiwe alaziwa futhi lingaba ingozi. Cabanga ukuskena ngaphambi kokuvula leli fayela.</translation> <translation id="1041175011127912238">Ikhasi aliphenduli</translation> <translation id="1041263367839475438">Amadivayisi atholakalayo</translation> <translation id="1042174272890264476">Ikhompyutha yakho iphinda ize nelabhulali ye-<ph name="SHORT_PRODUCT_NAME" /> RLZ eyakhelwe ngaphakathi. I-RLZ ifakela umaka ongakhombi isiqu somuntu, esingahlukile ukuze kulinganiswe usesho nokusetshenziswa kwe-<ph name="SHORT_PRODUCT_NAME" /> okuhlolwa ngumkhankaso othile wokuphromotha. Lawa malebula kwesinye isikhathi avela kumibuzo ye-Usesho lwe-Google ku-<ph name="PRODUCT_NAME" />.</translation> @@ -637,7 +635,6 @@ <translation id="1858585891038687145">Themba lesi sitifiketi ukuze sikhombe omaka besofthiwe</translation> <translation id="1861262398884155592">Le folda ayinalutho</translation> <translation id="1863182668524159459">Azikho izimbobo ze-serial ezitholiwe</translation> -<translation id="1863552924692672565">I-<ph name="FILE_NAME" /> ayaziwa. Skena ifayela ukuze unciphise ingcuphe.</translation> <translation id="1864111464094315414">Ngena ngemvume</translation> <translation id="1864400682872660285">Kupholile</translation> <translation id="1864454756846565995">Idivayisi ye-USB-C (imbobo esemuva)</translation> @@ -4025,7 +4022,6 @@ <translation id="6678717876183468697">I-URL yombuzo</translation> <translation id="6680442031740878064">Otholakalayo: <ph name="AVAILABLE_SPACE" /></translation> <translation id="6680650203439190394">Linganisela</translation> -<translation id="6681301928961274620">Ayitholanga amaphrinta kusuka kuseva yokuphrinta.</translation> <translation id="6681668084120808868">Thatha isithombe</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" izokhishwa.</translation> <translation id="668599234725812620">Vula i-Google Play</translation> @@ -5554,7 +5550,6 @@ <translation id="8794025342371547160">Ikheli lasesizindeni se-inthanethi elikhawulelwe</translation> <translation id="879413103056696865">Ngenkathi i-hotspot ivulekile, i-<ph name="PHONE_NAME" /> yakho izokwazi:</translation> <translation id="8795916974678578410">Iwindi elisha</translation> -<translation id="8797086401386164142">Kutholwe amaphrinta angu-<ph name="NUM_PRINTERS" /> kusuka kuphrinta yeseva.</translation> <translation id="8797459392481275117">Ungalokothi uhumushe leli sayithi</translation> <translation id="8798099450830957504">Okuzenzakalelayo</translation> <translation id="8798441408945964110">Igama lomhlinzeki</translation>
diff --git a/chrome/app/resources/locale_settings.grd b/chrome/app/resources/locale_settings.grd index 5c6c1bf8..a988f9f1 100644 --- a/chrome/app/resources/locale_settings.grd +++ b/chrome/app/resources/locale_settings.grd
@@ -30,6 +30,7 @@ <output filename="locale_settings_sq.pak" type="data_package" lang="sq" /> <output filename="locale_settings_ur.pak" type="data_package" lang="ur" /> <output filename="locale_settings_uz.pak" type="data_package" lang="uz" /> + <output filename="locale_settings_zh-HK.pak" type="data_package" lang="zh-HK" /> <output filename="locale_settings_zu.pak" type="data_package" lang="zu" /> </if> <output filename="locale_settings_am.pak" type="data_package" lang="am" />
diff --git a/chrome/app/resources/locale_settings_linux.grd b/chrome/app/resources/locale_settings_linux.grd index c02b5838..b9fb7e7 100644 --- a/chrome/app/resources/locale_settings_linux.grd +++ b/chrome/app/resources/locale_settings_linux.grd
@@ -30,6 +30,7 @@ <output filename="platform_locale_settings_sq.pak" type="data_package" lang="sq" /> <output filename="platform_locale_settings_ur.pak" type="data_package" lang="ur" /> <output filename="platform_locale_settings_uz.pak" type="data_package" lang="uz" /> + <output filename="platform_locale_settings_zh-HK.pak" type="data_package" lang="zh-HK" /> <output filename="platform_locale_settings_zu.pak" type="data_package" lang="zu" /> </if> <output filename="platform_locale_settings_am.pak" type="data_package" lang="am" />
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index aa77704..f9a962d 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -55,9 +55,9 @@ "cryptui.lib", "dwmapi.lib", "netapi32.lib", - "ndfapi.lib", # Used by browser/net/net_error_diagnostics_dialog_win.h - "pdh.lib", # Used by browser/private_working_set_snapshot.h - "wbemuuid.lib", # Used by browser/metrics/antivirus_metrics_provider_win.cc + "ndfapi.lib", # For browser/net/net_error_diagnostics_dialog_win.h + "pdh.lib", # For browser/private_working_set_snapshot.h + "wbemuuid.lib", # For browser/metrics/antivirus_metrics_provider_win.cc ] ldflags = [ "/DELAYLOAD:ndfapi.dll", @@ -1322,6 +1322,10 @@ "prerender/isolated/isolated_prerender_params.h", "prerender/isolated/isolated_prerender_proxy_configurator.cc", "prerender/isolated/isolated_prerender_proxy_configurator.h", + "prerender/isolated/isolated_prerender_service.cc", + "prerender/isolated/isolated_prerender_service.h", + "prerender/isolated/isolated_prerender_service_factory.cc", + "prerender/isolated/isolated_prerender_service_factory.h", "prerender/isolated/isolated_prerender_tab_helper.cc", "prerender/isolated/isolated_prerender_tab_helper.h", "prerender/isolated/isolated_prerender_url_loader.cc", @@ -2973,7 +2977,7 @@ "//components/payments/content/android", "//components/resources:components_resources", "//components/send_tab_to_self", - "//components/signin/internal/identity_manager", # see android/signin/DEPS + "//components/signin/internal/identity_manager", # cf android/signin/DEPS "//media/mojo/clients", "//rlz:rlz_utils", "//sandbox", @@ -3560,7 +3564,9 @@ "signin/signin_promo.h", "signin/signin_ui_util.cc", "signin/signin_ui_util.h", - "speech/extension_api/tts_extension_api_constants.cc", # Should be moved to extensions section? + "speech/extension_api/tts_extension_api_constants.cc", # Should be moved + # to extensions + # section? "speech/extension_api/tts_extension_api_constants.h", "ssl/ssl_client_auth_observer.cc", "ssl/ssl_client_auth_observer.h", @@ -5202,10 +5208,6 @@ "supervised_user/child_accounts/kids_management_api.h", "supervised_user/child_accounts/permission_request_creator_apiary.cc", "supervised_user/child_accounts/permission_request_creator_apiary.h", - "supervised_user/experimental/supervised_user_blacklist.cc", - "supervised_user/experimental/supervised_user_blacklist.h", - "supervised_user/experimental/supervised_user_filtering_switches.cc", - "supervised_user/experimental/supervised_user_filtering_switches.h", "supervised_user/kids_chrome_management/kids_chrome_management_client.cc", "supervised_user/kids_chrome_management/kids_chrome_management_client.h", "supervised_user/kids_chrome_management/kids_chrome_management_client_factory.cc", @@ -5213,10 +5215,14 @@ "supervised_user/kids_management_url_checker_client.cc", "supervised_user/kids_management_url_checker_client.h", "supervised_user/permission_request_creator.h", + "supervised_user/supervised_user_blacklist.cc", + "supervised_user/supervised_user_blacklist.h", "supervised_user/supervised_user_constants.cc", "supervised_user/supervised_user_constants.h", "supervised_user/supervised_user_features.cc", "supervised_user/supervised_user_features.h", + "supervised_user/supervised_user_filtering_switches.cc", + "supervised_user/supervised_user_filtering_switches.h", "supervised_user/supervised_user_google_auth_navigation_throttle.cc", "supervised_user/supervised_user_google_auth_navigation_throttle.h", "supervised_user/supervised_user_interstitial.cc",
diff --git a/chrome/browser/android/vr/BUILD.gn b/chrome/browser/android/vr/BUILD.gn index 12e2ddb..5e17022c 100644 --- a/chrome/browser/android/vr/BUILD.gn +++ b/chrome/browser/android/vr/BUILD.gn
@@ -249,6 +249,7 @@ "//testing/android/native_test:native_test_native_code", "//testing/gmock", "//testing/gtest", - "//ui/android:ui_java", # TODO: Remove once http://crbug.com/951419 is fixed! + "//ui/android:ui_java", # TODO: Remove once http://crbug.com/951419 is + # fixed! ] }
diff --git a/chrome/browser/android/vr/arcore_device/arcore_gl.cc b/chrome/browser/android/vr/arcore_device/arcore_gl.cc index 910555f2..a97cc693 100644 --- a/chrome/browser/android/vr/arcore_device/arcore_gl.cc +++ b/chrome/browser/android/vr/arcore_device/arcore_gl.cc
@@ -17,6 +17,7 @@ #include "base/metrics/histogram_macros.h" #include "base/task/post_task.h" #include "base/threading/thread_task_runner_handle.h" +#include "base/time/time.h" #include "base/trace_event/trace_event.h" #include "base/trace_event/traced_value.h" #include "chrome/browser/android/vr/arcore_device/ar_image_transport.h" @@ -889,10 +890,11 @@ // inverse of the projection matrix. Z coordinate of -1 means the point will // be projected onto the projection matrix near plane. See also // third_party/blink/renderer/modules/xr/xr_view.cc's UnprojectPointer. - gfx::Point3F touch_point( - screen_last_touch_.x() / transfer_size_.width() * 2.f - 1.f, - (1.f - screen_last_touch_.y() / transfer_size_.height()) * 2.f - 1.f, - -1.f); + const float x_normalized = + screen_last_touch_.x() / transfer_size_.width() * 2.f - 1.f; + const float y_normalized = + (1.f - screen_last_touch_.y() / transfer_size_.height()) * 2.f - 1.f; + gfx::Point3F touch_point(x_normalized, y_normalized, -1.f); DVLOG(3) << __func__ << ": touch_point=" << touch_point.ToString(); inverse_projection_.TransformPoint(&touch_point); DVLOG(3) << __func__ << ": unprojected=" << touch_point.ToString(); @@ -927,6 +929,25 @@ state->description->input_from_pointer = viewer_from_pointer; + // Create the gamepad object and modify necessary fields. + state->gamepad = device::Gamepad{}; + state->gamepad->connected = true; + state->gamepad->id[0] = '\0'; + state->gamepad->timestamp = + base::TimeTicks::Now().since_origin().InMicroseconds(); + + state->gamepad->axes_length = 2; + state->gamepad->axes[0] = x_normalized; + state->gamepad->axes[1] = -y_normalized; // Gamepad's Y axis is actually + // inverted (1.0 means "backward"). + + state->gamepad->buttons_length = 3; // 2 placeholders + the real one + // Default-constructed buttons are already valid placeholders. + state->gamepad->buttons[2].touched = true; + state->gamepad->buttons[2].value = 1.0; + state->gamepad->mapping = device::GamepadMapping::kNone; + state->gamepad->hand = device::GamepadHand::kNone; + return state; }
diff --git a/chrome/browser/chromeos/child_accounts/child_status_reporting_service.cc b/chrome/browser/chromeos/child_accounts/child_status_reporting_service.cc index eb0f30a2..389a13e 100644 --- a/chrome/browser/chromeos/child_accounts/child_status_reporting_service.cc +++ b/chrome/browser/chromeos/child_accounts/child_status_reporting_service.cc
@@ -86,6 +86,7 @@ client, std::make_unique<policy::ChildStatusCollector>( pref_change_registrar_->prefs(), + Profile::FromBrowserContext(context_), system::StatisticsProvider::GetInstance(), policy::ChildStatusCollector::AndroidStatusFetcher(), day_reset_time_),
diff --git a/chrome/browser/chromeos/extensions/wallpaper_function_base.cc b/chrome/browser/chromeos/extensions/wallpaper_function_base.cc index c0ec2da..98f083c 100644 --- a/chrome/browser/chromeos/extensions/wallpaper_function_base.cc +++ b/chrome/browser/chromeos/extensions/wallpaper_function_base.cc
@@ -8,7 +8,7 @@ #include "base/metrics/histogram_macros.h" #include "base/stl_util.h" #include "base/synchronization/atomic_flag.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include "base/task/task_traits.h" #include "chrome/browser/image_decoder/image_decoder.h" #include "chrome/grit/generated_resources.h" @@ -33,16 +33,14 @@ const int kWallpaperLayoutCount = base::size(kWallpaperLayoutArrays); -base::LazySequencedTaskRunner g_blocking_task_runner = - LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER( - base::TaskTraits(base::ThreadPool(), - base::MayBlock(), +base::LazyThreadPoolSequencedTaskRunner g_blocking_task_runner = + LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER( + base::TaskTraits(base::MayBlock(), base::TaskPriority::USER_BLOCKING, base::TaskShutdownBehavior::BLOCK_SHUTDOWN)); -base::LazySequencedTaskRunner g_non_blocking_task_runner = - LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER( - base::TaskTraits(base::ThreadPool(), - base::MayBlock(), +base::LazyThreadPoolSequencedTaskRunner g_non_blocking_task_runner = + LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER( + base::TaskTraits(base::MayBlock(), base::TaskPriority::USER_VISIBLE, base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN));
diff --git a/chrome/browser/chromeos/policy/status_collector/child_status_collector.cc b/chrome/browser/chromeos/policy/status_collector/child_status_collector.cc index 6d9abbc..93aaa1e 100644 --- a/chrome/browser/chromeos/policy/status_collector/child_status_collector.cc +++ b/chrome/browser/chromeos/policy/status_collector/child_status_collector.cc
@@ -29,12 +29,10 @@ #include "base/threading/sequenced_task_runner_handle.h" #include "base/values.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/chromeos/login/users/chrome_user_manager.h" #include "chrome/browser/chromeos/policy/status_collector/child_activity_storage.h" #include "chrome/browser/chromeos/policy/status_collector/status_collector_state.h" -#include "chrome/browser/chromeos/profiles/profile_helper.h" #include "chrome/browser/chromeos/settings/cros_settings.h" -#include "chrome/browser/profiles/profile_manager.h" +#include "chrome/browser/profiles/profile.h" #include "chrome/common/chrome_features.h" #include "chrome/common/pref_names.h" #include "chromeos/dbus/util/version_loader.h" @@ -50,9 +48,6 @@ #include "components/policy/proto/device_management_backend.pb.h" #include "components/prefs/pref_service.h" #include "components/prefs/scoped_user_pref_update.h" -#include "components/user_manager/user.h" -#include "components/user_manager/user_manager.h" -#include "components/user_manager/user_type.h" #include "content/public/browser/browser_thread.h" #include "third_party/cros_system_api/dbus/service_constants.h" @@ -121,12 +116,15 @@ ChildStatusCollector::ChildStatusCollector( PrefService* pref_service, + Profile* profile, chromeos::system::StatisticsProvider* provider, const AndroidStatusFetcher& android_status_fetcher, TimeDelta activity_day_start) : StatusCollector(provider, chromeos::CrosSettings::Get()), pref_service_(pref_service), + profile_(profile), android_status_fetcher_(android_status_fetcher) { + DCHECK(profile_); // protected fields of `StatusCollector`. max_stored_past_activity_interval_ = kMaxStoredPastActivityInterval; max_stored_future_activity_interval_ = kMaxStoredFutureActivityInterval; @@ -203,6 +201,24 @@ &report_boot_mode_); } +void ChildStatusCollector::OnAppActivityReportSubmitted() { + if (!chromeos::app_time::AppActivityReportInterface:: + ShouldReportAppActivity()) { + return; + } + + DCHECK(last_report_params_); + if (last_report_params_->anything_reported) { + chromeos::app_time::AppActivityReportInterface* app_activity_reporting = + chromeos::app_time::AppActivityReportInterface::Get(profile_); + DCHECK(app_activity_reporting); + app_activity_reporting->AppActivityReportSubmitted( + last_report_params_->generation_time); + } + + last_report_params_.reset(); +} + void ChildStatusCollector::OnUsageTimeStateChange( chromeos::UsageTimeStateNotifier::UsageTimeState state) { UpdateChildUsageTime(); @@ -272,6 +288,22 @@ return anything_reported; } +bool ChildStatusCollector::GetAppActivity( + em::ChildStatusReportRequest* status) { + if (!chromeos::app_time::AppActivityReportInterface:: + ShouldReportAppActivity()) { + return false; + } + + const chromeos::app_time::AppActivityReportInterface* app_activity_reporting = + chromeos::app_time::AppActivityReportInterface::Get(profile_); + DCHECK(app_activity_reporting); + + last_report_params_ = + app_activity_reporting->GenerateAppActivityReport(status); + return last_report_params_->anything_reported; +} + bool ChildStatusCollector::GetVersionInfo( em::ChildStatusReportRequest* status) { status->set_os_version(os_version_); @@ -300,13 +332,7 @@ bool ChildStatusCollector::FillUserSpecificFields( scoped_refptr<ChildStatusCollectorState> state, - em::ChildStatusReportRequest* status, - const user_manager::User* user) { - Profile* const profile = - chromeos::ProfileHelper::Get()->GetProfileByUser(user); - if (!profile) - return false; - + em::ChildStatusReportRequest* status) { // Time zone. const std::string current_timezone = base::UTF16ToUTF8(chromeos::system::TimezoneSettings::GetInstance() @@ -315,12 +341,11 @@ // Android status. const bool report_android_status = - profile->GetPrefs()->GetBoolean(prefs::kReportArcStatusEnabled); + profile_->GetPrefs()->GetBoolean(prefs::kReportArcStatusEnabled); if (report_android_status) GetAndroidStatus(state); - if (!user->IsDeviceLocalAccount()) - status->set_user_dm_token(GetDMTokenForProfile(profile)); + status->set_user_dm_token(GetDMTokenForProfile(profile_)); // At least time zone is always reported. return true; @@ -337,16 +362,13 @@ state->response_params().child_status.get(); bool anything_reported = false; - user_manager::UserManager* user_manager = user_manager::UserManager::Get(); - const user_manager::User* const primary_user = user_manager->GetPrimaryUser(); - DCHECK(primary_user != nullptr); - - anything_reported |= FillUserSpecificFields(state, status, primary_user); + anything_reported |= FillUserSpecificFields(state, status); if (report_version_info_) anything_reported |= GetVersionInfo(status); anything_reported |= GetActivityTimes(status); + anything_reported |= GetAppActivity(status); if (report_boot_mode_) { base::Optional<std::string> boot_mode = @@ -366,6 +388,7 @@ activity_storage_->TrimActivityPeriods(last_reported_day_, duration_for_last_reported_day_, std::numeric_limits<int64_t>::max()); + OnAppActivityReportSubmitted(); } bool ChildStatusCollector::ShouldReportActivityTimes() const {
diff --git a/chrome/browser/chromeos/policy/status_collector/child_status_collector.h b/chrome/browser/chromeos/policy/status_collector/child_status_collector.h index acf60270..46431ef 100644 --- a/chrome/browser/chromeos/policy/status_collector/child_status_collector.h +++ b/chrome/browser/chromeos/policy/status_collector/child_status_collector.h
@@ -16,23 +16,23 @@ #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" +#include "base/optional.h" #include "base/sequenced_task_runner.h" #include "base/time/time.h" #include "base/timer/timer.h" +#include "chrome/browser/chromeos/child_accounts/time_limits/app_activity_report_interface.h" #include "chrome/browser/chromeos/child_accounts/usage_time_state_notifier.h" #include "chrome/browser/chromeos/policy/status_collector/status_collector.h" #include "components/policy/proto/device_management_backend.pb.h" +class Profile; + namespace chromeos { namespace system { class StatisticsProvider; } } // namespace chromeos -namespace user_manager { -class User; -} - class PrefService; namespace policy { @@ -66,6 +66,7 @@ // activity reporting daily data aggregation. It is represented by the // distance from midnight. ChildStatusCollector(PrefService* pref_service, + Profile* profile, chromeos::system::StatisticsProvider* provider, const AndroidStatusFetcher& android_status_fetcher, base::TimeDelta activity_day_start); @@ -103,14 +104,14 @@ // session (i.e. it is not device data). bool FillUserSpecificFields( scoped_refptr<ChildStatusCollectorState> state, - enterprise_management::ChildStatusReportRequest* status, - const user_manager::User* user); + enterprise_management::ChildStatusReportRequest* status); // Helpers for the various portions of child status report. Return true if // they actually report any status. Functions that queue async queries take a // |ChildStatusCollectorState| instance. bool GetActivityTimes( enterprise_management::ChildStatusReportRequest* status); + bool GetAppActivity(enterprise_management::ChildStatusReportRequest* status); bool GetVersionInfo(enterprise_management::ChildStatusReportRequest* status); // Queues async queries! bool GetAndroidStatus(const scoped_refptr<ChildStatusCollectorState>& state); @@ -118,9 +119,16 @@ // Update the cached values of the reporting settings. void UpdateReportingSettings(); + // Called to update the stored app activity data, after the report with app + // activity was submitted. + void OnAppActivityReportSubmitted(); + // Mainly used to store activity periods for reporting. Not owned. PrefService* const pref_service_; + // Profile of the user that the status is collected for. + Profile* const profile_; + // The last time an active state check was performed. base::Time last_active_check_; @@ -135,6 +143,10 @@ int64_t last_reported_day_ = 0; int duration_for_last_reported_day_ = 0; + // The parameters associated with last app activity report. + base::Optional<chromeos::app_time::AppActivityReportInterface::ReportParams> + last_report_params_; + base::RepeatingTimer update_child_usage_timer_; std::string os_version_;
diff --git a/chrome/browser/chromeos/policy/status_collector/child_status_collector_browsertest.cc b/chrome/browser/chromeos/policy/status_collector/child_status_collector_browsertest.cc index e8f1bc7..81f2a9c 100644 --- a/chrome/browser/chromeos/policy/status_collector/child_status_collector_browsertest.cc +++ b/chrome/browser/chromeos/policy/status_collector/child_status_collector_browsertest.cc
@@ -12,24 +12,35 @@ #include "base/bind.h" #include "base/environment.h" +#include "base/feature_list.h" #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "base/system/sys_info.h" +#include "base/test/scoped_feature_list.h" #include "base/test/scoped_path_override.h" #include "base/threading/thread_task_runner_handle.h" +#include "base/time/time.h" #include "chrome/browser/chrome_content_browser_client.h" +#include "chrome/browser/chromeos/child_accounts/child_user_service.h" +#include "chrome/browser/chromeos/child_accounts/child_user_service_factory.h" +#include "chrome/browser/chromeos/child_accounts/time_limits/app_activity_registry.h" +#include "chrome/browser/chromeos/child_accounts/time_limits/app_time_controller.h" +#include "chrome/browser/chromeos/child_accounts/time_limits/app_types.h" #include "chrome/browser/chromeos/login/users/mock_user_manager.h" #include "chrome/browser/chromeos/ownership/fake_owner_settings_service.h" #include "chrome/browser/chromeos/policy/status_collector/child_status_collector.h" #include "chrome/browser/chromeos/profiles/profile_helper.h" #include "chrome/browser/chromeos/settings/scoped_testing_cros_settings.h" #include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h" +#include "chrome/browser/profiles/profile.h" #include "chrome/common/chrome_content_client.h" +#include "chrome/common/chrome_features.h" #include "chrome/common/chrome_paths.h" #include "chrome/common/pref_names.h" +#include "chrome/services/app_service/public/mojom/types.mojom.h" #include "chrome/test/base/chrome_unit_test_suite.h" #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile_manager.h" @@ -94,11 +105,13 @@ public: TestingChildStatusCollector( PrefService* pref_service, + Profile* profile, chromeos::system::StatisticsProvider* provider, const policy::StatusCollector::AndroidStatusFetcher& android_status_fetcher, TimeDelta activity_day_start) : policy::ChildStatusCollector(pref_service, + profile, provider, android_status_fetcher, activity_day_start) { @@ -234,11 +247,20 @@ } void SetUp() override { + scoped_feature_list_.InitWithFeatures( + /* enabled_features */ {{features::kPerAppTimeLimits, + features::kAppActivityReporting}}, + /* disabled_features */ {{}}); + RestartStatusCollector(base::BindRepeating(&GetEmptyAndroidStatus)); // Disable network interface reporting since it requires additional setup. scoped_testing_cros_settings_.device_settings()->SetBoolean( chromeos::kReportDeviceNetworkInterfaces, false); + + // Mock clock in task environment is set to Unix Epoch, advance it to avoid + // using times from before Unix Epoch in some tests. + task_environment_.AdvanceClock(base::TimeDelta::FromDays(365)); } void TearDown() override { status_collector_.reset(); } @@ -293,13 +315,34 @@ } } + void SimulateAppActivity(const chromeos::app_time::AppId& app_id, + base::TimeDelta duration) { + chromeos::ChildUserService::TestApi child_user_service = + chromeos::ChildUserService::TestApi( + chromeos::ChildUserServiceFactory::GetForBrowserContext( + testing_profile_.get())); + EXPECT_TRUE(child_user_service.app_time_controller()); + + chromeos::app_time::AppActivityRegistry* app_registry = + chromeos::app_time::AppTimeController::TestApi( + child_user_service.app_time_controller()) + .app_registry(); + app_registry->OnAppInstalled(app_id); + + // Window instance is irrelevant for tests here. + app_registry->OnAppActive(app_id, nullptr /* window */, base::Time::Now()); + task_environment_.FastForwardBy(duration); + app_registry->OnAppInactive(app_id, nullptr /* window */, + base::Time::Now()); + } + virtual void RestartStatusCollector( const policy::StatusCollector::AndroidStatusFetcher& android_status_fetcher, const TimeDelta activity_day_start = kMidnight) { status_collector_ = std::make_unique<TestingChildStatusCollector>( - &profile_pref_service_, &fake_statistics_provider_, - android_status_fetcher, activity_day_start); + &profile_pref_service_, testing_profile_.get(), + &fake_statistics_provider_, android_status_fetcher, activity_day_start); } void GetStatus() { @@ -381,13 +424,16 @@ // Since this is a unit test running in browser_tests we must do additional // unit test setup and make a TestingBrowserProcess. Must be first member. TestingBrowserProcessInitializer initializer_; - content::BrowserTaskEnvironment task_environment_; + + content::BrowserTaskEnvironment task_environment_{ + base::test::TaskEnvironment::TimeSource::MOCK_TIME}; ChromeContentClient content_client_; ChromeContentBrowserClient browser_content_client_; chromeos::system::ScopedFakeStatisticsProvider fake_statistics_provider_; chromeos::ScopedStubInstallAttributes scoped_stub_install_attributes_; chromeos::ScopedTestingCrosSettings scoped_testing_cros_settings_; + base::test::ScopedFeatureList scoped_feature_list_; chromeos::FakeOwnerSettingsService owner_settings_service_{ scoped_testing_cros_settings_.device_settings(), nullptr}; std::unique_ptr<TestingProfile> testing_profile_; @@ -471,7 +517,7 @@ ExpectChildScreenTimeMilliseconds(5 * ActivePeriodMilliseconds()); } -TEST_F(ChildStatusCollectorTest, ReportingActivityTimesSleepTransistions) { +TEST_F(ChildStatusCollectorTest, ReportingActivityTimesSleepTransitions) { DeviceStateTransitions test_states[] = { DeviceStateTransitions::kEnterSessionActive, DeviceStateTransitions::kPeriodicCheckTriggered, @@ -656,4 +702,63 @@ ExpectChildScreenTimeMilliseconds(ActivePeriodMilliseconds()); } +TEST_F(ChildStatusCollectorTest, ReportingAppActivity) { + // Nothing reported yet. + GetStatus(); + EXPECT_EQ(0, child_status_.app_activity_size()); + status_collector_->OnSubmittedSuccessfully(); + + // Report activity for two different apps. + const chromeos::app_time::AppId app1(apps::mojom::AppType::kWeb, "app1"); + const chromeos::app_time::AppId app2(apps::mojom::AppType::kExtension, + "app2"); + const base::Time start_time = base::Time::Now(); + const base::TimeDelta app1_interval = base::TimeDelta::FromMinutes(1); + const base::TimeDelta app2_interval = base::TimeDelta::FromMinutes(2); + SimulateAppActivity(app1, app1_interval); + SimulateAppActivity(app2, app2_interval); + SimulateAppActivity(app1, app1_interval); + SimulateAppActivity(app2, app2_interval); + SimulateAppActivity(app1, app1_interval); + + GetStatus(); + EXPECT_EQ(2, child_status_.app_activity_size()); + + for (const auto& app_activity : child_status_.app_activity()) { + if (app_activity.app_info().app_id() == app1.app_id()) { + EXPECT_EQ(em::App::WEB, app_activity.app_info().app_type()); + EXPECT_EQ(0, app_activity.app_info().additional_app_id_size()); + EXPECT_EQ(em::AppActivity::DEFAULT, app_activity.app_state()); + EXPECT_EQ(3, app_activity.active_time_periods_size()); + base::Time start = start_time; + for (const auto& active_period : app_activity.active_time_periods()) { + EXPECT_EQ(start.ToJavaTime(), active_period.start_timestamp()); + const base::Time end = start + app1_interval; + EXPECT_EQ(end.ToJavaTime(), active_period.end_timestamp()); + start = end + app2_interval; + } + continue; + } + if (app_activity.app_info().app_id() == app2.app_id()) { + EXPECT_EQ(em::App::EXTENSION, app_activity.app_info().app_type()); + EXPECT_EQ(0, app_activity.app_info().additional_app_id_size()); + EXPECT_EQ(em::AppActivity::DEFAULT, app_activity.app_state()); + EXPECT_EQ(2, app_activity.active_time_periods_size()); + base::Time start = start_time + app1_interval; + for (const auto& active_period : app_activity.active_time_periods()) { + EXPECT_EQ(start.ToJavaTime(), active_period.start_timestamp()); + const base::Time end = start + app2_interval; + EXPECT_EQ(end.ToJavaTime(), active_period.end_timestamp()); + start = end + app1_interval; + } + continue; + } + } + + // After successful report submission 'old' data should be cleared. + status_collector_->OnSubmittedSuccessfully(); + GetStatus(); + EXPECT_EQ(0, child_status_.app_activity_size()); +} + } // namespace policy
diff --git a/chrome/browser/chromeos/system_logs/debug_log_writer.cc b/chrome/browser/chromeos/system_logs/debug_log_writer.cc index ec4a8239..01f7f849 100644 --- a/chrome/browser/chromeos/system_logs/debug_log_writer.cc +++ b/chrome/browser/chromeos/system_logs/debug_log_writer.cc
@@ -16,7 +16,7 @@ #include "base/process/kill.h" #include "base/process/launch.h" #include "base/sequenced_task_runner.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include "base/task/post_task.h" #include "chrome/common/logging_chrome.h" #include "chromeos/dbus/dbus_thread_manager.h" @@ -34,10 +34,9 @@ const char kGzipCommand[] = "/bin/gzip"; const char kTarCommand[] = "/bin/tar"; -base::LazySequencedTaskRunner g_sequenced_task_runner = - LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER( - base::TaskTraits(base::ThreadPool(), - base::MayBlock(), +base::LazyThreadPoolSequencedTaskRunner g_sequenced_task_runner = + LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER( + base::TaskTraits(base::MayBlock(), base::TaskPriority::BEST_EFFORT, base::TaskShutdownBehavior::BLOCK_SHUTDOWN));
diff --git a/chrome/browser/devtools/devtools_file_system_indexer.cc b/chrome/browser/devtools/devtools_file_system_indexer.cc index 9e97b8e..edfb5361 100644 --- a/chrome/browser/devtools/devtools_file_system_indexer.cc +++ b/chrome/browser/devtools/devtools_file_system_indexer.cc
@@ -19,7 +19,7 @@ #include "base/stl_util.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include "base/task/post_task.h" #include "content/public/browser/browser_task_traits.h" @@ -43,9 +43,9 @@ base::SequencedTaskRunner* impl_task_runner() { constexpr base::TaskTraits kBlockingTraits = { - base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT}; - static base::LazySequencedTaskRunner s_sequenced_task_task_runner = - LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER(kBlockingTraits); + base::MayBlock(), base::TaskPriority::BEST_EFFORT}; + static base::LazyThreadPoolSequencedTaskRunner s_sequenced_task_task_runner = + LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER(kBlockingTraits); return s_sequenced_task_task_runner.Get().get(); }
diff --git a/chrome/browser/devtools/devtools_file_watcher.cc b/chrome/browser/devtools/devtools_file_watcher.cc index d0445ad..5203156 100644 --- a/chrome/browser/devtools/devtools_file_watcher.cc +++ b/chrome/browser/devtools/devtools_file_watcher.cc
@@ -18,7 +18,7 @@ #include "base/memory/ref_counted.h" #include "base/sequenced_task_runner.h" #include "base/strings/stringprintf.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include "base/threading/sequenced_task_runner_handle.h" #include "base/trace_event/memory_dump_manager.h" #include "base/trace_event/memory_dump_provider.h" @@ -225,9 +225,9 @@ namespace { base::SequencedTaskRunner* impl_task_runner() { constexpr base::TaskTraits kImplTaskTraits = { - base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT}; - static base::LazySequencedTaskRunner s_file_task_runner = - LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER(kImplTaskTraits); + base::MayBlock(), base::TaskPriority::BEST_EFFORT}; + static base::LazyThreadPoolSequencedTaskRunner s_file_task_runner = + LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER(kImplTaskTraits); return s_file_task_runner.Get().get(); } } // namespace
diff --git a/chrome/browser/extensions/activity_log/activity_log_task_runner.cc b/chrome/browser/extensions/activity_log/activity_log_task_runner.cc index 348938b4..1b0eaef 100644 --- a/chrome/browser/extensions/activity_log/activity_log_task_runner.cc +++ b/chrome/browser/extensions/activity_log/activity_log_task_runner.cc
@@ -5,7 +5,7 @@ #include "chrome/browser/extensions/activity_log/activity_log_task_runner.h" #include "base/single_thread_task_runner.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include "base/task/single_thread_task_runner_thread_mode.h" namespace extensions { @@ -14,11 +14,9 @@ base::SingleThreadTaskRunner* g_task_runner_for_testing = nullptr; -base::LazySingleThreadTaskRunner g_task_runner = - LAZY_SINGLE_THREAD_TASK_RUNNER_INITIALIZER( - base::TaskTraits(base::ThreadPool(), - base::MayBlock(), - base::TaskPriority::BEST_EFFORT), +base::LazyThreadPoolSingleThreadTaskRunner g_task_runner = + LAZY_THREAD_POOL_SINGLE_THREAD_TASK_RUNNER_INITIALIZER( + base::TaskTraits(base::MayBlock(), base::TaskPriority::BEST_EFFORT), base::SingleThreadTaskRunnerThreadMode::SHARED); } // namespace
diff --git a/chrome/browser/extensions/api/omnibox/omnibox_api_interactive_test.cc b/chrome/browser/extensions/api/omnibox/omnibox_api_interactive_test.cc index 0ef0acf..9027b19 100644 --- a/chrome/browser/extensions/api/omnibox/omnibox_api_interactive_test.cc +++ b/chrome/browser/extensions/api/omnibox/omnibox_api_interactive_test.cc
@@ -309,10 +309,16 @@ } } +// The test is flaky on Win10. crbug.com/1045731. +#if defined(OS_WIN) +#define MAYBE_PopupStaysClosed DISABLED_PopupStaysClosed +#else +#define MAYBE_PopupStaysClosed PopupStaysClosed +#endif // Tests that the autocomplete popup doesn't reopen after accepting input for // a given query. // http://crbug.com/88552 -IN_PROC_BROWSER_TEST_F(OmniboxApiTest, PopupStaysClosed) { +IN_PROC_BROWSER_TEST_F(OmniboxApiTest, MAYBE_PopupStaysClosed) { ASSERT_TRUE(RunExtensionTest("omnibox")) << message_; // The results depend on the TemplateURLService being loaded. Make sure it is
diff --git a/chrome/browser/extensions/external_pref_loader.cc b/chrome/browser/extensions/external_pref_loader.cc index d9236fec..88f9468 100644 --- a/chrome/browser/extensions/external_pref_loader.cc +++ b/chrome/browser/extensions/external_pref_loader.cc
@@ -19,7 +19,6 @@ #include "base/stl_util.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" -#include "base/task/lazy_task_runner.h" #include "base/task/post_task.h" #include "build/build_config.h" #include "chrome/browser/apps/user_type_filter.h"
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index ee36e44..53cf321 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -115,12 +115,6 @@ "Use the staging server as part of the \"Messages\" feature under " "\"Connected Devices\" settings."; -const char kEnableMessagesWebPushName[] = - "Web push in Android Messages integration"; -const char kEnableMessagesWebPushDescription[] = - "Use web push for background notificatons in Chrome OS integration " - "with Android Messages for Web"; - const char kAndroidPictureInPictureAPIName[] = "Picture-in-Picture Web API for Android"; const char kAndroidPictureInPictureAPIDescription[] = @@ -132,11 +126,6 @@ "Enable the new UI " "changes in Site Settings in Android."; -const char kAutomaticPasswordGenerationName[] = "Automatic password generation"; -const char kAutomaticPasswordGenerationDescription[] = - "Allow Chrome to offer to generate passwords when it detects account " - "creation pages."; - const char kDnsOverHttpsName[] = "Secure DNS lookups"; const char kDnsOverHttpsDescription[] = "Enables DNS over HTTPS. When this feature is enabled, your browser may " @@ -274,12 +263,6 @@ "it will offer to save it. If saved, it will be offered for filling in " "fields which expect a VPA."; -const char kAutofillSettingsSplitByCardTypeName[] = - "Autofill settings split by card type"; -const char kAutofillSettingsSplitByCardTypeDescription[] = - "When enabled, the cards in the payments settings will be split into two " - "lists based on where they are stored."; - const char kAutofillUseImprovedLabelDisambiguationName[] = "Autofill Uses Improved Label Disambiguation"; const char kAutofillUseImprovedLabelDisambiguationDescription[] = @@ -297,10 +280,6 @@ "will lead to various breakages, up to and including user data loss. " "Do not enable unless you work on this feature"; -const char kBrowserTaskSchedulerName[] = "Task Scheduler"; -const char kBrowserTaskSchedulerDescription[] = - "Enables redirection of some task posting APIs to the task scheduler."; - const char kBundledConnectionHelpName[] = "Bundled Connection Help"; const char kBundledConnectionHelpDescription[] = "Enables or disables redirection to local help content for users who get " @@ -441,12 +420,6 @@ "Enables Developer Tools experiments. Use Settings panel in Developer " "Tools to toggle individual experiments."; -const char kDisableAudioForDesktopShareName[] = - "Disable Audio For Desktop Share"; -const char kDisableAudioForDesktopShareDescription[] = - "With this flag on, desktop share picker window will not let the user " - "choose whether to share audio."; - const char kDisableBestEffortTasksName[] = "Skip best effort tasks"; const char kDisableBestEffortTasksDescription[] = "With this flag on, tasks of the lowest priority will not be executed " @@ -469,12 +442,6 @@ "code), where the final download origin or any origin in the redirect " "chain is insecure."; -const char kEnableAccessibilityImageDescriptionsName[] = - "Accessibility Image Descriptions"; -const char kEnableAccessibilityImageDescriptionsDescription[] = - "Enables screen reader users to request computer-generated descriptions " - "of unlabeled images using the page context menu."; - const char kEnableAccessibilityObjectModelName[] = "Accessibility Object Model v0 (deprecated)"; const char kEnableAccessibilityObjectModelDescription[] = @@ -498,14 +465,6 @@ "Enables enforcement of a single media session having audio focus at " "any one time. Requires #enable-media-session-service to be enabled too."; -const char kEnableAutocompleteDataRetentionPolicyName[] = - "Enable automatic cleanup of expired Autocomplete entries."; -const char kEnableAutocompleteDataRetentionPolicyDescription[] = - "If enabled, will clean-up Autocomplete entries whose last use date is " - "older than the current retention policy. These entries will be " - "permanently deleted from the client on startup, and will be unlinked " - "from sync."; - const char kEnableAutofillAccountWalletStorageName[] = "Enable the account data storage for autofill"; const char kEnableAutofillAccountWalletStorageDescription[] = @@ -523,11 +482,6 @@ "authenticator (if available) to verify card ownership when retrieving " "credit cards from Google Payments."; -const char kEnableAutofillCreditCardLastUsedDateDisplayName[] = - "Display the last used date of a credit card in autofill."; -const char kEnableAutofillCreditCardLastUsedDateDisplayDescription[] = - "If enabled, display the last used date of a credit card in autofill."; - const char kEnableAutofillCreditCardUploadEditableCardholderNameName[] = "Make cardholder name editable in dialog during credit card upload"; const char kEnableAutofillCreditCardUploadEditableCardholderNameDescription[] = @@ -550,12 +504,6 @@ "show a highlight, otherwise the icon will be updated and if it is " "clicked, the save card failure bubble will be shown."; -const char kEnableAutofillNativeDropdownViewsName[] = - "Display Autofill Dropdown Using Views"; -const char kEnableAutofillNativeDropdownViewsDescription[] = - "If enabled, the Autofill Dropdown will be built natively using Views, " - "rather than painted directly to a canvas."; - const char kEnableDeferAllScriptName[] = "DeferAllScript previews"; const char kEnableDeferAllScriptDescription[] = "Enable deferring synchronous script on slow pages."; @@ -614,11 +562,6 @@ "PWAs with display mode minimal-ui open in a window with Back and Refresh " "buttons."; -const char kEnableDesktopPWAsName[] = "Desktop PWAs"; -const char kEnableDesktopPWAsDescription[] = - "Experimental windowing and install banner treatment for Progressive Web " - "Apps on desktop platforms. Implies #enable-experimental-app-banners."; - extern const char kDesktopPWAsLocalUpdatingName[] = "Desktop PWAs local updating"; extern const char kDesktopPWAsLocalUpdatingDescription[] = @@ -744,12 +687,6 @@ "Defers the loading of images marked with the attribute 'loading=lazy' " "until the page is scrolled down near them."; -const char kEnableMacMaterialDesignDownloadShelfName[] = - "Enable Material Design download shelf"; - -const char kEnableMacMaterialDesignDownloadShelfDescription[] = - "If enabled, the download shelf uses Material Design."; - const char kEnableMediaSessionServiceName[] = "Media Session Service"; const char kEnableMediaSessionServiceDescription[] = "Enables the media session mojo service and internal media session " @@ -783,16 +720,6 @@ " and seamless transitions between pages." " See https://github.com/WICG/portals and https://wicg.github.io/portals/"; -const char kEnableNotificationScrollBarName[] = - "Enable notification list scroll bar"; -const char kEnableNotificationScrollBarDescription[] = - "Enable the scroll bar of the notification list in Unified System Tray."; - -const char kEnableNotificationExpansionAnimationName[] = - "Enable notification expansion animations"; -const char kEnableNotificationExpansionAnimationDescription[] = - "Enable notification animations whenever the expansion state is toggled."; - const char kEnableOutOfBlinkCorsName[] = "Out of blink CORS"; const char kEnableOutOfBlinkCorsDescription[] = "CORS handling logic is moved out of blink."; @@ -811,11 +738,6 @@ const char kExperimentalAccessibilityFeaturesDescription[] = "Enable additional accessibility features in the Settings page."; -const char kExperimentalAccessibilityAutoclickName[] = - "Experimental automatic click features"; -const char kExperimentalAccessibilityAutoclickDescription[] = - "Enable additional features for automatic clicks."; - const char kExperimentalAccessibilityLanguageDetectionName[] = "Experimental accessibility language detection"; const char kExperimentalAccessibilityLanguageDetectionDescription[] = @@ -909,11 +831,6 @@ const char kEnableSyncUSSPasswordsDescription[] = "Enables the new, experimental implementation of passwords sync"; -const char kEnableSyncUSSSessionsName[] = "Enable USS for sessions sync"; -const char kEnableSyncUSSSessionsDescription[] = - "Enables the new, experimental implementation of session sync (aka tab " - "sync)."; - const char kEnableTextFragmentAnchorName[] = "Enable Text Fragment Anchor."; const char kEnableTextFragmentAnchorDescription[] = "Enables scrolling to text specified in URL's fragment."; @@ -927,12 +844,6 @@ const char kEnableUseZoomForDsfChoiceEnabled[] = "Enabled"; const char kEnableUseZoomForDsfChoiceDisabled[] = "Disabled"; -const char kEnableScrollAnchorSerializationName[] = - "Scroll Anchor Serialization"; -const char kEnableScrollAnchorSerializationDescription[] = - "Save the scroll anchor and use it to restore the scroll position when " - "navigating."; - const char kEnableSubresourceRedirectName[] = "Enable Render Level Data Use Optimization"; const char kEnableSubresourceRedirectDescription[] = @@ -987,11 +898,6 @@ const char kExpensiveBackgroundTimerThrottlingDescription[] = "Enables intervention to limit CPU usage of background timers to 1%."; -const char kExperimentalCanvasFeaturesName[] = "Experimental canvas features"; -const char kExperimentalCanvasFeaturesDescription[] = - "Enables the use of experimental canvas features which are still in " - "development."; - const char kExperimentalExtensionApisName[] = "Experimental Extension APIs"; const char kExperimentalExtensionApisDescription[] = "Enables experimental extension APIs. Note that the extension gallery " @@ -1009,14 +915,6 @@ "Enable support for experimental developer productivity features, such as " "built-in modules and policies for avoiding slow rendering."; -const char kExperimentalSecurityFeaturesName[] = - "Potentially annoying security features"; -const char kExperimentalSecurityFeaturesDescription[] = - "Enables several security features that will likely break one or more " - "pages that you visit on a daily basis. Strict mixed content checking, for " - "example. And locking powerful features to secure contexts. This flag will " - "probably annoy you."; - const char kExperimentalWebPlatformFeaturesName[] = "Experimental Web Platform features"; const char kExperimentalWebPlatformFeaturesDescription[] = @@ -1050,11 +948,6 @@ "Enables running extensions on chrome:// URLs, where extensions explicitly " "request this permission."; -const char kFeaturePolicyName[] = "Feature Policy"; -const char kFeaturePolicyDescription[] = - "Enables granting and removing access to features through the " - "Feature-Policy HTTP header."; - const char kFilteringScrollPredictionName[] = "Filtering scroll prediction"; const char kFilteringScrollPredictionDescription[] = "Enable filtering of predicted scroll events"; @@ -1132,11 +1025,6 @@ const char kGooglePasswordManagerDescription[] = "Enables access to the Google Password Manager UI from Chrome."; -const char kGoogleProfileInfoName[] = "Google profile name and icon"; -const char kGoogleProfileInfoDescription[] = - "Enables using Google information to populate the profile name and icon in " - "the avatar menu."; - const char kHandwritingGestureName[] = "Handwriting Gestures"; const char kHandwritingGestureDescription[] = "Enables handwriting gestures within the virtual keyboard"; @@ -1146,10 +1034,6 @@ "Enables using media keys to control the active media session. This " "requires MediaSessionService to be enabled too"; -const char kHarfBuzzPDFSubsetterName[] = "HarfBuzz PDF Subsetter"; -const char kHarfBuzzPDFSubsetterDescription[] = - "Changes the PDF subsetter from sftnly to HarfBuzz."; - const char kHeavyAdPrivacyMitigationsOptOutName[] = "Disable heavy ad privacy mitigations"; const char kHeavyAdPrivacyMitigationsOptOutDescription[] = @@ -1161,11 +1045,6 @@ const char kHeavyAdInterventionDescription[] = "Unloads ads that use too many device resources."; -const char kHideActiveAppsFromShelfName[] = - "Hide running apps (that are not pinned) from the shelf"; -const char kHideActiveAppsFromShelfDescription[] = - "Save space in the shelf by hiding running apps (that are not pinned)."; - const char kHorizontalTabSwitcherAndroidName[] = "Enable horizontal tab switcher"; const char kHorizontalTabSwitcherAndroidDescription[] = @@ -1193,10 +1072,6 @@ "Use committed error pages instead of transient navigation entries " "for HTTP auth interstitial pages."; -const char kIconNtpName[] = "Large icons on the New Tab page"; -const char kIconNtpDescription[] = - "Enable the experimental New Tab page using large icons."; - const char kIgnoreGpuBlacklistName[] = "Override software rendering list"; const char kIgnoreGpuBlacklistDescription[] = "Overrides the built-in software rendering list and enables " @@ -1242,12 +1117,6 @@ "conflict with the latest JavaScript features. This flag allows disabling " "support of those features for compatibility with such pages."; -const char kKeepAliveRendererForKeepaliveRequestsName[] = - "Keep a renderer alive for keepalive fetch requests"; -const char kKeepAliveRendererForKeepaliveRequestsDescription[] = - "Keep a render process alive when the process has a pending fetch request " - "with `keepalive' specified."; - const char kLegacyTLSWarningsName[] = "Show security warnings for sites using legacy TLS versions"; const char kLegacyTLSWarningsDescription[] = @@ -1312,35 +1181,6 @@ "Enables the experimental Native File System API, giving websites access " "to the native file system"; -const char kNewAudioRenderingMixingStrategyName[] = - "New audio rendering mixing strategy"; -const char kNewAudioRenderingMixingStrategyDescription[] = - "Use the new audio rendering mixing strategy."; - -const char kNewBookmarkAppsName[] = "The new bookmark app system"; -const char kNewBookmarkAppsDescription[] = - "Enables the new system for creating bookmark apps."; - -const char kNewPasswordFormParsingName[] = - "New password form parsing for filling passwords"; -const char kNewPasswordFormParsingDescription[] = - "Replaces existing form parsing for filling in password manager with a new " - "version, currently under development. WARNING: when enabled, Password " - "Manager might stop working"; - -const char kNewPasswordFormParsingForSavingName[] = - "New password form parsing for saving passwords"; -const char kNewPasswordFormParsingForSavingDescription[] = - "Replaces existing form parsing for saving in password manager with a new " - "version, currently under development. WARNING: when enabled, Password " - "Manager might stop working"; - -const char kUseSurfaceLayerForVideoName[] = - "Enable the use of SurfaceLayer objects for videos."; -const char kUseSurfaceLayerForVideoDescription[] = - "Enable compositing onto a Surface instead of a VideoLayer " - "for videos."; - const char kNewUsbBackendName[] = "Enable new USB backend"; const char kNewUsbBackendDescription[] = "Enables the new experimental USB backend for Windows."; @@ -1538,11 +1378,6 @@ "Offer query refinement suggestions when the URL bar (omnibox) is focused " "on the default search provider's search results page (SERP)."; -const char kOnlyNewPasswordFormParsingName[] = - "Use only new password form parsing"; -const char kOnlyNewPasswordFormParsingDescription[] = - "The old password form parsing is disabled"; - const char kOnTheFlyMhtmlHashComputationName[] = "On-The-Fly MHTML Hash Computation"; const char kOnTheFlyMhtmlHashComputationDescription[] = @@ -1694,16 +1529,6 @@ "enabled and the client experiencing specific triggering conditions. " "May be used as a kill-switch to turn off all potential preview types."; -const char kPrintPdfAsImageName[] = "Print Pdf as Image"; -const char kPrintPdfAsImageDescription[] = - "If enabled, an option to print PDF files as images will be available in " - "print preview."; - -const char kPrintPreviewRegisterPromosName[] = - "Print Preview Registration Promos"; -const char kPrintPreviewRegisterPromosDescription[] = - "Enable registering unregistered cloud printers from print preview."; - const char kPrivacySettingsRedesignName[] = "Privacy Settings Redesign"; const char kPrivacySettingsRedesignDescription[] = "Redesign of the privacy settings card to make it more prominent and " @@ -1758,11 +1583,6 @@ const char kRewriteLevelDBOnDeletionDescription[] = "Rewrite LevelDB instances to remove traces of deleted data from disk."; -const char kRendererSideResourceSchedulerName[] = - "Renderer side ResourceScheduler"; -const char kRendererSideResourceSchedulerDescription[] = - "Migrate some ResourceScheduler functionalities to renderer"; - const char kReorderBookmarksName[] = "Reorder bookmarks"; const char kReorderBookmarksDescription[] = "Allows the user to reorder their bookmarks from their Android device. " @@ -1807,12 +1627,6 @@ "SameSite=Lax. Sites must specify SameSite=None in order to enable " "third-party usage."; -const char kSaveasMenuLabelExperimentName[] = - "Switch 'Save as' menu labels to 'Download'"; -const char kSaveasMenuLabelExperimentDescription[] = - "Enables an experiment to switch menu labels that use 'Save as...' to " - "'Download'."; - const char kScalableAppListName[] = "App list UI configuration dependant on display size"; const char kScalableAppListDescription[] = @@ -1831,12 +1645,6 @@ "Allows security intersitials to take on a dark theme when the OS is " "switched to dark mode."; -const char kSendTabToSelfName[] = "Send tab to self"; -const char kSendTabToSelfDescription[] = - "Allows users to receive tabs from other synced devices, in order to " - "easily transition those tabs to this device. This enables the sync " - "infrastructure for this feature."; - const char kSendTabToSelfBroadcastName[] = "Send tab to self broadcast"; const char kSendTabToSelfBroadcastDescription[] = "Allows users to broadcast the tab they send to all of their devices " @@ -1854,10 +1662,6 @@ "Enables browser process logic related to service workers to run on the UI " "thread rather than the IO thread."; -const char kSettingsWindowName[] = "Show settings in a window"; -const char kSettingsWindowDescription[] = - "Settings will be shown in a dedicated window instead of as a browser tab."; - const char kSharedClipboardReceiverName[] = "Enable receiver device to handle shared clipboard feature"; const char kSharedClipboardReceiverDescription[] = @@ -2103,10 +1907,6 @@ "Expands the range of situations in which tab outline strokes are " "displayed, improving accessiblity in dark and incognito mode."; -const char kTabsInCbdName[] = "Enable tabs for the Clear Browsing Data dialog."; -const char kTabsInCbdDescription[] = - "Enables a basic and an advanced tab for the Clear Browsing Data dialog."; - const char kTintGlCompositedContentName[] = "Tint GL-composited content"; const char kTintGlCompositedContentDescription[] = "Tint contents composited using GL with a shade of red to help debug and " @@ -2266,9 +2066,6 @@ "Enabling this option allows web applications to access the WebGL " "Extensions that are still in draft status."; -const char kWebMidiName[] = "Web MIDI API"; -const char kWebMidiDescription[] = "Enable Web MIDI API experimental support."; - const char kWebPaymentsExperimentalFeaturesName[] = "Experimental Web Payments API features"; const char kWebPaymentsExperimentalFeaturesDescription[] = @@ -2384,11 +2181,6 @@ #if defined(OS_ANDROID) -const char kAiaFetchingName[] = "Intermediate Certificate Fetching"; -const char kAiaFetchingDescription[] = - "Enable intermediate certificate fetching when a server does not provide " - "sufficient certificates to build a chain to a trusted root."; - const char kAndroidAutofillAccessibilityName[] = "Autofill Accessibility"; const char kAndroidAutofillAccessibilityDescription[] = "Enable accessibility for autofill popup."; @@ -2570,7 +2362,6 @@ const char kEnableAutofillRefreshStyleDescription[] = "Enable modernized style for Autofill on Android"; -const char kEnableAndroidSpellcheckerName[] = "Enable spell checking"; const char kEnableAndroidSpellcheckerDescription[] = "Enables use of the Android spellchecker."; @@ -2641,12 +2432,6 @@ "Allow the user to provide feedback from a feed card."; const char kInterestFeedFeedbackName[] = "Interest Feed Feedback"; -const char kManualPasswordGenerationAndroidName[] = - "Manual password generation"; -const char kManualPasswordGenerationAndroidDescription[] = - "Whether Chrome should offer users the option to manually request to " - "generate passwords on Android."; - const char kOfflineIndicatorAlwaysHttpProbeName[] = "Always http probe"; const char kOfflineIndicatorAlwaysHttpProbeDescription[] = "Always do http probe to detect network connectivity for offline indicator " @@ -2694,13 +2479,6 @@ "When enabled offline pages launched from the Downloads Home will be " "opened in Chrome Custom Tabs (CCT) instead of regular tabs."; -const char kOfflinePagesLimitlessPrefetchingName[] = - "Removes resource usage limits for the prefetching of offline pages."; -const char kOfflinePagesLimitlessPrefetchingDescription[] = - "Allows the prefetching of suggested offline pages to ignore resource " - "usage limits. This allows it to completely ignore data usage limitations " - "and allows downloads to happen with any kind of connection."; - const char kOfflinePagesLoadSignalCollectingName[] = "Enables collecting load timing data for offline page snapshots."; const char kOfflinePagesLoadSignalCollectingDescription[] = @@ -3160,9 +2938,6 @@ const char kEnableCustomMacPaperSizesDescription[] = "Allow use of custom paper sizes in Print Preview."; -const char kMacTouchBarName[] = "Hardware Touch Bar"; -const char kMacTouchBarDescription[] = "Control the use of the Touch Bar."; - const char kMacSyscallSandboxName[] = "Mac Syscall Filtering Sandbox"; const char kMacSyscallSandboxDescription[] = "Controls whether the macOS sandbox filters syscalls."; @@ -3274,16 +3049,6 @@ const char kAshDragWindowFromShelfDescription[] = "Enable dragging a window from shelf to overview or home screen."; -const char kAshEnableDisplayMoveWindowAccelsName[] = - "Enable shortcuts for moving window between displays."; -const char kAshEnableDisplayMoveWindowAccelsDescription[] = - "Enable shortcuts for moving window between displays."; - -const char kAshEnablePersistentWindowBoundsName[] = - "Enable persistent window bounds in multi-displays scenario."; -const char kAshEnablePersistentWindowBoundsDescription[] = - "Enable persistent window bounds in multi-displays scenario."; - const char kAshEnablePipRoundedCornersName[] = "Enable Picture-in-Picture rounded corners."; const char kAshEnablePipRoundedCornersDescription[] = @@ -3329,10 +3094,6 @@ "Enables the new Chrome OS video decoder pipeline for hardware accelerated" "video decoding."; -const char kCrOSContainerName[] = "Chrome OS Container"; -const char kCrOSContainerDescription[] = - "Enable the use of Chrome OS Container utility."; - const char kCrosRegionsModeName[] = "Cros-regions load mode"; const char kCrosRegionsModeDescription[] = "This flag controls cros-regions load mode"; @@ -3340,10 +3101,6 @@ const char kCrosRegionsModeOverride[] = "Override VPD values."; const char kCrosRegionsModeHide[] = "Hide VPD values."; -const char kCrostiniAppSearchName[] = "Crostini App Search"; -const char kCrostiniAppSearchDescription[] = - "Enable search and installation of Crostini apps in the launcher."; - const char kCrostiniPortForwardingName[] = "Crostini Port Forwarding"; const char kCrostiniPortForwardingDescription[] = "Enable Crostini port forwarding."; @@ -3422,12 +3179,6 @@ "handlers won't be registered, making it possible to install another " "version for testing."; -const char kDisableTabletAutohideTitlebarsName[] = - "Disable autohide titlebars in tablet mode"; -const char kDisableTabletAutohideTitlebarsDescription[] = - "Disable tablet mode autohide titlebars functionality. The user will be " - "able to see the titlebar in tablet mode."; - const char kDoubleTapToZoomInTabletModeName[] = "Double-tap to zoom in tablet mode"; const char kDoubleTapToZoomInTabletModeDescription[] = @@ -3544,10 +3295,6 @@ "Enable additional heuristic palm rejection logic when interacting with " "stylus usage. Not intended for all devices."; -const char kEnableHomeLauncherName[] = "Enable home launcher"; -const char kEnableHomeLauncherDescription[] = - "Enable home launcher in tablet mode."; - const char kEnableNeuralStylusPalmRejectionName[] = "Enable Neural Palm Detection"; const char kEnableNeuralStylusPalmRejectionDescription[] = @@ -3641,19 +3388,10 @@ "Enable experimental or in-progress Switch Access features for improved " "text input"; -const char kFileManagerTouchModeName[] = "Files App. touch mode"; -const char kFileManagerTouchModeDescription[] = - "Touchscreen-specific interactions of the Files app."; - const char kFilesNGName[] = "Enable Files App. NG."; const char kFilesNGDescription[] = "Enable the next generation UI style of the file manager."; -const char kFirstRunUiTransitionsName[] = - "Animated transitions in the first-run tutorial"; -const char kFirstRunUiTransitionsDescription[] = - "Transitions during first-run tutorial are animated."; - const char kFsNosymfollowName[] = "Prevent symlink traversal on user-supplied filesystems."; const char kFsNosymfollowDescription[] = @@ -3708,29 +3446,12 @@ "Shows notifications for media sessions showing the currently playing " "media and providing playback controls"; -const char kNetworkPortalNotificationName[] = - "Notifications about captive portals"; -const char kNetworkPortalNotificationDescription[] = - "If enabled, notification is displayed when device is connected to a " - "network behind captive portal."; - const char kNewOverviewTabletLayoutName[] = "New overview tablet mode layout"; const char kNewOverviewTabletLayoutDescription[] = "If enabled, in tablet mode, overview items will be laid out in two rows " "with six items showing at a time. Users can scroll through to see hidden " "items."; -const char kNewZipUnpackerName[] = "ZIP Archiver (unpacking)"; -const char kNewZipUnpackerDescription[] = - "Use the ZIP Archiver for mounting/unpacking ZIP files"; - -const char kPrinterProviderSearchAppName[] = - "Chrome Web Store Gallery app for printer drivers"; -const char kPrinterProviderSearchAppDescription[] = - "Enables Chrome Web Store Gallery app for printer drivers. The app " - "searches Chrome Web Store for extensions that support printing to a USB " - "printer with specific USB ID."; - const char kPrintServerUiName[] = "Print Server UI"; const char kPrintServerUiDescription[] = "Enables users to add their own print server in the printer settings page."; @@ -3745,11 +3466,6 @@ "Creates release notes app in settings menu that shows a webview " "describing new OS features."; -const char kReleaseNotesNotificationName[] = "CrOS Release Notes Notification."; -const char kReleaseNotesNotificationDescription[] = - "Instructs OS to show notificationlogin after update that release notes " - "are now available."; - const char kSchedulerConfigurationName[] = "Scheduler Configuration"; const char kSchedulerConfigurationDescription[] = "Instructs the OS to use a specific scheduler configuration setting.";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index cd52ff77..8ee7db4 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -99,24 +99,15 @@ extern const char kUseMessagesStagingUrlName[]; extern const char kUseMessagesStagingUrlDescription[]; -extern const char kEnableMessagesWebPushName[]; -extern const char kEnableMessagesWebPushDescription[]; - extern const char kAndroidPictureInPictureAPIName[]; extern const char kAndroidPictureInPictureAPIDescription[]; extern const char kAndroidSiteSettingsUIRefreshName[]; extern const char kAndroidSiteSettingsUIRefreshDescription[]; -extern const char kAutomaticPasswordGenerationName[]; -extern const char kAutomaticPasswordGenerationDescription[]; - extern const char kAutofillAlwaysReturnCloudTokenizedCardName[]; extern const char kAutofillAlwaysReturnCloudTokenizedCardDescription[]; -extern const char kAutofillAlwaysShowServerCardsInSyncTransportName[]; -extern const char kAutofillAlwaysShowServerCardsInSyncTransportDescription[]; - extern const char kAutofillAssistantChromeEntryName[]; extern const char kAutofillAssistantChromeEntryDescription[]; @@ -173,9 +164,6 @@ extern const char kAutofillSaveAndFillVPAName[]; extern const char kAutofillSaveAndFillVPADescription[]; -extern const char kAutofillSettingsSplitByCardTypeName[]; -extern const char kAutofillSettingsSplitByCardTypeDescription[]; - extern const char kAutofillUseImprovedLabelDisambiguationName[]; extern const char kAutofillUseImprovedLabelDisambiguationDescription[]; @@ -185,9 +173,6 @@ extern const char kBackForwardCacheName[]; extern const char kBackForwardCacheDescription[]; -extern const char kBrowserTaskSchedulerName[]; -extern const char kBrowserTaskSchedulerDescription[]; - extern const char kBundledConnectionHelpName[]; extern const char kBundledConnectionHelpDescription[]; @@ -200,9 +185,6 @@ extern const char kClickToOpenPDFName[]; extern const char kClickToOpenPDFDescription[]; -extern const char kCloudImportName[]; -extern const char kCloudImportDescription[]; - extern const char kCloudPrinterHandlerName[]; extern const char kCloudPrinterHandlerDescription[]; @@ -227,9 +209,6 @@ extern const char kExperimentalAccessibilityFeaturesName[]; extern const char kExperimentalAccessibilityFeaturesDescription[]; -extern const char kExperimentalAccessibilityAutoclickName[]; -extern const char kExperimentalAccessibilityAutoclickDescription[]; - extern const char kExperimentalAccessibilityLanguageDetectionName[]; extern const char kExperimentalAccessibilityLanguageDetectionDescription[]; @@ -285,9 +264,6 @@ extern const char kDevtoolsExperimentsName[]; extern const char kDevtoolsExperimentsDescription[]; -extern const char kDisableAudioForDesktopShareName[]; -extern const char kDisableAudioForDesktopShareDescription[]; - extern const char kDisableBestEffortTasksName[]; extern const char kDisableBestEffortTasksDescription[]; @@ -297,12 +273,6 @@ extern const char kDisallowUnsafeHttpDownloadsName[]; extern const char kDisallowUnsafeHttpDownloadsNameDescription[]; -extern const char kDisplayList2dCanvasName[]; -extern const char kDisplayList2dCanvasDescription[]; - -extern const char kEnableAccessibilityImageDescriptionsName[]; -extern const char kEnableAccessibilityImageDescriptionsDescription[]; - extern const char kEnableAccessibilityObjectModelName[]; extern const char kEnableAccessibilityObjectModelDescription[]; @@ -315,9 +285,6 @@ extern const char kEnableAudioFocusEnforcementName[]; extern const char kEnableAudioFocusEnforcementDescription[]; -extern const char kEnableAutocompleteDataRetentionPolicyName[]; -extern const char kEnableAutocompleteDataRetentionPolicyDescription[]; - extern const char kEnableAutofillAccountWalletStorageName[]; extern const char kEnableAutofillAccountWalletStorageDescription[]; @@ -327,9 +294,6 @@ extern const char kEnableAutofillCreditCardAuthenticationName[]; extern const char kEnableAutofillCreditCardAuthenticationDescription[]; -extern const char kEnableAutofillCreditCardLastUsedDateDisplayName[]; -extern const char kEnableAutofillCreditCardLastUsedDateDisplayDescription[]; - extern const char kEnableAutofillCreditCardUploadEditableCardholderNameName[]; extern const char kEnableAutofillCreditCardUploadEditableCardholderNameDescription[]; @@ -341,12 +305,6 @@ extern const char kEnableAutofillCreditCardUploadFeedbackName[]; extern const char kEnableAutofillCreditCardUploadFeedbackDescription[]; -extern const char kEnableAutofillToolkitViewsCreditCardDialogsMac[]; -extern const char kEnableAutofillToolkitViewsCreditCardDialogsMacDescription[]; - -extern const char kEnableAutofillNativeDropdownViewsName[]; -extern const char kEnableAutofillNativeDropdownViewsDescription[]; - extern const char kEnableDeferAllScriptName[]; extern const char kEnableDeferAllScriptDescription[]; @@ -383,9 +341,6 @@ extern const char kDesktopMinimalUIName[]; extern const char kDesktopMinimalUIDescription[]; -extern const char kEnableDesktopPWAsName[]; -extern const char kEnableDesktopPWAsDescription[]; - extern const char kDesktopPWAsLocalUpdatingName[]; extern const char kDesktopPWAsLocalUpdatingDescription[]; @@ -446,12 +401,6 @@ extern const char kEnableLazyImageLoadingName[]; extern const char kEnableLazyImageLoadingDescription[]; -extern const char kEnableMacMaterialDesignDownloadShelfName[]; -extern const char kEnableMacMaterialDesignDownloadShelfDescription[]; - -extern const char kEnableMaterialDesignBookmarksName[]; -extern const char kEnableMaterialDesignBookmarksDescription[]; - extern const char kEnableMediaSessionServiceName[]; extern const char kEnableMediaSessionServiceDescription[]; @@ -464,12 +413,6 @@ extern const char kEnableNetworkServiceInProcessName[]; extern const char kEnableNetworkServiceInProcessDescription[]; -extern const char kEnableNotificationScrollBarName[]; -extern const char kEnableNotificationScrollBarDescription[]; - -extern const char kEnableNotificationExpansionAnimationName[]; -extern const char kEnableNotificationExpansionAnimationDescription[]; - extern const char kEnableOutOfBlinkCorsName[]; extern const char kEnableOutOfBlinkCorsDescription[]; @@ -486,7 +429,6 @@ extern const char kMemlogModeAllRenderers[]; extern const char kMemlogModeBrowser[]; extern const char kMemlogModeGpu[]; -extern const char kMemlogModeManual[]; extern const char kMemlogModeRendererSampling[]; extern const char kMemlogSamplingRateName[]; @@ -517,9 +459,6 @@ extern const char kEnablePortalsName[]; extern const char kEnablePortalsDescription[]; -extern const char kEnablePictureInPictureName[]; -extern const char kEnablePictureInPictureDescription[]; - extern const char kEnablePixelCanvasRecordingName[]; extern const char kEnablePixelCanvasRecordingDescription[]; @@ -543,9 +482,6 @@ extern const char kEnableSyncUSSPasswordsName[]; extern const char kEnableSyncUSSPasswordsDescription[]; -extern const char kEnableSyncUSSSessionsName[]; -extern const char kEnableSyncUSSSessionsDescription[]; - extern const char kEnableTextFragmentAnchorName[]; extern const char kEnableTextFragmentAnchorDescription[]; @@ -555,15 +491,9 @@ extern const char kEnableUseZoomForDsfChoiceEnabled[]; extern const char kEnableUseZoomForDsfChoiceDisabled[]; -extern const char kEnableScrollAnchorSerializationName[]; -extern const char kEnableScrollAnchorSerializationDescription[]; - extern const char kEnableWebAuthenticationCableV2SupportName[]; extern const char kEnableWebAuthenticationCableV2SupportDescription[]; -extern const char kEnableWebUsbName[]; -extern const char kEnableWebUsbDescription[]; - extern const char kExperimentalWebAssemblyFeaturesName[]; extern const char kExperimentalWebAssemblyFeaturesDescription[]; @@ -594,9 +524,6 @@ extern const char kExpensiveBackgroundTimerThrottlingName[]; extern const char kExpensiveBackgroundTimerThrottlingDescription[]; -extern const char kExperimentalCanvasFeaturesName[]; -extern const char kExperimentalCanvasFeaturesDescription[]; - extern const char kExperimentalExtensionApisName[]; extern const char kExperimentalExtensionApisDescription[]; @@ -606,9 +533,6 @@ extern const char kExperimentalProductivityFeaturesName[]; extern const char kExperimentalProductivityFeaturesDescription[]; -extern const char kExperimentalSecurityFeaturesName[]; -extern const char kExperimentalSecurityFeaturesDescription[]; - extern const char kExperimentalWebPlatformFeaturesName[]; extern const char kExperimentalWebPlatformFeaturesDescription[]; @@ -627,9 +551,6 @@ extern const char kExtensionsOnChromeUrlsName[]; extern const char kExtensionsOnChromeUrlsDescription[]; -extern const char kFeaturePolicyName[]; -extern const char kFeaturePolicyDescription[]; - extern const char kFilteringScrollPredictionName[]; extern const char kFilteringScrollPredictionDescription[]; @@ -682,21 +603,12 @@ extern const char kGooglePasswordManagerName[]; extern const char kGooglePasswordManagerDescription[]; -extern const char kGoogleProfileInfoName[]; -extern const char kGoogleProfileInfoDescription[]; - extern const char kHandwritingGestureName[]; extern const char kHandwritingGestureDescription[]; extern const char kHardwareMediaKeyHandling[]; extern const char kHardwareMediaKeyHandlingDescription[]; -extern const char kHarfBuzzPDFSubsetterName[]; -extern const char kHarfBuzzPDFSubsetterDescription[]; - -extern const char kHarfbuzzRendertextName[]; -extern const char kHarfbuzzRendertextDescription[]; - extern const char kHeavyAdPrivacyMitigationsOptOutName[]; extern const char kHeavyAdPrivacyMitigationsOptOutDescription[]; @@ -709,9 +621,6 @@ extern const char kTabSwitcherOnReturnName[]; extern const char kTabSwitcherOnReturnDescription[]; -extern const char kHideActiveAppsFromShelfName[]; -extern const char kHideActiveAppsFromShelfDescription[]; - extern const char kHostedAppQuitNotificationName[]; extern const char kHostedAppQuitNotificationDescription[]; @@ -721,9 +630,6 @@ extern const char kHTTPAuthCommittedInterstitialsName[]; extern const char kHTTPAuthCommittedInterstitialsDescription[]; -extern const char kIconNtpName[]; -extern const char kIconNtpDescription[]; - extern const char kIgnoreGpuBlacklistName[]; extern const char kIgnoreGpuBlacklistDescription[]; @@ -755,9 +661,6 @@ extern const char kJavascriptHarmonyShippingName[]; extern const char kJavascriptHarmonyShippingDescription[]; -extern const char kKeepAliveRendererForKeepaliveRequestsName[]; -extern const char kKeepAliveRendererForKeepaliveRequestsDescription[]; - extern const char kLegacyTLSWarningsName[]; extern const char kLegacyTLSWarningsDescription[]; @@ -775,7 +678,6 @@ extern const char kMarkHttpAsDangerous[]; extern const char kMarkHttpAsWarning[]; extern const char kMarkHttpAsWarningAndDangerousOnFormEdits[]; -extern const char kMarkHttpAsWarningAndDangerousOnPasswordsAndCreditCards[]; extern const char kMediaInspectorLoggingName[]; extern const char kMediaInspectorLoggingDescription[]; @@ -798,27 +700,9 @@ extern const char kNativeFileSystemAPIName[]; extern const char kNativeFileSystemAPIDescription[]; -extern const char kNewAudioRenderingMixingStrategyName[]; -extern const char kNewAudioRenderingMixingStrategyDescription[]; - -extern const char kNewBookmarkAppsName[]; -extern const char kNewBookmarkAppsDescription[]; - -extern const char kNewPasswordFormParsingName[]; -extern const char kNewPasswordFormParsingDescription[]; - -extern const char kNewPasswordFormParsingForSavingName[]; -extern const char kNewPasswordFormParsingForSavingDescription[]; - -extern const char kOnlyNewPasswordFormParsingName[]; -extern const char kOnlyNewPasswordFormParsingDescription[]; - extern const char kUsernameFirstFlowName[]; extern const char kUsernameFirstFlowDescription[]; -extern const char kUseSurfaceLayerForVideoName[]; -extern const char kUseSurfaceLayerForVideoDescription[]; - extern const char kNewUsbBackendName[]; extern const char kNewUsbBackendDescription[]; @@ -1012,12 +896,6 @@ extern const char kPreviewsAllowedName[]; extern const char kPreviewsAllowedDescription[]; -extern const char kPrintPdfAsImageName[]; -extern const char kPrintPdfAsImageDescription[]; - -extern const char kPrintPreviewRegisterPromosName[]; -extern const char kPrintPreviewRegisterPromosDescription[]; - extern const char kPrivacySettingsRedesignName[]; extern const char kPrivacySettingsRedesignDescription[]; @@ -1049,9 +927,6 @@ extern const char kRewriteLevelDBOnDeletionName[]; extern const char kRewriteLevelDBOnDeletionDescription[]; -extern const char kRendererSideResourceSchedulerName[]; -extern const char kRendererSideResourceSchedulerDescription[]; - extern const char kReorderBookmarksName[]; extern const char kReorderBookmarksDescription[]; @@ -1067,18 +942,12 @@ extern const char kPrefetchMainResourceNetworkIsolationKeyName[]; extern const char kPrefetchMainResourceNetworkIsolationKeyDescription[]; -extern const char kSafeBrowsingUseAPDownloadVerdictsName[]; -extern const char kSafeBrowsingUseAPDownloadVerdictsDescription[]; - extern const char kSafetyTipName[]; extern const char kSafetyTipDescription[]; extern const char kSameSiteByDefaultCookiesName[]; extern const char kSameSiteByDefaultCookiesDescription[]; -extern const char kSaveasMenuLabelExperimentName[]; -extern const char kSaveasMenuLabelExperimentDescription[]; - extern const char kScalableAppListName[]; extern const char kScalableAppListDescription[]; @@ -1088,9 +957,6 @@ extern const char kSecurityInterstitialsDarkModeName[]; extern const char kSecurityInterstitialsDarkModeDescription[]; -extern const char kSendTabToSelfName[]; -extern const char kSendTabToSelfDescription[]; - extern const char kSendTabToSelfBroadcastName[]; extern const char kSendTabToSelfBroadcastDescription[]; @@ -1100,9 +966,6 @@ extern const char kServiceWorkerOnUIName[]; extern const char kServiceWorkerOnUIDescription[]; -extern const char kSettingsWindowName[]; -extern const char kSettingsWindowDescription[]; - extern const char kSharedClipboardReceiverName[]; extern const char kSharedClipboardReceiverDescription[]; @@ -1157,9 +1020,6 @@ extern const char kHistoryManipulationIntervention[]; extern const char kHistoryManipulationInterventionDescription[]; -extern const char kEnableDrawOcclusionName[]; -extern const char kEnableDrawOcclusionDescription[]; - extern const char kSilentDebuggerExtensionApiName[]; extern const char kSilentDebuggerExtensionApiDescription[]; @@ -1177,9 +1037,6 @@ extern const char kSiteIsolationOptOutChoiceDefault[]; extern const char kSiteIsolationOptOutChoiceOptOut[]; -extern const char kSiteSettings[]; -extern const char kSiteSettingsDescription[]; - extern const char kSlowDCTimerInterruptsWinName[]; extern const char kSlowDCTimerInterruptsWinDescription[]; @@ -1249,9 +1106,6 @@ extern const char kTabOutlinesInLowContrastThemesName[]; extern const char kTabOutlinesInLowContrastThemesDescription[]; -extern const char kTabsInCbdName[]; -extern const char kTabsInCbdDescription[]; - extern const char kTintGlCompositedContentName[]; extern const char kTintGlCompositedContentDescription[]; @@ -1335,9 +1189,6 @@ extern const char kWebglDraftExtensionsName[]; extern const char kWebglDraftExtensionsDescription[]; -extern const char kWebMidiName[]; -extern const char kWebMidiDescription[]; - extern const char kWebPaymentsExperimentalFeaturesName[]; extern const char kWebPaymentsExperimentalFeaturesDescription[]; @@ -1414,9 +1265,6 @@ #if defined(OS_ANDROID) -extern const char kAiaFetchingName[]; -extern const char kAiaFetchingDescription[]; - extern const char kAndroidAutofillAccessibilityName[]; extern const char kAndroidAutofillAccessibilityDescription[]; @@ -1519,16 +1367,12 @@ extern const char kDirectActionsName[]; extern const char kDirectActionsDescription[]; -extern const char kDontPrefetchLibrariesName[]; -extern const char kDontPrefetchLibrariesDescription[]; - extern const char kAutofillManualFallbackAndroidName[]; extern const char kAutofillManualFallbackAndroidDescription[]; extern const char kEnableAutofillRefreshStyleName[]; extern const char kEnableAutofillRefreshStyleDescription[]; -extern const char kEnableAndroidSpellcheckerName[]; extern const char kEnableAndroidSpellcheckerDescription[]; extern const char kEnableCommandLineOnNonRootedName[]; @@ -1570,9 +1414,6 @@ extern const char kInterestFeedFeedbackName[]; extern const char kInterestFeedFeedbackDescription[]; -extern const char kManualPasswordGenerationAndroidName[]; -extern const char kManualPasswordGenerationAndroidDescription[]; - extern const char kOfflineIndicatorAlwaysHttpProbeName[]; extern const char kOfflineIndicatorAlwaysHttpProbeDescription[]; @@ -1600,9 +1441,6 @@ extern const char kOfflinePagesInDownloadHomeOpenInCctName[]; extern const char kOfflinePagesInDownloadHomeOpenInCctDescription[]; -extern const char kOfflinePagesLimitlessPrefetchingName[]; -extern const char kOfflinePagesLimitlessPrefetchingDescription[]; - extern const char kOfflinePagesLoadSignalCollectingName[]; extern const char kOfflinePagesLoadSignalCollectingDescription[]; @@ -1712,9 +1550,6 @@ extern const char kAppManagementName[]; extern const char kAppManagementDescription[]; -extern const char kAutofillDropdownLayoutName[]; -extern const char kAutofillDropdownLayoutDescription[]; - extern const char kCastMediaRouteProviderName[]; extern const char kCastMediaRouteProviderDescription[]; @@ -1736,9 +1571,6 @@ extern const char kEnableReaderModeName[]; extern const char kEnableReaderModeDescription[]; -extern const char kEnableWebAuthenticationBleSupportName[]; -extern const char kEnableWebAuthenticationBleSupportDescription[]; - extern const char kEnableWebAuthenticationTestingAPIName[]; extern const char kEnableWebAuthenticationTestingAPIDescription[]; @@ -1862,9 +1694,6 @@ extern const char kEnableCustomMacPaperSizesName[]; extern const char kEnableCustomMacPaperSizesDescription[]; -extern const char kMacTouchBarName[]; -extern const char kMacTouchBarDescription[]; - extern const char kMacSyscallSandboxName[]; extern const char kMacSyscallSandboxDescription[]; @@ -1877,13 +1706,6 @@ extern const char kMetalName[]; extern const char kMetalDescription[]; -// Non-Mac -------------------------------------------------------------------- - -#else // !defined(OS_MACOSX) - -extern const char kPermissionPromptPersistenceToggleName[]; -extern const char kPermissionPromptPersistenceToggleDescription[]; - #endif // defined(OS_MACOSX) // Chrome OS ------------------------------------------------------------------ @@ -1944,21 +1766,12 @@ extern const char kAshDragWindowFromShelfName[]; extern const char kAshDragWindowFromShelfDescription[]; -extern const char kAshEnableDisplayMoveWindowAccelsName[]; -extern const char kAshEnableDisplayMoveWindowAccelsDescription[]; - -extern const char kAshEnablePersistentWindowBoundsName[]; -extern const char kAshEnablePersistentWindowBoundsDescription[]; - extern const char kAshEnablePipRoundedCornersName[]; extern const char kAshEnablePipRoundedCornersDescription[]; extern const char kAshEnableUnifiedDesktopName[]; extern const char kAshEnableUnifiedDesktopDescription[]; -extern const char kAshNotificationStackingBarRedesignName[]; -extern const char kAshNotificationStackingBarRedesignDescription[]; - extern const char kAshSwapSideVolumeButtonsForOrientationName[]; extern const char kAshSwapSideVolumeButtonsForOrientationDescription[]; @@ -1974,18 +1787,12 @@ extern const char kChromeosVideoDecoderName[]; extern const char kChromeosVideoDecoderDescription[]; -extern const char kCrOSContainerName[]; -extern const char kCrOSContainerDescription[]; - extern const char kCrosRegionsModeName[]; extern const char kCrosRegionsModeDescription[]; extern const char kCrosRegionsModeDefault[]; extern const char kCrosRegionsModeOverride[]; extern const char kCrosRegionsModeHide[]; -extern const char kCrostiniAppSearchName[]; -extern const char kCrostiniAppSearchDescription[]; - extern const char kCrostiniPortForwardingName[]; extern const char kCrostiniPortForwardingDescription[]; @@ -2034,9 +1841,6 @@ extern const char kDisableOfficeEditingComponentAppName[]; extern const char kDisableOfficeEditingComponentAppDescription[]; -extern const char kDisableTabletAutohideTitlebarsName[]; -extern const char kDisableTabletAutohideTitlebarsDescription[]; - extern const char kDoubleTapToZoomInTabletModeName[]; extern const char kDoubleTapToZoomInTabletModeDescription[]; @@ -2103,9 +1907,6 @@ extern const char kEnableHeuristicStylusPalmRejectionName[]; extern const char kEnableHeuristicStylusPalmRejectionDescription[]; -extern const char kEnableHomeLauncherName[]; -extern const char kEnableHomeLauncherDescription[]; - extern const char kEnableNeuralStylusPalmRejectionName[]; extern const char kEnableNeuralStylusPalmRejectionDescription[]; @@ -2169,15 +1970,9 @@ extern const char kExperimentalAccessibilitySwitchAccessTextName[]; extern const char kExperimentalAccessibilitySwitchAccessTextDescription[]; -extern const char kFileManagerTouchModeName[]; -extern const char kFileManagerTouchModeDescription[]; - extern const char kFilesNGName[]; extern const char kFilesNGDescription[]; -extern const char kFirstRunUiTransitionsName[]; -extern const char kFirstRunUiTransitionsDescription[]; - extern const char kFsNosymfollowName[]; extern const char kFsNosymfollowDescription[]; @@ -2214,18 +2009,9 @@ extern const char kMediaSessionNotificationsName[]; extern const char kMediaSessionNotificationsDescription[]; -extern const char kNetworkPortalNotificationName[]; -extern const char kNetworkPortalNotificationDescription[]; - extern const char kNewOverviewTabletLayoutName[]; extern const char kNewOverviewTabletLayoutDescription[]; -extern const char kNewZipUnpackerName[]; -extern const char kNewZipUnpackerDescription[]; - -extern const char kPrinterProviderSearchAppName[]; -extern const char kPrinterProviderSearchAppDescription[]; - extern const char kPrintServerUiName[]; extern const char kPrintServerUiDescription[]; @@ -2235,9 +2021,6 @@ extern const char kReleaseNotesName[]; extern const char kReleaseNotesDescription[]; -extern const char kReleaseNotesNotificationName[]; -extern const char kReleaseNotesNotificationDescription[]; - extern const char kSchedulerConfigurationName[]; extern const char kSchedulerConfigurationDescription[]; extern const char kSchedulerConfigurationConservative[]; @@ -2298,9 +2081,6 @@ extern const char kUseFakeDeviceForMediaStreamName[]; extern const char kUseFakeDeviceForMediaStreamDescription[]; -extern const char kUseMonitorColorSpaceName[]; -extern const char kUseMonitorColorSpaceDescription[]; - extern const char kVaapiJpegImageDecodeAccelerationName[]; extern const char kVaapiJpegImageDecodeAccelerationDescription[];
diff --git a/chrome/browser/google/google_update_settings_posix.cc b/chrome/browser/google/google_update_settings_posix.cc index 76cd73c..6835c42 100644 --- a/chrome/browser/google/google_update_settings_posix.cc +++ b/chrome/browser/google/google_update_settings_posix.cc
@@ -10,17 +10,16 @@ #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "base/synchronization/lock.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include "build/build_config.h" #include "chrome/common/chrome_paths.h" #include "components/crash/content/app/crashpad.h" namespace { -base::LazySequencedTaskRunner g_collect_stats_consent_task_runner = - LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER( - base::TaskTraits(base::ThreadPool(), - base::MayBlock(), +base::LazyThreadPoolSequencedTaskRunner g_collect_stats_consent_task_runner = + LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER( + base::TaskTraits(base::MayBlock(), base::TaskPriority::USER_VISIBLE, base::TaskShutdownBehavior::BLOCK_SHUTDOWN)); @@ -49,8 +48,8 @@ // static base::SequencedTaskRunner* GoogleUpdateSettings::CollectStatsConsentTaskRunner() { - // TODO(fdoray): Use LazySequencedTaskRunner::GetRaw() here instead of - // .Get().get() when it's added to the API, http://crbug.com/730170. + // TODO(fdoray): Use LazyThreadPoolSequencedTaskRunner::GetRaw() here instead + // of .Get().get() when it's added to the API, http://crbug.com/730170. return g_collect_stats_consent_task_runner.Get().get(); }
diff --git a/chrome/browser/media_galleries/fileapi/media_file_system_backend.cc b/chrome/browser/media_galleries/fileapi/media_file_system_backend.cc index d8be9220..1c1e3b2a 100644 --- a/chrome/browser/media_galleries/fileapi/media_file_system_backend.cc +++ b/chrome/browser/media_galleries/fileapi/media_file_system_backend.cc
@@ -16,7 +16,7 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include "base/task/post_task.h" #include "base/threading/thread_task_runner_handle.h" #include "build/build_config.h" @@ -57,10 +57,9 @@ const char kMediaGalleryMountPrefix[] = "media_galleries-"; -base::LazySequencedTaskRunner g_media_task_runner = - LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER( - base::TaskTraits(base::ThreadPool(), - base::MayBlock(), +base::LazyThreadPoolSequencedTaskRunner g_media_task_runner = + LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER( + base::TaskTraits(base::MayBlock(), base::TaskPriority::USER_VISIBLE, base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN));
diff --git a/chrome/browser/net/dns_probe_runner.cc b/chrome/browser/net/dns_probe_runner.cc index 9fe42124..e3aa334 100644 --- a/chrome/browser/net/dns_probe_runner.cc +++ b/chrome/browser/net/dns_probe_runner.cc
@@ -95,7 +95,8 @@ network::mojom::ResolveHostParameters::New(); parameters->dns_query_type = net::DnsQueryType::A; parameters->source = net::HostResolverSource::DNS; - parameters->allow_cached_response = false; + parameters->cache_usage = + network::mojom::ResolveHostParameters::CacheUsage::DISALLOWED; // Use transient NIKs - don't want cached responses anyways, so no benefit // from sharing a cache, beyond multiple probes not evicting anything.
diff --git a/chrome/browser/net/network_context_configuration_browsertest.cc b/chrome/browser/net/network_context_configuration_browsertest.cc index e01da50..48edda17 100644 --- a/chrome/browser/net/network_context_configuration_browsertest.cc +++ b/chrome/browser/net/network_context_configuration_browsertest.cc
@@ -14,6 +14,7 @@ #include "base/files/scoped_temp_dir.h" #include "base/guid.h" #include "base/location.h" +#include "base/optional.h" #include "base/path_service.h" #include "base/strings/strcat.h" #include "base/strings/string_util.h" @@ -59,6 +60,7 @@ #include "content/public/test/simple_url_loader_test_helper.h" #include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/system/data_pipe_utils.h" +#include "net/base/address_list.h" #include "net/base/filename_util.h" #include "net/base/host_port_pair.h" #include "net/base/load_flags.h" @@ -67,6 +69,7 @@ #include "net/cookies/cookie_options.h" #include "net/cookies/cookie_util.h" #include "net/dns/mock_host_resolver.h" +#include "net/dns/public/resolve_error_info.h" #include "net/http/http_response_headers.h" #include "net/reporting/reporting_policy.h" #include "net/ssl/ssl_config.h" @@ -85,9 +88,11 @@ #include "services/network/public/cpp/network_connection_tracker.h" #include "services/network/public/cpp/simple_url_loader.h" #include "services/network/public/mojom/cookie_manager.mojom.h" +#include "services/network/public/mojom/host_resolver.mojom.h" #include "services/network/public/mojom/network_service.mojom.h" #include "services/network/public/mojom/url_loader.mojom.h" #include "services/network/public/mojom/url_loader_factory.mojom.h" +#include "services/network/test/test_dns_util.h" #include "services/network/test/test_url_loader_client.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" @@ -104,6 +109,9 @@ namespace { +constexpr char kHostname[] = "foo.test"; +constexpr char kAddress[] = "5.8.13.21"; + const char kCacheRandomPath[] = "/cacherandom"; // Path using a ControllableHttpResponse that's part of the test fixture. @@ -236,6 +244,8 @@ // Used in a bunch of proxy tests. Should not resolve. host_resolver()->AddSimulatedFailure("does.not.resolve.test"); + host_resolver()->AddRule(kHostname, kAddress); + controllable_http_response_ = std::make_unique<net::test_server::ControllableHttpResponse>( embedded_test_server(), kControllablePath); @@ -1109,6 +1119,54 @@ } } +// Make sure that NetworkContexts have separate DNS caches. +IN_PROC_BROWSER_TEST_P(NetworkContextConfigurationBrowserTest, + DnsCacheIsolation) { + net::NetworkIsolationKey network_isolation_key = + net::NetworkIsolationKey::CreateTransient(); + net::HostPortPair host_port_pair(kHostname, 0); + // Resolve |host_port_pair|, which should succeed and put it in the + // NetworkContext's cache. + network::DnsLookupResult result = + network::BlockingDnsLookup(network_context(), host_port_pair, + nullptr /* params */, network_isolation_key); + EXPECT_EQ(net::OK, result.error); + ASSERT_TRUE(result.resolved_addresses.has_value()); + ASSERT_EQ(1u, result.resolved_addresses->size()); + EXPECT_EQ(kAddress, + result.resolved_addresses.value()[0].ToStringWithoutPort()); + // Make a cache-only request for the same hostname, for each other network + // context, and make sure no result is returned. + ForEachOtherContext( + base::BindLambdaForTesting([&](NetworkContextType network_context_type) { + network::mojom::ResolveHostParametersPtr params = + network::mojom::ResolveHostParameters::New(); + // Cache only lookup. + params->cache_usage = + network::mojom::ResolveHostParameters::CacheUsage::STALE_ALLOWED; + params->source = net::HostResolverSource::LOCAL_ONLY; + network::DnsLookupResult result = network::BlockingDnsLookup( + GetNetworkContextForContextType(network_context_type), + host_port_pair, std::move(params), network_isolation_key); + EXPECT_EQ(net::ERR_NAME_NOT_RESOLVED, result.error); + })); + // Do a cache-only lookup using the original network context, which should + // return the same result it initially did. + network::mojom::ResolveHostParametersPtr params = + network::mojom::ResolveHostParameters::New(); + // Cache only lookup. + params->source = net::HostResolverSource::LOCAL_ONLY; + params->cache_usage = + network::mojom::ResolveHostParameters::CacheUsage::STALE_ALLOWED; + result = network::BlockingDnsLookup(network_context(), host_port_pair, + std::move(params), network_isolation_key); + EXPECT_EQ(net::OK, result.error); + ASSERT_TRUE(result.resolved_addresses.has_value()); + ASSERT_EQ(1u, result.resolved_addresses->size()); + EXPECT_EQ(kAddress, + result.resolved_addresses.value()[0].ToStringWithoutPort()); +} + // Visits a URL with an HSTS header, and makes sure it is respected. IN_PROC_BROWSER_TEST_P(NetworkContextConfigurationBrowserTest, PRE_Hsts) { if (IsRestartStateWithInProcessNetworkService())
diff --git a/chrome/browser/optimization_guide/optimization_guide_hints_manager_unittest.cc b/chrome/browser/optimization_guide/optimization_guide_hints_manager_unittest.cc index 50b0dbf..e9a0ce7 100644 --- a/chrome/browser/optimization_guide/optimization_guide_hints_manager_unittest.cc +++ b/chrome/browser/optimization_guide/optimization_guide_hints_manager_unittest.cc
@@ -162,18 +162,22 @@ kFetchSuccessWithURLHints = 3, }; -// A mock class implementation of HintsFetcher. +// A mock class implementation of HintsFetcher. It will iterate through the +// provided fetch states each time it is called. If it reaches the end of the +// loop, it will just continue using the last fetch state. class TestHintsFetcher : public optimization_guide::HintsFetcher { public: TestHintsFetcher( scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, GURL optimization_guide_service_url, PrefService* pref_service, - HintsFetcherEndState fetch_state) + const std::vector<HintsFetcherEndState>& fetch_states) : HintsFetcher(url_loader_factory, optimization_guide_service_url, pref_service), - fetch_state_(fetch_state) {} + fetch_states_(fetch_states) { + DCHECK(!fetch_states_.empty()); + } bool FetchOptimizationGuideServiceHints( const std::vector<std::string>& hosts, @@ -183,8 +187,12 @@ optimization_guide::proto::RequestContext request_context, optimization_guide::HintsFetchedCallback hints_fetched_callback) override { + HintsFetcherEndState fetch_state = + num_fetches_requested_ < static_cast<int>(fetch_states_.size()) + ? fetch_states_[num_fetches_requested_] + : fetch_states_.back(); num_fetches_requested_++; - switch (fetch_state_) { + switch (fetch_state) { case HintsFetcherEndState::kFetchFailed: std::move(hints_fetched_callback).Run(base::nullopt); return false; @@ -207,7 +215,7 @@ int num_fetches_requested() { return num_fetches_requested_; } private: - HintsFetcherEndState fetch_state_; + std::vector<HintsFetcherEndState> fetch_states_; int num_fetches_requested_ = 0; }; @@ -219,20 +227,20 @@ scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, GURL optimization_guide_service_url, PrefService* pref_service, - HintsFetcherEndState fetch_state) + const std::vector<HintsFetcherEndState> fetch_states) : HintsFetcherFactory(url_loader_factory, optimization_guide_service_url, pref_service), - fetch_state_(fetch_state) {} + fetch_states_(fetch_states) {} std::unique_ptr<optimization_guide::HintsFetcher> BuildInstance() override { return std::make_unique<TestHintsFetcher>(url_loader_factory_, optimization_guide_service_url_, - pref_service_, fetch_state_); + pref_service_, fetch_states_); } private: - HintsFetcherEndState fetch_state_; + std::vector<HintsFetcherEndState> fetch_states_; }; class OptimizationGuideHintsManagerTest @@ -343,10 +351,11 @@ } std::unique_ptr<optimization_guide::HintsFetcherFactory> - BuildTestHintsFetcherFactory(HintsFetcherEndState fetch_state) { + BuildTestHintsFetcherFactory( + const std::vector<HintsFetcherEndState>& fetch_states) { return std::make_unique<TestHintsFetcherFactory>( url_loader_factory_, GURL("https://hintsserver.com"), pref_service(), - fetch_state); + fetch_states); } void MoveClockForwardBy(base::TimeDelta time_delta) { @@ -1861,7 +1870,7 @@ /*top_host_provider=*/nullptr); hints_manager()->SetHintsFetcherFactoryForTesting( BuildTestHintsFetcherFactory( - HintsFetcherEndState::kFetchSuccessWithHostHints)); + {HintsFetcherEndState::kFetchSuccessWithHostHints})); InitializeWithDefaultConfig("1.0.0"); // Force timer to expire and schedule a hints fetch. @@ -1879,7 +1888,7 @@ hints_manager()->SetHintsFetcherFactoryForTesting( BuildTestHintsFetcherFactory( - HintsFetcherEndState::kFetchSuccessWithHostHints)); + {HintsFetcherEndState::kFetchSuccessWithHostHints})); InitializeWithDefaultConfig("1.0.0"); // Force timer to expire and schedule a hints fetch. @@ -1901,7 +1910,7 @@ hints_manager()->SetHintsFetcherFactoryForTesting( BuildTestHintsFetcherFactory( - HintsFetcherEndState::kFetchSuccessWithHostHints)); + {HintsFetcherEndState::kFetchSuccessWithHostHints})); InitializeWithDefaultConfig("1.0.0"); // Force timer to expire and schedule a hints fetch but the fetch is not made. @@ -1924,7 +1933,7 @@ {optimization_guide::proto::DEFER_ALL_SCRIPT}); hints_manager()->SetHintsFetcherFactoryForTesting( BuildTestHintsFetcherFactory( - HintsFetcherEndState::kFetchSuccessWithHostHints)); + {HintsFetcherEndState::kFetchSuccessWithHostHints})); InitializeWithDefaultConfig("1.0.0"); // Force timer to expire and schedule a hints fetch. @@ -1947,7 +1956,7 @@ {optimization_guide::proto::DEFER_ALL_SCRIPT}); hints_manager()->SetHintsFetcherFactoryForTesting( BuildTestHintsFetcherFactory( - HintsFetcherEndState::kFetchSuccessWithNoHints)); + {HintsFetcherEndState::kFetchSuccessWithNoHints})); InitializeWithDefaultConfig("1.0.0"); // Force timer to expire and schedule a hints fetch. @@ -1974,7 +1983,9 @@ CreateServiceAndHintsManager({optimization_guide::proto::DEFER_ALL_SCRIPT}, top_host_provider.get()); hints_manager()->SetHintsFetcherFactoryForTesting( - BuildTestHintsFetcherFactory(HintsFetcherEndState::kFetchFailed)); + BuildTestHintsFetcherFactory( + {HintsFetcherEndState::kFetchFailed, + HintsFetcherEndState::kFetchSuccessWithHostHints})); InitializeWithDefaultConfig("1.0.0"); // Force timer to expire and schedule a hints fetch - first time. @@ -2004,7 +2015,7 @@ {optimization_guide::proto::DEFER_ALL_SCRIPT}); hints_manager()->SetHintsFetcherFactoryForTesting( BuildTestHintsFetcherFactory( - HintsFetcherEndState::kFetchSuccessWithHostHints)); + {HintsFetcherEndState::kFetchSuccessWithHostHints})); InitializeWithDefaultConfig("1.0.0"); // Force timer to expire and schedule a hints fetch that succeeds. @@ -2224,7 +2235,7 @@ InitializeWithDefaultConfig("1.0.0.0"); hints_manager()->SetHintsFetcherFactoryForTesting( BuildTestHintsFetcherFactory( - HintsFetcherEndState::kFetchSuccessWithURLHints)); + {HintsFetcherEndState::kFetchSuccessWithURLHints})); // Set ECT estimate so hint is activated. hints_manager()->OnEffectiveConnectionTypeChanged( @@ -2263,7 +2274,7 @@ InitializeWithDefaultConfig("1.0.0.0"); hints_manager()->SetHintsFetcherFactoryForTesting( BuildTestHintsFetcherFactory( - HintsFetcherEndState::kFetchSuccessWithURLHints)); + {HintsFetcherEndState::kFetchSuccessWithURLHints})); // Set ECT estimate so fetch is activated. hints_manager()->OnEffectiveConnectionTypeChanged( @@ -2385,7 +2396,7 @@ hints_manager()->SetHintsFetcherFactoryForTesting( BuildTestHintsFetcherFactory( - HintsFetcherEndState::kFetchSuccessWithNoHints)); + {HintsFetcherEndState::kFetchSuccessWithNoHints})); // Set ECT estimate so fetch is activated. hints_manager()->OnEffectiveConnectionTypeChanged( @@ -2415,7 +2426,7 @@ InitializeWithDefaultConfig("1.0.0.0"); hints_manager()->SetHintsFetcherFactoryForTesting( - BuildTestHintsFetcherFactory(HintsFetcherEndState::kFetchFailed)); + BuildTestHintsFetcherFactory({HintsFetcherEndState::kFetchFailed})); // Set ECT estimate so fetch is activated. hints_manager()->OnEffectiveConnectionTypeChanged( @@ -2446,7 +2457,7 @@ hints_manager()->SetHintsFetcherFactoryForTesting( BuildTestHintsFetcherFactory( - HintsFetcherEndState::kFetchSuccessWithURLHints)); + {HintsFetcherEndState::kFetchSuccessWithURLHints})); // Set ECT estimate so fetch is activated. hints_manager()->OnEffectiveConnectionTypeChanged( @@ -2489,7 +2500,7 @@ // Make sure both URL-Keyed and host-keyed hints are processed and cached. hints_manager()->SetHintsFetcherFactoryForTesting( BuildTestHintsFetcherFactory( - HintsFetcherEndState::kFetchSuccessWithURLHints)); + {HintsFetcherEndState::kFetchSuccessWithURLHints})); std::unique_ptr<content::MockNavigationHandle> navigation_handle = CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver( url_with_url_keyed_hint()); @@ -2524,7 +2535,7 @@ // Make sure both URL-Keyed and host-keyed hints are processed and cached. hints_manager()->SetHintsFetcherFactoryForTesting( BuildTestHintsFetcherFactory( - HintsFetcherEndState::kFetchSuccessWithURLHints)); + {HintsFetcherEndState::kFetchSuccessWithURLHints})); std::unique_ptr<content::MockNavigationHandle> navigation_handle = CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver( url_with_url_keyed_hint()); @@ -2558,7 +2569,7 @@ hints_manager()->SetHintsFetcherFactoryForTesting( BuildTestHintsFetcherFactory( - HintsFetcherEndState::kFetchSuccessWithNoHints)); + {HintsFetcherEndState::kFetchSuccessWithNoHints})); std::unique_ptr<content::MockNavigationHandle> navigation_handle = CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver( url_without_hints()); @@ -2600,7 +2611,7 @@ url_without_hints()); hints_manager()->SetHintsFetcherFactoryForTesting( BuildTestHintsFetcherFactory( - HintsFetcherEndState::kFetchSuccessWithHostHints)); + {HintsFetcherEndState::kFetchSuccessWithHostHints})); hints_manager()->OnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing()); optimization_guide::OptimizationMetadata optimization_metadata; @@ -2638,7 +2649,7 @@ base::HistogramTester histogram_tester; hints_manager()->SetHintsFetcherFactoryForTesting( BuildTestHintsFetcherFactory( - HintsFetcherEndState::kFetchSuccessWithHostHints)); + {HintsFetcherEndState::kFetchSuccessWithHostHints})); hints_manager()->OnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing()); histogram_tester.ExpectUniqueSample( @@ -2654,7 +2665,7 @@ base::HistogramTester histogram_tester; hints_manager()->SetHintsFetcherFactoryForTesting( BuildTestHintsFetcherFactory( - HintsFetcherEndState::kFetchSuccessWithHostHints)); + {HintsFetcherEndState::kFetchSuccessWithHostHints})); hints_manager()->OnNavigationStartOrRedirect(navigation_handle.get(), base::DoNothing()); histogram_tester.ExpectUniqueSample( @@ -2682,7 +2693,7 @@ net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_SLOW_2G); hints_manager()->SetHintsFetcherFactoryForTesting( BuildTestHintsFetcherFactory( - HintsFetcherEndState::kFetchSuccessWithNoHints)); + {HintsFetcherEndState::kFetchSuccessWithNoHints})); // Attempt to fetch a hint but initiate the next navigation right away to // simulate being mid-fetch. @@ -2733,7 +2744,7 @@ net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_SLOW_2G); hints_manager()->SetHintsFetcherFactoryForTesting( BuildTestHintsFetcherFactory( - HintsFetcherEndState::kFetchSuccessWithURLHints)); + {HintsFetcherEndState::kFetchSuccessWithURLHints})); std::unique_ptr<content::MockNavigationHandle> navigation_handle = CreateMockNavigationHandleWithOptimizationGuideWebContentsObserver(
diff --git a/chrome/browser/permissions/permission_decision_auto_blocker.cc b/chrome/browser/permissions/permission_decision_auto_blocker.cc index f21f928..58b23a84 100644 --- a/chrome/browser/permissions/permission_decision_auto_blocker.cc +++ b/chrome/browser/permissions/permission_decision_auto_blocker.cc
@@ -330,6 +330,38 @@ : ignore_start_time; } +std::set<GURL> PermissionDecisionAutoBlocker::GetEmbargoedOrigins( + ContentSettingsType content_type) { + return GetEmbargoedOrigins(std::vector<ContentSettingsType>{content_type}); +} + +std::set<GURL> PermissionDecisionAutoBlocker::GetEmbargoedOrigins( + std::vector<ContentSettingsType> content_types) { + auto* map = HostContentSettingsMapFactory::GetForProfile(profile_); + DCHECK(map); + ContentSettingsForOneType embargo_settings; + map->GetSettingsForOneType(ContentSettingsType::PERMISSION_AUTOBLOCKER_DATA, + std::string(), &embargo_settings); + std::set<GURL> origins; + for (const auto& e : embargo_settings) { + for (auto content_type : content_types) { + if (!permissions::PermissionUtil::IsPermission(content_type)) + continue; + const GURL url(e.primary_pattern.ToString()); + permissions::PermissionResult result = + GetEmbargoResult(map, url, content_type, clock_->Now()); + if (result.source == + permissions::PermissionStatusSource::MULTIPLE_DISMISSALS || + result.source == + permissions::PermissionStatusSource::MULTIPLE_IGNORES) { + origins.insert(url); + break; + } + } + } + return origins; +} + int PermissionDecisionAutoBlocker::GetDismissCount( const GURL& url, ContentSettingsType permission) {
diff --git a/chrome/browser/permissions/permission_decision_auto_blocker.h b/chrome/browser/permissions/permission_decision_auto_blocker.h index 22b8f3b6..9a1f6ac1 100644 --- a/chrome/browser/permissions/permission_decision_auto_blocker.h +++ b/chrome/browser/permissions/permission_decision_auto_blocker.h
@@ -91,6 +91,14 @@ // type at |url|. int GetIgnoreCount(const GURL& url, ContentSettingsType permission); + // Returns a set of urls currently under embargo for |content_type|. + std::set<GURL> GetEmbargoedOrigins(ContentSettingsType content_type); + + // Returns a set of urls currently under embargo for the provided + // |content_type| types. + std::set<GURL> GetEmbargoedOrigins( + std::vector<ContentSettingsType> content_types); + // Records that a dismissal of a prompt for |permission| was made. If the // total number of dismissals exceeds a threshhold and // features::kBlockPromptsIfDismissedOften is enabled, it will place |url|
diff --git a/chrome/browser/permissions/permission_decision_auto_blocker_unittest.cc b/chrome/browser/permissions/permission_decision_auto_blocker_unittest.cc index d08aa89..d8e8db6d 100644 --- a/chrome/browser/permissions/permission_decision_auto_blocker_unittest.cc +++ b/chrome/browser/permissions/permission_decision_auto_blocker_unittest.cc
@@ -369,6 +369,57 @@ autoblocker()->GetIgnoreCount(url, ContentSettingsType::PLUGINS)); } +// Check that GetEmbargoedOrigins only returns origins where embargo is the +// effective permission enforcement mechanism. +TEST_F(PermissionDecisionAutoBlockerUnitTest, CheckEmbargoedOrigins) { + GURL url1("https://www.google.com"); + GURL url2("https://www.google.com:8443"); + std::vector<ContentSettingsType> content_types = { + ContentSettingsType::GEOLOCATION, ContentSettingsType::NOTIFICATIONS}; + std::set<GURL> origins; + clock()->SetNow(base::Time::Now()); + + EXPECT_EQ(0UL, autoblocker()->GetEmbargoedOrigins(content_types).size()); + + // Place both origins under embargo and verify. + EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( + url1, ContentSettingsType::GEOLOCATION, false)); + EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( + url1, ContentSettingsType::GEOLOCATION, false)); + EXPECT_TRUE(autoblocker()->RecordDismissAndEmbargo( + url1, ContentSettingsType::GEOLOCATION, false)); + EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( + url2, ContentSettingsType::NOTIFICATIONS, false)); + EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( + url2, ContentSettingsType::NOTIFICATIONS, false)); + EXPECT_TRUE(autoblocker()->RecordDismissAndEmbargo( + url2, ContentSettingsType::NOTIFICATIONS, false)); + + origins = autoblocker()->GetEmbargoedOrigins(content_types); + EXPECT_EQ(2UL, origins.size()); + EXPECT_EQ(1UL, origins.count(url1)); + EXPECT_EQ(1UL, origins.count(url2)); + + // Check no leakage between content types + origins = + autoblocker()->GetEmbargoedOrigins(ContentSettingsType::GEOLOCATION); + EXPECT_EQ(1UL, origins.count(url1)); + origins = + autoblocker()->GetEmbargoedOrigins(ContentSettingsType::NOTIFICATIONS); + EXPECT_EQ(1UL, origins.count(url2)); + + // Remove an embargo and confirm it's removed from origins + autoblocker()->RemoveEmbargoByUrl(url1, ContentSettingsType::GEOLOCATION); + origins = autoblocker()->GetEmbargoedOrigins(content_types); + EXPECT_EQ(1UL, origins.size()); + EXPECT_EQ(1UL, origins.count(url2)); + + // Expire the remaining embargo and confirm the origin is removed + clock()->Advance(base::TimeDelta::FromDays(8)); + origins = autoblocker()->GetEmbargoedOrigins(content_types); + EXPECT_EQ(0UL, origins.size()); +} + // Check that GetEmbargoResult returns the correct value when the embargo is set // and expires. TEST_F(PermissionDecisionAutoBlockerUnitTest, CheckEmbargoStatus) {
diff --git a/chrome/browser/prerender/isolated/isolated_prerender_browsertest.cc b/chrome/browser/prerender/isolated/isolated_prerender_browsertest.cc index 23d27ad1..32b7999 100644 --- a/chrome/browser/prerender/isolated/isolated_prerender_browsertest.cc +++ b/chrome/browser/prerender/isolated/isolated_prerender_browsertest.cc
@@ -25,6 +25,7 @@ #include "chrome/test/base/chrome_render_view_host_test_harness.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" +#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/common/resource_type.h" #include "content/public/test/browser_test_base.h" @@ -77,6 +78,12 @@ cmd->AppendSwitchASCII("host-rules", "MAP * 127.0.0.1"); } + void SetDataSaverEnabled(bool enabled) { + data_reduction_proxy::DataReductionProxySettings:: + SetDataSaverEnabledForTesting(browser()->profile()->GetPrefs(), + enabled); + } + std::unique_ptr<prerender::PrerenderHandle> StartPrerender(const GURL& url) { prerender::PrerenderManager* prerender_manager = prerender::PrerenderManagerFactory::GetForBrowserContext( @@ -146,6 +153,8 @@ IN_PROC_BROWSER_TEST_F(IsolatedPrerenderBrowserTest, DISABLE_ON_WIN_MAC_CHROMEOS(PrerenderIsIsolated)) { + SetDataSaverEnabled(true); + base::HistogramTester histogram_tester; ASSERT_TRUE(content::SetCookie(browser()->profile(), GetOriginServerURL("/"),
diff --git a/chrome/browser/prerender/isolated/isolated_prerender_params.cc b/chrome/browser/prerender/isolated/isolated_prerender_params.cc index 3c56f2c..44fc932 100644 --- a/chrome/browser/prerender/isolated/isolated_prerender_params.cc +++ b/chrome/browser/prerender/isolated/isolated_prerender_params.cc
@@ -9,6 +9,12 @@ #include "base/feature_list.h" #include "base/metrics/field_trial_params.h" #include "chrome/browser/prerender/isolated/isolated_prerender_features.h" +#include "chrome/common/chrome_features.h" +#include "components/data_reduction_proxy/core/common/data_reduction_proxy_params.h" + +bool IsolatedPrerenderIsEnabled() { + return base::FeatureList::IsEnabled(features::kIsolatePrerenders); +} base::Optional<GURL> IsolatedPrerenderProxyServer() { if (!base::FeatureList::IsEnabled(features::kIsolatedPrerenderUsesProxy)) @@ -20,3 +26,13 @@ return base::nullopt; return url; } + +bool IsolatedPrerenderShouldReplaceDataReductionCustomProxy() { + bool replace = + data_reduction_proxy::params::IsIncludedInHoldbackFieldTrial() && + IsolatedPrerenderIsEnabled() && + IsolatedPrerenderProxyServer().has_value(); + // TODO(robertogden): Remove this once all pieces are landed. + DCHECK(!replace); + return replace; +}
diff --git a/chrome/browser/prerender/isolated/isolated_prerender_params.h b/chrome/browser/prerender/isolated/isolated_prerender_params.h index 67f989d..7ef53199 100644 --- a/chrome/browser/prerender/isolated/isolated_prerender_params.h +++ b/chrome/browser/prerender/isolated/isolated_prerender_params.h
@@ -8,7 +8,14 @@ #include "base/optional.h" #include "url/gurl.h" +// Returns true if the Isolated Prerender feature is enabled. +bool IsolatedPrerenderIsEnabled(); + // Returns the URL of the proxy server to use in isolated prerenders, if any. base::Optional<GURL> IsolatedPrerenderProxyServer(); +// Returns true if the proxy for Isolated Prerenders should replace the DRP +// custom proxy. +bool IsolatedPrerenderShouldReplaceDataReductionCustomProxy(); + #endif // CHROME_BROWSER_PRERENDER_ISOLATED_ISOLATED_PRERENDER_PARAMS_H_
diff --git a/chrome/browser/prerender/isolated/isolated_prerender_service.cc b/chrome/browser/prerender/isolated/isolated_prerender_service.cc new file mode 100644 index 0000000..03087f4 --- /dev/null +++ b/chrome/browser/prerender/isolated/isolated_prerender_service.cc
@@ -0,0 +1,36 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/prerender/isolated/isolated_prerender_service.h" + +#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.h" +#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings_factory.h" +#include "chrome/browser/prerender/isolated/isolated_prerender_params.h" +#include "chrome/browser/prerender/isolated/isolated_prerender_proxy_configurator.h" +#include "chrome/browser/profiles/profile.h" + +IsolatedPrerenderService::IsolatedPrerenderService(Profile* profile) + : profile_(profile), + proxy_configurator_( + std::make_unique<IsolatedPrerenderProxyConfigurator>()) { + DataReductionProxyChromeSettings* drp_settings = + DataReductionProxyChromeSettingsFactory::GetForBrowserContext(profile_); + if (drp_settings) + drp_settings->AddDataReductionProxySettingsObserver(this); +} + +IsolatedPrerenderService::~IsolatedPrerenderService() { + DataReductionProxyChromeSettings* drp_settings = + DataReductionProxyChromeSettingsFactory::GetForBrowserContext(profile_); + if (drp_settings) + drp_settings->RemoveDataReductionProxySettingsObserver(this); +} + +void IsolatedPrerenderService::OnProxyRequestHeadersChanged( + const net::HttpRequestHeaders& headers) { + proxy_configurator_->UpdateTunnelHeaders(headers); +} + +void IsolatedPrerenderService::OnSettingsInitialized() {} +void IsolatedPrerenderService::OnDataSaverEnabledChanged(bool enabled) {}
diff --git a/chrome/browser/prerender/isolated/isolated_prerender_service.h b/chrome/browser/prerender/isolated/isolated_prerender_service.h new file mode 100644 index 0000000..946b5b1 --- /dev/null +++ b/chrome/browser/prerender/isolated/isolated_prerender_service.h
@@ -0,0 +1,45 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_PRERENDER_ISOLATED_ISOLATED_PRERENDER_SERVICE_H_ +#define CHROME_BROWSER_PRERENDER_ISOLATED_ISOLATED_PRERENDER_SERVICE_H_ + +#include <memory> + +#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h" +#include "components/keyed_service/core/keyed_service.h" + +class Profile; +class IsolatedPrerenderProxyConfigurator; + +// This service owns browser-level objects used in Isolated Prerenders. +class IsolatedPrerenderService + : public KeyedService, + public data_reduction_proxy::DataReductionProxySettingsObserver { + public: + explicit IsolatedPrerenderService(Profile* profile); + ~IsolatedPrerenderService() override; + + IsolatedPrerenderProxyConfigurator* proxy_configurator() { + return proxy_configurator_.get(); + } + + private: + // data_reduction_proxy::DataReductionProxySettingsObserver: + void OnProxyRequestHeadersChanged( + const net::HttpRequestHeaders& headers) override; + void OnSettingsInitialized() override; + void OnDataSaverEnabledChanged(bool enabled) override; + + // The current profile, not owned. + Profile* profile_; + + // The custom proxy configurator for Isolated Prerenders. + std::unique_ptr<IsolatedPrerenderProxyConfigurator> proxy_configurator_; + + IsolatedPrerenderService(const IsolatedPrerenderService&) = delete; + IsolatedPrerenderService& operator=(const IsolatedPrerenderService&) = delete; +}; + +#endif // CHROME_BROWSER_PRERENDER_ISOLATED_ISOLATED_PRERENDER_SERVICE_H_
diff --git a/chrome/browser/prerender/isolated/isolated_prerender_service_factory.cc b/chrome/browser/prerender/isolated/isolated_prerender_service_factory.cc new file mode 100644 index 0000000..25e2017 --- /dev/null +++ b/chrome/browser/prerender/isolated/isolated_prerender_service_factory.cc
@@ -0,0 +1,40 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/prerender/isolated/isolated_prerender_service_factory.h" + +#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings_factory.h" +#include "chrome/browser/prerender/isolated/isolated_prerender_service.h" +#include "chrome/browser/profiles/profile.h" +#include "components/keyed_service/content/browser_context_dependency_manager.h" +#include "content/public/browser/browser_context.h" + +// static +IsolatedPrerenderService* IsolatedPrerenderServiceFactory::GetForProfile( + Profile* profile) { + return static_cast<IsolatedPrerenderService*>( + GetInstance()->GetServiceForBrowserContext(profile, true)); +} + +// static +IsolatedPrerenderServiceFactory* +IsolatedPrerenderServiceFactory::GetInstance() { + return base::Singleton<IsolatedPrerenderServiceFactory>::get(); +} + +IsolatedPrerenderServiceFactory::IsolatedPrerenderServiceFactory() + : BrowserContextKeyedServiceFactory( + "IsolatedPrerenderService", + BrowserContextDependencyManager::GetInstance()) { + DependsOn(DataReductionProxyChromeSettingsFactory::GetInstance()); +} + +IsolatedPrerenderServiceFactory::~IsolatedPrerenderServiceFactory() = default; + +KeyedService* IsolatedPrerenderServiceFactory::BuildServiceInstanceFor( + content::BrowserContext* browser_context) const { + DCHECK(!browser_context->IsOffTheRecord()); + return new IsolatedPrerenderService( + Profile::FromBrowserContext(browser_context)); +}
diff --git a/chrome/browser/prerender/isolated/isolated_prerender_service_factory.h b/chrome/browser/prerender/isolated/isolated_prerender_service_factory.h new file mode 100644 index 0000000..feec909 --- /dev/null +++ b/chrome/browser/prerender/isolated/isolated_prerender_service_factory.h
@@ -0,0 +1,38 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_PRERENDER_ISOLATED_ISOLATED_PRERENDER_SERVICE_FACTORY_H_ +#define CHROME_BROWSER_PRERENDER_ISOLATED_ISOLATED_PRERENDER_SERVICE_FACTORY_H_ + +#include "base/memory/singleton.h" +#include "components/keyed_service/content/browser_context_keyed_service_factory.h" + +class Profile; +class IsolatedPrerenderService; + +class IsolatedPrerenderServiceFactory + : public BrowserContextKeyedServiceFactory { + public: + // Returns the IsolatedPrerender for |profile|. + static IsolatedPrerenderService* GetForProfile(Profile* profile); + + static IsolatedPrerenderServiceFactory* GetInstance(); + + private: + friend struct base::DefaultSingletonTraits<IsolatedPrerenderServiceFactory>; + + IsolatedPrerenderServiceFactory(); + ~IsolatedPrerenderServiceFactory() override; + + // BrowserContextKeyedServiceFactory: + KeyedService* BuildServiceInstanceFor( + content::BrowserContext* profile) const override; + + IsolatedPrerenderServiceFactory(const IsolatedPrerenderServiceFactory&) = + delete; + IsolatedPrerenderServiceFactory& operator=( + const IsolatedPrerenderServiceFactory&) = delete; +}; + +#endif // CHROME_BROWSER_PRERENDER_ISOLATED_ISOLATED_PRERENDER_SERVICE_FACTORY_H_
diff --git a/chrome/browser/prerender/isolated/isolated_prerender_tab_helper.cc b/chrome/browser/prerender/isolated/isolated_prerender_tab_helper.cc index 7fb321a..ee6edfa0 100644 --- a/chrome/browser/prerender/isolated/isolated_prerender_tab_helper.cc +++ b/chrome/browser/prerender/isolated/isolated_prerender_tab_helper.cc
@@ -11,6 +11,7 @@ #include "chrome/browser/navigation_predictor/navigation_predictor_keyed_service_factory.h" #include "chrome/browser/prerender/isolated/isolated_prerender_features.h" #include "chrome/browser/profiles/profile.h" +#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h" #include "components/google/core/common/google_util.h" #include "components/search_engines/template_url_service.h" #include "content/public/browser/browser_context.h" @@ -222,6 +223,13 @@ return; } + // DataSaver must be enabled by the user to use this feature. + if (!data_reduction_proxy::DataReductionProxySettings:: + IsDataSaverEnabledByUser(profile_->IsOffTheRecord(), + profile_->GetPrefs())) { + return; + } + if (!prediction.has_value()) { return; }
diff --git a/chrome/browser/prerender/isolated/isolated_prerender_tab_helper_unittest.cc b/chrome/browser/prerender/isolated/isolated_prerender_tab_helper_unittest.cc index 211e1958..1908cb5 100644 --- a/chrome/browser/prerender/isolated/isolated_prerender_tab_helper_unittest.cc +++ b/chrome/browser/prerender/isolated/isolated_prerender_tab_helper_unittest.cc
@@ -18,6 +18,7 @@ #include "chrome/browser/prerender/isolated/isolated_prerender_features.h" #include "chrome/browser/prerender/isolated/prefetched_response_container.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h" +#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/storage_partition.h" #include "content/public/browser/web_contents.h" @@ -63,6 +64,13 @@ IsolatedPrerenderTabHelper::FromWebContents(web_contents()) ->SetURLLoaderFactoryForTesting(test_shared_loader_factory_); + + SetDataSaverEnabled(true); + } + + void SetDataSaverEnabled(bool enabled) { + data_reduction_proxy::DataReductionProxySettings:: + SetDataSaverEnabledForTesting(profile()->GetPrefs(), enabled); } void MakeNavigationPrediction(const content::WebContents* web_contents, @@ -175,6 +183,20 @@ EXPECT_EQ(RequestCount(), 0); } +TEST_F(IsolatedPrerenderTabHelperTest, DataSaverDisabled) { + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitAndEnableFeature( + features::kPrefetchSRPNavigationPredictions_HTMLOnly); + + SetDataSaverEnabled(false); + + GURL doc_url("https://www.google.com/search?q=cats"); + GURL prediction_url("https://www.cat-food.com/"); + MakeNavigationPrediction(web_contents(), doc_url, {prediction_url}); + + EXPECT_EQ(RequestCount(), 0); +} + TEST_F(IsolatedPrerenderTabHelperTest, GoogleSRPOnly) { base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitAndEnableFeature(
diff --git a/chrome/browser/prerender/isolated/isolated_prerender_url_loader_interceptor.cc b/chrome/browser/prerender/isolated/isolated_prerender_url_loader_interceptor.cc index db93caea7..66d87e3 100644 --- a/chrome/browser/prerender/isolated/isolated_prerender_url_loader_interceptor.cc +++ b/chrome/browser/prerender/isolated/isolated_prerender_url_loader_interceptor.cc
@@ -12,6 +12,7 @@ #include "chrome/browser/prerender/prerender_manager.h" #include "chrome/browser/prerender/prerender_manager_factory.h" #include "chrome/browser/profiles/profile.h" +#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/storage_partition.h" #include "content/public/browser/web_contents.h" @@ -25,6 +26,13 @@ if (!base::FeatureList::IsEnabled(features::kIsolatePrerenders)) return false; + // Lite Mode must be enabled for this feature to be enabled. + Profile* profile = Profile::FromBrowserContext(browser_context); + bool ds_enabled = data_reduction_proxy::DataReductionProxySettings:: + IsDataSaverEnabledByUser(profile->IsOffTheRecord(), profile->GetPrefs()); + if (!ds_enabled) + return false; + // TODO(crbug.com/1023486): Add other triggering checks. content::WebContents* web_contents =
diff --git a/chrome/browser/prerender/isolated/isolated_prerender_url_loader_interceptor_unittest.cc b/chrome/browser/prerender/isolated/isolated_prerender_url_loader_interceptor_unittest.cc index fb5f6475..594fcca 100644 --- a/chrome/browser/prerender/isolated/isolated_prerender_url_loader_interceptor_unittest.cc +++ b/chrome/browser/prerender/isolated/isolated_prerender_url_loader_interceptor_unittest.cc
@@ -14,6 +14,7 @@ #include "chrome/browser/prerender/prerender_manager.h" #include "chrome/browser/prerender/prerender_manager_factory.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h" +#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h" #include "content/public/browser/web_contents.h" #include "content/public/common/resource_type.h" #include "testing/gtest/include/gtest/gtest.h" @@ -48,6 +49,16 @@ IsolatedPrerenderURLLoaderInterceptorTest() = default; ~IsolatedPrerenderURLLoaderInterceptorTest() override = default; + void SetDataSaverEnabled(bool enabled) { + data_reduction_proxy::DataReductionProxySettings:: + SetDataSaverEnabledForTesting(profile()->GetPrefs(), enabled); + } + + void SetUp() override { + ChromeRenderViewHostTestHarness::SetUp(); + SetDataSaverEnabled(true); + } + void TearDown() override { prerender::PrerenderManager* prerender_manager = prerender::PrerenderManagerFactory::GetForBrowserContext(profile()); @@ -150,6 +161,39 @@ EXPECT_FALSE(was_intercepted().value()); } +TEST_F(IsolatedPrerenderURLLoaderInterceptorTest, + DISABLE_ASAN(DataSaverDisabled)) { + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitAndEnableFeature(features::kIsolatePrerenders); + + SetDataSaverEnabled(false); + + std::unique_ptr<prerender::PrerenderHandle> handle = + StartPrerender(TestURL()); + + std::unique_ptr<IsolatedPrerenderURLLoaderInterceptor> interceptor = + std::make_unique<IsolatedPrerenderURLLoaderInterceptor>( + handle->contents() + ->prerender_contents() + ->GetMainFrame() + ->GetFrameTreeNodeId()); + + network::ResourceRequest request; + request.url = TestURL(); + request.resource_type = static_cast<int>(content::ResourceType::kMainFrame); + request.method = "GET"; + + interceptor->MaybeCreateLoader( + request, profile(), + base::BindOnce( + &IsolatedPrerenderURLLoaderInterceptorTest::HandlerCallback, + base::Unretained(this))); + WaitForCallback(); + + EXPECT_TRUE(was_intercepted().has_value()); + EXPECT_FALSE(was_intercepted().value()); +} + TEST_F(IsolatedPrerenderURLLoaderInterceptorTest, DISABLE_ASAN(NotAPrerender)) { base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitAndEnableFeature(features::kIsolatePrerenders);
diff --git a/chrome/browser/profiles/off_the_record_profile_impl.cc b/chrome/browser/profiles/off_the_record_profile_impl.cc index ac123ac..acd5fb9 100644 --- a/chrome/browser/profiles/off_the_record_profile_impl.cc +++ b/chrome/browser/profiles/off_the_record_profile_impl.cc
@@ -71,7 +71,6 @@ #include "media/mojo/services/video_decode_perf_history.h" #include "net/http/transport_security_state.h" #include "ppapi/buildflags/buildflags.h" -#include "services/network/public/mojom/network_context.mojom.h" #include "storage/browser/database/database_tracker.h" #if defined(OS_ANDROID) @@ -190,12 +189,6 @@ ChromePluginServiceFilter::GetInstance()->UnregisterProfile(this); #endif - // Clears any data the network stack contains that may be related to the - // OTR session. Must be done before DestroyBrowserContextServices, since - // the NetworkContext is managed by one such service. - GetDefaultStoragePartition(this)->GetNetworkContext()->ClearHostCache( - nullptr, network::mojom::NetworkContext::ClearHostCacheCallback()); - FullBrowserTransitionManager::Get()->OnProfileDestroyed(this); // The SimpleDependencyManager should always be passed after the
diff --git a/chrome/browser/renderer_context_menu/quick_answers_menu_observer.cc b/chrome/browser/renderer_context_menu/quick_answers_menu_observer.cc index a2e661d9..a02d74e 100644 --- a/chrome/browser/renderer_context_menu/quick_answers_menu_observer.cc +++ b/chrome/browser/renderer_context_menu/quick_answers_menu_observer.cc
@@ -25,6 +25,7 @@ using chromeos::quick_answers::QuickAnswer; using chromeos::quick_answers::QuickAnswersClient; using chromeos::quick_answers::QuickAnswersRequest; +using chromeos::quick_answers::ResultType; // TODO(llin): Update the placeholder after finalizing on the design. constexpr char kLoadingPlaceholder[] = "Loading..."; @@ -105,10 +106,18 @@ base::TimeDelta duration = base::TimeTicks::Now() - quick_answer_received_time_; RecordClick(quick_answer_->result_type, duration); - } + } else { + // No result is available. - // TODO(llin): Consider adding logging for clicks before quick answer - // received. + // Use default 0 duration for clicks before fetch finish. + base::TimeDelta duration; + if (!quick_answer_received_time_.is_null()) { + // Fetch finish with no result, set the duration to be between fetch + // finish and user clicks. + duration = base::TimeTicks::Now() - quick_answer_received_time_; + } + RecordClick(ResultType::kNoResult, duration); + } } }
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_bs.xtb b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_bs.xtb index b84bb58a..d6e196e 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_bs.xtb +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_bs.xtb
@@ -1125,7 +1125,7 @@ <translation id="8313653172105209786">smjer</translation> <translation id="8316881042119029234">Boja stare čipke</translation> <translation id="8326783648485765113">Jarko zelena</translation> -<translation id="8328063869313048659">Uključivanje ili iskjčivanje tamnog ekrana</translation> +<translation id="8328063869313048659">Uključivanje/isključivanje tamnog ekrana</translation> <translation id="8344569602005188545">sati</translation> <translation id="8345569862449483843">{COUNT,plural, =1{funta}one{# znak funte}few{# znaka funte}other{# znakova funte}}</translation> <translation id="8374154622594089836">mjesec</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_fr-CA.xtb b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_fr-CA.xtb index b73ba2b5..05b5e583 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_fr-CA.xtb +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_fr-CA.xtb
@@ -1125,6 +1125,7 @@ <translation id="8313653172105209786">Répertoire</translation> <translation id="8316881042119029234">Vieille dentelle</translation> <translation id="8326783648485765113">Vert gazon</translation> +<translation id="8328063869313048659">Basculer l'écran sombre</translation> <translation id="8344569602005188545">heures</translation> <translation id="8345569862449483843">{COUNT,plural, =1{carré}one{# carré}other{# carrés}}</translation> <translation id="8374154622594089836">mois</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_gu.xtb b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_gu.xtb index c2c0de6..b542713 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_gu.xtb +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_gu.xtb
@@ -1125,6 +1125,7 @@ <translation id="8313653172105209786">dir</translation> <translation id="8316881042119029234">જૂની લેસ</translation> <translation id="8326783648485765113">ઘેરો લીલો</translation> +<translation id="8328063869313048659">ઘેરી સ્ક્રીનને ટૉગલ કરો</translation> <translation id="8344569602005188545">કલાક</translation> <translation id="8345569862449483843">{COUNT,plural, =1{પાઉન્ડ}one{# પાઉન્ડની નિશાની}other{# પાઉન્ડની નિશાની}}</translation> <translation id="8374154622594089836">મહિનો</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_ml.xtb b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_ml.xtb index f9d99f1f..5ccbaf94 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_ml.xtb +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_ml.xtb
@@ -1124,6 +1124,7 @@ <translation id="8313653172105209786">dir</translation> <translation id="8316881042119029234">ഓൾഡ് ലേസ്</translation> <translation id="8326783648485765113">ലോൺ ഗ്രീൻ</translation> +<translation id="8328063869313048659">ഡാർക്ക് സ്ക്രീൻ മാറ്റുക</translation> <translation id="8344569602005188545">മണിക്കൂറുകള്</translation> <translation id="8345569862449483843">{COUNT,plural, =1{പൗണ്ട്}other{# പൗണ്ട് അടയാളങ്ങൾ}}</translation> <translation id="8374154622594089836">മാസം</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_mr.xtb b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_mr.xtb index f37feed..08a1a3ee 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_mr.xtb +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_mr.xtb
@@ -1124,6 +1124,7 @@ <translation id="8313653172105209786">dir</translation> <translation id="8316881042119029234">हलका पिवळा</translation> <translation id="8326783648485765113">गावठी हिरवा</translation> +<translation id="8328063869313048659">गडद स्क्रीन टॉगल करा</translation> <translation id="8344569602005188545">तास</translation> <translation id="8345569862449483843">{COUNT,plural, =1{पाउंड}other{# पाउंड चिन्हे}}</translation> <translation id="8374154622594089836">महिना</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_ne.xtb b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_ne.xtb index c10b55ad..e9623f5 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_ne.xtb +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_ne.xtb
@@ -1125,6 +1125,7 @@ <translation id="8313653172105209786">dir</translation> <translation id="8316881042119029234">पुरानो लेस</translation> <translation id="8326783648485765113">दुबो जस्तो हरियो</translation> +<translation id="8328063869313048659">अँध्यारो स्क्रिन टगल गर्नुहोस्</translation> <translation id="8344569602005188545">घन्टा</translation> <translation id="8345569862449483843">{COUNT,plural, =1{पाउन्ड}other{# पाउन्ड चिन्हहरू}}</translation> <translation id="8374154622594089836">महिना</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_or.xtb b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_or.xtb index ba5f4d8..f871fce 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_or.xtb +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_or.xtb
@@ -1124,6 +1124,7 @@ <translation id="8313653172105209786">dir</translation> <translation id="8316881042119029234">ପୁରୁଣା ଲେସ୍</translation> <translation id="8326783648485765113">ଲନ୍ ସବୁଜ</translation> +<translation id="8328063869313048659">ଡାର୍କ୍ ସ୍କ୍ରିନ୍ ଟୋଗଲ୍ କରନ୍ତୁ</translation> <translation id="8344569602005188545">ଘଣ୍ଟା</translation> <translation id="8345569862449483843">{COUNT,plural, =1{ପାଉଣ୍ଡ}other{#ଟି ପାଉଣ୍ଡ ଚିହ୍ନ}}</translation> <translation id="8374154622594089836">ମାସ</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_te.xtb b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_te.xtb index 59566b0..cd80793 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_te.xtb +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_te.xtb
@@ -1125,6 +1125,7 @@ <translation id="8313653172105209786">dir</translation> <translation id="8316881042119029234">పాత జల్తారు రంగు</translation> <translation id="8326783648485765113">పచ్చిక బయలు ఆకుపచ్చ</translation> +<translation id="8328063869313048659">ముదురు నలుపు స్క్రీన్ని టోగుల్ చేయండి</translation> <translation id="8344569602005188545">గంటలు</translation> <translation id="8345569862449483843">{COUNT,plural, =1{పౌండ్ గుర్తు}other{# పౌండ్ గుర్తులు}}</translation> <translation id="8374154622594089836">నెల</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_th.xtb b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_th.xtb index 9587e53..651f29a 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_th.xtb +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_th.xtb
@@ -1124,6 +1124,7 @@ <translation id="8313653172105209786">ไดเรกทอรี</translation> <translation id="8316881042119029234">สีส้มโอลด์เลซ</translation> <translation id="8326783648485765113">สีเขียวลอว์นกรีน</translation> +<translation id="8328063869313048659">เปิด/ปิดหน้าจอตอนกลางคืน</translation> <translation id="8344569602005188545">ชั่วโมง</translation> <translation id="8345569862449483843">{COUNT,plural, =1{เครื่องหมายปอนด์}other{# เครื่องหมายปอนด์}}</translation> <translation id="8374154622594089836">เดือน</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_ur.xtb b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_ur.xtb index 7a24792..907f2e0 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_ur.xtb +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_ur.xtb
@@ -1125,6 +1125,7 @@ <translation id="8313653172105209786">dir</translation> <translation id="8316881042119029234">پرانے لیس نما</translation> <translation id="8326783648485765113">لان سبز</translation> +<translation id="8328063869313048659">تاریک اسکرین ٹوگل کریں</translation> <translation id="8344569602005188545">گھنٹے</translation> <translation id="8345569862449483843">{COUNT,plural, =1{پاؤنڈ}other{# پاؤنڈ کے نشانات}}</translation> <translation id="8374154622594089836">مہینہ</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_zh-CN.xtb b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_zh-CN.xtb index 8df4d8c..f468a90 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_zh-CN.xtb +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_zh-CN.xtb
@@ -1124,6 +1124,7 @@ <translation id="8313653172105209786">目录</translation> <translation id="8316881042119029234">旧蕾丝色</translation> <translation id="8326783648485765113">草绿色</translation> +<translation id="8328063869313048659">开启/关闭暗屏幕</translation> <translation id="8344569602005188545">小时</translation> <translation id="8345569862449483843">{COUNT,plural, =1{1个井号}other{#个井号}}</translation> <translation id="8374154622594089836">月</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_zh-HK.xtb b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_zh-HK.xtb index 5cfa22a..6885ac6 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_zh-HK.xtb +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_zh-HK.xtb
@@ -1125,7 +1125,7 @@ <translation id="8313653172105209786">目錄</translation> <translation id="8316881042119029234">米白色</translation> <translation id="8326783648485765113">草綠色</translation> -<translation id="8328063869313048659">切換至深色螢幕</translation> +<translation id="8328063869313048659">切換去昏暗螢幕</translation> <translation id="8344569602005188545">時</translation> <translation id="8345569862449483843">{COUNT,plural, =1{1 個英鎊符號}other{# 個英鎊符號}}</translation> <translation id="8374154622594089836">月</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_zh-TW.xtb b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_zh-TW.xtb index 43930a3..10793cb 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_zh-TW.xtb +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/strings/chromevox_strings_zh-TW.xtb
@@ -1125,7 +1125,7 @@ <translation id="8313653172105209786">目錄</translation> <translation id="8316881042119029234">舊蕾絲色</translation> <translation id="8326783648485765113">草坪綠</translation> -<translation id="8328063869313048659">切換至深色螢幕</translation> +<translation id="8328063869313048659">切換深色螢幕</translation> <translation id="8344569602005188545">小時</translation> <translation id="8345569862449483843">{COUNT,plural, =1{英鎊符號}other{# 個英鎊符號}}</translation> <translation id="8374154622594089836">月</translation>
diff --git a/chrome/browser/resources/new_tab_page/app.html b/chrome/browser/resources/new_tab_page/app.html index 10471e8f..6e33a5af 100644 --- a/chrome/browser/resources/new_tab_page/app.html +++ b/chrome/browser/resources/new_tab_page/app.html
@@ -6,7 +6,6 @@ } #customizeButton { - background-color: white; border: none; border-radius: calc(0.5 * var(--cr-button-height)); bottom: 16px; @@ -15,6 +14,18 @@ position: absolute; } + #customizeButton:not(:hover) { + background-color: var(--ntp-background-override-color); + } + + :host-context([dir='ltr']) #customizeButton { + right: 16px; + } + + :host-context([dir='rtl']) #customizeButton { + left: 16px; + } + #customizeIcon { -webkit-mask-image: url(icons/icon_pencil.svg); -webkit-mask-repeat: no-repeat; @@ -25,14 +36,6 @@ width: 16px; } - :host-context([dir='ltr']) #customizeButton { - right: 16px; - } - - :host-context([dir='rtl']) #customizeButton { - left: 16px; - } - ntp-most-visited[dark] { --icon-button-color-active: var(--google-grey-refresh-300); --icon-button-color: white;
diff --git a/chrome/browser/resources/new_tab_page/customize_dialog.html b/chrome/browser/resources/new_tab_page/customize_dialog.html index 2cf58c4..c6ff2fd7 100644 --- a/chrome/browser/resources/new_tab_page/customize_dialog.html +++ b/chrome/browser/resources/new_tab_page/customize_dialog.html
@@ -20,6 +20,7 @@ .menu-item { align-items: center; border-radius: 0 16px 16px 0; + color: var(--ntp-primary-text-color); cursor: pointer; display: flex; flex-direction: row; @@ -34,23 +35,24 @@ border-radius: 16px 0 0 16px; } - .menu-item:hover { - background-color: rgba(var(--google-grey-900-rgb), .1); + .menu-item:hover, + .menu-item:focus { + background-color: var(--ntp-hover-background-color); + } + + .menu-item:active { + background-color: var(--ntp-active-background-color); } .menu-item[selected] { - background-color: var(--google-blue-50); - color: var(--google-blue-refresh-700); - } - - :host-context(.focus-outline-visible) .menu-item:focus { - background-color: rgba(var(--google-grey-900-rgb), .16); + background-color: var(--ntp-selected-background-color); + color: var(--ntp-selected-primary-text-color); } .menu-item-icon { -webkit-mask-repeat: no-repeat; -webkit-mask-size: 100%; - background-color: var(--cr-secondary-text-color); + background-color: var(--ntp-primary-text-color); height: 20px; margin-inline-end: 16px; margin-inline-start: 24px; @@ -58,7 +60,7 @@ } .menu-item[selected] .menu-item-icon { - background-color: var(--google-blue-refresh-700); + background-color: var(--ntp-selected-primary-text-color); } #backgroundsIcon {
diff --git a/chrome/browser/resources/new_tab_page/customize_shortcuts.html b/chrome/browser/resources/new_tab_page/customize_shortcuts.html index 8c33107..7689938 100644 --- a/chrome/browser/resources/new_tab_page/customize_shortcuts.html +++ b/chrome/browser/resources/new_tab_page/customize_shortcuts.html
@@ -13,7 +13,7 @@ } .option-image { - border: 1px solid var(--google-grey-refresh-300); + border: 1px solid var(--ntp-border-color); border-radius: 4px; box-sizing: border-box; cursor: pointer; @@ -23,27 +23,14 @@ width: 268px; } - @media (prefers-color-scheme: dark) { - .option-image { - border-color: var(--google-grey-refresh-700); - } - } - .selected .option-image { - background-color: var(--google-blue-50); - border-color: var(--google-blue-600); - } - - @media (prefers-color-scheme: dark) { - .selected .option-image { - background-color: rgba(var(--google-blue-200-rgb), .1); - border-color: var(--google-blue-refresh-300); - } + background-color: var(--ntp-selected-background-color); + border-color: var(--ntp-selected-border-color); } .option-mini { - background-color: white; - border: 1px solid var(--google-grey-refresh-300); + background-color: var(--ntp-background-override-color); + border: 1px solid var(--ntp-border-color); border-radius: 4px; box-sizing: border-box; height: 144px; @@ -53,26 +40,19 @@ width: 144px; } - @media (prefers-color-scheme: dark) { - .option-mini { - background-color: var(--google-grey-900); - border-color: var(--google-grey-refresh-700); - } - } - html[dir=rtl] .option-mini { left: 40px; right: unset; } .selected .option-mini { + border-color: transparent; box-shadow: 0 1px 3px 0 rgba(var(--google-grey-800-rgb), .3), 0 4px 8px 3px rgba(var(--google-grey-800-rgb), .15); } @media (prefers-color-scheme: dark) { .selected .option-mini { - border-color: transparent; box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .3), 0 4px 8px 3px rgba(0, 0, 0, .15); } @@ -83,19 +63,13 @@ } .selected ntp-mini-page { - --mini-page-shortcut-color: var(--google-blue-600); - } - - @media (prefers-color-scheme: dark) { - .selected ntp-mini-page { - --mini-page-shortcut-color: var(--google-blue-refresh-300); - } + --mini-page-shortcut-color: var(--ntp-selected-border-color); } .option-icon { -webkit-mask-repeat: no-repeat; -webkit-mask-size: 100%; - background: 96px 96px var(--google-grey-200); + background: 96px 96px var(--ntp-border-color); height: 96px; left: 16px; position: absolute; @@ -115,19 +89,13 @@ right: 16px; } - @media (prefers-color-scheme: dark) { - .option-icon { - background-color: var(--google-grey-refresh-700); - } - } - .selected .option-icon { - background-color: rgba(var(--google-blue-600-rgb), .24); + background-color: var(--ntp-selected-light-background-color); } @media (prefers-color-scheme: dark) { .selected .option-icon { - background-color: var(--google-blue-refresh-300); + background-color: var(--ntp-selected-border-color); } } @@ -163,7 +131,7 @@ #hide { align-items: center; - border: 1px solid var(--google-grey-refresh-300); + border: 1px solid var(--ntp-border-color); border-radius: 4px; box-sizing: border-box; display: flex; @@ -173,24 +141,10 @@ width: 100%; } - @media (prefers-color-scheme: dark) { - #hide { - border-color: var(--google-grey-refresh-700); - } - } - #hide.selected { - background-color: var(--google-blue-50); - border-color: var(--google-blue-600); - color: var(--google-blue-600); - } - - @media (prefers-color-scheme: dark) { - #hide.selected { - background-color: rgba(var(--google-blue-200-rgb), .1); - border-color: var(--google-blue-refresh-300); - color: var(--google-blue-refresh-300); - } + background-color: var(--ntp-selected-background-color); + border-color: var(--ntp-selected-border-color); + color: var(--ntp-selected-border-color); } #hideIcon { @@ -199,13 +153,7 @@ } .selected #hideIcon { - background-color: var(--google-blue-600); - } - - @media (prefers-color-scheme: dark) { - .selected #hideIcon { - background-color: var(--google-blue-refresh-300); - } + background-color: var(--ntp-selected-border-color); } #hideTitleContainer { @@ -220,23 +168,8 @@ margin-inline-end: 20px; } - .selected-border { - border: 2px solid rgba(var(--google-blue-600-rgb), .4); - border-radius: 4px; - box-sizing: border-box; - height: 100%; - position: relative; - width: 100%; - } - - @media (prefers-color-scheme: dark) { - .selected-border { - border-color: var(--google-blue-refresh-300); - } - } - .selected-circle { - background: #FFF no-repeat center; + background: var(--ntp-background-override-color) no-repeat center; border-radius: 50%; display: none; height: 22px; @@ -251,12 +184,6 @@ right: 66px; } - @media (prefers-color-scheme: dark) { - .selected-circle { - background-color: var(--google-grey-900); - } - } - .selected-check { background: url(icons/check_circle.svg) no-repeat center; background-size: 28px 28px;
diff --git a/chrome/browser/resources/new_tab_page/customize_themes.html b/chrome/browser/resources/new_tab_page/customize_themes.html index 24963b5d..bd90bd9f 100644 --- a/chrome/browser/resources/new_tab_page/customize_themes.html +++ b/chrome/browser/resources/new_tab_page/customize_themes.html
@@ -5,8 +5,9 @@ #thirdPartyTheme { align-items: center; - border: 1px solid var(--google-grey-200); border-radius: 5px; + border: 1px solid var(--ntp-border-color); + color: var(--ntp-primary-text-color); display: flex; flex-direction: row; margin-bottom: 24px; @@ -17,7 +18,7 @@ -webkit-mask-image: url(icons/brush.svg); -webkit-mask-repeat: no-repeat; -webkit-mask-size: 100%; - background-color: var(--cr-secondary-text-color); + background-color: var(--ntp-primary-text-color); height: 24px; margin-inline-end: 20px; width: 24px; @@ -36,7 +37,7 @@ -webkit-mask-image: url(chrome://resources/images/open_in_new.svg); -webkit-mask-repeat: no-repeat; -webkit-mask-size: 100%; - background-color: var(--cr-secondary-text-color); + background-color: var(--ntp-primary-text-color); height: 20px; margin-inline-end: 24px; width: 20px; @@ -86,6 +87,14 @@ --ntp-theme-icon-frame-color: rgb(222, 225, 230); --ntp-theme-icon-active-tab-color: white; } + + @media (prefers-color-scheme: dark) { + #defaultTheme { + --ntp-theme-icon-frame-color: rgb(var(--google-grey-900-rgb)); + --ntp-theme-icon-active-tab-color: rgb(50, 54, 57); + } + } + </style> <div id="thirdPartyThemeContainer" hidden="[[!isThirdPartyTheme_(theme)]]"> <div id="thirdPartyTheme">
diff --git a/chrome/browser/resources/new_tab_page/new_tab_page.html b/chrome/browser/resources/new_tab_page/new_tab_page.html index 47486b3..393cdb7 100644 --- a/chrome/browser/resources/new_tab_page/new_tab_page.html +++ b/chrome/browser/resources/new_tab_page/new_tab_page.html
@@ -14,17 +14,12 @@ background: $i18n{backgroundColor}; margin: 0; } - - @media (prefers-color-scheme: dark) { - body { - background: rgb(67, 67, 71); - } - } </style> </head> <body> <ntp-app></ntp-app> <script type="module" src="app.js"></script> <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css"> + <link rel="stylesheet" href="shared_vars.css"> </body> </html>
diff --git a/chrome/browser/resources/new_tab_page/new_tab_page_resources.grd b/chrome/browser/resources/new_tab_page/new_tab_page_resources.grd index 19f5876..8189cfa35 100644 --- a/chrome/browser/resources/new_tab_page/new_tab_page_resources.grd +++ b/chrome/browser/resources/new_tab_page/new_tab_page_resources.grd
@@ -68,6 +68,8 @@ <structures> <structure name="IDR_NEW_TAB_PAGE_NEW_TAB_PAGE_HTML" file="new_tab_page.html" type="chrome_html" compress="gzip" /> + <structure name="IDR_NEW_TAB_PAGE_SHARED_VARS_CSS" + file="shared_vars.css" type="chrome_html" compress="gzip" /> <structure name="IDR_NEW_TAB_PAGE_BROWSER_PROXY_JS" file="browser_proxy.js" type="chrome_html" compress="gzip" /> <structure name="IDR_NEW_TAB_PAGE_UTILS_JS"
diff --git a/chrome/browser/resources/new_tab_page/shared_vars.css b/chrome/browser/resources/new_tab_page/shared_vars.css new file mode 100644 index 0000000..f108698 --- /dev/null +++ b/chrome/browser/resources/new_tab_page/shared_vars.css
@@ -0,0 +1,31 @@ +/* + * Copyright 2020 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +html { + --ntp-active-background-color: rgba(var(--google-grey-900-rgb), .16); + --ntp-background-override-color: white; + --ntp-border-color: var(--google-grey-refresh-300); + --ntp-hover-background-color: rgba(var(--google-grey-900-rgb), .1); + --ntp-primary-text-color: var(--google-grey-refresh-700); + --ntp-selected-background-color: rgba(var(--google-blue-refresh-700-rgb), .16); + --ntp-selected-border-color: var(--google-blue-600); + --ntp-selected-light-background-color: rgba(var(--google-blue-600-rgb), .24); + --ntp-selected-primary-text-color: var(--google-blue-refresh-700); +} + +@media (prefers-color-scheme: dark) { + html { + --ntp-active-background-color: rgba(var(--google-grey-200-rgb), .16); + --ntp-background-override-color: var(--google-grey-900); + --ntp-border-color: var(--google-grey-refresh-700); + --ntp-hover-background-color: rgba(var(--google-grey-200-rgb), .1); + --ntp-primary-text-color: var(--google-grey-refresh-300); + --ntp-selected-background-color: rgba(var(--google-blue-refresh-300-rgb), .16); + --ntp-selected-border-color: var(--google-blue-refresh-300); + --ntp-selected-light-background-color: rgba(var(--google-blue-refresh-300-rgb), .24); + --ntp-selected-primary-text-color: var(--google-blue-refresh-300); + } +}
diff --git a/chrome/browser/resources/new_tab_page/theme_icon.html b/chrome/browser/resources/new_tab_page/theme_icon.html index 9a133b45..eed43bf 100644 --- a/chrome/browser/resources/new_tab_page/theme_icon.html +++ b/chrome/browser/resources/new_tab_page/theme_icon.html
@@ -35,11 +35,11 @@ } #checkMark circle { - fill: var(--google-blue-refresh-500); + fill: var(--ntp-selected-border-color); } #checkMark path { - fill: white; + fill: var(--ntp-background-override-color); } </style> <svg xmlns="http://www.w3.org/2000/svg"
diff --git a/chrome/browser/resources/tab_strip/tab_list.js b/chrome/browser/resources/tab_strip/tab_list.js index 9b55ba08..3d4aede2 100644 --- a/chrome/browser/resources/tab_strip/tab_list.js +++ b/chrome/browser/resources/tab_strip/tab_list.js
@@ -37,6 +37,15 @@ } /** + * Gets the data type of tab IDs on DataTransfer objects in drag events. This + * is a function so that loadTimeData can get overridden by tests. + * @return {string} + */ +function getTabIdDataType() { + return loadTimeData.getString('tabIdDataType'); +} + +/** * @enum {string} */ const LayoutVariable = { @@ -147,6 +156,9 @@ /** @private {!Function} */ this.windowBlurListener_ = () => this.onWindowBlur_(); + /** @private @const {number} */ + this.windowId_; + /** @private {!Function} */ this.contextMenuListener_ = e => this.onContextMenu_(e); @@ -167,6 +179,8 @@ 'dragend', (e) => this.onDragEnd_(/** @type {!DragEvent} */ (e))); this.addEventListener( 'dragover', (e) => this.onDragOver_(/** @type {!DragEvent} */ (e))); + this.addEventListener( + 'drop', e => this.onDrop_(/** @type {!DragEvent} */ (e))); document.addEventListener('contextmenu', this.contextMenuListener_); document.addEventListener( @@ -266,6 +280,10 @@ layout => this.applyCSSDictionary_(layout)); this.fetchAndUpdateColors_(); + this.tabStripEmbedderProxy_.getWindowId().then(windowId => { + this.windowId_ = windowId; + }); + const getTabsStartTimestamp = Date.now(); this.tabsApi_.getTabs().then(tabs => { this.tabStripEmbedderProxy_.reportTabDataReceivedDuration( @@ -508,9 +526,7 @@ return; } - const allTabElements = - Array.from(this.shadowRoot.querySelectorAll('tabstrip-tab')); - + const allTabElements = Array.from(this.$all('tabstrip-tab')); const dragOverTabElement = composedPath.find(isTabElement); if (dragOverTabElement && !dragOverTabElement.tab.pinned) { const dragOverIndex = allTabElements.indexOf(dragOverTabElement); @@ -558,7 +574,8 @@ const dragOverIndex = Array.from(this.$all('tabstrip-tab')).indexOf(dragOverTabElement); - this.tabsApi_.moveTab(this.draggedItem_.tab.id, dragOverIndex); + this.tabsApi_.moveTab( + this.draggedItem_.tab.id, this.windowId_, dragOverIndex); } /** @@ -578,6 +595,32 @@ event.dataTransfer.setDragImage( this.draggedItem_.getDragImage(), event.clientX - draggedItemRect.left, event.clientY - draggedItemRect.top); + + if (isTabElement(draggedItem)) { + event.dataTransfer.setData( + getTabIdDataType(), this.draggedItem_.tab.id.toString()); + } + } + + /** + * @param {!DragEvent} event + * @private + */ + onDrop_(event) { + if (this.draggedItem_) { + // If there is a valid dragged item, the drag originated from this TabList + // and is handled already by previous dragover events. + return; + } + + if (event.dataTransfer.types.includes(getTabIdDataType())) { + const tabId = Number(event.dataTransfer.getData(getTabIdDataType())); + if (Number.isNaN(tabId)) { + // Invalid tab ID. Return silently. + return; + } + this.tabsApi_.moveTab(tabId, this.windowId_, -1); + } } /** @private */
diff --git a/chrome/browser/resources/tab_strip/tab_strip_embedder_proxy.js b/chrome/browser/resources/tab_strip/tab_strip_embedder_proxy.js index 159a688..c83694c 100644 --- a/chrome/browser/resources/tab_strip/tab_strip_embedder_proxy.js +++ b/chrome/browser/resources/tab_strip/tab_strip_embedder_proxy.js
@@ -26,6 +26,11 @@ return sendWithPromise('getLayout'); } + /** @return {!Promise<number>} */ + getWindowId() { + return sendWithPromise('getWindowId'); + } + observeThemeChanges() { chrome.send('observeThemeChanges'); }
diff --git a/chrome/browser/resources/tab_strip/tabs_api_proxy.js b/chrome/browser/resources/tab_strip/tabs_api_proxy.js index 708c2ed..70a1470 100644 --- a/chrome/browser/resources/tab_strip/tabs_api_proxy.js +++ b/chrome/browser/resources/tab_strip/tabs_api_proxy.js
@@ -142,9 +142,9 @@ * @param {number} newIndex * @return {!Promise<!ExtensionsApiTab>} */ - moveTab(tabId, newIndex) { + moveTab(tabId, windowId, newIndex) { return new Promise(resolve => { - chrome.tabs.move(tabId, {index: newIndex}, tab => { + chrome.tabs.move(tabId, {index: newIndex, windowId}, tab => { resolve(tab); }); });
diff --git a/chrome/browser/sharing/ack_message_handler_unittest.cc b/chrome/browser/sharing/ack_message_handler_unittest.cc index 2e8b832..fca4e022 100644 --- a/chrome/browser/sharing/ack_message_handler_unittest.cc +++ b/chrome/browser/sharing/ack_message_handler_unittest.cc
@@ -7,32 +7,15 @@ #include "base/bind.h" #include "base/bind_helpers.h" #include "base/test/mock_callback.h" +#include "chrome/browser/sharing/mock_sharing_message_sender.h" #include "chrome/browser/sharing/proto/sharing_message.pb.h" #include "chrome/browser/sharing/sharing_fcm_sender.h" -#include "chrome/browser/sharing/sharing_message_sender.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" namespace { constexpr char kTestMessageId[] = "test_message_id"; -class MockSharingMessageSender : public SharingMessageSender { - public: - MockSharingMessageSender() - : SharingMessageSender( - /*sync_prefs=*/nullptr, - /*local_device_info_provider=*/nullptr) {} - ~MockSharingMessageSender() override = default; - - MOCK_METHOD2( - OnAckReceived, - void(const std::string& fcm_message_id, - std::unique_ptr<chrome_browser_sharing::ResponseMessage> response)); - - private: - DISALLOW_COPY_AND_ASSIGN(MockSharingMessageSender); -}; - class AckMessageHandlerTest : public testing::Test { protected: AckMessageHandlerTest()
diff --git a/chrome/browser/sharing/fake_device_info.cc b/chrome/browser/sharing/fake_device_info.cc index c01b92be..83a94c0 100644 --- a/chrome/browser/sharing/fake_device_info.cc +++ b/chrome/browser/sharing/fake_device_info.cc
@@ -1,6 +1,7 @@ // Copyright 2019 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. + #include "chrome/browser/sharing/fake_device_info.h" std::unique_ptr<syncer::DeviceInfo> CreateFakeDeviceInfo(
diff --git a/chrome/browser/sharing/mock_sharing_device_source.cc b/chrome/browser/sharing/mock_sharing_device_source.cc new file mode 100644 index 0000000..b61ef6a6 --- /dev/null +++ b/chrome/browser/sharing/mock_sharing_device_source.cc
@@ -0,0 +1,9 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/sharing/mock_sharing_device_source.h" + +MockSharingDeviceSource::MockSharingDeviceSource() = default; + +MockSharingDeviceSource::~MockSharingDeviceSource() = default;
diff --git a/chrome/browser/sharing/mock_sharing_device_source.h b/chrome/browser/sharing/mock_sharing_device_source.h new file mode 100644 index 0000000..71d646a7 --- /dev/null +++ b/chrome/browser/sharing/mock_sharing_device_source.h
@@ -0,0 +1,36 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_SHARING_MOCK_SHARING_DEVICE_SOURCE_H_ +#define CHROME_BROWSER_SHARING_MOCK_SHARING_DEVICE_SOURCE_H_ + +#include <memory> +#include <string> +#include <vector> + +#include "chrome/browser/sharing/sharing_device_source.h" +#include "components/sync_device_info/device_info.h" +#include "testing/gmock/include/gmock/gmock.h" + +class MockSharingDeviceSource : public SharingDeviceSource { + public: + MockSharingDeviceSource(); + MockSharingDeviceSource(const MockSharingDeviceSource&) = delete; + MockSharingDeviceSource& operator=(const MockSharingDeviceSource&) = delete; + ~MockSharingDeviceSource() override; + + MOCK_METHOD0(IsReady, bool()); + + MOCK_METHOD1(GetDeviceByGuid, + std::unique_ptr<syncer::DeviceInfo>(const std::string& guid)); + + MOCK_METHOD1( + GetDeviceCandidates, + std::vector<std::unique_ptr<syncer::DeviceInfo>>( + sync_pb::SharingSpecificFields::EnabledFeatures required_feature)); + + void MaybeRunReadyCallbacksForTesting() { MaybeRunReadyCallbacks(); } +}; + +#endif // CHROME_BROWSER_SHARING_MOCK_SHARING_DEVICE_SOURCE_H_
diff --git a/chrome/browser/sharing/mock_sharing_message_handler.cc b/chrome/browser/sharing/mock_sharing_message_handler.cc new file mode 100644 index 0000000..1f4e4a4 --- /dev/null +++ b/chrome/browser/sharing/mock_sharing_message_handler.cc
@@ -0,0 +1,9 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/sharing/mock_sharing_message_handler.h" + +MockSharingMessageHandler::MockSharingMessageHandler() = default; + +MockSharingMessageHandler::~MockSharingMessageHandler() = default;
diff --git a/chrome/browser/sharing/mock_sharing_message_handler.h b/chrome/browser/sharing/mock_sharing_message_handler.h new file mode 100644 index 0000000..c8b6dd57 --- /dev/null +++ b/chrome/browser/sharing/mock_sharing_message_handler.h
@@ -0,0 +1,25 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_SHARING_MOCK_SHARING_MESSAGE_HANDLER_H_ +#define CHROME_BROWSER_SHARING_MOCK_SHARING_MESSAGE_HANDLER_H_ + +#include "chrome/browser/sharing/proto/sharing_message.pb.h" +#include "chrome/browser/sharing/sharing_message_handler.h" +#include "testing/gmock/include/gmock/gmock.h" + +class MockSharingMessageHandler : public SharingMessageHandler { + public: + MockSharingMessageHandler(); + MockSharingMessageHandler(const MockSharingMessageHandler&) = delete; + MockSharingMessageHandler& operator=(const MockSharingMessageHandler&) = + delete; + ~MockSharingMessageHandler() override; + + // SharingMessageHandler: + MOCK_METHOD2(OnMessage, + void(chrome_browser_sharing::SharingMessage, DoneCallback)); +}; + +#endif // CHROME_BROWSER_SHARING_MOCK_SHARING_MESSAGE_HANDLER_H_
diff --git a/chrome/browser/sharing/mock_sharing_message_sender.cc b/chrome/browser/sharing/mock_sharing_message_sender.cc new file mode 100644 index 0000000..f2b40b8 --- /dev/null +++ b/chrome/browser/sharing/mock_sharing_message_sender.cc
@@ -0,0 +1,12 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/sharing/mock_sharing_message_sender.h" + +MockSharingMessageSender::MockSharingMessageSender() + : SharingMessageSender( + /*sync_prefs=*/nullptr, + /*local_device_info_provider=*/nullptr) {} + +MockSharingMessageSender::~MockSharingMessageSender() = default;
diff --git a/chrome/browser/sharing/mock_sharing_message_sender.h b/chrome/browser/sharing/mock_sharing_message_sender.h new file mode 100644 index 0000000..59a5441 --- /dev/null +++ b/chrome/browser/sharing/mock_sharing_message_sender.h
@@ -0,0 +1,38 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_SHARING_MOCK_SHARING_MESSAGE_SENDER_H_ +#define CHROME_BROWSER_SHARING_MOCK_SHARING_MESSAGE_SENDER_H_ + +#include <memory> +#include <string> + +#include "base/callback.h" +#include "base/time/time.h" +#include "chrome/browser/sharing/proto/sharing_message.pb.h" +#include "chrome/browser/sharing/sharing_message_sender.h" +#include "components/sync_device_info/device_info.h" +#include "testing/gmock/include/gmock/gmock.h" + +class MockSharingMessageSender : public SharingMessageSender { + public: + MockSharingMessageSender(); + MockSharingMessageSender(const MockSharingMessageSender&) = delete; + MockSharingMessageSender& operator=(const MockSharingMessageSender&) = delete; + ~MockSharingMessageSender() override; + + MOCK_METHOD5(SendMessageToDevice, + void(const syncer::DeviceInfo&, + base::TimeDelta, + chrome_browser_sharing::SharingMessage, + DelegateType, + ResponseCallback)); + + MOCK_METHOD2( + OnAckReceived, + void(const std::string& fcm_message_id, + std::unique_ptr<chrome_browser_sharing::ResponseMessage> response)); +}; + +#endif // CHROME_BROWSER_SHARING_MOCK_SHARING_MESSAGE_SENDER_H_
diff --git a/chrome/browser/sharing/mock_sharing_service.cc b/chrome/browser/sharing/mock_sharing_service.cc index 0c60386..b849c13f 100644 --- a/chrome/browser/sharing/mock_sharing_service.cc +++ b/chrome/browser/sharing/mock_sharing_service.cc
@@ -1,6 +1,7 @@ // Copyright 2019 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. + #include "chrome/browser/sharing/mock_sharing_service.h" #include "chrome/browser/sharing/sharing_device_source.h"
diff --git a/chrome/browser/sharing/mock_sharing_service.h b/chrome/browser/sharing/mock_sharing_service.h index 48d6cb7..e9e8ef72 100644 --- a/chrome/browser/sharing/mock_sharing_service.h +++ b/chrome/browser/sharing/mock_sharing_service.h
@@ -9,7 +9,6 @@ #include "chrome/browser/sharing/sharing_message_handler.h" #include "chrome/browser/sharing/sharing_message_sender.h" #include "chrome/browser/sharing/sharing_service.h" - #include "testing/gmock/include/gmock/gmock.h" class MockSharingService : public SharingService {
diff --git a/chrome/browser/sharing/shared_clipboard/shared_clipboard_message_handler_desktop_unittest.cc b/chrome/browser/sharing/shared_clipboard/shared_clipboard_message_handler_desktop_unittest.cc index f5e4adb..6286af5c 100644 --- a/chrome/browser/sharing/shared_clipboard/shared_clipboard_message_handler_desktop_unittest.cc +++ b/chrome/browser/sharing/shared_clipboard/shared_clipboard_message_handler_desktop_unittest.cc
@@ -7,10 +7,10 @@ #include "base/guid.h" #include "base/strings/utf_string_conversions.h" #include "base/test/mock_callback.h" +#include "chrome/browser/sharing/mock_sharing_device_source.h" #include "chrome/browser/sharing/mock_sharing_service.h" #include "chrome/browser/sharing/proto/shared_clipboard_message.pb.h" #include "chrome/browser/sharing/shared_clipboard/shared_clipboard_test_base.h" -#include "chrome/browser/sharing/sharing_device_source.h" #include "chrome/grit/generated_resources.h" #include "chrome/test/base/testing_profile.h" #include "components/sync/protocol/sync_enums.pb.h" @@ -26,19 +26,6 @@ const char kDeviceNameInDeviceInfo[] = "DeviceNameInDeviceInfo"; const char kDeviceNameInMessage[] = "DeviceNameInMessage"; -class MockSharingDeviceSource : public SharingDeviceSource { - public: - bool IsReady() override { return true; } - - MOCK_METHOD1(GetDeviceByGuid, - std::unique_ptr<syncer::DeviceInfo>(const std::string& guid)); - - MOCK_METHOD1( - GetDeviceCandidates, - std::vector<std::unique_ptr<syncer::DeviceInfo>>( - sync_pb::SharingSpecificFields::EnabledFeatures required_feature)); -}; - class SharedClipboardMessageHandlerTest : public SharedClipboardTestBase { public: SharedClipboardMessageHandlerTest() = default; @@ -47,6 +34,7 @@ void SetUp() override { SharedClipboardTestBase::SetUp(); + ON_CALL(device_source_, IsReady()).WillByDefault(testing::Return(true)); message_handler_ = std::make_unique<SharedClipboardMessageHandlerDesktop>( &device_source_, &profile_); }
diff --git a/chrome/browser/sharing/sharing_device_source_unittest.cc b/chrome/browser/sharing/sharing_device_source_unittest.cc index e6978ea..7ef2e7a 100644 --- a/chrome/browser/sharing/sharing_device_source_unittest.cc +++ b/chrome/browser/sharing/sharing_device_source_unittest.cc
@@ -6,29 +6,11 @@ #include "base/callback.h" #include "base/test/bind_test_util.h" +#include "chrome/browser/sharing/mock_sharing_device_source.h" #include "components/sync_device_info/device_info.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -namespace { - -class MockSharingDeviceSource : public SharingDeviceSource { - public: - MOCK_METHOD0(IsReady, bool()); - - MOCK_METHOD1(GetDeviceByGuid, - std::unique_ptr<syncer::DeviceInfo>(const std::string& guid)); - - MOCK_METHOD1( - GetDeviceCandidates, - std::vector<std::unique_ptr<syncer::DeviceInfo>>( - sync_pb::SharingSpecificFields::EnabledFeatures required_feature)); - - void MaybeRunReadyCallbacksForTesting() { MaybeRunReadyCallbacks(); } -}; - -} // namespace - TEST(SharingDeviceSourceTest, RunsCallbackImmediatelyIfReady) { MockSharingDeviceSource device_source; EXPECT_CALL(device_source, IsReady()).WillOnce(testing::Return(true));
diff --git a/chrome/browser/sharing/sharing_fcm_handler_unittest.cc b/chrome/browser/sharing/sharing_fcm_handler_unittest.cc index ba538e0..c7fd562 100644 --- a/chrome/browser/sharing/sharing_fcm_handler_unittest.cc +++ b/chrome/browser/sharing/sharing_fcm_handler_unittest.cc
@@ -8,11 +8,11 @@ #include "chrome/browser/sharing/fake_sharing_handler_registry.h" #include "chrome/browser/sharing/features.h" +#include "chrome/browser/sharing/mock_sharing_message_handler.h" #include "chrome/browser/sharing/sharing_constants.h" #include "chrome/browser/sharing/sharing_fcm_handler.h" #include "chrome/browser/sharing/sharing_fcm_sender.h" #include "chrome/browser/sharing/sharing_handler_registry.h" -#include "chrome/browser/sharing/sharing_message_handler.h" #include "chrome/browser/sharing/sharing_sync_preference.h" #include "components/gcm_driver/fake_gcm_driver.h" #include "components/sync_device_info/device_info.h" @@ -39,17 +39,6 @@ const char kP256dh[] = "test_p256_dh"; const char kAuthSecret[] = "test_auth_secret"; -class MockSharingMessageHandler : public SharingMessageHandler { - public: - MockSharingMessageHandler() = default; - ~MockSharingMessageHandler() override = default; - - // SharingMessageHandler implementation: - MOCK_METHOD2(OnMessage, - void(SharingMessage message, - SharingMessageHandler::DoneCallback done_callback)); -}; - class MockSharingFCMSender : public SharingFCMSender { public: MockSharingFCMSender()
diff --git a/chrome/browser/sharing/sharing_handler_registry_impl_unittest.cc b/chrome/browser/sharing/sharing_handler_registry_impl_unittest.cc index c81d46b..ed0faaf 100644 --- a/chrome/browser/sharing/sharing_handler_registry_impl_unittest.cc +++ b/chrome/browser/sharing/sharing_handler_registry_impl_unittest.cc
@@ -7,21 +7,12 @@ #include <memory> +#include "chrome/browser/sharing/mock_sharing_message_handler.h" #include "chrome/browser/sharing/sharing_device_registration.h" -#include "chrome/browser/sharing/sharing_message_handler.h" #include "testing/gtest/include/gtest/gtest.h" namespace { -class FakeMessageHandler : public SharingMessageHandler { - public: - FakeMessageHandler() = default; - ~FakeMessageHandler() override = default; - - void OnMessage(chrome_browser_sharing::SharingMessage message, - SharingMessageHandler::DoneCallback done_callback) override {} -}; - class FakeSharingDeviceRegistration : public SharingDeviceRegistration { public: FakeSharingDeviceRegistration() @@ -85,7 +76,7 @@ chrome_browser_sharing::SharingMessage::kSharedClipboardMessage)); handler_registry->RegisterSharingHandler( - std::make_unique<FakeMessageHandler>(), + std::make_unique<MockSharingMessageHandler>(), chrome_browser_sharing::SharingMessage::kSharedClipboardMessage); EXPECT_TRUE(handler_registry->GetSharingHandler( chrome_browser_sharing::SharingMessage::kSharedClipboardMessage));
diff --git a/chrome/browser/sharing/sharing_service_unittest.cc b/chrome/browser/sharing/sharing_service_unittest.cc index 6c7176c..8cd4b45 100644 --- a/chrome/browser/sharing/sharing_service_unittest.cc +++ b/chrome/browser/sharing/sharing_service_unittest.cc
@@ -14,11 +14,12 @@ #include "base/test/task_environment.h" #include "chrome/browser/sharing/fake_device_info.h" #include "chrome/browser/sharing/features.h" +#include "chrome/browser/sharing/mock_sharing_device_source.h" +#include "chrome/browser/sharing/mock_sharing_message_sender.h" #include "chrome/browser/sharing/proto/sharing_message.pb.h" #include "chrome/browser/sharing/sharing_constants.h" #include "chrome/browser/sharing/sharing_device_registration.h" #include "chrome/browser/sharing/sharing_device_registration_result.h" -#include "chrome/browser/sharing/sharing_device_source_sync.h" #include "chrome/browser/sharing/sharing_fcm_handler.h" #include "chrome/browser/sharing/sharing_fcm_sender.h" #include "chrome/browser/sharing/sharing_handler_registry.h" @@ -90,25 +91,6 @@ MOCK_METHOD0(StopListening, void()); }; -class MockSharingMessageSender : public SharingMessageSender { - public: - MockSharingMessageSender() - : SharingMessageSender( - /*sync_prefs=*/nullptr, - /*local_device_info_provider=*/nullptr) {} - ~MockSharingMessageSender() override = default; - - MOCK_METHOD5(SendMessageToDevice, - void(const syncer::DeviceInfo&, - base::TimeDelta, - chrome_browser_sharing::SharingMessage, - DelegateType, - ResponseCallback)); - - private: - DISALLOW_COPY_AND_ASSIGN(MockSharingMessageSender); -}; - class FakeSharingDeviceRegistration : public SharingDeviceRegistration { public: FakeSharingDeviceRegistration( @@ -151,19 +133,6 @@ int unregistration_attempts_ = 0; }; -class MockSharingDeviceSource : public SharingDeviceSource { - public: - bool IsReady() override { return true; } - - MOCK_METHOD1(GetDeviceByGuid, - std::unique_ptr<syncer::DeviceInfo>(const std::string& guid)); - - MOCK_METHOD1( - GetDeviceCandidates, - std::vector<std::unique_ptr<syncer::DeviceInfo>>( - sync_pb::SharingSpecificFields::EnabledFeatures required_feature)); -}; - class SharingServiceTest : public testing::Test { public: SharingServiceTest() { @@ -179,6 +148,8 @@ device_source_ = new testing::NiceMock<MockSharingDeviceSource>(); sharing_message_sender_ = new testing::NiceMock<MockSharingMessageSender>(); SharingSyncPreference::RegisterProfilePrefs(prefs_.registry()); + + ON_CALL(*device_source_, IsReady()).WillByDefault(testing::Return(true)); } ~SharingServiceTest() override {
diff --git a/chrome/browser/sharing/webrtc/sharing_webrtc_connection_host_unittest.cc b/chrome/browser/sharing/webrtc/sharing_webrtc_connection_host_unittest.cc index 0c812e3..ff5fd944 100644 --- a/chrome/browser/sharing/webrtc/sharing_webrtc_connection_host_unittest.cc +++ b/chrome/browser/sharing/webrtc/sharing_webrtc_connection_host_unittest.cc
@@ -10,9 +10,9 @@ #include "base/time/time.h" #include "chrome/browser/sharing/fake_device_info.h" #include "chrome/browser/sharing/fake_sharing_handler_registry.h" +#include "chrome/browser/sharing/mock_sharing_message_handler.h" #include "chrome/browser/sharing/proto/sharing_message.pb.h" #include "chrome/browser/sharing/sharing_constants.h" -#include "chrome/browser/sharing/sharing_message_handler.h" #include "chrome/browser/sharing/webrtc/webrtc_signalling_host_fcm.h" #include "chrome/services/sharing/public/mojom/webrtc.mojom.h" #include "content/public/test/browser_task_environment.h" @@ -62,16 +62,6 @@ void(std::vector<sharing::mojom::IceCandidatePtr>)); }; -class MockSharingMessageHandler : public SharingMessageHandler { - public: - MockSharingMessageHandler() = default; - ~MockSharingMessageHandler() override = default; - - // SharingMessageHandler: - MOCK_METHOD2(OnMessage, - void(chrome_browser_sharing::SharingMessage, DoneCallback)); -}; - chrome_browser_sharing::WebRtcMessage CreateMessage() { chrome_browser_sharing::WebRtcMessage message; message.set_message_guid("guid");
diff --git a/chrome/browser/sharing/webrtc/webrtc_signalling_host_fcm_unittest.cc b/chrome/browser/sharing/webrtc/webrtc_signalling_host_fcm_unittest.cc index 7a2bd46..0d472849 100644 --- a/chrome/browser/sharing/webrtc/webrtc_signalling_host_fcm_unittest.cc +++ b/chrome/browser/sharing/webrtc/webrtc_signalling_host_fcm_unittest.cc
@@ -6,8 +6,8 @@ #include "base/test/bind_test_util.h" #include "chrome/browser/sharing/fake_device_info.h" +#include "chrome/browser/sharing/mock_sharing_message_sender.h" #include "chrome/browser/sharing/proto/sharing_message.pb.h" -#include "chrome/browser/sharing/sharing_message_sender.h" #include "chrome/browser/sharing/sharing_send_message_result.h" #include "chrome/services/sharing/public/mojom/webrtc.mojom.h" #include "content/public/test/browser_task_environment.h" @@ -16,24 +16,6 @@ namespace { -class MockSharingMessageSender : public SharingMessageSender { - public: - MockSharingMessageSender() - : SharingMessageSender( - /*sync_prefs=*/nullptr, - /*local_device_info_provider=*/nullptr) {} - MockSharingMessageSender(const MockSharingMessageSender&) = delete; - MockSharingMessageSender& operator=(const MockSharingMessageSender&) = delete; - ~MockSharingMessageSender() override = default; - - MOCK_METHOD5(SendMessageToDevice, - void(const syncer::DeviceInfo&, - base::TimeDelta, - chrome_browser_sharing::SharingMessage, - DelegateType, - ResponseCallback)); -}; - class MockSignallingService : public sharing::mojom::SignallingReceiver { public: MockSignallingService() = default;
diff --git a/chrome/browser/shell_integration.cc b/chrome/browser/shell_integration.cc index 8a18fef..c3c4f63 100644 --- a/chrome/browser/shell_integration.cc +++ b/chrome/browser/shell_integration.cc
@@ -12,7 +12,7 @@ #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include "base/task/post_task.h" #include "base/task/single_thread_task_runner_thread_mode.h" #include "base/task/task_traits.h" @@ -53,14 +53,14 @@ // TODO(crbug.com/773563): Remove |g_sequenced_task_runner| and use an instance // field / singleton instead. #if defined(OS_WIN) -base::LazyCOMSTATaskRunner g_sequenced_task_runner = +base::LazyThreadPoolCOMSTATaskRunner g_sequenced_task_runner = LAZY_COM_STA_TASK_RUNNER_INITIALIZER( - base::TaskTraits(base::ThreadPool(), base::MayBlock()), + base::TaskTraits(base::MayBlock()), base::SingleThreadTaskRunnerThreadMode::SHARED); #else -base::LazySequencedTaskRunner g_sequenced_task_runner = - LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER( - base::TaskTraits(base::ThreadPool(), base::MayBlock())); +base::LazyThreadPoolSequencedTaskRunner g_sequenced_task_runner = + LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER( + base::TaskTraits(base::MayBlock())); #endif } // namespace
diff --git a/chrome/browser/supervised_user/experimental/supervised_user_blacklist.cc b/chrome/browser/supervised_user/supervised_user_blacklist.cc similarity index 93% rename from chrome/browser/supervised_user/experimental/supervised_user_blacklist.cc rename to chrome/browser/supervised_user/supervised_user_blacklist.cc index ce45b25..451ffb1d 100644 --- a/chrome/browser/supervised_user/experimental/supervised_user_blacklist.cc +++ b/chrome/browser/supervised_user/supervised_user_blacklist.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/supervised_user/experimental/supervised_user_blacklist.h" +#include "chrome/browser/supervised_user/supervised_user_blacklist.h" #include <algorithm> #include <cstring> @@ -33,8 +33,7 @@ host_hashes->resize(hash_count); for (size_t i = 0; i < hash_count; i++) { - memcpy((*host_hashes.get())[i].data, - file.data() + i * base::kSHA1Length, + memcpy((*host_hashes.get())[i].data, file.data() + i * base::kSHA1Length, base::kSHA1Length); } @@ -43,7 +42,7 @@ return host_hashes; } -} // namespace +} // namespace SupervisedUserBlacklist::Hash::Hash(const std::string& host) { const unsigned char* host_bytes =
diff --git a/chrome/browser/supervised_user/experimental/supervised_user_blacklist.h b/chrome/browser/supervised_user/supervised_user_blacklist.h similarity index 85% rename from chrome/browser/supervised_user/experimental/supervised_user_blacklist.h rename to chrome/browser/supervised_user/supervised_user_blacklist.h index d185282..32252b93 100644 --- a/chrome/browser/supervised_user/experimental/supervised_user_blacklist.h +++ b/chrome/browser/supervised_user/supervised_user_blacklist.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_SUPERVISED_USER_EXPERIMENTAL_SUPERVISED_USER_BLACKLIST_H_ -#define CHROME_BROWSER_SUPERVISED_USER_EXPERIMENTAL_SUPERVISED_USER_BLACKLIST_H_ +#ifndef CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_BLACKLIST_H_ +#define CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_BLACKLIST_H_ #include <stddef.h> @@ -58,4 +58,4 @@ DISALLOW_COPY_AND_ASSIGN(SupervisedUserBlacklist); }; -#endif // CHROME_BROWSER_SUPERVISED_USER_EXPERIMENTAL_SUPERVISED_USER_BLACKLIST_H_ +#endif // CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_BLACKLIST_H_
diff --git a/chrome/browser/supervised_user/experimental/supervised_user_filtering_switches.cc b/chrome/browser/supervised_user/supervised_user_filtering_switches.cc similarity index 95% rename from chrome/browser/supervised_user/experimental/supervised_user_filtering_switches.cc rename to chrome/browser/supervised_user/supervised_user_filtering_switches.cc index 1868fa3..07fc128f 100644 --- a/chrome/browser/supervised_user/experimental/supervised_user_filtering_switches.cc +++ b/chrome/browser/supervised_user/supervised_user_filtering_switches.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/supervised_user/experimental/supervised_user_filtering_switches.h" +#include "chrome/browser/supervised_user/supervised_user_filtering_switches.h" #include "base/command_line.h" #include "base/metrics/field_trial.h"
diff --git a/chrome/browser/supervised_user/experimental/supervised_user_filtering_switches.h b/chrome/browser/supervised_user/supervised_user_filtering_switches.h similarity index 65% rename from chrome/browser/supervised_user/experimental/supervised_user_filtering_switches.h rename to chrome/browser/supervised_user/supervised_user_filtering_switches.h index d86d04b4..43001f7 100644 --- a/chrome/browser/supervised_user/experimental/supervised_user_filtering_switches.h +++ b/chrome/browser/supervised_user/supervised_user_filtering_switches.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_SUPERVISED_USER_EXPERIMENTAL_SUPERVISED_USER_FILTERING_SWITCHES_H_ -#define CHROME_BROWSER_SUPERVISED_USER_EXPERIMENTAL_SUPERVISED_USER_FILTERING_SWITCHES_H_ +#ifndef CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_FILTERING_SWITCHES_H_ +#define CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_FILTERING_SWITCHES_H_ class Profile; @@ -16,4 +16,4 @@ } // namespace supervised_users -#endif // CHROME_BROWSER_SUPERVISED_USER_EXPERIMENTAL_SUPERVISED_USER_FILTERING_SWITCHES_H_ +#endif // CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_FILTERING_SWITCHES_H_
diff --git a/chrome/browser/supervised_user/supervised_user_service.cc b/chrome/browser/supervised_user/supervised_user_service.cc index 0a3df66..718618f 100644 --- a/chrome/browser/supervised_user/supervised_user_service.cc +++ b/chrome/browser/supervised_user/supervised_user_service.cc
@@ -24,10 +24,10 @@ #include "chrome/browser/component_updater/supervised_user_whitelist_installer.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_key.h" -#include "chrome/browser/supervised_user/experimental/supervised_user_filtering_switches.h" #include "chrome/browser/supervised_user/permission_request_creator.h" #include "chrome/browser/supervised_user/supervised_user_constants.h" #include "chrome/browser/supervised_user/supervised_user_features.h" +#include "chrome/browser/supervised_user/supervised_user_filtering_switches.h" #include "chrome/browser/supervised_user/supervised_user_service_factory.h" #include "chrome/browser/supervised_user/supervised_user_service_observer.h" #include "chrome/browser/supervised_user/supervised_user_settings_service.h"
diff --git a/chrome/browser/supervised_user/supervised_user_service.h b/chrome/browser/supervised_user/supervised_user_service.h index 88c738b2..5d45d88a 100644 --- a/chrome/browser/supervised_user/supervised_user_service.h +++ b/chrome/browser/supervised_user/supervised_user_service.h
@@ -20,7 +20,7 @@ #include "base/strings/string16.h" #include "build/build_config.h" #include "chrome/browser/net/file_downloader.h" -#include "chrome/browser/supervised_user/experimental/supervised_user_blacklist.h" +#include "chrome/browser/supervised_user/supervised_user_blacklist.h" #include "chrome/browser/supervised_user/supervised_user_url_filter.h" #include "chrome/browser/supervised_user/supervised_users.h" #include "chrome/browser/ui/browser_list_observer.h"
diff --git a/chrome/browser/supervised_user/supervised_user_url_filter.cc b/chrome/browser/supervised_user/supervised_user_url_filter.cc index 5705295..f7c5adb 100644 --- a/chrome/browser/supervised_user/supervised_user_url_filter.cc +++ b/chrome/browser/supervised_user/supervised_user_url_filter.cc
@@ -23,8 +23,8 @@ #include "base/task/post_task.h" #include "base/task_runner_util.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/supervised_user/experimental/supervised_user_blacklist.h" #include "chrome/browser/supervised_user/kids_management_url_checker_client.h" +#include "chrome/browser/supervised_user/supervised_user_blacklist.h" #include "chrome/common/chrome_features.h" #include "components/policy/core/browser/url_blacklist_manager.h" #include "components/policy/core/browser/url_util.h"
diff --git a/chrome/browser/themes/theme_properties.h b/chrome/browser/themes/theme_properties.h index 8e5ac4dd..32eb72d 100644 --- a/chrome/browser/themes/theme_properties.h +++ b/chrome/browser/themes/theme_properties.h
@@ -110,6 +110,9 @@ // shelf. COLOR_TOOLBAR_VERTICAL_SEPARATOR, + // Opaque base color for toolbar button ink drops. + COLOR_TOOLBAR_INK_DROP, + // Color used for various 'shelves' and 'bars'. COLOR_DOWNLOAD_SHELF, COLOR_INFOBAR,
diff --git a/chrome/browser/themes/theme_service.cc b/chrome/browser/themes/theme_service.cc index 50ab1247..f0d6155 100644 --- a/chrome/browser/themes/theme_service.cc +++ b/chrome/browser/themes/theme_service.cc
@@ -666,6 +666,10 @@ return SkColorSetA(GetColor(TP::COLOR_TOOLBAR_BUTTON_ICON, incognito), 0x4D); } + case TP::COLOR_TOOLBAR_INK_DROP: { + return color_utils::GetColorWithMaxContrast( + GetColor(TP::COLOR_TOOLBAR, incognito)); + } case TP::COLOR_TOOLBAR_CONTENT_AREA_SEPARATOR: if (UsingDefaultTheme()) break;
diff --git a/chrome/browser/themes/theme_service_win.cc b/chrome/browser/themes/theme_service_win.cc index 3b32166..e732f7b 100644 --- a/chrome/browser/themes/theme_service_win.cc +++ b/chrome/browser/themes/theme_service_win.cc
@@ -14,6 +14,7 @@ #include "ui/gfx/color_utils.h" #include "ui/gfx/geometry/safe_integer_conversions.h" #include "ui/native_theme/native_theme.h" +#include "ui/views/views_features.h" namespace { @@ -154,6 +155,11 @@ break; // Highlight/Selected Background + case ThemeProperties::COLOR_TOOLBAR_INK_DROP: + if (!base::FeatureList::IsEnabled( + views::features::kEnablePlatformHighContrastInkDrop)) + return false; + FALLTHROUGH; case ThemeProperties::COLOR_OMNIBOX_RESULTS_BG_SELECTED: case ThemeProperties::COLOR_OMNIBOX_RESULTS_BG_HOVERED: system_theme_color = ui::NativeTheme::SystemThemeColor::kHighlight;
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings.grd b/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings.grd index bb9ef9e..23146786 100644 --- a/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings.grd +++ b/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings.grd
@@ -82,6 +82,7 @@ <output filename="values-uz/android_touch_to_fill_strings.xml" lang="uz" type="android" /> <output filename="values-vi/android_touch_to_fill_strings.xml" lang="vi" type="android" /> <output filename="values-zh-rCN/android_touch_to_fill_strings.xml" lang="zh-CN" type="android" /> + <output filename="values-zh-rHK/android_touch_to_fill_strings.xml" lang="zh-HK" type="android" /> <output filename="values-zh-rTW/android_touch_to_fill_strings.xml" lang="zh-TW" type="android" /> <output filename="values-zu/android_touch_to_fill_strings.xml" lang="zu" type="android" /> </outputs>
diff --git a/chrome/browser/tracing/background_tracing_metrics_provider.cc b/chrome/browser/tracing/background_tracing_metrics_provider.cc index f32aa1f3..beb1540 100644 --- a/chrome/browser/tracing/background_tracing_metrics_provider.cc +++ b/chrome/browser/tracing/background_tracing_metrics_provider.cc
@@ -6,6 +6,9 @@ #include <utility> +#include "base/strings/string_piece.h" +#include "base/time/time.h" +#include "components/metrics/field_trials_provider.h" #include "content/public/browser/background_tracing_manager.h" #include "third_party/metrics_proto/chrome_user_metrics_extension.pb.h" #include "third_party/metrics_proto/trace_log.pb.h" @@ -35,6 +38,13 @@ } metrics::TraceLog* log = uma_proto->add_trace_log(); log->set_raw_data(std::move(serialized_trace)); + + // TODO(ssid): Find a better way to record other system profile metrics in + // independent providers. + variations::FieldTrialsProvider provider(nullptr, base::StringPiece()); + provider.ProvideSystemProfileMetricsWithLogCreationTime( + base::TimeTicks(), uma_proto->mutable_system_profile()); + std::move(done_callback).Run(true); }
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 035bab0..ee7cbd3 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -1061,6 +1061,8 @@ "passwords/bubble_controllers/items_bubble_controller.h", "passwords/bubble_controllers/password_bubble_controller_base.cc", "passwords/bubble_controllers/password_bubble_controller_base.h", + "passwords/bubble_controllers/sign_in_promo_bubble_controller.cc", + "passwords/bubble_controllers/sign_in_promo_bubble_controller.h", "passwords/credential_leak_dialog_controller.h", "passwords/credential_leak_dialog_controller_impl.cc", "passwords/credential_leak_dialog_controller_impl.h",
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd index c7380d3..0e6d894 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -109,6 +109,7 @@ <output filename="values-uz/android_chrome_strings.xml" lang="uz" type="android" /> <output filename="values-vi/android_chrome_strings.xml" lang="vi" type="android" /> <output filename="values-zh-rCN/android_chrome_strings.xml" lang="zh-CN" type="android" /> + <output filename="values-zh-rHK/android_chrome_strings.xml" lang="zh-HK" type="android" /> <output filename="values-zh-rTW/android_chrome_strings.xml" lang="zh-TW" type="android" /> <output filename="values-zu/android_chrome_strings.xml" lang="zu" type="android" /> </outputs>
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 a3daf504..79d49f6 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
@@ -308,7 +308,7 @@ <translation id="3298243779924642547">نسخة خفيفة</translation> <translation id="3303414029551471755">هل ترغب في الاستمرار في تنزيل المحتوى؟</translation> <translation id="3306398118552023113">يتم تشغيل هذا التطبيق في Chrome</translation> -<translation id="3312292613668865961">السؤال قبل السماح للمواقع الإلكترونية بالوصول إلى بيانات وجهاز الواقع الافتراضي (مُوصى به)</translation> +<translation id="3312292613668865961">طلب الإذن قبل السماح للمواقع الإلكترونية بالوصول إلى جهاز الواقع الافتراضي وبياناته (إعداد مُوصى به)</translation> <translation id="3315103659806849044">يتم حاليًا تخصيص إعدادات خدمة Google والمزامنة. لإنهاء تفعيل المزامنة، يُرجى الضغط على زر "التأكيد" بالقرب من أسفل الشاشة. الانتقال إلى أعلى</translation> <translation id="3328801116991980348">معلومات موقع الويب</translation> <translation id="3333961966071413176">جميع جهات الاتصال</translation> @@ -514,7 +514,7 @@ <translation id="4915549754973153784"><ph name="BEGIN_LINK" />الحصول على مساعدة<ph name="END_LINK" /> أثناء البحث عن الأجهزة…</translation> <translation id="4921180162323349895">{FILE_COUNT,plural, =1{صفحة واحدة (#)}zero{# صفحة}two{صفحتان (#)}few{# صفحات}many{# صفحةً}other{# صفحة}}</translation> <translation id="4932247056774066048">لأنك بصدد الخروج من حساب تتم إدارته من خلال <ph name="DOMAIN_NAME" />، سيتم حذف بيانات Chrome من هذا الجهاز. وستظل البيانات في حسابك على Google.</translation> -<translation id="4935305910887312910">السؤال قبل السماح للمواقع الإلكترونية بالوصول إلى موضع الكاميرا أو تصوير غرفتك (مُوصى به)</translation> +<translation id="4935305910887312910">طلب الإذن قبل السماح للمواقع الإلكترونية بالوصول إلى موضع الكاميرا أو تصوير غرفتك (إعداد مُوصى به)</translation> <translation id="4943703118917034429">الواقع الافتراضي</translation> <translation id="4943872375798546930">لا نتائج</translation> <translation id="4958708863221495346">يشارك <ph name="URL_OF_THE_CURRENT_TAB" /> شاشتك</translation> @@ -1028,7 +1028,7 @@ <translation id="8676374126336081632">محو الإرسال</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{مستوى قوة الإشارة: شريط واحد (#)}zero{مستوى قوة الإشارة: # شريط}two{مستوى قوة الإشارة: شريطان (#)}few{مستوى قوة الإشارة: # أشرطة}many{مستوى قوة الإشارة: # شريطًا}other{مستوى قوة الإشارة: # شريط}}</translation> <translation id="868929229000858085">البحث في جهات الاتصال</translation> -<translation id="8698438463325761328">حظر المواقع الإلكترونية من الوصول إلى بيانات وجهاز الواقع الافتراضي</translation> +<translation id="8698438463325761328">حظر المواقع الإلكترونية من الوصول إلى جهاز الواقع الافتراضي وبياناته</translation> <translation id="869891660844655955">تاريخ انتهاء الصلاحية</translation> <translation id="8728487861892616501">باستخدامك لهذا التطبيق، أنت توافق على <ph name="BEGIN_LINK1" />بنود الخدمة في Chrome<ph name="END_LINK1" /> و<ph name="BEGIN_LINK2" />إشعار الخصوصية<ph name="END_LINK2" /> و<ph name="BEGIN_LINK3" />إشعار الخصوصية لحسابات Google المُدارة من خلال Family Link<ph name="END_LINK3" />.</translation> <translation id="8748850008226585750">المحتوى مخفي</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb index 2e8d8f51..b1439f4 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
@@ -279,6 +279,7 @@ <translation id="3060635849835183725">{BOOKMARKS_COUNT,plural, =1{<ph name="BOOKMARKS_COUNT_ONE" /> əlfəcin}other{<ph name="BOOKMARKS_COUNT_MANY" /> əlfəcin}}</translation> <translation id="3089395242580810162">Gizli tabda açın</translation> <translation id="3123473560110926937">Bəzi saytlarda bloklandı</translation> +<translation id="3123734510202723619">Elanlar</translation> <translation id="3137521801621304719">Gizli rejimdən çıxın</translation> <translation id="3143515551205905069">Sinxronizasiyanı ləğv edin</translation> <translation id="3157842584138209013">Digər Seçimlər düyməsindən yadda saxladığınız data miqdarına baxın</translation> @@ -307,7 +308,7 @@ <translation id="3298243779924642547">Xəbərdarlıq</translation> <translation id="3303414029551471755">Kontentin endirilməsinə davam etmək istəyirsiniz?</translation> <translation id="3306398118552023113">Bu tətbiq Chrome'da işləyir</translation> -<translation id="3312292613668865961">Saytlar virtual reallıq cihazınıza və datanıza giriş etməzdən əvvəl icazə istəsin (tövsiyə edilir)</translation> +<translation id="3312292613668865961">Saytlar virtual reallıq cihazınıza və datanıza giriş etmədən əvvəl icazə istəsin (tövsiyə edilir)</translation> <translation id="3315103659806849044">Hazırda Sinxronizasiya və Google xidmət ayarlarını fərdiləşdirirsiniz. Sinxronizasiyanı aktiv etməyi tamamlamaq üçün ekranın aşağısına yaxın "Təsdiq edin" düyməsinə klikləyin. Yuxarı gedin</translation> <translation id="3328801116991980348">Sayt haqqında</translation> <translation id="3333961966071413176">Bütün kontaktar</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb index ee3f235..c22a263 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
@@ -279,6 +279,7 @@ <translation id="3060635849835183725">{BOOKMARKS_COUNT,plural, =1{<ph name="BOOKMARKS_COUNT_ONE" /> закладка}one{<ph name="BOOKMARKS_COUNT_MANY" /> закладка}few{<ph name="BOOKMARKS_COUNT_MANY" /> закладкі}many{<ph name="BOOKMARKS_COUNT_MANY" /> закладак}other{<ph name="BOOKMARKS_COUNT_MANY" /> закладкі}}</translation> <translation id="3089395242580810162">Адкрыць ва ўкладцы інкогніта</translation> <translation id="3123473560110926937">Заблакіравана на некаторых сайтах</translation> +<translation id="3123734510202723619">Апавяшчэнні</translation> <translation id="3137521801621304719">Выйсці з рэжыму інкогніта</translation> <translation id="3143515551205905069">Скасаваць сінхранізацыю</translation> <translation id="3157842584138209013">Глядзіце, колькі трафіка вы сэканомілі, з дапамогай кнопкі "Дадатковыя параметры"</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb index 001fed2..e83bf95f3 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
@@ -279,6 +279,7 @@ <translation id="3060635849835183725">{BOOKMARKS_COUNT,plural, =1{<ph name="BOOKMARKS_COUNT_ONE" /> отметка}other{<ph name="BOOKMARKS_COUNT_MANY" /> отметки}}</translation> <translation id="3089395242580810162">Отваряне в раздел „инкогнито“</translation> <translation id="3123473560110926937">Блокиране на някои сайтове</translation> +<translation id="3123734510202723619">Съобщения</translation> <translation id="3137521801621304719">Напускане на режима „инкогнито“</translation> <translation id="3143515551205905069">Анулиране на синхронизирането</translation> <translation id="3157842584138209013">Използвайте бутона „Още опции“, за да видите колко данни сте спестили</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb index febed7e9..a4b99ae 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
@@ -308,7 +308,7 @@ <translation id="3298243779924642547">Lite-Modus</translation> <translation id="3303414029551471755">Inhalt herunterladen?</translation> <translation id="3306398118552023113">Diese App wird in Chrome ausgeführt</translation> -<translation id="3312292613668865961">Nachfragen, bevor Websites erlaubt wird, auf Ihre Virtual-Reality-Geräte und -Daten zuzugreifen (empfohlen)</translation> +<translation id="3312292613668865961">Nachfragen, bevor Websites erlaubt wird, auf mein Virtual-Reality-Gerät und meine Virtual-Reality-Daten zuzugreifen (empfohlen)</translation> <translation id="3315103659806849044">Sie passen gerade die Einstellungen für "Synchronisierung und Google-Dienste" an Wenn Sie die Aktivierung der Synchronisierung abschließen möchten, tippen Sie unten auf dem Bildschirm auf "Bestätigen". Nach oben</translation> <translation id="3328801116991980348">Websiteinformationen</translation> <translation id="3333961966071413176">Alle Kontakte</translation> @@ -319,7 +319,7 @@ <translation id="3367813778245106622">Melden Sie sich nochmals an, um die Synchronisierung zu starten</translation> <translation id="3374023511497244703">Ihre Lesezeichen, Ihr Verlauf, Ihre Passwörter und andere Chrome-Daten werden nicht mehr mit Ihrem Google-Konto synchronisiert.</translation> <translation id="3384347053049321195">Bild teilen</translation> -<translation id="3386292677130313581">Nachfragen, bevor Websites Ihr Standort angezeigt wird (empfohlen)</translation> +<translation id="3386292677130313581">Nachfragen, bevor Websites mein Standort angezeigt wird (empfohlen)</translation> <translation id="3387650086002190359"><ph name="FILE_NAME" /> konnte aufgrund von Dateisystemfehlern nicht heruntergeladen werden.</translation> <translation id="3389286852084373014">SMS zu lang</translation> <translation id="3398320232533725830">Lesezeichen-Manager öffnen</translation> @@ -514,7 +514,7 @@ <translation id="4915549754973153784"><ph name="BEGIN_LINK" />Hilfe aufrufen<ph name="END_LINK" />, während nach Geräten gesucht wird…</translation> <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# Seite}other{# Seiten}}</translation> <translation id="4932247056774066048">Da Sie sich von einem Konto abmelden, das von <ph name="DOMAIN_NAME" /> verwaltet wird, werden Ihre Chrome-Daten auf diesem Gerät gelöscht. Die Daten bleiben jedoch in Ihrem Google-Konto.</translation> -<translation id="4935305910887312910">Nachfragen, bevor Websites erlaubt wird, auf Ihre Kameraposition zuzugreifen oder Ihr Zimmer zu vermessen (empfohlen)</translation> +<translation id="4935305910887312910">Nachfragen, bevor Websites erlaubt wird, auf meine Kameraposition zuzugreifen oder mein Zimmer zu vermessen (empfohlen)</translation> <translation id="4943703118917034429">Virtual Reality</translation> <translation id="4943872375798546930">Keine Ergebnisse</translation> <translation id="4958708863221495346"><ph name="URL_OF_THE_CURRENT_TAB" /> hat Ihren Bildschirm freigegeben</translation> @@ -1028,7 +1028,7 @@ <translation id="8676374126336081632">Eingabe löschen</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Signalstärke: # Balken}other{Signalstärke: # Balken}}</translation> <translation id="868929229000858085">Kontakte durchsuchen</translation> -<translation id="8698438463325761328">Websites daran hindern, auf Ihre Virtual-Reality-Geräte und -Daten zuzugreifen</translation> +<translation id="8698438463325761328">Websites daran hindern, auf mein Virtual-Reality-Gerät und meine Virtual-Reality-Daten zuzugreifen</translation> <translation id="869891660844655955">Ablaufdatum</translation> <translation id="8728487861892616501">Durch die Nutzung dieser Anwendung stimmen Sie den <ph name="BEGIN_LINK1" />Nutzungsbedingungen<ph name="END_LINK1" /> und <ph name="BEGIN_LINK2" />Datenschutzhinweisen<ph name="END_LINK2" /> von Chrome sowie den <ph name="BEGIN_LINK3" />Datenschutzhinweisen für mit Family Link verwaltete Google-Konten<ph name="END_LINK3" /> zu.</translation> <translation id="8748850008226585750">Inhalte ausgeblendet</translation> @@ -1045,7 +1045,7 @@ <translation id="883806473910249246">Beim Herunterladen des Inhalts ist ein Fehler aufgetreten.</translation> <translation id="8840953339110955557">Diese Seite unterscheidet sich gegebenenfalls von der Onlineversion.</translation> <translation id="8847988622838149491">USB</translation> -<translation id="884828189055900810">Websites daran hindern, auf Ihre Kameraposition zuzugreifen oder Ihr Zimmer zu vermessen</translation> +<translation id="884828189055900810">Websites daran hindern, auf meine Kameraposition zuzugreifen oder mein Zimmer zu vermessen</translation> <translation id="8853345339104747198"><ph name="TAB_TITLE" /></translation> <translation id="885701979325669005">Speicher</translation> <translation id="889338405075704026">Zu den Chrome-Einstellungen</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb index 7772d39..c2b54b3 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
@@ -279,7 +279,7 @@ <translation id="3060635849835183725">{BOOKMARKS_COUNT,plural, =1{<ph name="BOOKMARKS_COUNT_ONE" /> marcador}other{<ph name="BOOKMARKS_COUNT_MANY" /> marcadores}}</translation> <translation id="3089395242580810162">Abrir en pestaña de incógnito</translation> <translation id="3123473560110926937">Bloqueados en algunos sitios web</translation> -<translation id="3123734510202723619">Avisos</translation> +<translation id="3123734510202723619">Anuncios</translation> <translation id="3137521801621304719">Salir del modo de incógnito</translation> <translation id="3143515551205905069">Cancelar sincronización</translation> <translation id="3157842584138209013">Consulta la cantidad de datos que has ahorrado con el botón Más opciones</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb index 67c41c0..a62ca15e 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
@@ -279,6 +279,7 @@ <translation id="3060635849835183725">{BOOKMARKS_COUNT,plural, =1{<ph name="BOOKMARKS_COUNT_ONE" /> kirjanmerkki}other{<ph name="BOOKMARKS_COUNT_MANY" /> kirjanmerkkiä}}</translation> <translation id="3089395242580810162">Avaa incognito-välilehdellä</translation> <translation id="3123473560110926937">Estetty tietyillä sivustoilla</translation> +<translation id="3123734510202723619">Ilmoitukset</translation> <translation id="3137521801621304719">Poistu incognito-tilasta</translation> <translation id="3143515551205905069">Peruuta synkronointi</translation> <translation id="3157842584138209013">Lisäasetukset-painiketta klikkaamalla voit katsoa, kuinka paljon dataa olet säästänyt.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb index d4adfb35..9cc2bd1 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb
@@ -279,6 +279,7 @@ <translation id="3060635849835183725">{BOOKMARKS_COUNT,plural, =1{<ph name="BOOKMARKS_COUNT_ONE" /> bookmark}one{<ph name="BOOKMARKS_COUNT_MANY" /> bookmark}other{<ph name="BOOKMARKS_COUNT_MANY" /> na bookmark}}</translation> <translation id="3089395242580810162">Buksan sa tab na incognito</translation> <translation id="3123473560110926937">Naka-block sa ilang site</translation> +<translation id="3123734510202723619">Mga Anunsyo</translation> <translation id="3137521801621304719">Umalis sa mode na incognito</translation> <translation id="3143515551205905069">Kanselahin ang pag-sync</translation> <translation id="3157842584138209013">Tingnan kung gaano karaming data ang iyong natipid sa button ng Higit Pang Opsyon</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb index 946acbf0..6a5a26f 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
@@ -134,6 +134,7 @@ <translation id="1994173015038366702">URL du site</translation> <translation id="2000419248597011803">Envoie des témoins et des recherches à partir de la barre d'adresse et du champ de recherche à votre moteur de recherche par défaut</translation> <translation id="2002537628803770967">Cartes de crédit et adresses utilisées avec Google Pay</translation> +<translation id="2012973609889389923">Site rapide</translation> <translation id="2013642289801508067">{FILE_COUNT,plural, =1{# fichier}one{# fichier}other{# fichiers}}</translation> <translation id="2017836877785168846">Efface l'historique et la saisie semi-automatique de la barre d'adresse.</translation> <translation id="2021896219286479412">Contrôles du site en plein écran</translation> @@ -278,6 +279,7 @@ <translation id="3060635849835183725">{BOOKMARKS_COUNT,plural, =1{<ph name="BOOKMARKS_COUNT_ONE" /> favori}one{<ph name="BOOKMARKS_COUNT_MANY" /> favori}other{<ph name="BOOKMARKS_COUNT_MANY" /> favoris}}</translation> <translation id="3089395242580810162">Ouvrir dans onglet nav. privée</translation> <translation id="3123473560110926937">Annonces bloquées sur certains sites</translation> +<translation id="3123734510202723619">Annonces</translation> <translation id="3137521801621304719">Désactiver le mode de navigation privée</translation> <translation id="3143515551205905069">Annuler la synchronisation</translation> <translation id="3157842584138209013">Affichez la quantité de données enregistrées à partir du bouton Plus d'options</translation> @@ -306,6 +308,7 @@ <translation id="3298243779924642547">Simplifié</translation> <translation id="3303414029551471755">Lancer le téléchargement du contenu?</translation> <translation id="3306398118552023113">Cette application s'exécute dans Google Chrome</translation> +<translation id="3312292613668865961">Demander avant d'autoriser les sites à accéder à votre appareil et vos données de réalité virtuelle (recommandé)</translation> <translation id="3315103659806849044">Vous personnalisez actuellement les paramètres relatifs aux services Google et à la synchronisation. Pour valider l'activation de la synchronisation, touchez le bouton Confirmer dans le bas de l'écran. Revenir au haut de la page</translation> <translation id="3328801116991980348">Information sur le site</translation> <translation id="3333961966071413176">Tous les contacts</translation> @@ -511,6 +514,7 @@ <translation id="4915549754973153784"><ph name="BEGIN_LINK" />Obtenir de l'aide<ph name="END_LINK" /> pendant la recherche d'appareils…</translation> <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# page}one{# page}other{# pages}}</translation> <translation id="4932247056774066048">Comme vous vous déconnectez d'un compte géré par <ph name="DOMAIN_NAME" />, vos données Chrome seront supprimées de cet appareil. Elles resteront toutefois dans votre compte Google.</translation> +<translation id="4935305910887312910">Demander avant d'autoriser les sites à accéder à la position de votre appareil photo ou de cartographier votre pièce (recommandé)</translation> <translation id="4943703118917034429">Réalité virtuelle</translation> <translation id="4943872375798546930">Aucun résultat</translation> <translation id="4958708863221495346"><ph name="URL_OF_THE_CURRENT_TAB" /> partage votre écran</translation> @@ -675,7 +679,7 @@ <translation id="6112702117600201073">Actualisation de la page en cours</translation> <translation id="6127379762771434464">Élément supprimé</translation> <translation id="6140912465461743537">Pays/région</translation> -<translation id="614940544461990577">Essayez :</translation> +<translation id="614940544461990577">Essayez ceci :</translation> <translation id="6154478581116148741">Activez le verrouillage de l'écran dans Paramètres pour exporter vos mots de passe à partir de cet appareil</translation> <translation id="6159335304067198720">Économies de données de <ph name="PERCENT" /></translation> <translation id="6177111841848151710">Bloquée pour le moteur de recherche actuel</translation> @@ -742,6 +746,7 @@ <translation id="6573431926118603307">Les onglets déjà ouverts dans Chrome sur vos autres appareils s'afficheront ici.</translation> <translation id="6583199322650523874">Ajouter la page actuelle aux favoris</translation> <translation id="6593061639179217415">Version ordinateur</translation> +<translation id="6597891566292541626">Placez le code QR ou le code à barres dans ce cadre.</translation> <translation id="6600954340915313787">Copiée dans Chrome</translation> <translation id="6608650720463149374"><ph name="GIGABYTES" /> Go</translation> <translation id="6612358246767739896">Contenu protégé</translation> @@ -951,6 +956,7 @@ <translation id="8109613176066109935">Pour synchroniser vos favoris sur tous vos appareils, activez la synchronisation</translation> <translation id="8110087112193408731">Afficher votre activité Chrome dans Bien-être numérique?</translation> <translation id="8116925261070264013">Désactivés</translation> +<translation id="8127542551745560481">Modifier la page d'accueil</translation> <translation id="813082847718468539">Afficher l'information sur le site</translation> <translation id="8156139159503939589">Quelles langues lisez-vous?</translation> <translation id="8168435359814927499">Contenu</translation> @@ -1022,6 +1028,7 @@ <translation id="8676374126336081632">Effacer l'entrée</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Niveau du signal : # barre}one{Niveau du signal : # barre}other{Niveau du signal : # barres}}</translation> <translation id="868929229000858085">Effectuez une recherche dans vos contacts</translation> +<translation id="8698438463325761328">Empêcher les sites d'accéder à vos appareils et vos données de réalité virtuelle</translation> <translation id="869891660844655955">Date d'expiration</translation> <translation id="8728487861892616501">En utilisant cette application, vous acceptez les <ph name="BEGIN_LINK1" />conditions d'utilisation<ph name="END_LINK1" /> et l'<ph name="BEGIN_LINK2" />avis de confidentialité<ph name="END_LINK2" /> de Chrome ainsi que l'<ph name="BEGIN_LINK3" />avis de confidentialité relatif aux comptes Google gérés dans Family Link<ph name="END_LINK3" />.</translation> <translation id="8748850008226585750">Contenus masqués</translation> @@ -1038,6 +1045,7 @@ <translation id="883806473910249246">Une erreur s'est produite lors du téléchargement du contenu.</translation> <translation id="8840953339110955557">Cette page peut différer de la version en ligne.</translation> <translation id="8847988622838149491">USB</translation> +<translation id="884828189055900810">Empêcher les sites d'accéder à la position de votre appareil photo ou de cartographier votre pièce</translation> <translation id="8853345339104747198">Onglet <ph name="TAB_TITLE" /></translation> <translation id="885701979325669005">Stockage</translation> <translation id="889338405075704026">Aller aux paramètres de Chrome</translation> @@ -1045,6 +1053,7 @@ <translation id="8909135823018751308">Partager...</translation> <translation id="8912362522468806198">Compte Google</translation> <translation id="8920114477895755567">En attente de détails sur les parents.</translation> +<translation id="8921772741368021346"><ph name="POSITION" /> sur <ph name="DURATION" /></translation> <translation id="8922289737868596582">Téléchargez des pages à partir du bouton Plus d'options pour les utiliser hors connexion</translation> <translation id="8926666909099850184">La NFC est désactivée pour cet appareil. Activez-la dans le menu <ph name="BEGIN_LINK" />Paramètres Android<ph name="END_LINK" />.</translation> <translation id="8937772741022875483">Supprimer votre activité Chrome de Bien-être numérique?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb index 4c7a800..ab7803b 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
@@ -134,7 +134,7 @@ <translation id="1994173015038366702">URL du site</translation> <translation id="2000419248597011803">Envoie des cookies et des recherches effectuées à partir de la barre d'adresse et du champ de recherche à votre moteur de recherche par défaut</translation> <translation id="2002537628803770967">Cartes de crédit et adresses utilisées dans Google Pay</translation> -<translation id="2012973609889389923">Site chargeable rapidement</translation> +<translation id="2012973609889389923">Site rapide</translation> <translation id="2013642289801508067">{FILE_COUNT,plural, =1{# fichier}one{# fichier}other{# fichiers}}</translation> <translation id="2017836877785168846">Efface l'historique et les saisies semi-automatiques dans la barre d'adresse.</translation> <translation id="2021896219286479412">Commandes du site en plein écran</translation> @@ -308,7 +308,7 @@ <translation id="3298243779924642547">Simplifié</translation> <translation id="3303414029551471755">Poursuivre et télécharger le contenu ?</translation> <translation id="3306398118552023113">Cette application s'exécute dans Chrome</translation> -<translation id="3312292613668865961">Vous demander votre avis avant d'autoriser les sites à accéder à vos données et à votre appareil de réalité virtuelle (recommandé)</translation> +<translation id="3312292613668865961">Vous demander votre avis avant d'autoriser les sites à accéder à vos données et votre appareil de réalité virtuelle (recommandé)</translation> <translation id="3315103659806849044">Vous personnalisez actuellement les paramètres relatifs aux services Google et à la synchronisation. Pour valider l'activation de la synchronisation, appuyez sur le bouton "Confirmer" en bas de l'écran. Revenir en haut de la page</translation> <translation id="3328801116991980348">Informations sur le site</translation> <translation id="3333961966071413176">Tous les contacts</translation> @@ -514,7 +514,7 @@ <translation id="4915549754973153784"><ph name="BEGIN_LINK" />Obtenir de l'aide<ph name="END_LINK" /> lors de la recherche d'appareils…</translation> <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# page}one{# page}other{# pages}}</translation> <translation id="4932247056774066048">Vous vous déconnectez d'un compte géré par <ph name="DOMAIN_NAME" />. Vos données Chrome seront donc supprimées de cet appareil, mais elles seront conservées dans votre compte Google.</translation> -<translation id="4935305910887312910">Vous demander votre avis avant d'autoriser les sites à recevoir la position de votre caméra ou à cartographier votre pièce (recommandé)</translation> +<translation id="4935305910887312910">Vous demander votre avis avant d'autoriser les sites à obtenir la position de la caméra ou à cartographier la pièce (recommandé)</translation> <translation id="4943703118917034429">Réalité virtuelle</translation> <translation id="4943872375798546930">Aucun résultat</translation> <translation id="4958708863221495346"><ph name="URL_OF_THE_CURRENT_TAB" /> partage votre écran.</translation> @@ -1028,7 +1028,7 @@ <translation id="8676374126336081632">Effacer la saisie</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Intensité du signal : # barre}one{Intensité du signal : # barre}other{Intensité du signal : # barres}}</translation> <translation id="868929229000858085">Rechercher des contacts</translation> -<translation id="8698438463325761328">Empêcher les sites d'accéder à vos données et à votre appareil de réalité virtuelle</translation> +<translation id="8698438463325761328">Empêcher les sites d'accéder à vos données et votre appareil de réalité virtuelle</translation> <translation id="869891660844655955">Date d'expiration</translation> <translation id="8728487861892616501">En utilisant cette application, vous acceptez les <ph name="BEGIN_LINK1" />Conditions d'utilisation<ph name="END_LINK1" /> et l'<ph name="BEGIN_LINK2" />Avis de confidentialité<ph name="END_LINK2" /> de Chrome, ainsi que l'<ph name="BEGIN_LINK3" />Avis de confidentialité relatif aux comptes Google gérés dans Family Link<ph name="END_LINK3" />.</translation> <translation id="8748850008226585750">Contenu masqué</translation> @@ -1045,7 +1045,7 @@ <translation id="883806473910249246">Une erreur s'est produite lors du téléchargement du contenu.</translation> <translation id="8840953339110955557">Cette page peut différer de la version en ligne.</translation> <translation id="8847988622838149491">USB</translation> -<translation id="884828189055900810">Empêcher les sites de recevoir la position de votre caméra ou de cartographier votre pièce</translation> +<translation id="884828189055900810">Empêcher les sites d'obtenir la position de la caméra ou de cartographier la pièce</translation> <translation id="8853345339104747198">"<ph name="TAB_TITLE" />", onglet</translation> <translation id="885701979325669005">Données stockées</translation> <translation id="889338405075704026">Accéder aux paramètres Chrome</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb index 272d6ef6..55de686 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
@@ -279,6 +279,7 @@ <translation id="3060635849835183725">{BOOKMARKS_COUNT,plural, =1{<ph name="BOOKMARKS_COUNT_ONE" /> marcador}other{<ph name="BOOKMARKS_COUNT_MANY" /> marcadores}}</translation> <translation id="3089395242580810162">Abrir en pestana de incógnito</translation> <translation id="3123473560110926937">Anuncios bloqueados nalgúns sitios</translation> +<translation id="3123734510202723619">Avisos</translation> <translation id="3137521801621304719">Sae do modo de incógnito</translation> <translation id="3143515551205905069">Cancelar sincronización</translation> <translation id="3157842584138209013">Comproba a cantidade de datos que aforraches a través do botón Máis opcións</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb index c229d6d..2a35234 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
@@ -134,6 +134,7 @@ <translation id="1994173015038366702">સાઈટ URL</translation> <translation id="2000419248597011803">ઍડ્રેસ બાર અને શોધ બૉક્સમાંથી કેટલીક કુકી અને શોધને તમારા ડિફૉલ્ટ શોધ એંજિન પર મોકલે છે</translation> <translation id="2002537628803770967">Google Payનો ઉપયોગ કરતા ક્રેડિટ કાર્ડ અને સરનામાં</translation> +<translation id="2012973609889389923">ઝડપી સાઇટ</translation> <translation id="2013642289801508067">{FILE_COUNT,plural, =1{# ફાઇલ}one{# ફાઇલો}other{# ફાઇલો}}</translation> <translation id="2017836877785168846">ઍડ્રેસ બારમાં ઇતિહાસ અને સ્વતઃપૂર્ણ કરવું સાફ કરો.</translation> <translation id="2021896219286479412">પૂર્ણ સ્ક્રીન સાઇટ નિયંત્રણો</translation> @@ -307,6 +308,7 @@ <translation id="3298243779924642547">લાઇટ</translation> <translation id="3303414029551471755">કન્ટેન્ટ ડાઉનલોડ કરવા માટે આગળ વધીએ?</translation> <translation id="3306398118552023113">આ ઍપ Chromeમાં ચાલી રહી છે</translation> +<translation id="3312292613668865961">કોઈ સાઇટને તમારું વર્ચ્યુઅલ રિયાલિટી ડિવાઇસ અને ડેટા ઍક્સેસ કરવાની મંજૂરી આપતા પહેલાં પૂછો (સુઝાવ આપેલો છે)</translation> <translation id="3315103659806849044">તમે હાલમાં તમારા સિંક અને Google સેવા સેટિંગને કસ્ટમાઇઝ કરી રહ્યાં છો. સિંક ચાલુ કરવાનું પૂર્ણ કરવા માટે, સ્ક્રીનની નીચેની બાજુએ કન્ફર્મ કરો બટન પર ટૅપ કરો. ઉપર નૅવિગેટ કરો</translation> <translation id="3328801116991980348">સાઇટ માહિતી</translation> <translation id="3333961966071413176">બધા સંપર્કો</translation> @@ -512,6 +514,7 @@ <translation id="4915549754973153784">ઉપકરણોને સ્કેન કરતી વખતે <ph name="BEGIN_LINK" />સહાય મેળવો<ph name="END_LINK" />…</translation> <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# પેજ}one{# પેજ}other{# પેજ}}</translation> <translation id="4932247056774066048"><ph name="DOMAIN_NAME" /> દ્વારા મેનેજ કરવામાં આવતા એકાઉન્ટમાંથી તમે સાઇન આઉટ કરી રહ્યાં હોવાને કારણે આ ડિવાઇસમાંથી તમારો Chrome ડેટા ડિલીટ કરવામાં આવશે. તે તમારા Google એકાઉન્ટમાં રહેશે.</translation> +<translation id="4935305910887312910">કોઈ સાઇટને તમારા કૅમેરાની સ્થિતી મેળવવા અથવા તમારા રૂમનો નકશો બનાવવાની મંજૂરી આપતા પહેલાં પૂછો (સુઝાવ આપેલો છે)</translation> <translation id="4943703118917034429">વર્ચ્યુઅલ રિયાલિટી</translation> <translation id="4943872375798546930">પરિણામો નથી</translation> <translation id="4958708863221495346"><ph name="URL_OF_THE_CURRENT_TAB" />, તમારી સ્ક્રીન શેર કરી રહ્યું છે</translation> @@ -743,6 +746,7 @@ <translation id="6573431926118603307">તમારા અન્ય ઉપકરણો પર તમે Chrome માં ખોલેલા ટૅબ્સ અહીં દેખાશે.</translation> <translation id="6583199322650523874">વર્તમાન પૃષ્ઠને બુકમાર્ક કરો</translation> <translation id="6593061639179217415">ડેસ્કટૉપ સાઇટ</translation> +<translation id="6597891566292541626">QR/બારકોડને આ ફ્રેમમાં મૂકો.</translation> <translation id="6600954340915313787">Chrome માં કોપી કરાયું</translation> <translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation> <translation id="6612358246767739896">સુરક્ષિત કન્ટેન્ટ</translation> @@ -952,6 +956,7 @@ <translation id="8109613176066109935">તમારા બધા ઉપકરણો પર તમારા બુકમાર્ક મેળવવા માટે, સિંક કરવાનું ચાલુ કરો</translation> <translation id="8110087112193408731">શું તમારી Chromeની પ્રવૃત્તિ ડિજિટલ લાઇફસ્ટાઇલમાં બતાવીએ?</translation> <translation id="8116925261070264013">મ્યૂટ કરેલ</translation> +<translation id="8127542551745560481">હોમપેજમાં ફેરફાર કરો</translation> <translation id="813082847718468539">સ્થાન માહિતી જુઓ</translation> <translation id="8156139159503939589">તમે કઈ ભાષાઓ વાંચી શકો છો?</translation> <translation id="8168435359814927499">કન્ટેન્ટ</translation> @@ -1023,6 +1028,7 @@ <translation id="8676374126336081632">ઇનપુટ સાફ કરો</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{સિગ્નલની ક્ષમતાનું સ્તર: # બાર}one{સિગ્નલની ક્ષમતાનું સ્તર: # બાર}other{સિગ્નલની ક્ષમતાનું સ્તર: # બાર}}</translation> <translation id="868929229000858085">તમારા સંપર્કો શોધો</translation> +<translation id="8698438463325761328">સાઇટને તમારું વર્ચ્યુઅલ રિયાલિટી ડિવાઇસ અને ડેટા ઍક્સેસ કરવાથી બ્લૉક કરો</translation> <translation id="869891660844655955">સમાપ્તિ તારીખ</translation> <translation id="8728487861892616501">આ ઍપ્લિકેશનનો ઉપયોગ કરીને તમે Chromeની <ph name="BEGIN_LINK1" />સેવાની શરતો<ph name="END_LINK1" /> અને <ph name="BEGIN_LINK2" />ગોપનીયતા સૂચના<ph name="END_LINK2" /> અને <ph name="BEGIN_LINK3" />Family Link દ્વારા મેનેજ થતા Google એકાઉન્ટ્સ માટેની ગોપનીયતા સૂચના<ph name="END_LINK3" /> સાથે સંમત થાઓ છો.</translation> <translation id="8748850008226585750">સામગ્રીઓ છુપાવેલ છે</translation> @@ -1039,6 +1045,7 @@ <translation id="883806473910249246">કન્ટેન્ટ ડાઉનલોડ કરતી વખતે એક ભૂલ આવી.</translation> <translation id="8840953339110955557">આ પેજ ઑનલાઇન વર્ઝનથી અલગ હોય શકે છે.</translation> <translation id="8847988622838149491">USB</translation> +<translation id="884828189055900810">સાઇટને કૅમેરાની સ્થિતી મેળવવાથી અથવા રૂમનો નકશો બનાવવાથી બ્લૉક કરો</translation> <translation id="8853345339104747198"><ph name="TAB_TITLE" />, ટેબ</translation> <translation id="885701979325669005">સ્ટોરેજ</translation> <translation id="889338405075704026">Chrome સેટિંગ પર જાઓ</translation> @@ -1046,6 +1053,7 @@ <translation id="8909135823018751308">શેર કરો…</translation> <translation id="8912362522468806198">Google એકાઉન્ટ</translation> <translation id="8920114477895755567">માતાપિતાની વિગતોની રાહ જોઈ રહ્યાં છે.</translation> +<translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation> <translation id="8922289737868596582">વધુ વિકલ્પો બટનની મદદથી પેજ ડાઉનલોડ કરો, જેથી તમે ઇન્ટરનેટ વિના પણ તેનો ઉપયોગ કરી શકો</translation> <translation id="8926666909099850184">આ ડિવાઇસ માટે NFC સેવા બંધ કરેલી છે. તેને <ph name="BEGIN_LINK" />Android સેટિંગ<ph name="END_LINK" />માં ચાલુ કરો.</translation> <translation id="8937772741022875483">તમારી Chromeની પ્રવૃત્તિને ડિજિટલ લાઇફસ્ટાઇલમાંથી કાઢી નાખીએ?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb index 3192def..f7d49bd 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
@@ -278,7 +278,7 @@ <translation id="3060635849835183725">{BOOKMARKS_COUNT,plural, =1{<ph name="BOOKMARKS_COUNT_ONE" /> बुकमार्क}one{<ph name="BOOKMARKS_COUNT_MANY" /> बुकमार्क}other{<ph name="BOOKMARKS_COUNT_MANY" /> बुकमार्क}}</translation> <translation id="3089395242580810162">गुप्त टैब में खोलें</translation> <translation id="3123473560110926937">कुछ साइटों पर ब्लॉक किए गए हैं</translation> -<translation id="3123734510202723619">सूचनाएं</translation> +<translation id="3123734510202723619">एलान</translation> <translation id="3137521801621304719">गुप्त मोड छोड़ें</translation> <translation id="3143515551205905069">लिंक करना रोक दें</translation> <translation id="3157842584138209013">ज़्यादा विकल्प बटन से देखें कि आपने कितना डेटा बचाया है</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb index f62a5c9..0353b42b 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
@@ -279,6 +279,7 @@ <translation id="3060635849835183725">{BOOKMARKS_COUNT,plural, =1{<ph name="BOOKMARKS_COUNT_ONE" /> бетбелгі}other{<ph name="BOOKMARKS_COUNT_MANY" /> бетбелгі}}</translation> <translation id="3089395242580810162">Инкогнито қойындысында ашу</translation> <translation id="3123473560110926937">Кейбір сайттарда тыйым салынған</translation> +<translation id="3123734510202723619">Хабарландырулар</translation> <translation id="3137521801621304719">Жасырын режимнен шығу</translation> <translation id="3143515551205905069">Синхрондаудан бас тарту</translation> <translation id="3157842584138209013">"Басқа да опциялар" түймесі арқылы қанша деректер сақталғанын көріңіз</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb index 19ded01..306f433b 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
@@ -279,6 +279,7 @@ <translation id="3060635849835183725">{BOOKMARKS_COUNT,plural, =1{북마크 <ph name="BOOKMARKS_COUNT_ONE" />개}other{북마크 <ph name="BOOKMARKS_COUNT_MANY" />개}}</translation> <translation id="3089395242580810162">시크릿 탭에서 열기</translation> <translation id="3123473560110926937">일부 사이트에서 차단됨</translation> +<translation id="3123734510202723619">공지사항</translation> <translation id="3137521801621304719">시크릿 모드 나가기</translation> <translation id="3143515551205905069">동기화 취소</translation> <translation id="3157842584138209013">추가 옵션 버튼에서 저장한 데이터의 양을 확인해보세요.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb index b48e1fc4..1d1137aa 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
@@ -279,6 +279,7 @@ <translation id="3060635849835183725">{BOOKMARKS_COUNT,plural, =1{<ph name="BOOKMARKS_COUNT_ONE" /> кыстарма}other{<ph name="BOOKMARKS_COUNT_MANY" /> кыстарма}}</translation> <translation id="3089395242580810162">Жашыруун режимде ачуу</translation> <translation id="3123473560110926937">Айрым сайттарда бөгөттөлдү</translation> +<translation id="3123734510202723619">Жарыялар</translation> <translation id="3137521801621304719">Жашыруун режимден чыгуу</translation> <translation id="3143515551205905069">Шайкештештирүүнү жокко чыгаруу</translation> <translation id="3157842584138209013">"Дагы параметрлер" баскычын басып, канча трафикти үнөмдөп калганыңызды көрүңүз</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb index ebd6bb4..3ed9392 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb
@@ -134,6 +134,7 @@ <translation id="1994173015038366702">സൈറ്റ് URL</translation> <translation id="2000419248597011803">നിങ്ങളുടെ ഡിഫോൾട്ട് തിരയൽ എഞ്ചിനിലേക്ക് വിലാസ ബാറിൽ നിന്നും തിരയൽ ബോക്സിൽ നിന്നുമുള്ള തിരയലുകളും കുറച്ച് കുക്കികളും അയയ്ക്കുന്നു</translation> <translation id="2002537628803770967">Google Pay ഉപയോഗിക്കുന്ന ക്രെഡിറ്റ് കാർഡുകളും വിലാസങ്ങളും</translation> +<translation id="2012973609889389923">വേഗതയുള്ള സൈറ്റ്</translation> <translation id="2013642289801508067">{FILE_COUNT,plural, =1{# ഫയല്}other{# ഫയലുകൾ}}</translation> <translation id="2017836877785168846">വിലാസ ബാറിലെ ചരിത്രവും സ്വയം പൂർത്തീകരണങ്ങളും മായ്ക്കുന്നു.</translation> <translation id="2021896219286479412">പൂർണ്ണ സ്ക്രീൻ സൈറ്റ് നിയന്ത്രണങ്ങൾ</translation> @@ -307,6 +308,7 @@ <translation id="3298243779924642547">ലൈറ്റ്</translation> <translation id="3303414029551471755">ഉള്ളടക്കം ഡൗൺലോഡ് ചെയ്യുന്നതിലേക്ക് തുടരണോ?</translation> <translation id="3306398118552023113">Chrome-ൽ ഈ ആപ്പ് റൺ ചെയ്യുന്നു</translation> +<translation id="3312292613668865961">നിങ്ങളുടെ വെർച്വൽ റിയാലിറ്റി ഉപകരണവും ഡാറ്റയും ആക്സസ് ചെയ്യാൻ സൈറ്റുകളെ അനുവദിക്കുന്നതിന് മുമ്പ് ചോദിക്കുക (ശുപാർശ ചെയ്യുന്നത്)</translation> <translation id="3315103659806849044">നിലവിൽ നിങ്ങൾ സമന്വയ, Google സേവന ക്രമീകരണം ഇഷ്ടാനുസൃതമാക്കുന്നു. സമന്വയിപ്പിക്കൽ ഓണാക്കുന്നത് പൂർത്തിയാക്കാൻ, സ്ക്രീനിൻ്റെ ചുവടുവശത്തിന് സമീപമുള്ള 'സ്ഥിരീകരിക്കുക' ടാപ്പ് ചെയ്യുക. മുകളിലേക്ക് നാവിഗേറ്റ് ചെയ്യുക</translation> <translation id="3328801116991980348">സൈറ്റ് വിവരങ്ങള്</translation> <translation id="3333961966071413176">എല്ലാ കോൺടാക്റ്റുകളും</translation> @@ -512,6 +514,7 @@ <translation id="4915549754973153784"><ph name="BEGIN_LINK" />ഉപകരണങ്ങൾ<ph name="END_LINK" /> സ്കാൻ ചെയ്യുമ്പോൾ സഹായം തേടുക…</translation> <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# പേജ്}other{# പേജുകൾ}}</translation> <translation id="4932247056774066048"><ph name="DOMAIN_NAME" /> മാനേജ് ചെയ്യുന്ന അക്കൗണ്ടിൽ നിന്ന് സൈൻ ഔട്ട് ചെയ്യുന്നതിനാൽ, ഈ ഉപകരണത്തിൽ നിന്ന് നിങ്ങളുടെ Chrome ഡാറ്റ ഇല്ലാതാക്കപ്പെടും. അത് തുടർന്നും നിങ്ങളുടെ Google അക്കൗണ്ടിൽ ഉണ്ടായിരിക്കുന്നതാണ്.</translation> +<translation id="4935305910887312910">ക്യാമറയുടെ സ്ഥാനം സ്വീകരിക്കാനോ നിങ്ങളുടെ റൂം മാപ്പ് ചെയ്യാനോ സൈറ്റുകളെ അനുവദിക്കുന്നതിന് മുമ്പ് ചോദിക്കുക (ശുപാർശ ചെയ്യുന്നത്)</translation> <translation id="4943703118917034429">വെർച്വൽ റിയാലിറ്റി</translation> <translation id="4943872375798546930">ഫലങ്ങളൊന്നുമില്ല</translation> <translation id="4958708863221495346"><ph name="URL_OF_THE_CURRENT_TAB" /> നിങ്ങളുടെ സ്ക്രീൻ പങ്കിടുന്നു</translation> @@ -743,6 +746,7 @@ <translation id="6573431926118603307">നിങ്ങളുടെ മറ്റ് ഉപകരണങ്ങളിലെ Chrome-ൽ തുറന്ന ടാബുകൾ ഇവിടെ ദൃശ്യമാകും.</translation> <translation id="6583199322650523874">നിലവിലെ പേജ് ബുക്ക്മാർക്ക് ചെയ്യുക</translation> <translation id="6593061639179217415">ഡെസ്ക്ടോപ്പ് സൈറ്റ്</translation> +<translation id="6597891566292541626">QR/ബാർകോഡ് ഈ ഫ്രെയിമിനുള്ളിൽ ആക്കുക.</translation> <translation id="6600954340915313787">Chrome-ലേക്ക് പ്കർത്തി</translation> <translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation> <translation id="6612358246767739896">പരിരക്ഷിത ഉള്ളടക്കം</translation> @@ -952,6 +956,7 @@ <translation id="8109613176066109935">നിങ്ങളുടെ എല്ലാ ഉപകരണങ്ങളിലും ബുക്ക്മാർക്കുകൾ ലഭിക്കാൻ, സമന്വയിപ്പിക്കൽ ഓണാക്കുക</translation> <translation id="8110087112193408731">ഡിജിറ്റൽ ആരോഗ്യത്തിൽ നിങ്ങളുടെ Chrome ആക്റ്റിവിറ്റി കാണിക്കണോ?</translation> <translation id="8116925261070264013">മ്യൂട്ടുചെയ്തു</translation> +<translation id="8127542551745560481">ഹോംപേജ് എഡിറ്റ് ചെയ്യുക</translation> <translation id="813082847718468539">സൈറ്റ് വിവരങ്ങള് കാണുക</translation> <translation id="8156139159503939589">ഏതൊക്കെ ഭാഷകൾ നിങ്ങൾക്ക് വായിക്കാനാകും?</translation> <translation id="8168435359814927499">ഉള്ളടക്കം</translation> @@ -1023,6 +1028,7 @@ <translation id="8676374126336081632">ഇൻപുട്ട് മായ്ക്കുക</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{സിഗ്നൽ സ്ട്രെംഗ്ത്ത് ലെവൽ # ബാർ}other{സിഗ്നൽ സ്ട്രെംഗ്ത്ത് ലെവൽ # ബാറുകൾ}}</translation> <translation id="868929229000858085">നിങ്ങളുടെ കോൺടാക്റ്റുകൾ തിരയുക</translation> +<translation id="8698438463325761328">നിങ്ങളുടെ വെർച്വൽ റിയാലിറ്റി ഉപകരണവും ഡാറ്റയും ആക്സസ് ചെയ്യുന്നതിൽ നിന്ന് സൈറ്റുകളെ ബ്ലോക്ക് ചെയ്യുക</translation> <translation id="869891660844655955">കാലഹരണപ്പെടല് തീയതി</translation> <translation id="8728487861892616501">ഈ ആപ്പ് ഉപയോഗിക്കുന്നതിലൂടെ, നിങ്ങൾ Chrome-ന്റെ <ph name="BEGIN_LINK1" />സേവന നിബന്ധനകൾ<ph name="END_LINK1" />, <ph name="BEGIN_LINK2" />സ്വകാര്യതാ അറിയിപ്പ്<ph name="END_LINK2" />, <ph name="BEGIN_LINK3" />Family Link ഉപയോഗിച്ച് നിയന്ത്രിക്കുന്ന Google അക്കൗണ്ടുകളുടെ സ്വകാര്യതാ അറിയിപ്പ്<ph name="END_LINK3" /> എന്നിവ അംഗീകരിക്കുന്നു.</translation> <translation id="8748850008226585750">കോൺടാക്റ്റുകൾ മറച്ചു</translation> @@ -1039,6 +1045,7 @@ <translation id="883806473910249246">ഉള്ളടക്കം ഡൗൺലോഡ് ചെയ്യുമ്പോൾ ഒരു പിശകുണ്ടായി.</translation> <translation id="8840953339110955557">ഈ പേജ് ഓൺലൈൻ പതിപ്പിൽ നിന്ന് വ്യത്യസ്തമായിരിക്കാം.</translation> <translation id="8847988622838149491">USB</translation> +<translation id="884828189055900810">ക്യാമറയുടെ സ്ഥാനം സ്വീകരിക്കുന്നതിൽ നിന്ന് അല്ലെങ്കിൽ നിങ്ങളുടെ റൂം മാപ്പ് ചെയ്യുന്നതിൽ നിന്ന് സൈറ്റുകളെ ബ്ലോക്ക് ചെയ്യുക</translation> <translation id="8853345339104747198"><ph name="TAB_TITLE" />, ടാബ്</translation> <translation id="885701979325669005">സംഭരണം</translation> <translation id="889338405075704026">Chrome ക്രമീകരണത്തിലേക്ക് പോകുക</translation> @@ -1046,6 +1053,7 @@ <translation id="8909135823018751308">പങ്കിടുക...</translation> <translation id="8912362522468806198">Google അക്കൗണ്ട്</translation> <translation id="8920114477895755567">രക്ഷകർത്താക്കളുടെ വിശദാംശങ്ങൾക്കായി കാത്തിരിക്കുന്നു.</translation> +<translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation> <translation id="8922289737868596582">ഓഫ്ലൈനായി ഉപയോഗിക്കാൻ 'കൂടുതൽ ഓപ്ഷനുകൾ' ബട്ടണിൽ നിന്ന് പേജുകൾ ഡൗൺലോഡ് ചെയ്യുക</translation> <translation id="8926666909099850184">ഈ ഉപകരണത്തിനുള്ള NFC ഓഫാണ്. ഇത് <ph name="BEGIN_LINK" />Android ക്രമീകരണത്തിൽ<ph name="END_LINK" /> ഓണാക്കുക.</translation> <translation id="8937772741022875483">ഡിജിറ്റൽ ആരോഗ്യത്തിൽ നിന്ന് നിങ്ങളുടെ Chrome ആക്റ്റിവിറ്റി നീക്കം ചെയ്യണോ?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb index 48cb38c..470a068 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb
@@ -279,6 +279,7 @@ <translation id="3060635849835183725">{BOOKMARKS_COUNT,plural, =1{<ph name="BOOKMARKS_COUNT_ONE" /> хавчуурга}other{<ph name="BOOKMARKS_COUNT_MANY" /> хавчуурга}}</translation> <translation id="3089395242580810162">Нууцлалтай таб дээр нээх</translation> <translation id="3123473560110926937">Зарим сайт дээр блоклосон</translation> +<translation id="3123734510202723619">Зарлал</translation> <translation id="3137521801621304719">Нууцлалын горимыг орхих</translation> <translation id="3143515551205905069">Синкийг цуцлах</translation> <translation id="3157842584138209013">Бусад сонголт товчлуураас ямар хэмжээний дата хэмнэснээ харах</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb index c0918ad1..13ecf5a3 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
@@ -134,6 +134,7 @@ <translation id="1994173015038366702">साइट URL</translation> <translation id="2000419248597011803">ॲड्रेस बार आणि सर्च बॉक्समधून तुमच्या डीफॉल्ट शोध इंजिनला काही कुकीज आणि शोध पाठवते</translation> <translation id="2002537628803770967">Google Pay वापरून क्रेडिट कार्ड आणि पत्ते</translation> +<translation id="2012973609889389923">जलद साइट</translation> <translation id="2013642289801508067">{FILE_COUNT,plural, =1{# फाइल}other{# फायली}}</translation> <translation id="2017836877785168846">ॲड्रेस बारमधील इतिहास आणि आपोआप पूर्ण केलेले साफ करते.</translation> <translation id="2021896219286479412">फुल स्क्रीन साइट नियंत्रणे</translation> @@ -307,6 +308,7 @@ <translation id="3298243779924642547">Lite</translation> <translation id="3303414029551471755">आशय डाउनलोड करणे सुरु ठेवायचे?</translation> <translation id="3306398118552023113">हे अॅप Chrome मध्ये रन होत आहे</translation> +<translation id="3312292613668865961">साइटना तुमचे आभासी वास्तविक डिव्हाइस आणि डेटा ॲक्सेस करण्याची अनुमती देण्यापूर्वी विनंती करा</translation> <translation id="3315103659806849044">तुम्ही सध्या तुमचे सिंक आणि Google सेवा सेटिंग्ज कस्टमाइझ करत आहात. सिंक सुरू करणे पूर्ण करण्यासाठी, स्क्रीनच्या खालच्या बाजूला निश्चित करा बटणावर टॅप करा. वर नेव्हिगेट करा</translation> <translation id="3328801116991980348">साइट माहिती</translation> <translation id="3333961966071413176">सर्व संपर्क</translation> @@ -512,6 +514,7 @@ <translation id="4915549754973153784">डिव्हाइस स्कॅन करत असताना <ph name="BEGIN_LINK" />मदत मिळवा<ph name="END_LINK" />…</translation> <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# पेज}other{# पेज}}</translation> <translation id="4932247056774066048"><ph name="DOMAIN_NAME" /> द्वारे व्यवस्थापित केलेल्या खात्यामधून तुम्ही साइन आउट करत असल्यामुळे, या डिव्हाइसवरून Chrome डेटा हटवला जाईल. तो तुमच्या Google खात्यामध्ये तसाच राहिल.</translation> +<translation id="4935305910887312910">कॅमेऱ्याची स्थिती मिळवण्यासाठी किंवा तुमच्या रूमचा नकाशा तयार करण्यासाठी साइटना अनुमती देण्यापूर्वी विनंती करा (शिफारस केलेले)</translation> <translation id="4943703118917034429">आभासी वास्तविकता</translation> <translation id="4943872375798546930">परिणाम नाहीत</translation> <translation id="4958708863221495346"><ph name="URL_OF_THE_CURRENT_TAB" /> तुमची स्क्रीन शेअर करत आहे</translation> @@ -743,6 +746,7 @@ <translation id="6573431926118603307">आपल्या अन्य डिव्हाइसेसवर तुम्ही Chrome मध्ये उघडलेले टॅब येथे दिसतील.</translation> <translation id="6583199322650523874">वर्तमान पृष्ठ बुकमार्क करा</translation> <translation id="6593061639179217415">डेस्कटॉप साइट</translation> +<translation id="6597891566292541626">या फ्रेममध्ये QR/बार कोडची स्थिती निश्चित करा.</translation> <translation id="6600954340915313787">Chrome वर कॉपी केले</translation> <translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation> <translation id="6612358246767739896">संरक्षित आशय</translation> @@ -952,6 +956,7 @@ <translation id="8109613176066109935">तुमच्या सर्व डिव्हाइसवरील तुमचे बुकमार्क मिळवण्यासाठी, सिंक सुरू करा</translation> <translation id="8110087112193408731">डिजिटल संतुलन मध्ये तुमची Chrome ॲक्टिव्हिटी दाखवायची का?</translation> <translation id="8116925261070264013">म्यूट केले</translation> +<translation id="8127542551745560481">होमपेज संपादित करा</translation> <translation id="813082847718468539">साइटची माहिती पहा</translation> <translation id="8156139159503939589">तुम्ही कोणत्या भाषा वाचू शकता?</translation> <translation id="8168435359814927499">आशय</translation> @@ -1023,6 +1028,7 @@ <translation id="8676374126336081632">इनपुट साफ करा</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{सिग्नल क्षमता पातळी: # बार}other{सिग्नल क्षमता पातळी: # बार}}</translation> <translation id="868929229000858085">तुमचे संपर्क शोधा</translation> +<translation id="8698438463325761328">तुमचे आभासी वास्तविकता डिव्हाइस आणि डेटा ॲक्सेस करण्यापासून साइटना ब्लॉक करा</translation> <translation id="869891660844655955">कालावधी समाप्ती तारीख</translation> <translation id="8728487861892616501">हे अॅप्लिकेशन वापरून, तुम्ही Chrome च्या <ph name="BEGIN_LINK1" />सेवा अटी<ph name="END_LINK1" /> आणि <ph name="BEGIN_LINK2" />गोपनीयता सूचना<ph name="END_LINK2" /> आणि <ph name="BEGIN_LINK3" />Family Link ने व्यवस्थापित केलेल्या Google खात्यांसाठी गोपनीयता सूचना<ph name="END_LINK3" /> यांना सहमती दर्शवता.</translation> <translation id="8748850008226585750">सामग्री लपविली</translation> @@ -1039,6 +1045,7 @@ <translation id="883806473910249246">आशय डाउनलोड करताना एरर आली.</translation> <translation id="8840953339110955557">हे पेज ऑनलाइन आवृत्तीपेक्षा वेगळे असू शकते.</translation> <translation id="8847988622838149491">USB</translation> +<translation id="884828189055900810">तुमच्या कॅमेऱ्याची स्थिती मिळवण्यापासून किंवा रूमचा नकाशा तयार करण्यापासून साइटना ब्लॉक करा</translation> <translation id="8853345339104747198"><ph name="TAB_TITLE" />, टॅब</translation> <translation id="885701979325669005">स्टोरेज</translation> <translation id="889338405075704026">Chrome सेटिंग्जवर जा</translation> @@ -1046,6 +1053,7 @@ <translation id="8909135823018751308">शेअर करा...</translation> <translation id="8912362522468806198">Google खाते</translation> <translation id="8920114477895755567">पालकांच्या तपशीलांसाठी प्रतीक्षा करत आहोत.</translation> +<translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation> <translation id="8922289737868596582">पेज ऑफलाइन वापरता येण्यासाठी ती अधिक पर्यायांमधून डाउनलोड करा</translation> <translation id="8926666909099850184">या डिव्हाइससाठी NFC बंद केले आहे. ते <ph name="BEGIN_LINK" />Android सेटिंग्जमध्ये<ph name="END_LINK" /> सुरू करा.</translation> <translation id="8937772741022875483">डिजिटल संतुलन वरून तुमची Chrome ॲक्टिव्हिटी काढून टाकायची का?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb index d679de2..0549e2a5 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
@@ -134,6 +134,7 @@ <translation id="1994173015038366702">साइट URL</translation> <translation id="2000419248597011803">यसले ठेगाना पट्टी र खोज बाकसका केही कुकी र खोजहरूलाई तपाईंको पूर्वनिर्धारित खोज इन्जिनमा पठाउँछ</translation> <translation id="2002537628803770967">Google Pay को प्रयोग गर्ने क्रेडिट कार्ड र ठेगानाहरू</translation> +<translation id="2012973609889389923">छिटो लोष हुने साइट</translation> <translation id="2013642289801508067">{FILE_COUNT,plural, =1{# फाइल}other{# फाइलहरू}}</translation> <translation id="2017836877785168846">ठेगाना पट्टीबाट इतिहास र स्वतः पूर्णतासम्बन्धी सुविधाहरूलाई खाली गर्दछ।</translation> <translation id="2021896219286479412">पूर्ण स्क्रिनको साइटका नियन्त्रणहरू</translation> @@ -307,6 +308,7 @@ <translation id="3298243779924642547">लाइट</translation> <translation id="3303414029551471755">सामग्री डाउनलोड गर्न अगाडि बढ्ने हो?</translation> <translation id="3306398118552023113">यो अनुप्रयोग Chrome मा चलिरहेको छ</translation> +<translation id="3312292613668865961">साइटहरूलाई तपाईंको भर्चुअल रियालिटी (सिफारिस गरिएको)</translation> <translation id="3315103659806849044">तपाईं हाल आफ्ना सिंक तथा Google का सेवासम्बन्धी सेटिङहरूलाई आफू अनुकूल पार्दै हुनुहुन्छ। सिंक सेवा सक्रिय पार्ने कार्य पूरा गर्न स्क्रिन बटनको छेवैमा रहेको सुनिश्चित गर्नुहोस् नामक बटनमा ट्याप गर्नुहोस्। माथि नेभिगेसन गर्नुहोस्</translation> <translation id="3328801116991980348">साइट जानकारी</translation> <translation id="3333961966071413176">सबै सम्पर्कहरू</translation> @@ -511,6 +513,7 @@ <translation id="4915549754973153784">अन्य यन्त्रहरूलाई स्क्यान गर्दा <ph name="BEGIN_LINK" />मद्दत प्राप्त गर्नुहोस्<ph name="END_LINK" />…</translation> <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# पृष्ठ}other{# पृष्ठहरू}}</translation> <translation id="4932247056774066048">तपाईं <ph name="DOMAIN_NAME" /> ले व्यवस्थापन गरेको खाताबाट साइन आउट गरिरहनुभएको हुनाले तपाईंको Chrome को डेटा यस यन्त्रबाट मेटाइने छ। यो डेटा तपाईंको Google खातामै रहिरहने छ।</translation> +<translation id="4935305910887312910">साइटहरूलाई तपाईंको क्यामेराको स्थितिसम्बन्धी जानकारी प्राप्त गर्ने वा तपाईंको कोठाको नक्साङ्कन गर्ने अनुमति दिनुअघि सोध्नुहोस् (सिफारिस गरिएको)</translation> <translation id="4943703118917034429">भर्चुअल रियालिटी</translation> <translation id="4943872375798546930">कुनै नतिजा छैन</translation> <translation id="4958708863221495346"><ph name="URL_OF_THE_CURRENT_TAB" /> तपाईँको स्क्रिन आदान प्रदान गर्दैछ</translation> @@ -742,6 +745,7 @@ <translation id="6573431926118603307">तपाईँले आफ्ना अन्य यन्त्रहरूमा Chrome मा खोल्नुभएका ट्याबहरू यहाँ देखिनेछन्।</translation> <translation id="6583199322650523874">हालको पृष्ठलाई पुस्तक चिन्ह लगाउनुहोस्</translation> <translation id="6593061639179217415">डेस्कटप साइट</translation> +<translation id="6597891566292541626">QR/बार कोडलाई यस फ्रेमभित्र पार्नुहोस्।</translation> <translation id="6600954340915313787">Chrome मा प्रतिलिपि गरियो</translation> <translation id="6608650720463149374"><ph name="GIGABYTES" /> जि.बि.</translation> <translation id="6612358246767739896">संरक्षित सामग्री</translation> @@ -951,6 +955,7 @@ <translation id="8109613176066109935">आफ्ना सबै यन्त्रमा पुस्तक चिन्हहरू प्राप्त गर्न सिंक गर्ने सुविधा सक्रिय गर्नुहोस्</translation> <translation id="8110087112193408731">तपाईंले Chrome मा गर्नुभएका क्रियाकलाप डिजिटल वेलबिइङमा देखाउने हो?</translation> <translation id="8116925261070264013">म्युट गरियो</translation> +<translation id="8127542551745560481">गृहपृष्ठ सम्पदान गर्नुहोस्</translation> <translation id="813082847718468539">साइट जानकारी हेर्नुहोस्</translation> <translation id="8156139159503939589">तपाईं कुन कुन भाषा पढ्नुहुन्छ?</translation> <translation id="8168435359814927499">सामग्री</translation> @@ -1022,6 +1027,7 @@ <translation id="8676374126336081632">आगत मेटाउनुहोस्</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{सङ्केतको क्षमता स्तर: # बार}other{सङ्केतको क्षमता स्तर: # बारहरू}}</translation> <translation id="868929229000858085">आफ्ना सम्पर्कहरू खोज्नुहोस्</translation> +<translation id="8698438463325761328">साइटहरूलाई भर्चुअल रियालिटी चल्ने तपाईंका यन्त्र र डेटामाथि पहुँच राख्न दिनुहोस्</translation> <translation id="869891660844655955">समाप्ति मिति</translation> <translation id="8728487861892616501">यो अनुप्रयोगको प्रयोग गरेर, तपाईं Chrome को <ph name="BEGIN_LINK1" />सेवाका सर्तहरू<ph name="END_LINK1" /> र <ph name="BEGIN_LINK2" />गोपनीयतासम्बन्धी सूचना<ph name="END_LINK2" /> तथा <ph name="BEGIN_LINK3" />Family Link बाट व्यवस्थापन गरिएको Google खाताका गोपनीयतासम्बन्धी सूचना<ph name="END_LINK3" /> मा सहमति जनाउनुहुन्छ।</translation> <translation id="8748850008226585750">सामग्रीहरू लुकाइएका छन्</translation> @@ -1038,6 +1044,7 @@ <translation id="883806473910249246">उक्त सामग्री डाउलोड गर्ने क्रममा एउटा त्रुटि भयो।</translation> <translation id="8840953339110955557">यो पृष्ठ अनलाइन संस्करणभन्दा भिन्न हुन सक्छ।</translation> <translation id="8847988622838149491">USB</translation> +<translation id="884828189055900810">साइटहरूलाई तपाईंको क्यामेराको स्थितिसम्बन्धी जानकारी प्राप्त गर्न वा तपाईंको कोठाको नक्साङ्कन गर्नबाट रोक लगाउनुहोस्</translation> <translation id="8853345339104747198"><ph name="TAB_TITLE" />, ट्याब</translation> <translation id="885701979325669005">भण्डारण</translation> <translation id="889338405075704026">Chrome को सेटिङमा जानुहोस्</translation> @@ -1045,6 +1052,7 @@ <translation id="8909135823018751308">साझा गर्नुहोस्...</translation> <translation id="8912362522468806198">Google खाता</translation> <translation id="8920114477895755567">अभिभावकहरूको विवरणको लागि प्रतीक्षा गर्दै।</translation> +<translation id="8921772741368021346"><ph name="POSITION" />/<ph name="DURATION" /></translation> <translation id="8922289737868596582">पृष्ठहरूलाई अफलाइन हेर्न थप विकल्पहरू नामक बटनबाट तिनीहरूलाई डाउनलोड गर्नुहोस्</translation> <translation id="8926666909099850184">यो यन्त्रमा NFC निष्क्रिय पारिएको छ। <ph name="BEGIN_LINK" />Android का सेटिङ<ph name="END_LINK" /> मा गई यसलाई सक्रिय गर्नुहोस्।</translation> <translation id="8937772741022875483">तपाईंले Chrome मा गर्नुभएका क्रियाकलाप डिजिटल वेलबिइङबाट हटाउने हो?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb index 0e4527b..ee71ac0f 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb
@@ -134,6 +134,7 @@ <translation id="1994173015038366702">ସାଇଟ୍ URL</translation> <translation id="2000419248597011803">ଆପଣଙ୍କର ଡିଫଲ୍ଟ ସନ୍ଧାନ ଇଞ୍ଜିନ୍କୁ ଠିକଣା ବାର୍ ଏବଂ ସନ୍ଧାନ ବାକ୍ସରୁ କିଛି କୁକୀ ଏବଂ ସନ୍ଧାନ ପଠାନ୍ତୁ</translation> <translation id="2002537628803770967">Google Pay ବ୍ୟବହାର କରୁଥିବା କ୍ରେଡିଟ୍ କାର୍ଡ ଓ ଠିକଣାଗୁଡ଼ିକ</translation> +<translation id="2012973609889389923">ଦ୍ରୁତ ସାଇଟ୍</translation> <translation id="2013642289801508067">{FILE_COUNT,plural, =1{#ଟି ଫାଇଲ୍}other{#ଟି ଫାଇଲ୍}}</translation> <translation id="2017836877785168846">ଠିକଣା ବାର୍ରେ ଥିବା ଇତିବୃତ୍ତି ଓ ଅଟୋକମ୍ପ୍ଲିସେନ୍ଗୁଡ଼ିକୁ ଖାଲି କରନ୍ତୁ।</translation> <translation id="2021896219286479412">ପୂର୍ଣ୍ଣ-ସ୍କ୍ରିନ୍ ସାଇଟ୍ ନିୟନ୍ତ୍ରଣ</translation> @@ -307,6 +308,7 @@ <translation id="3298243779924642547">ଲାଇଟ୍</translation> <translation id="3303414029551471755">ବିଷୟବସ୍ତୁ ଡାଉନ୍ଲୋଡ୍ କରିବା ପାଇଁ ଆଗକୁ ବଢ଼ିବେ?</translation> <translation id="3306398118552023113">Chromeରେ ଏହି ଆପ୍ ଚାଲୁଛି</translation> +<translation id="3312292613668865961">ସାଇଟଗୁଡ଼ିକୁ ଆପଣଙ୍କର ଭର୍ଚୁଆଲ୍ ରିଆଲିଟୀ ଡିଭାଇସ୍ ଏବଂ ଡାଟାକୁ ଆକ୍ସେସ୍ କରିବାକୁ ଅନୁମତି ଦେବା ଆଗରୁ ପଚାରନ୍ତୁ (ସୁପାରିଶ କରାଯାଇଛି)</translation> <translation id="3315103659806849044">ଆପଣ ବର୍ତ୍ତମାନ ଆପଣଙ୍କର ସିଙ୍କ ଏବଂ Google ସେବାର ସେଟିଂସ୍ଗୁଡ଼ିକ କଷ୍ଟମାଇଜ୍ କରୁଛନ୍ତି। ସିଙ୍କ ଚାଲୁ କରିବା ଶେଷ କରିବା ପାଇଁ, ସ୍କ୍ରିନ୍ର ତଳ ପାର୍ଶ୍ୱରେ ଥିବା ନିଶ୍ଚିତ ବଟନ୍ରେ ଟାପ୍ କରନ୍ତୁ। ଉପରକୁ ନାଭିଗେଟ୍ କରନ୍ତୁ</translation> <translation id="3328801116991980348">ସାଇଟ୍ ସୂଚନା</translation> <translation id="3333961966071413176">ସମସ୍ତ ଯୋଗାଯୋଗଗୁଡ଼ିକ</translation> @@ -512,6 +514,7 @@ <translation id="4915549754973153784">ଯେତେବେଳେ, ଡିଭାଇସ୍ ପାଇଁ ସ୍କାନିଂ କରୁଛନ୍ତି, ସେତେବେଳେ<ph name="BEGIN_LINK" />ସାହାଯ୍ୟ ପ୍ରାପ୍ତ କରନ୍ତୁ<ph name="END_LINK" />…</translation> <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# ପୃଷ୍ଠା}other{# ପୃଷ୍ଠା}}</translation> <translation id="4932247056774066048">ଯେହେତୁ ଆପଣ <ph name="DOMAIN_NAME" />ଙ୍କ ଦ୍ଵାରା ପରିଚାଳିତ ଏକ ଆକାଉଣ୍ଟରୁ ସାଇନ୍ ଆଉଟ୍ କରୁଛନ୍ତି, ଏହି ଡିଭାଇସ୍ରୁ ଆପଣଙ୍କର Chrome ଡାଟା ଡିଲିଟ୍ କରାଯିବ। ଏହା ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟରେ ରହିବ।</translation> +<translation id="4935305910887312910">ସାଇଟଗୁଡ଼ିକୁ କ୍ୟାମେରାର ସ୍ଥିତି ପ୍ରାପ୍ତ କରିବା କିମ୍ବା ଆପଣଙ୍କ ରୁମକୁ ମ୍ୟାପ୍ କରିବାକୁ ଅନୁମତି ଦେବା ଆଗରୁ ପଚାରନ୍ତୁ (ସୁପାରିଶ କରାଯାଇଛି)</translation> <translation id="4943703118917034429">ଭର୍ଚୁଆଲ୍ ରିଅଲିଟି</translation> <translation id="4943872375798546930">କୌଣସି ଫଳାଫଳ ନାହିଁ</translation> <translation id="4958708863221495346"><ph name="URL_OF_THE_CURRENT_TAB" /> ଆପଣଙ୍କର ସ୍କ୍ରିନ୍ ସେୟାର୍ କରୁଛି</translation> @@ -743,6 +746,7 @@ <translation id="6573431926118603307">ଏଠାରେ ଆପଣଙ୍କର ଅନ୍ୟ ଡିଭାଇସ୍ର Chromeରେ ଯେଉଁ ଟାବ୍ ଖୋଲିଛନ୍ତି ତାହା ଦେଖାଯିବ।</translation> <translation id="6583199322650523874">ସାମ୍ପ୍ରତିକ ପୃଷ୍ଠାକୁ ବୁକ୍ମାର୍କ କରନ୍ତୁ</translation> <translation id="6593061639179217415">ଡେସ୍କଟପ୍ ସାଇଟ୍</translation> +<translation id="6597891566292541626">ଏହି ଫ୍ରେମରେ QR/ବାରକୋଡର ସ୍ଥିତି।</translation> <translation id="6600954340915313787">କପି କରାଯାଇ Chromeକୁ ନିଆଗଲା</translation> <translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation> <translation id="6612358246767739896">ସୁରକ୍ଷିତ ବିଷୟବସ୍ତୁ</translation> @@ -756,6 +760,7 @@ <translation id="6659594942844771486">Tab</translation> <translation id="666731172850799929"><ph name="APP_NAME" />ରେ ଖୋଲନ୍ତୁ</translation> <translation id="666981079809192359">Chrome ଗୋପନୀୟତା ବିଜ୍ଞପ୍ତି</translation> +<translation id="6671495933530132209">ଛବି କପି କରନ୍ତୁ</translation> <translation id="6676840375528380067">ଏହି ଡିଭାଇସ୍ରୁ ଆପଣଙ୍କର Chrome ଡାଟା ଖାଲି କରିବେ କି?</translation> <translation id="6689172468748959065">ପ୍ରୋଫାଇଲ୍ ଫଟୋ</translation> <translation id="6697492270171225480">ଯେତେବେଳେ କୌଣସି ପୃଷ୍ଠା ମିଳୁନାହିଁ, ସେତେବେଳେ ମେଳ ହେଉଥିବା ପୃଷ୍ଠାଗୁଡ଼ିକ ଦେଖାନ୍ତୁ</translation> @@ -951,6 +956,7 @@ <translation id="8109613176066109935">ଆପଣଙ୍କ ସମସ୍ତ ଡିଭାଇସ୍ରେ ଆପଣଙ୍କର ବୁକ୍ମାର୍କଗୁଡ଼ିକୁ ପ୍ରାପ୍ତ କରିବା ପାଇଁ, ସିଙ୍କ୍କୁ ଚାଲୁ କରନ୍ତୁ</translation> <translation id="8110087112193408731">ଡିଜିଟାଲ୍ ୱେଲ୍ବିଂରେ ଆପଣଙ୍କର Chrome କାର୍ଯ୍ୟକଳାପ ଦେଖାଇବେ?</translation> <translation id="8116925261070264013">ମ୍ୟୁଟ୍ କରାଗଲା</translation> +<translation id="8127542551745560481">ମୂଳପୃଷ୍ଠାକୁ ସମ୍ପାଦନ କରନ୍ତୁ</translation> <translation id="813082847718468539">ସାଇଟ୍ର ସୂଚନା ଦେଖନ୍ତୁ</translation> <translation id="8156139159503939589">ଆପଣ କେଉଁ ଭାଷା ପଢ଼ନ୍ତି?</translation> <translation id="8168435359814927499">ବିଷୟବସ୍ତୁ</translation> @@ -1022,6 +1028,7 @@ <translation id="8676374126336081632">ଇନ୍ପୁଟ୍ ଖାଲି କରନ୍ତୁ</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{ସିଗ୍ନାଲ୍ ଦକ୍ଷତାର ସ୍ତର: #ଟି ବାର୍}other{ସିଗ୍ନାଲ୍ ଦକ୍ଷତାର ସ୍ତର: #ଟି ବାର୍}}</translation> <translation id="868929229000858085">ଆପଣଙ୍କର ଯୋଗାଯୋଗ ସନ୍ଧାନ କରନ୍ତୁ</translation> +<translation id="8698438463325761328">ଆପଣଙ୍କର ଭର୍ଚୁଆଲ୍ ରିଆଲିଟୀ ଡିଭାଇସ୍ ଏବଂ ଡାଟା ଆକ୍ସେସ୍ କରିବାରୁ ସାଇଟଗୁଡ଼ିକୁ ବ୍ଲକ୍ କରନ୍ତୁ</translation> <translation id="869891660844655955">ମିଆଦ ଶେଷ ହେଉଥିବା ତାରିଖ</translation> <translation id="8728487861892616501">ଏହି ଆପ୍ଲିକେସନ୍ ବ୍ୟବହାର କରିବା ଦ୍ୱାରା, ଆପଣ Chrome’ର <ph name="BEGIN_LINK1" />ସେବାର ସର୍ତ୍ତାବଳୀ<ph name="END_LINK1" /> ଏବଂ <ph name="BEGIN_LINK2" />ଗୋପନୀୟତା ବିଜ୍ଞପ୍ତି<ph name="END_LINK2" /> ଏବଂ <ph name="BEGIN_LINK3" />ପରିବାର ଲିଙ୍କ୍ ସହ ପରିଚାଳିତ Google ଆକାଉଣ୍ଟ ପାଇଁ ଗୋପନୀୟତା ବିଜ୍ଞପ୍ତି<ph name="END_LINK3" />ରେ ସମ୍ମତ ଅଛନ୍ତି।</translation> <translation id="8748850008226585750">ଲୁଚାଯାଇଥିବା ବିଷୟବସ୍ତୁ</translation> @@ -1038,6 +1045,7 @@ <translation id="883806473910249246">ବିଷୟବସ୍ତୁ ଡାଉନ୍ଲୋଡ୍ କରିବା ସମୟରେ ଏକ ତ୍ରୁଟି ଦେଖାଗଲା।</translation> <translation id="8840953339110955557">ଏହି ପୃଷ୍ଠା ଅନ୍ଲାଇନ୍ ସଂସ୍କରଣ ଠାରୁ ଅଲଗା ହୋଇପାରେ।</translation> <translation id="8847988622838149491">USB</translation> +<translation id="884828189055900810">ଆପଣଙ୍କ କ୍ୟାମେରାର ସ୍ଥିତିକୁ ପ୍ରାପ୍ତ କରିବା କିମ୍ବା ଆପଣଙ୍କ ରୁମକୁ ମ୍ୟାପ୍ କରିବାରୁ ସାଇଟଗୁଡ଼ିକୁ ବ୍ଲକ୍ କରନ୍ତୁ</translation> <translation id="8853345339104747198"><ph name="TAB_TITLE" />, ଟାବ୍</translation> <translation id="885701979325669005">ଷ୍ଟୋରେଜ୍</translation> <translation id="889338405075704026">Chrome ସେଟିଂସ୍କୁ ଯାଆନ୍ତୁ</translation> @@ -1045,6 +1053,7 @@ <translation id="8909135823018751308">ସେୟାର୍ କରନ୍ତୁ…</translation> <translation id="8912362522468806198">Google ଆକାଉଣ୍ଟ</translation> <translation id="8920114477895755567">ଅଭିଭାବକଙ୍କ ବିବରଣୀ ପାଇଁ ଅପେକ୍ଷାରତ।</translation> +<translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation> <translation id="8922289737868596582">ସେଗୁଡ଼ିକୁ ଅଫ୍ଲାଇନ୍ରେ ବ୍ୟବହାର କରିବାକୁ ’ଅଧିକ ବିକଳ୍ପଗୁଡ଼ିକ’ ବଟନ୍ରୁ ପୃଷ୍ଠାଗୁଡ଼ିକ ଡାଉନ୍ଲୋଡ୍ କରନ୍ତୁ</translation> <translation id="8926666909099850184">ଏହି ଡିଭାଇସ୍ ପାଇଁ NFC ବନ୍ଦ ଅଛି। ଏହାକୁ <ph name="BEGIN_LINK" />Android ସେଟିଂସ୍<ph name="END_LINK" />ରେ ଚାଲୁ କରନ୍ତୁ।</translation> <translation id="8937772741022875483">ଡିଜିଟାଲ୍ ୱେଲ୍ବିଂରୁ ଆପଣଙ୍କର Chromeର କାର୍ଯ୍ୟକଳାପ କାଢ଼ିବେ?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb index 8b3b9725..c1903af 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
@@ -514,7 +514,7 @@ <translation id="4915549754973153784">ਡੀਵਾਈਸਾਂ ਲਈ ਸਕੈਨ ਕਰਨ ਦੌਰਾਨ <ph name="BEGIN_LINK" />ਮਦਦ ਪ੍ਰਾਪਤ ਕਰੋ<ph name="END_LINK" />…</translation> <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# ਪੰਨਾ}one{# ਪੰਨਾ}other{# ਪੰਨੇ}}</translation> <translation id="4932247056774066048">ਕਿਉਂਕਿ ਤੁਸੀਂ <ph name="DOMAIN_NAME" /> ਵੱਲੋਂ ਪ੍ਰਬੰਧਿਤ ਕੀਤੇ ਖਾਤੇ ਤੋਂ ਸਾਈਨ-ਆਊਟ ਕਰ ਰਹੇ ਹੋ, ਤਾਂ ਇਸ ਡੀਵਾਈਸ ਤੋਂ ਤੁਹਾਡਾ Chrome ਡਾਟਾ ਮਿਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ। ਪਰ ਇਹ ਤੁਹਾਡੇ Google ਖਾਤੇ ਵਿੱਚ ਬਰਕਰਾਰ ਰਹੇਗਾ।</translation> -<translation id="4935305910887312910">ਸਾਈਟਾਂ ਨੂੰ ਤੁਹਾਡੇ ਕੈਮਰੇ ਦੀ ਸਥਿਤੀ ਅਤੇ ਤੁਹਾਡੇ ਕਮਰੇ ਦੀ ਰੂਪ-ਰੇਖਾ ਜਾਣਨ ਦੇਣ ਤੋਂ ਪਹਿਲਾਂ ਪੁੱਛੋ (ਸਿਫ਼ਾਰਸ਼ੀ)</translation> +<translation id="4935305910887312910">ਸਾਈਟਾਂ ਨੂੰ ਤੁਹਾਡੇ ਕੈਮਰੇ ਦੀ ਸਥਿਤੀ ਪ੍ਰਾਪਤ ਕਰਨ ਜਾਂ ਤੁਹਾਡੇ ਕਮਰੇ ਨੂੰ ਮਾਪਣ ਦੇਣ ਤੋਂ ਪਹਿਲਾਂ ਪੁੱਛੋ (ਸਿਫ਼ਾਰਸ਼ੀ)</translation> <translation id="4943703118917034429">ਆਭਾਸੀ ਵਾਸਤਵਿਕਤਾ</translation> <translation id="4943872375798546930">ਕੋਈ ਨਤੀਜੇ ਨਹੀਂ</translation> <translation id="4958708863221495346"><ph name="URL_OF_THE_CURRENT_TAB" /> ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ ਨੂੰ ਸਾਂਝਾ ਕਰ ਰਿਹਾ ਹੈ</translation> @@ -1045,7 +1045,7 @@ <translation id="883806473910249246">ਸਮੱਗਰੀ ਡਾਊਨਲੋਡ ਕਰਨ ਸਮੇਂ ਕੋਈ ਗੜਬੜ ਹੋਈ।</translation> <translation id="8840953339110955557">ਇਹ ਪੰਨਾ ਆਨਲਾਈਨ ਵਰਜਨ ਤੋਂ ਵੱਖਰਾ ਹੋ ਸਕਦਾ ਹੈ।</translation> <translation id="8847988622838149491">USB</translation> -<translation id="884828189055900810">ਸਾਈਟਾਂ ਨੂੰ ਤੁਹਾਡੇ ਕੈਮਰੇ ਦੀ ਸਥਿਤੀ ਜਾਂ ਤੁਹਾਡੇ ਕਮਰੇ ਦੀ ਰੂਪ-ਰੇਖਾ ਜਾਣਨ ਤੋਂ ਬਲਾਕ ਕਰੋ</translation> +<translation id="884828189055900810">ਸਾਈਟਾਂ ਨੂੰ ਤੁਹਾਡੇ ਕੈਮਰੇ ਦੀ ਸਥਿਤੀ ਪ੍ਰਾਪਤ ਕਰਨ ਜਾਂ ਤੁਹਾਡੇ ਕਮਰੇ ਨੂੰ ਮਾਪਣ ਤੋਂ ਬਲਾਕ ਕਰੋ</translation> <translation id="8853345339104747198"><ph name="TAB_TITLE" />, ਟੈਬ</translation> <translation id="885701979325669005">ਸਟੋਰੇਜ</translation> <translation id="889338405075704026">Chrome ਸੈਟਿੰਗਾਂ 'ਤੇ ਜਾਓ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb index 143d9e7d..ab2d455a 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
@@ -279,6 +279,7 @@ <translation id="3060635849835183725">{BOOKMARKS_COUNT,plural, =1{<ph name="BOOKMARKS_COUNT_ONE" /> закладка}one{<ph name="BOOKMARKS_COUNT_MANY" /> закладка}few{<ph name="BOOKMARKS_COUNT_MANY" /> закладки}many{<ph name="BOOKMARKS_COUNT_MANY" /> закладок}other{<ph name="BOOKMARKS_COUNT_MANY" /> закладки}}</translation> <translation id="3089395242580810162">Открыть в режиме инкогнито</translation> <translation id="3123473560110926937">Заблокировано на некоторых сайтах</translation> +<translation id="3123734510202723619">Оповещения</translation> <translation id="3137521801621304719">Выключить режим инкогнито</translation> <translation id="3143515551205905069">Отмена</translation> <translation id="3157842584138209013">Чтобы узнать, сколько трафика вы сэкономили, нажмите кнопку "Ещё"</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb index eeb37763..91ad1bf 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
@@ -279,6 +279,7 @@ <translation id="3060635849835183725">{BOOKMARKS_COUNT,plural, =1{<ph name="BOOKMARKS_COUNT_ONE" /> záložka}few{<ph name="BOOKMARKS_COUNT_MANY" /> záložky}many{<ph name="BOOKMARKS_COUNT_MANY" /> bookmarks}other{<ph name="BOOKMARKS_COUNT_MANY" /> záložiek}}</translation> <translation id="3089395242580810162">Otvoriť na karte inkognito</translation> <translation id="3123473560110926937">Blokované na niektorých weboch</translation> +<translation id="3123734510202723619">Oznámenia</translation> <translation id="3137521801621304719">Ukončiť režim inkognito</translation> <translation id="3143515551205905069">Zrušiť synchronizáciu</translation> <translation id="3157842584138209013">Ak chcete zistiť, koľko dát ste ušetrili, klepnite na tlačidlo Ďalšie možnosti</translation> @@ -307,7 +308,7 @@ <translation id="3298243779924642547">Zjednoduš.</translation> <translation id="3303414029551471755">Pokračovať a stiahnuť obsah?</translation> <translation id="3306398118552023113">Táto aplikácia je spustená v Chrome</translation> -<translation id="3312292613668865961">Opýtať sa, či chcete povoliť webom používať vaše zariadenia virtuálnej reality a spojené údaje (odporúčané)</translation> +<translation id="3312292613668865961">Opýtať sa, či chcete povoliť webom používať vaše zariadenia a údaje virtuálnej reality (odporúčané)</translation> <translation id="3315103659806849044">Momentálne prispôsobujete nastavenia synchronizácie a služieb Googlu. Ak chcete dokončiť zapnutie synchronizácie, klepnite na tlačidlo Potvrdiť v dolnej časti obrazovky. Prejsť hore</translation> <translation id="3328801116991980348">Informácie o stránkach</translation> <translation id="3333961966071413176">Všetky kontakty</translation> @@ -745,7 +746,7 @@ <translation id="6573431926118603307">Tu sa zobrazia karty, ktoré ste otvorili v Chrome na iných zariadeniach.</translation> <translation id="6583199322650523874">Pridanie aktuálnej stránky medzi záložky</translation> <translation id="6593061639179217415">Web pre počítače</translation> -<translation id="6597891566292541626">Poloha kódu QR alebo čiarového kódu v tomto ráme.</translation> +<translation id="6597891566292541626">Poloha QR kódu alebo čiarového kódu v tomto ráme.</translation> <translation id="6600954340915313787">Skopírovaná do prehliadača Chrome</translation> <translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation> <translation id="6612358246767739896">Chránený obsah</translation> @@ -1027,7 +1028,7 @@ <translation id="8676374126336081632">Vymazať vstup</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{Úroveň sily signálu: # čiarka}few{Úroveň sily signálu: # čiarky}many{Úroveň sily signálu: # čiarky}other{Úroveň sily signálu: # čiarok}}</translation> <translation id="868929229000858085">Prehľadať kontakty</translation> -<translation id="8698438463325761328">Blokovať weby, aby nemohli používať vaše zariadenie virtuálnej reality a spojené údaje</translation> +<translation id="8698438463325761328">Blokovať weby, aby nemohli používať vaše zariadenie a údaje virtuálnej reality</translation> <translation id="869891660844655955">Koniec platnosti</translation> <translation id="8728487861892616501">Používaním tejto aplikácie vyjadrujete súhlas so <ph name="BEGIN_LINK1" />zmluvnými podmienkami<ph name="END_LINK1" /> prehliadača Chrome a <ph name="BEGIN_LINK2" />oznámením o ochrane súkromia<ph name="END_LINK2" />, ako aj <ph name="BEGIN_LINK3" />oznámením o ochrane súkromia pre účty Google spravované pomocou aplikácie Family Link<ph name="END_LINK3" />.</translation> <translation id="8748850008226585750">Obsah je skrytý</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb index 954ee45..7d4f227 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
@@ -134,6 +134,7 @@ <translation id="1994173015038366702">సైట్ URL</translation> <translation id="2000419248597011803">చిరునామా బార్ మరియు శోధన పెట్టెలోని కొన్ని కుక్కీలు మరియు శోధనలను మీ డిఫాల్ట్ శోధన ఇంజిన్కు పంపుతుంది</translation> <translation id="2002537628803770967">Google Pay ఉపయోగిస్తున్న క్రెడిట్ కార్డ్లు,చిరునామాలు</translation> +<translation id="2012973609889389923">వేగవంతమైన సైట్</translation> <translation id="2013642289801508067">{FILE_COUNT,plural, =1{# ఫైల్}other{# ఫైల్లు}}</translation> <translation id="2017836877785168846">చిరునామా బార్లో చరిత్రను మరియు స్వీయ పూరణలను క్లియర్ చేస్తుంది.</translation> <translation id="2021896219286479412">పూర్తి స్క్రీన్ సైట్ నియంత్రణలు</translation> @@ -307,6 +308,7 @@ <translation id="3298243779924642547">లైట్</translation> <translation id="3303414029551471755">కంటెంట్ను డౌన్లోడ్ చేయడం కొనసాగించాలా?</translation> <translation id="3306398118552023113">ఈ యాప్ Chromeలో అమలవుతోంది</translation> +<translation id="3312292613668865961">మీ వర్చువల్ రియాలిటీ పరికరం మరియు డేటాను యాక్సెస్ చేయడానికి సైట్లను అనుమతించే ముందు అడుగుతుంది (సిఫార్సు చేయబడింది)</translation> <translation id="3315103659806849044">మీరు ప్రస్తుతం మీ సింక్, Google సేవా సెట్టింగ్లను అనుకూలీకరిస్తున్నారు. సింక్ను ఆన్ చేయడం పూర్తి చేయడానికి, స్క్రీన్ దిగువ భాగం సమీపంలోని నిర్ధారించు బటన్ను నొక్కండి. పైకి నావిగేట్ చేయి</translation> <translation id="3328801116991980348">సైట్ సమాచారం</translation> <translation id="3333961966071413176">మొత్తం పరిచయాలు</translation> @@ -512,6 +514,7 @@ <translation id="4915549754973153784">పరికరాల కోసం స్కాన్ చేస్తున్నప్పుడు <ph name="BEGIN_LINK" />సహాయం పొందండి<ph name="END_LINK" />…</translation> <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# పేజీ}other{# పేజీలు}}</translation> <translation id="4932247056774066048">మీరు <ph name="DOMAIN_NAME" /> నిర్వహణలోని ఖాతా నుండి సైన్ అవుట్ చేస్తున్నందున, ఈ పరికరం నుండి మీ Chrome డేటా తొలగించబడుతుంది. అది మీ Google ఖాతాలో అలాగే భద్రపరచబడుతుంది.</translation> +<translation id="4935305910887312910">కెమెరా స్థానాన్ని పొందడానికి లేదా మీ గదిని మ్యాప్ చేయడానికి సైట్లను అనుమతించే ముందు అడగడం జరుగుతుంది (సిఫార్సు చేయబడింది)</translation> <translation id="4943703118917034429">వర్చువల్ రియాలిటీ</translation> <translation id="4943872375798546930">ఫలితాలు ఏవీ లేవు</translation> <translation id="4958708863221495346"><ph name="URL_OF_THE_CURRENT_TAB" /> మీ స్క్రీన్ని భాగస్వామ్యం చేస్తోంది</translation> @@ -743,6 +746,7 @@ <translation id="6573431926118603307">మీరు మీ ఇతర పరికరాల్లోని Chromeలో తెరిచిన ట్యాబ్లు ఇక్కడ చూపబడతాయి.</translation> <translation id="6583199322650523874">ప్రస్తుత పేజీని బుక్మార్క్ చేయండి</translation> <translation id="6593061639179217415">డెస్క్టాప్ సైట్</translation> +<translation id="6597891566292541626">QR/బార్ కోడ్ను ఈ ఫ్రేమ్లో ఉంచండి.</translation> <translation id="6600954340915313787">Chromeకి కాపీ చేయబడింది</translation> <translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation> <translation id="6612358246767739896">రక్షిత కంటెంట్</translation> @@ -952,6 +956,7 @@ <translation id="8109613176066109935">ఇక ఎప్పుడు ఎక్కడ బుక్మార్క్లను సెట్ చేసినా ఆటోమాటిక్గా మీ అన్ని పరికరాలలో పొందాలనుకుంటే, సమకాలీకరణ ఎంపికని ఆన్ చేయండి</translation> <translation id="8110087112193408731">డిజిటల్ సంక్షేమంలో మీ Chrome కార్యకలాపాన్ని చూపించాలా?</translation> <translation id="8116925261070264013">మ్యూట్ చేసినవి</translation> +<translation id="8127542551745560481">హోమ్ పేజీని ఎడిట్ చేయండి</translation> <translation id="813082847718468539">సైట్ సమాచారాన్ని చూడండి</translation> <translation id="8156139159503939589">మీరు ఏ భాషలను చదవగలరు?</translation> <translation id="8168435359814927499">కంటెంట్</translation> @@ -1023,6 +1028,7 @@ <translation id="8676374126336081632">ఇన్పుట్ను తీసివేయండి</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{సిగ్నల్ సామర్థ్యం స్థాయి: # బార్}other{సిగ్నల్ సామర్థ్యం స్థాయి: # బార్లు}}</translation> <translation id="868929229000858085">మీ పరిచయాలను వెతకండి</translation> +<translation id="8698438463325761328">వర్చువల్ రియాలిటీ పరికరం మరియు డేటాను యాక్సెస్ చేయకుండా సైట్లను బ్లాక్ చేస్తుంది</translation> <translation id="869891660844655955">గడువు తేదీ</translation> <translation id="8728487861892616501">యాప్ని ఉపయోగించడం ద్వారా, మీరు Chrome యొక్క <ph name="BEGIN_LINK1" />సేవా నిబంధనలు<ph name="END_LINK1" />, <ph name="BEGIN_LINK2" />గోప్యతా నోటీసు<ph name="END_LINK2" /> మరియు <ph name="BEGIN_LINK3" />Google ఖాతాల కోసం Family Linkలో నిర్వహించే గోప్యతా నోటీసు<ph name="END_LINK3" />ను అంగీకరిస్తున్నారు.</translation> <translation id="8748850008226585750">కంటెంట్లు దాచబడ్డాయి</translation> @@ -1039,6 +1045,7 @@ <translation id="883806473910249246">కంటెంట్ను డౌన్లోడ్ చేస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది.</translation> <translation id="8840953339110955557">ఈ పేజీ మరియు ఆన్లైన్ వెర్షన్ వేరుగా ఉండవచ్చు.</translation> <translation id="8847988622838149491">USB</translation> +<translation id="884828189055900810">కెమెరా స్థానాన్ని పొందకుండా లేదా మీ గదిని మ్యాప్ చేయకుండా సైట్లను బ్లాక్ చేస్తుంది</translation> <translation id="8853345339104747198"><ph name="TAB_TITLE" />, ట్యాబ్</translation> <translation id="885701979325669005">నిల్వ</translation> <translation id="889338405075704026">Chrome సెట్టింగ్లకు వెళ్లు</translation> @@ -1046,6 +1053,7 @@ <translation id="8909135823018751308">భాగస్వామ్యం చేయి…</translation> <translation id="8912362522468806198">Google ఖాతా</translation> <translation id="8920114477895755567">తల్లిదండ్రుల వివరాల కోసం వేచి ఉంది.</translation> +<translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation> <translation id="8922289737868596582">మరిన్ని ఎంపికలు బటన్ నుండి పేజీలను డౌన్లోడ్ చేసుకోవడం ద్వారా వాటిని ఆఫ్లైన్లో ఉపయోగించండి</translation> <translation id="8926666909099850184">ఈ పరికరంలో NFC ఆఫ్ చేయబడింది. <ph name="BEGIN_LINK" />Android సెట్టింగ్ల<ph name="END_LINK" />లో దాన్ని ఆన్ చేయండి.</translation> <translation id="8937772741022875483">డిజిటల్ సంక్షేమం నుండి మీ Chrome కార్యకలాపం తీసివేయాలా?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb index 5c0b400..d447550 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
@@ -134,6 +134,7 @@ <translation id="1994173015038366702">URL ของเว็บไซต์</translation> <translation id="2000419248597011803">ส่งคุกกี้และการค้นหาบางรายการจากแถบที่อยู่และช่องค้นหาไปยังเครื่องมือค้นหาเริ่มต้น</translation> <translation id="2002537628803770967">ใช้ข้อมูลบัตรเครดิตและที่อยู่จาก Google Pay</translation> +<translation id="2012973609889389923">เว็บไซต์รวดเร็ว</translation> <translation id="2013642289801508067">{FILE_COUNT,plural, =1{# ไฟล์}other{# ไฟล์}}</translation> <translation id="2017836877785168846">ล้างประวัติการเข้าชมและการเติมข้อความอัตโนมัติในแถบที่อยู่เว็บ</translation> <translation id="2021896219286479412">ส่วนควบคุมเว็บไซต์แบบเต็มหน้าจอ</translation> @@ -307,6 +308,7 @@ <translation id="3298243779924642547">Lite</translation> <translation id="3303414029551471755">ต้องการดำเนินการดาวน์โหลดเนื้อหานี้ไหม</translation> <translation id="3306398118552023113">แอปนี้กำลังทำงานใน Chrome</translation> +<translation id="3312292613668865961">ถามก่อนที่จะอนุญาตให้เว็บไซต์เข้าถึงอุปกรณ์และข้อมูล Virtual Reality ของคุณ (แนะนำ)</translation> <translation id="3315103659806849044">ขณะนี้คุณกำลังปรับแต่งการตั้งค่าการซิงค์และบริการ Google แตะปุ่ม "ยืนยัน" ใกล้ด้านล่างของหน้าจอเพื่อเปิดการซิงค์ให้เสร็จสิ้น กลับ</translation> <translation id="3328801116991980348">ข้อมูลไซต์</translation> <translation id="3333961966071413176">รายชื่อติดต่อทั้งหมด</translation> @@ -512,6 +514,7 @@ <translation id="4915549754973153784"><ph name="BEGIN_LINK" />รับความช่วยเหลือ<ph name="END_LINK" />ระหว่างการค้นหาอุปกรณ์…</translation> <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# หน้า}other{# หน้า}}</translation> <translation id="4932247056774066048">เนื่องจากคุณกำลังจะออกจากระบบบัญชีที่จัดการโดย <ph name="DOMAIN_NAME" /> ข้อมูลใน Chrome จะถูกลบออกจากอุปกรณ์นี้ แต่จะยังคงอยู่ในบัญชี Google</translation> +<translation id="4935305910887312910">ถามก่อนที่จะอนุญาตให้เว็บไซต์รับข้อมูลตำแหน่งของกล้องหรือทำแผนผังห้องของคุณ (แนะนำ)</translation> <translation id="4943703118917034429">Virtual Reality</translation> <translation id="4943872375798546930">ไม่มีผลการค้นหา</translation> <translation id="4958708863221495346"><ph name="URL_OF_THE_CURRENT_TAB" /> กำลังแชร์หน้าจอของคุณ</translation> @@ -743,6 +746,7 @@ <translation id="6573431926118603307">แท็บที่คุณเปิดไว้ใน Chrome ในอุปกรณ์เครื่องอื่นๆ จะปรากฏที่นี่</translation> <translation id="6583199322650523874">บุ๊กมาร์กหน้าปัจจุบัน</translation> <translation id="6593061639179217415">เว็บไซต์เวอร์ชันเดสก์ท็อป</translation> +<translation id="6597891566292541626">จัดตำแหน่งคิวอาร์โค้ด/บาร์โค้ดให้อยู่ในกรอบนี้</translation> <translation id="6600954340915313787">คัดลอกไปยัง Chrome แล้ว</translation> <translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation> <translation id="6612358246767739896">เนื้อหาที่ได้รับความคุ้มครอง</translation> @@ -952,6 +956,7 @@ <translation id="8109613176066109935">เปิดการซิงค์เพื่อรับบุ๊กมาร์กในอุปกรณ์ทุกเครื่องของคุณ</translation> <translation id="8110087112193408731">ต้องการแสดงกิจกรรม Chrome ในไลฟ์สไตล์ดิจิทัลไหม</translation> <translation id="8116925261070264013">ปิดเสียง</translation> +<translation id="8127542551745560481">แก้ไขหน้าแรก</translation> <translation id="813082847718468539">ดูข้อมูลเว็บไซต์</translation> <translation id="8156139159503939589">คุณอ่านภาษาใดได้บ้าง</translation> <translation id="8168435359814927499">เนื้อหา</translation> @@ -1023,6 +1028,7 @@ <translation id="8676374126336081632">ล้างข้อมูลที่ป้อน</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{ระดับความแรงของสัญญาณ: # แถบ}other{ระดับความแรงของสัญญาณ: # แถบ}}</translation> <translation id="868929229000858085">ค้นหารายชื่อติดต่อ</translation> +<translation id="8698438463325761328">บล็อกเว็บไซต์ไม่ให้เข้าถึงอุปกรณ์และข้อมูล Virtual Reality ของคุณ</translation> <translation id="869891660844655955">วันหมดอายุ</translation> <translation id="8728487861892616501">การใช้แอปพลิเคชันนี้หมายความว่าคุณยอมรับ <ph name="BEGIN_LINK1" />ข้อกำหนดในการให้บริการ<ph name="END_LINK1" /> และ <ph name="BEGIN_LINK2" />ประกาศเกี่ยวกับนโยบายความเป็นส่วนตัว<ph name="END_LINK2" /> ของ Chrome รวมถึง <ph name="BEGIN_LINK3" />ประกาศเกี่ยวกับนโยบายความเป็นส่วนตัวสำหรับบัญชี Google ที่จัดการด้วย Family Link<ph name="END_LINK3" /></translation> <translation id="8748850008226585750">เนื้อหาถูกซ่อนไว้</translation> @@ -1039,6 +1045,7 @@ <translation id="883806473910249246">เกิดข้อผิดพลาดขณะดาวน์โหลดเนื้อหา</translation> <translation id="8840953339110955557">หน้าเว็บนี้อาจแตกต่างไปจากเวอร์ชันที่ออนไลน์</translation> <translation id="8847988622838149491">USB</translation> +<translation id="884828189055900810">บล็อกเว็บไซต์ไม่ให้รับข้อมูลตำแหน่งของกล้องหรือทำแผนผังห้องของคุณ</translation> <translation id="8853345339104747198"><ph name="TAB_TITLE" /> เป็นแท็บ</translation> <translation id="885701979325669005">พื้นที่เก็บข้อมูล</translation> <translation id="889338405075704026">ไปที่การตั้งค่า Chrome</translation> @@ -1046,6 +1053,7 @@ <translation id="8909135823018751308">แชร์…</translation> <translation id="8912362522468806198">บัญชี Google</translation> <translation id="8920114477895755567">กำลังรอรายละเอียดของผู้ปกครอง</translation> +<translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation> <translation id="8922289737868596582">ดาวน์โหลดหน้าจากปุ่มตัวเลือกเพิ่มเติมเพื่อใช้งานแบบออฟไลน์</translation> <translation id="8926666909099850184">NFC ในอุปกรณ์นี้ปิดอยู่ เปิดได้ใน<ph name="BEGIN_LINK" />การตั้งค่า Android<ph name="END_LINK" /></translation> <translation id="8937772741022875483">ต้องการนำกิจกรรม Chrome ออกจากไลฟ์สไตล์ดิจิทัลไหม</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb index 1ff0b46..191701d 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
@@ -279,6 +279,7 @@ <translation id="3060635849835183725">{BOOKMARKS_COUNT,plural, =1{<ph name="BOOKMARKS_COUNT_ONE" /> yer işareti}other{<ph name="BOOKMARKS_COUNT_MANY" /> yer işareti}}</translation> <translation id="3089395242580810162">Gizli sekmede aç</translation> <translation id="3123473560110926937">Bazı sitelerde engellendi</translation> +<translation id="3123734510202723619">Duyurular</translation> <translation id="3137521801621304719">Gizli moddan çık</translation> <translation id="3143515551205905069">Senkronizasyonu iptal et</translation> <translation id="3157842584138209013">Diğer Seçenekler düğmesini kullanarak ne kadar veri tasarrufu sağladığınıza bakın</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb index bb26cc1..b1acd51 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb
@@ -134,6 +134,7 @@ <translation id="1994173015038366702">سائٹ کا URL</translation> <translation id="2000419248597011803">پتہ بار اور تلاش خانے سے کچھ کوکیز اور تلاشیاں آپ کے ڈیفالٹ تلاش انجن کو بھیجتا ہے</translation> <translation id="2002537628803770967">Google Pay کا استعمال کرنے والے کریڈٹ کارڈز اور پتے</translation> +<translation id="2012973609889389923">تیز سائٹ</translation> <translation id="2013642289801508067">{FILE_COUNT,plural, =1{# فائل}other{# فائلیں}}</translation> <translation id="2017836877785168846">پتہ بار کی سرگزشت اور خودکار تکمیلات کو صاف کرتا ہے۔</translation> <translation id="2021896219286479412">پوری اسکرین کے سائٹ کنٹرولز</translation> @@ -307,6 +308,7 @@ <translation id="3298243779924642547">لائٹ</translation> <translation id="3303414029551471755">مواد ڈاؤن لوڈ کرنے کیلئے آگے بڑھیں؟</translation> <translation id="3306398118552023113">یہ ایپ Chrome میں چل رہی ہے</translation> +<translation id="3312292613668865961">سائٹس کو آپ کے ورچوئل ریئلٹی ڈیوائس اور ڈیٹا تک رسائی کی اجازت سے پہلے پوچھیں (تجویز کردہ)</translation> <translation id="3315103659806849044">آپ فی الوقت اپنی Sync اور Google سروس کی ترتیبات کو حسب ضرورت بنا رہے ہیں۔ مطابقت پذیری آن کرنے کا عمل مکمل کرنے کیلئے، اسکرین کے نچلے حصے کے پاس موجود 'تصدیق کریں' بٹن تھپتھپائیں۔ اوپر نیویگیٹ کریں</translation> <translation id="3328801116991980348">سائٹ کی معلومات</translation> <translation id="3333961966071413176">تمام رابطے</translation> @@ -512,6 +514,7 @@ <translation id="4915549754973153784">آلات کو اسکین کرتے وقت <ph name="BEGIN_LINK" />مدد حاصل کریں<ph name="END_LINK" />…</translation> <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# صفحہ}other{# صفحات}}</translation> <translation id="4932247056774066048">چونکہ آپ <ph name="DOMAIN_NAME" /> کے زیر نظم اکاؤنٹ سے سائن آؤٹ ہو رہے ہیں اسلئے آپ کا Chrome ڈیٹا اس آلہ سے حذف کردیا جائے گا۔ یہ آپ کے Google اکاؤنٹ میں باقی رہے گا۔</translation> +<translation id="4935305910887312910">سائٹس کو کیمرا کی پوزیشن حاصل کرنے یا اپنے کمرے کی پیمائش کرنے کی اجازت دینے سے پہلے پوچھیں (تجویز کردہ)</translation> <translation id="4943703118917034429">ورچوئل رئیلٹی</translation> <translation id="4943872375798546930">کوئی نتائج نہیں ہیں</translation> <translation id="4958708863221495346"><ph name="URL_OF_THE_CURRENT_TAB" /> آپ کی اسکرین کا اشتراک کر رہا ہے</translation> @@ -743,6 +746,7 @@ <translation id="6573431926118603307">اپنے دیگر آلات پر Chrome میں آپ نے جو ٹیبز کھولے ہیں وہ یہاں ظاہر ہوں گے۔</translation> <translation id="6583199322650523874">موجودہ صفحہ کا بُک مارک بنائیں</translation> <translation id="6593061639179217415">ڈیسک ٹاپ سائٹ</translation> +<translation id="6597891566292541626">QR/بار کوڈ کو اس فریم میں رکھیں۔</translation> <translation id="6600954340915313787">Chrome پر کاپی کر دیا گیا</translation> <translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation> <translation id="6612358246767739896">تحفظ یافتہ مواد</translation> @@ -952,6 +956,7 @@ <translation id="8109613176066109935">اپنے سبھی آلات پر اپنے بُک مارکس حاصل کرنے کیلئے، سِنک کو آن کریں</translation> <translation id="8110087112193408731">ڈیجیٹل فلاح و بہبود میں آپ کی Chrome سرگرمی دکھائیں؟</translation> <translation id="8116925261070264013">خاموش کردہ</translation> +<translation id="8127542551745560481">ہوم صفحہ میں ترمیم کریں</translation> <translation id="813082847718468539">سائٹ کی معلومات دیکھیں</translation> <translation id="8156139159503939589">آپ کون سی زبانیں پڑھ سکتے ہیں؟</translation> <translation id="8168435359814927499">مواد</translation> @@ -1023,6 +1028,7 @@ <translation id="8676374126336081632">ان پٹ صاف کریں</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{سگنل کی مضبوطی کی سطح: # بار}other{سگنل کی مضبوطی کی سطح: # بارز}}</translation> <translation id="868929229000858085">اپنے رابطوں کو تلاش کریں</translation> +<translation id="8698438463325761328">سائٹس کو اپنے ورچوئل ریئلٹی ڈیوائس اور ڈیٹا تک رسائی سے مسدود کریں</translation> <translation id="869891660844655955">میعاد ختم ہونے کی تاریخ</translation> <translation id="8728487861892616501">اس ایپلیکیشن کا استعمال کر کے آپ Chrome کی <ph name="BEGIN_LINK1" />سروس کی شرائط<ph name="END_LINK1" /> اور <ph name="BEGIN_LINK2" />رازداری کے نوٹس<ph name="END_LINK2" />، اور <ph name="BEGIN_LINK3" />Family Link سے نظم کردہ Google اکاؤنٹس کیلئے رازداری کے نوٹس<ph name="END_LINK3" /> سے اتفاق کرتے ہیں۔</translation> <translation id="8748850008226585750">مواد مخفی ہیں</translation> @@ -1039,6 +1045,7 @@ <translation id="883806473910249246">مواد ڈاؤن لوڈ کرتے وقت ایک خرابی پیش آ گئی۔</translation> <translation id="8840953339110955557">یہ صفحہ آن لائن ورژن سے مختلف ہو سکتا ہے۔</translation> <translation id="8847988622838149491">USB</translation> +<translation id="884828189055900810">سائٹس کو کیمرا کی پوزیشن حاصل کرنے یا اپنے کمرے کی پیمائش کرنے سے مسدود کریں</translation> <translation id="8853345339104747198"><ph name="TAB_TITLE" />، ٹیب</translation> <translation id="885701979325669005">اسٹوریج</translation> <translation id="889338405075704026">Chrome کی ترتیبات میں جائیں</translation> @@ -1046,6 +1053,7 @@ <translation id="8909135823018751308">اشتراک کریں…</translation> <translation id="8912362522468806198">Google اکاؤنٹ</translation> <translation id="8920114477895755567">والدین کی تفصیلات کا انتظار ہے۔</translation> +<translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation> <translation id="8922289737868596582">آف لائن صفحات استعمال کرنے کے لیے انہیں مزید اختیارات بٹن سے ڈاؤن لوڈ کریں</translation> <translation id="8926666909099850184">اس آلہ کے لیے NFC آف ہے۔ اسے <ph name="BEGIN_LINK" />Android ترتیبات<ph name="END_LINK" /> میں آن کریں۔</translation> <translation id="8937772741022875483">ڈیجیٹل فلاح و بہبود سے آپ کی Chrome سرگرمی ہٹائیں؟</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb index 89a8c9c..8e4cb74 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb
@@ -279,6 +279,7 @@ <translation id="3060635849835183725">{BOOKMARKS_COUNT,plural, =1{<ph name="BOOKMARKS_COUNT_ONE" /> ta bukmark}other{<ph name="BOOKMARKS_COUNT_MANY" /> ta bukmark}}</translation> <translation id="3089395242580810162">Inkognito rejimida ochish</translation> <translation id="3123473560110926937">Ayrim saytlarda bloklangan</translation> +<translation id="3123734510202723619">Xabarnomalar</translation> <translation id="3137521801621304719">Inkognito rejimidan chiqish</translation> <translation id="3143515551205905069">Sinxronizatsiyani bekor qilish</translation> <translation id="3157842584138209013">Tejalgan trafik miqdorini bilish uchun “Boshqa parametrlar” tugmasini bosing</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb index 84f0717..80a4c48 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
@@ -134,6 +134,7 @@ <translation id="1994173015038366702">网站网址</translation> <translation id="2000419248597011803">将一些 Cookie 以及地址栏和搜索框中的搜索字词发送给您的默认搜索引擎</translation> <translation id="2002537628803770967">Google Pay 中存储的信用卡和地址信息</translation> +<translation id="2012973609889389923">网站加载速度很快</translation> <translation id="2013642289801508067">{FILE_COUNT,plural, =1{# 个文件}other{# 个文件}}</translation> <translation id="2017836877785168846">清除历史记录和地址栏中的自动填充项。</translation> <translation id="2021896219286479412">全屏网站控件</translation> @@ -307,6 +308,7 @@ <translation id="3298243779924642547">精简版</translation> <translation id="3303414029551471755">要开始下载该内容吗?</translation> <translation id="3306398118552023113">此应用正在 Chrome 中运行</translation> +<translation id="3312292613668865961">在允许网站访问您的虚拟实境设备和数据之前询问您(推荐)</translation> <translation id="3315103659806849044">您正在自定义您的“同步功能和 Google 服务”设置。要完成开启同步功能的操作,请点按屏幕底部附近的“确认”按钮。转到上一层级</translation> <translation id="3328801116991980348">网站信息</translation> <translation id="3333961966071413176">所有联系人</translation> @@ -512,6 +514,7 @@ <translation id="4915549754973153784">正在搜寻设备…<ph name="BEGIN_LINK" />获取帮助<ph name="END_LINK" /></translation> <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# 个网页}other{# 个网页}}</translation> <translation id="4932247056774066048">您将要退出由 <ph name="DOMAIN_NAME" /> 管理的帐号,因此您的 Chrome 数据将会从这部设备中删除,但仍会保留在您的 Google 帐号中。</translation> +<translation id="4935305910887312910">在允许网站获取摄像头位置或映射您的房间之前询问您(推荐)</translation> <translation id="4943703118917034429">虚拟实境</translation> <translation id="4943872375798546930">找不到结果</translation> <translation id="4958708863221495346"><ph name="URL_OF_THE_CURRENT_TAB" /> 正在共享您的屏幕</translation> @@ -743,6 +746,7 @@ <translation id="6573431926118603307">您在其他设备上的 Chrome 中打开的标签页将列在此处。</translation> <translation id="6583199322650523874">为当前网页添加书签</translation> <translation id="6593061639179217415">桌面版网站</translation> +<translation id="6597891566292541626">将二维码/条形码放到框内。</translation> <translation id="6600954340915313787">已复制到 Chrome</translation> <translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation> <translation id="6612358246767739896">受保护的内容</translation> @@ -952,6 +956,7 @@ <translation id="8109613176066109935">要将您的书签同步到您的所有设备上,请开启同步功能</translation> <translation id="8110087112193408731">在“数字健康”应用中显示您的 Chrome 活动记录?</translation> <translation id="8116925261070264013">已静音的网站</translation> +<translation id="8127542551745560481">修改主页</translation> <translation id="813082847718468539">查看网站信息</translation> <translation id="8156139159503939589">您能看懂哪些语言?</translation> <translation id="8168435359814927499">内容</translation> @@ -1023,6 +1028,7 @@ <translation id="8676374126336081632">清除输入的内容</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{信号强度:# 格}other{信号强度:# 格}}</translation> <translation id="868929229000858085">搜索联系人</translation> +<translation id="8698438463325761328">禁止网站访问您的虚拟实境设备和数据</translation> <translation id="869891660844655955">截止日期</translation> <translation id="8728487861892616501">使用此应用即表示您同意 Chrome 的<ph name="BEGIN_LINK1" />服务条款<ph name="END_LINK1" />和<ph name="BEGIN_LINK2" />隐私权声明<ph name="END_LINK2" />,以及<ph name="BEGIN_LINK3" />针对通过 Family Link 管理的 Google 帐号的隐私权声明<ph name="END_LINK3" />。</translation> <translation id="8748850008226585750">内容已隐藏</translation> @@ -1039,6 +1045,7 @@ <translation id="883806473910249246">下载此内容时出错。</translation> <translation id="8840953339110955557">此网页可能与在线版本有所不同。</translation> <translation id="8847988622838149491">USB</translation> +<translation id="884828189055900810">禁止网站获取摄像头位置或映射您的房间</translation> <translation id="8853345339104747198"><ph name="TAB_TITLE" />,标签页</translation> <translation id="885701979325669005">存储数据</translation> <translation id="889338405075704026">转至 Chrome 设置</translation> @@ -1046,6 +1053,7 @@ <translation id="8909135823018751308">分享…</translation> <translation id="8912362522468806198">Google 帐号</translation> <translation id="8920114477895755567">正在等待获取家长的详细信息。</translation> +<translation id="8921772741368021346"><ph name="POSITION" /> / <ph name="DURATION" /></translation> <translation id="8922289737868596582">通过“更多选项”按钮下载网页以供离线查看</translation> <translation id="8926666909099850184">此设备的 NFC 功能处于关闭状态。请在 <ph name="BEGIN_LINK" />Android 设置<ph name="END_LINK" />中开启此功能。</translation> <translation id="8937772741022875483">从“数字健康”应用中移除您的 Chrome 活动记录?</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb index 858cf840..efd5e03 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
@@ -308,7 +308,7 @@ <translation id="3298243779924642547">簡易模式</translation> <translation id="3303414029551471755">繼續下載內容?</translation> <translation id="3306398118552023113">Chrome 正在執行此應用程式</translation> -<translation id="3312292613668865961">系統必須先詢問你,才能允許網站存取你的虛擬實境裝置和資料 (建議)</translation> +<translation id="3312292613668865961">在允許網站存取您的虛擬實境裝置和資料前詢問您 (建議)</translation> <translation id="3315103659806849044">你宜家自訂緊同步功能同 Google 服務設定。你㩒一下畫面底部附近嘅 [確認] 掣,就可以完成打開同步處理功能嘅程序喇。向上瀏覽</translation> <translation id="3328801116991980348">網站資料</translation> <translation id="3333961966071413176">所有聯絡人</translation> @@ -514,7 +514,7 @@ <translation id="4915549754973153784">正在掃描裝置…<ph name="BEGIN_LINK" />查看說明<ph name="END_LINK" /></translation> <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# 個網頁}other{# 個網頁}}</translation> <translation id="4932247056774066048">您即將登出由 <ph name="DOMAIN_NAME" /> 管理的帳戶,因此您的 Chrome 資料亦會從此裝置上刪除,但仍會保留在您的 Google 帳戶中。</translation> -<translation id="4935305910887312910">系統必須先詢問你,才能允許網站取得攝影機位置或對應你的房間 (建議)</translation> +<translation id="4935305910887312910">在允許網站接收接收攝錄機位置或對應您的房間佈局前先詢問您 (建議)</translation> <translation id="4943703118917034429">虛擬實境</translation> <translation id="4943872375798546930">沒有結果</translation> <translation id="4958708863221495346"><ph name="URL_OF_THE_CURRENT_TAB" /> 正在共用您的螢幕</translation> @@ -746,7 +746,7 @@ <translation id="6573431926118603307">您在其他裝置上開啟的 Chrome 分頁會在這裡顯示。</translation> <translation id="6583199322650523874">將目前的網頁加入書籤</translation> <translation id="6593061639179217415">桌面版網站</translation> -<translation id="6597891566292541626">將這個方框對準 QR 圖碼/條碼。</translation> +<translation id="6597891566292541626">將二維條碼/條碼放在此方框中。</translation> <translation id="6600954340915313787">已複製至 Chrome</translation> <translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation> <translation id="6612358246767739896">受保護內容</translation> @@ -1027,7 +1027,7 @@ <translation id="8676374126336081632">清除輸入</translation> <translation id="8687353297350450808">{N_BARS,plural, =1{訊號強度等級:# 格}other{訊號強度等級:# 格}}</translation> <translation id="868929229000858085">搜尋您的聯絡人</translation> -<translation id="8698438463325761328">禁止網站存取你的虛擬實境裝置和資料</translation> +<translation id="8698438463325761328">禁止網站存取您的虛擬實境裝置和資料</translation> <translation id="869891660844655955">到期日</translation> <translation id="8728487861892616501">繼續使用此應用程式即表示您同意 Chrome 的《<ph name="BEGIN_LINK1" />服務條款<ph name="END_LINK1" />》、《<ph name="BEGIN_LINK2" />私隱聲明<ph name="END_LINK2" />》及《<ph name="BEGIN_LINK3" />由 Family Link 管理的 Google 帳戶之私隱聲明<ph name="END_LINK3" />。</translation> <translation id="8748850008226585750">內容已隱藏</translation> @@ -1044,7 +1044,7 @@ <translation id="883806473910249246">下載內容時發生錯誤。</translation> <translation id="8840953339110955557">此網頁可能與網上版本不同。</translation> <translation id="8847988622838149491">USB</translation> -<translation id="884828189055900810">禁止網站取得攝影機位置或對應你的房間</translation> +<translation id="884828189055900810">禁止網站接收攝錄機位置或對應您的房間佈局</translation> <translation id="8853345339104747198"><ph name="TAB_TITLE" /> (分頁)</translation> <translation id="885701979325669005">儲存設備</translation> <translation id="889338405075704026">前往 Chrome 設定</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb index 6f01c5a6..c918456 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
@@ -279,6 +279,7 @@ <translation id="3060635849835183725">{BOOKMARKS_COUNT,plural, =1{<ph name="BOOKMARKS_COUNT_ONE" /> 個書籤}other{<ph name="BOOKMARKS_COUNT_MANY" /> 個書籤}}</translation> <translation id="3089395242580810162">在無痕式分頁中開啟</translation> <translation id="3123473560110926937">在某些網站上設定封鎖</translation> +<translation id="3123734510202723619">公告事項</translation> <translation id="3137521801621304719">離開無痕模式</translation> <translation id="3143515551205905069">取消同步處理</translation> <translation id="3157842584138209013">如要查看節省的數據用量,請點選 [更多選項] 按鈕</translation> @@ -307,7 +308,7 @@ <translation id="3298243779924642547">精簡版本</translation> <translation id="3303414029551471755">繼續下載這項內容?</translation> <translation id="3306398118552023113">Chrome 正在執行這個應用程式</translation> -<translation id="3312292613668865961">系統必須先詢問你,才能允許網站存取你的虛擬實境裝置和資料 (建議)</translation> +<translation id="3312292613668865961">系統必須先詢問你,才能允許網站存取你的虛擬實境裝置和資料 (建議設定)</translation> <translation id="3315103659806849044">你正在自訂同步功能和 Google 服務設定。如要完成開啟同步功能,請輕觸畫面底部附近的 [確認] 按鈕。向上瀏覽</translation> <translation id="3328801116991980348">網站資訊</translation> <translation id="3333961966071413176">所有聯絡人</translation> @@ -513,7 +514,7 @@ <translation id="4915549754973153784"><ph name="BEGIN_LINK" />查看說明<ph name="END_LINK" />。正在掃描裝置…</translation> <translation id="4921180162323349895">{FILE_COUNT,plural, =1{# 個網頁}other{# 個網頁}}</translation> <translation id="4932247056774066048">你即將登出由 <ph name="DOMAIN_NAME" /> 管理的帳戶,因此系統會將你的 Chrome 資料從這個裝置上刪除,但是這些資料會繼續保留在你的 Google 帳戶中。</translation> -<translation id="4935305910887312910">系統必須先詢問你,才能允許網站取得攝影機位置或對應你的房間 (建議)</translation> +<translation id="4935305910887312910">系統必須先詢問你,才能允許網站取得攝影機位置或對應你的房間 (建議設定)</translation> <translation id="4943703118917034429">虛擬實境</translation> <translation id="4943872375798546930">沒有結果</translation> <translation id="4958708863221495346"><ph name="URL_OF_THE_CURRENT_TAB" /> 正在共用你的畫面。</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb index 536709c..66db6aee 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
@@ -279,6 +279,7 @@ <translation id="3060635849835183725">{BOOKMARKS_COUNT,plural, =1{<ph name="BOOKMARKS_COUNT_ONE" /> ibhukhimakhi}one{<ph name="BOOKMARKS_COUNT_MANY" /> amabhukhimakhi}other{<ph name="BOOKMARKS_COUNT_MANY" /> amabhukhimakhi}}</translation> <translation id="3089395242580810162">Vula kuthebhu ye-incognito</translation> <translation id="3123473560110926937">Kuvinjelwe kwamanye amasayithi</translation> +<translation id="3123734510202723619">Izimemezelo</translation> <translation id="3137521801621304719">Shiya imodi ye-incognito</translation> <translation id="3143515551205905069">Khansela ukuvumelanisa</translation> <translation id="3157842584138209013">Bona ukuthi wonge idatha engakanani kusuka kwinkinobho yezinketho eziningi</translation>
diff --git a/chrome/browser/ui/app_list/app_service/app_service_context_menu.cc b/chrome/browser/ui/app_list/app_service/app_service_context_menu.cc index acceb41..6c8b4df 100644 --- a/chrome/browser/ui/app_list/app_service/app_service_context_menu.cc +++ b/chrome/browser/ui/app_list/app_service/app_service_context_menu.cc
@@ -26,6 +26,7 @@ #include "chrome/browser/ui/app_list/extension_app_utils.h" #include "chrome/browser/ui/chrome_pages.h" #include "chrome/browser/ui/webui/settings/chromeos/app_management/app_management_uma.h" +#include "chrome/browser/web_applications/components/app_registry_controller.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/common/chrome_features.h" #include "chrome/grit/generated_resources.h" @@ -122,14 +123,7 @@ default: if (command_id >= ash::USE_LAUNCH_TYPE_COMMAND_START && command_id < ash::USE_LAUNCH_TYPE_COMMAND_END) { - // Hosted apps can only toggle between LAUNCH_TYPE_WINDOW and - // LAUNCH_TYPE_REGULAR. - extensions::LaunchType launch_type = - (controller()->GetExtensionLaunchType(profile(), app_id()) == - extensions::LAUNCH_TYPE_WINDOW) - ? extensions::LAUNCH_TYPE_REGULAR - : extensions::LAUNCH_TYPE_WINDOW; - controller()->SetExtensionLaunchType(profile(), app_id(), launch_type); + SetLaunchType(command_id); return; } @@ -194,6 +188,14 @@ } } +bool AppServiceContextMenu::IsCommandIdEnabled(int command_id) const { + if (extensions::ContextMenuMatcher::IsExtensionsCustomCommandId(command_id) && + extension_menu_items_) { + return extension_menu_items_->IsCommandIdEnabled(command_id); + } + return AppContextMenu::IsCommandIdEnabled(command_id); +} + void AppServiceContextMenu::OnGetMenuModel( GetMenuModelCallback callback, apps::mojom::MenuItemsPtr menu_items) { @@ -287,3 +289,43 @@ controller()->DoShowAppInfoFlow(profile(), app_id()); } + +void AppServiceContextMenu::SetLaunchType(int command_id) { + switch (app_type_) { + case apps::mojom::AppType::kWeb: + if (base::FeatureList::IsEnabled( + features::kDesktopPWAsWithoutExtensions)) { + // Web apps can only toggle between kStandalone and kBrowser. + web_app::DisplayMode user_display_mode = + ConvertUseLaunchTypeCommandToDisplayMode(command_id); + if (user_display_mode != web_app::DisplayMode::kUndefined) { + auto* provider = web_app::WebAppProvider::Get(profile()); + DCHECK(provider); + provider->registry_controller().SetAppUserDisplayMode( + app_id(), user_display_mode); + } + return; + } + // Otherwise deliberately fall through to fallback on Bookmark Apps. + FALLTHROUGH; + case apps::mojom::AppType::kExtension: { + // Hosted apps can only toggle between LAUNCH_TYPE_WINDOW and + // LAUNCH_TYPE_REGULAR. + extensions::LaunchType launch_type = + (controller()->GetExtensionLaunchType(profile(), app_id()) == + extensions::LAUNCH_TYPE_WINDOW) + ? extensions::LAUNCH_TYPE_REGULAR + : extensions::LAUNCH_TYPE_WINDOW; + controller()->SetExtensionLaunchType(profile(), app_id(), launch_type); + return; + } + case apps::mojom::AppType::kArc: + FALLTHROUGH; + case apps::mojom::AppType::kCrostini: + FALLTHROUGH; + case apps::mojom::AppType::kBuiltIn: + FALLTHROUGH; + default: + return; + } +}
diff --git a/chrome/browser/ui/app_list/app_service/app_service_context_menu.h b/chrome/browser/ui/app_list/app_service/app_service_context_menu.h index a3cde63..a943fe4 100644 --- a/chrome/browser/ui/app_list/app_service/app_service_context_menu.h +++ b/chrome/browser/ui/app_list/app_service/app_service_context_menu.h
@@ -33,10 +33,14 @@ AppListControllerDelegate* controller); ~AppServiceContextMenu() override; + AppServiceContextMenu(const AppServiceContextMenu&) = delete; + AppServiceContextMenu& operator=(const AppServiceContextMenu&) = delete; + // AppContextMenu overrides: void GetMenuModel(GetMenuModelCallback callback) override; void ExecuteCommand(int command_id, int event_flags) override; bool IsCommandIdChecked(int command_id) const override; + bool IsCommandIdEnabled(int command_id) const override; private: void OnGetMenuModel(GetMenuModelCallback callback, @@ -54,6 +58,8 @@ void ShowAppInfo(); + void SetLaunchType(int command_id); + apps::mojom::AppType app_type_; // The SimpleMenuModel used to hold the submenu items.
diff --git a/chrome/browser/ui/ash/launcher/shelf_context_menu.cc b/chrome/browser/ui/ash/launcher/shelf_context_menu.cc index d3e84f8d..0b5a3dc 100644 --- a/chrome/browser/ui/ash/launcher/shelf_context_menu.cc +++ b/chrome/browser/ui/ash/launcher/shelf_context_menu.cc
@@ -176,6 +176,61 @@ } } +const gfx::VectorIcon& ShelfContextMenu::GetCommandIdVectorIcon( + ash::CommandId type, + int string_id) const { + switch (type) { + case ash::MENU_OPEN_NEW: + if (string_id == IDS_APP_LIST_CONTEXT_MENU_NEW_TAB) + return views::kNewTabIcon; + if (string_id == IDS_APP_LIST_CONTEXT_MENU_NEW_WINDOW) + return views::kNewWindowIcon; + return views::kOpenIcon; + case ash::MENU_CLOSE: + return views::kCloseIcon; + case ash::SHOW_APP_INFO: + return views::kInfoIcon; + case ash::UNINSTALL: + return views::kUninstallIcon; + case ash::MENU_PIN: + return controller_->IsPinned(item_.id) ? views::kUnpinIcon + : views::kPinIcon; + case ash::MENU_NEW_WINDOW: + return views::kNewWindowIcon; + case ash::MENU_NEW_INCOGNITO_WINDOW: + return views::kNewIncognitoWindowIcon; + case ash::LAUNCH_TYPE_PINNED_TAB: + case ash::LAUNCH_TYPE_REGULAR_TAB: + case ash::LAUNCH_TYPE_FULLSCREEN: + case ash::LAUNCH_TYPE_WINDOW: + // Check items use a default icon in touchable and default context menus. + return gfx::kNoneIcon; + case ash::NOTIFICATION_CONTAINER: + NOTREACHED() << "NOTIFICATION_CONTAINER does not have an icon, and it is " + "added to the model by NotificationMenuController."; + return gfx::kNoneIcon; + case ash::STOP_APP: + if (string_id == IDS_CROSTINI_SHUT_DOWN_LINUX_MENU_ITEM) + return views::kLinuxShutdownIcon; + return gfx::kNoneIcon; + case ash::CROSTINI_USE_HIGH_DENSITY: + return views::kLinuxHighDensityIcon; + case ash::CROSTINI_USE_LOW_DENSITY: + return views::kLinuxLowDensityIcon; + case ash::SWAP_WITH_NEXT: + case ash::SWAP_WITH_PREVIOUS: + return gfx::kNoneIcon; + case ash::LAUNCH_APP_SHORTCUT_FIRST: + case ash::LAUNCH_APP_SHORTCUT_LAST: + case ash::COMMAND_ID_COUNT: + NOTREACHED(); + return gfx::kNoneIcon; + default: + NOTREACHED(); + return gfx::kNoneIcon; + } +} + void ShelfContextMenu::AddPinMenu(ui::SimpleMenuModel* menu_model) { // Expect a valid ShelfID to add pin/unpin menu item. DCHECK(!item_.id.IsNull()); @@ -240,58 +295,3 @@ } menu_model->AddItemWithStringId(type, string_id); } - -const gfx::VectorIcon& ShelfContextMenu::GetCommandIdVectorIcon( - ash::CommandId type, - int string_id) const { - switch (type) { - case ash::MENU_OPEN_NEW: - if (string_id == IDS_APP_LIST_CONTEXT_MENU_NEW_TAB) - return views::kNewTabIcon; - if (string_id == IDS_APP_LIST_CONTEXT_MENU_NEW_WINDOW) - return views::kNewWindowIcon; - return views::kOpenIcon; - case ash::MENU_CLOSE: - return views::kCloseIcon; - case ash::SHOW_APP_INFO: - return views::kInfoIcon; - case ash::UNINSTALL: - return views::kUninstallIcon; - case ash::MENU_PIN: - return controller_->IsPinned(item_.id) ? views::kUnpinIcon - : views::kPinIcon; - case ash::MENU_NEW_WINDOW: - return views::kNewWindowIcon; - case ash::MENU_NEW_INCOGNITO_WINDOW: - return views::kNewIncognitoWindowIcon; - case ash::LAUNCH_TYPE_PINNED_TAB: - case ash::LAUNCH_TYPE_REGULAR_TAB: - case ash::LAUNCH_TYPE_FULLSCREEN: - case ash::LAUNCH_TYPE_WINDOW: - // Check items use a default icon in touchable and default context menus. - return gfx::kNoneIcon; - case ash::NOTIFICATION_CONTAINER: - NOTREACHED() << "NOTIFICATION_CONTAINER does not have an icon, and it is " - "added to the model by NotificationMenuController."; - return gfx::kNoneIcon; - case ash::STOP_APP: - if (string_id == IDS_CROSTINI_SHUT_DOWN_LINUX_MENU_ITEM) - return views::kLinuxShutdownIcon; - return gfx::kNoneIcon; - case ash::CROSTINI_USE_HIGH_DENSITY: - return views::kLinuxHighDensityIcon; - case ash::CROSTINI_USE_LOW_DENSITY: - return views::kLinuxLowDensityIcon; - case ash::SWAP_WITH_NEXT: - case ash::SWAP_WITH_PREVIOUS: - return gfx::kNoneIcon; - case ash::LAUNCH_APP_SHORTCUT_FIRST: - case ash::LAUNCH_APP_SHORTCUT_LAST: - case ash::COMMAND_ID_COUNT: - NOTREACHED(); - return gfx::kNoneIcon; - default: - NOTREACHED(); - return gfx::kNoneIcon; - } -}
diff --git a/chrome/browser/ui/ash/launcher/shelf_context_menu.h b/chrome/browser/ui/ash/launcher/shelf_context_menu.h index a09593a..0dcc16e 100644 --- a/chrome/browser/ui/ash/launcher/shelf_context_menu.h +++ b/chrome/browser/ui/ash/launcher/shelf_context_menu.h
@@ -36,6 +36,11 @@ bool IsCommandIdEnabled(int command_id) const override; void ExecuteCommand(int command_id, int event_flags) override; + // Helper method to get the gfx::VectorIcon for a |type|. Returns an empty + // gfx::VectorIcon if there is no icon for this |type|. + const gfx::VectorIcon& GetCommandIdVectorIcon(ash::CommandId type, + int string_id) const; + protected: ShelfContextMenu(ChromeLauncherController* controller, const ash::ShelfItem* item, @@ -55,11 +60,6 @@ ash::CommandId type, int string_id); - // Helper method to get the gfx::VectorIcon for a |type|. Returns an empty - // gfx::VectorIcon if there is no icon for this |type|. - const gfx::VectorIcon& GetCommandIdVectorIcon(ash::CommandId type, - int string_id) const; - int64_t display_id() const { return display_id_; } private:
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.cc b/chrome/browser/ui/autofill/chrome_autofill_client.cc index 1e300808..db0026c 100644 --- a/chrome/browser/ui/autofill/chrome_autofill_client.cc +++ b/chrome/browser/ui/autofill/chrome_autofill_client.cc
@@ -500,6 +500,28 @@ popup_controller_->UpdateDataListValues(values, labels); } +base::span<const Suggestion> ChromeAutofillClient::GetPopupSuggestions() const { + if (!popup_controller_.get()) + return base::span<const Suggestion>(); + return popup_controller_->GetUnelidedSuggestions(); +} + +void ChromeAutofillClient::PinPopupViewUntilUpdate() { + if (popup_controller_.get()) + popup_controller_->PinViewUntilUpdate(); +} + +void ChromeAutofillClient::UpdatePopup( + const std::vector<autofill::Suggestion>& suggestions, + PopupType popup_type) { + if (!popup_controller_.get()) + return; // Update only if there is a popup. + + // Calling show will reuse the existing view automatically + popup_controller_->Show(suggestions, /*autoselect_first_suggestion=*/false, + popup_type); +} + void ChromeAutofillClient::HideAutofillPopup(PopupHidingReason reason) { if (popup_controller_.get()) popup_controller_->Hide(reason);
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.h b/chrome/browser/ui/autofill/chrome_autofill_client.h index 47b872c..a68cde1 100644 --- a/chrome/browser/ui/autofill/chrome_autofill_client.h +++ b/chrome/browser/ui/autofill/chrome_autofill_client.h
@@ -141,6 +141,10 @@ void UpdateAutofillPopupDataListValues( const std::vector<base::string16>& values, const std::vector<base::string16>& labels) override; + base::span<const Suggestion> GetPopupSuggestions() const override; + void PinPopupViewUntilUpdate() override; + void UpdatePopup(const std::vector<autofill::Suggestion>& suggestions, + PopupType popup_type) override; void HideAutofillPopup(PopupHidingReason reason) override; bool IsAutocompleteEnabled() override; void PropagateAutofillPredictions(
diff --git a/chrome/browser/ui/global_media_controls/media_notification_service.cc b/chrome/browser/ui/global_media_controls/media_notification_service.cc index 2b1ce88..65460ed 100644 --- a/chrome/browser/ui/global_media_controls/media_notification_service.cc +++ b/chrome/browser/ui/global_media_controls/media_notification_service.cc
@@ -319,11 +319,6 @@ it->second.SetController(std::move(session_controller)); it->second.item()->SetController(std::move(item_controller), std::move(session->session_info)); - if (!base::Contains(dragged_out_session_ids_, id)) - active_controllable_session_ids_.insert(id); - frozen_session_ids_.erase(id); - for (auto& observer : observers_) - observer.OnNotificationListChanged(); } else { sessions_.emplace( std::piecewise_construct, std::forward_as_tuple(id), @@ -347,7 +342,17 @@ if (it == sessions_.end()) return; - it->second.item()->Freeze(); + // If we're not currently showing this item, then we can just remove it. + if (!base::Contains(active_controllable_session_ids_, id) && + !base::Contains(frozen_session_ids_, id) && + !base::Contains(dragged_out_session_ids_, id)) { + RemoveItem(id); + return; + } + + // Otherwise, freeze it in case it regains focus quickly. + it->second.item()->Freeze(base::BindOnce( + &MediaNotificationService::OnItemUnfrozen, base::Unretained(this), id)); active_controllable_session_ids_.erase(id); frozen_session_ids_.insert(id); for (auto& observer : observers_) @@ -645,6 +650,16 @@ HideNotification(id); } +void MediaNotificationService::OnItemUnfrozen(const std::string& id) { + frozen_session_ids_.erase(id); + + if (!base::Contains(dragged_out_session_ids_, id)) + active_controllable_session_ids_.insert(id); + + for (auto& observer : observers_) + observer.OnNotificationListChanged(); +} + void MediaNotificationService::OnReceivedAudioFocusRequests( std::vector<media_session::mojom::AudioFocusRequestStatePtr> sessions) { for (auto& session : sessions)
diff --git a/chrome/browser/ui/global_media_controls/media_notification_service.h b/chrome/browser/ui/global_media_controls/media_notification_service.h index e8b4da17..a2b85e8 100644 --- a/chrome/browser/ui/global_media_controls/media_notification_service.h +++ b/chrome/browser/ui/global_media_controls/media_notification_service.h
@@ -219,6 +219,8 @@ presentation_manager_; }; + void OnItemUnfrozen(const std::string& id); + void OnReceivedAudioFocusRequests( std::vector<media_session::mojom::AudioFocusRequestStatePtr> sessions);
diff --git a/chrome/browser/ui/global_media_controls/media_notification_service_unittest.cc b/chrome/browser/ui/global_media_controls/media_notification_service_unittest.cc index dd5ba6c..c32c115 100644 --- a/chrome/browser/ui/global_media_controls/media_notification_service_unittest.cc +++ b/chrome/browser/ui/global_media_controls/media_notification_service_unittest.cc
@@ -252,10 +252,11 @@ // focus lost here. SimulateFocusLost(id); - // Now, close the tab. + // Now, close the tab. The session may have been destroyed with + // |SimulateFocusLost()| above. auto item_itr = service_->sessions_.find(id.ToString()); - EXPECT_NE(service_->sessions_.end(), item_itr); - item_itr->second.WebContentsDestroyed(); + if (item_itr != service_->sessions_.end()) + item_itr->second.WebContentsDestroyed(); } void SimulatePlaybackStateChanged(const base::UnguessableToken& id, @@ -416,10 +417,52 @@ TEST_F(MediaNotificationServiceTest, DoesNotShowUncontrollableSession) { base::UnguessableToken id = base::UnguessableToken::Create(); + // When focus is gained, we should not show an active session. EXPECT_FALSE(HasActiveNotifications()); SimulateFocusGained(id, false); SimulateNecessaryMetadata(id); EXPECT_FALSE(HasActiveNotifications()); + + // When focus is lost, we should not have a frozen session. + SimulateFocusLost(id); + EXPECT_FALSE(HasFrozenNotifications()); + + // When focus is regained, we should still not have an active session. + SimulateFocusGained(id, false); + EXPECT_FALSE(HasActiveNotifications()); +} + +TEST_F(MediaNotificationServiceTest, + DoesNotShowControllableSessionThatBecomesUncontrollable) { + // Start playing active media. + base::UnguessableToken id = SimulatePlayingControllableMedia(); + EXPECT_TRUE(HasActiveNotifications()); + + // Lose focus so the item freezes. + SimulateFocusLost(id); + EXPECT_FALSE(HasActiveNotifications()); + EXPECT_TRUE(HasFrozenNotifications()); + + // After 1s, the item should still be frozen. + AdvanceClockMilliseconds(1000); + EXPECT_FALSE(HasActiveNotifications()); + EXPECT_TRUE(HasFrozenNotifications()); + + // If the item regains focus but is not controllable, it should not become + // active. + SimulateFocusGained(id, false); + EXPECT_FALSE(HasActiveNotifications()); + EXPECT_TRUE(HasFrozenNotifications()); + + // And the frozen timer should still fire after the initial 2.5 seconds is + // finished. + AdvanceClockMilliseconds(1400); + EXPECT_FALSE(HasActiveNotifications()); + EXPECT_TRUE(HasFrozenNotifications()); + + AdvanceClockMilliseconds(200); + EXPECT_FALSE(HasActiveNotifications()); + EXPECT_FALSE(HasFrozenNotifications()); } TEST_F(MediaNotificationServiceTest, ShowsAllInitialControllableSessions) { @@ -648,8 +691,8 @@ // Simulate regaining focus, but no artwork yet so we wait. SimulateFocusGained(id, true); SimulateNecessaryMetadata(id); - EXPECT_TRUE(HasActiveNotifications()); - EXPECT_FALSE(HasFrozenNotifications()); + EXPECT_FALSE(HasActiveNotifications()); + EXPECT_TRUE(HasFrozenNotifications()); // Then, lose focus again before getting artwork. SimulateFocusLost(id);
diff --git a/chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller.cc b/chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller.cc new file mode 100644 index 0000000..91e35dc --- /dev/null +++ b/chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller.cc
@@ -0,0 +1,36 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller.h" + +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/passwords/passwords_model_delegate.h" +#include "components/password_manager/core/common/password_manager_pref_names.h" +#include "components/prefs/pref_service.h" +#include "content/public/browser/web_contents.h" + +SignInPromoBubbleController::SignInPromoBubbleController( + base::WeakPtr<PasswordsModelDelegate> delegate) + : delegate_(std::move(delegate)) {} + +SignInPromoBubbleController::~SignInPromoBubbleController() = default; + +Profile* SignInPromoBubbleController::GetProfile() const { + content::WebContents* web_contents = + delegate_ ? delegate_->GetWebContents() : nullptr; + if (!web_contents) + return nullptr; + return Profile::FromBrowserContext(web_contents->GetBrowserContext()); +} + +void SignInPromoBubbleController::OnSignInToChromeClicked( + const AccountInfo& account, + bool is_default_promo_account) { + // Enabling sync for an existing account and starting a new sign-in are + // triggered by the user interacting with the sign-in promo. + GetProfile()->GetPrefs()->SetBoolean( + password_manager::prefs::kWasSignInPasswordPromoClicked, true); + if (delegate_) + delegate_->EnableSync(account, is_default_promo_account); +}
diff --git a/chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller.h b/chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller.h new file mode 100644 index 0000000..ef54600 --- /dev/null +++ b/chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller.h
@@ -0,0 +1,33 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_PASSWORDS_BUBBLE_CONTROLLERS_SIGN_IN_PROMO_BUBBLE_CONTROLLER_H_ +#define CHROME_BROWSER_UI_PASSWORDS_BUBBLE_CONTROLLERS_SIGN_IN_PROMO_BUBBLE_CONTROLLER_H_ + +#include "base/memory/weak_ptr.h" + +struct AccountInfo; +class PasswordsModelDelegate; +class Profile; + +// This controller provides data and actions for the PasswordSignInPromoView. +class SignInPromoBubbleController { + public: + explicit SignInPromoBubbleController( + base::WeakPtr<PasswordsModelDelegate> delegate); + ~SignInPromoBubbleController(); + + Profile* GetProfile() const; + + // Called by the view when the "Sign in" button or the "Sync to" button in the + // promo bubble is clicked. + void OnSignInToChromeClicked(const AccountInfo& account, + bool is_default_promo_account); + + private: + // A bridge to ManagePasswordsUIController instance. + base::WeakPtr<PasswordsModelDelegate> delegate_; +}; + +#endif // CHROME_BROWSER_UI_PASSWORDS_BUBBLE_CONTROLLERS_SIGN_IN_PROMO_BUBBLE_CONTROLLER_H_
diff --git a/chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller_unittest.cc b/chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller_unittest.cc new file mode 100644 index 0000000..0a8301a --- /dev/null +++ b/chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller_unittest.cc
@@ -0,0 +1,82 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller.h" + +#include "base/strings/utf_string_conversions.h" +#include "chrome/browser/ui/passwords/passwords_model_delegate_mock.h" +#include "chrome/test/base/testing_profile.h" +#include "components/autofill/core/common/password_form.h" +#include "components/password_manager/core/common/password_manager_pref_names.h" +#include "components/prefs/pref_service.h" +#include "components/signin/public/identity_manager/account_info.h" +#include "content/public/browser/browser_context.h" +#include "content/public/test/browser_task_environment.h" +#include "content/public/test/test_renderer_host.h" +#include "content/public/test/web_contents_tester.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +using ::testing::Return; + +namespace { + +MATCHER_P(AccountEq, expected, "") { + return expected.account_id == arg.account_id && expected.email == arg.email && + expected.gaia == arg.gaia; +} + +} // namespace + +class SignInPromoBubbleControllerTest : public ::testing::Test { + public: + SignInPromoBubbleControllerTest() { + test_web_contents_ = + content::WebContentsTester::CreateTestWebContents(&profile_, nullptr); + mock_delegate_ = + std::make_unique<testing::NiceMock<PasswordsModelDelegateMock>>(); + } + ~SignInPromoBubbleControllerTest() override = default; + + std::vector<std::unique_ptr<autofill::PasswordForm>> GetCurrentForms() const; + + PasswordsModelDelegateMock* delegate() { return mock_delegate_.get(); } + SignInPromoBubbleController* controller() { return controller_.get(); } + TestingProfile* profile() { return &profile_; } + + void Init(); + void DestroyController(); + + private: + content::BrowserTaskEnvironment task_environment_; + content::RenderViewHostTestEnabler rvh_enabler_; + TestingProfile profile_; + std::unique_ptr<content::WebContents> test_web_contents_; + std::unique_ptr<PasswordsModelDelegateMock> mock_delegate_; + std::unique_ptr<SignInPromoBubbleController> controller_; +}; + +void SignInPromoBubbleControllerTest::Init() { + EXPECT_CALL(*delegate(), GetWebContents()) + .WillRepeatedly(Return(test_web_contents_.get())); + + controller_.reset( + new SignInPromoBubbleController(mock_delegate_->AsWeakPtr())); +} + +#if !defined(OS_CHROMEOS) +TEST_F(SignInPromoBubbleControllerTest, SignInPromoOK) { + Init(); + AccountInfo account; + account.account_id = CoreAccountId("foo_account_id"); + account.gaia = "foo_gaia_id"; + account.email = "foo@bar.com"; + EXPECT_CALL(*delegate(), EnableSync(AccountEq(account), false)); + + controller()->OnSignInToChromeClicked(account, + false /* is_default_promo_account */); + EXPECT_TRUE(profile()->GetPrefs()->GetBoolean( + password_manager::prefs::kWasSignInPasswordPromoClicked)); +} +#endif
diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc b/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc index 306c724..baa9797 100644 --- a/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc +++ b/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc
@@ -313,17 +313,6 @@ } } -void ManagePasswordsBubbleModel::OnSignInToChromeClicked( - const AccountInfo& account, - bool is_default_promo_account) { - // Enabling sync for an existing account and starting a new sign-in are - // triggered by the user interacting with the sign-in promo. - GetProfile()->GetPrefs()->SetBoolean( - password_manager::prefs::kWasSignInPasswordPromoClicked, true); - if (delegate_) - delegate_->EnableSync(account, is_default_promo_account); -} - #if defined(PASSWORD_STORE_SELECT_ENABLED) void ManagePasswordsBubbleModel::OnToggleAccountStore(bool is_checked) { delegate_->GetPasswordFeatureManager()->SetDefaultPasswordStore(
diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_model.h b/chrome/browser/ui/passwords/manage_passwords_bubble_model.h index c627f99c..650ef7eb 100644 --- a/chrome/browser/ui/passwords/manage_passwords_bubble_model.h +++ b/chrome/browser/ui/passwords/manage_passwords_bubble_model.h
@@ -25,7 +25,6 @@ class PasswordFormMetricsRecorder; } -struct AccountInfo; class PasswordsModelDelegate; class Profile; @@ -63,11 +62,6 @@ // Called by the view code when the save/update button is clicked by the user. void OnSaveClicked(); - // Called by the view when the "Sign in" button or the "Sync to" button in the - // promo bubble is clicked. - void OnSignInToChromeClicked(const AccountInfo& account, - bool is_default_promo_account); - #if defined(PASSWORD_STORE_SELECT_ENABLED) // Called by the view when the account store checkbox is toggled. void OnToggleAccountStore(bool is_checked);
diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc index e5d6ebe..a5528698 100644 --- a/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc +++ b/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc
@@ -60,11 +60,6 @@ constexpr char kUIDismissalReasonUpdateMetric[] = "PasswordManager.UpdateUIDismissalReason"; -MATCHER_P(AccountEq, expected, "") { - return expected.account_id == arg.account_id && expected.email == arg.email && - expected.gaia == arg.gaia; -} - } // namespace class ManagePasswordsBubbleModelTest : public ::testing::Test { @@ -377,20 +372,6 @@ EXPECT_FALSE(model()->ReplaceToShowPromotionIfNeeded()); #else EXPECT_TRUE(model()->ReplaceToShowPromotionIfNeeded()); - - AccountInfo account; - account.account_id = CoreAccountId("foo_account_id"); - account.gaia = "foo_gaia_id"; - account.email = "foo@bar.com"; - EXPECT_CALL(*controller(), EnableSync(AccountEq(account), false)); - model()->OnSignInToChromeClicked(account, - false /* is_default_promo_account */); - DestroyModelAndVerifyControllerExpectations(); - histogram_tester.ExpectUniqueSample( - kUIDismissalReasonSaveMetric, - password_manager::metrics_util::CLICKED_SAVE, 1); - EXPECT_TRUE(prefs()->GetBoolean( - password_manager::prefs::kWasSignInPasswordPromoClicked)); #endif }
diff --git a/chrome/browser/ui/search/instant_theme_browsertest.cc b/chrome/browser/ui/search/instant_theme_browsertest.cc index c0daa43..9afc3b4 100644 --- a/chrome/browser/ui/search/instant_theme_browsertest.cc +++ b/chrome/browser/ui/search/instant_theme_browsertest.cc
@@ -4,6 +4,7 @@ #include "base/feature_list.h" #include "base/macros.h" +#include "build/build_config.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/extensions/extension_browsertest.h" #include "chrome/browser/profiles/profile.h" @@ -269,7 +270,15 @@ EXPECT_EQ(css_text, new_tab_css_text); } -IN_PROC_BROWSER_TEST_F(InstantThemeTest, ThemeChangedWhenApplyingNewTheme) { +// The test is flaky on linux asan. crbug.com/1045708. +#if defined(OS_LINUX) && defined(ADDRESS_SANITIZER) +#define MAYBE_ThemeChangedWhenApplyingNewTheme \ + DISABLED_ThemeChangedWhenApplyingNewTheme +#else +#define MAYBE_ThemeChangedWhenApplyingNewTheme ThemeChangedWhenApplyingNewTheme +#endif +IN_PROC_BROWSER_TEST_F(InstantThemeTest, + MAYBE_ThemeChangedWhenApplyingNewTheme) { // On the existing tab. ASSERT_EQ(1, browser()->tab_strip_model()->count()); ASSERT_EQ(0, browser()->tab_strip_model()->active_index());
diff --git a/chrome/browser/ui/views/apps/app_uninstall_dialog_view.cc b/chrome/browser/ui/views/apps/app_uninstall_dialog_view.cc index 98f2d496..af728ab3 100644 --- a/chrome/browser/ui/views/apps/app_uninstall_dialog_view.cc +++ b/chrome/browser/ui/views/apps/app_uninstall_dialog_view.cc
@@ -60,30 +60,31 @@ BubbleDialogDelegateView(nullptr, views::BubbleBorder::NONE), app_type_(app_type), app_name_(app_name) { + DialogDelegate::set_close_callback(base::BindOnce( + &AppUninstallDialogView::OnDialogCancelled, base::Unretained(this))); + DialogDelegate::set_cancel_callback(base::BindOnce( + &AppUninstallDialogView::OnDialogCancelled, base::Unretained(this))); + DialogDelegate::set_accept_callback(base::BindOnce( + &AppUninstallDialogView::OnDialogAccepted, base::Unretained(this))); + InitializeView(profile, app_id); chrome::RecordDialogCreation(chrome::DialogIdentifier::APP_UNINSTALL); } -bool AppUninstallDialogView::Cancel() { - return Close(); +void AppUninstallDialogView::OnDialogCancelled() { + uninstall_dialog()->OnDialogClosed(false /* uninstall */, + false /* clear_site_data */, + false /* report_abuse */); } -bool AppUninstallDialogView::Accept() { +void AppUninstallDialogView::OnDialogAccepted() { const bool clear_site_data = clear_site_data_checkbox_ && clear_site_data_checkbox_->GetChecked(); const bool report_abuse_checkbox = report_abuse_checkbox_ && report_abuse_checkbox_->GetChecked(); uninstall_dialog()->OnDialogClosed(true /* uninstall */, clear_site_data, report_abuse_checkbox); - return true; -} - -bool AppUninstallDialogView::Close() { - uninstall_dialog()->OnDialogClosed(false /* uninstall */, - false /* clear_site_data */, - false /* report_abuse */); - return true; } gfx::Size AppUninstallDialogView::CalculatePreferredSize() const {
diff --git a/chrome/browser/ui/views/apps/app_uninstall_dialog_view.h b/chrome/browser/ui/views/apps/app_uninstall_dialog_view.h index f3a40ab..9fd4fc5 100644 --- a/chrome/browser/ui/views/apps/app_uninstall_dialog_view.h +++ b/chrome/browser/ui/views/apps/app_uninstall_dialog_view.h
@@ -53,9 +53,6 @@ ~AppUninstallDialogView() override = default; // views::BubbleDialogDelegateView: - bool Cancel() override; - bool Accept() override; - bool Close() override; gfx::Size CalculatePreferredSize() const override; ui::ModalType GetModalType() const override; gfx::ImageSkia GetWindowIcon() override; @@ -79,6 +76,9 @@ void InitializeView(Profile* profile, const std::string& app_id); + void OnDialogCancelled(); + void OnDialogAccepted(); + // The type of apps, e.g. Extension-backed app, Android app. apps::mojom::AppType app_type_;
diff --git a/chrome/browser/ui/views/arc_app_dialog_view.cc b/chrome/browser/ui/views/arc_app_dialog_view.cc index 14c2dc4..dc94a41a 100644 --- a/chrome/browser/ui/views/arc_app_dialog_view.cc +++ b/chrome/browser/ui/views/arc_app_dialog_view.cc
@@ -62,10 +62,6 @@ ui::ModalType GetModalType() const override; bool ShouldShowCloseButton() const override; - // views::DialogDelegate: - bool Accept() override; - bool Cancel() override; - // views::View: gfx::Size CalculatePreferredSize() const override; @@ -75,6 +71,9 @@ void AddMultiLineLabel(views::View* parent, const base::string16& label_text); + void OnDialogAccepted(); + void OnDialogCancelled(); + views::ImageView* icon_view_ = nullptr; std::unique_ptr<ArcAppIconLoader> icon_loader_; @@ -107,6 +106,10 @@ DialogDelegate::set_button_label(ui::DIALOG_BUTTON_OK, confirm_button_text); DialogDelegate::set_button_label(ui::DIALOG_BUTTON_CANCEL, cancel_button_text); + DialogDelegate::set_accept_callback(base::BindOnce( + &ArcAppDialogView::OnDialogAccepted, base::Unretained(this))); + DialogDelegate::set_cancel_callback(base::BindOnce( + &ArcAppDialogView::OnDialogCancelled, base::Unretained(this))); ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); @@ -164,11 +167,11 @@ } void ArcAppDialogView::ConfirmOrCancelForTest(bool confirm) { - if (confirm) - Accept(); - else - Cancel(); - GetWidget()->Close(); + if (confirm) { + AcceptDialog(); + } else { + CancelDialog(); + } } base::string16 ArcAppDialogView::GetWindowTitle() const { @@ -183,16 +186,16 @@ return false; } -bool ArcAppDialogView::Accept() { - if (confirm_callback_) - std::move(confirm_callback_).Run(true); - return true; +void ArcAppDialogView::OnDialogAccepted() { + // The dialog can either be accepted or cancelled, but never both. + DCHECK(confirm_callback_); + std::move(confirm_callback_).Run(true); } -bool ArcAppDialogView::Cancel() { - if (confirm_callback_) - std::move(confirm_callback_).Run(false); - return true; +void ArcAppDialogView::OnDialogCancelled() { + // The dialog can either be accepted or cancelled, but never both. + DCHECK(confirm_callback_); + std::move(confirm_callback_).Run(false); } gfx::Size ArcAppDialogView::CalculatePreferredSize() const {
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc index 8de6874..b9a9d6f5 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc
@@ -147,21 +147,11 @@ // views::DialogDelegate ------------------------------------------------------- -bool BookmarkBubbleView::Cancel() { +void BookmarkBubbleView::OnDialogCancelled() { base::RecordAction(UserMetricsAction("BookmarkBubble_Unstar")); // Set this so we remove the bookmark after the window closes. remove_bookmark_ = true; apply_edits_ = false; - return true; -} - -bool BookmarkBubbleView::Accept() { - return true; -} - -bool BookmarkBubbleView::Close() { - // Allow closing when activation lost. Default would call Accept(). - return true; } void BookmarkBubbleView::OnDialogInitialized() { @@ -247,6 +237,9 @@ DialogDelegate::SetExtraView(CreateEditButton(this)); DialogDelegate::SetFootnoteView(CreateSigninPromoView()); + DialogDelegate::set_cancel_callback(base::Bind( + &BookmarkBubbleView::OnDialogCancelled, base::Unretained(this))); + chrome::RecordDialogCreation(chrome::DialogIdentifier::BOOKMARK); set_margins(ChromeLayoutProvider::Get()->GetDialogInsetsForContentType( views::CONTROL, views::CONTROL));
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.h b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.h index d4d6e2e..297df16 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.h +++ b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.h
@@ -63,9 +63,6 @@ gfx::ImageSkia GetWindowIcon() override; bool ShouldShowWindowIcon() const override; void WindowClosing() override; - bool Cancel() override; - bool Accept() override; - bool Close() override; void OnDialogInitialized() override; const char* GetClassName() const override; @@ -109,6 +106,8 @@ // Creates the signin promo view, if there should be one. std::unique_ptr<views::View> CreateSigninPromoView(); + void OnDialogCancelled(); + // The bookmark bubble, if we're showing one. static BookmarkBubbleView* bookmark_bubble_;
diff --git a/chrome/browser/ui/views/confirm_bubble_views.cc b/chrome/browser/ui/views/confirm_bubble_views.cc index 4b7ceb01c..d2c583c 100644 --- a/chrome/browser/ui/views/confirm_bubble_views.cc +++ b/chrome/browser/ui/views/confirm_bubble_views.cc
@@ -46,6 +46,10 @@ DialogDelegate::set_button_label( ui::DIALOG_BUTTON_CANCEL, model_->GetButtonLabel(ConfirmBubbleModel::BUTTON_CANCEL)); + DialogDelegate::set_accept_callback(base::BindOnce( + &ConfirmBubbleModel::Accept, base::Unretained(model_.get()))); + DialogDelegate::set_cancel_callback(base::BindOnce( + &ConfirmBubbleModel::Cancel, base::Unretained(model_.get()))); help_button_ = DialogDelegate::SetExtraView(::CreateExtraView(this)); set_margins(ChromeLayoutProvider::Get()->GetDialogInsetsForContentType( @@ -89,16 +93,6 @@ } } -bool ConfirmBubbleViews::Cancel() { - model_->Cancel(); - return true; -} - -bool ConfirmBubbleViews::Accept() { - model_->Accept(); - return true; -} - ui::ModalType ConfirmBubbleViews::GetModalType() const { return ui::MODAL_TYPE_WINDOW; }
diff --git a/chrome/browser/ui/views/confirm_bubble_views.h b/chrome/browser/ui/views/confirm_bubble_views.h index 8791688a..dd4b72e0 100644 --- a/chrome/browser/ui/views/confirm_bubble_views.h +++ b/chrome/browser/ui/views/confirm_bubble_views.h
@@ -37,8 +37,6 @@ // views::DialogDelegate implementation. bool IsDialogButtonEnabled(ui::DialogButton button) const override; - bool Cancel() override; - bool Accept() override; // views::WidgetDelegate implementation. ui::ModalType GetModalType() const override;
diff --git a/chrome/browser/ui/views/hover_button.cc b/chrome/browser/ui/views/hover_button.cc index 3a70cfe..b4d5ae75 100644 --- a/chrome/browser/ui/views/hover_button.cc +++ b/chrome/browser/ui/views/hover_button.cc
@@ -8,13 +8,10 @@ #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" -#include "chrome/app/vector_icons/vector_icons.h" #include "chrome/browser/ui/views/chrome_layout_provider.h" #include "chrome/browser/ui/views/chrome_typography.h" #include "chrome/browser/ui/views/hover_button_controller.h" #include "ui/events/event_constants.h" -#include "ui/gfx/color_palette.h" -#include "ui/gfx/paint_vector_icon.h" #include "ui/views/animation/ink_drop_impl.h" #include "ui/views/background.h" #include "ui/views/border.h" @@ -24,7 +21,6 @@ #include "ui/views/focus/focus_manager.h" #include "ui/views/layout/grid_layout.h" #include "ui/views/style/typography.h" -#include "ui/views/view_class_properties.h" namespace { @@ -353,35 +349,8 @@ } } -void HoverButton::SetStyle(Style style) { - if (style == STYLE_PROMINENT) { - SkColor background_color = GetNativeTheme()->GetSystemColor( - ui::NativeTheme::kColorId_ProminentButtonColor); - SetBackground(views::CreateSolidBackground(background_color)); - // White text on |gfx::kGoogleBlue500| would be adjusted by - // AutoColorRedability. However, this specific combination has an - // exception (http://go/mdcontrast). So, disable AutoColorReadability. - title_->SetAutoColorReadabilityEnabled(false); - SetTitleTextStyle(views::style::STYLE_DIALOG_BUTTON_DEFAULT, - background_color); - SetSubtitleColor(GetNativeTheme()->GetSystemColor( - ui::NativeTheme::kColorId_TextOnProminentButtonColor)); - } else if (style == STYLE_ERROR) { - DCHECK_EQ(nullptr, background()); - title_->SetDefaultTextStyle(STYLE_RED); - } else { - NOTREACHED(); - } -} - void HoverButton::SetTitleTextStyle(views::style::TextStyle text_style, SkColor background_color) { title_->SetDisplayedOnBackgroundColor(background_color); title_->SetDefaultTextStyle(text_style); } - -void HoverButton::SetSubtitleColor(SkColor color) { - if (subtitle_) - subtitle_->SetEnabledColor(color); -} -
diff --git a/chrome/browser/ui/views/hover_button.h b/chrome/browser/ui/views/hover_button.h index 17cfeef..878675d 100644 --- a/chrome/browser/ui/views/hover_button.h +++ b/chrome/browser/ui/views/hover_button.h
@@ -101,17 +101,12 @@ // non-empty subtitle. void SetSubtitleElideBehavior(gfx::ElideBehavior elide_behavior); - // Adjusts the background and the text color according to |style|. - void SetStyle(Style style); - // Sets the text style of the title considering the color of the background. // Passing |background_color| makes sure that the text color will not be // changed to a color that is not readable on the specified background. void SetTitleTextStyle(views::style::TextStyle text_style, SkColor background_color); - void SetSubtitleColor(SkColor color); - void set_auto_compute_tooltip(bool auto_compute_tooltip) { auto_compute_tooltip_ = auto_compute_tooltip; }
diff --git a/chrome/browser/ui/views/hover_button_unittest.cc b/chrome/browser/ui/views/hover_button_unittest.cc index e058fce..a74f10ea 100644 --- a/chrome/browser/ui/views/hover_button_unittest.cc +++ b/chrome/browser/ui/views/hover_button_unittest.cc
@@ -181,12 +181,11 @@ } } -// Tests that setting the style and the subtitle elide behavior don't lead to a -// crash for a HoverButton with an empty subtitle. -TEST_F(HoverButtonTest, SetStyleAndSubtitleElideBehavior) { +// Tests that setting the subtitle elide behavior doesn't lead to a crash for a +// HoverButton with an empty subtitle. +TEST_F(HoverButtonTest, SetSubtitleElideBehavior) { HoverButton button(nullptr, CreateIcon(), base::ASCIIToUTF16("Test title"), base::string16()); - button.SetStyle(HoverButton::STYLE_PROMINENT); button.SetSubtitleElideBehavior(gfx::ELIDE_EMAIL); }
diff --git a/chrome/browser/ui/views/passwords/password_bubble_view_base.cc b/chrome/browser/ui/views/passwords/password_bubble_view_base.cc index dda4b59..4fe3d23a 100644 --- a/chrome/browser/ui/views/passwords/password_bubble_view_base.cc +++ b/chrome/browser/ui/views/passwords/password_bubble_view_base.cc
@@ -114,10 +114,10 @@ bool PasswordBubbleViewBase::ShouldShowWindowTitle() const { const PasswordBubbleControllerBase* controller = GetController(); if (controller) { - return controller->GetTitle().empty(); + return !controller->GetTitle().empty(); } DCHECK(model_); - return model_->title().empty(); + return !model_->title().empty(); } PasswordBubbleViewBase::PasswordBubbleViewBase(
diff --git a/chrome/browser/ui/views/passwords/password_pending_view.cc b/chrome/browser/ui/views/passwords/password_pending_view.cc index 061ab6d..f845a08 100644 --- a/chrome/browser/ui/views/passwords/password_pending_view.cc +++ b/chrome/browser/ui/views/passwords/password_pending_view.cc
@@ -467,7 +467,7 @@ set_margins(ChromeLayoutProvider::Get()->GetDialogInsetsForContentType( views::TEXT, views::TEXT)); if (model()->state() == password_manager::ui::CHROME_SIGN_IN_PROMO_STATE) { - sign_in_promo_ = new PasswordSignInPromoView(model()); + sign_in_promo_ = new PasswordSignInPromoView(model()->GetWebContents()); AddChildView(sign_in_promo_); } else { NOTREACHED();
diff --git a/chrome/browser/ui/views/passwords/password_sign_in_promo_view.cc b/chrome/browser/ui/views/passwords/password_sign_in_promo_view.cc index 8b3b8d170..0926452 100644 --- a/chrome/browser/ui/views/passwords/password_sign_in_promo_view.cc +++ b/chrome/browser/ui/views/passwords/password_sign_in_promo_view.cc
@@ -9,7 +9,7 @@ #include "base/metrics/user_metrics.h" #include "build/buildflag.h" #include "chrome/browser/signin/account_consistency_mode_manager.h" -#include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h" +#include "chrome/browser/ui/passwords/passwords_model_delegate.h" #include "chrome/browser/ui/views/chrome_layout_provider.h" #include "chrome/browser/ui/views/chrome_typography.h" #include "chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.h" @@ -21,11 +21,10 @@ #include "ui/views/controls/button/md_text_button.h" #include "ui/views/layout/fill_layout.h" - PasswordSignInPromoView::DiceSyncPromoDelegate::DiceSyncPromoDelegate( - ManagePasswordsBubbleModel* model) - : model_(model) { - DCHECK(model_); + SignInPromoBubbleController* controller) + : controller_(controller) { + DCHECK(controller_); } PasswordSignInPromoView::DiceSyncPromoDelegate::~DiceSyncPromoDelegate() = @@ -34,19 +33,18 @@ void PasswordSignInPromoView::DiceSyncPromoDelegate::OnEnableSync( const AccountInfo& account, bool is_default_promo_account) { - model_->OnSignInToChromeClicked(account, is_default_promo_account); + controller_->OnSignInToChromeClicked(account, is_default_promo_account); } PasswordSignInPromoView::PasswordSignInPromoView( - ManagePasswordsBubbleModel* model) - : model_(model) { - DCHECK(model_); - + content::WebContents* web_contents) + : controller_(PasswordsModelDelegateFromWebContents(web_contents)) { SetLayoutManager(std::make_unique<views::FillLayout>()); - Profile* profile = model_->GetProfile(); + Profile* profile = controller_.GetProfile(); DCHECK(AccountConsistencyModeManager::IsDiceEnabledForProfile(profile)); dice_sync_promo_delegate_ = - std::make_unique<PasswordSignInPromoView::DiceSyncPromoDelegate>(model_); + std::make_unique<PasswordSignInPromoView::DiceSyncPromoDelegate>( + &controller_); AddChildView(new DiceBubbleSyncPromoView( profile, dice_sync_promo_delegate_.get(), signin_metrics::AccessPoint::ACCESS_POINT_PASSWORD_BUBBLE,
diff --git a/chrome/browser/ui/views/passwords/password_sign_in_promo_view.h b/chrome/browser/ui/views/passwords/password_sign_in_promo_view.h index 2df648b..9ea2a343 100644 --- a/chrome/browser/ui/views/passwords/password_sign_in_promo_view.h +++ b/chrome/browser/ui/views/passwords/password_sign_in_promo_view.h
@@ -5,17 +5,21 @@ #ifndef CHROME_BROWSER_UI_VIEWS_PASSWORDS_PASSWORD_SIGN_IN_PROMO_VIEW_H_ #define CHROME_BROWSER_UI_VIEWS_PASSWORDS_PASSWORD_SIGN_IN_PROMO_VIEW_H_ +#include "chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller.h" #include "chrome/browser/ui/sync/bubble_sync_promo_delegate.h" #include "ui/views/controls/button/button.h" #include "ui/views/view.h" -class ManagePasswordsBubbleModel; +namespace content { +class WebContents; +} +class SignInPromoBubbleController; // A view that can show up after saving a password without being signed in to // offer signing users in so they can access their credentials across devices. class PasswordSignInPromoView : public views::View { public: - explicit PasswordSignInPromoView(ManagePasswordsBubbleModel* model); + explicit PasswordSignInPromoView(content::WebContents* web_contents); ~PasswordSignInPromoView() override; private: @@ -23,7 +27,7 @@ // consistency is enabled. class DiceSyncPromoDelegate : public BubbleSyncPromoDelegate { public: - explicit DiceSyncPromoDelegate(ManagePasswordsBubbleModel* model); + explicit DiceSyncPromoDelegate(SignInPromoBubbleController* controller); ~DiceSyncPromoDelegate() override; // BubbleSyncPromoDelegate: @@ -31,12 +35,12 @@ bool is_default_promo_account) override; private: - ManagePasswordsBubbleModel* model_; + SignInPromoBubbleController* controller_; DISALLOW_COPY_AND_ASSIGN(DiceSyncPromoDelegate); }; - ManagePasswordsBubbleModel* const model_; + SignInPromoBubbleController controller_; std::unique_ptr<DiceSyncPromoDelegate> dice_sync_promo_delegate_; DISALLOW_COPY_AND_ASSIGN(PasswordSignInPromoView);
diff --git a/chrome/browser/ui/views/toolbar/toolbar_ink_drop_util.cc b/chrome/browser/ui/views/toolbar/toolbar_ink_drop_util.cc index fe9b98b..f519cc7a 100644 --- a/chrome/browser/ui/views/toolbar/toolbar_ink_drop_util.cc +++ b/chrome/browser/ui/views/toolbar/toolbar_ink_drop_util.cc
@@ -69,12 +69,9 @@ SkColor GetToolbarInkDropBaseColor(const views::View* host_view) { const auto* theme_provider = host_view->GetThemeProvider(); // There may be no theme provider in unit tests. - if (theme_provider) { - return color_utils::GetColorWithMaxContrast( - theme_provider->GetColor(ThemeProperties::COLOR_TOOLBAR)); - } - - return gfx::kPlaceholderColor; + return theme_provider + ? theme_provider->GetColor(ThemeProperties::COLOR_TOOLBAR_INK_DROP) + : gfx::kPlaceholderColor; } views::InstallableInkDropConfig GetToolbarInstallableInkDropConfig(
diff --git a/chrome/browser/ui/views/webauthn/hover_list_view.cc b/chrome/browser/ui/views/webauthn/hover_list_view.cc index ff6ea9e6..cf32bc8c 100644 --- a/chrome/browser/ui/views/webauthn/hover_list_view.cc +++ b/chrome/browser/ui/views/webauthn/hover_list_view.cc
@@ -19,6 +19,7 @@ #include "ui/views/controls/button/button.h" #include "ui/views/controls/label.h" #include "ui/views/controls/separator.h" +#include "ui/views/controls/throbber.h" #include "ui/views/layout/box_layout.h" #include "ui/views/layout/fill_layout.h" #include "ui/views/vector_icons.h" @@ -67,6 +68,12 @@ base::Optional<int> vert_inset_; }; +enum class ItemType { + kButton, + kPlaceholder, + kThrobber, +}; + std::unique_ptr<HoverButton> CreateHoverButtonForListItem( int item_tag, const gfx::VectorIcon* vector_icon, @@ -74,7 +81,7 @@ base::string16 item_description, views::ButtonListener* listener, bool is_two_line_item, - bool is_placeholder_item = false) { + ItemType item_type = ItemType::kButton) { // Derive the icon color from the text color of an enabled label. auto color_reference_label = std::make_unique<views::Label>( base::string16(), CONTEXT_BODY_TEXT_SMALL, views::style::STYLE_PRIMARY); @@ -88,36 +95,57 @@ gfx::CreateVectorIcon(*vector_icon, kIconSize, icon_color)); } - std::unique_ptr<views::ImageView> chevron_image = nullptr; + std::unique_ptr<views::View> secondary_view = nullptr; + // kTwoLineVertInset is the top and bottom padding of the HoverButton if - // |is_two_line_item| is true. This ensures that the spacing between the two - // lines isn't too large because HoverButton will otherwise spread the lines - // evenly over the given vertical space. + // |is_two_line_item| is true. This ensures that the spacing between the + // two lines isn't too large because HoverButton will otherwise spread the + // lines evenly over the given vertical space. constexpr int kTwoLineVertInset = 6; - if (!is_placeholder_item) { - constexpr int kChevronSize = 8; - chevron_image = std::make_unique<views::ImageView>(); - chevron_image->SetImage(gfx::CreateVectorIcon(views::kSubmenuArrowIcon, - kChevronSize, icon_color)); + switch (item_type) { + case ItemType::kPlaceholder: + // No secondary view in this case. + break; - int chevron_vert_inset = 0; - if (is_two_line_item) { - // Items that are sized for two lines use the top and bottom insets of the - // chevron image to pad single-line items out to a uniform height of - // |kHeight|. - constexpr int kHeight = 56; - chevron_vert_inset = - (kHeight - (2 * kTwoLineVertInset) - kChevronSize) / 2; + case ItemType::kButton: { + constexpr int kChevronSize = 8; + auto chevron_image = std::make_unique<views::ImageView>(); + chevron_image->SetImage(gfx::CreateVectorIcon(views::kSubmenuArrowIcon, + kChevronSize, icon_color)); + + int vert_inset = 0; + if (is_two_line_item) { + // Items that are sized for two lines use the top and bottom insets of + // the chevron image to pad single-line items out to a uniform height of + // |kHeight|. + constexpr int kHeight = 56; + const gfx::Size size = chevron_image->GetPreferredSize(); + vert_inset = (kHeight - (2 * kTwoLineVertInset) - size.height()) / 2; + } + + chevron_image->SetBorder(views::CreateEmptyBorder( + gfx::Insets(/*top=*/vert_inset, /*left=*/12, + /*bottom=*/vert_inset, /*right=*/0))); + + secondary_view.reset(chevron_image.release()); + break; } - chevron_image->SetBorder(views::CreateEmptyBorder( - gfx::Insets(/*top=*/chevron_vert_inset, /*left=*/12, - /*bottom=*/chevron_vert_inset, /*right=*/0))); + + case ItemType::kThrobber: { + auto throbber = std::make_unique<views::Throbber>(); + throbber->Start(); + secondary_view.reset(throbber.release()); + // A border isn't set for kThrobber items because they are assumed to + // always have a description. + DCHECK(!item_description.empty()); + break; + } } auto hover_button = std::make_unique<WebauthnHoverButton>( listener, std::move(item_image), std::move(item_title), - std::move(item_description), std::move(chevron_image)); + std::move(item_description), std::move(secondary_view)); hover_button->set_tag(item_tag); if (!vector_icon) { hover_button->SetInsetForNoIcon(); @@ -136,13 +164,24 @@ kHorizontalPadding); hover_button->SetBorder(views::CreateEmptyBorder(padding)); - if (is_placeholder_item) { - hover_button->SetState(HoverButton::ButtonState::STATE_DISABLED); - const auto background_color = - hover_button->GetNativeTheme()->GetSystemColor( - ui::NativeTheme::kColorId_BubbleBackground); - hover_button->SetTitleTextStyle(views::style::STYLE_DISABLED, - background_color); + switch (item_type) { + case ItemType::kPlaceholder: { + hover_button->SetState(HoverButton::ButtonState::STATE_DISABLED); + const auto background_color = + hover_button->GetNativeTheme()->GetSystemColor( + ui::NativeTheme::kColorId_BubbleBackground); + hover_button->SetTitleTextStyle(views::style::STYLE_DISABLED, + background_color); + break; + } + + case ItemType::kButton: + // No extra styling. + break; + + case ItemType::kThrobber: + hover_button->SetState(HoverButton::ButtonState::STATE_DISABLED); + break; } return hover_button; @@ -172,7 +211,16 @@ item_container_ = item_container.get(); AddSeparatorAsChild(item_container_); - for (const auto item_tag : model_->GetItemTags()) { + for (const auto item_tag : model_->GetThrobberTags()) { + auto button = CreateHoverButtonForListItem( + item_tag, model_->GetItemIcon(item_tag), model_->GetItemText(item_tag), + model_->GetDescriptionText(item_tag), this, true, ItemType::kThrobber); + throbber_views_.push_back(button.get()); + item_container_->AddChildView(button.release()); + AddSeparatorAsChild(item_container_); + } + + for (const auto item_tag : model_->GetButtonTags()) { AppendListItemView(model_->GetItemIcon(item_tag), model_->GetItemText(item_tag), model_->GetDescriptionText(item_tag), item_tag); @@ -214,7 +262,7 @@ auto placeholder_item = CreateHoverButtonForListItem( kPlaceHolderItemTag, model_->GetPlaceholderIcon(), model_->GetPlaceholderText(), base::string16(), nullptr, - true /* is_placeholder_item */); + /*is_two_line_list=*/false, ItemType::kPlaceholder); item_container_->AddChildView(placeholder_item.get()); auto* separator = AddSeparatorAsChild(item_container_); placeholder_list_item_view_.emplace( @@ -314,10 +362,12 @@ // contain one separator and one hover button. const auto separator_height = views::Separator().GetPreferredSize().height(); int size = separator_height; - for (auto iter = tags_to_list_item_views_.begin(); - iter != tags_to_list_item_views_.end(); ++iter) { + for (const auto& iter : tags_to_list_item_views_) { size += - iter->second.item_view->GetPreferredSize().height() + separator_height; + iter.second.item_view->GetPreferredSize().height() + separator_height; + } + for (const auto* iter : throbber_views_) { + size += iter->GetPreferredSize().height() + separator_height; } int reserved_items = model_->GetPreferredItemCount() - tags_to_list_item_views_.size();
diff --git a/chrome/browser/ui/views/webauthn/hover_list_view.h b/chrome/browser/ui/views/webauthn/hover_list_view.h index 0d279dd..c51f9e2f 100644 --- a/chrome/browser/ui/views/webauthn/hover_list_view.h +++ b/chrome/browser/ui/views/webauthn/hover_list_view.h
@@ -78,6 +78,7 @@ std::unique_ptr<HoverListModel> model_; std::map<int, ListItemViews> tags_to_list_item_views_; + std::vector<HoverButton*> throbber_views_; base::Optional<ListItemViews> placeholder_list_item_view_; views::ScrollView* scroll_view_; views::View* item_container_;
diff --git a/chrome/browser/ui/webauthn/account_hover_list_model.cc b/chrome/browser/ui/webauthn/account_hover_list_model.cc index f386616e..869e26b 100644 --- a/chrome/browser/ui/webauthn/account_hover_list_model.cc +++ b/chrome/browser/ui/webauthn/account_hover_list_model.cc
@@ -31,7 +31,11 @@ return &kUserAccountAvatarIcon; } -std::vector<int> AccountHoverListModel::GetItemTags() const { +std::vector<int> AccountHoverListModel::GetThrobberTags() const { + return {}; +} + +std::vector<int> AccountHoverListModel::GetButtonTags() const { std::vector<int> tag_list(response_list_->size()); for (size_t i = 0; i < response_list_->size(); ++i) tag_list[i] = i;
diff --git a/chrome/browser/ui/webauthn/account_hover_list_model.h b/chrome/browser/ui/webauthn/account_hover_list_model.h index fe84bf57..7422440 100644 --- a/chrome/browser/ui/webauthn/account_hover_list_model.h +++ b/chrome/browser/ui/webauthn/account_hover_list_model.h
@@ -34,7 +34,8 @@ bool ShouldShowPlaceholderForEmptyList() const override; base::string16 GetPlaceholderText() const override; const gfx::VectorIcon* GetPlaceholderIcon() const override; - std::vector<int> GetItemTags() const override; + std::vector<int> GetThrobberTags() const override; + std::vector<int> GetButtonTags() const override; base::string16 GetItemText(int item_tag) const override; base::string16 GetDescriptionText(int item_tag) const override; const gfx::VectorIcon* GetItemIcon(int item_tag) const override;
diff --git a/chrome/browser/ui/webauthn/authenticator_dialog_browsertest.cc b/chrome/browser/ui/webauthn/authenticator_dialog_browsertest.cc index d25d208..6f4ac47 100644 --- a/chrome/browser/ui/webauthn/authenticator_dialog_browsertest.cc +++ b/chrome/browser/ui/webauthn/authenticator_dialog_browsertest.cc
@@ -34,9 +34,7 @@ ::device::FidoRequestHandlerBase::TransportAvailabilityInfo transport_availability; transport_availability.available_transports = { - AuthenticatorTransport::kBluetoothLowEnergy, AuthenticatorTransport::kUsbHumanInterfaceDevice, - AuthenticatorTransport::kNearFieldCommunication, AuthenticatorTransport::kInternal, AuthenticatorTransport::kCloudAssistedBluetoothLowEnergy}; model->set_cable_transport_info(/*cable_extension_provided=*/true,
diff --git a/chrome/browser/ui/webauthn/ble_device_hover_list_model.cc b/chrome/browser/ui/webauthn/ble_device_hover_list_model.cc index 3320c7c..7fadbb9 100644 --- a/chrome/browser/ui/webauthn/ble_device_hover_list_model.cc +++ b/chrome/browser/ui/webauthn/ble_device_hover_list_model.cc
@@ -84,7 +84,11 @@ return GetTransportVectorIcon(AuthenticatorTransport::kBluetoothLowEnergy); } -std::vector<int> BleDeviceHoverListModel::GetItemTags() const { +std::vector<int> BleDeviceHoverListModel::GetThrobberTags() const { + return {}; +} + +std::vector<int> BleDeviceHoverListModel::GetButtonTags() const { std::vector<int> tag_list; tag_list.reserve(authenticator_tags_.size());
diff --git a/chrome/browser/ui/webauthn/ble_device_hover_list_model.h b/chrome/browser/ui/webauthn/ble_device_hover_list_model.h index fb4c1d026..784a527 100644 --- a/chrome/browser/ui/webauthn/ble_device_hover_list_model.h +++ b/chrome/browser/ui/webauthn/ble_device_hover_list_model.h
@@ -43,7 +43,8 @@ base::string16 GetItemText(int item_tag) const override; base::string16 GetDescriptionText(int item_tag) const override; const gfx::VectorIcon* GetItemIcon(int item_tag) const override; - std::vector<int> GetItemTags() const override; + std::vector<int> GetThrobberTags() const override; + std::vector<int> GetButtonTags() const override; void OnListItemSelected(int item_tag) override; size_t GetPreferredItemCount() const override; bool StyleForTwoLines() const override;
diff --git a/chrome/browser/ui/webauthn/hover_list_model.h b/chrome/browser/ui/webauthn/hover_list_model.h index 7244e80..bef5121 100644 --- a/chrome/browser/ui/webauthn/hover_list_model.h +++ b/chrome/browser/ui/webauthn/hover_list_model.h
@@ -42,7 +42,8 @@ // added. This is distinct from using an empty icon as the latter will still // take up as much space as any other icon. virtual const gfx::VectorIcon* GetPlaceholderIcon() const = 0; - virtual std::vector<int> GetItemTags() const = 0; + virtual std::vector<int> GetThrobberTags() const = 0; + virtual std::vector<int> GetButtonTags() const = 0; virtual base::string16 GetItemText(int item_tag) const = 0; virtual base::string16 GetDescriptionText(int item_tag) const = 0; // GetItemIcon may return nullptr to indicate that no icon should be added.
diff --git a/chrome/browser/ui/webauthn/transport_hover_list_model.cc b/chrome/browser/ui/webauthn/transport_hover_list_model.cc index 873e96d..4a65d994 100644 --- a/chrome/browser/ui/webauthn/transport_hover_list_model.cc +++ b/chrome/browser/ui/webauthn/transport_hover_list_model.cc
@@ -42,7 +42,11 @@ return &gfx::kNoneIcon; } -std::vector<int> TransportHoverListModel::GetItemTags() const { +std::vector<int> TransportHoverListModel::GetThrobberTags() const { + return {}; +} + +std::vector<int> TransportHoverListModel::GetButtonTags() const { std::vector<int> tag_list(transport_list_.size()); std::transform( transport_list_.begin(), transport_list_.end(), tag_list.begin(),
diff --git a/chrome/browser/ui/webauthn/transport_hover_list_model.h b/chrome/browser/ui/webauthn/transport_hover_list_model.h index 2c1f88b..d7ab773 100644 --- a/chrome/browser/ui/webauthn/transport_hover_list_model.h +++ b/chrome/browser/ui/webauthn/transport_hover_list_model.h
@@ -33,7 +33,8 @@ bool ShouldShowPlaceholderForEmptyList() const override; base::string16 GetPlaceholderText() const override; const gfx::VectorIcon* GetPlaceholderIcon() const override; - std::vector<int> GetItemTags() const override; + std::vector<int> GetThrobberTags() const override; + std::vector<int> GetButtonTags() const override; base::string16 GetItemText(int item_tag) const override; base::string16 GetDescriptionText(int item_tag) const override; const gfx::VectorIcon* GetItemIcon(int item_tag) const override;
diff --git a/chrome/browser/ui/webui/settings/chromeos/os_settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/chromeos/os_settings_localized_strings_provider.cc index f210595b..d82c3aac 100644 --- a/chrome/browser/ui/webui/settings/chromeos/os_settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/chromeos/os_settings_localized_strings_provider.cc
@@ -20,6 +20,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.h" #include "chrome/browser/ui/webui/chromeos/bluetooth_dialog_localized_strings_provider.h" +#include "chrome/browser/ui/webui/chromeos/network_element_localized_strings_provider.h" #include "chrome/browser/ui/webui/chromeos/smb_shares/smb_shares_localized_strings_provider.h" #include "chrome/browser/ui/webui/settings/shared_settings_localized_strings_provider.h" #include "chrome/browser/ui/webui/webui_util.h" @@ -994,6 +995,12 @@ }; AddLocalizedStringsBulk(html_source, kLocalizedStrings); + chromeos::network_element::AddLocalizedStrings(html_source); + chromeos::network_element::AddOncLocalizedStrings(html_source); + chromeos::network_element::AddDetailsLocalizedStrings(html_source); + chromeos::network_element::AddConfigLocalizedStrings(html_source); + chromeos::network_element::AddErrorLocalizedStrings(html_source); + html_source->AddString("networkGoogleNameserversLearnMoreUrl", chrome::kGoogleNameserversLearnMoreURL); html_source->AddString(
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc index 5cd2a112..7c2d993 100644 --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -89,7 +89,6 @@ #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h" #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos_factory.h" #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" -#include "chrome/browser/ui/webui/chromeos/network_element_localized_strings_provider.h" #include "chrome/common/pref_names.h" #include "chrome/common/webui_url_constants.h" #include "chromeos/constants/chromeos_features.h" @@ -2484,13 +2483,6 @@ certificate_manager::AddLocalizedStrings(html_source); #endif -#if defined(OS_CHROMEOS) - chromeos::network_element::AddLocalizedStrings(html_source); - chromeos::network_element::AddOncLocalizedStrings(html_source); - chromeos::network_element::AddDetailsLocalizedStrings(html_source); - chromeos::network_element::AddConfigLocalizedStrings(html_source); - chromeos::network_element::AddErrorLocalizedStrings(html_source); -#endif policy_indicator::AddLocalizedStrings(html_source); AddSecurityKeysStrings(html_source);
diff --git a/chrome/browser/ui/webui/settings/site_settings_handler.cc b/chrome/browser/ui/webui/settings/site_settings_handler.cc index 227ce3f..9b57f64 100644 --- a/chrome/browser/ui/webui/settings/site_settings_handler.cc +++ b/chrome/browser/ui/webui/settings/site_settings_handler.cc
@@ -703,27 +703,11 @@ // Retrieve a list of embargoed settings to check separately. This ensures // that only settings included in |content_types| will be listed in all sites. - ContentSettingsForOneType embargo_settings; - map->GetSettingsForOneType(ContentSettingsType::PERMISSION_AUTOBLOCKER_DATA, - std::string(), &embargo_settings); - PermissionManager* permission_manager = PermissionManager::Get(profile); - for (const ContentSettingPatternSource& e : embargo_settings) { - for (ContentSettingsType content_type : content_types) { - if (permissions::PermissionUtil::IsPermission(content_type)) { - const GURL url(e.primary_pattern.ToString()); - // Add |url| to the set if there are any embargo settings. - permissions::PermissionResult result = - permission_manager->GetPermissionStatus(content_type, url, url); - if (result.source == - permissions::PermissionStatusSource::MULTIPLE_DISMISSALS || - result.source == - permissions::PermissionStatusSource::MULTIPLE_IGNORES) { - CreateOrAppendSiteGroupEntry(&all_sites_map_, url); - origin_permission_set_.insert(url.spec()); - break; - } - } - } + auto* autoblocker = PermissionDecisionAutoBlocker::GetForProfile(profile_); + for (auto& url : autoblocker->GetEmbargoedOrigins(content_types)) { + // Add |url| to the set if there are any embargo settings. + CreateOrAppendSiteGroupEntry(&all_sites_map_, url); + origin_permission_set_.insert(url.spec()); } // Convert |types| to a list of ContentSettingsTypes.
diff --git a/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc b/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc index c5921a2..af285566 100644 --- a/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc +++ b/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc
@@ -5,6 +5,7 @@ #include "chrome/browser/ui/webui/tab_strip/tab_strip_ui.h" #include "base/feature_list.h" +#include "chrome/browser/extensions/extension_tab_util.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/themes/theme_properties.h" #include "chrome/browser/themes/theme_service.h" @@ -34,6 +35,8 @@ #include "ui/gfx/color_utils.h" #include "ui/resources/grit/webui_resources.h" +const char kWebUITabIdDataType[] = "application/vnd.chromium.tab"; + TabStripUI::TabStripUI(content::WebUI* web_ui) : content::WebUIController(web_ui) { content::HostZoomMap::Get(web_ui->GetWebContents()->GetSiteInstance()) @@ -49,6 +52,8 @@ html_source, base::make_span(kTabStripResources, kTabStripResourcesSize), generated_path, IDR_TAB_STRIP_HTML); + html_source->AddString("tabIdDataType", kWebUITabIdDataType); + // Add a load time string for the frame color to allow the tab strip to paint // a background color that matches the frame before any content loads const ui::ThemeProvider& tp =
diff --git a/chrome/browser/ui/webui/tab_strip/tab_strip_ui_handler.cc b/chrome/browser/ui/webui/tab_strip/tab_strip_ui_handler.cc index d3555139..9bb2702 100644 --- a/chrome/browser/ui/webui/tab_strip/tab_strip_ui_handler.cc +++ b/chrome/browser/ui/webui/tab_strip/tab_strip_ui_handler.cc
@@ -342,6 +342,9 @@ "getTabs", base::Bind(&TabStripUIHandler::HandleGetTabs, base::Unretained(this))); web_ui()->RegisterMessageCallback( + "getWindowId", base::Bind(&TabStripUIHandler::HandleGetWindowId, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( "getGroupVisualData", base::Bind(&TabStripUIHandler::HandleGetGroupVisualData, base::Unretained(this))); @@ -480,6 +483,14 @@ ResolveJavascriptCallback(callback_id, tabs); } +void TabStripUIHandler::HandleGetWindowId(const base::ListValue* args) { + AllowJavascript(); + const base::Value& callback_id = args->GetList()[0]; + ResolveJavascriptCallback( + callback_id, + base::Value(extensions::ExtensionTabUtil::GetWindowId(browser_))); +} + void TabStripUIHandler::HandleGetGroupVisualData(const base::ListValue* args) { AllowJavascript(); const base::Value& callback_id = args->GetList()[0];
diff --git a/chrome/browser/ui/webui/tab_strip/tab_strip_ui_handler.h b/chrome/browser/ui/webui/tab_strip/tab_strip_ui_handler.h index 86eb3cc3..af432dc 100644 --- a/chrome/browser/ui/webui/tab_strip/tab_strip_ui_handler.h +++ b/chrome/browser/ui/webui/tab_strip/tab_strip_ui_handler.h
@@ -58,6 +58,7 @@ base::DictionaryValue GetTabData(content::WebContents* contents, int index); base::DictionaryValue GetTabGroupData(TabGroup* group); void HandleGetTabs(const base::ListValue* args); + void HandleGetWindowId(const base::ListValue* args); void HandleGetGroupVisualData(const base::ListValue* args); void HandleGetThemeColors(const base::ListValue* args); void HandleCloseContainer(const base::ListValue* args);
diff --git a/chrome/browser/vr/BUILD.gn b/chrome/browser/vr/BUILD.gn index 81f5ecc5..8408d4f 100644 --- a/chrome/browser/vr/BUILD.gn +++ b/chrome/browser/vr/BUILD.gn
@@ -518,9 +518,7 @@ ] } if (is_win) { - configs += [ - "//build/config/win:delayloads", - ] + configs += [ "//build/config/win:delayloads" ] } }
diff --git a/chrome/browser/win/conflicts/module_database.cc b/chrome/browser/win/conflicts/module_database.cc index 3147247a..2c344e38 100644 --- a/chrome/browser/win/conflicts/module_database.cc +++ b/chrome/browser/win/conflicts/module_database.cc
@@ -11,7 +11,7 @@ #include "base/files/file_path.h" #include "base/location.h" #include "base/sequenced_task_runner.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include "base/task/post_task.h" #include "chrome/browser/win/conflicts/module_database_observer.h" #include "content/public/browser/browser_task_traits.h" @@ -109,9 +109,9 @@ // static scoped_refptr<base::SequencedTaskRunner> ModuleDatabase::GetTaskRunner() { - static base::LazySequencedTaskRunner g_module_database_task_runner = - LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER( - base::TaskTraits(base::ThreadPool(), base::TaskPriority::BEST_EFFORT, + static base::LazyThreadPoolSequencedTaskRunner g_module_database_task_runner = + LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER( + base::TaskTraits(base::TaskPriority::BEST_EFFORT, base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN)); return g_module_database_task_runner.Get(); }
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_fr-CA.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_fr-CA.xtb index 278fea1..da7cfb3 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_fr-CA.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_fr-CA.xtb
@@ -38,5 +38,6 @@ <translation id="8973975512230260387">Votre session a expiré. Connectez-vous à l'aide de votre compte professionnel Google.</translation> <translation id="9055998212250844221">Compte d'utilisateur créé par le fournisseur d'authentifiants Google pour Windows</translation> <translation id="9135619837062629367">La connexion avec ce compte n'est pas autorisée. Essayez de vous connecter avec un autre compte.</translation> +<translation id="938261200229736272">Le mot de passe du compte est trop court. Veuillez communiquer avec votre administrateur.</translation> <translation id="998002716857524853">Connectez-vous à l'aide de votre compte professionnel G Suite.</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_gu.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_gu.xtb index ccc8e076..07dda38 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_gu.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_gu.xtb
@@ -38,5 +38,6 @@ <translation id="8973975512230260387">તમારું સત્ર સમાપ્ત થઈ ગયું છે. તમારા ઑફિસના Google એકાઉન્ટનો ઉપયોગ કરીને સાઇન ઇન કરો.</translation> <translation id="9055998212250844221">Windows માટે Google એકાઉન્ટની પાત્રતા ચકાસનાર દ્વારા બનાવવામાં આવેલું વપરાશકર્તા એકાઉન્ટ</translation> <translation id="9135619837062629367">આ એકાઉન્ટ વડે સાઇન ઇન કરવાની મંજૂરી નથી. કોઈ અલગ એકાઉન્ટ અજમાવી જુઓ.</translation> +<translation id="938261200229736272">એકાઉન્ટનો પાસવર્ડ ખૂબ ટૂંકો છે. કૃપા કરીને તમારા વ્યવસ્થાપકનો સંપર્ક કરો.</translation> <translation id="998002716857524853">તમારા ઑફિસના GSuite એકાઉન્ટનો ઉપયોગ કરીને સાઇન ઇન કરો.</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_ml.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_ml.xtb index 35e14fa..d8ee8fd 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_ml.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_ml.xtb
@@ -38,5 +38,6 @@ <translation id="8973975512230260387">നിങ്ങളുടെ സെഷൻ കാലഹരണപ്പെട്ടു. നിങ്ങളുടെ ഔദ്യോഗിക Google അക്കൗണ്ട് ഉപയോഗിച്ച് സൈൻ ഇൻ ചെയ്യുക.</translation> <translation id="9055998212250844221">Windows-നായി Google ക്രെഡൻഷ്യൽ ദാതാവ് സൃഷ്ടിച്ച ഉപയോക്തൃ അക്കൗണ്ട്</translation> <translation id="9135619837062629367">ഈ അക്കൗണ്ട് ഉപയോഗിച്ച് സൈൻ ഇൻ ചെയ്യൽ അനുവദനീയമല്ല. മറ്റൊരു അക്കൗണ്ട് ഉപയോഗിച്ച് ശ്രമിക്കുക.</translation> +<translation id="938261200229736272">അക്കൗണ്ടിന്റെ പാസ്വേഡ് വളരെ ചെറുതാണ്. നിങ്ങളുടെ അഡ്മിനെ ബന്ധപ്പെടുക.</translation> <translation id="998002716857524853">നിങ്ങളുടെ ഔദ്യോഗിക GSuite അക്കൗണ്ട് ഉപയോഗിച്ച് സൈൻ ഇൻ ചെയ്യുക.</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_mr.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_mr.xtb index 55185f9..7ba549e 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_mr.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_mr.xtb
@@ -38,5 +38,6 @@ <translation id="8973975512230260387">तुमचे सेशन एक्स्पायर झाले आहे. तुमचे Google ऑफिस खाते वापरून साइन इन करा.</translation> <translation id="9055998212250844221">Windows साठी Google क्रेडेंशियल पुरवठादाराने तयार केलेले वापरकर्ता खाते</translation> <translation id="9135619837062629367">या खात्याने साइन इन करण्याची अनुमती नाही. वेगळे खाते वापरून पहा.</translation> +<translation id="938261200229736272">खात्याचा पासवर्ड खूपच लहान आहे. कृपया तुमच्या अॅडमिनिस्ट्रेटरशी संपर्क साधा.</translation> <translation id="998002716857524853">तुमचे GSuite ऑफिस खाते वापरून साइन इन करा.</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_ne.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_ne.xtb index 046f9a90..f39be0b 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_ne.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_ne.xtb
@@ -38,5 +38,6 @@ <translation id="8973975512230260387">तपाईंको सत्रको समय समाप्त भएको छ। आफ्नो Google कार्य खाता प्रयोग गरी साइन इन गर्नुहोस्।</translation> <translation id="9055998212250844221">Google प्रमाण प्रदायकले Windows का लागि सिर्जना गरेको प्रयोगकर्ताको खाता</translation> <translation id="9135619837062629367">यो खातामार्फत साइन इन गर्ने अनुमति छैन। कुनै अर्को खाता प्रयोग गरी हेर्नुहोस्।</translation> +<translation id="938261200229736272">खाताको पासवर्ड अत्यन्त छोटो छ। कृपया आफ्ना प्रशासकसँग सम्पर्क गर्नुहोस्।</translation> <translation id="998002716857524853">आफ्नो GSuite कार्य खाता प्रयोग गरी साइन इन गर्नुहोस्।</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_or.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_or.xtb index 5e35a73c..f9b36a8 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_or.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_or.xtb
@@ -38,5 +38,6 @@ <translation id="8973975512230260387">ଆପଣଙ୍କର ସମୟ ଅବଧି ସମାପ୍ତ ହୋଇଯାଇଛି। ଆପଣଙ୍କର କାର୍ଯ୍ୟ ଆକାଉଣ୍ଟର ବ୍ୟବହାର କରି ସାଇନ୍ ଇନ୍ କରନ୍ତୁ।</translation> <translation id="9055998212250844221">Windows ପାଇଁ Google କ୍ରେଡେନ୍ସିଆଲ୍ ପ୍ରଦାନକାରୀଙ୍କ ଦ୍ୱାରା ତିଆରି କରାଯାଇଥିବା ଉପଯୋଗକର୍ତ୍ତା ଆକାଉଣ୍ଟ</translation> <translation id="9135619837062629367">ଏହି ଆକାଉଣ୍ଟରେ ସାଇନ୍ ଇନ୍ କରିବାକୁ ଅନୁମତି ନାହିଁ। ଏକ ଅଲଗା ଆକାଉଣ୍ଟ ବ୍ୟବହାର କରି କରନ୍ତୁ।</translation> +<translation id="938261200229736272">ଆକାଉଣ୍ଟର ପାସୱାର୍ଡ ଅତି ଛୋଟ ଅଟେ। ଦୟାକରି ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।</translation> <translation id="998002716857524853">ଆପଣଙ୍କର GSuite କାର୍ଯ୍ୟ ଆକାଉଣ୍ଟ ବ୍ୟବହାର କରି ସାଇନ୍ ଇନ୍ କରନ୍ତୁ।</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_te.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_te.xtb index 7c1f2ef..25f2c2d 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_te.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_te.xtb
@@ -38,5 +38,6 @@ <translation id="8973975512230260387">మీ సెషన్ గడువు ముగిసింది. మీ Google కార్యాలయ ఖాతాను ఉపయోగించి సైన్ ఇన్ చేయండి.</translation> <translation id="9055998212250844221">Windows కోసం Google ఆధారాల ప్రదాత సృష్టించిన వినియోగదారు ఖాతా</translation> <translation id="9135619837062629367">ఈ ఖాతాతో సైన్ ఇన్ చేయడానికి అనుమతి లేదు. వేరే ఖాతాతో ప్రయత్నించండి.</translation> +<translation id="938261200229736272">ఖాతా పాస్వర్డ్ చాలా చిన్నగా ఉంది. దయచేసి మీ నిర్వాహకుడిని సంప్రదించండి.</translation> <translation id="998002716857524853">మీ GSuite కార్యాలయ ఖాతాను ఉపయోగించి సైన్ ఇన్ చేయండి.</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_th.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_th.xtb index ba7a138e..2b7725bd 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_th.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_th.xtb
@@ -38,5 +38,6 @@ <translation id="8973975512230260387">เซสชันของคุณหมดเวลาแล้ว ลงชื่อเข้าใช้ด้วยบัญชีงานของ Google</translation> <translation id="9055998212250844221">บัญชีผู้ใช้ที่สร้างโดยโปรแกรมการเข้าสู่ระบบโดยใช้บัญชี Google สำหรับ Windows</translation> <translation id="9135619837062629367">ไม่อนุญาตให้ลงชื่อเข้าใช้ด้วยบัญชีนี้ ลองใช้บัญชีอื่น</translation> +<translation id="938261200229736272">รหัสผ่านสำหรับบัญชีสั้นเกินไป โปรดติดต่อผู้ดูแลระบบ</translation> <translation id="998002716857524853">ลงชื่อเข้าใช้ด้วยบัญชีงานของ G Suite</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_ur.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_ur.xtb index d8b101f..bc67c28 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_ur.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_ur.xtb
@@ -38,5 +38,6 @@ <translation id="8973975512230260387">آپ کے سیشن کی میعاد ختم ہو چکی ہے۔ اپنا Google دفتری اکاؤنٹ استعمال کر کے سائن ان کریں۔</translation> <translation id="9055998212250844221">Google کا اسناد فراہم کنندہ برائے Windows کے ذریعے تخلیق کردہ صارف اکاؤنٹ</translation> <translation id="9135619837062629367">اس اکاؤنٹ سے سائن ان کی اجازت نہیں ہے۔ کوئی دوسرا اکاؤنٹ آزمائیں۔</translation> +<translation id="938261200229736272">اکاؤنٹ کا پاس ورڈ کافی چھوٹا ہے۔ براہ کرم اپنے منتظم سے رابطہ کریں۔</translation> <translation id="998002716857524853">اپنا GSuite دفتری اکاؤنٹ استعمال کر کے سائن ان کریں۔</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_zh-CN.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_zh-CN.xtb index 15a6bd19..07eb1e7 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_zh-CN.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_zh-CN.xtb
@@ -38,5 +38,6 @@ <translation id="8973975512230260387">您的会话已过期。请使用您的 Google 工作帐号登录。</translation> <translation id="9055998212250844221">由 Windows 版 Google 凭据提供程序创建的用户帐号</translation> <translation id="9135619837062629367">不允许使用此帐号登录。请尝试改用其他帐号。</translation> +<translation id="938261200229736272">帐号密码太短。请与您的管理员联系。</translation> <translation id="998002716857524853">使用您的 G Suite 工作帐号登录。</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_zh-HK.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_zh-HK.xtb index 06d38e9..e042a78a 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_zh-HK.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_zh-HK.xtb
@@ -38,6 +38,6 @@ <translation id="8973975512230260387">您的工作階段已過期。請使用 Google 公司帳戶登入。</translation> <translation id="9055998212250844221">由「Google 憑證提供者」為 Windows 建立的使用者帳戶</translation> <translation id="9135619837062629367">您無法以此帳戶登入,請改用其他帳戶。</translation> -<translation id="938261200229736272">帳戶密碼太短。請與你的系統管理員聯絡。</translation> +<translation id="938261200229736272">帳戶密碼太短。請聯絡您的管理員。</translation> <translation id="998002716857524853">請使用 GSuite 公司帳戶登入。</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/installer/util/google_update_settings.cc b/chrome/installer/util/google_update_settings.cc index 8e17db4..81969fb 100644 --- a/chrome/installer/util/google_update_settings.cc +++ b/chrome/installer/util/google_update_settings.cc
@@ -15,7 +15,7 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include "base/threading/thread_restrictions.h" #include "base/time/time.h" #include "base/win/registry.h" @@ -51,10 +51,9 @@ namespace { -base::LazySequencedTaskRunner g_collect_stats_consent_task_runner = - LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER( - base::TaskTraits(base::ThreadPool(), - base::TaskPriority::USER_VISIBLE, +base::LazyThreadPoolSequencedTaskRunner g_collect_stats_consent_task_runner = + LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER( + base::TaskTraits(base::TaskPriority::USER_VISIBLE, base::TaskShutdownBehavior::BLOCK_SHUTDOWN)); // Reads the value |name| from the app's ClientState registry key in |root| into @@ -217,8 +216,8 @@ base::SequencedTaskRunner* GoogleUpdateSettings::CollectStatsConsentTaskRunner() { - // TODO(fdoray): Use LazySequencedTaskRunner::GetRaw() here instead of - // .Get().get() when it's added to the API, http://crbug.com/730170. + // TODO(fdoray): Use LazyThreadPoolSequencedTaskRunner::GetRaw() here instead + // of .Get().get() when it's added to the API, http://crbug.com/730170. return g_collect_stats_consent_task_runner.Get().get(); }
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 840c474a..f15c7fda 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -2850,6 +2850,9 @@ # For tests in tools/perf/process_perf_results_unittest.py "//build/android/pylib/", "//tools/swarming_client/", + + # For representative perf testing run_rendering_benchmark_with_gated_performance.py + "//testing/scripts/run_rendering_benchmark_with_gated_performance.py", ] } @@ -3361,6 +3364,12 @@ "../browser/sharing/fake_device_info.h", "../browser/sharing/fake_sharing_handler_registry.cc", "../browser/sharing/fake_sharing_handler_registry.h", + "../browser/sharing/mock_sharing_device_source.cc", + "../browser/sharing/mock_sharing_device_source.h", + "../browser/sharing/mock_sharing_message_handler.cc", + "../browser/sharing/mock_sharing_message_handler.h", + "../browser/sharing/mock_sharing_message_sender.cc", + "../browser/sharing/mock_sharing_message_sender.h", "../browser/sharing/mock_sharing_service.cc", "../browser/sharing/mock_sharing_service.h", "../browser/sharing/sharing_device_registration_unittest.cc", @@ -4047,6 +4056,7 @@ "../browser/ui/passwords/bubble_controllers/auto_sign_in_bubble_controller_unittest.cc", "../browser/ui/passwords/bubble_controllers/generation_confirmation_bubble_controller_unittest.cc", "../browser/ui/passwords/bubble_controllers/items_bubble_controller_unittest.cc", + "../browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller_unittest.cc", "../browser/ui/passwords/credential_leak_dialog_controller_impl_unittest.cc", "../browser/ui/passwords/credential_manager_dialog_controller_impl_unittest.cc", "../browser/ui/passwords/manage_passwords_bubble_model_unittest.cc",
diff --git a/chrome/test/data/webui/cr_elements/cr_searchable_drop_down_tests.js b/chrome/test/data/webui/cr_elements/cr_searchable_drop_down_tests.js index 40755c7d..17f0429 100644 --- a/chrome/test/data/webui/cr_elements/cr_searchable_drop_down_tests.js +++ b/chrome/test/data/webui/cr_elements/cr_searchable_drop_down_tests.js
@@ -108,17 +108,20 @@ search('c'); assertEquals(1, getList().length); assertEquals('cat', getList()[0].textContent.trim()); + assertTrue(dropDown.invalid); search('at'); assertEquals(3, getList().length); assertEquals('cat', getList()[0].textContent.trim()); assertEquals('hat', getList()[1].textContent.trim()); assertEquals('rat', getList()[2].textContent.trim()); + assertTrue(dropDown.invalid); search('ra'); assertEquals(2, getList().length); assertEquals('rat', getList()[0].textContent.trim()); assertEquals('rake', getList()[1].textContent.trim()); + assertTrue(dropDown.invalid); }); test('value is set on click', function() { @@ -133,6 +136,7 @@ // Make sure final value does not change while searching. search('ta'); assertEquals('dog', dropDown.value); + assertTrue(dropDown.invalid); }); // If the update-value-on-input flag is passed, final value should be whatever @@ -150,6 +154,7 @@ // Make sure final value does change while searching. search('ta'); assertEquals('ta', dropDown.value); + assertFalse(dropDown.invalid); }); test('click closes dropdown', function() { @@ -353,11 +358,14 @@ getList()[0].click(); assertEquals('dog', searchInput.value); + assertFalse(dropDown.invalid); // Make sure the search box value changes back to dog search('ta'); + assertTrue(dropDown.invalid); blur(); assertEquals('dog', searchInput.value); + assertFalse(dropDown.invalid); }); // When a user types in the dropdown but does not choose a valid option, the @@ -369,10 +377,29 @@ getList()[0].click(); assertEquals('dog', searchInput.value); + assertFalse(dropDown.invalid); // Make sure the search box value keeps the same text search('ta'); + assertFalse(dropDown.invalid); blur(); assertEquals('ta', searchInput.value); + assertFalse(dropDown.invalid); + }); + + // In certain cases when a user clicks their desired option from the dropdown, + // the on-blur event is fired before the on-click event. This test is to + // guarantee expected behavior given a proceeding blur event. + test('blur event when option is clicked', function() { + setItems(['cat', 'hat', 'rat', 'rake']); + + search('rat'); + assertEquals(1, getList().length); + assertEquals('rat', getList()[0].textContent.trim()); + + blur(); + getList()[0].click(); + + assertEquals('rat', dropDown.value); }); });
diff --git a/chrome/test/data/webui/tab_strip/tab_list_test.js b/chrome/test/data/webui/tab_strip/tab_list_test.js index 51174ad..cbed356 100644 --- a/chrome/test/data/webui/tab_strip/tab_list_test.js +++ b/chrome/test/data/webui/tab_strip/tab_list_test.js
@@ -4,6 +4,7 @@ import {webUIListenerCallback} from 'chrome://resources/js/cr.m.js'; import {FocusOutlineManager} from 'chrome://resources/js/cr/ui/focus_outline_manager.m.js'; +import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; import {setScrollAnimationEnabledForTesting} from 'chrome://tab-strip/tab_list.js'; import {TabStripEmbedderProxy} from 'chrome://tab-strip/tab_strip_embedder_proxy.js'; import {TabsApiProxy} from 'chrome://tab-strip/tabs_api_proxy.js'; @@ -81,6 +82,11 @@ title: 'Tab 3', }, ]; + const currentWindowId = 1000; + + const strings = { + tabIdDataType: 'application/tab-id', + }; function pinTabAt(tab, index) { const changeInfo = {index: index, pinned: true}; @@ -107,6 +113,7 @@ } setup(() => { + loadTimeData.overrideValues(strings); document.body.innerHTML = ''; document.body.style.margin = 0; @@ -116,6 +123,7 @@ callbackRouter = testTabsApiProxy.callbackRouter; testTabStripEmbedderProxy = new TestTabStripEmbedderProxy(); + testTabStripEmbedderProxy.setWindowId(currentWindowId); testTabStripEmbedderProxy.setColors({ '--background-color': 'white', '--foreground-color': 'black', @@ -132,7 +140,10 @@ tabList = document.createElement('tabstrip-tab-list'); document.body.appendChild(tabList); - return testTabsApiProxy.whenCalled('getTabs'); + return Promise.all([ + testTabsApiProxy.whenCalled('getTabs'), + testTabStripEmbedderProxy.whenCalled('getWindowId'), + ]); }); teardown(() => { @@ -549,8 +560,10 @@ }); dragOverTab.dispatchEvent(dragOverEvent); assertEquals(dragOverEvent.dataTransfer.dropEffect, 'move'); - const [tabId, newIndex] = await testTabsApiProxy.whenCalled('moveTab'); + const [tabId, windowId, newIndex] = + await testTabsApiProxy.whenCalled('moveTab'); assertEquals(tabId, tabs[draggedIndex].id); + assertEquals(currentWindowId, windowId); assertEquals(newIndex, dragOverIndex); }); @@ -682,6 +695,26 @@ assertEquals(1, index); }); + test('DropTabIntoList', async () => { + const droppedTabId = 9000; + const mockDataTransfer = new MockDataTransfer(); + mockDataTransfer.setData(strings.tabIdDataType, droppedTabId); + const dropEvent = new DragEvent('drop', { + bubbles: true, + composed: true, + clientX: 100, + clientY: 150, + dataTransfer: mockDataTransfer, + }); + tabList.dispatchEvent(dropEvent); + + const [tabId, windowId, index] = + await testTabsApiProxy.whenCalled('moveTab'); + assertEquals(droppedTabId, tabId); + assertEquals(currentWindowId, windowId); + assertEquals(-1, index); + }); + test('tracks and untracks thumbnails based on viewport', async () => { // Wait for slideIn animations to complete updating widths and reset // resolvers to track new calls.
diff --git a/chrome/test/data/webui/tab_strip/test_tab_strip_embedder_proxy.js b/chrome/test/data/webui/tab_strip/test_tab_strip_embedder_proxy.js index a81d626b..0ab1010 100644 --- a/chrome/test/data/webui/tab_strip/test_tab_strip_embedder_proxy.js +++ b/chrome/test/data/webui/tab_strip/test_tab_strip_embedder_proxy.js
@@ -10,6 +10,7 @@ 'closeContainer', 'getColors', 'getLayout', + 'getWindowId', 'isVisible', 'observeThemeChanges', 'showBackgroundContextMenu', @@ -22,6 +23,7 @@ this.colors_ = {}; this.layout_ = {}; this.visible_ = false; + this.windowId_; } getColors() { @@ -34,6 +36,11 @@ return Promise.resolve(this.layout_); } + getWindowId() { + this.methodCalled('getWindowId'); + return Promise.resolve(this.windowId_); + } + isVisible() { this.methodCalled('isVisible'); return this.visible_; @@ -60,6 +67,10 @@ return Promise.resolve(); } + setWindowId(windowId) { + this.windowId_ = windowId; + } + showBackgroundContextMenu(locationX, locationY) { this.methodCalled('showBackgroundContextMenu', [locationX, locationY]); }
diff --git a/chrome/test/data/webui/tab_strip/test_tabs_api_proxy.js b/chrome/test/data/webui/tab_strip/test_tabs_api_proxy.js index e2c38f64..19ce697 100644 --- a/chrome/test/data/webui/tab_strip/test_tabs_api_proxy.js +++ b/chrome/test/data/webui/tab_strip/test_tabs_api_proxy.js
@@ -55,8 +55,8 @@ this.methodCalled('moveGroup', [groupId, newIndex]); } - moveTab(tabId, newIndex) { - this.methodCalled('moveTab', [tabId, newIndex]); + moveTab(tabId, windowId, newIndex) { + this.methodCalled('moveTab', [tabId, windowId, newIndex]); return Promise.resolve(); }
diff --git a/chromecast/browser/webview/webview_controller.cc b/chromecast/browser/webview/webview_controller.cc index 25cd257..4bae734 100644 --- a/chromecast/browser/webview/webview_controller.cc +++ b/chromecast/browser/webview/webview_controller.cc
@@ -83,7 +83,8 @@ if (webview_user_data && webview_user_data->controller()->has_navigation_delegate_) { return std::make_unique<WebviewNavigationThrottle>( - handle, webview_user_data->controller()); + handle, + webview_user_data->controller()->weak_ptr_factory_.GetWeakPtr()); } return nullptr; } @@ -159,6 +160,12 @@ client_->EnqueueSend(std::move(response)); } +void WebviewController::OnNavigationThrottleDestroyed( + WebviewNavigationThrottle* throttle) { + if (current_navigation_throttle_ == throttle) + current_navigation_throttle_ = nullptr; +} + void WebviewController::ClosePage() { cast_web_contents_->ClosePage(); }
diff --git a/chromecast/browser/webview/webview_controller.h b/chromecast/browser/webview/webview_controller.h index 85384a31..2d73af1 100644 --- a/chromecast/browser/webview/webview_controller.h +++ b/chromecast/browser/webview/webview_controller.h
@@ -57,6 +57,7 @@ // navigation handle. void SendNavigationEvent(WebviewNavigationThrottle* throttle, content::NavigationHandle* navigation_handle); + void OnNavigationThrottleDestroyed(WebviewNavigationThrottle* throttle); protected: content::WebContents* GetWebContents() override;
diff --git a/chromecast/browser/webview/webview_navigation_throttle.cc b/chromecast/browser/webview/webview_navigation_throttle.cc index 254159a..6d7aa9f 100644 --- a/chromecast/browser/webview/webview_navigation_throttle.cc +++ b/chromecast/browser/webview/webview_navigation_throttle.cc
@@ -13,11 +13,13 @@ WebviewNavigationThrottle::WebviewNavigationThrottle( content::NavigationHandle* handle, - WebviewController* controller) - : NavigationThrottle(handle), - controller_(controller) {} + base::WeakPtr<WebviewController> controller) + : NavigationThrottle(handle), controller_(std::move(controller)) {} -WebviewNavigationThrottle::~WebviewNavigationThrottle() = default; +WebviewNavigationThrottle::~WebviewNavigationThrottle() { + if (controller_) + controller_->OnNavigationThrottleDestroyed(this); +} content::NavigationThrottle::ThrottleCheckResult WebviewNavigationThrottle::WillStartRequest() { @@ -29,10 +31,10 @@ void WebviewNavigationThrottle::ProcessNavigationDecision( webview::NavigationDecision decision) { if (decision != webview::PREVENT) { - this->Resume(); + Resume(); return; } - this->CancelDeferredNavigation(content::NavigationThrottle::CANCEL); + CancelDeferredNavigation(content::NavigationThrottle::CANCEL); } const char* WebviewNavigationThrottle::GetNameForLogging() {
diff --git a/chromecast/browser/webview/webview_navigation_throttle.h b/chromecast/browser/webview/webview_navigation_throttle.h index 50cf02b..713ee4d 100644 --- a/chromecast/browser/webview/webview_navigation_throttle.h +++ b/chromecast/browser/webview/webview_navigation_throttle.h
@@ -6,6 +6,7 @@ #define CHROMECAST_BROWSER_WEBVIEW_WEBVIEW_NAVIGATION_THROTTLE_H_ #include "base/macros.h" +#include "base/memory/weak_ptr.h" #include "base/sequenced_task_runner.h" #include "chromecast/browser/webview/proto/webview.grpc.pb.h" #include "content/public/browser/navigation_throttle.h" @@ -20,7 +21,7 @@ class WebviewNavigationThrottle : public content::NavigationThrottle { public: WebviewNavigationThrottle(content::NavigationHandle* handle, - WebviewController* controller); + base::WeakPtr<WebviewController> controller); ~WebviewNavigationThrottle() override; @@ -34,7 +35,7 @@ private: scoped_refptr<base::SequencedTaskRunner> response_task_runner_; - WebviewController* controller_; + base::WeakPtr<WebviewController> controller_; DISALLOW_COPY_AND_ASSIGN(WebviewNavigationThrottle); };
diff --git a/chromecast/chromecast.gni b/chromecast/chromecast.gni index 1cf5f4d..429cce78 100644 --- a/chromecast/chromecast.gni +++ b/chromecast/chromecast.gni
@@ -160,7 +160,7 @@ # If Cast will also the android files update this and the Cast grd files. if (is_android) { # Subtract out additional Android locales - cast_locales -= android_only_chrome_locales - [ "zh-HK" ] + cast_locales -= android_only_chrome_locales } declare_args() {
diff --git a/chromecast/renderer/cast_content_renderer_client.cc b/chromecast/renderer/cast_content_renderer_client.cc index 7c3b695..28d7dd2 100644 --- a/chromecast/renderer/cast_content_renderer_client.cc +++ b/chromecast/renderer/cast_content_renderer_client.cc
@@ -65,6 +65,14 @@ namespace chromecast { namespace shell { +namespace { +bool IsSupportedBitstreamAudioCodecHelper(::media::AudioCodec codec, int mask) { + return (codec == ::media::kCodecAC3 && (kBitstreamAudioCodecAc3 & mask)) || + (codec == ::media::kCodecEAC3 && (kBitstreamAudioCodecEac3 & mask)) || + (codec == ::media::kCodecMpegHAudio && + (kBitstreamAudioCodecMpegHAudio & mask)); +} +} // namespace #if defined(OS_ANDROID) // Audio renderer algorithm maximum capacity. @@ -246,10 +254,10 @@ bool CastContentRendererClient::IsSupportedAudioType( const ::media::AudioType& type) { +#if defined(OS_ANDROID) if (type.spatial_rendering) return false; -#if defined(OS_ANDROID) // No ATV device we know of has (E)AC3 decoder, so it relies on the audio sink // device. if (type.codec == ::media::kCodecEAC3) { @@ -272,7 +280,7 @@ // If the HDMI sink supports bitstreaming the codec, then the vendor backend // does not need to support it. - if (IsSupportedBitstreamAudioCodec(type.codec)) + if (CheckSupportedBitstreamAudioCodec(type.codec, type.spatial_rendering)) return true; media::AudioCodec codec = media::ToCastAudioCodec(type.codec); @@ -304,15 +312,21 @@ bool CastContentRendererClient::IsSupportedBitstreamAudioCodec( ::media::AudioCodec codec) { - return (codec == ::media::kCodecAC3 && - (kBitstreamAudioCodecAc3 & - supported_bitstream_audio_codecs_info_.codecs)) || - (codec == ::media::kCodecEAC3 && - (kBitstreamAudioCodecEac3 & - supported_bitstream_audio_codecs_info_.codecs)) || - (codec == ::media::kCodecMpegHAudio && - (kBitstreamAudioCodecMpegHAudio & - supported_bitstream_audio_codecs_info_.codecs)); + return IsSupportedBitstreamAudioCodecHelper( + codec, supported_bitstream_audio_codecs_info_.codecs); +} + +bool CastContentRendererClient::CheckSupportedBitstreamAudioCodec( + ::media::AudioCodec codec, + bool check_spatial_rendering) { + if (!IsSupportedBitstreamAudioCodec(codec)) + return false; + + if (!check_spatial_rendering) + return true; + + return IsSupportedBitstreamAudioCodecHelper( + codec, supported_bitstream_audio_codecs_info_.spatial_rendering); } std::unique_ptr<blink::WebPrescientNetworking>
diff --git a/chromecast/renderer/cast_content_renderer_client.h b/chromecast/renderer/cast_content_renderer_client.h index 3a9dd324b..65a142e 100644 --- a/chromecast/renderer/cast_content_renderer_client.h +++ b/chromecast/renderer/cast_content_renderer_client.h
@@ -90,6 +90,9 @@ void OnSupportedBitstreamAudioCodecsChanged( const BitstreamAudioCodecsInfo& info) override; + bool CheckSupportedBitstreamAudioCodec(::media::AudioCodec codec, + bool check_spatial_rendering); + std::unique_ptr<media::MediaCapsObserverImpl> media_caps_observer_; std::unique_ptr<media::SupportedCodecProfileLevelsMemo> supported_profiles_; mojo::Receiver<mojom::ApplicationMediaCapabilitiesObserver>
diff --git a/chromeos/components/quick_answers/quick_answers_model.h b/chromeos/components/quick_answers/quick_answers_model.h index d4291a4..1f9c5b7 100644 --- a/chromeos/components/quick_answers/quick_answers_model.h +++ b/chromeos/components/quick_answers/quick_answers_model.h
@@ -27,6 +27,7 @@ // numeric values should never be reused. // Note: Enums labels are at |QuickAnswersResultType|. enum class ResultType { + kNoResult = 0, kDefinitionResult = 5493, kTranslationResult = 6613, kUnitConversionResult = 13668,
diff --git a/chromeos/components/quick_answers/search_result_parsers/result_parser.cc b/chromeos/components/quick_answers/search_result_parsers/result_parser.cc index a25ac9e..08738ac9 100644 --- a/chromeos/components/quick_answers/search_result_parsers/result_parser.cc +++ b/chromeos/components/quick_answers/search_result_parsers/result_parser.cc
@@ -45,6 +45,10 @@ case ResultType::kUnitConversionResult: return std::make_unique<UnitConversionResultParser>(); // TODO(llin): Add other result parsers. + + case ResultType::kNoResult: + NOTREACHED(); + break; } return nullptr;
diff --git a/chromeos/components/quick_answers/utils/quick_answers_metrics.cc b/chromeos/components/quick_answers/utils/quick_answers_metrics.cc index 94edfc4..8c7ce3f 100644 --- a/chromeos/components/quick_answers/utils/quick_answers_metrics.cc +++ b/chromeos/components/quick_answers/utils/quick_answers_metrics.cc
@@ -20,6 +20,8 @@ std::string ResultTypeToString(ResultType result_type) { switch (result_type) { + case ResultType::kNoResult: + return ".NoResult"; case ResultType::kDefinitionResult: return ".Definition"; case ResultType::kTranslationResult:
diff --git a/chromeos/process_proxy/process_proxy_registry.cc b/chromeos/process_proxy/process_proxy_registry.cc index c969d75d..246ec68 100644 --- a/chromeos/process_proxy/process_proxy_registry.cc +++ b/chromeos/process_proxy/process_proxy_registry.cc
@@ -8,7 +8,7 @@ #include "base/command_line.h" #include "base/message_loop/message_pump_type.h" #include "base/sequenced_task_runner.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" namespace chromeos { @@ -74,10 +74,9 @@ // static scoped_refptr<base::SequencedTaskRunner> ProcessProxyRegistry::GetTaskRunner() { - static base::LazySequencedTaskRunner task_runner = - LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER( - base::TaskTraits(base::ThreadPool(), base::MayBlock(), - base::TaskPriority::BEST_EFFORT)); + static base::LazyThreadPoolSequencedTaskRunner task_runner = + LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER( + base::TaskTraits(base::MayBlock(), base::TaskPriority::BEST_EFFORT)); return task_runner.Get(); }
diff --git a/components/app_modal/android/app_modal_android_strings.grd b/components/app_modal/android/app_modal_android_strings.grd index f0a145e..9c36e345 100644 --- a/components/app_modal/android/app_modal_android_strings.grd +++ b/components/app_modal/android/app_modal_android_strings.grd
@@ -80,6 +80,7 @@ <output filename="values-uz/app_modal_android_strings.xml" lang="uz" type="android" /> <output filename="values-vi/app_modal_android_strings.xml" lang="vi" type="android" /> <output filename="values-zh-rCN/app_modal_android_strings.xml" lang="zh-CN" type="android" /> + <output filename="values-zh-rHK/app_modal_android_strings.xml" lang="zh-HK" type="android" /> <output filename="values-zh-rTW/app_modal_android_strings.xml" lang="zh-TW" type="android" /> <output filename="values-zu/app_modal_android_strings.xml" lang="zu" type="android" /> </outputs>
diff --git a/components/autofill/android/java/strings/autofill_strings.grd b/components/autofill/android/java/strings/autofill_strings.grd index 1c65758..81c315a 100644 --- a/components/autofill/android/java/strings/autofill_strings.grd +++ b/components/autofill/android/java/strings/autofill_strings.grd
@@ -80,6 +80,7 @@ <output filename="values-uz/autofill_strings.xml" lang="uz" type="android" /> <output filename="values-vi/autofill_strings.xml" lang="vi" type="android" /> <output filename="values-zh-rCN/autofill_strings.xml" lang="zh-CN" type="android" /> + <output filename="values-zh-rHK/autofill_strings.xml" lang="zh-HK" type="android" /> <output filename="values-zh-rTW/autofill_strings.xml" lang="zh-TW" type="android" /> <output filename="values-zu/autofill_strings.xml" lang="zu" type="android" /> </outputs>
diff --git a/components/autofill/core/browser/autofill_client.h b/components/autofill/core/browser/autofill_client.h index 223fe64..36b15d2 100644 --- a/components/autofill/core/browser/autofill_client.h +++ b/components/autofill/core/browser/autofill_client.h
@@ -11,6 +11,7 @@ #include <vector> #include "base/callback_forward.h" +#include "base/containers/span.h" #include "base/i18n/rtl.h" #include "base/memory/weak_ptr.h" #include "base/strings/string16.h" @@ -18,6 +19,7 @@ #include "build/build_config.h" #include "components/autofill/core/browser/payments/legal_message_line.h" #include "components/autofill/core/browser/payments/risk_data_loader.h" +#include "components/autofill/core/browser/ui/popup_item_ids.h" #include "components/autofill/core/browser/ui/popup_types.h" #include "components/security_state/core/security_state.h" #include "services/metrics/public/cpp/ukm_source_id.h" @@ -421,6 +423,17 @@ const std::vector<base::string16>& values, const std::vector<base::string16>& labels) = 0; + // Informs the client that |UpdatePopup| will be called which enables + // keeping the UI alive. + virtual void PinPopupViewUntilUpdate() = 0; + + // Returns (not elided) suggestions currently held by the UI. + virtual base::span<const Suggestion> GetPopupSuggestions() const = 0; + + // Updates the popup contents with the newly given suggestions. + virtual void UpdatePopup(const std::vector<autofill::Suggestion>& suggestions, + PopupType popup_type) = 0; + // Hide the Autofill popup if one is currently showing. virtual void HideAutofillPopup(PopupHidingReason reason) = 0;
diff --git a/components/autofill/core/browser/test_autofill_client.cc b/components/autofill/core/browser/test_autofill_client.cc index 742dae5..ce73033 100644 --- a/components/autofill/core/browser/test_autofill_client.cc +++ b/components/autofill/core/browser/test_autofill_client.cc
@@ -211,6 +211,15 @@ const std::vector<base::string16>& values, const std::vector<base::string16>& labels) {} +base::span<const Suggestion> TestAutofillClient::GetPopupSuggestions() const { + return base::span<const Suggestion>(); +} + +void TestAutofillClient::PinPopupViewUntilUpdate() {} + +void TestAutofillClient::UpdatePopup(const std::vector<Suggestion>& suggestions, + autofill::PopupType popup_type) {} + void TestAutofillClient::HideAutofillPopup(PopupHidingReason reason) {} bool TestAutofillClient::IsAutocompleteEnabled() {
diff --git a/components/autofill/core/browser/test_autofill_client.h b/components/autofill/core/browser/test_autofill_client.h index 21cbae29..fb6986df 100644 --- a/components/autofill/core/browser/test_autofill_client.h +++ b/components/autofill/core/browser/test_autofill_client.h
@@ -118,6 +118,10 @@ void UpdateAutofillPopupDataListValues( const std::vector<base::string16>& values, const std::vector<base::string16>& labels) override; + base::span<const autofill::Suggestion> GetPopupSuggestions() const override; + void PinPopupViewUntilUpdate() override; + void UpdatePopup(const std::vector<autofill::Suggestion>& suggestions, + PopupType popup_type) override; void HideAutofillPopup(PopupHidingReason reason) override; bool IsAutocompleteEnabled() override; void PropagateAutofillPredictions(
diff --git a/components/browser_ui/strings/android/browser_ui_strings.grd b/components/browser_ui/strings/android/browser_ui_strings.grd index 320a8d5..83cfe5c1 100644 --- a/components/browser_ui/strings/android/browser_ui_strings.grd +++ b/components/browser_ui/strings/android/browser_ui_strings.grd
@@ -80,6 +80,7 @@ <output filename="values-uz/browser_ui_strings.xml" lang="uz" type="android" /> <output filename="values-vi/browser_ui_strings.xml" lang="vi" type="android" /> <output filename="values-zh-rCN/browser_ui_strings.xml" lang="zh-CN" type="android" /> + <output filename="values-zh-rHK/browser_ui_strings.xml" lang="zh-HK" type="android" /> <output filename="values-zh-rTW/browser_ui_strings.xml" lang="zh-TW" type="android" /> <output filename="values-zu/browser_ui_strings.xml" lang="zu" type="android" /> </outputs>
diff --git a/components/components_chromium_strings.grd b/components/components_chromium_strings.grd index b5d1b5c..f0f81b7 100644 --- a/components/components_chromium_strings.grd +++ b/components/components_chromium_strings.grd
@@ -32,6 +32,7 @@ <output filename="components_chromium_strings_sq.pak" type="data_package" lang="sq" /> <output filename="components_chromium_strings_ur.pak" type="data_package" lang="ur" /> <output filename="components_chromium_strings_uz.pak" type="data_package" lang="uz" /> + <output filename="components_chromium_strings_zh-HK.pak" type="data_package" lang="zh-HK" /> <output filename="components_chromium_strings_zu.pak" type="data_package" lang="zu" /> </if> <output filename="components_chromium_strings_am.pak" type="data_package" lang="am" />
diff --git a/components/components_google_chrome_strings.grd b/components/components_google_chrome_strings.grd index 7ba36ff..42a7ae1 100644 --- a/components/components_google_chrome_strings.grd +++ b/components/components_google_chrome_strings.grd
@@ -32,6 +32,7 @@ <output filename="components_google_chrome_strings_sq.pak" type="data_package" lang="sq" /> <output filename="components_google_chrome_strings_ur.pak" type="data_package" lang="ur" /> <output filename="components_google_chrome_strings_uz.pak" type="data_package" lang="uz" /> + <output filename="components_google_chrome_strings_zh-HK.pak" type="data_package" lang="zh-HK" /> <output filename="components_google_chrome_strings_zu.pak" type="data_package" lang="zu" /> </if> <output filename="components_google_chrome_strings_am.pak" type="data_package" lang="am" />
diff --git a/components/components_locale_settings.grd b/components/components_locale_settings.grd index 7755f21..89cb92d8 100644 --- a/components/components_locale_settings.grd +++ b/components/components_locale_settings.grd
@@ -30,6 +30,7 @@ <output filename="components_locale_settings_sq.pak" type="data_package" lang="sq" /> <output filename="components_locale_settings_ur.pak" type="data_package" lang="ur" /> <output filename="components_locale_settings_uz.pak" type="data_package" lang="uz" /> + <output filename="components_locale_settings_zh-HK.pak" type="data_package" lang="zh-HK" /> <output filename="components_locale_settings_zu.pak" type="data_package" lang="zu" /> </if> <output filename="components_locale_settings_am.pak" type="data_package" lang="am" /> @@ -181,6 +182,7 @@ <output filename="java/res/values-uz/components_locale_settings.xml" lang="uz" type="android" context="android_java" /> <output filename="java/res/values-vi/components_locale_settings.xml" lang="vi" type="android" context="android_java" /> <output filename="java/res/values-zh-rCN/components_locale_settings.xml" lang="zh-CN" type="android" context="android_java" /> + <output filename="java/res/values-zh-rHK/components_locale_settings.xml" lang="zh-HK" type="android" context="android_java" /> <output filename="java/res/values-zh-rTW/components_locale_settings.xml" lang="zh-TW" type="android" context="android_java" /> <output filename="java/res/values-zu/components_locale_settings.xml" lang="zu" type="android" context="android_java" /> </if>
diff --git a/components/components_strings.grd b/components/components_strings.grd index d0c3ce60..7afdded 100644 --- a/components/components_strings.grd +++ b/components/components_strings.grd
@@ -32,6 +32,7 @@ <output filename="components_strings_sq.pak" type="data_package" lang="sq" /> <output filename="components_strings_ur.pak" type="data_package" lang="ur" /> <output filename="components_strings_uz.pak" type="data_package" lang="uz" /> + <output filename="components_strings_zh-HK.pak" type="data_package" lang="zh-HK" /> <output filename="components_strings_zu.pak" type="data_package" lang="zu" /> </if> <output filename="components_strings_am.pak" type="data_package" lang="am" /> @@ -183,6 +184,7 @@ <output filename="java/res/values-uz/components_strings.xml" lang="uz" type="android" context="android_java" /> <output filename="java/res/values-vi/components_strings.xml" lang="vi" type="android" context="android_java" /> <output filename="java/res/values-zh-rCN/components_strings.xml" lang="zh-CN" type="android" context="android_java" /> + <output filename="java/res/values-zh-rHK/components_strings.xml" lang="zh-HK" type="android" context="android_java" /> <output filename="java/res/values-zh-rTW/components_strings.xml" lang="zh-TW" type="android" context="android_java" /> <output filename="java/res/values-zu/components_strings.xml" lang="zu" type="android" context="android_java" /> </if>
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.cc index 72789a5f..414a8255 100644 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.cc +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.cc
@@ -23,7 +23,7 @@ #include "base/strings/string_piece.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include "base/task_runner_util.h" #include "base/time/default_tick_clock.h" #include "build/build_config.h" @@ -56,10 +56,9 @@ // SequencedTaskRunner to get the network id. A SequencedTaskRunner is used // rather than parallel tasks to avoid having many threads getting the network // id concurrently. -base::LazySequencedTaskRunner g_get_network_id_task_runner = - LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER( - base::TaskTraits(base::ThreadPool(), - base::MayBlock(), +base::LazyThreadPoolSequencedTaskRunner g_get_network_id_task_runner = + LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER( + base::TaskTraits(base::MayBlock(), base::TaskPriority::BEST_EFFORT, base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN)); #endif
diff --git a/components/dbus/thread_linux/dbus_thread_linux.cc b/components/dbus/thread_linux/dbus_thread_linux.cc index 3bb7423..141a2f7 100644 --- a/components/dbus/thread_linux/dbus_thread_linux.cc +++ b/components/dbus/thread_linux/dbus_thread_linux.cc
@@ -4,7 +4,7 @@ #include "components/dbus/thread_linux/dbus_thread_linux.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" namespace dbus_thread_linux { @@ -15,11 +15,9 @@ // on this thread. Use SingleThreadTaskRunnerThreadMode::SHARED, because DBus // does not require an exclusive use of the thread, only the existence of a // single thread for all tasks. -base::LazySingleThreadTaskRunner g_dbus_thread_task_runner = - LAZY_SINGLE_THREAD_TASK_RUNNER_INITIALIZER( - base::TaskTraits(base::ThreadPool(), - base::MayBlock(), - base::TaskPriority::USER_BLOCKING), +base::LazyThreadPoolSingleThreadTaskRunner g_dbus_thread_task_runner = + LAZY_THREAD_POOL_SINGLE_THREAD_TASK_RUNNER_INITIALIZER( + base::TaskTraits(base::MayBlock(), base::TaskPriority::USER_BLOCKING), base::SingleThreadTaskRunnerThreadMode::SHARED); } // namespace
diff --git a/components/download/internal/common/download_path_reservation_tracker.cc b/components/download/internal/common/download_path_reservation_tracker.cc index 2e6ea03..41d93d72 100644 --- a/components/download/internal/common/download_path_reservation_tracker.cc +++ b/components/download/internal/common/download_path_reservation_tracker.cc
@@ -20,7 +20,7 @@ #include "base/stl_util.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include "base/task/post_task.h" #include "base/task_runner_util.h" #include "base/third_party/icu/icu_utf.h" @@ -60,9 +60,9 @@ // there are no more reservations. ReservationMap* g_reservation_map = NULL; -base::LazySequencedTaskRunner g_sequenced_task_runner = - LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER( - base::TaskTraits(base::ThreadPool(), base::MayBlock())); +base::LazyThreadPoolSequencedTaskRunner g_sequenced_task_runner = + LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER( + base::TaskTraits(base::MayBlock())); // Observes a DownloadItem for changes to its target path and state. Updates or // revokes associated download path reservations as necessary. Created, invoked
diff --git a/components/download/internal/common/download_task_runner.cc b/components/download/internal/common/download_task_runner.cc index d34a535..1139f192 100644 --- a/components/download/internal/common/download_task_runner.cc +++ b/components/download/internal/common/download_task_runner.cc
@@ -8,7 +8,7 @@ #include "base/no_destructor.h" #include "base/single_thread_task_runner.h" #include "base/synchronization/lock.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include "build/build_config.h" namespace download { @@ -18,18 +18,14 @@ #if defined(OS_WIN) // On Windows, the download code dips into COM and the shell here and there, // necessitating the use of a COM single-threaded apartment sequence. -base::LazyCOMSTATaskRunner g_download_task_runner = +base::LazyThreadPoolCOMSTATaskRunner g_download_task_runner = LAZY_COM_STA_TASK_RUNNER_INITIALIZER( - base::TaskTraits(base::ThreadPool(), - base::MayBlock(), - base::TaskPriority::USER_VISIBLE), + base::TaskTraits(base::MayBlock(), base::TaskPriority::USER_VISIBLE), base::SingleThreadTaskRunnerThreadMode::SHARED); #else -base::LazySequencedTaskRunner g_download_task_runner = - LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER( - base::TaskTraits(base::ThreadPool(), - base::MayBlock(), - base::TaskPriority::USER_VISIBLE)); +base::LazyThreadPoolSequencedTaskRunner g_download_task_runner = + LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER( + base::TaskTraits(base::MayBlock(), base::TaskPriority::USER_VISIBLE)); #endif base::LazyInstance<scoped_refptr<base::SingleThreadTaskRunner>>::
diff --git a/components/embedder_support/android/java/strings/web_contents_delegate_android_strings.grd b/components/embedder_support/android/java/strings/web_contents_delegate_android_strings.grd index 2bb9fc9a..a8d57d89 100644 --- a/components/embedder_support/android/java/strings/web_contents_delegate_android_strings.grd +++ b/components/embedder_support/android/java/strings/web_contents_delegate_android_strings.grd
@@ -80,6 +80,7 @@ <output filename="values-uz/web_contents_delegate_android_strings.xml" lang="uz" type="android" /> <output filename="values-vi/web_contents_delegate_android_strings.xml" lang="vi" type="android" /> <output filename="values-zh-rCN/web_contents_delegate_android_strings.xml" lang="zh-CN" type="android" /> + <output filename="values-zh-rHK/web_contents_delegate_android_strings.xml" lang="zh-HK" type="android" /> <output filename="values-zh-rTW/web_contents_delegate_android_strings.xml" lang="zh-TW" type="android" /> <output filename="values-zu/web_contents_delegate_android_strings.xml" lang="zu" type="android" /> </outputs>
diff --git a/components/history/core/browser/history_backend.cc b/components/history/core/browser/history_backend.cc index a42e1c4b..f51ccbd 100644 --- a/components/history/core/browser/history_backend.cc +++ b/components/history/core/browser/history_backend.cc
@@ -148,7 +148,7 @@ // The maximum number of days for which domain visit metrics are computed // each time HistoryBackend::GetDomainDiversity() is called. -constexpr int kDomainDiversityBacktrackMaxDays = 7; +constexpr int kDomainDiversityMaxBacktrackedDays = 7; // An offset that corrects possible error in date/time arithmetic caused by // fluctuation of day length due to Daylight Saving Time (DST). For example, @@ -1236,17 +1236,16 @@ int number_of_days_to_report, DomainMetricBitmaskType metric_type_bitmask) { DCHECK_GE(number_of_days_to_report, 0); - DCHECK_LE(number_of_days_to_report, kDomainDiversityBacktrackMaxDays); DomainDiversityResults result; if (!db_) return result; number_of_days_to_report = - std::min(number_of_days_to_report, kDomainDiversityBacktrackMaxDays); + std::min(number_of_days_to_report, kDomainDiversityMaxBacktrackedDays); base::Time current_midnight = report_time.LocalMidnight(); - base::ElapsedTimer db_timer; + SCOPED_UMA_HISTOGRAM_TIMER("History.DomainCountQueryTime"); for (int days_back = 0; days_back < number_of_days_to_report; ++days_back) { DomainMetricSet single_metric_set; @@ -1279,8 +1278,6 @@ current_midnight = MidnightNDaysLater(current_midnight, -1); } - UMA_HISTOGRAM_COUNTS_10000("History.DomainCountQueryTime", - db_timer.Elapsed().InMilliseconds()); return result; }
diff --git a/components/history/core/browser/history_service_unittest.cc b/components/history/core/browser/history_service_unittest.cc index 8f9ddc3..c8ddc92 100644 --- a/components/history/core/browser/history_service_unittest.cc +++ b/components/history/core/browser/history_service_unittest.cc
@@ -729,7 +729,7 @@ int expected) { if (expected >= 0) { ASSERT_TRUE(metric.has_value()); - EXPECT_EQ(metric.value().count, expected); + EXPECT_EQ(expected, metric.value().count); } else { EXPECT_FALSE(metric.has_value()); } @@ -780,7 +780,7 @@ base::Time query_time = base::Time::Now(); // Make sure |query_time| is at least some time past the midnight so that - // some domain visits can be inserted between |query_time| and midnight\ + // some domain visits can be inserted between |query_time| and midnight // for testing. query_time = std::max(query_time.LocalMidnight() + base::TimeDelta::FromMinutes(10), @@ -816,16 +816,16 @@ history::kEnableLast1DayMetric | history::kEnableLast7DayMetric | history::kEnableLast28DayMetric, &tracker_); - EXPECT_EQ(res.size(), 0u); + EXPECT_EQ(0u, res.size()); - // Metrics will be computed for each of the 4 continuous midnights . + // Metrics will be computed for each of the 4 continuous midnights. res = GetDomainDiversityHelper( history, GetTimeInThePast(query_time, 4, 0), query_time, history::kEnableLast1DayMetric | history::kEnableLast7DayMetric | history::kEnableLast28DayMetric, &tracker_); - ASSERT_EQ(res.size(), 4u); + ASSERT_EQ(4u, res.size()); TestDomainMetricSet(res[0], 1, 2, 2); TestDomainMetricSet(res[1], 2, 2, 2); @@ -863,12 +863,12 @@ GetTimeInThePast(query_time, 1, 13)); DomainDiversityResults res = GetDomainDiversityHelper( - history, GetTimeInThePast(query_time, 7, 12), query_time, + history, GetTimeInThePast(query_time, 10, 12), query_time, history::kEnableLast1DayMetric | history::kEnableLast7DayMetric | history::kEnableLast28DayMetric, &tracker_); // Only up to seven days will be considered. - ASSERT_EQ(res.size(), 7u); + ASSERT_EQ(7u, res.size()); TestDomainMetricSet(res[0], 2, 3, 5); TestDomainMetricSet(res[1], 1, 2, 4); @@ -898,7 +898,7 @@ history, GetTimeInThePast(query_time, 7, 12), query_time, history::kEnableLast1DayMetric | history::kEnableLast7DayMetric, &tracker_); - ASSERT_EQ(res.size(), 7u); + ASSERT_EQ(7u, res.size()); TestDomainMetricSet(res[0], 1, 2, -1); TestDomainMetricSet(res[1], 0, 1, -1); @@ -913,7 +913,7 @@ history::kEnableLast28DayMetric | history::kEnableLast7DayMetric, &tracker_); - ASSERT_EQ(res.size(), 6u); + ASSERT_EQ(6u, res.size()); TestDomainMetricSet(res[0], -1, 2, 3); TestDomainMetricSet(res[1], -1, 1, 2); TestDomainMetricSet(res[2], -1, 1, 2);
diff --git a/components/media_message_center/media_notification_view_impl_unittest.cc b/components/media_message_center/media_notification_view_impl_unittest.cc index 15eef9fa3..c39e0eb 100644 --- a/components/media_message_center/media_notification_view_impl_unittest.cc +++ b/components/media_message_center/media_notification_view_impl_unittest.cc
@@ -11,6 +11,7 @@ #include "base/macros.h" #include "base/strings/utf_string_conversions.h" #include "base/test/metrics/histogram_tester.h" +#include "base/test/mock_callback.h" #include "base/test/task_environment.h" #include "base/unguessable_token.h" #include "build/build_config.h" @@ -1005,7 +1006,7 @@ metadata.album = base::ASCIIToUTF16("album"); EXPECT_CALL(container(), OnMediaSessionMetadataChanged()).Times(0); - GetItem()->Freeze(); + GetItem()->Freeze(base::DoNothing()); GetItem()->MediaSessionMetadataChanged(metadata); EXPECT_EQ(base::ASCIIToUTF16("title"), title_label()->GetText()); @@ -1019,7 +1020,7 @@ EXPECT_CALL(container(), OnMediaArtworkChanged(_)).Times(0); EXPECT_CALL(container(), OnColorsChanged(_, _)).Times(0); - GetItem()->Freeze(); + GetItem()->Freeze(base::DoNothing()); GetItem()->MediaControllerImageChanged( media_session::mojom::MediaSessionImageType::kArtwork, image); @@ -1032,7 +1033,7 @@ EXPECT_CALL(container(), OnMediaSessionInfoChanged(_)).Times(0); - GetItem()->Freeze(); + GetItem()->Freeze(base::DoNothing()); EXPECT_TRUE(GetButtonForAction(MediaSessionAction::kPlay)); EXPECT_FALSE(GetButtonForAction(MediaSessionAction::kPause)); @@ -1051,7 +1052,7 @@ EXPECT_FALSE( GetButtonForAction(MediaSessionAction::kSeekForward)->GetVisible()); - GetItem()->Freeze(); + GetItem()->Freeze(base::DoNothing()); EnableAction(MediaSessionAction::kSeekForward); EXPECT_FALSE( @@ -1063,7 +1064,7 @@ EXPECT_EQ(0, media_controller()->next_track_count()); - GetItem()->Freeze(); + GetItem()->Freeze(base::DoNothing()); SimulateButtonClick(MediaSessionAction::kNextTrack); GetItem()->FlushForTesting(); @@ -1076,7 +1077,9 @@ EnableAction(MediaSessionAction::kPause); // Freeze the item and clear the metadata. - GetItem()->Freeze(); + base::MockOnceClosure unfrozen_callback; + EXPECT_CALL(unfrozen_callback, Run).Times(0); + GetItem()->Freeze(unfrozen_callback.Get()); GetItem()->MediaSessionInfoChanged(nullptr); GetItem()->MediaSessionMetadataChanged(base::nullopt); @@ -1102,12 +1105,14 @@ // The item should still be frozen, and the view should contain the old data. EXPECT_TRUE(GetItem()->frozen()); + testing::Mock::VerifyAndClearExpectations(&unfrozen_callback); EXPECT_TRUE(GetButtonForAction(MediaSessionAction::kPlay)); EXPECT_FALSE(GetButtonForAction(MediaSessionAction::kPause)); EXPECT_EQ(base::ASCIIToUTF16("title"), title_label()->GetText()); EXPECT_EQ(base::ASCIIToUTF16("artist"), artist_label()->GetText()); // Update the metadata. + EXPECT_CALL(unfrozen_callback, Run); media_session::MediaMetadata metadata; metadata.title = base::ASCIIToUTF16("title2"); metadata.artist = base::ASCIIToUTF16("artist2"); @@ -1115,6 +1120,7 @@ // The item should no longer be frozen, and we should see the updated data. EXPECT_FALSE(GetItem()->frozen()); + testing::Mock::VerifyAndClearExpectations(&unfrozen_callback); EXPECT_FALSE(GetButtonForAction(MediaSessionAction::kPlay)); EXPECT_TRUE(GetButtonForAction(MediaSessionAction::kPause)); EXPECT_EQ(base::ASCIIToUTF16("title2"), title_label()->GetText()); @@ -1134,7 +1140,9 @@ EXPECT_FALSE(GetArtworkImage().isNull()); // Freeze the item and clear the metadata. - GetItem()->Freeze(); + base::MockOnceClosure unfrozen_callback; + EXPECT_CALL(unfrozen_callback, Run).Times(0); + GetItem()->Freeze(unfrozen_callback.Get()); GetItem()->MediaSessionInfoChanged(nullptr); GetItem()->MediaSessionMetadataChanged(base::nullopt); GetItem()->MediaControllerImageChanged( @@ -1177,6 +1185,7 @@ // The item should still be frozen, and waiting for a new image. EXPECT_TRUE(GetItem()->frozen()); + testing::Mock::VerifyAndClearExpectations(&unfrozen_callback); EXPECT_TRUE(GetButtonForAction(MediaSessionAction::kPlay)); EXPECT_FALSE(GetButtonForAction(MediaSessionAction::kPause)); EXPECT_EQ(base::ASCIIToUTF16("title"), title_label()->GetText()); @@ -1185,9 +1194,11 @@ // Once the freeze timer fires, the item should unfreeze even if there's no // artwork. + EXPECT_CALL(unfrozen_callback, Run); AdvanceClockMilliseconds(2600); EXPECT_FALSE(GetItem()->frozen()); + testing::Mock::VerifyAndClearExpectations(&unfrozen_callback); EXPECT_FALSE(GetButtonForAction(MediaSessionAction::kPlay)); EXPECT_TRUE(GetButtonForAction(MediaSessionAction::kPause)); EXPECT_EQ(base::ASCIIToUTF16("title2"), title_label()->GetText()); @@ -1209,7 +1220,9 @@ EXPECT_FALSE(GetArtworkImage().isNull()); // Freeze the item and clear the metadata. - GetItem()->Freeze(); + base::MockOnceClosure unfrozen_callback; + EXPECT_CALL(unfrozen_callback, Run).Times(0); + GetItem()->Freeze(unfrozen_callback.Get()); GetItem()->MediaSessionInfoChanged(nullptr); GetItem()->MediaSessionMetadataChanged(base::nullopt); GetItem()->MediaControllerImageChanged( @@ -1252,6 +1265,7 @@ // The item should still be frozen, and waiting for a new image. EXPECT_TRUE(GetItem()->frozen()); + testing::Mock::VerifyAndClearExpectations(&unfrozen_callback); EXPECT_TRUE(GetButtonForAction(MediaSessionAction::kPlay)); EXPECT_FALSE(GetButtonForAction(MediaSessionAction::kPause)); EXPECT_EQ(base::ASCIIToUTF16("title"), title_label()->GetText()); @@ -1259,6 +1273,7 @@ EXPECT_FALSE(GetArtworkImage().isNull()); // Once we receive artwork, the item should unfreeze. + EXPECT_CALL(unfrozen_callback, Run); SkBitmap new_image; new_image.allocN32Pixels(10, 10); new_image.eraseColor(SK_ColorYELLOW); @@ -1266,6 +1281,7 @@ media_session::mojom::MediaSessionImageType::kArtwork, new_image); EXPECT_FALSE(GetItem()->frozen()); + testing::Mock::VerifyAndClearExpectations(&unfrozen_callback); EXPECT_FALSE(GetButtonForAction(MediaSessionAction::kPlay)); EXPECT_TRUE(GetButtonForAction(MediaSessionAction::kPause)); EXPECT_EQ(base::ASCIIToUTF16("title2"), title_label()->GetText());
diff --git a/components/media_message_center/media_session_notification_item.cc b/components/media_message_center/media_session_notification_item.cc index ad60fb1..cc458ef 100644 --- a/components/media_message_center/media_session_notification_item.cc +++ b/components/media_message_center/media_session_notification_item.cc
@@ -196,8 +196,9 @@ MaybeHideOrShowNotification(); } -void MediaSessionNotificationItem::Freeze() { +void MediaSessionNotificationItem::Freeze(base::OnceClosure unfrozen_callback) { is_bound_ = false; + unfrozen_callback_ = std::move(unfrozen_callback); if (frozen_) return; @@ -268,6 +269,8 @@ if (session_favicon_.has_value()) view_->UpdateWithFavicon(*session_favicon_); } + + std::move(unfrozen_callback_).Run(); } bool MediaSessionNotificationItem::HasArtwork() const {
diff --git a/components/media_message_center/media_session_notification_item.h b/components/media_message_center/media_session_notification_item.h index 8e8a01b..a85829a 100644 --- a/components/media_message_center/media_session_notification_item.h +++ b/components/media_message_center/media_session_notification_item.h
@@ -7,6 +7,7 @@ #include <string> +#include "base/callback.h" #include "base/component_export.h" #include "base/containers/flat_set.h" #include "base/macros.h" @@ -77,8 +78,10 @@ media_session::mojom::MediaSessionInfoPtr session_info); // This will freeze the item and start a timer to destroy the item after - // some time has passed. - void Freeze(); + // some time has passed. If and when the item unfreezes, |unfrozen_callback| + // will be run. If the item does not unfreeze before timing out, then + // |unfrozen_callback| will not be called. + void Freeze(base::OnceClosure unfrozen_callback); bool frozen() const { return frozen_; } @@ -148,6 +151,9 @@ // has been frozen for a certain period of time. base::OneShotTimer freeze_timer_; + // Called when the item unfreezes. + base::OnceClosure unfrozen_callback_; + mojo::Receiver<media_session::mojom::MediaControllerObserver> observer_receiver_{this};
diff --git a/components/omnibox/resources/omnibox_resources.grd b/components/omnibox/resources/omnibox_resources.grd index fdc1061..23cade8f 100644 --- a/components/omnibox/resources/omnibox_resources.grd +++ b/components/omnibox/resources/omnibox_resources.grd
@@ -34,6 +34,7 @@ <output filename="omnibox_resources_sq.pak" type="data_package" lang="sq" /> <output filename="omnibox_resources_ur.pak" type="data_package" lang="ur" /> <output filename="omnibox_resources_uz.pak" type="data_package" lang="uz" /> + <output filename="omnibox_resources_zh-HK.pak" type="data_package" lang="zh-HK" /> <output filename="omnibox_resources_zu.pak" type="data_package" lang="zu" /> </if> <output filename="omnibox_resources_am.pak" type="data_package" lang="am" />
diff --git a/components/password_manager/core/browser/export/password_manager_exporter.cc b/components/password_manager/core/browser/export/password_manager_exporter.cc index df75433..3194e21f 100644 --- a/components/password_manager/core/browser/export/password_manager_exporter.cc +++ b/components/password_manager/core/browser/export/password_manager_exporter.cc
@@ -10,7 +10,7 @@ #include "base/files/file_util.h" #include "base/location.h" #include "base/metrics/histogram_macros.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include "base/task/post_task.h" #include "base/task_runner_util.h" #include "build/build_config.h" @@ -26,11 +26,9 @@ // destination and one of them was cancelled and will delete the file. We use // TaskPriority::USER_VISIBLE, because a busy UI is displayed while the // passwords are being exported. -base::LazySingleThreadTaskRunner g_task_runner = - LAZY_SINGLE_THREAD_TASK_RUNNER_INITIALIZER( - base::TaskTraits(base::ThreadPool(), - base::MayBlock(), - base::TaskPriority::USER_VISIBLE), +base::LazyThreadPoolSingleThreadTaskRunner g_task_runner = + LAZY_THREAD_POOL_SINGLE_THREAD_TASK_RUNNER_INITIALIZER( + base::TaskTraits(base::MayBlock(), base::TaskPriority::USER_VISIBLE), base::SingleThreadTaskRunnerThreadMode::SHARED); // A wrapper for |write_function|, which can be bound and keep a copy of its
diff --git a/components/performance_manager/performance_manager_impl.cc b/components/performance_manager/performance_manager_impl.cc index e113c37..b4f6b08 100644 --- a/components/performance_manager/performance_manager_impl.cc +++ b/components/performance_manager/performance_manager_impl.cc
@@ -12,7 +12,7 @@ #include "base/logging.h" #include "base/macros.h" #include "base/memory/ptr_util.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include "base/task/post_task.h" #include "base/task/task_traits.h" #include "components/performance_manager/graph/frame_node_impl.h" @@ -40,10 +40,9 @@ PerformanceManagerImpl* g_performance_manager_from_any_sequence = nullptr; // The performance manager TaskRunner. -base::LazySequencedTaskRunner g_performance_manager_task_runner = - LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER( - base::TaskTraits(base::ThreadPool(), - base::TaskPriority::USER_VISIBLE, +base::LazyThreadPoolSequencedTaskRunner g_performance_manager_task_runner = + LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER( + base::TaskTraits(base::TaskPriority::USER_VISIBLE, base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN, base::MayBlock()));
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb index 8a010336..5894c94 100644 --- a/components/policy/resources/policy_templates_de.xtb +++ b/components/policy/resources/policy_templates_de.xtb
@@ -4802,15 +4802,6 @@ <translation id="8757552286070680084">Wilco DTC-Konfiguration</translation> <translation id="8758831693895931466">Erforderliche Registrierung für Cloud Management aktivieren</translation> <translation id="8759829385824155666">Erlaubte Kerberos-Verschlüsselungstypen</translation> -<translation id="87635449713742708">Mit dieser Richtlinie wird erzwungen, dass der Netzwerkcode im Browserprozess ausgeführt wird. - - Sie ist standardmäßig deaktiviert. Ist sie aktiviert, so ist der Nutzer nicht mehr vor den Sicherheitsproblemen geschützt, sobald der Netzwerkprozess in einer Sandbox ausgeführt wird. - - Diese Richtlinie soll Unternehmen ermöglichen, zu Drittanbietersoftware zu migrieren, die nicht auf Hooking von Netzwerk-APIs angewiesen ist. Proxyserver werden anstelle von LSPs und Win32 API-Patching empfohlen. - - Wenn diese Richtlinie nicht konfiguriert ist, wird der Netzwerkcode standardmäßig außerhalb des Browserprozesses ausgeführt. - - Diese Richtlinie wird in <ph name="PRODUCT_NAME" /> 82 entfernt.</translation> <translation id="8764119899999036911">Gibt an, ob der generierte Kerberos-SPN auf dem kanonischen DNS-Namen oder dem ursprünglich eingegebenen Namen basiert. Wenn Sie diese Einstellung aktivieren, wird die CNAME-Suche übersprungen und der Servername so wie eingegeben verwendet. Sollten Sie die Einstellung deaktivieren oder nicht konfigurieren, wird der kanonische Name des Servers per CNAME-Suche ermittelt.</translation> <translation id="8764477907716150749">Diese Richtlinie ist zur internen Nutzung in <ph name="PRODUCT_NAME" /> vorgesehen.</translation> <translation id="8777369558049831576">Kästchen für "Immer öffnen" auf Bestätigungsaufforderung anzeigen</translation>
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb index f90655a..9c8fc72d 100644 --- a/components/policy/resources/policy_templates_es-419.xtb +++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -4839,15 +4839,6 @@ <translation id="8757552286070680084">Configuración de DTC wilco</translation> <translation id="8758831693895931466">Habilitar la inscripción obligatoria en la administración de la nube</translation> <translation id="8759829385824155666">Se permiten los tipos de encriptación de Kerberos</translation> -<translation id="87635449713742708">Esta política fuerza la ejecución del código de red en el proceso de navegación. - - Está inhabilitada de forma predeterminada, pero, si se habilita, deja a los usuarios desprotegidos frente a problemas de seguridad una vez que el proceso de red se encuentre en la zona de pruebas. - - Esta política permite que las empresas migren a software de terceros sin necesidad de modificar las API de red. Se recomiendan los servidores Proxy antes que los LSP y la aplicación de parches de API Win32. - - Si no se establece esta política, el código de red se ejecutará de forma predeterminada por fuera del proceso del navegador. - - En la versión 82 de <ph name="PRODUCT_NAME" />, se quitará esta política.</translation> <translation id="8764119899999036911">Especifica si el SPN de Kerberos generado se basa en el nombre canónico DNS o en el nombre original introducido. Si se habilita esta configuración, se salteará la búsqueda de CNAME y se usará el nombre del servidor que se haya introducido. Si se inhabilita esta opción o si no se configura, el nombre canónico del servidor se determinará a través de una búsqueda de CNAME.</translation> <translation id="8764477907716150749">Esta política es para uso interno de <ph name="PRODUCT_NAME" />.</translation> <translation id="8777369558049831576">Muestra la casilla de verificación "Always open" en un cuadro de diálogo del protocolo externo</translation>
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb index de713bb..3cc49b66 100644 --- a/components/policy/resources/policy_templates_es.xtb +++ b/components/policy/resources/policy_templates_es.xtb
@@ -4939,15 +4939,6 @@ <translation id="8757552286070680084">Configuración de Wilco DTC</translation> <translation id="8758831693895931466">Activar el registro obligatorio en la gestión en la nube</translation> <translation id="8759829385824155666">Tipos de cifrado Kerberos admitidos</translation> -<translation id="87635449713742708">Esta política fuerza que el código de red se ejecute en el proceso del navegador. - - Está inhabilitada de forma predeterminada, pero, si se habilita, deja a los usuarios desprotegidos frente a problemas de seguridad cuando el proceso de red se pone en zona de pruebas. - - El objetivo de esta política es dar a las empresas la opción de migrar a software de terceros que no dependa de la modificación de las API de red. Es recomendable utilizar servidores proxy en lugar de LSP y parches de la API Win32. - - Si no se establece esta política, el código de red se ejecutará fuera del proceso del navegador de forma predeterminada. - - Esta política se eliminará en la versión 82 de <ph name="PRODUCT_NAME" />.</translation> <translation id="8764119899999036911">Permite especificar si el SPN de Kerberos se basa en el nombre de dominio canónico o en el nombre que se introdujo originalmente. Si habilitas esta opción, se omitirá la consulta de nombre canónico y se usará el nombre del servidor tal como se haya introducido.
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb index 7bca9da3..879f381 100644 --- a/components/policy/resources/policy_templates_fr.xtb +++ b/components/policy/resources/policy_templates_fr.xtb
@@ -4934,15 +4934,6 @@ <translation id="8757552286070680084">Configuration d'un dispositif DTC de Wilco</translation> <translation id="8758831693895931466">Activer l'inscription obligatoire à la gestion cloud</translation> <translation id="8759829385824155666">Types de chiffrement Kerberos autorisés</translation> -<translation id="87635449713742708">Cette règle force le code réseau à s'exécuter dans le processus du navigateur. - - Cette règle est désactivée par défaut. Si elle est activée, elle expose les utilisateurs à des problèmes de sécurité une fois le processus de mise en réseau envoyé dans le bac à sable. - - Cette règle est destinée à donner aux entreprises la possibilité de migrer vers un logiciel tiers qui ne dépend pas de la connexion des API de mise en réseau. Il est recommandé d'utiliser des serveurs proxy plutôt que des LSP ou des correctifs de l'API Win32. - - Si cette règle n'est pas configurée, le code réseau s'exécute, par défaut, en dehors du processus du navigateur. - - Cette règle sera supprimée dans la version 82 de <ph name="PRODUCT_NAME" />.</translation> <translation id="8764119899999036911">Indique si le SPN Kerberos généré est basé sur le nom DNS canonique ou sur le nom d'origine saisi. Si vous activez ce paramètre, la recherche du CNAME sera ignorée et le nom du serveur sera utilisé tel qu'il a été saisi.
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb index 0f8f946d..a5a8ebf 100644 --- a/components/policy/resources/policy_templates_id.xtb +++ b/components/policy/resources/policy_templates_id.xtb
@@ -4798,15 +4798,6 @@ <translation id="8757552286070680084">Konfigurasi DTC wilco</translation> <translation id="8758831693895931466">Aktifkan pendaftaran pengelolaan cloud wajib</translation> <translation id="8759829385824155666">Jenis enkripsi Kerberos yang diizinkan</translation> -<translation id="87635449713742708">Kebijakan ini akan memaksa kode jaringan untuk berjalan di proses browser. - - Kebijakan ini dinonaktifkan secara default, dan jika diaktifkan, pengguna akan rentan terhadap masalah keamanan setelah proses jaringan masuk dalam sandbox. - - Kebijakan ini dimaksudkan untuk memberi perusahaan kesempatan melakukan migrasi ke software pihak ke-3 yang tidak bergantung pada penarikan networking API. Server proxy lebih direkomendasikan daripada patch LSP dan Win32 API. - - Jika kebijakan ini tidak ditetapkan, kode jaringan akan keluar dari proses browser secara default. - - Kebijakan ini akan dihapus dari <ph name="PRODUCT_NAME" /> versi 82.</translation> <translation id="8764119899999036911">Menentukan apakah Kerberos SPN yang dihasilkan didasarkan pada nama DNS kanonik atau nama asli yang dimasukkan. Jika Anda mengaktifkan setelan ini, pencarian CNAME akan dilewati dan nama server akan digunakan seperti saat dimasukkan. Jika Anda menonaktifkan setelan ini atau membiarkannya tidak disetel, nama kanonik server akan ditentukan melalui pencarian CNAME.</translation> <translation id="8764477907716150749">Kebijakan ini untuk penggunaan internal oleh <ph name="PRODUCT_NAME" /> sendiri.</translation> <translation id="8777369558049831576">Menampilkan kotak centang "Always open" pada dialog protokol eksternal.</translation>
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb index 79177b0..f6e9b07 100644 --- a/components/policy/resources/policy_templates_it.xtb +++ b/components/policy/resources/policy_templates_it.xtb
@@ -1769,6 +1769,7 @@ Se questa norma non viene impostata, i certificati che devono essere resi pubblici tramite Certificate Transparency verranno considerati non attendibili nel caso in cui non vengano resi pubblici secondo quanto previsto dalle norme di Certificate Transparency.</translation> <translation id="3765260570442823273">Durata del messaggio di avviso di uscita per inattività</translation> <translation id="377044054160169374">Applicazione dell'intervento in caso di esperienza intrusiva</translation> +<translation id="3780102107513139202">Attiva solo le varianti relative alle correzioni critiche</translation> <translation id="3780152581321609624">Includi porta non standard in Kerberos SPN</translation> <translation id="3780319008680229708">Se il criterio è impostato su true, l'icona Cast della barra degli strumenti sarà sempre visibile nella barra degli strumenti o nel menu extra e gli utenti non potranno rimuoverla. @@ -2002,6 +2003,7 @@ <translation id="4027608872760987929">Attiva il provider di ricerca predefinito</translation> <translation id="4039085364173654945">Consente di stabilire se per i contenuti secondari di terze parti presenti in una pagina è consentita la visualizzazione di una finestra di dialogo Autorizzazione di base HTTP. Generalmente questa norma non è attiva per tutela dal phishing. Se questa norma non viene impostata, l'impostazione verrà disattivata e per i contenuti secondari di terze parti non potrà essere visualizzata una finestra di dialogo Autorizzazione di base HTTP.</translation> <translation id="4056910949759281379">Disabilita protocollo SPDY</translation> +<translation id="4061590579642538878">Segnala informazioni relative ai rapporti sugli arresti anomali.</translation> <translation id="4075675819066819571">Posiziona la shelf sul lato sinistro dello schermo</translation> <translation id="4075864623710596000">I nomi host specificati in questo elenco saranno esenti dalla verifica dei criteri HSTS che potrebbero eseguire l'upgrade delle richieste da http a https. Solo i nomi host con etichetta singola sono consentiti in questo criterio. I nomi host devono essere canonicalizzati: ogni IDN deve essere convertito nel relativo formato A-label e tutte le lettere ASCII devono essere minuscole. Questo criterio si applica soltanto ai nomi host specificati e non ai relativi sottodomini.</translation> <translation id="408029843066770167">Consenti query a un servizio orario di Google</translation> @@ -2514,6 +2516,7 @@ <translation id="4983201894483989687">Consenti esecuzione dei plug-in obsoleti</translation> <translation id="4986560318567565414">Percorso a Chrome per cambiare il browser alternativo.</translation> <translation id="4988291787868618635">Azione da compiere a raggiungimento ritardo inattività</translation> +<translation id="500149597848135831">Attiva tutte le varianti</translation> <translation id="5032164758660626397">Impedisci all'utente di trasferire file di grandi dimensioni</translation> <translation id="5047604665028708335">Consenti l'accesso ai siti non presenti nei pacchetti di contenuti</translation> <translation id="5052081091120171147">Se è attiva, questa norma impone l'importazione della cronologia di navigazione dal browser predefinito corrente. Se la norma è attiva incide anche sulla finestra di dialogo di importazione. Se non è attiva, la cronologia di navigazione non viene importata. Se non viene impostata, all'utente potrebbe essere chiesto se desidera effettuare l'importazione, oppure l'importazione potrebbe avvenire automaticamente.</translation> @@ -2589,6 +2592,7 @@ <translation id="5102203758995933166">Consente di forzare l'applicazione della configurazione di rete per utente su un dispositivo <ph name="PRODUCT_OS_NAME" />. La configurazione di rete è una stringa in formato JSON come definita nel formato Open Network Configuration.</translation> <translation id="5105313908130842249">Ritardo blocco schermo in caso di utilizzo della batteria</translation> <translation id="5108031557082757679">Stampanti aziendali associate ai dispositivi disattivate</translation> +<translation id="5109383437323376357">Determina la disponibilità delle varianti</translation> <translation id="5112121363469561920">Consente di impostare il tipo predefinito di lente d'ingrandimento che viene attivato nella schermata di accesso. Se questo criterio viene impostato, consente di stabilire il tipo di lente d'ingrandimento che viene attivato quando viene mostrata la schermata di accesso. Se il criterio viene impostato su "Nessuno", la lente d'ingrandimento viene disattivata. @@ -3323,6 +3327,12 @@ <translation id="6221175752766085998">Consenti i certificati privi dell'estensione subjectAlternativeName emessi dai trust anchor locali</translation> <translation id="6224304369267200483">URL/domini per cui è consentita automaticamente l'attestazione diretta dei token di sicurezza</translation> <translation id="6233173491898450179">Imposta directory di download</translation> +<translation id="6242147107333796512">Segnala informazioni relative ai rapporti sugli arresti anomali, come ID remoto, + timestamp di acquisizione e causa. + + Se il criterio è impostato su false o non viene configurato, le informazioni relative ai rapporti sugli arresti anomali + non verranno segnalate. Se viene impostato su true, le informazioni relative ai rapporti sugli arresti anomali verranno + segnalate.</translation> <translation id="6244210204546589761">Pagine da aprire all'avvio</translation> <translation id="6247316685259031374">Questo criterio consente di controllare la sandbox del processo audio. Se questo criterio viene attivato, il processo audio verrà eseguito con limitazione tramite sandbox. @@ -3966,6 +3976,15 @@ <translation id="7311458740754205918">Se questa norma viene impostata su true o non viene impostata, nella pagina Nuova scheda potrebbero essere mostrati suggerimenti di contenuti basati sulla cronologia di navigazione, sugli interessi o sulla posizione dell'utente. Se viene impostata su false, i suggerimenti di contenuti generati automaticamente non vengono mostrati nella pagina Nuova scheda.</translation> +<translation id="7323572763274343342">La configurazione di questo criterio consente di specificare quali varianti è possibile applicare in<ph name="PRODUCT_NAME" />. + + Le varianti forniscono un mezzo per apportare modifiche a <ph name="PRODUCT_NAME" /> senza inviare una nuova versione del browser attivando o disattivando in modo selettivo le funzionalità già esistenti. + + La configurazione di <ph name="VARIATIONS_ENABLED_OPTION_NAME" /> (valore 0) o la mancata configurazione del criterio consentono di applicare al browser tutte le varianti. + + La configurazione di <ph name="CRITICAL_VARIATIONS_ONLY_OPTION_NAME" /> (valore 1) consente di applicare a <ph name="PRODUCT_NAME" /> esclusivamente correzioni della stabilità o varianti considerate critiche per la sicurezza. + + La configurazione di <ph name="VARIATIONS_DISABLED_OPTION_NAME" /> (valore 2) impedisce di applicare al browser tutte le varianti. Questa modalità potrebbe impedire agli sviluppatori di <ph name="PRODUCT_NAME" /> di fornire correzioni della sicurezza critiche in tempo utile e pertanto non è consigliata.</translation> <translation id="7323896582714668701">Parametri aggiuntivi della riga di comando per <ph name="PRODUCT_NAME" /></translation> <translation id="7326394567531622570">Simile a Wipe (valore 2), ma prova a mantenere i token di accesso per evitare all'utente di dover accedere di nuovo.</translation> <translation id="7329968046053403405">Consente di specificare il tipo di account degli account forniti dall'app di autenticazione di Android che supporta l'autenticazione <ph name="HTTP_NEGOTIATE" /> (ad esempio, l'autenticazione Kerberos). Queste informazioni dovrebbero essere messe a disposizione dal fornitore dell'app di autenticazione. Per ulteriori informazioni, visitare la pagina https://goo.gl/hajyfN. @@ -4038,6 +4057,19 @@ Se questa norma non è impostata o viene attivata, Google Chrome accetterà i contenuti web pubblicati come Signed HTTP Exchanges. Se non viene attivata, i contenuti Signed HTTP Exchanges non potranno essere caricati.</translation> +<translation id="7509496865303347769">Consente di configurare l'URL della home page di <ph name="PRODUCT_NAME" /> predefinito e di impedire agli utenti di modificarlo. + + La home page è la pagina che viene aperta facendo clic sul pulsante Home. Sul desktop, le pagine che si aprono all'avvio vengono stabilite dai criteri RestoreOnStartup. + + La home page può essere un URL specificato qui oppure la pagina Nuova scheda. Se selezioni la pagina Nuova scheda, questo criterio non viene applicato. + + Se attivi questa impostazione, gli utenti non possono modificare l'URL della home page di <ph name="PRODUCT_NAME" />, ma possono scegliere come home page la pagina Nuova scheda. + + Se questo criterio non viene impostato e non viene impostato neanche il criterio HomepageIsNewTabPage, l'utente potrà scegliere la home page che preferisce. + + L'URL deve avere uno schema standard, ad esempio "http://example.com" o "https://example.com". + + Questo criterio è disponibile esclusivamente per le istanze di Windows che fanno parte di un dominio <ph name="MS_AD_NAME" />, così come per le istanze di Windows 10 Pro o Enterprise registrate per la gestione dei dispositivi.</translation> <translation id="7511361072385293666">Se questa norma viene impostata su true o non viene impostata, l'utilizzo del protocollo QUIC in <ph name="PRODUCT_NAME" /> è consentito. Se questa norma viene impostata su false, l'utilizzo del protocollo QUIC non è consentito.</translation> <translation id="7517845714620372896">Consente di specificare la percentuale di luminosità dello schermo. @@ -4198,6 +4230,7 @@ <translation id="7717938661004793600">Configura le funzioni di accessibilità di <ph name="PRODUCT_OS_NAME" />.</translation> <translation id="7731026922044991970">Ripristina il comportamento <ph name="ATTRIBUTE_SAMESITE_NAME" /> precedente per i cookie su tutti i siti</translation> <translation id="7747447585227954402">Consenti ai dispositivi di usare <ph name="PLUGIN_VM_NAME" /> su <ph name="PRODUCT_OS_NAME" /></translation> +<translation id="7749024457938190837">Estensioni consentite per ignorare la finestra di dialogo di conferma durante l'invio di processi di stampa tramite l'API chrome.printing</translation> <translation id="7749402620209366169">Consente di abilitare l'autenticazione a due fattori per gli host di accesso remoto invece di un PIN specificato dall'utente. Se questa impostazione è abilitata, gli utenti devono fornire un codice valido a due fattori quando accedono a un host. @@ -4504,6 +4537,9 @@ Se disattivi questa impostazione, le pagine saranno sottoposte a scansione per i metatag. Se questa norma non viene impostata, le pagine saranno sottoposte a scansione per i metatag.</translation> +<translation id="8295496526151576383">Questo criterio specifica le estensioni consentite per ignorare la finestra di dialogo di conferma del processo di stampa utilizzando la funzione <ph name="PRINTING_API" /> <ph name="SUBMIT_JOB_FUNCTION" /> per l'invio di un processo di stampa. + + Se un'estensione non è presente nell'elenco o non è configurato alcun elenco, la finestra di dialogo di conferma del processo di stampa verrà visualizzata dall'utente per ogni chiamata funzione <ph name="SUBMIT_JOB_FUNCTION" />.</translation> <translation id="829641334878002866">Ti consente di impostare il periodo di tempo, in millisecondi, tra la prima notifica relativa alla necessità di riavviare un dispositivo <ph name="PRODUCT_OS_NAME" /> per applicare un aggiornamento in sospeso e la fine del periodo di tempo specificato dal criterio <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" />. Se non è impostato, per i dispositivi <ph name="PRODUCT_OS_NAME" /> viene utilizzato il periodo predefinito di 259200000 millisecondi (tre giorni).</translation> @@ -4777,15 +4813,6 @@ <translation id="8757552286070680084">Configurazione di DTC wilco</translation> <translation id="8758831693895931466">Attiva la registrazione alla gestione della cloud obbligatoria</translation> <translation id="8759829385824155666">Tipi di crittografia Kerberos consentiti</translation> -<translation id="87635449713742708">Questo criterio consente di forzare l'esecuzione del codice di networking nel processo del browser. - - Questo criterio è disattivato per impostazione predefinita e, se attivato, rende gli utenti vulnerabili ai problemi di sicurezza dopo che il processo di networking viene limitato tramite sandbox. - - Questo criterio è pensato per offrire alle aziende la possibilità di eseguire la migrazione a programmi software di terze parti che non dipendono dalla combinazione delle API di networking. È consigliabile usare i server proxy anziché LSP e patch di API Win32. - - Se questo criterio non viene impostato, il codice di networking verrà eseguito per impostazione predefinita fuori dal processo del browser. - - Questo criterio verrà rimosso nella versione 82 di <ph name="PRODUCT_NAME" />.</translation> <translation id="8764119899999036911">Consente di specificare se il Kerberos SPN generato si basa sul nome canonico DNS o sul nome originale inserito. Se attivi questa impostazione, la ricerca CNAME verrà saltata e verrà utilizzato il nome del server inserito. Se disattivi l'impostazione o non la imposti, il nome canonico del server sarà determinato tramite ricerca CNAME.</translation> <translation id="8764477907716150749">Questa norma è per uso interno di <ph name="PRODUCT_NAME" />.</translation> <translation id="8777369558049831576">Mostra una casella di controllo "Apri sempre" nella finestra di dialogo relativa ai protocolli esterni</translation> @@ -5073,6 +5100,7 @@ Se la norma viene impostata su false, l'opzione "Intestazioni e piè di pagina" non viene selezionata nella finestra di dialogo dell'anteprima di stampa e l'utente non può modificarla. Se la norma viene impostata su true, l'opzione "Intestazioni e piè di pagina" viene selezionata nella finestra di dialogo dell'anteprima di stampa e l'utente non può modificarla.</translation> +<translation id="9213751049772256263">Disattiva tutte le varianti</translation> <translation id="9217154963008402249">Frequenza dei pacchetti di rete di monitoraggio</translation> <translation id="922540222991413931">Configura fonti di installazione di estensioni, applicazioni e script utente</translation> <translation id="924557436754151212">Importa password salvate dal browser predefinito alla prima esecuzione</translation>
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb index fb341ee..da44cae 100644 --- a/components/policy/resources/policy_templates_ja.xtb +++ b/components/policy/resources/policy_templates_ja.xtb
@@ -4805,15 +4805,6 @@ <translation id="8757552286070680084">Wilco DTC の設定</translation> <translation id="8758831693895931466">クラウド管理への登録を必須にする</translation> <translation id="8759829385824155666">許可されている Kerberos 暗号化タイプ</translation> -<translation id="87635449713742708">このポリシーでは、ネットワーク用のコードがブラウザ プロセスで実行されます。 - - デフォルトでは、このポリシーは無効です。有効にした場合、ネットワーク プロセスがサンドボックス化されると、ユーザーはセキュリティの問題から保護されなくなります。 - - このポリシーは、企業がネットワーク API のフックに依存しないサードパーティのソフトウェアに移行できるようにすることを目的としたものです。LSP や Win32 API のパッチ適用にはプロキシ サーバーをおすすめします。 - - このポリシーを設定しない場合、ネットワーク コードは、デフォルトでブラウザ プロセス外で実行されます。 - - このポリシーは <ph name="PRODUCT_NAME" /> バージョン 82 で削除されます。</translation> <translation id="8764119899999036911">標準の DNS 名と入力された元の名前のうちどちらを基準にして Kerberos SPN を生成するかを指定します。この設定を有効にすると CNAME 検索がスキップされ、入力されたサーバー名が使用されます。この設定を無効にするか未設定の場合、サーバーの標準名は CNAME 検索によって決まります。</translation> <translation id="8764477907716150749">このポリシーは、<ph name="PRODUCT_NAME" /> 自体が内部で使用するものです。</translation> <translation id="8777369558049831576">外部プロトコルに関するダイアログに [常に開く] チェックボックスを表示する。</translation>
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb index ee99538..8ed8b93 100644 --- a/components/policy/resources/policy_templates_ko.xtb +++ b/components/policy/resources/policy_templates_ko.xtb
@@ -4953,15 +4953,6 @@ <translation id="8757552286070680084">Wilco DTC 설정입니다.</translation> <translation id="8758831693895931466">필수 클라우드 관리 등록 사용</translation> <translation id="8759829385824155666">허용된 Kerberos 암호화 유형</translation> -<translation id="87635449713742708">이 정책은 네트워킹 코드가 브라우저 프로세스에서 실행되도록 강제합니다. - - 이 정책은 기본적으로 사용 안함으로 설정되어 있으며 사용 설정할 경우 네트워킹 프로세스가 샌드박스 처리되었을 때 사용자가 보안 문제에 노출될 수 있습니다. - - 이 정책은 기업이 네트워킹 API 연결에 종속되지 않는 타사 소프트웨어로 이전할 기회를 제공하기 위해 만들어졌습니다. LSP 및 Win32 API 패칭보다 프록시 서버를 권장합니다. - - 이 정책을 설정하지 않으면 네트워킹 코드가 기본적으로 브라우저 프로세스 외부에서 실행될 수 있습니다. - - 이 정책은 <ph name="PRODUCT_NAME" /> 버전 82에서 삭제됩니다.</translation> <translation id="8764119899999036911">생성된 Kerberos SPN이 표준 DNS 이름을 기반으로 하는지 또는 원래 입력된 이름을 기반으로 하는지 여부를 지정합니다. 이 설정을 사용하면 CNAME 조회를 건너뛰고 입력된 서버 이름을 사용합니다.
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb index 0779b688..5ec2ea56 100644 --- a/components/policy/resources/policy_templates_nl.xtb +++ b/components/policy/resources/policy_templates_nl.xtb
@@ -4898,15 +4898,6 @@ <translation id="8757552286070680084">Wilco DTC-configuratie</translation> <translation id="8758831693895931466">Verplichte inschrijving voor cloudbeheer inschakelen</translation> <translation id="8759829385824155666">Toegestane Kerberos-versleutelingstypen</translation> -<translation id="87635449713742708">Met dit beleid wordt afgedwongen dat netwerkcode wordt uitgevoerd in het browserproces. - - Dit beleid is standaard uitgeschakeld. Indien ingeschakeld, worden gebruikers blootgesteld aan beveiligingsproblemen als het netwerkproces in een sandbox wordt uitgevoerd. - - Dit beleid is bedoeld om bedrijven de kans te geven naar software van derden te migreren die niet afhankelijk is van hooking van de netwerk-API's. Proxyservers krijgen de voorkeur boven LSP's en Win32 API-patching. - - Als dit beleid niet is ingesteld, wordt de netwerkcode standaard uitgevoerd buiten het browserproces. - - Dit beleid wordt verwijderd in <ph name="PRODUCT_NAME" />-versie 82.</translation> <translation id="8764119899999036911">Hiermee wordt gespecificeerd of de gegenereerde Kerberos-SPN wordt gebaseerd op de canonieke DNS-naam of de oorspronkelijk opgegeven naam. Als je deze instelling inschakelt, wordt de CNAME-lookup overgeslagen en wordt de servernaam gebruikt zoals deze is opgegeven.
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb index 34275c4b..704e85e6 100644 --- a/components/policy/resources/policy_templates_pt-BR.xtb +++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -3424,7 +3424,7 @@ <translation id="6464074037294098618">Ativa o Preenchimento automático de endereços</translation> <translation id="6467613372414922590">Permitir hosts de mensagens nativas no nível do usuário (instalados sem permissão do administrador)</translation> <translation id="6468980648680553776">O uso desta política foi suspenso. Use RemoteAccessHostClientDomainList.</translation> -<translation id="6473623140202114570">Configure a lista de domínios em que a política Safe Browsing não acionará avisos.</translation> +<translation id="6473623140202114570">Configure a lista de domínios em que a política Navegação segura não acionará avisos.</translation> <translation id="6487780893361255867">Use a implementação legada de <ph name="CORS" /> em vez do novo <ph name="CORS" />. Se esta configuração for definida como verdadeira, a implementação legada será usada e precisará ser compatível com versões anteriores. @@ -4802,15 +4802,6 @@ <translation id="8757552286070680084">Configuração do DTC wilco</translation> <translation id="8758831693895931466">Permite a inscrição obrigatória no gerenciamento em nuvem</translation> <translation id="8759829385824155666">Permitir tipos de criptografia Kerberos</translation> -<translation id="87635449713742708">Esta política força o código de rede a ser executado no processo do navegador. - - A política fica desativada por padrão e, se ativada, deixa os usuários vulneráveis a problemas de segurança quando o processo de rede está no sandbox. - - Esta política tem como objetivo oferecer às empresas a oportunidade de migrar para um software de terceiros que não dependa de hook das APIs de rede. Recomendamos o uso de servidores proxy em vez da aplicação de patches de API Win32 e LSPs. - - Se esta política não for configurada, o código de rede será executado fora do processo do navegador por padrão. - - Esta política será removida na versão 82 do <ph name="PRODUCT_NAME" />.</translation> <translation id="8764119899999036911">Especifica se o SPN do Kerberos se baseia no nome DNS canônico ou no nome original inserido. Se ativar esta configuração, a pesquisa CNAME será ignorada e o nome do servidor será usado como inserido. Se desativar essa configuração ou a deixar sem definição, o nome canônico do servidor será determinado através da pesquisa CNAME.</translation> <translation id="8764477907716150749">Esta política é destinada a uso interno pelo próprio <ph name="PRODUCT_NAME" />.</translation> <translation id="8777369558049831576">Exibir uma caixa de seleção "Sempre aberto" na caixa de diálogo do protocolo externo.</translation>
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb index 61a1045..98c89fd 100644 --- a/components/policy/resources/policy_templates_ru.xtb +++ b/components/policy/resources/policy_templates_ru.xtb
@@ -4835,15 +4835,6 @@ <translation id="8757552286070680084">Настроить параметры Wilco DTC</translation> <translation id="8758831693895931466">Включить обязательную регистрацию в сервисе для управления облачными данными</translation> <translation id="8759829385824155666">Типы шифрования Kerberos разрешены</translation> -<translation id="87635449713742708">Это правило принудительно запускает сетевой код в процессе браузера. - - По умолчанию правило отключено. Если оно включено, безопасность пользователей оказывается под угрозой, как только сетевой процесс запускается в изолированной среде. - - Это правило предназначено для компаний, которые хотят перейти на стороннее программное обеспечение, не зависящее от перехвата функций сетевых API. Вместо того, чтобы исправлять API LSP и Win32, рекомендуется использовать прокси-серверы. - - Если это правило не настроено, по умолчанию сетевой код запустится вне процесса браузера. - - В <ph name="PRODUCT_NAME" /> 82 это правило будет удалено.</translation> <translation id="8764119899999036911">Указывает, создано ли название SPN Kerberos на основе канонического названия DNS или является оригинальным. Если этот параметр включен, поиск CNAME не выполняется, а название сервера используется в том виде, в каком оно было указано. Если он отключен, каноническое название сервера будет определяться с помощью поиска CNAME.</translation> <translation id="8764477907716150749">Это внутреннее правило <ph name="PRODUCT_NAME" />.</translation> <translation id="8777369558049831576">Показывать флажок "Запускать всегда" в диалоговом окне внешнего протокола</translation>
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb index 69bcaa6..61b3c55 100644 --- a/components/policy/resources/policy_templates_th.xtb +++ b/components/policy/resources/policy_templates_th.xtb
@@ -4820,15 +4820,6 @@ <translation id="8757552286070680084">การกำหนดค่า Wilco DTC</translation> <translation id="8758831693895931466">เปิดใช้การลงทะเบียนการจัดการระบบคลาวด์ที่บังคับ</translation> <translation id="8759829385824155666">ประเภทของการเข้ารหัสลับ Kerberos ที่อนุญาต</translation> -<translation id="87635449713742708">นโยบายนี้บังคับให้เรียกใช้โค้ดเครือข่ายในกระบวนการของเบราว์เซอร์ - - ระบบจะปิดใช้นโยบายนี้ไว้โดยค่าเริ่มต้น และหากเปิดใช้ ผู้ใช้จะมีความเสี่ยงต่อปัญหาด้านความปลอดภัยเมื่อมีการแซนด์บ็อกซ์กระบวนการของเครือข่าย - - นโยบายนี้มีไว้เพื่อเปิดโอกาสให้องค์กรย้ายข้อมูลไปยังซอฟต์แวร์ของบุคคลที่สามที่ไม่ได้ใช้การฮุก API เครือข่าย ขอแนะนำให้ใช้พร็อกซีเซิร์ฟเวอร์กับการแพตช์ LSPs และ Win32 API - - หากไม่ได้ตั้งค่านโยบายนี้ โค้ดเครือข่ายจะทำงานนอกกระบวนการของเบราว์เซอร์โดยค่าเริ่มต้น - - เราจะนำนโยบายนี้ออกใน <ph name="PRODUCT_NAME" /> เวอร์ชัน 82</translation> <translation id="8764119899999036911">กำหนดว่า Kerberos SPN ที่สร้างจะอยู่บนพื้นฐานของชื่อ DNS มาตรฐานหรือชื่อเดิมที่ป้อนไว้ หากคุณเปิดใช้งานการตั้งค่านี้ การค้นหา CNAME จะถูกข้ามไปและจะใช้ชื่อเซิร์ฟเวอร์ตามที่ป้อน หากคุณปิดใช้งานการตั้งค่านี้หรือปล่อยไว้ไม่ได้ตั้งค่า ชื่อมาตรฐานของเซิร์ฟเวอร์จะถูกกำหนดโดยผ่านการค้นหา CNAME</translation> <translation id="8764477907716150749">นโยบายนี้มีไว้สำหรับการใช้งานภายในของ <ph name="PRODUCT_NAME" /> เอง</translation> <translation id="8777369558049831576">แสดงช่องทำเครื่องหมาย "เปิดตลอดเวลา" ในกล่องโต้ตอบของโปรโตคอลภายนอก</translation>
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb index 66eeb48..32c2e0c0 100644 --- a/components/policy/resources/policy_templates_tr.xtb +++ b/components/policy/resources/policy_templates_tr.xtb
@@ -4909,15 +4909,6 @@ <translation id="8757552286070680084">Wilco DTC yapılandırması</translation> <translation id="8758831693895931466">Zorunlu bulut yönetimi kaydını etkinleştir</translation> <translation id="8759829385824155666">İzin verilen Kerberos şifreleme türleri</translation> -<translation id="87635449713742708">Bu politika, ağ iletişimi kodunu tarayıcı işleminde çalışmaya zorlar. - - Bu politika varsayılan olarak devre dışıdır ve etkinleştirilmesi halinde, ağ iletişimi işlemi korumalı alan içine alındıktan sonra kullanıcıları güvenlik sorunlarına karşı savunmasız hale getirir. - - Bu politikanın amacı, işletmelere ağ iletişimi API'lerinin tutulmasına bel bağlamayan üçüncü taraf yazılımlarına geçme fırsatı vermektir. LSP'lerden ve Win32 API yamalarından ziyade proxy sunucuları önerilir. - - Bu politika ayarlanmazsa varsayılan olarak ağ iletişimi kodunun tarayıcı işlemi kalmaz. - - Bu politika, <ph name="PRODUCT_NAME" /> 82 sürümünde kaldırılacaktır.</translation> <translation id="8764119899999036911">Kerberos SPN'sinin standart DNS adına mı, yoksa girilen orijinal ada mı dayalı olduğunu belirtir. Bu ayarı etkinleştirirseniz, CNAME araması atlanır ve sunucu adı girildiği gibi kullanılır.
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb index 4a3c74a..f8a1fb3 100644 --- a/components/policy/resources/policy_templates_uk.xtb +++ b/components/policy/resources/policy_templates_uk.xtb
@@ -4863,15 +4863,6 @@ <translation id="8757552286070680084">Конфігурація контролера діагностики й телеметрії (DTC) Wilco</translation> <translation id="8758831693895931466">Увімкнути обов’язкову реєстрацію для хмарного керування</translation> <translation id="8759829385824155666">Дозволені типи шифрування Kerberos</translation> -<translation id="87635449713742708">Це правило ініціює виконання коду мережі у веб-переглядачі. - - Це правило вимкнено за умовчанням. Якщо його ввімкнути, у користувачів може виникнути проблема з безпекою, коли мережевий процес проходить через ізольоване програмне середовище. - - Це правило дає можливість підприємствам перейти на програмне забезпечення сторонніх розробників, що не залежить від обробки мережевих API. Замість LSP та виправлення Win32 API рекомендовано використовувати проксі-сервери. - - Якщо це правило не налаштовано, мережевий код виконуватиметься за межами процесу веб-переглядача за умовчанням. - - У <ph name="PRODUCT_NAME" /> 82 це правило буде вилучено.</translation> <translation id="8764119899999036911">Указує, чи ім’я учасника сервера (SPN) за протоколом Kerberos створено на основі канонічного DNS-імені чи введеного оригінального імені. Якщо це налаштування ввімкнено, пошук CNAME пропускається та використовується введене ім’я сервера. Якщо це налаштування вимкнено чи не встановлено, канонічне ім’я сервера визначається через пошук CNAME.</translation> <translation id="8764477907716150749">Це правило лише для внутрішнього використання <ph name="PRODUCT_NAME" />.</translation> <translation id="8777369558049831576">Показувати опцію "Завжди відкривати" у вікні зовнішнього протоколу.</translation>
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb index 05b62b48..7483d56 100644 --- a/components/policy/resources/policy_templates_vi.xtb +++ b/components/policy/resources/policy_templates_vi.xtb
@@ -4940,15 +4940,6 @@ <translation id="8757552286070680084">Cấu hình bộ điều khiển chẩn đoán và đo từ xa (DTC) wilco</translation> <translation id="8758831693895931466">Bật đăng ký quản lý đám mây bắt buộc</translation> <translation id="8759829385824155666">Các loại mã hóa Kerberos được cho phép</translation> -<translation id="87635449713742708">Chính sách này buộc mã nối mạng chạy trong quá trình chạy trình duyệt. - - Chính sách này được tắt theo mặc định. Nếu bạn bật chính sách này, thì người dùng sẽ dễ gặp phải các sự cố bảo mật sau khi quá trình nối mạng được chạy trong hộp cát. - - Chính sách này nhằm mang đến cho doanh nghiệp cơ hội di chuyển sang phần mềm của bên thứ 3 không phụ thuộc vào việc kết nối các API nối mạng. Thay vì vá API Win32 và LSP, bạn nên sử dụng máy chủ proxy. - - Nếu bạn không đặt chính sách này, thì mã nối mạng sẽ chạy ngoài quá trình chạy trình duyệt theo mặc định. - - Chính sách này sẽ bị xóa trong phiên bản <ph name="PRODUCT_NAME" /> 82.</translation> <translation id="8764119899999036911">Chỉ định Kerberos SPN được tạo sẽ dựa trên tên DNS chuẩn hay tên gốc đã nhập. Nếu bạn bật cài đặt này, tra cứu CNAME sẽ được bỏ qua và tên máy chủ sẽ giống như tên đã nhập.
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb index 0aae047..a859311 100644 --- a/components/policy/resources/policy_templates_zh-CN.xtb +++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -4732,15 +4732,6 @@ <translation id="8757552286070680084">Wilco DTC 配置</translation> <translation id="8758831693895931466">启用强制性云管理注册</translation> <translation id="8759829385824155666">允许的 Kerberos 加密类型</translation> -<translation id="87635449713742708">此政策会强制网络代码在浏览器进程中运行。 - - 此政策默认处于停用状态;若被启用,则会在网络进程被沙盒化后使用户面临安全问题的威胁。 - - 此政策旨在使企业有机会迁移到不依靠与网络 API 挂钩来运行的第三方软件。我们建议通过 LSP 和 Win32 API 修补来使用代理服务器。 - - 如果此政策未设置,网络代码默认会在浏览器进程之外运行。 - - 在 <ph name="PRODUCT_NAME" /> 版本 82 中,此政策将被移除。</translation> <translation id="8764119899999036911">指定 Kerberos SPN 是基于规范 DNS 名称还是基于输入的原始名称。如果您启用了此设置,系统将跳过 CNAME 查找步骤,并使用输入的服务器名称。如果您停用或未配置此设置,系统将通过 CNAME 查找来确定服务器的规范名称。</translation> <translation id="8764477907716150749">此政策仅供 <ph name="PRODUCT_NAME" /> 在内部使用。</translation> <translation id="8777369558049831576">在外部协议对话框中显示“始终打开”复选框。</translation>
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb index d2fa9b4b..8cd26cb 100644 --- a/components/policy/resources/policy_templates_zh-TW.xtb +++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -4769,15 +4769,6 @@ <translation id="8757552286070680084">設定 Wilco DTC</translation> <translation id="8758831693895931466">啟用雲端管理強制註冊設定</translation> <translation id="8759829385824155666">允許的 Kerberos 加密類型</translation> -<translation id="87635449713742708">這項政策會強制網路程式碼在瀏覽器程序中執行。 - - 這項政策預設為停用;如果你啟用政策,當網路程序採用沙箱機制時,使用者就可能會遇到安全性問題。 - - 設置這項政策是為了讓企業能移轉到不需掛接網路 API 的第三方軟體。建議你在 LSP 和 Win32 API 修補程式使用 Proxy 伺服器。 - - 如果不設定這項政策,網路程式碼依預設會在瀏覽器程序外執行。 - - 這項政策將在 <ph name="PRODUCT_NAME" /> 第 82 版中移除。</translation> <translation id="8764119899999036911">指定是否要根據標準 DNS 名稱或輸入的原始名稱來產生 Kerberos SPN。如果啟用這項設定,系統會略過 CNAME 查詢,並且使用先前輸入的伺服器名稱。如果你停用或未調整這項設定,伺服器的標準名稱會透過 CNAME 查詢決定。</translation> <translation id="8764477907716150749">這項政策僅供 <ph name="PRODUCT_NAME" /> 內部使用。</translation> <translation id="8777369558049831576">在外部通訊協定對話方塊中顯示「一律開啟」核取方塊。</translation>
diff --git a/components/printing_component_strings.grdp b/components/printing_component_strings.grdp index a922d13..da95235 100644 --- a/components/printing_component_strings.grdp +++ b/components/printing_component_strings.grdp
@@ -200,7 +200,7 @@ First print page </message> <message name="IDS_PRINT_JOB_SHEETS_JOB_BOTH_SHEET" desc="PWG5100.3 (6.2) Additional values for the IPP 'job-sheets' Job Template Attribute: job-both-sheet"> - Both sheet + Both sheets </message> <message name="IDS_PRINT_JOB_SHEETS_JOB_END_SHEET" desc="PWG5100.3 (6.2) Additional values for the IPP 'job-sheets' Job Template Attribute: job-end-sheet. 'End' is an adjective."> End sheet
diff --git a/components/sessions/BUILD.gn b/components/sessions/BUILD.gn index 2d8c19c..bee84f6 100644 --- a/components/sessions/BUILD.gn +++ b/components/sessions/BUILD.gn
@@ -138,6 +138,7 @@ "//components/prefs", "//components/tab_groups", "//components/variations", + "//crypto", "//skia", "//ui/base", "//ui/gfx", @@ -182,6 +183,7 @@ } testonly = true sources = [ + "core/command_storage_backend_unittest.cc", "core/serialized_navigation_entry_unittest.cc", "core/session_id_generator_unittest.cc", "core/snapshotting_session_backend_unittest.cc",
diff --git a/components/sessions/DEPS b/components/sessions/DEPS index 2d08392..2c9ec090 100644 --- a/components/sessions/DEPS +++ b/components/sessions/DEPS
@@ -1,6 +1,7 @@ include_rules = [ "+components/history/core/common", "+components/variations", + "+crypto", "+ui/base", "+ui/gfx", ]
diff --git a/components/sessions/core/command_storage_backend.cc b/components/sessions/core/command_storage_backend.cc index bb609bf..e42745f 100644 --- a/components/sessions/core/command_storage_backend.cc +++ b/components/sessions/core/command_storage_backend.cc
@@ -5,22 +5,28 @@ #include "components/sessions/core/command_storage_backend.h" #include <stdint.h> +#include <algorithm> #include <limits> #include <utility> #include "base/files/file.h" #include "base/files/file_util.h" #include "build/build_config.h" +#include "crypto/aead.h" namespace sessions { +namespace { + // File version number. -static const int32_t kFileCurrentVersion = 1; +constexpr int32_t kFileCurrentVersion = 1; +constexpr int32_t kEncryptedFileCurrentVersion = 2; // The signature at the beginning of the file = SSNS (Sessions). -static const int32_t kFileSignature = 0x53534E53; +constexpr int32_t kFileSignature = 0x53534E53; -namespace { +// Length (in bytes) of the nonce (used when encrypting). +constexpr int kNonceLength = 12; // The file header is the first bytes written to the file, // and is used to identify the file as one written by us. @@ -40,13 +46,16 @@ typedef sessions::SessionCommand::id_type id_type; typedef sessions::SessionCommand::size_type size_type; - explicit SessionFileReader(const base::FilePath& path) - : errored_(false), - buffer_(CommandStorageBackend::kFileReadBufferSize, 0), - buffer_position_(0), - available_count_(0) { - file_.reset( - new base::File(path, base::File::FLAG_OPEN | base::File::FLAG_READ)); + SessionFileReader(const base::FilePath& path, + const std::vector<uint8_t>& crypto_key) + : buffer_(CommandStorageBackend::kFileReadBufferSize, 0), + crypto_key_(crypto_key) { + if (!crypto_key.empty()) { + aead_ = std::make_unique<crypto::Aead>(crypto::Aead::AES_256_GCM); + aead_->Init(base::make_span(crypto_key_)); + } + file_ = std::make_unique<base::File>( + path, base::File::FLAG_OPEN | base::File::FLAG_READ); } // Reads the contents of the file specified in the constructor, returning // true on success, and filling up |commands| with commands. @@ -59,6 +68,16 @@ // the end of file was successfully reached. std::unique_ptr<sessions::SessionCommand> ReadCommand(); + // Decrypts a previously encrypted command. Returns the new command on + // success. + std::unique_ptr<sessions::SessionCommand> CreateCommandFromEncrypted( + const char* data, + size_type length); + + // Creates a command from the previously written value. + std::unique_ptr<sessions::SessionCommand> CreateCommand(const char* data, + size_type length); + // Shifts the unused portion of buffer_ to the beginning and fills the // remaining portion with data from the file. Returns false if the buffer // couldn't be filled. A return value of false only signals an error if @@ -66,19 +85,26 @@ bool FillBuffer(); // Whether an error condition has been detected ( - bool errored_; + bool errored_ = false; // As we read from the file, data goes here. std::string buffer_; + const std::vector<uint8_t> crypto_key_; + + std::unique_ptr<crypto::Aead> aead_; + // The file. std::unique_ptr<base::File> file_; // Position in buffer_ of the data. - size_t buffer_position_; + size_t buffer_position_ = 0; // Number of available bytes; relative to buffer_position_. - size_t available_count_; + size_t available_count_ = 0; + + // Count of the number of commands encountered. + int command_counter_ = 0; DISALLOW_COPY_AND_ASSIGN(SessionFileReader); }; @@ -91,9 +117,13 @@ int read_count; read_count = file_->ReadAtCurrentPos(reinterpret_cast<char*>(&header), sizeof(header)); - if (read_count != sizeof(header) || header.signature != kFileSignature || - header.version != kFileCurrentVersion) - return false; + if (read_count != sizeof(header) || header.signature != kFileSignature) { + const bool encrypt = aead_.get() != nullptr; + if ((encrypt && header.version != kEncryptedFileCurrentVersion) || + (!encrypt && header.version != kFileCurrentVersion)) { + return false; + } + } std::vector<std::unique_ptr<sessions::SessionCommand>> read_commands; for (std::unique_ptr<sessions::SessionCommand> command = ReadCommand(); @@ -138,21 +168,63 @@ return nullptr; } } - const id_type command_id = buffer_[buffer_position_]; - // NOTE: command_size includes the size of the id, which is not part of - // the contents of the SessionCommand. - std::unique_ptr<sessions::SessionCommand> command = - std::make_unique<sessions::SessionCommand>( - command_id, command_size - sizeof(id_type)); - if (command_size > sizeof(id_type)) { - memcpy(command->contents(), &(buffer_[buffer_position_ + sizeof(id_type)]), - command_size - sizeof(id_type)); + std::unique_ptr<SessionCommand> command; + if (aead_) { + command = CreateCommandFromEncrypted(buffer_.c_str() + buffer_position_, + command_size); + } else { + command = CreateCommand(buffer_.c_str() + buffer_position_, command_size); } + ++command_counter_; buffer_position_ += command_size; available_count_ -= command_size; return command; } +std::unique_ptr<sessions::SessionCommand> +SessionFileReader::CreateCommandFromEncrypted(const char* data, + size_type length) { + // This means the nonce overflowed and we're reusing a nonce. + // CommandStorageBackend should never write enough commands to trigger this, + // so assume we should stop. + if (command_counter_ < 0) + return nullptr; + + char nonce[kNonceLength]; + memset(nonce, 0, kNonceLength); + memcpy(nonce, &command_counter_, sizeof(command_counter_)); + std::string plain_text; + if (!aead_->Open(base::StringPiece(data, length), + base::StringPiece(nonce, kNonceLength), base::StringPiece(), + &plain_text)) { + DVLOG(1) << "SessionFileReader::ReadCommand, decryption failed"; + return nullptr; + } + if (plain_text.size() < sizeof(id_type)) { + DVLOG(1) << "SessionFileReader::ReadCommand, size too small"; + return nullptr; + } + return CreateCommand(plain_text.c_str(), plain_text.size()); +} + +std::unique_ptr<sessions::SessionCommand> SessionFileReader::CreateCommand( + const char* data, + size_type length) { + // Callers should have checked the size. + DCHECK_GE(length, sizeof(id_type)); + const id_type command_id = data[0]; + // NOTE: |length| includes the size of the id, which is not part of the + // contents of the SessionCommand. + std::unique_ptr<sessions::SessionCommand> command = + std::make_unique<sessions::SessionCommand>(command_id, + length - sizeof(id_type)); + if (length > sizeof(id_type)) { + memcpy(command->contents(), &(data[sizeof(id_type)]), + length - sizeof(id_type)); + } + return command; +} + bool SessionFileReader::FillBuffer() { if (available_count_ > 0 && buffer_position_ > 0) { // Shift buffer to beginning. @@ -181,18 +253,41 @@ // static const int CommandStorageBackend::kFileReadBufferSize = 1024; +// static +const SessionCommand::size_type + CommandStorageBackend::kEncryptionOverheadInBytes = 16; + CommandStorageBackend::CommandStorageBackend( scoped_refptr<base::SequencedTaskRunner> owning_task_runner, const base::FilePath& path) - : RefCountedDeleteOnSequence(owning_task_runner), path_(path) { - // NOTE: this is invoked on the main thread, don't do file access here. -} + : RefCountedDeleteOnSequence(owning_task_runner), path_(path) {} void CommandStorageBackend::AppendCommands( std::vector<std::unique_ptr<sessions::SessionCommand>> commands, - bool truncate) { + bool truncate, + const std::vector<uint8_t>& crypto_key) { InitIfNecessary(); + if (truncate) { + const bool was_encrypted = IsEncrypted(); + const bool encrypt = !crypto_key.empty(); + if (was_encrypted != encrypt) { + // The header is different when encrypting, so the file needs to be + // recreated. + CloseFile(); + } + if (encrypt) { + aead_ = std::make_unique<crypto::Aead>(crypto::Aead::AES_256_GCM); + crypto_key_ = crypto_key; + aead_->Init(base::make_span(crypto_key_)); + } else { + aead_.reset(); + } + } else { + // |crypto_key| is only used when |truncate| is true. + DCHECK(crypto_key.empty()); + } + // Make sure and check |file_|, if opening the file failed |file_| will be // null. if (truncate || !file_ || !file_->IsValid()) @@ -207,6 +302,7 @@ void CommandStorageBackend::ReadCurrentSessionCommands( const base::CancelableTaskTracker::IsCanceledCallback& is_canceled, + const std::vector<uint8_t>& crypto_key, GetCommandsCallback callback) { if (is_canceled.Run()) return; @@ -214,38 +310,21 @@ InitIfNecessary(); std::vector<std::unique_ptr<sessions::SessionCommand>> commands; - ReadCommandsFromFile(path_, &commands); + ReadCommandsFromFile(path_, crypto_key, &commands); std::move(callback).Run(std::move(commands)); } bool CommandStorageBackend::AppendCommandsToFile( base::File* file, const std::vector<std::unique_ptr<sessions::SessionCommand>>& commands) { - for (auto i = commands.begin(); i != commands.end(); ++i) { - int wrote; - const size_type content_size = static_cast<size_type>((*i)->size()); - const size_type total_size = content_size + sizeof(id_type); - wrote = file->WriteAtCurrentPos(reinterpret_cast<const char*>(&total_size), - sizeof(total_size)); - if (wrote != sizeof(total_size)) { - NOTREACHED() << "error writing"; - return false; - } - id_type command_id = (*i)->id(); - wrote = file->WriteAtCurrentPos(reinterpret_cast<char*>(&command_id), - sizeof(command_id)); - if (wrote != sizeof(command_id)) { - NOTREACHED() << "error writing"; - return false; - } - if (content_size > 0) { - wrote = file->WriteAtCurrentPos(reinterpret_cast<char*>((*i)->contents()), - content_size); - if (wrote != content_size) { - NOTREACHED() << "error writing"; + for (auto& command : commands) { + if (IsEncrypted()) { + if (!AppendEncryptedCommandToFile(file, *(command.get()))) return false; - } + } else if (!AppendCommandToFile(file, *(command.get()))) { + return false; } + commands_written_++; } #if defined(OS_CHROMEOS) file->Flush(); @@ -266,8 +345,9 @@ bool CommandStorageBackend::ReadCommandsFromFile( const base::FilePath& path, + const std::vector<uint8_t>& crypto_key, std::vector<std::unique_ptr<sessions::SessionCommand>>* commands) { - SessionFileReader file_reader(path); + SessionFileReader file_reader(path, crypto_key); return file_reader.Read(commands); } @@ -289,6 +369,7 @@ } if (!file_) file_ = OpenAndWriteHeader(path_); + commands_written_ = 0; } std::unique_ptr<base::File> CommandStorageBackend::OpenAndWriteHeader( @@ -302,12 +383,93 @@ return nullptr; FileHeader header; header.signature = kFileSignature; - header.version = kFileCurrentVersion; - int wrote = - file->WriteAtCurrentPos(reinterpret_cast<char*>(&header), sizeof(header)); - if (wrote != sizeof(header)) + header.version = + IsEncrypted() ? kEncryptedFileCurrentVersion : kFileCurrentVersion; + if (file->WriteAtCurrentPos(reinterpret_cast<char*>(&header), + sizeof(header)) != sizeof(header)) { return nullptr; + } + commands_written_ = 0; return file; } +bool CommandStorageBackend::AppendCommandToFile( + base::File* file, + const sessions::SessionCommand& command) { + const size_type content_size = + std::min(command.size(), + static_cast<size_type>(std::numeric_limits<size_type>::max() - + sizeof(id_type))); + const size_type total_size = content_size + sizeof(id_type); + if (file->WriteAtCurrentPos(reinterpret_cast<const char*>(&total_size), + sizeof(total_size)) != sizeof(total_size)) { + DVLOG(1) << "error writing"; + return false; + } + id_type command_id = command.id(); + if (file->WriteAtCurrentPos(reinterpret_cast<char*>(&command_id), + sizeof(command_id)) != sizeof(command_id)) { + DVLOG(1) << "error writing"; + return false; + } + if (content_size == 0) + return true; + + if (file->WriteAtCurrentPos(reinterpret_cast<const char*>(command.contents()), + content_size) != content_size) { + DVLOG(1) << "error writing"; + return false; + } + return true; +} + +bool CommandStorageBackend::AppendEncryptedCommandToFile( + base::File* file, + const sessions::SessionCommand& command) { + // This means the nonce overflowed and we're reusing a nonce. This class + // should never write enough commands to trigger this, so assume we should + // stop. + if (commands_written_ < 0) + return false; + DCHECK(IsEncrypted()); + char nonce[kNonceLength]; + memset(nonce, 0, kNonceLength); + memcpy(nonce, &commands_written_, sizeof(commands_written_)); + + // Encryption adds overhead, resulting in a slight reduction in the available + // space for each command. Chop any contents beyond the available size. + const size_type command_size = std::min( + command.size(), + static_cast<size_type>(std::numeric_limits<size_type>::max() - + sizeof(id_type) - kEncryptionOverheadInBytes)); + std::vector<char> command_and_id(command_size + sizeof(id_type)); + const id_type command_id = command.id(); + memcpy(&command_and_id.front(), reinterpret_cast<const char*>(&command_id), + sizeof(id_type)); + memcpy(&(command_and_id.front()) + sizeof(id_type), command.contents(), + command_size); + + std::string cipher_text; + aead_->Seal(base::StringPiece(&command_and_id.front(), command_and_id.size()), + base::StringPiece(nonce, kNonceLength), base::StringPiece(), + &cipher_text); + DCHECK_LE(cipher_text.size(), std::numeric_limits<size_type>::max()); + const size_type command_and_id_size = + static_cast<size_type>(cipher_text.size()); + + int wrote = file->WriteAtCurrentPos( + reinterpret_cast<const char*>(&command_and_id_size), + sizeof(command_and_id_size)); + if (wrote != sizeof(command_and_id_size)) { + DVLOG(1) << "error writing"; + return false; + } + wrote = file->WriteAtCurrentPos(cipher_text.c_str(), cipher_text.size()); + if (wrote != static_cast<int>(cipher_text.size())) { + DVLOG(1) << "error writing"; + return false; + } + return true; +} + } // namespace sessions
diff --git a/components/sessions/core/command_storage_backend.h b/components/sessions/core/command_storage_backend.h index 8119ea6..8fb526f 100644 --- a/components/sessions/core/command_storage_backend.h +++ b/components/sessions/core/command_storage_backend.h
@@ -21,6 +21,10 @@ class File; } +namespace crypto { +class Aead; +} + namespace sessions { // CommandStorageBackend is the backend used by CommandStorageManager. It writes @@ -39,6 +43,9 @@ // for testing. static const int kFileReadBufferSize; + // Number of bytes encryption adds. + static const size_type kEncryptionOverheadInBytes; + // Creates a CommandStorageBackend. This method is invoked on the MAIN thread, // and does no IO. The real work is done from Init, which is invoked on // a background task runer. @@ -54,15 +61,18 @@ } // Appends the specified commands to the current file. If |truncate| is true - // the file is truncated. + // the file is truncated. If |truncate| is true and |crypto_key| is non-empty, + // then all commands are encrypted using the supplied key. void AppendCommands( std::vector<std::unique_ptr<sessions::SessionCommand>> commands, - bool truncate); + bool truncate, + const std::vector<uint8_t>& crypto_key = std::vector<uint8_t>()); - // Invoked from the service to read the commands that make up the last - // session, invokes ReadLastSessionCommandsImpl to do the work. + // Reads the commands that make up the current session. If |crypto_key| + // is non-empty, it is used to decrypt the file. void ReadCurrentSessionCommands( const base::CancelableTaskTracker::IsCanceledCallback& is_canceled, + const std::vector<uint8_t>& crypto_key, GetCommandsCallback callback); bool inited() const { return inited_; } @@ -79,12 +89,12 @@ const base::FilePath& path() const { return path_; } - // Reads the commands from the current file. - // - // On success, the read commands are added to commands. It is up to the - // caller to delete the commands. + // Reads the commands from the specified file. If |crypto_key| is non-empty, + // it is used to decrypt the file. On success, the read commands are added to + // |commands|. bool ReadCommandsFromFile( const base::FilePath& path, + const std::vector<uint8_t>& crypto_key, std::vector<std::unique_ptr<sessions::SessionCommand>>* commands); // Closes the file. The next time AppendCommands() is called the file will @@ -112,6 +122,19 @@ base::File* file, const std::vector<std::unique_ptr<sessions::SessionCommand>>& commands); + // Writes |command| to |file|. Returns true on success. + bool AppendCommandToFile(base::File* file, + const sessions::SessionCommand& command); + + // Encrypts |command| and writes it to |file|. Returns true on success. + // The contents of the command and id are encrypted together. This is + // preceded by the length of the command. + bool AppendEncryptedCommandToFile(base::File* file, + const sessions::SessionCommand& command); + + // Returns true if commands are encrypted. + bool IsEncrypted() const { return !crypto_key_.empty(); } + // Path commands are saved to. const base::FilePath path_; @@ -122,6 +145,12 @@ // runner. bool inited_ = false; + std::vector<uint8_t> crypto_key_; + std::unique_ptr<crypto::Aead> aead_; + + // Incremented every time a command is written. + int commands_written_ = 0; + DISALLOW_COPY_AND_ASSIGN(CommandStorageBackend); };
diff --git a/components/sessions/core/command_storage_backend_unittest.cc b/components/sessions/core/command_storage_backend_unittest.cc new file mode 100644 index 0000000..bafb0d5 --- /dev/null +++ b/components/sessions/core/command_storage_backend_unittest.cc
@@ -0,0 +1,290 @@ +// Copyright 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/sessions/core/command_storage_backend.h" + +#include <stddef.h> +#include <limits> +#include <utility> + +#include "base/bind.h" +#include "base/files/file_util.h" +#include "base/files/scoped_temp_dir.h" +#include "base/memory/scoped_refptr.h" +#include "base/stl_util.h" +#include "base/strings/string_util.h" +#include "base/test/bind_test_util.h" +#include "base/test/task_environment.h" +#include "components/sessions/core/command_storage_manager.h" +#include "testing/gtest/include/gtest/gtest.h" + +using base::MakeRefCounted; + +using size_type = sessions::SessionCommand::size_type; +namespace sessions { +namespace { + +using SessionCommands = std::vector<std::unique_ptr<sessions::SessionCommand>>; + +struct TestData { + sessions::SessionCommand::id_type command_id; + std::string data; +}; + +std::unique_ptr<sessions::SessionCommand> CreateCommandFromData( + const TestData& data) { + std::unique_ptr<sessions::SessionCommand> command = + std::make_unique<sessions::SessionCommand>( + data.command_id, + static_cast<sessions::SessionCommand::size_type>(data.data.size())); + if (!data.data.empty()) + memcpy(command->contents(), data.data.c_str(), data.data.size()); + return command; +} + +bool IsCanceled() { + return false; +} + +} // namespace + +class CommandStorageBackendTest : public testing::Test { + protected: + void SetUp() override { + ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); + path_ = temp_dir_.GetPath().Append(FILE_PATH_LITERAL("Session")); + } + + void AssertCommandEqualsData(const TestData& data, + sessions::SessionCommand* command) { + EXPECT_EQ(data.command_id, command->id()); + EXPECT_EQ(data.data.size(), command->size()); + EXPECT_TRUE( + memcmp(command->contents(), data.data.c_str(), command->size()) == 0); + } + + scoped_refptr<CommandStorageBackend> CreateBackend() { + return MakeRefCounted<CommandStorageBackend>( + task_environment_.GetMainThreadTaskRunner(), path_); + } + + void ReadCurrentSessionCommands( + CommandStorageBackend* backend, + const std::vector<uint8_t>& crypto_key, + std::vector<std::unique_ptr<SessionCommand>>* commands) { + backend->ReadCurrentSessionCommands( + base::BindRepeating(&IsCanceled), crypto_key, + base::BindLambdaForTesting( + [&commands](std::vector<std::unique_ptr<SessionCommand>> result) { + *commands = std::move(result); + })); + } + + base::test::TaskEnvironment task_environment_; + base::FilePath path_; + base::ScopedTempDir temp_dir_; +}; + +TEST_F(CommandStorageBackendTest, SimpleReadWriteEncrypted) { + std::vector<uint8_t> key = CommandStorageManager::CreateCryptoKey(); + scoped_refptr<CommandStorageBackend> backend = CreateBackend(); + struct TestData data = {1, "a"}; + SessionCommands commands; + commands.push_back(CreateCommandFromData(data)); + backend->AppendCommands(std::move(commands), true, key); + ASSERT_TRUE(commands.empty()); + + // Read it back in. + backend = nullptr; + backend = CreateBackend(); + ReadCurrentSessionCommands(backend.get(), key, &commands); + + ASSERT_EQ(1U, commands.size()); + AssertCommandEqualsData(data, commands[0].get()); + + // Repeat, but with the wrong key. + backend = nullptr; + ++(key[0]); + backend = CreateBackend(); + ReadCurrentSessionCommands(backend.get(), key, &commands); + EXPECT_TRUE(commands.empty()); +} + +TEST_F(CommandStorageBackendTest, RandomDataEncrypted) { + struct TestData data[] = { + {1, "a"}, + {2, "ab"}, + {3, "abc"}, + {4, "abcd"}, + {5, "abcde"}, + {6, "abcdef"}, + {7, "abcdefg"}, + {8, "abcdefgh"}, + {9, "abcdefghi"}, + {10, "abcdefghij"}, + {11, "abcdefghijk"}, + {12, "abcdefghijkl"}, + {13, "abcdefghijklm"}, + }; + + const std::vector<uint8_t> key = CommandStorageManager::CreateCryptoKey(); + for (size_t i = 0; i < base::size(data); ++i) { + scoped_refptr<CommandStorageBackend> backend = CreateBackend(); + SessionCommands commands; + if (i != 0) { + // Read previous data. + ReadCurrentSessionCommands(backend.get(), key, &commands); + ASSERT_EQ(i, commands.size()); + for (auto j = commands.begin(); j != commands.end(); ++j) + AssertCommandEqualsData(data[j - commands.begin()], j->get()); + + backend->AppendCommands(std::move(commands), true, key); + } + commands.push_back(CreateCommandFromData(data[i])); + backend->AppendCommands(std::move(commands), i == 0, + i == 0 ? key : std::vector<uint8_t>()); + } +} + +TEST_F(CommandStorageBackendTest, BigDataEncrypted) { + struct TestData data[] = { + {1, "a"}, + {2, "ab"}, + }; + + const std::vector<uint8_t> key = CommandStorageManager::CreateCryptoKey(); + scoped_refptr<CommandStorageBackend> backend = CreateBackend(); + std::vector<std::unique_ptr<sessions::SessionCommand>> commands; + + commands.push_back(CreateCommandFromData(data[0])); + const sessions::SessionCommand::size_type big_size = + CommandStorageBackend::kFileReadBufferSize + 100; + const sessions::SessionCommand::id_type big_id = 50; + std::unique_ptr<sessions::SessionCommand> big_command = + std::make_unique<sessions::SessionCommand>(big_id, big_size); + reinterpret_cast<char*>(big_command->contents())[0] = 'a'; + reinterpret_cast<char*>(big_command->contents())[big_size - 1] = 'z'; + commands.push_back(std::move(big_command)); + commands.push_back(CreateCommandFromData(data[1])); + backend->AppendCommands(std::move(commands), true, key); + + backend = nullptr; + backend = CreateBackend(); + + ReadCurrentSessionCommands(backend.get(), key, &commands); + ASSERT_EQ(3U, commands.size()); + AssertCommandEqualsData(data[0], commands[0].get()); + AssertCommandEqualsData(data[1], commands[2].get()); + + EXPECT_EQ(big_id, commands[1]->id()); + ASSERT_EQ(big_size, commands[1]->size()); + EXPECT_EQ('a', reinterpret_cast<char*>(commands[1]->contents())[0]); + EXPECT_EQ('z', + reinterpret_cast<char*>(commands[1]->contents())[big_size - 1]); +} + +TEST_F(CommandStorageBackendTest, EmptyCommandEncrypted) { + TestData empty_command; + empty_command.command_id = 1; + std::vector<uint8_t> key = CommandStorageManager::CreateCryptoKey(); + scoped_refptr<CommandStorageBackend> backend = CreateBackend(); + SessionCommands empty_commands; + empty_commands.push_back(CreateCommandFromData(empty_command)); + std::vector<uint8_t> key2 = key; + ++(key2[0]); + backend->AppendCommands(std::move(empty_commands), true, key2); + + backend = nullptr; + backend = CreateBackend(); + std::vector<std::unique_ptr<sessions::SessionCommand>> commands; + ReadCurrentSessionCommands(backend.get(), key2, &commands); + ASSERT_EQ(1U, commands.size()); + AssertCommandEqualsData(empty_command, commands[0].get()); +} + +// Writes a command, appends another command with reset to true, then reads +// making sure we only get back the second command. +TEST_F(CommandStorageBackendTest, TruncateEncrypted) { + std::vector<uint8_t> key = CommandStorageManager::CreateCryptoKey(); + scoped_refptr<CommandStorageBackend> backend = CreateBackend(); + struct TestData first_data = {1, "a"}; + SessionCommands commands; + commands.push_back(CreateCommandFromData(first_data)); + backend->AppendCommands(std::move(commands), true, key); + + // Write another command, this time resetting the file when appending. + struct TestData second_data = {2, "b"}; + commands.push_back(CreateCommandFromData(second_data)); + std::vector<uint8_t> key2 = key; + ++(key2[0]); + backend->AppendCommands(std::move(commands), true, key2); + + // Read it back in. + backend = nullptr; + backend = CreateBackend(); + ReadCurrentSessionCommands(backend.get(), key2, &commands); + + // And make sure we get back the expected data. + ASSERT_EQ(1U, commands.size()); + AssertCommandEqualsData(second_data, commands[0].get()); +} + +std::unique_ptr<SessionCommand> CreateCommandWithMaxSize() { + const size_type max_size_value = std::numeric_limits<size_type>::max(); + std::unique_ptr<SessionCommand> command = + std::make_unique<SessionCommand>(11, max_size_value); + for (int i = 0; i <= max_size_value; ++i) + (command->contents())[i] = i; + return command; +} + +TEST_F(CommandStorageBackendTest, MaxSizeTypeEncrypted) { + std::vector<uint8_t> key = CommandStorageManager::CreateCryptoKey(); + scoped_refptr<CommandStorageBackend> backend = CreateBackend(); + + SessionCommands commands; + commands.push_back(CreateCommandWithMaxSize()); + backend->AppendCommands(std::move(commands), true, key); + + // Read it back in. + backend = nullptr; + backend = CreateBackend(); + ReadCurrentSessionCommands(backend.get(), key, &commands); + + // Encryption restricts the main size, and results in truncation. + ASSERT_EQ(1U, commands.size()); + auto expected_command = CreateCommandWithMaxSize(); + EXPECT_EQ(expected_command->id(), (commands[0])->id()); + const size_type expected_size = + expected_command->size() - + CommandStorageBackend::kEncryptionOverheadInBytes - + sizeof(SessionCommand::id_type); + ASSERT_EQ(expected_size, (commands[0])->size()); + EXPECT_TRUE(memcmp(commands[0]->contents(), expected_command->contents(), + expected_size) == 0); +} + +TEST_F(CommandStorageBackendTest, MaxSizeType) { + scoped_refptr<CommandStorageBackend> backend = CreateBackend(); + + SessionCommands commands; + commands.push_back(CreateCommandWithMaxSize()); + backend->AppendCommands(std::move(commands), true); + + // Read it back in. + backend = nullptr; + backend = CreateBackend(); + ReadCurrentSessionCommands(backend.get(), std::vector<uint8_t>(), &commands); + + ASSERT_EQ(1U, commands.size()); + auto expected_command = CreateCommandWithMaxSize(); + EXPECT_EQ(expected_command->id(), (commands[0])->id()); + const size_type expected_size = + expected_command->size() - sizeof(SessionCommand::id_type); + ASSERT_EQ(expected_size, (commands[0])->size()); + EXPECT_TRUE(memcmp(commands[0]->contents(), expected_command->contents(), + expected_size) == 0); +} + +} // namespace sessions
diff --git a/components/sessions/core/command_storage_manager.cc b/components/sessions/core/command_storage_manager.cc index 200fd0fb..f75486d 100644 --- a/components/sessions/core/command_storage_manager.cc +++ b/components/sessions/core/command_storage_manager.cc
@@ -15,6 +15,7 @@ #include "base/threading/thread_task_runner_handle.h" #include "components/sessions/core/command_storage_backend.h" #include "components/sessions/core/command_storage_manager_delegate.h" +#include "crypto/random.h" namespace sessions { namespace { @@ -50,14 +51,24 @@ CommandStorageManager::CommandStorageManager( const base::FilePath& path, - CommandStorageManagerDelegate* delegate) + CommandStorageManagerDelegate* delegate, + bool enable_crypto) : CommandStorageManager(base::MakeRefCounted<CommandStorageBackend>( CreateDefaultBackendTaskRunner(), path), - delegate) {} + delegate) { + use_crypto_ = enable_crypto; +} CommandStorageManager::~CommandStorageManager() = default; +// static +std::vector<uint8_t> CommandStorageManager::CreateCryptoKey() { + std::vector<uint8_t> key(32); + crypto::RandBytes(&(key.front()), key.size()); + return key; +} + void CommandStorageManager::ScheduleCommand( std::unique_ptr<SessionCommand> command) { DCHECK(command); @@ -118,12 +129,15 @@ if (pending_commands_.empty()) return; - // We create a new vector which will receive all elements from the - // current commands. This will also clear the current list. + std::vector<uint8_t> crypto_key; + if (use_crypto_ && pending_reset_) { + crypto_key = CreateCryptoKey(); + delegate_->OnGeneratedNewCryptoKey(crypto_key); + } backend_task_runner()->PostNonNestableTask( FROM_HERE, base::BindOnce(&CommandStorageBackend::AppendCommands, backend_, - std::move(pending_commands_), pending_reset_)); + std::move(pending_commands_), pending_reset_, crypto_key)); if (pending_reset_) { commands_since_reset_ = 0; @@ -138,6 +152,7 @@ base::CancelableTaskTracker::TaskId CommandStorageManager::ScheduleGetCurrentSessionCommands( GetCommandsCallback callback, + const std::vector<uint8_t>& decryption_key, base::CancelableTaskTracker* tracker) { base::CancelableTaskTracker::IsCanceledCallback is_canceled; GetCommandsCallback backend_callback; @@ -147,7 +162,8 @@ backend_task_runner()->PostNonNestableTask( FROM_HERE, base::BindOnce(&CommandStorageBackend::ReadCurrentSessionCommands, - backend_.get(), is_canceled, std::move(backend_callback))); + backend_.get(), is_canceled, decryption_key, + std::move(backend_callback))); return id; }
diff --git a/components/sessions/core/command_storage_manager.h b/components/sessions/core/command_storage_manager.h index f6e315fe..7a2a14b 100644 --- a/components/sessions/core/command_storage_manager.h +++ b/components/sessions/core/command_storage_manager.h
@@ -5,7 +5,10 @@ #ifndef COMPONENTS_SESSIONS_CORE_COMMAND_STORAGE_MANAGER_H_ #define COMPONENTS_SESSIONS_CORE_COMMAND_STORAGE_MANAGER_H_ +#include <stddef.h> + #include <memory> +#include <vector> #include "base/callback.h" #include "base/files/file_path.h" @@ -37,12 +40,16 @@ // Creates a new CommandStorageManager. After creation you need to invoke // Init. |delegate| will remain owned by the creator and it is guaranteed - // that its lifetime surpasses this class. - // |type| gives the type of session service, |path| the path to save files to. + // that its lifetime surpasses this class. |path| is the path to save files + // to. If |enable_crypto| is true, the contents of the file are encrypted. CommandStorageManager(const base::FilePath& path, - CommandStorageManagerDelegate* delegate); + CommandStorageManagerDelegate* delegate, + bool enable_crypto = false); virtual ~CommandStorageManager(); + // Helper to generate a new key. + static std::vector<uint8_t> CreateCryptoKey(); + // Returns the set of commands which were scheduled to be written. Once // committed to the backend, the commands are removed from here. const std::vector<std::unique_ptr<SessionCommand>>& pending_commands() { @@ -88,9 +95,11 @@ // occurred. bool HasPendingSave() const; - // Requests the commands for the current session. + // Requests the commands for the current session. If |decryption_key| is + // non-empty it is used to decrypt the contents of the file. base::CancelableTaskTracker::TaskId ScheduleGetCurrentSessionCommands( GetCommandsCallback callback, + const std::vector<uint8_t>& decryption_key, base::CancelableTaskTracker* tracker); protected: @@ -122,6 +131,9 @@ // The backend object which reads and saves commands. scoped_refptr<CommandStorageBackend> backend_; + // If true, all commands are encrypted. + bool use_crypto_ = false; + // Commands we need to send over to the backend. std::vector<std::unique_ptr<SessionCommand>> pending_commands_;
diff --git a/components/sessions/core/command_storage_manager_delegate.h b/components/sessions/core/command_storage_manager_delegate.h index 365ca9c..a641a2e8 100644 --- a/components/sessions/core/command_storage_manager_delegate.h +++ b/components/sessions/core/command_storage_manager_delegate.h
@@ -5,6 +5,10 @@ #ifndef COMPONENTS_SESSIONS_CORE_COMMAND_STORAGE_MANAGER_DELEGATE_H_ #define COMPONENTS_SESSIONS_CORE_COMMAND_STORAGE_MANAGER_DELEGATE_H_ +#include <stddef.h> + +#include <vector> + namespace sessions { // The CommandStorageManagerDelegate decouples the CommandStorageManager from @@ -20,6 +24,10 @@ // Called when commands are about to be written to disc. virtual void OnWillSaveCommands() {} + // Called when a new crypto key has been generated. This is only called if + // CommandStorageManager was configured to enable encryption. + virtual void OnGeneratedNewCryptoKey(const std::vector<uint8_t>& key) {} + protected: virtual ~CommandStorageManagerDelegate() {} };
diff --git a/components/sessions/core/snapshotting_command_storage_backend.cc b/components/sessions/core/snapshotting_command_storage_backend.cc index b0f87217..656b9c0 100644 --- a/components/sessions/core/snapshotting_command_storage_backend.cc +++ b/components/sessions/core/snapshotting_command_storage_backend.cc
@@ -62,7 +62,7 @@ InitIfNecessary(); std::vector<std::unique_ptr<sessions::SessionCommand>> commands; - ReadCommandsFromFile(last_file_path_, &commands); + ReadCommandsFromFile(last_file_path_, std::vector<uint8_t>(), &commands); std::move(callback).Run(std::move(commands)); }
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb index 9c4af1e5..c2c01cd 100644 --- a/components/strings/components_strings_ar.xtb +++ b/components/strings/components_strings_ar.xtb
@@ -153,7 +153,7 @@ <translation id="1569487616857761740">إدخال تاريخ انتهاء الصلاحية</translation> <translation id="1581080074034554886">رمز التحقق من البطاقة (CVC)</translation> <translation id="1583429793053364125">حدث خطأ ما أثناء عرض صفحة الويب هذه.</translation> -<translation id="1586541204584340881">أيّ إضافات تم تثبيتها</translation> +<translation id="1586541204584340881">الإضافات التي ثبّتها</translation> <translation id="1588438908519853928">عادي</translation> <translation id="1592005682883173041">الوصول إلى البيانات المحلية</translation> <translation id="1594030484168838125">اختيار</translation> @@ -364,7 +364,7 @@ <translation id="2544644783021658368">مستند واحد</translation> <translation id="254947805923345898">قيمة السياسة غير صحيحة.</translation> <translation id="255002559098805027">أرسل <ph name="HOST_NAME" /> استجابة غير صالحة.</translation> -<translation id="2553853292994445426">تحقّق من إعدادات نظام أسماء النطاقات الآمن. في حال تمت تهيئة خادم نظام أسماء النطاقات الآمن، سيتعذّر إجراء اتصالات.</translation> +<translation id="2553853292994445426">تحقّق من إعدادات نظام أسماء النطاقات الآمن. يمكن أن يتم حلّ مشكلة الاتصال من خلال ضبط هذه الإعدادات بشكل مختلف.</translation> <translation id="2556876185419854533">تراجع عن ا&لتحرير</translation> <translation id="257674075312929031">مجموعة</translation> <translation id="2586657967955657006">الحافظة</translation> @@ -487,7 +487,7 @@ <translation id="3095940652251934233">كشف</translation> <translation id="3096100844101284527">إضافة عنوان الاستلام من المستخدم</translation> <translation id="3105172416063519923">رقم تعريف الأصل:</translation> -<translation id="3107591622054137333"><ph name="BEGIN_LINK" />التحقّق من تهيئة نظام أسماء النطاقات الآمن<ph name="END_LINK" /></translation> +<translation id="3107591622054137333"><ph name="BEGIN_LINK" />التحقّق من إعدادات نظام أسماء النطاقات الآمن<ph name="END_LINK" /></translation> <translation id="3109728660330352905">ليس لديك إذن بعرض هذه الصفحة.</translation> <translation id="3113284927548439113">مناوبة العمل الثالثة</translation> <translation id="3116158981186517402">تغليف</translation> @@ -790,7 +790,7 @@ <translation id="4390472908992056574">حافّة</translation> <translation id="4406896451731180161">نتائج البحث</translation> <translation id="4408413947728134509"><ph name="NUM_COOKIES" /> من ملفات تعريف الارتباط</translation> -<translation id="4414290883293381923">لقد أدخلت للتو كلمة المرور في موقع إلكتروني مريب. لذا ينصح Chrome بالانتقال إلى <ph name="WEBSITE_1" /> و<ph name="WEBSITE_2" /> و<ph name="WEBSITE_3" /> ومواقع إلكترونية أخرى تستخدم فيها كلمة المرور هذه، وتغيير كلمة المرور الآن.</translation> +<translation id="4414290883293381923">لقد أدخلت للتو كلمة المرور في موقع إلكتروني مريب. وبالتالي، ينصح Chrome بالانتقال إلى <ph name="WEBSITE_1" /> و<ph name="WEBSITE_2" /> و<ph name="WEBSITE_3" /> ومواقع إلكترونية أخرى تستخدم فيها كلمة المرور هذه، وتغيير كلمة المرور الآن.</translation> <translation id="4415426530740016218">عنوان الاستلام</translation> <translation id="4424024547088906515">هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ بل إنه شهادة أمان غير موثوقة من قبل Chrome. وربما يكون السبب في ذلك خطأ في التكوين أو مهاجمًا يعترض الاتصال.</translation> <translation id="443121186588148776">منفذ تسلسلي</translation> @@ -1223,7 +1223,7 @@ <translation id="6353505687280762741">{COUNT,plural, =0{ما من كلمات مرور}=1{كلمة مرور واحدة (للقائمة <ph name="DOMAIN_LIST" />، تمت المزامنة)}=2{كلمتا مرور (للقائمة <ph name="DOMAIN_LIST" />، تمت المزامنة)}few{# كلمات مرور (للقائمة <ph name="DOMAIN_LIST" />، تمت المزامنة)}many{# كلمة مرور (للقائمة <ph name="DOMAIN_LIST" />، تمت المزامنة)}other{# كلمة مرور (للقائمة <ph name="DOMAIN_LIST" />، تمت المزامنة)}}</translation> <translation id="6358450015545214790">ماذا تعني هذه الأقسام؟</translation> <translation id="6361757823711327522">B7</translation> -<translation id="6364095313648930329"><ph name="BEGIN_LINK" />التحقّق من تهيئة الخادم الوكيل والجدار الناري ونظام أسماء النطاقات الآمن<ph name="END_LINK" /></translation> +<translation id="6364095313648930329"><ph name="BEGIN_LINK" />التحقّق من ضبط الخادم الوكيل والجدار الناري ونظام أسماء النطاقات الآمن<ph name="END_LINK" /></translation> <translation id="6366710531182496394">وضع دبوسَين يسارًا</translation> <translation id="6377268785556383139">نتيجة بحث واحدة عن "<ph name="SEARCH_TEXT" />"</translation> <translation id="6380497234672085559">A0</translation> @@ -1246,7 +1246,7 @@ <translation id="6433595998831338502">رفض <ph name="HOST_NAME" /> الاتصال.</translation> <translation id="6434309073475700221">إلغاء</translation> <translation id="6440503408713884761">تم تجاهله</translation> -<translation id="6443406338865242315">أيّ إضافات ومكوّنات إضافية تم تثبيتها</translation> +<translation id="6443406338865242315">الإضافات والمكوّنات الإضافية التي تثبّتها</translation> <translation id="6446163441502663861">Kahu (مغلف)</translation> <translation id="6446608382365791566">إضافة مزيد من المعلومات</translation> <translation id="6447842834002726250">ملفّات تعريف الارتباط</translation> @@ -1356,7 +1356,7 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">قد يتمّ تحصيل هذه الرسوم لمرة واحدة أو بشكل متكرر، وقد تكون غير واضحة.</translation> <translation id="7029809446516969842">كلمات المرور</translation> -<translation id="7031646650991750659">أيّ تطبيقات Google Play تم تثبيتها</translation> +<translation id="7031646650991750659">تطبيقات Google Play التي ثبّتها</translation> <translation id="7050187094878475250">لقد حاولت الوصول إلى <ph name="DOMAIN" />، ولكن الخادم قدم شهادة مدة صلاحيتها طويلة جدًا مما يجعلها غير جديرة بالثقة.</translation> <translation id="705310974202322020">{NUM_CARDS,plural, =1{تتعذَّر إضافة هذه البطاقة الآن}zero{تتعذَّر إضافة هذه البطاقات الآن}two{تتعذَّر إضافة هاتين البطاقتين الآن}few{تتعذَّر إضافة هذه البطاقات الآن}many{تتعذَّر إضافة هذه البطاقات الآن}other{تتعذَّر إضافة هذه البطاقات الآن}}</translation> <translation id="7053983685419859001">حظر</translation> @@ -1416,7 +1416,7 @@ <translation id="7319430975418800333">A3</translation> <translation id="7320336641823683070">المساعدة بشأن الاتصال</translation> <translation id="733354035281974745">إلغاء حساب الجهاز المحلي</translation> -<translation id="7333654844024768166">لقد أدخلت للتو كلمة المرور في موقع إلكتروني مريب. لذا ينصح Chromium بالانتقال إلى <ph name="WEBSITE_1" /> و<ph name="WEBSITE_2" /> و<ph name="WEBSITE_3" /> ومواقع إلكترونية أخرى تستخدم فيها كلمة المرور هذه، وتغيير كلمة المرور الآن.</translation> +<translation id="7333654844024768166">لقد أدخلت للتو كلمة المرور في موقع إلكتروني مريب. وبالتالي، ينصح Chromium بالانتقال إلى <ph name="WEBSITE_1" /> و<ph name="WEBSITE_2" /> و<ph name="WEBSITE_3" /> ومواقع إلكترونية أخرى تستخدم فيها كلمة المرور هذه، وتغيير كلمة المرور الآن.</translation> <translation id="7334320624316649418">إعادة إ&جراء الترتيب</translation> <translation id="7337706099755338005">غير متاحة على نظامك الأساسي.</translation> <translation id="733923710415886693">لم يتم الكشف عن شهادة الخادم عن طريق شهادة الشفافية.</translation>
diff --git a/components/strings/components_strings_bs.xtb b/components/strings/components_strings_bs.xtb index 55c47763..bad9a53 100644 --- a/components/strings/components_strings_bs.xtb +++ b/components/strings/components_strings_bs.xtb
@@ -487,7 +487,7 @@ <translation id="3095940652251934233">Izjava</translation> <translation id="3096100844101284527">Dodaj adresu za preuzimanje</translation> <translation id="3105172416063519923">ID materijala:</translation> -<translation id="3107591622054137333"><ph name="BEGIN_LINK" />Provjeravanje konfiguracije sigurnosnog DNS-a<ph name="END_LINK" /></translation> +<translation id="3107591622054137333"><ph name="BEGIN_LINK" />provjeriti konfiguraciju sigurnosnog DNS-a<ph name="END_LINK" /></translation> <translation id="3109728660330352905">Nemate ovlaštenje za prikaz ove stranice.</translation> <translation id="3113284927548439113">Treća smjena</translation> <translation id="3116158981186517402">Laminiranje</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb index ebdea485..c06fa057 100644 --- a/components/strings/components_strings_ca.xtb +++ b/components/strings/components_strings_ca.xtb
@@ -196,7 +196,7 @@ <translation id="1743520634839655729">Perquè la propera vegada puguis pagar més ràpidament, desa la targeta, el nom i l'adreça de facturació al Compte de Google i en aquest dispositiu.</translation> <translation id="1743570585616704562">No s'ha reconegut</translation> <translation id="1745880797583122200">El navegador està gestionat</translation> -<translation id="1746113442205726301">Desplaçament de la imatge Y</translation> +<translation id="1746113442205726301">Desplaçament a l'eix Y de la imatge</translation> <translation id="17513872634828108">Pestanyes obertes</translation> <translation id="1752021286346845558">Bústia de correu 8</translation> <translation id="1753706481035618306">Número de pàgina</translation> @@ -417,7 +417,7 @@ <translation id="2799020568854403057">Aquest lloc web conté aplicacions perjudicials</translation> <translation id="2799223571221894425">Reinicia</translation> <translation id="2803306138276472711">Navegació segura de Google ha <ph name="BEGIN_LINK" />detectat programari maliciós<ph name="END_LINK" /> recentment a la pàgina <ph name="SITE" />. De vegades, els llocs web que acostumen a ser segurs s'infecten amb programari maliciós.</translation> -<translation id="2807052079800581569">Posició de la imatge Y</translation> +<translation id="2807052079800581569">Posició de la imatge a l'eix Y</translation> <translation id="2809804249696361569">Tots dos fulls</translation> <translation id="2824775600643448204">Barra d'adreces i de cerca</translation> <translation id="2826760142808435982">La connexió s'ha encriptat i autenticat mitjançant <ph name="CIPHER" /> i fa servir <ph name="KX" /> com a mecanisme d'intercanvi clau.</translation> @@ -458,7 +458,7 @@ <translation id="2991174974383378012">Comparteix informació amb llocs web</translation> <translation id="2991571918955627853">En aquest moments no pots visitar la pàgina <ph name="SITE" /> perquè el lloc web fa servir HSTS. Els atacs i els errors de xarxa acostumen a ser temporals, o sigui que probablement la pàgina funcionarà més endavant.</translation> <translation id="2996674880327704673">Suggeriments de Google</translation> -<translation id="3002501248619246229">Comprova el contingut multimèdia de la safata d'entrada</translation> +<translation id="3002501248619246229">Comprova el suport de la safata d'entrada</translation> <translation id="3005723025932146533">Mostra la còpia desada</translation> <translation id="3008447029300691911">Introdueix el CVC de la targeta <ph name="CREDIT_CARD" />. Un cop confirmada, els detalls de la targeta es compartiran amb aquest lloc.</translation> <translation id="3010559122411665027">Entrada de llista "<ph name="ENTRY_INDEX" />": <ph name="ERROR" /></translation> @@ -633,7 +633,7 @@ <translation id="3789155188480882154">Mida 16</translation> <translation id="3797522431967816232">Prc3 (sobre)</translation> <translation id="3799805948399000906">Tipus de lletra sol·licitat</translation> -<translation id="3807366285948165054">Desplaçament de la imatge X</translation> +<translation id="3807366285948165054">Desplaçament a l'eix X de la imatge</translation> <translation id="3807873520724684969">S'ha bloquejat contingut perjudicial.</translation> <translation id="3808375843007691220">Advertiment: s'han detectat funcions experimentals.</translation> <translation id="3810973564298564668">Gestiona</translation> @@ -682,7 +682,7 @@ <translation id="4075941231477579656">Touch ID</translation> <translation id="4079302484614802869">La configuració del servidor intermediari s'ha definit perquè utilitzi un URL d'script .pac, en lloc de servidors intermedis fixos.</translation> <translation id="4082393374666368382">Configuració - Gestió</translation> -<translation id="4088981014127559358">Desplaçament del costat 1 de la imatge Y</translation> +<translation id="4088981014127559358">Desplaçament a l'eix Y del costat 1 de la imatge</translation> <translation id="4098354747657067197">Aquest lloc web és enganyós</translation> <translation id="4101413244023615925">Text i gràfics</translation> <translation id="4103249731201008433">El número de sèrie del dispositiu no és vàlid</translation> @@ -1047,13 +1047,13 @@ <translation id="5632627355679805402">Les teves dades s'han encriptat amb la <ph name="BEGIN_LINK" />contrasenya de Google<ph name="END_LINK" /> a partir del dia <ph name="TIME" />. Introdueix-la per començar la sincronització.</translation> <translation id="5633066919399395251">És possible que els atacants del lloc web <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> provin d'instal·lar programes perillosos a l'ordinador per robar o suprimir la teva informació (per exemple, les fotos, les contrasenyes, els missatges i les targetes de crèdit). <ph name="BEGIN_LEARN_MORE_LINK" />Més informació<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">S'ha bloquejat el contingut enganyós.</translation> -<translation id="5644090287519800334">Desplaçament del costat 1 de la imatge X</translation> +<translation id="5644090287519800334">Desplaçament a l'eix X del costat 1 de la imatge</translation> <translation id="5645854190134202180">Segon torn</translation> <translation id="5659593005791499971">Correu electrònic</translation> <translation id="5663614846592581799">9x11 (sobre)</translation> <translation id="5663955426505430495">L'administrador del dispositiu ha instal·lat extensions per obtenir funcions addicionals. Les extensions tenen accés a algunes de les teves dades.</translation> <translation id="5675650730144413517">Aquesta pàgina no funciona</translation> -<translation id="568292603005599551">Posició de la imatge X</translation> +<translation id="568292603005599551">Posició de la imatge a l'eix X</translation> <translation id="5684874026226664614">Aquesta pàgina no s'ha pogut traduir.</translation> <translation id="5685654322157854305">Afegeix una adreça d'enviament</translation> <translation id="5689199277474810259">Exporta a JSON</translation> @@ -1144,7 +1144,7 @@ <translation id="6045164183059402045">Plantilla d'imposició</translation> <translation id="6047233362582046994">Si entens el risc que suposa per a la teva seguretat, pots <ph name="BEGIN_LINK" />visitar aquest lloc web<ph name="END_LINK" /> abans que no s'hagin suprimit les aplicacions perjudicials.</translation> <translation id="6047927260846328439">Aquest contingut pot provar d'enganyar-te perquè instal·lis programari o proporcionis informació personal. <ph name="BEGIN_LINK" />Mostra igualment<ph name="END_LINK" />.</translation> -<translation id="6049488691372270142">Entrega de la pàgina</translation> +<translation id="6049488691372270142">Lliurament de les pàgines</translation> <translation id="6051221802930200923">En aquests moments no pots visitar <ph name="SITE" /> perquè el lloc web fa servir una fixació de certificat. Els atacs i els errors de xarxa acostumen a ser temporals, o sigui que probablement la pàgina funcionarà més endavant.</translation> <translation id="6052284303005792909">•</translation> <translation id="6058977677006700226">Vols utilitzar les targetes en tots els dispositius?</translation> @@ -1361,7 +1361,7 @@ <translation id="7135130955892390533">Mostra l'estat</translation> <translation id="7138472120740807366">Mètode d'entrega</translation> <translation id="7139724024395191329">Emirat</translation> -<translation id="714064300541049402">Desplaçament del costat 2 de la imatge X</translation> +<translation id="714064300541049402">Desplaçament a l'eix X del costat 2 de la imatge</translation> <translation id="7152423860607593928">Number-14 (sobre)</translation> <translation id="7153549335910886479">{PAYMENT_METHOD,plural, =0{<ph name="PAYMENT_METHOD_PREVIEW" />}=1{<ph name="PAYMENT_METHOD_PREVIEW" /> i <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> més}other{<ph name="PAYMENT_METHOD_PREVIEW" /> i <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> més}}</translation> <translation id="7153618581592392745">Lavanda</translation> @@ -1469,7 +1469,7 @@ <translation id="7569983096843329377">Negre</translation> <translation id="7575207903026901870">Botó Suprimeix el suggeriment, prem Retorn per suprimir aquest suggeriment</translation> <translation id="7578104083680115302">Agilitzeu els pagaments en llocs i en aplicacions des de qualsevol dispositiu mitjançant les targetes que hàgiu desat a Google.</translation> -<translation id="7581199239021537589">Desplaçament del costat 2 de la imatge Y</translation> +<translation id="7581199239021537589">Desplaçament a l'eix Y del costat 2 de la imatge</translation> <translation id="7592362899630581445">El certificat del servidor incompleix les restriccions de nom.</translation> <translation id="7598391785903975535">Menys de: <ph name="UPPER_ESTIMATE" /></translation> <translation id="759889825892636187"><ph name="HOST_NAME" /> no pot gestionar la sol·licitud en aquest moment.</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb index d03ca8c..67862a6b 100644 --- a/components/strings/components_strings_de.xtb +++ b/components/strings/components_strings_de.xtb
@@ -79,7 +79,7 @@ <translation id="129553762522093515">Kürzlich geschlossen</translation> <translation id="1298536327547837046">Malware-Scan</translation> <translation id="129863573139666797"><ph name="BEGIN_LINK" />Löschen Sie Ihre Cookies<ph name="END_LINK" /></translation> -<translation id="1301324364792935241">Prüfen Sie die Einstellungen für das sichere DNS</translation> +<translation id="1301324364792935241">Prüfen Sie die Einstellungen für sichere DNS-Abfragen</translation> <translation id="1307966114820526988">Eingestellte Funktionen</translation> <translation id="1314509827145471431">Bindung rechts</translation> <translation id="1320233736580025032">Prc1 (Umschlag)</translation> @@ -364,7 +364,7 @@ <translation id="2544644783021658368">Einzelnes Dokument</translation> <translation id="254947805923345898">Der Richtlinienwert ist ungültig.</translation> <translation id="255002559098805027"><ph name="HOST_NAME" /> hat eine ungültige Antwort gesendet.</translation> -<translation id="2553853292994445426">Prüfen Sie die Einstellungen für das sichere DNS. Sie haben möglicherweise einen Server mit einem sicheren DNS konfiguriert, zu dem keine Verbindung aufgebaut werden kann.</translation> +<translation id="2553853292994445426">Prüfen Sie die Einstellungen für sichere DNS-Abfragen. Sie haben möglicherweise einen sicheren DNS-Server konfiguriert, zu dem keine Verbindung aufgebaut werden kann.</translation> <translation id="2556876185419854533">&Bearbeiten rückgängig machen</translation> <translation id="257674075312929031">Gruppe</translation> <translation id="2586657967955657006">Zwischenablage</translation> @@ -481,7 +481,7 @@ <translation id="3095940652251934233">Statement</translation> <translation id="3096100844101284527">Abholadresse hinzufügen</translation> <translation id="3105172416063519923">Geräte-ID: </translation> -<translation id="3107591622054137333"><ph name="BEGIN_LINK" />Konfiguration des sicheren DNS prüfen<ph name="END_LINK" /></translation> +<translation id="3107591622054137333"><ph name="BEGIN_LINK" />Konfiguration der sicheren DNS-Abfragen prüfen<ph name="END_LINK" /></translation> <translation id="3109728660330352905">Sie sind nicht zum Aufrufen dieser Seite autorisiert.</translation> <translation id="3113284927548439113">Dritte Schicht</translation> <translation id="3116158981186517402">Laminieren</translation> @@ -1212,7 +1212,7 @@ <translation id="6353505687280762741">{COUNT,plural, =0{Keins}=1{1 Passwort (für <ph name="DOMAIN_LIST" />, synchronisiert)}=2{2 Passwörter (für <ph name="DOMAIN_LIST" />, synchronisiert)}other{# Passwörter (für <ph name="DOMAIN_LIST" />, synchronisiert)}}</translation> <translation id="6358450015545214790">Was bedeuten diese Hinweise?</translation> <translation id="6361757823711327522">B7</translation> -<translation id="6364095313648930329"><ph name="BEGIN_LINK" />Proxy- und Firewallkonfiguration sowie Konfiguration des sicheren DNS überprüfen<ph name="END_LINK" /></translation> +<translation id="6364095313648930329"><ph name="BEGIN_LINK" />Proxy- und Firewallkonfiguration sowie Konfiguration sicherer DNS-Abfragen überprüfen<ph name="END_LINK" /></translation> <translation id="6366710531182496394">Zwei Heftklammern links</translation> <translation id="6377268785556383139">1 Ergebnis für "<ph name="SEARCH_TEXT" />"</translation> <translation id="6380497234672085559">A0</translation> @@ -1379,7 +1379,7 @@ <translation id="7186367841673660872">Diese Seite wurde von<ph name="ORIGINAL_LANGUAGE" />in<ph name="LANGUAGE_LANGUAGE" />übersetzt.</translation> <translation id="7192203810768312527">Freigabe von <ph name="SIZE" /> Speicherplatz. Manche Websites werden beim nächsten Öffnen eventuell langsamer geladen.</translation> <translation id="719464814642662924">Visa</translation> -<translation id="7201591969684833065">Ihr Administrator hat Zugriff auf:</translation> +<translation id="7201591969684833065">Ihr Administrator hat Zugriff auf Folgendes:</translation> <translation id="7202346780273620635">Letter-Extra</translation> <translation id="7210863904660874423"><ph name="HOST_NAME" /> erfüllt die Sicherheitsstandards nicht.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Weitere Informationen<ph name="END_LINK" /> zu diesem Problem.</translation> @@ -1465,7 +1465,7 @@ <translation id="7542995811387359312">Die Funktion zur automatischen Ausfüllung der Kreditkartendaten ist deaktiviert, da dieses Formular keine sichere Verbindung nutzt.</translation> <translation id="7548892272833184391">Verbindungsfehler beheben</translation> <translation id="7549584377607005141">Damit diese Webseite richtig angezeigt wird, werden die Daten benötigt, die Sie vorher eingegeben haben. Sie können diese Daten noch einmal senden, dabei werden jedoch sämtliche Aktionen wiederholt, die vorher durch diese Seite ausgeführt wurden.</translation> -<translation id="7550637293666041147">Der Nutzername für Ihr Gerät und Ihr Chrome-Nutzername</translation> +<translation id="7550637293666041147">Nutzername für Ihr Gerät und Chrome-Nutzername</translation> <translation id="7552846755917812628">Probieren Sie folgende Tipps aus:</translation> <translation id="7554791636758816595">Neuer Tab</translation> <translation id="7564049878696755256">Sie könnten den Zugriff auf Ihr <ph name="ORG_NAME" />-Konto verlieren oder zum Opfer von Identitätsdiebstahl werden. Chrome empfiehlt Ihnen, Ihr Passwort jetzt zu ändern.</translation>
diff --git a/components/strings/components_strings_fr-CA.xtb b/components/strings/components_strings_fr-CA.xtb index 6cd78bb1..462c09f 100644 --- a/components/strings/components_strings_fr-CA.xtb +++ b/components/strings/components_strings_fr-CA.xtb
@@ -79,6 +79,7 @@ <translation id="129553762522093515">Récemment fermés</translation> <translation id="1298536327547837046">Recherche de logiciels malveillants</translation> <translation id="129863573139666797"><ph name="BEGIN_LINK" />Essayez d'effacer vos témoins<ph name="END_LINK" /></translation> +<translation id="1301324364792935241">Vérifiez les paramètres de DNS sécurisés</translation> <translation id="1307966114820526988">Fonctionnalités discontinuées</translation> <translation id="1314509827145471431">Reliure à droite</translation> <translation id="1320233736580025032">Enveloppe Prc1</translation> @@ -152,6 +153,7 @@ <translation id="1569487616857761740">Entrez la date d'expiration</translation> <translation id="1581080074034554886">CVC</translation> <translation id="1583429793053364125">Une erreur s'est produite lors de l'affichage de cette page Web.</translation> +<translation id="1586541204584340881">Les extensions que vous avez installées</translation> <translation id="1588438908519853928">Normal</translation> <translation id="1592005682883173041">Accès aux données locales</translation> <translation id="1594030484168838125">Choisir</translation> @@ -362,6 +364,7 @@ <translation id="2544644783021658368">Document simple</translation> <translation id="254947805923345898">La valeur attribuée à la politique n'est pas valide.</translation> <translation id="255002559098805027"><ph name="HOST_NAME" /> a envoyé une réponse non valide.</translation> +<translation id="2553853292994445426">Vérifiez les paramètres de DNS sécurisé. L'échec de connexion est peut-être dû à un serveur DNS sécurisé que vous avez configuré.</translation> <translation id="2556876185419854533">&Annuler la modification</translation> <translation id="257674075312929031">Groupe</translation> <translation id="2586657967955657006">Presse-papiers</translation> @@ -474,6 +477,7 @@ <translation id="3095940652251934233">Relevé</translation> <translation id="3096100844101284527">Ajouter une adresse de ramassage</translation> <translation id="3105172416063519923">Identifiant de ressource :</translation> +<translation id="3107591622054137333"><ph name="BEGIN_LINK" />De vérifier la configuration du serveur DNS sécurisé<ph name="END_LINK" /></translation> <translation id="3109728660330352905">Vous ne disposez pas de l'autorisation nécessaire pour afficher cette page.</translation> <translation id="3113284927548439113">Troisième quart</translation> <translation id="3116158981186517402">Plastifier</translation> @@ -771,6 +775,7 @@ <translation id="4390472908992056574">Bord</translation> <translation id="4406896451731180161">résultats de recherche</translation> <translation id="4408413947728134509">Témoins <ph name="NUM_COOKIES" /></translation> +<translation id="4414290883293381923">Vous venez d'entrer votre mot de passe sur un site trompeur. Chrome vous recommande de visiter <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> ainsi que tout autre site sur lequel vous avez utilisé ce mot de passe, puis de le changer maintenant.</translation> <translation id="4415426530740016218">Adresse de ramassage</translation> <translation id="4424024547088906515">Impossible de vérifier sur le serveur qu'il s'agit bien du domaine <ph name="DOMAIN" />, car son certificat de sécurité n'est pas considéré comme fiable par Chrome. Cela peut être dû à une mauvaise configuration ou bien à l'interception de votre connexion par un pirate informatique.</translation> <translation id="443121186588148776">Port série</translation> @@ -1154,7 +1159,7 @@ <translation id="6120179357481664955">Se souvenir de votre identifiant UPI?</translation> <translation id="6146055958333702838">Vérifiez les câbles et redémarrez votre routeur, votre modem ou tout autre périphérique réseau utilisé.</translation> -<translation id="614940544461990577">Essayez :</translation> +<translation id="614940544461990577">Essayez ceci :</translation> <translation id="6150036310511284407">Triple perforation à gauche</translation> <translation id="6151417162996330722">La période de validité du certificat du serveur est trop longue.</translation> <translation id="6157877588268064908">Pour voir les exigences et les modes de livraison, sélectionnez une adresse</translation> @@ -1202,6 +1207,7 @@ <translation id="6353505687280762741">{COUNT,plural, =0{Aucun}=1{1 mot de passe (pour <ph name="DOMAIN_LIST" />, synchronisé)}=2{2 mots de passe (pour <ph name="DOMAIN_LIST" />, synchronisés)}one{# mot de passe (pour <ph name="DOMAIN_LIST" />, synchronisé)}other{# mots de passe (pour <ph name="DOMAIN_LIST" />, synchronisés)}}</translation> <translation id="6358450015545214790">Qu'est-ce que c'est?</translation> <translation id="6361757823711327522">B7</translation> +<translation id="6364095313648930329"><ph name="BEGIN_LINK" />De vérifier la configuration du mandataire, du pare-feu et du DNS sécurisé<ph name="END_LINK" /></translation> <translation id="6366710531182496394">Double agrafe à gauche</translation> <translation id="6377268785556383139">1 résultat trouvé pour « <ph name="SEARCH_TEXT" /> »</translation> <translation id="6380497234672085559">A0</translation> @@ -1224,6 +1230,7 @@ <translation id="6433595998831338502"><ph name="HOST_NAME" /> a refusé la connexion.</translation> <translation id="6434309073475700221">Supprimer</translation> <translation id="6440503408713884761">Ignorée</translation> +<translation id="6443406338865242315">Les extensions et les plugiciels que vous avez installés</translation> <translation id="6446163441502663861">Enveloppe Kahu</translation> <translation id="6446608382365791566">Ajouter plus de renseignements</translation> <translation id="6447842834002726250">Témoins</translation> @@ -1333,6 +1340,7 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Ces frais peuvent être ponctuels ou récurrents, et peuvent ne pas être évidents.</translation> <translation id="7029809446516969842">Mots de passe</translation> +<translation id="7031646650991750659">Quelles applications Google Play vous avez installées</translation> <translation id="7050187094878475250">Vous avez essayé d’atteindre <ph name="DOMAIN" />, mais le serveur a présenté un certificat dont la période de validité est trop longue pour être sûre.</translation> <translation id="705310974202322020">{NUM_CARDS,plural, =1{Cette carte ne peut pas être enregistrée pour le moment}one{Cette carte ne peut pas être enregistrée pour le moment}other{Ces cartes ne peuvent pas être enregistrées pour le moment}}</translation> <translation id="7053983685419859001">Bloquer</translation> @@ -1392,6 +1400,7 @@ <translation id="7319430975418800333">A3</translation> <translation id="7320336641823683070">Aide pour la connexion</translation> <translation id="733354035281974745">Ignorer le compte local de l'appareil</translation> +<translation id="7333654844024768166">Vous venez d'entrer votre mot de passe sur un site trompeur. Chromium vous recommande de visiter <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> ainsi que tout autre site sur lequel vous avez utilisé ce mot de passe, puis de le changer maintenant.</translation> <translation id="7334320624316649418">&Rétablir la réorganisation</translation> <translation id="7337706099755338005">Non disponible sur votre plateforme.</translation> <translation id="733923710415886693">Le certificat du serveur n'a pas été divulgué par l'intermédiaire de l'outil Certificate Transparency.</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb index 595c02a..84e9e1bb 100644 --- a/components/strings/components_strings_fr.xtb +++ b/components/strings/components_strings_fr.xtb
@@ -477,7 +477,7 @@ <translation id="3095940652251934233">Statement</translation> <translation id="3096100844101284527">Ajouter une adresse d'enlèvement</translation> <translation id="3105172416063519923">ID d'élément : </translation> -<translation id="3107591622054137333"><ph name="BEGIN_LINK" />Vérifier la configuration du DNS sécurisé<ph name="END_LINK" /></translation> +<translation id="3107591622054137333"><ph name="BEGIN_LINK" />Vérifiez la configuration du DNS sécurisé<ph name="END_LINK" /></translation> <translation id="3109728660330352905">Vous n'êtes pas autorisé à consulter cette page.</translation> <translation id="3113284927548439113">Troisième quart de travail</translation> <translation id="3116158981186517402">Plastifier</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb index 9e6375f..85efa555 100644 --- a/components/strings/components_strings_gu.xtb +++ b/components/strings/components_strings_gu.xtb
@@ -79,6 +79,7 @@ <translation id="129553762522093515">તાજેતરમાં બંધ કરેલા</translation> <translation id="1298536327547837046">માલવેરની તપાસ કરવી</translation> <translation id="129863573139666797"><ph name="BEGIN_LINK" />તમારી કૂકીઝને સાફ કરવાનો પ્રયાસ કરો<ph name="END_LINK" /></translation> +<translation id="1301324364792935241">તમારા સુરક્ષિત DNS સેટિંગ ચેક કરો</translation> <translation id="1307966114820526988">નાપસંદ કરેલી સુવિધાઓ</translation> <translation id="1314509827145471431">જમણી બાજુએ જોડો</translation> <translation id="1320233736580025032">Prc1 (એન્વલપ)</translation> @@ -152,6 +153,7 @@ <translation id="1569487616857761740">સમાપ્તિ તારીખ દાખલ કરો</translation> <translation id="1581080074034554886">CVC</translation> <translation id="1583429793053364125">આ વેબપેજ બતાવતી વખતે કંઈક ખોટું થયું.</translation> +<translation id="1586541204584340881">તમે કયા એક્સ્ટેંશન ઇન્સ્ટૉલ કર્યા છે</translation> <translation id="1588438908519853928">સામાન્ય</translation> <translation id="1592005682883173041">સ્થાનિક ડેટા ઍક્સેસ</translation> <translation id="1594030484168838125">પસંદ કરો</translation> @@ -362,6 +364,7 @@ <translation id="2544644783021658368">માત્ર એક દસ્તાવેજ</translation> <translation id="254947805923345898">પૉલિસી મૂલ્ય માન્ય નથી.</translation> <translation id="255002559098805027"><ph name="HOST_NAME" /> એ અમાન્ય પ્રતિસાદ મોકલ્યો.</translation> +<translation id="2553853292994445426">તમારા સુરક્ષિત DNS સેટિંગ ચેક કરો. તમે એવું DNS સર્વર ગોઠવ્યું હોઈ શકે છે જેના કનેક્શન નિષ્ફળ થઈ રહ્યાં છે.</translation> <translation id="2556876185419854533">&ફેરફાર કરવાનું રદ કરો</translation> <translation id="257674075312929031">જૂથ</translation> <translation id="2586657967955657006">ક્લિપબોર્ડ</translation> @@ -482,6 +485,7 @@ <translation id="3095940652251934233">સ્ટેટમેંટ</translation> <translation id="3096100844101284527">પિકઅપ માટેનું સરનામું ઉમેરો</translation> <translation id="3105172416063519923">સંપત્તિ ID:</translation> +<translation id="3107591622054137333"><ph name="BEGIN_LINK" />સુરક્ષિત DNS ગોઠવણી ચેક કરી રહ્યાં છીએ<ph name="END_LINK" /></translation> <translation id="3109728660330352905">તમને આ પેજને જોવાનો અધિકાર નથી.</translation> <translation id="3113284927548439113">ત્રીજી પાળી</translation> <translation id="3116158981186517402">લૅમિનેટ કરો</translation> @@ -783,6 +787,7 @@ <translation id="4390472908992056574">બ્રિમ</translation> <translation id="4406896451731180161">શોધ પરિણામો</translation> <translation id="4408413947728134509">કુકી <ph name="NUM_COOKIES" /></translation> +<translation id="4414290883293381923">હમણાં જ કોઈ છેતરામણી સાઇટ પર તમે તમારો પાસવર્ડ દાખલ કર્યો. Chrome <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> તેમજ તમે આ પાસવર્ડનો જ્યાં ઉપયોગ કરતા હોય તે અન્ય સાઇટ પર જઈને તેને હમણાં જ બદલવાનો સુઝાવ આપે છે.</translation> <translation id="4415426530740016218">પિકઅપ માટેનું સરનામું</translation> <translation id="4424024547088906515">આ સર્વર સાબિત કરી શક્યું નથી કે તે <ph name="DOMAIN" /> છે; તેનું સુરક્ષા પ્રમાણપત્ર Chrome દ્વારા વિશ્વસનીય નથી. આ કોઈ ખોટી ગોઠવણીને કારણે થયું હશે અથવા કોઈ હુમલાખોર તમારા કનેક્શનને અટકાવી રહ્યો છે.</translation> <translation id="443121186588148776">સિરીઅલ પોર્ટ</translation> @@ -1214,6 +1219,7 @@ <translation id="6353505687280762741">{COUNT,plural, =0{એકપણ નહીં}=1{1 પાસવર્ડ (<ph name="DOMAIN_LIST" /> માટે, સિંક કરેલા)}=2{2 પાસવર્ડ (<ph name="DOMAIN_LIST" /> માટે, સિંક કરેલા)}one{# પાસવર્ડ (<ph name="DOMAIN_LIST" /> માટે, સિંક કરેલા)}other{# પાસવર્ડ (<ph name="DOMAIN_LIST" /> માટે, સિંક કરેલા)}}</translation> <translation id="6358450015545214790">આનો અર્થ શું છે?</translation> <translation id="6361757823711327522">B7</translation> +<translation id="6364095313648930329"><ph name="BEGIN_LINK" />પ્રૉક્સી, ફાયરવૉલ અને DNS ગોઠવણીને ચેક કરવાનો<ph name="END_LINK" /></translation> <translation id="6366710531182496394">ડાબી બાજુએ સ્ટેપલ લગાવો</translation> <translation id="6377268785556383139">'<ph name="SEARCH_TEXT" />' માટે 1 પરિણામ</translation> <translation id="6380497234672085559">A0</translation> @@ -1236,6 +1242,7 @@ <translation id="6433595998831338502"><ph name="HOST_NAME" /> એ કનેક્ટ કરવાનો ઇનકાર કર્યો.</translation> <translation id="6434309073475700221">કાઢી નાખો</translation> <translation id="6440503408713884761">અવગણી</translation> +<translation id="6443406338865242315">તમે કયા એક્સ્ટેંશન અને પ્લગ-ઇન ઇન્સ્ટૉલ કર્યા છે</translation> <translation id="6446163441502663861">Kahu (એન્વલપ)</translation> <translation id="6446608382365791566">વધુ માહિતી ઉમેરો</translation> <translation id="6447842834002726250">કૂકીઝ</translation> @@ -1345,6 +1352,7 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">આ શુલ્ક એક-સમયનું અથવા પુનરાવર્તિત હોઈ શકે છે અને કદાચ દેખીતા શુલ્ક ન પણ હોય.</translation> <translation id="7029809446516969842">પાસવર્ડ્સ</translation> +<translation id="7031646650991750659">તમે કઈ Google Play ઍપ ઇન્સ્ટૉલ કરી છે</translation> <translation id="7050187094878475250">તમે <ph name="DOMAIN" /> પર પહોંચવાનો પ્રયાસ કરેલો, પરંતુ સર્વરે એવું પ્રમાણપત્ર પ્રસ્તુત કર્યું જેની માન્યતા અવધિ, વિશ્વસનીય હોવા માટે ખૂબ લાંબી છે.</translation> <translation id="705310974202322020">{NUM_CARDS,plural, =1{આ કાર્ડ અત્યારે સાચવી શકાતું નથી}one{આ કાર્ડ અત્યારે સાચવી શકાતાં નથી}other{આ કાર્ડ અત્યારે સાચવી શકાતાં નથી}}</translation> <translation id="7053983685419859001">અવરોધિત કરો</translation> @@ -1404,6 +1412,7 @@ <translation id="7319430975418800333">A3</translation> <translation id="7320336641823683070">કનેક્શન સહાય</translation> <translation id="733354035281974745">ડિવાઇસ સ્થાનિક એકાઉન્ટ ઓવરરાઇડ</translation> +<translation id="7333654844024768166">હમણાં જ કોઈ છેતરામણી સાઇટ પર તમે તમારો પાસવર્ડ દાખલ કર્યો. Chromium <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> તેમજ તમે આ પાસવર્ડનો જ્યાં ઉપયોગ કરતા હોય તે અન્ય સાઇટ પર જઈને તેને હમણાં જ બદલવાનો સુઝાવ આપે છે.</translation> <translation id="7334320624316649418">&પુનઃક્રમાંકિત કરવું ફરી કરો</translation> <translation id="7337706099755338005">તમારા પ્લૅટફૉર્મ પર ઉપલબ્ધ નથી.</translation> <translation id="733923710415886693">પ્રમાણપત્ર પારદર્શિતા દ્વારા સર્વરનું પ્રમાણપત્ર જાહેર કરવામાં આવ્યું ન હતું.</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb index c318ed7..7553c407 100644 --- a/components/strings/components_strings_hi.xtb +++ b/components/strings/components_strings_hi.xtb
@@ -163,7 +163,7 @@ <translation id="1639239467298939599">लोड हो रहा है</translation> <translation id="1640180200866533862">उपयोगकर्ता नीतियां</translation> <translation id="1640244768702815859"><ph name="BEGIN_LINK" />साइट के मुखपृष्ठ पर विज़िट करके<ph name="END_LINK" /> देखें.</translation> -<translation id="1641976391427233992">डिले आउटपुट अंटिल</translation> +<translation id="1641976391427233992">यहां तक के आउटपुट में देरी</translation> <translation id="1644574205037202324">इतिहास</translation> <translation id="1645368109819982629">असमर्थित प्रोटोकॉल</translation> <translation id="1652415888492971589">JIS B8</translation> @@ -565,7 +565,7 @@ <ph name="PAGE_TITLE" /></translation> <translation id="3512163584740124171">इस नीति को अनदेखा कर दिया गया है, क्योंकि इसी नीति समूह की दूसरी नीति को ज़्यादा प्राथमिकता दी गई है.</translation> <translation id="3513704683820682405">ऑगमेंटेड रिएलिटी (AR)</translation> -<translation id="3518941727116570328">एक से ज़्यादा ऑब्जेक्ट को हैंडल करना</translation> +<translation id="3518941727116570328">कई ऑब्जेक्ट को हैंडल करना</translation> <translation id="3528171143076753409">सर्वर का प्रमाणपत्र विश्वसनीय नहीं है.</translation> <translation id="3528485271872257980">गहरा भूरा</translation> <translation id="3530944546672790857">{COUNT,plural, =0{सिंक किए हुए डिवाइस पर कम से कम 1 आइटम}=1{1 आइटम (सिंक किए हुए डिवाइस पर और भी बहुत कुछ)}one{# आइटम (सिंक किए हुए डिवाइस पर और भी बहुत कुछ)}other{# आइटम (सिंक किए हुए डिवाइस पर और भी बहुत कुछ)}}</translation> @@ -930,7 +930,7 @@ <translation id="5115216390227830982">यूरोपियन-ईडीपी</translation> <translation id="5115563688576182185">(64-बिट)</translation> <translation id="5121469660360593280">सुरक्षा की उन गतिविधियों के बारे में डेटा शेयर करें जिन्हें 'Chrome Enterprise की उपयोगकर्ता के लिए सुरक्षा' सुविधा ने आपके एडमिन को फ़्लैग किया है. इनमें, आप जिन पेजों पर जाते हैं उनके यूआरएल और फ़ाइल के नाम या मेटाडेटा शामिल हो सकते हैं. साथ ही, वह उपयोगकर्ता नाम भी शामिल हो सकता है जिसका इस्तेमाल आप अपने डिवाइस और Chrome में साइन इन करने के लिए करते हैं.</translation> -<translation id="5123063207673082822">हफ़्ते के आखिरी दिन</translation> +<translation id="5123063207673082822">शनिवार और रविवार</translation> <translation id="5125394840236832993">बी-प्लस</translation> <translation id="5126510351761255129">कार्ड की पुष्टि करें</translation> <translation id="5135404736266831032">पते प्रबंधित करें...</translation> @@ -976,7 +976,7 @@ <translation id="5287240709317226393">कुकी दिखाएं</translation> <translation id="5287456746628258573">यह साइट एक पुराने सुरक्षा कॉन्फ़िगरेशन का इस्तेमाल करती है. इस वजह से, साइट पर भेजी जाने वाली आपकी जानकारी (उदाहरण के लिए, पासवर्ड या क्रेडिट कार्ड नंबर वगैरह) को कोई और देख सकता है.</translation> <translation id="5288108484102287882">नीति मानों की पुष्टि से चेतावनियां मिली हैं</translation> -<translation id="5289384342738547352">एक से ज़्यादा दस्तावेज़ों को हैंडल करना</translation> +<translation id="5289384342738547352">कई दस्तावेज़ों को हैंडल करना</translation> <translation id="5295292838686006428">किसी साइट या ऐप्लिकेशन पर हुए डेटा ब्रीच में आपका पासवर्ड उजागर हो गया है. Chrome सुझाव देता है कि आप अपने सेव किए हुए पासवर्ड की अभी जांच करें.</translation> <translation id="5299298092464848405">नीति पार्स करने में गड़बड़ी</translation> <translation id="5300589172476337783">दिखाएं</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb index ed5b281..42351b0 100644 --- a/components/strings/components_strings_id.xtb +++ b/components/strings/components_strings_id.xtb
@@ -364,7 +364,7 @@ <translation id="2544644783021658368">Dokumen tunggal</translation> <translation id="254947805923345898">Nilai kebijakan tidak valid.</translation> <translation id="255002559098805027"><ph name="HOST_NAME" /> mengirimkan tanggapan yang tidak valid.</translation> -<translation id="2553853292994445426">Periksa setelan DNS aman Anda. Anda mungkin harus mengonfigurasi server DNS aman yang koneksinya gagal.</translation> +<translation id="2553853292994445426">Periksa setelan DNS aman Anda. Anda mungkin telah mengonfigurasi server DNS aman yang koneksinya gagal.</translation> <translation id="2556876185419854533">&Urungkan Pengeditan</translation> <translation id="257674075312929031">Grup</translation> <translation id="2586657967955657006">Papan klip</translation>
diff --git a/components/strings/components_strings_kk.xtb b/components/strings/components_strings_kk.xtb index cc54d972..374ed6ef 100644 --- a/components/strings/components_strings_kk.xtb +++ b/components/strings/components_strings_kk.xtb
@@ -153,7 +153,7 @@ <translation id="1569487616857761740">Жарамдылық мерзімін енгізіңіз.</translation> <translation id="1581080074034554886">CVC</translation> <translation id="1583429793053364125">Бұл веб-бетті көрсету кезінде қате кетті.</translation> -<translation id="1586541204584340881">қай кеңейтімдерді орнатқаныңызды</translation> +<translation id="1586541204584340881">қай кеңейтімдерді орнатқаныңызды;</translation> <translation id="1588438908519853928">Қалыпты</translation> <translation id="1592005682883173041">Жергілікті деректерге кіру</translation> <translation id="1594030484168838125">Таңдау</translation> @@ -1355,7 +1355,7 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Бұл ақылар сізге білдіртпей бір рет не қайта-қайта алынуы мүмкін.</translation> <translation id="7029809446516969842">Құпия сөздер</translation> -<translation id="7031646650991750659">Google Play-дің қай қолданбаларын орнатқаныңызды</translation> +<translation id="7031646650991750659">Google Play-дің қай қолданбаларын орнатқаныңызды.</translation> <translation id="7050187094878475250"><ph name="DOMAIN" /> доменіне қол жеткізуге әрекет еттіңіз, бірақ сервер сенімді болуы үшін жарамдылық мерзімі тым ұзақ болған сертификатты ұсынды.</translation> <translation id="705310974202322020">{NUM_CARDS,plural, =1{Бұл карта қазір сақталмайды}other{Бұл карталар қазір сақталмайды}}</translation> <translation id="7053983685419859001">Бөгеу</translation>
diff --git a/components/strings/components_strings_ky.xtb b/components/strings/components_strings_ky.xtb index 5022396..9ed043c 100644 --- a/components/strings/components_strings_ky.xtb +++ b/components/strings/components_strings_ky.xtb
@@ -364,7 +364,7 @@ <translation id="2544644783021658368">Жалгыз документ</translation> <translation id="254947805923345898">Саясаттын мааниси туура эмес көрсөтүлдү.</translation> <translation id="255002559098805027"><ph name="HOST_NAME" /> сайты жараксыз жооп жөнөттү.</translation> -<translation id="2553853292994445426">Коопсуз DNS жөндөөлөрүңүздү текшериңиз. Коопсуз DNS серверин жөндөп койсоңуз керек, андыктан туташуу аткарылбай жатат.</translation> +<translation id="2553853292994445426">Коопсуз DNS жөндөөлөрүңүздү текшериңиз. Коопсуз DNS серверин жөндөп койсоңуз керек, андыктан туташпай жатат.</translation> <translation id="2556876185419854533">Түзөтүүнү &жасабоо</translation> <translation id="257674075312929031">Топ</translation> <translation id="2586657967955657006">Алмашуу буфери</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb index eb78e8ca..2abbccc 100644 --- a/components/strings/components_strings_ml.xtb +++ b/components/strings/components_strings_ml.xtb
@@ -79,6 +79,7 @@ <translation id="129553762522093515">സമീപകാലത്ത് അടച്ചവ</translation> <translation id="1298536327547837046">മാൽവേർ സ്കാനിംഗ്</translation> <translation id="129863573139666797"><ph name="BEGIN_LINK" />നിങ്ങളുടെ കുക്കികൾ മായ്ക്കുന്നത് പരീക്ഷിക്കുക<ph name="END_LINK" /></translation> +<translation id="1301324364792935241">നിങ്ങളുടെ സുരക്ഷിത DNS ക്രമീകരണം പരിശോധിക്കുക</translation> <translation id="1307966114820526988">അവസാനിപ്പിച്ച ഫീച്ചറുകൾ</translation> <translation id="1314509827145471431">വലതുവശത്ത് ബൈൻഡ് ചെയ്യുക</translation> <translation id="1320233736580025032">Prc1 (എൻവലപ്പ്)</translation> @@ -152,6 +153,7 @@ <translation id="1569487616857761740">കാലഹരണപ്പെടുന്ന തീയതി നൽകുക</translation> <translation id="1581080074034554886">CVC</translation> <translation id="1583429793053364125">ഈ വെബ്പേജ് പ്രദർശിപ്പിക്കുമ്പോൾ എന്തോ കുഴപ്പം സംഭവിച്ചു.</translation> +<translation id="1586541204584340881">ഏതൊക്കെ വിപുലീകരണങ്ങൾ നിങ്ങൾ ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ട് എന്നത്</translation> <translation id="1588438908519853928">സാധാരണം</translation> <translation id="1592005682883173041">പ്രാദേശിക ഡാറ്റ ആക്സസ്</translation> <translation id="1594030484168838125">തിരഞ്ഞെടുക്കുക</translation> @@ -362,6 +364,7 @@ <translation id="2544644783021658368">സിംഗിൾ ഡോക്യുമെന്റ്</translation> <translation id="254947805923345898">നയത്തിൻ്റെ മൂല്യം അസാധുവാണ്.</translation> <translation id="255002559098805027"><ph name="HOST_NAME" /> അസാധുവായ ഒരു പ്രതികരണം അയച്ചു.</translation> +<translation id="2553853292994445426">നിങ്ങളുടെ സുരക്ഷിത DNS ക്രമീകരണം പരിശോധിക്കുക. കണക്ഷനുകളിൽ തകരാർ ഉള്ള സുരക്ഷിത DNS സെർവറായിരിക്കാം നിങ്ങൾ കോൺഫിഗർ ചെയ്തിരിക്കുന്നത്.</translation> <translation id="2556876185419854533">&എഡിറ്റുചെയ്യുന്നത് പഴയപടിയാക്കുക</translation> <translation id="257674075312929031">ഗ്രൂപ്പ്</translation> <translation id="2586657967955657006">ക്ലിപ്പ്ബോർഡ്</translation> @@ -474,6 +477,7 @@ <translation id="3095940652251934233">പ്രസ്താവന</translation> <translation id="3096100844101284527">പിക്കപ്പ് വിലാസം ചേർക്കുക</translation> <translation id="3105172416063519923">അസറ്റ് ഐഡി:</translation> +<translation id="3107591622054137333"><ph name="BEGIN_LINK" />സുരക്ഷിത DNS കോൺഫിഗറേഷൻ പരിശോധിക്കുന്നു<ph name="END_LINK" /></translation> <translation id="3109728660330352905">നിങ്ങൾക്ക് ഈ പേജ് കാണാനുള്ള അംഗീകാരമില്ല.</translation> <translation id="3113284927548439113">മൂന്നാമത്തെ ഷിഫ്റ്റ്</translation> <translation id="3116158981186517402">ലാമിനേറ്റ് ചെയ്യൂ</translation> @@ -770,6 +774,7 @@ <translation id="4390472908992056574">ബ്രിം</translation> <translation id="4406896451731180161">തിരയൽ ഫലങ്ങൾ</translation> <translation id="4408413947728134509">കുക്കികൾ <ph name="NUM_COOKIES" /></translation> +<translation id="4414290883293381923">വഞ്ചനാപരമായ സൈറ്റിൽ നിങ്ങൾ ഇപ്പോൾ പാസ്വേഡ് നൽകി. നിങ്ങൾ ഈ പാസ്വേഡ് ഉപയോഗിക്കുന്ന <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> എന്നിവയിലേക്കും മറ്റ് സൈറ്റുകളിലേക്കും പോയി, ഇപ്പോൾ തന്നെ അത് മാറ്റാൻ Chrome ശുപാർശ ചെയ്യുന്നു.</translation> <translation id="4415426530740016218">പിക്കപ്പ് വിലാസം</translation> <translation id="4424024547088906515">ഈ സെർവറിന് അത് <ph name="DOMAIN" /> ആണെന്ന് തെളിയിക്കാനായില്ല; അതിന്റെ സുരക്ഷാ സർട്ടിഫിക്കറ്റ് Chrome-ന് പരിചയമില്ലാത്തതാണ്. തെറ്റായ കോൺഫിഗറേഷൻ കാരണമോ ഒരു അക്രമണകാരി നിങ്ങളുടെ കണക്ഷനെ തടസ്സപ്പെടുത്തുന്നത് കൊണ്ടോ ആയിരിക്കാം ഇത് സംഭവിച്ചത്.</translation> <translation id="443121186588148776">സീരിയൽ പോർട്ട്</translation> @@ -1201,6 +1206,7 @@ <translation id="6353505687280762741">{COUNT,plural, =0{ഒന്നുമില്ല}=1{<ph name="DOMAIN_LIST" /> എന്നതിനുള്ള ഒരു പാസ്വേഡ് (സമന്വയിപ്പിച്ചത്)}=2{<ph name="DOMAIN_LIST" /> എന്നതിനുള്ള 2 പാസ്വേഡുകൾ (സമന്വയിപ്പിച്ചത്)}other{<ph name="DOMAIN_LIST" /> എന്നതിനുള്ള# പാസ്വേഡുകൾ (സമന്വയിപ്പിച്ചത്)}}</translation> <translation id="6358450015545214790">ഇത് അര്ത്ഥമാക്കുന്നതെന്താണ്?</translation> <translation id="6361757823711327522">B7</translation> +<translation id="6364095313648930329"><ph name="BEGIN_LINK" />പ്രോക്സിയും ഫയർവാളും സുരക്ഷിത DNS കോൺഫിഗറേഷനും പരിശോധിക്കുന്നു<ph name="END_LINK" /></translation> <translation id="6366710531182496394">ഇടതുവശത്ത് ഇരട്ട സ്റ്റേപ്പിൾ ചെയ്യുക</translation> <translation id="6377268785556383139">'<ph name="SEARCH_TEXT" />' എന്നതിനായി ഒരു ഫലം</translation> <translation id="6380497234672085559">A0</translation> @@ -1223,6 +1229,7 @@ <translation id="6433595998831338502"><ph name="HOST_NAME" /> കണക്റ്റുചെയ്യൽ നിരസിച്ചു.</translation> <translation id="6434309073475700221">നിരാകരിക്കുക</translation> <translation id="6440503408713884761">അവഗണിച്ചു</translation> +<translation id="6443406338865242315">ഏതൊക്കെ വിപുലീകരണങ്ങളും പ്ലഗിനുകളും നിങ്ങൾ ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ട് എന്നത്</translation> <translation id="6446163441502663861">കഹു (എൻവലപ്പ്)</translation> <translation id="6446608382365791566">കൂടുതൽ വിവരങ്ങൾ ചേർക്കുക</translation> <translation id="6447842834002726250">കുക്കികള്</translation> @@ -1332,6 +1339,7 @@ <translation id="7012363358306927923">ചൈന UnionPay</translation> <translation id="7016992613359344582">ഈ നിരക്കുകൾ ഒറ്റത്തവണ അടയ്ക്കുന്നതോ അല്ലെങ്കിൽ ആവർത്തിക്കുന്നവയോ ആവാം, ഒപ്പം വ്യക്തമല്ലായിരിക്കാം.</translation> <translation id="7029809446516969842">പാസ്വേഡുകള്</translation> +<translation id="7031646650991750659">നിങ്ങൾ ഇൻസ്റ്റാൾ ചെയ്തിരിക്കുന്ന Google Play ആപ്പുകൾ</translation> <translation id="7050187094878475250">നിങ്ങൾ <ph name="DOMAIN" /> എന്നതിലെത്താൻ ശ്രമിച്ചു, എന്നാൽ തീരെ വിശ്വാസയോഗ്യമല്ലാത്ത ഒരു കാലാവധിയുള്ള സർട്ടിഫിക്കറ്റാണ് സെർവർ കാണിക്കുന്നത്.</translation> <translation id="705310974202322020">{NUM_CARDS,plural, =1{ഈ കാർഡ് ഇപ്പോൾ സംരക്ഷിക്കാനാവില്ല}other{ഈ കാർഡുകൾ ഇപ്പോൾ സംരക്ഷിക്കാനാവില്ല}}</translation> <translation id="7053983685419859001">തടയുക</translation> @@ -1391,6 +1399,7 @@ <translation id="7319430975418800333">A3</translation> <translation id="7320336641823683070">കണക്ഷൻ സഹായം</translation> <translation id="733354035281974745">ഉപകരണ ലോക്കൽ അക്കൗണ്ട് അസാധുവാക്കുക</translation> +<translation id="7333654844024768166">വഞ്ചനാപരമായ സൈറ്റിൽ നിങ്ങൾ ഇപ്പോൾ പാസ്വേഡ് നൽകി. നിങ്ങൾ ഈ പാസ്വേഡ് ഉപയോഗിക്കുന്ന <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> എന്നിവയിലേക്കും മറ്റ് സൈറ്റുകളിലേക്കും പോയി, ഇപ്പോൾ തന്നെ അത് മാറ്റാൻ Chromium ശുപാർശ ചെയ്യുന്നു.</translation> <translation id="7334320624316649418">&പുനഃക്രമീകരിക്കുന്നത് വീണ്ടും ചെയ്യുക</translation> <translation id="7337706099755338005">നിങ്ങളുടെ പ്ലാറ്റ്ഫോമിൽ ലഭ്യമല്ല.</translation> <translation id="733923710415886693">സർട്ടിഫിക്കറ്റ് സുതാര്യതയിലൂടെ സെർവറുടെ സർട്ടിഫിക്കറ്റ് വെളിപ്പെടുത്തിയിട്ടില്ല.</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb index 354990a..2a67f4c 100644 --- a/components/strings/components_strings_mr.xtb +++ b/components/strings/components_strings_mr.xtb
@@ -79,6 +79,7 @@ <translation id="129553762522093515">अलीकडे बंद केलेले</translation> <translation id="1298536327547837046">मालवेअर स्कॅनिंग</translation> <translation id="129863573139666797"><ph name="BEGIN_LINK" />आपल्या कुकीज साफ करून पहा<ph name="END_LINK" /></translation> +<translation id="1301324364792935241">तुमची सुरक्षित DNS सेटिंग्ज तपासा</translation> <translation id="1307966114820526988">कालबाह्य झालेली वैशिष्ट्ये</translation> <translation id="1314509827145471431">बाइंड राइट</translation> <translation id="1320233736580025032">Prc1 (Envelope)</translation> @@ -152,6 +153,7 @@ <translation id="1569487616857761740">एक्स्पायरीची तारीख एंटर करा</translation> <translation id="1581080074034554886">CVC</translation> <translation id="1583429793053364125">हे वेबपेज प्रदर्शित करताना काहीतरी चूक झाली.</translation> +<translation id="1586541204584340881">तुम्ही कोणती एक्स्टेंशन इंस्टॉल केली आहेत</translation> <translation id="1588438908519853928">सामान्य</translation> <translation id="1592005682883173041">स्थानिक डेटा ॲक्सेस</translation> <translation id="1594030484168838125">निवडा</translation> @@ -362,6 +364,7 @@ <translation id="2544644783021658368">एक दस्तऐवज</translation> <translation id="254947805923345898">धोरण मूल्य वैध नाही.</translation> <translation id="255002559098805027"><ph name="HOST_NAME" /> नी एक चुकीचे प्रतिसाद पाठविला.</translation> +<translation id="2553853292994445426">तुमची सुरक्षित DNS सेटिंग्ज तपासा. तुम्ही कदाचित कनेक्ट करता येत नसलेला एखाद्या सुरक्षित DNS सर्व्हर कॉन्फिगर केला आहे.</translation> <translation id="2556876185419854533">& संपादित करा पूर्ववत करा</translation> <translation id="257674075312929031">गट</translation> <translation id="2586657967955657006">क्लिपबोर्ड</translation> @@ -484,6 +487,7 @@ <translation id="3095940652251934233">Statement</translation> <translation id="3096100844101284527">पिकअप पत्ता जोडा</translation> <translation id="3105172416063519923">मालमत्ता आयडी:</translation> +<translation id="3107591622054137333"><ph name="BEGIN_LINK" />सुरक्षित DNS कॉन्फिगरेशन तपासत आहे<ph name="END_LINK" /></translation> <translation id="3109728660330352905">तुम्हाला हे पेज पाहण्याची परवानगी नाही.</translation> <translation id="3113284927548439113">तिसरी शिफ्ट</translation> <translation id="3116158981186517402">लॅमिनेट</translation> @@ -785,6 +789,7 @@ <translation id="4390472908992056574">ब्रिम</translation> <translation id="4406896451731180161">शोध परिणाम</translation> <translation id="4408413947728134509">कुकीज <ph name="NUM_COOKIES" /></translation> +<translation id="4414290883293381923">तुम्ही आताच एका फसव्या साइटवर तुमचा पासवर्ड एंटर केला आहे. तुम्ही हा पासवर्ड जेथे वापरता अशा <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> आणि इतर साइटवर जाण्याची व तो आता बदलण्याची Chrome शिफारस करते.</translation> <translation id="4415426530740016218">घेण्याचा पत्ता</translation> <translation id="4424024547088906515">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता सर्टिफिकेट Chrome द्वारे विश्वसनीय नाही. हे कदाचित एका चुकीच्या कॉंफिगरेशनमुळे किंवा हल्लेखोराने तुमचे कनेक्शन इंटरसेप्ट केल्यामुळे झाले असू शकते.</translation> <translation id="443121186588148776">सिरीअल पोर्ट</translation> @@ -1218,6 +1223,7 @@ <translation id="6353505687280762741">{COUNT,plural, =0{काहीही नाही}=1{(<ph name="DOMAIN_LIST" /> साठी) एक पासवर्ड सिंक केला}=2{(<ph name="DOMAIN_LIST" /> साठी) दोन पासवर्ड सिंक केले}other{(<ph name="DOMAIN_LIST" /> साठी) # पासवर्ड सिंक केले}}</translation> <translation id="6358450015545214790">याचा अर्थ काय आहे?</translation> <translation id="6361757823711327522">B7</translation> +<translation id="6364095313648930329"><ph name="BEGIN_LINK" />प्रॉक्सी, फायरवॉल आणि सुरक्षित DNS कॉन्फिगरेशन तपासत आहे<ph name="END_LINK" /></translation> <translation id="6366710531182496394">ड्युअल स्टेपल लेफ्ट</translation> <translation id="6377268785556383139">'<ph name="SEARCH_TEXT" />' साठी एक परिणाम</translation> <translation id="6380497234672085559">A0</translation> @@ -1240,6 +1246,7 @@ <translation id="6433595998831338502"><ph name="HOST_NAME" /> नी कनेक्ट करण्यास नकार दिला.</translation> <translation id="6434309073475700221">नाकारा</translation> <translation id="6440503408713884761">दुर्लक्ष केले</translation> +<translation id="6443406338865242315">तुम्ही कोणती एक्स्टेंशन आणि प्लग-इन इंस्टॉल केली आहेत</translation> <translation id="6446163441502663861">Kahu (Envelope)</translation> <translation id="6446608382365791566">अधिक माहिती जोडा</translation> <translation id="6447842834002726250">कुकीज</translation> @@ -1349,6 +1356,7 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">हे शुल्क एकाच वेळी द्यायचे किंवा आवर्ती असू शकतात आणि स्पष्ट नसू शकतात.</translation> <translation id="7029809446516969842">पासवर्ड</translation> +<translation id="7031646650991750659">तुम्ही कोणती Google Play ॲप्स इंस्टॉल केली आहेत</translation> <translation id="7050187094878475250">तुम्ही <ph name="DOMAIN" /> वर पोहोचण्याचा प्रयत्न केला, परंतु सर्व्हरने एक सर्टिफिकेट सादर केले आहे ज्याचा वैधता कालावधी हा विश्वासार्हतेसाठी खूप मोठा आहे.</translation> <translation id="705310974202322020">{NUM_CARDS,plural, =1{हे कार्ड आत्ता सेव्ह केले जाऊ शकत नाही}other{ही कार्डे आत्ता सेव्ह केली जाऊ शकत नाहीत}}</translation> <translation id="7053983685419859001">अवरोधित करा</translation> @@ -1408,6 +1416,7 @@ <translation id="7319430975418800333">A3</translation> <translation id="7320336641823683070">कनेक्शन मदत</translation> <translation id="733354035281974745">डिव्हाइसचे स्थानिक खाते ओव्हरराइड करा</translation> +<translation id="7333654844024768166">तुम्ही आताच एका फसव्या साइटवर तुमचा पासवर्ड एंटर केला आहे. तुम्ही हा पासवर्ड जेथे वापरता अशा <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> आणि इतर साइटवर जाण्याची व तो आता बदलण्याची Chromium शिफारस करते.</translation> <translation id="7334320624316649418">&पुनर्क्रमित करा पुन्हा करा</translation> <translation id="7337706099755338005">तुमच्या प्लॅटफॉर्मवर उपलब्ध नाही.</translation> <translation id="733923710415886693">सर्टिफिकेट पारदर्शकतेअंतर्गत सर्व्हरचे सर्टिफिकेट उघड केले नाही.</translation>
diff --git a/components/strings/components_strings_ne.xtb b/components/strings/components_strings_ne.xtb index f990470..ecb5852 100644 --- a/components/strings/components_strings_ne.xtb +++ b/components/strings/components_strings_ne.xtb
@@ -79,6 +79,7 @@ <translation id="129553762522093515">हालैमा बन्द गरिएको</translation> <translation id="1298536327547837046">मालवेयर स्क्यान गर्ने सुविधा</translation> <translation id="129863573139666797"><ph name="BEGIN_LINK" />कुकीहरूलाई खाली गर्ने प्रयास गर्नुहोस्<ph name="END_LINK" /></translation> +<translation id="1301324364792935241">DNS सेटिङ</translation> <translation id="1307966114820526988">चल्तीबाट हटाइएका सुविधाहरू</translation> <translation id="1314509827145471431">दायाँ बाइन्ड</translation> <translation id="1320233736580025032">Prc1 (Envelope)</translation> @@ -152,6 +153,7 @@ <translation id="1569487616857761740">म्याद सकिने मिति प्रविष्टि गर्नुहोस्</translation> <translation id="1581080074034554886">CVC</translation> <translation id="1583429793053364125">यो वेबपृष्ठ प्रदर्शन गर्दा कुनै त्रुटी भयो।</translation> +<translation id="1586541204584340881">तपाईंले स्थापना गर्नुभएका एक्स्टेन्सनहरू</translation> <translation id="1588438908519853928">सामान्य</translation> <translation id="1592005682883173041">स्थानीय डेटा पहुँच</translation> <translation id="1594030484168838125">छनौट गर्नुहोस्</translation> @@ -362,6 +364,7 @@ <translation id="2544644783021658368">एउटा कागजात</translation> <translation id="254947805923345898">नीतिको मान मान्य छैन।</translation> <translation id="255002559098805027"><ph name="HOST_NAME" /> ले अमान्य प्रतिक्रिया पठायो।</translation> +<translation id="2553853292994445426">आफ्नो सुरक्षित DNS सेटिङको जाँच गर्नुहोस्। तपाईंले जोड्न नसकिएका सुरक्षित DNS सर्भर कन्फिगर गर्नुभएको हुन सक्छ।</translation> <translation id="2556876185419854533">सम्पादन &पूर्ववत गर्नुहोस्</translation> <translation id="257674075312929031">समूह</translation> <translation id="2586657967955657006">क्लिपबोर्ड</translation> @@ -476,6 +479,7 @@ <translation id="3095940652251934233">वक्तव्य</translation> <translation id="3096100844101284527">पिकअप गर्ने ठेगाना थप्नुहोस्</translation> <translation id="3105172416063519923">सम्पत्ति ID:</translation> +<translation id="3107591622054137333"><ph name="BEGIN_LINK" />सुरक्षित DNS कन्फिगुरेसनको जाँच गर्दै<ph name="END_LINK" /></translation> <translation id="3109728660330352905">तपाईंलाई यस पृष्ठ हेर्न अधिकार छैन।</translation> <translation id="3113284927548439113">तेस्रो सिफ्ट</translation> <translation id="3116158981186517402">लेमिनेसन गर्नुहोस्</translation> @@ -770,6 +774,7 @@ <translation id="4390472908992056574">बिट</translation> <translation id="4406896451731180161">खोजका परिणाम</translation> <translation id="4408413947728134509"><ph name="NUM_COOKIES" /> कुकीहरू</translation> +<translation id="4414290883293381923">तपाईंले भर्खरै कुनै भ्रामक साइटमा आफ्नो पासवर्ड प्रविष्टि गर्नुभएको छ। Chrome ले <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> <ph name="WEBSITE_3" />, र तपाईंले यो पासवर्ड प्रयोग गर्ने अन्य साइटहरूमा गई आफ्नो पासवर्ड अहिले नै बदल्न सिफारिस गर्छ।</translation> <translation id="4415426530740016218">पिकअप गर्ने ठेगाना</translation> <translation id="4424024547088906515">यो सर्भरले यो <ph name="DOMAIN" /> को भनि प्रमाणित गर्न सकेन; यसको सुरक्षा प्रमाणपत्रलाई Chrome ले विश्वास गर्दैन। यो कुनै एउटा मिसकन्फिगरेसन वा कुनै आक्रमणकारीले तपाईंको जडानमा गरेको हस्तक्षेपको कारणले गर्दा भएको हुन सक्छ।</translation> <translation id="443121186588148776">क्रमिक पोर्ट</translation> @@ -1201,6 +1206,7 @@ <translation id="6353505687280762741">{COUNT,plural, =0{कुनै पनि होइन}=1{<ph name="DOMAIN_LIST" /> को १ पासवर्ड (सिंक गरिएको छ)}=2{<ph name="DOMAIN_LIST" /> का २ पासवर्डहरू (सिंक गरिएका छन्)}other{<ph name="DOMAIN_LIST" /> का # पासवर्डहरू (सिंक गरिएका छन्)}}</translation> <translation id="6358450015545214790">यसको अर्थ के हो?</translation> <translation id="6361757823711327522">B7</translation> +<translation id="6364095313648930329"><ph name="BEGIN_LINK" />प्रोक्सी, फायरवाल र सुरक्षित DNS कन्फिगुरेसनको जाँच गर्दै<ph name="END_LINK" /></translation> <translation id="6366710531182496394">बायाँपट्टि दुई स्टिच</translation> <translation id="6377268785556383139">'<ph name="SEARCH_TEXT" />' को १ परिणाम</translation> <translation id="6380497234672085559">A0</translation> @@ -1223,6 +1229,7 @@ <translation id="6433595998831338502"><ph name="HOST_NAME" /> ले जडान गर्न अस्वीकार गर्यो।</translation> <translation id="6434309073475700221">त्याग्नुहोस्</translation> <translation id="6440503408713884761">उपेक्षित</translation> +<translation id="6443406338865242315">तपाईंले स्थापना गर्नुभएका विस्तार र प्लगइनहरू</translation> <translation id="6446163441502663861">Kahu (Envelope)</translation> <translation id="6446608382365791566">थप जानकारी थप्नुहोस्</translation> <translation id="6447842834002726250">कुकीहरू</translation> @@ -1332,6 +1339,7 @@ <translation id="7012363358306927923">चीन UnionPay</translation> <translation id="7016992613359344582">यी शुल्कहरू एक पटक तिरे पुग्ने वा बारम्बार तिर्नु पर्ने हुन सक्छन् र यस सम्बन्धमा स्पष्टता नहुन पनि सक्छ।</translation> <translation id="7029809446516969842">पासवर्डहरू</translation> +<translation id="7031646650991750659">तपाईंले स्थापना गर्नुभएका Google Play अनुप्रयोगहरू</translation> <translation id="7050187094878475250">तपाईं <ph name="DOMAIN" /> मा पुग्न प्रयास गर्नुभयो, तर सर्भरले एउटा प्रमाणपत्र प्रस्तुत गर्दछ जसको वैधानिकता अवधि भरोसा योग्य हुन निकै लामो छ।</translation> <translation id="705310974202322020">{NUM_CARDS,plural, =1{यो कार्ड अहिले सुरक्षित गर्न सकिँदैन}other{यी कार्डहरू अहिले सुरक्षित गर्न सकिँदैन}}</translation> <translation id="7053983685419859001">रोक्नुहोस्</translation> @@ -1391,6 +1399,7 @@ <translation id="7319430975418800333">A3</translation> <translation id="7320336641823683070">जडानसम्बन्धी मद्दत</translation> <translation id="733354035281974745">यन्त्रका स्थानीय खाताको ओभरराइड</translation> +<translation id="7333654844024768166">तपाईंले भर्खरै कुनै भ्रामक साइटमा आफ्नो पासवर्ड प्रविष्टि गर्नुभएको छ। Chromium ले <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> र तपाईंले यो पासवर्ड प्रयोग गर्ने अन्य साइटहरूमा गई तपाईंको पासवर्ड अहिले नै बदल्न सिफारिस गर्छ।</translation> <translation id="7334320624316649418">क्रम परिवर्तन &पुन: गर्नुहोस्</translation> <translation id="7337706099755338005">तपाईंको प्लेटफर्ममा उपलब्ध छैन।</translation> <translation id="733923710415886693">प्रमाणपत्रको पारदर्शिता नीति मार्फत सर्भरको प्रमाणपत्रको खुलासा भएन।</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb index 392ed36..4dd2cde 100644 --- a/components/strings/components_strings_no.xtb +++ b/components/strings/components_strings_no.xtb
@@ -364,7 +364,7 @@ <translation id="2544644783021658368">Enkeltdokument</translation> <translation id="254947805923345898">Regelverdien er ikke gyldig.</translation> <translation id="255002559098805027"><ph name="HOST_NAME" /> sendte et ugyldig svar.</translation> -<translation id="2553853292994445426">Kontrollér innstillingene for sikker DNS. Det kan hende at du har konfigurert en sikker DNS-tjener som vi ikke klarer å koble til.</translation> +<translation id="2553853292994445426">Kontrollér innstillingene for sikker DNS. Det er mulig du har konfigurert en sikker DNS-tjener som vi ikke klarer å koble til.</translation> <translation id="2556876185419854533">&Angre endringen</translation> <translation id="257674075312929031">Gruppe</translation> <translation id="2586657967955657006">Utklippstavle</translation>
diff --git a/components/strings/components_strings_or.xtb b/components/strings/components_strings_or.xtb index 406d61c..cfd957f1 100644 --- a/components/strings/components_strings_or.xtb +++ b/components/strings/components_strings_or.xtb
@@ -79,6 +79,7 @@ <translation id="129553762522093515">ବର୍ତ୍ତମାନ ବନ୍ଦ ହୋଇଛି</translation> <translation id="1298536327547837046">ମାଲ୍ୱେର୍ ସ୍କାନିଂ</translation> <translation id="129863573139666797"><ph name="BEGIN_LINK" />ଆପଣଙ୍କର କୁକୀଗୁଡିକୁ ଖାଲି କରିବାକୁ ଚେଷ୍ଟା କରନ୍ତୁ<ph name="END_LINK" /></translation> +<translation id="1301324364792935241">ଆପଣଙ୍କର ସୁରକ୍ଷିତ DNS ସେଟିଂସ୍ ଯାଞ୍ଚ କରନ୍ତୁ</translation> <translation id="1307966114820526988">ଅଗ୍ରାହ୍ୟ କରାଯାଇଥିବା ଫିଚର୍ଗୁଡ଼ିକ</translation> <translation id="1314509827145471431">ଡାହାଣ ପଟରେ ବାଇଣ୍ଡ</translation> <translation id="1320233736580025032">Prc1 (ଏନଭଲପ୍)</translation> @@ -152,6 +153,7 @@ <translation id="1569487616857761740">ମିଆଦ ଶେଷର ତାରିଖ ଲେଖନ୍ତୁ</translation> <translation id="1581080074034554886">CVC</translation> <translation id="1583429793053364125">ଏହି ୱେବ୍ ପୃଷ୍ଠାଟି ପ୍ରଦର୍ଶନ କରୁଥିବା ବେଳେ କିଛି ତ୍ରୁଟି ହୋଇଛି।</translation> +<translation id="1586541204584340881">ଆପଣ କେଉଁ ଏକ୍ସଟେନସନଗୁଡ଼ିକୁ ଇନଷ୍ଟଲ୍ କରିଛନ୍ତି</translation> <translation id="1588438908519853928">ସାଧାରଣ</translation> <translation id="1592005682883173041">ସ୍ଥାନୀୟ ଡାଟା ଆକ୍ସେସ୍</translation> <translation id="1594030484168838125">ବାଛନ୍ତୁ</translation> @@ -362,6 +364,7 @@ <translation id="2544644783021658368">ଗୋଟିଏ ଡକ୍ୟୁମେଣ୍ଟ</translation> <translation id="254947805923345898">ନୀତିର ମୂଲ୍ୟ ବୈଧ ନୁହେଁ।</translation> <translation id="255002559098805027"><ph name="HOST_NAME" /> ଏକ ଅବୈଧ ପ୍ରତିକ୍ରିୟା ପଠାଇଲା।</translation> +<translation id="2553853292994445426">ଆପଣଙ୍କର ସୁରକ୍ଷିତ DNS ସେଟିଂସ୍ ଯାଞ୍ଚ କରନ୍ତୁ। ଆପଣ ହୁଏତ ଏକ ସୁରକ୍ଷିତ DNS ସର୍ଭରକୁ କନଫିଗର୍ କରିଛନ୍ତି ଯେଉଁଥିରେ ସଂଯୋଗଗୁଡ଼ିକ ବିଫଳ ହେଉଛି।</translation> <translation id="2556876185419854533">&ଏଡିଟ୍କୁ ପୂର୍ବବତ୍ କରନ୍ତୁ</translation> <translation id="257674075312929031">ଗୋଷ୍ଠୀ</translation> <translation id="2586657967955657006">କ୍ଲିପ୍ବୋର୍ଡ</translation> @@ -474,6 +477,7 @@ <translation id="3095940652251934233">ବକ୍ତବ୍ୟ</translation> <translation id="3096100844101284527">ପିକ୍ଅପ୍ର ଠିକଣା ଯୋଗ କରନ୍ତୁ</translation> <translation id="3105172416063519923">ଆସେଟ୍ ID:</translation> +<translation id="3107591622054137333"><ph name="BEGIN_LINK" />ସୁରକ୍ଷିତ DNS କନଫିଗରେସନ୍ ଯାଞ୍ଚ କରାଯାଉଛି<ph name="END_LINK" /></translation> <translation id="3109728660330352905">ଏହି ପୃଷ୍ଠାକୁ ଦେଖିବା ପାଇଁ ଆପଣଙ୍କ ପାଖରେ ଅଧିକାର ନାହିଁ।</translation> <translation id="3113284927548439113">ତୃତୀୟ ସିଫ୍ଟ</translation> <translation id="3116158981186517402">ଲାମିନେଟ୍</translation> @@ -768,6 +772,7 @@ <translation id="4390472908992056574">ବ୍ରିମ୍</translation> <translation id="4406896451731180161">ସନ୍ଧାନ ପରିଣାମ</translation> <translation id="4408413947728134509"><ph name="NUM_COOKIES" />ଟି କୁକୀ</translation> +<translation id="4414290883293381923">ଆପଣ ଏବେ ଏକ ପ୍ରତାରଣାମୂଳକ ସାଇଟରେ ଆପଣଙ୍କର ପାସୱାର୍ଡ ଲେଖିଛନ୍ତି। <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> ଏବଂ ଏହି ପାସୱାର୍ଡକୁ ଆପଣ ବ୍ୟବହାର କରୁଥିବା ଅନ୍ୟ ସାଇଟଗୁଡ଼ିକୁ ଯାଇ ଏହାକୁ ବର୍ତ୍ତମାନ ପରିବର୍ତ୍ତନ କରିବା ପାଇଁ Chrome ସୁପାରିଶ କରେ।</translation> <translation id="4415426530740016218">ପିକ୍ଅପ୍ ଠିକଣା</translation> <translation id="4424024547088906515">ଏହି ସର୍ଭର୍ ଏହା ପ୍ରମାଣ କରିପାରିଲା ନାହିଁ ଯେ, ଏହା ଏକ <ph name="DOMAIN" /> ଅଟେ; ଏହାର ସୁରକ୍ଷା ସାର୍ଟିଫିକେଟ୍ Chrome ଦ୍ୱାରା ବିଶ୍ୱସନୀୟ ନୁହେଁ। ଏହା ଏକ ଭୁଲ୍ କନଫିଗ୍ରେସନ୍ ଅଟେ କିମ୍ବା ଜଣେ ଆକ୍ରମଣକାରୀ ଆପଣଙ୍କର ସଂଯୋଗକୁ ପ୍ରତିରୋଧ କରୁଥିବା କାରଣରୁ ହୋଇପାରେ।</translation> <translation id="443121186588148776">କ୍ରମିକ ପୋର୍ଟ</translation> @@ -1198,6 +1203,7 @@ <translation id="6353505687280762741">{COUNT,plural, =0{କୌଣସିଟି ନୁହେଁ}=1{1ଟି ପାସ୍ୱାର୍ଡ (<ph name="DOMAIN_LIST" /> ପାଇଁ, ସିଙ୍କ୍ କରାଯାଇଛି)}=2{2ଟି ପାସ୍ୱାର୍ଡ (<ph name="DOMAIN_LIST" /> ପାଇଁ, ସିଙ୍କ୍ କରାଯାଇଛି)}other{#ଟି ପାସ୍ୱାର୍ଡ (<ph name="DOMAIN_LIST" /> ପାଇଁ, ସିଙ୍କ୍ କରାଯାଇଛି)}}</translation> <translation id="6358450015545214790">ଏଗୁଡ଼ିକର ଅର୍ଥ କ'ଣ?</translation> <translation id="6361757823711327522">B7</translation> +<translation id="6364095313648930329"><ph name="BEGIN_LINK" />ପ୍ରକ୍ସି ଓ ଫାୟାରୱାଲ୍ ଏବଂ ସୁରକ୍ଷିତ DNS କନଫିଗରେସନ୍ ଯାଞ୍ଚ କରାଯାଉଛି<ph name="END_LINK" /></translation> <translation id="6366710531182496394">ବାମ ପଟରେ ଦୁଇଟି ଷ୍ଟାପଲ୍</translation> <translation id="6377268785556383139">'<ph name="SEARCH_TEXT" />' ପାଇଁ 1ଟି ଫଳାଫଳ</translation> <translation id="6380497234672085559">A0</translation> @@ -1220,6 +1226,7 @@ <translation id="6433595998831338502"><ph name="HOST_NAME" /> ସଂଯୋଗ କରିବାକୁ ଅସ୍ୱୀକାର କରିଛନ୍ତି।</translation> <translation id="6434309073475700221">ବର୍ଜିତ କରନ୍ତୁ</translation> <translation id="6440503408713884761">ଅଣଦେଖା କରାଗଲା</translation> +<translation id="6443406338865242315">ଆପଣ କେଉଁ ଏକ୍ସଟେନସନ୍ ଏବଂ ପ୍ଲଗଇନଗୁଡ଼ିକ ଇନଷ୍ଟଲ୍ କରିଛନ୍ତି</translation> <translation id="6446163441502663861">କାହୁ (ଏନଭଲପ୍)</translation> <translation id="6446608382365791566">ଅଧିକ ସୂଚନା ଯୋଗ କରନ୍ତୁ</translation> <translation id="6447842834002726250">କୁକୀଗୁଡିକ</translation> @@ -1329,6 +1336,7 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">ଏହି ଶୁଳ୍କଗୁଡ଼ିକ ଗୋଟିଏ ଥର କିମ୍ବା ବାରମ୍ବାର ଲାଗୁ ହୋଇପାରେ ଏବଂ ସ୍ପଷ୍ଟ ଭାବରେ ଲାଗୁ ହୋଇନପାରେ।</translation> <translation id="7029809446516969842">ପାସୱାର୍ଡଗୁଡିକ</translation> +<translation id="7031646650991750659">ଆପଣ କେଉଁ Google Play ଆପ୍ସ ଇନଷ୍ଟଲ୍ କରିଛନ୍ତି</translation> <translation id="7050187094878475250">ଆପଣଙ <ph name="DOMAIN" />ରେ ପହଞ୍ଚିବାକୁ ପ୍ରୟାସ କରିଛନ୍ତି, କିନ୍ତୁ ବିଶ୍ଵାସଯୋଗ୍ୟ ହେବା ପାଇଁ ସର୍ଭର ଉପସ୍ଥାପନ କରିଥିବା ସାର୍ଟିଫିକେଟ୍ର ବୈଧତା ସମୟ ଅବଧି ଅଧିକ ଲମ୍ବା।</translation> <translation id="705310974202322020">{NUM_CARDS,plural, =1{ଏହି କାର୍ଡ ବର୍ତ୍ତମାନ ସମୟରେ ସେଭ୍ କରାଯାଇପାରିବ ନାହିଁ}other{ଏହି କାର୍ଡଗୁଡ଼ିକ ବର୍ତ୍ତମାନ ସମୟରେ ସେଭ୍ କରାଯାଇପାରିବ ନାହିଁ}}</translation> <translation id="7053983685419859001">ଅବରୋଧ କରନ୍ତୁ</translation> @@ -1388,6 +1396,7 @@ <translation id="7319430975418800333">A3</translation> <translation id="7320336641823683070">ସଂଯୋଗ ସହାୟତା</translation> <translation id="733354035281974745">ସ୍ଥାନୀୟ ଡିଭାଇସ୍ ଆକାଉଣ୍ଟ ଓଭର୍ରାଇଡ୍</translation> +<translation id="7333654844024768166">ଆପଣ ଏବେ ଏକ ପ୍ରତାରଣାମୂଳକ ସାଇଟରେ ଆପଣଙ୍କର ପାସୱାର୍ଡ ଲେଖିଛନ୍ତି। <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> ଏବଂ ଏହି ପାସୱାର୍ଡକୁ ଆପଣ ବ୍ୟବହାର କରୁଥିବା ଅନ୍ୟ ସାଇଟଗୁଡ଼ିକୁ ଯାଇ ଏହାକୁ ବର୍ତ୍ତମାନ ପରିବର୍ତ୍ତନ କରିବା ପାଇଁ Chromium ସୁପାରିଶ କରେ।</translation> <translation id="7334320624316649418">&ରି-ଡୁକୁ ପୁନଃକ୍ରମରେ ରଖନ୍ତୁ</translation> <translation id="7337706099755338005">ଆପଣଙ୍କର ପ୍ଲାଟ୍ଫର୍ମରେ ଉପଲବ୍ଧ ନାହିଁ।</translation> <translation id="733923710415886693">ସର୍ଭର୍ର ସାର୍ଟିଫିକେଟ୍, ସାର୍ଟିଫିକେଟ୍ ସ୍ଵଚ୍ଛତା ମାଧ୍ୟମରେ ପ୍ରକାଶ କରାଯାଇନାହିଁ।</translation>
diff --git a/components/strings/components_strings_pa.xtb b/components/strings/components_strings_pa.xtb index 0b7552e..69f5c23 100644 --- a/components/strings/components_strings_pa.xtb +++ b/components/strings/components_strings_pa.xtb
@@ -79,7 +79,7 @@ <translation id="129553762522093515">ਹਾਲ ਵਿੱਚ ਹੀ ਬੰਦ ਕੀਤੇ</translation> <translation id="1298536327547837046">ਮਾਲਵੇਅਰ ਸਕੈਨਿੰਗ</translation> <translation id="129863573139666797"><ph name="BEGIN_LINK" />ਆਪਣੀਆਂ ਕੁਕੀਜ਼ ਨੂੰ ਸਾਫ਼ ਕਰਨ ਨੂੰ ਅਜ਼ਮਾਓ<ph name="END_LINK" /></translation> -<translation id="1301324364792935241">ਸੁਰੱਖਿਅਤ DNS ਦੀਆਂ ਆਪਣੀਆਂ ਸੈਟਿੰਗਾਂ ਦੀ ਜਾਂਚ ਕਰੋ</translation> +<translation id="1301324364792935241">ਆਪਣੀਆਂ ਸੁਰੱਖਿਅਤ DNS ਸੈਟਿੰਗਾਂ ਦੀ ਜਾਂਚ ਕਰੋ</translation> <translation id="1307966114820526988">ਨਾਪਸੰਦ ਕੀਤੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ</translation> <translation id="1314509827145471431">ਸੱਜੇ ਜਿਲਦਬੰਦ</translation> <translation id="1320233736580025032">Prc1 (ਲਿਫ਼ਾਫ਼ਾ)</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb index dd45f62..ce6ff5c 100644 --- a/components/strings/components_strings_ru.xtb +++ b/components/strings/components_strings_ru.xtb
@@ -774,7 +774,7 @@ <translation id="4390472908992056574">Поля</translation> <translation id="4406896451731180161">Результаты поиска</translation> <translation id="4408413947728134509">Настройки файлов cookie <ph name="NUM_COOKIES" /></translation> -<translation id="4414290883293381923">Вы только что ввели пароль на поддельном сайте. Рекомендуем немедленно сменить пароль для следующих ресурсов: <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> и других сайтов, на которых вы используете введенный пароль.</translation> +<translation id="4414290883293381923">Вы только что ввели пароль на поддельном сайте. Рекомендуем немедленно сменить пароль для <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> и других сайтов, на которых вы используете этот пароль.</translation> <translation id="4415426530740016218">Адрес получения</translation> <translation id="4424024547088906515">Не удалось подтвердить, что это сервер <ph name="DOMAIN" />. Chrome не доверяет его сертификату безопасности. Возможно, сервер настроен неправильно или кто-то пытается перехватить ваши данные.</translation> <translation id="443121186588148776">Последовательный порт</translation> @@ -1399,7 +1399,7 @@ <translation id="7319430975418800333">A3</translation> <translation id="7320336641823683070">Устранение ошибок при подключении к Интернету</translation> <translation id="733354035281974745">Приоритет локального аккаунта на устройстве</translation> -<translation id="7333654844024768166">Вы только что ввели пароль на поддельном сайте. Рекомендуем немедленно сменить пароль для следующих ресурсов: <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> и других сайтов, на которых вы используете введенный пароль.</translation> +<translation id="7333654844024768166">Вы только что ввели пароль на поддельном сайте. Рекомендуем немедленно сменить пароль для <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> и других сайтов, на которых вы используете этот пароль.</translation> <translation id="7334320624316649418">&Повторить изменение порядка</translation> <translation id="7337706099755338005">Недоступно на вашей платформе.</translation> <translation id="733923710415886693">Сертификат сервера не проходил проверку.</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb index ff92df3..f9d8d27 100644 --- a/components/strings/components_strings_sk.xtb +++ b/components/strings/components_strings_sk.xtb
@@ -364,7 +364,7 @@ <translation id="2544644783021658368">Jeden dokument</translation> <translation id="254947805923345898">Hodnota pravidla je neplatná.</translation> <translation id="255002559098805027">Web <ph name="HOST_NAME" /> odoslal neplatnú odpoveď.</translation> -<translation id="2553853292994445426">Skontrolujte svoje nastavenia zabezpečeného servera DNS. Možno ste nastavili zabezpečený server DNS, ku ktorému sa nedá pripojiť.</translation> +<translation id="2553853292994445426">Skontrolujte svoje nastavenia zabezpečeného servera DNS. Možno ste nakonfigurovali zabezpečený server DNS, ku ktorému sa nedá pripojiť.</translation> <translation id="2556876185419854533">&Vrátiť späť úpravu</translation> <translation id="257674075312929031">Skupina</translation> <translation id="2586657967955657006">Schránka</translation> @@ -477,7 +477,7 @@ <translation id="3095940652251934233">Výpis</translation> <translation id="3096100844101284527">Pridať adresu vyzdvihnutia</translation> <translation id="3105172416063519923">Identifikátor obsahu:</translation> -<translation id="3107591622054137333"><ph name="BEGIN_LINK" />skontrolovať konfiguráciu zabezpečeného servera DNS<ph name="END_LINK" /></translation> +<translation id="3107591622054137333"><ph name="BEGIN_LINK" />Skontrolovať konfiguráciu zabezpečeného servera DNS<ph name="END_LINK" /></translation> <translation id="3109728660330352905">Nemáte povolenie na zobrazenie tejto stránky.</translation> <translation id="3113284927548439113">Tretia zmena</translation> <translation id="3116158981186517402">Laminovať</translation> @@ -1225,7 +1225,7 @@ <translation id="6433595998831338502">Web <ph name="HOST_NAME" /> zamietol pripojenie.</translation> <translation id="6434309073475700221">Odstrániť</translation> <translation id="6440503408713884761">Ignorované</translation> -<translation id="6443406338865242315">ktoré rozšírenia a doplnky máte nainštalované;</translation> +<translation id="6443406338865242315">Ktoré rozšírenia a doplnky máte nainštalované</translation> <translation id="6446163441502663861">Kahu (obálka)</translation> <translation id="6446608382365791566">Pridanie ďalších informácií</translation> <translation id="6447842834002726250">Súbory cookie</translation> @@ -1335,7 +1335,7 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Tieto poplatky môžu byť jednorazové alebo opakované a nemusia byť predvídateľné.</translation> <translation id="7029809446516969842">Heslá</translation> -<translation id="7031646650991750659">ktoré aplikácie Google Play máte nainštalované.</translation> +<translation id="7031646650991750659">Ktoré aplikácie Google Play máte nainštalované.</translation> <translation id="7050187094878475250">Pokúsili ste sa prejsť do domény <ph name="DOMAIN" />, ale server udelil certifikát, ktorého obdobie platnosti je príliš dlhé, a preto nie je dôveryhodný</translation> <translation id="705310974202322020">{NUM_CARDS,plural, =1{Túto kartu nie je momentálne možné uložiť}few{Tieto karty nie je momentálne možné uložiť}many{Tieto karty nie je momentálne možné uložiť}other{Tieto karty nie je momentálne možné uložiť}}</translation> <translation id="7053983685419859001">Blokovať</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb index 6b63e76..43c6b28 100644 --- a/components/strings/components_strings_te.xtb +++ b/components/strings/components_strings_te.xtb
@@ -79,6 +79,7 @@ <translation id="129553762522093515">ఇటీవల మూసివెయ్యబడినవి</translation> <translation id="1298536327547837046">మాల్వేర్ స్కానింగ్</translation> <translation id="129863573139666797"><ph name="BEGIN_LINK" />మీ కుక్కీలను తీసివేయడానికి ప్రయత్నించండి<ph name="END_LINK" /></translation> +<translation id="1301324364792935241">మీ సెక్యూర్ DNS సెట్టింగ్లను తనిఖీ చేయండి</translation> <translation id="1307966114820526988">విస్మరించబడిన ఫీచర్లు</translation> <translation id="1314509827145471431">కుడివైపున బైండ్</translation> <translation id="1320233736580025032">Prc1 (ఎన్వలప్)</translation> @@ -154,6 +155,7 @@ <translation id="1569487616857761740">గడువు ముగింపు తేదీని నమోదు చేయండి</translation> <translation id="1581080074034554886">CVC</translation> <translation id="1583429793053364125">ఈ వెబ్ పేజీని ప్రదర్శిస్తున్నప్పుడు ఏదో తప్పు జరిగింది.</translation> +<translation id="1586541204584340881">మీరు ఏ ఎక్స్టెన్షన్లను ఇన్ స్టాల్ చేసుకున్నారు</translation> <translation id="1588438908519853928">సాధారణ</translation> <translation id="1592005682883173041">స్థానిక డేటా యాక్సెస్</translation> <translation id="1594030484168838125">ఎంచుకోండి</translation> @@ -364,6 +366,7 @@ <translation id="2544644783021658368">ఒక డాక్యుమెంట్</translation> <translation id="254947805923345898">విధానం విలువ చెల్లుబాటు కాదు.</translation> <translation id="255002559098805027"><ph name="HOST_NAME" /> చెల్లని ప్రతిస్పందనను పంపింది.</translation> +<translation id="2553853292994445426">మీ సెక్యూర్ DNS సెట్టింగ్లను తనిఖీ చేయండి. మీరు కాన్ఫిగర్ చేసిన సెక్యూర్ సర్వర్కు కనెక్ట్ కావడంలో వైఫల్యం ఎదురవుతూ ఉన్నట్టుంది.</translation> <translation id="2556876185419854533">&సవరించడాన్ని రద్దు చేయి</translation> <translation id="257674075312929031">సమూహం</translation> <translation id="2586657967955657006">క్లిప్బోర్డ్</translation> @@ -484,6 +487,7 @@ <translation id="3095940652251934233">స్టేట్మెంట్</translation> <translation id="3096100844101284527">పికప్ చిరునామాను జోడించండి</translation> <translation id="3105172416063519923">అసెట్ ID:</translation> +<translation id="3107591622054137333"><ph name="BEGIN_LINK" />సెక్యూర్ DNS కాన్ఫిగరేషన్ని తనిఖీ చేస్తోంది<ph name="END_LINK" /></translation> <translation id="3109728660330352905">మీకు ఈ పేజీని వీక్షించడానికి అధికారం లేదు.</translation> <translation id="3113284927548439113">మూడవ షిఫ్ట్</translation> <translation id="3116158981186517402">లామినేట్</translation> @@ -786,6 +790,7 @@ <translation id="4390472908992056574">బ్రిమ్</translation> <translation id="4406896451731180161">శోధన ఫలితాలు</translation> <translation id="4408413947728134509">కుక్కీలు <ph name="NUM_COOKIES" /></translation> +<translation id="4414290883293381923">మీరు మోసపూరితమైన సైట్లో మీ పాస్వర్డ్ను ఎంటర్ చేశారు. మీరు ఈ పాస్వర్డ్ను ఉపయోగించిన<ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> మరియు ఇతర సైట్లకు ఇప్పుడే వెళ్లి, మీ పాస్వర్డ్ను మార్చాల్సిందిగా Chrome సిఫార్సు చేస్తోంది.</translation> <translation id="4415426530740016218">పికప్ చిరునామా</translation> <translation id="4424024547088906515">ఈ సర్వర్ <ph name="DOMAIN" /> అని నిరూపించుకోలేకపోయింది; దీని భద్రతా ప్రమాణపత్రాన్ని Chrome విశ్వసించలేదు. ఇది తప్పుగా కాన్ఫిగర్ చేయడం వలన లేదా దాడిచేసే వ్యక్తి మీ కనెక్షన్కు అంతరాయం కలిగించడం వలన జరిగి ఉండవచ్చు.</translation> <translation id="443121186588148776">శ్రేణీకృత పోర్ట్</translation> @@ -1218,6 +1223,7 @@ <translation id="6353505687280762741">{COUNT,plural, =0{ఏవీ లేవు}=1{1 పాస్వర్డ్ (<ph name="DOMAIN_LIST" />కు చెందినది, సింక్ చేయబడింది)}=2{2 పాస్వర్డ్లు (<ph name="DOMAIN_LIST" />కు చెందినవి, సింక్ చేయబడ్డాయి)}other{# పాస్వర్డ్లు (<ph name="DOMAIN_LIST" />కు చెందినవి, సింక్ చేయబడ్డాయి)}}</translation> <translation id="6358450015545214790">దీని అర్ధం ఏమిటి?</translation> <translation id="6361757823711327522">B7</translation> +<translation id="6364095313648930329"><ph name="BEGIN_LINK" />ప్రాక్సీ, ఫైర్వాల్ మరియు సెక్యూర్ DNS కాన్ఫిగరేషన్ను తనిఖీ చేయడం<ph name="END_LINK" /></translation> <translation id="6366710531182496394">ఎడమవైపు డ్యుయల్ స్టేపుల్</translation> <translation id="6377268785556383139">'<ph name="SEARCH_TEXT" />' అనే దానికి 1 ఫలితం మాత్రమే లభించింది</translation> <translation id="6380497234672085559">A0</translation> @@ -1240,6 +1246,7 @@ <translation id="6433595998831338502"><ph name="HOST_NAME" /> కనెక్ట్ కావడానికి నిరాకరించింది.</translation> <translation id="6434309073475700221">తొలగించు</translation> <translation id="6440503408713884761">విస్మరించబడింది</translation> +<translation id="6443406338865242315">ఏ ఎక్స్టెన్షన్లు మరియు ప్లగిన్లను మీరు ఇన్స్టాల్ చేశారు</translation> <translation id="6446163441502663861">Kahu (ఎన్వలప్)</translation> <translation id="6446608382365791566">మరింత సమాచారాన్ని జోడించండి</translation> <translation id="6447842834002726250">కుక్కీలు</translation> @@ -1349,6 +1356,7 @@ <translation id="7012363358306927923">చైనా యూనియన్ పే</translation> <translation id="7016992613359344582">ఈ ఛార్జ్లు ఒకే సారి చెల్లించేవి లేదా పునరావృతంగా చెల్లించాల్సినవి కావచ్చు మరియు స్పష్టంగా పేర్కొనబడకపోవచ్చు.</translation> <translation id="7029809446516969842">పాస్వర్డ్లు</translation> +<translation id="7031646650991750659">ఏ Google Play యాప్లు మీరు ఇన్స్టాల్ చేశారు</translation> <translation id="7050187094878475250">మీరు <ph name="DOMAIN" />ను చేరుకోవడానికి ప్రయత్నించారు, కానీ సర్వర్ అందించిన ప్రమాణపత్రం విశ్వసించలేనంత ఎక్కువ చెల్లుబాటు వ్యవధిని కలిగి ఉంది.</translation> <translation id="705310974202322020">{NUM_CARDS,plural, =1{ప్రస్తుతం ఈ కార్డ్ని సేవ్ చేయలేరు}other{ప్రస్తుతం ఈ కార్డ్లని సేవ్ చేయలేరు}}</translation> <translation id="7053983685419859001">నిరోధించు</translation> @@ -1408,6 +1416,7 @@ <translation id="7319430975418800333">A3</translation> <translation id="7320336641823683070">కనెక్షన్ సహాయం</translation> <translation id="733354035281974745">పరికర స్థానిక ఖాతా భర్తీ</translation> +<translation id="7333654844024768166">మీరు మోసపూరితమైన సైట్లో మీ పాస్వర్డ్ను ఎంటర్ చేశారు. మీరు ఈ పాస్వర్డ్ను ఉపయోగించిన <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> ఇతర సైట్లకు ఇప్పుడే వెళ్లి, దాన్ని మార్చాల్సిందిగా Chromium సిఫార్సు చేస్తోంది.</translation> <translation id="7334320624316649418">&మళ్లీ క్రమం చేయడాన్ని పునరావృతం చేయి</translation> <translation id="7337706099755338005">మీ ప్లాట్ఫారమ్లో అందుబాటులో లేదు.</translation> <translation id="733923710415886693">సర్వర్ ప్రమాణపత్రాన్ని ప్రమాణపత్రం పారదర్శకత ద్వారా బహిరంగపరచలేదు.</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb index c7532239..01a3ada 100644 --- a/components/strings/components_strings_th.xtb +++ b/components/strings/components_strings_th.xtb
@@ -79,6 +79,7 @@ <translation id="129553762522093515">เพิ่งปิด</translation> <translation id="1298536327547837046">การสแกนหามัลแวร์</translation> <translation id="129863573139666797"><ph name="BEGIN_LINK" />ลองล้างคุกกี้<ph name="END_LINK" /></translation> +<translation id="1301324364792935241">ตรวจสอบการตั้งค่า DNS ที่ปลอดภัย</translation> <translation id="1307966114820526988">ฟีเจอร์ที่เลิกใช้งานแล้ว</translation> <translation id="1314509827145471431">เย็บเล่มด้านขวา</translation> <translation id="1320233736580025032">Prc1 (ซองจดหมาย)</translation> @@ -152,6 +153,7 @@ <translation id="1569487616857761740">ป้อนวันที่หมดอายุ</translation> <translation id="1581080074034554886">CVC</translation> <translation id="1583429793053364125">มีสิ่งผิดปกติเกิดขึ้นในขณะที่แสดงหน้าเว็บนี้</translation> +<translation id="1586541204584340881">ส่วนขยายที่คุณติดตั้ง</translation> <translation id="1588438908519853928">ปกติ</translation> <translation id="1592005682883173041">การเข้าถึงข้อมูลในเครื่อง</translation> <translation id="1594030484168838125">เลือก</translation> @@ -362,6 +364,7 @@ <translation id="2544644783021658368">เอกสารเดียว</translation> <translation id="254947805923345898">ค่านโยบายไม่ถูกต้อง</translation> <translation id="255002559098805027"><ph name="HOST_NAME" /> ส่งการตอบกลับที่ไม่ถูกต้อง</translation> +<translation id="2553853292994445426">ตรวจสอบการตั้งค่า DNS ที่ปลอดภัย คุณอาจกำหนดค่าเซิร์ฟเวอร์ DNS ที่ปลอดภัยไว้ซึ่งทำการเชื่อมต่อไม่สำเร็จ</translation> <translation id="2556876185419854533">&เลิกทำการแก้ไข</translation> <translation id="257674075312929031">กลุ่ม</translation> <translation id="2586657967955657006">คลิปบอร์ด</translation> @@ -474,6 +477,7 @@ <translation id="3095940652251934233">Statement</translation> <translation id="3096100844101284527">เพิ่มที่อยู่สำหรับรับสินค้า</translation> <translation id="3105172416063519923">รหัสสินทรัพย์:</translation> +<translation id="3107591622054137333"><ph name="BEGIN_LINK" />ตรวจสอบการกำหนดค่า DNS ที่ปลอดภัย<ph name="END_LINK" /></translation> <translation id="3109728660330352905">คุณไม่มีสิทธิ์ดูหน้านี้</translation> <translation id="3113284927548439113">กะที่ 3</translation> <translation id="3116158981186517402">แยกออกเป็นชั้นๆ</translation> @@ -770,6 +774,7 @@ <translation id="4390472908992056574">Brim</translation> <translation id="4406896451731180161">ผลการค้นหา</translation> <translation id="4408413947728134509">คุกกี้ <ph name="NUM_COOKIES" /></translation> +<translation id="4414290883293381923">คุณเพิ่งใส่รหัสผ่านในเว็บไซต์ที่มีการหลอกลวง Chrome ขอแนะนำให้ไปที่ <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> และเว็บไซต์อื่นๆ ที่คุณใช้รหัสผ่านนี้ และเปลี่ยนรหัสผ่านทันที</translation> <translation id="4415426530740016218">ที่อยู่ในการรับ</translation> <translation id="4424024547088906515">เซิร์ฟเวอร์นี้ไม่สามารถพิสูจน์ได้ว่าเป็น <ph name="DOMAIN" /> เพราะ Chrome ไม่เชื่อถือใบรับรองความปลอดภัย โดยอาจเกิดจากการกำหนดค่าผิดหรือผู้บุกรุกที่ขัดขวางการเชื่อมต่อของคุณ</translation> <translation id="443121186588148776">พอร์ตอนุกรม</translation> @@ -1201,6 +1206,7 @@ <translation id="6353505687280762741">{COUNT,plural, =0{ไม่มี}=1{มีรหัสผ่าน 1 รายการ (สำหรับ <ph name="DOMAIN_LIST" />, ซิงค์แล้ว)}=2{มีรหัสผ่าน 2 รายการ (สำหรับ <ph name="DOMAIN_LIST" />, ซิงค์แล้ว)}other{มีรหัสผ่าน # รายการ (สำหรับ <ph name="DOMAIN_LIST" />, ซิงค์แล้ว)}}</translation> <translation id="6358450015545214790">นี่หมายถึงอะไร</translation> <translation id="6361757823711327522">B7</translation> +<translation id="6364095313648930329"><ph name="BEGIN_LINK" />ตรวจสอบพร็อกซี ไฟร์วอลล์ และการกำหนดค่า DNS ที่ปลอดภัย<ph name="END_LINK" /></translation> <translation id="6366710531182496394">เย็บด้วยลวดเย็บกระดาษด้านซ้าย 2 ครั้ง</translation> <translation id="6377268785556383139">มีผลการค้นหา "<ph name="SEARCH_TEXT" />" 1 รายการ</translation> <translation id="6380497234672085559">A0</translation> @@ -1223,6 +1229,7 @@ <translation id="6433595998831338502"><ph name="HOST_NAME" /> ปฏิเสธการเชื่อมต่อ</translation> <translation id="6434309073475700221">ทิ้ง</translation> <translation id="6440503408713884761">ละเว้น</translation> +<translation id="6443406338865242315">ส่วนขยายและปลั๊กอินที่คุณติดตั้ง</translation> <translation id="6446163441502663861">Kahu (ซองจดหมาย)</translation> <translation id="6446608382365791566">เพิ่มข้อมูลเพิ่มเติม</translation> <translation id="6447842834002726250">คุกกี้</translation> @@ -1332,6 +1339,7 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">การเรียกเก็บเงินเหล่านี้อาจเกิดขึ้นครั้งเดียวหรือเป็นเกิดขึ้นซ้ำๆ และอาจไม่แสดงอย่างชัดแจ้ง</translation> <translation id="7029809446516969842">รหัสผ่าน</translation> +<translation id="7031646650991750659">แอปจาก Google Play ที่คุณติดตั้ง</translation> <translation id="7050187094878475250">คุณพยายามเข้าถึง <ph name="DOMAIN" /> แต่เซิร์ฟเวอร์ได้แสดงใบรับรองที่มีระยะเวลาที่สามารถใช้ได้นานเกินกว่าที่จะเชื่อถือได้</translation> <translation id="705310974202322020">{NUM_CARDS,plural, =1{บันทึกบัตรนี้ไม่ได้ในตอนนี้}other{บันทึกบัตรเหล่านี้ไม่ได้ในตอนนี้}}</translation> <translation id="7053983685419859001">บล็อก</translation> @@ -1391,6 +1399,7 @@ <translation id="7319430975418800333">A3</translation> <translation id="7320336641823683070">ความช่วยเหลือเกี่ยวกับการเชื่อมต่อ</translation> <translation id="733354035281974745">ลบล้างบัญชีภายในอุปกรณ์</translation> +<translation id="7333654844024768166">คุณเพิ่งใส่รหัสผ่านในเว็บไซต์ที่มีการหลอกลวง Chromium ขอแนะนำให้ไปที่ <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> และเว็บไซต์อื่นๆ ที่คุณใช้รหัสผ่านนี้ และเปลี่ยนรหัสผ่านทันที</translation> <translation id="7334320624316649418">&ทำซ้ำการจัดลำดับใหม่</translation> <translation id="7337706099755338005">ยังไม่พร้อมให้ใช้งานในแพลตฟอร์มของคุณ</translation> <translation id="733923710415886693">ไม่มีการเปิดเผยใบรับรองของเซิร์ฟเวอร์ผ่านความโปร่งใสของใบรับรอง</translation>
diff --git a/components/strings/components_strings_ur.xtb b/components/strings/components_strings_ur.xtb index 746e5280..4aed11d 100644 --- a/components/strings/components_strings_ur.xtb +++ b/components/strings/components_strings_ur.xtb
@@ -79,6 +79,7 @@ <translation id="129553762522093515">حال ہی میں بند کردہ</translation> <translation id="1298536327547837046">میلوئیر اسکیننگ</translation> <translation id="129863573139666797"><ph name="BEGIN_LINK" />اپنی کوکیز صاف کرنے کی کوشش کریں<ph name="END_LINK" /></translation> +<translation id="1301324364792935241">اپنی محفوظ DNS ترتیبات چیک کریں</translation> <translation id="1307966114820526988">فرسودہ خصوصیات</translation> <translation id="1314509827145471431">دائیں طرف باندھیں</translation> <translation id="1320233736580025032">Prc1 (Envelope)</translation> @@ -152,6 +153,7 @@ <translation id="1569487616857761740">تاریخ اختتام درج کریں</translation> <translation id="1581080074034554886">CVC</translation> <translation id="1583429793053364125">یہ ویب صفحہ ڈسپلے کرتے ہوئے کچھ غلط ہو گیا۔</translation> +<translation id="1586541204584340881">آپ نے کن ایکسٹینشنز کو انسٹال کیا ہے</translation> <translation id="1588438908519853928">حسب معمول</translation> <translation id="1592005682883173041">مقامی ڈیٹا تک رسائی</translation> <translation id="1594030484168838125">منتخب کریں</translation> @@ -363,6 +365,7 @@ <translation id="2544644783021658368">واحد دستاویز</translation> <translation id="254947805923345898">پالیسی کی قدر درست نہیں ہے۔</translation> <translation id="255002559098805027"><ph name="HOST_NAME" /> نے ایک غلط جواب بھیجا۔</translation> +<translation id="2553853292994445426">اپنی محفوظ DNS ترتیبات کو چیک کریں۔ ممکن ہے کہ آپ نے ایک محفوظ DNS سرور ترتیب دیا ہو جس کی وجہ سے کنکشنز ناکام ہو رہے ہیں۔</translation> <translation id="2556876185419854533">ترمیم کریں کو &کالعدم کریں</translation> <translation id="257674075312929031">گروپ</translation> <translation id="2586657967955657006">کلپ بورڈ</translation> @@ -480,6 +483,7 @@ <translation id="3095940652251934233">Statement</translation> <translation id="3096100844101284527">پک اپ کا پتہ شامل کریں</translation> <translation id="3105172416063519923">اثاثہ ID:</translation> +<translation id="3107591622054137333"><ph name="BEGIN_LINK" />محفوظ DNS کنفیگریشن کو چیک کیا جا رہا ہے<ph name="END_LINK" /></translation> <translation id="3109728660330352905">آپ کو یہ صفحہ دیکھنے کی اجازت نہیں ہے۔</translation> <translation id="3113284927548439113">تیسری شفٹ</translation> <translation id="3116158981186517402">ورق چڑھائیں</translation> @@ -778,6 +782,7 @@ <translation id="4390472908992056574">کنارہ</translation> <translation id="4406896451731180161">تلاش کے نتائج</translation> <translation id="4408413947728134509">کوکیز <ph name="NUM_COOKIES" /></translation> +<translation id="4414290883293381923">آپ نے ابھی ایک پُرفریب سائٹ پر اپنا پاس ورڈ درج کیا ہے۔ Chrome آپ کو <ph name="WEBSITE_1" />، <ph name="WEBSITE_2" />،<ph name="WEBSITE_3" /> اور دیگر ایسی سائٹس پر جانے اور ابھی اپنا پاس ورڈ بدلنے کی تجویز کرتا ہے جہاں آپ اس پاس ورڈ کو استعمال کرتے ہیں۔</translation> <translation id="4415426530740016218">پک اپ کا پتہ</translation> <translation id="4424024547088906515">یہ سرور یہ بات ثابت نہیں کر سکا کہ یہ <ph name="DOMAIN" /> ہے؛ اس کے سیکیورٹی سرٹیفکیٹ پر Chrome کو بھروسہ نہیں ہے۔ یہ غلط کنفیگرییشن یا آپ کے کنکشن کو قطع کرنے والے کسی حملہ آور کی وجہ سے ہو سکتا ہے۔</translation> <translation id="443121186588148776">سیریل پورٹ</translation> @@ -1210,6 +1215,7 @@ <translation id="6353505687280762741">{COUNT,plural, =0{کوئی نہیں}=1{1 پاس ورڈ (برائے <ph name="DOMAIN_LIST" />، مطابقت پذیر ہے)}=2{2 پاس ورڈز (برائے <ph name="DOMAIN_LIST" />، مطابقت پذیر ہیں)}other{# پاس ورڈز (برائے <ph name="DOMAIN_LIST" />، مطابقت پذیر ہیں)}}</translation> <translation id="6358450015545214790">ان کا کیا مطلب ہے؟</translation> <translation id="6361757823711327522">B7</translation> +<translation id="6364095313648930329"><ph name="BEGIN_LINK" />پراکسی، فائروال اور محفوظ DNS کنفیگریشن کو چیک کیا جا رہا ہے<ph name="END_LINK" /></translation> <translation id="6366710531182496394">بائیں طرف دُہری سٹیپل</translation> <translation id="6377268785556383139">'<ph name="SEARCH_TEXT" />' کا 1 نتیجہ</translation> <translation id="6380497234672085559">A0</translation> @@ -1232,6 +1238,7 @@ <translation id="6433595998831338502"><ph name="HOST_NAME" /> نے منسلک ہونے سے منع کر دیا۔</translation> <translation id="6434309073475700221">مسترد کریں</translation> <translation id="6440503408713884761">نظر انداز کردہ</translation> +<translation id="6443406338865242315">آپ نے کن ایکسٹینشنز اور پلگ انز کو انسٹال کیا ہے</translation> <translation id="6446163441502663861">Kahu (Envelope)</translation> <translation id="6446608382365791566">مزید معلومات شامل کریں</translation> <translation id="6447842834002726250">کوکیز</translation> @@ -1341,6 +1348,7 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">یہ چارجز ایک بار یا بار بار عائد ہوسکتے ہیں اور ہو سکتا ہے کہ واضح نہ ہوں۔</translation> <translation id="7029809446516969842">پاس ورڈز</translation> +<translation id="7031646650991750659">آپ نے کن Google Play ایپس کو انسٹال کیا ہے</translation> <translation id="7050187094878475250">آپ نے <ph name="DOMAIN" /> تک پہنچنے کی کوشش کی، لیکن سرور نے ایک سرٹیفکیٹ پیش کیا جس کے جواز کا عرصہ اتنا طویل ہے کہ اس پر بھروسہ نہیں کیا جا سکتا۔</translation> <translation id="705310974202322020">{NUM_CARDS,plural, =1{اس کارڈ کو ابھی محفوظ نہیں کیا جا سکتا}other{ان کارڈز کو ابھی محفوظ نہیں کیا جا سکتا}}</translation> <translation id="7053983685419859001">مسدود کریں</translation> @@ -1400,6 +1408,7 @@ <translation id="7319430975418800333">A3</translation> <translation id="7320336641823683070">کنکشن سے متعلق مدد</translation> <translation id="733354035281974745">آلہ کے مقامی اکاؤنٹ کا اوور رائیڈ</translation> +<translation id="7333654844024768166">آپ نے ابھی ایک پُرفریب سائٹ پر اپنا پاس ورڈ درج کیا ہے۔ Chromium آپ کو <ph name="WEBSITE_1" />، <ph name="WEBSITE_2" />،<ph name="WEBSITE_3" /> اور دیگر ایسی سائٹس پر جانے اور ابھی اپنا پاس ورڈ بدلنے کی تجویز کرتا ہے جہاں آپ اس پاس ورڈ کو استعمال کرتے ہیں۔</translation> <translation id="7334320624316649418">دوبارہ ترتیب کو &واپس لائیں</translation> <translation id="7337706099755338005">آپ کے پلیٹ فارم پر دستیاب نہیں ہے۔</translation> <translation id="733923710415886693">سرٹیفیکیٹ کی شفافیت کے ذریعے سرور کے سرٹیفیکیٹ کا انکشاف نہیں کیا گیا۔</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb index a54cda25..90bb469 100644 --- a/components/strings/components_strings_vi.xtb +++ b/components/strings/components_strings_vi.xtb
@@ -364,7 +364,7 @@ <translation id="2544644783021658368">Một tài liệu</translation> <translation id="254947805923345898">Giá trị của chính sách là không hợp lệ.</translation> <translation id="255002559098805027"><ph name="HOST_NAME" /> đã gửi phản hồi không hợp lệ.</translation> -<translation id="2553853292994445426">Hãy kiểm tra tùy chọn cài đặt của DNS bảo mật. Có thể bạn đã định cấu hình máy chủ DNS bảo mật không kết nối được.</translation> +<translation id="2553853292994445426">Hãy kiểm tra các tùy chọn cài đặt về DNS bảo mật. Có thể bạn đã định cấu hình một máy chủ DNS bảo mật không kết nối được.</translation> <translation id="2556876185419854533">&Hoàn tác chỉnh sửa</translation> <translation id="257674075312929031">Nhóm</translation> <translation id="2586657967955657006">Khay nhớ tạm</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb index d2e3375..94bd2be 100644 --- a/components/strings/components_strings_zh-CN.xtb +++ b/components/strings/components_strings_zh-CN.xtb
@@ -79,6 +79,7 @@ <translation id="129553762522093515">最近关闭的标签页</translation> <translation id="1298536327547837046">恶意软件扫描</translation> <translation id="129863573139666797"><ph name="BEGIN_LINK" />尝试清除 Cookie<ph name="END_LINK" /></translation> +<translation id="1301324364792935241">请检查您的安全 DNS 设置</translation> <translation id="1307966114820526988">已被弃用的功能</translation> <translation id="1314509827145471431">装订(右侧)</translation> <translation id="1320233736580025032">Prc1 (Envelope)</translation> @@ -152,6 +153,7 @@ <translation id="1569487616857761740">输入失效日期</translation> <translation id="1581080074034554886">CVC</translation> <translation id="1583429793053364125">显示此网页时出了点问题。</translation> +<translation id="1586541204584340881">您已安装的扩展程序</translation> <translation id="1588438908519853928">正常</translation> <translation id="1592005682883173041">本地数据访问权限</translation> <translation id="1594030484168838125">选择</translation> @@ -362,6 +364,7 @@ <translation id="2544644783021658368">单一文档</translation> <translation id="254947805923345898">政策值无效。</translation> <translation id="255002559098805027"><ph name="HOST_NAME" /> 发送的响应无效。</translation> +<translation id="2553853292994445426">请检查您的安全 DNS 设置。您可能已配置了安全 DNS 服务器但无法连接到它。</translation> <translation id="2556876185419854533">撤消修改(&U)</translation> <translation id="257674075312929031">群组</translation> <translation id="2586657967955657006">剪贴板</translation> @@ -474,6 +477,7 @@ <translation id="3095940652251934233">Statement</translation> <translation id="3096100844101284527">添加取货地址</translation> <translation id="3105172416063519923">资产 ID:</translation> +<translation id="3107591622054137333"><ph name="BEGIN_LINK" />检查安全 DNS 配置<ph name="END_LINK" /></translation> <translation id="3109728660330352905">您未获授权,无法查看此网页。</translation> <translation id="3113284927548439113">第三批</translation> <translation id="3116158981186517402">粘合</translation> @@ -767,6 +771,7 @@ <translation id="4390472908992056574">帽檐式</translation> <translation id="4406896451731180161">搜索结果</translation> <translation id="4408413947728134509"><ph name="NUM_COOKIES" />Cookie</translation> +<translation id="4414290883293381923">您刚刚在一个诈骗网站中输入了密码。Chrome 建议您立即前往 <ph name="WEBSITE_1" />、<ph name="WEBSITE_2" />、<ph name="WEBSITE_3" /> 以及使用此密码的其他网站更改密码。</translation> <translation id="4415426530740016218">取货地址</translation> <translation id="4424024547088906515">此服务器无法证明它是<ph name="DOMAIN" />;Chrome不信任其安全证书。出现此问题的原因可能是配置有误或您的连接被拦截了。</translation> <translation id="443121186588148776">串行端口</translation> @@ -1197,6 +1202,7 @@ <translation id="6353505687280762741">{COUNT,plural, =0{无}=1{1 个密码(用于 <ph name="DOMAIN_LIST" />,已同步)}=2{2 个密码(用于 <ph name="DOMAIN_LIST" />,已同步)}other{# 个密码(用于 <ph name="DOMAIN_LIST" />,已同步)}}</translation> <translation id="6358450015545214790">这分别意味着什么?</translation> <translation id="6361757823711327522">B7</translation> +<translation id="6364095313648930329"><ph name="BEGIN_LINK" />检查代理服务器、防火墙和安全 DNS 配置<ph name="END_LINK" /></translation> <translation id="6366710531182496394">双钉(左侧)</translation> <translation id="6377268785556383139">1 个与“<ph name="SEARCH_TEXT" />”相符的搜索结果</translation> <translation id="6380497234672085559">A0</translation> @@ -1219,6 +1225,7 @@ <translation id="6433595998831338502"><ph name="HOST_NAME" /> 拒绝了我们的连接请求。</translation> <translation id="6434309073475700221">放弃</translation> <translation id="6440503408713884761">已忽略</translation> +<translation id="6443406338865242315">您已安装的扩展程序和插件</translation> <translation id="6446163441502663861">Kahu (Envelope)</translation> <translation id="6446608382365791566">添加更多信息</translation> <translation id="6447842834002726250">Cookie</translation> @@ -1328,6 +1335,7 @@ <translation id="7012363358306927923">中国银联</translation> <translation id="7016992613359344582">这些费用可能只收取一次,也可能会周期性收取,而且可能不易察觉。</translation> <translation id="7029809446516969842">密码</translation> +<translation id="7031646650991750659">您已安装的 Google Play 应用</translation> <translation id="7050187094878475250">您尝试访问 <ph name="DOMAIN" />,但服务器提供的证书不可信(有效期过长)。</translation> <translation id="705310974202322020">{NUM_CARDS,plural, =1{此刻无法保存这张卡}other{此刻无法保存这些卡}}</translation> <translation id="7053983685419859001">禁止</translation> @@ -1387,6 +1395,7 @@ <translation id="7319430975418800333">A3</translation> <translation id="7320336641823683070">与连接相关的帮助</translation> <translation id="733354035281974745">设备本地帐号替换</translation> +<translation id="7333654844024768166">您刚刚在一个诈骗网站中输入了密码。Chromium 建议您立即前往 <ph name="WEBSITE_1" />、<ph name="WEBSITE_2" />、<ph name="WEBSITE_3" /> 以及使用此密码的其他网站更改密码。</translation> <translation id="7334320624316649418">恢复顺序调整(&R)</translation> <translation id="7337706099755338005">在您的平台上不可用。</translation> <translation id="733923710415886693">该服务器的证书未通过证书透明度政策进行披露。</translation>
diff --git a/components/strings/components_strings_zh-HK.xtb b/components/strings/components_strings_zh-HK.xtb index 12da8ac..54fb774 100644 --- a/components/strings/components_strings_zh-HK.xtb +++ b/components/strings/components_strings_zh-HK.xtb
@@ -79,7 +79,7 @@ <translation id="129553762522093515">最近關閉的分頁</translation> <translation id="1298536327547837046">惡意軟件掃瞄</translation> <translation id="129863573139666797"><ph name="BEGIN_LINK" />嘗試清除 Cookie<ph name="END_LINK" /></translation> -<translation id="1301324364792935241">請檢查你的安全 DNS 設定</translation> +<translation id="1301324364792935241">請檢查您的安全 DNS 設定</translation> <translation id="1307966114820526988">這些功能已被淘汰</translation> <translation id="1314509827145471431">釘裝 (右側)</translation> <translation id="1320233736580025032">Prc1 (信封)</translation> @@ -153,7 +153,7 @@ <translation id="1569487616857761740">輸入到期日</translation> <translation id="1581080074034554886">信用卡驗證碼 (CVC)</translation> <translation id="1583429793053364125">顯示此網頁時發生錯誤。</translation> -<translation id="1586541204584340881">你安裝的擴充功能</translation> +<translation id="1586541204584340881">您已安裝的擴充程式</translation> <translation id="1588438908519853928">一般</translation> <translation id="1592005682883173041">本地資料存取</translation> <translation id="1594030484168838125">選擇</translation> @@ -364,7 +364,7 @@ <translation id="2544644783021658368">單一文件</translation> <translation id="254947805923345898">政策值無效。</translation> <translation id="255002559098805027"><ph name="HOST_NAME" /> 傳送的回應無效。</translation> -<translation id="2553853292994445426">請檢查你的安全 DNS 設定。可能是因為已設定的安全 DNS 伺服器導致連線失敗。</translation> +<translation id="2553853292994445426">請檢查您的安全 DNS 設定。您可能設定了一個無法連線的安全 DNS 伺服器。</translation> <translation id="2556876185419854533">復原編輯(&U)</translation> <translation id="257674075312929031">群組</translation> <translation id="2586657967955657006">剪貼簿</translation> @@ -774,7 +774,7 @@ <translation id="4390472908992056574">圍邊</translation> <translation id="4406896451731180161">搜尋結果</translation> <translation id="4408413947728134509">Cookie <ph name="NUM_COOKIES" /></translation> -<translation id="4414290883293381923">你剛才在詐騙網站上輸入了密碼。Chrome 建議你立即前往 <ph name="WEBSITE_1" />、<ph name="WEBSITE_2" />、<ph name="WEBSITE_3" />,以及也使用這個密碼的其他網站變更密碼。</translation> +<translation id="4414290883293381923">您剛才在欺詐網站上輸入了密碼。Chrome 建議前往 <ph name="WEBSITE_1" />、<ph name="WEBSITE_2" />、<ph name="WEBSITE_3" /> 以及其他您使用此密碼的網站,並立即變更密碼。</translation> <translation id="4415426530740016218">取貨地址</translation> <translation id="4424024547088906515">伺服器無法證明其屬於 <ph name="DOMAIN" /> 網域;其安全性憑證未取得 Chrome 的信任。這可能是因為設定錯誤,或有攻擊者攔截您的連線。</translation> <translation id="443121186588148776">序列連接埠</translation> @@ -1229,7 +1229,7 @@ <translation id="6433595998831338502"><ph name="HOST_NAME" /> 已拒絕連線。</translation> <translation id="6434309073475700221">捨棄</translation> <translation id="6440503408713884761">已略過</translation> -<translation id="6443406338865242315">你安裝的擴充功能和外掛程式</translation> +<translation id="6443406338865242315">您已安裝的擴充程式和外掛程式</translation> <translation id="6446163441502663861">Kahu (信封)</translation> <translation id="6446608382365791566">新增更多資料</translation> <translation id="6447842834002726250">Cookie</translation> @@ -1339,7 +1339,7 @@ <translation id="7012363358306927923">中國銀聯</translation> <translation id="7016992613359344582">這些費用可能是一次性或會重複收取,而收費時亦可能難以察覺。</translation> <translation id="7029809446516969842">密碼</translation> -<translation id="7031646650991750659">你安裝的 Google Play 應用程式</translation> +<translation id="7031646650991750659">您已安裝的 Google Play 應用程式</translation> <translation id="7050187094878475250">您曾嘗試前往 <ph name="DOMAIN" />,但其伺服器憑證有效期過長,並不值得信任。</translation> <translation id="705310974202322020">{NUM_CARDS,plural, =1{目前無法儲存此卡}other{目前無法儲存這些卡}}</translation> <translation id="7053983685419859001">封鎖</translation> @@ -1399,7 +1399,7 @@ <translation id="7319430975418800333">A3</translation> <translation id="7320336641823683070">連線說明</translation> <translation id="733354035281974745">裝置本機帳戶覆寫</translation> -<translation id="7333654844024768166">你剛才在詐騙網站上輸入了密碼。Chromium 建議你立即前往 <ph name="WEBSITE_1" />、<ph name="WEBSITE_2" />、<ph name="WEBSITE_3" />,以及也使用這個密碼的其他網站變更密碼。</translation> +<translation id="7333654844024768166">您剛才在欺詐網站上輸入了密碼。Chromium 建議前往 <ph name="WEBSITE_1" />、<ph name="WEBSITE_2" />、<ph name="WEBSITE_3" /> 以及其他您使用此密碼的網站,並立即變更密碼。</translation> <translation id="7334320624316649418">重做重新排序(&R)</translation> <translation id="7337706099755338005">無法在您的平台上使用。</translation> <translation id="733923710415886693">伺服器憑證並未透過憑證透明度政策披露。</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb index c8585fa..67de7a8 100644 --- a/components/strings/components_strings_zh-TW.xtb +++ b/components/strings/components_strings_zh-TW.xtb
@@ -364,7 +364,7 @@ <translation id="2544644783021658368">單一文件</translation> <translation id="254947805923345898">政策的值無效。</translation> <translation id="255002559098805027"><ph name="HOST_NAME" /> 傳送的回應無效。</translation> -<translation id="2553853292994445426">請檢查你的安全 DNS 設定。可能是因為已設定的安全 DNS 伺服器導致連線失敗。</translation> +<translation id="2553853292994445426">請檢查你的安全 DNS 設定。可能是已設定的安全 DNS 伺服器導致連線失敗。</translation> <translation id="2556876185419854533">復原編輯(&U)</translation> <translation id="257674075312929031">群組</translation> <translation id="2586657967955657006">剪貼簿</translation>
diff --git a/components/sync_device_info/BUILD.gn b/components/sync_device_info/BUILD.gn index e5ea18ff..eef7e1a 100644 --- a/components/sync_device_info/BUILD.gn +++ b/components/sync_device_info/BUILD.gn
@@ -56,7 +56,7 @@ if (is_mac) { libs = [ "CoreFoundation.framework", - "SystemConfiguration.framework", # Required by local_device_info_util_mac.mm. + "SystemConfiguration.framework", # For local_device_info_util_mac.mm. ] }
diff --git a/components/viz/service/display/direct_renderer.cc b/components/viz/service/display/direct_renderer.cc index cfafb0cf..cd5d9a1 100644 --- a/components/viz/service/display/direct_renderer.cc +++ b/components/viz/service/display/direct_renderer.cc
@@ -354,7 +354,8 @@ current_frame()->output_surface_plane = overlay_processor_->ProcessOutputSurfaceAsOverlay( device_viewport_size, output_surface_->GetOverlayBufferFormat(), - reshape_device_color_space_, reshape_has_alpha_); + reshape_device_color_space_, reshape_has_alpha_, + output_surface_->GetOverlayMailbox()); primary_plane = &(current_frame()->output_surface_plane.value()); }
diff --git a/components/viz/service/display/output_surface.cc b/components/viz/service/display/output_surface.cc index 6d94ff0..927ae29 100644 --- a/components/viz/service/display/output_surface.cc +++ b/components/viz/service/display/output_surface.cc
@@ -82,4 +82,9 @@ void OutputSurface::SetGpuVSyncEnabled(bool enabled) { NOTREACHED(); } + +gpu::Mailbox OutputSurface::GetOverlayMailbox() const { + return gpu::Mailbox(); +} + } // namespace viz
diff --git a/components/viz/service/display/output_surface.h b/components/viz/service/display/output_surface.h index 612aab6d..019891b0 100644 --- a/components/viz/service/display/output_surface.h +++ b/components/viz/service/display/output_surface.h
@@ -19,6 +19,7 @@ #include "components/viz/common/resources/returned_resource.h" #include "components/viz/service/display/software_output_device.h" #include "components/viz/service/viz_service_export.h" +#include "gpu/command_buffer/common/mailbox.h" #include "gpu/command_buffer/common/texture_in_use_response.h" #include "gpu/ipc/common/surface_handle.h" #include "gpu/ipc/gpu_task_scheduler_helper.h" @@ -145,6 +146,9 @@ // Get the texture for the main image's overlay. virtual unsigned GetOverlayTextureId() const = 0; + // Returns the |mailbox| corresponding to the main image's overlay. + virtual gpu::Mailbox GetOverlayMailbox() const; + // Get the format for the main image's overlay. virtual gfx::BufferFormat GetOverlayBufferFormat() const = 0;
diff --git a/components/viz/service/display/overlay_processor_interface.cc b/components/viz/service/display/overlay_processor_interface.cc index e33c591..b346114 100644 --- a/components/viz/service/display/overlay_processor_interface.cc +++ b/components/viz/service/display/overlay_processor_interface.cc
@@ -141,13 +141,15 @@ const gfx::Size& viewport_size, const gfx::BufferFormat& buffer_format, const gfx::ColorSpace& color_space, - bool has_alpha) { + bool has_alpha, + const gpu::Mailbox& mailbox) { OutputSurfaceOverlayPlane overlay_plane; overlay_plane.transform = gfx::OverlayTransform::OVERLAY_TRANSFORM_NONE; overlay_plane.resource_size = viewport_size; overlay_plane.format = buffer_format; overlay_plane.color_space = color_space; overlay_plane.enable_blending = has_alpha; + overlay_plane.mailbox = mailbox; // Adjust transformation and display_rect based on display rotation. overlay_plane.display_rect =
diff --git a/components/viz/service/display/overlay_processor_interface.h b/components/viz/service/display/overlay_processor_interface.h index 80f538d..cdde81d 100644 --- a/components/viz/service/display/overlay_processor_interface.h +++ b/components/viz/service/display/overlay_processor_interface.h
@@ -79,6 +79,8 @@ // TODO(weiliangc): Should be replaced by SharedImage mailbox. // Gpu fence to wait for before overlay is ready for display. unsigned gpu_fence_id; + // Mailbox corresponding to the buffer backing the primary plane. + gpu::Mailbox mailbox; }; // TODO(weiliangc): Eventually the asymmetry between primary plane and @@ -88,7 +90,8 @@ const gfx::Size& viewport_size, const gfx::BufferFormat& buffer_format, const gfx::ColorSpace& color_space, - bool has_alpha); + bool has_alpha, + const gpu::Mailbox& mailbox); static std::unique_ptr<OverlayProcessorInterface> CreateOverlayProcessor( gpu::SurfaceHandle surface_handle,
diff --git a/components/viz/service/display/overlay_processor_ozone.cc b/components/viz/service/display/overlay_processor_ozone.cc index 1c84fab..a7cec95f 100644 --- a/components/viz/service/display/overlay_processor_ozone.cc +++ b/components/viz/service/display/overlay_processor_ozone.cc
@@ -131,6 +131,18 @@ // For ozone-cast, there will not be a primary_plane. if (primary_plane) { ConvertToOzoneOverlaySurface(*primary_plane, &(*ozone_surface_iterator)); + if (shared_image_interface_) { + bool result = SetNativePixmapForCandidate(&(*ozone_surface_iterator), + primary_plane->mailbox); + // We cannot validate an overlay configuration without the buffer for + // primary plane present. + if (!result) { + for (auto& candidate : *surfaces) { + candidate.overlay_handled = false; + } + return; + } + } ozone_surface_iterator++; } @@ -141,29 +153,11 @@ ConvertToOzoneOverlaySurface(*surface_iterator, &(*ozone_surface_iterator)); if (shared_image_interface_) { - UMA_HISTOGRAM_BOOLEAN( - "Compositing.Display.OverlayProcessorOzone." - "IsCandidateSharedImage", - surface_iterator->mailbox.IsSharedImage()); - if (surface_iterator->mailbox.IsSharedImage()) { - (*ozone_surface_iterator).native_pixmap = - shared_image_interface_->GetNativePixmap( - surface_iterator->mailbox); - if (!ozone_surface_iterator->native_pixmap) { - // SharedImage creation and destruction happens on a different - // thread so there is no guarantee that we can always look them up - // successfully. If a SharedImage doesn't exist, ignore the - // candidate. We will try again next frame. - DLOG(ERROR) - << "Unable to find the NativePixmap corresponding to the " - "overlay candidate"; - *ozone_surface_iterator = ui::OverlaySurfaceCandidate(); - ReportSharedImageExists(false); - } else { - (*ozone_surface_iterator).native_pixmap_unique_id = - MailboxToUInt32(surface_iterator->mailbox); - ReportSharedImageExists(true); - } + bool result = SetNativePixmapForCandidate(&(*ozone_surface_iterator), + surface_iterator->mailbox); + // Skip the candidate if the corresponding NativePixmap is not found. + if (!result) { + *ozone_surface_iterator = ui::OverlaySurfaceCandidate(); } } } @@ -195,4 +189,35 @@ return ToEnclosedRect(overlay.display_rect); } +bool OverlayProcessorOzone::SetNativePixmapForCandidate( + ui::OverlaySurfaceCandidate* candidate, + const gpu::Mailbox& mailbox) { + DCHECK(shared_image_interface_); + + UMA_HISTOGRAM_BOOLEAN( + "Compositing.Display.OverlayProcessorOzone." + "IsCandidateSharedImage", + mailbox.IsSharedImage()); + + if (!mailbox.IsSharedImage()) + return false; + + candidate->native_pixmap = shared_image_interface_->GetNativePixmap(mailbox); + + if (!candidate->native_pixmap) { + // SharedImage creation and destruction happens on a different + // thread so there is no guarantee that we can always look them up + // successfully. If a SharedImage doesn't exist, ignore the + // candidate. We will try again next frame. + DLOG(ERROR) << "Unable to find the NativePixmap corresponding to the " + "overlay candidate"; + ReportSharedImageExists(false); + return false; + } + + candidate->native_pixmap_unique_id = MailboxToUInt32(mailbox); + ReportSharedImageExists(true); + return true; +} + } // namespace viz
diff --git a/components/viz/service/display/overlay_processor_ozone.h b/components/viz/service/display/overlay_processor_ozone.h index 405b349b..38e2893 100644 --- a/components/viz/service/display/overlay_processor_ozone.h +++ b/components/viz/service/display/overlay_processor_ozone.h
@@ -36,6 +36,12 @@ const OverlayCandidate& candidate) const override; private: + // Populates |native_pixmap| and |native_pixmap_unique_id| in |candidate| + // based on |mailbox|. Return false if the corresponding NativePixmap cannot + // be found. + bool SetNativePixmapForCandidate(ui::OverlaySurfaceCandidate* candidate, + const gpu::Mailbox& mailbox); + const bool overlay_enabled_; std::unique_ptr<ui::OverlayCandidatesOzone> overlay_candidates_;
diff --git a/components/viz/service/display/overlay_unittest.cc b/components/viz/service/display/overlay_unittest.cc index 6688787..f9dddf5 100644 --- a/components/viz/service/display/overlay_unittest.cc +++ b/components/viz/service/display/overlay_unittest.cc
@@ -1855,7 +1855,7 @@ auto output_surface_plane = overlay_processor_->ProcessOutputSurfaceAsOverlay( kDisplaySize, kDefaultBufferFormat, gfx::ColorSpace(), - false /* has_alpha */); + false /* has_alpha */, gpu::Mailbox()); OverlayProcessorInterface::OutputSurfaceOverlayPlane* primary_plane = &output_surface_plane; @@ -2202,7 +2202,7 @@ RenderPassList pass_list; pass_list.push_back(std::move(pass)); auto output_surface_plane = overlay_processor_->ProcessOutputSurfaceAsOverlay( - kDisplaySize, kDefaultBufferFormat, gfx::ColorSpace()); + kDisplaySize, kDefaultBufferFormat, gfx::ColorSpace(), gpu::Mailbox()); overlay_processor_->ProcessForOverlays( resource_provider_.get(), &pass_list, GetIdentityColorMatrix(),
diff --git a/components/viz/service/display/renderer_pixeltest.cc b/components/viz/service/display/renderer_pixeltest.cc index 4a367ad..0d4cc89 100644 --- a/components/viz/service/display/renderer_pixeltest.cc +++ b/components/viz/service/display/renderer_pixeltest.cc
@@ -3538,8 +3538,14 @@ cc::ExactPixelComparator(/*discard_alpha=*/true))); } +// Test is flaky on Linux TSAN. crbug.com/1044587. +#if defined(OS_LINUX) && defined(THREAD_SANITIZER) +#define MAYBE_TrilinearFiltering DISABLED_TrilinearFiltering +#else +#define MAYBE_TrilinearFiltering TrilinearFiltering +#endif // Trilinear filtering is only supported in the gl renderer. -TYPED_TEST(GPURendererPixelTest, TrilinearFiltering) { +TYPED_TEST(GPURendererPixelTest, MAYBE_TrilinearFiltering) { gfx::Rect viewport_rect(this->device_viewport_size_); int root_pass_id = 1;
diff --git a/components/viz/service/display/skia_renderer.cc b/components/viz/service/display/skia_renderer.cc index 8aa63fb..684a5b6 100644 --- a/components/viz/service/display/skia_renderer.cc +++ b/components/viz/service/display/skia_renderer.cc
@@ -2317,6 +2317,7 @@ } // Convert CC image filters for the backdrop into a SkImageFilter root node + // TODO(weiliangc): ChromeOS would need backdrop_filter_quality implemented if (backdrop_filters) { DCHECK(!backdrop_filters->IsEmpty());
diff --git a/components/viz/service/display_embedder/buffer_queue.cc b/components/viz/service/display_embedder/buffer_queue.cc index ba6c98c..57d0ada 100644 --- a/components/viz/service/display_embedder/buffer_queue.cc +++ b/components/viz/service/display_embedder/buffer_queue.cc
@@ -37,10 +37,13 @@ gpu::Mailbox BufferQueue::GetCurrentBuffer( gpu::SyncToken* creation_sync_token) { - DCHECK(creation_sync_token); if (!current_surface_) - current_surface_ = GetNextSurface(creation_sync_token); - return current_surface_ ? current_surface_->mailbox : gpu::Mailbox(); + current_surface_ = GetNextSurface(); + if (!current_surface_) + return gpu::Mailbox(); + if (creation_sync_token) + *creation_sync_token = current_surface_->creation_sync_token; + return current_surface_->mailbox; } void BufferQueue::UpdateBufferDamage(const gfx::Rect& damage) { @@ -124,9 +127,7 @@ allocated_count_--; } -std::unique_ptr<BufferQueue::AllocatedSurface> BufferQueue::GetNextSurface( - gpu::SyncToken* creation_sync_token) { - DCHECK(creation_sync_token); +std::unique_ptr<BufferQueue::AllocatedSurface> BufferQueue::GetNextSurface() { if (!available_surfaces_.empty()) { std::unique_ptr<AllocatedSurface> surface = std::move(available_surfaces_.back()); @@ -158,16 +159,20 @@ } allocated_count_++; - *creation_sync_token = sii_->GenUnverifiedSyncToken(); - return std::make_unique<AllocatedSurface>(std::move(buffer), mailbox, - gfx::Rect(size_)); + gpu::SyncToken creation_sync_token = sii_->GenUnverifiedSyncToken(); + return std::make_unique<AllocatedSurface>( + std::move(buffer), mailbox, creation_sync_token, gfx::Rect(size_)); } BufferQueue::AllocatedSurface::AllocatedSurface( std::unique_ptr<gfx::GpuMemoryBuffer> buffer, const gpu::Mailbox& mailbox, + const gpu::SyncToken& creation_sync_token, const gfx::Rect& rect) - : buffer(buffer.release()), mailbox(mailbox), damage(rect) {} + : buffer(buffer.release()), + mailbox(mailbox), + creation_sync_token(creation_sync_token), + damage(rect) {} BufferQueue::AllocatedSurface::~AllocatedSurface() { DCHECK(!buffer);
diff --git a/components/viz/service/display_embedder/buffer_queue.h b/components/viz/service/display_embedder/buffer_queue.h index e25a9ec1..b347c2e 100644 --- a/components/viz/service/display_embedder/buffer_queue.h +++ b/components/viz/service/display_embedder/buffer_queue.h
@@ -16,6 +16,7 @@ #include "base/memory/ref_counted.h" #include "components/viz/service/viz_service_export.h" #include "gpu/command_buffer/common/mailbox.h" +#include "gpu/command_buffer/common/sync_token.h" #include "gpu/ipc/common/surface_handle.h" #include "ui/gfx/buffer_types.h" #include "ui/gfx/color_space.h" @@ -122,6 +123,7 @@ struct VIZ_SERVICE_EXPORT AllocatedSurface { AllocatedSurface(std::unique_ptr<gfx::GpuMemoryBuffer> buffer, const gpu::Mailbox& mailbox, + const gpu::SyncToken& creation_sync_token, const gfx::Rect& rect); ~AllocatedSurface(); @@ -129,6 +131,9 @@ // SurfaceHandle, we don't have to keep track of |buffer|. std::unique_ptr<gfx::GpuMemoryBuffer> buffer; gpu::Mailbox mailbox; + // SyncToken generated when |mailbox| was created. The client of BufferQueue + // should insert this token in its command stream before using |mailbox|. + gpu::SyncToken creation_sync_token; gfx::Rect damage; // This is the damage for this frame from the previous. }; @@ -138,11 +143,8 @@ void UpdateBufferDamage(const gfx::Rect& damage); // Return a buffer that is available to be drawn into or nullptr if there is - // no available buffer and one cannot be created. If a new buffer is created - // *|creation_sync_token| is set to a sync token that the client must wait on - // before using the buffer. - std::unique_ptr<AllocatedSurface> GetNextSurface( - gpu::SyncToken* creation_sync_token); + // no available buffer and one cannot be created. + std::unique_ptr<AllocatedSurface> GetNextSurface(); gpu::SharedImageInterface* const sii_; gfx::Size size_;
diff --git a/components/viz/service/display_embedder/gl_output_surface_buffer_queue.cc b/components/viz/service/display_embedder/gl_output_surface_buffer_queue.cc index 7e393dd..b19b4ce 100644 --- a/components/viz/service/display_embedder/gl_output_surface_buffer_queue.cc +++ b/components/viz/service/display_embedder/gl_output_surface_buffer_queue.cc
@@ -191,6 +191,10 @@ return current_texture_; } +gpu::Mailbox GLOutputSurfaceBufferQueue::GetOverlayMailbox() const { + return buffer_queue_->GetCurrentBuffer(nullptr); +} + gfx::BufferFormat GLOutputSurfaceBufferQueue::GetOverlayBufferFormat() const { DCHECK(buffer_queue_); return buffer_queue_->buffer_format();
diff --git a/components/viz/service/display_embedder/gl_output_surface_buffer_queue.h b/components/viz/service/display_embedder/gl_output_surface_buffer_queue.h index 8b86288b..153e920 100644 --- a/components/viz/service/display_embedder/gl_output_surface_buffer_queue.h +++ b/components/viz/service/display_embedder/gl_output_surface_buffer_queue.h
@@ -60,6 +60,7 @@ uint32_t GetFramebufferCopyTextureFormat() override; bool IsDisplayedAsOverlayPlane() const override; unsigned GetOverlayTextureId() const override; + gpu::Mailbox GetOverlayMailbox() const override; gfx::BufferFormat GetOverlayBufferFormat() const override; // GLOutputSurface:
diff --git a/content/browser/accessibility/browser_accessibility_manager.cc b/content/browser/accessibility/browser_accessibility_manager.cc index ed57bd6..548d6f7d 100644 --- a/content/browser/accessibility/browser_accessibility_manager.cc +++ b/content/browser/accessibility/browser_accessibility_manager.cc
@@ -342,12 +342,20 @@ SetLastFocusedNode(nullptr); } +void BrowserAccessibilityManager::UserIsNavigatingAway() { + user_is_navigating_away_ = true; +} + void BrowserAccessibilityManager::UserIsReloading() { user_is_navigating_away_ = true; } -void BrowserAccessibilityManager::DidStartLoading() { - user_is_navigating_away_ = true; +void BrowserAccessibilityManager::NavigationSucceeded() { + user_is_navigating_away_ = false; +} + +void BrowserAccessibilityManager::NavigationFailed() { + user_is_navigating_away_ = false; } void BrowserAccessibilityManager::DidStopLoading() {
diff --git a/content/browser/accessibility/browser_accessibility_manager.h b/content/browser/accessibility/browser_accessibility_manager.h index c04d9f9..342ed37b 100644 --- a/content/browser/accessibility/browser_accessibility_manager.h +++ b/content/browser/accessibility/browser_accessibility_manager.h
@@ -194,16 +194,14 @@ // view lost focus. virtual void OnWindowBlurred(); - virtual void UserIsReloading(); - - // WebContentsObserver implementation. // Notify the accessibility manager about page navigation. - // BrowserAccessibilityManager used to be manually notified at the same time - // WebContentsObserver's DidStartLoading(), DidStopLoading(), and - // DidFinishNavigation() methods were called. Since then, it was determined - // BrowserAccessibilityManager does not need to distinguish between - // DidFinishNavigation() and DidStopLoading(). - void DidStartLoading() override; + // TODO(domfarolino, dmazzoni): Implement WebContentsObserver methods that + // correspond to the ones we provide today, so we can stop being manually + // notified of navigation events when they happen. + void UserIsNavigatingAway(); + virtual void UserIsReloading(); + void NavigationSucceeded(); + void NavigationFailed(); void DidStopLoading() override; // Keep track of if this page is hidden by an interstitial, in which case
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc index 5f605d3..0052082 100644 --- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc +++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -2266,7 +2266,13 @@ RunDisplayLockingTest(FILE_PATH_LITERAL("non-activatable.html")); } -IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, DisplayLockingAll) { +#if defined(OS_WIN) || defined(OS_LINUX) +// The test is flaky on Win and Linux. crbug.com/1043480. +#define MAYBE_DisplayLockingAll DISABLED_DisplayLockingAll +#else +#define MAYBE_DisplayLockingAll DisplayLockingAll +#endif +IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, MAYBE_DisplayLockingAll) { RunDisplayLockingTest(FILE_PATH_LITERAL("all.html")); }
diff --git a/content/browser/background_sync/BUILD.gn b/content/browser/background_sync/BUILD.gn index 55aeded..94f6dc4a 100644 --- a/content/browser/background_sync/BUILD.gn +++ b/content/browser/background_sync/BUILD.gn
@@ -5,7 +5,5 @@ import("//third_party/protobuf/proto_library.gni") proto_library("background_sync_proto") { - sources = [ - "background_sync.proto", - ] + sources = [ "background_sync.proto" ] }
diff --git a/content/browser/child_process_launcher_helper.cc b/content/browser/child_process_launcher_helper.cc index affe557..d71beb8 100644 --- a/content/browser/child_process_launcher_helper.cc +++ b/content/browser/child_process_launcher_helper.cc
@@ -9,7 +9,7 @@ #include "base/metrics/histogram_macros.h" #include "base/no_destructor.h" #include "base/single_thread_task_runner.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include "base/task/post_task.h" #include "base/task/single_thread_task_runner_thread_mode.h" #include "base/task/task_traits.h" @@ -231,10 +231,9 @@ #else // defined(OS_ANDROID) // TODO(http://crbug.com/820200): Investigate whether we could use // SequencedTaskRunner on platforms other than Windows. - static base::LazySingleThreadTaskRunner launcher_task_runner = - LAZY_SINGLE_THREAD_TASK_RUNNER_INITIALIZER( - base::TaskTraits(base::ThreadPool(), base::MayBlock(), - base::TaskPriority::USER_BLOCKING, + static base::LazyThreadPoolSingleThreadTaskRunner launcher_task_runner = + LAZY_THREAD_POOL_SINGLE_THREAD_TASK_RUNNER_INITIALIZER( + base::TaskTraits(base::MayBlock(), base::TaskPriority::USER_BLOCKING, base::TaskShutdownBehavior::BLOCK_SHUTDOWN), base::SingleThreadTaskRunnerThreadMode::DEDICATED); return launcher_task_runner.Get().get();
diff --git a/content/browser/cookie_store/BUILD.gn b/content/browser/cookie_store/BUILD.gn index d5dbdd7..ab17a02 100644 --- a/content/browser/cookie_store/BUILD.gn +++ b/content/browser/cookie_store/BUILD.gn
@@ -5,7 +5,5 @@ import("//third_party/protobuf/proto_library.gni") proto_library("cookie_store_proto") { - sources = [ - "cookie_change_subscriptions.proto", - ] + sources = [ "cookie_change_subscriptions.proto" ] }
diff --git a/content/browser/devtools/devtools_stream_file.cc b/content/browser/devtools/devtools_stream_file.cc index 5cd747d..f1bd14f 100644 --- a/content/browser/devtools/devtools_stream_file.cc +++ b/content/browser/devtools/devtools_stream_file.cc
@@ -9,7 +9,7 @@ #include "base/files/file_util.h" #include "base/sequenced_task_runner.h" #include "base/strings/string_util.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include "base/task/post_task.h" #include "base/third_party/icu/icu_utf.h" #include "content/public/browser/browser_task_traits.h" @@ -20,9 +20,9 @@ scoped_refptr<base::SequencedTaskRunner> impl_task_runner() { constexpr base::TaskTraits kBlockingTraits = { - base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT}; - static base::LazySequencedTaskRunner s_sequenced_task_unner = - LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER(kBlockingTraits); + base::MayBlock(), base::TaskPriority::BEST_EFFORT}; + static base::LazyThreadPoolSequencedTaskRunner s_sequenced_task_unner = + LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER(kBlockingTraits); return s_sequenced_task_unner.Get(); }
diff --git a/content/browser/file_system/browser_file_system_helper.cc b/content/browser/file_system/browser_file_system_helper.cc index 897a57a..a07a58a 100644 --- a/content/browser/file_system/browser_file_system_helper.cc +++ b/content/browser/file_system/browser_file_system_helper.cc
@@ -15,7 +15,7 @@ #include "base/files/file_path.h" #include "base/sequenced_task_runner.h" #include "base/strings/utf_string_conversions.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include "base/task/post_task.h" #include "content/browser/child_process_security_policy_impl.h" #include "content/public/browser/browser_context.h" @@ -49,10 +49,9 @@ // All FileSystemContexts currently need to share the same sequence per sharing // global objects: https://codereview.chromium.org/2883403002#msg14. -base::LazySequencedTaskRunner g_fileapi_task_runner = - LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER( - base::TaskTraits(base::ThreadPool(), - base::MayBlock(), +base::LazyThreadPoolSequencedTaskRunner g_fileapi_task_runner = + LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER( + base::TaskTraits(base::MayBlock(), base::TaskPriority::USER_VISIBLE, base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN));
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc index 9939453..7da2f39 100644 --- a/content/browser/frame_host/render_frame_host_manager.cc +++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -906,16 +906,13 @@ } void RenderFrameHostManager::OnDidStartLoading() { - for (const auto& pair : proxy_hosts_) { - pair.second->Send( - new FrameMsg_DidStartLoading(pair.second->GetRoutingID())); - } + for (const auto& pair : proxy_hosts_) + pair.second->GetAssociatedRemoteFrame()->DidStartLoading(); } void RenderFrameHostManager::OnDidStopLoading() { - for (const auto& pair : proxy_hosts_) { - pair.second->Send(new FrameMsg_DidStopLoading(pair.second->GetRoutingID())); - } + for (const auto& pair : proxy_hosts_) + pair.second->GetAssociatedRemoteFrame()->DidStopLoading(); } void RenderFrameHostManager::OnDidUpdateName(const std::string& name, @@ -2167,7 +2164,7 @@ // finished loading, let the renderer know so it can also mark the proxy as // loading. See https://crbug.com/916137. if (frame_tree_node_->IsLoading()) - proxy->Send(new FrameMsg_DidStartLoading(proxy->GetRoutingID())); + proxy->GetAssociatedRemoteFrame()->DidStartLoading(); } return created;
diff --git a/content/browser/frame_host/render_frame_host_manager_unittest.cc b/content/browser/frame_host/render_frame_host_manager_unittest.cc index 88818ee8..ef7c36d 100644 --- a/content/browser/frame_host/render_frame_host_manager_unittest.cc +++ b/content/browser/frame_host/render_frame_host_manager_unittest.cc
@@ -6,6 +6,7 @@ #include <stdint.h> +#include <map> #include <string> #include <tuple> #include <unordered_set> @@ -100,19 +101,6 @@ EXPECT_EQ(expected_param, std::get<0>(params)); } -// Helper function to find a message with the specified type and routing ID in -// an IPC sink. -bool FindMessageForRoutingId(const IPC::TestSink& sink, - uint32_t type, - int routing_id) { - for (size_t i = 0; i < sink.message_count(); i++) { - const IPC::Message* msg = sink.GetMessageAt(i); - if (msg->type() == type && msg->routing_id() == routing_id) - return true; - } - return false; -} - class RenderFrameHostManagerTestWebUIControllerFactory : public WebUIControllerFactory { public: @@ -3008,11 +2996,52 @@ root->child_at(0)->current_replication_state().insecure_request_policy); } +// This class intercepts RenderFrameProxyHost creations, and overrides their +// respective blink::mojom::RemoteFrame instances, so that it can watch the +// start and stop loading states. +class StartStopLoadingProxyObserver { + public: + StartStopLoadingProxyObserver() { + RenderFrameProxyHost::SetCreatedCallbackForTesting(base::BindRepeating( + &StartStopLoadingProxyObserver::RenderFrameProxyHostCreatedCallback, + base::Unretained(this))); + } + ~StartStopLoadingProxyObserver() { + RenderFrameProxyHost::SetCreatedCallbackForTesting( + RenderFrameProxyHost::CreatedCallback()); + } + bool IsLoading(RenderFrameProxyHost* proxy) { + return remote_frames_[proxy]->is_loading(); + } + + private: + class Remote : public content::FakeRemoteFrame { + public: + explicit Remote(RenderFrameProxyHost* proxy) { + Init(proxy->GetRemoteAssociatedInterfacesTesting()); + } + void DidStartLoading() override { is_loading_ = true; } + void DidStopLoading() override { is_loading_ = false; } + bool is_loading() { return is_loading_; } + + private: + bool is_loading_ = false; + }; + + void RenderFrameProxyHostCreatedCallback(RenderFrameProxyHost* proxy_host) { + remote_frames_[proxy_host] = std::make_unique<Remote>(proxy_host); + } + + std::map<RenderFrameProxyHost*, std::unique_ptr<Remote>> remote_frames_; +}; + // Tests that new frame proxies receive an IPC to update their loading state, // if they are created for a frame that's currently loading. See // https://crbug.com/916137. TEST_F(RenderFrameHostManagerTestWithSiteIsolation, NewProxyReceivesLoadingState) { + StartStopLoadingProxyObserver proxy_observer; + const GURL kUrl1("http://www.chromium.org"); const GURL kUrl2("http://www.google.com"); const GURL kUrl3("http://foo.com"); @@ -3044,15 +3073,14 @@ child_host->GetSiteInstance()); ASSERT_TRUE(proxy_to_child); ASSERT_EQ(proxy_to_child->GetProcess(), child_host->GetProcess()); + base::RunLoop().RunUntilIdle(); // Since the main frame was loading at the time the main frame proxy was // created in child frame's process, verify that we sent a separate IPC to // update the proxy's loading state. Note that we'll create two proxies for // the main frame and subframe, and we're interested in the message for // the main frame proxy. - EXPECT_TRUE(FindMessageForRoutingId(child_host->GetProcess()->sink(), - FrameMsg_DidStartLoading::ID, - proxy_to_child->GetRoutingID())); + EXPECT_TRUE(proxy_observer.IsLoading(proxy_to_child)); // Simulate load stop in the main frame. navigation->StopLoading(); @@ -3064,13 +3092,12 @@ child_host->GetSiteInstance()); ASSERT_TRUE(proxy_to_child); ASSERT_EQ(proxy_to_child->GetProcess(), child_host->GetProcess()); + base::RunLoop().RunUntilIdle(); // Since this time the main frame wasn't loading at the time |proxy_to_child| // was created in the process for |kUrl3|, verify that we didn't send any // extra IPCs to update that proxy's loading state. - EXPECT_FALSE(FindMessageForRoutingId(child_host->GetProcess()->sink(), - FrameMsg_DidStartLoading::ID, - proxy_to_child->GetRoutingID())); + EXPECT_FALSE(proxy_observer.IsLoading(proxy_to_child)); } // Tests that a BeginNavigation IPC from a no longer active RFH is ignored.
diff --git a/content/browser/frame_host/render_frame_proxy_host.cc b/content/browser/frame_host/render_frame_proxy_host.cc index 60ff893..3fa246b 100644 --- a/content/browser/frame_host/render_frame_proxy_host.cc +++ b/content/browser/frame_host/render_frame_proxy_host.cc
@@ -245,7 +245,7 @@ // let the renderer know so it can also mark the proxy as loading. See // https://crbug.com/916137. if (frame_tree_node_->IsLoading()) - Send(new FrameMsg_DidStartLoading(routing_id_)); + GetAssociatedRemoteFrame()->DidStartLoading(); // For subframes, initialize the proxy's FrameOwnerProperties only if they // differ from default values.
diff --git a/content/browser/indexed_db/indexed_db_backing_store.cc b/content/browser/indexed_db/indexed_db_backing_store.cc index 156ca59f..369f8b8 100644 --- a/content/browser/indexed_db/indexed_db_backing_store.cc +++ b/content/browser/indexed_db/indexed_db_backing_store.cc
@@ -1771,7 +1771,7 @@ return InternalInconsistencyStatus(); } for (auto& entry : value->blob_info) { - entry.set_file_path( + entry.set_indexed_db_file_path( backing_store_->GetBlobFileName(database_id, entry.blob_number())); entry.set_mark_used_callback( backing_store_->active_blob_registry()->GetMarkBlobActiveCallback(
diff --git a/content/browser/indexed_db/indexed_db_backing_store_unittest.cc b/content/browser/indexed_db/indexed_db_backing_store_unittest.cc index a7550d1f..9fd2cd2 100644 --- a/content/browser/indexed_db/indexed_db_backing_store_unittest.cc +++ b/content/browser/indexed_db/indexed_db_backing_store_unittest.cc
@@ -403,8 +403,8 @@ std::move(pending_receiver)); }, uuid, remote.InitWithNewPipeAndPassReceiver())); - IndexedDBBlobInfo info(std::move(remote), uuid, base::FilePath(), file_name, - type, last_modified, size); + IndexedDBBlobInfo info(std::move(remote), uuid, file_name, type, + last_modified, size); return info; } @@ -476,7 +476,7 @@ if (ids.size() != blob_context_->writes().size()) return false; for (const auto& read : reads) { - if (ids.count(read.file_path()) != 1) + if (ids.count(read.indexed_db_file_path()) != 1) return false; } return true;
diff --git a/content/browser/indexed_db/indexed_db_blob_info.cc b/content/browser/indexed_db/indexed_db_blob_info.cc index 177bf5aa..9158d1d 100644 --- a/content/browser/indexed_db/indexed_db_blob_info.cc +++ b/content/browser/indexed_db/indexed_db_blob_info.cc
@@ -30,7 +30,6 @@ if (iter.is_file()) { info->file = blink::mojom::IDBFileInfo::New(); info->file->name = iter.file_name(); - info->file->path = iter.file_path(); info->file->last_modified = iter.last_modified(); } blob_or_file_info->push_back(std::move(info)); @@ -58,7 +57,6 @@ IndexedDBBlobInfo::IndexedDBBlobInfo( mojo::PendingRemote<blink::mojom::Blob> blob_remote, const std::string& uuid, - const base::FilePath& file_path, const base::string16& file_name, const base::string16& type, const base::Time& last_modified, @@ -69,7 +67,6 @@ type_(type), size_(size), file_name_(file_name), - file_path_(file_path), last_modified_(last_modified) {} IndexedDBBlobInfo::IndexedDBBlobInfo(int64_t blob_number, @@ -102,9 +99,9 @@ size_ = size; } -void IndexedDBBlobInfo::set_file_path(const base::FilePath& file_path) { - DCHECK(file_path_.empty()); - file_path_ = file_path; +void IndexedDBBlobInfo::set_indexed_db_file_path( + const base::FilePath& file_path) { + indexed_db_file_path_ = file_path; } void IndexedDBBlobInfo::set_last_modified(const base::Time& time) {
diff --git a/content/browser/indexed_db/indexed_db_blob_info.h b/content/browser/indexed_db/indexed_db_blob_info.h index 2f2c57b..6fefa8c0 100644 --- a/content/browser/indexed_db/indexed_db_blob_info.h +++ b/content/browser/indexed_db/indexed_db_blob_info.h
@@ -50,7 +50,6 @@ // it should be considered corrupt. IndexedDBBlobInfo(mojo::PendingRemote<blink::mojom::Blob> blob_remote, const std::string& uuid, - const base::FilePath& file_path, const base::string16& file_name, const base::string16& type, const base::Time& last_modified, @@ -76,8 +75,10 @@ const base::string16& type() const { return type_; } int64_t size() const { return size_; } const base::string16& file_name() const { return file_name_; } + const base::FilePath indexed_db_file_path() const { + return indexed_db_file_path_; + } int64_t blob_number() const { return blob_number_; } - const base::FilePath& file_path() const { return file_path_; } const base::Time& last_modified() const { return last_modified_; } const base::RepeatingClosure& mark_used_callback() const { return mark_used_callback_; @@ -87,7 +88,7 @@ } void set_size(int64_t size); - void set_file_path(const base::FilePath& file_path); + void set_indexed_db_file_path(const base::FilePath& file_path); void set_last_modified(const base::Time& time); void set_blob_number(int64_t blob_number); void set_mark_used_callback(base::RepeatingClosure mark_used_callback); @@ -102,12 +103,13 @@ std::string uuid_; // Mime type. base::string16 type_; + // This is the path of the file that was copied into the IndexedDB system. + // Only populated when reading from the database. + base::FilePath indexed_db_file_path_; // -1 if unknown for File. int64_t size_; // Only for File. base::string16 file_name_; - // Only for File. - base::FilePath file_path_; // Only for File; valid only if size is. base::Time last_modified_;
diff --git a/content/browser/indexed_db/indexed_db_dispatcher_host.cc b/content/browser/indexed_db/indexed_db_dispatcher_host.cc index 8f5758f..4f09562 100644 --- a/content/browser/indexed_db/indexed_db_dispatcher_host.cc +++ b/content/browser/indexed_db/indexed_db_dispatcher_host.cc
@@ -450,7 +450,7 @@ #if !defined(OS_ANDROID) last_modified = blob_info.last_modified(); #endif - BindFileReader(blob_info.file_path(), last_modified, + BindFileReader(blob_info.indexed_db_file_path(), last_modified, blob_info.release_callback(), element->reader.InitWithNewPipeAndPassReceiver());
diff --git a/content/browser/indexed_db/transaction_impl.cc b/content/browser/indexed_db/transaction_impl.cc index b54b8c9..0961c6f 100644 --- a/content/browser/indexed_db/transaction_impl.cc +++ b/content/browser/indexed_db/transaction_impl.cc
@@ -10,7 +10,6 @@ #include "base/metrics/histogram_functions.h" #include "base/task/post_task.h" -#include "content/browser/child_process_security_policy_impl.h" #include "content/browser/indexed_db/indexed_db_callback_helpers.h" #include "content/browser/indexed_db/indexed_db_connection.h" #include "content/browser/indexed_db/indexed_db_context_impl.h" @@ -22,15 +21,6 @@ #include "third_party/blink/public/mojom/indexeddb/indexeddb.mojom.h" namespace content { -namespace { -const char kInvalidBlobFilePath[] = "Blob file path is invalid"; - -IndexedDBDatabaseError CreateBackendAbortError() { - return IndexedDBDatabaseError(blink::mojom::IDBException::kAbortError, - "Backend aborted error"); -} - -} // namespace TransactionImpl::TransactionImpl( base::WeakPtr<IndexedDBTransaction> transaction, @@ -110,18 +100,8 @@ CHECK(dispatcher_host_); std::vector<IndexedDBBlobInfo> blob_infos; - if (!input_value->blob_or_file_info.empty()) { - bool security_policy_failure = false; - CreateBlobInfos(input_value, &blob_infos, &security_policy_failure); - if (security_policy_failure) { - IndexedDBDatabaseError error = CreateBackendAbortError(); - std::move(callback).Run( - blink::mojom::IDBTransactionPutResult::NewErrorResult( - blink::mojom::IDBError::New(error.code(), error.message()))); - mojo::ReportBadMessage(kInvalidBlobFilePath); - return; - } - } + if (!input_value->blob_or_file_info.empty()) + CreateBlobInfos(input_value, &blob_infos); if (!transaction_) { IndexedDBDatabaseError error(blink::mojom::IDBException::kUnknownError, @@ -179,19 +159,12 @@ void TransactionImpl::CreateBlobInfos( blink::mojom::IDBValuePtr& value, - std::vector<IndexedDBBlobInfo>* blob_infos, - bool* security_policy_failure) { + std::vector<IndexedDBBlobInfo>* blob_infos) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - *security_policy_failure = false; - // Should only be called if there are blobs to process. CHECK(!value->blob_or_file_info.empty()); - ChildProcessSecurityPolicyImpl* policy = - ChildProcessSecurityPolicyImpl::GetInstance(); - int64_t ipc_process_id = dispatcher_host_->ipc_process_id(); - base::CheckedNumeric<uint64_t> total_blob_size = 0; blob_infos->resize(value->blob_or_file_info.size()); for (size_t i = 0; i < value->blob_or_file_info.size(); ++i) { @@ -200,16 +173,9 @@ total_blob_size += size; if (info->file) { - if (!info->file->path.empty() && - !policy->CanReadFile(ipc_process_id, info->file->path)) { - blob_infos->clear(); - *security_policy_failure = true; - return; - } - DCHECK_NE(info->size, IndexedDBBlobInfo::kUnknownSize); (*blob_infos)[i] = IndexedDBBlobInfo( - std::move(info->blob), info->uuid, info->file->path, info->file->name, - info->mime_type, info->file->last_modified, info->size); + std::move(info->blob), info->uuid, info->file->name, info->mime_type, + info->file->last_modified, info->size); } else { (*blob_infos)[i] = IndexedDBBlobInfo(std::move(info->blob), info->uuid, info->mime_type, info->size);
diff --git a/content/browser/indexed_db/transaction_impl.h b/content/browser/indexed_db/transaction_impl.h index 972b929..b5a4727 100644 --- a/content/browser/indexed_db/transaction_impl.h +++ b/content/browser/indexed_db/transaction_impl.h
@@ -58,8 +58,7 @@ // Also returns whether there was any security failures reading the // filenames passed in |value| via the |security_policy_failure| variable. void CreateBlobInfos(blink::mojom::IDBValuePtr& value, - std::vector<IndexedDBBlobInfo>* blob_infos, - bool* security_policy_failure); + std::vector<IndexedDBBlobInfo>* blob_infos); base::WeakPtr<IndexedDBDispatcherHost> dispatcher_host_; scoped_refptr<IndexedDBContextImpl> indexed_db_context_;
diff --git a/content/browser/payments/BUILD.gn b/content/browser/payments/BUILD.gn index 07e9bfa..2af4fb75 100644 --- a/content/browser/payments/BUILD.gn +++ b/content/browser/payments/BUILD.gn
@@ -5,7 +5,5 @@ import("//third_party/protobuf/proto_library.gni") proto_library("payment_app_proto") { - sources = [ - "payment_app.proto", - ] + sources = [ "payment_app.proto" ] }
diff --git a/content/browser/renderer_host/input/input_router_impl_unittest.cc b/content/browser/renderer_host/input/input_router_impl_unittest.cc index ab539609..f21ac06 100644 --- a/content/browser/renderer_host/input/input_router_impl_unittest.cc +++ b/content/browser/renderer_host/input/input_router_impl_unittest.cc
@@ -979,13 +979,8 @@ EXPECT_FALSE(HasPendingEvents()); } -// TODO(https://crbug.com/866946): Test is flaky on Fuchsia. -#if defined(OS_FUCHSIA) -#define MAYBE_GestureTypesIgnoringAck DISABLED_GestureTypesIgnoringAck -#else -#define MAYBE_GestureTypesIgnoringAck GestureTypesIgnoringAck -#endif -TEST_P(InputRouterImplTest, MAYBE_GestureTypesIgnoringAck) { +// TODO(https://crbug.com/866946): Test is flaky, especially on Mac & Fuchsia. +TEST_P(InputRouterImplTest, DISABLED_GestureTypesIgnoringAck) { // We test every gesture type, ensuring that the stream of gestures is valid. #if defined(OS_WIN)
diff --git a/content/browser/renderer_host/input/mouse_wheel_event_queue.cc b/content/browser/renderer_host/input/mouse_wheel_event_queue.cc index 4d87936..52bd60f 100644 --- a/content/browser/renderer_host/input/mouse_wheel_event_queue.cc +++ b/content/browser/renderer_host/input/mouse_wheel_event_queue.cc
@@ -157,7 +157,9 @@ event_sent_for_gesture_ack_->event.delta_units == ui::input_types::ScrollGranularity::kScrollByPrecisePixel || event_sent_for_gesture_ack_->event.delta_units == - ui::input_types::ScrollGranularity::kScrollByPixel); + ui::input_types::ScrollGranularity::kScrollByPixel || + event_sent_for_gesture_ack_->event.delta_units == + ui::input_types::ScrollGranularity::kScrollByPercentage); scroll_update.data.scroll_update.delta_units = event_sent_for_gesture_ack_->event.delta_units;
diff --git a/content/browser/renderer_host/input/synthetic_gesture_target_base.cc b/content/browser/renderer_host/input/synthetic_gesture_target_base.cc index b3993ee..2fcff4d 100644 --- a/content/browser/renderer_host/input/synthetic_gesture_target_base.cc +++ b/content/browser/renderer_host/input/synthetic_gesture_target_base.cc
@@ -67,7 +67,21 @@ LOG(WARNING) << "Mouse wheel position is not within content bounds."; return; } - DispatchWebMouseWheelEventToPlatform(web_wheel, latency_info); + if (web_wheel.delta_units != + ui::input_types::ScrollGranularity::kScrollByPercentage) + DispatchWebMouseWheelEventToPlatform(web_wheel, latency_info); + else { + // Percentage-based mouse wheel scrolls are implemented in the UI layer by + // converting a native event's wheel tick amount to a percentage and + // setting that directly on WebMouseWheelEvent (i.e. it does not read the + // ui::MouseWheelEvent). However, when dispatching a synthetic + // ui::MouseWheelEvent, the created WebMouseWheelEvent will copy values + // from the ui::MouseWheelEvent. ui::MouseWheelEvent does + // not have a float value for delta, so that codepath ends up truncating. + // So instead, dispatch the WebMouseWheelEvent directly through the + // RenderWidgetHostImpl. + host_->ForwardWheelEventWithLatencyInfo(web_wheel, latency_info); + } } else if (WebInputEvent::IsMouseEventType(event.GetType())) { const WebMouseEvent& web_mouse = static_cast<const WebMouseEvent&>(event);
diff --git a/content/browser/renderer_host/render_widget_host_view_mac_browsertest.mm b/content/browser/renderer_host/render_widget_host_view_mac_browsertest.mm index b60575a7..0c22ba9 100644 --- a/content/browser/renderer_host/render_widget_host_view_mac_browsertest.mm +++ b/content/browser/renderer_host/render_widget_host_view_mac_browsertest.mm
@@ -47,9 +47,7 @@ _run_loop = std::make_unique<base::RunLoop>(); } -- (void)waitWithTimeout:(NSTimeInterval)timeout { - base::RunLoop::ScopedRunTimeoutForTest run_timeout( - base::TimeDelta::FromSecondsD(timeout), _run_loop->QuitClosure()); +- (void)wait { _run_loop->Run(); [self reset]; @@ -147,14 +145,14 @@ initWithRenderWidgetHostViewCocoa:rwhv_cocoa]); EXPECT_TRUE(ExecJs(shell(), "ta.focus();")); - [flag_change_waiter waitWithTimeout:5]; + [flag_change_waiter wait]; EXPECT_FALSE(rwhv_cocoa.textInputFlags & blink::kWebTextInputFlagAutocorrectOff); EXPECT_TRUE(ExecJs( shell(), "ta.setAttribute('autocorrect', 'off'); console.log(ta.outerHTML);")); - [flag_change_waiter waitWithTimeout:5]; + [flag_change_waiter wait]; EXPECT_TRUE(rwhv_cocoa.textInputFlags & blink::kWebTextInputFlagAutocorrectOff); }
diff --git a/content/browser/tracing/startup_tracing_browsertest.cc b/content/browser/tracing/startup_tracing_browsertest.cc index dad4966..de5e2fe 100644 --- a/content/browser/tracing/startup_tracing_browsertest.cc +++ b/content/browser/tracing/startup_tracing_browsertest.cc
@@ -68,8 +68,9 @@ DISALLOW_COPY_AND_ASSIGN(CommandlineStartupTracingTest); }; -// Failing on Android ASAN. crbug.com/1041392 -#if defined(OS_ANDROID) && defined(ADDRESS_SANITIZER) +// Failing on Android ASAN, Linux TSAN and Windows 10. crbug.com/1041392 +#if (defined(OS_ANDROID) && defined(ADDRESS_SANITIZER)) || \ + (defined(OS_LINUX) && defined(THREAD_SANITIZER)) || defined(OS_WIN) #define MAYBE_TestStartupTracing DISABLED_TestStartupTracing #else #define MAYBE_TestStartupTracing TestStartupTracing
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc index 47f328f..2f26258 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc
@@ -4488,6 +4488,20 @@ display_cutout_host_impl_->DidFinishNavigation(navigation_handle); if (navigation_handle->HasCommitted()) { + // TODO(domfarolino, dmazzoni): Do this using WebContentsObserver. See + // https://crbug.com/981271. + BrowserAccessibilityManager* manager = + static_cast<RenderFrameHostImpl*>( + navigation_handle->GetRenderFrameHost()) + ->browser_accessibility_manager(); + if (manager) { + if (navigation_handle->IsErrorPage()) { + manager->NavigationFailed(); + } else { + manager->NavigationSucceeded(); + } + } + if (navigation_handle->IsInMainFrame()) { last_committed_source_id_including_same_document_ = ukm::ConvertToSourceId(navigation_handle->GetNavigationId(), @@ -5956,6 +5970,15 @@ // Reset the focus state from DidStartNavigation to false if a new load starts // afterward, in case loading logic triggers a FocusLocationBarByDefault call. should_focus_location_bar_by_default_ = false; + + // Notify accessibility that the user is navigating away from the + // current document. + // TODO(domfarolino, dmazzoni): Do this using WebContentsObserver. See + // https://crbug.com/981271. + BrowserAccessibilityManager* manager = + frame_tree_node->current_frame_host()->browser_accessibility_manager(); + if (manager) + manager->UserIsNavigatingAway(); } void WebContentsImpl::DidStopLoading() {
diff --git a/content/browser/worker_host/shared_worker_service_impl_unittest.cc b/content/browser/worker_host/shared_worker_service_impl_unittest.cc index 2463c3a7..b24a4c2 100644 --- a/content/browser/worker_host/shared_worker_service_impl_unittest.cc +++ b/content/browser/worker_host/shared_worker_service_impl_unittest.cc
@@ -293,13 +293,8 @@ // Tests that the shared worker will not be started if the hosting web contents // is destroyed while the script is being fetched. -// Disabled on Fuchsia because this unittest is flaky. -#if defined(OS_FUCHSIA) -#define MAYBE_WebContentsDestroyed DISABLED_WebContentsDestroyed -#else -#define MAYBE_WebContentsDestroyed WebContentsDestroyed -#endif -TEST_F(SharedWorkerServiceImplTest, MAYBE_WebContentsDestroyed) { +// TODO(https://crbug.com/1029434): Flaky on at least Fuchsia and Linux. +TEST_F(SharedWorkerServiceImplTest, DISABLED_WebContentsDestroyed) { std::unique_ptr<TestWebContents> web_contents = CreateWebContents(GURL("http://example.com/")); TestRenderFrameHost* render_frame_host = web_contents->GetMainFrame();
diff --git a/content/child/BUILD.gn b/content/child/BUILD.gn index 46e72e5..17b85e5 100644 --- a/content/child/BUILD.gn +++ b/content/child/BUILD.gn
@@ -178,8 +178,6 @@ group("for_content_tests") { visibility = [ "//content/test/*" ] if (!is_component_build) { - public_deps = [ - ":child", - ] + public_deps = [ ":child" ] } }
diff --git a/content/common/font_list.cc b/content/common/font_list.cc index d5e78123..63130ef 100644 --- a/content/common/font_list.cc +++ b/content/common/font_list.cc
@@ -4,17 +4,15 @@ #include "content/common/font_list.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" namespace content { namespace { -base::LazySequencedTaskRunner g_font_list_task_runner = - LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER( - base::TaskTraits(base::ThreadPool(), - base::MayBlock(), - base::TaskPriority::USER_VISIBLE)); +base::LazyThreadPoolSequencedTaskRunner g_font_list_task_runner = + LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER( + base::TaskTraits(base::MayBlock(), base::TaskPriority::USER_VISIBLE)); } // namespace
diff --git a/content/common/frame_messages.h b/content/common/frame_messages.h index fe3a274..e42c309 100644 --- a/content/common/frame_messages.h +++ b/content/common/frame_messages.h
@@ -589,14 +589,6 @@ // Instructs the frame to stop the load in progress, if any. IPC_MESSAGE_ROUTED0(FrameMsg_Stop) -// A message sent to RenderFrameProxy to indicate that its corresponding -// RenderFrame has started loading a document. -IPC_MESSAGE_ROUTED0(FrameMsg_DidStartLoading) - -// A message sent to RenderFrameProxy to indicate that its corresponding -// RenderFrame has completed loading. -IPC_MESSAGE_ROUTED0(FrameMsg_DidStopLoading) - // TODO(https://crbug.com/995428): Deprecated. // Tells the renderer to reload the frame. IPC_MESSAGE_ROUTED0(FrameMsg_Reload)
diff --git a/content/public/android/java/strings/android_content_strings.grd b/content/public/android/java/strings/android_content_strings.grd index 88fbfe8b..b32f421 100644 --- a/content/public/android/java/strings/android_content_strings.grd +++ b/content/public/android/java/strings/android_content_strings.grd
@@ -78,6 +78,7 @@ <output filename="values-uz/android_content_strings.xml" lang="uz" type="android" /> <output filename="values-vi/android_content_strings.xml" lang="vi" type="android" /> <output filename="values-zh-rCN/android_content_strings.xml" lang="zh-CN" type="android" /> + <output filename="values-zh-rHK/android_content_strings.xml" lang="zh-HK" type="android" /> <output filename="values-zh-rTW/android_content_strings.xml" lang="zh-TW" type="android" /> <output filename="values-zu/android_content_strings.xml" lang="zu" type="android" /> </outputs>
diff --git a/content/public/test/fake_remote_frame.cc b/content/public/test/fake_remote_frame.cc index c307ff1..f5394be 100644 --- a/content/public/test/fake_remote_frame.cc +++ b/content/public/test/fake_remote_frame.cc
@@ -67,6 +67,10 @@ const gfx::Rect& rect, blink::mojom::ScrollIntoViewParamsPtr params) {} +void FakeRemoteFrame::DidStartLoading() {} + +void FakeRemoteFrame::DidStopLoading() {} + void FakeRemoteFrame::FakeRemoteFrame::BindFrameHostReceiver( mojo::ScopedInterfaceEndpointHandle handle) { receiver_.Bind(mojo::PendingAssociatedReceiver<blink::mojom::RemoteFrame>(
diff --git a/content/public/test/fake_remote_frame.h b/content/public/test/fake_remote_frame.h index 3d4639c..3e02d32 100644 --- a/content/public/test/fake_remote_frame.h +++ b/content/public/test/fake_remote_frame.h
@@ -65,6 +65,8 @@ void ScrollRectToVisible( const gfx::Rect& rect, blink::mojom::ScrollIntoViewParamsPtr params) override; + void DidStartLoading() override; + void DidStopLoading() override; private: void BindFrameHostReceiver(mojo::ScopedInterfaceEndpointHandle handle);
diff --git a/content/renderer/gpu_benchmarking_extension.cc b/content/renderer/gpu_benchmarking_extension.cc index bb5042a..6356dc1 100644 --- a/content/renderer/gpu_benchmarking_extension.cc +++ b/content/renderer/gpu_benchmarking_extension.cc
@@ -297,8 +297,11 @@ float fling_velocity, bool precise_scrolling_deltas, bool scroll_by_page, - bool cursor_visible) { + bool cursor_visible, + bool scroll_by_percentage) { DCHECK(!(precise_scrolling_deltas && scroll_by_page)); + DCHECK(!(precise_scrolling_deltas && scroll_by_percentage)); + DCHECK(!(scroll_by_page && scroll_by_percentage)); if (ThrowIfPointOutOfBounds(context, args, gfx::Point(start_x, start_y), "Start point not in bounds")) { return false; @@ -342,6 +345,9 @@ } else if (precise_scrolling_deltas) { gesture_params.granularity = ui::input_types::ScrollGranularity::kScrollByPrecisePixel; + } else if (scroll_by_percentage) { + gesture_params.granularity = + ui::input_types::ScrollGranularity::kScrollByPercentage; } else { gesture_params.granularity = ui::input_types::ScrollGranularity::kScrollByPixel; @@ -692,6 +698,7 @@ bool precise_scrolling_deltas = true; bool scroll_by_page = false; bool cursor_visible = true; + bool scroll_by_percentage = false; if (!GetOptionalArg(args, &pixels_to_scroll) || !GetOptionalArg(args, &callback) || !GetOptionalArg(args, &start_x) || @@ -701,7 +708,8 @@ !GetOptionalArg(args, &speed_in_pixels_s) || !GetOptionalArg(args, &precise_scrolling_deltas) || !GetOptionalArg(args, &scroll_by_page) || - !GetOptionalArg(args, &cursor_visible)) { + !GetOptionalArg(args, &cursor_visible) || + !GetOptionalArg(args, &scroll_by_percentage)) { return false; } @@ -711,12 +719,16 @@ // Scroll by page only for mouse inputs. DCHECK(!scroll_by_page || gesture_source_type == SyntheticGestureParams::MOUSE_INPUT); + // Scroll by percentage only for mouse inputs. + DCHECK(!scroll_by_percentage || + gesture_source_type == SyntheticGestureParams::MOUSE_INPUT); EnsureRemoteInterface(); - return BeginSmoothScroll( - &context, args, input_injector_, pixels_to_scroll, callback, - gesture_source_type, direction, speed_in_pixels_s, true, start_x, start_y, - 0, precise_scrolling_deltas, scroll_by_page, cursor_visible); + return BeginSmoothScroll(&context, args, input_injector_, pixels_to_scroll, + callback, gesture_source_type, direction, + speed_in_pixels_s, true, start_x, start_y, 0, + precise_scrolling_deltas, scroll_by_page, + cursor_visible, scroll_by_percentage); } bool GpuBenchmarking::SmoothDrag(gin::Arguments* args) { @@ -778,7 +790,8 @@ &context, args, input_injector_, -pixels_to_scroll, callback, gesture_source_type, direction, speed_in_pixels_s, false, start_x, start_y, fling_velocity, true /* precise_scrolling_deltas */, - false /* scroll_by_page */, true /* cursor_visible */); + false /* scroll_by_page */, true /* cursor_visible */, + false /* scroll_by_percentage */); } bool GpuBenchmarking::ScrollBounce(gin::Arguments* args) {
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index ee22a3d..5eb5956 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -2347,7 +2347,7 @@ } if (is_loading) - proxy->OnDidStartLoading(); + proxy->DidStartLoading(); // Initialize the WebRemoteFrame with the replication state passed by the // process that is now rendering the frame.
diff --git a/content/renderer/render_frame_proxy.cc b/content/renderer/render_frame_proxy.cc index 06959fc5..7d2241a 100644 --- a/content/renderer/render_frame_proxy.cc +++ b/content/renderer/render_frame_proxy.cc
@@ -415,8 +415,6 @@ OnIntrinsicSizingInfoOfChildChanged) IPC_MESSAGE_HANDLER(FrameMsg_UpdateOpener, OnUpdateOpener) IPC_MESSAGE_HANDLER(FrameMsg_ViewChanged, OnViewChanged) - IPC_MESSAGE_HANDLER(FrameMsg_DidStartLoading, OnDidStartLoading) - IPC_MESSAGE_HANDLER(FrameMsg_DidStopLoading, OnDidStopLoading) IPC_MESSAGE_HANDLER(FrameMsg_DidUpdateFramePolicy, OnDidUpdateFramePolicy) IPC_MESSAGE_HANDLER(FrameMsg_DidSetFramePolicyHeaders, OnDidSetFramePolicyHeaders) @@ -470,7 +468,7 @@ web_frame_->SetOpener(opener); } -void RenderFrameProxy::OnDidStartLoading() { +void RenderFrameProxy::DidStartLoading() { web_frame_->DidStartLoading(); } @@ -479,10 +477,6 @@ FrameSinkIdChanged(params.frame_sink_id); } -void RenderFrameProxy::OnDidStopLoading() { - web_frame_->DidStopLoading(); -} - void RenderFrameProxy::OnDidUpdateName(const std::string& name, const std::string& unique_name) { web_frame_->SetReplicatedName(blink::WebString::FromUTF8(name));
diff --git a/content/renderer/render_frame_proxy.h b/content/renderer/render_frame_proxy.h index 6ebd220..0764162 100644 --- a/content/renderer/render_frame_proxy.h +++ b/content/renderer/render_frame_proxy.h
@@ -196,8 +196,7 @@ base::UnguessableToken GetDevToolsFrameToken() override; uint32_t Print(const blink::WebRect& rect, cc::PaintCanvas* canvas) override; - // IPC handlers - void OnDidStartLoading(); + void DidStartLoading(); void WasEvicted(); @@ -229,7 +228,6 @@ blink::WebIntrinsicSizingInfo sizing_info); void OnUpdateOpener(int opener_routing_id); void OnViewChanged(const FrameMsg_ViewChanged_Params& params); - void OnDidStopLoading(); void OnDidUpdateFramePolicy(const blink::FramePolicy& frame_policy); void OnDidSetFramePolicyHeaders( blink::WebSandboxFlags active_sandbox_flags,
diff --git a/content/shell/android/BUILD.gn b/content/shell/android/BUILD.gn index dec0028..d8442be 100644 --- a/content/shell/android/BUILD.gn +++ b/content/shell/android/BUILD.gn
@@ -39,9 +39,7 @@ "//media/midi", ] } - sources = [ - "shell_library_loader.cc", - ] + sources = [ "shell_library_loader.cc" ] configs -= [ "//build/config/android:hide_all_but_jni_onload" ] configs += [ "//build/config/android:hide_all_but_jni" ] } @@ -55,9 +53,7 @@ "//content/shell:content_shell_lib", ] - sources = [ - "shell_test_library_loader.cc", - ] + sources = [ "shell_test_library_loader.cc" ] configs -= [ "//build/config/android:hide_all_but_jni_onload" ] configs += [ "//build/config/android:hide_all_but_jni" ] } @@ -114,9 +110,7 @@ android_resources("content_shell_apk_resources") { testonly = true resource_dirs = [ "shell_apk/res" ] - deps = [ - ":content_shell_java_resources", - ] + deps = [ ":content_shell_java_resources" ] custom_package = "org.chromium.content_shell_apk" } @@ -151,16 +145,13 @@ android_aidl("content_javatests_aidl") { import_include = [ "shell_apk/src" ] - sources = [ - "shell_apk/src/org/chromium/content_shell_apk/IChildProcessTest.aidl", - ] + sources = + [ "shell_apk/src/org/chromium/content_shell_apk/IChildProcessTest.aidl" ] } android_assets("content_shell_assets") { testonly = true - sources = [ - "$root_out_dir/content_shell.pak", - ] + sources = [ "$root_out_dir/content_shell.pak" ] disable_compression = true deps = [ "//content/shell:pak", @@ -223,9 +214,7 @@ "//net/android:net_javatests", "//third_party/android_support_test_runner:runner_java", ] - data_deps = [ - "//testing/buildbot/filters:content_shell_test_apk_filters", - ] + data_deps = [ "//testing/buildbot/filters:content_shell_test_apk_filters" ] if (enable_chrome_android_internal) { data_deps += [ "//clank/build/bot/filters:content_shell_test_apk_filters" ] } @@ -351,9 +340,7 @@ generate_jni("linker_test_jni_headers") { testonly = true - sources = [ - "linker_test_apk/src/org/chromium/chromium_linker_test_apk/LinkerTests.java", - ] + sources = [ "linker_test_apk/src/org/chromium/chromium_linker_test_apk/LinkerTests.java" ] } } @@ -367,7 +354,5 @@ "//third_party/android_deps:com_android_support_support_compat_java", "//ui/android:ui_java", ] - sources = [ - "browsertests/src/org/chromium/content_shell/browsertests/ContentShellBrowserTestActivity.java", - ] + sources = [ "browsertests/src/org/chromium/content_shell/browsertests/ContentShellBrowserTestActivity.java" ] }
diff --git a/device/bluetooth/bluetooth_adapter_unittest.cc b/device/bluetooth/bluetooth_adapter_unittest.cc index 62d40d3..5ee98df 100644 --- a/device/bluetooth/bluetooth_adapter_unittest.cc +++ b/device/bluetooth/bluetooth_adapter_unittest.cc
@@ -785,6 +785,22 @@ EXPECT_FALSE(adapter_->IsDiscoverable()); EXPECT_FALSE(adapter_->IsDiscovering()); } + +TEST_P(BluetoothTestWinrtOnly, ConstructFakeAdapterWithoutPowerControl) { + if (!PlatformSupportsLowEnergy()) { + LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; + return; + } + + InitFakeAdapterWithRadioAccessDenied(); + EXPECT_EQ(adapter_->GetAddress(), kTestAdapterAddress); + EXPECT_EQ(adapter_->GetName(), kTestAdapterName); + EXPECT_TRUE(adapter_->IsPresent()); + EXPECT_FALSE(adapter_->CanPower()); + EXPECT_TRUE(adapter_->IsPowered()); + EXPECT_FALSE(adapter_->IsDiscoverable()); + EXPECT_FALSE(adapter_->IsDiscovering()); +} #endif // defined(OS_WIN) // TODO(scheib): Enable BluetoothTest fixture tests on all platforms. @@ -2033,15 +2049,9 @@ #endif // defined(OS_MACOSX) #if defined(OS_WIN) -INSTANTIATE_TEST_SUITE_P( - All, - BluetoothTestWinrt, - ::testing::Bool()); +INSTANTIATE_TEST_SUITE_P(All, BluetoothTestWinrt, ::testing::Bool()); -INSTANTIATE_TEST_SUITE_P( - All, - BluetoothTestWinrtOnly, - ::testing::Values(true)); +INSTANTIATE_TEST_SUITE_P(All, BluetoothTestWinrtOnly, ::testing::Values(true)); #endif // defined(OS_WIN) } // namespace device
diff --git a/device/bluetooth/bluetooth_adapter_winrt.cc b/device/bluetooth/bluetooth_adapter_winrt.cc index d2a7b9d..8bb0e9dd 100644 --- a/device/bluetooth/bluetooth_adapter_winrt.cc +++ b/device/bluetooth/bluetooth_adapter_winrt.cc
@@ -495,7 +495,7 @@ } bool BluetoothAdapterWinrt::CanPower() const { - return radio_ != nullptr; + return radio_ != nullptr && radio_access_allowed_; } bool BluetoothAdapterWinrt::IsPowered() const { @@ -1117,10 +1117,12 @@ base::ScopedClosureRunner on_init, RadioAccessStatus access_status) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - if (access_status != RadioAccessStatus_Allowed) { - VLOG(2) << "Got unexpected Radio Access Status: " - << ToCString(access_status); - return; + radio_access_allowed_ = access_status == RadioAccessStatus_Allowed; + if (!radio_access_allowed_) { + // This happens if "Allow apps to control device radios" is off in Privacy + // settings. + VLOG(2) << "RequestRadioAccessAsync failed: " << ToCString(access_status) + << "Will not be able to change radio power."; } ComPtr<IAsyncOperation<Radio*>> get_radio_op;
diff --git a/device/bluetooth/bluetooth_adapter_winrt.h b/device/bluetooth/bluetooth_adapter_winrt.h index 9474428..23db6f8 100644 --- a/device/bluetooth/bluetooth_adapter_winrt.h +++ b/device/bluetooth/bluetooth_adapter_winrt.h
@@ -212,6 +212,7 @@ void RemoveAdvertisementReceivedHandler(); bool is_initialized_ = false; + bool radio_access_allowed_ = false; std::string address_; std::string name_; std::unique_ptr<base::ScopedClosureRunner> on_init_;
diff --git a/device/bluetooth/bluetooth_strings.grd b/device/bluetooth/bluetooth_strings.grd index b795cac..c237ca8 100644 --- a/device/bluetooth/bluetooth_strings.grd +++ b/device/bluetooth/bluetooth_strings.grd
@@ -36,6 +36,7 @@ <output filename="bluetooth_strings_sq.pak" type="data_package" lang="sq" /> <output filename="bluetooth_strings_ur.pak" type="data_package" lang="ur" /> <output filename="bluetooth_strings_uz.pak" type="data_package" lang="uz" /> + <output filename="bluetooth_strings_zh-HK.pak" type="data_package" lang="zh-HK" /> <output filename="bluetooth_strings_zu.pak" type="data_package" lang="zu" /> </if> <output filename="bluetooth_strings_am.pak" type="data_package" lang="am" />
diff --git a/device/bluetooth/test/bluetooth_test_win.cc b/device/bluetooth/test/bluetooth_test_win.cc index 5b95924..e92cd01 100644 --- a/device/bluetooth/test/bluetooth_test_win.cc +++ b/device/bluetooth/test/bluetooth_test_win.cc
@@ -5,6 +5,7 @@ #include "device/bluetooth/test/bluetooth_test_win.h" #include <windows.devices.bluetooth.h> +#include <windows.devices.radios.h> #include <wrl/client.h> #include <wrl/implements.h> @@ -74,20 +75,21 @@ namespace { +using ABI::Windows::Devices::Bluetooth::IBluetoothAdapter; +using ABI::Windows::Devices::Bluetooth::IBluetoothAdapterStatics; +using ABI::Windows::Devices::Bluetooth::IBluetoothLEDevice; +using ABI::Windows::Devices::Bluetooth::IBluetoothLEDeviceStatics; using ABI::Windows::Devices::Bluetooth::Advertisement:: IBluetoothLEAdvertisement; using ABI::Windows::Devices::Bluetooth::Advertisement:: IBluetoothLEAdvertisementPublisherFactory; using ABI::Windows::Devices::Bluetooth::Advertisement:: - IBluetoothLEManufacturerDataFactory; -using ABI::Windows::Devices::Bluetooth::Advertisement:: IBluetoothLEAdvertisementWatcher; -using ABI::Windows::Devices::Bluetooth::IBluetoothAdapter; -using ABI::Windows::Devices::Bluetooth::IBluetoothAdapterStatics; -using ABI::Windows::Devices::Bluetooth::IBluetoothLEDevice; -using ABI::Windows::Devices::Bluetooth::IBluetoothLEDeviceStatics; +using ABI::Windows::Devices::Bluetooth::Advertisement:: + IBluetoothLEManufacturerDataFactory; using ABI::Windows::Devices::Enumeration::IDeviceInformation; using ABI::Windows::Devices::Enumeration::IDeviceInformationStatics; +using ABI::Windows::Devices::Radios::IRadioStatics; using Microsoft::WRL::ComPtr; using Microsoft::WRL::Make; @@ -143,6 +145,7 @@ public: TestBluetoothAdapterWinrt(ComPtr<IBluetoothAdapter> adapter, ComPtr<IDeviceInformation> device_information, + ComPtr<IRadioStatics> radio_statics, InitCallback init_cb, BluetoothTestWinrt* bluetooth_test_winrt) : adapter_(std::move(adapter)), @@ -156,7 +159,8 @@ Make<FakeDeviceInformationStaticsWinrt>(device_information_) .CopyTo((IDeviceInformationStatics**)&device_information_statics); InitForTests(std::move(init_cb), std::move(bluetooth_adapter_statics), - std::move(device_information_statics), nullptr); + std::move(device_information_statics), + std::move(radio_statics)); } FakeBluetoothLEAdvertisementWatcherWinrt* watcher() { return watcher_.Get(); } @@ -289,7 +293,7 @@ } void BluetoothTestWin::StartLowEnergyDiscoverySession() { - __super ::StartLowEnergyDiscoverySession(); + __super::StartLowEnergyDiscoverySession(); FinishPendingTasks(); } @@ -709,7 +713,8 @@ base::RunLoop run_loop; adapter_ = base::MakeRefCounted<TestBluetoothAdapterWinrt>( - nullptr, nullptr, run_loop.QuitClosure(), this); + /*adapter=*/nullptr, /*device_information=*/nullptr, + Make<FakeRadioStaticsWinrt>(), run_loop.QuitClosure(), this); run_loop.Run(); } @@ -724,16 +729,31 @@ Make<FakeBluetoothAdapterWinrt>(kTestAdapterAddress, Make<FakeRadioWinrt>()), Make<FakeDeviceInformationWinrt>(kTestAdapterName), - run_loop.QuitClosure(), this); + Make<FakeRadioStaticsWinrt>(), run_loop.QuitClosure(), this); run_loop.Run(); } void BluetoothTestWinrt::InitFakeAdapterWithoutRadio() { base::RunLoop run_loop; adapter_ = base::MakeRefCounted<TestBluetoothAdapterWinrt>( - Make<FakeBluetoothAdapterWinrt>(kTestAdapterAddress, nullptr /* radio */), + Make<FakeBluetoothAdapterWinrt>(kTestAdapterAddress, /*radio=*/nullptr), Make<FakeDeviceInformationWinrt>(kTestAdapterName), - run_loop.QuitClosure(), this); + Make<FakeRadioStaticsWinrt>(), run_loop.QuitClosure(), this); + run_loop.Run(); +} + +void BluetoothTestWinrt::InitFakeAdapterWithRadioAccessDenied() { + // Simulate "allow apps to control radio access" toggled off in + // Windows 10 Privacy settings. + base::RunLoop run_loop; + auto radio_statics = Make<FakeRadioStaticsWinrt>(); + radio_statics->SimulateRequestAccessAsyncError( + ABI::Windows::Devices::Radios::RadioAccessStatus_DeniedByUser); + adapter_ = base::MakeRefCounted<TestBluetoothAdapterWinrt>( + Make<FakeBluetoothAdapterWinrt>(kTestAdapterAddress, + Make<FakeRadioWinrt>()), + Make<FakeDeviceInformationWinrt>(kTestAdapterName), + std::move(radio_statics), run_loop.QuitClosure(), this); run_loop.Run(); }
diff --git a/device/bluetooth/test/bluetooth_test_win.h b/device/bluetooth/test/bluetooth_test_win.h index 19d2e15..68302b6d37 100644 --- a/device/bluetooth/test/bluetooth_test_win.h +++ b/device/bluetooth/test/bluetooth_test_win.h
@@ -119,6 +119,10 @@ BluetoothTestWinrt(); ~BluetoothTestWinrt() override; + // Simulate a fake adapter whose power status cannot be + // controlled because of a Windows Privacy setting. + void InitFakeAdapterWithRadioAccessDenied(); + // BluetoothTestBase: bool PlatformSupportsLowEnergy() override; void InitWithDefaultAdapter() override;
diff --git a/device/bluetooth/test/fake_radio_winrt.cc b/device/bluetooth/test/fake_radio_winrt.cc index 8be0b96..2319e5f 100644 --- a/device/bluetooth/test/fake_radio_winrt.cc +++ b/device/bluetooth/test/fake_radio_winrt.cc
@@ -122,12 +122,16 @@ return E_NOTIMPL; } +void FakeRadioStaticsWinrt::SimulateRequestAccessAsyncError( + ABI::Windows::Devices::Radios::RadioAccessStatus status) { + access_status_ = status; +} + HRESULT FakeRadioStaticsWinrt::RequestAccessAsync( IAsyncOperation<RadioAccessStatus>** operation) { auto async_op = Make<base::win::AsyncOperation<RadioAccessStatus>>(); base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::BindOnce(async_op->callback(), RadioAccessStatus_Allowed)); + FROM_HERE, base::BindOnce(async_op->callback(), access_status_)); *operation = async_op.Detach(); return S_OK; }
diff --git a/device/bluetooth/test/fake_radio_winrt.h b/device/bluetooth/test/fake_radio_winrt.h index 68851d62..310357b 100644 --- a/device/bluetooth/test/fake_radio_winrt.h +++ b/device/bluetooth/test/fake_radio_winrt.h
@@ -78,6 +78,9 @@ FakeRadioStaticsWinrt(); ~FakeRadioStaticsWinrt() override; + void SimulateRequestAccessAsyncError( + ABI::Windows::Devices::Radios::RadioAccessStatus status); + // IRadioStatics: IFACEMETHODIMP GetRadiosAsync( ABI::Windows::Foundation::IAsyncOperation< @@ -94,6 +97,9 @@ override; private: + ABI::Windows::Devices::Radios::RadioAccessStatus access_status_ = + ABI::Windows::Devices::Radios::RadioAccessStatus_Allowed; + DISALLOW_COPY_AND_ASSIGN(FakeRadioStaticsWinrt); };
diff --git a/device/fido/fido_strings.grd b/device/fido/fido_strings.grd index 672ef90..b479fb4 100644 --- a/device/fido/fido_strings.grd +++ b/device/fido/fido_strings.grd
@@ -36,6 +36,7 @@ <output filename="fido_strings_sq.pak" type="data_package" lang="sq" /> <output filename="fido_strings_ur.pak" type="data_package" lang="ur" /> <output filename="fido_strings_uz.pak" type="data_package" lang="uz" /> + <output filename="fido_strings_zh-HK.pak" type="data_package" lang="zh-HK" /> <output filename="fido_strings_zu.pak" type="data_package" lang="zu" /> </if> <output filename="fido_strings_am.pak" type="data_package" lang="am" />
diff --git a/device/gamepad/BUILD.gn b/device/gamepad/BUILD.gn index 405dbab9..6a5d7083 100644 --- a/device/gamepad/BUILD.gn +++ b/device/gamepad/BUILD.gn
@@ -107,7 +107,8 @@ defines = [ "DEVICE_GAMEPAD_IMPLEMENTATION" ] if (is_win) { - cflags = [ "/wd4267" ] # conversion from 'size_t' (64 bit) to 'type'(32 bit). + cflags = + [ "/wd4267" ] # conversion from 'size_t' (64 bit) to 'type'(32 bit). } if (is_linux) {
diff --git a/device/vr/openxr/openxr_api_wrapper.cc b/device/vr/openxr/openxr_api_wrapper.cc index 8da1850..cc2a9abf9 100644 --- a/device/vr/openxr/openxr_api_wrapper.cc +++ b/device/vr/openxr/openxr_api_wrapper.cc
@@ -235,6 +235,14 @@ return XR_SUCCESS; } +bool OpenXrApiWrapper::UpdateAndGetSessionEnded() { + // Ensure we have the latest state from the OpenXR runtime. + if (XR_FAILED(ProcessEvents())) { + DCHECK(session_ended_); + } + return session_ended_; +} + // Callers of this function must check the XrResult return value and destroy // this OpenXrApiWrapper object on failure to clean up any intermediate // objects that may have been created before the failure. @@ -384,7 +392,7 @@ DCHECK(HasSession()); DCHECK(HasColorSwapChain()); - RETURN_IF_XR_FAILED(ProcessEvents()); + DCHECK(!session_ended_); XrFrameWaitInfo wait_frame_info = {XR_TYPE_FRAME_WAIT_INFO}; XrFrameState frame_state = {XR_TYPE_FRAME_STATE};
diff --git a/device/vr/openxr/openxr_api_wrapper.h b/device/vr/openxr/openxr_api_wrapper.h index ff67b97b..c64177a 100644 --- a/device/vr/openxr/openxr_api_wrapper.h +++ b/device/vr/openxr/openxr_api_wrapper.h
@@ -44,7 +44,7 @@ static VRTestHook* GetTestHook(); - bool session_ended() const { return session_ended_; } + bool UpdateAndGetSessionEnded(); XrResult InitSession(const Microsoft::WRL::ComPtr<ID3D11Device>& d3d_device, std::unique_ptr<OpenXRInputHelper>* input_helper);
diff --git a/device/vr/openxr/openxr_render_loop.cc b/device/vr/openxr/openxr_render_loop.cc index 6681351..9940ca5 100644 --- a/device/vr/openxr/openxr_render_loop.cc +++ b/device/vr/openxr/openxr_render_loop.cc
@@ -135,7 +135,7 @@ } bool OpenXrRenderLoop::HasSessionEnded() { - return openxr_->session_ended(); + return openxr_->UpdateAndGetSessionEnded(); } bool OpenXrRenderLoop::SubmitCompositedFrame() {
diff --git a/extensions/browser/api/networking_private/networking_private_service_client.cc b/extensions/browser/api/networking_private/networking_private_service_client.cc index 18b69cb..b72359e 100644 --- a/extensions/browser/api/networking_private/networking_private_service_client.cc +++ b/extensions/browser/api/networking_private/networking_private_service_client.cc
@@ -11,7 +11,7 @@ #include "base/bind.h" #include "base/memory/ptr_util.h" #include "base/sequenced_task_runner.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include "base/task/post_task.h" #include "base/threading/thread_task_runner_handle.h" #include "components/onc/onc_constants.h" @@ -35,10 +35,10 @@ // Ensure that all calls to WiFiService are called from the same task runner // since the implementations do not provide any thread safety gaurantees. -base::LazySequencedTaskRunner g_sequenced_task_runner = - LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER(base::TaskTraits( - {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_VISIBLE, - base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN})); +base::LazyThreadPoolSequencedTaskRunner g_sequenced_task_runner = + LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER( + base::TaskTraits({base::MayBlock(), base::TaskPriority::USER_VISIBLE, + base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN})); } // namespace
diff --git a/extensions/browser/extension_file_task_runner.cc b/extensions/browser/extension_file_task_runner.cc index 4cdb459..eb7f4f9 100644 --- a/extensions/browser/extension_file_task_runner.cc +++ b/extensions/browser/extension_file_task_runner.cc
@@ -5,7 +5,7 @@ #include "extensions/browser/extension_file_task_runner.h" #include "base/sequenced_task_runner.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include "base/task/task_traits.h" namespace extensions { @@ -18,10 +18,9 @@ // user action), and others are low priority (like garbage collection). Split // the difference and use USER_VISIBLE, which is the default priority and what a // task posted to a named thread (like the FILE thread) would receive. -base::LazySequencedTaskRunner g_task_runner = - LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER( - base::TaskTraits(base::ThreadPool(), - base::MayBlock(), +base::LazyThreadPoolSequencedTaskRunner g_task_runner = + LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER( + base::TaskTraits(base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN, base::TaskPriority::USER_VISIBLE));
diff --git a/extensions/common/api/automation.idl b/extensions/common/api/automation.idl index 9885180..a507dc87 100644 --- a/extensions/common/api/automation.idl +++ b/extensions/common/api/automation.idl
@@ -27,6 +27,7 @@ endOfTest, expandedChanged, focus, + focusAfterMenuClose, focusContext, hide, hitTestResult,
diff --git a/extensions/renderer/api/automation/automation_ax_tree_wrapper.cc b/extensions/renderer/api/automation/automation_ax_tree_wrapper.cc index 78d9b9a..f8759bc1 100644 --- a/extensions/renderer/api/automation/automation_ax_tree_wrapper.cc +++ b/extensions/renderer/api/automation/automation_ax_tree_wrapper.cc
@@ -46,6 +46,7 @@ case ax::mojom::Event::kExpandedChanged: return api::automation::EVENT_TYPE_EXPANDEDCHANGED; case ax::mojom::Event::kFocus: + case ax::mojom::Event::kFocusAfterMenuClose: case ax::mojom::Event::kFocusContext: return api::automation::EVENT_TYPE_NONE; case ax::mojom::Event::kHide: @@ -564,6 +565,7 @@ case api::automation::EVENT_TYPE_AUTOCORRECTIONOCCURED: case api::automation::EVENT_TYPE_CLICKED: case api::automation::EVENT_TYPE_ENDOFTEST: + case api::automation::EVENT_TYPE_FOCUSAFTERMENUCLOSE: case api::automation::EVENT_TYPE_FOCUSCONTEXT: case api::automation::EVENT_TYPE_HITTESTRESULT: case api::automation::EVENT_TYPE_HOVER:
diff --git a/fuchsia/cipd/BUILD.gn b/fuchsia/cipd/BUILD.gn index e1bb96e..22d7266 100644 --- a/fuchsia/cipd/BUILD.gn +++ b/fuchsia/cipd/BUILD.gn
@@ -6,6 +6,7 @@ assert(is_fuchsia) +import("//build/cipd/cipd.gni") import("//build/util/process_version.gni") # gn binary location. @@ -47,37 +48,20 @@ # Prepares a CIPD archive and generates a manifest file. # # Parameters: -# cipd_manifest_name: The filename to use for the generated CIPD YAML file. -# cipd_path: The path where the package will be located inside the CIPD -# repository. -# cipd_description: Sets the "description" field in CIPD metadata. +# package_definition_yaml: The filename to use for the generated CIPD YAML +# file. +# package: The path where the package will be located inside the CIPD +# repository. +# description: Sets the "description" field in CIPD metadata. # install_mode: String, should be either "symlink" or "copy". # deps: A list of targets to build prior to copying files. # sources: A list of files to copy into the staging root. template("cipd_archive") { forward_variables_from(invoker, [ - "cipd_manifest_name", - "cipd_path", - "cipd_description", - "install_mode", "deps", "sources", ]) - archive_staging_dir = "${target_gen_dir}/${target_name}" - if (!defined(invoker.install_mode)) { - install_mode = "symlink" - } - assert(install_mode == "copy" || install_mode == "symlink", - "\"install_mode\" arg should be either \"copy\" or \"symlink\".") - yaml_contents = [ - "package: ${cipd_path}", - "description: ${cipd_description}", - "root: \${outdir}/" + rebase_path(archive_staging_dir, root_build_dir), - "install_mode: ${install_mode}", - "data:", - " - file: LICENSE", - ] if (!defined(deps)) { deps = [] @@ -87,23 +71,27 @@ ":license", ] - foreach(source, sources) { - yaml_contents += [ " - file: " + get_path_info(source, "file") ] + if (!defined(sources)) { + sources = [] } - sources += get_target_outputs(":license") - write_file("${archive_staging_dir}/${cipd_manifest_name}", yaml_contents) - copy(target_name) { + cipd_package_definition(target_name) { testonly = true - outputs = [ "${archive_staging_dir}/{{source_file_part}}" ] + forward_variables_from(invoker, + [ + "description", + "install_mode", + "package", + "package_definition_yaml", + ]) } } cipd_archive("webrunner") { - cipd_manifest_name = "webrunner.yaml" - cipd_path = "chromium/fuchsia/webrunner-\${targetarch}" - cipd_description = "Prebuilt Chrome and Web Runner binaries for Fuchsia." + package_definition_yaml = "webrunner.yaml" + package = "chromium/fuchsia/webrunner-\${targetarch}" + description = "Prebuilt Chrome and Web Runner binaries for Fuchsia." deps = [ "//fuchsia/engine:web_engine", @@ -117,9 +105,9 @@ } cipd_archive("castrunner") { - cipd_manifest_name = "castrunner.yaml" - cipd_path = "chromium/fuchsia/castrunner-\${targetarch}" - cipd_description = "Prebuilt Cast application Runner binaries for Fuchsia." + package_definition_yaml = "castrunner.yaml" + package = "chromium/fuchsia/castrunner-\${targetarch}" + description = "Prebuilt Cast application Runner binaries for Fuchsia." deps = [ "//fuchsia/runners:cast_runner_pkg" ] @@ -127,9 +115,9 @@ } cipd_archive("http") { - cipd_manifest_name = "http.yaml" - cipd_path = "chromium/fuchsia/http-\${targetarch}" - cipd_description = "Prebuilt HTTP service binary for Fuchsia." + package_definition_yaml = "http.yaml" + package = "chromium/fuchsia/http-\${targetarch}" + description = "Prebuilt HTTP service binary for Fuchsia." deps = [ "//fuchsia/http:http_pkg" ] @@ -162,9 +150,9 @@ } cipd_archive("chromedriver") { - cipd_manifest_name = "chromedriver.yaml" - cipd_path = "chromium/fuchsia/chromedriver/\${os}-\${arch}" - cipd_description = "Prebuilt Chromedriver binary for Fuchsia host." + package_definition_yaml = "chromedriver.yaml" + package = "chromium/fuchsia/chromedriver/\${os}-\${arch}" + description = "Prebuilt Chromedriver binary for Fuchsia host." install_mode = "copy" deps = [ ":strip_chromedriver_binary" ] @@ -173,9 +161,9 @@ cipd_archive("tests") { _manifest_path = "${target_gen_dir}/test_manifest.json" - cipd_manifest_name = "tests.yaml" - cipd_path = "chromium/fuchsia/tests-\${targetarch}" - cipd_description = "Prebuilt Chromium tests for Fuchsia." + package_definition_yaml = "tests.yaml" + package = "chromium/fuchsia/tests-\${targetarch}" + description = "Prebuilt Chromium tests for Fuchsia." deps = [ "//base:base_unittests_pkg", @@ -217,9 +205,9 @@ } cipd_archive("debug_symbols") { - cipd_manifest_name = "debug_symbols.yaml" - cipd_path = "chromium/fuchsia/debug-symbols-\${targetarch}" - cipd_description = "Debugging symbols for prebuilt binaries from Chromium." + package_definition_yaml = "debug_symbols.yaml" + package = "chromium/fuchsia/debug-symbols-\${targetarch}" + description = "Debugging symbols for prebuilt binaries from Chromium." _symbol_tarballs = [ "${root_gen_dir}/fuchsia/engine/web_engine/web_engine.symbols.tar.bz2", @@ -243,9 +231,9 @@ } cipd_archive("clear_key_cdm") { - cipd_manifest_name = "clear_key_cdm.yaml" - cipd_path = "chromium/fuchsia/libclearkeycdm-\${targetarch}" - cipd_description = "Prebuilt libclearkeycdm.so binary for Fuchsia." + package_definition_yaml = "clear_key_cdm.yaml" + package = "chromium/fuchsia/libclearkeycdm-\${targetarch}" + description = "Prebuilt libclearkeycdm.so binary for Fuchsia." deps = [ "//media/cdm/library_cdm/clear_key_cdm:clear_key_cdm" ]
diff --git a/fuchsia/engine/browser/accessibility_bridge_browsertest.cc b/fuchsia/engine/browser/accessibility_bridge_browsertest.cc index 75ca16f4c..dd70877e 100644 --- a/fuchsia/engine/browser/accessibility_bridge_browsertest.cc +++ b/fuchsia/engine/browser/accessibility_bridge_browsertest.cc
@@ -132,6 +132,13 @@ listener_->OnSemanticsModeChanged(is_enabled, []() {}); } + // Pumps the message loop until the RegisterViewForSemantics() is called. + void WaitUntilViewRegistered() { + base::RunLoop loop; + on_view_registered_ = loop.QuitClosure(); + loop.Run(); + } + // The value returned by hit testing is written to a class member. In the case // Run() times out, the function continues so we don't want to write to a // local variable. @@ -159,6 +166,7 @@ view_ref_ = std::move(view_ref); listener_ = listener.Bind(); semantic_tree_binding_.Bind(std::move(semantic_tree_request)); + std::move(on_view_registered_).Run(); } void NotImplemented_(const std::string& name) final { @@ -171,6 +179,7 @@ FakeSemanticTree semantic_tree_; fidl::Binding<SemanticTree> semantic_tree_binding_; base::Optional<uint32_t> hit_test_result_; + base::OnceClosure on_view_registered_; DISALLOW_COPY_AND_ASSIGN(FakeSemanticsManager); }; @@ -213,7 +222,9 @@ std::move(semantics_manager_ptr)); frame_ptr_->EnableHeadlessRendering(); - base::RunLoop().RunUntilIdle(); + semantics_manager_.WaitUntilViewRegistered(); + ASSERT_TRUE(semantics_manager_.is_view_registered()); + ASSERT_TRUE(semantics_manager_.is_listener_valid()); } protected: @@ -229,16 +240,15 @@ // Test registration to the SemanticsManager and accessibility mode on // WebContents is set correctly. IN_PROC_BROWSER_TEST_F(AccessibilityBridgeTest, RegisterViewRef) { - // Check that setup is successful. - EXPECT_TRUE(semantics_manager_.is_view_registered()); - EXPECT_TRUE(semantics_manager_.is_listener_valid()); - // Change the accessibility mode on the Fuchsia side and check that it is // propagated correctly. - EXPECT_FALSE(frame_impl_->web_contents_for_test() + ASSERT_FALSE(frame_impl_->web_contents_for_test() ->IsWebContentsOnlyAccessibilityModeForTesting()); semantics_manager_.SetSemanticsModeEnabled(true); + + // Spin the loop to let the FrameImpl receive the mode-change. base::RunLoop().RunUntilIdle(); + EXPECT_TRUE(frame_impl_->web_contents_for_test() ->IsWebContentsOnlyAccessibilityModeForTesting()); } @@ -250,7 +260,7 @@ semantics_manager_.SetSemanticsModeEnabled(true); GURL page_url1(embedded_test_server()->GetURL(kPage1Path)); - EXPECT_TRUE(cr_fuchsia::LoadUrlAndExpectResponse( + ASSERT_TRUE(cr_fuchsia::LoadUrlAndExpectResponse( controller.get(), fuchsia::web::LoadUrlParams(), page_url1.spec())); navigation_listener_.RunUntilUrlAndTitleEquals(page_url1, kPage1Title); @@ -276,7 +286,7 @@ semantics_manager_.SetSemanticsModeEnabled(true); GURL page_url2(embedded_test_server()->GetURL(kPage2Path)); - EXPECT_TRUE(cr_fuchsia::LoadUrlAndExpectResponse( + ASSERT_TRUE(cr_fuchsia::LoadUrlAndExpectResponse( controller.get(), fuchsia::web::LoadUrlParams(), page_url2.spec())); navigation_listener_.RunUntilUrlAndTitleEquals(page_url2, kPage2Title); @@ -294,7 +304,7 @@ semantics_manager_.SetSemanticsModeEnabled(true); GURL page_url1(embedded_test_server()->GetURL(kPage1Path)); - EXPECT_TRUE(cr_fuchsia::LoadUrlAndExpectResponse( + ASSERT_TRUE(cr_fuchsia::LoadUrlAndExpectResponse( controller.get(), fuchsia::web::LoadUrlParams(), page_url1.spec())); navigation_listener_.RunUntilUrlAndTitleEquals(page_url1, kPage1Title); @@ -307,7 +317,7 @@ semantics_manager_.semantic_tree()->HasNodeWithLabel(kParagraphName)); GURL page_url2(embedded_test_server()->GetURL(kPage2Path)); - EXPECT_TRUE(cr_fuchsia::LoadUrlAndExpectResponse( + ASSERT_TRUE(cr_fuchsia::LoadUrlAndExpectResponse( controller.get(), fuchsia::web::LoadUrlParams(), page_url2.spec())); semantics_manager_.semantic_tree()->RunUntilNodeCountAtLeast(kPage2NodeCount); @@ -330,7 +340,7 @@ semantics_manager_.SetSemanticsModeEnabled(true); GURL page_url1(embedded_test_server()->GetURL(kPage1Path)); - EXPECT_TRUE(cr_fuchsia::LoadUrlAndExpectResponse( + ASSERT_TRUE(cr_fuchsia::LoadUrlAndExpectResponse( controller.get(), fuchsia::web::LoadUrlParams(), page_url1.spec())); navigation_listener_.RunUntilUrlAndTitleEquals(page_url1, kPage1Title); semantics_manager_.semantic_tree()->RunUntilNodeCountAtLeast(kPage1NodeCount);
diff --git a/gin/BUILD.gn b/gin/BUILD.gn index e49ca6c2..9bd9519 100644 --- a/gin/BUILD.gn +++ b/gin/BUILD.gn
@@ -71,9 +71,7 @@ ] if (v8_use_external_startup_data) { - data = [ - "$root_out_dir/snapshot_blob.bin", - ] + data = [ "$root_out_dir/snapshot_blob.bin" ] } defines = [ "GIN_IMPLEMENTATION" ] @@ -82,9 +80,7 @@ "//base", "//v8", ] - deps = [ - "//base/third_party/dynamic_annotations", - ] + deps = [ "//base/third_party/dynamic_annotations" ] if (is_mac) { libs = [ "CoreFoundation.framework" ] @@ -94,9 +90,7 @@ } executable("gin_shell") { - sources = [ - "shell/gin_main.cc", - ] + sources = [ "shell/gin_main.cc" ] deps = [ ":gin", @@ -157,9 +151,7 @@ "//v8:external_startup_data", ] - data_deps = [ - "//tools/v8_context_snapshot:v8_context_snapshot", - ] + data_deps = [ "//tools/v8_context_snapshot:v8_context_snapshot" ] data = [] # gin_shell is not an Android app.
diff --git a/google_update/BUILD.gn b/google_update/BUILD.gn index 6c8539a..55d35df 100644 --- a/google_update/BUILD.gn +++ b/google_update/BUILD.gn
@@ -5,7 +5,5 @@ import("//build/toolchain/win/midl.gni") midl("google_update") { - sources = [ - "google_update_idl.idl", - ] + sources = [ "google_update_idl.idl" ] }
diff --git a/gpu/BUILD.gn b/gpu/BUILD.gn index acc467ab..1d69c0f 100644 --- a/gpu/BUILD.gn +++ b/gpu/BUILD.gn
@@ -70,15 +70,11 @@ } component("raster") { - public_deps = [ - "//gpu/command_buffer/client:raster_sources", - ] + public_deps = [ "//gpu/command_buffer/client:raster_sources" ] } component("webgpu") { - public_deps = [ - "//gpu/command_buffer/client:webgpu_sources", - ] + public_deps = [ "//gpu/command_buffer/client:webgpu_sources" ] } if (!use_static_angle) { @@ -221,14 +217,10 @@ if (!is_android && !is_fuchsia && !is_chromeos) { proto_library("gl_lpm_fuzzer_proto") { - sources = [ - "command_buffer/tests/lpm/gl_lpm_fuzzer.proto", - ] + sources = [ "command_buffer/tests/lpm/gl_lpm_fuzzer.proto" ] use_protobuf_full = true - deps = [ - "//third_party/protobuf:protobuf_full", - ] + deps = [ "//third_party/protobuf:protobuf_full" ] } static_library("gl_lpm_shader_to_string") { @@ -244,9 +236,7 @@ } test("gl_lpm_shader_to_string_unittest") { - sources = [ - "command_buffer/tests/lpm/gl_lpm_shader_to_string_unittest.cc", - ] + sources = [ "command_buffer/tests/lpm/gl_lpm_shader_to_string_unittest.cc" ] deps = [ ":gl_lpm_shader_to_string", @@ -430,9 +420,7 @@ ] } - data_deps = [ - "//testing/buildbot/filters:gl_tests_filters", - ] + data_deps = [ "//testing/buildbot/filters:gl_tests_filters" ] } test("gpu_unittests") { @@ -752,9 +740,7 @@ } fuzzer_test("gpu_fuzzer") { - sources = [ - "command_buffer/tests/fuzzer_main.cc", - ] + sources = [ "command_buffer/tests/fuzzer_main.cc" ] deps = [ ":gles2", @@ -772,9 +758,7 @@ if (is_linux) { fuzzer_test("gpu_angle_fuzzer") { - sources = [ - "command_buffer/tests/fuzzer_main.cc", - ] + sources = [ "command_buffer/tests/fuzzer_main.cc" ] defines = [ "GPU_FUZZER_USE_ANGLE" ] @@ -792,9 +776,7 @@ } fuzzer_test("gpu_angle_passthrough_fuzzer") { - sources = [ - "command_buffer/tests/fuzzer_main.cc", - ] + sources = [ "command_buffer/tests/fuzzer_main.cc" ] defines = [ "GPU_FUZZER_USE_ANGLE", @@ -815,9 +797,7 @@ } fuzzer_test("gpu_swiftshader_fuzzer") { - sources = [ - "command_buffer/tests/fuzzer_main.cc", - ] + sources = [ "command_buffer/tests/fuzzer_main.cc" ] defines = [ "GPU_FUZZER_USE_SWIFTSHADER" ] @@ -835,9 +815,7 @@ } fuzzer_test("gpu_raster_fuzzer") { - sources = [ - "command_buffer/tests/fuzzer_main.cc", - ] + sources = [ "command_buffer/tests/fuzzer_main.cc" ] defines = [ "GPU_FUZZER_USE_RASTER_DECODER" ] @@ -855,9 +833,7 @@ } fuzzer_test("gpu_raster_passthrough_fuzzer") { - sources = [ - "command_buffer/tests/fuzzer_main.cc", - ] + sources = [ "command_buffer/tests/fuzzer_main.cc" ] defines = [ "GPU_FUZZER_USE_ANGLE", @@ -879,9 +855,7 @@ } fuzzer_test("gpu_raster_swiftshader_fuzzer") { - sources = [ - "command_buffer/tests/fuzzer_main.cc", - ] + sources = [ "command_buffer/tests/fuzzer_main.cc" ] defines = [ "GPU_FUZZER_USE_RASTER_DECODER", @@ -902,9 +876,7 @@ } fuzzer_test("gpu_raster_angle_fuzzer") { - sources = [ - "command_buffer/tests/fuzzer_main.cc", - ] + sources = [ "command_buffer/tests/fuzzer_main.cc" ] defines = [ "GPU_FUZZER_USE_RASTER_DECODER",
diff --git a/gpu/GLES2/extensions/CHROMIUM/EGL_CHROMIUM_sync_control.txt b/gpu/GLES2/extensions/CHROMIUM/EGL_CHROMIUM_sync_control.txt index 91a3019..14f4e56 100644 --- a/gpu/GLES2/extensions/CHROMIUM/EGL_CHROMIUM_sync_control.txt +++ b/gpu/GLES2/extensions/CHROMIUM/EGL_CHROMIUM_sync_control.txt
@@ -16,7 +16,7 @@ Version - Version 2, 2017-05-05 + Version 3, 2020-01-23 Based on GLX_OML_sync_control Revision 6.0 @@ -70,6 +70,11 @@ int64_t* msc, int64_t* sbc) + Bool eglGetMscRateCHROMIUM(EGLDisplay* dpy, + EGLSurface surface, + int32_t* numerator, + int32_t* denominator) + New Tokens @@ -107,16 +112,23 @@ is located. If the surface spans multiple monitors, the monitor used to determine MSC is the one with the biggest coverage in pixels. - The function eglGetSyncValuesCHROMIUM will return TRUE if the function - completed successfully, FALSE otherwise. + eglGetMscRateCHROMIUM returns the rate at which the MSC will be incremented + for the display associated with <hdc>. The rate is expressed in Hertz + as <numerator> / <denominator>. If the MSC rate in Hertz is an + integer, then <denominator> will be 1 and <numerator> will be + the MSC rate. + + The functions eglGetSyncValuesCHROMIUM, and eglGetMscRateCHROMIUM will + return TRUE if the function completed successfully, FALSE otherwise. Each time eglSwapBuffer succeeds, the SBC will be increased within a finite time period. Errors - eglGetSyncValuesCHROMIUM will return FALSE if there is no current - EGLContext. + The functions eglGetSyncValuesCHROMIUM, and eglGetMscRateCHROMIUM will + return FALSE if there is no current EGLContext. + New State @@ -132,6 +144,10 @@ Revision History + Version 3, 2020-01-23 (Jonah Ryan-Davis) + - Add the function eglGetMscRateCHROMIUM based on glXGetMscRateOML from + GLX_OML_sync_control revision 6.0. + Version 2, 2015-05-05 (Chad Versace) - Rename to EGL_CHROMIUM_sync_control from EGL_CHROMIUM_get_sync_values. EGL_CHROMIUM_sync_control is the de facto extension name because all
diff --git a/gpu/gles2_conform_support/BUILD.gn b/gpu/gles2_conform_support/BUILD.gn index 24a0bd3..c3bd1393 100644 --- a/gpu/gles2_conform_support/BUILD.gn +++ b/gpu/gles2_conform_support/BUILD.gn
@@ -82,18 +82,14 @@ } action("generate_gles2_conform_tests") { script = "generate_gles2_conform_tests.py" - outputs = [ - "$target_gen_dir/gles2_conform_test_autogen.cc", - ] + outputs = [ "$target_gen_dir/gles2_conform_test_autogen.cc" ] args = [ rebase_path("$target_gen_dir") ] } executable("gles2_conform_test_windowless") { testonly = true # Include a dummy c++ file to force linking of libstdc++. - sources = [ - "dummy.cc", - ] + sources = [ "dummy.cc" ] gtf_source = "//third_party/gles2_conform/GTF_ES/glsl/GTF/Source" sources += [ @@ -476,14 +472,10 @@ "//testing/gtest", ] - data = [ - "gles2_conform_test_expectations.txt", - ] + data = [ "gles2_conform_test_expectations.txt" ] if (internal_gles2_conform_tests) { - data_deps = [ - ":gles2_conform_test_windowless", - ] + data_deps = [ ":gles2_conform_test_windowless" ] deps += [ ":generate_gles2_conform_tests" ] sources += [ "$target_gen_dir/gles2_conform_test_autogen.cc" ] data += [ "//third_party/gles2_conform/GTF_ES/" ]
diff --git a/gpu/ipc/service/BUILD.gn b/gpu/ipc/service/BUILD.gn index 7a8ba249..be60300 100644 --- a/gpu/ipc/service/BUILD.gn +++ b/gpu/ipc/service/BUILD.gn
@@ -148,9 +148,7 @@ source_set("test_support") { testonly = true - sources = [ - "gpu_memory_buffer_factory_test_template.h", - ] + sources = [ "gpu_memory_buffer_factory_test_template.h" ] public_deps = [ ":service", "//testing/gtest:gtest",
diff --git a/gpu/khronos_glcts_support/BUILD.gn b/gpu/khronos_glcts_support/BUILD.gn index ace65c5..067641d0 100644 --- a/gpu/khronos_glcts_support/BUILD.gn +++ b/gpu/khronos_glcts_support/BUILD.gn
@@ -13,12 +13,8 @@ [ "//third_party/khronos_glcts/GTF_ES/glsl/GTF/mustpass_es20.run" ] copy("glcts_resources") { - sources = [ - "//third_party/khronos_glcts/cts/data", - ] - outputs = [ - "$root_out_dir/khronos_glcts_data/gl_cts/{{source_file_part}}", - ] + sources = [ "//third_party/khronos_glcts/cts/data" ] + outputs = [ "$root_out_dir/khronos_glcts_data/gl_cts/{{source_file_part}}" ] } copy("glcts_gtf_resources") { @@ -29,17 +25,14 @@ "//third_party/khronos_glcts/GTF_ES/glsl/GTF/GL2Tests", "//third_party/khronos_glcts/GTF_ES/glsl/GTF/GLCoverage", ] + glcts_gtf_runfiles - outputs = [ - "$root_out_dir/khronos_glcts_data/gl_cts/GTF/{{source_file_part}}", - ] + outputs = + [ "$root_out_dir/khronos_glcts_data/gl_cts/GTF/{{source_file_part}}" ] } action("generate_khronos_glcts_tests") { script = "generate_khronos_glcts_tests.py" sources = [ "khronos_glcts_test.h" ] + glcts_gtf_runfiles - outputs = [ - "$target_gen_dir/khronos_glcts_test_autogen.cc", - ] + outputs = [ "$target_gen_dir/khronos_glcts_test_autogen.cc" ] args = [ "--outdir=" + rebase_path("$target_gen_dir") ] + glcts_gtf_runfiles } @@ -118,9 +111,7 @@ "//third_party/khronos_glcts/framework/delibs/depool/dePoolTest.h", ] - deps = [ - ":debase", - ] + deps = [ ":debase" ] configs += [ ":defaults_config" ] configs -= [ "//build/config/compiler:chromium_code" ] @@ -146,9 +137,7 @@ "//third_party/khronos_glcts/framework/delibs/dethread/deThreadTest.h", ] - deps = [ - ":debase", - ] + deps = [ ":debase" ] configs += [ ":defaults_config" ] configs -= [ "//build/config/compiler:chromium_code" ] @@ -390,11 +379,10 @@ "//third_party/libpng:libpng", ] - public_deps = [ - ":qphelper", - ] + public_deps = [ ":qphelper" ] - include_dirs = [ "//third_party/khronos_glcts/framework/delibs/libpng" ] #png.hpp + include_dirs = + [ "//third_party/khronos_glcts/framework/delibs/libpng" ] # png.hpp configs += [ ":defaults_config" ] configs -= [ "//build/config/compiler:chromium_code" ] @@ -485,9 +473,7 @@ "//third_party/khronos_glcts/framework/opengl/gluVarTypeUtil.hpp", ] - public_deps = [ - ":glwrapper", - ] + public_deps = [ ":glwrapper" ] deps = [ ":delibs", @@ -884,9 +870,7 @@ "//third_party/khronos_glcts/cts/gles2/es2cTestPackage.hpp", ] - public_deps = [ - ":glcts_common", - ] + public_deps = [ ":glcts_common" ] deps = [ ":delibs", @@ -907,13 +891,9 @@ } source_set("tcutil_platform_windowless") { - sources = [ - "native/egl_native_windowless.cc", - ] + sources = [ "native/egl_native_windowless.cc" ] - deps = [ - ":khronos_glcts_framework", - ] + deps = [ ":khronos_glcts_framework" ] configs -= [ "//build/config/compiler:no_rtti" ] configs += [ "//build/config/compiler:rtti" ] @@ -956,9 +936,7 @@ "//testing/gtest", ] - data = [ - "khronos_glcts_test_expectations.txt", - ] + data = [ "khronos_glcts_test_expectations.txt" ] if (internal_khronos_glcts_tests) { sources += [ "$target_gen_dir/khronos_glcts_test_autogen.cc" ]
diff --git a/ios/chrome/app/main_controller.mm b/ios/chrome/app/main_controller.mm index c00f419..1f260ad1 100644 --- a/ios/chrome/app/main_controller.mm +++ b/ios/chrome/app/main_controller.mm
@@ -569,7 +569,7 @@ BOOL postCrashLaunch = [self mustShowRestoreInfobar]; if (postCrashLaunch) { self.restoreHelper = - [[CrashRestoreHelper alloc] initWithBrowserState:chromeBrowserState]; + [[CrashRestoreHelper alloc] initWithBrowser:self.mainBrowser]; [self.restoreHelper moveAsideSessionInformation]; } @@ -668,11 +668,7 @@ // The startup parameters may create new tabs or navigations. If the restore // infobar is displayed now, it may be dismissed immediately and the user // will never be able to restore the session. - TabModel* currentTabModel = [self currentTabModel]; - [self.restoreHelper - showRestoreIfNeededUsingWebState:currentTabModel.webStateList - ->GetActiveWebState() - sessionRestorer:currentTabModel]; + [self.restoreHelper showRestoreIfNeeded]; self.restoreHelper = nil; }
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb index 107ae21..11e62a5 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -192,7 +192,7 @@ <translation id="3474649192738347024">تم ملء النماذج.</translation> <translation id="3478058380795961209">شهر انتهاء الصلاحية</translation> <translation id="3482959374254649722">جارٍ مزامنة علامات التبويب الخاصة بك ...</translation> -<translation id="3484946776651937681">فتح في التنزيلات</translation> +<translation id="3484946776651937681">فتح في الملف الخاصّ بعمليات التنزيل</translation> <translation id="3493531032208478708"><ph name="BEGIN_LINK" />مزيد من المعلومات<ph name="END_LINK" /> حول المحتوى المقترح</translation> <translation id="3494788280727468875">تأكيد محو بيانات التصفّح</translation> <translation id="35083190962747987">فتح عنوان ${url}</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_strings_bs.xtb index ad016ee..3b34039f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bs.xtb
@@ -538,7 +538,7 @@ <translation id="8319076807703933069">Novo pretraživanje</translation> <translation id="8323906514956095947">Dodirnite i zadržite za više opcija za karticu</translation> <translation id="8328777765163860529">Zatvori sve</translation> -<translation id="8386068868580335421">Ponovo postavi</translation> +<translation id="8386068868580335421">Vrati na zadano</translation> <translation id="8407669440184693619">Nije pronađena nijedna lozinka za ovu web lokaciju</translation> <translation id="842017693807136194">Prijavljeni ste sa</translation> <translation id="8428045167754449968">Grad/mjesto</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb index 081a367..04ae77d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
@@ -192,6 +192,7 @@ <translation id="3474649192738347024">Formulaires remplis.</translation> <translation id="3478058380795961209">Mois d'expir.</translation> <translation id="3482959374254649722">Synchronisation de vos onglets en cours…</translation> +<translation id="3484946776651937681">Ouvrir dans le dossier Téléchargement</translation> <translation id="3493531032208478708"><ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /> sur le contenu suggéré</translation> <translation id="3494788280727468875">Confirmer l'effacement des données de navigation</translation> <translation id="35083190962747987">Ouvrir ${url}</translation> @@ -537,6 +538,7 @@ <translation id="8319076807703933069">Nouvelle recherche</translation> <translation id="8323906514956095947">Maintenez le doigt sur le bouton pour afficher plus d'options d'onglets</translation> <translation id="8328777765163860529">Tout fermer</translation> +<translation id="8386068868580335421">Réinitialiser</translation> <translation id="8407669440184693619">Aucun mot de passé trouvé pour ce site</translation> <translation id="842017693807136194">Connecté avec</translation> <translation id="8428045167754449968">Ville</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb index aa27ebe..0d89727 100644 --- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -192,6 +192,7 @@ <translation id="3474649192738347024">ફોર્મ્સ ભર્યા.</translation> <translation id="3478058380795961209">સમય સમાપ્તિ મહિનો</translation> <translation id="3482959374254649722">તમારા ટેબ્સને સમન્વયિત કરી રહ્યું છે...</translation> +<translation id="3484946776651937681">ડાઉનલોડ ફોલ્ડરમાં ખોલો</translation> <translation id="3493531032208478708">સૂચવેલ કન્ટેન્ટ વિશે <ph name="BEGIN_LINK" />વધુ જાણો<ph name="END_LINK" /></translation> <translation id="3494788280727468875">બ્રાઉઝિંગ ડેટા સાફ કરવાની પુષ્ટિ કરો</translation> <translation id="35083190962747987">${url} ખોલો</translation> @@ -537,6 +538,7 @@ <translation id="8319076807703933069">નવી શોધ</translation> <translation id="8323906514956095947">ટૅબના વધુ વિકલ્પો માટે, ટચ કરીને થોડીવાર દબાવી રાખો</translation> <translation id="8328777765163860529">બધું બંધ કરો</translation> +<translation id="8386068868580335421">રીસેટ કરો</translation> <translation id="8407669440184693619">આ સાઇટ માટે કોઈ પાસવર્ડ મળ્યાં નથી</translation> <translation id="842017693807136194">ની સાથે સાઇન ઇન કરેલ</translation> <translation id="8428045167754449968">શહેર/નગર</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_strings_ml.xtb index 722b7cbe..2a9c8693 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ml.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
@@ -192,6 +192,7 @@ <translation id="3474649192738347024">ഫോമുകൾ പൂരിപ്പിച്ചു.</translation> <translation id="3478058380795961209">കാലഹരണപ്പെടുന്ന മാസം</translation> <translation id="3482959374254649722">നിങ്ങളുടെ ടാബുകൾ സമന്വയിപ്പിക്കുന്നു...</translation> +<translation id="3484946776651937681">ഡൗൺലോഡുകളിൽ തുറക്കുക</translation> <translation id="3493531032208478708">നിർദ്ദേശിച്ച ഉള്ളടക്കത്തെക്കുറിച്ച് <ph name="BEGIN_LINK" />കൂടുതലറിയുക<ph name="END_LINK" /></translation> <translation id="3494788280727468875">ബ്രൗസിംഗ് ഡാറ്റ മായ്ക്കുന്നത് സ്ഥിരീകരിക്കുക</translation> <translation id="35083190962747987">${url} തുറക്കുക</translation> @@ -537,6 +538,7 @@ <translation id="8319076807703933069">പുതിയ തിരയൽ</translation> <translation id="8323906514956095947">കൂടുതൽ ടാബ് ഓപ്ഷനുകൾക്കായി സ്പർശിച്ച് പിടിക്കുക</translation> <translation id="8328777765163860529">എല്ലാം അടയ്ക്കുക</translation> +<translation id="8386068868580335421">റീസെറ്റ് ചെയ്യുക</translation> <translation id="8407669440184693619">ഈ സൈറ്റിനുള്ള പാസ്വേഡുകളൊന്നും കണ്ടെത്തിയില്ല</translation> <translation id="842017693807136194">ഇതുപയോഗിച്ച് സൈൻ ഇൻ ചെയ്തു</translation> <translation id="8428045167754449968">നഗരം / പട്ടണം</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb index 97112bab..6a988d00c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -192,6 +192,7 @@ <translation id="3474649192738347024">फॉर्म भरले.</translation> <translation id="3478058380795961209">कालबाह्यता महिना:</translation> <translation id="3482959374254649722">तुमचे टॅब संकालित करीत आहे...</translation> +<translation id="3484946776651937681">डाउनलोड मध्ये उघडा</translation> <translation id="3493531032208478708">सूचित केलेल्या आशयविषयी <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation> <translation id="3494788280727468875">ब्राउझिंग डेटा साफ करता याची पुष्टी करा</translation> <translation id="35083190962747987">${url} उघडा</translation> @@ -538,6 +539,7 @@ <translation id="8319076807703933069">नवीन शोध</translation> <translation id="8323906514956095947">आणखी टॅब पर्यायांसाठी स्पर्श करा आणि धरून ठेवा</translation> <translation id="8328777765163860529">सर्व बंद करा</translation> +<translation id="8386068868580335421">रीसेट करा</translation> <translation id="8407669440184693619">या साइटसाठी पासवर्ड सापडले नाहीत</translation> <translation id="842017693807136194">यासह साइन इन केले</translation> <translation id="8428045167754449968">शहर / नगर</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ne.xtb b/ios/chrome/app/strings/resources/ios_strings_ne.xtb index 3be9750..d9b159c3 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ne.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ne.xtb
@@ -192,6 +192,7 @@ <translation id="3474649192738347024">फारम भरियो।</translation> <translation id="3478058380795961209">म्याद समाप्ति महिना</translation> <translation id="3482959374254649722">तपाईँका ट्याबहरू सिंक गर्दै ...</translation> +<translation id="3484946776651937681">डाउनलोडहरू नामक फोल्डरमा खोल्नुहोस्</translation> <translation id="3493531032208478708">सुझाव दिइएको सामग्रीको बारेमा <ph name="BEGIN_LINK" />थप जान्नुहोस्<ph name="END_LINK" /></translation> <translation id="3494788280727468875">ब्राउजिङको डेटा खाली गर्ने प्रक्रियाको पुष्टि गर्नुहोस्</translation> <translation id="35083190962747987">${url} खोल्नुहोस्</translation> @@ -537,6 +538,7 @@ <translation id="8319076807703933069">नयाँ खोज</translation> <translation id="8323906514956095947">ट्याबसम्बन्धी थप विकल्पहरू हेर्न छोइराख्नुहोस्</translation> <translation id="8328777765163860529">सबै बन्द गर्नुहोस्</translation> +<translation id="8386068868580335421">रिसेट गर्नुहोस्</translation> <translation id="8407669440184693619">यो साइटका लागि कुनै पनि पासवर्ड फेला परेन</translation> <translation id="842017693807136194">निम्न प्रमाणमार्फत साइन इन ...</translation> <translation id="8428045167754449968">गाउँ / टोल</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_or.xtb b/ios/chrome/app/strings/resources/ios_strings_or.xtb index 3e7e873..1054344b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_or.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_or.xtb
@@ -192,6 +192,7 @@ <translation id="3474649192738347024">ଫର୍ମ ପୂରଣ ହୋଇଗଲା।</translation> <translation id="3478058380795961209">ମାସର ଶେଷ ତାରିଖ</translation> <translation id="3482959374254649722">ଆପଣଙ୍କର ଟାବ୍ ସିଙ୍କ୍ ହେଉଛି...</translation> +<translation id="3484946776651937681">ଡାଉନଲୋଡଗୁଡ଼ିକରେ ଖୋଲନ୍ତୁ</translation> <translation id="3493531032208478708">ପ୍ରସ୍ତାବିତ ବିଷୟବସ୍ତୁ ବିଷୟରେ <ph name="BEGIN_LINK" />ଅଧିକ ଜାଣନ୍ତୁ<ph name="END_LINK" /></translation> <translation id="3494788280727468875">ବ୍ରାଉଜିଂ ଡାଟା ଖାଲି କରିବା ସୁନିଶ୍ଚିତ କରନ୍ତୁ</translation> <translation id="35083190962747987">${url} ଖୋଲନ୍ତୁ</translation> @@ -535,6 +536,7 @@ <translation id="8319076807703933069">ନୂଆ ସନ୍ଧାନ</translation> <translation id="8323906514956095947">ଅଧିକ ଟାବ୍ ବିକଳ୍ପ ପାଇଁ ସ୍ପର୍ଶ କରି ଧରି ରଖନ୍ତୁ</translation> <translation id="8328777765163860529">ସବୁଗୁଡ଼ିକ ବନ୍ଦ କରନ୍ତୁ</translation> +<translation id="8386068868580335421">ରିସେଟ୍ କରନ୍ତୁ</translation> <translation id="8407669440184693619">ଏହି ସାଇଟ୍ ପାଇଁ କୌଣସି ପାସ୍ୱର୍ଡ ମିଳିଲା ନାହିଁ</translation> <translation id="842017693807136194">ଏହା ମାଧ୍ୟମରେ ସାଇନ୍ ଇନ୍ କରିଛନ୍ତି</translation> <translation id="8428045167754449968">ବଡ଼ ସହର/ସହର</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb index a74da0b..32623d62 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -192,7 +192,7 @@ <translation id="3474649192738347024">Formulários preenchidos.</translation> <translation id="3478058380795961209">Mês de validade</translation> <translation id="3482959374254649722">A sincronizar os seus separadores...</translation> -<translation id="3484946776651937681">Abrir nas Transferências</translation> +<translation id="3484946776651937681">Abrir nas transferências</translation> <translation id="3493531032208478708"><ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /> acerca do conteúdo sugerido</translation> <translation id="3494788280727468875">Confirmar limpeza dos dados de navegação</translation> <translation id="35083190962747987">Abrir ${url}</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb index a5d91f7..99e69dd 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ru.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
@@ -192,7 +192,7 @@ <translation id="3474649192738347024">Формы заполнены</translation> <translation id="3478058380795961209">Месяц</translation> <translation id="3482959374254649722">Синхронизация вкладок...</translation> -<translation id="3484946776651937681">Открыть папку "Загрузки"</translation> +<translation id="3484946776651937681">Открыть папку "Скачанные файлы"</translation> <translation id="3493531032208478708">Подробнее <ph name="BEGIN_LINK" />о рекомендованном контенте<ph name="END_LINK" />…</translation> <translation id="3494788280727468875">Подтвердить удаление данных о работе в браузере</translation> <translation id="35083190962747987">Открыть URL ${url}</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb index efc7242..4a29e3e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -192,6 +192,7 @@ <translation id="3474649192738347024">ఫారమ్లు పూరించబడ్డాయి.</translation> <translation id="3478058380795961209">గడువు ముగింపు నెల</translation> <translation id="3482959374254649722">మీ ట్యాబ్లను సమకాలీకరిస్తోంది...</translation> +<translation id="3484946776651937681">డౌన్లోడ్లలో తెరవండి</translation> <translation id="3493531032208478708">సూచించిన కంటెంట్ గురించి <ph name="BEGIN_LINK" />మరింత తెలుసుకోండి<ph name="END_LINK" /></translation> <translation id="3494788280727468875">బ్రౌజింగ్ డేటాను తీసివేయడాన్ని నిర్ధారించు</translation> <translation id="35083190962747987">${url}ని తెరవండి</translation> @@ -537,6 +538,7 @@ <translation id="8319076807703933069">కొత్త శోధన</translation> <translation id="8323906514956095947">మరిన్ని ట్యాబ్ ఎంపికల కోసం తాకి & అలాగే నొక్కి ఉంచండి</translation> <translation id="8328777765163860529">అన్నింటినీ మూసివేయి</translation> +<translation id="8386068868580335421">రీసెట్ చేయి</translation> <translation id="8407669440184693619">ఈ సైట్ కోసం పాస్వర్డ్లు కనుగొనబడలేదు</translation> <translation id="842017693807136194">దీనితో సైన్ ఇన్ చేయబడింది</translation> <translation id="8428045167754449968">నగరం / పట్టణం</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb index 063752c99..a4f02ab 100644 --- a/ios/chrome/app/strings/resources/ios_strings_th.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -192,6 +192,7 @@ <translation id="3474649192738347024">กรอกฟอร์มแล้ว</translation> <translation id="3478058380795961209">เดือนที่หมดอายุ</translation> <translation id="3482959374254649722">กำลังซิงค์แท็บ...</translation> +<translation id="3484946776651937681">เปิดใน "ดาวน์โหลด"</translation> <translation id="3493531032208478708"><ph name="BEGIN_LINK" />ดูข้อมูลเพิ่มเติม<ph name="END_LINK" />เกี่ยวกับเนื้อหาที่แนะนำ</translation> <translation id="3494788280727468875">ยืนยันการล้างข้อมูลการท่องเว็บ</translation> <translation id="35083190962747987">เปิด ${url}</translation> @@ -537,6 +538,7 @@ <translation id="8319076807703933069">ค้นหาใหม่</translation> <translation id="8323906514956095947">แตะค้างไว้เพื่อดูตัวเลือกแท็บเพิ่มเติม</translation> <translation id="8328777765163860529">ปิดทั้งหมด</translation> +<translation id="8386068868580335421">รีเซ็ต</translation> <translation id="8407669440184693619">ไม่พบรหัสผ่านสำหรับเว็บไซต์นี้</translation> <translation id="842017693807136194">ลงชื่อเข้าใช้ด้วย</translation> <translation id="8428045167754449968">เมือง/จังหวัด</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_strings_ur.xtb index 3aa6412..98f2df3 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ur.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ur.xtb
@@ -192,6 +192,7 @@ <translation id="3474649192738347024">فارمز پُر ہوگئے ہیں۔</translation> <translation id="3478058380795961209">میعاد کے اختتام کا مہینہ</translation> <translation id="3482959374254649722">آپ کے ٹیبز کی مطابقت پذیری ہو رہی ہے…</translation> +<translation id="3484946776651937681">ڈاؤن لوڈز میں کھولیں</translation> <translation id="3493531032208478708">تجویز کردہ مواد کے بارے میں <ph name="BEGIN_LINK" />مزید جانیں<ph name="END_LINK" /></translation> <translation id="3494788280727468875">براؤزنگ ڈیٹا صاف کرنے کی توثیق کریں</translation> <translation id="35083190962747987">{url}$ کھولیں</translation> @@ -537,6 +538,7 @@ <translation id="8319076807703933069">نئی تلاش</translation> <translation id="8323906514956095947">ٹیب کے مزید اختیارات کیلئے ٹچ کریں اور دبائے رکھیں</translation> <translation id="8328777765163860529">تمام بند کریں</translation> +<translation id="8386068868580335421">ری سیٹ کریں</translation> <translation id="8407669440184693619">اس سائٹ کے لیے کوئی پاس ورڈ نہیں ملا</translation> <translation id="842017693807136194">سائن ان کردہ بذریعہ</translation> <translation id="8428045167754449968">شہر / قصبہ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb index f058587..f47ffac 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
@@ -192,6 +192,7 @@ <translation id="3474649192738347024">表单已填好。</translation> <translation id="3478058380795961209">到期月份</translation> <translation id="3482959374254649722">正在同步您的标签页…</translation> +<translation id="3484946776651937681">在“下载内容”中打开</translation> <translation id="3493531032208478708"><ph name="BEGIN_LINK" />详细了解<ph name="END_LINK" />推荐内容</translation> <translation id="3494788280727468875">确认清除浏览数据</translation> <translation id="35083190962747987">打开 ${url}</translation> @@ -537,6 +538,7 @@ <translation id="8319076807703933069">新搜索</translation> <translation id="8323906514956095947">轻触并按住可查看更多的标签页选项</translation> <translation id="8328777765163860529">全部关闭</translation> +<translation id="8386068868580335421">重置</translation> <translation id="8407669440184693619">未找到任何用于此网站的密码</translation> <translation id="842017693807136194">所用登录身份</translation> <translation id="8428045167754449968">市/镇</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb index 8e697b3..460be6b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
@@ -192,7 +192,7 @@ <translation id="3474649192738347024">表單填寫完成。</translation> <translation id="3478058380795961209">到期月份</translation> <translation id="3482959374254649722">正在同步處理您的分頁...</translation> -<translation id="3484946776651937681">在「下載內容」中開啟</translation> +<translation id="3484946776651937681">在「下載檔案」中開啟</translation> <translation id="3493531032208478708"><ph name="BEGIN_LINK" />進一步瞭解<ph name="END_LINK" />建議的內容</translation> <translation id="3494788280727468875">確認清除瀏覽資料</translation> <translation id="35083190962747987">開啟 ${url}</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb index e1dc4fa..28750dca 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
@@ -192,7 +192,7 @@ <translation id="3474649192738347024">表單填寫完成。</translation> <translation id="3478058380795961209">到期月份</translation> <translation id="3482959374254649722">正在同步處理您的分頁...</translation> -<translation id="3484946776651937681">在「下載內容」中開啟</translation> +<translation id="3484946776651937681">在「下載」資料夾開啟</translation> <translation id="3493531032208478708"><ph name="BEGIN_LINK" />進一步瞭解<ph name="END_LINK" />建議的內容</translation> <translation id="3494788280727468875">確認清除瀏覽資料</translation> <translation id="35083190962747987">開啟 ${url}</translation> @@ -555,7 +555,7 @@ <translation id="8532105204136943229">到期年份</translation> <translation id="8534481786647257214">已順利發布到 Google+。</translation> <translation id="8548878600947630424">在網頁中尋找...</translation> -<translation id="8574235780160508979">Chrome 的服務條款將於 3 月 31 日變更。<ph name="BEGIN_LINK" />請詳閱變更內容<ph name="END_LINK" /></translation> +<translation id="8574235780160508979">Chrome 的服務條款將於 3 月 31 日變更。<ph name="BEGIN_LINK" />請查看新版條款<ph name="END_LINK" /></translation> <translation id="8588404856427128947">關閉</translation> <translation id="8605219856220328675">關閉分頁。</translation> <translation id="8620640915598389714">編輯</translation>
diff --git a/ios/chrome/browser/crash_report/BUILD.gn b/ios/chrome/browser/crash_report/BUILD.gn index ae0c48c..1956e24 100644 --- a/ios/chrome/browser/crash_report/BUILD.gn +++ b/ios/chrome/browser/crash_report/BUILD.gn
@@ -63,7 +63,9 @@ "//ios/chrome/browser/browser_state", "//ios/chrome/browser/infobars", "//ios/chrome/browser/infobars:public", + "//ios/chrome/browser/main:public", "//ios/chrome/browser/sessions", + "//ios/chrome/browser/sessions:restoration_agent", "//ios/chrome/browser/sessions:serialisation", "//ios/chrome/browser/sessions:session_service", "//ios/chrome/browser/ui/infobars:feature_flags", @@ -92,6 +94,7 @@ "//ios/chrome/browser/browser_state", "//ios/chrome/browser/browser_state:test_support", "//ios/chrome/browser/crash_report/breadcrumbs", + "//ios/chrome/browser/main:test_support", "//ios/chrome/browser/sessions:serialisation", "//ios/chrome/browser/sessions:session_service", "//ios/chrome/test/ocmock",
diff --git a/ios/chrome/browser/crash_report/crash_restore_helper.h b/ios/chrome/browser/crash_report/crash_restore_helper.h index 49bb3823..70422b4e 100644 --- a/ios/chrome/browser/crash_report/crash_restore_helper.h +++ b/ios/chrome/browser/crash_report/crash_restore_helper.h
@@ -7,17 +7,12 @@ #import <Foundation/Foundation.h> -class ChromeBrowserState; - -@protocol SessionWindowRestoring; -namespace web { -class WebState; -} +class Browser; // Helper class for handling session restoration after a crash. @interface CrashRestoreHelper : NSObject -- (instancetype)initWithBrowserState:(ChromeBrowserState*)browserState; +- (instancetype)initWithBrowser:(Browser*)browser; // Saves the session information stored on disk in temporary files and will // then delete those from their default location. This will ensure that the @@ -25,10 +20,9 @@ // sessions. - (void)moveAsideSessionInformation; -// Shows an infobar on the currently selected tab of the given |tabModel|. This -// infobar lets the user restore its session after a crash. -- (void)showRestoreIfNeededUsingWebState:(web::WebState*)webState - sessionRestorer:(id<SessionWindowRestoring>)restorer; +// Shows an infobar on the currently active tab of the browser. This infobar +// lets the user restore its session after a crash. +- (void)showRestoreIfNeeded; @end
diff --git a/ios/chrome/browser/crash_report/crash_restore_helper.mm b/ios/chrome/browser/crash_report/crash_restore_helper.mm index 45323e5..033f987 100644 --- a/ios/chrome/browser/crash_report/crash_restore_helper.mm +++ b/ios/chrome/browser/crash_report/crash_restore_helper.mm
@@ -24,11 +24,12 @@ #include "ios/chrome/browser/infobars/infobar_ios.h" #include "ios/chrome/browser/infobars/infobar_manager_impl.h" #include "ios/chrome/browser/infobars/infobar_utils.h" +#import "ios/chrome/browser/main/browser.h" #include "ios/chrome/browser/sessions/ios_chrome_tab_restore_service_factory.h" #import "ios/chrome/browser/sessions/session_ios.h" +#import "ios/chrome/browser/sessions/session_restoration_browser_agent.h" #import "ios/chrome/browser/sessions/session_service_ios.h" #import "ios/chrome/browser/sessions/session_window_ios.h" -#import "ios/chrome/browser/sessions/session_window_restoring.h" #import "ios/chrome/browser/ui/infobars/infobar_feature.h" #include "ios/chrome/browser/web_state_list/web_state_list.h" #include "ios/chrome/grit/ios_theme_resources.h" @@ -204,42 +205,39 @@ } // namespace @implementation CrashRestoreHelper { - ChromeBrowserState* _browserState; - BOOL _needRestoration; - std::unique_ptr<InfoBarManagerObserverBridge> _infoBarBridge; - // Object that will handle session restoration. - id<SessionWindowRestoring> _restorer; + Browser* browser_; + BOOL needRestoration_; + std::unique_ptr<InfoBarManagerObserverBridge> infoBarBridge_; // Indicate that the session has been restored to tabs or to recently closed // and should not be rerestored. - BOOL _sessionRestored; + BOOL sessionRestored_; } -- (id)initWithBrowserState:(ChromeBrowserState*)browserState { +- (instancetype)initWithBrowser:(Browser*)browser { if (self = [super init]) { - _browserState = browserState; + browser_ = browser; } return self; } -- (void)showRestoreIfNeededUsingWebState:(web::WebState*)webState - sessionRestorer:(id<SessionWindowRestoring>)restorer { - if (!_needRestoration) +- (void)showRestoreIfNeeded { + if (!needRestoration_) return; + // Get the active webState to show the infobar on it. + web::WebState* webState = browser_->GetWebStateList()->GetActiveWebState(); // The last session didn't exit cleanly. Show an infobar to the user so // that they can restore if they want. The delegate deletes itself when // it is closed. - DCHECK(webState); infobars::InfoBarManager* infoBarManager = InfoBarManagerImpl::FromWebState(webState); - _restorer = restorer; SessionCrashedInfoBarDelegate::Create(infoBarManager, self); [ConfirmInfobarMetricsRecorder recordConfirmInfobarEvent:MobileMessagesConfirmInfobarEvents::Presented forInfobarConfirmType:InfobarConfirmType::kInfobarConfirmTypeRestore]; - _infoBarBridge.reset(new InfoBarManagerObserverBridge(infoBarManager, self)); + infoBarBridge_.reset(new InfoBarManagerObserverBridge(infoBarManager, self)); } - (BOOL)deleteSessionForBrowserState:(ChromeBrowserState*)browserState @@ -291,17 +289,17 @@ // This may be the first time that the OTR browser state is being accessed, so // ensure that the OTR ChromeBrowserState is created first. ChromeBrowserState* otrBrowserState = - _browserState->GetOffTheRecordChromeBrowserState(); + browser_->GetBrowserState()->GetOffTheRecordChromeBrowserState(); [self deleteSessionForBrowserState:otrBrowserState backupFile:nil]; - _needRestoration = - [self deleteSessionForBrowserState:_browserState + needRestoration_ = + [self deleteSessionForBrowserState:browser_->GetBrowserState() backupFile:[self sessionBackupPath]]; } - (BOOL)restoreSessionsAfterCrash { - DCHECK(!_sessionRestored); - _sessionRestored = YES; - _infoBarBridge.reset(); + DCHECK(!sessionRestored_); + sessionRestored_ = YES; + infoBarBridge_.reset(); SessionIOS* session = [[SessionServiceIOS sharedService] loadSessionFromPath:[self sessionBackupPath]]; @@ -310,13 +308,13 @@ DCHECK_EQ(session.sessionWindows.count, 1u); breakpad_helper::WillStartCrashRestoration(); - return [_restorer restoreSessionWindow:session.sessionWindows[0] - forInitialRestore:NO]; + return SessionRestorationBrowserAgent::FromBrowser(browser_) + ->RestoreSessionWindow(session.sessionWindows[0]); } - (void)infoBarRemoved:(infobars::InfoBar*)infobar { DCHECK(infobar->delegate()); - if (_sessionRestored || + if (sessionRestored_ || infobar->delegate()->GetIdentifier() != infobars::InfoBarDelegate::SESSION_CRASHED_INFOBAR_DELEGATE_IOS) { return; @@ -325,7 +323,7 @@ // If the infobar is dismissed without restoring the tabs (either by closing // it with the cross or after a navigation), all the entries will be added to // the recently closed tabs. - _sessionRestored = YES; + sessionRestored_ = YES; SessionIOS* session = [[SessionServiceIOS sharedService] loadSessionFromPath:[self sessionBackupPath]]; @@ -336,10 +334,11 @@ return; sessions::TabRestoreService* const tabRestoreService = - IOSChromeTabRestoreServiceFactory::GetForBrowserState(_browserState); + IOSChromeTabRestoreServiceFactory::GetForBrowserState( + browser_->GetBrowserState()); tabRestoreService->LoadTabsFromLastSession(); - web::WebState::CreateParams params(_browserState); + web::WebState::CreateParams params(browser_->GetBrowserState()); for (CRWSessionStorage* session in sessions) { auto live_tab = std::make_unique<sessions::RestoreIOSLiveTab>(session); // Add all tabs at the 0 position as the position is relative to an old
diff --git a/ios/chrome/browser/crash_report/crash_restore_helper_unittest.mm b/ios/chrome/browser/crash_report/crash_restore_helper_unittest.mm index 50389401..6712ee7d 100644 --- a/ios/chrome/browser/crash_report/crash_restore_helper_unittest.mm +++ b/ios/chrome/browser/crash_report/crash_restore_helper_unittest.mm
@@ -13,6 +13,7 @@ #include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h" #include "ios/chrome/browser/crash_report/crash_restore_helper.h" +#import "ios/chrome/browser/main/test_browser.h" #import "ios/chrome/browser/sessions/session_service_ios.h" #include "ios/web/public/test/web_task_environment.h" #include "testing/gmock/include/gmock/gmock.h" @@ -40,13 +41,14 @@ chrome_browser_state_ = test_cbs_builder.Build(); off_the_record_chrome_browser_state_ = chrome_browser_state_->GetOffTheRecordChromeBrowserState(); - helper_ = [[CrashRestoreHelper alloc] - initWithBrowserState:chrome_browser_state_.get()]; + test_browser_ = std::make_unique<TestBrowser>(chrome_browser_state_.get()); + helper_ = [[CrashRestoreHelper alloc] initWithBrowser:test_browser_.get()]; } protected: web::WebTaskEnvironment task_environment_; std::unique_ptr<TestChromeBrowserState> chrome_browser_state_; + std::unique_ptr<TestBrowser> test_browser_; ChromeBrowserState* off_the_record_chrome_browser_state_; CrashRestoreHelper* helper_; };
diff --git a/ios/chrome/browser/first_run/OWNERS b/ios/chrome/browser/first_run/OWNERS index 169936c..82aabb4 100644 --- a/ios/chrome/browser/first_run/OWNERS +++ b/ios/chrome/browser/first_run/OWNERS
@@ -1,4 +1,4 @@ -bzanotti@chromium.org +jlebel@chromium.org msarda@chromium.org # COMPONENT: UI>Browser>FirstRun
diff --git a/ios/chrome/browser/ui/authentication/OWNERS b/ios/chrome/browser/ui/authentication/OWNERS index a8f0801c..5ccf334 100644 --- a/ios/chrome/browser/ui/authentication/OWNERS +++ b/ios/chrome/browser/ui/authentication/OWNERS
@@ -1,4 +1,3 @@ -bzanotti@chromium.org jlebel@chromium.org msarda@chromium.org
diff --git a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h index 2e4b772d..f46abb5d 100644 --- a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h +++ b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h
@@ -115,6 +115,10 @@ void UpdateAutofillPopupDataListValues( const std::vector<base::string16>& values, const std::vector<base::string16>& labels) override; + base::span<const autofill::Suggestion> GetPopupSuggestions() const override; + void PinPopupViewUntilUpdate() override; + void UpdatePopup(const std::vector<autofill::Suggestion>& suggestions, + PopupType popup_type) override; void HideAutofillPopup(PopupHidingReason reason) override; bool IsAutocompleteEnabled() override; void PropagateAutofillPredictions(
diff --git a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm index 1423f20..8338ebbb 100644 --- a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm +++ b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm
@@ -354,6 +354,22 @@ NOTREACHED(); } +base::span<const autofill::Suggestion> +ChromeAutofillClientIOS::GetPopupSuggestions() const { + NOTIMPLEMENTED(); + return base::span<const autofill::Suggestion>(); +} + +void ChromeAutofillClientIOS::PinPopupViewUntilUpdate() { + NOTIMPLEMENTED(); +} + +void ChromeAutofillClientIOS::UpdatePopup( + const std::vector<autofill::Suggestion>& suggestions, + autofill::PopupType popup_type) { + NOTIMPLEMENTED(); +} + void ChromeAutofillClientIOS::HideAutofillPopup(PopupHidingReason reason) { [bridge_ hideAutofillPopup]; }
diff --git a/ios/chrome/browser/ui/infobars/coordinators/infobar_save_card_coordinator.mm b/ios/chrome/browser/ui/infobars/coordinators/infobar_save_card_coordinator.mm index 81c53aba..ed48fd3 100644 --- a/ios/chrome/browser/ui/infobars/coordinators/infobar_save_card_coordinator.mm +++ b/ios/chrome/browser/ui/infobars/coordinators/infobar_save_card_coordinator.mm
@@ -195,8 +195,10 @@ self.modalViewController.legalMessages = [self legalMessagesForModal]; if ((base::FeatureList::IsEnabled( autofill::features::kAutofillSaveCardInfobarEditSupport))) { + // Only allow editing if the card will be uploaded and it hasn't been + // previously saved. self.modalViewController.supportsEditing = - self.saveCardInfoBarDelegate->upload(); + self.saveCardInfoBarDelegate->upload() && !self.infobarAccepted; } else { self.modalViewController.supportsEditing = NO; }
diff --git a/ios/chrome/browser/ui/main/scene_controller.mm b/ios/chrome/browser/ui/main/scene_controller.mm index cc162e1..d6e1760 100644 --- a/ios/chrome/browser/ui/main/scene_controller.mm +++ b/ios/chrome/browser/ui/main/scene_controller.mm
@@ -1080,11 +1080,7 @@ // Now that all the operations on the tabs have been done, display the // restore infobar if needed. dispatch_async(dispatch_get_main_queue(), ^{ - TabModel* currentTabModel = [self currentTabModel]; - [self.mainController.restoreHelper - showRestoreIfNeededUsingWebState:currentTabModel.webStateList - ->GetActiveWebState() - sessionRestorer:currentTabModel]; + [self.mainController.restoreHelper showRestoreIfNeeded]; self.mainController.restoreHelper = nil; }); }
diff --git a/ios/chrome/browser/ui/signin_interaction/OWNERS b/ios/chrome/browser/ui/signin_interaction/OWNERS index a8f0801c..5ccf334 100644 --- a/ios/chrome/browser/ui/signin_interaction/OWNERS +++ b/ios/chrome/browser/ui/signin_interaction/OWNERS
@@ -1,4 +1,3 @@ -bzanotti@chromium.org jlebel@chromium.org msarda@chromium.org
diff --git a/ios/chrome/test/earl_grey/chrome_test_case.mm b/ios/chrome/test/earl_grey/chrome_test_case.mm index 7726d15..f266834 100644 --- a/ios/chrome/test/earl_grey/chrome_test_case.mm +++ b/ios/chrome/test/earl_grey/chrome_test_case.mm
@@ -407,6 +407,10 @@ [self closeAllTabs]; [ChromeEarlGrey setContentSettings:CONTENT_SETTING_DEFAULT]; + // Enforce the assumption that the tests are runing in portrait. + [ChromeEarlGrey rotateDeviceToOrientation:UIDeviceOrientationPortrait + error:nil]; + [CoverageUtils configureCoverageReportPath]; }
diff --git a/ios/web_view/internal/autofill/web_view_autofill_client_ios.h b/ios/web_view/internal/autofill/web_view_autofill_client_ios.h index be4bb62..6e92be84 100644 --- a/ios/web_view/internal/autofill/web_view_autofill_client_ios.h +++ b/ios/web_view/internal/autofill/web_view_autofill_client_ios.h
@@ -106,6 +106,10 @@ void UpdateAutofillPopupDataListValues( const std::vector<base::string16>& values, const std::vector<base::string16>& labels) override; + base::span<const autofill::Suggestion> GetPopupSuggestions() const override; + void PinPopupViewUntilUpdate() override; + void UpdatePopup(const std::vector<autofill::Suggestion>& suggestions, + PopupType popup_type) override; void HideAutofillPopup(PopupHidingReason reason) override; bool IsAutocompleteEnabled() override; void PropagateAutofillPredictions(
diff --git a/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm b/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm index 39f2665..204850e 100644 --- a/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm +++ b/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm
@@ -239,6 +239,22 @@ NOTREACHED(); } +base::span<const autofill::Suggestion> +WebViewAutofillClientIOS::GetPopupSuggestions() const { + NOTIMPLEMENTED(); + return base::span<const autofill::Suggestion>(); +} + +void WebViewAutofillClientIOS::PinPopupViewUntilUpdate() { + NOTIMPLEMENTED(); +} + +void WebViewAutofillClientIOS::UpdatePopup( + const std::vector<autofill::Suggestion>& suggestions, + autofill::PopupType popup_type) { + NOTIMPLEMENTED(); +} + void WebViewAutofillClientIOS::HideAutofillPopup(PopupHidingReason reason) { [bridge_ hideAutofillPopup]; }
diff --git a/jingle/BUILD.gn b/jingle/BUILD.gn index 1c59e6c..27c0270 100644 --- a/jingle/BUILD.gn +++ b/jingle/BUILD.gn
@@ -28,9 +28,7 @@ "glue/task_pump.cc", "glue/task_pump.h", ] - public_deps = [ - "//services/network/public/mojom", - ] + public_deps = [ "//services/network/public/mojom" ] deps = [ "//base", "//net",
diff --git a/media/DEPS b/media/DEPS index f1585f1..994777d5 100644 --- a/media/DEPS +++ b/media/DEPS
@@ -19,6 +19,7 @@ "+third_party/libyuv", "+third_party/opus", "+third_party/skia", + "+ui/android", "+ui/display", "+ui/events", "+ui/gfx",
diff --git a/media/capture/content/android/BUILD.gn b/media/capture/content/android/BUILD.gn index ef205308..2866eda 100644 --- a/media/capture/content/android/BUILD.gn +++ b/media/capture/content/android/BUILD.gn
@@ -30,18 +30,15 @@ } generate_jni("screen_capture_jni_headers") { - sources = [ - "java/src/org/chromium/media/ScreenCapture.java", - ] + sources = [ "java/src/org/chromium/media/ScreenCapture.java" ] } android_library("screen_capture_java") { deps = [ "//base:base_java", "//base:jni_java", + "//ui/android:ui_java", ] - sources = [ - "java/src/org/chromium/media/ScreenCapture.java", - ] + sources = [ "java/src/org/chromium/media/ScreenCapture.java" ] annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] }
diff --git a/media/capture/content/android/java/src/org/chromium/media/ScreenCapture.java b/media/capture/content/android/java/src/org/chromium/media/ScreenCapture.java index d948440..8cb094e 100644 --- a/media/capture/content/android/java/src/org/chromium/media/ScreenCapture.java +++ b/media/capture/content/android/java/src/org/chromium/media/ScreenCapture.java
@@ -25,7 +25,6 @@ import android.util.DisplayMetrics; import android.view.Display; import android.view.Surface; -import android.view.WindowManager; import androidx.annotation.IntDef; @@ -35,6 +34,7 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; +import org.chromium.ui.display.DisplayAndroidManager; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -238,10 +238,8 @@ return false; } - WindowManager windowManager = - (WindowManager) ContextUtils.getApplicationContext().getSystemService( - Context.WINDOW_SERVICE); - mDisplay = windowManager.getDefaultDisplay(); + mDisplay = DisplayAndroidManager.getDefaultDisplayForContext( + ContextUtils.getApplicationContext()); DisplayMetrics metrics = new DisplayMetrics(); mDisplay.getMetrics(metrics);
diff --git a/media/capture/video/android/BUILD.gn b/media/capture/video/android/BUILD.gn index d2c29492..e3027e4 100644 --- a/media/capture/video/android/BUILD.gn +++ b/media/capture/video/android/BUILD.gn
@@ -53,6 +53,7 @@ "//base:base_java", "//base:jni_java", "//third_party/android_deps:androidx_annotation_annotation_java", + "//ui/android:ui_java", ] annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
diff --git a/media/capture/video/android/java/src/org/chromium/media/VideoCapture.java b/media/capture/video/android/java/src/org/chromium/media/VideoCapture.java index e35e102..ccd3d94 100644 --- a/media/capture/video/android/java/src/org/chromium/media/VideoCapture.java +++ b/media/capture/video/android/java/src/org/chromium/media/VideoCapture.java
@@ -4,15 +4,13 @@ package org.chromium.media; -import android.content.Context; import android.graphics.ImageFormat; -import android.view.Surface; -import android.view.WindowManager; import org.chromium.base.ContextUtils; import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; +import org.chromium.ui.display.DisplayAndroid; import java.nio.ByteBuffer; import java.util.ArrayList; @@ -157,25 +155,9 @@ } protected final int getDeviceRotation() { - final int orientation; - WindowManager wm = (WindowManager) ContextUtils.getApplicationContext().getSystemService( - Context.WINDOW_SERVICE); - switch (wm.getDefaultDisplay().getRotation()) { - case Surface.ROTATION_90: - orientation = 90; - break; - case Surface.ROTATION_180: - orientation = 180; - break; - case Surface.ROTATION_270: - orientation = 270; - break; - case Surface.ROTATION_0: - default: - orientation = 0; - break; - } - return orientation; + DisplayAndroid display = + DisplayAndroid.getNonMultiDisplay(ContextUtils.getApplicationContext()); + return display.getRotationDegrees(); } // {@link VideoCaptureJni.get().onPhotoTaken()} needs to be called back if there's any
diff --git a/media/gpu/test/BUILD.gn b/media/gpu/test/BUILD.gn index 21ff527..b276f935 100644 --- a/media/gpu/test/BUILD.gn +++ b/media/gpu/test/BUILD.gn
@@ -25,9 +25,7 @@ "//mojo/core/embedder:embedder", "//third_party/libyuv", ] - public_deps = [ - "//testing/gtest", - ] + public_deps = [ "//testing/gtest" ] if (use_ozone) { deps += [ "//ui/ozone" ] @@ -69,9 +67,7 @@ "video_decode_accelerator_unittest_helpers.cc", "video_decode_accelerator_unittest_helpers.h", ] - public_deps = [ - ":helpers", - ] + public_deps = [ ":helpers" ] deps = [ "//media/gpu", "//testing/gtest", @@ -126,9 +122,7 @@ "video_player/video_player_test_environment.cc", "video_player/video_player_test_environment.h", ] - data = [ - "//media/test/data/", - ] + data = [ "//media/test/data/" ] deps = [ ":frame_file_writer", ":helpers", @@ -152,9 +146,7 @@ "//testing/gtest", "//third_party/libyuv", ] - data = [ - "//media/test/data/", - ] + data = [ "//media/test/data/" ] } }
diff --git a/media/webrtc/BUILD.gn b/media/webrtc/BUILD.gn index 400d6b2b..8ba246a9 100644 --- a/media/webrtc/BUILD.gn +++ b/media/webrtc/BUILD.gn
@@ -58,8 +58,6 @@ "//testing/gtest", "//third_party/webrtc_overrides:webrtc_component", ] - sources = [ - "audio_processor_unittest.cc", - ] + sources = [ "audio_processor_unittest.cc" ] } }
diff --git a/net/base/registry_controlled_domains/BUILD.gn b/net/base/registry_controlled_domains/BUILD.gn index d8aa971c..6711be9 100644 --- a/net/base/registry_controlled_domains/BUILD.gn +++ b/net/base/registry_controlled_domains/BUILD.gn
@@ -13,9 +13,7 @@ "effective_tld_names_unittest5.gperf", "effective_tld_names_unittest6.gperf", ] - outputs = [ - "${target_gen_dir}/{{source_name_part}}-inc.cc", - ] + outputs = [ "${target_gen_dir}/{{source_name_part}}-inc.cc" ] args = [ "{{source}}", rebase_path("${target_gen_dir}/{{source_name_part}}-inc.cc",
diff --git a/net/nqe/network_quality_estimator.cc b/net/nqe/network_quality_estimator.cc index ee9b6042..cc91356 100644 --- a/net/nqe/network_quality_estimator.cc +++ b/net/nqe/network_quality_estimator.cc
@@ -22,7 +22,7 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/string_piece.h" #include "base/strings/stringprintf.h" -#include "base/task/lazy_task_runner.h" +#include "base/task/lazy_thread_pool_task_runner.h" #include "base/threading/thread_task_runner_handle.h" #include "base/time/default_tick_clock.h" #include "base/trace_event/trace_event.h" @@ -58,10 +58,9 @@ // SequencedTaskRunner to get the network id. A SequencedTaskRunner is used // rather than parallel tasks to avoid having many threads getting the network // id concurrently. -base::LazySequencedTaskRunner g_get_network_id_task_runner = - LAZY_SEQUENCED_TASK_RUNNER_INITIALIZER( - base::TaskTraits(base::ThreadPool(), - base::MayBlock(), +base::LazyThreadPoolSequencedTaskRunner g_get_network_id_task_runner = + LAZY_THREAD_POOL_SEQUENCED_TASK_RUNNER_INITIALIZER( + base::TaskTraits(base::MayBlock(), base::TaskPriority::BEST_EFFORT, base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN)); #endif
diff --git a/net/quic/quic_chromium_client_session_test.cc b/net/quic/quic_chromium_client_session_test.cc index 76d1c55..01b5d39 100644 --- a/net/quic/quic_chromium_client_session_test.cc +++ b/net/quic/quic_chromium_client_session_test.cc
@@ -10,7 +10,6 @@ #include "base/memory/ptr_util.h" #include "base/run_loop.h" #include "base/stl_util.h" -#include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" #include "base/threading/thread_task_runner_handle.h" #include "base/time/default_tick_clock.h" @@ -424,7 +423,7 @@ session_.reset(); - // Veirfy that the handle works correctly after the session is deleted. + // Verify that the handle works correctly after the session is deleted. EXPECT_FALSE(handle->IsConnected()); EXPECT_TRUE(handle->OneRttKeysAvailable()); EXPECT_EQ(version_, handle->GetQuicVersion()); @@ -1034,7 +1033,6 @@ } TEST_P(QuicChromiumClientSessionTest, PushStreamTimedOutNoResponse) { - base::HistogramTester histogram_tester; MockQuicData quic_data(version_); int packet_num = 1; if (VersionUsesHttp3(version_.transport_version)) { @@ -1091,7 +1089,6 @@ } TEST_P(QuicChromiumClientSessionTest, PushStreamTimedOutWithResponse) { - base::HistogramTester histogram_tester; MockQuicData quic_data(version_); int packet_num = 1; if (VersionUsesHttp3(version_.transport_version)) { @@ -1274,7 +1271,6 @@ } TEST_P(QuicChromiumClientSessionTest, CancelPushBeforeReceivingResponse) { - base::HistogramTester histogram_tester; MockQuicData quic_data(version_); int packet_num = 1; if (VersionUsesHttp3(version_.transport_version)) { @@ -1331,7 +1327,6 @@ } TEST_P(QuicChromiumClientSessionTest, CancelPushAfterReceivingResponse) { - base::HistogramTester histogram_tester; MockQuicData quic_data(version_); int packet_num = 1; if (VersionUsesHttp3(version_.transport_version)) { @@ -2041,6 +2036,65 @@ EXPECT_TRUE(quic_data.AllWriteDataConsumed()); } +// Regression test for https://crbug.com/1043531. +TEST_P(QuicChromiumClientSessionTest, ResetOnEmptyResponseHeaders) { + MockQuicData quic_data(version_); + int packet_num = 1; + if (VersionUsesHttp3(version_.transport_version)) { + quic_data.AddWrite(ASYNC, + client_maker_.MakeInitialSettingsPacket(packet_num++)); + } else { + // In case of Google QUIC, QuicSpdyStream resets the stream. + quic_data.AddWrite(ASYNC, client_maker_.MakeRstPacket( + packet_num++, true, + GetNthClientInitiatedBidirectionalStreamId(0), + quic::QUIC_HEADERS_TOO_LARGE)); + } + quic_data.AddRead(ASYNC, ERR_IO_PENDING); + quic_data.AddRead(ASYNC, OK); // EOF + quic_data.AddSocketDataToFactory(&socket_factory_); + Initialize(); + + ProofVerifyDetailsChromium details; + details.cert_verify_result.verified_cert = + ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); + ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); + + CompleteCryptoHandshake(); + session_->OnProofVerifyDetailsAvailable(details); + + auto session_handle = session_->CreateHandle(destination_); + TestCompletionCallback callback; + EXPECT_EQ(OK, session_handle->RequestStream(/*requires_confirmation=*/false, + callback.callback(), + TRAFFIC_ANNOTATION_FOR_TESTS)); + + auto stream_handle = session_handle->ReleaseStream(); + EXPECT_TRUE(stream_handle->IsOpen()); + + auto* stream = quic::test::QuicSessionPeer::GetOrCreateStream( + session_.get(), stream_handle->id()); + + const quic::QuicHeaderList empty_response_headers; + static_cast<quic::QuicSpdyStream*>(stream)->OnStreamHeaderList( + /* fin = */ false, /* frame_len = */ 0, empty_response_headers); + + if (VersionUsesHttp3(version_.transport_version)) { + // In case of IETF QUIC, QuicSpdyStream::OnStreamHeaderList() calls + // QuicChromiumClientStream::OnInitialHeadersComplete() with the empty + // header list, and QuicChromiumClientStream signals an error. + spdy::SpdyHeaderBlock header_block; + int rv = stream_handle->ReadInitialHeaders(&header_block, + CompletionOnceCallback()); + EXPECT_THAT(rv, IsError(ERR_INVALID_RESPONSE)); + } + + base::RunLoop().RunUntilIdle(); + quic_data.Resume(); + EXPECT_TRUE(quic_data.AllReadDataConsumed()); + EXPECT_TRUE(quic_data.AllWriteDataConsumed()); +} + } // namespace } // namespace test } // namespace net
diff --git a/net/quic/quic_chromium_client_stream.cc b/net/quic/quic_chromium_client_stream.cc index 4a742341..a61c76e 100644 --- a/net/quic/quic_chromium_client_stream.cc +++ b/net/quic/quic_chromium_client_stream.cc
@@ -63,9 +63,8 @@ if (!read_headers_callback_) return; // Wait for ReadInitialHeaders to be called. - int rv = ERR_QUIC_PROTOCOL_ERROR; - if (!stream_->DeliverInitialHeaders(read_headers_buffer_, &rv)) - rv = ERR_QUIC_PROTOCOL_ERROR; + int rv = stream_->DeliverInitialHeaders(read_headers_buffer_); + DCHECK_NE(ERR_IO_PENDING, rv); ResetAndRun(std::move(read_headers_callback_), rv); } @@ -150,9 +149,10 @@ if (!stream_) return net_error_; - int frame_len = 0; - if (stream_->DeliverInitialHeaders(header_block, &frame_len)) - return frame_len; + int rv = stream_->DeliverInitialHeaders(header_block); + if (rv != ERR_IO_PENDING) { + return rv; + } read_headers_buffer_ = header_block; SetCallback(std::move(callback), &read_headers_callback_); @@ -407,11 +407,12 @@ : quic::QuicSpdyStream(id, session, type), net_log_(net_log), handle_(nullptr), - headers_delivered_(false), initial_headers_sent_(false), session_(session), quic_version_(session->connection()->transport_version()), can_migrate_to_cellular_network_(true), + initial_headers_arrived_(false), + headers_delivered_(false), initial_headers_frame_len_(0), trailing_headers_frame_len_(0) {} @@ -424,11 +425,12 @@ : quic::QuicSpdyStream(pending, session, type), net_log_(net_log), handle_(nullptr), - headers_delivered_(false), initial_headers_sent_(false), session_(session), quic_version_(session->connection()->transport_version()), can_migrate_to_cellular_network_(true), + initial_headers_arrived_(false), + headers_delivered_(false), initial_headers_frame_len_(0), trailing_headers_frame_len_(0) {} @@ -457,6 +459,7 @@ session_->OnInitialHeadersComplete(id(), header_block); // Buffer the headers and deliver them when the handle arrives. + initial_headers_arrived_ = true; initial_headers_ = std::move(header_block); initial_headers_frame_len_ = frame_len; @@ -582,8 +585,9 @@ handle_ = handle.get(); // Should this perhaps be via PostTask to make reasoning simpler? - if (!initial_headers_.empty()) + if (initial_headers_arrived_) { handle_->OnInitialHeadersAvailable(); + } return handle; } @@ -652,13 +656,18 @@ handle_->OnTrailingHeadersAvailable(); } -bool QuicChromiumClientStream::DeliverInitialHeaders( - spdy::SpdyHeaderBlock* headers, - int* frame_len) { - if (initial_headers_.empty()) - return false; +int QuicChromiumClientStream::DeliverInitialHeaders( + spdy::SpdyHeaderBlock* headers) { + if (!initial_headers_arrived_) { + return ERR_IO_PENDING; + } headers_delivered_ = true; + + if (initial_headers_.empty()) { + return ERR_INVALID_RESPONSE; + } + net_log_.AddEvent( NetLogEventType::QUIC_CHROMIUM_CLIENT_STREAM_READ_RESPONSE_HEADERS, [&](NetLogCaptureMode capture_mode) { @@ -667,8 +676,7 @@ }); *headers = std::move(initial_headers_); - *frame_len = initial_headers_frame_len_; - return true; + return initial_headers_frame_len_; } bool QuicChromiumClientStream::DeliverTrailingHeaders(
diff --git a/net/quic/quic_chromium_client_stream.h b/net/quic/quic_chromium_client_stream.h index f2f77ee..71372a16 100644 --- a/net/quic/quic_chromium_client_stream.h +++ b/net/quic/quic_chromium_client_stream.h
@@ -271,8 +271,7 @@ // True if this stream is the first data stream created on this session. bool IsFirstStream(); - bool DeliverInitialHeaders(spdy::SpdyHeaderBlock* header_block, - int* frame_len); + int DeliverInitialHeaders(spdy::SpdyHeaderBlock* header_block); bool DeliverTrailingHeaders(spdy::SpdyHeaderBlock* header_block, int* frame_len); @@ -291,8 +290,6 @@ NetLogWithSource net_log_; Handle* handle_; - bool headers_delivered_; - // True when initial headers have been sent. bool initial_headers_sent_; @@ -303,7 +300,11 @@ // during connection migration. bool can_migrate_to_cellular_network_; - // Stores the initial header if they arrive before the handle. + // True if initial headers have arrived. + bool initial_headers_arrived_; + // True if initial headers have been delivered to the handle.. + bool headers_delivered_; + // Stores the initial header until they are delivered to the handle. spdy::SpdyHeaderBlock initial_headers_; // Length of the HEADERS frame containing initial headers. size_t initial_headers_frame_len_;
diff --git a/net/quic/quic_chromium_client_stream_test.cc b/net/quic/quic_chromium_client_stream_test.cc index 040b161..448f061 100644 --- a/net/quic/quic_chromium_client_stream_test.cc +++ b/net/quic/quic_chromium_client_stream_test.cc
@@ -935,6 +935,14 @@ quiche::QuicheStringPiece(buffer->data(), data_len)); } +// Regression test for https://crbug.com/1043531. +TEST_P(QuicChromiumClientStreamTest, ResetOnEmptyResponseHeaders) { + const spdy::SpdyHeaderBlock empty_response_headers; + ProcessHeaders(empty_response_headers); + int rv = handle_->ReadInitialHeaders(&headers_, CompletionOnceCallback()); + EXPECT_THAT(rv, IsError(ERR_INVALID_RESPONSE)); +} + } // namespace } // namespace test } // namespace net
diff --git a/net/quic/quic_network_transaction_unittest.cc b/net/quic/quic_network_transaction_unittest.cc index ba562334..b5c21ee 100644 --- a/net/quic/quic_network_transaction_unittest.cc +++ b/net/quic/quic_network_transaction_unittest.cc
@@ -1281,6 +1281,53 @@ } } +// Regression test for https://crbug.com/1043531. +TEST_P(QuicNetworkTransactionTest, ResetOnEmptyResponseHeaders) { + if (!quic::VersionUsesHttp3(version_.transport_version)) { + return; + } + + context_.params()->origins_to_force_quic_on.insert( + HostPortPair::FromString("mail.example.org:443")); + + MockQuicData mock_quic_data(version_); + int write_packet_num = 1; + mock_quic_data.AddWrite(SYNCHRONOUS, + ConstructInitialSettingsPacket(write_packet_num++)); + mock_quic_data.AddWrite( + SYNCHRONOUS, + ConstructClientRequestHeadersPacket( + write_packet_num++, GetNthClientInitiatedBidirectionalStreamId(0), + true, true, GetRequestHeaders("GET", "https", "/"))); + + const quic::QuicStreamId request_stream_id = + GetNthClientInitiatedBidirectionalStreamId(0); + spdy::SpdyHeaderBlock empty_response_headers; + const std::string response_data = server_maker_.QpackEncodeHeaders( + request_stream_id, std::move(empty_response_headers), nullptr); + uint64_t read_packet_num = 1; + mock_quic_data.AddRead( + ASYNC, ConstructServerDataPacket(read_packet_num++, request_stream_id, + false, false, response_data)); + mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read + + mock_quic_data.AddWrite( + ASYNC, + ConstructClientAckAndDataPacket( + write_packet_num++, true, GetQpackDecoderStreamId(), 1, 1, 1, false, + StreamCancellationQpackDecoderInstruction(request_stream_id))); + + mock_quic_data.AddSocketDataToFactory(&socket_factory_); + + CreateSession(); + + HttpNetworkTransaction trans(DEFAULT_PRIORITY, session_.get()); + TestCompletionCallback callback; + int rv = trans.Start(&request_, callback.callback(), net_log_.bound()); + EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); + EXPECT_THAT(callback.WaitForResult(), IsError(ERR_INVALID_RESPONSE)); +} + TEST_P(QuicNetworkTransactionTest, LargeResponseHeaders) { context_.params()->origins_to_force_quic_on.insert( HostPortPair::FromString("mail.example.org:443"));
diff --git a/remoting/ios/BUILD.gn b/remoting/ios/BUILD.gn index a90ddad..9f0191e 100644 --- a/remoting/ios/BUILD.gn +++ b/remoting/ios/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("//ios/third_party/features.gni") import("//remoting/build/config/remoting_build.gni") import("//remoting/remoting_locales.gni") @@ -84,9 +85,13 @@ deps += [ ":unittests_locale_${locale}_bundle_data" ] } - bundle_deps = [ - "//ios/third_party/material_components_ios:material_components_ios+bundle", - ] + if (ios_third_party_material_components_built_as_framework) { + deps += [ + "//ios/third_party/material_components_ios:material_components_ios+link", + ] + + bundle_deps = [ "//ios/third_party/material_components_ios:material_components_ios+bundle" ] + } } foreach(locale, remoting_locales_with_underscores) {
diff --git a/remoting/ios/app/BUILD.gn b/remoting/ios/app/BUILD.gn index a12c799..6212045 100644 --- a/remoting/ios/app/BUILD.gn +++ b/remoting/ios/app/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("//ios/third_party/features.gni") import("//remoting/build/config/remoting_build.gni") import("//remoting/ios/app/remoting_ios_tmpl.gni") @@ -111,7 +112,7 @@ } public_deps = [ - "//ios/third_party/material_components_ios:material_components_ios+link", + "//ios/third_party/material_components_ios", "//remoting/ios/facade", ] @@ -144,8 +145,14 @@ entitlements_path = "resources/Remoting.entitlements" deps = [ ":app_source_set", - "//ios/third_party/material_components_ios:material_components_ios+bundle", "//remoting/ios/app/resources:launchscreen_assets", "//remoting/ios/app/resources:remoting_icons", ] + + if (ios_third_party_material_components_built_as_framework) { + deps += [ + "//ios/third_party/material_components_ios:material_components_ios+bundle", + "//ios/third_party/material_components_ios:material_components_ios+link", + ] + } }
diff --git a/remoting/ios/app/settings/BUILD.gn b/remoting/ios/app/settings/BUILD.gn index 86347cf..6ae9b30 100644 --- a/remoting/ios/app/settings/BUILD.gn +++ b/remoting/ios/app/settings/BUILD.gn
@@ -27,9 +27,7 @@ "//ui/resources", ] - public_deps = [ - "//ios/third_party/material_components_ios:material_components_ios+link", - ] + public_deps = [ "//ios/third_party/material_components_ios" ] configs += [ "//build/config/compiler:enable_arc" ] }
diff --git a/remoting/ios/facade/BUILD.gn b/remoting/ios/facade/BUILD.gn index 4a4c0f14..f80665a 100644 --- a/remoting/ios/facade/BUILD.gn +++ b/remoting/ios/facade/BUILD.gn
@@ -25,7 +25,7 @@ deps = [ "//base", - "//ios/third_party/material_components_ios:material_components_ios+link", + "//ios/third_party/material_components_ios", "//remoting/base:authorization", "//remoting/client", "//remoting/ios/domain",
diff --git a/remoting/ios/mdc/BUILD.gn b/remoting/ios/mdc/BUILD.gn index c0589b9..69b4883 100644 --- a/remoting/ios/mdc/BUILD.gn +++ b/remoting/ios/mdc/BUILD.gn
@@ -14,9 +14,7 @@ libs = [ "UIKit.framework" ] - deps = [ - "//ios/third_party/material_components_ios:material_components_ios+link", - ] + deps = [ "//ios/third_party/material_components_ios" ] configs += [ "//build/config/compiler:enable_arc" ] }
diff --git a/remoting/ios/session/BUILD.gn b/remoting/ios/session/BUILD.gn index 305d2c1..3a964265 100644 --- a/remoting/ios/session/BUILD.gn +++ b/remoting/ios/session/BUILD.gn
@@ -16,7 +16,7 @@ deps = [ "//base", - "//ios/third_party/material_components_ios:material_components_ios+link", + "//ios/third_party/material_components_ios", "//remoting/client", "//remoting/client/display", "//remoting/client/ui",
diff --git a/services/network/host_resolver.cc b/services/network/host_resolver.cc index bd0324b..561a1c22 100644 --- a/services/network/host_resolver.cc +++ b/services/network/host_resolver.cc
@@ -36,10 +36,20 @@ parameters.dns_query_type = mojo_parameters->dns_query_type; parameters.initial_priority = mojo_parameters->initial_priority; parameters.source = mojo_parameters->source; - parameters.cache_usage = - mojo_parameters->allow_cached_response - ? net::HostResolver::ResolveHostParameters::CacheUsage::ALLOWED - : net::HostResolver::ResolveHostParameters::CacheUsage::DISALLOWED; + switch (mojo_parameters->cache_usage) { + case mojom::ResolveHostParameters::CacheUsage::ALLOWED: + parameters.cache_usage = + net::HostResolver::ResolveHostParameters::CacheUsage::ALLOWED; + break; + case mojom::ResolveHostParameters::CacheUsage::STALE_ALLOWED: + parameters.cache_usage = + net::HostResolver::ResolveHostParameters::CacheUsage::STALE_ALLOWED; + break; + case mojom::ResolveHostParameters::CacheUsage::DISALLOWED: + parameters.cache_usage = + net::HostResolver::ResolveHostParameters::CacheUsage::DISALLOWED; + break; + } parameters.include_canonical_name = mojo_parameters->include_canonical_name; parameters.loopback_only = mojo_parameters->loopback_only; parameters.is_speculative = mojo_parameters->is_speculative;
diff --git a/services/network/host_resolver_unittest.cc b/services/network/host_resolver_unittest.cc index f8004678..14c8e5e 100644 --- a/services/network/host_resolver_unittest.cc +++ b/services/network/host_resolver_unittest.cc
@@ -12,8 +12,8 @@ #include "base/optional.h" #include "base/run_loop.h" #include "base/test/bind_test_util.h" -#include "base/test/simple_test_tick_clock.h" #include "base/test/task_environment.h" +#include "base/time/time.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h" @@ -39,11 +39,12 @@ class HostResolverTest : public testing::Test { public: - HostResolverTest() - : task_environment_(base::test::TaskEnvironment::MainThreadType::IO) {} + HostResolverTest() = default; protected: - base::test::TaskEnvironment task_environment_; + base::test::TaskEnvironment task_environment_{ + base::test::TaskEnvironment::TimeSource::MOCK_TIME, + base::test::TaskEnvironment::MainThreadType::IO}; }; net::IPEndPoint CreateExpectedEndPoint(const std::string& address, @@ -401,8 +402,6 @@ kDomain, kAnyResultOriginal); inner_resolver->rules_map()[net::HostResolverSource::SYSTEM]->AddRule( kDomain, kSystemResultOriginal); - base::SimpleTestTickClock test_clock; - inner_resolver->set_tick_clock(&test_clock); HostResolver resolver(inner_resolver.get(), net::NetLog::Get()); @@ -473,8 +472,6 @@ constexpr char kResultOriginal[] = "1.2.3.4"; auto inner_resolver = std::make_unique<net::MockCachingHostResolver>(); inner_resolver->rules()->AddRule(kDomain, kResultOriginal); - base::SimpleTestTickClock test_clock; - inner_resolver->set_tick_clock(&test_clock); HostResolver resolver(inner_resolver.get(), net::NetLog::Get()); @@ -502,7 +499,8 @@ TestResolveHostClient cached_client(&pending_cached_client, &cached_run_loop); mojom::ResolveHostParametersPtr cached_parameters = mojom::ResolveHostParameters::New(); - cached_parameters->allow_cached_response = true; + cached_parameters->cache_usage = + mojom::ResolveHostParameters::CacheUsage::ALLOWED; resolver.ResolveHost(net::HostPortPair(kDomain, 80), net::NetworkIsolationKey(), std::move(cached_parameters), std::move(pending_cached_client)); @@ -519,7 +517,78 @@ &uncached_run_loop); mojom::ResolveHostParametersPtr uncached_parameters = mojom::ResolveHostParameters::New(); - uncached_parameters->allow_cached_response = false; + uncached_parameters->cache_usage = + mojom::ResolveHostParameters::CacheUsage::DISALLOWED; + resolver.ResolveHost( + net::HostPortPair(kDomain, 80), net::NetworkIsolationKey(), + std::move(uncached_parameters), std::move(pending_uncached_client)); + uncached_run_loop.Run(); + + EXPECT_EQ(net::OK, uncached_client.result_error()); + EXPECT_THAT(uncached_client.result_addresses().value().endpoints(), + testing::ElementsAre(CreateExpectedEndPoint(kResultFresh, 80))); +} + +TEST_F(HostResolverTest, CacheStaleAllowed) { + constexpr char kDomain[] = "example.com"; + constexpr char kResultOriginal[] = "1.2.3.4"; + auto inner_resolver = std::make_unique<net::MockCachingHostResolver>(); + inner_resolver->rules()->AddRule(kDomain, kResultOriginal); + + HostResolver resolver(inner_resolver.get(), net::NetLog::Get()); + + // Load result into cache. + base::RunLoop run_loop; + mojo::PendingRemote<mojom::ResolveHostClient> pending_client; + TestResolveHostClient client(&pending_client, &run_loop); + resolver.ResolveHost(net::HostPortPair(kDomain, 80), + net::NetworkIsolationKey(), nullptr, + std::move(pending_client)); + run_loop.Run(); + ASSERT_EQ(net::OK, client.result_error()); + EXPECT_THAT( + client.result_addresses().value().endpoints(), + testing::ElementsAre(CreateExpectedEndPoint(kResultOriginal, 80))); + + // Change |inner_resolver| rules to ensure results are coming from cache or + // not based on whether they resolve to the old or new value. + constexpr char kResultFresh[] = "111.222.1.1"; + inner_resolver->rules()->ClearRules(); + inner_resolver->rules()->AddRule(kDomain, kResultFresh); + + // MockHostResolver gives cache entries a 1 min TTL, so simulate a day + // passing, which is more than long enough for the cached results to become + // stale. + task_environment_.FastForwardBy(base::TimeDelta::FromDays(1)); + + // Fetching stale results returns the original cached value. + base::RunLoop cached_run_loop; + mojo::PendingRemote<mojom::ResolveHostClient> pending_cached_client; + TestResolveHostClient cached_client(&pending_cached_client, &cached_run_loop); + mojom::ResolveHostParametersPtr cached_parameters = + mojom::ResolveHostParameters::New(); + cached_parameters->cache_usage = + mojom::ResolveHostParameters::CacheUsage::STALE_ALLOWED; + resolver.ResolveHost(net::HostPortPair(kDomain, 80), + net::NetworkIsolationKey(), std::move(cached_parameters), + std::move(pending_cached_client)); + cached_run_loop.Run(); + + EXPECT_EQ(net::OK, cached_client.result_error()); + EXPECT_THAT( + cached_client.result_addresses().value().endpoints(), + testing::ElementsAre(CreateExpectedEndPoint(kResultOriginal, 80))); + + // Resolution where only non-stale cache usage is allowed returns the new + // value. + base::RunLoop uncached_run_loop; + mojo::PendingRemote<mojom::ResolveHostClient> pending_uncached_client; + TestResolveHostClient uncached_client(&pending_uncached_client, + &uncached_run_loop); + mojom::ResolveHostParametersPtr uncached_parameters = + mojom::ResolveHostParameters::New(); + uncached_parameters->cache_usage = + mojom::ResolveHostParameters::CacheUsage::ALLOWED; resolver.ResolveHost( net::HostPortPair(kDomain, 80), net::NetworkIsolationKey(), std::move(uncached_parameters), std::move(pending_uncached_client)); @@ -537,8 +606,6 @@ constexpr char kResult[] = "1.2.3.4"; auto inner_resolver = std::make_unique<net::MockCachingHostResolver>(); inner_resolver->rules()->AddRule(kDomain, kResult); - base::SimpleTestTickClock test_clock; - inner_resolver->set_tick_clock(&test_clock); HostResolver resolver(inner_resolver.get(), net::NetLog::Get()); @@ -563,7 +630,8 @@ TestResolveHostClient cached_client(&pending_cached_client, &cached_run_loop); mojom::ResolveHostParametersPtr cached_parameters = mojom::ResolveHostParameters::New(); - cached_parameters->allow_cached_response = true; + cached_parameters->cache_usage = + mojom::ResolveHostParameters::CacheUsage::ALLOWED; resolver.ResolveHost(net::HostPortPair(kDomain, 80), net::NetworkIsolationKey(), std::move(cached_parameters), std::move(pending_cached_client)); @@ -576,7 +644,8 @@ &uncached_run_loop); mojom::ResolveHostParametersPtr uncached_parameters = mojom::ResolveHostParameters::New(); - uncached_parameters->allow_cached_response = false; + uncached_parameters->cache_usage = + mojom::ResolveHostParameters::CacheUsage::DISALLOWED; resolver.ResolveHost( net::HostPortPair(kDomain, 80), net::NetworkIsolationKey(), std::move(uncached_parameters), std::move(pending_uncached_client));
diff --git a/services/network/network_service_unittest.cc b/services/network/network_service_unittest.cc index b6676a1e..86f1437e 100644 --- a/services/network/network_service_unittest.cc +++ b/services/network/network_service_unittest.cc
@@ -1410,9 +1410,15 @@ // The SpawnedTestServer does not work on iOS. #if !defined(OS_IOS) +// The test is flaky on Android. crbug.com/1045732. +#if defined(OS_ANDROID) +#define MAYBE_AIAFetching DISABLED_AIAFetching +#else +#define MAYBE_AIAFetching AIAFetching +#endif // Test |primary_network_context|, which is required by AIA fetching, among // other things. -TEST_F(NetworkServiceTestWithService, AIAFetching) { +TEST_F(NetworkServiceTestWithService, MAYBE_AIAFetching) { mojom::NetworkContextParamsPtr context_params = CreateContextParams(); context_params->primary_network_context = true;
diff --git a/services/network/public/mojom/host_resolver.mojom b/services/network/public/mojom/host_resolver.mojom index 2648dda..aa9566a 100644 --- a/services/network/public/mojom/host_resolver.mojom +++ b/services/network/public/mojom/host_resolver.mojom
@@ -219,8 +219,23 @@ // literals, etc. Source source = Source.ANY; - // If |false|, results will not come from the host cache. - bool allow_cached_response = true; + // Cache usage mode for ResolveHostRequest. Values corresponding to + // HostResolver::ResolveHostParameters::CacheUsage + enum CacheUsage { + // Results may come from the host cache if non-stale. + ALLOWED, + + // Results may come from the host cache even if stale (by expiration or + // network changes). + STALE_ALLOWED, + + // Results will not come from the host cache. + DISALLOWED, + }; + + // Indicates what DNS cache entries, if any, can be used to provide a + // response. + CacheUsage cache_usage = CacheUsage.ALLOWED; // If set, the outstanding request can be controlled, eg cancelled, via the // handle.
diff --git a/services/services_strings.grd b/services/services_strings.grd index 645008d..a5f64b7 100644 --- a/services/services_strings.grd +++ b/services/services_strings.grd
@@ -36,6 +36,7 @@ <output filename="services_strings_sq.pak" type="data_package" lang="sq" /> <output filename="services_strings_ur.pak" type="data_package" lang="ur" /> <output filename="services_strings_uz.pak" type="data_package" lang="uz" /> + <output filename="services_strings_zh-HK.pak" type="data_package" lang="zh-HK" /> <output filename="services_strings_zu.pak" type="data_package" lang="zu" /> </if> <output filename="services_strings_am.pak" type="data_package" lang="am" />
diff --git a/skia/BUILD.gn b/skia/BUILD.gn index 0b43593..38b2cae 100644 --- a/skia/BUILD.gn +++ b/skia/BUILD.gn
@@ -198,7 +198,8 @@ # assembly code contains flow control(jmp or jcc) statements. "/wd4800", # forcing value to bool 'true/false'(assigning int to bool). - "/wd5041", # out-of-line definition for constexpr static data member is not needed and is deprecated in C++17 + "/wd5041", # out-of-line definition for constexpr static data member is + # not needed and is deprecated in C++17 ] cflags_cc = [ "/std:c++17" ] } else { @@ -223,9 +224,7 @@ cflags += [ "-mfp16-format=ieee" ] } - public = [ - "//third_party/skia/include/third_party/skcms/skcms.h", - ] + public = [ "//third_party/skia/include/third_party/skcms/skcms.h" ] include_dirs = [ "//third_party/skia/include/third_party/skcms" ] sources = rebase_path(skcms_sources, ".", "//third_party/skia/third_party/skcms") @@ -645,7 +644,8 @@ if (is_win) { cflags_cc = [ "/std:c++17", - "/wd5041", # out-of-line definition for constexpr static data member is not needed and is deprecated in C++17 + "/wd5041", # out-of-line definition for constexpr static data member is + # not needed and is deprecated in C++17 ] } else { cflags_cc = [ "-std=c++17" ] @@ -660,9 +660,7 @@ sources += skia_effects_sources sources += skia_effects_imagefilter_sources if (skia_support_gpu) { - deps = [ - "//gpu/config:workaround_list", - ] + deps = [ "//gpu/config:workaround_list" ] } if (skia_use_dawn) { deps += [ "//third_party/dawn/src/dawn:dawncpp_headers" ] @@ -742,9 +740,7 @@ cflags = [] defines = [] - deps = [ - "//base", - ] + deps = [ "//base" ] if (current_cpu == "x86" || current_cpu == "x64") { sources = skia_opts.sse2_sources @@ -811,9 +807,7 @@ "-Wno-unguarded-availability", "-fobjc-arc", ] - deps = [ - "//gpu/config:workaround_list", - ] + deps = [ "//gpu/config:workaround_list" ] if (skia_use_dawn) { deps += [ "//third_party/dawn/src/dawn:dawncpp_headers" ] } @@ -827,35 +821,25 @@ "ext/data/test_fonts/android_fallback_fonts.xml", "ext/data/test_fonts/android_main_fonts.xml", ] - outputs = [ - "$root_out_dir/test_fonts/{{source_file_part}}", - ] + outputs = [ "$root_out_dir/test_fonts/{{source_file_part}}" ] } } if (is_fuchsia) { copy("copy_fuchsia_fonts_manifest") { - sources = [ - "ext/data/test_fonts/fuchsia_test_fonts_manifest.json", - ] - outputs = [ - "$root_out_dir/test_fonts/{{source_file_part}}", - ] + sources = [ "ext/data/test_fonts/fuchsia_test_fonts_manifest.json" ] + outputs = [ "$root_out_dir/test_fonts/{{source_file_part}}" ] } } if (is_mac || is_ios) { bundle_data("test_fonts_bundle_data") { - public_deps = [ - "//third_party/test_fonts", - ] + public_deps = [ "//third_party/test_fonts" ] sources = [ "$root_out_dir/test_fonts/Ahem.ttf", "ext/data/test_fonts/ChromiumAATTest.ttf", ] - outputs = [ - "{{bundle_resources_dir}}/{{source_file_part}}", - ] + outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ] } } @@ -884,9 +868,7 @@ source_set("test_fonts") { testonly = true - sources = [ - "ext/test_fonts.h", - ] + sources = [ "ext/test_fonts.h" ] deps = [ ":test_fonts_resources", "//base/test:test_support", @@ -958,9 +940,7 @@ "//third_party/fuchsia-sdk/sdk:fuchsia-fonts", "//third_party/test_fonts", ] - data_deps = [ - "//third_party/test_fonts", - ] + data_deps = [ "//third_party/test_fonts" ] } if (skia_support_skottie) { @@ -970,9 +950,7 @@ if (!is_ios) { executable("image_operations_bench") { - sources = [ - "ext/image_operations_bench.cc", - ] + sources = [ "ext/image_operations_bench.cc" ] deps = [ ":skia", @@ -983,9 +961,7 @@ executable("filter_fuzz_stub") { testonly = true - sources = [ - "tools/filter_fuzz_stub/filter_fuzz_stub.cc", - ] + sources = [ "tools/filter_fuzz_stub/filter_fuzz_stub.cc" ] deps = [ ":skia", @@ -997,7 +973,5 @@ } group("fuzzers") { - deps = [ - "//skia/tools/fuzzers", - ] + deps = [ "//skia/tools/fuzzers" ] }
diff --git a/skia/public/mojom/BUILD.gn b/skia/public/mojom/BUILD.gn index 80e7bf1..37be67e 100644 --- a/skia/public/mojom/BUILD.gn +++ b/skia/public/mojom/BUILD.gn
@@ -36,18 +36,12 @@ "skcolor.mojom", ] - public_deps = [ - "//mojo/public/mojom/base", - ] + public_deps = [ "//mojo/public/mojom/base" ] } mojom("test_interfaces") { testonly = true - sources = [ - "test/traits_test_service.mojom", - ] + sources = [ "test/traits_test_service.mojom" ] - public_deps = [ - ":mojom", - ] + public_deps = [ ":mojom" ] }
diff --git a/skia/tools/fuzzers/BUILD.gn b/skia/tools/fuzzers/BUILD.gn index b5ba615c..55ec1e30 100644 --- a/skia/tools/fuzzers/BUILD.gn +++ b/skia/tools/fuzzers/BUILD.gn
@@ -20,23 +20,15 @@ # Use public_deps and public_configs so each fuzzer_test doesn't need to # explicitly depend on "//skia" and "//skia:skia_library_config". - public_deps = [ - "//skia", - ] + public_deps = [ "//skia" ] public_configs = [ "//skia:skia_library_config" ] - deps = [ - "//base/test:test_support", - ] + deps = [ "//base/test:test_support" ] } static_library("skia_encoder_fuzzer_lib") { - sources = [ - "//third_party/skia/fuzz/FuzzEncoders.cpp", - ] + sources = [ "//third_party/skia/fuzz/FuzzEncoders.cpp" ] configs += [ "//skia:skia_library_config" ] - deps = [ - "//skia", - ] + deps = [ "//skia" ] } config("skia_test_fonts_includes_config") { @@ -55,26 +47,19 @@ configs += [ "//skia:skia_library_config" ] public_configs = [ ":skia_test_fonts_includes_config" ] - deps = [ - "//skia", - ] + deps = [ "//skia" ] } # TODO(metzman): Enable the other fuzzers that cannot yet build in Chromium. fuzzer_test("skia_region_deserialize_fuzzer") { - sources = [ - "//third_party/skia/fuzz/oss_fuzz/FuzzRegionDeserialize.cpp", - ] + sources = [ "//third_party/skia/fuzz/oss_fuzz/FuzzRegionDeserialize.cpp" ] defines = [ "IS_FUZZING_WITH_LIBFUZZER" ] - deps = [ - ":skia_fuzzer_sources", - ] + deps = [ ":skia_fuzzer_sources" ] } fuzzer_test("skia_image_filter_deserialize_fuzzer") { - sources = [ - "//third_party/skia/fuzz/oss_fuzz/FuzzImageFilterDeserialize.cpp", - ] + sources = + [ "//third_party/skia/fuzz/oss_fuzz/FuzzImageFilterDeserialize.cpp" ] defines = [ "IS_FUZZING_WITH_LIBFUZZER" ] deps = [ ":skia_fuzzer_sources", @@ -83,19 +68,13 @@ } fuzzer_test("skia_region_set_path_fuzzer") { - sources = [ - "//third_party/skia/fuzz/oss_fuzz/FuzzRegionSetPath.cpp", - ] + sources = [ "//third_party/skia/fuzz/oss_fuzz/FuzzRegionSetPath.cpp" ] defines = [ "IS_FUZZING_WITH_LIBFUZZER" ] - deps = [ - ":skia_fuzzer_sources", - ] + deps = [ ":skia_fuzzer_sources" ] } fuzzer_test("skia_textblob_deserialize_fuzzer") { - sources = [ - "//third_party/skia/fuzz/oss_fuzz/FuzzTextBlobDeserialize.cpp", - ] + sources = [ "//third_party/skia/fuzz/oss_fuzz/FuzzTextBlobDeserialize.cpp" ] defines = [ "IS_FUZZING_WITH_LIBFUZZER" ] deps = [ ":skia_fuzzer_sources", @@ -104,29 +83,19 @@ } fuzzer_test("skia_path_deserialize_fuzzer") { - sources = [ - "//third_party/skia/fuzz/oss_fuzz/FuzzPathDeserialize.cpp", - ] + sources = [ "//third_party/skia/fuzz/oss_fuzz/FuzzPathDeserialize.cpp" ] defines = [ "IS_FUZZING_WITH_LIBFUZZER" ] - deps = [ - ":skia_fuzzer_sources", - ] + deps = [ ":skia_fuzzer_sources" ] } fuzzer_test("skia_image_decode_fuzzer") { - sources = [ - "//third_party/skia/fuzz/oss_fuzz/FuzzImage.cpp", - ] + sources = [ "//third_party/skia/fuzz/oss_fuzz/FuzzImage.cpp" ] defines = [ "IS_FUZZING_WITH_LIBFUZZER" ] - deps = [ - ":skia_fuzzer_sources", - ] + deps = [ ":skia_fuzzer_sources" ] } fuzzer_test("skia_png_encoder_fuzzer") { - sources = [ - "//third_party/skia/fuzz/oss_fuzz/FuzzPNGEncoder.cpp", - ] + sources = [ "//third_party/skia/fuzz/oss_fuzz/FuzzPNGEncoder.cpp" ] defines = [ "IS_FUZZING_WITH_LIBFUZZER" ] deps = [ ":skia_encoder_fuzzer_lib", @@ -135,9 +104,7 @@ } fuzzer_test("skia_jpeg_encoder_fuzzer") { - sources = [ - "//third_party/skia/fuzz/oss_fuzz/FuzzJPEGEncoder.cpp", - ] + sources = [ "//third_party/skia/fuzz/oss_fuzz/FuzzJPEGEncoder.cpp" ] defines = [ "IS_FUZZING_WITH_LIBFUZZER" ] deps = [ ":skia_encoder_fuzzer_lib", @@ -146,9 +113,7 @@ } fuzzer_test("skia_webp_encoder_fuzzer") { - sources = [ - "//third_party/skia/fuzz/oss_fuzz/FuzzWEBPEncoder.cpp", - ] + sources = [ "//third_party/skia/fuzz/oss_fuzz/FuzzWEBPEncoder.cpp" ] defines = [ "IS_FUZZING_WITH_LIBFUZZER" ] deps = [ ":skia_encoder_fuzzer_lib", @@ -157,22 +122,14 @@ } fuzzer_test("skia_skjson_fuzzer") { - sources = [ - "//third_party/skia/fuzz/oss_fuzz/FuzzJSON.cpp", - ] + sources = [ "//third_party/skia/fuzz/oss_fuzz/FuzzJSON.cpp" ] defines = [ "IS_FUZZING_WITH_LIBFUZZER" ] - deps = [ - ":skia_fuzzer_sources", - ] + deps = [ ":skia_fuzzer_sources" ] } fuzzer_test("skia_image_decode_incremental_fuzzer") { - sources = [ - "//third_party/skia/fuzz/oss_fuzz/FuzzIncrementalImage.cpp", - ] + sources = [ "//third_party/skia/fuzz/oss_fuzz/FuzzIncrementalImage.cpp" ] defines = [ "IS_FUZZING_WITH_LIBFUZZER" ] - deps = [ - ":skia_fuzzer_sources", - ] + deps = [ ":skia_fuzzer_sources" ] } }
diff --git a/sql/BUILD.gn b/sql/BUILD.gn index f4deebea..119f1640 100644 --- a/sql/BUILD.gn +++ b/sql/BUILD.gn
@@ -87,9 +87,7 @@ "test/test_helpers.h", ] - public_deps = [ - ":sql", - ] + public_deps = [ ":sql" ] deps = [ "//base", "//testing/gtest", @@ -99,13 +97,9 @@ bundle_data("sql_unittests_bundle_data") { testonly = true - sources = [ - "test/data/recovery_387868", - ] - outputs = [ - "{{bundle_resources_dir}}/" + - "{{source_root_relative_dir}}/{{source_file_part}}", - ] + sources = [ "test/data/recovery_387868" ] + outputs = [ "{{bundle_resources_dir}}/" + + "{{source_root_relative_dir}}/{{source_file_part}}" ] } test("sql_unittests") { @@ -130,9 +124,7 @@ "transaction_unittest.cc", ] - data = [ - "test/data/", - ] + data = [ "test/data/" ] deps = [ ":sql",
diff --git a/storage/browser/BUILD.gn b/storage/browser/BUILD.gn index c8505eb..11a9476 100644 --- a/storage/browser/BUILD.gn +++ b/storage/browser/BUILD.gn
@@ -6,9 +6,7 @@ import("//testing/test.gni") mojom("mojom") { - sources = [ - "blob/mojom/blob_storage_context.mojom", - ] + sources = [ "blob/mojom/blob_storage_context.mojom" ] public_deps = [ "//mojo/public/mojom/base", @@ -249,9 +247,7 @@ } executable("dump_file_system") { - sources = [ - "file_system/dump_file_system.cc", - ] + sources = [ "file_system/dump_file_system.cc" ] deps = [ ":browser",
diff --git a/testing/BUILD.gn b/testing/BUILD.gn index 228990a..56ebf8d 100644 --- a/testing/BUILD.gn +++ b/testing/BUILD.gn
@@ -4,9 +4,7 @@ # Used by linux-gcc-rel to ensure gcc doesn't choke on clang-only flags. executable("empty_main") { - sources = [ - "empty_main.cc", - ] + sources = [ "empty_main.cc" ] } # Targets needed for isolate script to execute.
diff --git a/testing/android/broker/BUILD.gn b/testing/android/broker/BUILD.gn index c8f48e2..c34fe7c 100644 --- a/testing/android/broker/BUILD.gn +++ b/testing/android/broker/BUILD.gn
@@ -7,7 +7,6 @@ android_library("broker_java") { chromium_code = true - sources = [ - "java/src/org/chromium/test/broker/OnDeviceInstrumentationBroker.java", - ] + sources = + [ "java/src/org/chromium/test/broker/OnDeviceInstrumentationBroker.java" ] }
diff --git a/testing/android/driver/BUILD.gn b/testing/android/driver/BUILD.gn index 16dfc2a..d6f5868 100644 --- a/testing/android/driver/BUILD.gn +++ b/testing/android/driver/BUILD.gn
@@ -16,7 +16,6 @@ "//testing/android/reporter:reporter_java", ] - sources = [ - "java/src/org/chromium/test/driver/OnDeviceInstrumentationDriver.java", - ] + sources = + [ "java/src/org/chromium/test/driver/OnDeviceInstrumentationDriver.java" ] }
diff --git a/testing/android/native_test/BUILD.gn b/testing/android/native_test/BUILD.gn index 87b5f4c..8b2672a 100644 --- a/testing/android/native_test/BUILD.gn +++ b/testing/android/native_test/BUILD.gn
@@ -29,16 +29,12 @@ "native_browser_test_support.cc", "native_browser_test_support.h", ] - deps = [ - ":native_browser_test_jni_headers", - ] + deps = [ ":native_browser_test_jni_headers" ] } source_set("native_test_native_code") { testonly = true - sources = [ - "native_test_jni_onload.cc", - ] + sources = [ "native_test_jni_onload.cc" ] libs = [ "log" ] deps = [ ":native_test_support", @@ -48,12 +44,8 @@ android_library("native_main_runner_java") { testonly = true - sources = [ - "java/src/org/chromium/native_test/MainRunner.java", - ] - deps = [ - "//base:base_java", - ] + sources = [ "java/src/org/chromium/native_test/MainRunner.java" ] + deps = [ "//base:base_java" ] } android_library("native_test_java") { @@ -88,7 +80,5 @@ generate_jni("native_browser_test_jni_headers") { testonly = true - sources = [ - "java/src/org/chromium/native_test/NativeBrowserTest.java", - ] + sources = [ "java/src/org/chromium/native_test/NativeBrowserTest.java" ] }
diff --git a/testing/gmock/BUILD.gn b/testing/gmock/BUILD.gn index 1a94f6f6..c62825a 100644 --- a/testing/gmock/BUILD.gn +++ b/testing/gmock/BUILD.gn
@@ -14,9 +14,7 @@ "include/gmock/gmock-matchers.h", "include/gmock/gmock.h", ] - deps = [ - "//third_party/googletest:gmock", - ] + deps = [ "//third_party/googletest:gmock" ] public_configs = [ "//third_party/googletest:gmock_config", @@ -29,7 +27,5 @@ # into //third_party/googletest. source_set("gmock_main") { testonly = true - deps = [ - "//third_party/googletest:gmock_main", - ] + deps = [ "//third_party/googletest:gmock_main" ] }
diff --git a/testing/libfuzzer/BUILD.gn b/testing/libfuzzer/BUILD.gn index be86d4b..ff4bedc0 100644 --- a/testing/libfuzzer/BUILD.gn +++ b/testing/libfuzzer/BUILD.gn
@@ -28,9 +28,7 @@ # appropriate parameter passing to run the target in an isolate. This # directive makes this script and its dependencies to be included in the # target's isolate. - data = [ - "//tools/code_coverage/", - ] + data = [ "//tools/code_coverage/" ] } }
diff --git a/testing/libfuzzer/fuzzer_test.gni b/testing/libfuzzer/fuzzer_test.gni index 17cfddd..3ad8d15 100644 --- a/testing/libfuzzer/fuzzer_test.gni +++ b/testing/libfuzzer/fuzzer_test.gni
@@ -77,9 +77,7 @@ } } - outputs = [ - out, - ] + outputs = [ out ] deps = [ "//testing/libfuzzer:seed_corpus" ] + seed_corpus_deps } @@ -96,12 +94,8 @@ if (defined(invoker.dict)) { # Copy dictionary to output. copy(target_name + "_dict_copy") { - sources = [ - invoker.dict, - ] - outputs = [ - "$root_build_dir/" + target_name + ".dict", - ] + sources = [ invoker.dict ] + outputs = [ "$root_build_dir/" + target_name + ".dict" ] } test_deps += [ ":" + target_name + "_dict_copy" ] } @@ -148,9 +142,7 @@ args += invoker.environment_variables } - outputs = [ - "$root_build_dir/$config_file_name", - ] + outputs = [ "$root_build_dir/$config_file_name" ] } test_deps += [ ":" + config_file_name ] } @@ -182,9 +174,7 @@ ] + _full_deps } - outputs = [ - "$root_build_dir/$owners_file_name", - ] + outputs = [ "$root_build_dir/$owners_file_name" ] } test_data_deps += [ ":" + owners_file_name ] }
diff --git a/testing/libfuzzer/fuzzers/BUILD.gn b/testing/libfuzzer/fuzzers/BUILD.gn index f34287e4..1403961 100644 --- a/testing/libfuzzer/fuzzers/BUILD.gn +++ b/testing/libfuzzer/fuzzers/BUILD.gn
@@ -13,16 +13,12 @@ } fuzzer_test("empty_fuzzer") { - sources = [ - "empty_fuzzer.cc", - ] + sources = [ "empty_fuzzer.cc" ] additional_configs = [ "//testing/libfuzzer:no_clusterfuzz" ] } fuzzer_test("courgette_fuzzer") { - sources = [ - "courgette_fuzzer.cc", - ] + sources = [ "courgette_fuzzer.cc" ] deps = [ "//base", "//courgette:courgette_lib", @@ -30,9 +26,7 @@ } fuzzer_test("language_detection_fuzzer") { - sources = [ - "language_detection_fuzzer.cc", - ] + sources = [ "language_detection_fuzzer.cc" ] deps = [ "//base", "//components/translate/core/language_detection:language_detection", @@ -40,29 +34,19 @@ } fuzzer_test("snappy_compress_fuzzer") { - sources = [ - "snappy_compress_fuzzer.cc", - ] - deps = [ - "//third_party/snappy:snappy", - ] + sources = [ "snappy_compress_fuzzer.cc" ] + deps = [ "//third_party/snappy:snappy" ] seed_corpus = "//third_party/snappy/src/testdata" } fuzzer_test("snappy_uncompress_fuzzer") { - sources = [ - "snappy_uncompress_fuzzer.cc", - ] - deps = [ - "//third_party/snappy:snappy", - ] + sources = [ "snappy_uncompress_fuzzer.cc" ] + deps = [ "//third_party/snappy:snappy" ] seed_corpus = "//third_party/snappy/src/testdata" } fuzzer_test("template_url_parser_fuzzer") { - sources = [ - "template_url_parser_fuzzer.cc", - ] + sources = [ "template_url_parser_fuzzer.cc" ] deps = [ "//base", "//base:i18n", @@ -77,9 +61,7 @@ } fuzzer_test("url_parse_proto_fuzzer") { - sources = [ - "url_parse_proto_fuzzer.cc", - ] + sources = [ "url_parse_proto_fuzzer.cc" ] deps = [ ":url_proto", "//base", @@ -90,27 +72,17 @@ } proto_library("url_proto") { - sources = [ - "url.proto", - ] + sources = [ "url.proto" ] } fuzzer_test("usrsctp_fuzzer") { - sources = [ - "usrsctp_fuzzer.cc", - ] - deps = [ - "//third_party/usrsctp", - ] + sources = [ "usrsctp_fuzzer.cc" ] + deps = [ "//third_party/usrsctp" ] } fuzzer_test("libsrtp_fuzzer") { - sources = [ - "libsrtp_fuzzer.cc", - ] - deps = [ - "//third_party/libsrtp", - ] + sources = [ "libsrtp_fuzzer.cc" ] + deps = [ "//third_party/libsrtp" ] libfuzzer_options = [ "max_len=1500" ] } @@ -121,9 +93,7 @@ ] fuzzer_test("gfx_png_image_fuzzer") { - sources = [ - "gfx_png_image_fuzzer.cc", - ] + sources = [ "gfx_png_image_fuzzer.cc" ] deps = [ "//base", "//ui/gfx", @@ -133,20 +103,14 @@ } fuzzer_test("libxml_xml_read_memory_fuzzer") { - sources = [ - "libxml_xml_read_memory_fuzzer.cc", - ] - deps = [ - "//third_party/libxml:libxml", - ] + sources = [ "libxml_xml_read_memory_fuzzer.cc" ] + deps = [ "//third_party/libxml:libxml" ] dict = "//third_party/libxml/fuzz/xml.dict" seed_corpus = "//third_party/libxml/fuzz/seed_corpus" } fuzzer_test("libpng_progressive_read_fuzzer") { - sources = [ - "libpng_read_fuzzer.cc", - ] + sources = [ "libpng_read_fuzzer.cc" ] deps = [ "//base", "//third_party/libpng", @@ -157,9 +121,7 @@ fuzzer_test("v8_script_parser_fuzzer") { sources = [] - deps = [ - "//v8:parser_fuzzer", - ] + deps = [ "//v8:parser_fuzzer" ] dict = "dicts/generated/javascript.dict" seed_corpus = "//v8/test/mjsunit/regress/" libfuzzer_options = [ "only_ascii=1" ] @@ -168,18 +130,14 @@ fuzzer_test("v8_json_parser_fuzzer") { sources = [] - deps = [ - "//v8:json_fuzzer", - ] + deps = [ "//v8:json_fuzzer" ] dict = "dicts/json.dict" environment_variables = [ "AFL_DRIVER_DONT_DEFER=1" ] } fuzzer_test("v8_regexp_parser_fuzzer") { sources = [] - deps = [ - "//v8:regexp_fuzzer", - ] + deps = [ "//v8:regexp_fuzzer" ] dict = "dicts/regexp.dict" seed_corpus = "//v8/test/fuzzer/regexp/" libfuzzer_options = [ "max_len=64" ] @@ -188,17 +146,13 @@ fuzzer_test("v8_regexp_builtins_fuzzer") { sources = [] - deps = [ - "//v8:regexp_builtins_fuzzer", - ] + deps = [ "//v8:regexp_builtins_fuzzer" ] environment_variables = [ "AFL_DRIVER_DONT_DEFER=1" ] } fuzzer_test("v8_multi_return_fuzzer") { sources = [] - deps = [ - "//v8:multi_return_fuzzer", - ] + deps = [ "//v8:multi_return_fuzzer" ] asan_options = [ "allow_user_segv_handler=1", "handle_sigtrap=1", @@ -210,9 +164,7 @@ fuzzer_test("v8_wasm_code_fuzzer") { sources = [] - deps = [ - "//v8:wasm_code_fuzzer", - ] + deps = [ "//v8:wasm_code_fuzzer" ] libfuzzer_options = [ "max_len=500" ] asan_options = [ "allow_user_segv_handler=1", @@ -225,9 +177,7 @@ fuzzer_test("v8_wasm_compile_fuzzer") { sources = [] - deps = [ - "//v8:wasm_compile_fuzzer", - ] + deps = [ "//v8:wasm_compile_fuzzer" ] libfuzzer_options = [ "max_len=500" ] asan_options = [ "allow_user_segv_handler=1", @@ -240,9 +190,7 @@ fuzzer_test("v8_wasm_fuzzer") { sources = [] - deps = [ - "//v8:wasm_fuzzer", - ] + deps = [ "//v8:wasm_fuzzer" ] dict = "dicts/v8_wasm.dict" seed_corpus = "//v8/test/fuzzer/wasm_corpus/" libfuzzer_options = [ "max_len=500" ] @@ -257,9 +205,7 @@ fuzzer_test("v8_wasm_async_fuzzer") { sources = [] - deps = [ - "//v8:wasm_async_fuzzer", - ] + deps = [ "//v8:wasm_async_fuzzer" ] dict = "dicts/v8_wasm.dict" seed_corpus = "//v8/test/fuzzer/wasm_corpus/" libfuzzer_options = [ "max_len=500" ] @@ -273,20 +219,14 @@ } fuzzer_test("convert_woff2ttf_fuzzer") { - sources = [ - "convert_woff2ttf_fuzzer.cc", - ] - deps = [ - "//third_party/woff2:woff2_dec", - ] + sources = [ "convert_woff2ttf_fuzzer.cc" ] + deps = [ "//third_party/woff2:woff2_dec" ] seed_corpus = "//testing/libfuzzer/fuzzers/woff2_corpus" libfuzzer_options = [ "max_len=803500" ] } fuzzer_test("flatbuffers_verifier_fuzzer") { - sources = [ - "flatbuffers_verifier_fuzzer.cc", - ] + sources = [ "flatbuffers_verifier_fuzzer.cc" ] deps = [ "//third_party/flatbuffers", "//third_party/flatbuffers:flatbuffers_samplebuffer", @@ -301,9 +241,7 @@ "skia_path_common.h", "skia_path_fuzzer.cc", ] - deps = [ - "//skia", - ] + deps = [ "//skia" ] libfuzzer_options = [ "max_len=256" ] if (is_debug) { # Disabled due to crashing on SkASSERT (crbug.com/642750, crbug.com/643275). @@ -329,21 +267,15 @@ } fuzzer_test("prtime_fuzzer") { - sources = [ - "prtime_fuzzer.cc", - ] - deps = [ - "//base", - ] + sources = [ "prtime_fuzzer.cc" ] + deps = [ "//base" ] dict = "dicts/prtime.dict" libfuzzer_options = [ "max_len=1024" ] } fuzzer_test("angle_translator_fuzzer") { sources = [] - deps = [ - "//third_party/angle:translator_fuzzer", - ] + deps = [ "//third_party/angle:translator_fuzzer" ] libfuzzer_options = [ "max_len=1000" ] dict = "dicts/webgl-glsl.dict" } @@ -351,28 +283,18 @@ if (target_cpu == "x86" || target_cpu == "x64") { fuzzer_test("swiftshader_vertex_routine_fuzzer") { sources = [] - deps = [ - "//third_party/swiftshader:vertex_routine_fuzzer", - ] + deps = [ "//third_party/swiftshader:vertex_routine_fuzzer" ] } } fuzzer_test("sha1_fuzzer") { - sources = [ - "sha1_fuzzer.cc", - ] - deps = [ - "//base", - ] + sources = [ "sha1_fuzzer.cc" ] + deps = [ "//base" ] } fuzzer_test("hash_fuzzer") { - sources = [ - "hash_fuzzer.cc", - ] - deps = [ - "//base", - ] + sources = [ "hash_fuzzer.cc" ] + deps = [ "//base" ] } action("gen_javascript_parser_proto") { @@ -385,9 +307,7 @@ script = "generate_javascript_parser_proto.py" - sources = [ - "dicts/javascript_parser_proto.dict", - ] + sources = [ "dicts/javascript_parser_proto.dict" ] outputs = [ "$target_gen_dir/javascript_parser.proto", @@ -399,9 +319,7 @@ } proto_library("javascript_parser_proto") { - sources = [ - "$target_gen_dir/javascript_parser.proto", - ] + sources = [ "$target_gen_dir/javascript_parser.proto" ] proto_deps = [ ":gen_javascript_parser_proto" ] proto_out_dir = "" } @@ -422,9 +340,7 @@ } fuzzer_test("v8_fully_instrumented_fuzzer") { - sources = [ - "v8_fuzzer.cc", - ] + sources = [ "v8_fuzzer.cc" ] deps = [ "//base", "//v8:v8", @@ -441,9 +357,7 @@ } fuzzer_test("skia_image_filter_proto_fuzzer") { - sources = [ - "skia_image_filter_proto_fuzzer.cc", - ] + sources = [ "skia_image_filter_proto_fuzzer.cc" ] deps = [ "//base", @@ -456,11 +370,7 @@ } fuzzer_test("libyuv_scale_fuzzer") { - sources = [ - "libyuv_scale_fuzzer.cc", - ] + sources = [ "libyuv_scale_fuzzer.cc" ] - deps = [ - "//third_party/libyuv", - ] + deps = [ "//third_party/libyuv" ] }
diff --git a/testing/libfuzzer/fuzzers/mach/BUILD.gn b/testing/libfuzzer/fuzzers/mach/BUILD.gn index 151202d..1d3a58d2 100644 --- a/testing/libfuzzer/fuzzers/mach/BUILD.gn +++ b/testing/libfuzzer/fuzzers/mach/BUILD.gn
@@ -6,9 +6,7 @@ proto_library("proto") { proto_in_dir = "//" - sources = [ - "mach_message.proto", - ] + sources = [ "mach_message.proto" ] } source_set("converter") { @@ -16,10 +14,6 @@ "mach_message_converter.cc", "mach_message_converter.h", ] - public_deps = [ - ":proto", - ] - deps = [ - "//base", - ] + public_deps = [ ":proto" ] + deps = [ "//base" ] }
diff --git a/testing/libfuzzer/proto/BUILD.gn b/testing/libfuzzer/proto/BUILD.gn index 119a8ab..97161d15 100644 --- a/testing/libfuzzer/proto/BUILD.gn +++ b/testing/libfuzzer/proto/BUILD.gn
@@ -6,9 +6,7 @@ proto_library("json_proto") { proto_in_dir = "//" - sources = [ - "json.proto", - ] + sources = [ "json.proto" ] } source_set("json_proto_converter") { @@ -16,9 +14,7 @@ "json_proto_converter.cc", "json_proto_converter.h", ] - deps = [ - ":json_proto", - ] + deps = [ ":json_proto" ] } static_library("skia_image_filter_converter") { @@ -43,7 +39,5 @@ } } proto_library("skia_image_filter_proto") { - sources = [ - "skia_image_filter.proto", - ] + sources = [ "skia_image_filter.proto" ] }
diff --git a/testing/libfuzzer/tests/BUILD.gn b/testing/libfuzzer/tests/BUILD.gn index 3bf43e2..83e024d 100644 --- a/testing/libfuzzer/tests/BUILD.gn +++ b/testing/libfuzzer/tests/BUILD.gn
@@ -4,16 +4,14 @@ # # Fuzzing Infrastructure Tests -import("//testing/test.gni") import("//testing/libfuzzer/fuzzer_test.gni") +import("//testing/test.gni") # TODO(crbug.com/906751): Get the tests working on Windows. Disable them for now -# becaue they cause the Windows clang ToT builder to fail. +# because they cause the Windows clang ToT builder to fail. if (!is_win) { test("libfuzzer_tests") { - sources = [ - "fuzzer_launcher_test.cc", - ] + sources = [ "fuzzer_launcher_test.cc" ] deps = [ ":test_config_and_dict", ":test_config_and_seed_corpus", @@ -34,17 +32,13 @@ } fuzzer_test("test_dict_only") { - sources = [ - "../fuzzers/empty_fuzzer.cc", - ] + sources = [ "../fuzzers/empty_fuzzer.cc" ] dict = "test.dict" additional_configs = [ "//testing/libfuzzer:no_clusterfuzz" ] } fuzzer_test("test_config_only") { - sources = [ - "../fuzzers/empty_fuzzer.cc", - ] + sources = [ "../fuzzers/empty_fuzzer.cc" ] libfuzzer_options = [ "some_test_option=test_value", "max_len=1024", @@ -53,9 +47,7 @@ } fuzzer_test("test_config_and_dict") { - sources = [ - "../fuzzers/empty_fuzzer.cc", - ] + sources = [ "../fuzzers/empty_fuzzer.cc" ] dict = "test.dict" libfuzzer_options = [ "max_len=random(1337, 31337)", @@ -66,9 +58,7 @@ } fuzzer_test("test_config_and_seed_corpus") { - sources = [ - "../fuzzers/empty_fuzzer.cc", - ] + sources = [ "../fuzzers/empty_fuzzer.cc" ] seed_corpus = "test_corpus" libfuzzer_options = [ "some_test_option=test_value", @@ -78,9 +68,7 @@ } fuzzer_test("test_config_and_seed_corpuses") { - sources = [ - "../fuzzers/empty_fuzzer.cc", - ] + sources = [ "../fuzzers/empty_fuzzer.cc" ] seed_corpuses = [ "test_corpus", "test_corpus_2", @@ -93,27 +81,17 @@ } fuzzer_test("test_dict_from_subdir") { - sources = [ - "../fuzzers/empty_fuzzer.cc", - ] + sources = [ "../fuzzers/empty_fuzzer.cc" ] dict = "dicts_subdir/test_subdir.dict" additional_configs = [ "//testing/libfuzzer:no_clusterfuzz" ] } copy("check_fuzzer_config") { - sources = [ - "check_fuzzer_config.py", - ] - outputs = [ - "$root_build_dir/check_fuzzer_config.py", - ] + sources = [ "check_fuzzer_config.py" ] + outputs = [ "$root_build_dir/check_fuzzer_config.py" ] } copy("check_seed_corpus_archive") { - sources = [ - "check_seed_corpus_archive.py", - ] - outputs = [ - "$root_build_dir/check_seed_corpus_archive.py", - ] + sources = [ "check_seed_corpus_archive.py" ] + outputs = [ "$root_build_dir/check_seed_corpus_archive.py" ] }
diff --git a/testing/scripts/run_rendering_benchmark_with_gated_performance.py b/testing/scripts/run_rendering_benchmark_with_gated_performance.py index 5a0c618a..e0cb8a0 100755 --- a/testing/scripts/run_rendering_benchmark_with_gated_performance.py +++ b/testing/scripts/run_rendering_benchmark_with_gated_performance.py
@@ -86,48 +86,62 @@ return (self.output, self.return_code) -def interpret_run_benchmark_results(upper_limit_data, - isolated_script_test_output, benchmark): - out_dir_path = os.path.dirname(isolated_script_test_output) - output_path = os.path.join(out_dir_path, benchmark, 'test_results.json') - result_recorder = ResultRecorder() +def parse_csv_results(csv_obj, upper_limit_data): + """ Parses the raw CSV data + Convers the csv_obj into an array of valid values for averages and + confidence intervals based on the described upper_limits. - with open(output_path, 'r+') as resultsFile: - initialOut = json.load(resultsFile) - result_recorder.set_tests(initialOut) + Args: + csv_obj: An array of rows (dict) descriving the CSV results + upper_limit_data: A dictionary containing the upper limits of each story - results_path = os.path.join(out_dir_path, benchmark, 'perf_results.csv') - values_per_story = {} + Raturns: + A dictionary which has the stories as keys and an array of confidence + intervals and valid averages as data. + """ + values_per_story = {} + for row in csv_obj: + # For now only frame_times is used for testing representatives' + # performance. + if row['name'] != 'frame_times': + continue + story_name = row['stories'] + if (story_name not in upper_limit_data): + continue + if story_name not in values_per_story: + values_per_story[story_name] = { + 'averages': [], + 'ci_095': [] + } - with open(results_path) as csv_file: - reader = csv.DictReader(csv_file) - for row in reader: - # For now only frame_times is used for testing representatives' - # performance. - if row['name'] != 'frame_times': - continue - story_name = row['stories'] - if (story_name not in upper_limit_data): - continue - if story_name not in values_per_story: - values_per_story[story_name] = { - 'averages': [], - 'ci_095': [] - } + if (row['avg'] == '' or row['count'] == 0): + continue + values_per_story[story_name]['ci_095'].append(float(row['ci_095'])) - if (row['avg'] == '' or row['count'] == 0): - continue - values_per_story[story_name]['ci_095'].append(float(row['ci_095'])) + upper_limit_ci = upper_limit_data[story_name]['ci_095'] + # Only average values which are not noisy will be used + if (float(row['ci_095']) <= upper_limit_ci * CI_ERROR_MARGIN): + values_per_story[story_name]['averages'].append(float(row['avg'])) - upper_limit_ci = upper_limit_data[story_name]['ci_095'] - # Only average values which are not noisy will be used - if (float(row['ci_095']) <= upper_limit_ci * CI_ERROR_MARGIN): - values_per_story[story_name]['averages'].append(float(row['avg'])) + return values_per_story - # Clearing the result of run_benchmark and write the gated perf results - resultsFile.seek(0) - resultsFile.truncate(0) +def compare_values(values_per_story, upper_limit_data, benchmark, + result_recorder): + """ Parses the raw CSV data + Compares the values in values_per_story with the upper_limit_data and + determines if the story passes or fails. + Args: + csv_obj: An array of rows (dict) descriving the CSV results + upper_limit_data: A dictionary containing the upper limits of each story + benchmark: A String for the benchmark (e.g. rendering.desktop) used only + for printing the results. + result_recorder: A ResultRecorder containing the initial failures if there + are stories which failed prior to comparing values (e.g. GPU crashes). + + Raturns: + A ResultRecorder containing the passes and failures. + """ for story_name in values_per_story: if len(values_per_story[story_name]['ci_095']) == 0: print(('[ FAILED ] {}/{} has no valid values for frame_times. Check ' + @@ -158,6 +172,28 @@ return result_recorder +def interpret_run_benchmark_results(upper_limit_data, + isolated_script_test_output, benchmark): + out_dir_path = os.path.dirname(isolated_script_test_output) + output_path = os.path.join(out_dir_path, benchmark, 'test_results.json') + result_recorder = ResultRecorder() + + with open(output_path, 'r+') as resultsFile: + initialOut = json.load(resultsFile) + result_recorder.set_tests(initialOut) + results_path = os.path.join(out_dir_path, benchmark, 'perf_results.csv') + + with open(results_path) as csv_file: + csv_obj = csv.DictReader(csv_file) + values_per_story = parse_csv_results(csv_obj, upper_limit_data) + + # Clearing the result of run_benchmark and write the gated perf results + resultsFile.seek(0) + resultsFile.truncate(0) + + return compare_values(values_per_story, upper_limit_data, benchmark, + result_recorder) + def replace_arg_values(args, key_value_pairs): for index in range(0, len(args)): for (key, value) in key_value_pairs:
diff --git a/testing/test.gni b/testing/test.gni index 6d04cb1..7969720 100644 --- a/testing/test.gni +++ b/testing/test.gni
@@ -79,9 +79,7 @@ testonly = true dist_dir = "$root_out_dir/$target_name" binary = _exec_output - deps = [ - ":$_exec_target", - ] + deps = [ ":$_exec_target" ] if (defined(invoker.extra_dist_files)) { extra_files = invoker.extra_dist_files } @@ -112,9 +110,7 @@ unwind_table_asset(_unwind_table_asset_name) { testonly = true library_target = _library_target - deps = [ - ":$_library_target", - ] + deps = [ ":$_library_target" ] } } @@ -170,9 +166,7 @@ # Dep needed for the test runner .runtime_deps file to pick up data # deps from the forward_variables_from(invoker, "*") on the library. - data_deps = [ - ":$_library_target", - ] + data_deps = [ ":$_library_target" ] } test_name = _output_name test_suite = _output_name @@ -188,9 +182,7 @@ testonly = true executable = "$root_build_dir/bin/run_$_output_name" wrapper_script = "$root_build_dir/$_output_name" - deps = [ - ":$_test_runner_target", - ] + deps = [ ":$_test_runner_target" ] if (_use_raw_android_executable) { deps += [ ":$_dist_target" ] } else { @@ -218,9 +210,7 @@ package = ":$_pkg_target" package_name_override = _output_name - deps = [ - "//testing/buildbot/filters:fuchsia_filters", - ] + deps = [ "//testing/buildbot/filters:fuchsia_filters" ] } fuchsia_package(_pkg_target) { @@ -252,12 +242,8 @@ bundle_data(_resources_bundle_data) { visibility = [ ":$_test_target" ] - sources = [ - "//testing/gtest_ios/Default.png", - ] - outputs = [ - "{{bundle_resources_dir}}/{{source_file_part}}", - ] + sources = [ "//testing/gtest_ios/Default.png" ] + outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ] } if (enable_run_ios_unittests_with_xctest) {
diff --git a/third_party/adobe/flash/BUILD.gn b/third_party/adobe/flash/BUILD.gn index 87ef093b..26e9f135 100644 --- a/third_party/adobe/flash/BUILD.gn +++ b/third_party/adobe/flash/BUILD.gn
@@ -51,12 +51,8 @@ } copy("flapper_version_h") { - sources = [ - flapper_version_h_file, - ] - outputs = [ - "$root_gen_dir/{{source_file_part}}", - ] + sources = [ flapper_version_h_file ] + outputs = [ "$root_gen_dir/{{source_file_part}}" ] } if (flapper_binary_files == []) { @@ -66,8 +62,6 @@ } else { copy("flapper_binaries") { sources = flapper_binary_files - outputs = [ - "$root_out_dir/PepperFlash/{{source_file_part}}", - ] + outputs = [ "$root_out_dir/PepperFlash/{{source_file_part}}" ] } }
diff --git a/third_party/afl/BUILD.gn b/third_party/afl/BUILD.gn index 01e4ce1..a446d93 100644 --- a/third_party/afl/BUILD.gn +++ b/third_party/afl/BUILD.gn
@@ -32,9 +32,7 @@ "//build/config/gcc:symbol_visibility_hidden", ] - sources = [ - "src/llvm_mode/afl-llvm-rt.o.c", - ] + sources = [ "src/llvm_mode/afl-llvm-rt.o.c" ] } afl_headers = [ @@ -68,26 +66,16 @@ copy("afl-cmin") { # afl-cmin is a bash script used to minimize the corpus, therefore we can just # copy it over. - sources = [ - "src/afl-cmin", - ] - outputs = [ - "$root_build_dir/{{source_file_part}}", - ] - deps = [ - ":afl-showmap", - ] + sources = [ "src/afl-cmin" ] + outputs = [ "$root_build_dir/{{source_file_part}}" ] + deps = [ ":afl-showmap" ] } copy("afl_docs") { # Copy the docs folder. This is so that we can use a real value for for # -DDOC_PATH when compiling. - sources = [ - "src/docs", - ] - outputs = [ - "$root_build_dir/afl/{{source_file_part}}", - ] + sources = [ "src/docs" ] + outputs = [ "$root_build_dir/afl/{{source_file_part}}" ] } executable("afl-fuzz") { @@ -97,9 +85,7 @@ no_default_deps = true - sources = [ - "src/afl-fuzz.c", - ] + sources = [ "src/afl-fuzz.c" ] sources += afl_headers } @@ -109,9 +95,7 @@ no_default_deps = true - sources = [ - "src/afl-tmin.c", - ] + sources = [ "src/afl-tmin.c" ] sources += afl_headers } @@ -121,8 +105,6 @@ no_default_deps = true - sources = [ - "src/afl-showmap.c", - ] + sources = [ "src/afl-showmap.c" ] sources += afl_headers }
diff --git a/third_party/android_protobuf/BUILD.gn b/third_party/android_protobuf/BUILD.gn index 3d8464d8..5ad40472 100644 --- a/third_party/android_protobuf/BUILD.gn +++ b/third_party/android_protobuf/BUILD.gn
@@ -28,9 +28,7 @@ ":android_protoc_warnings", ] - deps = [ - "//third_party/zlib", - ] + deps = [ "//third_party/zlib" ] sources = [ "src/src/google/protobuf/compiler/code_generator.cc",
diff --git a/third_party/blink/API_OWNERS b/third_party/blink/API_OWNERS index a5b22d5..b310740 100644 --- a/third_party/blink/API_OWNERS +++ b/third_party/blink/API_OWNERS
@@ -8,7 +8,6 @@ foolip@chromium.org jochen@chromium.org mkwst@chromium.org -ojan@chromium.org rbyers@chromium.org slightlyoff@chromium.org tkent@chromium.org
diff --git a/third_party/blink/common/input/web_gesture_event.cc b/third_party/blink/common/input/web_gesture_event.cc index 85a0dc6..877efd0 100644 --- a/third_party/blink/common/input/web_gesture_event.cc +++ b/third_party/blink/common/input/web_gesture_event.cc
@@ -11,17 +11,33 @@ } float WebGestureEvent::DeltaXInRootFrame() const { - if (type_ == WebInputEvent::kGestureScrollBegin) - return data.scroll_begin.delta_x_hint / frame_scale_; - DCHECK(type_ == WebInputEvent::kGestureScrollUpdate); - return data.scroll_update.delta_x / frame_scale_; + float delta_x = (type_ == WebInputEvent::kGestureScrollBegin) + ? data.scroll_begin.delta_x_hint + : data.scroll_update.delta_x; + + bool is_percent = + (type_ == WebInputEvent::kGestureScrollBegin) + ? data.scroll_begin.delta_hint_units == + ui::input_types::ScrollGranularity::kScrollByPercentage + : data.scroll_update.delta_units == + ui::input_types::ScrollGranularity::kScrollByPercentage; + + return is_percent ? delta_x : delta_x / frame_scale_; } float WebGestureEvent::DeltaYInRootFrame() const { - if (type_ == WebInputEvent::kGestureScrollBegin) - return data.scroll_begin.delta_y_hint / frame_scale_; - DCHECK(type_ == WebInputEvent::kGestureScrollUpdate); - return data.scroll_update.delta_y / frame_scale_; + float delta_y = (type_ == WebInputEvent::kGestureScrollBegin) + ? data.scroll_begin.delta_y_hint + : data.scroll_update.delta_y; + + bool is_percent = + (type_ == WebInputEvent::kGestureScrollBegin) + ? data.scroll_begin.delta_hint_units == + ui::input_types::ScrollGranularity::kScrollByPercentage + : data.scroll_update.delta_units == + ui::input_types::ScrollGranularity::kScrollByPercentage; + + return is_percent ? delta_y : delta_y / frame_scale_; } ui::input_types::ScrollGranularity WebGestureEvent::DeltaUnits() const { @@ -113,12 +129,18 @@ if (frame_scale_ != 1) { switch (type_) { case WebInputEvent::kGestureScrollBegin: - data.scroll_begin.delta_x_hint /= frame_scale_; - data.scroll_begin.delta_y_hint /= frame_scale_; + if (data.scroll_begin.delta_hint_units != + ui::input_types::ScrollGranularity::kScrollByPercentage) { + data.scroll_begin.delta_x_hint /= frame_scale_; + data.scroll_begin.delta_y_hint /= frame_scale_; + } break; case WebInputEvent::kGestureScrollUpdate: - data.scroll_update.delta_x /= frame_scale_; - data.scroll_update.delta_y /= frame_scale_; + if (data.scroll_update.delta_units != + ui::input_types::ScrollGranularity::kScrollByPercentage) { + data.scroll_update.delta_x /= frame_scale_; + data.scroll_update.delta_y /= frame_scale_; + } break; case WebInputEvent::kGestureTwoFingerTap: data.two_finger_tap.first_finger_width /= frame_scale_;
diff --git a/third_party/blink/public/devtools_protocol/BUILD.gn b/third_party/blink/public/devtools_protocol/BUILD.gn index 848c989..1b5e0e6 100644 --- a/third_party/blink/public/devtools_protocol/BUILD.gn +++ b/third_party/blink/public/devtools_protocol/BUILD.gn
@@ -13,9 +13,7 @@ v8_inspector_js_protocol, ] _stamp = "$_protocol_out_dir/browser_protocol.stamp" - outputs = [ - _stamp, - ] + outputs = [ _stamp ] args = [ "--stamp", @@ -26,9 +24,7 @@ } action("protocol_version") { - deps = [ - ":protocol_compatibility_check", - ] + deps = [ ":protocol_compatibility_check" ] script = _inspector_protocol_dir + "/concatenate_protocols.py" inputs = [ @@ -36,9 +32,7 @@ v8_inspector_js_protocol, ] output_file = "$_protocol_out_dir/protocol.json" - outputs = [ - output_file, - ] + outputs = [ output_file ] args = [ rebase_path("browser_protocol.pdl", root_build_dir),
diff --git a/third_party/blink/public/mojom/frame/frame.mojom b/third_party/blink/public/mojom/frame/frame.mojom index 61468e89..ba1f9c9 100644 --- a/third_party/blink/public/mojom/frame/frame.mojom +++ b/third_party/blink/public/mojom/frame/frame.mojom
@@ -441,4 +441,12 @@ // Sent to the remote frame placeholder in the parent process to request // scrolling. ScrollRectToVisible(gfx.mojom.Rect rect, ScrollIntoViewParams params); + + // Notifies this remote frame that its corresponding document has started + // loading. + DidStartLoading(); + + // Notifies this remote frame that its corresponding document has completed + // loading. + DidStopLoading(); };
diff --git a/third_party/blink/public/mojom/indexeddb/indexeddb.mojom b/third_party/blink/public/mojom/indexeddb/indexeddb.mojom index 32095d7..c018e67 100644 --- a/third_party/blink/public/mojom/indexeddb/indexeddb.mojom +++ b/third_party/blink/public/mojom/indexeddb/indexeddb.mojom
@@ -4,7 +4,6 @@ module blink.mojom; -import "mojo/public/mojom/base/file_path.mojom"; import "mojo/public/mojom/base/string16.mojom"; import "mojo/public/mojom/base/string16.mojom"; import "mojo/public/mojom/base/time.mojom"; @@ -196,7 +195,6 @@ }; struct IDBFileInfo { - mojo_base.mojom.FilePath path; mojo_base.mojom.String16 name; mojo_base.mojom.Time last_modified; };
diff --git a/third_party/blink/public/platform/web_blob_info.h b/third_party/blink/public/platform/web_blob_info.h index 5712ef8..82f59c0c 100644 --- a/third_party/blink/public/platform/web_blob_info.h +++ b/third_party/blink/public/platform/web_blob_info.h
@@ -23,7 +23,6 @@ uint64_t size, mojo::ScopedMessagePipeHandle); BLINK_EXPORT WebBlobInfo(const WebString& uuid, - const WebString& file_path, const WebString& file_name, const WebString& type, const base::Optional<base::Time>& last_modified, @@ -38,7 +37,6 @@ const WebString& type, uint64_t size); BLINK_EXPORT static WebBlobInfo FileForTesting(const WebString& uuid, - const WebString& file_path, const WebString& file_name, const WebString& type); @@ -51,7 +49,6 @@ const WebString& Uuid() const { return uuid_; } const WebString& GetType() const { return type_; } uint64_t size() const { return size_; } - const WebString& FilePath() const { return file_path_; } const WebString& FileName() const { return file_name_; } base::Optional<base::Time> LastModified() const { return last_modified_; } BLINK_EXPORT mojo::ScopedMessagePipeHandle CloneBlobHandle() const; @@ -59,7 +56,6 @@ #if INSIDE_BLINK BLINK_EXPORT WebBlobInfo(scoped_refptr<BlobDataHandle>); BLINK_EXPORT WebBlobInfo(scoped_refptr<BlobDataHandle>, - const WebString& file_path, const WebString& file_name, const base::Optional<base::Time>& last_modified); // TODO(mek): Get rid of these constructors after ensuring that the @@ -68,7 +64,6 @@ const WebString& type, uint64_t size); BLINK_EXPORT WebBlobInfo(scoped_refptr<BlobDataHandle>, - const WebString& file_path, const WebString& file_name, const WebString& type, const base::Optional<base::Time>& last_modified, @@ -82,7 +77,6 @@ WebString type_; // MIME type uint64_t size_; WebPrivatePtr<BlobDataHandle> blob_handle_; - WebString file_path_; // Only for File WebString file_name_; // Only for File base::Optional<base::Time> last_modified_; // Only for File };
diff --git a/third_party/blink/public/strings/blink_strings.grd b/third_party/blink/public/strings/blink_strings.grd index f4b4ef35..0e80bce 100644 --- a/third_party/blink/public/strings/blink_strings.grd +++ b/third_party/blink/public/strings/blink_strings.grd
@@ -72,6 +72,7 @@ <output filename="blink_strings_sq.pak" type="data_package" lang="sq" /> <output filename="blink_strings_ur.pak" type="data_package" lang="ur" /> <output filename="blink_strings_uz.pak" type="data_package" lang="uz" /> + <output filename="blink_strings_zh-HK.pak" type="data_package" lang="zh-HK" /> <output filename="blink_strings_zu.pak" type="data_package" lang="zu" /> </if> <output filename="blink_strings_am.pak" type="data_package" lang="am" />
diff --git a/third_party/blink/public/web/web_remote_frame.h b/third_party/blink/public/web/web_remote_frame.h index c966a14..d15e1b3 100644 --- a/third_party/blink/public/web/web_remote_frame.h +++ b/third_party/blink/public/web/web_remote_frame.h
@@ -127,7 +127,6 @@ blink::mojom::AdFrameType ad_frame_type) = 0; virtual void DidStartLoading() = 0; - virtual void DidStopLoading() = 0; // Returns true if this frame should be ignored during hittesting. virtual bool IsIgnoredForHitTest() const = 0;
diff --git a/third_party/blink/renderer/bindings/core/v8/DEPS b/third_party/blink/renderer/bindings/core/v8/DEPS index c386e5e..70bead4 100644 --- a/third_party/blink/renderer/bindings/core/v8/DEPS +++ b/third_party/blink/renderer/bindings/core/v8/DEPS
@@ -1,5 +1,8 @@ specific_include_rules = { "script_promise_resolver_test.cc": [ "+base/run_loop.h", - ] + ], + "serialized_script_value_fuzzer.cc": [ + "+testing/libfuzzer/libfuzzer_exports.h", + ], } \ No newline at end of file
diff --git a/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value_fuzzer.cc b/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value_fuzzer.cc index 6cb85e365..2b4938eb 100644 --- a/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value_fuzzer.cc +++ b/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value_fuzzer.cc
@@ -10,6 +10,7 @@ #include "base/numerics/safe_conversions.h" #include "build/build_config.h" +#include "testing/libfuzzer/libfuzzer_exports.h" #include "third_party/blink/public/platform/web_blob_info.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h" #include "third_party/blink/renderer/core/frame/settings.h" @@ -47,9 +48,8 @@ g_blob_info_array = new WebBlobInfoArray(); g_blob_info_array->emplace_back(WebBlobInfo::BlobForTesting( "d875dfc2-4505-461b-98fe-0cf6cc5eaf44", "text/plain", 12)); - g_blob_info_array->emplace_back( - WebBlobInfo::FileForTesting("d875dfc2-4505-461b-98fe-0cf6cc5eaf44", - "/native/path", "path", "text/plain")); + g_blob_info_array->emplace_back(WebBlobInfo::FileForTesting( + "d875dfc2-4505-461b-98fe-0cf6cc5eaf44", "path", "text/plain")); return 0; }
diff --git a/third_party/blink/renderer/bindings/core/v8/serialization/v8_script_value_deserializer.cc b/third_party/blink/renderer/bindings/core/v8/serialization/v8_script_value_deserializer.cc index 371890203..8e45585 100644 --- a/third_party/blink/renderer/bindings/core/v8/serialization/v8_script_value_deserializer.cc +++ b/third_party/blink/renderer/bindings/core/v8/serialization/v8_script_value_deserializer.cc
@@ -652,9 +652,8 @@ } if (!blob_handle) return nullptr; - return File::CreateFromIndexedSerialization(info.FilePath(), info.FileName(), - info.size(), info.LastModified(), - blob_handle); + return File::CreateFromIndexedSerialization(info.FileName(), info.size(), + info.LastModified(), blob_handle); } DOMRectReadOnly* V8ScriptValueDeserializer::ReadDOMRectReadOnly() {
diff --git a/third_party/blink/renderer/bindings/core/v8/serialization/v8_script_value_serializer.cc b/third_party/blink/renderer/bindings/core/v8/serialization/v8_script_value_serializer.cc index 8358f44..01a20ce 100644 --- a/third_party/blink/renderer/bindings/core/v8/serialization/v8_script_value_serializer.cc +++ b/third_party/blink/renderer/bindings/core/v8/serialization/v8_script_value_serializer.cc
@@ -629,7 +629,7 @@ size_t index = blob_info_array_->size(); DCHECK_LE(index, std::numeric_limits<uint32_t>::max()); blob_info_array_->emplace_back( - file->GetBlobDataHandle(), file->GetPath(), file->name(), file->type(), + file->GetBlobDataHandle(), file->name(), file->type(), file->LastModifiedTimeForSerialization(), file->size()); WriteUint32(static_cast<uint32_t>(index)); } else {
diff --git a/third_party/blink/renderer/bindings/core/v8/serialization/v8_script_value_serializer_test.cc b/third_party/blink/renderer/bindings/core/v8/serialization/v8_script_value_serializer_test.cc index 8b1a082..c42a815 100644 --- a/third_party/blink/renderer/bindings/core/v8/serialization/v8_script_value_serializer_test.cc +++ b/third_party/blink/renderer/bindings/core/v8/serialization/v8_script_value_serializer_test.cc
@@ -1653,10 +1653,13 @@ RoundTrip(wrapper, scope, nullptr, nullptr, &blob_info_array); // As above, the resulting blob should be correct. + // The only users of the 'blob_info_array' version of serialization is + // IndexedDB, and the full path is not needed for that system - thus it is not + // sent in the round trip. ASSERT_TRUE(V8File::HasInstance(result, scope.GetIsolate())); File* new_file = V8File::ToImpl(result.As<v8::Object>()); - EXPECT_TRUE(new_file->HasBackingFile()); - EXPECT_EQ("/native/path", new_file->GetPath()); + EXPECT_FALSE(new_file->HasBackingFile()); + EXPECT_EQ("path", new_file->name()); EXPECT_TRUE(new_file->FileSystemURL().IsEmpty()); // The blob info array should also contain the details since it was serialized @@ -1664,7 +1667,7 @@ ASSERT_EQ(1u, blob_info_array.size()); const WebBlobInfo& info = blob_info_array[0]; EXPECT_TRUE(info.IsFile()); - EXPECT_EQ("/native/path", info.FilePath()); + EXPECT_EQ("path", info.FileName()); EXPECT_EQ(file->Uuid(), String(info.Uuid())); } @@ -1673,9 +1676,8 @@ scoped_refptr<SerializedScriptValue> input = SerializedValue({0xff, 0x09, 0x3f, 0x00, 0x65, 0x00}); WebBlobInfoArray blob_info_array; - blob_info_array.emplace_back( - WebBlobInfo::FileForTesting("d875dfc2-4505-461b-98fe-0cf6cc5eaf44", - "/native/path", "path", "text/plain")); + blob_info_array.emplace_back(WebBlobInfo::FileForTesting( + "d875dfc2-4505-461b-98fe-0cf6cc5eaf44", "path", "text/plain")); V8ScriptValueDeserializer::Options options; options.blob_info = &blob_info_array; V8ScriptValueDeserializer deserializer(scope.GetScriptState(), input, @@ -1685,7 +1687,7 @@ File* new_file = V8File::ToImpl(result.As<v8::Object>()); EXPECT_EQ("d875dfc2-4505-461b-98fe-0cf6cc5eaf44", new_file->Uuid()); EXPECT_EQ("text/plain", new_file->type()); - EXPECT_EQ("/native/path", new_file->GetPath()); + EXPECT_TRUE(new_file->GetPath().IsEmpty()); EXPECT_EQ("path", new_file->name()); } @@ -1699,9 +1701,8 @@ } { WebBlobInfoArray blob_info_array; - blob_info_array.emplace_back( - WebBlobInfo::FileForTesting("d875dfc2-4505-461b-98fe-0cf6cc5eaf44", - "/native/path", "path", "text/plain")); + blob_info_array.emplace_back(WebBlobInfo::FileForTesting( + "d875dfc2-4505-461b-98fe-0cf6cc5eaf44", "path", "text/plain")); V8ScriptValueDeserializer::Options options; options.blob_info = &blob_info_array; V8ScriptValueDeserializer deserializer(scope.GetScriptState(), input, @@ -1785,18 +1786,21 @@ RoundTrip(wrapper, scope, nullptr, nullptr, &blob_info_array); // FileList should be produced correctly. + // The only users of the 'blob_info_array' version of serialization is + // IndexedDB, and the full path is not needed for that system - thus it is not + // sent in the round trip. ASSERT_TRUE(V8FileList::HasInstance(result, scope.GetIsolate())); FileList* new_file_list = V8FileList::ToImpl(result.As<v8::Object>()); ASSERT_EQ(2u, new_file_list->length()); - EXPECT_EQ("/native/path", new_file_list->item(0)->GetPath()); - EXPECT_EQ("/native/path2", new_file_list->item(1)->GetPath()); + EXPECT_EQ("path", new_file_list->item(0)->name()); + EXPECT_EQ("path2", new_file_list->item(1)->name()); // And the blob info array should be populated. ASSERT_EQ(2u, blob_info_array.size()); EXPECT_TRUE(blob_info_array[0].IsFile()); - EXPECT_EQ("/native/path", blob_info_array[0].FilePath()); + EXPECT_EQ("path", blob_info_array[0].FileName()); EXPECT_TRUE(blob_info_array[1].IsFile()); - EXPECT_EQ("/native/path2", blob_info_array[1].FilePath()); + EXPECT_EQ("path2", blob_info_array[1].FileName()); } TEST(V8ScriptValueSerializerTest, DecodeEmptyFileListIndex) { @@ -1832,9 +1836,8 @@ scoped_refptr<SerializedScriptValue> input = SerializedValue({0xff, 0x09, 0x3f, 0x00, 0x4c, 0x01, 0x00, 0x00}); WebBlobInfoArray blob_info_array; - blob_info_array.emplace_back( - WebBlobInfo::FileForTesting("d875dfc2-4505-461b-98fe-0cf6cc5eaf44", - "/native/path", "name", "text/plain")); + blob_info_array.emplace_back(WebBlobInfo::FileForTesting( + "d875dfc2-4505-461b-98fe-0cf6cc5eaf44", "name", "text/plain")); V8ScriptValueDeserializer::Options options; options.blob_info = &blob_info_array; V8ScriptValueDeserializer deserializer(scope.GetScriptState(), input, @@ -1843,7 +1846,7 @@ FileList* new_file_list = V8FileList::ToImpl(result.As<v8::Object>()); EXPECT_EQ(1u, new_file_list->length()); File* new_file = new_file_list->item(0); - EXPECT_EQ("/native/path", new_file->GetPath()); + EXPECT_TRUE(new_file->GetPath().IsEmpty()); EXPECT_EQ("name", new_file->name()); EXPECT_EQ("d875dfc2-4505-461b-98fe-0cf6cc5eaf44", new_file->Uuid()); EXPECT_EQ("text/plain", new_file->type());
diff --git a/third_party/blink/renderer/bindings/scripts/scripts.gni b/third_party/blink/renderer/bindings/scripts/scripts.gni index b8c7ba1..9f1b79b 100644 --- a/third_party/blink/renderer/bindings/scripts/scripts.gni +++ b/third_party/blink/renderer/bindings/scripts/scripts.gni
@@ -159,7 +159,9 @@ # "import site" to speed up startup. Figure out if we need this and do # something similar (not really expressible in GN now). _script = "//third_party/blink/renderer/bindings/scripts/idl_compiler.py" - _inputs = idl_lexer_parser_files + idl_compiler_files # to be explicit (covered by parsetab) + _inputs = + idl_lexer_parser_files + idl_compiler_files # to be explicit (covered by + # parsetab) _inputs += [ "$bindings_scripts_output_dir/lextab.py", "$bindings_scripts_output_dir/parsetab.pickle", @@ -248,7 +250,9 @@ idl_files_list = "$target_gen_dir/${target_name}_file_list.tmp" write_file(idl_files_list, rebase_path(invoker.dict_idls, root_build_dir)) - inputs = idl_lexer_parser_files + idl_compiler_files # to be explicit (covered by parsetab) + inputs = + idl_lexer_parser_files + idl_compiler_files # to be explicit (covered + # by parsetab) inputs += [ "$bindings_scripts_output_dir/lextab.py", "$bindings_scripts_output_dir/parsetab.pickle",
diff --git a/third_party/blink/renderer/controller/BUILD.gn b/third_party/blink/renderer/controller/BUILD.gn index d066211..ea7f0d6d 100644 --- a/third_party/blink/renderer/controller/BUILD.gn +++ b/third_party/blink/renderer/controller/BUILD.gn
@@ -108,15 +108,11 @@ visibility = [] # Allow re-assignment of list. visibility = [ "*" ] testonly = true - deps = [ - ":blink_unittests", - ] + deps = [ ":blink_unittests" ] } test("blink_unittests") { - deps = [ - ":blink_unittests_sources", - ] + deps = [ ":blink_unittests_sources" ] data_deps = [ ":blink_unittests_data", @@ -138,9 +134,7 @@ } test("blink_perf_tests") { - deps = [ - ":blink_perf_tests_sources", - ] + deps = [ ":blink_perf_tests_sources" ] } jumbo_source_set("blink_perf_tests_sources") { @@ -148,9 +142,7 @@ visibility = [ "*" ] testonly = true - sources = [ - "tests/run_all_tests.cc", - ] + sources = [ "tests/run_all_tests.cc" ] deps = [ ":controller", @@ -171,9 +163,7 @@ visibility = [ "*" ] testonly = true - sources = [ - "tests/run_all_tests.cc", - ] + sources = [ "tests/run_all_tests.cc" ] sources += bindings_unittest_files if (is_linux) { sources += [ "memory_usage_monitor_posix_test.cc" ]
diff --git a/third_party/blink/renderer/core/animation/BUILD.gn b/third_party/blink/renderer/core/animation/BUILD.gn index 33e7363..12ceb359 100644 --- a/third_party/blink/renderer/core/animation/BUILD.gn +++ b/third_party/blink/renderer/core/animation/BUILD.gn
@@ -264,9 +264,7 @@ "worklet_animation_controller.h", ] - deps = [ - ":buildflags", - ] + deps = [ ":buildflags" ] } blink_core_tests("unit_tests") {
diff --git a/third_party/blink/renderer/core/animation/animation.cc b/third_party/blink/renderer/core/animation/animation.cc index 53a133e2..280d079 100644 --- a/third_party/blink/renderer/core/animation/animation.cc +++ b/third_party/blink/renderer/core/animation/animation.cc
@@ -68,6 +68,8 @@ namespace { +enum PseudoPriority { kMarker, kBefore, kOther, kAfter }; + unsigned NextSequenceNumber() { static unsigned next = 0; return ++next; @@ -93,6 +95,16 @@ return b; } +PseudoPriority ConvertStringtoPriority(const String& pseudo) { + if (pseudo == "::marker") + return PseudoPriority::kMarker; + if (pseudo == "::before") + return PseudoPriority::kBefore; + if (pseudo == "::after") + return PseudoPriority::kAfter; + return PseudoPriority::kOther; +} + Animation::AnimationClassPriority AnimationPriority( const Animation* animation) { // According to the spec: @@ -444,6 +456,68 @@ AnimationClassPriority priority2 = AnimationPriority(animation2); if (priority1 != priority2) return priority1 < priority2; + + // If the the animation class is CssAnimation or CssTransition, then first + // compare the owning element of animation1 and animation2, sort two of them + // by tree order of their conrresponding owning element + // The specs: + // https://drafts.csswg.org/css-animations-2/#animation-composite-order + // https://drafts.csswg.org/css-transitions-2/#animation-composite-order + if (priority1 != kDefaultPriority && animation1->effect() && + animation2->effect()) { + // TODO(crbug.com/1043778): Implement and use OwningElement on CSSAnimation + // and CSSTransition. + auto* effect1 = DynamicTo<KeyframeEffect>(animation1->effect()); + auto* effect2 = DynamicTo<KeyframeEffect>(animation2->effect()); + Element* target1 = effect1->target(); + Element* target2 = effect2->target(); + + if (*target1 != *target2) { + return target1->compareDocumentPosition(target2) & + Node::kDocumentPositionFollowing; + } + + // A pseudo-element has a higher composite ordering than its originating + // element, but lower than the originating element's children. Two + // pseudo-elements sharing the same originating element are sorted as + // follows: + // ::marker + // ::before + // ::other + // ::after + // The "::other" category is a catch-all for any pseudo-element that does + // not match another label. This category is not currently covered in the + // spec. + // TODO: revisit when the spec is clarified + // (https://github.com/w3c/csswg-drafts/issues/4502). + const String& pseudo1 = + const_cast<KeyframeEffect*>(effect1)->pseudoElement(); + const String& pseudo2 = + const_cast<KeyframeEffect*>(effect2)->pseudoElement(); + + if (!pseudo1.IsEmpty() && !pseudo2.IsEmpty()) { + PseudoPriority priority1 = ConvertStringtoPriority(pseudo1); + PseudoPriority priority2 = ConvertStringtoPriority(pseudo2); + // In this case, we are comparing the SequenceNumber for now. + // TODO(crbug.com/1045835): compare them via Animation Name Property + if (priority1 == priority2) + return animation1->SequenceNumber() < animation2->SequenceNumber(); + return priority1 < priority2; + } + + // If one is pseudo element and the other one is not, then we compare the + // hosting element and the owning element. + if (!pseudo1.IsEmpty()) + return false; + + if (!pseudo2.IsEmpty()) + return true; + // TODO: Sort animation1 and animation2 based on their position in the + // computed value of "animation-name" property + } + // If the anmiations are not-CSS web animation or both animations have the + // same owning element then just compare them via generation time/ sequence + // number return animation1->SequenceNumber() < animation2->SequenceNumber(); }
diff --git a/third_party/blink/renderer/core/animation/svg_angle_interpolation_type.cc b/third_party/blink/renderer/core/animation/svg_angle_interpolation_type.cc index 1330538..e75b6a064 100644 --- a/third_party/blink/renderer/core/animation/svg_angle_interpolation_type.cc +++ b/third_party/blink/renderer/core/animation/svg_angle_interpolation_type.cc
@@ -19,10 +19,11 @@ InterpolationValue SVGAngleInterpolationType::MaybeConvertSVGValue( const SVGPropertyBase& svg_value) const { - if (ToSVGAngle(svg_value).OrientType()->EnumValue() != kSVGMarkerOrientAngle) + if (To<SVGAngle>(svg_value).OrientType()->EnumValue() != + kSVGMarkerOrientAngle) return nullptr; return InterpolationValue( - std::make_unique<InterpolableNumber>(ToSVGAngle(svg_value).Value())); + std::make_unique<InterpolableNumber>(To<SVGAngle>(svg_value).Value())); } SVGPropertyBase* SVGAngleInterpolationType::AppliedSVGValue(
diff --git a/third_party/blink/renderer/core/animation/svg_integer_interpolation_type.cc b/third_party/blink/renderer/core/animation/svg_integer_interpolation_type.cc index cbf79e3..b7c8768 100644 --- a/third_party/blink/renderer/core/animation/svg_integer_interpolation_type.cc +++ b/third_party/blink/renderer/core/animation/svg_integer_interpolation_type.cc
@@ -21,7 +21,7 @@ if (svg_value.GetType() != kAnimatedInteger) return nullptr; return InterpolationValue( - std::make_unique<InterpolableNumber>(ToSVGInteger(svg_value).Value())); + std::make_unique<InterpolableNumber>(To<SVGInteger>(svg_value).Value())); } SVGPropertyBase* SVGIntegerInterpolationType::AppliedSVGValue(
diff --git a/third_party/blink/renderer/core/animation/svg_integer_optional_integer_interpolation_type.cc b/third_party/blink/renderer/core/animation/svg_integer_optional_integer_interpolation_type.cc index a18c385..d8d80598 100644 --- a/third_party/blink/renderer/core/animation/svg_integer_optional_integer_interpolation_type.cc +++ b/third_party/blink/renderer/core/animation/svg_integer_optional_integer_interpolation_type.cc
@@ -29,8 +29,8 @@ if (svg_value.GetType() != kAnimatedIntegerOptionalInteger) return nullptr; - const SVGIntegerOptionalInteger& integer_optional_integer = - ToSVGIntegerOptionalInteger(svg_value); + const auto& integer_optional_integer = + To<SVGIntegerOptionalInteger>(svg_value); auto result = std::make_unique<InterpolableList>(2); result->Set(0, std::make_unique<InterpolableNumber>( integer_optional_integer.FirstInteger()->Value()));
diff --git a/third_party/blink/renderer/core/animation/svg_length_interpolation_type.cc b/third_party/blink/renderer/core/animation/svg_length_interpolation_type.cc index 523eec8c..dc82ebe 100644 --- a/third_party/blink/renderer/core/animation/svg_length_interpolation_type.cc +++ b/third_party/blink/renderer/core/animation/svg_length_interpolation_type.cc
@@ -70,7 +70,7 @@ if (svg_value.GetType() != kAnimatedLength) return nullptr; - return MaybeConvertSVGLength(ToSVGLength(svg_value)); + return MaybeConvertSVGLength(To<SVGLength>(svg_value)); } SVGPropertyBase* SVGLengthInterpolationType::AppliedSVGValue(
diff --git a/third_party/blink/renderer/core/animation/svg_length_list_interpolation_type.cc b/third_party/blink/renderer/core/animation/svg_length_list_interpolation_type.cc index 58378b1..51e20372 100644 --- a/third_party/blink/renderer/core/animation/svg_length_list_interpolation_type.cc +++ b/third_party/blink/renderer/core/animation/svg_length_list_interpolation_type.cc
@@ -38,7 +38,7 @@ if (svg_value.GetType() != kAnimatedLengthList) return nullptr; - const SVGLengthList& length_list = ToSVGLengthList(svg_value); + const auto& length_list = To<SVGLengthList>(svg_value); auto result = std::make_unique<InterpolableList>(length_list.length()); for (wtf_size_t i = 0; i < length_list.length(); i++) { InterpolationValue component =
diff --git a/third_party/blink/renderer/core/animation/svg_number_interpolation_type.cc b/third_party/blink/renderer/core/animation/svg_number_interpolation_type.cc index c09ed725..4843e90 100644 --- a/third_party/blink/renderer/core/animation/svg_number_interpolation_type.cc +++ b/third_party/blink/renderer/core/animation/svg_number_interpolation_type.cc
@@ -32,7 +32,7 @@ if (svg_value.GetType() != kAnimatedNumber) return nullptr; return InterpolationValue( - std::make_unique<InterpolableNumber>(ToSVGNumber(svg_value).Value())); + std::make_unique<InterpolableNumber>(To<SVGNumber>(svg_value).Value())); } SVGPropertyBase* SVGNumberInterpolationType::AppliedSVGValue(
diff --git a/third_party/blink/renderer/core/animation/svg_number_list_interpolation_type.cc b/third_party/blink/renderer/core/animation/svg_number_list_interpolation_type.cc index 229dd4b..2f772021 100644 --- a/third_party/blink/renderer/core/animation/svg_number_list_interpolation_type.cc +++ b/third_party/blink/renderer/core/animation/svg_number_list_interpolation_type.cc
@@ -36,7 +36,7 @@ if (svg_value.GetType() != kAnimatedNumberList) return nullptr; - const SVGNumberList& number_list = ToSVGNumberList(svg_value); + const SVGNumberList& number_list = To<SVGNumberList>(svg_value); auto result = std::make_unique<InterpolableList>(number_list.length()); for (wtf_size_t i = 0; i < number_list.length(); i++) { result->Set(
diff --git a/third_party/blink/renderer/core/animation/svg_number_optional_number_interpolation_type.cc b/third_party/blink/renderer/core/animation/svg_number_optional_number_interpolation_type.cc index c29dd29..366f617 100644 --- a/third_party/blink/renderer/core/animation/svg_number_optional_number_interpolation_type.cc +++ b/third_party/blink/renderer/core/animation/svg_number_optional_number_interpolation_type.cc
@@ -29,8 +29,7 @@ if (svg_value.GetType() != kAnimatedNumberOptionalNumber) return nullptr; - const SVGNumberOptionalNumber& number_optional_number = - ToSVGNumberOptionalNumber(svg_value); + const auto& number_optional_number = To<SVGNumberOptionalNumber>(svg_value); auto result = std::make_unique<InterpolableList>(2); result->Set(0, std::make_unique<InterpolableNumber>( number_optional_number.FirstNumber()->Value()));
diff --git a/third_party/blink/renderer/core/animation/svg_path_interpolation_type.cc b/third_party/blink/renderer/core/animation/svg_path_interpolation_type.cc index 439938b3..7fa8e96 100644 --- a/third_party/blink/renderer/core/animation/svg_path_interpolation_type.cc +++ b/third_party/blink/renderer/core/animation/svg_path_interpolation_type.cc
@@ -16,7 +16,7 @@ return nullptr; return PathInterpolationFunctions::ConvertValue( - ToSVGPath(svg_value).ByteStream(), + To<SVGPath>(svg_value).ByteStream(), PathInterpolationFunctions::PreserveCoordinates); }
diff --git a/third_party/blink/renderer/core/animation/svg_point_list_interpolation_type.cc b/third_party/blink/renderer/core/animation/svg_point_list_interpolation_type.cc index eed39ad..a608927 100644 --- a/third_party/blink/renderer/core/animation/svg_point_list_interpolation_type.cc +++ b/third_party/blink/renderer/core/animation/svg_point_list_interpolation_type.cc
@@ -37,7 +37,7 @@ if (svg_value.GetType() != kAnimatedPoints) return nullptr; - const SVGPointList& point_list = ToSVGPointList(svg_value); + const auto& point_list = To<SVGPointList>(svg_value); auto result = std::make_unique<InterpolableList>(point_list.length() * 2); for (wtf_size_t i = 0; i < point_list.length(); i++) { const SVGPoint& point = *point_list.at(i);
diff --git a/third_party/blink/renderer/core/animation/svg_rect_interpolation_type.cc b/third_party/blink/renderer/core/animation/svg_rect_interpolation_type.cc index c2675e6..ffc5753 100644 --- a/third_party/blink/renderer/core/animation/svg_rect_interpolation_type.cc +++ b/third_party/blink/renderer/core/animation/svg_rect_interpolation_type.cc
@@ -36,7 +36,7 @@ if (svg_value.GetType() != kAnimatedRect) return nullptr; - const SVGRect& rect = ToSVGRect(svg_value); + const auto& rect = To<SVGRect>(svg_value); auto result = std::make_unique<InterpolableList>(kRectComponentIndexCount); result->Set(kRectX, std::make_unique<InterpolableNumber>(rect.X())); result->Set(kRectY, std::make_unique<InterpolableNumber>(rect.Y()));
diff --git a/third_party/blink/renderer/core/animation_frame/BUILD.gn b/third_party/blink/renderer/core/animation_frame/BUILD.gn index 5d6265c..4ad9db7 100644 --- a/third_party/blink/renderer/core/animation_frame/BUILD.gn +++ b/third_party/blink/renderer/core/animation_frame/BUILD.gn
@@ -9,7 +9,5 @@ "worker_animation_frame_provider.cc", "worker_animation_frame_provider.h", ] - deps = [ - "//mojo/public/cpp/bindings:bindings", - ] + deps = [ "//mojo/public/cpp/bindings:bindings" ] }
diff --git a/third_party/blink/renderer/core/core_idl_files.gni b/third_party/blink/renderer/core/core_idl_files.gni index f7ccecae..62cf454 100644 --- a/third_party/blink/renderer/core/core_idl_files.gni +++ b/third_party/blink/renderer/core/core_idl_files.gni
@@ -793,7 +793,8 @@ core_dependency_idl_files + webcore_testing_dependency_idl_files # Generated IDL files -core_generated_interface_idl_files = generated_webcore_testing_idl_files # interfaces +core_generated_interface_idl_files = + generated_webcore_testing_idl_files # interfaces core_generated_dependency_idl_files = core_global_constructors_generated_idl_files # partial interfaces
diff --git a/third_party/blink/renderer/core/dom/node.cc b/third_party/blink/renderer/core/dom/node.cc index 3623f414..e449052a 100644 --- a/third_party/blink/renderer/core/dom/node.cc +++ b/third_party/blink/renderer/core/dom/node.cc
@@ -1528,6 +1528,8 @@ } bool Node::IsDescendantOf(const Node* other) const { + DCHECK(this); // Necessary for clusterfuzz tooling to get a useful backtrace + // Return true if other is an ancestor of this, otherwise false if (!other || isConnected() != other->isConnected()) return false;
diff --git a/third_party/blink/renderer/core/editing/commands/delete_selection_command.cc b/third_party/blink/renderer/core/editing/commands/delete_selection_command.cc index 8cdf42a..6220435 100644 --- a/third_party/blink/renderer/core/editing/commands/delete_selection_command.cc +++ b/third_party/blink/renderer/core/editing/commands/delete_selection_command.cc
@@ -975,7 +975,8 @@ if (IsTableRowEmpty(end_table_row_.Get())) { // Don't remove end_table_row_ if it's where we're putting the ending // selection. - if (!ending_position_.AnchorNode()->IsDescendantOf( + if (ending_position_.IsNull() || + !ending_position_.AnchorNode()->IsDescendantOf( end_table_row_.Get())) { // FIXME: We probably shouldn't remove end_table_row_ unless it's // fully selected, even if it is empty. We'll need to start
diff --git a/third_party/blink/renderer/core/events/wheel_event.cc b/third_party/blink/renderer/core/events/wheel_event.cc index e6b2219..a2dc5b00 100644 --- a/third_party/blink/renderer/core/events/wheel_event.cc +++ b/third_party/blink/renderer/core/events/wheel_event.cc
@@ -86,6 +86,12 @@ return MakeGarbageCollected<WheelEvent>(event, view); } +WheelEvent* WheelEvent::Create(const WebMouseWheelEvent& event, + const gfx::Vector2dF& delta_in_pixels, + AbstractView* view) { + return MakeGarbageCollected<WheelEvent>(event, delta_in_pixels, view); +} + WheelEvent::WheelEvent() : delta_x_(0), delta_y_(0), delta_z_(0), delta_mode_(kDomDeltaPixel) {} @@ -119,6 +125,20 @@ delta_mode_(ConvertDeltaMode(event)), native_event_(event) {} +WheelEvent::WheelEvent(const WebMouseWheelEvent& event, + const gfx::Vector2dF& delta_in_pixels, + AbstractView* view) + : MouseEvent(event_type_names::kWheel, + GetMouseEventInitForWheel(event, view), + event.TimeStamp()), + wheel_delta_(event.wheel_ticks_x * kTickMultiplier, + event.wheel_ticks_y * kTickMultiplier), + delta_x_(delta_in_pixels.x()), + delta_y_(delta_in_pixels.y()), + delta_z_(0), + delta_mode_(WheelEvent::kDomDeltaPixel), + native_event_(event) {} + const AtomicString& WheelEvent::InterfaceName() const { return event_interface_names::kWheelEvent; }
diff --git a/third_party/blink/renderer/core/events/wheel_event.h b/third_party/blink/renderer/core/events/wheel_event.h index 9918e99..06c1c46 100644 --- a/third_party/blink/renderer/core/events/wheel_event.h +++ b/third_party/blink/renderer/core/events/wheel_event.h
@@ -48,6 +48,10 @@ static WheelEvent* Create(const WebMouseWheelEvent& native_event, AbstractView*); + static WheelEvent* Create(const WebMouseWheelEvent& native_event, + const gfx::Vector2dF& delta_in_pixels, + AbstractView*); + static WheelEvent* Create(const AtomicString& type, const WheelEventInit* initializer) { return MakeGarbageCollected<WheelEvent>(type, initializer); @@ -56,6 +60,9 @@ WheelEvent(); WheelEvent(const AtomicString&, const WheelEventInit*); WheelEvent(const WebMouseWheelEvent&, AbstractView*); + WheelEvent(const WebMouseWheelEvent&, + const gfx::Vector2dF& delta_in_pixels, + AbstractView*); double deltaX() const { return delta_x_; } // Positive when scrolling right. double deltaY() const { return delta_y_; } // Positive when scrolling down.
diff --git a/third_party/blink/renderer/core/exported/web_remote_frame_impl.cc b/third_party/blink/renderer/core/exported/web_remote_frame_impl.cc index 1c37fb36..09a6d420 100644 --- a/third_party/blink/renderer/core/exported/web_remote_frame_impl.cc +++ b/third_party/blink/renderer/core/exported/web_remote_frame_impl.cc
@@ -299,19 +299,7 @@ } void WebRemoteFrameImpl::DidStartLoading() { - GetFrame()->SetIsLoading(true); -} - -void WebRemoteFrameImpl::DidStopLoading() { - GetFrame()->SetIsLoading(false); - - // When a subframe finishes loading, the parent should check if *all* - // subframes have finished loading (which may mean that the parent can declare - // that the parent itself has finished loading). This remote-subframe-focused - // code has a local-subframe equivalent in FrameLoader::DidFinishNavigation. - Frame* parent = GetFrame()->Tree().Parent(); - if (parent) - parent->CheckCompleted(); + GetFrame()->DidStartLoading(); } bool WebRemoteFrameImpl::IsIgnoredForHitTest() const {
diff --git a/third_party/blink/renderer/core/exported/web_remote_frame_impl.h b/third_party/blink/renderer/core/exported/web_remote_frame_impl.h index bc1a849..9ec36c1 100644 --- a/third_party/blink/renderer/core/exported/web_remote_frame_impl.h +++ b/third_party/blink/renderer/core/exported/web_remote_frame_impl.h
@@ -93,7 +93,6 @@ void SetReplicatedAdFrameType( mojom::blink::AdFrameType ad_frame_type) override; void DidStartLoading() override; - void DidStopLoading() override; bool IsIgnoredForHitTest() const override; void UpdateUserActivationState( mojom::blink::UserActivationUpdateType) override;
diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_party/blink/renderer/core/exported/web_view_impl.cc index 3d3c26b..ef6fe6f2 100644 --- a/third_party/blink/renderer/core/exported/web_view_impl.cc +++ b/third_party/blink/renderer/core/exported/web_view_impl.cc
@@ -1284,7 +1284,7 @@ GetBrowserControls().PermittedState(); GetBrowserControls().UpdateConstraintsAndState( - constraint, cc::BrowserControlsState::kBoth, false); + constraint, cc::BrowserControlsState::kBoth); // If the controls are going from a locked hidden to unlocked state, or vice // versa, the ICB size needs to change but we can't rely on getting a
diff --git a/third_party/blink/renderer/core/fileapi/file.h b/third_party/blink/renderer/core/fileapi/file.h index 888fb19..e9707e0 100644 --- a/third_party/blink/renderer/core/fileapi/file.h +++ b/third_party/blink/renderer/core/fileapi/file.h
@@ -83,14 +83,13 @@ last_modified, std::move(blob_data_handle)); } static File* CreateFromIndexedSerialization( - const String& path, const String& name, uint64_t size, const base::Optional<base::Time>& last_modified, scoped_refptr<BlobDataHandle> blob_data_handle) { - return MakeGarbageCollected<File>(path, name, String(), kIsNotUserVisible, - true, size, last_modified, - std::move(blob_data_handle)); + return MakeGarbageCollected<File>( + String(), name, String(), kIsNotUserVisible, true, size, last_modified, + std::move(blob_data_handle)); } // For session restore feature.
diff --git a/third_party/blink/renderer/core/frame/browser_controls.cc b/third_party/blink/renderer/core/frame/browser_controls.cc index 4654b8a..bc5a7fb 100644 --- a/third_party/blink/renderer/core/frame/browser_controls.cc +++ b/third_party/blink/renderer/core/frame/browser_controls.cc
@@ -96,6 +96,32 @@ return pending_delta - applied_delta; } +void BrowserControls::ScrollEnd() { + if ((top_shown_ratio_ == TopMinShownRatio() || top_shown_ratio_ == 1) && + (bottom_shown_ratio_ == BottomMinShownRatio() || + bottom_shown_ratio_ == 1)) { + return; + } + + // Both threshold values are copied from LayerTreeSettings, which are used in + // BrowserControlsOffsetManager::ScrollEnd. + constexpr float kTopControlsShowThreshold = 0.5f; + constexpr float kTopControlsHideThreshold = 0.5f; + float normalized_top_ratio = + (top_shown_ratio_ - TopMinShownRatio()) / (1.f - TopMinShownRatio()); + if (normalized_top_ratio >= 1.f - kTopControlsHideThreshold) { + // If we're showing so much that the hide threshold won't trigger, show. + UpdateConstraintsAndState(permitted_state_, + cc::BrowserControlsState::kShown); + } else if (normalized_top_ratio < kTopControlsShowThreshold) { + // If we're showing so little that the show threshold won't trigger, hide. + UpdateConstraintsAndState(permitted_state_, + cc::BrowserControlsState::kHidden); + } else { + NOTREACHED(); + } +} + void BrowserControls::ResetBaseline() { accumulated_scroll_delta_ = 0; baseline_top_content_offset_ = ContentOffset(); @@ -133,14 +159,22 @@ void BrowserControls::UpdateConstraintsAndState( cc::BrowserControlsState constraints, - cc::BrowserControlsState current, - bool animate) { + cc::BrowserControlsState current) { permitted_state_ = constraints; DCHECK(!(constraints == cc::BrowserControlsState::kShown && current == cc::BrowserControlsState::kHidden)); DCHECK(!(constraints == cc::BrowserControlsState::kHidden && current == cc::BrowserControlsState::kShown)); + + if (current == cc::BrowserControlsState::kShown) { + top_shown_ratio_ = 1; + bottom_shown_ratio_ = 1; + } else if (current == cc::BrowserControlsState::kHidden) { + top_shown_ratio_ = TopMinShownRatio(); + bottom_shown_ratio_ = BottomMinShownRatio(); + } + page_->GetChromeClient().DidUpdateBrowserControls(); } void BrowserControls::SetParams(cc::BrowserControlsParams params) {
diff --git a/third_party/blink/renderer/core/frame/browser_controls.h b/third_party/blink/renderer/core/frame/browser_controls.h index 11930e0e..8940e09 100644 --- a/third_party/blink/renderer/core/frame/browser_controls.h +++ b/third_party/blink/renderer/core/frame/browser_controls.h
@@ -55,8 +55,7 @@ void SetShownRatio(float top_ratio, float bottom_ratio); void UpdateConstraintsAndState(cc::BrowserControlsState constraints, - cc::BrowserControlsState current, - bool animate); + cc::BrowserControlsState current); void ScrollBegin(); @@ -64,6 +63,8 @@ // scroll amount. FloatSize ScrollBy(FloatSize scroll_delta); + void ScrollEnd(); + cc::BrowserControlsState PermittedState() const { return permitted_state_; } private:
diff --git a/third_party/blink/renderer/core/frame/browser_controls_test.cc b/third_party/blink/renderer/core/frame/browser_controls_test.cc index 2fae600c..a8bc1d6 100644 --- a/third_party/blink/renderer/core/frame/browser_controls_test.cc +++ b/third_party/blink/renderer/core/frame/browser_controls_test.cc
@@ -330,10 +330,12 @@ GenerateEvent(WebInputEvent::kGestureScrollBegin)); web_view->MainFrameWidget()->HandleInputEvent( GenerateEvent(WebInputEvent::kGestureScrollUpdate, 0, 25.f)); + EXPECT_FLOAT_EQ(0.5f, web_view->GetBrowserControls().BottomShownRatio()); + web_view->MainFrameWidget()->HandleInputEvent( GenerateEvent(WebInputEvent::kGestureScrollEnd)); EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset()); - EXPECT_FLOAT_EQ(0.5f, web_view->GetBrowserControls().BottomShownRatio()); + EXPECT_FLOAT_EQ(1.f, web_view->GetBrowserControls().BottomShownRatio()); EXPECT_EQ(ScrollOffset(0, 25), GetFrame()->View()->LayoutViewport()->GetScrollOffset()); } @@ -548,42 +550,54 @@ mojom::blink::ScrollIntoViewParams::Type::kProgrammatic); // Test scroll down - // Scroll down should scroll the overflow div first but browser controls and - // main frame should not scroll. + // A full scroll down should scroll the overflow div first but browser + // controls and main frame should not scroll. VerticalScroll(-800.f); EXPECT_FLOAT_EQ(50.f, web_view->GetBrowserControls().ContentOffset()); EXPECT_EQ(ScrollOffset(0, 50), GetFrame()->View()->LayoutViewport()->GetScrollOffset()); - // Continued scroll down should start hiding browser controls but main frame + // Now scroll down should start hiding browser controls but main frame // should not scroll. - VerticalScroll(-40.f); + GetWebView()->MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollBegin, 0, -40.f)); + GetWebView()->MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollUpdate, 0, -40.f)); EXPECT_FLOAT_EQ(10.f, web_view->GetBrowserControls().ContentOffset()); EXPECT_EQ(ScrollOffset(0, 50), GetFrame()->View()->LayoutViewport()->GetScrollOffset()); // Continued scroll down should scroll down the main frame - VerticalScroll(-40.f); + GetWebView()->MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollUpdate, 0, -40.f)); + GetWebView()->MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollEnd)); EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset()); EXPECT_EQ(ScrollOffset(0, 80), GetFrame()->View()->LayoutViewport()->GetScrollOffset()); // Test scroll up - // scroll up should scroll overflow div first + // A full scroll up should scroll overflow div first VerticalScroll(800.f); EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset()); EXPECT_EQ(ScrollOffset(0, 80), GetFrame()->View()->LayoutViewport()->GetScrollOffset()); - // Continued scroll up should start showing browser controls but main frame + // Now scroll up should start showing browser controls but main frame // should not scroll. - VerticalScroll(40.f); + GetWebView()->MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollBegin, 0, 40.f)); + GetWebView()->MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollUpdate, 0, 40.f)); EXPECT_FLOAT_EQ(40.f, web_view->GetBrowserControls().ContentOffset()); EXPECT_EQ(ScrollOffset(0, 80), GetFrame()->View()->LayoutViewport()->GetScrollOffset()); - // Continued scroll down up scroll up the main frame - VerticalScroll(40.f); + // Continued scroll up scroll up the main frame + GetWebView()->MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollUpdate, 0, 40.f)); + GetWebView()->MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollEnd)); EXPECT_FLOAT_EQ(50.f, web_view->GetBrowserControls().ContentOffset()); EXPECT_EQ(ScrollOffset(0, 50), GetFrame()->View()->LayoutViewport()->GetScrollOffset()); @@ -600,42 +614,54 @@ mojom::blink::ScrollIntoViewParams::Type::kProgrammatic); // Test scroll down - // Scroll down should scroll the iframe first but browser controls and main - // frame should not scroll. + // A full scroll down should scroll the iframe first but browser controls and + // main frame should not scroll. VerticalScroll(-800.f); EXPECT_FLOAT_EQ(50.f, web_view->GetBrowserControls().ContentOffset()); EXPECT_EQ(ScrollOffset(0, 50), GetFrame()->View()->LayoutViewport()->GetScrollOffset()); - // Continued scroll down should start hiding browser controls but main frame + // Now scroll down should start hiding browser controls but main frame // should not scroll. - VerticalScroll(-40.f); + GetWebView()->MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollBegin, 0, -40.f)); + GetWebView()->MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollUpdate, 0, -40.f)); EXPECT_FLOAT_EQ(10.f, web_view->GetBrowserControls().ContentOffset()); EXPECT_EQ(ScrollOffset(0, 50), GetFrame()->View()->LayoutViewport()->GetScrollOffset()); // Continued scroll down should scroll down the main frame - VerticalScroll(-40.f); + GetWebView()->MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollUpdate, 0, -40.f)); + GetWebView()->MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollEnd)); EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset()); EXPECT_EQ(ScrollOffset(0, 80), GetFrame()->View()->LayoutViewport()->GetScrollOffset()); // Test scroll up - // scroll up should scroll iframe first + // A full scroll up should scroll iframe first VerticalScroll(800.f); EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset()); EXPECT_EQ(ScrollOffset(0, 80), GetFrame()->View()->LayoutViewport()->GetScrollOffset()); - // Continued scroll up should start showing browser controls but main frame + // Now scroll up should start showing browser controls but main frame // should not scroll. - VerticalScroll(40.f); + GetWebView()->MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollBegin, 0, 40.f)); + GetWebView()->MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollUpdate, 0, 40.f)); EXPECT_FLOAT_EQ(40.f, web_view->GetBrowserControls().ContentOffset()); EXPECT_EQ(ScrollOffset(0, 80), GetFrame()->View()->LayoutViewport()->GetScrollOffset()); - // Continued scroll down up scroll up the main frame - VerticalScroll(40.f); + // Continued scroll up scroll up the main frame + GetWebView()->MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollUpdate, 0, 40.f)); + GetWebView()->MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollEnd)); EXPECT_FLOAT_EQ(50.f, web_view->GetBrowserControls().ContentOffset()); EXPECT_EQ(ScrollOffset(0, 50), GetFrame()->View()->LayoutViewport()->GetScrollOffset()); @@ -706,16 +732,30 @@ // Fully scroll frameview but visualviewport remains scrollable web_view->MainFrameImpl()->SetScrollOffset(WebSize(0, 10000)); GetVisualViewport().SetLocation(FloatPoint(0, 0)); - VerticalScroll(-10.f); + GetWebView()->MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollBegin, 0, -10.f)); + GetWebView()->MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollUpdate, 0, -10.f)); EXPECT_FLOAT_EQ(40, web_view->GetBrowserControls().ContentOffset()); + GetWebView()->MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollEnd)); + EXPECT_FLOAT_EQ(50, web_view->GetBrowserControls().ContentOffset()); + web_view->GetBrowserControls().SetShownRatio(1, 1); // Fully scroll visual veiwport but frameview remains scrollable web_view->MainFrameImpl()->SetScrollOffset(WebSize(0, 0)); GetVisualViewport().SetLocation(FloatPoint(0, 10000)); - VerticalScroll(-20.f); + GetWebView()->MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollBegin, 0, -20.f)); + GetWebView()->MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollUpdate, 0, -20.f)); EXPECT_FLOAT_EQ(30, web_view->GetBrowserControls().ContentOffset()); + GetWebView()->MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollEnd)); + EXPECT_FLOAT_EQ(50, web_view->GetBrowserControls().ContentOffset()); + web_view->GetBrowserControls().SetShownRatio(1, 1); // Fully scroll both frameview and visual viewport web_view->MainFrameImpl()->SetScrollOffset(WebSize(0, 10000)); @@ -800,12 +840,19 @@ GetDocument().View()->LayoutViewport()->GetScrollOffset()); // Setting permitted state to "both" should not change an in-flight offset. - VerticalScroll(20.f); + WebView().MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollBegin, 0, 20.f)); + WebView().MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollUpdate, 0, 20.f)); EXPECT_FLOAT_EQ(20, WebView().GetBrowserControls().ContentOffset()); + + WebView().MainFrameWidget()->HandleInputEvent( + GenerateEvent(WebInputEvent::kGestureScrollEnd)); + EXPECT_FLOAT_EQ(0, WebView().GetBrowserControls().ContentOffset()); Compositor().layer_tree_host().UpdateBrowserControlsState( cc::BrowserControlsState::kBoth, cc::BrowserControlsState::kBoth, false); Compositor().BeginFrame(); - EXPECT_FLOAT_EQ(20, WebView().GetBrowserControls().ContentOffset()); + EXPECT_FLOAT_EQ(0, WebView().GetBrowserControls().ContentOffset()); // Setting just the constraint should affect the content offset. Compositor().layer_tree_host().UpdateBrowserControlsState( @@ -827,7 +874,7 @@ WebViewImpl* web_view = Initialize("percent-height.html"); web_view->ResizeWithBrowserControls(WebSize(400, 300), 100.f, 0, true); web_view->GetBrowserControls().UpdateConstraintsAndState( - cc::BrowserControlsState::kBoth, cc::BrowserControlsState::kShown, false); + cc::BrowserControlsState::kBoth, cc::BrowserControlsState::kShown); web_view->GetBrowserControls().SetShownRatio(1, 1); UpdateAllLifecyclePhases(); @@ -986,7 +1033,7 @@ WebViewImpl* web_view = Initialize("vh-height.html"); web_view->ResizeWithBrowserControls(WebSize(400, 300), 100.f, 0, true); web_view->GetBrowserControls().UpdateConstraintsAndState( - cc::BrowserControlsState::kBoth, cc::BrowserControlsState::kShown, false); + cc::BrowserControlsState::kBoth, cc::BrowserControlsState::kShown); web_view->GetBrowserControls().SetShownRatio(1, 1); UpdateAllLifecyclePhases(); @@ -1028,7 +1075,7 @@ WebViewImpl* web_view = Initialize("vh-height-width-800.html"); web_view->ResizeWithBrowserControls(WebSize(400, 300), 100.f, 0, true); web_view->GetBrowserControls().UpdateConstraintsAndState( - cc::BrowserControlsState::kBoth, cc::BrowserControlsState::kShown, false); + cc::BrowserControlsState::kBoth, cc::BrowserControlsState::kShown); web_view->GetBrowserControls().SetShownRatio(1, 1); UpdateAllLifecyclePhases(); @@ -1078,7 +1125,7 @@ WebViewImpl* web_view = Initialize("vh-height-width-800-extra-wide.html"); web_view->ResizeWithBrowserControls(WebSize(400, 300), 100.f, 0, true); web_view->GetBrowserControls().UpdateConstraintsAndState( - cc::BrowserControlsState::kBoth, cc::BrowserControlsState::kShown, false); + cc::BrowserControlsState::kBoth, cc::BrowserControlsState::kShown); web_view->GetBrowserControls().SetShownRatio(1, 1); UpdateAllLifecyclePhases(); @@ -1114,7 +1161,7 @@ web_view->ResizeWithBrowserControls(WebSize(800, layout_viewport_height), browser_controls_height, 0, true); web_view->GetBrowserControls().UpdateConstraintsAndState( - cc::BrowserControlsState::kBoth, cc::BrowserControlsState::kShown, false); + cc::BrowserControlsState::kBoth, cc::BrowserControlsState::kShown); web_view->GetBrowserControls().SetShownRatio(1, 1); UpdateAllLifecyclePhases(); @@ -1323,8 +1370,7 @@ bottom_height, false); web_view->GetBrowserControls().UpdateConstraintsAndState( - cc::BrowserControlsState::kHidden, cc::BrowserControlsState::kHidden, - false); + cc::BrowserControlsState::kHidden, cc::BrowserControlsState::kHidden); // As we expand the top controls height while hidden, the content offset // shouldn't change. @@ -1601,16 +1647,14 @@ { // Pass a hidden constraint to Blink (without going through CC). Make sure - // the shown ratio doesn't change since CC is repsonsible for updating the + // the shown ratio doesn't change since CC is responsible for updating the // ratio. WebView().GetBrowserControls().UpdateConstraintsAndState( - cc::BrowserControlsState::kHidden, cc::BrowserControlsState::kBoth, - true /* animated */); + cc::BrowserControlsState::kHidden, cc::BrowserControlsState::kBoth); EXPECT_EQ(1.f, WebView().GetBrowserControls().TopShownRatio()); EXPECT_EQ(1.f, WebView().GetBrowserControls().BottomShownRatio()); WebView().GetBrowserControls().UpdateConstraintsAndState( - cc::BrowserControlsState::kHidden, cc::BrowserControlsState::kBoth, - false /* animated */); + cc::BrowserControlsState::kHidden, cc::BrowserControlsState::kBoth); EXPECT_EQ(1.f, WebView().GetBrowserControls().TopShownRatio()); EXPECT_EQ(1.f, WebView().GetBrowserControls().BottomShownRatio()); @@ -1629,13 +1673,11 @@ // Pass a shown constraint to Blink (without going through CC). Make sure // the shown ratio doesn't change. WebView().GetBrowserControls().UpdateConstraintsAndState( - cc::BrowserControlsState::kShown, cc::BrowserControlsState::kBoth, - true /* animated */); + cc::BrowserControlsState::kShown, cc::BrowserControlsState::kBoth); EXPECT_EQ(0.f, WebView().GetBrowserControls().TopShownRatio()); EXPECT_EQ(0.f, WebView().GetBrowserControls().BottomShownRatio()); WebView().GetBrowserControls().UpdateConstraintsAndState( - cc::BrowserControlsState::kShown, cc::BrowserControlsState::kBoth, - false /* animated */); + cc::BrowserControlsState::kShown, cc::BrowserControlsState::kBoth); EXPECT_EQ(0.f, WebView().GetBrowserControls().TopShownRatio()); EXPECT_EQ(0.f, WebView().GetBrowserControls().BottomShownRatio());
diff --git a/third_party/blink/renderer/core/frame/remote_frame.cc b/third_party/blink/renderer/core/frame/remote_frame.cc index 8e923593..e80ea43 100644 --- a/third_party/blink/renderer/core/frame/remote_frame.cc +++ b/third_party/blink/renderer/core/frame/remote_frame.cc
@@ -245,6 +245,22 @@ /*worker_timing_receiver=*/mojo::NullReceiver()); } +void RemoteFrame::DidStartLoading() { + SetIsLoading(true); +} + +void RemoteFrame::DidStopLoading() { + SetIsLoading(false); + + // When a subframe finishes loading, the parent should check if *all* + // subframes have finished loading (which may mean that the parent can declare + // that the parent itself has finished loading). This remote-subframe-focused + // code has a local-subframe equivalent in FrameLoader::DidFinishNavigation. + Frame* parent = Tree().Parent(); + if (parent) + parent->CheckCompleted(); +} + void RemoteFrame::DidFocus() { GetRemoteFrameHostRemote().DidFocusFrame(); }
diff --git a/third_party/blink/renderer/core/frame/remote_frame.h b/third_party/blink/renderer/core/frame/remote_frame.h index 280f04fc..87cc9bc 100644 --- a/third_party/blink/renderer/core/frame/remote_frame.h +++ b/third_party/blink/renderer/core/frame/remote_frame.h
@@ -121,6 +121,8 @@ void ScrollRectToVisible( const WebRect& rect_to_scroll, mojom::blink::ScrollIntoViewParamsPtr params) override; + void DidStartLoading() override; + void DidStopLoading() override; private: // Frame protected overrides:
diff --git a/third_party/blink/renderer/core/html/BUILD.gn b/third_party/blink/renderer/core/html/BUILD.gn index cd6d44da..b98d674 100644 --- a/third_party/blink/renderer/core/html/BUILD.gn +++ b/third_party/blink/renderer/core/html/BUILD.gn
@@ -580,7 +580,8 @@ "window_name_collection.h", ] - jumbo_excluded_sources = [ "canvas/canvas_rendering_context.cc" ] # https://crbug.com/716395 + jumbo_excluded_sources = + [ "canvas/canvas_rendering_context.cc" ] # https://crbug.com/716395 deps = [ "//services/metrics/public/cpp:metrics_cpp",
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_rendering_context_host.cc b/third_party/blink/renderer/core/html/canvas/canvas_rendering_context_host.cc index 13ecc51..5e3ca54 100644 --- a/third_party/blink/renderer/core/html/canvas/canvas_rendering_context_host.cc +++ b/third_party/blink/renderer/core/html/canvas/canvas_rendering_context_host.cc
@@ -183,9 +183,6 @@ presentation_mode, std::move(dispatcher), is_origin_top_left)); if (ResourceProvider()) { - // Always save an initial frame, to support resetting the top level - // matrix and clip. - ResourceProvider()->Canvas()->save(); ResourceProvider()->SetFilterQuality(FilterQuality()); ResourceProvider()->SetResourceRecyclingEnabled(true); }
diff --git a/third_party/blink/renderer/core/input/event_handler.cc b/third_party/blink/renderer/core/input/event_handler.cc index 28619181..6584168 100644 --- a/third_party/blink/renderer/core/input/event_handler.cc +++ b/third_party/blink/renderer/core/input/event_handler.cc
@@ -192,7 +192,8 @@ mouse_event_manager_( MakeGarbageCollected<MouseEventManager>(frame, *scroll_manager_)), mouse_wheel_event_manager_( - MakeGarbageCollected<MouseWheelEventManager>(frame)), + MakeGarbageCollected<MouseWheelEventManager>(frame, + *scroll_manager_)), keyboard_event_manager_( MakeGarbageCollected<KeyboardEventManager>(frame, *scroll_manager_)), pointer_event_manager_(
diff --git a/third_party/blink/renderer/core/input/mouse_wheel_event_manager.cc b/third_party/blink/renderer/core/input/mouse_wheel_event_manager.cc index 6f2c78d..5820d92 100644 --- a/third_party/blink/renderer/core/input/mouse_wheel_event_manager.cc +++ b/third_party/blink/renderer/core/input/mouse_wheel_event_manager.cc
@@ -15,14 +15,39 @@ #include "third_party/blink/renderer/core/layout/hit_test_request.h" #include "third_party/blink/renderer/core/layout/hit_test_result.h" #include "third_party/blink/renderer/core/layout/layout_view.h" +#include "third_party/blink/renderer/core/page/scrolling/root_scroller_controller.h" +#include "third_party/blink/renderer/core/page/scrolling/scroll_state.h" +#include "third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h" +#include "third_party/blink/renderer/platform/wtf/deque.h" namespace blink { -MouseWheelEventManager::MouseWheelEventManager(LocalFrame& frame) - : frame_(frame), wheel_target_(nullptr) {} + +namespace { + +gfx::Vector2dF ResolveMouseWheelPercentToWheelDelta( + const WebMouseWheelEvent& event) { + DCHECK(event.delta_units == + ui::input_types::ScrollGranularity::kScrollByPercentage); + // TODO (dlibby): OS scroll settings need to be factored into this. + // Note that this value is negative because we're converting from wheel + // ticks to wheel delta pixel. Wheel ticks are negative for scrolling down, + // but the delta must be positive. + constexpr float percent_mouse_wheel_ticks_multiplier = -100.f; + return gfx::Vector2dF( + event.wheel_ticks_x * percent_mouse_wheel_ticks_multiplier, + event.wheel_ticks_y * percent_mouse_wheel_ticks_multiplier); +} + +} // namespace + +MouseWheelEventManager::MouseWheelEventManager(LocalFrame& frame, + ScrollManager& scroll_manager) + : frame_(frame), wheel_target_(nullptr), scroll_manager_(scroll_manager) {} void MouseWheelEventManager::Trace(blink::Visitor* visitor) { visitor->Trace(frame_); visitor->Trace(wheel_target_); + visitor->Trace(scroll_manager_); } void MouseWheelEventManager::Clear() { @@ -79,7 +104,14 @@ if (wheel_target_) { WheelEvent* dom_event = - WheelEvent::Create(event, wheel_target_->GetDocument().domWindow()); + (event.delta_units == + ui::input_types::ScrollGranularity::kScrollByPercentage) + ? WheelEvent::Create(event, + ResolveMouseWheelPercentToWheelDelta(event), + wheel_target_->GetDocument().domWindow()) + : WheelEvent::Create(event, + wheel_target_->GetDocument().domWindow()); + // The event handler might remove |wheel_target_| from DOM so we should get // this value now (see https://crbug.com/857013). bool should_enforce_vertical_scroll =
diff --git a/third_party/blink/renderer/core/input/mouse_wheel_event_manager.h b/third_party/blink/renderer/core/input/mouse_wheel_event_manager.h index 80f2fb7..8f1577c7 100644 --- a/third_party/blink/renderer/core/input/mouse_wheel_event_manager.h +++ b/third_party/blink/renderer/core/input/mouse_wheel_event_manager.h
@@ -7,6 +7,7 @@ #include "base/macros.h" #include "third_party/blink/public/platform/web_input_event_result.h" +#include "third_party/blink/renderer/core/input/scroll_manager.h" #include "third_party/blink/renderer/platform/heap/handle.h" #include "third_party/blink/renderer/platform/heap/visitor.h" @@ -21,7 +22,7 @@ class MouseWheelEventManager final : public GarbageCollected<MouseWheelEventManager> { public: - explicit MouseWheelEventManager(LocalFrame&); + explicit MouseWheelEventManager(LocalFrame&, ScrollManager&); void Trace(blink::Visitor*); void Clear(); @@ -37,6 +38,7 @@ const Member<LocalFrame> frame_; Member<Node> wheel_target_; + Member<ScrollManager> scroll_manager_; DISALLOW_COPY_AND_ASSIGN(MouseWheelEventManager); };
diff --git a/third_party/blink/renderer/core/input/scroll_manager.cc b/third_party/blink/renderer/core/input/scroll_manager.cc index 692a248..3858e28 100644 --- a/third_party/blink/renderer/core/input/scroll_manager.cc +++ b/third_party/blink/renderer/core/input/scroll_manager.cc
@@ -659,6 +659,8 @@ WebInputEventResult ScrollManager::HandleGestureScrollEnd( const WebGestureEvent& gesture_event) { TRACE_EVENT0("input", "ScrollManager::handleGestureScrollEnd"); + GetPage()->GetBrowserControls().ScrollEnd(); + Node* node = scroll_gesture_handling_node_; if (node && node->GetLayoutObject()) {
diff --git a/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc b/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc index 17e1d15..52ba292 100644 --- a/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc +++ b/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc
@@ -382,9 +382,6 @@ if (ResourceProvider() && ResourceProvider()->IsValid()) { ResourceProvider()->Clear(); - // Always save an initial frame, to support resetting the top level matrix - // and clip. - ResourceProvider()->Canvas()->save(); if (needs_matrix_clip_restore_) { needs_matrix_clip_restore_ = false;
diff --git a/third_party/blink/renderer/core/paint/list_marker_painter.cc b/third_party/blink/renderer/core/paint/list_marker_painter.cc index 3d0509e..9f77d79 100644 --- a/third_party/blink/renderer/core/paint/list_marker_painter.cc +++ b/third_party/blink/renderer/core/paint/list_marker_painter.cc
@@ -25,6 +25,8 @@ const IntRect& marker) { DCHECK(object); GraphicsContext& context = paint_info.context; + ScopedDarkModeElementRoleOverride ensure_inverted_like_text( + &context, DarkModeFilter::ElementRole::kText); Color color(object->ResolveColor(GetCSSPropertyColor())); if (BoxModelObjectPainter::ShouldForceWhiteBackgroundForPrintEconomy( object->GetDocument(), style))
diff --git a/third_party/blink/renderer/core/script/BUILD.gn b/third_party/blink/renderer/core/script/BUILD.gn index 87385a2..c8ef4df 100644 --- a/third_party/blink/renderer/core/script/BUILD.gn +++ b/third_party/blink/renderer/core/script/BUILD.gn
@@ -70,9 +70,7 @@ "xml_parser_script_runner_host.h", ] - deps = [ - "//third_party/blink/public:resources", - ] + deps = [ "//third_party/blink/public:resources" ] jumbo_excluded_sources = [ "modulator.cc" ] # https://crbug.com/716395 } @@ -86,14 +84,10 @@ "resources/layered_api/elements/virtual-scroller/visibility-manager.mjs", ] - outputs = [ - "{{source_gen_dir}}/{{source_file_part}}", - ] + outputs = [ "{{source_gen_dir}}/{{source_file_part}}" ] } group("js_files_for_web_tests") { testonly = true - data_deps = [ - ":layered_apis_elements_virtual_scroller_js", - ] + data_deps = [ ":layered_apis_elements_virtual_scroller_js" ] }
diff --git a/third_party/blink/renderer/core/scroll/scrollable_area.cc b/third_party/blink/renderer/core/scroll/scrollable_area.cc index d91ef93f..5db1a18 100644 --- a/third_party/blink/renderer/core/scroll/scrollable_area.cc +++ b/third_party/blink/renderer/core/scroll/scrollable_area.cc
@@ -160,6 +160,8 @@ case ScrollGranularity::kScrollByPixel: case ScrollGranularity::kScrollByPrecisePixel: return PixelStep(orientation); + case ScrollGranularity::kScrollByPercentage: + return PercentageStep(orientation); default: NOTREACHED(); return 0.0f; @@ -772,6 +774,14 @@ return 1; } +float ScrollableArea::PercentageStep(ScrollbarOrientation orientation) const { + int percent_basis = + (orientation == ScrollbarOrientation::kHorizontalScrollbar) + ? VisibleWidth() + : VisibleHeight(); + return static_cast<float>(percent_basis); +} + int ScrollableArea::VerticalScrollbarWidth( OverlayScrollbarClipBehavior behavior) const { DCHECK_EQ(behavior, kIgnorePlatformOverlayScrollbarSize);
diff --git a/third_party/blink/renderer/core/scroll/scrollable_area.h b/third_party/blink/renderer/core/scroll/scrollable_area.h index 5cfd8ed..81eb4eb 100644 --- a/third_party/blink/renderer/core/scroll/scrollable_area.h +++ b/third_party/blink/renderer/core/scroll/scrollable_area.h
@@ -569,6 +569,12 @@ virtual int DocumentStep(ScrollbarOrientation) const; virtual float PixelStep(ScrollbarOrientation) const; + // This returns the amount a percent-based delta should be resolved against; + // which is the visible height of the scroller. This value is eventually + // used to scroll the incoming scroll delta, where a scroll delta of 1 + // represents one hundred percent. + float PercentageStep(ScrollbarOrientation) const; + // Returns true if a snap point was found. bool PerformSnapping( const cc::SnapSelectionStrategy& strategy,
diff --git a/third_party/blink/renderer/core/svg/svg_angle.cc b/third_party/blink/renderer/core/svg/svg_angle.cc index 37936c9..b0c6b58 100644 --- a/third_party/blink/renderer/core/svg/svg_angle.cc +++ b/third_party/blink/renderer/core/svg/svg_angle.cc
@@ -362,7 +362,7 @@ } void SVGAngle::Add(SVGPropertyBase* other, SVGElement*) { - SVGAngle* other_angle = ToSVGAngle(other); + auto* other_angle = To<SVGAngle>(other); // Only respect by animations, if from and by are both specified in angles // (and not, for example, 'auto'). @@ -391,8 +391,8 @@ SVGPropertyBase* to, SVGPropertyBase* to_at_end_of_duration, SVGElement*) { - SVGAngle* from_angle = ToSVGAngle(from); - SVGAngle* to_angle = ToSVGAngle(to); + auto* from_angle = To<SVGAngle>(from); + auto* to_angle = To<SVGAngle>(to); SVGMarkerOrientType from_orient_type = from_angle->OrientType()->EnumValue(); SVGMarkerOrientType to_orient_type = to_angle->OrientType()->EnumValue(); @@ -407,13 +407,13 @@ float animated_value = Value(); animation_element.AnimateAdditiveNumber( percentage, repeat_count, from_angle->Value(), to_angle->Value(), - ToSVGAngle(to_at_end_of_duration)->Value(), animated_value); + To<SVGAngle>(to_at_end_of_duration)->Value(), animated_value); OrientType()->SetEnumValue(kSVGMarkerOrientAngle); SetValue(animated_value); } float SVGAngle::CalculateDistance(SVGPropertyBase* other, SVGElement*) { - return fabsf(Value() - ToSVGAngle(other)->Value()); + return fabsf(Value() - To<SVGAngle>(other)->Value()); } void SVGAngle::OrientTypeChanged() {
diff --git a/third_party/blink/renderer/core/svg/svg_angle.h b/third_party/blink/renderer/core/svg/svg_angle.h index 0544951..31671f3 100644 --- a/third_party/blink/renderer/core/svg/svg_angle.h +++ b/third_party/blink/renderer/core/svg/svg_angle.h
@@ -26,6 +26,7 @@ #include "third_party/blink/renderer/core/svg/svg_enumeration.h" #include "third_party/blink/renderer/core/svg/svg_parsing_error.h" #include "third_party/blink/renderer/platform/heap/handle.h" +#include "third_party/blink/renderer/platform/wtf/casting.h" namespace blink { @@ -140,7 +141,12 @@ Member<SVGMarkerOrientEnumeration> orient_type_; }; -DEFINE_SVG_PROPERTY_TYPE_CASTS(SVGAngle); +template <> +struct DowncastTraits<SVGAngle> { + static bool AllowFrom(const SVGPropertyBase& value) { + return value.GetType() == SVGAngle::ClassType(); + } +}; } // namespace blink
diff --git a/third_party/blink/renderer/core/svg/svg_animated_color.cc b/third_party/blink/renderer/core/svg/svg_animated_color.cc index 3386504..355977b 100644 --- a/third_party/blink/renderer/core/svg/svg_animated_color.cc +++ b/third_party/blink/renderer/core/svg/svg_animated_color.cc
@@ -60,7 +60,7 @@ Color fallback_color = FallbackColorForCurrentColor(context_element); Color from_color = - ToSVGColorProperty(other)->style_color_.Resolve(fallback_color); + To<SVGColorProperty>(other)->style_color_.Resolve(fallback_color); Color to_color = style_color_.Resolve(fallback_color); style_color_ = StyleColor(ColorDistance::AddColors(from_color, to_color)); } @@ -73,10 +73,10 @@ SVGPropertyBase* to_value, SVGPropertyBase* to_at_end_of_duration_value, SVGElement* context_element) { - StyleColor from_style_color = ToSVGColorProperty(from_value)->style_color_; - StyleColor to_style_color = ToSVGColorProperty(to_value)->style_color_; + StyleColor from_style_color = To<SVGColorProperty>(from_value)->style_color_; + StyleColor to_style_color = To<SVGColorProperty>(to_value)->style_color_; StyleColor to_at_end_of_duration_style_color = - ToSVGColorProperty(to_at_end_of_duration_value)->style_color_; + To<SVGColorProperty>(to_at_end_of_duration_value)->style_color_; // Apply currentColor rules. DCHECK(context_element); @@ -119,7 +119,7 @@ Color from_color = style_color_.Resolve(fallback_color); Color to_color = - ToSVGColorProperty(to_value)->style_color_.Resolve(fallback_color); + To<SVGColorProperty>(to_value)->style_color_.Resolve(fallback_color); return ColorDistance::Distance(from_color, to_color); }
diff --git a/third_party/blink/renderer/core/svg/svg_animated_color.h b/third_party/blink/renderer/core/svg/svg_animated_color.h index 4a277f7..18ea4d1 100644 --- a/third_party/blink/renderer/core/svg/svg_animated_color.h +++ b/third_party/blink/renderer/core/svg/svg_animated_color.h
@@ -33,6 +33,7 @@ #include "third_party/blink/renderer/core/css/style_color.h" #include "third_party/blink/renderer/core/svg/properties/svg_property.h" +#include "third_party/blink/renderer/platform/wtf/casting.h" namespace blink { @@ -63,7 +64,12 @@ StyleColor style_color_; }; -DEFINE_SVG_PROPERTY_TYPE_CASTS(SVGColorProperty); +template <> +struct DowncastTraits<SVGColorProperty> { + static bool AllowFrom(const SVGPropertyBase& value) { + return value.GetType() == SVGColorProperty::ClassType(); + } +}; } // namespace blink
diff --git a/third_party/blink/renderer/core/svg/svg_integer.cc b/third_party/blink/renderer/core/svg/svg_integer.cc index 68592578..d39b494 100644 --- a/third_party/blink/renderer/core/svg/svg_integer.cc +++ b/third_party/blink/renderer/core/svg/svg_integer.cc
@@ -59,7 +59,7 @@ } void SVGInteger::Add(SVGPropertyBase* other, SVGElement*) { - SetValue(value_ + ToSVGInteger(other)->Value()); + SetValue(value_ + To<SVGInteger>(other)->Value()); } void SVGInteger::CalculateAnimatedValue( @@ -70,10 +70,9 @@ SVGPropertyBase* to, SVGPropertyBase* to_at_end_of_duration, SVGElement*) { - SVGInteger* from_integer = ToSVGInteger(from); - SVGInteger* to_integer = ToSVGInteger(to); - SVGInteger* to_at_end_of_duration_integer = - ToSVGInteger(to_at_end_of_duration); + auto* from_integer = To<SVGInteger>(from); + auto* to_integer = To<SVGInteger>(to); + auto* to_at_end_of_duration_integer = To<SVGInteger>(to_at_end_of_duration); float animated_float = value_; animation_element.AnimateAdditiveNumber( @@ -83,7 +82,7 @@ } float SVGInteger::CalculateDistance(SVGPropertyBase* other, SVGElement*) { - return abs(value_ - ToSVGInteger(other)->Value()); + return abs(value_ - To<SVGInteger>(other)->Value()); } } // namespace blink
diff --git a/third_party/blink/renderer/core/svg/svg_integer.h b/third_party/blink/renderer/core/svg/svg_integer.h index d1c2ab4..90924b8 100644 --- a/third_party/blink/renderer/core/svg/svg_integer.h +++ b/third_party/blink/renderer/core/svg/svg_integer.h
@@ -33,6 +33,7 @@ #include "third_party/blink/renderer/core/svg/properties/svg_property_helper.h" #include "third_party/blink/renderer/core/svg/svg_parsing_error.h" +#include "third_party/blink/renderer/platform/wtf/casting.h" namespace blink { @@ -71,7 +72,12 @@ int value_; }; -DEFINE_SVG_PROPERTY_TYPE_CASTS(SVGInteger); +template <> +struct DowncastTraits<SVGInteger> { + static bool AllowFrom(const SVGPropertyBase& value) { + return value.GetType() == SVGInteger::ClassType(); + } +}; } // namespace blink
diff --git a/third_party/blink/renderer/core/svg/svg_integer_optional_integer.cc b/third_party/blink/renderer/core/svg/svg_integer_optional_integer.cc index 467bcf2c..6783a1e 100644 --- a/third_party/blink/renderer/core/svg/svg_integer_optional_integer.cc +++ b/third_party/blink/renderer/core/svg/svg_integer_optional_integer.cc
@@ -89,7 +89,7 @@ void SVGIntegerOptionalInteger::Add(SVGPropertyBase* other, SVGElement* context_element) { - auto* other_integer_optional_integer = ToSVGIntegerOptionalInteger(other); + auto* other_integer_optional_integer = To<SVGIntegerOptionalInteger>(other); first_integer_->Add(other_integer_optional_integer->FirstInteger(), context_element); second_integer_->Add(other_integer_optional_integer->SecondInteger(), @@ -104,10 +104,10 @@ SVGPropertyBase* to, SVGPropertyBase* to_at_end_of_duration, SVGElement* context_element) { - auto* from_integer = ToSVGIntegerOptionalInteger(from); - auto* to_integer = ToSVGIntegerOptionalInteger(to); + auto* from_integer = To<SVGIntegerOptionalInteger>(from); + auto* to_integer = To<SVGIntegerOptionalInteger>(to); auto* to_at_end_of_duration_integer = - ToSVGIntegerOptionalInteger(to_at_end_of_duration); + To<SVGIntegerOptionalInteger>(to_at_end_of_duration); first_integer_->CalculateAnimatedValue( animation_element, percentage, repeat_count, from_integer->FirstInteger(),
diff --git a/third_party/blink/renderer/core/svg/svg_integer_optional_integer.h b/third_party/blink/renderer/core/svg/svg_integer_optional_integer.h index 69b587a..d4b6763 100644 --- a/third_party/blink/renderer/core/svg/svg_integer_optional_integer.h +++ b/third_party/blink/renderer/core/svg/svg_integer_optional_integer.h
@@ -34,6 +34,7 @@ #include "third_party/blink/renderer/core/svg/svg_integer.h" #include "third_party/blink/renderer/core/svg/svg_parsing_error.h" #include "third_party/blink/renderer/platform/heap/handle.h" +#include "third_party/blink/renderer/platform/wtf/casting.h" namespace blink { @@ -80,7 +81,12 @@ Member<SVGInteger> second_integer_; }; -DEFINE_SVG_PROPERTY_TYPE_CASTS(SVGIntegerOptionalInteger); +template <> +struct DowncastTraits<SVGIntegerOptionalInteger> { + static bool AllowFrom(const SVGPropertyBase& value) { + return value.GetType() == SVGIntegerOptionalInteger::ClassType(); + } +}; } // namespace blink
diff --git a/third_party/blink/renderer/core/svg/svg_length.cc b/third_party/blink/renderer/core/svg/svg_length.cc index 7533e316..fe68626 100644 --- a/third_party/blink/renderer/core/svg/svg_length.cc +++ b/third_party/blink/renderer/core/svg/svg_length.cc
@@ -326,7 +326,7 @@ void SVGLength::Add(SVGPropertyBase* other, SVGElement* context_element) { SVGLengthContext length_context(context_element); - SetValue(Value(length_context) + ToSVGLength(other)->Value(length_context), + SetValue(Value(length_context) + To<SVGLength>(other)->Value(length_context), length_context); } @@ -338,10 +338,10 @@ SVGPropertyBase* to_value, SVGPropertyBase* to_at_end_of_duration_value, SVGElement* context_element) { - SVGLength* from_length = ToSVGLength(from_value); - SVGLength* to_length = ToSVGLength(to_value); - SVGLength* to_at_end_of_duration_length = - ToSVGLength(to_at_end_of_duration_value); + auto* from_length = To<SVGLength>(from_value); + auto* to_length = To<SVGLength>(to_value); + auto* to_at_end_of_duration_length = + To<SVGLength>(to_at_end_of_duration_value); SVGLengthContext length_context(context_element); float animated_number = Value(length_context); @@ -374,7 +374,7 @@ float SVGLength::CalculateDistance(SVGPropertyBase* to_value, SVGElement* context_element) { SVGLengthContext length_context(context_element); - SVGLength* to_length = ToSVGLength(to_value); + auto* to_length = To<SVGLength>(to_value); return fabsf(to_length->Value(length_context) - Value(length_context)); }
diff --git a/third_party/blink/renderer/core/svg/svg_length.h b/third_party/blink/renderer/core/svg/svg_length.h index 3c286d3..413ee499 100644 --- a/third_party/blink/renderer/core/svg/svg_length.h +++ b/third_party/blink/renderer/core/svg/svg_length.h
@@ -27,6 +27,7 @@ #include "third_party/blink/renderer/core/svg/svg_length_context.h" #include "third_party/blink/renderer/core/svg/svg_parsing_error.h" #include "third_party/blink/renderer/platform/heap/handle.h" +#include "third_party/blink/renderer/platform/wtf/casting.h" namespace blink { @@ -144,7 +145,12 @@ unsigned unit_mode_ : 2; }; -DEFINE_SVG_PROPERTY_TYPE_CASTS(SVGLength); +template <> +struct DowncastTraits<SVGLength> { + static bool AllowFrom(const SVGPropertyBase& value) { + return value.GetType() == SVGLength::ClassType(); + } +}; } // namespace blink
diff --git a/third_party/blink/renderer/core/svg/svg_length_list.cc b/third_party/blink/renderer/core/svg/svg_length_list.cc index c6d952c..795fac4 100644 --- a/third_party/blink/renderer/core/svg/svg_length_list.cc +++ b/third_party/blink/renderer/core/svg/svg_length_list.cc
@@ -90,7 +90,7 @@ } void SVGLengthList::Add(SVGPropertyBase* other, SVGElement* context_element) { - SVGLengthList* other_list = ToSVGLengthList(other); + auto* other_list = To<SVGLengthList>(other); if (length() != other_list->length()) return; @@ -114,10 +114,10 @@ SVGPropertyBase* to_value, SVGPropertyBase* to_at_end_of_duration_value, SVGElement* context_element) { - SVGLengthList* from_list = ToSVGLengthList(from_value); - SVGLengthList* to_list = ToSVGLengthList(to_value); - SVGLengthList* to_at_end_of_duration_list = - ToSVGLengthList(to_at_end_of_duration_value); + auto* from_list = To<SVGLengthList>(from_value); + auto* to_list = To<SVGLengthList>(to_value); + auto* to_at_end_of_duration_list = + To<SVGLengthList>(to_at_end_of_duration_value); SVGLengthContext length_context(context_element); DCHECK_EQ(mode_, SVGLength::LengthModeForAnimatedLengthAttribute(
diff --git a/third_party/blink/renderer/core/svg/svg_length_list.h b/third_party/blink/renderer/core/svg/svg_length_list.h index 680a373..dea9d67 100644 --- a/third_party/blink/renderer/core/svg/svg_length_list.h +++ b/third_party/blink/renderer/core/svg/svg_length_list.h
@@ -34,6 +34,7 @@ #include "third_party/blink/renderer/core/svg/properties/svg_list_property_helper.h" #include "third_party/blink/renderer/core/svg/svg_length.h" #include "third_party/blink/renderer/core/svg/svg_parsing_error.h" +#include "third_party/blink/renderer/platform/wtf/casting.h" namespace blink { @@ -79,7 +80,12 @@ SVGLengthMode mode_; }; -DEFINE_SVG_PROPERTY_TYPE_CASTS(SVGLengthList); +template <> +struct DowncastTraits<SVGLengthList> { + static bool AllowFrom(const SVGPropertyBase& value) { + return value.GetType() == SVGLengthList::ClassType(); + } +}; } // namespace blink
diff --git a/third_party/blink/renderer/core/svg/svg_number.cc b/third_party/blink/renderer/core/svg/svg_number.cc index 438ea1c..10e6f1a 100644 --- a/third_party/blink/renderer/core/svg/svg_number.cc +++ b/third_party/blink/renderer/core/svg/svg_number.cc
@@ -75,7 +75,7 @@ } void SVGNumber::Add(SVGPropertyBase* other, SVGElement*) { - SetValue(value_ + ToSVGNumber(other)->Value()); + SetValue(value_ + To<SVGNumber>(other)->Value()); } void SVGNumber::CalculateAnimatedValue( @@ -86,9 +86,9 @@ SVGPropertyBase* to, SVGPropertyBase* to_at_end_of_duration, SVGElement*) { - SVGNumber* from_number = ToSVGNumber(from); - SVGNumber* to_number = ToSVGNumber(to); - SVGNumber* to_at_end_of_duration_number = ToSVGNumber(to_at_end_of_duration); + auto* from_number = To<SVGNumber>(from); + auto* to_number = To<SVGNumber>(to); + auto* to_at_end_of_duration_number = To<SVGNumber>(to_at_end_of_duration); animation_element.AnimateAdditiveNumber( percentage, repeat_count, from_number->Value(), to_number->Value(), @@ -96,7 +96,7 @@ } float SVGNumber::CalculateDistance(SVGPropertyBase* other, SVGElement*) { - return fabsf(value_ - ToSVGNumber(other)->Value()); + return fabsf(value_ - To<SVGNumber>(other)->Value()); } SVGNumber* SVGNumberAcceptPercentage::Clone() const {
diff --git a/third_party/blink/renderer/core/svg/svg_number.h b/third_party/blink/renderer/core/svg/svg_number.h index ec58381..d081ee5 100644 --- a/third_party/blink/renderer/core/svg/svg_number.h +++ b/third_party/blink/renderer/core/svg/svg_number.h
@@ -33,6 +33,7 @@ #include "third_party/blink/renderer/core/svg/properties/svg_property_helper.h" #include "third_party/blink/renderer/core/svg/svg_parsing_error.h" +#include "third_party/blink/renderer/platform/wtf/casting.h" namespace blink { @@ -77,7 +78,12 @@ float value_; }; -DEFINE_SVG_PROPERTY_TYPE_CASTS(SVGNumber); +template <> +struct DowncastTraits<SVGNumber> { + static bool AllowFrom(const SVGPropertyBase& value) { + return value.GetType() == SVGNumber::ClassType(); + } +}; // SVGNumber which also accepts percentage as its value. // This is used for <stop> "offset"
diff --git a/third_party/blink/renderer/core/svg/svg_number_list.cc b/third_party/blink/renderer/core/svg/svg_number_list.cc index e2002e79..615df5c 100644 --- a/third_party/blink/renderer/core/svg/svg_number_list.cc +++ b/third_party/blink/renderer/core/svg/svg_number_list.cc
@@ -69,7 +69,7 @@ } void SVGNumberList::Add(SVGPropertyBase* other, SVGElement* context_element) { - SVGNumberList* other_list = ToSVGNumberList(other); + auto* other_list = To<SVGNumberList>(other); if (length() != other_list->length()) return; @@ -86,10 +86,10 @@ SVGPropertyBase* to_value, SVGPropertyBase* to_at_end_of_duration_value, SVGElement* context_element) { - SVGNumberList* from_list = ToSVGNumberList(from_value); - SVGNumberList* to_list = ToSVGNumberList(to_value); - SVGNumberList* to_at_end_of_duration_list = - ToSVGNumberList(to_at_end_of_duration_value); + auto* from_list = To<SVGNumberList>(from_value); + auto* to_list = To<SVGNumberList>(to_value); + auto* to_at_end_of_duration_list = + To<SVGNumberList>(to_at_end_of_duration_value); uint32_t from_list_size = from_list->length(); uint32_t to_list_size = to_list->length();
diff --git a/third_party/blink/renderer/core/svg/svg_number_list.h b/third_party/blink/renderer/core/svg/svg_number_list.h index 89eb0af..860f379 100644 --- a/third_party/blink/renderer/core/svg/svg_number_list.h +++ b/third_party/blink/renderer/core/svg/svg_number_list.h
@@ -34,6 +34,7 @@ #include "third_party/blink/renderer/core/svg/properties/svg_list_property_helper.h" #include "third_party/blink/renderer/core/svg/svg_number.h" #include "third_party/blink/renderer/core/svg/svg_parsing_error.h" +#include "third_party/blink/renderer/platform/wtf/casting.h" namespace blink { @@ -72,7 +73,12 @@ SVGParsingError Parse(const CharType*& ptr, const CharType* end); }; -DEFINE_SVG_PROPERTY_TYPE_CASTS(SVGNumberList); +template <> +struct DowncastTraits<SVGNumberList> { + static bool AllowFrom(const SVGPropertyBase& value) { + return value.GetType() == SVGNumberList::ClassType(); + } +}; } // namespace blink
diff --git a/third_party/blink/renderer/core/svg/svg_number_optional_number.cc b/third_party/blink/renderer/core/svg/svg_number_optional_number.cc index cd154d4..c085ce2 100644 --- a/third_party/blink/renderer/core/svg/svg_number_optional_number.cc +++ b/third_party/blink/renderer/core/svg/svg_number_optional_number.cc
@@ -91,7 +91,7 @@ void SVGNumberOptionalNumber::Add(SVGPropertyBase* other, SVGElement* context_element) { - auto* other_number_optional_number = ToSVGNumberOptionalNumber(other); + auto* other_number_optional_number = To<SVGNumberOptionalNumber>(other); first_number_->Add(other_number_optional_number->FirstNumber(), context_element); second_number_->Add(other_number_optional_number->SecondNumber(), @@ -106,10 +106,10 @@ SVGPropertyBase* to, SVGPropertyBase* to_at_end_of_duration, SVGElement* context_element) { - auto* from_number = ToSVGNumberOptionalNumber(from); - auto* to_number = ToSVGNumberOptionalNumber(to); + auto* from_number = To<SVGNumberOptionalNumber>(from); + auto* to_number = To<SVGNumberOptionalNumber>(to); auto* to_at_end_of_duration_number = - ToSVGNumberOptionalNumber(to_at_end_of_duration); + To<SVGNumberOptionalNumber>(to_at_end_of_duration); first_number_->CalculateAnimatedValue( animation_element, percentage, repeat_count, from_number->FirstNumber(),
diff --git a/third_party/blink/renderer/core/svg/svg_number_optional_number.h b/third_party/blink/renderer/core/svg/svg_number_optional_number.h index 06f48ff8..f012d6f 100644 --- a/third_party/blink/renderer/core/svg/svg_number_optional_number.h +++ b/third_party/blink/renderer/core/svg/svg_number_optional_number.h
@@ -34,6 +34,7 @@ #include "third_party/blink/renderer/core/svg/svg_number.h" #include "third_party/blink/renderer/core/svg/svg_parsing_error.h" #include "third_party/blink/renderer/platform/heap/handle.h" +#include "third_party/blink/renderer/platform/wtf/casting.h" namespace blink { @@ -79,7 +80,12 @@ Member<SVGNumber> second_number_; }; -DEFINE_SVG_PROPERTY_TYPE_CASTS(SVGNumberOptionalNumber); +template <> +struct DowncastTraits<SVGNumberOptionalNumber> { + static bool AllowFrom(const SVGPropertyBase& value) { + return value.GetType() == SVGNumberOptionalNumber::ClassType(); + } +}; } // namespace blink
diff --git a/third_party/blink/renderer/core/svg/svg_path.cc b/third_party/blink/renderer/core/svg/svg_path.cc index d13e8ec8..595552d2 100644 --- a/third_party/blink/renderer/core/svg/svg_path.cc +++ b/third_party/blink/renderer/core/svg/svg_path.cc
@@ -114,8 +114,7 @@ } void SVGPath::Add(SVGPropertyBase* other, SVGElement*) { - const SVGPathByteStream& other_path_byte_stream = - ToSVGPath(other)->ByteStream(); + const auto& other_path_byte_stream = To<SVGPath>(other)->ByteStream(); if (ByteStream().size() != other_path_byte_stream.size() || ByteStream().IsEmpty() || other_path_byte_stream.IsEmpty()) return; @@ -134,14 +133,14 @@ SVGElement*) { bool is_to_animation = animation_element.GetAnimationMode() == kToAnimation; - const SVGPath& to = ToSVGPath(*to_value); + const auto& to = To<SVGPath>(*to_value); const SVGPathByteStream& to_stream = to.ByteStream(); // If no 'to' value is given, nothing to animate. if (!to_stream.size()) return; - const SVGPath& from = ToSVGPath(*from_value); + const auto& from = To<SVGPath>(*from_value); const SVGPathByteStream* from_stream = &from.ByteStream(); std::unique_ptr<SVGPathByteStream> copy; @@ -178,7 +177,7 @@ if (repeat_count && animation_element.IsAccumulated()) { new_stream = ConditionallyAddPathByteStreams( std::move(new_stream), - ToSVGPath(to_at_end_of_duration_value)->ByteStream(), repeat_count); + To<SVGPath>(to_at_end_of_duration_value)->ByteStream(), repeat_count); } } path_value_ = MakeGarbageCollected<CSSPathValue>(std::move(new_stream));
diff --git a/third_party/blink/renderer/core/svg/svg_path.h b/third_party/blink/renderer/core/svg/svg_path.h index c8351b2..abeef6c0 100644 --- a/third_party/blink/renderer/core/svg/svg_path.h +++ b/third_party/blink/renderer/core/svg/svg_path.h
@@ -35,6 +35,7 @@ #include "third_party/blink/renderer/core/svg/properties/svg_property.h" #include "third_party/blink/renderer/core/svg/svg_parsing_error.h" #include "third_party/blink/renderer/core/svg/svg_path_byte_stream.h" +#include "third_party/blink/renderer/platform/wtf/casting.h" namespace blink { @@ -77,7 +78,12 @@ Member<cssvalue::CSSPathValue> path_value_; }; -DEFINE_SVG_PROPERTY_TYPE_CASTS(SVGPath); +template <> +struct DowncastTraits<SVGPath> { + static bool AllowFrom(const SVGPropertyBase& value) { + return value.GetType() == SVGPath::ClassType(); + } +}; } // namespace blink
diff --git a/third_party/blink/renderer/core/svg/svg_point_list.cc b/third_party/blink/renderer/core/svg/svg_point_list.cc index 842eb8f..04ef9ff 100644 --- a/third_party/blink/renderer/core/svg/svg_point_list.cc +++ b/third_party/blink/renderer/core/svg/svg_point_list.cc
@@ -83,7 +83,7 @@ } void SVGPointList::Add(SVGPropertyBase* other, SVGElement* context_element) { - SVGPointList* other_list = ToSVGPointList(other); + auto* other_list = To<SVGPointList>(other); if (length() != other_list->length()) return; @@ -100,10 +100,10 @@ SVGPropertyBase* to_value, SVGPropertyBase* to_at_end_of_duration_value, SVGElement* context_element) { - SVGPointList* from_list = ToSVGPointList(from_value); - SVGPointList* to_list = ToSVGPointList(to_value); - SVGPointList* to_at_end_of_duration_list = - ToSVGPointList(to_at_end_of_duration_value); + auto* from_list = To<SVGPointList>(from_value); + auto* to_list = To<SVGPointList>(to_value); + auto* to_at_end_of_duration_list = + To<SVGPointList>(to_at_end_of_duration_value); uint32_t from_point_list_size = from_list->length(); uint32_t to_point_list_size = to_list->length();
diff --git a/third_party/blink/renderer/core/svg/svg_point_list.h b/third_party/blink/renderer/core/svg/svg_point_list.h index 4a4ff61..ce06e5e5 100644 --- a/third_party/blink/renderer/core/svg/svg_point_list.h +++ b/third_party/blink/renderer/core/svg/svg_point_list.h
@@ -34,6 +34,7 @@ #include "third_party/blink/renderer/core/svg/properties/svg_list_property_helper.h" #include "third_party/blink/renderer/core/svg/svg_parsing_error.h" #include "third_party/blink/renderer/core/svg/svg_point.h" +#include "third_party/blink/renderer/platform/wtf/casting.h" namespace blink { @@ -70,7 +71,12 @@ SVGParsingError Parse(const CharType*& ptr, const CharType* end); }; -DEFINE_SVG_PROPERTY_TYPE_CASTS(SVGPointList); +template <> +struct DowncastTraits<SVGPointList> { + static bool AllowFrom(const SVGPropertyBase& value) { + return value.GetType() == SVGPointList::ClassType(); + } +}; } // namespace blink
diff --git a/third_party/blink/renderer/core/svg/svg_rect.cc b/third_party/blink/renderer/core/svg/svg_rect.cc index 0e494da..096bd56 100644 --- a/third_party/blink/renderer/core/svg/svg_rect.cc +++ b/third_party/blink/renderer/core/svg/svg_rect.cc
@@ -91,7 +91,7 @@ } void SVGRect::Add(SVGPropertyBase* other, SVGElement*) { - value_ += ToSVGRect(other)->Value(); + value_ += To<SVGRect>(other)->Value(); } void SVGRect::CalculateAnimatedValue( @@ -102,9 +102,9 @@ SVGPropertyBase* to_value, SVGPropertyBase* to_at_end_of_duration_value, SVGElement*) { - SVGRect* from_rect = ToSVGRect(from_value); - SVGRect* to_rect = ToSVGRect(to_value); - SVGRect* to_at_end_of_duration_rect = ToSVGRect(to_at_end_of_duration_value); + auto* from_rect = To<SVGRect>(from_value); + auto* to_rect = To<SVGRect>(to_value); + auto* to_at_end_of_duration_rect = To<SVGRect>(to_at_end_of_duration_value); float animated_x = X(); float animated_y = Y();
diff --git a/third_party/blink/renderer/core/svg/svg_rect.h b/third_party/blink/renderer/core/svg/svg_rect.h index a3de5c7..e36f4c9 100644 --- a/third_party/blink/renderer/core/svg/svg_rect.h +++ b/third_party/blink/renderer/core/svg/svg_rect.h
@@ -24,6 +24,7 @@ #include "third_party/blink/renderer/core/svg/svg_parsing_error.h" #include "third_party/blink/renderer/platform/geometry/float_rect.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" +#include "third_party/blink/renderer/platform/wtf/casting.h" namespace blink { @@ -83,7 +84,12 @@ FloatRect value_; }; -DEFINE_SVG_PROPERTY_TYPE_CASTS(SVGRect); +template <> +struct DowncastTraits<SVGRect> { + static bool AllowFrom(const SVGPropertyBase& value) { + return value.GetType() == SVGRect::ClassType(); + } +}; } // namespace blink
diff --git a/third_party/blink/renderer/modules/BUILD.gn b/third_party/blink/renderer/modules/BUILD.gn index ae1057d..21250622 100644 --- a/third_party/blink/renderer/modules/BUILD.gn +++ b/third_party/blink/renderer/modules/BUILD.gn
@@ -182,7 +182,8 @@ } if (is_win) { - cflags = [ "/wd4334" ] # Result of 32-bit shift implicitly converted to 64 bits. + cflags = + [ "/wd4334" ] # Result of 32-bit shift implicitly converted to 64 bits. } configs -= [ "//build/config/compiler:default_symbols" ]
diff --git a/third_party/blink/renderer/modules/canvas/BUILD.gn b/third_party/blink/renderer/modules/canvas/BUILD.gn index 7fcd19b..3a4fad46 100644 --- a/third_party/blink/renderer/modules/canvas/BUILD.gn +++ b/third_party/blink/renderer/modules/canvas/BUILD.gn
@@ -42,9 +42,7 @@ } fuzzer_test("canvas_fuzzer") { - sources = [ - "canvas_fuzzer.cc", - ] + sources = [ "canvas_fuzzer.cc" ] seed_corpuses = [ "//third_party/blink/web_tests/fast/canvas" ] deps = [ "../../platform:blink_fuzzer_test_support",
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc index 9948ed68..163bb94 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc
@@ -120,7 +120,7 @@ c->save(); } c->restore(); - ValidateStateStack(); + ValidateStateStackWithCanvas(c); } void BaseRenderingContext2D::UnwindStateStack() {
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.h b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.h index 2f24063b2..cfb98d8 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.h +++ b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.h
@@ -235,7 +235,10 @@ virtual sk_sp<PaintFilter> StateGetFilter() = 0; virtual void SnapshotStateForFilter() = 0; - virtual void ValidateStateStack() const = 0; + void ValidateStateStack() const { + ValidateStateStackWithCanvas(ExistingDrawingCanvas()); + } + virtual void ValidateStateStackWithCanvas(const cc::PaintCanvas*) const = 0; virtual bool HasAlpha() const = 0;
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc index ff2932d..ac98631 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc
@@ -149,15 +149,16 @@ CanvasRenderingContext2D::~CanvasRenderingContext2D() = default; -void CanvasRenderingContext2D::ValidateStateStack() const { +void CanvasRenderingContext2D::ValidateStateStackWithCanvas( + const cc::PaintCanvas* canvas) const { #if DCHECK_IS_ON() - if (cc::PaintCanvas* sk_canvas = ExistingDrawingCanvas()) { + if (canvas) { // The canvas should always have an initial save frame, to support // resetting the top level matrix and clip. - DCHECK_GT(sk_canvas->getSaveCount(), 1); + DCHECK_GT(canvas->getSaveCount(), 1); if (context_lost_mode_ == kNotLostContext) { - DCHECK_EQ(static_cast<size_t>(sk_canvas->getSaveCount()), + DCHECK_EQ(static_cast<size_t>(canvas->getSaveCount()), state_stack_.size() + 1); } }
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.h b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.h index d12155c..f73a102 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.h +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.h
@@ -188,7 +188,7 @@ sk_sp<PaintFilter> StateGetFilter() final; void SnapshotStateForFilter() final; - void ValidateStateStack() const final; + void ValidateStateStackWithCanvas(const cc::PaintCanvas*) const final; void FinalizeFrame() override;
diff --git a/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc index 54893ca..fd91386c 100644 --- a/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc +++ b/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc
@@ -327,10 +327,11 @@ ModifiableState().SetFontForFilter(AccessFont()); } -void OffscreenCanvasRenderingContext2D::ValidateStateStack() const { +void OffscreenCanvasRenderingContext2D::ValidateStateStackWithCanvas( + const cc::PaintCanvas* canvas) const { #if DCHECK_IS_ON() - if (cc::PaintCanvas* sk_canvas = ExistingDrawingCanvas()) { - DCHECK_EQ(static_cast<size_t>(sk_canvas->getSaveCount()), + if (canvas) { + DCHECK_EQ(static_cast<size_t>(canvas->getSaveCount()), state_stack_.size() + 1); } #endif
diff --git a/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.h b/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.h index 0c1edb53..708ffc67 100644 --- a/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.h +++ b/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.h
@@ -114,7 +114,7 @@ sk_sp<PaintFilter> StateGetFilter() final; void SnapshotStateForFilter() final; - void ValidateStateStack() const final; + void ValidateStateStackWithCanvas(const cc::PaintCanvas*) const final; bool HasAlpha() const final { return CreationAttributes().alpha; } bool isContextLost() const override;
diff --git a/third_party/blink/renderer/modules/crypto/BUILD.gn b/third_party/blink/renderer/modules/crypto/BUILD.gn index c51ffb43..c6158fa9 100644 --- a/third_party/blink/renderer/modules/crypto/BUILD.gn +++ b/third_party/blink/renderer/modules/crypto/BUILD.gn
@@ -25,7 +25,5 @@ "worker_global_scope_crypto.h", ] - deps = [ - "//crypto", - ] + deps = [ "//crypto" ] }
diff --git a/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.cc b/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.cc index e822fa7..a5fc2c01 100644 --- a/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.cc +++ b/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.cc
@@ -110,10 +110,11 @@ return Canvas(); } -void PaintRenderingContext2D::ValidateStateStack() const { +void PaintRenderingContext2D::ValidateStateStackWithCanvas( + const cc::PaintCanvas* canvas) const { #if DCHECK_IS_ON() - if (cc::PaintCanvas* sk_canvas = ExistingDrawingCanvas()) { - DCHECK_EQ(static_cast<size_t>(sk_canvas->getSaveCount()), + if (canvas) { + DCHECK_EQ(static_cast<size_t>(canvas->getSaveCount()), state_stack_.size() + 1); } #endif
diff --git a/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.h b/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.h index b06174c..9326003d 100644 --- a/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.h +++ b/third_party/blink/renderer/modules/csspaint/paint_rendering_context_2d.h
@@ -72,7 +72,7 @@ sk_sp<PaintFilter> StateGetFilter() final; void SnapshotStateForFilter() final {} - void ValidateStateStack() const final; + void ValidateStateStackWithCanvas(const cc::PaintCanvas*) const final; bool HasAlpha() const final { return context_settings_->alpha(); }
diff --git a/third_party/blink/renderer/modules/indexeddb/indexed_db_blink_mojom_traits.cc b/third_party/blink/renderer/modules/indexeddb/indexed_db_blink_mojom_traits.cc index 340121d..f2955ac3 100644 --- a/third_party/blink/renderer/modules/indexeddb/indexed_db_blink_mojom_traits.cc +++ b/third_party/blink/renderer/modules/indexeddb/indexed_db_blink_mojom_traits.cc
@@ -7,7 +7,6 @@ #include "base/stl_util.h" #include "mojo/public/cpp/bindings/array_traits_wtf_vector.h" #include "mojo/public/cpp/bindings/pending_remote.h" -#include "third_party/blink/public/platform/file_path_conversion.h" #include "third_party/blink/public/platform/web_blob_info.h" #include "third_party/blink/renderer/modules/indexeddb/idb_key_range.h" #include "third_party/blink/renderer/platform/file_metadata.h" @@ -194,7 +193,6 @@ auto blob_info = blink::mojom::blink::IDBBlobInfo::New(); if (info.IsFile()) { blob_info->file = blink::mojom::blink::IDBFileInfo::New(); - blob_info->file->path = blink::WebStringToFilePath(info.FilePath()); String name = info.FileName(); if (name.IsNull()) name = g_empty_string; @@ -243,8 +241,7 @@ for (const auto& info : blob_or_file_info) { if (info->file) { value_blob_info.emplace_back( - info->uuid, blink::FilePathToWebString(info->file->path), - info->file->name, info->mime_type, + info->uuid, info->file->name, info->mime_type, blink::NullableTimeToOptionalTime(info->file->last_modified), info->size, info->blob.PassPipe()); } else {
diff --git a/third_party/blink/renderer/modules/webgpu/BUILD.gn b/third_party/blink/renderer/modules/webgpu/BUILD.gn index 13e5ce0..01c0322 100644 --- a/third_party/blink/renderer/modules/webgpu/BUILD.gn +++ b/third_party/blink/renderer/modules/webgpu/BUILD.gn
@@ -78,7 +78,5 @@ "worker_navigator_gpu.cc", "worker_navigator_gpu.h", ] - deps = [ - "//third_party/dawn/src/dawn:dawn_headers", - ] + deps = [ "//third_party/dawn/src/dawn:dawn_headers" ] }
diff --git a/third_party/blink/renderer/platform/exported/web_blob_info.cc b/third_party/blink/renderer/platform/exported/web_blob_info.cc index b6d911a..28d5befe 100644 --- a/third_party/blink/renderer/platform/exported/web_blob_info.cc +++ b/third_party/blink/renderer/platform/exported/web_blob_info.cc
@@ -23,7 +23,6 @@ mojom::blink::Blob::Version_))) {} WebBlobInfo::WebBlobInfo(const WebString& uuid, - const WebString& file_path, const WebString& file_name, const WebString& type, const base::Optional<base::Time>& last_modified, @@ -36,7 +35,6 @@ mojo::PendingRemote<mojom::blink::Blob>( std::move(handle), mojom::blink::Blob::Version_)), - file_path, file_name, last_modified) {} @@ -49,10 +47,9 @@ // static WebBlobInfo WebBlobInfo::FileForTesting(const WebString& uuid, - const WebString& file_path, const WebString& file_name, const WebString& type) { - return WebBlobInfo(uuid, file_path, file_name, type, base::nullopt, + return WebBlobInfo(uuid, file_name, type, base::nullopt, std::numeric_limits<uint64_t>::max(), mojo::MessagePipe().handle0); } @@ -77,11 +74,9 @@ : WebBlobInfo(handle, handle->GetType(), handle->size()) {} WebBlobInfo::WebBlobInfo(scoped_refptr<BlobDataHandle> handle, - const WebString& file_path, const WebString& file_name, const base::Optional<base::Time>& last_modified) : WebBlobInfo(handle, - file_path, file_name, handle->GetType(), last_modified, @@ -97,7 +92,6 @@ blob_handle_(std::move(handle)) {} WebBlobInfo::WebBlobInfo(scoped_refptr<BlobDataHandle> handle, - const WebString& file_path, const WebString& file_name, const WebString& type, const base::Optional<base::Time>& last_modified, @@ -107,7 +101,6 @@ type_(type), size_(size), blob_handle_(std::move(handle)), - file_path_(file_path), file_name_(file_name), last_modified_(last_modified) {}
diff --git a/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge.cc b/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge.cc index 77db4cf..df1b18ff 100644 --- a/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge.cc +++ b/third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge.cc
@@ -379,13 +379,10 @@ } } - PaintFlags copy_paint; - copy_paint.setBlendMode(SkBlendMode::kSrc); PaintImageBuilder builder = PaintImageBuilder::WithDefault(); builder.set_image(hibernation_image_, PaintImage::GetNextContentId()); builder.set_id(PaintImage::GetNextId()); - resource_provider->Canvas()->drawImage(builder.TakePaintImage(), 0, 0, - ©_paint); + resource_provider->RestoreBackBuffer(builder.TakePaintImage()); hibernation_image_.reset(); if (resource_host_) { @@ -494,9 +491,9 @@ last_record_tainted_by_write_pixels_ = true; have_recorded_draw_commands_ = false; - // Add a save to initialize the transform/clip stack and then restore it after - // the draw. This is needed because each recording initializes and the resets - // this state after every flush. + // Apply clipstack to canvas_ and then restore it to original state once + // we leave this scope. This is needed because each recording initializes and + // resets this state after every flush. cc::PaintCanvas* canvas = ResourceProvider()->Canvas(); PaintCanvasAutoRestore auto_restore(canvas, true); if (GetOrCreateResourceProvider()) {
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc index 70660c2..08839b5 100644 --- a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc +++ b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc
@@ -1249,4 +1249,12 @@ return canvas_resources_.back(); } +void CanvasResourceProvider::RestoreBackBuffer(const cc::PaintImage& image) { + DCHECK_EQ(image.height(), Size().Height()); + DCHECK_EQ(image.width(), Size().Width()); + cc::PaintFlags copy_paint; + copy_paint.setBlendMode(SkBlendMode::kSrc); + Canvas()->drawImage(image, 0, 0, ©_paint); +} + } // namespace blink
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h index 11a0fea..6f996e4 100644 --- a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h +++ b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h
@@ -206,6 +206,8 @@ return canvas_resources_.size(); } + void RestoreBackBuffer(const cc::PaintImage&); + protected: gpu::gles2::GLES2Interface* ContextGL() const; gpu::raster::RasterInterface* RasterInterface() const;
diff --git a/third_party/blink/renderer/platform/graphics/dark_mode_filter.cc b/third_party/blink/renderer/platform/graphics/dark_mode_filter.cc index 0c2a478..3e4b2396 100644 --- a/third_party/blink/renderer/platform/graphics/dark_mode_filter.cc +++ b/third_party/blink/renderer/platform/graphics/dark_mode_filter.cc
@@ -13,6 +13,7 @@ #include "third_party/blink/renderer/platform/graphics/dark_mode_generic_classifier.h" #include "third_party/blink/renderer/platform/graphics/dark_mode_icon_classifier.h" #include "third_party/blink/renderer/platform/graphics/dark_mode_image_classifier.h" +#include "third_party/blink/renderer/platform/graphics/graphics_context.h" #include "third_party/blink/renderer/platform/graphics/graphics_types.h" #include "third_party/skia/include/core/SkColorFilter.h" #include "third_party/skia/include/effects/SkColorMatrix.h" @@ -129,6 +130,9 @@ Color DarkModeFilter::InvertColorIfNeeded(const Color& color, ElementRole role) { + if (role_override_.has_value()) + role = role_override_.value(); + if (IsDarkModeActive() && ShouldApplyToColor(color, role)) return color_filter_->InvertColor(color); return color; @@ -147,6 +151,9 @@ base::Optional<cc::PaintFlags> DarkModeFilter::ApplyToFlagsIfNeeded( const cc::PaintFlags& flags, ElementRole role) { + if (role_override_.has_value()) + role = role_override_.value(); + if (!IsDarkModeActive()) return base::nullopt; @@ -195,4 +202,18 @@ NOTREACHED(); } +ScopedDarkModeElementRoleOverride::ScopedDarkModeElementRoleOverride( + GraphicsContext* graphics_context, + DarkModeFilter::ElementRole role) + : graphics_context_(graphics_context) { + DarkModeFilter& dark_mode_filter = graphics_context->dark_mode_filter_; + previous_role_override_ = dark_mode_filter.role_override_; + dark_mode_filter.role_override_ = role; +} + +ScopedDarkModeElementRoleOverride::~ScopedDarkModeElementRoleOverride() { + DarkModeFilter& dark_mode_filter = graphics_context_->dark_mode_filter_; + dark_mode_filter.role_override_ = previous_role_override_; +} + } // namespace blink
diff --git a/third_party/blink/renderer/platform/graphics/dark_mode_filter.h b/third_party/blink/renderer/platform/graphics/dark_mode_filter.h index b46d2e35..7baf78f 100644 --- a/third_party/blink/renderer/platform/graphics/dark_mode_filter.h +++ b/third_party/blink/renderer/platform/graphics/dark_mode_filter.h
@@ -21,6 +21,7 @@ class DarkModeColorClassifier; class DarkModeColorFilter; +class ScopedDarkModeElementRoleOverride; class PLATFORM_EXPORT DarkModeFilter { public: @@ -52,6 +53,8 @@ SkColorFilter* GetImageFilterForTesting() { return image_filter_.get(); } private: + friend class ScopedDarkModeElementRoleOverride; + DarkModeSettings settings_; bool ShouldApplyToColor(const Color& color, ElementRole role); @@ -60,6 +63,20 @@ std::unique_ptr<DarkModeColorClassifier> background_classifier_; std::unique_ptr<DarkModeColorFilter> color_filter_; sk_sp<SkColorFilter> image_filter_; + base::Optional<ElementRole> role_override_; +}; + +// Temporarily override the element role for the scope of this object's +// lifetime - for example when drawing symbols that play the role of text. +class PLATFORM_EXPORT ScopedDarkModeElementRoleOverride { + public: + ScopedDarkModeElementRoleOverride(GraphicsContext* graphics_context, + DarkModeFilter::ElementRole role); + ~ScopedDarkModeElementRoleOverride(); + + private: + GraphicsContext* graphics_context_; + base::Optional<DarkModeFilter::ElementRole> previous_role_override_; }; } // namespace blink
diff --git a/third_party/blink/renderer/platform/graphics/graphics_context.h b/third_party/blink/renderer/platform/graphics/graphics_context.h index 91586af..98e2a1cd 100644 --- a/third_party/blink/renderer/platform/graphics/graphics_context.h +++ b/third_party/blink/renderer/platform/graphics/graphics_context.h
@@ -442,6 +442,8 @@ static sk_sp<SkColorFilter> WebCoreColorFilterToSkiaColorFilter(ColorFilter); private: + friend class ScopedDarkModeElementRoleOverride; + const GraphicsContextState* ImmutableState() const { return paint_state_; } GraphicsContextState* MutableState() {
diff --git a/third_party/blink/renderer/platform/heap/marking_visitor.h b/third_party/blink/renderer/platform/heap/marking_visitor.h index 3e18cbd7..97544d7 100644 --- a/third_party/blink/renderer/platform/heap/marking_visitor.h +++ b/third_party/blink/renderer/platform/heap/marking_visitor.h
@@ -244,8 +244,6 @@ // Concurrent variant of MarkingVisitorCommon::AccountMarkedBytes. void AccountMarkedBytesSafe(HeapObjectHeader*); - bool IsConcurrent() const override { return true; } - bool ConcurrentTracingBailOut(TraceDescriptor desc) override { not_safe_to_concurrently_trace_worklist_.Push(desc); return true;
diff --git a/third_party/blink/renderer/platform/heap/trace_traits.h b/third_party/blink/renderer/platform/heap/trace_traits.h index 39e343de..7505e77 100644 --- a/third_party/blink/renderer/platform/heap/trace_traits.h +++ b/third_party/blink/renderer/platform/heap/trace_traits.h
@@ -483,19 +483,7 @@ // Use the payload size as recorded by the heap to determine how many // elements to trace. size_t length = header->PayloadSize() / sizeof(Value); - const bool is_concurrent = visitor->IsConcurrent(); for (size_t i = 0; i < length; ++i) { - // If tracing concurrently, use a concurrent-safe version of - // IsEmptyOrDeletedBucket (check performed on a local copy instead - // of directly on the bucket). - if (is_concurrent && - !HashTableHelper<Value, typename Table::ExtractorType, - typename Table::KeyTraitsType>:: - IsEmptyOrDeletedBucketSafe(array[i])) { - blink::TraceCollectionIfEnabled<WeakHandling, Value, Traits>::Trace( - visitor, &array[i]); - continue; - } if (!HashTableHelper<Value, typename Table::ExtractorType, typename Table::KeyTraitsType>:: IsEmptyOrDeletedBucket(array[i])) { @@ -506,6 +494,7 @@ return false; } }; + template <typename Table> struct TraceInCollectionTrait<kNoWeakHandling, blink::HeapHashTableBacking<Table>, @@ -515,6 +504,7 @@ Table>::Trace(visitor, self); } }; + template <typename Table> struct TraceInCollectionTrait<kWeakHandling, blink::HeapHashTableBacking<Table>, @@ -560,21 +550,11 @@ blink::HeapObjectHeader* header = blink::HeapObjectHeader::FromPayload(self); size_t length = header->PayloadSize() / sizeof(Node*); - const bool is_concurrent = visitor->IsConcurrent(); for (size_t i = 0; i < length; ++i) { - Node* node; - if (is_concurrent) { - // If tracing concurrently, IsEmptyOrDeletedBucket can cause data - // races. Loading array[i] atomically prevents possible data races. - // array[i] is of type Node* so can directly loaded atomically. - node = AsAtomicPtr(&array[i])->load(std::memory_order_relaxed); - } else { - node = array[i]; - } - if (!HashTableHelper< - Node*, typename Table::ExtractorType, - typename Table::KeyTraitsType>::IsEmptyOrDeletedBucket(node)) { - visitor->Trace(node); + if (!HashTableHelper<Node*, typename Table::ExtractorType, + typename Table::KeyTraitsType>:: + IsEmptyOrDeletedBucket(array[i])) { + visitor->Trace(array[i]); } } return false;
diff --git a/third_party/blink/renderer/platform/heap/visitor.h b/third_party/blink/renderer/platform/heap/visitor.h index 85f27af..2d79c33 100644 --- a/third_party/blink/renderer/platform/heap/visitor.h +++ b/third_party/blink/renderer/platform/heap/visitor.h
@@ -292,8 +292,6 @@ // are aware of custom weakness and won't resize their backings. virtual void RegisterWeakCallback(WeakCallback callback, void* parameter) = 0; - virtual bool IsConcurrent() const { return false; } - // TODO(crbug/986235): ConcurrentTracingBailOut is part of a temporary // bailout mechanism to avoid tracing collections on concurrent threads. // This method and any usage of it will be removed as soon as making all
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index 8e76000..a9b10c3 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1507,7 +1507,7 @@ }, { name: "ScrollSnapAfterLayout", - status: "experimental", + status: "stable", }, { name: "ScrollTimeline",
diff --git a/third_party/blink/renderer/platform/wtf/BUILD.gn b/third_party/blink/renderer/platform/wtf/BUILD.gn index b530741f..c015ad1 100644 --- a/third_party/blink/renderer/platform/wtf/BUILD.gn +++ b/third_party/blink/renderer/platform/wtf/BUILD.gn
@@ -249,7 +249,6 @@ testonly = true sources = [ - "allocator/atomic_memcpy_test.cc", "allocator/partitions_test.cc", "ascii_ctype_test.cc", "assertions_test.cc",
diff --git a/third_party/blink/renderer/platform/wtf/allocator/allocator.cc b/third_party/blink/renderer/platform/wtf/allocator/allocator.cc index c7dc47f..b697027 100644 --- a/third_party/blink/renderer/platform/wtf/allocator/allocator.cc +++ b/third_party/blink/renderer/platform/wtf/allocator/allocator.cc
@@ -18,22 +18,3 @@ "Failed to detect STACK_ALLOCATED macro."); } // namespace - -namespace WTF { - -void AtomicMemcpy(void* to, const void* from, size_t bytes) { - size_t* sizet_to = reinterpret_cast<size_t*>(to); - const size_t* sizet_from = reinterpret_cast<const size_t*>(from); - for (; bytes > sizeof(size_t); - bytes -= sizeof(size_t), ++sizet_to, ++sizet_from) { - *sizet_to = AsAtomicPtr(sizet_from)->load(std::memory_order_relaxed); - } - uint8_t* uint8t_to = reinterpret_cast<uint8_t*>(sizet_to); - const uint8_t* uint8t_from = reinterpret_cast<const uint8_t*>(sizet_from); - for (; bytes > 0; bytes -= sizeof(uint8_t), ++uint8t_to, ++uint8t_from) { - *uint8t_to = AsAtomicPtr(uint8t_from)->load(std::memory_order_relaxed); - } - DCHECK_EQ(0u, bytes); -} - -} // namespace WTF
diff --git a/third_party/blink/renderer/platform/wtf/allocator/allocator.h b/third_party/blink/renderer/platform/wtf/allocator/allocator.h index a9bf35b5..d84bff0d 100644 --- a/third_party/blink/renderer/platform/wtf/allocator/allocator.h +++ b/third_party/blink/renderer/platform/wtf/allocator/allocator.h
@@ -7,7 +7,6 @@ #include <atomic> -#include "build/build_config.h" #include "third_party/blink/renderer/platform/wtf/allocator/partitions.h" #include "third_party/blink/renderer/platform/wtf/assertions.h" #include "third_party/blink/renderer/platform/wtf/type_traits.h" @@ -161,59 +160,6 @@ return reinterpret_cast<const std::atomic<T>*>(t); } -// Load |bytes| bytes from |from| to |to| using atomic reads. Assumes |to| is -// size_t-aligned and points to a buffer of size at least |bytes|. Note that -// atomicity is guaranteed only per word, not for the entire |bytes| bytes as -// a whole. -WTF_EXPORT void AtomicMemcpy(void* to, const void* from, size_t bytes); -template <size_t bytes> -ALWAYS_INLINE void AtomicMemcpy(void* to, const void* from) { - AtomicMemcpy(to, from, bytes); -} - -// AtomicMemcpy specializations: - -#if defined(ARCH_CPU_X86_64) -template <> -ALWAYS_INLINE void AtomicMemcpy<sizeof(uint32_t)>(void* to, const void* from) { - *reinterpret_cast<uint32_t*>(to) = - AsAtomicPtr(reinterpret_cast<const uint32_t*>(from)) - ->load(std::memory_order_relaxed); -} -#endif // ARCH_CPU_X86_64 - -template <> -ALWAYS_INLINE void AtomicMemcpy<sizeof(size_t)>(void* to, const void* from) { - *reinterpret_cast<size_t*>(to) = - AsAtomicPtr(reinterpret_cast<const size_t*>(from)) - ->load(std::memory_order_relaxed); -} - -template <> -ALWAYS_INLINE void AtomicMemcpy<2 * sizeof(size_t)>(void* to, - const void* from) { - *reinterpret_cast<size_t*>(to) = - AsAtomicPtr(reinterpret_cast<const size_t*>(from)) - ->load(std::memory_order_relaxed); - *(reinterpret_cast<size_t*>(to) + 1) = - AsAtomicPtr(reinterpret_cast<const size_t*>(from) + 1) - ->load(std::memory_order_relaxed); -} - -template <> -ALWAYS_INLINE void AtomicMemcpy<3 * sizeof(size_t)>(void* to, - const void* from) { - *reinterpret_cast<size_t*>(to) = - AsAtomicPtr(reinterpret_cast<const size_t*>(from)) - ->load(std::memory_order_relaxed); - *(reinterpret_cast<size_t*>(to) + 1) = - AsAtomicPtr(reinterpret_cast<const size_t*>(from) + 1) - ->load(std::memory_order_relaxed); - *(reinterpret_cast<size_t*>(to) + 2) = - AsAtomicPtr(reinterpret_cast<const size_t*>(from) + 2) - ->load(std::memory_order_relaxed); -} - } // namespace WTF // This version of placement new omits a 0 check.
diff --git a/third_party/blink/renderer/platform/wtf/allocator/atomic_memcpy_test.cc b/third_party/blink/renderer/platform/wtf/allocator/atomic_memcpy_test.cc deleted file mode 100644 index 2c81d70..0000000 --- a/third_party/blink/renderer/platform/wtf/allocator/atomic_memcpy_test.cc +++ /dev/null
@@ -1,58 +0,0 @@ -// Copyright 2019 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" - -#include "testing/gtest/include/gtest/gtest.h" - -namespace WTF { - -class AtomicMemcpyTest : public ::testing::Test {}; - -template <size_t buffer_size> -void TestAtomicMemcpy() { - unsigned char src[buffer_size]; - for (size_t i = 1; i < buffer_size; ++i) - src[i] = static_cast<char>(i); - // Allocating extra memory before and after the buffer to make sure the - // atomic memcpy doesn't exceed the buffer in any direction. - unsigned char tgt[buffer_size + (2 * sizeof(size_t))]; - memset(tgt, 0, buffer_size + (2 * sizeof(size_t))); - AtomicMemcpy<buffer_size>(tgt + sizeof(size_t), src); - // Check nothing before the buffer was changed - EXPECT_EQ(0u, *reinterpret_cast<size_t*>(&tgt[0])); - // Check buffer was copied correctly - EXPECT_TRUE(!memcmp(src, tgt + sizeof(size_t), buffer_size)); - // Check nothing after the buffer was changed - EXPECT_EQ(0u, *reinterpret_cast<size_t*>(&tgt[sizeof(size_t) + buffer_size])); -} - -TEST_F(AtomicMemcpyTest, UINT8T) { - TestAtomicMemcpy<sizeof(uint8_t)>(); -} -TEST_F(AtomicMemcpyTest, UINT16T) { - TestAtomicMemcpy<sizeof(uint16_t)>(); -} -TEST_F(AtomicMemcpyTest, UINT32T) { - TestAtomicMemcpy<sizeof(uint32_t)>(); -} -TEST_F(AtomicMemcpyTest, UINT64T) { - TestAtomicMemcpy<sizeof(uint64_t)>(); -} - -// Tests for sizes that don't match a specific promitive type: -TEST_F(AtomicMemcpyTest, 17Bytes) { - TestAtomicMemcpy<17>(); -} -TEST_F(AtomicMemcpyTest, 34Bytes) { - TestAtomicMemcpy<34>(); -} -TEST_F(AtomicMemcpyTest, 68Bytes) { - TestAtomicMemcpy<68>(); -} -TEST_F(AtomicMemcpyTest, 127Bytes) { - TestAtomicMemcpy<127>(); -} - -} // namespace WTF
diff --git a/third_party/blink/renderer/platform/wtf/hash_map.h b/third_party/blink/renderer/platform/wtf/hash_map.h index e222a0a..46b39e0 100644 --- a/third_party/blink/renderer/platform/wtf/hash_map.h +++ b/third_party/blink/renderer/platform/wtf/hash_map.h
@@ -22,7 +22,6 @@ #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_WTF_HASH_MAP_H_ #include <initializer_list> -#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" #include "third_party/blink/renderer/platform/wtf/allocator/partition_allocator.h" #include "third_party/blink/renderer/platform/wtf/construct_traits.h" #include "third_party/blink/renderer/platform/wtf/hash_table.h" @@ -44,12 +43,6 @@ static const typename T::KeyType& Extract(const T& p) { return p.key; } - // Assumes out points to a buffer of size at least sizeof(T::KeyType). - template <typename T> - static const typename T::KeyType& ExtractSafe(const T& p, void* out) { - AtomicMemcpy<sizeof(typename T::KeyType)>(out, &p.key); - return *reinterpret_cast<typename T::KeyType*>(out); - } }; // Note: empty or deleted key values are not allowed, using them may lead to
diff --git a/third_party/blink/renderer/platform/wtf/hash_set.h b/third_party/blink/renderer/platform/wtf/hash_set.h index 812c97a7c..d7cdeed 100644 --- a/third_party/blink/renderer/platform/wtf/hash_set.h +++ b/third_party/blink/renderer/platform/wtf/hash_set.h
@@ -22,7 +22,6 @@ #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_WTF_HASH_SET_H_ #include <initializer_list> -#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" #include "third_party/blink/renderer/platform/wtf/allocator/partition_allocator.h" #include "third_party/blink/renderer/platform/wtf/hash_table.h" #include "third_party/blink/renderer/platform/wtf/wtf_size_t.h" @@ -152,12 +151,6 @@ static const T& Extract(const T& t) { return t; } - // Assumes out points to a buffer of size at least sizeof(T). - template <typename T> - static const T& ExtractSafe(const T& t, void* out) { - AtomicMemcpy<sizeof(T)>(out, &t); - return *reinterpret_cast<T*>(out); - } }; template <typename Translator>
diff --git a/third_party/blink/renderer/platform/wtf/hash_table.h b/third_party/blink/renderer/platform/wtf/hash_table.h index f0f6c4ef..354467e 100644 --- a/third_party/blink/renderer/platform/wtf/hash_table.h +++ b/third_party/blink/renderer/platform/wtf/hash_table.h
@@ -649,23 +649,15 @@ template <typename Value, typename Extractor, typename KeyTraits> struct HashTableHelper { - using Key = typename KeyTraits::TraitType; - STATIC_ONLY(HashTableHelper); - static bool IsEmptyBucket(const Key& key) { - return IsHashTraitsEmptyValue<KeyTraits>(key); + static bool IsEmptyBucket(const Value& value) { + return IsHashTraitsEmptyValue<KeyTraits>(Extractor::Extract(value)); } - static bool IsDeletedBucket(const Key& key) { - return KeyTraits::IsDeletedValue(key); + static bool IsDeletedBucket(const Value& value) { + return KeyTraits::IsDeletedValue(Extractor::Extract(value)); } static bool IsEmptyOrDeletedBucket(const Value& value) { - const auto& key = Extractor::Extract(value); - return IsEmptyBucket(key) || IsDeletedBucket(key); - } - static bool IsEmptyOrDeletedBucketSafe(const Value& value) { - char buf[sizeof(Key)]; - const Key& key = Extractor::ExtractSafe(value, &buf); - return IsEmptyBucket(key) || IsDeletedBucket(key); + return IsEmptyBucket(value) || IsDeletedBucket(value); } };
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index ed6e5f5..24676d95 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -2796,6 +2796,9 @@ crbug.com/641245 external/wpt/css/motion/offset-path-ray-contain-005.html [ Failure ] # ====== New tests from wpt-importer added here ====== +crbug.com/626703 [ Linux ] external/wpt/webaudio/the-audio-api/the-audioworklet-interface/process-parameters.https.html [ Timeout ] +crbug.com/626703 [ Mac ] external/wpt/webaudio/the-audio-api/the-audioworklet-interface/process-parameters.https.html [ Timeout ] +crbug.com/626703 [ Win ] external/wpt/webaudio/the-audio-api/the-audioworklet-interface/process-parameters.https.html [ Timeout ] crbug.com/626703 [ Mac10.12 ] external/wpt/eventsource/eventsource-constructor-url-bogus.any.html [ Failure Timeout ] crbug.com/626703 [ Mac10.10 ] external/wpt/webrtc/RTCPeerConnection-createDataChannel.html [ Failure Crash ] crbug.com/626703 [ Mac10.10 ] external/wpt/html/webappapis/scripting/events/event-handler-attributes-body-window.html [ Failure Timeout ] @@ -6308,9 +6311,12 @@ crbug.com/1044712 [ Win ] fast/forms/suggestion-picker/time-suggestion-picker-appearance-with-scroll-bar.html [ Pass Failure ] crbug.com/1044712 [ Win ] fast/forms/suggestion-picker/month-suggestion-picker-appearance-rtl.html [ Pass Failure ] crbug.com/1044712 [ Win ] virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance.html [ Pass Failure ] -crbug.com/1044715 [ Win ] external/wpt/pointerevents/pointerevent_touch-action-pan-right-css_touch.html [ Pass Failure ] -crbug.com/1044715 [ Win ] external/wpt/pointerevents/pointerevent_touch-action-inherit_parent-none_touch.html [ Pass Failure ] -crbug.com/1044715 [ Win ] external/wpt/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-x_touch.html [ Pass Failure ] +crbug.com/1044715 [ Win ] external/wpt/pointerevents/pointerevent_touch-action-pan-right-css_touch.html [ Pass Timeout ] +crbug.com/1044715 [ Linux ] external/wpt/pointerevents/pointerevent_touch-action-pan-right-css_touch.html [ Pass Timeout ] +crbug.com/1044715 [ Win ] external/wpt/pointerevents/pointerevent_touch-action-inherit_parent-none_touch.html [ Pass Timeout ] +crbug.com/1044715 [ Linux ] external/wpt/pointerevents/pointerevent_touch-action-inherit_parent-none_touch.html [ Pass Timeout ] +crbug.com/1044715 [ Win ] external/wpt/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-x_touch.html [ Pass Timeout ] +crbug.com/1044715 [ Linux ] external/wpt/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-x_touch.html [ Pass Timeout ] crbug.com/1041848 virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/idlharness.html [ Pass Timeout ] @@ -6449,3 +6455,6 @@ crbug.com/1046201 [ Win10 ] virtual/cascade/fast/forms/calendar-picker/calendar-picker-appearance-zoom125.html [ Pass Failure ] crbug.com/1042848 virtual/audio-service/external/wpt/mediacapture-streams/idlharness.https.window.html [ Pass Timeout ] crbug.com/1042848 virtual/feature-policy-permissions/external/wpt/mediacapture-streams/idlharness.https.window.html [ Pass Timeout ] +crbug.com/1046440 fast/loader/submit-form-while-parsing-2.html [ Pass Failure ] +crbug.com/1041851 [ Mac ] external/wpt/bluetooth/idl/idlharness.tentative.https.window.html [ Pass Timeout ] +crbug.com/1041851 [ Win10 ] external/wpt/bluetooth/idl/idlharness.tentative.https.window.html [ Pass Timeout ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites index 93c528d..e936b14 100644 --- a/third_party/blink/web_tests/VirtualTestSuites +++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -253,6 +253,11 @@ "args": ["--blink-settings=darkModeEnabled=true,darkModeInversionAlgorithm=3,darkModePagePolicy=1,darkModeTextBrightnessThreshold=256,darkModeBackgroundBrightnessThreshold=0"] }, { + "prefix": "dark-mode-text", + "bases": [], + "args": ["--blink-settings=darkModeEnabled=true,darkModeInversionAlgorithm=3,darkModeImagePolicy=1,darkModeTextBrightnessThreshold=100,darkModeBackgroundBrightnessThreshold=205"] + }, + { "prefix": "presentation", "bases": [], "args": ["--force-presentation-receiver-for-testing"]
diff --git a/third_party/blink/web_tests/WPTOverrideExpectations b/third_party/blink/web_tests/WPTOverrideExpectations index 756227d..64c0e85 100644 --- a/third_party/blink/web_tests/WPTOverrideExpectations +++ b/third_party/blink/web_tests/WPTOverrideExpectations
@@ -920,6 +920,7 @@ crbug.com/1033611 external/wpt/webxr/getInputPose_pointer.https.html [ Failure ] crbug.com/1033611 external/wpt/webxr/getViewerPose_emulatedPosition.https.html [ Failure ] crbug.com/1033611 external/wpt/webxr/hit-test/ar_hittest_subscription_refSpaces.https.html [ Failure ] +crbug.com/1033611 external/wpt/webxr/hit-test/ar_hittest_subscription_states.https.html [ Failure ] crbug.com/1033611 external/wpt/webxr/navigator_xr_sameObject.https.html [ Failure ] crbug.com/1033611 external/wpt/webxr/render_state_vertical_fov_immersive.https.html [ Failure ] crbug.com/1033611 external/wpt/webxr/render_state_vertical_fov_inline.https.html [ Failure ]
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json index c058db2..1fbcc7b 100644 --- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json +++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json
@@ -32864,7 +32864,7 @@ "css/compositing/svg/mix-blend-mode-in-svg-image.html", [ [ - "/css/compositing/svg/reference/mix-blend-mode-svg-rectangle-ref.html", + "/css/compositing/svg/reference/mix-blend-mode-in-svg-image-ref.html", "==" ] ], @@ -136495,6 +136495,9 @@ "css/compositing/root-element-opacity-ref.html": [ [] ], + "css/compositing/svg/reference/mix-blend-mode-in-svg-image-ref.html": [ + [] + ], "css/compositing/svg/reference/mix-blend-mode-svg-rectangle-ref.html": [ [] ], @@ -187165,6 +187168,18 @@ "webaudio/the-audio-api/the-audioworklet-interface/processors/channel-count-processor.js": [ [] ], + "webaudio/the-audio-api/the-audioworklet-interface/processors/construction-port-new-after-new.js": [ + [] + ], + "webaudio/the-audio-api/the-audioworklet-interface/processors/construction-port-new-after-super.js": [ + [] + ], + "webaudio/the-audio-api/the-audioworklet-interface/processors/construction-port-singleton.js": [ + [] + ], + "webaudio/the-audio-api/the-audioworklet-interface/processors/construction-port-super-after-new.js": [ + [] + ], "webaudio/the-audio-api/the-audioworklet-interface/processors/dummy-processor.js": [ [] ], @@ -187192,6 +187207,15 @@ "webaudio/the-audio-api/the-audioworklet-interface/processors/port-processor.js": [ [] ], + "webaudio/the-audio-api/the-audioworklet-interface/processors/process-getter-test-instance-processor.js": [ + [] + ], + "webaudio/the-audio-api/the-audioworklet-interface/processors/process-getter-test-prototype-processor.js": [ + [] + ], + "webaudio/the-audio-api/the-audioworklet-interface/processors/process-parameter-test-processor.js": [ + [] + ], "webaudio/the-audio-api/the-audioworklet-interface/processors/sharedarraybuffer-processor.js": [ [] ], @@ -212422,6 +212446,12 @@ {} ] ], + "content-security-policy/reporting/report-clips-sample.html": [ + [ + "content-security-policy/reporting/report-clips-sample.html", + {} + ] + ], "content-security-policy/reporting/report-cross-origin-no-cookies.sub.html": [ [ "content-security-policy/reporting/report-cross-origin-no-cookies.sub.html", @@ -221798,6 +221828,12 @@ {} ] ], + "css/css-images/image-set/image-set-parsing.html": [ + [ + "css/css-images/image-set/image-set-parsing.html", + {} + ] + ], "css/css-images/inheritance.html": [ [ "css/css-images/inheritance.html", @@ -352099,6 +352135,24 @@ {} ] ], + "webaudio/the-audio-api/the-audioworklet-interface/process-getter.https.html": [ + [ + "webaudio/the-audio-api/the-audioworklet-interface/process-getter.https.html", + {} + ] + ], + "webaudio/the-audio-api/the-audioworklet-interface/process-parameters.https.html": [ + [ + "webaudio/the-audio-api/the-audioworklet-interface/process-parameters.https.html", + {} + ] + ], + "webaudio/the-audio-api/the-audioworklet-interface/processor-construction-port.https.html": [ + [ + "webaudio/the-audio-api/the-audioworklet-interface/processor-construction-port.https.html", + {} + ] + ], "webaudio/the-audio-api/the-audioworklet-interface/simple-input-output.https.html": [ [ "webaudio/the-audio-api/the-audioworklet-interface/simple-input-output.https.html", @@ -383778,6 +383832,10 @@ "6f4b37ef8366974b5c64f558577fe60b72a6713b", "support" ], + "content-security-policy/reporting/report-clips-sample.html": [ + "cb69c930fc1121acecc85a7f9f0446bc60129b66", + "testharness" + ], "content-security-policy/reporting/report-cross-origin-no-cookies.sub.html": [ "a034bdbd4fe6c3ceb87fafb0816a6648da2f4e6d", "testharness" @@ -384951,7 +385009,7 @@ "support" ], "content-security-policy/support/testharness-helper.js": [ - "c071a68931562dae4b9862c71f35418efcc69b65", + "0e68c7267a4ba41948c830b008b0fe14704acfe9", "support" ], "content-security-policy/support/var-a.js": [ @@ -402667,7 +402725,7 @@ "support" ], "css/compositing/mix-blend-mode/reference/mix-blend-mode-parent-element-overflow-scroll-blended-position-fixed-ref.html": [ - "f88bfde0c5cdc61d51a892bc87f4d59d31601a4c", + "fd780ee3ccb4560864308c38e7c410aa54e064b9", "support" ], "css/compositing/mix-blend-mode/reference/mix-blend-mode-parent-element-overflow-scroll-ref.html": [ @@ -402835,13 +402893,17 @@ "reftest" ], "css/compositing/svg/mix-blend-mode-in-svg-image.html": [ - "658e0275d70b357b210ae70243a2f58b9752910c", + "ed0520e443fd10ca6ad25c91dd2752954fbbf9b0", "reftest" ], "css/compositing/svg/mix-blend-mode-svg-rectangle.html": [ "e74181e2c35bd0ba1b78eadb84640d321dfa6577", "reftest" ], + "css/compositing/svg/reference/mix-blend-mode-in-svg-image-ref.html": [ + "9a2a030737438cd3fb64e364e43a4fc364be653c", + "support" + ], "css/compositing/svg/reference/mix-blend-mode-svg-rectangle-ref.html": [ "6d74ee05211bedabbd0957d431dce86f27f14f33", "support" @@ -427158,6 +427220,10 @@ "1003bfb7c21401063b8460904281299f3ccab7c2", "support" ], + "css/css-images/image-set/image-set-parsing.html": [ + "bf17b2a866201d1e87c4bf978619ff4d87e4a600", + "testharness" + ], "css/css-images/infinite-radial-gradient-crash-ref.html": [ "a80236dcf75c22ecd8e43935d004f1fddf0550cb", "support" @@ -581343,7 +581409,7 @@ "testharness" ], "web-animations/idlharness.window-expected.txt": [ - "7e5017ae4b66f0fd479dd40fae5f950516f994d1", + "0c5dcd52ce5e1a9c9a1243efe266c46258d35448", "support" ], "web-animations/idlharness.window.js": [ @@ -581371,11 +581437,11 @@ "testharness" ], "web-animations/interfaces/Animation/commitStyles-expected.txt": [ - "1339ae7fc3a9ba091a210722e5646b9128597dc9", + "3c047f9f8bc8f98c5a38dbbfc8b4f957a37ee4e8", "support" ], "web-animations/interfaces/Animation/commitStyles.html": [ - "8d45cd65199c1a8f7b26ee1ead574e1ff0b26ac9", + "ca7d6410d0aa9cd02431cb6f8aab427f941e5cc7", "testharness" ], "web-animations/interfaces/Animation/constructor.html": [ @@ -581435,7 +581501,7 @@ "testharness" ], "web-animations/interfaces/Animation/style-change-events-expected.txt": [ - "d01b53184e00e3d117bb5d697cb4e56c8ca146b7", + "ae99c09d35c85b72a189ce367be2ad2f5acfd60a", "support" ], "web-animations/interfaces/Animation/style-change-events.html": [ @@ -581599,11 +581665,11 @@ "testharness" ], "web-animations/timing-model/animations/finishing-an-animation.html": [ - "b91eacfb689cac397be47a17909a7c1edf583824", + "5a41abd7b0844457eae367a873d10f544be574cc", "testharness" ], "web-animations/timing-model/animations/pausing-an-animation.html": [ - "bcec609d14206567ee25855f6dd7e684c69485ba", + "4884163c1d3a0fb795d3a34591ca5cb1d7a9eeda", "testharness" ], "web-animations/timing-model/animations/play-states.html": [ @@ -581611,7 +581677,7 @@ "testharness" ], "web-animations/timing-model/animations/playing-an-animation.html": [ - "1477261e6bc6227598b4e80475a66aa95fe5d15c", + "608e881e751bd49e3fa0cb292479459e9e04e522", "testharness" ], "web-animations/timing-model/animations/reverse-running-animation-ref.html": [ @@ -582586,6 +582652,18 @@ "4281f56379bb20f1e173c22c99ab208d2be0fdd4", "testharness" ], + "webaudio/the-audio-api/the-audioworklet-interface/process-getter.https.html": [ + "a4c59123a104600c148f620bb32c78f112fdd12a", + "testharness" + ], + "webaudio/the-audio-api/the-audioworklet-interface/process-parameters.https.html": [ + "4c6a10dfab3c29c0d3009e2a9650ad2d498c869a", + "testharness" + ], + "webaudio/the-audio-api/the-audioworklet-interface/processor-construction-port.https.html": [ + "6f1aa592250a3dc355ce792ce637ff67b32560a3", + "testharness" + ], "webaudio/the-audio-api/the-audioworklet-interface/processors/active-processing.js": [ "ef497733cafb471f74ace33045c4b4d43f3ce4f2", "support" @@ -582598,6 +582676,22 @@ "556459f46b3074f03578c53ba7b967387bab071b", "support" ], + "webaudio/the-audio-api/the-audioworklet-interface/processors/construction-port-new-after-new.js": [ + "d4c63f77755754e8e9c4cac2829452bd8d47232a", + "support" + ], + "webaudio/the-audio-api/the-audioworklet-interface/processors/construction-port-new-after-super.js": [ + "a6d4f0e2e8ef2988b10d3bfaddebdad80d6f540f", + "support" + ], + "webaudio/the-audio-api/the-audioworklet-interface/processors/construction-port-singleton.js": [ + "c40b5a7179aefe43d30439a017625460ee03ccff", + "support" + ], + "webaudio/the-audio-api/the-audioworklet-interface/processors/construction-port-super-after-new.js": [ + "e447830c5ffb442842bc1c6c6227dd8531d085e0", + "support" + ], "webaudio/the-audio-api/the-audioworklet-interface/processors/dummy-processor.js": [ "11155d508c51956ee07dcf4cf7c68829920c2af6", "support" @@ -582634,6 +582728,18 @@ "5a8baf03372d25b906948dcdd6c40990eeb860fa", "support" ], + "webaudio/the-audio-api/the-audioworklet-interface/processors/process-getter-test-instance-processor.js": [ + "b1434f54ba587fcb5daf9c0e95a011b725788904", + "support" + ], + "webaudio/the-audio-api/the-audioworklet-interface/processors/process-getter-test-prototype-processor.js": [ + "cef5fa8b52fa5cb2a04783b95a17d8f79d968644", + "support" + ], + "webaudio/the-audio-api/the-audioworklet-interface/processors/process-parameter-test-processor.js": [ + "a300d3cdec1af4268bd5ee7aeb0b3d4b68b193a3", + "support" + ], "webaudio/the-audio-api/the-audioworklet-interface/processors/sharedarraybuffer-processor.js": [ "2ccacccd4bb0a4d289ddccd9cafa4e29a0484730", "support"
diff --git a/third_party/blink/web_tests/external/wpt/css/css-animations/Document-getAnimations.tentative-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-animations/Document-getAnimations.tentative-expected.txt index 5d01f45..d6f69ba1 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-animations/Document-getAnimations.tentative-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/css-animations/Document-getAnimations.tentative-expected.txt
@@ -1,8 +1,9 @@ This is a testharness.js-based test. PASS getAnimations for non-animated content PASS getAnimations for CSS Animations +FAIL Order of CSS Animations - within an element unaffected by start time assert_equals: Order of first animation returned expected "animBottom" but got "animLeft" PASS Order of CSS Animations - within an element -FAIL Order of CSS Animations - across elements assert_equals: Order of second animation returned after tree surgery expected Element node <div style="animation: animLeft 100s"></div> but got Element node <div style="animation: animLeft 100s"></div> +PASS Order of CSS Animations - across elements PASS Order of CSS Animations - across and within elements FAIL Order of CSS Animations - markup-bound vs free animations assert_equals: getAnimations returns markup-bound and free animations expected 2 but got 1 FAIL Order of CSS Animations - free animations assert_equals: getAnimations returns free animations expected 2 but got 0 @@ -12,6 +13,6 @@ PASS Yet-to-start CSS Animations are returned PASS CSS Animations canceled via the API are not returned PASS CSS Animations canceled and restarted via the API are returned -FAIL CSS Animations targetting (pseudo-)elements should have correct order after sorting assert_equals: Animation #3 has expected target expected Element node <div id="parent" style="animation: animBottom 100s"><div ... but got Element node <div style="animation: animBottom 100s"></div> +PASS CSS Animations targetting (pseudo-)elements should have correct order after sorting Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/css/css-animations/Document-getAnimations.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-animations/Document-getAnimations.tentative.html index ba8c6d91..4a9768a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-animations/Document-getAnimations.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-animations/Document-getAnimations.tentative.html
@@ -50,6 +50,24 @@ test(t => { const div = addDiv(t); + const animation1 = 'animLeft 100s' + const animation2 = 'animBottom 100s' + div.style.animation = animation1; + const animations1 = document.getAnimations(); + assert_equals(animations1.length, 1, + 'getAnimations returns all running CSS Animations'); + div.style.animation = animation2 + ', ' + animation1; + const animations = document.getAnimations(); + assert_equals(animations.length, 2, + 'getAnimations returns all running CSS Animations'); + assert_equals(animations[0].animationName, 'animBottom', + 'Order of first animation returned'); + assert_equals(animations[1].animationName, 'animLeft', + 'Order of second animation returned'); +}, 'Order of CSS Animations - within an element unaffected by start time'); + +test(t => { + const div = addDiv(t); div.style.animation = 'animLeft 100s, animTop 100s, animRight 100s, ' + 'animBottom 100s';
diff --git a/third_party/blink/web_tests/external/wpt/css/css-animations/Element-getAnimations.tentative-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-animations/Element-getAnimations.tentative-expected.txt index b9284ef..71bd7a0 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-animations/Element-getAnimations.tentative-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/css-animations/Element-getAnimations.tentative-expected.txt
@@ -19,7 +19,7 @@ PASS { subtree: false } on a leaf element returns the element's animations and ignore pseudo-elements PASS { subtree: true } on a leaf element returns the element's animations and its pseudo-elements' animations PASS { subtree: false } on an element with a child returns only the element's animations -FAIL { subtree: true } on an element with a child returns animations from the element, its pseudo-elements, its child and its child pseudo-elements assert_equals: The animation targeting the ::after pesudo-element should be returned third expected (string) "::after" but got (object) null +PASS { subtree: true } on an element with a child returns animations from the element, its pseudo-elements, its child and its child pseudo-elements PASS { subtree: true } on an element with many descendants returns animations from all the descendants Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/css/css-animations/Element-getAnimations.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-animations/Element-getAnimations.tentative.html index 5419e11e..284b249 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-animations/Element-getAnimations.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-animations/Element-getAnimations.tentative.html
@@ -303,8 +303,8 @@ '#target::before': 'animation: anim1 10s;' }); const target = addDiv(t, { 'id': 'target' }); target.style.animation = 'anim1 100s'; - const animations = target.getAnimations({ subtree: false }); + assert_equals(animations.length, 1, 'Should find only the element'); assert_equals(animations[0].effect.target, target, @@ -317,8 +317,8 @@ '#target::before': 'animation: anim1 10s;' }); const target = addDiv(t, { 'id': 'target' }); target.style.animation = 'anim1 100s'; - const animations = target.getAnimations({ subtree: true }); + assert_equals(animations.length, 3, 'getAnimations({ subtree: true }) ' + 'should return animations on pseudo-elements');
diff --git a/third_party/blink/web_tests/external/wpt/css/css-animations/event-order.tentative-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-animations/event-order.tentative-expected.txt index dd5957c0c..541bab6 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-animations/event-order.tentative-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/css-animations/event-order.tentative-expected.txt
@@ -1,6 +1,6 @@ This is a testharness.js-based test. PASS Same events are ordered by elements -FAIL Same events on pseudo-elements follow the prescribed order assert_equals: Event #3 targets should match expected Element node <div style="animation: anim 100s" id="parent-div"><div st... but got Element node <div style="animation: anim 100s"></div> +PASS Same events on pseudo-elements follow the prescribed order FAIL Start and iteration events are ordered by time assert_equals: Event #1 types should match (expected: animationiteration, animationstart, actual: animationstart, animationiteration) expected "animationiteration" but got "animationstart" FAIL Iteration and end events are ordered by time assert_equals: Event #1 types should match (expected: animationiteration, animationend, actual: animationend, animationiteration) expected "animationiteration" but got "animationend" FAIL Start and end events are sorted correctly when fired simultaneously assert_equals: Event #1 targets should match expected Element node <div style="animation: anim 100s 2"></div> but got Element node <div style="animation: anim 100s 100s"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-images/image-set/image-set-parsing.html b/third_party/blink/web_tests/external/wpt/css/css-images/image-set/image-set-parsing.html new file mode 100644 index 0000000..bf17b2a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-images/image-set/image-set-parsing.html
@@ -0,0 +1,53 @@ +<!DOCTYPE html> +<html> + <head> + <title>Image set parsing</title> + <link rel="author" title="Noam Rosenthal" href="mailto:noam.j.rosenthal@gmail.com"> + <link rel="help" href="https://drafts.csswg.org/css-images-4/#image-set-notation"> + <meta name="assert" content="General image-set parsing follows CSS Images 4 rules."> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + </head> + <body> + <script> + const tests = [ + { property: 'background-image', imageSet: "url(example.png) 1x", valid: true }, + { property: 'background-image', imageSet: "url('example.png') 1x", valid: true }, + { property: 'background-image', imageSet: "'example.jpg' 1x", valid: true }, + { property: 'background-image', imageSet: "url(example.png) 1x, 'example.png' 2x", valid: true }, + { property: 'background-image', imageSet: "url(example.png) 1dppx", valid: true }, + { property: 'background-image', imageSet: "url(example.png) 1dpi", valid: true }, + { property: 'background-image', imageSet: "url(example.png) 1dpcm, 'example.png' 2x", valid: true }, + { property: 'background-image', imageSet: "'example.jpeg' 222dpi, url(example.png) 3.5x", valid: true }, + { property: 'background-image', imageSet: "linear-gradient(black, white) 1x", valid: true }, + { property: 'content', imageSet: "linear-gradient(black, white) 1x, 'example.png' 4x", valid: true }, + { property: 'content', imageSet: "url('example.png') 192dpi, linear-gradient(black, white) 1x", valid: true }, + + { property: 'background-image', imageSet: "url(example.png) 0x", valid: false }, + { property: 'background-image', imageSet: "url(example.png) -20x", valid: false }, + { property: 'background-image', imageSet: "'example.jpeg' 92pid url(example.png) 1x", valid: false }, + { property: 'cursor', imageSet: "linear-gradient(black, white) 1x", valid: false } + ] + + function check_image_set(tst) { + var div = document.createElement('div'); + div.setAttribute("style", `${tst.property}: image-set(${tst.imageSet})`) + + var inline_style = div.style.getPropertyValue(tst.property); + assert_equals(inline_style.startsWith('image-set'), tst.valid); + + document.body.appendChild(div); + var computed_style = getComputedStyle(div).getPropertyValue(tst.property); + assert_equals(computed_style.startsWith('image-set'), tst.valid); + + div.remove(); + } + + tests.forEach(tst => { + test(() => { + check_image_set(tst); + }, `${tst.property}: image-set(${tst.imageSet}) ${tst.valid ? "[ parsable ]" : "[ unparsable ]"}`) + }); + </script> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transitions/Document-getAnimations.tentative-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-transitions/Document-getAnimations.tentative-expected.txt deleted file mode 100644 index 2d36ec5..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-transitions/Document-getAnimations.tentative-expected.txt +++ /dev/null
@@ -1,7 +0,0 @@ -This is a testharness.js-based test. -PASS getAnimations for non-animated content -PASS getAnimations for CSS Transitions -FAIL CSS Transitions targetting (pseudo-)elements should have correct order after sorting assert_equals: Transition #3 has expected target expected Element node <div style="display: list-item; left: 100px; transition: ... but got Element node <div style="left: 100px; transition: left 100s ease 0s;">... -PASS Transitions are not returned after they have finished -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/document-policy/font-display/font-display-document-policy-01.tentative-ref.html b/third_party/blink/web_tests/external/wpt/document-policy/font-display/font-display-document-policy-01.tentative-ref.html new file mode 100644 index 0000000..78bca05 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/document-policy/font-display/font-display-document-policy-01.tentative-ref.html
@@ -0,0 +1,30 @@ +<!DOCTYPE html> +<title>Test for no-font-display-late-swap document policy behavior</title> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.ahem { + font-family: 'Ahem'; +} +.arial { + font-family: 'Arial'; +} +</style> +<p>Tests if font-display is set to optional for each option except for when it is set to fallback</p> +<table id="container"> + <tr> + <th>not-set</th> + <th>auto</th> + <th>block</th> + <th>swap</th> + <th>fallback</th> + <th>optional</th> + </tr> + <tr> + <td class="arial">a</td> + <td class="arial">a</td> + <td class="arial">a</td> + <td class="arial">a</td> + <td class="ahem">a</td> + <td class="arial">a</td> + </tr> +</table>
diff --git a/third_party/blink/web_tests/external/wpt/document-policy/font-display/font-display-document-policy-01.tentative.html b/third_party/blink/web_tests/external/wpt/document-policy/font-display/font-display-document-policy-01.tentative.html new file mode 100644 index 0000000..cad4c18 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/document-policy/font-display/font-display-document-policy-01.tentative.html
@@ -0,0 +1,46 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<title>Test for no-font-display-late-swap document policy behavior</title> +<link rel="help" href="https://github.com/w3c/webappsec-feature-policy/blob/master/policies/font-display-late-swap.md"> +<link rel="match" href="font-display-document-policy-01.tentative-ref.html"> +<style> +</style> +<p>Tests if font-display is set to optional for each option except for when it is set to fallback</p> +<table id="container"> + <tr> + <th>not-set</th> + <th>auto</th> + <th>block</th> + <th>swap</th> + <th>fallback</th> + <th>optional</th> + </tr> +</table> +<script> +const fontDisplayValues = ['', 'auto', 'block', 'swap', 'fallback', 'optional']; +const table = document.getElementById('container'); + +function makeFontFaceDeclaration(family, display) { + url = '/fonts/Ahem.ttf?pipe=trickle(d1)'; // Before the swap period is over + return '@font-face { font-family: ' + family + '; src: url("' + url + '"); font-display: ' + display + '; }'; +} + +window.onload = () => { + let tr = document.createElement('tr'); + for (let display of fontDisplayValues) { + const family = display + '-face'; + const rule = makeFontFaceDeclaration(family, display); + document.styleSheets[0].insertRule(rule, 0); + let td = document.createElement('td'); + td.textContent = 'a'; + td.style.fontFamily = family + ', Arial'; + tr.appendChild(td); + } + table.appendChild(tr); + const timeoutMilliSec = 1500; // After the font is loaded + setTimeout(() => { + document.documentElement.classList.remove("reftest-wait"); + }, timeoutMilliSec); +} +</script> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/document-policy/font-display/font-display-document-policy-01.tentative.html.headers b/third_party/blink/web_tests/external/wpt/document-policy/font-display/font-display-document-policy-01.tentative.html.headers new file mode 100644 index 0000000..e1387f5 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/document-policy/font-display/font-display-document-policy-01.tentative.html.headers
@@ -0,0 +1 @@ +Document-Policy: no-font-display-late-swap
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-defer-import-expected.txt b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-defer-import-expected.txt new file mode 100644 index 0000000..693f97f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-defer-import-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL scheduler: stylesheets blocking defer scripts assert_equals: expected "fixed" but got "static" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-defer-import.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-defer-import.html new file mode 100644 index 0000000..451e218 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-defer-import.html
@@ -0,0 +1,14 @@ +<!DOCTYPE html> +<html><head> + <title> scheduler: stylesheets blocking defer scripts</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <!-- this stylesheet blocks scripts --> + <link rel="stylesheet" href="css/import.css?pipe=trickle(d2)"> +</head> +<body> + <div id="log">FAILED (This TC requires JavaScript enabled)</div> + <div id="test">Test</div> + + <script defer src="scripts/check-style-sheet.js"></script> +</body></html>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-defer-noimport-expected.txt b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-defer-noimport-expected.txt new file mode 100644 index 0000000..693f97f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-defer-noimport-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL scheduler: stylesheets blocking defer scripts assert_equals: expected "fixed" but got "static" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-defer-noimport.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-defer-noimport.html new file mode 100644 index 0000000..704b880 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-defer-noimport.html
@@ -0,0 +1,14 @@ +<!DOCTYPE html> +<html><head> + <title> scheduler: stylesheets blocking defer scripts</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <!-- this stylesheet blocks scripts --> + <link rel="stylesheet" href="css/background.css?pipe=trickle(d2)"> +</head> +<body> + <div id="log">FAILED (This TC requires JavaScript enabled)</div> + <div id="test">Test</div> + + <script defer src="scripts/check-style-sheet.js"></script> +</body></html>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-external-import.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-external-import.html new file mode 100644 index 0000000..4fe526a27 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-external-import.html
@@ -0,0 +1,14 @@ +<!DOCTYPE html> +<html><head> + <title> scheduler: stylesheets blocking external parser-blocking scripts</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <!-- this stylesheet blocks scripts --> + <link rel="stylesheet" href="css/import.css?pipe=trickle(d2)"> +</head> +<body> + <div id="log">FAILED (This TC requires JavaScript enabled)</div> + <div id="test">Test</div> + + <script src="scripts/check-style-sheet.js"></script> +</body></html>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-external-module-import-expected.txt b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-external-module-import-expected.txt new file mode 100644 index 0000000..1196188 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-external-module-import-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL scheduler: stylesheets blocking external module scripts assert_equals: expected "fixed" but got "static" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-external-module-import.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-external-module-import.html new file mode 100644 index 0000000..ea87374 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-external-module-import.html
@@ -0,0 +1,14 @@ +<!DOCTYPE html> +<html><head> + <title> scheduler: stylesheets blocking external module scripts</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <!-- this stylesheet blocks scripts --> + <link rel="stylesheet" href="css/import.css?pipe=trickle(d2)"> +</head> +<body> + <div id="log">FAILED (This TC requires JavaScript enabled)</div> + <div id="test">Test</div> + + <script src="scripts/check-style-sheet.js" type="module"></script> +</body></html>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-external-module-noimport-expected.txt b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-external-module-noimport-expected.txt new file mode 100644 index 0000000..1196188 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-external-module-noimport-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL scheduler: stylesheets blocking external module scripts assert_equals: expected "fixed" but got "static" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-external-module-noimport.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-external-module-noimport.html new file mode 100644 index 0000000..71c59fb --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-external-module-noimport.html
@@ -0,0 +1,14 @@ +<!DOCTYPE html> +<html><head> + <title> scheduler: stylesheets blocking external module scripts</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <!-- this stylesheet blocks scripts --> + <link rel="stylesheet" href="css/background.css?pipe=trickle(d2)"> +</head> +<body> + <div id="log">FAILED (This TC requires JavaScript enabled)</div> + <div id="test">Test</div> + + <script src="scripts/check-style-sheet.js" type="module"></script> +</body></html>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-external-noimport.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-external-noimport.html new file mode 100644 index 0000000..3694481b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-external-noimport.html
@@ -0,0 +1,14 @@ +<!DOCTYPE html> +<html><head> + <title> scheduler: stylesheets blocking external parser-blocking scripts</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <!-- this stylesheet blocks scripts --> + <link rel="stylesheet" href="css/background.css?pipe=trickle(d2)"> +</head> +<body> + <div id="log">FAILED (This TC requires JavaScript enabled)</div> + <div id="test">Test</div> + + <script src="scripts/check-style-sheet.js"></script> +</body></html>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-import.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-import.html index db7abcc..b8afeda13 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-import.html +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-import.html
@@ -3,7 +3,6 @@ <title> scheduler: stylesheets blocking scripts</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> - <script src="testlib/testlib.js"></script> <!-- this stylesheet blocks scripts --> <link rel="stylesheet" href="css/import.css?pipe=trickle(d2)"> </head>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-module-import-expected.txt b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-module-import-expected.txt new file mode 100644 index 0000000..850d797f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-module-import-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL scheduler: stylesheets blocking module scripts assert_equals: expected "fixed" but got "static" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-module-import.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-module-import.html new file mode 100644 index 0000000..d3f02ffd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-module-import.html
@@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html><head> + <title> scheduler: stylesheets blocking module scripts</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <!-- this stylesheet blocks scripts --> + <link rel="stylesheet" href="css/import.css?pipe=trickle(d2)"> +</head> +<body> + <div id="log">FAILED (This TC requires JavaScript enabled)</div> + <div id="test">Test</div> + + <script type="module"> + test(function() { + assert_equals(getComputedStyle(document.getElementById("test")).position, + "fixed"); + }); + </script> +</body></html>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-module-noimport-expected.txt b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-module-noimport-expected.txt new file mode 100644 index 0000000..850d797f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-module-noimport-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL scheduler: stylesheets blocking module scripts assert_equals: expected "fixed" but got "static" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-module-noimport.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-module-noimport.html new file mode 100644 index 0000000..83cd29f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-module-noimport.html
@@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html><head> + <title> scheduler: stylesheets blocking module scripts</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <!-- this stylesheet blocks scripts --> + <link rel="stylesheet" href="css/background.css?pipe=trickle(d2)"> +</head> +<body> + <div id="log">FAILED (This TC requires JavaScript enabled)</div> + <div id="test">Test</div> + + <script type="module"> + test(function() { + assert_equals(getComputedStyle(document.getElementById("test")).position, + "fixed"); + }); + </script> +</body></html>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-noimport.html b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-noimport.html index 8e099c58..bd8ec86 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-noimport.html +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-noimport.html
@@ -3,7 +3,6 @@ <title> scheduler: stylesheets blocking scripts</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> - <script src="testlib/testlib.js"></script> <!-- this stylesheet blocks scripts --> <link rel="stylesheet" href="css/background.css?pipe=trickle(d2)"> </head>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/scripts/check-style-sheet.js b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/scripts/check-style-sheet.js new file mode 100644 index 0000000..cbab154 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/scripts/check-style-sheet.js
@@ -0,0 +1,4 @@ +test(function() { + assert_equals(getComputedStyle(document.getElementById("test")).position, + "fixed"); +});
diff --git a/third_party/blink/web_tests/external/wpt/lint.whitelist b/third_party/blink/web_tests/external/wpt/lint.whitelist index e428d2f4..4820642 100644 --- a/third_party/blink/web_tests/external/wpt/lint.whitelist +++ b/third_party/blink/web_tests/external/wpt/lint.whitelist
@@ -293,6 +293,7 @@ SET TIMEOUT: css/css-fonts/font-display/font-display-feature-policy-01.tentative.html SET TIMEOUT: css/css-fonts/font-display/font-display-feature-policy-02.tentative.html SET TIMEOUT: css/css-fonts/font-display/font-display-preload.html +SET TIMEOUT: document-policy/font-display/font-display-document-policy-01.tentative.html SET TIMEOUT: html/browsers/windows/auxiliary-browsing-contexts/resources/close-opener.html SET TIMEOUT: html/cross-origin-embedder-policy/resources/navigate-none.sub.html SET TIMEOUT: html/cross-origin-embedder-policy/resources/navigate-require-corp.sub.html
diff --git a/third_party/blink/web_tests/external/wpt/video-raf/META.yml b/third_party/blink/web_tests/external/wpt/video-raf/META.yml new file mode 100644 index 0000000..44c31874 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/video-raf/META.yml
@@ -0,0 +1,3 @@ +spec: https://wicg.github.io/video-rag/ +suggested_reviewers: + - tguilbert \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/video-raf/README.md b/third_party/blink/web_tests/external/wpt/video-raf/README.md new file mode 100644 index 0000000..a527293 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/video-raf/README.md
@@ -0,0 +1,11 @@ +# HTMLVideoElement.requestAnimationFrame specification Tests + +The HTMLVideoElement.requestAnimationFrame specification is available here: https://wicg.github.io/video-raf + +GitHub repository: https://github.com/WICG/video-raf + +File an issue: https://github.com/wicg/video-raf/issues/new + +## Status of these tests + +Theses tests are still basic. The specification is still WIP, and rendering tests will be added to ensure consistenty of behavior/timing relative to other [AnimationFrameProviders](https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#animation-frames) (e.g. window.rAF). \ No newline at end of file
diff --git a/third_party/blink/web_tests/media/video-request-animation-frame-parallel.html b/third_party/blink/web_tests/external/wpt/video-raf/video-request-animation-frame-parallel.html similarity index 75% rename from third_party/blink/web_tests/media/video-request-animation-frame-parallel.html rename to third_party/blink/web_tests/external/wpt/video-raf/video-request-animation-frame-parallel.html index 245c46f..35fe457 100644 --- a/third_party/blink/web_tests/media/video-request-animation-frame-parallel.html +++ b/third_party/blink/web_tests/external/wpt/video-raf/video-request-animation-frame-parallel.html
@@ -1,7 +1,9 @@ <!DOCTYPE html> -<title>Test having multiple video.rAF callbacks pending for a single frame.</title> -<script src="../resources/testharness.js"></script> -<script src="../resources/testharnessreport.js"></script> +<html> +<title>Test having multiple video.rAF callbacks in flight for a single element.</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/media.js"></script> <script> async_test(function(t) { @@ -20,7 +22,7 @@ assert_object_equals(firstMetadata, metadata); })); - video.src = "content/test.webm"; + video.src = getVideoURI('/media/movie_5'); video.play(); }, 'Test callbacks get the same information.'); @@ -45,7 +47,8 @@ t.step_func_done() ); - video.src = "content/test.webm"; + video.src = getVideoURI('/media/movie_5'); video.play(); }, 'Test we can cancel callbacks from callbacks.'); -</script> \ No newline at end of file +</script> +</html>
diff --git a/third_party/blink/web_tests/media/video-request-animation-frame-repeating.html b/third_party/blink/web_tests/external/wpt/video-raf/video-request-animation-frame-repeating.html similarity index 79% rename from third_party/blink/web_tests/media/video-request-animation-frame-repeating.html rename to third_party/blink/web_tests/external/wpt/video-raf/video-request-animation-frame-repeating.html index 9096103b..d98f39f9 100644 --- a/third_party/blink/web_tests/media/video-request-animation-frame-repeating.html +++ b/third_party/blink/web_tests/external/wpt/video-raf/video-request-animation-frame-repeating.html
@@ -1,7 +1,9 @@ <!DOCTYPE html> -<title>Test calling video.requestAnimationFrame() from a video.rAF callback.</title> -<script src="../resources/testharness.js"></script> -<script src="../resources/testharnessreport.js"></script> +<html> +<title>Test repeatedly chaining video.rAF() callbacks.</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/media.js"></script> <script> async_test(function(t) { @@ -26,10 +28,10 @@ })); - video.src = "content/test.webm"; + video.src = getVideoURI('/media/movie_5'); video.play(); -}, 'Test callbacks are only called on the next frame.'); +}, 'Test new callbacks are only called on the next frame.'); async_test(function(t) { let video = document.createElement('video'); @@ -51,8 +53,9 @@ video.requestAnimationFrame(t.step_func(frameNumberVerifier)); - video.src = "content/test.webm"; + video.src = getVideoURI('/media/movie_5'); video.play(); }, 'Test chaining calls to video.rAF.'); -</script> \ No newline at end of file +</script> +</html>
diff --git a/third_party/blink/web_tests/media/video-request-animation-frame.html b/third_party/blink/web_tests/external/wpt/video-raf/video-request-animation-frame.html similarity index 90% rename from third_party/blink/web_tests/media/video-request-animation-frame.html rename to third_party/blink/web_tests/external/wpt/video-raf/video-request-animation-frame.html index a50c412a..195f5edb 100644 --- a/third_party/blink/web_tests/media/video-request-animation-frame.html +++ b/third_party/blink/web_tests/external/wpt/video-raf/video-request-animation-frame.html
@@ -1,12 +1,13 @@ <!DOCTYPE html> +<html> <title>Test the basics of the video.requestAnimationFrame() API.</title> -<script src="../resources/testharness.js"></script> -<script src="../resources/testharnessreport.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/media.js"></script> <script> - var testVideo = { - url: "content/test.webm", - height: 180, + url: getVideoURI('/media/movie_5'), + height: 240, width: 320, } @@ -72,4 +73,5 @@ video.cancelAnimationFrame(-1); }, 'Test invalid calls to the video.rAF API.'); -</script> \ No newline at end of file +</script> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/process-getter.https.html b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/process-getter.https.html new file mode 100644 index 0000000..a4c5912 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/process-getter.https.html
@@ -0,0 +1,23 @@ +<!doctype html> +<title>Test use of 'process' getter for AudioWorkletProcessor callback</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script> +const do_test = async (node_name) => { + const context = new AudioContext(); + const filePath = `processors/${node_name}-processor.js`; + await context.audioWorklet.addModule(filePath); + const node = new AudioWorkletNode(context, node_name); + const event = await new Promise((resolve) => { + node.port.onmessage = resolve; + }); + assert_equals(event.data.message, "done"); +}; + +// Includes testing for https://github.com/WebAudio/web-audio-api/pull/2104 +promise_test(async () => do_test('process-getter-test-prototype'), + "'process' getter on prototype"); + +promise_test(async () => do_test('process-getter-test-instance'), + "'process' getter on instance"); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/process-parameters.https.html b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/process-parameters.https.html new file mode 100644 index 0000000..4c6a10df --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/process-parameters.https.html
@@ -0,0 +1,87 @@ +<!doctype html> +<title>Test parameters of process() AudioWorkletProcessor callback</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script> +var context; +promise_setup(async (t) => { + context = new AudioContext(); + const filePath = 'processors/process-parameter-test-processor.js'; + await context.audioWorklet.addModule(filePath); +}); + +const get_parameters = async (node, options) => { + const event = await new Promise((resolve) => { + node.port.onmessage = resolve; + }); + const inputs = event.data.inputs; + assert_equals(inputs.length, options.numberOfInputs, 'inputs length'); + const outputs = event.data.outputs; + assert_equals(outputs.length, options.numberOfOutputs, 'outputs length'); + for (let port = 0; port < inputs.length; ++port) { + for (let channel = 0; channel < inputs[port].length; ++channel) { + assert_equals(inputs[port][channel].length, 128, + `inputs[${port}][${channel}].length`); + } + } + for (let port = 0; port < outputs.length; ++port) { + for (let channel = 0; channel < outputs[port].length; ++channel) { + assert_equals(outputs[port][channel].length, 128, + `outputs[${port}][${channel}].length`); + } + } + return event.data; +}; + +promise_test(async (t) => { + const options = { + numberOfInputs: 3, + numberOfOutputs: 0 + }; + // Connect a source so that one channel of one input is active. + context.suspend(); + const source = new ConstantSourceNode(context); + source.start(); + const merger = new ChannelMergerNode(context, {numberOfInputs: 2}); + const active_channel_index = merger.numberOfInputs - 1; + source.connect(merger, 0, active_channel_index); + const node = new AudioWorkletNode(context, 'process-parameter-test', options); + const active_port_index = options.numberOfInputs - 1; + merger.connect(node, 0, active_port_index); + context.resume(); + const {inputs} = await get_parameters(node, options); + for (let port = 0; port < inputs.length - 1; ++port) { + if (port != active_port_index) { + assert_equals(inputs[port].length, 0, `inputs[${port}].length`); + } + } + const active_input = inputs[active_port_index]; + assert_equals(active_input.length, merger.numberOfInputs, + 'active_input.length'); + for (let channel = 0; channel < active_input.length; ++channel) { + let expected = channel == active_channel_index ? 1.0 : 0.0; + for (let sample = 0; sample < inputs.length; ++sample) { + assert_equals(active_input[channel][sample], expected, + `active_input[${channel}][${sample}]`); + } + } +}, '3 inputs; 0 outputs'); + +promise_test(async (t) => { + const options = { + numberOfInputs: 0, + numberOfOutputs: 3 + }; + const node = new AudioWorkletNode(context, 'process-parameter-test', options); + const {outputs} = await get_parameters(node, options); + for (let port = 0; port < outputs.length; ++port) { + assert_equals(outputs[port].length, 1, `outputs[${port}].length`); + for (let channel = 0; channel < outputs[port].length; ++channel) { + for (let sample = 0; sample < outputs.length; ++sample) { + assert_equals(outputs[port][channel][sample], 0.0, + `outputs[${port}][${channel}][${sample}]`); + } + } + } +}, '0 inputs; 3 outputs'); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processor-construction-port.https.html b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processor-construction-port.https.html new file mode 100644 index 0000000..6f1aa59 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processor-construction-port.https.html
@@ -0,0 +1,61 @@ +<!doctype html> +<title>Test processor port assignment on processor callback function construction</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script> +// https://webaudio.github.io/web-audio-api/#AudioWorkletProcessor-instantiation + +const get_context_for_node_name = async (node_name) => { + const context = new AudioContext(); + const filePath = `processors/construction-port-${node_name}.js`; + await context.audioWorklet.addModule(filePath); + return context; +} + +const test_throws = async ({node_name, thrower} = {}) => { + const context = await get_context_for_node_name(node_name); + const node = new AudioWorkletNode(context, node_name); + const event = await new Promise((resolve) => { + node.port.onmessage = resolve; + }); + assert_true(event.data.threw, `${thrower} should throw`); + assert_equals(event.data.errorName, "TypeError"); + assert_true(event.data.isTypeError, "exception should be TypeError"); +}; + +const throw_tests = [ + { + test_name: 'super() after new AudioWorkletProcessor()', + node_name: 'super-after-new', + thrower: 'super()' + }, + { + test_name: 'new AudioWorkletProcessor() after super()', + node_name: 'new-after-super', + thrower: 'new AudioWorkletProcessor()' + }, + { + test_name: 'new AudioWorkletProcessor() after new AudioWorkletProcessor()', + node_name: 'new-after-new', + thrower: 'new AudioWorkletProcessor()' + } +]; +for (const test_info of throw_tests) { + promise_test(async () => test_throws(test_info), test_info.test_name); +} + +promise_test(async (t) => { + const node_name = 'singleton'; + const context = await get_context_for_node_name(node_name); + const node1 = new AudioWorkletNode(context, node_name); + const node2 = new AudioWorkletNode(context, node_name); + node2.onmessage = t.unreached_func("node2 should not receive a message"); + let count = 0; + await new Promise((resolve) => { + node1.port.onmessage = t.step_func((event) => { + assert_less_than(count, 2, "message count"); + if (++count == 2) { resolve(); }; + }); + }); +}, 'Singleton AudioWorkletProcessor'); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processors/construction-port-new-after-new.js b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processors/construction-port-new-after-new.js new file mode 100644 index 0000000..d4c63f7 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processors/construction-port-new-after-new.js
@@ -0,0 +1,16 @@ +class NewAfterNew extends AudioWorkletProcessor { + constructor() { + const processor = new AudioWorkletProcessor() + let message = {threw: false}; + try { + new AudioWorkletProcessor(); + } catch (e) { + message.threw = true; + message.errorName = e.name; + message.isTypeError = e instanceof TypeError; + } + processor.port.postMessage(message); + return processor; + } +} +registerProcessor("new-after-new", NewAfterNew);
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processors/construction-port-new-after-super.js b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processors/construction-port-new-after-super.js new file mode 100644 index 0000000..a6d4f0e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processors/construction-port-new-after-super.js
@@ -0,0 +1,15 @@ +class NewAfterSuper extends AudioWorkletProcessor { + constructor() { + super() + let message = {threw: false}; + try { + new AudioWorkletProcessor() + } catch (e) { + message.threw = true; + message.errorName = e.name; + message.isTypeError = e instanceof TypeError; + } + this.port.postMessage(message); + } +} +registerProcessor("new-after-super", NewAfterSuper);
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processors/construction-port-singleton.js b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processors/construction-port-singleton.js new file mode 100644 index 0000000..c40b5a7 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processors/construction-port-singleton.js
@@ -0,0 +1,16 @@ +let singleton; +class Singleton extends AudioWorkletProcessor { + constructor() { + if (!singleton) { + singleton = new AudioWorkletProcessor(); + singleton.process = function() { + this.port.postMessage({message: "process called"}); + // This function will be called at most once for each AudioWorkletNode + // if the node has no input connections. + return false; + } + } + return singleton; + } +} +registerProcessor("singleton", Singleton);
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processors/construction-port-super-after-new.js b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processors/construction-port-super-after-new.js new file mode 100644 index 0000000..e447830c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processors/construction-port-super-after-new.js
@@ -0,0 +1,16 @@ +class SuperAfterNew extends AudioWorkletProcessor { + constructor() { + const processor = new AudioWorkletProcessor() + let message = {threw: false}; + try { + super(); + } catch (e) { + message.threw = true; + message.errorName = e.name; + message.isTypeError = e instanceof TypeError; + } + processor.port.postMessage(message); + return processor; + } +} +registerProcessor("super-after-new", SuperAfterNew);
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processors/process-getter-test-instance-processor.js b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processors/process-getter-test-instance-processor.js new file mode 100644 index 0000000..b1434f5 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processors/process-getter-test-instance-processor.js
@@ -0,0 +1,44 @@ +/** + * @class ProcessGetterTestInstanceProcessor + * @extends AudioWorkletProcessor + * + * This processor class tests that a 'process' getter on an + * AudioWorkletProcessorConstructor instance is called at the right times. + */ + +class ProcessGetterTestInstanceProcessor extends AudioWorkletProcessor { + constructor() { + super(); + this.getterCallCount = 0; + this.totalProcessCallCount = 0; + Object.defineProperty(this, 'process', { get: function() { + if (!(this instanceof ProcessGetterTestInstanceProcessor)) { + throw new Error('`process` getter called with bad `this`.'); + } + ++this.getterCallCount; + let functionCallCount = 0; + return () => { + if (++functionCallCount > 1) { + const message = 'Closure of function returned from `process` getter' + + ' should be used for only one call.' + this.port.postMessage({message: message}); + throw new Error(message); + } + if (++this.totalProcessCallCount < 2) { + return true; // Expect another getter call. + } + if (this.totalProcessCallCount != this.getterCallCount) { + const message = + 'Getter should be called only once for each process() call.' + this.port.postMessage({message: message}); + throw new Error(message); + } + this.port.postMessage({message: 'done'}); + return false; // No more calls required. + }; + }}); + } +} + +registerProcessor('process-getter-test-instance', + ProcessGetterTestInstanceProcessor);
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processors/process-getter-test-prototype-processor.js b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processors/process-getter-test-prototype-processor.js new file mode 100644 index 0000000..cef5fa8b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processors/process-getter-test-prototype-processor.js
@@ -0,0 +1,55 @@ +/** + * @class ProcessGetterTestPrototypeProcessor + * @extends AudioWorkletProcessor + * + * This processor class tests that a 'process' getter on + * AudioWorkletProcessorConstructor is called at the right times. + */ + +// Reporting errors during registerProcess() is awkward. +// The occurrance of an error is flagged, so that a trial registration can be +// performed and registration against the expected AudioWorkletNode name is +// performed only if no errors are flagged during the trial registration. +let error_flag = false; + +class ProcessGetterTestPrototypeProcessor extends AudioWorkletProcessor { + constructor() { + super(); + this.getterCallCount = 0; + this.totalProcessCallCount = 0; + } + get process() { + if (!(this instanceof ProcessGetterTestPrototypeProcessor)) { + error_flag = true; + throw new Error('`process` getter called with bad `this`.'); + } + ++this.getterCallCount; + let functionCallCount = 0; + return () => { + if (++functionCallCount > 1) { + const message = 'Closure of function returned from `process` getter' + + ' should be used for only one call.' + this.port.postMessage({message: message}); + throw new Error(message); + } + if (++this.totalProcessCallCount < 2) { + return true; // Expect another getter call. + } + if (this.totalProcessCallCount != this.getterCallCount) { + const message = + 'Getter should be called only once for each process() call.' + this.port.postMessage({message: message}); + throw new Error(message); + } + this.port.postMessage({message: 'done'}); + return false; // No more calls required. + }; + } +} + +registerProcessor('trial-process-getter-test-prototype', + ProcessGetterTestPrototypeProcessor); +if (!error_flag) { + registerProcessor('process-getter-test-prototype', + ProcessGetterTestPrototypeProcessor); +}
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processors/process-parameter-test-processor.js b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processors/process-parameter-test-processor.js new file mode 100644 index 0000000..a300d3c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processors/process-parameter-test-processor.js
@@ -0,0 +1,18 @@ +/** + * @class ProcessParameterTestProcessor + * @extends AudioWorkletProcessor + * + * This processor class forwards input and output parameters to its + * AudioWorkletNode. + */ +class ProcessParameterTestProcessor extends AudioWorkletProcessor { + process(inputs, outputs) { + this.port.postMessage({ + inputs: inputs, + outputs: outputs + }); + return false; + } +} + +registerProcessor('process-parameter-test', ProcessParameterTestProcessor);
diff --git a/third_party/blink/web_tests/fast/scrolling/percentage-mousewheel-scroll-on-iframe.html b/third_party/blink/web_tests/fast/scrolling/percentage-mousewheel-scroll-on-iframe.html new file mode 100644 index 0000000..684ffe1d --- /dev/null +++ b/third_party/blink/web_tests/fast/scrolling/percentage-mousewheel-scroll-on-iframe.html
@@ -0,0 +1,93 @@ +<!doctype html> +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<script src="../../resources/gesture-util.js"></script> +<iframe id="iframeElement" style="width: 400px; height: 300px;" srcdoc=" + <!doctype html> + <script> + var wheelEventDeltaX = 0; + var wheelEventDeltaY = 0; + document.scrollingElement.addEventListener('wheel', + function(e) { + console.log('firing wheel'); + wheelEventDeltaX = e.deltaX; + wheelEventDeltaY = e.deltaY; + } + ); + </script> + <div style='height:1000px; width:800px;'></div> +"></iframe> +</div> +<script> +"use strict"; +internals.settings.setHideScrollbars(true); + +function waitForLoad() { + return new Promise((resolve, reject) => { + window.addEventListener("load", resolve); + }); +} + +function isNear(actual, expected, tolerance) { + console.log(actual + " : " + expected); + return Math.abs(actual - expected) <= tolerance; +} + +promise_test(async () => { + await waitForLoad(); + + const SCROLL_PERCENTAGE = 0.4; + const WHEEL_DELTA_CONSTANT = 100; + await smoothScroll(SCROLL_PERCENTAGE, 200, 150, + GestureSourceType.MOUSE_INPUT, + 'downright', + SPEED_INSTANT /* speed_in_pixels_s */, + false /* precise_scrolling_deltas */, + false /* scroll_by_page */, + true /* cursor_visible */, + true /* scroll_by_percentage */); + + function isCorrectXOffset() { + return isNear(iframeElement.contentDocument.scrollingElement.scrollLeft, + iframeElement.clientWidth * SCROLL_PERCENTAGE, 0.5); + } + function isCorrectYOffset() { + return isNear(iframeElement.contentDocument.scrollingElement.scrollTop, + iframeElement.clientHeight * SCROLL_PERCENTAGE, 0.5); + } + + await waitFor(isCorrectXOffset); + await waitFor(isCorrectYOffset); + await conditionHolds(isCorrectXOffset); + await conditionHolds(isCorrectYOffset); + assert_equals(iframeElement.contentWindow.wheelEventDeltaY, + WHEEL_DELTA_CONSTANT, + "Wheel event deltaY must be a constant"); + assert_equals(iframeElement.contentWindow.wheelEventDeltaX, + WHEEL_DELTA_CONSTANT, + "Wheel event deltaY must be a constant"); + + // Scroll back to the top and ensure we scroll back to the origin and have + // negated wheel deltas + await smoothScroll(SCROLL_PERCENTAGE, 200, 150, GestureSourceType.MOUSE_INPUT, + 'upleft', 100 /* speed_in_pixels_s */, + false /* precise_scrolling_deltas */, + false /* scroll_by_page */, + true /* cursor_visible */, + true /* scroll_by_percentage */); + + await waitFor(() => + iframeElement.contentDocument.scrollingElement.scrollTop === 0, + "Vertical scrolling must scroll back to origin"); + await waitFor(() => + iframeElement.contentDocument.scrollingElement.scrollLeft === 0, + "Horizontal scrolling must scroll back to origin") + + assert_equals(iframeElement.contentWindow.wheelEventDeltaY, + -WHEEL_DELTA_CONSTANT, + "Wheel event deltaY must be negative constant"); + assert_equals(iframeElement.contentWindow.wheelEventDeltaX, + -WHEEL_DELTA_CONSTANT, + "Wheel event deltaY must be negative constant"); +}, "Using the mousewheel to scroll by a percentage on an empty iframe."); +</script>
diff --git a/third_party/blink/web_tests/fast/scrolling/percentage-mousewheel-scroll.html b/third_party/blink/web_tests/fast/scrolling/percentage-mousewheel-scroll.html new file mode 100644 index 0000000..2027c24 --- /dev/null +++ b/third_party/blink/web_tests/fast/scrolling/percentage-mousewheel-scroll.html
@@ -0,0 +1,52 @@ +<!doctype html> +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<script src="../../resources/gesture-util.js"></script> +<div id="outerScroller" style="width: 400px; height: 400px; overflow: scroll;"> + <div id="innerScroller" style="width: 200px; height: 200px; overflow: scroll;"> + <div style="width: 1000px; height:1000px;"></div> + </div> + <div style="width: 1000px; height:1000px;"></div> +</div> +<script> + +const WHEEL_DELTA = 100; +const SCROLL_PERCENTAGE = 0.6; + +function scrollAt(x, y) { + return smoothScroll(SCROLL_PERCENTAGE, x, y, GestureSourceType.MOUSE_INPUT, + 'down', SPEED_INSTANT /* speed_in_pixels_s */, + false /* precise_scrolling_deltas */, + false /* scroll_by_page */, + true /* cursor_visible */, + true /* scroll_by_percentage */); +} + +async function test_scroller(scrollElement, x, y) { + let deltaY = 0; + scrollElement.addEventListener("wheel", evt => { deltaY = evt.deltaY }); + + await scrollAt(x, y); + + function isCorrectOffset() { + return Math.abs(scrollElement.scrollTop - + scrollElement.clientHeight * SCROLL_PERCENTAGE) <= 0.5; + } + await waitFor(isCorrectOffset, + "Scrolling by 10% must scroll the correct amount."); + await conditionHolds(isCorrectOffset, + "Scrolling 10% must not scroll past the correct ammount"); + + assert_equals(deltaY, WHEEL_DELTA, + "Wheel scrolling must report a constant delta value."); +} + +promise_test(function() { + return test_scroller(innerScroller, 100, 100); +}, "innerScroller percentage resolved correctly"); + +promise_test(function() { + return test_scroller(outerScroller, 300, 300); +}, "outerScroller percentage resolved correctly"); + +</script>
diff --git a/third_party/blink/web_tests/http/tests/devtools/elements/styles-4/styles-source-offsets.js b/third_party/blink/web_tests/http/tests/devtools/elements/styles-4/styles-source-offsets.js index 98363b01..3ea4f77 100644 --- a/third_party/blink/web_tests/http/tests/devtools/elements/styles-4/styles-source-offsets.js +++ b/third_party/blink/web_tests/http/tests/devtools/elements/styles-4/styles-source-offsets.js
@@ -58,6 +58,17 @@ } } + await (() => { + // TODO(crbug.com/1046354): This is a workaround for loadHTML() resolving + // before parsing is finished. In this case the stylesheet is blocking html + // parsing with BlockHTMLParsingOnStyleSheets enabled and mainBody is not + // found by selectNodeWithId below. + let resolve; + const promise = new Promise(r => resolve = r); + TestRunner.waitForPageLoad(() => resolve()); + return promise; + })(); + ElementsTestRunner.selectNodeWithId('mainBody', step1); async function step1(node) {
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/external/wpt/css/css-images/image-set/image-set-parsing-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.13/external/wpt/css/css-images/image-set/image-set-parsing-expected.txt new file mode 100644 index 0000000..47b6b85 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.13/external/wpt/css/css-images/image-set/image-set-parsing-expected.txt
@@ -0,0 +1,18 @@ +This is a testharness.js-based test. +FAIL background-image: image-set(url(example.png) 1x) [ parsable ] assert_equals: expected true but got false +FAIL background-image: image-set(url('example.png') 1x) [ parsable ] assert_equals: expected true but got false +FAIL background-image: image-set('example.jpg' 1x) [ parsable ] assert_equals: expected true but got false +FAIL background-image: image-set(url(example.png) 1x, 'example.png' 2x) [ parsable ] assert_equals: expected true but got false +FAIL background-image: image-set(url(example.png) 1dppx) [ parsable ] assert_equals: expected true but got false +FAIL background-image: image-set(url(example.png) 1dpi) [ parsable ] assert_equals: expected true but got false +FAIL background-image: image-set(url(example.png) 1dpcm, 'example.png' 2x) [ parsable ] assert_equals: expected true but got false +FAIL background-image: image-set('example.jpeg' 222dpi, url(example.png) 3.5x) [ parsable ] assert_equals: expected true but got false +FAIL background-image: image-set(linear-gradient(black, white) 1x) [ parsable ] assert_equals: expected true but got false +FAIL content: image-set(linear-gradient(black, white) 1x, 'example.png' 4x) [ parsable ] assert_equals: expected true but got false +FAIL content: image-set(url('example.png') 192dpi, linear-gradient(black, white) 1x) [ parsable ] assert_equals: expected true but got false +PASS background-image: image-set(url(example.png) 0x) [ unparsable ] +PASS background-image: image-set(url(example.png) -20x) [ unparsable ] +PASS background-image: image-set('example.jpeg' 92pid url(example.png) 1x) [ unparsable ] +PASS cursor: image-set(linear-gradient(black, white) 1x) [ unparsable ] +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/process-getter.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.13/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/process-getter.https-expected.txt new file mode 100644 index 0000000..c03ebd59 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.13/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/process-getter.https-expected.txt
@@ -0,0 +1,5 @@ +This is a testharness.js-based test. +FAIL 'process' getter on prototype promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to construct 'AudioWorkletNode': AudioWorkletNode cannot be created: The node name 'process-getter-test-prototype' is not defined in AudioWorkletGlobalScope." +FAIL 'process' getter on instance promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to construct 'AudioWorkletNode': AudioWorkletNode cannot be created: The node name 'process-getter-test-instance' is not defined in AudioWorkletGlobalScope." +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processor-construction-port.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.13/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processor-construction-port.https-expected.txt new file mode 100644 index 0000000..a615b34c --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.13/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processor-construction-port.https-expected.txt
@@ -0,0 +1,7 @@ +This is a testharness.js-based test. +FAIL super() after new AudioWorkletProcessor() promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to construct 'AudioWorkletNode': AudioWorkletNode cannot be created: The node name 'super-after-new' is not defined in AudioWorkletGlobalScope." +FAIL new AudioWorkletProcessor() after super() promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to construct 'AudioWorkletNode': AudioWorkletNode cannot be created: The node name 'new-after-super' is not defined in AudioWorkletGlobalScope." +FAIL new AudioWorkletProcessor() after new AudioWorkletProcessor() promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to construct 'AudioWorkletNode': AudioWorkletNode cannot be created: The node name 'new-after-new' is not defined in AudioWorkletGlobalScope." +FAIL Singleton AudioWorkletProcessor promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to construct 'AudioWorkletNode': AudioWorkletNode cannot be created: The node name 'singleton' is not defined in AudioWorkletGlobalScope." +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/css/css-images/image-set/image-set-parsing-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/css/css-images/image-set/image-set-parsing-expected.txt new file mode 100644 index 0000000..47b6b85 --- /dev/null +++ b/third_party/blink/web_tests/platform/win/external/wpt/css/css-images/image-set/image-set-parsing-expected.txt
@@ -0,0 +1,18 @@ +This is a testharness.js-based test. +FAIL background-image: image-set(url(example.png) 1x) [ parsable ] assert_equals: expected true but got false +FAIL background-image: image-set(url('example.png') 1x) [ parsable ] assert_equals: expected true but got false +FAIL background-image: image-set('example.jpg' 1x) [ parsable ] assert_equals: expected true but got false +FAIL background-image: image-set(url(example.png) 1x, 'example.png' 2x) [ parsable ] assert_equals: expected true but got false +FAIL background-image: image-set(url(example.png) 1dppx) [ parsable ] assert_equals: expected true but got false +FAIL background-image: image-set(url(example.png) 1dpi) [ parsable ] assert_equals: expected true but got false +FAIL background-image: image-set(url(example.png) 1dpcm, 'example.png' 2x) [ parsable ] assert_equals: expected true but got false +FAIL background-image: image-set('example.jpeg' 222dpi, url(example.png) 3.5x) [ parsable ] assert_equals: expected true but got false +FAIL background-image: image-set(linear-gradient(black, white) 1x) [ parsable ] assert_equals: expected true but got false +FAIL content: image-set(linear-gradient(black, white) 1x, 'example.png' 4x) [ parsable ] assert_equals: expected true but got false +FAIL content: image-set(url('example.png') 192dpi, linear-gradient(black, white) 1x) [ parsable ] assert_equals: expected true but got false +PASS background-image: image-set(url(example.png) 0x) [ unparsable ] +PASS background-image: image-set(url(example.png) -20x) [ unparsable ] +PASS background-image: image-set('example.jpeg' 92pid url(example.png) 1x) [ unparsable ] +PASS cursor: image-set(linear-gradient(black, white) 1x) [ unparsable ] +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/process-getter.https-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/process-getter.https-expected.txt new file mode 100644 index 0000000..c03ebd59 --- /dev/null +++ b/third_party/blink/web_tests/platform/win/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/process-getter.https-expected.txt
@@ -0,0 +1,5 @@ +This is a testharness.js-based test. +FAIL 'process' getter on prototype promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to construct 'AudioWorkletNode': AudioWorkletNode cannot be created: The node name 'process-getter-test-prototype' is not defined in AudioWorkletGlobalScope." +FAIL 'process' getter on instance promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to construct 'AudioWorkletNode': AudioWorkletNode cannot be created: The node name 'process-getter-test-instance' is not defined in AudioWorkletGlobalScope." +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processor-construction-port.https-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processor-construction-port.https-expected.txt new file mode 100644 index 0000000..a615b34c --- /dev/null +++ b/third_party/blink/web_tests/platform/win/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processor-construction-port.https-expected.txt
@@ -0,0 +1,7 @@ +This is a testharness.js-based test. +FAIL super() after new AudioWorkletProcessor() promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to construct 'AudioWorkletNode': AudioWorkletNode cannot be created: The node name 'super-after-new' is not defined in AudioWorkletGlobalScope." +FAIL new AudioWorkletProcessor() after super() promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to construct 'AudioWorkletNode': AudioWorkletNode cannot be created: The node name 'new-after-super' is not defined in AudioWorkletGlobalScope." +FAIL new AudioWorkletProcessor() after new AudioWorkletProcessor() promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to construct 'AudioWorkletNode': AudioWorkletNode cannot be created: The node name 'new-after-new' is not defined in AudioWorkletGlobalScope." +FAIL Singleton AudioWorkletProcessor promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to construct 'AudioWorkletNode': AudioWorkletNode cannot be created: The node name 'singleton' is not defined in AudioWorkletGlobalScope." +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/resources/gesture-util.js b/third_party/blink/web_tests/resources/gesture-util.js index 3d9db68..51a5382 100644 --- a/third_party/blink/web_tests/resources/gesture-util.js +++ b/third_party/blink/web_tests/resources/gesture-util.js
@@ -166,7 +166,7 @@ // https://crbug.com/893608 const SPEED_INSTANT = 400000; -function smoothScroll(pixels_to_scroll, start_x, start_y, gesture_source_type, direction, speed_in_pixels_s, precise_scrolling_deltas, scroll_by_page, cursor_visible) { +function smoothScroll(pixels_to_scroll, start_x, start_y, gesture_source_type, direction, speed_in_pixels_s, precise_scrolling_deltas, scroll_by_page, cursor_visible, scroll_by_percentage) { return new Promise((resolve, reject) => { if (window.chrome && chrome.gpuBenchmarking) { chrome.gpuBenchmarking.smoothScrollBy(pixels_to_scroll, @@ -178,7 +178,8 @@ speed_in_pixels_s, precise_scrolling_deltas, scroll_by_page, - cursor_visible); + cursor_visible, + scroll_by_percentage); } else { reject('This test requires chrome.gpuBenchmarking'); }
diff --git a/third_party/blink/web_tests/virtual/dark-mode-text/list-markers-expected.png b/third_party/blink/web_tests/virtual/dark-mode-text/list-markers-expected.png new file mode 100644 index 0000000..ab93ad0 --- /dev/null +++ b/third_party/blink/web_tests/virtual/dark-mode-text/list-markers-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/virtual/dark-mode-text/list-markers.html b/third_party/blink/web_tests/virtual/dark-mode-text/list-markers.html new file mode 100644 index 0000000..9f360112 --- /dev/null +++ b/third_party/blink/web_tests/virtual/dark-mode-text/list-markers.html
@@ -0,0 +1,18 @@ +<!DOCTYPE html> +<head> + <style> + body { + font-family: Ahem; + font-size: 40px; + margin: 10px; + padding: 10px; + } + </style> +</head> +<body> + <ul> + <li style="list-style-type: disc;">Disc + <li style="list-style-type: circle;">Circle + <li style="list-style-type: square;">Square + </ul> +</body>
diff --git a/third_party/byte_buddy/BUILD.gn b/third_party/byte_buddy/BUILD.gn index f82160ca..5b1b491 100644 --- a/third_party/byte_buddy/BUILD.gn +++ b/third_party/byte_buddy/BUILD.gn
@@ -31,9 +31,7 @@ android_java_prebuilt("byte_buddy_android_java") { testonly = true enable_bytecode_checks = false - deps = [ - ":dx_25_0_2_java", - ] + deps = [ ":dx_25_0_2_java" ] proguard_configs = [ "//third_party/byte_buddy/proguard.flags" ] jar_path = "lib/byte-buddy-android.jar" }
diff --git a/third_party/closure_compiler/externs/automation.js b/third_party/closure_compiler/externs/automation.js index b0c0dfb..de666a44 100644 --- a/third_party/closure_compiler/externs/automation.js +++ b/third_party/closure_compiler/externs/automation.js
@@ -35,6 +35,7 @@ END_OF_TEST: 'endOfTest', EXPANDED_CHANGED: 'expandedChanged', FOCUS: 'focus', + FOCUS_AFTER_MENU_CLOSE: 'focusAfterMenuClose', FOCUS_CONTEXT: 'focusContext', HIDE: 'hide', HIT_TEST_RESULT: 'hitTestResult',
diff --git a/third_party/crashpad/crashpad/build/test.gni b/third_party/crashpad/crashpad/build/test.gni index 24c343d..867b773 100644 --- a/third_party/crashpad/crashpad/build/test.gni +++ b/third_party/crashpad/crashpad/build/test.gni
@@ -24,12 +24,8 @@ _launch_image_bundle_target = target_name + "_launch_image" bundle_data(_launch_image_bundle_target) { forward_variables_from(invoker, [ "testonly" ]) - sources = [ - "//build/ios/Default.png", - ] - outputs = [ - "{{bundle_contents_dir}}/{{source_file_part}}", - ] + sources = [ "//build/ios/Default.png" ] + outputs = [ "{{bundle_contents_dir}}/{{source_file_part}}" ] } ios_app_bundle(target_name) {
diff --git a/third_party/crashpad/crashpad/test/BUILD.gn b/third_party/crashpad/crashpad/test/BUILD.gn index 9242c69..e71ae246 100644 --- a/third_party/crashpad/crashpad/test/BUILD.gn +++ b/third_party/crashpad/crashpad/test/BUILD.gn
@@ -241,9 +241,7 @@ "gtest_runner_ios.mm", ] configs += [ "..:crashpad_config" ] - deps = [ - "../third_party/gtest:gtest", - ] + deps = [ "../third_party/gtest:gtest" ] libs = [ "UIKit.framework" ] } }
diff --git a/third_party/crashpad/crashpad/tools/BUILD.gn b/third_party/crashpad/crashpad/tools/BUILD.gn index acd83b3..f9bda43 100644 --- a/third_party/crashpad/crashpad/tools/BUILD.gn +++ b/third_party/crashpad/crashpad/tools/BUILD.gn
@@ -89,7 +89,8 @@ } if (crashpad_is_win) { - cflags = [ "/wd4201" ] # nonstandard extension used : nameless struct/union + cflags = + [ "/wd4201" ] # nonstandard extension used : nameless struct/union } } }
diff --git a/third_party/decklink/BUILD.gn b/third_party/decklink/BUILD.gn index 4de6471..4c0fa42 100644 --- a/third_party/decklink/BUILD.gn +++ b/third_party/decklink/BUILD.gn
@@ -4,9 +4,7 @@ if (is_mac) { static_library("decklink") { - sources = [ - "mac/include/DeckLinkAPIDispatch.cpp", - ] + sources = [ "mac/include/DeckLinkAPIDispatch.cpp" ] libs = [ "CoreFoundation.framework", "IOKit.framework",
diff --git a/third_party/dom_distiller_js/BUILD.gn b/third_party/dom_distiller_js/BUILD.gn index 997b613f..1f6acf7 100644 --- a/third_party/dom_distiller_js/BUILD.gn +++ b/third_party/dom_distiller_js/BUILD.gn
@@ -5,12 +5,8 @@ import("//third_party/protobuf/proto_library.gni") group("proto") { - public_deps = [ - ":dom_distiller_proto", - ] - deps = [ - ":json_values_converter_tests", - ] + public_deps = [ ":dom_distiller_proto" ] + deps = [ ":json_values_converter_tests" ] } protoc_plugin_files = [ @@ -30,12 +26,8 @@ proto_library("dom_distiller_proto") { visibility = [ ":*" ] - sources = [ - "dist/proto/dom_distiller.proto", - ] - deps = [ - "//base", - ] + sources = [ "dist/proto/dom_distiller.proto" ] + deps = [ "//base" ] proto_out_dir = "third_party/dom_distiller_js" generator_plugin_script = json_converter_plugin_script @@ -48,12 +40,8 @@ # protoc_plugins by generating the json_converter.h file. proto_library("json_values_converter_test_proto") { visibility = [ ":*" ] - sources = [ - "test_sample.proto", - ] - deps = [ - "//base", - ] + sources = [ "test_sample.proto" ] + deps = [ "//base" ] proto_out_dir = "third_party/dom_distiller_js" generator_plugin_script = json_converter_plugin_script @@ -64,15 +52,9 @@ action("json_values_converter_tests") { _stamp = "$target_gen_dir/json_values_converter_tests.stamp" - deps = [ - ":json_values_converter_test_proto", - ] - inputs = [ - "test_sample_json_converter.h.golden", - ] - outputs = [ - _stamp, - ] + deps = [ ":json_values_converter_test_proto" ] + inputs = [ "test_sample_json_converter.h.golden" ] + outputs = [ _stamp ] script = "protoc_plugins/json_values_converter_tests.py" args = [
diff --git a/third_party/gestures/BUILD.gn b/third_party/gestures/BUILD.gn index 856c623..a9f7e6f 100644 --- a/third_party/gestures/BUILD.gn +++ b/third_party/gestures/BUILD.gn
@@ -61,9 +61,7 @@ "gestures/src/util.cc", ] - deps = [ - "//third_party/jsoncpp", - ] + deps = [ "//third_party/jsoncpp" ] defines = [ "GESTURES_INTERNAL=1" ]
diff --git a/third_party/google_benchmark/BUILD.gn b/third_party/google_benchmark/BUILD.gn index ffbedff..9e0bb14 100644 --- a/third_party/google_benchmark/BUILD.gn +++ b/third_party/google_benchmark/BUILD.gn
@@ -12,9 +12,7 @@ source_set("google_benchmark") { testonly = true - public = [ - "src/include/benchmark/benchmark.h", - ] + public = [ "src/include/benchmark/benchmark.h" ] sources = [ "src/src/arraysize.h", @@ -72,11 +70,7 @@ source_set("benchmark_main") { testonly = true - sources = [ - "src/src/benchmark_main.cc", - ] - deps = [ - ":google_benchmark", - ] + sources = [ "src/src/benchmark_main.cc" ] + deps = [ ":google_benchmark" ] } }
diff --git a/third_party/google_input_tools/closure.gni b/third_party/google_input_tools/closure.gni index e4279f51..815c6d7 100644 --- a/third_party/google_input_tools/closure.gni +++ b/third_party/google_input_tools/closure.gni
@@ -8,9 +8,7 @@ action(target_name) { script = "//third_party/google_input_tools/builder.py" sources = invoker.sources - outputs = [ - invoker.target, - ] + outputs = [ invoker.target ] response_file_contents = sources args = [ "--target",
diff --git a/third_party/gvr-android-keyboard/BUILD.gn b/third_party/gvr-android-keyboard/BUILD.gn index bf0afad..98f1aff4 100644 --- a/third_party/gvr-android-keyboard/BUILD.gn +++ b/third_party/gvr-android-keyboard/BUILD.gn
@@ -9,9 +9,7 @@ } android_aidl("aidl") { - sources = [ - "com/google/vr/keyboard/IGvrKeyboardLoader.aidl", - ] + sources = [ "com/google/vr/keyboard/IGvrKeyboardLoader.aidl" ] } config("kb_config") {
diff --git a/third_party/hamcrest/BUILD.gn b/third_party/hamcrest/BUILD.gn index 548ba22..73ab060 100644 --- a/third_party/hamcrest/BUILD.gn +++ b/third_party/hamcrest/BUILD.gn
@@ -24,7 +24,5 @@ testonly = true jar_path = "lib/hamcrest-library.jar" proguard_configs = [ "//third_party/hamcrest/proguard.flags" ] - deps = [ - ":hamcrest_core_java", - ] + deps = [ ":hamcrest_core_java" ] }
diff --git a/third_party/hunspell/BUILD.gn b/third_party/hunspell/BUILD.gn index 5be7315..beac57c 100644 --- a/third_party/hunspell/BUILD.gn +++ b/third_party/hunspell/BUILD.gn
@@ -138,9 +138,7 @@ } fuzzer_test("bdict_fuzzer") { - sources = [ - "fuzz/bdict_fuzzer.cc", - ] + sources = [ "fuzz/bdict_fuzzer.cc" ] deps = [ ":hunspell", "//base:base",
diff --git a/third_party/iaccessible2/BUILD.gn b/third_party/iaccessible2/BUILD.gn index 4fb6a482..e7cb7142 100644 --- a/third_party/iaccessible2/BUILD.gn +++ b/third_party/iaccessible2/BUILD.gn
@@ -7,7 +7,5 @@ import("//build/toolchain/win/midl.gni") midl("iaccessible2") { - sources = [ - "ia2_api_all.idl", - ] + sources = [ "ia2_api_all.idl" ] }
diff --git a/third_party/iccjpeg/BUILD.gn b/third_party/iccjpeg/BUILD.gn index b34ea9a..8446536c 100644 --- a/third_party/iccjpeg/BUILD.gn +++ b/third_party/iccjpeg/BUILD.gn
@@ -13,7 +13,5 @@ ] public_configs = [ ":iccjpeg_config" ] - deps = [ - "//third_party:jpeg", - ] + deps = [ "//third_party:jpeg" ] }
diff --git a/third_party/inspector_protocol/inspector_protocol.gni b/third_party/inspector_protocol/inspector_protocol.gni index 6e83e87..5cd0032 100644 --- a/third_party/inspector_protocol/inspector_protocol.gni +++ b/third_party/inspector_protocol/inspector_protocol.gni
@@ -58,7 +58,8 @@ args = [ "--jinja_dir", - rebase_path("//third_party/", root_build_dir), # jinja is in chromium's third_party + rebase_path("//third_party/", root_build_dir), # jinja is in chromium's + # third_party "--output_base", rebase_path(invoker.out_dir, root_build_dir), "--config",
diff --git a/third_party/libFuzzer/BUILD.gn b/third_party/libFuzzer/BUILD.gn index 6f1fc0d..47103a8d 100644 --- a/third_party/libFuzzer/BUILD.gn +++ b/third_party/libFuzzer/BUILD.gn
@@ -72,9 +72,7 @@ if (use_afl) { source_set("afl_driver") { - sources = [ - "src/afl/afl_driver.cpp", - ] + sources = [ "src/afl/afl_driver.cpp" ] configs -= fuzzing_engine_remove_configs configs += fuzzing_engine_add_configs
diff --git a/third_party/libaddressinput/chromium/address_input_strings.grd b/third_party/libaddressinput/chromium/address_input_strings.grd index 69a66cd..86d4a94f7 100644 --- a/third_party/libaddressinput/chromium/address_input_strings.grd +++ b/third_party/libaddressinput/chromium/address_input_strings.grd
@@ -49,6 +49,7 @@ <output filename="address_input_strings_sq.pak" type="data_package" lang="sq" /> <output filename="address_input_strings_ur.pak" type="data_package" lang="ur" /> <output filename="address_input_strings_uz.pak" type="data_package" lang="uz" /> + <output filename="address_input_strings_zh-HK.pak" type="data_package" lang="zh-HK" /> <output filename="address_input_strings_zu.pak" type="data_package" lang="zu" /> </if> <output filename="address_input_strings_am.pak" type="data_package" lang="am" />
diff --git a/third_party/liblouis/BUILD.gn b/third_party/liblouis/BUILD.gn index 0710ecc..f48f417 100644 --- a/third_party/liblouis/BUILD.gn +++ b/third_party/liblouis/BUILD.gn
@@ -16,9 +16,7 @@ liblouis_library("liblouis_test_data") { testonly = true dest_dir = chromevox_test_data_dir - deps = [ - ":liblouis_test_files", - ] + deps = [ ":liblouis_test_files" ] } copy("liblouis_test_files") { @@ -28,8 +26,6 @@ "//chrome/test/data/chromeos/liblouis_wasm/manifest.json", "//chrome/test/data/chromeos/liblouis_wasm/test.js", ] - outputs = [ - "${chromevox_test_data_dir}/{{source_file_part}}", - ] + outputs = [ "${chromevox_test_data_dir}/{{source_file_part}}" ] } }
diff --git a/third_party/liblouis/liblouis_library.gni b/third_party/liblouis/liblouis_library.gni index e9e442f..cead24f 100644 --- a/third_party/liblouis/liblouis_library.gni +++ b/third_party/liblouis/liblouis_library.gni
@@ -21,12 +21,8 @@ copy(tables_json_target_name) { forward_variables_from(invoker, [ "testonly" ]) visibility = [ ":$final_target_name" ] - sources = [ - "//third_party/liblouis/tables.json", - ] - outputs = [ - "$dest_dir/{{source_file_part}}", - ] + sources = [ "//third_party/liblouis/tables.json" ] + outputs = [ "$dest_dir/{{source_file_part}}" ] } copy(wasm_target_name) { @@ -38,9 +34,7 @@ "//third_party/liblouis/wasm/liblouis_wasm.wasm", "//third_party/liblouis/wasm/liblouis_wrapper.js", ] - outputs = [ - "$dest_dir/{{source_file_part}}", - ] + outputs = [ "$dest_dir/{{source_file_part}}" ] } group(target_name) {
diff --git a/third_party/libprotobuf-mutator/BUILD.gn b/third_party/libprotobuf-mutator/BUILD.gn index 021f988..25a7e9d 100644 --- a/third_party/libprotobuf-mutator/BUILD.gn +++ b/third_party/libprotobuf-mutator/BUILD.gn
@@ -31,9 +31,7 @@ # Allow users of LPM to use protobuf reflection and other features from # protobuf_full. - public_deps = [ - "//third_party/protobuf:protobuf_full", - ] + public_deps = [ "//third_party/protobuf:protobuf_full" ] # Let ClusterFuzz builders know to not build targets that depend on # libprotobuf-mutator for AFL or Chrome OS. @@ -54,12 +52,8 @@ # features (such as reflection). The plugin simply compiles a proto library # as normal but ensures that is compiled with the full protobuf runtime. executable("override_lite_runtime_plugin") { - sources = [ - "protoc_plugin/protoc_plugin.cc", - ] - deps = [ - "//third_party/protobuf:protoc_lib", - ] + sources = [ "protoc_plugin/protoc_plugin.cc" ] + deps = [ "//third_party/protobuf:protoc_lib" ] public_configs = [ "//third_party/protobuf:protobuf_config" ] } # To use the plugin in a proto_library you want to fuzz, change the build @@ -75,9 +69,7 @@ # contains files that are optimized for LITE_RUNTIME and which import other # files that are also optimized for LITE_RUNTIME. fuzzer_test("override_lite_runtime_plugin_test_fuzzer") { - sources = [ - "protoc_plugin/test_fuzzer.cc", - ] + sources = [ "protoc_plugin/test_fuzzer.cc" ] deps = [ ":libprotobuf-mutator", ":override_lite_runtime_plugin_test_fuzzer_proto", @@ -103,11 +95,7 @@ if (use_libfuzzer) { # Component that can provide protobuf_full to non-testonly targets static_library("protobuf_full") { - public_deps = [ - "//third_party/protobuf:protobuf_full", - ] - sources = [ - "dummy.cc", - ] + public_deps = [ "//third_party/protobuf:protobuf_full" ] + sources = [ "dummy.cc" ] } }
diff --git a/third_party/libprotobuf-mutator/fuzzable_proto_library.gni b/third_party/libprotobuf-mutator/fuzzable_proto_library.gni index 0c1c8602..27d6c1e 100644 --- a/third_party/libprotobuf-mutator/fuzzable_proto_library.gni +++ b/third_party/libprotobuf-mutator/fuzzable_proto_library.gni
@@ -51,9 +51,7 @@ if (defined(invoker.testonly)) { testonly = invoker.testonly } - sources = [ - "//third_party/libprotobuf-mutator/dummy.cc", - ] + sources = [ "//third_party/libprotobuf-mutator/dummy.cc" ] public_deps = [ ":proto_library_" + target_name, "//third_party/libprotobuf-mutator:protobuf_full",
diff --git a/third_party/libxml/BUILD.gn b/third_party/libxml/BUILD.gn index 28b7c9d..3fe4dfd2 100644 --- a/third_party/libxml/BUILD.gn +++ b/third_party/libxml/BUILD.gn
@@ -125,12 +125,8 @@ "chromium/libxml_utils.cc", "chromium/libxml_utils.h", ] - deps = [ - ":libxml", - ] - public_deps = [ - "//third_party/icu:icuuc", - ] + deps = [ ":libxml" ] + public_deps = [ "//third_party/icu:icuuc" ] public_configs = [ ":libxml_config" ] } @@ -300,12 +296,8 @@ } public_configs = [ ":libxml_config" ] - public_deps = [ - "//third_party/icu:icuuc", - ] - deps = [ - "//third_party/zlib", - ] + public_deps = [ "//third_party/icu:icuuc" ] + deps = [ "//third_party/zlib" ] if (is_mac || is_ios || is_android || is_fuchsia) { # http://www.xmlsoft.org/threads.html says that this is required when using
diff --git a/third_party/libxml/chromium/libxml_utils.h b/third_party/libxml/chromium/libxml_utils.h index ff969fa..8b2383f 100644 --- a/third_party/libxml/chromium/libxml_utils.h +++ b/third_party/libxml/chromium/libxml_utils.h
@@ -5,9 +5,9 @@ #ifndef THIRD_PARTY_LIBXML_CHROMIUM_LIBXML_UTILS_H_ #define THIRD_PARTY_LIBXML_CHROMIUM_LIBXML_UTILS_H_ -#include <string> +#include <libxml/xmlreader.h> -#include "third_party/libxml/src/include/libxml/xmlreader.h" +#include <string> // libxml uses a global error function pointer for reporting errors. // A ScopedXmlErrorFunc object lets you change the global error pointer
diff --git a/third_party/libxml/chromium/xml_reader.cc b/third_party/libxml/chromium/xml_reader.cc index 92464f4..899ccefb 100644 --- a/third_party/libxml/chromium/xml_reader.cc +++ b/third_party/libxml/chromium/xml_reader.cc
@@ -4,10 +4,11 @@ #include "third_party/libxml/chromium/xml_reader.h" +#include <libxml/xmlreader.h> + #include <vector> #include "third_party/libxml/chromium/libxml_utils.h" -#include "third_party/libxml/src/include/libxml/xmlreader.h" using internal::XmlStringToStdString;
diff --git a/third_party/libxml/chromium/xml_writer.cc b/third_party/libxml/chromium/xml_writer.cc index 51fce8e..7c58031 100644 --- a/third_party/libxml/chromium/xml_writer.cc +++ b/third_party/libxml/chromium/xml_writer.cc
@@ -4,8 +4,9 @@ #include "third_party/libxml/chromium/xml_writer.h" +#include <libxml/xmlwriter.h> + #include "third_party/libxml/chromium/libxml_utils.h" -#include "third_party/libxml/src/include/libxml/xmlwriter.h" XmlWriter::XmlWriter() : writer_(nullptr), buffer_(nullptr) {}
diff --git a/third_party/libxslt/BUILD.gn b/third_party/libxslt/BUILD.gn index d2260e98..4aa6502 100644 --- a/third_party/libxslt/BUILD.gn +++ b/third_party/libxslt/BUILD.gn
@@ -96,9 +96,7 @@ include_dirs = [ "mac" ] } - deps = [ - "//third_party/libxml", - ] + deps = [ "//third_party/libxml" ] visibility = [ "//third_party/blink/renderer/*" ] }
diff --git a/third_party/microsoft_webauthn/BUILD.gn b/third_party/microsoft_webauthn/BUILD.gn index 149e2ed..6a6b2885 100644 --- a/third_party/microsoft_webauthn/BUILD.gn +++ b/third_party/microsoft_webauthn/BUILD.gn
@@ -3,7 +3,5 @@ # found in the LICENSE file. source_set("microsoft_webauthn") { - sources = [ - "webauthn.h", - ] + sources = [ "webauthn.h" ] }
diff --git a/third_party/minizip/BUILD.gn b/third_party/minizip/BUILD.gn index ff5bc469..bcc9309a 100644 --- a/third_party/minizip/BUILD.gn +++ b/third_party/minizip/BUILD.gn
@@ -97,9 +97,7 @@ } fuzzer_test("minizip_compress_fuzzer") { - sources = [ - "minizip_compress_fuzzer.cc", - ] + sources = [ "minizip_compress_fuzzer.cc" ] deps = [ ":minizip", "//base", @@ -108,11 +106,7 @@ } fuzzer_test("minizip_uncompress_fuzzer") { - sources = [ - "minizip_uncompress_fuzzer.cc", - ] - deps = [ - ":minizip", - ] + sources = [ "minizip_uncompress_fuzzer.cc" ] + deps = [ ":minizip" ] seed_corpus = "minizip_uncompress_corpus" }
diff --git a/third_party/netty-tcnative/BUILD.gn b/third_party/netty-tcnative/BUILD.gn index 4b66047..eeb03ad 100644 --- a/third_party/netty-tcnative/BUILD.gn +++ b/third_party/netty-tcnative/BUILD.gn
@@ -43,7 +43,5 @@ "src/java/io/netty/internal/tcnative/SSLContext.java", "src/java/io/netty/internal/tcnative/SessionTicketKey.java", ] - deps = [ - "//base:base_java", - ] + deps = [ "//base:base_java" ] }
diff --git a/third_party/openvr/BUILD.gn b/third_party/openvr/BUILD.gn index 83ce4120..93bbdeb 100644 --- a/third_party/openvr/BUILD.gn +++ b/third_party/openvr/BUILD.gn
@@ -57,9 +57,7 @@ "src/src/vrcommon/vrpathregistry_public.h", ] - public_deps = [ - "//third_party/jsoncpp", - ] + public_deps = [ "//third_party/jsoncpp" ] if (target_cpu == "x64" && is_win) { defines += [ "WIN64" ]
diff --git a/third_party/opus/BUILD.gn b/third_party/opus/BUILD.gn index 5fdc925..53b5d78 100644 --- a/third_party/opus/BUILD.gn +++ b/third_party/opus/BUILD.gn
@@ -151,9 +151,7 @@ if (use_opus_arm_rtcd) { action("convert_rtcd_assembler") { script = "convert_rtcd_assembler.py" - outputs = [ - "$target_gen_dir/celt_pitch_xcorr_arm_gnu.S", - ] + outputs = [ "$target_gen_dir/celt_pitch_xcorr_arm_gnu.S" ] args = [ rebase_path("//third_party/opus/src/celt/arm/arm2gnu.pl", root_build_dir), rebase_path("//third_party/opus/src/celt/arm/celt_pitch_xcorr_arm.s", @@ -502,9 +500,7 @@ } executable("opus_compare") { - sources = [ - "src/src/opus_compare.c", - ] + sources = [ "src/src/opus_compare.c" ] configs -= [ "//build/config/compiler:chromium_code" ] configs += [ @@ -519,9 +515,7 @@ } executable("opus_demo") { - sources = [ - "src/src/opus_demo.c", - ] + sources = [ "src/src/opus_demo.c" ] configs -= [ "//build/config/compiler:chromium_code" ] configs += [ @@ -536,9 +530,7 @@ } test("test_opus_api") { - sources = [ - "src/tests/test_opus_api.c", - ] + sources = [ "src/tests/test_opus_api.c" ] configs -= [ "//build/config/compiler:chromium_code" ] configs += [ @@ -546,9 +538,7 @@ ":opus_test_config", ] - deps = [ - ":opus", - ] + deps = [ ":opus" ] } test("test_opus_encode") { @@ -563,9 +553,7 @@ ":opus_test_config", ] - deps = [ - ":opus", - ] + deps = [ ":opus" ] } # GN orders flags on a target before flags from configs. The default config @@ -582,9 +570,7 @@ } test("test_opus_decode") { - sources = [ - "src/tests/test_opus_decode.c", - ] + sources = [ "src/tests/test_opus_decode.c" ] configs -= [ "//build/config/compiler:chromium_code" ] configs += [ @@ -593,15 +579,11 @@ ":test_opus_decode_config", ] - deps = [ - ":opus", - ] + deps = [ ":opus" ] } test("test_opus_padding") { - sources = [ - "src/tests/test_opus_padding.c", - ] + sources = [ "src/tests/test_opus_padding.c" ] configs -= [ "//build/config/compiler:chromium_code" ] configs += [ @@ -609,9 +591,7 @@ ":opus_test_config", ] - deps = [ - ":opus", - ] + deps = [ ":opus" ] } # Compilation fails on windows due to wstring/string mistmatch. @@ -619,13 +599,9 @@ # It is ok to run it on linux though, for experimentation purpose. if (!is_win) { test("opus_tests") { - sources = [ - "tests/opus_benchmark.cc", - ] + sources = [ "tests/opus_benchmark.cc" ] - data = [ - "tests/resources/speech_mono_32_48kHz.pcm", - ] + data = [ "tests/resources/speech_mono_32_48kHz.pcm" ] deps = [ ":opus",
diff --git a/third_party/rnnoise/BUILD.gn b/third_party/rnnoise/BUILD.gn index 5aa9605..48830ae 100644 --- a/third_party/rnnoise/BUILD.gn +++ b/third_party/rnnoise/BUILD.gn
@@ -5,9 +5,7 @@ import("//testing/test.gni") group("rnnoise") { - deps = [ - ":rnn_vad", - ] + deps = [ ":rnn_vad" ] } source_set("rnn_vad") {
diff --git a/third_party/sudden_motion_sensor/BUILD.gn b/third_party/sudden_motion_sensor/BUILD.gn index 26bdf4284..5a54f16 100644 --- a/third_party/sudden_motion_sensor/BUILD.gn +++ b/third_party/sudden_motion_sensor/BUILD.gn
@@ -8,7 +8,5 @@ "sudden_motion_sensor_mac.h", ] - deps = [ - "//base", - ] + deps = [ "//base" ] }
diff --git a/third_party/usrsctp/BUILD.gn b/third_party/usrsctp/BUILD.gn index 94f2678..014a076 100644 --- a/third_party/usrsctp/BUILD.gn +++ b/third_party/usrsctp/BUILD.gn
@@ -140,7 +140,5 @@ if (is_fuchsia) { defines += [ "__Userspace_os_Fuchsia" ] } - deps = [ - "//third_party/boringssl", - ] + deps = [ "//third_party/boringssl" ] }
diff --git a/third_party/wayland-protocols/BUILD.gn b/third_party/wayland-protocols/BUILD.gn index 085b08c0..03c7c98 100644 --- a/third_party/wayland-protocols/BUILD.gn +++ b/third_party/wayland-protocols/BUILD.gn
@@ -5,9 +5,7 @@ import("//third_party/wayland/wayland_protocol.gni") wayland_protocol("gtk_primary_selection_protocol") { - sources = [ - "unstable/gtk-primary-selection/gtk-primary-selection.xml", - ] + sources = [ "unstable/gtk-primary-selection/gtk-primary-selection.xml" ] } wayland_protocol("xdg_shell_protocol") { @@ -18,139 +16,94 @@ } wayland_protocol("linux_dmabuf_protocol") { - sources = [ - "src/unstable/linux-dmabuf/linux-dmabuf-unstable-v1.xml", - ] + sources = [ "src/unstable/linux-dmabuf/linux-dmabuf-unstable-v1.xml" ] } wayland_protocol("viewporter_protocol") { - sources = [ - "src/stable/viewporter/viewporter.xml", - ] + sources = [ "src/stable/viewporter/viewporter.xml" ] } wayland_protocol("presentation_time_protocol") { - sources = [ - "src/stable/presentation-time/presentation-time.xml", - ] + sources = [ "src/stable/presentation-time/presentation-time.xml" ] } wayland_protocol("vsync_feedback_protocol") { - sources = [ - "unstable/vsync-feedback/vsync-feedback-unstable-v1.xml", - ] + sources = [ "unstable/vsync-feedback/vsync-feedback-unstable-v1.xml" ] } wayland_protocol("secure_output_protocol") { - sources = [ - "unstable/secure-output/secure-output-unstable-v1.xml", - ] + sources = [ "unstable/secure-output/secure-output-unstable-v1.xml" ] } wayland_protocol("alpha_compositing_protocol") { - sources = [ - "unstable/alpha-compositing/alpha-compositing-unstable-v1.xml", - ] + sources = [ "unstable/alpha-compositing/alpha-compositing-unstable-v1.xml" ] } wayland_protocol("remote_shell_protocol") { - sources = [ - "unstable/remote-shell/remote-shell-unstable-v1.xml", - ] + sources = [ "unstable/remote-shell/remote-shell-unstable-v1.xml" ] } wayland_protocol("gaming_input_protocol") { - sources = [ - "unstable/gaming-input/gaming-input-unstable-v2.xml", - ] + sources = [ "unstable/gaming-input/gaming-input-unstable-v2.xml" ] } wayland_protocol("stylus_protocol") { - sources = [ - "unstable/stylus/stylus-unstable-v2.xml", - ] + sources = [ "unstable/stylus/stylus-unstable-v2.xml" ] } wayland_protocol("pointer_gestures_protocol") { - sources = [ - "src/unstable/pointer-gestures/pointer-gestures-unstable-v1.xml", - ] + sources = [ "src/unstable/pointer-gestures/pointer-gestures-unstable-v1.xml" ] } wayland_protocol("pointer_constraints_protocol") { - sources = [ - "src/unstable/pointer-constraints/pointer-constraints-unstable-v1.xml", - ] + sources = + [ "src/unstable/pointer-constraints/pointer-constraints-unstable-v1.xml" ] } wayland_protocol("relative_pointer_protocol") { - sources = [ - "src/unstable/relative-pointer/relative-pointer-unstable-v1.xml", - ] + sources = [ "src/unstable/relative-pointer/relative-pointer-unstable-v1.xml" ] } wayland_protocol("keyboard_configuration_protocol") { - sources = [ - "unstable/keyboard/keyboard-configuration-unstable-v1.xml", - ] + sources = [ "unstable/keyboard/keyboard-configuration-unstable-v1.xml" ] } wayland_protocol("stylus_tools_protocol") { - sources = [ - "unstable/stylus-tools/stylus-tools-unstable-v1.xml", - ] + sources = [ "unstable/stylus-tools/stylus-tools-unstable-v1.xml" ] } wayland_protocol("keyboard_extension_protocol") { - sources = [ - "unstable/keyboard/keyboard-extension-unstable-v1.xml", - ] + sources = [ "unstable/keyboard/keyboard-extension-unstable-v1.xml" ] } wayland_protocol("input_timestamps_protocol") { - sources = [ - "src/unstable/input-timestamps/input-timestamps-unstable-v1.xml", - ] + sources = [ "src/unstable/input-timestamps/input-timestamps-unstable-v1.xml" ] } wayland_protocol("cursor_shapes_protocol") { - sources = [ - "unstable/cursor-shapes/cursor-shapes-unstable-v1.xml", - ] + sources = [ "unstable/cursor-shapes/cursor-shapes-unstable-v1.xml" ] } wayland_protocol("text_input_protocol") { - sources = [ - "src/unstable/text-input/text-input-unstable-v1.xml", - ] + sources = [ "src/unstable/text-input/text-input-unstable-v1.xml" ] } wayland_protocol("notification_shell_protocol") { - sources = [ - "unstable/notification-shell/notification-shell-unstable-v1.xml", - ] + sources = [ "unstable/notification-shell/notification-shell-unstable-v1.xml" ] } wayland_protocol("fullscreen_shell_protocol") { - sources = [ - "src/unstable/fullscreen-shell/fullscreen-shell-unstable-v1.xml", - ] + sources = [ "src/unstable/fullscreen-shell/fullscreen-shell-unstable-v1.xml" ] } wayland_protocol("linux_explicit_synchronization_protocol") { - sources = [ - "src/unstable/linux-explicit-synchronization/linux-explicit-synchronization-unstable-v1.xml", - ] + sources = [ "src/unstable/linux-explicit-synchronization/linux-explicit-synchronization-unstable-v1.xml" ] } wayland_protocol("wayland_drm_protocol") { - sources = [ - "mesa/wayland-drm/wayland-drm.xml", - ] + sources = [ "mesa/wayland-drm/wayland-drm.xml" ] } wayland_protocol("color_space_protocol") { - sources = [ - "unstable/color-space/color-space-unstable-v1.xml", - ] + sources = [ "unstable/color-space/color-space-unstable-v1.xml" ] }
diff --git a/third_party/zlib/BUILD.gn b/third_party/zlib/BUILD.gn index 9d0f021f..2414c88 100644 --- a/third_party/zlib/BUILD.gn +++ b/third_party/zlib/BUILD.gn
@@ -353,9 +353,7 @@ defines = [ "USE_FILE32API" ] } - deps = [ - ":zlib", - ] + deps = [ ":zlib" ] configs -= [ "//build/config/compiler:chromium_code" ] configs += [ @@ -371,9 +369,7 @@ executable("zlib_bench") { include_dirs = [ "." ] - sources = [ - "contrib/bench/zlib_bench.cc", - ] + sources = [ "contrib/bench/zlib_bench.cc" ] if (!is_debug) { configs -= [ "//build/config/compiler:default_optimization" ] @@ -383,7 +379,5 @@ configs -= [ "//build/config/compiler:chromium_code" ] configs += [ "//build/config/compiler:no_chromium_code" ] - deps = [ - ":zlib", - ] + deps = [ ":zlib" ] }
diff --git a/tools/grit/grit_rule.gni b/tools/grit/grit_rule.gni index 530ee17..36bdade 100644 --- a/tools/grit/grit_rule.gni +++ b/tools/grit/grit_rule.gni
@@ -93,7 +93,7 @@ import("//build/config/features.gni") import("//build/config/sanitizers/sanitizers.gni") import("//build/config/ui.gni") -import("//build/toolchain/gcc_toolchain.gni") # For enable_resource_whitelist_generation +import("//build/toolchain/gcc_toolchain.gni") if (enable_resource_whitelist_generation) { assert(target_os == "android" || target_os == "win", "unsupported platform for resource whitelist generation")
diff --git a/tools/imagediff/BUILD.gn b/tools/imagediff/BUILD.gn index ae60516..90778e87 100644 --- a/tools/imagediff/BUILD.gn +++ b/tools/imagediff/BUILD.gn
@@ -34,7 +34,8 @@ # If the current toolchain is the test host toolchain, build the tool. if (current_toolchain == imagediff_toolchain) { executable("imagediff") { - output_name = "image_diff" # Different than dir name for historical reasons. + output_name = "image_diff" # Different than dir name for historical + # reasons. sources = [ "image_diff.cc", "image_diff_png.cc",
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 1bc422af..8a48ab87 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -53612,6 +53612,7 @@ </enum> <enum name="QuickAnswersResultType"> + <int value="0" label="kNoResult"/> <int value="5493" label="kDefinitionResult"/> <int value="6613" label="kTranslationResult"/> <int value="13668" label="kUnitConversionResult"/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index b3446f0..32a85ea 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -176,7 +176,7 @@ </histogram> <histogram name="Accessibility.CrosCursorHighlight" enum="BooleanEnabled" - expires_after="2020-05-03"> + expires_after="2020-07-26"> <owner>dmazzoni@chromium.org</owner> <summary> Whether the Chrome OS cursor highlighting is on (logged once 45 secs after @@ -202,7 +202,7 @@ </histogram> <histogram name="Accessibility.CrosDockedMagnifier" enum="BooleanEnabled" - expires_after="2020-04-15"> + expires_after="2020-07-26"> <owner>dmazzoni@chromium.org</owner> <owner>katie@chromium.org</owner> <summary> @@ -221,7 +221,7 @@ </histogram> <histogram name="Accessibility.CrosHighContrast" enum="BooleanEnabled" - expires_after="2020-04-19"> + expires_after="2020-07-26"> <owner>dmazzoni@chromium.org</owner> <owner>kenjibaheux@google.com</owner> <summary> @@ -368,7 +368,7 @@ </histogram> <histogram name="Accessibility.CrosVirtualKeyboard" enum="BooleanEnabled" - expires_after="2020-05-03"> + expires_after="2020-07-26"> <owner>dmazzoni@chromium.org</owner> <owner>kenjibaheux@google.com</owner> <summary> @@ -2387,7 +2387,7 @@ </histogram> <histogram name="Android.DownloadManager.InitialCount" units="units" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>dtrainor@chromium.org</owner> <owner>clank-downloads@google.com</owner> <summary> @@ -3252,7 +3252,7 @@ </histogram> <histogram name="Android.NativeBackgroundTask.TaskFinished.FullBrowser" - enum="BackgroundTaskId" expires_after="2020-05-14"> + enum="BackgroundTaskId" expires_after="2020-07-26"> <owner>mheikal@chromium.org</owner> <owner>hanxi@chromium.org</owner> <owner>hnakashima@chromium.org</owner> @@ -3264,7 +3264,7 @@ </histogram> <histogram name="Android.NativeBackgroundTask.TaskFinished.ReducedMode" - enum="BackgroundTaskId" expires_after="2020-05-14"> + enum="BackgroundTaskId" expires_after="2020-07-26"> <owner>mheikal@chromium.org</owner> <owner>hanxi@chromium.org</owner> <owner>hnakashima@chromium.org</owner> @@ -3290,7 +3290,7 @@ </histogram> <histogram name="Android.NativeBackgroundTask.TaskStarted.FullBrowser" - enum="BackgroundTaskId" expires_after="2020-05-14"> + enum="BackgroundTaskId" expires_after="2020-07-26"> <owner>mheikal@chromium.org</owner> <owner>hanxi@chromium.org</owner> <owner>hnakashima@chromium.org</owner> @@ -3301,7 +3301,7 @@ </histogram> <histogram name="Android.NativeBackgroundTask.TaskStarted.ReducedMode" - enum="BackgroundTaskId" expires_after="2020-05-14"> + enum="BackgroundTaskId" expires_after="2020-07-26"> <owner>mheikal@chromium.org</owner> <owner>hanxi@chromium.org</owner> <owner>hnakashima@chromium.org</owner> @@ -3347,7 +3347,7 @@ </histogram> <histogram name="Android.NTP.Impression" enum="NTPImpressionType" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>finkm@chromium.org</owner> <summary> Counts impressions of the NTP on Android. It also counts potential @@ -3384,7 +3384,7 @@ </histogram> <histogram name="Android.OmniboxFocusReason" enum="OmniboxFocusReason" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>mdjones@chromium.org</owner> <owner>twellington@chromium.org</owner> <owner>amaralp@chromium.org</owner> @@ -5650,7 +5650,7 @@ </histogram> <histogram name="Apps.AppList.ZeroStateSearchResultRemovalDecision" - enum="AppListZeroStateResultRemovalConfirmation" expires_after="2020-05-03"> + enum="AppListZeroStateResultRemovalConfirmation" expires_after="2020-07-26"> <owner>jennyz@chromium.org</owner> <owner>newcomer@chromium.org</owner> <summary> @@ -5662,7 +5662,7 @@ <histogram name="Apps.AppList.ZeroStateSearchResultUserActionType" enum="AppListZeroStateSearchResultUserActionType" - expires_after="2020-05-03"> + expires_after="2020-07-26"> <owner>jennyz@chromium.org</owner> <owner>newcomer@chromium.org</owner> <summary> @@ -5687,7 +5687,7 @@ </histogram> <histogram name="Apps.AppList.ZeroStateSuggestionOpenType" - enum="AppListSearchResult" expires_after="2020-05-24"> + enum="AppListSearchResult" expires_after="2020-07-26"> <owner>jennyz@chromium.org</owner> <owner>newcomer@chromium.org</owner> <summary> @@ -5812,7 +5812,7 @@ </histogram> <histogram name="Apps.AppListFolder.ShowHide.AnimationSmoothness" units="%" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>wutao@chromium.org</owner> <summary> Relative smoothness of animations of showing and hiding app list folder. @@ -5955,7 +5955,7 @@ </histogram> <histogram name="Apps.AppListPlayStoreSearchAppsDisplayed" units="apss" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>jennyz@chromium.org</owner> <owner>newcomer@chromium.org</owner> <summary> @@ -6005,7 +6005,7 @@ </histogram> <histogram name="Apps.AppListResultLaunchIndexAndQueryLength" units="units" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>tby@chromium.org</owner> <owner>jiameng@chromium.org</owner> <summary> @@ -6016,7 +6016,7 @@ </histogram> <histogram name="Apps.AppListSearchAbandonQueryLength" units="characters" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>jennyz@chromium.org</owner> <owner>jiameng@chromium.org</owner> <summary> @@ -6062,7 +6062,7 @@ </histogram> <histogram name="Apps.AppListSearchQueryLength" units="characters" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <!-- Name completed by histogram_suffixes name="TabletOrClamshellMode" --> <owner>calamity@chromium.org</owner> @@ -6180,7 +6180,7 @@ </histogram> <histogram name="Apps.AppListSuggestedChipLaunched" units="indices" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>newcomer@chromium.org</owner> <owner>charleszhao@chromium.org</owner> <summary> @@ -6305,7 +6305,7 @@ </histogram> <histogram base="true" name="Apps.DefaultAppLaunch" enum="DefaultAppName" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <!-- Name completed by histogram_suffixes name="DefaultAppLaunchSource" --> <owner>dominickn@chromium.org</owner> @@ -6731,7 +6731,7 @@ </histogram> <histogram name="Apps.StateTransition.AnimationSmoothness" units="%" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <!-- Name completed by histogram_suffixes name="TabletOrClamshellMode" and name="EnterOrExitOverview" and @@ -7302,7 +7302,7 @@ </summary> </histogram> -<histogram name="Arc.OOMKills.Count" units="kills" expires_after="2020-05-24"> +<histogram name="Arc.OOMKills.Count" units="kills" expires_after="2020-07-26"> <owner>elijahtaylor@google.com</owner> <owner>shihuis@google.com</owner> <summary>Cumulative count of OOM kills in one user session.</summary> @@ -7362,7 +7362,7 @@ </histogram> <histogram name="Arc.OptInSilentAuthCode.SecondaryAccount" - enum="ArcOptInSilentAuthCode" expires_after="2020-05-24"> + enum="ArcOptInSilentAuthCode" expires_after="2020-07-26"> <owner>khmel@google.com</owner> <summary> Arc Silent Auth Code status. This status is set during the minting of an @@ -7413,7 +7413,7 @@ </histogram> <histogram name="Arc.PlayStoreSearch.QueryTime" units="ms" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>hejq@chromium.org</owner> <summary> Time between sending an Play Store app discovery request and the storing @@ -8288,7 +8288,7 @@ </histogram> <histogram name="Ash.HotseatTransition.Drag.PresentationTime" units="ms" - expires_after="2020-05-21"> + expires_after="2020-07-26"> <owner>anasalazar@chromium.org</owner> <owner>newcomer@chromium.org</owner> <summary> @@ -8299,7 +8299,7 @@ </histogram> <histogram name="Ash.HotseatTransition.Drag.PresentationTime.MaxLatency" - units="ms" expires_after="2020-05-21"> + units="ms" expires_after="2020-07-26"> <owner>anasalazar@chromium.org</owner> <owner>newcomer@chromium.org</owner> <summary> @@ -8455,7 +8455,7 @@ </histogram> <histogram name="Ash.NumberOfVisibleWindowsInPrimaryDisplay" units="Windows" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>jamescook@chromium.org</owner> <summary> An upper bound on the number of windows visible to the user on the primary @@ -8622,7 +8622,7 @@ </histogram> <histogram name="Ash.Rotation.AnimationSmoothness" units="%" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>wutao@chromium.org</owner> <summary> Relative smoothness of animations when rotating screen. 100% represents @@ -9127,13 +9127,13 @@ </histogram> <histogram name="Ash.TouchView.TouchViewActivePercentage" units="%" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>girard@chromium.org</owner> <summary>The proportion of time spent in TouchView during a session.</summary> </histogram> <histogram name="Ash.TouchView.TouchViewActiveTotal" units="minutes" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>girard@chromium.org</owner> <summary>The total time that TouchView is active during a session.</summary> </histogram> @@ -9279,7 +9279,7 @@ </histogram> <histogram name="Ash.Window.AnimationSmoothness.CrossFade" units="%" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>wutao@chromium.org</owner> <summary> Relative smoothness of cross fade animation when setting window bounds. 100% @@ -10096,7 +10096,7 @@ </histogram> <histogram name="Assistant.QuerySource" enum="AssistantQuerySource" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>xiaohuic@chromium.org</owner> <owner>meilinw@chromium.org</owner> <summary> @@ -14222,7 +14222,7 @@ </histogram> <histogram name="AutoScreenBrightness.AlsReaderStatus" - enum="AutoScreenBrightnessAlsReaderStatus" expires_after="2020-05-03"> + enum="AutoScreenBrightnessAlsReaderStatus" expires_after="2020-07-26"> <owner>tby@chromium.org</owner> <summary> Whether the ALS is enabled or the error otherwise. Chrome OS only. @@ -14263,7 +14263,7 @@ </histogram> <histogram name="AutoScreenBrightness.DailyUserAdjustment.Atlas" units="count" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>jiameng@chromium.org</owner> <summary> Number of times that a user has made brightness adjustments on an Atlas @@ -14292,7 +14292,7 @@ </histogram> <histogram name="AutoScreenBrightness.DailyUserAdjustment.NoAls" units="count" - expires_after="2020-05-03"> + expires_after="2020-07-26"> <owner>jiameng@chromium.org</owner> <summary> Number of times that a user has made brightness adjustments on a device @@ -16883,7 +16883,7 @@ </histogram> <histogram name="Blink.HandleInputEvents.UpdateTime" units="microseconds" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimeAggregatedSuffixes" --> <owner>paint-dev@chromium.org</owner> @@ -18106,7 +18106,7 @@ </histogram> <histogram name="Blink.UseCounter.Extensions.Features" enum="FeatureObserver" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>chasej@chromium.org</owner> <owner>feature-control@chromium.org</owner> <summary> @@ -19956,7 +19956,7 @@ </histogram> <histogram name="Bookmarks.Count.OnProfileLoad" units="bookmarks" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>supertri@chromium.org</owner> <owner>isherman@chromium.org</owner> <owner>aidanday@google.com</owner> @@ -19970,7 +19970,7 @@ </histogram> <histogram name="Bookmarks.Count.OnProfileLoad.DuplicateUrl" units="bookmarks" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>mamir@chromium.org</owner> <owner>mastiz@chromium.org</owner> <summary> @@ -22017,7 +22017,7 @@ </histogram> <histogram name="ChildProcess.Launched.UtilityProcessHash" - enum="UtilityProcessNameHash" expires_after="2020-05-24"> + enum="UtilityProcessNameHash" expires_after="2020-07-26"> <owner>wfh@chromium.org</owner> <summary> Count of child utility process launches, bucketed by the hash of their @@ -23709,13 +23709,13 @@ </histogram> <histogram name="ComponentUpdater.UpdateCompleteError" - enum="UpdateClientErrors" expires_after="2020-05-24"> + enum="UpdateClientErrors" expires_after="2020-07-26"> <owner>sorin@chromium.org</owner> <summary>The result of an install or an update check.</summary> </histogram> <histogram name="ComponentUpdater.UpdateCompleteResult" enum="BooleanError" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>sorin@chromium.org</owner> <summary>The result of an install or an update check.</summary> </histogram> @@ -30344,7 +30344,7 @@ </histogram> <histogram name="Cryptohome.Errors" enum="CryptohomeError" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>apronin@chromium.org</owner> <owner>cros-hwsec+uma@chromium.org</owner> <summary>Cryptohome errors.</summary> @@ -30658,7 +30658,7 @@ </summary> </histogram> -<histogram name="CryptohomeClient" units="ms" expires_after="2020-05-24"> +<histogram name="CryptohomeClient" units="ms" expires_after="2020-07-26"> <owner>zuan@chromium.org</owner> <owner>cros-hwsec+uma@chromium.org</owner> <summary> @@ -30681,7 +30681,7 @@ </histogram> <histogram name="CustomTabs.ClientAppId" enum="ClientAppId" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>yusufo@chromium.org</owner> <summary> Android: AppId declared by the launching application in EXTRA_APPLICATION_ID @@ -38827,7 +38827,7 @@ </histogram> <histogram base="true" name="Download.Counts" enum="DownloadCountType" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <!-- Name completed by histogram_suffixes name="DownloadSource" --> <owner>xingliu@chromium.org</owner> @@ -39435,7 +39435,7 @@ </histogram> <histogram name="Download.IOSDownloadFileResult" enum="DownloadFileResult" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>eugenebut@chromium.org</owner> <summary>Result when a user attempts to download a file on iOS.</summary> </histogram> @@ -42402,7 +42402,7 @@ </histogram> <histogram name="Enterprise.Policies" enum="EnterprisePolicies" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>mnissler@chromium.org</owner> <summary> A set of enterprise policy rules that are in use. This is recorded every 24 @@ -43211,7 +43211,7 @@ </histogram> <histogram name="Event.AggregatedLatency.Renderer2" units="microseconds" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>tdresser@chromium.org</owner> <summary> Time between initiation of any input event and the renderer receiving and @@ -44479,7 +44479,7 @@ </histogram> <histogram name="Event.Latency.EndToEnd.KeyPress" units="microseconds" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>tdresser@chromium.org</owner> <owner>input-dev@chromium.org</owner> <summary> @@ -44538,7 +44538,7 @@ </histogram> <histogram name="Event.Latency.HitTest" units="microseconds" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>paint-dev@chromium.org</owner> <owner>schenney@chromium.org</owner> <summary> @@ -44557,7 +44557,7 @@ </histogram> <histogram name="Event.Latency.HitTestRecursive" units="microseconds" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>paint-dev@chromium.org</owner> <owner>schenney@chromium.org</owner> <summary> @@ -44938,7 +44938,7 @@ </histogram> <histogram name="Event.Latency.ScrollBegin.TimeToScrollUpdateSwapBegin2" - units="microseconds" expires_after="2020-05-24"> + units="microseconds" expires_after="2020-07-26"> <owner>nzolghadr@chromium.org</owner> <summary> Time between initial creation of a wheel/touch event and start of the frame @@ -45158,7 +45158,7 @@ <histogram name="Event.Latency.ScrollBegin.Wheel.BrowserNotifiedToBeforeGpuSwap2" - units="microseconds" expires_after="2020-05-24"> + units="microseconds" expires_after="2020-07-26"> <owner>tdresser@chromium.org</owner> <summary> Time between the browser receives the notification of the first ScrollUpdate @@ -45602,7 +45602,7 @@ </histogram> <histogram name="Event.Latency.ScrollUpdate.TimeToScrollUpdateSwapBegin2" - units="microseconds" expires_after="2020-05-24"> + units="microseconds" expires_after="2020-07-26"> <owner>nzolghadr@chromium.org</owner> <summary> Time between initial creation of a wheel/touch event and start of the frame @@ -45626,7 +45626,7 @@ </histogram> <histogram name="Event.Latency.ScrollUpdate.Touch.AverageLag" units="pixels" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>eirage@chromium.org</owner> <owner>nzolghadr@chromium.org</owner> <summary> @@ -46267,7 +46267,7 @@ </histogram> <histogram name="Event.PassiveListeners" enum="EventResultType" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>dtapuska@chromium.org</owner> <summary> The result of handling of MouseWheel, TouchStart, TouchMove, TouchEnd events @@ -55380,7 +55380,7 @@ </histogram> <histogram name="GCM.LoadStatus" enum="GCMLoadStatus" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>jianli@chromium.org</owner> <summary>Status code of loading from the persistent GCM store.</summary> </histogram> @@ -57706,7 +57706,7 @@ </histogram> <histogram name="GPU.GPUProcessTerminationStatus2" enum="GpuTerminationStatus" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>vmiura@chromium.org</owner> <summary> Counts for each time the GPU Process Host detects the process dies. @@ -64847,7 +64847,7 @@ </histogram> <histogram name="Launch.FlagsAtStartup" enum="LoginCustomFlags" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>asvitkine@chromium.org</owner> <summary> Logs which Chrome flags from about:flags were active on start up. Note that @@ -64867,7 +64867,7 @@ </histogram> <histogram name="Launch.HomeScreenSource" enum="LaunchFromHomeScreenSource" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>dominickn@chromium.org</owner> <owner>hartmanng@chromium.org</owner> <owner>peconn@chromium.org</owner> @@ -78346,7 +78346,7 @@ <histogram name="MultiDevice.DeviceSyncService.SetSoftwareFeatureState.Enable.FailedFeature" - enum="MultiDevice_DeviceSyncService_Features" expires_after="2020-04-19"> + enum="MultiDevice_DeviceSyncService_Features" expires_after="2020-07-26"> <owner>vecore@google.com</owner> <owner>better-together-dev@google.com</owner> <summary>Breaks down which features failed when attempted to enable.</summary> @@ -78516,7 +78516,7 @@ </histogram> <histogram name="MultiDevice.Setup.HostStatus" - enum="MultiDevice_Setup_HostStatus" expires_after="2020-05-24"> + enum="MultiDevice_Setup_HostStatus" expires_after="2020-07-26"> <owner>vecore@google.com</owner> <owner>better-together-dev@google.com</owner> <summary> @@ -81187,7 +81187,7 @@ </histogram> <histogram name="NCN.NetworkOperatorMCCMNC" units="units" - expires_after="2020-04-05"> + expires_after="2020-07-26"> <owner>tbansal@chromium.org</owner> <owner>bengr@google.com</owner> <summary> @@ -99379,7 +99379,7 @@ </histogram> <histogram name="NQE.MainFrame.EffectiveConnectionType" - enum="NQEEffectiveConnectionType" expires_after="2020-05-24"> + enum="NQEEffectiveConnectionType" expires_after="2020-07-26"> <owner>tbansal@chromium.org</owner> <owner>bengr@chromium.org</owner> <summary> @@ -106772,7 +106772,7 @@ <histogram name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired" - units="ms" expires_after="2020-05-24"> + units="ms" expires_after="2020-07-26"> <owner>bmcquade@chromium.org</owner> <owner>csharrison@chromium.org</owner> <summary> @@ -106782,7 +106782,7 @@ </histogram> <histogram name="PageLoad.DocumentTiming.NavigationToFirstLayout" units="ms" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <obsolete> Deprecated 12/2019. Use NavigationToFirstContentfulPaint instead. </obsolete> @@ -106795,7 +106795,7 @@ </histogram> <histogram name="PageLoad.DocumentTiming.NavigationToLoadEventFired" units="ms" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>bmcquade@chromium.org</owner> <owner>csharrison@chromium.org</owner> <summary> @@ -106867,7 +106867,7 @@ </histogram> <histogram base="true" name="PageLoad.Experimental.AbortTiming.Background" - units="ms" expires_after="2020-05-24"> + units="ms" expires_after="2020-07-26"> <owner>bmcquade@chromium.org</owner> <owner>csharrison@chromium.org</owner> <summary> @@ -106891,7 +106891,7 @@ </histogram> <histogram base="true" name="PageLoad.Experimental.AbortTiming.Close" - units="ms" expires_after="2020-05-24"> + units="ms" expires_after="2020-07-26"> <owner>csharrison@chromium.org</owner> <summary> This metric is still experimental and not yet ready to be relied upon. @@ -106902,7 +106902,7 @@ <histogram base="true" name="PageLoad.Experimental.AbortTiming.ForwardBackNavigation" units="ms" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>csharrison@chromium.org</owner> <summary> This metric is still experimental and not yet ready to be relied upon. @@ -106912,7 +106912,7 @@ </histogram> <histogram base="true" name="PageLoad.Experimental.AbortTiming.NewNavigation" - units="ms" expires_after="2020-05-24"> + units="ms" expires_after="2020-07-26"> <owner>csharrison@chromium.org</owner> <summary> This metric is still experimental and not yet ready to be relied upon. @@ -106932,7 +106932,7 @@ </histogram> <histogram base="true" name="PageLoad.Experimental.AbortTiming.Reload" - units="ms" expires_after="2020-05-24"> + units="ms" expires_after="2020-07-26"> <owner>csharrison@chromium.org</owner> <summary> This metric is still experimental and not yet ready to be relied upon. @@ -106942,7 +106942,7 @@ </histogram> <histogram base="true" name="PageLoad.Experimental.AbortTiming.Stop" units="ms" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>csharrison@chromium.org</owner> <summary> This metric is still experimental and not yet ready to be relied upon. @@ -106977,7 +106977,7 @@ </histogram> <histogram name="PageLoad.Experimental.Bytes.Network" units="KB" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>jkarlin@chromium.org</owner> <summary> The number of prefiltered (e.g., compressed) response body KiloBytes loaded @@ -106988,7 +106988,7 @@ </histogram> <histogram name="PageLoad.Experimental.Bytes.NetworkIncludingHeaders" - units="KB" expires_after="2020-05-24"> + units="KB" expires_after="2020-07-26"> <owner>jkarlin@chromium.org</owner> <summary> The number of prefiltered (e.g., compressed) KiloBytes loaded over the @@ -107201,7 +107201,7 @@ </histogram> <histogram name="PageLoad.Experimental.NavigationToInteractive" units="ms" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <obsolete> Removed 1/2020. </obsolete> @@ -107295,7 +107295,7 @@ </histogram> <histogram name="PageLoad.Experimental.PaintTiming.FirstMeaningfulPaintStatus" - enum="FirstMeaningfulPaintStatus" expires_after="2020-05-24"> + enum="FirstMeaningfulPaintStatus" expires_after="2020-07-26"> <owner>ksakamoto@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> <summary> @@ -107412,7 +107412,7 @@ <histogram name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint" - units="ms" expires_after="2020-05-24"> + units="ms" expires_after="2020-07-26"> <owner>ksakamoto@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> <summary> @@ -107477,7 +107477,7 @@ <histogram name="PageLoad.Experimental.PaintTiming.NavigationToLargestTextPaint" - units="ms" expires_after="2020-04-23"> + units="ms" expires_after="2020-07-26"> <owner>maxlg@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> <summary> @@ -107585,7 +107585,7 @@ </histogram> <histogram name="PageLoad.Experimental.TimeToInteractiveStatus" - enum="TimeToInteractiveStatus" expires_after="2020-05-24"> + enum="TimeToInteractiveStatus" expires_after="2020-07-26"> <obsolete> Removed 1/2020. </obsolete> @@ -108017,7 +108017,7 @@ </histogram> <histogram name="PageLoad.InteractiveTiming.FirstInputTimestamp4" units="ms" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>tdresser@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> <summary> @@ -108247,7 +108247,7 @@ </histogram> <histogram name="PageLoad.Internal.ClientRedirect.NavigationWithoutPaint" - enum="Boolean" expires_after="2020-03-22"> + enum="Boolean" expires_after="2020-07-26"> <owner>bmcquade@chromium.org</owner> <summary> Counts how often a client-side redirect was initiated from a page that did @@ -108290,7 +108290,7 @@ </histogram> <histogram name="PageLoad.Internal.ErrorCode" enum="InternalErrorLoadEvent" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>csharrison@chromium.org</owner> <owner>bmcquade@chromium.org</owner> <summary> @@ -108315,7 +108315,7 @@ </histogram> <histogram name="PageLoad.Internal.NavigationStartedInForeground" - enum="BooleanForeground" expires_after="2020-05-24"> + enum="BooleanForeground" expires_after="2020-07-26"> <owner>bmcquade@chromium.org</owner> <summary>Whether a navigation started in the foreground.</summary> </histogram> @@ -108533,7 +108533,7 @@ </histogram> <histogram name="PageLoad.Internal.Renderer.PresentationTime.DeltaFromSwapTime" - units="ms" expires_after="2020-05-24"> + units="ms" expires_after="2020-07-26"> <owner>sadrul@chromium.org</owner> <summary> 'Swap time' is the timestamp of the renderer submitting a CompositorFrame, @@ -108549,7 +108549,7 @@ </histogram> <histogram name="PageLoad.Internal.Renderer.PresentationTime.Valid" - enum="Boolean" expires_after="2020-05-24"> + enum="Boolean" expires_after="2020-07-26"> <owner>sadrul@chromium.org</owner> <summary> This boolean keeps track of whether a valid presentation-timestamp was @@ -108560,7 +108560,7 @@ </histogram> <histogram name="PageLoad.LayoutInstability.CumulativeShiftScore" - units="scorex10" expires_after="2020-05-24"> + units="scorex10" expires_after="2020-07-26"> <owner>bmcquade@chromium.org</owner> <owner>skobes@chromium.org</owner> <summary> @@ -108572,7 +108572,7 @@ </histogram> <histogram name="PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame" - units="scorex10" expires_after="2020-05-24"> + units="scorex10" expires_after="2020-07-26"> <owner>bmcquade@chromium.org</owner> <owner>skobes@chromium.org</owner> <summary> @@ -108592,7 +108592,7 @@ </histogram> <histogram name="PageLoad.PageTiming.ForegroundDuration" units="ms" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>bmcquade@chromium.org</owner> <summary> For page loads that start in the foreground, measures the duration of time @@ -108629,7 +108629,7 @@ </histogram> <histogram name="PageLoad.PageTiming.NavigationToFirstForeground" units="ms" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>bmcquade@chromium.org</owner> <owner>csharrison@chromium.org</owner> <summary> @@ -108708,7 +108708,7 @@ </histogram> <histogram name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint" - units="ms" expires_after="2020-05-24"> + units="ms" expires_after="2020-07-26"> <owner>maxlg@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> <summary> @@ -108722,7 +108722,7 @@ <histogram name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint.MainFrame" - units="ms" expires_after="2020-05-24"> + units="ms" expires_after="2020-07-26"> <owner>maxlg@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> <summary> @@ -108746,7 +108746,7 @@ </histogram> <histogram name="PageLoad.ParseTiming.NavigationToParseStart" units="ms" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>bmcquade@chromium.org</owner> <owner>csharrison@chromium.org</owner> <summary> @@ -108777,7 +108777,7 @@ </histogram> <histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad" units="ms" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>bmcquade@chromium.org</owner> <owner>csharrison@chromium.org</owner> <summary> @@ -109582,7 +109582,7 @@ </histogram> <histogram name="PasswordBubble.DisplayDisposition" - enum="PasswordBubbleDisplayDisposition" expires_after="2020-05-24"> + enum="PasswordBubbleDisplayDisposition" expires_after="2020-07-26"> <owner>vasilii@chromium.org</owner> <summary> When the password management bubble opened, what state was it in? @@ -109590,7 +109590,7 @@ </histogram> <histogram name="PasswordGeneration.Event" enum="PasswordGenerationEvent" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>dvadym@chromium.org</owner> <owner>kolos@chromium.org</owner> <owner>vasilii@chromium.org</owner> @@ -109607,7 +109607,7 @@ </histogram> <histogram name="PasswordGeneration.GeneratedPasswordWasEdited" - enum="BooleanGeneratedPasswordWasEdited" expires_after="2020-05-24"> + enum="BooleanGeneratedPasswordWasEdited" expires_after="2020-07-26"> <owner>kolos@chromium.org</owner> <summary> Measures the frequency of user editing of generated passwords. Uploaded once @@ -109669,7 +109669,7 @@ </histogram> <histogram name="PasswordGeneration.UserDecision" - enum="PasswordGenerationUserEvent" expires_after="2020-03-22"> + enum="PasswordGenerationUserEvent" expires_after="2020-07-26"> <owner>ioanap@chromium.org</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -109812,7 +109812,7 @@ </histogram> <histogram base="true" name="PasswordManager.AccountsPerSiteHiRes" - units="units" expires_after="2020-05-24"> + units="units" expires_after="2020-07-26"> <owner>dvadym@chromium.org</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -110074,7 +110074,7 @@ </histogram> <histogram name="PasswordManager.ApplySyncChanges.AddLoginSyncError" - enum="PasswordAddLoginSyncError" expires_after="2020-05-24"> + enum="PasswordAddLoginSyncError" expires_after="2020-07-26"> <owner>mamir@chromium.org</owner> <owner>mastiz@chromium.org</owner> <summary> @@ -110085,7 +110085,7 @@ </histogram> <histogram name="PasswordManager.ApplySyncChanges.UpdateLoginSyncError" - enum="PasswordUpdateLoginSyncError" expires_after="2020-05-24"> + enum="PasswordUpdateLoginSyncError" expires_after="2020-07-26"> <owner>mamir@chromium.org</owner> <owner>mastiz@chromium.org</owner> <summary> @@ -110096,7 +110096,7 @@ </histogram> <histogram name="PasswordManager.ApplySyncChangesState" - enum="PasswordApplySyncChangesState" expires_after="2020-05-24"> + enum="PasswordApplySyncChangesState" expires_after="2020-07-26"> <owner>mamir@chromium.org</owner> <owner>mastiz@chromium.org</owner> <summary> @@ -111211,7 +111211,7 @@ </histogram> <histogram name="PasswordManager.MergeSyncData.AddLoginSyncError" - enum="PasswordAddLoginSyncError" expires_after="2020-05-24"> + enum="PasswordAddLoginSyncError" expires_after="2020-07-26"> <owner>mamir@chromium.org</owner> <owner>mastiz@chromium.org</owner> <summary> @@ -111222,7 +111222,7 @@ </histogram> <histogram name="PasswordManager.MergeSyncData.UpdateLoginSyncError" - enum="PasswordUpdateLoginSyncError" expires_after="2020-05-24"> + enum="PasswordUpdateLoginSyncError" expires_after="2020-07-26"> <owner>mamir@chromium.org</owner> <owner>mastiz@chromium.org</owner> <summary> @@ -111244,7 +111244,7 @@ </histogram> <histogram name="PasswordManager.NewlySavedPasswordIsGenerated" - enum="BooleanNewlySavedPasswordIsGenerated" expires_after="2020-05-24"> + enum="BooleanNewlySavedPasswordIsGenerated" expires_after="2020-07-26"> <owner>nepper@chromium.org</owner> <owner>battre@chromium.org</owner> <owner>kolos@chromium.org</owner> @@ -111255,7 +111255,7 @@ </histogram> <histogram name="PasswordManager.NonSyncPasswordHashChange" - enum="GaiaPasswordHashChange" expires_after="2020-03-29"> + enum="GaiaPasswordHashChange" expires_after="2020-07-26"> <owner>dvadym@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary> @@ -111311,7 +111311,7 @@ <histogram name="PasswordManager.Onboarding.ResultOfSavingFlow" enum="PasswordManagerOnboardingResultOfSavingFlow" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>achulkov@google.com</owner> <owner>ioanap@chromium.org</owner> <summary> @@ -111345,7 +111345,7 @@ <histogram name="PasswordManager.Onboarding.UIDismissalReason" enum="PasswordManagerOnboardingUIDismissalReason" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>achulkov@google.com</owner> <owner>ioanap@chromium.org</owner> <summary> @@ -111373,7 +111373,7 @@ </histogram> <histogram name="PasswordManager.PasswordDropdownItemSelected" - enum="PasswordDropdownSelectedOption" expires_after="2020-05-24"> + enum="PasswordDropdownSelectedOption" expires_after="2020-07-26"> <owner>dvadym@chromium.org</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -111382,7 +111382,7 @@ </histogram> <histogram name="PasswordManager.PasswordDropdownShown" - enum="PasswordDropdownState" expires_after="2020-05-24"> + enum="PasswordDropdownState" expires_after="2020-07-26"> <owner>dvadym@chromium.org</owner> <owner>vasilii@chromium.org</owner> <summary>Logs the state of the password dropdown when it's shown.</summary> @@ -111493,7 +111493,7 @@ </histogram> <histogram name="PasswordManager.PasswordSyncState" enum="PasswordSyncState" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>dvadym@chromium.org</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -111713,7 +111713,7 @@ </histogram> <histogram name="PasswordManager.SaveUIDismissalReason" - enum="PasswordManagerUIDismissalReason" expires_after="2020-05-24"> + enum="PasswordManagerUIDismissalReason" expires_after="2020-07-26"> <owner>vasilii@chromium.org</owner> <summary>Why was the save password UI (bubble or infobar) closed?</summary> </histogram> @@ -112145,7 +112145,7 @@ </histogram> <histogram name="PasswordManager.SyncPasswordHashChange" - enum="GaiaPasswordHashChange" expires_after="2020-05-24"> + enum="GaiaPasswordHashChange" expires_after="2020-07-26"> <owner>dvadym@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary> @@ -112218,7 +112218,7 @@ </histogram> <histogram base="true" name="PasswordManager.TotalAccountsHiRes.ByType" - units="units" expires_after="2020-05-24"> + units="units" expires_after="2020-07-26"> <owner>battre@chromium.org</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -112271,7 +112271,7 @@ </histogram> <histogram name="PasswordManager.UIDismissalReason" - enum="PasswordManagerUIDismissalReason" expires_after="2020-05-24"> + enum="PasswordManagerUIDismissalReason" expires_after="2020-07-26"> <owner>vasilii@chromium.org</owner> <summary> Why was the password manager's UI (bubble or infobar) closed? Save and @@ -112299,7 +112299,7 @@ </histogram> <histogram name="PasswordManager.UpdateUIDismissalReason" - enum="PasswordManagerUIDismissalReason" expires_after="2020-05-24"> + enum="PasswordManagerUIDismissalReason" expires_after="2020-07-26"> <owner>vasilii@chromium.org</owner> <summary>Why was the update password UI (bubble or infobar) closed?</summary> </histogram> @@ -112452,7 +112452,7 @@ </histogram> <histogram name="PasswordProtection.ModalWarningDialogAction" - enum="PasswordProtectionWarningAction" expires_after="2020-05-24"> + enum="PasswordProtectionWarningAction" expires_after="2020-07-26"> <owner>vakh@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary> @@ -112534,7 +112534,7 @@ </histogram> <histogram name="PasswordProtection.PasswordProtectionResponseOrErrorCode" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2020-05-24"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2020-07-26"> <owner>vakh@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary> @@ -112556,7 +112556,7 @@ </histogram> <histogram name="PasswordProtection.PasswordReuseSyncAccountType" - enum="PasswordProtectionSyncAccountType" expires_after="2020-05-24"> + enum="PasswordProtectionSyncAccountType" expires_after="2020-07-26"> <owner>vakh@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary> @@ -112591,7 +112591,7 @@ </histogram> <histogram name="PasswordProtection.RequestNetworkDuration" units="ms" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>vakh@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary> @@ -112601,7 +112601,7 @@ </histogram> <histogram base="true" name="PasswordProtection.RequestOutcome" - enum="PasswordProtectionRequestOutcome" expires_after="2020-05-24"> + enum="PasswordProtectionRequestOutcome" expires_after="2020-07-26"> <owner>vakh@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary> @@ -112648,7 +112648,7 @@ </histogram> <histogram name="PasswordProtection.Verdict" enum="PasswordProtectionVerdict" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>vakh@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary> @@ -112808,7 +112808,7 @@ </histogram> <histogram name="PaymentRequest.Events" units="bitfield value" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>sebsg@chromium.org</owner> <summary> A bitfield representing the different events that happened during the @@ -112833,7 +112833,7 @@ </histogram> <histogram name="PaymentRequest.MissingContactFields" - enum="PaymentRequestMissingContactFields" expires_after="2020-03-22"> + enum="PaymentRequestMissingContactFields" expires_after="2020-07-26"> <owner>sahel@chromium.org</owner> <summary> A bitfield representing different missing fields of the contact section in @@ -112869,7 +112869,7 @@ </histogram> <histogram name="PaymentRequest.NumberOfSelectionAdds" units="units" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>sebsg@chromium.org</owner> <summary> The number of times the user added an entry during a Payment Request. @@ -112877,7 +112877,7 @@ </histogram> <histogram name="PaymentRequest.NumberOfSelectionChanges" units="units" - expires_after="2020-03-22"> + expires_after="2020-07-26"> <owner>sebsg@chromium.org</owner> <summary> The number of times the user changed an entry during a Payment Request. @@ -112931,7 +112931,7 @@ </histogram> <histogram name="PaymentRequest.TimeToCheckout.Completed" units="ms" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>sahel@chromium.org</owner> <summary> Records the time between a payment request .show() and its completion. @@ -112939,7 +112939,7 @@ </histogram> <histogram name="PaymentRequest.TimeToCheckout.Completed.Shown" units="ms" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <!-- Name completed by histogram_suffixes name="PaymentRequestCompletedInstrument" --> <owner>sahel@chromium.org</owner> @@ -112950,7 +112950,7 @@ </histogram> <histogram name="PaymentRequest.TimeToCheckout.Completed.SkippedShow" - units="ms" expires_after="2020-05-24"> + units="ms" expires_after="2020-07-26"> <!-- Name completed by histogram_suffixes name="PaymentRequestCompletedInstrument" --> <owner>sahel@chromium.org</owner> @@ -112961,7 +112961,7 @@ </histogram> <histogram name="PaymentRequest.TimeToCheckout.OtherAborted" units="ms" - expires_after="2020-03-22"> + expires_after="2020-07-26"> <owner>sahel@chromium.org</owner> <summary> Records the time between a payment request .show() and its termination by @@ -112970,7 +112970,7 @@ </histogram> <histogram name="PaymentRequest.TimeToCheckout.UserAborted" units="ms" - expires_after="2020-03-22"> + expires_after="2020-07-26"> <!-- Name completed by histogram_suffixes name="PaymentRequestPaymentSheetShowStatus" --> <owner>sahel@chromium.org</owner> @@ -112981,7 +112981,7 @@ </histogram> <histogram name="PaymentRequest.TransactionAmount.Completed" - enum="PaymentRequestTransactionSize" expires_after="2020-05-24"> + enum="PaymentRequestTransactionSize" expires_after="2020-07-26"> <owner>sahel@chromium.org</owner> <summary> Records the transaction amounts completed using payment request API after @@ -112990,7 +112990,7 @@ </histogram> <histogram name="PaymentRequest.TransactionAmount.Triggered" - enum="PaymentRequestTransactionSize" expires_after="2020-05-24"> + enum="PaymentRequestTransactionSize" expires_after="2020-07-26"> <owner>sahel@chromium.org</owner> <summary> Records the transaction amounts triggered using payment request API after @@ -113075,7 +113075,7 @@ </histogram> <histogram name="PDF.Actions" enum="ChromePDFViewerActions" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>hnakashima@chromium.org</owner> <summary> Tracks user actions in the PDF viewer. Logged when the document is opened @@ -118062,7 +118062,7 @@ </histogram> <histogram name="Plugin.FlashUsage" enum="FlashUsage" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>yzshen@chromium.org</owner> <owner>thestig@chromium.org</owner> <summary>Collects Flash usage data.</summary> @@ -118339,7 +118339,7 @@ </histogram> <histogram name="Power.BatteryChargeHealth" units="%" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>tbroch@chromium.org</owner> <summary> Chrome OS battery charge health percentage. Sampled once when device starts @@ -118371,7 +118371,7 @@ </histogram> <histogram name="Power.BatteryDischargeRate" units="mW" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>tbroch@chromium.org</owner> <summary> Chrome OS battery discharge rate in mW sampled every 30 seconds while the @@ -118437,7 +118437,7 @@ </histogram> <histogram name="Power.BatteryDischargeRateWhileSuspended" units="mW" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>tbroch@chromium.org</owner> <summary> Chrome OS battery discharge rate in mW while the system was suspended, @@ -118457,7 +118457,7 @@ </summary> </histogram> -<histogram name="Power.BatteryPercentDrop" units="%" expires_after="2020-05-24"> +<histogram name="Power.BatteryPercentDrop" units="%" expires_after="2020-07-26"> <owner>ryansturm@chromium.org</owner> <owner>tbansal@chromium.org</owner> <summary> @@ -118521,7 +118521,7 @@ </histogram> <histogram name="Power.BatteryRemainingWhenChargeStarts" units="%" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>tbroch@chromium.org</owner> <summary> Chrome OS remaining battery charge as percent of the maximum battery charge, @@ -118601,7 +118601,7 @@ </histogram> <histogram name="Power.ConnectedChargingPorts" - enum="PowerConnectedChargingPorts" expires_after="2020-05-24"> + enum="PowerConnectedChargingPorts" expires_after="2020-07-26"> <owner>bleung@chromium.org</owner> <owner>tbroch@chromium.org</owner> <summary> @@ -118768,7 +118768,7 @@ </histogram> <histogram name="Power.IdleSuspendCountDaily" units="count" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>tbroch@chromium.org</owner> <owner>jiameng@chromium.org</owner> <summary> @@ -118894,7 +118894,7 @@ </histogram> <histogram name="Power.LidClosedSuspendCountDaily" units="count" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>tbroch@chromium.org</owner> <summary> Number of times that that the system has suspended in response to its lid @@ -119085,7 +119085,7 @@ </histogram> <histogram name="Power.PowerSupplyMaxPower" units="W" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>bleung@chromium.org</owner> <owner>tbroch@chromium.org</owner> <summary> @@ -119144,7 +119144,7 @@ </histogram> <histogram name="Power.SuspendAttempt" enum="SuspendAttempt" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>tbroch@chromium.org</owner> <summary> The number of suspend attempts on Chrome OS. Samples are reported before @@ -119154,7 +119154,7 @@ </histogram> <histogram name="Power.SuspendAttemptsBeforeCancel" units="units" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>tbroch@chromium.org</owner> <summary> The number of suspend attempts performed for a single suspend request (e.g. @@ -119165,7 +119165,7 @@ </histogram> <histogram name="Power.SuspendAttemptsBeforeSuccess" units="units" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>tbroch@chromium.org</owner> <summary> The number of suspend attempts performed for a single suspend request (e.g. @@ -119175,7 +119175,7 @@ </histogram> <histogram name="Power.SuspendResult" enum="SuspendResult" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>tbroch@chromium.org</owner> <summary> The results of suspend attempts on Chrome OS. Samples are reported after @@ -119219,7 +119219,7 @@ </histogram> <histogram name="Power.TimeInSuspendAtBoot" units="minutes" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>tbroch@chromium.org</owner> <summary> Chrome OS time in minutes spent in suspend-to-RAM mode sampled at boot @@ -119228,7 +119228,7 @@ </histogram> <histogram name="Power.TimeInSuspendAtResume" units="minutes" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>tbroch@chromium.org</owner> <summary> Chrome OS time in minutes spent in suspend-to-RAM mode sampled at resume. @@ -121175,7 +121175,7 @@ </histogram> <histogram name="Previews.DeferAllScript.DenyListMatch" enum="BooleanDetected" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>tbansal@chromium.org</owner> <owner>dougarnett@chromium.org</owner> <summary> @@ -121185,7 +121185,7 @@ </histogram> <histogram name="Previews.DeferAllScript.RedirectLoopDetectedUsingCache" - enum="BooleanDetected" expires_after="2020-05-24"> + enum="BooleanDetected" expires_after="2020-07-26"> <owner>tbansal@chromium.org</owner> <owner>dougarnett@chromium.org</owner> <summary> @@ -121195,7 +121195,7 @@ </histogram> <histogram name="Previews.EligibilityReason" enum="PreviewsEligibilityReason" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>ryansturm@chromium.org</owner> <summary> When evaluating whether to show a user a preview, the preview might be @@ -121395,7 +121395,7 @@ </histogram> <histogram name="Previews.OmniboxAction" enum="PreviewsUserOmniboxAction" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>robertogden@chromium.org</owner> <summary>User interactions with the Previews Android Omnibox UI.</summary> </histogram> @@ -121546,7 +121546,7 @@ </histogram> <histogram name="Previews.OptOut.UserOptedOut" enum="PreviewsUserOptedOut" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>ryansturm@chromium.org</owner> <summary> Whether the user chose to reload the original page when shown a preview. @@ -121561,7 +121561,7 @@ </histogram> <histogram name="Previews.PageEndReason" enum="PageEndReason" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>robertogden@chromium.org</owner> <summary>Records why the page load ended on a given preview type.</summary> </histogram> @@ -121614,7 +121614,7 @@ </histogram> <histogram name="Previews.ServerLitePage.IneligibleReasons" - enum="PreviewsServerLitePageIneligibleReason" expires_after="2020-05-24"> + enum="PreviewsServerLitePageIneligibleReason" expires_after="2020-07-26"> <owner>robertogden@chromium.org</owner> <summary> The reasons that a navigation is not eligible to be shown a server lite page @@ -121745,7 +121745,7 @@ </histogram> <histogram name="Previews.ServerLitePage.ServerResponse" - enum="PreviewsServerLitePageServerResponse" expires_after="2020-05-24"> + enum="PreviewsServerLitePageServerResponse" expires_after="2020-07-26"> <owner>robertogden@chromium.org</owner> <summary> The type of response given by the previews server when a server lite page @@ -122539,7 +122539,7 @@ </histogram> <histogram name="PrintPreview.UserAction" enum="PrintPreviewUserActionType" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>thestig@chromium.org</owner> <summary> Action taken by the user in the preview tab such as print, cancel, print to @@ -122983,7 +122983,7 @@ </histogram> <histogram name="Profile.Menu.OpenedAfterAvatarAnimation" units="ms" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>droger@chromium.org</owner> <owner>jkrcal@chromium.org</owner> <summary> @@ -123113,7 +123113,7 @@ </histogram> <histogram name="Profile.NumberOfProfiles" units="units" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>rogerta@chromium.org</owner> <summary> Counts the number of profiles on a user's machine at least every 24 hours @@ -123549,7 +123549,7 @@ </histogram> <histogram name="ProfileChooser.HasProfilesShown" enum="BooleanShown" - expires_after="2020-04-05"> + expires_after="2020-07-26"> <owner>vasilii@chromium.org</owner> <owner>ewald@chromium.org</owner> <summary> @@ -124400,7 +124400,7 @@ </histogram> <histogram name="Quota.AvailableDiskSpace" units="MB" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>jarrydg@chromium.org</owner> <summary> Amount of free disk space for the storage directory. Logged at irregular @@ -124535,7 +124535,7 @@ </histogram> <histogram name="Quota.GlobalUsageOfTemporaryStorage" units="MB" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>jarrydg@chromium.org</owner> <summary>Global usage of temporary storage.</summary> </histogram> @@ -124630,7 +124630,7 @@ </histogram> <histogram name="Quota.PercentDiskAvailable" units="%" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>jarrydg@chromium.org</owner> <summary> Percentage of the storage device that is free. Logged at irregular @@ -124658,7 +124658,7 @@ </histogram> <histogram name="Quota.PercentUsedForTemporaryStorage2" units="%" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>jarrydg@chromium.org</owner> <summary> Percentage of the storage device that is being use for temporary storage. @@ -124740,7 +124740,7 @@ </summary> </histogram> -<histogram name="Quota.TotalDiskSpace" units="MB" expires_after="2020-05-24"> +<histogram name="Quota.TotalDiskSpace" units="MB" expires_after="2020-07-26"> <owner>jarrydg@chromium.org</owner> <summary> Total disk space for the storage directory. Logged at irregular intervals. @@ -133007,7 +133007,7 @@ </histogram> <histogram name="SB2.RemoteCall.Result" enum="SB2RemoteCallResult" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>vakh@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary> @@ -134242,7 +134242,7 @@ </histogram> <histogram name="SBClientPhishing.PageCapturedMatchesBrowserURL" - enum="BooleanMatched" expires_after="2020-05-23"> + enum="BooleanMatched" expires_after="2020-07-26"> <owner>drubery@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary> @@ -134253,7 +134253,7 @@ </histogram> <histogram name="SBClientPhishing.PhishingDetectorResult" - enum="ClientSidePhishingResult" expires_after="2020-05-23"> + enum="ClientSidePhishingResult" expires_after="2020-07-26"> <owner>drubery@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary>The result enum received from the renderer-side classifier</summary> @@ -149457,7 +149457,7 @@ </histogram> <histogram name="Stability.Android.ProcessedCrashCounts" - enum="AndroidProcessedCrashCounts" expires_after="2020-05-24"> + enum="AndroidProcessedCrashCounts" expires_after="2020-07-26"> <owner>boliu@chromium.org</owner> <summary> Individual enum counts specific conditions of child process terminations. @@ -149514,7 +149514,7 @@ </histogram> <histogram name="Stability.Android.RendererCrash" enum="Boolean" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>wnwen@chromium.org</owner> <summary> Counts renderer crashes including OOMs. Android only. Mirrors old stability @@ -149524,7 +149524,7 @@ <histogram name="Stability.Android.StrongBindingOomRemainingBindingState" enum="Android.ChildProcessBindingStateCombination" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>boliu@chromium.org</owner> <owner>ssid@chromium.org</owner> <summary> @@ -149559,7 +149559,7 @@ </histogram> <histogram name="Stability.BadMessageTerminated.Content" - enum="BadMessageReasonContent" expires_after="2020-05-24"> + enum="BadMessageReasonContent" expires_after="2020-07-26"> <owner>jam@chromium.org</owner> <owner>jamescook@chromium.org</owner> <summary> @@ -149620,7 +149620,7 @@ </histogram> <histogram name="Stability.ChildFrameCrash.ShownAfterCrashingReason" - enum="ShownAfterCrashingReason" expires_after="2020-05-24"> + enum="ShownAfterCrashingReason" expires_after="2020-07-26"> <owner>alexmos@chromium.org</owner> <owner>boliu@chromium.org</owner> <owner>lukasza@chromium.org</owner> @@ -149653,7 +149653,7 @@ </histogram> <histogram name="Stability.ChildFrameCrash.Visibility" enum="CrashVisibility" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>boliu@chromium.org</owner> <owner>lfg@chromium.org</owner> <owner>lukasza@chromium.org</owner> @@ -150129,7 +150129,7 @@ </histogram> <histogram base="true" name="Startup.Android.Cold.TimeToFirstContentfulPaint" - units="ms" expires_after="2020-05-24"> + units="ms" expires_after="2020-07-26"> <owner>pasko@chromium.org</owner> <owner>alexilin@chromium.org</owner> <summary> @@ -150142,7 +150142,7 @@ </histogram> <histogram base="true" name="Startup.Android.Cold.TimeToFirstNavigationCommit" - units="ms" expires_after="2020-05-24"> + units="ms" expires_after="2020-07-26"> <owner>pasko@chromium.org</owner> <owner>alexilin@chromium.org</owner> <summary> @@ -151881,7 +151881,7 @@ </histogram> <histogram name="Style.InvalidationTime" units="microseconds" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>futhark@chromium.org</owner> <summary> Microseconds spent in StyleEngine::InvalidateStyle. Only samples from high @@ -151905,7 +151905,7 @@ </histogram> <histogram name="Style.RebuildLayoutTreeTime" units="microseconds" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>futhark@chromium.org</owner> <summary> Microseconds spent in RebuildLayoutTree called from Document::UpdateStyle. @@ -151913,7 +151913,7 @@ </histogram> <histogram name="Style.RecalcTime" units="microseconds" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>futhark@chromium.org</owner> <summary> Microseconds spent in RecalcStyle called from Document::UpdateStyle. @@ -152429,7 +152429,7 @@ </histogram> <histogram name="SubresourceFilter.PageLoad.ActivationList" - enum="ActivationList" expires_after="2020-05-24"> + enum="ActivationList" expires_after="2020-07-26"> <owner>csharrison@chromium.org</owner> <summary> The ActivationList or NONE that the main frame navigation matched with. @@ -152438,7 +152438,7 @@ </histogram> <histogram name="SubresourceFilter.PageLoad.ActivationState" - enum="SubresourceFilterActivationState" expires_after="2020-05-24"> + enum="SubresourceFilterActivationState" expires_after="2020-07-26"> <owner>csharrison@chromium.org</owner> <summary> Whenever a document load is committed in a main frame, records whether @@ -153411,7 +153411,7 @@ </histogram> <histogram name="Sync.ConfigureDataTypes" enum="SyncModelTypes" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>zea@chromium.org</owner> <summary> Breakdown of sync data types being configured at first time signin, restart, @@ -154428,7 +154428,7 @@ </histogram> <histogram name="Sync.InitialState" enum="SyncInitialState" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>treib@chromium.org</owner> <owner>mastiz@chromium.org</owner> <summary> @@ -155218,7 +155218,7 @@ </histogram> <histogram name="Sync.PostedClientToServerMessage" - enum="SyncClientToServerMessageContents" expires_after="2020-05-24"> + enum="SyncClientToServerMessageContents" expires_after="2020-07-26"> <owner>mastiz@chromium.org</owner> <summary> Number of network requests issued by sync to the sync server, grouped by @@ -155227,7 +155227,7 @@ </histogram> <histogram name="Sync.PostedClientToServerMessageError" enum="SyncErrorType" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>mastiz@chromium.org</owner> <summary> A sync error code received from the sync server as a result of a @@ -155870,7 +155870,7 @@ </histogram> <histogram name="Sync.SyncEverything2" enum="Boolean" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>treib@chromium.org</owner> <summary> Boolean histogram for whether the "Sync Everything" option was @@ -160498,7 +160498,7 @@ </histogram> <histogram name="Translate.CompactInfobar.Event" enum="TranslateCompactUIEvent" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>anthonyvd@chromium.org</owner> <summary>Various user actions performed in the translate infobar.</summary> </histogram> @@ -160970,7 +160970,7 @@ </histogram> <histogram name="Translate.SourceLanguage" enum="CLD3LanguageCode" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>yyushkina@google.com</owner> <summary> The number of requests sent to the Translate server, grouped by source @@ -161041,7 +161041,7 @@ </histogram> <histogram name="Translate.UserActionDuration" units="ms" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>kenjibaheux@google.com</owner> <summary> The time from a page content language being determined to user requesting @@ -162212,7 +162212,7 @@ </summary> </histogram> -<histogram name="UMA.LogSize.OnSuccess" units="KB" expires_after="2020-05-24"> +<histogram name="UMA.LogSize.OnSuccess" units="KB" expires_after="2020-07-26"> <owner>asvitkine@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> <summary> @@ -162633,7 +162633,7 @@ </histogram> <histogram name="UMA.TruncatedEvents.UserAction" units="events" - expires_after="2020-07-19"> + expires_after="2020-07-26"> <owner>rkaplow@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> <summary> @@ -163845,7 +163845,7 @@ </histogram> <histogram name="UserManager.LoginUserType" enum="UserType" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>achuith@chromium.org</owner> <summary> The number of users of different types that log in to the system (Chrome @@ -164435,7 +164435,7 @@ </summary> </histogram> -<histogram name="V8.Execute" units="ms" expires_after="2020-05-24"> +<histogram name="V8.Execute" units="ms" expires_after="2020-07-26"> <owner>rmcilroy@chromium.org</owner> <summary> Time spent in JavaScript Execution, including runtime calls, callbacks, and @@ -165030,7 +165030,7 @@ </histogram> <histogram name="V8.MemoryHeapSampleTotalCommitted" units="KB" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>hpayer@chromium.org</owner> <summary> The total size of committed memory used by V8 after each GC in KB. @@ -165038,7 +165038,7 @@ </histogram> <histogram name="V8.MemoryHeapSampleTotalUsed" units="KB" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>hpayer@chromium.org</owner> <summary> The total size of live memory used by V8 after each GC in KB. @@ -167474,7 +167474,7 @@ </histogram> <histogram name="WebApk.Install.RequestTokenDuration" units="ms" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>hanxi@chromium.org</owner> <owner>pkotwicz@chromium.org</owner> <owner>yfriedman@chromium.org</owner> @@ -167652,7 +167652,7 @@ </histogram> <histogram name="WebApk.Session.TotalDuration2" units="ms" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>hanxi@chromium.org</owner> <owner>pkotwicz@chromium.org</owner> <owner>yfriedman@chromium.org</owner> @@ -167677,7 +167677,7 @@ </histogram> <histogram base="true" name="WebApk.ShellApkVersion2" units="units" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>hanxi@chromium.org</owner> <owner>pkotwicz@chromium.org</owner> <owner>yfriedman@chromium.org</owner> @@ -169539,7 +169539,7 @@ </histogram> <histogram name="WebCore.IndexedDB.SchemaV2HasBlobs" enum="Boolean" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>dmurph@chromium.org</owner> <summary> Records if a v2 schema has blob keys in the database, which means the @@ -169554,7 +169554,7 @@ </histogram> <histogram name="WebCore.IndexedDB.SchemaV2HasBlobs.Docs" enum="Boolean" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>dmurph@chromium.org</owner> <summary> Records if a v2 schema has blob keys in the database, which means the @@ -171416,7 +171416,7 @@ </histogram> <histogram name="WebRTC.Audio.ExpandRatePercent" units="%" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>hlundin@chromium.org</owner> <summary> Measures the expand rate for an incoming WebRTC audio stream. The expand @@ -172119,7 +172119,7 @@ </histogram> <histogram name="WebRTC.PeerConnection.ConnectionState" - enum="IceConnectionStates" expires_after="2020-04-19"> + enum="IceConnectionStates" expires_after="2020-07-26"> <owner>qingsi@google.com</owner> <owner>jeroendb@google.com</owner> <summary> @@ -172467,7 +172467,7 @@ </histogram> <histogram name="WebRTC.PeerConnection.UsagePattern" - enum="WebRtcPeerConnectionUsagePattern" expires_after="2020-05-24"> + enum="WebRtcPeerConnectionUsagePattern" expires_after="2020-07-26"> <owner>hta@chromium.org</owner> <summary> Capsule history of a WebRTC PeerConnection, encoded as a sequence of bits @@ -174032,7 +174032,7 @@ </histogram> <histogram name="WebRtcEventLogging.Api" enum="WebRtcEventLoggingApiEnum" - expires_after="2020-03-22"> + expires_after="2020-07-26"> <owner>eladalon@chromium.org</owner> <owner>saeedj@google.com</owner> <owner>manj@google.com</owner> @@ -174099,7 +174099,7 @@ </histogram> <histogram name="WebShare.ApiCount" enum="WebShareMethod" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>mgiuca@chromium.org</owner> <summary> Counts the number of calls to navigator.share. Includes both successful and @@ -174394,7 +174394,7 @@ </histogram> <histogram name="WebUI.Settings.PathVisited" enum="WebUISettingsPathHashes" - expires_after="2020-05-24"> + expires_after="2020-07-26"> <owner>dschuyler@chromium.org</owner> <owner>tbuckley@chromium.org</owner> <owner>bettes@chromium.org</owner> @@ -188471,6 +188471,7 @@ <histogram_suffixes name="QuickAnswersClickResultType" separator="."> <suffix name="Definition" label="Definition result type"/> + <suffix name="NoResult" label="Result is not available"/> <suffix name="Translation" label="Translation result type"/> <suffix name="UnitConversion" label="UnitConversion result type"/> <affected-histogram name="QuickAnswers.Click.Duration"/>
diff --git a/tools/perf/run_rendering_benchmark_with_gated_performance_unittest.py b/tools/perf/run_rendering_benchmark_with_gated_performance_unittest.py new file mode 100644 index 0000000..bc0fbee7 --- /dev/null +++ b/tools/perf/run_rendering_benchmark_with_gated_performance_unittest.py
@@ -0,0 +1,169 @@ +# Copyright 2020 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import os +import sys +import unittest + +# Add src/testing/ into sys.path for importing representative perf test script. +PERF_TEST_SCRIPTS_DIR = os.path.join( + os.path.dirname(__file__), '..', '..', 'testing', 'scripts') +sys.path.append(PERF_TEST_SCRIPTS_DIR) +import run_rendering_benchmark_with_gated_performance as perf_tests # pylint: disable=wrong-import-position,import-error + +UPPER_LIMIT_DATA_SAMPLE = { + 'story_1': { + 'ci_095': 10, + 'avg': 20 + }, + 'story_2': { + 'ci_095': 10, + 'avg': 16 + }, + 'story_3': { + 'ci_095': 10, + 'avg': 10 + }, + 'story_4': { + 'ci_095': 10, + 'avg': 10 + }, + 'story_5': { + 'ci_095': 20, + 'avg': 10 + }, + 'story_6': { + 'ci_095': 20, + 'avg': 10 + }, +} + + +def create_sample_input(record_list): + # Coverts an array of arrays in to an array of dicts with keys of + # stories, name, avg, count, ci_095 for the unittests. + keys = ['stories', 'name', 'avg', 'count', 'ci_095'] + result = [] + for row in record_list: + result.append(dict(zip(keys, row))) + return result + + +def create_sample_perf_results(passed_stories, failed_stories, benchmark): + perf_results = { + 'tests': {}, + 'num_failures_by_type': { + 'FAIL': len(failed_stories), + 'PASS': len(passed_stories) + } + } + perf_results['tests'][benchmark] = {} + for story in passed_stories: + perf_results['tests'][benchmark][story] = { + 'actual': 'PASS', + 'is_unexpected': False, + 'expected': 'PASS' + } + for story in failed_stories: + perf_results['tests'][benchmark][story] = { + 'actual': 'FAIL', + 'is_unexpected': True, + 'expected': 'PASS' + } + + return perf_results + + +class TestRepresentativePerfScript(unittest.TestCase): + def test_parse_csv_results(self): + csv_obj = create_sample_input([ + ['story_1', 'frame_times', 16, 10, 1.5], + ['story_2', 'latency', 10, 8, 4], # Record for a different metric. + ['story_3', 'frame_times', 8, 20, 2], + ['story_4', 'frame_times', '', 10, 1], # Record with no avg. + ['story_5', 'frame_times', 12, 0, 3], # Record with count of 0. + ['story_6', 'frame_times', 12, 40, 40], # High noise record. + ['story_7', 'frame_times', 12, 40, 4], + ['story_3', 'frame_times', 7, 20, 15], + ['story_3', 'frame_times', 12, 20, 16] + ]) + values_per_story = perf_tests.parse_csv_results(csv_obj, + UPPER_LIMIT_DATA_SAMPLE) + # Existing Frame_times stories in upper_limits should be listed. + # All stories but story_2 & story_7. + self.assertEquals(len(values_per_story), 5) + self.assertEquals(values_per_story['story_1']['averages'], [16.0]) + self.assertEquals(values_per_story['story_1']['ci_095'], [1.5]) + + # Record with avg 12 has high noise. + self.assertEquals(values_per_story['story_3']['averages'], [8.0, 7.0]) + self.assertEquals(values_per_story['story_3']['ci_095'], [2.0, 15.0, 16.0]) + + self.assertEquals(len(values_per_story['story_4']['averages']), 0) + self.assertEquals(len(values_per_story['story_4']['ci_095']), 0) + self.assertEquals(len(values_per_story['story_5']['averages']), 0) + self.assertEquals(len(values_per_story['story_5']['ci_095']), 0) + + # High noise record will be filtered. + self.assertEquals(len(values_per_story['story_6']['averages']), 0) + self.assertEquals(values_per_story['story_6']['ci_095'], [40.0]) + + def test_compare_values_1(self): + values_per_story = { + 'story_1': { + 'averages': [16.0, 17.0, 21.0], + 'ci_095': [2.0, 15.0, 16.0], + }, + 'story_2': { + 'averages': [16.0, 17.0, 22.0], + 'ci_095': [1.0, 1.4, 1.2], + } + } + + sample_perf_results = create_sample_perf_results(['story_1', 'story_2'], [], + 'rendering.desktop') + + result_recorder = perf_tests.ResultRecorder() + result_recorder.set_tests(sample_perf_results) + + result_recorder = perf_tests.compare_values( + values_per_story, UPPER_LIMIT_DATA_SAMPLE, 'rendering.desktop', + result_recorder) + self.assertEquals(result_recorder.tests, 2) + self.assertEquals(result_recorder.failed_stories, set(['story_2'])) + + def test_compare_values_2(self): + values_per_story = { + 'story_1': { + 'averages': [16.0, 17.0, 21.0], + 'ci_095': [2.0, 15.0, 16.0], + }, + 'story_3': { # Two of the runs have acceptable CI but high averages. + 'averages': [10, 13], + 'ci_095': [1.0, 1.4, 1.2], + }, + 'story_4': { # All runs have high noise. + 'averages': [], + 'ci_095': [16, 17, 18], + }, + 'story_5': { # No recorded values. + 'averages': [], + 'ci_095': [], + } + } + + sample_perf_results = create_sample_perf_results( + ['story_1', 'story_3', 'story_4', 'story_5'], ['story_2'], + 'rendering.desktop') + + result_recorder = perf_tests.ResultRecorder() + result_recorder.set_tests(sample_perf_results) + self.assertEquals(result_recorder.fails, 1) + + result_recorder = perf_tests.compare_values( + values_per_story, UPPER_LIMIT_DATA_SAMPLE, 'rendering.desktop', + result_recorder) + self.assertEquals(result_recorder.tests, 5) + self.assertEquals(result_recorder.failed_stories, + set(['story_3', 'story_4', 'story_5']))
diff --git a/ui/accessibility/ax_enum_util.cc b/ui/accessibility/ax_enum_util.cc index b07c870..00529e9 100644 --- a/ui/accessibility/ax_enum_util.cc +++ b/ui/accessibility/ax_enum_util.cc
@@ -40,6 +40,8 @@ return "expandedChanged"; case ax::mojom::Event::kFocus: return "focus"; + case ax::mojom::Event::kFocusAfterMenuClose: + return "focusAfterMenuClose"; case ax::mojom::Event::kFocusContext: return "focusContext"; case ax::mojom::Event::kHide: @@ -168,6 +170,8 @@ return ax::mojom::Event::kExpandedChanged; if (0 == strcmp(event, "focus")) return ax::mojom::Event::kFocus; + if (0 == strcmp(event, "focusAfterMenuClose")) + return ax::mojom::Event::kFocusAfterMenuClose; if (0 == strcmp(event, "focusContext")) return ax::mojom::Event::kFocusContext; if (0 == strcmp(event, "hide"))
diff --git a/ui/accessibility/ax_enums.mojom b/ui/accessibility/ax_enums.mojom index cefb1ca..f80f9b1b 100644 --- a/ui/accessibility/ax_enums.mojom +++ b/ui/accessibility/ax_enums.mojom
@@ -41,6 +41,7 @@ kEndOfTest, // Sentinel value indicating the end of a test kExpandedChanged, // Web kFocus, + kFocusAfterMenuClose, kFocusContext, // Contextual focus event that must delay the next focus event kHide, // Remove: http://crbug.com/392502 kHitTestResult,
diff --git a/ui/accessibility/platform/ax_platform_node_auralinux.cc b/ui/accessibility/platform/ax_platform_node_auralinux.cc index 5304b4f..f676499c 100644 --- a/ui/accessibility/platform/ax_platform_node_auralinux.cc +++ b/ui/accessibility/platform/ax_platform_node_auralinux.cc
@@ -3601,6 +3601,7 @@ void AXPlatformNodeAuraLinux::NotifyAccessibilityEvent( ax::mojom::Event event_type) { + AXPlatformNodeBase::NotifyAccessibilityEvent(event_type); switch (event_type) { // There are three types of messages that we receive for popup menus. Each // time a popup menu is shown, we get a kMenuPopupStart message. This
diff --git a/ui/accessibility/platform/ax_platform_node_base.cc b/ui/accessibility/platform/ax_platform_node_base.cc index c8bc10d..175097a 100644 --- a/ui/accessibility/platform/ax_platform_node_base.cc +++ b/ui/accessibility/platform/ax_platform_node_base.cc
@@ -25,6 +25,12 @@ namespace ui { +namespace { +// A function to call when focus changes, for testing only. +base::LazyInstance<std::map<ax::mojom::Event, base::RepeatingClosure>>:: + DestructorAtExit g_on_notify_event_for_testing; +} // namespace + const base::char16 AXPlatformNodeBase::kEmbeddedCharacter = L'\xfffc'; // Map from each AXPlatformNode's unique id to its instance. @@ -56,6 +62,13 @@ return g_unique_id_map.Get().size(); } +// static +void AXPlatformNodeBase::SetOnNotifyEventCallbackForTesting( + ax::mojom::Event event_type, + base::RepeatingClosure callback) { + g_on_notify_event_for_testing.Get()[event_type] = std::move(callback); +} + AXPlatformNodeBase::AXPlatformNodeBase() = default; AXPlatformNodeBase::~AXPlatformNodeBase() = default; @@ -124,6 +137,11 @@ } void AXPlatformNodeBase::NotifyAccessibilityEvent(ax::mojom::Event event_type) { + if (g_on_notify_event_for_testing.Get().find(event_type) != + g_on_notify_event_for_testing.Get().end() && + g_on_notify_event_for_testing.Get()[event_type]) { + g_on_notify_event_for_testing.Get()[event_type].Run(); + } } #if defined(OS_MACOSX)
diff --git a/ui/accessibility/platform/ax_platform_node_base.h b/ui/accessibility/platform/ax_platform_node_base.h index 2bee9a7e..9ecd846 100644 --- a/ui/accessibility/platform/ax_platform_node_base.h +++ b/ui/accessibility/platform/ax_platform_node_base.h
@@ -248,6 +248,10 @@ // Return the number of instances of AXPlatformNodeBase, for leak testing. static size_t GetInstanceCountForTesting(); + static void SetOnNotifyEventCallbackForTesting( + ax::mojom::Event event_type, + base::RepeatingClosure callback); + // This method finds text boundaries in the text used for platform text APIs. // Implementations may use side-channel data such as line or word indices to // produce appropriate results.
diff --git a/ui/accessibility/platform/ax_platform_node_mac.mm b/ui/accessibility/platform/ax_platform_node_mac.mm index 4735d46..279ea48 100644 --- a/ui/accessibility/platform/ax_platform_node_mac.mm +++ b/ui/accessibility/platform/ax_platform_node_mac.mm
@@ -1201,6 +1201,7 @@ } void AXPlatformNodeMac::NotifyAccessibilityEvent(ax::mojom::Event event_type) { + AXPlatformNodeBase::NotifyAccessibilityEvent(event_type); GetNativeViewAccessible(); // Handle special cases.
diff --git a/ui/accessibility/platform/ax_platform_node_win.cc b/ui/accessibility/platform/ax_platform_node_win.cc index 2ac9244..1d39414 100644 --- a/ui/accessibility/platform/ax_platform_node_win.cc +++ b/ui/accessibility/platform/ax_platform_node_win.cc
@@ -589,6 +589,7 @@ } void AXPlatformNodeWin::NotifyAccessibilityEvent(ax::mojom::Event event_type) { + AXPlatformNodeBase::NotifyAccessibilityEvent(event_type); // Menu items fire selection events but Windows screen readers work reliably // with focus events. Remap here. if (event_type == ax::mojom::Event::kSelection) { @@ -7077,6 +7078,7 @@ return UIA_SystemAlertEventId; case ax::mojom::Event::kFocus: case ax::mojom::Event::kFocusContext: + case ax::mojom::Event::kFocusAfterMenuClose: return UIA_AutomationFocusChangedEventId; case ax::mojom::Event::kLiveRegionChanged: return UIA_LiveRegionChangedEventId;
diff --git a/ui/base/BUILD.gn b/ui/base/BUILD.gn index f5b5695..36dc6e3 100644 --- a/ui/base/BUILD.gn +++ b/ui/base/BUILD.gn
@@ -561,8 +561,8 @@ "cursor/cursor_loader_win.h", ] deps += [ "//third_party/wtl" ] - cflags = [ "/wd4324" ] # Structure was padded due to __declspec(align()), which is - # uninteresting. + cflags = [ "/wd4324" ] # Structure was padded due to __declspec(align()), + # which is uninteresting. ldflags = [ "/DELAYLOAD:d2d1.dll",
diff --git a/ui/events/blink/BUILD.gn b/ui/events/blink/BUILD.gn index 9a0ee69..2b8760e 100644 --- a/ui/events/blink/BUILD.gn +++ b/ui/events/blink/BUILD.gn
@@ -74,6 +74,7 @@ "//cc:cc", "//third_party/blink/public:blink_headers", "//third_party/one_euro_filter", + "//ui/base:base", "//ui/events", "//ui/events:dom_keycode_converter", "//ui/events:events_base",
diff --git a/ui/events/blink/DEPS b/ui/events/blink/DEPS index 5684142..2f904b2 100644 --- a/ui/events/blink/DEPS +++ b/ui/events/blink/DEPS
@@ -15,6 +15,7 @@ "+third_party/blink/public/common/input/web_pointer_event.h", "+third_party/blink/public/common/input/web_touch_event.h", + "+ui/base", "+ui/display/win", "+ui/gfx", "+ui/gfx/geometry",
diff --git a/ui/events/blink/blink_event_util.cc b/ui/events/blink/blink_event_util.cc index c426e3cc..84fa836 100644 --- a/ui/events/blink/blink_event_util.cc +++ b/ui/events/blink/blink_event_util.cc
@@ -870,7 +870,9 @@ float y = (wheel_event->PositionInWidget().y() + delta.y()) * scale; wheel_event->SetPositionInWidget(x, y); if (wheel_event->delta_units != - ui::input_types::ScrollGranularity::kScrollByPage) { + ui::input_types::ScrollGranularity::kScrollByPage && + wheel_event->delta_units != + ui::input_types::ScrollGranularity::kScrollByPercentage) { wheel_event->delta_x *= scale; wheel_event->delta_y *= scale; wheel_event->wheel_ticks_x *= scale;
diff --git a/ui/events/blink/web_input_event_builders_win.cc b/ui/events/blink/web_input_event_builders_win.cc index 7523507..c630724 100644 --- a/ui/events/blink/web_input_event_builders_win.cc +++ b/ui/events/blink/web_input_event_builders_win.cc
@@ -5,6 +5,7 @@ #include "ui/events/blink/web_input_event_builders_win.h" #include "base/win/windowsx_shim.h" +#include "ui/base/ui_base_features.h" #include "ui/display/win/screen_win.h" #include "ui/events/blink/blink_event_util.h" #include "ui/events/event_utils.h" @@ -18,6 +19,7 @@ static const unsigned long kDefaultScrollLinesPerWheelDelta = 3; static const unsigned long kDefaultScrollCharsPerWheelDelta = 1; +static const unsigned long kScrollPercentPerLineOrChar = 5; // WebMouseEvent -------------------------------------------------------------- @@ -280,38 +282,50 @@ MapWindowPoints(0, hwnd, &client_point, 1); result.SetPositionInWidget(client_point.x, client_point.y); - // Convert wheel delta amount to a number of pixels to scroll. - // - // How many pixels should we scroll per line? Gecko uses the height of the - // current line, which means scroll distance changes as you go through the - // page or go to different pages. IE 8 is ~60 px/line, although the value - // seems to vary slightly by page and zoom level. Also, IE defaults to - // smooth scrolling while Firefox doesn't, so it can get away with somewhat - // larger scroll values without feeling as jerky. Here we use 100 px per - // three lines (the default scroll amount is three lines per wheel tick). - // Even though we have smooth scrolling, we don't make this as large as IE - // because subjectively IE feels like it scrolls farther than you want while - // reading articles. - static const float kScrollbarPixelsPerLine = 100.0f / 3.0f; - wheel_delta /= WHEEL_DELTA; - float scroll_delta = wheel_delta; + // |wheel_delta| is expressed in multiples or divisions of WHEEL_DELTA, + // divide this out here to get the number of wheel ticks. + float num_ticks = wheel_delta / WHEEL_DELTA; + float scroll_delta = num_ticks; if (horizontal_scroll) { unsigned long scroll_chars = kDefaultScrollCharsPerWheelDelta; SystemParametersInfo(SPI_GETWHEELSCROLLCHARS, 0, &scroll_chars, 0); - // TODO(pkasting): Should probably have a different multiplier - // scrollbarPixelsPerChar here. - scroll_delta *= static_cast<float>(scroll_chars) * kScrollbarPixelsPerLine; + scroll_delta *= static_cast<float>(scroll_chars); } else { unsigned long scroll_lines = kDefaultScrollLinesPerWheelDelta; SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, &scroll_lines, 0); - if (scroll_lines == WHEEL_PAGESCROLL) { + if (scroll_lines == WHEEL_PAGESCROLL) result.delta_units = ui::input_types::ScrollGranularity::kScrollByPage; - } + else + scroll_delta *= static_cast<float>(scroll_lines); + } - if (result.delta_units != - ui::input_types::ScrollGranularity::kScrollByPage) { - scroll_delta *= - static_cast<float>(scroll_lines) * kScrollbarPixelsPerLine; + if (result.delta_units != ui::input_types::ScrollGranularity::kScrollByPage) { + if (base::FeatureList::IsEnabled(features::kPercentBasedScrolling)) { + // If percent-based scrolling is enabled, the scroll_delta represents + // the percentage amount (out of 1, i.e. 1 == 100%) the targeted scroller + // should scroll. This percentage will be resolved against the size of + // the scroller in the renderer process. + scroll_delta *= kScrollPercentPerLineOrChar / 100.f; + result.delta_units = + ui::input_types::ScrollGranularity::kScrollByPercentage; + } else { + // Convert wheel delta amount to a number of pixels to scroll. + // + // How many pixels should we scroll per line? Gecko uses the height of + // the current line, which means scroll distance changes as you go through + // the page or go to different pages. IE 8 is ~60 px/line, although the + // value seems to vary slightly by page and zoom level. Also, IE defaults + // to smooth scrolling while Firefox doesn't, so it can get away with + // somewhat larger scroll values without feeling as jerky. Here we use + // 100 px per three lines (the default scroll amount is three lines per + // wheel tick). Even though we have smooth scrolling, we don't make this + // as large as IE because subjectively IE feels like it scrolls farther + // than you want while reading articles. + static const float kScrollbarPixelsPerLine = 100.0f / 3.0f; + + // TODO(pkasting): Should probably have a different multiplier for + // horizontal scrolls here. + scroll_delta *= kScrollbarPixelsPerLine; } } @@ -319,10 +333,10 @@ // deltaY to mean "scroll up" and positive deltaX to mean "scroll left". if (horizontal_scroll) { result.delta_x = scroll_delta; - result.wheel_ticks_x = wheel_delta; + result.wheel_ticks_x = num_ticks; } else { result.delta_y = scroll_delta; - result.wheel_ticks_y = wheel_delta; + result.wheel_ticks_y = num_ticks; } return result;
diff --git a/ui/events/blink/web_input_event_builders_win_unittest.cc b/ui/events/blink/web_input_event_builders_win_unittest.cc index b9b56266a..d8604a2 100644 --- a/ui/events/blink/web_input_event_builders_win_unittest.cc +++ b/ui/events/blink/web_input_event_builders_win_unittest.cc
@@ -4,11 +4,13 @@ #include "ui/events/blink/web_input_event_builders_win.h" #include "base/command_line.h" +#include "base/test/scoped_feature_list.h" #include "base/time/time.h" #include "base/win/windows_version.h" #include "build/build_config.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/public/common/input/web_input_event.h" +#include "ui/base/ui_base_features.h" #include "ui/display/display.h" #include "ui/display/display_switches.h" #include "ui/events/event_constants.h" @@ -49,4 +51,41 @@ display::Display::ResetForceDeviceScaleFactorForTesting(); } +TEST(WebInputEventBuilderTest, TestPercentMouseWheelScroll) { + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitAndEnableFeature(features::kPercentBasedScrolling); + + // We must discount the system scroll settings from the test, as we don't them + // failing if the test machine has different settings. + unsigned long system_scroll_lines = 3; + unsigned long system_scroll_chars = 1; + SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, &system_scroll_lines, 0); + SystemParametersInfo(SPI_GETWHEELSCROLLCHARS, 0, &system_scroll_chars, 0); + + WebMouseWheelEvent mouse_wheel = WebMouseWheelEventBuilder::Build( + ::GetDesktopWindow(), WM_MOUSEWHEEL, MAKEWPARAM(0, -WHEEL_DELTA), + MAKELPARAM(0, 0), base::TimeTicks() + base::TimeDelta::FromSeconds(100), + blink::WebPointerProperties::PointerType::kMouse); + EXPECT_EQ(ui::input_types::ScrollGranularity::kScrollByPercentage, + mouse_wheel.delta_units); + EXPECT_FLOAT_EQ(0.f, mouse_wheel.delta_x); + EXPECT_FLOAT_EQ( + -0.05f, mouse_wheel.delta_y / static_cast<float>(system_scroll_lines)); + EXPECT_FLOAT_EQ(0.f, mouse_wheel.wheel_ticks_x); + EXPECT_FLOAT_EQ(-1.f, mouse_wheel.wheel_ticks_y); + + // For a horizontal scroll, Windows is <- -/+ ->, WebKit <- +/- ->. + mouse_wheel = WebMouseWheelEventBuilder::Build( + ::GetDesktopWindow(), WM_MOUSEHWHEEL, MAKEWPARAM(0, -WHEEL_DELTA), + MAKELPARAM(0, 0), base::TimeTicks() + base::TimeDelta::FromSeconds(100), + blink::WebPointerProperties::PointerType::kMouse); + EXPECT_EQ(ui::input_types::ScrollGranularity::kScrollByPercentage, + mouse_wheel.delta_units); + EXPECT_FLOAT_EQ( + 0.05f, mouse_wheel.delta_x / static_cast<float>(system_scroll_chars)); + EXPECT_FLOAT_EQ(0.f, mouse_wheel.delta_y); + EXPECT_FLOAT_EQ(1.f, mouse_wheel.wheel_ticks_x); + EXPECT_FLOAT_EQ(0.f, mouse_wheel.wheel_ticks_y); +} + } // namespace ui
diff --git a/ui/events/fuchsia/input_event_dispatcher.cc b/ui/events/fuchsia/input_event_dispatcher.cc index b240779e..bd329a41 100644 --- a/ui/events/fuchsia/input_event_dispatcher.cc +++ b/ui/events/fuchsia/input_event_dispatcher.cc
@@ -15,8 +15,6 @@ namespace ui { namespace { -const uint32_t kUsbHidKeyboardPage = 0x07; - int KeyModifiersToFlags(int modifiers) { int flags = 0; if (modifiers & fuchsia::ui::input::kModifierShift) @@ -167,11 +165,7 @@ break; } - // Currently KeyboardEvent doesn't specify HID Usage page. |hid_usage| - // field always contains values from the Keyboard page. See - // https://fuchsia.atlassian.net/browse/SCN-762 . - DomCode dom_code = KeycodeConverter::UsbKeycodeToDomCode( - (kUsbHidKeyboardPage << 16) | event.hid_usage); + DomCode dom_code = KeycodeConverter::NativeKeycodeToDomCode(event.hid_usage); DomKey dom_key; KeyboardCode key_code; if (!DomCodeToUsLayoutDomKey(dom_code, KeyModifiersToFlags(event.modifiers),
diff --git a/ui/events/keycodes/dom/keycode_converter.cc b/ui/events/keycodes/dom/keycode_converter.cc index 3a8da6a..f99f6d959 100644 --- a/ui/events/keycodes/dom/keycode_converter.cc +++ b/ui/events/keycodes/dom/keycode_converter.cc
@@ -29,9 +29,20 @@ #elif defined(OS_ANDROID) #define DOM_CODE(usb, evdev, xkb, win, mac, code, id) \ { usb, evdev, code } -#else +#elif defined(OS_FUCHSIA) +// TODO(https://bugs.fuchsia.com/23982): Fuchsia currently delivers events +// with a USB Code but no Page specified, so only map |native_keycode| for +// Keyboard Usage Page codes, for now. +inline constexpr uint32_t CodeIfOnKeyboardPage(uint32_t usage) { + constexpr uint32_t kUsbHidKeyboardPageBase = 0x070000; + if ((usage & 0xffff0000) == kUsbHidKeyboardPageBase) + return usage & 0xffff; + return 0; +} #define DOM_CODE(usb, evdev, xkb, win, mac, code, id) \ - { usb, 0, code } + { usb, CodeIfOnKeyboardPage(usb), code } +#else +#error Unsupported platform #endif #define DOM_CODE_DECLARATION const KeycodeMapEntry kDomCodeMappings[] = #include "ui/events/keycodes/dom/dom_code_data.inc"
diff --git a/ui/events/keycodes/dom/keycode_converter.h b/ui/events/keycodes/dom/keycode_converter.h index a4908e2..7084499 100644 --- a/ui/events/keycodes/dom/keycode_converter.h +++ b/ui/events/keycodes/dom/keycode_converter.h
@@ -33,6 +33,7 @@ // On Linux: XKB scancode // On Windows: Windows OEM scancode // On Mac: Mac keycode + // On Fuchsia: 16-bit Code from the USB Keyboard Usage Page. int native_keycode; // The UIEvents (aka: DOM4Events) |code| value as defined in:
diff --git a/ui/events/types/scroll_types.h b/ui/events/types/scroll_types.h index 5ebf76f6..6b04001 100644 --- a/ui/events/types/scroll_types.h +++ b/ui/events/types/scroll_types.h
@@ -16,7 +16,8 @@ kScrollByLine, kScrollByPage, kScrollByDocument, - kMaxValue = kScrollByDocument + kScrollByPercentage, + kMaxValue = kScrollByPercentage }; } // namespace input_types
diff --git a/ui/gl/EGL/eglextchromium.h b/ui/gl/EGL/eglextchromium.h index fdde853..e66d34a 100644 --- a/ui/gl/EGL/eglextchromium.h +++ b/ui/gl/EGL/eglextchromium.h
@@ -22,10 +22,19 @@ EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncValuesCHROMIUM( EGLDisplay dpy, EGLSurface surface, EGLuint64CHROMIUM *ust, EGLuint64CHROMIUM *msc, EGLuint64CHROMIUM *sbc); +EGLAPI EGLBoolean EGLAPIENTRY eglGetMscRateCHROMIUM(EGLDisplay dpy, + EGLSurface surface, + EGLint* numerator, + EGLint* denominator); #endif /* EGL_EGLEXT_PROTOTYPES */ typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCVALUESCHROMIUMPROC) (EGLDisplay dpy, EGLSurface surface, EGLuint64CHROMIUM *ust, EGLuint64CHROMIUM *msc, EGLuint64CHROMIUM *sbc); +typedef EGLBoolean(EGLAPIENTRYP PFNEGLGETMSCRATECHROMIUMPROC)( + EGLDisplay dpy, + EGLSurface surface, + EGLint* numerator, + EGLint* denominator); #endif #endif
diff --git a/ui/gl/egl_bindings_autogen_mock.cc b/ui/gl/egl_bindings_autogen_mock.cc index 5163a023..5af1985 100644 --- a/ui/gl/egl_bindings_autogen_mock.cc +++ b/ui/gl/egl_bindings_autogen_mock.cc
@@ -298,6 +298,15 @@ dpy, surface, frameId, numTimestamps, timestamps, values); } +EGLBoolean GL_BINDING_CALL +MockEGLInterface::Mock_eglGetMscRateCHROMIUM(EGLDisplay dpy, + EGLSurface surface, + EGLint* numerator, + EGLint* denominator) { + MakeEglMockFunctionUnique("eglGetMscRateCHROMIUM"); + return interface_->GetMscRateCHROMIUM(dpy, surface, numerator, denominator); +} + EGLClientBuffer GL_BINDING_CALL MockEGLInterface::Mock_eglGetNativeClientBufferANDROID( const struct AHardwareBuffer* ahardwarebuffer) { @@ -682,6 +691,8 @@ if (strcmp(name, "eglGetFrameTimestampsANDROID") == 0) return reinterpret_cast<GLFunctionPointerType>( Mock_eglGetFrameTimestampsANDROID); + if (strcmp(name, "eglGetMscRateCHROMIUM") == 0) + return reinterpret_cast<GLFunctionPointerType>(Mock_eglGetMscRateCHROMIUM); if (strcmp(name, "eglGetNativeClientBufferANDROID") == 0) return reinterpret_cast<GLFunctionPointerType>( Mock_eglGetNativeClientBufferANDROID);
diff --git a/ui/gl/egl_bindings_autogen_mock.h b/ui/gl/egl_bindings_autogen_mock.h index 89e50c9..c0432be 100644 --- a/ui/gl/egl_bindings_autogen_mock.h +++ b/ui/gl/egl_bindings_autogen_mock.h
@@ -131,6 +131,11 @@ EGLint numTimestamps, EGLint* timestamps, EGLnsecsANDROID* values); +static EGLBoolean GL_BINDING_CALL +Mock_eglGetMscRateCHROMIUM(EGLDisplay dpy, + EGLSurface surface, + EGLint* numerator, + EGLint* denominator); static EGLClientBuffer GL_BINDING_CALL Mock_eglGetNativeClientBufferANDROID( const struct AHardwareBuffer* ahardwarebuffer); static EGLBoolean GL_BINDING_CALL
diff --git a/ui/gl/generate_bindings.py b/ui/gl/generate_bindings.py index e9d8a852..b87f1ae 100755 --- a/ui/gl/generate_bindings.py +++ b/ui/gl/generate_bindings.py
@@ -2435,6 +2435,14 @@ 'EGL_ANDROID_get_frame_timestamps' ] }], 'arguments': 'EGLDisplay dpy, EGLSurface surface, EGLint timestamp', }, +{ 'return_type': 'EGLBoolean', + 'versions': [{ 'name': 'eglGetMscRateCHROMIUM', + 'extensions': [ + 'EGL_CHROMIUM_sync_control' + ] }], + 'arguments': + 'EGLDisplay dpy, EGLSurface surface, ' + 'EGLint* numerator, EGLint* denominator', }, { 'return_type': 'EGLClientBuffer', 'versions': [{ 'name': 'eglGetNativeClientBufferANDROID', 'extensions': ['EGL_ANDROID_get_native_client_buffer'], }], @@ -2464,7 +2472,10 @@ 'arguments': 'EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, ' 'EGLint* value' }, { 'return_type': 'EGLBoolean', - 'names': ['eglGetSyncValuesCHROMIUM'], + 'versions': [{ 'name': 'eglGetSyncValuesCHROMIUM', + 'extensions': [ + 'EGL_CHROMIUM_sync_control' + ] }], 'arguments': 'EGLDisplay dpy, EGLSurface surface, ' 'EGLuint64CHROMIUM* ust, EGLuint64CHROMIUM* msc, '
diff --git a/ui/gl/gl_bindings_api_autogen_egl.h b/ui/gl/gl_bindings_api_autogen_egl.h index b1e3ff7..94b446d 100644 --- a/ui/gl/gl_bindings_api_autogen_egl.h +++ b/ui/gl/gl_bindings_api_autogen_egl.h
@@ -111,6 +111,10 @@ EGLBoolean eglGetFrameTimestampSupportedANDROIDFn(EGLDisplay dpy, EGLSurface surface, EGLint timestamp) override; +EGLBoolean eglGetMscRateCHROMIUMFn(EGLDisplay dpy, + EGLSurface surface, + EGLint* numerator, + EGLint* denominator) override; EGLClientBuffer eglGetNativeClientBufferANDROIDFn( const struct AHardwareBuffer* ahardwarebuffer) override; EGLBoolean eglGetNextFrameIdANDROIDFn(EGLDisplay dpy,
diff --git a/ui/gl/gl_bindings_autogen_egl.cc b/ui/gl/gl_bindings_autogen_egl.cc index f431221..858ecc32 100644 --- a/ui/gl/gl_bindings_autogen_egl.cc +++ b/ui/gl/gl_bindings_autogen_egl.cc
@@ -261,6 +261,11 @@ GetGLProcAddress("eglGetFrameTimestampSupportedANDROID")); } + if (ext.b_EGL_CHROMIUM_sync_control) { + fn.eglGetMscRateCHROMIUMFn = reinterpret_cast<eglGetMscRateCHROMIUMProc>( + GetGLProcAddress("eglGetMscRateCHROMIUM")); + } + if (ext.b_EGL_ANDROID_get_native_client_buffer) { fn.eglGetNativeClientBufferANDROIDFn = reinterpret_cast<eglGetNativeClientBufferANDROIDProc>( @@ -580,6 +585,14 @@ timestamp); } +EGLBoolean EGLApiBase::eglGetMscRateCHROMIUMFn(EGLDisplay dpy, + EGLSurface surface, + EGLint* numerator, + EGLint* denominator) { + return driver_->fn.eglGetMscRateCHROMIUMFn(dpy, surface, numerator, + denominator); +} + EGLClientBuffer EGLApiBase::eglGetNativeClientBufferANDROIDFn( const struct AHardwareBuffer* ahardwarebuffer) { return driver_->fn.eglGetNativeClientBufferANDROIDFn(ahardwarebuffer); @@ -1076,6 +1089,15 @@ timestamp); } +EGLBoolean TraceEGLApi::eglGetMscRateCHROMIUMFn(EGLDisplay dpy, + EGLSurface surface, + EGLint* numerator, + EGLint* denominator) { + TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceEGLAPI::eglGetMscRateCHROMIUM") + return egl_api_->eglGetMscRateCHROMIUMFn(dpy, surface, numerator, + denominator); +} + EGLClientBuffer TraceEGLApi::eglGetNativeClientBufferANDROIDFn( const struct AHardwareBuffer* ahardwarebuffer) { TRACE_EVENT_BINARY_EFFICIENT0("gpu", @@ -1748,6 +1770,20 @@ return result; } +EGLBoolean LogEGLApi::eglGetMscRateCHROMIUMFn(EGLDisplay dpy, + EGLSurface surface, + EGLint* numerator, + EGLint* denominator) { + GL_SERVICE_LOG("eglGetMscRateCHROMIUM" + << "(" << dpy << ", " << surface << ", " + << static_cast<const void*>(numerator) << ", " + << static_cast<const void*>(denominator) << ")"); + EGLBoolean result = + egl_api_->eglGetMscRateCHROMIUMFn(dpy, surface, numerator, denominator); + GL_SERVICE_LOG("GL_RESULT: " << result); + return result; +} + EGLClientBuffer LogEGLApi::eglGetNativeClientBufferANDROIDFn( const struct AHardwareBuffer* ahardwarebuffer) { GL_SERVICE_LOG("eglGetNativeClientBufferANDROID"
diff --git a/ui/gl/gl_bindings_autogen_egl.h b/ui/gl/gl_bindings_autogen_egl.h index f140abd..5ec31e2 100644 --- a/ui/gl/gl_bindings_autogen_egl.h +++ b/ui/gl/gl_bindings_autogen_egl.h
@@ -141,6 +141,11 @@ EGLDisplay dpy, EGLSurface surface, EGLint timestamp); +typedef EGLBoolean(GL_BINDING_CALL* eglGetMscRateCHROMIUMProc)( + EGLDisplay dpy, + EGLSurface surface, + EGLint* numerator, + EGLint* denominator); typedef EGLClientBuffer(GL_BINDING_CALL* eglGetNativeClientBufferANDROIDProc)( const struct AHardwareBuffer* ahardwarebuffer); typedef EGLBoolean(GL_BINDING_CALL* eglGetNextFrameIdANDROIDProc)( @@ -336,6 +341,7 @@ eglGetFrameTimestampsANDROIDProc eglGetFrameTimestampsANDROIDFn; eglGetFrameTimestampSupportedANDROIDProc eglGetFrameTimestampSupportedANDROIDFn; + eglGetMscRateCHROMIUMProc eglGetMscRateCHROMIUMFn; eglGetNativeClientBufferANDROIDProc eglGetNativeClientBufferANDROIDFn; eglGetNextFrameIdANDROIDProc eglGetNextFrameIdANDROIDFn; eglGetPlatformDisplayProc eglGetPlatformDisplayFn; @@ -494,6 +500,10 @@ EGLDisplay dpy, EGLSurface surface, EGLint timestamp) = 0; + virtual EGLBoolean eglGetMscRateCHROMIUMFn(EGLDisplay dpy, + EGLSurface surface, + EGLint* numerator, + EGLint* denominator) = 0; virtual EGLClientBuffer eglGetNativeClientBufferANDROIDFn( const struct AHardwareBuffer* ahardwarebuffer) = 0; virtual EGLBoolean eglGetNextFrameIdANDROIDFn(EGLDisplay dpy, @@ -658,6 +668,8 @@ ::gl::g_current_egl_context->eglGetFrameTimestampsANDROIDFn #define eglGetFrameTimestampSupportedANDROID \ ::gl::g_current_egl_context->eglGetFrameTimestampSupportedANDROIDFn +#define eglGetMscRateCHROMIUM \ + ::gl::g_current_egl_context->eglGetMscRateCHROMIUMFn #define eglGetNativeClientBufferANDROID \ ::gl::g_current_egl_context->eglGetNativeClientBufferANDROIDFn #define eglGetNextFrameIdANDROID \
diff --git a/ui/gl/gl_enums_implementation_autogen.h b/ui/gl/gl_enums_implementation_autogen.h index a3e265c..d35439c8 100644 --- a/ui/gl/gl_enums_implementation_autogen.h +++ b/ui/gl/gl_enums_implementation_autogen.h
@@ -2693,26 +2693,6 @@ "GL_TEXTURE_FILTERING_HINT_CHROMIUM", }, { - 0x8AF1, - "GL_COLOR_SPACE_UNSPECIFIED_CHROMIUM", - }, - { - 0x8AF2, - "GL_COLOR_SPACE_SCRGB_LINEAR_CHROMIUM", - }, - { - 0x8AF3, - "GL_COLOR_SPACE_SRGB_CHROMIUM", - }, - { - 0x8AF4, - "GL_COLOR_SPACE_DISPLAY_P3_CHROMIUM", - }, - { - 0x8AF5, - "GL_COLOR_SPACE_HDR10_CHROMIUM", - }, - { 0x8AF6, "GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM", },
diff --git a/ui/gl/gl_mock_autogen_egl.h b/ui/gl/gl_mock_autogen_egl.h index cdc73b5b2..78278ff7 100644 --- a/ui/gl/gl_mock_autogen_egl.h +++ b/ui/gl/gl_mock_autogen_egl.h
@@ -121,6 +121,11 @@ EGLnsecsANDROID* values)); MOCK_METHOD3(GetFrameTimestampSupportedANDROID, EGLBoolean(EGLDisplay dpy, EGLSurface surface, EGLint timestamp)); +MOCK_METHOD4(GetMscRateCHROMIUM, + EGLBoolean(EGLDisplay dpy, + EGLSurface surface, + EGLint* numerator, + EGLint* denominator)); MOCK_METHOD1(GetNativeClientBufferANDROID, EGLClientBuffer(const struct AHardwareBuffer* ahardwarebuffer)); MOCK_METHOD3(GetNextFrameIdANDROID,
diff --git a/ui/gl/gl_surface_egl.cc b/ui/gl/gl_surface_egl.cc index 8702d39..6195a652 100644 --- a/ui/gl/gl_surface_egl.cc +++ b/ui/gl/gl_surface_egl.cc
@@ -266,7 +266,9 @@ } bool GetMscRate(int32_t* numerator, int32_t* denominator) override { - return false; + bool result = eglGetMscRateCHROMIUM(g_egl_display, surface_, numerator, + denominator) == EGL_TRUE; + return result; } bool IsHWClock() const override { return true; }
diff --git a/ui/ozone/platform/drm/gpu/crtc_controller.cc b/ui/ozone/platform/drm/gpu/crtc_controller.cc index ad86581..679a0b38 100644 --- a/ui/ozone/platform/drm/gpu/crtc_controller.cc +++ b/ui/ozone/platform/drm/gpu/crtc_controller.cc
@@ -14,6 +14,7 @@ #include "ui/ozone/platform/drm/gpu/drm_device.h" #include "ui/ozone/platform/drm/gpu/drm_dumb_buffer.h" #include "ui/ozone/platform/drm/gpu/drm_framebuffer.h" +#include "ui/ozone/platform/drm/gpu/drm_gpu_util.h" #include "ui/ozone/platform/drm/gpu/hardware_display_plane.h" #include "ui/ozone/platform/drm/gpu/page_flip_request.h" @@ -40,14 +41,16 @@ } DisableCursor(); - drm_->DisableCrtc(crtc_); + drm_->plane_manager()->DisableModeset(crtc_, connector_); } } bool CrtcController::Modeset(const DrmOverlayPlane& plane, - drmModeModeInfo mode) { - if (!drm_->SetCrtc(crtc_, plane.buffer->opaque_framebuffer_id(), - std::vector<uint32_t>(1, connector_), &mode)) { + const drmModeModeInfo& mode, + const ui::HardwareDisplayPlaneList& plane_list) { + if (!drm_->plane_manager()->Modeset(crtc_, + plane.buffer->opaque_framebuffer_id(), + connector_, mode, plane_list)) { PLOG(ERROR) << "Failed to modeset: crtc=" << crtc_ << " connector=" << connector_ << " framebuffer_id=" << plane.buffer->opaque_framebuffer_id() @@ -74,12 +77,15 @@ is_disabled_ = true; DisableCursor(); - return drm_->DisableCrtc(crtc_); + return drm_->plane_manager()->DisableModeset(crtc_, connector_); } bool CrtcController::AssignOverlayPlanes(HardwareDisplayPlaneList* plane_list, - const DrmOverlayPlaneList& overlays) { - DCHECK(!is_disabled_); + const DrmOverlayPlaneList& overlays, + bool is_modesetting) { + // If we're in the process of modesetting, the CRTC is still disabled. + // Once the modeset is done, we expect it to be enabled. + DCHECK(is_modesetting || !is_disabled_); const DrmOverlayPlane* primary = DrmOverlayPlane::GetPrimaryPlane(overlays); if (primary && !drm_->plane_manager()->ValidatePrimarySize(*primary, mode_)) {
diff --git a/ui/ozone/platform/drm/gpu/crtc_controller.h b/ui/ozone/platform/drm/gpu/crtc_controller.h index 0e3d59a..f4c10965 100644 --- a/ui/ozone/platform/drm/gpu/crtc_controller.h +++ b/ui/ozone/platform/drm/gpu/crtc_controller.h
@@ -40,15 +40,19 @@ const scoped_refptr<DrmDevice>& drm() const { return drm_; } bool is_disabled() const { return is_disabled_; } - // Perform the initial modesetting operation using |plane| as the buffer for - // the primary plane. The CRTC configuration is specified by |mode|. - bool Modeset(const DrmOverlayPlane& plane, drmModeModeInfo mode); + // Sets up all props used in atomic modesets and performs the initial + // modesetting operation using |plane| as the buffer for the primary plane + // with the CRTC configuration is specified by |mode|. + bool Modeset(const DrmOverlayPlane& plane, + const drmModeModeInfo& mode, + const ui::HardwareDisplayPlaneList& plane_list); // Disables the controller. bool Disable(); bool AssignOverlayPlanes(HardwareDisplayPlaneList* plane_list, - const DrmOverlayPlaneList& planes); + const DrmOverlayPlaneList& planes, + bool is_modesetting); // Returns a vector of format modifiers for the given fourcc format // on this CRTCs primary plane. A format modifier describes the
diff --git a/ui/ozone/platform/drm/gpu/drm_device.cc b/ui/ozone/platform/drm/gpu/drm_device.cc index 9e049a8..fea370ea 100644 --- a/ui/ozone/platform/drm/gpu/drm_device.cc +++ b/ui/ozone/platform/drm/gpu/drm_device.cc
@@ -9,6 +9,7 @@ #include <unistd.h> #include <xf86drm.h> #include <xf86drmMode.h> + #include <memory> #include <utility> @@ -146,7 +147,7 @@ class DrmDevice::PageFlipManager { public: PageFlipManager() : next_id_(0) {} - ~PageFlipManager() {} + ~PageFlipManager() = default; void OnPageFlip(uint32_t frame, base::TimeTicks timestamp, uint64_t id) { auto it = @@ -248,7 +249,7 @@ is_primary_device_(is_primary_device), gbm_(std::move(gbm)) {} -DrmDevice::~DrmDevice() {} +DrmDevice::~DrmDevice() = default; bool DrmDevice::Initialize() { // Ignore devices that cannot perform modesetting. @@ -302,36 +303,21 @@ bool DrmDevice::SetCrtc(uint32_t crtc_id, uint32_t framebuffer, std::vector<uint32_t> connectors, - drmModeModeInfo* mode) { + drmModeModeInfo mode) { DCHECK(file_.IsValid()); DCHECK(!connectors.empty()); - DCHECK(mode); TRACE_EVENT2("drm", "DrmDevice::SetCrtc", "crtc", crtc_id, "size", - gfx::Size(mode->hdisplay, mode->vdisplay).ToString()); + gfx::Size(mode.hdisplay, mode.vdisplay).ToString()); return !drmModeSetCrtc(file_.GetPlatformFile(), crtc_id, framebuffer, 0, 0, - connectors.data(), connectors.size(), mode); -} - -bool DrmDevice::SetCrtc(drmModeCrtc* crtc, std::vector<uint32_t> connectors) { - DCHECK(file_.IsValid()); - // If there's no buffer then the CRTC was disabled. - if (!crtc->buffer_id) - return DisableCrtc(crtc->crtc_id); - - DCHECK(!connectors.empty()); - - TRACE_EVENT1("drm", "DrmDevice::RestoreCrtc", "crtc", crtc->crtc_id); - return !drmModeSetCrtc(file_.GetPlatformFile(), crtc->crtc_id, - crtc->buffer_id, crtc->x, crtc->y, connectors.data(), - connectors.size(), &crtc->mode); + connectors.data(), connectors.size(), &mode); } bool DrmDevice::DisableCrtc(uint32_t crtc_id) { DCHECK(file_.IsValid()); TRACE_EVENT1("drm", "DrmDevice::DisableCrtc", "crtc", crtc_id); - return !drmModeSetCrtc(file_.GetPlatformFile(), crtc_id, 0, 0, 0, NULL, 0, - NULL); + return !drmModeSetCrtc(file_.GetPlatformFile(), crtc_id, 0, 0, 0, nullptr, 0, + nullptr); } ScopedDrmConnectorPtr DrmDevice::GetConnector(uint32_t connector_id) { @@ -432,7 +418,8 @@ property_id, value); } -ScopedDrmPropertyBlob DrmDevice::CreatePropertyBlob(void* blob, size_t size) { +ScopedDrmPropertyBlob DrmDevice::CreatePropertyBlob(const void* blob, + size_t size) { uint32_t id = 0; int ret = drmModeCreatePropertyBlob(file_.GetPlatformFile(), blob, size, &id); DCHECK(!ret && id);
diff --git a/ui/ozone/platform/drm/gpu/drm_device.h b/ui/ozone/platform/drm/gpu/drm_device.h index d82fb1c..85badb31 100644 --- a/ui/ozone/platform/drm/gpu/drm_device.h +++ b/ui/ozone/platform/drm/gpu/drm_device.h
@@ -7,6 +7,7 @@ #include <stddef.h> #include <stdint.h> + #include <memory> #include <vector> @@ -106,12 +107,7 @@ virtual bool SetCrtc(uint32_t crtc_id, uint32_t framebuffer, std::vector<uint32_t> connectors, - drmModeModeInfo* mode); - - // Used to set a specific configuration to the CRTC. Normally this function - // would be called with a CRTC saved state (from |GetCrtc|) to restore it to - // its original configuration. - virtual bool SetCrtc(drmModeCrtc* crtc, std::vector<uint32_t> connectors); + drmModeModeInfo mode); virtual bool DisableCrtc(uint32_t crtc_id); @@ -168,7 +164,8 @@ uint64_t value); // Creates a property blob with data |blob| of size |size|. - virtual ScopedDrmPropertyBlob CreatePropertyBlob(void* blob, size_t size); + virtual ScopedDrmPropertyBlob CreatePropertyBlob(const void* blob, + size_t size); virtual void DestroyPropertyBlob(uint32_t id);
diff --git a/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc b/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc index 2a9087f0..e6a3c9a0 100644 --- a/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc +++ b/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc
@@ -40,14 +40,14 @@ constexpr uint32_t kPlaneIdBase = 200; constexpr uint32_t kInFormatsBlobPropIdBase = 400; -constexpr uint32_t kTypePropId = 300; -constexpr uint32_t kInFormatsPropId = 301; +constexpr uint32_t kTypePropId = 3010; +constexpr uint32_t kInFormatsPropId = 3011; } // namespace class DrmOverlayValidatorTest : public testing::Test { public: - DrmOverlayValidatorTest() {} + DrmOverlayValidatorTest() = default; void SetUp() override; void TearDown() override; @@ -166,29 +166,51 @@ const std::vector<CrtcState>& crtc_states) { std::vector<ui::MockDrmDevice::CrtcProperties> crtc_properties( crtc_states.size()); - std::vector<ui::MockDrmDevice::PlaneProperties> plane_properties; - std::map<uint32_t, std::string> property_names = { + std::map<uint32_t, std::string> crtc_property_names = { + {1000, "ACTIVE"}, + {1001, "MODE_ID"}, + }; + + std::vector<ui::MockDrmDevice::ConnectorProperties> connector_properties( + crtc_states.size()); + std::map<uint32_t, std::string> connector_property_names = { + {2000, "CRTC_ID"}, + }; + + std::vector<ui::MockDrmDevice::PlaneProperties> plane_properties = {}; + + constexpr uint32_t kPlaneCrtcidId = 3000; + std::map<uint32_t, std::string> plane_property_names = { // Add all required properties. - {1000, "CRTC_ID"}, - {1001, "CRTC_X"}, - {1002, "CRTC_Y"}, - {1003, "CRTC_W"}, - {1004, "CRTC_H"}, - {1005, "FB_ID"}, - {1006, "SRC_X"}, - {1007, "SRC_Y"}, - {1008, "SRC_W"}, - {1009, "SRC_H"}, + {kPlaneCrtcidId, "CRTC_ID"}, + {3001, "CRTC_X"}, + {3002, "CRTC_Y"}, + {3003, "CRTC_W"}, + {3004, "CRTC_H"}, + {3005, "FB_ID"}, + {3006, "SRC_X"}, + {3007, "SRC_Y"}, + {3008, "SRC_W"}, + {3009, "SRC_H"}, // Defines some optional properties we use for convenience. {kTypePropId, "type"}, - {kInFormatsPropId, "IN_FORMATS"}, - }; + {kInFormatsPropId, "IN_FORMATS"}}; uint32_t plane_id = kPlaneIdBase; uint32_t property_id = kInFormatsBlobPropIdBase; for (size_t crtc_idx = 0; crtc_idx < crtc_states.size(); ++crtc_idx) { crtc_properties[crtc_idx].id = kCrtcIdBase + crtc_idx; + for (const auto& pair : crtc_property_names) { + crtc_properties[crtc_idx].properties.push_back( + {/* .id = */ pair.first, /* .value = */ 0}); + } + + connector_properties[crtc_idx].id = kConnectorIdBase + crtc_idx; + for (const auto& pair : connector_property_names) { + connector_properties[crtc_idx].properties.push_back( + {/* .id = */ pair.first, /* .value = */ 0}); + } std::vector<ui::MockDrmDevice::PlaneProperties> crtc_plane_properties( crtc_states[crtc_idx].planes.size()); @@ -197,29 +219,44 @@ crtc_plane_properties[plane_idx].id = plane_id++; crtc_plane_properties[plane_idx].crtc_mask = 1 << crtc_idx; - for (const auto& pair : property_names) { + for (const auto& pair : plane_property_names) { uint64_t value = 0; - if (pair.first == kTypePropId) { - value = - plane_idx == 0 ? DRM_PLANE_TYPE_PRIMARY : DRM_PLANE_TYPE_OVERLAY; - } else if (pair.first == kInFormatsPropId) { - value = property_id++; - drm_->SetPropertyBlob(ui::MockDrmDevice::AllocateInFormatsBlob( - value, crtc_states[crtc_idx].planes[plane_idx].formats, - std::vector<drm_format_modifier>())); + switch (pair.first) { + case kTypePropId: + value = plane_idx == 0 ? DRM_PLANE_TYPE_PRIMARY + : DRM_PLANE_TYPE_OVERLAY; + break; + case kInFormatsPropId: + value = property_id++; + drm_->SetPropertyBlob(ui::MockDrmDevice::AllocateInFormatsBlob( + value, crtc_states[crtc_idx].planes[plane_idx].formats, + std::vector<drm_format_modifier>())); + break; + case kPlaneCrtcidId: + value = crtc_properties[crtc_idx].id; + break; + default: + break; } crtc_plane_properties[plane_idx].properties.push_back( {/* .id = */ pair.first, /* .value = */ value}); } } - plane_properties.insert(plane_properties.end(), crtc_plane_properties.begin(), crtc_plane_properties.end()); } - drm_->InitializeState(crtc_properties, plane_properties, property_names, + std::map<uint32_t, std::string> property_names = {}; + property_names.insert(crtc_property_names.begin(), crtc_property_names.end()); + property_names.insert(connector_property_names.begin(), + connector_property_names.end()); + property_names.insert(plane_property_names.begin(), + plane_property_names.end()); + + drm_->InitializeState(crtc_properties, connector_properties, plane_properties, + property_names, /* use_atomic= */ true); }
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_controller.cc b/ui/ozone/platform/drm/gpu/hardware_display_controller.cc index 703f870..27e1e3d 100644 --- a/ui/ozone/platform/drm/gpu/hardware_display_controller.cc +++ b/ui/ozone/platform/drm/gpu/hardware_display_controller.cc
@@ -7,6 +7,7 @@ #include <drm.h> #include <string.h> #include <xf86drm.h> + #include <memory> #include <utility> @@ -65,29 +66,39 @@ AllocateCursorBuffers(); } -HardwareDisplayController::~HardwareDisplayController() { -} +HardwareDisplayController::~HardwareDisplayController() = default; bool HardwareDisplayController::Modeset(const DrmOverlayPlane& primary, - drmModeModeInfo mode) { + const drmModeModeInfo& mode) { TRACE_EVENT0("drm", "HDC::Modeset"); - DCHECK(primary.buffer.get()); - bool status = true; - for (const auto& controller : crtc_controllers_) - status &= controller->Modeset(primary, mode); - - is_disabled_ = false; - ResetCursor(); - OnModesetComplete(primary); - return status; + return ModesetCrtc(primary, /*use_current_crtc_mode=*/false, mode); } bool HardwareDisplayController::Enable(const DrmOverlayPlane& primary) { TRACE_EVENT0("drm", "HDC::Enable"); + drmModeModeInfo empty_mode = {}; + return ModesetCrtc(primary, /*use_current_crtc_mode=*/true, empty_mode); +} + +bool HardwareDisplayController::ModesetCrtc(const DrmOverlayPlane& primary, + bool use_current_crtc_mode, + const drmModeModeInfo& mode) { DCHECK(primary.buffer.get()); bool status = true; - for (const auto& controller : crtc_controllers_) - status &= controller->Modeset(primary, controller->mode()); + + HardwareDisplayPlaneList hardware_planes = {}; + hardware_planes.old_plane_list = GetAllOwnedPlanes(); + GetDrmDevice()->plane_manager()->BeginFrame(hardware_planes); + + DrmOverlayPlaneList plane_list = {}; + plane_list.push_back(primary.Clone()); + for (const auto& controller : crtc_controllers_) { + status &= controller->AssignOverlayPlanes(&hardware_planes, plane_list, + /*is_modesetting=*/true); + drmModeModeInfo modeset_mode = + use_current_crtc_mode ? controller->mode() : mode; + status &= controller->Modeset(primary, modeset_mode, hardware_planes); + } is_disabled_ = false; ResetCursor(); @@ -99,6 +110,10 @@ TRACE_EVENT0("drm", "HDC::Disable"); for (const auto& controller : crtc_controllers_) + // TODO(crbug.com/1015104): Modeset and Disable operations should go + // together. The current split is due to how the legacy/atomic split + // evolved. It should be cleaned up under the more generic + // HardwareDisplayPlaneManager{Legacy,Atomic} calls. controller->Disable(); bool ret = GetDrmDevice()->plane_manager()->DisableOverlayPlanes( @@ -170,11 +185,12 @@ bool status = true; for (const auto& controller : crtc_controllers_) { - status &= controller->AssignOverlayPlanes(&hardware_planes, pending_planes); + status &= controller->AssignOverlayPlanes(&hardware_planes, pending_planes, + /*is_modesetting=*/false); } status &= GetDrmDevice()->plane_manager()->Commit( - hardware_planes, page_flip_request, out_fence); + hardware_planes, /*modeset=*/false, page_flip_request, out_fence); return status; }
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_controller.h b/ui/ozone/platform/drm/gpu/hardware_display_controller.h index ef0adba..ba963ce 100644 --- a/ui/ozone/platform/drm/gpu/hardware_display_controller.h +++ b/ui/ozone/platform/drm/gpu/hardware_display_controller.h
@@ -95,7 +95,7 @@ // Performs the initial CRTC configuration. If successful, it will display the // framebuffer for |primary| with |mode|. - bool Modeset(const DrmOverlayPlane& primary, drmModeModeInfo mode); + bool Modeset(const DrmOverlayPlane& primary, const drmModeModeInfo& mode); // Performs a CRTC configuration re-using the modes from the CRTCs. bool Enable(const DrmOverlayPlane& primary); @@ -169,6 +169,10 @@ const gfx::PresentationFeedback& presentation_feedback); private: + bool ModesetCrtc(const DrmOverlayPlane& primary, + bool use_current_mode, + const drmModeModeInfo& mode); + void OnModesetComplete(const DrmOverlayPlane& primary); bool ScheduleOrTestPageFlip(const DrmOverlayPlaneList& plane_list, scoped_refptr<PageFlipRequest> page_flip_request,
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc b/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc index 546f51eb..e4281849 100644 --- a/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc +++ b/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc
@@ -27,8 +27,8 @@ namespace { // Create a basic mode for a 6x4 screen. -const drmModeModeInfo kDefaultMode = - {0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, {'\0'}}; +const drmModeModeInfo kDefaultMode = {0, 6, 0, 0, 0, 0, 4, 0, + 0, 0, 0, 0, 0, 0, {'\0'}}; constexpr uint32_t kCrtcIdBase = 1; constexpr uint32_t kPrimaryCrtc = kCrtcIdBase; @@ -36,6 +36,9 @@ constexpr uint32_t kPrimaryConnector = 10; constexpr uint32_t kSecondaryConnector = 11; constexpr uint32_t kPlaneOffset = 1000; +constexpr uint32_t kActivePropId = 1001; +constexpr uint32_t kModePropId = 1002; +constexpr uint32_t kCrtcIdPropId = 2000; const gfx::Size kDefaultModeSize(kDefaultMode.hdisplay, kDefaultMode.vdisplay); const gfx::Size kOverlaySize(kDefaultMode.hdisplay / 2, @@ -104,24 +107,34 @@ } void HardwareDisplayControllerTest::InitializeDrmDevice(bool use_atomic) { - constexpr uint32_t kTypePropId = 300; - constexpr uint32_t kInFormatsPropId = 301; - constexpr uint32_t kInFormatsBlobPropId = 400; + constexpr uint32_t kTypePropId = 4000; + constexpr uint32_t kInFormatsPropId = 4001; + constexpr uint32_t kInFormatsBlobPropId = 4002; std::vector<ui::MockDrmDevice::CrtcProperties> crtc_properties(2); - std::vector<ui::MockDrmDevice::PlaneProperties> plane_properties; - std::map<uint32_t, std::string> property_names = { + std::map<uint32_t, std::string> crtc_property_names = { + {kActivePropId, "ACTIVE"}, + {kModePropId, "MODE_ID"}, + }; + + std::vector<ui::MockDrmDevice::ConnectorProperties> connector_properties(2); + std::map<uint32_t, std::string> connector_property_names = { + {kCrtcIdPropId, "CRTC_ID"}, + }; + + std::vector<ui::MockDrmDevice::PlaneProperties> plane_properties = {}; + std::map<uint32_t, std::string> plane_property_names = { // Add all required properties. - {200, "CRTC_ID"}, - {201, "CRTC_X"}, - {202, "CRTC_Y"}, - {203, "CRTC_W"}, - {204, "CRTC_H"}, - {205, "FB_ID"}, - {206, "SRC_X"}, - {207, "SRC_Y"}, - {208, "SRC_W"}, - {209, "SRC_H"}, + {3000, "CRTC_ID"}, + {3001, "CRTC_X"}, + {3002, "CRTC_Y"}, + {3003, "CRTC_W"}, + {3004, "CRTC_H"}, + {3005, "FB_ID"}, + {3006, "SRC_X"}, + {3007, "SRC_Y"}, + {3008, "SRC_W"}, + {3009, "SRC_H"}, // Add some optional properties we use for convenience. {kTypePropId, "type"}, {kInFormatsPropId, "IN_FORMATS"}, @@ -129,6 +142,17 @@ for (size_t i = 0; i < crtc_properties.size(); ++i) { crtc_properties[i].id = kCrtcIdBase + i; + for (const auto& pair : crtc_property_names) { + crtc_properties[i].properties.push_back( + {/* .id = */ pair.first, /* .value = */ 0}); + } + + connector_properties[i].id = + i == 0 ? kPrimaryConnector : kSecondaryConnector; + for (const auto& pair : connector_property_names) { + connector_properties[i].properties.push_back( + {/* .id = */ pair.first, /* .value = */ 0}); + } for (size_t j = 0; j < 2; ++j) { const uint32_t offset = plane_properties.size(); @@ -136,7 +160,7 @@ ui::MockDrmDevice::PlaneProperties plane; plane.id = kPlaneOffset + offset; plane.crtc_mask = 1 << i; - for (const auto& pair : property_names) { + for (const auto& pair : plane_property_names) { uint32_t value = 0; if (pair.first == kTypePropId) value = j == 0 ? DRM_PLANE_TYPE_PRIMARY : DRM_PLANE_TYPE_OVERLAY; @@ -163,8 +187,14 @@ } } - drm_->InitializeState(crtc_properties, plane_properties, property_names, - use_atomic); + std::map<uint32_t, std::string> property_names = {}; + property_names.insert(crtc_property_names.begin(), crtc_property_names.end()); + property_names.insert(connector_property_names.begin(), + connector_property_names.end()); + property_names.insert(plane_property_names.begin(), + plane_property_names.end()); + drm_->InitializeState(crtc_properties, connector_properties, plane_properties, + property_names, use_atomic); } void HardwareDisplayControllerTest::SchedulePageFlip( @@ -253,10 +283,63 @@ internal_modifiers.end()); } +TEST_F(HardwareDisplayControllerTest, CheckModesettingSetsProps) { + ui::DrmOverlayPlane plane1(CreateBuffer(), nullptr); + + EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); + + ui::DrmOverlayPlane plane2(CreateBuffer(), nullptr); + std::vector<ui::DrmOverlayPlane> planes = {}; + planes.push_back(plane2.Clone()); + + SchedulePageFlip(std::move(planes)); + + // Test props values after modesetting. + ui::DrmDevice::Property connector_prop_crtc_id = {}; + ui::ScopedDrmObjectPropertyPtr connector_props = + drm_->GetObjectProperties(kPrimaryConnector, DRM_MODE_OBJECT_CONNECTOR); + ui::GetDrmPropertyForName(drm_.get(), connector_props.get(), "CRTC_ID", + &connector_prop_crtc_id); + EXPECT_EQ(kCrtcIdPropId, connector_prop_crtc_id.id); + EXPECT_EQ(kCrtcIdBase, connector_prop_crtc_id.value); + + ui::DrmDevice::Property crtc_prop_for_name = {}; + ui::ScopedDrmObjectPropertyPtr crtc_props = + drm_->GetObjectProperties(kPrimaryCrtc, DRM_MODE_OBJECT_CRTC); + GetDrmPropertyForName(drm_.get(), crtc_props.get(), "ACTIVE", + &crtc_prop_for_name); + EXPECT_EQ(kActivePropId, crtc_prop_for_name.id); + EXPECT_EQ(1U, crtc_prop_for_name.value); + + GetDrmPropertyForName(drm_.get(), crtc_props.get(), "MODE_ID", + &crtc_prop_for_name); + EXPECT_EQ(kModePropId, crtc_prop_for_name.id); + + // Test props values after disabling. + controller_->Disable(); + + connector_props = + drm_->GetObjectProperties(kPrimaryConnector, DRM_MODE_OBJECT_CONNECTOR); + ui::GetDrmPropertyForName(drm_.get(), connector_props.get(), "CRTC_ID", + &connector_prop_crtc_id); + EXPECT_EQ(0U, connector_prop_crtc_id.value); + + crtc_props = drm_->GetObjectProperties(kPrimaryCrtc, DRM_MODE_OBJECT_CRTC); + GetDrmPropertyForName(drm_.get(), crtc_props.get(), "ACTIVE", + &crtc_prop_for_name); + EXPECT_EQ(0U, crtc_prop_for_name.value); + + crtc_props = drm_->GetObjectProperties(kPrimaryCrtc, DRM_MODE_OBJECT_CRTC); + GetDrmPropertyForName(drm_.get(), crtc_props.get(), "MODE_ID", + &crtc_prop_for_name); + EXPECT_EQ(0U, crtc_prop_for_name.value); +} + TEST_F(HardwareDisplayControllerTest, CheckStateAfterPageFlip) { ui::DrmOverlayPlane plane1(CreateBuffer(), nullptr); EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); + EXPECT_EQ(1, drm_->get_commit_count()); ui::DrmOverlayPlane plane2(CreateBuffer(), nullptr); std::vector<ui::DrmOverlayPlane> planes; @@ -270,13 +353,15 @@ EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_); EXPECT_EQ(1, page_flips_); - EXPECT_EQ(1, drm_->get_commit_count()); + EXPECT_EQ(2, drm_->get_commit_count()); // Verify only the primary display have a valid framebuffer. EXPECT_NE(0u, GetPlanePropertyValue(kPlaneOffset, "FB_ID")); EXPECT_EQ(0u, GetPlanePropertyValue(kPlaneOffset + 1, "FB_ID")); } TEST_F(HardwareDisplayControllerTest, CheckStateIfModesetFails) { + InitializeDrmDevice(/* use_atomic */ false); + drm_->set_set_crtc_expectation(false); ui::DrmOverlayPlane plane(CreateBuffer(), nullptr); @@ -284,20 +369,6 @@ EXPECT_FALSE(controller_->Modeset(plane, kDefaultMode)); } -TEST_F(HardwareDisplayControllerTest, CheckStateIfPageFlipFails) { - drm_->set_commit_expectation(false); - - ui::DrmOverlayPlane plane1(CreateBuffer(), nullptr); - - EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); - - ui::DrmOverlayPlane plane2(CreateBuffer(), nullptr); - std::vector<ui::DrmOverlayPlane> planes; - planes.push_back(plane2.Clone()); - EXPECT_DEATH_IF_SUPPORTED(SchedulePageFlip(std::move(planes)), - "SchedulePageFlip failed"); -} - TEST_F(HardwareDisplayControllerTest, CheckOverlayPresent) { ui::DrmOverlayPlane plane1(CreateBuffer(), nullptr); ui::DrmOverlayPlane plane2( @@ -305,6 +376,7 @@ gfx::Rect(kOverlaySize), gfx::RectF(kDefaultModeSizeF), true, nullptr); EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); + EXPECT_EQ(1, drm_->get_commit_count()); std::vector<ui::DrmOverlayPlane> planes; planes.push_back(plane1.Clone()); @@ -314,7 +386,7 @@ drm_->RunCallbacks(); EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_); EXPECT_EQ(1, page_flips_); - EXPECT_EQ(1, drm_->get_commit_count()); + EXPECT_EQ(2, drm_->get_commit_count()); // Verify both planes on the primary display have a valid framebuffer. EXPECT_NE(0u, GetPlanePropertyValue(kPlaneOffset, "FB_ID")); EXPECT_NE(0u, GetPlanePropertyValue(kPlaneOffset + 1, "FB_ID")); @@ -327,13 +399,14 @@ gfx::Rect(kOverlaySize), gfx::RectF(kDefaultModeSizeF), true, nullptr); EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); + EXPECT_EQ(1, drm_->get_commit_count()); std::vector<ui::DrmOverlayPlane> planes; planes.push_back(plane1.Clone()); planes.push_back(plane2.Clone()); SchedulePageFlip(ui::DrmOverlayPlane::Clone(planes)); - EXPECT_EQ(1, drm_->get_commit_count()); + EXPECT_EQ(2, drm_->get_commit_count()); // Verify both planes on the primary display have a valid framebuffer. EXPECT_NE(0u, GetPlanePropertyValue(kPlaneOffset, "FB_ID")); EXPECT_NE(0u, GetPlanePropertyValue(kPlaneOffset + 1, "FB_ID")); @@ -343,14 +416,14 @@ drm_->RunCallbacks(); EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_); EXPECT_EQ(1, page_flips_); - EXPECT_EQ(2, drm_->get_commit_count()); + EXPECT_EQ(3, drm_->get_commit_count()); // Regular flips should continue on normally. SchedulePageFlip(ui::DrmOverlayPlane::Clone(planes)); drm_->RunCallbacks(); EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_); EXPECT_EQ(2, page_flips_); - EXPECT_EQ(3, drm_->get_commit_count()); + EXPECT_EQ(4, drm_->get_commit_count()); // Verify both planes on the primary display have a valid framebuffer. EXPECT_NE(0u, GetPlanePropertyValue(kPlaneOffset, "FB_ID")); EXPECT_NE(0u, GetPlanePropertyValue(kPlaneOffset + 1, "FB_ID")); @@ -380,7 +453,7 @@ ui::DrmOverlayPlane plane1(CreateBuffer(), nullptr); EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); - EXPECT_EQ(2, drm_->get_set_crtc_call_count()); + EXPECT_EQ(2, drm_->get_commit_count()); ui::DrmOverlayPlane plane2(CreateBuffer(), nullptr); std::vector<ui::DrmOverlayPlane> planes; @@ -389,7 +462,7 @@ drm_->RunCallbacks(); EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_); EXPECT_EQ(1, page_flips_); - EXPECT_EQ(1, drm_->get_commit_count()); + EXPECT_EQ(3, drm_->get_commit_count()); // Verify only the displays have a valid framebuffer on the primary plane. // First display: EXPECT_NE(0u, GetPlanePropertyValue(kPlaneOffset, "FB_ID")); @@ -534,10 +607,10 @@ } TEST_F(HardwareDisplayControllerTest, FailPageFlipping) { - drm_->set_commit_expectation(false); - ui::DrmOverlayPlane plane1(CreateBuffer(), nullptr); EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode)); + + drm_->set_commit_expectation(false); std::vector<ui::DrmOverlayPlane> planes; planes.push_back(plane1.Clone()); EXPECT_DEATH_IF_SUPPORTED(SchedulePageFlip(std::move(planes)),
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager.cc b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager.cc index 36c87f9d..8b2ae3e 100644 --- a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager.cc +++ b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager.cc
@@ -28,8 +28,7 @@ atomic_property_set.reset(drmModeAtomicAlloc()); } -HardwareDisplayPlaneList::~HardwareDisplayPlaneList() { -} +HardwareDisplayPlaneList::~HardwareDisplayPlaneList() = default; HardwareDisplayPlaneList::PageFlipInfo::PageFlipInfo(uint32_t crtc_id, uint32_t framebuffer) @@ -38,8 +37,7 @@ HardwareDisplayPlaneList::PageFlipInfo::PageFlipInfo( const PageFlipInfo& other) = default; -HardwareDisplayPlaneList::PageFlipInfo::~PageFlipInfo() { -} +HardwareDisplayPlaneList::PageFlipInfo::~PageFlipInfo() = default; HardwareDisplayPlaneManager::CrtcState::CrtcState() = default; @@ -50,8 +48,7 @@ HardwareDisplayPlaneManager::HardwareDisplayPlaneManager(DrmDevice* drm) : drm_(drm) {} -HardwareDisplayPlaneManager::~HardwareDisplayPlaneManager() { -} +HardwareDisplayPlaneManager::~HardwareDisplayPlaneManager() = default; bool HardwareDisplayPlaneManager::Initialize() { // Try to get all of the planes if possible, so we don't have to try to @@ -97,9 +94,19 @@ } int HardwareDisplayPlaneManager::LookupCrtcIndex(uint32_t crtc_id) const { - for (size_t i = 0; i < crtc_state_.size(); ++i) + for (size_t i = 0; i < crtc_state_.size(); ++i) { if (crtc_state_[i].properties.id == crtc_id) return i; + } + return -1; +} + +int HardwareDisplayPlaneManager::LookupConnectorIndex( + uint32_t connector_id) const { + for (size_t i = 0; i < connectors_props_.size(); ++i) { + if (connectors_props_[i].id == connector_id) + return i; + } return -1; } @@ -178,8 +185,9 @@ // This returns a number in 16.16 fixed point, required by the DRM overlay // APIs. - auto to_fixed_point = - [](double v) -> uint32_t { return v * kFixedPointScaleValue; }; + auto to_fixed_point = [](double v) -> uint32_t { + return v * kFixedPointScaleValue; + }; fixed_point_rect = gfx::Rect(to_fixed_point(crop_rect.x()), to_fixed_point(crop_rect.y()), to_fixed_point(crop_rect.width()), @@ -324,6 +332,23 @@ return false; } + for (int i = 0; i < resources->count_connectors; ++i) { + ConnectorProperties state_props; + state_props.id = resources->connectors[i]; + + ScopedDrmObjectPropertyPtr props(drm_->GetObjectProperties( + resources->connectors[i], DRM_MODE_OBJECT_CONNECTOR)); + if (!props) { + PLOG(ERROR) << "Failed to get Connector properties for connector=" + << state_props.id; + continue; + } + GetDrmPropertyForName(drm_, props.get(), "CRTC_ID", &state_props.crtc_id); + DCHECK(state_props.crtc_id.id); + + connectors_props_.emplace_back(std::move(state_props)); + } + unsigned int num_crtcs_with_out_fence_ptr = 0; for (int i = 0; i < resources->count_crtcs; ++i) { @@ -338,6 +363,13 @@ continue; } + GetDrmPropertyForName(drm_, props.get(), "ACTIVE", + &state.properties.active); + DCHECK(state.properties.active.id); + GetDrmPropertyForName(drm_, props.get(), "MODE_ID", + &state.properties.mode_id); + DCHECK(state.properties.mode_id.id); + // These properties are optional. If they don't exist we can tell by the // invalid ID. GetDrmPropertyForName(drm_, props.get(), "CTM", &state.properties.ctm);
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager.h b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager.h index c19c4a46c..5fb7bf16 100644 --- a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager.h +++ b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager.h
@@ -8,6 +8,7 @@ #include <stddef.h> #include <stdint.h> #include <xf86drmMode.h> + #include <memory> #include <vector> @@ -56,13 +57,22 @@ class HardwareDisplayPlaneManager { public: - HardwareDisplayPlaneManager(DrmDevice* drm); + explicit HardwareDisplayPlaneManager(DrmDevice* drm); virtual ~HardwareDisplayPlaneManager(); // This parses information from the drm driver, adding any new planes // or crtcs found. bool Initialize(); + // Performs modesetting, either atomic or legacy, depending on the device. + virtual bool Modeset(uint32_t crtc_id, + uint32_t framebuffer_id, + uint32_t connector_id, + const drmModeModeInfo& mode, + const HardwareDisplayPlaneList& plane_list) = 0; + + virtual bool DisableModeset(uint32_t crtc_id, uint32_t connector) = 0; + // Clears old frame state out. Must be called before any AssignOverlayPlanes // calls. void BeginFrame(const HardwareDisplayPlaneList& plane_list); @@ -88,7 +98,7 @@ uint32_t crtc_id); // Commit the plane states in |plane_list|. - // + // if |should_modeset| is set, it only modesets without page flipping. // If |page_flip_request| is null, this tests the plane configuration without // submitting it. // The fence returned in |out_fence| will signal when the currently scanned @@ -96,6 +106,7 @@ // |page_flip_request|. Note that the returned fence may be a nullptr // if the system doesn't support out fences. virtual bool Commit(const HardwareDisplayPlaneList& plane_list, + bool should_modeset, scoped_refptr<PageFlipRequest> page_flip_request, std::unique_ptr<gfx::GpuFence>* out_fence) = 0; @@ -136,10 +147,16 @@ const std::vector<uint32_t>& crtcs); protected: + struct ConnectorProperties { + uint32_t id; + DrmDevice::Property crtc_id; + }; + struct CrtcProperties { // Unique identifier for the CRTC. This must be greater than 0 to be valid. uint32_t id; - + DrmDevice::Property active; + DrmDevice::Property mode_id; // Optional properties. DrmDevice::Property ctm; DrmDevice::Property gamma_lut; @@ -185,8 +202,10 @@ uint32_t crtc_index, const DrmOverlayPlane& overlay) const; - // Convert |crtc_id| into an index, returning -1 if the ID couldn't be found. + // Convert |crtc/connector_id| into an index, returning -1 if the ID couldn't + // be found. int LookupCrtcIndex(uint32_t crtc_id) const; + int LookupConnectorIndex(uint32_t connector_idx) const; // Returns true if |plane| can support |overlay| and compatible with // |crtc_index|. @@ -211,6 +230,8 @@ std::vector<std::unique_ptr<HardwareDisplayPlane>> planes_; std::vector<CrtcState> crtc_state_; + std::vector<ConnectorProperties> connectors_props_; + std::vector<uint32_t> supported_formats_; DISALLOW_COPY_AND_ASSIGN(HardwareDisplayPlaneManager);
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_atomic.cc b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_atomic.cc index 95cc188..fa7717a 100644 --- a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_atomic.cc +++ b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_atomic.cc
@@ -7,6 +7,7 @@ #include <sync/sync.h> #include <xf86drm.h> #include <xf86drmMode.h> + #include <memory> #include <utility> @@ -57,28 +58,92 @@ DrmDevice* drm) : HardwareDisplayPlaneManager(drm) {} -HardwareDisplayPlaneManagerAtomic::~HardwareDisplayPlaneManagerAtomic() { +HardwareDisplayPlaneManagerAtomic::~HardwareDisplayPlaneManagerAtomic() = + default; + +bool HardwareDisplayPlaneManagerAtomic::Modeset( + uint32_t crtc_id, + uint32_t framebuffer_id, + uint32_t connector_id, + const drmModeModeInfo& mode, + const HardwareDisplayPlaneList& plane_list) { + const int connector_idx = LookupConnectorIndex(connector_id); + DCHECK_GE(connector_idx, 0); + connectors_props_[connector_idx].crtc_id.value = crtc_id; + bool res = + AddPropertyIfValid(plane_list.atomic_property_set.get(), connector_id, + connectors_props_[connector_idx].crtc_id); + + const int crtc_idx = LookupCrtcIndex(crtc_id); + DCHECK_GE(crtc_idx, 0); + + crtc_state_[crtc_idx].properties.active.value = 1UL; + ScopedDrmPropertyBlob mode_blob = + drm_->CreatePropertyBlob(&mode, sizeof(mode)); + crtc_state_[crtc_idx].properties.mode_id.value = + mode_blob ? mode_blob->id() : 0; + + res &= AddPropertyIfValid(plane_list.atomic_property_set.get(), crtc_id, + crtc_state_[crtc_idx].properties.active); + res &= AddPropertyIfValid(plane_list.atomic_property_set.get(), crtc_id, + crtc_state_[crtc_idx].properties.mode_id); + + DCHECK(res); + return Commit(plane_list, /*should_modeset=*/true, + /*page_flip_request=*/nullptr, + /*out_fence=*/nullptr); +} + +bool HardwareDisplayPlaneManagerAtomic::DisableModeset(uint32_t crtc, + uint32_t connector) { + ScopedDrmAtomicReqPtr property_set(drmModeAtomicAlloc()); + + const int connector_idx = LookupConnectorIndex(connector); + DCHECK_GE(connector_idx, 0); + connectors_props_[connector_idx].crtc_id.value = 0UL; + bool res = AddPropertyIfValid(property_set.get(), connector, + connectors_props_[connector_idx].crtc_id); + + const int crtc_idx = LookupCrtcIndex(crtc); + DCHECK_GE(crtc_idx, 0); + crtc_state_[crtc_idx].properties.active.value = 0UL; + crtc_state_[crtc_idx].properties.mode_id.value = 0UL; + res &= AddPropertyIfValid(property_set.get(), crtc, + crtc_state_[crtc_idx].properties.active); + res &= AddPropertyIfValid(property_set.get(), crtc, + crtc_state_[crtc_idx].properties.mode_id); + + DCHECK(res); + return drm_->CommitProperties(property_set.get(), + DRM_MODE_ATOMIC_ALLOW_MODESET, 1, nullptr); } bool HardwareDisplayPlaneManagerAtomic::Commit( const HardwareDisplayPlaneList& plane_list, + bool should_modeset, scoped_refptr<PageFlipRequest> page_flip_request, std::unique_ptr<gfx::GpuFence>* out_fence) { - bool test_only = !page_flip_request; + bool test_only = !should_modeset && !page_flip_request; + for (HardwareDisplayPlane* plane : plane_list.old_plane_list) { if (!base::Contains(plane_list.plane_list, plane)) { - // This plane is being released, so we need to zero it. - plane->set_in_use(false); - HardwareDisplayPlaneAtomic* atomic_plane = - static_cast<HardwareDisplayPlaneAtomic*>(plane); - atomic_plane->SetPlaneData( - plane_list.atomic_property_set.get(), 0, 0, gfx::Rect(), gfx::Rect(), - gfx::OVERLAY_TRANSFORM_NONE, base::kInvalidPlatformFile); + if (plane->in_use()) { + // This plane is being released, so we need to zero it. + plane->set_in_use(false); + HardwareDisplayPlaneAtomic* atomic_plane = + static_cast<HardwareDisplayPlaneAtomic*>(plane); + atomic_plane->SetPlaneData(plane_list.atomic_property_set.get(), 0, 0, + gfx::Rect(), gfx::Rect(), + gfx::OVERLAY_TRANSFORM_NONE, + base::kInvalidPlatformFile); + } } } std::vector<uint32_t> crtcs; for (HardwareDisplayPlane* plane : plane_list.plane_list) { + if (!plane->in_use()) + continue; HardwareDisplayPlaneAtomic* atomic_plane = static_cast<HardwareDisplayPlaneAtomic*>(plane); if (crtcs.empty() || crtcs.back() != atomic_plane->crtc_id()) @@ -110,11 +175,10 @@ } uint32_t flags = 0; - if (test_only) { - flags = DRM_MODE_ATOMIC_TEST_ONLY; - } else { - flags = DRM_MODE_ATOMIC_NONBLOCK; - } + if (should_modeset) + flags = DRM_MODE_ATOMIC_ALLOW_MODESET; + else + flags = test_only ? DRM_MODE_ATOMIC_TEST_ONLY : DRM_MODE_ATOMIC_NONBLOCK; // After we perform the atomic commit, and if the caller has requested an // out-fence, the out_fence_fds vector will contain any provided out-fence
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_atomic.h b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_atomic.h index 90e19b1d..d3a333c 100644 --- a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_atomic.h +++ b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_atomic.h
@@ -6,6 +6,7 @@ #define UI_OZONE_PLATFORM_DRM_GPU_HARDWARE_DISPLAY_PLANE_MANAGER_ATOMIC_H_ #include <stdint.h> + #include <memory> #include "base/macros.h" @@ -15,11 +16,18 @@ class HardwareDisplayPlaneManagerAtomic : public HardwareDisplayPlaneManager { public: - HardwareDisplayPlaneManagerAtomic(DrmDevice* drm); + explicit HardwareDisplayPlaneManagerAtomic(DrmDevice* drm); ~HardwareDisplayPlaneManagerAtomic() override; // HardwareDisplayPlaneManager: + bool Modeset(uint32_t crtc_id, + uint32_t framebuffer_id, + uint32_t connector_id, + const drmModeModeInfo& mode, + const HardwareDisplayPlaneList& plane_list) override; + bool DisableModeset(uint32_t crtc, uint32_t connector) override; bool Commit(const HardwareDisplayPlaneList& plane_list, + bool should_modeset, scoped_refptr<PageFlipRequest> page_flip_request, std::unique_ptr<gfx::GpuFence>* out_fence) override; bool DisableOverlayPlanes(
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_legacy.cc b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_legacy.cc index fa6ba3b..4a93e29 100644 --- a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_legacy.cc +++ b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_legacy.cc
@@ -6,6 +6,7 @@ #include <errno.h> #include <sync/sync.h> + #include <memory> #include <utility> @@ -42,13 +43,31 @@ DrmDevice* drm) : HardwareDisplayPlaneManager(drm) {} -HardwareDisplayPlaneManagerLegacy::~HardwareDisplayPlaneManagerLegacy() { +HardwareDisplayPlaneManagerLegacy::~HardwareDisplayPlaneManagerLegacy() = + default; + +bool HardwareDisplayPlaneManagerLegacy::Modeset( + uint32_t crtc_id, + uint32_t framebuffer_id, + uint32_t connector_id, + const drmModeModeInfo& mode, + const HardwareDisplayPlaneList&) { + return drm_->SetCrtc(crtc_id, framebuffer_id, + std::vector<uint32_t>(1, connector_id), mode); +} + +bool HardwareDisplayPlaneManagerLegacy::DisableModeset(uint32_t crtc_id, + uint32_t connector) { + return drm_->DisableCrtc(crtc_id); } bool HardwareDisplayPlaneManagerLegacy::Commit( const HardwareDisplayPlaneList& plane_list, + bool should_modeset, scoped_refptr<PageFlipRequest> page_flip_request, std::unique_ptr<gfx::GpuFence>* out_fence) { + DCHECK(!should_modeset); + bool test_only = !page_flip_request; if (test_only) { for (HardwareDisplayPlane* plane : plane_list.plane_list) {
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_legacy.h b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_legacy.h index 5c6c0a4..82c5600 100644 --- a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_legacy.h +++ b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_legacy.h
@@ -6,6 +6,7 @@ #define UI_OZONE_PLATFORM_DRM_GPU_HARDWARE_DISPLAY_PLANE_MANAGER_LEGACY_H_ #include <stdint.h> + #include <memory> #include "base/macros.h" @@ -15,11 +16,18 @@ class HardwareDisplayPlaneManagerLegacy : public HardwareDisplayPlaneManager { public: - HardwareDisplayPlaneManagerLegacy(DrmDevice* device); + explicit HardwareDisplayPlaneManagerLegacy(DrmDevice* device); ~HardwareDisplayPlaneManagerLegacy() override; // HardwareDisplayPlaneManager: + bool Modeset(uint32_t crtc_id, + uint32_t framebuffer_id, + uint32_t connector_id, + const drmModeModeInfo& mode, + const HardwareDisplayPlaneList&) override; + bool DisableModeset(uint32_t crtc_id, uint32_t connector) override; bool Commit(const HardwareDisplayPlaneList& plane_list, + bool should_modeset, scoped_refptr<PageFlipRequest> page_flip_request, std::unique_ptr<gfx::GpuFence>* out_fence) override; bool DisableOverlayPlanes(
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_unittest.cc b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_unittest.cc index 6d4da74..d957bfc 100644 --- a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_unittest.cc +++ b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_unittest.cc
@@ -30,6 +30,10 @@ namespace { +constexpr uint32_t kCrtcIdBase = 1; +constexpr uint32_t kCrtcIdPropId = 2000; +constexpr uint32_t kPrimaryConnector = 10; +constexpr uint32_t kSecondaryConnector = 11; constexpr uint32_t kPlaneOffset = 100; constexpr uint32_t kTypePropId = 300; constexpr uint32_t kInFormatsPropId = 301; @@ -42,16 +46,23 @@ constexpr uint32_t kOutFencePtrPropId = 308; constexpr uint32_t kInFormatsBlobPropId = 400; constexpr uint32_t kBackgroundColorPropId = 401; +constexpr uint32_t kActivePropId = 1001; +constexpr uint32_t kModePropId = 1002; const gfx::Size kDefaultBufferSize(2, 2); +// Create a basic mode for a 6x4 screen. +drmModeModeInfo kDefaultMode = {0, 6, 0, 0, 0, 0, 4, 0, + 0, 0, 0, 0, 0, 0, {'\0'}}; class HardwareDisplayPlaneManagerTest : public testing::Test, public testing::WithParamInterface<bool> { public: - HardwareDisplayPlaneManagerTest() {} + HardwareDisplayPlaneManagerTest() = default; - void InitializeDrmState(size_t crtc_count, size_t planes_per_crtc); + void InitializeDrmState(size_t crtc_count, + size_t planes_per_crtc, + size_t connector_count); uint64_t GetObjectPropertyValue(uint32_t object_id, uint32_t object_type, @@ -83,6 +94,7 @@ scoped_refptr<ui::MockDrmDevice> fake_drm_; std::vector<ui::MockDrmDevice::CrtcProperties> crtc_properties_; + std::vector<ui::MockDrmDevice::ConnectorProperties> connector_properties_; std::vector<ui::MockDrmDevice::PlaneProperties> plane_properties_; std::map<uint32_t, std::string> property_names_; @@ -105,8 +117,18 @@ void HardwareDisplayPlaneManagerTest::InitializeDrmState( size_t crtc_count, - size_t planes_per_crtc) { - property_names_ = { + size_t planes_per_crtc, + size_t connector_count) { + std::map<uint32_t, std::string> crtc_property_names = { + {kActivePropId, "ACTIVE"}, + {kModePropId, "MODE_ID"}, + }; + + std::map<uint32_t, std::string> connector_property_names = { + {kCrtcIdPropId, "CRTC_ID"}, + }; + + std::map<uint32_t, std::string> plane_property_names = { // Add all required properties. {200, "CRTC_ID"}, {201, "CRTC_X"}, @@ -126,15 +148,18 @@ ++planes_per_crtc; for (size_t i = 0; i < crtc_count; ++i) { ui::MockDrmDevice::CrtcProperties crtc_prop; - // Start ID at 1 cause 0 is an invalid ID. - crtc_prop.id = i + 1; + crtc_prop.id = kCrtcIdBase + i; + for (const auto& pair : crtc_property_names) { + crtc_prop.properties.push_back( + {/* .id = */ pair.first, /* .value = */ 0}); + } crtc_properties_.emplace_back(std::move(crtc_prop)); for (size_t j = 0; j < planes_per_crtc; ++j) { ui::MockDrmDevice::PlaneProperties plane_prop; plane_prop.id = kPlaneOffset + i * planes_per_crtc + j; plane_prop.crtc_mask = 1 << i; - for (const auto& pair : property_names_) { + for (const auto& pair : plane_property_names) { uint32_t value = 0; if (pair.first == kTypePropId) { if (j == 0) @@ -154,19 +179,35 @@ } } + for (size_t i = 0; i < connector_count; ++i) { + ui::MockDrmDevice::ConnectorProperties connector_prop; + for (const auto& pair : connector_property_names) { + connector_prop.properties.push_back( + {/* .id = */ pair.first, /* .value = */ 0}); + } + connector_prop.id = i == 0 ? kPrimaryConnector : kSecondaryConnector; + connector_properties_.emplace_back(std::move(connector_prop)); + } + // Separately add optional properties that will be used in some tests, but the // tests will append the property to the planes on a case-by-case basis. - // // Plane properties: - property_names_.insert({kPlaneCtmId, "PLANE_CTM"}); + plane_property_names.insert({kPlaneCtmId, "PLANE_CTM"}); // CRTC properties: - property_names_.insert({kCtmPropId, "CTM"}); - property_names_.insert({kGammaLutPropId, "GAMMA_LUT"}); - property_names_.insert({kGammaLutSizePropId, "GAMMA_LUT_SIZE"}); - property_names_.insert({kDegammaLutPropId, "DEGAMMA_LUT"}); - property_names_.insert({kDegammaLutSizePropId, "DEGAMMA_LUT_SIZE"}); - property_names_.insert({kOutFencePtrPropId, "OUT_FENCE_PTR"}); - property_names_.insert({kBackgroundColorPropId, "BACKGROUND_COLOR"}); + crtc_property_names.insert({kCtmPropId, "CTM"}); + crtc_property_names.insert({kGammaLutPropId, "GAMMA_LUT"}); + crtc_property_names.insert({kGammaLutSizePropId, "GAMMA_LUT_SIZE"}); + crtc_property_names.insert({kDegammaLutPropId, "DEGAMMA_LUT"}); + crtc_property_names.insert({kDegammaLutSizePropId, "DEGAMMA_LUT_SIZE"}); + crtc_property_names.insert({kOutFencePtrPropId, "OUT_FENCE_PTR"}); + crtc_property_names.insert({kBackgroundColorPropId, "BACKGROUND_COLOR"}); + + property_names_.insert(crtc_property_names.begin(), + crtc_property_names.end()); + property_names_.insert(connector_property_names.begin(), + connector_property_names.end()); + property_names_.insert(plane_property_names.begin(), + plane_property_names.end()); } void HardwareDisplayPlaneManagerTest::PerformPageFlip(size_t crtc_idx) { @@ -182,8 +223,8 @@ &state, assigns, crtc_properties_[crtc_idx].id)); scoped_refptr<ui::PageFlipRequest> page_flip_request = base::MakeRefCounted<ui::PageFlipRequest>(base::TimeDelta()); - ASSERT_TRUE( - fake_drm_->plane_manager()->Commit(state, page_flip_request, nullptr)); + ASSERT_TRUE(fake_drm_->plane_manager()->Commit( + state, /*should_modeset=*/false, page_flip_request, nullptr)); } uint64_t HardwareDisplayPlaneManagerTest::GetObjectPropertyValue( @@ -213,13 +254,31 @@ using HardwareDisplayPlaneManagerLegacyTest = HardwareDisplayPlaneManagerTest; using HardwareDisplayPlaneManagerAtomicTest = HardwareDisplayPlaneManagerTest; +TEST_P(HardwareDisplayPlaneManagerLegacyTest, Modeset) { + InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1, + /*connector_count=*/1); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, + /*use_atomic=*/false); + fake_drm_->set_set_crtc_expectation(false); + + constexpr uint32_t kFrameBuffer = 2; + ui::HardwareDisplayPlaneList state; + EXPECT_FALSE(fake_drm_->plane_manager()->Modeset( + crtc_properties_[0].id, kFrameBuffer, connector_properties_[0].id, + kDefaultMode, state)); + EXPECT_EQ(kFrameBuffer, fake_drm_->current_framebuffer()); + EXPECT_EQ(1, fake_drm_->get_set_crtc_call_count()); +} + TEST_P(HardwareDisplayPlaneManagerLegacyTest, SinglePlaneAssignment) { ui::DrmOverlayPlaneList assigns; assigns.push_back(ui::DrmOverlayPlane(fake_buffer_, nullptr)); - InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/1); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/1, + /*connector_count=*/1); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); EXPECT_TRUE(fake_drm_->plane_manager()->AssignOverlayPlanes( &state_, assigns, crtc_properties_[0].id)); @@ -230,9 +289,10 @@ ui::DrmOverlayPlaneList assigns; assigns.push_back(ui::DrmOverlayPlane(fake_buffer_, nullptr)); - InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/1); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/1, + /*connector_count=*/1); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); bool cursor_found = false; for (const auto& plane : fake_drm_->plane_manager()->planes()) { @@ -248,9 +308,10 @@ ui::DrmOverlayPlaneList assigns; assigns.push_back(ui::DrmOverlayPlane(fake_buffer_, nullptr)); - InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/1); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/1, + /*connector_count=*/1); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); EXPECT_FALSE( fake_drm_->plane_manager()->AssignOverlayPlanes(&state_, assigns, 0)); @@ -261,9 +322,10 @@ assigns.push_back(ui::DrmOverlayPlane(fake_buffer_, nullptr)); assigns.push_back(ui::DrmOverlayPlane(fake_buffer_, nullptr)); - InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/1); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/1, + /*connector_count=*/1); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); EXPECT_FALSE(fake_drm_->plane_manager()->AssignOverlayPlanes( &state_, assigns, crtc_properties_[0].id)); @@ -273,9 +335,10 @@ ui::DrmOverlayPlaneList assigns; assigns.push_back(ui::DrmOverlayPlane(fake_buffer_, nullptr)); - InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/1); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/1, + /*connector_count=*/1); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); EXPECT_TRUE(fake_drm_->plane_manager()->AssignOverlayPlanes( &state_, assigns, crtc_properties_[0].id)); @@ -289,9 +352,10 @@ assigns.push_back(ui::DrmOverlayPlane(fake_buffer_, nullptr)); assigns.push_back(ui::DrmOverlayPlane(fake_buffer_, nullptr)); - InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/2); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/2, + /*connector_count=*/1); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); EXPECT_FALSE(fake_drm_->plane_manager()->AssignOverlayPlanes( &state_, assigns, crtc_properties_[0].id)); @@ -305,9 +369,10 @@ CreateBufferWithFormat(kDefaultBufferSize, DRM_FORMAT_NV12); assigns.push_back(ui::DrmOverlayPlane(buffer, nullptr)); - InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/1); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/1, + /*connector_count=*/1); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); fake_drm_->plane_manager()->BeginFrame(state_); // This should return false as plane manager creates planes which support @@ -326,14 +391,26 @@ &state_, assigns, crtc_properties_[0].id)); } +TEST_P(HardwareDisplayPlaneManagerLegacyTest, DisableModeset) { + InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1, + /*connector_count=*/1); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, + /*use_atomic*/ false); + + EXPECT_TRUE( + fake_drm_->plane_manager()->DisableModeset(crtc_properties_[0].id, 0)); +} + TEST_P(HardwareDisplayPlaneManagerAtomicTest, MultiplePlaneAssignment) { ui::DrmOverlayPlaneList assigns; assigns.push_back(ui::DrmOverlayPlane(fake_buffer_, nullptr)); assigns.push_back(ui::DrmOverlayPlane(fake_buffer_, nullptr)); - InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/2); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/2, + /*connector_count=*/1); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); EXPECT_TRUE(fake_drm_->plane_manager()->AssignOverlayPlanes( &state_, assigns, crtc_properties_[0].id)); @@ -345,9 +422,10 @@ assigns.push_back(ui::DrmOverlayPlane(fake_buffer_, nullptr)); assigns.push_back(ui::DrmOverlayPlane(fake_buffer_, nullptr)); - InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/2); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/2, + /*connector_count=*/1); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); EXPECT_TRUE(fake_drm_->plane_manager()->AssignOverlayPlanes( &state_, assigns, crtc_properties_[0].id)); @@ -363,7 +441,8 @@ assigns.push_back(ui::DrmOverlayPlane(fake_buffer_, nullptr)); assigns.push_back(ui::DrmOverlayPlane(buffer, nullptr)); - InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/1); + InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/1, + /*connector_count=*/1); ui::MockDrmDevice::PlaneProperties plane_prop; plane_prop.id = 102; plane_prop.crtc_mask = (1 << 0) | (1 << 1); @@ -372,8 +451,8 @@ {/* .id = */ kInFormatsPropId, /* .value = */ kInFormatsBlobPropId}, }; plane_properties_.emplace_back(std::move(plane_prop)); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); EXPECT_TRUE(fake_drm_->plane_manager()->AssignOverlayPlanes( &state_, assigns, crtc_properties_[1].id)); @@ -384,9 +463,10 @@ } TEST_P(HardwareDisplayPlaneManagerAtomicTest, UnusedPlanesAreReleased) { - InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/2); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/2, + /*connector_count=*/1); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); ui::DrmOverlayPlaneList assigns; scoped_refptr<ui::DrmFramebuffer> primary_buffer = @@ -402,8 +482,8 @@ fake_drm_->plane_manager()->BeginFrame(hdpl); EXPECT_TRUE(fake_drm_->plane_manager()->AssignOverlayPlanes( &hdpl, assigns, crtc_properties_[0].id)); - EXPECT_TRUE( - fake_drm_->plane_manager()->Commit(hdpl, page_flip_request, nullptr)); + EXPECT_TRUE(fake_drm_->plane_manager()->Commit(hdpl, /*should_modeset=*/false, + page_flip_request, nullptr)); assigns.clear(); assigns.push_back(ui::DrmOverlayPlane(primary_buffer, nullptr)); @@ -412,11 +492,13 @@ fake_drm_->plane_manager()->BeginFrame(hdpl2); EXPECT_TRUE(fake_drm_->plane_manager()->AssignOverlayPlanes( &hdpl2, assigns, crtc_properties_[0].id)); + for (auto* plane : hdpl.plane_list) + plane->set_in_use(true); EXPECT_NE(0u, GetPlanePropertyValue(kPlaneOffset, "FB_ID")); EXPECT_NE(0u, GetPlanePropertyValue(kPlaneOffset + 1, "FB_ID")); - EXPECT_TRUE( - fake_drm_->plane_manager()->Commit(hdpl2, page_flip_request, nullptr)); + EXPECT_TRUE(fake_drm_->plane_manager()->Commit( + hdpl2, /*should_modeset=*/false, page_flip_request, nullptr)); EXPECT_NE(0u, GetPlanePropertyValue(kPlaneOffset, "FB_ID")); EXPECT_EQ(0u, GetPlanePropertyValue(kPlaneOffset + 1, "FB_ID")); } @@ -425,9 +507,10 @@ ui::DrmOverlayPlaneList assigns; assigns.push_back(ui::DrmOverlayPlane(fake_buffer_, nullptr)); - InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/2); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/2, + /*connector_count=*/1); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); EXPECT_TRUE(fake_drm_->plane_manager()->AssignOverlayPlanes( &state_, assigns, crtc_properties_[0].id)); @@ -447,9 +530,10 @@ ui::DrmOverlayPlaneList assigns; assigns.push_back(ui::DrmOverlayPlane(fake_buffer_, nullptr)); - InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/2); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/2, + /*connector_count=*/1); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); EXPECT_TRUE(fake_drm_->plane_manager()->AssignOverlayPlanes( &state_, assigns, crtc_properties_[0].id)); @@ -463,13 +547,14 @@ TEST_P(HardwareDisplayPlaneManagerAtomicTest, SetColorCorrectionOnAllCrtcPlanes_Success) { - InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1); + InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1, + /*connector_count=*/1); plane_properties_[0].properties.push_back( {/* .id = */ kPlaneCtmId, /* .value = */ 0}); plane_properties_[1].properties.push_back( {/* .id = */ kPlaneCtmId, /* .value = */ 0}); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); ui::ScopedDrmColorCtmPtr ctm_blob(ui::CreateCTMBlob(std::vector<float>(9))); EXPECT_TRUE(fake_drm_->plane_manager()->SetColorCorrectionOnAllCrtcPlanes( @@ -479,9 +564,10 @@ TEST_P(HardwareDisplayPlaneManagerAtomicTest, SetColorCorrectionOnAllCrtcPlanes_NoPlaneCtmProperty) { - InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1, + /*connector_count=*/1); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); ui::ScopedDrmColorCtmPtr ctm_blob(ui::CreateCTMBlob(std::vector<float>(9))); EXPECT_FALSE(fake_drm_->plane_manager()->SetColorCorrectionOnAllCrtcPlanes( @@ -491,11 +577,12 @@ TEST_P(HardwareDisplayPlaneManagerAtomicTest, SetColorCorrectionOnAllCrtcPlanes_OnePlaneMissingCtmProperty) { - InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/2); + InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/2, + /*connector_count=*/1); plane_properties_[0].properties.push_back( {/* .id = */ kPlaneCtmId, /* .value = */ 0}); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); ui::ScopedDrmColorCtmPtr ctm_blob(ui::CreateCTMBlob(std::vector<float>(9))); EXPECT_FALSE(fake_drm_->plane_manager()->SetColorCorrectionOnAllCrtcPlanes( @@ -503,12 +590,88 @@ EXPECT_EQ(0, fake_drm_->get_commit_count()); } +TEST_P(HardwareDisplayPlaneManagerAtomicTest, Modeset) { + InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1, + /*connector_count=*/1); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, + /*use_atomic=*/true); + + constexpr uint32_t kFrameBuffer = 2; + ui::HardwareDisplayPlaneList state; + EXPECT_TRUE(fake_drm_->plane_manager()->Modeset( + crtc_properties_[0].id, kFrameBuffer, connector_properties_[0].id, + kDefaultMode, state)); + + EXPECT_EQ(1, fake_drm_->get_commit_count()); +} + +TEST_P(HardwareDisplayPlaneManagerAtomicTest, DisableModeset) { + InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1, + /*connector_count=*/1); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, + /*use_atomic*/ true); + + EXPECT_TRUE(fake_drm_->plane_manager()->DisableModeset( + crtc_properties_[0].id, connector_properties_[0].id)); + EXPECT_EQ(1, fake_drm_->get_commit_count()); +} + +TEST_P(HardwareDisplayPlaneManagerAtomicTest, + CheckPropsAfterModesetAndDisable) { + InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1, + /*connector_count=*/1); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, + /*use_atomic=*/true); + + constexpr uint32_t kFrameBuffer = 2; + ui::HardwareDisplayPlaneList state; + EXPECT_TRUE(fake_drm_->plane_manager()->Modeset( + crtc_properties_[0].id, kFrameBuffer, connector_properties_[0].id, + kDefaultMode, state)); + + // Test props values after modesetting. + ui::DrmDevice::Property connector_prop_crtc_id; + ui::ScopedDrmObjectPropertyPtr connector_props = + fake_drm_->GetObjectProperties(kPrimaryConnector, + DRM_MODE_OBJECT_CONNECTOR); + ui::GetDrmPropertyForName(fake_drm_.get(), connector_props.get(), "CRTC_ID", + &connector_prop_crtc_id); + EXPECT_EQ(kCrtcIdPropId, connector_prop_crtc_id.id); + + ui::DrmDevice::Property crtc_prop_for_name; + ui::ScopedDrmObjectPropertyPtr crtc_props = + fake_drm_->GetObjectProperties(kCrtcIdBase, DRM_MODE_OBJECT_CRTC); + ui::GetDrmPropertyForName(fake_drm_.get(), crtc_props.get(), "ACTIVE", + &crtc_prop_for_name); + EXPECT_EQ(kActivePropId, crtc_prop_for_name.id); + EXPECT_EQ(1U, crtc_prop_for_name.value); + + ui::GetDrmPropertyForName(fake_drm_.get(), crtc_props.get(), "MODE_ID", + &crtc_prop_for_name); + EXPECT_EQ(kModePropId, crtc_prop_for_name.id); + + // Test props values after disabling. + EXPECT_TRUE(fake_drm_->plane_manager()->DisableModeset( + crtc_properties_[0].id, connector_properties_[0].id)); + + crtc_props = + fake_drm_->GetObjectProperties(kCrtcIdBase, DRM_MODE_OBJECT_CRTC); + ui::GetDrmPropertyForName(fake_drm_.get(), crtc_props.get(), "ACTIVE", + &crtc_prop_for_name); + EXPECT_EQ(kActivePropId, crtc_prop_for_name.id); + EXPECT_EQ(0U, crtc_prop_for_name.value); +} + TEST_P(HardwareDisplayPlaneManagerTest, SetColorMatrix_Success) { - InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1); + InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1, + /*connector_count=*/1); crtc_properties_[0].properties.push_back( {/* .id = */ kCtmPropId, /* .value = */ 0}); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); EXPECT_TRUE(fake_drm_->plane_manager()->SetColorMatrix( crtc_properties_[0].id, std::vector<float>(9))); @@ -526,11 +689,12 @@ } TEST_P(HardwareDisplayPlaneManagerTest, SetColorMatrix_ErrorEmptyCtm) { - InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1); + InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1, + /*connector_count=*/1); crtc_properties_[0].properties.push_back( {/* .id = */ kCtmPropId, /* .value = */ 0}); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); EXPECT_FALSE( fake_drm_->plane_manager()->SetColorMatrix(crtc_properties_[0].id, {})); @@ -544,11 +708,12 @@ } TEST_P(HardwareDisplayPlaneManagerTest, SetGammaCorrection_MissingDegamma) { - InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1); + InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1, + /*connector_count=*/1); crtc_properties_[0].properties.push_back( {/* .id = */ kCtmPropId, /* .value = */ 0}); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); EXPECT_FALSE(fake_drm_->plane_manager()->SetGammaCorrection( crtc_properties_[0].id, {{0, 0, 0}}, {})); @@ -562,8 +727,9 @@ crtc_properties_[0].properties.push_back( {/* .id = */ kDegammaLutSizePropId, /* .value = */ 1}); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, /*use_atomic=*/true); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, + /*use_atomic=*/true); EXPECT_FALSE(fake_drm_->plane_manager()->SetGammaCorrection( crtc_properties_[0].id, {{0, 0, 0}}, {})); @@ -577,11 +743,12 @@ } TEST_P(HardwareDisplayPlaneManagerTest, SetGammaCorrection_MissingGamma) { - InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1); + InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1, + /*connector_count=*/1); crtc_properties_[0].properties.push_back( {/* .id = */ kCtmPropId, /* .value = */ 0}); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); EXPECT_FALSE(fake_drm_->plane_manager()->SetGammaCorrection( crtc_properties_[0].id, {}, {{0, 0, 0}})); @@ -595,8 +762,9 @@ crtc_properties_[0].properties.push_back( {/* .id = */ kGammaLutSizePropId, /* .value = */ 1}); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, /*use_atomic=*/true); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, + /*use_atomic=*/true); EXPECT_FALSE(fake_drm_->plane_manager()->SetGammaCorrection( crtc_properties_[0].id, {}, {{0, 0, 0}})); @@ -610,9 +778,10 @@ } TEST_P(HardwareDisplayPlaneManagerTest, SetGammaCorrection_LegacyGamma) { - InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1, + /*connector_count=*/1); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); fake_drm_->set_legacy_gamma_ramp_expectation(true); EXPECT_TRUE(fake_drm_->plane_manager()->SetGammaCorrection( @@ -630,11 +799,12 @@ } TEST_P(HardwareDisplayPlaneManagerTest, SetGammaCorrection_Success) { - InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1); + InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1, + /*connector_count=*/1); crtc_properties_[0].properties.push_back( {/* .id = */ kCtmPropId, /* .value = */ 0}); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); EXPECT_FALSE(fake_drm_->plane_manager()->SetGammaCorrection( crtc_properties_[0].id, {{0, 0, 0}}, {})); @@ -648,8 +818,8 @@ {/* .id = */ kGammaLutSizePropId, /* .value = */ 1}); crtc_properties_[0].properties.push_back( {/* .id = */ kGammaLutPropId, /* .value = */ 0}); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); // Check that we reset the properties correctly. EXPECT_TRUE(fake_drm_->plane_manager()->SetGammaCorrection( @@ -684,31 +854,32 @@ } TEST_P(HardwareDisplayPlaneManagerTest, SetBackgroundColor_Success) { - InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1); + InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1, + /*connector_count=*/1); crtc_properties_[0].properties.push_back( {/* .id = */ kBackgroundColorPropId, /* .value = */ 0}); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); fake_drm_->plane_manager()->SetBackgroundColor(crtc_properties_[0].id, 0); if (use_atomic_) { PerformPageFlip(/*crtc_idx=*/0); EXPECT_EQ(1, fake_drm_->get_commit_count()); - EXPECT_EQ(0u, GetCrtcPropertyValue(crtc_properties_[0].id, - "BACKGROUND_COLOR")); + EXPECT_EQ(0u, + GetCrtcPropertyValue(crtc_properties_[0].id, "BACKGROUND_COLOR")); } else { EXPECT_EQ(0, fake_drm_->get_set_object_property_count()); } crtc_properties_[0].properties.push_back( {/* .id = */ kBackgroundColorPropId, /* .value = */ 1}); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); fake_drm_->plane_manager()->SetBackgroundColor(crtc_properties_[0].id, 1); if (use_atomic_) { PerformPageFlip(/*crtc_idx=*/0); EXPECT_EQ(2, fake_drm_->get_commit_count()); - EXPECT_EQ(1u, GetCrtcPropertyValue(crtc_properties_[0].id, - "BACKGROUND_COLOR")); + EXPECT_EQ(1u, + GetCrtcPropertyValue(crtc_properties_[0].id, "BACKGROUND_COLOR")); } else { EXPECT_EQ(0, fake_drm_->get_set_object_property_count()); } @@ -719,9 +890,10 @@ scoped_refptr<ui::DrmFramebuffer> fake_buffer2 = CreateBuffer(kDefaultBufferSize); - InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/1); - fake_drm_->InitializeState(crtc_properties_, plane_properties_, - property_names_, use_atomic_); + InitializeDrmState(/*crtc_count=*/2, /*planes_per_crtc=*/1, + /*connector_count=*/1); + fake_drm_->InitializeState(crtc_properties_, connector_properties_, + plane_properties_, property_names_, use_atomic_); ui::DrmOverlayPlaneList assigns1; assigns1.push_back(ui::DrmOverlayPlane(fake_buffer_, nullptr)); @@ -738,26 +910,29 @@ base::MakeRefCounted<ui::PageFlipRequest>(base::TimeDelta()); std::unique_ptr<gfx::GpuFence> out_fence; - EXPECT_TRUE(fake_drm_->plane_manager()->Commit(state_, page_flip_request, - &out_fence)); + EXPECT_TRUE(fake_drm_->plane_manager()->Commit( + state_, /*should_modeset=*/false, page_flip_request, &out_fence)); EXPECT_EQ(nullptr, out_fence); } TEST_P(HardwareDisplayPlaneManagerTest, InitializationFailsIfSupportForOutFencePropertiesIsPartial) { - InitializeDrmState(/*crtc_count=*/3, /*planes_per_crtc=*/1); + InitializeDrmState(/*crtc_count=*/3, /*planes_per_crtc=*/1, + /*connector_count=*/1); crtc_properties_[0].properties.push_back( {/* .id = */ kOutFencePtrPropId, /* .value = */ 1}); crtc_properties_[2].properties.push_back( {/* .id = */ kOutFencePtrPropId, /* .value = */ 2}); EXPECT_FALSE(fake_drm_->InitializeStateWithResult( - crtc_properties_, plane_properties_, property_names_, use_atomic_)); + crtc_properties_, connector_properties_, plane_properties_, + property_names_, use_atomic_)); } TEST_P(HardwareDisplayPlaneManagerTest, InitializationSucceedsIfSupportForOutFencePropertiesIsComplete) { - InitializeDrmState(/*crtc_count=*/3, /*planes_per_crtc=*/1); + InitializeDrmState(/*crtc_count=*/3, /*planes_per_crtc=*/1, + /*connector_count=*/1); crtc_properties_[0].properties.push_back( {/* .id = */ kOutFencePtrPropId, /* .value = */ 1}); crtc_properties_[1].properties.push_back( @@ -766,7 +941,8 @@ {/* .id = */ kOutFencePtrPropId, /* .value = */ 3}); EXPECT_TRUE(fake_drm_->InitializeStateWithResult( - crtc_properties_, plane_properties_, property_names_, use_atomic_)); + crtc_properties_, connector_properties_, plane_properties_, + property_names_, use_atomic_)); } INSTANTIATE_TEST_SUITE_P(All, @@ -815,7 +991,7 @@ class HardwareDisplayPlaneManagerPlanesReadyTest : public testing::Test { protected: - HardwareDisplayPlaneManagerPlanesReadyTest() {} + HardwareDisplayPlaneManagerPlanesReadyTest() = default; void SetUp() override { auto gbm_device = std::make_unique<ui::MockGbmDevice>(); @@ -944,7 +1120,7 @@ class HardwareDisplayPlaneAtomicMock : public ui::HardwareDisplayPlaneAtomic { public: HardwareDisplayPlaneAtomicMock() : ui::HardwareDisplayPlaneAtomic(1) {} - ~HardwareDisplayPlaneAtomicMock() override {} + ~HardwareDisplayPlaneAtomicMock() override = default; bool SetPlaneData(drmModeAtomicReq* property_set, uint32_t crtc_id,
diff --git a/ui/ozone/platform/drm/gpu/mock_drm_device.cc b/ui/ozone/platform/drm/gpu/mock_drm_device.cc index b895557..484625a 100644 --- a/ui/ozone/platform/drm/gpu/mock_drm_device.cc +++ b/ui/ozone/platform/drm/gpu/mock_drm_device.cc
@@ -70,6 +70,11 @@ MockDrmDevice::CrtcProperties::CrtcProperties(const CrtcProperties&) = default; MockDrmDevice::CrtcProperties::~CrtcProperties() = default; +MockDrmDevice::ConnectorProperties::ConnectorProperties() = default; +MockDrmDevice::ConnectorProperties::ConnectorProperties( + const ConnectorProperties&) = default; +MockDrmDevice::ConnectorProperties::~ConnectorProperties() = default; + MockDrmDevice::PlaneProperties::PlaneProperties() = default; MockDrmDevice::PlaneProperties::PlaneProperties(const PlaneProperties&) = default; @@ -126,19 +131,23 @@ void MockDrmDevice::InitializeState( const std::vector<CrtcProperties>& crtc_properties, + const std::vector<ConnectorProperties>& connector_properties, const std::vector<PlaneProperties>& plane_properties, const std::map<uint32_t, std::string>& property_names, bool use_atomic) { - CHECK(InitializeStateWithResult(crtc_properties, plane_properties, - property_names, use_atomic)); + CHECK(InitializeStateWithResult(crtc_properties, connector_properties, + plane_properties, property_names, + use_atomic)); } bool MockDrmDevice::InitializeStateWithResult( const std::vector<CrtcProperties>& crtc_properties, + const std::vector<ConnectorProperties>& connector_properties, const std::vector<PlaneProperties>& plane_properties, const std::map<uint32_t, std::string>& property_names, bool use_atomic) { crtc_properties_ = crtc_properties; + connector_properties_ = connector_properties; plane_properties_ = plane_properties; property_names_ = property_names; if (use_atomic) { @@ -150,7 +159,7 @@ return plane_manager_->Initialize(); } -MockDrmDevice::~MockDrmDevice() {} +MockDrmDevice::~MockDrmDevice() = default; ScopedDrmResourcesPtr MockDrmDevice::GetResources() { ScopedDrmResourcesPtr resources(DrmAllocator<drmModeRes>()); @@ -160,6 +169,12 @@ for (size_t i = 0; i < crtc_properties_.size(); ++i) resources->crtcs[i] = crtc_properties_[i].id; + resources->count_connectors = connector_properties_.size(); + resources->connectors = static_cast<uint32_t*>( + drmMalloc(sizeof(uint32_t) * resources->count_connectors)); + for (size_t i = 0; i < connector_properties_.size(); ++i) + resources->connectors[i] = connector_properties_[i].id; + return resources; } @@ -185,6 +200,11 @@ CrtcProperties* properties = FindObjectById(object_id, crtc_properties_); if (properties) return CreatePropertyObject(properties->properties); + } else if (object_type == DRM_MODE_OBJECT_CONNECTOR) { + ConnectorProperties* properties = + FindObjectById(object_id, connector_properties_); + if (properties) + return CreatePropertyObject(properties->properties); } return nullptr; @@ -198,19 +218,13 @@ bool MockDrmDevice::SetCrtc(uint32_t crtc_id, uint32_t framebuffer, std::vector<uint32_t> connectors, - drmModeModeInfo* mode) { + drmModeModeInfo mode) { crtc_fb_[crtc_id] = framebuffer; current_framebuffer_ = framebuffer; set_crtc_call_count_++; return set_crtc_expectation_; } -bool MockDrmDevice::SetCrtc(drmModeCrtc* crtc, - std::vector<uint32_t> connectors) { - restore_crtc_call_count_++; - return true; -} - bool MockDrmDevice::DisableCrtc(uint32_t crtc_id) { current_framebuffer_ = 0; return true; @@ -304,7 +318,7 @@ return true; } -ScopedDrmPropertyBlob MockDrmDevice::CreatePropertyBlob(void* blob, +ScopedDrmPropertyBlob MockDrmDevice::CreatePropertyBlob(const void* blob, size_t size) { uint32_t id = ++property_id_generator_; allocated_property_blobs_.insert(id); @@ -484,6 +498,12 @@ if (crtc_properties) return UpdateProperty(property_id, value, &crtc_properties->properties); + ConnectorProperties* connector_properties = + FindObjectById(object_id, connector_properties_); + if (connector_properties) + return UpdateProperty(property_id, value, + &connector_properties->properties); + return false; }
diff --git a/ui/ozone/platform/drm/gpu/mock_drm_device.h b/ui/ozone/platform/drm/gpu/mock_drm_device.h index 65687004..9643812 100644 --- a/ui/ozone/platform/drm/gpu/mock_drm_device.h +++ b/ui/ozone/platform/drm/gpu/mock_drm_device.h
@@ -34,6 +34,16 @@ std::vector<DrmDevice::Property> properties; }; + struct ConnectorProperties { + ConnectorProperties(); + ConnectorProperties(const ConnectorProperties&); + ~ConnectorProperties(); + + uint32_t id; + + std::vector<DrmDevice::Property> properties; + }; + struct PlaneProperties { PlaneProperties(); PlaneProperties(const PlaneProperties&); @@ -44,7 +54,7 @@ std::vector<DrmDevice::Property> properties; }; - MockDrmDevice(std::unique_ptr<GbmDevice> gbm_device); + explicit MockDrmDevice(std::unique_ptr<GbmDevice> gbm_device); static ScopedDrmPropertyBlobPtr AllocateInFormatsBlob( uint32_t id, @@ -91,12 +101,15 @@ void set_connector_type(uint32_t type) { connector_type_ = type; } - void InitializeState(const std::vector<CrtcProperties>& crtc_properties, - const std::vector<PlaneProperties>& plane_properties, - const std::map<uint32_t, std::string>& property_names, - bool use_atomic); + void InitializeState( + const std::vector<CrtcProperties>& crtc_properties, + const std::vector<ConnectorProperties>& connector_properties, + const std::vector<PlaneProperties>& plane_properties, + const std::map<uint32_t, std::string>& property_names, + bool use_atomic); bool InitializeStateWithResult( const std::vector<CrtcProperties>& crtc_properties, + const std::vector<ConnectorProperties>& connector_properties, const std::vector<PlaneProperties>& plane_properties, const std::map<uint32_t, std::string>& property_names, bool use_atomic); @@ -114,8 +127,7 @@ bool SetCrtc(uint32_t crtc_id, uint32_t framebuffer, std::vector<uint32_t> connectors, - drmModeModeInfo* mode) override; - bool SetCrtc(drmModeCrtc* crtc, std::vector<uint32_t> connectors) override; + drmModeModeInfo mode) override; bool DisableCrtc(uint32_t crtc_id) override; ScopedDrmConnectorPtr GetConnector(uint32_t connector_id) override; bool AddFramebuffer2(uint32_t width, @@ -139,7 +151,8 @@ bool SetProperty(uint32_t connector_id, uint32_t property_id, uint64_t value) override; - ScopedDrmPropertyBlob CreatePropertyBlob(void* blob, size_t size) override; + ScopedDrmPropertyBlob CreatePropertyBlob(const void* blob, + size_t size) override; void DestroyPropertyBlob(uint32_t id) override; bool GetCapability(uint64_t capability, uint64_t* value) override; ScopedDrmPropertyBlobPtr GetPropertyBlob(uint32_t property_id) override; @@ -215,6 +228,8 @@ std::vector<CrtcProperties> crtc_properties_; + std::vector<ConnectorProperties> connector_properties_; + std::vector<PlaneProperties> plane_properties_; std::map<uint32_t, std::string> property_names_;
diff --git a/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc b/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc index d84c45a0..a033af1 100644 --- a/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc +++ b/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc
@@ -32,9 +32,14 @@ 0, 0, 0, 0, 0, 0, {'\0'}}; const uint32_t kPrimaryCrtc = 1; -const uint32_t kPrimaryConnector = 2; -const uint32_t kSecondaryCrtc = 3; -const uint32_t kSecondaryConnector = 4; +const uint32_t kPrimaryConnector = 100; +const uint32_t kSecondaryCrtc = kPrimaryCrtc + 1; +const uint32_t kSecondaryConnector = kPrimaryConnector + 1; +constexpr uint32_t kPlaneIdBase = 200; + +constexpr uint32_t kTypePropId = 3010; +constexpr uint32_t kInFormatsPropId = 3011; +constexpr uint32_t kInFormatsBlobPropIdBase = 400; drmModeModeInfo Mode(uint16_t hdisplay, uint16_t vdisplay) { return {0, hdisplay, 0, 0, 0, 0, vdisplay, 0, 0, 0, 0, 0, 0, 0, {'\0'}}; @@ -44,8 +49,116 @@ class ScreenManagerTest : public testing::Test { public: - ScreenManagerTest() {} - ~ScreenManagerTest() override {} + ScreenManagerTest() = default; + ~ScreenManagerTest() override = default; + + struct PlaneState { + std::vector<uint32_t> formats; + }; + + struct CrtcState { + std::vector<PlaneState> planes; + }; + + void InitializeDrmState(const std::vector<CrtcState>& crtc_states, + bool atomic) { + std::vector<ui::MockDrmDevice::CrtcProperties> crtc_properties( + crtc_states.size()); + std::map<uint32_t, std::string> crtc_property_names = { + {1000, "ACTIVE"}, + {1001, "MODE_ID"}, + }; + + std::vector<ui::MockDrmDevice::ConnectorProperties> connector_properties( + crtc_states.size()); + std::map<uint32_t, std::string> connector_property_names = { + {2000, "CRTC_ID"}, + }; + + std::vector<ui::MockDrmDevice::PlaneProperties> plane_properties = {}; + + constexpr uint32_t kPlaneCrtcidId = 3000; + std::map<uint32_t, std::string> plane_property_names = { + // Add all required properties. + {kPlaneCrtcidId, "CRTC_ID"}, + {3001, "CRTC_X"}, + {3002, "CRTC_Y"}, + {3003, "CRTC_W"}, + {3004, "CRTC_H"}, + {3005, "FB_ID"}, + {3006, "SRC_X"}, + {3007, "SRC_Y"}, + {3008, "SRC_W"}, + {3009, "SRC_H"}, + // Defines some optional properties we use for convenience. + {kTypePropId, "type"}, + {kInFormatsPropId, "IN_FORMATS"}}; + + uint32_t plane_id = kPlaneIdBase; + uint32_t property_id = kInFormatsBlobPropIdBase; + + for (size_t crtc_idx = 0; crtc_idx < crtc_states.size(); ++crtc_idx) { + crtc_properties[crtc_idx].id = kPrimaryCrtc + crtc_idx; + for (const auto& pair : crtc_property_names) { + crtc_properties[crtc_idx].properties.push_back( + {/* .id = */ pair.first, /* .value = */ 0}); + } + + connector_properties[crtc_idx].id = kPrimaryConnector + crtc_idx; + for (const auto& pair : connector_property_names) { + connector_properties[crtc_idx].properties.push_back( + {/* .id = */ pair.first, /* .value = */ 0}); + } + + std::vector<ui::MockDrmDevice::PlaneProperties> crtc_plane_properties( + crtc_states[crtc_idx].planes.size()); + + for (size_t plane_idx = 0; + plane_idx < crtc_states[crtc_idx].planes.size(); ++plane_idx) { + crtc_plane_properties[plane_idx].id = plane_id++; + crtc_plane_properties[plane_idx].crtc_mask = 1 << crtc_idx; + + for (const auto& pair : plane_property_names) { + uint64_t value = 0; + switch (pair.first) { + case kTypePropId: + value = plane_idx == 0 ? DRM_PLANE_TYPE_PRIMARY + : DRM_PLANE_TYPE_OVERLAY; + break; + case kInFormatsPropId: + value = property_id++; + drm_->SetPropertyBlob(ui::MockDrmDevice::AllocateInFormatsBlob( + value, crtc_states[crtc_idx].planes[plane_idx].formats, + std::vector<drm_format_modifier>())); + break; + case kPlaneCrtcidId: + value = crtc_properties[crtc_idx].id; + break; + default: + break; + } + + crtc_plane_properties[plane_idx].properties.push_back( + {/* .id = */ pair.first, /* .value = */ value}); + } + } + plane_properties.insert(plane_properties.end(), + crtc_plane_properties.begin(), + crtc_plane_properties.end()); + } + + std::map<uint32_t, std::string> property_names = {}; + property_names.insert(crtc_property_names.begin(), + crtc_property_names.end()); + property_names.insert(connector_property_names.begin(), + connector_property_names.end()); + property_names.insert(plane_property_names.begin(), + plane_property_names.end()); + + drm_->InitializeState(crtc_properties, connector_properties, + plane_properties, property_names, + /* use_atomic= */ true); + } gfx::Rect GetPrimaryBounds() const { return gfx::Rect(0, 0, kDefaultMode.hdisplay, kDefaultMode.vdisplay); @@ -63,6 +176,7 @@ device_manager_ = std::make_unique<ui::DrmDeviceManager>(nullptr); screen_manager_ = std::make_unique<ui::ScreenManager>(); } + void TearDown() override { screen_manager_.reset(); drm_ = nullptr; @@ -201,6 +315,24 @@ } TEST_F(ScreenManagerTest, CheckMirrorModeTransitions) { + std::vector<CrtcState> crtc_states = { + { + /* .planes = */ + { + {/* .formats = */ {DRM_FORMAT_XRGB8888}}, + {/* .formats = */ {DRM_FORMAT_XRGB8888, DRM_FORMAT_NV12}}, + }, + }, + { + /* .planes = */ + { + {/* .formats = */ {DRM_FORMAT_XRGB8888}}, + {/* .formats = */ {DRM_FORMAT_XRGB8888, DRM_FORMAT_NV12}}, + }, + }, + }; + InitializeDrmState(crtc_states, /*atomic=*/true); + screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); screen_manager_->ConfigureDisplayController( drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), @@ -352,6 +484,24 @@ } TEST_F(ScreenManagerTest, CheckMirrorModeAfterBeginReEnabled) { + std::vector<CrtcState> crtc_states = { + { + /* .planes = */ + { + {/* .formats = */ {DRM_FORMAT_XRGB8888}}, + {/* .formats = */ {DRM_FORMAT_XRGB8888, DRM_FORMAT_NV12}}, + }, + }, + { + /* .planes = */ + { + {/* .formats = */ {DRM_FORMAT_XRGB8888}}, + {/* .formats = */ {DRM_FORMAT_XRGB8888, DRM_FORMAT_NV12}}, + }, + }, + }; + InitializeDrmState(crtc_states, /*atomic=*/true); + screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); screen_manager_->ConfigureDisplayController( drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(),
diff --git a/ui/strings/app_locale_settings.grd b/ui/strings/app_locale_settings.grd index a62426e9..c07b66b 100644 --- a/ui/strings/app_locale_settings.grd +++ b/ui/strings/app_locale_settings.grd
@@ -30,6 +30,7 @@ <output filename="app_locale_settings_sq.pak" type="data_package" lang="sq" /> <output filename="app_locale_settings_ur.pak" type="data_package" lang="ur" /> <output filename="app_locale_settings_uz.pak" type="data_package" lang="uz" /> + <output filename="app_locale_settings_zh-HK.pak" type="data_package" lang="zh-HK" /> <output filename="app_locale_settings_zu.pak" type="data_package" lang="zu" /> </if> <output filename="app_locale_settings_am.pak" type="data_package" lang="am" />
diff --git a/ui/strings/ui_strings.grd b/ui/strings/ui_strings.grd index 3e80013..2ce4a26 100644 --- a/ui/strings/ui_strings.grd +++ b/ui/strings/ui_strings.grd
@@ -42,6 +42,7 @@ <output filename="ui_strings_sq.pak" type="data_package" lang="sq" /> <output filename="ui_strings_ur.pak" type="data_package" lang="ur" /> <output filename="ui_strings_uz.pak" type="data_package" lang="uz" /> + <output filename="ui_strings_zh-HK.pak" type="data_package" lang="zh-HK" /> <output filename="ui_strings_zu.pak" type="data_package" lang="zu" /> </if> <output filename="ui_strings_am.pak" type="data_package" lang="am" />
diff --git a/ui/views/accessibility/view_accessibility.cc b/ui/views/accessibility/view_accessibility.cc index 18edcd3..e91e9b11 100644 --- a/ui/views/accessibility/view_accessibility.cc +++ b/ui/views/accessibility/view_accessibility.cc
@@ -324,6 +324,10 @@ return view_->GetNativeViewAccessible(); } +void ViewAccessibility::FireFocusAfterMenuClose() { + NotifyAccessibilityEvent(ax::mojom::Event::kFocusAfterMenuClose); +} + const ViewAccessibility::AccessibilityEventsCallback& ViewAccessibility::accessibility_events_callback() const { return accessibility_events_callback_;
diff --git a/ui/views/accessibility/view_accessibility.h b/ui/views/accessibility/view_accessibility.h index ae85a7d1..4d63d95 100644 --- a/ui/views/accessibility/view_accessibility.h +++ b/ui/views/accessibility/view_accessibility.h
@@ -144,6 +144,8 @@ // native accessibility object associated with this view. gfx::NativeViewAccessible GetFocusedDescendant(); + virtual void FireFocusAfterMenuClose(); + // Used for testing. Allows a test to watch accessibility events. const AccessibilityEventsCallback& accessibility_events_callback() const; void set_accessibility_events_callback(AccessibilityEventsCallback callback);
diff --git a/ui/views/accessibility/view_ax_platform_node_delegate.cc b/ui/views/accessibility/view_ax_platform_node_delegate.cc index f9302c66a..b44d8d5 100644 --- a/ui/views/accessibility/view_ax_platform_node_delegate.cc +++ b/ui/views/accessibility/view_ax_platform_node_delegate.cc
@@ -219,6 +219,29 @@ ui::AXPlatformNode::SetPopupFocusOverride(nullptr); } +void ViewAXPlatformNodeDelegate::FireFocusAfterMenuClose() { + ui::AXPlatformNodeBase* focused_node = + static_cast<ui::AXPlatformNodeBase*>(ax_platform_node_); + // Continue to drill down focused nodes to get to the "deepest" node that is + // focused, this is not necessarily a view. (It could be web content.) + while (focused_node) { + ui::AXPlatformNodeBase* deeper_focus = static_cast<ui::AXPlatformNodeBase*>( + ui::AXPlatformNode::FromNativeViewAccessible(focused_node->GetFocus())); + if (!deeper_focus || deeper_focus == focused_node) + break; + focused_node = deeper_focus; + } + if (focused_node) { + // callback used for testing + if (accessibility_events_callback_) + accessibility_events_callback_.Run( + this, ax::mojom::Event::kFocusAfterMenuClose); + + focused_node->NotifyAccessibilityEvent( + ax::mojom::Event::kFocusAfterMenuClose); + } +} + // ui::AXPlatformNodeDelegate const ui::AXNodeData& ViewAXPlatformNodeDelegate::GetData() const {
diff --git a/ui/views/accessibility/view_ax_platform_node_delegate.h b/ui/views/accessibility/view_ax_platform_node_delegate.h index 4566df7..c10ccab 100644 --- a/ui/views/accessibility/view_ax_platform_node_delegate.h +++ b/ui/views/accessibility/view_ax_platform_node_delegate.h
@@ -46,6 +46,7 @@ #if defined(OS_MACOSX) void AnnounceText(const base::string16& text) override; #endif + void FireFocusAfterMenuClose() override; // ui::AXPlatformNodeDelegate const ui::AXNodeData& GetData() const override;
diff --git a/ui/views/accessibility/view_ax_platform_node_delegate_unittest.cc b/ui/views/accessibility/view_ax_platform_node_delegate_unittest.cc index 92884462..56d1cb1d 100644 --- a/ui/views/accessibility/view_ax_platform_node_delegate_unittest.cc +++ b/ui/views/accessibility/view_ax_platform_node_delegate_unittest.cc
@@ -8,6 +8,7 @@ #include "ui/accessibility/ax_action_data.h" #include "ui/accessibility/ax_enums.mojom.h" #include "ui/accessibility/ax_node_data.h" +#include "ui/accessibility/platform/ax_platform_node_base.h" #include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/rect_conversions.h" #include "ui/gfx/geometry/size.h" @@ -389,6 +390,26 @@ EXPECT_EQ(node_data_2.GetHasPopup(), ax::mojom::HasPopup::kMenu); } +TEST_F(ViewAXPlatformNodeDelegateTest, FocusOnMenuClose) { + // Set Focus on the button + button_->SetFocusBehavior(View::FocusBehavior::ALWAYS); + EXPECT_EQ(nullptr, button_->GetFocusManager()->GetFocusedView()); + EXPECT_EQ(nullptr, button_accessibility()->GetFocus()); + + EXPECT_TRUE(SetFocused(button_accessibility(), true)); + EXPECT_EQ(button_->GetNativeViewAccessible(), + button_accessibility()->GetFocus()); + + // Fire FocusAfterMenuClose event on the button. + base::RunLoop run_loop; + ui::AXPlatformNodeBase::SetOnNotifyEventCallbackForTesting( + ax::mojom::Event::kFocusAfterMenuClose, run_loop.QuitClosure()); + button_accessibility()->FireFocusAfterMenuClose(); + run_loop.Run(); + EXPECT_EQ(button_->GetNativeViewAccessible(), + button_accessibility()->GetFocus()); +} + #if defined(USE_AURA) class DerivedTestView : public View { public:
diff --git a/ui/views/animation/ink_drop_impl.cc b/ui/views/animation/ink_drop_impl.cc index 70d85734..248bd6b 100644 --- a/ui/views/animation/ink_drop_impl.cc +++ b/ui/views/animation/ink_drop_impl.cc
@@ -10,6 +10,7 @@ #include "ui/compositor/layer.h" #include "ui/views/animation/ink_drop_highlight.h" #include "ui/views/animation/ink_drop_host_view.h" +#include "ui/views/animation/ink_drop_util.h" #include "ui/views/animation/square_ink_drop_ripple.h" #include "ui/views/style/platform_style.h" @@ -750,6 +751,11 @@ highlight_ = ink_drop_host_->CreateInkDropHighlight(); DCHECK(highlight_); + // If the platform provides HC colors, we need to show them fully on hover and + // press. + if (views::UsingPlatformHighContrastInkDrop(ink_drop_host_)) + highlight_->set_visible_opacity(1.0f); + highlight_->set_observer(this); root_layer_->Add(highlight_->layer()); AddRootLayerToHostIfNeeded();
diff --git a/ui/views/animation/ink_drop_util.cc b/ui/views/animation/ink_drop_util.cc index 4344d479..1e5bbb1 100644 --- a/ui/views/animation/ink_drop_util.cc +++ b/ui/views/animation/ink_drop_util.cc
@@ -11,6 +11,9 @@ #include "ui/gfx/geometry/safe_integer_conversions.h" #include "ui/gfx/geometry/vector2d_f.h" #include "ui/gfx/transform.h" +#include "ui/native_theme/native_theme.h" +#include "ui/views/view.h" +#include "ui/views/views_features.h" namespace views { @@ -51,4 +54,13 @@ return subpixel_correction; } +bool UsingPlatformHighContrastInkDrop(const View* view) { + const ui::NativeTheme* theme = view->GetNativeTheme(); + return theme && + theme->GetDefaultSystemColorScheme() == + ui::NativeTheme::ColorScheme::kPlatformHighContrast && + base::FeatureList::IsEnabled( + features::kEnablePlatformHighContrastInkDrop); +} + } // namespace views
diff --git a/ui/views/animation/ink_drop_util.h b/ui/views/animation/ink_drop_util.h index 883b789..f92e202 100644 --- a/ui/views/animation/ink_drop_util.h +++ b/ui/views/animation/ink_drop_util.h
@@ -12,6 +12,7 @@ } // namespace gfx namespace views { +class View; // A layer |transform| may add an offset to its layer relative to the parent // layer. This offset does not take into consideration the subpixel positioning. @@ -22,6 +23,8 @@ const gfx::Transform& transform, float device_scale_factor); +VIEWS_EXPORT bool UsingPlatformHighContrastInkDrop(const View* view); + } // namespace views #endif // UI_VIEWS_ANIMATION_INK_DROP_UTIL_H_
diff --git a/ui/views/controls/menu/menu_runner_impl.cc b/ui/views/controls/menu/menu_runner_impl.cc index cc93c94..6ec84aa 100644 --- a/ui/views/controls/menu/menu_runner_impl.cc +++ b/ui/views/controls/menu/menu_runner_impl.cc
@@ -7,7 +7,10 @@ #include <memory> #include "build/build_config.h" +#include "ui/accessibility/ax_enums.mojom.h" +#include "ui/accessibility/platform/ax_platform_node_base.h" #include "ui/native_theme/native_theme.h" +#include "ui/views/accessibility/view_accessibility.h" #include "ui/views/controls/button/menu_button_controller.h" #include "ui/views/controls/menu/menu_controller.h" #include "ui/views/controls/menu/menu_delegate.h" @@ -24,6 +27,24 @@ #endif namespace views { + +namespace { + +// This should be called after the menu has closed, to fire a focus event on +// the previously focused node in the parent widget, if one exists. +void FireFocusAfterMenuClose(base::WeakPtr<Widget> widget) { + if (widget) { + FocusManager* focus_manager = widget->GetFocusManager(); + if (focus_manager && focus_manager->GetFocusedView()) { + focus_manager->GetFocusedView() + ->GetViewAccessibility() + .FireFocusAfterMenuClose(); + } + } +} + +} // namespace + namespace internal { #if !defined(OS_MACOSX) @@ -162,8 +183,14 @@ void MenuRunnerImpl::OnMenuClosed(NotifyType type, MenuItemView* menu, int mouse_event_flags) { - if (controller_) + base::WeakPtr<Widget> parent_widget; + if (controller_) { closing_event_time_ = controller_->closing_event_time(); + // Get a pointer to the parent widget before destroying the menu. + if (controller_->owner()) + parent_widget = controller_->owner()->GetWeakPtr(); + } + menu_->RemoveEmptyMenus(); menu_->set_controller(nullptr); @@ -177,6 +204,7 @@ // destroyed. menu_->DestroyAllMenuHosts(); if (delete_after_run_) { + FireFocusAfterMenuClose(parent_widget); delete this; return; } @@ -193,6 +221,7 @@ if (ref && type == NOTIFY_DELEGATE) menu_->GetDelegate()->OnMenuClosed(menu); } + FireFocusAfterMenuClose(parent_widget); } void MenuRunnerImpl::SiblingMenuCreated(MenuItemView* menu) {
diff --git a/ui/views/controls/menu/menu_runner_unittest.cc b/ui/views/controls/menu/menu_runner_unittest.cc index 748b0b9..503b2d38 100644 --- a/ui/views/controls/menu/menu_runner_unittest.cc +++ b/ui/views/controls/menu/menu_runner_unittest.cc
@@ -15,6 +15,8 @@ #include "ui/base/ui_base_types.h" #include "ui/events/keycodes/dom/dom_code.h" #include "ui/events/test/event_generator.h" +#include "ui/views/accessibility/view_accessibility.h" +#include "ui/views/controls/button/label_button.h" #include "ui/views/controls/menu/menu_controller.h" #include "ui/views/controls/menu/menu_delegate.h" #include "ui/views/controls/menu/menu_item_view.h" @@ -28,6 +30,7 @@ #include "ui/views/test/views_test_base.h" #include "ui/views/widget/native_widget_private.h" #include "ui/views/widget/widget.h" +#include "ui/views/widget/widget_delegate.h" #include "ui/views/widget/widget_utils.h" namespace { @@ -611,5 +614,120 @@ EXPECT_EQ(nullptr, menu_controller.controller()); } +TEST_F(MenuRunnerImplTest, FocusOnMenuClose) { + internal::MenuRunnerImpl* menu_runner = + new internal::MenuRunnerImpl(menu_item_view()); + + // Create test button that has focus. + LabelButton* button = + new LabelButton(nullptr, base::string16(), style::CONTEXT_BUTTON); + button->SetID(1); + button->SetSize(gfx::Size(20, 20)); + owner()->GetRootView()->AddChildView(button); + button->SetFocusBehavior(View::FocusBehavior::ALWAYS); + button->GetWidget()->widget_delegate()->SetCanActivate(true); + button->GetWidget()->Activate(); + button->RequestFocus(); + + // Open the menu. + menu_runner->RunMenuAt(owner(), nullptr, gfx::Rect(), + MenuAnchorPosition::kTopLeft, 0); + + MenuControllerTestApi menu_controller; + menu_controller.SetShowing(false); + + // Test that closing the menu sends the kFocusAfterMenuClose event. + bool focus_after_menu_close_sent = false; + ViewAccessibility::AccessibilityEventsCallback accessibility_events_callback = + base::BindRepeating( + [](bool* focus_after_menu_close_sent, + const ui::AXPlatformNodeDelegate* delegate, + const ax::mojom::Event event_type) { + if (event_type == ax::mojom::Event::kFocusAfterMenuClose) + *focus_after_menu_close_sent = true; + }, + &focus_after_menu_close_sent); + button->GetViewAccessibility().set_accessibility_events_callback( + std::move(accessibility_events_callback)); + menu_runner->OnMenuClosed(internal::MenuControllerDelegate::NOTIFY_DELEGATE, + nullptr, 0); + + EXPECT_TRUE(focus_after_menu_close_sent); + + // Set the callback to a no-op to avoid accessing + // "focus_after_menu_close_sent" after this test has completed. + button->GetViewAccessibility().set_accessibility_events_callback( + base::DoNothing()); + + menu_runner->Release(); +} + +TEST_F(MenuRunnerImplTest, FocusOnMenuCloseDeleteAfterRun) { + // Create test button that has focus. + LabelButton* button = + new LabelButton(nullptr, base::string16(), style::CONTEXT_BUTTON); + button->SetID(1); + button->SetSize(gfx::Size(20, 20)); + owner()->GetRootView()->AddChildView(button); + button->SetFocusBehavior(View::FocusBehavior::ALWAYS); + button->GetWidget()->widget_delegate()->SetCanActivate(true); + button->GetWidget()->Activate(); + button->RequestFocus(); + + internal::MenuRunnerImpl* menu_runner = + new internal::MenuRunnerImpl(menu_item_view()); + menu_runner->RunMenuAt(owner(), nullptr, gfx::Rect(), + MenuAnchorPosition::kTopLeft, 0); + + // Hide the menu, and clear its item selection state. + MenuControllerTestApi menu_controller; + menu_controller.SetShowing(false); + menu_controller.ClearState(); + + std::unique_ptr<TestMenuDelegate> menu_delegate2(new TestMenuDelegate); + MenuItemView* menu_item_view2 = new MenuItemView(menu_delegate2.get()); + menu_item_view2->AppendMenuItem(1, base::ASCIIToUTF16("One")); + + internal::MenuRunnerImpl* menu_runner2 = + new internal::MenuRunnerImpl(menu_item_view2); + menu_runner2->RunMenuAt(owner(), nullptr, gfx::Rect(), + MenuAnchorPosition::kTopLeft, MenuRunner::FOR_DROP); + + EXPECT_NE(menu_controller.controller(), MenuController::GetActiveInstance()); + menu_controller.SetShowing(true); + + // Test that closing the menu sends the kFocusAfterMenuClose event. + bool focus_after_menu_close_sent = false; + ViewAccessibility::AccessibilityEventsCallback accessibility_events_callback = + base::BindRepeating( + [](bool* focus_after_menu_close_sent, + const ui::AXPlatformNodeDelegate* delegate, + const ax::mojom::Event event_type) { + if (event_type == ax::mojom::Event::kFocusAfterMenuClose) + *focus_after_menu_close_sent = true; + }, + &focus_after_menu_close_sent); + button->GetViewAccessibility().set_accessibility_events_callback( + std::move(accessibility_events_callback)); + menu_runner2->Release(); + + EXPECT_TRUE(focus_after_menu_close_sent); + focus_after_menu_close_sent = false; + menu_runner->Release(); + + EXPECT_TRUE(focus_after_menu_close_sent); + + // Set the callback to a no-op to avoid accessing + // "focus_after_menu_close_sent" after this test has completed. + button->GetViewAccessibility().set_accessibility_events_callback( + base::DoNothing()); + + // This is not expected to run, however this is from the origin ASAN stack + // traces. So regressions will be caught with the same stack trace. + if (menu_controller.controller()) + menu_controller.controller()->Cancel(MenuController::ExitType::kAll); + EXPECT_EQ(nullptr, menu_controller.controller()); +} + } // namespace test } // namespace views
diff --git a/ui/views/views_features.cc b/ui/views/views_features.cc index fc67bd13..210657b 100644 --- a/ui/views/views_features.cc +++ b/ui/views/views_features.cc
@@ -11,12 +11,17 @@ // Please keep alphabetized. -// Increases corner radius on Dialogs for the material design refresh. +// Increase corner radius on Dialogs for the material design refresh. // TODO(tluk): Remove this feature flag when platform inconsistencies // have been fixed as recorded on: https://crbug.com/932970 const base::Feature kEnableMDRoundedCornersOnDialogs{ "EnableMDRoundedCornersOnDialogs", base::FEATURE_DISABLED_BY_DEFAULT}; +// Use a high-contrast style for ink drops when in platform high-contrast mode, +// including full opacity and a high-contrast color +const base::Feature kEnablePlatformHighContrastInkDrop{ + "EnablePlatformHighContrastInkDrop", base::FEATURE_DISABLED_BY_DEFAULT}; + // Only paint views that are invalidated/dirty (i.e. a paint was directly // scheduled on those views) as opposed to painting all views that intersect // an invalid rectangle on the layer.
diff --git a/ui/views/views_features.h b/ui/views/views_features.h index aa207b8..1daff6d 100644 --- a/ui/views/views_features.h +++ b/ui/views/views_features.h
@@ -15,6 +15,7 @@ // Please keep alphabetized. VIEWS_EXPORT extern const base::Feature kEnableMDRoundedCornersOnDialogs; +VIEWS_EXPORT extern const base::Feature kEnablePlatformHighContrastInkDrop; VIEWS_EXPORT extern const base::Feature kEnableViewPaintOptimization; } // namespace features
diff --git a/ui/views/widget/widget.cc b/ui/views/widget/widget.cc index 7bffabb..750f064 100644 --- a/ui/views/widget/widget.cc +++ b/ui/views/widget/widget.cc
@@ -1074,6 +1074,10 @@ weak_ptr_factory_.GetWeakPtr()); } +base::WeakPtr<Widget> Widget::GetWeakPtr() { + return weak_ptr_factory_.GetWeakPtr(); +} + bool Widget::ShouldPaintAsActive() const { return native_widget_active_ || paint_as_active_refcount_; }
diff --git a/ui/views/widget/widget.h b/ui/views/widget/widget.h index 849e2271..108a170 100644 --- a/ui/views/widget/widget.h +++ b/ui/views/widget/widget.h
@@ -879,6 +879,8 @@ // returned lock can safely outlive the associated widget. std::unique_ptr<PaintAsActiveLock> LockPaintAsActive(); + base::WeakPtr<Widget> GetWeakPtr(); + // Overridden from NativeWidgetDelegate: bool IsModal() const override; bool IsDialogBox() const override;
diff --git a/ui/views/window/dialog_delegate.cc b/ui/views/window/dialog_delegate.cc index f3a5cba..c584769 100644 --- a/ui/views/window/dialog_delegate.cc +++ b/ui/views/window/dialog_delegate.cc
@@ -141,14 +141,31 @@ } bool DialogDelegate::Cancel() { + if (cancel_callback_) + std::move(cancel_callback_).Run(); return true; } bool DialogDelegate::Accept() { + if (accept_callback_) + std::move(accept_callback_).Run(); return true; } bool DialogDelegate::Close() { + if (close_callback_ || cancel_callback_ || accept_callback_) { + if (close_callback_) + std::move(close_callback_).Run(); + return true; + } else { + return DefaultClose(); + } +} + +bool DialogDelegate::DefaultClose() { + DCHECK(!close_callback_); + DCHECK(!cancel_callback_); + DCHECK(!accept_callback_); int buttons = GetDialogButtons(); if ((buttons & ui::DIALOG_BUTTON_CANCEL) || (buttons == ui::DIALOG_BUTTON_NONE)) {
diff --git a/ui/views/window/dialog_delegate.h b/ui/views/window/dialog_delegate.h index 976589a..76daeb5c 100644 --- a/ui/views/window/dialog_delegate.h +++ b/ui/views/window/dialog_delegate.h
@@ -112,21 +112,28 @@ // this is called when the user presses the "Cancel" button. // It can also be called on a close action if |Close| has not been // overridden. This function should return true if the window can be closed - // after it returns, or false if it must remain open. + // after it returns, or false if it must remain open. By default, return true + // without doing anything. + // DEPRECATED: use |set_cancel_callback| instead. virtual bool Cancel(); // For Dialog boxes, this is called when the user presses the "OK" button, // or the Enter key. It can also be called on a close action if |Close| // has not been overridden. This function should return true if the window - // can be closed after it returns, or false if it must remain open. + // can be closed after it returns, or false if it must remain open. By + // default, return true without doing anything. + // DEPRECATED: use |set_accept_callback| instead. virtual bool Accept(); - // Called when the user closes the window without selecting an option, - // e.g. by pressing the close button on the window, pressing the Esc key, or - // using a window manager gesture. By default, this calls Accept() if the only - // button in the dialog is Accept, Cancel() otherwise. This function should - // return true if the window can be closed after it returns, or false if it - // must remain open. + // Called when the user closes the window without selecting an option, e.g. by + // pressing the close button on the window, pressing the Esc key, or using a + // window manager gesture. By default, this calls Accept() if the only button + // in the dialog is Accept, Cancel() otherwise. This function should return + // true if the window can be closed after it returns, or false if it must + // remain open. + // DEPRECATED: use |set_close_callback| instead. + // NOTE: If **any** of the {accept,cancel,close} callbacks is set, + // DefaultClose() is not called and closing is unconditional. virtual bool Close(); // Overridden from WidgetDelegate: @@ -187,6 +194,16 @@ params_.button_labels[button] = label; } + void set_accept_callback(base::OnceClosure callback) { + accept_callback_ = std::move(callback); + } + void set_cancel_callback(base::OnceClosure callback) { + cancel_callback_ = std::move(callback); + } + void set_close_callback(base::OnceClosure callback) { + close_callback_ = std::move(callback); + } + // Returns ownership of the extra view for this dialog, if one was provided // via SetExtraView(). This is only for use by DialogClientView; don't call // it. @@ -260,6 +277,10 @@ const DialogClientView* GetDialogClientView() const; DialogClientView* GetDialogClientView(); + // Implements the default close behavior, as described in the comment on + // Close() above. + bool DefaultClose(); + // The margins between the content and the inside of the border. // TODO(crbug.com/733040): Most subclasses assume they must set their own // margins explicitly, so we set them to 0 here for now to avoid doubled @@ -281,6 +302,11 @@ // Observers for DialogModel changes. base::ObserverList<DialogObserver>::Unchecked observer_list_; + // Callbacks for the dialog's actions: + base::OnceClosure accept_callback_; + base::OnceClosure cancel_callback_; + base::OnceClosure close_callback_; + DISALLOW_COPY_AND_ASSIGN(DialogDelegate); };
diff --git a/ui/views/window/dialog_delegate_unittest.cc b/ui/views/window/dialog_delegate_unittest.cc index d0baec6a..abb4d0a 100644 --- a/ui/views/window/dialog_delegate_unittest.cc +++ b/ui/views/window/dialog_delegate_unittest.cc
@@ -6,6 +6,7 @@ #include "base/stl_util.h" #include "base/strings/utf_string_conversions.h" +#include "base/test/bind_test_util.h" #include "build/build_config.h" #include "ui/base/hit_test.h" #include "ui/events/event_processor.h" @@ -432,4 +433,24 @@ dialog_widget->CloseNow(); } +using DialogDelegateCloseTest = ViewsTestBase; + +TEST_F(DialogDelegateCloseTest, AnyCallbackInhibitsDefaultClose) { + DialogDelegateView dialog; + + bool cancelled = false; + bool accepted = false; + + dialog.set_cancel_callback( + base::BindLambdaForTesting([&]() { cancelled = true; })); + dialog.set_accept_callback( + base::BindLambdaForTesting([&]() { accepted = true; })); + + // At this point DefaultClose() would invoke either Accept() or Cancel(). + EXPECT_TRUE(dialog.Close()); + + EXPECT_FALSE(cancelled); + EXPECT_FALSE(accepted); +} + } // namespace views
diff --git a/ui/webui/resources/cr_elements/cr_searchable_drop_down/cr_searchable_drop_down.js b/ui/webui/resources/cr_elements/cr_searchable_drop_down/cr_searchable_drop_down.js index 012377f..80c589c2 100644 --- a/ui/webui/resources/cr_elements/cr_searchable_drop_down/cr_searchable_drop_down.js +++ b/ui/webui/resources/cr_elements/cr_searchable_drop_down/cr_searchable_drop_down.js
@@ -9,6 +9,10 @@ * If the update-value-on-input flag is set, value will be set to whatever is * in the input box. Otherwise, value will only be set when an element in items * is clicked. + * + * The |invalid| property tracks whether the user's current text input in the + * dropdown matches the previously saved dropdown value. This property can be + * used to disable certain user actions when the dropdown is invalid. */ Polymer({ is: 'cr-searchable-drop-down', @@ -48,6 +52,20 @@ placeholder: String, + /** + * Used to track in real time if the |value| in cr-searchable-drop-down + * matches the value in the underlying cr-input. These values will differ + * after a user types in input that does not match a valid dropdown option. + * |invalid| is always false when |updateValueOnInput| is set to true. This + * is because when |updateValueOnInput| is set to true, we are not setting a + * restrictive set of valid options. + */ + invalid: { + type: Boolean, + value: false, + notify: true, + }, + /** @type {!Array<string>} */ items: { type: Array, @@ -58,6 +76,7 @@ value: { type: String, notify: true, + observer: 'updateInvalid_', }, /** @type {string} */ @@ -357,6 +376,9 @@ // but scollable dropdown. Refitting the dropdown allows it to expand to // accommodate the new items. this.enqueueDropdownRefit_(); + + // Need check to if the input is valid when the user types. + this.updateInvalid_(); }, /* @@ -421,5 +443,18 @@ if (!this.updateValueOnInput) { this.$.search.value = this.value; } - } + + // Need check to if the input is valid when the dropdown loses focus. + this.updateInvalid_(); + }, + + /** + * If |updateValueOnInput| is true then any value is allowable so always set + * |invalid| to false. + * @private + */ + updateInvalid_: function () { + this.invalid = + !this.updateValueOnInput && (this.value !== this.$.search.value); + }, });
diff --git a/weblayer/BUILD.gn b/weblayer/BUILD.gn index 4b6d8f6b..fb19aba 100644 --- a/weblayer/BUILD.gn +++ b/weblayer/BUILD.gn
@@ -145,6 +145,7 @@ "common/features.h", "common/weblayer_paths.cc", "common/weblayer_paths.h", + "public/browser.cc", "public/browser.h", "public/browser_observer.h", "public/common/switches.cc",
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/BrowserFragmentLifecycleTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/BrowserFragmentLifecycleTest.java index eb580a5..c303a82 100644 --- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/BrowserFragmentLifecycleTest.java +++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/BrowserFragmentLifecycleTest.java
@@ -74,10 +74,7 @@ latch.await(); } - @Test - @SmallTest - public void restoresPreviousSession() throws InterruptedException { - Bundle extras = new Bundle(); + private void restoresPreviousSession(Bundle extras) throws InterruptedException { extras.putString(InstrumentationActivity.EXTRA_PERSISTENCE_ID, "x"); final String url = mActivityTestRule.getTestDataURL("simple_page.html"); InstrumentationActivity activity = mActivityTestRule.launchShellWithUrl(url, extras); @@ -108,4 +105,19 @@ }); latch.await(); } + + @Test + @SmallTest + public void restoresPreviousSession() throws InterruptedException { + restoresPreviousSession(new Bundle()); + } + + @Test + @SmallTest + public void restoresPreviousSessionIncognito() throws InterruptedException { + Bundle extras = new Bundle(); + // This forces incognito. + extras.putString(InstrumentationActivity.EXTRA_PROFILE_NAME, null); + restoresPreviousSession(extras); + } }
diff --git a/weblayer/browser/autofill_client_impl.cc b/weblayer/browser/autofill_client_impl.cc index eff26ae..af9000f 100644 --- a/weblayer/browser/autofill_client_impl.cc +++ b/weblayer/browser/autofill_client_impl.cc
@@ -239,6 +239,22 @@ // take. } +base::span<const autofill::Suggestion> AutofillClientImpl::GetPopupSuggestions() + const { + NOTIMPLEMENTED(); + return base::span<const autofill::Suggestion>(); +} + +void AutofillClientImpl::PinPopupViewUntilUpdate() { + NOTIMPLEMENTED(); +} + +void AutofillClientImpl::UpdatePopup( + const std::vector<autofill::Suggestion>& suggestions, + autofill::PopupType popup_type) { + NOTREACHED(); +} + bool AutofillClientImpl::IsAutocompleteEnabled() { NOTREACHED(); return false;
diff --git a/weblayer/browser/autofill_client_impl.h b/weblayer/browser/autofill_client_impl.h index fe09837..e64bbc1 100644 --- a/weblayer/browser/autofill_client_impl.h +++ b/weblayer/browser/autofill_client_impl.h
@@ -113,6 +113,10 @@ void UpdateAutofillPopupDataListValues( const std::vector<base::string16>& values, const std::vector<base::string16>& labels) override; + base::span<const autofill::Suggestion> GetPopupSuggestions() const override; + void PinPopupViewUntilUpdate() override; + void UpdatePopup(const std::vector<autofill::Suggestion>& suggestions, + autofill::PopupType popup_type) override; void HideAutofillPopup(autofill::PopupHidingReason reason) override; bool IsAutocompleteEnabled() override; void PropagateAutofillPredictions(
diff --git a/weblayer/browser/browser_impl.cc b/weblayer/browser/browser_impl.cc index 85180d7..ed9b3e5 100644 --- a/weblayer/browser/browser_impl.cc +++ b/weblayer/browser/browser_impl.cc
@@ -17,6 +17,7 @@ #if defined(OS_ANDROID) #include "base/android/callback_android.h" +#include "base/android/jni_array.h" #include "base/android/jni_string.h" #include "base/json/json_writer.h" #include "weblayer/browser/java/jni/BrowserImpl_jni.h" @@ -24,26 +25,28 @@ namespace weblayer { -std::unique_ptr<Browser> Browser::Create(Profile* profile, - const std::string& persistence_id) { +std::unique_ptr<Browser> Browser::Create( + Profile* profile, + const PersistenceInfo* persistence_info) { return std::make_unique<BrowserImpl>(static_cast<ProfileImpl*>(profile), - persistence_id); + persistence_info); } #if defined(OS_ANDROID) BrowserImpl::BrowserImpl(ProfileImpl* profile, - const std::string& persistence_id, + const PersistenceInfo* persistence_info, const base::android::JavaParamRef<jobject>& java_impl) - : BrowserImpl(profile, persistence_id) { + : BrowserImpl(profile, persistence_info) { java_impl_ = java_impl; } #endif BrowserImpl::BrowserImpl(ProfileImpl* profile, - const std::string& persistence_id) - : profile_(profile), persistence_id_(persistence_id) { - if (!persistence_id.empty()) - CreateSessionServiceAndRestore(); + const PersistenceInfo* persistence_info) + : profile_(profile), + persistence_id_(persistence_info ? persistence_info->id : std::string()) { + if (persistence_info) + CreateSessionServiceAndRestore(*persistence_info); } BrowserImpl::~BrowserImpl() { @@ -121,7 +124,23 @@ JNIEnv* env, const base::android::JavaParamRef<jobject>& caller) { return base::android::ScopedJavaLocalRef<jstring>( - base::android::ConvertUTF8ToJavaString(env, persistence_id_)); + base::android::ConvertUTF8ToJavaString(env, GetPersistenceId())); +} + +void BrowserImpl::SaveSessionServiceIfNecessary( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& caller) { + session_service_->SaveIfNecessary(); +} + +base::android::ScopedJavaLocalRef<jbyteArray> +BrowserImpl::GetSessionServiceCryptoKey( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& caller) { + std::vector<uint8_t> key; + if (session_service_) + key = session_service_->GetCryptoKey(); + return base::android::ToJavaByteArray(env, key); } #endif @@ -197,7 +216,7 @@ session_service_.reset(); } -const std::string& BrowserImpl::GetPersistenceId() { +std::string BrowserImpl::GetPersistenceId() { return persistence_id_; } @@ -217,27 +236,42 @@ } else { base_path = profile_->data_path().AppendASCII("Restore Data"); } - const std::string encoded_name = base32::Base32Encode(persistence_id_); + DCHECK(!GetPersistenceId().empty()); + const std::string encoded_name = base32::Base32Encode(GetPersistenceId()); return base_path.AppendASCII("State" + encoded_name); } -void BrowserImpl::CreateSessionServiceAndRestore() { - session_service_ = - std::make_unique<SessionService>(GetSessionServiceDataPath(), this); +void BrowserImpl::CreateSessionServiceAndRestore( + const PersistenceInfo& persistence_info) { + session_service_ = std::make_unique<SessionService>( + GetSessionServiceDataPath(), this, persistence_info.last_crypto_key); } #if defined(OS_ANDROID) static jlong JNI_BrowserImpl_CreateBrowser( JNIEnv* env, jlong profile, - const base::android::JavaParamRef<jstring>& persistence_id, + const base::android::JavaParamRef<jstring>& j_persistence_id, + const base::android::JavaParamRef<jbyteArray>& j_persistence_crypto_key, const base::android::JavaParamRef<jobject>& java_impl) { - return reinterpret_cast<intptr_t>(new BrowserImpl( - reinterpret_cast<ProfileImpl*>(profile), - persistence_id.obj() - ? base::android::ConvertJavaStringToUTF8(persistence_id) - : std::string(), - java_impl)); + Browser::PersistenceInfo persistence_info; + Browser::PersistenceInfo* persistence_info_ptr = nullptr; + + if (j_persistence_id.obj()) { + const std::string persistence_id = + base::android::ConvertJavaStringToUTF8(j_persistence_id); + if (!persistence_id.empty()) { + persistence_info.id = persistence_id; + if (j_persistence_crypto_key.obj()) { + base::android::JavaByteArrayToByteVector( + env, j_persistence_crypto_key, &(persistence_info.last_crypto_key)); + } + persistence_info_ptr = &persistence_info; + } + } + return reinterpret_cast<intptr_t>( + new BrowserImpl(reinterpret_cast<ProfileImpl*>(profile), + persistence_info_ptr, java_impl)); } static void JNI_BrowserImpl_DeleteBrowser(JNIEnv* env, jlong browser) {
diff --git a/weblayer/browser/browser_impl.h b/weblayer/browser/browser_impl.h index feb5f69c..271d4a40 100644 --- a/weblayer/browser/browser_impl.h +++ b/weblayer/browser/browser_impl.h
@@ -34,10 +34,10 @@ public: #if defined(OS_ANDROID) BrowserImpl(ProfileImpl* profile, - const std::string& persistence_id, + const PersistenceInfo* persistence_info, const base::android::JavaParamRef<jobject>& java_impl); #endif - BrowserImpl(ProfileImpl* profile, const std::string& persistence_id); + BrowserImpl(ProfileImpl* profile, const PersistenceInfo* persistence_info); ~BrowserImpl() override; BrowserImpl(const BrowserImpl&) = delete; BrowserImpl& operator=(const BrowserImpl&) = delete; @@ -70,6 +70,12 @@ base::android::ScopedJavaLocalRef<jstring> GetPersistenceId( JNIEnv* env, const base::android::JavaParamRef<jobject>& caller); + void SaveSessionServiceIfNecessary( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& caller); + base::android::ScopedJavaLocalRef<jbyteArray> GetSessionServiceCryptoKey( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& caller); #endif // Browser: @@ -79,12 +85,12 @@ Tab* GetActiveTab() override; const std::vector<Tab*>& GetTabs() override; void PrepareForShutdown() override; - const std::string& GetPersistenceId() override; + std::string GetPersistenceId() override; void AddObserver(BrowserObserver* observer) override; void RemoveObserver(BrowserObserver* observer) override; private: - void CreateSessionServiceAndRestore(); + void CreateSessionServiceAndRestore(const PersistenceInfo& persistence_info); // Returns the path used by |session_service_|. base::FilePath GetSessionServiceDataPath();
diff --git a/weblayer/browser/download_browsertest.cc b/weblayer/browser/download_browsertest.cc index 3c0a588..6d52c1fa 100644 --- a/weblayer/browser/download_browsertest.cc +++ b/weblayer/browser/download_browsertest.cc
@@ -166,7 +166,7 @@ // Downloads always count as failed navigations. TestNavigationObserver observer( - url, TestNavigationObserver::NavigationEvent::Failure, shell()); + url, TestNavigationObserver::NavigationEvent::kFailure, shell()); shell()->tab()->GetNavigationController()->Navigate(url); observer.Wait();
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/BrowserFragmentImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/BrowserFragmentImpl.java index e58c622..64363d1 100644 --- a/weblayer/browser/java/org/chromium/weblayer_private/BrowserFragmentImpl.java +++ b/weblayer/browser/java/org/chromium/weblayer_private/BrowserFragmentImpl.java
@@ -93,6 +93,13 @@ mContext = null; } + @Override + public void onSaveInstanceState(Bundle outState) { + StrictModeWorkaround.apply(); + mBrowser.onSaveInstanceState(outState); + super.onSaveInstanceState(outState); + } + public IBrowserFragment asIBrowserFragment() { return new IBrowserFragment.Stub() { @Override
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/BrowserImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/BrowserImpl.java index 375b2b6..f3e0210c 100644 --- a/weblayer/browser/java/org/chromium/weblayer_private/BrowserImpl.java +++ b/weblayer/browser/java/org/chromium/weblayer_private/BrowserImpl.java
@@ -36,6 +36,9 @@ public class BrowserImpl extends IBrowser.Stub { private static final ObserverList<Observer> sLifecycleObservers = new ObserverList<Observer>(); + public static final String SAVED_STATE_SESSION_SERVICE_CRYPTO_KEY = + "SAVED_STATE_SESSION_SERVICE_CRYPTO_KEY"; + private long mNativeBrowser; private final ProfileImpl mProfile; private BrowserViewController mViewController; @@ -64,8 +67,11 @@ public BrowserImpl(ProfileImpl profile, String persistenceId, Bundle savedInstanceState) { mProfile = profile; - mNativeBrowser = - BrowserImplJni.get().createBrowser(profile.getNativeProfile(), persistenceId, this); + byte[] cryptoKey = savedInstanceState != null + ? savedInstanceState.getByteArray(SAVED_STATE_SESSION_SERVICE_CRYPTO_KEY) + : null; + mNativeBrowser = BrowserImplJni.get().createBrowser( + profile.getNativeProfile(), persistenceId, cryptoKey, this); for (Observer observer : sLifecycleObservers) { observer.onBrowserCreated(); @@ -104,6 +110,17 @@ updateAllTabs(); } + public void onSaveInstanceState(Bundle outState) { + if (mProfile.isIncognito() + && !BrowserImplJni.get().getPersistenceId(mNativeBrowser, this).isEmpty()) { + // Trigger a save now as saving may generate a new crypto key. This doesn't actually + // save synchronously, rather triggers a save on a background task runner. + BrowserImplJni.get().saveSessionServiceIfNecessary(mNativeBrowser, this); + outState.putByteArray(SAVED_STATE_SESSION_SERVICE_CRYPTO_KEY, + BrowserImplJni.get().getSessionServiceCryptoKey(mNativeBrowser, this)); + } + } + public void onActivityResult(int requestCode, int resultCode, Intent data) { if (mWindowAndroid != null) { mWindowAndroid.onActivityResult(requestCode, resultCode, data); @@ -286,7 +303,8 @@ @NativeMethods interface Natives { - long createBrowser(long profile, String persistenceId, BrowserImpl caller); + long createBrowser(long profile, String persistenceId, byte[] persistenceCryptoKey, + BrowserImpl caller); void deleteBrowser(long browser); void addTab(long nativeBrowserImpl, BrowserImpl browser, long nativeTab); void removeTab(long nativeBrowserImpl, BrowserImpl browser, long nativeTab); @@ -295,5 +313,7 @@ TabImpl getActiveTab(long nativeBrowserImpl, BrowserImpl browser); void prepareForShutdown(long nativeBrowserImpl, BrowserImpl browser); String getPersistenceId(long nativeBrowserImpl, BrowserImpl browser); + void saveSessionServiceIfNecessary(long nativeBrowserImpl, BrowserImpl browser); + byte[] getSessionServiceCryptoKey(long nativeBrowserImpl, BrowserImpl browser); } }
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/ProfileImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/ProfileImpl.java index fadd825..22ad5d45 100644 --- a/weblayer/browser/java/org/chromium/weblayer_private/ProfileImpl.java +++ b/weblayer/browser/java/org/chromium/weblayer_private/ProfileImpl.java
@@ -51,6 +51,10 @@ return mName; } + public boolean isIncognito() { + return mName.isEmpty(); + } + @Override public void clearBrowsingData(@NonNull @BrowsingDataType int[] dataTypes, long fromMillis, long toMillis, @NonNull IObjectWrapper completionCallback) {
diff --git a/weblayer/browser/session_service.cc b/weblayer/browser/session_service.cc index 6d90d91..a21a7f91 100644 --- a/weblayer/browser/session_service.cc +++ b/weblayer/browser/session_service.cc
@@ -59,23 +59,37 @@ // SessionService ------------------------------------------------------------- -SessionService::SessionService(const base::FilePath& path, BrowserImpl* browser) +SessionService::SessionService(const base::FilePath& path, + BrowserImpl* browser, + const std::vector<uint8_t>& decryption_key) : browser_(browser), browser_session_id_(SessionID::NewUnique()), command_storage_manager_( - std::make_unique<sessions::CommandStorageManager>(path, this)), - rebuild_on_next_save_(false) { + std::make_unique<sessions::CommandStorageManager>( + path, + this, + browser->profile()->GetBrowserContext()->IsOffTheRecord())), + rebuild_on_next_save_(false), + crypto_key_(decryption_key) { browser_->AddObserver(this); command_storage_manager_->ScheduleGetCurrentSessionCommands( base::BindOnce(&SessionService::OnGotCurrentSessionCommands, base::Unretained(this)), - &cancelable_task_tracker_); + decryption_key, &cancelable_task_tracker_); } SessionService::~SessionService() { + SaveIfNecessary(); + browser_->RemoveObserver(this); +} + +void SessionService::SaveIfNecessary() { if (command_storage_manager_->HasPendingSave()) command_storage_manager_->Save(); - browser_->RemoveObserver(this); +} + +const std::vector<uint8_t>& SessionService::GetCryptoKey() const { + return crypto_key_; } bool SessionService::ShouldUseDelayedSave() { @@ -93,6 +107,10 @@ BuildCommandsForBrowser(); } +void SessionService::OnGeneratedNewCryptoKey(const std::vector<uint8_t>& key) { + crypto_key_ = key; +} + void SessionService::OnTabAdded(Tab* tab) { content::WebContents* web_contents = static_cast<TabImpl*>(tab)->web_contents();
diff --git a/weblayer/browser/session_service.h b/weblayer/browser/session_service.h index a7a2d81..83faeabc 100644 --- a/weblayer/browser/session_service.h +++ b/weblayer/browser/session_service.h
@@ -5,6 +5,8 @@ #ifndef WEBLAYER_BROWSER_SESSION_SERVICE_H_ #define WEBLAYER_BROWSER_SESSION_SERVICE_H_ +#include <stddef.h> + #include <map> #include <memory> #include <string> @@ -39,13 +41,21 @@ public sessions::SessionTabHelperDelegate, public BrowserObserver { public: - SessionService(const base::FilePath& path, BrowserImpl* browser); + SessionService(const base::FilePath& path, + BrowserImpl* browser, + const std::vector<uint8_t>& decryption_key); SessionService(const SessionService&) = delete; SessionService& operator=(const SessionService&) = delete; ~SessionService() override; + void SaveIfNecessary(); + + // Returns the key used to encrypt the file. Empty if not encrypted. + // Encryption is done when saving and the profile is off the record. + const std::vector<uint8_t>& GetCryptoKey() const; + private: friend class SessionServiceTestHelper; @@ -54,6 +64,7 @@ // CommandStorageManagerDelegate: bool ShouldUseDelayedSave() override; void OnWillSaveCommands() override; + void OnGeneratedNewCryptoKey(const std::vector<uint8_t>& key) override; // BrowserObserver; void OnTabAdded(Tab* tab) override; @@ -112,6 +123,8 @@ // Force session commands to be rebuild before next save event. bool rebuild_on_next_save_; + std::vector<uint8_t> crypto_key_; + base::CancelableTaskTracker cancelable_task_tracker_; };
diff --git a/weblayer/browser/session_service_browsertest.cc b/weblayer/browser/session_service_browsertest.cc index 76e130c..c735122 100644 --- a/weblayer/browser/session_service_browsertest.cc +++ b/weblayer/browser/session_service_browsertest.cc
@@ -163,6 +163,13 @@ run_loop.Run(); } +std::unique_ptr<BrowserImpl> CreateBrowser(ProfileImpl* profile, + const std::string& persistence_id) { + Browser::PersistenceInfo info; + info.id = persistence_id; + return std::make_unique<BrowserImpl>(profile, &info); +} + } // namespace using SessionServiceTest = WebLayerBrowserTest; @@ -170,8 +177,7 @@ IN_PROC_BROWSER_TEST_F(SessionServiceTest, SingleTab) { ASSERT_TRUE(embedded_test_server()->Start()); - std::unique_ptr<BrowserImpl> browser = - std::make_unique<BrowserImpl>(GetProfile(), "x"); + std::unique_ptr<BrowserImpl> browser = CreateBrowser(GetProfile(), "x"); std::unique_ptr<Tab> tab = Tab::Create(GetProfile()); browser->AddTab(tab.get()); const GURL url = embedded_test_server()->GetURL("/simple_page.html"); @@ -180,7 +186,7 @@ tab.reset(); browser.reset(); - browser = std::make_unique<BrowserImpl>(GetProfile(), "x"); + browser = CreateBrowser(GetProfile(), "x"); // Should be no tabs while waiting for restore. EXPECT_TRUE(browser->GetTabs().empty()); // Wait for the restore and navigation to complete. @@ -197,8 +203,7 @@ IN_PROC_BROWSER_TEST_F(SessionServiceTest, TwoTabs) { ASSERT_TRUE(embedded_test_server()->Start()); - std::unique_ptr<BrowserImpl> browser = - std::make_unique<BrowserImpl>(GetProfile(), "x"); + std::unique_ptr<BrowserImpl> browser = CreateBrowser(GetProfile(), "x"); std::unique_ptr<Tab> tab1 = Tab::Create(GetProfile()); browser->AddTab(tab1.get()); const GURL url1 = embedded_test_server()->GetURL("/simple_page.html"); @@ -218,7 +223,7 @@ tab2.reset(); browser.reset(); - browser = std::make_unique<BrowserImpl>(GetProfile(), "x"); + browser = CreateBrowser(GetProfile(), "x"); // Should be no tabs while waiting for restore. EXPECT_TRUE(browser->GetTabs().empty()) << "iteration " << i; // Wait for the restore and navigation to complete. This waits for the @@ -246,8 +251,7 @@ ASSERT_TRUE(embedded_test_server()->Start()); // Create a browser with two tabs. - std::unique_ptr<BrowserImpl> browser1 = - std::make_unique<BrowserImpl>(GetProfile(), "x"); + std::unique_ptr<BrowserImpl> browser1 = CreateBrowser(GetProfile(), "x"); std::unique_ptr<Tab> tab1 = Tab::Create(GetProfile()); browser1->AddTab(tab1.get()); const GURL url1 = embedded_test_server()->GetURL("/simple_page.html"); @@ -260,8 +264,7 @@ browser1->SetActiveTab(tab2.get()); // Create another browser with a single tab. - std::unique_ptr<BrowserImpl> browser2 = - std::make_unique<BrowserImpl>(GetProfile(), "y"); + std::unique_ptr<BrowserImpl> browser2 = CreateBrowser(GetProfile(), "y"); std::unique_ptr<Tab> tab3 = Tab::Create(GetProfile()); browser2->AddTab(tab3.get()); const GURL url3 = embedded_test_server()->GetURL("/simple_page3.html"); @@ -281,7 +284,7 @@ browser2.reset(); // Restore the browsers. - browser1 = std::make_unique<BrowserImpl>(GetProfile(), "x"); + browser1 = CreateBrowser(GetProfile(), "x"); BrowserNavigationObserverImpl::WaitForNewTabToCompleteNavigation( browser1.get(), url1, 1); ASSERT_EQ(1u, browser1->GetTabs().size()); @@ -289,7 +292,7 @@ ->GetNavigationController() ->GetNavigationListSize()); - browser2 = std::make_unique<BrowserImpl>(GetProfile(), "y"); + browser2 = CreateBrowser(GetProfile(), "y"); BrowserNavigationObserverImpl::WaitForNewTabToCompleteNavigation( browser2.get(), url2, 2); ASSERT_EQ(2u, browser2->GetTabs().size());
diff --git a/weblayer/browser/ssl_browsertest.cc b/weblayer/browser/ssl_browsertest.cc index 26c6a39..f0274fa 100644 --- a/weblayer/browser/ssl_browsertest.cc +++ b/weblayer/browser/ssl_browsertest.cc
@@ -136,7 +136,7 @@ ASSERT_TRUE(IsShowingSSLInterstitial(shell()->tab())); TestNavigationObserver navigation_observer( - expected_url, TestNavigationObserver::NavigationEvent::Completion, + expected_url, TestNavigationObserver::NavigationEvent::kCompletion, shell()); ExecuteScript(shell(), "window.certificateErrorPageController." + @@ -167,7 +167,7 @@ // login URL, so simply detect the start of the navigation to the page. TestNavigationObserver navigation_observer( GetCaptivePortalLoginPageUrlForTesting(), - TestNavigationObserver::NavigationEvent::Start, shell()); + TestNavigationObserver::NavigationEvent::kStart, shell()); ExecuteScript(shell(), "window.certificateErrorPageController.openLogin();", false /*use_separate_isolate*/); navigation_observer.Wait();
diff --git a/weblayer/public/browser.cc b/weblayer/public/browser.cc new file mode 100644 index 0000000..513ab4aa --- /dev/null +++ b/weblayer/public/browser.cc
@@ -0,0 +1,16 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "weblayer/public/browser.h" + +namespace weblayer { + +Browser::PersistenceInfo::PersistenceInfo() = default; + +Browser::PersistenceInfo::PersistenceInfo(const PersistenceInfo& other) = + default; + +Browser::PersistenceInfo::~PersistenceInfo() = default; + +} // namespace weblayer
diff --git a/weblayer/public/browser.h b/weblayer/public/browser.h index a035f7c..133499a 100644 --- a/weblayer/public/browser.h +++ b/weblayer/public/browser.h
@@ -5,6 +5,8 @@ #ifndef WEBLAYER_PUBLIC_BROWSER_H_ #define WEBLAYER_PUBLIC_BROWSER_H_ +#include <stddef.h> + #include <memory> #include <string> #include <vector> @@ -19,10 +21,24 @@ // the set of Tabs. class Browser { public: - // Creates a new Browser. |persistence_id|, if non-empty, is used for saving + struct PersistenceInfo { + PersistenceInfo(); + PersistenceInfo(const PersistenceInfo& other); + ~PersistenceInfo(); + + // Uniquely identifies this browser for session restore, empty is a not a + // valid id. + std::string id; + + // Last key used to encrypt incognito profile. + std::vector<uint8_t> last_crypto_key; + }; + + // Creates a new Browser. |persistence_info|, if non-null, is used for saving // and restoring the state of the browser. - static std::unique_ptr<Browser> Create(Profile* profile, - const std::string& persistence_id); + static std::unique_ptr<Browser> Create( + Profile* profile, + const PersistenceInfo* persistence_info); virtual ~Browser() {} @@ -36,7 +52,7 @@ virtual void PrepareForShutdown() = 0; // Returns the id supplied to Create() that is used for persistence. - virtual const std::string& GetPersistenceId() = 0; + virtual std::string GetPersistenceId() = 0; virtual void AddObserver(BrowserObserver* observer) = 0; virtual void RemoveObserver(BrowserObserver* observer) = 0;
diff --git a/weblayer/public/java/org/chromium/weblayer/WebLayer.java b/weblayer/public/java/org/chromium/weblayer/WebLayer.java index adca8de3..3be323a 100644 --- a/weblayer/public/java/org/chromium/weblayer/WebLayer.java +++ b/weblayer/public/java/org/chromium/weblayer/WebLayer.java
@@ -396,8 +396,8 @@ * @param profileName Null to indicate in-memory profile. Otherwise, name cannot be empty * and should contain only alphanumeric and underscore characters since it will be used as * a directory name in the file system. - * @param persistenceId If non-null (which includes an empty string) uniquely identifies the - * Browser for saving state. + * @param persistenceId If non-null and not empty uniquely identifies the Browser for saving + * state. * * @since 81 */
diff --git a/weblayer/test/test_navigation_observer.cc b/weblayer/test/test_navigation_observer.cc index bd51125..fde7688 100644 --- a/weblayer/test/test_navigation_observer.cc +++ b/weblayer/test/test_navigation_observer.cc
@@ -33,20 +33,21 @@ // Note: We don't go through CheckNavigationCompleted() here as that waits // for the load to be complete, which isn't appropriate when just waiting for // the navigation to be started. - if (navigation->GetURL() == url_ && target_event_ == NavigationEvent::Start) { + if (navigation->GetURL() == url_ && + target_event_ == NavigationEvent::kStart) { run_loop_.Quit(); } } void TestNavigationObserver::NavigationCompleted(Navigation* navigation) { if (navigation->GetURL() == url_) - observed_event_ = NavigationEvent::Completion; + observed_event_ = NavigationEvent::kCompletion; CheckNavigationCompleted(); } void TestNavigationObserver::NavigationFailed(Navigation* navigation) { if (navigation->GetURL() == url_) - observed_event_ = NavigationEvent::Failure; + observed_event_ = NavigationEvent::kFailure; CheckNavigationCompleted(); }
diff --git a/weblayer/test/test_navigation_observer.h b/weblayer/test/test_navigation_observer.h index 818042d..f578f03 100644 --- a/weblayer/test/test_navigation_observer.h +++ b/weblayer/test/test_navigation_observer.h
@@ -19,7 +19,7 @@ // A helper that waits for a navigation to finish. class TestNavigationObserver : public NavigationObserver { public: - enum class NavigationEvent { Start, Completion, Failure }; + enum class NavigationEvent { kStart, kCompletion, kFailure }; // Creates an instance that begins waiting for a Navigation within |shell| and // to |url| to reach the specified |target_event|.
diff --git a/weblayer/test/weblayer_browser_test_utils.cc b/weblayer/test/weblayer_browser_test_utils.cc index eea58cf..265d3d7 100644 --- a/weblayer/test/weblayer_browser_test_utils.cc +++ b/weblayer/test/weblayer_browser_test_utils.cc
@@ -31,17 +31,17 @@ void NavigateAndWaitForCompletion(const GURL& url, Shell* shell) { NavigateAndWaitForEvent(url, shell->tab(), - TestNavigationObserver::NavigationEvent::Completion); + TestNavigationObserver::NavigationEvent::kCompletion); } void NavigateAndWaitForCompletion(const GURL& url, Tab* tab) { NavigateAndWaitForEvent(url, tab, - TestNavigationObserver::NavigationEvent::Completion); + TestNavigationObserver::NavigationEvent::kCompletion); } void NavigateAndWaitForFailure(const GURL& url, Shell* shell) { NavigateAndWaitForEvent(url, shell->tab(), - TestNavigationObserver::NavigationEvent::Failure); + TestNavigationObserver::NavigationEvent::kFailure); } base::Value ExecuteScript(Shell* shell,